From 297bb12809c81810f3c7fbb7794be124b76d291a Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 7 Mar 2013 12:54:00 -0800 Subject: [PATCH] cmd/6a, cmd/8a, cmd/6l, cmd/8l: add AES instructions Instructions for use in AES hashing. See CL#7543043 R=rsc CC=golang-dev https://golang.org/cl/7548043 --- src/cmd/6a/lex.c | 3 + src/cmd/6l/6.out.h | 3 + src/cmd/6l/l.h | 8 +- src/cmd/6l/optab.c | 13 + src/cmd/6l/span.c | 10 + src/cmd/8a/a.y | 15 +- src/cmd/8a/lex.c | 6 + src/cmd/8a/y.tab.c | 1572 ++++++++++++++++++++++++-------------------- src/cmd/8a/y.tab.h | 98 ++- src/cmd/8l/8.out.h | 10 +- src/cmd/8l/l.h | 5 +- src/cmd/8l/optab.c | 31 +- src/cmd/8l/span.c | 19 + 13 files changed, 1018 insertions(+), 775 deletions(-) diff --git a/src/cmd/6a/lex.c b/src/cmd/6a/lex.c index d65802a201..c969e98e5d 100644 --- a/src/cmd/6a/lex.c +++ b/src/cmd/6a/lex.c @@ -932,6 +932,8 @@ struct "PCMPGTW", LTYPE3, APCMPGTW, "PEXTRW", LTYPEX, APEXTRW, "PINSRW", LTYPEX, APINSRW, + "PINSRD", LTYPEX, APINSRD, + "PINSRQ", LTYPEX, APINSRQ, "PMADDWL", LTYPE3, APMADDWL, "PMAXSW", LTYPE3, APMAXSW, "PMAXUB", LTYPE3, APMAXUB, @@ -949,6 +951,7 @@ struct "PSHUFL", LTYPEX, APSHUFL, "PSHUFLW", LTYPEX, APSHUFLW, "PSHUFW", LTYPEX, APSHUFW, + "PSHUFB", LTYPEM, APSHUFB, "PSLLO", LTYPE3, APSLLO, "PSLLDQ", LTYPE3, APSLLO, /* syn */ "PSLLL", LTYPE3, APSLLL, diff --git a/src/cmd/6l/6.out.h b/src/cmd/6l/6.out.h index 805b3fc6f2..28de749447 100644 --- a/src/cmd/6l/6.out.h +++ b/src/cmd/6l/6.out.h @@ -654,6 +654,8 @@ enum as APFSUB, APFSUBR, APINSRW, + APINSRD, + APINSRQ, APMADDWL, APMAXSW, APMAXUB, @@ -671,6 +673,7 @@ enum as APSHUFL, APSHUFLW, APSHUFW, + APSHUFB, APSLLO, APSLLL, APSLLQ, diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h index 22fb23b1b7..1790f718a9 100644 --- a/src/cmd/6l/l.h +++ b/src/cmd/6l/l.h @@ -263,6 +263,7 @@ enum Zo_iw, Zm_o, Zm_r, + Zm2_r, Zm_r_xm, Zm_r_i_xm, Zm_r_3d, @@ -292,10 +293,11 @@ enum P32 = 0x32, /* 32-bit only */ Pe = 0x66, /* operand escape */ Pm = 0x0f, /* 2byte opcode escape */ - Pq = 0xff, /* both escape */ + Pq = 0xff, /* both escapes: 66 0f */ Pb = 0xfe, /* byte operands */ - Pf2 = 0xf2, /* xmm escape 1 */ - Pf3 = 0xf3, /* xmm escape 2 */ + Pf2 = 0xf2, /* xmm escape 1: f2 0f */ + Pf3 = 0xf3, /* xmm escape 2: f3 0f */ + Pq3 = 0x67, /* xmm escape 3: 66 48 0f */ Pw = 0x48, /* Rex.w */ Py = 0x80, /* defaults to 64-bit mode */ diff --git a/src/cmd/6l/optab.c b/src/cmd/6l/optab.c index a163e6faab..2f97296c6a 100644 --- a/src/cmd/6l/optab.c +++ b/src/cmd/6l/optab.c @@ -522,6 +522,11 @@ uchar ymshuf[] = Ymm, Ymr, Zibm_r, 2, 0 }; +uchar ymshufb[] = +{ + Yxm, Yxr, Zm2_r, 2, + 0 +}; uchar yxshuf[] = { Yxm, Yxr, Zibm_r, 2, @@ -532,6 +537,11 @@ uchar yextrw[] = Yxr, Yrl, Zibm_r, 2, 0 }; +uchar yinsr[] = +{ + Ymm, Yxr, Zibm_r, 3, + 0 +}; uchar ypsdq[] = { Yi8, Yxr, Zibo_m, 2, @@ -983,6 +993,8 @@ Optab optab[] = { APFSUB, ymfp, Px, 0x9a }, { APFSUBR, ymfp, Px, 0xaa }, { APINSRW, yextrw, Pq, 0xc4,(00) }, + { APINSRD, yinsr, Pq, 0x3a, 0x22, (00) }, + { APINSRQ, yinsr, Pq3, 0x3a, 0x22, (00) }, { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 }, { APMAXSW, yxm, Pe, 0xee }, { APMAXUB, yxm, Pe, 0xde }, @@ -1008,6 +1020,7 @@ Optab optab[] = { APSHUFL, yxshuf, Pq, 0x70,(00) }, { APSHUFLW, yxshuf, Pf2, 0x70,(00) }, { APSHUFW, ymshuf, Pm, 0x70,(00) }, + { APSHUFB, ymshufb,Pq, 0x38, 0x00 }, { APSLLO, ypsdq, Pq, 0x73,(07) }, { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) }, { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06) }, diff --git a/src/cmd/6l/span.c b/src/cmd/6l/span.c index 283a0e3495..fa94d8cf96 100644 --- a/src/cmd/6l/span.c +++ b/src/cmd/6l/span.c @@ -1161,6 +1161,11 @@ found: *andptr++ = Pe; *andptr++ = Pm; break; + case Pq3: /* 16 bit escape, Rex.w, and opcode escape */ + *andptr++ = Pe; + *andptr++ = Pw; + *andptr++ = Pm; + break; case Pf2: /* xmm opcode escape */ case Pf3: @@ -1229,6 +1234,11 @@ found: *andptr++ = op; asmand(&p->from, &p->to); break; + case Zm2_r: + *andptr++ = op; + *andptr++ = o->op[z+1]; + asmand(&p->from, &p->to); + break; case Zm_r_xm: mediaop(o, op, t[3], z); diff --git a/src/cmd/8a/a.y b/src/cmd/8a/a.y index 60707d1c9f..516e5fbe7c 100644 --- a/src/cmd/8a/a.y +++ b/src/cmd/8a/a.y @@ -54,7 +54,7 @@ %left '*' '/' '%' %token LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 %token LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG LTYPEXC -%token LCONST LFP LPC LSB +%token LTYPEX LCONST LFP LPC LSB %token LBREG LLREG LSREG LFREG LXREG %token LFCONST %token LSCONST LSP @@ -63,7 +63,7 @@ %type con2 %type mem imm imm2 reg nam rel rem rim rom omem nmem %type nonnon nonrel nonrem rimnon rimrem remrim -%type spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 +%type spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 spec10 %% prog: | prog @@ -117,6 +117,7 @@ inst: | LTYPEI spec7 { outcode($1, &$2); } | LTYPEG spec8 { outcode($1, &$2); } | LTYPEXC spec9 { outcode($1, &$2); } +| LTYPEX spec10 { outcode($1, &$2); } nonnon: { @@ -296,6 +297,16 @@ spec9: /* CMPPS/CMPPD */ $$.to.offset = $5; } +spec10: /* PINSRD */ + imm ',' rem ',' reg + { + $$.from = $3; + $$.to = $5; + if($1.type != D_CONST) + yyerror("illegal constant"); + $$.to.offset = $1.offset; + } + rem: reg | mem diff --git a/src/cmd/8a/lex.c b/src/cmd/8a/lex.c index 770ca5a880..b8fc2c03ec 100644 --- a/src/cmd/8a/lex.c +++ b/src/cmd/8a/lex.c @@ -306,6 +306,7 @@ struct "CMPXCHGB", LTYPE3, ACMPXCHGB, "CMPXCHGL", LTYPE3, ACMPXCHGL, "CMPXCHGW", LTYPE3, ACMPXCHGW, + "CPUID", LTYPE0, ACPUID, "DAA", LTYPE0, ADAA, "DAS", LTYPE0, ADAS, "DATA", LTYPED, ADATA, @@ -408,6 +409,7 @@ struct "MOVB", LTYPE3, AMOVB, "MOVL", LTYPEM, AMOVL, "MOVW", LTYPEM, AMOVW, + "MOVQ", LTYPEM, AMOVQ, "MOVBLSX", LTYPE3, AMOVBLSX, "MOVBLZX", LTYPE3, AMOVBLZX, "MOVBWSX", LTYPE3, AMOVBWSX, @@ -437,6 +439,7 @@ struct "OUTSL", LTYPE0, AOUTSL, "OUTSW", LTYPE0, AOUTSW, "PAUSE", LTYPEN, APAUSE, + "PINSRD", LTYPEX, APINSRD, "POPAL", LTYPE0, APOPAL, "POPAW", LTYPE0, APOPAW, "POPFL", LTYPE0, APOPFL, @@ -687,6 +690,7 @@ struct "ADDPS", LTYPE3, AADDPS, "ADDSD", LTYPE3, AADDSD, "ADDSS", LTYPE3, AADDSS, + "AESENC", LTYPE3, AAESENC, "ANDNPD", LTYPE3, AANDNPD, "ANDNPS", LTYPE3, AANDNPS, "ANDPD", LTYPE3, AANDPD, @@ -755,11 +759,13 @@ struct "ORPD", LTYPE3, AORPD, "ORPS", LTYPE3, AORPS, "PADDQ", LTYPE3, APADDQ, + "PAND", LTYPE3, APAND, "PMAXSW", LTYPE3, APMAXSW, "PMAXUB", LTYPE3, APMAXUB, "PMINSW", LTYPE3, APMINSW, "PMINUB", LTYPE3, APMINUB, "PSADBW", LTYPE3, APSADBW, + "PSHUFB", LTYPE3, APSHUFB, "PSUBB", LTYPE3, APSUBB, "PSUBL", LTYPE3, APSUBL, "PSUBQ", LTYPE3, APSUBQ, diff --git a/src/cmd/8a/y.tab.c b/src/cmd/8a/y.tab.c index 38f2de52d1..7eaff0bb05 100644 --- a/src/cmd/8a/y.tab.c +++ b/src/cmd/8a/y.tab.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.6.5. */ +/* A Bison parser, made by GNU Bison 2.5. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2011 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.6.5" +#define YYBISON_VERSION "2.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,11 +58,14 @@ /* Pull parsers. */ #define YYPULL 1 +/* Using locations. */ +#define YYLSP_NEEDED 0 /* Copy the first part of user declarations. */ -/* Line 360 of yacc.c */ + +/* Line 268 of yacc.c */ #line 31 "a.y" #include @@ -70,16 +73,14 @@ #include #include "a.h" -/* Line 360 of yacc.c */ -#line 75 "y.tab.c" -# ifndef YY_NULL -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr -# else -# define YY_NULL 0 -# endif -# endif +/* Line 268 of yacc.c */ +#line 79 "y.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -89,18 +90,12 @@ # define YYERROR_VERBOSE 0 #endif -/* 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; +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 #endif + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -122,21 +117,22 @@ extern int yydebug; LTYPEI = 270, LTYPEG = 271, LTYPEXC = 272, - LCONST = 273, - LFP = 274, - LPC = 275, - LSB = 276, - LBREG = 277, - LLREG = 278, - LSREG = 279, - LFREG = 280, - LXREG = 281, - LFCONST = 282, - LSCONST = 283, - LSP = 284, - LNAME = 285, - LLAB = 286, - LVAR = 287 + LTYPEX = 273, + LCONST = 274, + LFP = 275, + LPC = 276, + LSB = 277, + LBREG = 278, + LLREG = 279, + LSREG = 280, + LFREG = 281, + LXREG = 282, + LFCONST = 283, + LSCONST = 284, + LSP = 285, + LNAME = 286, + LLAB = 287, + LVAR = 288 }; #endif /* Tokens. */ @@ -155,28 +151,31 @@ extern int yydebug; #define LTYPEI 270 #define LTYPEG 271 #define LTYPEXC 272 -#define LCONST 273 -#define LFP 274 -#define LPC 275 -#define LSB 276 -#define LBREG 277 -#define LLREG 278 -#define LSREG 279 -#define LFREG 280 -#define LXREG 281 -#define LFCONST 282 -#define LSCONST 283 -#define LSP 284 -#define LNAME 285 -#define LLAB 286 -#define LVAR 287 +#define LTYPEX 273 +#define LCONST 274 +#define LFP 275 +#define LPC 276 +#define LSB 277 +#define LBREG 278 +#define LLREG 279 +#define LSREG 280 +#define LFREG 281 +#define LXREG 282 +#define LFCONST 283 +#define LSCONST 284 +#define LSP 285 +#define LNAME 286 +#define LLAB 287 +#define LVAR 288 + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { -/* Line 376 of yacc.c */ + +/* Line 293 of yacc.c */ #line 37 "a.y" Sym *sym; @@ -191,7 +190,8 @@ typedef union YYSTYPE Gen2 gen2; -/* Line 376 of yacc.c */ + +/* Line 293 of yacc.c */ #line 196 "y.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 @@ -199,28 +199,12 @@ typedef union YYSTYPE # define YYSTYPE_IS_DECLARED 1 #endif -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 */ /* Copy the second part of user declarations. */ -/* Line 379 of yacc.c */ -#line 224 "y.tab.c" + +/* Line 343 of yacc.c */ +#line 208 "y.tab.c" #ifdef short # undef short @@ -273,24 +257,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* 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 /* 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) @@ -326,7 +310,6 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -418,20 +401,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do +/* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -440,20 +423,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 544 +#define YYLAST 553 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 51 +#define YYNTOKENS 52 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 38 +#define YYNNTS 39 /* YYNRULES -- Number of rules. */ -#define YYNRULES 128 +#define YYNRULES 130 /* YYNRULES -- Number of states. */ -#define YYNSTATES 255 +#define YYNSTATES 262 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 287 +#define YYMAXUTOK 288 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -464,16 +447,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 49, 12, 5, 2, - 47, 48, 10, 8, 46, 9, 2, 11, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 43, 44, - 6, 45, 7, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 50, 12, 5, 2, + 48, 49, 10, 8, 47, 9, 2, 11, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 44, 45, + 6, 46, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 50, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 51, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -489,7 +472,7 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 1, 2, 13, 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 + 35, 36, 37, 38, 39, 40, 41, 42, 43 }; #if YYDEBUG @@ -500,65 +483,67 @@ static const yytype_uint16 yyprhs[] = 0, 0, 3, 4, 5, 9, 10, 15, 16, 21, 23, 26, 29, 33, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, - 83, 85, 89, 93, 96, 98, 101, 103, 106, 108, - 112, 118, 122, 128, 131, 133, 136, 138, 140, 144, - 150, 154, 160, 163, 165, 169, 173, 179, 185, 187, - 189, 191, 193, 196, 199, 201, 203, 205, 207, 209, - 214, 217, 220, 222, 224, 226, 228, 230, 232, 235, - 238, 241, 244, 249, 255, 259, 262, 264, 267, 271, - 276, 278, 280, 282, 287, 292, 299, 309, 313, 317, - 322, 328, 337, 339, 346, 352, 360, 361, 364, 367, - 369, 371, 373, 375, 377, 380, 383, 386, 390, 392, - 396, 400, 404, 408, 412, 417, 422, 426, 430 + 85, 86, 88, 92, 96, 99, 101, 104, 106, 109, + 111, 115, 121, 125, 131, 134, 136, 139, 141, 143, + 147, 153, 157, 163, 166, 168, 172, 176, 182, 188, + 194, 196, 198, 200, 202, 205, 208, 210, 212, 214, + 216, 218, 223, 226, 229, 231, 233, 235, 237, 239, + 241, 244, 247, 250, 253, 258, 264, 268, 271, 273, + 276, 280, 285, 287, 289, 291, 296, 301, 308, 318, + 322, 326, 331, 337, 346, 348, 355, 361, 369, 370, + 373, 376, 378, 380, 382, 384, 386, 389, 392, 395, + 399, 401, 405, 409, 413, 417, 421, 426, 431, 435, + 439 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 52, 0, -1, -1, -1, 52, 53, 54, -1, -1, - 41, 43, 55, 54, -1, -1, 40, 43, 56, 54, - -1, 44, -1, 57, 44, -1, 1, 44, -1, 40, - 45, 88, -1, 42, 45, 88, -1, 13, 58, -1, - 14, 62, -1, 15, 61, -1, 16, 59, -1, 17, - 60, -1, 21, 63, -1, 19, 64, -1, 22, 65, - -1, 18, 66, -1, 20, 67, -1, 23, 68, -1, - 24, 69, -1, 25, 70, -1, 26, 71, -1, 27, - 72, -1, -1, 46, -1, 75, 46, 73, -1, 73, - 46, 75, -1, 75, 46, -1, 75, -1, 46, 73, - -1, 73, -1, 46, 76, -1, 76, -1, 78, 46, - 76, -1, 84, 11, 87, 46, 78, -1, 81, 46, - 79, -1, 81, 46, 87, 46, 79, -1, 46, 74, - -1, 74, -1, 10, 84, -1, 58, -1, 62, -1, - 75, 46, 73, -1, 75, 46, 73, 43, 33, -1, - 75, 46, 73, -1, 75, 46, 73, 43, 34, -1, - 75, 46, -1, 75, -1, 75, 46, 73, -1, 81, - 46, 78, -1, 81, 46, 87, 46, 78, -1, 77, - 46, 73, 46, 87, -1, 77, -1, 81, -1, 76, - -1, 83, -1, 10, 77, -1, 10, 82, -1, 77, - -1, 82, -1, 78, -1, 73, -1, 78, -1, 87, - 47, 30, 48, -1, 40, 85, -1, 41, 85, -1, - 32, -1, 35, -1, 33, -1, 36, -1, 39, -1, - 34, -1, 49, 87, -1, 49, 84, -1, 49, 38, - -1, 49, 37, -1, 49, 47, 37, 48, -1, 49, - 47, 9, 37, 48, -1, 49, 9, 37, -1, 49, - 80, -1, 28, -1, 9, 28, -1, 28, 9, 28, - -1, 9, 28, 9, 28, -1, 82, -1, 83, -1, - 87, -1, 87, 47, 33, 48, -1, 87, 47, 39, - 48, -1, 87, 47, 33, 10, 87, 48, -1, 87, - 47, 33, 48, 47, 33, 10, 87, 48, -1, 47, - 33, 48, -1, 47, 39, 48, -1, 87, 47, 34, - 48, -1, 47, 33, 10, 87, 48, -1, 47, 33, - 48, 47, 33, 10, 87, 48, -1, 84, -1, 84, - 47, 33, 10, 87, 48, -1, 40, 85, 47, 86, - 48, -1, 40, 6, 7, 85, 47, 31, 48, -1, - -1, 8, 87, -1, 9, 87, -1, 31, -1, 39, - -1, 29, -1, 28, -1, 42, -1, 9, 87, -1, - 8, 87, -1, 50, 87, -1, 47, 88, 48, -1, - 87, -1, 88, 8, 88, -1, 88, 9, 88, -1, - 88, 10, 88, -1, 88, 11, 88, -1, 88, 12, - 88, -1, 88, 6, 6, 88, -1, 88, 7, 7, - 88, -1, 88, 5, 88, -1, 88, 4, 88, -1, - 88, 3, 88, -1 + 53, 0, -1, -1, -1, 53, 54, 55, -1, -1, + 42, 44, 56, 55, -1, -1, 41, 44, 57, 55, + -1, 45, -1, 58, 45, -1, 1, 45, -1, 41, + 46, 90, -1, 43, 46, 90, -1, 13, 59, -1, + 14, 63, -1, 15, 62, -1, 16, 60, -1, 17, + 61, -1, 21, 64, -1, 19, 65, -1, 22, 66, + -1, 18, 67, -1, 20, 68, -1, 23, 69, -1, + 24, 70, -1, 25, 71, -1, 26, 72, -1, 27, + 73, -1, 28, 74, -1, -1, 47, -1, 77, 47, + 75, -1, 75, 47, 77, -1, 77, 47, -1, 77, + -1, 47, 75, -1, 75, -1, 47, 78, -1, 78, + -1, 80, 47, 78, -1, 86, 11, 89, 47, 80, + -1, 83, 47, 81, -1, 83, 47, 89, 47, 81, + -1, 47, 76, -1, 76, -1, 10, 86, -1, 59, + -1, 63, -1, 77, 47, 75, -1, 77, 47, 75, + 44, 34, -1, 77, 47, 75, -1, 77, 47, 75, + 44, 35, -1, 77, 47, -1, 77, -1, 77, 47, + 75, -1, 83, 47, 80, -1, 83, 47, 89, 47, + 80, -1, 79, 47, 75, 47, 89, -1, 80, 47, + 75, 47, 79, -1, 79, -1, 83, -1, 78, -1, + 85, -1, 10, 79, -1, 10, 84, -1, 79, -1, + 84, -1, 80, -1, 75, -1, 80, -1, 89, 48, + 31, 49, -1, 41, 87, -1, 42, 87, -1, 33, + -1, 36, -1, 34, -1, 37, -1, 40, -1, 35, + -1, 50, 89, -1, 50, 86, -1, 50, 39, -1, + 50, 38, -1, 50, 48, 38, 49, -1, 50, 48, + 9, 38, 49, -1, 50, 9, 38, -1, 50, 82, + -1, 29, -1, 9, 29, -1, 29, 9, 29, -1, + 9, 29, 9, 29, -1, 84, -1, 85, -1, 89, + -1, 89, 48, 34, 49, -1, 89, 48, 40, 49, + -1, 89, 48, 34, 10, 89, 49, -1, 89, 48, + 34, 49, 48, 34, 10, 89, 49, -1, 48, 34, + 49, -1, 48, 40, 49, -1, 89, 48, 35, 49, + -1, 48, 34, 10, 89, 49, -1, 48, 34, 49, + 48, 34, 10, 89, 49, -1, 86, -1, 86, 48, + 34, 10, 89, 49, -1, 41, 87, 48, 88, 49, + -1, 41, 6, 7, 87, 48, 32, 49, -1, -1, + 8, 89, -1, 9, 89, -1, 32, -1, 40, -1, + 30, -1, 29, -1, 43, -1, 9, 89, -1, 8, + 89, -1, 51, 89, -1, 48, 90, 49, -1, 89, + -1, 90, 8, 90, -1, 90, 9, 90, -1, 90, + 10, 90, -1, 90, 11, 90, -1, 90, 12, 90, + -1, 90, 6, 6, 90, -1, 90, 7, 7, 90, + -1, 90, 5, 90, -1, 90, 4, 90, -1, 90, + 3, 90, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -566,21 +551,22 @@ static const yytype_uint16 yyrline[] = { 0, 68, 68, 70, 69, 77, 76, 84, 83, 89, 90, 91, 94, 99, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, - 126, 133, 140, 147, 152, 159, 164, 171, 176, 181, - 188, 196, 201, 209, 214, 219, 228, 229, 232, 237, - 247, 252, 262, 267, 272, 279, 284, 292, 300, 301, - 304, 305, 306, 310, 314, 315, 316, 319, 320, 323, - 329, 338, 347, 352, 357, 362, 367, 372, 379, 385, - 396, 402, 408, 414, 420, 428, 437, 442, 447, 452, - 459, 460, 463, 469, 475, 481, 490, 499, 504, 509, - 515, 523, 533, 537, 546, 553, 562, 565, 569, 575, - 576, 580, 583, 584, 588, 592, 596, 600, 606, 607, - 611, 615, 619, 623, 627, 631, 635, 639, 643 + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 123, 127, 134, 141, 148, 153, 160, 165, 172, 177, + 182, 189, 197, 202, 210, 215, 220, 229, 230, 233, + 238, 248, 253, 263, 268, 273, 280, 285, 293, 301, + 311, 312, 315, 316, 317, 321, 325, 326, 327, 330, + 331, 334, 340, 349, 358, 363, 368, 373, 378, 383, + 390, 396, 407, 413, 419, 425, 431, 439, 448, 453, + 458, 463, 470, 471, 474, 480, 486, 492, 501, 510, + 515, 520, 526, 534, 544, 548, 557, 564, 573, 576, + 580, 586, 587, 591, 594, 595, 599, 603, 607, 611, + 617, 618, 622, 626, 630, 634, 638, 642, 646, 650, + 654 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -588,14 +574,15 @@ static const char *const yytname[] = "$end", "error", "$undefined", "'|'", "'^'", "'&'", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "LTYPE0", "LTYPE1", "LTYPE2", "LTYPE3", "LTYPE4", "LTYPEC", "LTYPED", "LTYPEN", "LTYPER", "LTYPET", "LTYPES", - "LTYPEM", "LTYPEI", "LTYPEG", "LTYPEXC", "LCONST", "LFP", "LPC", "LSB", - "LBREG", "LLREG", "LSREG", "LFREG", "LXREG", "LFCONST", "LSCONST", "LSP", - "LNAME", "LLAB", "LVAR", "':'", "';'", "'='", "','", "'('", "')'", "'$'", - "'~'", "$accept", "prog", "$@1", "line", "$@2", "$@3", "inst", "nonnon", - "rimrem", "remrim", "rimnon", "nonrem", "nonrel", "spec1", "spec2", - "spec3", "spec4", "spec5", "spec6", "spec7", "spec8", "spec9", "rem", - "rom", "rim", "rel", "reg", "imm", "imm2", "con2", "mem", "omem", "nmem", - "nam", "offset", "pointer", "con", "expr", YY_NULL + "LTYPEM", "LTYPEI", "LTYPEG", "LTYPEXC", "LTYPEX", "LCONST", "LFP", + "LPC", "LSB", "LBREG", "LLREG", "LSREG", "LFREG", "LXREG", "LFCONST", + "LSCONST", "LSP", "LNAME", "LLAB", "LVAR", "':'", "';'", "'='", "','", + "'('", "')'", "'$'", "'~'", "$accept", "prog", "$@1", "line", "$@2", + "$@3", "inst", "nonnon", "rimrem", "remrim", "rimnon", "nonrem", + "nonrel", "spec1", "spec2", "spec3", "spec4", "spec5", "spec6", "spec7", + "spec8", "spec9", "spec10", "rem", "rom", "rim", "rel", "reg", "imm", + "imm2", "con2", "mem", "omem", "nmem", "nam", "offset", "pointer", "con", + "expr", 0 }; #endif @@ -608,27 +595,28 @@ static const yytype_uint16 yytoknum[] = 42, 47, 37, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 58, 59, 61, 44, 40, 41, 36, - 126 + 285, 286, 287, 288, 58, 59, 61, 44, 40, 41, + 36, 126 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 51, 52, 53, 52, 55, 54, 56, 54, 54, - 54, 54, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, - 58, 59, 60, 61, 61, 62, 62, 63, 63, 63, - 64, 65, 65, 66, 66, 66, 67, 67, 68, 68, - 69, 69, 70, 70, 70, 71, 71, 72, 73, 73, - 74, 74, 74, 74, 74, 74, 74, 75, 75, 76, - 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, - 78, 78, 78, 78, 78, 79, 80, 80, 80, 80, - 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 83, 83, 84, 84, 85, 85, 85, 86, - 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88 + 0, 52, 53, 54, 53, 56, 55, 57, 55, 55, + 55, 55, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 59, 59, 60, 61, 62, 62, 63, 63, 64, 64, + 64, 65, 66, 66, 67, 67, 67, 68, 68, 69, + 69, 70, 70, 71, 71, 71, 72, 72, 73, 74, + 75, 75, 76, 76, 76, 76, 76, 76, 76, 77, + 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, + 80, 80, 80, 80, 80, 80, 80, 81, 82, 82, + 82, 82, 83, 83, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 85, 85, 86, 86, 87, 87, + 87, 88, 88, 88, 89, 89, 89, 89, 89, 89, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -636,17 +624,18 @@ static const yytype_uint8 yyr2[] = { 0, 2, 0, 0, 3, 0, 4, 0, 4, 1, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 1, 3, 3, 2, 1, 2, 1, 2, 1, 3, - 5, 3, 5, 2, 1, 2, 1, 1, 3, 5, - 3, 5, 2, 1, 3, 3, 5, 5, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 4, - 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 4, 5, 3, 2, 1, 2, 3, 4, - 1, 1, 1, 4, 4, 6, 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 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 3, 3, 2, 1, 2, 1, 2, 1, + 3, 5, 3, 5, 2, 1, 2, 1, 1, 3, + 5, 3, 5, 2, 1, 3, 3, 5, 5, 5, + 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, + 1, 4, 2, 2, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 4, 5, 3, 2, 1, 2, + 3, 4, 1, 1, 1, 4, 4, 6, 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 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -654,243 +643,248 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 3, 1, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 4, 0, 11, 30, 14, 0, - 0, 112, 72, 74, 77, 73, 75, 76, 106, 113, - 0, 0, 0, 15, 36, 58, 59, 90, 91, 102, - 92, 0, 16, 67, 34, 68, 17, 0, 18, 0, - 0, 106, 106, 0, 22, 44, 60, 64, 66, 65, - 61, 92, 20, 0, 30, 46, 47, 23, 106, 0, - 0, 19, 38, 0, 0, 21, 0, 24, 0, 25, - 0, 26, 53, 27, 0, 28, 0, 7, 0, 5, - 0, 10, 115, 114, 0, 0, 0, 0, 35, 0, - 0, 118, 0, 116, 0, 0, 0, 81, 80, 0, - 79, 78, 33, 0, 0, 62, 63, 45, 70, 71, - 0, 43, 0, 0, 70, 37, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 12, 0, 13, 106, 107, - 108, 0, 0, 97, 98, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, - 84, 0, 0, 31, 32, 0, 0, 39, 0, 41, - 0, 48, 50, 54, 55, 0, 0, 8, 6, 0, - 111, 109, 110, 0, 0, 0, 128, 127, 126, 0, - 0, 119, 120, 121, 122, 123, 0, 0, 93, 99, - 94, 0, 82, 69, 0, 0, 86, 85, 0, 0, - 0, 0, 0, 0, 104, 100, 0, 124, 125, 0, - 0, 0, 83, 40, 87, 0, 42, 49, 51, 56, - 57, 0, 0, 103, 95, 0, 0, 88, 105, 0, - 0, 89, 101, 0, 96 + 2, 3, 1, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 4, 0, 11, 31, 14, + 0, 0, 114, 74, 76, 79, 75, 77, 78, 108, + 115, 0, 0, 0, 15, 37, 60, 61, 92, 93, + 104, 94, 0, 16, 69, 35, 70, 17, 0, 18, + 0, 0, 108, 108, 0, 22, 45, 62, 66, 68, + 67, 63, 94, 20, 0, 31, 47, 48, 23, 108, + 0, 0, 19, 39, 0, 0, 21, 0, 24, 0, + 25, 0, 26, 54, 27, 0, 28, 0, 29, 0, + 7, 0, 5, 0, 10, 117, 116, 0, 0, 0, + 0, 36, 0, 0, 120, 0, 118, 0, 0, 0, + 83, 82, 0, 81, 80, 34, 0, 0, 64, 65, + 46, 72, 73, 0, 44, 0, 0, 72, 38, 0, + 0, 0, 0, 0, 53, 0, 0, 0, 0, 12, + 0, 13, 108, 109, 110, 0, 0, 99, 100, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 0, 0, 0, 0, 86, 0, 0, 32, 33, 0, + 0, 40, 0, 42, 0, 49, 51, 55, 56, 0, + 0, 0, 8, 6, 0, 113, 111, 112, 0, 0, + 0, 130, 129, 128, 0, 0, 121, 122, 123, 124, + 125, 0, 0, 95, 101, 96, 0, 84, 71, 0, + 0, 88, 87, 0, 0, 0, 0, 0, 0, 0, + 106, 102, 0, 126, 127, 0, 0, 0, 85, 41, + 89, 0, 43, 50, 52, 57, 58, 59, 0, 0, + 105, 97, 0, 0, 90, 107, 0, 0, 91, 103, + 0, 98 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 3, 24, 146, 144, 25, 28, 56, 58, - 52, 43, 81, 72, 85, 64, 77, 87, 89, 91, - 93, 95, 53, 65, 54, 66, 45, 55, 179, 217, - 46, 47, 48, 49, 107, 193, 50, 112 + -1, 1, 3, 25, 150, 148, 26, 29, 57, 59, + 53, 44, 82, 73, 86, 65, 78, 88, 90, 92, + 94, 96, 98, 54, 66, 55, 67, 46, 56, 183, + 222, 47, 48, 49, 50, 110, 198, 51, 115 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -96 +#define YYPACT_NINF -100 static const yytype_int16 yypact[] = { - -96, 34, -96, 158, -38, -30, 267, 288, 288, 338, - 195, 20, 317, 210, 428, 288, 288, 288, 428, 68, - -6, 2, 42, -96, -96, 45, -96, -96, -96, 449, - 449, -96, -96, -96, -96, -96, -96, -96, 127, -96, - 338, 388, 449, -96, -96, -96, -96, -96, -96, 46, - 47, 382, -96, -96, 52, -96, -96, 59, -96, 62, - 338, 127, 19, 238, -96, -96, -96, -96, -96, -96, - -96, 63, -96, 103, 338, -96, -96, -96, 19, 403, - 449, -96, -96, 69, 78, -96, 81, -96, 94, -96, - 97, -96, 98, -96, 102, -96, 111, -96, 449, -96, - 449, -96, -96, -96, 142, 449, 449, 113, -96, 23, - 110, -96, 74, -96, 137, 58, 432, -96, -96, 439, - -96, -96, -96, 338, 288, -96, -96, -96, 113, -96, - 367, -96, 13, 449, -96, -96, 403, 156, 16, 338, - 338, 338, 443, 338, 158, 523, 158, 523, 19, -96, - -96, 11, 449, 140, -96, 449, 449, 449, 182, 194, - 449, 449, 449, 449, 449, -96, 197, 25, 160, 161, - -96, 475, 162, -96, -96, 163, 168, -96, 8, -96, - 169, 173, 174, -96, -96, 175, 176, -96, -96, 177, - -96, -96, -96, 172, 178, 192, 532, 157, 498, 449, - 449, 64, 64, -96, -96, -96, 449, 449, 186, -96, - -96, 191, -96, -96, 200, 215, 244, -96, 205, 222, - 224, 200, 449, 230, -96, -96, 252, 183, 183, 216, - 217, 234, -96, -96, 254, 240, -96, -96, -96, -96, - -96, 221, 449, -96, -96, 271, 255, -96, -96, 236, - 449, -96, -96, 241, -96 + -100, 22, -100, 165, -32, -22, 263, 286, 286, 332, + 195, -1, 309, 212, 414, 286, 286, 286, 414, 81, + 7, -16, 24, -12, -100, -100, -4, -100, -100, -100, + 485, 485, -100, -100, -100, -100, -100, -100, -100, 39, + -100, 332, 385, 485, -100, -100, -100, -100, -100, -100, + 46, 65, 370, -100, -100, 72, -100, -100, 75, -100, + 76, 332, 39, 102, 240, -100, -100, -100, -100, -100, + -100, -100, 77, -100, 117, 332, -100, -100, -100, 102, + 408, 485, -100, -100, 83, 85, -100, 89, -100, 91, + -100, 92, -100, 97, -100, 98, -100, 100, -100, 101, + -100, 485, -100, 485, -100, -100, -100, 135, 485, 485, + 104, -100, -6, 113, -100, 71, -100, 119, 32, 423, + -100, -100, 438, -100, -100, -100, 332, 286, -100, -100, + -100, 104, -100, 355, -100, 29, 485, -100, -100, 408, + 146, 455, 332, 332, 332, 461, 332, 332, 165, 164, + 165, 164, 102, -100, -100, 6, 485, 161, -100, 485, + 485, 485, 206, 207, 485, 485, 485, 485, 485, -100, + 203, 4, 166, 167, -100, 470, 173, -100, -100, 174, + 178, -100, 15, -100, 179, 183, 189, -100, -100, 187, + 193, 197, -100, -100, 204, -100, -100, -100, 202, 208, + 222, 533, 541, 78, 485, 485, 95, 95, -100, -100, + -100, 485, 485, 210, -100, -100, 215, -100, -100, 7, + 232, 256, -100, 216, 233, 235, 7, 485, 81, 236, + -100, -100, 268, 188, 188, 230, 237, 250, -100, -100, + 276, 258, -100, -100, -100, -100, -100, -100, 244, 485, + -100, -100, 279, 272, -100, -100, 253, 485, -100, -100, + 259, -100 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -96, -96, -96, -95, -96, -96, -96, 270, -96, -96, - -96, 274, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -2, 227, 6, -12, -1, -8, 73, -96, - 12, 1, 5, -3, -49, -96, -10, -44 + -100, -100, -100, -99, -100, -100, -100, 293, -100, -100, + -100, 295, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, 17, 245, 0, -7, -9, -8, 90, + -100, 13, 1, -3, -2, -44, -100, -10, -64 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 -static const yytype_uint8 yytable[] = +static const yytype_uint16 yytable[] = { - 71, 82, 68, 84, 44, 83, 26, 59, 73, 67, - 44, 69, 128, 129, 57, 70, 27, 215, 96, 102, - 103, 88, 90, 92, 29, 30, 86, 105, 106, 134, - 94, 111, 113, 152, 2, 207, 216, 97, 108, 98, - 190, 121, 191, 175, 31, 99, 167, 168, 120, 187, - 192, 188, 169, 71, 145, 68, 147, 127, 39, 125, - 38, 126, 67, 80, 69, 178, 42, 135, 70, 84, - 111, 153, 108, 208, 162, 163, 164, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 100, 111, 101, - 111, 167, 168, 114, 115, 149, 150, 169, 122, 189, - 32, 33, 34, 35, 36, 123, 103, 37, 124, 111, - 132, 196, 197, 198, 133, 136, 201, 202, 203, 204, - 205, 173, 165, 176, 177, 137, 84, 138, 180, 125, - 174, 126, 185, 104, 184, 105, 106, 181, 182, 183, - 139, 186, 194, 140, 141, 111, 111, 111, 142, 148, - 111, 111, 111, 111, 111, 227, 228, 143, 154, 4, - 151, 103, 157, 158, 159, 160, 161, 162, 163, 164, - 166, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 175, 195, 199, 111, - 111, 160, 161, 162, 163, 164, 229, 230, 20, 21, - 22, 200, 23, 29, 30, 60, 233, 206, 209, 210, - 212, 213, 240, 239, 214, 218, 219, 220, 29, 30, - 224, 221, 222, 31, 223, 226, 225, 32, 33, 34, - 35, 36, 249, 231, 37, 61, 62, 39, 31, 232, - 253, 63, 41, 234, 51, 42, 29, 30, 130, 51, - 78, 62, 39, 235, 178, 237, 79, 80, 238, 51, - 42, 241, 242, 246, 243, 244, 31, 245, 247, 248, - 32, 33, 34, 35, 36, 29, 30, 37, 61, 62, - 39, 250, 75, 251, 252, 41, 76, 51, 42, 254, - 131, 236, 0, 0, 0, 31, 29, 30, 0, 32, - 33, 34, 35, 36, 0, 0, 37, 38, 0, 39, - 0, 0, 0, 40, 41, 0, 31, 42, 0, 0, - 32, 33, 34, 35, 36, 29, 30, 37, 38, 0, - 39, 0, 0, 0, 0, 41, 0, 51, 42, 0, - 0, 0, 0, 0, 0, 31, 29, 30, 0, 32, - 33, 34, 35, 36, 0, 0, 37, 38, 0, 39, - 0, 0, 0, 74, 41, 0, 31, 42, 0, 0, - 32, 33, 34, 35, 36, 29, 30, 37, 38, 0, - 39, 0, 0, 0, 0, 41, 0, 0, 42, 0, - 29, 116, 0, 0, 0, 31, 29, 30, 0, 32, - 33, 34, 35, 36, 0, 0, 37, 0, 0, 39, - 31, 29, 30, 0, 41, 0, 31, 42, 0, 117, - 118, 109, 38, 0, 39, 0, 0, 110, 0, 119, - 39, 31, 42, 0, 0, 80, 29, 30, 42, 0, - 29, 30, 0, 78, 62, 39, 0, 29, 171, 0, - 80, 29, 30, 42, 0, 0, 31, 29, 30, 0, - 31, 0, 0, 0, 0, 0, 0, 31, 38, 170, - 39, 31, 0, 0, 39, 41, 172, 31, 42, 80, - 0, 39, 42, 29, 30, 39, 80, 0, 0, 42, - 80, 39, 51, 42, 0, 0, 80, 0, 0, 42, - 0, 0, 0, 31, 158, 159, 160, 161, 162, 163, - 164, 0, 211, 0, 0, 0, 0, 39, 0, 0, - 0, 0, 80, 0, 0, 42, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 156, 157, 158, 159, - 160, 161, 162, 163, 164 + 72, 68, 69, 85, 156, 84, 83, 71, 58, 74, + 97, 70, 99, 27, 212, 89, 91, 93, 131, 132, + 105, 106, 2, 45, 220, 28, 60, 87, 100, 45, + 101, 95, 114, 116, 103, 137, 195, 149, 196, 151, + 39, 104, 124, 157, 221, 107, 197, 108, 109, 192, + 123, 193, 128, 213, 72, 68, 69, 52, 111, 130, + 179, 71, 129, 171, 172, 70, 171, 172, 102, 173, + 85, 114, 173, 138, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 162, 163, 164, 165, 166, 167, + 168, 114, 111, 114, 117, 201, 202, 203, 153, 154, + 206, 207, 208, 209, 210, 166, 167, 168, 194, 106, + 108, 109, 114, 118, 33, 34, 35, 36, 37, 125, + 169, 38, 126, 127, 128, 135, 180, 178, 136, 85, + 139, 184, 181, 140, 129, 189, 141, 188, 142, 143, + 233, 234, 152, 177, 144, 145, 199, 146, 147, 114, + 114, 114, 155, 170, 114, 114, 114, 114, 114, 185, + 186, 187, 158, 190, 191, 106, 4, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 179, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 114, 114, 164, 165, 166, 167, + 168, 235, 236, 30, 31, 61, 21, 22, 23, 200, + 24, 239, 204, 211, 205, 214, 215, 246, 245, 247, + 30, 31, 217, 218, 32, 219, 223, 224, 33, 34, + 35, 36, 37, 225, 226, 38, 62, 63, 40, 256, + 227, 32, 64, 42, 228, 52, 43, 260, 30, 31, + 133, 230, 229, 79, 63, 40, 232, 231, 237, 80, + 81, 240, 52, 43, 238, 241, 182, 243, 248, 32, + 244, 30, 31, 33, 34, 35, 36, 37, 249, 250, + 38, 62, 63, 40, 252, 253, 251, 254, 42, 257, + 52, 43, 32, 255, 30, 31, 33, 34, 35, 36, + 37, 258, 259, 38, 39, 76, 40, 77, 261, 134, + 41, 42, 0, 242, 43, 32, 0, 30, 31, 33, + 34, 35, 36, 37, 0, 0, 38, 39, 0, 40, + 0, 0, 0, 0, 42, 0, 52, 43, 32, 0, + 30, 31, 33, 34, 35, 36, 37, 0, 0, 38, + 39, 0, 40, 0, 0, 0, 75, 42, 0, 0, + 43, 32, 0, 30, 31, 33, 34, 35, 36, 37, + 0, 0, 38, 39, 0, 40, 0, 0, 30, 119, + 42, 0, 0, 43, 32, 0, 0, 0, 33, 34, + 35, 36, 37, 30, 31, 38, 0, 0, 40, 32, + 0, 0, 0, 42, 0, 0, 43, 0, 120, 121, + 0, 39, 0, 40, 32, 0, 30, 31, 122, 112, + 0, 43, 30, 31, 0, 113, 0, 0, 40, 0, + 0, 30, 31, 81, 0, 0, 43, 32, 0, 0, + 0, 0, 0, 32, 0, 0, 30, 175, 0, 79, + 63, 40, 32, 0, 0, 39, 81, 40, 0, 43, + 0, 174, 42, 30, 31, 43, 40, 32, 0, 30, + 31, 81, 0, 0, 43, 0, 176, 0, 30, 31, + 0, 40, 0, 0, 32, 0, 81, 0, 0, 43, + 32, 0, 0, 30, 31, 0, 0, 0, 40, 32, + 0, 0, 0, 81, 40, 182, 43, 0, 216, 81, + 0, 52, 43, 40, 32, 0, 0, 0, 81, 0, + 0, 43, 0, 0, 0, 0, 0, 0, 40, 0, + 0, 0, 0, 81, 0, 0, 43, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 161, 162, 163, 164, + 165, 166, 167, 168 }; -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-96))) +#define yypact_value_is_default(yystate) \ + ((yystate) == (-100)) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(yytable_value) \ YYID (0) static const yytype_int16 yycheck[] = { - 10, 13, 10, 13, 6, 13, 44, 9, 11, 10, - 12, 10, 61, 62, 8, 10, 46, 9, 19, 29, - 30, 15, 16, 17, 8, 9, 14, 8, 9, 78, - 18, 41, 42, 10, 0, 10, 28, 43, 40, 45, - 29, 51, 31, 30, 28, 43, 33, 34, 51, 144, - 39, 146, 39, 63, 98, 63, 100, 60, 42, 60, - 40, 60, 63, 47, 63, 49, 50, 79, 63, 79, - 80, 48, 74, 48, 10, 11, 12, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 45, 98, 44, - 100, 33, 34, 47, 47, 105, 106, 39, 46, 148, - 32, 33, 34, 35, 36, 46, 116, 39, 46, 119, - 47, 155, 156, 157, 11, 46, 160, 161, 162, 163, - 164, 123, 48, 133, 136, 47, 136, 46, 138, 130, - 124, 130, 142, 6, 142, 8, 9, 139, 140, 141, - 46, 143, 152, 46, 46, 155, 156, 157, 46, 7, - 160, 161, 162, 163, 164, 199, 200, 46, 48, 1, - 47, 171, 5, 6, 7, 8, 9, 10, 11, 12, - 33, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 30, 47, 6, 199, - 200, 8, 9, 10, 11, 12, 206, 207, 40, 41, - 42, 7, 44, 8, 9, 10, 214, 10, 48, 48, - 48, 48, 222, 221, 46, 46, 43, 43, 8, 9, - 48, 46, 46, 28, 47, 33, 48, 32, 33, 34, - 35, 36, 242, 47, 39, 40, 41, 42, 28, 48, - 250, 46, 47, 28, 49, 50, 8, 9, 10, 49, - 40, 41, 42, 9, 49, 33, 46, 47, 34, 49, - 50, 31, 10, 9, 48, 48, 28, 33, 28, 48, - 32, 33, 34, 35, 36, 8, 9, 39, 40, 41, - 42, 10, 12, 28, 48, 47, 12, 49, 50, 48, - 63, 218, -1, -1, -1, 28, 8, 9, -1, 32, - 33, 34, 35, 36, -1, -1, 39, 40, -1, 42, - -1, -1, -1, 46, 47, -1, 28, 50, -1, -1, - 32, 33, 34, 35, 36, 8, 9, 39, 40, -1, - 42, -1, -1, -1, -1, 47, -1, 49, 50, -1, - -1, -1, -1, -1, -1, 28, 8, 9, -1, 32, - 33, 34, 35, 36, -1, -1, 39, 40, -1, 42, - -1, -1, -1, 46, 47, -1, 28, 50, -1, -1, - 32, 33, 34, 35, 36, 8, 9, 39, 40, -1, - 42, -1, -1, -1, -1, 47, -1, -1, 50, -1, - 8, 9, -1, -1, -1, 28, 8, 9, -1, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, 42, - 28, 8, 9, -1, 47, -1, 28, 50, -1, 37, - 38, 33, 40, -1, 42, -1, -1, 39, -1, 47, - 42, 28, 50, -1, -1, 47, 8, 9, 50, -1, - 8, 9, -1, 40, 41, 42, -1, 8, 9, -1, - 47, 8, 9, 50, -1, -1, 28, 8, 9, -1, - 28, -1, -1, -1, -1, -1, -1, 28, 40, 37, - 42, 28, -1, -1, 42, 47, 37, 28, 50, 47, - -1, 42, 50, 8, 9, 42, 47, -1, -1, 50, - 47, 42, 49, 50, -1, -1, 47, -1, -1, 50, - -1, -1, -1, 28, 6, 7, 8, 9, 10, 11, - 12, -1, 37, -1, -1, -1, -1, 42, -1, -1, - -1, -1, 47, -1, -1, 50, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, - 8, 9, 10, 11, 12 + 10, 10, 10, 13, 10, 13, 13, 10, 8, 11, + 19, 10, 20, 45, 10, 15, 16, 17, 62, 63, + 30, 31, 0, 6, 9, 47, 9, 14, 44, 12, + 46, 18, 42, 43, 46, 79, 30, 101, 32, 103, + 41, 45, 52, 49, 29, 6, 40, 8, 9, 148, + 52, 150, 61, 49, 64, 64, 64, 50, 41, 61, + 31, 64, 61, 34, 35, 64, 34, 35, 44, 40, + 80, 81, 40, 80, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 6, 7, 8, 9, 10, 11, + 12, 101, 75, 103, 48, 159, 160, 161, 108, 109, + 164, 165, 166, 167, 168, 10, 11, 12, 152, 119, + 8, 9, 122, 48, 33, 34, 35, 36, 37, 47, + 49, 40, 47, 47, 133, 48, 136, 127, 11, 139, + 47, 141, 139, 48, 133, 145, 47, 145, 47, 47, + 204, 205, 7, 126, 47, 47, 156, 47, 47, 159, + 160, 161, 48, 34, 164, 165, 166, 167, 168, 142, + 143, 144, 49, 146, 147, 175, 1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 31, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 204, 205, 8, 9, 10, 11, + 12, 211, 212, 8, 9, 10, 41, 42, 43, 48, + 45, 219, 6, 10, 7, 49, 49, 227, 226, 228, + 8, 9, 49, 49, 29, 47, 47, 44, 33, 34, + 35, 36, 37, 44, 47, 40, 41, 42, 43, 249, + 47, 29, 47, 48, 47, 50, 51, 257, 8, 9, + 10, 49, 48, 41, 42, 43, 34, 49, 48, 47, + 48, 29, 50, 51, 49, 9, 50, 34, 32, 29, + 35, 8, 9, 33, 34, 35, 36, 37, 10, 49, + 40, 41, 42, 43, 34, 9, 49, 29, 48, 10, + 50, 51, 29, 49, 8, 9, 33, 34, 35, 36, + 37, 29, 49, 40, 41, 12, 43, 12, 49, 64, + 47, 48, -1, 223, 51, 29, -1, 8, 9, 33, + 34, 35, 36, 37, -1, -1, 40, 41, -1, 43, + -1, -1, -1, -1, 48, -1, 50, 51, 29, -1, + 8, 9, 33, 34, 35, 36, 37, -1, -1, 40, + 41, -1, 43, -1, -1, -1, 47, 48, -1, -1, + 51, 29, -1, 8, 9, 33, 34, 35, 36, 37, + -1, -1, 40, 41, -1, 43, -1, -1, 8, 9, + 48, -1, -1, 51, 29, -1, -1, -1, 33, 34, + 35, 36, 37, 8, 9, 40, -1, -1, 43, 29, + -1, -1, -1, 48, -1, -1, 51, -1, 38, 39, + -1, 41, -1, 43, 29, -1, 8, 9, 48, 34, + -1, 51, 8, 9, -1, 40, -1, -1, 43, -1, + -1, 8, 9, 48, -1, -1, 51, 29, -1, -1, + -1, -1, -1, 29, -1, -1, 8, 9, -1, 41, + 42, 43, 29, -1, -1, 41, 48, 43, -1, 51, + -1, 38, 48, 8, 9, 51, 43, 29, -1, 8, + 9, 48, -1, -1, 51, -1, 38, -1, 8, 9, + -1, 43, -1, -1, 29, -1, 48, -1, -1, 51, + 29, -1, -1, 8, 9, -1, -1, -1, 43, 29, + -1, -1, -1, 48, 43, 50, 51, -1, 38, 48, + -1, 50, 51, 43, 29, -1, -1, -1, 48, -1, + -1, 51, -1, -1, -1, -1, -1, -1, 43, -1, + -1, -1, -1, 48, -1, -1, 51, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 5, 6, 7, 8, + 9, 10, 11, 12 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 52, 0, 53, 1, 13, 14, 15, 16, 17, + 0, 53, 0, 54, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 40, 41, 42, 44, 54, 57, 44, 46, 58, 8, - 9, 28, 32, 33, 34, 35, 36, 39, 40, 42, - 46, 47, 50, 62, 73, 77, 81, 82, 83, 84, - 87, 49, 61, 73, 75, 78, 59, 75, 60, 73, - 10, 40, 41, 46, 66, 74, 76, 77, 78, 82, - 83, 87, 64, 84, 46, 58, 62, 67, 40, 46, - 47, 63, 76, 78, 87, 65, 81, 68, 75, 69, - 75, 70, 75, 71, 81, 72, 77, 43, 45, 43, - 45, 44, 87, 87, 6, 8, 9, 85, 73, 33, - 39, 87, 88, 87, 47, 47, 9, 37, 38, 47, - 84, 87, 46, 46, 46, 77, 82, 84, 85, 85, - 10, 74, 47, 11, 85, 76, 46, 47, 46, 46, - 46, 46, 46, 46, 56, 88, 55, 88, 7, 87, - 87, 47, 10, 48, 48, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 48, 33, 33, 34, 39, - 37, 9, 37, 73, 75, 30, 87, 76, 49, 79, - 87, 73, 73, 73, 78, 87, 73, 54, 54, 85, - 29, 31, 39, 86, 87, 47, 88, 88, 88, 6, - 7, 88, 88, 88, 88, 88, 10, 10, 48, 48, - 48, 37, 48, 48, 46, 9, 28, 80, 46, 43, - 43, 46, 46, 47, 48, 48, 33, 88, 88, 87, - 87, 47, 48, 78, 28, 9, 79, 33, 34, 78, - 87, 31, 10, 48, 48, 33, 9, 28, 48, 87, - 10, 28, 48, 87, 48 + 28, 41, 42, 43, 45, 55, 58, 45, 47, 59, + 8, 9, 29, 33, 34, 35, 36, 37, 40, 41, + 43, 47, 48, 51, 63, 75, 79, 83, 84, 85, + 86, 89, 50, 62, 75, 77, 80, 60, 77, 61, + 75, 10, 41, 42, 47, 67, 76, 78, 79, 80, + 84, 85, 89, 65, 86, 47, 59, 63, 68, 41, + 47, 48, 64, 78, 80, 89, 66, 83, 69, 77, + 70, 77, 71, 77, 72, 83, 73, 79, 74, 80, + 44, 46, 44, 46, 45, 89, 89, 6, 8, 9, + 87, 75, 34, 40, 89, 90, 89, 48, 48, 9, + 38, 39, 48, 86, 89, 47, 47, 47, 79, 84, + 86, 87, 87, 10, 76, 48, 11, 87, 78, 47, + 48, 47, 47, 47, 47, 47, 47, 47, 57, 90, + 56, 90, 7, 89, 89, 48, 10, 49, 49, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 49, + 34, 34, 35, 40, 38, 9, 38, 75, 77, 31, + 89, 78, 50, 81, 89, 75, 75, 75, 80, 89, + 75, 75, 55, 55, 87, 30, 32, 40, 88, 89, + 48, 90, 90, 90, 6, 7, 90, 90, 90, 90, + 90, 10, 10, 49, 49, 49, 38, 49, 49, 47, + 9, 29, 82, 47, 44, 44, 47, 47, 47, 48, + 49, 49, 34, 90, 90, 89, 89, 48, 49, 80, + 29, 9, 81, 34, 35, 80, 89, 79, 32, 10, + 49, 49, 34, 9, 29, 49, 89, 10, 29, 49, + 89, 49 }; #define yyerrok (yyerrstatus = 0) @@ -920,35 +914,62 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (1); \ + 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 @@ -998,8 +1019,6 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) YYSTYPE const * const yyvaluep; #endif { - FILE *yyo = yyoutput; - YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT @@ -1251,12 +1270,12 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULL; + const char *yyformat = 0; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1316,7 +1335,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + yysize1 = yysize + yytnamerr (0, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -1408,22 +1427,27 @@ yydestruct (yymsg, yytype, yyvaluep) } +/* 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 YY_INITIAL_VALUE(yyval_default); +YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; @@ -1463,7 +1487,7 @@ yyparse () `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks through separate pointers, to allow yyoverflow + Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1481,7 +1505,7 @@ yyparse () int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1499,8 +1523,9 @@ yyparse () Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1509,6 +1534,14 @@ 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; /*------------------------------------------------------------. @@ -1649,9 +1682,7 @@ yybackup: yychar = YYEMPTY; yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1688,7 +1719,8 @@ yyreduce: switch (yyn) { case 3: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 70 "a.y" { stmtline = lineno; @@ -1696,7 +1728,8 @@ yyreduce: break; case 5: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 77 "a.y" { if((yyvsp[(1) - (2)].sym)->value != pc) @@ -1706,7 +1739,8 @@ yyreduce: break; case 7: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 84 "a.y" { (yyvsp[(1) - (2)].sym)->type = LLAB; @@ -1715,7 +1749,8 @@ yyreduce: break; case 12: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 95 "a.y" { (yyvsp[(1) - (3)].sym)->type = LVAR; @@ -1724,7 +1759,8 @@ yyreduce: break; case 13: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 100 "a.y" { if((yyvsp[(1) - (3)].sym)->value != (yyvsp[(3) - (3)].lval)) @@ -1734,197 +1770,231 @@ yyreduce: break; case 14: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 105 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 15: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 106 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 16: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 107 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 17: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 108 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 18: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 109 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 19: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 110 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 20: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 111 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 21: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 112 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 22: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 113 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 23: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 114 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 24: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 115 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 25: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 116 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 26: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 117 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 27: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 118 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 28: -/* Line 1778 of yacc.c */ + +/* Line 1806 of yacc.c */ #line 119 "a.y" { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } break; case 29: -/* Line 1778 of yacc.c */ -#line 122 "a.y" + +/* Line 1806 of yacc.c */ +#line 120 "a.y" + { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].gen2)); } + break; + + case 30: + +/* Line 1806 of yacc.c */ +#line 123 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = nullgen; } break; - case 30: -/* Line 1778 of yacc.c */ -#line 127 "a.y" + case 31: + +/* Line 1806 of yacc.c */ +#line 128 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = nullgen; } break; - case 31: -/* Line 1778 of yacc.c */ -#line 134 "a.y" + case 32: + +/* Line 1806 of yacc.c */ +#line 135 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 32: -/* Line 1778 of yacc.c */ -#line 141 "a.y" + case 33: + +/* Line 1806 of yacc.c */ +#line 142 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 33: -/* Line 1778 of yacc.c */ -#line 148 "a.y" + case 34: + +/* Line 1806 of yacc.c */ +#line 149 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (2)].gen); (yyval.gen2).to = nullgen; } break; - case 34: -/* Line 1778 of yacc.c */ -#line 153 "a.y" + case 35: + +/* Line 1806 of yacc.c */ +#line 154 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (1)].gen); (yyval.gen2).to = nullgen; } break; - case 35: -/* Line 1778 of yacc.c */ -#line 160 "a.y" + case 36: + +/* Line 1806 of yacc.c */ +#line 161 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(2) - (2)].gen); } break; - case 36: -/* Line 1778 of yacc.c */ -#line 165 "a.y" + case 37: + +/* Line 1806 of yacc.c */ +#line 166 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(1) - (1)].gen); } break; - case 37: -/* Line 1778 of yacc.c */ -#line 172 "a.y" + case 38: + +/* Line 1806 of yacc.c */ +#line 173 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(2) - (2)].gen); } break; - case 38: -/* Line 1778 of yacc.c */ -#line 177 "a.y" + case 39: + +/* Line 1806 of yacc.c */ +#line 178 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(1) - (1)].gen); } break; - case 39: -/* Line 1778 of yacc.c */ -#line 182 "a.y" + case 40: + +/* Line 1806 of yacc.c */ +#line 183 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 40: -/* Line 1778 of yacc.c */ -#line 189 "a.y" + case 41: + +/* Line 1806 of yacc.c */ +#line 190 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).from.scale = (yyvsp[(3) - (5)].lval); @@ -1932,18 +2002,20 @@ yyreduce: } break; - case 41: -/* Line 1778 of yacc.c */ -#line 197 "a.y" + case 42: + +/* Line 1806 of yacc.c */ +#line 198 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 42: -/* Line 1778 of yacc.c */ -#line 202 "a.y" + case 43: + +/* Line 1806 of yacc.c */ +#line 203 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).from.scale = (yyvsp[(3) - (5)].lval); @@ -1951,27 +2023,30 @@ yyreduce: } break; - case 43: -/* Line 1778 of yacc.c */ -#line 210 "a.y" + case 44: + +/* Line 1806 of yacc.c */ +#line 211 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(2) - (2)].gen); } break; - case 44: -/* Line 1778 of yacc.c */ -#line 215 "a.y" + case 45: + +/* Line 1806 of yacc.c */ +#line 216 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(1) - (1)].gen); } break; - case 45: -/* Line 1778 of yacc.c */ -#line 220 "a.y" + case 46: + +/* Line 1806 of yacc.c */ +#line 221 "a.y" { (yyval.gen2).from = nullgen; (yyval.gen2).to = (yyvsp[(2) - (2)].gen); @@ -1980,18 +2055,20 @@ yyreduce: } break; - case 48: -/* Line 1778 of yacc.c */ -#line 233 "a.y" + case 49: + +/* Line 1806 of yacc.c */ +#line 234 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 49: -/* Line 1778 of yacc.c */ -#line 238 "a.y" + case 50: + +/* Line 1806 of yacc.c */ +#line 239 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).to = (yyvsp[(3) - (5)].gen); @@ -2001,18 +2078,20 @@ yyreduce: } break; - case 50: -/* Line 1778 of yacc.c */ -#line 248 "a.y" + case 51: + +/* Line 1806 of yacc.c */ +#line 249 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 51: -/* Line 1778 of yacc.c */ -#line 253 "a.y" + case 52: + +/* Line 1806 of yacc.c */ +#line 254 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).to = (yyvsp[(3) - (5)].gen); @@ -2022,45 +2101,50 @@ yyreduce: } break; - case 52: -/* Line 1778 of yacc.c */ -#line 263 "a.y" + case 53: + +/* Line 1806 of yacc.c */ +#line 264 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (2)].gen); (yyval.gen2).to = nullgen; } break; - case 53: -/* Line 1778 of yacc.c */ -#line 268 "a.y" + case 54: + +/* Line 1806 of yacc.c */ +#line 269 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (1)].gen); (yyval.gen2).to = nullgen; } break; - case 54: -/* Line 1778 of yacc.c */ -#line 273 "a.y" + case 55: + +/* Line 1806 of yacc.c */ +#line 274 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 55: -/* Line 1778 of yacc.c */ -#line 280 "a.y" + case 56: + +/* Line 1806 of yacc.c */ +#line 281 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (3)].gen); (yyval.gen2).to = (yyvsp[(3) - (3)].gen); } break; - case 56: -/* Line 1778 of yacc.c */ -#line 285 "a.y" + case 57: + +/* Line 1806 of yacc.c */ +#line 286 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).from.scale = (yyvsp[(3) - (5)].lval); @@ -2068,9 +2152,10 @@ yyreduce: } break; - case 57: -/* Line 1778 of yacc.c */ -#line 293 "a.y" + case 58: + +/* Line 1806 of yacc.c */ +#line 294 "a.y" { (yyval.gen2).from = (yyvsp[(1) - (5)].gen); (yyval.gen2).to = (yyvsp[(3) - (5)].gen); @@ -2078,25 +2163,41 @@ yyreduce: } break; - case 62: -/* Line 1778 of yacc.c */ -#line 307 "a.y" + case 59: + +/* Line 1806 of yacc.c */ +#line 302 "a.y" + { + (yyval.gen2).from = (yyvsp[(3) - (5)].gen); + (yyval.gen2).to = (yyvsp[(5) - (5)].gen); + if((yyvsp[(1) - (5)].gen).type != D_CONST) + yyerror("illegal constant"); + (yyval.gen2).to.offset = (yyvsp[(1) - (5)].gen).offset; + } + break; + + case 64: + +/* Line 1806 of yacc.c */ +#line 318 "a.y" { (yyval.gen) = (yyvsp[(2) - (2)].gen); } break; - case 63: -/* Line 1778 of yacc.c */ -#line 311 "a.y" + case 65: + +/* Line 1806 of yacc.c */ +#line 322 "a.y" { (yyval.gen) = (yyvsp[(2) - (2)].gen); } break; - case 69: -/* Line 1778 of yacc.c */ -#line 324 "a.y" + case 71: + +/* Line 1806 of yacc.c */ +#line 335 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_BRANCH; @@ -2104,9 +2205,10 @@ yyreduce: } break; - case 70: -/* Line 1778 of yacc.c */ -#line 330 "a.y" + case 72: + +/* Line 1806 of yacc.c */ +#line 341 "a.y" { (yyval.gen) = nullgen; if(pass == 2) @@ -2117,9 +2219,10 @@ yyreduce: } break; - case 71: -/* Line 1778 of yacc.c */ -#line 339 "a.y" + case 73: + +/* Line 1806 of yacc.c */ +#line 350 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_BRANCH; @@ -2128,63 +2231,70 @@ yyreduce: } break; - case 72: -/* Line 1778 of yacc.c */ -#line 348 "a.y" + case 74: + +/* Line 1806 of yacc.c */ +#line 359 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(1) - (1)].lval); } break; - case 73: -/* Line 1778 of yacc.c */ -#line 353 "a.y" + case 75: + +/* Line 1806 of yacc.c */ +#line 364 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(1) - (1)].lval); } break; - case 74: -/* Line 1778 of yacc.c */ -#line 358 "a.y" + case 76: + +/* Line 1806 of yacc.c */ +#line 369 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(1) - (1)].lval); } break; - case 75: -/* Line 1778 of yacc.c */ -#line 363 "a.y" + case 77: + +/* Line 1806 of yacc.c */ +#line 374 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(1) - (1)].lval); } break; - case 76: -/* Line 1778 of yacc.c */ -#line 368 "a.y" + case 78: + +/* Line 1806 of yacc.c */ +#line 379 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_SP; } break; - case 77: -/* Line 1778 of yacc.c */ -#line 373 "a.y" + case 79: + +/* Line 1806 of yacc.c */ +#line 384 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(1) - (1)].lval); } break; - case 78: -/* Line 1778 of yacc.c */ -#line 380 "a.y" + case 80: + +/* Line 1806 of yacc.c */ +#line 391 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_CONST; @@ -2192,9 +2302,10 @@ yyreduce: } break; - case 79: -/* Line 1778 of yacc.c */ -#line 386 "a.y" + case 81: + +/* Line 1806 of yacc.c */ +#line 397 "a.y" { (yyval.gen) = (yyvsp[(2) - (2)].gen); (yyval.gen).index = (yyvsp[(2) - (2)].gen).type; @@ -2207,9 +2318,10 @@ yyreduce: } break; - case 80: -/* Line 1778 of yacc.c */ -#line 397 "a.y" + case 82: + +/* Line 1806 of yacc.c */ +#line 408 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_SCONST; @@ -2217,9 +2329,10 @@ yyreduce: } break; - case 81: -/* Line 1778 of yacc.c */ -#line 403 "a.y" + case 83: + +/* Line 1806 of yacc.c */ +#line 414 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_FCONST; @@ -2227,9 +2340,10 @@ yyreduce: } break; - case 82: -/* Line 1778 of yacc.c */ -#line 409 "a.y" + case 84: + +/* Line 1806 of yacc.c */ +#line 420 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_FCONST; @@ -2237,9 +2351,10 @@ yyreduce: } break; - case 83: -/* Line 1778 of yacc.c */ -#line 415 "a.y" + case 85: + +/* Line 1806 of yacc.c */ +#line 426 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_FCONST; @@ -2247,9 +2362,10 @@ yyreduce: } break; - case 84: -/* Line 1778 of yacc.c */ -#line 421 "a.y" + case 86: + +/* Line 1806 of yacc.c */ +#line 432 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_FCONST; @@ -2257,9 +2373,10 @@ yyreduce: } break; - case 85: -/* Line 1778 of yacc.c */ -#line 429 "a.y" + case 87: + +/* Line 1806 of yacc.c */ +#line 440 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_CONST2; @@ -2268,45 +2385,50 @@ yyreduce: } break; - case 86: -/* Line 1778 of yacc.c */ -#line 438 "a.y" + case 88: + +/* Line 1806 of yacc.c */ +#line 449 "a.y" { (yyval.con2).v1 = (yyvsp[(1) - (1)].lval); (yyval.con2).v2 = 0; } break; - case 87: -/* Line 1778 of yacc.c */ -#line 443 "a.y" + case 89: + +/* Line 1806 of yacc.c */ +#line 454 "a.y" { (yyval.con2).v1 = -(yyvsp[(2) - (2)].lval); (yyval.con2).v2 = 0; } break; - case 88: -/* Line 1778 of yacc.c */ -#line 448 "a.y" + case 90: + +/* Line 1806 of yacc.c */ +#line 459 "a.y" { (yyval.con2).v1 = (yyvsp[(1) - (3)].lval); (yyval.con2).v2 = (yyvsp[(3) - (3)].lval); } break; - case 89: -/* Line 1778 of yacc.c */ -#line 453 "a.y" + case 91: + +/* Line 1806 of yacc.c */ +#line 464 "a.y" { (yyval.con2).v1 = -(yyvsp[(2) - (4)].lval); (yyval.con2).v2 = (yyvsp[(4) - (4)].lval); } break; - case 92: -/* Line 1778 of yacc.c */ -#line 464 "a.y" + case 94: + +/* Line 1806 of yacc.c */ +#line 475 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+D_NONE; @@ -2314,9 +2436,10 @@ yyreduce: } break; - case 93: -/* Line 1778 of yacc.c */ -#line 470 "a.y" + case 95: + +/* Line 1806 of yacc.c */ +#line 481 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+(yyvsp[(3) - (4)].lval); @@ -2324,9 +2447,10 @@ yyreduce: } break; - case 94: -/* Line 1778 of yacc.c */ -#line 476 "a.y" + case 96: + +/* Line 1806 of yacc.c */ +#line 487 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+D_SP; @@ -2334,9 +2458,10 @@ yyreduce: } break; - case 95: -/* Line 1778 of yacc.c */ -#line 482 "a.y" + case 97: + +/* Line 1806 of yacc.c */ +#line 493 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+D_NONE; @@ -2347,9 +2472,10 @@ yyreduce: } break; - case 96: -/* Line 1778 of yacc.c */ -#line 491 "a.y" + case 98: + +/* Line 1806 of yacc.c */ +#line 502 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+(yyvsp[(3) - (9)].lval); @@ -2360,27 +2486,30 @@ yyreduce: } break; - case 97: -/* Line 1778 of yacc.c */ -#line 500 "a.y" + case 99: + +/* Line 1806 of yacc.c */ +#line 511 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+(yyvsp[(2) - (3)].lval); } break; - case 98: -/* Line 1778 of yacc.c */ -#line 505 "a.y" + case 100: + +/* Line 1806 of yacc.c */ +#line 516 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+D_SP; } break; - case 99: -/* Line 1778 of yacc.c */ -#line 510 "a.y" + case 101: + +/* Line 1806 of yacc.c */ +#line 521 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+(yyvsp[(3) - (4)].lval); @@ -2388,9 +2517,10 @@ yyreduce: } break; - case 100: -/* Line 1778 of yacc.c */ -#line 516 "a.y" + case 102: + +/* Line 1806 of yacc.c */ +#line 527 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+D_NONE; @@ -2400,9 +2530,10 @@ yyreduce: } break; - case 101: -/* Line 1778 of yacc.c */ -#line 524 "a.y" + case 103: + +/* Line 1806 of yacc.c */ +#line 535 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_INDIR+(yyvsp[(2) - (8)].lval); @@ -2412,17 +2543,19 @@ yyreduce: } break; - case 102: -/* Line 1778 of yacc.c */ -#line 534 "a.y" + case 104: + +/* Line 1806 of yacc.c */ +#line 545 "a.y" { (yyval.gen) = (yyvsp[(1) - (1)].gen); } break; - case 103: -/* Line 1778 of yacc.c */ -#line 538 "a.y" + case 105: + +/* Line 1806 of yacc.c */ +#line 549 "a.y" { (yyval.gen) = (yyvsp[(1) - (6)].gen); (yyval.gen).index = (yyvsp[(3) - (6)].lval); @@ -2431,9 +2564,10 @@ yyreduce: } break; - case 104: -/* Line 1778 of yacc.c */ -#line 547 "a.y" + case 106: + +/* Line 1806 of yacc.c */ +#line 558 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = (yyvsp[(4) - (5)].lval); @@ -2442,9 +2576,10 @@ yyreduce: } break; - case 105: -/* Line 1778 of yacc.c */ -#line 554 "a.y" + case 107: + +/* Line 1806 of yacc.c */ +#line 565 "a.y" { (yyval.gen) = nullgen; (yyval.gen).type = D_STATIC; @@ -2453,161 +2588,181 @@ yyreduce: } break; - case 106: -/* Line 1778 of yacc.c */ -#line 562 "a.y" + case 108: + +/* Line 1806 of yacc.c */ +#line 573 "a.y" { (yyval.lval) = 0; } break; - case 107: -/* Line 1778 of yacc.c */ -#line 566 "a.y" + case 109: + +/* Line 1806 of yacc.c */ +#line 577 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; - case 108: -/* Line 1778 of yacc.c */ -#line 570 "a.y" + case 110: + +/* Line 1806 of yacc.c */ +#line 581 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; - case 110: -/* Line 1778 of yacc.c */ -#line 577 "a.y" + case 112: + +/* Line 1806 of yacc.c */ +#line 588 "a.y" { (yyval.lval) = D_AUTO; } break; - case 113: -/* Line 1778 of yacc.c */ -#line 585 "a.y" + case 115: + +/* Line 1806 of yacc.c */ +#line 596 "a.y" { (yyval.lval) = (yyvsp[(1) - (1)].sym)->value; } break; - case 114: -/* Line 1778 of yacc.c */ -#line 589 "a.y" + case 116: + +/* Line 1806 of yacc.c */ +#line 600 "a.y" { (yyval.lval) = -(yyvsp[(2) - (2)].lval); } break; - case 115: -/* Line 1778 of yacc.c */ -#line 593 "a.y" + case 117: + +/* Line 1806 of yacc.c */ +#line 604 "a.y" { (yyval.lval) = (yyvsp[(2) - (2)].lval); } break; - case 116: -/* Line 1778 of yacc.c */ -#line 597 "a.y" + case 118: + +/* Line 1806 of yacc.c */ +#line 608 "a.y" { (yyval.lval) = ~(yyvsp[(2) - (2)].lval); } break; - case 117: -/* Line 1778 of yacc.c */ -#line 601 "a.y" + case 119: + +/* Line 1806 of yacc.c */ +#line 612 "a.y" { (yyval.lval) = (yyvsp[(2) - (3)].lval); } break; - case 119: -/* Line 1778 of yacc.c */ -#line 608 "a.y" + case 121: + +/* Line 1806 of yacc.c */ +#line 619 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval); } break; - case 120: -/* Line 1778 of yacc.c */ -#line 612 "a.y" + case 122: + +/* Line 1806 of yacc.c */ +#line 623 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval); } break; - case 121: -/* Line 1778 of yacc.c */ -#line 616 "a.y" + case 123: + +/* Line 1806 of yacc.c */ +#line 627 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval); } break; - case 122: -/* Line 1778 of yacc.c */ -#line 620 "a.y" + case 124: + +/* Line 1806 of yacc.c */ +#line 631 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval); } break; - case 123: -/* Line 1778 of yacc.c */ -#line 624 "a.y" + case 125: + +/* Line 1806 of yacc.c */ +#line 635 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval); } break; - case 124: -/* Line 1778 of yacc.c */ -#line 628 "a.y" + case 126: + +/* Line 1806 of yacc.c */ +#line 639 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval); } break; - case 125: -/* Line 1778 of yacc.c */ -#line 632 "a.y" + case 127: + +/* Line 1806 of yacc.c */ +#line 643 "a.y" { (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval); } break; - case 126: -/* Line 1778 of yacc.c */ -#line 636 "a.y" + case 128: + +/* Line 1806 of yacc.c */ +#line 647 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval); } break; - case 127: -/* Line 1778 of yacc.c */ -#line 640 "a.y" + case 129: + +/* Line 1806 of yacc.c */ +#line 651 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval); } break; - case 128: -/* Line 1778 of yacc.c */ -#line 644 "a.y" + case 130: + +/* Line 1806 of yacc.c */ +#line 655 "a.y" { (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval); } break; -/* Line 1778 of yacc.c */ -#line 2611 "y.tab.c" + +/* Line 1806 of yacc.c */ +#line 2766 "y.tab.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2770,9 +2925,7 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -2796,7 +2949,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined yyoverflow || YYERROR_VERBOSE +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2838,3 +2991,4 @@ yyreturn: } + diff --git a/src/cmd/8a/y.tab.h b/src/cmd/8a/y.tab.h index 621aba79f8..4d7bbe80df 100644 --- a/src/cmd/8a/y.tab.h +++ b/src/cmd/8a/y.tab.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.6.5. */ +/* A Bison parser, made by GNU Bison 2.5. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2011 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,15 +30,6 @@ 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 @@ -61,21 +52,22 @@ extern int yydebug; LTYPEI = 270, LTYPEG = 271, LTYPEXC = 272, - LCONST = 273, - LFP = 274, - LPC = 275, - LSB = 276, - LBREG = 277, - LLREG = 278, - LSREG = 279, - LFREG = 280, - LXREG = 281, - LFCONST = 282, - LSCONST = 283, - LSP = 284, - LNAME = 285, - LLAB = 286, - LVAR = 287 + LTYPEX = 273, + LCONST = 274, + LFP = 275, + LPC = 276, + LSB = 277, + LBREG = 278, + LLREG = 279, + LSREG = 280, + LFREG = 281, + LXREG = 282, + LFCONST = 283, + LSCONST = 284, + LSP = 285, + LNAME = 286, + LLAB = 287, + LVAR = 288 }; #endif /* Tokens. */ @@ -94,28 +86,31 @@ extern int yydebug; #define LTYPEI 270 #define LTYPEG 271 #define LTYPEXC 272 -#define LCONST 273 -#define LFP 274 -#define LPC 275 -#define LSB 276 -#define LBREG 277 -#define LLREG 278 -#define LSREG 279 -#define LFREG 280 -#define LXREG 281 -#define LFCONST 282 -#define LSCONST 283 -#define LSP 284 -#define LNAME 285 -#define LLAB 286 -#define LVAR 287 +#define LTYPEX 273 +#define LCONST 274 +#define LFP 275 +#define LPC 276 +#define LSB 277 +#define LBREG 278 +#define LLREG 279 +#define LSREG 280 +#define LFREG 281 +#define LXREG 282 +#define LFCONST 283 +#define LSCONST 284 +#define LSP 285 +#define LNAME 286 +#define LLAB 287 +#define LVAR 288 + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { -/* Line 2042 of yacc.c */ + +/* Line 2068 of yacc.c */ #line 37 "a.y" Sym *sym; @@ -130,8 +125,9 @@ typedef union YYSTYPE Gen2 gen2; -/* Line 2042 of yacc.c */ -#line 135 "y.tab.h" + +/* Line 2068 of yacc.c */ +#line 131 "y.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -140,18 +136,4 @@ 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 */ diff --git a/src/cmd/8l/8.out.h b/src/cmd/8l/8.out.h index 3868899560..93d44eb519 100644 --- a/src/cmd/8l/8.out.h +++ b/src/cmd/8l/8.out.h @@ -153,6 +153,7 @@ enum as AMOVB, AMOVL, AMOVW, + AMOVQ, AMOVBLSX, AMOVBLZX, AMOVBWSX, @@ -397,6 +398,7 @@ enum as ACMPXCHGW, ACMPXCHG8B, + ACPUID, ARDTSC, AXADDB, @@ -531,6 +533,7 @@ enum as AORPD, AORPS, APADDQ, + APAND, APMAXSW, APMAXUB, APMINSW, @@ -566,7 +569,12 @@ enum as AUNPCKLPS, AXORPD, AXORPS, - + + /* SSE 3+ */ + AAESENC, + APINSRD, + APSHUFB, + AUSEFIELD, ALOCALS, ATYPE, diff --git a/src/cmd/8l/l.h b/src/cmd/8l/l.h index f6b164d9e4..062dc05662 100644 --- a/src/cmd/8l/l.h +++ b/src/cmd/8l/l.h @@ -172,7 +172,7 @@ struct Optab short as; uchar* ytab; uchar prefix; - uchar op[10]; + uchar op[12]; }; enum @@ -217,6 +217,7 @@ enum Zxxx = 0, Zlit, + Zlitm_r, Z_rp, Zbr, Zcall, @@ -233,6 +234,7 @@ enum Zloop, Zm_o, Zm_r, + Zm2_r, Zm_r_xm, Zm_r_i_xm, Zaut_r, @@ -249,6 +251,7 @@ enum Zib_rr, Zil_rr, Zclr, + Zibm_r, /* mmx1,mmx2/mem64,imm8 */ Zbyte, Zmov, Zmax, diff --git a/src/cmd/8l/optab.c b/src/cmd/8l/optab.c index 79d7b39f00..a6ebf063e7 100644 --- a/src/cmd/8l/optab.c +++ b/src/cmd/8l/optab.c @@ -150,9 +150,16 @@ uchar ymovl[] = // Yi0, Yml, Zibo_m, 2, // shorter but slower AND $0,dst Yi32, Yrl, Zil_rp, 1, Yi32, Yml, Zilo_m, 2, + Yml, Yxr, Zm_r_xm, 2, // XMM MOVD (32 bit) + Yxr, Yml, Zr_m_xm, 2, // XMM MOVD (32 bit) Yiauto, Yrl, Zaut_r, 2, 0 }; +uchar ymovq[] = +{ + Yml, Yxr, Zm_r_xm, 2, + 0 +}; uchar ym_rl[] = { Ym, Yrl, Zm_r, 1, @@ -435,6 +442,21 @@ uchar yprefetch[] = Ym, Ynone, Zm_o, 2, 0, }; +uchar yaes[] = +{ + Yxm, Yxr, Zlitm_r, 2, + 0 +}; +uchar yinsrd[] = +{ + Yml, Yxr, Zibm_r, 2, + 0 +}; +uchar ymshufb[] = +{ + Yxm, Yxr, Zm2_r, 2, + 0 +}; Optab optab[] = /* as, ytab, andproto, opcode */ @@ -552,8 +574,9 @@ Optab optab[] = { ALSLL, yml_rl, Pm, 0x03 }, { ALSLW, yml_rl, Pq, 0x03 }, { AMOVB, ymovb, Pb, 0x88,0x8a,0xb0,0xc6,(00) }, - { AMOVL, ymovl, Px, 0x89,0x8b,0x31,0x83,(04),0xb8,0xc7,(00) }, + { AMOVL, ymovl, Px, 0x89,0x8b,0x31,0x83,(04),0xb8,0xc7,(00),Pe,0x6e,Pe,0x7e }, { AMOVW, ymovl, Pe, 0x89,0x8b,0x31,0x83,(04),0xb8,0xc7,(00) }, + { AMOVQ, ymovq, Pf3, 0x7e }, { AMOVBLSX, ymb_rl, Pm, 0xbe }, { AMOVBLZX, ymb_rl, Pm, 0xb6 }, { AMOVBWSX, ymb_rl, Pq, 0xbe }, @@ -793,6 +816,7 @@ Optab optab[] = { ACMPXCHGW, yrl_ml, Pm, 0xb1 }, { ACMPXCHG8B, yscond, Pm, 0xc7,(01) }, + { ACPUID, ynone, Pm, 0xa2 }, { ARDTSC, ynone, Pm, 0x31 }, { AXADDB, yrb_mb, Pb, 0x0f,0xc0 }, @@ -925,6 +949,7 @@ Optab optab[] = { AORPD, yxm, Pq, 0x56 }, { AORPS, yxm, Pm, 0x56 }, { APADDQ, yxm, Pe, 0xd4 }, + { APAND, yxm, Pe, 0xdb }, { APMAXSW, yxm, Pe, 0xee }, { APMAXUB, yxm, Pe, 0xde }, { APMINSW, yxm, Pe, 0xea }, @@ -961,6 +986,10 @@ Optab optab[] = { AXORPD, yxm, Pe, 0x57 }, { AXORPS, yxm, Pm, 0x57 }, + { AAESENC, yaes, Pq, 0x38,0xdc,(0) }, + { APINSRD, yinsrd, Pq, 0x3a, 0x22, (00) }, + { APSHUFB, ymshufb,Pq, 0x38, 0x00 }, + { AUSEFIELD, ynop, Px, 0,0 }, { ALOCALS }, { ATYPE }, diff --git a/src/cmd/8l/span.c b/src/cmd/8l/span.c index b828d8645d..0678fa8f26 100644 --- a/src/cmd/8l/span.c +++ b/src/cmd/8l/span.c @@ -1003,11 +1003,23 @@ found: *andptr++ = op; break; + case Zlitm_r: + for(; op = o->op[z]; z++) + *andptr++ = op; + asmand(&p->from, reg[p->to.type]); + break; + case Zm_r: *andptr++ = op; asmand(&p->from, reg[p->to.type]); break; + case Zm2_r: + *andptr++ = op; + *andptr++ = o->op[z+1]; + asmand(&p->from, reg[p->to.type]); + break; + case Zm_r_xm: mediaop(o, op, t[3], z); asmand(&p->from, reg[p->to.type]); @@ -1019,6 +1031,13 @@ found: *andptr++ = p->to.offset; break; + case Zibm_r: + while ((op = o->op[z++]) != 0) + *andptr++ = op; + asmand(&p->from, reg[p->to.type]); + *andptr++ = p->to.offset; + break; + case Zaut_r: *andptr++ = 0x8d; /* leal */ if(p->from.type != D_ADDR) -- 2.48.1