NV fp parser: Add support for condition codes
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 10 Sep 2009 22:04:24 +0000 (15:04 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 10 Sep 2009 22:04:24 +0000 (15:04 -0700)
Conditional write masks and the condition-code based KIL instruction
are all supported.  The specific behavior of KIL in the following
shader may or may not match the behavior of other implementations:

!!ARBfp1.0
TEMP GT;
MOVC GT, fragment.texcoord[0];
KIL GT.x;
END

Should be it interpreted as 'KIL srcReg' or as 'KIL ccTest'?  The
current parser will interpret it as 'KIL srcReg'.

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 d37b20ba429bd65bc74e382954fcc267e4abbaed..33195c0b16532ecbae21163485ef10cf60407d2d 100644 (file)
@@ -374,7 +374,7 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 /* Line 264 of yacc.c  */
-#line 259 "program_parse.y"
+#line 261 "program_parse.y"
 
 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
     void *yyscanner);
@@ -598,16 +598,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   393
+#define YYLAST   396
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  118
+#define YYNTOKENS  120
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  138
+#define YYNNTS  143
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  274
+#define YYNRULES  282
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  460
+#define YYNSTATES  473
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -623,15 +623,15 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   113,   109,   114,     2,     2,     2,     2,
+     115,   116,     2,   113,   109,   114,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,   108,
-       2,   115,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   117,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,   111,     2,   112,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   116,   110,   117,     2,     2,     2,     2,
+       2,     2,     2,   118,   110,   119,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -666,147 +666,151 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     8,    10,    12,    15,    16,    20,    23,
       24,    27,    30,    32,    34,    36,    38,    40,    42,    44,
       46,    48,    50,    52,    54,    59,    64,    69,    76,    83,
-      92,   101,   104,   117,   120,   122,   124,   126,   128,   130,
-     132,   134,   136,   138,   140,   142,   144,   151,   154,   159,
-     162,   164,   168,   174,   177,   180,   188,   191,   193,   195,
-     197,   199,   204,   206,   208,   210,   212,   214,   216,   218,
-     222,   223,   226,   229,   231,   233,   235,   237,   239,   241,
-     243,   245,   247,   248,   250,   252,   254,   256,   257,   259,
-     261,   263,   265,   267,   269,   274,   277,   280,   282,   285,
-     287,   290,   292,   295,   300,   305,   307,   308,   312,   314,
-     316,   319,   321,   324,   326,   328,   332,   339,   340,   342,
-     345,   350,   352,   356,   358,   360,   362,   364,   366,   368,
-     370,   372,   374,   376,   379,   382,   385,   388,   391,   394,
-     397,   400,   403,   406,   409,   412,   416,   418,   420,   422,
-     428,   430,   432,   434,   437,   439,   441,   444,   446,   449,
-     456,   458,   462,   464,   466,   468,   470,   472,   477,   479,
-     481,   483,   485,   487,   489,   492,   494,   496,   502,   504,
-     507,   509,   511,   517,   520,   521,   528,   532,   533,   535,
-     537,   539,   541,   543,   546,   548,   550,   553,   558,   563,
-     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,   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,   771,   773
+      92,   101,   104,   107,   120,   123,   125,   127,   129,   131,
+     133,   135,   137,   139,   141,   143,   145,   147,   154,   157,
+     162,   165,   167,   171,   177,   181,   184,   192,   195,   197,
+     199,   201,   203,   208,   210,   212,   214,   216,   218,   220,
+     222,   226,   227,   230,   233,   235,   237,   239,   241,   243,
+     245,   247,   249,   251,   252,   254,   256,   258,   260,   261,
+     265,   269,   270,   273,   276,   278,   280,   282,   284,   286,
+     288,   290,   292,   297,   300,   303,   305,   308,   310,   313,
+     315,   318,   323,   328,   330,   331,   335,   337,   339,   342,
+     344,   347,   349,   351,   355,   362,   363,   365,   368,   373,
+     375,   379,   381,   383,   385,   387,   389,   391,   393,   395,
+     397,   399,   402,   405,   408,   411,   414,   417,   420,   423,
+     426,   429,   432,   435,   439,   441,   443,   445,   451,   453,
+     455,   457,   460,   462,   464,   467,   469,   472,   479,   481,
+     485,   487,   489,   491,   493,   495,   500,   502,   504,   506,
+     508,   510,   512,   515,   517,   519,   525,   527,   530,   532,
+     534,   540,   543,   544,   551,   555,   556,   558,   560,   562,
+     564,   566,   569,   571,   573,   576,   581,   586,   587,   589,
+     591,   593,   595,   598,   600,   602,   604,   606,   612,   614,
+     618,   624,   630,   632,   636,   642,   644,   646,   648,   650,
+     652,   654,   656,   658,   660,   664,   670,   678,   688,   691,
+     694,   696,   698,   699,   700,   705,   707,   708,   709,   713,
+     717,   719,   725,   728,   731,   734,   737,   741,   744,   748,
+     749,   751,   753,   754,   756,   758,   759,   761,   763,   764,
+     766,   768,   769,   773,   774,   778,   779,   783,   785,   787,
+     789,   794,   796
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     119,     0,    -1,   120,   121,   123,    12,    -1,     3,    -1,
-       4,    -1,   121,   122,    -1,    -1,     8,   255,   108,    -1,
-     123,   124,    -1,    -1,   125,   108,    -1,   163,   108,    -1,
-     126,    -1,   127,    -1,   128,    -1,   129,    -1,   130,    -1,
-     131,    -1,   132,    -1,   133,    -1,   139,    -1,   134,    -1,
-     135,    -1,   136,    -1,    19,   144,   109,   140,    -1,    18,
-     143,   109,   142,    -1,    16,   143,   109,   140,    -1,    14,
-     143,   109,   140,   109,   140,    -1,    13,   143,   109,   142,
-     109,   142,    -1,    17,   143,   109,   142,   109,   142,   109,
-     142,    -1,    15,   143,   109,   142,   109,   137,   109,   138,
-      -1,    20,   142,    -1,    22,   143,   109,   142,   109,   142,
-     109,   142,   109,   137,   109,   138,    -1,    83,   249,    -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,   143,   109,   148,   109,   145,
-      -1,   234,   141,    -1,   234,   110,   141,   110,    -1,   148,
-     160,    -1,   231,    -1,   234,   148,   161,    -1,   234,   110,
-     148,   161,   110,    -1,   149,   162,    -1,   157,   159,    -1,
-     146,   109,   146,   109,   146,   109,   146,    -1,   234,   147,
-      -1,    23,    -1,   255,    -1,   100,    -1,   165,    -1,   150,
-     111,   151,   112,    -1,   179,    -1,   242,    -1,   100,    -1,
-     100,    -1,   152,    -1,   153,    -1,    23,    -1,   157,   158,
-     154,    -1,    -1,   113,   155,    -1,   114,   156,    -1,    23,
-      -1,    23,    -1,   100,    -1,   104,    -1,   104,    -1,   104,
-      -1,   104,    -1,   101,    -1,   105,    -1,    -1,   101,    -1,
-     102,    -1,   103,    -1,   104,    -1,    -1,   164,    -1,   171,
-      -1,   235,    -1,   238,    -1,   241,    -1,   254,    -1,     7,
-      99,   115,   165,    -1,    96,   166,    -1,    38,   170,    -1,
-      60,    -1,    98,   168,    -1,    53,    -1,    29,   247,    -1,
-      37,    -1,    74,   248,    -1,    50,   111,   169,   112,    -1,
-      97,   111,   167,   112,    -1,    23,    -1,    -1,   111,   169,
-     112,    -1,    23,    -1,    60,    -1,    29,   247,    -1,    37,
-      -1,    74,   248,    -1,   172,    -1,   173,    -1,    10,    99,
-     175,    -1,    10,    99,   111,   174,   112,   176,    -1,    -1,
-      23,    -1,   115,   178,    -1,   115,   116,   177,   117,    -1,
-     180,    -1,   177,   109,   180,    -1,   182,    -1,   218,    -1,
-     228,    -1,   182,    -1,   218,    -1,   229,    -1,   181,    -1,
-     219,    -1,   228,    -1,   182,    -1,    73,   206,    -1,    73,
-     183,    -1,    73,   185,    -1,    73,   188,    -1,    73,   190,
-      -1,    73,   196,    -1,    73,   192,    -1,    73,   199,    -1,
-      73,   201,    -1,    73,   203,    -1,    73,   205,    -1,    73,
-     217,    -1,    47,   246,   184,    -1,   194,    -1,    33,    -1,
-      69,    -1,    43,   111,   195,   112,   186,    -1,   194,    -1,
-      60,    -1,    26,    -1,    72,   187,    -1,    40,    -1,    32,
-      -1,    44,   189,    -1,    25,    -1,   246,    67,    -1,    45,
-     111,   195,   112,   246,   191,    -1,   194,    -1,    75,   250,
-     193,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
-      23,    -1,    76,   248,   197,   198,    -1,    35,    -1,    54,
-      -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
-     200,    -1,    29,    -1,    56,    -1,    28,   111,   202,   112,
-      57,    -1,    23,    -1,    58,   204,    -1,    70,    -1,    26,
-      -1,   208,    66,   111,   211,   112,    -1,   208,   207,    -1,
-      -1,    66,   111,   211,   106,   211,   112,    -1,    49,   212,
-     209,    -1,    -1,   210,    -1,    41,    -1,    82,    -1,    42,
-      -1,    23,    -1,    51,   213,    -1,    63,    -1,    52,    -1,
-      81,   248,    -1,    55,   111,   215,   112,    -1,    48,   111,
-     216,   112,    -1,    -1,   214,    -1,    23,    -1,    23,    -1,
-      23,    -1,    30,    64,    -1,   222,    -1,   225,    -1,   220,
-      -1,   223,    -1,    62,    34,   111,   221,   112,    -1,   226,
-      -1,   226,   106,   226,    -1,    62,    34,   111,   226,   112,
-      -1,    62,    46,   111,   224,   112,    -1,   227,    -1,   227,
-     106,   227,    -1,    62,    46,   111,   227,   112,    -1,    23,
-      -1,    23,    -1,   230,    -1,   232,    -1,   231,    -1,   232,
-      -1,   233,    -1,    24,    -1,    23,    -1,   116,   233,   117,
-      -1,   116,   233,   109,   233,   117,    -1,   116,   233,   109,
-     233,   109,   233,   117,    -1,   116,   233,   109,   233,   109,
-     233,   109,   233,   117,    -1,   234,    24,    -1,   234,    23,
-      -1,   113,    -1,   114,    -1,    -1,    -1,   237,    11,   236,
-     240,    -1,   255,    -1,    -1,    -1,     5,   239,   240,    -1,
-     240,   109,    99,    -1,    99,    -1,   237,     9,    99,   115,
-     242,    -1,    65,    60,    -1,    65,    37,    -1,    65,   243,
-      -1,    65,    59,    -1,    65,    74,   248,    -1,    65,    30,
-      -1,    29,   244,   245,    -1,    -1,    39,    -1,    27,    -1,
-      -1,    61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,
-      -1,    61,    -1,    68,    -1,    -1,   111,   251,   112,    -1,
-      -1,   111,   252,   112,    -1,    -1,   111,   253,   112,    -1,
-      23,    -1,    23,    -1,    23,    -1,     6,    99,   115,   100,
-      -1,    99,    -1,   100,    -1
+     121,     0,    -1,   122,   123,   125,    12,    -1,     3,    -1,
+       4,    -1,   123,   124,    -1,    -1,     8,   262,   108,    -1,
+     125,   126,    -1,    -1,   127,   108,    -1,   170,   108,    -1,
+     128,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
+     133,    -1,   134,    -1,   135,    -1,   141,    -1,   136,    -1,
+     137,    -1,   138,    -1,    19,   146,   109,   142,    -1,    18,
+     145,   109,   144,    -1,    16,   145,   109,   142,    -1,    14,
+     145,   109,   142,   109,   142,    -1,    13,   145,   109,   144,
+     109,   144,    -1,    17,   145,   109,   144,   109,   144,   109,
+     144,    -1,    15,   145,   109,   144,   109,   139,   109,   140,
+      -1,    20,   144,    -1,    20,   166,    -1,    22,   145,   109,
+     144,   109,   144,   109,   144,   109,   139,   109,   140,    -1,
+      83,   256,    -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,   145,   109,
+     150,   109,   147,    -1,   241,   143,    -1,   241,   110,   143,
+     110,    -1,   150,   162,    -1,   238,    -1,   241,   150,   163,
+      -1,   241,   110,   150,   163,   110,    -1,   151,   164,   165,
+      -1,   159,   161,    -1,   148,   109,   148,   109,   148,   109,
+     148,    -1,   241,   149,    -1,    23,    -1,   262,    -1,   100,
+      -1,   172,    -1,   152,   111,   153,   112,    -1,   186,    -1,
+     249,    -1,   100,    -1,   100,    -1,   154,    -1,   155,    -1,
+      23,    -1,   159,   160,   156,    -1,    -1,   113,   157,    -1,
+     114,   158,    -1,    23,    -1,    23,    -1,   100,    -1,   104,
+      -1,   104,    -1,   104,    -1,   104,    -1,   101,    -1,   105,
+      -1,    -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,
+      -1,   115,   166,   116,    -1,   115,   167,   116,    -1,    -1,
+     168,   163,    -1,   169,   163,    -1,    99,    -1,   100,    -1,
+     171,    -1,   178,    -1,   242,    -1,   245,    -1,   248,    -1,
+     261,    -1,     7,    99,   117,   172,    -1,    96,   173,    -1,
+      38,   177,    -1,    60,    -1,    98,   175,    -1,    53,    -1,
+      29,   254,    -1,    37,    -1,    74,   255,    -1,    50,   111,
+     176,   112,    -1,    97,   111,   174,   112,    -1,    23,    -1,
+      -1,   111,   176,   112,    -1,    23,    -1,    60,    -1,    29,
+     254,    -1,    37,    -1,    74,   255,    -1,   179,    -1,   180,
+      -1,    10,    99,   182,    -1,    10,    99,   111,   181,   112,
+     183,    -1,    -1,    23,    -1,   117,   185,    -1,   117,   118,
+     184,   119,    -1,   187,    -1,   184,   109,   187,    -1,   189,
+      -1,   225,    -1,   235,    -1,   189,    -1,   225,    -1,   236,
+      -1,   188,    -1,   226,    -1,   235,    -1,   189,    -1,    73,
+     213,    -1,    73,   190,    -1,    73,   192,    -1,    73,   195,
+      -1,    73,   197,    -1,    73,   203,    -1,    73,   199,    -1,
+      73,   206,    -1,    73,   208,    -1,    73,   210,    -1,    73,
+     212,    -1,    73,   224,    -1,    47,   253,   191,    -1,   201,
+      -1,    33,    -1,    69,    -1,    43,   111,   202,   112,   193,
+      -1,   201,    -1,    60,    -1,    26,    -1,    72,   194,    -1,
+      40,    -1,    32,    -1,    44,   196,    -1,    25,    -1,   253,
+      67,    -1,    45,   111,   202,   112,   253,   198,    -1,   201,
+      -1,    75,   257,   200,    -1,    29,    -1,    25,    -1,    31,
+      -1,    71,    -1,    23,    -1,    76,   255,   204,   205,    -1,
+      35,    -1,    54,    -1,    79,    -1,    80,    -1,    78,    -1,
+      77,    -1,    36,   207,    -1,    29,    -1,    56,    -1,    28,
+     111,   209,   112,    57,    -1,    23,    -1,    58,   211,    -1,
+      70,    -1,    26,    -1,   215,    66,   111,   218,   112,    -1,
+     215,   214,    -1,    -1,    66,   111,   218,   106,   218,   112,
+      -1,    49,   219,   216,    -1,    -1,   217,    -1,    41,    -1,
+      82,    -1,    42,    -1,    23,    -1,    51,   220,    -1,    63,
+      -1,    52,    -1,    81,   255,    -1,    55,   111,   222,   112,
+      -1,    48,   111,   223,   112,    -1,    -1,   221,    -1,    23,
+      -1,    23,    -1,    23,    -1,    30,    64,    -1,   229,    -1,
+     232,    -1,   227,    -1,   230,    -1,    62,    34,   111,   228,
+     112,    -1,   233,    -1,   233,   106,   233,    -1,    62,    34,
+     111,   233,   112,    -1,    62,    46,   111,   231,   112,    -1,
+     234,    -1,   234,   106,   234,    -1,    62,    46,   111,   234,
+     112,    -1,    23,    -1,    23,    -1,   237,    -1,   239,    -1,
+     238,    -1,   239,    -1,   240,    -1,    24,    -1,    23,    -1,
+     118,   240,   119,    -1,   118,   240,   109,   240,   119,    -1,
+     118,   240,   109,   240,   109,   240,   119,    -1,   118,   240,
+     109,   240,   109,   240,   109,   240,   119,    -1,   241,    24,
+      -1,   241,    23,    -1,   113,    -1,   114,    -1,    -1,    -1,
+     244,    11,   243,   247,    -1,   262,    -1,    -1,    -1,     5,
+     246,   247,    -1,   247,   109,    99,    -1,    99,    -1,   244,
+       9,    99,   117,   249,    -1,    65,    60,    -1,    65,    37,
+      -1,    65,   250,    -1,    65,    59,    -1,    65,    74,   255,
+      -1,    65,    30,    -1,    29,   251,   252,    -1,    -1,    39,
+      -1,    27,    -1,    -1,    61,    -1,    68,    -1,    -1,    39,
+      -1,    27,    -1,    -1,    61,    -1,    68,    -1,    -1,   111,
+     258,   112,    -1,    -1,   111,   259,   112,    -1,    -1,   111,
+     260,   112,    -1,    23,    -1,    23,    -1,    23,    -1,     6,
+      99,   117,   100,    -1,    99,    -1,   100,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   266,   266,   269,   277,   289,   290,   293,   315,   316,
-     319,   334,   337,   342,   349,   350,   351,   352,   353,   354,
-     355,   358,   359,   360,   363,   369,   375,   381,   388,   394,
-     401,   445,   452,   496,   502,   503,   504,   505,   506,   507,
-     508,   509,   510,   511,   512,   513,   516,   528,   536,   553,
-     560,   579,   590,   610,   632,   641,   674,   681,   696,   746,
-     788,   799,   820,   830,   836,   867,   884,   884,   886,   893,
-     905,   906,   907,   910,   922,   934,   952,   963,   975,   977,
-     978,   979,   980,   983,   983,   983,   983,   984,   987,   988,
-     989,   990,   991,   992,   995,  1013,  1017,  1023,  1027,  1031,
-    1035,  1044,  1053,  1057,  1062,  1068,  1079,  1079,  1080,  1082,
-    1086,  1090,  1094,  1100,  1100,  1102,  1118,  1141,  1144,  1155,
-    1161,  1167,  1168,  1175,  1181,  1187,  1195,  1201,  1207,  1215,
-    1221,  1227,  1235,  1236,  1239,  1240,  1241,  1242,  1243,  1244,
-    1245,  1246,  1247,  1248,  1249,  1252,  1261,  1265,  1269,  1275,
-    1284,  1288,  1292,  1301,  1305,  1311,  1317,  1324,  1329,  1337,
-    1347,  1349,  1357,  1363,  1367,  1371,  1377,  1388,  1397,  1401,
-    1406,  1410,  1414,  1418,  1424,  1431,  1435,  1441,  1449,  1460,
-    1467,  1471,  1477,  1487,  1498,  1502,  1520,  1529,  1532,  1538,
-    1542,  1546,  1552,  1563,  1568,  1573,  1578,  1583,  1588,  1596,
-    1599,  1604,  1617,  1625,  1636,  1644,  1644,  1646,  1646,  1648,
-    1658,  1663,  1670,  1680,  1689,  1694,  1701,  1711,  1721,  1733,
-    1733,  1734,  1734,  1736,  1746,  1754,  1764,  1772,  1780,  1789,
-    1800,  1804,  1810,  1811,  1812,  1815,  1815,  1818,  1853,  1857,
-    1857,  1860,  1866,  1874,  1887,  1896,  1905,  1909,  1918,  1927,
-    1938,  1945,  1950,  1959,  1971,  1974,  1983,  1994,  1995,  1996,
-    1999,  2000,  2001,  2004,  2005,  2008,  2009,  2012,  2013,  2016,
-    2027,  2038,  2049,  2070,  2071
+       0,   268,   268,   271,   279,   291,   292,   295,   317,   318,
+     321,   336,   339,   344,   351,   352,   353,   354,   355,   356,
+     357,   360,   361,   362,   365,   371,   377,   383,   390,   396,
+     403,   447,   452,   462,   506,   512,   513,   514,   515,   516,
+     517,   518,   519,   520,   521,   522,   523,   526,   538,   546,
+     563,   570,   589,   600,   620,   645,   654,   687,   694,   709,
+     759,   801,   812,   833,   843,   849,   880,   897,   897,   899,
+     906,   918,   919,   920,   923,   935,   947,   965,   976,   988,
+     990,   991,   992,   993,   996,   996,   996,   996,   997,  1000,
+    1004,  1009,  1016,  1023,  1030,  1053,  1076,  1077,  1078,  1079,
+    1080,  1081,  1084,  1102,  1106,  1112,  1116,  1120,  1124,  1133,
+    1142,  1146,  1151,  1157,  1168,  1168,  1169,  1171,  1175,  1179,
+    1183,  1189,  1189,  1191,  1207,  1230,  1233,  1244,  1250,  1256,
+    1257,  1264,  1270,  1276,  1284,  1290,  1296,  1304,  1310,  1316,
+    1324,  1325,  1328,  1329,  1330,  1331,  1332,  1333,  1334,  1335,
+    1336,  1337,  1338,  1341,  1350,  1354,  1358,  1364,  1373,  1377,
+    1381,  1390,  1394,  1400,  1406,  1413,  1418,  1426,  1436,  1438,
+    1446,  1452,  1456,  1460,  1466,  1477,  1486,  1490,  1495,  1499,
+    1503,  1507,  1513,  1520,  1524,  1530,  1538,  1549,  1556,  1560,
+    1566,  1576,  1587,  1591,  1609,  1618,  1621,  1627,  1631,  1635,
+    1641,  1652,  1657,  1662,  1667,  1672,  1677,  1685,  1688,  1693,
+    1706,  1714,  1725,  1733,  1733,  1735,  1735,  1737,  1747,  1752,
+    1759,  1769,  1778,  1783,  1790,  1800,  1810,  1822,  1822,  1823,
+    1823,  1825,  1835,  1843,  1853,  1861,  1869,  1878,  1889,  1893,
+    1899,  1900,  1901,  1904,  1904,  1907,  1942,  1946,  1946,  1949,
+    1955,  1963,  1976,  1985,  1994,  1998,  2007,  2016,  2027,  2034,
+    2039,  2048,  2060,  2063,  2072,  2083,  2084,  2085,  2088,  2089,
+    2090,  2093,  2094,  2097,  2098,  2101,  2102,  2105,  2116,  2127,
+    2138,  2159,  2160
 };
 #endif
 
