]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cc: add PREFETCH built-in (like SET, USED)
authorRuss Cox <rsc@golang.org>
Wed, 2 May 2012 20:22:56 +0000 (16:22 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 2 May 2012 20:22:56 +0000 (16:22 -0400)
This makes it possible to inline the prefetch of upcoming
memory addresses during garbage collection, instead of
needing to flush registers, make a function call, and
reload registers.  On garbage collection-heavy workloads,
this results in a 5% speedup.

Fixes #3493.

R=dvyukov, ken, r, dave
CC=golang-dev
https://golang.org/cl/5990066

23 files changed:
src/cmd/5c/gc.h
src/cmd/5c/txt.c
src/cmd/6c/gc.h
src/cmd/6c/peep.c
src/cmd/6c/reg.c
src/cmd/6c/txt.c
src/cmd/8c/gc.h
src/cmd/8c/peep.c
src/cmd/8c/reg.c
src/cmd/8c/txt.c
src/cmd/cc/Makefile
src/cmd/cc/cc.h
src/cmd/cc/cc.y
src/cmd/cc/lex.c
src/cmd/cc/pgen.c
src/cmd/cc/sub.c
src/cmd/cc/y.tab.c
src/cmd/cc/y.tab.h
src/pkg/runtime/arch_386.h
src/pkg/runtime/arch_amd64.h
src/pkg/runtime/arch_arm.h
src/pkg/runtime/asm_386.s
src/pkg/runtime/asm_amd64.s

index 20652682b148f4749d52efd3b0ff4be7af109ae3..a0fc63c608ed2bfbcc1748a9b50d4d10ab88480a 100644 (file)
@@ -297,6 +297,7 @@ void        patch(Prog*, int32);
 int    sconst(Node*);
 int    sval(int32);
 void   gpseudo(int, Sym*, Node*);
+void   gprefetch(Node*);
 
 /*
  * swt.c
index 1a189e3afe336278fd771ade924a02dbb2eb74a6..ee341905d57740776483ae2ad34ac7163935eec4 100644 (file)
@@ -1194,6 +1194,12 @@ gpseudo(int a, Sym *s, Node *n)
                pc--;
 }
 
+void
+gprefetch(Node *n)
+{
+       // nothing
+}
+
 int
 sconst(Node *n)
 {
index b0081abb57c56de914a7045e9f791d6be95b6340..1d006e9246f0c8ab6478dcf0242995eed4cff46f 100644 (file)
@@ -292,6 +292,7 @@ void        gbranch(int);
 void   patch(Prog*, int32);
 int    sconst(Node*);
 void   gpseudo(int, Sym*, Node*);
+void   gprefetch(Node*);
 
 /*
  * swt.c
index 1991c0c3529f3e5d1dd3e86bb4c7fef3d49f61c1..d3a9ee9e0eb1a32f64f253243a3c667ee6cf2feb 100644 (file)
@@ -697,6 +697,11 @@ copyu(Prog *p, Adr *v, Adr *s)
        case ACMPB:
        case ACMPQ:
 
+       case APREFETCHT0:
+       case APREFETCHT1:
+       case APREFETCHT2:
+       case APREFETCHNTA:
+
        case ACOMISD:
        case ACOMISS:
        case AUCOMISD:
index bbea92560e6b138fa035eeb2d6690a7b615c5903..99db97655035af556f578bff5d85f0a2a3decf2a 100644 (file)
@@ -185,6 +185,10 @@ regopt(Prog *p)
                case ACMPL:
                case ACMPQ:
                case ACMPW:
+               case APREFETCHT0:
+               case APREFETCHT1:
+               case APREFETCHT2:
+               case APREFETCHNTA:
                case ACOMISS:
                case ACOMISD:
                case AUCOMISS:
index 605ed3786a0095f35c7a8150eb18d60dc1e0f669..fcc97ee6ecc091f4712a1e382e630ad918be4bfc 100644 (file)
@@ -1502,6 +1502,18 @@ gpseudo(int a, Sym *s, Node *n)
                pc--;
 }
 
+void
+gprefetch(Node *n)
+{
+       Node n1;
+       
+       regalloc(&n1, n, Z);
+       gmove(n, &n1);
+       n1.op = OINDREG;
+       gins(APREFETCHNTA, &n1, Z);
+       regfree(&n1);
+}
+
 int
 sconst(Node *n)
 {
index 4a57f5d3cbb2a578287b150e3d124ebf2af6ba4e..bdf981b4c213650e4ebe18554554898fbf355a96 100644 (file)
@@ -297,6 +297,7 @@ void        gbranch(int);
 void   patch(Prog*, int32);
 int    sconst(Node*);
 void   gpseudo(int, Sym*, Node*);
+void   gprefetch(Node*);
 
 /*
  * swt.c
index 9511a5579e685d6c5da0e41bdef31c33176300aa..9c3e9a5af295bac4454e81847cf62cfd611b357f 100644 (file)
@@ -602,6 +602,12 @@ copyu(Prog *p, Adr *v, Adr *s)
        case ACMPL:     /* read only */
        case ACMPW:
        case ACMPB:
+       
+       case APREFETCHT0:
+       case APREFETCHT1:
+       case APREFETCHT2:
+       case APREFETCHNTA:
+
 
        case AFCOMB:
        case AFCOMBP:
index 6ba07bed281444d984330a9445a9b7311666e5c8..7a7bfe77b717ec710f48901cd280b95ba59c1ad9 100644 (file)
@@ -182,6 +182,10 @@ regopt(Prog *p)
                case ACMPB:
                case ACMPL:
                case ACMPW:
+               case APREFETCHT0:
+               case APREFETCHT1:
+               case APREFETCHT2:
+               case APREFETCHNTA:
                        for(z=0; z<BITS; z++)
                                r->use2.b[z] |= bit.b[z];
                        break;
index 3a08da7cd2446f24d750f224273bc7cee4f0a7c5..d229462da34eef6f9cf335af69902b62b490607f 100644 (file)
@@ -1383,6 +1383,18 @@ gpseudo(int a, Sym *s, Node *n)
                pc--;
 }
 
+void
+gprefetch(Node *n)
+{
+       Node n1;
+       
+       regalloc(&n1, n, Z);
+       gmove(n, &n1);
+       n1.op = OINDREG;
+       gins(APREFETCHNTA, &n1, Z);
+       regfree(&n1);
+}
+
 int
 sconst(Node *n)
 {
index 109578297b9b3073bb80e78075d2369d4c37fb2d..34df31d6f5cf6e89819c888fa1cad5731e36fdc8 100644 (file)
@@ -7,4 +7,4 @@ include ../../Make.dist
 install: y.tab.h
 
 y.tab.h: cc.y
-       LANG=C LANGUAGE=en_US.UTF8 bison -d -v -y a.y
+       LANG=C LANGUAGE=en_US.UTF8 bison -d -v -y cc.y
index 4c527a2b3d4410c6eb4eb1d437dbc1f2c17102b2..2ee03ae1f1290c93c5c889fdf848c77061867e67 100644 (file)
@@ -300,6 +300,7 @@ enum
        OPOSTINC,
        OPREDEC,
        OPREINC,
+       OPREFETCH,
        OPROTO,
        OREGISTER,
        ORETURN,
index 515a80372e8e9c0035d35098dcaa4cbaa4220bcd..830dd21f85353d0831ea2fc6d97613cd11e4a9cd 100644 (file)
@@ -93,7 +93,7 @@
 %token <sval>  LSTRING LLSTRING
 %token         LAUTO LBREAK LCASE LCHAR LCONTINUE LDEFAULT LDO
 %token         LDOUBLE LELSE LEXTERN LFLOAT LFOR LGOTO
-%token LIF LINT LLONG LREGISTER LRETURN LSHORT LSIZEOF LUSED
+%token LIF LINT LLONG LPREFETCH LREGISTER LRETURN LSHORT LSIZEOF LUSED
 %token LSTATIC LSTRUCT LSWITCH LTYPEDEF LTYPESTR LUNION LUNSIGNED
 %token LWHILE LVOID LENUM LSIGNED LCONSTNT LVOLATILE LSET LSIGNOF
 %token LRESTRICT LINLINE
@@ -535,6 +535,10 @@ ulstmnt:
        {
                $$ = new(OUSED, $3, Z);
        }
+|      LPREFETCH '(' zelist ')' ';'
+       {
+               $$ = new(OPREFETCH, $3, Z);
+       }
 |      LSET '(' zelist ')' ';'
        {
                $$ = new(OSET, $3, Z);
index 8aeb1a334747e65903dd477babea4c218b583a70..ac190a8cb11ec4e6e1badae09b332ffde6e94a45 100644 (file)
@@ -1174,6 +1174,7 @@ struct
        "inline",       LINLINE,        0,
        "int",          LINT,           TINT,
        "long",         LLONG,          TLONG,
+       "PREFETCH",     LPREFETCH,      0,
        "register",     LREGISTER,      0,
        "restrict",     LRESTRICT,      0,
        "return",       LRETURN,        0,
index 3a686102f37569c4cf3d808c3cd4e9115991bb65..b06aa996d2d7c664c92cc4aa296fe9ee9e806e7c 100644 (file)
@@ -528,6 +528,7 @@ loop:
 
        case OSET:
        case OUSED:
+       case OPREFETCH:
                usedset(n->left, o);
                break;
        }
@@ -542,6 +543,10 @@ usedset(Node *n, int o)
                return;
        }
        complex(n);
+       if(o == OPREFETCH) {
+               gprefetch(n);
+               return;
+       }
        switch(n->op) {
        case OADDR:     /* volatile */
                gins(ANOP, n, Z);
index 72d671b2f586570b74624a387b1c7ecbfe75e6e0..424e2763ad8abafe1d5869564a53b3c7d9f2cb9b 100644 (file)
@@ -1497,6 +1497,7 @@ Init      onamesinit[] =
        OPOSTINC,       0,      "POSTINC",
        OPREDEC,        0,      "PREDEC",
        OPREINC,        0,      "PREINC",
+       OPREFETCH,              0,      "PREFETCH",
        OPROTO,         0,      "PROTO",
        OREGISTER,      0,      "REGISTER",
        ORETURN,        0,      "RETURN",
index af8328abd6ffaabaad7c8fd6207658b40972a885..10938c10b01fd2a7506b3575626154ea460ff6c0 100644 (file)
      LIF = 304,
      LINT = 305,
      LLONG = 306,
-     LREGISTER = 307,
-     LRETURN = 308,
-     LSHORT = 309,
-     LSIZEOF = 310,
-     LUSED = 311,
-     LSTATIC = 312,
-     LSTRUCT = 313,
-     LSWITCH = 314,
-     LTYPEDEF = 315,
-     LTYPESTR = 316,
-     LUNION = 317,
-     LUNSIGNED = 318,
-     LWHILE = 319,
-     LVOID = 320,
-     LENUM = 321,
-     LSIGNED = 322,
-     LCONSTNT = 323,
-     LVOLATILE = 324,
-     LSET = 325,
-     LSIGNOF = 326,
-     LRESTRICT = 327,
-     LINLINE = 328
+     LPREFETCH = 307,
+     LREGISTER = 308,
+     LRETURN = 309,
+     LSHORT = 310,
+     LSIZEOF = 311,
+     LUSED = 312,
+     LSTATIC = 313,
+     LSTRUCT = 314,
+     LSWITCH = 315,
+     LTYPEDEF = 316,
+     LTYPESTR = 317,
+     LUNION = 318,
+     LUNSIGNED = 319,
+     LWHILE = 320,
+     LVOID = 321,
+     LENUM = 322,
+     LSIGNED = 323,
+     LCONSTNT = 324,
+     LVOLATILE = 325,
+     LSET = 326,
+     LSIGNOF = 327,
+     LRESTRICT = 328,
+     LINLINE = 329
    };
 #endif
 /* Tokens.  */
 #define LIF 304
 #define LINT 305
 #define LLONG 306
-#define LREGISTER 307
-#define LRETURN 308
-#define LSHORT 309
-#define LSIZEOF 310
-#define LUSED 311
-#define LSTATIC 312
-#define LSTRUCT 313
-#define LSWITCH 314
-#define LTYPEDEF 315
-#define LTYPESTR 316
-#define LUNION 317
-#define LUNSIGNED 318
-#define LWHILE 319
-#define LVOID 320
-#define LENUM 321
-#define LSIGNED 322
-#define LCONSTNT 323
-#define LVOLATILE 324
-#define LSET 325
-#define LSIGNOF 326
-#define LRESTRICT 327
-#define LINLINE 328
+#define LPREFETCH 307
+#define LREGISTER 308
+#define LRETURN 309
+#define LSHORT 310
+#define LSIZEOF 311
+#define LUSED 312
+#define LSTATIC 313
+#define LSTRUCT 314
+#define LSWITCH 315
+#define LTYPEDEF 316
+#define LTYPESTR 317
+#define LUNION 318
+#define LUNSIGNED 319
+#define LWHILE 320
+#define LVOID 321
+#define LENUM 322
+#define LSIGNED 323
+#define LCONSTNT 324
+#define LVOLATILE 325
+#define LSET 326
+#define LSIGNOF 327
+#define LRESTRICT 328
+#define LINLINE 329
 
 
 
@@ -270,7 +272,7 @@ typedef union YYSTYPE
        vlong   vval;
 }
 /* Line 193 of yacc.c.  */
-#line 274 "y.tab.c"
+#line 276 "y.tab.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -283,7 +285,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 287 "y.tab.c"
+#line 289 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -501,17 +503,17 @@ union yyalloc
 #define YYLAST   1188
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  98
+#define YYNTOKENS  99
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  75
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  246
+#define YYNRULES  247
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  412
+#define YYNSTATES  417
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   328
+#define YYMAXUTOK   329
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -522,16 +524,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,    96,     2,     2,     2,    35,    22,     2,
-      38,    92,    33,    31,     4,    32,    36,    34,     2,     2,
+       2,     2,     2,    97,     2,     2,     2,    35,    22,     2,
+      38,    93,    33,    31,     4,    32,    36,    34,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    17,     3,
       25,     5,    26,    16,     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,    37,     2,    93,    21,     2,     2,     2,     2,     2,
+       2,    37,     2,    94,    21,     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,    94,    20,    95,    97,     2,     2,     2,
+       2,     2,     2,    95,    20,    96,    98,     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,
@@ -551,7 +553,7 @@ static const yytype_uint8 yytranslate[] =
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92
 };
 
 #if YYDEBUG
@@ -569,102 +571,103 @@ static const yytype_uint16 yyprhs[] =
      208,   212,   213,   216,   219,   221,   224,   228,   231,   234,
      237,   239,   242,   244,   247,   250,   251,   254,   260,   268,
      269,   280,   286,   294,   298,   304,   307,   310,   314,   320,
