NV fp parser: Parse TXD instruction
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 1 Sep 2009 21:16:03 +0000 (14:16 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 1 Sep 2009 21:16:03 +0000 (14:16 -0700)
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.y

index 4108374652e052bcc3ece416cfd206b59007bd99..06aefd073fdc3eb2f65e98fcf579250e9dae8a38 100644 (file)
@@ -588,16 +588,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   340
+#define YYLAST   349
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  116
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  134
+#define YYNNTS  135
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  264
+#define YYNRULES  266
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  434
+#define YYNSTATES  447
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -655,31 +655,31 @@ 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,    57,    62,    67,    74,    81,    90,
-      99,   102,   105,   107,   109,   111,   113,   115,   117,   119,
-     121,   123,   125,   127,   129,   136,   140,   144,   147,   150,
-     158,   161,   163,   165,   167,   169,   174,   176,   178,   180,
-     182,   184,   186,   188,   192,   193,   196,   199,   201,   203,
-     205,   207,   209,   211,   213,   215,   217,   218,   220,   222,
-     224,   226,   227,   229,   231,   233,   235,   237,   239,   244,
-     247,   250,   252,   255,   257,   260,   262,   265,   270,   275,
-     277,   278,   282,   284,   286,   289,   291,   294,   296,   298,
-     302,   309,   310,   312,   315,   320,   322,   326,   328,   330,
-     332,   334,   336,   338,   340,   342,   344,   346,   349,   352,
-     355,   358,   361,   364,   367,   370,   373,   376,   379,   382,
-     386,   388,   390,   392,   398,   400,   402,   404,   407,   409,
-     411,   414,   416,   419,   426,   428,   432,   434,   436,   438,
-     440,   442,   447,   449,   451,   453,   455,   457,   459,   462,
-     464,   466,   472,   474,   477,   479,   481,   487,   490,   491,
-     498,   502,   503,   505,   507,   509,   511,   513,   516,   518,
-     520,   523,   528,   533,   534,   536,   538,   540,   542,   545,
-     547,   549,   551,   553,   559,   561,   565,   571,   577,   579,
-     583,   589,   591,   593,   595,   597,   599,   601,   603,   605,
-     607,   611,   617,   625,   635,   638,   641,   643,   645,   646,
-     647,   651,   652,   656,   660,   662,   667,   670,   673,   676,
-     679,   683,   686,   690,   691,   693,   695,   696,   698,   700,
-     701,   703,   705,   706,   708,   710,   711,   715,   716,   720,
-     721,   725,   727,   729,   731
+      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,   155,   159,
+     162,   165,   173,   176,   178,   180,   182,   184,   189,   191,
+     193,   195,   197,   199,   201,   203,   207,   208,   211,   214,
+     216,   218,   220,   222,   224,   226,   228,   230,   232,   233,
+     235,   237,   239,   241,   242,   244,   246,   248,   250,   252,
+     254,   259,   262,   265,   267,   270,   272,   275,   277,   280,
+     285,   290,   292,   293,   297,   299,   301,   304,   306,   309,
+     311,   313,   317,   324,   325,   327,   330,   335,   337,   341,
+     343,   345,   347,   349,   351,   353,   355,   357,   359,   361,
+     364,   367,   370,   373,   376,   379,   382,   385,   388,   391,
+     394,   397,   401,   403,   405,   407,   413,   415,   417,   419,
+     422,   424,   426,   429,   431,   434,   441,   443,   447,   449,
+     451,   453,   455,   457,   462,   464,   466,   468,   470,   472,
+     474,   477,   479,   481,   487,   489,   492,   494,   496,   502,
+     505,   506,   513,   517,   518,   520,   522,   524,   526,   528,
+     531,   533,   535,   538,   543,   548,   549,   551,   553,   555,
+     557,   560,   562,   564,   566,   568,   574,   576,   580,   586,
+     592,   594,   598,   604,   606,   608,   610,   612,   614,   616,
+     618,   620,   622,   626,   632,   640,   650,   653,   656,   658,
+     660,   661,   662,   666,   667,   671,   675,   677,   682,   685,
+     688,   691,   694,   698,   701,   705,   706,   708,   710,   711,
+     713,   715,   716,   718,   720,   721,   723,   725,   726,   730,
+     731,   735,   736,   740,   742,   744,   746
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -687,78 +687,80 @@ static const yytype_int16 yyrhs[] =
 {
      117,     0,    -1,   118,   119,   121,    12,    -1,     3,    -1,
        4,    -1,   119,   120,    -1,    -1,     8,    99,   107,    -1,
-     121,   122,    -1,    -1,   123,   107,    -1,   159,   107,    -1,
+     121,   122,    -1,    -1,   123,   107,    -1,   160,   107,    -1,
      124,    -1,   125,    -1,   126,    -1,   127,    -1,   128,    -1,
-     129,    -1,   130,    -1,   131,    -1,   136,    -1,   132,    -1,
-     133,    -1,    19,   140,   108,   137,    -1,    18,   139,   108,
-     138,    -1,    16,   139,   108,   137,    -1,    14,   139,   108,
-     137,   108,   137,    -1,    13,   139,   108,   138,   108,   138,
-      -1,    17,   139,   108,   138,   108,   138,   108,   138,    -1,
-      15,   139,   108,   138,   108,   134,   108,   135,    -1,    20,
-     138,    -1,    83,   244,    -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,
-     139,   108,   144,   108,   141,    -1,   230,   144,   156,    -1,
-     230,   144,   157,    -1,   145,   158,    -1,   153,   155,    -1,
-     142,   108,   142,   108,   142,   108,   142,    -1,   230,   143,
-      -1,    23,    -1,    99,    -1,    99,    -1,   161,    -1,   146,
-     109,   147,   110,    -1,   175,    -1,   237,    -1,    99,    -1,
-      99,    -1,   148,    -1,   149,    -1,    23,    -1,   153,   154,
-     150,    -1,    -1,   111,   151,    -1,   112,   152,    -1,    23,
-      -1,    23,    -1,    99,    -1,   103,    -1,   103,    -1,   103,
-      -1,   103,    -1,   100,    -1,   104,    -1,    -1,   100,    -1,
-     101,    -1,   102,    -1,   103,    -1,    -1,   160,    -1,   167,
-      -1,   231,    -1,   233,    -1,   236,    -1,   249,    -1,     7,
-      99,   113,   161,    -1,    96,   162,    -1,    38,   166,    -1,
-      60,    -1,    98,   164,    -1,    53,    -1,    29,   242,    -1,
-      37,    -1,    74,   243,    -1,    50,   109,   165,   110,    -1,
-      97,   109,   163,   110,    -1,    23,    -1,    -1,   109,   165,
-     110,    -1,    23,    -1,    60,    -1,    29,   242,    -1,    37,
-      -1,    74,   243,    -1,   168,    -1,   169,    -1,    10,    99,
-     171,    -1,    10,    99,   109,   170,   110,   172,    -1,    -1,
-      23,    -1,   113,   174,    -1,   113,   114,   173,   115,    -1,
-     176,    -1,   173,   108,   176,    -1,   178,    -1,   214,    -1,
-     224,    -1,   178,    -1,   214,    -1,   225,    -1,   177,    -1,
-     215,    -1,   224,    -1,   178,    -1,    73,   202,    -1,    73,
-     179,    -1,    73,   181,    -1,    73,   184,    -1,    73,   186,
-      -1,    73,   192,    -1,    73,   188,    -1,    73,   195,    -1,
-      73,   197,    -1,    73,   199,    -1,    73,   201,    -1,    73,
-     213,    -1,    47,   241,   180,    -1,   190,    -1,    33,    -1,
-      69,    -1,    43,   109,   191,   110,   182,    -1,   190,    -1,
-      60,    -1,    26,    -1,    72,   183,    -1,    40,    -1,    32,
-      -1,    44,   185,    -1,    25,    -1,   241,    67,    -1,    45,
-     109,   191,   110,   241,   187,    -1,   190,    -1,    75,   245,
-     189,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
-      23,    -1,    76,   243,   193,   194,    -1,    35,    -1,    54,
-      -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
-     196,    -1,    29,    -1,    56,    -1,    28,   109,   198,   110,
-      57,    -1,    23,    -1,    58,   200,    -1,    70,    -1,    26,
-      -1,   204,    66,   109,   207,   110,    -1,   204,   203,    -1,
-      -1,    66,   109,   207,   105,   207,   110,    -1,    49,   208,
-     205,    -1,    -1,   206,    -1,    41,    -1,    82,    -1,    42,
-      -1,    23,    -1,    51,   209,    -1,    63,    -1,    52,    -1,
-      81,   243,    -1,    55,   109,   211,   110,    -1,    48,   109,
-     212,   110,    -1,    -1,   210,    -1,    23,    -1,    23,    -1,
-      23,    -1,    30,    64,    -1,   218,    -1,   221,    -1,   216,
-      -1,   219,    -1,    62,    34,   109,   217,   110,    -1,   222,
-      -1,   222,   105,   222,    -1,    62,    34,   109,   222,   110,
-      -1,    62,    46,   109,   220,   110,    -1,   223,    -1,   223,
-     105,   223,    -1,    62,    46,   109,   223,   110,    -1,    23,
-      -1,    23,    -1,   226,    -1,   228,    -1,   227,    -1,   228,
-      -1,   229,    -1,    24,    -1,    23,    -1,   114,   229,   115,
-      -1,   114,   229,   108,   229,   115,    -1,   114,   229,   108,
-     229,   108,   229,   115,    -1,   114,   229,   108,   229,   108,
-     229,   108,   229,   115,    -1,   230,    24,    -1,   230,    23,
-      -1,   111,    -1,   112,    -1,    -1,    -1,    11,   232,   235,
-      -1,    -1,     5,   234,   235,    -1,   235,   108,    99,    -1,
-      99,    -1,     9,    99,   113,   237,    -1,    65,    60,    -1,
-      65,    37,    -1,    65,   238,    -1,    65,    59,    -1,    65,
-      74,   243,    -1,    65,    30,    -1,    29,   239,   240,    -1,
-      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
-      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
-      -1,   109,   246,   110,    -1,    -1,   109,   247,   110,    -1,
-      -1,   109,   248,   110,    -1,    23,    -1,    23,    -1,    23,
-      -1,     6,    99,   113,    99,    -1
+     129,    -1,   130,    -1,   131,    -1,   137,    -1,   132,    -1,
+     133,    -1,   134,    -1,    19,   141,   108,   138,    -1,    18,
+     140,   108,   139,    -1,    16,   140,   108,   138,    -1,    14,
+     140,   108,   138,   108,   138,    -1,    13,   140,   108,   139,
+     108,   139,    -1,    17,   140,   108,   139,   108,   139,   108,
+     139,    -1,    15,   140,   108,   139,   108,   135,   108,   136,
+      -1,    20,   139,    -1,    22,   140,   108,   139,   108,   139,
+     108,   139,   108,   135,   108,   136,    -1,    83,   245,    -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,   140,   108,   145,   108,   142,
+      -1,   231,   145,   157,    -1,   231,   145,   158,    -1,   146,
+     159,    -1,   154,   156,    -1,   143,   108,   143,   108,   143,
+     108,   143,    -1,   231,   144,    -1,    23,    -1,    99,    -1,
+      99,    -1,   162,    -1,   147,   109,   148,   110,    -1,   176,
+      -1,   238,    -1,    99,    -1,    99,    -1,   149,    -1,   150,
+      -1,    23,    -1,   154,   155,   151,    -1,    -1,   111,   152,
+      -1,   112,   153,    -1,    23,    -1,    23,    -1,    99,    -1,
+     103,    -1,   103,    -1,   103,    -1,   103,    -1,   100,    -1,
+     104,    -1,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
+      -1,    -1,   161,    -1,   168,    -1,   232,    -1,   234,    -1,
+     237,    -1,   250,    -1,     7,    99,   113,   162,    -1,    96,
+     163,    -1,    38,   167,    -1,    60,    -1,    98,   165,    -1,
+      53,    -1,    29,   243,    -1,    37,    -1,    74,   244,    -1,
+      50,   109,   166,   110,    -1,    97,   109,   164,   110,    -1,
+      23,    -1,    -1,   109,   166,   110,    -1,    23,    -1,    60,
+      -1,    29,   243,    -1,    37,    -1,    74,   244,    -1,   169,
+      -1,   170,    -1,    10,    99,   172,    -1,    10,    99,   109,
+     171,   110,   173,    -1,    -1,    23,    -1,   113,   175,    -1,
+     113,   114,   174,   115,    -1,   177,    -1,   174,   108,   177,
+      -1,   179,    -1,   215,    -1,   225,    -1,   179,    -1,   215,
+      -1,   226,    -1,   178,    -1,   216,    -1,   225,    -1,   179,
+      -1,    73,   203,    -1,    73,   180,    -1,    73,   182,    -1,
+      73,   185,    -1,    73,   187,    -1,    73,   193,    -1,    73,
+     189,    -1,    73,   196,    -1,    73,   198,    -1,    73,   200,
+      -1,    73,   202,    -1,    73,   214,    -1,    47,   242,   181,
+      -1,   191,    -1,    33,    -1,    69,    -1,    43,   109,   192,
+     110,   183,    -1,   191,    -1,    60,    -1,    26,    -1,    72,
+     184,    -1,    40,    -1,    32,    -1,    44,   186,    -1,    25,
+      -1,   242,    67,    -1,    45,   109,   192,   110,   242,   188,
+      -1,   191,    -1,    75,   246,   190,    -1,    29,    -1,    25,
+      -1,    31,    -1,    71,    -1,    23,    -1,    76,   244,   194,
+     195,    -1,    35,    -1,    54,    -1,    79,    -1,    80,    -1,
+      78,    -1,    77,    -1,    36,   197,    -1,    29,    -1,    56,
+      -1,    28,   109,   199,   110,    57,    -1,    23,    -1,    58,
+     201,    -1,    70,    -1,    26,    -1,   205,    66,   109,   208,
+     110,    -1,   205,   204,    -1,    -1,    66,   109,   208,   105,
+     208,   110,    -1,    49,   209,   206,    -1,    -1,   207,    -1,
+      41,    -1,    82,    -1,    42,    -1,    23,    -1,    51,   210,
+      -1,    63,    -1,    52,    -1,    81,   244,    -1,    55,   109,
+     212,   110,    -1,    48,   109,   213,   110,    -1,    -1,   211,
+      -1,    23,    -1,    23,    -1,    23,    -1,    30,    64,    -1,
+     219,    -1,   222,    -1,   217,    -1,   220,    -1,    62,    34,
+     109,   218,   110,    -1,   223,    -1,   223,   105,   223,    -1,
+      62,    34,   109,   223,   110,    -1,    62,    46,   109,   221,
+     110,    -1,   224,    -1,   224,   105,   224,    -1,    62,    46,
+     109,   224,   110,    -1,    23,    -1,    23,    -1,   227,    -1,
+     229,    -1,   228,    -1,   229,    -1,   230,    -1,    24,    -1,
+      23,    -1,   114,   230,   115,    -1,   114,   230,   108,   230,
+     115,    -1,   114,   230,   108,   230,   108,   230,   115,    -1,
+     114,   230,   108,   230,   108,   230,   108,   230,   115,    -1,
+     231,    24,    -1,   231,    23,    -1,   111,    -1,   112,    -1,
+      -1,    -1,    11,   233,   236,    -1,    -1,     5,   235,   236,
+      -1,   236,   108,    99,    -1,    99,    -1,     9,    99,   113,
+     238,    -1,    65,    60,    -1,    65,    37,    -1,    65,   239,
+      -1,    65,    59,    -1,    65,    74,   244,    -1,    65,    30,
+      -1,    29,   240,   241,    -1,    -1,    39,    -1,    27,    -1,
+      -1,    61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,
+      -1,    61,    -1,    68,    -1,    -1,   109,   247,   110,    -1,
+      -1,   109,   248,   110,    -1,    -1,   109,   249,   110,    -1,
+      23,    -1,    23,    -1,    23,    -1,     6,    99,   113,    99,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -766,31 +768,31 @@ static const yytype_uint16 yyrline[] =
 {
        0,   256,   256,   259,   267,   279,   280,   283,   305,   306,
      309,   324,   327,   332,   339,   340,   341,   342,   343,   344,
-     345,   348,   349,   352,   358,   365,   372,   380,   387,   395,
-     440,   447,   453,   454,   455,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   467,   480,   493,   506,   528,   537,
-     570,   577,   592,   642,   684,   695,   716,   726,   732,   763,
-     780,   780,   782,   789,   801,   802,   803,   806,   818,   830,
-     848,   859,   871,   873,   874,   875,   876,   879,   879,   879,
-     879,   880,   883,   884,   885,   886,   887,   888,   891,   909,
-     913,   919,   923,   927,   931,   940,   949,   953,   958,   964,
-     975,   975,   976,   978,   982,   986,   990,   996,   996,   998,
-    1014,  1037,  1040,  1051,  1057,  1063,  1064,  1071,  1077,  1083,
-    1091,  1097,  1103,  1111,  1117,  1123,  1131,  1132,  1135,  1136,
-    1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1148,
-    1157,  1161,  1165,  1171,  1180,  1184,  1188,  1197,  1201,  1207,
-    1213,  1220,  1225,  1233,  1243,  1245,  1253,  1259,  1263,  1267,
-    1273,  1284,  1293,  1297,  1302,  1306,  1310,  1314,  1320,  1327,
-    1331,  1337,  1345,  1356,  1363,  1367,  1373,  1383,  1394,  1398,
-    1416,  1425,  1428,  1434,  1438,  1442,  1448,  1459,  1464,  1469,
-    1474,  1479,  1484,  1492,  1495,  1500,  1513,  1521,  1532,  1540,
-    1540,  1542,  1542,  1544,  1554,  1559,  1566,  1576,  1585,  1590,
-    1597,  1607,  1617,  1629,  1629,  1630,  1630,  1632,  1642,  1650,
-    1660,  1668,  1676,  1685,  1696,  1700,  1706,  1707,  1708,  1711,
-    1711,  1714,  1714,  1717,  1723,  1731,  1744,  1753,  1762,  1766,
-    1775,  1784,  1795,  1802,  1807,  1816,  1828,  1831,  1840,  1851,
-    1852,  1853,  1856,  1857,  1858,  1861,  1862,  1865,  1866,  1869,
-    1870,  1873,  1884,  1895,  1906
+     345,   348,   349,   350,   353,   359,   366,   373,   381,   388,
+     396,   441,   448,   493,   499,   500,   501,   502,   503,   504,
+     505,   506,   507,   508,   509,   510,   513,   526,   539,   552,
+     574,   583,   616,   623,   638,   688,   730,   741,   762,   772,
+     778,   809,   826,   826,   828,   835,   847,   848,   849,   852,
+     864,   876,   894,   905,   917,   919,   920,   921,   922,   925,
+     925,   925,   925,   926,   929,   930,   931,   932,   933,   934,
+     937,   955,   959,   965,   969,   973,   977,   986,   995,   999,
+    1004,  1010,  1021,  1021,  1022,  1024,  1028,  1032,  1036,  1042,
+    1042,  1044,  1060,  1083,  1086,  1097,  1103,  1109,  1110,  1117,
+    1123,  1129,  1137,  1143,  1149,  1157,  1163,  1169,  1177,  1178,
+    1181,  1182,  1183,  1184,  1185,  1186,  1187,  1188,  1189,  1190,
+    1191,  1194,  1203,  1207,  1211,  1217,  1226,  1230,  1234,  1243,
+    1247,  1253,  1259,  1266,  1271,  1279,  1289,  1291,  1299,  1305,
+    1309,  1313,  1319,  1330,  1339,  1343,  1348,  1352,  1356,  1360,
+    1366,  1373,  1377,  1383,  1391,  1402,  1409,  1413,  1419,  1429,
+    1440,  1444,  1462,  1471,  1474,  1480,  1484,  1488,  1494,  1505,
+    1510,  1515,  1520,  1525,  1530,  1538,  1541,  1546,  1559,  1567,
+    1578,  1586,  1586,  1588,  1588,  1590,  1600,  1605,  1612,  1622,
+    1631,  1636,  1643,  1653,  1663,  1675,  1675,  1676,  1676,  1678,
+    1688,  1696,  1706,  1714,  1722,  1731,  1742,  1746,  1752,  1753,
+    1754,  1757,  1757,  1760,  1760,  1763,  1769,  1777,  1790,  1799,
+    1808,  1812,  1821,  1830,  1841,  1848,  1853,  1862,  1874,  1877,
+    1886,  1897,  1898,  1899,  1902,  1903,  1904,  1907,  1908,  1911,
+    1912,  1915,  1916,  1919,  1930,  1941,  1952
 };
 #endif
 
@@ -822,24 +824,24 @@ static const char *const yytname[] =
   "TexInstruction", "ARL_instruction", "VECTORop_instruction",
   "SCALARop_instruction", "BINSCop_instruction", "BINop_instruction",
   "TRIop_instruction", "SAMPLE_instruction", "KIL_instruction",
-  "texImageUnit", "texTarget", "SWZ_instruction", "scalarSrcReg",
-  "swizzleSrcReg", "maskedDstReg", "maskedAddrReg", "extendedSwizzle",
-  "extSwizComp", "extSwizSel", "srcReg", "dstReg", "progParamArray",
-  "progParamArrayMem", "progParamArrayAbs", "progParamArrayRel",
-  "addrRegRelOffset", "addrRegPosOffset", "addrRegNegOffset", "addrReg",
-  "addrComponent", "addrWriteMask", "scalarSuffix", "swizzleSuffix",
-  "optionalMask", "namingStatement", "ATTRIB_statement", "attribBinding",
-  "vtxAttribItem", "vtxAttribNum", "vtxOptWeightNum", "vtxWeightNum",
-  "fragAttribItem", "PARAM_statement", "PARAM_singleStmt",
-  "PARAM_multipleStmt", "optArraySize", "paramSingleInit",
-  "paramMultipleInit", "paramMultInitList", "paramSingleItemDecl",
-  "paramSingleItemUse", "paramMultipleItem", "stateMultipleItem",
-  "stateSingleItem", "stateMaterialItem", "stateMatProperty",
-  "stateLightItem", "stateLightProperty", "stateSpotProperty",
-  "stateLightModelItem", "stateLModProperty", "stateLightProdItem",
-  "stateLProdProperty", "stateTexEnvItem", "stateTexEnvProperty",
-  "ambDiffSpecProperty", "stateLightNumber", "stateTexGenItem",
-  "stateTexGenType", "stateTexGenCoord", "stateFogItem",
+  "TXD_instruction", "texImageUnit", "texTarget", "SWZ_instruction",
+  "scalarSrcReg", "swizzleSrcReg", "maskedDstReg", "maskedAddrReg",
+  "extendedSwizzle", "extSwizComp", "extSwizSel", "srcReg", "dstReg",
+  "progParamArray", "progParamArrayMem", "progParamArrayAbs",
+  "progParamArrayRel", "addrRegRelOffset", "addrRegPosOffset",
+  "addrRegNegOffset", "addrReg", "addrComponent", "addrWriteMask",
+  "scalarSuffix", "swizzleSuffix", "optionalMask", "namingStatement",
+  "ATTRIB_statement", "attribBinding", "vtxAttribItem", "vtxAttribNum",
+  "vtxOptWeightNum", "vtxWeightNum", "fragAttribItem", "PARAM_statement",
+  "PARAM_singleStmt", "PARAM_multipleStmt", "optArraySize",
+  "paramSingleInit", "paramMultipleInit", "paramMultInitList",
+  "paramSingleItemDecl", "paramSingleItemUse", "paramMultipleItem",
+  "stateMultipleItem", "stateSingleItem", "stateMaterialItem",
+  "stateMatProperty", "stateLightItem", "stateLightProperty",
+  "stateSpotProperty", "stateLightModelItem", "stateLModProperty",
+  "stateLightProdItem", "stateLProdProperty", "stateTexEnvItem",
+  "stateTexEnvProperty", "ambDiffSpecProperty", "stateLightNumber",
+  "stateTexGenItem", "stateTexGenType", "stateTexGenCoord", "stateFogItem",
   "stateFogProperty", "stateClipPlaneItem", "stateClipPlaneNum",
   "statePointItem", "statePointProperty", "stateMatrixRow",
   "stateMatrixRows", "optMatrixRows", "stateMatrixItem",
@@ -886,31 +888,31 @@ static const yytype_uint8 yyr1[] =
 {
        0,   116,   117,   118,   118,   119,   119,   120,   121,   121,
      122,   122,   123,   123,   124,   124,   124,   124,   124,   124,
-     124,   125,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   143,   144,   144,   144,   144,   145,   145,   146,
-     147,   147,   148,   149,   150,   150,   150,   151,   152,   153,
-     154,   155,   156,   157,   157,   157,   157,   158,   158,   158,
-     158,   158,   159,   159,   159,   159,   159,   159,   160,   161,
-     161,   162,   162,   162,   162,   162,   162,   162,   162,   163,
-     164,   164,   165,   166,   166,   166,   166,   167,   167,   168,
-     169,   170,   170,   171,   172,   173,   173,   174,   174,   174,
-     175,   175,   175,   176,   176,   176,   177,   177,   178,   178,
-     178,   178,   178,   178,   178,   178,   178,   178,   178,   179,
-     180,   180,   180,   181,   182,   182,   182,   182,   182,   183,
-     184,   185,   185,   186,   187,   188,   189,   190,   190,   190,
-     191,   192,   193,   193,   194,   194,   194,   194,   195,   196,
-     196,   197,   198,   199,   200,   200,   201,   202,   203,   203,
-     204,   205,   205,   206,   206,   206,   207,   208,   208,   208,
-     208,   208,   208,   209,   209,   210,   211,   212,   213,   214,
-     214,   215,   215,   216,   217,   217,   218,   219,   220,   220,
-     221,   222,   223,   224,   224,   225,   225,   226,   227,   227,
-     228,   228,   228,   228,   229,   229,   230,   230,   230,   232,
-     231,   234,   233,   235,   235,   236,   237,   237,   237,   237,
-     237,   237,   238,   239,   239,   239,   240,   240,   240,   241,
-     241,   241,   242,   242,   242,   243,   243,   244,   244,   245,
-     245,   246,   247,   248,   249
+     124,   125,   125,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   144,   145,   145,   145,   145,   146,
+     146,   147,   148,   148,   149,   150,   151,   151,   151,   152,
+     153,   154,   155,   156,   157,   158,   158,   158,   158,   159,
+     159,   159,   159,   159,   160,   160,   160,   160,   160,   160,
+     161,   162,   162,   163,   163,   163,   163,   163,   163,   163,
+     163,   164,   165,   165,   166,   167,   167,   167,   167,   168,
+     168,   169,   170,   171,   171,   172,   173,   174,   174,   175,
+     175,   175,   176,   176,   176,   177,   177,   177,   178,   178,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,   180,   181,   181,   181,   182,   183,   183,   183,   183,
+     183,   184,   185,   186,   186,   187,   188,   189,   190,   191,
+     191,   191,   192,   193,   194,   194,   195,   195,   195,   195,
+     196,   197,   197,   198,   199,   200,   201,   201,   202,   203,
+     204,   204,   205,   206,   206,   207,   207,   207,   208,   209,
+     209,   209,   209,   209,   209,   210,   210,   211,   212,   213,
+     214,   215,   215,   216,   216,   217,   218,   218,   219,   220,
+     221,   221,   222,   223,   224,   225,   225,   226,   226,   227,
+     228,   228,   229,   229,   229,   229,   230,   230,   231,   231,
+     231,   233,   232,   235,   234,   236,   236,   237,   238,   238,
+     238,   238,   238,   238,   239,   240,   240,   240,   241,   241,
+     241,   242,   242,   242,   243,   243,   243,   244,   244,   245,
+     245,   246,   246,   247,   248,   249,   250
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -918,31 +920,31 @@ 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,     4,     4,     4,     6,     6,     8,     8,
-       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     6,     3,     3,     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,
-       3,     0,     3,     3,     1,     4,     2,     2,     2,     2,
-       3,     2,     3,     0,     1,     1,     0,     1,     1,     0,
-       1,     1,     0,     1,     1,     0,     3,     0,     3,     0,
-       3,     1,     1,     1,     4
+       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,     3,     3,     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,     3,     0,     3,     3,     1,     4,     2,     2,
+       2,     2,     3,     2,     3,     0,     1,     1,     0,     1,
+       1,     0,     1,     1,     0,     1,     1,     0,     3,     0,
+       3,     0,     3,     1,     1,     1,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -951,221 +953,223 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   231,     0,     0,     0,     0,   229,     2,     0,     0,
-       0,     0,     0,     0,     0,   228,     0,     8,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    21,    22,    20,
-       0,    82,    83,   107,   108,    84,    85,    86,    87,     7,
-       0,     0,     0,     0,     0,     0,     0,    58,     0,    81,
-      57,     0,     0,     0,     0,     0,    69,     0,     0,   226,
-     227,    30,     0,     0,    10,    11,   234,   232,     0,     0,
-       0,   111,   228,   109,   230,   243,   241,   237,   239,   236,
-     255,   238,   228,    77,    78,    79,    80,    47,   228,   228,
-     228,   228,   228,   228,    71,    48,   219,   218,     0,     0,
-       0,     0,    53,   228,    76,     0,    54,    56,   120,   121,
-     199,   200,   122,   215,   216,     0,     0,   264,    88,   235,
-     112,     0,   113,   117,   118,   119,   213,   214,   217,     0,
-     245,   244,   246,     0,   240,     0,     0,     0,     0,    25,
-       0,    24,    23,   252,   105,   103,   255,    90,     0,     0,
-       0,     0,     0,     0,   249,     0,   249,     0,     0,   259,
-     255,   128,   129,   130,   131,   133,   132,   134,   135,   136,
-     137,     0,   138,   252,    95,     0,    93,    91,   255,     0,
-     100,    89,     0,    74,    73,    75,    46,     0,     0,   233,
-       0,   225,   224,   247,   248,   242,   261,     0,   228,   228,
-       0,     0,   228,   253,   254,   104,   106,     0,     0,     0,
-     198,   169,   170,   168,     0,   151,   251,   250,   150,     0,
-       0,     0,     0,   193,   189,     0,   188,   255,   181,   175,
-     174,   173,     0,     0,     0,     0,    94,     0,    96,     0,
-       0,    92,   228,   220,    62,     0,    60,    61,     0,   228,
-       0,   110,   256,    27,    26,    72,    45,   257,     0,     0,
-     211,     0,   212,     0,   172,     0,   160,     0,   152,     0,
-     157,   158,   141,   142,   159,   139,   140,     0,   195,   187,
-     194,     0,   190,   183,   185,   184,   180,   182,   263,     0,
-     156,   155,   162,   163,     0,     0,   102,     0,    99,     0,
-       0,     0,    55,    70,    64,    44,     0,     0,   228,     0,
-      31,     0,   228,   206,   210,     0,     0,   249,   197,     0,
-     196,     0,   260,   167,   166,   164,   165,   161,   186,     0,
-      97,    98,   101,   228,   221,     0,     0,    63,   228,    51,
-      52,    50,     0,     0,     0,   115,   123,   126,   124,   201,
-     202,   125,   262,     0,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    29,    28,   171,   146,
-     148,   145,     0,   143,   144,     0,   192,   191,   176,     0,
-      67,    65,    68,    66,     0,     0,     0,   127,   178,   228,
-     114,   258,   149,   147,   153,   154,   228,   222,   228,     0,
-       0,     0,   177,   116,     0,     0,     0,   204,     0,   208,
-       0,   223,   228,   203,     0,   207,     0,     0,    49,   205,
-     209,     0,     0,   179
+       0,   233,     0,     0,     0,     0,   231,     2,     0,     0,
+       0,     0,     0,     0,     0,   230,     0,     0,     8,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
+      23,    20,     0,    84,    85,   109,   110,    86,    87,    88,
+      89,     7,     0,     0,     0,     0,     0,     0,     0,    60,
+       0,    83,    59,     0,     0,     0,     0,     0,    71,     0,
+       0,   228,   229,    31,     0,     0,     0,    10,    11,   236,
+     234,     0,     0,     0,   113,   230,   111,   232,   245,   243,
+     239,   241,   238,   257,   240,   230,    79,    80,    81,    82,
+      49,   230,   230,   230,   230,   230,   230,    73,    50,   221,
+     220,     0,     0,     0,     0,    55,   230,    78,     0,    56,
+      58,   122,   123,   201,   202,   124,   217,   218,     0,   230,
+       0,   266,    90,   237,   114,     0,   115,   119,   120,   121,
+     215,   216,   219,     0,   247,   246,   248,     0,   242,     0,
+       0,     0,     0,    26,     0,    25,    24,   254,   107,   105,
+     257,    92,     0,     0,     0,     0,     0,     0,   251,     0,
+     251,     0,     0,   261,   257,   130,   131,   132,   133,   135,
+     134,   136,   137,   138,   139,     0,   140,   254,    97,     0,
+      95,    93,   257,     0,   102,    91,     0,    76,    75,    77,
+      48,     0,     0,     0,   235,     0,   227,   226,   249,   250,
+     244,   263,     0,   230,   230,     0,     0,   230,   255,   256,
+     106,   108,     0,     0,     0,   200,   171,   172,   170,     0,
+     153,   253,   252,   152,     0,     0,     0,     0,   195,   191,
+       0,   190,   257,   183,   177,   176,   175,     0,     0,     0,
+       0,    96,     0,    98,     0,     0,    94,   230,   222,    64,
+       0,    62,    63,     0,   230,   230,     0,   112,   258,    28,
+      27,    74,    47,   259,     0,     0,   213,     0,   214,     0,
+     174,     0,   162,     0,   154,     0,   159,   160,   143,   144,
+     161,   141,   142,     0,   197,   189,   196,     0,   192,   185,
+     187,   186,   182,   184,   265,     0,   158,   157,   164,   165,
+       0,     0,   104,     0,   101,     0,     0,     0,    57,    72,
+      66,    46,     0,     0,     0,   230,     0,    33,     0,   230,
+     208,   212,     0,     0,   251,   199,     0,   198,     0,   262,
+     169,   168,   166,   167,   163,   188,     0,    99,   100,   103,
+     230,   223,     0,     0,    65,   230,    53,    54,    52,   230,
+       0,     0,     0,   117,   125,   128,   126,   203,   204,   127,
+     264,     0,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    30,    29,   173,   148,   150,   147,
+       0,   145,   146,     0,   194,   193,   178,     0,    69,    67,
+      70,    68,     0,     0,     0,     0,   129,   180,   230,   116,
+     260,   151,   149,   155,   156,   230,   224,   230,     0,     0,
+       0,     0,   179,   118,     0,     0,     0,     0,   206,     0,
+     210,     0,   225,   230,     0,   205,     0,   209,     0,     0,
+      51,    32,   207,   211,     0,     0,   181
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     4,     6,     8,     9,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,   268,   376,
-      39,   146,    71,    58,    67,   315,   316,   351,   114,    59,
-     115,   255,   256,   257,   347,   391,   393,    68,   314,   105,
-     266,   196,    97,    40,    41,   116,   191,   309,   251,   307,
-     157,    42,    43,    44,   131,    83,   261,   354,   132,   117,
-     355,   356,   118,   171,   285,   172,   383,   403,   173,   228,
-     174,   404,   175,   301,   286,   277,   176,   304,   337,   177,
-     223,   178,   275,   179,   241,   180,   397,   412,   181,   296,
-     297,   339,   238,   289,   290,   331,   329,   182,   119,   358,
-     359,   416,   120,   360,   418,   121,   271,   273,   361,   122,
-     136,   123,   124,   138,    72,    45,    55,    46,    50,    77,
-      47,    60,    91,   142,   205,   229,   215,   144,   320,   243,
-     207,   363,   299,    48
+      -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,   274,
+     384,    41,   150,    73,    60,    69,   321,   322,   358,   117,
+      61,   118,   260,   261,   262,   354,   399,   401,    70,   320,
+     108,   272,   200,   100,    42,    43,   119,   195,   315,   256,
+     313,   161,    44,    45,    46,   135,    86,   267,   362,   136,
+     120,   363,   364,   121,   175,   291,   176,   391,   412,   177,
+     233,   178,   413,   179,   307,   292,   283,   180,   310,   344,
+     181,   228,   182,   281,   183,   246,   184,   406,   422,   185,
+     302,   303,   346,   243,   295,   296,   338,   336,   186,   122,
+     366,   367,   427,   123,   368,   429,   124,   277,   279,   369,
+     125,   140,   126,   127,   142,    74,    47,    57,    48,    52,
+      80,    49,    62,    94,   146,   210,   234,   220,   148,   327,
+     248,   212,   371,   305,    50
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -334
+#define YYPACT_NINF -384
 static const yytype_int16 yypact[] =
 {
-     134,  -334,  -334,    41,  -334,  -334,    47,   -50,  -334,   169,
-      19,  -334,    33,    60,    74,   114,  -334,  -334,   -20,   -20,
-     -20,   -20,   -20,   -20,   115,    43,   -20,  -334,   108,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-     109,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-     118,   105,   106,   110,   -23,   118,     3,  -334,     4,   103,
-    -334,   112,   113,   116,   117,   119,  -334,   120,   123,  -334,
-    -334,  -334,   -16,   121,  -334,  -334,  -334,   122,   132,   -15,
-     157,   209,   -12,  -334,   122,    20,  -334,  -334,  -334,  -334,
-     131,  -334,    43,  -334,  -334,  -334,  -334,  -334,    43,    43,
-      43,    43,    43,    43,  -334,  -334,  -334,  -334,     0,    67,
-      86,    -2,   133,    43,    64,   135,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,  -334,  -334,   -16,   136,  -334,  -334,  -334,
-    -334,   129,  -334,  -334,  -334,  -334,  -334,  -334,  -334,   148,
-    -334,  -334,    57,   218,  -334,   137,   138,   -16,   139,  -334,
-     140,  -334,  -334,    73,  -334,  -334,   131,  -334,   141,   142,
-     143,   179,    14,   144,    80,   145,    82,    88,    -1,   146,
-     131,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,   183,  -334,    73,  -334,   147,  -334,  -334,   131,   149,
-     150,  -334,    42,  -334,  -334,  -334,  -334,   -11,   152,  -334,
-     151,  -334,  -334,  -334,  -334,  -334,  -334,   153,    43,    43,
-     154,   182,    43,  -334,  -334,  -334,  -334,   239,   244,   245,
-    -334,  -334,  -334,  -334,   246,  -334,  -334,  -334,  -334,   203,
-     246,    -5,   162,   249,  -334,   164,  -334,   131,    26,  -334,
-    -334,  -334,   251,   247,    17,   166,  -334,   254,  -334,   255,
-     254,  -334,    43,  -334,  -334,   170,  -334,  -334,   176,    43,
-     167,  -334,  -334,  -334,  -334,  -334,  -334,   173,   175,   177,
-    -334,   174,  -334,   178,  -334,   180,  -334,   181,  -334,   184,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,   263,  -334,  -334,
-    -334,   264,  -334,  -334,  -334,  -334,  -334,  -334,  -334,   185,
-    -334,  -334,  -334,  -334,   130,   266,  -334,   187,  -334,   188,
-     189,    45,  -334,  -334,   100,  -334,   192,    -6,    -8,   269,
-    -334,   107,    43,  -334,  -334,   236,    13,    82,  -334,   191,
-    -334,   193,  -334,  -334,  -334,  -334,  -334,  -334,  -334,   194,
-    -334,  -334,  -334,    43,  -334,   279,   282,  -334,    43,  -334,
-    -334,  -334,    77,    86,    48,  -334,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,   196,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,  -334,   275,  -334,  -334,     5,  -334,  -334,  -334,    50,
-    -334,  -334,  -334,  -334,   200,   201,   202,  -334,   243,    -8,
-    -334,  -334,  -334,  -334,  -334,  -334,    43,  -334,    43,   239,
-     244,   204,  -334,  -334,   197,   206,   205,   211,   210,   216,
-     266,  -334,    43,  -334,   239,  -334,   244,   -18,  -334,  -334,
-    -334,   266,   212,  -334
+     167,  -384,  -384,    37,  -384,  -384,    60,   -70,  -384,   171,
+     -23,  -384,   -13,     9,    12,    63,  -384,  -384,   -33,   -33,
+     -33,   -33,   -33,   -33,    67,   104,   -33,   -33,  -384,    66,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,    68,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,   115,   109,   111,   112,    -4,   115,    22,  -384,
+     113,   106,  -384,   118,   120,   121,   122,   123,  -384,   124,
+     130,  -384,  -384,  -384,   -16,   126,   127,  -384,  -384,  -384,
+     128,   140,   -18,   158,   204,   -39,  -384,   128,    26,  -384,
+    -384,  -384,  -384,   134,  -384,   104,  -384,  -384,  -384,  -384,
+    -384,   104,   104,   104,   104,   104,   104,  -384,  -384,  -384,
+    -384,    73,    84,    76,   -10,   135,   104,    64,   136,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,   -16,   104,
+     147,  -384,  -384,  -384,  -384,   137,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,   194,  -384,  -384,    46,   225,  -384,   141,
+     142,   -16,   143,  -384,   144,  -384,  -384,    87,  -384,  -384,
+     134,  -384,   145,   146,   148,   189,    15,   149,    88,   150,
+      97,    80,     0,   151,   134,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,   190,  -384,    87,  -384,   152,
+    -384,  -384,   134,   153,   154,  -384,    42,  -384,  -384,  -384,
+    -384,    -8,   156,   159,  -384,   160,  -384,  -384,  -384,  -384,
+    -384,  -384,   161,   104,   104,   163,   186,   104,  -384,  -384,
+    -384,  -384,   249,   251,   252,  -384,  -384,  -384,  -384,   253,
+    -384,  -384,  -384,  -384,   210,   253,     8,   169,   256,  -384,
+     172,  -384,   134,    21,  -384,  -384,  -384,   257,   254,    -7,
+     173,  -384,   261,  -384,   262,   261,  -384,   104,  -384,  -384,
+     176,  -384,  -384,   184,   104,   104,   174,  -384,  -384,  -384,
+    -384,  -384,  -384,   180,   182,   183,  -384,   185,  -384,   187,
+    -384,   188,  -384,   191,  -384,   193,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,   269,  -384,  -384,  -384,   270,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,   195,  -384,  -384,  -384,  -384,
+     133,   271,  -384,   196,  -384,   197,   198,    45,  -384,  -384,
+     108,  -384,   192,    -6,   201,   -17,   273,  -384,   110,   104,
+    -384,  -384,   242,    29,    97,  -384,   200,  -384,   202,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,   203,  -384,  -384,  -384,
+     104,  -384,   281,   288,  -384,   104,  -384,  -384,  -384,   104,
+     103,    76,    48,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,   205,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+     282,  -384,  -384,     5,  -384,  -384,  -384,    50,  -384,  -384,
+    -384,  -384,   208,   209,   211,   212,  -384,   260,   -17,  -384,
+    -384,  -384,  -384,  -384,  -384,   104,  -384,   104,   186,   249,
+     251,   213,  -384,  -384,   214,   219,   220,   221,   228,   224,
+     230,   271,  -384,   104,   110,  -384,   249,  -384,   251,    49,
+    -384,  -384,  -384,  -384,   271,   226,  -384
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,   -94,   -88,   126,  -334,  -334,  -333,  -334,   -91,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,   128,  -334,  -334,
-    -334,  -334,  -334,  -334,  -334,   248,  -334,  -334,  -334,    78,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-     -76,  -334,   -81,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,  -334,  -307,    99,  -334,  -334,  -334,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,   -22,  -334,
-    -334,  -303,  -334,  -334,  -334,  -334,  -334,  -334,   250,  -334,
-    -334,  -334,  -334,  -334,  -334,  -334,  -327,  -316,   252,  -334,
-    -334,  -334,   -80,  -110,   -82,  -334,  -334,  -334,  -334,   278,
-    -334,   256,  -334,  -334,  -334,  -161,   155,  -146,  -334,  -334,
-    -334,  -334,  -334,  -334
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -100,
+    -115,  -384,   -97,   -91,   119,  -384,  -384,  -343,  -384,   -93,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,   138,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,   255,  -384,  -384,  -384,
+      83,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,   -68,  -384,   -84,  -384,  -384,  -384,  -384,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,  -308,   107,  -384,  -384,  -384,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,  -384,   -20,
+    -384,  -384,  -383,  -384,  -384,  -384,  -384,  -384,  -384,   258,
+    -384,  -384,  -384,  -384,  -384,  -384,  -384,  -320,  -371,   259,
+    -384,  -384,  -384,   -83,  -113,   -85,  -384,  -384,  -384,  -384,
+     289,  -384,   264,  -384,  -384,  -384,  -165,   162,  -150,  -384,
+    -384,  -384,  -384,  -384,  -384
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -60
+#define YYTABLE_NINF -62
 static const yytype_int16 yytable[] =
 {
-     139,   133,   137,   192,   145,   231,   149,   106,   107,   152,
-     216,   148,   254,   150,   151,   394,   147,   349,   147,   384,
-     280,   147,   108,   108,   244,   239,   281,   183,   282,   153,
-     280,   139,    85,    86,   198,   184,   281,   154,   280,   379,
-      87,     5,   248,   221,   281,    56,   109,   140,   185,    10,
-     109,   186,   302,   380,   352,     7,   210,   110,   187,   141,
-     155,   110,    88,    89,   283,   353,   284,   293,   294,   240,
-     222,   303,   188,   381,   156,   415,   284,    90,   405,    57,
-     111,   111,   417,   112,   284,   382,    81,   431,    66,   428,
-      82,   292,   388,   350,   419,   189,   190,   429,   113,    69,
-      70,   158,   113,    69,    70,   225,   113,   226,   295,   226,
-     430,   395,    92,   159,   160,   264,   161,   427,   203,   227,
-     263,   227,   162,   396,   269,   204,    49,   147,   432,   163,
-     164,   165,    51,   166,   213,   167,   232,     1,     2,   233,
-     234,   214,   311,   235,   168,    61,    62,    63,    64,    65,
-     252,   236,    73,   343,    69,    70,   399,   253,   406,    52,
-     344,   169,   170,   400,   193,   407,   385,   194,   195,   237,
-     139,   201,   202,    53,    11,    12,    13,   317,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,    93,    94,    95,    96,   333,   334,   335,
-     336,   345,   346,    54,    66,    74,    75,    76,    78,    79,
-      98,    99,    56,    80,   100,   101,   104,   102,   103,   125,
-     126,   127,   130,   389,   377,   199,   139,   357,   137,   200,
-     143,   206,   -59,   220,   197,   208,   209,   211,   212,   245,
-     217,   218,   219,   224,   230,   242,   247,   265,   249,   250,
-     259,   139,   270,   262,   260,   267,   317,   272,   274,   276,
-     278,   287,   288,   291,   298,   305,   300,   306,   308,   313,
-     312,   318,   319,   321,   323,   322,   328,   330,   324,   338,
-     325,   326,   362,   378,   327,   332,   414,   340,   341,   342,
-     348,   386,   390,   387,   388,   392,   401,   402,   408,   411,
-     409,   410,   421,   420,   422,   423,   424,   139,   357,   137,
-     425,   426,   433,   413,   139,   258,   317,   128,   310,   279,
-       0,   398,   134,    84,   135,     0,   129,     0,   246,     0,
-     317
+     143,   137,   141,   196,   149,   236,   153,   109,   110,   156,
+     221,   152,   402,   154,   155,   259,   151,   356,   151,   187,
+     111,   151,   111,   112,   249,   392,   244,   188,   308,    10,
+     286,   143,    58,   286,   113,   202,   287,     5,   203,   287,
+     189,   288,   253,   190,   226,   360,   112,   309,   439,   430,
+     191,    88,    89,   144,   286,   387,   361,   113,   215,    90,
+     287,   445,   299,   300,   192,   145,    59,   443,     7,   388,
+     245,   227,    71,    72,   425,   116,   290,   289,   114,   290,
+     114,    91,    92,   115,    51,   414,    53,   193,   194,   389,
+     440,    68,   298,   357,    71,    72,    93,   116,   116,   428,
+     290,   390,   157,   301,   164,    84,   165,   208,    54,    85,
+     158,    55,   166,   230,   209,   231,   442,   270,   162,   167,
+     168,   169,   269,   170,   231,   171,   275,   232,   237,   151,
+     163,   238,   239,   159,   172,   240,   232,   404,    63,    64,
+      65,    66,    67,   241,   317,    75,    76,   160,   218,   405,
+     257,   173,   174,   350,   444,   219,   408,   258,   415,   396,
+     351,   242,    56,   409,   197,   416,    68,   198,   199,   393,
+       1,     2,   143,    77,   324,    78,    11,    12,    13,   323,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,   372,   373,   374,   375,   376,   377,
+     378,   379,   380,   381,   382,   383,    96,    97,    98,    99,
+     340,   341,   342,   343,    79,    71,    72,   206,   207,   352,
+     353,    95,    81,    58,    82,    83,   101,   134,   102,   103,
+     104,   105,   106,   107,   128,   129,   130,   397,   385,   131,
+     143,   365,   141,   147,   -61,   201,   204,   205,   211,   213,
+     214,   216,   217,   225,   222,   223,   250,   224,   229,   235,
+     247,   252,   254,   255,   264,   143,   271,   265,   403,   273,
+     323,   268,   276,   266,   278,   280,   282,   284,   293,   294,
+     304,   297,   311,   306,   312,   314,   318,   319,   325,   326,
+     328,   329,   335,   337,   345,   330,   370,   331,   332,   386,
+     355,   333,   424,   334,   398,   339,   347,   348,   349,   359,
+     394,   400,   395,   396,   411,   410,   417,   418,   426,   441,
+     419,   420,   431,   143,   365,   141,   421,   433,   434,   432,
+     143,   435,   323,   436,   437,   438,   446,   132,   316,   263,
+     423,   407,   285,   138,   139,     0,    87,   133,   323,   251
 };
 
 static const yytype_int16 yycheck[] =
 {
-      82,    82,    82,   113,    92,   166,   100,    23,    24,   103,
-     156,    99,    23,   101,   102,   348,    98,    23,   100,   326,
-      25,   103,    38,    38,   170,    26,    31,    29,    33,    29,
-      25,   113,    29,    30,   125,    37,    31,    37,    25,    26,
-      37,     0,   188,    29,    31,    65,    62,    27,    50,    99,
-      62,    53,    35,    40,    62,     8,   147,    73,    60,    39,
-      60,    73,    59,    60,    69,    73,    71,    41,    42,    70,
-      56,    54,    74,    60,    74,   408,    71,    74,   385,    99,
-      96,    96,   409,    99,    71,    72,   109,   105,    99,   422,
-     113,   237,   110,    99,   410,    97,    98,   424,   114,   111,
-     112,    34,   114,   111,   112,    25,   114,    27,    82,    27,
-     426,    34,   108,    46,    28,   209,    30,   420,    61,    39,
-     208,    39,    36,    46,   212,    68,   107,   209,   431,    43,
-      44,    45,    99,    47,    61,    49,    48,     3,     4,    51,
-      52,    68,   252,    55,    58,    19,    20,    21,    22,    23,
-     108,    63,    26,   108,   111,   112,   108,   115,   108,    99,
-     115,    75,    76,   115,   100,   115,   327,   103,   104,    81,
-     252,    23,    24,    99,     5,     6,     7,   259,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,   100,   101,   102,   103,    77,    78,    79,
-      80,   111,   112,    99,    99,   107,   107,    99,   113,   113,
-     108,   108,    65,   113,   108,   108,   103,   108,   108,   108,
-     108,    99,    23,   343,   322,    99,   318,   318,   318,   110,
-     109,    23,   109,    64,   109,   108,   108,   108,   108,    66,
-     109,   109,   109,   109,   109,   109,   109,   103,   109,   109,
-     108,   343,    23,   110,   113,    83,   348,    23,    23,    23,
-      67,   109,    23,   109,    23,   109,    29,    23,    23,   103,
-     110,   114,   109,   108,   110,   108,    23,    23,   110,    23,
-     110,   110,    23,    57,   110,   110,   406,   110,   110,   110,
-     108,   110,    23,   110,   110,    23,   110,    32,   108,    66,
-     109,   109,   115,   109,   108,   110,   105,   399,   399,   399,
-     110,   105,   110,   399,   406,   197,   408,    79,   250,   230,
-      -1,   353,    82,    55,    82,    -1,    80,    -1,   183,    -1,
-     422
+      85,    85,    85,   116,    95,   170,   103,    23,    24,   106,
+     160,   102,   355,   104,   105,    23,   101,    23,   103,    29,
+      38,   106,    38,    62,   174,   333,    26,    37,    35,    99,
+      25,   116,    65,    25,    73,   128,    31,     0,   129,    31,
+      50,    33,   192,    53,    29,    62,    62,    54,   431,   420,
+      60,    29,    30,    27,    25,    26,    73,    73,   151,    37,
+      31,   444,    41,    42,    74,    39,    99,   438,     8,    40,
+      70,    56,   111,   112,   417,   114,    71,    69,    96,    71,
+      96,    59,    60,    99,   107,   393,    99,    97,    98,    60,
+     433,    99,   242,    99,   111,   112,    74,   114,   114,   419,
+      71,    72,    29,    82,    28,   109,    30,    61,    99,   113,
+      37,    99,    36,    25,    68,    27,   436,   214,    34,    43,
+      44,    45,   213,    47,    27,    49,   217,    39,    48,   214,
+      46,    51,    52,    60,    58,    55,    39,    34,    19,    20,
+      21,    22,    23,    63,   257,    26,    27,    74,    61,    46,
+     108,    75,    76,   108,   105,    68,   108,   115,   108,   110,
+     115,    81,    99,   115,   100,   115,    99,   103,   104,   334,
+       3,     4,   257,   107,   265,   107,     5,     6,     7,   264,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,   100,   101,   102,   103,
+      77,    78,    79,    80,    99,   111,   112,    23,    24,   111,
+     112,   108,   113,    65,   113,   113,   108,    23,   108,   108,
+     108,   108,   108,   103,   108,   108,   108,   350,   329,    99,
+     325,   325,   325,   109,   109,   109,    99,   110,    23,   108,
+     108,   108,   108,    64,   109,   109,    66,   109,   109,   109,
+     109,   109,   109,   109,   108,   350,   103,   108,   359,    83,
+     355,   110,    23,   113,    23,    23,    23,    67,   109,    23,
+      23,   109,   109,    29,    23,    23,   110,   103,   114,   109,
+     108,   108,    23,    23,    23,   110,    23,   110,   110,    57,
+     108,   110,   415,   110,    23,   110,   110,   110,   110,   108,
+     110,    23,   110,   110,    32,   110,   108,   108,   418,   434,
+     109,   109,   109,   408,   408,   408,    66,   108,   108,   115,
+     415,   110,   417,   105,   110,   105,   110,    82,   255,   201,
+     408,   361,   235,    85,    85,    -1,    57,    83,   433,   187
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1174,48 +1178,49 @@ static const yytype_uint8 yystos[] =
 {
        0,     3,     4,   117,   118,     0,   119,     8,   120,   121,
       99,     5,     6,     7,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   136,
-     159,   160,   167,   168,   169,   231,   233,   236,   249,   107,
-     234,    99,    99,    99,    99,   232,    65,    99,   139,   145,
-     237,   139,   139,   139,   139,   139,    99,   140,   153,   111,
-     112,   138,   230,   139,   107,   107,    99,   235,   113,   113,
-     113,   109,   113,   171,   235,    29,    30,    37,    59,    60,
-      74,   238,   108,   100,   101,   102,   103,   158,   108,   108,
-     108,   108,   108,   108,   103,   155,    23,    24,    38,    62,
-      73,    96,    99,   114,   144,   146,   161,   175,   178,   214,
-     218,   221,   225,   227,   228,   108,   108,    99,   161,   237,
-      23,   170,   174,   178,   214,   224,   226,   228,   229,   230,
-      27,    39,   239,   109,   243,   138,   137,   230,   138,   137,
-     138,   138,   137,    29,    37,    60,    74,   166,    34,    46,
-      28,    30,    36,    43,    44,    45,    47,    49,    58,    75,
-      76,   179,   181,   184,   186,   188,   192,   195,   197,   199,
-     201,   204,   213,    29,    37,    50,    53,    60,    74,    97,
-      98,   162,   229,   100,   103,   104,   157,   109,   144,    99,
-     110,    23,    24,    61,    68,   240,    23,   246,   108,   108,
-     144,   108,   108,    61,    68,   242,   243,   109,   109,   109,
-      64,    29,    56,   196,   109,    25,    27,    39,   185,   241,
-     109,   241,    48,    51,    52,    55,    63,    81,   208,    26,
-      70,   200,   109,   245,   243,    66,   242,   109,   243,   109,
-     109,   164,   108,   115,    23,   147,   148,   149,   153,   108,
-     113,   172,   110,   138,   137,   103,   156,    83,   134,   138,
-      23,   222,    23,   223,    23,   198,    23,   191,    67,   191,
-      25,    31,    33,    69,    71,   180,   190,   109,    23,   209,
-     210,   109,   243,    41,    42,    82,   205,   206,    23,   248,
-      29,   189,    35,    54,   193,   109,    23,   165,    23,   163,
-     165,   229,   110,   103,   154,   141,   142,   230,   114,   109,
-     244,   108,   108,   110,   110,   110,   110,   110,    23,   212,
-      23,   211,   110,    77,    78,    79,    80,   194,    23,   207,
-     110,   110,   110,   108,   115,   111,   112,   150,   108,    23,
-      99,   143,    62,    73,   173,   176,   177,   178,   215,   216,
-     219,   224,    23,   247,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,   135,   138,    57,    26,
-      40,    60,    72,   182,   190,   241,   110,   110,   110,   229,
-      23,   151,    23,   152,   142,    34,    46,   202,   204,   108,
-     115,   110,    32,   183,   187,   190,   108,   115,   108,   109,
-     109,    66,   203,   176,   229,   142,   217,   222,   220,   223,
-     109,   115,   108,   110,   105,   110,   105,   207,   142,   222,
-     223,   105,   207,   110
+      15,    16,    17,    18,    19,    20,    21,    22,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   137,   160,   161,   168,   169,   170,   232,   234,   237,
+     250,   107,   235,    99,    99,    99,    99,   233,    65,    99,
+     140,   146,   238,   140,   140,   140,   140,   140,    99,   141,
+     154,   111,   112,   139,   231,   140,   140,   107,   107,    99,
+     236,   113,   113,   113,   109,   113,   172,   236,    29,    30,
+      37,    59,    60,    74,   239,   108,   100,   101,   102,   103,
+     159,   108,   108,   108,   108,   108,   108,   103,   156,    23,
+      24,    38,    62,    73,    96,    99,   114,   145,   147,   162,
+     176,   179,   215,   219,   222,   226,   228,   229,   108,   108,
+     108,    99,   162,   238,    23,   171,   175,   179,   215,   225,
+     227,   229,   230,   231,    27,    39,   240,   109,   244,   139,
+     138,   231,   139,   138,   139,   139,   138,    29,    37,    60,
+      74,   167,    34,    46,    28,    30,    36,    43,    44,    45,
+      47,    49,    58,    75,    76,   180,   182,   185,   187,   189,
+     193,   196,   198,   200,   202,   205,   214,    29,    37,    50,
+      53,    60,    74,    97,    98,   163,   230,   100,   103,   104,
+     158,   109,   145,   139,    99,   110,    23,    24,    61,    68,
+     241,    23,   247,   108,   108,   145,   108,   108,    61,    68,
+     243,   244,   109,   109,   109,    64,    29,    56,   197,   109,
+      25,    27,    39,   186,   242,   109,   242,    48,    51,    52,
+      55,    63,    81,   209,    26,    70,   201,   109,   246,   244,
+      66,   243,   109,   244,   109,   109,   165,   108,   115,    23,
+     148,   149,   150,   154,   108,   108,   113,   173,   110,   139,
+     138,   103,   157,    83,   135,   139,    23,   223,    23,   224,
+      23,   199,    23,   192,    67,   192,    25,    31,    33,    69,
+      71,   181,   191,   109,    23,   210,   211,   109,   244,    41,
+      42,    82,   206,   207,    23,   249,    29,   190,    35,    54,
+     194,   109,    23,   166,    23,   164,   166,   230,   110,   103,
+     155,   142,   143,   231,   139,   114,   109,   245,   108,   108,
+     110,   110,   110,   110,   110,    23,   213,    23,   212,   110,
+      77,    78,    79,    80,   195,    23,   208,   110,   110,   110,
+     108,   115,   111,   112,   151,   108,    23,    99,   144,   108,
+      62,    73,   174,   177,   178,   179,   216,   217,   220,   225,
+      23,   248,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,   136,   139,    57,    26,    40,    60,
+      72,   183,   191,   242,   110,   110,   110,   230,    23,   152,
+      23,   153,   143,   139,    34,    46,   203,   205,   108,   115,
+     110,    32,   184,   188,   191,   108,   115,   108,   108,   109,
+     109,    66,   204,   177,   230,   143,   135,   218,   223,   221,
+     224,   109,   115,   108,   108,   110,   105,   110,   105,   208,
+     143,   136,   223,   224,   105,   208,   110
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2159,69 +2164,69 @@ yyreduce:
        ;}
     break;
 
-  case 23:
+  case 24:
 
 /* Line 1455 of yacc.c  */
-#line 353 "program_parse.y"
+#line 354 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
     break;
 
-  case 24:
+  case 25:
 
 /* Line 1455 of yacc.c  */
-#line 359 "program_parse.y"
+#line 360 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (4)].temp_inst).Opcode, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (4)].temp_inst).SaturateMode;
        ;}
     break;
 
-  case 25:
+  case 26:
 
 /* Line 1455 of yacc.c  */
-#line 366 "program_parse.y"
+#line 367 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (4)].temp_inst).Opcode, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (4)].temp_inst).SaturateMode;
        ;}
     break;
 
-  case 26:
+  case 27:
 
 /* Line 1455 of yacc.c  */
-#line 373 "program_parse.y"
+#line 374 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (6)].temp_inst).Opcode, & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (6)].temp_inst).SaturateMode;
        ;}
     break;
 
-  case 27:
+  case 28:
 
 /* Line 1455 of yacc.c  */
-#line 381 "program_parse.y"
+#line 382 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (6)].temp_inst).Opcode, & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (6)].temp_inst).SaturateMode;
        ;}
     break;
 
-  case 28:
+  case 29:
 
 /* Line 1455 of yacc.c  */
-#line 389 "program_parse.y"
+#line 390 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (8)].temp_inst).Opcode, & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg));
           (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (8)].temp_inst).SaturateMode;
        ;}
     break;
 