@@ -833,8 +837,8 @@ static const char *const yytname[] =
   "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
   "WEIGHT", "IDENTIFIER", "USED_IDENTIFIER", "MASK4", "MASK3", "MASK2",
   "MASK1", "SWIZZLE", "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'",
-  "'+'", "'-'", "'='", "'{'", "'}'", "$accept", "program", "language",
-  "optionSequence", "option", "statementSequence", "statement",
+  "'+'", "'-'", "'('", "')'", "'='", "'{'", "'}'", "$accept", "program",
+  "language", "optionSequence", "option", "statementSequence", "statement",
   "instruction", "ALU_instruction", "TexInstruction", "ARL_instruction",
   "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
   "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
@@ -845,6 +849,7 @@ static const char *const yytname[] =
   "progParamArrayAbs", "progParamArrayRel", "addrRegRelOffset",
   "addrRegPosOffset", "addrRegNegOffset", "addrReg", "addrComponent",
   "addrWriteMask", "scalarSuffix", "swizzleSuffix", "optionalMask",
+  "optionalCcMask", "ccTest", "ccTest2", "ccMaskRule", "ccMaskRule2",
   "namingStatement", "ATTRIB_statement", "attribBinding", "vtxAttribItem",
   "vtxAttribNum", "vtxOptWeightNum", "vtxWeightNum", "fragAttribItem",
   "PARAM_statement", "PARAM_singleStmt", "PARAM_multipleStmt",
