NV fp parser: Add support for absolute value operator on instruction operands
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 3 Sep 2009 21:32:48 +0000 (14:32 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 3 Sep 2009 21:32:48 +0000 (14:32 -0700)
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.y

index 508ac617e4a9b33f37b6f61de4c7f67e68655041..505a1eb94f2782afc29c2c2e074fd1defa987931 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   351
+#define YYLAST   375
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  116
+#define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  135
+#define YYNNTS  136
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  267
+#define YYNRULES  270
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  448
+#define YYNSTATES  456
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -613,15 +613,15 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   111,   108,   112,     2,     2,     2,     2,
+       2,     2,     2,   112,   108,   113,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,   107,
-       2,   113,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   114,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   109,     2,   110,     2,     2,     2,     2,     2,     2,
+       2,   110,     2,   111,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   114,     2,   115,     2,     2,     2,     2,
+       2,     2,     2,   115,   109,   116,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -657,110 +657,112 @@ static const yytype_uint16 yyprhs[] =
       24,    27,    30,    32,    34,    36,    38,    40,    42,    44,
       46,    48,    50,    52,    54,    59,    64,    69,    76,    83,
       92,   101,   104,   117,   120,   122,   124,   126,   128,   130,
-     132,   134,   136,   138,   140,   142,   144,   151,   155,   158,
-     162,   165,   168,   176,   179,   181,   183,   185,   187,   192,
-     194,   196,   198,   200,   202,   204,   206,   210,   211,   214,
-     217,   219,   221,   223,   225,   227,   229,   231,   233,   235,
-     236,   238,   240,   242,   244,   245,   247,   249,   251,   253,
-     255,   257,   262,   265,   268,   270,   273,   275,   278,   280,
-     283,   288,   293,   295,   296,   300,   302,   304,   307,   309,
-     312,   314,   316,   320,   327,   328,   330,   333,   338,   340,
-     344,   346,   348,   350,   352,   354,   356,   358,   360,   362,
-     364,   367,   370,   373,   376,   379,   382,   385,   388,   391,
-     394,   397,   400,   404,   406,   408,   410,   416,   418,   420,
-     422,   425,   427,   429,   432,   434,   437,   444,   446,   450,
-     452,   454,   456,   458,   460,   465,   467,   469,   471,   473,
-     475,   477,   480,   482,   484,   490,   492,   495,   497,   499,
-     505,   508,   509,   516,   520,   521,   523,   525,   527,   529,
-     531,   534,   536,   538,   541,   546,   551,   552,   554,   556,
-     558,   560,   563,   565,   567,   569,   571,   577,   579,   583,
-     589,   595,   597,   601,   607,   609,   611,   613,   615,   617,
-     619,   621,   623,   625,   629,   635,   643,   653,   656,   659,
-     661,   663,   664,   665,   669,   670,   674,   678,   680,   685,
-     688,   691,   694,   697,   701,   704,   708,   709,   711,   713,
-     714,   716,   718,   719,   721,   723,   724,   726,   728,   729,
-     733,   734,   738,   739,   743,   745,   747,   749
+     132,   134,   136,   138,   140,   142,   144,   151,   154,   159,
+     162,   164,   168,   174,   177,   180,   188,   191,   193,   195,
+     197,   199,   204,   206,   208,   210,   212,   214,   216,   218,
+     222,   223,   226,   229,   231,   233,   235,   237,   239,   241,
+     243,   245,   247,   248,   250,   252,   254,   256,   257,   259,
+     261,   263,   265,   267,   269,   274,   277,   280,   282,   285,
+     287,   290,   292,   295,   300,   305,   307,   308,   312,   314,
+     316,   319,   321,   324,   326,   328,   332,   339,   340,   342,
+     345,   350,   352,   356,   358,   360,   362,   364,   366,   368,
+     370,   372,   374,   376,   379,   382,   385,   388,   391,   394,
+     397,   400,   403,   406,   409,   412,   416,   418,   420,   422,
+     428,   430,   432,   434,   437,   439,   441,   444,   446,   449,
+     456,   458,   462,   464,   466,   468,   470,   472,   477,   479,
+     481,   483,   485,   487,   489,   492,   494,   496,   502,   504,
+     507,   509,   511,   517,   520,   521,   528,   532,   533,   535,
+     537,   539,   541,   543,   546,   548,   550,   553,   558,   563,
+     564,   566,   568,   570,   572,   575,   577,   579,   581,   583,
+     589,   591,   595,   601,   607,   609,   613,   619,   621,   623,
+     625,   627,   629,   631,   633,   635,   637,   641,   647,   655,
+     665,   668,   671,   673,   675,   676,   677,   681,   682,   686,
+     690,   692,   697,   700,   703,   706,   709,   713,   716,   720,
+     721,   723,   725,   726,   728,   730,   731,   733,   735,   736,
+     738,   740,   741,   745,   746,   750,   751,   755,   757,   759,
+     761
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 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,   160,   107,    -1,
-     124,    -1,   125,    -1,   126,    -1,   127,    -1,   128,    -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,
+     118,     0,    -1,   119,   120,   122,    12,    -1,     3,    -1,
+       4,    -1,   120,   121,    -1,    -1,     8,    99,   107,    -1,
+     122,   123,    -1,    -1,   124,   107,    -1,   162,   107,    -1,
+     125,    -1,   126,    -1,   127,    -1,   128,    -1,   129,    -1,
+     130,    -1,   131,    -1,   132,    -1,   138,    -1,   133,    -1,
+     134,    -1,   135,    -1,    19,   143,   108,   139,    -1,    18,
+     142,   108,   141,    -1,    16,   142,   108,   139,    -1,    14,
+     142,   108,   139,   108,   139,    -1,    13,   142,   108,   141,
+     108,   141,    -1,    17,   142,   108,   141,   108,   141,   108,
+     141,    -1,    15,   142,   108,   141,   108,   136,   108,   137,
+      -1,    20,   141,    -1,    22,   142,   108,   141,   108,   141,
+     108,   141,   108,   136,   108,   137,    -1,    83,   247,    -1,
       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,   228,    -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
+      94,    -1,    95,    -1,    21,   142,   108,   147,   108,   144,
+      -1,   233,   140,    -1,   233,   109,   140,   109,    -1,   147,
+     159,    -1,   230,    -1,   233,   147,   160,    -1,   233,   109,
+     147,   160,   109,    -1,   148,   161,    -1,   156,   158,    -1,
+     145,   108,   145,   108,   145,   108,   145,    -1,   233,   146,
+      -1,    23,    -1,    99,    -1,    99,    -1,   164,    -1,   149,
+     110,   150,   111,    -1,   178,    -1,   240,    -1,    99,    -1,
+      99,    -1,   151,    -1,   152,    -1,    23,    -1,   156,   157,
+     153,    -1,    -1,   112,   154,    -1,   113,   155,    -1,    23,
+      -1,    23,    -1,    99,    -1,   103,    -1,   103,    -1,   103,
+      -1,   103,    -1,   100,    -1,   104,    -1,    -1,   100,    -1,
+     101,    -1,   102,    -1,   103,    -1,    -1,   163,    -1,   170,
+      -1,   234,    -1,   236,    -1,   239,    -1,   252,    -1,     7,
+      99,   114,   164,    -1,    96,   165,    -1,    38,   169,    -1,
+      60,    -1,    98,   167,    -1,    53,    -1,    29,   245,    -1,
+      37,    -1,    74,   246,    -1,    50,   110,   168,   111,    -1,
+      97,   110,   166,   111,    -1,    23,    -1,    -1,   110,   168,
+     111,    -1,    23,    -1,    60,    -1,    29,   245,    -1,    37,
+      -1,    74,   246,    -1,   171,    -1,   172,    -1,    10,    99,
+     174,    -1,    10,    99,   110,   173,   111,   175,    -1,    -1,
+      23,    -1,   114,   177,    -1,   114,   115,   176,   116,    -1,
+     179,    -1,   176,   108,   179,    -1,   181,    -1,   217,    -1,
+     227,    -1,   181,    -1,   217,    -1,   228,    -1,   180,    -1,
+     218,    -1,   227,    -1,   181,    -1,    73,   205,    -1,    73,
+     182,    -1,    73,   184,    -1,    73,   187,    -1,    73,   189,
+      -1,    73,   195,    -1,    73,   191,    -1,    73,   198,    -1,
+      73,   200,    -1,    73,   202,    -1,    73,   204,    -1,    73,
+     216,    -1,    47,   244,   183,    -1,   193,    -1,    33,    -1,
+      69,    -1,    43,   110,   194,   111,   185,    -1,   193,    -1,
+      60,    -1,    26,    -1,    72,   186,    -1,    40,    -1,    32,
+      -1,    44,   188,    -1,    25,    -1,   244,    67,    -1,    45,
+     110,   194,   111,   244,   190,    -1,   193,    -1,    75,   248,
+     192,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
+      23,    -1,    76,   246,   196,   197,    -1,    35,    -1,    54,
+      -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
+     199,    -1,    29,    -1,    56,    -1,    28,   110,   201,   111,
+      57,    -1,    23,    -1,    58,   203,    -1,    70,    -1,    26,
+      -1,   207,    66,   110,   210,   111,    -1,   207,   206,    -1,
+      -1,    66,   110,   210,   105,   210,   111,    -1,    49,   211,
+     208,    -1,    -1,   209,    -1,    41,    -1,    82,    -1,    42,
+      -1,    23,    -1,    51,   212,    -1,    63,    -1,    52,    -1,
+      81,   246,    -1,    55,   110,   214,   111,    -1,    48,   110,
+     215,   111,    -1,    -1,   213,    -1,    23,    -1,    23,    -1,
+      23,    -1,    30,    64,    -1,   221,    -1,   224,    -1,   219,
+      -1,   222,    -1,    62,    34,   110,   220,   111,    -1,   225,
+      -1,   225,   105,   225,    -1,    62,    34,   110,   225,   111,
+      -1,    62,    46,   110,   223,   111,    -1,   226,    -1,   226,
+     105,   226,    -1,    62,    46,   110,   226,   111,    -1,    23,
+      -1,    23,    -1,   229,    -1,   231,    -1,   230,    -1,   231,
+      -1,   232,    -1,    24,    -1,    23,    -1,   115,   232,   116,
+      -1,   115,   232,   108,   232,   116,    -1,   115,   232,   108,
+     232,   108,   232,   116,    -1,   115,   232,   108,   232,   108,
+     232,   108,   232,   116,    -1,   233,    24,    -1,   233,    23,
+      -1,   112,    -1,   113,    -1,    -1,    -1,    11,   235,   238,
+      -1,    -1,     5,   237,   238,    -1,   238,   108,    99,    -1,
+      99,    -1,     9,    99,   114,   240,    -1,    65,    60,    -1,
+      65,    37,    -1,    65,   241,    -1,    65,    59,    -1,    65,
+      74,   246,    -1,    65,    30,    -1,    29,   242,   243,    -1,
+      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
+      -1,    39,    -1,    27,    -1,    -1,    61,    -1,    68,    -1,
+      -1,   110,   249,   111,    -1,    -1,   110,   250,   111,    -1,
+      -1,   110,   251,   111,    -1,    23,    -1,    23,    -1,    23,
+      -1,     6,    99,   114,    99,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -770,29 +772,30 @@ static const yytype_uint16 yyrline[] =
      309,   324,   327,   332,   339,   340,   341,   342,   343,   344,
      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,   537,   556,
-     569,   591,   600,   633,   640,   655,   705,   747,   758,   779,
-     789,   795,   826,   843,   843,   845,   852,   864,   865,   866,
-     869,   881,   893,   911,   922,   934,   936,   937,   938,   939,
-     942,   942,   942,   942,   943,   946,   947,   948,   949,   950,
-     951,   954,   972,   976,   982,   986,   990,   994,  1003,  1012,
-    1016,  1021,  1027,  1038,  1038,  1039,  1041,  1045,  1049,  1053,
-    1059,  1059,  1061,  1077,  1100,  1103,  1114,  1120,  1126,  1127,
-    1134,  1140,  1146,  1154,  1160,  1166,  1174,  1180,  1186,  1194,
-    1195,  1198,  1199,  1200,  1201,  1202,  1203,  1204,  1205,  1206,
-    1207,  1208,  1211,  1220,  1224,  1228,  1234,  1243,  1247,  1251,
-    1260,  1264,  1270,  1276,  1283,  1288,  1296,  1306,  1308,  1316,
-    1322,  1326,  1330,  1336,  1347,  1356,  1360,  1365,  1369,  1373,
-    1377,  1383,  1390,  1394,  1400,  1408,  1419,  1426,  1430,  1436,
-    1446,  1457,  1461,  1479,  1488,  1491,  1497,  1501,  1505,  1511,
-    1522,  1527,  1532,  1537,  1542,  1547,  1555,  1558,  1563,  1576,
-    1584,  1595,  1603,  1603,  1605,  1605,  1607,  1617,  1622,  1629,
-    1639,  1648,  1653,  1660,  1670,  1680,  1692,  1692,  1693,  1693,
-    1695,  1705,  1713,  1723,  1731,  1739,  1748,  1759,  1763,  1769,
-    1770,  1771,  1774,  1774,  1777,  1777,  1780,  1786,  1794,  1807,
-    1816,  1825,  1829,  1838,  1847,  1858,  1865,  1870,  1879,  1891,
-    1894,  1903,  1914,  1915,  1916,  1919,  1920,  1921,  1924,  1925,
-    1928,  1929,  1932,  1933,  1936,  1947,  1958,  1969
+     505,   506,   507,   508,   509,   510,   513,   526,   534,   551,
+     558,   577,   588,   608,   630,   639,   672,   679,   694,   744,
+     786,   797,   818,   828,   834,   865,   882,   882,   884,   891,
+     903,   904,   905,   908,   920,   932,   950,   961,   973,   975,
+     976,   977,   978,   981,   981,   981,   981,   982,   985,   986,
+     987,   988,   989,   990,   993,  1011,  1015,  1021,  1025,  1029,
+    1033,  1042,  1051,  1055,  1060,  1066,  1077,  1077,  1078,  1080,
+    1084,  1088,  1092,  1098,  1098,  1100,  1116,  1139,  1142,  1153,
+    1159,  1165,  1166,  1173,  1179,  1185,  1193,  1199,  1205,  1213,
+    1219,  1225,  1233,  1234,  1237,  1238,  1239,  1240,  1241,  1242,
+    1243,  1244,  1245,  1246,  1247,  1250,  1259,  1263,  1267,  1273,
+    1282,  1286,  1290,  1299,  1303,  1309,  1315,  1322,  1327,  1335,
+    1345,  1347,  1355,  1361,  1365,  1369,  1375,  1386,  1395,  1399,
+    1404,  1408,  1412,  1416,  1422,  1429,  1433,  1439,  1447,  1458,
+    1465,  1469,  1475,  1485,  1496,  1500,  1518,  1527,  1530,  1536,
+    1540,  1544,  1550,  1561,  1566,  1571,  1576,  1581,  1586,  1594,
+    1597,  1602,  1615,  1623,  1634,  1642,  1642,  1644,  1644,  1646,
+    1656,  1661,  1668,  1678,  1687,  1692,  1699,  1709,  1719,  1731,
+    1731,  1732,  1732,  1734,  1744,  1752,  1762,  1770,  1778,  1787,
+    1798,  1802,  1808,  1809,  1810,  1813,  1813,  1816,  1816,  1819,
+    1825,  1833,  1846,  1855,  1864,  1868,  1877,  1886,  1897,  1904,
+    1909,  1918,  1930,  1933,  1942,  1953,  1954,  1955,  1958,  1959,
+    1960,  1963,  1964,  1967,  1968,  1971,  1972,  1975,  1986,  1997,
+    2008
 };
 #endif
 
