NV fp parser: Support instruction and TEMP / OUTPUT sizes
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 5 Sep 2009 00:27:27 +0000 (17:27 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 5 Sep 2009 00:31:05 +0000 (17:31 -0700)
Adds support for declaring TEMP and OUTPUT variables as 'LONG' or
'SHORT' precision.  The precision specifiers are parsed, but they are
currently ignored.  Some support for this may be added in the future,
but neither Intel hardware nor, as far as I'm aware, Radeon hardware
support multiple precisions.

Also adds support for instruction precision ('X', 'H', and 'R')
suffixes and instruction condition code output ('C') suffix.  This
results in a fairly major change to the lexer.  Instructions are
matched with all the possible suffix strings.  The suffix string are
then carved off by a context (i.e., which program mode and options are
set) aware parser that converts the suffixes to bits in
prog_instruction.

This could have been handled in the same way _SAT was originally
handled in the lexer, but it would have resulted in a very large lexer
with lots of opportunity for cut-and-paste errors.

src/mesa/shader/lex.yy.c
src/mesa/shader/program_lexer.l
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.y
src/mesa/shader/program_parse_extra.c
src/mesa/shader/program_parser.h

index 5bde12a6b77bc9fbbe53eadc4583c7bf7736078b..d71a13c3bd7084693a683112428287f941571799 100644 (file)
@@ -357,8 +357,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 217
-#define YY_END_OF_BUFFER 218
+#define YY_NUM_RULES 168
+#define YY_END_OF_BUFFER 169
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -366,93 +366,100 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[776] =
+static yyconst flex_int16_t yy_accept[836] =
     {   0,
     {   0,
-        0,    0,  218,  216,  214,  213,  216,  216,  186,  212,
-      188,  188,  188,  188,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  214,    0,    0,  215,  186,
-        0,  187,  189,  209,  209,    0,    0,    0,    0,  209,
-        0,    0,    0,    0,    0,    0,    0,  166,  210,  167,
-      168,  200,  200,  200,  200,    0,  188,    0,  174,  175,
-      176,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  208,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  207,  207,    0,    0,    0,
+        0,    0,  169,  167,  165,  164,  167,  167,  137,  163,
+      139,  139,  139,  139,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  165,    0,    0,  166,  137,
+        0,  138,  140,  160,  160,    0,    0,    0,    0,  160,
+        0,    0,    0,    0,    0,    0,    0,  117,  161,  118,
+      119,  151,  151,  151,  151,    0,  139,    0,  125,  126,
+      127,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  159,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  158,  158,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      206,  206,  206,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  197,  197,  197,  198,  198,  199,  190,
-      189,  190,    0,  191,   11,   13,  186,   15,  186,  186,
-       16,   18,  186,   20,   22,   24,   26,   28,   30,    6,
-
-       32,   34,   35,   37,   39,   42,   40,   44,   45,   47,
-       49,   51,   53,   55,  186,  186,  186,  186,  186,   65,
-       67,  186,   69,   71,   73,   75,   77,   79,   81,  186,
-       83,   85,   87,   89,   91,   93,   95,  186,   97,   99,
-      101,  103,  186,  109,  111,  186,  186,  186,  186,  186,
-      186,    0,    0,    0,    0,  189,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  127,  128,  130,    0,
-      205,    0,    0,    0,    0,    0,    0,  144,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  204,  203,
-      203,  156,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,  194,  194,  195,  196,    0,  192,  186,  186,
-      186,  186,  186,  186,  186,  186,  177,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,   57,  186,   61,
-      186,  186,  186,  178,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,   10,
-      186,  186,  186,  186,  105,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,    0,  211,    0,    0,    0,  120,
-      121,    0,    0,    0,    0,    0,    0,    0,  132,    0,
+      157,  157,  157,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  148,  148,  148,  149,  149,  150,  141,
+      140,  141,    0,  142,   11,   12,  137,   13,  137,  137,
+       14,   15,  137,   16,   17,   18,   19,   20,   21,    6,
+
+       22,   23,   24,   25,   26,   28,   27,   29,   30,   31,
+       32,   33,   34,   35,  137,  137,  137,  137,  137,   40,
+       41,  137,   42,   43,   44,   45,   46,   47,   48,  137,
+       49,   50,   51,   52,   53,   54,   55,  137,   56,   57,
+       58,   59,  137,   62,   63,  137,  137,  137,  137,  137,
+      137,    0,    0,    0,    0,  140,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   78,   79,   81,    0,
+      156,    0,    0,    0,    0,    0,    0,   95,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  155,  154,
+      154,  107,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,  145,  145,  146,  147,    0,  143,   11,   11,
+      137,   12,   12,   12,  137,  137,  137,  137,  137,   15,
+       15,  137,  128,   16,   16,  137,   17,   17,  137,   18,
+       18,  137,   19,   19,  137,   20,   20,  137,   21,   21,
+      137,   22,   22,  137,   24,   24,  137,   25,   25,  137,
+       28,   28,  137,   27,   27,  137,   30,   30,  137,   31,
+       31,  137,   32,   32,  137,   33,   33,  137,   34,   34,
+      137,   35,   35,  137,  137,  137,  137,   36,  137,   38,
+      137,   40,   40,  137,   41,   41,  137,  129,   42,   42,
+      137,   43,   43,  137,  137,   45,   45,  137,   46,   46,
+
+      137,   47,   47,  137,   48,   48,  137,  137,   49,   49,
+      137,   50,   50,  137,   51,   51,  137,   52,   52,  137,
+       53,   53,  137,   54,   54,  137,  137,   10,   56,  137,
+       57,  137,   58,  137,   59,  137,   60,  137,   62,   62,
+      137,  137,  137,  137,  137,  137,  137,  137,    0,  162,
+        0,    0,    0,   71,   72,    0,    0,    0,    0,    0,
+        0,    0,   83,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  202,    0,    0,
-        0,  160,    0,  162,    0,    0,    0,    0,    0,    0,
-      201,  193,  186,  186,  186,    4,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,    9,
-      186,   59,  186,   63,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  107,  186,  186,  186,
-      186,  186,  116,  186,  186,    0,    0,    0,    0,    0,
-      122,  123,    0,    0,    0,    0,  131,    0,    0,  135,
-
-      138,    0,    0,    0,    0,    0,    0,    0,  149,  150,
-        0,    0,    0,    0,  155,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  186,  186,  186,  186,  186,
-      186,    5,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,    7,    8,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  117,  186,  113,    0,    0,    0,
-        0,  171,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,  141,    0,  145,  146,    0,  148,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  164,  165,    0,
-        0,  172,   12,    3,   14,  182,  183,  186,   17,   19,
-       21,   23,   25,   27,   29,   31,   33,   36,   38,   43,
-       41,   46,   48,   50,   52,   54,   56,  186,  186,  186,
-      186,   66,   68,   70,   72,   74,   76,   78,   80,   82,
-      186,  186,  186,   84,   86,   88,   90,   92,   94,   96,
-       98,  100,  102,  104,  186,  186,  110,  112,  186,  115,
-      173,    0,    0,  118,    0,  124,    0,    0,    0,  133,
-        0,    0,    0,    0,    0,    0,  147,    0,    0,  153,
-
-      140,    0,    0,    0,    0,    0,    0,  169,    0,  186,
-       58,  186,   62,  186,  179,  180,  186,  106,  186,  114,
-        0,    0,    0,    0,  126,  129,  134,    0,    0,  139,
-        0,    0,    0,  152,    0,    0,    0,    0,  161,  163,
-        0,  186,   60,   64,  186,  108,    2,    1,    0,  125,
-        0,  137,    0,  143,  151,    0,    0,  158,  159,  170,
-      186,  181,    0,  136,    0,  154,  157,  186,  119,  142,
-      186,  186,  184,  185,    0
+        0,  153,    0,    0,    0,  111,    0,  113,    0,    0,
+        0,    0,    0,    0,  152,  144,  137,  137,  137,    4,
+
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,    9,   37,   39,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,   60,  137,   61,
+      137,  137,  137,  137,  137,   67,  137,  137,    0,    0,
+        0,    0,    0,   73,   74,    0,    0,    0,    0,   82,
+        0,    0,   86,   89,    0,    0,    0,    0,    0,    0,
+        0,  100,  101,    0,    0,    0,    0,  106,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  137,  137,
+
+      137,  137,  137,  137,    5,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,    7,    8,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,   61,  137,
+      137,  137,  137,  137,   68,  137,   64,    0,    0,    0,
+        0,  122,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   92,    0,   96,   97,    0,   99,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  115,  116,    0,
+        0,  123,   11,    3,   12,  133,  134,  137,   14,   15,
+
+       16,   17,   18,   19,   20,   21,   22,   24,   25,   28,
+       27,   30,   31,   32,   33,   34,   35,   40,   41,   42,
+       43,   44,   45,   46,   47,   48,  137,  137,  137,   49,
+       50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
+      137,  137,   62,   63,  137,   66,  124,    0,    0,   69,
+        0,   75,    0,    0,    0,   84,    0,    0,    0,    0,
+        0,    0,   98,    0,    0,  104,   91,    0,    0,    0,
+        0,    0,    0,  120,    0,  137,  130,  131,  137,   60,
+      137,   65,    0,    0,    0,    0,   77,   80,   85,    0,
+        0,   90,    0,    0,    0,  103,    0,    0,    0,    0,
+
+      112,  114,    0,  137,  137,   61,    2,    1,    0,   76,
+        0,   88,    0,   94,  102,    0,    0,  109,  110,  121,
+      137,  132,    0,   87,    0,  105,  108,  137,   70,   93,
+      137,  137,  135,  136,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -498,185 +505,199 @@ static yyconst flex_int32_t yy_meta[68] =
         2,    2,    2,    2,    2,    2,    2
     } ;
 
         2,    2,    2,    2,    2,    2,    2
     } ;
 
-static yyconst flex_int16_t yy_base[779] =
+static yyconst flex_int16_t yy_base[839] =
     {   0,
     {   0,
-        0,    0, 1054, 1055,   66, 1055, 1048, 1049,    0,   69,
-       85,  128,  140,  152,  151,   58,   56,   63,   76, 1027,
-      158,  160,   39,  163,  173,  189,   52, 1020,   76,  990,
-      989, 1001,  985,  999,  998,  105, 1027, 1039, 1055,    0,
-      225, 1055,  218,  160,  157,   20,  123,   66,  119,  192,
-      999,  985,   54,  162,  983,  995,  194, 1055,  200,  195,
-       98,  227,  196,  231,  235,  293,  305,  316, 1055, 1055,
-     1055, 1004, 1017, 1011,  223, 1000, 1003,  999, 1014,  107,
-      298,  996, 1010,  246,  996, 1009, 1000, 1013,  990, 1001,
-      992,  182,  993,  984,  993,  984,  983,  984,  144,  978,
-
-      984,  995,  986,  980,  977,  978,  982,  289,  991,  978,
-      302,  985,  972,  986,  962,   65,  315,  989,  981,  980,
-      956,  941,  936,  953,  929,  934,  960,  279,  949,  293,
-      944,  342,  299,  946,  927,  317,  937,  933,  928,  207,
-      934,  920,  936,  933,  924,  320,  324,  926,  915,  929,
-      932,  914,  929,  916,  913,  920,  284,  928,  227,  288,
-      327,  342,  345,  905,  922,  923,  916,  898,  318,  899,
-      921,  912,  330,  341,  345,  349,  353,  357,  361, 1055,
-      419,  430,  436,  442,  920,  205,  944,    0,  943,  926,
-      916,  915,  935,  913,  912,  911,  910,  909,  908,    0,
-
-      907,    0,  906,  905,    0,  904,  903,    0,  902,  901,
-      900,  899,  898,  897,  913,  906,  919,  354,  356,  893,
-      892,  898,  890,  889,  888,  887,  886,  885,  884,  905,
-      882,  881,  880,  879,  878,  877,  876,  886,  874,  873,
-      872,  871,  357,  870,  869,  861,  860,  845,  845,  844,
-      843,  886,  858,  846,  448,  456,  430,  850,  418,  847,
-      841,  841,  835,  848,  848,  833, 1055, 1055,  848,  836,
-      432,  843,  135,  840,  846,  433,  841, 1055,  832,  839,
-      838,  841,  827,  826,  830,  825,  330,  830,  439,  442,
-      451, 1055,  822,  820,  820,  828,  829,  811,  456,  816,
-
-      822,  441,  447,  454,  458,  462,  520,  526,  836,  848,
-      834,  833,  826,  840,  830,  829,    0,  828,  827,  826,
-      825,  824,  823,  822,  821,  820,  819,  818,  817,  816,
-      815,  814,  813,  812,  815,  808,  815,  800,  807,  798,
-      821,  804,  803,    0,  802,  801,  800,  799,  798,  797,
-      796,  799,  794,  793,  792,  791,  790,  789,  788,    0,
-      787,  786,  785,  784,  775,  782,  781,  780,  758,  752,
-      757,  763,  746,  761,  495, 1055,  760,  750,  754, 1055,
-     1055,  744,  753,  739,  756,  739,  742,  736, 1055,  737,
-      736,  733,  740,  733,  741,  737,  747,  744,  726,  732,
-
-      739,  723,  722,  740,  722,  734,  733, 1055,  732,  722,
-      726, 1055,  713, 1055,  718,  718,  726,  709,  710,  720,
-     1055, 1055,  752,  734,  750,    0,  532,  748,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
-      736,  735,  734,  733,  732,  731,  730,  717,  710,    0,
-      710,  701,  708,  699,  723,  722,  721,  720,  719,  718,
-      717,  716,  715,  693,  713,  712,  711,  710,  709,  708,
-      707,  706,  705,  704,  703,  685,  676,  700,  699,  668,
-      671,  651,    0,  652,  645,  652,  651,  652,  644,  662,
-     1055, 1055,  644,  642,  652,  645, 1055,  640,  657,  345,
-
-     1055,  648,  632,  633,  642,  633,  632,  632, 1055,  631,
-      640,  630,  646,  643, 1055,  642,  640,  629,  630,  626,
-      618,  625,  620,  621,  616,  642,  642,  640,  654,  653,
-      648,    0,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      618,    0,    0,  635,  617,  633,  615,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  484,  604,  603,  602,
-      601,  600,  599,  598,  597,  596,  595,  594,  611,  593,
-      591,  590,  568,  568,    0,  575,    0,  609,  608,  557,
-      575, 1055,  570,  565,  558,  554,  566,  556,  554,  550,
-
-      566,  557,  556, 1055, 1055,  559, 1055,  554,  547,  536,
-      547,  539,  543,  556,  551,  554,  536, 1055, 1055,  548,
-      537, 1055,    0,    0,    0,    0,    0,  576,    0,    0,
+        0,    0, 1283, 1284,   66, 1284, 1277, 1278,    0,   69,
+       85,  128,  140,  152,  151,   58,   56,   63,   76, 1256,
+      158,  160,   39,  163,  173,  189,   52, 1249,   76, 1219,
+     1218, 1230, 1214, 1228, 1227,  105, 1256, 1268, 1284,    0,
+      225, 1284,  218,  160,  157,   20,  123,   66,  119,  192,
+     1228, 1214,   54,  162, 1212, 1224,  194, 1284,  200,  195,
+       98,  227,  196,  231,  235,  293,  305,  316, 1284, 1284,
+     1284, 1233, 1246, 1240,  223, 1229, 1232, 1228, 1243,  107,
+      298, 1225, 1239,  246, 1225, 1238, 1229, 1242, 1219, 1230,
+     1221,  182, 1222, 1213, 1222, 1213, 1212, 1213,  144, 1207,
+
+     1213, 1224, 1215, 1209, 1206, 1207, 1211,  289, 1220, 1207,
+      302, 1214, 1201, 1215, 1191,   65,  315, 1218, 1210, 1209,
+     1185, 1170, 1165, 1182, 1158, 1163, 1189,  279, 1178,  293,
+     1173,  342,  299, 1175, 1156,  317, 1166, 1162, 1157,  207,
+     1163, 1149, 1165, 1162, 1153,  320,  324, 1155, 1144, 1158,
+     1161, 1143, 1158, 1145, 1142, 1149,  284, 1157,  227,  288,
+      327,  342,  345, 1134, 1151, 1152, 1145, 1127,  318, 1128,
+     1150, 1141,  330,  341,  345,  349,  353,  357,  361, 1284,
+      419,  430,  436,  442,  440,  441, 1174,    0, 1173, 1156,
+     1146,  443, 1166,  444,  451,  468,  470,  472,  471,    0,
+
+      496,    0,  497,  498,    0,  499,  500,    0,  524,  525,
+      526,  536,  537,  553, 1161, 1154, 1167,  354,  356,  561,
+      563, 1148,  564,  565, 1140,  580,  590,  591,  592, 1161,
+      593,  617,  618,  619,  629,  630, 1138, 1148,  247,  330,
+      362,  419,  445,  646, 1136, 1128, 1127, 1112, 1112, 1111,
+     1110, 1153, 1125, 1113,  662,  669,  643, 1117,  487, 1114,
+     1108, 1108, 1102, 1115, 1115, 1100, 1284, 1284, 1115, 1103,
+      646, 1110,  135, 1107, 1113,  561, 1108, 1284, 1099, 1106,
+     1105, 1108, 1094, 1093, 1097, 1092,  330, 1097,  650,  653,
+      665, 1284, 1089, 1087, 1087, 1095, 1096, 1078,  670, 1083,
+
+     1089,  432,  460,  486,  579,  655,  715,  722, 1095,  682,
+     1102, 1093,  697,  721, 1100, 1099, 1092, 1106, 1096, 1087,
+      699, 1094,    0, 1085,  724, 1092, 1083,  725, 1090, 1081,
+      726, 1088, 1079,  727, 1086, 1077,  728, 1084, 1075,  729,
+     1082, 1073,  730, 1080, 1071,  731, 1078, 1069,  732, 1076,
+     1067,  733, 1074, 1065,  734, 1072, 1063,  735, 1070, 1061,
+      736, 1068, 1059,  737, 1066, 1057,  738, 1064, 1055,  739,
+     1062, 1053,  740, 1060, 1063, 1056, 1063,    0, 1056,    0,
+     1071, 1046,  741, 1053, 1044,  742, 1051,    0, 1042,  743,
+     1049, 1040,  745, 1047, 1046, 1037,  746, 1044, 1035,  767,
+
+     1042, 1033,  770, 1040, 1031,  771, 1038, 1041, 1028,  772,
+     1035, 1026,  773, 1033, 1024,  774, 1031, 1022,  775, 1029,
+     1020,  776, 1027, 1018,  777, 1025, 1024,    0, 1015, 1022,
+     1013, 1020, 1011, 1018, 1009, 1016,  778, 1015, 1006,  779,
+     1013, 1012,  990,  984,  989,  995,  978,  993,  424, 1284,
+      992,  982,  986, 1284, 1284,  976,  985,  971,  988,  971,
+      974,  968, 1284,  969,  968,  965,  972,  965,  973,  969,
+      979,  976,  958,  964,  971,  955,  954,  972,  954,  966,
+      965, 1284,  964,  954,  958, 1284,  945, 1284,  950,  950,
+      958,  941,  942,  952, 1284, 1284,  984,  966,  982,    0,
+
+      788,  980,  980,  979,  978,  977,  976,  975,  974,  973,
+      972,  971,  970,  969,  968,  967,  966,  965,  964,  963,
+      962,  949,  942,    0,    0,    0,  959,  958,  957,  956,
+      955,  954,  953,  952,  951,  929,  949,  948,  947,  946,
+      945,  944,  943,  942,  941,  940,  939,  913,  920,  783,
+      936,  935,  904,  907,  887,    0,  888,  881,  888,  887,
+      888,  880,  898, 1284, 1284,  880,  878,  888,  881, 1284,
+      876,  893,  345, 1284,  884,  868,  869,  878,  869,  868,
+      868, 1284,  867,  876,  866,  882,  879, 1284,  878,  876,
+      865,  866,  862,  854,  861,  856,  857,  852,  878,  878,
+
+      876,  890,  889,  884,    0,  872,  871,  870,  869,  868,
+      867,  866,  865,  864,  863,  862,  861,  860,  859,  858,
+      857,  856,  855,  854,    0,    0,  853,  852,  851,  850,
+      849,  848,  847,  846,  845,  791,  844,  843,  842,  841,
+      840,  839,  838,  837,  836,  835,  834,  851,  825,  832,
+      830,  829,  807,  807,    0,  814,    0,  848,  847,  796,
+      814, 1284,  809,  804,  797,  793,  805,  795,  793,  789,
+      805,  796,  795, 1284, 1284,  798, 1284,  793,  786,  775,
+      786,  778,  782,  795,  790,  793,  775, 1284, 1284,  787,
+      776, 1284,    0,    0,    0,    0,    0,  815,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  811,  803,  790,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  557,  574,  555,
-      572,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      568,  567,  565,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  550,  567,    0,    0,  521,    0,
-        0,  572,  571, 1055,  518, 1055,  522,  522,  531, 1055,
-      515,  529,  517,  519,  516,  518, 1055,  496,  507, 1055,
-
-     1055,  511,  507,  500,  497,  497,  510, 1055,  494,  534,
-        0,  518,    0,  517,    0,    0,  532,    0,  515,    0,
-       67,  187,  172,  202, 1055, 1055, 1055,  219,  243, 1055,
-      245,  246,  300, 1055,  292,  315,  332,  340, 1055, 1055,
-      357,  406,    0,    0,  402,    0, 1055, 1055,  381, 1055,
-      423, 1055,  437, 1055, 1055,  431,  429, 1055, 1055, 1055,
-      460,    0,  448, 1055,  444, 1055, 1055,  534, 1055, 1055,
-      496,  528,    0,    0, 1055,  565,  546,  568
+      775,  791,    0,    0,  745,    0,    0,  796,  795, 1284,
+      737, 1284,  655,  655,  661, 1284,  644,  658,  643,  644,
+      635,  620, 1284,  598,  608, 1284, 1284,  604,  586,  579,
+      567,  567,  574, 1284,  557,  582,    0,    0,  582,    0,
+      565,    0,  582,  580,  539,  525, 1284, 1284, 1284,  527,
+      527, 1284,  525,  497,  499, 1284,  478,  451,  439,  441,
+
+     1284, 1284,  431,  441,  366,    0, 1284, 1284,   21, 1284,
+      144, 1284,  176, 1284, 1284,  182,  187, 1284, 1284, 1284,
+      220,    0,  235, 1284,  245, 1284, 1284,  424, 1284, 1284,
+      327,  373,    0,    0, 1284,  824,  396,  827
     } ;
 
     } ;
 
-static yyconst flex_int16_t yy_def[779] =
+static yyconst flex_int16_t yy_def[839] =
     {   0,
     {   0,
-      775,    1,  775,  775,  775,  775,  775,  776,  777,  775,
-      775,  775,  775,  775,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  775,  775,  776,  775,  777,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  778,  775,  775,  775,  775,
-      775,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      777,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  777,
-      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  777,  777,  777,  777,  777,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      777,  777,  775,  775,  775,  775,  775,  777,  775,  775,
-      777,  777,  777,  777,    0,  775,  775,  775
+      835,    1,  835,  835,  835,  835,  835,  836,  837,  835,
+      835,  835,  835,  835,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  835,  835,  836,  835,  837,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  838,  835,  835,  835,  835,
+      835,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+
+      835,  835,  835,  835,  835,  835,  835,  835,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  837,  837,  837,  837,  837,
+      837,  837,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+
+      835,  835,  835,  837,  837,  837,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      837,  837,  835,  835,  835,  835,  835,  837,  835,  835,
+      837,  837,  837,  837,    0,  835,  835,  835
     } ;
 
     } ;
 
-static yyconst flex_int16_t yy_nxt[1123] =
+static yyconst flex_int16_t yy_nxt[1352] =
     {   0,
         4,    5,    6,    5,    7,    8,    9,    4,   10,   11,
        12,   13,   14,   11,   11,   15,    9,   16,   17,   18,
     {   0,
         4,    5,    6,    5,    7,    8,    9,    4,   10,   11,
        12,   13,   14,   11,   11,   15,    9,   16,   17,   18,
@@ -685,7 +706,7 @@ static yyconst flex_int16_t yy_nxt[1123] =
         9,    9,    9,    9,    9,    9,   30,    9,    9,    9,
         9,    9,    9,    9,    9,    9,   31,    9,   32,   33,
        34,    9,   35,    9,    9,    9,    9,   36,   96,   36,
         9,    9,    9,    9,    9,    9,   30,    9,    9,    9,
         9,    9,    9,    9,    9,    9,   31,    9,   32,   33,
        34,    9,   35,    9,    9,    9,    9,   36,   96,   36,
-       41,  116,  137,   97,   80,  138,  747,   42,   43,   43,
+       41,  116,  137,   97,   80,  138,  823,   42,   43,   43,
        43,   43,   43,   43,   77,   81,   78,  119,   82,  117,
        83,  238,   79,   66,   67,   67,   67,   67,   67,   67,
 
        43,   43,   43,   43,   77,   81,   78,  119,   82,  117,
        83,  238,   79,   66,   67,   67,   67,   67,   67,   67,
 
@@ -697,114 +718,139 @@ static yyconst flex_int16_t yy_nxt[1123] =
        67,   67,   67,   67,   67,  218,  171,  219,   70,   68,
        66,   67,   67,   67,   67,   67,   67,   72,  139,   73,
        71,   68,  140,   68,  144,   92,   74,  145,   98,   88,
        67,   67,   67,   67,   67,  218,  171,  219,   70,   68,
        66,   67,   67,   67,   67,   67,   67,   72,  139,   73,
        71,   68,  140,   68,  144,   92,   74,  145,   98,   88,
-      390,   89,   75,   93,   76,   68,   90,   99,   94,   91,
-      101,  100,  102,  103,   95,  391,  748,   68,  136,  133,
+      464,   89,   75,   93,   76,   68,   90,   99,   94,   91,
+      101,  100,  102,  103,   95,  465,  824,   68,  136,  133,
 
       210,  133,  133,  152,  133,  104,  105,  133,  106,  107,
       108,  109,  110,  134,  111,  133,  112,  153,  133,  211,
 
       210,  133,  133,  152,  133,  104,  105,  133,  106,  107,
       108,  109,  110,  134,  111,  133,  112,  153,  133,  211,
-      135,  749,  113,  114,  154,  115,   41,   43,   43,   43,
-       43,   43,   43,  146,  147,  157,  310,  132,  165,  133,
-      166,  161,  162,  167,  168,  311,  158,  163,  188,  159,
-      133,  169,  160,  264,  189,  164,  750,  201,  133,  174,
-      173,  175,  176,  132,  751,  265,  128,  129,   46,   47,
+      135,  825,  113,  114,  154,  115,   41,   43,   43,   43,
+       43,   43,   43,  146,  147,  157,  826,  132,  165,  133,
+      166,  161,  162,  167,  168,  827,  158,  163,  188,  159,
+      133,  169,  160,  264,  189,  164,  828,  201,  133,  174,
+      173,  175,  176,  132,  429,  265,  128,  129,   46,   47,
        48,   49,  172,   51,   52,  202,  284,   53,   54,   55,
        48,   49,  172,   51,   52,  202,  284,   53,   54,   55,
-       56,   57,   58,  130,   60,   61,  285,  752,  131,  753,
+       56,   57,   58,  130,   60,   61,  285,  430,  131,  829,
       173,  173,  173,  173,  177,  173,  173,  178,  179,  173,
 
       173,  173,  173,  173,  177,  173,  173,  178,  179,  173,
 
-      173,  173,  181,  181,  181,  181,  181,  181,  228,  754,
+      173,  173,  181,  181,  181,  181,  181,  181,  228,  830,
       196,  197,  182,   66,   67,   67,   67,   67,   67,   67,
       198,  232,  229,  183,   68,  184,  184,  184,  184,  184,
       184,  240,  134,  241,  254,  233,  281,  286,  182,  135,
       196,  197,  182,   66,   67,   67,   67,   67,   67,   67,
       198,  232,  229,  183,   68,  184,  184,  184,  184,  184,
       184,  240,  134,  241,  254,  233,  281,  286,  182,  135,
-      257,  257,  282,  287,  242,  755,  257,  756,  164,  255,
+      257,  257,  282,  287,  242,  833,  257,  431,  164,  255,
        68,  256,  256,  256,  256,  256,  256,  257,  257,  257,
       260,  257,  257,  297,  257,  271,  257,  257,  257,  257,
        68,  256,  256,  256,  256,  256,  256,  257,  257,  257,
       260,  257,  257,  297,  257,  271,  257,  257,  257,  257,
-      757,  257,  340,  298,  257,  257,  338,  405,  257,  365,
-      406,  288,  257,  289,  257,  257,  290,  291,  339,  257,
-      341,  366,  257,  302,  302,  302,  302,  758,  599,  759,
+      432,  257,  380,  298,  257,  257,  378,  479,  257,  433,
+      480,  288,  257,  289,  257,  257,  290,  291,  379,  257,
+      381,  834,  257,  302,  302,  302,  302,   40,  669,  822,
 
 
-      257,  600,  760,  257,  302,  302,  302,  302,  303,  302,
+      257,  670,  434,  257,  302,  302,  302,  302,  303,  302,
       302,  304,  305,  302,  302,  302,  302,  302,  302,  302,
       306,  302,  302,  302,  302,  302,  302,  302,   43,   43,
       302,  304,  305,  302,  302,  302,  302,  302,  302,  302,
       306,  302,  302,  302,  302,  302,  302,  302,   43,   43,
-       43,   43,   43,   43,  761,  762,  763,  307,  132,  308,
+       43,   43,   43,   43,  831,  832,  435,  307,  132,  308,
       308,  308,  308,  308,  308,  184,  184,  184,  184,  184,
       308,  308,  308,  308,  308,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  256,  256,  256,
-      256,  256,  256,  378,  132,  256,  256,  256,  256,  256,
-      256,  376,  376,  376,  376,  764,  379,  376,  394,  376,
-      376,  376,  765,  376,  376,  766,  376,  767,  376,  376,
-      376,  395,  408,  376,  661,  662,  768,  376,  376,  415,
-
-      376,  416,  769,  417,  421,  421,  421,  421,  770,  376,
-      421,  421,  421,  421,  773,  663,  418,  422,  421,  421,
-      421,  421,  421,  421,  421,  421,  421,  421,  421,  308,
-      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
-      308,  486,  529,  530,  771,  772,  774,   40,  746,  745,
-      744,  743,  742,  741,  740,  739,  738,  487,  737,  736,
-      735,  734,  733,  732,  531,   38,   38,   38,  180,  180,
-      731,  730,  729,  728,  727,  726,  725,  724,  723,  722,
-      721,  720,  719,  718,  717,  716,  715,  714,  713,  712,
-      711,  710,  709,  708,  707,  706,  705,  704,  703,  702,
-
-      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
-      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
-      681,  680,  679,  678,  677,  676,  675,  674,  673,  672,
-      671,  670,  669,  668,  667,  666,  665,  664,  660,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
-      608,  607,  606,  605,  604,  603,  602,  601,  598,  597,
-
-      596,  595,  594,  593,  592,  591,  590,  589,  588,  587,
-      586,  585,  584,  583,  582,  581,  580,  579,  578,  577,
-      576,  575,  574,  573,  572,  571,  570,  569,  568,  567,
-      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
-      556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
-      546,  545,  544,  543,  542,  541,  540,  539,  538,  537,
-      536,  535,  534,  533,  532,  528,  527,  526,  525,  524,
-      523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
-      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
-      503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
-
-      493,  492,  491,  490,  489,  488,  485,  484,  483,  482,
-      481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
-      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
-      461,  460,  459,  458,  457,  456,  455,  454,  453,  452,
-      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
-      441,  440,  439,  438,  437,  436,  435,  434,  433,  432,
-      431,  430,  429,  428,  427,  426,  425,  424,  423,  420,
-      419,  414,  413,  412,  411,  410,  409,  407,  404,  403,
-      402,  401,  400,  399,  398,  397,  396,  393,  392,  389,
-      388,  387,  386,  385,  384,  383,  382,  381,  380,  377,
-
-      288,  260,  375,  374,  373,  372,  371,  370,  369,  368,
-      367,  364,  363,  362,  361,  360,  359,  358,  357,  356,
-      355,  354,  353,  352,  351,  350,  349,  348,  347,  346,
-      345,  344,  343,  342,  337,  336,  335,  334,  333,  332,
-      331,  330,  329,  328,  327,  326,  325,  324,  323,  322,
-      321,  320,  319,  318,  317,  316,  315,  314,  313,  312,
-      309,  301,  300,  299,  296,  295,  294,  293,  292,  283,
-      280,  279,  278,  277,  276,  275,  274,  273,  272,  270,
-      269,  268,  267,  266,  263,  262,  261,  259,  258,  172,
-      253,  252,  251,  250,  249,  248,  247,  246,  245,  244,
-
-      243,  237,  236,  235,  234,  231,  230,  227,  226,  225,
-      224,  223,  222,  221,  220,  217,  216,  215,  214,  213,
-      212,  209,  208,  207,  206,  205,  204,  203,  200,  199,
-      193,  192,  191,  190,  187,  186,  185,  156,  155,  149,
-      148,   39,  127,  126,  125,  124,  123,  122,  121,  118,
-       87,   39,   37,  775,    3,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775
+      184,  184,  184,  184,  184,  184,  184,  309,  312,  436,
+      320,  324,  310,  313,  132,  321,  325,  437,  327,  821,
+      559,  310,  314,  328,  321,  325,  820,  310,  313,  438,
+      311,  315,  328,  322,  326,  330,  560,  333,  339,  336,
+      331,  329,  334,  340,  337,  495,  495,  495,  495,  331,
+
+      819,  334,  340,  337,  818,  331,  817,  334,  332,  337,
+      335,  341,  338,  342,  345,  348,  351,  354,  343,  346,
+      349,  352,  355,  495,  495,  495,  495,  343,  346,  349,
+      352,  355,  452,  816,  346,  349,  344,  347,  350,  353,
+      356,  357,  360,  363,  815,  453,  358,  361,  364,  496,
+      495,  495,  495,  366,  369,  358,  361,  364,  367,  370,
+      814,  358,  361,  364,  359,  362,  365,  367,  370,  813,
+      372,  812,  811,  367,  370,  373,  368,  371,  382,  810,
+      385,  389,  392,  383,  373,  386,  390,  393,  809,  808,
+      373,  807,  383,  374,  386,  390,  393,  396,  806,  805,
+
+      804,  384,  397,  387,  391,  394,  468,  399,  402,  405,
+      409,  397,  400,  403,  406,  410,  803,  397,  802,  469,
+      398,  400,  403,  406,  410,  801,  800,  400,  403,  406,
+      401,  404,  407,  411,  412,  415,  418,  799,  798,  413,
+      416,  419,  495,  495,  495,  495,  421,  424,  413,  416,
+      419,  422,  425,  797,  413,  416,  419,  414,  417,  420,
+      422,  425,  796,  439,  795,  794,  422,  425,  440,  423,
+      426,  256,  256,  256,  256,  256,  256,  440,  256,  256,
+      256,  256,  256,  256,  450,  450,  441,  450,  450,  793,
+      450,  450,  450,  450,  450,  450,  792,  450,  791,  309,
+
+      450,  450,  790,  789,  450,  788,  482,  450,  450,  787,
+      786,  450,  450,  489,  312,  490,  320,  491,  495,  495,
+      495,  495,  311,  450,  308,  308,  308,  308,  308,  308,
+      492,  308,  308,  308,  308,  308,  308,  315,  312,  322,
+      498,  324,  327,  330,  333,  336,  339,  342,  345,  348,
+      351,  354,  357,  360,  363,  366,  369,  372,  382,  385,
+      389,  315,  392,  396,  326,  329,  332,  335,  338,  341,
+      344,  347,  350,  353,  356,  359,  362,  365,  368,  371,
+      374,  384,  387,  391,  399,  394,  398,  402,  405,  409,
+      412,  415,  418,  421,  424,  548,  439,  785,  602,  603,
+
+      649,  727,  728,  784,  783,  782,  781,  401,  780,  779,
+      404,  407,  411,  414,  417,  420,  423,  426,  549,  441,
+      604,  778,  729,  650,   38,   38,   38,  180,  180,  777,
+      776,  775,  774,  773,  772,  771,  770,  769,  768,  767,
+      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
+      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
+      746,  745,  744,  743,  742,  650,  741,  740,  739,  738,
+      737,  736,  735,  734,  733,  732,  731,  730,  726,  725,
+      724,  723,  722,  721,  720,  719,  718,  717,  716,  715,
+      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
+
+      704,  703,  702,  701,  700,  699,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
+      684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
+      674,  673,  672,  671,  668,  667,  666,  665,  664,  663,
+      662,  661,  660,  659,  658,  657,  656,  655,  654,  653,
+      652,  651,  648,  549,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  614,  613,  612,
+      611,  610,  609,  608,  607,  606,  605,  601,  600,  599,
+
+      598,  597,  596,  595,  594,  593,  592,  591,  590,  589,
+      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
+      578,  577,  576,  575,  574,  573,  572,  571,  570,  569,
+      568,  567,  566,  565,  564,  563,  562,  561,  558,  557,
+      556,  555,  554,  553,  552,  551,  441,  550,  547,  436,
+      546,  434,  545,  432,  544,  430,  543,  542,  426,  541,
+      423,  540,  420,  539,  417,  538,  414,  537,  411,  536,
+      535,  407,  534,  404,  533,  401,  532,  398,  531,  530,
+      394,  529,  391,  528,  387,  527,  384,  526,  525,  524,
+      523,  522,  521,  374,  520,  371,  519,  368,  518,  365,
+
+      517,  362,  516,  359,  515,  356,  514,  353,  513,  350,
+      512,  347,  511,  344,  510,  341,  509,  338,  508,  335,
+      507,  332,  506,  329,  505,  326,  504,  322,  503,  502,
+      501,  500,  499,  315,  497,  311,  494,  493,  488,  487,
+      486,  485,  484,  483,  481,  478,  477,  476,  475,  474,
+      473,  472,  471,  470,  467,  466,  463,  462,  461,  460,
+      459,  458,  457,  456,  455,  454,  451,  288,  260,  449,
+      448,  447,  446,  445,  444,  443,  442,  428,  427,  408,
+      395,  388,  377,  376,  375,  323,  319,  318,  317,  316,
+      301,  300,  299,  296,  295,  294,  293,  292,  283,  280,
+
+      279,  278,  277,  276,  275,  274,  273,  272,  270,  269,
+      268,  267,  266,  263,  262,  261,  259,  258,  172,  253,
+      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
+      237,  236,  235,  234,  231,  230,  227,  226,  225,  224,
+      223,  222,  221,  220,  217,  216,  215,  214,  213,  212,
+      209,  208,  207,  206,  205,  204,  203,  200,  199,  193,
+      192,  191,  190,  187,  186,  185,  156,  155,  149,  148,
+       39,  127,  126,  125,  124,  123,  122,  121,  118,   87,
+       39,   37,  835,    3,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835
     } ;
 
     } ;
 
-static yyconst flex_int16_t yy_chk[1123] =
+static yyconst flex_int16_t yy_chk[1352] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -813,7 +859,7 @@ static yyconst flex_int16_t yy_chk[1123] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    5,   23,    5,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    5,   23,    5,
-       10,   27,   46,   23,   17,   46,  721,   10,   10,   10,
+       10,   27,   46,   23,   17,   46,  809,   10,   10,   10,
        10,   10,   10,   10,   16,   17,   16,   29,   17,   27,
        18,  116,   16,   11,   11,   11,   11,   11,   11,   11,
 
        10,   10,   10,   10,   16,   17,   16,   29,   17,   27,
        18,  116,   16,   11,   11,   11,   11,   11,   11,   11,
 
@@ -826,110 +872,135 @@ static yyconst flex_int16_t yy_chk[1123] =
        14,   14,   14,   14,   14,   14,   14,   15,   47,   15,
        14,   14,   47,   12,   49,   22,   15,   49,   24,   21,
       273,   21,   15,   22,   15,   13,   21,   24,   22,   21,
        14,   14,   14,   14,   14,   14,   14,   15,   47,   15,
        14,   14,   47,   12,   49,   22,   15,   49,   24,   21,
       273,   21,   15,   22,   15,   13,   21,   24,   22,   21,
-       25,   24,   25,   25,   22,  273,  722,   14,   45,   45,
+       25,   24,   25,   25,   22,  273,  811,   14,   45,   45,
 
        92,   44,   44,   54,   45,   25,   26,   44,   26,   26,
        26,   26,   26,   44,   26,   45,   26,   54,   44,   92,
 
        92,   44,   44,   54,   45,   25,   26,   44,   26,   26,
        26,   26,   26,   44,   26,   45,   26,   54,   44,   92,
-       44,  723,   26,   26,   54,   26,   41,   43,   43,   43,
-       43,   43,   43,   50,   50,   57,  186,   43,   60,   50,
-       60,   59,   59,   60,   60,  186,   57,   59,   75,   57,
-       50,   60,   57,  140,   75,   59,  724,   84,   59,   63,
-       63,   63,   63,   43,  728,  140,   41,   41,   41,   41,
+       44,  813,   26,   26,   54,   26,   41,   43,   43,   43,
+       43,   43,   43,   50,   50,   57,  816,   43,   60,   50,
+       60,   59,   59,   60,   60,  817,   57,   59,   75,   57,
+       50,   60,   57,  140,   75,   59,  821,   84,   59,   63,
+       63,   63,   63,   43,  239,  140,   41,   41,   41,   41,
        41,   41,   62,   41,   41,   84,  159,   41,   41,   41,
        41,   41,   62,   41,   41,   84,  159,   41,   41,   41,
-       41,   41,   41,   41,   41,   41,  159,  729,   41,  731,
+       41,   41,   41,   41,   41,   41,  159,  239,   41,  823,
        62,   62,   62,   62,   64,   64,   64,   64,   65,   65,
 
        62,   62,   62,   62,   64,   64,   64,   64,   65,   65,
 
-       65,   65,   66,   66,   66,   66,   66,   66,  108,  732,
+       65,   65,   66,   66,   66,   66,   66,   66,  108,  825,
        81,   81,   66,   67,   67,   67,   67,   67,   67,   67,
        81,  111,  108,   68,   67,   68,   68,   68,   68,   68,
        68,  117,  128,  117,  130,  111,  157,  160,   66,  128,
        81,   81,   66,   67,   67,   67,   67,   67,   67,   67,
        81,  111,  108,   68,   67,   68,   68,   68,   68,   68,
        68,  117,  128,  117,  130,  111,  157,  160,   66,  128,
-      133,  133,  157,  160,  117,  733,  133,  735,  130,  132,
+      133,  133,  157,  160,  117,  831,  133,  240,  130,  132,
        67,  132,  132,  132,  132,  132,  132,  133,  136,  136,
       136,  146,  146,  169,  136,  147,  147,  146,  161,  161,
        67,  132,  132,  132,  132,  132,  132,  133,  136,  136,
       136,  146,  146,  169,  136,  147,  147,  146,  161,  161,
-      736,  147,  219,  169,  161,  136,  218,  287,  146,  243,
+      240,  147,  219,  169,  161,  136,  218,  287,  146,  241,
       287,  161,  147,  162,  162,  161,  163,  163,  218,  162,
       287,  161,  147,  162,  162,  161,  163,  163,  218,  162,
-      219,  243,  163,  173,  173,  173,  173,  737,  500,  738,
+      219,  832,  163,  173,  173,  173,  173,  837,  573,  805,
 
 
-      162,  500,  741,  163,  174,  174,  174,  174,  175,  175,
+      162,  573,  241,  163,  174,  174,  174,  174,  175,  175,
       175,  175,  176,  176,  176,  176,  177,  177,  177,  177,
       178,  178,  178,  178,  179,  179,  179,  179,  181,  181,
       175,  175,  176,  176,  176,  176,  177,  177,  177,  177,
       178,  178,  178,  178,  179,  179,  179,  179,  181,  181,
-      181,  181,  181,  181,  742,  745,  749,  182,  181,  182,
+      181,  181,  181,  181,  828,  828,  242,  182,  181,  182,
       182,  182,  182,  182,  182,  183,  183,  183,  183,  183,
       182,  182,  182,  182,  182,  183,  183,  183,  183,  183,
-      183,  184,  184,  184,  184,  184,  184,  255,  255,  255,
-      255,  255,  255,  259,  181,  256,  256,  256,  256,  256,
-      256,  257,  257,  271,  271,  751,  259,  257,  276,  271,
-      289,  289,  753,  290,  290,  756,  289,  757,  257,  290,
-      271,  276,  291,  291,  567,  567,  761,  289,  291,  299,
-
-      290,  299,  763,  299,  302,  302,  302,  302,  765,  291,
-      303,  303,  303,  303,  771,  567,  299,  304,  304,  304,
-      304,  305,  305,  305,  305,  306,  306,  306,  306,  307,
-      307,  307,  307,  307,  307,  308,  308,  308,  308,  308,
-      308,  375,  427,  427,  768,  768,  772,  777,  719,  717,
-      714,  712,  710,  709,  707,  706,  705,  375,  704,  703,
-      702,  699,  698,  696,  427,  776,  776,  776,  778,  778,
-      695,  694,  693,  692,  691,  689,  688,  687,  685,  683,
-      682,  679,  676,  675,  663,  662,  661,  651,  650,  649,
-      648,  628,  621,  620,  617,  616,  615,  614,  613,  612,
-
-      611,  610,  609,  608,  606,  603,  602,  601,  600,  599,
-      598,  597,  596,  595,  594,  593,  591,  590,  589,  588,
-      586,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      575,  574,  573,  572,  571,  570,  569,  568,  566,  565,
-      564,  563,  562,  561,  560,  559,  558,  557,  556,  555,
-      554,  551,  550,  549,  548,  547,  546,  545,  544,  543,
-      542,  541,  540,  539,  538,  537,  536,  535,  534,  533,
-      531,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  519,  518,  517,  516,  514,  513,  512,  511,
-      510,  508,  507,  506,  505,  504,  503,  502,  499,  498,
-
-      496,  495,  494,  493,  490,  489,  488,  487,  486,  485,
-      484,  482,  481,  480,  479,  478,  477,  476,  475,  474,
-      473,  472,  471,  470,  469,  468,  467,  466,  465,  464,
-      463,  462,  461,  460,  459,  458,  457,  456,  455,  454,
-      453,  452,  451,  449,  448,  447,  446,  445,  444,  443,
-      442,  441,  440,  439,  438,  437,  436,  435,  434,  433,
-      432,  431,  430,  429,  428,  425,  424,  423,  420,  419,
-      418,  417,  416,  415,  413,  411,  410,  409,  407,  406,
-      405,  404,  403,  402,  401,  400,  399,  398,  397,  396,
-      395,  394,  393,  392,  391,  390,  388,  387,  386,  385,
-
-      384,  383,  382,  379,  378,  377,  374,  373,  372,  371,
-      370,  369,  368,  367,  366,  365,  364,  363,  362,  361,
-      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
-      349,  348,  347,  346,  345,  343,  342,  341,  340,  339,
-      338,  337,  336,  335,  334,  333,  332,  331,  330,  329,
-      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
-      318,  316,  315,  314,  313,  312,  311,  310,  309,  301,
-      300,  298,  297,  296,  295,  294,  293,  288,  286,  285,
-      284,  283,  282,  281,  280,  279,  277,  275,  274,  272,
-      270,  269,  266,  265,  264,  263,  262,  261,  260,  258,
-
-      254,  253,  252,  251,  250,  249,  248,  247,  246,  245,
-      244,  242,  241,  240,  239,  238,  237,  236,  235,  234,
-      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
-      223,  222,  221,  220,  217,  216,  215,  214,  213,  212,
-      211,  210,  209,  207,  206,  204,  203,  201,  199,  198,
-      197,  196,  195,  194,  193,  192,  191,  190,  189,  187,
-      185,  172,  171,  170,  168,  167,  166,  165,  164,  158,
-      156,  155,  154,  153,  152,  151,  150,  149,  148,  145,
-      144,  143,  142,  141,  139,  138,  137,  135,  134,  131,
-      129,  127,  126,  125,  124,  123,  122,  121,  120,  119,
-
-      118,  115,  114,  113,  112,  110,  109,  107,  106,  105,
-      104,  103,  102,  101,  100,   98,   97,   96,   95,   94,
-       93,   91,   90,   89,   88,   87,   86,   85,   83,   82,
-       79,   78,   77,   76,   74,   73,   72,   56,   55,   52,
-       51,   38,   37,   35,   34,   33,   32,   31,   30,   28,
-       20,    8,    7,    3,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775
+      183,  184,  184,  184,  184,  184,  184,  185,  186,  242,
+      192,  194,  185,  186,  181,  192,  194,  243,  195,  804,
+      449,  185,  186,  195,  192,  194,  803,  185,  186,  243,
+      185,  186,  195,  192,  194,  196,  449,  197,  199,  198,
+      196,  195,  197,  199,  198,  302,  302,  302,  302,  196,
+
+      800,  197,  199,  198,  799,  196,  798,  197,  196,  198,
+      197,  199,  198,  201,  203,  204,  206,  207,  201,  203,
+      204,  206,  207,  303,  303,  303,  303,  201,  203,  204,
+      206,  207,  259,  797,  203,  204,  201,  203,  204,  206,
+      207,  209,  210,  211,  795,  259,  209,  210,  211,  304,
+      304,  304,  304,  212,  213,  209,  210,  211,  212,  213,
+      794,  209,  210,  211,  209,  210,  211,  212,  213,  793,
+      214,  791,  790,  212,  213,  214,  212,  213,  220,  786,
+      221,  223,  224,  220,  214,  221,  223,  224,  785,  784,
+      214,  783,  220,  214,  221,  223,  224,  226,  781,  779,
+
+      776,  220,  226,  221,  223,  224,  276,  227,  228,  229,
+      231,  226,  227,  228,  229,  231,  775,  226,  773,  276,
+      226,  227,  228,  229,  231,  772,  771,  227,  228,  229,
+      227,  228,  229,  231,  232,  233,  234,  770,  769,  232,
+      233,  234,  305,  305,  305,  305,  235,  236,  232,  233,
+      234,  235,  236,  768,  232,  233,  234,  232,  233,  234,
+      235,  236,  765,  244,  764,  762,  235,  236,  244,  235,
+      236,  255,  255,  255,  255,  255,  255,  244,  256,  256,
+      256,  256,  256,  256,  257,  257,  244,  271,  271,  761,
+      257,  289,  289,  271,  290,  290,  760,  289,  759,  310,
+
+      290,  257,  758,  757,  271,  755,  291,  291,  289,  754,
+      753,  290,  291,  299,  313,  299,  321,  299,  306,  306,
+      306,  306,  310,  291,  307,  307,  307,  307,  307,  307,
+      299,  308,  308,  308,  308,  308,  308,  313,  314,  321,
+      314,  325,  328,  331,  334,  337,  340,  343,  346,  349,
+      352,  355,  358,  361,  364,  367,  370,  373,  383,  386,
+      390,  314,  393,  397,  325,  328,  331,  334,  337,  340,
+      343,  346,  349,  352,  355,  358,  361,  364,  367,  370,
+      373,  383,  386,  390,  400,  393,  397,  403,  406,  410,
+      413,  416,  419,  422,  425,  437,  440,  751,  501,  501,
+
+      550,  636,  636,  749,  748,  745,  742,  400,  741,  729,
+      403,  406,  410,  413,  416,  419,  422,  425,  437,  440,
+      501,  728,  636,  550,  836,  836,  836,  838,  838,  727,
+      698,  691,  690,  687,  686,  685,  684,  683,  682,  681,
+      680,  679,  678,  676,  673,  672,  671,  670,  669,  668,
+      667,  666,  665,  664,  663,  661,  660,  659,  658,  656,
+      654,  653,  652,  651,  650,  649,  648,  647,  646,  645,
+      644,  643,  642,  641,  640,  639,  638,  637,  635,  634,
+      633,  632,  631,  630,  629,  628,  627,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  614,  613,  612,
+
+      611,  610,  609,  608,  607,  606,  604,  603,  602,  601,
+      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
+      590,  589,  587,  586,  585,  584,  583,  581,  580,  579,
+      578,  577,  576,  575,  572,  571,  569,  568,  567,  566,
+      563,  562,  561,  560,  559,  558,  557,  555,  554,  553,
+      552,  551,  549,  548,  547,  546,  545,  544,  543,  542,
+      541,  540,  539,  538,  537,  536,  535,  534,  533,  532,
+      531,  530,  529,  528,  527,  523,  522,  521,  520,  519,
+      518,  517,  516,  515,  514,  513,  512,  511,  510,  509,
+      508,  507,  506,  505,  504,  503,  502,  499,  498,  497,
+
+      494,  493,  492,  491,  490,  489,  487,  485,  484,  483,
+      481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
+      471,  470,  469,  468,  467,  466,  465,  464,  462,  461,
+      460,  459,  458,  457,  456,  453,  452,  451,  448,  447,
+      446,  445,  444,  443,  442,  441,  439,  438,  436,  435,
+      434,  433,  432,  431,  430,  429,  427,  426,  424,  423,
+      421,  420,  418,  417,  415,  414,  412,  411,  409,  408,
+      407,  405,  404,  402,  401,  399,  398,  396,  395,  394,
+      392,  391,  389,  387,  385,  384,  382,  381,  379,  377,
+      376,  375,  374,  372,  371,  369,  368,  366,  365,  363,
+
+      362,  360,  359,  357,  356,  354,  353,  351,  350,  348,
+      347,  345,  344,  342,  341,  339,  338,  336,  335,  333,
+      332,  330,  329,  327,  326,  324,  322,  320,  319,  318,
+      317,  316,  315,  312,  311,  309,  301,  300,  298,  297,
+      296,  295,  294,  293,  288,  286,  285,  284,  283,  282,
+      281,  280,  279,  277,  275,  274,  272,  270,  269,  266,
+      265,  264,  263,  262,  261,  260,  258,  254,  253,  252,
+      251,  250,  249,  248,  247,  246,  245,  238,  237,  230,
+      225,  222,  217,  216,  215,  193,  191,  190,  189,  187,
+      172,  171,  170,  168,  167,  166,  165,  164,  158,  156,
+
+      155,  154,  153,  152,  151,  150,  149,  148,  145,  144,
+      143,  142,  141,  139,  138,  137,  135,  134,  131,  129,
+      127,  126,  125,  124,  123,  122,  121,  120,  119,  118,
+      115,  114,  113,  112,  110,  109,  107,  106,  105,  104,
+      103,  102,  101,  100,   98,   97,   96,   95,   94,   93,
+       91,   90,   89,   88,   87,   86,   85,   83,   82,   79,
+       78,   77,   76,   74,   73,   72,   56,   55,   52,   51,
+       38,   37,   35,   34,   33,   32,   31,   30,   28,   20,
+        8,    7,    3,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
+      835
     } ;
 
 /* The intent behind this definition is that it'll catch
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -997,11 +1068,13 @@ static yyconst flex_int16_t yy_chk[1123] =
    } while (0)
 
 
    } while (0)
 
 
-#define return_opcode(condition, token, opcode, sat)   \
+#define return_opcode(condition, token, opcode, len)   \
    do {                                                        \
    do {                                                        \
-      if (condition) {                                 \
+      if (condition &&                                 \
+         _mesa_parse_instruction_suffix(yyextra,       \
+                                        yytext + len,  \
+                                        & yylval->temp_inst)) {        \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
-        yylval->temp_inst.SaturateMode = SATURATE_ ## sat; \
         return token;                                  \
       } else {                                         \
         yylval->string = strdup(yytext);               \
         return token;                                  \
       } else {                                         \
         yylval->string = strdup(yytext);               \
@@ -1067,7 +1140,7 @@ swiz_from_char(char c)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 1071 "lex.yy.c"
+#line 1144 "lex.yy.c"
 
 #define INITIAL 0
 
 
 #define INITIAL 0
 
@@ -1313,10 +1386,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 136 "program_lexer.l"
+#line 143 "program_lexer.l"
 
 
 
 
-#line 1320 "lex.yy.c"
+#line 1393 "lex.yy.c"
 
     yylval = yylval_param;
 
 
     yylval = yylval_param;
 
@@ -1373,13 +1446,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 776 )
+                               if ( yy_current_state >= 836 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 1055 );
+               while ( yy_base[yy_current_state] != 1284 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1405,17 +1478,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
 
 case 1:
 YY_RULE_SETUP
-#line 138 "program_lexer.l"
+#line 145 "program_lexer.l"
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 139 "program_lexer.l"
+#line 146 "program_lexer.l"
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 140 "program_lexer.l"
+#line 147 "program_lexer.l"
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
@@ -1423,983 +1496,738 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 144 "program_lexer.l"
+#line 151 "program_lexer.l"
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 145 "program_lexer.l"
+#line 152 "program_lexer.l"
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 146 "program_lexer.l"
+#line 153 "program_lexer.l"
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 147 "program_lexer.l"
+#line 154 "program_lexer.l"
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 148 "program_lexer.l"
+#line 155 "program_lexer.l"
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 149 "program_lexer.l"
+#line 156 "program_lexer.l"
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 150 "program_lexer.l"
+#line 157 "program_lexer.l"
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 152 "program_lexer.l"
-{ return_opcode(             1, VECTOR_OP, ABS, OFF); }
+#line 159 "program_lexer.l"
+{ return_opcode(             1, VECTOR_OP, ABS, 3); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 153 "program_lexer.l"
-{ return_opcode(require_ARB_fp, VECTOR_OP, ABS, ZERO_ONE); }
+#line 160 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, ADD, 3); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 154 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, ADD, OFF); }
+#line 161 "program_lexer.l"
+{ return_opcode(require_ARB_vp, ARL, ARL, 3); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 155 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, ADD, ZERO_ONE); }
+#line 163 "program_lexer.l"
+{ return_opcode(require_ARB_fp, TRI_OP, CMP, 3); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 156 "program_lexer.l"
-{ return_opcode(require_ARB_vp, ARL, ARL, OFF); }
+#line 164 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 158 "program_lexer.l"
-{ return_opcode(require_ARB_fp, TRI_OP, CMP, OFF); }
+#line 166 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, DDX, 3); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 159 "program_lexer.l"
-{ return_opcode(require_ARB_fp, TRI_OP, CMP, ZERO_ONE); }
+#line 167 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, DDY, 3); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 160 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, COS, OFF); }
+#line 168 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, DP3, 3); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 161 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, COS, ZERO_ONE); }
+#line 169 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, DP4, 3); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 163 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, DDX, OFF); }
+#line 170 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, DPH, 3); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 164 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, DDX, ZERO_ONE); }
+#line 171 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, DST, 3); }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 165 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, DDY, OFF); }
+#line 173 "program_lexer.l"
+{ return_opcode(             1, SCALAR_OP, EX2, 3); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 166 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, DDY, ZERO_ONE); }
+#line 174 "program_lexer.l"
+{ return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 167 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, DP3, OFF); }
+#line 176 "program_lexer.l"
+{ return_opcode(             1, VECTOR_OP, FLR, 3); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 168 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, DP3, ZERO_ONE); }
+#line 177 "program_lexer.l"
+{ return_opcode(             1, VECTOR_OP, FRC, 3); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 169 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, DP4, OFF); }
+#line 179 "program_lexer.l"
+{ return_opcode(require_ARB_fp, KIL, KIL, 3); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 170 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, DP4, ZERO_ONE); }
+#line 181 "program_lexer.l"
+{ return_opcode(             1, VECTOR_OP, LIT, 3); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 171 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, DPH, OFF); }
+#line 182 "program_lexer.l"
+{ return_opcode(             1, SCALAR_OP, LG2, 3); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 172 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, DPH, ZERO_ONE); }
+#line 183 "program_lexer.l"
+{ return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 173 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, DST, OFF); }
+#line 184 "program_lexer.l"
+{ return_opcode(require_ARB_fp, TRI_OP, LRP, 3); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 174 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, DST, ZERO_ONE); }
+#line 186 "program_lexer.l"
+{ return_opcode(             1, TRI_OP, MAD, 3); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 176 "program_lexer.l"
-{ return_opcode(             1, SCALAR_OP, EX2, OFF); }
+#line 187 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, MAX, 3); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 177 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, EX2, ZERO_ONE); }
+#line 188 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, MIN, 3); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 178 "program_lexer.l"
-{ return_opcode(require_ARB_vp, SCALAR_OP, EXP, OFF); }
+#line 189 "program_lexer.l"
+{ return_opcode(             1, VECTOR_OP, MOV, 3); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 180 "program_lexer.l"
-{ return_opcode(             1, VECTOR_OP, FLR, OFF); }
+#line 190 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, MUL, 3); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 181 "program_lexer.l"
-{ return_opcode(require_ARB_fp, VECTOR_OP, FLR, ZERO_ONE); }
+#line 192 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, PK2H, 4); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 182 "program_lexer.l"
-{ return_opcode(             1, VECTOR_OP, FRC, OFF); }
+#line 193 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, PK2US, 5); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 183 "program_lexer.l"
-{ return_opcode(require_ARB_fp, VECTOR_OP, FRC, ZERO_ONE); }
+#line 194 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, PK4B, 4); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 185 "program_lexer.l"
-{ return_opcode(require_ARB_fp, KIL, KIL, OFF); }
+#line 195 "program_lexer.l"
+{ return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, 5); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 187 "program_lexer.l"
-{ return_opcode(             1, VECTOR_OP, LIT, OFF); }
+#line 196 "program_lexer.l"
+{ return_opcode(             1, BINSC_OP, POW, 3); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 188 "program_lexer.l"
-{ return_opcode(require_ARB_fp, VECTOR_OP, LIT, ZERO_ONE); }
+#line 198 "program_lexer.l"
+{ return_opcode(             1, SCALAR_OP, RCP, 3); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 189 "program_lexer.l"
-{ return_opcode(             1, SCALAR_OP, LG2, OFF); }
+#line 199 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP,    RFL, 3); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 190 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, LG2, ZERO_ONE); }
+#line 200 "program_lexer.l"
+{ return_opcode(             1, SCALAR_OP, RSQ, 3); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 191 "program_lexer.l"
-{ return_opcode(require_ARB_vp, SCALAR_OP, LOG, OFF); }
+#line 202 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 192 "program_lexer.l"
-{ return_opcode(require_ARB_fp, TRI_OP, LRP, OFF); }
+#line 203 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, SEQ, 3); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 193 "program_lexer.l"
-{ return_opcode(require_ARB_fp, TRI_OP, LRP, ZERO_ONE); }
+#line 204 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, SFL, 3); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 195 "program_lexer.l"
-{ return_opcode(             1, TRI_OP, MAD, OFF); }
+#line 205 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, SGE, 3); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 196 "program_lexer.l"
-{ return_opcode(require_ARB_fp, TRI_OP, MAD, ZERO_ONE); }
+#line 206 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, SGT, 3); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 197 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, MAX, OFF); }
+#line 207 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 198 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, MAX, ZERO_ONE); }
+#line 208 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, SLE, 3); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 199 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, MIN, OFF); }
+#line 209 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, SLT, 3); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 200 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, MIN, ZERO_ONE); }
+#line 210 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, SNE, 3); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 201 "program_lexer.l"
-{ return_opcode(             1, VECTOR_OP, MOV, OFF); }
+#line 211 "program_lexer.l"
+{ return_opcode(require_NV_fp,  BIN_OP, STR, 3); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 202 "program_lexer.l"
-{ return_opcode(require_ARB_fp, VECTOR_OP, MOV, ZERO_ONE); }
+#line 212 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, SUB, 3); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 203 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, MUL, OFF); }
+#line 213 "program_lexer.l"
+{ return_opcode(             1, SWZ, SWZ, 3); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 204 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, MUL, ZERO_ONE); }
+#line 215 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 206 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK2H, OFF); }
+#line 216 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 207 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK2H, ZERO_ONE); }
+#line 217 "program_lexer.l"
+{ return_opcode(require_NV_fp,  TXD_OP, TXD, 3); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 208 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK2US, OFF); }
+#line 218 "program_lexer.l"
+{ return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 209 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK2US, ZERO_ONE); }
+#line 220 "program_lexer.l"
+{ return_opcode(require_NV_fp,  SCALAR_OP, UP2H, 4); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 210 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK4B, OFF); }
+#line 221 "program_lexer.l"
+{ return_opcode(require_NV_fp,  SCALAR_OP, UP2US, 5); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 211 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK4B, ZERO_ONE); }
+#line 223 "program_lexer.l"
+{ return_opcode(require_NV_fp,  TRI_OP, X2D, 3); }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 212 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, OFF); }
+#line 224 "program_lexer.l"
+{ return_opcode(             1, BIN_OP, XPD, 3); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 213 "program_lexer.l"
-{ return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, ZERO_ONE); }
+#line 226 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 214 "program_lexer.l"
-{ return_opcode(             1, BINSC_OP, POW, OFF); }
+#line 227 "program_lexer.l"
+{ return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 215 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BINSC_OP, POW, ZERO_ONE); }
+#line 228 "program_lexer.l"
+{ return PROGRAM; }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 217 "program_lexer.l"
-{ return_opcode(             1, SCALAR_OP, RCP, OFF); }
+#line 229 "program_lexer.l"
+{ return STATE; }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 218 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, RCP, ZERO_ONE); }
+#line 230 "program_lexer.l"
+{ return RESULT; }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 219 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP,    RFL, OFF); }
+#line 232 "program_lexer.l"
+{ return AMBIENT; }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 220 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP,    RFL, ZERO_ONE); }
+#line 233 "program_lexer.l"
+{ return ATTENUATION; }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 221 "program_lexer.l"
-{ return_opcode(             1, SCALAR_OP, RSQ, OFF); }
+#line 234 "program_lexer.l"
+{ return BACK; }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 222 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, RSQ, ZERO_ONE); }
+#line 235 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, CLIP); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 224 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, SCS, OFF); }
+#line 236 "program_lexer.l"
+{ return COLOR; }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 225 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, SCS, ZERO_ONE); }
+#line 237 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_fp, DEPTH); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 226 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SEQ, OFF); }
+#line 238 "program_lexer.l"
+{ return DIFFUSE; }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 227 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SEQ, ZERO_ONE); }
+#line 239 "program_lexer.l"
+{ return DIRECTION; }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 228 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SFL, OFF); }
+#line 240 "program_lexer.l"
+{ return EMISSION; }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 229 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SFL, ZERO_ONE); }
+#line 241 "program_lexer.l"
+{ return ENV; }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 230 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, SGE, OFF); }
+#line 242 "program_lexer.l"
+{ return EYE; }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 231 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, SGE, ZERO_ONE); }
+#line 243 "program_lexer.l"
+{ return FOGCOORD; }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 232 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SGT, OFF); }
+#line 244 "program_lexer.l"
+{ return FOG; }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 233 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SGT, ZERO_ONE); }
+#line 245 "program_lexer.l"
+{ return FRONT; }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 234 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, SIN, OFF); }
+#line 246 "program_lexer.l"
+{ return HALF; }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 235 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SCALAR_OP, SIN, ZERO_ONE); }
+#line 247 "program_lexer.l"
+{ return INVERSE; }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 236 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SLE, OFF); }
+#line 248 "program_lexer.l"
+{ return INVTRANS; }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 237 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SLE, ZERO_ONE); }
+#line 249 "program_lexer.l"
+{ return LIGHT; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 238 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, SLT, OFF); }
+#line 250 "program_lexer.l"
+{ return LIGHTMODEL; }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 239 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, SLT, ZERO_ONE); }
+#line 251 "program_lexer.l"
+{ return LIGHTPROD; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 240 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SNE, OFF); }
+#line 252 "program_lexer.l"
+{ return LOCAL; }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 241 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, SNE, ZERO_ONE); }
+#line 253 "program_lexer.l"
+{ return MATERIAL; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 242 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, STR, OFF); }
+#line 254 "program_lexer.l"
+{ return MAT_PROGRAM; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 243 "program_lexer.l"
-{ return_opcode(require_NV_fp,  BIN_OP, STR, ZERO_ONE); }
+#line 255 "program_lexer.l"
+{ return MATRIX; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 244 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, SUB, OFF); }
+#line 256 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 245 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, SUB, ZERO_ONE); }
+#line 257 "program_lexer.l"
+{ return MODELVIEW; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 246 "program_lexer.l"
-{ return_opcode(             1, SWZ, SWZ, OFF); }
+#line 258 "program_lexer.l"
+{ return MVP; }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 247 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SWZ, SWZ, ZERO_ONE); }
+#line 259 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, NORMAL); }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 249 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TEX, OFF); }
+#line 260 "program_lexer.l"
+{ return OBJECT; }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 250 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TEX, ZERO_ONE); }
+#line 261 "program_lexer.l"
+{ return PALETTE; }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 251 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TXB, OFF); }
+#line 262 "program_lexer.l"
+{ return PARAMS; }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 252 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TXB, ZERO_ONE); }
+#line 263 "program_lexer.l"
+{ return PLANE; }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 253 "program_lexer.l"
-{ return_opcode(require_NV_fp,  TXD_OP, TXD, OFF); }
+#line 264 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, POINT); }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 254 "program_lexer.l"
-{ return_opcode(require_NV_fp,  TXD_OP, TXD, ZERO_ONE); }
+#line 265 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, POINTSIZE); }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 255 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TXP, OFF); }
+#line 266 "program_lexer.l"
+{ return POSITION; }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 256 "program_lexer.l"
-{ return_opcode(require_ARB_fp, SAMPLE_OP, TXP, ZERO_ONE); }
+#line 267 "program_lexer.l"
+{ return PRIMARY; }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 258 "program_lexer.l"
-{ return_opcode(require_NV_fp,  SCALAR_OP, UP2H, OFF); }
+#line 268 "program_lexer.l"
+{ return PROJECTION; }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 259 "program_lexer.l"
-{ return_opcode(require_NV_fp,  SCALAR_OP, UP2H, ZERO_ONE); }
+#line 269 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_fp, RANGE); }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 260 "program_lexer.l"
-{ return_opcode(require_NV_fp,  SCALAR_OP, UP2US, OFF); }
+#line 270 "program_lexer.l"
+{ return ROW; }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 261 "program_lexer.l"
-{ return_opcode(require_NV_fp,  SCALAR_OP, UP2US, ZERO_ONE); }
+#line 271 "program_lexer.l"
+{ return SCENECOLOR; }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 263 "program_lexer.l"
-{ return_opcode(require_NV_fp,  TRI_OP, X2D, OFF); }
+#line 272 "program_lexer.l"
+{ return SECONDARY; }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 264 "program_lexer.l"
-{ return_opcode(require_NV_fp,  TRI_OP, X2D, ZERO_ONE); }
+#line 273 "program_lexer.l"
+{ return SHININESS; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 265 "program_lexer.l"
-{ return_opcode(             1, BIN_OP, XPD, OFF); }
+#line 274 "program_lexer.l"
+{ return_token_or_DOT(require_ARB_vp, SIZE); }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 266 "program_lexer.l"
-{ return_opcode(require_ARB_fp, BIN_OP, XPD, ZERO_ONE); }
+#line 275 "program_lexer.l"
+{ return SPECULAR; }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 268 "program_lexer.l"
-{ return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
+#line 276 "program_lexer.l"
+{ return SPOT; }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 269 "program_lexer.l"
-{ return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
+#line 277 "program_lexer.l"
+{ return TEXCOORD; }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 270 "program_lexer.l"
-{ return PROGRAM; }
-       YY_BREAK
-case 116:
-YY_RULE_SETUP
-#line 271 "program_lexer.l"
-{ return STATE; }
-       YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 272 "program_lexer.l"
-{ return RESULT; }
-       YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 274 "program_lexer.l"
-{ return AMBIENT; }
-       YY_BREAK
-case 119:
-YY_RULE_SETUP
-#line 275 "program_lexer.l"
-{ return ATTENUATION; }
-       YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 276 "program_lexer.l"
-{ return BACK; }
-       YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 277 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, CLIP); }
-       YY_BREAK
-case 122:
-YY_RULE_SETUP
 #line 278 "program_lexer.l"
 #line 278 "program_lexer.l"
-{ return COLOR; }
-       YY_BREAK
-case 123:
-YY_RULE_SETUP
-#line 279 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_fp, DEPTH); }
-       YY_BREAK
-case 124:
-YY_RULE_SETUP
-#line 280 "program_lexer.l"
-{ return DIFFUSE; }
-       YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 281 "program_lexer.l"
-{ return DIRECTION; }
-       YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 282 "program_lexer.l"
-{ return EMISSION; }
-       YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 283 "program_lexer.l"
-{ return ENV; }
-       YY_BREAK
-case 128:
-YY_RULE_SETUP
-#line 284 "program_lexer.l"
-{ return EYE; }
-       YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 285 "program_lexer.l"
-{ return FOGCOORD; }
-       YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 286 "program_lexer.l"
-{ return FOG; }
-       YY_BREAK
-case 131:
-YY_RULE_SETUP
-#line 287 "program_lexer.l"
-{ return FRONT; }
-       YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 288 "program_lexer.l"
-{ return HALF; }
-       YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 289 "program_lexer.l"
-{ return INVERSE; }
-       YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 290 "program_lexer.l"
-{ return INVTRANS; }
-       YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 291 "program_lexer.l"
-{ return LIGHT; }
-       YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 292 "program_lexer.l"
-{ return LIGHTMODEL; }
-       YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 293 "program_lexer.l"
-{ return LIGHTPROD; }
-       YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 294 "program_lexer.l"
-{ return LOCAL; }
-       YY_BREAK
-case 139:
-YY_RULE_SETUP
-#line 295 "program_lexer.l"
-{ return MATERIAL; }
-       YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 296 "program_lexer.l"
-{ return MAT_PROGRAM; }
-       YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 297 "program_lexer.l"
-{ return MATRIX; }
-       YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 298 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
-       YY_BREAK
-case 143:
-YY_RULE_SETUP
-#line 299 "program_lexer.l"
-{ return MODELVIEW; }
-       YY_BREAK
-case 144:
-YY_RULE_SETUP
-#line 300 "program_lexer.l"
-{ return MVP; }
-       YY_BREAK
-case 145:
-YY_RULE_SETUP
-#line 301 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, NORMAL); }
-       YY_BREAK
-case 146:
-YY_RULE_SETUP
-#line 302 "program_lexer.l"
-{ return OBJECT; }
-       YY_BREAK
-case 147:
-YY_RULE_SETUP
-#line 303 "program_lexer.l"
-{ return PALETTE; }
-       YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 304 "program_lexer.l"
-{ return PARAMS; }
-       YY_BREAK
-case 149:
-YY_RULE_SETUP
-#line 305 "program_lexer.l"
-{ return PLANE; }
-       YY_BREAK
-case 150:
-YY_RULE_SETUP
-#line 306 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, POINT); }
-       YY_BREAK
-case 151:
-YY_RULE_SETUP
-#line 307 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, POINTSIZE); }
-       YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 308 "program_lexer.l"
-{ return POSITION; }
-       YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 309 "program_lexer.l"
-{ return PRIMARY; }
-       YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 310 "program_lexer.l"
-{ return PROJECTION; }
-       YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 311 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_fp, RANGE); }
-       YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 312 "program_lexer.l"
-{ return ROW; }
-       YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 313 "program_lexer.l"
-{ return SCENECOLOR; }
-       YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 314 "program_lexer.l"
-{ return SECONDARY; }
-       YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 315 "program_lexer.l"
-{ return SHININESS; }
-       YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 316 "program_lexer.l"
-{ return_token_or_DOT(require_ARB_vp, SIZE); }
-       YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 317 "program_lexer.l"
-{ return SPECULAR; }
-       YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 318 "program_lexer.l"
-{ return SPOT; }
-       YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 319 "program_lexer.l"
-{ return TEXCOORD; }
-       YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 320 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
-case 165:
+case 116:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 321 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
-case 166:
+case 117:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 322 "program_lexer.l"
+#line 280 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
-case 167:
+case 118:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 323 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
-case 168:
+case 119:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 324 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
-case 169:
+case 120:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 325 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
 { return TEXTURE; }
        YY_BREAK
-case 170:
+case 121:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 326 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
 { return TRANSPOSE; }
        YY_BREAK
-case 171:
+case 122:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 327 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
-case 172:
+case 123:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 328 "program_lexer.l"
+#line 286 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
-case 173:
+case 124:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 330 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
-case 174:
+case 125:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 331 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
-case 175:
+case 126:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 332 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
-case 176:
+case 127:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 333 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
-case 177:
+case 128:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 334 "program_lexer.l"
+#line 292 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
-case 178:
+case 129:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 335 "program_lexer.l"
+#line 293 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
        YY_BREAK
-case 179:
+case 130:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 336 "program_lexer.l"
+#line 294 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
        YY_BREAK
-case 180:
+case 131:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 337 "program_lexer.l"
+#line 295 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
        YY_BREAK
-case 181:
+case 132:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 338 "program_lexer.l"
+#line 296 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
        YY_BREAK
-case 182:
+case 133:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 339 "program_lexer.l"
+#line 297 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
        YY_BREAK
-case 183:
+case 134:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 340 "program_lexer.l"
+#line 298 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
        YY_BREAK
-case 184:
+case 135:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 341 "program_lexer.l"
+#line 299 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
        YY_BREAK
-case 185:
+case 136:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 342 "program_lexer.l"
+#line 300 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
        YY_BREAK
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
        YY_BREAK
-case 186:
+case 137:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 344 "program_lexer.l"
+#line 302 "program_lexer.l"
 {
    yylval->string = strdup(yytext);
    return IDENTIFIER;
 }
        YY_BREAK
 {
    yylval->string = strdup(yytext);
    return IDENTIFIER;
 }
        YY_BREAK
-case 187:
+case 138:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 349 "program_lexer.l"
+#line 307 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
 { return DOT_DOT; }
        YY_BREAK
-case 188:
+case 139:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 351 "program_lexer.l"
+#line 309 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
 }
        YY_BREAK
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
 }
        YY_BREAK
-case 189:
+case 140:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 355 "program_lexer.l"
+#line 313 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 190:
-/* rule 190 can match eol */
+case 141:
+/* rule 141 can match eol */
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 359 "program_lexer.l"
+#line 317 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 191:
+case 142:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 363 "program_lexer.l"
+#line 321 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 192:
+case 143:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 367 "program_lexer.l"
+#line 325 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 193:
+case 144:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 372 "program_lexer.l"
+#line 330 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return MASK4;
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return MASK4;
 }
        YY_BREAK