-     326,   327,   329,   330,   332,   334,   336,   340,   342,   346,
-     350,   354,   358,   362,   366,   370,   374,   378,   382,   386,
-     390,   394,   398,   402,   406,   410,   414,   420,   424,   428,
-     432,   436,   440,   444,   448,   452,   456,   460,   464,   466,
-     472,   480,   482,   485,   488,   491,   494,   497,   500,   503,
-     506,   509,   512,   516,   522,   528,   533,   538,   542,   546,
-     549,   552,   554,   556,   558,   560,   562,   564,   566,   568,
-     570,   572,   574,   576,   579,   581,   584,   585,   587,   589,
-     593,   594,   599,   600,   602,   604,   606,   608,   611,   614,
-     618,   621,   625,   627,   629,   632,   633,   638,   641,   644,
-     645,   650,   653,   656,   657,   658,   666,   667,   673,   675,
-     677,   680,   681,   684,   686,   688,   690,   692,   695,   697,
-     699,   701,   705,   708,   712,   714,   716,   718,   720,   722,
-     724,   726,   728,   730,   732,   734,   736,   738,   740,   742,
-     744,   746,   748,   750,   752,   754,   756
+     326,   332,   333,   335,   336,   338,   340,   342,   346,   348,
+     352,   356,   360,   364,   368,   372,   376,   380,   384,   388,
+     392,   396,   400,   404,   408,   412,   416,   420,   426,   430,
+     434,   438,   442,   446,   450,   454,   458,   462,   466,   470,
+     472,   478,   486,   488,   491,   494,   497,   500,   503,   506,
+     509,   512,   515,   518,   522,   528,   534,   539,   544,   548,
+     552,   555,   558,   560,   562,   564,   566,   568,   570,   572,
+     574,   576,   578,   580,   582,   585,   587,   590,   591,   593,
+     595,   599,   600,   605,   606,   608,   610,   612,   614,   617,
+     620,   624,   627,   631,   633,   635,   638,   639,   644,   647,
+     650,   651,   656,   659,   662,   663,   664,   672,   673,   679,
+     681,   683,   686,   687,   690,   692,   694,   696,   698,   701,
+     703,   705,   707,   711,   714,   718,   720,   722,   724,   726,
+     728,   730,   732,   734,   736,   738,   740,   742,   744,   746,
+     748,   750,   752,   754,   756,   758,   760,   762
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      99,     0,    -1,    -1,    99,   100,    -1,   151,     3,    -1,
-     151,   103,     3,    -1,    -1,    -1,   151,   105,   101,   110,
-     102,   128,    -1,   105,    -1,    -1,   105,   104,     5,   122,
-      -1,   103,     4,   103,    -1,   106,    -1,    33,   162,   105,
-      -1,   171,    -1,    38,   105,    92,    -1,   106,    38,   126,
-      92,    -1,   106,    37,   138,    93,    -1,   154,     3,    -1,
-     154,   108,     3,    -1,   105,    -1,    -1,   105,   109,     5,
-     122,    -1,   108,     4,   108,    -1,    -1,   110,   154,   111,
-       3,    -1,   105,    -1,   111,     4,   111,    -1,    -1,   153,
-     113,   115,     3,    -1,    -1,   112,   153,   114,   115,     3,
-      -1,    -1,   116,    -1,   117,    -1,   116,     4,   116,    -1,
-     105,    -1,   171,    17,   139,    -1,    17,   139,    -1,    -1,
-     119,    -1,    33,   162,    -1,    33,   162,   119,    -1,   120,
-      -1,   121,    -1,   120,    38,   126,    92,    -1,   120,    37,
-     138,    93,    -1,    38,    92,    -1,    37,   138,    93,    -1,
-      38,   119,    92,    -1,   141,    -1,    94,   125,    95,    -1,
-      37,   139,    93,    -1,    36,   172,    -1,   123,     5,    -1,
-     122,     4,    -1,   124,   122,     4,    -1,   123,    -1,   124,
-     123,    -1,   124,    -1,   122,    -1,   124,   122,    -1,    -1,
-     127,    -1,   170,    -1,   153,   118,    -1,   153,   105,    -1,
-      36,    36,    36,    -1,   127,     4,   127,    -1,    94,   129,
-      95,    -1,    -1,   129,   107,    -1,   129,   132,    -1,   131,
-      -1,   130,   131,    -1,    56,   141,    17,    -1,    59,    17,
-      -1,    42,    17,    -1,     1,     3,    -1,   134,    -1,   130,
-     134,    -1,   137,    -1,   154,   108,    -1,   137,     3,    -1,
-      -1,   135,   128,    -1,    67,    38,   140,    92,   132,    -1,
-      67,    38,   140,    92,   132,    62,   132,    -1,    -1,   136,
-      65,    38,   133,     3,   137,     3,   137,    92,   132,    -1,
-      82,    38,   140,    92,   132,    -1,    60,   132,    82,    38,
-     140,    92,     3,    -1,    71,   137,     3,    -1,    77,    38,
-     140,    92,   132,    -1,    55,     3,    -1,    58,     3,    -1,
-      66,   172,     3,    -1,    74,    38,   147,    92,     3,    -1,
-      88,    38,   147,    92,     3,    -1,    -1,   140,    -1,    -1,
-     139,    -1,   141,    -1,   141,    -1,   140,     4,   140,    -1,
-     142,    -1,   141,    33,   141,    -1,   141,    34,   141,    -1,
-     141,    35,   141,    -1,   141,    31,   141,    -1,   141,    32,
-     141,    -1,   141,    29,   141,    -1,   141,    30,   141,    -1,
-     141,    25,   141,    -1,   141,    26,   141,    -1,   141,    28,
-     141,    -1,   141,    27,   141,    -1,   141,    24,   141,    -1,
-     141,    23,   141,    -1,   141,    22,   141,    -1,   141,    21,
-     141,    -1,   141,    20,   141,    -1,   141,    19,   141,    -1,
-     141,    18,   141,    -1,   141,    16,   140,    17,   141,    -1,
-     141,     5,   141,    -1,   141,    15,   141,    -1,   141,    14,
-     141,    -1,   141,    13,   141,    -1,   141,    12,   141,    -1,
-     141,    11,   141,    -1,   141,     9,   141,    -1,   141,    10,
-     141,    -1,   141,     8,   141,    -1,   141,     7,   141,    -1,
-     141,     6,   141,    -1,   143,    -1,    38,   153,   118,    92,
-     142,    -1,    38,   153,   118,    92,    94,   125,    95,    -1,
-     144,    -1,    33,   142,    -1,    22,   142,    -1,    31,   142,
-      -1,    32,   142,    -1,    96,   142,    -1,    97,   142,    -1,
-      40,   142,    -1,    41,   142,    -1,    73,   143,    -1,    89,
-     143,    -1,    38,   140,    92,    -1,    73,    38,   153,   118,
-      92,    -1,    89,    38,   153,   118,    92,    -1,   144,    38,
-     147,    92,    -1,   144,    37,   140,    93,    -1,   144,    39,
-     172,    -1,   144,    36,   172,    -1,   144,    40,    -1,   144,
-      41,    -1,   170,    -1,    46,    -1,    47,    -1,    48,    -1,
-      49,    -1,    45,    -1,    44,    -1,    50,    -1,    51,    -1,
-     145,    -1,   146,    -1,    52,    -1,   145,    52,    -1,    53,
-      -1,   146,    53,    -1,    -1,   148,    -1,   141,    -1,   148,
-       4,   148,    -1,    -1,    94,   150,   112,    95,    -1,    -1,
-     154,    -1,   155,    -1,   167,    -1,   164,    -1,   155,   161,
-      -1,   167,   161,    -1,   164,   155,   162,    -1,   164,   167,
-      -1,   164,   167,   161,    -1,   152,    -1,   152,    -1,    76,
-     172,    -1,    -1,    76,   172,   156,   149,    -1,    76,   149,
-      -1,    80,   172,    -1,    -1,    80,   172,   157,   149,    -1,
-      80,   149,    -1,    84,   172,    -1,    -1,    -1,    84,   172,
-     158,    94,   159,   166,    95,    -1,    -1,    84,    94,   160,
-     166,    95,    -1,    43,    -1,   163,    -1,   161,   163,    -1,
-      -1,   162,   169,    -1,   167,    -1,   169,    -1,   168,    -1,
-     165,    -1,   164,   165,    -1,   169,    -1,   168,    -1,    42,
-      -1,    42,     5,   141,    -1,   166,     4,    -1,   166,     4,
-     166,    -1,    57,    -1,    72,    -1,    68,    -1,    69,    -1,
-      85,    -1,    81,    -1,    64,    -1,    61,    -1,    83,    -1,
-      54,    -1,    75,    -1,    63,    -1,    78,    -1,    79,    -1,
-      70,    -1,    91,    -1,    86,    -1,    87,    -1,    90,    -1,
-      42,    -1,   172,    -1,    42,    -1,    43,    -1
+     100,     0,    -1,    -1,   100,   101,    -1,   152,     3,    -1,
+     152,   104,     3,    -1,    -1,    -1,   152,   106,   102,   111,
+     103,   129,    -1,   106,    -1,    -1,   106,   105,     5,   123,
+      -1,   104,     4,   104,    -1,   107,    -1,    33,   163,   106,
+      -1,   172,    -1,    38,   106,    93,    -1,   107,    38,   127,
+      93,    -1,   107,    37,   139,    94,    -1,   155,     3,    -1,
+     155,   109,     3,    -1,   106,    -1,    -1,   106,   110,     5,
+     123,    -1,   109,     4,   109,    -1,    -1,   111,   155,   112,
+       3,    -1,   106,    -1,   112,     4,   112,    -1,    -1,   154,
+     114,   116,     3,    -1,    -1,   113,   154,   115,   116,     3,
+      -1,    -1,   117,    -1,   118,    -1,   117,     4,   117,    -1,
+     106,    -1,   172,    17,   140,    -1,    17,   140,    -1,    -1,
+     120,    -1,    33,   163,    -1,    33,   163,   120,    -1,   121,
+      -1,   122,    -1,   121,    38,   127,    93,    -1,   121,    37,
+     139,    94,    -1,    38,    93,    -1,    37,   139,    94,    -1,
+      38,   120,    93,    -1,   142,    -1,    95,   126,    96,    -1,
+      37,   140,    94,    -1,    36,   173,    -1,   124,     5,    -1,
+     123,     4,    -1,   125,   123,     4,    -1,   124,    -1,   125,
+     124,    -1,   125,    -1,   123,    -1,   125,   123,    -1,    -1,
+     128,    -1,   171,    -1,   154,   119,    -1,   154,   106,    -1,
+      36,    36,    36,    -1,   128,     4,   128,    -1,    95,   130,
+      96,    -1,    -1,   130,   108,    -1,   130,   133,    -1,   132,
+      -1,   131,   132,    -1,    56,   142,    17,    -1,    59,    17,
+      -1,    42,    17,    -1,     1,     3,    -1,   135,    -1,   131,
+     135,    -1,   138,    -1,   155,   109,    -1,   138,     3,    -1,
+      -1,   136,   129,    -1,    67,    38,   141,    93,   133,    -1,
+      67,    38,   141,    93,   133,    62,   133,    -1,    -1,   137,
+      65,    38,   134,     3,   138,     3,   138,    93,   133,    -1,
+      83,    38,   141,    93,   133,    -1,    60,   133,    83,    38,
+     141,    93,     3,    -1,    72,   138,     3,    -1,    78,    38,
+     141,    93,   133,    -1,    55,     3,    -1,    58,     3,    -1,
+      66,   173,     3,    -1,    75,    38,   148,    93,     3,    -1,
+      70,    38,   148,    93,     3,    -1,    89,    38,   148,    93,
+       3,    -1,    -1,   141,    -1,    -1,   140,    -1,   142,    -1,
+     142,    -1,   141,     4,   141,    -1,   143,    -1,   142,    33,
+     142,    -1,   142,    34,   142,    -1,   142,    35,   142,    -1,
+     142,    31,   142,    -1,   142,    32,   142,    -1,   142,    29,
+     142,    -1,   142,    30,   142,    -1,   142,    25,   142,    -1,
+     142,    26,   142,    -1,   142,    28,   142,    -1,   142,    27,
+     142,    -1,   142,    24,   142,    -1,   142,    23,   142,    -1,
+     142,    22,   142,    -1,   142,    21,   142,    -1,   142,    20,
+     142,    -1,   142,    19,   142,    -1,   142,    18,   142,    -1,
+     142,    16,   141,    17,   142,    -1,   142,     5,   142,    -1,
+     142,    15,   142,    -1,   142,    14,   142,    -1,   142,    13,
+     142,    -1,   142,    12,   142,    -1,   142,    11,   142,    -1,
+     142,     9,   142,    -1,   142,    10,   142,    -1,   142,     8,
+     142,    -1,   142,     7,   142,    -1,   142,     6,   142,    -1,
+     144,    -1,    38,   154,   119,    93,   143,    -1,    38,   154,
+     119,    93,    95,   126,    96,    -1,   145,    -1,    33,   143,
+      -1,    22,   143,    -1,    31,   143,    -1,    32,   143,    -1,
+      97,   143,    -1,    98,   143,    -1,    40,   143,    -1,    41,
+     143,    -1,    74,   144,    -1,    90,   144,    -1,    38,   141,
+      93,    -1,    74,    38,   154,   119,    93,    -1,    90,    38,
+     154,   119,    93,    -1,   145,    38,   148,    93,    -1,   145,
+      37,   141,    94,    -1,   145,    39,   173,    -1,   145,    36,
+     173,    -1,   145,    40,    -1,   145,    41,    -1,   171,    -1,
+      46,    -1,    47,    -1,    48,    -1,    49,    -1,    45,    -1,
+      44,    -1,    50,    -1,    51,    -1,   146,    -1,   147,    -1,
+      52,    -1,   146,    52,    -1,    53,    -1,   147,    53,    -1,
+      -1,   149,    -1,   142,    -1,   149,     4,   149,    -1,    -1,
+      95,   151,   113,    96,    -1,    -1,   155,    -1,   156,    -1,
+     168,    -1,   165,    -1,   156,   162,    -1,   168,   162,    -1,
+     165,   156,   163,    -1,   165,   168,    -1,   165,   168,   162,
+      -1,   153,    -1,   153,    -1,    77,   173,    -1,    -1,    77,
+     173,   157,   150,    -1,    77,   150,    -1,    81,   173,    -1,
+      -1,    81,   173,   158,   150,    -1,    81,   150,    -1,    85,
+     173,    -1,    -1,    -1,    85,   173,   159,    95,   160,   167,
+      96,    -1,    -1,    85,    95,   161,   167,    96,    -1,    43,
+      -1,   164,    -1,   162,   164,    -1,    -1,   163,   170,    -1,
+     168,    -1,   170,    -1,   169,    -1,   166,    -1,   165,   166,
+      -1,   170,    -1,   169,    -1,    42,    -1,    42,     5,   142,
+      -1,   167,     4,    -1,   167,     4,   167,    -1,    57,    -1,
+      73,    -1,    68,    -1,    69,    -1,    86,    -1,    82,    -1,
+      64,    -1,    61,    -1,    84,    -1,    54,    -1,    76,    -1,
+      63,    -1,    79,    -1,    80,    -1,    71,    -1,    92,    -1,
+      87,    -1,    88,    -1,    91,    -1,    42,    -1,   173,    -1,
+      42,    -1,    43,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -680,21 +683,21 @@ static const yytype_uint16 yyrline[] =
      396,   406,   409,   413,   419,   420,   426,   430,   434,   440,
      444,   445,   451,   452,   458,   459,   459,   470,   476,   484,
      484,   495,   499,   503,   508,   522,   526,   530,   534,   538,