@@ -818,45 +821,45 @@ static const char *const yytname[] =
   "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
   "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
   "WEIGHT", "IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1", "SWIZZLE",
-  "DOT_DOT", "DOT", "';'", "','", "'['", "']'", "'+'", "'-'", "'='", "'{'",
-  "'}'", "$accept", "program", "language", "optionSequence", "option",
-  "statementSequence", "statement", "instruction", "ALU_instruction",
-  "TexInstruction", "ARL_instruction", "VECTORop_instruction",
-  "SCALARop_instruction", "BINSCop_instruction", "BINop_instruction",
-  "TRIop_instruction", "SAMPLE_instruction", "KIL_instruction",
-  "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",
-  "stateOptMatModifier", "stateMatModifier", "stateMatrixRowNum",
-  "stateMatrixName", "stateOptModMatNum", "stateModMatNum",
-  "statePaletteMatNum", "stateProgramMatNum", "stateDepthItem",
-  "programSingleItem", "programMultipleItem", "progEnvParams",
-  "progEnvParamNums", "progEnvParam", "progLocalParams",
-  "progLocalParamNums", "progLocalParam", "progEnvParamNum",
-  "progLocalParamNum", "paramConstDecl", "paramConstUse",
-  "paramConstScalarDecl", "paramConstScalarUse", "paramConstVector",
-  "signedFloatConstant", "optionalSign", "TEMP_statement", "@1",
-  "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
-  "resultBinding", "resultColBinding", "optResultFaceType",
-  "optResultColorType", "optFaceType", "optColorType",
+  "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'", "'+'", "'-'", "'='",
+  "'{'", "'}'", "$accept", "program", "language", "optionSequence",
+  "option", "statementSequence", "statement", "instruction",
+  "ALU_instruction", "TexInstruction", "ARL_instruction",
+  "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
+  "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
+  "KIL_instruction", "TXD_instruction", "texImageUnit", "texTarget",
+  "SWZ_instruction", "scalarSrcReg", "scalarUse", "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", "stateOptMatModifier",
+  "stateMatModifier", "stateMatrixRowNum", "stateMatrixName",
+  "stateOptModMatNum", "stateModMatNum", "statePaletteMatNum",
+  "stateProgramMatNum", "stateDepthItem", "programSingleItem",
+  "programMultipleItem", "progEnvParams", "progEnvParamNums",
+  "progEnvParam", "progLocalParams", "progLocalParamNums",
+  "progLocalParam", "progEnvParamNum", "progLocalParamNum",
+  "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
+  "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
+  "optionalSign", "TEMP_statement", "@1", "ADDRESS_statement", "@2",
+  "varNameList", "OUTPUT_statement", "resultBinding", "resultColBinding",
+  "optResultFaceType", "optResultColorType", "optFaceType", "optColorType",
   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
   "ALIAS_statement", 0
@@ -878,41 +881,42 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,    59,    44,    91,
-      93,    43,    45,    61,   123,   125
+     355,   356,   357,   358,   359,   360,   361,    59,    44,   124,
+      91,    93,    43,    45,    61,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 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,   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,   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
+       0,   117,   118,   119,   119,   120,   120,   121,   122,   122,
+     123,   123,   124,   124,   125,   125,   125,   125,   125,   125,
+     125,   126,   126,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   137,   137,   137,   137,   137,
+     137,   137,   137,   137,   137,   137,   138,   139,   139,   140,
+     140,   141,   141,   142,   143,   144,   145,   146,   146,   147,
+     147,   147,   147,   148,   148,   149,   150,   150,   151,   152,
+     153,   153,   153,   154,   155,   156,   157,   158,   159,   160,
+     160,   160,   160,   161,   161,   161,   161,   161,   162,   162,
+     162,   162,   162,   162,   163,   164,   164,   165,   165,   165,
+     165,   165,   165,   165,   165,   166,   167,   167,   168,   169,
+     169,   169,   169,   170,   170,   171,   172,   173,   173,   174,
+     175,   176,   176,   177,   177,   177,   178,   178,   178,   179,
+     179,   179,   180,   180,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   182,   183,   183,   183,   184,
+     185,   185,   185,   185,   185,   186,   187,   188,   188,   189,
+     190,   191,   192,   193,   193,   193,   194,   195,   196,   196,
+     197,   197,   197,   197,   198,   199,   199,   200,   201,   202,
+     203,   203,   204,   205,   206,   206,   207,   208,   208,   209,
+     209,   209,   210,   211,   211,   211,   211,   211,   211,   212,
+     212,   213,   214,   215,   216,   217,   217,   218,   218,   219,
+     220,   220,   221,   222,   223,   223,   224,   225,   226,   227,
+     227,   228,   228,   229,   230,   230,   231,   231,   231,   231,
+     232,   232,   233,   233,   233,   235,   234,   237,   236,   238,
+     238,   239,   240,   240,   240,   240,   240,   240,   241,   242,
+     242,   242,   243,   243,   243,   244,   244,   244,   245,   245,
+     245,   246,   246,   247,   247,   248,   248,   249,   250,   251,
+     252
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -922,29 +926,30 @@ static const yytype_uint8 yyr2[] =
        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     4,     4,     4,     6,     6,     8,
        8,     2,    12,     2,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     6,     3,     2,     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,     1,     1,     6,     2,     4,     2,