-  case 29:
+  case 30:
 
 /* Line 1455 of yacc.c  */
-#line 396 "program_parse.y"
+#line 397 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (8)].temp_inst).Opcode, & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
           if ((yyval.inst) != NULL) {
@@ -2266,113 +2271,161 @@ yyreduce:
        ;}
     break;
 
-  case 30:
+  case 31:
 
 /* Line 1455 of yacc.c  */
-#line 441 "program_parse.y"
+#line 442 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
        ;}
     break;
 
-  case 31:
+  case 32:
+
+/* Line 1455 of yacc.c  */
+#line 449 "program_parse.y"
+    {
+          (yyval.inst) = asm_instruction_ctor((yyvsp[(1) - (12)].temp_inst).Opcode, & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg));
+          if ((yyval.inst) != NULL) {
+             const GLbitfield tex_mask = (1U << (yyvsp[(10) - (12)].integer));
+             GLbitfield shadow_tex = 0;
+             GLbitfield target_mask = 0;
+
+
+             (yyval.inst)->Base.SaturateMode = (yyvsp[(1) - (12)].temp_inst).SaturateMode;
+             (yyval.inst)->Base.TexSrcUnit = (yyvsp[(10) - (12)].integer);
+
+             if ((yyvsp[(12) - (12)].integer) < 0) {
+                shadow_tex = tex_mask;
+
+                (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(12) - (12)].integer);
+                (yyval.inst)->Base.TexShadow = 1;
+             } else {
+                (yyval.inst)->Base.TexSrcTarget = (yyvsp[(12) - (12)].integer);
+             }
+
+             target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
+
+             /* If this texture unit was previously accessed and that access
+              * had a different texture target, generate an error.
+              *
+              * If this texture unit was previously accessed and that access
+              * had a different shadow mode, generate an error.
+              */
+             if ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != 0)
+                 && ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != target_mask)
+                     || ((state->prog->ShadowSamplers & tex_mask)
+                         != shadow_tex))) {
+                yyerror(& (yylsp[(12) - (12)]), state,
+                        "multiple targets used on one texture image unit");
+                YYERROR;
+             }
+
+
+             state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] |= target_mask;
+             state->prog->ShadowSamplers |= shadow_tex;
+          }
+       ;}
+    break;
+
+  case 33:
 
 /* Line 1455 of yacc.c  */
