]> Cypherpunks repositories - gostls13.git/commitdiff
5a, 5l: add PLD (preload data) instruction
authorShenghou Ma <minux.ma@gmail.com>
Tue, 10 Apr 2012 20:09:04 +0000 (04:09 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Tue, 10 Apr 2012 20:09:04 +0000 (04:09 +0800)
        Supported in ARMv5TE and above, excluding ARMv5TExP.
        For CL 5990066.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5999044

src/cmd/5a/a.y
src/cmd/5a/lex.c
src/cmd/5a/y.tab.c
src/cmd/5a/y.tab.h
src/cmd/5l/5.out.h
src/cmd/5l/asm.c
src/cmd/5l/optab.c
src/cmd/5l/span.c

index 512fb5a95267f68cbc3184a0cf0dbb8ddb1d6d8f..401abe51d5ced9317e03258fa55deb606e5b3b2b 100644 (file)
@@ -52,7 +52,7 @@
 %token <lval>  LTYPE6 LTYPE7 LTYPE8 LTYPE9 LTYPEA
 %token <lval>  LTYPEB LTYPEC LTYPED LTYPEE LTYPEF
 %token <lval>  LTYPEG LTYPEH LTYPEI LTYPEJ LTYPEK
-%token <lval>  LTYPEL LTYPEM LTYPEN LTYPEBX
+%token <lval>  LTYPEL LTYPEM LTYPEN LTYPEBX LTYPEPLD
 %token <lval>  LCONST LSP LSB LFP LPC
 %token <lval>  LTYPEX LR LREG LF LFREG LC LCREG LPSR LFCR
 %token <lval>  LCOND LS LAT
@@ -301,6 +301,13 @@ inst:
                $7.offset = $9;
                outcode($1, $2, &$3, $5.reg, &$7);
        }
+/*
+ * PLD
+ */
+|      LTYPEPLD reg
+       {
+               outcode($1, Always, &$2, NREG, &nullgen);
+       }
 /*
  * END
  */
index ff69069c8d87799939cbfd69398a81a357dffe31..252a282a0513e52ac07bb5de5059b075cfa7ab43 100644 (file)
@@ -403,6 +403,8 @@ struct
 
        "MCR",          LTYPEJ, 0,
        "MRC",          LTYPEJ, 1,
+
+       "PLD",          LTYPEPLD, APLD,
        0
 };
 
index a2fba60b345408853e9deb719fb1f111744f63db..0c4c7db566f0581f14520ed3cfec39b86ff1a280 100644 (file)
      LTYPEM = 279,
      LTYPEN = 280,
      LTYPEBX = 281,
-     LCONST = 282,
-     LSP = 283,
-     LSB = 284,
-     LFP = 285,
-     LPC = 286,
-     LTYPEX = 287,
-     LR = 288,
-     LREG = 289,
-     LF = 290,
-     LFREG = 291,
-     LC = 292,
-     LCREG = 293,
-     LPSR = 294,
-     LFCR = 295,
-     LCOND = 296,
-     LS = 297,
-     LAT = 298,
-     LFCONST = 299,
-     LSCONST = 300,
-     LNAME = 301,
-     LLAB = 302,
-     LVAR = 303
+     LTYPEPLD = 282,
+     LCONST = 283,
+     LSP = 284,
+     LSB = 285,
+     LFP = 286,
+     LPC = 287,
+     LTYPEX = 288,
+     LR = 289,
+     LREG = 290,
+     LF = 291,
+     LFREG = 292,
+     LC = 293,
+     LCREG = 294,
+     LPSR = 295,
+     LFCR = 296,
+     LCOND = 297,
+     LS = 298,
+     LAT = 299,
+     LFCONST = 300,
+     LSCONST = 301,
+     LNAME = 302,
+     LLAB = 303,
+     LVAR = 304
    };
 #endif
 /* Tokens.  */
 #define LTYPEM 279
 #define LTYPEN 280
 #define LTYPEBX 281
-#define LCONST 282
-#define LSP 283
-#define LSB 284
-#define LFP 285
-#define LPC 286
-#define LTYPEX 287
-#define LR 288
-#define LREG 289
-#define LF 290
-#define LFREG 291
-#define LC 292
-#define LCREG 293
-#define LPSR 294
-#define LFCR 295
-#define LCOND 296
-#define LS 297
-#define LAT 298
-#define LFCONST 299
-#define LSCONST 300
-#define LNAME 301
-#define LLAB 302
-#define LVAR 303
+#define LTYPEPLD 282
+#define LCONST 283
+#define LSP 284
+#define LSB 285
+#define LFP 286
+#define LPC 287
+#define LTYPEX 288
+#define LR 289
+#define LREG 290
+#define LF 291
+#define LFREG 292
+#define LC 293
+#define LCREG 294
+#define LPSR 295
+#define LFCR 296
+#define LCOND 297
+#define LS 298
+#define LAT 299
+#define LFCONST 300
+#define LSCONST 301
+#define LNAME 302
+#define LLAB 303
+#define LVAR 304
 
 
 
@@ -219,7 +221,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 223 "y.tab.c"
+#line 225 "y.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -231,7 +233,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 235 "y.tab.c"
+#line 237 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -446,20 +448,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   643
+#define YYLAST   609
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  69
+#define YYNTOKENS  70
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  35
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  129
+#define YYNRULES  130
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  327
+#define YYNSTATES  329
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   303
+#define YYMAXUTOK   304
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -470,16 +472,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,    67,    12,     5,     2,
-      65,    66,    10,     8,    62,     9,     2,    11,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    59,    61,
-       6,    60,     7,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,    68,    12,     5,     2,
+      66,    67,    10,     8,    63,     9,     2,    11,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    60,    62,
+       6,    61,     7,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    63,     2,    64,     4,     2,     2,     2,     2,     2,
+       2,    64,     2,    65,     4,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     3,     2,    68,     2,     2,     2,
+       2,     2,     2,     2,     3,     2,    69,     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,
@@ -497,7 +499,7 @@ static const yytype_uint8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58
+      55,    56,    57,    58,    59
 };
 
 #if YYDEBUG
@@ -509,71 +511,72 @@ static const yytype_uint16 yyprhs[] =
       26,    31,    33,    36,    39,    47,    54,    60,    66,    72,
       77,    82,    86,    90,    95,   102,   110,   118,   126,   133,
      140,   144,   149,   156,   163,   168,   172,   178,   184,   192,