@@ -894,41 +899,42 @@ static const yytype_uint16 yytoknum[] =
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,    59,    44,
-     124,    91,    93,    43,    45,    61,   123,   125
+     124,    91,    93,    43,    45,    40,    41,    61,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
+static const yytype_uint16 yyr1[] =
 {
-       0,   118,   119,   120,   120,   121,   121,   122,   123,   123,
-     124,   124,   125,   125,   126,   126,   126,   126,   126,   126,
-     126,   127,   127,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   138,   138,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   139,   140,   140,   141,
-     141,   142,   142,   143,   144,   145,   146,   147,   147,   148,
-     148,   148,   148,   149,   149,   150,   151,   151,   152,   153,
-     154,   154,   154,   155,   156,   157,   158,   159,   160,   161,
-     161,   161,   161,   162,   162,   162,   162,   162,   163,   163,
-     163,   163,   163,   163,   164,   165,   165,   166,   166,   166,
-     166,   166,   166,   166,   166,   167,   168,   168,   169,   170,
-     170,   170,   170,   171,   171,   172,   173,   174,   174,   175,
-     176,   177,   177,   178,   178,   178,   179,   179,   179,   180,
-     180,   180,   181,   181,   182,   182,   182,   182,   182,   182,
-     182,   182,   182,   182,   182,   183,   184,   184,   184,   185,
-     186,   186,   186,   186,   186,   187,   188,   189,   189,   190,
-     191,   192,   193,   194,   194,   194,   195,   196,   197,   197,
-     198,   198,   198,   198,   199,   200,   200,   201,   202,   203,
-     204,   204,   205,   206,   207,   207,   208,   209,   209,   210,
-     210,   210,   211,   212,   212,   212,   212,   212,   212,   213,
-     213,   214,   215,   216,   217,   218,   218,   219,   219,   220,
-     221,   221,   222,   223,   224,   224,   225,   226,   227,   228,
-     228,   229,   229,   230,   231,   231,   232,   232,   232,   232,
-     233,   233,   234,   234,   234,   236,   235,   237,   237,   239,
-     238,   240,   240,   241,   242,   242,   242,   242,   242,   242,
-     243,   244,   244,   244,   245,   245,   245,   246,   246,   246,
-     247,   247,   247,   248,   248,   249,   249,   250,   250,   251,
-     252,   253,   254,   255,   255
+       0,   120,   121,   122,   122,   123,   123,   124,   125,   125,
+     126,   126,   127,   127,   128,   128,   128,   128,   128,   128,
+     128,   129,   129,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   137,   138,   139,   140,   140,   140,   140,   140,
+     140,   140,   140,   140,   140,   140,   140,   141,   142,   142,
+     143,   143,   144,   144,   145,   146,   147,   148,   149,   149,
+     150,   150,   150,   150,   151,   151,   152,   153,   153,   154,
+     155,   156,   156,   156,   157,   158,   159,   160,   161,   162,
+     163,   163,   163,   163,   164,   164,   164,   164,   164,   165,
+     165,   165,   166,   167,   168,   169,   170,   170,   170,   170,
+     170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
+     173,   173,   173,   174,   175,   175,   176,   177,   177,   177,
+     177,   178,   178,   179,   180,   181,   181,   182,   183,   184,
+     184,   185,   185,   185,   186,   186,   186,   187,   187,   187,
+     188,   188,   189,   189,   189,   189,   189,   189,   189,   189,
+     189,   189,   189,   190,   191,   191,   191,   192,   193,   193,
+     193,   193,   193,   194,   195,   196,   196,   197,   198,   199,
+     200,   201,   201,   201,   202,   203,   204,   204,   205,   205,
+     205,   205,   206,   207,   207,   208,   209,   210,   211,   211,
+     212,   213,   214,   214,   215,   216,   216,   217,   217,   217,
+     218,   219,   219,   219,   219,   219,   219,   220,   220,   221,
+     222,   223,   224,   225,   225,   226,   226,   227,   228,   228,
+     229,   230,   231,   231,   232,   233,   234,   235,   235,   236,
+     236,   237,   238,   238,   239,   239,   239,   239,   240,   240,
+     241,   241,   241,   243,   242,   244,   244,   246,   245,   247,
+     247,   248,   249,   249,   249,   249,   249,   249,   250,   251,
+     251,   251,   252,   252,   252,   253,   253,   253,   254,   254,
+     254,   255,   255,   256,   256,   257,   257,   258,   259,   260,
+     261,   262,   262
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -937,31 +943,32 @@ static const yytype_uint8 yyr2[] =
        0,     2,     4,     1,     1,     2,     0,     3,     2,     0,
        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     4,     4,     4,     6,     6,     8,
-       8,     2,    12,     2,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     6,     2,     4,     2,
-       1,     3,     5,     2,     2,     7,     2,     1,     1,     1,
-       1,     4,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     2,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     1,     1,     1,     1,     0,     1,     1,
-       1,     1,     1,     1,     4,     2,     2,     1,     2,     1,
-       2,     1,     2,     4,     4,     1,     0,     3,     1,     1,
-       2,     1,     2,     1,     1,     3,     6,     0,     1,     2,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     3,     1,     1,     1,     5,
-       1,     1,     1,     2,     1,     1,     2,     1,     2,     6,
-       1,     3,     1,     1,     1,     1,     1,     4,     1,     1,
-       1,     1,     1,     1,     2,     1,     1,     5,     1,     2,
-       1,     1,     5,     2,     0,     6,     3,     0,     1,     1,
-       1,     1,     1,     2,     1,     1,     2,     4,     4,     0,
-       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,     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,     1,     1
+       8,     2,     2,    12,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     6,     2,     4,
+       2,     1,     3,     5,     3,     2,     7,     2,     1,     1,
+       1,     1,     4,     1,     1,     1,     1,     1,     1,     1,
+       3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     1,     1,     1,     1,     0,     3,
+       3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     4,     2,     2,     1,     2,     1,     2,     1,
+       2,     4,     4,     1,     0,     3,     1,     1,     2,     1,
+       2,     1,     1,     3,     6,     0,     1,     2,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     3,     1,     1,     1,     5,     1,     1,
+       1,     2,     1,     1,     2,     1,     2,     6,     1,     3,
+       1,     1,     1,     1,     1,     4,     1,     1,     1,     1,
+       1,     1,     2,     1,     1,     5,     1,     2,     1,     1,
+       5,     2,     0,     6,     3,     0,     1,     1,     1,     1,
+       1,     2,     1,     1,     2,     4,     4,     0,     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,     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,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -969,288 +976,296 @@ 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,   238,
-     273,   274,     0,   239,     0,     0,     0,     2,     0,     0,
-       0,     0,     0,     0,     0,   234,     0,     0,     8,     0,
+       0,     3,     4,     0,     6,     1,     9,     0,     5,   246,
+     281,   282,     0,   247,     0,     0,     0,     2,     0,     0,
+       0,     0,     0,     0,     0,   242,     0,     0,     8,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
-      23,    20,     0,    88,    89,   113,   114,    90,     0,    91,
-      92,    93,   237,     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,
-      56,    58,   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
+      23,    20,     0,    96,    97,   121,   122,    98,     0,    99,
+     100,   101,   245,     7,     0,     0,     0,     0,     0,    65,
+       0,    88,    64,     0,     0,     0,     0,     0,    76,     0,
+       0,    94,   240,   241,    31,    32,    83,     0,     0,     0,
+      10,    11,     0,   243,   250,   248,     0,     0,   125,   242,
+     123,   259,   257,   253,   255,   252,   271,   254,   242,    84,
+      85,    86,    87,    91,   242,   242,   242,   242,   242,   242,
+      78,    55,    81,    80,    82,    92,   233,   232,     0,     0,
+       0,     0,    60,     0,   242,    83,     0,    61,    63,   134,
+     135,   213,   214,   136,   229,   230,     0,   242,     0,     0,
+       0,   280,   102,   126,     0,   127,   131,   132,   133,   227,
+     228,   231,     0,   261,   260,   262,     0,   256,     0,     0,
+      54,     0,     0,     0,    26,     0,    25,    24,   268,   119,
+     117,   271,   104,     0,     0,     0,     0,     0,     0,   265,
+       0,   265,     0,     0,   275,   271,   142,   143,   144,   145,
+     147,   146,   148,   149,   150,   151,     0,   152,   268,   109,
+       0,   107,   105,   271,     0,   114,   103,    83,     0,    52,
+       0,     0,     0,     0,   244,   249,     0,   239,   238,   263,
+     264,   258,   277,     0,   242,    95,     0,     0,    83,   242,
+       0,    48,     0,    51,     0,   242,   269,   270,   118,   120,
+       0,     0,     0,   212,   183,   184,   182,     0,   165,   267,
+     266,   164,     0,     0,     0,     0,   207,   203,     0,   202,
+     271,   195,   189,   188,   187,     0,     0,     0,     0,   108,
+       0,   110,     0,     0,   106,     0,   242,   234,    69,     0,
+      67,    68,     0,   242,   242,   251,     0,   124,   272,    28,
+      89,    90,    93,    27,     0,    79,    50,   273,     0,     0,
+     225,     0,   226,     0,   186,     0,   174,     0,   166,     0,
+     171,   172,   155,   156,   173,   153,   154,     0,   209,   201,
+     208,     0,   204,   197,   199,   198,   194,   196,   279,     0,
+     170,   169,   176,   177,     0,     0,   116,     0,   113,     0,
+       0,    53,     0,    62,    77,    71,    47,     0,     0,     0,
+     242,    49,     0,    34,     0,   242,   220,   224,     0,     0,
+     265,   211,     0,   210,     0,   276,   181,   180,   178,   179,
+     175,   200,     0,   111,   112,   115,   242,   235,     0,     0,
+      70,   242,    58,    57,    59,   242,     0,     0,     0,   129,
+     137,   140,   138,   215,   216,   139,   278,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      30,    29,   185,   160,   162,   159,     0,   157,   158,     0,
+     206,   205,   190,     0,    74,    72,    75,    73,     0,     0,
+       0,     0,   141,   192,   242,   128,   274,   163,   161,   167,
+     168,   242,   236,   242,     0,     0,     0,     0,   191,   130,
+       0,     0,     0,     0,   218,     0,   222,     0,   237,   242,
+       0,   217,     0,   221,     0,     0,    56,    33,   219,   223,
+       0,     0,   193
 };
 
 /* 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,   285,
-     397,    41,   152,   221,    73,    60,    69,   333,   334,   370,
-     222,    61,   119,   269,   270,   271,   367,   412,   414,    70,
-     332,   108,   283,   203,   100,    42,    43,   120,   197,   326,
-     264,   324,   163,    44,    45,    46,   137,    87,   277,   375,
-     138,   121,   376,   377,   122,   177,   302,   178,   404,   425,
-     179,   241,   180,   426,   181,   318,   303,   294,   182,   321,
-     357,   183,   236,   184,   292,   185,   254,   186,   419,   435,
-     187,   313,   314,   359,   251,   306,   307,   351,   349,   188,
-     123,   379,   380,   440,   124,   381,   442,   125,   288,   290,
-     382,   126,   142,   127,   128,   144,    74,    47,   132,    48,
-      49,    54,    82,    50,    62,    94,   148,   215,   242,   228,
-     150,   340,   256,   217,   384,   316,    51,    12
+      32,    33,    34,    35,    36,    37,    38,    39,    40,   298,
+     410,    41,   161,   231,    74,    60,    69,   346,   347,   383,
+     232,    61,   126,   279,   280,   281,   380,   425,   427,    70,
+     345,   111,   296,   115,   103,   160,    75,   227,    76,   228,
+      42,    43,   127,   206,   339,   274,   337,   172,    44,    45,
+      46,   144,    90,   287,   388,   145,   128,   389,   390,   129,
+     186,   315,   187,   417,   438,   188,   251,   189,   439,   190,
+     331,   316,   307,   191,   334,   370,   192,   246,   193,   305,
+     194,   264,   195,   432,   448,   196,   326,   327,   372,   261,
+     319,   320,   364,   362,   197,   130,   392,   393,   453,   131,
+     394,   455,   132,   301,   303,   395,   133,   149,   134,   135,
+     151,    77,    47,   139,    48,    49,    54,    85,    50,    62,
+      97,   155,   221,   252,   238,   157,   353,   266,   223,   397,
+     329,    51,    12
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -401
+#define YYPACT_NINF -387
 static const yytype_int16 yypact[] =
 {
-     122,  -401,  -401,    49,  -401,  -401,    56,    61,  -401,    20,
-    -401,  -401,    -5,  -401,     7,    45,    78,  -401,   -47,   -47,
-     -47,   -47,   -47,   -47,    79,    85,   -47,   -47,  -401,    99,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,   127,  -401,  -401,  -401,  -401,  -401,   120,  -401,
-    -401,  -401,  -401,  -401,   135,   133,   134,    25,   129,  -401,
-     138,   137,  -401,   145,   146,   147,   148,   151,  -401,   152,
-     154,  -401,  -401,  -401,   -14,   153,   155,  -401,  -401,   143,
-    -401,  -401,   156,   163,    14,   243,    32,  -401,    31,  -401,
-    -401,  -401,  -401,   157,  -401,    85,  -401,  -401,  -401,  -401,
-    -401,    85,    85,    85,    85,    85,    85,  -401,  -401,  -401,
-    -401,   112,   149,   126,    54,   158,    27,    85,   132,   159,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,    27,
-      85,   160,   135,   168,  -401,  -401,  -401,   161,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,   198,  -401,  -401,    89,   248,
-    -401,   167,   169,    22,   170,  -401,   171,  -401,  -401,   117,
-    -401,  -401,   157,  -401,   172,   173,   174,   208,    -1,   175,
-      53,   176,   165,   142,    -3,   177,   157,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,   215,  -401,   117,
-    -401,   179,  -401,  -401,   157,   180,   181,  -401,   132,   -38,
-    -401,  -401,  -401,  -401,   -10,   184,   185,   209,   156,  -401,
-     182,  -401,  -401,  -401,  -401,  -401,  -401,   183,    85,    85,
-      27,  -401,   192,   194,   216,    85,  -401,  -401,  -401,  -401,
-     277,   278,   279,  -401,  -401,  -401,  -401,   280,  -401,  -401,
-    -401,  -401,   237,   280,    68,   195,   282,  -401,   196,  -401,
-     157,    33,  -401,  -401,  -401,   285,   281,    19,   200,  -401,
-     286,  -401,   289,   286,  -401,   203,    85,  -401,  -401,   202,
-    -401,  -401,   212,    85,    85,  -401,   201,  -401,  -401,  -401,
-    -401,   210,  -401,  -401,   207,   213,   214,  -401,   218,  -401,
-     219,  -401,   220,  -401,   221,  -401,   222,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,   296,  -401,  -401,  -401,   298,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,   226,  -401,  -401,  -401,
-    -401,   166,   301,  -401,   227,  -401,   228,   229,  -401,    46,
-    -401,  -401,   116,  -401,   217,   -12,   234,    51,  -401,   302,
-    -401,   125,    85,  -401,  -401,   270,    37,   165,  -401,   233,
-    -401,   235,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   236,
-    -401,  -401,  -401,    85,  -401,   305,   323,  -401,    85,  -401,
-    -401,  -401,    85,   162,   126,    59,  -401,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,   238,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,  -401,   317,  -401,  -401,    41,  -401,  -401,  -401,
-      65,  -401,  -401,  -401,  -401,   242,   244,   241,   245,  -401,
-     288,    51,  -401,  -401,  -401,  -401,  -401,  -401,    85,  -401,
-      85,   216,   277,   278,   246,  -401,  -401,   247,   249,   250,
-     251,   255,   253,   256,   301,  -401,    85,   125,  -401,   277,
-    -401,   278,    94,  -401,  -401,  -401,  -401,   301,   254,  -401
+     202,  -387,  -387,    67,  -387,  -387,    73,   -73,  -387,    24,
+    -387,  -387,    -4,  -387,    78,    84,   127,  -387,   -18,   -18,
+     -18,   -18,   -18,   -18,    66,    44,   -18,   -18,  -387,   138,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,   144,  -387,  -387,  -387,  -387,  -387,   236,  -387,
+    -387,  -387,  -387,  -387,   154,   140,   141,    10,   133,  -387,
+     145,   136,  -387,   150,   151,   155,   156,   157,  -387,   158,
+     166,  -387,  -387,  -387,  -387,  -387,   131,   -13,   159,   162,
+    -387,  -387,   173,  -387,  -387,   165,   175,    23,   232,     0,
+    -387,   125,  -387,  -387,  -387,  -387,   167,  -387,   116,  -387,
+    -387,  -387,  -387,   161,   116,   116,   116,   116,   116,   116,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,   105,    98,
+      92,    19,   168,    30,   116,   131,   169,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,    30,   116,   160,   154,
+     174,  -387,  -387,  -387,   170,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,   210,  -387,  -387,   134,   258,  -387,   176,   149,
+    -387,   177,   -10,   179,  -387,   180,  -387,  -387,   135,  -387,
+    -387,   167,  -387,   172,   182,   183,   220,    46,   184,   106,
+     185,   146,   123,     7,   186,   167,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,   224,  -387,   135,  -387,
+     187,  -387,  -387,   167,   189,   190,  -387,   131,   -45,  -387,
+       1,   193,   194,   226,   165,  -387,   188,  -387,  -387,  -387,
+    -387,  -387,  -387,   192,   116,  -387,   191,   195,   131,   116,
+      30,  -387,   204,   205,   223,   116,  -387,  -387,  -387,  -387,
+     287,   289,   290,  -387,  -387,  -387,  -387,   291,  -387,  -387,
+    -387,  -387,   248,   291,   128,   206,   293,  -387,   207,  -387,
+     167,    16,  -387,  -387,  -387,   296,   294,    45,   209,  -387,
+     299,  -387,   301,   299,  -387,   215,   116,  -387,  -387,   214,
+    -387,  -387,   225,   116,   116,  -387,   212,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,   217,  -387,  -387,   221,   219,   222,
+    -387,   227,  -387,   228,  -387,   229,  -387,   231,  -387,   237,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,   310,  -387,  -387,
+    -387,   311,  -387,  -387,  -387,  -387,  -387,  -387,  -387,   238,
+    -387,  -387,  -387,  -387,   164,   312,  -387,   239,  -387,   241,
+     243,  -387,    63,  -387,  -387,   137,  -387,   235,   -15,   247,
+      33,  -387,   313,  -387,   124,   116,  -387,  -387,   280,   129,
+     146,  -387,   245,  -387,   246,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,   249,  -387,  -387,  -387,   116,  -387,   315,   325,
+    -387,   116,  -387,  -387,  -387,   116,   142,    92,    71,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,   250,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,   327,  -387,  -387,    40,
+    -387,  -387,  -387,    72,  -387,  -387,  -387,  -387,   251,   254,
+     253,   255,  -387,   302,    33,  -387,  -387,  -387,  -387,  -387,
+    -387,   116,  -387,   116,   223,   287,   289,   256,  -387,  -387,
+     252,   260,   263,   261,   259,   262,   269,   312,  -387,   116,
+     124,  -387,   287,  -387,   289,   119,  -387,  -387,  -387,  -387,
+     312,   264,  -387
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   -76,
-     -80,  -401,   -98,   150,   -83,   205,  -401,  -401,  -361,  -401,
-     -18,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   164,
-    -401,  -401,  -401,   178,  -401,  -401,  -401,   287,  -401,  -401,
-    -401,   106,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,   -49,  -401,   -85,  -401,  -401,  -401,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,  -330,   130,  -401,  -401,
-    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
-       0,  -401,  -401,  -400,  -401,  -401,  -401,  -401,  -401,  -401,
-     291,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -302,  -317,
-     292,  -401,  -401,  -139,   -84,  -113,   -86,  -401,  -401,  -401,
-    -401,  -401,   252,  -401,   186,  -401,  -401,  -401,  -166,   190,
-    -133,  -401,  -401,  -401,  -401,  -401,  -401,    -6
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,   -67,
+     -82,  -387,  -100,   152,   -86,   201,  -387,  -387,  -365,  -387,
+     -11,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,   171,
+    -387,  -387,  -387,  -118,  -387,  -387,   230,  -387,  -387,  -387,
+    -387,  -387,   292,  -387,  -387,  -387,   107,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,   -51,  -387,   -88,
+    -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -304,   132,  -387,  -387,  -387,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -387,  -387,    -3,  -387,  -387,  -361,  -387,
+    -387,  -387,  -387,  -387,  -387,   297,  -387,  -387,  -387,  -387,
+    -387,  -387,  -387,  -386,  -376,   298,  -387,  -387,  -139,   -87,
+    -120,   -89,  -387,  -387,  -387,  -387,  -387,   257,  -387,   178,
+    -387,  -387,  -387,  -176,   196,  -153,  -387,  -387,  -387,  -387,
+    -387,  -387,    -6
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -222
+#define YYTABLE_NINF -230
 static const yytype_int16 yytable[] =
 {
-     145,   139,   143,    52,   199,   155,   244,   415,   158,   109,
-     110,   369,   151,   268,   223,   153,   405,   153,    58,   154,
-     153,   156,   157,   252,   111,    13,    14,    15,   234,   229,
-      16,   145,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,   257,   452,   109,   110,   206,   112,     5,
-     109,   110,   111,    59,   319,   235,   118,   458,   146,   113,
-     111,   261,   297,   400,     7,   111,   297,   253,   298,   438,
-     147,   266,   298,   320,   310,   311,   427,   401,   238,   267,
-     239,   223,   114,   189,   112,   453,   115,    10,    11,   112,
-      68,   190,   240,   297,   112,   113,   116,   402,   198,   298,
-     113,   299,   117,    53,   191,   113,    55,   192,   301,   403,
-     114,   205,   301,   373,   193,   312,   443,   309,   114,    10,
-      11,   280,   115,   114,   374,     1,     2,   115,   194,    79,
-     441,    80,   220,   153,   456,   279,    85,   300,   117,   301,
-      86,   159,   286,   117,    56,    71,    72,   455,   117,   160,
-     213,   195,   196,   329,   166,   363,   167,   214,    88,    89,
-      10,    11,   168,   364,    71,    72,    90,   117,   421,   169,
-     170,   171,   161,   172,   428,   173,   422,    57,   226,    68,
-     145,   406,   429,   164,   174,   227,   162,   335,    91,    92,
-     245,   336,   239,   246,   247,   165,   417,   248,    71,    72,
-     457,   175,   176,    93,   240,   249,   409,    77,   418,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   211,   212,   250,    63,    64,    65,    66,    67,   365,
-     366,    75,    76,   200,    81,    78,   201,   202,    96,    97,
-      98,    99,   131,   353,   354,   355,   356,    95,    83,    84,
-     410,   145,   378,   143,   101,   102,   103,   104,   107,   398,
-     105,   106,   129,   134,   130,   133,   136,   209,   149,   -65,
-     204,   216,   233,   210,    58,   207,   218,   145,   219,   224,
-     225,   258,   335,   230,   231,   232,   237,   243,   255,   416,
-     260,   262,   263,   273,   274,   278,   282,   276,  -221,   284,
-     287,   289,   291,   293,   295,   305,   304,   308,   315,   323,
-     317,   322,   325,   328,   330,   437,   331,   337,   339,   348,
-     338,   350,   341,   342,   358,   383,   368,   399,   411,   371,
-     343,   344,   345,   346,   347,   145,   378,   143,   352,   360,
-     361,   362,   145,   372,   335,   407,   413,   408,   409,   424,
-     423,   430,   432,   431,   434,   439,   433,   444,   446,   447,
-     335,   449,   451,   448,   445,   450,   459,   454,   272,   327,
-     281,   135,   436,   296,   420,     0,   265,   140,   141,   259,
-       0,     0,     0,     0,   208,     0,     0,     0,     0,     0,
-       0,     0,     0,   275
+     152,   146,   150,    52,   208,   254,   164,   209,   382,   167,
+     116,   117,   158,   116,   117,   162,   428,   162,   239,   163,
+     162,   165,   166,   233,   278,   118,    10,    11,   118,    13,
+      14,    15,   267,   262,    16,   152,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    58,   198,   119,
+     271,   212,   119,   116,   117,   418,   199,   323,   324,   454,
+     120,   118,   119,   120,   276,   310,   125,     5,   118,   200,
+     456,   311,   201,   120,   277,   244,   468,   263,   451,   202,
+     332,     7,    59,   121,    10,    11,   121,   122,   469,   275,
+     122,   233,   119,   203,   466,   386,   465,   123,   325,   333,
+     230,    68,   245,   120,    53,   124,   387,   322,   124,   471,
+     292,   314,   207,    72,    73,   440,   204,   205,   124,   121,
+     175,    88,   176,    10,    11,   211,   121,    89,   177,   293,
+     122,   248,   173,   249,   168,   178,   179,   180,   289,   181,
+     162,   182,   169,    71,   174,   250,    72,    73,   124,   299,
+     183,   124,   153,   310,   310,   413,   342,    72,    73,   311,
+     311,   312,    91,    92,   154,   170,    68,   184,   185,   414,
+      93,   255,   376,   249,   256,   257,   430,    55,   258,   171,
+     434,   441,   377,    56,   419,   250,   259,   152,   431,   415,
+     435,   442,    94,    95,   348,   219,   236,   313,   349,   314,
+     314,   416,   220,   237,   260,     1,     2,    96,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+      63,    64,    65,    66,    67,   470,    57,    78,    79,    72,
+      73,   422,   112,   217,   218,   113,   114,    99,   100,   101,
+     102,   366,   367,   368,   369,    82,    80,    83,    71,   225,
+     378,   379,    81,    84,    98,   143,   423,    86,    87,   104,
+     105,   152,   391,   150,   106,   107,   108,   109,   136,   411,
+     110,   137,   138,   215,   140,   141,   159,   213,   156,   -66,
+     210,   222,   216,   240,   243,   224,   229,   152,   234,   235,
+     268,    58,   348,   241,   242,   247,   253,   265,   270,   429,
+     272,   273,   283,   284,   288,   286,   297,   290,   295,  -229,
+     300,   291,   302,   304,   306,   308,   318,   317,   321,   328,
+     335,   450,   336,   330,   338,   341,   343,   351,   354,   344,
+     350,   355,   352,   361,   363,   371,   396,   412,   424,   356,
+     357,   358,   384,   359,   381,   152,   391,   150,   426,   360,
+     365,   373,   152,   374,   348,   375,   385,   420,   421,   437,
+     443,   422,   436,   444,   445,   462,   446,   457,   447,   459,
+     348,   458,   460,   461,   463,   464,   472,   452,   467,   142,
+     340,   282,   294,   449,   433,   309,   147,   148,     0,   226,
+       0,   285,     0,     0,   269,     0,   214
 };
 
 static const yytype_int16 yycheck[] =
 {
-      86,    86,    86,     9,   117,   103,   172,   368,   106,    23,
-      24,    23,    95,    23,   153,   101,   346,   103,    65,   102,
-     106,   104,   105,    26,    38,     5,     6,     7,    29,   162,
-      10,   117,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,   176,   444,    23,    24,   130,    62,     0,
-      23,    24,    38,   100,    35,    56,    74,   457,    27,    73,
-      38,   194,    25,    26,     8,    38,    25,    70,    31,   430,
-      39,   109,    31,    54,    41,    42,   406,    40,    25,   117,
-      27,   220,    96,    29,    62,   446,   100,    99,   100,    62,
-     100,    37,    39,    25,    62,    73,   110,    60,   116,    31,
-      73,    33,   116,   108,    50,    73,    99,    53,    71,    72,
-      96,   129,    71,    62,    60,    82,   433,   250,    96,    99,
-     100,   219,   100,    96,    73,     3,     4,   100,    74,     9,
-     432,    11,   110,   219,   451,   218,   111,    69,   116,    71,
-     115,    29,   225,   116,    99,   113,   114,   449,   116,    37,
-      61,    97,    98,   266,    28,   109,    30,    68,    29,    30,
-      99,   100,    36,   117,   113,   114,    37,   116,   109,    43,
-      44,    45,    60,    47,   109,    49,   117,    99,    61,   100,
-     266,   347,   117,    34,    58,    68,    74,   273,    59,    60,
-      48,   274,    27,    51,    52,    46,    34,    55,   113,   114,
-     106,    75,    76,    74,    39,    63,   112,   108,    46,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    23,    24,    81,    19,    20,    21,    22,    23,   113,
-     114,    26,    27,   101,    99,   108,   104,   105,   101,   102,
-     103,   104,    99,    77,    78,    79,    80,   109,   115,   115,
-     363,   337,   337,   337,   109,   109,   109,   109,   104,   342,
-     109,   109,   109,   100,   109,   109,    23,    99,   111,   111,
-     111,    23,    64,   112,    65,   115,   109,   363,   109,   109,
-     109,    66,   368,   111,   111,   111,   111,   111,   111,   372,
-     111,   111,   111,   109,   109,   112,   104,   115,   104,    83,
-      23,    23,    23,    23,    67,    23,   111,   111,    23,    23,
-      29,   111,    23,   110,   112,   428,   104,   116,   111,    23,
-     110,    23,   109,   109,    23,    23,   109,    57,    23,   335,
-     112,   112,   112,   112,   112,   421,   421,   421,   112,   112,
-     112,   112,   428,   109,   430,   112,    23,   112,   112,    32,
-     112,   109,   111,   109,    66,   431,   111,   111,   109,   109,
-     446,   106,   106,   112,   117,   112,   112,   447,   204,   263,
-     220,    84,   421,   243,   374,    -1,   198,    86,    86,   189,
-      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   207
+      89,    89,    89,     9,   124,   181,   106,   125,    23,   109,
+      23,    24,    98,    23,    24,   104,   381,   106,   171,   105,
+     109,   107,   108,   162,    23,    38,    99,   100,    38,     5,
+       6,     7,   185,    26,    10,   124,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    65,    29,    62,
+     203,   137,    62,    23,    24,   359,    37,    41,    42,   445,
+      73,    38,    62,    73,   109,    25,    77,     0,    38,    50,
+     446,    31,    53,    73,   119,    29,   462,    70,   443,    60,
+      35,     8,   100,    96,    99,   100,    96,   100,   464,   207,
+     100,   230,    62,    74,   459,    62,   457,   110,    82,    54,
+     110,   100,    56,    73,   108,   118,    73,   260,   118,   470,
+     228,    71,   123,   113,   114,   419,    97,    98,   118,    96,
+      28,   111,    30,    99,   100,   136,    96,   117,    36,   229,
+     100,    25,    34,    27,    29,    43,    44,    45,   224,    47,
+     229,    49,    37,    99,    46,    39,   113,   114,   118,   235,
+      58,   118,    27,    25,    25,    26,   276,   113,   114,    31,
+      31,    33,    29,    30,    39,    60,   100,    75,    76,    40,
+      37,    48,   109,    27,    51,    52,    34,    99,    55,    74,
+     109,   109,   119,    99,   360,    39,    63,   276,    46,    60,
+     119,   119,    59,    60,   283,    61,    61,    69,   284,    71,
+      71,    72,    68,    68,    81,     3,     4,    74,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      19,    20,    21,    22,    23,   106,    99,    26,    27,   113,
+     114,   112,   101,    23,    24,   104,   105,   101,   102,   103,
+     104,    77,    78,    79,    80,     9,   108,    11,    99,   100,
+     113,   114,   108,    99,   109,    23,   376,   117,   117,   109,
+     109,   350,   350,   350,   109,   109,   109,   109,   109,   355,
+     104,   109,    99,    99,   109,   100,   115,   117,   111,   111,
+     111,    23,   112,   111,    64,   109,   109,   376,   109,   109,
+      66,    65,   381,   111,   111,   111,   111,   111,   111,   385,
+     111,   111,   109,   109,   112,   117,    83,   116,   104,   104,
+      23,   116,    23,    23,    23,    67,    23,   111,   111,    23,
+     111,   441,    23,    29,    23,   110,   112,   110,   109,   104,
+     118,   109,   111,    23,    23,    23,    23,    57,    23,   112,
+     112,   112,   348,   112,   109,   434,   434,   434,    23,   112,
+     112,   112,   441,   112,   443,   112,   109,   112,   112,    32,
+     109,   112,   112,   109,   111,   106,   111,   111,    66,   109,
+     459,   119,   109,   112,   112,   106,   112,   444,   460,    87,
+     273,   210,   230,   434,   387,   253,    89,    89,    -1,   159,
+      -1,   213,    -1,    -1,   198,    -1,   139
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+static const yytype_uint16 yystos[] =
 {
-       0,     3,     4,   119,   120,     0,   121,     8,   122,   123,
-      99,   100,   255,     5,     6,     7,    10,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   139,   163,   164,   171,   172,   173,   235,   237,   238,
-     241,   254,   255,   108,   239,    99,    99,    99,    65,   100,
-     143,   149,   242,   143,   143,   143,   143,   143,   100,   144,
-     157,   113,   114,   142,   234,   143,   143,   108,   108,     9,
-      11,    99,   240,   115,   115,   111,   115,   175,    29,    30,
-      37,    59,    60,    74,   243,   109,   101,   102,   103,   104,
-     162,   109,   109,   109,   109,   109,   109,   104,   159,    23,
-      24,    38,    62,    73,    96,   100,   110,   116,   148,   150,
-     165,   179,   182,   218,   222,   225,   229,   231,   232,   109,
-     109,    99,   236,   109,   100,   165,    23,   174,   178,   182,
-     218,   228,   230,   232,   233,   234,    27,    39,   244,   111,
-     248,   142,   140,   234,   142,   140,   142,   142,   140,    29,
-      37,    60,    74,   170,    34,    46,    28,    30,    36,    43,
-      44,    45,    47,    49,    58,    75,    76,   183,   185,   188,
-     190,   192,   196,   199,   201,   203,   205,   208,   217,    29,
-      37,    50,    53,    60,    74,    97,    98,   166,   148,   233,
-     101,   104,   105,   161,   111,   148,   142,   115,   240,    99,
-     112,    23,    24,    61,    68,   245,    23,   251,   109,   109,
-     110,   141,   148,   231,   109,   109,    61,    68,   247,   248,
-     111,   111,   111,    64,    29,    56,   200,   111,    25,    27,
-      39,   189,   246,   111,   246,    48,    51,    52,    55,    63,
-      81,   212,    26,    70,   204,   111,   250,   248,    66,   247,
-     111,   248,   111,   111,   168,   161,   109,   117,    23,   151,
-     152,   153,   157,   109,   109,   242,   115,   176,   112,   142,
-     140,   141,   104,   160,    83,   137,   142,    23,   226,    23,
-     227,    23,   202,    23,   195,    67,   195,    25,    31,    33,
-      69,    71,   184,   194,   111,    23,   213,   214,   111,   248,
-      41,    42,    82,   209,   210,    23,   253,    29,   193,    35,
-      54,   197,   111,    23,   169,    23,   167,   169,   110,   233,
-     112,   104,   158,   145,   146,   234,   142,   116,   110,   111,
-     249,   109,   109,   112,   112,   112,   112,   112,    23,   216,
-      23,   215,   112,    77,    78,    79,    80,   198,    23,   211,
-     112,   112,   112,   109,   117,   113,   114,   154,   109,    23,
-     147,   255,   109,    62,    73,   177,   180,   181,   182,   219,
-     220,   223,   228,    23,   252,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,   138,   142,    57,
-      26,    40,    60,    72,   186,   194,   246,   112,   112,   112,
-     233,    23,   155,    23,   156,   146,   142,    34,    46,   206,
-     208,   109,   117,   112,    32,   187,   191,   194,   109,   117,
-     109,   109,   111,   111,    66,   207,   180,   233,   146,   137,
-     221,   226,   224,   227,   111,   117,   109,   109,   112,   106,
-     112,   106,   211,   146,   138,   226,   227,   106,   211,   112
+       0,     3,     4,   121,   122,     0,   123,     8,   124,   125,
+      99,   100,   262,     5,     6,     7,    10,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   141,   170,   171,   178,   179,   180,   242,   244,   245,
+     248,   261,   262,   108,   246,    99,    99,    99,    65,   100,
+     145,   151,   249,   145,   145,   145,   145,   145,   100,   146,
+     159,    99,   113,   114,   144,   166,   168,   241,   145,   145,
+     108,   108,     9,    11,    99,   247,   117,   117,   111,   117,
+     182,    29,    30,    37,    59,    60,    74,   250,   109,   101,
+     102,   103,   104,   164,   109,   109,   109,   109,   109,   109,
+     104,   161,   101,   104,   105,   163,    23,    24,    38,    62,
+      73,    96,   100,   110,   118,   150,   152,   172,   186,   189,
+     225,   229,   232,   236,   238,   239,   109,   109,    99,   243,
+     109,   100,   172,    23,   181,   185,   189,   225,   235,   237,
+     239,   240,   241,    27,    39,   251,   111,   255,   144,   115,
+     165,   142,   241,   144,   142,   144,   144,   142,    29,    37,
+      60,    74,   177,    34,    46,    28,    30,    36,    43,    44,
+      45,    47,    49,    58,    75,    76,   190,   192,   195,   197,
+     199,   203,   206,   208,   210,   212,   215,   224,    29,    37,
+      50,    53,    60,    74,    97,    98,   173,   150,   240,   163,
+     111,   150,   144,   117,   247,    99,   112,    23,    24,    61,
+      68,   252,    23,   258,   109,   100,   166,   167,   169,   109,
+     110,   143,   150,   238,   109,   109,    61,    68,   254,   255,
+     111,   111,   111,    64,    29,    56,   207,   111,    25,    27,
+      39,   196,   253,   111,   253,    48,    51,    52,    55,    63,
+      81,   219,    26,    70,   211,   111,   257,   255,    66,   254,
+     111,   255,   111,   111,   175,   163,   109,   119,    23,   153,
+     154,   155,   159,   109,   109,   249,   117,   183,   112,   144,
+     116,   116,   163,   142,   143,   104,   162,    83,   139,   144,
+      23,   233,    23,   234,    23,   209,    23,   202,    67,   202,
+      25,    31,    33,    69,    71,   191,   201,   111,    23,   220,
+     221,   111,   255,    41,    42,    82,   216,   217,    23,   260,
+      29,   200,    35,    54,   204,   111,    23,   176,    23,   174,
+     176,   110,   240,   112,   104,   160,   147,   148,   241,   144,
+     118,   110,   111,   256,   109,   109,   112,   112,   112,   112,
+     112,    23,   223,    23,   222,   112,    77,    78,    79,    80,
+     205,    23,   218,   112,   112,   112,   109,   119,   113,   114,
+     156,   109,    23,   149,   262,   109,    62,    73,   184,   187,
+     188,   189,   226,   227,   230,   235,    23,   259,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+     140,   144,    57,    26,    40,    60,    72,   193,   201,   253,
+     112,   112,   112,   240,    23,   157,    23,   158,   148,   144,
+      34,    46,   213,   215,   109,   119,   112,    32,   194,   198,
+     201,   109,   119,   109,   109,   111,   111,    66,   214,   187,
+     240,   148,   139,   228,   233,   231,   234,   111,   119,   109,
+     109,   112,   106,   112,   106,   218,   148,   140,   233,   234,
+     106,   218,   112
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2104,7 +2119,7 @@ yyreduce:
         case 3:
 
 /* Line 1455 of yacc.c  */