+       1,     3,     5,     2,     2,     7,     2,     1,     1,     1,
+       1,     4,     1,     1,     1,     1,     1,     1,     1,     3,
+       0,     2,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     1,     1,     1,     1,     0,     1,     1,
+       1,     1,     1,     1,     4,     2,     2,     1,     2,     1,
+       2,     1,     2,     4,     4,     1,     0,     3,     1,     1,
+       2,     1,     2,     1,     1,     3,     6,     0,     1,     2,
+       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     3,     1,     1,     1,     5,
+       1,     1,     1,     2,     1,     1,     2,     1,     2,     6,
+       1,     3,     1,     1,     1,     1,     1,     4,     1,     1,
+       1,     1,     1,     1,     2,     1,     1,     5,     1,     2,
+       1,     1,     5,     2,     0,     6,     3,     0,     1,     1,
+       1,     1,     1,     2,     1,     1,     2,     4,     4,     0,
+       1,     1,     1,     1,     2,     1,     1,     1,     1,     5,
+       1,     3,     5,     5,     1,     3,     5,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     5,     7,     9,
+       2,     2,     1,     1,     0,     0,     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
@@ -953,276 +958,283 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
-       0,   234,     0,     0,     0,     0,   232,     2,     0,     0,
-       0,     0,     0,     0,     0,   231,     0,     0,     8,     0,
+       0,   237,     0,     0,     0,     0,   235,     2,     0,     0,
+       0,     0,     0,     0,     0,   234,     0,     0,     8,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
-      23,    20,     0,    85,    86,   110,   111,    87,    88,    89,
-      90,     7,     0,     0,     0,     0,     0,     0,     0,    61,
-       0,    84,    60,     0,     0,     0,     0,     0,    72,     0,
-       0,   229,   230,    31,     0,     0,     0,    10,    11,   237,
-     235,     0,     0,     0,   114,   231,   112,   233,   246,   244,
-     240,   242,   239,   258,   241,   231,    80,    81,    82,    83,
-      50,   231,   231,   231,   231,   231,   231,    74,    51,   222,
-     221,     0,     0,     0,     0,    56,   231,    79,     0,    57,
-      59,   123,   124,   202,   203,   125,   218,   219,     0,   231,
-       0,   267,    91,   238,   115,     0,   116,   120,   121,   122,
-     216,   217,   220,     0,   248,   247,   249,     0,   243,     0,
-       0,     0,     0,    26,     0,    25,    24,   255,   108,   106,
-     258,    93,     0,     0,     0,     0,     0,     0,   252,     0,
-     252,     0,     0,   262,   258,   131,   132,   133,   134,   136,
-     135,   137,   138,   139,   140,     0,   141,   255,    98,     0,
-      96,    94,   258,     0,   103,    92,     0,    77,    76,    78,
-      49,     0,     0,     0,   236,     0,   228,   227,   250,   251,
-     245,   264,     0,   231,   231,     0,    48,     0,   231,   256,
-     257,   107,   109,     0,     0,     0,   201,   172,   173,   171,
-       0,   154,   254,   253,   153,     0,     0,     0,     0,   196,
-     192,     0,   191,   258,   184,   178,   177,   176,     0,     0,
-       0,     0,    97,     0,    99,     0,     0,    95,   231,   223,
-      65,     0,    63,    64,     0,   231,   231,     0,   113,   259,
-      28,    27,    75,    47,   260,     0,     0,   214,     0,   215,
-       0,   175,     0,   163,     0,   155,     0,   160,   161,   144,
-     145,   162,   142,   143,     0,   198,   190,   197,     0,   193,
-     186,   188,   187,   183,   185,   266,     0,   159,   158,   165,
-     166,     0,     0,   105,     0,   102,     0,     0,     0,    58,
-      73,    67,    46,     0,     0,     0,   231,     0,    33,     0,
-     231,   209,   213,     0,     0,   252,   200,     0,   199,     0,
-     263,   170,   169,   167,   168,   164,   189,     0,   100,   101,
-     104,   231,   224,     0,     0,    66,   231,    54,    55,    53,
-     231,     0,     0,     0,   118,   126,   129,   127,   204,   205,
-     128,   265,     0,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    30,    29,   174,   149,   151,
-     148,     0,   146,   147,     0,   195,   194,   179,     0,    70,
-      68,    71,    69,     0,     0,     0,     0,   130,   181,   231,
-     117,   261,   152,   150,   156,   157,   231,   225,   231,     0,
-       0,     0,     0,   180,   119,     0,     0,     0,     0,   207,
-       0,   211,     0,   226,   231,     0,   206,     0,   210,     0,
-       0,    52,    32,   208,   212,     0,     0,   182
+      23,    20,     0,    88,    89,   113,   114,    90,    91,    92,
+      93,     7,     0,     0,     0,     0,     0,     0,     0,    64,
+       0,    87,    63,     0,     0,     0,     0,     0,    75,     0,
+       0,   232,   233,    31,     0,     0,     0,    10,    11,   240,
+     238,     0,     0,     0,   117,   234,   115,   236,   249,   247,
+     243,   245,   242,   261,   244,   234,    83,    84,    85,    86,
+      53,   234,   234,   234,   234,   234,   234,    77,    54,   225,
+     224,     0,     0,     0,     0,    59,     0,   234,    82,     0,
+      60,    62,   126,   127,   205,   206,   128,   221,   222,     0,
+     234,     0,   270,    94,   241,   118,     0,   119,   123,   124,
+     125,   219,   220,   223,     0,   251,   250,   252,     0,   246,
+       0,     0,     0,     0,    26,     0,    25,    24,   258,   111,
+     109,   261,    96,     0,     0,     0,     0,     0,     0,   255,
+       0,   255,     0,     0,   265,   261,   134,   135,   136,   137,
+     139,   138,   140,   141,   142,   143,     0,   144,   258,   101,
+       0,    99,    97,   261,     0,   106,    95,    82,     0,    80,
+      79,    81,    51,     0,     0,     0,   239,     0,   231,   230,
+     253,   254,   248,   267,     0,   234,   234,     0,    47,     0,
+      50,     0,   234,   259,   260,   110,   112,     0,     0,     0,
+     204,   175,   176,   174,     0,   157,   257,   256,   156,     0,
+       0,     0,     0,   199,   195,     0,   194,   261,   187,   181,
+     180,   179,     0,     0,     0,     0,   100,     0,   102,     0,
+       0,    98,     0,   234,   226,    68,     0,    66,    67,     0,
+     234,   234,     0,   116,   262,    28,    27,     0,    78,    49,
+     263,     0,     0,   217,     0,   218,     0,   178,     0,   166,
+       0,   158,     0,   163,   164,   147,   148,   165,   145,   146,
+       0,   201,   193,   200,     0,   196,   189,   191,   190,   186,
+     188,   269,     0,   162,   161,   168,   169,     0,     0,   108,
+       0,   105,     0,     0,    52,     0,    61,    76,    70,    46,
+       0,     0,     0,   234,    48,     0,    33,     0,   234,   212,
+     216,     0,     0,   255,   203,     0,   202,     0,   266,   173,
+     172,   170,   171,   167,   192,     0,   103,   104,   107,   234,
+     227,     0,     0,    69,   234,    57,    58,    56,   234,     0,
+       0,     0,   121,   129,   132,   130,   207,   208,   131,   268,
+       0,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    30,    29,   177,   152,   154,   151,     0,
+     149,   150,     0,   198,   197,   182,     0,    73,    71,    74,
+      72,     0,     0,     0,     0,   133,   184,   234,   120,   264,
+     155,   153,   159,   160,   234,   228,   234,     0,     0,     0,
+       0,   183,   122,     0,     0,     0,     0,   210,     0,   214,
+       0,   229,   234,     0,   209,     0,   213,     0,     0,    55,
+      32,   211,   215,     0,     0,   185
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,   275,
-     385,    41,   150,    73,    60,    69,   322,   323,   359,   117,
-      61,   118,   261,   262,   263,   355,   400,   402,    70,   321,
-     108,   273,   200,   100,    42,    43,   119,   195,   316,   257,
-     314,   161,    44,    45,    46,   135,    86,   268,   363,   136,
-     120,   364,   365,   121,   175,   292,   176,   392,   413,   177,
-     234,   178,   414,   179,   308,   293,   284,   180,   311,   345,
-     181,   229,   182,   282,   183,   247,   184,   407,   423,   185,
-     303,   304,   347,   244,   296,   297,   339,   337,   186,   122,
-     367,   368,   428,   123,   369,   430,   124,   278,   280,   370,
-     125,   140,   126,   127,   142,    74,    47,    57,    48,    52,
-      80,    49,    62,    94,   146,   210,   235,   221,   148,   328,
-     249,   212,   372,   306,    50
+      32,    33,    34,    35,    36,    37,    38,    39,    40,   281,
+     393,    41,   151,   218,    73,    60,    69,   329,   330,   367,
+     219,    61,   119,   266,   267,   268,   363,   408,   410,    70,
+     328,   108,   279,   202,   100,    42,    43,   120,   196,   322,
+     261,   320,   162,    44,    45,    46,   136,    86,   273,   371,
+     137,   121,   372,   373,   122,   176,   298,   177,   400,   421,
+     178,   238,   179,   422,   180,   314,   299,   290,   181,   317,
+     353,   182,   233,   183,   288,   184,   251,   185,   415,   431,
+     186,   309,   310,   355,   248,   302,   303,   347,   345,   187,
+     123,   375,   376,   436,   124,   377,   438,   125,   284,   286,
+     378,   126,   141,   127,   128,   143,    74,    47,    57,    48,
+      52,    80,    49,    62,    94,   147,   212,   239,   225,   149,
+     336,   253,   214,   380,   312,    50
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -399
+#define YYPACT_NINF -403
 static const yytype_int16 yypact[] =
 {
-     154,  -399,  -399,    48,  -399,  -399,    51,   -37,  -399,   172,
-      -2,  -399,    17,    31,    42,    47,  -399,  -399,   -33,   -33,
-     -33,   -33,   -33,   -33,    54,    56,   -33,   -33,  -399,     6,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,    52,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,    66,    25,    61,   112,    -6,    66,   102,  -399,
-     118,   116,  -399,   119,   120,   121,   122,   123,  -399,   124,
-     130,  -399,  -399,  -399,   -16,   126,   127,  -399,  -399,  -399,
-     128,    70,   -15,   159,   214,   -36,  -399,   128,    28,  -399,
-    -399,  -399,  -399,   131,  -399,    56,  -399,  -399,  -399,  -399,
-    -399,    56,    56,    56,    56,    56,    56,  -399,  -399,  -399,
-    -399,    27,    38,    76,    -9,   135,    56,    60,   136,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -16,    56,
-     147,  -399,  -399,  -399,  -399,   137,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,   148,  -399,  -399,    18,   225,  -399,   141,
-     142,   -16,   144,  -399,   145,  -399,  -399,    50,  -399,  -399,
-     131,  -399,   146,   149,   150,   187,     7,   151,    43,   152,
-      69,    85,    -1,   153,   131,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,   190,  -399,    50,  -399,   155,
-    -399,  -399,   131,   156,   158,  -399,    20,  -399,  -399,  -399,
-    -399,    -8,   160,   162,  -399,   161,  -399,  -399,  -399,  -399,
-    -399,  -399,   163,    56,    56,   169,   173,   171,    56,  -399,
-    -399,  -399,  -399,   234,   240,   252,  -399,  -399,  -399,  -399,
-     254,  -399,  -399,  -399,  -399,   211,   254,     2,   170,   257,
-    -399,   174,  -399,   131,    12,  -399,  -399,  -399,   258,   253,
-      -5,   175,  -399,   262,  -399,   263,   262,  -399,    56,  -399,
-    -399,   177,  -399,  -399,   185,    56,    56,   176,  -399,  -399,
-    -399,  -399,  -399,  -399,   180,   183,   184,  -399,   186,  -399,
-     189,  -399,   191,  -399,   192,  -399,   194,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,   270,  -399,  -399,  -399,   271,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,   195,  -399,  -399,  -399,
-    -399,   143,   272,  -399,   196,  -399,   197,   198,    34,  -399,
-    -399,   101,  -399,   201,    -4,   202,   -12,   274,  -399,   111,
-      56,  -399,  -399,   241,    84,    69,  -399,   203,  -399,   204,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,   205,  -399,  -399,
-    -399,    56,  -399,   277,   288,  -399,    56,  -399,  -399,  -399,
-      56,    80,    76,    35,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,   206,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,   280,  -399,  -399,    14,  -399,  -399,  -399,    39,  -399,
-    -399,  -399,  -399,   209,   210,   212,   213,  -399,   261,   -12,
-    -399,  -399,  -399,  -399,  -399,  -399,    56,  -399,    56,   171,
-     234,   240,   219,  -399,  -399,   208,   221,   222,   224,   215,
-     226,   227,   272,  -399,    56,   111,  -399,   234,  -399,   240,
-     -13,  -399,  -399,  -399,  -399,   272,   228,  -399
+      62,  -403,  -403,    41,  -403,  -403,    81,   -36,  -403,   198,
+      -8,  -403,    -5,    18,    20,    35,  -403,  -403,   -23,   -23,
+     -23,   -23,   -23,   -23,    45,   131,   -23,   -23,  -403,    58,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,    67,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,    63,    86,    92,   128,    84,    63,    99,  -403,
+      69,   133,  -403,    87,    89,   129,   145,   146,  -403,   147,
+     154,  -403,  -403,  -403,   -13,   150,   151,  -403,  -403,  -403,
+     152,   162,   -14,   197,   240,   -34,  -403,   152,    98,  -403,
+    -403,  -403,  -403,   155,  -403,   131,  -403,  -403,  -403,  -403,
+    -403,   131,   131,   131,   131,   131,   131,  -403,  -403,  -403,
+    -403,    72,   105,    77,    17,   156,    12,   131,    68,   157,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,    12,
+     131,   165,  -403,  -403,  -403,  -403,   158,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,   223,  -403,  -403,   -16,   245,  -403,
+     163,   164,    -9,   167,  -403,   168,  -403,  -403,    55,  -403,
+    -403,   155,  -403,   170,   171,   172,   206,     2,   173,    34,
+     174,   127,   112,     1,   175,   155,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,   207,  -403,    55,  -403,
+     177,  -403,  -403,   155,   178,   179,  -403,    68,    22,  -403,
+    -403,  -403,  -403,    -6,   169,   182,  -403,   180,  -403,  -403,
+    -403,  -403,  -403,  -403,   181,   131,   131,    12,  -403,   188,
+     190,   195,   131,  -403,  -403,  -403,  -403,   272,   273,   274,
+    -403,  -403,  -403,  -403,   275,  -403,  -403,  -403,  -403,   232,
+     275,    79,   191,   277,  -403,   192,  -403,   155,    15,  -403,
+    -403,  -403,   280,   276,     8,   194,  -403,   283,  -403,   284,
+     283,  -403,   199,   131,  -403,  -403,   200,  -403,  -403,   209,
+     131,   131,   201,  -403,  -403,  -403,  -403,   204,  -403,  -403,
+     205,   210,   211,  -403,   203,  -403,   212,  -403,   213,  -403,
+     214,  -403,   215,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+     286,  -403,  -403,  -403,   294,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,   216,  -403,  -403,  -403,  -403,   161,   297,  -403,
+     217,  -403,   218,   219,  -403,    76,  -403,  -403,   139,  -403,
+     227,    -4,   228,    30,  -403,   298,  -403,   137,   131,  -403,
+    -403,   265,   130,   127,  -403,   220,  -403,   226,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,   229,  -403,  -403,  -403,   131,
+    -403,   315,   319,  -403,   131,  -403,  -403,  -403,   131,   123,
+      77,    80,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+     233,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   311,
+    -403,  -403,     9,  -403,  -403,  -403,    83,  -403,  -403,  -403,
+    -403,   237,   238,   239,   241,  -403,   281,    30,  -403,  -403,
+    -403,  -403,  -403,  -403,   131,  -403,   131,   195,   272,   273,
+     242,  -403,  -403,   234,   246,   247,   248,   243,   249,   251,
+     297,  -403,   131,   137,  -403,   272,  -403,   273,    36,  -403,
+    -403,  -403,  -403,   297,   250,  -403
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -100,
-     -98,  -399,   -97,   -91,   188,  -399,  -399,  -344,  -399,   -99,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   134,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,   259,  -399,  -399,  -399,
-      83,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,   -69,  -399,   -84,  -399,  -399,  -399,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -317,   106,  -399,  -399,  -399,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -19,
-    -399,  -399,  -398,  -399,  -399,  -399,  -399,  -399,  -399,   260,
-    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -377,  -381,   265,
-    -399,  -399,   193,   -83,  -113,   -85,  -399,  -399,  -399,  -399,
-     289,  -399,   264,  -399,  -399,  -399,  -165,   164,  -150,  -399,
-    -399,  -399,  -399,  -399,  -399
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   -74,
+     -81,  -403,   -98,   141,   -82,   160,  -403,  -403,  -358,  -403,
+     -41,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   166,
+    -403,  -403,  -403,   176,  -403,  -403,  -403,   282,  -403,  -403,
+    -403,   103,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,   -52,  -403,   -84,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -333,   126,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+      -3,  -403,  -403,  -402,  -403,  -403,  -403,  -403,  -403,  -403,
+     285,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -398,  -392,
+     287,  -403,  -403,  -145,   -83,  -114,   -85,  -403,  -403,  -403,
+    -403,   314,  -403,   291,  -403,  -403,  -403,  -167,   187,  -149,
+    -403,  -403,  -403,  -403,  -403,  -403
 };
 
 /* 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 -219
+#define YYTABLE_NINF -222
 static const yytype_int16 yytable[] =
 {
-     143,   137,   141,   196,   149,   237,   153,   109,   110,   156,
-     222,   152,   403,   154,   155,   260,   151,   393,   151,   357,
-     187,   151,   111,   111,   250,   245,   112,   287,   188,   202,
-     309,   143,    58,   288,   440,   289,   227,   113,   203,   287,
-     431,   189,   254,   429,   190,   288,   112,   446,     5,   310,
-     361,   191,   215,   300,   301,   144,   157,   113,   444,     7,
-     443,   362,    10,   228,   158,   192,    59,   145,   231,   246,
-     232,   290,   162,   291,   426,    71,    72,   415,   116,   208,
-     114,   114,   233,   115,   163,   291,   209,   159,   193,   194,
-     441,    68,   445,   299,   302,   358,   232,   397,   116,    71,
-      72,   160,   116,    84,   164,    51,   165,    85,   233,   287,
-     388,   219,   166,    77,   405,   288,    53,   271,   220,   167,
-     168,   169,   270,   170,   389,   171,   406,   276,   258,   151,
-      54,    88,    89,   238,   172,   259,   239,   240,    81,    90,
-     241,    55,   351,   409,   390,   318,    56,   416,   242,   352,
-     410,   173,   174,    68,   417,   291,   391,     1,     2,    78,
-     197,    91,    92,   198,   199,    79,   243,    71,    72,   131,
-     394,   206,   207,   143,    82,   325,    93,    11,    12,    13,
-     324,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,    63,    64,    65,
-      66,    67,   353,   354,    75,    76,    96,    97,    98,    99,
-     341,   342,   343,   344,    58,    83,    95,   101,   102,   103,
-     104,   105,   106,   107,   128,   129,   130,   134,   398,   386,
-     147,   143,   366,   141,   -62,   201,   204,   205,   211,   213,
-     214,   226,   217,   218,   274,   223,   251,   277,   224,   225,
-     230,   236,   248,   279,   253,   255,   143,   256,   265,   404,
-     266,   324,   272,   269,   267,   281,  -218,   283,   285,   294,
-     295,   305,   307,   298,   312,   313,   315,   319,   320,   327,
-     326,   329,   330,   336,   338,   346,   331,   371,   387,   332,
-     399,   333,   334,   425,   335,   340,   348,   349,   350,   356,
-     360,   401,   412,   395,   396,   397,   411,   418,   419,   427,
-     437,   420,   421,   433,   143,   366,   141,   422,   432,   434,
-     435,   143,   439,   324,   436,   264,   438,   442,   447,   317,
-     424,   132,   286,   408,   216,   138,    87,   133,     0,   324,
-     139,   252
+     144,   138,   142,   198,   241,   154,   411,   220,   157,   401,
+     109,   110,   226,   150,   109,   110,   152,   265,   152,   365,
+     153,   152,   155,   156,   111,   111,   254,   249,   112,   111,
+     437,   231,   144,   118,   293,   109,   110,   439,   448,   113,
+     294,     5,    58,   315,   258,   210,   188,   451,   205,   112,
+     111,   454,   211,   112,   189,   452,   306,   307,   232,   235,
+     113,   236,   316,    10,   113,     1,     2,   190,   434,   423,
+     191,   250,   220,   237,   112,   197,    59,   192,    71,    72,
+     297,   117,   114,   114,   449,   113,   115,   114,   204,     7,
+     115,   193,   369,    68,    53,   366,   116,   308,   305,    51,
+     217,   158,   117,   370,   293,   165,   117,   166,   114,   159,
+     294,   115,   295,   167,   194,   195,   223,    54,   276,    55,
+     168,   169,   170,   224,   171,   145,   172,   117,    88,    89,
+     263,   152,   160,   275,    56,   173,    90,   146,   264,   163,
+     282,   453,    71,    72,    68,   117,   161,   405,   296,   325,
+     297,   164,   174,   175,   236,   293,   396,   413,    91,    92,
+     242,   294,    79,   243,   244,    77,   237,   245,   199,   414,
+     397,   200,   201,    93,    78,   246,   402,    95,   144,    63,
+      64,    65,    66,    67,   359,   331,    75,    76,   417,   332,
+     398,   424,   360,   247,    84,   101,   418,   102,    85,   425,
+      81,   297,   399,    11,    12,    13,    82,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,    96,    97,    98,    99,   103,   349,   350,
+     351,   352,    83,    71,    72,   406,   208,   209,   144,   374,
+     142,   361,   362,   104,   105,   106,   394,   107,   129,   130,
+     131,   132,    58,   135,   206,   148,   -65,   203,   213,   207,
+     230,   215,   216,   255,   144,   221,   222,   270,   280,   331,
+     227,   228,   229,   234,   240,   252,   412,   257,   259,   260,
+     271,   278,   274,  -221,   272,   283,   285,   287,   289,   291,
+     301,   300,   304,   311,   318,   313,   319,   321,   324,   344,
+     433,   326,   327,   334,   339,   335,   333,   346,   337,   338,
+     354,   379,   395,   340,   341,   342,   343,   348,   356,   357,
+     358,   403,   144,   374,   142,   364,   368,   404,   407,   144,
+     405,   331,   409,   420,   419,   426,   427,   430,   445,   428,
+     441,   429,   440,   435,   442,   443,   447,   331,   277,   444,
+     446,   455,   450,   323,   133,   432,   292,   416,     0,   269,
+     139,    87,   140,   262,   134,   256
 };
 
 static const yytype_int16 yycheck[] =
 {
-      85,    85,    85,   116,    95,   170,   103,    23,    24,   106,
-     160,   102,   356,   104,   105,    23,   101,   334,   103,    23,
-      29,   106,    38,    38,   174,    26,    62,    25,    37,   128,
-      35,   116,    65,    31,   432,    33,    29,    73,   129,    25,
-     421,    50,   192,   420,    53,    31,    62,   445,     0,    54,
-      62,    60,   151,    41,    42,    27,    29,    73,   439,     8,
-     437,    73,    99,    56,    37,    74,    99,    39,    25,    70,
-      27,    69,    34,    71,   418,   111,   112,   394,   114,    61,
-      96,    96,    39,    99,    46,    71,    68,    60,    97,    98,
-     434,    99,   105,   243,    82,    99,    27,   110,   114,   111,
-     112,    74,   114,   109,    28,   107,    30,   113,    39,    25,
-      26,    61,    36,   107,    34,    31,    99,   214,    68,    43,
-      44,    45,   213,    47,    40,    49,    46,   218,   108,   214,
-      99,    29,    30,    48,    58,   115,    51,    52,   113,    37,
-      55,    99,   108,   108,    60,   258,    99,   108,    63,   115,
-     115,    75,    76,    99,   115,    71,    72,     3,     4,   107,
-     100,    59,    60,   103,   104,    99,    81,   111,   112,    99,
-     335,    23,    24,   258,   113,   266,    74,     5,     6,     7,
-     265,     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,    19,    20,    21,
-      22,    23,   111,   112,    26,    27,   100,   101,   102,   103,
-      77,    78,    79,    80,    65,   113,   108,   108,   108,   108,
-     108,   108,   108,   103,   108,   108,   108,    23,   351,   330,
-     109,   326,   326,   326,   109,   109,    99,   110,    23,   108,
-     108,    64,   108,   108,    83,   109,    66,    23,   109,   109,
-     109,   109,   109,    23,   109,   109,   351,   109,   108,   360,
-     108,   356,   103,   110,   113,    23,   103,    23,    67,   109,
-      23,    23,    29,   109,   109,    23,    23,   110,   103,   109,
-     114,   108,   108,    23,    23,    23,   110,    23,    57,   110,
-      23,   110,   110,   416,   110,   110,   110,   110,   110,   108,
-     108,    23,    32,   110,   110,   110,   110,   108,   108,   419,
-     105,   109,   109,   115,   409,   409,   409,    66,   109,   108,
-     108,   416,   105,   418,   110,   201,   110,   435,   110,   256,
-     409,    82,   236,   362,   151,    85,    57,    83,    -1,   434,
-      85,   187
+      85,    85,    85,   117,   171,   103,   364,   152,   106,   342,
+      23,    24,   161,    95,    23,    24,   101,    23,   103,    23,
+     102,   106,   104,   105,    38,    38,   175,    26,    62,    38,
+     428,    29,   117,    74,    25,    23,    24,   429,   440,    73,
+      31,     0,    65,    35,   193,    61,    29,   445,   130,    62,
+      38,   453,    68,    62,    37,   447,    41,    42,    56,    25,
+      73,    27,    54,    99,    73,     3,     4,    50,   426,   402,
+      53,    70,   217,    39,    62,   116,    99,    60,   112,   113,
+      71,   115,    96,    96,   442,    73,    99,    96,   129,     8,
+      99,    74,    62,    99,    99,    99,   109,    82,   247,   107,
+     109,    29,   115,    73,    25,    28,   115,    30,    96,    37,
+      31,    99,    33,    36,    97,    98,    61,    99,   216,    99,
+      43,    44,    45,    68,    47,    27,    49,   115,    29,    30,
+     108,   216,    60,   215,    99,    58,    37,    39,   116,    34,
+     222,   105,   112,   113,    99,   115,    74,   111,    69,   263,
+      71,    46,    75,    76,    27,    25,    26,    34,    59,    60,
+      48,    31,    99,    51,    52,   107,    39,    55,   100,    46,
+      40,   103,   104,    74,   107,    63,   343,   108,   263,    19,
+      20,    21,    22,    23,   108,   270,    26,    27,   108,   271,
+      60,   108,   116,    81,   110,   108,   116,   108,   114,   116,
+     114,    71,    72,     5,     6,     7,   114,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,   100,   101,   102,   103,   108,    77,    78,
+      79,    80,   114,   112,   113,   359,    23,    24,   333,   333,
+     333,   112,   113,   108,   108,   108,   338,   103,   108,   108,
+     108,    99,    65,    23,    99,   110,   110,   110,    23,   111,
+      64,   108,   108,    66,   359,   108,   108,   108,    83,   364,
+     110,   110,   110,   110,   110,   110,   368,   110,   110,   110,
+     108,   103,   111,   103,   114,    23,    23,    23,    23,    67,
+      23,   110,   110,    23,   110,    29,    23,    23,   109,    23,
+     424,   111,   103,   109,   111,   110,   115,    23,   108,   108,
+      23,    23,    57,   111,   111,   111,   111,   111,   111,   111,
+     111,   111,   417,   417,   417,   108,   108,   111,    23,   424,
+     111,   426,    23,    32,   111,   108,   108,    66,   105,   110,
+     116,   110,   110,   427,   108,   108,   105,   442,   217,   111,
+     111,   111,   443,   260,    82,   417,   240,   370,    -1,   203,
+      85,    57,    85,   197,    83,   188
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,   117,   118,     0,   119,     8,   120,   121,
+       0,     3,     4,   118,   119,     0,   120,     8,   121,   122,
       99,     5,     6,     7,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,   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,   228,   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
+      15,    16,    17,    18,    19,    20,    21,    22,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   138,   162,   163,   170,   171,   172,   234,   236,   239,
+     252,   107,   237,    99,    99,    99,    99,   235,    65,    99,
+     142,   148,   240,   142,   142,   142,   142,   142,    99,   143,
+     156,   112,   113,   141,   233,   142,   142,   107,   107,    99,
+     238,   114,   114,   114,   110,   114,   174,   238,    29,    30,
+      37,    59,    60,    74,   241,   108,   100,   101,   102,   103,
+     161,   108,   108,   108,   108,   108,   108,   103,   158,    23,
+      24,    38,    62,    73,    96,    99,   109,   115,   147,   149,
+     164,   178,   181,   217,   221,   224,   228,   230,   231,   108,
+     108,   108,    99,   164,   240,    23,   173,   177,   181,   217,
+     227,   229,   231,   232,   233,    27,    39,   242,   110,   246,
+     141,   139,   233,   141,   139,   141,   141,   139,    29,    37,
+      60,    74,   169,    34,    46,    28,    30,    36,    43,    44,
+      45,    47,    49,    58,    75,    76,   182,   184,   187,   189,
+     191,   195,   198,   200,   202,   204,   207,   216,    29,    37,
+      50,    53,    60,    74,    97,    98,   165,   147,   232,   100,
+     103,   104,   160,   110,   147,   141,    99,   111,    23,    24,
+      61,    68,   243,    23,   249,   108,   108,   109,   140,   147,
+     230,   108,   108,    61,    68,   245,   246,   110,   110,   110,
+      64,    29,    56,   199,   110,    25,    27,    39,   188,   244,
+     110,   244,    48,    51,    52,    55,    63,    81,   211,    26,
+      70,   203,   110,   248,   246,    66,   245,   110,   246,   110,
+     110,   167,   160,   108,   116,    23,   150,   151,   152,   156,
+     108,   108,   114,   175,   111,   141,   139,   140,   103,   159,
+      83,   136,   141,    23,   225,    23,   226,    23,   201,    23,
+     194,    67,   194,    25,    31,    33,    69,    71,   183,   193,
+     110,    23,   212,   213,   110,   246,    41,    42,    82,   208,
+     209,    23,   251,    29,   192,    35,    54,   196,   110,    23,
+     168,    23,   166,   168,   109,   232,   111,   103,   157,   144,
+     145,   233,   141,   115,   109,   110,   247,   108,   108,   111,
+     111,   111,   111,   111,    23,   215,    23,   214,   111,    77,
+      78,    79,    80,   197,    23,   210,   111,   111,   111,   108,
+     116,   112,   113,   153,   108,    23,    99,   146,   108,    62,
+      73,   176,   179,   180,   181,   218,   219,   222,   227,    23,
+     250,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,   137,   141,    57,    26,    40,    60,    72,
+     185,   193,   244,   111,   111,   111,   232,    23,   154,    23,
+     155,   145,   141,    34,    46,   205,   207,   108,   116,   111,
+      32,   186,   190,   193,   108,   116,   108,   108,   110,   110,
+      66,   206,   179,   232,   145,   136,   220,   225,   223,   226,
+     110,   116,   108,   108,   111,   105,   111,   105,   210,   145,
+     137,   225,   226,   105,   210,   111
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2445,32 +2457,61 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 527 "program_parse.y"
     {
-          (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
+          (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
 
-          if ((yyvsp[(1) - (3)].negate)) {
+          if ((yyvsp[(1) - (2)].negate)) {
+             (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
+          }
+       ;}
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
+#line 535 "program_parse.y"
+    {
+          (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
+
+          if (!state->option.NV_fragment) {
+             yyerror(& (yylsp[(2) - (4)]), state, "unexpected character '|'");
+             YYERROR;
+          }
+
+          if ((yyvsp[(1) - (4)].negate)) {
              (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
           }
 
+          (yyval.src_reg).Base.Abs = 1;
+       ;}
+    break;
+
+  case 49:
+
+/* Line 1455 of yacc.c  */
+#line 552 "program_parse.y"
+    {
+          (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
+
           (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
-                                                   (yyvsp[(3) - (3)].swiz_mask).swizzle);
+                                                   (yyvsp[(2) - (2)].swiz_mask).swizzle);
        ;}
     break;
 
