]> Cypherpunks repositories - gostls13.git/commitdiff
liblink: use same TEXT $frame-arg encoding for all architectures
authorRuss Cox <rsc@golang.org>
Thu, 29 Jan 2015 17:26:21 +0000 (12:26 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 3 Feb 2015 18:22:07 +0000 (18:22 +0000)
Change-Id: I3417a8c5ddd7f405939edc9fdef086e4741495a1
Reviewed-on: https://go-review.googlesource.com/3571
Reviewed-by: Austin Clements <austin@google.com>
25 files changed:
src/cmd/5a/a.y
src/cmd/5a/y.tab.c
src/cmd/5g/ggen.c
src/cmd/5l/5.out.h
src/cmd/6a/a.y
src/cmd/6a/y.tab.c
src/cmd/6g/ggen.c
src/cmd/8a/a.y
src/cmd/8a/y.tab.c
src/cmd/8a/y.tab.h
src/cmd/8g/ggen.c
src/cmd/9a/a.y
src/cmd/9a/y.tab.c
src/cmd/9g/ggen.c
src/cmd/9l/9.out.h
src/liblink/asm5.c
src/liblink/asm6.c
src/liblink/asm8.c
src/liblink/asm9.c
src/liblink/list5.c
src/liblink/list6.c
src/liblink/list8.c
src/liblink/list9.c
src/liblink/obj6.c
src/liblink/obj9.c

index 89e8e73b25a1638a08b03df89eb671f9f6a1b0b8..330b844089e0a3b4dac8f09c9e8af3f5f2db5d7d 100644 (file)
@@ -62,7 +62,7 @@
 %token <sym>   LNAME LLAB LVAR
 %type  <lval>  con expr oexpr pointer offset sreg spreg creg
 %type  <lval>  rcon cond reglist
-%type  <addr>  gen rel reg regreg freg shift fcon frcon
+%type  <addr>  gen rel reg regreg freg shift fcon frcon textsize
 %type  <addr>  imm ximm name oreg ireg nireg ioreg imsr
 %%
 prog:
@@ -212,26 +212,15 @@ inst:
 /*
  * TEXT
  */
-|      LTYPEB name ',' imm
+|      LTYPEB name ',' '$' textsize
        {
                settext($2.sym);
-               $4.type = TYPE_TEXTSIZE;
-               $4.u.argsize = ArgsSizeUnknown;
-               outcode($1, Always, &$2, 0, &$4);
+               outcode($1, Always, &$2, 0, &$5);
        }
-|      LTYPEB name ',' con ',' imm
+|      LTYPEB name ',' con ',' '$' textsize
        {
                settext($2.sym);
-               $6.type = TYPE_TEXTSIZE;
-               $6.u.argsize = ArgsSizeUnknown;
-               outcode($1, Always, &$2, $4, &$6);
-       }
-|      LTYPEB name ',' con ',' imm '-' con
-       {
-               settext($2.sym);
-               $6.type = TYPE_TEXTSIZE;
-               $6.u.argsize = $8;
-               outcode($1, Always, &$2, $4, &$6);
+               outcode($1, Always, &$2, $4, &$7);
        }
 /*
  * GLOBL
@@ -393,6 +382,32 @@ rel:
                $$.offset = $1->value + $2;
        }
 
+textsize:
+       LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = ArgsSizeUnknown;
+       }
+|      '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = ArgsSizeUnknown;
+       }
+|      LCONST '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = $3;
+       }
+|      '-' LCONST '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = $4;
+       }
+
 ximm:  '$' con
        {
                $$ = nullgen;
index c9db3249b9e15589f9698c6958f794c9f8cfe908..fe231af860cca2f0bd98edc5511d23f80555d3c8 100644 (file)
@@ -438,16 +438,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   636
+#define YYLAST   655
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  72
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  34
+#define YYNNTS  35
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  131
+#define YYNRULES  134
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  337
+#define YYNSTATES  344
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -462,8 +462,8 @@ 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,    70,    12,     5,     2,
-      68,    69,    10,     8,    65,     9,     2,    11,     2,     2,
+       2,     2,     2,     2,     2,     2,    68,    12,     5,     2,
+      69,    70,    10,     8,    65,     9,     2,    11,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    62,    64,
        6,    63,     7,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -500,75 +500,75 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     4,     5,     9,    10,    15,    20,    25,
       27,    30,    33,    41,    48,    54,    60,    66,    71,    76,
       80,    84,    89,    96,   104,   112,   120,   127,   134,   138,
-     143,   150,   159,   164,   171,   178,   183,   187,   193,   199,
-     207,   214,   227,   235,   245,   248,   253,   258,   261,   262,
-     265,   268,   269,   272,   277,   280,   283,   286,   289,   291,
-     294,   298,   300,   304,   308,   310,   312,   314,   319,   321,
-     323,   325,   327,   329,   331,   333,   337,   339,   344,   346,
-     351,   353,   355,   357,   359,   362,   364,   370,   375,   380,
-     385,   390,   392,   394,   396,   398,   403,   405,   407,   409,
-     414,   416,   418,   420,   425,   430,   436,   444,   445,   448,
-     451,   453,   455,   457,   459,   461,   464,   467,   470,   474,
-     475,   478,   480,   484,   488,   492,   496,   500,   505,   510,
-     514,   518
+     144,   152,   157,   164,   171,   176,   180,   186,   192,   200,
+     207,   220,   228,   238,   241,   246,   251,   254,   255,   258,
+     261,   262,   265,   270,   273,   275,   278,   282,   287,   290,
+     293,   296,   298,   301,   305,   307,   311,   315,   317,   319,
+     321,   326,   328,   330,   332,   334,   336,   338,   340,   344,
+     346,   351,   353,   358,   360,   362,   364,   366,   369,   371,
+     377,   382,   387,   392,   397,   399,   401,   403,   405,   410,
+     412,   414,   416,   421,   423,   425,   427,   432,   437,   443,
+     451,   452,   455,   458,   460,   462,   464,   466,   468,   471,
+     474,   477,   481,   482,   485,   487,   491,   495,   499,   503,
+     507,   512,   517,   521,   525
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
       73,     0,    -1,    -1,    -1,    73,    74,    75,    -1,    -1,
-      59,    62,    76,    75,    -1,    59,    63,   105,    64,    -1,
-      61,    63,   105,    64,    -1,    64,    -1,    77,    64,    -1,
-       1,    64,    -1,    13,    78,    89,    65,    96,    65,    91,
-      -1,    13,    78,    89,    65,    96,    65,    -1,    13,    78,
-      89,    65,    91,    -1,    14,    78,    89,    65,    91,    -1,
-      15,    78,    84,    65,    84,    -1,    16,    78,    79,    80,
-      -1,    16,    78,    79,    85,    -1,    36,    79,    86,    -1,
-      17,    79,    80,    -1,    18,    78,    79,    84,    -1,    19,
-      78,    89,    65,    96,    79,    -1,    20,    78,    87,    65,
-      66,    83,    67,    -1,    20,    78,    66,    83,    67,    65,
-      87,    -1,    21,    78,    91,    65,    86,    65,    91,    -1,
-      21,    78,    91,    65,    86,    79,    -1,    21,    78,    79,
-      86,    65,    91,    -1,    22,    78,    79,    -1,    23,   100,
-      65,    90,    -1,    23,   100,    65,   103,    65,    90,    -1,
-      23,   100,    65,   103,    65,    90,     9,   103,    -1,    24,
-     100,    65,    90,    -1,    24,   100,    65,   103,    65,    90,
-      -1,    25,   100,    11,   103,    65,    81,    -1,    26,    78,
-      91,    79,    -1,    29,    79,    81,    -1,    30,    78,    99,
-      65,    99,    -1,    32,    78,    98,    65,    99,    -1,    32,
-      78,    98,    65,    49,    65,    99,    -1,    33,    78,    99,
-      65,    99,    79,    -1,    31,    78,   103,    65,   105,    65,
-      96,    65,    97,    65,    97,   104,    -1,    34,    78,    91,
-      65,    91,    65,    92,    -1,    35,    78,    91,    65,    91,
-      65,    91,    65,    96,    -1,    37,    88,    -1,    44,    84,
-      65,    84,    -1,    45,    84,    65,    84,    -1,    27,    79,
-      -1,    -1,    78,    54,    -1,    78,    55,    -1,    -1,    65,
-      79,    -1,   103,    68,    42,    69,    -1,    59,   101,    -1,
-      70,   103,    -1,    70,    88,    -1,    70,    58,    -1,    82,
-      -1,    70,    57,    -1,    70,     9,    57,    -1,    96,    -1,
-      96,     9,    96,    -1,    96,    79,    83,    -1,    91,    -1,
-      81,    -1,    93,    -1,    93,    68,    96,    69,    -1,    52,
-      -1,    53,    -1,   103,    -1,    88,    -1,    99,    -1,    86,
-      -1,   100,    -1,    68,    96,    69,    -1,    86,    -1,   103,
-      68,    95,    69,    -1,   100,    -1,   100,    68,    95,    69,
-      -1,    87,    -1,    91,    -1,    90,    -1,    93,    -1,    70,
-     103,    -1,    96,    -1,    68,    96,    65,    96,    69,    -1,
-      96,     6,     6,    94,    -1,    96,     7,     7,    94,    -1,
-      96,     9,     7,    94,    -1,    96,    56,     7,    94,    -1,
-      96,    -1,   103,    -1,    47,    -1,    42,    -1,    46,    68,
-     105,    69,    -1,    95,    -1,    39,    -1,    51,    -1,    50,
-      68,   105,    69,    -1,    99,    -1,    82,    -1,    49,    -1,
-      48,    68,   103,    69,    -1,   103,    68,   102,    69,    -1,
-      59,   101,    68,   102,    69,    -1,    59,     6,     7,   101,
-      68,    40,    69,    -1,    -1,     8,   103,    -1,     9,   103,
-      -1,    40,    -1,    39,    -1,    41,    -1,    38,    -1,    61,
-      -1,     9,   103,    -1,     8,   103,    -1,    71,   103,    -1,
-      68,   105,    69,    -1,    -1,    65,   105,    -1,   103,    -1,
-     105,     8,   105,    -1,   105,     9,   105,    -1,   105,    10,
-     105,    -1,   105,    11,   105,    -1,   105,    12,   105,    -1,
-     105,     6,     6,   105,    -1,   105,     7,     7,   105,    -1,
-     105,     5,   105,    -1,   105,     4,   105,    -1,   105,     3,
-     105,    -1
+      59,    62,    76,    75,    -1,    59,    63,   106,    64,    -1,
+      61,    63,   106,    64,    -1,    64,    -1,    77,    64,    -1,
+       1,    64,    -1,    13,    78,    90,    65,    97,    65,    92,
+      -1,    13,    78,    90,    65,    97,    65,    -1,    13,    78,
+      90,    65,    92,    -1,    14,    78,    90,    65,    92,    -1,
+      15,    78,    85,    65,    85,    -1,    16,    78,    79,    80,
+      -1,    16,    78,    79,    86,    -1,    36,    79,    87,    -1,
+      17,    79,    80,    -1,    18,    78,    79,    85,    -1,    19,
+      78,    90,    65,    97,    79,    -1,    20,    78,    88,    65,
+      66,    84,    67,    -1,    20,    78,    66,    84,    67,    65,
+      88,    -1,    21,    78,    92,    65,    87,    65,    92,    -1,
+      21,    78,    92,    65,    87,    79,    -1,    21,    78,    79,
+      87,    65,    92,    -1,    22,    78,    79,    -1,    23,   101,
+      65,    68,    81,    -1,    23,   101,    65,   104,    65,    68,
+      81,    -1,    24,   101,    65,    91,    -1,    24,   101,    65,
+     104,    65,    91,    -1,    25,   101,    11,   104,    65,    82,
+      -1,    26,    78,    92,    79,    -1,    29,    79,    82,    -1,
+      30,    78,   100,    65,   100,    -1,    32,    78,    99,    65,
+     100,    -1,    32,    78,    99,    65,    49,    65,   100,    -1,
+      33,    78,   100,    65,   100,    79,    -1,    31,    78,   104,
+      65,   106,    65,    97,    65,    98,    65,    98,   105,    -1,
+      34,    78,    92,    65,    92,    65,    93,    -1,    35,    78,
+      92,    65,    92,    65,    92,    65,    97,    -1,    37,    89,
+      -1,    44,    85,    65,    85,    -1,    45,    85,    65,    85,
+      -1,    27,    79,    -1,    -1,    78,    54,    -1,    78,    55,
+      -1,    -1,    65,    79,    -1,   104,    69,    42,    70,    -1,
+      59,   102,    -1,    38,    -1,     9,    38,    -1,    38,     9,
+      38,    -1,     9,    38,     9,    38,    -1,    68,   104,    -1,
+      68,    89,    -1,    68,    58,    -1,    83,    -1,    68,    57,
+      -1,    68,     9,    57,    -1,    97,    -1,    97,     9,    97,
+      -1,    97,    79,    84,    -1,    92,    -1,    82,    -1,    94,
+      -1,    94,    69,    97,    70,    -1,    52,    -1,    53,    -1,
+     104,    -1,    89,    -1,   100,    -1,    87,    -1,   101,    -1,
+      69,    97,    70,    -1,    87,    -1,   104,    69,    96,    70,
+      -1,   101,    -1,   101,    69,    96,    70,    -1,    88,    -1,
+      92,    -1,    91,    -1,    94,    -1,    68,   104,    -1,    97,
+      -1,    69,    97,    65,    97,    70,    -1,    97,     6,     6,
+      95,    -1,    97,     7,     7,    95,    -1,    97,     9,     7,
+      95,    -1,    97,    56,     7,    95,    -1,    97,    -1,   104,
+      -1,    47,    -1,    42,    -1,    46,    69,   106,    70,    -1,
+      96,    -1,    39,    -1,    51,    -1,    50,    69,   106,    70,
+      -1,   100,    -1,    83,    -1,    49,    -1,    48,    69,   104,
+      70,    -1,   104,    69,   103,    70,    -1,    59,   102,    69,
+     103,    70,    -1,    59,     6,     7,   102,    69,    40,    70,
+      -1,    -1,     8,   104,    -1,     9,   104,    -1,    40,    -1,
+      39,    -1,    41,    -1,    38,    -1,    61,    -1,     9,   104,
+      -1,     8,   104,    -1,    71,   104,    -1,    69,   106,    70,
+      -1,    -1,    65,   106,    -1,   104,    -1,   106,     8,   106,
+      -1,   106,     9,   106,    -1,   106,    10,   106,    -1,   106,
+      11,   106,    -1,   106,    12,   106,    -1,   106,     6,     6,
+     106,    -1,   106,     7,     7,   106,    -1,   106,     5,   106,
+      -1,   106,     4,   106,    -1,   106,     3,   106,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -577,17 +577,17 @@ static const yytype_uint16 yyrline[] =
        0,    68,    68,    70,    69,    77,    76,    85,    90,    96,
       97,    98,   104,   108,   112,   119,   126,   133,   137,   144,
      151,   158,   165,   172,   181,   193,   197,   201,   208,   215,
-     222,   229,   239,   244,   252,   259,   266,   273,   277,   281,
-     285,   292,   314,   322,   331,   338,   347,   358,   364,   367,
-     371,   376,   377,   380,   386,   396,   402,   407,   413,   416,
-     422,   430,   434,   443,   449,   450,   451,   452,   457,   463,
-     469,   475,   476,   479,   480,   488,   497,   498,   507,   508,
-     514,   517,   518,   519,   521,   529,   537,   546,   552,   558,
-     564,   572,   578,   586,   587,   591,   599,   600,   606,   607,
-     615,   616,   619,   625,   633,   641,   649,   659,   662,   666,
-     672,   673,   674,   677,   678,   682,   686,   690,   694,   700,
-     703,   709,   710,   714,   718,   722,   726,   730,   734,   738,
-     742,   746
+     220,   228,   233,   241,   248,   255,   262,   266,   270,   274,
+     281,   303,   311,   320,   327,   336,   347,   353,   356,   360,
+     365,   366,   369,   375,   386,   392,   398,   404,   411,   417,
+     422,   428,   431,   437,   445,   449,   458,   464,   465,   466,
+     467,   472,   478,   484,   490,   491,   494,   495,   503,   512,
+     513,   522,   523,   529,   532,   533,   534,   536,   544,   552,
+     561,   567,   573,   579,   587,   593,   601,   602,   606,   614,
+     615,   621,   622,   630,   631,   634,   640,   648,   656,   664,
+     674,   677,   681,   687,   688,   689,   692,   693,   697,   701,
+     705,   709,   715,   718,   724,   725,   729,   733,   737,   741,
+     745,   749,   753,   757,   761
 };
 #endif
 
@@ -604,10 +604,10 @@ static const char *const yytname[] =
   "LCONST", "LSP", "LSB", "LFP", "LPC", "LTYPEX", "LTYPEPC", "LTYPEF",
   "LR", "LREG", "LF", "LFREG", "LC", "LCREG", "LPSR", "LFCR", "LCOND",
   "LS", "LAT", "LFCONST", "LSCONST", "LNAME", "LLAB", "LVAR", "':'", "'='",
-  "';'", "','", "'['", "']'", "'('", "')'", "'$'", "'~'", "$accept",
-  "prog", "@1", "line", "@2", "inst", "cond", "comma", "rel", "ximm",
-  "fcon", "reglist", "gen", "nireg", "ireg", "ioreg", "oreg", "imsr",
-  "imm", "reg", "regreg", "shift", "rcon", "sreg", "spreg", "creg",
+  "';'", "','", "'['", "']'", "'$'", "'('", "')'", "'~'", "$accept",
+  "prog", "@1", "line", "@2", "inst", "cond", "comma", "rel", "textsize",
+  "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
 };
 #endif
@@ -623,8 +623,8 @@ static const yytype_uint16 yytoknum[] =
      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,   304,
-     305,   306,    58,    61,    59,    44,    91,    93,    40,    41,
-      36,   126
+     305,   306,    58,    61,    59,    44,    91,    93,    36,    40,
+      41,   126
 };
 # endif
 
@@ -635,16 +635,16 @@ static const yytype_uint8 yyr1[] =
       75,    75,    77,    77,    77,    77,    77,    77,    77,    77,
       77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
       77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
-      77,    77,    77,    77,    77,    77,    77,    77,    78,    78,
-      78,    79,    79,    80,    80,    81,    81,    81,    81,    82,
-      82,    83,    83,    83,    84,    84,    84,    84,    84,    84,
-      84,    84,    84,    85,    85,    86,    87,    87,    88,    88,
-      88,    89,    89,    89,    90,    91,    92,    93,    93,    93,
-      93,    94,    94,    95,    95,    95,    96,    96,    97,    97,
-      98,    98,    99,    99,   100,   100,   100,   101,   101,   101,
-     102,   102,   102,   103,   103,   103,   103,   103,   103,   104,
-     104,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105
+      77,    77,    77,    77,    77,    77,    77,    78,    78,    78,
+      79,    79,    80,    80,    81,    81,    81,    81,    82,    82,
+      82,    82,    83,    83,    84,    84,    84,    85,    85,    85,
+      85,    85,    85,    85,    85,    85,    86,    86,    87,    88,
+      88,    89,    89,    89,    90,    90,    90,    91,    92,    93,
+      94,    94,    94,    94,    95,    95,    96,    96,    96,    97,
+      97,    98,    98,    99,    99,   100,   100,   101,   101,   101,
+     102,   102,   102,   103,   103,   103,   104,   104,   104,   104,
+     104,   104,   105,   105,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -652,18 +652,18 @@ static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     0,     3,     0,     4,     4,     4,     1,
        2,     2,     7,     6,     5,     5,     5,     4,     4,     3,
-       3,     4,     6,     7,     7,     7,     6,     6,     3,     4,
-       6,     8,     4,     6,     6,     4,     3,     5,     5,     7,
-       6,    12,     7,     9,     2,     4,     4,     2,     0,     2,
-       2,     0,     2,     4,     2,     2,     2,     2,     1,     2,
-       3,     1,     3,     3,     1,     1,     1,     4,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     4,     1,     4,
-       1,     1,     1,     1,     2,     1,     5,     4,     4,     4,
-       4,     1,     1,     1,     1,     4,     1,     1,     1,     4,
-       1,     1,     1,     4,     4,     5,     7,     0,     2,     2,
-       1,     1,     1,     1,     1,     2,     2,     2,     3,     0,
-       2,     1,     3,     3,     3,     3,     3,     4,     4,     3,
-       3,     3
+       3,     4,     6,     7,     7,     7,     6,     6,     3,     5,
+       7,     4,     6,     6,     4,     3,     5,     5,     7,     6,
+      12,     7,     9,     2,     4,     4,     2,     0,     2,     2,
+       0,     2,     4,     2,     1,     2,     3,     4,     2,     2,
+       2,     1,     2,     3,     1,     3,     3,     1,     1,     1,
+       4,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       4,     1,     4,     1,     1,     1,     1,     2,     1,     5,
+       4,     4,     4,     4,     1,     1,     1,     1,     4,     1,
+       1,     1,     4,     1,     1,     1,     4,     4,     5,     7,
+       0,     2,     2,     1,     1,     1,     1,     1,     2,     2,
+       2,     3,     0,     2,     1,     3,     3,     3,     3,     3,
+       4,     4,     3,     3,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -671,240 +671,246 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     3,     1,     0,     0,    48,    48,    48,    48,    51,
-      48,    48,    48,    48,    48,     0,     0,     0,    48,    51,
-      51,    48,    48,    48,    48,    48,    48,    51,     0,     0,
+       2,     3,     1,     0,     0,    47,    47,    47,    47,    50,
+      47,    47,    47,    47,    47,     0,     0,     0,    47,    50,
+      50,    47,    47,    47,    47,    47,    47,    50,     0,     0,
        0,     0,     0,     9,     4,     0,    11,     0,     0,     0,
-      51,    51,     0,    51,     0,     0,    51,    51,     0,     0,
-     113,   107,   114,     0,     0,     0,     0,     0,     0,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      76,    80,    44,    78,     0,    97,    94,     0,    93,     0,
-     102,    68,    69,     0,    65,    58,     0,    71,    64,    66,
-      96,    85,    72,    70,     0,     5,     0,     0,    10,    49,
-      50,     0,     0,    82,    81,    83,     0,     0,     0,    52,
-     107,    20,     0,     0,     0,     0,     0,     0,     0,     0,
-      85,    28,   116,   115,     0,     0,     0,     0,   121,     0,
-     117,     0,     0,     0,     0,    51,    36,     0,     0,     0,
-     101,     0,   100,     0,     0,     0,     0,    19,     0,     0,
-       0,     0,     0,     0,    59,    57,    56,    55,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    84,     0,
-       0,     0,   107,    17,    18,    73,    74,     0,    54,     0,
-      21,     0,     0,    51,     0,     0,     0,     0,   107,   108,
-     109,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   118,    29,     0,   111,   110,   112,     0,    32,
-       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
-      75,     0,     0,     0,     0,    60,    45,     0,     0,     0,
-       0,     0,    46,     6,     7,     8,    14,    85,    15,    16,
-      54,     0,     0,    51,     0,     0,     0,     0,     0,    51,
-       0,     0,   131,   130,   129,     0,     0,   122,   123,   124,
-     125,   126,     0,   104,     0,     0,    37,     0,   102,    38,
-      51,     0,     0,    79,    77,    95,   103,    67,    87,    91,
-      92,    88,    89,    90,    13,    53,    22,     0,    62,    63,
-       0,    27,    51,    26,     0,   105,   127,   128,    30,    33,
-      34,     0,     0,    40,     0,     0,    12,    24,    23,    25,
-       0,     0,     0,    39,     0,    42,     0,   106,    31,     0,
-       0,     0,     0,    98,     0,     0,    43,     0,     0,     0,
-       0,   119,    86,    99,     0,    41,   120
+      50,    50,     0,    50,     0,     0,    50,    50,     0,     0,
+     116,   110,   117,     0,     0,     0,     0,     0,     0,     0,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      79,    83,    43,    81,     0,   100,    97,     0,    96,     0,
+     105,    71,    72,     0,    68,    61,     0,    74,    67,    69,
+      99,    88,    75,    73,     0,     5,     0,     0,    10,    48,
+      49,     0,     0,    85,    84,    86,     0,     0,     0,    51,
+     110,    20,     0,     0,     0,     0,     0,     0,     0,     0,
+      88,    28,   119,   118,     0,     0,     0,     0,   124,     0,
+     120,     0,     0,     0,     0,    50,    35,     0,     0,     0,
+     104,     0,   103,     0,     0,     0,     0,    19,     0,     0,
+       0,     0,     0,     0,    62,    60,    59,    58,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    87,     0,
+       0,     0,   110,    17,    18,    76,    77,     0,    53,     0,
+      21,     0,     0,    50,     0,     0,     0,     0,   110,   111,
+     112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   121,     0,     0,   114,   113,   115,     0,    31,
+       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
+      78,     0,     0,     0,     0,    63,    44,     0,     0,     0,
+       0,     0,    45,     6,     7,     8,    14,    88,    15,    16,
+      53,     0,     0,    50,     0,     0,     0,     0,     0,    50,
+       0,     0,   134,   133,   132,     0,     0,   125,   126,   127,
+     128,   129,     0,    54,    29,     0,   107,     0,     0,    36,
+       0,   105,    37,    50,     0,     0,    82,    80,    98,   106,
+      70,    90,    94,    95,    91,    92,    93,    13,    52,    22,
+       0,    65,    66,     0,    27,    50,    26,     0,   108,   130,
+     131,    55,     0,     0,    32,    33,     0,     0,    39,     0,
+       0,    12,    24,    23,    25,     0,     0,    56,    30,     0,
+      38,     0,    41,     0,   109,    57,     0,     0,     0,     0,
+     101,     0,     0,    42,     0,     0,     0,     0,   122,    89,
+     102,     0,    40,   123
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     3,    34,   165,    35,    37,   109,   111,    84,
-      85,   182,    86,   174,    70,    71,    87,   102,   103,    88,
-     315,    89,   278,    90,   120,   324,   141,    92,    73,   127,
-     208,   128,   335,   129
+      -1,     1,     3,    34,   165,    35,    37,   109,   111,   264,
+      84,    85,   182,    86,   174,    70,    71,    87,   102,   103,
+      88,   322,    89,   281,    90,   120,   331,   141,    92,    73,
+     127,   208,   128,   342,   129
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -99
+#define YYPACT_NINF -130
 static const yytype_int16 yypact[] =
 {
-     -99,     8,   -99,   307,   -38,   -99,   -99,   -99,   -99,   -37,
-     -99,   -99,   -99,   -99,   -99,    64,    64,    64,   -99,   -37,
-     -37,   -99,   -99,   -99,   -99,   -99,   -99,   -37,   226,   364,
-     364,    -8,   -32,   -99,   -99,   -29,   -99,   514,   514,   337,
-     112,   -37,   418,   112,   514,   386,   516,   112,   453,   453,
-     -99,   304,   -99,   453,   453,   -27,   -24,    -2,    30,   464,
-     -99,    -3,   315,   410,    93,   315,   464,   464,   -21,    53,
-     -99,   -99,   -99,     2,    33,   -99,   -99,    35,   -99,    52,
-     -99,   -99,   -99,   392,   -99,   -99,    32,   -99,   -99,    54,
-     -99,    98,   -99,    33,    61,   -99,   453,   453,   -99,   -99,
-     -99,   453,    69,   -99,   -99,   -99,    81,    88,   429,   -99,
-      80,   -99,    68,   364,   100,   272,   105,   110,   -21,   154,
-     -99,   -99,   -99,   -99,   216,   453,   453,   156,   -99,   181,
-     -99,   434,    90,   434,   453,   -37,   -99,   171,   174,    12,
-     -99,   177,   -99,   178,   184,   196,   272,   -99,   193,    29,
-     227,   453,   453,   232,   -99,   -99,   -99,    33,   364,   272,
-     240,   258,   264,   274,   364,   307,   530,   540,   -99,   272,
-     272,   364,   304,   -99,   -99,   -99,   -99,   220,   -99,   242,
-     -99,   272,   223,    20,   233,    29,   236,   -21,    80,   -99,
-     -99,    90,   453,   453,   453,   286,   291,   453,   453,   453,
-     453,   453,   -99,   -99,   250,   -99,   -99,   -99,   266,   -99,
-     300,   302,   -99,   146,   453,   317,   159,   146,   272,   272,
-     -99,   309,   318,   194,   319,   -99,   -99,   324,    53,    53,
-      53,    53,   -99,   -99,   -99,   -99,   -99,   312,   -99,   -99,
-     156,   308,   328,   -37,   334,   272,   272,   272,   272,   339,
-     237,   340,   568,   617,   624,   453,   453,   221,   221,   -99,
-     -99,   -99,   344,   -99,   344,    -3,   -99,   350,   355,   -99,
-     -37,   356,   357,   -99,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,   -99,   -99,   -99,   272,   -99,   -99,   461,   -99,   -99,
-     361,   -99,   183,   -99,   389,   -99,   267,   267,   422,   -99,
-     -99,   272,   146,   -99,   365,   272,   -99,   -99,   -99,   -99,
-     367,   453,   374,   -99,   272,   -99,   379,   -99,   -99,    62,
-     380,   272,   378,   -99,   390,   272,   -99,   453,    62,   397,
-     248,   393,   -99,   -99,   453,   -99,   609
+    -130,    12,  -130,   305,   -35,  -130,  -130,  -130,  -130,   -33,
+    -130,  -130,  -130,  -130,  -130,   427,   427,   427,  -130,   -33,
+     -33,  -130,  -130,  -130,  -130,  -130,  -130,   -33,   445,   370,
+     370,    10,   -24,  -130,  -130,   -30,  -130,   140,   140,   335,
+     -13,   -33,   449,   -13,   140,    70,   484,   -13,   359,   359,
+    -130,   114,  -130,   359,   359,    27,   -11,    62,    76,   167,
+    -130,     7,   171,   424,    64,   171,   167,   167,    65,   405,
+    -130,  -130,  -130,    68,    74,  -130,  -130,    78,  -130,    86,
+    -130,  -130,  -130,   402,  -130,  -130,    96,  -130,  -130,   107,
+    -130,    21,  -130,    74,   118,  -130,   359,   359,  -130,  -130,
+    -130,   359,   131,  -130,  -130,  -130,   150,   158,   473,  -130,
+      98,  -130,   155,   370,   187,    43,   192,   199,    65,   205,
+    -130,  -130,  -130,  -130,   262,   359,   359,   203,  -130,    90,
+    -130,   106,   164,   233,   359,   -33,  -130,   211,   223,    -3,
+    -130,   226,  -130,   231,   235,   240,    43,  -130,   220,   122,
+     608,   359,   359,   491,  -130,  -130,  -130,    74,   370,    43,
+     287,   291,   300,   301,   370,   305,   560,   582,  -130,    43,
+      43,   370,   114,  -130,  -130,  -130,  -130,   264,  -130,   267,
+    -130,    43,   279,    -4,   281,   122,   283,    65,    98,  -130,
+    -130,   164,   359,   359,   359,   345,   356,   359,   359,   359,
+     359,   359,  -130,    15,   306,  -130,  -130,  -130,   282,  -130,
+     307,   310,  -130,    32,   359,   308,   132,    32,    43,    43,
+    -130,   315,   316,   225,   321,  -130,  -130,   322,   405,   405,
+     405,   405,  -130,  -130,  -130,  -130,  -130,   311,  -130,  -130,
+     203,   204,   323,   -33,   333,    43,    43,    43,    43,   334,
+     331,   337,   631,   611,   547,   359,   359,   228,   228,  -130,
+    -130,  -130,   332,   371,  -130,   353,  -130,   357,     7,  -130,
+     350,   336,  -130,   -33,   340,   361,  -130,  -130,  -130,  -130,
+    -130,  -130,  -130,  -130,  -130,  -130,  -130,    43,  -130,  -130,
+     513,  -130,  -130,   360,  -130,   146,  -130,   384,  -130,   303,
+     303,   425,   399,    15,  -130,  -130,    43,    32,  -130,   373,
+      43,  -130,  -130,  -130,  -130,   375,   408,  -130,  -130,   383,
+    -130,    43,  -130,   385,  -130,  -130,   120,   390,    43,   380,
+    -130,   391,    43,  -130,   359,   120,   394,   275,   403,  -130,
+    -130,   359,  -130,   622
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -99,   -99,   -99,   294,   -99,   -99,   585,    37,   360,   -44,
-     409,   -86,    -7,   -99,   -59,   -42,   -23,   -22,   -91,    -1,
-     -99,    71,   151,   -68,   -19,   147,   -99,   -58,    36,   -98,
-     283,   -15,   -99,   -18
+    -130,  -130,  -130,   302,  -130,  -130,   589,    24,   362,   166,
+     -58,   411,   -57,    -8,  -130,   -61,   -43,    -7,    22,  -129,
+     -21,  -130,    72,    34,   -94,   -29,   137,  -130,   -51,     3,
+     -84,   286,    20,  -130,    61
 };
 
 /* 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 -62
+#define YYTABLE_NINF -65
 static const yytype_int16 yytable[] =
 {
-      56,    56,    56,   116,   137,    72,   142,   143,     2,   147,
-      91,    91,   178,    74,    93,    93,   106,   136,    91,    91,
-      91,   215,   114,    94,    93,    91,    36,   112,    41,   245,
-     117,    97,   107,   122,   123,    98,   104,   104,   131,   130,
-     203,   134,   209,   104,   132,   119,    42,   146,   138,   175,
-     148,    55,    57,    58,    95,    96,    60,    61,   135,   186,
-     156,    48,    49,   133,    68,   144,   145,    83,   157,   154,
-     149,    76,    48,    49,   240,    77,    78,   108,   166,   167,
-     113,   221,   222,   118,   121,    41,   168,   -61,   125,   126,
-     250,    50,    75,   177,    91,    76,   183,   158,    93,    77,
-      78,   150,    50,   151,   160,   161,   180,   162,   105,   105,
-     189,   190,   322,   323,    52,   105,   204,   222,   210,   211,
-     152,    53,   159,    51,    54,    52,   164,   148,   249,   205,
-     206,   207,    53,   223,   169,    54,   179,   224,   123,    91,
-     227,    79,    80,    93,   176,    91,   170,    99,   100,    93,
-     237,   226,    91,   171,   163,   266,    93,   232,   269,   270,
-     289,   290,   243,   139,   239,   181,    99,   100,   236,   238,
-     184,   298,   212,   299,   252,   253,   254,    41,   185,   257,
-     258,   259,   260,   261,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,    79,    80,   267,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,    79,   268,   279,
-     279,   279,   279,   280,   280,   280,   280,   271,   272,   187,
-     246,   300,    75,   188,   191,    76,   288,   183,   183,    77,
-      78,   199,   200,   201,    48,    49,   213,   296,   297,   214,
-      48,    49,   216,   217,   313,   307,   228,   291,    41,   218,
-     202,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   219,   220,   275,    50,   229,   205,   206,   207,    76,
-      50,   230,   117,    77,    78,   197,   198,   199,   200,   201,
-     286,   231,   312,   306,   242,    51,   293,    52,   241,   225,
-     244,   309,   255,    52,    69,   320,   318,    54,   256,   247,
-      53,   248,   326,    54,   316,   294,   329,   303,     4,   330,
-     124,    75,   125,   126,    76,   262,   336,   333,    77,    78,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,   263,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    48,    49,   205,   206,   207,
-     242,    29,    30,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,    79,    80,   264,    31,   265,    32,    99,
-     100,    33,    48,    49,   225,    50,    75,   284,   273,    76,
-     281,   282,   283,    77,    78,    79,    80,   274,   276,    81,
-      82,    99,   100,   277,    48,    49,    51,   285,    52,   287,
-      48,   153,    50,    75,   292,    69,    76,    83,    54,   295,
-      77,    78,    79,    80,   101,   301,    81,    82,    48,    49,
-     302,   304,   305,    51,    50,    52,    48,    49,   308,   310,
-      50,   311,    69,   314,    83,    54,   317,    48,    49,   319,
-      99,   100,    48,    49,   321,   325,   327,    52,    50,   154,
-     155,    51,   115,    52,    69,   328,    50,    54,   334,   233,
-      69,    48,    49,    54,    99,   100,   332,    50,   173,    48,
-      49,    52,    50,   140,   251,   331,     0,   110,    53,    52,
-       0,    54,     0,     0,     0,     0,    53,     0,   172,    54,
-      52,    50,     0,     0,     0,    52,     0,    69,     0,    50,
-      54,     0,    53,    75,   101,    54,    76,     0,     0,     0,
-      77,    78,     0,     0,    52,     0,     0,     0,    99,   100,
-       0,    53,    52,     0,    54,     0,     0,     0,     0,    69,
-       0,     0,    54,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,    75,     0,    75,    76,     0,    76,     0,
-      77,    78,    77,    78,     0,     0,     0,     0,    99,   100,
-      99,   100,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,    41,     0,     0,   101,     0,     0,     0,     0,     0,
-       0,    38,    39,    40,   234,    43,    44,    45,    46,    47,
-       0,     0,     0,    59,   235,     0,    62,    63,    64,    65,
-      66,    67,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   194,   195,   196,   197,   198,   199,   200,   201,
-     195,   196,   197,   198,   199,   200,   201
+      91,    91,   116,   136,   209,   245,   215,   147,    91,    91,
+      91,   137,     2,   142,   143,    91,   104,   104,    55,    57,
+      58,    72,    94,   104,   262,   119,   178,   160,   161,    36,
+     162,   107,    41,    42,    98,    56,    56,    56,   135,    97,
+     148,    99,   100,    60,    61,   144,   145,   175,    74,    93,
+      93,    68,    41,   263,   154,   221,   222,   186,   132,    93,
+     106,    41,   112,   -64,   108,   117,   114,   113,   122,   123,
+     118,   121,    95,    96,   130,    83,   156,   163,    48,    49,
+      79,    80,    75,   138,    91,    76,   183,   134,   240,    77,
+      78,   222,   131,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   157,   250,   180,   125,   126,    50,   105,
+     105,   176,    79,    80,    48,    49,   105,   148,    99,   100,
+     124,   168,   125,   126,    99,   100,   249,   133,   177,    91,
+     227,    52,   139,    93,   146,    91,   115,   149,   304,    69,
+     237,    54,    91,   150,    50,   189,   190,   151,   236,   238,
+     226,   204,   243,   210,   211,   152,   232,   166,   167,   212,
+     202,   158,   269,   239,    76,   272,   273,    52,    77,    78,
+     329,   330,   224,   123,   203,    53,   159,    54,    93,    75,
+      79,   271,    76,   164,    93,    75,    77,    78,    76,   292,
+     293,    93,    77,    78,    99,   100,   169,   274,   275,   282,
+     282,   282,   282,   205,   206,   207,    75,   246,   101,    76,
+     305,    41,   223,    77,    78,   170,   291,   183,   183,    79,
+      80,    99,   100,   171,   179,    99,   100,   294,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   199,   200,
+     201,    48,    49,   205,   206,   207,   242,   312,   283,   283,
+     283,   283,   181,   252,   253,   254,   320,   184,   257,   258,
+     259,   260,   261,   284,   285,   286,   311,   289,   185,   188,
+     187,    50,   191,   296,   314,   270,   213,   319,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   214,   323,
+     220,   216,   327,   228,    52,   278,   217,   308,   229,   333,
+     218,   101,    53,   336,    54,   219,     4,   230,   231,   242,
+     117,   197,   198,   199,   200,   201,   299,   300,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   241,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    48,    49,   340,   244,   247,   248,    29,
+      30,   255,   266,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   256,    31,   225,    32,    48,    49,    33,
+     301,   265,   267,    50,    75,   268,   287,    76,    48,    49,
+     302,    77,    78,    79,    80,   276,   277,    81,    82,    99,
+     100,   279,   280,   288,    51,   337,    52,    50,   290,   295,
+     297,   307,   343,    83,    69,   309,    54,   298,    50,    75,
+      48,   153,    76,    48,    49,   306,    77,    78,    79,    80,
+      52,   303,    81,    82,   315,   101,   310,   313,    53,    51,
+      54,    52,    48,    49,   316,    48,    49,   317,    83,    69,
+      50,    54,   321,    50,    75,   324,   325,    76,   326,   334,
+     328,    77,    78,    48,    49,   332,   335,    48,    49,   154,
+     155,    51,    50,    52,   339,    50,    52,   233,   341,   318,
+     173,    69,   338,    54,    53,   140,    54,   251,    99,   100,
+       0,    48,    49,    50,     0,    52,    51,    50,    52,     0,
+       0,     0,     0,    53,     0,    54,    53,     0,    54,    48,
+      49,     0,     0,     0,    51,     0,    52,     0,   110,     0,
+      52,    50,     0,     0,    69,     0,    54,     0,    53,     0,
+      54,    48,    49,    75,     0,     0,    76,     0,     0,    50,
+      77,    78,   172,     0,    52,     0,     0,     0,    99,   100,
+       0,     0,    69,     0,    54,     0,     0,     0,   225,    41,
+       0,    50,    52,   195,   196,   197,   198,   199,   200,   201,
+      53,     0,    54,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,     0,    52,     0,     0,     0,     0,     0,
+       0,     0,    69,     0,    54,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,    38,    39,    40,     0,    43,
+      44,    45,    46,    47,     0,     0,     0,    59,     0,     0,
+      62,    63,    64,    65,    66,    67,   194,   195,   196,   197,
+     198,   199,   200,   201,   234,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,     0,     0,   235,   205,   206,   207,
+      76,     0,     0,     0,    77,    78
 };
 
 static const yytype_int16 yycheck[] =
 {
-      15,    16,    17,    45,    62,    28,    64,    65,     0,    68,
-      29,    30,   110,    28,    29,    30,    38,    61,    37,    38,
-      39,     9,    44,    30,    39,    44,    64,    42,    65,     9,
-      45,    63,    39,    48,    49,    64,    37,    38,    65,    54,
-     131,    11,   133,    44,    68,    46,     9,    68,    63,   108,
-      69,    15,    16,    17,    62,    63,    19,    20,    59,   118,
-      83,     8,     9,    65,    27,    66,    67,    70,    83,    57,
-      68,    42,     8,     9,   172,    46,    47,    40,    96,    97,
-      43,   149,   150,    46,    47,    65,   101,    67,     8,     9,
-     188,    38,    39,   108,   113,    42,   115,    65,   113,    46,
-      47,    68,    38,    68,     6,     7,   113,     9,    37,    38,
-     125,   126,    50,    51,    61,    44,   131,   185,   133,   134,
-      68,    68,    68,    59,    71,    61,    65,   146,   187,    39,
-      40,    41,    68,   151,    65,    71,    68,   152,   153,   158,
-     159,    48,    49,   158,   108,   164,    65,    54,    55,   164,
-     169,   158,   171,    65,    56,   213,   171,   164,   216,   217,
-     246,   247,   181,    70,   171,    65,    54,    55,   169,   170,
-      65,   262,   135,   264,   192,   193,   194,    65,    68,   197,
-     198,   199,   200,   201,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    48,    49,   214,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    48,    49,   228,
-     229,   230,   231,   228,   229,   230,   231,   218,   219,    65,
-     183,   265,    39,     7,    68,    42,   245,   246,   247,    46,
-      47,    10,    11,    12,     8,     9,    65,   255,   256,    65,
-       8,     9,    65,    65,   302,   287,     6,   248,    65,    65,
-      69,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    65,    69,    69,    38,     7,    39,    40,    41,    42,
-      38,     7,   287,    46,    47,     8,     9,    10,    11,    12,
-     243,     7,   301,   284,    42,    59,   249,    61,    68,    57,
-      67,   292,     6,    61,    68,   314,   311,    71,     7,    66,
-      68,    65,   321,    71,   305,    68,   325,   270,     1,   327,
-       6,    39,     8,     9,    42,    65,   334,    69,    46,    47,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    69,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,     8,     9,    39,    40,    41,
-      42,    44,    45,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    48,    49,    65,    59,    65,    61,    54,
-      55,    64,     8,     9,    57,    38,    39,    65,    69,    42,
-     229,   230,   231,    46,    47,    48,    49,    69,    69,    52,
-      53,    54,    55,    69,     8,     9,    59,    69,    61,    65,
-       8,     9,    38,    39,    65,    68,    42,    70,    71,    69,
-      46,    47,    48,    49,    70,    65,    52,    53,     8,     9,
-      65,    65,    65,    59,    38,    61,     8,     9,    67,    40,
-      38,     9,    68,    68,    70,    71,    69,     8,     9,    65,
-      54,    55,     8,     9,    65,    65,    68,    61,    38,    57,
-      58,    59,    66,    61,    68,    65,    38,    71,    65,   165,
-      68,     8,     9,    71,    54,    55,    69,    38,   108,     8,
-       9,    61,    38,    64,   191,   328,    -1,    59,    68,    61,
-      -1,    71,    -1,    -1,    -1,    -1,    68,    -1,    59,    71,
-      61,    38,    -1,    -1,    -1,    61,    -1,    68,    -1,    38,
-      71,    -1,    68,    39,    70,    71,    42,    -1,    -1,    -1,
-      46,    47,    -1,    -1,    61,    -1,    -1,    -1,    54,    55,
-      -1,    68,    61,    -1,    71,    -1,    -1,    -1,    -1,    68,
-      -1,    -1,    71,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    39,    -1,    39,    42,    -1,    42,    -1,
-      46,    47,    46,    47,    -1,    -1,    -1,    -1,    54,    55,
-      54,    55,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    65,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,     6,     7,     8,    64,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,    18,    64,    -1,    21,    22,    23,    24,
-      25,    26,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,     5,     6,     7,     8,     9,    10,    11,    12,
-       6,     7,     8,     9,    10,    11,    12
+      29,    30,    45,    61,   133,     9,     9,    68,    37,    38,
+      39,    62,     0,    64,    65,    44,    37,    38,    15,    16,
+      17,    28,    30,    44,     9,    46,   110,     6,     7,    64,
+       9,    39,    65,     9,    64,    15,    16,    17,    59,    63,
+      69,    54,    55,    19,    20,    66,    67,   108,    28,    29,
+      30,    27,    65,    38,    57,   149,   150,   118,    69,    39,
+      38,    65,    42,    67,    40,    45,    44,    43,    48,    49,
+      46,    47,    62,    63,    54,    68,    83,    56,     8,     9,
+      48,    49,    39,    63,   113,    42,   115,    11,   172,    46,
+      47,   185,    65,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    83,   188,   113,     8,     9,    38,    37,
+      38,   108,    48,    49,     8,     9,    44,   146,    54,    55,
+       6,   101,     8,     9,    54,    55,   187,    65,   108,   158,
+     159,    61,    68,   113,    69,   164,    66,    69,   267,    69,
+     169,    71,   171,    69,    38,   125,   126,    69,   169,   170,
+     158,   131,   181,   133,   134,    69,   164,    96,    97,   135,
+      70,    65,   213,   171,    42,   216,   217,    61,    46,    47,
+      50,    51,   152,   153,    68,    69,    69,    71,   158,    39,
+      48,    49,    42,    65,   164,    39,    46,    47,    42,   246,
+     247,   171,    46,    47,    54,    55,    65,   218,   219,   228,
+     229,   230,   231,    39,    40,    41,    39,   183,    68,    42,
+     268,    65,   151,    46,    47,    65,   245,   246,   247,    48,
+      49,    54,    55,    65,    69,    54,    55,   248,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    10,    11,
+      12,     8,     9,    39,    40,    41,    42,   290,   228,   229,
+     230,   231,    65,   192,   193,   194,   307,    65,   197,   198,
+     199,   200,   201,   229,   230,   231,   287,   243,    69,     7,
+      65,    38,    69,   249,   295,   214,    65,   306,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    65,   310,
+      70,    65,   321,     6,    61,    70,    65,   273,     7,   328,
+      65,    68,    69,   332,    71,    65,     1,     7,     7,    42,
+     290,     8,     9,    10,    11,    12,   255,   256,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    69,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,     8,     9,    70,    67,    66,    65,    44,
+      45,     6,    70,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,     7,    59,    57,    61,     8,     9,    64,
+      38,    65,    65,    38,    39,    65,    65,    42,     8,     9,
+       9,    46,    47,    48,    49,    70,    70,    52,    53,    54,
+      55,    70,    70,    70,    59,   334,    61,    38,    65,    65,
+      69,    65,   341,    68,    69,    65,    71,    70,    38,    39,
+       8,     9,    42,     8,     9,    65,    46,    47,    48,    49,
+      61,    68,    52,    53,    40,    68,    65,    67,    69,    59,
+      71,    61,     8,     9,     9,     8,     9,    38,    68,    69,
+      38,    71,    69,    38,    39,    70,    38,    42,    65,    69,
+      65,    46,    47,     8,     9,    65,    65,     8,     9,    57,
+      58,    59,    38,    61,    70,    38,    61,   165,    65,   303,
+     108,    69,   335,    71,    69,    64,    71,   191,    54,    55,
+      -1,     8,     9,    38,    -1,    61,    59,    38,    61,    -1,
+      -1,    -1,    -1,    69,    -1,    71,    69,    -1,    71,     8,
+       9,    -1,    -1,    -1,    59,    -1,    61,    -1,    59,    -1,
+      61,    38,    -1,    -1,    69,    -1,    71,    -1,    69,    -1,
+      71,     8,     9,    39,    -1,    -1,    42,    -1,    -1,    38,
+      46,    47,    59,    -1,    61,    -1,    -1,    -1,    54,    55,
+      -1,    -1,    69,    -1,    71,    -1,    -1,    -1,    57,    65,
+      -1,    38,    61,     6,     7,     8,     9,    10,    11,    12,
+      69,    -1,    71,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    69,    -1,    71,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,     6,     7,     8,    -1,    10,
+      11,    12,    13,    14,    -1,    -1,    -1,    18,    -1,    -1,
+      21,    22,    23,    24,    25,    26,     5,     6,     7,     8,
+       9,    10,    11,    12,    64,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    -1,    -1,    64,    39,    40,    41,
+      42,    -1,    -1,    -1,    46,    47
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -916,35 +922,36 @@ static const yytype_uint8 yystos[] =
       29,    30,    31,    32,    33,    34,    35,    36,    37,    44,
       45,    59,    61,    64,    75,    77,    64,    78,    78,    78,
       78,    65,    79,    78,    78,    78,    78,    78,     8,     9,
-      38,    59,    61,    68,    71,   100,   103,   100,   100,    78,
-      79,    79,    78,    78,    78,    78,    78,    78,    79,    68,
-      86,    87,    88,   100,   103,    39,    42,    46,    47,    48,
-      49,    52,    53,    70,    81,    82,    84,    88,    91,    93,
-      95,    96,    99,   103,    84,    62,    63,    63,    64,    54,
-      55,    70,    89,    90,    91,    93,    89,    84,    79,    79,
-      59,    80,   103,    79,    89,    66,    87,   103,    79,    91,
-      96,    79,   103,   103,     6,     8,     9,   101,   103,   105,
-     103,    65,    68,    65,    11,    91,    81,    99,   103,    70,
-      82,    98,    99,    99,    91,    91,    68,    86,    96,    68,
-      68,    68,    68,     9,    57,    58,    88,   103,    65,    68,
-       6,     7,     9,    56,    65,    76,   105,   105,   103,    65,
-      65,    65,    59,    80,    85,    86,   100,   103,   101,    68,
-      84,    65,    83,    96,    65,    68,    86,    65,     7,   103,
-     103,    68,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    69,    90,   103,    39,    40,    41,   102,    90,
-     103,   103,    79,    65,    65,     9,    65,    65,    65,    65,
-      69,    95,    95,   105,   103,    57,    84,    96,     6,     7,
-       7,     7,    84,    75,    64,    64,    91,    96,    91,    84,
-     101,    68,    42,    96,    67,     9,    79,    66,    65,    86,
-     101,   102,   105,   105,   105,     6,     7,   105,   105,   105,
-     105,   105,    65,    69,    65,    65,    99,   105,    49,    99,
-      99,    91,    91,    69,    69,    69,    69,    69,    94,    96,
-     103,    94,    94,    94,    65,    69,    79,    65,    96,    83,
-      83,    91,    65,    79,    68,    69,   105,   105,    90,    90,
-      81,    65,    65,    79,    65,    65,    91,    87,    67,    91,
-      40,     9,    96,    99,    68,    92,    91,    69,   103,    65,
-      96,    65,    50,    51,    97,    65,    96,    68,    65,    96,
-     105,    97,    69,    69,    65,   104,   105
+      38,    59,    61,    69,    71,   101,   104,   101,   101,    78,
+      79,    79,    78,    78,    78,    78,    78,    78,    79,    69,
+      87,    88,    89,   101,   104,    39,    42,    46,    47,    48,
+      49,    52,    53,    68,    82,    83,    85,    89,    92,    94,
+      96,    97,   100,   104,    85,    62,    63,    63,    64,    54,
+      55,    68,    90,    91,    92,    94,    90,    85,    79,    79,
+      59,    80,   104,    79,    90,    66,    88,   104,    79,    92,
+      97,    79,   104,   104,     6,     8,     9,   102,   104,   106,
+     104,    65,    69,    65,    11,    92,    82,   100,   104,    68,
+      83,    99,   100,   100,    92,    92,    69,    87,    97,    69,
+      69,    69,    69,     9,    57,    58,    89,   104,    65,    69,
+       6,     7,     9,    56,    65,    76,   106,   106,   104,    65,
+      65,    65,    59,    80,    86,    87,   101,   104,   102,    69,
+      85,    65,    84,    97,    65,    69,    87,    65,     7,   104,
+     104,    69,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    70,    68,   104,    39,    40,    41,   103,    91,
+     104,   104,    79,    65,    65,     9,    65,    65,    65,    65,
+      70,    96,    96,   106,   104,    57,    85,    97,     6,     7,
+       7,     7,    85,    75,    64,    64,    92,    97,    92,    85,
+     102,    69,    42,    97,    67,     9,    79,    66,    65,    87,
+     102,   103,   106,   106,   106,     6,     7,   106,   106,   106,
+     106,   106,     9,    38,    81,    65,    70,    65,    65,   100,
+     106,    49,   100,   100,    92,    92,    70,    70,    70,    70,
+      70,    95,    97,   104,    95,    95,    95,    65,    70,    79,
+      65,    97,    84,    84,    92,    65,    79,    69,    70,   106,
+     106,    38,     9,    68,    91,    82,    65,    65,    79,    65,
+      65,    92,    88,    67,    92,    40,     9,    38,    81,    97,
+     100,    69,    93,    92,    70,    38,    65,    97,    65,    50,
+      51,    98,    65,    97,    69,    65,    97,   106,    98,    70,
+      70,    65,   105,   106
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1925,100 +1932,86 @@ yyreduce:
   case 29:
 #line 216 "a.y"
     {
-               settext((yyvsp[(2) - (4)].addr).sym);
-               (yyvsp[(4) - (4)].addr).type = TYPE_TEXTSIZE;
-               (yyvsp[(4) - (4)].addr).u.argsize = ArgsSizeUnknown;
-               outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr));
+               settext((yyvsp[(2) - (5)].addr).sym);
+               outcode((yyvsp[(1) - (5)].lval), Always, &(yyvsp[(2) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr));
        }
     break;
 
   case 30:
-#line 223 "a.y"
+#line 221 "a.y"
     {
-               settext((yyvsp[(2) - (6)].addr).sym);
-               (yyvsp[(6) - (6)].addr).type = TYPE_TEXTSIZE;
-               (yyvsp[(6) - (6)].addr).u.argsize = ArgsSizeUnknown;
-               outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
+               settext((yyvsp[(2) - (7)].addr).sym);
+               outcode((yyvsp[(1) - (7)].lval), Always, &(yyvsp[(2) - (7)].addr), (yyvsp[(4) - (7)].lval), &(yyvsp[(7) - (7)].addr));
        }
     break;
 
   case 31:
-#line 230 "a.y"
-    {
-               settext((yyvsp[(2) - (8)].addr).sym);
-               (yyvsp[(6) - (8)].addr).type = TYPE_TEXTSIZE;
-               (yyvsp[(6) - (8)].addr).u.argsize = (yyvsp[(8) - (8)].lval);
-               outcode((yyvsp[(1) - (8)].lval), Always, &(yyvsp[(2) - (8)].addr), (yyvsp[(4) - (8)].lval), &(yyvsp[(6) - (8)].addr));
-       }
-    break;
-
-  case 32:
-#line 240 "a.y"
+#line 229 "a.y"
     {
                settext((yyvsp[(2) - (4)].addr).sym);
                outcode((yyvsp[(1) - (4)].lval), Always, &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr));
        }
     break;
 
-  case 33:
-#line 245 "a.y"
+  case 32:
+#line 234 "a.y"
     {
                settext((yyvsp[(2) - (6)].addr).sym);
                outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
-  case 34:
-#line 253 "a.y"
+  case 33:
+#line 242 "a.y"
     {
                outcode((yyvsp[(1) - (6)].lval), Always, &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
-  case 35:
-#line 260 "a.y"
+  case 34:
+#line 249 "a.y"
     {
                outcode((yyvsp[(1) - (4)].lval), (yyvsp[(2) - (4)].lval), &(yyvsp[(3) - (4)].addr), 0, &nullgen);
        }
     break;
 
-  case 36:
-#line 267 "a.y"
+  case 35:
+#line 256 "a.y"
     {
                outcode((yyvsp[(1) - (3)].lval), Always, &nullgen, 0, &(yyvsp[(3) - (3)].addr));
        }
     break;
 
-  case 37:
-#line 274 "a.y"
+  case 36:
+#line 263 "a.y"
     {
                outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr));
        }
     break;
 
-  case 38:
-#line 278 "a.y"
+  case 37:
+#line 267 "a.y"
     {
                outcode((yyvsp[(1) - (5)].lval), (yyvsp[(2) - (5)].lval), &(yyvsp[(3) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr));
        }
     break;
 
-  case 39:
-#line 282 "a.y"
+  case 38:
+#line 271 "a.y"
     {
                outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].lval), &(yyvsp[(7) - (7)].addr));
        }
     break;
 
-  case 40:
-#line 286 "a.y"
+  case 39:
+#line 275 "a.y"
     {
                outcode((yyvsp[(1) - (6)].lval), (yyvsp[(2) - (6)].lval), &(yyvsp[(3) - (6)].addr), (yyvsp[(5) - (6)].addr).reg, &nullgen);
        }
     break;
 
-  case 41:
-#line 293 "a.y"
+  case 40:
+#line 282 "a.y"
     {
                Addr g;
 
@@ -2039,15 +2032,15 @@ yyreduce:
        }
     break;
 
-  case 42:
-#line 315 "a.y"
+  case 41:
+#line 304 "a.y"
     {
                outcode((yyvsp[(1) - (7)].lval), (yyvsp[(2) - (7)].lval), &(yyvsp[(3) - (7)].addr), (yyvsp[(5) - (7)].addr).reg, &(yyvsp[(7) - (7)].addr));
        }
     break;
 
-  case 43:
-#line 323 "a.y"
+  case 42:
+#line 312 "a.y"
     {
                (yyvsp[(7) - (9)].addr).type = TYPE_REGREG2;
                (yyvsp[(7) - (9)].addr).offset = (yyvsp[(9) - (9)].lval);
@@ -2055,15 +2048,15 @@ yyreduce:
        }
     break;
 
-  case 44:
-#line 332 "a.y"
+  case 43:
+#line 321 "a.y"
     {
                outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].addr), 0, &nullgen);
        }
     break;
 
-  case 45:
-#line 339 "a.y"
+  case 44:
+#line 328 "a.y"
     {
                if((yyvsp[(2) - (4)].addr).type != TYPE_CONST || (yyvsp[(4) - (4)].addr).type != TYPE_CONST)
                        yyerror("arguments to PCDATA must be integer constants");
@@ -2071,8 +2064,8 @@ yyreduce:
        }
     break;
 
-  case 46:
-#line 348 "a.y"
+  case 45:
+#line 337 "a.y"
     {
                if((yyvsp[(2) - (4)].addr).type != TYPE_CONST)
                        yyerror("index for FUNCDATA must be integer constant");
@@ -2082,36 +2075,36 @@ yyreduce:
        }
     break;
 
-  case 47:
-#line 359 "a.y"
+  case 46:
+#line 348 "a.y"
     {
                outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, 0, &nullgen);
        }
     break;
 
-  case 48:
-#line 364 "a.y"
+  case 47:
+#line 353 "a.y"
     {
                (yyval.lval) = Always;
        }
     break;
 
-  case 49:
-#line 368 "a.y"
+  case 48:
+#line 357 "a.y"
     {
                (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 50:
-#line 372 "a.y"
+  case 49:
+#line 361 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 53:
-#line 381 "a.y"
+  case 52:
+#line 370 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_BRANCH;
@@ -2119,8 +2112,8 @@ yyreduce:
        }
     break;
 
-  case 54:
-#line 387 "a.y"
+  case 53:
+#line 376 "a.y"
     {
                (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym));
                (yyval.addr) = nullgen;
@@ -2131,8 +2124,44 @@ yyreduce:
        }
     break;
 
+  case 54:
+#line 387 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (1)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
+       }
+    break;
+
   case 55:
-#line 397 "a.y"
+#line 393 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (2)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
+       }
+    break;
+
+  case 56:
+#line 399 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (3)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(3) - (3)].lval);
+       }
+    break;
+
+  case 57:
+#line 405 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (4)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(4) - (4)].lval);
+       }
+    break;
+
+  case 58:
+#line 412 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_CONST;
@@ -2140,16 +2169,16 @@ yyreduce:
        }
     break;
 
-  case 56:
-#line 403 "a.y"
+  case 59:
+#line 418 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
                (yyval.addr).type = TYPE_CONST;
        }
     break;
 
-  case 57:
-#line 408 "a.y"
+  case 60:
+#line 423 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SCONST;
@@ -2157,8 +2186,8 @@ yyreduce:
        }
     break;
 
-  case 59:
-#line 417 "a.y"
+  case 62:
+#line 432 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2166,8 +2195,8 @@ yyreduce:
        }
     break;
 
-  case 60:
-#line 423 "a.y"
+  case 63:
+#line 438 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2175,15 +2204,15 @@ yyreduce:
        }
     break;
 
-  case 61:
-#line 431 "a.y"
+  case 64:
+#line 446 "a.y"
     {
                (yyval.lval) = 1 << (yyvsp[(1) - (1)].lval);
        }
     break;
 
-  case 62:
-#line 435 "a.y"
+  case 65:
+#line 450 "a.y"
     {
                int i;
                (yyval.lval)=0;
@@ -2194,23 +2223,23 @@ yyreduce:
        }
     break;
 
-  case 63:
-#line 444 "a.y"
+  case 66:
+#line 459 "a.y"
     {
                (yyval.lval) = (1<<(yyvsp[(1) - (3)].lval)) | (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 67:
-#line 453 "a.y"
+  case 70:
+#line 468 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (4)].addr);
                (yyval.addr).reg = (yyvsp[(3) - (4)].lval);
        }
     break;
 
-  case 68:
-#line 458 "a.y"
+  case 71:
+#line 473 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2218,8 +2247,8 @@ yyreduce:
        }
     break;
 
-  case 69:
-#line 464 "a.y"
+  case 72:
+#line 479 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2227,8 +2256,8 @@ yyreduce:
        }
     break;
 
-  case 70:
-#line 470 "a.y"
+  case 73:
+#line 485 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2236,8 +2265,8 @@ yyreduce:
        }
     break;
 
-  case 74:
-#line 481 "a.y"
+  case 77:
+#line 496 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (1)].addr);
                if((yyvsp[(1) - (1)].addr).name != NAME_EXTERN && (yyvsp[(1) - (1)].addr).name != NAME_STATIC) {
@@ -2245,8 +2274,8 @@ yyreduce:
        }
     break;
 
-  case 75:
-#line 489 "a.y"
+  case 78:
+#line 504 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2255,8 +2284,8 @@ yyreduce:
        }
     break;
 
-  case 77:
-#line 499 "a.y"
+  case 80:
+#line 514 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2265,8 +2294,8 @@ yyreduce:
        }
     break;
 
-  case 79:
-#line 509 "a.y"
+  case 82:
+#line 524 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (4)].addr);
                (yyval.addr).type = TYPE_MEM;
@@ -2274,8 +2303,8 @@ yyreduce:
        }
     break;
 
-  case 84:
-#line 522 "a.y"
+  case 87:
+#line 537 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_CONST;
@@ -2283,8 +2312,8 @@ yyreduce:
        }
     break;
 
-  case 85:
-#line 530 "a.y"
+  case 88:
+#line 545 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2292,8 +2321,8 @@ yyreduce:
        }
     break;
 
-  case 86:
-#line 538 "a.y"
+  case 89:
+#line 553 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REGREG;
@@ -2302,8 +2331,8 @@ yyreduce:
        }
     break;
 
-  case 87:
-#line 547 "a.y"
+  case 90:
+#line 562 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SHIFT;
@@ -2311,8 +2340,8 @@ yyreduce:
        }
     break;
 
-  case 88:
-#line 553 "a.y"
+  case 91:
+#line 568 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SHIFT;
@@ -2320,8 +2349,8 @@ yyreduce:
        }
     break;
 
-  case 89:
-#line 559 "a.y"
+  case 92:
+#line 574 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SHIFT;
@@ -2329,8 +2358,8 @@ yyreduce:
        }
     break;
 
-  case 90:
-#line 565 "a.y"
+  case 93:
+#line 580 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SHIFT;
@@ -2338,8 +2367,8 @@ yyreduce:
        }
     break;
 
-  case 91:
-#line 573 "a.y"
+  case 94:
+#line 588 "a.y"
     {
                if((yyval.lval) < REG_R0 || (yyval.lval) > REG_R15)
                        print("register value out of range in shift\n");
@@ -2347,8 +2376,8 @@ yyreduce:
        }
     break;
 
-  case 92:
-#line 579 "a.y"
+  case 95:
+#line 594 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= 32)
                        print("shift value out of range\n");
@@ -2356,15 +2385,15 @@ yyreduce:
        }
     break;
 
-  case 94:
-#line 588 "a.y"
+  case 97:
+#line 603 "a.y"
     {
                (yyval.lval) = REGPC;
        }
     break;
 
-  case 95:
-#line 592 "a.y"
+  case 98:
+#line 607 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range in R(...)\n");
@@ -2372,15 +2401,15 @@ yyreduce:
        }
     break;
 
-  case 97:
-#line 601 "a.y"
+  case 100:
+#line 616 "a.y"
     {
                (yyval.lval) = REGSP;
        }
     break;
 
-  case 99:
-#line 608 "a.y"
+  case 102:
+#line 623 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range in C(...)\n");
@@ -2388,8 +2417,8 @@ yyreduce:
        }
     break;
 
-  case 102:
-#line 620 "a.y"
+  case 105:
+#line 635 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2397,8 +2426,8 @@ yyreduce:
        }
     break;
 
-  case 103:
-#line 626 "a.y"
+  case 106:
+#line 641 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2406,8 +2435,8 @@ yyreduce:
        }
     break;
 
-  case 104:
-#line 634 "a.y"
+  case 107:
+#line 649 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2417,8 +2446,8 @@ yyreduce:
        }
     break;
 
-  case 105:
-#line 642 "a.y"
+  case 108:
+#line 657 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2428,8 +2457,8 @@ yyreduce:
        }
     break;
 
-  case 106:
-#line 650 "a.y"
+  case 109:
+#line 665 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2439,141 +2468,141 @@ yyreduce:
        }
     break;
 
-  case 107:
-#line 659 "a.y"
+  case 110:
+#line 674 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 108:
-#line 663 "a.y"
+  case 111:
+#line 678 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 109:
-#line 667 "a.y"
+  case 112:
+#line 682 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 114:
-#line 679 "a.y"
+  case 117:
+#line 694 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
     break;
 
-  case 115:
-#line 683 "a.y"
+  case 118:
+#line 698 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 116:
-#line 687 "a.y"
+  case 119:
+#line 702 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 117:
-#line 691 "a.y"
+  case 120:
+#line 706 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 118:
-#line 695 "a.y"
+  case 121:
+#line 710 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
     break;
 
-  case 119:
-#line 700 "a.y"
+  case 122:
+#line 715 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 120:
-#line 704 "a.y"
+  case 123:
+#line 719 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 122:
-#line 711 "a.y"
+  case 125:
+#line 726 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 123:
-#line 715 "a.y"
+  case 126:
+#line 730 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 124:
-#line 719 "a.y"
+  case 127:
+#line 734 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 125:
-#line 723 "a.y"
+  case 128:
+#line 738 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 126:
-#line 727 "a.y"
+  case 129:
+#line 742 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 127:
-#line 731 "a.y"
+  case 130:
+#line 746 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 128:
-#line 735 "a.y"
+  case 131:
+#line 750 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 129:
-#line 739 "a.y"
+  case 132:
+#line 754 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 130:
-#line 743 "a.y"
+  case 133:
+#line 758 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 131:
-#line 747 "a.y"
+  case 134:
+#line 762 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -2581,7 +2610,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2585 "y.tab.c"
+#line 2614 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 7f1716e91cf4bae03377812fbf9a133fe5aa230c..f772f03ce688cf4223b535ef24b43e7eb43499c0 100644 (file)
@@ -21,12 +21,10 @@ defframe(Prog *ptxt)
        NodeList *l;
        Node *n;
 
-       // fill in argument size
+       // fill in argument size, stack size
        ptxt->to.type = TYPE_TEXTSIZE;
        ptxt->to.u.argsize = rnd(curfn->type->argwid, widthptr);
-
-       // fill in final stack size
-       frame = rnd(stksize+maxarg, widthptr);
+       frame = rnd(stksize+maxarg, widthreg);
        ptxt->to.offset = frame;
        
        // insert code to contain ambiguously live variables
index ba738eeb63902cdcc8d743596b87a7d974182969..52a0d8b6678766ca4d2d2174c560f297d7b90069 100644 (file)
@@ -149,6 +149,7 @@ enum
        C_HREG,
 
        C_ADDR,         /* reference to relocatable address */
+       C_TEXTSIZE,
 
        C_GOK,
 
index 39b075b976cb9deb24cadd48e85d9827377f486f..954884463cc5b6895b2b5866df73c34b6955f57e 100644 (file)
@@ -57,8 +57,8 @@
 %token <dval>  LFCONST
 %token <sval>  LSCONST LSP
 %token <sym>   LNAME LLAB LVAR
-%type  <lval>  con con2 expr pointer offset
-%type  <addr>  mem imm imm2 reg nam rel rem rim rom omem nmem
+%type  <lval>  con expr pointer offset
+%type  <addr>  mem imm reg nam rel rem rim rom omem nmem textsize
 %type  <addr2> nonnon nonrel nonrem rimnon rimrem remrim
 %type  <addr2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9
 %type  <addr2> spec10 spec11 spec12 spec13
@@ -191,18 +191,18 @@ spec1:    /* DATA */
        }
 
 spec2: /* TEXT */