-#line 270 "program_parse.y"
+#line 272 "program_parse.y"
     {
           if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
@@ -2117,7 +2132,7 @@ yyreduce:
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 278 "program_parse.y"
+#line 280 "program_parse.y"
     {
           if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
@@ -2132,7 +2147,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 294 "program_parse.y"
+#line 296 "program_parse.y"
     {
           int valid = 0;
 
@@ -2157,7 +2172,7 @@ yyreduce:
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 320 "program_parse.y"
+#line 322 "program_parse.y"
     {
           if ((yyvsp[(1) - (2)].inst) != NULL) {
              if (state->inst_tail == NULL) {
@@ -2177,7 +2192,7 @@ yyreduce:
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 338 "program_parse.y"
+#line 340 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumAluInstructions++;
@@ -2187,7 +2202,7 @@ yyreduce:
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 343 "program_parse.y"
+#line 345 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumTexInstructions++;
@@ -2197,7 +2212,7 @@ yyreduce:
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 364 "program_parse.y"
+#line 366 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2206,7 +2221,7 @@ yyreduce:
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 370 "program_parse.y"
+#line 372 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2215,7 +2230,7 @@ yyreduce:
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 376 "program_parse.y"
+#line 378 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2224,7 +2239,7 @@ yyreduce:
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 382 "program_parse.y"
+#line 384 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
        ;}
@@ -2233,7 +2248,7 @@ yyreduce:
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 389 "program_parse.y"
+#line 391 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
        ;}
@@ -2242,7 +2257,7 @@ yyreduce:
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 396 "program_parse.y"
+#line 398 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg));
        ;}
@@ -2251,7 +2266,7 @@ yyreduce:
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 402 "program_parse.y"
+#line 404 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
           if ((yyval.inst) != NULL) {
@@ -2298,7 +2313,7 @@ yyreduce:
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 446 "program_parse.y"
+#line 448 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
@@ -2309,6 +2324,19 @@ yyreduce:
 
 /* Line 1455 of yacc.c  */
 #line 453 "program_parse.y"
+    {
+          (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL);
+          (yyval.inst)->Base.DstReg.CondMask = (yyvsp[(2) - (2)].dst_reg).CondMask;
+          (yyval.inst)->Base.DstReg.CondSwizzle = (yyvsp[(2) - (2)].dst_reg).CondSwizzle;
+          (yyval.inst)->Base.DstReg.CondSrc = (yyvsp[(2) - (2)].dst_reg).CondSrc;
+          state->fragment.UsesKill = 1;
+       ;}
+    break;
+
+  case 33:
+
+/* Line 1455 of yacc.c  */
+#line 463 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (12)].temp_inst), & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg));
           if ((yyval.inst) != NULL) {
@@ -2352,103 +2380,103 @@ yyreduce:
        ;}
     break;
 
-  case 33:
+  case 34:
 
 /* Line 1455 of yacc.c  */
-#line 497 "program_parse.y"
+#line 507 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 34:
+  case 35:
 
 /* Line 1455 of yacc.c  */
-#line 502 "program_parse.y"
+#line 512 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
-  case 35:
+  case 36:
 
 /* Line 1455 of yacc.c  */
-#line 503 "program_parse.y"
+#line 513 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
-  case 36:
+  case 37:
 
 /* Line 1455 of yacc.c  */
-#line 504 "program_parse.y"
+#line 514 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
-  case 37:
+  case 38:
 
 /* Line 1455 of yacc.c  */
-#line 505 "program_parse.y"
+#line 515 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
-  case 38:
+  case 39:
 
 /* Line 1455 of yacc.c  */
-#line 506 "program_parse.y"
+#line 516 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
-  case 39:
+  case 40:
 
 /* Line 1455 of yacc.c  */
-#line 507 "program_parse.y"
+#line 517 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
     break;
 
-  case 40:
+  case 41:
 
 /* Line 1455 of yacc.c  */
-#line 508 "program_parse.y"
+#line 518 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
     break;
 
-  case 41:
+  case 42:
 
 /* Line 1455 of yacc.c  */
-#line 509 "program_parse.y"
+#line 519 "program_parse.y"
     { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
     break;
 
-  case 42:
+  case 43:
 
 /* Line 1455 of yacc.c  */
-#line 510 "program_parse.y"
+#line 520 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
-  case 43:
+  case 44:
 
 /* Line 1455 of yacc.c  */
-#line 511 "program_parse.y"
+#line 521 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
-  case 44:
+  case 45:
 
 /* Line 1455 of yacc.c  */
-#line 512 "program_parse.y"
+#line 522 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
-  case 45:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 513 "program_parse.y"
+#line 523 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
-  case 46:
+  case 47:
 
 /* Line 1455 of yacc.c  */
-#line 517 "program_parse.y"
+#line 527 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
@@ -2460,10 +2488,10 @@ yyreduce:
        ;}
     break;
 
-  case 47:
+  case 48:
 
 /* Line 1455 of yacc.c  */
-#line 529 "program_parse.y"
+#line 539 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
 
@@ -2473,10 +2501,10 @@ yyreduce:
        ;}
     break;
 
-  case 48:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 537 "program_parse.y"
+#line 547 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
 
@@ -2493,10 +2521,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 554 "program_parse.y"
+#line 564 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
 
@@ -2505,10 +2533,10 @@ yyreduce:
        ;}
     break;
 
-  case 50:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 561 "program_parse.y"
+#line 571 "program_parse.y"
     {
           struct asm_symbol temp_sym;
 
@@ -2527,10 +2555,10 @@ yyreduce:
        ;}
     break;
 
-  case 51:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 580 "program_parse.y"
+#line 590 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2543,10 +2571,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 591 "program_parse.y"
+#line 601 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
 
@@ -2565,13 +2593,16 @@ yyreduce:
        ;}
     break;
 
-  case 53:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 611 "program_parse.y"
+#line 621 "program_parse.y"
     {
-          (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
-          (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
+          (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg);
+          (yyval.dst_reg).WriteMask = (yyvsp[(2) - (3)].swiz_mask).mask;
+          (yyval.dst_reg).CondMask = (yyvsp[(3) - (3)].dst_reg).CondMask;
+          (yyval.dst_reg).CondSwizzle = (yyvsp[(3) - (3)].dst_reg).CondSwizzle;
+          (yyval.dst_reg).CondSrc = (yyvsp[(3) - (3)].dst_reg).CondSrc;
 
           if ((yyval.dst_reg).File == PROGRAM_OUTPUT) {
              /* Technically speaking, this should check that it is in
@@ -2580,7 +2611,7 @@ yyreduce:
               */
              if (state->option.PositionInvariant
               && ((yyval.dst_reg).Index == VERT_RESULT_HPOS)) {
-                yyerror(& (yylsp[(1) - (2)]), state, "position-invariant programs cannot "
+                yyerror(& (yylsp[(1) - (3)]), state, "position-invariant programs cannot "
                         "write position");
                 YYERROR;
              }
@@ -2590,10 +2621,10 @@ yyreduce:
        ;}
     break;
 
-  case 54:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 633 "program_parse.y"
+#line 646 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2602,10 +2633,10 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 642 "program_parse.y"
+#line 655 "program_parse.y"
     {
           const unsigned xyzw_valid =
              ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
@@ -2638,20 +2669,20 @@ yyreduce:
        ;}
     break;
 
-  case 56:
+  case 57:
 
 /* Line 1455 of yacc.c  */
-#line 675 "program_parse.y"
+#line 688 "program_parse.y"
     {
           (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
           (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
-  case 57:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 682 "program_parse.y"
+#line 695 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2668,10 +2699,10 @@ yyreduce:
        ;}
     break;
 
-  case 58:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 697 "program_parse.y"
+#line 710 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2721,10 +2752,10 @@ yyreduce:
        ;}
     break;
 
-  case 59:
+  case 60:
 
 /* Line 1455 of yacc.c  */
-#line 747 "program_parse.y"
+#line 760 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2768,10 +2799,10 @@ yyreduce:
        ;}
     break;
 
-  case 60:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 789 "program_parse.y"
+#line 802 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2784,10 +2815,10 @@ yyreduce:
        ;}
     break;
 
-  case 61:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 800 "program_parse.y"
+#line 813 "program_parse.y"
     {
           if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr
               && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) {
@@ -2810,10 +2841,10 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 63:
 
 /* Line 1455 of yacc.c  */
-#line 821 "program_parse.y"
+#line 834 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2823,10 +2854,10 @@ yyreduce:
        ;}
     break;
 
-  case 63:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 831 "program_parse.y"
+#line 844 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2834,10 +2865,10 @@ yyreduce:
        ;}
     break;
 
-  case 64:
+  case 65:
 
 /* Line 1455 of yacc.c  */
-#line 837 "program_parse.y"
+#line 850 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2868,10 +2899,10 @@ yyreduce:
        ;}
     break;
 
-  case 65:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 868 "program_parse.y"
+#line 881 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2888,20 +2919,20 @@ yyreduce:
        ;}
     break;
 
-  case 68:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 887 "program_parse.y"
+#line 900 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 69:
+  case 70:
 
 /* Line 1455 of yacc.c  */
-#line 894 "program_parse.y"
+#line 907 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2913,31 +2944,31 @@ yyreduce:
        ;}
     break;
 