-  case 48:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 538 "program_parse.y"
+#line 559 "program_parse.y"
     {
           struct asm_symbol temp_sym;
 
           if (!state->option.NV_fragment) {
-             yyerror(& (yylsp[(2) - (2)]), state, "expected scalar suffix");
+             yyerror(& (yylsp[(1) - (1)]), state, "expected scalar suffix");
              YYERROR;
           }
 
           memset(& temp_sym, 0, sizeof(temp_sym));
           temp_sym.param_binding_begin = ~0;
-          initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(2) - (2)].vector));
+          initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector));
 
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_CONSTANT;
@@ -2478,10 +2519,10 @@ yyreduce:
        ;}
     break;
 
-  case 49:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 557 "program_parse.y"
+#line 578 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2494,10 +2535,32 @@ yyreduce:
        ;}
     break;
 
-  case 50:
+  case 52:
+
+/* Line 1455 of yacc.c  */
+#line 589 "program_parse.y"
+    {
+          (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
+
+          if (!state->option.NV_fragment) {
+             yyerror(& (yylsp[(2) - (5)]), state, "unexpected character '|'");
+             YYERROR;
+          }
+
+          if ((yyvsp[(1) - (5)].negate)) {
+             (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
+          }
+
+          (yyval.src_reg).Base.Abs = 1;
+          (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
+                                                   (yyvsp[(4) - (5)].swiz_mask).swizzle);
+       ;}
+    break;
+
+  case 53:
 
 /* Line 1455 of yacc.c  */
-#line 570 "program_parse.y"
+#line 609 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2519,10 +2582,10 @@ yyreduce:
        ;}
     break;
 
-  case 51:
+  case 54:
 
 /* Line 1455 of yacc.c  */
-#line 592 "program_parse.y"
+#line 631 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2531,10 +2594,10 @@ yyreduce:
        ;}
     break;
 