-       mem ',' imm2
+       mem ',' '$' textsize
        {
                settext($1.sym);
                $$.from = $1;
-               $$.to = $3;
+               $$.to = $4;
        }
-|      mem ',' con ',' imm2
+|      mem ',' con ',' '$' textsize
        {
                settext($1.sym);
                $$.from = $1;
                $$.from.scale = $3;
-               $$.to = $5;
+               $$.to = $6;
        }
 
 spec3: /* JMP/CALL */
@@ -412,13 +412,6 @@ reg:
                $$.type = TYPE_REG;
                $$.reg = $1;
        }
-imm2:
-       '$' con2
-       {
-               $$ = nullgen;
-               $$.type = TYPE_CONST;
-               $$.offset = $2;
-       }
 
 imm:
        '$' con
@@ -634,26 +627,30 @@ con:
                $$ = $2;
        }
 
-con2:
+textsize:
        LCONST
        {
-               $$ = ($1 & 0xffffffffLL) +
-                       ((vlong)ArgsSizeUnknown << 32);
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = ArgsSizeUnknown;
        }
 |      '-' LCONST
        {
-               $$ = (-$2 & 0xffffffffLL) +
-                       ((vlong)ArgsSizeUnknown << 32);
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = ArgsSizeUnknown;
        }
 |      LCONST '-' LCONST
        {
-               $$ = ($1 & 0xffffffffLL) +
-                       (($3 & 0xffffLL) << 32);
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = $3;
        }
 |      '-' LCONST '-' LCONST
        {
-               $$ = (-$2 & 0xffffffffLL) +
-                       (($4 & 0xffffLL) << 32);
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = $4;
        }
 
 expr:
index 70d4e1dfe27b872634599681ee047ee7ce0886b4..61855c443122f3fa71dee6c0cdd11515cc7e91b2 100644 (file)
@@ -411,14 +411,14 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   549
+#define YYLAST   531
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  56
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  41
+#define YYNNTS  40
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  134
+#define YYNRULES  133
 /* YYNRULES -- Number of states.  */
 #define YYNSTATES  271
 
@@ -435,8 +435,8 @@ 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,    54,    12,     5,     2,
-      52,    53,    10,     8,    51,     9,     2,    11,     2,     2,
+       2,     2,     2,     2,     2,     2,    52,    12,     5,     2,
+      53,    54,    10,     8,    51,     9,     2,    11,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    48,    49,
        6,    50,     7,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -473,16 +473,16 @@ static const yytype_uint16 yyprhs[] =
       23,    27,    31,    34,    37,    40,    43,    46,    49,    52,
       55,    58,    61,    64,    67,    70,    73,    76,    79,    82,
       85,    88,    89,    91,    95,    99,   102,   104,   107,   109,
-     112,   114,   118,   124,   128,   134,   137,   139,   141,   143,
-     147,   153,   157,   163,   166,   168,   172,   178,   184,   185,
-     187,   191,   197,   201,   205,   207,   209,   211,   213,   216,
-     219,   221,   223,   225,   227,   232,   235,   237,   239,   241,
-     243,   245,   247,   249,   252,   255,   258,   261,   264,   269,
-     275,   279,   281,   283,   285,   290,   295,   300,   307,   317,
-     327,   331,   335,   341,   350,   352,   359,   365,   373,   374,
-     377,   380,   382,   384,   386,   388,   390,   393,   396,   399,
-     403,   405,   408,   412,   417,   419,   423,   427,   431,   435,
-     439,   444,   449,   453,   457
+     112,   114,   118,   124,   129,   136,   139,   141,   143,   145,
+     149,   155,   159,   165,   168,   170,   174,   180,   186,   187,
+     189,   193,   199,   203,   207,   209,   211,   213,   215,   218,
+     221,   223,   225,   227,   229,   234,   237,   239,   241,   243,
+     245,   247,   249,   251,   254,   257,   260,   263,   268,   274,
+     278,   280,   282,   284,   289,   294,   299,   306,   316,   326,
+     330,   334,   340,   349,   351,   358,   364,   372,   373,   376,
+     379,   381,   383,   385,   387,   389,   392,   395,   398,   402,
+     404,   407,   411,   416,   418,   422,   426,   430,   434,   438,
+     443,   448,   452,   456
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -490,7 +490,7 @@ static const yytype_int8 yyrhs[] =
 {
       57,     0,    -1,    -1,    -1,    57,    58,    59,    -1,    -1,
       45,    48,    60,    59,    -1,    49,    -1,    61,    49,    -1,
-       1,    49,    -1,    45,    50,    96,    -1,    47,    50,    96,
+       1,    49,    -1,    45,    50,    95,    -1,    47,    50,    95,
       -1,    13,    62,    -1,    14,    66,    -1,    15,    65,    -1,
       16,    63,    -1,    17,    64,    -1,    21,    67,    -1,    19,
       68,    -1,    22,    69,    -1,    18,    70,    -1,    20,    71,
@@ -499,42 +499,41 @@ static const yytype_int8 yyrhs[] =
       78,    -1,    24,    79,    -1,    31,    80,    -1,    -1,    51,
       -1,    83,    51,    81,    -1,    81,    51,    83,    -1,    83,
       51,    -1,    83,    -1,    51,    81,    -1,    81,    -1,    51,
-      84,    -1,    84,    -1,    87,    51,    84,    -1,    91,    11,
-      94,    51,    87,    -1,    88,    51,    86,    -1,    88,    51,
-      94,    51,    86,    -1,    51,    82,    -1,    82,    -1,    62,
-      -1,    66,    -1,    83,    51,    81,    -1,    83,    51,    81,
-      48,    37,    -1,    83,    51,    81,    -1,    83,    51,    81,
-      48,    38,    -1,    83,    51,    -1,    83,    -1,    83,    51,
-      81,    -1,    85,    51,    81,    51,    94,    -1,    87,    51,
-      81,    51,    85,    -1,    -1,    87,    -1,    88,    51,    87,
-      -1,    88,    51,    94,    51,    87,    -1,    83,    51,    83,
-      -1,    83,    51,    83,    -1,    85,    -1,    88,    -1,    84,
-      -1,    90,    -1,    10,    85,    -1,    10,    89,    -1,    85,
-      -1,    89,    -1,    81,    -1,    87,    -1,    94,    52,    34,
-      53,    -1,    45,    92,    -1,    36,    -1,    39,    -1,    37,
-      -1,    40,    -1,    44,    -1,    38,    -1,    41,    -1,    54,
-      95,    -1,    54,    94,    -1,    54,    91,    -1,    54,    43,
-      -1,    54,    42,    -1,    54,    52,    42,    53,    -1,    54,
-      52,     9,    42,    53,    -1,    54,     9,    42,    -1,    89,
-      -1,    90,    -1,    94,    -1,    94,    52,    37,    53,    -1,
-      94,    52,    44,    53,    -1,    94,    52,    38,    53,    -1,
-      94,    52,    37,    10,    94,    53,    -1,    94,    52,    37,
-      53,    52,    37,    10,    94,    53,    -1,    94,    52,    37,
-      53,    52,    38,    10,    94,    53,    -1,    52,    37,    53,
-      -1,    52,    44,    53,    -1,    52,    37,    10,    94,    53,
-      -1,    52,    37,    53,    52,    37,    10,    94,    53,    -1,
-      91,    -1,    91,    52,    37,    10,    94,    53,    -1,    45,
-      92,    52,    93,    53,    -1,    45,     6,     7,    92,    52,
-      35,    53,    -1,    -1,     8,    94,    -1,     9,    94,    -1,
-      35,    -1,    44,    -1,    33,    -1,    32,    -1,    47,    -1,
-       9,    94,    -1,     8,    94,    -1,    55,    94,    -1,    52,
-      96,    53,    -1,    32,    -1,     9,    32,    -1,    32,     9,
-      32,    -1,     9,    32,     9,    32,    -1,    94,    -1,    96,
-       8,    96,    -1,    96,     9,    96,    -1,    96,    10,    96,
-      -1,    96,    11,    96,    -1,    96,    12,    96,    -1,    96,
-       6,     6,    96,    -1,    96,     7,     7,    96,    -1,    96,
-       5,    96,    -1,    96,     4,    96,    -1,    96,     3,    96,
-      -1
+      84,    -1,    84,    -1,    86,    51,    84,    -1,    90,    11,
+      93,    51,    86,    -1,    87,    51,    52,    94,    -1,    87,
+      51,    93,    51,    52,    94,    -1,    51,    82,    -1,    82,
+      -1,    62,    -1,    66,    -1,    83,    51,    81,    -1,    83,
+      51,    81,    48,    37,    -1,    83,    51,    81,    -1,    83,
+      51,    81,    48,    38,    -1,    83,    51,    -1,    83,    -1,
+      83,    51,    81,    -1,    85,    51,    81,    51,    93,    -1,
+      86,    51,    81,    51,    85,    -1,    -1,    86,    -1,    87,
+      51,    86,    -1,    87,    51,    93,    51,    86,    -1,    83,
+      51,    83,    -1,    83,    51,    83,    -1,    85,    -1,    87,
+      -1,    84,    -1,    89,    -1,    10,    85,    -1,    10,    88,
+      -1,    85,    -1,    88,    -1,    81,    -1,    86,    -1,    93,
+      53,    34,    54,    -1,    45,    91,    -1,    36,    -1,    39,
+      -1,    37,    -1,    40,    -1,    44,    -1,    38,    -1,    41,
+      -1,    52,    93,    -1,    52,    90,    -1,    52,    43,    -1,
+      52,    42,    -1,    52,    53,    42,    54,    -1,    52,    53,
+       9,    42,    54,    -1,    52,     9,    42,    -1,    88,    -1,
+      89,    -1,    93,    -1,    93,    53,    37,    54,    -1,    93,
+      53,    44,    54,    -1,    93,    53,    38,    54,    -1,    93,
+      53,    37,    10,    93,    54,    -1,    93,    53,    37,    54,
+      53,    37,    10,    93,    54,    -1,    93,    53,    37,    54,
+      53,    38,    10,    93,    54,    -1,    53,    37,    54,    -1,
+      53,    44,    54,    -1,    53,    37,    10,    93,    54,    -1,
+      53,    37,    54,    53,    37,    10,    93,    54,    -1,    90,
+      -1,    90,    53,    37,    10,    93,    54,    -1,    45,    91,
+      53,    92,    54,    -1,    45,     6,     7,    91,    53,    35,
+      54,    -1,    -1,     8,    93,    -1,     9,    93,    -1,    35,
+      -1,    44,    -1,    33,    -1,    32,    -1,    47,    -1,     9,
+      93,    -1,     8,    93,    -1,    55,    93,    -1,    53,    95,
+      54,    -1,    32,    -1,     9,    32,    -1,    32,     9,    32,
+      -1,     9,    32,     9,    32,    -1,    93,    -1,    95,     8,
+      95,    -1,    95,     9,    95,    -1,    95,    10,    95,    -1,
+      95,    11,    95,    -1,    95,    12,    95,    -1,    95,     6,
+       6,    95,    -1,    95,     7,     7,    95,    -1,    95,     5,
+      95,    -1,    95,     4,    95,    -1,    95,     3,    95,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -548,12 +547,12 @@ static const yytype_uint16 yyrline[] =
      230,   240,   245,   255,   260,   265,   272,   280,   290,   294,
      301,   306,   314,   323,   334,   335,   338,   339,   340,   344,
      348,   349,   352,   353,   356,   362,   373,   379,   385,   391,
-     397,   403,   409,   416,   424,   430,   440,   446,   452,   458,
-     464,   472,   473,   476,   482,   489,   496,   503,   512,   522,
-     532,   538,   544,   552,   563,   567,   576,   584,   594,   597,
-     601,   607,   608,   612,   615,   616,   620,   624,   628,   632,
-     638,   643,   648,   653,   660,   661,   665,   669,   673,   677,
-     681,   685,   689,   693,   697
+     397,   403,   409,   417,   423,   433,   439,   445,   451,   457,
+     465,   466,   469,   475,   482,   489,   496,   505,   515,   525,
+     531,   537,   545,   556,   560,   569,   577,   587,   590,   594,
+     600,   601,   605,   608,   609,   613,   617,   621,   625,   631,
+     637,   643,   649,   657,   658,   662,   666,   670,   674,   678,
+     682,   686,   690,   694
 };
 #endif
 
@@ -568,12 +567,12 @@ static const char *const yytname[] =
   "LTYPEPC", "LTYPES", "LTYPEM", "LTYPEI", "LTYPEXC", "LTYPEX", "LTYPERT",
   "LTYPEF", "LCONST", "LFP", "LPC", "LSB", "LBREG", "LLREG", "LSREG",
   "LFREG", "LMREG", "LXREG", "LFCONST", "LSCONST", "LSP", "LNAME", "LLAB",
-  "LVAR", "':'", "';'", "'='", "','", "'('", "')'", "'$'", "'~'",
+  "LVAR", "':'", "';'", "'='", "','", "'$'", "'('", "')'", "'~'",
   "$accept", "prog", "@1", "line", "@2", "inst", "nonnon", "rimrem",
   "remrim", "rimnon", "nonrem", "nonrel", "spec1", "spec2", "spec3",
   "spec4", "spec5", "spec6", "spec7", "spec8", "spec9", "spec10", "spec11",
-  "spec12", "spec13", "rem", "rom", "rim", "rel", "reg", "imm2", "imm",
-  "mem", "omem", "nmem", "nam", "offset", "pointer", "con", "con2", "expr", 0
+  "spec12", "spec13", "rem", "rom", "rim", "rel", "reg", "imm", "mem",
+  "omem", "nmem", "nam", "offset", "pointer", "con", "textsize", "expr", 0
 };
 #endif
 
@@ -587,7 +586,7 @@ 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,    58,    59,
-      61,    44,    40,    41,    36,   126
+      61,    44,    36,    40,    41,   126
 };
 # endif
 
@@ -602,12 +601,12 @@ static const yytype_uint8 yyr1[] =
       72,    73,    73,    74,    74,    74,    75,    76,    77,    77,
       78,    78,    79,    80,    81,    81,    82,    82,    82,    82,
       82,    82,    83,    83,    84,    84,    85,    85,    85,    85,
-      85,    85,    85,    86,    87,    87,    87,    87,    87,    87,
-      87,    88,    88,    89,    89,    89,    89,    89,    89,    89,
-      89,    89,    89,    89,    90,    90,    91,    91,    92,    92,
-      92,    93,    93,    93,    94,    94,    94,    94,    94,    94,
-      95,    95,    95,    95,    96,    96,    96,    96,    96,    96,
-      96,    96,    96,    96,    96
+      85,    85,    85,    86,    86,    86,    86,    86,    86,    86,
+      87,    87,    88,    88,    88,    88,    88,    88,    88,    88,
+      88,    88,    88,    89,    89,    90,    90,    91,    91,    91,
+      92,    92,    92,    93,    93,    93,    93,    93,    93,    94,
+      94,    94,    94,    95,    95,    95,    95,    95,    95,    95,
+      95,    95,    95,    95
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -617,16 +616,16 @@ static const yytype_uint8 yyr2[] =
        3,     3,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     0,     1,     3,     3,     2,     1,     2,     1,     2,
-       1,     3,     5,     3,     5,     2,     1,     1,     1,     3,
+       1,     3,     5,     4,     6,     2,     1,     1,     1,     3,
        5,     3,     5,     2,     1,     3,     5,     5,     0,     1,
        3,     5,     3,     3,     1,     1,     1,     1,     2,     2,
        1,     1,     1,     1,     4,     2,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     2,     2,     4,     5,
-       3,     1,     1,     1,     4,     4,     4,     6,     9,     9,
-       3,     3,     5,     8,     1,     6,     5,     7,     0,     2,
-       2,     1,     1,     1,     1,     1,     2,     2,     2,     3,
-       1,     2,     3,     4,     1,     3,     3,     3,     3,     3,
-       4,     4,     3,     3,     3
+       1,     1,     1,     2,     2,     2,     2,     4,     5,     3,
+       1,     1,     1,     4,     4,     4,     6,     9,     9,     3,
+       3,     5,     8,     1,     6,     5,     7,     0,     2,     2,
+       1,     1,     1,     1,     1,     2,     2,     2,     3,     1,
+       2,     3,     4,     1,     3,     3,     3,     3,     3,     4,
+       4,     3,     3,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -637,31 +636,31 @@ static const yytype_uint8 yydefact[] =
        2,     3,     1,     0,     0,    31,     0,     0,     0,     0,
        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    58,     0,     0,     0,     7,     4,     0,     9,
-      32,    12,     0,     0,   114,    76,    78,    81,    77,    79,
-      82,    80,   108,   115,     0,     0,     0,    13,    38,    64,
-      65,    91,    92,   104,    93,     0,    14,    72,    36,    73,
-      15,     0,    16,     0,     0,   108,     0,    20,    46,    66,
-      70,    71,    67,    93,    18,     0,    32,    47,    48,    21,
-     108,     0,     0,    17,    40,     0,     0,    19,     0,    28,
+      32,    12,     0,     0,   113,    76,    78,    81,    77,    79,
+      82,    80,   107,   114,     0,     0,     0,    13,    38,    64,
+      65,    90,    91,   103,    92,     0,    14,    72,    36,    73,
+      15,     0,    16,     0,     0,   107,     0,    20,    46,    66,
+      70,    71,    67,    92,    18,     0,    32,    47,    48,    21,
+     107,     0,     0,    17,    40,     0,     0,    19,     0,    28,
        0,    29,     0,    22,     0,    23,     0,    24,    54,    25,
        0,    26,     0,    27,    59,    30,     0,     5,     0,     0,
-       8,   117,   116,     0,     0,     0,     0,    37,     0,     0,
-     124,     0,   118,     0,     0,     0,    87,    86,     0,    85,
-      84,    35,     0,     0,    68,    69,    75,    45,     0,     0,
+       8,   116,   115,     0,     0,     0,     0,    37,     0,     0,
+     123,     0,   117,     0,     0,     0,    86,    85,     0,    84,
+      83,    35,     0,     0,    68,    69,    75,    45,     0,     0,
       75,    39,     0,     0,     0,     0,     0,     0,     0,    53,
-       0,     0,     0,     0,    10,    11,   108,   109,   110,     0,
-       0,   100,   101,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   119,     0,     0,     0,     0,    90,     0,
-       0,    33,    34,     0,     0,    41,     0,    43,     0,    60,
-       0,    62,    49,    51,    55,     0,     0,    63,     6,     0,
-     113,   111,   112,     0,     0,     0,   134,   133,   132,     0,
-       0,   125,   126,   127,   128,   129,     0,     0,    94,    96,
-      95,     0,    88,    74,     0,     0,   120,    83,     0,     0,
-       0,     0,     0,     0,     0,   106,   102,     0,   130,   131,
-       0,     0,     0,    89,    42,   121,     0,    44,    61,    50,
-      52,    56,    57,     0,     0,   105,    97,     0,     0,     0,
-     122,   107,     0,     0,     0,   123,   103,     0,     0,    98,
-      99
+       0,     0,     0,     0,    10,    11,   107,   108,   109,     0,
+       0,    99,   100,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   118,     0,     0,     0,     0,    89,     0,
+       0,    33,    34,     0,     0,    41,     0,     0,    60,     0,
+      62,    49,    51,    55,     0,     0,    63,     6,     0,   112,
+     110,   111,     0,     0,     0,   133,   132,   131,     0,     0,
+     124,   125,   126,   127,   128,     0,     0,    93,    95,    94,
+       0,    87,    74,     0,     0,   119,    43,     0,     0,     0,
+       0,     0,     0,     0,   105,   101,     0,   129,   130,     0,
+       0,     0,    88,    42,   120,     0,     0,    61,    50,    52,
+      56,    57,     0,     0,   104,    96,     0,     0,     0,   121,
+      44,   106,     0,     0,     0,   122,   102,     0,     0,    97,
+      98
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -670,8 +669,7 @@ static const yytype_int16 yydefgoto[] =
       -1,     1,     3,    27,   153,    28,    31,    60,    62,    56,
       47,    83,    74,    87,    67,    79,    93,    95,    97,    99,
      101,   103,    89,    91,   105,    57,    68,    58,    69,    49,
-     187,    59,    50,    51,    52,    53,   116,   203,    54,   227,
-     121
+      59,    50,    51,    52,    53,   116,   202,    54,   226,   121
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -679,44 +677,43 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -89
 static const yytype_int16 yypact[] =
 {
-     -89,    18,   -89,   163,    -5,   -13,   219,   253,   253,   335,
-     194,    16,   274,   369,   418,   418,   253,   253,   253,   253,
-     240,     0,     0,   253,   -17,    19,   -89,   -89,    24,   -89,
-     -89,   -89,   479,   479,   -89,   -89,   -89,   -89,   -89,   -89,
-     -89,   -89,   111,   -89,   335,   397,   479,   -89,   -89,   -89,
-     -89,   -89,   -89,    33,    51,   390,   -89,   -89,    65,   -89,
-     -89,    72,   -89,    73,   356,   111,   314,   -89,   -89,   -89,
-     -89,   -89,   -89,    74,   -89,    30,   335,   -89,   -89,   -89,
-      70,   422,   479,   -89,   -89,    82,    86,   -89,    88,   -89,
-      89,   -89,    90,   -89,    91,   -89,    92,   -89,   101,   -89,
-     105,   -89,   114,   -89,   -89,   -89,   116,   -89,   479,   479,
-     -89,   -89,   -89,   118,   479,   479,   120,   -89,     5,   115,
-     -89,    83,   -89,   133,   -12,   404,   -89,   -89,   439,   -89,
-     -89,   -89,   335,   253,   -89,   -89,   120,   -89,     9,   479,
-     -89,   -89,   422,   141,   119,   452,   253,   335,   335,   335,
-     335,   335,   253,   163,   327,   327,    70,   -89,   -89,     4,
-     479,   143,   -89,   479,   479,   479,   190,   191,   479,   479,
-     479,   479,   479,   -89,   187,     6,   148,   152,   -89,   470,
-     156,   -89,   -89,   158,   162,   -89,     8,   -89,   164,   -89,
-     166,   -89,   170,   171,   -89,   169,   172,   -89,   -89,   173,
-     -89,   -89,   -89,   161,   176,   199,   102,   530,   537,   479,
-     479,    39,    39,   -89,   -89,   -89,   479,   479,   185,   -89,
-     -89,   189,   -89,   -89,     0,   208,   234,   -89,   193,     0,
-     211,   212,   479,   240,   217,   -89,   -89,   255,    55,    55,
-     214,   215,    59,   -89,   -89,   260,   241,   -89,   -89,   -89,
-     -89,   -89,   -89,   222,   479,   -89,   -89,   262,   276,   256,
-     -89,   -89,   242,   479,   479,   -89,   -89,   243,   246,   -89,
+     -89,    16,   -89,   163,     0,   -13,   219,   241,   241,   317,
+     193,    13,   267,   333,   164,   164,   241,   241,   241,   241,
+     472,    17,    17,   241,   -17,    23,   -89,   -89,    52,   -89,
+     -89,   -89,   433,   433,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,    45,   -89,   317,   358,   433,   -89,   -89,   -89,
+     -89,   -89,   -89,    50,    63,   351,   -89,   -89,    68,   -89,
+     -89,    71,   -89,    73,    70,    45,   292,   -89,   -89,   -89,
+     -89,   -89,   -89,    80,   -89,   117,   317,   -89,   -89,   -89,
+      38,   365,   433,   -89,   -89,    87,    86,   -89,    89,   -89,
+      90,   -89,    91,   -89,    92,   -89,   100,   -89,   101,   -89,
+     105,   -89,   114,   -89,   -89,   -89,   115,   -89,   433,   433,
+     -89,   -89,   -89,   160,   433,   433,   118,   -89,     5,   116,
+     -89,    82,   -89,   131,   -12,   383,   -89,   -89,   392,   -89,
+     -89,   -89,   317,   241,   -89,   -89,   118,   -89,     6,   433,
+     -89,   -89,   365,   140,   399,   408,   241,   317,   317,   317,
+     317,   317,   241,   163,   486,   486,    38,   -89,   -89,     4,
+     433,   122,   -89,   433,   433,   433,   189,   190,   433,   433,
+     433,   433,   433,   -89,   194,     7,   146,   153,   -89,   424,
+     159,   -89,   -89,   162,   167,   -89,     9,   171,   -89,   173,
+     -89,   166,   178,   -89,   184,   185,   -89,   -89,   186,   -89,
+     -89,   -89,   187,   188,   208,   495,   512,   519,   433,   433,
+      85,    85,   -89,   -89,   -89,   433,   433,   199,   -89,   -89,
+     207,   -89,   -89,    17,   215,   253,   -89,   213,    17,   230,
+     231,   433,   472,   233,   -89,   -89,   261,    55,    55,   229,
+     235,    75,   -89,   -89,   275,   255,     9,   -89,   -89,   -89,
+     -89,   -89,   236,   433,   -89,   -89,   281,   282,   263,   -89,
+     -89,   -89,   243,   433,   433,   -89,   -89,   244,   256,   -89,
      -89
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -89,   -89,   -89,   134,   -89,   -89,   289,   -89,   -89,   -89,
-     290,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
-     -89,   -89,   -89,   -89,   -89,    -2,   237,    11,   -11,    -9,
-      76,    -8,    87,    -4,     2,    -3,   -56,   -89,   -10,   -89,
-     -88
+     -89,   -89,   -89,   156,   -89,   -89,   301,   -89,   -89,   -89,
+     303,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,   -89,   -89,   -89,    -2,   250,    11,   -11,    -9,
+      -8,   112,    -4,     2,    -3,   -56,   -89,   -10,    77,   -88
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -727,119 +724,117 @@ static const yytype_int16 yypgoto[] =
 static const yytype_uint16 yytable[] =
 {
       73,    70,    84,    86,    48,    85,    71,    63,    75,   136,
-      48,   100,    72,   102,   104,   160,   217,   225,     2,    61,
+      48,   100,    72,   102,   104,   160,     2,   216,   224,    61,
      154,   155,   111,   112,   140,   175,   176,    92,    94,    96,
-      98,   107,   177,   108,   106,   120,   122,   200,    30,   201,
-     226,   139,   117,   183,    29,   130,   175,   176,   202,   170,
-     171,   172,   129,   177,    55,   134,    73,    70,   161,   218,
-     135,    42,    71,   168,   169,   170,   171,   172,    72,   109,
-     141,    86,   120,   110,   117,   206,   207,   208,   114,   115,
-     211,   212,   213,   214,   215,   123,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   257,   258,   120,   120,
-     199,    88,    90,   124,   157,   158,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   112,   131,   113,   120,   114,
-     115,   238,   239,   132,   133,   156,   138,    32,    33,   184,
-     181,   185,    86,   142,   188,   190,   173,   189,   143,   144,
-     145,   146,   147,   148,   182,   192,   193,   194,   195,   196,
-     204,    34,   149,   120,   120,   120,   150,   191,   120,   120,
-     120,   120,   120,   197,     4,   151,    43,   152,   162,   112,
-     174,    82,   159,   186,    46,   183,     5,     6,     7,     8,
+      98,   107,   177,   108,   106,   120,   122,   199,    30,   200,
+     183,   225,   117,   175,   176,   130,   114,   115,   201,    29,
+     177,   113,   129,   114,   115,   134,    73,    70,    42,   161,
+     135,   217,    71,   168,   169,   170,   171,   172,    72,    55,
+     141,    86,   120,   109,   117,   205,   206,   207,    32,    33,
+     210,   211,   212,   213,   214,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   170,   171,   172,   120,   120,
+     198,   110,    34,   123,   157,   158,    35,    36,    37,    38,
+      39,    40,   256,   257,    41,   112,   124,    43,   120,   131,
+     237,   238,   132,    45,   133,    46,    88,    90,   139,   184,
+     181,   185,    86,   138,   187,   189,   173,   188,   142,   143,
+     144,   145,   146,   147,   182,   191,   192,   193,   194,   195,
+     203,   148,   149,   120,   120,   120,   150,   190,   120,   120,
+     120,   120,   120,   196,     4,   151,   152,   156,   174,   112,
+     162,   159,    32,    33,   183,   204,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,   205,   209,   216,   210,   120,
-     120,   219,    32,    33,    64,   220,   240,   241,    24,   222,
-      25,   223,    26,   224,   235,   228,   244,   229,   230,   231,
-     232,   248,   251,   233,   252,   234,    34,    32,    33,   236,
-      35,    36,    37,    38,    39,    40,   237,   242,    41,    65,
-     245,    43,   243,   246,   262,    66,    45,   186,   249,    46,
-     250,    34,   253,   267,   268,    35,    36,    37,    38,    39,
-      40,    32,    33,    41,    42,   254,    43,   255,   256,   259,
-      44,    45,   263,   260,    46,   261,    35,    36,    37,    38,
-      39,    40,    32,    33,    41,    34,   264,   198,   265,    35,
-      36,    37,    38,    39,    40,   266,   269,    41,    42,   270,
-      43,    77,    78,   137,   247,    45,    34,    55,    46,     0,
-      35,    36,    37,    38,    39,    40,     0,     0,    41,    42,
-       0,    43,    32,    33,    64,    76,    45,     0,     0,    46,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-       0,     0,     0,    32,    33,     0,    34,     0,     0,     0,
-      35,    36,    37,    38,    39,    40,     0,     0,    41,    65,
-       0,    43,     0,     0,    32,    33,    45,    34,     0,    46,
-       0,    35,    36,    37,    38,    39,    40,    32,    33,    41,
-      42,     0,    43,     0,     0,     0,     0,    45,    34,     0,
-      46,     0,    35,    36,    37,    38,    39,    40,    32,   125,
-      41,    34,     0,    43,     0,    32,    33,     0,    45,     0,
-       0,    46,    32,    33,    80,     0,    43,     0,     0,     0,
-      81,    82,    34,    55,    46,     0,    32,    33,     0,    34,
-      32,    33,   126,   127,   118,    42,    34,    43,     0,     0,
-       0,   119,   128,     0,    43,    46,   178,    32,   179,    82,
-      34,    43,    46,     0,    34,     0,    82,     0,     0,    46,
-      32,    33,     0,    42,     0,    43,     0,    80,     0,    43,
-      45,    34,     0,    46,    82,     0,     0,    46,    32,    33,
-       0,   180,     0,     0,    34,     0,    43,    32,    33,     0,
-       0,    82,     0,     0,    46,     0,     0,     0,     0,    43,
-       0,     0,    34,     0,    82,     0,    55,    46,     0,     0,
-       0,    34,   221,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,    82,     0,     0,    46,    43,     0,     0,     0,
-       0,    82,     0,     0,    46,   165,   166,   167,   168,   169,
-     170,   171,   172,   166,   167,   168,   169,   170,   171,   172
+      19,    20,    21,    22,    23,   208,    34,   209,   120,   120,
+     218,    32,    33,    64,   215,   239,   240,   219,    24,    42,
+      25,    43,    26,   221,   229,   243,   222,    45,   223,    46,
+     247,   250,   227,   251,   228,    34,   230,    32,    33,    35,
+      36,    37,    38,    39,    40,   231,   232,    41,    65,   233,
+      43,   234,   235,   262,    66,   236,    45,   244,    46,    32,
+      33,    34,   241,   267,   268,    35,    36,    37,    38,    39,
+      40,   242,   245,    41,    42,   246,    43,   248,   252,   249,
+      44,   253,    45,    34,    46,    32,    33,    35,    36,    37,
+      38,    39,    40,   254,   258,    41,    42,   259,    43,   255,
+     261,   263,   264,    55,    45,   265,    46,   266,   269,    34,
+      32,    33,    64,    35,    36,    37,    38,    39,    40,   197,
+     270,    41,    42,    77,    43,    78,   137,     0,    76,     0,
+      45,     0,    46,   260,    34,    32,    33,     0,    35,    36,
+      37,    38,    39,    40,     0,     0,    41,    65,     0,    43,
+       0,    32,    33,     0,     0,    45,     0,    46,     0,    34,
+       0,     0,     0,    35,    36,    37,    38,    39,    40,    32,
+     125,    41,    42,     0,    43,    34,    32,    33,     0,     0,
+      45,     0,    46,    32,    33,     0,     0,     0,    80,     0,
+      43,     0,     0,    34,    81,    55,    82,     0,    46,     0,
+      34,    32,    33,   126,   127,   118,    42,    34,    43,     0,
+      32,   179,   119,     0,   128,    43,    46,    32,    33,     0,
+      80,    82,    43,    46,     0,    34,    32,    33,    82,     0,
+      46,     0,     0,     0,    34,   178,     0,     0,     0,     0,
+      43,    34,    32,    33,   180,     0,    82,     0,    46,    43,
+      34,    32,    33,     0,     0,    82,    43,    46,     0,     0,
+       0,   186,    82,     0,    46,    43,    34,     0,     0,     0,
+      55,    82,     0,    46,     0,    34,   220,     0,     0,     0,
+       0,    43,     0,     0,     0,     0,     0,    82,     0,    46,
+      43,     0,     0,     0,     0,     0,    82,     0,    46,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,    35,    36,
+      37,    38,    39,    40,     0,     0,    41,   165,   166,   167,
+     168,   169,   170,   171,   172,   166,   167,   168,   169,   170,
+     171,   172
 };
 
 static const yytype_int16 yycheck[] =
 {
       10,    10,    13,    13,     6,    13,    10,     9,    11,    65,
-      12,    20,    10,    21,    22,    10,    10,     9,     0,     8,
+      12,    20,    10,    21,    22,    10,     0,    10,     9,     8,
      108,   109,    32,    33,    80,    37,    38,    16,    17,    18,
       19,    48,    44,    50,    23,    45,    46,    33,    51,    35,
-      32,    11,    44,    34,    49,    55,    37,    38,    44,    10,
-      11,    12,    55,    44,    54,    64,    66,    66,    53,    53,
-      64,    45,    66,     8,     9,    10,    11,    12,    66,    50,
-      81,    81,    82,    49,    76,   163,   164,   165,     8,     9,
-     168,   169,   170,   171,   172,    52,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    37,    38,   108,   109,
-     156,    14,    15,    52,   114,   115,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,   125,    51,     6,   128,     8,
-       9,   209,   210,    51,    51,     7,    52,     8,     9,   139,
-     132,   142,   142,    51,   144,   145,    53,   145,    52,    51,
+      34,    32,    44,    37,    38,    55,     8,     9,    44,    49,
+      44,     6,    55,     8,     9,    64,    66,    66,    45,    54,
+      64,    54,    66,     8,     9,    10,    11,    12,    66,    52,
+      81,    81,    82,    50,    76,   163,   164,   165,     8,     9,
+     168,   169,   170,   171,   172,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    10,    11,    12,   108,   109,
+     156,    49,    32,    53,   114,   115,    36,    37,    38,    39,
+      40,    41,    37,    38,    44,   125,    53,    47,   128,    51,
+     208,   209,    51,    53,    51,    55,    14,    15,    11,   139,
+     132,   142,   142,    53,   144,   145,    54,   145,    51,    53,
       51,    51,    51,    51,   133,   147,   148,   149,   150,   151,
-     160,    32,    51,   163,   164,   165,    51,   146,   168,   169,
-     170,   171,   172,   152,     1,    51,    47,    51,    53,   179,
-      37,    52,    52,    54,    55,    34,    13,    14,    15,    16,
+     160,    51,    51,   163,   164,   165,    51,   146,   168,   169,
+     170,   171,   172,   152,     1,    51,    51,     7,    37,   179,
+      54,    53,     8,     9,    34,    53,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    52,     6,    10,     7,   209,
-     210,    53,     8,     9,    10,    53,   216,   217,    45,    53,
-      47,    53,    49,    51,    53,    51,   224,    51,    48,    48,
-      51,   229,   232,    51,   233,    52,    32,     8,     9,    53,
-      36,    37,    38,    39,    40,    41,    37,    52,    44,    45,
-      32,    47,    53,     9,   254,    51,    52,    54,    37,    55,
-      38,    32,    35,   263,   264,    36,    37,    38,    39,    40,
-      41,     8,     9,    44,    45,    10,    47,    53,    53,     9,
-      51,    52,    10,    32,    55,    53,    36,    37,    38,    39,
-      40,    41,     8,     9,    44,    32,    10,   153,    32,    36,
-      37,    38,    39,    40,    41,    53,    53,    44,    45,    53,
-      47,    12,    12,    66,   228,    52,    32,    54,    55,    -1,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    44,    45,
-      -1,    47,     8,     9,    10,    51,    52,    -1,    -1,    55,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      -1,    -1,    -1,     8,     9,    -1,    32,    -1,    -1,    -1,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    44,    45,
-      -1,    47,    -1,    -1,     8,     9,    52,    32,    -1,    55,
-      -1,    36,    37,    38,    39,    40,    41,     8,     9,    44,
-      45,    -1,    47,    -1,    -1,    -1,    -1,    52,    32,    -1,
-      55,    -1,    36,    37,    38,    39,    40,    41,     8,     9,
-      44,    32,    -1,    47,    -1,     8,     9,    -1,    52,    -1,
-      -1,    55,     8,     9,    45,    -1,    47,    -1,    -1,    -1,
-      51,    52,    32,    54,    55,    -1,     8,     9,    -1,    32,
-       8,     9,    42,    43,    37,    45,    32,    47,    -1,    -1,
-      -1,    44,    52,    -1,    47,    55,    42,     8,     9,    52,
-      32,    47,    55,    -1,    32,    -1,    52,    -1,    -1,    55,
-       8,     9,    -1,    45,    -1,    47,    -1,    45,    -1,    47,
-      52,    32,    -1,    55,    52,    -1,    -1,    55,     8,     9,
-      -1,    42,    -1,    -1,    32,    -1,    47,     8,     9,    -1,
-      -1,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    47,
-      -1,    -1,    32,    -1,    52,    -1,    54,    55,    -1,    -1,
-      -1,    32,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,
-      -1,    -1,    52,    -1,    -1,    55,    47,    -1,    -1,    -1,
-      -1,    52,    -1,    -1,    55,     5,     6,     7,     8,     9,
-      10,    11,    12,     6,     7,     8,     9,    10,    11,    12
+      27,    28,    29,    30,    31,     6,    32,     7,   208,   209,
+      54,     8,     9,    10,    10,   215,   216,    54,    45,    45,
+      47,    47,    49,    54,    48,   223,    54,    53,    51,    55,
+     228,   231,    51,   232,    51,    32,    48,     8,     9,    36,
+      37,    38,    39,    40,    41,    51,    51,    44,    45,    53,
+      47,    54,    54,   253,    51,    37,    53,    32,    55,     8,
+       9,    32,    53,   263,   264,    36,    37,    38,    39,    40,
+      41,    54,     9,    44,    45,    52,    47,    37,    35,    38,
+      51,    10,    53,    32,    55,     8,     9,    36,    37,    38,
+      39,    40,    41,    54,     9,    44,    45,    32,    47,    54,
+      54,    10,    10,    52,    53,    32,    55,    54,    54,    32,
+       8,     9,    10,    36,    37,    38,    39,    40,    41,   153,
+      54,    44,    45,    12,    47,    12,    66,    -1,    51,    -1,
+      53,    -1,    55,   246,    32,     8,     9,    -1,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    44,    45,    -1,    47,
+      -1,     8,     9,    -1,    -1,    53,    -1,    55,    -1,    32,
+      -1,    -1,    -1,    36,    37,    38,    39,    40,    41,     8,
+       9,    44,    45,    -1,    47,    32,     8,     9,    -1,    -1,
+      53,    -1,    55,     8,     9,    -1,    -1,    -1,    45,    -1,
+      47,    -1,    -1,    32,    51,    52,    53,    -1,    55,    -1,
+      32,     8,     9,    42,    43,    37,    45,    32,    47,    -1,
+       8,     9,    44,    -1,    53,    47,    55,     8,     9,    -1,
+      45,    53,    47,    55,    -1,    32,     8,     9,    53,    -1,
+      55,    -1,    -1,    -1,    32,    42,    -1,    -1,    -1,    -1,
+      47,    32,     8,     9,    42,    -1,    53,    -1,    55,    47,
+      32,     8,     9,    -1,    -1,    53,    47,    55,    -1,    -1,
+      -1,    52,    53,    -1,    55,    47,    32,    -1,    -1,    -1,
+      52,    53,    -1,    55,    -1,    32,    42,    -1,    -1,    -1,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,
+      47,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    44,     5,     6,     7,
+       8,     9,    10,    11,    12,     6,     7,     8,     9,    10,
+      11,    12
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -850,30 +845,30 @@ static const yytype_uint8 yystos[] =
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    45,    47,    49,    59,    61,    49,
       51,    62,     8,     9,    32,    36,    37,    38,    39,    40,
-      41,    44,    45,    47,    51,    52,    55,    66,    81,    85,
-      88,    89,    90,    91,    94,    54,    65,    81,    83,    87,
+      41,    44,    45,    47,    51,    53,    55,    66,    81,    85,
+      87,    88,    89,    90,    93,    52,    65,    81,    83,    86,
       63,    83,    64,    81,    10,    45,    51,    70,    82,    84,
-      85,    89,    90,    94,    68,    91,    51,    62,    66,    71,
-      45,    51,    52,    67,    84,    87,    94,    69,    88,    78,
-      88,    79,    83,    72,    83,    73,    83,    74,    83,    75,
-      85,    76,    87,    77,    87,    80,    83,    48,    50,    50,
-      49,    94,    94,     6,     8,     9,    92,    81,    37,    44,
-      94,    96,    94,    52,    52,     9,    42,    43,    52,    91,
-      94,    51,    51,    51,    85,    89,    92,    82,    52,    11,
-      92,    84,    51,    52,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    60,    96,    96,     7,    94,    94,    52,
-      10,    53,    53,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    53,    37,    37,    38,    44,    42,     9,
-      42,    81,    83,    34,    94,    84,    54,    86,    94,    87,
-      94,    83,    81,    81,    81,    81,    81,    83,    59,    92,
-      33,    35,    44,    93,    94,    52,    96,    96,    96,     6,
-       7,    96,    96,    96,    96,    96,    10,    10,    53,    53,
-      53,    42,    53,    53,    51,     9,    32,    95,    51,    51,
-      48,    48,    51,    51,    52,    53,    53,    37,    96,    96,
-      94,    94,    52,    53,    87,    32,     9,    86,    87,    37,
-      38,    94,    85,    35,    10,    53,    53,    37,    38,     9,
-      32,    53,    94,    10,    10,    32,    53,    94,    94,    53,
-      53
+      85,    88,    89,    93,    68,    90,    51,    62,    66,    71,
+      45,    51,    53,    67,    84,    86,    93,    69,    87,    78,
+      87,    79,    83,    72,    83,    73,    83,    74,    83,    75,
+      85,    76,    86,    77,    86,    80,    83,    48,    50,    50,
+      49,    93,    93,     6,     8,     9,    91,    81,    37,    44,
+      93,    95,    93,    53,    53,     9,    42,    43,    53,    90,
+      93,    51,    51,    51,    85,    88,    91,    82,    53,    11,
+      91,    84,    51,    53,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    60,    95,    95,     7,    93,    93,    53,
+      10,    54,    54,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    54,    37,    37,    38,    44,    42,     9,
+      42,    81,    83,    34,    93,    84,    52,    93,    86,    93,
+      83,    81,    81,    81,    81,    81,    83,    59,    91,    33,
+      35,    44,    92,    93,    53,    95,    95,    95,     6,     7,
+      95,    95,    95,    95,    95,    10,    10,    54,    54,    54,
+      42,    54,    54,    51,     9,    32,    94,    51,    51,    48,
+      48,    51,    51,    53,    54,    54,    37,    95,    95,    93,
+      93,    53,    54,    86,    32,     9,    52,    86,    37,    38,
+      93,    85,    35,    10,    54,    54,    37,    38,     9,    32,
+      94,    54,    93,    10,    10,    32,    54,    93,    93,    54,
+      54
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1917,19 +1912,19 @@ yyreduce:
   case 43:
 #line 195 "a.y"
     {
-               settext((yyvsp[(1) - (3)].addr).sym);
-               (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
-               (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
+               settext((yyvsp[(1) - (4)].addr).sym);
+               (yyval.addr2).from = (yyvsp[(1) - (4)].addr);
+               (yyval.addr2).to = (yyvsp[(4) - (4)].addr);
        }
     break;
 
   case 44:
 #line 201 "a.y"
     {
-               settext((yyvsp[(1) - (5)].addr).sym);
-               (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
-               (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval);
-               (yyval.addr2).to = (yyvsp[(5) - (5)].addr);
+               settext((yyvsp[(1) - (6)].addr).sym);
+               (yyval.addr2).from = (yyvsp[(1) - (6)].addr);
+               (yyval.addr2).from.scale = (yyvsp[(3) - (6)].lval);
+               (yyval.addr2).to = (yyvsp[(6) - (6)].addr);
        }
     break;
 
@@ -2185,7 +2180,7 @@ yyreduce:
     break;
 
   case 83:
-#line 417 "a.y"
+#line 418 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_CONST;
@@ -2194,16 +2189,7 @@ yyreduce:
     break;
 
   case 84:
-#line 425 "a.y"
-    {
-               (yyval.addr) = nullgen;
-               (yyval.addr).type = TYPE_CONST;
-               (yyval.addr).offset = (yyvsp[(2) - (2)].lval);
-       }
-    break;
-
-  case 85:
-#line 431 "a.y"
+#line 424 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
                (yyval.addr).type = TYPE_ADDR;
@@ -2215,8 +2201,8 @@ yyreduce:
        }
     break;
 
-  case 86:
-#line 441 "a.y"
+  case 85:
+#line 434 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SCONST;
@@ -2224,8 +2210,8 @@ yyreduce:
        }
     break;
 
-  case 87:
-#line 447 "a.y"
+  case 86:
+#line 440 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2233,8 +2219,8 @@ yyreduce:
        }
     break;
 
-  case 88:
-#line 453 "a.y"
+  case 87:
+#line 446 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2242,8 +2228,8 @@ yyreduce:
        }
     break;
 
-  case 89:
-#line 459 "a.y"
+  case 88:
+#line 452 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2251,8 +2237,8 @@ yyreduce:
        }
     break;
 