-     199,   212,   220,   230,   233,   234,   237,   240,   241,   244,
-     249,   252,   255,   258,   261,   266,   269,   271,   274,   278,
-     280,   284,   288,   290,   292,   294,   299,   301,   303,   305,
-     307,   309,   311,   313,   317,   319,   324,   326,   331,   333,
-     335,   337,   339,   342,   344,   350,   355,   360,   365,   370,
-     372,   374,   376,   378,   383,   385,   387,   389,   394,   396,
-     398,   400,   405,   410,   416,   424,   425,   428,   431,   433,
-     435,   437,   439,   441,   444,   447,   450,   454,   455,   458,
-     460,   464,   468,   472,   476,   480,   485,   490,   494,   498
+     199,   212,   220,   230,   233,   236,   237,   240,   243,   244,
+     247,   252,   255,   258,   261,   264,   269,   272,   274,   277,
+     281,   283,   287,   291,   293,   295,   297,   302,   304,   306,
+     308,   310,   312,   314,   316,   320,   322,   327,   329,   334,
+     336,   338,   340,   342,   345,   347,   353,   358,   363,   368,
+     373,   375,   377,   379,   381,   386,   388,   390,   392,   397,
+     399,   401,   403,   408,   413,   419,   427,   428,   431,   434,
+     436,   438,   440,   442,   444,   447,   450,   453,   457,   458,
+     461,   463,   467,   471,   475,   479,   483,   488,   493,   497,
+     501
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      70,     0,    -1,    -1,    -1,    70,    71,    72,    -1,    -1,
-      57,    59,    73,    72,    -1,    -1,    56,    59,    74,    72,
-      -1,    56,    60,   103,    61,    -1,    58,    60,   103,    61,
-      -1,    61,    -1,    75,    61,    -1,     1,    61,    -1,    13,
-      76,    87,    62,    94,    62,    89,    -1,    13,    76,    87,
-      62,    94,    62,    -1,    13,    76,    87,    62,    89,    -1,
-      14,    76,    87,    62,    89,    -1,    15,    76,    82,    62,
-      82,    -1,    16,    76,    77,    78,    -1,    16,    76,    77,
-      83,    -1,    36,    77,    84,    -1,    17,    77,    78,    -1,
-      18,    76,    77,    82,    -1,    19,    76,    87,    62,    94,
-      77,    -1,    20,    76,    85,    62,    63,    81,    64,    -1,
-      20,    76,    63,    81,    64,    62,    85,    -1,    21,    76,
-      89,    62,    84,    62,    89,    -1,    21,    76,    89,    62,
-      84,    77,    -1,    21,    76,    77,    84,    62,    89,    -1,
-      22,    76,    77,    -1,    23,    98,    62,    88,    -1,    23,
-      98,    62,   101,    62,    88,    -1,    24,    98,    11,   101,
-      62,    79,    -1,    25,    76,    89,    77,    -1,    29,    77,
-      79,    -1,    30,    76,    97,    62,    97,    -1,    32,    76,
-      96,    62,    97,    -1,    32,    76,    96,    62,    46,    62,
-      97,    -1,    33,    76,    97,    62,    97,    77,    -1,    31,
-      76,   101,    62,   103,    62,    94,    62,    95,    62,    95,
-     102,    -1,    34,    76,    89,    62,    89,    62,    90,    -1,
-      35,    76,    89,    62,    89,    62,    89,    62,    94,    -1,
-      26,    77,    -1,    -1,    76,    51,    -1,    76,    52,    -1,
-      -1,    62,    77,    -1,   101,    65,    41,    66,    -1,    56,
-      99,    -1,    57,    99,    -1,    67,   101,    -1,    67,    86,
-      -1,    67,    10,    67,    86,    -1,    67,    55,    -1,    80,
-      -1,    67,    54,    -1,    67,     9,    54,    -1,    94,    -1,
-      94,     9,    94,    -1,    94,    77,    81,    -1,    89,    -1,
-      79,    -1,    91,    -1,    91,    65,    94,    66,    -1,    49,
-      -1,    50,    -1,   101,    -1,    86,    -1,    97,    -1,    84,
-      -1,    98,    -1,    65,    94,    66,    -1,    84,    -1,   101,
-      65,    93,    66,    -1,    98,    -1,    98,    65,    93,    66,
-      -1,    85,    -1,    89,    -1,    88,    -1,    91,    -1,    67,
-     101,    -1,    94,    -1,    65,    94,    62,    94,    66,    -1,
-      94,     6,     6,    92,    -1,    94,     7,     7,    92,    -1,
-      94,     9,     7,    92,    -1,    94,    53,     7,    92,    -1,
-      94,    -1,   101,    -1,    44,    -1,    41,    -1,    43,    65,
-     103,    66,    -1,    93,    -1,    38,    -1,    48,    -1,    47,
-      65,   103,    66,    -1,    97,    -1,    80,    -1,    46,    -1,
-      45,    65,   101,    66,    -1,   101,    65,   100,    66,    -1,
-      56,    99,    65,   100,    66,    -1,    56,     6,     7,    99,
-      65,    39,    66,    -1,    -1,     8,   101,    -1,     9,   101,
-      -1,    39,    -1,    38,    -1,    40,    -1,    37,    -1,    58,
-      -1,     9,   101,    -1,     8,   101,    -1,    68,   101,    -1,
-      65,   103,    66,    -1,    -1,    62,   103,    -1,   101,    -1,
-     103,     8,   103,    -1,   103,     9,   103,    -1,   103,    10,
-     103,    -1,   103,    11,   103,    -1,   103,    12,   103,    -1,
-     103,     6,     6,   103,    -1,   103,     7,     7,   103,    -1,
-     103,     5,   103,    -1,   103,     4,   103,    -1,   103,     3,
-     103,    -1
+      71,     0,    -1,    -1,    -1,    71,    72,    73,    -1,    -1,
+      58,    60,    74,    73,    -1,    -1,    57,    60,    75,    73,
+      -1,    57,    61,   104,    62,    -1,    59,    61,   104,    62,
+      -1,    62,    -1,    76,    62,    -1,     1,    62,    -1,    13,
+      77,    88,    63,    95,    63,    90,    -1,    13,    77,    88,
+      63,    95,    63,    -1,    13,    77,    88,    63,    90,    -1,
+      14,    77,    88,    63,    90,    -1,    15,    77,    83,    63,
+      83,    -1,    16,    77,    78,    79,    -1,    16,    77,    78,
+      84,    -1,    36,    78,    85,    -1,    17,    78,    79,    -1,
+      18,    77,    78,    83,    -1,    19,    77,    88,    63,    95,
+      78,    -1,    20,    77,    86,    63,    64,    82,    65,    -1,
+      20,    77,    64,    82,    65,    63,    86,    -1,    21,    77,
+      90,    63,    85,    63,    90,    -1,    21,    77,    90,    63,
+      85,    78,    -1,    21,    77,    78,    85,    63,    90,    -1,
+      22,    77,    78,    -1,    23,    99,    63,    89,    -1,    23,
+      99,    63,   102,    63,    89,    -1,    24,    99,    11,   102,
+      63,    80,    -1,    25,    77,    90,    78,    -1,    29,    78,
+      80,    -1,    30,    77,    98,    63,    98,    -1,    32,    77,
+      97,    63,    98,    -1,    32,    77,    97,    63,    47,    63,
+      98,    -1,    33,    77,    98,    63,    98,    78,    -1,    31,
+      77,   102,    63,   104,    63,    95,    63,    96,    63,    96,
+     103,    -1,    34,    77,    90,    63,    90,    63,    91,    -1,
+      35,    77,    90,    63,    90,    63,    90,    63,    95,    -1,
+      37,    90,    -1,    26,    78,    -1,    -1,    77,    52,    -1,
+      77,    53,    -1,    -1,    63,    78,    -1,   102,    66,    42,
+      67,    -1,    57,   100,    -1,    58,   100,    -1,    68,   102,
+      -1,    68,    87,    -1,    68,    10,    68,    87,    -1,    68,
+      56,    -1,    81,    -1,    68,    55,    -1,    68,     9,    55,
+      -1,    95,    -1,    95,     9,    95,    -1,    95,    78,    82,
+      -1,    90,    -1,    80,    -1,    92,    -1,    92,    66,    95,
+      67,    -1,    50,    -1,    51,    -1,   102,    -1,    87,    -1,
+      98,    -1,    85,    -1,    99,    -1,    66,    95,    67,    -1,
+      85,    -1,   102,    66,    94,    67,    -1,    99,    -1,    99,
+      66,    94,    67,    -1,    86,    -1,    90,    -1,    89,    -1,
+      92,    -1,    68,   102,    -1,    95,    -1,    66,    95,    63,
+      95,    67,    -1,    95,     6,     6,    93,    -1,    95,     7,
+       7,    93,    -1,    95,     9,     7,    93,    -1,    95,    54,
+       7,    93,    -1,    95,    -1,   102,    -1,    45,    -1,    42,
+      -1,    44,    66,   104,    67,    -1,    94,    -1,    39,    -1,
+      49,    -1,    48,    66,   104,    67,    -1,    98,    -1,    81,
+      -1,    47,    -1,    46,    66,   102,    67,    -1,   102,    66,
+     101,    67,    -1,    57,   100,    66,   101,    67,    -1,    57,
+       6,     7,   100,    66,    40,    67,    -1,    -1,     8,   102,
+      -1,     9,   102,    -1,    40,    -1,    39,    -1,    41,    -1,
+      38,    -1,    59,    -1,     9,   102,    -1,     8,   102,    -1,
+      69,   102,    -1,    66,   104,    67,    -1,    -1,    63,   104,
+      -1,   102,    -1,   104,     8,   104,    -1,   104,     9,   104,
+      -1,   104,    10,   104,    -1,   104,    11,   104,    -1,   104,
+      12,   104,    -1,   104,     6,     6,   104,    -1,   104,     7,
+       7,   104,    -1,   104,     5,   104,    -1,   104,     4,   104,
+      -1,   104,     3,   104,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -583,15 +586,16 @@ static const yytype_uint16 yyrline[] =
       93,    99,   100,   101,   107,   111,   115,   122,   129,   136,
      140,   147,   154,   161,   168,   175,   184,   196,   200,   204,
      211,   218,   222,   229,   236,   243,   250,   254,   258,   262,
-     269,   291,   298,   307,   313,   316,   320,   325,   326,   329,
-     335,   344,   352,   358,   363,   368,   374,   377,   383,   391,
-     395,   404,   410,   411,   412,   413,   418,   424,   430,   436,
-     437,   440,   441,   449,   458,   459,   468,   469,   475,   478,
-     479,   480,   482,   490,   498,   507,   513,   519,   525,   533,
-     539,   547,   548,   552,   560,   561,   567,   568,   576,   577,
-     580,   586,   594,   602,   610,   620,   623,   627,   633,   634,
-     635,   638,   639,   643,   647,   651,   655,   661,   664,   670,
-     671,   675,   679,   683,   687,   691,   695,   699,   703,   707
+     269,   291,   298,   307,   315,   321,   324,   328,   333,   334,
+     337,   343,   352,   360,   366,   371,   376,   382,   385,   391,
+     399,   403,   412,   418,   419,   420,   421,   426,   432,   438,
+     444,   445,   448,   449,   457,   466,   467,   476,   477,   483,
+     486,   487,   488,   490,   498,   506,   515,   521,   527,   533,
+     541,   547,   555,   556,   560,   568,   569,   575,   576,   584,
+     585,   588,   594,   602,   610,   618,   628,   631,   635,   641,
+     642,   643,   646,   647,   651,   655,   659,   663,   669,   672,
+     678,   679,   683,   687,   691,   695,   699,   703,   707,   711,
+     715
 };
 #endif
 