-  case 70:
+  case 71:
 
 /* Line 1455 of yacc.c  */
-#line 905 "program_parse.y"
+#line 918 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 71:
+  case 72:
 
 /* Line 1455 of yacc.c  */
-#line 906 "program_parse.y"
+#line 919 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 72:
+  case 73:
 
 /* Line 1455 of yacc.c  */
-#line 907 "program_parse.y"
+#line 920 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 73:
+  case 74:
 
 /* Line 1455 of yacc.c  */
-#line 911 "program_parse.y"
+#line 924 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2949,10 +2980,10 @@ yyreduce:
        ;}
     break;
 
-  case 74:
+  case 75:
 
 /* Line 1455 of yacc.c  */
-#line 923 "program_parse.y"
+#line 936 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2964,10 +2995,10 @@ yyreduce:
        ;}
     break;
 
-  case 75:
+  case 76:
 
 /* Line 1455 of yacc.c  */
-#line 935 "program_parse.y"
+#line 948 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2985,10 +3016,10 @@ yyreduce:
        ;}
     break;
 
-  case 76:
+  case 77:
 
 /* Line 1455 of yacc.c  */
-#line 953 "program_parse.y"
+#line 966 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2999,10 +3030,10 @@ yyreduce:
        ;}
     break;
 
-  case 77:
+  case 78:
 
 /* Line 1455 of yacc.c  */