-     544,   547,   550,   553,   556,   563,   564,   570,   571,   575,
+     542,   548,   551,   554,   557,   560,   567,   568,   574,   575,
      579,   583,   587,   591,   595,   599,   603,   607,   611,   615,
      619,   623,   627,   631,   635,   639,   643,   647,   651,   655,
-     659,   663,   667,   671,   675,   679,   683,   687,   693,   694,
-     701,   709,   710,   714,   718,   722,   726,   730,   734,   738,
-     742,   746,   752,   756,   762,   768,   776,   780,   785,   790,
-     794,   798,   799,   806,   813,   820,   827,   834,   841,   848,
-     855,   856,   859,   869,   887,   897,   915,   918,   921,   922,
-     929,   928,   951,   955,   958,   963,   968,   974,   982,   988,
-     994,  1000,  1008,  1016,  1023,  1029,  1028,  1040,  1048,  1054,
-    1053,  1065,  1073,  1082,  1086,  1081,  1103,  1102,  1111,  1117,
-    1118,  1124,  1127,  1133,  1134,  1135,  1138,  1139,  1145,  1146,
-    1149,  1153,  1157,  1158,  1161,  1162,  1163,  1164,  1165,  1166,
-    1167,  1168,  1169,  1172,  1173,  1174,  1175,  1176,  1177,  1178,
-    1181,  1182,  1183,  1186,  1201,  1213,  1214
+     659,   663,   667,   671,   675,   679,   683,   687,   691,   697,
+     698,   705,   713,   714,   718,   722,   726,   730,   734,   738,
+     742,   746,   750,   756,   760,   766,   772,   780,   784,   789,
+     794,   798,   802,   803,   810,   817,   824,   831,   838,   845,
+     852,   859,   860,   863,   873,   891,   901,   919,   922,   925,
+     926,   933,   932,   955,   959,   962,   967,   972,   978,   986,
+     992,   998,  1004,  1012,  1020,  1027,  1033,  1032,  1044,  1052,
+    1058,  1057,  1069,  1077,  1086,  1090,  1085,  1107,  1106,  1115,
+    1121,  1122,  1128,  1131,  1137,  1138,  1139,  1142,  1143,  1149,
+    1150,  1153,  1157,  1161,  1162,  1165,  1166,  1167,  1168,  1169,
+    1170,  1171,  1172,  1173,  1176,  1177,  1178,  1179,  1180,  1181,
+    1182,  1185,  1186,  1187,  1190,  1205,  1217,  1218
 };
 #endif
 
@@ -711,8 +714,8 @@ static const char *const yytname[] =
   "LDCONST", "LCONST", "LLCONST", "LUCONST", "LULCONST", "LVLCONST",
   "LUVLCONST", "LSTRING", "LLSTRING", "LAUTO", "LBREAK", "LCASE", "LCHAR",
   "LCONTINUE", "LDEFAULT", "LDO", "LDOUBLE", "LELSE", "LEXTERN", "LFLOAT",
-  "LFOR", "LGOTO", "LIF", "LINT", "LLONG", "LREGISTER", "LRETURN",
-  "LSHORT", "LSIZEOF", "LUSED", "LSTATIC", "LSTRUCT", "LSWITCH",
+  "LFOR", "LGOTO", "LIF", "LINT", "LLONG", "LPREFETCH", "LREGISTER",
+  "LRETURN", "LSHORT", "LSIZEOF", "LUSED", "LSTATIC", "LSTRUCT", "LSWITCH",
   "LTYPEDEF", "LTYPESTR", "LUNION", "LUNSIGNED", "LWHILE", "LVOID",
   "LENUM", "LSIGNED", "LCONSTNT", "LVOLATILE", "LSET", "LSIGNOF",
   "LRESTRICT", "LINLINE", "')'", "']'", "'{'", "'}'", "'!'", "'~'",
@@ -743,38 +746,38 @@ static const yytype_uint16 yytoknum[] =
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,    41,    93,   123,   125,    33,   126
+     327,   328,   329,    41,    93,   123,   125,    33,   126
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    98,    99,    99,   100,   100,   101,   102,   100,   103,
-     104,   103,   103,   105,   105,   106,   106,   106,   106,   107,
-     107,   108,   109,   108,   108,   110,   110,   111,   111,   113,
-     112,   114,   112,   115,   115,   116,   116,   117,   117,   117,
-     118,   118,   119,   119,   119,   120,   120,   120,   121,   121,
-     121,   122,   122,   123,   123,   123,   124,   124,   124,   124,
-     125,   125,   125,   126,   126,   127,   127,   127,   127,   127,
-     128,   129,   129,   129,   130,   130,   131,   131,   131,   132,
-     132,   132,   133,   133,   134,   135,   134,   134,   134,   136,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     137,   137,   138,   138,   139,   140,   140,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   142,   142,
-     142,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+       0,    99,   100,   100,   101,   101,   102,   103,   101,   104,
+     105,   104,   104,   106,   106,   107,   107,   107,   107,   108,
+     108,   109,   110,   109,   109,   111,   111,   112,   112,   114,
+     113,   115,   113,   116,   116,   117,   117,   118,   118,   118,
+     119,   119,   120,   120,   120,   121,   121,   121,   122,   122,
+     122,   123,   123,   124,   124,   124,   125,   125,   125,   125,
+     126,   126,   126,   127,   127,   128,   128,   128,   128,   128,
+     129,   130,   130,   130,   131,   131,   132,   132,   132,   133,
+     133,   133,   134,   134,   135,   136,   135,   135,   135,   137,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   138,   138,   139,   139,   140,   141,   141,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   143,
      143,   143,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   144,   145,   145,   146,   146,   147,   147,   148,   148,
-     150,   149,   151,   151,   152,   152,   152,   152,   152,   152,
-     152,   152,   153,   154,   155,   156,   155,   155,   155,   157,
-     155,   155,   155,   158,   159,   155,   160,   155,   155,   161,
-     161,   162,   162,   163,   163,   163,   164,   164,   165,   165,
-     166,   166,   166,   166,   167,   167,   167,   167,   167,   167,
-     167,   167,   167,   168,   168,   168,   168,   168,   168,   168,
-     169,   169,   169,   170,   171,   172,   172
+     144,   144,   144,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   146,   146,   147,   147,   148,   148,   149,
+     149,   151,   150,   152,   152,   153,   153,   153,   153,   153,
+     153,   153,   153,   154,   155,   156,   157,   156,   156,   156,
+     158,   156,   156,   156,   159,   160,   156,   161,   156,   156,
+     162,   162,   163,   163,   164,   164,   164,   165,   165,   166,
+     166,   167,   167,   167,   167,   168,   168,   168,   168,   168,
+     168,   168,   168,   168,   169,   169,   169,   169,   169,   169,
+     169,   170,   170,   170,   171,   172,   173,   173
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -790,21 +793,21 @@ static const yytype_uint8 yyr2[] =
        3,     0,     2,     2,     1,     2,     3,     2,     2,     2,
        1,     2,     1,     2,     2,     0,     2,     5,     7,     0,
       10,     5,     7,     3,     5,     2,     2,     3,     5,     5,
-       0,     1,     0,     1,     1,     1,     3,     1,     3,     3,
+       5,     0,     1,     0,     1,     1,     1,     3,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     5,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     1,     5,
-       7,     1,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     5,     5,     4,     4,     3,     3,     2,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     1,     2,     0,     1,     1,     3,
-       0,     4,     0,     1,     1,     1,     1,     2,     2,     3,
-       2,     3,     1,     1,     2,     0,     4,     2,     2,     0,
-       4,     2,     2,     0,     0,     7,     0,     5,     1,     1,
-       2,     0,     2,     1,     1,     1,     1,     2,     1,     1,
-       1,     3,     2,     3,     1,     1,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     3,     5,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+       5,     7,     1,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     3,     5,     5,     4,     4,     3,     3,
+       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     1,     2,     0,     1,     1,
+       3,     0,     4,     0,     1,     1,     1,     1,     2,     2,
+       3,     2,     3,     1,     1,     2,     0,     4,     2,     2,
+       0,     4,     2,     2,     0,     0,     7,     0,     5,     1,
+       1,     2,     0,     2,     1,     1,     1,     1,     2,     1,
+       1,     1,     3,     2,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -812,58 +815,58 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,   182,     1,   208,   233,   224,   231,   235,   230,   226,
-     227,   238,   225,   234,     0,   236,   237,     0,   229,   232,
-       0,   228,   240,   241,   242,   239,     3,     0,   193,   183,
-     184,   186,   216,   185,   219,   218,   245,   246,   180,   197,
-     194,   201,   198,   206,   202,     4,   211,     0,     0,     6,
-      13,    15,   244,   187,   209,   213,   215,   214,   211,   217,
-     190,   188,     0,     0,     0,     0,     0,     0,     0,     5,
-       0,    25,     0,   102,    63,   210,   189,   191,     0,   192,
-      29,   196,   200,   220,     0,   204,    14,   212,    16,    12,
+       2,   183,     1,   209,   234,   225,   232,   236,   231,   227,
+     228,   239,   226,   235,     0,   237,   238,     0,   230,   233,
+       0,   229,   241,   242,   243,   240,     3,     0,   194,   184,
+     185,   187,   217,   186,   220,   219,   246,   247,   181,   198,
+     195,   202,   199,   207,   203,     4,   212,     0,     0,     6,
+      13,    15,   245,   188,   210,   214,   216,   215,   212,   218,
+     191,   189,     0,     0,     0,     0,     0,     0,     0,     5,
+       0,    25,     0,   103,    63,   211,   190,   192,     0,   193,
+      29,   197,   201,   221,     0,   205,    14,   213,    16,    12,
        9,     7,     0,     0,     0,     0,     0,     0,     0,     0,
-     243,   167,   166,   162,   163,   164,   165,   168,   169,   172,
-     174,     0,     0,     0,     0,     0,   103,   104,   107,   138,
-     141,   170,   171,   161,     0,     0,    64,    40,    65,   181,
-      31,    33,     0,   222,   207,     0,     0,     0,     0,    11,
-      51,   143,   144,   145,   142,     0,   105,    40,   148,   149,
-       0,   150,     0,   151,   146,   147,    18,     0,     0,     0,
+     244,   168,   167,   163,   164,   165,   166,   169,   170,   173,
+     175,     0,     0,     0,     0,     0,   104,   105,   108,   139,
+     142,   171,   172,   162,     0,     0,    64,    40,    65,   182,
+      31,    33,     0,   223,   208,     0,     0,     0,     0,    11,
+      51,   144,   145,   146,   143,     0,   106,    40,   149,   150,
+       0,   151,     0,   152,   147,   148,    18,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   176,
-       0,   159,   160,   173,   175,     0,    17,     0,   211,   102,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
+       0,   160,   161,   174,   176,     0,    17,     0,   212,   103,
        0,    67,    66,    41,    44,    45,    33,     0,    37,     0,
-      34,    35,    15,   221,   223,     0,    71,     8,    27,     0,
-       0,     0,    61,    58,    60,     0,     0,   152,   211,     0,
-       0,    40,    40,   127,   137,   136,   135,   133,   134,   132,
-     131,   130,   129,   128,     0,   125,   124,   123,   122,   121,
-     120,   119,   115,   116,   118,   117,   113,   114,   111,   112,
-     108,   109,   110,   158,     0,   178,     0,   177,   157,    68,
-      69,    42,     0,    48,     0,   102,    63,     0,    39,    30,
-       0,     0,   205,     0,    26,     0,    54,     0,    56,    55,
-      62,    59,    52,   106,    42,     0,     0,     0,     0,   156,
-     155,     0,    43,    49,    50,     0,     0,    32,    36,    38,
-       0,   243,     0,     0,     0,     0,     0,     0,     0,   100,
-       0,     0,     0,     0,    70,    72,    85,    74,    73,    80,
-       0,     0,     0,   101,     0,    28,    53,    57,     0,   139,
-     153,   154,   126,   179,    47,    46,    79,    78,    95,     0,
-      96,    77,     0,     0,     0,     0,   176,     0,     0,   176,
-      75,    81,    86,     0,    84,    19,    21,     0,     0,    76,
-       0,    97,     0,    93,     0,     0,     0,     0,   100,     0,
-      20,     0,   140,     0,     0,     0,     0,     0,     0,     0,
-      82,     0,     0,    24,     0,    87,    98,    94,    91,    99,
-     100,    83,    23,     0,     0,     0,    92,    88,   100,     0,
-       0,    90
+      34,    35,    15,   222,   224,     0,    71,     8,    27,     0,
+       0,     0,    61,    58,    60,     0,     0,   153,   212,     0,
+       0,    40,    40,   128,   138,   137,   136,   134,   135,   133,
+     132,   131,   130,   129,     0,   126,   125,   124,   123,   122,
+     121,   120,   116,   117,   119,   118,   114,   115,   112,   113,
+     109,   110,   111,   159,     0,   179,     0,   178,   158,    68,
+      69,    42,     0,    48,     0,   103,    63,     0,    39,    30,
+       0,     0,   206,     0,    26,     0,    54,     0,    56,    55,
+      62,    59,    52,   107,    42,     0,     0,     0,     0,   157,
+     156,     0,    43,    49,    50,     0,     0,    32,    36,    38,
+       0,   244,     0,     0,     0,     0,     0,     0,     0,     0,
+     101,     0,     0,     0,     0,    70,    72,    85,    74,    73,
+      80,     0,     0,     0,   102,     0,    28,    53,    57,     0,
+     140,   154,   155,   127,   180,    47,    46,    79,    78,    95,
+       0,    96,    77,     0,     0,     0,   177,     0,   177,     0,
+       0,   177,    75,    81,    86,     0,    84,    19,    21,     0,
+       0,    76,     0,    97,     0,     0,    93,     0,     0,     0,
+       0,   101,     0,    20,     0,   141,     0,     0,     0,     0,
+       0,     0,     0,     0,    82,     0,     0,    24,     0,    87,
+      99,    98,    94,    91,   100,   101,    83,    23,     0,     0,
+       0,    92,    88,   101,     0,     0,    90
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    26,    71,   136,    48,    72,   208,    50,   325,
-     367,   379,    91,   219,    78,   131,   206,   209,   210,   211,
+      -1,     1,    26,    71,   136,    48,    72,   208,    50,   326,
+     369,   382,    91,   219,    78,   131,   206,   209,   210,   211,
      202,   203,   204,   205,   222,   223,   224,   225,   125,   126,