-  case 52:
+  case 55:
 
 /* Line 1455 of yacc.c  */
-#line 601 "program_parse.y"
+#line 640 "program_parse.y"
     {
           const unsigned xyzw_valid =
              ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
@@ -2567,20 +2630,20 @@ yyreduce:
        ;}
     break;
 
-  case 53:
+  case 56:
 
 /* Line 1455 of yacc.c  */
-#line 634 "program_parse.y"
+#line 673 "program_parse.y"
     {
           (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
           (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
        ;}
     break;
 
-  case 54:
+  case 57:
 
 /* Line 1455 of yacc.c  */
-#line 641 "program_parse.y"
+#line 680 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2597,10 +2660,10 @@ yyreduce:
        ;}
     break;
 
-  case 55:
+  case 58:
 
 /* Line 1455 of yacc.c  */
-#line 656 "program_parse.y"
+#line 695 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2650,10 +2713,10 @@ yyreduce:
        ;}
     break;
 
-  case 56:
+  case 59:
 
 /* Line 1455 of yacc.c  */
-#line 706 "program_parse.y"
+#line 745 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2697,10 +2760,10 @@ yyreduce:
        ;}
     break;
 
-  case 57:
+  case 60:
 
 /* Line 1455 of yacc.c  */
-#line 748 "program_parse.y"
+#line 787 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2713,10 +2776,10 @@ yyreduce:
        ;}
     break;
 