-#line 448 "program_parse.y"
+#line 494 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 32:
+  case 34:
 
 /* Line 1455 of yacc.c  */
-#line 453 "program_parse.y"
+#line 499 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
-  case 33:
+  case 35:
 
 /* Line 1455 of yacc.c  */
-#line 454 "program_parse.y"
+#line 500 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
-  case 34:
+  case 36:
 
 /* Line 1455 of yacc.c  */
-#line 455 "program_parse.y"
+#line 501 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
-  case 35:
+  case 37:
 
 /* Line 1455 of yacc.c  */
-#line 456 "program_parse.y"
+#line 502 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
-  case 36:
+  case 38:
 
 /* Line 1455 of yacc.c  */
-#line 457 "program_parse.y"
+#line 503 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
-  case 37:
+  case 39:
 
 /* Line 1455 of yacc.c  */
-#line 458 "program_parse.y"
+#line 504 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
     break;
 
-  case 38:
+  case 40:
 
 /* Line 1455 of yacc.c  */
-#line 459 "program_parse.y"
+#line 505 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
     break;
 
-  case 39:
+  case 41:
 
 /* Line 1455 of yacc.c  */
-#line 460 "program_parse.y"
+#line 506 "program_parse.y"
     { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
     break;
 
-  case 40:
+  case 42:
 
 /* Line 1455 of yacc.c  */
-#line 461 "program_parse.y"
+#line 507 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
-  case 41:
+  case 43:
 
 /* Line 1455 of yacc.c  */
-#line 462 "program_parse.y"
+#line 508 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
-  case 42:
+  case 44:
 
 /* Line 1455 of yacc.c  */
-#line 463 "program_parse.y"
+#line 509 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
-  case 43:
+  case 45:
 
 /* Line 1455 of yacc.c  */
-#line 464 "program_parse.y"
+#line 510 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
-  case 44:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 468 "program_parse.y"
+#line 514 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
@@ -2385,10 +2438,10 @@ yyreduce:
        ;}
     break;
 
