From ba0c142d32eecde6165db764ba8dc925b8d93c4d Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Wed, 29 Jul 2015 13:06:28 +1000 Subject: [PATCH] cmd: delete old[5689]a These are the old assemblers written in C, and now they are not needed. Fixes #10510. Change-Id: Id9337ffc8eccfd93c84b2e23f427fb1a576b543d Reviewed-on: https://go-review.googlesource.com/12784 Reviewed-by: Russ Cox Reviewed-by: Brad Fitzpatrick --- src/cmd/dist/buildtool.go | 5 - src/cmd/go/build.go | 26 +- src/cmd/go/pkg.go | 4 - src/cmd/old5a/a.y | 804 --------------- src/cmd/old5a/lex.go | 373 ------- src/cmd/old5a/y.go | 1547 ---------------------------- src/cmd/old6a/a.y | 730 ------------- src/cmd/old6a/lex.go | 983 ------------------ src/cmd/old6a/y.go | 1530 ---------------------------- src/cmd/old8a/a.y | 722 ------------- src/cmd/old8a/lex.go | 771 -------------- src/cmd/old8a/y.go | 1509 --------------------------- src/cmd/old9a/a.y | 1066 ------------------- src/cmd/old9a/lex.go | 560 ---------- src/cmd/old9a/y.go | 2028 ------------------------------------- 15 files changed, 1 insertion(+), 12657 deletions(-) delete mode 100644 src/cmd/old5a/a.y delete mode 100644 src/cmd/old5a/lex.go delete mode 100644 src/cmd/old5a/y.go delete mode 100644 src/cmd/old6a/a.y delete mode 100644 src/cmd/old6a/lex.go delete mode 100644 src/cmd/old6a/y.go delete mode 100644 src/cmd/old8a/a.y delete mode 100644 src/cmd/old8a/lex.go delete mode 100644 src/cmd/old8a/y.go delete mode 100644 src/cmd/old9a/a.y delete mode 100644 src/cmd/old9a/lex.go delete mode 100644 src/cmd/old9a/y.go diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go index be54ac46de..8a55b5da70 100644 --- a/src/cmd/dist/buildtool.go +++ b/src/cmd/dist/buildtool.go @@ -36,7 +36,6 @@ var bootstrapDirs = []string{ "compile/internal/gc", "compile/internal/ppc64", "compile/internal/x86", - "internal/asm", "internal/gcprog", "internal/obj", "internal/obj/arm", @@ -50,10 +49,6 @@ var bootstrapDirs = []string{ "link/internal/ld", "link/internal/ppc64", "link/internal/x86", - "old5a", - "old6a", - "old8a", - "old9a", } func bootstrapBuildTools() { diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 54fbe35105..a669da9997 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -2180,11 +2180,6 @@ func (gcToolchain) gc(b *builder, p *Package, archive, obj string, asmhdr bool, 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") @@ -2193,31 +2188,12 @@ func (gcToolchain) asm(b *builder, p *Package, obj, ofile, sfile string) error { 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) diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go index d04b52a675..98c9594d2e 100644 --- a/src/cmd/go/pkg.go +++ b/src/cmd/go/pkg.go @@ -646,10 +646,6 @@ var goTools = map[string]targetDir{ "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, diff --git a/src/cmd/old5a/a.y b/src/cmd/old5a/a.y deleted file mode 100644 index c2248750ac..0000000000 --- a/src/cmd/old5a/a.y +++ /dev/null @@ -1,804 +0,0 @@ -// 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 LTYPE1 LTYPE2 LTYPE3 LTYPE4 LTYPE5 -%token LTYPE6 LTYPE7 LTYPE8 LTYPE9 LTYPEA -%token LTYPEB LTYPEC LTYPED LTYPEE -%token LTYPEG LTYPEH LTYPEI LTYPEJ LTYPEK -%token LTYPEL LTYPEM LTYPEN LTYPEBX LTYPEPLD -%token LCONST LSP LSB LFP LPC -%token LTYPEX LTYPEPC LTYPEF LR LREG LF LFREG LC LCREG LPSR LFCR -%token LCOND LS LAT LGLOBL -%token LFCONST -%token LSCONST -%token LNAME LLAB LVAR -%type con expr oexpr pointer offset sreg spreg creg -%type rcon cond reglist -%type gen rel reg regreg freg shift fcon frcon textsize -%type 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<' '>' 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; - } diff --git a/src/cmd/old5a/lex.go b/src/cmd/old5a/lex.go deleted file mode 100644 index 1f538ea65f..0000000000 --- a/src/cmd/old5a/lex.go +++ /dev/null @@ -1,373 +0,0 @@ -// 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++ - } -} diff --git a/src/cmd/old5a/y.go b/src/cmd/old5a/y.go deleted file mode 100644 index 218ccf1562..0000000000 --- a/src/cmd/old5a/y.go +++ /dev/null @@ -1,1547 +0,0 @@ -//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 */ -} diff --git a/src/cmd/old6a/a.y b/src/cmd/old6a/a.y deleted file mode 100644 index 93944f93ab..0000000000 --- a/src/cmd/old6a/a.y +++ /dev/null @@ -1,730 +0,0 @@ -// 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 LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 -%token LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPEG LTYPEPC -%token LTYPES LTYPEM LTYPEI LTYPEXC LTYPEX LTYPERT LTYPEF -%token LCONST LFP LPC LSB -%token LBREG LLREG LSREG LFREG LMREG LXREG -%token LFCONST -%token LSCONST LSP -%token LNAME LLAB LVAR -%type con expr pointer offset -%type mem imm textsize reg nam rel rem rim rom omem nmem -%type nonnon nonrel nonrem rimnon rimrem remrim -%type spec3 spec4 spec5 spec6 spec7 spec8 spec9 -%type 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; - } diff --git a/src/cmd/old6a/lex.go b/src/cmd/old6a/lex.go deleted file mode 100644 index 94312ae9ed..0000000000 --- a/src/cmd/old6a/lex.go +++ /dev/null @@ -1,983 +0,0 @@ -// 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++ - } -} diff --git a/src/cmd/old6a/y.go b/src/cmd/old6a/y.go deleted file mode 100644 index 9a3cf6a333..0000000000 --- a/src/cmd/old6a/y.go +++ /dev/null @@ -1,1530 +0,0 @@ -//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 */ -} diff --git a/src/cmd/old8a/a.y b/src/cmd/old8a/a.y deleted file mode 100644 index fae3b8100a..0000000000 --- a/src/cmd/old8a/a.y +++ /dev/null @@ -1,722 +0,0 @@ -// 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 LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 -%token LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG LTYPEXC -%token LTYPEX LTYPEPC LTYPEF LCONST LFP LPC LSB -%token LBREG LLREG LSREG LFREG LXREG -%token LFCONST -%token LSCONST LSP -%token LNAME LLAB LVAR -%type con expr pointer offset -%type mem imm reg nam rel rem rim rom omem nmem textsize -%type nonnon nonrel nonrem rimnon rimrem remrim -%type 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; - } diff --git a/src/cmd/old8a/lex.go b/src/cmd/old8a/lex.go deleted file mode 100644 index 73b633b54a..0000000000 --- a/src/cmd/old8a/lex.go +++ /dev/null @@ -1,771 +0,0 @@ -// 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++ - } -} diff --git a/src/cmd/old8a/y.go b/src/cmd/old8a/y.go deleted file mode 100644 index af47224d86..0000000000 --- a/src/cmd/old8a/y.go +++ /dev/null @@ -1,1509 +0,0 @@ -//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 */ -} diff --git a/src/cmd/old9a/a.y b/src/cmd/old9a/a.y deleted file mode 100644 index f7e8925fb6..0000000000 --- a/src/cmd/old9a/a.y +++ /dev/null @@ -1,1066 +0,0 @@ -// 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 LMOVW LMOVB LABS LLOGW LSHW LADDW LCMP LCROP -%token LBRA LFMOV LFCONV LFCMP LFADD LFMA LTRAP LXORW -%token LNOP LEND LRETT LWORD LTEXT LDATA LGLOBL LRETRN -%token LCONST LSP LSB LFP LPC LCREG LFLUSH -%token LREG LFREG LR LCR LF LFPSCR -%token LLR LCTR LSPR LSPREG LSEG LMSR -%token LPCDAT LFUNCDAT LSCHED LXLD LXST LXOP LXMV -%token LRLWM LMOVMW LMOVEM LMOVFL LMTFSB LMA -%token LFCONST -%token LSCONST -%token LNAME LLAB LVAR -%type con expr pointer offset sreg -%type addr rreg regaddr name creg freg xlreg lr ctr textsize -%type 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(me+1)) & (^uint32(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; - } diff --git a/src/cmd/old9a/lex.go b/src/cmd/old9a/lex.go deleted file mode 100644 index f04c8dfdd6..0000000000 --- a/src/cmd/old9a/lex.go +++ /dev/null @@ -1,560 +0,0 @@ -// 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++ - } -} diff --git a/src/cmd/old9a/y.go b/src/cmd/old9a/y.go deleted file mode 100644 index c1126bfb2e..0000000000 --- a/src/cmd/old9a/y.go +++ /dev/null @@ -1,2028 +0,0 @@ -//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 */ -} -- 2.48.1