-  case 58:
+  case 61:
 
 /* Line 1455 of yacc.c  */
-#line 759 "program_parse.y"
+#line 798 "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)) {
@@ -2739,10 +2802,10 @@ yyreduce:
        ;}
     break;
 
-  case 59:
+  case 62:
 
 /* Line 1455 of yacc.c  */
-#line 780 "program_parse.y"
+#line 819 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2752,10 +2815,10 @@ yyreduce:
        ;}
     break;
 
-  case 60:
+  case 63:
 
 /* Line 1455 of yacc.c  */
-#line 790 "program_parse.y"
+#line 829 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2763,10 +2826,10 @@ yyreduce:
        ;}
     break;
 
-  case 61:
+  case 64:
 
 /* Line 1455 of yacc.c  */
-#line 796 "program_parse.y"
+#line 835 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2797,10 +2860,10 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 65:
 
 /* Line 1455 of yacc.c  */
-#line 827 "program_parse.y"
+#line 866 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2817,20 +2880,20 @@ yyreduce:
        ;}
     break;
 
-  case 65:
+  case 68:
 
 /* Line 1455 of yacc.c  */
-#line 846 "program_parse.y"
+#line 885 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 66:
+  case 69:
 
 /* Line 1455 of yacc.c  */
-#line 853 "program_parse.y"
+#line 892 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2842,31 +2905,31 @@ yyreduce:
        ;}
     break;
 
-  case 67:
+  case 70:
 
 /* Line 1455 of yacc.c  */
-#line 864 "program_parse.y"
+#line 903 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 68:
+  case 71:
 
 /* Line 1455 of yacc.c  */
-#line 865 "program_parse.y"
+#line 904 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 69:
+  case 72:
 
 /* Line 1455 of yacc.c  */
-#line 866 "program_parse.y"
+#line 905 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
-  case 70:
+  case 73:
 
 /* Line 1455 of yacc.c  */
-#line 870 "program_parse.y"
+#line 909 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2878,10 +2941,10 @@ yyreduce:
        ;}
     break;
 
-  case 71:
+  case 74:
 
 /* Line 1455 of yacc.c  */
-#line 882 "program_parse.y"
+#line 921 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2893,10 +2956,10 @@ yyreduce:
        ;}
     break;
 
-  case 72:
+  case 75:
 
 /* Line 1455 of yacc.c  */
-#line 894 "program_parse.y"
+#line 933 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2914,10 +2977,10 @@ yyreduce:
        ;}
     break;
 
-  case 73:
+  case 76:
 
 /* Line 1455 of yacc.c  */
-#line 912 "program_parse.y"
+#line 951 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2928,10 +2991,10 @@ yyreduce:
        ;}
     break;
 
-  case 74:
+  case 77:
 
 /* Line 1455 of yacc.c  */
-#line 923 "program_parse.y"
+#line 962 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2943,24 +3006,24 @@ yyreduce:
        ;}
     break;
 
-  case 79:
+  case 82:
 
 /* Line 1455 of yacc.c  */
-#line 939 "program_parse.y"
+#line 978 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 84:
+  case 87:
 
 /* Line 1455 of yacc.c  */
-#line 943 "program_parse.y"
+#line 982 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
-  case 91:
+  case 94:
 
 /* Line 1455 of yacc.c  */
-#line 955 "program_parse.y"
+#line 994 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -2978,55 +3041,55 @@ yyreduce:
        ;}
     break;
 
-  case 92:
+  case 95:
 
 /* Line 1455 of yacc.c  */
-#line 973 "program_parse.y"
+#line 1012 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 93:
+  case 96:
 
 /* Line 1455 of yacc.c  */
-#line 977 "program_parse.y"
+#line 1016 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
     break;
 