-  case 45:
+  case 47:
 
 /* Line 1455 of yacc.c  */
-#line 481 "program_parse.y"
+#line 527 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2401,10 +2454,10 @@ yyreduce:
        ;}
     break;
 
-  case 46:
+  case 48:
 
 /* Line 1455 of yacc.c  */
-#line 494 "program_parse.y"
+#line 540 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2417,10 +2470,10 @@ yyreduce:
        ;}
     break;
 
-  case 47:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 507 "program_parse.y"
+#line 553 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2442,10 +2495,10 @@ yyreduce:
        ;}
     break;
 
-  case 48:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 529 "program_parse.y"
+#line 575 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2454,10 +2507,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 538 "program_parse.y"
+#line 584 "program_parse.y"
     {
           const unsigned xyzw_valid =
              ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
@@ -2490,20 +2543,20 @@ yyreduce:
        ;}
     break;
 
-  case 50:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 571 "program_parse.y"
+#line 617 "program_parse.y"
     {
           (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
           (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
-  case 51:
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 578 "program_parse.y"
+#line 624 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2520,10 +2573,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 593 "program_parse.y"
+#line 639 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2573,10 +2626,10 @@ yyreduce:
        ;}
     break;
 
-  case 53:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 643 "program_parse.y"
+#line 689 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2620,10 +2673,10 @@ yyreduce:
        ;}
     break;
 
-  case 54:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 685 "program_parse.y"
+#line 731 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2636,10 +2689,10 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 57:
 
 /* Line 1455 of yacc.c  */
-#line 696 "program_parse.y"
+#line 742 "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)) {
@@ -2662,10 +2715,10 @@ yyreduce:
        ;}
     break;
 