-  case 90:
-#line 465 "a.y"
+  case 89:
+#line 458 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2260,8 +2246,8 @@ yyreduce:
        }
     break;
 
-  case 93:
-#line 477 "a.y"
+  case 92:
+#line 470 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2269,8 +2255,8 @@ yyreduce:
        }
     break;
 
-  case 94:
-#line 483 "a.y"
+  case 93:
+#line 476 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2279,8 +2265,8 @@ yyreduce:
        }
     break;
 
-  case 95:
-#line 490 "a.y"
+  case 94:
+#line 483 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2289,8 +2275,8 @@ yyreduce:
        }
     break;
 
-  case 96:
-#line 497 "a.y"
+  case 95:
+#line 490 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2299,8 +2285,8 @@ yyreduce:
        }
     break;
 
-  case 97:
-#line 504 "a.y"
+  case 96:
+#line 497 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2311,8 +2297,8 @@ yyreduce:
        }
     break;
 
-  case 98:
-#line 513 "a.y"
+  case 97:
+#line 506 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2324,8 +2310,8 @@ yyreduce:
        }
     break;
 
-  case 99:
-#line 523 "a.y"
+  case 98:
+#line 516 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2337,8 +2323,8 @@ yyreduce:
        }
     break;
 
-  case 100:
-#line 533 "a.y"
+  case 99:
+#line 526 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2346,8 +2332,8 @@ yyreduce:
        }
     break;
 
-  case 101:
-#line 539 "a.y"
+  case 100:
+#line 532 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2355,8 +2341,8 @@ yyreduce:
        }
     break;
 
-  case 102:
-#line 545 "a.y"
+  case 101:
+#line 538 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2366,8 +2352,8 @@ yyreduce:
        }
     break;
 
-  case 103:
-#line 553 "a.y"
+  case 102:
+#line 546 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2378,15 +2364,15 @@ yyreduce:
        }
     break;
 
-  case 104:
-#line 564 "a.y"
+  case 103:
+#line 557 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (1)].addr);
        }
     break;
 
-  case 105:
-#line 568 "a.y"
+  case 104:
+#line 561 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (6)].addr);
                (yyval.addr).index = (yyvsp[(3) - (6)].lval);
@@ -2395,8 +2381,8 @@ yyreduce:
        }
     break;
 
-  case 106:
-#line 577 "a.y"
+  case 105:
+#line 570 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2406,8 +2392,8 @@ yyreduce:
        }
     break;
 
-  case 107:
-#line 585 "a.y"
+  case 106:
+#line 578 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2417,166 +2403,170 @@ yyreduce:
        }
     break;
 
-  case 108:
-#line 594 "a.y"
+  case 107:
+#line 587 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 109:
-#line 598 "a.y"
+  case 108:
+#line 591 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 110:
-#line 602 "a.y"
+  case 109:
+#line 595 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 112:
-#line 609 "a.y"
+  case 111:
+#line 602 "a.y"
     {
                (yyval.lval) = NAME_AUTO;
        }
     break;
 
-  case 115:
-#line 617 "a.y"
+  case 114:
+#line 610 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
     break;
 
-  case 116:
-#line 621 "a.y"
+  case 115:
+#line 614 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 117:
-#line 625 "a.y"
+  case 116:
+#line 618 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 118:
-#line 629 "a.y"
+  case 117:
+#line 622 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 119:
-#line 633 "a.y"
+  case 118:
+#line 626 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
     break;
 
-  case 120:
-#line 639 "a.y"
+  case 119:
+#line 632 "a.y"
     {
-               (yyval.lval) = ((yyvsp[(1) - (1)].lval) & 0xffffffffLL) +
-                       ((vlong)ArgsSizeUnknown << 32);
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (1)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
        }
     break;
 
-  case 121:
-#line 644 "a.y"
+  case 120:
+#line 638 "a.y"
     {
-               (yyval.lval) = (-(yyvsp[(2) - (2)].lval) & 0xffffffffLL) +
-                       ((vlong)ArgsSizeUnknown << 32);
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (2)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
        }
     break;
 
-  case 122:
-#line 649 "a.y"
+  case 121:
+#line 644 "a.y"
     {
-               (yyval.lval) = ((yyvsp[(1) - (3)].lval) & 0xffffffffLL) +
-                       (((yyvsp[(3) - (3)].lval) & 0xffffLL) << 32);
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (3)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 123:
-#line 654 "a.y"
+  case 122:
+#line 650 "a.y"
     {
-               (yyval.lval) = (-(yyvsp[(2) - (4)].lval) & 0xffffffffLL) +
-                       (((yyvsp[(4) - (4)].lval) & 0xffffLL) << 32);
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (4)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 125:
-#line 662 "a.y"
+  case 124:
+#line 659 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 126:
-#line 666 "a.y"
+  case 125:
+#line 663 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 127:
-#line 670 "a.y"
+  case 126:
+#line 667 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 128:
-#line 674 "a.y"
+  case 127:
+#line 671 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 129:
-#line 678 "a.y"
+  case 128:
+#line 675 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 130:
-#line 682 "a.y"
+  case 129:
+#line 679 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 131:
-#line 686 "a.y"
+  case 130:
+#line 683 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 132:
-#line 690 "a.y"
+  case 131:
+#line 687 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 133:
-#line 694 "a.y"
+  case 132:
+#line 691 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 134:
-#line 698 "a.y"
+  case 133:
+#line 695 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -2584,7 +2574,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2588 "y.tab.c"
+#line 2578 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index c1eb62a29ac21d5852915f9c5453d274fa95a629..9f4b4d4ae391b3d8022d8ee6d669791e6585d2e1 100644 (file)
@@ -21,13 +21,11 @@ defframe(Prog *ptxt)
        NodeList *l;
        Node *n;
 
-       // fill in argument size
-       ptxt->to.offset = rnd(curfn->type->argwid, widthptr);
-
-       // fill in final stack size
-       ptxt->to.offset <<= 32;
+       // fill in argument size, stack size
+       ptxt->to.type = TYPE_TEXTSIZE;
+       ptxt->to.u.argsize = rnd(curfn->type->argwid, widthptr);
        frame = rnd(stksize+maxarg, widthreg);
-       ptxt->to.offset |= frame;
+       ptxt->to.offset = frame;
        
        // insert code to zero ambiguously live variables
        // so that the garbage collector only sees initialized values
index 48d5a85bf740cc97dd1a104bc2ac2c9f84abfb00..0203d660c1d55b8b212a212bb937e340ceabc7db 100644 (file)
 %union {
        Sym     *sym;
        int32   lval;
-       struct {
-               int32 v1;
-               int32 v2;
-       } con2;
        double  dval;
        char    sval[8];
        Addr    addr;
@@ -61,8 +57,7 @@
 %token <sval>  LSCONST LSP
 %token <sym>   LNAME LLAB LVAR
 %type  <lval>  con expr pointer offset
-%type  <con2>  con2
-%type  <addr>  mem imm imm2 reg nam rel rem rim rom omem nmem
+%type  <addr>  mem imm reg nam rel rem rim rom omem nmem textsize
 %type  <addr2> nonnon nonrel nonrem rimnon rimrem remrim
 %type  <addr2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 spec9 spec10 spec11 spec12
 %%
@@ -193,18 +188,18 @@ spec1:    /* DATA */
        }
 
 spec2: /* TEXT */
-       mem ',' imm2
+       mem ',' '$' textsize
        {
                settext($1.sym);
                $$.from = $1;
-               $$.to = $3;
+               $$.to = $4;
        }
-|      mem ',' con ',' imm2
+|      mem ',' con ',' '$' textsize
        {
                settext($1.sym);
                $$.from = $1;
                $$.from.scale = $3;
-               $$.to = $5;
+               $$.to = $6;
        }
 
 spec3: /* JMP/CALL */
@@ -453,35 +448,30 @@ imm:
                $$.u.dval = -$3;
        }
 
-imm2:
-       '$' con2
-       {
-               $$ = nullgen;
-               $$.type = TYPE_TEXTSIZE;
-               $$.offset = $2.v1;
-               $$.u.argsize = $2.v2;
-       }
-
-con2:
+textsize:
        LCONST
        {
-               $$.v1 = $1;
-               $$.v2 = ArgsSizeUnknown;
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = ArgsSizeUnknown;
        }
 |      '-' LCONST
        {
-               $$.v1 = -$2;
-               $$.v2 = ArgsSizeUnknown;
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = ArgsSizeUnknown;
        }
 |      LCONST '-' LCONST
        {
-               $$.v1 = $1;
-               $$.v2 = $3;
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = $3;
        }
 |      '-' LCONST '-' LCONST
        {
-               $$.v1 = -$2;
-               $$.v2 = $4;
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = $4;
        }
 
 mem:
index 59f037c221613a2b1a6779ada630927c9281ed49..79439ccf8d60d844105a6f03c0cb864a1b26c3d8 100644 (file)
@@ -173,17 +173,13 @@ typedef union YYSTYPE
 {
        Sym     *sym;
        int32   lval;
-       struct {
-               int32 v1;
-               int32 v2;
-       } con2;
        double  dval;
        char    sval[8];
        Addr    addr;
        Addr2   addr2;
 }
 /* Line 193 of yacc.c.  */
-#line 187 "y.tab.c"
+#line 183 "y.tab.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -196,7 +192,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 200 "y.tab.c"
+#line 196 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -411,14 +407,14 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   561
+#define YYLAST   544
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  54
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  40
+#define YYNNTS  39
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  132
+#define YYNRULES  131
 /* YYNRULES -- Number of states.  */
 #define YYNSTATES  270
 
@@ -435,8 +431,8 @@ 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,    52,    12,     5,     2,
-      50,    51,    10,     8,    49,     9,     2,    11,     2,     2,
+       2,     2,     2,     2,     2,     2,    50,    12,     5,     2,
+      51,    52,    10,     8,    49,     9,     2,    11,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    46,    47,
        6,    48,     7,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -473,16 +469,16 @@ static const yytype_uint16 yyprhs[] =
       23,    27,    31,    34,    37,    40,    43,    46,    49,    52,
       55,    58,    61,    64,    67,    70,    73,    76,    79,    82,
       85,    86,    88,    92,    96,    99,   101,   104,   106,   109,
-     111,   115,   121,   125,   131,   134,   136,   139,   141,   143,
-     147,   153,   157,   163,   166,   168,   172,   176,   182,   188,
-     194,   198,   202,   204,   206,   208,   210,   213,   216,   218,
-     220,   222,   224,   226,   231,   234,   236,   238,   240,   242,
-     244,   246,   249,   252,   255,   258,   263,   269,   273,   276,
-     278,   281,   285,   290,   292,   294,   296,   301,   306,   313,
-     323,   333,   337,   341,   346,   352,   361,   363,   370,   376,
-     384,   385,   388,   391,   393,   395,   397,   399,   401,   404,
-     407,   410,   414,   416,   420,   424,   428,   432,   436,   441,
-     446,   450,   454
+     111,   115,   121,   126,   133,   136,   138,   141,   143,   145,
+     149,   155,   159,   165,   168,   170,   174,   178,   184,   190,
+     196,   200,   204,   206,   208,   210,   212,   215,   218,   220,
+     222,   224,   226,   228,   233,   236,   238,   240,   242,   244,
+     246,   248,   251,   254,   257,   260,   265,   271,   275,   277,
+     280,   284,   289,   291,   293,   295,   300,   305,   312,   322,
+     332,   336,   340,   345,   351,   360,   362,   369,   375,   383,
+     384,   387,   390,   392,   394,   396,   398,   400,   403,   406,
+     409,   413,   415,   419,   423,   427,   431,   435,   440,   445,
+     449,   453
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -490,7 +486,7 @@ static const yytype_int8 yyrhs[] =
 {
       55,     0,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,
       43,    46,    58,    57,    -1,    47,    -1,    59,    47,    -1,
-       1,    47,    -1,    43,    48,    93,    -1,    45,    48,    93,
+       1,    47,    -1,    43,    48,    92,    -1,    45,    48,    92,
       -1,    13,    60,    -1,    14,    64,    -1,    15,    63,    -1,
       16,    61,    -1,    17,    62,    -1,    21,    65,    -1,    19,
       66,    -1,    22,    67,    -1,    18,    68,    -1,    20,    69,
@@ -499,60 +495,60 @@ static const yytype_int8 yyrhs[] =
       76,    -1,    30,    77,    -1,    -1,    49,    -1,    80,    49,
       78,    -1,    78,    49,    80,    -1,    80,    49,    -1,    80,
       -1,    49,    78,    -1,    78,    -1,    49,    81,    -1,    81,
-      -1,    83,    49,    81,    -1,    89,    11,    92,    49,    83,
-      -1,    86,    49,    84,    -1,    86,    49,    92,    49,    84,
-      -1,    49,    79,    -1,    79,    -1,    10,    89,    -1,    60,
-      -1,    64,    -1,    80,    49,    78,    -1,    80,    49,    78,
-      46,    36,    -1,    80,    49,    78,    -1,    80,    49,    78,
-      46,    37,    -1,    80,    49,    -1,    80,    -1,    80,    49,
-      78,    -1,    86,    49,    83,    -1,    86,    49,    92,    49,
-      83,    -1,    82,    49,    78,    49,    92,    -1,    83,    49,
-      78,    49,    82,    -1,    80,    49,    80,    -1,    80,    49,
-      80,    -1,    82,    -1,    86,    -1,    81,    -1,    88,    -1,
-      10,    82,    -1,    10,    87,    -1,    82,    -1,    87,    -1,
-      83,    -1,    78,    -1,    83,    -1,    92,    50,    33,    51,
-      -1,    43,    90,    -1,    35,    -1,    38,    -1,    36,    -1,
-      39,    -1,    42,    -1,    37,    -1,    52,    92,    -1,    52,
-      89,    -1,    52,    41,    -1,    52,    40,    -1,    52,    50,
-      40,    51,    -1,    52,    50,     9,    40,    51,    -1,    52,
-       9,    40,    -1,    52,    85,    -1,    31,    -1,     9,    31,
-      -1,    31,     9,    31,    -1,     9,    31,     9,    31,    -1,
-      87,    -1,    88,    -1,    92,    -1,    92,    50,    36,    51,
-      -1,    92,    50,    42,    51,    -1,    92,    50,    36,    10,
-      92,    51,    -1,    92,    50,    36,    51,    50,    36,    10,
-      92,    51,    -1,    92,    50,    36,    51,    50,    37,    10,
-      92,    51,    -1,    50,    36,    51,    -1,    50,    42,    51,
-      -1,    92,    50,    37,    51,    -1,    50,    36,    10,    92,
-      51,    -1,    50,    36,    51,    50,    36,    10,    92,    51,
-      -1,    89,    -1,    89,    50,    36,    10,    92,    51,    -1,
-      43,    90,    50,    91,    51,    -1,    43,     6,     7,    90,
-      50,    34,    51,    -1,    -1,     8,    92,    -1,     9,    92,
-      -1,    34,    -1,    42,    -1,    32,    -1,    31,    -1,    45,
-      -1,     9,    92,    -1,     8,    92,    -1,    53,    92,    -1,
-      50,    93,    51,    -1,    92,    -1,    93,     8,    93,    -1,
-      93,     9,    93,    -1,    93,    10,    93,    -1,    93,    11,
-      93,    -1,    93,    12,    93,    -1,    93,     6,     6,    93,
-      -1,    93,     7,     7,    93,    -1,    93,     5,    93,    -1,
-      93,     4,    93,    -1,    93,     3,    93,    -1
+      -1,    83,    49,    81,    -1,    88,    11,    91,    49,    83,
+      -1,    85,    49,    50,    84,    -1,    85,    49,    91,    49,
+      50,    84,    -1,    49,    79,    -1,    79,    -1,    10,    88,
+      -1,    60,    -1,    64,    -1,    80,    49,    78,    -1,    80,
+      49,    78,    46,    36,    -1,    80,    49,    78,    -1,    80,
+      49,    78,    46,    37,    -1,    80,    49,    -1,    80,    -1,
+      80,    49,    78,    -1,    85,    49,    83,    -1,    85,    49,
+      91,    49,    83,    -1,    82,    49,    78,    49,    91,    -1,
+      83,    49,    78,    49,    82,    -1,    80,    49,    80,    -1,
+      80,    49,    80,    -1,    82,    -1,    85,    -1,    81,    -1,
+      87,    -1,    10,    82,    -1,    10,    86,    -1,    82,    -1,
+      86,    -1,    83,    -1,    78,    -1,    83,    -1,    91,    51,
+      33,    52,    -1,    43,    89,    -1,    35,    -1,    38,    -1,
+      36,    -1,    39,    -1,    42,    -1,    37,    -1,    50,    91,
+      -1,    50,    88,    -1,    50,    41,    -1,    50,    40,    -1,
+      50,    51,    40,    52,    -1,    50,    51,     9,    40,    52,
+      -1,    50,     9,    40,    -1,    31,    -1,     9,    31,    -1,
+      31,     9,    31,    -1,     9,    31,     9,    31,    -1,    86,
+      -1,    87,    -1,    91,    -1,    91,    51,    36,    52,    -1,
+      91,    51,    42,    52,    -1,    91,    51,    36,    10,    91,
+      52,    -1,    91,    51,    36,    52,    51,    36,    10,    91,
+      52,    -1,    91,    51,    36,    52,    51,    37,    10,    91,
+      52,    -1,    51,    36,    52,    -1,    51,    42,    52,    -1,
+      91,    51,    37,    52,    -1,    51,    36,    10,    91,    52,
+      -1,    51,    36,    52,    51,    36,    10,    91,    52,    -1,
+      88,    -1,    88,    51,    36,    10,    91,    52,    -1,    43,
+      89,    51,    90,    52,    -1,    43,     6,     7,    89,    51,
+      34,    52,    -1,    -1,     8,    91,    -1,     9,    91,    -1,
+      34,    -1,    42,    -1,    32,    -1,    31,    -1,    45,    -1,
+       9,    91,    -1,     8,    91,    -1,    53,    91,    -1,    51,
+      92,    52,    -1,    91,    -1,    92,     8,    92,    -1,    92,
+       9,    92,    -1,    92,    10,    92,    -1,    92,    11,    92,
+      -1,    92,    12,    92,    -1,    92,     6,     6,    92,    -1,
+      92,     7,     7,    92,    -1,    92,     5,    92,    -1,    92,
+       4,    92,    -1,    92,     3,    92,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,    69,    69,    71,    70,    78,    77,    86,    87,    88,
-      91,    96,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     122,   126,   133,   140,   147,   152,   159,   164,   171,   176,
-     181,   188,   196,   202,   211,   216,   221,   229,   230,   233,
-     238,   248,   253,   263,   268,   273,   280,   285,   293,   301,
-     311,   320,   331,   332,   335,   336,   337,   341,   345,   346,
-     347,   350,   351,   354,   360,   371,   377,   383,   389,   395,
-     401,   409,   415,   425,   431,   437,   443,   449,   457,   466,
-     471,   476,   481,   488,   489,   492,   499,   506,   513,   523,
-     533,   543,   549,   555,   562,   571,   582,   586,   595,   603,
-     613,   616,   620,   626,   627,   631,   634,   635,   639,   643,
-     647,   651,   657,   658,   662,   666,   670,   674,   678,   682,
-     686,   690,   694
+       0,    64,    64,    66,    65,    73,    72,    81,    82,    83,
+      86,    91,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     117,   121,   128,   135,   142,   147,   154,   159,   166,   171,
+     176,   183,   191,   197,   206,   211,   216,   224,   225,   228,
+     233,   243,   248,   258,   263,   268,   275,   280,   288,   296,
+     306,   315,   326,   327,   330,   331,   332,   336,   340,   341,
+     342,   345,   346,   349,   355,   366,   372,   378,   384,   390,
+     396,   404,   410,   420,   426,   432,   438,   444,   452,   458,
+     464,   470,   478,   479,   482,   489,   496,   503,   513,   523,
+     533,   539,   545,   552,   561,   572,   576,   585,   593,   603,
+     606,   610,   616,   617,   621,   624,   625,   629,   633,   637,
+     641,   647,   648,   652,   656,   660,   664,   668,   672,   676,
+     680,   684
 };
 #endif
 
@@ -567,12 +563,12 @@ static const char *const yytname[] =
   "LTYPEM", "LTYPEI", "LTYPEG", "LTYPEXC", "LTYPEX", "LTYPEPC", "LTYPEF",
   "LCONST", "LFP", "LPC", "LSB", "LBREG", "LLREG", "LSREG", "LFREG",
   "LXREG", "LFCONST", "LSCONST", "LSP", "LNAME", "LLAB", "LVAR", "':'",
-  "';'", "'='", "','", "'('", "')'", "'$'", "'~'", "$accept", "prog", "@1",
+  "';'", "'='", "','", "'$'", "'('", "')'", "'~'", "$accept", "prog", "@1",
   "line", "@2", "inst", "nonnon", "rimrem", "remrim", "rimnon", "nonrem",
   "nonrel", "spec1", "spec2", "spec3", "spec4", "spec5", "spec6", "spec7",
   "spec8", "spec9", "spec10", "spec11", "spec12", "rem", "rom", "rim",
-  "rel", "reg", "imm", "imm2", "con2", "mem", "omem", "nmem", "nam",
-  "offset", "pointer", "con", "expr", 0
+  "rel", "reg", "imm", "textsize", "mem", "omem", "nmem", "nam", "offset",
+  "pointer", "con", "expr", 0
 };
 #endif
 
@@ -586,7 +582,7 @@ 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,    58,    59,    61,    44,
-      40,    41,    36,   126
+      36,    40,    41,   126
 };
 # endif
 
@@ -601,12 +597,12 @@ static const yytype_uint8 yyr1[] =
       70,    71,    71,    72,    72,    72,    73,    73,    74,    75,
       76,    77,    78,    78,    79,    79,    79,    79,    79,    79,
       79,    80,    80,    81,    81,    82,    82,    82,    82,    82,
-      82,    83,    83,    83,    83,    83,    83,    83,    84,    85,
-      85,    85,    85,    86,    86,    87,    87,    87,    87,    87,
-      87,    87,    87,    87,    87,    87,    88,    88,    89,    89,
-      90,    90,    90,    91,    91,    91,    92,    92,    92,    92,
-      92,    92,    93,    93,    93,    93,    93,    93,    93,    93,
-      93,    93,    93
+      82,    83,    83,    83,    83,    83,    83,    83,    84,    84,
+      84,    84,    85,    85,    86,    86,    86,    86,    86,    86,
+      86,    86,    86,    86,    86,    87,    87,    88,    88,    89,
+      89,    89,    90,    90,    90,    91,    91,    91,    91,    91,
+      91,    92,    92,    92,    92,    92,    92,    92,    92,    92,
+      92,    92
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -616,16 +612,16 @@ static const yytype_uint8 yyr2[] =
        3,     3,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        0,     1,     3,     3,     2,     1,     2,     1,     2,     1,
-       3,     5,     3,     5,     2,     1,     2,     1,     1,     3,
+       3,     5,     4,     6,     2,     1,     2,     1,     1,     3,
        5,     3,     5,     2,     1,     3,     3,     5,     5,     5,
        3,     3,     1,     1,     1,     1,     2,     2,     1,     1,
        1,     1,     1,     4,     2,     1,     1,     1,     1,     1,