@@ -604,13 +608,13 @@ static const char *const yytname[] =
   "'-'", "'*'", "'/'", "'%'", "LTYPE1", "LTYPE2", "LTYPE3", "LTYPE4",
   "LTYPE5", "LTYPE6", "LTYPE7", "LTYPE8", "LTYPE9", "LTYPEA", "LTYPEB",
   "LTYPEC", "LTYPED", "LTYPEE", "LTYPEF", "LTYPEG", "LTYPEH", "LTYPEI",
-  "LTYPEJ", "LTYPEK", "LTYPEL", "LTYPEM", "LTYPEN", "LTYPEBX", "LCONST",
-  "LSP", "LSB", "LFP", "LPC", "LTYPEX", "LR", "LREG", "LF", "LFREG", "LC",
-  "LCREG", "LPSR", "LFCR", "LCOND", "LS", "LAT", "LFCONST", "LSCONST",
-  "LNAME", "LLAB", "LVAR", "':'", "'='", "';'", "','", "'['", "']'", "'('",
-  "')'", "'$'", "'~'", "$accept", "prog", "$@1", "line", "$@2", "$@3",
-  "inst", "cond", "comma", "rel", "ximm", "fcon", "reglist", "gen",
-  "nireg", "ireg", "ioreg", "oreg", "imsr", "imm", "reg", "regreg",
+  "LTYPEJ", "LTYPEK", "LTYPEL", "LTYPEM", "LTYPEN", "LTYPEBX", "LTYPEPLD",
+  "LCONST", "LSP", "LSB", "LFP", "LPC", "LTYPEX", "LR", "LREG", "LF",
+  "LFREG", "LC", "LCREG", "LPSR", "LFCR", "LCOND", "LS", "LAT", "LFCONST",
+  "LSCONST", "LNAME", "LLAB", "LVAR", "':'", "'='", "';'", "','", "'['",
+  "']'", "'('", "')'", "'$'", "'~'", "$accept", "prog", "$@1", "line",
+  "$@2", "$@3", "inst", "cond", "comma", "rel", "ximm", "fcon", "reglist",
+  "gen", "nireg", "ireg", "ioreg", "oreg", "imsr", "imm", "reg", "regreg",
   "shift", "rcon", "sreg", "spreg", "creg", "frcon", "freg", "name",
   "offset", "pointer", "con", "oexpr", "expr", 0
 };
@@ -626,27 +630,28 @@ static const yytype_uint16 yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,    58,
-      61,    59,    44,    91,    93,    40,    41,    36,   126
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+      58,    61,    59,    44,    91,    93,    40,    41,    36,   126
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    69,    70,    71,    70,    73,    72,    74,    72,    72,
-      72,    72,    72,    72,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    76,    76,    76,    77,    77,    78,
-      78,    78,    79,    79,    79,    79,    79,    80,    80,    81,
-      81,    81,    82,    82,    82,    82,    82,    82,    82,    82,
-      82,    83,    83,    84,    85,    85,    86,    86,    86,    87,
-      87,    87,    88,    89,    90,    91,    91,    91,    91,    92,
-      92,    93,    93,    93,    94,    94,    95,    95,    96,    96,
-      97,    97,    98,    98,    98,    99,    99,    99,   100,   100,
-     100,   101,   101,   101,   101,   101,   101,   102,   102,   103,
-     103,   103,   103,   103,   103,   103,   103,   103,   103,   103
+       0,    70,    71,    72,    71,    74,    73,    75,    73,    73,
+      73,    73,    73,    73,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    77,    77,    77,    78,    78,
+      79,    79,    79,    80,    80,    80,    80,    80,    81,    81,
+      82,    82,    82,    83,    83,    83,    83,    83,    83,    83,
+      83,    83,    84,    84,    85,    86,    86,    87,    87,    87,
+      88,    88,    88,    89,    90,    91,    92,    92,    92,    92,
+      93,    93,    94,    94,    94,    95,    95,    96,    96,    97,
+      97,    98,    98,    99,    99,    99,   100,   100,   100,   101,
+     101,   101,   102,   102,   102,   102,   102,   102,   103,   103,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+     104
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -656,15 +661,16 @@ static const yytype_uint8 yyr2[] =
        4,     1,     2,     2,     7,     6,     5,     5,     5,     4,
        4,     3,     3,     4,     6,     7,     7,     7,     6,     6,
        3,     4,     6,     6,     4,     3,     5,     5,     7,     6,