-case 194:
+case 145:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 378 "program_lexer.l"
+#line 336 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2407,27 +2235,27 @@ YY_RULE_SETUP
    return MASK3;
 }
        YY_BREAK
    return MASK3;
 }
        YY_BREAK
-case 195:
+case 146:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 384 "program_lexer.l"
+#line 342 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return MASK3;
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return MASK3;
 }
        YY_BREAK
-case 196:
+case 147:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 389 "program_lexer.l"
+#line 347 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return MASK3;
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return MASK3;
 }
        YY_BREAK
-case 197:
+case 148:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 395 "program_lexer.l"
+#line 353 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2435,9 +2263,9 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
    return MASK2;
 }
        YY_BREAK
-case 198:
+case 149:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 401 "program_lexer.l"
+#line 359 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2445,18 +2273,18 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
    return MASK2;
 }
        YY_BREAK
-case 199:
+case 150:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 407 "program_lexer.l"
+#line 365 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return MASK2;
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return MASK2;
 }
        YY_BREAK
-case 200:
+case 151:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 413 "program_lexer.l"
+#line 371 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2464,9 +2292,9 @@ YY_RULE_SETUP
    return MASK1; 
 }
        YY_BREAK
    return MASK1; 
 }
        YY_BREAK
-case 201:
+case 152:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 420 "program_lexer.l"
+#line 378 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2476,18 +2304,18 @@ YY_RULE_SETUP
    return SWIZZLE;
 }
        YY_BREAK
    return SWIZZLE;
 }
        YY_BREAK