-       1,     2,     2,     2,     2,     4,     5,     3,     2,     1,
-       2,     3,     4,     1,     1,     1,     4,     4,     6,     9,
-       9,     3,     3,     4,     5,     8,     1,     6,     5,     7,
-       0,     2,     2,     1,     1,     1,     1,     1,     2,     2,
-       2,     3,     1,     3,     3,     3,     3,     3,     4,     4,
-       3,     3,     3
+       1,     2,     2,     2,     2,     4,     5,     3,     1,     2,
+       3,     4,     1,     1,     1,     4,     4,     6,     9,     9,
+       3,     3,     4,     5,     8,     1,     6,     5,     7,     0,
+       2,     2,     1,     1,     1,     1,     1,     2,     2,     2,
+       3,     1,     3,     3,     3,     3,     3,     4,     4,     3,
+       3,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -636,30 +632,30 @@ static const yytype_uint8 yydefact[] =
        2,     3,     1,     0,     0,    30,     0,     0,     0,     0,
        0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     7,     4,     0,     9,    31,
-      12,     0,     0,   116,    75,    77,    80,    76,    78,    79,
-     110,   117,     0,     0,     0,    13,    37,    62,    63,    93,
-      94,   106,    95,     0,    14,    71,    35,    72,    15,     0,
-      16,     0,     0,   110,     0,    20,    45,    64,    68,    70,
-      69,    65,    95,    18,     0,    31,    47,    48,    21,   110,
+      12,     0,     0,   115,    75,    77,    80,    76,    78,    79,
+     109,   116,     0,     0,     0,    13,    37,    62,    63,    92,
+      93,   105,    94,     0,    14,    71,    35,    72,    15,     0,
+      16,     0,     0,   109,     0,    20,    45,    64,    68,    70,
+      69,    65,    94,    18,     0,    31,    47,    48,    21,   109,
        0,     0,    17,    39,     0,     0,    19,     0,    22,     0,
       23,     0,    24,    54,    25,     0,    26,     0,    27,     0,
-      28,     0,    29,     0,     5,     0,     0,     8,   119,   118,
-       0,     0,     0,     0,    36,     0,     0,   122,     0,   120,
+      28,     0,    29,     0,     5,     0,     0,     8,   118,   117,
+       0,     0,     0,     0,    36,     0,     0,   121,     0,   119,
        0,     0,     0,    84,    83,     0,    82,    81,    34,     0,
        0,    66,    67,    46,    74,     0,    44,     0,     0,    74,
       38,     0,     0,     0,     0,     0,    53,     0,     0,     0,
-       0,     0,     0,    10,    11,   110,   111,   112,     0,     0,
-     101,   102,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   121,     0,     0,     0,     0,    87,     0,     0,
-      32,    33,     0,     0,    40,     0,    42,     0,    49,    51,
-      55,    56,     0,     0,     0,    60,    61,     6,     0,   115,
-     113,   114,     0,     0,     0,   132,   131,   130,     0,     0,
-     123,   124,   125,   126,   127,     0,     0,    96,   103,    97,
-       0,    85,    73,     0,     0,    89,    88,     0,     0,     0,
-       0,     0,     0,     0,   108,   104,     0,   128,   129,     0,
-       0,     0,    86,    41,    90,     0,    43,    50,    52,    57,
-      58,    59,     0,     0,   107,    98,     0,     0,     0,    91,
-     109,     0,     0,     0,    92,   105,     0,     0,    99,   100
+       0,     0,     0,    10,    11,   109,   110,   111,     0,     0,
+     100,   101,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   120,     0,     0,     0,     0,    87,     0,     0,
+      32,    33,     0,     0,    40,     0,     0,    49,    51,    55,
+      56,     0,     0,     0,    60,    61,     6,     0,   114,   112,
+     113,     0,     0,     0,   131,   130,   129,     0,     0,   122,
+     123,   124,   125,   126,     0,     0,    95,   102,    96,     0,
+      85,    73,     0,     0,    88,    42,     0,     0,     0,     0,
+       0,     0,     0,   107,   103,     0,   127,   128,     0,     0,
+       0,    86,    41,    89,     0,     0,    50,    52,    57,    58,
+      59,     0,     0,   106,    97,     0,     0,     0,    90,    43,
+     108,     0,     0,     0,    91,   104,     0,     0,    98,    99
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -668,7 +664,7 @@ static const yytype_int16 yydefgoto[] =
       -1,     1,     3,    26,   152,    27,    30,    58,    60,    54,
       45,    82,    73,    86,    65,    78,    88,    90,    92,    94,
       96,    98,   100,   102,    55,    66,    56,    67,    47,    57,
-     186,   226,    48,    49,    50,    51,   113,   202,    52,   118
+     225,    48,    49,    50,    51,   113,   201,    52,   118
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -676,42 +672,42 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -89
 static const yytype_int16 yypact[] =
 {
-     -89,     8,   -89,   211,   -33,   -23,   288,   308,   308,   360,
-     236,   -11,   340,    54,    41,   308,   308,   308,    41,   106,
-     -13,   308,   308,    62,    -4,   -89,   -89,    45,   -89,   -89,
-     -89,   484,   484,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
-      81,   -89,   360,   413,   484,   -89,   -89,   -89,   -89,   -89,
-     -89,    38,    48,   407,   -89,   -89,    -2,   -89,   -89,    64,
-     -89,    78,   360,    81,   256,   -89,   -89,   -89,   -89,   -89,
-     -89,   -89,    61,   -89,   107,   360,   -89,   -89,   -89,    59,
-     431,   484,   -89,   -89,    86,    79,   -89,    87,   -89,    89,
-     -89,    91,   -89,    97,   -89,   102,   -89,   116,   -89,   120,
-     -89,   148,   -89,   151,   -89,   484,   484,   -89,   -89,   -89,
-     123,   484,   484,   105,   -89,     1,   150,   -89,   169,   -89,
-     166,     9,    69,   -89,   -89,   456,   -89,   -89,   -89,   360,
-     308,   -89,   -89,   -89,   105,   392,   -89,   -17,   484,   -89,
-     -89,   431,   170,   460,   360,   360,   360,   469,   360,   360,
-     308,   308,   211,   179,   179,    59,   -89,   -89,     6,   484,
-     154,   -89,   484,   484,   484,   201,   149,   484,   484,   484,
-     484,   484,   -89,   198,    13,   158,   159,   -89,   480,   160,
-     -89,   -89,   162,   165,   -89,     0,   -89,   167,   171,   172,
-     -89,   -89,   193,   199,   200,   -89,   -89,   -89,   197,   -89,
-     -89,   -89,   168,   204,   214,   534,   542,   549,   484,   484,
-     113,   113,   -89,   -89,   -89,   484,   484,   207,   -89,   -89,
-     208,   -89,   -89,   -13,   220,   251,   -89,   209,   226,   231,
-     -13,   484,   106,   229,   -89,   -89,   259,   184,   184,   219,
-     225,    80,   -89,   -89,   268,   249,   -89,   -89,   -89,   -89,
-     -89,   -89,   232,   484,   -89,   -89,   272,   274,   269,   -89,
-     -89,   239,   484,   484,   -89,   -89,   252,   253,   -89,   -89
+     -89,     8,   -89,   211,   -36,   -35,   164,   283,   283,   331,
+     235,     9,   307,    41,   409,   283,   283,   283,   409,   502,
+     -18,   283,   283,    60,    30,   -89,   -89,    21,   -89,   -89,
+     -89,   466,   466,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+      79,   -89,   331,   394,   466,   -89,   -89,   -89,   -89,   -89,
+     -89,    38,    46,   370,   -89,   -89,    58,   -89,   -89,    64,
+     -89,    65,   331,    79,   259,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,    66,   -89,   105,   331,   -89,   -89,   -89,    31,
+     418,   466,   -89,   -89,    69,    71,   -89,    75,   -89,    76,
+     -89,    78,   -89,    80,   -89,    87,   -89,    89,   -89,    91,
+     -89,    93,   -89,    95,   -89,   466,   466,   -89,   -89,   -89,
+     116,   466,   466,    94,   -89,    -1,    96,   -89,   171,   -89,
+     110,   -11,    90,   -89,   -89,   425,   -89,   -89,   -89,   331,
+     283,   -89,   -89,   -89,    94,   355,   -89,    67,   466,   -89,
+     -89,   418,   118,   435,   331,   331,   331,   442,   331,   331,
+     283,   283,   211,   181,   181,    31,   -89,   -89,    35,   466,
+     104,   -89,   466,   466,   466,   150,   158,   466,   466,   466,
+     466,   466,   -89,   159,    10,   142,   144,   -89,   459,   156,
+     -89,   -89,   166,   161,   -89,     7,   162,   170,   173,   -89,
+     -89,   197,   198,   199,   -89,   -89,   -89,   200,   -89,   -89,
+     -89,   203,   205,   213,   516,   524,   253,   466,   466,    53,
+      53,   -89,   -89,   -89,   466,   466,   224,   -89,   -89,   227,
+     -89,   -89,   -18,   219,   267,   -89,   231,   246,   250,   -18,
+     466,   502,   249,   -89,   -89,   279,    36,    36,   241,   247,
+      74,   -89,   -89,   291,   272,     7,   -89,   -89,   -89,   -89,
+     -89,   254,   466,   -89,   -89,   295,   297,   277,   -89,   -89,
+     -89,   261,   466,   466,   -89,   -89,   265,   271,   -89,   -89
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -89,   -89,   -89,   153,   -89,   -89,   290,   -89,   -89,   -89,
-     295,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
-     -89,   -89,   -89,   -89,    18,   246,    20,    -7,    -9,    -8,
-      84,   -89,    51,    -3,    -6,     4,   -50,   -89,   -10,   -88
+     -89,   -89,   -89,   172,   -89,   -89,   299,   -89,   -89,   -89,
+     315,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,   -89,   -89,    18,   266,    20,    -7,    -9,    -8,
+      84,     5,    -3,    -6,     4,   -50,   -89,   -10,   -88
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -721,124 +717,120 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-      72,    68,    69,    85,    71,    84,    83,    70,     2,   224,
-      97,   159,    99,   134,    28,    74,   182,   153,   154,   174,
-     175,   108,   109,   216,    46,   176,    29,    61,    59,   139,
-      46,   225,    40,   117,   119,    89,    91,    93,   199,    53,
-     200,   101,   103,   127,   106,   174,   175,   128,   201,    31,
-      32,   176,   160,   131,    72,    68,    69,   126,    71,   132,
-     114,    70,    31,    32,   217,    87,   133,   111,   112,    95,
-      85,   117,    33,   140,   205,   206,   207,    31,    32,   210,
-     211,   212,   213,   214,    40,    33,    41,   110,   120,   111,
-     112,    43,   107,   114,    44,   117,   117,    79,   121,    41,
-      33,   156,   157,    80,    81,   198,    53,    44,   104,   177,
-     105,   137,   109,   129,    41,   117,   256,   257,   138,    81,
-     237,   238,    44,   169,   170,   171,   131,   130,   183,   142,
-     155,    85,   132,   187,   184,   141,   143,   192,   144,   191,
-     145,    34,    35,    36,    37,    38,   146,   180,    39,   203,
-     181,   147,   117,   117,   117,   158,   209,   117,   117,   117,
-     117,   117,   188,   189,   190,   148,   193,   194,   109,   149,
-     195,   196,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   167,   168,   169,   170,   171,   150,   117,   117,
-     151,   161,   173,   182,   204,   239,   240,   208,   215,   218,
-     219,   221,     4,   222,   223,   243,   227,   228,   229,   234,
-     172,   250,   249,   251,     5,     6,     7,     8,     9,    10,
+      72,    68,    69,    85,    71,    84,    83,    70,     2,   159,
+      97,    28,    99,   134,    29,    74,   223,   153,   154,    87,
+     215,   108,   109,    95,    46,   174,   175,    61,    59,   139,
+      46,   176,    53,   117,   119,    89,    91,    93,   224,   111,
+     112,   101,   103,   127,   167,   168,   169,   170,   171,    31,
+      32,   160,    40,   131,    72,    68,    69,   126,    71,   132,
+     114,    70,   216,   169,   170,   171,   133,   198,   107,   199,
+      85,   117,    33,   140,   204,   205,   206,   200,   106,   209,
+     210,   211,   212,   213,    79,   110,    41,   111,   112,   120,
+      80,    53,    81,   114,    44,   117,   117,   121,    31,    32,
+     182,   156,   157,   174,   175,   197,   104,   128,   105,   176,
+     255,   256,   109,   129,   130,   117,   138,   137,   141,   236,
+     237,    33,   142,   155,   143,   144,   131,   145,   183,   146,
+     177,    85,   132,   186,   184,    41,   147,   191,   148,   190,
+     149,    81,   150,    44,   151,   158,   173,   180,   161,   202,
+     181,   182,   117,   117,   117,   203,   207,   117,   117,   117,
+     117,   117,   187,   188,   189,   208,   192,   193,   109,   214,
+     194,   195,    31,    32,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   217,    33,   218,   117,   117,    34,
+      35,    36,    37,    38,   238,   239,    39,    40,   220,    41,
+     222,   226,     4,    42,   242,    43,   227,    44,   221,   228,
+     249,   248,   250,   172,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,   230,   261,    31,    32,    62,   233,   231,   232,
-     236,   244,   266,   267,    23,   235,    24,   241,    25,   242,
-     245,   185,   247,   252,    31,    32,   135,    33,   248,   253,
-     254,    34,    35,    36,    37,    38,   255,   258,    39,    63,
-     259,    41,   262,   260,   263,    64,    43,    33,    53,    44,
-     265,    34,    35,    36,    37,    38,    31,    32,    39,    63,
-     264,    41,    76,   268,   269,   197,    43,    77,    53,    44,
-     136,   246,     0,     0,     0,     0,    31,    32,     0,    33,
-       0,     0,     0,    34,    35,    36,    37,    38,     0,     0,
-      39,    40,     0,    41,     0,     0,     0,    42,    43,    33,
-       0,    44,     0,    34,    35,    36,    37,    38,    31,    32,
-      39,    40,     0,    41,     0,     0,     0,     0,    43,     0,
-      53,    44,     0,     0,     0,     0,     0,     0,    31,    32,
-       0,    33,     0,     0,     0,    34,    35,    36,    37,    38,
-       0,     0,    39,    40,     0,    41,     0,     0,     0,    75,
-      43,    33,     0,    44,     0,    34,    35,    36,    37,    38,
-      31,    32,    39,    40,     0,    41,     0,     0,     0,     0,
-      43,     0,     0,    44,     0,    31,   122,     0,     0,     0,
-       0,    31,    32,    33,     0,     0,     0,    34,    35,    36,
-      37,    38,     0,     0,    39,     0,     0,    41,    33,    31,
-      32,     0,    43,     0,    33,    44,     0,   123,   124,   115,
-      40,     0,    41,     0,     0,   116,     0,   125,    41,     0,
-      44,     0,    33,    81,    31,   178,    44,     0,    31,    32,
-       0,     0,     0,     0,    79,     0,    41,    31,    32,     0,
-       0,    81,     0,     0,    44,     0,     0,    33,    31,    32,
-       0,    33,    31,    32,     0,     0,   179,     0,     0,     0,
-      33,    41,     0,     0,     0,    41,    81,     0,     0,    44,
-      81,    33,   185,    44,    41,    33,     0,     0,     0,    81,
-     220,    53,    44,     0,     0,    41,     0,     0,     0,    41,
-      81,     0,     0,    44,    81,     0,     0,    44,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   164,   165,   166,
-     167,   168,   169,   170,   171,   165,   166,   167,   168,   169,
-     170,   171
+      21,    22,   261,    31,    32,    62,   229,   230,   231,   235,
+     243,   232,   266,   267,    23,   233,    24,   234,    25,   165,
+     166,   167,   168,   169,   170,   171,    33,    31,    32,   135,
+      34,    35,    36,    37,    38,   240,   244,    39,    63,   241,
+      41,   245,   246,   251,    64,    53,    43,   247,    44,   252,
+      33,    31,    32,   253,    34,    35,    36,    37,    38,   254,
+     257,    39,    63,   258,    41,   262,   260,   263,   264,    53,
+      43,    76,    44,   265,    33,    31,    32,   268,    34,    35,
+      36,    37,    38,   269,   196,    39,    40,    77,    41,   259,
+     136,     0,     0,    53,    43,     0,    44,     0,    33,    31,
+      32,     0,    34,    35,    36,    37,    38,     0,     0,    39,
+      40,     0,    41,     0,     0,     0,    75,     0,    43,     0,
+      44,     0,    33,    31,    32,     0,    34,    35,    36,    37,
+      38,     0,     0,    39,    40,     0,    41,     0,    31,   122,
+       0,     0,    43,     0,    44,     0,    33,     0,     0,     0,
+      34,    35,    36,    37,    38,     0,     0,    39,     0,     0,
+      41,    33,    31,    32,     0,     0,    43,     0,    44,     0,
+     123,   124,     0,    40,     0,    41,     0,    31,    32,     0,
+       0,   125,     0,    44,     0,    33,    31,    32,     0,     0,
+     115,     0,     0,    31,   178,     0,   116,     0,     0,    41,
+      33,     0,     0,    31,    32,    81,     0,    44,     0,    33,
+      31,    32,    40,     0,    41,     0,    33,     0,     0,     0,
+      43,    79,    44,    41,     0,   179,    33,    31,    32,    81,
+      41,    44,     0,    33,    31,    32,    81,     0,    44,     0,
+      41,     0,     0,     0,     0,   185,    81,    41,    44,     0,
+      33,     0,    53,    81,     0,    44,     0,    33,     0,   219,
+       0,     0,     0,     0,    41,     0,     0,     0,     0,     0,
+      81,    41,    44,     0,     0,     0,     0,    81,     0,    44,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   164,
+     165,   166,   167,   168,   169,   170,   171,    34,    35,    36,
+      37,    38,     0,     0,    39
 };
 
 static const yytype_int16 yycheck[] =
 {
-      10,    10,    10,    13,    10,    13,    13,    10,     0,     9,
-      19,    10,    20,    63,    47,    11,    33,   105,   106,    36,
-      37,    31,    32,    10,     6,    42,    49,     9,     8,    79,
-      12,    31,    43,    43,    44,    15,    16,    17,    32,    52,
-      34,    21,    22,    53,    48,    36,    37,    49,    42,     8,
-       9,    42,    51,    62,    64,    64,    64,    53,    64,    62,
-      42,    64,     8,     9,    51,    14,    62,     8,     9,    18,
-      80,    81,    31,    80,   162,   163,   164,     8,     9,   167,
-     168,   169,   170,   171,    43,    31,    45,     6,    50,     8,
-       9,    50,    47,    75,    53,   105,   106,    43,    50,    45,
-      31,   111,   112,    49,    50,   155,    52,    53,    46,    40,
-      48,    50,   122,    49,    45,   125,    36,    37,    11,    50,
-     208,   209,    53,    10,    11,    12,   135,    49,   138,    50,
-       7,   141,   135,   143,   141,    49,    49,   147,    49,   147,
-      49,    35,    36,    37,    38,    39,    49,   129,    42,   159,
-     130,    49,   162,   163,   164,    50,     7,   167,   168,   169,
-     170,   171,   144,   145,   146,    49,   148,   149,   178,    49,
-     150,   151,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,     8,     9,    10,    11,    12,    49,   208,   209,
-      49,    51,    36,    33,    50,   215,   216,     6,    10,    51,
-      51,    51,     1,    51,    49,   223,    49,    46,    46,    51,
-      51,   231,   230,   232,    13,    14,    15,    16,    17,    18,
+      10,    10,    10,    13,    10,    13,    13,    10,     0,    10,
+      19,    47,    20,    63,    49,    11,     9,   105,   106,    14,
+      10,    31,    32,    18,     6,    36,    37,     9,     8,    79,
+      12,    42,    50,    43,    44,    15,    16,    17,    31,     8,
+       9,    21,    22,    53,     8,     9,    10,    11,    12,     8,
+       9,    52,    43,    62,    64,    64,    64,    53,    64,    62,
+      42,    64,    52,    10,    11,    12,    62,    32,    47,    34,
+      80,    81,    31,    80,   162,   163,   164,    42,    48,   167,
+     168,   169,   170,   171,    43,     6,    45,     8,     9,    51,
+      49,    50,    51,    75,    53,   105,   106,    51,     8,     9,
+      33,   111,   112,    36,    37,   155,    46,    49,    48,    42,
+      36,    37,   122,    49,    49,   125,    11,    51,    49,   207,
+     208,    31,    51,     7,    49,    49,   135,    49,   138,    49,
+      40,   141,   135,   143,   141,    45,    49,   147,    49,   147,
+      49,    51,    49,    53,    49,    51,    36,   129,    52,   159,
+     130,    33,   162,   163,   164,    51,     6,   167,   168,   169,
+     170,   171,   144,   145,   146,     7,   148,   149,   178,    10,
+     150,   151,     8,     9,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    52,    31,    52,   207,   208,    35,
+      36,    37,    38,    39,   214,   215,    42,    43,    52,    45,
+      49,    49,     1,    49,   222,    51,    46,    53,    52,    46,
+     230,   229,   231,    52,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    49,   253,     8,     9,    10,    50,    49,    49,
-      36,    31,   262,   263,    43,    51,    45,    50,    47,    51,
-       9,    52,    36,    34,     8,     9,    10,    31,    37,    10,
-      51,    35,    36,    37,    38,    39,    51,     9,    42,    43,
-      31,    45,    10,    51,    10,    49,    50,    31,    52,    53,
-      51,    35,    36,    37,    38,    39,     8,     9,    42,    43,
-      31,    45,    12,    51,    51,   152,    50,    12,    52,    53,
-      64,   227,    -1,    -1,    -1,    -1,     8,     9,    -1,    31,
-      -1,    -1,    -1,    35,    36,    37,    38,    39,    -1,    -1,
-      42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    31,
-      -1,    53,    -1,    35,    36,    37,    38,    39,     8,     9,
-      42,    43,    -1,    45,    -1,    -1,    -1,    -1,    50,    -1,
-      52,    53,    -1,    -1,    -1,    -1,    -1,    -1,     8,     9,
-      -1,    31,    -1,    -1,    -1,    35,    36,    37,    38,    39,
-      -1,    -1,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-      50,    31,    -1,    53,    -1,    35,    36,    37,    38,    39,
-       8,     9,    42,    43,    -1,    45,    -1,    -1,    -1,    -1,
-      50,    -1,    -1,    53,    -1,     8,     9,    -1,    -1,    -1,
-      -1,     8,     9,    31,    -1,    -1,    -1,    35,    36,    37,
-      38,    39,    -1,    -1,    42,    -1,    -1,    45,    31,     8,
-       9,    -1,    50,    -1,    31,    53,    -1,    40,    41,    36,
-      43,    -1,    45,    -1,    -1,    42,    -1,    50,    45,    -1,
-      53,    -1,    31,    50,     8,     9,    53,    -1,     8,     9,
-      -1,    -1,    -1,    -1,    43,    -1,    45,     8,     9,    -1,
-      -1,    50,    -1,    -1,    53,    -1,    -1,    31,     8,     9,
-      -1,    31,     8,     9,    -1,    -1,    40,    -1,    -1,    -1,
-      31,    45,    -1,    -1,    -1,    45,    50,    -1,    -1,    53,
-      50,    31,    52,    53,    45,    31,    -1,    -1,    -1,    50,
-      40,    52,    53,    -1,    -1,    45,    -1,    -1,    -1,    45,
-      50,    -1,    -1,    53,    50,    -1,    -1,    53,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,     5,     6,     7,
-       8,     9,    10,    11,    12,     6,     7,     8,     9,    10,
-      11,    12
+      29,    30,   252,     8,     9,    10,    49,    49,    49,    36,
+      31,    51,   262,   263,    43,    52,    45,    52,    47,     6,
+       7,     8,     9,    10,    11,    12,    31,     8,     9,    10,
+      35,    36,    37,    38,    39,    51,     9,    42,    43,    52,
+      45,    50,    36,    34,    49,    50,    51,    37,    53,    10,
+      31,     8,     9,    52,    35,    36,    37,    38,    39,    52,
+       9,    42,    43,    31,    45,    10,    52,    10,    31,    50,
+      51,    12,    53,    52,    31,     8,     9,    52,    35,    36,
+      37,    38,    39,    52,   152,    42,    43,    12,    45,   245,
+      64,    -1,    -1,    50,    51,    -1,    53,    -1,    31,     8,
+       9,    -1,    35,    36,    37,    38,    39,    -1,    -1,    42,
+      43,    -1,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,
+      53,    -1,    31,     8,     9,    -1,    35,    36,    37,    38,
+      39,    -1,    -1,    42,    43,    -1,    45,    -1,     8,     9,
+      -1,    -1,    51,    -1,    53,    -1,    31,    -1,    -1,    -1,
+      35,    36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,
+      45,    31,     8,     9,    -1,    -1,    51,    -1,    53,    -1,
+      40,    41,    -1,    43,    -1,    45,    -1,     8,     9,    -1,
+      -1,    51,    -1,    53,    -1,    31,     8,     9,    -1,    -1,
+      36,    -1,    -1,     8,     9,    -1,    42,    -1,    -1,    45,
+      31,    -1,    -1,     8,     9,    51,    -1,    53,    -1,    31,
+       8,     9,    43,    -1,    45,    -1,    31,    -1,    -1,    -1,
+      51,    43,    53,    45,    -1,    40,    31,     8,     9,    51,
+      45,    53,    -1,    31,     8,     9,    51,    -1,    53,    -1,
+      45,    -1,    -1,    -1,    -1,    50,    51,    45,    53,    -1,
+      31,    -1,    50,    51,    -1,    53,    -1,    31,    -1,    40,
+      -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+      51,    45,    53,    -1,    -1,    -1,    -1,    51,    -1,    53,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,     5,
+       6,     7,     8,     9,    10,    11,    12,    35,    36,    37,
+      38,    39,    -1,    -1,    42
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -849,29 +841,29 @@ static const yytype_uint8 yystos[] =
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    43,    45,    47,    57,    59,    47,    49,
       60,     8,     9,    31,    35,    36,    37,    38,    39,    42,
-      43,    45,    49,    50,    53,    64,    78,    82,    86,    87,
-      88,    89,    92,    52,    63,    78,    80,    83,    61,    80,
+      43,    45,    49,    51,    53,    64,    78,    82,    85,    86,
+      87,    88,    91,    50,    63,    78,    80,    83,    61,    80,
       62,    78,    10,    43,    49,    68,    79,    81,    82,    83,
-      87,    88,    92,    66,    89,    49,    60,    64,    69,    43,
-      49,    50,    65,    81,    83,    92,    67,    86,    70,    80,
-      71,    80,    72,    80,    73,    86,    74,    82,    75,    83,
-      76,    80,    77,    80,    46,    48,    48,    47,    92,    92,
-       6,     8,     9,    90,    78,    36,    42,    92,    93,    92,
-      50,    50,     9,    40,    41,    50,    89,    92,    49,    49,
-      49,    82,    87,    89,    90,    10,    79,    50,    11,    90,
-      81,    49,    50,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    58,    93,    93,     7,    92,    92,    50,    10,
-      51,    51,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    51,    36,    36,    37,    42,    40,     9,    40,
-      78,    80,    33,    92,    81,    52,    84,    92,    78,    78,
-      78,    83,    92,    78,    78,    80,    80,    57,    90,    32,
-      34,    42,    91,    92,    50,    93,    93,    93,     6,     7,
-      93,    93,    93,    93,    93,    10,    10,    51,    51,    51,
-      40,    51,    51,    49,     9,    31,    85,    49,    46,    46,
-      49,    49,    49,    50,    51,    51,    36,    93,    93,    92,
-      92,    50,    51,    83,    31,     9,    84,    36,    37,    83,
-      92,    82,    34,    10,    51,    51,    36,    37,     9,    31,
-      51,    92,    10,    10,    31,    51,    92,    92,    51,    51
+      86,    87,    91,    66,    88,    49,    60,    64,    69,    43,
+      49,    51,    65,    81,    83,    91,    67,    85,    70,    80,
+      71,    80,    72,    80,    73,    85,    74,    82,    75,    83,
+      76,    80,    77,    80,    46,    48,    48,    47,    91,    91,
+       6,     8,     9,    89,    78,    36,    42,    91,    92,    91,
+      51,    51,     9,    40,    41,    51,    88,    91,    49,    49,
+      49,    82,    86,    88,    89,    10,    79,    51,    11,    89,
+      81,    49,    51,    49,    49,    49,    49,    49,    49,    49,
+      49,    49,    58,    92,    92,     7,    91,    91,    51,    10,
+      52,    52,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    52,    36,    36,    37,    42,    40,     9,    40,
+      78,    80,    33,    91,    81,    50,    91,    78,    78,    78,
+      83,    91,    78,    78,    80,    80,    57,    89,    32,    34,
+      42,    90,    91,    51,    92,    92,    92,     6,     7,    92,
+      92,    92,    92,    92,    10,    10,    52,    52,    52,    40,
+      52,    52,    49,     9,    31,    84,    49,    46,    46,    49,
+      49,    49,    51,    52,    52,    36,    92,    92,    91,    91,
+      51,    52,    83,    31,     9,    50,    36,    37,    83,    91,
+      82,    34,    10,    52,    52,    36,    37,     9,    31,    84,
+      52,    91,    10,    10,    31,    52,    91,    91,    52,    52
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1686,14 +1678,14 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 71 "a.y"
+#line 66 "a.y"
     {
                stmtline = lineno;
        }
     break;
 
   case 5:
-#line 78 "a.y"
+#line 73 "a.y"
     {
                (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym));
                if((yyvsp[(1) - (2)].sym)->type == LLAB && (yyvsp[(1) - (2)].sym)->value != pc)
@@ -1704,7 +1696,7 @@ yyreduce:
     break;
 
   case 10:
-#line 92 "a.y"
+#line 87 "a.y"
     {
                (yyvsp[(1) - (3)].sym)->type = LVAR;
                (yyvsp[(1) - (3)].sym)->value = (yyvsp[(3) - (3)].lval);
@@ -1712,7 +1704,7 @@ yyreduce:
     break;
 
   case 11:
-#line 97 "a.y"
+#line 92 "a.y"
     {
                if((yyvsp[(1) - (3)].sym)->value != (yyvsp[(3) - (3)].lval))
                        yyerror("redeclaration of %s", (yyvsp[(1) - (3)].sym)->name);
@@ -1721,97 +1713,97 @@ yyreduce:
     break;
 
   case 12:
-#line 102 "a.y"
+#line 97 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 13:
-#line 103 "a.y"
+#line 98 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 14:
-#line 104 "a.y"
+#line 99 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 15:
-#line 105 "a.y"
+#line 100 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 16:
-#line 106 "a.y"
+#line 101 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 17:
-#line 107 "a.y"
+#line 102 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 18:
-#line 108 "a.y"
+#line 103 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 19:
-#line 109 "a.y"
+#line 104 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 20:
-#line 110 "a.y"
+#line 105 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 21:
-#line 111 "a.y"
+#line 106 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 22:
-#line 112 "a.y"
+#line 107 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 23:
-#line 113 "a.y"
+#line 108 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 24:
-#line 114 "a.y"
+#line 109 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 25:
-#line 115 "a.y"
+#line 110 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 26:
-#line 116 "a.y"
+#line 111 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 27:
-#line 117 "a.y"
+#line 112 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 28:
-#line 118 "a.y"
+#line 113 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 29:
-#line 119 "a.y"
+#line 114 "a.y"
     { outcode((yyvsp[(1) - (2)].lval), &(yyvsp[(2) - (2)].addr2)); }
     break;
 
   case 30:
-#line 122 "a.y"
+#line 117 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = nullgen;
@@ -1819,7 +1811,7 @@ yyreduce:
     break;
 
   case 31:
-#line 127 "a.y"
+#line 122 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = nullgen;
@@ -1827,7 +1819,7 @@ yyreduce:
     break;
 
   case 32:
-#line 134 "a.y"
+#line 129 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -1835,7 +1827,7 @@ yyreduce:
     break;
 
   case 33:
-#line 141 "a.y"
+#line 136 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -1843,7 +1835,7 @@ yyreduce:
     break;
 
   case 34:
-#line 148 "a.y"
+#line 143 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (2)].addr);
                (yyval.addr2).to = nullgen;
@@ -1851,7 +1843,7 @@ yyreduce:
     break;
 
   case 35:
-#line 153 "a.y"
+#line 148 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (1)].addr);
                (yyval.addr2).to = nullgen;
@@ -1859,7 +1851,7 @@ yyreduce:
     break;
 
   case 36:
-#line 160 "a.y"
+#line 155 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(2) - (2)].addr);
@@ -1867,7 +1859,7 @@ yyreduce:
     break;
 
   case 37:
-#line 165 "a.y"
+#line 160 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(1) - (1)].addr);
@@ -1875,7 +1867,7 @@ yyreduce:
     break;
 
   case 38:
-#line 172 "a.y"
+#line 167 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(2) - (2)].addr);
@@ -1883,7 +1875,7 @@ yyreduce:
     break;
 
   case 39:
-#line 177 "a.y"
+#line 172 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(1) - (1)].addr);
@@ -1891,7 +1883,7 @@ yyreduce:
     break;
 
   case 40:
-#line 182 "a.y"
+#line 177 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -1899,7 +1891,7 @@ yyreduce:
     break;
 
   case 41:
-#line 189 "a.y"
+#line 184 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
                (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval);
@@ -1908,26 +1900,26 @@ yyreduce:
     break;
 
   case 42:
-#line 197 "a.y"
+#line 192 "a.y"
     {
-               settext((yyvsp[(1) - (3)].addr).sym);
-               (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
-               (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
+               settext((yyvsp[(1) - (4)].addr).sym);
+               (yyval.addr2).from = (yyvsp[(1) - (4)].addr);
+               (yyval.addr2).to = (yyvsp[(4) - (4)].addr);
        }
     break;
 
   case 43:
-#line 203 "a.y"
+#line 198 "a.y"
     {
-               settext((yyvsp[(1) - (5)].addr).sym);
-               (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
-               (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval);
-               (yyval.addr2).to = (yyvsp[(5) - (5)].addr);
+               settext((yyvsp[(1) - (6)].addr).sym);
+               (yyval.addr2).from = (yyvsp[(1) - (6)].addr);
+               (yyval.addr2).from.scale = (yyvsp[(3) - (6)].lval);
+               (yyval.addr2).to = (yyvsp[(6) - (6)].addr);
        }
     break;
 
   case 44:
-#line 212 "a.y"
+#line 207 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(2) - (2)].addr);
@@ -1935,7 +1927,7 @@ yyreduce:
     break;
 
   case 45:
-#line 217 "a.y"
+#line 212 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(1) - (1)].addr);
@@ -1943,7 +1935,7 @@ yyreduce:
     break;
 
   case 46:
-#line 222 "a.y"
+#line 217 "a.y"
     {
                (yyval.addr2).from = nullgen;
                (yyval.addr2).to = (yyvsp[(2) - (2)].addr);
@@ -1952,7 +1944,7 @@ yyreduce:
     break;
 
   case 49:
-#line 234 "a.y"
+#line 229 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -1960,7 +1952,7 @@ yyreduce:
     break;
 
   case 50:
-#line 239 "a.y"
+#line 234 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (5)].addr);
@@ -1971,7 +1963,7 @@ yyreduce:
     break;
 
   case 51:
-#line 249 "a.y"
+#line 244 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -1979,7 +1971,7 @@ yyreduce:
     break;
 
   case 52:
-#line 254 "a.y"
+#line 249 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (5)].addr);
@@ -1990,7 +1982,7 @@ yyreduce:
     break;
 
   case 53:
-#line 264 "a.y"
+#line 259 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (2)].addr);
                (yyval.addr2).to = nullgen;
@@ -1998,7 +1990,7 @@ yyreduce:
     break;
 
   case 54:
-#line 269 "a.y"
+#line 264 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (1)].addr);
                (yyval.addr2).to = nullgen;
@@ -2006,7 +1998,7 @@ yyreduce:
     break;
 
   case 55:
-#line 274 "a.y"
+#line 269 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -2014,7 +2006,7 @@ yyreduce:
     break;
 
   case 56:
-#line 281 "a.y"
+#line 276 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (3)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (3)].addr);
@@ -2022,7 +2014,7 @@ yyreduce:
     break;
 
   case 57:
-#line 286 "a.y"
+#line 281 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
                (yyval.addr2).from.scale = (yyvsp[(3) - (5)].lval);
@@ -2031,7 +2023,7 @@ yyreduce:
     break;
 
   case 58:
-#line 294 "a.y"
+#line 289 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(1) - (5)].addr);
                (yyval.addr2).to = (yyvsp[(3) - (5)].addr);
@@ -2040,7 +2032,7 @@ yyreduce:
     break;
 
   case 59:
-#line 302 "a.y"
+#line 297 "a.y"
     {
                (yyval.addr2).from = (yyvsp[(3) - (5)].addr);
                (yyval.addr2).to = (yyvsp[(5) - (5)].addr);
@@ -2051,7 +2043,7 @@ yyreduce:
     break;
 
   case 60:
-#line 312 "a.y"
+#line 307 "a.y"
     {
                if((yyvsp[(1) - (3)].addr).type != TYPE_CONST || (yyvsp[(3) - (3)].addr).type != TYPE_CONST)
                        yyerror("arguments to PCDATA must be integer constants");
@@ -2061,7 +2053,7 @@ yyreduce:
     break;
 
   case 61:
-#line 321 "a.y"
+#line 316 "a.y"
     {
                if((yyvsp[(1) - (3)].addr).type != TYPE_CONST)
                        yyerror("index for FUNCDATA must be integer constant");
@@ -2073,21 +2065,21 @@ yyreduce:
     break;
 
   case 66:
-#line 338 "a.y"
+#line 333 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
        }
     break;
 
   case 67:
-#line 342 "a.y"
+#line 337 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
        }
     break;
 
   case 73:
-#line 355 "a.y"
+#line 350 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_BRANCH;
@@ -2096,7 +2088,7 @@ yyreduce:
     break;
 
   case 74:
-#line 361 "a.y"
+#line 356 "a.y"
     {
                (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym));
                (yyval.addr) = nullgen;
@@ -2108,7 +2100,7 @@ yyreduce:
     break;
 
   case 75:
-#line 372 "a.y"
+#line 367 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2117,7 +2109,7 @@ yyreduce:
     break;
 
   case 76:
-#line 378 "a.y"
+#line 373 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2126,7 +2118,7 @@ yyreduce:
     break;
 
   case 77:
-#line 384 "a.y"
+#line 379 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2135,7 +2127,7 @@ yyreduce:
     break;
 
   case 78:
-#line 390 "a.y"
+#line 385 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2144,7 +2136,7 @@ yyreduce:
     break;
 
   case 79:
-#line 396 "a.y"
+#line 391 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2153,7 +2145,7 @@ yyreduce:
     break;
 
   case 80:
-#line 402 "a.y"
+#line 397 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2162,7 +2154,7 @@ yyreduce:
     break;
 
   case 81:
-#line 410 "a.y"
+#line 405 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_CONST;
@@ -2171,7 +2163,7 @@ yyreduce:
     break;
 
   case 82:
-#line 416 "a.y"
+#line 411 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
                (yyval.addr).type = TYPE_ADDR;
@@ -2184,7 +2176,7 @@ yyreduce:
     break;
 
   case 83:
-#line 426 "a.y"
+#line 421 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SCONST;
@@ -2193,7 +2185,7 @@ yyreduce:
     break;
 
   case 84:
-#line 432 "a.y"
+#line 427 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2202,7 +2194,7 @@ yyreduce:
     break;
 
   case 85:
-#line 438 "a.y"
+#line 433 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2211,7 +2203,7 @@ yyreduce:
     break;
 
   case 86:
-#line 444 "a.y"
+#line 439 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2220,7 +2212,7 @@ yyreduce:
     break;
 
   case 87:
-#line 450 "a.y"
+#line 445 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2229,49 +2221,43 @@ yyreduce:
     break;
 
   case 88:
-#line 458 "a.y"
+#line 453 "a.y"
     {
-               (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_TEXTSIZE;
-               (yyval.addr).offset = (yyvsp[(2) - (2)].con2).v1;
-               (yyval.addr).u.argsize = (yyvsp[(2) - (2)].con2).v2;
+               (yyval.addr).offset = (yyvsp[(1) - (1)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
        }
     break;
 
   case 89:
-#line 467 "a.y"
+#line 459 "a.y"
     {
-               (yyval.con2).v1 = (yyvsp[(1) - (1)].lval);
-               (yyval.con2).v2 = ArgsSizeUnknown;
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (2)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
        }
     break;
 
   case 90:
-#line 472 "a.y"
+#line 465 "a.y"
     {
-               (yyval.con2).v1 = -(yyvsp[(2) - (2)].lval);
-               (yyval.con2).v2 = ArgsSizeUnknown;
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (3)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(3) - (3)].lval);
        }
     break;
 
   case 91:
-#line 477 "a.y"
-    {
-               (yyval.con2).v1 = (yyvsp[(1) - (3)].lval);
-               (yyval.con2).v2 = (yyvsp[(3) - (3)].lval);
-       }
-    break;
-
-  case 92:
-#line 482 "a.y"
+#line 471 "a.y"
     {
-               (yyval.con2).v1 = -(yyvsp[(2) - (4)].lval);
-               (yyval.con2).v2 = (yyvsp[(4) - (4)].lval);
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (4)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 95:
-#line 493 "a.y"
+  case 94:
+#line 483 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2280,8 +2266,8 @@ yyreduce:
        }
     break;
 
-  case 96:
-#line 500 "a.y"
+  case 95:
+#line 490 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2290,8 +2276,8 @@ yyreduce:
        }
     break;
 
-  case 97:
-#line 507 "a.y"
+  case 96:
+#line 497 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2300,8 +2286,8 @@ yyreduce:
        }
     break;
 
-  case 98:
-#line 514 "a.y"
+  case 97:
+#line 504 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2313,8 +2299,8 @@ yyreduce:
        }
     break;
 
-  case 99:
-#line 524 "a.y"
+  case 98:
+#line 514 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2326,8 +2312,8 @@ yyreduce:
        }
     break;
 
-  case 100:
-#line 534 "a.y"
+  case 99:
+#line 524 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2339,8 +2325,8 @@ yyreduce:
        }
     break;
 
-  case 101:
-#line 544 "a.y"
+  case 100:
+#line 534 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2348,8 +2334,8 @@ yyreduce:
        }
     break;
 
-  case 102:
-#line 550 "a.y"
+  case 101:
+#line 540 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2357,8 +2343,8 @@ yyreduce:
        }
     break;
 
-  case 103:
-#line 556 "a.y"
+  case 102:
+#line 546 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2367,8 +2353,8 @@ yyreduce:
        }
     break;
 
-  case 104:
-#line 563 "a.y"
+  case 103:
+#line 553 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2379,8 +2365,8 @@ yyreduce:
        }
     break;
 
