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;
 
-#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
@@ -366,93 +366,100 @@ struct yy_trans_info
        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,  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,
-      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,  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] =
@@ -498,185 +505,199 @@ static yyconst flex_int32_t yy_meta[68] =
         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, 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,  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,
-      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,
@@ -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,
-       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,
 
@@ -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,
-      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,
-      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,
-       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,  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,
-      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,
-      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,
-       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,
-      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,
@@ -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,
-       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,
 
@@ -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,
-       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,
-       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,   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,
 
-       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,
-      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,
-      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,
-      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,
-      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,
-      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
@@ -997,11 +1068,13 @@ static yyconst flex_int16_t yy_chk[1123] =
    } while (0)
 
 
-#define return_opcode(condition, token, opcode, sat)   \
+#define return_opcode(condition, token, opcode, len)   \
    do {                                                        \
-      if (condition) {                                 \
+      if (condition &&                                 \
+         _mesa_parse_instruction_suffix(yyextra,       \
+                                        yytext + len,  \
+                                        & yylval->temp_inst)) {        \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
-        yylval->temp_inst.SaturateMode = SATURATE_ ## sat; \
         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 *
-#line 1071 "lex.yy.c"
+#line 1144 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1313,10 +1386,10 @@ YY_DECL
        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;
 
@@ -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];
-                               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;
                        }
-               while ( yy_base[yy_current_state] != 1055 );
+               while ( yy_base[yy_current_state] != 1284 );
 
 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
-#line 138 "program_lexer.l"
+#line 145 "program_lexer.l"
 { 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
-#line 140 "program_lexer.l"
+#line 147 "program_lexer.l"
 {
    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
-#line 144 "program_lexer.l"
+#line 151 "program_lexer.l"
 { 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
-#line 146 "program_lexer.l"
+#line 153 "program_lexer.l"
 { 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
-#line 148 "program_lexer.l"
+#line 155 "program_lexer.l"
 { 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
-#line 150 "program_lexer.l"
+#line 157 "program_lexer.l"
 { 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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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
-#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"
-{ 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
-case 165:
+case 116:
 YY_RULE_SETUP
-#line 321 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
-case 166:
+case 117:
 YY_RULE_SETUP
-#line 322 "program_lexer.l"
+#line 280 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
-case 167:
+case 118:
 YY_RULE_SETUP
-#line 323 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
-case 168:
+case 119:
 YY_RULE_SETUP
-#line 324 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
-case 169:
+case 120:
 YY_RULE_SETUP
-#line 325 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
-case 170:
+case 121:
 YY_RULE_SETUP
-#line 326 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
-case 171:
+case 122:
 YY_RULE_SETUP
-#line 327 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
-case 172:
+case 123:
 YY_RULE_SETUP
-#line 328 "program_lexer.l"
+#line 286 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
-case 173:
+case 124:
 YY_RULE_SETUP
-#line 330 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
-case 174:
+case 125:
 YY_RULE_SETUP
-#line 331 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
-case 175:
+case 126:
 YY_RULE_SETUP
-#line 332 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
-case 176:
+case 127:
 YY_RULE_SETUP
-#line 333 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
-case 177:
+case 128:
 YY_RULE_SETUP
-#line 334 "program_lexer.l"
+#line 292 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
-case 178:
+case 129:
 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
-case 179:
+case 130:
 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
-case 180:
+case 131:
 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
-case 181:
+case 132:
 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
-case 182:
+case 133:
 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
-case 183:
+case 134:
 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
-case 184:
+case 135:
 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
-case 185:
+case 136:
 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
-case 186:
+case 137:
 YY_RULE_SETUP
-#line 344 "program_lexer.l"
+#line 302 "program_lexer.l"
 {
    yylval->string = strdup(yytext);
    return IDENTIFIER;
 }
        YY_BREAK
-case 187:
+case 138:
 YY_RULE_SETUP
-#line 349 "program_lexer.l"
+#line 307 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
-case 188:
+case 139:
 YY_RULE_SETUP
-#line 351 "program_lexer.l"
+#line 309 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
 }
        YY_BREAK
-case 189:
+case 140:
 YY_RULE_SETUP
-#line 355 "program_lexer.l"
+#line 313 "program_lexer.l"
 {
    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
-#line 359 "program_lexer.l"
+#line 317 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 191:
+case 142:
 YY_RULE_SETUP
-#line 363 "program_lexer.l"
+#line 321 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 192:
+case 143:
 YY_RULE_SETUP
-#line 367 "program_lexer.l"
+#line 325 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
 }
        YY_BREAK
-case 193:
+case 144:
 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
-case 194:
+case 145:
 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
@@ -2407,27 +2235,27 @@ YY_RULE_SETUP
    return MASK3;
 }
        YY_BREAK
-case 195:
+case 146:
 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
-case 196:
+case 147:
 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
-case 197:
+case 148:
 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
@@ -2435,9 +2263,9 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 198:
+case 149:
 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
@@ -2445,18 +2273,18 @@ YY_RULE_SETUP
    return MASK2;
 }
        YY_BREAK
-case 199:
+case 150:
 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
-case 200:
+case 151:
 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);
@@ -2464,9 +2292,9 @@ YY_RULE_SETUP
    return MASK1; 
 }
        YY_BREAK
-case 201:
+case 152:
 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]),
@@ -2476,18 +2304,18 @@ YY_RULE_SETUP
    return SWIZZLE;
 }
        YY_BREAK