-  case 94:
+  case 97:
 
 /* Line 1455 of yacc.c  */
-#line 983 "program_parse.y"
+#line 1022 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
     break;
 
-  case 95:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 987 "program_parse.y"
+#line 1026 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
     break;
 
-  case 96:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 991 "program_parse.y"
+#line 1030 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
     break;
 
-  case 97:
+  case 100:
 
 /* Line 1455 of yacc.c  */
-#line 995 "program_parse.y"
+#line 1034 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -3037,10 +3100,10 @@ yyreduce:
        ;}
     break;
 
-  case 98:
+  case 101:
 
 /* Line 1455 of yacc.c  */
-#line 1004 "program_parse.y"
+#line 1043 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -3051,38 +3114,38 @@ yyreduce:
        ;}
     break;
 
-  case 99:
+  case 102:
 
 /* Line 1455 of yacc.c  */
-#line 1013 "program_parse.y"
+#line 1052 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 100:
+  case 103:
 
 /* Line 1455 of yacc.c  */
-#line 1017 "program_parse.y"
+#line 1056 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 101:
+  case 104:
 
 /* Line 1455 of yacc.c  */
-#line 1022 "program_parse.y"
+#line 1061 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 102:
+  case 105:
 
 /* Line 1455 of yacc.c  */
-#line 1028 "program_parse.y"
+#line 1067 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -3093,46 +3156,46 @@ yyreduce:
        ;}
     break;
 
-  case 106:
+  case 109:
 
 /* Line 1455 of yacc.c  */
-#line 1042 "program_parse.y"
+#line 1081 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
     break;
 
-  case 107:
+  case 110:
 
 /* Line 1455 of yacc.c  */
-#line 1046 "program_parse.y"
+#line 1085 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 108:
+  case 111:
 
 /* Line 1455 of yacc.c  */
-#line 1050 "program_parse.y"
+#line 1089 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
     break;
 
-  case 109:
+  case 112:
 
 /* Line 1455 of yacc.c  */
-#line 1054 "program_parse.y"
+#line 1093 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 112:
+  case 115:
 
 /* Line 1455 of yacc.c  */
-#line 1062 "program_parse.y"
+#line 1101 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -3148,10 +3211,10 @@ yyreduce:
        ;}
     break;
 
-  case 113:
+  case 116:
 
 /* Line 1455 of yacc.c  */
-#line 1078 "program_parse.y"
+#line 1117 "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, 
@@ -3173,19 +3236,19 @@ yyreduce:
        ;}
     break;
 
-  case 114:
+  case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1100 "program_parse.y"
+#line 1139 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 115:
+  case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1104 "program_parse.y"
+#line 1143 "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");
@@ -3196,38 +3259,38 @@ yyreduce:
        ;}
     break;
 
-  case 116:
+  case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1115 "program_parse.y"
+#line 1154 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
     break;
 
-  case 117:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1121 "program_parse.y"
+#line 1160 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
     break;
 
-  case 119:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1128 "program_parse.y"
+#line 1167 "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 120:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1135 "program_parse.y"
+#line 1174 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3235,10 +3298,10 @@ yyreduce:
        ;}
     break;
 
-  case 121:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1141 "program_parse.y"
+#line 1180 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3246,10 +3309,10 @@ yyreduce:
        ;}
     break;
 
-  case 122:
+  case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1147 "program_parse.y"
+#line 1186 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3257,10 +3320,10 @@ yyreduce:
        ;}
     break;
 
-  case 123:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1155 "program_parse.y"
+#line 1194 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3268,10 +3331,10 @@ yyreduce:
        ;}
     break;
 
-  case 124:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1161 "program_parse.y"
+#line 1200 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3279,10 +3342,10 @@ yyreduce:
        ;}
     break;
 
-  case 125:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1167 "program_parse.y"
+#line 1206 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3290,10 +3353,10 @@ yyreduce:
        ;}
     break;
 
-  case 126:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1175 "program_parse.y"
+#line 1214 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3301,10 +3364,10 @@ yyreduce:
        ;}
     break;
 
-  case 127:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1181 "program_parse.y"
+#line 1220 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3312,10 +3375,10 @@ yyreduce:
        ;}
     break;
 
-  case 128:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1187 "program_parse.y"
+#line 1226 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3323,101 +3386,101 @@ yyreduce:
        ;}
     break;
 
-  case 129:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1194 "program_parse.y"
+#line 1233 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 130:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1195 "program_parse.y"
+#line 1234 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 131:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1198 "program_parse.y"
+#line 1237 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 132:
+  case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1199 "program_parse.y"
+#line 1238 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 133:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1200 "program_parse.y"
+#line 1239 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 134:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1201 "program_parse.y"
+#line 1240 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 135:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1202 "program_parse.y"
+#line 1241 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 136:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1203 "program_parse.y"
+#line 1242 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 137:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1204 "program_parse.y"
+#line 1243 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 138:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1205 "program_parse.y"
+#line 1244 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 139:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1206 "program_parse.y"
+#line 1245 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 140:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1207 "program_parse.y"
+#line 1246 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 141:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1208 "program_parse.y"
+#line 1247 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
-  case 142:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1212 "program_parse.y"
+#line 1251 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3426,37 +3489,37 @@ yyreduce:
        ;}
     break;
 
-  case 143:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1221 "program_parse.y"
+#line 1260 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 144:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1225 "program_parse.y"
+#line 1264 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
     break;
 
-  case 145:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1229 "program_parse.y"
+#line 1268 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
     break;
 
-  case 146:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1235 "program_parse.y"
+#line 1274 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3465,28 +3528,28 @@ yyreduce:
        ;}
     break;
 
-  case 147:
+  case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1244 "program_parse.y"
+#line 1283 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 148:
+  case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1248 "program_parse.y"
+#line 1287 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
     break;
 
-  case 149:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1252 "program_parse.y"
+#line 1291 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3497,57 +3560,57 @@ yyreduce:
        ;}
     break;
 
-  case 150:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1261 "program_parse.y"
+#line 1300 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 151:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1265 "program_parse.y"
+#line 1304 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
     break;
 
-  case 152:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1271 "program_parse.y"
+#line 1310 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
     break;
 
-  case 153:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1277 "program_parse.y"
+#line 1316 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
        ;}
     break;
 
-  case 154:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1284 "program_parse.y"
+#line 1323 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
        ;}
     break;
 
-  case 155:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1289 "program_parse.y"
+#line 1328 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3555,10 +3618,10 @@ yyreduce:
        ;}
     break;
 
-  case 156:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1297 "program_parse.y"
+#line 1336 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3568,10 +3631,10 @@ yyreduce:
        ;}
     break;
 
-  case 158:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1309 "program_parse.y"
+#line 1348 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3579,46 +3642,46 @@ yyreduce:
        ;}
     break;
 
-  case 159:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1317 "program_parse.y"
+#line 1356 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
     break;
 
-  case 160:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1323 "program_parse.y"
+#line 1362 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
     break;
 
-  case 161:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1327 "program_parse.y"
+#line 1366 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
     break;
 
-  case 162:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1331 "program_parse.y"
+#line 1370 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
     break;
 
-  case 163:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1337 "program_parse.y"
+#line 1376 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3629,10 +3692,10 @@ yyreduce:
        ;}
     break;
 
-  case 164:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1348 "program_parse.y"
+#line 1387 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3641,92 +3704,92 @@ yyreduce:
        ;}
     break;
 
-  case 165:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "program_parse.y"
+#line 1396 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 166:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1361 "program_parse.y"
+#line 1400 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
     break;
 
-  case 167:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1366 "program_parse.y"
+#line 1405 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 168:
+  case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1370 "program_parse.y"
+#line 1409 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 169:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1374 "program_parse.y"
+#line 1413 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 170:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1378 "program_parse.y"
+#line 1417 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
     break;
 
-  case 171:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1384 "program_parse.y"
+#line 1423 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 172:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1391 "program_parse.y"
+#line 1430 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
     break;
 
-  case 173:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1395 "program_parse.y"
+#line 1434 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
     break;
 
-  case 174:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1401 "program_parse.y"
+#line 1440 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3734,10 +3797,10 @@ yyreduce:
        ;}
     break;
 
-  case 175:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1409 "program_parse.y"
+#line 1448 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3748,38 +3811,38 @@ yyreduce:
        ;}
     break;
 
-  case 176:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1420 "program_parse.y"
+#line 1459 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 177:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1427 "program_parse.y"
+#line 1466 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
     break;
 
-  case 178:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1431 "program_parse.y"
+#line 1470 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
     break;
 
-  case 179:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1437 "program_parse.y"
+#line 1476 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3789,10 +3852,10 @@ yyreduce:
        ;}
     break;
 
-  case 180:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1447 "program_parse.y"
+#line 1486 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3802,20 +3865,20 @@ yyreduce:
        ;}
     break;
 
-  case 181:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1457 "program_parse.y"
+#line 1496 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
        ;}
     break;
 
-  case 182:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1462 "program_parse.y"
+#line 1501 "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).
@@ -3833,10 +3896,10 @@ yyreduce:
        ;}
     break;
 
-  case 183:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1480 "program_parse.y"
+#line 1519 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3844,55 +3907,55 @@ yyreduce:
        ;}
     break;
 
-  case 184:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1488 "program_parse.y"
+#line 1527 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 185:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1492 "program_parse.y"
+#line 1531 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 186:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1498 "program_parse.y"
+#line 1537 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
     break;
 
-  case 187:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1502 "program_parse.y"
+#line 1541 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
     break;
 
-  case 188:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1506 "program_parse.y"
+#line 1545 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
     break;
 
-  case 189:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1512 "program_parse.y"
+#line 1551 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3903,88 +3966,88 @@ yyreduce:
        ;}
     break;
 
-  case 190:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1523 "program_parse.y"
+#line 1562 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 191:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1528 "program_parse.y"
+#line 1567 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 192:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1533 "program_parse.y"
+#line 1572 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
        ;}
     break;
 
-  case 193:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1538 "program_parse.y"
+#line 1577 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
        ;}
     break;
 
-  case 194:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1543 "program_parse.y"
+#line 1582 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
        ;}
     break;
 
-  case 195:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1548 "program_parse.y"
+#line 1587 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
        ;}
     break;
 