-  case 105:
-#line 572 "a.y"
+  case 104:
+#line 562 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2391,15 +2377,15 @@ yyreduce:
        }
     break;
 
-  case 106:
-#line 583 "a.y"
+  case 105:
+#line 573 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (1)].addr);
        }
     break;
 
-  case 107:
-#line 587 "a.y"
+  case 106:
+#line 577 "a.y"
     {
                (yyval.addr) = (yyvsp[(1) - (6)].addr);
                (yyval.addr).index = (yyvsp[(3) - (6)].lval);
@@ -2408,8 +2394,8 @@ yyreduce:
        }
     break;
 
-  case 108:
-#line 596 "a.y"
+  case 107:
+#line 586 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2419,8 +2405,8 @@ yyreduce:
        }
     break;
 
-  case 109:
-#line 604 "a.y"
+  case 108:
+#line 594 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -2430,134 +2416,134 @@ yyreduce:
        }
     break;
 
-  case 110:
-#line 613 "a.y"
+  case 109:
+#line 603 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 111:
-#line 617 "a.y"
+  case 110:
+#line 607 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 112:
-#line 621 "a.y"
+  case 111:
+#line 611 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 114:
-#line 628 "a.y"
+  case 113:
+#line 618 "a.y"
     {
                (yyval.lval) = NAME_AUTO;
        }
     break;
 
-  case 117:
-#line 636 "a.y"
+  case 116:
+#line 626 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
     break;
 
-  case 118:
-#line 640 "a.y"
+  case 117:
+#line 630 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 119:
-#line 644 "a.y"
+  case 118:
+#line 634 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 120:
-#line 648 "a.y"
+  case 119:
+#line 638 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 121:
-#line 652 "a.y"
+  case 120:
+#line 642 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
     break;
 
-  case 123:
-#line 659 "a.y"
+  case 122:
+#line 649 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 124:
-#line 663 "a.y"
+  case 123:
+#line 653 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 125:
-#line 667 "a.y"
+  case 124:
+#line 657 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 126:
-#line 671 "a.y"
+  case 125:
+#line 661 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 127:
-#line 675 "a.y"
+  case 126:
+#line 665 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 128:
-#line 679 "a.y"
+  case 127:
+#line 669 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 129:
-#line 683 "a.y"
+  case 128:
+#line 673 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 130:
-#line 687 "a.y"
+  case 129:
+#line 677 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 131:
-#line 691 "a.y"
+  case 130:
+#line 681 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 132:
-#line 695 "a.y"
+  case 131:
+#line 685 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -2565,7 +2551,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2569 "y.tab.c"
+#line 2555 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index d1914554872e43653a8fb7c46a666cb9e28ced42..3ab1bfa0f48523f54c6ac36c1c7752932c08e818 100644 (file)
@@ -118,17 +118,13 @@ typedef union YYSTYPE
 {
        Sym     *sym;
        int32   lval;
-       struct {
-               int32 v1;
-               int32 v2;
-       } con2;
        double  dval;
        char    sval[8];
        Addr    addr;
        Addr2   addr2;
 }
 /* Line 1529 of yacc.c.  */
-#line 132 "y.tab.h"
+#line 128 "y.tab.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 173e95607312d5e07c44bf81dc4a90e70aad19ac..2fd4a601ff793450b73c3c6bfa8bcbc79fa5636a 100644 (file)
@@ -21,11 +21,10 @@ defframe(Prog *ptxt)
        NodeList *l;
        Node *n;
 
-       // fill in argument size
+       // fill in argument size, stack size
+       ptxt->to.type = TYPE_TEXTSIZE;
        ptxt->to.u.argsize = rnd(curfn->type->argwid, widthptr);
-
-       // fill in final stack size
-       frame = rnd(stksize+maxarg, widthptr);
+       frame = rnd(stksize+maxarg, widthreg);
        ptxt->to.offset = frame;
        
        // insert code to zero ambiguously live variables
index 5feb027a9745e1b07b3dd16cb0a687b38ebf9166..5d817922a399f63153cfc70430048def71e9429c 100644 (file)
@@ -60,7 +60,7 @@
 %token <sval>  LSCONST
 %token <sym>   LNAME LLAB LVAR
 %type  <lval>  con expr pointer offset sreg
-%type  <addr>  addr rreg regaddr name creg freg xlreg lr ctr
+%type  <addr>  addr rreg regaddr name creg freg xlreg lr ctr textsize
 %type  <addr>  imm ximm fimm rel psr lcr cbit fpscr msr mask
 %%
 prog:
@@ -613,24 +613,15 @@ inst:
 /*
  * TEXT
  */
-|      LTEXT name ',' imm
+|      LTEXT name ',' '$' textsize
        {
                settext($2.sym);
-               outcode($1, &$2, 0, &$4);
-       }
-|      LTEXT name ',' con ',' imm
-       {
-               settext($2.sym);
-               $6.offset &= 0xffffffffull;
-               $6.offset |= (vlong)ArgsSizeUnknown << 32;
-               outcode($1, &$2, $4, &$6);
+               outcode($1, &$2, 0, &$5);
        }