-case 202:
+case 153:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 429 "program_lexer.l"
+#line 387 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return_token_or_DOT(require_ARB_fp, MASK4);
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
    return_token_or_DOT(require_ARB_fp, MASK4);
 }
        YY_BREAK
-case 203:
+case 154:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 435 "program_lexer.l"
+#line 393 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2495,27 +2323,27 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 204:
+case 155:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 441 "program_lexer.l"
+#line 399 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 205:
+case 156:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 446 "program_lexer.l"
+#line 404 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 206:
+case 157:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 452 "program_lexer.l"
+#line 410 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2523,9 +2351,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 207:
+case 158:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 458 "program_lexer.l"
+#line 416 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2533,18 +2361,18 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 208:
+case 159:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 464 "program_lexer.l"
+#line 422 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 209:
+case 160:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 470 "program_lexer.l"
+#line 428 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2552,9 +2380,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK1);
 }
        YY_BREAK
    return_token_or_DOT(require_ARB_fp, MASK1);
 }
        YY_BREAK
-case 210:
+case 161:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 478 "program_lexer.l"
+#line 436 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2566,9 +2394,9 @@ YY_RULE_SETUP
    }
 }
        YY_BREAK
    }
 }
        YY_BREAK
-case 211:
+case 162:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 489 "program_lexer.l"
+#line 447 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2578,15 +2406,15 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, SWIZZLE);
 }
        YY_BREAK
    return_token_or_DOT(require_ARB_fp, SWIZZLE);
 }
        YY_BREAK