-     217,   283,   326,   327,   328,   389,   329,   330,   331,   332,
-     115,   116,   333,   146,   118,   119,   120,   121,   122,   266,
+     217,   283,   327,   328,   329,   393,   330,   331,   332,   333,
+     115,   116,   334,   146,   118,   119,   120,   121,   122,   266,
      267,    39,    62,    27,    79,   127,    29,    30,    63,    64,
       66,   135,    65,    53,    67,    54,    31,    32,    84,    33,
       34,    35,   123,    51,    52
@@ -871,184 +874,184 @@ static const yytype_int16 yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -366
+#define YYPACT_NINF -331
 static const yytype_int16 yypact[] =
 {
-    -366,   541,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
-    -366,  -366,  -366,  -366,    -3,  -366,  -366,    -3,  -366,  -366,
-     140,  -366,  -366,  -366,  -366,  -366,  -366,   161,  -366,  -366,
-     949,   914,  -366,   949,  -366,  -366,  -366,  -366,  -366,  -366,
-     -64,  -366,   -60,  -366,   -17,  -366,  -366,    21,    70,   316,
-      51,  -366,  -366,   949,  -366,  -366,  -366,  -366,  -366,  -366,
-     949,   949,   914,   -13,   -13,    57,     9,   154,    54,  -366,
-      21,  -366,   164,   745,   836,  -366,   -41,   949,   875,  -366,
-    -366,  -366,  -366,   167,     7,  -366,  -366,  -366,  -366,  -366,
-     181,   914,   677,   745,   745,   745,   745,   607,   745,   745,
-    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
-    -366,   779,   813,   745,   745,    95,  -366,  1067,  -366,  -366,
-     422,   141,   145,  -366,   176,   139,   225,   128,  -366,  -366,
-    -366,   289,   745,    57,  -366,    57,   149,    21,   169,  -366,
-    1067,  -366,  -366,  -366,  -366,    31,  1067,   130,  -366,  -366,
-     607,  -366,   607,  -366,  -366,  -366,  -366,   745,   745,   745,
-     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
-     745,   745,   745,   745,   745,   745,   745,   745,   745,   745,
-     745,   745,   745,   745,   745,   745,   745,    53,   745,   745,
-      53,  -366,  -366,  -366,  -366,   199,  -366,   836,  -366,   745,
-     147,  -366,  -366,  -366,   111,  -366,   289,   745,  -366,   243,
-     247,  -366,   235,  1067,  -366,    13,  -366,  -366,  -366,   222,
-      53,   745,   260,   255,   169,   172,   745,  -366,  -366,    -6,
-     180,   130,   130,  1067,  1067,  1067,  1067,  1067,  1067,  1067,
-    1067,  1067,  1067,  1067,    16,  1084,  1100,  1115,  1129,  1142,
-    1153,  1153,   319,   319,   319,   319,   303,   303,   295,   295,
-    -366,  -366,  -366,  -366,    11,  1067,   186,   269,  -366,  -366,
-    -366,   190,   188,  -366,   187,   745,   836,   280,  -366,  -366,
-     289,   745,  -366,   338,  -366,    21,  -366,   191,  -366,  -366,
-     284,   255,  -366,  -366,   217,   711,   202,   204,   745,  -366,
-    -366,   745,  -366,  -366,  -366,   198,   207,  -366,  -366,  -366,
-     309,   296,   312,   745,   320,   307,   435,    53,   302,   745,
-     305,   306,   308,   318,  -366,  -366,   504,  -366,  -366,  -366,
-     149,   292,   342,   354,   259,  -366,  -366,  -366,   169,  -366,
-    -366,  -366,   421,  -366,  -366,  -366,  -366,  -366,  -366,  1036,
-    -366,  -366,   277,   358,   745,   359,   745,   745,   745,   745,
-    -366,  -366,  -366,   325,  -366,  -366,   361,   234,   272,  -366,
-     326,  -366,    64,  -366,   276,    66,    67,   281,   607,   367,
-    -366,    21,  -366,   745,   435,   371,   435,   435,   372,   397,
-    -366,    21,   677,  -366,    68,   368,  -366,  -366,  -366,  -366,
-     745,   427,  -366,   461,   435,   462,  -366,  -366,   745,   377,
-     435,  -366
+    -331,   548,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,    -3,  -331,  -331,    -3,  -331,  -331,
+     149,  -331,  -331,  -331,  -331,  -331,  -331,   264,  -331,  -331,
+     965,   929,  -331,   965,  -331,  -331,  -331,  -331,  -331,  -331,
+     -75,  -331,   -72,  -331,   -60,  -331,  -331,   307,    60,   270,
+     156,  -331,  -331,   965,  -331,  -331,  -331,  -331,  -331,  -331,
+     965,   965,   929,   -44,   -44,    29,   -15,   199,   -10,  -331,
+     307,  -331,    83,   756,   849,  -331,   140,   965,   889,  -331,
+    -331,  -331,  -331,    86,    12,  -331,  -331,  -331,  -331,  -331,
+      90,   929,   686,   756,   756,   756,   756,   615,   756,   756,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,   791,   826,   756,   756,     9,  -331,  1084,  -331,  -331,
+     708,    54,    57,  -331,   110,    56,   152,   310,  -331,  -331,
+    -331,   279,   756,    29,  -331,    29,    63,   307,   165,  -331,
+    1084,  -331,  -331,  -331,  -331,    30,  1084,    44,  -331,  -331,
+     615,  -331,   615,  -331,  -331,  -331,  -331,   756,   756,   756,
+     756,   756,   756,   756,   756,   756,   756,   756,   756,   756,
+     756,   756,   756,   756,   756,   756,   756,   756,   756,   756,
+     756,   756,   756,   756,   756,   756,   756,   157,   756,   756,
+     157,  -331,  -331,  -331,  -331,   115,  -331,   849,  -331,   756,
+     128,  -331,  -331,  -331,   182,  -331,   279,   756,  -331,   164,
+     200,  -331,   208,  1084,  -331,    13,  -331,  -331,  -331,   262,
+     157,   756,   225,   228,   165,    73,   756,  -331,  -331,    -7,
+     150,    44,    44,  1084,  1084,  1084,  1084,  1084,  1084,  1084,
+    1084,  1084,  1084,  1084,    28,   304,  1100,  1115,  1129,  1142,
+    1153,  1153,   433,   433,   433,   433,   333,   333,   265,   265,
+    -331,  -331,  -331,  -331,     8,  1084,   153,   236,  -331,  -331,
+    -331,   147,   158,  -331,   161,   756,   849,   247,  -331,  -331,
+     279,   756,  -331,   341,  -331,   307,  -331,   175,  -331,  -331,
+     254,   228,  -331,  -331,   135,   721,   188,   190,   756,  -331,
+    -331,   756,  -331,  -331,  -331,   191,   211,  -331,  -331,  -331,
+     298,   301,   338,   756,   343,   339,   439,   157,   319,   321,
+     756,   322,   323,   324,   332,  -331,  -331,   509,  -331,  -331,
+    -331,    63,   306,   372,   373,   277,  -331,  -331,  -331,   165,
+    -331,  -331,  -331,   425,  -331,  -331,  -331,  -331,  -331,  -331,
+    1053,  -331,  -331,   293,   375,   756,   756,   400,   756,   756,
+     756,   756,  -331,  -331,  -331,   396,  -331,  -331,   430,   285,
+     377,  -331,   431,  -331,    55,   381,  -331,   382,    62,    64,
+     383,   615,   473,  -331,   307,  -331,   756,   439,   479,   490,
+     439,   439,   493,   497,  -331,   307,   686,  -331,    66,   440,
+    -331,  -331,  -331,  -331,  -331,   756,   499,  -331,   498,   439,
+     504,  -331,  -331,   756,   415,   439,  -331
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -366,  -366,  -366,  -366,  -366,   400,  -366,   -26,  -366,  -366,
-    -365,  -366,  -366,   189,  -366,  -366,  -366,   266,   209,  -366,
-    -122,  -187,  -366,  -366,   -82,   254,  -366,   133,   216,   299,
-     168,  -366,  -366,   171,  -304,  -366,   173,  -366,  -366,  -227,
-    -181,  -183,   -83,   -45,   -38,   137,  -366,  -366,  -366,  -308,
-     203,     2,  -366,  -366,    -1,     0,   -88,   472,  -366,  -366,
-    -366,  -366,  -366,   -10,   -51,   208,  -366,   474,    22,   256,
-     265,   -24,   -52,  -127,   -12
+    -331,  -331,  -331,  -331,  -331,   445,  -331,   -26,  -331,  -331,
+    -330,  -331,  -331,   233,  -331,  -331,  -331,   313,   230,  -331,
+    -132,  -187,  -331,  -331,   -82,   292,  -331,   181,   245,   326,
+     193,  -331,  -331,   198,  -227,  -331,   203,  -331,  -331,  -309,
+    -181,  -183,   -83,   -45,   -38,   243,  -331,  -331,  -331,  -175,
+     226,    10,  -331,  -331,    -1,     0,   -88,   495,  -331,  -331,
+    -331,  -331,  -331,   -14,   -51,   -28,  -331,   501,   -85,   218,
+     231,   -24,   -52,  -127,   -12
 };
 
 /* 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 zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -204
+#define YYTABLE_NINF -205
 static const yytype_int16 yytable[] =
 {
       28,    49,    40,   137,   212,    42,    57,    76,    44,    57,
-     139,   133,   352,   274,   145,   226,   393,   133,   272,    41,
-     226,    68,   128,    61,   278,   230,   401,   228,   117,    57,
-    -195,   199,   229,   298,  -199,   226,    57,    57,   287,    36,
-      37,    86,   274,    87,    90,    22,    23,   140,   374,    24,
-      77,   377,    87,    57,    46,   141,   142,   143,   144,    47,
-     148,   149,    80,    36,    37,    81,    82,   145,   226,   145,
-     226,   226,   226,    69,    70,   154,   155,  -203,   130,   212,
-     395,    38,   397,   398,   302,   244,   273,   213,    73,    74,
-      28,    38,   355,   140,   305,    36,    37,   147,   309,    83,
-     407,   201,   134,    85,   299,   264,   411,   302,   282,   296,
-     297,   218,   233,   234,   235,   236,   237,   238,   239,   240,
+     139,   357,   226,   274,   145,   230,   133,   133,   272,    61,
+    -196,    68,   128,  -200,   278,    75,   228,    41,   117,    57,
+     199,   229,   226,    75,   226,  -204,    57,    57,   287,    36,
+      37,    86,   274,    87,    90,   298,    77,   140,   214,    75,
+     215,    38,    87,    57,   397,   141,   142,   143,   144,   226,
+     148,   149,    80,    69,    70,   406,   226,   145,   226,   145,
+     226,    83,   394,    81,    82,   154,   155,   228,   130,   212,
+      85,   199,   229,    88,   302,   244,   273,   213,    92,   353,
+      28,   132,    38,   140,   305,   -10,   410,   147,   309,   296,
+     297,   201,   299,   156,   414,   264,   193,   302,   134,   282,
+     194,   218,   233,   234,   235,   236,   237,   238,   239,   240,
      241,   242,   243,   227,   245,   246,   247,   248,   249,   250,
      251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   290,   293,   265,   128,    88,   271,   275,   276,
-     231,   390,   232,   212,   117,   214,   384,   215,   386,   387,
-     403,   198,   117,   228,    45,   199,   200,   199,   229,    92,
-      36,    37,   132,   405,    68,   263,   117,   294,   268,   140,
-     198,   409,    36,    37,   199,   200,   -10,    46,   156,    36,
-      37,    93,    47,   193,    46,   334,    36,    37,   194,    47,
-      94,    95,    96,    36,    37,   220,   221,    97,   286,    98,
-      99,   100,   195,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   198,   128,   284,   285,   199,   200,   197,
-     117,   196,    36,    37,    43,   269,   117,   380,   381,   273,
-      22,    23,   111,   216,    24,    86,   279,    87,   151,   153,
-     228,   280,   281,   342,   199,   229,   265,   339,   112,   218,
-     289,    75,   365,   138,   288,   113,   114,   292,   349,    75,
-      87,   372,   295,   301,   375,   376,    22,    23,   300,   304,
-      24,   303,    28,   307,   336,    75,    55,    60,   337,    55,
-     391,   344,    46,   140,   340,    56,   341,    47,    56,   345,
-     394,    36,    37,    22,    23,   353,   207,    24,   366,    55,
-     402,   265,   346,   347,   265,   348,    55,    55,    56,    -9,
-      -9,   -10,    46,   350,   351,    56,    56,    47,   184,   185,
-     186,    36,    37,    55,   182,   183,   184,   185,   186,   310,
-     354,  -100,    56,   356,   357,   364,   358,   140,   180,   181,
-     182,   183,   184,   185,   186,   366,   359,   363,   226,   370,
-      93,   371,   373,   378,   383,   366,   -22,   382,   385,    94,
-      95,    96,   392,   388,   396,   399,    97,    28,    98,    99,
-     311,     3,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,     4,   312,   313,     5,   314,   315,   316,     6,
-     400,     7,     8,   -89,   317,   318,     9,    10,    11,   319,
-      12,   111,   320,    13,    14,   321,    15,    16,    17,    18,
-     322,    19,    20,    21,    22,    23,   323,   112,    24,    25,
-     404,   381,   -85,   324,   113,   114,   310,   168,  -100,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,    93,   187,   188,
-     189,   190,   191,   192,   406,   408,    94,    95,    96,   410,
-      89,   368,   277,    97,   335,    98,    99,   311,   291,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   308,
-     312,   313,   306,   314,   315,   316,   270,   360,   362,   361,
-     -89,   317,   318,    58,   343,    59,   319,  -100,   111,   320,
-       0,     0,   321,     0,     0,     0,     0,   322,     0,     0,
-       0,     0,     0,   323,   112,     0,    93,     0,     0,   -85,
-       0,   113,   114,     0,     0,    94,    95,    96,     0,     0,
-       0,     2,    97,     0,    98,    99,   311,     0,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,     0,   312,
-     313,     0,   314,   315,   316,     0,     0,     0,     0,   -89,
-     317,   318,     0,     0,     0,   319,     0,   111,   320,     0,
-       0,   321,     0,     0,     3,     0,   322,     0,     0,     0,
-       0,     0,   323,   112,     0,     4,     0,     0,     5,     0,
-     113,   114,     6,     0,     7,     8,     0,     0,     0,     9,
-      10,    11,     0,    12,     0,     0,    13,    14,     0,    15,
-      16,    17,    18,     0,    19,    20,    21,    22,    23,    93,
-       0,    24,    25,     0,     0,     0,     0,     0,    94,    95,
-      96,     0,     0,     0,     0,    97,     0,    98,    99,   100,
-       3,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,     4,     0,     0,     5,     0,     0,     0,     6,     0,
-       7,     8,     0,     0,     0,     9,    10,    11,     0,    12,
-     111,     0,    13,    14,     0,    15,    16,    17,    18,     0,
-      19,    20,    21,    22,    23,     0,   112,    24,    25,    93,
-       0,     0,     0,   113,   114,     0,     0,     0,    94,    95,
-      96,     0,     0,     0,     0,    97,     0,    98,    99,   100,
-       0,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,     0,     0,    93,     0,     0,     0,     0,     0,     0,
+     261,   262,   290,   293,   265,   128,   195,   271,   387,   196,
+     231,   269,   232,   212,   117,   390,   197,   391,   216,   408,
+     399,   198,   117,   402,   403,   199,   200,   279,   228,   292,
+      36,    37,   199,   229,    68,   263,   117,   294,   268,   140,
+     198,   375,   412,   377,   199,   200,   380,    93,   416,    36,
+      37,    36,    37,    73,    74,   335,    94,    95,    96,    36,
+      37,   220,   221,    97,   280,    98,    99,   100,   286,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   275,
+     276,   273,    22,    23,   128,   281,    24,    22,    23,   288,
+     117,    24,    46,   289,    22,    23,   117,    47,    24,   111,
+     301,    36,    37,   295,    43,    86,   300,    87,    55,    60,
+     307,    55,   303,   343,   304,   112,   265,   340,   338,   218,
+     138,    56,   113,   114,    56,   284,   285,    45,   350,   337,
+      87,    55,   374,    -9,    -9,   -10,   378,   379,    55,    55,
+     367,   341,    28,   342,    56,   345,    22,    23,   383,   384,
+      24,    56,    56,   395,   140,    55,   207,    46,   184,   185,
+     186,   347,    47,   398,   346,   354,    36,    37,    56,   368,
+      46,   265,    46,   265,   407,    47,   265,    47,   348,    36,
+      37,    36,    37,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+      46,   349,   310,   198,  -101,    47,   351,   199,   200,    36,
+      37,   140,    36,    37,   151,   153,   352,   355,   368,   356,
+     358,   359,   360,    93,   182,   183,   184,   185,   186,   368,
+     361,   365,    94,    95,    96,   366,   372,   226,   373,    97,
+      28,    98,    99,   311,     3,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,     4,   312,   313,     5,   314,
+     315,   316,     6,   376,     7,     8,   -89,   317,   318,     9,
+      10,   319,    11,   320,    12,   111,   321,    13,    14,   322,
+      15,    16,    17,    18,   323,    19,    20,    21,    22,    23,
+     324,   112,    24,    25,   381,   -22,   -85,   325,   113,   114,
+     310,   168,  -101,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,    93,   180,   181,   182,   183,   184,   185,   186,   386,
+      94,    95,    96,   385,   388,   389,   392,    97,   396,    98,
+      99,   311,   400,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   401,   312,   313,   404,   314,   315,   316,
+     405,   411,   409,   384,   -89,   317,   318,   413,   415,   319,
+     308,   320,  -101,   111,   321,    89,   291,   322,   336,   277,
+     370,   306,   323,   270,   364,   362,    58,   344,   324,   112,
+     363,    93,    59,     0,   -85,     0,   113,   114,     0,     0,
+      94,    95,    96,     0,     0,     0,     0,    97,     2,    98,
+      99,   311,     0,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,     0,   312,   313,     0,   314,   315,   316,
+       0,     0,     0,     0,   -89,   317,   318,     0,     0,   319,
+       0,   320,     0,   111,   321,     0,     0,   322,     0,     0,
+       0,     3,   323,     0,     0,     0,     0,     0,   324,   112,
+       0,     0,     4,     0,     0,     5,   113,   114,     0,     6,
+       0,     7,     8,     0,     0,     0,     9,    10,     0,    11,
+       0,    12,     0,     0,    13,    14,     0,    15,    16,    17,
+      18,     0,    19,    20,    21,    22,    23,    93,     0,    24,
+      25,     0,     0,     0,     0,     0,    94,    95,    96,     0,
+       0,     0,     0,    97,     0,    98,    99,   100,     3,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,     4,
+       0,     0,     5,     0,     0,     0,     6,     0,     7,     8,
+       0,     0,     0,     9,    10,     0,    11,     0,    12,   111,
+       0,    13,    14,     0,    15,    16,    17,    18,     0,    19,
+      20,    21,    22,    23,     0,   112,    24,    25,    93,     0,
+       0,     0,   113,   114,     0,     0,     0,    94,    95,    96,
+       0,     0,     0,     0,    97,     0,    98,    99,   100,     0,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+       0,     0,     0,    93,   187,   188,   189,   190,   191,   192,
        0,     0,    94,    95,    96,     0,     0,     0,     0,    97,
      111,    98,    99,   100,     0,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,     0,   112,    93,     0,     0,
-       0,   138,     0,   113,   114,     0,    94,    95,    96,     0,
-       0,     0,     0,    97,   111,    98,    99,   100,     0,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,     0,
-     112,    93,     0,     0,     0,   338,     0,   113,   114,     0,
-      94,    95,    96,     0,     0,     0,     0,   150,   111,    98,
-      99,   100,     0,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,     0,   112,    93,     0,     0,     0,     0,
-       0,   113,   114,     0,    94,    95,    96,     0,     0,     0,
-       0,   152,   111,    98,    99,   100,     0,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,     0,   112,     0,
-       0,     0,   124,     0,     0,   113,   114,     0,   100,     3,
-       0,     0,     0,     0,     0,     0,   111,     0,     0,     0,
-       4,     0,     0,     5,     0,     0,     0,     6,     0,     7,
-       8,     0,   112,     0,     9,    10,    11,     0,    12,   113,
-     114,    13,    14,     0,    15,    16,    17,    18,     3,    19,
-      20,    21,    22,    23,     0,     0,    24,    25,     0,     4,
-       0,     0,     5,     0,     0,     0,     6,     0,     7,     8,
-       0,     0,     0,     9,    10,    11,     0,    12,     0,     0,
-      13,    14,     0,    15,    16,    17,    18,     3,    19,    20,
-      21,    22,    23,     0,     0,    24,    25,     0,     4,     0,
-     129,     5,     0,     0,     0,     6,     0,     7,     8,     0,
-       0,     0,     9,    10,    11,     0,    12,     0,     0,    13,
-      14,     0,    15,    16,    17,    18,     0,    19,    20,    21,
-      22,    23,     0,     4,    24,    25,     5,     0,     0,     0,
-       6,     0,     7,     8,     0,     0,     0,     9,    10,    11,
-       0,    12,     0,     0,    13,     0,     0,    15,    16,     0,
-      18,     0,    19,     0,    21,    22,    23,     0,     0,    24,
-      25,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   369,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,     0,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   170,   171,   172,   173,   174,   175,   176,
+     106,   107,   108,   109,   110,     0,   112,     0,    93,     0,
+       0,   138,     0,   113,   114,     0,     0,    94,    95,    96,
+       0,     0,     0,     0,    97,   111,    98,    99,   100,     0,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+       0,   112,     0,    93,     0,     0,   339,     0,   113,   114,
+       0,     0,    94,    95,    96,     0,     0,     0,     0,   150,
+     111,    98,    99,   100,     0,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,     0,   112,     0,    93,     0,
+       0,     0,     0,   113,   114,     0,     0,    94,    95,    96,
+       0,     0,     0,     0,   152,   111,    98,    99,   100,     0,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+       0,   112,     0,     0,     0,   124,     0,     0,   113,   114,
+       0,   100,     3,     0,     0,     0,     0,     0,     0,     0,
+     111,     0,     0,     4,     0,     0,     5,     0,     0,     0,
+       6,     0,     7,     8,     0,     0,   112,     9,    10,     0,
+      11,     0,    12,   113,   114,    13,    14,     0,    15,    16,
+      17,    18,     3,    19,    20,    21,    22,    23,     0,     0,
+      24,    25,     0,     4,     0,     0,     5,     0,     0,     0,
+       6,     0,     7,     8,     0,     0,     0,     9,    10,     0,
+      11,     0,    12,     0,     0,    13,    14,     0,    15,    16,
+      17,    18,     3,    19,    20,    21,    22,    23,     0,     0,
+      24,    25,     0,     4,     0,   129,     5,     0,     0,     0,
+       6,     0,     7,     8,     0,     0,     0,     9,    10,     0,
+      11,     0,    12,     0,     0,    13,    14,     0,    15,    16,
+      17,    18,     0,    19,    20,    21,    22,    23,     0,     4,
+      24,    25,     5,     0,     0,     0,     6,     0,     7,     8,
+       0,     0,     0,     9,    10,     0,    11,     0,    12,     0,
+       0,    13,     0,     0,    15,    16,     0,    18,     0,    19,
+       0,    21,    22,    23,     0,     0,    24,    25,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     371,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,     0,   169,   170,   171,   172,   173,   174,   175,   176,
      177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
      181,   182,   183,   184,   185,   186,   172,   173,   174,   175,
@@ -1062,116 +1065,116 @@ static const yytype_int16 yytable[] =
 static const yytype_int16 yycheck[] =
 {
        1,    27,    14,    91,   131,    17,    30,    58,    20,    33,
-      92,     4,   316,   200,    97,     4,   381,     4,   199,    17,
-       4,    47,    74,    33,   207,   147,   391,    33,    73,    53,
-      94,    37,    38,    17,    94,     4,    60,    61,   221,    42,
-      43,    67,   229,    67,    70,    86,    87,    92,   356,    90,
-      60,   359,    76,    77,    33,    93,    94,    95,    96,    38,
-      98,    99,    62,    42,    43,    63,    64,   150,     4,   152,
-       4,     4,     4,     3,     4,   113,   114,    94,    78,   206,
-     384,    94,   386,   387,   271,   168,    92,   132,    37,    38,
-      91,    94,   319,   138,   275,    42,    43,    97,   281,    42,
-     404,   127,    95,    94,    93,   188,   410,   294,    95,   231,
-     232,   137,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,    92,   169,   170,   171,   172,   173,   174,
+      92,   320,     4,   200,    97,   147,     4,     4,   199,    33,
+      95,    47,    74,    95,   207,    53,    33,    17,    73,    53,
+      37,    38,     4,    61,     4,    95,    60,    61,   221,    42,
+      43,    67,   229,    67,    70,    17,    60,    92,   133,    77,
+     135,    95,    76,    77,   384,    93,    94,    95,    96,     4,
+      98,    99,    62,     3,     4,   395,     4,   150,     4,   152,
+       4,    42,   381,    63,    64,   113,   114,    33,    78,   206,
+      95,    37,    38,    93,   271,   168,    93,   132,     5,   316,
+      91,     5,    95,   138,   275,     5,   405,    97,   281,   231,
+     232,   127,    94,    94,   413,   188,    52,   294,    96,    96,
+      53,   137,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,    93,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   224,   226,   189,   197,    92,   198,    37,    38,
-     150,   378,   152,   280,   199,   133,    92,   135,    92,    92,
-      92,    33,   207,    33,     3,    37,    38,    37,    38,     5,
-      42,    43,     5,   400,   200,   187,   221,   228,   190,   224,
-      33,   408,    42,    43,    37,    38,     5,    33,    93,    42,
-      43,    22,    38,    52,    33,   283,    42,    43,    53,    38,
-      31,    32,    33,    42,    43,    36,    37,    38,   220,    40,
-      41,    42,    36,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    33,   276,     3,     4,    37,    38,     4,
-     275,    92,    42,    43,    94,    36,   281,     3,     4,    92,
-      86,    87,    73,    94,    90,   271,     3,   271,   111,   112,
-      33,     4,    17,   298,    37,    38,   301,   295,    89,   285,
-       5,    53,     3,    94,     4,    96,    97,    95,   313,    61,
-     294,   354,    92,     4,   357,   358,    86,    87,    92,    92,
-      90,    93,   283,     3,    93,    77,    30,    31,     4,    33,
-     378,    93,    33,   338,    92,    30,    92,    38,    33,    92,
-     383,    42,    43,    86,    87,   317,    17,    90,   334,    53,
-     392,   356,     3,    17,   359,     3,    60,    61,    53,     3,
-       4,     5,    33,     3,    17,    60,    61,    38,    33,    34,
-      35,    42,    43,    77,    31,    32,    33,    34,    35,     1,
-      38,     3,    77,    38,    38,     3,    38,   392,    29,    30,
-      31,    32,    33,    34,    35,   381,    38,    65,     4,    82,
-      22,     3,     3,    38,    38,   391,     5,    95,    92,    31,
-      32,    33,     5,    92,     3,     3,    38,   378,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-       3,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      62,     4,    94,    95,    96,    97,     1,    16,     3,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    22,    36,    37,
-      38,    39,    40,    41,     3,     3,    31,    32,    33,    92,
-      70,   338,   206,    38,   285,    40,    41,    42,   224,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,   280,
-      55,    56,   276,    58,    59,    60,   197,   326,   330,   326,
-      65,    66,    67,    31,   301,    31,    71,     3,    73,    74,
-      -1,    -1,    77,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    -1,    22,    -1,    -1,    94,
-      -1,    96,    97,    -1,    -1,    31,    32,    33,    -1,    -1,
-      -1,     0,    38,    -1,    40,    41,    42,    -1,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    -1,    55,
-      56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,
-      -1,    77,    -1,    -1,    43,    -1,    82,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    -1,    54,    -1,    -1,    57,    -1,
-      96,    97,    61,    -1,    63,    64,    -1,    -1,    -1,    68,
-      69,    70,    -1,    72,    -1,    -1,    75,    76,    -1,    78,
-      79,    80,    81,    -1,    83,    84,    85,    86,    87,    22,
-      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    31,    32,
-      33,    -1,    -1,    -1,    -1,    38,    -1,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    -1,    -1,    57,    -1,    -1,    -1,    61,    -1,
-      63,    64,    -1,    -1,    -1,    68,    69,    70,    -1,    72,
-      73,    -1,    75,    76,    -1,    78,    79,    80,    81,    -1,
-      83,    84,    85,    86,    87,    -1,    89,    90,    91,    22,
-      -1,    -1,    -1,    96,    97,    -1,    -1,    -1,    31,    32,
-      33,    -1,    -1,    -1,    -1,    38,    -1,    40,    41,    42,
-      -1,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    22,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,    38,
-      73,    40,    41,    42,    -1,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    -1,    89,    22,    -1,    -1,
-      -1,    94,    -1,    96,    97,    -1,    31,    32,    33,    -1,
-      -1,    -1,    -1,    38,    73,    40,    41,    42,    -1,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      89,    22,    -1,    -1,    -1,    94,    -1,    96,    97,    -1,
-      31,    32,    33,    -1,    -1,    -1,    -1,    38,    73,    40,
+     185,   186,   224,   226,   189,   197,    36,   198,    93,    93,
+     150,    36,   152,   280,   199,    93,     4,    93,    95,    93,
+     387,    33,   207,   390,   391,    37,    38,     3,    33,    96,
+      42,    43,    37,    38,   200,   187,   221,   228,   190,   224,
+      33,   356,   409,   358,    37,    38,   361,    22,   415,    42,
+      43,    42,    43,    37,    38,   283,    31,    32,    33,    42,
+      43,    36,    37,    38,     4,    40,    41,    42,   220,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    37,
+      38,    93,    87,    88,   276,    17,    91,    87,    88,     4,
+     275,    91,    33,     5,    87,    88,   281,    38,    91,    74,
+       4,    42,    43,    93,    95,   271,    93,   271,    30,    31,
+       3,    33,    94,   298,    93,    90,   301,   295,     4,   285,
+      95,    30,    97,    98,    33,     3,     4,     3,   313,    94,
+     294,    53,   355,     3,     4,     5,   359,   360,    60,    61,
+       3,    93,   283,    93,    53,    94,    87,    88,     3,     4,
+      91,    60,    61,   381,   339,    77,    17,    33,    33,    34,
+      35,     3,    38,   386,    93,   317,    42,    43,    77,   335,
+      33,   356,    33,   358,   396,    38,   361,    38,    17,    42,
+      43,    42,    43,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      33,     3,     1,    33,     3,    38,     3,    37,    38,    42,
+      43,   396,    42,    43,   111,   112,    17,    38,   384,    38,
+      38,    38,    38,    22,    31,    32,    33,    34,    35,   395,
+      38,    65,    31,    32,    33,     3,    83,     4,     3,    38,
+     381,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,     3,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    38,     5,    95,    96,    97,    98,
+       1,    16,     3,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    22,    29,    30,    31,    32,    33,    34,    35,    38,
+      31,    32,    33,    96,    93,    93,    93,    38,     5,    40,
+      41,    42,     3,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,     3,    55,    56,     3,    58,    59,    60,
+       3,     3,    62,     4,    65,    66,    67,     3,    93,    70,
+     280,    72,     3,    74,    75,    70,   224,    78,   285,   206,
+     339,   276,    83,   197,   331,   327,    31,   301,    89,    90,
+     327,    22,    31,    -1,    95,    -1,    97,    98,    -1,    -1,
+      31,    32,    33,    -1,    -1,    -1,    -1,    38,     0,    40,
       41,    42,    -1,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    89,    22,    -1,    -1,    -1,    -1,
-      -1,    96,    97,    -1,    31,    32,    33,    -1,    -1,    -1,
-      -1,    38,    73,    40,    41,    42,    -1,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    -1,    89,    -1,
-      -1,    -1,    36,    -1,    -1,    96,    97,    -1,    42,    43,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
-      54,    -1,    -1,    57,    -1,    -1,    -1,    61,    -1,    63,
-      64,    -1,    89,    -1,    68,    69,    70,    -1,    72,    96,
-      97,    75,    76,    -1,    78,    79,    80,    81,    43,    83,
-      84,    85,    86,    87,    -1,    -1,    90,    91,    -1,    54,
+      51,    52,    53,    -1,    55,    56,    -1,    58,    59,    60,
+      -1,    -1,    -1,    -1,    65,    66,    67,    -1,    -1,    70,
+      -1,    72,    -1,    74,    75,    -1,    -1,    78,    -1,    -1,
+      -1,    43,    83,    -1,    -1,    -1,    -1,    -1,    89,    90,
+      -1,    -1,    54,    -1,    -1,    57,    97,    98,    -1,    61,
+      -1,    63,    64,    -1,    -1,    -1,    68,    69,    -1,    71,
+      -1,    73,    -1,    -1,    76,    77,    -1,    79,    80,    81,
+      82,    -1,    84,    85,    86,    87,    88,    22,    -1,    91,
+      92,    -1,    -1,    -1,    -1,    -1,    31,    32,    33,    -1,
+      -1,    -1,    -1,    38,    -1,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       -1,    -1,    57,    -1,    -1,    -1,    61,    -1,    63,    64,
-      -1,    -1,    -1,    68,    69,    70,    -1,    72,    -1,    -1,
-      75,    76,    -1,    78,    79,    80,    81,    43,    83,    84,
-      85,    86,    87,    -1,    -1,    90,    91,    -1,    54,    -1,
-      95,    57,    -1,    -1,    -1,    61,    -1,    63,    64,    -1,
-      -1,    -1,    68,    69,    70,    -1,    72,    -1,    -1,    75,
-      76,    -1,    78,    79,    80,    81,    -1,    83,    84,    85,
-      86,    87,    -1,    54,    90,    91,    57,    -1,    -1,    -1,
-      61,    -1,    63,    64,    -1,    -1,    -1,    68,    69,    70,
-      -1,    72,    -1,    -1,    75,    -1,    -1,    78,    79,    -1,
-      81,    -1,    83,    -1,    85,    86,    87,    -1,    -1,    90,
-      91,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    19,    20,    21,    22,    23,    24,    25,
+      -1,    -1,    -1,    68,    69,    -1,    71,    -1,    73,    74,
+      -1,    76,    77,    -1,    79,    80,    81,    82,    -1,    84,
+      85,    86,    87,    88,    -1,    90,    91,    92,    22,    -1,
+      -1,    -1,    97,    98,    -1,    -1,    -1,    31,    32,    33,
+      -1,    -1,    -1,    -1,    38,    -1,    40,    41,    42,    -1,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    -1,    22,    36,    37,    38,    39,    40,    41,
+      -1,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,    38,
+      74,    40,    41,    42,    -1,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    90,    -1,    22,    -1,
+      -1,    95,    -1,    97,    98,    -1,    -1,    31,    32,    33,
+      -1,    -1,    -1,    -1,    38,    74,    40,    41,    42,    -1,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    90,    -1,    22,    -1,    -1,    95,    -1,    97,    98,
+      -1,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,    38,
+      74,    40,    41,    42,    -1,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    90,    -1,    22,    -1,
+      -1,    -1,    -1,    97,    98,    -1,    -1,    31,    32,    33,
+      -1,    -1,    -1,    -1,    38,    74,    40,    41,    42,    -1,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    90,    -1,    -1,    -1,    36,    -1,    -1,    97,    98,
+      -1,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      74,    -1,    -1,    54,    -1,    -1,    57,    -1,    -1,    -1,
+      61,    -1,    63,    64,    -1,    -1,    90,    68,    69,    -1,
+      71,    -1,    73,    97,    98,    76,    77,    -1,    79,    80,
+      81,    82,    43,    84,    85,    86,    87,    88,    -1,    -1,
+      91,    92,    -1,    54,    -1,    -1,    57,    -1,    -1,    -1,
+      61,    -1,    63,    64,    -1,    -1,    -1,    68,    69,    -1,
+      71,    -1,    73,    -1,    -1,    76,    77,    -1,    79,    80,
+      81,    82,    43,    84,    85,    86,    87,    88,    -1,    -1,
+      91,    92,    -1,    54,    -1,    96,    57,    -1,    -1,    -1,
+      61,    -1,    63,    64,    -1,    -1,    -1,    68,    69,    -1,
+      71,    -1,    73,    -1,    -1,    76,    77,    -1,    79,    80,
+      81,    82,    -1,    84,    85,    86,    87,    88,    -1,    54,
+      91,    92,    57,    -1,    -1,    -1,    61,    -1,    63,    64,
+      -1,    -1,    -1,    68,    69,    -1,    71,    -1,    73,    -1,
+      -1,    76,    -1,    -1,    79,    80,    -1,    82,    -1,    84,
+      -1,    86,    87,    88,    -1,    -1,    91,    92,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    21,    22,    23,    24,
@@ -1186,48 +1189,48 @@ static const yytype_int16 yycheck[] =
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    99,     0,    43,    54,    57,    61,    63,    64,    68,
-      69,    70,    72,    75,    76,    78,    79,    80,    81,    83,
-      84,    85,    86,    87,    90,    91,   100,   151,   152,   154,
-     155,   164,   165,   167,   168,   169,    42,    43,    94,   149,
-     172,   149,   172,    94,   172,     3,    33,    38,   103,   105,
-     106,   171,   172,   161,   163,   167,   168,   169,   155,   165,
-     167,   161,   150,   156,   157,   160,   158,   162,   105,     3,
-       4,   101,   104,    37,    38,   163,   162,   161,   112,   152,
-     153,   149,   149,    42,   166,    94,   105,   169,    92,   103,
-     105,   110,     5,    22,    31,    32,    33,    38,    40,    41,
+       0,   100,     0,    43,    54,    57,    61,    63,    64,    68,
+      69,    71,    73,    76,    77,    79,    80,    81,    82,    84,
+      85,    86,    87,    88,    91,    92,   101,   152,   153,   155,
+     156,   165,   166,   168,   169,   170,    42,    43,    95,   150,
+     173,   150,   173,    95,   173,     3,    33,    38,   104,   106,
+     107,   172,   173,   162,   164,   168,   169,   170,   156,   166,
+     168,   162,   151,   157,   158,   161,   159,   163,   106,     3,
+       4,   102,   105,    37,    38,   164,   163,   162,   113,   153,
+     154,   150,   150,    42,   167,    95,   106,   170,    93,   104,
+     106,   111,     5,    22,    31,    32,    33,    38,    40,    41,
       42,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    73,    89,    96,    97,   138,   139,   141,   142,   143,
-     144,   145,   146,   170,    36,   126,   127,   153,   170,    95,
-     153,   113,     5,     4,    95,   159,   102,   154,    94,   122,
-     141,   142,   142,   142,   142,   140,   141,   153,   142,   142,
-      38,   143,    38,   143,   142,   142,    93,     5,     6,     7,
+      53,    74,    90,    97,    98,   139,   140,   142,   143,   144,
+     145,   146,   147,   171,    36,   127,   128,   154,   171,    96,
+     154,   114,     5,     4,    96,   160,   103,   155,    95,   123,
+     142,   143,   143,   143,   143,   141,   142,   154,   143,   143,
+      38,   144,    38,   144,   143,   143,    94,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    52,    53,    36,    92,     4,    33,    37,
-      38,   105,   118,   119,   120,   121,   114,    17,   105,   115,
-     116,   117,   171,   141,   166,   166,    94,   128,   105,   111,
-      36,    37,   122,   123,   124,   125,     4,    92,    33,    38,
-     118,   153,   153,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   140,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   172,   140,   141,   147,   148,   172,    36,
-     127,   162,   138,    92,   119,    37,    38,   115,   139,     3,
-       4,    17,    95,   129,     3,     4,   172,   139,     4,     5,
-     122,   123,    95,   140,   162,    92,   118,   118,    17,    93,
-      92,     4,   119,    93,    92,   138,   126,     3,   116,   139,
-       1,    42,    55,    56,    58,    59,    60,    66,    67,    71,
-      74,    77,    82,    88,    95,   107,   130,   131,   132,   134,
-     135,   136,   137,   140,   154,   111,    93,     4,    94,   142,
-      92,    92,   141,   148,    93,    92,     3,    17,     3,   141,
-       3,    17,   132,   172,    38,   137,    38,    38,    38,    38,
-     131,   134,   128,    65,     3,     3,   105,   108,   125,    17,
-      82,     3,   140,     3,   147,   140,   140,   147,    38,   109,
-       3,     4,    95,    38,    92,    92,    92,    92,    92,   133,
-     137,   154,     5,   108,   140,   132,     3,   132,   132,     3,
-       3,   108,   122,    92,    62,   137,     3,   132,     3,   137,
-      92,   132
+      39,    40,    41,    52,    53,    36,    93,     4,    33,    37,
+      38,   106,   119,   120,   121,   122,   115,    17,   106,   116,
+     117,   118,   172,   142,   167,   167,    95,   129,   106,   112,
+      36,    37,   123,   124,   125,   126,     4,    93,    33,    38,
+     119,   154,   154,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   141,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   173,   141,   142,   148,   149,   173,    36,
+     128,   163,   139,    93,   120,    37,    38,   116,   140,     3,
+       4,    17,    96,   130,     3,     4,   173,   140,     4,     5,
+     123,   124,    96,   141,   163,    93,   119,   119,    17,    94,
+      93,     4,   120,    94,    93,   139,   127,     3,   117,   140,
+       1,    42,    55,    56,    58,    59,    60,    66,    67,    70,
+      72,    75,    78,    83,    89,    96,   108,   131,   132,   133,
+     135,   136,   137,   138,   141,   155,   112,    94,     4,    95,
+     143,    93,    93,   142,   149,    94,    93,     3,    17,     3,
+     142,     3,    17,   133,   173,    38,    38,   138,    38,    38,
+      38,    38,   132,   135,   129,    65,     3,     3,   106,   109,
+     126,    17,    83,     3,   141,   148,     3,   148,   141,   141,
+     148,    38,   110,     3,     4,    96,    38,    93,    93,    93,
+      93,    93,    93,   134,   138,   155,     5,   109,   141,   133,
+       3,     3,   133,   133,     3,     3,   109,   123,    93,    62,
+     138,     3,   133,     3,   138,    93,   133
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2598,251 +2601,258 @@ yyreduce:
   case 99:
 #line 539 "cc.y"
     {
-               (yyval.node) = new(OSET, (yyvsp[(3) - (5)].node), Z);
+               (yyval.node) = new(OPREFETCH, (yyvsp[(3) - (5)].node), Z);
        }
     break;
 
   case 100:
-#line 544 "cc.y"
+#line 543 "cc.y"
     {
-               (yyval.node) = Z;
+               (yyval.node) = new(OSET, (yyvsp[(3) - (5)].node), Z);
        }
     break;
 
-  case 102:
-#line 550 "cc.y"
+  case 101:
+#line 548 "cc.y"
     {
                (yyval.node) = Z;
        }
     break;
 
-  case 104:
-#line 557 "cc.y"
+  case 103:
+#line 554 "cc.y"
     {
-               (yyval.node) = new(OCAST, (yyvsp[(1) - (1)].node), Z);
-               (yyval.node)->type = types[TLONG];
+               (yyval.node) = Z;
        }
     break;
 
-  case 106:
-#line 565 "cc.y"
+  case 105:
+#line 561 "cc.y"
     {
-               (yyval.node) = new(OCOMMA, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OCAST, (yyvsp[(1) - (1)].node), Z);
+               (yyval.node)->type = types[TLONG];
        }
     break;
 
-  case 108:
-#line 572 "cc.y"
+  case 107:
+#line 569 "cc.y"
     {
-               (yyval.node) = new(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OCOMMA, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 109:
 #line 576 "cc.y"
     {
-               (yyval.node) = new(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 110:
 #line 580 "cc.y"
     {
-               (yyval.node) = new(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 111:
 #line 584 "cc.y"
     {
-               (yyval.node) = new(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 112:
 #line 588 "cc.y"
     {
-               (yyval.node) = new(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 113:
 #line 592 "cc.y"
     {
-               (yyval.node) = new(OASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 114:
 #line 596 "cc.y"
     {
-               (yyval.node) = new(OASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 115:
 #line 600 "cc.y"
     {
-               (yyval.node) = new(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 116:
 #line 604 "cc.y"
     {
-               (yyval.node) = new(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 117:
 #line 608 "cc.y"
     {
-               (yyval.node) = new(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 118:
 #line 612 "cc.y"
     {
-               (yyval.node) = new(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 119:
 #line 616 "cc.y"
     {
-               (yyval.node) = new(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 120:
 #line 620 "cc.y"
     {
-               (yyval.node) = new(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 121:
 #line 624 "cc.y"
     {
-               (yyval.node) = new(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 122:
 #line 628 "cc.y"
     {
-               (yyval.node) = new(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 123:
 #line 632 "cc.y"
     {
-               (yyval.node) = new(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 124:
 #line 636 "cc.y"
     {
-               (yyval.node) = new(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 125:
 #line 640 "cc.y"
     {
-               (yyval.node) = new(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 126:
 #line 644 "cc.y"
     {
-               (yyval.node) = new(OCOND, (yyvsp[(1) - (5)].node), new(OLIST, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)));
+               (yyval.node) = new(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 127:
 #line 648 "cc.y"
     {
-               (yyval.node) = new(OAS, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OCOND, (yyvsp[(1) - (5)].node), new(OLIST, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)));
        }
     break;
 
   case 128:
 #line 652 "cc.y"
     {
-               (yyval.node) = new(OASADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OAS, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 129:
 #line 656 "cc.y"
     {
-               (yyval.node) = new(OASSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 130:
 #line 660 "cc.y"
     {
-               (yyval.node) = new(OASMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 131:
 #line 664 "cc.y"
     {
-               (yyval.node) = new(OASDIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 132:
 #line 668 "cc.y"
     {
-               (yyval.node) = new(OASMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASDIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 133:
 #line 672 "cc.y"
     {
-               (yyval.node) = new(OASASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 134:
 #line 676 "cc.y"
     {
-               (yyval.node) = new(OASASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 135:
 #line 680 "cc.y"
     {
-               (yyval.node) = new(OASAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 136:
 #line 684 "cc.y"
     {
-               (yyval.node) = new(OASXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+               (yyval.node) = new(OASAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
   case 137:
 #line 688 "cc.y"
+    {
+               (yyval.node) = new(OASXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+       }
+    break;
+
+  case 138:
+#line 692 "cc.y"
     {
                (yyval.node) = new(OASOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 139:
-#line 695 "cc.y"
+  case 140:
+#line 699 "cc.y"
     {
                (yyval.node) = new(OCAST, (yyvsp[(5) - (5)].node), Z);
                dodecl(NODECL, CXXX, (yyvsp[(2) - (5)].type), (yyvsp[(3) - (5)].node));
@@ -2851,8 +2861,8 @@ yyreduce:
        }
     break;
 
-  case 140:
-#line 702 "cc.y"
+  case 141:
+#line 706 "cc.y"
     {
                (yyval.node) = new(OSTRUCT, (yyvsp[(6) - (7)].node), Z);
                dodecl(NODECL, CXXX, (yyvsp[(2) - (7)].type), (yyvsp[(3) - (7)].node));
@@ -2860,85 +2870,85 @@ yyreduce:
        }
     break;
 
-  case 142:
-#line 711 "cc.y"
-    {
-               (yyval.node) = new(OIND, (yyvsp[(2) - (2)].node), Z);
-       }
-    break;
-
   case 143:
 #line 715 "cc.y"
     {
-               (yyval.node) = new(OADDR, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OIND, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 144:
 #line 719 "cc.y"
     {
-               (yyval.node) = new(OPOS, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OADDR, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 145:
 #line 723 "cc.y"
     {
-               (yyval.node) = new(ONEG, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OPOS, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 146:
 #line 727 "cc.y"
     {
-               (yyval.node) = new(ONOT, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(ONEG, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 147:
 #line 731 "cc.y"
     {
-               (yyval.node) = new(OCOM, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(ONOT, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 148:
 #line 735 "cc.y"
     {
-               (yyval.node) = new(OPREINC, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OCOM, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 149:
 #line 739 "cc.y"
     {
-               (yyval.node) = new(OPREDEC, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OPREINC, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 150:
 #line 743 "cc.y"
     {
-               (yyval.node) = new(OSIZE, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OPREDEC, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 151:
 #line 747 "cc.y"
     {
-               (yyval.node) = new(OSIGN, (yyvsp[(2) - (2)].node), Z);
+               (yyval.node) = new(OSIZE, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 152:
-#line 753 "cc.y"
+#line 751 "cc.y"
     {
-               (yyval.node) = (yyvsp[(2) - (3)].node);
+               (yyval.node) = new(OSIGN, (yyvsp[(2) - (2)].node), Z);
        }
     break;
 
   case 153:
 #line 757 "cc.y"
+    {
+               (yyval.node) = (yyvsp[(2) - (3)].node);
+       }
+    break;
+
+  case 154:
+#line 761 "cc.y"
     {
                (yyval.node) = new(OSIZE, Z, Z);
                dodecl(NODECL, CXXX, (yyvsp[(3) - (5)].type), (yyvsp[(4) - (5)].node));
@@ -2946,8 +2956,8 @@ yyreduce:
        }
     break;
 
-  case 154:
-#line 763 "cc.y"
+  case 155:
+#line 767 "cc.y"
     {
                (yyval.node) = new(OSIGN, Z, Z);
                dodecl(NODECL, CXXX, (yyvsp[(3) - (5)].type), (yyvsp[(4) - (5)].node));
@@ -2955,8 +2965,8 @@ yyreduce:
        }
     break;
 
-  case 155:
-#line 769 "cc.y"
+  case 156:
+#line 773 "cc.y"
     {
                (yyval.node) = new(OFUNC, (yyvsp[(1) - (4)].node), Z);
                if((yyvsp[(1) - (4)].node)->op == ONAME)
@@ -2966,45 +2976,45 @@ yyreduce:
        }
     break;
 
-  case 156:
-#line 777 "cc.y"
+  case 157:
+#line 781 "cc.y"
     {
                (yyval.node) = new(OIND, new(OADD, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)), Z);
        }
     break;
 
-  case 157:
-#line 781 "cc.y"
+  case 158:
+#line 785 "cc.y"
     {
                (yyval.node) = new(ODOT, new(OIND, (yyvsp[(1) - (3)].node), Z), Z);
                (yyval.node)->sym = (yyvsp[(3) - (3)].sym);
        }
     break;
 
-  case 158:
-#line 786 "cc.y"
+  case 159:
+#line 790 "cc.y"
     {
                (yyval.node) = new(ODOT, (yyvsp[(1) - (3)].node), Z);
                (yyval.node)->sym = (yyvsp[(3) - (3)].sym);
        }
     break;
 
-  case 159:
-#line 791 "cc.y"
+  case 160:
+#line 795 "cc.y"
     {
                (yyval.node) = new(OPOSTINC, (yyvsp[(1) - (2)].node), Z);
        }
     break;
 
-  case 160:
-#line 795 "cc.y"
+  case 161:
+#line 799 "cc.y"
     {
                (yyval.node) = new(OPOSTDEC, (yyvsp[(1) - (2)].node), Z);
        }
     break;
 
-  case 162:
-#line 800 "cc.y"
+  case 163:
+#line 804 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TINT];
@@ -3013,8 +3023,8 @@ yyreduce:
        }
     break;
 
-  case 163:
-#line 807 "cc.y"
+  case 164:
+#line 811 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TLONG];
@@ -3023,8 +3033,8 @@ yyreduce:
        }
     break;
 
-  case 164:
-#line 814 "cc.y"
+  case 165:
+#line 818 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TUINT];
@@ -3033,8 +3043,8 @@ yyreduce:
        }
     break;
 
-  case 165:
-#line 821 "cc.y"
+  case 166:
+#line 825 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TULONG];
@@ -3043,8 +3053,8 @@ yyreduce:
        }
     break;
 
-  case 166:
-#line 828 "cc.y"
+  case 167:
+#line 832 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TDOUBLE];
@@ -3053,8 +3063,8 @@ yyreduce:
        }
     break;
 
-  case 167:
-#line 835 "cc.y"
+  case 168:
+#line 839 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TFLOAT];
@@ -3063,8 +3073,8 @@ yyreduce:
        }
     break;
 
-  case 168:
-#line 842 "cc.y"
+  case 169:
+#line 846 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TVLONG];
@@ -3073,8 +3083,8 @@ yyreduce:
        }
     break;
 
-  case 169:
-#line 849 "cc.y"
+  case 170:
+#line 853 "cc.y"
     {
                (yyval.node) = new(OCONST, Z, Z);
                (yyval.node)->type = types[TUVLONG];
@@ -3083,8 +3093,8 @@ yyreduce:
        }
     break;
 
-  case 172:
-#line 860 "cc.y"
+  case 173:
+#line 864 "cc.y"
     {
                (yyval.node) = new(OSTRING, Z, Z);
                (yyval.node)->type = typ(TARRAY, types[TCHAR]);
@@ -3096,8 +3106,8 @@ yyreduce:
        }
     break;
 
-  case 173:
-#line 870 "cc.y"
+  case 174:
+#line 874 "cc.y"
     {
                char *s;
                int n;
@@ -3115,8 +3125,8 @@ yyreduce:
        }
     break;
 
-  case 174:
-#line 888 "cc.y"
+  case 175:
+#line 892 "cc.y"
     {
                (yyval.node) = new(OLSTRING, Z, Z);
                (yyval.node)->type = typ(TARRAY, types[TUSHORT]);
@@ -3128,8 +3138,8 @@ yyreduce:
        }
     break;
 
-  case 175:
-#line 898 "cc.y"
+  case 176:
+#line 902 "cc.y"
     {
                char *s;
                int n;
@@ -3147,22 +3157,22 @@ yyreduce:
        }
     break;
 
-  case 176:
-#line 915 "cc.y"
+  case 177:
+#line 919 "cc.y"
     {
                (yyval.node) = Z;
        }
     break;
 
-  case 179:
-#line 923 "cc.y"
+  case 180:
+#line 927 "cc.y"
     {
                (yyval.node) = new(OLIST, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 180:
-#line 929 "cc.y"
+  case 181:
+#line 933 "cc.y"
     {
                (yyval.tyty).t1 = strf;
                (yyval.tyty).t2 = strl;
@@ -3177,8 +3187,8 @@ yyreduce:
        }
     break;
 
-  case 181:
-#line 942 "cc.y"
+  case 182:
+#line 946 "cc.y"
     {
                (yyval.type) = strf;
                strf = (yyvsp[(2) - (4)].tyty).t1;
@@ -3188,32 +3198,32 @@ yyreduce:
        }
     break;
 
-  case 182:
-#line 951 "cc.y"
+  case 183:
+#line 955 "cc.y"
     {
                lastclass = CXXX;
                lasttype = types[TINT];
        }
     break;
 
-  case 184:
-#line 959 "cc.y"
+  case 185:
+#line 963 "cc.y"
     {
                (yyval.tycl).t = (yyvsp[(1) - (1)].type);
                (yyval.tycl).c = CXXX;
        }
     break;
 
-  case 185:
-#line 964 "cc.y"
+  case 186:
+#line 968 "cc.y"
     {
                (yyval.tycl).t = simplet((yyvsp[(1) - (1)].lval));
                (yyval.tycl).c = CXXX;
        }
     break;
 
-  case 186:
-#line 969 "cc.y"
+  case 187:
+#line 973 "cc.y"
     {
                (yyval.tycl).t = simplet((yyvsp[(1) - (1)].lval));
                (yyval.tycl).c = simplec((yyvsp[(1) - (1)].lval));
@@ -3221,8 +3231,8 @@ yyreduce:
        }
     break;
 
-  case 187:
-#line 975 "cc.y"
+  case 188:
+#line 979 "cc.y"
     {
                (yyval.tycl).t = (yyvsp[(1) - (2)].type);
                (yyval.tycl).c = simplec((yyvsp[(2) - (2)].lval));
@@ -3232,8 +3242,8 @@ yyreduce:
        }
     break;
 
-  case 188:
-#line 983 "cc.y"
+  case 189:
+#line 987 "cc.y"
     {
                (yyval.tycl).t = simplet(typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval)));
                (yyval.tycl).c = simplec((yyvsp[(2) - (2)].lval));
@@ -3241,8 +3251,8 @@ yyreduce:
        }
     break;
 
-  case 189:
-#line 989 "cc.y"
+  case 190:
+#line 993 "cc.y"
     {
                (yyval.tycl).t = (yyvsp[(2) - (3)].type);
                (yyval.tycl).c = simplec((yyvsp[(1) - (3)].lval));
@@ -3250,8 +3260,8 @@ yyreduce:
        }
     break;
 
-  case 190:
-#line 995 "cc.y"
+  case 191:
+#line 999 "cc.y"
     {
                (yyval.tycl).t = simplet((yyvsp[(2) - (2)].lval));
                (yyval.tycl).c = simplec((yyvsp[(1) - (2)].lval));
@@ -3259,8 +3269,8 @@ yyreduce:
        }
     break;
 
-  case 191:
-#line 1001 "cc.y"
+  case 192:
+#line 1005 "cc.y"
     {
                (yyval.tycl).t = simplet(typebitor((yyvsp[(2) - (3)].lval), (yyvsp[(3) - (3)].lval)));
                (yyval.tycl).c = simplec((yyvsp[(1) - (3)].lval)|(yyvsp[(3) - (3)].lval));
@@ -3268,8 +3278,8 @@ yyreduce:
        }
     break;
 
-  case 192:
-#line 1009 "cc.y"
+  case 193:
+#line 1013 "cc.y"
     {
                (yyval.type) = (yyvsp[(1) - (1)].tycl).t;
                if((yyvsp[(1) - (1)].tycl).c != CXXX)
@@ -3277,31 +3287,31 @@ yyreduce:
        }
     break;
 
-  case 193:
-#line 1017 "cc.y"
+  case 194:
+#line 1021 "cc.y"
     {
                lasttype = (yyvsp[(1) - (1)].tycl).t;
                lastclass = (yyvsp[(1) - (1)].tycl).c;
        }
     break;
 
-  case 194:
-#line 1024 "cc.y"
+  case 195:
+#line 1028 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TSTRUCT, 0);
                (yyval.type) = (yyvsp[(2) - (2)].sym)->suetag;
        }
     break;
 
-  case 195:
-#line 1029 "cc.y"
+  case 196:
+#line 1033 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TSTRUCT, autobn);
        }
     break;
 
-  case 196:
-#line 1033 "cc.y"
+  case 197:
+#line 1037 "cc.y"
     {
                (yyval.type) = (yyvsp[(2) - (4)].sym)->suetag;
                if((yyval.type)->link != T)
@@ -3311,8 +3321,8 @@ yyreduce:
        }
     break;
 
-  case 197:
-#line 1041 "cc.y"
+  case 198:
+#line 1045 "cc.y"
     {
                taggen++;
                sprint(symb, "_%d_", taggen);
@@ -3322,23 +3332,23 @@ yyreduce:
        }
     break;
 
-  case 198:
-#line 1049 "cc.y"
+  case 199:
+#line 1053 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TUNION, 0);
                (yyval.type) = (yyvsp[(2) - (2)].sym)->suetag;
        }
     break;
 
-  case 199:
-#line 1054 "cc.y"
+  case 200:
+#line 1058 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TUNION, autobn);
        }
     break;
 
-  case 200:
-#line 1058 "cc.y"
+  case 201:
+#line 1062 "cc.y"
     {
                (yyval.type) = (yyvsp[(2) - (4)].sym)->suetag;
                if((yyval.type)->link != T)
@@ -3348,8 +3358,8 @@ yyreduce:
        }
     break;
 
-  case 201:
-#line 1066 "cc.y"
+  case 202:
+#line 1070 "cc.y"
     {
                taggen++;
                sprint(symb, "_%d_", taggen);
@@ -3359,8 +3369,8 @@ yyreduce:
        }
     break;
 
-  case 202:
-#line 1074 "cc.y"
+  case 203:
+#line 1078 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TENUM, 0);
                (yyval.type) = (yyvsp[(2) - (2)].sym)->suetag;
@@ -3370,23 +3380,23 @@ yyreduce:
        }
     break;
 
-  case 203:
-#line 1082 "cc.y"
+  case 204:
+#line 1086 "cc.y"
     {
                dotag((yyvsp[(2) - (2)].sym), TENUM, autobn);
        }
     break;
 
-  case 204:
-#line 1086 "cc.y"
+  case 205:
+#line 1090 "cc.y"
     {
                en.tenum = T;
                en.cenum = T;
        }
     break;
 
-  case 205:
-#line 1091 "cc.y"
+  case 206:
+#line 1095 "cc.y"
     {
                (yyval.type) = (yyvsp[(2) - (7)].sym)->suetag;
                if((yyval.type)->link != T)
@@ -3400,167 +3410,167 @@ yyreduce:
        }
     break;
 
-  case 206:
-#line 1103 "cc.y"
+  case 207:
+#line 1107 "cc.y"
     {
                en.tenum = T;
                en.cenum = T;
        }
     break;
 
-  case 207:
-#line 1108 "cc.y"
+  case 208:
+#line 1112 "cc.y"
     {
                (yyval.type) = en.tenum;
        }
     break;
 
-  case 208:
-#line 1112 "cc.y"
+  case 209:
+#line 1116 "cc.y"
     {
                (yyval.type) = tcopy((yyvsp[(1) - (1)].sym)->type);
        }
     break;
 
-  case 210:
-#line 1119 "cc.y"
+  case 211:
+#line 1123 "cc.y"
     {
                (yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
        }
     break;
 
-  case 211:
-#line 1124 "cc.y"
+  case 212:
+#line 1128 "cc.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 212:
-#line 1128 "cc.y"
+  case 213:
+#line 1132 "cc.y"
     {
                (yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
        }
     break;
 
-  case 217:
-#line 1140 "cc.y"
+  case 218:
+#line 1144 "cc.y"
     {
                (yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
        }
     break;
 
-  case 220:
-#line 1150 "cc.y"
+  case 221:
+#line 1154 "cc.y"
     {
                doenum((yyvsp[(1) - (1)].sym), Z);
        }
     break;
 
-  case 221:
-#line 1154 "cc.y"
+  case 222:
+#line 1158 "cc.y"
     {
                doenum((yyvsp[(1) - (3)].sym), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 224:
-#line 1161 "cc.y"
+  case 225:
+#line 1165 "cc.y"
     { (yyval.lval) = BCHAR; }
     break;
 
-  case 225:
-#line 1162 "cc.y"
+  case 226:
+#line 1166 "cc.y"
     { (yyval.lval) = BSHORT; }
     break;
 
-  case 226:
-#line 1163 "cc.y"
+  case 227:
+#line 1167 "cc.y"
     { (yyval.lval) = BINT; }
     break;
 
-  case 227:
-#line 1164 "cc.y"
+  case 228:
+#line 1168 "cc.y"
     { (yyval.lval) = BLONG; }
     break;
 
-  case 228:
-#line 1165 "cc.y"
+  case 229:
+#line 1169 "cc.y"
     { (yyval.lval) = BSIGNED; }
     break;
 
-  case 229:
-#line 1166 "cc.y"
+  case 230:
+#line 1170 "cc.y"
     { (yyval.lval) = BUNSIGNED; }
     break;
 
-  case 230:
-#line 1167 "cc.y"
+  case 231:
+#line 1171 "cc.y"
     { (yyval.lval) = BFLOAT; }
     break;
 
-  case 231:
-#line 1168 "cc.y"
+  case 232:
+#line 1172 "cc.y"
     { (yyval.lval) = BDOUBLE; }
     break;
 
-  case 232:
-#line 1169 "cc.y"
+  case 233:
+#line 1173 "cc.y"
     { (yyval.lval) = BVOID; }
     break;
 
-  case 233:
-#line 1172 "cc.y"
+  case 234:
+#line 1176 "cc.y"
     { (yyval.lval) = BAUTO; }
     break;
 
-  case 234:
-#line 1173 "cc.y"
+  case 235:
+#line 1177 "cc.y"
     { (yyval.lval) = BSTATIC; }
     break;
 
-  case 235:
-#line 1174 "cc.y"
+  case 236:
+#line 1178 "cc.y"
     { (yyval.lval) = BEXTERN; }
     break;
 
-  case 236:
-#line 1175 "cc.y"
+  case 237:
+#line 1179 "cc.y"
     { (yyval.lval) = BTYPEDEF; }
     break;
 
-  case 237:
-#line 1176 "cc.y"
+  case 238:
+#line 1180 "cc.y"
     { (yyval.lval) = BTYPESTR; }
     break;
 
-  case 238:
-#line 1177 "cc.y"
+  case 239:
+#line 1181 "cc.y"
     { (yyval.lval) = BREGISTER; }
     break;
 
-  case 239:
-#line 1178 "cc.y"
+  case 240:
+#line 1182 "cc.y"
     { (yyval.lval) = 0; }
     break;
 
-  case 240:
-#line 1181 "cc.y"
+  case 241:
+#line 1185 "cc.y"
     { (yyval.lval) = BCONSTNT; }
     break;
 
-  case 241:
-#line 1182 "cc.y"
+  case 242:
+#line 1186 "cc.y"
     { (yyval.lval) = BVOLATILE; }
     break;
 
-  case 242:
-#line 1183 "cc.y"
+  case 243:
+#line 1187 "cc.y"
     { (yyval.lval) = 0; }
     break;
 
-  case 243:
-#line 1187 "cc.y"
+  case 244:
+#line 1191 "cc.y"
     {
                (yyval.node) = new(ONAME, Z, Z);
                if((yyvsp[(1) - (1)].sym)->class == CLOCAL)
@@ -3576,8 +3586,8 @@ yyreduce:
        }
     break;
 
-  case 244:
-#line 1202 "cc.y"
+  case 245:
+#line 1206 "cc.y"
     {
                (yyval.node) = new(ONAME, Z, Z);
                (yyval.node)->sym = (yyvsp[(1) - (1)].sym);
@@ -3592,7 +3602,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 3596 "y.tab.c"
+#line 3606 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3806,6 +3816,6 @@ yyreturn:
 }
 
 
-#line 1215 "cc.y"
+#line 1219 "cc.y"
 
 
index c56a1d85aed72a40a5689f57bd9f591005fa8967..32daca9b67698bcbda07342b42413d13f31d35fc 100644 (file)
      LIF = 304,
      LINT = 305,
      LLONG = 306,
-     LREGISTER = 307,
-     LRETURN = 308,
-     LSHORT = 309,
-     LSIZEOF = 310,
-     LUSED = 311,
-     LSTATIC = 312,
-     LSTRUCT = 313,
-     LSWITCH = 314,
-     LTYPEDEF = 315,
-     LTYPESTR = 316,
-     LUNION = 317,
-     LUNSIGNED = 318,
-     LWHILE = 319,
-     LVOID = 320,
-     LENUM = 321,
-     LSIGNED = 322,
-     LCONSTNT = 323,
-     LVOLATILE = 324,
-     LSET = 325,
-     LSIGNOF = 326,
-     LRESTRICT = 327,
-     LINLINE = 328
+     LPREFETCH = 307,
+     LREGISTER = 308,
+     LRETURN = 309,
+     LSHORT = 310,
+     LSIZEOF = 311,
+     LUSED = 312,
+     LSTATIC = 313,
+     LSTRUCT = 314,
+     LSWITCH = 315,
+     LTYPEDEF = 316,
+     LTYPESTR = 317,
+     LUNION = 318,
+     LUNSIGNED = 319,
+     LWHILE = 320,
+     LVOID = 321,
+     LENUM = 322,
+     LSIGNED = 323,
+     LCONSTNT = 324,
+     LVOLATILE = 325,
+     LSET = 326,
+     LSIGNOF = 327,
+     LRESTRICT = 328,
+     LINLINE = 329
    };
 #endif
 /* Tokens.  */
 #define LIF 304
 #define LINT 305
 #define LLONG 306