-  case 56:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 717 "program_parse.y"
+#line 763 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2675,10 +2728,10 @@ yyreduce:
        ;}
     break;
 
-  case 57:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 727 "program_parse.y"
+#line 773 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2686,10 +2739,10 @@ yyreduce:
        ;}
     break;
 
-  case 58:
+  case 60:
 
 /* Line 1455 of yacc.c  */
-#line 733 "program_parse.y"
+#line 779 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2720,10 +2773,10 @@ yyreduce:
        ;}
     break;
 
-  case 59:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 764 "program_parse.y"
+#line 810 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2740,20 +2793,20 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 783 "program_parse.y"
+#line 829 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 63:
+  case 65:
 
 /* Line 1455 of yacc.c  */
-#line 790 "program_parse.y"
+#line 836 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2765,31 +2818,31 @@ yyreduce:
        ;}
     break;
 
-  case 64:
+  case 66:
 
 /* Line 1455 of yacc.c  */
-#line 801 "program_parse.y"
+#line 847 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 65:
+  case 67:
 
 /* Line 1455 of yacc.c  */
-#line 802 "program_parse.y"
+#line 848 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 66:
+  case 68:
 
 /* Line 1455 of yacc.c  */
-#line 803 "program_parse.y"
+#line 849 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 67:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 807 "program_parse.y"
+#line 853 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2801,10 +2854,10 @@ yyreduce:
        ;}
     break;
 