-      12,     7,     9,     2,     0,     2,     2,     0,     2,     4,
-       2,     2,     2,     2,     4,     2,     1,     2,     3,     1,
-       3,     3,     1,     1,     1,     4,     1,     1,     1,     1,
-       1,     1,     1,     3,     1,     4,     1,     4,     1,     1,
-       1,     1,     2,     1,     5,     4,     4,     4,     4,     1,
-       1,     1,     1,     4,     1,     1,     1,     4,     1,     1,
-       1,     4,     4,     5,     7,     0,     2,     2,     1,     1,
-       1,     1,     1,     2,     2,     2,     3,     0,     2,     1,
-       3,     3,     3,     3,     3,     4,     4,     3,     3,     3
+      12,     7,     9,     2,     2,     0,     2,     2,     0,     2,
+       4,     2,     2,     2,     2,     4,     2,     1,     2,     3,
+       1,     3,     3,     1,     1,     1,     4,     1,     1,     1,
+       1,     1,     1,     1,     3,     1,     4,     1,     4,     1,
+       1,     1,     1,     2,     1,     5,     4,     4,     4,     4,
+       1,     1,     1,     1,     4,     1,     1,     1,     4,     1,
+       1,     1,     4,     4,     5,     7,     0,     2,     2,     1,
+       1,     1,     1,     1,     2,     2,     2,     3,     0,     2,
+       1,     3,     3,     3,     3,     3,     4,     4,     3,     3,
+       3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -672,279 +678,271 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     3,     1,     0,     0,    44,    44,    44,    44,    47,
-      44,    44,    44,    44,    44,     0,     0,    44,    47,    47,
-      44,    44,    44,    44,    44,    44,    47,     0,     0,     0,
-      11,     4,     0,    13,     0,     0,     0,    47,    47,     0,
-      47,     0,     0,    47,    47,     0,     0,   111,   105,   112,
-       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
-       0,     0,     0,     0,     0,     7,     0,     5,     0,    12,
-      95,    92,     0,    91,    45,    46,     0,     0,    80,    79,
-      81,    94,    83,     0,     0,   100,    66,    67,     0,     0,
-      63,    56,     0,    74,    78,    69,    62,    64,    70,    76,
-      68,     0,    48,   105,   105,    22,     0,     0,     0,     0,
-       0,     0,     0,     0,    83,    30,   114,   113,     0,     0,
-       0,     0,   119,     0,   115,     0,     0,     0,    47,    35,
-       0,     0,     0,    99,     0,    98,     0,     0,     0,     0,
-      21,     0,     0,     0,     0,     0,    82,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    57,    55,    53,
-      52,     0,     0,     0,     0,   105,    19,    20,    71,    72,
-       0,    50,    51,     0,    23,     0,     0,    47,     0,     0,
-       0,     0,   105,   106,   107,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   116,    31,     0,   109,
-     108,   110,     0,     0,    34,     0,     0,     0,     0,     0,
-       0,     0,     8,     9,     6,    10,     0,    16,    83,     0,
-       0,     0,     0,    17,     0,    73,    58,     0,    18,     0,
-       0,     0,    50,     0,     0,    47,     0,     0,     0,     0,
-       0,    47,     0,     0,   129,   128,   127,     0,     0,   120,
-     121,   122,   123,   124,     0,   102,     0,    36,     0,   100,
-      37,    47,     0,     0,    93,    15,    85,    89,    90,    86,
-      87,    88,   101,    54,     0,    65,    77,    75,    49,    24,
-       0,    60,    61,     0,    29,    47,    28,     0,   103,   125,
-     126,    32,    33,     0,     0,    39,     0,     0,    14,    26,
-      25,    27,     0,     0,    38,     0,    41,     0,   104,     0,
-       0,     0,     0,    96,     0,     0,    42,     0,     0,     0,
-       0,   117,    84,    97,     0,    40,   118
+       2,     3,     1,     0,     0,    45,    45,    45,    45,    48,
+      45,    45,    45,    45,    45,     0,     0,    45,    48,    48,
+      45,    45,    45,    45,    45,    45,    48,     0,     0,     0,
+       0,    11,     4,     0,    13,     0,     0,     0,    48,    48,
+       0,    48,     0,     0,    48,    48,     0,     0,   112,   106,
+     113,     0,     0,     0,     0,     0,     0,    44,     0,     0,
+       0,     0,     0,     0,     0,     0,    96,    93,     0,    92,
+      43,    95,    84,     7,     0,     5,     0,    12,    46,    47,
+       0,     0,    81,    80,    82,    84,     0,     0,   101,    67,
+      68,     0,     0,    64,    57,     0,    75,    79,    70,    63,
+      65,    71,    77,    69,     0,    49,   106,   106,    22,     0,
+       0,     0,     0,     0,     0,     0,     0,    30,   115,   114,
+       0,     0,     0,     0,   120,     0,   116,     0,     0,     0,
+      48,    35,     0,     0,     0,   100,     0,    99,     0,     0,
+       0,     0,    21,     0,     0,     0,     0,     0,    83,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    58,
+      56,    54,    53,     0,     0,     0,     0,   106,    19,    20,
+      72,    73,     0,    51,    52,     0,    23,     0,     0,    48,
+       0,     0,     0,     0,   106,   107,   108,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   117,    31,
+       0,   110,   109,   111,     0,     0,    34,     0,     0,     0,
+       0,     0,     0,     0,     0,     8,     9,     6,    10,    16,
+      84,     0,     0,     0,     0,    17,     0,    74,    59,     0,
+      18,     0,     0,     0,    51,     0,     0,    48,     0,     0,
+       0,     0,     0,    48,     0,     0,   130,   129,   128,     0,
+       0,   121,   122,   123,   124,   125,     0,   103,     0,    36,
+       0,   101,    37,    48,     0,     0,    94,    15,    86,    90,
+      91,    87,    88,    89,   102,    55,     0,    66,    78,    76,
+      50,    24,     0,    61,    62,     0,    29,    48,    28,     0,
+     104,   126,   127,    32,    33,     0,     0,    39,     0,     0,
+      14,    26,    25,    27,     0,     0,    38,     0,    41,     0,
+     105,     0,     0,     0,     0,    97,     0,     0,    42,     0,
+       0,     0,     0,   118,    85,    98,     0,    40,   119
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     3,    31,   143,   141,    32,    34,   102,   105,
-      90,    91,   176,    92,   167,    93,    94,    95,    77,    78,
-      79,   306,    80,   266,    81,   114,   314,   134,    98,    99,
-     121,   202,   122,   325,   123
+      -1,     1,     3,    32,   146,   144,    33,    35,   105,   108,
+      93,    94,   178,    95,   169,    96,    97,    98,    81,    82,
+      83,   308,    84,   268,    71,    72,   316,   136,   101,   102,
+     123,   204,   124,   327,   125
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -147
+#define YYPACT_NINF -119
 static const yytype_int16 yypact[] =
 {
-    -147,    19,  -147,   305,   -37,  -147,  -147,  -147,  -147,   -40,
-    -147,  -147,  -147,  -147,  -147,   448,   448,  -147,   -40,   -40,
-    -147,  -147,  -147,  -147,  -147,  -147,   -40,    -8,   -22,   -21,
-    -147,  -147,   -20,  -147,   102,   102,   334,   108,   -40,   416,
-     108,   102,   397,    48,   108,   482,   482,  -147,    95,  -147,
-     482,   482,   -19,    18,    34,   223,  -147,     5,   174,   424,
-     132,   174,   223,   223,    20,  -147,   482,  -147,   482,  -147,
-    -147,  -147,    30,  -147,  -147,  -147,   482,    35,  -147,  -147,
-    -147,  -147,    49,    76,    84,  -147,  -147,  -147,   205,   339,
-    -147,  -147,    93,  -147,  -147,  -147,  -147,   110,  -147,   124,
-     125,   442,  -147,    98,    98,  -147,   128,   373,   134,    36,
-     144,   147,    20,   153,  -147,  -147,  -147,  -147,    60,   482,
-     482,   175,  -147,   114,  -147,   249,    21,   482,   -40,  -147,
-     182,   183,    12,  -147,   185,  -147,   188,   189,   198,    36,
-    -147,   305,   562,   305,   572,   482,  -147,    36,   256,   258,
-     261,   269,    36,   482,   212,   460,   216,  -147,  -147,  -147,
-     125,   373,    36,   138,   586,    95,  -147,  -147,  -147,  -147,
-     217,  -147,  -147,   247,  -147,    36,   226,     7,   229,   138,
-     227,    20,    98,  -147,  -147,    21,   482,   482,   482,   287,
-     301,   482,   482,   482,   482,   482,  -147,  -147,   248,  -147,
-    -147,  -147,   243,   250,  -147,    66,   482,   257,   106,    66,
-      36,    36,  -147,  -147,  -147,  -147,   225,  -147,   251,   205,
-     205,   205,   205,  -147,   266,  -147,  -147,   478,  -147,   267,
-     278,   279,   175,   215,   280,   -40,   253,    36,    36,    36,
-      36,   297,   295,   298,   601,   345,   609,   482,   482,   190,
-     190,  -147,  -147,  -147,   300,  -147,     5,  -147,   552,   303,
-    -147,   -40,   306,   307,  -147,    36,  -147,  -147,  -147,  -147,
-    -147,  -147,  -147,  -147,   125,  -147,  -147,  -147,  -147,  -147,
-     486,  -147,  -147,   309,  -147,   130,  -147,   331,  -147,   121,
-     121,  -147,  -147,    36,    66,  -147,   322,    36,  -147,  -147,
-    -147,  -147,   308,   326,  -147,    36,  -147,   327,  -147,   119,
-     329,    36,   333,  -147,   338,    36,  -147,   482,   119,   330,
-     292,   341,  -147,  -147,   482,  -147,   631
+    -119,    29,  -119,   283,    -9,  -119,  -119,  -119,  -119,   -23,
+    -119,  -119,  -119,  -119,  -119,   407,   407,  -119,   -23,   -23,
+    -119,  -119,  -119,  -119,  -119,  -119,   -23,   383,   -24,    16,
+      18,  -119,  -119,    25,  -119,   196,   196,   320,    52,   -23,
+     374,    52,   196,   342,   294,    52,   447,   447,  -119,   125,
+    -119,   447,   447,    45,    47,   109,   174,  -119,    62,    98,
+     382,   130,    98,   174,   174,    69,  -119,  -119,    80,  -119,
+    -119,  -119,  -119,  -119,   447,  -119,   447,  -119,  -119,  -119,
+     447,    96,  -119,  -119,  -119,    24,   105,    95,  -119,  -119,
+    -119,   360,   101,  -119,  -119,   108,  -119,  -119,  -119,  -119,
+     119,  -119,   127,   131,   401,  -119,    76,    76,  -119,   141,
+     224,   111,   383,   154,   149,    69,   162,  -119,  -119,  -119,
+     221,   447,   447,   163,  -119,    40,  -119,   409,   170,   447,
+     -23,  -119,   167,   171,     2,  -119,   176,  -119,   181,   183,
+     184,   383,  -119,   447,   283,   530,   283,   540,  -119,   383,
+     244,   245,   251,   260,   383,   447,   206,   441,   208,  -119,
+    -119,  -119,   131,   224,   383,   110,   282,   125,  -119,  -119,
+    -119,  -119,   213,  -119,  -119,   238,  -119,   383,   220,     9,
+     222,   110,   225,    69,    76,  -119,  -119,   170,   447,   447,
+     447,   285,   287,   447,   447,   447,   447,   447,  -119,  -119,
+     247,  -119,  -119,  -119,   263,   248,  -119,    71,   447,   276,
+      79,    71,   383,   383,    56,  -119,  -119,  -119,  -119,  -119,
+     271,   360,   360,   360,   360,  -119,   268,  -119,  -119,   415,
+    -119,   270,   277,   281,   163,    60,   293,   -23,   280,   383,
+     383,   383,   383,   286,   297,   311,   589,   579,   597,   447,
+     447,   211,   211,  -119,  -119,  -119,   284,  -119,    62,  -119,
+     520,   318,  -119,   -23,   321,   322,  -119,   383,  -119,  -119,
+    -119,  -119,  -119,  -119,  -119,  -119,   131,  -119,  -119,  -119,
+    -119,  -119,   453,  -119,  -119,   327,  -119,    77,  -119,   347,
+    -119,   478,   478,  -119,  -119,   383,    71,  -119,   330,   383,
+    -119,  -119,  -119,  -119,   326,   334,  -119,   383,  -119,   337,
+    -119,   115,   340,   383,   341,  -119,   350,   383,  -119,   447,
+     115,   354,    86,   367,  -119,  -119,   447,  -119,   570
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -147,  -147,  -147,  -114,  -147,  -147,  -147,   579,    44,   311,
-     -49,   348,     0,   -97,  -147,   -44,   -39,   -80,    -9,  -119,
-     -13,  -147,   -25,     2,  -146,   -34,    91,  -147,   -14,    -3,
-     -89,   228,   -11,  -147,   -30
+    -119,  -119,  -119,   -73,  -119,  -119,  -119,   547,    -6,   332,
+     -50,   376,   -60,   -82,  -119,   -46,   -39,   -86,   -15,  -118,
+     -22,  -119,   -27,   152,  -111,   -35,   118,  -119,   -45,     8,
+     -81,   255,   132,  -119,     6
 };
 
 /* 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 -60
+#define YYTABLE_NINF -61
 static const yytype_int16 yytable[] =
 {
-      82,    82,    82,   110,    53,    53,   197,    82,   129,   159,
-     174,    97,    52,    54,   171,   172,   237,   230,   231,     2,
-     140,   207,    38,    96,    33,   100,    83,   212,   106,   214,
-     113,   111,   108,   231,   116,   117,   142,    67,   144,    68,
-     124,    69,   128,   125,   130,   127,   135,   136,   131,   137,
-     138,    65,    66,    39,   154,   148,   149,   168,   150,   199,
-     200,   201,    56,    57,   228,   146,   157,   182,   180,    38,
-      64,   -59,    89,    82,    70,   177,   232,    71,   160,    72,
-      73,   101,    97,   126,   107,   139,    70,   112,   115,    71,
-     170,    72,    73,   242,    96,   145,   100,   147,   169,    74,
-      75,   118,   151,   119,   120,   154,   119,   120,   183,   184,
-      38,    84,    85,   218,   198,   216,   203,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,    82,   229,   191,
-     192,   193,   194,   195,   217,   291,    97,   241,   152,   223,
-      70,   235,   224,    71,   117,    72,    73,   273,    96,   153,
-     100,    84,   259,    74,    75,   161,   244,   245,   246,    74,
-      75,   249,   250,   251,   252,   253,   312,   313,    70,    76,
-      38,    71,   204,    72,    73,   162,   258,    84,    85,    71,
-     196,    72,    73,    74,    75,   267,   267,   267,   267,   163,
-     164,   257,    38,   173,   260,   261,   175,   262,   263,   132,
-     193,   194,   195,   281,   177,   177,   178,   292,   268,   268,
-     268,   268,   179,    45,    46,   181,   274,   289,   290,    84,
-      85,   238,   269,   270,   271,    74,    75,   284,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   282,   283,
-     185,   299,    47,    70,   205,   206,    71,   208,    72,    73,
-     209,   210,   298,   199,   200,   201,   234,    45,    46,   303,
-     211,    70,   219,    49,    71,   220,    72,    73,   221,   111,
-      50,   310,   301,    51,    74,    75,   222,   316,   225,   279,
-     304,   319,   233,   227,   307,   286,    47,   320,   234,   240,
-     236,   264,   239,   247,   326,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   295,     4,    49,   248,   255,
-     254,   226,   256,   265,    50,   280,    76,    51,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,   272,   275,    19,    20,    21,    22,    23,    24,
-      25,    26,    45,    46,   276,   277,   278,    45,   155,   156,
-     188,   189,   190,   191,   192,   193,   194,   195,   323,   285,
-     287,    27,    28,    29,   288,   294,    30,    76,   296,   297,
-     302,    47,    70,   300,   308,    71,    47,    72,    73,    84,
-      85,    45,    46,    86,    87,    74,    75,   305,   309,   311,
-      48,   315,    49,   157,   158,    48,   322,    49,   317,    88,
-     318,    89,    51,   324,    88,    45,    46,    51,   133,   321,
-      47,    70,   166,   243,    71,     0,    72,    73,    84,    85,
-       0,     0,    86,    87,    45,    46,     0,     0,     0,    48,
-       0,    49,    45,    46,    47,     0,     0,     0,    88,     0,
-      89,    51,     0,     0,     0,     0,     0,     0,    74,    75,
-      45,    46,     0,    47,     0,    49,    45,    46,     0,     0,
-     109,    47,    88,     0,     0,    51,     0,     0,    45,    46,
-       0,     0,   103,   104,    49,    74,    75,     0,     0,    47,
-       0,    50,    49,     0,    51,    47,    45,    46,     0,    50,
-      45,    46,    51,     0,    45,    46,     0,    47,   165,   104,
-      49,     0,     0,     0,    48,     0,    49,    88,     0,     0,
-      51,     0,     0,    50,   226,    47,    51,     0,    49,    47,
-       0,     0,     0,    47,     0,    50,     0,     0,    51,     0,
-       0,     0,     0,     0,    48,     0,    49,     0,     0,     0,
-      49,     0,     0,    88,    49,     0,    51,    50,     0,     0,
-      51,    88,     0,     0,    51,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,    35,    36,    37,     0,    40,
-      41,    42,    43,    44,     0,     0,    55,     0,     0,    58,
-      59,    60,    61,    62,    63,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   293,   189,   190,   191,   192,   193,
-     194,   195,     0,   213,   199,   200,   201,    71,     0,    72,
-      73,     0,     0,   215,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195
+      85,    85,    85,    40,   113,    70,   161,    85,   131,   199,
+     100,   209,    57,    58,   132,    99,   137,   138,   239,   142,
+      65,    86,   116,    53,    55,   173,   174,   111,   176,     2,
+     150,   151,   104,   152,   130,   110,    73,    74,   115,   117,
+      39,   139,   140,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,    34,   232,   233,   156,   159,   170,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   182,
+     233,   215,    39,   217,   -60,    85,    75,   179,   153,    76,
+     145,   230,   147,   100,   121,   122,   234,    77,    99,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   201,
+     202,   203,   236,   244,    78,    79,   156,   198,   127,    46,
+     157,   158,   171,   128,   220,    39,    66,    87,    88,    67,
+     129,    68,    69,   266,   206,    87,   261,   219,    85,   231,
+      92,   120,   225,   121,   122,   141,   100,   243,   293,    48,
+      39,    99,   237,   275,    87,    88,   143,    54,    54,   214,
+      78,    79,    67,   325,    68,    69,   159,   160,    49,   149,
+      50,   155,   259,   314,   315,   262,   263,    91,   154,   103,
+      52,   163,   109,   240,   177,   114,    87,    88,   118,   119,
+     284,   285,    78,    79,   126,   164,   269,   269,   269,   269,
+     264,   265,   133,   165,   246,   247,   248,   166,   134,   251,
+     252,   253,   254,   255,   283,   179,   179,   175,   294,   201,
+     202,   203,   148,    66,   260,   181,    67,   180,    68,    69,
+     286,   195,   196,   197,   162,   183,    78,    79,   184,   187,
+     207,   281,    46,    47,   208,    66,   172,   288,    67,   210,
+      68,    69,   103,   301,   211,   300,   212,   213,    78,    79,
+     221,   306,   222,   185,   186,   291,   292,   297,   223,   200,
+     305,   205,    48,    66,    80,   303,    67,   224,    68,    69,
+      87,    88,   312,   227,    89,    90,   229,   309,   318,   235,
+     236,    49,   321,    50,     4,   238,   241,   226,   242,   119,
+      91,   249,    92,    52,   250,   103,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+     256,   258,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,   201,   202,   203,    67,   322,    68,    69,    46,    47,
+     257,   228,   328,    66,   267,   274,    67,   277,    68,    69,
+      28,    29,    30,   282,   278,    31,    78,    79,   279,   287,
+      46,    47,    80,   270,   270,   270,   270,    39,    48,    66,
+     280,   276,    67,   289,    68,    69,    87,    88,    46,    47,
+      89,    90,    78,    79,   271,   272,   273,    49,   290,    50,
+      48,   296,    46,    47,   298,   299,    91,   304,    92,    52,
+      46,    47,   302,   310,    78,    79,   307,   311,    48,    66,
+     313,    50,    67,   317,    68,    69,   112,   319,    91,    46,
+      47,    52,    48,   320,   114,    46,    47,    46,    47,    50,
+      48,   324,    66,    46,    47,    67,    51,    68,    69,    52,
+     326,   106,   107,    50,    78,    79,   168,   135,   323,    48,
+      51,    50,   245,    52,     0,    48,     0,    48,    51,    46,
+      47,    52,     0,    48,     0,    46,    47,     0,   167,   107,
+      50,    46,    47,     0,    49,     0,    50,    91,    50,     0,
+      52,     0,    49,    51,    50,    51,    52,    80,    52,    48,
+       0,    91,     0,     0,    52,    48,   193,   194,   195,   196,
+     197,    48,     0,     0,     0,     0,   228,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,    50,    51,     0,     0,
+      52,     0,    50,    51,     0,     0,    52,     0,     0,    91,
+       0,     0,    52,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,    36,    37,    38,     0,    41,    42,    43,
+      44,    45,     0,     0,    56,     0,     0,    59,    60,    61,
+      62,    63,    64,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   295,   190,   191,   192,   193,   194,   195,
+     196,   197,   216,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   218,   191,   192,   193,   194,   195,   196,   197
 };
 
 static const yytype_int16 yycheck[] =
 {
-      34,    35,    36,    42,    15,    16,   125,    41,    57,    89,
-     107,    36,    15,    16,   103,   104,     9,   163,   164,     0,
-      64,     9,    62,    36,    61,    36,    35,   141,    39,   143,
-      43,    42,    41,   179,    45,    46,    66,    59,    68,    60,
-      51,    61,    55,    62,    58,    11,    60,    61,    59,    62,
-      63,    59,    60,     9,    88,     6,     7,   101,     9,    38,
-      39,    40,    18,    19,   161,    76,    54,     7,   112,    62,
-      26,    64,    67,   107,    38,   109,   165,    41,    89,    43,
-      44,    37,   107,    65,    40,    65,    38,    43,    44,    41,
-     101,    43,    44,   182,   107,    65,   107,    62,   101,    51,
-      52,     6,    53,     8,     9,   139,     8,     9,   119,   120,
-      62,    45,    46,   147,   125,   145,   127,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,   161,   162,     8,
-       9,    10,    11,    12,   147,   254,   161,   181,    62,   152,
-      38,   175,   153,    41,   155,    43,    44,   227,   161,    65,
-     161,    45,    46,    51,    52,    62,   186,   187,   188,    51,
-      52,   191,   192,   193,   194,   195,    47,    48,    38,    67,
-      62,    41,   128,    43,    44,    65,   206,    45,    46,    41,
-      66,    43,    44,    51,    52,   219,   220,   221,   222,    65,
-      65,   205,    62,    65,   208,   209,    62,   210,   211,    67,
-      10,    11,    12,   237,   238,   239,    62,   256,   219,   220,
-     221,   222,    65,     8,     9,    62,   227,   247,   248,    45,
-      46,   177,   220,   221,   222,    51,    52,   240,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,   238,   239,
-      65,   280,    37,    38,    62,    62,    41,    62,    43,    44,
-      62,    62,   265,    38,    39,    40,    41,     8,     9,   293,
-      62,    38,     6,    58,    41,     7,    43,    44,     7,   280,
-      65,   305,   285,    68,    51,    52,     7,   311,    66,   235,
-     294,   315,    65,    67,   297,   241,    37,   317,    41,    62,
-      64,    66,    63,     6,   324,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,   261,     1,    58,     7,    66,
-      62,    54,    62,    62,    65,    62,    67,    68,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    66,    66,    29,    30,    31,    32,    33,    34,
-      35,    36,     8,     9,    66,    66,    66,     8,     9,    10,
-       5,     6,     7,     8,     9,    10,    11,    12,    66,    62,
-      65,    56,    57,    58,    66,    62,    61,    67,    62,    62,
-      39,    37,    38,    64,    66,    41,    37,    43,    44,    45,
-      46,     8,     9,    49,    50,    51,    52,    65,    62,    62,
-      56,    62,    58,    54,    55,    56,    66,    58,    65,    65,
-      62,    67,    68,    62,    65,     8,     9,    68,    60,   318,
-      37,    38,   101,   185,    41,    -1,    43,    44,    45,    46,
-      -1,    -1,    49,    50,     8,     9,    -1,    -1,    -1,    56,
-      -1,    58,     8,     9,    37,    -1,    -1,    -1,    65,    -1,
-      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    51,    52,
-       8,     9,    -1,    37,    -1,    58,     8,     9,    -1,    -1,
-      63,    37,    65,    -1,    -1,    68,    -1,    -1,     8,     9,
-      -1,    -1,    56,    57,    58,    51,    52,    -1,    -1,    37,
-      -1,    65,    58,    -1,    68,    37,     8,     9,    -1,    65,
-       8,     9,    68,    -1,     8,     9,    -1,    37,    56,    57,
-      58,    -1,    -1,    -1,    56,    -1,    58,    65,    -1,    -1,
-      68,    -1,    -1,    65,    54,    37,    68,    -1,    58,    37,
-      -1,    -1,    -1,    37,    -1,    65,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    56,    -1,    58,    -1,    -1,    -1,
-      58,    -1,    -1,    65,    58,    -1,    68,    65,    -1,    -1,
-      68,    65,    -1,    -1,    68,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,     6,     7,     8,    -1,    10,
-      11,    12,    13,    14,    -1,    -1,    17,    -1,    -1,    20,
-      21,    22,    23,    24,    25,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    62,     6,     7,     8,     9,    10,
-      11,    12,    -1,    61,    38,    39,    40,    41,    -1,    43,
-      44,    -1,    -1,    61,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12
+      35,    36,    37,     9,    43,    27,    92,    42,    58,   127,
+      37,     9,    18,    19,    59,    37,    61,    62,     9,    65,
+      26,    36,    44,    15,    16,   106,   107,    42,   110,     0,
+       6,     7,    38,     9,    56,    41,    60,    61,    44,    45,
+      63,    63,    64,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    62,   165,   166,    91,    55,   104,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,   115,
+     181,   144,    63,   146,    65,   110,    60,   112,    54,    61,
+      74,   163,    76,   110,     8,     9,   167,    62,   110,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    39,
+      40,    41,    42,   184,    52,    53,   141,    67,    63,     8,
+       9,    10,   104,    66,   149,    63,    39,    46,    47,    42,
+      11,    44,    45,    67,   130,    46,    47,   149,   163,   164,
+      68,     6,   154,     8,     9,    66,   163,   183,   256,    38,
+      63,   163,   177,   229,    46,    47,    66,    15,    16,   143,
+      52,    53,    42,    67,    44,    45,    55,    56,    57,    63,
+      59,    66,   207,    48,    49,   210,   211,    66,    63,    37,
+      69,    63,    40,   179,    63,    43,    46,    47,    46,    47,
+     240,   241,    52,    53,    52,    66,   221,   222,   223,   224,
+     212,   213,    60,    66,   188,   189,   190,    66,    68,   193,
+     194,   195,   196,   197,   239,   240,   241,    66,   258,    39,
+      40,    41,    80,    39,   208,    66,    42,    63,    44,    45,
+     242,    10,    11,    12,    92,    63,    52,    53,     7,    66,
+      63,   237,     8,     9,    63,    39,   104,   243,    42,    63,
+      44,    45,   110,   282,    63,   267,    63,    63,    52,    53,
+       6,   296,     7,   121,   122,   249,   250,   263,     7,   127,
+     295,   129,    38,    39,    68,   287,    42,     7,    44,    45,
+      46,    47,   307,    67,    50,    51,    68,   299,   313,    66,
+      42,    57,   317,    59,     1,    65,    64,   155,    63,   157,
+      66,     6,    68,    69,     7,   163,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      63,    63,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    39,    40,    41,    42,   319,    44,    45,     8,     9,
+      67,    55,   326,    39,    63,    67,    42,    67,    44,    45,
+      57,    58,    59,    63,    67,    62,    52,    53,    67,    63,
+       8,     9,    68,   221,   222,   223,   224,    63,    38,    39,
+      67,   229,    42,    66,    44,    45,    46,    47,     8,     9,
+      50,    51,    52,    53,   222,   223,   224,    57,    67,    59,
+      38,    63,     8,     9,    63,    63,    66,    40,    68,    69,
+       8,     9,    65,    67,    52,    53,    66,    63,    38,    39,
+      63,    59,    42,    63,    44,    45,    64,    66,    66,     8,
+       9,    69,    38,    63,   282,     8,     9,     8,     9,    59,
+      38,    67,    39,     8,     9,    42,    66,    44,    45,    69,
+      63,    57,    58,    59,    52,    53,   104,    61,   320,    38,
+      66,    59,   187,    69,    -1,    38,    -1,    38,    66,     8,
+       9,    69,    -1,    38,    -1,     8,     9,    -1,    57,    58,
+      59,     8,     9,    -1,    57,    -1,    59,    66,    59,    -1,
+      69,    -1,    57,    66,    59,    66,    69,    68,    69,    38,
+      -1,    66,    -1,    -1,    69,    38,     8,     9,    10,    11,
+      12,    38,    -1,    -1,    -1,    -1,    55,    -1,    -1,    -1,
+      59,    -1,    -1,    -1,    -1,    -1,    59,    66,    -1,    -1,
+      69,    -1,    59,    66,    -1,    -1,    69,    -1,    -1,    66,
+      -1,    -1,    69,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,     6,     7,     8,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,    17,    -1,    -1,    20,    21,    22,
+      23,    24,    25,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    63,     5,     6,     7,     8,     9,    10,
+      11,    12,    62,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    62,     6,     7,     8,     9,    10,    11,    12
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    70,     0,    71,     1,    13,    14,    15,    16,    17,
+       0,    71,     0,    72,     1,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    29,
-      30,    31,    32,    33,    34,    35,    36,    56,    57,    58,
-      61,    72,    75,    61,    76,    76,    76,    76,    62,    77,
-      76,    76,    76,    76,    76,     8,     9,    37,    56,    58,
-      65,    68,    98,   101,    98,    76,    77,    77,    76,    76,
-      76,    76,    76,    76,    77,    59,    60,    59,    60,    61,
-      38,    41,    43,    44,    51,    52,    67,    87,    88,    89,
-      91,    93,    94,    87,    45,    46,    49,    50,    65,    67,
-      79,    80,    82,    84,    85,    86,    89,    91,    97,    98,
-     101,    77,    77,    56,    57,    78,   101,    77,    87,    63,
-      85,   101,    77,    89,    94,    77,   101,   101,     6,     8,
-       9,    99,   101,   103,   101,    62,    65,    11,    89,    79,
-      97,   101,    67,    80,    96,    97,    97,    89,    89,    65,
-      84,    74,   103,    73,   103,    65,   101,    62,     6,     7,
-       9,    53,    62,    65,    94,     9,    10,    54,    55,    86,
-     101,    62,    65,    65,    65,    56,    78,    83,    84,    98,
-     101,    99,    99,    65,    82,    62,    81,    94,    62,    65,
-      84,    62,     7,   101,   101,    65,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    66,    88,   101,    38,
-      39,    40,   100,   101,    77,    62,    62,     9,    62,    62,
-      62,    62,    72,    61,    72,    61,   103,    89,    94,     6,
-       7,     7,     7,    89,   101,    66,    54,    67,    82,    94,
-      93,    93,    99,    65,    41,    94,    64,     9,    77,    63,
-      62,    84,    99,   100,   103,   103,   103,     6,     7,   103,
-     103,   103,   103,   103,    62,    66,    62,    97,   103,    46,
-      97,    97,    89,    89,    66,    62,    92,    94,   101,    92,
-      92,    92,    66,    86,   101,    66,    66,    66,    66,    77,
-      62,    94,    81,    81,    89,    62,    77,    65,    66,   103,
-     103,    88,    79,    62,    62,    77,    62,    62,    89,    85,
-      64,    89,    39,    94,    97,    65,    90,    89,    66,    62,
-      94,    62,    47,    48,    95,    62,    94,    65,    62,    94,
-     103,    95,    66,    66,    62,   102,   103
+      30,    31,    32,    33,    34,    35,    36,    37,    57,    58,
+      59,    62,    73,    76,    62,    77,    77,    77,    77,    63,
+      78,    77,    77,    77,    77,    77,     8,     9,    38,    57,
+      59,    66,    69,    99,   102,    99,    77,    78,    78,    77,
+      77,    77,    77,    77,    77,    78,    39,    42,    44,    45,
+      90,    94,    95,    60,    61,    60,    61,    62,    52,    53,
+      68,    88,    89,    90,    92,    95,    88,    46,    47,    50,
+      51,    66,    68,    80,    81,    83,    85,    86,    87,    90,
+      92,    98,    99,   102,    78,    78,    57,    58,    79,   102,
+      78,    88,    64,    86,   102,    78,    90,    78,   102,   102,
+       6,     8,     9,   100,   102,   104,   102,    63,    66,    11,
+      90,    80,    98,   102,    68,    81,    97,    98,    98,    90,
+      90,    66,    85,    66,    75,   104,    74,   104,   102,    63,
+       6,     7,     9,    54,    63,    66,    95,     9,    10,    55,
+      56,    87,   102,    63,    66,    66,    66,    57,    79,    84,
+      85,    99,   102,   100,   100,    66,    83,    63,    82,    95,
+      63,    66,    85,    63,     7,   102,   102,    66,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    67,    89,
+     102,    39,    40,    41,   101,   102,    78,    63,    63,     9,
+      63,    63,    63,    63,   104,    73,    62,    73,    62,    90,
+      95,     6,     7,     7,     7,    90,   102,    67,    55,    68,
+      83,    95,    94,    94,   100,    66,    42,    95,    65,     9,
+      78,    64,    63,    85,   100,   101,   104,   104,   104,     6,
+       7,   104,   104,   104,   104,   104,    63,    67,    63,    98,
+     104,    47,    98,    98,    90,    90,    67,    63,    93,    95,
+     102,    93,    93,    93,    67,    87,   102,    67,    67,    67,
+      67,    78,    63,    95,    82,    82,    90,    63,    78,    66,
+      67,   104,   104,    89,    80,    63,    63,    78,    63,    63,
+      90,    86,    65,    90,    40,    95,    98,    66,    91,    90,
+      67,    63,    95,    63,    48,    49,    96,    63,    95,    66,
+      63,    95,   104,    96,    67,    67,    63,   103,   104
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1974,7 +1972,7 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 219 "a.y"
     {
-               outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].gen), NREG, &(yyvsp[(4) - (4)].gen));
+               outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].gen), 0, &(yyvsp[(4) - (4)].gen));
        }
     break;
 
@@ -2099,41 +2097,51 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 308 "a.y"
     {
-               outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, NREG, &nullgen);
+               // TODO
+               outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].gen), NREG, &nullgen);
        }
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 313 "a.y"
+#line 316 "a.y"
     {
-               (yyval.lval) = Always;
+               outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, NREG, &nullgen);
        }
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 317 "a.y"
+#line 321 "a.y"
     {
-               (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval);
+               (yyval.lval) = Always;
        }
     break;
 
   case 46:
 
 /* Line 1455 of yacc.c  */
