diff options
author | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:22:53 +0200 |
---|---|---|
committer | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:22:53 +0200 |
commit | 8a39ee361feb9bf46d728ff1ba4f07ca1d9610b1 (patch) | |
tree | 4449f2036cccf162e8417cc5841a35815b3e7ac5 /src/cmd/5a | |
parent | c8bf49ef8a92e2337b69c14b9b88396efe498600 (diff) | |
download | golang-upstream/1.3.tar.gz |
Imported Upstream version 1.3upstream/1.3
Diffstat (limited to 'src/cmd/5a')
-rw-r--r-- | src/cmd/5a/a.h | 48 | ||||
-rw-r--r-- | src/cmd/5a/a.y | 30 | ||||
-rw-r--r-- | src/cmd/5a/lex.c | 377 | ||||
-rw-r--r-- | src/cmd/5a/y.tab.c | 981 | ||||
-rw-r--r-- | src/cmd/5a/y.tab.h | 38 |
5 files changed, 570 insertions, 904 deletions
diff --git a/src/cmd/5a/a.h b/src/cmd/5a/a.h index 8b39d610f..bb60fe7de 100644 --- a/src/cmd/5a/a.h +++ b/src/cmd/5a/a.h @@ -29,6 +29,7 @@ // THE SOFTWARE. #include <bio.h> +#include <link.h> #include "../5l/5.out.h" #ifndef EXTERN @@ -43,9 +44,7 @@ #define ungetc ccungetc typedef struct Sym Sym; -typedef struct Gen Gen; typedef struct Io Io; -typedef struct Hist Hist; #define MAXALIGN 7 #define FPCHIP 1 @@ -88,33 +87,6 @@ struct Io }; #define I ((Io*)0) -EXTERN struct -{ - Sym* sym; - short type; -} h[NSYM]; - -struct Gen -{ - Sym* sym; - int32 offset; - int32 offset2; - short type; - short reg; - short name; - double dval; - char sval[8]; -}; - -struct Hist -{ - Hist* link; - char* name; - int32 line; - int32 offset; -}; -#define H ((Hist*)0) - enum { CLAST, @@ -125,13 +97,11 @@ enum Always = 14, }; -EXTERN char debug[256]; +EXTERN int debug[256]; EXTERN Sym* hash[NHASH]; EXTERN char** Dlist; EXTERN int nDlist; -EXTERN Hist* ehist; EXTERN int newflag; -EXTERN Hist* hist; EXTERN char* hunk; EXTERN char** include; EXTERN Io* iofree; @@ -142,10 +112,9 @@ EXTERN int nerrors; EXTERN int32 nhunk; EXTERN int ninclude; EXTERN int32 nsymb; -EXTERN Gen nullgen; +EXTERN Addr nullgen; EXTERN char* outfile; EXTERN int pass; -EXTERN char* pathname; EXTERN int32 pc; EXTERN int peekc; EXTERN int32 stmtline; @@ -155,6 +124,8 @@ EXTERN int thechar; EXTERN char* thestring; EXTERN int32 thunk; EXTERN Biobuf obuf; +EXTERN Link* ctxt; +EXTERN Biobuf bstdout; void* alloc(int32); void* allocn(void*, int32, int32); @@ -174,11 +145,8 @@ int escchar(int); void cinit(void); void pinit(char*); void cclean(void); -int isreg(Gen*); -void outcode(int, int, Gen*, int, Gen*); -void zname(char*, int, int); -void zaddr(Gen*, int); -void ieeedtod(Ieee*, double); +int isreg(Addr*); +void outcode(int, int, Addr*, int, Addr*); int filbuf(void); Sym* getsym(void); void domacro(void); @@ -190,7 +158,6 @@ void maclin(void); void macprag(void); void macif(int); void macend(void); -void outhist(void); void dodefine(char*); void prfile(int32); void linehist(char*, int); @@ -199,3 +166,4 @@ void yyerror(char*, ...); int yyparse(void); void setinclude(char*); int assemble(char*); +void listinit(void); diff --git a/src/cmd/5a/a.y b/src/cmd/5a/a.y index c506ff9d5..56d0c563d 100644 --- a/src/cmd/5a/a.y +++ b/src/cmd/5a/a.y @@ -41,7 +41,7 @@ int32 lval; double dval; char sval[8]; - Gen gen; + Addr addr; } %left '|' %left '^' @@ -62,8 +62,8 @@ %token <sym> LNAME LLAB LVAR %type <lval> con expr oexpr pointer offset sreg spreg creg %type <lval> rcon cond reglist -%type <gen> gen rel reg regreg freg shift fcon frcon -%type <gen> imm ximm name oreg ireg nireg ioreg imsr +%type <addr> gen rel reg regreg freg shift fcon frcon +%type <addr> imm ximm name oreg ireg nireg ioreg imsr %% prog: | prog @@ -175,7 +175,7 @@ inst: */ | LTYPE8 cond ioreg ',' '[' reglist ']' { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; @@ -184,7 +184,7 @@ inst: } | LTYPE8 cond '[' reglist ']' ',' ioreg { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; @@ -279,7 +279,7 @@ inst: */ | LTYPEJ cond con ',' expr ',' spreg ',' creg ',' creg oexpr { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; @@ -294,7 +294,7 @@ inst: (($11 & 15) << 0) | /* Crm */ (($12 & 7) << 5) | /* coprocessor information */ (1<<4); /* must be set */ - outcode(AWORD, Always, &nullgen, NREG, &g); + outcode(AMRC, Always, &nullgen, NREG, &g); } /* * MULL r1,r2,(hi,lo) @@ -336,7 +336,7 @@ inst: { if($2.type != D_CONST) yyerror("index for FUNCDATA must be integer constant"); - if($4.type != D_EXTERN && $4.type != D_STATIC) + if($4.type != D_EXTERN && $4.type != D_STATIC && $4.type != D_OREG) yyerror("value for FUNCDATA must be symbol reference"); outcode($1, Always, &$2, NREG, &$4); } @@ -377,14 +377,12 @@ rel: if(pass == 2) yyerror("undefined label: %s", $1->name); $$.type = D_BRANCH; - $$.sym = $1; $$.offset = $2; } | LLAB offset { $$ = nullgen; $$.type = D_BRANCH; - $$.sym = $1; $$.offset = $1->value + $2; } @@ -408,7 +406,7 @@ ximm: '$' con { $$ = nullgen; $$.type = D_SCONST; - memcpy($$.sval, $2, sizeof($$.sval)); + memcpy($$.u.sval, $2, sizeof($$.u.sval)); } | fcon @@ -417,13 +415,13 @@ fcon: { $$ = nullgen; $$.type = D_FCONST; - $$.dval = $2; + $$.u.dval = $2; } | '$' '-' LFCONST { $$ = nullgen; $$.type = D_FCONST; - $$.dval = -$3; + $$.u.dval = -$3; } reglist: @@ -635,7 +633,7 @@ name: $$ = nullgen; $$.type = D_OREG; $$.name = $3; - $$.sym = S; + $$.sym = nil; $$.offset = $1; } | LNAME offset '(' pointer ')' @@ -643,7 +641,7 @@ name: $$ = nullgen; $$.type = D_OREG; $$.name = $4; - $$.sym = $1; + $$.sym = linklookup(ctxt, $1->name, 0); $$.offset = $2; } | LNAME '<' '>' offset '(' LSB ')' @@ -651,7 +649,7 @@ name: $$ = nullgen; $$.type = D_OREG; $$.name = D_STATIC; - $$.sym = $1; + $$.sym = linklookup(ctxt, $1->name, 1); $$.offset = $4; } diff --git a/src/cmd/5a/lex.c b/src/cmd/5a/lex.c index c1b54e50b..571fdf7f2 100644 --- a/src/cmd/5a/lex.c +++ b/src/cmd/5a/lex.c @@ -51,60 +51,76 @@ systemtype(int sys) #endif } +int +Lconv(Fmt *fp) +{ + return linklinefmt(ctxt, fp); +} + +void +dodef(char *p) +{ + if(nDlist%8 == 0) + Dlist = allocn(Dlist, nDlist*sizeof(char *), + 8*sizeof(char *)); + Dlist[nDlist++] = p; +} + +void +usage(void) +{ + print("usage: %ca [options] file.c...\n", thechar); + flagprint(1); + errorexit(); +} + void main(int argc, char *argv[]) { char *p; - int c; thechar = '5'; thestring = "arm"; + ctxt = linknew(&linkarm); + ctxt->diag = yyerror; + ctxt->bso = &bstdout; + Binit(&bstdout, 1, OWRITE); + listinit5(); + fmtinstall('L', Lconv); + + // Allow GOARCH=thestring or GOARCH=thestringsuffix, + // but not other values. + p = getgoarch(); + if(strncmp(p, thestring, strlen(thestring)) != 0) + sysfatal("cannot use %cc with GOARCH=%s", thechar, p); + ensuresymb(NSYMB); memset(debug, 0, sizeof(debug)); cinit(); outfile = 0; setinclude("."); - ARGBEGIN { - default: - c = ARGC(); - if(c >= 0 && c < sizeof(debug)) - debug[c] = 1; - break; - - case 'o': - outfile = ARGF(); - break; - - case 'D': - p = ARGF(); - if(p) { - if (nDlist%8 == 0) - Dlist = allocn(Dlist, nDlist*sizeof(char *), - 8*sizeof(char *)); - Dlist[nDlist++] = p; - } - break; - - case 'I': - p = ARGF(); - setinclude(p); - break; - case 't': - thechar = 't'; - thestring = "thumb"; - break; - } ARGEND - if(*argv == 0) { - print("usage: %ca [-options] file.s\n", thechar); - errorexit(); - } + + flagfn1("D", "name[=value]: add #define", dodef); + flagfn1("I", "dir: add dir to include path", setinclude); + flagcount("S", "print assembly and machine code", &debug['S']); + flagcount("m", "debug preprocessor macros", &debug['m']); + flagstr("o", "file: set output file", &outfile); + flagstr("trimpath", "prefix: remove prefix from recorded source file paths", &ctxt->trimpath); + + flagparse(&argc, &argv, usage); + ctxt->debugasm = debug['S']; + + if(argc < 1) + usage(); if(argc > 1){ print("can't assemble multiple files\n"); errorexit(); } + if(assemble(argv[0])) errorexit(); + Bflush(&bstdout); exits(0); } @@ -143,30 +159,22 @@ assemble(char *file) errorexit(); } Binit(&obuf, of, OWRITE); - - pass = 1; - pinit(file); - - Bprint(&obuf, "go object %s %s %s\n", getgoos(), thestring, getgoversion()); - - for(i=0; i<nDlist; i++) - dodefine(Dlist[i]); - yyparse(); - if(nerrors) { + Bprint(&obuf, "go object %s %s %s\n", getgoos(), getgoarch(), getgoversion()); + Bprint(&obuf, "!\n"); + + for(pass = 1; pass <= 2; pass++) { + pinit(file); + for(i=0; i<nDlist; i++) + dodefine(Dlist[i]); + yyparse(); cclean(); - return nerrors; + if(nerrors) + return nerrors; } - Bprint(&obuf, "\n!\n"); - - pass = 2; - outhist(); - pinit(file); - for(i=0; i<nDlist; i++) - dodefine(Dlist[i]); - yyparse(); - cclean(); - return nerrors; + writeobj(ctxt, &obuf); + Bflush(&obuf); + return 0; } struct @@ -426,15 +434,9 @@ cinit(void) Sym *s; int i; - nullgen.sym = S; - nullgen.offset = 0; nullgen.type = D_NONE; nullgen.name = D_NONE; nullgen.reg = NREG; - if(FPCHIP) - nullgen.dval = 0; - for(i=0; i<sizeof(nullgen.sval); i++) - nullgen.sval[i] = 0; nerrors = 0; iostack = I; @@ -448,13 +450,6 @@ cinit(void) s->type = itab[i].type; s->value = itab[i].value; } - - pathname = allocn(pathname, 0, 100); - if(getwd(pathname, 99) == 0) { - pathname = allocn(pathname, 100, 900); - if(getwd(pathname, 999) == 0) - strcpy(pathname, "/???"); - } } void @@ -466,7 +461,7 @@ syminit(Sym *s) } int -isreg(Gen *g) +isreg(Addr *g) { USED(g); @@ -476,81 +471,7 @@ isreg(Gen *g) void cclean(void) { - outcode(AEND, Always, &nullgen, NREG, &nullgen); - Bflush(&obuf); -} - -void -zname(char *n, int t, int s) -{ - - BPUTC(&obuf, ANAME); - BPUTC(&obuf, t); /* type */ - BPUTC(&obuf, s); /* sym */ - while(*n) { - BPUTC(&obuf, *n); - n++; - } - BPUTC(&obuf, 0); -} - -void -zaddr(Gen *a, int s) -{ - int32 l; - int i; - char *n; - Ieee e; - - BPUTC(&obuf, a->type); - BPUTC(&obuf, a->reg); - BPUTC(&obuf, s); - BPUTC(&obuf, a->name); - BPUTC(&obuf, 0); - switch(a->type) { - default: - print("unknown type %d\n", a->type); - exits("arg"); - - case D_NONE: - case D_REG: - case D_FREG: - case D_PSR: - case D_FPCR: - break; - - case D_REGREG: - case D_REGREG2: - BPUTC(&obuf, a->offset); - break; - - case D_CONST2: - l = a->offset2; - BPUTLE4(&obuf, l); - // fall through - case D_OREG: - case D_CONST: - case D_BRANCH: - case D_SHIFT: - l = a->offset; - BPUTLE4(&obuf, l); - break; - - case D_SCONST: - n = a->sval; - for(i=0; i<NSNAME; i++) { - BPUTC(&obuf, *n); - n++; - } - break; - - case D_FCONST: - ieeedtod(&e, a->dval); - BPUTLE4(&obuf, e.l); - BPUTLE4(&obuf, e.h); - break; - } } static int bcode[] = @@ -573,11 +494,13 @@ static int bcode[] = ANOP, }; +static Prog *lastpc; + void -outcode(int a, int scond, Gen *g1, int reg, Gen *g2) +outcode(int a, int scond, Addr *g1, int reg, Addr *g2) { - int sf, st, t; - Sym *s; + Prog *p; + Plist *pl; /* hack to make B.NE etc. work: turn it into the corresponding conditional */ if(a == AB){ @@ -587,154 +510,28 @@ outcode(int a, int scond, Gen *g1, int reg, Gen *g2) if(pass == 1) goto out; -jackpot: - sf = 0; - s = g1->sym; - while(s != S) { - sf = s->sym; - if(sf < 0 || sf >= NSYM) - sf = 0; - t = g1->name; - if(h[sf].type == t) - if(h[sf].sym == s) - break; - zname(s->name, t, sym); - s->sym = sym; - h[sym].sym = s; - h[sym].type = t; - sf = sym; - sym++; - if(sym >= NSYM) - sym = 1; - break; - } - st = 0; - s = g2->sym; - while(s != S) { - st = s->sym; - if(st < 0 || st >= NSYM) - st = 0; - t = g2->name; - if(h[st].type == t) - if(h[st].sym == s) - break; - zname(s->name, t, sym); - s->sym = sym; - h[sym].sym = s; - h[sym].type = t; - st = sym; - sym++; - if(sym >= NSYM) - sym = 1; - if(st == sf) - goto jackpot; - break; - } - BPUTC(&obuf, a); - BPUTC(&obuf, scond); - BPUTC(&obuf, reg); - BPUTLE4(&obuf, stmtline); - zaddr(g1, sf); - zaddr(g2, st); + + p = malloc(sizeof *p); + memset(p, 0, sizeof *p); + p->as = a; + p->lineno = stmtline; + p->scond = scond; + p->from = *g1; + p->reg = reg; + p->to = *g2; + p->pc = pc; + + if(lastpc == nil) { + pl = linknewplist(ctxt); + pl->firstpc = p; + } else + lastpc->link = p; + lastpc = p; out: if(a != AGLOBL && a != ADATA) pc++; } -void -outhist(void) -{ - Gen g; - Hist *h; - char *p, *q, *op, c; - int n; - char *tofree; - static int first = 1; - static char *goroot, *goroot_final; - - if(first) { - // Decide whether we need to rewrite paths from $GOROOT to $GOROOT_FINAL. - first = 0; - goroot = getenv("GOROOT"); - goroot_final = getenv("GOROOT_FINAL"); - if(goroot == nil) - goroot = ""; - if(goroot_final == nil) - goroot_final = goroot; - if(strcmp(goroot, goroot_final) == 0) { - goroot = nil; - goroot_final = nil; - } - } - - tofree = nil; - g = nullgen; - c = '/'; - for(h = hist; h != H; h = h->link) { - p = h->name; - if(p != nil && goroot != nil) { - n = strlen(goroot); - if(strncmp(p, goroot, strlen(goroot)) == 0 && p[n] == '/') { - tofree = smprint("%s%s", goroot_final, p+n); - p = tofree; - } - } - op = 0; - if(systemtype(Windows) && p && p[1] == ':'){ - c = p[2]; - } else if(p && p[0] != c && h->offset == 0 && pathname){ - if(systemtype(Windows) && pathname[1] == ':') { - op = p; - p = pathname; - c = p[2]; - } else if(pathname[0] == c){ - op = p; - p = pathname; - } - } - while(p) { - q = strchr(p, c); - if(q) { - n = q-p; - if(n == 0){ - n = 1; /* leading "/" */ - *p = '/'; /* don't emit "\" on windows */ - } - q++; - } else { - n = strlen(p); - q = 0; - } - if(n) { - BPUTC(&obuf, ANAME); - BPUTC(&obuf, D_FILE); /* type */ - BPUTC(&obuf, 1); /* sym */ - BPUTC(&obuf, '<'); - Bwrite(&obuf, p, n); - BPUTC(&obuf, 0); - } - p = q; - if(p == 0 && op) { - p = op; - op = 0; - } - } - g.offset = h->offset; - - BPUTC(&obuf, AHISTORY); - BPUTC(&obuf, Always); - BPUTC(&obuf, 0); - BPUTLE4(&obuf, h->line); - zaddr(&nullgen, 0); - zaddr(&g, 0); - - if(tofree) { - free(tofree); - tofree = nil; - } - } -} - #include "../cc/lexbody" #include "../cc/macbody" diff --git a/src/cmd/5a/y.tab.c b/src/cmd/5a/y.tab.c index dd102a09a..0bc8c34e1 100644 --- a/src/cmd/5a/y.tab.c +++ b/src/cmd/5a/y.tab.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.7.12-4996" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,14 +58,11 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Copy the first part of user declarations. */ - -/* Line 268 of yacc.c */ +/* Line 371 of yacc.c */ #line 31 "a.y" #include <u.h> @@ -74,14 +71,16 @@ #include "a.h" #include "../../pkg/runtime/funcdata.h" +/* Line 371 of yacc.c */ +#line 76 "y.tab.c" -/* Line 268 of yacc.c */ -#line 80 "y.tab.c" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -91,11 +90,17 @@ # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_YY_Y_TAB_H_INCLUDED +# define YY_YY_Y_TAB_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; #endif - /* Tokens. */ #ifndef YYTOKENTYPE @@ -205,36 +210,49 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 293 of yacc.c */ +/* Line 387 of yacc.c */ #line 39 "a.y" Sym *sym; int32 lval; double dval; char sval[8]; - Gen gen; + Addr addr; - -/* Line 293 of yacc.c */ -#line 226 "y.tab.c" +/* Line 387 of yacc.c */ +#line 228 "y.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif +extern YYSTYPE yylval; -/* Copy the second part of user declarations. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !YY_YY_Y_TAB_H_INCLUDED */ +/* Copy the second part of user declarations. */ -/* Line 343 of yacc.c */ -#line 238 "y.tab.c" +/* Line 390 of yacc.c */ +#line 256 "y.tab.c" #ifdef short # undef short @@ -287,24 +305,33 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if (! defined __GNUC__ || __GNUC__ < 2 \ + || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) +# define __attribute__(Spec) /* empty */ # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif + /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -340,6 +367,7 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -431,20 +459,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do +/* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -594,19 +622,19 @@ static const yytype_uint16 yyrline[] = 141, 148, 155, 162, 169, 176, 185, 197, 201, 205, 212, 219, 225, 231, 240, 247, 254, 261, 265, 269, 273, 280, 302, 310, 319, 326, 335, 346, 352, 355, - 359, 364, 365, 368, 374, 383, 391, 397, 402, 407, - 413, 416, 422, 430, 434, 443, 449, 450, 451, 452, - 457, 463, 469, 475, 476, 479, 480, 488, 497, 498, - 507, 508, 514, 517, 518, 519, 521, 529, 537, 546, - 552, 558, 564, 572, 578, 586, 587, 591, 599, 600, - 606, 607, 615, 616, 619, 625, 633, 641, 649, 659, - 662, 666, 672, 673, 674, 677, 678, 682, 686, 690, - 694, 700, 703, 709, 710, 714, 718, 722, 726, 730, - 734, 738, 742, 746 + 359, 364, 365, 368, 374, 382, 389, 395, 400, 405, + 411, 414, 420, 428, 432, 441, 447, 448, 449, 450, + 455, 461, 467, 473, 474, 477, 478, 486, 495, 496, + 505, 506, 512, 515, 516, 517, 519, 527, 535, 544, + 550, 556, 562, 570, 576, 584, 585, 589, 597, 598, + 604, 605, 613, 614, 617, 623, 631, 639, 647, 657, + 660, 664, 670, 671, 672, 675, 676, 680, 684, 688, + 692, 698, 701, 707, 708, 712, 716, 720, 724, 728, + 732, 736, 740, 744 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -623,7 +651,7 @@ static const char *const yytname[] = "$@1", "line", "$@2", "$@3", "inst", "cond", "comma", "rel", "ximm", "fcon", "reglist", "gen", "nireg", "ireg", "ioreg", "oreg", "imsr", "imm", "reg", "regreg", "shift", "rcon", "sreg", "spreg", "creg", - "frcon", "freg", "name", "offset", "pointer", "con", "oexpr", "expr", 0 + "frcon", "freg", "name", "offset", "pointer", "con", "oexpr", "expr", YY_NULL }; #endif @@ -850,10 +878,10 @@ static const yytype_int16 yytable[] = 202, 203, 204, 198, 199, 200, 201, 202, 203, 204 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-128)) +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-128))) -#define yytable_value_is_error(yytable_value) \ +#define yytable_value_is_error(Yytable_value) \ YYID (0) static const yytype_int16 yycheck[] = @@ -988,62 +1016,35 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) - +/* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - /* This macro is provided for backward compatibility. */ - #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ - #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else @@ -1093,6 +1094,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) YYSTYPE const * const yyvaluep; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT @@ -1101,11 +1104,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) # else YYUSE (yyoutput); # endif - switch (yytype) - { - default: - break; - } + YYUSE (yytype); } @@ -1344,12 +1343,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = 0; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1409,11 +1407,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } } } } @@ -1433,10 +1433,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } if (*yymsg_alloc < yysize) { @@ -1492,36 +1494,26 @@ yydestruct (yymsg, yytype, yyvaluep) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - switch (yytype) - { - - default: - break; - } + YYUSE (yytype); } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; + +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -1561,7 +1553,7 @@ yyparse () `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1579,7 +1571,7 @@ yyparse () int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1597,9 +1589,8 @@ yyparse () Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1608,14 +1599,6 @@ yyparse () yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -1756,7 +1739,9 @@ yybackup: yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1793,8 +1778,7 @@ yyreduce: switch (yyn) { case 3: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 70 "a.y" { stmtline = lineno; @@ -1802,8 +1786,7 @@ yyreduce: break; case 5: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 77 "a.y" { if((yyvsp[(1) - (2)].sym)->value != pc) @@ -1813,8 +1796,7 @@ yyreduce: break; case 7: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 84 "a.y" { (yyvsp[(1) - (2)].sym)->type = LLAB; @@ -1823,8 +1805,7 @@ yyreduce: break; case 9: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 90 "a.y" { (yyvsp[(1) - (4)].sym)->type = LVAR; @@ -1833,8 +1814,7 @@ yyreduce: break; case 10: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 95 "a.y" { if((yyvsp[(1) - (4)].sym)->value != (yyvsp[(3) - (4)].lval)) @@ -1844,162 +1824,145 @@ yyreduce: break; case 14: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 109 "a.y" { - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].gen), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].gen)); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].addr)); } break; case 15: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 113 "a.y" { - outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].gen), (yyvsp[(5) - (6)].lval), &nullgen); + outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].addr), (yyvsp[(5) - (6)].lval), &nullgen); } break; case 16: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 117 "a.y" { - outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].gen), NREG, &(yyvsp[(5) - (5)].gen)); + outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), NREG, &(yyvsp[(5) - (5)].addr)); } break; case 17: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 124 "a.y" { - outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].gen), NREG, &(yyvsp[(5) - (5)].gen)); + outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), NREG, &(yyvsp[(5) - (5)].addr)); } break; case 18: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 131 "a.y" { - outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].gen), NREG, &(yyvsp[(5) - (5)].gen)); + outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), NREG, &(yyvsp[(5) - (5)].addr)); } break; case 19: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 138 "a.y" { - outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].gen)); + outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].addr)); } break; case 20: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 142 "a.y" { - outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].gen)); + outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].addr)); } break; case 21: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 149 "a.y" { - outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].gen)); + outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].addr)); } break; case 22: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 156 "a.y" { - outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].gen)); + outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].addr)); } break; case 23: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 163 "a.y" { - outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].gen)); + outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &nullgen, NREG, &(yyvsp[(4) - (4)].addr)); } break; case 24: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 170 "a.y" { - outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].gen), (yyvsp[(5) - (6)].lval), &nullgen); + outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].addr), (yyvsp[(5) - (6)].lval), &nullgen); } break; case 25: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 177 "a.y" { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; g.offset = (yyvsp[(6) - (7)].lval); - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].gen), NREG, &g); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), NREG, &g); } break; case 26: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 186 "a.y" { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; g.offset = (yyvsp[(4) - (7)].lval); - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &g, NREG, &(yyvsp[(7) - (7)].gen)); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &g, NREG, &(yyvsp[(7) - (7)].addr)); } break; case 27: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 198 "a.y" { - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(5) - (7)].gen), (yyvsp[(3) - (7)].gen).reg, &(yyvsp[(7) - (7)].gen)); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(5) - (7)].addr), (yyvsp[(3) - (7)].addr).reg, &(yyvsp[(7) - (7)].addr)); } break; case 28: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 202 "a.y" { - outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(5) - (6)].gen), (yyvsp[(3) - (6)].gen).reg, &(yyvsp[(3) - (6)].gen)); + outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(5) - (6)].addr), (yyvsp[(3) - (6)].addr).reg, &(yyvsp[(3) - (6)].addr)); } break; case 29: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 206 "a.y" { - outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(4) - (6)].gen), (yyvsp[(6) - (6)].gen).reg, &(yyvsp[(6) - (6)].gen)); + outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(4) - (6)].addr), (yyvsp[(6) - (6)].addr).reg, &(yyvsp[(6) - (6)].addr)); } break; case 30: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 213 "a.y" { outcode((yyvsp[(1) - (3)].lval), (yyvsp[(2) - (3)].lval), &nullgen, NREG, &nullgen); @@ -2007,107 +1970,96 @@ yyreduce: break; case 31: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 220 "a.y" { - (yyvsp[(4) - (4)].gen).type = D_CONST2; - (yyvsp[(4) - (4)].gen).offset2 = ArgsSizeUnknown; - outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].gen), 0, &(yyvsp[(4) - (4)].gen)); + (yyvsp[(4) - (4)].addr).type = D_CONST2; + (yyvsp[(4) - (4)].addr).offset2 = ArgsSizeUnknown; + outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr)); } break; case 32: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 226 "a.y" { - (yyvsp[(6) - (6)].gen).type = D_CONST2; - (yyvsp[(6) - (6)].gen).offset2 = ArgsSizeUnknown; - outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].gen), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].gen)); + (yyvsp[(6) - (6)].addr).type = D_CONST2; + (yyvsp[(6) - (6)].addr).offset2 = ArgsSizeUnknown; + outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 33: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 232 "a.y" { - (yyvsp[(6) - (8)].gen).type = D_CONST2; - (yyvsp[(6) - (8)].gen).offset2 = (yyvsp[(8) - (8)].lval); - outcode((yyvsp[(1) - (8)].lval), Always, &(yyvsp[(2) - (8)].gen), (yyvsp[(4) - (8)].lval), &(yyvsp[(6) - (8)].gen)); + (yyvsp[(6) - (8)].addr).type = D_CONST2; + (yyvsp[(6) - (8)].addr).offset2 = (yyvsp[(8) - (8)].lval); + outcode((yyvsp[(1) - (8)].lval), Always, &(yyvsp[(2) - (8)].addr), (yyvsp[(4) - (8)].lval), &(yyvsp[(6) - (8)].addr)); } break; case 34: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 241 "a.y" { - outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].gen), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].gen)); + outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr)); } break; case 35: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 248 "a.y" { - outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &(yyvsp[(3) - (4)].gen), NREG, &nullgen); + outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &(yyvsp[(3) - (4)].addr), NREG, &nullgen); } break; case 36: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 255 "a.y" { - outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].gen)); + outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, NREG, &(yyvsp[(3) - (3)].addr)); } break; case 37: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 262 "a.y" { - outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].gen), NREG, &(yyvsp[(5) - (5)].gen)); + outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), NREG, &(yyvsp[(5) - (5)].addr)); } break; case 38: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 266 "a.y" { - outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].gen), NREG, &(yyvsp[(5) - (5)].gen)); + outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), NREG, &(yyvsp[(5) - (5)].addr)); } break; case 39: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 270 "a.y" { - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].gen), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].gen)); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].addr)); } break; case 40: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 274 "a.y" { - outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].gen), (yyvsp[(5) - (6)].gen).reg, &nullgen); + outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].addr), (yyvsp[(5) - (6)].addr).reg, &nullgen); } break; case 41: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 281 "a.y" { - Gen g; + Addr g; g = nullgen; g.type = D_CONST; @@ -2122,66 +2074,60 @@ yyreduce: (((yyvsp[(11) - (12)].lval) & 15) << 0) | /* Crm */ (((yyvsp[(12) - (12)].lval) & 7) << 5) | /* coprocessor information */ (1<<4); /* must be set */ - outcode(AWORD, Always, &nullgen, NREG, &g); + outcode(AMRC, Always, &nullgen, NREG, &g); } break; case 42: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 303 "a.y" { - outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].gen), (yyvsp[(5) - (7)].gen).reg, &(yyvsp[(7) - (7)].gen)); + outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].addr).reg, &(yyvsp[(7) - (7)].addr)); } break; case 43: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 311 "a.y" { - (yyvsp[(7) - (9)].gen).type = D_REGREG2; - (yyvsp[(7) - (9)].gen).offset = (yyvsp[(9) - (9)].lval); - outcode((yyvsp[(1) - (9)].lval), (yyvsp[(2) - (9)].lval), &(yyvsp[(3) - (9)].gen), (yyvsp[(5) - (9)].gen).reg, &(yyvsp[(7) - (9)].gen)); + (yyvsp[(7) - (9)].addr).type = D_REGREG2; + (yyvsp[(7) - (9)].addr).offset = (yyvsp[(9) - (9)].lval); + outcode((yyvsp[(1) - (9)].lval), (yyvsp[(2) - (9)].lval), &(yyvsp[(3) - (9)].addr), (yyvsp[(5) - (9)].addr).reg, &(yyvsp[(7) - (9)].addr)); } break; case 44: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 320 "a.y" { - outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].gen), NREG, &nullgen); + outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].addr), NREG, &nullgen); } break; case 45: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 327 "a.y" { - if((yyvsp[(2) - (4)].gen).type != D_CONST || (yyvsp[(4) - (4)].gen).type != D_CONST) + if((yyvsp[(2) - (4)].addr).type != D_CONST || (yyvsp[(4) - (4)].addr).type != D_CONST) yyerror("arguments to PCDATA must be integer constants"); - outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].gen), NREG, &(yyvsp[(4) - (4)].gen)); + outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), NREG, &(yyvsp[(4) - (4)].addr)); } break; case 46: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 336 "a.y" { - if((yyvsp[(2) - (4)].gen).type != D_CONST) + if((yyvsp[(2) - (4)].addr).type != D_CONST) yyerror("index for FUNCDATA must be integer constant"); - if((yyvsp[(4) - (4)].gen).type != D_EXTERN && (yyvsp[(4) - (4)].gen).type != D_STATIC) + if((yyvsp[(4) - (4)].addr).type != D_EXTERN && (yyvsp[(4) - (4)].addr).type != D_STATIC && (yyvsp[(4) - (4)].addr).type != D_OREG) yyerror("value for FUNCDATA must be symbol reference"); - outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].gen), NREG, &(yyvsp[(4) - (4)].gen)); + outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), NREG, &(yyvsp[(4) - (4)].addr)); } break; case 47: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 347 "a.y" { outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, NREG, &nullgen); @@ -2189,8 +2135,7 @@ yyreduce: break; case 48: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 352 "a.y" { (yyval.lval) = Always; @@ -2198,8 +2143,7 @@ yyreduce: break; case 49: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 356 "a.y" { (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval); @@ -2207,8 +2151,7 @@ yyreduce: break; case 50: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 360 "a.y" { (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval); @@ -2216,119 +2159,106 @@ yyreduce: break; case 53: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 369 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_BRANCH; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval) + pc; + (yyval.addr) = nullgen; + (yyval.addr).type = D_BRANCH; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval) + pc; } break; case 54: - -/* Line 1806 of yacc.c */ +/* Line 1787 of yacc.c */ #line 375 "a.y" { - (yyval.gen) = nullgen; + (yyval.addr) = nullgen; if(pass == 2) yyerror("undefined label: %s", (yyvsp[(1) - (2)].sym)->name); - (yyval.gen).type = D_BRANCH; - (yyval.gen).sym = (yyvsp[(1) - (2)].sym); - (yyval.gen).offset = (yyvsp[(2) - (2)].lval); + (yyval.addr).type = D_BRANCH; + (yyval.addr).offset = (yyvsp[(2) - (2)].lval); } break; case 55: - -/* Line 1806 of yacc.c */ -#line 384 "a.y" +/* Line 1787 of yacc.c */ +#line 383 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_BRANCH; - (yyval.gen).sym = (yyvsp[(1) - (2)].sym); - (yyval.gen).offset = (yyvsp[(1) - (2)].sym)->value + (yyvsp[(2) - (2)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_BRANCH; + (yyval.addr).offset = (yyvsp[(1) - (2)].sym)->value + (yyvsp[(2) - (2)].lval); } break; case 56: - -/* Line 1806 of yacc.c */ -#line 392 "a.y" +/* Line 1787 of yacc.c */ +#line 390 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_CONST; - (yyval.gen).offset = (yyvsp[(2) - (2)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_CONST; + (yyval.addr).offset = (yyvsp[(2) - (2)].lval); } break; case 57: - -/* Line 1806 of yacc.c */ -#line 398 "a.y" +/* Line 1787 of yacc.c */ +#line 396 "a.y" { - (yyval.gen) = (yyvsp[(2) - (2)].gen); - (yyval.gen).type = D_CONST; + (yyval.addr) = (yyvsp[(2) - (2)].addr); + (yyval.addr).type = D_CONST; } break; case 58: - -/* Line 1806 of yacc.c */ -#line 403 "a.y" +/* Line 1787 of yacc.c */ +#line 401 "a.y" { - (yyval.gen) = (yyvsp[(4) - (4)].gen); - (yyval.gen).type = D_OCONST; + (yyval.addr) = (yyvsp[(4) - (4)].addr); + (yyval.addr).type = D_OCONST; } break; case 59: - -/* Line 1806 of yacc.c */ -#line 408 "a.y" +/* Line 1787 of yacc.c */ +#line 406 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_SCONST; - memcpy((yyval.gen).sval, (yyvsp[(2) - (2)].sval), sizeof((yyval.gen).sval)); + (yyval.addr) = nullgen; + (yyval.addr).type = D_SCONST; + memcpy((yyval.addr).u.sval, (yyvsp[(2) - (2)].sval), sizeof((yyval.addr).u.sval)); } break; case 61: - -/* Line 1806 of yacc.c */ -#line 417 "a.y" +/* Line 1787 of yacc.c */ +#line 415 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_FCONST; - (yyval.gen).dval = (yyvsp[(2) - (2)].dval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_FCONST; + (yyval.addr).u.dval = (yyvsp[(2) - (2)].dval); } break; case 62: - -/* Line 1806 of yacc.c */ -#line 423 "a.y" +/* Line 1787 of yacc.c */ +#line 421 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_FCONST; - (yyval.gen).dval = -(yyvsp[(3) - (3)].dval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_FCONST; + (yyval.addr).u.dval = -(yyvsp[(3) - (3)].dval); } break; case 63: - -/* Line 1806 of yacc.c */ -#line 431 "a.y" +/* Line 1787 of yacc.c */ +#line 429 "a.y" { (yyval.lval) = 1 << (yyvsp[(1) - (1)].lval); } break; case 64: - -/* Line 1806 of yacc.c */ -#line 435 "a.y" +/* Line 1787 of yacc.c */ +#line 433 "a.y" { int i; (yyval.lval)=0; @@ -2340,185 +2270,168 @@ yyreduce: break; case 65: - -/* Line 1806 of yacc.c */ -#line 444 "a.y" +/* Line 1787 of yacc.c */ +#line 442 "a.y" { (yyval.lval) = (1<<(yyvsp[(1) - (3)].lval)) | (yyvsp[(3) - (3)].lval); } break; case 69: - -/* Line 1806 of yacc.c */ -#line 453 "a.y" +/* Line 1787 of yacc.c */ +#line 451 "a.y" { - (yyval.gen) = (yyvsp[(1) - (4)].gen); - (yyval.gen).reg = (yyvsp[(3) - (4)].lval); + (yyval.addr) = (yyvsp[(1) - (4)].addr); + (yyval.addr).reg = (yyvsp[(3) - (4)].lval); } break; case 70: - -/* Line 1806 of yacc.c */ -#line 458 "a.y" +/* Line 1787 of yacc.c */ +#line 456 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_PSR; - (yyval.gen).reg = (yyvsp[(1) - (1)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_PSR; + (yyval.addr).reg = (yyvsp[(1) - (1)].lval); } break; case 71: - -/* Line 1806 of yacc.c */ -#line 464 "a.y" +/* Line 1787 of yacc.c */ +#line 462 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_FPCR; - (yyval.gen).reg = (yyvsp[(1) - (1)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_FPCR; + (yyval.addr).reg = (yyvsp[(1) - (1)].lval); } break; case 72: - -/* Line 1806 of yacc.c */ -#line 470 "a.y" +/* Line 1787 of yacc.c */ +#line 468 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).offset = (yyvsp[(1) - (1)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).offset = (yyvsp[(1) - (1)].lval); } break; case 76: - -/* Line 1806 of yacc.c */ -#line 481 "a.y" +/* Line 1787 of yacc.c */ +#line 479 "a.y" { - (yyval.gen) = (yyvsp[(1) - (1)].gen); - if((yyvsp[(1) - (1)].gen).name != D_EXTERN && (yyvsp[(1) - (1)].gen).name != D_STATIC) { + (yyval.addr) = (yyvsp[(1) - (1)].addr); + if((yyvsp[(1) - (1)].addr).name != D_EXTERN && (yyvsp[(1) - (1)].addr).name != D_STATIC) { } } break; case 77: - -/* Line 1806 of yacc.c */ -#line 489 "a.y" +/* Line 1787 of yacc.c */ +#line 487 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).reg = (yyvsp[(2) - (3)].lval); - (yyval.gen).offset = 0; + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).reg = (yyvsp[(2) - (3)].lval); + (yyval.addr).offset = 0; } break; case 79: - -/* Line 1806 of yacc.c */ -#line 499 "a.y" +/* Line 1787 of yacc.c */ +#line 497 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).reg = (yyvsp[(3) - (4)].lval); - (yyval.gen).offset = (yyvsp[(1) - (4)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).reg = (yyvsp[(3) - (4)].lval); + (yyval.addr).offset = (yyvsp[(1) - (4)].lval); } break; case 81: - -/* Line 1806 of yacc.c */ -#line 509 "a.y" +/* Line 1787 of yacc.c */ +#line 507 "a.y" { - (yyval.gen) = (yyvsp[(1) - (4)].gen); - (yyval.gen).type = D_OREG; - (yyval.gen).reg = (yyvsp[(3) - (4)].lval); + (yyval.addr) = (yyvsp[(1) - (4)].addr); + (yyval.addr).type = D_OREG; + (yyval.addr).reg = (yyvsp[(3) - (4)].lval); } break; case 86: - -/* Line 1806 of yacc.c */ -#line 522 "a.y" +/* Line 1787 of yacc.c */ +#line 520 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_CONST; - (yyval.gen).offset = (yyvsp[(2) - (2)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_CONST; + (yyval.addr).offset = (yyvsp[(2) - (2)].lval); } break; case 87: - -/* Line 1806 of yacc.c */ -#line 530 "a.y" +/* Line 1787 of yacc.c */ +#line 528 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_REG; - (yyval.gen).reg = (yyvsp[(1) - (1)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_REG; + (yyval.addr).reg = (yyvsp[(1) - (1)].lval); } break; case 88: - -/* Line 1806 of yacc.c */ -#line 538 "a.y" +/* Line 1787 of yacc.c */ +#line 536 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_REGREG; - (yyval.gen).reg = (yyvsp[(2) - (5)].lval); - (yyval.gen).offset = (yyvsp[(4) - (5)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_REGREG; + (yyval.addr).reg = (yyvsp[(2) - (5)].lval); + (yyval.addr).offset = (yyvsp[(4) - (5)].lval); } break; case 89: - -/* Line 1806 of yacc.c */ -#line 547 "a.y" +/* Line 1787 of yacc.c */ +#line 545 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_SHIFT; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (0 << 5); + (yyval.addr) = nullgen; + (yyval.addr).type = D_SHIFT; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (0 << 5); } break; case 90: - -/* Line 1806 of yacc.c */ -#line 553 "a.y" +/* Line 1787 of yacc.c */ +#line 551 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_SHIFT; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (1 << 5); + (yyval.addr) = nullgen; + (yyval.addr).type = D_SHIFT; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (1 << 5); } break; case 91: - -/* Line 1806 of yacc.c */ -#line 559 "a.y" +/* Line 1787 of yacc.c */ +#line 557 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_SHIFT; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (2 << 5); + (yyval.addr) = nullgen; + (yyval.addr).type = D_SHIFT; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (2 << 5); } break; case 92: - -/* Line 1806 of yacc.c */ -#line 565 "a.y" +/* Line 1787 of yacc.c */ +#line 563 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_SHIFT; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (3 << 5); + (yyval.addr) = nullgen; + (yyval.addr).type = D_SHIFT; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval) | (yyvsp[(4) - (4)].lval) | (3 << 5); } break; case 93: - -/* Line 1806 of yacc.c */ -#line 573 "a.y" +/* Line 1787 of yacc.c */ +#line 571 "a.y" { if((yyval.lval) < 0 || (yyval.lval) >= 16) print("register value out of range\n"); @@ -2527,9 +2440,8 @@ yyreduce: break; case 94: - -/* Line 1806 of yacc.c */ -#line 579 "a.y" +/* Line 1787 of yacc.c */ +#line 577 "a.y" { if((yyval.lval) < 0 || (yyval.lval) >= 32) print("shift value out of range\n"); @@ -2538,18 +2450,16 @@ yyreduce: break; case 96: - -/* Line 1806 of yacc.c */ -#line 588 "a.y" +/* Line 1787 of yacc.c */ +#line 586 "a.y" { (yyval.lval) = REGPC; } break; case 97: - -/* Line 1806 of yacc.c */ -#line 592 "a.y" +/* Line 1787 of yacc.c */ +#line 590 "a.y" { if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG) print("register value out of range\n"); @@ -2558,18 +2468,16 @@ yyreduce: break; case 99: - -/* Line 1806 of yacc.c */ -#line 601 "a.y" +/* Line 1787 of yacc.c */ +#line 599 "a.y" { (yyval.lval) = REGSP; } break; case 101: - -/* Line 1806 of yacc.c */ -#line 608 "a.y" +/* Line 1787 of yacc.c */ +#line 606 "a.y" { if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG) print("register value out of range\n"); @@ -2578,250 +2486,224 @@ yyreduce: break; case 104: - -/* Line 1806 of yacc.c */ -#line 620 "a.y" +/* Line 1787 of yacc.c */ +#line 618 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_FREG; - (yyval.gen).reg = (yyvsp[(1) - (1)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_FREG; + (yyval.addr).reg = (yyvsp[(1) - (1)].lval); } break; case 105: - -/* Line 1806 of yacc.c */ -#line 626 "a.y" +/* Line 1787 of yacc.c */ +#line 624 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_FREG; - (yyval.gen).reg = (yyvsp[(3) - (4)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_FREG; + (yyval.addr).reg = (yyvsp[(3) - (4)].lval); } break; case 106: - -/* Line 1806 of yacc.c */ -#line 634 "a.y" +/* Line 1787 of yacc.c */ +#line 632 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).name = (yyvsp[(3) - (4)].lval); - (yyval.gen).sym = S; - (yyval.gen).offset = (yyvsp[(1) - (4)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).name = (yyvsp[(3) - (4)].lval); + (yyval.addr).sym = nil; + (yyval.addr).offset = (yyvsp[(1) - (4)].lval); } break; case 107: - -/* Line 1806 of yacc.c */ -#line 642 "a.y" +/* Line 1787 of yacc.c */ +#line 640 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).name = (yyvsp[(4) - (5)].lval); - (yyval.gen).sym = (yyvsp[(1) - (5)].sym); - (yyval.gen).offset = (yyvsp[(2) - (5)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).name = (yyvsp[(4) - (5)].lval); + (yyval.addr).sym = linklookup(ctxt, (yyvsp[(1) - (5)].sym)->name, 0); + (yyval.addr).offset = (yyvsp[(2) - (5)].lval); } break; case 108: - -/* Line 1806 of yacc.c */ -#line 650 "a.y" +/* Line 1787 of yacc.c */ +#line 648 "a.y" { - (yyval.gen) = nullgen; - (yyval.gen).type = D_OREG; - (yyval.gen).name = D_STATIC; - (yyval.gen).sym = (yyvsp[(1) - (7)].sym); - (yyval.gen).offset = (yyvsp[(4) - (7)].lval); + (yyval.addr) = nullgen; + (yyval.addr).type = D_OREG; + (yyval.addr).name = D_STATIC; + (yyval.addr).sym = linklookup(ctxt, (yyvsp[(1) - (7)].sym)->name, 1); + (yyval.addr).offset = (yyvsp[(4) - (7)].lval); } break; case 109: - -/* Line 1806 of yacc.c */ -#line 659 "a.y" +/* Line 1787 of yacc.c */ +#line 657 "a.y" { (yyval.lval) = 0; } break; case 110: - -/* Line 1806 of yacc.c */ -#line 663 "a.y" +/* Line 1787 of yacc.c */ +#line 661 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 111: - -/* Line 1806 of yacc.c */ -#line 667 "a.y" +/* Line 1787 of yacc.c */ +#line 665 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 116: - -/* Line 1806 of yacc.c */ -#line 679 "a.y" +/* Line 1787 of yacc.c */ +#line 677 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; case 117: - -/* Line 1806 of yacc.c */ -#line 683 "a.y" +/* Line 1787 of yacc.c */ +#line 681 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; case 118: - -/* Line 1806 of yacc.c */ -#line 687 "a.y" +/* Line 1787 of yacc.c */ +#line 685 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 119: - -/* Line 1806 of yacc.c */ -#line 691 "a.y" +/* Line 1787 of yacc.c */ +#line 689 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; case 120: - -/* Line 1806 of yacc.c */ -#line 695 "a.y" +/* Line 1787 of yacc.c */ +#line 693 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; case 121: - -/* Line 1806 of yacc.c */ -#line 700 "a.y" +/* Line 1787 of yacc.c */ +#line 698 "a.y" { (yyval.lval) = 0; } break; case 122: - -/* Line 1806 of yacc.c */ -#line 704 "a.y" +/* Line 1787 of yacc.c */ +#line 702 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; case 124: - -/* Line 1806 of yacc.c */ -#line 711 "a.y" +/* Line 1787 of yacc.c */ +#line 709 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; case 125: - -/* Line 1806 of yacc.c */ -#line 715 "a.y" +/* Line 1787 of yacc.c */ +#line 713 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; case 126: - -/* Line 1806 of yacc.c */ -#line 719 "a.y" +/* Line 1787 of yacc.c */ +#line 717 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; case 127: - -/* Line 1806 of yacc.c */ -#line 723 "a.y" +/* Line 1787 of yacc.c */ +#line 721 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; case 128: - -/* Line 1806 of yacc.c */ -#line 727 "a.y" +/* Line 1787 of yacc.c */ +#line 725 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; case 129: - -/* Line 1806 of yacc.c */ -#line 731 "a.y" +/* Line 1787 of yacc.c */ +#line 729 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; case 130: - -/* Line 1806 of yacc.c */ -#line 735 "a.y" +/* Line 1787 of yacc.c */ +#line 733 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; case 131: - -/* Line 1806 of yacc.c */ -#line 739 "a.y" +/* Line 1787 of yacc.c */ +#line 737 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; case 132: - -/* Line 1806 of yacc.c */ -#line 743 "a.y" +/* Line 1787 of yacc.c */ +#line 741 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; case 133: - -/* Line 1806 of yacc.c */ -#line 747 "a.y" +/* Line 1787 of yacc.c */ +#line 745 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } break; - -/* Line 1806 of yacc.c */ -#line 2825 "y.tab.c" +/* Line 1787 of yacc.c */ +#line 2707 "y.tab.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2984,7 +2866,9 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -3008,7 +2892,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -3050,4 +2934,3 @@ yyreturn: } - diff --git a/src/cmd/5a/y.tab.h b/src/cmd/5a/y.tab.h index 92230a2a5..f11fb85c6 100644 --- a/src/cmd/5a/y.tab.h +++ b/src/cmd/5a/y.tab.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,15 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_YY_Y_TAB_H_INCLUDED +# define YY_YY_Y_TAB_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif /* Tokens. */ #ifndef YYTOKENTYPE @@ -139,24 +148,21 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 2068 of yacc.c */ +/* Line 2053 of yacc.c */ #line 39 "a.y" Sym *sym; int32 lval; double dval; char sval[8]; - Gen gen; + Addr addr; - -/* Line 2068 of yacc.c */ -#line 160 "y.tab.h" +/* Line 2053 of yacc.c */ +#line 166 "y.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -165,4 +171,18 @@ typedef union YYSTYPE extern YYSTYPE yylval; +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ +#endif /* !YY_YY_Y_TAB_H_INCLUDED */ |