-#line 964 "program_parse.y"
+#line 977 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -3014,24 +3045,125 @@ yyreduce:
        ;}
     break;
 
-  case 82:
+  case 83:
 
 /* Line 1455 of yacc.c  */
-#line 980 "program_parse.y"
+#line 993 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 87:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 984 "program_parse.y"
+#line 997 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
+  case 89:
+
+/* Line 1455 of yacc.c  */
+#line 1001 "program_parse.y"
+    {
+          (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
+       ;}
+    break;
+
+  case 90:
+
+/* Line 1455 of yacc.c  */
+#line 1005 "program_parse.y"
+    {
+          (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
+       ;}
+    break;
+
+  case 91:
+
+/* Line 1455 of yacc.c  */
+#line 1009 "program_parse.y"
+    {
+          (yyval.dst_reg).CondMask = COND_TR;
+          (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
+          (yyval.dst_reg).CondSrc = 0;
+       ;}
+    break;
+
+  case 92:
+
+/* Line 1455 of yacc.c  */
+#line 1017 "program_parse.y"
+    {
+          (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
+          (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
+       ;}
+    break;
+
+  case 93:
+
+/* Line 1455 of yacc.c  */
+#line 1024 "program_parse.y"
+    {
+          (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
+          (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
+       ;}
+    break;
+
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 996 "program_parse.y"
+#line 1031 "program_parse.y"
+    {
+          const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
+          if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
+
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+
+          (yyval.dst_reg).CondMask = cond;
+          (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
+          (yyval.dst_reg).CondSrc = 0;
+       ;}
+    break;
+
+  case 95:
+
+/* Line 1455 of yacc.c  */
+#line 1054 "program_parse.y"
+    {
+          const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
+          if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
+
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+
+          (yyval.dst_reg).CondMask = cond;
+          (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
+          (yyval.dst_reg).CondSrc = 0;
+       ;}
+    break;
+
+  case 102:
+
+/* Line 1455 of yacc.c  */
+#line 1085 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -3049,55 +3181,55 @@ yyreduce:
        ;}
     break;
 
-  case 95:
+  case 103:
 
 /* Line 1455 of yacc.c  */
-#line 1014 "program_parse.y"
+#line 1103 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 96:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 1018 "program_parse.y"
+#line 1107 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 97:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 1024 "program_parse.y"
+#line 1113 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
     break;
 
-  case 98:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 1028 "program_parse.y"
+#line 1117 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
     break;
 
-  case 99:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 1032 "program_parse.y"
+#line 1121 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
     break;
 
-  case 100:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 1036 "program_parse.y"
+#line 1125 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -3108,10 +3240,10 @@ yyreduce:
        ;}
     break;
 
-  case 101:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 1045 "program_parse.y"
+#line 1134 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -3122,38 +3254,38 @@ yyreduce:
        ;}
     break;
 
-  case 102:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 1054 "program_parse.y"
+#line 1143 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 103:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 1058 "program_parse.y"
+#line 1147 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 104:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 1063 "program_parse.y"
+#line 1152 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 105:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 1069 "program_parse.y"
+#line 1158 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -3164,46 +3296,46 @@ yyreduce:
        ;}
     break;
 
-  case 109:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1083 "program_parse.y"
+#line 1172 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
     break;
 
-  case 110:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1087 "program_parse.y"
+#line 1176 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 111:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1091 "program_parse.y"
+#line 1180 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
     break;
 
-  case 112:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1095 "program_parse.y"
+#line 1184 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 115:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1103 "program_parse.y"
+#line 1192 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -3219,10 +3351,10 @@ yyreduce:
        ;}
     break;
 
-  case 116:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1119 "program_parse.y"
+#line 1208 "program_parse.y"
     {
           if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {
              yyerror(& (yylsp[(4) - (6)]), state, 
@@ -3244,19 +3376,19 @@ yyreduce:
        ;}
     break;
 
-  case 117:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "program_parse.y"
+#line 1230 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 118:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1145 "program_parse.y"
+#line 1234 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size");
@@ -3267,38 +3399,38 @@ yyreduce:
        ;}
     break;
 
-  case 119:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1156 "program_parse.y"
+#line 1245 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
     break;
 
-  case 120:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1162 "program_parse.y"
+#line 1251 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
     break;
 
-  case 122:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1169 "program_parse.y"
+#line 1258 "program_parse.y"
     {
           (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;
           (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym);
        ;}
     break;
 
-  case 123:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1176 "program_parse.y"
+#line 1265 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3306,10 +3438,10 @@ yyreduce:
        ;}
     break;
 
-  case 124:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1182 "program_parse.y"
+#line 1271 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3317,10 +3449,10 @@ yyreduce:
        ;}
     break;
 
-  case 125:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1188 "program_parse.y"
+#line 1277 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3328,10 +3460,10 @@ yyreduce:
        ;}
     break;
 
-  case 126:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1196 "program_parse.y"
+#line 1285 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3339,10 +3471,10 @@ yyreduce:
        ;}
     break;
 
-  case 127:
+  case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1202 "program_parse.y"
+#line 1291 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3350,10 +3482,10 @@ yyreduce:
        ;}
     break;
 
-  case 128:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1208 "program_parse.y"
+#line 1297 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3361,10 +3493,10 @@ yyreduce:
        ;}
     break;
 