-case 212:
+case 163:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 498 "program_lexer.l"
+#line 456 "program_lexer.l"
 { return DOT; }
        YY_BREAK
 { return DOT; }
        YY_BREAK
-case 213:
-/* rule 213 can match eol */
+case 164:
+/* rule 164 can match eol */
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 500 "program_lexer.l"
+#line 458 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2595,30 +2423,30 @@ YY_RULE_SETUP
    yylloc->position++;
 }
        YY_BREAK
    yylloc->position++;
 }
        YY_BREAK
-case 214:
+case 165:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 507 "program_lexer.l"
+#line 465 "program_lexer.l"
 /* eat whitespace */ ;
        YY_BREAK
 /* eat whitespace */ ;
        YY_BREAK
-case 215:
+case 166:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 508 "program_lexer.l"
+#line 466 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
 /* eat comments */ ;
        YY_BREAK
-case 216:
+case 167:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 509 "program_lexer.l"
+#line 467 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
 { return yytext[0]; }
        YY_BREAK
-case 217:
+case 168:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 510 "program_lexer.l"
+#line 468 "program_lexer.l"
 ECHO;
        YY_BREAK
 ECHO;
        YY_BREAK
-#line 2622 "lex.yy.c"
+#line 2450 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2912,7 +2740,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 776 )
+                       if ( yy_current_state >= 836 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2941,11 +2769,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 776 )
+               if ( yy_current_state >= 836 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 775);
+       yy_is_jam = (yy_current_state == 835);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3793,7 +3621,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
 
 #define YYTABLES_NAME "yytables"
 