-  case 68:
+  case 70:
 
 /* Line 1455 of yacc.c  */
-#line 819 "program_parse.y"
+#line 865 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2816,10 +2869,10 @@ yyreduce:
        ;}
     break;
 
-  case 69:
+  case 71:
 
 /* Line 1455 of yacc.c  */
-#line 831 "program_parse.y"
+#line 877 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2837,10 +2890,10 @@ yyreduce:
        ;}
     break;
 
-  case 70:
+  case 72:
 
 /* Line 1455 of yacc.c  */
-#line 849 "program_parse.y"
+#line 895 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2851,10 +2904,10 @@ yyreduce:
        ;}
     break;
 
-  case 71:
+  case 73:
 
 /* Line 1455 of yacc.c  */
-#line 860 "program_parse.y"
+#line 906 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2866,24 +2919,24 @@ yyreduce:
        ;}
     break;
 
-  case 76:
+  case 78:
 
 /* Line 1455 of yacc.c  */
-#line 876 "program_parse.y"
+#line 922 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 81:
+  case 83:
 
 /* Line 1455 of yacc.c  */
-#line 880 "program_parse.y"
+#line 926 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 88:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 892 "program_parse.y"
+#line 938 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -2901,55 +2954,55 @@ yyreduce:
        ;}
     break;
 