-case 202:
+case 153:
 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
-case 203:
+case 154:
 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
@@ -2495,27 +2323,27 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK3);
 }
        YY_BREAK
-case 204:
+case 155:
 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
-case 205:
+case 156:
 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
-case 206:
+case 157:
 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
@@ -2523,9 +2351,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 207:
+case 158:
 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
@@ -2533,18 +2361,18 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK2);
 }
        YY_BREAK
-case 208:
+case 159:
 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
-case 209:
+case 160:
 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);
@@ -2552,9 +2380,9 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, MASK1);
 }
        YY_BREAK
-case 210:
+case 161:
 YY_RULE_SETUP
-#line 478 "program_lexer.l"
+#line 436 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2566,9 +2394,9 @@ YY_RULE_SETUP
    }
 }
        YY_BREAK
-case 211:
+case 162:
 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]),
@@ -2578,15 +2406,15 @@ YY_RULE_SETUP
    return_token_or_DOT(require_ARB_fp, SWIZZLE);
 }
        YY_BREAK
-case 212:
+case 163:
 YY_RULE_SETUP
-#line 498 "program_lexer.l"
+#line 456 "program_lexer.l"
 { return DOT; }
        YY_BREAK
-case 213:
-/* rule 213 can match eol */
+case 164:
+/* rule 164 can match eol */
 YY_RULE_SETUP
-#line 500 "program_lexer.l"
+#line 458 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2595,30 +2423,30 @@ YY_RULE_SETUP
    yylloc->position++;
 }
        YY_BREAK
-case 214:
+case 165:
 YY_RULE_SETUP
-#line 507 "program_lexer.l"
+#line 465 "program_lexer.l"
 /* 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
-#line 508 "program_lexer.l"
+#line 466 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
-case 216:
+case 167:
 YY_RULE_SETUP
-#line 509 "program_lexer.l"
+#line 467 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
-case 217:
+case 168:
 YY_RULE_SETUP
-#line 510 "program_lexer.l"
+#line 468 "program_lexer.l"
 ECHO;
        YY_BREAK
-#line 2622 "lex.yy.c"
+#line 2450 "lex.yy.c"
 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];
-                       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];
@@ -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];
-               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_is_jam = (yy_current_state == 775);
+       yy_is_jam = (yy_current_state == 835);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3793,7 +3621,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 510 "program_lexer.l"
+#line 468 "program_lexer.l"
 
 
 
index 62ca9b6db6a48a917518da0366a4287a11909e84..d7493f42fad1fe19afbd6c1e0e647f0f5fbd299a 100644 (file)
    } while (0)
 
 
-#define return_opcode(condition, token, opcode, sat)   \
+#define return_opcode(condition, token, opcode, len)   \
    do {                                                        \
-      if (condition) {                                 \
+      if (condition &&                                 \
+         _mesa_parse_instruction_suffix(yyextra,       \
+                                        yytext + len,  \
+                                        & yylval->temp_inst)) {        \
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
-        yylval->temp_inst.SaturateMode = SATURATE_ ## sat; \
         return token;                                  \
       } else {                                         \
         yylval->string = strdup(yytext);               \
@@ -132,6 +134,11 @@ exp    [Ee][-+]?[0-9]+
 frac   "."[0-9]+
 dot    "."[ \t]*
 
+sz     [HRX]?
+szf    [HR]?
+cc     C?
+sat    (_SAT)?
+
 %option bison-bridge bison-locations reentrant noyywrap
 %%
 
@@ -149,121 +156,72 @@ OUTPUT                    { return OUTPUT; }
 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); }
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.  */
-#define YYLAST   375
+#define YYLAST   383
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  136
+#define YYNNTS  137
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  270
+#define YYNRULES  272
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  456
+#define YYNSTATES  458
 
 /* 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,
-     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.  */
@@ -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,   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,
@@ -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,
-     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,
-      -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,
-      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,
-     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,
@@ -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,
-     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,
-      -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,
-      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,
@@ -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,
-      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,
@@ -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,   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.  */
@@ -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,
-    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
 
@@ -866,9 +867,10 @@ static const char *const yytname[] =
   "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