-#line 510 "program_lexer.l"
+#line 468 "program_lexer.l"
 
 
 
 
 
 
index 62ca9b6db6a48a917518da0366a4287a11909e84..d7493f42fad1fe19afbd6c1e0e647f0f5fbd299a 100644 (file)
    } while (0)
 
 
    } while (0)
 
 
-#define return_opcode(condition, token, opcode, sat)   \
+#define return_opcode(condition, token, opcode, len)   \
    do {                                                        \
    do {                                                        \
-      if (condition) {                                 \
+      if (condition &&                                 \
+         _mesa_parse_instruction_suffix(yyextra,       \
+                                        yytext + len,  \
+                                        & yylval->temp_inst)) {        \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
-        yylval->temp_inst.SaturateMode = SATURATE_ ## sat; \
         return token;                                  \
       } else {                                         \
         yylval->string = strdup(yytext);               \
         return token;                                  \
       } else {                                         \
         yylval->string = strdup(yytext);               \
@@ -132,6 +134,11 @@ exp    [Ee][-+]?[0-9]+
 frac   "."[0-9]+
 dot    "."[ \t]*
 
 frac   "."[0-9]+
 dot    "."[ \t]*
 
+sz     [HRX]?
+szf    [HR]?
+cc     C?
+sat    (_SAT)?
+
 %option bison-bridge bison-locations reentrant noyywrap
 %%
 
 %option bison-bridge bison-locations reentrant noyywrap
 %%
 
@@ -149,121 +156,72 @@ OUTPUT                    { return OUTPUT; }
 PARAM                     { return PARAM; }
 TEMP                      { yylval->integer = at_temp; return TEMP; }
 
 PARAM                     { return PARAM; }
 TEMP                      { yylval->integer = at_temp; return TEMP; }
 
-ABS       { return_opcode(             1, VECTOR_OP, ABS, OFF); }
-ABS_SAT   { return_opcode(require_ARB_fp, VECTOR_OP, ABS, ZERO_ONE); }
-ADD       { return_opcode(             1, BIN_OP, ADD, OFF); }
-ADD_SAT   { return_opcode(require_ARB_fp, BIN_OP, ADD, ZERO_ONE); }
-ARL       { return_opcode(require_ARB_vp, ARL, ARL, OFF); }
-
-CMP       { return_opcode(require_ARB_fp, TRI_OP, CMP, OFF); }
-CMP_SAT   { return_opcode(require_ARB_fp, TRI_OP, CMP, ZERO_ONE); }
-COS       { return_opcode(require_ARB_fp, SCALAR_OP, COS, OFF); }
-COS_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, COS, ZERO_ONE); }
-
-DDX       { return_opcode(require_NV_fp,  VECTOR_OP, DDX, OFF); }
-DDX_SAT   { return_opcode(require_NV_fp,  VECTOR_OP, DDX, ZERO_ONE); }
-DDY       { return_opcode(require_NV_fp,  VECTOR_OP, DDY, OFF); }
-DDY_SAT   { return_opcode(require_NV_fp,  VECTOR_OP, DDY, ZERO_ONE); }
-DP3       { return_opcode(             1, BIN_OP, DP3, OFF); }
-DP3_SAT   { return_opcode(require_ARB_fp, BIN_OP, DP3, ZERO_ONE); }
-DP4       { return_opcode(             1, BIN_OP, DP4, OFF); }
-DP4_SAT   { return_opcode(require_ARB_fp, BIN_OP, DP4, ZERO_ONE); }
-DPH       { return_opcode(             1, BIN_OP, DPH, OFF); }
-DPH_SAT   { return_opcode(require_ARB_fp, BIN_OP, DPH, ZERO_ONE); }
-DST       { return_opcode(             1, BIN_OP, DST, OFF); }
-DST_SAT   { return_opcode(require_ARB_fp, BIN_OP, DST, ZERO_ONE); }
-
-EX2       { return_opcode(             1, SCALAR_OP, EX2, OFF); }
-EX2_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, EX2, ZERO_ONE); }
-EXP       { return_opcode(require_ARB_vp, SCALAR_OP, EXP, OFF); }
-
-FLR       { return_opcode(             1, VECTOR_OP, FLR, OFF); }
-FLR_SAT   { return_opcode(require_ARB_fp, VECTOR_OP, FLR, ZERO_ONE); }
-FRC       { return_opcode(             1, VECTOR_OP, FRC, OFF); }
-FRC_SAT   { return_opcode(require_ARB_fp, VECTOR_OP, FRC, ZERO_ONE); }
-
-KIL       { return_opcode(require_ARB_fp, KIL, KIL, OFF); }
-
-LIT       { return_opcode(             1, VECTOR_OP, LIT, OFF); }
-LIT_SAT   { return_opcode(require_ARB_fp, VECTOR_OP, LIT, ZERO_ONE); }
-LG2       { return_opcode(             1, SCALAR_OP, LG2, OFF); }
-LG2_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, LG2, ZERO_ONE); }
-LOG       { return_opcode(require_ARB_vp, SCALAR_OP, LOG, OFF); }
-LRP       { return_opcode(require_ARB_fp, TRI_OP, LRP, OFF); }
-LRP_SAT   { return_opcode(require_ARB_fp, TRI_OP, LRP, ZERO_ONE); }
-
-MAD       { return_opcode(             1, TRI_OP, MAD, OFF); }
-MAD_SAT   { return_opcode(require_ARB_fp, TRI_OP, MAD, ZERO_ONE); }
-MAX       { return_opcode(             1, BIN_OP, MAX, OFF); }
-MAX_SAT   { return_opcode(require_ARB_fp, BIN_OP, MAX, ZERO_ONE); }
-MIN       { return_opcode(             1, BIN_OP, MIN, OFF); }
-MIN_SAT   { return_opcode(require_ARB_fp, BIN_OP, MIN, ZERO_ONE); }
-MOV       { return_opcode(             1, VECTOR_OP, MOV, OFF); }
-MOV_SAT   { return_opcode(require_ARB_fp, VECTOR_OP, MOV, ZERO_ONE); }
-MUL       { return_opcode(             1, BIN_OP, MUL, OFF); }
-MUL_SAT   { return_opcode(require_ARB_fp, BIN_OP, MUL, ZERO_ONE); }
-
-PK2H      { return_opcode(require_NV_fp,  VECTOR_OP, PK2H, OFF); }
-PK2H_SAT  { return_opcode(require_NV_fp,  VECTOR_OP, PK2H, ZERO_ONE); }
-PK2US     { return_opcode(require_NV_fp,  VECTOR_OP, PK2US, OFF); }
-PK2US_SAT { return_opcode(require_NV_fp,  VECTOR_OP, PK2US, ZERO_ONE); }
-PK4B      { return_opcode(require_NV_fp,  VECTOR_OP, PK4B, OFF); }
-PK4B_SAT  { return_opcode(require_NV_fp,  VECTOR_OP, PK4B, ZERO_ONE); }
-PK4UB     { return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, OFF); }
-PK4UB_SAT { return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, ZERO_ONE); }
-POW       { return_opcode(             1, BINSC_OP, POW, OFF); }
-POW_SAT   { return_opcode(require_ARB_fp, BINSC_OP, POW, ZERO_ONE); }
-
-RCP       { return_opcode(             1, SCALAR_OP, RCP, OFF); }
-RCP_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, RCP, ZERO_ONE); }
-RFL       { return_opcode(require_NV_fp,  BIN_OP,    RFL, OFF); }
-RFL_SAT   { return_opcode(require_NV_fp,  BIN_OP,    RFL, ZERO_ONE); }
-RSQ       { return_opcode(             1, SCALAR_OP, RSQ, OFF); }
-RSQ_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, RSQ, ZERO_ONE); }
-
-SCS       { return_opcode(require_ARB_fp, SCALAR_OP, SCS, OFF); }
-SCS_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, SCS, ZERO_ONE); }
-SEQ       { return_opcode(require_NV_fp,  BIN_OP, SEQ, OFF); }
-SEQ_SAT   { return_opcode(require_NV_fp,  BIN_OP, SEQ, ZERO_ONE); }
-SFL       { return_opcode(require_NV_fp,  BIN_OP, SFL, OFF); }
-SFL_SAT   { return_opcode(require_NV_fp,  BIN_OP, SFL, ZERO_ONE); }
-SGE       { return_opcode(             1, BIN_OP, SGE, OFF); }
-SGE_SAT   { return_opcode(require_ARB_fp, BIN_OP, SGE, ZERO_ONE); }
-SGT       { return_opcode(require_NV_fp,  BIN_OP, SGT, OFF); }
-SGT_SAT   { return_opcode(require_NV_fp,  BIN_OP, SGT, ZERO_ONE); }
-SIN       { return_opcode(require_ARB_fp, SCALAR_OP, SIN, OFF); }
-SIN_SAT   { return_opcode(require_ARB_fp, SCALAR_OP, SIN, ZERO_ONE); }
-SLE       { return_opcode(require_NV_fp,  BIN_OP, SLE, OFF); }
-SLE_SAT   { return_opcode(require_NV_fp,  BIN_OP, SLE, ZERO_ONE); }
-SLT       { return_opcode(             1, BIN_OP, SLT, OFF); }
-SLT_SAT   { return_opcode(require_ARB_fp, BIN_OP, SLT, ZERO_ONE); }
-SNE       { return_opcode(require_NV_fp,  BIN_OP, SNE, OFF); }
-SNE_SAT   { return_opcode(require_NV_fp,  BIN_OP, SNE, ZERO_ONE); }
-STR       { return_opcode(require_NV_fp,  BIN_OP, STR, OFF); }
-STR_SAT   { return_opcode(require_NV_fp,  BIN_OP, STR, ZERO_ONE); }
-SUB       { return_opcode(             1, BIN_OP, SUB, OFF); }
-SUB_SAT   { return_opcode(require_ARB_fp, BIN_OP, SUB, ZERO_ONE); }
-SWZ       { return_opcode(             1, SWZ, SWZ, OFF); }
-SWZ_SAT   { return_opcode(require_ARB_fp, SWZ, SWZ, ZERO_ONE); }
-
-TEX       { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, OFF); }
-TEX_SAT   { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, ZERO_ONE); }
-TXB       { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, OFF); }
-TXB_SAT   { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, ZERO_ONE); }
-TXD       { return_opcode(require_NV_fp,  TXD_OP, TXD, OFF); }
-TXD_SAT   { return_opcode(require_NV_fp,  TXD_OP, TXD, ZERO_ONE); }
-TXP       { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, OFF); }
-TXP_SAT   { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, ZERO_ONE); }
-
-UP2H      { return_opcode(require_NV_fp,  SCALAR_OP, UP2H, OFF); }
-UP2H_SAT  { return_opcode(require_NV_fp,  SCALAR_OP, UP2H, ZERO_ONE); }
-UP2US     { return_opcode(require_NV_fp,  SCALAR_OP, UP2US, OFF); }
-UP2US_SAT { return_opcode(require_NV_fp,  SCALAR_OP, UP2US, ZERO_ONE); }
-
-X2D       { return_opcode(require_NV_fp,  TRI_OP, X2D, OFF); }
-X2D_SAT   { return_opcode(require_NV_fp,  TRI_OP, X2D, ZERO_ONE); }
-XPD       { return_opcode(             1, BIN_OP, XPD, OFF); }
-XPD_SAT   { return_opcode(require_ARB_fp, BIN_OP, XPD, ZERO_ONE); }
+ABS{sz}{cc}{sat}   { return_opcode(             1, VECTOR_OP, ABS, 3); }
+ADD{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, ADD, 3); }
+ARL                { return_opcode(require_ARB_vp, ARL, ARL, 3); }
+
+CMP{sat}           { return_opcode(require_ARB_fp, TRI_OP, CMP, 3); }
+COS{szf}{cc}{sat}  { return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); }
+
+DDX{szf}{cc}{sat}  { return_opcode(require_NV_fp,  VECTOR_OP, DDX, 3); }
+DDY{szf}{cc}{sat}  { return_opcode(require_NV_fp,  VECTOR_OP, DDY, 3); }
+DP3{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, DP3, 3); }
+DP4{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, DP4, 3); }
+DPH{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, DPH, 3); }
+DST{szf}{cc}{sat}  { return_opcode(             1, BIN_OP, DST, 3); }
+
+EX2{szf}{cc}{sat}  { return_opcode(             1, SCALAR_OP, EX2, 3); }
+EXP                { return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); }
+
+FLR{sz}{cc}{sat}   { return_opcode(             1, VECTOR_OP, FLR, 3); }
+FRC{sz}{cc}{sat}   { return_opcode(             1, VECTOR_OP, FRC, 3); }
+
+KIL                { return_opcode(require_ARB_fp, KIL, KIL, 3); }
+
+LIT{szf}{cc}{sat}  { return_opcode(             1, VECTOR_OP, LIT, 3); }
+LG2{szf}{cc}{sat}  { return_opcode(             1, SCALAR_OP, LG2, 3); }
+LOG                { return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); }
+LRP{sz}{cc}{sat}   { return_opcode(require_ARB_fp, TRI_OP, LRP, 3); }
+
+MAD{sz}{cc}{sat}   { return_opcode(             1, TRI_OP, MAD, 3); }
+MAX{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, MAX, 3); }
+MIN{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, MIN, 3); }
+MOV{sz}{cc}{sat}   { return_opcode(             1, VECTOR_OP, MOV, 3); }
+MUL{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, MUL, 3); }
+
+PK2H               { return_opcode(require_NV_fp,  VECTOR_OP, PK2H, 4); }
+PK2US              { return_opcode(require_NV_fp,  VECTOR_OP, PK2US, 5); }
+PK4B               { return_opcode(require_NV_fp,  VECTOR_OP, PK4B, 4); }
+PK4UB              { return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, 5); }
+POW{szf}{cc}{sat}  { return_opcode(             1, BINSC_OP, POW, 3); }
+
+RCP{szf}{cc}{sat}  { return_opcode(             1, SCALAR_OP, RCP, 3); }
+RFL{szf}{cc}{sat}  { return_opcode(require_NV_fp,  BIN_OP,    RFL, 3); }
+RSQ{szf}{cc}{sat}  { return_opcode(             1, SCALAR_OP, RSQ, 3); }
+
+SCS{sat}           { return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); }
+SEQ{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, SEQ, 3); }
+SFL{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, SFL, 3); }
+SGE{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, SGE, 3); }
+SGT{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, SGT, 3); }
+SIN{szf}{cc}{sat}  { return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); }
+SLE{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, SLE, 3); }
+SLT{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, SLT, 3); }
+SNE{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, SNE, 3); }
+STR{sz}{cc}{sat}   { return_opcode(require_NV_fp,  BIN_OP, STR, 3); }
+SUB{sz}{cc}{sat}   { return_opcode(             1, BIN_OP, SUB, 3); }
+SWZ{sat}           { return_opcode(             1, SWZ, SWZ, 3); }
+
+TEX{cc}{sat}       { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); }
+TXB{cc}{sat}       { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); }
+TXD{cc}{sat}       { return_opcode(require_NV_fp,  TXD_OP, TXD, 3); }
+TXP{cc}{sat}       { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); }
+
+UP2H{cc}{sat}      { return_opcode(require_NV_fp,  SCALAR_OP, UP2H, 4); }
+UP2US{cc}{sat}     { return_opcode(require_NV_fp,  SCALAR_OP, UP2US, 5); }
+
+X2D{szf}{cc}{sat}  { return_opcode(require_NV_fp,  TRI_OP, X2D, 3); }
+XPD{sat}           { return_opcode(             1, BIN_OP, XPD, 3); }
 
 vertex                    { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
 fragment                  { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
 
 vertex                    { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
 fragment                  { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
index b9a0e557adaf148839ab407026e48abaea16ccc6..e741e9a13bd71dd45590a1a010bc49028725f847 100644 (file)
@@ -597,16 +597,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   375
+#define YYLAST   383
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  136
+#define YYNNTS  137
 /* YYNRULES -- Number of rules.  */
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  270
+#define YYNRULES  272
 /* YYNRULES -- Number of states.  */
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  456
+#define YYNSTATES  458
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -685,11 +685,11 @@ static const yytype_uint16 yyprhs[] =
      564,   566,   568,   570,   572,   575,   577,   579,   581,   583,
      589,   591,   595,   601,   607,   609,   613,   619,   621,   623,
      625,   627,   629,   631,   633,   635,   637,   641,   647,   655,
      564,   566,   568,   570,   572,   575,   577,   579,   581,   583,
      589,   591,   595,   601,   607,   609,   613,   619,   621,   623,
      625,   627,   629,   631,   633,   635,   637,   641,   647,   655,
-     665,   668,   671,   673,   675,   676,   677,   681,   682,   686,
-     690,   692,   697,   700,   703,   706,   709,   713,   716,   720,
-     721,   723,   725,   726,   728,   730,   731,   733,   735,   736,
-     738,   740,   741,   745,   746,   750,   751,   755,   757,   759,
-     761
+     665,   668,   671,   673,   675,   676,   677,   682,   684,   685,
+     686,   690,   694,   696,   702,   705,   708,   711,   714,   718,
+     721,   725,   726,   728,   730,   731,   733,   735,   736,   738,
+     740,   741,   743,   745,   746,   750,   751,   755,   756,   760,
+     762,   764,   766
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -706,7 +706,7 @@ static const yytype_int16 yyrhs[] =
      108,   141,    -1,    17,   142,   108,   141,   108,   141,   108,
      141,    -1,    15,   142,   108,   141,   108,   136,   108,   137,
       -1,    20,   141,    -1,    22,   142,   108,   141,   108,   141,
      108,   141,    -1,    17,   142,   108,   141,   108,   141,   108,
      141,    -1,    15,   142,   108,   141,   108,   136,   108,   137,
       -1,    20,   141,    -1,    22,   142,   108,   141,   108,   141,
-     108,   141,   108,   136,   108,   137,    -1,    83,   247,    -1,
+     108,   141,   108,   136,   108,   137,    -1,    83,   248,    -1,
       84,    -1,    85,    -1,    86,    -1,    87,    -1,    88,    -1,
       89,    -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,
       94,    -1,    95,    -1,    21,   142,   108,   147,   108,   144,
       84,    -1,    85,    -1,    86,    -1,    87,    -1,    88,    -1,
       89,    -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,
       94,    -1,    95,    -1,    21,   142,   108,   147,   108,   144,
@@ -715,19 +715,19 @@ static const yytype_int16 yyrhs[] =
      147,   160,   109,    -1,   148,   161,    -1,   156,   158,    -1,
      145,   108,   145,   108,   145,   108,   145,    -1,   233,   146,
       -1,    23,    -1,    99,    -1,    99,    -1,   164,    -1,   149,
      147,   160,   109,    -1,   148,   161,    -1,   156,   158,    -1,
      145,   108,   145,   108,   145,   108,   145,    -1,   233,   146,
       -1,    23,    -1,    99,    -1,    99,    -1,   164,    -1,   149,
-     110,   150,   111,    -1,   178,    -1,   240,    -1,    99,    -1,
+     110,   150,   111,    -1,   178,    -1,   241,    -1,    99,    -1,
       99,    -1,   151,    -1,   152,    -1,    23,    -1,   156,   157,
      153,    -1,    -1,   112,   154,    -1,   113,   155,    -1,    23,
       -1,    23,    -1,    99,    -1,   103,    -1,   103,    -1,   103,
       -1,   103,    -1,   100,    -1,   104,    -1,    -1,   100,    -1,
      101,    -1,   102,    -1,   103,    -1,    -1,   163,    -1,   170,
       99,    -1,   151,    -1,   152,    -1,    23,    -1,   156,   157,
      153,    -1,    -1,   112,   154,    -1,   113,   155,    -1,    23,
       -1,    23,    -1,    99,    -1,   103,    -1,   103,    -1,   103,
       -1,   103,    -1,   100,    -1,   104,    -1,    -1,   100,    -1,
      101,    -1,   102,    -1,   103,    -1,    -1,   163,    -1,   170,
-      -1,   234,    -1,   236,    -1,   239,    -1,   252,    -1,     7,
+      -1,   234,    -1,   237,    -1,   240,    -1,   253,    -1,     7,
       99,   114,   164,    -1,    96,   165,    -1,    38,   169,    -1,
       99,   114,   164,    -1,    96,   165,    -1,    38,   169,    -1,
-      60,    -1,    98,   167,    -1,    53,    -1,    29,   245,    -1,
-      37,    -1,    74,   246,    -1,    50,   110,   168,   111,    -1,
+      60,    -1,    98,   167,    -1,    53,    -1,    29,   246,    -1,
+      37,    -1,    74,   247,    -1,    50,   110,   168,   111,    -1,
       97,   110,   166,   111,    -1,    23,    -1,    -1,   110,   168,
       97,   110,   166,   111,    -1,    23,    -1,    -1,   110,   168,
-     111,    -1,    23,    -1,    60,    -1,    29,   245,    -1,    37,
-      -1,    74,   246,    -1,   171,    -1,   172,    -1,    10,    99,
+     111,    -1,    23,    -1,    60,    -1,    29,   246,    -1,    37,
+      -1,    74,   247,    -1,   171,    -1,   172,    -1,    10,    99,
      174,    -1,    10,    99,   110,   173,   111,   175,    -1,    -1,
       23,    -1,   114,   177,    -1,   114,   115,   176,   116,    -1,
      179,    -1,   176,   108,   179,    -1,   181,    -1,   217,    -1,
      174,    -1,    10,    99,   110,   173,   111,   175,    -1,    -1,
       23,    -1,   114,   177,    -1,   114,   115,   176,   116,    -1,
      179,    -1,   176,   108,   179,    -1,   181,    -1,   217,    -1,
@@ -736,13 +736,13 @@ static const yytype_int16 yyrhs[] =
      182,    -1,    73,   184,    -1,    73,   187,    -1,    73,   189,
       -1,    73,   195,    -1,    73,   191,    -1,    73,   198,    -1,
       73,   200,    -1,    73,   202,    -1,    73,   204,    -1,    73,
      182,    -1,    73,   184,    -1,    73,   187,    -1,    73,   189,
       -1,    73,   195,    -1,    73,   191,    -1,    73,   198,    -1,
       73,   200,    -1,    73,   202,    -1,    73,   204,    -1,    73,
-     216,    -1,    47,   244,   183,    -1,   193,    -1,    33,    -1,
+     216,    -1,    47,   245,   183,    -1,   193,    -1,    33,    -1,
       69,    -1,    43,   110,   194,   111,   185,    -1,   193,    -1,
       60,    -1,    26,    -1,    72,   186,    -1,    40,    -1,    32,
       69,    -1,    43,   110,   194,   111,   185,    -1,   193,    -1,
       60,    -1,    26,    -1,    72,   186,    -1,    40,    -1,    32,
-      -1,    44,   188,    -1,    25,    -1,   244,    67,    -1,    45,
-     110,   194,   111,   244,   190,    -1,   193,    -1,    75,   248,
+      -1,    44,   188,    -1,    25,    -1,   245,    67,    -1,    45,
+     110,   194,   111,   245,   190,    -1,   193,    -1,    75,   249,
      192,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
      192,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
-      23,    -1,    76,   246,   196,   197,    -1,    35,    -1,    54,
+      23,    -1,    76,   247,   196,   197,    -1,    35,    -1,    54,
       -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
      199,    -1,    29,    -1,    56,    -1,    28,   110,   201,   111,
       57,    -1,    23,    -1,    58,   203,    -1,    70,    -1,    26,
       -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
      199,    -1,    29,    -1,    56,    -1,    28,   110,   201,   111,
       57,    -1,    23,    -1,    58,   203,    -1,    70,    -1,    26,
@@ -750,7 +750,7 @@ static const yytype_int16 yyrhs[] =
       -1,    66,   110,   210,   105,   210,   111,    -1,    49,   211,
      208,    -1,    -1,   209,    -1,    41,    -1,    82,    -1,    42,
       -1,    23,    -1,    51,   212,    -1,    63,    -1,    52,    -1,
       -1,    66,   110,   210,   105,   210,   111,    -1,    49,   211,
      208,    -1,    -1,   209,    -1,    41,    -1,    82,    -1,    42,
       -1,    23,    -1,    51,   212,    -1,    63,    -1,    52,    -1,
-      81,   246,    -1,    55,   110,   214,   111,    -1,    48,   110,
+      81,   247,    -1,    55,   110,   214,   111,    -1,    48,   110,
      215,   111,    -1,    -1,   213,    -1,    23,    -1,    23,    -1,
       23,    -1,    30,    64,    -1,   221,    -1,   224,    -1,   219,
       -1,   222,    -1,    62,    34,   110,   220,   111,    -1,   225,
      215,   111,    -1,    -1,   213,    -1,    23,    -1,    23,    -1,
       23,    -1,    30,    64,    -1,   221,    -1,   224,    -1,   219,
       -1,   222,    -1,    62,    34,   110,   220,   111,    -1,   225,
@@ -762,16 +762,17 @@ static const yytype_int16 yyrhs[] =
       -1,   115,   232,   108,   232,   116,    -1,   115,   232,   108,
      232,   108,   232,   116,    -1,   115,   232,   108,   232,   108,
      232,   108,   232,   116,    -1,   233,    24,    -1,   233,    23,
       -1,   115,   232,   108,   232,   116,    -1,   115,   232,   108,
      232,   108,   232,   116,    -1,   115,   232,   108,   232,   108,
      232,   108,   232,   116,    -1,   233,    24,    -1,   233,    23,
-      -1,   112,    -1,   113,    -1,    -1,    -1,    11,   235,   238,
-      -1,    -1,     5,   237,   238,    -1,   238,   108,    99,    -1,
-      99,    -1,     9,    99,   114,   240,    -1,    65,    60,    -1,
-      65,    37,    -1,    65,   241,    -1,    65,    59,    -1,    65,
-      74,   246,    -1,    65,    30,    -1,    29,   242,   243,    -1,
-      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
-      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
-      -1,   110,   249,   111,    -1,    -1,   110,   250,   111,    -1,
-      -1,   110,   251,   111,    -1,    23,    -1,    23,    -1,    23,
-      -1,     6,    99,   114,    99,    -1
+      -1,   112,    -1,   113,    -1,    -1,    -1,   236,    11,   235,
+     239,    -1,    99,    -1,    -1,    -1,     5,   238,   239,    -1,
+     239,   108,    99,    -1,    99,    -1,   236,     9,    99,   114,
+     241,    -1,    65,    60,    -1,    65,    37,    -1,    65,   242,
+      -1,    65,    59,    -1,    65,    74,   247,    -1,    65,    30,
+      -1,    29,   243,   244,    -1,    -1,    39,    -1,    27,    -1,
+      -1,    61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,
+      -1,    61,    -1,    68,    -1,    -1,   110,   250,   111,    -1,
+      -1,   110,   251,   111,    -1,    -1,   110,   252,   111,    -1,
+      23,    -1,    23,    -1,    23,    -1,     6,    99,   114,    99,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -800,11 +801,11 @@ static const yytype_uint16 yyrline[] =
     1598,  1603,  1616,  1624,  1635,  1643,  1643,  1645,  1645,  1647,
     1657,  1662,  1669,  1679,  1688,  1693,  1700,  1710,  1720,  1732,
     1732,  1733,  1733,  1735,  1745,  1753,  1763,  1771,  1779,  1788,
     1598,  1603,  1616,  1624,  1635,  1643,  1643,  1645,  1645,  1647,
     1657,  1662,  1669,  1679,  1688,  1693,  1700,  1710,  1720,  1732,
     1732,  1733,  1733,  1735,  1745,  1753,  1763,  1771,  1779,  1788,
-    1799,  1803,  1809,  1810,  1811,  1814,  1814,  1817,  1817,  1820,
-    1826,  1834,  1847,  1856,  1865,  1869,  1878,  1887,  1898,  1905,
-    1910,  1919,  1931,  1934,  1943,  1954,  1955,  1956,  1959,  1960,
-    1961,  1964,  1965,  1968,  1969,  1972,  1973,  1976,  1987,  1998,
-    2009
+    1799,  1803,  1809,  1810,  1811,  1814,  1814,  1817,  1852,  1856,
+    1856,  1859,  1865,  1873,  1886,  1895,  1904,  1908,  1917,  1926,
+    1937,  1944,  1949,  1958,  1970,  1973,  1982,  1993,  1994,  1995,
+    1998,  1999,  2000,  2003,  2004,  2007,  2008,  2011,  2012,  2015,
+    2026,  2037,  2048
 };
 #endif
 
 };
 #endif
 
@@ -866,9 +867,10 @@ static const char *const yytname[] =
   "progLocalParam", "progEnvParamNum", "progLocalParamNum",
   "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
   "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
   "progLocalParam", "progEnvParamNum", "progLocalParamNum",
   "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
   "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
-  "optionalSign", "TEMP_statement", "@1", "ADDRESS_statement", "@2",
-  "varNameList", "OUTPUT_statement", "resultBinding", "resultColBinding",
-  "optResultFaceType", "optResultColorType", "optFaceType", "optColorType",
+  "optionalSign", "TEMP_statement", "@1", "optVarSize",
+  "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
+  "resultBinding", "resultColBinding", "optResultFaceType",
+  "optResultColorType", "optFaceType", "optColorType",
   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
   "ALIAS_statement", 0
   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
   "ALIAS_statement", 0
@@ -921,11 +923,11 @@ static const yytype_uint8 yyr1[] =
      212,   213,   214,   215,   216,   217,   217,   218,   218,   219,
      220,   220,   221,   222,   223,   223,   224,   225,   226,   227,
      227,   228,   228,   229,   230,   230,   231,   231,   231,   231,
      212,   213,   214,   215,   216,   217,   217,   218,   218,   219,
      220,   220,   221,   222,   223,   223,   224,   225,   226,   227,
      227,   228,   228,   229,   230,   230,   231,   231,   231,   231,
-     232,   232,   233,   233,   233,   235,   234,   237,   236,   238,
-     238,   239,   240,   240,   240,   240,   240,   240,   241,   242,
-     242,   242,   243,   243,   243,   244,   244,   244,   245,   245,
-     245,   246,   246,   247,   247,   248,   248,   249,   250,   251,
-     252
+     232,   232,   233,   233,   233,   235,   234,   236,   236,   238,
+     237,   239,   239,   240,   241,   241,   241,   241,   241,   241,
+     242,   243,   243,   243,   244,   244,   244,   245,   245,   245,
+     246,   246,   246,   247,   247,   248,   248,   249,   249,   250,
+     251,   252,   253
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -954,11 +956,11 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     2,     1,     1,     1,     1,     5,
        1,     3,     5,     5,     1,     3,     5,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     3,     5,     7,     9,
        1,     1,     1,     1,     2,     1,     1,     1,     1,     5,
        1,     3,     5,     5,     1,     3,     5,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     3,     5,     7,     9,
-       2,     2,     1,     1,     0,     0,     3,     0,     3,     3,
-       1,     4,     2,     2,     2,     2,     3,     2,     3,     0,
-       1,     1,     0,     1,     1,     0,     1,     1,     0,     1,
-       1,     0,     3,     0,     3,     0,     3,     1,     1,     1,
-       4
+       2,     2,     1,     1,     0,     0,     4,     1,     0,     0,
+       3,     3,     1,     5,     2,     2,     2,     2,     3,     2,
+       3,     0,     1,     1,     0,     1,     1,     0,     1,     1,
+       0,     1,     1,     0,     3,     0,     3,     0,     3,     1,
+       1,     1,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -966,143 +968,143 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   237,     0,     0,     0,     0,   235,     2,     0,     0,
-       0,     0,     0,     0,     0,   234,     0,     0,     8,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
-      23,    20,     0,    88,    89,   113,   114,    90,    91,    92,
-      93,     7,     0,     0,     0,     0,     0,     0,     0,    64,
-       0,    87,    63,     0,     0,     0,     0,     0,    75,     0,
-       0,   232,   233,    31,     0,     0,     0,    10,    11,   240,
-     238,     0,     0,     0,   117,   234,   115,   236,   249,   247,
-     243,   245,   242,   261,   244,   234,    83,    84,    85,    86,
-      53,   234,   234,   234,   234,   234,   234,    77,    54,   225,
-     224,     0,     0,     0,     0,    59,     0,   234,    82,     0,
-      60,    62,   126,   127,   205,   206,   128,   221,   222,     0,
-     234,     0,   270,    94,   241,   118,     0,   119,   123,   124,
-     125,   219,   220,   223,     0,   251,   250,   252,     0,   246,
-       0,     0,     0,     0,    26,     0,    25,    24,   258,   111,
-     109,   261,    96,     0,     0,     0,     0,     0,     0,   255,
-       0,   255,     0,     0,   265,   261,   134,   135,   136,   137,
-     139,   138,   140,   141,   142,   143,     0,   144,   258,   101,
-       0,    99,    97,   261,     0,   106,    95,    82,     0,    80,
-      79,    81,    51,     0,     0,     0,   239,     0,   231,   230,
-     253,   254,   248,   267,     0,   234,   234,     0,    47,     0,
-      50,     0,   234,   259,   260,   110,   112,     0,     0,     0,
-     204,   175,   176,   174,     0,   157,   257,   256,   156,     0,
-       0,     0,     0,   199,   195,     0,   194,   261,   187,   181,
-     180,   179,     0,     0,     0,     0,   100,     0,   102,     0,
-       0,    98,     0,   234,   226,    68,     0,    66,    67,     0,
-     234,   234,     0,   116,   262,    28,    27,     0,    78,    49,
-     263,     0,     0,   217,     0,   218,     0,   178,     0,   166,
-       0,   158,     0,   163,   164,   147,   148,   165,   145,   146,
-       0,   201,   193,   200,     0,   196,   189,   191,   190,   186,
-     188,   269,     0,   162,   161,   168,   169,     0,     0,   108,
-       0,   105,     0,     0,    52,     0,    61,    76,    70,    46,
-       0,     0,     0,   234,    48,     0,    33,     0,   234,   212,
-     216,     0,     0,   255,   203,     0,   202,     0,   266,   173,
-     172,   170,   171,   167,   192,     0,   103,   104,   107,   234,
-     227,     0,     0,    69,   234,    57,    58,    56,   234,     0,
-       0,     0,   121,   129,   132,   130,   207,   208,   131,   268,
-       0,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    30,    29,   177,   152,   154,   151,     0,
-     149,   150,     0,   198,   197,   182,     0,    73,    71,    74,
-      72,     0,     0,     0,     0,   133,   184,   234,   120,   264,
-     155,   153,   159,   160,   234,   228,   234,     0,     0,     0,
-       0,   183,   122,     0,     0,     0,     0,   210,     0,   214,
-       0,   229,   234,     0,   209,     0,   213,     0,     0,    55,
-      32,   211,   215,     0,     0,   185
+       0,     3,     4,     0,     6,     1,     9,     0,     5,   238,
+       0,   239,     0,     0,     0,     2,     0,     0,     0,     0,
+       0,     0,     0,   234,     0,     0,   237,     8,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    21,    22,    23,
+      20,     0,    88,    89,   113,   114,    90,     0,    91,    92,
+      93,     7,     0,     0,     0,     0,     0,    64,     0,    87,
+      63,     0,     0,     0,     0,     0,    75,     0,     0,   232,
+     233,    31,     0,     0,     0,    10,    11,     0,   235,   242,
+     240,     0,     0,   117,   234,   115,   251,   249,   245,   247,
+     244,   263,   246,   234,    83,    84,    85,    86,    53,   234,
+     234,   234,   234,   234,   234,    77,    54,   225,   224,     0,
+       0,     0,     0,    59,     0,   234,    82,     0,    60,    62,
+     126,   127,   205,   206,   128,   221,   222,     0,   234,     0,
+       0,     0,   272,    94,   118,     0,   119,   123,   124,   125,
+     219,   220,   223,     0,   253,   252,   254,     0,   248,     0,
+       0,     0,     0,    26,     0,    25,    24,   260,   111,   109,
+     263,    96,     0,     0,     0,     0,     0,     0,   257,     0,
+     257,     0,     0,   267,   263,   134,   135,   136,   137,   139,
+     138,   140,   141,   142,   143,     0,   144,   260,   101,     0,
+      99,    97,   263,     0,   106,    95,    82,     0,    80,    79,
+      81,    51,     0,     0,     0,     0,   236,   241,     0,   231,
+     230,   255,   256,   250,   269,     0,   234,   234,     0,    47,
+       0,    50,     0,   234,   261,   262,   110,   112,     0,     0,
+       0,   204,   175,   176,   174,     0,   157,   259,   258,   156,
+       0,     0,     0,     0,   199,   195,     0,   194,   263,   187,
+     181,   180,   179,     0,     0,     0,     0,   100,     0,   102,
+       0,     0,    98,     0,   234,   226,    68,     0,    66,    67,
+       0,   234,   234,   243,     0,   116,   264,    28,    27,     0,
+      78,    49,   265,     0,     0,   217,     0,   218,     0,   178,
+       0,   166,     0,   158,     0,   163,   164,   147,   148,   165,
+     145,   146,     0,   201,   193,   200,     0,   196,   189,   191,
+     190,   186,   188,   271,     0,   162,   161,   168,   169,     0,
+       0,   108,     0,   105,     0,     0,    52,     0,    61,    76,
+      70,    46,     0,     0,     0,   234,    48,     0,    33,     0,
+     234,   212,   216,     0,     0,   257,   203,     0,   202,     0,
+     268,   173,   172,   170,   171,   167,   192,     0,   103,   104,
+     107,   234,   227,     0,     0,    69,   234,    57,    58,    56,
+     234,     0,     0,     0,   121,   129,   132,   130,   207,   208,
+     131,   270,     0,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    30,    29,   177,   152,   154,
+     151,     0,   149,   150,     0,   198,   197,   182,     0,    73,
+      71,    74,    72,     0,     0,     0,     0,   133,   184,   234,
+     120,   266,   155,   153,   159,   160,   234,   228,   234,     0,
+       0,     0,     0,   183,   122,     0,     0,     0,     0,   210,
+       0,   214,     0,   229,   234,     0,   209,     0,   213,     0,
+       0,    55,    32,   211,   215,     0,     0,   185
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,   281,
-     393,    41,   151,   218,    73,    60,    69,   329,   330,   367,
-     219,    61,   119,   266,   267,   268,   363,   408,   410,    70,
-     328,   108,   279,   202,   100,    42,    43,   120,   196,   322,
-     261,   320,   162,    44,    45,    46,   136,    86,   273,   371,
-     137,   121,   372,   373,   122,   176,   298,   177,   400,   421,
-     178,   238,   179,   422,   180,   314,   299,   290,   181,   317,
-     353,   182,   233,   183,   288,   184,   251,   185,   415,   431,
-     186,   309,   310,   355,   248,   302,   303,   347,   345,   187,
-     123,   375,   376,   436,   124,   377,   438,   125,   284,   286,
-     378,   126,   141,   127,   128,   143,    74,    47,    57,    48,
-      52,    80,    49,    62,    94,   147,   212,   239,   225,   149,
-     336,   253,   214,   380,   312,    50
+      -1,     3,     4,     6,     8,     9,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,   283,
+     395,    40,   150,   219,    71,    58,    67,   331,   332,   369,
+     220,    59,   117,   267,   268,   269,   365,   410,   412,    68,
+     330,   106,   281,   201,    98,    41,    42,   118,   195,   324,
+     262,   322,   161,    43,    44,    45,   135,    85,   275,   373,
+     136,   119,   374,   375,   120,   175,   300,   176,   402,   423,
+     177,   239,   178,   424,   179,   316,   301,   292,   180,   319,
+     355,   181,   234,   182,   290,   183,   252,   184,   417,   433,
+     185,   311,   312,   357,   249,   304,   305,   349,   347,   186,
+     121,   377,   378,   438,   122,   379,   440,   123,   286,   288,
+     380,   124,   140,   125,   126,   142,    72,    46,   130,    47,
+      48,    52,    80,    49,    60,    92,   146,   213,   240,   226,
+     148,   338,   254,   215,   382,   314,    50
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -403
+#define YYPACT_NINF -386
 static const yytype_int16 yypact[] =
 {
 static const yytype_int16 yypact[] =
 {
-      62,  -403,  -403,    41,  -403,  -403,    81,   -36,  -403,   198,
-      -8,  -403,    -5,    18,    20,    35,  -403,  -403,   -23,   -23,
-     -23,   -23,   -23,   -23,    45,   131,   -23,   -23,  -403,    58,
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,    67,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,    63,    86,    92,   128,    84,    63,    99,  -403,
-      69,   133,  -403,    87,    89,   129,   145,   146,  -403,   147,
-     154,  -403,  -403,  -403,   -13,   150,   151,  -403,  -403,  -403,
-     152,   162,   -14,   197,   240,   -34,  -403,   152,    98,  -403,
-    -403,  -403,  -403,   155,  -403,   131,  -403,  -403,  -403,  -403,
-    -403,   131,   131,   131,   131,   131,   131,  -403,  -403,  -403,
-    -403,    72,   105,    77,    17,   156,    12,   131,    68,   157,
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,    12,
-     131,   165,  -403,  -403,  -403,  -403,   158,  -403,  -403,  -403,
-    -403,  -403,  -403,  -403,   223,  -403,  -403,   -16,   245,  -403,
-     163,   164,    -9,   167,  -403,   168,  -403,  -403,    55,  -403,
-    -403,   155,  -403,   170,   171,   172,   206,     2,   173,    34,
-     174,   127,   112,     1,   175,   155,  -403,  -403,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,  -403,   207,  -403,    55,  -403,
-     177,  -403,  -403,   155,   178,   179,  -403,    68,    22,  -403,
-    -403,  -403,  -403,    -6,   169,   182,  -403,   180,  -403,  -403,
-    -403,  -403,  -403,  -403,   181,   131,   131,    12,  -403,   188,
-     190,   195,   131,  -403,  -403,  -403,  -403,   272,   273,   274,
-    -403,  -403,  -403,  -403,   275,  -403,  -403,  -403,  -403,   232,
-     275,    79,   191,   277,  -403,   192,  -403,   155,    15,  -403,
-    -403,  -403,   280,   276,     8,   194,  -403,   283,  -403,   284,
-     283,  -403,   199,   131,  -403,  -403,   200,  -403,  -403,   209,
-     131,   131,   201,  -403,  -403,  -403,  -403,   204,  -403,  -403,
-     205,   210,   211,  -403,   203,  -403,   212,  -403,   213,  -403,
-     214,  -403,   215,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-     286,  -403,  -403,  -403,   294,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,   216,  -403,  -403,  -403,  -403,   161,   297,  -403,
-     217,  -403,   218,   219,  -403,    76,  -403,  -403,   139,  -403,
-     227,    -4,   228,    30,  -403,   298,  -403,   137,   131,  -403,
-    -403,   265,   130,   127,  -403,   220,  -403,   226,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,   229,  -403,  -403,  -403,   131,
-    -403,   315,   319,  -403,   131,  -403,  -403,  -403,   131,   123,
-      77,    80,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-     233,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   311,
-    -403,  -403,     9,  -403,  -403,  -403,    83,  -403,  -403,  -403,
-    -403,   237,   238,   239,   241,  -403,   281,    30,  -403,  -403,
-    -403,  -403,  -403,  -403,   131,  -403,   131,   195,   272,   273,
-     242,  -403,  -403,   234,   246,   247,   248,   243,   249,   251,
-     297,  -403,   131,   137,  -403,   272,  -403,   273,    36,  -403,
-    -403,  -403,  -403,   297,   250,  -403
+     203,  -386,  -386,    23,  -386,  -386,    67,   -50,  -386,    20,
+      16,  -386,    21,    37,    48,  -386,   -19,   -19,   -19,   -19,
+     -19,   -19,    58,   131,   -19,   -19,  -386,  -386,    53,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,    64,  -386,  -386,  -386,  -386,  -386,   229,  -386,  -386,
+    -386,  -386,    77,    81,    89,    78,    95,  -386,    75,   130,
+    -386,   119,   139,   140,   142,   146,  -386,   147,   136,  -386,
+    -386,  -386,   -14,   148,   149,  -386,  -386,   159,  -386,  -386,
+     152,   162,   -20,   239,    -6,  -386,    31,  -386,  -386,  -386,
+    -386,   153,  -386,   131,  -386,  -386,  -386,  -386,  -386,   131,
+     131,   131,   131,   131,   131,  -386,  -386,  -386,  -386,    28,
+      50,   123,    40,   154,    30,   131,   101,   155,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,    30,   131,   156,
+      77,   167,  -386,  -386,  -386,   158,  -386,  -386,  -386,  -386,
+    -386,  -386,  -386,   218,  -386,  -386,    13,   244,  -386,   160,
+     163,   -10,   164,  -386,   165,  -386,  -386,    73,  -386,  -386,
+     153,  -386,   166,   168,   169,   210,    42,   170,    91,   171,
+     100,   145,    38,   173,   153,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,   209,  -386,    73,  -386,   174,
+    -386,  -386,   153,   175,   176,  -386,   101,    57,  -386,  -386,
+    -386,  -386,   -16,   179,   180,   225,   152,  -386,   177,  -386,
+    -386,  -386,  -386,  -386,  -386,   181,   131,   131,    30,  -386,
+     190,   191,   212,   131,  -386,  -386,  -386,  -386,   273,   274,
+     275,  -386,  -386,  -386,  -386,   276,  -386,  -386,  -386,  -386,
+     233,   276,   115,   192,   278,  -386,   193,  -386,   153,     9,
+    -386,  -386,  -386,   281,   277,    25,   195,  -386,   284,  -386,
+     285,   284,  -386,   200,   131,  -386,  -386,   199,  -386,  -386,
+     208,   131,   131,  -386,   197,  -386,  -386,  -386,  -386,   206,
+    -386,  -386,   207,   205,   211,  -386,   213,  -386,   214,  -386,
+     215,  -386,   216,  -386,   217,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,   293,  -386,  -386,  -386,   295,  -386,  -386,  -386,
+    -386,  -386,  -386,  -386,   219,  -386,  -386,  -386,  -386,   157,
+     297,  -386,   220,  -386,   221,   222,  -386,    66,  -386,  -386,
+     133,  -386,   226,   -12,   230,    49,  -386,   298,  -386,   125,
+     131,  -386,  -386,   265,   118,   100,  -386,   228,  -386,   232,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,   234,  -386,  -386,
+    -386,   131,  -386,   300,   306,  -386,   131,  -386,  -386,  -386,
+     131,   129,   123,    69,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,   235,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,   308,  -386,  -386,    41,  -386,  -386,  -386,    86,  -386,
+    -386,  -386,  -386,   240,   241,   231,   237,  -386,   286,    49,
+    -386,  -386,  -386,  -386,  -386,  -386,   131,  -386,   131,   212,
+     273,   274,   243,  -386,  -386,   238,   242,   247,   245,   246,
+     248,   252,   297,  -386,   131,   125,  -386,   273,  -386,   274,
+      45,  -386,  -386,  -386,  -386,   297,   250,  -386
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   -74,
-     -81,  -403,   -98,   141,   -82,   160,  -403,  -403,  -358,  -403,
-     -41,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   166,
-    -403,  -403,  -403,   176,  -403,  -403,  -403,   282,  -403,  -403,
-    -403,   103,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,   -52,  -403,   -84,  -403,  -403,  -403,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,  -403,  -333,   126,  -403,  -403,
-    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
-      -3,  -403,  -403,  -402,  -403,  -403,  -403,  -403,  -403,  -403,
-     285,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -398,  -392,
-     287,  -403,  -403,  -145,   -83,  -114,   -85,  -403,  -403,  -403,
-    -403,   314,  -403,   291,  -403,  -403,  -403,  -167,   187,  -149,
-    -403,  -403,  -403,  -403,  -403,  -403
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,   -71,
+     -80,  -386,   -96,   144,   -81,   204,  -386,  -386,  -350,  -386,
+     -17,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,   161,
+    -386,  -386,  -386,   172,  -386,  -386,  -386,   282,  -386,  -386,
+    -386,   105,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,   -52,  -386,   -83,  -386,  -386,  -386,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -300,   128,  -386,  -386,
+    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
+      -2,  -386,  -386,  -327,  -386,  -386,  -386,  -386,  -386,  -386,
+     287,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -385,  -318,
+     288,  -386,  -386,  -145,   -82,  -112,   -84,  -386,  -386,  -386,
+    -386,  -386,   249,  -386,   178,  -386,  -386,  -386,  -166,   186,
+    -131,  -386,  -386,  -386,  -386,  -386,  -386
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1112,86 +1114,88 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -222
 static const yytype_int16 yytable[] =
 {
 #define YYTABLE_NINF -222
 static const yytype_int16 yytable[] =
 {
-     144,   138,   142,   198,   241,   154,   411,   220,   157,   401,
-     109,   110,   226,   150,   109,   110,   152,   265,   152,   365,
-     153,   152,   155,   156,   111,   111,   254,   249,   112,   111,
-     437,   231,   144,   118,   293,   109,   110,   439,   448,   113,
-     294,     5,    58,   315,   258,   210,   188,   451,   205,   112,
-     111,   454,   211,   112,   189,   452,   306,   307,   232,   235,
-     113,   236,   316,    10,   113,     1,     2,   190,   434,   423,
-     191,   250,   220,   237,   112,   197,    59,   192,    71,    72,
-     297,   117,   114,   114,   449,   113,   115,   114,   204,     7,
-     115,   193,   369,    68,    53,   366,   116,   308,   305,    51,
-     217,   158,   117,   370,   293,   165,   117,   166,   114,   159,
-     294,   115,   295,   167,   194,   195,   223,    54,   276,    55,
-     168,   169,   170,   224,   171,   145,   172,   117,    88,    89,
-     263,   152,   160,   275,    56,   173,    90,   146,   264,   163,
-     282,   453,    71,    72,    68,   117,   161,   405,   296,   325,
-     297,   164,   174,   175,   236,   293,   396,   413,    91,    92,
-     242,   294,    79,   243,   244,    77,   237,   245,   199,   414,
-     397,   200,   201,    93,    78,   246,   402,    95,   144,    63,
-      64,    65,    66,    67,   359,   331,    75,    76,   417,   332,
-     398,   424,   360,   247,    84,   101,   418,   102,    85,   425,
-      81,   297,   399,    11,    12,    13,    82,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   391,   392,    96,    97,    98,    99,   103,   349,   350,
-     351,   352,    83,    71,    72,   406,   208,   209,   144,   374,
-     142,   361,   362,   104,   105,   106,   394,   107,   129,   130,
-     131,   132,    58,   135,   206,   148,   -65,   203,   213,   207,
-     230,   215,   216,   255,   144,   221,   222,   270,   280,   331,
-     227,   228,   229,   234,   240,   252,   412,   257,   259,   260,
-     271,   278,   274,  -221,   272,   283,   285,   287,   289,   291,
-     301,   300,   304,   311,   318,   313,   319,   321,   324,   344,
-     433,   326,   327,   334,   339,   335,   333,   346,   337,   338,
-     354,   379,   395,   340,   341,   342,   343,   348,   356,   357,
-     358,   403,   144,   374,   142,   364,   368,   404,   407,   144,
-     405,   331,   409,   420,   419,   426,   427,   430,   445,   428,
-     441,   429,   440,   435,   442,   443,   447,   331,   277,   444,
-     446,   455,   450,   323,   133,   432,   292,   416,     0,   269,
-     139,    87,   140,   262,   134,   256
+     143,   137,   141,   197,   242,   153,   221,   266,   156,   107,
+     108,   367,   149,   107,   108,   151,   413,   151,   109,   152,
+     151,   154,   155,     5,   109,    11,    12,    13,   109,   227,
+      14,   143,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,   255,   403,   439,    56,   204,   110,    10,
+     308,   309,   110,   107,   108,   116,   110,   157,   144,   111,
+     317,   259,   453,   111,   250,   158,   295,   111,   109,   187,
+     145,   232,   296,   221,   211,     7,   112,   188,   436,   318,
+      57,   212,   112,    66,   162,   113,   112,   368,   159,   113,
+     189,   310,   110,   190,   451,   114,   163,   196,   233,   218,
+     191,   115,   160,   111,   425,   115,    69,    70,   251,   115,
+     203,   371,   299,   441,   192,   450,   236,   307,   237,    26,
+      53,   278,   372,    51,    86,    87,   112,   237,   456,   113,
+     238,   454,    88,   151,   224,   277,    54,   193,   194,   238,
+     295,   225,   284,   295,   398,   115,   296,    55,   297,   296,
+     455,   164,   327,   165,    89,    90,   407,    66,   399,   166,
+      75,    69,    70,   415,   115,   264,   167,   168,   169,    91,
+     170,    76,   171,   265,   361,   416,    79,   419,   400,   404,
+     143,   172,   362,    93,   298,   420,   299,   333,    83,   299,
+     401,   334,    84,   243,   426,    81,   244,   245,   173,   174,
+     246,   198,   427,    82,   199,   200,     1,     2,   247,   383,
+     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
+     394,    61,    62,    63,    64,    65,   248,    99,    73,    74,
+      94,    95,    96,    97,   351,   352,   353,   354,    77,   105,
+      78,   209,   210,    69,    70,   363,   364,   100,   101,   408,
+     102,   143,   376,   141,   103,   104,   127,   128,   129,   396,
+     131,   132,   134,   147,   -65,   202,   207,   214,   216,   208,
+     205,   217,   222,   223,   231,   256,   228,   143,   229,   230,
+     235,   241,   333,   253,   258,   260,   261,   271,   272,   414,
+      56,   274,   276,   280,  -221,   282,   285,   287,   289,   291,
+     293,   303,   302,   306,   313,   320,   315,   321,   323,   326,
+     328,   329,   335,   339,   435,   336,   346,   337,   348,   340,
+     356,   381,   397,   409,   341,   342,   343,   344,   345,   411,
+     350,   358,   359,   360,   366,   143,   376,   141,   370,   405,
+     422,   430,   143,   406,   333,   407,   421,   431,   428,   429,
+     444,   447,   432,   442,   443,   445,   446,   449,   437,   448,
+     333,   457,   279,   270,   133,   452,   325,   434,   263,   294,
+     418,   138,   139,   257,     0,     0,     0,     0,     0,   206,
+       0,     0,     0,   273
 };
 
 static const yytype_int16 yycheck[] =
 {
 };
 
 static const yytype_int16 yycheck[] =
 {
-      85,    85,    85,   117,   171,   103,   364,   152,   106,   342,
-      23,    24,   161,    95,    23,    24,   101,    23,   103,    23,
-     102,   106,   104,   105,    38,    38,   175,    26,    62,    38,
-     428,    29,   117,    74,    25,    23,    24,   429,   440,    73,
-      31,     0,    65,    35,   193,    61,    29,   445,   130,    62,
-      38,   453,    68,    62,    37,   447,    41,    42,    56,    25,
-      73,    27,    54,    99,    73,     3,     4,    50,   426,   402,
-      53,    70,   217,    39,    62,   116,    99,    60,   112,   113,
-      71,   115,    96,    96,   442,    73,    99,    96,   129,     8,
-      99,    74,    62,    99,    99,    99,   109,    82,   247,   107,
-     109,    29,   115,    73,    25,    28,   115,    30,    96,    37,
-      31,    99,    33,    36,    97,    98,    61,    99,   216,    99,
-      43,    44,    45,    68,    47,    27,    49,   115,    29,    30,
-     108,   216,    60,   215,    99,    58,    37,    39,   116,    34,
-     222,   105,   112,   113,    99,   115,    74,   111,    69,   263,
-      71,    46,    75,    76,    27,    25,    26,    34,    59,    60,
-      48,    31,    99,    51,    52,   107,    39,    55,   100,    46,
-      40,   103,   104,    74,   107,    63,   343,   108,   263,    19,
-      20,    21,    22,    23,   108,   270,    26,    27,   108,   271,
-      60,   108,   116,    81,   110,   108,   116,   108,   114,   116,
-     114,    71,    72,     5,     6,     7,   114,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,   100,   101,   102,   103,   108,    77,    78,
-      79,    80,   114,   112,   113,   359,    23,    24,   333,   333,
-     333,   112,   113,   108,   108,   108,   338,   103,   108,   108,
-     108,    99,    65,    23,    99,   110,   110,   110,    23,   111,
-      64,   108,   108,    66,   359,   108,   108,   108,    83,   364,
-     110,   110,   110,   110,   110,   110,   368,   110,   110,   110,
-     108,   103,   111,   103,   114,    23,    23,    23,    23,    67,
-      23,   110,   110,    23,   110,    29,    23,    23,   109,    23,
-     424,   111,   103,   109,   111,   110,   115,    23,   108,   108,
-      23,    23,    57,   111,   111,   111,   111,   111,   111,   111,
-     111,   111,   417,   417,   417,   108,   108,   111,    23,   424,
-     111,   426,    23,    32,   111,   108,   108,    66,   105,   110,
-     116,   110,   110,   427,   108,   108,   105,   442,   217,   111,
-     111,   111,   443,   260,    82,   417,   240,   370,    -1,   203,
-      85,    57,    85,   197,    83,   188
+      84,    84,    84,   115,   170,   101,   151,    23,   104,    23,
+      24,    23,    93,    23,    24,    99,   366,   101,    38,   100,
+     104,   102,   103,     0,    38,     5,     6,     7,    38,   160,
+      10,   115,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,   174,   344,   430,    65,   128,    62,    99,
+      41,    42,    62,    23,    24,    72,    62,    29,    27,    73,
+      35,   192,   447,    73,    26,    37,    25,    73,    38,    29,
+      39,    29,    31,   218,    61,     8,    96,    37,   428,    54,
+      99,    68,    96,    99,    34,    99,    96,    99,    60,    99,
+      50,    82,    62,    53,   444,   109,    46,   114,    56,   109,
+      60,   115,    74,    73,   404,   115,   112,   113,    70,   115,
+     127,    62,    71,   431,    74,   442,    25,   248,    27,    99,
+      99,   217,    73,   107,    29,    30,    96,    27,   455,    99,
+      39,   449,    37,   217,    61,   216,    99,    97,    98,    39,
+      25,    68,   223,    25,    26,   115,    31,    99,    33,    31,
+     105,    28,   264,    30,    59,    60,   111,    99,    40,    36,
+     107,   112,   113,    34,   115,   108,    43,    44,    45,    74,
+      47,   107,    49,   116,   108,    46,    99,   108,    60,   345,
+     264,    58,   116,   108,    69,   116,    71,   271,   110,    71,
+      72,   272,   114,    48,   108,   114,    51,    52,    75,    76,
+      55,   100,   116,   114,   103,   104,     3,     4,    63,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    17,    18,    19,    20,    21,    81,   108,    24,    25,
+     100,   101,   102,   103,    77,    78,    79,    80,     9,   103,
+      11,    23,    24,   112,   113,   112,   113,   108,   108,   361,
+     108,   335,   335,   335,   108,   108,   108,   108,    99,   340,
+     108,    99,    23,   110,   110,   110,    99,    23,   108,   111,
+     114,   108,   108,   108,    64,    66,   110,   361,   110,   110,
+     110,   110,   366,   110,   110,   110,   110,   108,   108,   370,
+      65,   114,   111,   103,   103,    83,    23,    23,    23,    23,
+      67,    23,   110,   110,    23,   110,    29,    23,    23,   109,
+     111,   103,   115,   108,   426,   109,    23,   110,    23,   108,
+      23,    23,    57,    23,   111,   111,   111,   111,   111,    23,
+     111,   111,   111,   111,   108,   419,   419,   419,   108,   111,
+      32,   110,   426,   111,   428,   111,   111,   110,   108,   108,
+     108,   105,    66,   110,   116,   108,   111,   105,   429,   111,
+     444,   111,   218,   202,    82,   445,   261,   419,   196,   241,
+     372,    84,    84,   187,    -1,    -1,    -1,    -1,    -1,   130,
+      -1,    -1,    -1,   205
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1199,51 +1203,51 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,   118,   119,     0,   120,     8,   121,   122,
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,   118,   119,     0,   120,     8,   121,   122,
-      99,     5,     6,     7,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   138,   162,   163,   170,   171,   172,   234,   236,   239,
-     252,   107,   237,    99,    99,    99,    99,   235,    65,    99,
-     142,   148,   240,   142,   142,   142,   142,   142,    99,   143,
-     156,   112,   113,   141,   233,   142,   142,   107,   107,    99,
-     238,   114,   114,   114,   110,   114,   174,   238,    29,    30,
-      37,    59,    60,    74,   241,   108,   100,   101,   102,   103,
-     161,   108,   108,   108,   108,   108,   108,   103,   158,    23,
-      24,    38,    62,    73,    96,    99,   109,   115,   147,   149,
-     164,   178,   181,   217,   221,   224,   228,   230,   231,   108,
-     108,   108,    99,   164,   240,    23,   173,   177,   181,   217,
-     227,   229,   231,   232,   233,    27,    39,   242,   110,   246,
-     141,   139,   233,   141,   139,   141,   141,   139,    29,    37,
-      60,    74,   169,    34,    46,    28,    30,    36,    43,    44,
-      45,    47,    49,    58,    75,    76,   182,   184,   187,   189,
-     191,   195,   198,   200,   202,   204,   207,   216,    29,    37,
-      50,    53,    60,    74,    97,    98,   165,   147,   232,   100,
-     103,   104,   160,   110,   147,   141,    99,   111,    23,    24,
-      61,    68,   243,    23,   249,   108,   108,   109,   140,   147,
-     230,   108,   108,    61,    68,   245,   246,   110,   110,   110,
-      64,    29,    56,   199,   110,    25,    27,    39,   188,   244,
-     110,   244,    48,    51,    52,    55,    63,    81,   211,    26,
-      70,   203,   110,   248,   246,    66,   245,   110,   246,   110,
-     110,   167,   160,   108,   116,    23,   150,   151,   152,   156,
-     108,   108,   114,   175,   111,   141,   139,   140,   103,   159,
-      83,   136,   141,    23,   225,    23,   226,    23,   201,    23,
-     194,    67,   194,    25,    31,    33,    69,    71,   183,   193,
-     110,    23,   212,   213,   110,   246,    41,    42,    82,   208,
-     209,    23,   251,    29,   192,    35,    54,   196,   110,    23,
-     168,    23,   166,   168,   109,   232,   111,   103,   157,   144,
-     145,   233,   141,   115,   109,   110,   247,   108,   108,   111,
-     111,   111,   111,   111,    23,   215,    23,   214,   111,    77,
-      78,    79,    80,   197,    23,   210,   111,   111,   111,   108,
-     116,   112,   113,   153,   108,    23,    99,   146,   108,    62,
-      73,   176,   179,   180,   181,   218,   219,   222,   227,    23,
-     250,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,   137,   141,    57,    26,    40,    60,    72,
-     185,   193,   244,   111,   111,   111,   232,    23,   154,    23,
-     155,   145,   141,    34,    46,   205,   207,   108,   116,   111,
-      32,   186,   190,   193,   108,   116,   108,   108,   110,   110,
-      66,   206,   179,   232,   145,   136,   220,   225,   223,   226,
-     110,   116,   108,   108,   111,   105,   111,   105,   210,   145,
-     137,   225,   226,   105,   210,   111
+      99,     5,     6,     7,    10,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    99,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     138,   162,   163,   170,   171,   172,   234,   236,   237,   240,
+     253,   107,   238,    99,    99,    99,    65,    99,   142,   148,
+     241,   142,   142,   142,   142,   142,    99,   143,   156,   112,
+     113,   141,   233,   142,   142,   107,   107,     9,    11,    99,
+     239,   114,   114,   110,   114,   174,    29,    30,    37,    59,
+      60,    74,   242,   108,   100,   101,   102,   103,   161,   108,
+     108,   108,   108,   108,   108,   103,   158,    23,    24,    38,
+      62,    73,    96,    99,   109,   115,   147,   149,   164,   178,
+     181,   217,   221,   224,   228,   230,   231,   108,   108,    99,
+     235,   108,    99,   164,    23,   173,   177,   181,   217,   227,
+     229,   231,   232,   233,    27,    39,   243,   110,   247,   141,
+     139,   233,   141,   139,   141,   141,   139,    29,    37,    60,
+      74,   169,    34,    46,    28,    30,    36,    43,    44,    45,
+      47,    49,    58,    75,    76,   182,   184,   187,   189,   191,
+     195,   198,   200,   202,   204,   207,   216,    29,    37,    50,
+      53,    60,    74,    97,    98,   165,   147,   232,   100,   103,
+     104,   160,   110,   147,   141,   114,   239,    99,   111,    23,
+      24,    61,    68,   244,    23,   250,   108,   108,   109,   140,
+     147,   230,   108,   108,    61,    68,   246,   247,   110,   110,
+     110,    64,    29,    56,   199,   110,    25,    27,    39,   188,
+     245,   110,   245,    48,    51,    52,    55,    63,    81,   211,
+      26,    70,   203,   110,   249,   247,    66,   246,   110,   247,
+     110,   110,   167,   160,   108,   116,    23,   150,   151,   152,
+     156,   108,   108,   241,   114,   175,   111,   141,   139,   140,
+     103,   159,    83,   136,   141,    23,   225,    23,   226,    23,
+     201,    23,   194,    67,   194,    25,    31,    33,    69,    71,
+     183,   193,   110,    23,   212,   213,   110,   247,    41,    42,
+      82,   208,   209,    23,   252,    29,   192,    35,    54,   196,
+     110,    23,   168,    23,   166,   168,   109,   232,   111,   103,
+     157,   144,   145,   233,   141,   115,   109,   110,   248,   108,
+     108,   111,   111,   111,   111,   111,    23,   215,    23,   214,
+     111,    77,    78,    79,    80,   197,    23,   210,   111,   111,
+     111,   108,   116,   112,   113,   153,   108,    23,    99,   146,
+     108,    62,    73,   176,   179,   180,   181,   218,   219,   222,
+     227,    23,   251,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,   137,   141,    57,    26,    40,
+      60,    72,   185,   193,   245,   111,   111,   111,   232,    23,
+     154,    23,   155,   145,   141,    34,    46,   205,   207,   108,
+     116,   111,    32,   186,   190,   193,   108,   116,   108,   108,
+     110,   110,    66,   206,   179,   232,   145,   136,   220,   225,
+     223,   226,   110,   116,   108,   108,   111,   105,   111,   105,
+     210,   145,   137,   225,   226,   105,   210,   111
 };
 
 #define yyerrok                (yyerrstatus = 0)
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -4350,20 +4354,67 @@ yyreduce:
 
 /* Line 1455 of yacc.c  */
 #line 1814 "program_parse.y"
 
 /* Line 1455 of yacc.c  */
 #line 1814 "program_parse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
+    { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1817 "program_parse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
+#line 1818 "program_parse.y"
+    {
+          /* NV_fragment_program_option defines the size qualifiers in a
+           * fairly broken way.  "SHORT" or "LONG" can optionally be used
+           * before TEMP or OUTPUT.  However, neither is a reserved word!
+           * This means that we have to parse it as an identifier, then check
+           * to make sure it's one of the valid values.  *sigh*
+           *
+           * In addition, the grammar in the extension spec does *not* allow
+           * the size specifier to be optional, but all known implementations
+           * do.
+           */
+          if (!state->option.NV_fragment) {
+             yyerror(& (yylsp[(1) - (1)]), state, "unexpected IDENTIFIER");
+             YYERROR;
+          }
+
+          if (strcmp("SHORT", (yyvsp[(1) - (1)].string)) == 0) {
+          } else if (strcmp("LONG", (yyvsp[(1) - (1)].string)) == 0) {
+          } else {
+             char *const err_str =
+                make_error_string("invalid storage size specifier \"%s\"",
+                                  (yyvsp[(1) - (1)].string));
+
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid storage size specifier");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+       ;}
+    break;
+
+  case 238:
+
+/* Line 1455 of yacc.c  */
+#line 1852 "program_parse.y"
+    {
+       ;}
     break;
 
   case 239:
 
 /* Line 1455 of yacc.c  */
     break;
 
   case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1821 "program_parse.y"
+#line 1856 "program_parse.y"
+    { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
+    break;
+
+  case 241:
+
+/* Line 1455 of yacc.c  */
+#line 1860 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4371,10 +4422,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 240:
+  case 242:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1827 "program_parse.y"
+#line 1866 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4382,26 +4433,26 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 241:
+  case 243:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1835 "program_parse.y"
+#line 1874 "program_parse.y"
     {
           struct asm_symbol *const s =
     {
           struct asm_symbol *const s =
-             declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
+             declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
 
           if (s == NULL) {
              YYERROR;
           } else {
 
           if (s == NULL) {
              YYERROR;
           } else {
-             s->output_binding = (yyvsp[(4) - (4)].result);
+             s->output_binding = (yyvsp[(5) - (5)].result);
           }
        ;}
     break;
 
           }
        ;}
     break;
 
-  case 242:
+  case 244:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1848 "program_parse.y"
+#line 1887 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4412,10 +4463,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 243:
+  case 245:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1857 "program_parse.y"
+#line 1896 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4426,19 +4477,19 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 244:
+  case 246:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1866 "program_parse.y"
+#line 1905 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 245:
+  case 247:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1870 "program_parse.y"
+#line 1909 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4449,10 +4500,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 246:
+  case 248:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1879 "program_parse.y"
+#line 1918 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4463,10 +4514,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 247:
+  case 249:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1888 "program_parse.y"
+#line 1927 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4477,19 +4528,19 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 248:
+  case 250:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1899 "program_parse.y"
+#line 1938 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 249:
+  case 251:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1905 "program_parse.y"
+#line 1944 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4497,10 +4548,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 250:
+  case 252:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1911 "program_parse.y"
+#line 1950 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4511,10 +4562,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 251:
+  case 253:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1920 "program_parse.y"
+#line 1959 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4525,19 +4576,19 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 252:
+  case 254:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1931 "program_parse.y"
+#line 1970 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 253:
+  case 255:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1935 "program_parse.y"
+#line 1974 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4548,10 +4599,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 254:
+  case 256:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1944 "program_parse.y"
+#line 1983 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4562,94 +4613,94 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 255:
+  case 257:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1954 "program_parse.y"
+#line 1993 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 256:
+  case 258:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1955 "program_parse.y"
+#line 1994 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 257:
+  case 259:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1956 "program_parse.y"
+#line 1995 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
     { (yyval.integer) = 1; ;}
     break;
 
-  case 258:
+  case 260:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1959 "program_parse.y"
+#line 1998 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 259:
+  case 261:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1960 "program_parse.y"
+#line 1999 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 260:
+  case 262:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1961 "program_parse.y"
+#line 2000 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
     { (yyval.integer) = 1; ;}
     break;
 
-  case 261:
+  case 263:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1964 "program_parse.y"
+#line 2003 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 262:
+  case 264:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1965 "program_parse.y"
+#line 2004 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 263:
+  case 265:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1968 "program_parse.y"
+#line 2007 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 264:
+  case 266:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1969 "program_parse.y"
+#line 2008 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 265:
+  case 267:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1972 "program_parse.y"
+#line 2011 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
     { (yyval.integer) = 0; ;}
     break;
 
-  case 266:
+  case 268:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1973 "program_parse.y"
+#line 2012 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 267:
+  case 269:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1977 "program_parse.y"
+#line 2016 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4660,10 +4711,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 268:
+  case 270:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1988 "program_parse.y"
+#line 2027 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4674,10 +4725,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 269:
+  case 271:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 1999 "program_parse.y"
+#line 2038 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4688,10 +4739,10 @@ yyreduce:
        ;}
     break;
 
        ;}
     break;
 
-  case 270:
+  case 272:
 
 /* Line 1455 of yacc.c  */
 
 /* Line 1455 of yacc.c  */
-#line 2010 "program_parse.y"
+#line 2049 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4715,7 +4766,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
 
 
 /* Line 1455 of yacc.c  */
-#line 4719 "program_parse.tab.c"
+#line 4770 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4934,7 +4985,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
 
 
 /* Line 1675 of yacc.c  */
-#line 2030 "program_parse.y"
+#line 2069 "program_parse.y"
 
 
 void
 
 
 void
@@ -5004,7 +5055,10 @@ asm_instruction_copy_ctor(const struct prog_instruction *base,
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = base->Opcode;
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = base->Opcode;
+      inst->Base.CondUpdate = base->CondUpdate;
+      inst->Base.CondDst = base->CondDst;
       inst->Base.SaturateMode = base->SaturateMode;
       inst->Base.SaturateMode = base->SaturateMode;
+      inst->Base.Precision = base->Precision;
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
index 4e2912d1c4d6819b6e8157a6327a608f411596e7..51cc9f7f119fc355cbd65e8b9fcbbce46c1f3736 100644 (file)
@@ -1811,7 +1811,46 @@ optionalSign: '+'        { $$ = FALSE; }
        |                { $$ = FALSE; }
        ;
 
        |                { $$ = FALSE; }
        ;
 
-TEMP_statement: TEMP { $<integer>$ = $1; } varNameList
+TEMP_statement: optVarSize TEMP { $<integer>$ = $2; } varNameList
+       ;
+
+optVarSize: IDENTIFIER
+       {
+          /* NV_fragment_program_option defines the size qualifiers in a
+           * fairly broken way.  "SHORT" or "LONG" can optionally be used
+           * before TEMP or OUTPUT.  However, neither is a reserved word!
+           * This means that we have to parse it as an identifier, then check
+           * to make sure it's one of the valid values.  *sigh*
+           *
+           * In addition, the grammar in the extension spec does *not* allow
+           * the size specifier to be optional, but all known implementations
+           * do.
+           */
+          if (!state->option.NV_fragment) {
+             yyerror(& @1, state, "unexpected IDENTIFIER");
+             YYERROR;
+          }
+
+          if (strcmp("SHORT", $1) == 0) {
+          } else if (strcmp("LONG", $1) == 0) {
+          } else {
+             char *const err_str =
+                make_error_string("invalid storage size specifier \"%s\"",
+                                  $1);
+
+             yyerror(& @1, state, (err_str != NULL)
+                     ? err_str : "invalid storage size specifier");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+       }
+       |
+       {
+       }
        ;
 
 ADDRESS_statement: ADDRESS { $<integer>$ = $1; } varNameList
        ;
 
 ADDRESS_statement: ADDRESS { $<integer>$ = $1; } varNameList
@@ -1831,15 +1870,15 @@ varNameList: varNameList ',' IDENTIFIER
        }
        ;
 
        }
        ;
 
-OUTPUT_statement: OUTPUT IDENTIFIER '=' resultBinding
+OUTPUT_statement: optVarSize OUTPUT IDENTIFIER '=' resultBinding
        {
           struct asm_symbol *const s =
        {
           struct asm_symbol *const s =
-             declare_variable(state, $2, at_output, & @2);
+             declare_variable(state, $3, at_output, & @3);
 
           if (s == NULL) {
              YYERROR;
           } else {
 
           if (s == NULL) {
              YYERROR;
           } else {
-             s->output_binding = $4;
+             s->output_binding = $5;
           }
        }
        ;
           }
        }
        ;
@@ -2096,7 +2135,10 @@ asm_instruction_copy_ctor(const struct prog_instruction *base,
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = base->Opcode;
    if (inst) {
       _mesa_init_instructions(& inst->Base, 1);
       inst->Base.Opcode = base->Opcode;
+      inst->Base.CondUpdate = base->CondUpdate;
+      inst->Base.CondDst = base->CondDst;
       inst->Base.SaturateMode = base->SaturateMode;
       inst->Base.SaturateMode = base->SaturateMode;
+      inst->Base.Precision = base->Precision;
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
index 79e80c54d7131827524f399933b497dc7237d1e8..cb7b7a5fb270d33ebbf288767f937c24d0e43d46 100644 (file)
  * \author Ian Romanick <ian.d.romanick@intel.com>
  */
 
  * \author Ian Romanick <ian.d.romanick@intel.com>
  */
 
+int
+_mesa_parse_instruction_suffix(const struct asm_parser_state *state,
+                              const char *suffix,
+                              struct prog_instruction *inst)
+{
+   inst->CondUpdate = 0;
+   inst->CondDst = 0;
+   inst->SaturateMode = SATURATE_OFF;
+   inst->Precision = FLOAT32;
+
+
+   /* The first possible suffix element is the precision specifier from
+    * NV_fragment_program_option.
+    */
+   if (state->option.NV_fragment) {
+      switch (suffix[0]) {
+      case 'H':
+        inst->Precision = FLOAT16;
+        suffix++;
+        break;
+      case 'R':
+        inst->Precision = FLOAT32;
+        suffix++;
+        break;
+      case 'X':
+        inst->Precision = FIXED12;
+        suffix++;
+        break;
+      default:
+        break;
+      }
+   }
+
+   /* The next possible suffix element is the condition code modifier selection
+    * from NV_fragment_program_option.
+    */
+   if (state->option.NV_fragment) {
+      if (suffix[0] == 'C') {
+        inst->CondUpdate = 1;
+        suffix++;
+      }
+   }
+
+
+   /* The final possible suffix element is the saturation selector from
+    * ARB_fragment_program.
+    */
+   if (state->mode == ARB_fragment) {
+      if (strcmp(suffix, "_SAT") == 0) {
+        inst->SaturateMode = SATURATE_ZERO_ONE;
+        suffix += 4;
+      }
+   }
+
+
+   /* It is an error for all of the suffix string not to be consumed.
+    */
+   return suffix[0] == '\0';
+}
+
+
 int
 _mesa_ARBvp_parse_option(struct asm_parser_state *state, const char *option)
 {
 int
 _mesa_ARBvp_parse_option(struct asm_parser_state *state, const char *option)
 {
index be32a1bed158e63420526b6ab47401821902731f..497891f53d82c92814182a5d0e1116b68b818889 100644 (file)
@@ -264,4 +264,18 @@ extern int _mesa_ARBvp_parse_option(struct asm_parser_state *state,
 extern int _mesa_ARBfp_parse_option(struct asm_parser_state *state,
     const char *option);
 
 extern int _mesa_ARBfp_parse_option(struct asm_parser_state *state,
     const char *option);
 
+/**
+ * Parses and processes instruction suffixes
+ *
+ * Instruction suffixes, such as \c _SAT, are processed.  The relevant bits
+ * are set in \c inst.  If suffixes are encountered that are either not known
+ * or not supported by the modes and options set in \c state, zero will be
+ * returned.
+ *
+ * \return
+ * Non-zero on success, zero on failure.
+ */
+extern int _mesa_parse_instruction_suffix(const struct asm_parser_state *state,
+    const char *suffix, struct prog_instruction *inst);
+
 /*@}*/
 /*@}*/