-  case 89:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 910 "program_parse.y"
+#line 956 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 90:
+  case 92:
 
 /* Line 1455 of yacc.c  */
-#line 914 "program_parse.y"
+#line 960 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 91:
+  case 93:
 
 /* Line 1455 of yacc.c  */
-#line 920 "program_parse.y"
+#line 966 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
     break;
 
-  case 92:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 924 "program_parse.y"
+#line 970 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
     break;
 
-  case 93:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 928 "program_parse.y"
+#line 974 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
     break;
 
-  case 94:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 932 "program_parse.y"
+#line 978 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -2960,10 +3013,10 @@ yyreduce:
        ;}
     break;
 
-  case 95:
+  case 97:
 
 /* Line 1455 of yacc.c  */
-#line 941 "program_parse.y"
+#line 987 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -2974,38 +3027,38 @@ yyreduce:
        ;}
     break;
 
-  case 96:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 950 "program_parse.y"
+#line 996 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 97:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 954 "program_parse.y"
+#line 1000 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 98:
+  case 100:
 
 /* Line 1455 of yacc.c  */
-#line 959 "program_parse.y"
+#line 1005 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 99:
+  case 101:
 
 /* Line 1455 of yacc.c  */
-#line 965 "program_parse.y"
+#line 1011 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -3016,46 +3069,46 @@ yyreduce:
        ;}
     break;
 
-  case 103:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 979 "program_parse.y"
+#line 1025 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
     break;
 
-  case 104:
+  case 106:
 
 /* Line 1455 of yacc.c  */
-#line 983 "program_parse.y"
+#line 1029 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 105:
+  case 107:
 
 /* Line 1455 of yacc.c  */
-#line 987 "program_parse.y"
+#line 1033 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
     break;
 
-  case 106:
+  case 108:
 
 /* Line 1455 of yacc.c  */
-#line 991 "program_parse.y"
+#line 1037 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 109:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 999 "program_parse.y"
+#line 1045 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -3071,10 +3124,10 @@ yyreduce:
        ;}
     break;
 
-  case 110:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 1015 "program_parse.y"
+#line 1061 "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, 
@@ -3096,19 +3149,19 @@ yyreduce:
        ;}
     break;
 
-  case 111:
+  case 113:
 
 /* Line 1455 of yacc.c  */
-#line 1037 "program_parse.y"
+#line 1083 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 112:
+  case 114:
 
 /* Line 1455 of yacc.c  */
-#line 1041 "program_parse.y"
+#line 1087 "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");
@@ -3119,38 +3172,38 @@ yyreduce:
        ;}
     break;
 
-  case 113:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 1052 "program_parse.y"
+#line 1098 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
     break;
 
-  case 114:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 1058 "program_parse.y"
+#line 1104 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
     break;
 
-  case 116:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1065 "program_parse.y"
+#line 1111 "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 117:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1072 "program_parse.y"
+#line 1118 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3158,10 +3211,10 @@ yyreduce:
        ;}
     break;
 
-  case 118:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1078 "program_parse.y"
+#line 1124 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3169,10 +3222,10 @@ yyreduce:
        ;}
     break;
 
-  case 119:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1084 "program_parse.y"
+#line 1130 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3180,10 +3233,10 @@ yyreduce:
        ;}
     break;
 
-  case 120:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1092 "program_parse.y"
+#line 1138 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3191,10 +3244,10 @@ yyreduce:
        ;}
     break;
 
-  case 121:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1098 "program_parse.y"
+#line 1144 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3202,10 +3255,10 @@ yyreduce:
        ;}
     break;
 
-  case 122:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1104 "program_parse.y"
+#line 1150 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3213,10 +3266,10 @@ yyreduce:
        ;}
     break;
 
-  case 123:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1112 "program_parse.y"
+#line 1158 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3224,10 +3277,10 @@ yyreduce:
        ;}
     break;
 
-  case 124:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1118 "program_parse.y"
+#line 1164 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3235,10 +3288,10 @@ yyreduce:
        ;}
     break;
 
-  case 125:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1124 "program_parse.y"
+#line 1170 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3246,101 +3299,101 @@ yyreduce:
        ;}
     break;
 
-  case 126:
-
-/* Line 1455 of yacc.c  */
-#line 1131 "program_parse.y"
-    { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
-    break;
-
-  case 127:
-
-/* Line 1455 of yacc.c  */
-#line 1132 "program_parse.y"
-    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
-    break;
-
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1135 "program_parse.y"
-    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
+#line 1177 "program_parse.y"
+    { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1136 "program_parse.y"
+#line 1178 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1137 "program_parse.y"
+#line 1181 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1138 "program_parse.y"
+#line 1182 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1139 "program_parse.y"
+#line 1183 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1140 "program_parse.y"
+#line 1184 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "program_parse.y"
+#line 1185 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1142 "program_parse.y"
+#line 1186 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1143 "program_parse.y"
+#line 1187 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1144 "program_parse.y"
+#line 1188 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1145 "program_parse.y"
+#line 1189 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1149 "program_parse.y"
+#line 1190 "program_parse.y"
+    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
+    break;
+
+  case 140:
+
+/* Line 1455 of yacc.c  */
+#line 1191 "program_parse.y"
+    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
+    break;
+
+  case 141:
+
+/* Line 1455 of yacc.c  */
+#line 1195 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3349,37 +3402,37 @@ yyreduce:
        ;}
     break;
 
-  case 140:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1158 "program_parse.y"
+#line 1204 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 141:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1162 "program_parse.y"
+#line 1208 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 142:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1166 "program_parse.y"
+#line 1212 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 143:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1172 "program_parse.y"
+#line 1218 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3388,28 +3441,28 @@ yyreduce:
        ;}
     break;
 
-  case 144:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1181 "program_parse.y"
+#line 1227 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 145:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1185 "program_parse.y"
+#line 1231 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 146:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1189 "program_parse.y"
+#line 1235 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3420,57 +3473,57 @@ yyreduce:
        ;}
     break;
 
-  case 147:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1198 "program_parse.y"
+#line 1244 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 148:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1202 "program_parse.y"
+#line 1248 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 149:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1208 "program_parse.y"
+#line 1254 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 150:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1214 "program_parse.y"
+#line 1260 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 151:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1221 "program_parse.y"
+#line 1267 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 152:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1226 "program_parse.y"
+#line 1272 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3478,10 +3531,10 @@ yyreduce:
        ;}
     break;
 
-  case 153:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1234 "program_parse.y"
+#line 1280 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3491,10 +3544,10 @@ yyreduce:
        ;}
     break;
 
-  case 155:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1246 "program_parse.y"
+#line 1292 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3502,46 +3555,46 @@ yyreduce:
        ;}
     break;
 
-  case 156:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1254 "program_parse.y"
+#line 1300 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 157:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1260 "program_parse.y"
+#line 1306 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 158:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1264 "program_parse.y"
+#line 1310 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 159:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1268 "program_parse.y"
+#line 1314 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 160:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1274 "program_parse.y"
+#line 1320 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3552,10 +3605,10 @@ yyreduce:
        ;}
     break;
 
-  case 161:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1285 "program_parse.y"
+#line 1331 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3564,92 +3617,92 @@ yyreduce:
        ;}
     break;
 
-  case 162:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1294 "program_parse.y"
+#line 1340 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 163:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1298 "program_parse.y"
+#line 1344 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 164:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1303 "program_parse.y"
+#line 1349 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 165:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1307 "program_parse.y"
+#line 1353 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 166:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1311 "program_parse.y"
+#line 1357 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 167:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1315 "program_parse.y"
+#line 1361 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 168:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1321 "program_parse.y"
+#line 1367 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 169:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1328 "program_parse.y"
+#line 1374 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 170:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1332 "program_parse.y"
+#line 1378 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 171:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1338 "program_parse.y"
+#line 1384 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3657,10 +3710,10 @@ yyreduce:
        ;}
     break;
 
