"compile/internal/gc",
"compile/internal/ppc64",
"compile/internal/x86",
- "internal/asm",
"internal/gcprog",
"internal/obj",
"internal/obj/arm",
"link/internal/ld",
"link/internal/ppc64",
"link/internal/x86",
- "old5a",
- "old6a",
- "old8a",
- "old9a",
}
func bootstrapBuildTools() {
return ofile, output, err
}
-// verifyAsm specifies whether to check the assemblers written in Go
-// against the assemblers written in C. If set, asm will run both asm and (say) 6a
-// and fail if the two produce different output files.
-const verifyAsm = true
-
func (gcToolchain) asm(b *builder, p *Package, obj, ofile, sfile string) error {
// Add -I pkg/GOOS_GOARCH so #include "textflag.h" works in .s files.
inc := filepath.Join(goroot, "pkg", "include")
if err := b.run(p.Dir, p.ImportPath, nil, args...); err != nil {
return err
}
- // Disable checks when additional flags are passed, as the old assemblers
- // don't implement some of them (e.g., -shared).
- if verifyAsm && len(buildAsmflags) == 0 {
- old := ""
- switch goarch {
- case "arm":
- old = "old5a"
- case "amd64", "amd64p32":
- old = "old6a"
- case "386":
- old = "old8a"
- case "ppc64", "ppc64le":
- old = "old9a"
- }
- if old != "" {
- if err := toolVerify(b, p, old, ofile, args); err != nil {
- return err
- }
- }
- }
return nil
}
// toolVerify checks that the command line args writes the same output file
// if run using newTool instead.
+// Unused now but kept around for future use.
func toolVerify(b *builder, p *Package, newTool string, ofile string, args []interface{}) error {
newArgs := make([]interface{}, len(args))
copy(newArgs, args)
"cmd/newlink": toTool,
"cmd/nm": toTool,
"cmd/objdump": toTool,
- "cmd/old5a": toTool,
- "cmd/old6a": toTool,
- "cmd/old8a": toTool,
- "cmd/old9a": toTool,
"cmd/pack": toTool,
"cmd/pprof": toTool,
"cmd/trace": toTool,
+++ /dev/null
-// Inferno utils/5a/a.y
-// http://code.google.com/p/inferno-os/source/browse/utils/5a/a.y
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-%{
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/arm"
-)
-%}
-
-%union {
- sym *asm.Sym
- lval int32
- dval float64
- sval string
- addr obj.Addr
-}
-
-%left '|'
-%left '^'
-%left '&'
-%left '<' '>'
-%left '+' '-'
-%left '*' '/' '%'
-%token <lval> LTYPE1 LTYPE2 LTYPE3 LTYPE4 LTYPE5
-%token <lval> LTYPE6 LTYPE7 LTYPE8 LTYPE9 LTYPEA
-%token <lval> LTYPEB LTYPEC LTYPED LTYPEE
-%token <lval> LTYPEG LTYPEH LTYPEI LTYPEJ LTYPEK
-%token <lval> LTYPEL LTYPEM LTYPEN LTYPEBX LTYPEPLD
-%token <lval> LCONST LSP LSB LFP LPC
-%token <lval> LTYPEX LTYPEPC LTYPEF LR LREG LF LFREG LC LCREG LPSR LFCR
-%token <lval> LCOND LS LAT LGLOBL
-%token <dval> LFCONST
-%token <sval> LSCONST
-%token <sym> LNAME LLAB LVAR
-%type <lval> con expr oexpr pointer offset sreg spreg creg
-%type <lval> rcon cond reglist
-%type <addr> gen rel reg regreg freg shift fcon frcon textsize
-%type <addr> imm ximm name oreg ireg nireg ioreg imsr
-%%
-prog:
-| prog
- {
- stmtline = asm.Lineno;
- }
- line
-
-line:
- LNAME ':'
- {
- $1 = asm.LabelLookup($1);
- if $1.Type == LLAB && $1.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", $1.Labelname)
- }
- $1.Type = LLAB;
- $1.Value = int64(asm.PC)
- }
- line
-| LNAME '=' expr ';'
- {
- $1.Type = LVAR;
- $1.Value = int64($3);
- }
-| LVAR '=' expr ';'
- {
- if $1.Value != int64($3) {
- yyerror("redeclaration of %s", $1.Name)
- }
- $1.Value = int64($3);
- }
-| ';'
-| inst ';'
-| error ';'
-
-inst:
-/*
- * ADD
- */
- LTYPE1 cond imsr ',' spreg ',' reg
- {
- outcode($1, $2, &$3, $5, &$7);
- }
-| LTYPE1 cond imsr ',' spreg ','
- {
- outcode($1, $2, &$3, $5, &nullgen);
- }
-| LTYPE1 cond imsr ',' reg
- {
- outcode($1, $2, &$3, 0, &$5);
- }
-/*
- * MVN
- */
-| LTYPE2 cond imsr ',' reg
- {
- outcode($1, $2, &$3, 0, &$5);
- }
-/*
- * MOVW
- */
-| LTYPE3 cond gen ',' gen
- {
- outcode($1, $2, &$3, 0, &$5);
- }
-/*
- * B/BL
- */
-| LTYPE4 cond comma rel
- {
- outcode($1, $2, &nullgen, 0, &$4);
- }
-| LTYPE4 cond comma nireg
- {
- outcode($1, $2, &nullgen, 0, &$4);
- }
-/*
- * BX
- */
-| LTYPEBX comma ireg
- {
- outcode($1, Always, &nullgen, 0, &$3);
- }
-/*
- * BEQ
- */
-| LTYPE5 comma rel
- {
- outcode($1, Always, &nullgen, 0, &$3);
- }
-/*
- * SWI
- */
-| LTYPE6 cond comma gen
- {
- outcode($1, $2, &nullgen, 0, &$4);
- }
-/*
- * CMP
- */
-| LTYPE7 cond imsr ',' spreg comma
- {
- outcode($1, $2, &$3, $5, &nullgen);
- }
-/*
- * MOVM
- */
-| LTYPE8 cond ioreg ',' '[' reglist ']'
- {
- var g obj.Addr
-
- g = nullgen;
- g.Type = obj.TYPE_REGLIST;
- g.Offset = int64($6);
- outcode($1, $2, &$3, 0, &g);
- }
-| LTYPE8 cond '[' reglist ']' ',' ioreg
- {
- var g obj.Addr
-
- g = nullgen;
- g.Type = obj.TYPE_REGLIST;
- g.Offset = int64($4);
- outcode($1, $2, &g, 0, &$7);
- }
-/*
- * SWAP
- */
-| LTYPE9 cond reg ',' ireg ',' reg
- {
- outcode($1, $2, &$5, int32($3.Reg), &$7);
- }
-| LTYPE9 cond reg ',' ireg comma
- {
- outcode($1, $2, &$5, int32($3.Reg), &$3);
- }
-| LTYPE9 cond comma ireg ',' reg
- {
- outcode($1, $2, &$4, int32($6.Reg), &$6);
- }
-/*
- * RET
- */
-| LTYPEA cond comma
- {
- outcode($1, $2, &nullgen, 0, &nullgen);
- }
-/*
- * TEXT
- */
-| LTYPEB name ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode($1, Always, &$2, 0, &$5);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTYPEB name ',' con ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode($1, Always, &$2, 0, &$7);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST;
- lastpc.From3.Offset = int64($4)
- }
- }
-/*
- * GLOBL
- */
-| LGLOBL name ',' imm
- {
- asm.Settext($2.Sym)
- outcode($1, Always, &$2, 0, &$4)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LGLOBL name ',' con ',' imm
- {
- asm.Settext($2.Sym)
- outcode($1, Always, &$2, 0, &$6)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = int64($4)
- }
- }
-
-/*
- * DATA
- */
-| LTYPEC name '/' con ',' ximm
- {
- outcode($1, Always, &$2, 0, &$6)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = int64($4)
- }
- }
-/*
- * CASE
- */
-| LTYPED cond reg comma
- {
- outcode($1, $2, &$3, 0, &nullgen);
- }
-/*
- * word
- */
-| LTYPEH comma ximm
- {
- outcode($1, Always, &nullgen, 0, &$3);
- }
-/*
- * floating-point coprocessor
- */
-| LTYPEI cond freg ',' freg
- {
- outcode($1, $2, &$3, 0, &$5);
- }
-| LTYPEK cond frcon ',' freg
- {
- outcode($1, $2, &$3, 0, &$5);
- }
-| LTYPEK cond frcon ',' LFREG ',' freg
- {
- outcode($1, $2, &$3, $5, &$7);
- }
-| LTYPEL cond freg ',' freg comma
- {
- outcode($1, $2, &$3, int32($5.Reg), &nullgen);
- }
-/*
- * MCR MRC
- */
-| LTYPEJ cond con ',' expr ',' spreg ',' creg ',' creg oexpr
- {
- var g obj.Addr
-
- g = nullgen;
- g.Type = obj.TYPE_CONST;
- g.Offset = int64(
- (0xe << 24) | /* opcode */
- ($1 << 20) | /* MCR/MRC */
- (($2^C_SCOND_XOR) << 28) | /* scond */
- (($3 & 15) << 8) | /* coprocessor number */
- (($5 & 7) << 21) | /* coprocessor operation */
- (($7 & 15) << 12) | /* arm register */
- (($9 & 15) << 16) | /* Crn */
- (($11 & 15) << 0) | /* Crm */
- (($12 & 7) << 5) | /* coprocessor information */
- (1<<4)); /* must be set */
- outcode(AMRC, Always, &nullgen, 0, &g);
- }
-/*
- * MULL r1,r2,(hi,lo)
- */
-| LTYPEM cond reg ',' reg ',' regreg
- {
- outcode($1, $2, &$3, int32($5.Reg), &$7);
- }
-/*
- * MULA r1,r2,r3,r4: (r1*r2+r3) & 0xffffffff . r4
- * MULAW{T,B} r1,r2,r3,r4
- */
-| LTYPEN cond reg ',' reg ',' reg ',' spreg
- {
- $7.Type = obj.TYPE_REGREG2;
- $7.Offset = int64($9);
- outcode($1, $2, &$3, int32($5.Reg), &$7);
- }
-/*
- * PLD
- */
-| LTYPEPLD oreg
- {
- outcode($1, Always, &$2, 0, &nullgen);
- }
-/*
- * PCDATA
- */
-| LTYPEPC gen ',' gen
- {
- if $2.Type != obj.TYPE_CONST || $4.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants")
- }
- outcode($1, Always, &$2, 0, &$4);
- }
-/*
- * FUNCDATA
- */
-| LTYPEF gen ',' gen
- {
- if $2.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if $4.Type != obj.NAME_EXTERN && $4.Type != obj.NAME_STATIC && $4.Type != obj.TYPE_MEM {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- outcode($1, Always, &$2, 0, &$4);
- }
-/*
- * END
- */
-| LTYPEE comma
- {
- outcode($1, Always, &nullgen, 0, &nullgen);
- }
-
-textsize:
- LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = int64($1)
- $$.Val = int32(obj.ArgsSizeUnknown)
- }
-| '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -int64($2)
- $$.Val = int32(obj.ArgsSizeUnknown)
- }
-| LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = int64($1)
- $$.Val = int32($3);
- }
-| '-' LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -int64($2)
- $$.Val = int32($4);
- }
-
-cond:
- {
- $$ = Always;
- }
-| cond LCOND
- {
- $$ = ($1 & ^ C_SCOND) | $2;
- }
-| cond LS
- {
- $$ = $1 | $2;
- }
-
-comma:
-| ',' comma
-
-rel:
- con '(' LPC ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = int64($1) + int64(asm.PC);
- }
-| LNAME offset
- {
- $1 = asm.LabelLookup($1);
- $$ = nullgen;
- if asm.Pass == 2 && $1.Type != LLAB {
- yyerror("undefined label: %s", $1.Labelname)
- }
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1.Value + int64($2);
- }
-
-ximm: '$' con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- $$.Offset = int64($2);
- }
-| '$' oreg
- {
- $$ = $2;
- $$.Type = obj.TYPE_ADDR;
- }
-| '$' LSCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SCONST;
- $$.Val = $2
- }
-| fcon
-
-fcon:
- '$' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $2;
- }
-| '$' '-' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$3;
- }
-
-reglist:
- spreg
- {
- $$ = 1 << uint($1&15);
- }
-| spreg '-' spreg
- {
- $$=0;
- for i:=$1; i<=$3; i++ {
- $$ |= 1<<uint(i&15)
- }
- for i:=$3; i<=$1; i++ {
- $$ |= 1<<uint(i&15)
- }
- }
-| spreg comma reglist
- {
- $$ = (1<<uint($1&15)) | $3;
- }
-
-gen:
- reg
-| ximm
-| shift
-| shift '(' spreg ')'
- {
- $$ = $1;
- $$.Reg = int16($3);
- }
-| LPSR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LFCR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Offset = int64($1);
- }
-| oreg
-| freg
-
-nireg:
- ireg
-| name
- {
- $$ = $1;
- if($1.Name != obj.NAME_EXTERN && $1.Name != obj.NAME_STATIC) {
- }
- }
-
-ireg:
- '(' spreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($2);
- $$.Offset = 0;
- }
-
-ioreg:
- ireg
-| con '(' sreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($3);
- $$.Offset = int64($1);
- }
-
-oreg:
- name
-| name '(' sreg ')'
- {
- $$ = $1;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($3);
- }
-| ioreg
-
-imsr:
- reg
-| imm
-| shift
-
-imm: '$' con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- $$.Offset = int64($2);
- }
-
-reg:
- spreg
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-regreg:
- '(' spreg ',' spreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REGREG;
- $$.Reg = int16($2);
- $$.Offset = int64($4);
- }
-
-shift:
- spreg '<' '<' rcon
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SHIFT;
- $$.Offset = int64($1&15) | int64($4) | (0 << 5);
- }
-| spreg '>' '>' rcon
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SHIFT;
- $$.Offset = int64($1&15) | int64($4) | (1 << 5);
- }
-| spreg '-' '>' rcon
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SHIFT;
- $$.Offset = int64($1&15) | int64($4) | (2 << 5);
- }
-| spreg LAT '>' rcon
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SHIFT;
- $$.Offset = int64($1&15) | int64($4) | (3 << 5);
- }
-
-rcon:
- spreg
- {
- if $$ < REG_R0 || $$ > REG_R15 {
- print("register value out of range\n")
- }
- $$ = (($1&15) << 8) | (1 << 4);
- }
-| con
- {
- if $$ < 0 || $$ >= 32 {
- print("shift value out of range\n")
- }
- $$ = ($1&31) << 7;
- }
-
-sreg:
- LREG
-| LPC
- {
- $$ = REGPC;
- }
-| LR '(' expr ')'
- {
- if $3 < 0 || $3 >= NREG {
- print("register value out of range\n")
- }
- $$ = REG_R0 + $3;
- }
-
-spreg:
- sreg
-| LSP
- {
- $$ = REGSP;
- }
-
-creg:
- LCREG
-| LC '(' expr ')'
- {
- if $3 < 0 || $3 >= NREG {
- print("register value out of range\n")
- }
- $$ = $3; // TODO(rsc): REG_C0+$3
- }
-
-frcon:
- freg
-| fcon
-
-freg:
- LFREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-| LF '(' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16(REG_F0 + $3);
- }
-
-name:
- con '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = int8($3);
- $$.Sym = nil;
- $$.Offset = int64($1);
- }
-| LNAME offset '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = int8($4);
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 0);
- $$.Offset = int64($2);
- }
-| LNAME '<' '>' offset '(' LSB ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = obj.NAME_STATIC;
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 1);
- $$.Offset = int64($4);
- }
-
-offset:
- {
- $$ = 0;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '-' con
- {
- $$ = -$2;
- }
-
-pointer:
- LSB
-| LSP
-| LFP
-
-con:
- LCONST
-| LVAR
- {
- $$ = int32($1.Value);
- }
-| '-' con
- {
- $$ = -$2;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '~' con
- {
- $$ = ^$2;
- }
-| '(' expr ')'
- {
- $$ = $2;
- }
-
-oexpr:
- {
- $$ = 0;
- }
-| ',' expr
- {
- $$ = $2;
- }
-
-expr:
- con
-| expr '+' expr
- {
- $$ = $1 + $3;
- }
-| expr '-' expr
- {
- $$ = $1 - $3;
- }
-| expr '*' expr
- {
- $$ = $1 * $3;
- }
-| expr '/' expr
- {
- $$ = $1 / $3;
- }
-| expr '%' expr
- {
- $$ = $1 % $3;
- }
-| expr '<' '<' expr
- {
- $$ = $1 << uint($4);
- }
-| expr '>' '>' expr
- {
- $$ = $1 >> uint($4);
- }
-| expr '&' expr
- {
- $$ = $1 & $3;
- }
-| expr '^' expr
- {
- $$ = $1 ^ $3;
- }
-| expr '|' expr
- {
- $$ = $1 | $3;
- }
+++ /dev/null
-// Inferno utils/5a/lex.c
-// http://code.google.com/p/inferno-os/source/browse/utils/5a/lex.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-//go:generate go tool yacc a.y
-
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/arm"
-)
-
-var (
- yyerror = asm.Yyerror
- nullgen obj.Addr
- stmtline int32
-)
-
-const Always = arm.C_SCOND_NONE
-
-func main() {
- cinit()
-
- asm.LSCONST = LSCONST
- asm.LCONST = LCONST
- asm.LFCONST = LFCONST
- asm.LNAME = LNAME
- asm.LVAR = LVAR
- asm.LLAB = LLAB
-
- asm.Lexinit = lexinit
- asm.Cclean = cclean
- asm.Yyparse = yyparse
-
- asm.Thechar = '5'
- asm.Thestring = "arm"
- asm.Thelinkarch = &arm.Linkarm
-
- asm.Main()
-}
-
-type yy struct{}
-
-func (yy) Lex(v *yySymType) int {
- var av asm.Yylval
- tok := asm.Yylex(&av)
- v.sym = av.Sym
- v.lval = int32(av.Lval)
- v.sval = av.Sval
- v.dval = av.Dval
- return tok
-}
-
-func (yy) Error(msg string) {
- asm.Yyerror("%s", msg)
-}
-
-func yyparse() {
- yyParse(yy{})
-}
-
-var lexinit = []asm.Lextab{
- {"SP", LSP, obj.NAME_AUTO},
- {"SB", LSB, obj.NAME_EXTERN},
- {"FP", LFP, obj.NAME_PARAM},
- {"PC", LPC, obj.TYPE_BRANCH},
-
- {"R", LR, 0},
-
- {"R0", LREG, arm.REG_R0},
- {"R1", LREG, arm.REG_R1},
- {"R2", LREG, arm.REG_R2},
- {"R3", LREG, arm.REG_R3},
- {"R4", LREG, arm.REG_R4},
- {"R5", LREG, arm.REG_R5},
- {"R6", LREG, arm.REG_R6},
- {"R7", LREG, arm.REG_R7},
- {"R8", LREG, arm.REG_R8},
- {"R9", LREG, arm.REG_R9},
- {"g", LREG, arm.REG_R10}, // avoid unintentionally clobber g using R10
- {"R11", LREG, arm.REG_R11},
- {"R12", LREG, arm.REG_R12},
- {"R13", LREG, arm.REG_R13},
- {"R14", LREG, arm.REG_R14},
- {"R15", LREG, arm.REG_R15},
- {"F", LF, 0},
- {"F0", LFREG, arm.REG_F0},
- {"F1", LFREG, arm.REG_F1},
- {"F2", LFREG, arm.REG_F2},
- {"F3", LFREG, arm.REG_F3},
- {"F4", LFREG, arm.REG_F4},
- {"F5", LFREG, arm.REG_F5},
- {"F6", LFREG, arm.REG_F6},
- {"F7", LFREG, arm.REG_F7},
- {"F8", LFREG, arm.REG_F8},
- {"F9", LFREG, arm.REG_F9},
- {"F10", LFREG, arm.REG_F10},
- {"F11", LFREG, arm.REG_F11},
- {"F12", LFREG, arm.REG_F12},
- {"F13", LFREG, arm.REG_F13},
- {"F14", LFREG, arm.REG_F14},
- {"F15", LFREG, arm.REG_F15},
- {"C", LC, 0},
- {"C0", LCREG, 0},
- {"C1", LCREG, 1},
- {"C2", LCREG, 2},
- {"C3", LCREG, 3},
- {"C4", LCREG, 4},
- {"C5", LCREG, 5},
- {"C6", LCREG, 6},
- {"C7", LCREG, 7},
- {"C8", LCREG, 8},
- {"C9", LCREG, 9},
- {"C10", LCREG, 10},
- {"C11", LCREG, 11},
- {"C12", LCREG, 12},
- {"C13", LCREG, 13},
- {"C14", LCREG, 14},
- {"C15", LCREG, 15},
- {"CPSR", LPSR, arm.REG_CPSR},
- {"SPSR", LPSR, arm.REG_SPSR},
- {"FPSR", LFCR, arm.REG_FPSR},
- {"FPCR", LFCR, arm.REG_FPCR},
- {".EQ", LCOND, arm.C_SCOND_EQ},
- {".NE", LCOND, arm.C_SCOND_NE},
- {".CS", LCOND, arm.C_SCOND_HS},
- {".HS", LCOND, arm.C_SCOND_HS},
- {".CC", LCOND, arm.C_SCOND_LO},
- {".LO", LCOND, arm.C_SCOND_LO},
- {".MI", LCOND, arm.C_SCOND_MI},
- {".PL", LCOND, arm.C_SCOND_PL},
- {".VS", LCOND, arm.C_SCOND_VS},
- {".VC", LCOND, arm.C_SCOND_VC},
- {".HI", LCOND, arm.C_SCOND_HI},
- {".LS", LCOND, arm.C_SCOND_LS},
- {".GE", LCOND, arm.C_SCOND_GE},
- {".LT", LCOND, arm.C_SCOND_LT},
- {".GT", LCOND, arm.C_SCOND_GT},
- {".LE", LCOND, arm.C_SCOND_LE},
- {".AL", LCOND, arm.C_SCOND_NONE},
- {".U", LS, arm.C_UBIT},
- {".S", LS, arm.C_SBIT},
- {".W", LS, arm.C_WBIT},
- {".P", LS, arm.C_PBIT},
- {".PW", LS, arm.C_WBIT | arm.C_PBIT},
- {".WP", LS, arm.C_WBIT | arm.C_PBIT},
- {".F", LS, arm.C_FBIT},
- {".IBW", LS, arm.C_WBIT | arm.C_PBIT | arm.C_UBIT},
- {".IAW", LS, arm.C_WBIT | arm.C_UBIT},
- {".DBW", LS, arm.C_WBIT | arm.C_PBIT},
- {".DAW", LS, arm.C_WBIT},
- {".IB", LS, arm.C_PBIT | arm.C_UBIT},
- {".IA", LS, arm.C_UBIT},
- {".DB", LS, arm.C_PBIT},
- {".DA", LS, 0},
- {"@", LAT, 0},
- {"AND", LTYPE1, arm.AAND},
- {"EOR", LTYPE1, arm.AEOR},
- {"SUB", LTYPE1, arm.ASUB},
- {"RSB", LTYPE1, arm.ARSB},
- {"ADD", LTYPE1, arm.AADD},
- {"ADC", LTYPE1, arm.AADC},
- {"SBC", LTYPE1, arm.ASBC},
- {"RSC", LTYPE1, arm.ARSC},
- {"ORR", LTYPE1, arm.AORR},
- {"BIC", LTYPE1, arm.ABIC},
- {"SLL", LTYPE1, arm.ASLL},
- {"SRL", LTYPE1, arm.ASRL},
- {"SRA", LTYPE1, arm.ASRA},
- {"MUL", LTYPE1, arm.AMUL},
- {"MULA", LTYPEN, arm.AMULA},
- {"DIV", LTYPE1, arm.ADIV},
- {"MOD", LTYPE1, arm.AMOD},
- {"MULL", LTYPEM, arm.AMULL},
- {"MULAL", LTYPEM, arm.AMULAL},
- {"MULLU", LTYPEM, arm.AMULLU},
- {"MULALU", LTYPEM, arm.AMULALU},
- {"MVN", LTYPE2, arm.AMVN}, /* op2 ignored */
- {"MOVB", LTYPE3, arm.AMOVB},
- {"MOVBU", LTYPE3, arm.AMOVBU},
- {"MOVH", LTYPE3, arm.AMOVH},
- {"MOVHU", LTYPE3, arm.AMOVHU},
- {"MOVW", LTYPE3, arm.AMOVW},
- {"MOVD", LTYPE3, arm.AMOVD},
- {"MOVDF", LTYPE3, arm.AMOVDF},
- {"MOVDW", LTYPE3, arm.AMOVDW},
- {"MOVF", LTYPE3, arm.AMOVF},
- {"MOVFD", LTYPE3, arm.AMOVFD},
- {"MOVFW", LTYPE3, arm.AMOVFW},
- {"MOVWD", LTYPE3, arm.AMOVWD},
- {"MOVWF", LTYPE3, arm.AMOVWF},
- {"LDREX", LTYPE3, arm.ALDREX},
- {"LDREXD", LTYPE3, arm.ALDREXD},
- {"STREX", LTYPE9, arm.ASTREX},
- {"STREXD", LTYPE9, arm.ASTREXD},
-
- /*
- {"NEGF", LTYPEI, ANEGF},
- {"NEGD", LTYPEI, ANEGD},
- {"SQTF", LTYPEI, ASQTF},
- {"SQTD", LTYPEI, ASQTD},
- {"RNDF", LTYPEI, ARNDF},
- {"RNDD", LTYPEI, ARNDD},
- {"URDF", LTYPEI, AURDF},
- {"URDD", LTYPEI, AURDD},
- {"NRMF", LTYPEI, ANRMF},
- {"NRMD", LTYPEI, ANRMD},
- */
- {"ABSF", LTYPEI, arm.AABSF},
- {"ABSD", LTYPEI, arm.AABSD},
- {"SQRTF", LTYPEI, arm.ASQRTF},
- {"SQRTD", LTYPEI, arm.ASQRTD},
- {"CMPF", LTYPEL, arm.ACMPF},
- {"CMPD", LTYPEL, arm.ACMPD},
- {"ADDF", LTYPEK, arm.AADDF},
- {"ADDD", LTYPEK, arm.AADDD},
- {"SUBF", LTYPEK, arm.ASUBF},
- {"SUBD", LTYPEK, arm.ASUBD},
- {"MULF", LTYPEK, arm.AMULF},
- {"MULD", LTYPEK, arm.AMULD},
- {"DIVF", LTYPEK, arm.ADIVF},
- {"DIVD", LTYPEK, arm.ADIVD},
- {"B", LTYPE4, arm.AB},
- {"JMP", LTYPE4, arm.AB},
- {"BL", LTYPE4, arm.ABL},
- {"CALL", LTYPE4, arm.ABL},
- {"BX", LTYPEBX, arm.ABX},
- {"BEQ", LTYPE5, arm.ABEQ},
- {"BNE", LTYPE5, arm.ABNE},
- {"BCS", LTYPE5, arm.ABCS},
- {"BHS", LTYPE5, arm.ABHS},
- {"BCC", LTYPE5, arm.ABCC},
- {"BLO", LTYPE5, arm.ABLO},
- {"BMI", LTYPE5, arm.ABMI},
- {"BPL", LTYPE5, arm.ABPL},
- {"BVS", LTYPE5, arm.ABVS},
- {"BVC", LTYPE5, arm.ABVC},
- {"BHI", LTYPE5, arm.ABHI},
- {"BLS", LTYPE5, arm.ABLS},
- {"BGE", LTYPE5, arm.ABGE},
- {"BLT", LTYPE5, arm.ABLT},
- {"BGT", LTYPE5, arm.ABGT},
- {"BLE", LTYPE5, arm.ABLE},
- {"BCASE", LTYPE5, arm.ABCASE},
- {"SWI", LTYPE6, arm.ASWI},
- {"CMP", LTYPE7, arm.ACMP},
- {"TST", LTYPE7, arm.ATST},
- {"TEQ", LTYPE7, arm.ATEQ},
- {"CMN", LTYPE7, arm.ACMN},
- {"MOVM", LTYPE8, arm.AMOVM},
- {"SWPBU", LTYPE9, arm.ASWPBU},
- {"SWPW", LTYPE9, arm.ASWPW},
- {"RET", LTYPEA, obj.ARET},
- {"RFE", LTYPEA, arm.ARFE},
- {"TEXT", LTYPEB, obj.ATEXT},
- {"GLOBL", LGLOBL, obj.AGLOBL},
- {"DATA", LTYPEC, obj.ADATA},
- {"CASE", LTYPED, arm.ACASE},
- {"END", LTYPEE, obj.AEND},
- {"WORD", LTYPEH, arm.AWORD},
- {"NOP", LTYPEI, obj.ANOP},
- {"MCR", LTYPEJ, 0},
- {"MRC", LTYPEJ, 1},
- {"PLD", LTYPEPLD, arm.APLD},
- {"UNDEF", LTYPEE, obj.AUNDEF},
- {"CLZ", LTYPE2, arm.ACLZ},
- {"MULWT", LTYPE1, arm.AMULWT},
- {"MULWB", LTYPE1, arm.AMULWB},
- {"MULAWT", LTYPEN, arm.AMULAWT},
- {"MULAWB", LTYPEN, arm.AMULAWB},
- {"USEFIELD", LTYPEN, obj.AUSEFIELD},
- {"PCDATA", LTYPEPC, obj.APCDATA},
- {"FUNCDATA", LTYPEF, obj.AFUNCDATA},
-}
-
-func cinit() {
-}
-
-func isreg(g *obj.Addr) bool {
- return true
-}
-
-func cclean() {
- outcode(obj.AEND, Always, &nullgen, 0, &nullgen)
-}
-
-var bcode = []int{
- arm.ABEQ,
- arm.ABNE,
- arm.ABCS,
- arm.ABCC,
- arm.ABMI,
- arm.ABPL,
- arm.ABVS,
- arm.ABVC,
- arm.ABHI,
- arm.ABLS,
- arm.ABGE,
- arm.ABLT,
- arm.ABGT,
- arm.ABLE,
- arm.AB,
- obj.ANOP,
-}
-
-var lastpc *obj.Prog
-
-func outcode(a, scond int32, g1 *obj.Addr, reg int32, g2 *obj.Addr) {
- var p *obj.Prog
- var pl *obj.Plist
-
- /* hack to make B.NE etc. work: turn it into the corresponding conditional */
- if a == arm.AB {
- a = int32(bcode[(scond^arm.C_SCOND_XOR)&0xf])
- scond = (scond &^ 0xf) | Always
- }
-
- if asm.Pass == 1 {
- goto out
- }
-
- p = new(obj.Prog)
- *p = obj.Prog{}
- p.Ctxt = asm.Ctxt
- p.As = int16(a)
- p.Lineno = stmtline
- p.Scond = uint8(scond)
- p.From = *g1
- p.Reg = int16(reg)
- p.To = *g2
- p.Pc = int64(asm.PC)
-
- if lastpc == nil {
- pl = obj.Linknewplist(asm.Ctxt)
- pl.Firstpc = p
- } else {
- lastpc.Link = p
- }
- lastpc = p
-
-out:
- if a != obj.AGLOBL && a != obj.ADATA {
- asm.PC++
- }
-}
+++ /dev/null
-//line a.y:32
-package main
-
-import __yyfmt__ "fmt"
-
-//line a.y:32
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/arm"
-)
-
-//line a.y:41
-type yySymType struct {
- yys int
- sym *asm.Sym
- lval int32
- dval float64
- sval string
- addr obj.Addr
-}
-
-const LTYPE1 = 57346
-const LTYPE2 = 57347
-const LTYPE3 = 57348
-const LTYPE4 = 57349
-const LTYPE5 = 57350
-const LTYPE6 = 57351
-const LTYPE7 = 57352
-const LTYPE8 = 57353
-const LTYPE9 = 57354
-const LTYPEA = 57355
-const LTYPEB = 57356
-const LTYPEC = 57357
-const LTYPED = 57358
-const LTYPEE = 57359
-const LTYPEG = 57360
-const LTYPEH = 57361
-const LTYPEI = 57362
-const LTYPEJ = 57363
-const LTYPEK = 57364
-const LTYPEL = 57365
-const LTYPEM = 57366
-const LTYPEN = 57367
-const LTYPEBX = 57368
-const LTYPEPLD = 57369
-const LCONST = 57370
-const LSP = 57371
-const LSB = 57372
-const LFP = 57373
-const LPC = 57374
-const LTYPEX = 57375
-const LTYPEPC = 57376
-const LTYPEF = 57377
-const LR = 57378
-const LREG = 57379
-const LF = 57380
-const LFREG = 57381
-const LC = 57382
-const LCREG = 57383
-const LPSR = 57384
-const LFCR = 57385
-const LCOND = 57386
-const LS = 57387
-const LAT = 57388
-const LGLOBL = 57389
-const LFCONST = 57390
-const LSCONST = 57391
-const LNAME = 57392
-const LLAB = 57393
-const LVAR = 57394
-
-var yyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "'|'",
- "'^'",
- "'&'",
- "'<'",
- "'>'",
- "'+'",
- "'-'",
- "'*'",
- "'/'",
- "'%'",
- "LTYPE1",
- "LTYPE2",
- "LTYPE3",
- "LTYPE4",
- "LTYPE5",
- "LTYPE6",
- "LTYPE7",
- "LTYPE8",
- "LTYPE9",
- "LTYPEA",
- "LTYPEB",
- "LTYPEC",
- "LTYPED",
- "LTYPEE",
- "LTYPEG",
- "LTYPEH",
- "LTYPEI",
- "LTYPEJ",
- "LTYPEK",
- "LTYPEL",
- "LTYPEM",
- "LTYPEN",
- "LTYPEBX",
- "LTYPEPLD",
- "LCONST",
- "LSP",
- "LSB",
- "LFP",
- "LPC",
- "LTYPEX",
- "LTYPEPC",
- "LTYPEF",
- "LR",
- "LREG",
- "LF",
- "LFREG",
- "LC",
- "LCREG",
- "LPSR",
- "LFCR",
- "LCOND",
- "LS",
- "LAT",
- "LGLOBL",
- "LFCONST",
- "LSCONST",
- "LNAME",
- "LLAB",
- "LVAR",
- "':'",
- "'='",
- "';'",
- "','",
- "'['",
- "']'",
- "'$'",
- "'('",
- "')'",
- "'~'",
-}
-var yyStatenames = [...]string{}
-
-const yyEofCode = 1
-const yyErrCode = 2
-const yyMaxDepth = 200
-
-//line yacctab:1
-var yyExca = [...]int{
- -1, 1,
- 1, -1,
- -2, 2,
- -1, 196,
- 68, 63,
- -2, 53,
-}
-
-const yyNprod = 134
-const yyPrivate = 57344
-
-var yyTokenNames []string
-var yyStates []string
-
-const yyLast = 708
-
-var yyAct = [...]int{
-
- 125, 328, 259, 73, 202, 79, 85, 106, 91, 195,
- 3, 129, 84, 115, 75, 72, 338, 324, 278, 136,
- 78, 77, 178, 177, 176, 174, 175, 169, 170, 171,
- 172, 173, 301, 86, 86, 289, 52, 61, 62, 90,
- 89, 86, 86, 86, 71, 103, 104, 284, 277, 86,
- 58, 57, 276, 120, 275, 96, 99, 101, 263, 112,
- 145, 105, 105, 224, 110, 334, 321, 302, 206, 105,
- 140, 123, 141, 143, 146, 113, 249, 152, 151, 55,
- 114, 58, 57, 197, 139, 92, 190, 165, 94, 341,
- 148, 149, 95, 93, 44, 46, 164, 154, 150, 231,
- 160, 128, 87, 56, 108, 64, 300, 311, 254, 167,
- 55, 60, 45, 59, 152, 97, 253, 58, 57, 86,
- 88, 255, 196, 340, 111, 184, 188, 189, 118, 191,
- 333, 124, 126, 331, 56, 327, 325, 309, 39, 199,
- 192, 108, 60, 308, 59, 211, 55, 58, 57, 92,
- 45, 305, 94, 295, 86, 226, 95, 93, 292, 222,
- 223, 288, 103, 104, 103, 104, 267, 86, 266, 262,
- 56, 103, 104, 258, 38, 225, 55, 45, 60, 108,
- 59, 245, 221, 45, 86, 233, 220, 144, 234, 235,
- 236, 237, 238, 239, 252, 219, 242, 243, 244, 250,
- 56, 246, 218, 247, 37, 248, 223, 200, 60, 216,
- 59, 264, 100, 257, 215, 198, 194, 193, 183, 265,
- 214, 182, 268, 269, 180, 271, 166, 153, 279, 279,
- 279, 279, 137, 53, 53, 53, 127, 35, 36, 272,
- 231, 273, 274, 317, 74, 83, 83, 281, 282, 283,
- 217, 330, 329, 251, 196, 83, 293, 196, 323, 116,
- 286, 287, 122, 291, 58, 57, 294, 90, 89, 314,
- 133, 134, 135, 304, 303, 90, 270, 256, 261, 297,
- 299, 147, 178, 177, 176, 174, 175, 169, 170, 171,
- 172, 173, 138, 55, 92, 315, 312, 94, 162, 298,
- 159, 95, 93, 316, 155, 156, 260, 157, 319, 310,
- 58, 57, 318, 90, 89, 240, 313, 56, 241, 103,
- 104, 181, 326, 80, 186, 60, 230, 59, 332, 229,
- 322, 83, 335, 290, 92, 336, 228, 94, 296, 55,
- 201, 95, 93, 207, 208, 209, 204, 203, 205, 285,
- 212, 213, 306, 158, 337, 103, 104, 94, 131, 132,
- 342, 95, 93, 56, 107, 107, 83, 227, 121, 102,
- 8, 76, 107, 59, 7, 98, 133, 232, 130, 83,
- 131, 132, 9, 10, 11, 12, 14, 15, 16, 17,
- 18, 19, 20, 22, 23, 34, 83, 24, 25, 28,
- 26, 27, 29, 30, 13, 31, 171, 172, 173, 58,
- 57, 109, 32, 33, 2, 58, 57, 1, 119, 92,
- 185, 142, 94, 320, 339, 21, 95, 93, 4, 0,
- 5, 0, 0, 6, 103, 104, 0, 0, 55, 0,
- 280, 280, 280, 280, 55, 92, 45, 0, 94, 0,
- 58, 57, 95, 93, 90, 89, 0, 0, 81, 82,
- 103, 104, 56, 0, 0, 0, 54, 0, 56, 0,
- 60, 0, 59, 0, 0, 87, 76, 0, 59, 55,
- 92, 0, 0, 94, 0, 0, 0, 95, 93, 90,
- 89, 0, 0, 81, 82, 58, 163, 0, 58, 57,
- 0, 54, 0, 56, 0, 122, 204, 203, 205, 251,
- 87, 76, 0, 59, 178, 177, 176, 174, 175, 169,
- 170, 171, 172, 173, 55, 58, 57, 55, 0, 0,
- 0, 58, 57, 0, 58, 57, 0, 58, 57, 169,
- 170, 171, 172, 173, 162, 161, 54, 0, 56, 187,
- 0, 56, 0, 0, 55, 0, 76, 0, 59, 76,
- 55, 59, 0, 55, 0, 0, 55, 0, 0, 0,
- 0, 0, 204, 203, 205, 94, 117, 0, 56, 95,
- 93, 210, 54, 0, 56, 54, 60, 56, 59, 0,
- 56, 0, 76, 0, 59, 60, 0, 59, 76, 0,
- 59, 178, 177, 176, 174, 175, 169, 170, 171, 172,
- 173, 178, 177, 176, 174, 175, 169, 170, 171, 172,
- 173, 178, 177, 176, 174, 175, 169, 170, 171, 172,
- 173, 92, 0, 0, 94, 0, 0, 0, 95, 93,
- 40, 0, 0, 0, 0, 0, 103, 104, 0, 0,
- 0, 41, 42, 43, 0, 0, 47, 48, 49, 50,
- 51, 0, 0, 307, 63, 0, 65, 66, 67, 68,
- 69, 70, 179, 177, 176, 174, 175, 169, 170, 171,
- 172, 173, 168, 178, 177, 176, 174, 175, 169, 170,
- 171, 172, 173, 176, 174, 175, 169, 170, 171, 172,
- 173, 174, 175, 169, 170, 171, 172, 173,
-}
-var yyPact = [...]int{
-
- -1000, -1000, 368, -1000, 174, 140, -1000, 109, 73, -1000,
- -1000, -1000, -1000, 84, 84, -1000, -1000, -1000, -1000, -1000,
- 525, 525, 525, -1000, 84, -1000, -1000, -1000, -1000, -1000,
- -1000, 522, 441, 441, 84, -1000, 400, 400, -1000, -1000,
- 110, 110, 406, 117, 5, 84, 516, 117, 110, 301,
- 380, 117, 170, 31, 371, -1000, -1000, 400, 400, 400,
- 400, 166, 280, 592, 33, 265, -9, 265, 108, 592,
- 592, -1000, 28, -1000, 8, -1000, 255, 161, -1000, -1000,
- 27, -1000, -1000, 8, -1000, -1000, 297, 486, -1000, -1000,
- 26, -1000, -1000, -1000, -1000, 17, 160, -1000, 368, 617,
- -1000, 607, 158, -1000, -1000, -1000, -1000, -1000, 400, 155,
- 152, 489, -1000, 295, -1000, -1000, 16, 349, 441, 151,
- 150, 295, 13, 149, 5, -1000, -1000, 138, 307, -2,
- 335, 400, 400, -1000, -1000, -1000, 510, 72, 400, 84,
- -1000, 148, 143, -1000, -1000, 240, 136, 129, 120, 116,
- 315, 533, -8, 441, 295, 360, 328, 321, 318, 8,
- -1000, -1000, -1000, 41, 400, 400, 441, -1000, -1000, 400,
- 400, 400, 400, 400, 308, 310, 400, 400, 400, -1000,
- 295, -1000, 295, 441, -1000, -1000, 6, 371, -1000, -1000,
- 211, -1000, -1000, 295, 49, 40, 111, 315, 5, 107,
- 268, 103, -13, -1000, -1000, -1000, 307, 349, -1000, -1000,
- -1000, -1000, 102, 100, -1000, 219, 227, 182, 219, 400,
- 295, 295, -17, -19, -1000, -1000, -23, 255, 255, 255,
- 255, -1000, -24, 278, -1000, 395, 395, -1000, -1000, -1000,
- 400, 400, 694, 687, 668, 95, -1000, -1000, -1000, 467,
- -2, -36, 84, 295, 92, 295, 295, 87, 295, -1000,
- 289, 242, 37, -1000, -39, -3, 35, 33, -1000, -1000,
- 85, 84, 597, 77, 71, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, 530, 530, 295, -1000,
- -1000, 39, 528, -1000, -1000, 46, -1000, -1000, 231, 285,
- 268, -1000, 203, -1000, -1000, 219, -1000, 295, -4, 295,
- -1000, -1000, -1000, -1000, -1000, 220, -1000, -54, -1000, 70,
- -1000, 295, 69, -1000, -1000, 201, 67, 295, 64, -1000,
- -5, 295, -1000, 201, 400, -55, 57, 18, -1000, -1000,
- 400, -1000, 679,
-}
-var yyPgo = [...]int{
-
- 0, 212, 19, 424, 4, 11, 8, 0, 1, 18,
- 640, 9, 21, 13, 20, 423, 6, 323, 120, 421,
- 2, 7, 5, 15, 12, 14, 420, 3, 369, 417,
- 414, 10, 375, 374, 80,
-}
-var yyR1 = [...]int{
-
- 0, 29, 30, 29, 32, 31, 31, 31, 31, 31,
- 31, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 20, 20, 20, 20,
- 10, 10, 10, 34, 34, 13, 13, 22, 22, 22,
- 22, 18, 18, 11, 11, 11, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 26, 26, 25, 27, 27,
- 24, 24, 24, 28, 28, 28, 21, 14, 15, 17,
- 17, 17, 17, 9, 9, 6, 6, 6, 7, 7,
- 8, 8, 19, 19, 16, 16, 23, 23, 23, 5,
- 5, 5, 4, 4, 4, 1, 1, 1, 1, 1,
- 1, 3, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2,
-}
-var yyR2 = [...]int{
-
- 0, 0, 0, 3, 0, 4, 4, 4, 1, 2,
- 2, 7, 6, 5, 5, 5, 4, 4, 3, 3,
- 4, 6, 7, 7, 7, 6, 6, 3, 5, 7,
- 4, 6, 6, 4, 3, 5, 5, 7, 6, 12,
- 7, 9, 2, 4, 4, 2, 1, 2, 3, 4,
- 0, 2, 2, 0, 2, 4, 2, 2, 2, 2,
- 1, 2, 3, 1, 3, 3, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 1, 1, 3, 1, 4,
- 1, 4, 1, 1, 1, 1, 2, 1, 5, 4,
- 4, 4, 4, 1, 1, 1, 1, 4, 1, 1,
- 1, 4, 1, 1, 1, 4, 4, 5, 7, 0,
- 2, 2, 1, 1, 1, 1, 1, 2, 2, 2,
- 3, 0, 2, 1, 3, 3, 3, 3, 3, 4,
- 4, 3, 3, 3,
-}
-var yyChk = [...]int{
-
- -1000, -29, -30, -31, 60, 62, 65, -33, 2, 14,
- 15, 16, 17, 36, 18, 19, 20, 21, 22, 23,
- 24, 57, 25, 26, 29, 30, 32, 33, 31, 34,
- 35, 37, 44, 45, 27, 63, 64, 64, 65, 65,
- -10, -10, -10, -10, -34, 66, -34, -10, -10, -10,
- -10, -10, -23, -1, 60, 38, 62, 10, 9, 72,
- 70, -23, -23, -10, -34, -10, -10, -10, -10, -10,
- -10, -24, -23, -27, -1, -25, 70, -12, -14, -22,
- -17, 52, 53, -1, -24, -16, -7, 69, -18, 49,
- 48, -6, 39, 47, 42, 46, -12, -34, -32, -2,
- -1, -2, -28, 54, 55, -14, -21, -17, 69, -28,
- -12, -34, -25, 70, -34, -13, -1, 60, -34, -28,
- -27, 67, -1, -14, -34, -7, -34, 66, 70, -5,
- 7, 9, 10, -1, -1, -1, -2, 66, 12, -14,
- -22, -16, -19, -16, -18, 69, -16, -1, -14, -14,
- 70, 70, -7, 66, 70, 7, 8, 10, 56, -1,
- -24, 59, 58, 10, 70, 70, 66, -31, 65, 9,
- 10, 11, 12, 13, 7, 8, 6, 5, 4, 65,
- 66, -1, 66, 66, -13, -26, -1, 60, -25, -23,
- 70, -5, -12, 66, 66, -11, -7, 70, 66, -25,
- 69, -1, -4, 40, 39, 41, 70, 8, -1, -1,
- 71, -21, -1, -1, -34, 66, 66, 10, 66, 66,
- 66, 66, -6, -6, 71, -12, -7, 7, 8, 8,
- 8, 58, -1, -2, -12, -2, -2, -2, -2, -2,
- 7, 8, -2, -2, -2, -7, -14, -14, -12, 70,
- -5, 42, -7, 67, 68, 10, -34, -25, 66, -20,
- 38, 10, 66, 71, -4, -5, 66, 66, -16, -16,
- 49, -16, -2, -14, -14, 71, 71, 71, -9, -7,
- -1, -9, -9, -9, 71, 71, -2, -2, 66, 71,
- -34, -11, 66, -7, -11, 66, -34, -14, 10, 38,
- 69, 71, 70, -21, -22, 66, -34, 66, 66, 66,
- -14, 68, -27, -14, 38, 10, -20, 40, -16, -7,
- -15, 70, -14, 38, 71, 66, -7, 66, -8, 51,
- 50, 66, -7, 66, 70, -7, -8, -2, 71, -3,
- 66, 71, -2,
-}
-var yyDef = [...]int{
-
- 1, -2, 0, 3, 0, 0, 8, 0, 0, 50,
- 50, 50, 50, 53, 53, 50, 50, 50, 50, 50,
- 0, 0, 0, 50, 53, 50, 50, 50, 50, 50,
- 50, 0, 0, 0, 53, 4, 0, 0, 9, 10,
- 0, 0, 0, 53, 0, 53, 0, 53, 0, 0,
- 53, 53, 0, 0, 109, 115, 116, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 42, 80, 82, 0, 78, 0, 0, 66, 67,
- 68, 70, 71, 72, 73, 74, 87, 0, 60, 104,
- 0, 98, 99, 95, 96, 0, 0, 45, 0, 0,
- 123, 0, 0, 51, 52, 83, 84, 85, 0, 0,
- 0, 0, 18, 0, 54, 19, 0, 109, 0, 0,
- 0, 0, 0, 0, 0, 87, 27, 0, 0, 0,
- 0, 0, 0, 117, 118, 119, 0, 0, 0, 53,
- 34, 0, 0, 102, 103, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
- 58, 59, 61, 0, 0, 0, 0, 5, 6, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 86, 0, 0, 16, 17, 0, 109, 75, 76,
- 0, 56, 20, 0, 0, 0, -2, 0, 0, 0,
- 0, 0, 0, 112, 113, 114, 0, 109, 110, 111,
- 120, 30, 0, 0, 33, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 43, 0, 0, 0, 0,
- 0, 62, 0, 0, 44, 124, 125, 126, 127, 128,
- 0, 0, 131, 132, 133, 87, 13, 14, 15, 0,
- 56, 0, 53, 0, 0, 0, 0, 53, 0, 28,
- 46, 0, 0, 106, 0, 0, 0, 0, 35, 36,
- 104, 53, 0, 0, 0, 81, 79, 69, 89, 93,
- 94, 90, 91, 92, 105, 97, 129, 130, 12, 55,
- 21, 0, 0, 64, 65, 53, 25, 26, 0, 47,
- 0, 107, 0, 31, 32, 0, 38, 0, 0, 0,
- 11, 22, 23, 24, 48, 0, 29, 0, 37, 0,
- 40, 0, 0, 49, 108, 0, 0, 0, 0, 100,
- 0, 0, 41, 0, 0, 0, 121, 0, 88, 39,
- 0, 101, 122,
-}
-var yyTok1 = [...]int{
-
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 69, 13, 6, 3,
- 70, 71, 11, 9, 66, 10, 3, 12, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 63, 65,
- 7, 64, 8, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 67, 3, 68, 5, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 72,
-}
-var yyTok2 = [...]int{
-
- 2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62,
-}
-var yyTok3 = [...]int{
- 0,
-}
-
-var yyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- yyDebug = 0
- yyErrorVerbose = false
-)
-
-type yyLexer interface {
- Lex(lval *yySymType) int
- Error(s string)
-}
-
-type yyParser interface {
- Parse(yyLexer) int
- Lookahead() int
-}
-
-type yyParserImpl struct {
- lookahead func() int
-}
-
-func (p *yyParserImpl) Lookahead() int {
- return p.lookahead()
-}
-
-func yyNewParser() yyParser {
- p := &yyParserImpl{
- lookahead: func() int { return -1 },
- }
- return p
-}
-
-const yyFlag = -1000
-
-func yyTokname(c int) string {
- if c >= 1 && c-1 < len(yyToknames) {
- if yyToknames[c-1] != "" {
- return yyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func yyStatname(s int) string {
- if s >= 0 && s < len(yyStatenames) {
- if yyStatenames[s] != "" {
- return yyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func yyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !yyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range yyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + yyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := yyPact[state]
- for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
- if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if yyDef[state] == -2 {
- i := 0
- for yyExca[i] != -1 || yyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; yyExca[i] >= 0; i += 2 {
- tok := yyExca[i]
- if tok < TOKSTART || yyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if yyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += yyTokname(tok)
- }
- return res
-}
-
-func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = yyTok1[0]
- goto out
- }
- if char < len(yyTok1) {
- token = yyTok1[char]
- goto out
- }
- if char >= yyPrivate {
- if char < yyPrivate+len(yyTok2) {
- token = yyTok2[char-yyPrivate]
- goto out
- }
- }
- for i := 0; i < len(yyTok3); i += 2 {
- token = yyTok3[i+0]
- if token == char {
- token = yyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = yyTok2[1] /* unknown char */
- }
- if yyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
- }
- return char, token
-}
-
-func yyParse(yylex yyLexer) int {
- return yyNewParser().Parse(yylex)
-}
-
-func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
- var yyn int
- var yylval yySymType
- var yyVAL yySymType
- var yyDollar []yySymType
- yyS := make([]yySymType, yyMaxDepth)
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- yystate := 0
- yychar := -1
- yytoken := -1 // yychar translated into internal numbering
- yyrcvr.lookahead = func() int { return yychar }
- defer func() {
- // Make sure we report no lookahead when not parsing.
- yystate = -1
- yychar = -1
- yytoken = -1
- }()
- yyp := -1
- goto yystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-yystack:
- /* put a state and value onto the stack */
- if yyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
- }
-
- yyp++
- if yyp >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyS[yyp] = yyVAL
- yyS[yyp].yys = yystate
-
-yynewstate:
- yyn = yyPact[yystate]
- if yyn <= yyFlag {
- goto yydefault /* simple state */
- }
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
- yyn += yytoken
- if yyn < 0 || yyn >= yyLast {
- goto yydefault
- }
- yyn = yyAct[yyn]
- if yyChk[yyn] == yytoken { /* valid shift */
- yychar = -1
- yytoken = -1
- yyVAL = yylval
- yystate = yyn
- if Errflag > 0 {
- Errflag--
- }
- goto yystack
- }
-
-yydefault:
- /* default state action */
- yyn = yyDef[yystate]
- if yyn == -2 {
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- yyn = yyExca[xi+0]
- if yyn < 0 || yyn == yytoken {
- break
- }
- }
- yyn = yyExca[xi+1]
- if yyn < 0 {
- goto ret0
- }
- }
- if yyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- yylex.Error(yyErrorMessage(yystate, yytoken))
- Nerrs++
- if yyDebug >= 1 {
- __yyfmt__.Printf("%s", yyStatname(yystate))
- __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for yyp >= 0 {
- yyn = yyPact[yyS[yyp].yys] + yyErrCode
- if yyn >= 0 && yyn < yyLast {
- yystate = yyAct[yyn] /* simulate a shift of "error" */
- if yyChk[yystate] == yyErrCode {
- goto yystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
- }
- yyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
- }
- if yytoken == yyEofCode {
- goto ret1
- }
- yychar = -1
- yytoken = -1
- goto yynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production yyn */
- if yyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
- }
-
- yynt := yyn
- yypt := yyp
- _ = yypt // guard against "declared and not used"
-
- yyp -= yyR2[yyn]
- // yyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if yyp+1 >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyVAL = yyS[yyp+1]
-
- /* consult goto table to find next state */
- yyn = yyR1[yyn]
- yyg := yyPgo[yyn]
- yyj := yyg + yyS[yyp].yys + 1
-
- if yyj >= yyLast {
- yystate = yyAct[yyg]
- } else {
- yystate = yyAct[yyj]
- if yyChk[yystate] != -yyn {
- yystate = yyAct[yyg]
- }
- }
- // dummy call; replaced with literal code
- switch yynt {
-
- case 2:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:73
- {
- stmtline = asm.Lineno
- }
- case 4:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:80
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- if yyDollar[1].sym.Type == LLAB && yyDollar[1].sym.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", yyDollar[1].sym.Labelname)
- }
- yyDollar[1].sym.Type = LLAB
- yyDollar[1].sym.Value = int64(asm.PC)
- }
- case 6:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:90
- {
- yyDollar[1].sym.Type = LVAR
- yyDollar[1].sym.Value = int64(yyDollar[3].lval)
- }
- case 7:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:95
- {
- if yyDollar[1].sym.Value != int64(yyDollar[3].lval) {
- yyerror("redeclaration of %s", yyDollar[1].sym.Name)
- }
- yyDollar[1].sym.Value = int64(yyDollar[3].lval)
- }
- case 11:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:110
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, yyDollar[5].lval, &yyDollar[7].addr)
- }
- case 12:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:114
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, yyDollar[5].lval, &nullgen)
- }
- case 13:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:118
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
- }
- case 14:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:125
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
- }
- case 15:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:132
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
- }
- case 16:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:139
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &nullgen, 0, &yyDollar[4].addr)
- }
- case 17:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:143
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &nullgen, 0, &yyDollar[4].addr)
- }
- case 18:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:150
- {
- outcode(yyDollar[1].lval, Always, &nullgen, 0, &yyDollar[3].addr)
- }
- case 19:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:157
- {
- outcode(yyDollar[1].lval, Always, &nullgen, 0, &yyDollar[3].addr)
- }
- case 20:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:164
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &nullgen, 0, &yyDollar[4].addr)
- }
- case 21:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:171
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, yyDollar[5].lval, &nullgen)
- }
- case 22:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:178
- {
- var g obj.Addr
-
- g = nullgen
- g.Type = obj.TYPE_REGLIST
- g.Offset = int64(yyDollar[6].lval)
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &g)
- }
- case 23:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:187
- {
- var g obj.Addr
-
- g = nullgen
- g.Type = obj.TYPE_REGLIST
- g.Offset = int64(yyDollar[4].lval)
- outcode(yyDollar[1].lval, yyDollar[2].lval, &g, 0, &yyDollar[7].addr)
- }
- case 24:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:199
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[5].addr, int32(yyDollar[3].addr.Reg), &yyDollar[7].addr)
- }
- case 25:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:203
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[5].addr, int32(yyDollar[3].addr.Reg), &yyDollar[3].addr)
- }
- case 26:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:207
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[4].addr, int32(yyDollar[6].addr.Reg), &yyDollar[6].addr)
- }
- case 27:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:214
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &nullgen, 0, &nullgen)
- }
- case 28:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:221
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[5].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 29:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:229
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[7].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = int64(yyDollar[4].lval)
- }
- }
- case 30:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:242
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[4].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 31:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:250
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = int64(yyDollar[4].lval)
- }
- }
- case 32:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:264
- {
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = int64(yyDollar[4].lval)
- }
- }
- case 33:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:276
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &nullgen)
- }
- case 34:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:283
- {
- outcode(yyDollar[1].lval, Always, &nullgen, 0, &yyDollar[3].addr)
- }
- case 35:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:290
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
- }
- case 36:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:294
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
- }
- case 37:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:298
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, yyDollar[5].lval, &yyDollar[7].addr)
- }
- case 38:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:302
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, int32(yyDollar[5].addr.Reg), &nullgen)
- }
- case 39:
- yyDollar = yyS[yypt-12 : yypt+1]
- //line a.y:309
- {
- var g obj.Addr
-
- g = nullgen
- g.Type = obj.TYPE_CONST
- g.Offset = int64(
- (0xe << 24) | /* opcode */
- (yyDollar[1].lval << 20) | /* MCR/MRC */
- ((yyDollar[2].lval ^ C_SCOND_XOR) << 28) | /* scond */
- ((yyDollar[3].lval & 15) << 8) | /* coprocessor number */
- ((yyDollar[5].lval & 7) << 21) | /* coprocessor operation */
- ((yyDollar[7].lval & 15) << 12) | /* arm register */
- ((yyDollar[9].lval & 15) << 16) | /* Crn */
- ((yyDollar[11].lval & 15) << 0) | /* Crm */
- ((yyDollar[12].lval & 7) << 5) | /* coprocessor information */
- (1 << 4)) /* must be set */
- outcode(AMRC, Always, &nullgen, 0, &g)
- }
- case 40:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:321
- {
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, int32(yyDollar[5].addr.Reg), &yyDollar[7].addr)
- }
- case 41:
- yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:329
- {
- yyDollar[7].addr.Type = obj.TYPE_REGREG2
- yyDollar[7].addr.Offset = int64(yyDollar[9].lval)
- outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, int32(yyDollar[5].addr.Reg), &yyDollar[7].addr)
- }
- case 42:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:338
- {
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &nullgen)
- }
- case 43:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:345
- {
- if yyDollar[2].addr.Type != obj.TYPE_CONST || yyDollar[4].addr.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants")
- }
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 44:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:355
- {
- if yyDollar[2].addr.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if yyDollar[4].addr.Type != obj.NAME_EXTERN && yyDollar[4].addr.Type != obj.NAME_STATIC && yyDollar[4].addr.Type != obj.TYPE_MEM {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 45:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:368
- {
- outcode(yyDollar[1].lval, Always, &nullgen, 0, &nullgen)
- }
- case 46:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:374
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 47:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:381
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -int64(yyDollar[2].lval)
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 48:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:388
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- yyVAL.addr.Val = int32(yyDollar[3].lval)
- }
- case 49:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:395
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -int64(yyDollar[2].lval)
- yyVAL.addr.Val = int32(yyDollar[4].lval)
- }
- case 50:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:403
- {
- yyVAL.lval = Always
- }
- case 51:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:407
- {
- yyVAL.lval = (yyDollar[1].lval & ^C_SCOND) | yyDollar[2].lval
- }
- case 52:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:411
- {
- yyVAL.lval = yyDollar[1].lval | yyDollar[2].lval
- }
- case 55:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:420
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = int64(yyDollar[1].lval) + int64(asm.PC)
- }
- case 56:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:426
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- yyVAL.addr = nullgen
- if asm.Pass == 2 && yyDollar[1].sym.Type != LLAB {
- yyerror("undefined label: %s", yyDollar[1].sym.Labelname)
- }
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].sym.Value + int64(yyDollar[2].lval)
- }
- case 57:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:437
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- yyVAL.addr.Offset = int64(yyDollar[2].lval)
- }
- case 58:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:443
- {
- yyVAL.addr = yyDollar[2].addr
- yyVAL.addr.Type = obj.TYPE_ADDR
- }
- case 59:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:448
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SCONST
- yyVAL.addr.Val = yyDollar[2].sval
- }
- case 61:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:457
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[2].dval
- }
- case 62:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:463
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[3].dval
- }
- case 63:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:471
- {
- yyVAL.lval = 1 << uint(yyDollar[1].lval&15)
- }
- case 64:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:475
- {
- yyVAL.lval = 0
- for i := yyDollar[1].lval; i <= yyDollar[3].lval; i++ {
- yyVAL.lval |= 1 << uint(i&15)
- }
- for i := yyDollar[3].lval; i <= yyDollar[1].lval; i++ {
- yyVAL.lval |= 1 << uint(i&15)
- }
- }
- case 65:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:485
- {
- yyVAL.lval = (1 << uint(yyDollar[1].lval&15)) | yyDollar[3].lval
- }
- case 69:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:494
- {
- yyVAL.addr = yyDollar[1].addr
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- }
- case 70:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:499
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 71:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:505
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 72:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:511
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- }
- case 76:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:522
- {
- yyVAL.addr = yyDollar[1].addr
- if yyDollar[1].addr.Name != obj.NAME_EXTERN && yyDollar[1].addr.Name != obj.NAME_STATIC {
- }
- }
- case 77:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:530
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Offset = 0
- }
- case 79:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:540
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- }
- case 81:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:550
- {
- yyVAL.addr = yyDollar[1].addr
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- }
- case 86:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:563
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- yyVAL.addr.Offset = int64(yyDollar[2].lval)
- }
- case 87:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:571
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 88:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:579
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REGREG
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Offset = int64(yyDollar[4].lval)
- }
- case 89:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:588
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SHIFT
- yyVAL.addr.Offset = int64(yyDollar[1].lval&15) | int64(yyDollar[4].lval) | (0 << 5)
- }
- case 90:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:594
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SHIFT
- yyVAL.addr.Offset = int64(yyDollar[1].lval&15) | int64(yyDollar[4].lval) | (1 << 5)
- }
- case 91:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:600
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SHIFT
- yyVAL.addr.Offset = int64(yyDollar[1].lval&15) | int64(yyDollar[4].lval) | (2 << 5)
- }
- case 92:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:606
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SHIFT
- yyVAL.addr.Offset = int64(yyDollar[1].lval&15) | int64(yyDollar[4].lval) | (3 << 5)
- }
- case 93:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:614
- {
- if yyVAL.lval < REG_R0 || yyVAL.lval > REG_R15 {
- print("register value out of range\n")
- }
- yyVAL.lval = ((yyDollar[1].lval & 15) << 8) | (1 << 4)
- }
- case 94:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:621
- {
- if yyVAL.lval < 0 || yyVAL.lval >= 32 {
- print("shift value out of range\n")
- }
- yyVAL.lval = (yyDollar[1].lval & 31) << 7
- }
- case 96:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:631
- {
- yyVAL.lval = REGPC
- }
- case 97:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:635
- {
- if yyDollar[3].lval < 0 || yyDollar[3].lval >= NREG {
- print("register value out of range\n")
- }
- yyVAL.lval = REG_R0 + yyDollar[3].lval
- }
- case 99:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:645
- {
- yyVAL.lval = REGSP
- }
- case 101:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:652
- {
- if yyDollar[3].lval < 0 || yyDollar[3].lval >= NREG {
- print("register value out of range\n")
- }
- yyVAL.lval = yyDollar[3].lval // TODO(rsc): REG_C0+$3
- }
- case 104:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:665
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 105:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:671
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(REG_F0 + yyDollar[3].lval)
- }
- case 106:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:679
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[3].lval)
- yyVAL.addr.Sym = nil
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- }
- case 107:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:687
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[4].lval)
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 0)
- yyVAL.addr.Offset = int64(yyDollar[2].lval)
- }
- case 108:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:695
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = obj.NAME_STATIC
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 1)
- yyVAL.addr.Offset = int64(yyDollar[4].lval)
- }
- case 109:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:704
- {
- yyVAL.lval = 0
- }
- case 110:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:708
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 111:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:712
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 116:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:724
- {
- yyVAL.lval = int32(yyDollar[1].sym.Value)
- }
- case 117:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:728
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 118:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:732
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 119:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:736
- {
- yyVAL.lval = ^yyDollar[2].lval
- }
- case 120:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:740
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 121:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:745
- {
- yyVAL.lval = 0
- }
- case 122:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:749
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 124:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:756
- {
- yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
- }
- case 125:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:760
- {
- yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
- }
- case 126:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:764
- {
- yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
- }
- case 127:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:768
- {
- yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
- }
- case 128:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:772
- {
- yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
- }
- case 129:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:776
- {
- yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
- }
- case 130:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:780
- {
- yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
- }
- case 131:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:784
- {
- yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
- }
- case 132:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:788
- {
- yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
- }
- case 133:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:792
- {
- yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
- }
- }
- goto yystack /* stack new state and value */
-}
+++ /dev/null
-// Inferno utils/6a/a.y
-// http://code.google.com/p/inferno-os/source/browse/utils/6a/a.y
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-%{
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/x86"
-)
-%}
-
-%union {
- sym *asm.Sym
- lval int64
- dval float64
- sval string
- addr obj.Addr
- addr2 Addr2
-}
-
-%left '|'
-%left '^'
-%left '&'
-%left '<' '>'
-%left '+' '-'
-%left '*' '/' '%'
-%token <lval> LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4
-%token <lval> LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPEG LTYPEPC
-%token <lval> LTYPES LTYPEM LTYPEI LTYPEXC LTYPEX LTYPERT LTYPEF
-%token <lval> LCONST LFP LPC LSB
-%token <lval> LBREG LLREG LSREG LFREG LMREG LXREG
-%token <dval> LFCONST
-%token <sval> LSCONST LSP
-%token <sym> LNAME LLAB LVAR
-%type <lval> con expr pointer offset
-%type <addr> mem imm textsize reg nam rel rem rim rom omem nmem
-%type <addr2> nonnon nonrel nonrem rimnon rimrem remrim
-%type <addr2> spec3 spec4 spec5 spec6 spec7 spec8 spec9
-%type <addr2> spec10 spec12 spec13
-%%
-prog:
-| prog
- {
- stmtline = asm.Lineno;
- }
- line
-
-line:
- LNAME ':'
- {
- $1 = asm.LabelLookup($1);
- if $1.Type == LLAB && $1.Value != int64(asm.PC) {
- yyerror("redeclaration of %s (%s)", $1.Labelname, $1.Name);
- }
- $1.Type = LLAB;
- $1.Value = int64(asm.PC)
- }
- line
-| ';'
-| inst ';'
-| error ';'
-
-inst:
- LNAME '=' expr
- {
- $1.Type = LVAR;
- $1.Value = $3;
- }
-| LVAR '=' expr
- {
- if $1.Value != $3 {
- yyerror("redeclaration of %s", $1.Name);
- }
- $1.Value = $3;
- }
-| LTYPE0 nonnon { outcode(int($1), &$2); }
-| LTYPE1 nonrem { outcode(int($1), &$2); }
-| LTYPE2 rimnon { outcode(int($1), &$2); }
-| LTYPE3 rimrem { outcode(int($1), &$2); }
-| LTYPE4 remrim { outcode(int($1), &$2); }
-| LTYPER nonrel { outcode(int($1), &$2); }
-| spec1
-| spec2
-| LTYPEC spec3 { outcode(int($1), &$2); }
-| LTYPEN spec4 { outcode(int($1), &$2); }
-| LTYPES spec5 { outcode(int($1), &$2); }
-| LTYPEM spec6 { outcode(int($1), &$2); }
-| LTYPEI spec7 { outcode(int($1), &$2); }
-| LTYPEXC spec8 { outcode(int($1), &$2); }
-| LTYPEX spec9 { outcode(int($1), &$2); }
-| LTYPERT spec10 { outcode(int($1), &$2); }
-| spec11
-| LTYPEPC spec12 { outcode(int($1), &$2); }
-| LTYPEF spec13 { outcode(int($1), &$2); }
-
-nonnon:
- {
- $$.from = nullgen;
- $$.to = nullgen;
- }
-| ','
- {
- $$.from = nullgen;
- $$.to = nullgen;
- }
-
-rimrem:
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-remrim:
- rem ',' rim
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-rimnon:
- rim ','
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-
-nonrem:
- ',' rem
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rem
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-
-nonrel:
- ',' rel
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rel
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-| imm ',' rel
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-spec1: /* DATA */
- LTYPED nam '/' con ',' imm
- {
- var a Addr2
- a.from = $2
- a.to = $6
- outcode(obj.ADATA, &a)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-spec2: /* TEXT */
- LTYPET mem ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(obj.ATEXT, &Addr2{from: $2, to: $5})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTYPET mem ',' con ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(obj.ATEXT, &Addr2{from: $2, to: $7})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-spec11: /* GLOBL */
- LTYPEG mem ',' imm
- {
- asm.Settext($2.Sym)
- outcode(obj.AGLOBL, &Addr2{from: $2, to: $4})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTYPEG mem ',' con ',' imm
- {
- asm.Settext($2.Sym)
- outcode(obj.AGLOBL, &Addr2{from: $2, to: $6})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-spec3: /* JMP/CALL */
- ',' rom
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rom
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-
-spec4: /* NOP */
- nonnon
-| nonrem
-
-spec5: /* SHL/SHR */
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-| rim ',' rem ':' LLREG
- {
- $$.from = $1;
- $$.to = $3;
- if $$.from.Index != obj.TYPE_NONE {
- yyerror("dp shift with lhs index");
- }
- $$.from.Index = int16($5);
- }
-
-spec6: /* MOVW/MOVL */
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-| rim ',' rem ':' LSREG
- {
- $$.from = $1;
- $$.to = $3;
- if $$.to.Index != obj.TYPE_NONE {
- yyerror("dp move with lhs index");
- }
- $$.to.Index = int16($5);
- }
-
-spec7:
- rim ','
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-spec8: /* CMPPS/CMPPD */
- rem ',' reg ',' con
- {
- $$.from = $1;
- $$.from3 = $3;
- $$.to.Type = obj.TYPE_MEM; // to give library something to do
- $$.to.Offset = $5;
- }
-
-spec9: /* shufl */
- imm ',' rem ',' reg
- {
- $$.from = $1;
- $$.from3 = $3;
- $$.to = $5;
- }
-
-spec10: /* RET/RETF */
- {
- $$.from = nullgen;
- $$.to = nullgen;
- }
-| imm
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-
-spec12: /* asm.PCDATA */
- rim ',' rim
- {
- if $1.Type != obj.TYPE_CONST || $3.Type != obj.TYPE_CONST {
- yyerror("arguments to asm.PCDATA must be integer constants");
- }
- $$.from = $1;
- $$.to = $3;
- }
-
-spec13: /* FUNCDATA */
- rim ',' rim
- {
- if $1.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant");
- }
- if $3.Type != obj.TYPE_MEM || ($3.Name != obj.NAME_EXTERN && $3.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference");
- }
- $$.from = $1;
- $$.to = $3;
- }
-
-rem:
- reg
-| mem
-
-rom:
- rel
-| nmem
-| '*' reg
- {
- $$ = $2;
- }
-| '*' omem
- {
- $$ = $2;
- }
-| reg
-| omem
-
-rim:
- rem
-| imm
-
-rel:
- con '(' LPC ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1 + int64(asm.PC);
- }
-| LNAME offset
- {
- $1 = asm.LabelLookup($1);
- $$ = nullgen;
- if asm.Pass == 2 && $1.Type != LLAB {
- yyerror("undefined label: %s", $1.Labelname);
- }
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1.Value + $2;
- }
-
-reg:
- LBREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LFREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LLREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LMREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LSP
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = x86.REG_SP;
- }
-| LSREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LXREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-
-imm:
- '$' con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- $$.Offset = $2;
- }
-| '$' nam
- {
- $$ = $2;
- $$.Type = obj.TYPE_ADDR;
- /*
- if($2.Type == x86.D_AUTO || $2.Type == x86.D_PARAM)
- yyerror("constant cannot be automatic: %s",
- $2.sym.Name);
- */
- }
-| '$' LSCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SCONST;
- $$.Val = ($2+"\x00\x00\x00\x00\x00\x00\x00\x00")[:8]
- }
-| '$' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $2;
- }
-| '$' '(' LFCONST ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $3;
- }
-| '$' '(' '-' LFCONST ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$4;
- }
-| '$' '-' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$3;
- }
-
-mem:
- omem
-| nmem
-
-omem:
- con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Offset = $1;
- }
-| con '(' LLREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- }
-| con '(' LSP ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = x86.REG_SP
- $$.Offset = $1;
- }
-| con '(' LSREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- }
-| con '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Offset = $1;
- $$.Index = int16($3);
- $$.Scale = int16($5);
- checkscale($$.Scale);
- }
-| con '(' LLREG ')' '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- $$.Index = int16($6);
- $$.Scale = int16($8);
- checkscale($$.Scale);
- }
-| con '(' LLREG ')' '(' LSREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- $$.Index = int16($6);
- $$.Scale = int16($8);
- checkscale($$.Scale);
- }
-| '(' LLREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($2)
- }
-| '(' LSP ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = x86.REG_SP
- }
-| '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Index = int16($2);
- $$.Scale = int16($4);
- checkscale($$.Scale);
- }
-| '(' LLREG ')' '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($2)
- $$.Index = int16($5);
- $$.Scale = int16($7);
- checkscale($$.Scale);
- }
-
-nmem:
- nam
- {
- $$ = $1;
- }
-| nam '(' LLREG '*' con ')'
- {
- $$ = $1;
- $$.Index = int16($3);
- $$.Scale = int16($5);
- checkscale($$.Scale);
- }
-
-nam:
- LNAME offset '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Name = int8($4)
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 0);
- $$.Offset = $2;
- }
-| LNAME '<' '>' offset '(' LSB ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Name = obj.NAME_STATIC
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 1);
- $$.Offset = $4;
- }
-
-offset:
- {
- $$ = 0;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '-' con
- {
- $$ = -$2;
- }
-
-pointer:
- LSB
-| LSP
- {
- $$ = obj.NAME_AUTO;
- }
-| LFP
-
-con:
- LCONST
-| LVAR
- {
- $$ = $1.Value;
- }
-| '-' con
- {
- $$ = -$2;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '~' con
- {
- $$ = ^$2;
- }
-| '(' expr ')'
- {
- $$ = $2;
- }
-
-textsize:
- LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = $1;
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -$2;
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = $1;
- $$.Val = int32($3);
- }
-| '-' LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -$2;
- $$.Val = int32($4);
- }
-
-expr:
- con
-| expr '+' expr
- {
- $$ = $1 + $3;
- }
-| expr '-' expr
- {
- $$ = $1 - $3;
- }
-| expr '*' expr
- {
- $$ = $1 * $3;
- }
-| expr '/' expr
- {
- $$ = $1 / $3;
- }
-| expr '%' expr
- {
- $$ = $1 % $3;
- }
-| expr '<' '<' expr
- {
- $$ = $1 << uint($4);
- }
-| expr '>' '>' expr
- {
- $$ = $1 >> uint($4);
- }
-| expr '&' expr
- {
- $$ = $1 & $3;
- }
-| expr '^' expr
- {
- $$ = $1 ^ $3;
- }
-| expr '|' expr
- {
- $$ = $1 | $3;
- }
+++ /dev/null
-// Inferno utils/6a/lex.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6a/lex.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-//go:generate go tool yacc a.y
-
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/x86"
-)
-
-var (
- yyerror = asm.Yyerror
- nullgen obj.Addr
- stmtline int32
-)
-
-func main() {
- cinit()
-
- asm.LSCONST = LSCONST
- asm.LCONST = LCONST
- asm.LFCONST = LFCONST
- asm.LNAME = LNAME
- asm.LVAR = LVAR
- asm.LLAB = LLAB
-
- asm.Thechar = '6'
- asm.Thestring = "amd64"
- asm.Thelinkarch = &x86.Linkamd64
- asm.Arches = map[string]*obj.LinkArch{
- "amd64p32": &x86.Linkamd64p32,
- }
-
- asm.Lexinit = lexinit
- asm.Cclean = cclean
- asm.Yyparse = yyparse
-
- asm.Main()
-}
-
-type yy struct{}
-
-func (yy) Lex(v *yySymType) int {
- var av asm.Yylval
- tok := asm.Yylex(&av)
- v.sym = av.Sym
- v.lval = av.Lval
- v.sval = av.Sval
- v.dval = av.Dval
- return tok
-}
-
-func (yy) Error(msg string) {
- asm.Yyerror("%s", msg)
-}
-
-func yyparse() {
- yyParse(yy{})
-}
-
-var lexinit = []asm.Lextab{
- {"SP", LSP, obj.NAME_AUTO},
- {"SB", LSB, obj.NAME_EXTERN},
- {"FP", LFP, obj.NAME_PARAM},
- {"PC", LPC, obj.TYPE_BRANCH},
-
- {"AL", LBREG, x86.REG_AL},
- {"CL", LBREG, x86.REG_CL},
- {"DL", LBREG, x86.REG_DL},
- {"BL", LBREG, x86.REG_BL},
- /* "SPB", LBREG, REG_SPB, */
- {"SIB", LBREG, x86.REG_SIB},
- {"DIB", LBREG, x86.REG_DIB},
- {"BPB", LBREG, x86.REG_BPB},
- {"R8B", LBREG, x86.REG_R8B},
- {"R9B", LBREG, x86.REG_R9B},
- {"R10B", LBREG, x86.REG_R10B},
- {"R11B", LBREG, x86.REG_R11B},
- {"R12B", LBREG, x86.REG_R12B},
- {"R13B", LBREG, x86.REG_R13B},
- {"R14B", LBREG, x86.REG_R14B},
- {"R15B", LBREG, x86.REG_R15B},
- {"AH", LBREG, x86.REG_AH},
- {"CH", LBREG, x86.REG_CH},
- {"DH", LBREG, x86.REG_DH},
- {"BH", LBREG, x86.REG_BH},
- {"AX", LLREG, x86.REG_AX},
- {"CX", LLREG, x86.REG_CX},
- {"DX", LLREG, x86.REG_DX},
- {"BX", LLREG, x86.REG_BX},
-
- /* "SP", LLREG, REG_SP, */
- {"BP", LLREG, x86.REG_BP},
- {"SI", LLREG, x86.REG_SI},
- {"DI", LLREG, x86.REG_DI},
- {"R8", LLREG, x86.REG_R8},
- {"R9", LLREG, x86.REG_R9},
- {"R10", LLREG, x86.REG_R10},
- {"R11", LLREG, x86.REG_R11},
- {"R12", LLREG, x86.REG_R12},
- {"R13", LLREG, x86.REG_R13},
- {"R14", LLREG, x86.REG_R14},
- {"R15", LLREG, x86.REG_R15},
- {"RARG", LLREG, x86.REGARG},
- {"F0", LFREG, x86.REG_F0 + 0},
- {"F1", LFREG, x86.REG_F0 + 1},
- {"F2", LFREG, x86.REG_F0 + 2},
- {"F3", LFREG, x86.REG_F0 + 3},
- {"F4", LFREG, x86.REG_F0 + 4},
- {"F5", LFREG, x86.REG_F0 + 5},
- {"F6", LFREG, x86.REG_F0 + 6},
- {"F7", LFREG, x86.REG_F0 + 7},
- {"M0", LMREG, x86.REG_M0 + 0},
- {"M1", LMREG, x86.REG_M0 + 1},
- {"M2", LMREG, x86.REG_M0 + 2},
- {"M3", LMREG, x86.REG_M0 + 3},
- {"M4", LMREG, x86.REG_M0 + 4},
- {"M5", LMREG, x86.REG_M0 + 5},
- {"M6", LMREG, x86.REG_M0 + 6},
- {"M7", LMREG, x86.REG_M0 + 7},
- {"X0", LXREG, x86.REG_X0 + 0},
- {"X1", LXREG, x86.REG_X0 + 1},
- {"X2", LXREG, x86.REG_X0 + 2},
- {"X3", LXREG, x86.REG_X0 + 3},
- {"X4", LXREG, x86.REG_X0 + 4},
- {"X5", LXREG, x86.REG_X0 + 5},
- {"X6", LXREG, x86.REG_X0 + 6},
- {"X7", LXREG, x86.REG_X0 + 7},
- {"X8", LXREG, x86.REG_X0 + 8},
- {"X9", LXREG, x86.REG_X0 + 9},
- {"X10", LXREG, x86.REG_X0 + 10},
- {"X11", LXREG, x86.REG_X0 + 11},
- {"X12", LXREG, x86.REG_X0 + 12},
- {"X13", LXREG, x86.REG_X0 + 13},
- {"X14", LXREG, x86.REG_X0 + 14},
- {"X15", LXREG, x86.REG_X0 + 15},
- {"CS", LSREG, x86.REG_CS},
- {"SS", LSREG, x86.REG_SS},
- {"DS", LSREG, x86.REG_DS},
- {"ES", LSREG, x86.REG_ES},
- {"FS", LSREG, x86.REG_FS},
- {"GS", LSREG, x86.REG_GS},
- {"GDTR", LBREG, x86.REG_GDTR},
- {"IDTR", LBREG, x86.REG_IDTR},
- {"LDTR", LBREG, x86.REG_LDTR},
- {"MSW", LBREG, x86.REG_MSW},
- {"TASK", LBREG, x86.REG_TASK},
- {"CR0", LBREG, x86.REG_CR + 0},
- {"CR1", LBREG, x86.REG_CR + 1},
- {"CR2", LBREG, x86.REG_CR + 2},
- {"CR3", LBREG, x86.REG_CR + 3},
- {"CR4", LBREG, x86.REG_CR + 4},
- {"CR5", LBREG, x86.REG_CR + 5},
- {"CR6", LBREG, x86.REG_CR + 6},
- {"CR7", LBREG, x86.REG_CR + 7},
- {"CR8", LBREG, x86.REG_CR + 8},
- {"CR9", LBREG, x86.REG_CR + 9},
- {"CR10", LBREG, x86.REG_CR + 10},
- {"CR11", LBREG, x86.REG_CR + 11},
- {"CR12", LBREG, x86.REG_CR + 12},
- {"CR13", LBREG, x86.REG_CR + 13},
- {"CR14", LBREG, x86.REG_CR + 14},
- {"CR15", LBREG, x86.REG_CR + 15},
- {"DR0", LBREG, x86.REG_DR + 0},
- {"DR1", LBREG, x86.REG_DR + 1},
- {"DR2", LBREG, x86.REG_DR + 2},
- {"DR3", LBREG, x86.REG_DR + 3},
- {"DR4", LBREG, x86.REG_DR + 4},
- {"DR5", LBREG, x86.REG_DR + 5},
- {"DR6", LBREG, x86.REG_DR + 6},
- {"DR7", LBREG, x86.REG_DR + 7},
- {"TR0", LBREG, x86.REG_TR + 0},
- {"TR1", LBREG, x86.REG_TR + 1},
- {"TR2", LBREG, x86.REG_TR + 2},
- {"TR3", LBREG, x86.REG_TR + 3},
- {"TR4", LBREG, x86.REG_TR + 4},
- {"TR5", LBREG, x86.REG_TR + 5},
- {"TR6", LBREG, x86.REG_TR + 6},
- {"TR7", LBREG, x86.REG_TR + 7},
- {"TLS", LSREG, x86.REG_TLS},
- {"AAA", LTYPE0, x86.AAAA},
- {"AAD", LTYPE0, x86.AAAD},
- {"AAM", LTYPE0, x86.AAAM},
- {"AAS", LTYPE0, x86.AAAS},
- {"ADCB", LTYPE3, x86.AADCB},
- {"ADCL", LTYPE3, x86.AADCL},
- {"ADCQ", LTYPE3, x86.AADCQ},
- {"ADCW", LTYPE3, x86.AADCW},
- {"ADDB", LTYPE3, x86.AADDB},
- {"ADDL", LTYPE3, x86.AADDL},
- {"ADDQ", LTYPE3, x86.AADDQ},
- {"ADDW", LTYPE3, x86.AADDW},
- {"ADJSP", LTYPE2, x86.AADJSP},
- {"ANDB", LTYPE3, x86.AANDB},
- {"ANDL", LTYPE3, x86.AANDL},
- {"ANDQ", LTYPE3, x86.AANDQ},
- {"ANDW", LTYPE3, x86.AANDW},
- {"ARPL", LTYPE3, x86.AARPL},
- {"BOUNDL", LTYPE3, x86.ABOUNDL},
- {"BOUNDW", LTYPE3, x86.ABOUNDW},
- {"BSFL", LTYPE3, x86.ABSFL},
- {"BSFQ", LTYPE3, x86.ABSFQ},
- {"BSFW", LTYPE3, x86.ABSFW},
- {"BSRL", LTYPE3, x86.ABSRL},
- {"BSRQ", LTYPE3, x86.ABSRQ},
- {"BSRW", LTYPE3, x86.ABSRW},
- {"BSWAPL", LTYPE1, x86.ABSWAPL},
- {"BSWAPQ", LTYPE1, x86.ABSWAPQ},
- {"BTCL", LTYPE3, x86.ABTCL},
- {"BTCQ", LTYPE3, x86.ABTCQ},
- {"BTCW", LTYPE3, x86.ABTCW},
- {"BTL", LTYPE3, x86.ABTL},
- {"BTQ", LTYPE3, x86.ABTQ},
- {"BTRL", LTYPE3, x86.ABTRL},
- {"BTRQ", LTYPE3, x86.ABTRQ},
- {"BTRW", LTYPE3, x86.ABTRW},
- {"BTSL", LTYPE3, x86.ABTSL},
- {"BTSQ", LTYPE3, x86.ABTSQ},
- {"BTSW", LTYPE3, x86.ABTSW},
- {"BTW", LTYPE3, x86.ABTW},
- {"BYTE", LTYPE2, x86.ABYTE},
- {"CALL", LTYPEC, obj.ACALL},
- {"CLC", LTYPE0, x86.ACLC},
- {"CLD", LTYPE0, x86.ACLD},
- {"CLI", LTYPE0, x86.ACLI},
- {"CLTS", LTYPE0, x86.ACLTS},
- {"CMC", LTYPE0, x86.ACMC},
- {"CMPB", LTYPE4, x86.ACMPB},
- {"CMPL", LTYPE4, x86.ACMPL},
- {"CMPQ", LTYPE4, x86.ACMPQ},
- {"CMPW", LTYPE4, x86.ACMPW},
- {"CMPSB", LTYPE0, x86.ACMPSB},
- {"CMPSL", LTYPE0, x86.ACMPSL},
- {"CMPSQ", LTYPE0, x86.ACMPSQ},
- {"CMPSW", LTYPE0, x86.ACMPSW},
- {"CMPXCHG8B", LTYPE1, x86.ACMPXCHG8B},
- {"CMPXCHGB", LTYPE3, x86.ACMPXCHGB}, /* LTYPE3? */
- {"CMPXCHGL", LTYPE3, x86.ACMPXCHGL},
- {"CMPXCHGQ", LTYPE3, x86.ACMPXCHGQ},
- {"CMPXCHGW", LTYPE3, x86.ACMPXCHGW},
- {"CPUID", LTYPE0, x86.ACPUID},
- {"DAA", LTYPE0, x86.ADAA},
- {"DAS", LTYPE0, x86.ADAS},
- {"DATA", LTYPED, obj.ADATA},
- {"DECB", LTYPE1, x86.ADECB},
- {"DECL", LTYPE1, x86.ADECL},
- {"DECQ", LTYPE1, x86.ADECQ},
- {"DECW", LTYPE1, x86.ADECW},
- {"DIVB", LTYPE2, x86.ADIVB},
- {"DIVL", LTYPE2, x86.ADIVL},
- {"DIVQ", LTYPE2, x86.ADIVQ},
- {"DIVW", LTYPE2, x86.ADIVW},
- {"EMMS", LTYPE0, x86.AEMMS},
- {"END", LTYPE0, obj.AEND},
- {"ENTER", LTYPE2, x86.AENTER},
- {"GLOBL", LTYPEG, obj.AGLOBL},
- {"HLT", LTYPE0, x86.AHLT},
- {"IDIVB", LTYPE2, x86.AIDIVB},
- {"IDIVL", LTYPE2, x86.AIDIVL},
- {"IDIVQ", LTYPE2, x86.AIDIVQ},
- {"IDIVW", LTYPE2, x86.AIDIVW},
- {"IMULB", LTYPEI, x86.AIMULB},
- {"IMULL", LTYPEI, x86.AIMULL},
- {"IMULQ", LTYPEI, x86.AIMULQ},
- {"IMUL3Q", LTYPEX, x86.AIMUL3Q},
- {"IMULW", LTYPEI, x86.AIMULW},
- {"INB", LTYPE0, x86.AINB},
- {"INL", LTYPE0, x86.AINL},
- {"INW", LTYPE0, x86.AINW},
- {"INCB", LTYPE1, x86.AINCB},
- {"INCL", LTYPE1, x86.AINCL},
- {"INCQ", LTYPE1, x86.AINCQ},
- {"INCW", LTYPE1, x86.AINCW},
- {"INSB", LTYPE0, x86.AINSB},
- {"INSL", LTYPE0, x86.AINSL},
- {"INSW", LTYPE0, x86.AINSW},
- {"INT", LTYPE2, x86.AINT},
- {"INTO", LTYPE0, x86.AINTO},
- {"INVD", LTYPE0, x86.AINVD},
- {"INVLPG", LTYPE2, x86.AINVLPG},
- {"IRETL", LTYPE0, x86.AIRETL},
- {"IRETQ", LTYPE0, x86.AIRETQ},
- {"IRETW", LTYPE0, x86.AIRETW},
- {"JOS", LTYPER, x86.AJOS}, /* overflow set (OF = 1) */
- {"JO", LTYPER, x86.AJOS}, /* alternate */
- {"JOC", LTYPER, x86.AJOC}, /* overflow clear (OF = 0) */
- {"JNO", LTYPER, x86.AJOC}, /* alternate */
- {"JCS", LTYPER, x86.AJCS}, /* carry set (CF = 1) */
- {"JB", LTYPER, x86.AJCS}, /* alternate */
- {"JC", LTYPER, x86.AJCS}, /* alternate */
- {"JNAE", LTYPER, x86.AJCS}, /* alternate */
- {"JLO", LTYPER, x86.AJCS}, /* alternate */
- {"JCC", LTYPER, x86.AJCC}, /* carry clear (CF = 0) */
- {"JAE", LTYPER, x86.AJCC}, /* alternate */
- {"JNB", LTYPER, x86.AJCC}, /* alternate */
- {"JNC", LTYPER, x86.AJCC}, /* alternate */
- {"JHS", LTYPER, x86.AJCC}, /* alternate */
- {"JEQ", LTYPER, x86.AJEQ}, /* equal (ZF = 1) */
- {"JE", LTYPER, x86.AJEQ}, /* alternate */
- {"JZ", LTYPER, x86.AJEQ}, /* alternate */
- {"JNE", LTYPER, x86.AJNE}, /* not equal (ZF = 0) */
- {"JNZ", LTYPER, x86.AJNE}, /* alternate */
- {"JLS", LTYPER, x86.AJLS}, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
- {"JBE", LTYPER, x86.AJLS}, /* alternate */
- {"JNA", LTYPER, x86.AJLS}, /* alternate */
- {"JHI", LTYPER, x86.AJHI}, /* higher (unsigned) (CF = 0 && ZF = 0) */
- {"JA", LTYPER, x86.AJHI}, /* alternate */
- {"JNBE", LTYPER, x86.AJHI}, /* alternate */
- {"JMI", LTYPER, x86.AJMI}, /* negative (minus) (SF = 1) */
- {"JS", LTYPER, x86.AJMI}, /* alternate */
- {"JPL", LTYPER, x86.AJPL}, /* non-negative (plus) (SF = 0) */
- {"JNS", LTYPER, x86.AJPL}, /* alternate */
- {"JPS", LTYPER, x86.AJPS}, /* parity set (PF = 1) */
- {"JP", LTYPER, x86.AJPS}, /* alternate */
- {"JPE", LTYPER, x86.AJPS}, /* alternate */
- {"JPC", LTYPER, x86.AJPC}, /* parity clear (PF = 0) */
- {"JNP", LTYPER, x86.AJPC}, /* alternate */
- {"JPO", LTYPER, x86.AJPC}, /* alternate */
- {"JLT", LTYPER, x86.AJLT}, /* less than (signed) (SF != OF) */
- {"JL", LTYPER, x86.AJLT}, /* alternate */
- {"JNGE", LTYPER, x86.AJLT}, /* alternate */
- {"JGE", LTYPER, x86.AJGE}, /* greater than or equal (signed) (SF = OF) */
- {"JNL", LTYPER, x86.AJGE}, /* alternate */
- {"JLE", LTYPER, x86.AJLE}, /* less than or equal (signed) (ZF = 1 || SF != OF) */
- {"JNG", LTYPER, x86.AJLE}, /* alternate */
- {"JGT", LTYPER, x86.AJGT}, /* greater than (signed) (ZF = 0 && SF = OF) */
- {"JG", LTYPER, x86.AJGT}, /* alternate */
- {"JNLE", LTYPER, x86.AJGT}, /* alternate */
- {"JCXZL", LTYPER, x86.AJCXZL},
- {"JCXZQ", LTYPER, x86.AJCXZQ},
- {"JMP", LTYPEC, obj.AJMP},
- {"LAHF", LTYPE0, x86.ALAHF},
- {"LARL", LTYPE3, x86.ALARL},
- {"LARW", LTYPE3, x86.ALARW},
- {"LEAL", LTYPE3, x86.ALEAL},
- {"LEAQ", LTYPE3, x86.ALEAQ},
- {"LEAW", LTYPE3, x86.ALEAW},
- {"LEAVEL", LTYPE0, x86.ALEAVEL},
- {"LEAVEQ", LTYPE0, x86.ALEAVEQ},
- {"LEAVEW", LTYPE0, x86.ALEAVEW},
- {"LFENCE", LTYPE0, x86.ALFENCE},
- {"LOCK", LTYPE0, x86.ALOCK},
- {"LODSB", LTYPE0, x86.ALODSB},
- {"LODSL", LTYPE0, x86.ALODSL},
- {"LODSQ", LTYPE0, x86.ALODSQ},
- {"LODSW", LTYPE0, x86.ALODSW},
- {"LONG", LTYPE2, x86.ALONG},
- {"LOOP", LTYPER, x86.ALOOP},
- {"LOOPEQ", LTYPER, x86.ALOOPEQ},
- {"LOOPNE", LTYPER, x86.ALOOPNE},
- {"LSLL", LTYPE3, x86.ALSLL},
- {"LSLW", LTYPE3, x86.ALSLW},
- {"MFENCE", LTYPE0, x86.AMFENCE},
- {"MODE", LTYPE2, x86.AMODE},
- {"MOVB", LTYPE3, x86.AMOVB},
- {"MOVL", LTYPEM, x86.AMOVL},
- {"MOVQ", LTYPEM, x86.AMOVQ},
- {"MOVW", LTYPEM, x86.AMOVW},
- {"MOVBLSX", LTYPE3, x86.AMOVBLSX},
- {"MOVBLZX", LTYPE3, x86.AMOVBLZX},
- {"MOVBQSX", LTYPE3, x86.AMOVBQSX},
- {"MOVBQZX", LTYPE3, x86.AMOVBQZX},
- {"MOVBWSX", LTYPE3, x86.AMOVBWSX},
- {"MOVBWZX", LTYPE3, x86.AMOVBWZX},
- {"MOVLQSX", LTYPE3, x86.AMOVLQSX},
- {"MOVLQZX", LTYPE3, x86.AMOVLQZX},
- {"MOVNTIL", LTYPE3, x86.AMOVNTIL},
- {"MOVNTIQ", LTYPE3, x86.AMOVNTIQ},
- {"MOVQL", LTYPE3, x86.AMOVQL},
- {"MOVWLSX", LTYPE3, x86.AMOVWLSX},
- {"MOVWLZX", LTYPE3, x86.AMOVWLZX},
- {"MOVWQSX", LTYPE3, x86.AMOVWQSX},
- {"MOVWQZX", LTYPE3, x86.AMOVWQZX},
- {"MOVSB", LTYPE0, x86.AMOVSB},
- {"MOVSL", LTYPE0, x86.AMOVSL},
- {"MOVSQ", LTYPE0, x86.AMOVSQ},
- {"MOVSW", LTYPE0, x86.AMOVSW},
- {"MULB", LTYPE2, x86.AMULB},
- {"MULL", LTYPE2, x86.AMULL},
- {"MULQ", LTYPE2, x86.AMULQ},
- {"MULW", LTYPE2, x86.AMULW},
- {"NEGB", LTYPE1, x86.ANEGB},
- {"NEGL", LTYPE1, x86.ANEGL},
- {"NEGQ", LTYPE1, x86.ANEGQ},
- {"NEGW", LTYPE1, x86.ANEGW},
- {"NOP", LTYPEN, obj.ANOP},
- {"NOTB", LTYPE1, x86.ANOTB},
- {"NOTL", LTYPE1, x86.ANOTL},
- {"NOTQ", LTYPE1, x86.ANOTQ},
- {"NOTW", LTYPE1, x86.ANOTW},
- {"ORB", LTYPE3, x86.AORB},
- {"ORL", LTYPE3, x86.AORL},
- {"ORQ", LTYPE3, x86.AORQ},
- {"ORW", LTYPE3, x86.AORW},
- {"OUTB", LTYPE0, x86.AOUTB},
- {"OUTL", LTYPE0, x86.AOUTL},
- {"OUTW", LTYPE0, x86.AOUTW},
- {"OUTSB", LTYPE0, x86.AOUTSB},
- {"OUTSL", LTYPE0, x86.AOUTSL},
- {"OUTSW", LTYPE0, x86.AOUTSW},
- {"PAUSE", LTYPEN, x86.APAUSE},
- {"POPAL", LTYPE0, x86.APOPAL},
- {"POPAW", LTYPE0, x86.APOPAW},
- {"POPFL", LTYPE0, x86.APOPFL},
- {"POPFQ", LTYPE0, x86.APOPFQ},
- {"POPFW", LTYPE0, x86.APOPFW},
- {"POPL", LTYPE1, x86.APOPL},
- {"POPQ", LTYPE1, x86.APOPQ},
- {"POPW", LTYPE1, x86.APOPW},
- {"PUSHAL", LTYPE0, x86.APUSHAL},
- {"PUSHAW", LTYPE0, x86.APUSHAW},
- {"PUSHFL", LTYPE0, x86.APUSHFL},
- {"PUSHFQ", LTYPE0, x86.APUSHFQ},
- {"PUSHFW", LTYPE0, x86.APUSHFW},
- {"PUSHL", LTYPE2, x86.APUSHL},
- {"PUSHQ", LTYPE2, x86.APUSHQ},
- {"PUSHW", LTYPE2, x86.APUSHW},
- {"RCLB", LTYPE3, x86.ARCLB},
- {"RCLL", LTYPE3, x86.ARCLL},
- {"RCLQ", LTYPE3, x86.ARCLQ},
- {"RCLW", LTYPE3, x86.ARCLW},
- {"RCRB", LTYPE3, x86.ARCRB},
- {"RCRL", LTYPE3, x86.ARCRL},
- {"RCRQ", LTYPE3, x86.ARCRQ},
- {"RCRW", LTYPE3, x86.ARCRW},
- {"RDMSR", LTYPE0, x86.ARDMSR},
- {"RDPMC", LTYPE0, x86.ARDPMC},
- {"RDTSC", LTYPE0, x86.ARDTSC},
- {"REP", LTYPE0, x86.AREP},
- {"REPN", LTYPE0, x86.AREPN},
- {"RET", LTYPE0, obj.ARET},
- {"RETFL", LTYPERT, x86.ARETFL},
- {"RETFW", LTYPERT, x86.ARETFW},
- {"RETFQ", LTYPERT, x86.ARETFQ},
- {"ROLB", LTYPE3, x86.AROLB},
- {"ROLL", LTYPE3, x86.AROLL},
- {"ROLQ", LTYPE3, x86.AROLQ},
- {"ROLW", LTYPE3, x86.AROLW},
- {"RORB", LTYPE3, x86.ARORB},
- {"RORL", LTYPE3, x86.ARORL},
- {"RORQ", LTYPE3, x86.ARORQ},
- {"RORW", LTYPE3, x86.ARORW},
- {"RSM", LTYPE0, x86.ARSM},
- {"SAHF", LTYPE0, x86.ASAHF},
- {"SALB", LTYPE3, x86.ASALB},
- {"SALL", LTYPE3, x86.ASALL},
- {"SALQ", LTYPE3, x86.ASALQ},
- {"SALW", LTYPE3, x86.ASALW},
- {"SARB", LTYPE3, x86.ASARB},
- {"SARL", LTYPE3, x86.ASARL},
- {"SARQ", LTYPE3, x86.ASARQ},
- {"SARW", LTYPE3, x86.ASARW},
- {"SBBB", LTYPE3, x86.ASBBB},
- {"SBBL", LTYPE3, x86.ASBBL},
- {"SBBQ", LTYPE3, x86.ASBBQ},
- {"SBBW", LTYPE3, x86.ASBBW},
- {"SCASB", LTYPE0, x86.ASCASB},
- {"SCASL", LTYPE0, x86.ASCASL},
- {"SCASQ", LTYPE0, x86.ASCASQ},
- {"SCASW", LTYPE0, x86.ASCASW},
- {"SETCC", LTYPE1, x86.ASETCC}, /* see JCC etc above for condition codes */
- {"SETCS", LTYPE1, x86.ASETCS},
- {"SETEQ", LTYPE1, x86.ASETEQ},
- {"SETGE", LTYPE1, x86.ASETGE},
- {"SETGT", LTYPE1, x86.ASETGT},
- {"SETHI", LTYPE1, x86.ASETHI},
- {"SETLE", LTYPE1, x86.ASETLE},
- {"SETLS", LTYPE1, x86.ASETLS},
- {"SETLT", LTYPE1, x86.ASETLT},
- {"SETMI", LTYPE1, x86.ASETMI},
- {"SETNE", LTYPE1, x86.ASETNE},
- {"SETOC", LTYPE1, x86.ASETOC},
- {"SETOS", LTYPE1, x86.ASETOS},
- {"SETPC", LTYPE1, x86.ASETPC},
- {"SETPL", LTYPE1, x86.ASETPL},
- {"SETPS", LTYPE1, x86.ASETPS},
- {"SFENCE", LTYPE0, x86.ASFENCE},
- {"CDQ", LTYPE0, x86.ACDQ},
- {"CWD", LTYPE0, x86.ACWD},
- {"CQO", LTYPE0, x86.ACQO},
- {"SHLB", LTYPE3, x86.ASHLB},
- {"SHLL", LTYPES, x86.ASHLL},
- {"SHLQ", LTYPES, x86.ASHLQ},
- {"SHLW", LTYPES, x86.ASHLW},
- {"SHRB", LTYPE3, x86.ASHRB},
- {"SHRL", LTYPES, x86.ASHRL},
- {"SHRQ", LTYPES, x86.ASHRQ},
- {"SHRW", LTYPES, x86.ASHRW},
- {"STC", LTYPE0, x86.ASTC},
- {"STD", LTYPE0, x86.ASTD},
- {"STI", LTYPE0, x86.ASTI},
- {"STOSB", LTYPE0, x86.ASTOSB},
- {"STOSL", LTYPE0, x86.ASTOSL},
- {"STOSQ", LTYPE0, x86.ASTOSQ},
- {"STOSW", LTYPE0, x86.ASTOSW},
- {"SUBB", LTYPE3, x86.ASUBB},
- {"SUBL", LTYPE3, x86.ASUBL},
- {"SUBQ", LTYPE3, x86.ASUBQ},
- {"SUBW", LTYPE3, x86.ASUBW},
- {"SYSCALL", LTYPE0, x86.ASYSCALL},
- {"SYSRET", LTYPE0, x86.ASYSRET},
- {"SWAPGS", LTYPE0, x86.ASWAPGS},
- {"TESTB", LTYPE3, x86.ATESTB},
- {"TESTL", LTYPE3, x86.ATESTL},
- {"TESTQ", LTYPE3, x86.ATESTQ},
- {"TESTW", LTYPE3, x86.ATESTW},
- {"TEXT", LTYPET, obj.ATEXT},
- {"VERR", LTYPE2, x86.AVERR},
- {"VERW", LTYPE2, x86.AVERW},
- {"QUAD", LTYPE2, x86.AQUAD},
- {"WAIT", LTYPE0, x86.AWAIT},
- {"WBINVD", LTYPE0, x86.AWBINVD},
- {"WRMSR", LTYPE0, x86.AWRMSR},
- {"WORD", LTYPE2, x86.AWORD},
- {"XADDB", LTYPE3, x86.AXADDB},
- {"XADDL", LTYPE3, x86.AXADDL},
- {"XADDQ", LTYPE3, x86.AXADDQ},
- {"XADDW", LTYPE3, x86.AXADDW},
- {"XCHGB", LTYPE3, x86.AXCHGB},
- {"XCHGL", LTYPE3, x86.AXCHGL},
- {"XCHGQ", LTYPE3, x86.AXCHGQ},
- {"XCHGW", LTYPE3, x86.AXCHGW},
- {"XLAT", LTYPE2, x86.AXLAT},
- {"XORB", LTYPE3, x86.AXORB},
- {"XORL", LTYPE3, x86.AXORL},
- {"XORQ", LTYPE3, x86.AXORQ},
- {"XORW", LTYPE3, x86.AXORW},
- {"CMOVLCC", LTYPE3, x86.ACMOVLCC},
- {"CMOVLCS", LTYPE3, x86.ACMOVLCS},
- {"CMOVLEQ", LTYPE3, x86.ACMOVLEQ},
- {"CMOVLGE", LTYPE3, x86.ACMOVLGE},
- {"CMOVLGT", LTYPE3, x86.ACMOVLGT},
- {"CMOVLHI", LTYPE3, x86.ACMOVLHI},
- {"CMOVLLE", LTYPE3, x86.ACMOVLLE},
- {"CMOVLLS", LTYPE3, x86.ACMOVLLS},
- {"CMOVLLT", LTYPE3, x86.ACMOVLLT},
- {"CMOVLMI", LTYPE3, x86.ACMOVLMI},
- {"CMOVLNE", LTYPE3, x86.ACMOVLNE},
- {"CMOVLOC", LTYPE3, x86.ACMOVLOC},
- {"CMOVLOS", LTYPE3, x86.ACMOVLOS},
- {"CMOVLPC", LTYPE3, x86.ACMOVLPC},
- {"CMOVLPL", LTYPE3, x86.ACMOVLPL},
- {"CMOVLPS", LTYPE3, x86.ACMOVLPS},
- {"CMOVQCC", LTYPE3, x86.ACMOVQCC},
- {"CMOVQCS", LTYPE3, x86.ACMOVQCS},
- {"CMOVQEQ", LTYPE3, x86.ACMOVQEQ},
- {"CMOVQGE", LTYPE3, x86.ACMOVQGE},
- {"CMOVQGT", LTYPE3, x86.ACMOVQGT},
- {"CMOVQHI", LTYPE3, x86.ACMOVQHI},
- {"CMOVQLE", LTYPE3, x86.ACMOVQLE},
- {"CMOVQLS", LTYPE3, x86.ACMOVQLS},
- {"CMOVQLT", LTYPE3, x86.ACMOVQLT},
- {"CMOVQMI", LTYPE3, x86.ACMOVQMI},
- {"CMOVQNE", LTYPE3, x86.ACMOVQNE},
- {"CMOVQOC", LTYPE3, x86.ACMOVQOC},
- {"CMOVQOS", LTYPE3, x86.ACMOVQOS},
- {"CMOVQPC", LTYPE3, x86.ACMOVQPC},
- {"CMOVQPL", LTYPE3, x86.ACMOVQPL},
- {"CMOVQPS", LTYPE3, x86.ACMOVQPS},
- {"CMOVWCC", LTYPE3, x86.ACMOVWCC},
- {"CMOVWCS", LTYPE3, x86.ACMOVWCS},
- {"CMOVWEQ", LTYPE3, x86.ACMOVWEQ},
- {"CMOVWGE", LTYPE3, x86.ACMOVWGE},
- {"CMOVWGT", LTYPE3, x86.ACMOVWGT},
- {"CMOVWHI", LTYPE3, x86.ACMOVWHI},
- {"CMOVWLE", LTYPE3, x86.ACMOVWLE},
- {"CMOVWLS", LTYPE3, x86.ACMOVWLS},
- {"CMOVWLT", LTYPE3, x86.ACMOVWLT},
- {"CMOVWMI", LTYPE3, x86.ACMOVWMI},
- {"CMOVWNE", LTYPE3, x86.ACMOVWNE},
- {"CMOVWOC", LTYPE3, x86.ACMOVWOC},
- {"CMOVWOS", LTYPE3, x86.ACMOVWOS},
- {"CMOVWPC", LTYPE3, x86.ACMOVWPC},
- {"CMOVWPL", LTYPE3, x86.ACMOVWPL},
- {"CMOVWPS", LTYPE3, x86.ACMOVWPS},
- {"FMOVB", LTYPE3, x86.AFMOVB},
- {"FMOVBP", LTYPE3, x86.AFMOVBP},
- {"FMOVD", LTYPE3, x86.AFMOVD},
- {"FMOVDP", LTYPE3, x86.AFMOVDP},
- {"FMOVF", LTYPE3, x86.AFMOVF},
- {"FMOVFP", LTYPE3, x86.AFMOVFP},
- {"FMOVL", LTYPE3, x86.AFMOVL},
- {"FMOVLP", LTYPE3, x86.AFMOVLP},
- {"FMOVV", LTYPE3, x86.AFMOVV},
- {"FMOVVP", LTYPE3, x86.AFMOVVP},
- {"FMOVW", LTYPE3, x86.AFMOVW},
- {"FMOVWP", LTYPE3, x86.AFMOVWP},
- {"FMOVX", LTYPE3, x86.AFMOVX},
- {"FMOVXP", LTYPE3, x86.AFMOVXP},
- {"FCOMB", LTYPE3, x86.AFCOMB},
- {"FCOMBP", LTYPE3, x86.AFCOMBP},
- {"FCOMD", LTYPE3, x86.AFCOMD},
- {"FCOMDP", LTYPE3, x86.AFCOMDP},
- {"FCOMDPP", LTYPE3, x86.AFCOMDPP},
- {"FCOMF", LTYPE3, x86.AFCOMF},
- {"FCOMFP", LTYPE3, x86.AFCOMFP},
- {"FCOML", LTYPE3, x86.AFCOML},
- {"FCOMLP", LTYPE3, x86.AFCOMLP},
- {"FCOMW", LTYPE3, x86.AFCOMW},
- {"FCOMWP", LTYPE3, x86.AFCOMWP},
- {"FUCOM", LTYPE3, x86.AFUCOM},
- {"FUCOMP", LTYPE3, x86.AFUCOMP},
- {"FUCOMPP", LTYPE3, x86.AFUCOMPP},
- {"FADDW", LTYPE3, x86.AFADDW},
- {"FADDL", LTYPE3, x86.AFADDL},
- {"FADDF", LTYPE3, x86.AFADDF},
- {"FADDD", LTYPE3, x86.AFADDD},
- {"FADDDP", LTYPE3, x86.AFADDDP},
- {"FSUBDP", LTYPE3, x86.AFSUBDP},
- {"FSUBW", LTYPE3, x86.AFSUBW},
- {"FSUBL", LTYPE3, x86.AFSUBL},
- {"FSUBF", LTYPE3, x86.AFSUBF},
- {"FSUBD", LTYPE3, x86.AFSUBD},
- {"FSUBRDP", LTYPE3, x86.AFSUBRDP},
- {"FSUBRW", LTYPE3, x86.AFSUBRW},
- {"FSUBRL", LTYPE3, x86.AFSUBRL},
- {"FSUBRF", LTYPE3, x86.AFSUBRF},
- {"FSUBRD", LTYPE3, x86.AFSUBRD},
- {"FMULDP", LTYPE3, x86.AFMULDP},
- {"FMULW", LTYPE3, x86.AFMULW},
- {"FMULL", LTYPE3, x86.AFMULL},
- {"FMULF", LTYPE3, x86.AFMULF},
- {"FMULD", LTYPE3, x86.AFMULD},
- {"FDIVDP", LTYPE3, x86.AFDIVDP},
- {"FDIVW", LTYPE3, x86.AFDIVW},
- {"FDIVL", LTYPE3, x86.AFDIVL},
- {"FDIVF", LTYPE3, x86.AFDIVF},
- {"FDIVD", LTYPE3, x86.AFDIVD},
- {"FDIVRDP", LTYPE3, x86.AFDIVRDP},
- {"FDIVRW", LTYPE3, x86.AFDIVRW},
- {"FDIVRL", LTYPE3, x86.AFDIVRL},
- {"FDIVRF", LTYPE3, x86.AFDIVRF},
- {"FDIVRD", LTYPE3, x86.AFDIVRD},
- {"FXCHD", LTYPE3, x86.AFXCHD},
- {"FFREE", LTYPE1, x86.AFFREE},
- {"FLDCW", LTYPE2, x86.AFLDCW},
- {"FLDENV", LTYPE1, x86.AFLDENV},
- {"FRSTOR", LTYPE2, x86.AFRSTOR},
- {"FSAVE", LTYPE1, x86.AFSAVE},
- {"FSTCW", LTYPE1, x86.AFSTCW},
- {"FSTENV", LTYPE1, x86.AFSTENV},
- {"FSTSW", LTYPE1, x86.AFSTSW},
- {"F2XM1", LTYPE0, x86.AF2XM1},
- {"FABS", LTYPE0, x86.AFABS},
- {"FCHS", LTYPE0, x86.AFCHS},
- {"FCLEX", LTYPE0, x86.AFCLEX},
- {"FCOS", LTYPE0, x86.AFCOS},
- {"FDECSTP", LTYPE0, x86.AFDECSTP},
- {"FINCSTP", LTYPE0, x86.AFINCSTP},
- {"FINIT", LTYPE0, x86.AFINIT},
- {"FLD1", LTYPE0, x86.AFLD1},
- {"FLDL2E", LTYPE0, x86.AFLDL2E},
- {"FLDL2T", LTYPE0, x86.AFLDL2T},
- {"FLDLG2", LTYPE0, x86.AFLDLG2},
- {"FLDLN2", LTYPE0, x86.AFLDLN2},
- {"FLDPI", LTYPE0, x86.AFLDPI},
- {"FLDZ", LTYPE0, x86.AFLDZ},
- {"FNOP", LTYPE0, x86.AFNOP},
- {"FPATAN", LTYPE0, x86.AFPATAN},
- {"FPREM", LTYPE0, x86.AFPREM},
- {"FPREM1", LTYPE0, x86.AFPREM1},
- {"FPTAN", LTYPE0, x86.AFPTAN},
- {"FRNDINT", LTYPE0, x86.AFRNDINT},
- {"FSCALE", LTYPE0, x86.AFSCALE},
- {"FSIN", LTYPE0, x86.AFSIN},
- {"FSINCOS", LTYPE0, x86.AFSINCOS},
- {"FSQRT", LTYPE0, x86.AFSQRT},
- {"FTST", LTYPE0, x86.AFTST},
- {"FXAM", LTYPE0, x86.AFXAM},
- {"FXTRACT", LTYPE0, x86.AFXTRACT},
- {"FYL2X", LTYPE0, x86.AFYL2X},
- {"FYL2XP1", LTYPE0, x86.AFYL2XP1},
- {"ADDPD", LTYPE3, x86.AADDPD},
- {"ADDPS", LTYPE3, x86.AADDPS},
- {"ADDSD", LTYPE3, x86.AADDSD},
- {"ADDSS", LTYPE3, x86.AADDSS},
- {"ANDNPD", LTYPE3, x86.AANDNPD},
- {"ANDNPS", LTYPE3, x86.AANDNPS},
- {"ANDPD", LTYPE3, x86.AANDPD},
- {"ANDPS", LTYPE3, x86.AANDPS},
- {"CMPPD", LTYPEXC, x86.ACMPPD},
- {"CMPPS", LTYPEXC, x86.ACMPPS},
- {"CMPSD", LTYPEXC, x86.ACMPSD},
- {"CMPSS", LTYPEXC, x86.ACMPSS},
- {"COMISD", LTYPE3, x86.ACOMISD},
- {"COMISS", LTYPE3, x86.ACOMISS},
- {"CVTPL2PD", LTYPE3, x86.ACVTPL2PD},
- {"CVTPL2PS", LTYPE3, x86.ACVTPL2PS},
- {"CVTPD2PL", LTYPE3, x86.ACVTPD2PL},
- {"CVTPD2PS", LTYPE3, x86.ACVTPD2PS},
- {"CVTPS2PL", LTYPE3, x86.ACVTPS2PL},
- {"PF2IW", LTYPE3, x86.APF2IW},
- {"PF2IL", LTYPE3, x86.APF2IL},
- {"PF2ID", LTYPE3, x86.APF2IL}, /* syn */
- {"PI2FL", LTYPE3, x86.API2FL},
- {"PI2FD", LTYPE3, x86.API2FL}, /* syn */
- {"PI2FW", LTYPE3, x86.API2FW},
- {"CVTPS2PD", LTYPE3, x86.ACVTPS2PD},
- {"CVTSD2SL", LTYPE3, x86.ACVTSD2SL},
- {"CVTSD2SQ", LTYPE3, x86.ACVTSD2SQ},
- {"CVTSD2SS", LTYPE3, x86.ACVTSD2SS},
- {"CVTSL2SD", LTYPE3, x86.ACVTSL2SD},
- {"CVTSQ2SD", LTYPE3, x86.ACVTSQ2SD},
- {"CVTSL2SS", LTYPE3, x86.ACVTSL2SS},
- {"CVTSQ2SS", LTYPE3, x86.ACVTSQ2SS},
- {"CVTSS2SD", LTYPE3, x86.ACVTSS2SD},
- {"CVTSS2SL", LTYPE3, x86.ACVTSS2SL},
- {"CVTSS2SQ", LTYPE3, x86.ACVTSS2SQ},
- {"CVTTPD2PL", LTYPE3, x86.ACVTTPD2PL},
- {"CVTTPS2PL", LTYPE3, x86.ACVTTPS2PL},
- {"CVTTSD2SL", LTYPE3, x86.ACVTTSD2SL},
- {"CVTTSD2SQ", LTYPE3, x86.ACVTTSD2SQ},
- {"CVTTSS2SL", LTYPE3, x86.ACVTTSS2SL},
- {"CVTTSS2SQ", LTYPE3, x86.ACVTTSS2SQ},
- {"DIVPD", LTYPE3, x86.ADIVPD},
- {"DIVPS", LTYPE3, x86.ADIVPS},
- {"DIVSD", LTYPE3, x86.ADIVSD},
- {"DIVSS", LTYPE3, x86.ADIVSS},
- {"FXRSTOR", LTYPE2, x86.AFXRSTOR},
- {"FXRSTOR64", LTYPE2, x86.AFXRSTOR64},
- {"FXSAVE", LTYPE1, x86.AFXSAVE},
- {"FXSAVE64", LTYPE1, x86.AFXSAVE64},
- {"LDMXCSR", LTYPE2, x86.ALDMXCSR},
- {"MASKMOVOU", LTYPE3, x86.AMASKMOVOU},
- {"MASKMOVDQU", LTYPE3, x86.AMASKMOVOU}, /* syn */
- {"MASKMOVQ", LTYPE3, x86.AMASKMOVQ},
- {"MAXPD", LTYPE3, x86.AMAXPD},
- {"MAXPS", LTYPE3, x86.AMAXPS},
- {"MAXSD", LTYPE3, x86.AMAXSD},
- {"MAXSS", LTYPE3, x86.AMAXSS},
- {"MINPD", LTYPE3, x86.AMINPD},
- {"MINPS", LTYPE3, x86.AMINPS},
- {"MINSD", LTYPE3, x86.AMINSD},
- {"MINSS", LTYPE3, x86.AMINSS},
- {"MOVAPD", LTYPE3, x86.AMOVAPD},
- {"MOVAPS", LTYPE3, x86.AMOVAPS},
- {"MOVD", LTYPE3, x86.AMOVQ}, /* syn */
- {"MOVDQ2Q", LTYPE3, x86.AMOVQ}, /* syn */
- {"MOVO", LTYPE3, x86.AMOVO},
- {"MOVOA", LTYPE3, x86.AMOVO}, /* syn */
- {"MOVOU", LTYPE3, x86.AMOVOU},
- {"MOVHLPS", LTYPE3, x86.AMOVHLPS},
- {"MOVHPD", LTYPE3, x86.AMOVHPD},
- {"MOVHPS", LTYPE3, x86.AMOVHPS},
- {"MOVLHPS", LTYPE3, x86.AMOVLHPS},
- {"MOVLPD", LTYPE3, x86.AMOVLPD},
- {"MOVLPS", LTYPE3, x86.AMOVLPS},
- {"MOVMSKPD", LTYPE3, x86.AMOVMSKPD},
- {"MOVMSKPS", LTYPE3, x86.AMOVMSKPS},
- {"MOVNTO", LTYPE3, x86.AMOVNTO},
- {"MOVNTDQ", LTYPE3, x86.AMOVNTO}, /* syn */
- {"MOVNTPD", LTYPE3, x86.AMOVNTPD},
- {"MOVNTPS", LTYPE3, x86.AMOVNTPS},
- {"MOVNTQ", LTYPE3, x86.AMOVNTQ},
- {"MOVQOZX", LTYPE3, x86.AMOVQOZX},
- {"MOVSD", LTYPE3, x86.AMOVSD},
- {"MOVSS", LTYPE3, x86.AMOVSS},
- {"MOVUPD", LTYPE3, x86.AMOVUPD},
- {"MOVUPS", LTYPE3, x86.AMOVUPS},
- {"MULPD", LTYPE3, x86.AMULPD},
- {"MULPS", LTYPE3, x86.AMULPS},
- {"MULSD", LTYPE3, x86.AMULSD},
- {"MULSS", LTYPE3, x86.AMULSS},
- {"ORPD", LTYPE3, x86.AORPD},
- {"ORPS", LTYPE3, x86.AORPS},
- {"PACKSSLW", LTYPE3, x86.APACKSSLW},
- {"PACKSSWB", LTYPE3, x86.APACKSSWB},
- {"PACKUSWB", LTYPE3, x86.APACKUSWB},
- {"PADDB", LTYPE3, x86.APADDB},
- {"PADDL", LTYPE3, x86.APADDL},
- {"PADDQ", LTYPE3, x86.APADDQ},
- {"PADDSB", LTYPE3, x86.APADDSB},
- {"PADDSW", LTYPE3, x86.APADDSW},
- {"PADDUSB", LTYPE3, x86.APADDUSB},
- {"PADDUSW", LTYPE3, x86.APADDUSW},
- {"PADDW", LTYPE3, x86.APADDW},
- {"PAND", LTYPE3, x86.APAND},
- {"PANDB", LTYPE3, x86.APANDB},
- {"PANDL", LTYPE3, x86.APANDL},
- {"PANDSB", LTYPE3, x86.APANDSB},
- {"PANDSW", LTYPE3, x86.APANDSW},
- {"PANDUSB", LTYPE3, x86.APANDUSB},
- {"PANDUSW", LTYPE3, x86.APANDUSW},
- {"PANDW", LTYPE3, x86.APANDW},
- {"PANDN", LTYPE3, x86.APANDN},
- {"PAVGB", LTYPE3, x86.APAVGB},
- {"PAVGW", LTYPE3, x86.APAVGW},
- {"PCMPEQB", LTYPE3, x86.APCMPEQB},
- {"PCMPEQL", LTYPE3, x86.APCMPEQL},
- {"PCMPEQW", LTYPE3, x86.APCMPEQW},
- {"PCMPGTB", LTYPE3, x86.APCMPGTB},
- {"PCMPGTL", LTYPE3, x86.APCMPGTL},
- {"PCMPGTW", LTYPE3, x86.APCMPGTW},
- {"PEXTRW", LTYPEX, x86.APEXTRW},
- {"PINSRW", LTYPEX, x86.APINSRW},
- {"PINSRD", LTYPEX, x86.APINSRD},
- {"PINSRQ", LTYPEX, x86.APINSRQ},
- {"PMADDWL", LTYPE3, x86.APMADDWL},
- {"PMAXSW", LTYPE3, x86.APMAXSW},
- {"PMAXUB", LTYPE3, x86.APMAXUB},
- {"PMINSW", LTYPE3, x86.APMINSW},
- {"PMINUB", LTYPE3, x86.APMINUB},
- {"PMOVMSKB", LTYPE3, x86.APMOVMSKB},
- {"PMULHRW", LTYPE3, x86.APMULHRW},
- {"PMULHUW", LTYPE3, x86.APMULHUW},
- {"PMULHW", LTYPE3, x86.APMULHW},
- {"PMULLW", LTYPE3, x86.APMULLW},
- {"PMULULQ", LTYPE3, x86.APMULULQ},
- {"POR", LTYPE3, x86.APOR},
- {"PSADBW", LTYPE3, x86.APSADBW},
- {"PSHUFHW", LTYPEX, x86.APSHUFHW},
- {"PSHUFL", LTYPEX, x86.APSHUFL},
- {"PSHUFLW", LTYPEX, x86.APSHUFLW},
- {"PSHUFW", LTYPEX, x86.APSHUFW},
- {"PSHUFB", LTYPEM, x86.APSHUFB},
- {"PSLLO", LTYPE3, x86.APSLLO},
- {"PSLLDQ", LTYPE3, x86.APSLLO}, /* syn */
- {"PSLLL", LTYPE3, x86.APSLLL},
- {"PSLLQ", LTYPE3, x86.APSLLQ},
- {"PSLLW", LTYPE3, x86.APSLLW},
- {"PSRAL", LTYPE3, x86.APSRAL},
- {"PSRAW", LTYPE3, x86.APSRAW},
- {"PSRLO", LTYPE3, x86.APSRLO},
- {"PSRLDQ", LTYPE3, x86.APSRLO}, /* syn */
- {"PSRLL", LTYPE3, x86.APSRLL},
- {"PSRLQ", LTYPE3, x86.APSRLQ},
- {"PSRLW", LTYPE3, x86.APSRLW},
- {"PSUBB", LTYPE3, x86.APSUBB},
- {"PSUBL", LTYPE3, x86.APSUBL},
- {"PSUBQ", LTYPE3, x86.APSUBQ},
- {"PSUBSB", LTYPE3, x86.APSUBSB},
- {"PSUBSW", LTYPE3, x86.APSUBSW},
- {"PSUBUSB", LTYPE3, x86.APSUBUSB},
- {"PSUBUSW", LTYPE3, x86.APSUBUSW},
- {"PSUBW", LTYPE3, x86.APSUBW},
- {"PUNPCKHBW", LTYPE3, x86.APUNPCKHBW},
- {"PUNPCKHLQ", LTYPE3, x86.APUNPCKHLQ},
- {"PUNPCKHQDQ", LTYPE3, x86.APUNPCKHQDQ},
- {"PUNPCKHWL", LTYPE3, x86.APUNPCKHWL},
- {"PUNPCKLBW", LTYPE3, x86.APUNPCKLBW},
- {"PUNPCKLLQ", LTYPE3, x86.APUNPCKLLQ},
- {"PUNPCKLQDQ", LTYPE3, x86.APUNPCKLQDQ},
- {"PUNPCKLWL", LTYPE3, x86.APUNPCKLWL},
- {"PXOR", LTYPE3, x86.APXOR},
- {"RCPPS", LTYPE3, x86.ARCPPS},
- {"RCPSS", LTYPE3, x86.ARCPSS},
- {"RSQRTPS", LTYPE3, x86.ARSQRTPS},
- {"RSQRTSS", LTYPE3, x86.ARSQRTSS},
- {"SHUFPD", LTYPEX, x86.ASHUFPD},
- {"SHUFPS", LTYPEX, x86.ASHUFPS},
- {"SQRTPD", LTYPE3, x86.ASQRTPD},
- {"SQRTPS", LTYPE3, x86.ASQRTPS},
- {"SQRTSD", LTYPE3, x86.ASQRTSD},
- {"SQRTSS", LTYPE3, x86.ASQRTSS},
- {"STMXCSR", LTYPE1, x86.ASTMXCSR},
- {"SUBPD", LTYPE3, x86.ASUBPD},
- {"SUBPS", LTYPE3, x86.ASUBPS},
- {"SUBSD", LTYPE3, x86.ASUBSD},
- {"SUBSS", LTYPE3, x86.ASUBSS},
- {"UCOMISD", LTYPE3, x86.AUCOMISD},
- {"UCOMISS", LTYPE3, x86.AUCOMISS},
- {"UNPCKHPD", LTYPE3, x86.AUNPCKHPD},
- {"UNPCKHPS", LTYPE3, x86.AUNPCKHPS},
- {"UNPCKLPD", LTYPE3, x86.AUNPCKLPD},
- {"UNPCKLPS", LTYPE3, x86.AUNPCKLPS},
- {"XORPD", LTYPE3, x86.AXORPD},
- {"XORPS", LTYPE3, x86.AXORPS},
- {"CRC32B", LTYPE4, x86.ACRC32B},
- {"CRC32Q", LTYPE4, x86.ACRC32Q},
- {"PREFETCHT0", LTYPE2, x86.APREFETCHT0},
- {"PREFETCHT1", LTYPE2, x86.APREFETCHT1},
- {"PREFETCHT2", LTYPE2, x86.APREFETCHT2},
- {"PREFETCHNTA", LTYPE2, x86.APREFETCHNTA},
- {"UNDEF", LTYPE0, obj.AUNDEF},
- {"AESENC", LTYPE3, x86.AAESENC},
- {"AESENCLAST", LTYPE3, x86.AAESENCLAST},
- {"AESDEC", LTYPE3, x86.AAESDEC},
- {"AESDECLAST", LTYPE3, x86.AAESDECLAST},
- {"AESIMC", LTYPE3, x86.AAESIMC},
- {"AESKEYGENASSIST", LTYPEX, x86.AAESKEYGENASSIST},
- {"PSHUFD", LTYPEX, x86.APSHUFD},
- {"USEFIELD", LTYPEN, obj.AUSEFIELD},
- {"PCLMULQDQ", LTYPEX, x86.APCLMULQDQ},
- {"PCDATA", LTYPEPC, obj.APCDATA},
- {"FUNCDATA", LTYPEF, obj.AFUNCDATA},
-}
-
-func cinit() {
-}
-
-func checkscale(scale int16) {
- switch scale {
- case 1,
- 2,
- 4,
- 8:
- return
- }
-
- yyerror("scale must be 1248: %d", scale)
-}
-
-func cclean() {
- var g2 Addr2
-
- g2.from = nullgen
- g2.to = nullgen
- outcode(obj.AEND, &g2)
-}
-
-var lastpc *obj.Prog
-
-type Addr2 struct {
- from obj.Addr
- from3 obj.Addr
- to obj.Addr
-}
-
-func outcode(a int, g2 *Addr2) {
- var p *obj.Prog
- var pl *obj.Plist
-
- if asm.Pass == 1 {
- goto out
- }
-
- p = new(obj.Prog)
- *p = obj.Prog{}
- p.Ctxt = asm.Ctxt
- p.As = int16(a)
- p.Lineno = stmtline
- p.From = g2.from
- if g2.from3.Type != 0 {
- p.From3 = new(obj.Addr)
- *p.From3 = g2.from3
- }
- p.To = g2.to
- p.Pc = int64(asm.PC)
-
- if lastpc == nil {
- pl = obj.Linknewplist(asm.Ctxt)
- pl.Firstpc = p
- } else {
-
- lastpc.Link = p
- }
- lastpc = p
-
-out:
- if a != obj.AGLOBL && a != obj.ADATA {
- asm.PC++
- }
-}
+++ /dev/null
-//line a.y:32
-package main
-
-import __yyfmt__ "fmt"
-
-//line a.y:32
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/x86"
-)
-
-//line a.y:41
-type yySymType struct {
- yys int
- sym *asm.Sym
- lval int64
- dval float64
- sval string
- addr obj.Addr
- addr2 Addr2
-}
-
-const LTYPE0 = 57346
-const LTYPE1 = 57347
-const LTYPE2 = 57348
-const LTYPE3 = 57349
-const LTYPE4 = 57350
-const LTYPEC = 57351
-const LTYPED = 57352
-const LTYPEN = 57353
-const LTYPER = 57354
-const LTYPET = 57355
-const LTYPEG = 57356
-const LTYPEPC = 57357
-const LTYPES = 57358
-const LTYPEM = 57359
-const LTYPEI = 57360
-const LTYPEXC = 57361
-const LTYPEX = 57362
-const LTYPERT = 57363
-const LTYPEF = 57364
-const LCONST = 57365
-const LFP = 57366
-const LPC = 57367
-const LSB = 57368
-const LBREG = 57369
-const LLREG = 57370
-const LSREG = 57371
-const LFREG = 57372
-const LMREG = 57373
-const LXREG = 57374
-const LFCONST = 57375
-const LSCONST = 57376
-const LSP = 57377
-const LNAME = 57378
-const LLAB = 57379
-const LVAR = 57380
-
-var yyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "'|'",
- "'^'",
- "'&'",
- "'<'",
- "'>'",
- "'+'",
- "'-'",
- "'*'",
- "'/'",
- "'%'",
- "LTYPE0",
- "LTYPE1",
- "LTYPE2",
- "LTYPE3",
- "LTYPE4",
- "LTYPEC",
- "LTYPED",
- "LTYPEN",
- "LTYPER",
- "LTYPET",
- "LTYPEG",
- "LTYPEPC",
- "LTYPES",
- "LTYPEM",
- "LTYPEI",
- "LTYPEXC",
- "LTYPEX",
- "LTYPERT",
- "LTYPEF",
- "LCONST",
- "LFP",
- "LPC",
- "LSB",
- "LBREG",
- "LLREG",
- "LSREG",
- "LFREG",
- "LMREG",
- "LXREG",
- "LFCONST",
- "LSCONST",
- "LSP",
- "LNAME",
- "LLAB",
- "LVAR",
- "':'",
- "';'",
- "'='",
- "','",
- "'$'",
- "'('",
- "')'",
- "'~'",
-}
-var yyStatenames = [...]string{}
-
-const yyEofCode = 1
-const yyErrCode = 2
-const yyMaxDepth = 200
-
-//line yacctab:1
-var yyExca = [...]int{
- -1, 1,
- 1, -1,
- -2, 2,
-}
-
-const yyNprod = 133
-const yyPrivate = 57344
-
-var yyTokenNames []string
-var yyStates []string
-
-const yyLast = 593
-
-var yyAct = [...]int{
-
- 52, 227, 41, 3, 80, 208, 269, 64, 123, 50,
- 51, 79, 54, 170, 268, 74, 267, 118, 85, 72,
- 83, 263, 73, 255, 253, 241, 239, 84, 81, 237,
- 221, 100, 102, 112, 219, 210, 112, 209, 171, 240,
- 234, 107, 211, 62, 174, 143, 138, 119, 65, 207,
- 111, 115, 249, 113, 112, 231, 67, 169, 120, 121,
- 122, 230, 226, 92, 94, 96, 128, 225, 224, 154,
- 104, 106, 74, 58, 57, 153, 136, 112, 129, 85,
- 151, 83, 150, 149, 139, 141, 148, 147, 84, 81,
- 140, 146, 142, 145, 137, 144, 63, 55, 58, 57,
- 135, 43, 45, 48, 44, 46, 49, 40, 134, 47,
- 69, 127, 56, 37, 155, 40, 35, 34, 53, 98,
- 59, 31, 55, 32, 33, 223, 176, 177, 222, 217,
- 60, 215, 220, 112, 120, 243, 114, 56, 74, 242,
- 216, 236, 183, 76, 173, 59, 58, 57, 256, 166,
- 168, 188, 184, 192, 194, 196, 167, 112, 112, 112,
- 112, 112, 195, 229, 112, 112, 112, 258, 58, 57,
- 55, 212, 251, 252, 197, 198, 199, 200, 201, 182,
- 120, 204, 205, 206, 218, 56, 228, 114, 264, 257,
- 65, 76, 55, 59, 190, 191, 184, 248, 38, 166,
- 168, 152, 42, 112, 112, 75, 167, 56, 36, 235,
- 261, 71, 65, 76, 238, 59, 124, 89, 125, 126,
- 232, 233, 158, 159, 160, 244, 260, 88, 245, 254,
- 213, 181, 108, 109, 246, 125, 126, 247, 203, 250,
- 175, 202, 185, 186, 187, 25, 189, 16, 15, 6,
- 110, 259, 7, 2, 1, 262, 156, 157, 158, 159,
- 160, 265, 266, 105, 9, 10, 11, 12, 13, 17,
- 28, 18, 14, 29, 30, 26, 19, 20, 21, 22,
- 23, 24, 27, 58, 57, 82, 165, 164, 163, 161,
- 162, 156, 157, 158, 159, 160, 4, 103, 8, 101,
- 5, 99, 97, 58, 57, 95, 93, 55, 91, 87,
- 77, 43, 45, 48, 44, 46, 49, 68, 66, 47,
- 86, 61, 56, 70, 214, 0, 78, 55, 53, 0,
- 59, 43, 45, 48, 44, 46, 49, 172, 0, 47,
- 60, 0, 56, 58, 57, 82, 0, 65, 53, 0,
- 59, 43, 45, 48, 44, 46, 49, 0, 0, 47,
- 0, 0, 0, 58, 57, 0, 0, 55, 0, 0,
- 0, 43, 45, 48, 44, 46, 49, 0, 0, 47,
- 86, 0, 56, 58, 57, 0, 0, 55, 53, 0,
- 59, 43, 45, 48, 44, 46, 49, 0, 0, 47,
- 60, 0, 56, 58, 57, 0, 90, 55, 53, 0,
- 59, 43, 45, 48, 44, 46, 49, 58, 133, 47,
- 60, 0, 56, 0, 0, 0, 39, 55, 53, 0,
- 59, 43, 45, 48, 44, 46, 49, 58, 57, 47,
- 60, 55, 56, 0, 58, 57, 0, 0, 53, 0,
- 59, 131, 130, 0, 60, 0, 56, 58, 57, 0,
- 0, 55, 132, 0, 59, 0, 116, 0, 55, 58,
- 57, 0, 0, 117, 0, 0, 56, 0, 0, 0,
- 0, 55, 76, 56, 59, 58, 179, 0, 193, 76,
- 0, 59, 0, 55, 75, 0, 56, 58, 57, 0,
- 0, 0, 76, 180, 59, 0, 0, 0, 56, 55,
- 0, 58, 57, 0, 76, 0, 59, 0, 0, 178,
- 0, 55, 0, 0, 56, 0, 0, 0, 0, 0,
- 76, 0, 59, 0, 60, 55, 56, 0, 0, 0,
- 0, 0, 53, 0, 59, 0, 0, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 76, 0, 59, 165,
- 164, 163, 161, 162, 156, 157, 158, 159, 160, 164,
- 163, 161, 162, 156, 157, 158, 159, 160, 163, 161,
- 162, 156, 157, 158, 159, 160, 161, 162, 156, 157,
- 158, 159, 160,
-}
-var yyPact = [...]int{
-
- -1000, -1000, 250, -1000, 72, -1000, 74, 67, 65, 61,
- 374, 294, 294, 394, 159, -1000, -1000, 274, 354, 294,
- 294, 294, 394, -5, -5, -1000, 294, 294, 84, 488,
- 488, -1000, 502, -1000, -1000, 502, -1000, -1000, -1000, 394,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -3, 428, -7, -1000, -1000, 502, 502, 502,
- 209, -1000, 59, -1000, -1000, 408, -1000, 56, -1000, 48,
- -1000, 448, -1000, 42, -8, 226, 502, -1000, 334, -1000,
- -1000, -1000, 64, -1000, -1000, -9, 209, -1000, -1000, -1000,
- 394, -1000, 41, -1000, 39, -1000, 35, -1000, 34, -1000,
- 31, -1000, -1000, -1000, 30, -1000, 28, 189, 23, 17,
- 250, 555, -1000, 555, -1000, 111, 2, -17, 282, 106,
- -1000, -1000, -1000, -10, 232, 502, 502, -1000, -1000, -1000,
- -1000, -1000, 476, 460, 394, 294, -1000, 448, 117, -1000,
- -1000, -1000, -1000, 161, -10, 394, 394, 394, 314, 394,
- 294, 294, 502, 435, 137, -1000, 502, 502, 502, 502,
- 502, 234, 230, 502, 502, 502, -6, -18, -20, -12,
- 502, -1000, -1000, 219, 95, 226, -1000, -1000, -21, 89,
- -1000, -1000, -1000, -1000, -25, 79, 76, -1000, 16, 15,
- -1000, -1000, 10, 153, 9, -1000, 3, 211, 211, -1000,
- -1000, -1000, 502, 502, 579, 572, 564, -14, 502, -1000,
- -1000, 103, -26, 502, -29, -1000, -1000, -1000, -15, -1000,
- -30, -1000, 101, 96, 502, 314, -5, -1000, 227, 164,
- -1, -5, 247, 247, 134, -31, 218, -1000, -32, -1000,
- 112, -1000, -1000, -1000, -1000, -1000, -1000, 156, 157, 153,
- -1000, 215, 199, -1000, 502, -1000, -34, -1000, 155, -1000,
- 502, 502, -39, -1000, -1000, -41, -49, -1000, -1000, -1000,
-}
-var yyPgo = [...]int{
-
- 0, 0, 17, 324, 8, 202, 7, 1, 2, 12,
- 4, 96, 43, 11, 9, 10, 208, 323, 198, 321,
- 318, 317, 310, 309, 308, 306, 305, 302, 301, 299,
- 297, 263, 254, 253, 3, 250, 249, 248, 247, 245,
-}
-var yyR1 = [...]int{
-
- 0, 32, 33, 32, 35, 34, 34, 34, 34, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 16, 16, 20, 21, 19, 19, 18, 18, 17, 17,
- 17, 37, 38, 38, 39, 39, 22, 22, 23, 23,
- 24, 24, 25, 25, 26, 26, 26, 27, 28, 29,
- 29, 30, 31, 11, 11, 13, 13, 13, 13, 13,
- 13, 12, 12, 10, 10, 8, 8, 8, 8, 8,
- 8, 8, 6, 6, 6, 6, 6, 6, 6, 5,
- 5, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 15, 15, 9, 9, 4, 4, 4, 3,
- 3, 3, 1, 1, 1, 1, 1, 1, 7, 7,
- 7, 7, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2,
-}
-var yyR2 = [...]int{
-
- 0, 0, 0, 3, 0, 4, 1, 2, 2, 3,
- 3, 2, 2, 2, 2, 2, 2, 1, 1, 2,
- 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
- 0, 1, 3, 3, 2, 1, 2, 1, 2, 1,
- 3, 6, 5, 7, 4, 6, 2, 1, 1, 1,
- 3, 5, 3, 5, 2, 1, 3, 5, 5, 0,
- 1, 3, 3, 1, 1, 1, 1, 2, 2, 1,
- 1, 1, 1, 4, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 2, 2, 4, 5, 3, 1,
- 1, 1, 4, 4, 4, 6, 9, 9, 3, 3,
- 5, 8, 1, 6, 5, 7, 0, 2, 2, 1,
- 1, 1, 1, 1, 2, 2, 2, 3, 1, 2,
- 3, 4, 1, 3, 3, 3, 3, 3, 4, 4,
- 3, 3, 3,
-}
-var yyChk = [...]int{
-
- -1000, -32, -33, -34, 46, 50, -36, 2, 48, 14,
- 15, 16, 17, 18, 22, -37, -38, 19, 21, 26,
- 27, 28, 29, 30, 31, -39, 25, 32, 20, 23,
- 24, 49, 51, 50, 50, 51, -16, 52, -18, 52,
- -11, -8, -5, 37, 40, 38, 41, 45, 39, 42,
- -14, -15, -1, 54, -9, 33, 48, 10, 9, 56,
- 46, -19, -12, -11, -6, 53, -20, -12, -21, -11,
- -17, 52, -10, -6, -1, 46, 54, -22, 52, -13,
- -10, -15, 11, -8, -14, -1, 46, -23, -16, -18,
- 52, -24, -12, -25, -12, -26, -12, -27, -11, -28,
- -6, -29, -6, -30, -12, -31, -12, -9, -5, -5,
- -35, -2, -1, -2, -11, 54, 38, 45, -2, 54,
- -1, -1, -1, -4, 7, 9, 10, 52, -1, -9,
- 44, 43, 54, 10, 52, 52, -10, 52, 54, -4,
- -13, -8, -14, 54, -4, 52, 52, 52, 52, 52,
- 52, 52, 12, 52, 52, -34, 9, 10, 11, 12,
- 13, 7, 8, 6, 5, 4, 38, 45, 39, 55,
- 11, 55, 55, 38, 54, 8, -1, -1, 43, 10,
- 43, -11, -12, -10, 35, -11, -11, -11, -8, -11,
- -12, -12, -1, 53, -1, -6, -1, -2, -2, -2,
- -2, -2, 7, 8, -2, -2, -2, 55, 11, 55,
- 55, 54, -1, 11, -3, 36, 45, 34, -4, 55,
- 43, 55, 49, 49, 52, 52, 52, -7, 33, 10,
- 52, 52, -2, -2, 54, -1, 38, 55, -1, 55,
- 54, 55, 38, 39, -1, -8, -6, 10, 33, 53,
- -6, 38, 39, 55, 11, 55, 36, 33, 10, -7,
- 11, 11, -1, 55, 33, -1, -1, 55, 55, 55,
-}
-var yyDef = [...]int{
-
- 1, -2, 0, 3, 0, 6, 0, 0, 0, 30,
- 0, 0, 0, 0, 0, 17, 18, 0, 30, 0,
- 0, 0, 0, 0, 59, 27, 0, 0, 0, 0,
- 0, 4, 0, 7, 8, 0, 11, 31, 12, 0,
- 37, 63, 64, 75, 76, 77, 78, 79, 80, 81,
- 89, 90, 91, 0, 102, 112, 113, 0, 0, 0,
- 106, 13, 35, 71, 72, 0, 14, 0, 15, 0,
- 16, 0, 39, 0, 0, 106, 0, 19, 0, 47,
- 65, 66, 0, 69, 70, 91, 106, 20, 48, 49,
- 31, 21, 0, 22, 0, 23, 55, 24, 0, 25,
- 0, 26, 60, 28, 0, 29, 0, 0, 0, 0,
- 0, 9, 122, 10, 36, 0, 0, 0, 0, 0,
- 114, 115, 116, 0, 0, 0, 0, 34, 82, 83,
- 84, 85, 0, 0, 0, 0, 38, 0, 0, 74,
- 46, 67, 68, 0, 74, 0, 0, 54, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,
- 0, 99, 117, 0, 0, 106, 107, 108, 0, 0,
- 88, 32, 33, 40, 0, 50, 52, 56, 0, 0,
- 61, 62, 0, 0, 0, 44, 0, 123, 124, 125,
- 126, 127, 0, 0, 130, 131, 132, 92, 0, 93,
- 94, 0, 0, 0, 0, 109, 110, 111, 0, 86,
- 0, 73, 0, 0, 0, 0, 0, 42, 118, 0,
- 0, 0, 128, 129, 0, 0, 0, 100, 0, 104,
- 0, 87, 51, 53, 57, 58, 41, 0, 119, 0,
- 45, 0, 0, 95, 0, 103, 0, 120, 0, 43,
- 0, 0, 0, 105, 121, 0, 0, 101, 96, 97,
-}
-var yyTok1 = [...]int{
-
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 53, 13, 6, 3,
- 54, 55, 11, 9, 52, 10, 3, 12, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 49, 50,
- 7, 51, 8, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 5, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 56,
-}
-var yyTok2 = [...]int{
-
- 2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48,
-}
-var yyTok3 = [...]int{
- 0,
-}
-
-var yyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- yyDebug = 0
- yyErrorVerbose = false
-)
-
-type yyLexer interface {
- Lex(lval *yySymType) int
- Error(s string)
-}
-
-type yyParser interface {
- Parse(yyLexer) int
- Lookahead() int
-}
-
-type yyParserImpl struct {
- lookahead func() int
-}
-
-func (p *yyParserImpl) Lookahead() int {
- return p.lookahead()
-}
-
-func yyNewParser() yyParser {
- p := &yyParserImpl{
- lookahead: func() int { return -1 },
- }
- return p
-}
-
-const yyFlag = -1000
-
-func yyTokname(c int) string {
- if c >= 1 && c-1 < len(yyToknames) {
- if yyToknames[c-1] != "" {
- return yyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func yyStatname(s int) string {
- if s >= 0 && s < len(yyStatenames) {
- if yyStatenames[s] != "" {
- return yyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func yyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !yyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range yyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + yyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := yyPact[state]
- for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
- if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if yyDef[state] == -2 {
- i := 0
- for yyExca[i] != -1 || yyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; yyExca[i] >= 0; i += 2 {
- tok := yyExca[i]
- if tok < TOKSTART || yyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if yyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += yyTokname(tok)
- }
- return res
-}
-
-func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = yyTok1[0]
- goto out
- }
- if char < len(yyTok1) {
- token = yyTok1[char]
- goto out
- }
- if char >= yyPrivate {
- if char < yyPrivate+len(yyTok2) {
- token = yyTok2[char-yyPrivate]
- goto out
- }
- }
- for i := 0; i < len(yyTok3); i += 2 {
- token = yyTok3[i+0]
- if token == char {
- token = yyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = yyTok2[1] /* unknown char */
- }
- if yyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
- }
- return char, token
-}
-
-func yyParse(yylex yyLexer) int {
- return yyNewParser().Parse(yylex)
-}
-
-func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
- var yyn int
- var yylval yySymType
- var yyVAL yySymType
- var yyDollar []yySymType
- yyS := make([]yySymType, yyMaxDepth)
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- yystate := 0
- yychar := -1
- yytoken := -1 // yychar translated into internal numbering
- yyrcvr.lookahead = func() int { return yychar }
- defer func() {
- // Make sure we report no lookahead when not parsing.
- yystate = -1
- yychar = -1
- yytoken = -1
- }()
- yyp := -1
- goto yystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-yystack:
- /* put a state and value onto the stack */
- if yyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
- }
-
- yyp++
- if yyp >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyS[yyp] = yyVAL
- yyS[yyp].yys = yystate
-
-yynewstate:
- yyn = yyPact[yystate]
- if yyn <= yyFlag {
- goto yydefault /* simple state */
- }
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
- yyn += yytoken
- if yyn < 0 || yyn >= yyLast {
- goto yydefault
- }
- yyn = yyAct[yyn]
- if yyChk[yyn] == yytoken { /* valid shift */
- yychar = -1
- yytoken = -1
- yyVAL = yylval
- yystate = yyn
- if Errflag > 0 {
- Errflag--
- }
- goto yystack
- }
-
-yydefault:
- /* default state action */
- yyn = yyDef[yystate]
- if yyn == -2 {
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- yyn = yyExca[xi+0]
- if yyn < 0 || yyn == yytoken {
- break
- }
- }
- yyn = yyExca[xi+1]
- if yyn < 0 {
- goto ret0
- }
- }
- if yyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- yylex.Error(yyErrorMessage(yystate, yytoken))
- Nerrs++
- if yyDebug >= 1 {
- __yyfmt__.Printf("%s", yyStatname(yystate))
- __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for yyp >= 0 {
- yyn = yyPact[yyS[yyp].yys] + yyErrCode
- if yyn >= 0 && yyn < yyLast {
- yystate = yyAct[yyn] /* simulate a shift of "error" */
- if yyChk[yystate] == yyErrCode {
- goto yystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
- }
- yyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
- }
- if yytoken == yyEofCode {
- goto ret1
- }
- yychar = -1
- yytoken = -1
- goto yynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production yyn */
- if yyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
- }
-
- yynt := yyn
- yypt := yyp
- _ = yypt // guard against "declared and not used"
-
- yyp -= yyR2[yyn]
- // yyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if yyp+1 >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyVAL = yyS[yyp+1]
-
- /* consult goto table to find next state */
- yyn = yyR1[yyn]
- yyg := yyPgo[yyn]
- yyj := yyg + yyS[yyp].yys + 1
-
- if yyj >= yyLast {
- yystate = yyAct[yyg]
- } else {
- yystate = yyAct[yyj]
- if yyChk[yystate] != -yyn {
- yystate = yyAct[yyg]
- }
- }
- // dummy call; replaced with literal code
- switch yynt {
-
- case 2:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:72
- {
- stmtline = asm.Lineno
- }
- case 4:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:79
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- if yyDollar[1].sym.Type == LLAB && yyDollar[1].sym.Value != int64(asm.PC) {
- yyerror("redeclaration of %s (%s)", yyDollar[1].sym.Labelname, yyDollar[1].sym.Name)
- }
- yyDollar[1].sym.Type = LLAB
- yyDollar[1].sym.Value = int64(asm.PC)
- }
- case 9:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:94
- {
- yyDollar[1].sym.Type = LVAR
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 10:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:99
- {
- if yyDollar[1].sym.Value != yyDollar[3].lval {
- yyerror("redeclaration of %s", yyDollar[1].sym.Name)
- }
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 11:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:105
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 12:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:106
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 13:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:107
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 14:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:108
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 15:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:109
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 16:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:110
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 19:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:113
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 20:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:114
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 21:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:115
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 22:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:116
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 23:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:117
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 24:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:118
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 25:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:119
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 26:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:120
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 28:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:122
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 29:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:123
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 30:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:126
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = nullgen
- }
- case 31:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:131
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = nullgen
- }
- case 32:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:138
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 33:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:145
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 34:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:152
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 35:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:157
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 36:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:164
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 37:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:169
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 38:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:176
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 39:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:181
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 40:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:186
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 41:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:193
- {
- var a Addr2
- a.from = yyDollar[2].addr
- a.to = yyDollar[6].addr
- outcode(obj.ADATA, &a)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 42:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:207
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.ATEXT, &Addr2{from: yyDollar[2].addr, to: yyDollar[5].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 43:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:215
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.ATEXT, &Addr2{from: yyDollar[2].addr, to: yyDollar[7].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 44:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:227
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.AGLOBL, &Addr2{from: yyDollar[2].addr, to: yyDollar[4].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 45:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:235
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.AGLOBL, &Addr2{from: yyDollar[2].addr, to: yyDollar[6].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 46:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:247
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 47:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:252
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 50:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:263
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 51:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:268
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- if yyVAL.addr2.from.Index != obj.TYPE_NONE {
- yyerror("dp shift with lhs index")
- }
- yyVAL.addr2.from.Index = int16(yyDollar[5].lval)
- }
- case 52:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:279
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 53:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:284
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- if yyVAL.addr2.to.Index != obj.TYPE_NONE {
- yyerror("dp move with lhs index")
- }
- yyVAL.addr2.to.Index = int16(yyDollar[5].lval)
- }
- case 54:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:295
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 55:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:300
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 56:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:305
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 57:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:312
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.from3 = yyDollar[3].addr
- yyVAL.addr2.to.Type = obj.TYPE_MEM // to give library something to do
- yyVAL.addr2.to.Offset = yyDollar[5].lval
- }
- case 58:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:321
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.from3 = yyDollar[3].addr
- yyVAL.addr2.to = yyDollar[5].addr
- }
- case 59:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:328
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = nullgen
- }
- case 60:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:333
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 61:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:340
- {
- if yyDollar[1].addr.Type != obj.TYPE_CONST || yyDollar[3].addr.Type != obj.TYPE_CONST {
- yyerror("arguments to asm.PCDATA must be integer constants")
- }
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 62:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:350
- {
- if yyDollar[1].addr.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if yyDollar[3].addr.Type != obj.TYPE_MEM || (yyDollar[3].addr.Name != obj.NAME_EXTERN && yyDollar[3].addr.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 67:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:369
- {
- yyVAL.addr = yyDollar[2].addr
- }
- case 68:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:373
- {
- yyVAL.addr = yyDollar[2].addr
- }
- case 73:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:385
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].lval + int64(asm.PC)
- }
- case 74:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:391
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- yyVAL.addr = nullgen
- if asm.Pass == 2 && yyDollar[1].sym.Type != LLAB {
- yyerror("undefined label: %s", yyDollar[1].sym.Labelname)
- }
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].sym.Value + yyDollar[2].lval
- }
- case 75:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:403
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 76:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:409
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 77:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:415
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 78:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:421
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 79:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:427
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = x86.REG_SP
- }
- case 80:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:433
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 81:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:439
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 82:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:447
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 83:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:453
- {
- yyVAL.addr = yyDollar[2].addr
- yyVAL.addr.Type = obj.TYPE_ADDR
- /*
- if($2.Type == x86.D_AUTO || $2.Type == x86.D_PARAM)
- yyerror("constant cannot be automatic: %s",
- $2.sym.Name);
- */
- }
- case 84:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:462
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SCONST
- yyVAL.addr.Val = (yyDollar[2].sval + "\x00\x00\x00\x00\x00\x00\x00\x00")[:8]
- }
- case 85:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:468
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[2].dval
- }
- case 86:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:474
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[3].dval
- }
- case 87:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:480
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[4].dval
- }
- case 88:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:486
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[3].dval
- }
- case 91:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:498
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 92:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:504
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 93:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:511
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = x86.REG_SP
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 94:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:518
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 95:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:525
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[3].lval)
- yyVAL.addr.Scale = int16(yyDollar[5].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 96:
- yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:534
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[6].lval)
- yyVAL.addr.Scale = int16(yyDollar[8].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 97:
- yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:544
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[6].lval)
- yyVAL.addr.Scale = int16(yyDollar[8].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 98:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:554
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- }
- case 99:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:560
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = x86.REG_SP
- }
- case 100:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:566
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Index = int16(yyDollar[2].lval)
- yyVAL.addr.Scale = int16(yyDollar[4].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 101:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:574
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Index = int16(yyDollar[5].lval)
- yyVAL.addr.Scale = int16(yyDollar[7].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 102:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:585
- {
- yyVAL.addr = yyDollar[1].addr
- }
- case 103:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:589
- {
- yyVAL.addr = yyDollar[1].addr
- yyVAL.addr.Index = int16(yyDollar[3].lval)
- yyVAL.addr.Scale = int16(yyDollar[5].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 104:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:598
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[4].lval)
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 0)
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 105:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:606
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = obj.NAME_STATIC
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 1)
- yyVAL.addr.Offset = yyDollar[4].lval
- }
- case 106:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:615
- {
- yyVAL.lval = 0
- }
- case 107:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:619
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 108:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:623
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 110:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:630
- {
- yyVAL.lval = obj.NAME_AUTO
- }
- case 113:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:638
- {
- yyVAL.lval = yyDollar[1].sym.Value
- }
- case 114:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:642
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 115:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:646
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 116:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:650
- {
- yyVAL.lval = ^yyDollar[2].lval
- }
- case 117:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:654
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 118:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:660
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 119:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:667
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -yyDollar[2].lval
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 120:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:674
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Val = int32(yyDollar[3].lval)
- }
- case 121:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:681
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -yyDollar[2].lval
- yyVAL.addr.Val = int32(yyDollar[4].lval)
- }
- case 123:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:691
- {
- yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
- }
- case 124:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:695
- {
- yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
- }
- case 125:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:699
- {
- yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
- }
- case 126:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:703
- {
- yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
- }
- case 127:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:707
- {
- yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
- }
- case 128:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:711
- {
- yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
- }
- case 129:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:715
- {
- yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
- }
- case 130:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:719
- {
- yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
- }
- case 131:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:723
- {
- yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
- }
- case 132:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:727
- {
- yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
- }
- }
- goto yystack /* stack new state and value */
-}
+++ /dev/null
-// Inferno utils/8a/a.y
-// http://code.google.com/p/inferno-os/source/browse/utils/8a/a.y
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-%{
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/x86"
-)
-%}
-
-%union {
- sym *asm.Sym
- lval int64
- con2 struct {
- v1 int32
- v2 int32
- }
- dval float64
- sval string
- addr obj.Addr
- addr2 Addr2
-}
-
-%left '|'
-%left '^'
-%left '&'
-%left '<' '>'
-%left '+' '-'
-%left '*' '/' '%'
-%token <lval> LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4
-%token <lval> LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG LTYPEXC
-%token <lval> LTYPEX LTYPEPC LTYPEF LCONST LFP LPC LSB
-%token <lval> LBREG LLREG LSREG LFREG LXREG
-%token <dval> LFCONST
-%token <sval> LSCONST LSP
-%token <sym> LNAME LLAB LVAR
-%type <lval> con expr pointer offset
-%type <addr> mem imm reg nam rel rem rim rom omem nmem textsize
-%type <addr2> nonnon nonrel nonrem rimnon rimrem remrim
-%type <addr2> spec3 spec4 spec5 spec6 spec7 spec9 spec10 spec11 spec12
-%%
-prog:
-| prog
- {
- stmtline = asm.Lineno;
- }
- line
-
-line:
- LNAME ':'
- {
- $1 = asm.LabelLookup($1);
- if $1.Type == LLAB && $1.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", $1.Labelname)
- }
- $1.Type = LLAB;
- $1.Value = int64(asm.PC)
- }
- line
-| ';'
-| inst ';'
-| error ';'
-
-inst:
- LNAME '=' expr
- {
- $1.Type = LVAR;
- $1.Value = $3;
- }
-| LVAR '=' expr
- {
- if $1.Value != int64($3) {
- yyerror("redeclaration of %s", $1.Name);
- }
- $1.Value = $3;
- }
-| LTYPE0 nonnon { outcode(int($1), &$2); }
-| LTYPE1 nonrem { outcode(int($1), &$2); }
-| LTYPE2 rimnon { outcode(int($1), &$2); }
-| LTYPE3 rimrem { outcode(int($1), &$2); }
-| LTYPE4 remrim { outcode(int($1), &$2); }
-| LTYPER nonrel { outcode(int($1), &$2); }
-| spec1
-| spec2
-| LTYPEC spec3 { outcode(int($1), &$2); }
-| LTYPEN spec4 { outcode(int($1), &$2); }
-| LTYPES spec5 { outcode(int($1), &$2); }
-| LTYPEM spec6 { outcode(int($1), &$2); }
-| LTYPEI spec7 { outcode(int($1), &$2); }
-| spec8
-| LTYPEXC spec9 { outcode(int($1), &$2); }
-| LTYPEX spec10 { outcode(int($1), &$2); }
-| LTYPEPC spec11 { outcode(int($1), &$2); }
-| LTYPEF spec12 { outcode(int($1), &$2); }
-
-nonnon:
- {
- $$.from = nullgen;
- $$.to = nullgen;
- }
-| ','
- {
- $$.from = nullgen;
- $$.to = nullgen;
- }
-
-rimrem:
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-remrim:
- rem ',' rim
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-rimnon:
- rim ','
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-
-nonrem:
- ',' rem
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rem
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-
-nonrel:
- ',' rel
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rel
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-| imm ',' rel
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-spec1: /* DATA */
- LTYPED nam '/' con ',' imm
- {
- outcode(obj.ADATA, &Addr2{$2, $6})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-spec2: /* TEXT */
- LTYPET mem ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(obj.ATEXT, &Addr2{$2, $5})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTYPET mem ',' con ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(obj.ATEXT, &Addr2{$2, $7})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-spec8: /* GLOBL */
- LTYPEG mem ',' imm
- {
- asm.Settext($2.Sym);
- outcode(obj.AGLOBL, &Addr2{$2, $4})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTYPEG mem ',' con ',' imm
- {
- asm.Settext($2.Sym);
- outcode(obj.AGLOBL, &Addr2{$2, $6})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-
-spec3: /* JMP/CALL */
- ',' rom
- {
- $$.from = nullgen;
- $$.to = $2;
- }
-| rom
- {
- $$.from = nullgen;
- $$.to = $1;
- }
-| '*' nam
- {
- $$.from = nullgen;
- $$.to = $2;
- $$.to.Type = obj.TYPE_INDIR
- }
-
-spec4: /* NOP */
- nonnon
-| nonrem
-
-spec5: /* SHL/SHR */
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-| rim ',' rem ':' LLREG
- {
- $$.from = $1;
- $$.to = $3;
- if $$.from.Index != obj.TYPE_NONE {
- yyerror("dp shift with lhs index");
- }
- $$.from.Index = int16($5);
- }
-
-spec6: /* MOVW/MOVL */
- rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-| rim ',' rem ':' LSREG
- {
- $$.from = $1;
- $$.to = $3;
- if $$.to.Index != obj.TYPE_NONE {
- yyerror("dp move with lhs index");
- }
- $$.to.Index = int16($5);
- }
-
-spec7:
- rim ','
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim
- {
- $$.from = $1;
- $$.to = nullgen;
- }
-| rim ',' rem
- {
- $$.from = $1;
- $$.to = $3;
- }
-
-spec9: /* CMPPS/CMPPD */
- rem ',' reg ',' con
- {
- $$.from = $1;
- $$.to = $3;
- $$.to.Offset = $5;
- }
-
-spec10: /* PINSRD */
- imm ',' rem ',' reg
- {
- $$.from = $3;
- $$.to = $5;
- if $1.Type != obj.TYPE_CONST {
- yyerror("illegal constant")
- }
- $$.to.Offset = $1.Offset;
- }
-
-spec11: /* PCDATA */
- rim ',' rim
- {
- if $1.Type != obj.TYPE_CONST || $3.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants");
- }
- $$.from = $1;
- $$.to = $3;
- }
-
-spec12: /* FUNCDATA */
- rim ',' rim
- {
- if $1.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant");
- }
- if $3.Type != obj.TYPE_MEM || ($3.Name != obj.NAME_EXTERN && $3.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference");
- }
- $$.from = $1;
- $$.to = $3;
- }
-
-rem:
- reg
-| mem
-
-rom:
- rel
-| nmem
-| '*' reg
- {
- $$ = $2;
- }
-| '*' omem
- {
- $$ = $2;
- }
-| reg
-| omem
-| imm
-
-rim:
- rem
-| imm
-
-rel:
- con '(' LPC ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1 + int64(asm.PC);
- }
-| LNAME offset
- {
- $1 = asm.LabelLookup($1);
- $$ = nullgen;
- if asm.Pass == 2 && $1.Type != LLAB {
- yyerror("undefined label: %s", $1.Labelname);
- }
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1.Value + $2;
- }
-
-reg:
- LBREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LFREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LLREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LXREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-| LSP
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = REG_SP;
- }
-| LSREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1);
- }
-
-imm:
- '$' con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- $$.Offset = $2;
- }
-| '$' nam
- {
- $$ = $2;
- $$.Type = obj.TYPE_ADDR
- /*
- if($2.Type == D_AUTO || $2.Type == D_PARAM)
- yyerror("constant cannot be automatic: %s",
- $2.Sym.name);
- */
- }
-| '$' LSCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SCONST;
- $$.Val = $2
- }
-| '$' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $2;
- }
-| '$' '(' LFCONST ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $3;
- }
-| '$' '(' '-' LFCONST ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$4;
- }
-| '$' '-' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$3;
- }
-
-textsize:
- LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = $1;
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -$2;
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = $1;
- $$.Val = int32($3);
- }
-| '-' LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -$2;
- $$.Val = int32($4);
- }
-
-
-mem:
- omem
-| nmem
-
-omem:
- con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Offset = $1;
- }
-| con '(' LLREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- }
-| con '(' LSP ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = REG_SP
- $$.Offset = $1;
- }
-| con '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Offset = $1;
- $$.Index = int16($3);
- $$.Scale = int16($5);
- checkscale($$.Scale);
- }
-| con '(' LLREG ')' '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- $$.Index = int16($6);
- $$.Scale = int16($8);
- checkscale($$.Scale);
- }
-| con '(' LLREG ')' '(' LSREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- $$.Index = int16($6);
- $$.Scale = int16($8);
- checkscale($$.Scale);
- }
-| '(' LLREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($2);
- }
-| '(' LSP ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = REG_SP
- }
-| con '(' LSREG ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($3)
- $$.Offset = $1;
- }
-| '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Index = int16($2);
- $$.Scale = int16($4);
- checkscale($$.Scale);
- }
-| '(' LLREG ')' '(' LLREG '*' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Reg = int16($2)
- $$.Index = int16($5);
- $$.Scale = int16($7);
- checkscale($$.Scale);
- }
-
-nmem:
- nam
- {
- $$ = $1;
- }
-| nam '(' LLREG '*' con ')'
- {
- $$ = $1;
- $$.Index = int16($3);
- $$.Scale = int16($5);
- checkscale($$.Scale);
- }
-
-nam:
- LNAME offset '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Name = int8($4);
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 0);
- $$.Offset = $2;
- }
-| LNAME '<' '>' offset '(' LSB ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM
- $$.Name = obj.NAME_STATIC
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 1);
- $$.Offset = $4;
- }
-
-offset:
- {
- $$ = 0;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '-' con
- {
- $$ = -$2;
- }
-
-pointer:
- LSB
-| LSP
- {
- $$ = obj.NAME_AUTO;
- }
-| LFP
-
-con:
- LCONST
-| LVAR
- {
- $$ = $1.Value;
- }
-| '-' con
- {
- $$ = -$2;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '~' con
- {
- $$ = ^$2;
- }
-| '(' expr ')'
- {
- $$ = $2;
- }
-
-expr:
- con
-| expr '+' expr
- {
- $$ = $1 + $3;
- }
-| expr '-' expr
- {
- $$ = $1 - $3;
- }
-| expr '*' expr
- {
- $$ = $1 * $3;
- }
-| expr '/' expr
- {
- $$ = $1 / $3;
- }
-| expr '%' expr
- {
- $$ = $1 % $3;
- }
-| expr '<' '<' expr
- {
- $$ = $1 << uint($4);
- }
-| expr '>' '>' expr
- {
- $$ = $1 >> uint($4);
- }
-| expr '&' expr
- {
- $$ = $1 & $3;
- }
-| expr '^' expr
- {
- $$ = $1 ^ $3;
- }
-| expr '|' expr
- {
- $$ = $1 | $3;
- }
+++ /dev/null
-// Inferno utils/8a/lex.c
-// http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-//go:generate go tool yacc a.y
-
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/x86"
-)
-
-var (
- yyerror = asm.Yyerror
- nullgen obj.Addr
- stmtline int32
-)
-
-func main() {
- cinit()
-
- asm.LSCONST = LSCONST
- asm.LCONST = LCONST
- asm.LFCONST = LFCONST
- asm.LNAME = LNAME
- asm.LVAR = LVAR
- asm.LLAB = LLAB
-
- asm.Lexinit = lexinit
- asm.Cclean = cclean
- asm.Yyparse = yyparse
-
- asm.Thechar = '8'
- asm.Thestring = "386"
- asm.Thelinkarch = &x86.Link386
-
- asm.Main()
-}
-
-type yy struct{}
-
-func (yy) Lex(v *yySymType) int {
- var av asm.Yylval
- tok := asm.Yylex(&av)
- v.sym = av.Sym
- v.lval = av.Lval
- v.sval = av.Sval
- v.dval = av.Dval
- return tok
-}
-
-func (yy) Error(msg string) {
- asm.Yyerror("%s", msg)
-}
-
-func yyparse() {
- yyParse(yy{})
-}
-
-var lexinit = []asm.Lextab{
- {"SP", LSP, obj.NAME_AUTO},
- {"SB", LSB, obj.NAME_EXTERN},
- {"FP", LFP, obj.NAME_PARAM},
- {"PC", LPC, obj.TYPE_BRANCH},
- {"AL", LBREG, x86.REG_AL},
- {"CL", LBREG, x86.REG_CL},
- {"DL", LBREG, x86.REG_DL},
- {"BL", LBREG, x86.REG_BL},
- {"AH", LBREG, x86.REG_AH},
- {"CH", LBREG, x86.REG_CH},
- {"DH", LBREG, x86.REG_DH},
- {"BH", LBREG, x86.REG_BH},
- {"AX", LLREG, x86.REG_AX},
- {"CX", LLREG, x86.REG_CX},
- {"DX", LLREG, x86.REG_DX},
- {"BX", LLREG, x86.REG_BX},
- /* "SP", LLREG, REG_SP, */
- {"BP", LLREG, x86.REG_BP},
- {"SI", LLREG, x86.REG_SI},
- {"DI", LLREG, x86.REG_DI},
- {"F0", LFREG, x86.REG_F0 + 0},
- {"F1", LFREG, x86.REG_F0 + 1},
- {"F2", LFREG, x86.REG_F0 + 2},
- {"F3", LFREG, x86.REG_F0 + 3},
- {"F4", LFREG, x86.REG_F0 + 4},
- {"F5", LFREG, x86.REG_F0 + 5},
- {"F6", LFREG, x86.REG_F0 + 6},
- {"F7", LFREG, x86.REG_F0 + 7},
- {"X0", LXREG, x86.REG_X0 + 0},
- {"X1", LXREG, x86.REG_X0 + 1},
- {"X2", LXREG, x86.REG_X0 + 2},
- {"X3", LXREG, x86.REG_X0 + 3},
- {"X4", LXREG, x86.REG_X0 + 4},
- {"X5", LXREG, x86.REG_X0 + 5},
- {"X6", LXREG, x86.REG_X0 + 6},
- {"X7", LXREG, x86.REG_X0 + 7},
- {"CS", LSREG, x86.REG_CS},
- {"SS", LSREG, x86.REG_SS},
- {"DS", LSREG, x86.REG_DS},
- {"ES", LSREG, x86.REG_ES},
- {"FS", LSREG, x86.REG_FS},
- {"GS", LSREG, x86.REG_GS},
- {"TLS", LSREG, x86.REG_TLS},
- {"GDTR", LBREG, x86.REG_GDTR},
- {"IDTR", LBREG, x86.REG_IDTR},
- {"LDTR", LBREG, x86.REG_LDTR},
- {"MSW", LBREG, x86.REG_MSW},
- {"TASK", LBREG, x86.REG_TASK},
- {"CR0", LBREG, x86.REG_CR + 0},
- {"CR1", LBREG, x86.REG_CR + 1},
- {"CR2", LBREG, x86.REG_CR + 2},
- {"CR3", LBREG, x86.REG_CR + 3},
- {"CR4", LBREG, x86.REG_CR + 4},
- {"CR5", LBREG, x86.REG_CR + 5},
- {"CR6", LBREG, x86.REG_CR + 6},
- {"CR7", LBREG, x86.REG_CR + 7},
- {"DR0", LBREG, x86.REG_DR + 0},
- {"DR1", LBREG, x86.REG_DR + 1},
- {"DR2", LBREG, x86.REG_DR + 2},
- {"DR3", LBREG, x86.REG_DR + 3},
- {"DR4", LBREG, x86.REG_DR + 4},
- {"DR5", LBREG, x86.REG_DR + 5},
- {"DR6", LBREG, x86.REG_DR + 6},
- {"DR7", LBREG, x86.REG_DR + 7},
- {"TR0", LBREG, x86.REG_TR + 0},
- {"TR1", LBREG, x86.REG_TR + 1},
- {"TR2", LBREG, x86.REG_TR + 2},
- {"TR3", LBREG, x86.REG_TR + 3},
- {"TR4", LBREG, x86.REG_TR + 4},
- {"TR5", LBREG, x86.REG_TR + 5},
- {"TR6", LBREG, x86.REG_TR + 6},
- {"TR7", LBREG, x86.REG_TR + 7},
- {"AAA", LTYPE0, x86.AAAA},
- {"AAD", LTYPE0, x86.AAAD},
- {"AAM", LTYPE0, x86.AAAM},
- {"AAS", LTYPE0, x86.AAAS},
- {"ADCB", LTYPE3, x86.AADCB},
- {"ADCL", LTYPE3, x86.AADCL},
- {"ADCW", LTYPE3, x86.AADCW},
- {"ADDB", LTYPE3, x86.AADDB},
- {"ADDL", LTYPE3, x86.AADDL},
- {"ADDW", LTYPE3, x86.AADDW},
- {"ADJSP", LTYPE2, x86.AADJSP},
- {"ANDB", LTYPE3, x86.AANDB},
- {"ANDL", LTYPE3, x86.AANDL},
- {"ANDW", LTYPE3, x86.AANDW},
- {"ARPL", LTYPE3, x86.AARPL},
- {"BOUNDL", LTYPE3, x86.ABOUNDL},
- {"BOUNDW", LTYPE3, x86.ABOUNDW},
- {"BSFL", LTYPE3, x86.ABSFL},
- {"BSFW", LTYPE3, x86.ABSFW},
- {"BSRL", LTYPE3, x86.ABSRL},
- {"BSRW", LTYPE3, x86.ABSRW},
- {"BSWAPL", LTYPE1, x86.ABSWAPL},
- {"BTCL", LTYPE3, x86.ABTCL},
- {"BTCW", LTYPE3, x86.ABTCW},
- {"BTL", LTYPE3, x86.ABTL},
- {"BTRL", LTYPE3, x86.ABTRL},
- {"BTRW", LTYPE3, x86.ABTRW},
- {"BTSL", LTYPE3, x86.ABTSL},
- {"BTSW", LTYPE3, x86.ABTSW},
- {"BTW", LTYPE3, x86.ABTW},
- {"BYTE", LTYPE2, x86.ABYTE},
- {"CALL", LTYPEC, obj.ACALL},
- {"CLC", LTYPE0, x86.ACLC},
- {"CLD", LTYPE0, x86.ACLD},
- {"CLI", LTYPE0, x86.ACLI},
- {"CLTS", LTYPE0, x86.ACLTS},
- {"CMC", LTYPE0, x86.ACMC},
- {"CMPB", LTYPE4, x86.ACMPB},
- {"CMPL", LTYPE4, x86.ACMPL},
- {"CMPW", LTYPE4, x86.ACMPW},
- {"CMPSB", LTYPE0, x86.ACMPSB},
- {"CMPSL", LTYPE0, x86.ACMPSL},
- {"CMPSW", LTYPE0, x86.ACMPSW},
- {"CMPXCHG8B", LTYPE1, x86.ACMPXCHG8B},
- {"CMPXCHGB", LTYPE3, x86.ACMPXCHGB},
- {"CMPXCHGL", LTYPE3, x86.ACMPXCHGL},
- {"CMPXCHGW", LTYPE3, x86.ACMPXCHGW},
- {"CPUID", LTYPE0, x86.ACPUID},
- {"DAA", LTYPE0, x86.ADAA},
- {"DAS", LTYPE0, x86.ADAS},
- {"DATA", LTYPED, obj.ADATA},
- {"DECB", LTYPE1, x86.ADECB},
- {"DECL", LTYPE1, x86.ADECL},
- {"DECW", LTYPE1, x86.ADECW},
- {"DIVB", LTYPE2, x86.ADIVB},
- {"DIVL", LTYPE2, x86.ADIVL},
- {"DIVW", LTYPE2, x86.ADIVW},
- {"END", LTYPE0, obj.AEND},
- {"ENTER", LTYPE2, x86.AENTER},
- {"GLOBL", LTYPEG, obj.AGLOBL},
- {"HLT", LTYPE0, x86.AHLT},
- {"IDIVB", LTYPE2, x86.AIDIVB},
- {"IDIVL", LTYPE2, x86.AIDIVL},
- {"IDIVW", LTYPE2, x86.AIDIVW},
- {"IMULB", LTYPE2, x86.AIMULB},
- {"IMULL", LTYPEI, x86.AIMULL},
- {"IMULW", LTYPEI, x86.AIMULW},
- {"INB", LTYPE0, x86.AINB},
- {"INL", LTYPE0, x86.AINL},
- {"INW", LTYPE0, x86.AINW},
- {"INCB", LTYPE1, x86.AINCB},
- {"INCL", LTYPE1, x86.AINCL},
- {"INCW", LTYPE1, x86.AINCW},
- {"INSB", LTYPE0, x86.AINSB},
- {"INSL", LTYPE0, x86.AINSL},
- {"INSW", LTYPE0, x86.AINSW},
- {"INT", LTYPE2, x86.AINT},
- {"INTO", LTYPE0, x86.AINTO},
- {"IRETL", LTYPE0, x86.AIRETL},
- {"IRETW", LTYPE0, x86.AIRETW},
- {"JOS", LTYPER, x86.AJOS}, /* overflow set (OF = 1) */
- {"JO", LTYPER, x86.AJOS}, /* alternate */
- {"JOC", LTYPER, x86.AJOC}, /* overflow clear (OF = 0) */
- {"JNO", LTYPER, x86.AJOC}, /* alternate */
- {"JCS", LTYPER, x86.AJCS}, /* carry set (CF = 1) */
- {"JB", LTYPER, x86.AJCS}, /* alternate */
- {"JC", LTYPER, x86.AJCS}, /* alternate */
- {"JNAE", LTYPER, x86.AJCS}, /* alternate */
- {"JLO", LTYPER, x86.AJCS}, /* alternate */
- {"JCC", LTYPER, x86.AJCC}, /* carry clear (CF = 0) */
- {"JAE", LTYPER, x86.AJCC}, /* alternate */
- {"JNB", LTYPER, x86.AJCC}, /* alternate */
- {"JNC", LTYPER, x86.AJCC}, /* alternate */
- {"JHS", LTYPER, x86.AJCC}, /* alternate */
- {"JEQ", LTYPER, x86.AJEQ}, /* equal (ZF = 1) */
- {"JE", LTYPER, x86.AJEQ}, /* alternate */
- {"JZ", LTYPER, x86.AJEQ}, /* alternate */
- {"JNE", LTYPER, x86.AJNE}, /* not equal (ZF = 0) */
- {"JNZ", LTYPER, x86.AJNE}, /* alternate */
- {"JLS", LTYPER, x86.AJLS}, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
- {"JBE", LTYPER, x86.AJLS}, /* alternate */
- {"JNA", LTYPER, x86.AJLS}, /* alternate */
- {"JHI", LTYPER, x86.AJHI}, /* higher (unsigned) (CF = 0 && ZF = 0) */
- {"JA", LTYPER, x86.AJHI}, /* alternate */
- {"JNBE", LTYPER, x86.AJHI}, /* alternate */
- {"JMI", LTYPER, x86.AJMI}, /* negative (minus) (SF = 1) */
- {"JS", LTYPER, x86.AJMI}, /* alternate */
- {"JPL", LTYPER, x86.AJPL}, /* non-negative (plus) (SF = 0) */
- {"JNS", LTYPER, x86.AJPL}, /* alternate */
- {"JPS", LTYPER, x86.AJPS}, /* parity set (PF = 1) */
- {"JP", LTYPER, x86.AJPS}, /* alternate */
- {"JPE", LTYPER, x86.AJPS}, /* alternate */
- {"JPC", LTYPER, x86.AJPC}, /* parity clear (PF = 0) */
- {"JNP", LTYPER, x86.AJPC}, /* alternate */
- {"JPO", LTYPER, x86.AJPC}, /* alternate */
- {"JLT", LTYPER, x86.AJLT}, /* less than (signed) (SF != OF) */
- {"JL", LTYPER, x86.AJLT}, /* alternate */
- {"JNGE", LTYPER, x86.AJLT}, /* alternate */
- {"JGE", LTYPER, x86.AJGE}, /* greater than or equal (signed) (SF = OF) */
- {"JNL", LTYPER, x86.AJGE}, /* alternate */
- {"JLE", LTYPER, x86.AJLE}, /* less than or equal (signed) (ZF = 1 || SF != OF) */
- {"JNG", LTYPER, x86.AJLE}, /* alternate */
- {"JGT", LTYPER, x86.AJGT}, /* greater than (signed) (ZF = 0 && SF = OF) */
- {"JG", LTYPER, x86.AJGT}, /* alternate */
- {"JNLE", LTYPER, x86.AJGT}, /* alternate */
- {"JCXZL", LTYPER, x86.AJCXZL},
- {"JCXZW", LTYPER, x86.AJCXZW},
- {"JMP", LTYPEC, obj.AJMP},
- {"LAHF", LTYPE0, x86.ALAHF},
- {"LARL", LTYPE3, x86.ALARL},
- {"LARW", LTYPE3, x86.ALARW},
- {"LEAL", LTYPE3, x86.ALEAL},
- {"LEAW", LTYPE3, x86.ALEAW},
- {"LEAVEL", LTYPE0, x86.ALEAVEL},
- {"LEAVEW", LTYPE0, x86.ALEAVEW},
- {"LOCK", LTYPE0, x86.ALOCK},
- {"LODSB", LTYPE0, x86.ALODSB},
- {"LODSL", LTYPE0, x86.ALODSL},
- {"LODSW", LTYPE0, x86.ALODSW},
- {"LONG", LTYPE2, x86.ALONG},
- {"LOOP", LTYPER, x86.ALOOP},
- {"LOOPEQ", LTYPER, x86.ALOOPEQ},
- {"LOOPNE", LTYPER, x86.ALOOPNE},
- {"LSLL", LTYPE3, x86.ALSLL},
- {"LSLW", LTYPE3, x86.ALSLW},
- {"MOVB", LTYPE3, x86.AMOVB},
- {"MOVL", LTYPEM, x86.AMOVL},
- {"MOVW", LTYPEM, x86.AMOVW},
- {"MOVQ", LTYPEM, x86.AMOVQ},
- {"MOVBLSX", LTYPE3, x86.AMOVBLSX},
- {"MOVBLZX", LTYPE3, x86.AMOVBLZX},
- {"MOVBWSX", LTYPE3, x86.AMOVBWSX},
- {"MOVBWZX", LTYPE3, x86.AMOVBWZX},
- {"MOVWLSX", LTYPE3, x86.AMOVWLSX},
- {"MOVWLZX", LTYPE3, x86.AMOVWLZX},
- {"MOVSB", LTYPE0, x86.AMOVSB},
- {"MOVSL", LTYPE0, x86.AMOVSL},
- {"MOVSW", LTYPE0, x86.AMOVSW},
- {"MULB", LTYPE2, x86.AMULB},
- {"MULL", LTYPE2, x86.AMULL},
- {"MULW", LTYPE2, x86.AMULW},
- {"NEGB", LTYPE1, x86.ANEGB},
- {"NEGL", LTYPE1, x86.ANEGL},
- {"NEGW", LTYPE1, x86.ANEGW},
- {"NOP", LTYPEN, obj.ANOP},
- {"NOTB", LTYPE1, x86.ANOTB},
- {"NOTL", LTYPE1, x86.ANOTL},
- {"NOTW", LTYPE1, x86.ANOTW},
- {"ORB", LTYPE3, x86.AORB},
- {"ORL", LTYPE3, x86.AORL},
- {"ORW", LTYPE3, x86.AORW},
- {"OUTB", LTYPE0, x86.AOUTB},
- {"OUTL", LTYPE0, x86.AOUTL},
- {"OUTW", LTYPE0, x86.AOUTW},
- {"OUTSB", LTYPE0, x86.AOUTSB},
- {"OUTSL", LTYPE0, x86.AOUTSL},
- {"OUTSW", LTYPE0, x86.AOUTSW},
- {"PAUSE", LTYPEN, x86.APAUSE},
- {"PINSRD", LTYPEX, x86.APINSRD},
- {"POPAL", LTYPE0, x86.APOPAL},
- {"POPAW", LTYPE0, x86.APOPAW},
- {"POPFL", LTYPE0, x86.APOPFL},
- {"POPFW", LTYPE0, x86.APOPFW},
- {"POPL", LTYPE1, x86.APOPL},
- {"POPW", LTYPE1, x86.APOPW},
- {"PUSHAL", LTYPE0, x86.APUSHAL},
- {"PUSHAW", LTYPE0, x86.APUSHAW},
- {"PUSHFL", LTYPE0, x86.APUSHFL},
- {"PUSHFW", LTYPE0, x86.APUSHFW},
- {"PUSHL", LTYPE2, x86.APUSHL},
- {"PUSHW", LTYPE2, x86.APUSHW},
- {"RCLB", LTYPE3, x86.ARCLB},
- {"RCLL", LTYPE3, x86.ARCLL},
- {"RCLW", LTYPE3, x86.ARCLW},
- {"RCRB", LTYPE3, x86.ARCRB},
- {"RCRL", LTYPE3, x86.ARCRL},
- {"RCRW", LTYPE3, x86.ARCRW},
- {"RDTSC", LTYPE0, x86.ARDTSC},
- {"REP", LTYPE0, x86.AREP},
- {"REPN", LTYPE0, x86.AREPN},
- {"RET", LTYPE0, obj.ARET},
- {"ROLB", LTYPE3, x86.AROLB},
- {"ROLL", LTYPE3, x86.AROLL},
- {"ROLW", LTYPE3, x86.AROLW},
- {"RORB", LTYPE3, x86.ARORB},
- {"RORL", LTYPE3, x86.ARORL},
- {"RORW", LTYPE3, x86.ARORW},
- {"SAHF", LTYPE0, x86.ASAHF},
- {"SALB", LTYPE3, x86.ASALB},
- {"SALL", LTYPE3, x86.ASALL},
- {"SALW", LTYPE3, x86.ASALW},
- {"SARB", LTYPE3, x86.ASARB},
- {"SARL", LTYPE3, x86.ASARL},
- {"SARW", LTYPE3, x86.ASARW},
- {"SBBB", LTYPE3, x86.ASBBB},
- {"SBBL", LTYPE3, x86.ASBBL},
- {"SBBW", LTYPE3, x86.ASBBW},
- {"SCASB", LTYPE0, x86.ASCASB},
- {"SCASL", LTYPE0, x86.ASCASL},
- {"SCASW", LTYPE0, x86.ASCASW},
- {"SETCC", LTYPE1, x86.ASETCC}, /* see JCC etc above for condition codes */
- {"SETCS", LTYPE1, x86.ASETCS},
- {"SETEQ", LTYPE1, x86.ASETEQ},
- {"SETGE", LTYPE1, x86.ASETGE},
- {"SETGT", LTYPE1, x86.ASETGT},
- {"SETHI", LTYPE1, x86.ASETHI},
- {"SETLE", LTYPE1, x86.ASETLE},
- {"SETLS", LTYPE1, x86.ASETLS},
- {"SETLT", LTYPE1, x86.ASETLT},
- {"SETMI", LTYPE1, x86.ASETMI},
- {"SETNE", LTYPE1, x86.ASETNE},
- {"SETOC", LTYPE1, x86.ASETOC},
- {"SETOS", LTYPE1, x86.ASETOS},
- {"SETPC", LTYPE1, x86.ASETPC},
- {"SETPL", LTYPE1, x86.ASETPL},
- {"SETPS", LTYPE1, x86.ASETPS},
- {"CDQ", LTYPE0, x86.ACDQ},
- {"CWD", LTYPE0, x86.ACWD},
- {"SHLB", LTYPE3, x86.ASHLB},
- {"SHLL", LTYPES, x86.ASHLL},
- {"SHLW", LTYPES, x86.ASHLW},
- {"SHRB", LTYPE3, x86.ASHRB},
- {"SHRL", LTYPES, x86.ASHRL},
- {"SHRW", LTYPES, x86.ASHRW},
- {"STC", LTYPE0, x86.ASTC},
- {"STD", LTYPE0, x86.ASTD},
- {"STI", LTYPE0, x86.ASTI},
- {"STOSB", LTYPE0, x86.ASTOSB},
- {"STOSL", LTYPE0, x86.ASTOSL},
- {"STOSW", LTYPE0, x86.ASTOSW},
- {"SUBB", LTYPE3, x86.ASUBB},
- {"SUBL", LTYPE3, x86.ASUBL},
- {"SUBW", LTYPE3, x86.ASUBW},
- {"SYSCALL", LTYPE0, x86.ASYSCALL},
- {"TESTB", LTYPE3, x86.ATESTB},
- {"TESTL", LTYPE3, x86.ATESTL},
- {"TESTW", LTYPE3, x86.ATESTW},
- {"TEXT", LTYPET, obj.ATEXT},
- {"VERR", LTYPE2, x86.AVERR},
- {"VERW", LTYPE2, x86.AVERW},
- {"WAIT", LTYPE0, x86.AWAIT},
- {"WORD", LTYPE2, x86.AWORD},
- {"XADDB", LTYPE3, x86.AXADDB},
- {"XADDL", LTYPE3, x86.AXADDL},
- {"XADDW", LTYPE3, x86.AXADDW},
- {"XCHGB", LTYPE3, x86.AXCHGB},
- {"XCHGL", LTYPE3, x86.AXCHGL},
- {"XCHGW", LTYPE3, x86.AXCHGW},
- {"XLAT", LTYPE2, x86.AXLAT},
- {"XORB", LTYPE3, x86.AXORB},
- {"XORL", LTYPE3, x86.AXORL},
- {"XORW", LTYPE3, x86.AXORW},
- {"CMOVLCC", LTYPE3, x86.ACMOVLCC},
- {"CMOVLCS", LTYPE3, x86.ACMOVLCS},
- {"CMOVLEQ", LTYPE3, x86.ACMOVLEQ},
- {"CMOVLGE", LTYPE3, x86.ACMOVLGE},
- {"CMOVLGT", LTYPE3, x86.ACMOVLGT},
- {"CMOVLHI", LTYPE3, x86.ACMOVLHI},
- {"CMOVLLE", LTYPE3, x86.ACMOVLLE},
- {"CMOVLLS", LTYPE3, x86.ACMOVLLS},
- {"CMOVLLT", LTYPE3, x86.ACMOVLLT},
- {"CMOVLMI", LTYPE3, x86.ACMOVLMI},
- {"CMOVLNE", LTYPE3, x86.ACMOVLNE},
- {"CMOVLOC", LTYPE3, x86.ACMOVLOC},
- {"CMOVLOS", LTYPE3, x86.ACMOVLOS},
- {"CMOVLPC", LTYPE3, x86.ACMOVLPC},
- {"CMOVLPL", LTYPE3, x86.ACMOVLPL},
- {"CMOVLPS", LTYPE3, x86.ACMOVLPS},
- {"CMOVWCC", LTYPE3, x86.ACMOVWCC},
- {"CMOVWCS", LTYPE3, x86.ACMOVWCS},
- {"CMOVWEQ", LTYPE3, x86.ACMOVWEQ},
- {"CMOVWGE", LTYPE3, x86.ACMOVWGE},
- {"CMOVWGT", LTYPE3, x86.ACMOVWGT},
- {"CMOVWHI", LTYPE3, x86.ACMOVWHI},
- {"CMOVWLE", LTYPE3, x86.ACMOVWLE},
- {"CMOVWLS", LTYPE3, x86.ACMOVWLS},
- {"CMOVWLT", LTYPE3, x86.ACMOVWLT},
- {"CMOVWMI", LTYPE3, x86.ACMOVWMI},
- {"CMOVWNE", LTYPE3, x86.ACMOVWNE},
- {"CMOVWOC", LTYPE3, x86.ACMOVWOC},
- {"CMOVWOS", LTYPE3, x86.ACMOVWOS},
- {"CMOVWPC", LTYPE3, x86.ACMOVWPC},
- {"CMOVWPL", LTYPE3, x86.ACMOVWPL},
- {"CMOVWPS", LTYPE3, x86.ACMOVWPS},
- {"FMOVB", LTYPE3, x86.AFMOVB},
- {"FMOVBP", LTYPE3, x86.AFMOVBP},
- {"FMOVD", LTYPE3, x86.AFMOVD},
- {"FMOVDP", LTYPE3, x86.AFMOVDP},
- {"FMOVF", LTYPE3, x86.AFMOVF},
- {"FMOVFP", LTYPE3, x86.AFMOVFP},
- {"FMOVL", LTYPE3, x86.AFMOVL},
- {"FMOVLP", LTYPE3, x86.AFMOVLP},
- {"FMOVV", LTYPE3, x86.AFMOVV},
- {"FMOVVP", LTYPE3, x86.AFMOVVP},
- {"FMOVW", LTYPE3, x86.AFMOVW},
- {"FMOVWP", LTYPE3, x86.AFMOVWP},
- {"FMOVX", LTYPE3, x86.AFMOVX},
- {"FMOVXP", LTYPE3, x86.AFMOVXP},
- {"FCMOVCC", LTYPE3, x86.AFCMOVCC},
- {"FCMOVCS", LTYPE3, x86.AFCMOVCS},
- {"FCMOVEQ", LTYPE3, x86.AFCMOVEQ},
- {"FCMOVHI", LTYPE3, x86.AFCMOVHI},
- {"FCMOVLS", LTYPE3, x86.AFCMOVLS},
- {"FCMOVNE", LTYPE3, x86.AFCMOVNE},
- {"FCMOVNU", LTYPE3, x86.AFCMOVNU},
- {"FCMOVUN", LTYPE3, x86.AFCMOVUN},
- {"FCOMB", LTYPE3, x86.AFCOMB},
- {"FCOMBP", LTYPE3, x86.AFCOMBP},
- {"FCOMD", LTYPE3, x86.AFCOMD},
- {"FCOMDP", LTYPE3, x86.AFCOMDP},
- {"FCOMDPP", LTYPE3, x86.AFCOMDPP},
- {"FCOMF", LTYPE3, x86.AFCOMF},
- {"FCOMFP", LTYPE3, x86.AFCOMFP},
- {"FCOMI", LTYPE3, x86.AFCOMI},
- {"FCOMIP", LTYPE3, x86.AFCOMIP},
- {"FCOML", LTYPE3, x86.AFCOML},
- {"FCOMLP", LTYPE3, x86.AFCOMLP},
- {"FCOMW", LTYPE3, x86.AFCOMW},
- {"FCOMWP", LTYPE3, x86.AFCOMWP},
- {"FUCOM", LTYPE3, x86.AFUCOM},
- {"FUCOMI", LTYPE3, x86.AFUCOMI},
- {"FUCOMIP", LTYPE3, x86.AFUCOMIP},
- {"FUCOMP", LTYPE3, x86.AFUCOMP},
- {"FUCOMPP", LTYPE3, x86.AFUCOMPP},
- {"FADDW", LTYPE3, x86.AFADDW},
- {"FADDL", LTYPE3, x86.AFADDL},
- {"FADDF", LTYPE3, x86.AFADDF},
- {"FADDD", LTYPE3, x86.AFADDD},
- {"FADDDP", LTYPE3, x86.AFADDDP},
- {"FSUBDP", LTYPE3, x86.AFSUBDP},
- {"FSUBW", LTYPE3, x86.AFSUBW},
- {"FSUBL", LTYPE3, x86.AFSUBL},
- {"FSUBF", LTYPE3, x86.AFSUBF},
- {"FSUBD", LTYPE3, x86.AFSUBD},
- {"FSUBRDP", LTYPE3, x86.AFSUBRDP},
- {"FSUBRW", LTYPE3, x86.AFSUBRW},
- {"FSUBRL", LTYPE3, x86.AFSUBRL},
- {"FSUBRF", LTYPE3, x86.AFSUBRF},
- {"FSUBRD", LTYPE3, x86.AFSUBRD},
- {"FMULDP", LTYPE3, x86.AFMULDP},
- {"FMULW", LTYPE3, x86.AFMULW},
- {"FMULL", LTYPE3, x86.AFMULL},
- {"FMULF", LTYPE3, x86.AFMULF},
- {"FMULD", LTYPE3, x86.AFMULD},
- {"FDIVDP", LTYPE3, x86.AFDIVDP},
- {"FDIVW", LTYPE3, x86.AFDIVW},
- {"FDIVL", LTYPE3, x86.AFDIVL},
- {"FDIVF", LTYPE3, x86.AFDIVF},
- {"FDIVD", LTYPE3, x86.AFDIVD},
- {"FDIVRDP", LTYPE3, x86.AFDIVRDP},
- {"FDIVRW", LTYPE3, x86.AFDIVRW},
- {"FDIVRL", LTYPE3, x86.AFDIVRL},
- {"FDIVRF", LTYPE3, x86.AFDIVRF},
- {"FDIVRD", LTYPE3, x86.AFDIVRD},
- {"FXCHD", LTYPE3, x86.AFXCHD},
- {"FFREE", LTYPE1, x86.AFFREE},
- {"FLDCW", LTYPE2, x86.AFLDCW},
- {"FLDENV", LTYPE1, x86.AFLDENV},
- {"FRSTOR", LTYPE2, x86.AFRSTOR},
- {"FSAVE", LTYPE1, x86.AFSAVE},
- {"FSTCW", LTYPE1, x86.AFSTCW},
- {"FSTENV", LTYPE1, x86.AFSTENV},
- {"FSTSW", LTYPE1, x86.AFSTSW},
- {"F2XM1", LTYPE0, x86.AF2XM1},
- {"FABS", LTYPE0, x86.AFABS},
- {"FCHS", LTYPE0, x86.AFCHS},
- {"FCLEX", LTYPE0, x86.AFCLEX},
- {"FCOS", LTYPE0, x86.AFCOS},
- {"FDECSTP", LTYPE0, x86.AFDECSTP},
- {"FINCSTP", LTYPE0, x86.AFINCSTP},
- {"FINIT", LTYPE0, x86.AFINIT},
- {"FLD1", LTYPE0, x86.AFLD1},
- {"FLDL2E", LTYPE0, x86.AFLDL2E},
- {"FLDL2T", LTYPE0, x86.AFLDL2T},
- {"FLDLG2", LTYPE0, x86.AFLDLG2},
- {"FLDLN2", LTYPE0, x86.AFLDLN2},
- {"FLDPI", LTYPE0, x86.AFLDPI},
- {"FLDZ", LTYPE0, x86.AFLDZ},
- {"FNOP", LTYPE0, x86.AFNOP},
- {"FPATAN", LTYPE0, x86.AFPATAN},
- {"FPREM", LTYPE0, x86.AFPREM},
- {"FPREM1", LTYPE0, x86.AFPREM1},
- {"FPTAN", LTYPE0, x86.AFPTAN},
- {"FRNDINT", LTYPE0, x86.AFRNDINT},
- {"FSCALE", LTYPE0, x86.AFSCALE},
- {"FSIN", LTYPE0, x86.AFSIN},
- {"FSINCOS", LTYPE0, x86.AFSINCOS},
- {"FSQRT", LTYPE0, x86.AFSQRT},
- {"FTST", LTYPE0, x86.AFTST},
- {"FXAM", LTYPE0, x86.AFXAM},
- {"FXTRACT", LTYPE0, x86.AFXTRACT},
- {"FYL2X", LTYPE0, x86.AFYL2X},
- {"FYL2XP1", LTYPE0, x86.AFYL2XP1},
- {"LFENCE", LTYPE0, x86.ALFENCE},
- {"MFENCE", LTYPE0, x86.AMFENCE},
- {"SFENCE", LTYPE0, x86.ASFENCE},
- {"EMMS", LTYPE0, x86.AEMMS},
- {"PREFETCHT0", LTYPE2, x86.APREFETCHT0},
- {"PREFETCHT1", LTYPE2, x86.APREFETCHT1},
- {"PREFETCHT2", LTYPE2, x86.APREFETCHT2},
- {"PREFETCHNTA", LTYPE2, x86.APREFETCHNTA},
- {"UNDEF", LTYPE0, obj.AUNDEF},
- {"ADDPD", LTYPE3, x86.AADDPD},
- {"ADDPS", LTYPE3, x86.AADDPS},
- {"ADDSD", LTYPE3, x86.AADDSD},
- {"ADDSS", LTYPE3, x86.AADDSS},
- {"AESENC", LTYPE3, x86.AAESENC},
- {"ANDNPD", LTYPE3, x86.AANDNPD},
- {"ANDNPS", LTYPE3, x86.AANDNPS},
- {"ANDPD", LTYPE3, x86.AANDPD},
- {"ANDPS", LTYPE3, x86.AANDPS},
- {"CMPPD", LTYPEXC, x86.ACMPPD},
- {"CMPPS", LTYPEXC, x86.ACMPPS},
- {"CMPSD", LTYPEXC, x86.ACMPSD},
- {"CMPSS", LTYPEXC, x86.ACMPSS},
- {"COMISD", LTYPE3, x86.ACOMISD},
- {"COMISS", LTYPE3, x86.ACOMISS},
- {"CVTPL2PD", LTYPE3, x86.ACVTPL2PD},
- {"CVTPL2PS", LTYPE3, x86.ACVTPL2PS},
- {"CVTPD2PL", LTYPE3, x86.ACVTPD2PL},
- {"CVTPD2PS", LTYPE3, x86.ACVTPD2PS},
- {"CVTPS2PL", LTYPE3, x86.ACVTPS2PL},
- {"CVTPS2PD", LTYPE3, x86.ACVTPS2PD},
- {"CVTSD2SL", LTYPE3, x86.ACVTSD2SL},
- {"CVTSD2SS", LTYPE3, x86.ACVTSD2SS},
- {"CVTSL2SD", LTYPE3, x86.ACVTSL2SD},
- {"CVTSL2SS", LTYPE3, x86.ACVTSL2SS},
- {"CVTSS2SD", LTYPE3, x86.ACVTSS2SD},
- {"CVTSS2SL", LTYPE3, x86.ACVTSS2SL},
- {"CVTTPD2PL", LTYPE3, x86.ACVTTPD2PL},
- {"CVTTPS2PL", LTYPE3, x86.ACVTTPS2PL},
- {"CVTTSD2SL", LTYPE3, x86.ACVTTSD2SL},
- {"CVTTSS2SL", LTYPE3, x86.ACVTTSS2SL},
- {"DIVPD", LTYPE3, x86.ADIVPD},
- {"DIVPS", LTYPE3, x86.ADIVPS},
- {"DIVSD", LTYPE3, x86.ADIVSD},
- {"DIVSS", LTYPE3, x86.ADIVSS},
- {"MASKMOVOU", LTYPE3, x86.AMASKMOVOU},
- {"MASKMOVDQU", LTYPE3, x86.AMASKMOVOU}, /* syn */
- {"MAXPD", LTYPE3, x86.AMAXPD},
- {"MAXPS", LTYPE3, x86.AMAXPS},
- {"MAXSD", LTYPE3, x86.AMAXSD},
- {"MAXSS", LTYPE3, x86.AMAXSS},
- {"MINPD", LTYPE3, x86.AMINPD},
- {"MINPS", LTYPE3, x86.AMINPS},
- {"MINSD", LTYPE3, x86.AMINSD},
- {"MINSS", LTYPE3, x86.AMINSS},
- {"MOVAPD", LTYPE3, x86.AMOVAPD},
- {"MOVAPS", LTYPE3, x86.AMOVAPS},
- {"MOVO", LTYPE3, x86.AMOVO},
- {"MOVOA", LTYPE3, x86.AMOVO}, /* syn */
- {"MOVOU", LTYPE3, x86.AMOVOU},
- {"MOVHLPS", LTYPE3, x86.AMOVHLPS},
- {"MOVHPD", LTYPE3, x86.AMOVHPD},
- {"MOVHPS", LTYPE3, x86.AMOVHPS},
- {"MOVLHPS", LTYPE3, x86.AMOVLHPS},
- {"MOVLPD", LTYPE3, x86.AMOVLPD},
- {"MOVLPS", LTYPE3, x86.AMOVLPS},
- {"MOVMSKPD", LTYPE3, x86.AMOVMSKPD},
- {"MOVMSKPS", LTYPE3, x86.AMOVMSKPS},
- {"MOVNTO", LTYPE3, x86.AMOVNTO},
- {"MOVNTDQ", LTYPE3, x86.AMOVNTO}, /* syn */
- {"MOVNTPD", LTYPE3, x86.AMOVNTPD},
- {"MOVNTPS", LTYPE3, x86.AMOVNTPS},
- {"MOVSD", LTYPE3, x86.AMOVSD},
- {"MOVSS", LTYPE3, x86.AMOVSS},
- {"MOVUPD", LTYPE3, x86.AMOVUPD},
- {"MOVUPS", LTYPE3, x86.AMOVUPS},
- {"MULPD", LTYPE3, x86.AMULPD},
- {"MULPS", LTYPE3, x86.AMULPS},
- {"MULSD", LTYPE3, x86.AMULSD},
- {"MULSS", LTYPE3, x86.AMULSS},
- {"ORPD", LTYPE3, x86.AORPD},
- {"ORPS", LTYPE3, x86.AORPS},
- {"PADDQ", LTYPE3, x86.APADDQ},
- {"PAND", LTYPE3, x86.APAND},
- {"PCMPEQB", LTYPE3, x86.APCMPEQB},
- {"PMAXSW", LTYPE3, x86.APMAXSW},
- {"PMAXUB", LTYPE3, x86.APMAXUB},
- {"PMINSW", LTYPE3, x86.APMINSW},
- {"PMINUB", LTYPE3, x86.APMINUB},
- {"PMOVMSKB", LTYPE3, x86.APMOVMSKB},
- {"PSADBW", LTYPE3, x86.APSADBW},
- {"PSHUFB", LTYPE3, x86.APSHUFB},
- {"PSHUFHW", LTYPEX, x86.APSHUFHW},
- {"PSHUFL", LTYPEX, x86.APSHUFL},
- {"PSHUFLW", LTYPEX, x86.APSHUFLW},
- {"PSUBB", LTYPE3, x86.APSUBB},
- {"PSUBL", LTYPE3, x86.APSUBL},
- {"PSUBQ", LTYPE3, x86.APSUBQ},
- {"PSUBSB", LTYPE3, x86.APSUBSB},
- {"PSUBSW", LTYPE3, x86.APSUBSW},
- {"PSUBUSB", LTYPE3, x86.APSUBUSB},
- {"PSUBUSW", LTYPE3, x86.APSUBUSW},
- {"PSUBW", LTYPE3, x86.APSUBW},
- {"PUNPCKHQDQ", LTYPE3, x86.APUNPCKHQDQ},
- {"PUNPCKLQDQ", LTYPE3, x86.APUNPCKLQDQ},
- {"PXOR", LTYPE3, x86.APXOR},
- {"RCPPS", LTYPE3, x86.ARCPPS},
- {"RCPSS", LTYPE3, x86.ARCPSS},
- {"RSQRTPS", LTYPE3, x86.ARSQRTPS},
- {"RSQRTSS", LTYPE3, x86.ARSQRTSS},
- {"SQRTPD", LTYPE3, x86.ASQRTPD},
- {"SQRTPS", LTYPE3, x86.ASQRTPS},
- {"SQRTSD", LTYPE3, x86.ASQRTSD},
- {"SQRTSS", LTYPE3, x86.ASQRTSS},
- {"SUBPD", LTYPE3, x86.ASUBPD},
- {"SUBPS", LTYPE3, x86.ASUBPS},
- {"SUBSD", LTYPE3, x86.ASUBSD},
- {"SUBSS", LTYPE3, x86.ASUBSS},
- {"UCOMISD", LTYPE3, x86.AUCOMISD},
- {"UCOMISS", LTYPE3, x86.AUCOMISS},
- {"UNPCKHPD", LTYPE3, x86.AUNPCKHPD},
- {"UNPCKHPS", LTYPE3, x86.AUNPCKHPS},
- {"UNPCKLPD", LTYPE3, x86.AUNPCKLPD},
- {"UNPCKLPS", LTYPE3, x86.AUNPCKLPS},
- {"XORPD", LTYPE3, x86.AXORPD},
- {"XORPS", LTYPE3, x86.AXORPS},
- {"USEFIELD", LTYPEN, obj.AUSEFIELD},
- {"PCDATA", LTYPEPC, obj.APCDATA},
- {"FUNCDATA", LTYPEF, obj.AFUNCDATA},
-}
-
-func cinit() {
- nullgen.Type = x86.REG_NONE
- nullgen.Index = x86.REG_NONE
-}
-
-func checkscale(scale int16) {
- switch scale {
- case 1,
- 2,
- 4,
- 8:
- return
- }
-
- yyerror("scale must be 1248: %d", scale)
-}
-
-func syminit(s *asm.Sym) {
- s.Type = LNAME
- s.Value = 0
-}
-
-func cclean() {
- var g2 Addr2
-
- g2.from = nullgen
- g2.to = nullgen
- outcode(obj.AEND, &g2)
-}
-
-var lastpc *obj.Prog
-
-type Addr2 struct {
- from obj.Addr
- to obj.Addr
-}
-
-func outcode(a int, g2 *Addr2) {
- var p *obj.Prog
- var pl *obj.Plist
-
- if asm.Pass == 1 {
- goto out
- }
-
- p = new(obj.Prog)
- *p = obj.Prog{}
- p.Ctxt = asm.Ctxt
- p.As = int16(a)
- p.Lineno = stmtline
- p.From = g2.from
- p.To = g2.to
- p.Pc = int64(asm.PC)
-
- if lastpc == nil {
- pl = obj.Linknewplist(asm.Ctxt)
- pl.Firstpc = p
- } else {
-
- lastpc.Link = p
- }
- lastpc = p
-
-out:
- if a != obj.AGLOBL && a != obj.ADATA {
- asm.PC++
- }
-}
+++ /dev/null
-//line a.y:32
-package main
-
-import __yyfmt__ "fmt"
-
-//line a.y:32
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/x86"
-)
-
-//line a.y:41
-type yySymType struct {
- yys int
- sym *asm.Sym
- lval int64
- con2 struct {
- v1 int32
- v2 int32
- }
- dval float64
- sval string
- addr obj.Addr
- addr2 Addr2
-}
-
-const LTYPE0 = 57346
-const LTYPE1 = 57347
-const LTYPE2 = 57348
-const LTYPE3 = 57349
-const LTYPE4 = 57350
-const LTYPEC = 57351
-const LTYPED = 57352
-const LTYPEN = 57353
-const LTYPER = 57354
-const LTYPET = 57355
-const LTYPES = 57356
-const LTYPEM = 57357
-const LTYPEI = 57358
-const LTYPEG = 57359
-const LTYPEXC = 57360
-const LTYPEX = 57361
-const LTYPEPC = 57362
-const LTYPEF = 57363
-const LCONST = 57364
-const LFP = 57365
-const LPC = 57366
-const LSB = 57367
-const LBREG = 57368
-const LLREG = 57369
-const LSREG = 57370
-const LFREG = 57371
-const LXREG = 57372
-const LFCONST = 57373
-const LSCONST = 57374
-const LSP = 57375
-const LNAME = 57376
-const LLAB = 57377
-const LVAR = 57378
-
-var yyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "'|'",
- "'^'",
- "'&'",
- "'<'",
- "'>'",
- "'+'",
- "'-'",
- "'*'",
- "'/'",
- "'%'",
- "LTYPE0",
- "LTYPE1",
- "LTYPE2",
- "LTYPE3",
- "LTYPE4",
- "LTYPEC",
- "LTYPED",
- "LTYPEN",
- "LTYPER",
- "LTYPET",
- "LTYPES",
- "LTYPEM",
- "LTYPEI",
- "LTYPEG",
- "LTYPEXC",
- "LTYPEX",
- "LTYPEPC",
- "LTYPEF",
- "LCONST",
- "LFP",
- "LPC",
- "LSB",
- "LBREG",
- "LLREG",
- "LSREG",
- "LFREG",
- "LXREG",
- "LFCONST",
- "LSCONST",
- "LSP",
- "LNAME",
- "LLAB",
- "LVAR",
- "':'",
- "';'",
- "'='",
- "','",
- "'$'",
- "'('",
- "')'",
- "'~'",
-}
-var yyStatenames = [...]string{}
-
-const yyEofCode = 1
-const yyErrCode = 2
-const yyMaxDepth = 200
-
-//line yacctab:1
-var yyExca = [...]int{
- -1, 1,
- 1, -1,
- -2, 2,
-}
-
-const yyNprod = 131
-const yyPrivate = 57344
-
-var yyTokenNames []string
-var yyStates []string
-
-const yyLast = 594
-
-var yyAct = [...]int{
-
- 50, 226, 40, 3, 79, 77, 120, 49, 62, 207,
- 268, 267, 48, 169, 266, 72, 60, 262, 84, 70,
- 81, 254, 252, 71, 240, 80, 83, 115, 238, 65,
- 82, 236, 109, 99, 220, 109, 91, 93, 95, 52,
- 218, 209, 101, 103, 208, 170, 239, 233, 210, 173,
- 63, 206, 109, 56, 55, 168, 117, 118, 119, 108,
- 142, 135, 110, 116, 125, 112, 248, 104, 230, 229,
- 72, 225, 224, 223, 133, 109, 53, 84, 153, 81,
- 136, 140, 137, 152, 80, 83, 61, 150, 73, 82,
- 54, 141, 143, 149, 69, 63, 74, 39, 57, 148,
- 67, 147, 146, 126, 145, 39, 144, 134, 132, 131,
- 97, 154, 124, 36, 30, 34, 31, 33, 139, 32,
- 222, 221, 58, 175, 176, 111, 216, 242, 214, 241,
- 109, 117, 56, 55, 183, 72, 215, 165, 167, 182,
- 235, 140, 172, 166, 250, 251, 255, 183, 263, 181,
- 187, 141, 191, 193, 195, 53, 109, 109, 109, 109,
- 109, 256, 194, 109, 109, 109, 189, 190, 247, 54,
- 211, 228, 56, 130, 63, 74, 111, 57, 37, 117,
- 35, 217, 41, 196, 197, 198, 199, 200, 165, 167,
- 203, 204, 205, 227, 166, 53, 151, 88, 121, 87,
- 122, 123, 109, 109, 128, 127, 260, 58, 234, 54,
- 259, 105, 106, 237, 253, 129, 212, 57, 180, 42,
- 44, 47, 43, 45, 243, 257, 46, 244, 246, 231,
- 232, 184, 185, 186, 245, 188, 157, 158, 159, 249,
- 164, 163, 162, 160, 161, 155, 156, 157, 158, 159,
- 258, 7, 122, 123, 261, 155, 156, 157, 158, 159,
- 264, 265, 202, 9, 10, 11, 12, 13, 17, 27,
- 18, 14, 28, 19, 20, 21, 29, 23, 24, 25,
- 26, 56, 55, 78, 174, 201, 22, 16, 15, 171,
- 6, 107, 2, 4, 1, 8, 102, 5, 100, 98,
- 96, 94, 92, 90, 53, 56, 55, 138, 42, 44,
- 47, 43, 45, 86, 75, 46, 85, 66, 54, 64,
- 59, 68, 76, 63, 51, 213, 57, 0, 53, 56,
- 55, 0, 42, 44, 47, 43, 45, 0, 0, 46,
- 85, 0, 54, 0, 0, 0, 0, 63, 51, 0,
- 57, 0, 53, 56, 55, 0, 42, 44, 47, 43,
- 45, 0, 0, 46, 58, 0, 54, 0, 0, 0,
- 0, 63, 51, 0, 57, 0, 53, 56, 55, 0,
- 42, 44, 47, 43, 45, 0, 0, 46, 58, 0,
- 54, 0, 0, 0, 89, 0, 51, 0, 57, 0,
- 53, 56, 55, 0, 42, 44, 47, 43, 45, 0,
- 0, 46, 58, 0, 54, 0, 0, 0, 38, 0,
- 51, 0, 57, 0, 53, 56, 55, 0, 42, 44,
- 47, 43, 45, 0, 0, 46, 58, 0, 54, 0,
- 0, 56, 55, 0, 51, 0, 57, 0, 53, 0,
- 56, 55, 42, 44, 47, 43, 45, 56, 55, 46,
- 0, 0, 54, 0, 53, 0, 56, 55, 51, 113,
- 57, 0, 0, 53, 0, 114, 0, 0, 54, 0,
- 53, 0, 219, 0, 74, 0, 57, 54, 0, 53,
- 56, 55, 0, 74, 54, 57, 0, 56, 178, 192,
- 74, 73, 57, 54, 0, 0, 0, 56, 55, 74,
- 0, 57, 0, 53, 56, 55, 0, 0, 0, 0,
- 53, 0, 179, 0, 0, 0, 0, 54, 0, 177,
- 53, 0, 0, 74, 54, 57, 0, 53, 0, 0,
- 74, 0, 57, 0, 54, 0, 0, 0, 0, 58,
- 74, 54, 57, 0, 0, 0, 0, 51, 0, 57,
- 164, 163, 162, 160, 161, 155, 156, 157, 158, 159,
- 163, 162, 160, 161, 155, 156, 157, 158, 159, 162,
- 160, 161, 155, 156, 157, 158, 159, 160, 161, 155,
- 156, 157, 158, 159,
-}
-var yyPact = [...]int{
-
- -1000, -1000, 249, -1000, 67, -1000, 71, 69, 66, 63,
- 368, 320, 320, 392, 44, -1000, -1000, 272, 344, 320,
- 320, 320, -1000, 392, -1, 320, 320, 78, 505, 505,
- -1000, 498, -1000, -1000, 498, -1000, -1000, -1000, 392, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 13, 432, 11, -1000, -1000, 498, 498, 498, 191, -1000,
- 62, -1000, -1000, 163, -1000, 59, -1000, 58, -1000, 457,
- -1000, 57, 9, 243, 498, -1000, 296, -1000, 392, -1000,
- -1000, -1000, -1000, -1000, 8, 191, -1000, -1000, -1000, 392,
- -1000, 56, -1000, 54, -1000, 52, -1000, 51, -1000, 49,
- -1000, 43, -1000, 37, 184, 33, 28, 249, 556, -1000,
- 556, -1000, 151, 2, -8, 236, 105, -1000, -1000, -1000,
- -3, 276, 498, 498, -1000, -1000, -1000, -1000, -1000, 488,
- 481, 392, 320, -1000, 457, 113, -1000, -1000, 416, -1000,
- -1000, -1000, 100, -3, 392, 392, 392, 183, 392, 320,
- 320, 498, 448, 123, -1000, 498, 498, 498, 498, 498,
- 278, 254, 498, 498, 498, -2, -9, -12, -4, 498,
- -1000, -1000, 205, 93, 243, -1000, -1000, -13, 441, -1000,
- -1000, -1000, -1000, -19, 74, 73, -1000, 23, 22, -1000,
- -1000, 21, 161, 19, -1000, 18, 225, 225, -1000, -1000,
- -1000, 498, 498, 580, 573, 565, -5, 498, -1000, -1000,
- 103, -22, 498, -25, -1000, -1000, -1000, -6, -1000, -29,
- -1000, 92, 89, 498, 183, -1, -1000, 218, 136, 15,
- -1, 246, 246, 107, -31, 203, -1000, -32, -1000, 111,
- -1000, -1000, -1000, -1000, -1000, -1000, 129, 215, 161, -1000,
- 199, 195, -1000, 498, -1000, -36, -1000, 116, -1000, 498,
- 498, -39, -1000, -1000, -42, -43, -1000, -1000, -1000,
-}
-var yyPgo = [...]int{
-
- 0, 0, 27, 325, 6, 182, 8, 2, 39, 4,
- 86, 16, 5, 12, 7, 1, 180, 321, 178, 320,
- 319, 317, 314, 313, 303, 302, 301, 300, 299, 298,
- 296, 294, 292, 3, 291, 290, 288, 287, 286,
-}
-var yyR1 = [...]int{
-
- 0, 31, 32, 31, 34, 33, 33, 33, 33, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 16,
- 16, 20, 21, 19, 19, 18, 18, 17, 17, 17,
- 36, 37, 37, 38, 38, 22, 22, 22, 23, 23,
- 24, 24, 25, 25, 26, 26, 26, 27, 28, 29,
- 30, 10, 10, 12, 12, 12, 12, 12, 12, 12,
- 11, 11, 9, 9, 7, 7, 7, 7, 7, 7,
- 6, 6, 6, 6, 6, 6, 6, 15, 15, 15,
- 15, 5, 5, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 14, 14, 8, 8, 4, 4,
- 4, 3, 3, 3, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2,
-}
-var yyR2 = [...]int{
-
- 0, 0, 0, 3, 0, 4, 1, 2, 2, 3,
- 3, 2, 2, 2, 2, 2, 2, 1, 1, 2,
- 2, 2, 2, 2, 1, 2, 2, 2, 2, 0,
- 1, 3, 3, 2, 1, 2, 1, 2, 1, 3,
- 6, 5, 7, 4, 6, 2, 1, 2, 1, 1,
- 3, 5, 3, 5, 2, 1, 3, 5, 5, 3,
- 3, 1, 1, 1, 1, 2, 2, 1, 1, 1,
- 1, 1, 4, 2, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 4, 5, 3, 1, 2, 3,
- 4, 1, 1, 1, 4, 4, 6, 9, 9, 3,
- 3, 4, 5, 8, 1, 6, 5, 7, 0, 2,
- 2, 1, 1, 1, 1, 1, 2, 2, 2, 3,
- 1, 3, 3, 3, 3, 3, 4, 4, 3, 3,
- 3,
-}
-var yyChk = [...]int{
-
- -1000, -31, -32, -33, 44, 48, -35, 2, 46, 14,
- 15, 16, 17, 18, 22, -36, -37, 19, 21, 24,
- 25, 26, -38, 28, 29, 30, 31, 20, 23, 27,
- 47, 49, 48, 48, 49, -16, 50, -18, 50, -10,
- -7, -5, 36, 39, 37, 40, 43, 38, -13, -14,
- -1, 52, -8, 32, 46, 10, 9, 54, 44, -19,
- -11, -10, -6, 51, -20, -11, -21, -10, -17, 50,
- -9, -6, -1, 44, 52, -22, 50, -12, 11, -9,
- -14, -7, -13, -6, -1, 44, -23, -16, -18, 50,
- -24, -11, -25, -11, -26, -11, -27, -10, -28, -6,
- -29, -11, -30, -11, -8, -5, -5, -34, -2, -1,
- -2, -10, 52, 37, 43, -2, 52, -1, -1, -1,
- -4, 7, 9, 10, 50, -1, -8, 42, 41, 52,
- 10, 50, 50, -9, 50, 52, -4, -12, 11, -8,
- -7, -13, 52, -4, 50, 50, 50, 50, 50, 50,
- 50, 12, 50, 50, -33, 9, 10, 11, 12, 13,
- 7, 8, 6, 5, 4, 37, 43, 38, 53, 11,
- 53, 53, 37, 52, 8, -1, -1, 41, 10, 41,
- -10, -11, -9, 34, -10, -10, -10, -7, -10, -11,
- -11, -1, 51, -1, -6, -1, -2, -2, -2, -2,
- -2, 7, 8, -2, -2, -2, 53, 11, 53, 53,
- 52, -1, 11, -3, 35, 43, 33, -4, 53, 41,
- 53, 47, 47, 50, 50, 50, -15, 32, 10, 50,
- 50, -2, -2, 52, -1, 37, 53, -1, 53, 52,
- 53, 37, 38, -1, -7, -6, 10, 32, 51, -6,
- 37, 38, 53, 11, 53, 35, 32, 10, -15, 11,
- 11, -1, 53, 32, -1, -1, 53, 53, 53,
-}
-var yyDef = [...]int{
-
- 1, -2, 0, 3, 0, 6, 0, 0, 0, 29,
- 0, 0, 0, 0, 0, 17, 18, 0, 29, 0,
- 0, 0, 24, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 7, 8, 0, 11, 30, 12, 0, 36,
- 61, 62, 74, 75, 76, 77, 78, 79, 91, 92,
- 93, 0, 104, 114, 115, 0, 0, 0, 108, 13,
- 34, 70, 71, 0, 14, 0, 15, 0, 16, 0,
- 38, 0, 0, 108, 0, 19, 0, 46, 0, 63,
- 64, 67, 68, 69, 93, 108, 20, 48, 49, 30,
- 21, 0, 22, 0, 23, 55, 25, 0, 26, 0,
- 27, 0, 28, 0, 0, 0, 0, 0, 9, 120,
- 10, 35, 0, 0, 0, 0, 0, 116, 117, 118,
- 0, 0, 0, 0, 33, 80, 81, 82, 83, 0,
- 0, 0, 0, 37, 0, 0, 73, 45, 0, 47,
- 65, 66, 0, 73, 0, 0, 54, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 0,
- 100, 119, 0, 0, 108, 109, 110, 0, 0, 86,
- 31, 32, 39, 0, 50, 52, 56, 0, 0, 59,
- 60, 0, 0, 0, 43, 0, 121, 122, 123, 124,
- 125, 0, 0, 128, 129, 130, 94, 0, 95, 101,
- 0, 0, 0, 0, 111, 112, 113, 0, 84, 0,
- 72, 0, 0, 0, 0, 0, 41, 87, 0, 0,
- 0, 126, 127, 0, 0, 0, 102, 0, 106, 0,
- 85, 51, 53, 57, 58, 40, 0, 88, 0, 44,
- 0, 0, 96, 0, 105, 0, 89, 0, 42, 0,
- 0, 0, 107, 90, 0, 0, 103, 97, 98,
-}
-var yyTok1 = [...]int{
-
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 51, 13, 6, 3,
- 52, 53, 11, 9, 50, 10, 3, 12, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 47, 48,
- 7, 49, 8, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 5, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 54,
-}
-var yyTok2 = [...]int{
-
- 2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46,
-}
-var yyTok3 = [...]int{
- 0,
-}
-
-var yyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- yyDebug = 0
- yyErrorVerbose = false
-)
-
-type yyLexer interface {
- Lex(lval *yySymType) int
- Error(s string)
-}
-
-type yyParser interface {
- Parse(yyLexer) int
- Lookahead() int
-}
-
-type yyParserImpl struct {
- lookahead func() int
-}
-
-func (p *yyParserImpl) Lookahead() int {
- return p.lookahead()
-}
-
-func yyNewParser() yyParser {
- p := &yyParserImpl{
- lookahead: func() int { return -1 },
- }
- return p
-}
-
-const yyFlag = -1000
-
-func yyTokname(c int) string {
- if c >= 1 && c-1 < len(yyToknames) {
- if yyToknames[c-1] != "" {
- return yyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func yyStatname(s int) string {
- if s >= 0 && s < len(yyStatenames) {
- if yyStatenames[s] != "" {
- return yyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func yyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !yyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range yyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + yyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := yyPact[state]
- for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
- if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if yyDef[state] == -2 {
- i := 0
- for yyExca[i] != -1 || yyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; yyExca[i] >= 0; i += 2 {
- tok := yyExca[i]
- if tok < TOKSTART || yyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if yyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += yyTokname(tok)
- }
- return res
-}
-
-func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = yyTok1[0]
- goto out
- }
- if char < len(yyTok1) {
- token = yyTok1[char]
- goto out
- }
- if char >= yyPrivate {
- if char < yyPrivate+len(yyTok2) {
- token = yyTok2[char-yyPrivate]
- goto out
- }
- }
- for i := 0; i < len(yyTok3); i += 2 {
- token = yyTok3[i+0]
- if token == char {
- token = yyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = yyTok2[1] /* unknown char */
- }
- if yyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
- }
- return char, token
-}
-
-func yyParse(yylex yyLexer) int {
- return yyNewParser().Parse(yylex)
-}
-
-func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
- var yyn int
- var yylval yySymType
- var yyVAL yySymType
- var yyDollar []yySymType
- yyS := make([]yySymType, yyMaxDepth)
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- yystate := 0
- yychar := -1
- yytoken := -1 // yychar translated into internal numbering
- yyrcvr.lookahead = func() int { return yychar }
- defer func() {
- // Make sure we report no lookahead when not parsing.
- yystate = -1
- yychar = -1
- yytoken = -1
- }()
- yyp := -1
- goto yystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-yystack:
- /* put a state and value onto the stack */
- if yyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
- }
-
- yyp++
- if yyp >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyS[yyp] = yyVAL
- yyS[yyp].yys = yystate
-
-yynewstate:
- yyn = yyPact[yystate]
- if yyn <= yyFlag {
- goto yydefault /* simple state */
- }
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
- yyn += yytoken
- if yyn < 0 || yyn >= yyLast {
- goto yydefault
- }
- yyn = yyAct[yyn]
- if yyChk[yyn] == yytoken { /* valid shift */
- yychar = -1
- yytoken = -1
- yyVAL = yylval
- yystate = yyn
- if Errflag > 0 {
- Errflag--
- }
- goto yystack
- }
-
-yydefault:
- /* default state action */
- yyn = yyDef[yystate]
- if yyn == -2 {
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- yyn = yyExca[xi+0]
- if yyn < 0 || yyn == yytoken {
- break
- }
- }
- yyn = yyExca[xi+1]
- if yyn < 0 {
- goto ret0
- }
- }
- if yyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- yylex.Error(yyErrorMessage(yystate, yytoken))
- Nerrs++
- if yyDebug >= 1 {
- __yyfmt__.Printf("%s", yyStatname(yystate))
- __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for yyp >= 0 {
- yyn = yyPact[yyS[yyp].yys] + yyErrCode
- if yyn >= 0 && yyn < yyLast {
- yystate = yyAct[yyn] /* simulate a shift of "error" */
- if yyChk[yystate] == yyErrCode {
- goto yystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
- }
- yyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
- }
- if yytoken == yyEofCode {
- goto ret1
- }
- yychar = -1
- yytoken = -1
- goto yynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production yyn */
- if yyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
- }
-
- yynt := yyn
- yypt := yyp
- _ = yypt // guard against "declared and not used"
-
- yyp -= yyR2[yyn]
- // yyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if yyp+1 >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyVAL = yyS[yyp+1]
-
- /* consult goto table to find next state */
- yyn = yyR1[yyn]
- yyg := yyPgo[yyn]
- yyj := yyg + yyS[yyp].yys + 1
-
- if yyj >= yyLast {
- yystate = yyAct[yyg]
- } else {
- yystate = yyAct[yyj]
- if yyChk[yystate] != -yyn {
- yystate = yyAct[yyg]
- }
- }
- // dummy call; replaced with literal code
- switch yynt {
-
- case 2:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:74
- {
- stmtline = asm.Lineno
- }
- case 4:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:81
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- if yyDollar[1].sym.Type == LLAB && yyDollar[1].sym.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", yyDollar[1].sym.Labelname)
- }
- yyDollar[1].sym.Type = LLAB
- yyDollar[1].sym.Value = int64(asm.PC)
- }
- case 9:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:96
- {
- yyDollar[1].sym.Type = LVAR
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 10:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:101
- {
- if yyDollar[1].sym.Value != int64(yyDollar[3].lval) {
- yyerror("redeclaration of %s", yyDollar[1].sym.Name)
- }
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 11:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:107
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 12:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:108
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 13:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:109
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 14:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:110
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 15:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:111
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 16:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:112
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 19:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:115
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 20:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:116
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 21:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:117
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 22:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:118
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 23:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:119
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 25:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:121
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 26:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:122
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 27:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:123
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 28:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:124
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr2)
- }
- case 29:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:127
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = nullgen
- }
- case 30:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:132
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = nullgen
- }
- case 31:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:139
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 32:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:146
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 33:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:153
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 34:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:158
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 35:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:165
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 36:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:170
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 37:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:177
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 38:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:182
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 39:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:187
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 40:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:194
- {
- outcode(obj.ADATA, &Addr2{yyDollar[2].addr, yyDollar[6].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 41:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:205
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.ATEXT, &Addr2{yyDollar[2].addr, yyDollar[5].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 42:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:213
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.ATEXT, &Addr2{yyDollar[2].addr, yyDollar[7].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 43:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:225
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.AGLOBL, &Addr2{yyDollar[2].addr, yyDollar[4].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 44:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:233
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(obj.AGLOBL, &Addr2{yyDollar[2].addr, yyDollar[6].addr})
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 45:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:246
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- }
- case 46:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:251
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[1].addr
- }
- case 47:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:256
- {
- yyVAL.addr2.from = nullgen
- yyVAL.addr2.to = yyDollar[2].addr
- yyVAL.addr2.to.Type = obj.TYPE_INDIR
- }
- case 50:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:268
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 51:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:273
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- if yyVAL.addr2.from.Index != obj.TYPE_NONE {
- yyerror("dp shift with lhs index")
- }
- yyVAL.addr2.from.Index = int16(yyDollar[5].lval)
- }
- case 52:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:284
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 53:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:289
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- if yyVAL.addr2.to.Index != obj.TYPE_NONE {
- yyerror("dp move with lhs index")
- }
- yyVAL.addr2.to.Index = int16(yyDollar[5].lval)
- }
- case 54:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:300
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 55:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:305
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = nullgen
- }
- case 56:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:310
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 57:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:317
- {
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- yyVAL.addr2.to.Offset = yyDollar[5].lval
- }
- case 58:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:325
- {
- yyVAL.addr2.from = yyDollar[3].addr
- yyVAL.addr2.to = yyDollar[5].addr
- if yyDollar[1].addr.Type != obj.TYPE_CONST {
- yyerror("illegal constant")
- }
- yyVAL.addr2.to.Offset = yyDollar[1].addr.Offset
- }
- case 59:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:336
- {
- if yyDollar[1].addr.Type != obj.TYPE_CONST || yyDollar[3].addr.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants")
- }
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 60:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:346
- {
- if yyDollar[1].addr.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if yyDollar[3].addr.Type != obj.TYPE_MEM || (yyDollar[3].addr.Name != obj.NAME_EXTERN && yyDollar[3].addr.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- yyVAL.addr2.from = yyDollar[1].addr
- yyVAL.addr2.to = yyDollar[3].addr
- }
- case 65:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:365
- {
- yyVAL.addr = yyDollar[2].addr
- }
- case 66:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:369
- {
- yyVAL.addr = yyDollar[2].addr
- }
- case 72:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:382
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].lval + int64(asm.PC)
- }
- case 73:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:388
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- yyVAL.addr = nullgen
- if asm.Pass == 2 && yyDollar[1].sym.Type != LLAB {
- yyerror("undefined label: %s", yyDollar[1].sym.Labelname)
- }
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].sym.Value + yyDollar[2].lval
- }
- case 74:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:400
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 75:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:406
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 76:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:412
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 77:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:418
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 78:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:424
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = REG_SP
- }
- case 79:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:430
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 80:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:438
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 81:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:444
- {
- yyVAL.addr = yyDollar[2].addr
- yyVAL.addr.Type = obj.TYPE_ADDR
- /*
- if($2.Type == D_AUTO || $2.Type == D_PARAM)
- yyerror("constant cannot be automatic: %s",
- $2.Sym.name);
- */
- }
- case 82:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:453
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SCONST
- yyVAL.addr.Val = yyDollar[2].sval
- }
- case 83:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:459
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[2].dval
- }
- case 84:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:465
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[3].dval
- }
- case 85:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:471
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[4].dval
- }
- case 86:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:477
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[3].dval
- }
- case 87:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:485
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 88:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:492
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -yyDollar[2].lval
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 89:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:499
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Val = int32(yyDollar[3].lval)
- }
- case 90:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:506
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -yyDollar[2].lval
- yyVAL.addr.Val = int32(yyDollar[4].lval)
- }
- case 93:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:520
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 94:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:526
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 95:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:533
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = REG_SP
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 96:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:540
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[3].lval)
- yyVAL.addr.Scale = int16(yyDollar[5].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 97:
- yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:549
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[6].lval)
- yyVAL.addr.Scale = int16(yyDollar[8].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 98:
- yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:559
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- yyVAL.addr.Index = int16(yyDollar[6].lval)
- yyVAL.addr.Scale = int16(yyDollar[8].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 99:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:569
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- }
- case 100:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:575
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = REG_SP
- }
- case 101:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:581
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 102:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:588
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Index = int16(yyDollar[2].lval)
- yyVAL.addr.Scale = int16(yyDollar[4].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 103:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:596
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Index = int16(yyDollar[5].lval)
- yyVAL.addr.Scale = int16(yyDollar[7].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 104:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:607
- {
- yyVAL.addr = yyDollar[1].addr
- }
- case 105:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:611
- {
- yyVAL.addr = yyDollar[1].addr
- yyVAL.addr.Index = int16(yyDollar[3].lval)
- yyVAL.addr.Scale = int16(yyDollar[5].lval)
- checkscale(yyVAL.addr.Scale)
- }
- case 106:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:620
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[4].lval)
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 0)
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 107:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:628
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = obj.NAME_STATIC
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 1)
- yyVAL.addr.Offset = yyDollar[4].lval
- }
- case 108:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:637
- {
- yyVAL.lval = 0
- }
- case 109:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:641
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 110:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:645
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 112:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:652
- {
- yyVAL.lval = obj.NAME_AUTO
- }
- case 115:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:660
- {
- yyVAL.lval = yyDollar[1].sym.Value
- }
- case 116:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:664
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 117:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:668
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 118:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:672
- {
- yyVAL.lval = ^yyDollar[2].lval
- }
- case 119:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:676
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 121:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:683
- {
- yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
- }
- case 122:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:687
- {
- yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
- }
- case 123:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:691
- {
- yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
- }
- case 124:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:695
- {
- yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
- }
- case 125:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:699
- {
- yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
- }
- case 126:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:703
- {
- yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
- }
- case 127:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:707
- {
- yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
- }
- case 128:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:711
- {
- yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
- }
- case 129:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:715
- {
- yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
- }
- case 130:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:719
- {
- yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
- }
- }
- goto yystack /* stack new state and value */
-}
+++ /dev/null
-// cmd/9a/a.y from Vita Nuova.
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-%{
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/ppc64"
-)
-%}
-
-%union
-{
- sym *asm.Sym
- lval int64
- dval float64
- sval string
- addr obj.Addr
-}
-
-%left '|'
-%left '^'
-%left '&'
-%left '<' '>'
-%left '+' '-'
-%left '*' '/' '%'
-%token <lval> LMOVW LMOVB LABS LLOGW LSHW LADDW LCMP LCROP
-%token <lval> LBRA LFMOV LFCONV LFCMP LFADD LFMA LTRAP LXORW
-%token <lval> LNOP LEND LRETT LWORD LTEXT LDATA LGLOBL LRETRN
-%token <lval> LCONST LSP LSB LFP LPC LCREG LFLUSH
-%token <lval> LREG LFREG LR LCR LF LFPSCR
-%token <lval> LLR LCTR LSPR LSPREG LSEG LMSR
-%token <lval> LPCDAT LFUNCDAT LSCHED LXLD LXST LXOP LXMV
-%token <lval> LRLWM LMOVMW LMOVEM LMOVFL LMTFSB LMA
-%token <dval> LFCONST
-%token <sval> LSCONST
-%token <sym> LNAME LLAB LVAR
-%type <lval> con expr pointer offset sreg
-%type <addr> addr rreg regaddr name creg freg xlreg lr ctr textsize
-%type <addr> imm ximm fimm rel psr lcr cbit fpscr msr mask
-%%
-prog:
-| prog
- {
- stmtline = asm.Lineno
- }
- line
-
-line:
- LNAME ':'
- {
- $1 = asm.LabelLookup($1);
- if $1.Type == LLAB && $1.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", $1.Labelname)
- }
- $1.Type = LLAB;
- $1.Value = int64(asm.PC);
- }
- line
-| LNAME '=' expr ';'
- {
- $1.Type = LVAR;
- $1.Value = $3;
- }
-| LVAR '=' expr ';'
- {
- if $1.Value != $3 {
- yyerror("redeclaration of %s", $1.Name)
- }
- $1.Value = $3;
- }
-| LSCHED ';'
- {
- nosched = int($1);
- }
-| ';'
-| inst ';'
-| error ';'
-
-inst:
-/*
- * load ints and bytes
- */
- LMOVW rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW addr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW regaddr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVB rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVB addr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVB regaddr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * load floats
- */
-| LFMOV addr ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFMOV regaddr ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFMOV fimm ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFMOV freg ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFMOV freg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFMOV freg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * store ints and bytes
- */
-| LMOVW rreg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW rreg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVB rreg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVB rreg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * store floats
- */
-| LMOVW freg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW freg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * floating point status
- */
-| LMOVW fpscr ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW freg ',' fpscr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW freg ',' imm ',' fpscr
- {
- outgcode(int($1), &$2, 0, &$4, &$6);
- }
-| LMOVW fpscr ',' creg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMTFSB imm ',' con
- {
- outcode(int($1), &$2, int($4), &nullgen);
- }
-/*
- * field moves (mtcrf)
- */
-| LMOVW rreg ',' imm ',' lcr
- {
- outgcode(int($1), &$2, 0, &$4, &$6);
- }
-| LMOVW rreg ',' creg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW rreg ',' lcr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * integer operations
- * logical instructions
- * shift instructions
- * unary instructions
- */
-| LADDW rreg ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-| LADDW imm ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-| LADDW rreg ',' imm ',' rreg
- {
- outgcode(int($1), &$2, 0, &$4, &$6);
- }
-| LADDW rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LADDW imm ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LLOGW rreg ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-| LLOGW rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LSHW rreg ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-| LSHW rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LSHW imm ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-| LSHW imm ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LABS rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LABS rreg
- {
- outcode(int($1), &$2, 0, &$2);
- }
-/*
- * multiply-accumulate
- */
-| LMA rreg ',' sreg ',' rreg
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-/*
- * move immediate: macro for cau+or, addi, addis, and other combinations
- */
-| LMOVW imm ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW ximm ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * condition register operations
- */
-| LCROP cbit ',' cbit
- {
- outcode(int($1), &$2, int($4.Reg), &$4);
- }
-| LCROP cbit ',' con ',' cbit
- {
- outcode(int($1), &$2, int($4), &$6);
- }
-/*
- * condition register moves
- * move from machine state register
- */
-| LMOVW creg ',' creg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW psr ',' creg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW lcr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW psr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW xlreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW rreg ',' xlreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW creg ',' psr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVW rreg ',' psr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * branch, branch conditional
- * branch conditional register
- * branch conditional to count register
- */
-| LBRA rel
- {
- outcode(int($1), &nullgen, 0, &$2);
- }
-| LBRA addr
- {
- outcode(int($1), &nullgen, 0, &$2);
- }
-| LBRA '(' xlreg ')'
- {
- outcode(int($1), &nullgen, 0, &$3);
- }
-| LBRA ',' rel
- {
- outcode(int($1), &nullgen, 0, &$3);
- }
-| LBRA ',' addr
- {
- outcode(int($1), &nullgen, 0, &$3);
- }
-| LBRA ',' '(' xlreg ')'
- {
- outcode(int($1), &nullgen, 0, &$4);
- }
-| LBRA creg ',' rel
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LBRA creg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LBRA creg ',' '(' xlreg ')'
- {
- outcode(int($1), &$2, 0, &$5);
- }
-| LBRA con ',' rel
- {
- outcode(int($1), &nullgen, int($2), &$4);
- }
-| LBRA con ',' addr
- {
- outcode(int($1), &nullgen, int($2), &$4);
- }
-| LBRA con ',' '(' xlreg ')'
- {
- outcode(int($1), &nullgen, int($2), &$5);
- }
-| LBRA con ',' con ',' rel
- {
- var g obj.Addr
- g = nullgen;
- g.Type = obj.TYPE_CONST;
- g.Offset = $2;
- outcode(int($1), &g, int(REG_R0+$4), &$6);
- }
-| LBRA con ',' con ',' addr
- {
- var g obj.Addr
- g = nullgen;
- g.Type = obj.TYPE_CONST;
- g.Offset = $2;
- outcode(int($1), &g, int(REG_R0+$4), &$6);
- }
-| LBRA con ',' con ',' '(' xlreg ')'
- {
- var g obj.Addr
- g = nullgen;
- g.Type = obj.TYPE_CONST;
- g.Offset = $2;
- outcode(int($1), &g, int(REG_R0+$4), &$7);
- }
-/*
- * conditional trap
- */
-| LTRAP rreg ',' sreg
- {
- outcode(int($1), &$2, int($4), &nullgen);
- }
-| LTRAP imm ',' sreg
- {
- outcode(int($1), &$2, int($4), &nullgen);
- }
-| LTRAP rreg comma
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-| LTRAP comma
- {
- outcode(int($1), &nullgen, 0, &nullgen);
- }
-/*
- * floating point operate
- */
-| LFCONV freg ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFADD freg ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFADD freg ',' freg ',' freg
- {
- outcode(int($1), &$2, int($4.Reg), &$6);
- }
-| LFMA freg ',' freg ',' freg ',' freg
- {
- outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
- }
-| LFCMP freg ',' freg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LFCMP freg ',' freg ',' creg
- {
- outcode(int($1), &$2, int($6.Reg), &$4);
- }
-/*
- * CMP
- */
-| LCMP rreg ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LCMP rreg ',' imm
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LCMP rreg ',' rreg ',' creg
- {
- outcode(int($1), &$2, int($6.Reg), &$4);
- }
-| LCMP rreg ',' imm ',' creg
- {
- outcode(int($1), &$2, int($6.Reg), &$4);
- }
-/*
- * rotate and mask
- */
-| LRLWM imm ',' rreg ',' imm ',' rreg
- {
- outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
- }
-| LRLWM imm ',' rreg ',' mask ',' rreg
- {
- outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
- }
-| LRLWM rreg ',' rreg ',' imm ',' rreg
- {
- outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
- }
-| LRLWM rreg ',' rreg ',' mask ',' rreg
- {
- outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
- }
-/*
- * load/store multiple
- */
-| LMOVMW addr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LMOVMW rreg ',' addr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * various indexed load/store
- * indexed unary (eg, cache clear)
- */
-| LXLD regaddr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LXLD regaddr ',' imm ',' rreg
- {
- outgcode(int($1), &$2, 0, &$4, &$6);
- }
-| LXST rreg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LXST rreg ',' imm ',' regaddr
- {
- outgcode(int($1), &$2, 0, &$4, &$6);
- }
-| LXMV regaddr ',' rreg
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LXMV rreg ',' regaddr
- {
- outcode(int($1), &$2, 0, &$4);
- }
-| LXOP regaddr
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-/*
- * NOP
- */
-| LNOP comma
- {
- outcode(int($1), &nullgen, 0, &nullgen);
- }
-| LNOP rreg comma
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-| LNOP freg comma
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-| LNOP ',' rreg
- {
- outcode(int($1), &nullgen, 0, &$3);
- }
-| LNOP ',' freg
- {
- outcode(int($1), &nullgen, 0, &$3);
- }
-| LNOP imm /* SYSCALL $num: load $num to R0 before syscall and restore R0 to 0 afterwards. */
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-/*
- * word
- */
-| LWORD imm comma
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-| LWORD ximm comma
- {
- outcode(int($1), &$2, 0, &nullgen);
- }
-/*
- * PCDATA
- */
-| LPCDAT imm ',' imm
- {
- if $2.Type != obj.TYPE_CONST || $4.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants")
- }
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * FUNCDATA
- */
-| LFUNCDAT imm ',' addr
- {
- if $2.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if $4.Type != obj.TYPE_MEM || ($4.Name != obj.NAME_EXTERN && $4.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- outcode(int($1), &$2, 0, &$4);
- }
-/*
- * END
- */
-| LEND comma
- {
- outcode(int($1), &nullgen, 0, &nullgen);
- }
-/*
- * TEXT
- */
-| LTEXT name ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(int($1), &$2, 0, &$5);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LTEXT name ',' con ',' '$' textsize
- {
- asm.Settext($2.Sym);
- outcode(int($1), &$2, int($4), &$7);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-/*
- * GLOBL
- */
-| LGLOBL name ',' imm
- {
- asm.Settext($2.Sym)
- outcode(int($1), &$2, 0, &$4)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
-| LGLOBL name ',' con ',' imm
- {
- asm.Settext($2.Sym)
- outcode(int($1), &$2, 0, &$6)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-
-/*
- * DATA
- */
-| LDATA name '/' con ',' imm
- {
- outcode(int($1), &$2, 0, &$6);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-| LDATA name '/' con ',' ximm
- {
- outcode(int($1), &$2, 0, &$6);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-| LDATA name '/' con ',' fimm
- {
- outcode(int($1), &$2, 0, &$6);
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = $4
- }
- }
-/*
- * RETURN
- */
-| LRETRN comma
- {
- outcode(int($1), &nullgen, 0, &nullgen);
- }
-
-rel:
- con '(' LPC ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1 + int64(asm.PC);
- }
-| LNAME offset
- {
- $1 = asm.LabelLookup($1);
- $$ = nullgen;
- if asm.Pass == 2 && $1.Type != LLAB {
- yyerror("undefined label: %s", $1.Labelname)
- }
- $$.Type = obj.TYPE_BRANCH;
- $$.Offset = $1.Value + $2;
- }
-
-rreg:
- sreg
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-xlreg:
- lr
-| ctr
-
-lr:
- LLR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-lcr:
- LCR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1); /* whole register */
- }
-
-ctr:
- LCTR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-msr:
- LMSR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1)
- }
-
-psr:
- LSPREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-| LSPR '(' con ')'
- {
- if $3 < 0 || $3 >= 1024 {
- yyerror("SPR/DCR out of range")
- }
- $$ = nullgen;
- $$.Type = obj.TYPE_REG
- $$.Reg = int16($1 + $3);
- }
-| msr
-
-fpscr:
- LFPSCR
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-freg:
- LFREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-| LF '(' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16(REG_F0 + $3);
- }
-
-creg:
- LCREG
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-| LCR '(' con ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16(REG_CR0 + $3);
- }
-
-
-cbit: con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_REG;
- $$.Reg = int16($1);
- }
-
-mask:
- con ',' con
- {
- var mb, me int
- var v uint32
-
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- mb = int($1);
- me = int($3);
- if(mb < 0 || mb > 31 || me < 0 || me > 31){
- yyerror("illegal mask start/end value(s)");
- mb = 0
- me = 0;
- }
- if mb <= me {
- v = (^uint32(0)>>uint(mb)) & (^uint32(0)<<uint(31-me))
- } else {
- v = (^uint32(0)>>uint(me+1)) & (^uint32(0)<<uint(31-(mb-1)))
- }
- $$.Offset = int64(v);
- }
-
-textsize:
- LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = int64($1)
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -int64($2)
- $$.Val = int32(obj.ArgsSizeUnknown);
- }
-| LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = int64($1)
- $$.Val = int32($3);
- }
-| '-' LCONST '-' LCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_TEXTSIZE;
- $$.Offset = -int64($2)
- $$.Val = int32($4);
- }
-
-ximm:
- '$' addr
- {
- $$ = $2;
- $$.Type = obj.TYPE_ADDR;
- }
-| '$' LSCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_SCONST;
- $$.Val = $2
- }
-
-fimm:
- '$' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = $2;
- }
-| '$' '-' LFCONST
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_FCONST;
- $$.Val = -$3;
- }
-
-imm: '$' con
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_CONST;
- $$.Offset = $2;
- }
-
-sreg:
- LREG
-| LR '(' con ')'
- {
- if $$ < 0 || $$ >= NREG {
- print("register value out of range\n")
- }
- $$ = REG_R0 + $3;
- }
-
-regaddr:
- '(' sreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($2);
- $$.Offset = 0;
- }
-| '(' sreg '+' sreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($2);
- $$.Scale = int16($4);
- $$.Offset = 0;
- }
-
-addr:
- name
-| con '(' sreg ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Reg = int16($3);
- $$.Offset = $1;
- }
-
-name:
- con '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = int8($3);
- $$.Sym = nil;
- $$.Offset = $1;
- }
-| LNAME offset '(' pointer ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = int8($4);
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 0);
- $$.Offset = $2;
- }
-| LNAME '<' '>' offset '(' LSB ')'
- {
- $$ = nullgen;
- $$.Type = obj.TYPE_MEM;
- $$.Name = obj.NAME_STATIC;
- $$.Sym = obj.Linklookup(asm.Ctxt, $1.Name, 1);
- $$.Offset = $4;
- }
-
-comma:
-| ','
-
-offset:
- {
- $$ = 0;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '-' con
- {
- $$ = -$2;
- }
-
-pointer:
- LSB
-| LSP
-| LFP
-
-con:
- LCONST
-| LVAR
- {
- $$ = $1.Value;
- }
-| '-' con
- {
- $$ = -$2;
- }
-| '+' con
- {
- $$ = $2;
- }
-| '~' con
- {
- $$ = ^$2;
- }
-| '(' expr ')'
- {
- $$ = $2;
- }
-
-expr:
- con
-| expr '+' expr
- {
- $$ = $1 + $3;
- }
-| expr '-' expr
- {
- $$ = $1 - $3;
- }
-| expr '*' expr
- {
- $$ = $1 * $3;
- }
-| expr '/' expr
- {
- $$ = $1 / $3;
- }
-| expr '%' expr
- {
- $$ = $1 % $3;
- }
-| expr '<' '<' expr
- {
- $$ = $1 << uint($4);
- }
-| expr '>' '>' expr
- {
- $$ = $1 >> uint($4);
- }
-| expr '&' expr
- {
- $$ = $1 & $3;
- }
-| expr '^' expr
- {
- $$ = $1 ^ $3;
- }
-| expr '|' expr
- {
- $$ = $1 | $3;
- }
+++ /dev/null
-// cmd/9a/lex.c from Vita Nuova.
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-//go:generate go tool yacc a.y
-
-package main
-
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- "cmd/internal/obj/ppc64"
-)
-
-var (
- yyerror = asm.Yyerror
- nullgen obj.Addr
- stmtline int32
-)
-
-func main() {
- cinit()
-
- asm.LSCONST = LSCONST
- asm.LCONST = LCONST
- asm.LFCONST = LFCONST
- asm.LNAME = LNAME
- asm.LVAR = LVAR
- asm.LLAB = LLAB
-
- asm.Lexinit = lexinit
- asm.Cclean = cclean
- asm.Yyparse = yyparse
-
- asm.Thechar = '9'
- asm.Thestring = "ppc64"
- asm.Thelinkarch = &ppc64.Linkppc64
- asm.Arches = map[string]*obj.LinkArch{
- "ppc64le": &ppc64.Linkppc64le,
- }
-
- asm.Main()
-}
-
-type yy struct{}
-
-func (yy) Lex(v *yySymType) int {
- var av asm.Yylval
- tok := asm.Yylex(&av)
- v.sym = av.Sym
- v.lval = av.Lval
- v.sval = av.Sval
- v.dval = av.Dval
- return tok
-}
-
-func (yy) Error(msg string) {
- asm.Yyerror("%s", msg)
-}
-
-func yyparse() {
- nosched = 0
- yyParse(yy{})
-}
-
-var lexinit = []asm.Lextab{
- {"SP", LSP, obj.NAME_AUTO},
- {"SB", LSB, obj.NAME_EXTERN},
- {"FP", LFP, obj.NAME_PARAM},
- {"PC", LPC, obj.TYPE_BRANCH},
- {"LR", LLR, ppc64.REG_LR},
- {"CTR", LCTR, ppc64.REG_CTR},
- {"XER", LSPREG, ppc64.REG_XER},
- {"MSR", LMSR, ppc64.REG_MSR},
- {"FPSCR", LFPSCR, ppc64.REG_FPSCR},
- {"SPR", LSPR, ppc64.REG_SPR0},
- {"DCR", LSPR, ppc64.REG_DCR0},
- {"CR", LCR, ppc64.REG_CR},
- {"CR0", LCREG, ppc64.REG_CR0},
- {"CR1", LCREG, ppc64.REG_CR1},
- {"CR2", LCREG, ppc64.REG_CR2},
- {"CR3", LCREG, ppc64.REG_CR3},
- {"CR4", LCREG, ppc64.REG_CR4},
- {"CR5", LCREG, ppc64.REG_CR5},
- {"CR6", LCREG, ppc64.REG_CR6},
- {"CR7", LCREG, ppc64.REG_CR7},
- {"R", LR, 0},
- {"R0", LREG, ppc64.REG_R0},
- {"R1", LREG, ppc64.REG_R1},
- {"R2", LREG, ppc64.REG_R2},
- {"R3", LREG, ppc64.REG_R3},
- {"R4", LREG, ppc64.REG_R4},
- {"R5", LREG, ppc64.REG_R5},
- {"R6", LREG, ppc64.REG_R6},
- {"R7", LREG, ppc64.REG_R7},
- {"R8", LREG, ppc64.REG_R8},
- {"R9", LREG, ppc64.REG_R9},
- {"R10", LREG, ppc64.REG_R10},
- {"R11", LREG, ppc64.REG_R11},
- {"R12", LREG, ppc64.REG_R12},
- {"R13", LREG, ppc64.REG_R13},
- {"R14", LREG, ppc64.REG_R14},
- {"R15", LREG, ppc64.REG_R15},
- {"R16", LREG, ppc64.REG_R16},
- {"R17", LREG, ppc64.REG_R17},
- {"R18", LREG, ppc64.REG_R18},
- {"R19", LREG, ppc64.REG_R19},
- {"R20", LREG, ppc64.REG_R20},
- {"R21", LREG, ppc64.REG_R21},
- {"R22", LREG, ppc64.REG_R22},
- {"R23", LREG, ppc64.REG_R23},
- {"R24", LREG, ppc64.REG_R24},
- {"R25", LREG, ppc64.REG_R25},
- {"R26", LREG, ppc64.REG_R26},
- {"R27", LREG, ppc64.REG_R27},
- {"R28", LREG, ppc64.REG_R28},
- {"R29", LREG, ppc64.REG_R29},
- {"g", LREG, ppc64.REG_R30}, // avoid unintentionally clobbering g using R30
- {"R31", LREG, ppc64.REG_R31},
- {"F", LF, 0},
- {"F0", LFREG, ppc64.REG_F0},
- {"F1", LFREG, ppc64.REG_F1},
- {"F2", LFREG, ppc64.REG_F2},
- {"F3", LFREG, ppc64.REG_F3},
- {"F4", LFREG, ppc64.REG_F4},
- {"F5", LFREG, ppc64.REG_F5},
- {"F6", LFREG, ppc64.REG_F6},
- {"F7", LFREG, ppc64.REG_F7},
- {"F8", LFREG, ppc64.REG_F8},
- {"F9", LFREG, ppc64.REG_F9},
- {"F10", LFREG, ppc64.REG_F10},
- {"F11", LFREG, ppc64.REG_F11},
- {"F12", LFREG, ppc64.REG_F12},
- {"F13", LFREG, ppc64.REG_F13},
- {"F14", LFREG, ppc64.REG_F14},
- {"F15", LFREG, ppc64.REG_F15},
- {"F16", LFREG, ppc64.REG_F16},
- {"F17", LFREG, ppc64.REG_F17},
- {"F18", LFREG, ppc64.REG_F18},
- {"F19", LFREG, ppc64.REG_F19},
- {"F20", LFREG, ppc64.REG_F20},
- {"F21", LFREG, ppc64.REG_F21},
- {"F22", LFREG, ppc64.REG_F22},
- {"F23", LFREG, ppc64.REG_F23},
- {"F24", LFREG, ppc64.REG_F24},
- {"F25", LFREG, ppc64.REG_F25},
- {"F26", LFREG, ppc64.REG_F26},
- {"F27", LFREG, ppc64.REG_F27},
- {"F28", LFREG, ppc64.REG_F28},
- {"F29", LFREG, ppc64.REG_F29},
- {"F30", LFREG, ppc64.REG_F30},
- {"F31", LFREG, ppc64.REG_F31},
- {"CREQV", LCROP, ppc64.ACREQV},
- {"CRXOR", LCROP, ppc64.ACRXOR},
- {"CRAND", LCROP, ppc64.ACRAND},
- {"CROR", LCROP, ppc64.ACROR},
- {"CRANDN", LCROP, ppc64.ACRANDN},
- {"CRORN", LCROP, ppc64.ACRORN},
- {"CRNAND", LCROP, ppc64.ACRNAND},
- {"CRNOR", LCROP, ppc64.ACRNOR},
- {"ADD", LADDW, ppc64.AADD},
- {"ADDV", LADDW, ppc64.AADDV},
- {"ADDCC", LADDW, ppc64.AADDCC},
- {"ADDVCC", LADDW, ppc64.AADDVCC},
- {"ADDC", LADDW, ppc64.AADDC},
- {"ADDCV", LADDW, ppc64.AADDCV},
- {"ADDCCC", LADDW, ppc64.AADDCCC},
- {"ADDCVCC", LADDW, ppc64.AADDCVCC},
- {"ADDE", LLOGW, ppc64.AADDE},
- {"ADDEV", LLOGW, ppc64.AADDEV},
- {"ADDECC", LLOGW, ppc64.AADDECC},
- {"ADDEVCC", LLOGW, ppc64.AADDEVCC},
- {"ADDME", LABS, ppc64.AADDME},
- {"ADDMEV", LABS, ppc64.AADDMEV},
- {"ADDMECC", LABS, ppc64.AADDMECC},
- {"ADDMEVCC", LABS, ppc64.AADDMEVCC},
- {"ADDZE", LABS, ppc64.AADDZE},
- {"ADDZEV", LABS, ppc64.AADDZEV},
- {"ADDZECC", LABS, ppc64.AADDZECC},
- {"ADDZEVCC", LABS, ppc64.AADDZEVCC},
- {"SUB", LADDW, ppc64.ASUB},
- {"SUBV", LADDW, ppc64.ASUBV},
- {"SUBCC", LADDW, ppc64.ASUBCC},
- {"SUBVCC", LADDW, ppc64.ASUBVCC},
- {"SUBE", LLOGW, ppc64.ASUBE},
- {"SUBECC", LLOGW, ppc64.ASUBECC},
- {"SUBEV", LLOGW, ppc64.ASUBEV},
- {"SUBEVCC", LLOGW, ppc64.ASUBEVCC},
- {"SUBC", LADDW, ppc64.ASUBC},
- {"SUBCCC", LADDW, ppc64.ASUBCCC},
- {"SUBCV", LADDW, ppc64.ASUBCV},
- {"SUBCVCC", LADDW, ppc64.ASUBCVCC},
- {"SUBME", LABS, ppc64.ASUBME},
- {"SUBMEV", LABS, ppc64.ASUBMEV},
- {"SUBMECC", LABS, ppc64.ASUBMECC},
- {"SUBMEVCC", LABS, ppc64.ASUBMEVCC},
- {"SUBZE", LABS, ppc64.ASUBZE},
- {"SUBZEV", LABS, ppc64.ASUBZEV},
- {"SUBZECC", LABS, ppc64.ASUBZECC},
- {"SUBZEVCC", LABS, ppc64.ASUBZEVCC},
- {"AND", LADDW, ppc64.AAND},
- {"ANDCC", LADDW, ppc64.AANDCC}, /* includes andil & andiu */
- {"ANDN", LLOGW, ppc64.AANDN},
- {"ANDNCC", LLOGW, ppc64.AANDNCC},
- {"EQV", LLOGW, ppc64.AEQV},
- {"EQVCC", LLOGW, ppc64.AEQVCC},
- {"NAND", LLOGW, ppc64.ANAND},
- {"NANDCC", LLOGW, ppc64.ANANDCC},
- {"NOR", LLOGW, ppc64.ANOR},
- {"NORCC", LLOGW, ppc64.ANORCC},
- {"OR", LADDW, ppc64.AOR}, /* includes oril & oriu */
- {"ORCC", LADDW, ppc64.AORCC},
- {"ORN", LLOGW, ppc64.AORN},
- {"ORNCC", LLOGW, ppc64.AORNCC},
- {"XOR", LADDW, ppc64.AXOR}, /* includes xoril & xoriu */
- {"XORCC", LLOGW, ppc64.AXORCC},
- {"EXTSB", LABS, ppc64.AEXTSB},
- {"EXTSBCC", LABS, ppc64.AEXTSBCC},
- {"EXTSH", LABS, ppc64.AEXTSH},
- {"EXTSHCC", LABS, ppc64.AEXTSHCC},
- {"CNTLZW", LABS, ppc64.ACNTLZW},
- {"CNTLZWCC", LABS, ppc64.ACNTLZWCC},
- {"RLWMI", LRLWM, ppc64.ARLWMI},
- {"RLWMICC", LRLWM, ppc64.ARLWMICC},
- {"RLWNM", LRLWM, ppc64.ARLWNM},
- {"RLWNMCC", LRLWM, ppc64.ARLWNMCC},
- {"SLW", LSHW, ppc64.ASLW},
- {"SLWCC", LSHW, ppc64.ASLWCC},
- {"SRW", LSHW, ppc64.ASRW},
- {"SRWCC", LSHW, ppc64.ASRWCC},
- {"SRAW", LSHW, ppc64.ASRAW},
- {"SRAWCC", LSHW, ppc64.ASRAWCC},
- {"BR", LBRA, ppc64.ABR},
- {"JMP", LBRA, ppc64.ABR},
- {"BC", LBRA, ppc64.ABC},
- {"BCL", LBRA, ppc64.ABC},
- {"BL", LBRA, ppc64.ABL},
- {"CALL", LBRA, ppc64.ABL},
- {"BEQ", LBRA, ppc64.ABEQ},
- {"BNE", LBRA, ppc64.ABNE},
- {"BGT", LBRA, ppc64.ABGT},
- {"BGE", LBRA, ppc64.ABGE},
- {"BLT", LBRA, ppc64.ABLT},
- {"BLE", LBRA, ppc64.ABLE},
- {"BVC", LBRA, ppc64.ABVC},
- {"BVS", LBRA, ppc64.ABVS},
- {"CMP", LCMP, ppc64.ACMP},
- {"CMPU", LCMP, ppc64.ACMPU},
- {"CMPW", LCMP, ppc64.ACMPW},
- {"CMPWU", LCMP, ppc64.ACMPWU},
- {"DIVW", LLOGW, ppc64.ADIVW},
- {"DIVWV", LLOGW, ppc64.ADIVWV},
- {"DIVWCC", LLOGW, ppc64.ADIVWCC},
- {"DIVWVCC", LLOGW, ppc64.ADIVWVCC},
- {"DIVWU", LLOGW, ppc64.ADIVWU},
- {"DIVWUV", LLOGW, ppc64.ADIVWUV},
- {"DIVWUCC", LLOGW, ppc64.ADIVWUCC},
- {"DIVWUVCC", LLOGW, ppc64.ADIVWUVCC},
- {"FABS", LFCONV, ppc64.AFABS},
- {"FABSCC", LFCONV, ppc64.AFABSCC},
- {"FNEG", LFCONV, ppc64.AFNEG},
- {"FNEGCC", LFCONV, ppc64.AFNEGCC},
- {"FNABS", LFCONV, ppc64.AFNABS},
- {"FNABSCC", LFCONV, ppc64.AFNABSCC},
- {"FADD", LFADD, ppc64.AFADD},
- {"FADDCC", LFADD, ppc64.AFADDCC},
- {"FSUB", LFADD, ppc64.AFSUB},
- {"FSUBCC", LFADD, ppc64.AFSUBCC},
- {"FMUL", LFADD, ppc64.AFMUL},
- {"FMULCC", LFADD, ppc64.AFMULCC},
- {"FDIV", LFADD, ppc64.AFDIV},
- {"FDIVCC", LFADD, ppc64.AFDIVCC},
- {"FRSP", LFCONV, ppc64.AFRSP},
- {"FRSPCC", LFCONV, ppc64.AFRSPCC},
- {"FCTIW", LFCONV, ppc64.AFCTIW},
- {"FCTIWCC", LFCONV, ppc64.AFCTIWCC},
- {"FCTIWZ", LFCONV, ppc64.AFCTIWZ},
- {"FCTIWZCC", LFCONV, ppc64.AFCTIWZCC},
- {"FMADD", LFMA, ppc64.AFMADD},
- {"FMADDCC", LFMA, ppc64.AFMADDCC},
- {"FMSUB", LFMA, ppc64.AFMSUB},
- {"FMSUBCC", LFMA, ppc64.AFMSUBCC},
- {"FNMADD", LFMA, ppc64.AFNMADD},
- {"FNMADDCC", LFMA, ppc64.AFNMADDCC},
- {"FNMSUB", LFMA, ppc64.AFNMSUB},
- {"FNMSUBCC", LFMA, ppc64.AFNMSUBCC},
- {"FMADDS", LFMA, ppc64.AFMADDS},
- {"FMADDSCC", LFMA, ppc64.AFMADDSCC},
- {"FMSUBS", LFMA, ppc64.AFMSUBS},
- {"FMSUBSCC", LFMA, ppc64.AFMSUBSCC},
- {"FNMADDS", LFMA, ppc64.AFNMADDS},
- {"FNMADDSCC", LFMA, ppc64.AFNMADDSCC},
- {"FNMSUBS", LFMA, ppc64.AFNMSUBS},
- {"FNMSUBSCC", LFMA, ppc64.AFNMSUBSCC},
- {"FCMPU", LFCMP, ppc64.AFCMPU},
- {"FCMPO", LFCMP, ppc64.AFCMPO},
- {"MTFSB0", LMTFSB, ppc64.AMTFSB0},
- {"MTFSB1", LMTFSB, ppc64.AMTFSB1},
- {"FMOVD", LFMOV, ppc64.AFMOVD},
- {"FMOVS", LFMOV, ppc64.AFMOVS},
- {"FMOVDCC", LFCONV, ppc64.AFMOVDCC}, /* fmr. */
- {"GLOBL", LGLOBL, obj.AGLOBL},
- {"MOVB", LMOVB, ppc64.AMOVB},
- {"MOVBZ", LMOVB, ppc64.AMOVBZ},
- {"MOVBU", LMOVB, ppc64.AMOVBU},
- {"MOVBZU", LMOVB, ppc64.AMOVBZU},
- {"MOVH", LMOVB, ppc64.AMOVH},
- {"MOVHZ", LMOVB, ppc64.AMOVHZ},
- {"MOVHU", LMOVB, ppc64.AMOVHU},
- {"MOVHZU", LMOVB, ppc64.AMOVHZU},
- {"MOVHBR", LXMV, ppc64.AMOVHBR},
- {"MOVWBR", LXMV, ppc64.AMOVWBR},
- {"MOVW", LMOVW, ppc64.AMOVW},
- {"MOVWU", LMOVW, ppc64.AMOVWU},
- {"MOVMW", LMOVMW, ppc64.AMOVMW},
- {"MOVFL", LMOVW, ppc64.AMOVFL},
- {"MULLW", LADDW, ppc64.AMULLW}, /* includes multiply immediate 10-139 */
- {"MULLWV", LLOGW, ppc64.AMULLWV},
- {"MULLWCC", LLOGW, ppc64.AMULLWCC},
- {"MULLWVCC", LLOGW, ppc64.AMULLWVCC},
- {"MULHW", LLOGW, ppc64.AMULHW},
- {"MULHWCC", LLOGW, ppc64.AMULHWCC},
- {"MULHWU", LLOGW, ppc64.AMULHWU},
- {"MULHWUCC", LLOGW, ppc64.AMULHWUCC},
- {"NEG", LABS, ppc64.ANEG},
- {"NEGV", LABS, ppc64.ANEGV},
- {"NEGCC", LABS, ppc64.ANEGCC},
- {"NEGVCC", LABS, ppc64.ANEGVCC},
- {"NOP", LNOP, obj.ANOP}, /* ori 0,0,0 */
- {"SYSCALL", LNOP, ppc64.ASYSCALL},
- {"UNDEF", LNOP, obj.AUNDEF},
- {"RET", LRETRN, obj.ARET},
- {"RETURN", LRETRN, obj.ARET},
- {"RFI", LRETRN, ppc64.ARFI},
- {"RFCI", LRETRN, ppc64.ARFCI},
- {"DATA", LDATA, obj.ADATA},
- {"END", LEND, obj.AEND},
- {"TEXT", LTEXT, obj.ATEXT},
-
- /* 64-bit instructions */
- {"CNTLZD", LABS, ppc64.ACNTLZD},
- {"CNTLZDCC", LABS, ppc64.ACNTLZDCC},
- {"DIVD", LLOGW, ppc64.ADIVD},
- {"DIVDCC", LLOGW, ppc64.ADIVDCC},
- {"DIVDVCC", LLOGW, ppc64.ADIVDVCC},
- {"DIVDV", LLOGW, ppc64.ADIVDV},
- {"DIVDU", LLOGW, ppc64.ADIVDU},
- {"DIVDUCC", LLOGW, ppc64.ADIVDUCC},
- {"DIVDUVCC", LLOGW, ppc64.ADIVDUVCC},
- {"DIVDUV", LLOGW, ppc64.ADIVDUV},
- {"EXTSW", LABS, ppc64.AEXTSW},
- {"EXTSWCC", LABS, ppc64.AEXTSWCC},
- {"FCTID", LFCONV, ppc64.AFCTID},
- {"FCTIDCC", LFCONV, ppc64.AFCTIDCC},
- {"FCTIDZ", LFCONV, ppc64.AFCTIDZ},
- {"FCTIDZCC", LFCONV, ppc64.AFCTIDZCC},
- {"FCFID", LFCONV, ppc64.AFCFID},
- {"FCFIDCC", LFCONV, ppc64.AFCFIDCC},
- {"LDAR", LXLD, ppc64.ALDAR},
- {"MOVD", LMOVW, ppc64.AMOVD},
- {"MOVDU", LMOVW, ppc64.AMOVDU},
- {"MOVWZ", LMOVW, ppc64.AMOVWZ},
- {"MOVWZU", LMOVW, ppc64.AMOVWZU},
- {"MULHD", LLOGW, ppc64.AMULHD},
- {"MULHDCC", LLOGW, ppc64.AMULHDCC},
- {"MULHDU", LLOGW, ppc64.AMULHDU},
- {"MULHDUCC", LLOGW, ppc64.AMULHDUCC},
- {"MULLD", LADDW, ppc64.AMULLD}, /* includes multiply immediate? */
- {"MULLDCC", LLOGW, ppc64.AMULLDCC},
- {"MULLDVCC", LLOGW, ppc64.AMULLDVCC},
- {"MULLDV", LLOGW, ppc64.AMULLDV},
- {"RFID", LRETRN, ppc64.ARFID},
- {"HRFID", LRETRN, ppc64.AHRFID},
- {"RLDMI", LRLWM, ppc64.ARLDMI},
- {"RLDMICC", LRLWM, ppc64.ARLDMICC},
- {"RLDC", LRLWM, ppc64.ARLDC},
- {"RLDCCC", LRLWM, ppc64.ARLDCCC},
- {"RLDCR", LRLWM, ppc64.ARLDCR},
- {"RLDCRCC", LRLWM, ppc64.ARLDCRCC},
- {"RLDCL", LRLWM, ppc64.ARLDCL},
- {"RLDCLCC", LRLWM, ppc64.ARLDCLCC},
- {"SLBIA", LNOP, ppc64.ASLBIA},
- {"SLBIE", LNOP, ppc64.ASLBIE},
- {"SLBMFEE", LABS, ppc64.ASLBMFEE},
- {"SLBMFEV", LABS, ppc64.ASLBMFEV},
- {"SLBMTE", LABS, ppc64.ASLBMTE},
- {"SLD", LSHW, ppc64.ASLD},
- {"SLDCC", LSHW, ppc64.ASLDCC},
- {"SRD", LSHW, ppc64.ASRD},
- {"SRAD", LSHW, ppc64.ASRAD},
- {"SRADCC", LSHW, ppc64.ASRADCC},
- {"SRDCC", LSHW, ppc64.ASRDCC},
- {"STDCCC", LXST, ppc64.ASTDCCC},
- {"TD", LADDW, ppc64.ATD},
-
- /* pseudo instructions */
- {"REM", LLOGW, ppc64.AREM},
- {"REMCC", LLOGW, ppc64.AREMCC},
- {"REMV", LLOGW, ppc64.AREMV},
- {"REMVCC", LLOGW, ppc64.AREMVCC},
- {"REMU", LLOGW, ppc64.AREMU},
- {"REMUCC", LLOGW, ppc64.AREMUCC},
- {"REMUV", LLOGW, ppc64.AREMUV},
- {"REMUVCC", LLOGW, ppc64.AREMUVCC},
- {"REMD", LLOGW, ppc64.AREMD},
- {"REMDCC", LLOGW, ppc64.AREMDCC},
- {"REMDV", LLOGW, ppc64.AREMDV},
- {"REMDVCC", LLOGW, ppc64.AREMDVCC},
- {"REMDU", LLOGW, ppc64.AREMDU},
- {"REMDUCC", LLOGW, ppc64.AREMDUCC},
- {"REMDUV", LLOGW, ppc64.AREMDUV},
- {"REMDUVCC", LLOGW, ppc64.AREMDUVCC},
-
- /* special instructions */
- {"DCBF", LXOP, ppc64.ADCBF},
- {"DCBI", LXOP, ppc64.ADCBI},
- {"DCBST", LXOP, ppc64.ADCBST},
- {"DCBT", LXOP, ppc64.ADCBT},
- {"DCBTST", LXOP, ppc64.ADCBTST},
- {"DCBZ", LXOP, ppc64.ADCBZ},
- {"ICBI", LXOP, ppc64.AICBI},
- {"ECIWX", LXLD, ppc64.AECIWX},
- {"ECOWX", LXST, ppc64.AECOWX},
- {"LWAR", LXLD, ppc64.ALWAR},
- {"STWCCC", LXST, ppc64.ASTWCCC},
- {"EIEIO", LRETRN, ppc64.AEIEIO},
- {"TLBIE", LNOP, ppc64.ATLBIE},
- {"TLBIEL", LNOP, ppc64.ATLBIEL},
- {"LSW", LXLD, ppc64.ALSW},
- {"STSW", LXST, ppc64.ASTSW},
- {"ISYNC", LRETRN, ppc64.AISYNC},
- {"SYNC", LRETRN, ppc64.ASYNC},
- {"TLBSYNC", LRETRN, ppc64.ATLBSYNC},
- {"PTESYNC", LRETRN, ppc64.APTESYNC},
-
- /* "TW", LADDW, ATW,*/
- {"WORD", LWORD, ppc64.AWORD},
- {"DWORD", LWORD, ppc64.ADWORD},
- {"SCHED", LSCHED, 0},
- {"NOSCHED", LSCHED, 0x80},
- {"PCDATA", LPCDAT, obj.APCDATA},
- {"FUNCDATA", LFUNCDAT, obj.AFUNCDATA},
-}
-
-func cinit() {
-}
-
-func cclean() {
- outcode(obj.AEND, &nullgen, 0, &nullgen)
-}
-
-var lastpc *obj.Prog
-var nosched int
-
-func outcode(a int, g1 *obj.Addr, reg int, g2 *obj.Addr) {
- var p *obj.Prog
- var pl *obj.Plist
-
- if asm.Pass == 1 {
- goto out
- }
-
- if g1.Scale != 0 {
- if reg != 0 || g2.Scale != 0 {
- yyerror("bad addressing modes")
- }
- reg = int(g1.Scale)
- } else if g2.Scale != 0 {
- if reg != 0 {
- yyerror("bad addressing modes")
- }
- reg = int(g2.Scale)
- }
-
- p = asm.Ctxt.NewProg()
- p.As = int16(a)
- p.Lineno = stmtline
- if nosched != 0 {
- p.Mark |= ppc64.NOSCHED
- }
- p.From = *g1
- p.Reg = int16(reg)
- p.To = *g2
- p.Pc = int64(asm.PC)
-
- if lastpc == nil {
- pl = obj.Linknewplist(asm.Ctxt)
- pl.Firstpc = p
- } else {
- lastpc.Link = p
- }
- lastpc = p
-
-out:
- if a != obj.AGLOBL && a != obj.ADATA {
- asm.PC++
- }
-}
-
-func outgcode(a int, g1 *obj.Addr, reg int, g2, g3 *obj.Addr) {
- var p *obj.Prog
- var pl *obj.Plist
-
- if asm.Pass == 1 {
- goto out
- }
-
- p = asm.Ctxt.NewProg()
- p.As = int16(a)
- p.Lineno = stmtline
- if nosched != 0 {
- p.Mark |= ppc64.NOSCHED
- }
- p.From = *g1
- p.Reg = int16(reg)
- if g2.Type != 0 {
- p.From3 = new(obj.Addr)
- *p.From3 = *g2
- }
- p.To = *g3
- p.Pc = int64(asm.PC)
-
- if lastpc == nil {
- pl = obj.Linknewplist(asm.Ctxt)
- pl.Firstpc = p
- } else {
- lastpc.Link = p
- }
- lastpc = p
-
-out:
- if a != obj.AGLOBL && a != obj.ADATA {
- asm.PC++
- }
-}
+++ /dev/null
-//line a.y:31
-package main
-
-import __yyfmt__ "fmt"
-
-//line a.y:31
-import (
- "cmd/internal/asm"
- "cmd/internal/obj"
- . "cmd/internal/obj/ppc64"
-)
-
-//line a.y:40
-type yySymType struct {
- yys int
- sym *asm.Sym
- lval int64
- dval float64
- sval string
- addr obj.Addr
-}
-
-const LMOVW = 57346
-const LMOVB = 57347
-const LABS = 57348
-const LLOGW = 57349
-const LSHW = 57350
-const LADDW = 57351
-const LCMP = 57352
-const LCROP = 57353
-const LBRA = 57354
-const LFMOV = 57355
-const LFCONV = 57356
-const LFCMP = 57357
-const LFADD = 57358
-const LFMA = 57359
-const LTRAP = 57360
-const LXORW = 57361
-const LNOP = 57362
-const LEND = 57363
-const LRETT = 57364
-const LWORD = 57365
-const LTEXT = 57366
-const LDATA = 57367
-const LGLOBL = 57368
-const LRETRN = 57369
-const LCONST = 57370
-const LSP = 57371
-const LSB = 57372
-const LFP = 57373
-const LPC = 57374
-const LCREG = 57375
-const LFLUSH = 57376
-const LREG = 57377
-const LFREG = 57378
-const LR = 57379
-const LCR = 57380
-const LF = 57381
-const LFPSCR = 57382
-const LLR = 57383
-const LCTR = 57384
-const LSPR = 57385
-const LSPREG = 57386
-const LSEG = 57387
-const LMSR = 57388
-const LPCDAT = 57389
-const LFUNCDAT = 57390
-const LSCHED = 57391
-const LXLD = 57392
-const LXST = 57393
-const LXOP = 57394
-const LXMV = 57395
-const LRLWM = 57396
-const LMOVMW = 57397
-const LMOVEM = 57398
-const LMOVFL = 57399
-const LMTFSB = 57400
-const LMA = 57401
-const LFCONST = 57402
-const LSCONST = 57403
-const LNAME = 57404
-const LLAB = 57405
-const LVAR = 57406
-
-var yyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "'|'",
- "'^'",
- "'&'",
- "'<'",
- "'>'",
- "'+'",
- "'-'",
- "'*'",
- "'/'",
- "'%'",
- "LMOVW",
- "LMOVB",
- "LABS",
- "LLOGW",
- "LSHW",
- "LADDW",
- "LCMP",
- "LCROP",
- "LBRA",
- "LFMOV",
- "LFCONV",
- "LFCMP",
- "LFADD",
- "LFMA",
- "LTRAP",
- "LXORW",
- "LNOP",
- "LEND",
- "LRETT",
- "LWORD",
- "LTEXT",
- "LDATA",
- "LGLOBL",
- "LRETRN",
- "LCONST",
- "LSP",
- "LSB",
- "LFP",
- "LPC",
- "LCREG",
- "LFLUSH",
- "LREG",
- "LFREG",
- "LR",
- "LCR",
- "LF",
- "LFPSCR",
- "LLR",
- "LCTR",
- "LSPR",
- "LSPREG",
- "LSEG",
- "LMSR",
- "LPCDAT",
- "LFUNCDAT",
- "LSCHED",
- "LXLD",
- "LXST",
- "LXOP",
- "LXMV",
- "LRLWM",
- "LMOVMW",
- "LMOVEM",
- "LMOVFL",
- "LMTFSB",
- "LMA",
- "LFCONST",
- "LSCONST",
- "LNAME",
- "LLAB",
- "LVAR",
- "':'",
- "'='",
- "';'",
- "','",
- "'('",
- "')'",
- "'$'",
- "'~'",
-}
-var yyStatenames = [...]string{}
-
-const yyEofCode = 1
-const yyErrCode = 2
-const yyMaxDepth = 200
-
-//line yacctab:1
-var yyExca = [...]int{
- -1, 1,
- 1, -1,
- -2, 2,
-}
-
-const yyNprod = 187
-const yyPrivate = 57344
-
-var yyTokenNames []string
-var yyStates []string
-
-const yyLast = 900
-
-var yyAct = [...]int{
-
- 48, 394, 54, 90, 427, 273, 440, 58, 52, 102,
- 80, 79, 85, 172, 94, 95, 97, 98, 100, 101,
- 51, 57, 113, 3, 80, 79, 56, 121, 123, 125,
- 435, 128, 130, 91, 133, 53, 278, 138, 74, 77,
- 75, 66, 164, 117, 118, 119, 120, 454, 453, 93,
- 96, 65, 99, 77, 134, 417, 127, 114, 94, 74,
- 416, 75, 74, 122, 75, 406, 83, 84, 105, 136,
- 137, 139, 140, 76, 94, 78, 80, 79, 405, 384,
- 62, 127, 94, 81, 383, 205, 148, 150, 149, 78,
- 50, 380, 116, 369, 104, 94, 127, 81, 368, 61,
- 61, 61, 87, 89, 367, 77, 366, 277, 103, 110,
- 364, 363, 316, 63, 407, 198, 64, 61, 284, 55,
- 126, 205, 129, 131, 162, 206, 232, 143, 143, 143,
- 169, 74, 63, 75, 171, 64, 225, 204, 205, 76,
- 109, 78, 170, 165, 448, 47, 62, 447, 92, 81,
- 446, 445, 248, 256, 257, 168, 226, 264, 265, 254,
- 269, 270, 271, 260, 135, 444, 443, 94, 176, 177,
- 178, 235, 399, 253, 398, 397, 262, 199, 255, 393,
- 288, 291, 292, 189, 392, 267, 391, 251, 390, 389,
- 261, 303, 305, 307, 309, 311, 312, 202, 388, 387,
- 166, 386, 385, 293, 294, 295, 296, 314, 379, 317,
- 115, 49, 86, 88, 378, 332, 334, 335, 336, 377,
- 338, 106, 342, 376, 375, 374, 302, 373, 372, 124,
- 362, 328, 329, 330, 331, 361, 233, 231, 230, 229,
- 61, 116, 250, 61, 132, 259, 222, 221, 141, 220,
- 333, 219, 146, 218, 280, 339, 341, 217, 281, 282,
- 283, 216, 215, 286, 287, 344, 214, 213, 61, 348,
- 290, 252, 318, 321, 61, 263, 298, 300, 266, 268,
- 351, 352, 353, 354, 355, 212, 315, 358, 359, 360,
- 370, 211, 202, 324, 59, 210, 80, 79, 209, 371,
- 207, 203, 197, 196, 195, 194, 193, 61, 192, 200,
- 191, 340, 190, 343, 188, 185, 184, 80, 79, 61,
- 347, 183, 349, 350, 208, 77, 182, 181, 381, 180,
- 67, 382, 74, 63, 75, 68, 64, 65, 83, 84,
- 70, 69, 179, 82, 223, 224, 77, 161, 227, 228,
- 160, 159, 249, 158, 157, 258, 156, 163, 155, 76,
- 154, 78, 153, 152, 151, 46, 62, 45, 66, 81,
- 44, 404, 187, 408, 409, 410, 411, 412, 413, 414,
- 289, 299, 78, 402, 42, 43, 297, 104, 63, 415,
- 81, 64, 67, 431, 65, 63, 430, 112, 64, 400,
- 401, 403, 438, 439, 319, 322, 421, 422, 246, 245,
- 244, 242, 243, 237, 238, 239, 240, 241, 67, 337,
- 441, 461, 163, 112, 449, 434, 426, 429, 442, 234,
- 450, 345, 186, 433, 436, 437, 357, 451, 74, 63,
- 75, 74, 64, 75, 285, 456, 457, 356, 459, 460,
- 67, 8, 418, 60, 67, 112, 74, 272, 75, 112,
- 70, 69, 396, 82, 455, 275, 274, 276, 103, 174,
- 175, 74, 202, 75, 275, 274, 276, 80, 452, 428,
- 428, 247, 147, 2, 432, 301, 304, 306, 308, 310,
- 395, 313, 142, 144, 145, 275, 274, 276, 325, 9,
- 272, 74, 326, 75, 327, 1, 77, 423, 424, 425,
- 71, 10, 11, 17, 15, 16, 14, 26, 19, 20,
- 12, 22, 25, 23, 24, 21, 73, 33, 37, 168,
- 34, 38, 40, 39, 41, 458, 72, 0, 186, 167,
- 76, 176, 78, 80, 79, 0, 173, 104, 174, 175,
- 81, 239, 240, 241, 35, 36, 6, 29, 30, 32,
- 31, 27, 28, 80, 79, 13, 18, 0, 0, 4,
- 0, 5, 77, 365, 7, 0, 0, 67, 0, 74,
- 0, 75, 68, 0, 419, 83, 84, 70, 69, 0,
- 82, 0, 77, 0, 80, 79, 0, 67, 0, 0,
- 80, 79, 112, 0, 0, 0, 76, 0, 78, 80,
- 79, 0, 0, 62, 0, 94, 81, 237, 238, 239,
- 240, 241, 0, 77, 0, 0, 111, 0, 78, 77,
- 0, 63, 108, 107, 64, 0, 81, 0, 77, 80,
- 79, 0, 0, 0, 0, 74, 0, 75, 245, 244,
- 242, 243, 237, 238, 239, 240, 241, 76, 0, 78,
- 0, 0, 167, 76, 62, 78, 0, 81, 77, 0,
- 104, 0, 76, 81, 78, 74, 0, 75, 0, 62,
- 0, 0, 81, 246, 245, 244, 242, 243, 237, 238,
- 239, 240, 241, 80, 79, 80, 79, 80, 79, 0,
- 0, 0, 76, 0, 78, 0, 80, 79, 0, 104,
- 80, 79, 81, 0, 0, 0, 0, 0, 0, 80,
- 79, 0, 77, 0, 77, 0, 77, 0, 0, 74,
- 0, 75, 80, 79, 0, 77, 0, 0, 0, 77,
- 0, 0, 0, 80, 79, 0, 0, 0, 77, 0,
- 0, 0, 80, 79, 0, 0, 299, 0, 78, 279,
- 78, 77, 78, 104, 0, 104, 81, 104, 81, 94,
- 81, 78, 77, 111, 0, 78, 104, 0, 346, 81,
- 420, 77, 76, 81, 78, 0, 0, 0, 0, 104,
- 0, 0, 81, 0, 0, 111, 0, 78, 0, 0,
- 0, 0, 323, 0, 0, 81, 111, 0, 78, 0,
- 0, 0, 0, 320, 0, 111, 81, 78, 0, 0,
- 0, 0, 201, 0, 0, 81, 246, 245, 244, 242,
- 243, 237, 238, 239, 240, 241, 244, 242, 243, 237,
- 238, 239, 240, 241, 242, 243, 237, 238, 239, 240,
- 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 236,
-}
-var yyPact = [...]int{
-
- -1000, -1000, 497, -1000, 309, 294, 290, -1000, 288, 68,
- 287, 600, 67, -67, -7, 396, -7, 396, 396, 308,
- 554, 14, 342, 342, 342, 342, 396, -7, 630, 2,
- 396, 17, 2, 86, -40, -67, -67, 163, 710, 710,
- 710, 163, -1000, 308, 308, -1000, -1000, -1000, 286, 285,
- 284, 282, 280, 278, 276, 275, 273, 272, 269, -1000,
- -1000, 45, 684, -1000, 64, -1000, 591, -1000, 51, -1000,
- 63, -1000, -1000, -1000, -1000, 55, 539, -1000, -1000, 308,
- 308, 308, -1000, -1000, -1000, 264, 251, 249, 248, 243,
- 238, 237, 362, 236, 308, 234, 232, 230, 228, 227,
- 226, 225, 224, -1000, 308, -1000, -1000, 15, 743, 223,
- 59, 539, 51, 222, 220, -1000, -1000, 217, 213, 207,
- 189, 188, 184, 183, 179, 175, 173, 396, 171, 169,
- 168, -1000, -1000, 163, 163, 393, -1000, 163, 163, 161,
- 160, -1000, 159, 47, 158, 417, -1000, 497, 822, -1000,
- 404, 534, 396, 396, 1, 349, 396, 396, 407, 411,
- 396, 396, 426, 27, 679, 308, -1000, -1000, 45, 308,
- 308, 308, 39, 436, 308, 308, -1000, -1000, -1000, 600,
- 396, 396, 342, 342, 342, 585, -1000, 311, 308, -1000,
- -7, 396, 396, 396, 396, 396, 396, 308, 32, -1000,
- -1000, 15, 42, 734, 723, 456, 39, 396, -1000, 396,
- 342, 342, 342, 342, -7, 396, 396, 396, 710, -7,
- -23, 396, 2, -1000, -1000, -1000, -1000, -1000, -1000, -67,
- 710, 697, 435, 688, 308, -1000, -1000, 308, 308, 308,
- 308, 308, 440, 428, 308, 308, 308, -1000, -1000, -1000,
- -1000, 157, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 152, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 31, 30, -1000, -1000, -1000, -1000, 396, -1000,
- 26, 24, 18, 13, 435, 460, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 150, 149, -1000, 147, -1000, 146, -1000, 145, -1000,
- 141, -1000, -1000, 136, -1000, 130, -1000, 11, -1000, -1000,
- 15, -1000, -1000, 15, 6, -1, -1000, -1000, -1000, 124,
- 123, 121, 120, 111, 110, 108, -1000, -1000, -1000, 106,
- -1000, 101, -1000, -1000, -1000, -1000, 452, 97, -1000, 96,
- 94, 540, 540, -1000, -1000, -1000, 308, 308, 837, 830,
- 643, 353, 344, -1000, -1000, -2, -1000, -1000, -1000, -1000,
- -15, 35, 396, 396, 396, 396, 396, 396, 396, 308,
- -1000, -20, -25, 701, -1000, 342, 342, 375, 375, 375,
- 688, 688, 396, 2, -1000, 423, 387, -51, -67, -75,
- 608, 608, -1000, -1000, -1000, -1000, -1000, 380, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- 15, -1000, 88, -1000, -1000, -1000, 87, 73, 72, 69,
- 66, -1000, -1000, 386, 420, 452, -1000, -1000, -1000, -1000,
- 468, -32, -33, 342, 396, 396, 308, 396, 396, -1000,
- 383, -1000, 686, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000,
-}
-var yyPgo = [...]int{
-
- 0, 88, 42, 5, 13, 294, 200, 0, 90, 453,
- 119, 20, 7, 536, 526, 1, 35, 2, 3, 68,
- 26, 21, 9, 8, 510, 4, 505, 483, 23, 482,
- 451, 210,
-}
-var yyR1 = [...]int{
-
- 0, 26, 27, 26, 29, 28, 28, 28, 28, 28,
- 28, 28, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 19, 19, 7, 12, 12,
- 13, 21, 14, 24, 20, 20, 20, 23, 11, 11,
- 10, 10, 22, 25, 15, 15, 15, 15, 17, 17,
- 18, 18, 16, 5, 5, 8, 8, 6, 6, 9,
- 9, 9, 31, 31, 4, 4, 4, 3, 3, 3,
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2,
-}
-var yyR2 = [...]int{
-
- 0, 0, 0, 3, 0, 4, 4, 4, 2, 1,
- 2, 2, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 6, 4, 4, 6, 4, 4, 6, 6,
- 6, 4, 4, 6, 4, 6, 4, 6, 4, 4,
- 2, 6, 4, 4, 4, 6, 4, 4, 4, 4,
- 4, 4, 4, 4, 2, 2, 4, 3, 3, 5,
- 4, 4, 6, 4, 4, 6, 6, 6, 8, 4,
- 4, 3, 2, 4, 4, 6, 8, 4, 6, 4,
- 4, 6, 6, 8, 8, 8, 8, 4, 4, 4,
- 6, 4, 6, 4, 4, 2, 2, 3, 3, 3,
- 3, 2, 3, 3, 4, 4, 2, 5, 7, 4,
- 6, 6, 6, 6, 2, 4, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 4, 1, 1, 1, 4,
- 1, 4, 1, 3, 1, 2, 3, 4, 2, 2,
- 2, 3, 2, 1, 4, 3, 5, 1, 4, 4,
- 5, 7, 0, 1, 0, 2, 2, 1, 1, 1,
- 1, 1, 2, 2, 2, 3, 1, 3, 3, 3,
- 3, 3, 4, 4, 3, 3, 3,
-}
-var yyChk = [...]int{
-
- -1000, -26, -27, -28, 72, 74, 59, 77, -30, 2,
- 14, 15, 23, 68, 19, 17, 18, 16, 69, 21,
- 22, 28, 24, 26, 27, 25, 20, 64, 65, 60,
- 61, 63, 62, 30, 33, 57, 58, 31, 34, 36,
- 35, 37, 75, 76, 76, 77, 77, 77, -7, -6,
- -8, -11, -23, -16, -17, -10, -20, -21, -12, -5,
- -9, -1, 79, 46, 49, 50, 81, 43, 48, 54,
- 53, -24, -13, -14, 45, 47, 72, 38, 74, 10,
- 9, 82, 56, 51, 52, -7, -6, -8, -6, -8,
- -18, -11, 81, -16, 81, -7, -16, -7, -7, -16,
- -7, -7, -22, -1, 79, -19, -6, 79, 78, -10,
- -1, 72, 48, -7, -16, -31, 78, -11, -11, -11,
- -11, -7, -16, -7, -6, -7, -8, 79, -7, -8,
- -7, -8, -31, -7, -11, 78, -16, -16, -17, -16,
- -16, -31, -9, -1, -9, -9, -31, -29, -2, -1,
- -2, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 79, -5, -2, 79, -6, 71, -1, 79,
- 79, 79, -4, 7, 9, 10, -1, -1, -1, 78,
- 78, 78, 78, 78, 78, 78, 70, 10, 78, -1,
- 78, 78, 78, 78, 78, 78, 78, 78, -12, -19,
- -6, 79, -1, 78, 78, 79, -4, 78, -31, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, -31, -31, -7, -11, -31, -31, 78,
- 78, 78, 79, 78, 12, -28, 77, 9, 10, 11,
- 12, 13, 7, 8, 6, 5, 4, 77, -7, -6,
- -8, -16, -10, -21, -12, -20, -7, -7, -6, -8,
- -23, -16, -11, -10, -7, -7, -10, -20, -10, -7,
- -7, -7, -5, -3, 40, 39, 41, 80, 9, 80,
- -1, -1, -1, -1, 79, 8, -1, -1, -7, -6,
- -8, -7, -7, -11, -11, -11, -11, -6, -8, 70,
- -1, -5, -16, -7, -5, -7, -5, -7, -5, -7,
- -5, -7, -7, -5, -22, -1, 80, -12, -19, -6,
- 79, -19, -6, 79, -1, 42, -5, -5, -11, -11,
- -11, -11, -7, -16, -7, -7, -7, -6, -7, -16,
- -8, -16, -7, -8, -16, -6, 81, -1, -16, -1,
- -1, -2, -2, -2, -2, -2, 7, 8, -2, -2,
- -2, 78, 78, 80, 80, -5, 80, 80, 80, 80,
- -3, -4, 78, 78, 78, 78, 78, 78, 78, 78,
- 80, -12, -12, 78, 80, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, -15, 38, 10, 78, 78, 78,
- -2, -2, -21, 48, -23, 80, 80, 79, -7, -7,
- -7, -7, -7, -7, -7, -22, 80, 80, -19, -6,
- 79, -11, -11, -10, -10, -10, -16, -25, -1, -16,
- -25, -7, -8, 10, 38, 81, -16, -16, -17, -18,
- 81, 40, -12, 78, 78, 78, 78, 78, 78, 38,
- 10, -15, 10, 80, 80, -11, -7, -7, -1, -7,
- -7, 38,
-}
-var yyDef = [...]int{
-
- 1, -2, 0, 3, 0, 0, 0, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 162, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 162, 0, 0, 0, 162, 0, 0,
- 0, 162, 4, 0, 0, 8, 10, 11, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 127,
- 157, 0, 0, 138, 0, 137, 0, 140, 131, 134,
- 0, 136, 128, 129, 153, 0, 164, 170, 171, 0,
- 0, 0, 133, 130, 132, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 50, 0, 0, 142, 0, 64, 65, 0, 0, 0,
- 0, 164, 0, 162, 0, 82, 163, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 105, 106, 162, 162, 163, 111, 162, 162, 0,
- 0, 116, 0, 0, 0, 0, 124, 0, 0, 176,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 148, 149, 152, 0,
- 0, 0, 0, 0, 0, 0, 172, 173, 174, 0,
- 0, 0, 0, 0, 0, 0, 150, 0, 0, 152,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
- 68, 0, 0, 0, 0, 0, 126, 163, 81, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 107, 108, 109, 110, 112, 113, 0,
- 0, 0, 0, 0, 0, 5, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 12, 24,
- 25, 0, 36, 37, 61, 63, 13, 14, 28, 29,
- 31, 0, 30, 33, 52, 53, 56, 62, 57, 59,
- 58, 60, 0, 0, 167, 168, 169, 155, 0, 175,
- 0, 0, 0, 0, 0, 164, 165, 166, 15, 26,
- 27, 16, 17, 18, 19, 20, 21, 22, 23, 151,
- 34, 127, 0, 41, 127, 42, 127, 44, 127, 46,
- 127, 48, 49, 0, 54, 142, 66, 0, 70, 71,
- 0, 73, 74, 0, 0, 0, 79, 80, 83, 84,
- 0, 87, 89, 90, 0, 0, 97, 98, 99, 0,
- 101, 0, 103, 104, 114, 115, 0, 0, 119, 0,
- 0, 177, 178, 179, 180, 181, 0, 0, 184, 185,
- 186, 0, 0, 158, 159, 0, 139, 141, 135, 154,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 69, 0, 0, 0, 125, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 117, 144, 0, 0, 0, 0,
- 182, 183, 35, 131, 32, 156, 160, 0, 38, 40,
- 39, 43, 45, 47, 51, 55, 72, 75, 76, 77,
- 0, 85, 0, 88, 91, 92, 0, 0, 0, 0,
- 0, 100, 102, 0, 145, 0, 120, 121, 122, 123,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 146,
- 0, 118, 0, 161, 78, 86, 93, 94, 143, 95,
- 96, 147,
-}
-var yyTok1 = [...]int{
-
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 81, 13, 6, 3,
- 79, 80, 11, 9, 78, 10, 3, 12, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 75, 77,
- 7, 76, 8, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 5, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 4, 3, 82,
-}
-var yyTok2 = [...]int{
-
- 2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74,
-}
-var yyTok3 = [...]int{
- 0,
-}
-
-var yyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- yyDebug = 0
- yyErrorVerbose = false
-)
-
-type yyLexer interface {
- Lex(lval *yySymType) int
- Error(s string)
-}
-
-type yyParser interface {
- Parse(yyLexer) int
- Lookahead() int
-}
-
-type yyParserImpl struct {
- lookahead func() int
-}
-
-func (p *yyParserImpl) Lookahead() int {
- return p.lookahead()
-}
-
-func yyNewParser() yyParser {
- p := &yyParserImpl{
- lookahead: func() int { return -1 },
- }
- return p
-}
-
-const yyFlag = -1000
-
-func yyTokname(c int) string {
- if c >= 1 && c-1 < len(yyToknames) {
- if yyToknames[c-1] != "" {
- return yyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func yyStatname(s int) string {
- if s >= 0 && s < len(yyStatenames) {
- if yyStatenames[s] != "" {
- return yyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func yyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !yyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range yyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + yyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := yyPact[state]
- for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
- if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if yyDef[state] == -2 {
- i := 0
- for yyExca[i] != -1 || yyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; yyExca[i] >= 0; i += 2 {
- tok := yyExca[i]
- if tok < TOKSTART || yyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if yyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += yyTokname(tok)
- }
- return res
-}
-
-func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = yyTok1[0]
- goto out
- }
- if char < len(yyTok1) {
- token = yyTok1[char]
- goto out
- }
- if char >= yyPrivate {
- if char < yyPrivate+len(yyTok2) {
- token = yyTok2[char-yyPrivate]
- goto out
- }
- }
- for i := 0; i < len(yyTok3); i += 2 {
- token = yyTok3[i+0]
- if token == char {
- token = yyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = yyTok2[1] /* unknown char */
- }
- if yyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
- }
- return char, token
-}
-
-func yyParse(yylex yyLexer) int {
- return yyNewParser().Parse(yylex)
-}
-
-func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
- var yyn int
- var yylval yySymType
- var yyVAL yySymType
- var yyDollar []yySymType
- yyS := make([]yySymType, yyMaxDepth)
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- yystate := 0
- yychar := -1
- yytoken := -1 // yychar translated into internal numbering
- yyrcvr.lookahead = func() int { return yychar }
- defer func() {
- // Make sure we report no lookahead when not parsing.
- yystate = -1
- yychar = -1
- yytoken = -1
- }()
- yyp := -1
- goto yystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-yystack:
- /* put a state and value onto the stack */
- if yyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
- }
-
- yyp++
- if yyp >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyS[yyp] = yyVAL
- yyS[yyp].yys = yystate
-
-yynewstate:
- yyn = yyPact[yystate]
- if yyn <= yyFlag {
- goto yydefault /* simple state */
- }
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
- yyn += yytoken
- if yyn < 0 || yyn >= yyLast {
- goto yydefault
- }
- yyn = yyAct[yyn]
- if yyChk[yyn] == yytoken { /* valid shift */
- yychar = -1
- yytoken = -1
- yyVAL = yylval
- yystate = yyn
- if Errflag > 0 {
- Errflag--
- }
- goto yystack
- }
-
-yydefault:
- /* default state action */
- yyn = yyDef[yystate]
- if yyn == -2 {
- if yychar < 0 {
- yychar, yytoken = yylex1(yylex, &yylval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- yyn = yyExca[xi+0]
- if yyn < 0 || yyn == yytoken {
- break
- }
- }
- yyn = yyExca[xi+1]
- if yyn < 0 {
- goto ret0
- }
- }
- if yyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- yylex.Error(yyErrorMessage(yystate, yytoken))
- Nerrs++
- if yyDebug >= 1 {
- __yyfmt__.Printf("%s", yyStatname(yystate))
- __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for yyp >= 0 {
- yyn = yyPact[yyS[yyp].yys] + yyErrCode
- if yyn >= 0 && yyn < yyLast {
- yystate = yyAct[yyn] /* simulate a shift of "error" */
- if yyChk[yystate] == yyErrCode {
- goto yystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
- }
- yyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if yyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
- }
- if yytoken == yyEofCode {
- goto ret1
- }
- yychar = -1
- yytoken = -1
- goto yynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production yyn */
- if yyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
- }
-
- yynt := yyn
- yypt := yyp
- _ = yypt // guard against "declared and not used"
-
- yyp -= yyR2[yyn]
- // yyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if yyp+1 >= len(yyS) {
- nyys := make([]yySymType, len(yyS)*2)
- copy(nyys, yyS)
- yyS = nyys
- }
- yyVAL = yyS[yyp+1]
-
- /* consult goto table to find next state */
- yyn = yyR1[yyn]
- yyg := yyPgo[yyn]
- yyj := yyg + yyS[yyp].yys + 1
-
- if yyj >= yyLast {
- yystate = yyAct[yyg]
- } else {
- yystate = yyAct[yyj]
- if yyChk[yystate] != -yyn {
- yystate = yyAct[yyg]
- }
- }
- // dummy call; replaced with literal code
- switch yynt {
-
- case 2:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:72
- {
- stmtline = asm.Lineno
- }
- case 4:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:79
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- if yyDollar[1].sym.Type == LLAB && yyDollar[1].sym.Value != int64(asm.PC) {
- yyerror("redeclaration of %s", yyDollar[1].sym.Labelname)
- }
- yyDollar[1].sym.Type = LLAB
- yyDollar[1].sym.Value = int64(asm.PC)
- }
- case 6:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:89
- {
- yyDollar[1].sym.Type = LVAR
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 7:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:94
- {
- if yyDollar[1].sym.Value != yyDollar[3].lval {
- yyerror("redeclaration of %s", yyDollar[1].sym.Name)
- }
- yyDollar[1].sym.Value = yyDollar[3].lval
- }
- case 8:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:101
- {
- nosched = int(yyDollar[1].lval)
- }
- case 12:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:113
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 13:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:117
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 14:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:121
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 15:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:125
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 16:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:129
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 17:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:133
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 18:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:140
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 19:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:144
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 20:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:148
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 21:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:152
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 22:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:156
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 23:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:160
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 24:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:167
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 25:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:171
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 26:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:175
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 27:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:179
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 28:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:186
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 29:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:190
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 30:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:197
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 31:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:201
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 32:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:205
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr, &yyDollar[6].addr)
- }
- case 33:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:209
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 34:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:213
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &nullgen)
- }
- case 35:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:220
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr, &yyDollar[6].addr)
- }
- case 36:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:224
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 37:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:228
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 38:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:238
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 39:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:242
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 40:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:246
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr, &yyDollar[6].addr)
- }
- case 41:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:250
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 42:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:254
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 43:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:258
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 44:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:262
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 45:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:266
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 46:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:270
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 47:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:274
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 48:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:278
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 49:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:282
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 50:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:286
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[2].addr)
- }
- case 51:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:293
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 52:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:300
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 53:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:304
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 54:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:311
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[4].addr)
- }
- case 55:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:315
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 56:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:323
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 57:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:327
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 58:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:331
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 59:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:335
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 60:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:339
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 61:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:343
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 62:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:347
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 63:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:351
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 64:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:360
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[2].addr)
- }
- case 65:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:364
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[2].addr)
- }
- case 66:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:368
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[3].addr)
- }
- case 67:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:372
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[3].addr)
- }
- case 68:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:376
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[3].addr)
- }
- case 69:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:380
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[4].addr)
- }
- case 70:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:384
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 71:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:388
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 72:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:392
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[5].addr)
- }
- case 73:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:396
- {
- outcode(int(yyDollar[1].lval), &nullgen, int(yyDollar[2].lval), &yyDollar[4].addr)
- }
- case 74:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:400
- {
- outcode(int(yyDollar[1].lval), &nullgen, int(yyDollar[2].lval), &yyDollar[4].addr)
- }
- case 75:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:404
- {
- outcode(int(yyDollar[1].lval), &nullgen, int(yyDollar[2].lval), &yyDollar[5].addr)
- }
- case 76:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:408
- {
- var g obj.Addr
- g = nullgen
- g.Type = obj.TYPE_CONST
- g.Offset = yyDollar[2].lval
- outcode(int(yyDollar[1].lval), &g, int(REG_R0+yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 77:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:416
- {
- var g obj.Addr
- g = nullgen
- g.Type = obj.TYPE_CONST
- g.Offset = yyDollar[2].lval
- outcode(int(yyDollar[1].lval), &g, int(REG_R0+yyDollar[4].lval), &yyDollar[6].addr)
- }
- case 78:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:424
- {
- var g obj.Addr
- g = nullgen
- g.Type = obj.TYPE_CONST
- g.Offset = yyDollar[2].lval
- outcode(int(yyDollar[1].lval), &g, int(REG_R0+yyDollar[4].lval), &yyDollar[7].addr)
- }
- case 79:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:435
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &nullgen)
- }
- case 80:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:439
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &nullgen)
- }
- case 81:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:443
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 82:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:447
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &nullgen)
- }
- case 83:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:454
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 84:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:458
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 85:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:462
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr)
- }
- case 86:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:466
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr, &yyDollar[8].addr)
- }
- case 87:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:470
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 88:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:474
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[6].addr.Reg), &yyDollar[4].addr)
- }
- case 89:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:481
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 90:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:485
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 91:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:489
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[6].addr.Reg), &yyDollar[4].addr)
- }
- case 92:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:493
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[6].addr.Reg), &yyDollar[4].addr)
- }
- case 93:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:500
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr, &yyDollar[8].addr)
- }
- case 94:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:504
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr, &yyDollar[8].addr)
- }
- case 95:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:508
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr, &yyDollar[8].addr)
- }
- case 96:
- yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:512
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].addr.Reg), &yyDollar[6].addr, &yyDollar[8].addr)
- }
- case 97:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:519
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 98:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:523
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 99:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:531
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 100:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:535
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr, &yyDollar[6].addr)
- }
- case 101:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:539
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 102:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:543
- {
- outgcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr, &yyDollar[6].addr)
- }
- case 103:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:547
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 104:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:551
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 105:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:555
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 106:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:562
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &nullgen)
- }
- case 107:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:566
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 108:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:570
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 109:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:574
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[3].addr)
- }
- case 110:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:578
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &yyDollar[3].addr)
- }
- case 111:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:582
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 112:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:589
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 113:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:593
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &nullgen)
- }
- case 114:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:600
- {
- if yyDollar[2].addr.Type != obj.TYPE_CONST || yyDollar[4].addr.Type != obj.TYPE_CONST {
- yyerror("arguments to PCDATA must be integer constants")
- }
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 115:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:610
- {
- if yyDollar[2].addr.Type != obj.TYPE_CONST {
- yyerror("index for FUNCDATA must be integer constant")
- }
- if yyDollar[4].addr.Type != obj.TYPE_MEM || (yyDollar[4].addr.Name != obj.NAME_EXTERN && yyDollar[4].addr.Name != obj.NAME_STATIC) {
- yyerror("value for FUNCDATA must be symbol reference")
- }
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- }
- case 116:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:623
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &nullgen)
- }
- case 117:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:630
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[5].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 118:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:638
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[7].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 119:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:651
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- }
- }
- case 120:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:659
- {
- asm.Settext(yyDollar[2].addr.Sym)
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 121:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:673
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 122:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:682
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 123:
- yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:691
- {
- outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
- if asm.Pass > 1 {
- lastpc.From3 = new(obj.Addr)
- lastpc.From3.Type = obj.TYPE_CONST
- lastpc.From3.Offset = yyDollar[4].lval
- }
- }
- case 124:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:703
- {
- outcode(int(yyDollar[1].lval), &nullgen, 0, &nullgen)
- }
- case 125:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:709
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].lval + int64(asm.PC)
- }
- case 126:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:715
- {
- yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
- yyVAL.addr = nullgen
- if asm.Pass == 2 && yyDollar[1].sym.Type != LLAB {
- yyerror("undefined label: %s", yyDollar[1].sym.Labelname)
- }
- yyVAL.addr.Type = obj.TYPE_BRANCH
- yyVAL.addr.Offset = yyDollar[1].sym.Value + yyDollar[2].lval
- }
- case 127:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:727
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 130:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:739
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 131:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:747
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval) /* whole register */
- }
- case 132:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:754
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 133:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:762
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 134:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:770
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 135:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:776
- {
- if yyDollar[3].lval < 0 || yyDollar[3].lval >= 1024 {
- yyerror("SPR/DCR out of range")
- }
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval + yyDollar[3].lval)
- }
- case 137:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:788
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 138:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:796
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 139:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:802
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(REG_F0 + yyDollar[3].lval)
- }
- case 140:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:810
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 141:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:816
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(REG_CR0 + yyDollar[3].lval)
- }
- case 142:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:824
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_REG
- yyVAL.addr.Reg = int16(yyDollar[1].lval)
- }
- case 143:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:832
- {
- var mb, me int
- var v uint32
-
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- mb = int(yyDollar[1].lval)
- me = int(yyDollar[3].lval)
- if mb < 0 || mb > 31 || me < 0 || me > 31 {
- yyerror("illegal mask start/end value(s)")
- mb = 0
- me = 0
- }
- if mb <= me {
- v = (^uint32(0) >> uint(mb)) & (^uint32(0) << uint(31-me))
- } else {
- v = (^uint32(0) >> uint(me+1)) & (^uint32(0) << uint(31-(mb-1)))
- }
- yyVAL.addr.Offset = int64(v)
- }
- case 144:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:855
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 145:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:862
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -int64(yyDollar[2].lval)
- yyVAL.addr.Val = int32(obj.ArgsSizeUnknown)
- }
- case 146:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:869
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = int64(yyDollar[1].lval)
- yyVAL.addr.Val = int32(yyDollar[3].lval)
- }
- case 147:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:876
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_TEXTSIZE
- yyVAL.addr.Offset = -int64(yyDollar[2].lval)
- yyVAL.addr.Val = int32(yyDollar[4].lval)
- }
- case 148:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:885
- {
- yyVAL.addr = yyDollar[2].addr
- yyVAL.addr.Type = obj.TYPE_ADDR
- }
- case 149:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:890
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_SCONST
- yyVAL.addr.Val = yyDollar[2].sval
- }
- case 150:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:898
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = yyDollar[2].dval
- }
- case 151:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:904
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_FCONST
- yyVAL.addr.Val = -yyDollar[3].dval
- }
- case 152:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:911
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_CONST
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 154:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:920
- {
- if yyVAL.lval < 0 || yyVAL.lval >= NREG {
- print("register value out of range\n")
- }
- yyVAL.lval = REG_R0 + yyDollar[3].lval
- }
- case 155:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:929
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Offset = 0
- }
- case 156:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:936
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[2].lval)
- yyVAL.addr.Scale = int16(yyDollar[4].lval)
- yyVAL.addr.Offset = 0
- }
- case 158:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:947
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Reg = int16(yyDollar[3].lval)
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 159:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:956
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[3].lval)
- yyVAL.addr.Sym = nil
- yyVAL.addr.Offset = yyDollar[1].lval
- }
- case 160:
- yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:964
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = int8(yyDollar[4].lval)
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 0)
- yyVAL.addr.Offset = yyDollar[2].lval
- }
- case 161:
- yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:972
- {
- yyVAL.addr = nullgen
- yyVAL.addr.Type = obj.TYPE_MEM
- yyVAL.addr.Name = obj.NAME_STATIC
- yyVAL.addr.Sym = obj.Linklookup(asm.Ctxt, yyDollar[1].sym.Name, 1)
- yyVAL.addr.Offset = yyDollar[4].lval
- }
- case 164:
- yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:984
- {
- yyVAL.lval = 0
- }
- case 165:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:988
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 166:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:992
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 171:
- yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:1004
- {
- yyVAL.lval = yyDollar[1].sym.Value
- }
- case 172:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:1008
- {
- yyVAL.lval = -yyDollar[2].lval
- }
- case 173:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:1012
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 174:
- yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:1016
- {
- yyVAL.lval = ^yyDollar[2].lval
- }
- case 175:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1020
- {
- yyVAL.lval = yyDollar[2].lval
- }
- case 177:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1027
- {
- yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
- }
- case 178:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1031
- {
- yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
- }
- case 179:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1035
- {
- yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
- }
- case 180:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1039
- {
- yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
- }
- case 181:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1043
- {
- yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
- }
- case 182:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:1047
- {
- yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
- }
- case 183:
- yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:1051
- {
- yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
- }
- case 184:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1055
- {
- yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
- }
- case 185:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1059
- {
- yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
- }
- case 186:
- yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1063
- {
- yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
- }
- }
- goto yystack /* stack new state and value */
-}