-|      LTEXT name ',' con ',' imm '-' con
+|      LTEXT name ',' con ',' '$' textsize
        {
                settext($2.sym);
-               $6.offset &= 0xffffffffull;
-               $6.offset |= ($8 & 0xffffffffull) << 32;
-               outcode($1, &$2, $4, &$6);
+               outcode($1, &$2, $4, &$7);
        }
 /*
  * GLOBL
@@ -812,6 +803,32 @@ mask:
                $$.offset = v;
        }
 
+textsize:
+       LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = ArgsSizeUnknown;
+       }
+|      '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = ArgsSizeUnknown;
+       }
+|      LCONST '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = $1;
+               $$.u.argsize = $3;
+       }
+|      '-' LCONST '-' LCONST
+       {
+               $$.type = TYPE_TEXTSIZE;
+               $$.offset = -$2;
+               $$.u.argsize = $4;
+       }
+
 ximm:
        '$' addr
        {
index 4428240dbeedaf6fe752742d72b75db8825d17f8..4207cdadbde2439d7adc238f1e81646f7f062fe4 100644 (file)
@@ -462,16 +462,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   862
+#define YYLAST   932
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  82
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  30
+#define YYNNTS  31
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  183
+#define YYNRULES  186
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  455
+#define YYNSTATES  462
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -533,104 +533,105 @@ static const yytype_uint16 yyprhs[] =
      399,   404,   408,   411,   416,   421,   428,   437,   442,   449,
      454,   459,   466,   473,   482,   491,   500,   509,   514,   519,
      524,   531,   536,   543,   548,   553,   556,   559,   563,   567,
-     571,   575,   578,   582,   586,   591,   596,   599,   604,   611,
-     620,   625,   632,   639,   646,   653,   656,   661,   664,   666,
-     668,   670,   672,   674,   676,   678,   680,   685,   687,   689,
-     691,   696,   698,   703,   705,   709,   712,   715,   718,   722,
-     725,   727,   732,   736,   742,   744,   749,   754,   760,   768,
-     769,   771,   772,   775,   778,   780,   782,   784,   786,   788,
-     791,   794,   797,   801,   803,   807,   811,   815,   819,   823,
-     828,   833,   837,   841
+     571,   575,   578,   582,   586,   591,   596,   599,   605,   613,
+     618,   625,   632,   639,   646,   649,   654,   657,   659,   661,
+     663,   665,   667,   669,   671,   673,   678,   680,   682,   684,
+     689,   691,   696,   698,   702,   704,   707,   711,   716,   719,
+     722,   725,   729,   732,   734,   739,   743,   749,   751,   756,
+     761,   767,   775,   776,   778,   779,   782,   785,   787,   789,
+     791,   793,   795,   798,   801,   804,   808,   810,   814,   818,
+     822,   826,   830,   835,   840,   844,   848
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
       83,     0,    -1,    -1,    83,    84,    -1,    -1,    71,    74,
-      85,    84,    -1,    71,    75,   111,    76,    -1,    73,    75,
-     111,    76,    -1,    58,    76,    -1,    76,    -1,    86,    76,
+      85,    84,    -1,    71,    75,   112,    76,    -1,    73,    75,
+     112,    76,    -1,    58,    76,    -1,    76,    -1,    86,    76,
       -1,     1,    76,    -1,    13,    88,    77,    88,    -1,    13,
-     105,    77,    88,    -1,    13,   104,    77,    88,    -1,    14,
-      88,    77,    88,    -1,    14,   105,    77,    88,    -1,    14,
-     104,    77,    88,    -1,    22,   105,    77,    96,    -1,    22,
-     104,    77,    96,    -1,    22,   101,    77,    96,    -1,    22,
-      96,    77,    96,    -1,    22,    96,    77,   105,    -1,    22,
-      96,    77,   104,    -1,    13,    88,    77,   105,    -1,    13,
-      88,    77,   104,    -1,    14,    88,    77,   105,    -1,    14,
-      88,    77,   104,    -1,    13,    96,    77,   105,    -1,    13,
-      96,    77,   104,    -1,    13,    95,    77,    96,    -1,    13,
-      96,    77,    95,    -1,    13,    96,    77,   102,    77,    95,
-      -1,    13,    95,    77,    97,    -1,    67,   102,    77,   110,
-      -1,    13,    88,    77,   102,    77,    91,    -1,    13,    88,
+     106,    77,    88,    -1,    13,   105,    77,    88,    -1,    14,
+      88,    77,    88,    -1,    14,   106,    77,    88,    -1,    14,
+     105,    77,    88,    -1,    22,   106,    77,    96,    -1,    22,
+     105,    77,    96,    -1,    22,   102,    77,    96,    -1,    22,
+      96,    77,    96,    -1,    22,    96,    77,   106,    -1,    22,
+      96,    77,   105,    -1,    13,    88,    77,   106,    -1,    13,
+      88,    77,   105,    -1,    14,    88,    77,   106,    -1,    14,
+      88,    77,   105,    -1,    13,    96,    77,   106,    -1,    13,
+      96,    77,   105,    -1,    13,    95,    77,    96,    -1,    13,
+      96,    77,    95,    -1,    13,    96,    77,   103,    77,    95,
+      -1,    13,    95,    77,    97,    -1,    67,   103,    77,   111,
+      -1,    13,    88,    77,   103,    77,    91,    -1,    13,    88,
       77,    97,    -1,    13,    88,    77,    91,    -1,    18,    88,
-      77,   103,    77,    88,    -1,    18,   102,    77,   103,    77,
-      88,    -1,    18,    88,    77,   102,    77,    88,    -1,    18,
-      88,    77,    88,    -1,    18,   102,    77,    88,    -1,    16,
-      88,    77,   103,    77,    88,    -1,    16,    88,    77,    88,
-      -1,    17,    88,    77,   103,    77,    88,    -1,    17,    88,
-      77,    88,    -1,    17,   102,    77,   103,    77,    88,    -1,
-      17,   102,    77,    88,    -1,    15,    88,    77,    88,    -1,
-      15,    88,    -1,    68,    88,    77,   103,    77,    88,    -1,
-      13,   102,    77,    88,    -1,    13,   100,    77,    88,    -1,
-      20,    98,    77,    98,    -1,    20,    98,    77,   110,    77,
+      77,   104,    77,    88,    -1,    18,   103,    77,   104,    77,
+      88,    -1,    18,    88,    77,   103,    77,    88,    -1,    18,
+      88,    77,    88,    -1,    18,   103,    77,    88,    -1,    16,
+      88,    77,   104,    77,    88,    -1,    16,    88,    77,    88,
+      -1,    17,    88,    77,   104,    77,    88,    -1,    17,    88,
+      77,    88,    -1,    17,   103,    77,   104,    77,    88,    -1,
+      17,   103,    77,    88,    -1,    15,    88,    77,    88,    -1,
+      15,    88,    -1,    68,    88,    77,   104,    77,    88,    -1,
+      13,   103,    77,    88,    -1,    13,   101,    77,    88,    -1,
+      20,    98,    77,    98,    -1,    20,    98,    77,   111,    77,
       98,    -1,    13,    97,    77,    97,    -1,    13,    94,    77,
       97,    -1,    13,    91,    77,    88,    -1,    13,    94,    77,
       88,    -1,    13,    89,    77,    88,    -1,    13,    88,    77,
       89,    -1,    13,    97,    77,    94,    -1,    13,    88,    77,
-      94,    -1,    21,    87,    -1,    21,   105,    -1,    21,    78,
-      89,    79,    -1,    21,    77,    87,    -1,    21,    77,   105,
+      94,    -1,    21,    87,    -1,    21,   106,    -1,    21,    78,
+      89,    79,    -1,    21,    77,    87,    -1,    21,    77,   106,
       -1,    21,    77,    78,    89,    79,    -1,    21,    97,    77,
-      87,    -1,    21,    97,    77,   105,    -1,    21,    97,    77,
-      78,    89,    79,    -1,    21,   110,    77,    87,    -1,    21,
-     110,    77,   105,    -1,    21,   110,    77,    78,    89,    79,
-      -1,    21,   110,    77,   110,    77,    87,    -1,    21,   110,
-      77,   110,    77,   105,    -1,    21,   110,    77,   110,    77,
-      78,    89,    79,    -1,    27,    88,    77,   103,    -1,    27,
-     102,    77,   103,    -1,    27,    88,   107,    -1,    27,   107,
+      87,    -1,    21,    97,    77,   106,    -1,    21,    97,    77,
+      78,    89,    79,    -1,    21,   111,    77,    87,    -1,    21,
+     111,    77,   106,    -1,    21,   111,    77,    78,    89,    79,
+      -1,    21,   111,    77,   111,    77,    87,    -1,    21,   111,
+      77,   111,    77,   106,    -1,    21,   111,    77,   111,    77,
+      78,    89,    79,    -1,    27,    88,    77,   104,    -1,    27,
+     103,    77,   104,    -1,    27,    88,   108,    -1,    27,   108,
       -1,    23,    96,    77,    96,    -1,    25,    96,    77,    96,
       -1,    25,    96,    77,    96,    77,    96,    -1,    26,    96,
       77,    96,    77,    96,    77,    96,    -1,    24,    96,    77,
       96,    -1,    24,    96,    77,    96,    77,    97,    -1,    19,
-      88,    77,    88,    -1,    19,    88,    77,   102,    -1,    19,
-      88,    77,    88,    77,    97,    -1,    19,    88,    77,   102,
-      77,    97,    -1,    63,   102,    77,    88,    77,   102,    77,
-      88,    -1,    63,   102,    77,    88,    77,    99,    77,    88,
-      -1,    63,    88,    77,    88,    77,   102,    77,    88,    -1,
+      88,    77,    88,    -1,    19,    88,    77,   103,    -1,    19,
+      88,    77,    88,    77,    97,    -1,    19,    88,    77,   103,
+      77,    97,    -1,    63,   103,    77,    88,    77,   103,    77,
+      88,    -1,    63,   103,    77,    88,    77,    99,    77,    88,
+      -1,    63,    88,    77,    88,    77,   103,    77,    88,    -1,
       63,    88,    77,    88,    77,    99,    77,    88,    -1,    64,
-     105,    77,    88,    -1,    64,    88,    77,   105,    -1,    59,
-     104,    77,    88,    -1,    59,   104,    77,   102,    77,    88,
-      -1,    60,    88,    77,   104,    -1,    60,    88,    77,   102,
-      77,   104,    -1,    62,   104,    77,    88,    -1,    62,    88,
-      77,   104,    -1,    61,   104,    -1,    29,   107,    -1,    29,
-      88,   107,    -1,    29,    96,   107,    -1,    29,    77,    88,
-      -1,    29,    77,    96,    -1,    29,   102,    -1,    32,   102,
-     107,    -1,    32,   100,   107,    -1,    56,   102,    77,   102,
-      -1,    57,   102,    77,   105,    -1,    30,   107,    -1,    33,
-     106,    77,   102,    -1,    33,   106,    77,   110,    77,   102,
-      -1,    33,   106,    77,   110,    77,   102,     9,   110,    -1,
-      34,   106,    77,   102,    -1,    34,   106,    77,   110,    77,
-     102,    -1,    35,   106,    11,   110,    77,   102,    -1,    35,
-     106,    11,   110,    77,   100,    -1,    35,   106,    11,   110,
-      77,   101,    -1,    36,   107,    -1,   110,    78,    41,    79,
-      -1,    71,   108,    -1,   103,    -1,    90,    -1,    92,    -1,
-      50,    -1,    47,    -1,    51,    -1,    55,    -1,    53,    -1,
-      52,    78,   110,    79,    -1,    93,    -1,    49,    -1,    45,
-      -1,    48,    78,   110,    79,    -1,    42,    -1,    47,    78,
-     110,    79,    -1,   110,    -1,   110,    77,   110,    -1,    80,
-     105,    -1,    80,    70,    -1,    80,    69,    -1,    80,     9,
-      69,    -1,    80,   110,    -1,    44,    -1,    46,    78,   110,
-      79,    -1,    78,   103,    79,    -1,    78,   103,     8,   103,
-      79,    -1,   106,    -1,   110,    78,   103,    79,    -1,   110,
-      78,   109,    79,    -1,    71,   108,    78,   109,    79,    -1,
-      71,     6,     7,   108,    78,    39,    79,    -1,    -1,    77,
-      -1,    -1,     8,   110,    -1,     9,   110,    -1,    39,    -1,
-      38,    -1,    40,    -1,    37,    -1,    73,    -1,     9,   110,
-      -1,     8,   110,    -1,    81,   110,    -1,    78,   111,    79,
-      -1,   110,    -1,   111,     8,   111,    -1,   111,     9,   111,
-      -1,   111,    10,   111,    -1,   111,    11,   111,    -1,   111,
-      12,   111,    -1,   111,     6,     6,   111,    -1,   111,     7,
-       7,   111,    -1,   111,     5,   111,    -1,   111,     4,   111,
-      -1,   111,     3,   111,    -1
+     106,    77,    88,    -1,    64,    88,    77,   106,    -1,    59,
+     105,    77,    88,    -1,    59,   105,    77,   103,    77,    88,
+      -1,    60,    88,    77,   105,    -1,    60,    88,    77,   103,
+      77,   105,    -1,    62,   105,    77,    88,    -1,    62,    88,
+      77,   105,    -1,    61,   105,    -1,    29,   108,    -1,    29,
+      88,   108,    -1,    29,    96,   108,    -1,    29,    77,    88,
+      -1,    29,    77,    96,    -1,    29,   103,    -1,    32,   103,
+     108,    -1,    32,   101,   108,    -1,    56,   103,    77,   103,
+      -1,    57,   103,    77,   106,    -1,    30,   108,    -1,    33,
+     107,    77,    80,   100,    -1,    33,   107,    77,   111,    77,
+      80,   100,    -1,    34,   107,    77,   103,    -1,    34,   107,
+      77,   111,    77,   103,    -1,    35,   107,    11,   111,    77,
+     103,    -1,    35,   107,    11,   111,    77,   101,    -1,    35,
+     107,    11,   111,    77,   102,    -1,    36,   108,    -1,   111,
+      78,    41,    79,    -1,    71,   109,    -1,   104,    -1,    90,
+      -1,    92,    -1,    50,    -1,    47,    -1,    51,    -1,    55,
+      -1,    53,    -1,    52,    78,   111,    79,    -1,    93,    -1,
+      49,    -1,    45,    -1,    48,    78,   111,    79,    -1,    42,
+      -1,    47,    78,   111,    79,    -1,   111,    -1,   111,    77,
+     111,    -1,    37,    -1,     9,    37,    -1,    37,     9,    37,
+      -1,     9,    37,     9,    37,    -1,    80,   106,    -1,    80,
+      70,    -1,    80,    69,    -1,    80,     9,    69,    -1,    80,
+     111,    -1,    44,    -1,    46,    78,   111,    79,    -1,    78,
+     104,    79,    -1,    78,   104,     8,   104,    79,    -1,   107,
+      -1,   111,    78,   104,    79,    -1,   111,    78,   110,    79,
+      -1,    71,   109,    78,   110,    79,    -1,    71,     6,     7,
+     109,    78,    39,    79,    -1,    -1,    77,    -1,    -1,     8,
+     111,    -1,     9,   111,    -1,    39,    -1,    38,    -1,    40,
+      -1,    37,    -1,    73,    -1,     9,   111,    -1,     8,   111,
+      -1,    81,   111,    -1,    78,   112,    79,    -1,   111,    -1,
+     112,     8,   112,    -1,   112,     9,   112,    -1,   112,    10,
+     112,    -1,   112,    11,   112,    -1,   112,    12,   112,    -1,
+     112,     6,     6,   112,    -1,   112,     7,     7,   112,    -1,
+     112,     5,   112,    -1,   112,     4,   112,    -1,   112,     3,
+     112,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -647,14 +648,14 @@ static const yytype_uint16 yyrline[] =
      428,   432,   436,   443,   447,   451,   455,   459,   463,   470,
      474,   478,   482,   489,   493,   497,   501,   508,   512,   520,
      524,   528,   532,   536,   540,   544,   551,   555,   559,   563,
-     567,   571,   578,   582,   589,   598,   609,   616,   621,   628,
-     638,   643,   652,   656,   660,   667,   673,   679,   690,   698,
-     699,   702,   710,   718,   726,   734,   740,   748,   751,   759,
-     765,   773,   779,   787,   795,   816,   821,   829,   835,   842,
-     850,   851,   859,   866,   876,   877,   886,   894,   902,   911,
-     912,   915,   918,   922,   928,   929,   930,   933,   934,   938,
-     942,   946,   950,   956,   957,   961,   965,   969,   973,   977,
-     981,   985,   989,   993
+     567,   571,   578,   582,   589,   598,   609,   616,   621,   629,
+     634,   643,   647,   651,   658,   664,   670,   681,   689,   690,
+     693,   701,   709,   717,   725,   731,   739,   742,   750,   756,
+     764,   770,   778,   786,   807,   813,   819,   825,   833,   838,
+     846,   852,   859,   867,   868,   876,   883,   893,   894,   903,
+     911,   919,   928,   929,   932,   935,   939,   945,   946,   947,
+     950,   951,   955,   959,   963,   967,   973,   974,   978,   982,
+     986,   990,   994,   998,  1002,  1006,  1010
 };
 #endif
 
@@ -674,9 +675,9 @@ static const char *const yytname[] =
   "LMTFSB", "LMA", "LFCONST", "LSCONST", "LNAME", "LLAB", "LVAR", "':'",
   "'='", "';'", "','", "'('", "')'", "'$'", "'~'", "$accept", "prog",
   "line", "@1", "inst", "rel", "rreg", "xlreg", "lr", "lcr", "ctr", "msr",
-  "psr", "fpscr", "freg", "creg", "cbit", "mask", "ximm", "fimm", "imm",
-  "sreg", "regaddr", "addr", "name", "comma", "offset", "pointer", "con",
-  "expr", 0
+  "psr", "fpscr", "freg", "creg", "cbit", "mask", "textsize", "ximm",
+  "fimm", "imm", "sreg", "regaddr", "addr", "name", "comma", "offset",
+  "pointer", "con", "expr", 0
 };
 #endif
 
@@ -712,13 +713,13 @@ static const yytype_uint8 yyr1[] =
       86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
       86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
       86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    87,    87,    88,    89,
-      89,    90,    91,    92,    93,    94,    94,    94,    95,    96,
-      96,    97,    97,    98,    99,   100,   100,   101,   101,   102,
-     103,   103,   104,   104,   105,   105,   106,   106,   106,   107,
-     107,   108,   108,   108,   109,   109,   109,   110,   110,   110,
-     110,   110,   110,   111,   111,   111,   111,   111,   111,   111,
-     111,   111,   111,   111
+      86,    86,    86,    86,    86,    87,    87,    88,    89,    89,
+      90,    91,    92,    93,    94,    94,    94,    95,    96,    96,
+      97,    97,    98,    99,   100,   100,   100,   100,   101,   101,
+     102,   102,   103,   104,   104,   105,   105,   106,   106,   107,
+     107,   107,   108,   108,   109,   109,   109,   110,   110,   110,
+     111,   111,   111,   111,   111,   111,   112,   112,   112,   112,
+     112,   112,   112,   112,   112,   112,   112
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -735,14 +736,14 @@ static const yytype_uint8 yyr2[] =
        4,     3,     2,     4,     4,     6,     8,     4,     6,     4,
        4,     6,     6,     8,     8,     8,     8,     4,     4,     4,
        6,     4,     6,     4,     4,     2,     2,     3,     3,     3,
-       3,     2,     3,     3,     4,     4,     2,     4,     6,     8,
-       4,     6,     6,     6,     6,     2,     4,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
-       4,     1,     4,     1,     3,     2,     2,     2,     3,     2,
-       1,     4,     3,     5,     1,     4,     4,     5,     7,     0,
-       1,     0,     2,     2,     1,     1,     1,     1,     1,     2,
-       2,     2,     3,     1,     3,     3,     3,     3,     3,     4,
-       4,     3,     3,     3
+       3,     2,     3,     3,     4,     4,     2,     5,     7,     4,
+       6,     6,     6,     6,     2,     4,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     4,     1,     1,     1,     4,
+       1,     4,     1,     3,     1,     2,     3,     4,     2,     2,
+       2,     3,     2,     1,     4,     3,     5,     1,     4,     4,
+       5,     7,     0,     1,     0,     2,     2,     1,     1,     1,
+       1,     1,     2,     2,     2,     3,     1,     3,     3,     3,
+       3,     3,     4,     4,     3,     3,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -751,120 +752,124 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint8 yydefact[] =
 {
        2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   159,   159,
-     159,     0,     0,     0,     0,   159,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   162,   162,
+     162,     0,     0,     0,     0,   162,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     9,
-       3,     0,    11,     0,     0,   167,   141,   150,   139,     0,
-     132,     0,   138,   131,   133,     0,   135,   134,   161,   168,
-       0,     0,     0,     0,     0,   129,     0,   130,   137,     0,
-       0,     0,     0,     0,     0,   128,     0,     0,   154,     0,
+       3,     0,    11,     0,     0,   170,   140,   153,   138,     0,
+     131,     0,   137,   130,   132,     0,   134,   133,   164,   171,
+       0,     0,     0,     0,     0,   128,     0,   129,   136,     0,
+       0,     0,     0,     0,     0,   127,     0,     0,   157,     0,
        0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   143,     0,   161,     0,     0,    64,     0,
+       0,     0,     0,   142,     0,   164,     0,     0,    64,     0,
       65,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   160,   159,     0,    82,   160,   159,   159,   111,   106,
-     116,   159,   159,     0,     0,     0,     0,   125,     0,     0,
+       0,   163,   162,     0,    82,   163,   162,   162,   111,   106,
+     116,   162,   162,     0,     0,     0,     0,   124,     0,     0,
        8,     0,     0,     0,   105,     0,     0,     0,     0,     0,
-       0,     0,     0,     4,     0,     0,    10,   170,   169,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   173,     0,
-     146,   145,   149,   171,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     4,     0,     0,    10,   173,   172,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   176,     0,
+     149,   148,   152,   174,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   149,     0,     0,     0,     0,     0,     0,   127,     0,
-      67,    68,     0,     0,     0,     0,     0,     0,   147,     0,
-       0,     0,     0,     0,     0,     0,     0,   160,    81,     0,
+       0,   152,     0,     0,     0,     0,     0,     0,   126,     0,
+      67,    68,     0,     0,     0,     0,     0,     0,   150,     0,
+       0,     0,     0,     0,     0,     0,     0,   163,    81,     0,
      109,   110,   107,   108,   113,   112,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   161,
-     162,   163,     0,     0,   152,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   172,    12,    61,    37,    63,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   164,
+     165,   166,     0,     0,   155,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   175,    12,    61,    37,    63,
       36,     0,    25,    24,    60,    58,    59,    57,    30,    33,
       31,     0,    29,    28,    62,    56,    53,    52,    14,    13,
-     165,   164,   166,     0,     0,    15,    27,    26,    17,    16,
-      49,    44,   128,    46,   128,    48,   128,    41,     0,   128,
-      42,   128,    89,    90,    54,   143,     0,    66,     0,    70,
-      71,     0,    73,    74,     0,     0,   148,    21,    23,    22,
-      20,    19,    18,    83,    87,    84,     0,    79,    80,   117,
-       0,   120,     0,     0,   114,   115,    99,     0,     0,   101,
+     168,   167,   169,     0,     0,    15,    27,    26,    17,    16,
+      49,    44,   127,    46,   127,    48,   127,    41,     0,   127,
+      42,   127,    89,    90,    54,   142,     0,    66,     0,    70,
+      71,     0,    73,    74,     0,     0,   151,    21,    23,    22,
+      20,    19,    18,    83,    87,    84,     0,    79,    80,     0,
+       0,   119,     0,     0,   114,   115,    99,     0,     0,   101,
      104,   103,     0,     0,    98,    97,    34,     0,     5,     6,
-       7,   151,   142,   140,   136,     0,     0,     0,   183,   182,
-     181,     0,     0,   174,   175,   176,   177,   178,     0,     0,
-     155,   156,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,     0,   126,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   157,   153,
-     179,   180,   132,    35,    32,    43,    45,    47,    40,    38,
-      39,    91,    92,    55,    72,    75,     0,    76,    77,    88,
-      85,     0,   118,   121,     0,   123,   124,   122,   100,   102,
-       0,     0,     0,     0,     0,    51,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   158,    78,    86,   119,
-      96,    95,   144,    94,    93
+       7,   154,   141,   139,   135,     0,     0,     0,   186,   185,
+     184,     0,     0,   177,   178,   179,   180,   181,     0,     0,
+     158,   159,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,   125,     0,     0,     0,     0,
+     144,   117,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   160,   156,   182,   183,   131,    35,    32,    43,    45,
+      47,    40,    38,    39,    91,    92,    55,    72,    75,     0,
+      76,    77,    88,    85,     0,   145,     0,     0,   120,     0,
+     122,   123,   121,   100,   102,     0,     0,     0,     0,     0,
+      51,     0,     0,     0,     0,   146,   118,     0,     0,     0,
+       0,     0,     0,   161,    78,    86,   147,    96,    95,   143,
+      94,    93
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,    40,   232,    41,    98,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    92,   430,    73,   104,
-      74,    75,    76,   161,    78,   114,   156,   284,   158,   159
+      67,    68,    69,    70,    71,    72,    92,   435,   391,    73,
+     104,    74,    75,    76,   161,    78,   114,   156,   284,   158,
+     159
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -178
+#define YYPACT_NINF -179
 static const yytype_int16 yypact[] =
 {
-    -178,   494,  -178,   -50,   591,    30,    -1,    -1,    20,    20,
-      -1,   317,   315,   615,    17,    17,    17,    17,    48,     9,
-     -42,   -17,   720,   720,   720,   -42,   -12,   -12,    26,    -3,
-      -1,    -3,     0,    20,   639,   -12,    -1,    63,    13,  -178,
-    -178,    33,  -178,   317,   317,  -178,  -178,  -178,  -178,    38,
-      42,    52,  -178,  -178,  -178,    55,  -178,  -178,   198,  -178,
-     690,   696,   317,    35,    72,  -178,    76,  -178,  -178,    81,
-      93,    99,   105,   107,   117,  -178,   124,   131,  -178,   135,
-     155,   160,   161,   164,   165,   317,   171,   172,   176,   179,
-     182,   317,   184,  -178,    42,   198,   743,   722,  -178,   185,
-    -178,   121,     3,   200,   202,   204,   209,   214,   215,   218,
-     220,  -178,   223,   225,  -178,   181,   -42,   -42,  -178,  -178,
-    -178,   -42,   -42,   230,   180,   233,    79,  -178,   234,   238,
-    -178,    -1,   240,   250,  -178,   251,   253,   254,   255,   256,
-     264,   266,   269,  -178,   317,   317,  -178,  -178,  -178,   317,
-     317,   317,   317,   277,   317,   317,   271,    34,  -178,    12,
-    -178,  -178,   135,  -178,   371,    -1,    -1,   259,   109,   645,
-     192,    -1,    -1,    -1,    -1,   320,    30,    -1,    -1,    -1,
-      -1,  -178,    -1,    -1,    20,    -1,    20,   317,   271,   722,
-    -178,  -178,   275,   265,   747,   767,   106,   286,  -178,   666,
-      17,    17,    17,    17,    17,    17,    17,    -1,  -178,    -1,
-    -178,  -178,  -178,  -178,  -178,  -178,   267,   125,   267,   317,
-     -12,   720,    20,    -7,    -3,    -1,    -1,    -1,   720,    -1,
-     317,    -1,   558,   458,   532,   296,   299,   302,   303,   207,
-    -178,  -178,   125,    -1,  -178,   317,   317,   317,   350,   358,
-     317,   317,   317,   317,   317,  -178,  -178,  -178,  -178,  -178,
-    -178,   300,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,
-    -178,   306,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,
-    -178,  -178,  -178,   305,   310,  -178,  -178,  -178,  -178,  -178,
-    -178,  -178,   322,  -178,   323,  -178,   324,  -178,   328,   329,
-    -178,   330,   332,   333,  -178,   335,   340,  -178,   722,  -178,
-    -178,   722,  -178,  -178,   141,   346,  -178,  -178,  -178,  -178,
-    -178,  -178,  -178,  -178,   337,   351,   352,  -178,  -178,  -178,
-     355,  -178,   356,   364,  -178,  -178,  -178,   368,   370,  -178,
-    -178,  -178,   373,   376,  -178,  -178,  -178,   377,  -178,  -178,
-    -178,  -178,  -178,  -178,  -178,   316,   348,   369,   825,   850,
-     493,   317,   317,    40,    40,  -178,  -178,  -178,   388,   409,
-    -178,  -178,    -1,    -1,    -1,    -1,    -1,    -1,    14,    14,
-     317,  -178,   380,   392,   773,  -178,    14,    17,    17,   -12,
-     -12,   393,    -1,    -3,   267,   267,    -1,   433,  -178,  -178,
-     472,   472,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,
-    -178,  -178,  -178,  -178,  -178,  -178,   722,  -178,  -178,  -178,
-    -178,   397,   468,  -178,   672,  -178,  -178,  -178,  -178,  -178,
-     401,   411,   412,   415,   416,  -178,   417,   418,    17,   317,
-     365,    -1,    -1,   317,    -1,    -1,  -178,  -178,  -178,  -178,
-    -178,  -178,  -178,  -178,  -178
+    -179,   484,  -179,   -64,   581,   686,    74,    74,   -24,   -24,
+      74,   845,   641,   656,   -29,   -29,   -29,   -29,    19,   -11,
+     -54,   -38,   747,   747,   747,   -54,   -19,   -19,   -50,    -6,
+      74,    -6,   -14,   -24,   707,   -19,    74,   -36,    18,  -179,
+    -179,     2,  -179,   845,   845,  -179,  -179,  -179,  -179,    24,
+      27,    48,  -179,  -179,  -179,    61,  -179,  -179,   188,  -179,
+     717,   738,   845,    79,    81,  -179,    93,  -179,  -179,    99,
+     107,   116,   126,   127,   130,  -179,   132,   133,  -179,    87,
+     136,   138,   157,   159,   171,   845,   176,   179,   182,   184,
+     186,   845,   194,  -179,    27,   188,   762,   764,  -179,   196,
+    -179,    66,     8,   198,   200,   201,   202,   203,   206,   215,
+     216,  -179,   217,   219,  -179,   181,   -54,   -54,  -179,  -179,
+    -179,   -54,   -54,   220,   167,   221,   178,  -179,   223,   224,
+    -179,    74,   225,   226,  -179,   227,   231,   232,   233,   234,
+     236,   237,   238,  -179,   845,   845,  -179,  -179,  -179,   845,
+     845,   845,   845,   242,   845,   845,   229,     3,  -179,   377,
+    -179,  -179,    87,  -179,   629,    74,    74,   172,    26,   732,
+      39,    74,    74,    74,    74,   230,   686,    74,    74,    74,
+      74,  -179,    74,    74,   -24,    74,   -24,   845,   229,   764,
+    -179,  -179,   241,   243,   784,   814,   111,   254,  -179,    67,
+     -29,   -29,   -29,   -29,   -29,   -29,   -29,    74,  -179,    74,
+    -179,  -179,  -179,  -179,  -179,  -179,   821,    45,   830,   845,
+     -19,   747,   -24,    49,    -6,    74,    74,    74,   747,    74,
+     845,    74,   548,   463,   518,   246,   247,   248,   249,   155,
+    -179,  -179,    45,    74,  -179,   845,   845,   845,   323,   325,
+     845,   845,   845,   845,   845,  -179,  -179,  -179,  -179,  -179,
+    -179,   259,  -179,  -179,  -179,  -179,  -179,  -179,  -179,  -179,
+    -179,   260,  -179,  -179,  -179,  -179,  -179,  -179,  -179,  -179,
+    -179,  -179,  -179,   265,   266,  -179,  -179,  -179,  -179,  -179,
+    -179,  -179,   269,  -179,   270,  -179,   272,  -179,   278,   279,
+    -179,   280,   283,   284,  -179,   285,   275,  -179,   764,  -179,
+    -179,   764,  -179,  -179,   105,   286,  -179,  -179,  -179,  -179,
+    -179,  -179,  -179,  -179,   289,   296,   297,  -179,  -179,     9,
+     299,  -179,   301,   319,  -179,  -179,  -179,   320,   321,  -179,
+    -179,  -179,   324,   327,  -179,  -179,  -179,   328,  -179,  -179,
+    -179,  -179,  -179,  -179,  -179,   329,   333,   334,   591,   430,
+     451,   845,   845,    78,    78,  -179,  -179,  -179,   316,   353,
+    -179,  -179,    74,    74,    74,    74,    74,    74,    20,    20,
+     845,  -179,   335,   336,   841,  -179,    20,   -29,   -29,   369,
+     399,  -179,   338,   -19,   339,    74,    -6,   830,   830,    74,
+     382,  -179,  -179,   277,   277,  -179,  -179,  -179,  -179,  -179,
+    -179,  -179,  -179,  -179,  -179,  -179,  -179,  -179,  -179,   764,
+    -179,  -179,  -179,  -179,   345,   414,   387,     9,  -179,   322,
+    -179,  -179,  -179,  -179,  -179,   350,   351,   352,   354,   355,
+    -179,   366,   372,   -29,   393,  -179,  -179,   851,    74,    74,
+     845,    74,    74,  -179,  -179,  -179,  -179,  -179,  -179,  -179,
+    -179,  -179
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -178,  -178,   290,  -178,  -178,   -88,    -5,   -65,  -178,  -157,
-    -178,  -178,  -134,  -160,    68,    25,  -177,   130,   -15,   140,
-      96,   154,    64,   114,   298,   177,   -84,   291,    36,  -111
+    -179,  -179,   222,  -179,  -179,   -72,    -5,   -61,  -179,  -157,
+    -179,  -179,  -149,  -161,    38,    31,  -178,    50,    28,   -15,
+      58,    98,   168,    82,    96,   112,    25,   -85,   211,    36,
+      88
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -874,184 +879,198 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint16 yytable[] =
 {
-      80,    83,    84,    86,    88,    90,   121,   258,   190,   270,
-     304,   188,   197,   112,   116,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   133,    42,   135,   137,   139,
-     259,   142,   193,   233,   234,   111,   274,    99,    43,    44,
-      79,    79,   243,    47,    47,    49,    49,    93,   101,    79,
-     252,   253,   254,    47,    48,    49,    46,    51,   124,   124,
-     124,    94,    48,    61,    47,    51,    49,    45,    85,    81,
-      79,   131,   198,    85,    47,   131,    49,   105,   131,   147,
-     148,   103,   107,   108,   109,   110,   115,   117,   145,    85,
-     219,   255,    47,   132,    49,   134,   136,   162,   163,   257,
-      85,    58,   130,    59,    87,    89,   309,   312,    60,   146,
-     210,    62,   164,   244,   113,   118,   149,   122,    77,    82,
-     150,   181,   128,   129,   306,   111,   100,   106,    85,   138,
-     151,   141,   192,   152,   358,   359,   360,   143,   144,   363,
-     364,   365,   366,   367,   280,   281,   282,   315,   140,   165,
-      47,    46,    49,   166,    48,   355,    94,    51,   167,   256,
-     264,   265,   266,   280,   281,   282,   276,   277,   278,   279,
-     168,   285,   288,   289,   290,   291,   169,   293,   295,   297,
-     300,   302,   170,   211,   171,   235,   236,   237,   238,   260,
-     240,   241,   267,   269,   172,   275,   119,   120,   195,   196,
-      79,   173,   127,   413,   153,    79,   154,   155,   174,   404,
-     191,   403,    79,   175,   157,   154,   155,   336,   384,   196,
-     341,   342,   343,   305,   345,    47,    48,    49,   262,    51,
-     192,   314,   176,   272,    46,    79,   268,   177,   178,    94,
-     286,   179,   180,   382,    55,    56,   383,    57,   182,   183,
-     400,   401,   330,   184,   332,   333,   185,    79,   217,   186,
-     261,   187,   194,   318,    79,   271,   346,   317,   320,   321,
-     322,   323,   324,   325,   326,    43,    44,   199,   263,   200,
-     298,   201,   303,   273,   239,   157,   202,   339,   340,   208,
-     287,   203,   204,   212,   213,   205,   417,   206,   214,   215,
-     207,    46,   209,    47,    45,    49,    94,   216,   310,   313,
-     218,   220,   329,   319,   331,   221,   334,   222,   337,   338,
-     123,   125,   126,    43,    44,    43,    44,   223,   224,   283,
-     225,   226,   227,   228,   292,   335,   294,   296,   299,   301,
-      59,   229,   344,   230,   307,    91,   231,    85,    62,   242,
-     283,   437,    45,   196,    45,   316,   361,    46,   280,   281,
-     282,   327,    94,   328,    47,   362,    49,   405,   406,   407,
-     408,   409,   410,    43,    44,   351,   425,   368,   352,    43,
-      44,   353,   354,   369,   370,   347,    95,   428,    59,   371,
-      59,   435,    96,    97,   397,    91,    62,   357,    62,   372,
-     373,   374,    45,   411,   412,   375,   376,   377,    45,   378,
-     379,   419,   380,    46,   386,    47,    93,    49,    50,   381,
-     192,    53,    54,    55,    56,   385,    57,   398,   387,   388,
-     432,   432,   389,   390,   316,   402,   450,   451,    59,   453,
-     454,   391,    58,    91,    59,   392,    62,   393,   399,    60,
-     394,    85,    62,   395,   396,   420,   421,   429,    52,   414,
-     162,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   415,   436,   424,   438,   449,   148,   439,   441,   452,
-     250,   251,   252,   253,   254,   422,   423,   427,   442,   443,
-     431,   434,   444,   445,     2,     3,   446,   447,   418,   248,
-     249,   250,   251,   252,   253,   254,   448,     4,     5,     6,
+      80,    83,    84,    86,    88,    90,   121,   258,   270,   304,
+     188,   243,    42,   112,   116,   259,    48,   197,   389,    51,
+      47,   274,    49,   111,   190,   133,   130,   135,   137,   139,
+      47,   142,    49,    47,    48,    49,   193,    51,   143,   144,
+      79,    79,    61,    99,   119,   120,   390,    93,   101,    79,
+     127,   103,   107,   108,   109,   110,    85,   117,   124,   124,
+     124,    85,    46,    47,   131,    49,   115,    94,    46,    85,
+      79,    48,   131,    94,    51,    43,    44,   198,   146,   147,
+     148,    46,   244,   280,   281,   282,    94,    81,   252,   253,
+     254,    55,    56,   145,    57,   105,   111,   162,   163,    85,
+      77,    82,   149,   257,    45,   150,    87,    89,   100,   106,
+     210,   132,    48,   134,   136,    51,   113,   118,    47,   122,
+      49,   181,   309,   312,   128,   129,   151,   131,   306,    85,
+     140,   138,   192,   141,   123,   125,   126,   208,    58,   152,
+      59,   212,   213,   195,   196,    60,   214,   215,    62,   280,
+     281,   282,   315,   211,   355,    47,   164,    49,   165,   256,
+     264,   265,   266,   154,   155,   175,   276,   277,   278,   279,
+     166,   285,   288,   289,   290,   291,   167,   293,   295,   297,
+     300,   302,   384,   196,   168,   235,   236,   237,   238,   219,
+     240,   241,   191,   169,   153,   260,   154,   155,   267,   269,
+      79,   275,   416,   170,   171,    79,   268,   172,   407,   173,
+     174,   406,    79,   176,    46,   177,    47,   336,    49,    94,
+     341,   342,   343,   305,   345,    47,    48,    49,   157,    51,
+     192,   314,   233,   234,   178,    79,   179,   317,   320,   321,
+     322,   323,   324,   325,   326,   217,   262,   382,   180,   239,
+     383,   272,   330,   182,   332,   333,   183,    79,   286,   184,
+     263,   185,   261,   186,    79,   273,   346,   271,   280,   281,
+     282,   187,   287,   194,    47,   199,    49,   200,   201,   202,
+     203,   318,   298,   204,   303,   250,   251,   252,   253,   254,
+     310,   313,   205,   206,   207,   319,   209,   216,   218,   157,
+     220,   221,   222,   223,   224,   339,   340,   242,   225,   226,
+     227,   228,   420,   229,   230,   231,   331,   335,   334,   196,
+     337,   338,   307,   316,   344,   351,   352,   353,   354,   361,
+      43,   447,   362,   358,   359,   360,   368,   369,   363,   364,
+     365,   366,   367,   283,   370,   371,   372,   373,   292,   374,
+     294,   296,   299,   301,   381,   375,   376,   377,   442,    45,
+     378,   379,   380,   405,   283,   385,   386,   408,   409,   410,
+     411,   412,   413,   387,   388,   327,   392,   328,   393,   430,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     433,   198,   160,    58,   440,    59,   394,   395,   396,   347,
+      91,   397,    52,    62,   398,   399,   425,   400,   426,   414,
+     415,   357,   401,   402,   417,   418,    93,   422,   427,   429,
+     192,   441,   443,   444,   445,   423,   424,   448,   449,   450,
+     456,   451,   452,   437,   437,   247,   248,   249,   250,   251,
+     252,   253,   254,   457,   458,   453,   460,   461,   438,   403,
+     404,   454,   431,   356,   348,   446,   255,   248,   249,   250,
+     251,   252,   253,   254,     0,   162,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,     0,     0,   434,     0,
+     421,   455,     0,   148,     2,     3,   459,     0,     0,     0,
+       0,   428,   432,     0,     0,   436,   439,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,   348,    19,    20,   433,    21,    22,    23,    24,
-      25,   426,     0,   356,   349,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,     0,     0,     0,     0,     0,
+      17,    18,     0,    19,    20,     0,    21,    22,    23,    24,
+      25,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,     0,     0,     0,     0,     0,     0,     0,     0,   349,
       26,    27,    28,    29,    30,    31,    32,    33,    34,     3,
        0,    35,    36,     0,     0,    37,     0,    38,     0,     0,
       39,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,     0,    19,    20,     0,
       21,    22,    23,    24,    25,     0,     0,     0,     0,    43,
-      44,     0,     0,     0,     0,     0,     0,     0,   350,     0,
-       0,     0,     0,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    43,    44,    35,    36,     0,    45,    37,
+      44,     0,     0,     0,   350,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,     0,     0,    35,    36,     0,    45,    37,
        0,    38,     0,    46,    39,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,     0,    57,    43,    44,     0,
-       0,     0,    45,    43,    44,     0,     0,     0,     0,     0,
-      48,     0,    58,    51,    59,     0,     0,     0,     0,    60,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+      44,     0,    58,     0,    59,     0,     0,     0,     0,    60,
        0,    61,    62,     0,    43,    44,    45,     0,     0,     0,
-      43,   440,    45,    47,     0,    49,    58,     0,    59,     0,
-       0,     0,     0,    60,    52,   102,    62,     0,    43,    44,
-       0,     0,     0,    45,    43,    44,     0,     0,     0,    45,
-      58,    48,    59,     0,    51,     0,    58,    91,    59,     0,
-      62,     0,     0,    60,     0,    85,    62,    45,    43,    44,
-      43,    44,     0,    45,    47,     0,    49,    58,     0,    59,
-       0,   198,   160,    58,    60,    59,     0,    62,     0,     0,
-      91,    43,    44,    62,     0,    43,    44,    45,     0,    45,
-       0,     0,     0,    59,     0,     0,   160,    58,    91,    59,
-       0,    62,    53,    54,    91,    43,    44,    62,     0,     0,
-      45,    43,    44,     0,    45,     0,     0,     0,     0,     0,
-       0,    58,     0,    59,     0,    59,     0,     0,    91,     0,
-      91,    62,     0,    62,    45,     0,     0,     0,     0,     0,
-      45,     0,     0,     0,    95,     0,    59,     0,    95,     0,
-      59,   189,     0,     0,    62,   308,     0,     0,    62,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,    95,     0,
-      59,     0,     0,     0,    95,   311,    59,     0,    62,     0,
-       0,   416,     0,     0,    62,   247,   248,   249,   250,   251,
-     252,   253,   254
+       0,    46,     0,    47,     0,    49,    50,     0,    45,    53,
+      54,    55,    56,    46,    57,     0,     0,     0,    94,     0,
+       0,     0,     0,    45,    43,    44,     0,     0,     0,     0,
+      58,    48,    59,     0,    51,     0,     0,    60,     0,    85,
+      62,     0,    95,     0,    59,    43,    44,     0,    96,    97,
+       0,     0,    62,    45,     0,    43,    44,    58,     0,    59,
+      47,     0,    49,     0,    60,     0,   102,    62,     0,     0,
+      43,    44,     0,     0,    45,     0,    43,    44,     0,     0,
+       0,    47,     0,    49,    45,    43,    44,    58,     0,    59,
+       0,    47,     0,    49,    60,     0,     0,    62,     0,    45,
+      43,    44,    43,    44,     0,    45,     0,     0,    58,     0,
+      59,    52,     0,     0,    45,    91,     0,     0,    62,     0,
+      59,     0,    43,    44,     0,    91,     0,     0,    62,    45,
+       0,    45,     0,    58,     0,    59,     0,     0,   160,    58,
+      60,    59,    85,    62,    53,    54,    91,     0,    58,    62,
+      59,    45,    43,    44,     0,    91,     0,     0,    62,    43,
+      44,     0,     0,    95,     0,    59,     0,    59,    43,    44,
+     189,     0,    91,    62,     0,    62,     0,     0,     0,    43,
+      44,    45,     0,    43,    44,    95,     0,    59,    45,    43,
+      44,     0,   308,     0,     0,    62,     0,    45,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
+       0,     0,    45,     0,     0,    95,     0,    59,    45,     0,
+       0,     0,   311,     0,    59,    62,     0,     0,     0,    91,
+       0,   329,    62,    59,     0,     0,     0,     0,    91,     0,
+      85,    62,    95,     0,    59,     0,     0,     0,    59,   419,
+     316,     0,    62,    91,    59,     0,    62,     0,     0,    91,
+       0,     0,    62
 };
 
 static const yytype_int16 yycheck[] =
 {
-       5,     6,     7,     8,     9,    10,    21,   164,    96,   169,
-     187,    95,     9,    18,    19,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    30,    76,    32,    33,    34,
-     164,    36,    97,   144,   145,    77,   170,    12,     8,     9,
-       4,     5,     8,    44,    44,    46,    46,    11,    12,    13,
-      10,    11,    12,    44,    45,    46,    42,    48,    22,    23,
-      24,    47,    45,    80,    44,    48,    46,    37,    80,     5,
-      34,    78,    69,    80,    44,    78,    46,    13,    78,    43,
-      44,    13,    14,    15,    16,    17,    77,    19,    75,    80,
-      11,    79,    44,    29,    46,    31,    32,    61,    62,   164,
-      80,    71,    76,    73,     8,     9,   194,   195,    78,    76,
-     115,    81,    77,    79,    18,    19,    78,    21,     4,     5,
-      78,    85,    26,    27,   189,    77,    12,    13,    80,    33,
-      78,    35,    96,    78,   245,   246,   247,    74,    75,   250,
-     251,   252,   253,   254,    38,    39,    40,    41,    34,    77,
-      44,    42,    46,    77,    45,   239,    47,    48,    77,   164,
-     165,   166,   167,    38,    39,    40,   171,   172,   173,   174,
+       5,     6,     7,     8,     9,    10,    21,   164,   169,   187,
+      95,     8,    76,    18,    19,   164,    45,     9,     9,    48,
+      44,   170,    46,    77,    96,    30,    76,    32,    33,    34,
+      44,    36,    46,    44,    45,    46,    97,    48,    74,    75,
+       4,     5,    80,    12,    19,    20,    37,    11,    12,    13,
+      25,    13,    14,    15,    16,    17,    80,    19,    22,    23,
+      24,    80,    42,    44,    78,    46,    77,    47,    42,    80,
+      34,    45,    78,    47,    48,     8,     9,    69,    76,    43,
+      44,    42,    79,    38,    39,    40,    47,     5,    10,    11,
+      12,    52,    53,    75,    55,    13,    77,    61,    62,    80,
+       4,     5,    78,   164,    37,    78,     8,     9,    12,    13,
+     115,    29,    45,    31,    32,    48,    18,    19,    44,    21,
+      46,    85,   194,   195,    26,    27,    78,    78,   189,    80,
+      34,    33,    96,    35,    22,    23,    24,   112,    71,    78,
+      73,   116,   117,    77,    78,    78,   121,   122,    81,    38,
+      39,    40,    41,   115,   239,    44,    77,    46,    77,   164,
+     165,   166,   167,     8,     9,    78,   171,   172,   173,   174,
       77,   176,   177,   178,   179,   180,    77,   182,   183,   184,
-     185,   186,    77,   115,    77,   149,   150,   151,   152,   164,
-     154,   155,   167,   168,    77,   170,    19,    20,    77,    78,
-     164,    77,    25,   380,     6,   169,     8,     9,    77,   369,
-      96,   368,   176,    78,    60,     8,     9,   222,    77,    78,
-     225,   226,   227,   187,   229,    44,    45,    46,   164,    48,
-     194,   195,    77,   169,    42,   199,   168,    77,    77,    47,
-     176,    77,    77,   308,    52,    53,   311,    55,    77,    77,
-     361,   362,   216,    77,   218,   219,    77,   221,    78,    77,
-     164,    77,    77,   199,   228,   169,   230,   199,   200,   201,
-     202,   203,   204,   205,   206,     8,     9,    77,   164,    77,
-     184,    77,   186,   169,     7,   131,    77,   223,   224,   112,
-     176,    77,    77,   116,   117,    77,   384,    77,   121,   122,
-      77,    42,    77,    44,    37,    46,    47,    77,   194,   195,
-      77,    77,   216,   199,   218,    77,   220,    77,   222,   223,
-      22,    23,    24,     8,     9,     8,     9,    77,    77,   175,
-      77,    77,    77,    77,   180,   221,   182,   183,   184,   185,
-      73,    77,   228,    77,    79,    78,    77,    80,    81,    78,
-     196,   416,    37,    78,    37,    69,     6,    42,    38,    39,
-      40,   207,    47,   209,    44,     7,    46,   372,   373,   374,
-     375,   376,   377,     8,     9,    79,   391,    77,    79,     8,
-       9,    79,    79,    77,    79,   231,    71,   392,    73,    79,
-      73,   396,    77,    78,    78,    78,    81,   243,    81,    77,
-      77,    77,    37,   378,   379,    77,    77,    77,    37,    77,
-      77,   386,    77,    42,    77,    44,   380,    46,    47,    79,
-     384,    50,    51,    52,    53,    79,    55,    79,    77,    77,
-     394,   395,    77,    77,    69,    47,   441,   442,    73,   444,
-     445,    77,    71,    78,    73,    77,    81,    77,    79,    78,
-      77,    80,    81,    77,    77,   387,   388,   393,    49,    79,
-     424,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    79,    39,    80,    77,   439,   440,     9,    77,   443,
-       8,     9,    10,    11,    12,   389,   390,   391,    77,    77,
-     394,   395,    77,    77,     0,     1,    79,    79,   384,     6,
-       7,     8,     9,    10,    11,    12,   438,    13,    14,    15,
+     185,   186,    77,    78,    77,   149,   150,   151,   152,    11,
+     154,   155,    96,    77,     6,   164,     8,     9,   167,   168,
+     164,   170,   380,    77,    77,   169,   168,    77,   369,    77,
+      77,   368,   176,    77,    42,    77,    44,   222,    46,    47,
+     225,   226,   227,   187,   229,    44,    45,    46,    60,    48,
+     194,   195,   144,   145,    77,   199,    77,   199,   200,   201,
+     202,   203,   204,   205,   206,    78,   164,   308,    77,     7,
+     311,   169,   216,    77,   218,   219,    77,   221,   176,    77,
+     164,    77,   164,    77,   228,   169,   230,   169,    38,    39,
+      40,    77,   176,    77,    44,    77,    46,    77,    77,    77,
+      77,   199,   184,    77,   186,     8,     9,    10,    11,    12,
+     194,   195,    77,    77,    77,   199,    77,    77,    77,   131,
+      77,    77,    77,    77,    77,   223,   224,    78,    77,    77,
+      77,    77,   384,    77,    77,    77,   218,   221,   220,    78,
+     222,   223,    79,    69,   228,    79,    79,    79,    79,     6,
+       8,     9,     7,   245,   246,   247,    77,    77,   250,   251,
+     252,   253,   254,   175,    79,    79,    77,    77,   180,    77,
+     182,   183,   184,   185,    79,    77,    77,    77,   419,    37,
+      77,    77,    77,    47,   196,    79,    77,   372,   373,   374,
+     375,   376,   377,    77,    77,   207,    77,   209,    77,   394,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+     395,    69,    70,    71,   399,    73,    77,    77,    77,   231,
+      78,    77,    49,    81,    77,    77,    37,    78,     9,   378,
+     379,   243,    79,    79,    79,    79,   380,   386,    80,    80,
+     384,    39,    77,     9,    37,   387,   388,    77,    77,    77,
+      37,    77,    77,   397,   398,     5,     6,     7,     8,     9,
+      10,    11,    12,   448,   449,    79,   451,   452,   398,   361,
+     362,    79,   394,   242,   232,   427,    79,     6,     7,     8,
+       9,    10,    11,    12,    -1,   429,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    -1,    -1,   396,    -1,
+     384,   443,    -1,   447,     0,     1,   450,    -1,    -1,    -1,
+      -1,   393,   394,    -1,    -1,   397,   398,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   232,    29,    30,   395,    32,    33,    34,    35,
-      36,   391,    -1,   242,    76,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      26,    27,    -1,    29,    30,    -1,    32,    33,    34,    35,
+      36,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
       56,    57,    58,    59,    60,    61,    62,    63,    64,     1,
       -1,    67,    68,    -1,    -1,    71,    -1,    73,    -1,    -1,
       76,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    -1,    29,    30,    -1,
       32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,     8,
-       9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,     8,     9,    67,    68,    -1,    37,    71,
+       9,    -1,    -1,    -1,    76,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    -1,    -1,    67,    68,    -1,    37,    71,
       -1,    73,    -1,    42,    76,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    -1,    55,     8,     9,    -1,
-      -1,    -1,    37,     8,     9,    -1,    -1,    -1,    -1,    -1,
-      45,    -1,    71,    48,    73,    -1,    -1,    -1,    -1,    78,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
+       9,    -1,    71,    -1,    73,    -1,    -1,    -1,    -1,    78,
       -1,    80,    81,    -1,     8,     9,    37,    -1,    -1,    -1,
-       8,     9,    37,    44,    -1,    46,    71,    -1,    73,    -1,
-      -1,    -1,    -1,    78,    49,    80,    81,    -1,     8,     9,
-      -1,    -1,    -1,    37,     8,     9,    -1,    -1,    -1,    37,
-      71,    45,    73,    -1,    48,    -1,    71,    78,    73,    -1,
-      81,    -1,    -1,    78,    -1,    80,    81,    37,     8,     9,
-       8,     9,    -1,    37,    44,    -1,    46,    71,    -1,    73,
-      -1,    69,    70,    71,    78,    73,    -1,    81,    -1,    -1,
-      78,     8,     9,    81,    -1,     8,     9,    37,    -1,    37,
-      -1,    -1,    -1,    73,    -1,    -1,    70,    71,    78,    73,
-      -1,    81,    50,    51,    78,     8,     9,    81,    -1,    -1,
-      37,     8,     9,    -1,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,    71,    -1,    73,    -1,    73,    -1,    -1,    78,    -1,
-      78,    81,    -1,    81,    37,    -1,    -1,    -1,    -1,    -1,
-      37,    -1,    -1,    -1,    71,    -1,    73,    -1,    71,    -1,
-      73,    78,    -1,    -1,    81,    78,    -1,    -1,    81,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    71,    -1,
-      73,    -1,    -1,    -1,    71,    78,    73,    -1,    81,    -1,
-      -1,    78,    -1,    -1,    81,     5,     6,     7,     8,     9,
-      10,    11,    12
+      -1,    42,    -1,    44,    -1,    46,    47,    -1,    37,    50,
+      51,    52,    53,    42,    55,    -1,    -1,    -1,    47,    -1,
+      -1,    -1,    -1,    37,     8,     9,    -1,    -1,    -1,    -1,
+      71,    45,    73,    -1,    48,    -1,    -1,    78,    -1,    80,
+      81,    -1,    71,    -1,    73,     8,     9,    -1,    77,    78,
+      -1,    -1,    81,    37,    -1,     8,     9,    71,    -1,    73,
+      44,    -1,    46,    -1,    78,    -1,    80,    81,    -1,    -1,
+       8,     9,    -1,    -1,    37,    -1,     8,     9,    -1,    -1,
+      -1,    44,    -1,    46,    37,     8,     9,    71,    -1,    73,
+      -1,    44,    -1,    46,    78,    -1,    -1,    81,    -1,    37,
+       8,     9,     8,     9,    -1,    37,    -1,    -1,    71,    -1,
+      73,    49,    -1,    -1,    37,    78,    -1,    -1,    81,    -1,
+      73,    -1,     8,     9,    -1,    78,    -1,    -1,    81,    37,
+      -1,    37,    -1,    71,    -1,    73,    -1,    -1,    70,    71,
+      78,    73,    80,    81,    50,    51,    78,    -1,    71,    81,
+      73,    37,     8,     9,    -1,    78,    -1,    -1,    81,     8,
+       9,    -1,    -1,    71,    -1,    73,    -1,    73,     8,     9,
+      78,    -1,    78,    81,    -1,    81,    -1,    -1,    -1,     8,
+       9,    37,    -1,     8,     9,    71,    -1,    73,    37,     8,
+       9,    -1,    78,    -1,    -1,    81,    -1,    37,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      -1,    -1,    37,    -1,    -1,    71,    -1,    73,    37,    -1,
+      -1,    -1,    78,    -1,    73,    81,    -1,    -1,    -1,    78,
+      -1,    80,    81,    73,    -1,    -1,    -1,    -1,    78,    -1,
+      80,    81,    71,    -1,    73,    -1,    -1,    -1,    73,    78,
+      69,    -1,    81,    78,    73,    -1,    81,    -1,    -1,    78,
+      -1,    -1,    81
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1065,45 +1084,46 @@ static const yytype_uint8 yystos[] =
       84,    86,    76,     8,     9,    37,    42,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    55,    71,    73,
       78,    80,    81,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,   100,   102,   103,   104,   105,   106,   110,
-      88,   104,   105,    88,    88,    80,    88,   102,    88,   102,
-      88,    78,    98,   110,    47,    71,    77,    78,    87,    97,
-     105,   110,    80,    96,   101,   104,   105,    96,    96,    96,
-      96,    77,    88,   102,   107,    77,    88,    96,   102,   107,
-     107,   100,   102,   106,   110,   106,   106,   107,   102,   102,
-      76,    78,   104,    88,   104,    88,   104,    88,   102,    88,
-     105,   102,    88,    74,    75,    75,    76,   110,   110,    78,
-      78,    78,    78,     6,     8,     9,   108,   103,   110,   111,
-      70,   105,   110,   110,    77,    77,    77,    77,    77,    77,
+      95,    96,    97,   101,   103,   104,   105,   106,   107,   111,
+      88,   105,   106,    88,    88,    80,    88,   103,    88,   103,
+      88,    78,    98,   111,    47,    71,    77,    78,    87,    97,
+     106,   111,    80,    96,   102,   105,   106,    96,    96,    96,
+      96,    77,    88,   103,   108,    77,    88,    96,   103,   108,
+     108,   101,   103,   107,   111,   107,   107,   108,   103,   103,
+      76,    78,   105,    88,   105,    88,   105,    88,   103,    88,
+     106,   103,    88,    74,    75,    75,    76,   111,   111,    78,
+      78,    78,    78,     6,     8,     9,   109,   104,   111,   112,
+      70,   106,   111,   111,    77,    77,    77,    77,    77,    77,
       77,    77,    77,    77,    77,    78,    77,    77,    77,    77,
-      77,   110,    77,    77,    77,    77,    77,    77,   108,    78,
-      87,   105,   110,    89,    77,    77,    78,     9,    69,    77,
-      77,    77,    77,    77,    77,    77,    77,    77,   107,    77,
-      88,    96,   107,   107,   107,   107,    77,    78,    77,    11,
+      77,   111,    77,    77,    77,    77,    77,    77,   109,    78,
+      87,   106,   111,    89,    77,    77,    78,     9,    69,    77,
+      77,    77,    77,    77,    77,    77,    77,    77,   108,    77,
+      88,    96,   108,   108,   108,   108,    77,    78,    77,    11,
       77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
-      77,    77,    85,   111,   111,   110,   110,   110,   110,     7,
-     110,   110,    78,     8,    79,     3,     4,     5,     6,     7,
+      77,    77,    85,   112,   112,   111,   111,   111,   111,     7,
+     111,   111,    78,     8,    79,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    79,    88,    89,    91,    94,
-      97,   102,   104,   105,    88,    88,    88,    97,    96,    97,
-      95,   102,   104,   105,    94,    97,    88,    88,    88,    88,
-      38,    39,    40,   103,   109,    88,   104,   105,    88,    88,
-      88,    88,   103,    88,   103,    88,   103,    88,   102,   103,
-      88,   103,    88,   102,    98,   110,    89,    79,    78,    87,
-     105,    78,    87,   105,   110,    41,    69,    96,   104,   105,
-      96,    96,    96,    96,    96,    96,    96,   103,   103,   102,
-     110,   102,   110,   110,   102,   105,    88,   102,   102,   104,
-     104,    88,    88,    88,   105,    88,   110,   103,    84,    76,
-      76,    79,    79,    79,    79,   108,   109,   103,   111,   111,
-     111,     6,     7,   111,   111,   111,   111,   111,    77,    77,
+      97,   103,   105,   106,    88,    88,    88,    97,    96,    97,
+      95,   103,   105,   106,    94,    97,    88,    88,    88,    88,
+      38,    39,    40,   104,   110,    88,   105,   106,    88,    88,
+      88,    88,   104,    88,   104,    88,   104,    88,   103,   104,
+      88,   104,    88,   103,    98,   111,    89,    79,    78,    87,
+     106,    78,    87,   106,   111,    41,    69,    96,   105,   106,
+      96,    96,    96,    96,    96,    96,    96,   104,   104,    80,
+     111,   103,   111,   111,   103,   106,    88,   103,   103,   105,
+     105,    88,    88,    88,   106,    88,   111,   104,    84,    76,
+      76,    79,    79,    79,    79,   109,   110,   104,   112,   112,
+     112,     6,     7,   112,   112,   112,   112,   112,    77,    77,
       79,    79,    77,    77,    77,    77,    77,    77,    77,    77,
-      77,    79,    89,    89,    77,    79,    77,    77,    77,    77,
-      77,    77,    77,    77,    77,    77,    77,    78,    79,    79,
-     111,   111,    47,    91,    95,    88,    88,    88,    88,    88,
-      88,    97,    97,    98,    79,    79,    78,    87,   105,    97,
-      96,    96,   102,   102,    80,   100,   101,   102,    88,   104,
-      99,   102,   110,    99,   102,    88,    39,    89,    77,     9,
-       9,    77,    77,    77,    77,    77,    79,    79,    96,   110,
-      88,    88,   110,    88,    88
+      77,    79,    89,    89,    77,    79,    77,    77,    77,     9,
+      37,   100,    77,    77,    77,    77,    77,    77,    77,    77,
+      78,    79,    79,   112,   112,    47,    91,    95,    88,    88,
+      88,    88,    88,    88,    97,    97,    98,    79,    79,    78,
+      87,   106,    97,    96,    96,    37,     9,    80,   103,    80,
+     101,   102,   103,    88,   105,    99,   103,   111,    99,   103,
+      88,    39,    89,    77,     9,    37,   100,     9,    77,    77,
+      77,    77,    77,    79,    79,    96,    37,    88,    88,   111,
+      88,    88
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2708,77 +2728,65 @@ yyreduce:
   case 117:
 #line 617 "a.y"
     {
-               settext((yyvsp[(2) - (4)].addr).sym);
-               outcode((yyvsp[(1) - (4)].lval), &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr));
+               settext((yyvsp[(2) - (5)].addr).sym);
+               outcode((yyvsp[(1) - (5)].lval), &(yyvsp[(2) - (5)].addr), 0, &(yyvsp[(5) - (5)].addr));
        }
     break;
 
   case 118:
 #line 622 "a.y"
     {
-               settext((yyvsp[(2) - (6)].addr).sym);
-               (yyvsp[(6) - (6)].addr).offset &= 0xffffffffull;
-               (yyvsp[(6) - (6)].addr).offset |= (vlong)ArgsSizeUnknown << 32;
-               outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
+               settext((yyvsp[(2) - (7)].addr).sym);
+               outcode((yyvsp[(1) - (7)].lval), &(yyvsp[(2) - (7)].addr), (yyvsp[(4) - (7)].lval), &(yyvsp[(7) - (7)].addr));
        }
     break;
 
   case 119:
-#line 629 "a.y"
+#line 630 "a.y"
     {
-               settext((yyvsp[(2) - (8)].addr).sym);
-               (yyvsp[(6) - (8)].addr).offset &= 0xffffffffull;
-               (yyvsp[(6) - (8)].addr).offset |= ((yyvsp[(8) - (8)].lval) & 0xffffffffull) << 32;
-               outcode((yyvsp[(1) - (8)].lval), &(yyvsp[(2) - (8)].addr), (yyvsp[(4) - (8)].lval), &(yyvsp[(6) - (8)].addr));
+               settext((yyvsp[(2) - (4)].addr).sym);
+               outcode((yyvsp[(1) - (4)].lval), &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr));
        }
     break;
 
   case 120:
-#line 639 "a.y"
+#line 635 "a.y"
     {
-               settext((yyvsp[(2) - (4)].addr).sym);
-               outcode((yyvsp[(1) - (4)].lval), &(yyvsp[(2) - (4)].addr), 0, &(yyvsp[(4) - (4)].addr));
+               settext((yyvsp[(2) - (6)].addr).sym);
+               outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
   case 121:
 #line 644 "a.y"
     {
-               settext((yyvsp[(2) - (6)].addr).sym);
                outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
   case 122:
-#line 653 "a.y"
+#line 648 "a.y"
     {
                outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
   case 123:
-#line 657 "a.y"
+#line 652 "a.y"
     {
                outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
        }
     break;
 
   case 124:
-#line 661 "a.y"
-    {
-               outcode((yyvsp[(1) - (6)].lval), &(yyvsp[(2) - (6)].addr), (yyvsp[(4) - (6)].lval), &(yyvsp[(6) - (6)].addr));
-       }
-    break;
-
-  case 125:
-#line 668 "a.y"
+#line 659 "a.y"
     {
                outcode((yyvsp[(1) - (2)].lval), &nullgen, 0, &nullgen);
        }
     break;
 
-  case 126:
-#line 674 "a.y"
+  case 125:
+#line 665 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_BRANCH;
@@ -2786,8 +2794,8 @@ yyreduce:
        }
     break;
 
-  case 127:
-#line 680 "a.y"
+  case 126:
+#line 671 "a.y"
     {
                (yyvsp[(1) - (2)].sym) = labellookup((yyvsp[(1) - (2)].sym));
                (yyval.addr) = nullgen;
@@ -2798,8 +2806,8 @@ yyreduce:
        }
     break;
 
-  case 128:
-#line 691 "a.y"
+  case 127:
+#line 682 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2807,8 +2815,8 @@ yyreduce:
        }
     break;
 
-  case 131:
-#line 703 "a.y"
+  case 130:
+#line 694 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2816,8 +2824,8 @@ yyreduce:
        }
     break;
 
-  case 132:
-#line 711 "a.y"
+  case 131:
+#line 702 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2825,8 +2833,8 @@ yyreduce:
        }
     break;
 
-  case 133:
-#line 719 "a.y"
+  case 132:
+#line 710 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2834,8 +2842,8 @@ yyreduce:
        }
     break;
 
-  case 134:
-#line 727 "a.y"
+  case 133:
+#line 718 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2843,8 +2851,8 @@ yyreduce:
        }
     break;
 
-  case 135:
-#line 735 "a.y"
+  case 134:
+#line 726 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2852,8 +2860,8 @@ yyreduce:
        }
     break;
 
-  case 136:
-#line 741 "a.y"
+  case 135:
+#line 732 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= 1024)
                        yyerror("SPR/DCR out of range");
@@ -2863,8 +2871,8 @@ yyreduce:
        }
     break;
 
-  case 138:
-#line 752 "a.y"
+  case 137:
+#line 743 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2872,8 +2880,8 @@ yyreduce:
        }
     break;
 
-  case 139:
-#line 760 "a.y"
+  case 138:
+#line 751 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2881,8 +2889,8 @@ yyreduce:
        }
     break;
 
-  case 140:
-#line 766 "a.y"
+  case 139:
+#line 757 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2890,8 +2898,8 @@ yyreduce:
        }
     break;
 
-  case 141:
-#line 774 "a.y"
+  case 140:
+#line 765 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2899,8 +2907,8 @@ yyreduce:
        }
     break;
 
-  case 142:
-#line 780 "a.y"
+  case 141:
+#line 771 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2908,8 +2916,8 @@ yyreduce:
        }
     break;
 
-  case 143:
-#line 788 "a.y"
+  case 142:
+#line 779 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_REG;
@@ -2917,8 +2925,8 @@ yyreduce:
        }
     break;
 
-  case 144:
-#line 796 "a.y"
+  case 143:
+#line 787 "a.y"
     {
                int mb, me;
                uint32 v;
@@ -2939,16 +2947,52 @@ yyreduce:
        }
     break;
 
+  case 144:
+#line 808 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (1)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
+       }
+    break;
+
   case 145:
-#line 817 "a.y"
+#line 814 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (2)].lval);
+               (yyval.addr).u.argsize = ArgsSizeUnknown;
+       }
+    break;
+
+  case 146:
+#line 820 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = (yyvsp[(1) - (3)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(3) - (3)].lval);
+       }
+    break;
+
+  case 147:
+#line 826 "a.y"
+    {
+               (yyval.addr).type = TYPE_TEXTSIZE;
+               (yyval.addr).offset = -(yyvsp[(2) - (4)].lval);
+               (yyval.addr).u.argsize = (yyvsp[(4) - (4)].lval);
+       }
+    break;
+
+  case 148:
+#line 834 "a.y"
     {
                (yyval.addr) = (yyvsp[(2) - (2)].addr);
                (yyval.addr).type = TYPE_CONST;
        }
     break;
 
-  case 146:
-#line 822 "a.y"
+  case 149:
+#line 839 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_SCONST;
@@ -2956,8 +3000,8 @@ yyreduce:
        }
     break;
 
-  case 147:
-#line 830 "a.y"
+  case 150:
+#line 847 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2965,8 +3009,8 @@ yyreduce:
        }
     break;
 
-  case 148:
-#line 836 "a.y"
+  case 151:
+#line 853 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_FCONST;
@@ -2974,8 +3018,8 @@ yyreduce:
        }
     break;
 
-  case 149:
-#line 843 "a.y"
+  case 152:
+#line 860 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_CONST;
@@ -2983,8 +3027,8 @@ yyreduce:
        }
     break;
 
-  case 151:
-#line 852 "a.y"
+  case 154:
+#line 869 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= NREG)
                        print("register value out of range\n");
@@ -2992,8 +3036,8 @@ yyreduce:
        }
     break;
 
-  case 152:
-#line 860 "a.y"
+  case 155:
+#line 877 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3002,8 +3046,8 @@ yyreduce:
        }
     break;
 
-  case 153:
-#line 867 "a.y"
+  case 156:
+#line 884 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3013,8 +3057,8 @@ yyreduce:
        }
     break;
 
-  case 155:
-#line 878 "a.y"
+  case 158:
+#line 895 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3023,8 +3067,8 @@ yyreduce:
        }
     break;
 
-  case 156:
-#line 887 "a.y"
+  case 159:
+#line 904 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3034,8 +3078,8 @@ yyreduce:
        }
     break;
 
-  case 157:
-#line 895 "a.y"
+  case 160:
+#line 912 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3045,8 +3089,8 @@ yyreduce:
        }
     break;
 
-  case 158:
-#line 903 "a.y"
+  case 161:
+#line 920 "a.y"
     {
                (yyval.addr) = nullgen;
                (yyval.addr).type = TYPE_MEM;
@@ -3056,127 +3100,127 @@ yyreduce:
        }
     break;
 
-  case 161:
-#line 915 "a.y"
+  case 164:
+#line 932 "a.y"
     {
                (yyval.lval) = 0;
        }
     break;
 
-  case 162:
-#line 919 "a.y"
+  case 165:
+#line 936 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 163:
-#line 923 "a.y"
+  case 166:
+#line 940 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 168:
-#line 935 "a.y"
+  case 171:
+#line 952 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
     break;
 
-  case 169:
-#line 939 "a.y"
+  case 172:
+#line 956 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 170:
-#line 943 "a.y"
+  case 173:
+#line 960 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 171:
-#line 947 "a.y"
+  case 174:
+#line 964 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
     break;
 
-  case 172:
-#line 951 "a.y"
+  case 175:
+#line 968 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
     break;
 
-  case 174:
-#line 958 "a.y"
+  case 177:
+#line 975 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 175:
-#line 962 "a.y"
+  case 178:
+#line 979 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 176:
-#line 966 "a.y"
+  case 179:
+#line 983 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 177:
-#line 970 "a.y"
+  case 180:
+#line 987 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 178:
-#line 974 "a.y"
+  case 181:
+#line 991 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 179:
-#line 978 "a.y"
+  case 182:
+#line 995 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 180:
-#line 982 "a.y"
+  case 183:
+#line 999 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
     break;
 
-  case 181:
-#line 986 "a.y"
+  case 184:
+#line 1003 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 182:
-#line 990 "a.y"
+  case 185:
+#line 1007 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
     break;
 
-  case 183:
-#line 994 "a.y"
+  case 186:
+#line 1011 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -3184,7 +3228,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 3188 "y.tab.c"
+#line 3232 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 2ee4541fa64627b680b506ae1b713c8559b194f1..f1bfb99b9a04089c02442c221c1935f9f2baedc5 100644 (file)
@@ -21,13 +21,11 @@ defframe(Prog *ptxt)
        NodeList *l;
        Node *n;
 
-       // fill in argument size
-       ptxt->to.offset = rnd(curfn->type->argwid, widthptr);
-
-       // fill in final stack size
-       ptxt->to.offset <<= 32;
+       // fill in argument size, stack size
+       ptxt->to.type = TYPE_TEXTSIZE;
+       ptxt->to.u.argsize = rnd(curfn->type->argwid, widthptr);
        frame = rnd(stksize+maxarg, widthreg);
-       ptxt->to.offset |= frame;
+       ptxt->to.offset = frame;
        
        // insert code to zero ambiguously live variables
        // so that the garbage collector only sees initialized values
index 31aeaff7b7b19e503b5b16ab0de88f4a1fdb9764..66ee8c43cbc38ef9515bfaf24a34282e9783a728 100644 (file)
@@ -286,6 +286,7 @@ enum
        C_ANY,
        C_GOK,
        C_ADDR,
+       C_TEXTSIZE,
 
        C_NCLASS,       /* must be the last */
 };