-#line 321 "a.y"
+#line 325 "a.y"
+    {
+               (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval);
+       }
+    break;
+
+  case 47:
+
+/* Line 1455 of yacc.c  */
+#line 329 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 49:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 330 "a.y"
+#line 338 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_BRANCH;
@@ -2141,10 +2149,10 @@ yyreduce:
        }
     break;
 
-  case 50:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 336 "a.y"
+#line 344 "a.y"
     {
                (yyval.gen) = nullgen;
                if(pass == 2)
@@ -2155,10 +2163,10 @@ yyreduce:
        }
     break;
 
-  case 51:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 345 "a.y"
+#line 353 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_BRANCH;
@@ -2167,10 +2175,10 @@ yyreduce:
        }
     break;
 
-  case 52:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 353 "a.y"
+#line 361 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_CONST;
@@ -2178,30 +2186,30 @@ yyreduce:
        }
     break;
 
-  case 53:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 359 "a.y"
+#line 367 "a.y"
     {
                (yyval.gen) = (yyvsp[(2) - (2)].gen);
                (yyval.gen).type = D_CONST;
        }
     break;
 
-  case 54:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 364 "a.y"
+#line 372 "a.y"
     {
                (yyval.gen) = (yyvsp[(4) - (4)].gen);
                (yyval.gen).type = D_OCONST;
        }
     break;
 
