Merge branch 'asm-shader-rework-2'
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 25 Sep 2009 23:57:38 +0000 (16:57 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 25 Sep 2009 23:57:38 +0000 (16:57 -0700)
Conflicts:
src/mesa/shader/program_parse.tab.c

1  2 
src/mesa/drivers/dri/swrast/swrast.c
src/mesa/main/extensions.c
src/mesa/main/mtypes.h
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.y

Simple merge
Simple merge
Simple merge
index 2de950b73b69055707b643bc17532767cfbde10d,c51b4d2f282ddceb8e21ee625c02d516cd97b052..c0f50147bd97478e30acb0d1753b14312bc537f7
@@@ -763,33 -782,35 +782,35 @@@ static const yytype_int16 yyrhs[] 
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
  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,   820,   834,
-      852,   863,   875,   877,   878,   879,   880,   883,   883,   883,
-      883,   884,   887,   888,   889,   890,   891,   892,   895,   913,
-      917,   923,   927,   931,   935,   944,   953,   957,   962,   968,
-      979,   979,   980,   982,   986,   990,   994,  1000,  1000,  1002,
-     1018,  1041,  1044,  1055,  1061,  1067,  1068,  1075,  1081,  1087,
-     1095,  1101,  1107,  1115,  1121,  1127,  1135,  1136,  1139,  1140,
-     1141,  1142,  1143,  1144,  1145,  1146,  1147,  1148,  1149,  1152,
-     1161,  1165,  1169,  1175,  1184,  1188,  1192,  1201,  1205,  1211,
-     1217,  1224,  1229,  1237,  1247,  1249,  1257,  1263,  1267,  1271,
-     1277,  1288,  1297,  1301,  1306,  1310,  1314,  1318,  1324,  1331,
-     1335,  1341,  1349,  1360,  1367,  1371,  1377,  1387,  1398,  1402,
-     1420,  1429,  1432,  1438,  1442,  1446,  1452,  1463,  1468,  1473,
-     1478,  1483,  1488,  1496,  1499,  1504,  1517,  1525,  1536,  1544,
-     1544,  1546,  1546,  1548,  1558,  1563,  1570,  1580,  1589,  1594,
-     1601,  1611,  1621,  1633,  1633,  1634,  1634,  1636,  1646,  1654,
-     1664,  1672,  1680,  1689,  1700,  1704,  1710,  1711,  1712,  1715,
-     1715,  1718,  1718,  1721,  1727,  1735,  1748,  1757,  1766,  1770,
-     1779,  1788,  1799,  1806,  1811,  1820,  1832,  1835,  1844,  1855,
-     1856,  1857,  1860,  1861,  1862,  1865,  1866,  1869,  1870,  1873,
-     1874,  1877,  1888,  1899,  1910
+        0,   268,   268,   271,   279,   291,   292,   295,   317,   318,
+      321,   336,   339,   344,   351,   352,   353,   354,   355,   356,
+      357,   360,   361,   362,   365,   371,   377,   383,   390,   396,
+      403,   447,   452,   462,   506,   512,   513,   514,   515,   516,
+      517,   518,   519,   520,   521,   522,   523,   526,   538,   546,
+      563,   570,   589,   600,   620,   645,   654,   687,   694,   709,
+      759,   801,   812,   833,   843,   849,   880,   897,   897,   899,
 -     906,   918,   919,   920,   923,   935,   947,   965,   976,   988,
 -     990,   991,   992,   993,   996,   996,   996,   996,   997,  1000,
 -    1004,  1009,  1016,  1023,  1030,  1053,  1076,  1077,  1078,  1079,
 -    1080,  1081,  1084,  1102,  1106,  1112,  1116,  1120,  1124,  1133,
 -    1142,  1146,  1151,  1157,  1168,  1168,  1169,  1171,  1175,  1179,
 -    1183,  1189,  1189,  1191,  1207,  1230,  1233,  1244,  1250,  1256,
 -    1257,  1264,  1270,  1276,  1284,  1290,  1296,  1304,  1310,  1316,
 -    1324,  1325,  1328,  1329,  1330,  1331,  1332,  1333,  1334,  1335,
 -    1336,  1337,  1338,  1341,  1350,  1354,  1358,  1364,  1373,  1377,
 -    1381,  1390,  1394,  1400,  1406,  1413,  1418,  1426,  1436,  1438,
 -    1446,  1452,  1456,  1460,  1466,  1477,  1486,  1490,  1495,  1499,
 -    1503,  1507,  1513,  1520,  1524,  1530,  1538,  1549,  1556,  1560,
 -    1566,  1576,  1587,  1591,  1609,  1618,  1621,  1627,  1631,  1635,
 -    1641,  1652,  1657,  1662,  1667,  1672,  1677,  1685,  1688,  1693,
 -    1706,  1714,  1725,  1733,  1733,  1735,  1735,  1737,  1747,  1752,
 -    1759,  1769,  1778,  1783,  1790,  1800,  1810,  1822,  1822,  1823,
 -    1823,  1825,  1835,  1843,  1853,  1861,  1869,  1878,  1889,  1893,
 -    1899,  1900,  1901,  1904,  1904,  1907,  1942,  1946,  1946,  1949,
 -    1955,  1963,  1976,  1985,  1994,  1998,  2007,  2016,  2027,  2034,
 -    2039,  2048,  2060,  2063,  2072,  2083,  2084,  2085,  2088,  2089,
 -    2090,  2093,  2094,  2097,  2098,  2101,  2102,  2105,  2116,  2127,
 -    2138,  2159,  2160
++     906,   918,   919,   920,   923,   937,   951,   969,   980,   992,
++     994,   995,   996,   997,  1000,  1000,  1000,  1000,  1001,  1004,
++    1008,  1013,  1020,  1027,  1034,  1057,  1080,  1081,  1082,  1083,
++    1084,  1085,  1088,  1106,  1110,  1116,  1120,  1124,  1128,  1137,
++    1146,  1150,  1155,  1161,  1172,  1172,  1173,  1175,  1179,  1183,
++    1187,  1193,  1193,  1195,  1211,  1234,  1237,  1248,  1254,  1260,
++    1261,  1268,  1274,  1280,  1288,  1294,  1300,  1308,  1314,  1320,
++    1328,  1329,  1332,  1333,  1334,  1335,  1336,  1337,  1338,  1339,
++    1340,  1341,  1342,  1345,  1354,  1358,  1362,  1368,  1377,  1381,
++    1385,  1394,  1398,  1404,  1410,  1417,  1422,  1430,  1440,  1442,
++    1450,  1456,  1460,  1464,  1470,  1481,  1490,  1494,  1499,  1503,
++    1507,  1511,  1517,  1524,  1528,  1534,  1542,  1553,  1560,  1564,
++    1570,  1580,  1591,  1595,  1613,  1622,  1625,  1631,  1635,  1639,
++    1645,  1656,  1661,  1666,  1671,  1676,  1681,  1689,  1692,  1697,
++    1710,  1718,  1729,  1737,  1737,  1739,  1739,  1741,  1751,  1756,
++    1763,  1773,  1782,  1787,  1794,  1804,  1814,  1826,  1826,  1827,
++    1827,  1829,  1839,  1847,  1857,  1865,  1873,  1882,  1893,  1897,
++    1903,  1904,  1905,  1908,  1908,  1911,  1946,  1950,  1950,  1953,
++    1959,  1967,  1980,  1989,  1998,  2002,  2011,  2020,  2031,  2038,
++    2043,  2052,  2064,  2067,  2076,  2087,  2088,  2089,  2092,  2093,
++    2094,  2097,  2098,  2101,  2102,  2105,  2106,  2109,  2120,  2131,
++    2142,  2163,  2164
  };
  #endif
  