-#define LREGISTER 307
-#define LRETURN 308
-#define LSHORT 309
-#define LSIZEOF 310
-#define LUSED 311
-#define LSTATIC 312
-#define LSTRUCT 313
-#define LSWITCH 314
-#define LTYPEDEF 315
-#define LTYPESTR 316
-#define LUNION 317
-#define LUNSIGNED 318
-#define LWHILE 319
-#define LVOID 320
-#define LENUM 321
-#define LSIGNED 322
-#define LCONSTNT 323
-#define LVOLATILE 324
-#define LSET 325
-#define LSIGNOF 326
-#define LRESTRICT 327
-#define LINLINE 328
+#define LPREFETCH 307
+#define LREGISTER 308
+#define LRETURN 309
+#define LSHORT 310
+#define LSIZEOF 311
+#define LUSED 312
+#define LSTATIC 313
+#define LSTRUCT 314
+#define LSWITCH 315
+#define LTYPEDEF 316
+#define LTYPESTR 317
+#define LUNION 318
+#define LUNSIGNED 319
+#define LWHILE 320
+#define LVOID 321
+#define LENUM 322
+#define LSIGNED 323
+#define LCONSTNT 324
+#define LVOLATILE 325
+#define LSET 326
+#define LSIGNOF 327
+#define LRESTRICT 328
+#define LINLINE 329
 
 
 