-  case 172:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1346 "program_parse.y"
+#line 1392 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3671,38 +3724,38 @@ yyreduce:
        ;}
     break;
 
-  case 173:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "program_parse.y"
+#line 1403 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 174:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1364 "program_parse.y"
+#line 1410 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 175:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1368 "program_parse.y"
+#line 1414 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 176:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1374 "program_parse.y"
+#line 1420 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3712,10 +3765,10 @@ yyreduce:
        ;}
     break;
 
-  case 177:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1384 "program_parse.y"
+#line 1430 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3725,20 +3778,20 @@ yyreduce:
        ;}
     break;
 
-  case 178:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1394 "program_parse.y"
+#line 1440 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 179:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1399 "program_parse.y"
+#line 1445 "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).
@@ -3756,10 +3809,10 @@ yyreduce:
        ;}
     break;
 
-  case 180:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1417 "program_parse.y"
+#line 1463 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3767,55 +3820,55 @@ yyreduce:
        ;}
     break;
 
-  case 181:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1425 "program_parse.y"
+#line 1471 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 182:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1429 "program_parse.y"
+#line 1475 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 183:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1435 "program_parse.y"
+#line 1481 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 184:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1439 "program_parse.y"
+#line 1485 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 185:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1443 "program_parse.y"
+#line 1489 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 186:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1449 "program_parse.y"
+#line 1495 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3826,88 +3879,88 @@ yyreduce:
        ;}
     break;
 
-  case 187:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1460 "program_parse.y"
+#line 1506 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 188:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1465 "program_parse.y"
+#line 1511 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 189:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1470 "program_parse.y"
+#line 1516 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 190:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1475 "program_parse.y"
+#line 1521 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 191:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1480 "program_parse.y"
+#line 1526 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 192:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1485 "program_parse.y"
+#line 1531 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 193:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1492 "program_parse.y"
+#line 1538 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 194:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1496 "program_parse.y"
+#line 1542 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 195:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1501 "program_parse.y"
+#line 1547 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -3921,10 +3974,10 @@ yyreduce:
        ;}
     break;
 
-  case 196:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1514 "program_parse.y"
+#line 1560 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -3933,10 +3986,10 @@ yyreduce:
        ;}
     break;
 
-  case 197:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1522 "program_parse.y"
+#line 1568 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -3947,20 +4000,20 @@ yyreduce:
        ;}
     break;
 
-  case 198:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1533 "program_parse.y"
+#line 1579 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_DEPTH_RANGE;
        ;}
     break;
 
-  case 203:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 1545 "program_parse.y"
+#line 1591 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -3970,30 +4023,30 @@ yyreduce:
        ;}
     break;
 
-  case 204:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 1555 "program_parse.y"
+#line 1601 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 205:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 1560 "program_parse.y"
+#line 1606 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 206:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 1567 "program_parse.y"
+#line 1613 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4003,10 +4056,10 @@ yyreduce:
        ;}
     break;
 
-  case 207:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1577 "program_parse.y"
+#line 1623 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4016,30 +4069,30 @@ yyreduce:
        ;}
     break;
 
-  case 208:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1586 "program_parse.y"
+#line 1632 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 209:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1591 "program_parse.y"
+#line 1637 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 210:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1598 "program_parse.y"
+#line 1644 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4049,10 +4102,10 @@ yyreduce:
        ;}
     break;
 
-  case 211:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1608 "program_parse.y"
+#line 1654 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -4062,10 +4115,10 @@ yyreduce:
        ;}
     break;
 
-  case 212:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "program_parse.y"
+#line 1664 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -4075,10 +4128,10 @@ yyreduce:
        ;}
     break;
 
-  case 217:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1633 "program_parse.y"
+#line 1679 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4088,10 +4141,10 @@ yyreduce:
        ;}
     break;
 
-  case 218:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1643 "program_parse.y"
+#line 1689 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4101,10 +4154,10 @@ yyreduce:
        ;}
     break;
 
-  case 219:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 1651 "program_parse.y"
+#line 1697 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
@@ -4114,10 +4167,10 @@ yyreduce:
        ;}
     break;
 
-  case 220:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1661 "program_parse.y"
+#line 1707 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -4127,10 +4180,10 @@ yyreduce:
        ;}
     break;
 
-  case 221:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1669 "program_parse.y"
+#line 1715 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4140,10 +4193,10 @@ yyreduce:
        ;}
     break;
 
-  case 222:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1678 "program_parse.y"
+#line 1724 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4153,10 +4206,10 @@ yyreduce:
        ;}
     break;
 
-  case 223:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1687 "program_parse.y"
+#line 1733 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4166,63 +4219,63 @@ yyreduce:
        ;}
     break;
 
-  case 224:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1697 "program_parse.y"
+#line 1743 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 225:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1701 "program_parse.y"
+#line 1747 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 226:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1706 "program_parse.y"
+#line 1752 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 227:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1707 "program_parse.y"
+#line 1753 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 228:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 1708 "program_parse.y"
+#line 1754 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 229:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1711 "program_parse.y"
+#line 1757 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 231:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1714 "program_parse.y"
+#line 1760 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 233:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1718 "program_parse.y"
+#line 1764 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4230,10 +4283,10 @@ yyreduce:
        ;}
     break;
 
-  case 234:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1724 "program_parse.y"
+#line 1770 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4241,10 +4294,10 @@ yyreduce:
        ;}
     break;
 
-  case 235:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1732 "program_parse.y"
+#line 1778 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@@ -4257,10 +4310,10 @@ yyreduce:
        ;}
     break;
 
-  case 236:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1745 "program_parse.y"
+#line 1791 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4271,10 +4324,10 @@ yyreduce:
        ;}
     break;
 
-  case 237:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1754 "program_parse.y"
+#line 1800 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4285,19 +4338,19 @@ yyreduce:
        ;}
     break;
 
-  case 238:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1763 "program_parse.y"
+#line 1809 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 239:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1767 "program_parse.y"
+#line 1813 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4308,10 +4361,10 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1776 "program_parse.y"
+#line 1822 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4322,10 +4375,10 @@ yyreduce:
        ;}
     break;
 
-  case 241:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1785 "program_parse.y"
+#line 1831 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4336,19 +4389,19 @@ yyreduce:
        ;}
     break;
 
-  case 242:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1796 "program_parse.y"
+#line 1842 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 243:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1802 "program_parse.y"
+#line 1848 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4356,10 +4409,10 @@ yyreduce:
        ;}
     break;
 
-  case 244:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1808 "program_parse.y"
+#line 1854 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4370,10 +4423,10 @@ yyreduce:
        ;}
     break;
 
-  case 245:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1817 "program_parse.y"
+#line 1863 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4384,19 +4437,19 @@ yyreduce:
        ;}
     break;
 
-  case 246:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1828 "program_parse.y"
+#line 1874 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 247:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1832 "program_parse.y"
+#line 1878 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4407,10 +4460,10 @@ yyreduce:
        ;}
     break;
 
-  case 248:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1841 "program_parse.y"
+#line 1887 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4421,94 +4474,94 @@ yyreduce:
        ;}
     break;
 
-  case 249:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1851 "program_parse.y"
+#line 1897 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 250:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1852 "program_parse.y"
+#line 1898 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 251:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1853 "program_parse.y"
+#line 1899 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 252:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1856 "program_parse.y"
+#line 1902 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 253:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1857 "program_parse.y"
+#line 1903 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 254:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1858 "program_parse.y"
+#line 1904 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 255:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1861 "program_parse.y"
+#line 1907 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 256:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1862 "program_parse.y"
+#line 1908 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 257:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1865 "program_parse.y"
+#line 1911 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 258:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1866 "program_parse.y"
+#line 1912 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 259:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1869 "program_parse.y"
+#line 1915 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 260:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1870 "program_parse.y"
+#line 1916 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 261:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1874 "program_parse.y"
+#line 1920 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4519,10 +4572,10 @@ yyreduce:
        ;}
     break;
 
-  case 262:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1885 "program_parse.y"
+#line 1931 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4533,10 +4586,10 @@ yyreduce:
        ;}
     break;
 
-  case 263:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1896 "program_parse.y"
+#line 1942 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4547,10 +4600,10 @@ yyreduce:
        ;}
     break;
 
-  case 264:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 1907 "program_parse.y"
+#line 1953 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4574,7 +4627,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4578 "program_parse.tab.c"
+#line 4631 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4793,7 +4846,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1927 "program_parse.y"
+#line 1973 "program_parse.y"
 
 
 struct asm_instruction *
index 9dab00c3856819e2617e7b9fd8a8c3d0c0d953b0..4cd459a096fc7d6a1f7039178294c115e6824e81 100644 (file)
@@ -177,7 +177,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
 %type <inst> instruction ALU_instruction TexInstruction
 %type <inst> ARL_instruction VECTORop_instruction
 %type <inst> SCALARop_instruction BINSCop_instruction BINop_instruction
-%type <inst> TRIop_instruction SWZ_instruction SAMPLE_instruction
+%type <inst> TRIop_instruction TXD_instruction SWZ_instruction SAMPLE_instruction
 %type <inst> KIL_instruction
 
 %type <dst_reg> dstReg maskedDstReg maskedAddrReg
@@ -347,6 +347,7 @@ ALU_instruction: ARL_instruction
 
 TexInstruction: SAMPLE_instruction
        | KIL_instruction
+       | TXD_instruction
        ;
 
 ARL_instruction: ARL maskedAddrReg ',' scalarSrcReg
@@ -444,6 +445,51 @@ KIL_instruction: KIL swizzleSrcReg
        }
        ;
 
+TXD_instruction: TXD_OP maskedDstReg ',' swizzleSrcReg ',' swizzleSrcReg ',' swizzleSrcReg ',' texImageUnit ',' texTarget
+       {
+          $$ = asm_instruction_ctor($1.Opcode, & $2, & $4, & $6, & $8);
+          if ($$ != NULL) {
+             const GLbitfield tex_mask = (1U << $10);
+             GLbitfield shadow_tex = 0;
+             GLbitfield target_mask = 0;
+
+
+             $$->Base.SaturateMode = $1.SaturateMode;
+             $$->Base.TexSrcUnit = $10;
+
+             if ($12 < 0) {
+                shadow_tex = tex_mask;
+
+                $$->Base.TexSrcTarget = -$12;
+                $$->Base.TexShadow = 1;
+             } else {
+                $$->Base.TexSrcTarget = $12;
+             }
+
+             target_mask = (1U << $$->Base.TexSrcTarget);
+
+             /* If this texture unit was previously accessed and that access
+              * had a different texture target, generate an error.
+              *
+              * If this texture unit was previously accessed and that access
+              * had a different shadow mode, generate an error.
+              */
+             if ((state->prog->TexturesUsed[$10] != 0)
+                 && ((state->prog->TexturesUsed[$10] != target_mask)
+                     || ((state->prog->ShadowSamplers & tex_mask)
+                         != shadow_tex))) {
+                yyerror(& @12, state,
+                        "multiple targets used on one texture image unit");
+                YYERROR;
+             }
+
+
+             state->prog->TexturesUsed[$10] |= target_mask;
+             state->prog->ShadowSamplers |= shadow_tex;
+          }
+       }
+       ;
+
 texImageUnit: TEXTURE_UNIT optTexImageUnitNum
        {
           $$ = $2;