-  case 55:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 369 "a.y"
+#line 377 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SCONST;
@@ -2209,10 +2217,10 @@ yyreduce:
        }
     break;
 
-  case 57:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 378 "a.y"
+#line 386 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FCONST;
@@ -2220,10 +2228,10 @@ yyreduce:
        }
     break;
 
-  case 58:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 384 "a.y"
+#line 392 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FCONST;
@@ -2231,19 +2239,19 @@ yyreduce:
        }
     break;
 
-  case 59:
+  case 60:
 
 /* Line 1455 of yacc.c  */
-#line 392 "a.y"
+#line 400 "a.y"
     {
                (yyval.lval) = 1 << (yyvsp[(1) - (1)].lval);
        }
     break;
 
-  case 60:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 396 "a.y"
+#line 404 "a.y"
     {
                int i;
                (yyval.lval)=0;
@@ -2254,29 +2262,29 @@ yyreduce:
        }
     break;
 
-  case 61:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 405 "a.y"
+#line 413 "a.y"
     {
                (yyval.lval) = (1<<(yyvsp[(1) - (3)].lval)) | (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 65:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 414 "a.y"
+#line 422 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (4)].gen);
                (yyval.gen).reg = (yyvsp[(3) - (4)].lval);
        }
     break;
 
-  case 66:
+  case 67:
 
 /* Line 1455 of yacc.c  */
-#line 419 "a.y"
+#line 427 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_PSR;
@@ -2284,10 +2292,10 @@ yyreduce:
        }
     break;
 