-  case 129:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1216 "program_parse.y"
+#line 1305 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3372,10 +3504,10 @@ yyreduce:
        ;}
     break;
 
-  case 130:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1222 "program_parse.y"
+#line 1311 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3383,10 +3515,10 @@ yyreduce:
        ;}
     break;
 
-  case 131:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1228 "program_parse.y"
+#line 1317 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3394,101 +3526,101 @@ yyreduce:
        ;}
     break;
 
-  case 132:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1235 "program_parse.y"
+#line 1324 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 133:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1236 "program_parse.y"
+#line 1325 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 134:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1239 "program_parse.y"
+#line 1328 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 135:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1240 "program_parse.y"
+#line 1329 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 136:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1241 "program_parse.y"
+#line 1330 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 137:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1242 "program_parse.y"
+#line 1331 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 138:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1243 "program_parse.y"
+#line 1332 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 139:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1244 "program_parse.y"
+#line 1333 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 140:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1245 "program_parse.y"
+#line 1334 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 141:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1246 "program_parse.y"
+#line 1335 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 142:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1247 "program_parse.y"
+#line 1336 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 143:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1248 "program_parse.y"
+#line 1337 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 144:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1249 "program_parse.y"
+#line 1338 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 145:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1253 "program_parse.y"
+#line 1342 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3497,37 +3629,37 @@ yyreduce:
        ;}
     break;
 
-  case 146:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1262 "program_parse.y"
+#line 1351 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 147:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1266 "program_parse.y"
+#line 1355 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 148:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1270 "program_parse.y"
+#line 1359 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 149:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1276 "program_parse.y"
+#line 1365 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3536,28 +3668,28 @@ yyreduce:
        ;}
     break;
 
-  case 150:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1285 "program_parse.y"
+#line 1374 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 151:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1289 "program_parse.y"
+#line 1378 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 152:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1293 "program_parse.y"
+#line 1382 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3568,57 +3700,57 @@ yyreduce:
        ;}
     break;
 
-  case 153:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1302 "program_parse.y"
+#line 1391 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 154:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1306 "program_parse.y"
+#line 1395 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 155:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1312 "program_parse.y"
+#line 1401 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 156:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1318 "program_parse.y"
+#line 1407 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 157:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1325 "program_parse.y"
+#line 1414 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 158:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1330 "program_parse.y"
+#line 1419 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3626,10 +3758,10 @@ yyreduce:
        ;}
     break;
 
-  case 159:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1338 "program_parse.y"
+#line 1427 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3639,10 +3771,10 @@ yyreduce:
        ;}
     break;
 
-  case 161:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1350 "program_parse.y"
+#line 1439 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3650,46 +3782,46 @@ yyreduce:
        ;}
     break;
 
-  case 162:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1358 "program_parse.y"
+#line 1447 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 163:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1364 "program_parse.y"
+#line 1453 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 164:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1368 "program_parse.y"
+#line 1457 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 165:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1372 "program_parse.y"
+#line 1461 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 166:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1378 "program_parse.y"
+#line 1467 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3700,10 +3832,10 @@ yyreduce:
        ;}
     break;
 
-  case 167:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1389 "program_parse.y"
+#line 1478 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3712,92 +3844,92 @@ yyreduce:
        ;}
     break;
 
-  case 168:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1398 "program_parse.y"
+#line 1487 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 169:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1402 "program_parse.y"
+#line 1491 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 170:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1407 "program_parse.y"
+#line 1496 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 171:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1411 "program_parse.y"
+#line 1500 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 172:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1415 "program_parse.y"
+#line 1504 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 173:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1419 "program_parse.y"
+#line 1508 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 174:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1425 "program_parse.y"
+#line 1514 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 175:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1432 "program_parse.y"
+#line 1521 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 176:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1436 "program_parse.y"
+#line 1525 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 177:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1442 "program_parse.y"
+#line 1531 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3805,10 +3937,10 @@ yyreduce:
        ;}
     break;
 
-  case 178:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1450 "program_parse.y"
+#line 1539 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3819,38 +3951,38 @@ yyreduce:
        ;}
     break;
 
-  case 179:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1461 "program_parse.y"
+#line 1550 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 180:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1468 "program_parse.y"
+#line 1557 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 181:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1472 "program_parse.y"
+#line 1561 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 182:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1478 "program_parse.y"
+#line 1567 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3860,10 +3992,10 @@ yyreduce:
        ;}
     break;
 
-  case 183:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1488 "program_parse.y"
+#line 1577 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3873,20 +4005,20 @@ yyreduce:
        ;}
     break;
 