-  case 196:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1555 "program_parse.y"
+#line 1594 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
     break;
 
-  case 197:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1559 "program_parse.y"
+#line 1598 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 198:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1564 "program_parse.y"
+#line 1603 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -3998,10 +4061,10 @@ yyreduce:
        ;}
     break;
 
-  case 199:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1577 "program_parse.y"
+#line 1616 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -4010,10 +4073,10 @@ yyreduce:
        ;}
     break;
 
-  case 200:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1585 "program_parse.y"
+#line 1624 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -4024,20 +4087,20 @@ yyreduce:
        ;}
     break;
 
-  case 201:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1596 "program_parse.y"
+#line 1635 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_DEPTH_RANGE;
        ;}
     break;
 
-  case 206:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1608 "program_parse.y"
+#line 1647 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4047,30 +4110,30 @@ yyreduce:
        ;}
     break;
 
-  case 207:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "program_parse.y"
+#line 1657 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 208:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1623 "program_parse.y"
+#line 1662 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 209:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1630 "program_parse.y"
+#line 1669 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4080,10 +4143,10 @@ yyreduce:
        ;}
     break;
 
-  case 210:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1640 "program_parse.y"
+#line 1679 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4093,30 +4156,30 @@ yyreduce:
        ;}
     break;
 
-  case 211:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1649 "program_parse.y"
+#line 1688 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
        ;}
     break;
 
-  case 212:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 1654 "program_parse.y"
+#line 1693 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 213:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1661 "program_parse.y"
+#line 1700 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4126,10 +4189,10 @@ yyreduce:
        ;}
     break;
 
-  case 214:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1671 "program_parse.y"
+#line 1710 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -4139,10 +4202,10 @@ yyreduce:
        ;}
     break;
 
-  case 215:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1681 "program_parse.y"
+#line 1720 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -4152,10 +4215,10 @@ yyreduce:
        ;}
     break;
 
-  case 220:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1696 "program_parse.y"
+#line 1735 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4165,10 +4228,10 @@ yyreduce:
        ;}
     break;
 
-  case 221:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1706 "program_parse.y"
+#line 1745 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4178,10 +4241,10 @@ yyreduce:
        ;}
     break;
 
-  case 222:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1714 "program_parse.y"
+#line 1753 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
@@ -4191,10 +4254,10 @@ yyreduce:
        ;}
     break;
 
-  case 223:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1724 "program_parse.y"
+#line 1763 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -4204,10 +4267,10 @@ yyreduce:
        ;}
     break;
 
-  case 224:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1732 "program_parse.y"
+#line 1771 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4217,10 +4280,10 @@ yyreduce:
        ;}
     break;
 
-  case 225:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1741 "program_parse.y"
+#line 1780 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4230,10 +4293,10 @@ yyreduce:
        ;}
     break;
 
-  case 226:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1750 "program_parse.y"
+#line 1789 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4243,63 +4306,63 @@ yyreduce:
        ;}
     break;
 
-  case 227:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 1760 "program_parse.y"
+#line 1799 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
     break;
 
-  case 228:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1764 "program_parse.y"
+#line 1803 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
     break;
 
-  case 229:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1769 "program_parse.y"
+#line 1808 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 230:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1770 "program_parse.y"
+#line 1809 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
-  case 231:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1771 "program_parse.y"
+#line 1810 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
-  case 232:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1774 "program_parse.y"
+#line 1813 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 234:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1777 "program_parse.y"
+#line 1816 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
-  case 236:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1781 "program_parse.y"
+#line 1820 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4307,10 +4370,10 @@ yyreduce:
        ;}
     break;
 
-  case 237:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1787 "program_parse.y"
+#line 1826 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4318,10 +4381,10 @@ yyreduce:
        ;}
     break;
 
-  case 238:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1795 "program_parse.y"
+#line 1834 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@@ -4334,10 +4397,10 @@ yyreduce:
        ;}
     break;
 
-  case 239:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1808 "program_parse.y"
+#line 1847 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4348,10 +4411,10 @@ yyreduce:
        ;}
     break;
 
-  case 240:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1817 "program_parse.y"
+#line 1856 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4362,19 +4425,19 @@ yyreduce:
        ;}
     break;
 
-  case 241:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1826 "program_parse.y"
+#line 1865 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
     break;
 
-  case 242:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1830 "program_parse.y"
+#line 1869 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4385,10 +4448,10 @@ yyreduce:
        ;}
     break;
 
-  case 243:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1839 "program_parse.y"
+#line 1878 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4399,10 +4462,10 @@ yyreduce:
        ;}
     break;
 
-  case 244:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1848 "program_parse.y"
+#line 1887 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4413,19 +4476,19 @@ yyreduce:
        ;}
     break;
 
-  case 245:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1859 "program_parse.y"
+#line 1898 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
     break;
 
-  case 246:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1865 "program_parse.y"
+#line 1904 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4433,10 +4496,10 @@ yyreduce:
        ;}
     break;
 
-  case 247:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1871 "program_parse.y"
+#line 1910 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4447,10 +4510,10 @@ yyreduce:
        ;}
     break;
 
-  case 248:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1880 "program_parse.y"
+#line 1919 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4461,19 +4524,19 @@ yyreduce:
        ;}
     break;
 
-  case 249:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1891 "program_parse.y"
+#line 1930 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
     break;
 
-  case 250:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1895 "program_parse.y"
+#line 1934 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4484,10 +4547,10 @@ yyreduce:
        ;}
     break;
 
-  case 251:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1904 "program_parse.y"
+#line 1943 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4498,94 +4561,94 @@ yyreduce:
        ;}
     break;
 
-  case 252:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1914 "program_parse.y"
+#line 1953 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 253:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1915 "program_parse.y"
+#line 1954 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 254:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1916 "program_parse.y"
+#line 1955 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 255:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1919 "program_parse.y"
+#line 1958 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 256:
+  case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1920 "program_parse.y"
+#line 1959 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 257:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1921 "program_parse.y"
+#line 1960 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
-  case 258:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1924 "program_parse.y"
+#line 1963 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 259:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 1925 "program_parse.y"
+#line 1964 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 260:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 1928 "program_parse.y"
+#line 1967 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 261:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 1929 "program_parse.y"
+#line 1968 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 262:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1932 "program_parse.y"
+#line 1971 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
-  case 263:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 1933 "program_parse.y"
+#line 1972 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
-  case 264:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1937 "program_parse.y"
+#line 1976 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4596,10 +4659,10 @@ yyreduce:
        ;}
     break;
 
-  case 265:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 1948 "program_parse.y"
+#line 1987 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4610,10 +4673,10 @@ yyreduce:
        ;}
     break;
 
-  case 266:
+  case 269:
 
 /* Line 1455 of yacc.c  */
-#line 1959 "program_parse.y"
+#line 1998 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4624,10 +4687,10 @@ yyreduce:
        ;}
     break;
 
-  case 267:
+  case 270:
 
 /* Line 1455 of yacc.c  */
-#line 1970 "program_parse.y"
+#line 2009 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4651,7 +4714,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4655 "program_parse.tab.c"
+#line 4718 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4870,7 +4933,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1990 "program_parse.y"
+#line 2029 "program_parse.y"
 
 
 struct asm_instruction *
index fa94f763c4d6cbec7c319a051715a44ea2663361..32aa9d503f10efdaf22b5e5e13a7f9f90b41d156 100644 (file)
@@ -181,7 +181,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
 %type <inst> KIL_instruction
 
 %type <dst_reg> dstReg maskedDstReg maskedAddrReg
-%type <src_reg> srcReg scalarSrcReg swizzleSrcReg
+%type <src_reg> srcReg scalarUse scalarSrcReg swizzleSrcReg
 %type <swiz_mask> scalarSuffix swizzleSuffix extendedSwizzle
 %type <ext_swizzle> extSwizComp extSwizSel
 %type <swiz_mask> optionalMask
@@ -523,29 +523,50 @@ SWZ_instruction: SWZ maskedDstReg ',' srcReg ',' extendedSwizzle
        }
        ;
 
-scalarSrcReg: optionalSign srcReg scalarSuffix
+scalarSrcReg: optionalSign scalarUse
        {
           $$ = $2;
 
           if ($1) {
              $$.Base.Negate = ~$$.Base.Negate;
           }
+       }
+       | optionalSign '|' scalarUse '|'
+       {
+          $$ = $3;
+
+          if (!state->option.NV_fragment) {
+             yyerror(& @2, state, "unexpected character '|'");
+             YYERROR;
+          }
+
+          if ($1) {
+             $$.Base.Negate = ~$$.Base.Negate;
+          }
+
+          $$.Base.Abs = 1;
+       }
+       ;
+
+scalarUse:  srcReg scalarSuffix
+       {
+          $$ = $1;
 
           $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
-                                                   $3.swizzle);
+                                                   $2.swizzle);
        }
-       | optionalSign paramConstScalarUse
+       | paramConstScalarUse
        {
           struct asm_symbol temp_sym;
 
           if (!state->option.NV_fragment) {
-             yyerror(& @2, state, "expected scalar suffix");
+             yyerror(& @1, state, "expected scalar suffix");
              YYERROR;
           }
 
           memset(& temp_sym, 0, sizeof(temp_sym));
           temp_sym.param_binding_begin = ~0;
-          initialize_symbol_from_const(state->prog, & temp_sym, & $2);
+          initialize_symbol_from_const(state->prog, & temp_sym, & $1);
 
           init_src_reg(& $$);
           $$.Base.File = PROGRAM_CONSTANT;
@@ -564,6 +585,24 @@ swizzleSrcReg: optionalSign srcReg swizzleSuffix
           $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
                                                    $3.swizzle);
        }
+       | optionalSign '|' srcReg swizzleSuffix '|'
+       {
+          $$ = $3;
+
+          if (!state->option.NV_fragment) {
+             yyerror(& @2, state, "unexpected character '|'");
+             YYERROR;
+          }
+
+          if ($1) {
+             $$.Base.Negate = ~$$.Base.Negate;
+          }
+
+          $$.Base.Abs = 1;
+          $$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
+                                                   $4.swizzle);
+       }
+
        ;
 
 maskedDstReg: dstReg optionalMask