@@@ -2785,16 -2965,14 +2965,16 @@@ yyreduce
      { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
      break;
  
-   case 67:
+   case 74:
  
  /* Line 1455 of yacc.c  */
- #line 807 "program_parse.y"
+ #line 924 "program_parse.y"
      {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
 -            yyerror(& (yylsp[(1) - (1)]), state,
 -                    "relative address offset too large (positive)");
 +              char s[100];
 +              _mesa_snprintf(s, sizeof(s),
 +                             "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
 +            yyerror(& (yylsp[(1) - (1)]), state, s);
              YYERROR;
           } else {
              (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 68:
+   case 75:
  
  /* Line 1455 of yacc.c  */
- #line 821 "program_parse.y"
 -#line 936 "program_parse.y"
++#line 938 "program_parse.y"
      {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
 -            yyerror(& (yylsp[(1) - (1)]), state,
 -                    "relative address offset too large (negative)");
 +              char s[100];
 +              _mesa_snprintf(s, sizeof(s),
 +                             "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
 +            yyerror(& (yylsp[(1) - (1)]), state, s);
              YYERROR;
           } else {
              (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 69:
+   case 76:
  
  /* Line 1455 of yacc.c  */
- #line 835 "program_parse.y"
 -#line 948 "program_parse.y"
++#line 952 "program_parse.y"
      {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
        ;}
      break;
  
-   case 70:
+   case 77:
  
  /* Line 1455 of yacc.c  */
- #line 853 "program_parse.y"
 -#line 966 "program_parse.y"
++#line 970 "program_parse.y"
      {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
        ;}
      break;
  
-   case 71:
+   case 78:
  
  /* Line 1455 of yacc.c  */
- #line 864 "program_parse.y"
 -#line 977 "program_parse.y"
++#line 981 "program_parse.y"
      {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
        ;}
      break;
  
-   case 76:
- /* Line 1455 of yacc.c  */
- #line 880 "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 884 "program_parse.y"
 -#line 993 "program_parse.y"
++#line 997 "program_parse.y"
      { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
      break;
  
    case 88:
  
  /* Line 1455 of yacc.c  */
- #line 896 "program_parse.y"
-     {
-          struct asm_symbol *const s =
-             declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
-          if (s == NULL) {
-             YYERROR;
-          } else {
-             s->attrib_binding = (yyvsp[(4) - (4)].attrib);
-             state->InputsBound |= (1U << s->attrib_binding);
-             if (!validate_inputs(& (yylsp[(4) - (4)]), state)) {
-                YYERROR;
-             }
-          }
-       ;}
 -#line 997 "program_parse.y"
++#line 1001 "program_parse.y"
+     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
      break;
  
    case 89:
  
  /* Line 1455 of yacc.c  */
- #line 914 "program_parse.y"
 -#line 1001 "program_parse.y"
++#line 1005 "program_parse.y"
      {
-          (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
+          (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
        ;}
      break;
  
    case 90:
  
  /* Line 1455 of yacc.c  */
- #line 918 "program_parse.y"
 -#line 1005 "program_parse.y"
++#line 1009 "program_parse.y"
      {
-          (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
+          (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
        ;}
      break;
  
    case 91:
  
  /* Line 1455 of yacc.c  */
- #line 924 "program_parse.y"
 -#line 1009 "program_parse.y"
++#line 1013 "program_parse.y"
      {
-          (yyval.attrib) = VERT_ATTRIB_POS;
+          (yyval.dst_reg).CondMask = COND_TR;
+          (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
+          (yyval.dst_reg).CondSrc = 0;
        ;}
      break;
  
    case 92:
  
  /* Line 1455 of yacc.c  */
- #line 928 "program_parse.y"
 -#line 1017 "program_parse.y"
++#line 1021 "program_parse.y"
      {
-          (yyval.attrib) = VERT_ATTRIB_WEIGHT;
+          (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
+          (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
        ;}
      break;
  
    case 93:
  
  /* Line 1455 of yacc.c  */
- #line 932 "program_parse.y"
 -#line 1024 "program_parse.y"
++#line 1028 "program_parse.y"
      {
-          (yyval.attrib) = VERT_ATTRIB_NORMAL;
+          (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
+          (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
        ;}
      break;
  
    case 94:
  
  /* Line 1455 of yacc.c  */
- #line 936 "program_parse.y"
 -#line 1031 "program_parse.y"
++#line 1035 "program_parse.y"
      {
-          if (!state->ctx->Extensions.EXT_secondary_color) {
-             yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
+          const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
+          if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
              YYERROR;
           }
  
    case 95:
  
  /* Line 1455 of yacc.c  */
- #line 945 "program_parse.y"
 -#line 1054 "program_parse.y"
++#line 1058 "program_parse.y"
      {
-          if (!state->ctx->Extensions.EXT_fog_coord) {
-             yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
+          const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
+          if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
+             char *const err_str =
+                make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid condition code");
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
              YYERROR;
           }
  
        ;}
      break;
  
-   case 96:
+   case 102:
  
  /* Line 1455 of yacc.c  */
- #line 954 "program_parse.y"
 -#line 1085 "program_parse.y"
++#line 1089 "program_parse.y"
      {
-          (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
-       ;}
-     break;
-   case 97:
+          struct asm_symbol *const s =
+             declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
  
- /* Line 1455 of yacc.c  */
- #line 958 "program_parse.y"
-     {
+          if (s == NULL) {
+             YYERROR;
+          } else {
+             s->attrib_binding = (yyvsp[(4) - (4)].attrib);
+             state->InputsBound |= (1U << s->attrib_binding);
+             if (!validate_inputs(& (yylsp[(4) - (4)]), state)) {
+                YYERROR;
+             }
+          }
+       ;}
+     break;
+   case 103:
+ /* Line 1455 of yacc.c  */
 -#line 1103 "program_parse.y"
++#line 1107 "program_parse.y"
+     {
+          (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
+       ;}
+     break;
+   case 104:
+ /* Line 1455 of yacc.c  */
 -#line 1107 "program_parse.y"
++#line 1111 "program_parse.y"
+     {
+          (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
+       ;}
+     break;
+   case 105:
+ /* Line 1455 of yacc.c  */
 -#line 1113 "program_parse.y"
++#line 1117 "program_parse.y"
+     {
+          (yyval.attrib) = VERT_ATTRIB_POS;
+       ;}
+     break;
+   case 106:
+ /* Line 1455 of yacc.c  */
 -#line 1117 "program_parse.y"
++#line 1121 "program_parse.y"
+     {
+          (yyval.attrib) = VERT_ATTRIB_WEIGHT;
+       ;}
+     break;
+   case 107:
+ /* Line 1455 of yacc.c  */
 -#line 1121 "program_parse.y"
++#line 1125 "program_parse.y"
+     {
+          (yyval.attrib) = VERT_ATTRIB_NORMAL;
+       ;}
+     break;
+   case 108:
+ /* Line 1455 of yacc.c  */
 -#line 1125 "program_parse.y"
++#line 1129 "program_parse.y"
+     {
+          if (!state->ctx->Extensions.EXT_secondary_color) {
+             yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
+             YYERROR;
+          }
+          (yyval.attrib) = VERT_ATTRIB_COLOR0 + (yyvsp[(2) - (2)].integer);
+       ;}
+     break;
+   case 109:
+ /* Line 1455 of yacc.c  */
 -#line 1134 "program_parse.y"
++#line 1138 "program_parse.y"
+     {
+          if (!state->ctx->Extensions.EXT_fog_coord) {
+             yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
+             YYERROR;
+          }
+          (yyval.attrib) = VERT_ATTRIB_FOG;
+       ;}
+     break;
+   case 110:
+ /* Line 1455 of yacc.c  */
 -#line 1143 "program_parse.y"
++#line 1147 "program_parse.y"
+     {
+          (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
+       ;}
+     break;
+   case 111:
+ /* Line 1455 of yacc.c  */
 -#line 1147 "program_parse.y"
++#line 1151 "program_parse.y"
+     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
      break;
  
-   case 98:
+   case 112:
  
  /* Line 1455 of yacc.c  */
- #line 963 "program_parse.y"
 -#line 1152 "program_parse.y"
++#line 1156 "program_parse.y"
      {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
      break;
  
-   case 99:
+   case 113:
  
  /* Line 1455 of yacc.c  */
- #line 969 "program_parse.y"
 -#line 1158 "program_parse.y"
++#line 1162 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
        ;}
      break;
  
-   case 103:
+   case 117:
  
  /* Line 1455 of yacc.c  */
- #line 983 "program_parse.y"
 -#line 1172 "program_parse.y"
++#line 1176 "program_parse.y"
      {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
      break;
  
-   case 104:
+   case 118:
  
  /* Line 1455 of yacc.c  */
- #line 987 "program_parse.y"
 -#line 1176 "program_parse.y"
++#line 1180 "program_parse.y"
      {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 105:
+   case 119:
  
  /* Line 1455 of yacc.c  */
- #line 991 "program_parse.y"
 -#line 1180 "program_parse.y"
++#line 1184 "program_parse.y"
      {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
      break;
  
-   case 106:
+   case 120:
  
  /* Line 1455 of yacc.c  */
- #line 995 "program_parse.y"
 -#line 1184 "program_parse.y"
++#line 1188 "program_parse.y"
      {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 109:
+   case 123:
  
  /* Line 1455 of yacc.c  */
- #line 1003 "program_parse.y"
 -#line 1192 "program_parse.y"
++#line 1196 "program_parse.y"
      {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
        ;}
      break;
  
-   case 110:
+   case 124:
  
  /* Line 1455 of yacc.c  */
- #line 1019 "program_parse.y"
 -#line 1208 "program_parse.y"
++#line 1212 "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, 
        ;}
      break;
  
-   case 111:
+   case 125:
  
  /* Line 1455 of yacc.c  */
- #line 1041 "program_parse.y"
 -#line 1230 "program_parse.y"
++#line 1234 "program_parse.y"
      {
           (yyval.integer) = 0;
        ;}
      break;
  
-   case 112:
+   case 126:
  
  /* Line 1455 of yacc.c  */
- #line 1045 "program_parse.y"
 -#line 1234 "program_parse.y"
++#line 1238 "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");
        ;}
      break;
  
-   case 113:
+   case 127:
  
  /* Line 1455 of yacc.c  */
- #line 1056 "program_parse.y"
 -#line 1245 "program_parse.y"
++#line 1249 "program_parse.y"
      {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
      break;
  
-   case 114:
+   case 128:
  
  /* Line 1455 of yacc.c  */
- #line 1062 "program_parse.y"
 -#line 1251 "program_parse.y"
++#line 1255 "program_parse.y"
      {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
      break;
  
-   case 116:
+   case 130:
  
  /* Line 1455 of yacc.c  */
- #line 1069 "program_parse.y"
 -#line 1258 "program_parse.y"
++#line 1262 "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 131:
  
  /* Line 1455 of yacc.c  */
- #line 1076 "program_parse.y"
 -#line 1265 "program_parse.y"
++#line 1269 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 118:
+   case 132:
  
  /* Line 1455 of yacc.c  */
- #line 1082 "program_parse.y"
 -#line 1271 "program_parse.y"
++#line 1275 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 119:
+   case 133:
  
  /* Line 1455 of yacc.c  */
- #line 1088 "program_parse.y"
 -#line 1277 "program_parse.y"
++#line 1281 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 120:
+   case 134:
  
  /* Line 1455 of yacc.c  */
- #line 1096 "program_parse.y"
 -#line 1285 "program_parse.y"
++#line 1289 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 121:
+   case 135:
  
  /* Line 1455 of yacc.c  */
- #line 1102 "program_parse.y"
 -#line 1291 "program_parse.y"
++#line 1295 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 122:
+   case 136:
  
  /* Line 1455 of yacc.c  */
- #line 1108 "program_parse.y"
 -#line 1297 "program_parse.y"
++#line 1301 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 123:
+   case 137:
  
  /* Line 1455 of yacc.c  */
- #line 1116 "program_parse.y"
 -#line 1305 "program_parse.y"
++#line 1309 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 124:
+   case 138:
  
  /* Line 1455 of yacc.c  */
- #line 1122 "program_parse.y"
 -#line 1311 "program_parse.y"
++#line 1315 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 125:
+   case 139:
  
  /* Line 1455 of yacc.c  */
- #line 1128 "program_parse.y"
 -#line 1317 "program_parse.y"
++#line 1321 "program_parse.y"
      {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
        ;}
      break;
  
-   case 126:
+   case 140:
  
  /* Line 1455 of yacc.c  */
- #line 1135 "program_parse.y"
 -#line 1324 "program_parse.y"
++#line 1328 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 127:
+   case 141:
  
  /* Line 1455 of yacc.c  */
- #line 1136 "program_parse.y"
 -#line 1325 "program_parse.y"
++#line 1329 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 128:
+   case 142:
  
  /* Line 1455 of yacc.c  */
- #line 1139 "program_parse.y"
 -#line 1328 "program_parse.y"
++#line 1332 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 129:
+   case 143:
  
  /* Line 1455 of yacc.c  */
- #line 1140 "program_parse.y"
 -#line 1329 "program_parse.y"
++#line 1333 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 130:
+   case 144:
  
  /* Line 1455 of yacc.c  */
- #line 1141 "program_parse.y"
 -#line 1330 "program_parse.y"
++#line 1334 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 131:
+   case 145:
  
  /* Line 1455 of yacc.c  */
- #line 1142 "program_parse.y"
 -#line 1331 "program_parse.y"
++#line 1335 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 132:
+   case 146:
  
  /* Line 1455 of yacc.c  */
- #line 1143 "program_parse.y"
 -#line 1332 "program_parse.y"
++#line 1336 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 133:
+   case 147:
  
  /* Line 1455 of yacc.c  */
- #line 1144 "program_parse.y"
 -#line 1333 "program_parse.y"
++#line 1337 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 134:
+   case 148:
  
  /* Line 1455 of yacc.c  */
- #line 1145 "program_parse.y"
 -#line 1334 "program_parse.y"
++#line 1338 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 135:
+   case 149:
  
  /* Line 1455 of yacc.c  */
- #line 1146 "program_parse.y"
 -#line 1335 "program_parse.y"
++#line 1339 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 136:
+   case 150:
  
  /* Line 1455 of yacc.c  */
- #line 1147 "program_parse.y"
 -#line 1336 "program_parse.y"
++#line 1340 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 137:
+   case 151:
  
  /* Line 1455 of yacc.c  */
- #line 1148 "program_parse.y"
 -#line 1337 "program_parse.y"
++#line 1341 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 138:
+   case 152:
  
  /* Line 1455 of yacc.c  */
- #line 1149 "program_parse.y"
 -#line 1338 "program_parse.y"
++#line 1342 "program_parse.y"
      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
      break;
  
-   case 139:
+   case 153:
  
  /* Line 1455 of yacc.c  */
- #line 1153 "program_parse.y"
 -#line 1342 "program_parse.y"
++#line 1346 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
        ;}
      break;
  
-   case 140:
+   case 154:
  
  /* Line 1455 of yacc.c  */
- #line 1162 "program_parse.y"
 -#line 1351 "program_parse.y"
++#line 1355 "program_parse.y"
      {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 141:
+   case 155:
  
  /* Line 1455 of yacc.c  */
- #line 1166 "program_parse.y"
 -#line 1355 "program_parse.y"
++#line 1359 "program_parse.y"
      {
           (yyval.integer) = STATE_EMISSION;
        ;}
      break;
  
-   case 142:
+   case 156:
  
  /* Line 1455 of yacc.c  */
- #line 1170 "program_parse.y"
 -#line 1359 "program_parse.y"
++#line 1363 "program_parse.y"
      {
           (yyval.integer) = STATE_SHININESS;
        ;}
      break;
  
-   case 143:
+   case 157:
  
  /* Line 1455 of yacc.c  */
- #line 1176 "program_parse.y"
 -#line 1365 "program_parse.y"
++#line 1369 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
        ;}
      break;
  
-   case 144:
+   case 158:
  
  /* Line 1455 of yacc.c  */
- #line 1185 "program_parse.y"
 -#line 1374 "program_parse.y"
++#line 1378 "program_parse.y"
      {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 145:
+   case 159:
  
  /* Line 1455 of yacc.c  */
- #line 1189 "program_parse.y"
 -#line 1378 "program_parse.y"
++#line 1382 "program_parse.y"
      {
           (yyval.integer) = STATE_POSITION;
        ;}
      break;
  
-   case 146:
+   case 160:
  
  /* Line 1455 of yacc.c  */
- #line 1193 "program_parse.y"
 -#line 1382 "program_parse.y"
++#line 1386 "program_parse.y"
      {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
        ;}
      break;
  
-   case 147:
+   case 161:
  
  /* Line 1455 of yacc.c  */
- #line 1202 "program_parse.y"
 -#line 1391 "program_parse.y"
++#line 1395 "program_parse.y"
      {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 148:
+   case 162:
  
  /* Line 1455 of yacc.c  */
- #line 1206 "program_parse.y"
 -#line 1395 "program_parse.y"
++#line 1399 "program_parse.y"
      {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
      break;
  
-   case 149:
+   case 163:
  
  /* Line 1455 of yacc.c  */
- #line 1212 "program_parse.y"
 -#line 1401 "program_parse.y"
++#line 1405 "program_parse.y"
      {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
      break;
  
-   case 150:
+   case 164:
  
  /* Line 1455 of yacc.c  */
- #line 1218 "program_parse.y"
 -#line 1407 "program_parse.y"
++#line 1411 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
      break;
  
-   case 151:
+   case 165:
  
  /* Line 1455 of yacc.c  */
- #line 1225 "program_parse.y"
 -#line 1414 "program_parse.y"
++#line 1418 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
      break;
  
-   case 152:
+   case 166:
  
  /* Line 1455 of yacc.c  */
- #line 1230 "program_parse.y"
 -#line 1419 "program_parse.y"
++#line 1423 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
        ;}
      break;
  
-   case 153:
+   case 167:
  
  /* Line 1455 of yacc.c  */
- #line 1238 "program_parse.y"
 -#line 1427 "program_parse.y"
++#line 1431 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
        ;}
      break;
  
-   case 155:
+   case 169:
  
  /* Line 1455 of yacc.c  */
- #line 1250 "program_parse.y"
 -#line 1439 "program_parse.y"
++#line 1443 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
        ;}
      break;
  
-   case 156:
+   case 170:
  
  /* Line 1455 of yacc.c  */
- #line 1258 "program_parse.y"
 -#line 1447 "program_parse.y"
++#line 1451 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
      break;
  
-   case 157:
+   case 171:
  
  /* Line 1455 of yacc.c  */
- #line 1264 "program_parse.y"
 -#line 1453 "program_parse.y"
++#line 1457 "program_parse.y"
      {
           (yyval.integer) = STATE_AMBIENT;
        ;}
      break;
  
-   case 158:
+   case 172:
  
  /* Line 1455 of yacc.c  */
- #line 1268 "program_parse.y"
 -#line 1457 "program_parse.y"
++#line 1461 "program_parse.y"
      {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
      break;
  
-   case 159:
+   case 173:
  
  /* Line 1455 of yacc.c  */
- #line 1272 "program_parse.y"
 -#line 1461 "program_parse.y"
++#line 1465 "program_parse.y"
      {
           (yyval.integer) = STATE_SPECULAR;
        ;}
      break;
  
-   case 160:
+   case 174:
  
  /* Line 1455 of yacc.c  */
- #line 1278 "program_parse.y"
 -#line 1467 "program_parse.y"
++#line 1471 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
        ;}
      break;
  
-   case 161:
+   case 175:
  
  /* Line 1455 of yacc.c  */
- #line 1289 "program_parse.y"
 -#line 1478 "program_parse.y"
++#line 1482 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
        ;}
      break;
  
-   case 162:
+   case 176:
  
  /* Line 1455 of yacc.c  */
- #line 1298 "program_parse.y"
 -#line 1487 "program_parse.y"
++#line 1491 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
      break;
  
-   case 163:
+   case 177:
  
  /* Line 1455 of yacc.c  */
- #line 1302 "program_parse.y"
 -#line 1491 "program_parse.y"
++#line 1495 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
      break;
  
-   case 164:
+   case 178:
  
  /* Line 1455 of yacc.c  */
- #line 1307 "program_parse.y"
 -#line 1496 "program_parse.y"
++#line 1500 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
      break;
  
-   case 165:
+   case 179:
  
  /* Line 1455 of yacc.c  */
- #line 1311 "program_parse.y"
 -#line 1500 "program_parse.y"
++#line 1504 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
      break;
  
-   case 166:
+   case 180:
  
  /* Line 1455 of yacc.c  */
- #line 1315 "program_parse.y"
 -#line 1504 "program_parse.y"
++#line 1508 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
      break;
  
-   case 167:
+   case 181:
  
  /* Line 1455 of yacc.c  */
- #line 1319 "program_parse.y"
 -#line 1508 "program_parse.y"
++#line 1512 "program_parse.y"
      {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
      break;
  
-   case 168:
+   case 182:
  
  /* Line 1455 of yacc.c  */
- #line 1325 "program_parse.y"
 -#line 1514 "program_parse.y"
++#line 1518 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 169:
+   case 183:
  
  /* Line 1455 of yacc.c  */
- #line 1332 "program_parse.y"
 -#line 1521 "program_parse.y"
++#line 1525 "program_parse.y"
      {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
      break;
  
-   case 170:
+   case 184:
  
  /* Line 1455 of yacc.c  */
- #line 1336 "program_parse.y"
 -#line 1525 "program_parse.y"
++#line 1529 "program_parse.y"
      {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
      break;
  
-   case 171:
+   case 185:
  
  /* Line 1455 of yacc.c  */
- #line 1342 "program_parse.y"
 -#line 1531 "program_parse.y"
++#line 1535 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
        ;}
      break;
  
-   case 172:
+   case 186:
  
  /* Line 1455 of yacc.c  */
- #line 1350 "program_parse.y"
 -#line 1539 "program_parse.y"
++#line 1543 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
        ;}
      break;
  
-   case 173:
+   case 187:
  
  /* Line 1455 of yacc.c  */
- #line 1361 "program_parse.y"
 -#line 1550 "program_parse.y"
++#line 1554 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 174:
+   case 188:
  
  /* Line 1455 of yacc.c  */
- #line 1368 "program_parse.y"
 -#line 1557 "program_parse.y"
++#line 1561 "program_parse.y"
      {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
      break;
  
-   case 175:
+   case 189:
  
  /* Line 1455 of yacc.c  */
- #line 1372 "program_parse.y"
 -#line 1561 "program_parse.y"
++#line 1565 "program_parse.y"
      {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
      break;
  
-   case 176:
+   case 190:
  
  /* Line 1455 of yacc.c  */
- #line 1378 "program_parse.y"
 -#line 1567 "program_parse.y"
++#line 1571 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
        ;}
      break;
  
-   case 177:
+   case 191:
  
  /* Line 1455 of yacc.c  */
- #line 1388 "program_parse.y"
 -#line 1577 "program_parse.y"
++#line 1581 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
        ;}
      break;
  
-   case 178:
+   case 192:
  
  /* Line 1455 of yacc.c  */
- #line 1398 "program_parse.y"
 -#line 1587 "program_parse.y"
++#line 1591 "program_parse.y"
      {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
      break;
  
-   case 179:
+   case 193:
  
  /* Line 1455 of yacc.c  */
- #line 1403 "program_parse.y"
 -#line 1592 "program_parse.y"
++#line 1596 "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).
        ;}
      break;
  
-   case 180:
+   case 194:
  
  /* Line 1455 of yacc.c  */
- #line 1421 "program_parse.y"
 -#line 1610 "program_parse.y"
++#line 1614 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
        ;}
      break;
  
-   case 181:
+   case 195:
  
  /* Line 1455 of yacc.c  */
- #line 1429 "program_parse.y"
 -#line 1618 "program_parse.y"
++#line 1622 "program_parse.y"
      {
           (yyval.integer) = 0;
        ;}
      break;
  
-   case 182:
+   case 196:
  
  /* Line 1455 of yacc.c  */
- #line 1433 "program_parse.y"
 -#line 1622 "program_parse.y"
++#line 1626 "program_parse.y"
      {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 183:
+   case 197:
  
  /* Line 1455 of yacc.c  */
- #line 1439 "program_parse.y"
 -#line 1628 "program_parse.y"
++#line 1632 "program_parse.y"
      {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
      break;
  
-   case 184:
+   case 198:
  
  /* Line 1455 of yacc.c  */
- #line 1443 "program_parse.y"
 -#line 1632 "program_parse.y"
++#line 1636 "program_parse.y"
      {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
      break;
  
-   case 185:
+   case 199:
  
  /* Line 1455 of yacc.c  */
- #line 1447 "program_parse.y"
 -#line 1636 "program_parse.y"
++#line 1640 "program_parse.y"
      {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
      break;
  
-   case 186:
+   case 200:
  
  /* Line 1455 of yacc.c  */
- #line 1453 "program_parse.y"
 -#line 1642 "program_parse.y"
++#line 1646 "program_parse.y"
      {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
        ;}
      break;
  
-   case 187:
+   case 201:
  
  /* Line 1455 of yacc.c  */
- #line 1464 "program_parse.y"
 -#line 1653 "program_parse.y"
++#line 1657 "program_parse.y"
      {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 188:
+   case 202:
  
  /* Line 1455 of yacc.c  */
- #line 1469 "program_parse.y"
 -#line 1658 "program_parse.y"
++#line 1662 "program_parse.y"
      {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
      break;
  
-   case 189:
+   case 203:
  
  /* Line 1455 of yacc.c  */
- #line 1474 "program_parse.y"
 -#line 1663 "program_parse.y"
++#line 1667 "program_parse.y"
      {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
      break;
  
-   case 190:
+   case 204:
  
  /* Line 1455 of yacc.c  */
- #line 1479 "program_parse.y"
 -#line 1668 "program_parse.y"
++#line 1672 "program_parse.y"
      {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
      break;
  
-   case 191:
+   case 205:
  
  /* Line 1455 of yacc.c  */
- #line 1484 "program_parse.y"
 -#line 1673 "program_parse.y"
++#line 1677 "program_parse.y"
      {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
      break;
  
-   case 192:
+   case 206:
  
  /* Line 1455 of yacc.c  */
- #line 1489 "program_parse.y"
 -#line 1678 "program_parse.y"
++#line 1682 "program_parse.y"
      {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
      break;
  
-   case 193:
+   case 207:
  
  /* Line 1455 of yacc.c  */
- #line 1496 "program_parse.y"
 -#line 1685 "program_parse.y"
++#line 1689 "program_parse.y"
      {
           (yyval.integer) = 0;
        ;}
      break;
  
-   case 194:
+   case 208:
  
  /* Line 1455 of yacc.c  */
- #line 1500 "program_parse.y"
 -#line 1689 "program_parse.y"
++#line 1693 "program_parse.y"
      {
           (yyval.integer) = (yyvsp[(2) - (3)].integer);
        ;}
      break;
  
-   case 195:
+   case 209:
  
  /* Line 1455 of yacc.c  */
- #line 1505 "program_parse.y"
 -#line 1694 "program_parse.y"
++#line 1698 "program_parse.y"
      {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
        ;}
      break;
  
-   case 196:
+   case 210:
  
  /* Line 1455 of yacc.c  */
- #line 1518 "program_parse.y"
 -#line 1707 "program_parse.y"
++#line 1711 "program_parse.y"
      {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
        ;}
      break;
  
-   case 197:
+   case 211:
  
  /* Line 1455 of yacc.c  */
- #line 1526 "program_parse.y"
 -#line 1715 "program_parse.y"
++#line 1719 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
        ;}
      break;
  
-   case 198:
+   case 212:
  
  /* Line 1455 of yacc.c  */
- #line 1537 "program_parse.y"
 -#line 1726 "program_parse.y"
++#line 1730 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_DEPTH_RANGE;
        ;}
      break;
  
-   case 203:
+   case 217:
  
  /* Line 1455 of yacc.c  */
- #line 1549 "program_parse.y"
 -#line 1738 "program_parse.y"
++#line 1742 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
        ;}
      break;
  
-   case 204:
+   case 218:
  
  /* Line 1455 of yacc.c  */
- #line 1559 "program_parse.y"
 -#line 1748 "program_parse.y"
++#line 1752 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 205:
+   case 219:
  
  /* Line 1455 of yacc.c  */
- #line 1564 "program_parse.y"
 -#line 1753 "program_parse.y"
++#line 1757 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
      break;
  
-   case 206:
+   case 220:
  
  /* Line 1455 of yacc.c  */
- #line 1571 "program_parse.y"
 -#line 1760 "program_parse.y"
++#line 1764 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
        ;}
      break;
  
-   case 207:
+   case 221:
  
  /* Line 1455 of yacc.c  */
- #line 1581 "program_parse.y"
 -#line 1770 "program_parse.y"
++#line 1774 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
        ;}
      break;
  
-   case 208:
+   case 222:
  
  /* Line 1455 of yacc.c  */
- #line 1590 "program_parse.y"
 -#line 1779 "program_parse.y"
++#line 1783 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 209:
+   case 223:
  
  /* Line 1455 of yacc.c  */
- #line 1595 "program_parse.y"
 -#line 1784 "program_parse.y"
++#line 1788 "program_parse.y"
      {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
      break;
  
-   case 210:
+   case 224:
  
  /* Line 1455 of yacc.c  */
- #line 1602 "program_parse.y"
 -#line 1791 "program_parse.y"
++#line 1795 "program_parse.y"
      {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
        ;}
      break;
  
-   case 211:
+   case 225:
  
  /* Line 1455 of yacc.c  */
- #line 1612 "program_parse.y"
 -#line 1801 "program_parse.y"
++#line 1805 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
        ;}
      break;
  
-   case 212:
+   case 226:
  
  /* Line 1455 of yacc.c  */
- #line 1622 "program_parse.y"
 -#line 1811 "program_parse.y"
++#line 1815 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
        ;}
      break;
  
-   case 217:
+   case 231:
  
  /* Line 1455 of yacc.c  */
- #line 1637 "program_parse.y"
 -#line 1826 "program_parse.y"
++#line 1830 "program_parse.y"
      {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
      break;
  
-   case 218:
+   case 232:
  
  /* Line 1455 of yacc.c  */
- #line 1647 "program_parse.y"
 -#line 1836 "program_parse.y"
++#line 1840 "program_parse.y"
      {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
        ;}
      break;
  
-   case 219:
+   case 233:
  
  /* Line 1455 of yacc.c  */
- #line 1655 "program_parse.y"
 -#line 1844 "program_parse.y"
++#line 1848 "program_parse.y"
      {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
        ;}
      break;
  
-   case 220:
+   case 234:
  
  /* Line 1455 of yacc.c  */
- #line 1665 "program_parse.y"
 -#line 1854 "program_parse.y"
++#line 1858 "program_parse.y"
      {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
        ;}
      break;
  
-   case 221:
+   case 235:
  
  /* Line 1455 of yacc.c  */
- #line 1673 "program_parse.y"
 -#line 1862 "program_parse.y"
++#line 1866 "program_parse.y"
      {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
        ;}
      break;
  
-   case 222:
+   case 236:
  
  /* Line 1455 of yacc.c  */
- #line 1682 "program_parse.y"
 -#line 1871 "program_parse.y"
++#line 1875 "program_parse.y"
      {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
        ;}
      break;
  
-   case 223:
+   case 237:
  
  /* Line 1455 of yacc.c  */
- #line 1691 "program_parse.y"
 -#line 1880 "program_parse.y"
++#line 1884 "program_parse.y"
      {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
        ;}
      break;
  
-   case 224:
+   case 238:
  
  /* Line 1455 of yacc.c  */
- #line 1701 "program_parse.y"
 -#line 1890 "program_parse.y"
++#line 1894 "program_parse.y"
      {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
      break;
  
-   case 225:
+   case 239:
  
  /* Line 1455 of yacc.c  */
- #line 1705 "program_parse.y"
 -#line 1894 "program_parse.y"
++#line 1898 "program_parse.y"
      {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
      break;
  
-   case 226:
+   case 240:
  
  /* Line 1455 of yacc.c  */
- #line 1710 "program_parse.y"
 -#line 1899 "program_parse.y"
++#line 1903 "program_parse.y"
      { (yyval.negate) = FALSE; ;}
      break;
  
-   case 227:
+   case 241:
  
  /* Line 1455 of yacc.c  */
- #line 1711 "program_parse.y"
 -#line 1900 "program_parse.y"
++#line 1904 "program_parse.y"
      { (yyval.negate) = TRUE;  ;}
      break;
  
-   case 228:
+   case 242:
  
  /* Line 1455 of yacc.c  */
- #line 1712 "program_parse.y"
 -#line 1901 "program_parse.y"
++#line 1905 "program_parse.y"
      { (yyval.negate) = FALSE; ;}
      break;
  
-   case 229:
+   case 243:
  
  /* Line 1455 of yacc.c  */
- #line 1715 "program_parse.y"
-     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
 -#line 1904 "program_parse.y"
++#line 1908 "program_parse.y"
+     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
      break;
  
-   case 231:
+   case 245:
+ /* Line 1455 of yacc.c  */
 -#line 1908 "program_parse.y"
++#line 1912 "program_parse.y"
+     {
+          /* NV_fragment_program_option defines the size qualifiers in a
+           * fairly broken way.  "SHORT" or "LONG" can optionally be used
+           * before TEMP or OUTPUT.  However, neither is a reserved word!
+           * This means that we have to parse it as an identifier, then check
+           * to make sure it's one of the valid values.  *sigh*
+           *
+           * In addition, the grammar in the extension spec does *not* allow
+           * the size specifier to be optional, but all known implementations
+           * do.
+           */
+          if (!state->option.NV_fragment) {
+             yyerror(& (yylsp[(1) - (1)]), state, "unexpected IDENTIFIER");
+             YYERROR;
+          }
+          if (strcmp("SHORT", (yyvsp[(1) - (1)].string)) == 0) {
+          } else if (strcmp("LONG", (yyvsp[(1) - (1)].string)) == 0) {
+          } else {
+             char *const err_str =
+                make_error_string("invalid storage size specifier \"%s\"",
+                                  (yyvsp[(1) - (1)].string));
+             yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
+                     ? err_str : "invalid storage size specifier");
+             if (err_str != NULL) {
+                _mesa_free(err_str);
+             }
+             YYERROR;
+          }
+       ;}
+     break;
+   case 246:
+ /* Line 1455 of yacc.c  */
 -#line 1942 "program_parse.y"
++#line 1946 "program_parse.y"
+     {
+       ;}
+     break;
+   case 247:
  
  /* Line 1455 of yacc.c  */
- #line 1718 "program_parse.y"
 -#line 1946 "program_parse.y"
++#line 1950 "program_parse.y"
      { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
      break;
  
-   case 233:
+   case 249:
  
  /* Line 1455 of yacc.c  */
- #line 1722 "program_parse.y"
 -#line 1950 "program_parse.y"
++#line 1954 "program_parse.y"
      {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
        ;}
      break;
  
-   case 234:
+   case 250:
  
  /* Line 1455 of yacc.c  */
- #line 1728 "program_parse.y"
 -#line 1956 "program_parse.y"
++#line 1960 "program_parse.y"
      {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
        ;}
      break;
  
-   case 235:
+   case 251:
  
  /* Line 1455 of yacc.c  */
- #line 1736 "program_parse.y"
 -#line 1964 "program_parse.y"
++#line 1968 "program_parse.y"
      {
           struct asm_symbol *const s =
-             declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
+             declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
  
           if (s == NULL) {
              YYERROR;
        ;}
      break;
  
-   case 236:
+   case 252:
  
  /* Line 1455 of yacc.c  */
- #line 1749 "program_parse.y"
 -#line 1977 "program_parse.y"
++#line 1981 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
        ;}
      break;
  
-   case 237:
+   case 253:
  
  /* Line 1455 of yacc.c  */
- #line 1758 "program_parse.y"
 -#line 1986 "program_parse.y"
++#line 1990 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
        ;}
      break;
  
-   case 238:
+   case 254:
  
  /* Line 1455 of yacc.c  */
- #line 1767 "program_parse.y"
 -#line 1995 "program_parse.y"
++#line 1999 "program_parse.y"
      {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
      break;
  
-   case 239:
+   case 255:
  
  /* Line 1455 of yacc.c  */
- #line 1771 "program_parse.y"
 -#line 1999 "program_parse.y"
++#line 2003 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
        ;}
      break;
  
-   case 240:
+   case 256:
  
  /* Line 1455 of yacc.c  */
- #line 1780 "program_parse.y"
 -#line 2008 "program_parse.y"
++#line 2012 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
        ;}
      break;
  
-   case 241:
+   case 257:
  
  /* Line 1455 of yacc.c  */
- #line 1789 "program_parse.y"
 -#line 2017 "program_parse.y"
++#line 2021 "program_parse.y"
      {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
        ;}
      break;
  
-   case 242:
+   case 258:
  
  /* Line 1455 of yacc.c  */
- #line 1800 "program_parse.y"
 -#line 2028 "program_parse.y"
++#line 2032 "program_parse.y"
      {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
      break;
  
-   case 243:
+   case 259:
  
  /* Line 1455 of yacc.c  */
- #line 1806 "program_parse.y"
 -#line 2034 "program_parse.y"
++#line 2038 "program_parse.y"
      {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
        ;}
      break;
  
-   case 244:
+   case 260:
  
  /* Line 1455 of yacc.c  */
- #line 1812 "program_parse.y"
 -#line 2040 "program_parse.y"
++#line 2044 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
        ;}
      break;
  
-   case 245:
+   case 261:
  
  /* Line 1455 of yacc.c  */
- #line 1821 "program_parse.y"
 -#line 2049 "program_parse.y"
++#line 2053 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
        ;}
      break;
  
-   case 246:
+   case 262:
  
  /* Line 1455 of yacc.c  */
- #line 1832 "program_parse.y"
 -#line 2060 "program_parse.y"
++#line 2064 "program_parse.y"
      {
           (yyval.integer) = 0; 
        ;}
      break;
  
-   case 247:
+   case 263:
  
  /* Line 1455 of yacc.c  */
- #line 1836 "program_parse.y"
 -#line 2064 "program_parse.y"
++#line 2068 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
        ;}
      break;
  
-   case 248:
+   case 264:
  
  /* Line 1455 of yacc.c  */
- #line 1845 "program_parse.y"
 -#line 2073 "program_parse.y"
++#line 2077 "program_parse.y"
      {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
        ;}
      break;
  
-   case 249:
+   case 265:
  
  /* Line 1455 of yacc.c  */
- #line 1855 "program_parse.y"
 -#line 2083 "program_parse.y"
++#line 2087 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 250:
+   case 266:
  
  /* Line 1455 of yacc.c  */
- #line 1856 "program_parse.y"
 -#line 2084 "program_parse.y"
++#line 2088 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 251:
+   case 267:
  
  /* Line 1455 of yacc.c  */
- #line 1857 "program_parse.y"
 -#line 2085 "program_parse.y"
++#line 2089 "program_parse.y"
      { (yyval.integer) = 1; ;}
      break;
  
-   case 252:
+   case 268:
  
  /* Line 1455 of yacc.c  */
- #line 1860 "program_parse.y"
 -#line 2088 "program_parse.y"
++#line 2092 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 253:
+   case 269:
  
  /* Line 1455 of yacc.c  */
- #line 1861 "program_parse.y"
 -#line 2089 "program_parse.y"
++#line 2093 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 254:
+   case 270:
  
  /* Line 1455 of yacc.c  */
- #line 1862 "program_parse.y"
 -#line 2090 "program_parse.y"
++#line 2094 "program_parse.y"
      { (yyval.integer) = 1; ;}
      break;
  
-   case 255:
+   case 271:
  
  /* Line 1455 of yacc.c  */
- #line 1865 "program_parse.y"
 -#line 2093 "program_parse.y"
++#line 2097 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 256:
+   case 272:
  
  /* Line 1455 of yacc.c  */
- #line 1866 "program_parse.y"
 -#line 2094 "program_parse.y"
++#line 2098 "program_parse.y"
      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
      break;
  
-   case 257:
+   case 273:
  
  /* Line 1455 of yacc.c  */
- #line 1869 "program_parse.y"
 -#line 2097 "program_parse.y"
++#line 2101 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 258:
+   case 274:
  
  /* Line 1455 of yacc.c  */
- #line 1870 "program_parse.y"
 -#line 2098 "program_parse.y"
++#line 2102 "program_parse.y"
      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
      break;
  
-   case 259:
+   case 275:
  
  /* Line 1455 of yacc.c  */
- #line 1873 "program_parse.y"
 -#line 2101 "program_parse.y"
++#line 2105 "program_parse.y"
      { (yyval.integer) = 0; ;}
      break;
  
-   case 260:
+   case 276:
  
  /* Line 1455 of yacc.c  */
- #line 1874 "program_parse.y"
 -#line 2102 "program_parse.y"
++#line 2106 "program_parse.y"
      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
      break;
  
-   case 261:
+   case 277:
  
  /* Line 1455 of yacc.c  */
- #line 1878 "program_parse.y"
 -#line 2106 "program_parse.y"
++#line 2110 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
        ;}
      break;
  
-   case 262:
+   case 278:
  
  /* Line 1455 of yacc.c  */
- #line 1889 "program_parse.y"
 -#line 2117 "program_parse.y"
++#line 2121 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
        ;}
      break;
  
-   case 263:
+   case 279:
  
  /* Line 1455 of yacc.c  */
- #line 1900 "program_parse.y"
 -#line 2128 "program_parse.y"
++#line 2132 "program_parse.y"
      {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
        ;}
      break;
  
-   case 264:
+   case 280:
  
  /* Line 1455 of yacc.c  */
- #line 1911 "program_parse.y"
 -#line 2139 "program_parse.y"
++#line 2143 "program_parse.y"
      {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
  
  
  /* Line 1455 of yacc.c  */
- #line 4581 "program_parse.tab.c"
 -#line 4905 "program_parse.tab.c"
++#line 4909 "program_parse.tab.c"
        default: break;
      }
    YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@@ -4796,7 -5120,49 +5124,49 @@@ yyreturn
  
  
  /* Line 1675 of yacc.c  */
- #line 1931 "program_parse.y"
 -#line 2163 "program_parse.y"
++#line 2167 "program_parse.y"
+ void
+ asm_instruction_set_operands(struct asm_instruction *inst,
+                            const struct prog_dst_register *dst,
+                            const struct asm_src_register *src0,
+                            const struct asm_src_register *src1,
+                            const struct asm_src_register *src2)
+ {
+    /* In the core ARB extensions only the KIL instruction doesn't have a
+     * destination register.
+     */
+    if (dst == NULL) {
+       init_dst_reg(& inst->Base.DstReg);
+    } else {
+       inst->Base.DstReg = *dst;
+    }
+    /* The only instruction that doesn't have any source registers is the
+     * condition-code based KIL instruction added by NV_fragment_program_option.
+     */
+    if (src0 != NULL) {
+       inst->Base.SrcReg[0] = src0->Base;
+       inst->SrcReg[0] = *src0;
+    } else {
+       init_src_reg(& inst->SrcReg[0]);
+    }
+    if (src1 != NULL) {
+       inst->Base.SrcReg[1] = src1->Base;
+       inst->SrcReg[1] = *src1;
+    } else {
+       init_src_reg(& inst->SrcReg[1]);
+    }
+    if (src2 != NULL) {
+       inst->Base.SrcReg[2] = src2->Base;
+       inst->SrcReg[2] = *src2;
+    } else {
+       init_src_reg(& inst->SrcReg[2]);
+    }
+ }
  
  
  struct asm_instruction *
Simple merge