-  case 184:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1498 "program_parse.y"
+#line 1587 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 185:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1503 "program_parse.y"
+#line 1592 "program_parse.y"
     {
           /* It seems logical that the matrix row range specifier would have
            * to specify a range or more than one row (i.e., $5 > $3).
@@ -3904,10 +4036,10 @@ yyreduce:
        ;}
     break;
 
-  case 186:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1521 "program_parse.y"
+#line 1610 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3915,55 +4047,55 @@ yyreduce:
        ;}
     break;
 
-  case 187:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1529 "program_parse.y"
+#line 1618 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 188:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1533 "program_parse.y"
+#line 1622 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 189:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1539 "program_parse.y"
+#line 1628 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 190:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1543 "program_parse.y"
+#line 1632 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 191:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1547 "program_parse.y"
+#line 1636 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 192:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1553 "program_parse.y"
+#line 1642 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3974,88 +4106,88 @@ yyreduce:
        ;}
     break;
 
-  case 193:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1564 "program_parse.y"
+#line 1653 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 194:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1569 "program_parse.y"
+#line 1658 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 195:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1574 "program_parse.y"
+#line 1663 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 196:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1579 "program_parse.y"
+#line 1668 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 197:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1584 "program_parse.y"
+#line 1673 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 198:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1589 "program_parse.y"
+#line 1678 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 199:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 1596 "program_parse.y"
+#line 1685 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 200:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 1600 "program_parse.y"
+#line 1689 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 201:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1605 "program_parse.y"
+#line 1694 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -4069,10 +4201,10 @@ yyreduce:
        ;}
     break;
 
-  case 202:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "program_parse.y"
+#line 1707 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -4081,10 +4213,10 @@ yyreduce:
        ;}
     break;
 
-  case 203:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1626 "program_parse.y"
+#line 1715 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -4095,20 +4227,20 @@ yyreduce:
        ;}
     break;
 
-  case 204:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1637 "program_parse.y"
+#line 1726 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_DEPTH_RANGE;
        ;}
     break;
 
-  case 209:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1649 "program_parse.y"
+#line 1738 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4118,30 +4250,30 @@ yyreduce:
        ;}
     break;
 
-  case 210:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1659 "program_parse.y"
+#line 1748 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 211:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1664 "program_parse.y"
+#line 1753 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 212:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1671 "program_parse.y"
+#line 1760 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4151,10 +4283,10 @@ yyreduce:
        ;}
     break;
 
-  case 213:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1681 "program_parse.y"
+#line 1770 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4164,30 +4296,30 @@ yyreduce:
        ;}
     break;
 
-  case 214:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1690 "program_parse.y"
+#line 1779 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 215:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1695 "program_parse.y"
+#line 1784 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 216:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1702 "program_parse.y"
+#line 1791 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4197,10 +4329,10 @@ yyreduce:
        ;}
     break;
 
-  case 217:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1712 "program_parse.y"
+#line 1801 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -4210,10 +4342,10 @@ yyreduce:
        ;}
     break;
 
-  case 218:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1722 "program_parse.y"
+#line 1811 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -4223,10 +4355,10 @@ yyreduce:
        ;}
     break;
 
-  case 223:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1737 "program_parse.y"
+#line 1826 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4236,10 +4368,10 @@ yyreduce:
        ;}
     break;
 
-  case 224:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1747 "program_parse.y"
+#line 1836 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4249,10 +4381,10 @@ yyreduce:
        ;}
     break;
 
-  case 225:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1755 "program_parse.y"
+#line 1844 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
@@ -4262,10 +4394,10 @@ yyreduce:
        ;}
     break;
 
-  case 226:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1765 "program_parse.y"
+#line 1854 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -4275,10 +4407,10 @@ yyreduce:
        ;}
     break;
 
-  case 227:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1773 "program_parse.y"
+#line 1862 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4288,10 +4420,10 @@ yyreduce:
        ;}
     break;
 
-  case 228:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1782 "program_parse.y"
+#line 1871 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4301,10 +4433,10 @@ yyreduce:
        ;}
     break;
 
-  case 229:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1791 "program_parse.y"
+#line 1880 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4314,56 +4446,56 @@ yyreduce:
        ;}
     break;
 
-  case 230:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1801 "program_parse.y"
+#line 1890 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 231:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1805 "program_parse.y"
+#line 1894 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 232:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1810 "program_parse.y"
+#line 1899 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 233:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1811 "program_parse.y"
+#line 1900 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 234:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1812 "program_parse.y"
+#line 1901 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 235:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1815 "program_parse.y"
+#line 1904 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 237:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1819 "program_parse.y"
+#line 1908 "program_parse.y"
     {
           /* NV_fragment_program_option defines the size qualifiers in a
            * fairly broken way.  "SHORT" or "LONG" can optionally be used
@@ -4399,25 +4531,25 @@ yyreduce:
        ;}
     break;
 
-  case 238:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1853 "program_parse.y"
+#line 1942 "program_parse.y"
     {
        ;}
     break;
 
-  case 239:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1857 "program_parse.y"
+#line 1946 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 241:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1861 "program_parse.y"
+#line 1950 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4425,10 +4557,10 @@ yyreduce:
        ;}
     break;
 
-  case 242:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1867 "program_parse.y"
+#line 1956 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4436,10 +4568,10 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1875 "program_parse.y"
+#line 1964 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
@@ -4452,10 +4584,10 @@ yyreduce:
        ;}
     break;
 
-  case 244:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1888 "program_parse.y"
+#line 1977 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4466,10 +4598,10 @@ yyreduce:
        ;}
     break;
 
-  case 245:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1897 "program_parse.y"
+#line 1986 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4480,19 +4612,19 @@ yyreduce:
        ;}
     break;
 
-  case 246:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1906 "program_parse.y"
+#line 1995 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 247:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1910 "program_parse.y"
+#line 1999 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4503,10 +4635,10 @@ yyreduce:
        ;}
     break;
 
-  case 248:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1919 "program_parse.y"
+#line 2008 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4517,10 +4649,10 @@ yyreduce:
        ;}
     break;
 
-  case 249:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1928 "program_parse.y"
+#line 2017 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4531,19 +4663,19 @@ yyreduce:
        ;}
     break;
 
-  case 250:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1939 "program_parse.y"
+#line 2028 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 251:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1945 "program_parse.y"
+#line 2034 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4551,10 +4683,10 @@ yyreduce:
        ;}
     break;
 
-  case 252:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1951 "program_parse.y"
+#line 2040 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4565,10 +4697,10 @@ yyreduce:
        ;}
     break;
 
-  case 253:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1960 "program_parse.y"
+#line 2049 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4579,19 +4711,19 @@ yyreduce:
        ;}
     break;
 
-  case 254:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1971 "program_parse.y"
+#line 2060 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 255:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1975 "program_parse.y"
+#line 2064 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4602,10 +4734,10 @@ yyreduce:
        ;}
     break;
 
-  case 256:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1984 "program_parse.y"
+#line 2073 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4616,94 +4748,94 @@ yyreduce:
        ;}
     break;
 
-  case 257:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1994 "program_parse.y"
+#line 2083 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 258:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 1995 "program_parse.y"
+#line 2084 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 259:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1996 "program_parse.y"
+#line 2085 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 260:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 1999 "program_parse.y"
+#line 2088 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 261:
+  case 269:
 
 /* Line 1455 of yacc.c  */
-#line 2000 "program_parse.y"
+#line 2089 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 262:
+  case 270:
 
 /* Line 1455 of yacc.c  */
-#line 2001 "program_parse.y"
+#line 2090 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 263:
+  case 271:
 
 /* Line 1455 of yacc.c  */
-#line 2004 "program_parse.y"
+#line 2093 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 264:
+  case 272:
 
 /* Line 1455 of yacc.c  */
-#line 2005 "program_parse.y"
+#line 2094 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 265:
+  case 273:
 
 /* Line 1455 of yacc.c  */
-#line 2008 "program_parse.y"
+#line 2097 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 266:
+  case 274:
 
 /* Line 1455 of yacc.c  */
-#line 2009 "program_parse.y"
+#line 2098 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 267:
+  case 275:
 
 /* Line 1455 of yacc.c  */
-#line 2012 "program_parse.y"
+#line 2101 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 268:
+  case 276:
 
 /* Line 1455 of yacc.c  */
-#line 2013 "program_parse.y"
+#line 2102 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 269:
+  case 277:
 
 /* Line 1455 of yacc.c  */
-#line 2017 "program_parse.y"
+#line 2106 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4714,10 +4846,10 @@ yyreduce:
        ;}
     break;
 
-  case 270:
+  case 278:
 
 /* Line 1455 of yacc.c  */
-#line 2028 "program_parse.y"
+#line 2117 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4728,10 +4860,10 @@ yyreduce:
        ;}
     break;
 
-  case 271:
+  case 279:
 
 /* Line 1455 of yacc.c  */
-#line 2039 "program_parse.y"
+#line 2128 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4742,10 +4874,10 @@ yyreduce:
        ;}
     break;
 
-  case 272:
+  case 280:
 
 /* Line 1455 of yacc.c  */
-#line 2050 "program_parse.y"
+#line 2139 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4769,7 +4901,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4773 "program_parse.tab.c"
+#line 4905 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4988,7 +5120,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 2074 "program_parse.y"
+#line 2163 "program_parse.y"
 
 
 void
@@ -5007,8 +5139,15 @@ asm_instruction_set_operands(struct asm_instruction *inst,
       inst->Base.DstReg = *dst;
    }
 
-   inst->Base.SrcReg[0] = src0->Base;
-   inst->SrcReg[0] = *src0;
+   /* The only instruction that doesn't have any source registers is the
+    * condition-code based KIL instruction added by NV_fragment_program_option.
+    */
+   if (src0 != NULL) {
+      inst->Base.SrcReg[0] = src0->Base;
+      inst->SrcReg[0] = *src0;
+   } else {
+      init_src_reg(& inst->SrcReg[0]);
+   }
 
    if (src1 != NULL) {
       inst->Base.SrcReg[1] = src1->Base;
index d6bac07081cf1c66e8f42c32082dcb2d5f19a677..3021ae83f369acf69f3b9884538fe37d4c1e2e39 100644 (file)
@@ -202,6 +202,8 @@ static struct asm_instruction *asm_instruction_copy_ctor(
 %type <sym> addrReg
 %type <swiz_mask> addrComponent addrWriteMask
 
+%type <dst_reg> ccMaskRule ccTest ccMaskRule2 ccTest2 optionalCcMask
+
 %type <result> resultBinding resultColBinding
 %type <integer> optFaceType optColorType
 %type <integer> optResultFaceType optResultColorType
@@ -447,6 +449,14 @@ KIL_instruction: KIL swizzleSrcReg
           $$ = asm_instruction_ctor(OPCODE_KIL, NULL, & $2, NULL, NULL);
           state->fragment.UsesKill = 1;
        }
+       | KIL ccTest
+       {
+          $$ = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL);
+          $$->Base.DstReg.CondMask = $2.CondMask;
+          $$->Base.DstReg.CondSwizzle = $2.CondSwizzle;
+          $$->Base.DstReg.CondSrc = $2.CondSrc;
+          state->fragment.UsesKill = 1;
+       }
        ;
 
 TXD_instruction: TXD_OP maskedDstReg ',' swizzleSrcReg ',' swizzleSrcReg ',' swizzleSrcReg ',' texImageUnit ',' texTarget
@@ -607,10 +617,13 @@ swizzleSrcReg: optionalSign srcReg swizzleSuffix
 
        ;
 
-maskedDstReg: dstReg optionalMask
+maskedDstReg: dstReg optionalMask optionalCcMask
        {
           $$ = $1;
           $$.WriteMask = $2.mask;
+          $$.CondMask = $3.CondMask;
+          $$.CondSwizzle = $3.CondSwizzle;
+          $$.CondSrc = $3.CondSrc;
 
           if ($$.File == PROGRAM_OUTPUT) {
              /* Technically speaking, this should check that it is in
@@ -984,6 +997,82 @@ optionalMask: MASK4 | MASK3 | MASK2 | MASK1
        |              { $$.swizzle = SWIZZLE_NOOP; $$.mask = WRITEMASK_XYZW; }
        ;
 
+optionalCcMask: '(' ccTest ')'
+       {
+          $$ = $2;
+       }
+       | '(' ccTest2 ')'
+       {
+          $$ = $2;
+       }
+       |
+       {
+          $$.CondMask = COND_TR;
+          $$.CondSwizzle = SWIZZLE_NOOP;
+          $$.CondSrc = 0;
+       }
+       ;
+
+ccTest: ccMaskRule swizzleSuffix
+       {
+          $$ = $1;
+          $$.CondSwizzle = $2.swizzle;
+       }
+       ;
+
+ccTest2: ccMaskRule2 swizzleSuffix
+       {
+          $$ = $1;
+          $$.CondSwizzle = $2.swizzle;
+       }
+       ;
+
+ccMaskRule: IDENTIFIER
+       {
+          const int cond = _mesa_parse_cc($1);
+          if ((cond == 0) || ($1[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", $1);
+
+             yyerror(& @1, state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+
+          $$.CondMask = cond;
+          $$.CondSwizzle = SWIZZLE_NOOP;
+          $$.CondSrc = 0;
+       }
+       ;
+
+ccMaskRule2: USED_IDENTIFIER
+       {
+          const int cond = _mesa_parse_cc($1);
+          if ((cond == 0) || ($1[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", $1);
+
+             yyerror(& @1, state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+
+             YYERROR;
+          }
+
+          $$.CondMask = cond;
+          $$.CondSwizzle = SWIZZLE_NOOP;
+          $$.CondSrc = 0;
+       }
+       ;
+
 namingStatement: ATTRIB_statement
        | PARAM_statement
        | TEMP_statement
@@ -2089,8 +2178,15 @@ asm_instruction_set_operands(struct asm_instruction *inst,
       inst->Base.DstReg = *dst;
    }
 
-   inst->Base.SrcReg[0] = src0->Base;
-   inst->SrcReg[0] = *src0;
+   /* The only instruction that doesn't have any source registers is the
+    * condition-code based KIL instruction added by NV_fragment_program_option.
+    */
+   if (src0 != NULL) {
+      inst->Base.SrcReg[0] = src0->Base;
+      inst->SrcReg[0] = *src0;
+   } else {
+      init_src_reg(& inst->SrcReg[0]);
+   }
 
    if (src1 != NULL) {
       inst->Base.SrcReg[1] = src1->Base;
index cb7b7a5fb270d33ebbf288767f937c24d0e43d46..0656c5eaa8e2122fb0ee7ceeb672979c97a5e0d3 100644 (file)
@@ -94,6 +94,60 @@ _mesa_parse_instruction_suffix(const struct asm_parser_state *state,
 }
 
 
+int
+_mesa_parse_cc(const char *s)
+{
+   int cond = 0;
+
+   switch (s[0]) {
+   case 'E':
+      if (s[1] == 'Q') {
+        cond = COND_EQ;
+      }
+      break;
+
+   case 'F':
+      if (s[1] == 'L') {
+        cond = COND_FL;
+      }
+      break;
+
+   case 'G':
+      if (s[1] == 'E') {
+        cond = COND_GE;
+      } else if (s[1] == 'T') {
+        cond = COND_GT;
+      }
+      break;
+
+   case 'L':
+      if (s[1] == 'E') {
+        cond = COND_LE;
+      } else if (s[1] == 'T') {
+        cond = COND_LT;
+      }
+      break;
+
+   case 'N':
+      if (s[1] == 'E') {
+        cond = COND_NE;
+      }
+      break;
+
+   case 'T':
+      if (s[1] == 'R') {
+        cond = COND_TR;
+      }
+      break;
+
+   default:
+      break;
+   }
+
+   return ((cond == 0) || (s[2] != '\0')) ? 0 : cond;
+}
+
+
 int
 _mesa_ARBvp_parse_option(struct asm_parser_state *state, const char *option)
 {
index 497891f53d82c92814182a5d0e1116b68b818889..bce6041381f985347d3d9532d67e755ffb06ecb0 100644 (file)
@@ -278,4 +278,17 @@ extern int _mesa_ARBfp_parse_option(struct asm_parser_state *state,
 extern int _mesa_parse_instruction_suffix(const struct asm_parser_state *state,
     const char *suffix, struct prog_instruction *inst);
 
+/**
+ * Parses a condition code name
+ *
+ * The condition code names (e.g., \c LT, \c GT, \c NE) were added to assembly
+ * shaders with the \c GL_NV_fragment_program_option extension.  This function
+ * converts a string representation into one of the \c COND_ macros.
+ *
+ * \return
+ * One of the \c COND_ macros defined in prog_instruction.h on success or zero
+ * on failure.
+ */
+extern int _mesa_parse_cc(const char *s);
+
 /*@}*/