@@ -217,7 +219,7 @@ typedef union YYSTYPE
        vlong   vval;
 }
 /* Line 1529 of yacc.c.  */
-#line 221 "y.tab.h"
+#line 223 "y.tab.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 68931aed3fa57d39bc55f2cf0aa3d79bbcdb1ba8..a0798f99e926e1e0603edfea8794b40578e8d7a7 100644 (file)
@@ -2,7 +2,3 @@ enum {
        thechar = '8',
        CacheLineSize = 64
 };
-
-// prefetches *addr into processor's cache
-#define PREFETCH(addr) runtime·prefetch(addr)
-void   runtime·prefetch(void*);
index d2800fc17dc2d608fe917af8284bba8bb99c95eb..dd1cfc18d1684793f8e7a0b1f1f5acab50298c0c 100644 (file)
@@ -2,7 +2,3 @@ enum {
        thechar = '6',
        CacheLineSize = 64
 };
-
-// prefetches *addr into processor's cache
-#define PREFETCH(addr) runtime·prefetch(addr)
-void   runtime·prefetch(void*);
index d4ab74d585fba4eeca8ef9fdc3c3b55be9e13504..c1a7a0f37935a7fe7f93d13f4d636bb5c2f596f7 100644 (file)
@@ -2,5 +2,3 @@ enum {
        thechar = '5',
        CacheLineSize = 32
 };
-
-#define PREFETCH(addr) USED(addr)
index f3de78cbb90e98e83b1df343d1e21b30870fcb49..901d9f3241a327dc249a7fcd215f6727b26585dd 100644 (file)
@@ -415,11 +415,6 @@ TEXT runtime·atomicstore64(SB), 7, $0
        XADDL   AX, (SP)
        RET
 
-TEXT runtime·prefetch(SB), 7, $0
-       MOVL    4(SP), AX
-       PREFETCHNTA (AX)
-       RET
-
 // void jmpdefer(fn, sp);
 // called from deferreturn.
 // 1. pop the caller
index 928f4420339cf4102def742ffa11b86a5198ea85..160c7cc41f3706a23aa00b0166b627e1f5421ec6 100644 (file)
@@ -441,11 +441,6 @@ TEXT runtime·atomicstore64(SB), 7, $0
        XCHGQ   AX, 0(BX)
        RET
 
-TEXT runtime·prefetch(SB), 7, $0
-       MOVQ    8(SP), AX
-       PREFETCHNTA     (AX)
-       RET
-
 // void jmpdefer(fn, sp);
 // called from deferreturn.
 // 1. pop the caller