-  case 67:
+  case 68:
 
 /* Line 1455 of yacc.c  */
-#line 425 "a.y"
+#line 433 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FPCR;
@@ -2295,10 +2303,10 @@ yyreduce:
        }
     break;
 
-  case 68:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 431 "a.y"
+#line 439 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2306,10 +2314,10 @@ yyreduce:
        }
     break;
 
-  case 72:
+  case 73:
 
 /* Line 1455 of yacc.c  */
-#line 442 "a.y"
+#line 450 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (1)].gen);
                if((yyvsp[(1) - (1)].gen).name != D_EXTERN && (yyvsp[(1) - (1)].gen).name != D_STATIC) {
@@ -2317,10 +2325,10 @@ yyreduce:
        }
     break;
 
-  case 73:
+  case 74:
 
 /* Line 1455 of yacc.c  */
-#line 450 "a.y"
+#line 458 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2329,10 +2337,10 @@ yyreduce:
        }
     break;
 
-  case 75:
+  case 76:
 
 /* Line 1455 of yacc.c  */
-#line 460 "a.y"
+#line 468 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2341,10 +2349,10 @@ yyreduce:
        }
     break;
 
-  case 77:
+  case 78:
 
 /* Line 1455 of yacc.c  */
-#line 470 "a.y"
+#line 478 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (4)].gen);
                (yyval.gen).type = D_OREG;
@@ -2352,10 +2360,10 @@ yyreduce:
        }
     break;
 