@@ -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,
-     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.  */
@@ -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,
-       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
@@ -966,143 +968,143 @@ static const yytype_uint8 yyr2[] =
    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[] =
 {
-      -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.  */
-#define YYPACT_NINF -403
+#define YYPACT_NINF -386
 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[] =
 {
-    -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
@@ -1112,86 +1114,88 @@ static const yytype_int16 yypgoto[] =
 #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[] =
 {
-      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
@@ -1199,51 +1203,51 @@ static const yytype_int16 yycheck[] =
 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)
@@ -4350,20 +4354,67 @@ yyreduce:
 
 /* 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  */
-#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  */
-#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;
@@ -4371,10 +4422,10 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 242:
 
 /* 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;
@@ -4382,26 +4433,26 @@ yyreduce:
        ;}
     break;
 
-  case 241:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1835 "program_parse.y"
+#line 1874 "program_parse.y"
     {
           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 {
-             s->output_binding = (yyvsp[(4) - (4)].result);
+             s->output_binding = (yyvsp[(5) - (5)].result);
           }
        ;}
     break;
 
-  case 242:
+  case 244:
 
 /* 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;
@@ -4412,10 +4463,10 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 245:
 
 /* 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;
@@ -4426,19 +4477,19 @@ yyreduce:
        ;}
     break;
 
-  case 244:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1866 "program_parse.y"
+#line 1905 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 245:
+  case 247:
 
 /* 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;
@@ -4449,10 +4500,10 @@ yyreduce:
        ;}
     break;
 
-  case 246:
+  case 248:
 
 /* 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);
@@ -4463,10 +4514,10 @@ yyreduce:
        ;}
     break;
 
-  case 247:
+  case 249:
 
 /* 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;
@@ -4477,19 +4528,19 @@ yyreduce:
        ;}
     break;
 
-  case 248:
+  case 250:
 
 /* 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;
 
-  case 249:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1905 "program_parse.y"
+#line 1944 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4497,10 +4548,10 @@ yyreduce:
        ;}
     break;
 
-  case 250:
+  case 252:
 
 /* 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;
@@ -4511,10 +4562,10 @@ yyreduce:
        ;}
     break;
 
-  case 251:
+  case 253:
 
 /* 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;
@@ -4525,19 +4576,19 @@ yyreduce:
        ;}
     break;
 
-  case 252:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1931 "program_parse.y"
+#line 1970 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 253:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1935 "program_parse.y"
+#line 1974 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4548,10 +4599,10 @@ yyreduce:
        ;}
     break;
 
-  case 254:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1944 "program_parse.y"
+#line 1983 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4562,94 +4613,94 @@ yyreduce:
        ;}
     break;
 
-  case 255:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1954 "program_parse.y"
+#line 1993 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 256:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1955 "program_parse.y"
+#line 1994 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 257:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1956 "program_parse.y"
+#line 1995 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 258:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1959 "program_parse.y"
+#line 1998 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 259:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1960 "program_parse.y"
+#line 1999 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 260:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1961 "program_parse.y"
+#line 2000 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 261:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1964 "program_parse.y"
+#line 2003 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 262:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1965 "program_parse.y"
+#line 2004 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 263:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1968 "program_parse.y"
+#line 2007 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 264:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 1969 "program_parse.y"
+#line 2008 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 265:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1972 "program_parse.y"
+#line 2011 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 266:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 1973 "program_parse.y"
+#line 2012 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 267:
+  case 269:
 
 /* 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");
@@ -4660,10 +4711,10 @@ yyreduce:
        ;}
     break;
 
-  case 268:
+  case 270:
 
 /* 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");
@@ -4674,10 +4725,10 @@ yyreduce:
        ;}
     break;
 
-  case 269:
+  case 271:
 
 /* 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");
@@ -4688,10 +4739,10 @@ yyreduce:
        ;}
     break;
 
-  case 270:
+  case 272:
 
 /* 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));
@@ -4715,7 +4766,7 @@ yyreduce:
 
 
 /* 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);
@@ -4934,7 +4985,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 2030 "program_parse.y"
+#line 2069 "program_parse.y"
 
 
 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;
+      inst->Base.CondUpdate = base->CondUpdate;
+      inst->Base.CondDst = base->CondDst;
       inst->Base.SaturateMode = base->SaturateMode;
+      inst->Base.Precision = base->Precision;
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
index 4e2912d1c4d6819b6e8157a6327a608f411596e7..51cc9f7f119fc355cbd65e8b9fcbbce46c1f3736 100644 (file)
@@ -1811,7 +1811,46 @@ optionalSign: '+'        { $$ = 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
@@ -1831,15 +1870,15 @@ varNameList: varNameList ',' IDENTIFIER
        }
        ;
 
-OUTPUT_statement: OUTPUT IDENTIFIER '=' resultBinding
+OUTPUT_statement: optVarSize OUTPUT IDENTIFIER '=' resultBinding
        {
           struct asm_symbol *const s =
-             declare_variable(state, $2, at_output, & @2);
+             declare_variable(state, $3, at_output, & @3);
 
           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;
+      inst->Base.CondUpdate = base->CondUpdate;
+      inst->Base.CondDst = base->CondDst;
       inst->Base.SaturateMode = base->SaturateMode;
+      inst->Base.Precision = base->Precision;
 
       asm_instruction_set_operands(inst, dst, src0, src1, src2);
    }
index 79e80c54d7131827524f399933b497dc7237d1e8..cb7b7a5fb270d33ebbf288767f937c24d0e43d46 100644 (file)
  * \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)
 {
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);
 
+/**
+ * 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);
+
 /*@}*/