index 35bd458cdf70d58740fe5cd712896710f5719602..38a739972525e414769fa19ea04dddccdc514da8 100644 (file)
@@ -71,8 +71,8 @@ static Optab  optab[] =
 {
        /* struct Optab:
          OPCODE,       from, prog->reg, to,             type,size,param,flag */
-       { ATEXT,        C_ADDR, C_NONE, C_LCON,          0, 0, 0 },
-       { ATEXT,        C_ADDR, C_REG,  C_LCON,          0, 0, 0 },
+       { ATEXT,        C_ADDR, C_NONE, C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_ADDR, C_REG,  C_TEXTSIZE,      0, 0, 0 },
 
        { AADD,         C_REG,  C_REG,  C_REG,           1, 4, 0 },
        { AADD,         C_REG,  C_NONE, C_REG,           1, 4, 0 },
@@ -1122,8 +1122,10 @@ aclass(Link *ctxt, Addr *a)
                        return C_SFCON;
                return C_LFCON;
 
-       case TYPE_CONST:
        case TYPE_TEXTSIZE:
+               return C_TEXTSIZE;
+
+       case TYPE_CONST:
                switch(a->name) {
 
                case TYPE_NONE:
index c26d958b8e30b1c2e7dc1f8f2db1b669cde361c4..ee248d272a3378997b0d6eee7fd7679eecf69120 100644 (file)
@@ -113,6 +113,7 @@ enum
        Ymr, Ymm,
        Yxr, Yxm,
        Ytls,
+       Ytextsize,
        Ymax,
 
        Zxxx            = 0,
@@ -197,7 +198,7 @@ static uchar        ynone[] =
 };
 static uchar   ytext[] =
 {
-       Ymb,    Yi64,   Zpseudo,1,
+       Ymb,    Ytextsize,      Zpseudo,1,
        0
 };
 static uchar   ynop[] =
@@ -1998,6 +1999,9 @@ oclass(Link *ctxt, Addr *a)
                if((v>>32) == 0)
                        return Yi32;    /* unsigned */
                return Yi64;
+
+       case TYPE_TEXTSIZE:
+               return Ytextsize;
        }
        
        if(a->type != TYPE_REG) {
index fa20d14b1b882ff746838061e198c069ce471bcb..5d6a7f7d4f6783e7585f1736a6ef2281ebc3a3d4 100644 (file)
@@ -76,6 +76,7 @@ enum
        Ym,
        Ybr,
        Ycol,
+       Ytextsize,
        Ytls,
 
        Ycs,    Yss,    Yds,    Yes,    Yfs,    Ygs,
@@ -150,7 +151,7 @@ static uchar        ynone[] =
 };
 static uchar   ytext[] =
 {
-       Ymb,    Yi32,   Zpseudo,1,
+       Ymb,    Ytextsize,      Zpseudo,1,
        0
 };
 static uchar   ynop[] =
@@ -1538,7 +1539,6 @@ oclass(Link *ctxt, Addr *a)
                // fall through
 
        case TYPE_CONST:
-       case TYPE_TEXTSIZE:
                if(a->sym != nil)
                        ctxt->diag("TYPE_CONST with symbol: %D", a);
 
@@ -1550,6 +1550,9 @@ oclass(Link *ctxt, Addr *a)
                if(v >= -128 && v <= 127)
                        return Yi8;
                return Yi32;
+
+       case TYPE_TEXTSIZE:
+               return Ytextsize;
        }
 
        if(a->type != TYPE_REG) {
index 3ae8c4844264084fcb852a1cbf4a5fda576fc0b8..9101c56c5118d8898dd255dd6e74b0874be028c9 100644 (file)
@@ -59,14 +59,14 @@ struct      Optab
 };
 
 static Optab   optab[] = {
-       { ATEXT,        C_LEXT, C_NONE, C_NONE,         C_LCON,          0, 0, 0 },
-       { ATEXT,        C_LEXT, C_REG, C_NONE,  C_LCON,          0, 0, 0 },
-       { ATEXT,        C_LEXT, C_NONE, C_LCON,         C_LCON,          0, 0, 0 },
-       { ATEXT,        C_LEXT, C_REG, C_LCON,  C_LCON,          0, 0, 0 },
-       { ATEXT,        C_ADDR, C_NONE, C_NONE,         C_LCON,          0, 0, 0 },
-       { ATEXT,        C_ADDR, C_REG, C_NONE,  C_LCON,          0, 0, 0 },
-       { ATEXT,        C_ADDR, C_NONE, C_LCON,         C_LCON,          0, 0, 0 },
-       { ATEXT,        C_ADDR, C_REG, C_LCON,  C_LCON,          0, 0, 0 },
+       { ATEXT,        C_LEXT, C_NONE, C_NONE,         C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_LEXT, C_REG, C_NONE,  C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_LEXT, C_NONE, C_LCON,         C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_LEXT, C_REG, C_LCON,  C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_ADDR, C_NONE, C_NONE,         C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_ADDR, C_REG, C_NONE,  C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_ADDR, C_NONE, C_LCON,         C_TEXTSIZE,      0, 0, 0 },
+       { ATEXT,        C_ADDR, C_REG, C_LCON,  C_TEXTSIZE,      0, 0, 0 },
 
        /* move register */
        { AMOVD,        C_REG,  C_NONE, C_NONE,         C_REG,           1, 4, 0 },
@@ -497,7 +497,7 @@ span9(Link *ctxt, LSym *cursym)
        if(p == nil || p->link == nil) // handle external functions and ELF section symbols
                return;
        ctxt->cursym = cursym;
-       ctxt->autosize = (int32)(p->to.offset & 0xffffffffll) + 8;
+       ctxt->autosize = p->to.offset + 8;
 
        if(oprange[AANDN].start == nil)
                buildop(ctxt);
@@ -673,6 +673,9 @@ aclass(Link *ctxt, Addr *a)
                }
                return C_GOK;
 
+       case TYPE_TEXTSIZE:
+               return C_TEXTSIZE;
+
        case TYPE_CONST:
                switch(a->name) {
                case TYPE_NONE:
index f88f579ed93d92eceb8858c1697fdc80598c14c0..d04c8c27a8112aed411f1d5748f0fe1e11fe4677 100644 (file)
@@ -33,6 +33,7 @@
 #include <bio.h>
 #include <link.h>
 #include "../cmd/5l/5.out.h"
+#include "../runtime/funcdata.h"
 
 enum
 {
@@ -163,7 +164,10 @@ Dconv(Fmt *fp)
                break;
 
        case TYPE_TEXTSIZE:
-               sprint(str, "$%lld-%d", a->offset, a->u.argsize);
+               if(a->u.argsize == ArgsSizeUnknown)
+                       sprint(str, "$%lld", a->offset);
+               else
+                       sprint(str, "$%lld-%lld", a->offset, a->u.argsize);
                break;
 
        case TYPE_SHIFT:
index 3dbb880caab9a671ec7f00aae70a40a1fd95bcf8..2cb1777ba4ad821b0726bfcc6a1064c3067f6b9c 100644 (file)
 #include <bio.h>
 #include <link.h>
 #include "../cmd/6l/6.out.h"
+#include "../runtime/funcdata.h"
 
 //
 // Format conversions
 //     %A int          Opcodes (instruction mnemonics)
 //
 //     %D Addr*        Addresses (instruction operands)
-//             Flags: "%lD": seperate the high and low words of a constant by "-"
 //
 //     %P Prog*        Instructions
 //
@@ -91,11 +91,11 @@ Pconv(Fmt *fp)
 
        case ATEXT:
                if(p->from.scale) {
-                       sprint(str, "%.5lld (%L)        %A      %D,%d,%lD",
+                       sprint(str, "%.5lld (%L)        %A      %D,%d,%D",
                                p->pc, p->lineno, p->as, &p->from, p->from.scale, &p->to);
                        break;
                }
-               sprint(str, "%.5lld (%L)        %A      %D,%lD",
+               sprint(str, "%.5lld (%L)        %A      %D,%D",
                        p->pc, p->lineno, p->as, &p->from, &p->to);
                break;
 
@@ -194,10 +194,6 @@ Dconv(Fmt *fp)
                break;
 
        case TYPE_CONST:
-               if(fp->flags & FmtLong) {
-                       sprint(str, "$%lld-%lld", a->offset&0xffffffffLL, a->offset>>32);
-                       break;
-               }
                sprint(str, "$%lld", a->offset);
                // TODO(rsc): This special case is for SHRQ $32, AX:DX, which encodes as
                //      SHRQ $32(DX*0), AX
@@ -207,6 +203,13 @@ Dconv(Fmt *fp)
                        strcat(str, s);
                }
                break;
+       
+       case TYPE_TEXTSIZE:
+               if(a->u.argsize == ArgsSizeUnknown)
+                       sprint(str, "$%lld", a->offset);
+               else
+                       sprint(str, "$%lld-%lld", a->offset, a->u.argsize);
+               break;
 
        case TYPE_FCONST:
                sprint(str, "$(%.17g)", a->u.dval);
index 60f03206bd22884e6f5b7f4fe349fa7afd9829e4..33c0791a1928a77343ac7607307178b6a2ef4a38 100644 (file)
@@ -33,6 +33,7 @@
 #include <bio.h>
 #include <link.h>
 #include "../cmd/8l/8.out.h"
+#include "../runtime/funcdata.h"
 
 static int     Aconv(Fmt *fp);
 static int     Dconv(Fmt *fp);
@@ -77,11 +78,11 @@ Pconv(Fmt *fp)
 
        case ATEXT:
                if(p->from.scale) {
-                       sprint(str, "%.5lld (%L)        %A      %D,%d,%lD",
+                       sprint(str, "%.5lld (%L)        %A      %D,%d,%D",
                                p->pc, p->lineno, p->as, &p->from, p->from.scale, &p->to);
                        break;
                }
-               sprint(str, "%.5lld (%L)        %A      %D,%lD",
+               sprint(str, "%.5lld (%L)        %A      %D,%D",
                        p->pc, p->lineno, p->as, &p->from, &p->to);
                break;
 
@@ -198,7 +199,10 @@ Dconv(Fmt *fp)
                break;
 
        case TYPE_TEXTSIZE:
-               sprint(str, "$%lld-%d", a->offset, a->u.argsize);
+               if(a->u.argsize == ArgsSizeUnknown)
+                       sprint(str, "$%lld", a->offset);
+               else
+                       sprint(str, "$%lld-%lld", a->offset, a->u.argsize);
                break;
 
        case TYPE_FCONST:
index f688b50751264c845e1bcb210f5fc7da7b3ec821..149d713fe89877e9458715ca812e976f612bdc61 100644 (file)
@@ -32,6 +32,7 @@
 #include <bio.h>
 #include <link.h>
 #include "../cmd/9l/9.out.h"
+#include "../runtime/funcdata.h"
 
 enum
 {
@@ -51,7 +52,6 @@ static int    DRconv(Fmt*);
 //     %A int          Opcodes (instruction mnemonics)
 //
 //     %D Addr*        Addresses (instruction operands)
-//             Flags: "%lD": seperate the high and low words of a constant by "-"
 //
 //     %P Prog*        Instructions
 //
@@ -97,9 +97,9 @@ Pconv(Fmt *fp)
                sprint(str, "%.5lld (%L)        %A      %D/%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to);
        else if(a == ATEXT) {
                if(p->reg != 0)
-                       sprint(str, "%.5lld (%L)        %A      %D,%d,%lD", p->pc, p->lineno, a, &p->from, p->reg, &p->to);
+                       sprint(str, "%.5lld (%L)        %A      %D,%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to);
                else
-                       sprint(str, "%.5lld (%L)        %A      %D,%lD", p->pc, p->lineno, a, &p->from, &p->to);
+                       sprint(str, "%.5lld (%L)        %A      %D,%D", p->pc, p->lineno, a, &p->from, &p->to);
        } else if(a == AGLOBL) {
                if(p->reg != 0)
                        sprint(str, "%.5lld (%L)        %A      %D,%d,%D", p->pc, p->lineno, a, &p->from, p->reg, &p->to);
@@ -154,16 +154,6 @@ Dconv(Fmt *fp)
 
        a = va_arg(fp->args, Addr*);
 
-       if(fp->flags & FmtLong) {
-               if(a->type == TYPE_CONST)
-                       sprint(str, "$%d-%d", (int32)a->offset, (int32)(a->offset>>32));
-               else {
-                       // ATEXT dst is not constant
-                       sprint(str, "!!%D", a);
-               }
-               goto ret;
-       }
-
        switch(a->type) {
        default:
                sprint(str, "GOK-type(%d)", a->type);
@@ -182,6 +172,13 @@ Dconv(Fmt *fp)
                        sprint(str, "$%M", a);
                break;
 
+       case TYPE_TEXTSIZE:
+               if(a->u.argsize == ArgsSizeUnknown)
+                       sprint(str, "$%lld", a->offset);
+               else
+                       sprint(str, "$%lld-%lld", a->offset, a->u.argsize);
+               break;
+
        case TYPE_MEM:
                if(a->reg != 0)
                        sprint(str, "%M(%R)", a, a->reg);
@@ -222,7 +219,6 @@ Dconv(Fmt *fp)
                break;
        }
 
-ret:
        return fmtstrcpy(fp, str);
 }
 
index 0ccb03924f8840ddcb6804d926ae05ef192a0888..2b51061a0bc572b8ef76a2d9bf04e8b9e2031ab0 100644 (file)
@@ -361,26 +361,13 @@ static Prog*      load_g_cx(Link*, Prog*);
 static Prog*   stacksplit(Link*, Prog*, int32, int32, int, Prog**);
 static void    indir_cx(Link*, Addr*);
 
-static void
-parsetextconst(vlong arg, vlong *textstksiz, vlong *textarg)
-{
-       *textstksiz = arg & 0xffffffffLL;
-       if(*textstksiz & 0x80000000LL)
-               *textstksiz = -(-*textstksiz & 0xffffffffLL);
-
-       *textarg = (arg >> 32) & 0xffffffffLL;
-       if(*textarg & 0x80000000LL)
-               *textarg = 0;
-       *textarg = (*textarg+7) & ~7LL;
-}
-
 static void
 preprocess(Link *ctxt, LSym *cursym)
 {
        Prog *p, *q, *p1, *p2;
        int32 autoffset, deltasp;
        int a, pcsize, bpsize;
-       vlong textstksiz, textarg;
+       vlong textarg;
 
        if(ctxt->tlsg == nil)
                ctxt->tlsg = linklookup(ctxt, "runtime.tlsg", 0);
@@ -398,8 +385,7 @@ preprocess(Link *ctxt, LSym *cursym)
                return;                         
 
        p = cursym->text;
-       parsetextconst(p->to.offset, &textstksiz, &textarg);
-       autoffset = textstksiz;
+       autoffset = p->to.offset;
        if(autoffset < 0)
                autoffset = 0;
        
@@ -409,14 +395,14 @@ preprocess(Link *ctxt, LSym *cursym)
                // another function, so in that case we omit this.
                bpsize = ctxt->arch->ptrsize;
                autoffset += bpsize;
-               textstksiz += bpsize;
-               p->to.offset = ((uint64)p->to.offset & (0xffffffffull<<32)) | (uint32)autoffset;
+               p->to.offset += bpsize;
        } else {
                bpsize = 0;
        }
 
-       cursym->args = p->to.offset>>32;
-       cursym->locals = textstksiz;
+       textarg = p->to.u.argsize;
+       cursym->args = textarg;
+       cursym->locals = p->to.offset;
 
        if(autoffset < StackSmall && !(p->from.scale & NOSPLIT)) {
                for(q = p; q != nil; q = q->link) {
index 93c63722f8557fb6c2741122831b1d68d9645d83..6f7652f5f831891f9d74f3b6bf8a1748f5d15a41 100644 (file)
@@ -162,25 +162,12 @@ progedit(Link *ctxt, Prog *p)
 
 static Prog*   stacksplit(Link*, Prog*, int32, int);
 
-static void
-parsetextconst(vlong arg, vlong *textstksiz, vlong *textarg)
-{
-       *textstksiz = arg & 0xffffffffLL;
-       if(*textstksiz & 0x80000000LL)
-               *textstksiz = -(-*textstksiz & 0xffffffffLL);
-
-       *textarg = (arg >> 32) & 0xffffffffLL;
-       if(*textarg & 0x80000000LL)
-               *textarg = 0;
-       *textarg = (*textarg+7) & ~7LL;
-}
-
 static void
 preprocess(Link *ctxt, LSym *cursym)
 {
        Prog *p, *q, *p1, *p2, *q1;
        int o, mov, aoffset;
-       vlong textstksiz, textarg;
+       vlong textstksiz;
        int32 autosize;
 
        if(ctxt->symmorestack[0] == nil) {
@@ -195,9 +182,9 @@ preprocess(Link *ctxt, LSym *cursym)
                return;                         
 
        p = cursym->text;
-       parsetextconst(p->to.offset, &textstksiz, &textarg);
+       textstksiz = p->to.offset;
        
-       cursym->args = p->to.offset>>32;
+       cursym->args = p->to.u.argsize;
        cursym->locals = textstksiz;
 
        /*
@@ -378,7 +365,7 @@ preprocess(Link *ctxt, LSym *cursym)
                        else
                                if(autosize & 4)
                                        autosize += 4;
-                       p->to.offset = ((uint64)p->to.offset & (0xffffffffull<<32)) | (uint32)(autosize-8);
+                       p->to.offset = autosize-8;
 
                        if(!(p->reg & NOSPLIT))
                                p = stacksplit(ctxt, p, autosize, !(cursym->text->reg&NEEDCTXT)); // emit split check