-  case 82:
+  case 83:
 
 /* Line 1455 of yacc.c  */
-#line 483 "a.y"
+#line 491 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_CONST;
@@ -2363,10 +2371,10 @@ yyreduce:
        }
     break;
 
-  case 83:
+  case 84:
 
 /* Line 1455 of yacc.c  */
-#line 491 "a.y"
+#line 499 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_REG;
@@ -2374,10 +2382,10 @@ yyreduce:
        }
     break;
 
-  case 84:
+  case 85:
 
 /* Line 1455 of yacc.c  */
-#line 499 "a.y"
+#line 507 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_REGREG;
@@ -2386,10 +2394,10 @@ yyreduce:
        }
     break;
 
-  case 85:
+  case 86:
 
 /* Line 1455 of yacc.c  */
-#line 508 "a.y"
+#line 516 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2397,10 +2405,10 @@ yyreduce:
        }
     break;
 
-  case 86:
+  case 87:
 
 /* Line 1455 of yacc.c  */
-#line 514 "a.y"
+#line 522 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2408,10 +2416,10 @@ yyreduce:
        }
     break;
 
-  case 87:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 520 "a.y"
+#line 528 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2419,10 +2427,10 @@ yyreduce:
        }
     break;
 
-  case 88:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 526 "a.y"
+#line 534 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2430,10 +2438,10 @@ yyreduce:
        }
     break;
 
-  case 89:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 534 "a.y"
+#line 542 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= 16)
                        print("register value out of range\n");
@@ -2441,10 +2449,10 @@ yyreduce:
        }
     break;
 
-  case 90:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 540 "a.y"
+#line 548 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= 32)
                        print("shift value out of range\n");
@@ -2452,19 +2460,19 @@ yyreduce:
        }
     break;
 
-  case 92:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 549 "a.y"
+#line 557 "a.y"
     {
                (yyval.lval) = REGPC;
        }
     break;
 
-  case 93:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 553 "a.y"
+#line 561 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range\n");
@@ -2472,19 +2480,19 @@ yyreduce:
        }
     break;
 
-  case 95:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 562 "a.y"
+#line 570 "a.y"
     {
                (yyval.lval) = REGSP;
        }
     break;
 
-  case 97:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 569 "a.y"
+#line 577 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range\n");
@@ -2492,10 +2500,10 @@ yyreduce:
        }
     break;
 
-  case 100:
+  case 101:
 
 /* Line 1455 of yacc.c  */
-#line 581 "a.y"
+#line 589 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FREG;
@@ -2503,10 +2511,10 @@ yyreduce:
        }
     break;
 
-  case 101:
+  case 102:
 
 /* Line 1455 of yacc.c  */
-#line 587 "a.y"
+#line 595 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FREG;
@@ -2514,10 +2522,10 @@ yyreduce:
        }
     break;
 
-  case 102:
+  case 103:
 
 /* Line 1455 of yacc.c  */
-#line 595 "a.y"
+#line 603 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2527,10 +2535,10 @@ yyreduce:
        }
     break;
 
-  case 103:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 603 "a.y"
+#line 611 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2540,10 +2548,10 @@ yyreduce:
        }
     break;
 
-  case 104:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 611 "a.y"
+#line 619 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2553,181 +2561,181 @@ yyreduce:
        }
     break;
 
-  case 105:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 620 "a.y"
+#line 628 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 106:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 624 "a.y"
+#line 632 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 107:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 628 "a.y"
+#line 636 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 112:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 640 "a.y"
+#line 648 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
     break;
 
-  case 113:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 644 "a.y"
+#line 652 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 114:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 648 "a.y"
+#line 656 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 115:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 652 "a.y"
+#line 660 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 116:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 656 "a.y"
+#line 664 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
     break;
 
-  case 117:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 661 "a.y"
+#line 669 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 118:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 665 "a.y"
+#line 673 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 120:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 672 "a.y"
+#line 680 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 121:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 676 "a.y"
+#line 684 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 122:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 680 "a.y"
+#line 688 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 123:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 684 "a.y"
+#line 692 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 124:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 688 "a.y"
+#line 696 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 125:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 692 "a.y"
+#line 700 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 126:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 696 "a.y"
+#line 704 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 127:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 700 "a.y"
+#line 708 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 128:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 704 "a.y"
+#line 712 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 129:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 708 "a.y"
+#line 716 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -2736,7 +2744,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 2740 "y.tab.c"
+#line 2748 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 28039992c91c09ddf891a2bc65208568921d45c2..1dd0cb08aaa3e6959c8e85fc87b743e4b47e5cb8 100644 (file)
      LTYPEM = 279,
      LTYPEN = 280,
      LTYPEBX = 281,
-     LCONST = 282,
-     LSP = 283,
-     LSB = 284,
-     LFP = 285,
-     LPC = 286,
-     LTYPEX = 287,
-     LR = 288,
-     LREG = 289,
-     LF = 290,
-     LFREG = 291,
-     LC = 292,
-     LCREG = 293,
-     LPSR = 294,
-     LFCR = 295,
-     LCOND = 296,
-     LS = 297,
-     LAT = 298,
-     LFCONST = 299,
-     LSCONST = 300,
-     LNAME = 301,
-     LLAB = 302,
-     LVAR = 303
+     LTYPEPLD = 282,
+     LCONST = 283,
+     LSP = 284,
+     LSB = 285,
+     LFP = 286,
+     LPC = 287,
+     LTYPEX = 288,
+     LR = 289,
+     LREG = 290,
+     LF = 291,
+     LFREG = 292,
+     LC = 293,
+     LCREG = 294,
+     LPSR = 295,
+     LFCR = 296,
+     LCOND = 297,
+     LS = 298,
+     LAT = 299,
+     LFCONST = 300,
+     LSCONST = 301,
+     LNAME = 302,
+     LLAB = 303,
+     LVAR = 304
    };
 #endif
 /* Tokens.  */
 #define LTYPEM 279
 #define LTYPEN 280
 #define LTYPEBX 281
-#define LCONST 282
-#define LSP 283
-#define LSB 284
-#define LFP 285
-#define LPC 286
-#define LTYPEX 287
-#define LR 288
-#define LREG 289
-#define LF 290
-#define LFREG 291
-#define LC 292
-#define LCREG 293
-#define LPSR 294
-#define LFCR 295
-#define LCOND 296
-#define LS 297
-#define LAT 298
-#define LFCONST 299
-#define LSCONST 300
-#define LNAME 301
-#define LLAB 302
-#define LVAR 303
+#define LTYPEPLD 282
+#define LCONST 283
+#define LSP 284
+#define LSB 285
+#define LFP 286
+#define LPC 287
+#define LTYPEX 288
+#define LR 289
+#define LREG 290
+#define LF 291
+#define LFREG 292
+#define LC 293
+#define LCREG 294
+#define LPSR 295
+#define LFCR 296
+#define LCOND 297
+#define LS 298
+#define LAT 299
+#define LFCONST 300
+#define LSCONST 301
+#define LNAME 302
+#define LLAB 303
+#define LVAR 304
 
 
 
@@ -154,7 +156,7 @@ typedef union YYSTYPE
 
 
 /* Line 1676 of yacc.c  */
-#line 158 "y.tab.h"
+#line 160 "y.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 569536ebd7be8c0d2a4620e46d4914051f82a3f5..3755858825b1e6c2036739610ef11903bcef70a3 100644 (file)
@@ -184,6 +184,8 @@ enum        as
        ALDREXD,
        ASTREXD,
 
+       APLD,
+
        ALAST,
 };
 
index b36a982d1b07b2892b6b75386189d397bc5e3337..099c4208cd6e089eca9e6b10e606df8c6955ef35 100644 (file)
@@ -1429,6 +1429,9 @@ if(debug['G']) print("%ux: %s: arm %d\n", (uint32)(p->pc), p->from.sym->name, p-
                        break;
                o2 = oshr(p->from.reg, 0, REGTMP, p->scond);
                break;
+       case 95:        /* PLD reg */
+               o1 = 0xf5d0f000;
+               o1 |= p->from.reg << 16;
        }
        
        out[0] = o1;
index 514786f85e5bbf3ea4f00699e8e42773358901c0..92e38cd9317f7005ca3f4aee00903560e07168a8 100644 (file)
@@ -232,5 +232,7 @@ Optab       optab[] =
        { ALDREXD,      C_SOREG,C_NONE, C_REG,          91, 4, 0 },
        { ASTREXD,      C_SOREG,C_REG,  C_REG,          92, 4, 0 },
 
+       { APLD,         C_REG,  C_NONE, C_NONE,         95, 4, 0 },
+
        { AXXX,         C_NONE, C_NONE, C_NONE,          0, 4, 0 },
 };
index 13e1848e16047045f1d6d47011a667190f719fcf..bf14ef546b55b82abe127cea5acc94bf5b49cc7e 100644 (file)
@@ -843,6 +843,7 @@ buildop(void)
                case ALDREXD:
                case ASTREXD:
                case ATST:
+               case APLD:
                        break;
                }
        }