• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* A Bison parser, made by GNU Bison 2.5.  */
2 
3 /* Bison implementation for Yacc-like parsers in C
4 
5       Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
6 
7    This program is free software: you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation, either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 /* As a special exception, you may create a larger work that contains
21    part or all of the Bison parser skeleton and distribute that work
22    under terms of your choice, so long as that work isn't itself a
23    parser generator using the skeleton or a modified version thereof
24    as a parser skeleton.  Alternatively, if you modify or redistribute
25    the parser skeleton itself, you may (at your option) remove this
26    special exception, which will cause the skeleton and the resulting
27    Bison output files to be licensed under the GNU General Public
28    License without this special exception.
29 
30    This special exception was added by the Free Software Foundation in
31    version 2.2 of Bison.  */
32 
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34    simplifying the original so-called "semantic" parser.  */
35 
36 /* All symbols defined below should begin with yy or YY, to avoid
37    infringing on user name space.  This should be done even for local
38    variables, as they might otherwise be expanded by user macros.
39    There are some unavoidable exceptions within include files to
40    define necessary library symbols; they are noted "INFRINGES ON
41    USER NAME SPACE" below.  */
42 
43 /* Identify Bison output.  */
44 #define YYBISON 1
45 
46 /* Bison version.  */
47 #define YYBISON_VERSION "2.5"
48 
49 /* Skeleton name.  */
50 #define YYSKELETON_NAME "yacc.c"
51 
52 /* Pure parsers.  */
53 #define YYPURE 1
54 
55 /* Push parsers.  */
56 #define YYPUSH 0
57 
58 /* Pull parsers.  */
59 #define YYPULL 1
60 
61 /* Using locations.  */
62 #define YYLSP_NEEDED 1
63 
64 /* Substitute the variable and function names.  */
65 #define yyparse         _mesa_program_parse
66 #define yylex           _mesa_program_lex
67 #define yyerror         _mesa_program_error
68 #define yylval          _mesa_program_lval
69 #define yychar          _mesa_program_char
70 #define yydebug         _mesa_program_debug
71 #define yynerrs         _mesa_program_nerrs
72 #define yylloc          _mesa_program_lloc
73 
74 /* Copy the first part of user declarations.  */
75 
76 /* Line 268 of yacc.c  */
77 #line 1 "src/src/mesa/program/program_parse.y"
78 
79 /*
80  * Copyright © 2009 Intel Corporation
81  *
82  * Permission is hereby granted, free of charge, to any person obtaining a
83  * copy of this software and associated documentation files (the "Software"),
84  * to deal in the Software without restriction, including without limitation
85  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
86  * and/or sell copies of the Software, and to permit persons to whom the
87  * Software is furnished to do so, subject to the following conditions:
88  *
89  * The above copyright notice and this permission notice (including the next
90  * paragraph) shall be included in all copies or substantial portions of the
91  * Software.
92  *
93  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
94  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
95  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
96  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
97  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
98  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
99  * DEALINGS IN THE SOFTWARE.
100  */
101 #include <stdio.h>
102 #include <stdlib.h>
103 #include <string.h>
104 
105 #include "main/mtypes.h"
106 #include "main/imports.h"
107 #include "program/program.h"
108 #include "program/prog_parameter.h"
109 #include "program/prog_parameter_layout.h"
110 #include "program/prog_statevars.h"
111 #include "program/prog_instruction.h"
112 
113 #include "program/symbol_table.h"
114 #include "program/program_parser.h"
115 
116 extern void *yy_scan_string(char *);
117 extern void yy_delete_buffer(void *);
118 
119 static struct asm_symbol *declare_variable(struct asm_parser_state *state,
120     char *name, enum asm_type t, struct YYLTYPE *locp);
121 
122 static int add_state_reference(struct gl_program_parameter_list *param_list,
123     const gl_state_index tokens[STATE_LENGTH]);
124 
125 static int initialize_symbol_from_state(struct gl_program *prog,
126     struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
127 
128 static int initialize_symbol_from_param(struct gl_program *prog,
129     struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
130 
131 static int initialize_symbol_from_const(struct gl_program *prog,
132     struct asm_symbol *param_var, const struct asm_vector *vec,
133     GLboolean allowSwizzle);
134 
135 static int yyparse(struct asm_parser_state *state);
136 
137 static char *make_error_string(const char *fmt, ...);
138 
139 static void yyerror(struct YYLTYPE *locp, struct asm_parser_state *state,
140     const char *s);
141 
142 static int validate_inputs(struct YYLTYPE *locp,
143     struct asm_parser_state *state);
144 
145 static void init_dst_reg(struct prog_dst_register *r);
146 
147 static void set_dst_reg(struct prog_dst_register *r,
148                         gl_register_file file, GLint index);
149 
150 static void init_src_reg(struct asm_src_register *r);
151 
152 static void set_src_reg(struct asm_src_register *r,
153                         gl_register_file file, GLint index);
154 
155 static void set_src_reg_swz(struct asm_src_register *r,
156                             gl_register_file file, GLint index, GLuint swizzle);
157 
158 static void asm_instruction_set_operands(struct asm_instruction *inst,
159     const struct prog_dst_register *dst, const struct asm_src_register *src0,
160     const struct asm_src_register *src1, const struct asm_src_register *src2);
161 
162 static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
163     const struct prog_dst_register *dst, const struct asm_src_register *src0,
164     const struct asm_src_register *src1, const struct asm_src_register *src2);
165 
166 static struct asm_instruction *asm_instruction_copy_ctor(
167     const struct prog_instruction *base, const struct prog_dst_register *dst,
168     const struct asm_src_register *src0, const struct asm_src_register *src1,
169     const struct asm_src_register *src2);
170 
171 #ifndef FALSE
172 #define FALSE 0
173 #define TRUE (!FALSE)
174 #endif
175 
176 #define YYLLOC_DEFAULT(Current, Rhs, N)					\
177    do {									\
178       if (YYID(N)) {							\
179 	 (Current).first_line = YYRHSLOC(Rhs, 1).first_line;		\
180 	 (Current).first_column = YYRHSLOC(Rhs, 1).first_column;	\
181 	 (Current).position = YYRHSLOC(Rhs, 1).position;		\
182 	 (Current).last_line = YYRHSLOC(Rhs, N).last_line;		\
183 	 (Current).last_column = YYRHSLOC(Rhs, N).last_column;		\
184       } else {								\
185 	 (Current).first_line = YYRHSLOC(Rhs, 0).last_line;		\
186 	 (Current).last_line = (Current).first_line;			\
187 	 (Current).first_column = YYRHSLOC(Rhs, 0).last_column;		\
188 	 (Current).last_column = (Current).first_column;		\
189 	 (Current).position = YYRHSLOC(Rhs, 0).position			\
190 	    + (Current).first_column;					\
191       }									\
192    } while(YYID(0))
193 
194 #define YYLEX_PARAM state->scanner
195 
196 
197 /* Line 268 of yacc.c  */
198 #line 199 "src/chromium_gensrc/mesa/program/program_parse.tab.c"
199 
200 /* Enabling traces.  */
201 #ifndef YYDEBUG
202 # define YYDEBUG 0
203 #endif
204 
205 /* Enabling verbose error messages.  */
206 #ifdef YYERROR_VERBOSE
207 # undef YYERROR_VERBOSE
208 # define YYERROR_VERBOSE 1
209 #else
210 # define YYERROR_VERBOSE 1
211 #endif
212 
213 /* Enabling the token table.  */
214 #ifndef YYTOKEN_TABLE
215 # define YYTOKEN_TABLE 0
216 #endif
217 
218 
219 /* Tokens.  */
220 #ifndef YYTOKENTYPE
221 # define YYTOKENTYPE
222    /* Put the tokens into the symbol table, so that GDB and other debuggers
223       know about them.  */
224    enum yytokentype {
225      ARBvp_10 = 258,
226      ARBfp_10 = 259,
227      ADDRESS = 260,
228      ALIAS = 261,
229      ATTRIB = 262,
230      OPTION = 263,
231      OUTPUT = 264,
232      PARAM = 265,
233      TEMP = 266,
234      END = 267,
235      BIN_OP = 268,
236      BINSC_OP = 269,
237      SAMPLE_OP = 270,
238      SCALAR_OP = 271,
239      TRI_OP = 272,
240      VECTOR_OP = 273,
241      ARL = 274,
242      KIL = 275,
243      SWZ = 276,
244      TXD_OP = 277,
245      INTEGER = 278,
246      REAL = 279,
247      AMBIENT = 280,
248      ATTENUATION = 281,
249      BACK = 282,
250      CLIP = 283,
251      COLOR = 284,
252      DEPTH = 285,
253      DIFFUSE = 286,
254      DIRECTION = 287,
255      EMISSION = 288,
256      ENV = 289,
257      EYE = 290,
258      FOG = 291,
259      FOGCOORD = 292,
260      FRAGMENT = 293,
261      FRONT = 294,
262      HALF = 295,
263      INVERSE = 296,
264      INVTRANS = 297,
265      LIGHT = 298,
266      LIGHTMODEL = 299,
267      LIGHTPROD = 300,
268      LOCAL = 301,
269      MATERIAL = 302,
270      MAT_PROGRAM = 303,
271      MATRIX = 304,
272      MATRIXINDEX = 305,
273      MODELVIEW = 306,
274      MVP = 307,
275      NORMAL = 308,
276      OBJECT = 309,
277      PALETTE = 310,
278      PARAMS = 311,
279      PLANE = 312,
280      POINT_TOK = 313,
281      POINTSIZE = 314,
282      POSITION = 315,
283      PRIMARY = 316,
284      PROGRAM = 317,
285      PROJECTION = 318,
286      RANGE = 319,
287      RESULT = 320,
288      ROW = 321,
289      SCENECOLOR = 322,
290      SECONDARY = 323,
291      SHININESS = 324,
292      SIZE_TOK = 325,
293      SPECULAR = 326,
294      SPOT = 327,
295      STATE = 328,
296      TEXCOORD = 329,
297      TEXENV = 330,
298      TEXGEN = 331,
299      TEXGEN_Q = 332,
300      TEXGEN_R = 333,
301      TEXGEN_S = 334,
302      TEXGEN_T = 335,
303      TEXTURE = 336,
304      TRANSPOSE = 337,
305      TEXTURE_UNIT = 338,
306      TEX_1D = 339,
307      TEX_2D = 340,
308      TEX_3D = 341,
309      TEX_CUBE = 342,
310      TEX_RECT = 343,
311      TEX_SHADOW1D = 344,
312      TEX_SHADOW2D = 345,
313      TEX_SHADOWRECT = 346,
314      TEX_ARRAY1D = 347,
315      TEX_ARRAY2D = 348,
316      TEX_ARRAYSHADOW1D = 349,
317      TEX_ARRAYSHADOW2D = 350,
318      VERTEX = 351,
319      VTXATTRIB = 352,
320      WEIGHT = 353,
321      IDENTIFIER = 354,
322      USED_IDENTIFIER = 355,
323      MASK4 = 356,
324      MASK3 = 357,
325      MASK2 = 358,
326      MASK1 = 359,
327      SWIZZLE = 360,
328      DOT_DOT = 361,
329      DOT = 362
330    };
331 #endif
332 /* Tokens.  */
333 #define ARBvp_10 258
334 #define ARBfp_10 259
335 #define ADDRESS 260
336 #define ALIAS 261
337 #define ATTRIB 262
338 #define OPTION 263
339 #define OUTPUT 264
340 #define PARAM 265
341 #define TEMP 266
342 #define END 267
343 #define BIN_OP 268
344 #define BINSC_OP 269
345 #define SAMPLE_OP 270
346 #define SCALAR_OP 271
347 #define TRI_OP 272
348 #define VECTOR_OP 273
349 #define ARL 274
350 #define KIL 275
351 #define SWZ 276
352 #define TXD_OP 277
353 #define INTEGER 278
354 #define REAL 279
355 #define AMBIENT 280
356 #define ATTENUATION 281
357 #define BACK 282
358 #define CLIP 283
359 #define COLOR 284
360 #define DEPTH 285
361 #define DIFFUSE 286
362 #define DIRECTION 287
363 #define EMISSION 288
364 #define ENV 289
365 #define EYE 290
366 #define FOG 291
367 #define FOGCOORD 292
368 #define FRAGMENT 293
369 #define FRONT 294
370 #define HALF 295
371 #define INVERSE 296
372 #define INVTRANS 297
373 #define LIGHT 298
374 #define LIGHTMODEL 299
375 #define LIGHTPROD 300
376 #define LOCAL 301
377 #define MATERIAL 302
378 #define MAT_PROGRAM 303
379 #define MATRIX 304
380 #define MATRIXINDEX 305
381 #define MODELVIEW 306
382 #define MVP 307
383 #define NORMAL 308
384 #define OBJECT 309
385 #define PALETTE 310
386 #define PARAMS 311
387 #define PLANE 312
388 #define POINT_TOK 313
389 #define POINTSIZE 314
390 #define POSITION 315
391 #define PRIMARY 316
392 #define PROGRAM 317
393 #define PROJECTION 318
394 #define RANGE 319
395 #define RESULT 320
396 #define ROW 321
397 #define SCENECOLOR 322
398 #define SECONDARY 323
399 #define SHININESS 324
400 #define SIZE_TOK 325
401 #define SPECULAR 326
402 #define SPOT 327
403 #define STATE 328
404 #define TEXCOORD 329
405 #define TEXENV 330
406 #define TEXGEN 331
407 #define TEXGEN_Q 332
408 #define TEXGEN_R 333
409 #define TEXGEN_S 334
410 #define TEXGEN_T 335
411 #define TEXTURE 336
412 #define TRANSPOSE 337
413 #define TEXTURE_UNIT 338
414 #define TEX_1D 339
415 #define TEX_2D 340
416 #define TEX_3D 341
417 #define TEX_CUBE 342
418 #define TEX_RECT 343
419 #define TEX_SHADOW1D 344
420 #define TEX_SHADOW2D 345
421 #define TEX_SHADOWRECT 346
422 #define TEX_ARRAY1D 347
423 #define TEX_ARRAY2D 348
424 #define TEX_ARRAYSHADOW1D 349
425 #define TEX_ARRAYSHADOW2D 350
426 #define VERTEX 351
427 #define VTXATTRIB 352
428 #define WEIGHT 353
429 #define IDENTIFIER 354
430 #define USED_IDENTIFIER 355
431 #define MASK4 356
432 #define MASK3 357
433 #define MASK2 358
434 #define MASK1 359
435 #define SWIZZLE 360
436 #define DOT_DOT 361
437 #define DOT 362
438 
439 
440 
441 
442 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
443 typedef union YYSTYPE
444 {
445 
446 /* Line 293 of yacc.c  */
447 #line 126 "src/src/mesa/program/program_parse.y"
448 
449    struct asm_instruction *inst;
450    struct asm_symbol *sym;
451    struct asm_symbol temp_sym;
452    struct asm_swizzle_mask swiz_mask;
453    struct asm_src_register src_reg;
454    struct prog_dst_register dst_reg;
455    struct prog_instruction temp_inst;
456    char *string;
457    unsigned result;
458    unsigned attrib;
459    int integer;
460    float real;
461    gl_state_index state[STATE_LENGTH];
462    int negate;
463    struct asm_vector vector;
464    gl_inst_opcode opcode;
465 
466    struct {
467       unsigned swz;
468       unsigned rgba_valid:1;
469       unsigned xyzw_valid:1;
470       unsigned negate:1;
471    } ext_swizzle;
472 
473 
474 
475 /* Line 293 of yacc.c  */
476 #line 477 "src/chromium_gensrc/mesa/program/program_parse.tab.c"
477 } YYSTYPE;
478 # define YYSTYPE_IS_TRIVIAL 1
479 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
480 # define YYSTYPE_IS_DECLARED 1
481 #endif
482 
483 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
484 typedef struct YYLTYPE
485 {
486   int first_line;
487   int first_column;
488   int last_line;
489   int last_column;
490 } YYLTYPE;
491 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
492 # define YYLTYPE_IS_DECLARED 1
493 # define YYLTYPE_IS_TRIVIAL 1
494 #endif
495 
496 
497 /* Copy the second part of user declarations.  */
498 
499 /* Line 343 of yacc.c  */
500 #line 271 "src/src/mesa/program/program_parse.y"
501 
502 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
503     void *yyscanner);
504 
505 
506 /* Line 343 of yacc.c  */
507 #line 508 "src/chromium_gensrc/mesa/program/program_parse.tab.c"
508 
509 #ifdef short
510 # undef short
511 #endif
512 
513 #ifdef YYTYPE_UINT8
514 typedef YYTYPE_UINT8 yytype_uint8;
515 #else
516 typedef unsigned char yytype_uint8;
517 #endif
518 
519 #ifdef YYTYPE_INT8
520 typedef YYTYPE_INT8 yytype_int8;
521 #elif (defined __STDC__ || defined __C99__FUNC__ \
522      || defined __cplusplus || defined _MSC_VER)
523 typedef signed char yytype_int8;
524 #else
525 typedef short int yytype_int8;
526 #endif
527 
528 #ifdef YYTYPE_UINT16
529 typedef YYTYPE_UINT16 yytype_uint16;
530 #else
531 typedef unsigned short int yytype_uint16;
532 #endif
533 
534 #ifdef YYTYPE_INT16
535 typedef YYTYPE_INT16 yytype_int16;
536 #else
537 typedef short int yytype_int16;
538 #endif
539 
540 #ifndef YYSIZE_T
541 # ifdef __SIZE_TYPE__
542 #  define YYSIZE_T __SIZE_TYPE__
543 # elif defined size_t
544 #  define YYSIZE_T size_t
545 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
546      || defined __cplusplus || defined _MSC_VER)
547 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
548 #  define YYSIZE_T size_t
549 # else
550 #  define YYSIZE_T unsigned int
551 # endif
552 #endif
553 
554 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
555 
556 #ifndef YY_
557 # if defined YYENABLE_NLS && YYENABLE_NLS
558 #  if ENABLE_NLS
559 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
560 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
561 #  endif
562 # endif
563 # ifndef YY_
564 #  define YY_(msgid) msgid
565 # endif
566 #endif
567 
568 /* Suppress unused-variable warnings by "using" E.  */
569 #if ! defined lint || defined __GNUC__
570 # define YYUSE(e) ((void) (e))
571 #else
572 # define YYUSE(e) /* empty */
573 #endif
574 
575 /* Identity function, used to suppress warnings about constant conditions.  */
576 #ifndef lint
577 # define YYID(n) (n)
578 #else
579 #if (defined __STDC__ || defined __C99__FUNC__ \
580      || defined __cplusplus || defined _MSC_VER)
581 static int
YYID(int yyi)582 YYID (int yyi)
583 #else
584 static int
585 YYID (yyi)
586     int yyi;
587 #endif
588 {
589   return yyi;
590 }
591 #endif
592 
593 #if ! defined yyoverflow || YYERROR_VERBOSE
594 
595 /* The parser invokes alloca or malloc; define the necessary symbols.  */
596 
597 # ifdef YYSTACK_USE_ALLOCA
598 #  if YYSTACK_USE_ALLOCA
599 #   ifdef __GNUC__
600 #    define YYSTACK_ALLOC __builtin_alloca
601 #   elif defined __BUILTIN_VA_ARG_INCR
602 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
603 #   elif defined _AIX
604 #    define YYSTACK_ALLOC __alloca
605 #   elif defined _MSC_VER
606 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
607 #    define alloca _alloca
608 #   else
609 #    define YYSTACK_ALLOC alloca
610 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
611      || defined __cplusplus || defined _MSC_VER)
612 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
613 #     ifndef EXIT_SUCCESS
614 #      define EXIT_SUCCESS 0
615 #     endif
616 #    endif
617 #   endif
618 #  endif
619 # endif
620 
621 # ifdef YYSTACK_ALLOC
622    /* Pacify GCC's `empty if-body' warning.  */
623 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
624 #  ifndef YYSTACK_ALLOC_MAXIMUM
625     /* The OS might guarantee only one guard page at the bottom of the stack,
626        and a page size can be as small as 4096 bytes.  So we cannot safely
627        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
628        to allow for a few compiler-allocated temporary stack slots.  */
629 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
630 #  endif
631 # else
632 #  define YYSTACK_ALLOC YYMALLOC
633 #  define YYSTACK_FREE YYFREE
634 #  ifndef YYSTACK_ALLOC_MAXIMUM
635 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
636 #  endif
637 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
638        && ! ((defined YYMALLOC || defined malloc) \
639 	     && (defined YYFREE || defined free)))
640 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
641 #   ifndef EXIT_SUCCESS
642 #    define EXIT_SUCCESS 0
643 #   endif
644 #  endif
645 #  ifndef YYMALLOC
646 #   define YYMALLOC malloc
647 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
648      || defined __cplusplus || defined _MSC_VER)
649 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
650 #   endif
651 #  endif
652 #  ifndef YYFREE
653 #   define YYFREE free
654 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
655      || defined __cplusplus || defined _MSC_VER)
656 void free (void *); /* INFRINGES ON USER NAME SPACE */
657 #   endif
658 #  endif
659 # endif
660 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
661 
662 
663 #if (! defined yyoverflow \
664      && (! defined __cplusplus \
665 	 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
666 	     && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
667 
668 /* A type that is properly aligned for any stack member.  */
669 union yyalloc
670 {
671   yytype_int16 yyss_alloc;
672   YYSTYPE yyvs_alloc;
673   YYLTYPE yyls_alloc;
674 };
675 
676 /* The size of the maximum gap between one aligned stack and the next.  */
677 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
678 
679 /* The size of an array large to enough to hold all stacks, each with
680    N elements.  */
681 # define YYSTACK_BYTES(N) \
682      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
683       + 2 * YYSTACK_GAP_MAXIMUM)
684 
685 # define YYCOPY_NEEDED 1
686 
687 /* Relocate STACK from its old location to the new one.  The
688    local variables YYSIZE and YYSTACKSIZE give the old and new number of
689    elements in the stack, and YYPTR gives the new location of the
690    stack.  Advance YYPTR to a properly aligned location for the next
691    stack.  */
692 # define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
693     do									\
694       {									\
695 	YYSIZE_T yynewbytes;						\
696 	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
697 	Stack = &yyptr->Stack_alloc;					\
698 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
699 	yyptr += yynewbytes / sizeof (*yyptr);				\
700       }									\
701     while (YYID (0))
702 
703 #endif
704 
705 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
706 /* Copy COUNT objects from FROM to TO.  The source and destination do
707    not overlap.  */
708 # ifndef YYCOPY
709 #  if defined __GNUC__ && 1 < __GNUC__
710 #   define YYCOPY(To, From, Count) \
711       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
712 #  else
713 #   define YYCOPY(To, From, Count)		\
714       do					\
715 	{					\
716 	  YYSIZE_T yyi;				\
717 	  for (yyi = 0; yyi < (Count); yyi++)	\
718 	    (To)[yyi] = (From)[yyi];		\
719 	}					\
720       while (YYID (0))
721 #  endif
722 # endif
723 #endif /* !YYCOPY_NEEDED */
724 
725 /* YYFINAL -- State number of the termination state.  */
726 #define YYFINAL  5
727 /* YYLAST -- Last index in YYTABLE.  */
728 #define YYLAST   402
729 
730 /* YYNTOKENS -- Number of terminals.  */
731 #define YYNTOKENS  120
732 /* YYNNTS -- Number of nonterminals.  */
733 #define YYNNTS  143
734 /* YYNRULES -- Number of rules.  */
735 #define YYNRULES  283
736 /* YYNRULES -- Number of states.  */
737 #define YYNSTATES  478
738 
739 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
740 #define YYUNDEFTOK  2
741 #define YYMAXUTOK   362
742 
743 #define YYTRANSLATE(YYX)						\
744   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
745 
746 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
747 static const yytype_uint8 yytranslate[] =
748 {
749        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
750        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
751        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
752        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
753      115,   116,     2,   113,   109,   114,     2,     2,     2,     2,
754        2,     2,     2,     2,     2,     2,     2,     2,     2,   108,
755        2,   117,     2,     2,     2,     2,     2,     2,     2,     2,
756        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
757        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
758        2,   111,     2,   112,     2,     2,     2,     2,     2,     2,
759        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
760        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
761        2,     2,     2,   118,   110,   119,     2,     2,     2,     2,
762        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
763        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
764        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
765        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
766        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
767        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
768        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
769        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
770        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
771        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
772        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
773        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
774        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
775        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
776       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
777       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
778       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
779       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
780       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
781       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
782       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
783       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
784       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
785      105,   106,   107
786 };
787 
788 #if YYDEBUG
789 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
790    YYRHS.  */
791 static const yytype_uint16 yyprhs[] =
792 {
793        0,     0,     3,     8,    10,    12,    15,    16,    20,    23,
794       24,    27,    30,    32,    34,    36,    38,    40,    42,    44,
795       46,    48,    50,    52,    54,    59,    64,    69,    76,    83,
796       92,   101,   104,   107,   120,   123,   125,   127,   129,   131,
797      133,   135,   137,   139,   141,   143,   145,   147,   154,   157,
798      162,   165,   167,   171,   177,   181,   184,   192,   195,   197,
799      199,   201,   203,   208,   210,   212,   214,   216,   218,   220,
800      222,   226,   227,   230,   233,   235,   237,   239,   241,   243,
801      245,   247,   249,   251,   252,   254,   256,   258,   260,   261,
802      265,   269,   270,   273,   276,   278,   280,   282,   284,   286,
803      288,   290,   292,   297,   300,   303,   305,   308,   310,   313,
804      315,   318,   323,   328,   330,   331,   335,   337,   339,   342,
805      344,   347,   349,   351,   355,   362,   363,   365,   368,   373,
806      375,   379,   381,   383,   385,   387,   389,   391,   393,   395,
807      397,   399,   402,   405,   408,   411,   414,   417,   420,   423,
808      426,   429,   432,   435,   439,   441,   443,   445,   451,   453,
809      455,   457,   460,   462,   464,   467,   469,   472,   479,   481,
810      485,   487,   489,   491,   493,   495,   500,   502,   504,   506,
811      508,   510,   512,   515,   517,   519,   525,   527,   530,   532,
812      534,   540,   543,   544,   551,   555,   556,   558,   560,   562,
813      564,   566,   569,   571,   573,   576,   581,   586,   587,   591,
814      593,   595,   597,   600,   602,   604,   606,   608,   614,   616,
815      620,   626,   632,   634,   638,   644,   646,   648,   650,   652,
816      654,   656,   658,   660,   662,   666,   672,   680,   690,   693,
817      696,   698,   700,   701,   702,   707,   709,   710,   711,   715,
818      719,   721,   727,   730,   733,   736,   739,   743,   746,   750,
819      751,   755,   757,   759,   760,   762,   764,   765,   767,   769,
820      770,   772,   774,   775,   779,   780,   784,   785,   789,   791,
821      793,   795,   800,   802
822 };
823 
824 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
825 static const yytype_int16 yyrhs[] =
826 {
827      121,     0,    -1,   122,   123,   125,    12,    -1,     3,    -1,
828        4,    -1,   123,   124,    -1,    -1,     8,   262,   108,    -1,
829      125,   126,    -1,    -1,   127,   108,    -1,   170,   108,    -1,
830      128,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
831      133,    -1,   134,    -1,   135,    -1,   141,    -1,   136,    -1,
832      137,    -1,   138,    -1,    19,   146,   109,   142,    -1,    18,
833      145,   109,   144,    -1,    16,   145,   109,   142,    -1,    14,
834      145,   109,   142,   109,   142,    -1,    13,   145,   109,   144,
835      109,   144,    -1,    17,   145,   109,   144,   109,   144,   109,
836      144,    -1,    15,   145,   109,   144,   109,   139,   109,   140,
837       -1,    20,   144,    -1,    20,   166,    -1,    22,   145,   109,
838      144,   109,   144,   109,   144,   109,   139,   109,   140,    -1,
839       83,   256,    -1,    84,    -1,    85,    -1,    86,    -1,    87,
840       -1,    88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
841       -1,    93,    -1,    94,    -1,    95,    -1,    21,   145,   109,
842      150,   109,   147,    -1,   241,   143,    -1,   241,   110,   143,
843      110,    -1,   150,   162,    -1,   238,    -1,   241,   150,   163,
844       -1,   241,   110,   150,   163,   110,    -1,   151,   164,   165,
845       -1,   159,   161,    -1,   148,   109,   148,   109,   148,   109,
846      148,    -1,   241,   149,    -1,    23,    -1,   262,    -1,   100,
847       -1,   172,    -1,   152,   111,   153,   112,    -1,   186,    -1,
848      249,    -1,   100,    -1,   100,    -1,   154,    -1,   155,    -1,
849       23,    -1,   159,   160,   156,    -1,    -1,   113,   157,    -1,
850      114,   158,    -1,    23,    -1,    23,    -1,   100,    -1,   104,
851       -1,   104,    -1,   104,    -1,   104,    -1,   101,    -1,   105,
852       -1,    -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,
853       -1,   115,   166,   116,    -1,   115,   167,   116,    -1,    -1,
854      168,   163,    -1,   169,   163,    -1,    99,    -1,   100,    -1,
855      171,    -1,   178,    -1,   242,    -1,   245,    -1,   248,    -1,
856      261,    -1,     7,    99,   117,   172,    -1,    96,   173,    -1,
857       38,   177,    -1,    60,    -1,    98,   175,    -1,    53,    -1,
858       29,   254,    -1,    37,    -1,    74,   255,    -1,    50,   111,
859      176,   112,    -1,    97,   111,   174,   112,    -1,    23,    -1,
860       -1,   111,   176,   112,    -1,    23,    -1,    60,    -1,    29,
861      254,    -1,    37,    -1,    74,   255,    -1,   179,    -1,   180,
862       -1,    10,    99,   182,    -1,    10,    99,   111,   181,   112,
863      183,    -1,    -1,    23,    -1,   117,   185,    -1,   117,   118,
864      184,   119,    -1,   187,    -1,   184,   109,   187,    -1,   189,
865       -1,   225,    -1,   235,    -1,   189,    -1,   225,    -1,   236,
866       -1,   188,    -1,   226,    -1,   235,    -1,   189,    -1,    73,
867      213,    -1,    73,   190,    -1,    73,   192,    -1,    73,   195,
868       -1,    73,   197,    -1,    73,   203,    -1,    73,   199,    -1,
869       73,   206,    -1,    73,   208,    -1,    73,   210,    -1,    73,
870      212,    -1,    73,   224,    -1,    47,   253,   191,    -1,   201,
871       -1,    33,    -1,    69,    -1,    43,   111,   202,   112,   193,
872       -1,   201,    -1,    60,    -1,    26,    -1,    72,   194,    -1,
873       40,    -1,    32,    -1,    44,   196,    -1,    25,    -1,   253,
874       67,    -1,    45,   111,   202,   112,   253,   198,    -1,   201,
875       -1,    75,   257,   200,    -1,    29,    -1,    25,    -1,    31,
876       -1,    71,    -1,    23,    -1,    76,   255,   204,   205,    -1,
877       35,    -1,    54,    -1,    79,    -1,    80,    -1,    78,    -1,
878       77,    -1,    36,   207,    -1,    29,    -1,    56,    -1,    28,
879      111,   209,   112,    57,    -1,    23,    -1,    58,   211,    -1,
880       70,    -1,    26,    -1,   215,    66,   111,   218,   112,    -1,
881      215,   214,    -1,    -1,    66,   111,   218,   106,   218,   112,
882       -1,    49,   219,   216,    -1,    -1,   217,    -1,    41,    -1,
883       82,    -1,    42,    -1,    23,    -1,    51,   220,    -1,    63,
884       -1,    52,    -1,    81,   255,    -1,    55,   111,   222,   112,
885       -1,    48,   111,   223,   112,    -1,    -1,   111,   221,   112,
886       -1,    23,    -1,    23,    -1,    23,    -1,    30,    64,    -1,
887      229,    -1,   232,    -1,   227,    -1,   230,    -1,    62,    34,
888      111,   228,   112,    -1,   233,    -1,   233,   106,   233,    -1,
889       62,    34,   111,   233,   112,    -1,    62,    46,   111,   231,
890      112,    -1,   234,    -1,   234,   106,   234,    -1,    62,    46,
891      111,   234,   112,    -1,    23,    -1,    23,    -1,   237,    -1,
892      239,    -1,   238,    -1,   239,    -1,   240,    -1,    24,    -1,
893       23,    -1,   118,   240,   119,    -1,   118,   240,   109,   240,
894      119,    -1,   118,   240,   109,   240,   109,   240,   119,    -1,
895      118,   240,   109,   240,   109,   240,   109,   240,   119,    -1,
896      241,    24,    -1,   241,    23,    -1,   113,    -1,   114,    -1,
897       -1,    -1,   244,    11,   243,   247,    -1,   262,    -1,    -1,
898       -1,     5,   246,   247,    -1,   247,   109,    99,    -1,    99,
899       -1,   244,     9,    99,   117,   249,    -1,    65,    60,    -1,
900       65,    37,    -1,    65,   250,    -1,    65,    59,    -1,    65,
901       74,   255,    -1,    65,    30,    -1,    29,   251,   252,    -1,
902       -1,   111,    23,   112,    -1,    39,    -1,    27,    -1,    -1,
903       61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,    -1,
904       61,    -1,    68,    -1,    -1,   111,   258,   112,    -1,    -1,
905      111,   259,   112,    -1,    -1,   111,   260,   112,    -1,    23,
906       -1,    23,    -1,    23,    -1,     6,    99,   117,   100,    -1,
907       99,    -1,   100,    -1
908 };
909 
910 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
911 static const yytype_uint16 yyrline[] =
912 {
913        0,   278,   278,   281,   289,   301,   302,   305,   329,   330,
914      333,   348,   351,   356,   363,   364,   365,   366,   367,   368,
915      369,   372,   373,   374,   377,   383,   391,   397,   404,   410,
916      417,   461,   466,   476,   520,   526,   527,   528,   529,   530,
917      531,   532,   533,   534,   535,   536,   537,   540,   552,   560,
918      577,   584,   603,   614,   634,   659,   666,   699,   706,   721,
919      776,   819,   828,   850,   860,   864,   893,   912,   912,   914,
920      921,   933,   934,   935,   938,   952,   966,   986,   997,  1009,
921     1011,  1012,  1013,  1014,  1017,  1017,  1017,  1017,  1018,  1021,
922     1025,  1030,  1037,  1044,  1051,  1074,  1097,  1098,  1099,  1100,
923     1101,  1102,  1105,  1124,  1128,  1134,  1138,  1142,  1146,  1155,
924     1164,  1168,  1173,  1179,  1190,  1190,  1191,  1193,  1197,  1201,
925     1205,  1211,  1211,  1213,  1231,  1257,  1260,  1275,  1281,  1287,
926     1288,  1295,  1301,  1307,  1315,  1321,  1327,  1335,  1341,  1347,
927     1355,  1356,  1359,  1360,  1361,  1362,  1363,  1364,  1365,  1366,
928     1367,  1368,  1369,  1372,  1381,  1385,  1389,  1395,  1404,  1408,
929     1412,  1421,  1425,  1431,  1437,  1444,  1449,  1457,  1467,  1469,
930     1477,  1483,  1487,  1491,  1497,  1508,  1517,  1521,  1526,  1530,
931     1534,  1538,  1544,  1551,  1555,  1561,  1569,  1580,  1587,  1591,
932     1597,  1607,  1618,  1622,  1640,  1649,  1652,  1658,  1662,  1666,
933     1672,  1683,  1688,  1693,  1698,  1703,  1708,  1716,  1719,  1724,
934     1737,  1745,  1756,  1764,  1764,  1766,  1766,  1768,  1778,  1783,
935     1790,  1800,  1809,  1814,  1821,  1831,  1841,  1853,  1853,  1854,
936     1854,  1856,  1866,  1874,  1884,  1892,  1900,  1909,  1920,  1924,
937     1930,  1931,  1932,  1935,  1935,  1938,  1973,  1977,  1977,  1980,
938     1987,  1996,  2010,  2019,  2028,  2032,  2041,  2050,  2061,  2068,
939     2078,  2106,  2115,  2127,  2130,  2139,  2150,  2151,  2152,  2155,
940     2156,  2157,  2160,  2161,  2164,  2165,  2168,  2169,  2172,  2183,
941     2194,  2205,  2231,  2232
942 };
943 #endif
944 
945 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
946 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
947    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
948 static const char *const yytname[] =
949 {
950   "$end", "error", "$undefined", "ARBvp_10", "ARBfp_10", "ADDRESS",
951   "ALIAS", "ATTRIB", "OPTION", "OUTPUT", "PARAM", "TEMP", "END", "BIN_OP",
952   "BINSC_OP", "SAMPLE_OP", "SCALAR_OP", "TRI_OP", "VECTOR_OP", "ARL",
953   "KIL", "SWZ", "TXD_OP", "INTEGER", "REAL", "AMBIENT", "ATTENUATION",
954   "BACK", "CLIP", "COLOR", "DEPTH", "DIFFUSE", "DIRECTION", "EMISSION",
955   "ENV", "EYE", "FOG", "FOGCOORD", "FRAGMENT", "FRONT", "HALF", "INVERSE",
956   "INVTRANS", "LIGHT", "LIGHTMODEL", "LIGHTPROD", "LOCAL", "MATERIAL",
957   "MAT_PROGRAM", "MATRIX", "MATRIXINDEX", "MODELVIEW", "MVP", "NORMAL",
958   "OBJECT", "PALETTE", "PARAMS", "PLANE", "POINT_TOK", "POINTSIZE",
959   "POSITION", "PRIMARY", "PROGRAM", "PROJECTION", "RANGE", "RESULT", "ROW",
960   "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE_TOK", "SPECULAR", "SPOT",
961   "STATE", "TEXCOORD", "TEXENV", "TEXGEN", "TEXGEN_Q", "TEXGEN_R",
962   "TEXGEN_S", "TEXGEN_T", "TEXTURE", "TRANSPOSE", "TEXTURE_UNIT", "TEX_1D",
963   "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "TEX_SHADOW1D",
964   "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
965   "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
966   "WEIGHT", "IDENTIFIER", "USED_IDENTIFIER", "MASK4", "MASK3", "MASK2",
967   "MASK1", "SWIZZLE", "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'",
968   "'+'", "'-'", "'('", "')'", "'='", "'{'", "'}'", "$accept", "program",
969   "language", "optionSequence", "option", "statementSequence", "statement",
970   "instruction", "ALU_instruction", "TexInstruction", "ARL_instruction",
971   "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
972   "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
973   "KIL_instruction", "TXD_instruction", "texImageUnit", "texTarget",
974   "SWZ_instruction", "scalarSrcReg", "scalarUse", "swizzleSrcReg",
975   "maskedDstReg", "maskedAddrReg", "extendedSwizzle", "extSwizComp",
976   "extSwizSel", "srcReg", "dstReg", "progParamArray", "progParamArrayMem",
977   "progParamArrayAbs", "progParamArrayRel", "addrRegRelOffset",
978   "addrRegPosOffset", "addrRegNegOffset", "addrReg", "addrComponent",
979   "addrWriteMask", "scalarSuffix", "swizzleSuffix", "optionalMask",
980   "optionalCcMask", "ccTest", "ccTest2", "ccMaskRule", "ccMaskRule2",
981   "namingStatement", "ATTRIB_statement", "attribBinding", "vtxAttribItem",
982   "vtxAttribNum", "vtxOptWeightNum", "vtxWeightNum", "fragAttribItem",
983   "PARAM_statement", "PARAM_singleStmt", "PARAM_multipleStmt",
984   "optArraySize", "paramSingleInit", "paramMultipleInit",
985   "paramMultInitList", "paramSingleItemDecl", "paramSingleItemUse",
986   "paramMultipleItem", "stateMultipleItem", "stateSingleItem",
987   "stateMaterialItem", "stateMatProperty", "stateLightItem",
988   "stateLightProperty", "stateSpotProperty", "stateLightModelItem",
989   "stateLModProperty", "stateLightProdItem", "stateLProdProperty",
990   "stateTexEnvItem", "stateTexEnvProperty", "ambDiffSpecProperty",
991   "stateLightNumber", "stateTexGenItem", "stateTexGenType",
992   "stateTexGenCoord", "stateFogItem", "stateFogProperty",
993   "stateClipPlaneItem", "stateClipPlaneNum", "statePointItem",
994   "statePointProperty", "stateMatrixRow", "stateMatrixRows",
995   "optMatrixRows", "stateMatrixItem", "stateOptMatModifier",
996   "stateMatModifier", "stateMatrixRowNum", "stateMatrixName",
997   "stateOptModMatNum", "stateModMatNum", "statePaletteMatNum",
998   "stateProgramMatNum", "stateDepthItem", "programSingleItem",
999   "programMultipleItem", "progEnvParams", "progEnvParamNums",
1000   "progEnvParam", "progLocalParams", "progLocalParamNums",
1001   "progLocalParam", "progEnvParamNum", "progLocalParamNum",
1002   "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
1003   "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
1004   "optionalSign", "TEMP_statement", "@1", "optVarSize",
1005   "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
1006   "resultBinding", "resultColBinding", "optResultFaceType",
1007   "optResultColorType", "optFaceType", "optColorType",
1008   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
1009   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
1010   "ALIAS_statement", "string", 0
1011 };
1012 #endif
1013 
1014 # ifdef YYPRINT
1015 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1016    token YYLEX-NUM.  */
1017 static const yytype_uint16 yytoknum[] =
1018 {
1019        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1020      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1021      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1022      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1023      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1024      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1025      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1026      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1027      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1028      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1029      355,   356,   357,   358,   359,   360,   361,   362,    59,    44,
1030      124,    91,    93,    43,    45,    40,    41,    61,   123,   125
1031 };
1032 # endif
1033 
1034 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1035 static const yytype_uint16 yyr1[] =
1036 {
1037        0,   120,   121,   122,   122,   123,   123,   124,   125,   125,
1038      126,   126,   127,   127,   128,   128,   128,   128,   128,   128,
1039      128,   129,   129,   129,   130,   131,   132,   133,   134,   135,
1040      136,   137,   137,   138,   139,   140,   140,   140,   140,   140,
1041      140,   140,   140,   140,   140,   140,   140,   141,   142,   142,
1042      143,   143,   144,   144,   145,   146,   147,   148,   149,   149,
1043      150,   150,   150,   150,   151,   151,   152,   153,   153,   154,
1044      155,   156,   156,   156,   157,   158,   159,   160,   161,   162,
1045      163,   163,   163,   163,   164,   164,   164,   164,   164,   165,
1046      165,   165,   166,   167,   168,   169,   170,   170,   170,   170,
1047      170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
1048      173,   173,   173,   174,   175,   175,   176,   177,   177,   177,
1049      177,   178,   178,   179,   180,   181,   181,   182,   183,   184,
1050      184,   185,   185,   185,   186,   186,   186,   187,   187,   187,
1051      188,   188,   189,   189,   189,   189,   189,   189,   189,   189,
1052      189,   189,   189,   190,   191,   191,   191,   192,   193,   193,
1053      193,   193,   193,   194,   195,   196,   196,   197,   198,   199,
1054      200,   201,   201,   201,   202,   203,   204,   204,   205,   205,
1055      205,   205,   206,   207,   207,   208,   209,   210,   211,   211,
1056      212,   213,   214,   214,   215,   216,   216,   217,   217,   217,
1057      218,   219,   219,   219,   219,   219,   219,   220,   220,   221,
1058      222,   223,   224,   225,   225,   226,   226,   227,   228,   228,
1059      229,   230,   231,   231,   232,   233,   234,   235,   235,   236,
1060      236,   237,   238,   238,   239,   239,   239,   239,   240,   240,
1061      241,   241,   241,   243,   242,   244,   244,   246,   245,   247,
1062      247,   248,   249,   249,   249,   249,   249,   249,   250,   251,
1063      251,   251,   251,   252,   252,   252,   253,   253,   253,   254,
1064      254,   254,   255,   255,   256,   256,   257,   257,   258,   259,
1065      260,   261,   262,   262
1066 };
1067 
1068 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
1069 static const yytype_uint8 yyr2[] =
1070 {
1071        0,     2,     4,     1,     1,     2,     0,     3,     2,     0,
1072        2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
1073        1,     1,     1,     1,     4,     4,     4,     6,     6,     8,
1074        8,     2,     2,    12,     2,     1,     1,     1,     1,     1,
1075        1,     1,     1,     1,     1,     1,     1,     6,     2,     4,
1076        2,     1,     3,     5,     3,     2,     7,     2,     1,     1,
1077        1,     1,     4,     1,     1,     1,     1,     1,     1,     1,
1078        3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
1079        1,     1,     1,     0,     1,     1,     1,     1,     0,     3,
1080        3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
1081        1,     1,     4,     2,     2,     1,     2,     1,     2,     1,
1082        2,     4,     4,     1,     0,     3,     1,     1,     2,     1,
1083        2,     1,     1,     3,     6,     0,     1,     2,     4,     1,
1084        3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
1085        1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1086        2,     2,     2,     3,     1,     1,     1,     5,     1,     1,
1087        1,     2,     1,     1,     2,     1,     2,     6,     1,     3,
1088        1,     1,     1,     1,     1,     4,     1,     1,     1,     1,
1089        1,     1,     2,     1,     1,     5,     1,     2,     1,     1,
1090        5,     2,     0,     6,     3,     0,     1,     1,     1,     1,
1091        1,     2,     1,     1,     2,     4,     4,     0,     3,     1,
1092        1,     1,     2,     1,     1,     1,     1,     5,     1,     3,
1093        5,     5,     1,     3,     5,     1,     1,     1,     1,     1,
1094        1,     1,     1,     1,     3,     5,     7,     9,     2,     2,
1095        1,     1,     0,     0,     4,     1,     0,     0,     3,     3,
1096        1,     5,     2,     2,     2,     2,     3,     2,     3,     0,
1097        3,     1,     1,     0,     1,     1,     0,     1,     1,     0,
1098        1,     1,     0,     3,     0,     3,     0,     3,     1,     1,
1099        1,     4,     1,     1
1100 };
1101 
1102 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1103    Performed when YYTABLE doesn't specify something else to do.  Zero
1104    means the default is an error.  */
1105 static const yytype_uint16 yydefact[] =
1106 {
1107        0,     3,     4,     0,     6,     1,     9,     0,     5,   246,
1108      282,   283,     0,   247,     0,     0,     0,     2,     0,     0,
1109        0,     0,     0,     0,     0,   242,     0,     0,     8,     0,
1110       12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
1111       23,    20,     0,    96,    97,   121,   122,    98,     0,    99,
1112      100,   101,   245,     7,     0,     0,     0,     0,     0,    65,
1113        0,    88,    64,     0,     0,     0,     0,     0,    76,     0,
1114        0,    94,   240,   241,    31,    32,    83,     0,     0,     0,
1115       10,    11,     0,   243,   250,   248,     0,     0,   125,   242,
1116      123,   259,   257,   253,   255,   252,   272,   254,   242,    84,
1117       85,    86,    87,    91,   242,   242,   242,   242,   242,   242,
1118       78,    55,    81,    80,    82,    92,   233,   232,     0,     0,
1119        0,     0,    60,     0,   242,    83,     0,    61,    63,   134,
1120      135,   213,   214,   136,   229,   230,     0,   242,     0,     0,
1121        0,   281,   102,   126,     0,   127,   131,   132,   133,   227,
1122      228,   231,     0,   262,   261,     0,   263,     0,   256,     0,
1123        0,    54,     0,     0,     0,    26,     0,    25,    24,   269,
1124      119,   117,   272,   104,     0,     0,     0,     0,     0,     0,
1125      266,     0,   266,     0,     0,   276,   272,   142,   143,   144,
1126      145,   147,   146,   148,   149,   150,   151,     0,   152,   269,
1127      109,     0,   107,   105,   272,     0,   114,   103,    83,     0,
1128       52,     0,     0,     0,     0,   244,   249,     0,   239,   238,
1129        0,   264,   265,   258,   278,     0,   242,    95,     0,     0,
1130       83,   242,     0,    48,     0,    51,     0,   242,   270,   271,
1131      118,   120,     0,     0,     0,   212,   183,   184,   182,     0,
1132      165,   268,   267,   164,     0,     0,     0,     0,   207,   203,
1133        0,   202,   272,   195,   189,   188,   187,     0,     0,     0,
1134        0,   108,     0,   110,     0,     0,   106,     0,   242,   234,
1135       69,     0,    67,    68,     0,   242,   242,   251,     0,   124,
1136      260,   273,    28,    89,    90,    93,    27,     0,    79,    50,
1137      274,     0,     0,   225,     0,   226,     0,   186,     0,   174,
1138        0,   166,     0,   171,   172,   155,   156,   173,   153,   154,
1139        0,     0,   201,     0,   204,   197,   199,   198,   194,   196,
1140      280,     0,   170,   169,   176,   177,     0,     0,   116,     0,
1141      113,     0,     0,    53,     0,    62,    77,    71,    47,     0,
1142        0,     0,   242,    49,     0,    34,     0,   242,   220,   224,
1143        0,     0,   266,   211,     0,   209,     0,   210,     0,   277,
1144      181,   180,   178,   179,   175,   200,     0,   111,   112,   115,
1145      242,   235,     0,     0,    70,   242,    58,    57,    59,   242,
1146        0,     0,     0,   129,   137,   140,   138,   215,   216,   139,
1147      279,     0,    35,    36,    37,    38,    39,    40,    41,    42,
1148       43,    44,    45,    46,    30,    29,   185,   160,   162,   159,
1149        0,   157,   158,     0,   206,   208,   205,   190,     0,    74,
1150       72,    75,    73,     0,     0,     0,     0,   141,   192,   242,
1151      128,   275,   163,   161,   167,   168,   242,   236,   242,     0,
1152        0,     0,     0,   191,   130,     0,     0,     0,     0,   218,
1153        0,   222,     0,   237,   242,     0,   217,     0,   221,     0,
1154        0,    56,    33,   219,   223,     0,     0,   193
1155 };
1156 
1157 /* YYDEFGOTO[NTERM-NUM].  */
1158 static const yytype_int16 yydefgoto[] =
1159 {
1160       -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
1161       32,    33,    34,    35,    36,    37,    38,    39,    40,   301,
1162      414,    41,   162,   233,    74,    60,    69,   348,   349,   387,
1163      234,    61,   126,   281,   282,   283,   384,   430,   432,    70,
1164      347,   111,   299,   115,   103,   161,    75,   229,    76,   230,
1165       42,    43,   127,   207,   341,   276,   339,   173,    44,    45,
1166       46,   144,    90,   289,   392,   145,   128,   393,   394,   129,
1167      187,   318,   188,   421,   443,   189,   253,   190,   444,   191,
1168      333,   319,   310,   192,   336,   374,   193,   248,   194,   308,
1169      195,   266,   196,   437,   453,   197,   328,   329,   376,   263,
1170      322,   366,   368,   364,   198,   130,   396,   397,   458,   131,
1171      398,   460,   132,   304,   306,   399,   133,   149,   134,   135,
1172      151,    77,    47,   139,    48,    49,    54,    85,    50,    62,
1173       97,   156,   223,   254,   240,   158,   355,   268,   225,   401,
1174      331,    51,    12
1175 };
1176 
1177 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1178    STATE-NUM.  */
1179 #define YYPACT_NINF -398
1180 static const yytype_int16 yypact[] =
1181 {
1182       52,  -398,  -398,    14,  -398,  -398,    67,   152,  -398,    24,
1183     -398,  -398,     5,  -398,    47,    81,    99,  -398,    -1,    -1,
1184       -1,    -1,    -1,    -1,    43,    56,    -1,    -1,  -398,    97,
1185     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1186     -398,  -398,   112,  -398,  -398,  -398,  -398,  -398,   156,  -398,
1187     -398,  -398,  -398,  -398,   111,    98,   141,    95,   127,  -398,
1188       84,   142,  -398,   146,   150,   153,   157,   158,  -398,   159,
1189      165,  -398,  -398,  -398,  -398,  -398,   113,   -13,   161,   163,
1190     -398,  -398,   162,  -398,  -398,   164,   174,    10,   252,    -3,
1191     -398,   -11,  -398,  -398,  -398,  -398,   166,  -398,   -20,  -398,
1192     -398,  -398,  -398,   167,   -20,   -20,   -20,   -20,   -20,   -20,
1193     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   137,    70,
1194      132,    85,   168,    34,   -20,   113,   169,  -398,  -398,  -398,
1195     -398,  -398,  -398,  -398,  -398,  -398,    34,   -20,   171,   111,
1196      179,  -398,  -398,  -398,   172,  -398,  -398,  -398,  -398,  -398,
1197     -398,  -398,   216,  -398,  -398,   253,    76,   258,  -398,   176,
1198      154,  -398,   178,    29,   180,  -398,   181,  -398,  -398,   110,
1199     -398,  -398,   166,  -398,   175,   182,   183,   219,    32,   184,
1200      177,   186,    94,   140,     7,   187,   166,  -398,  -398,  -398,
1201     -398,  -398,  -398,  -398,  -398,  -398,  -398,   226,  -398,   110,
1202     -398,   188,  -398,  -398,   166,   189,   190,  -398,   113,     9,
1203     -398,     1,   193,   195,   240,   164,  -398,   191,  -398,  -398,
1204      194,  -398,  -398,  -398,  -398,   197,   -20,  -398,   196,   198,
1205      113,   -20,    34,  -398,   203,   206,   228,   -20,  -398,  -398,
1206     -398,  -398,   290,   292,   293,  -398,  -398,  -398,  -398,   294,
1207     -398,  -398,  -398,  -398,   251,   294,    48,   208,   209,  -398,
1208      210,  -398,   166,    21,  -398,  -398,  -398,   299,   295,    12,
1209      212,  -398,   302,  -398,   304,   302,  -398,   218,   -20,  -398,
1210     -398,   217,  -398,  -398,   227,   -20,   -20,  -398,   214,  -398,
1211     -398,  -398,  -398,  -398,  -398,  -398,  -398,   220,  -398,  -398,
1212      222,   225,   229,  -398,   223,  -398,   224,  -398,   230,  -398,
1213      231,  -398,   233,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1214      314,   316,  -398,   317,  -398,  -398,  -398,  -398,  -398,  -398,
1215     -398,   234,  -398,  -398,  -398,  -398,   170,   318,  -398,   235,
1216     -398,   236,   237,  -398,    44,  -398,  -398,   143,  -398,   244,
1217      -15,   245,    36,  -398,   332,  -398,   138,   -20,  -398,  -398,
1218      301,   101,    94,  -398,   248,  -398,   249,  -398,   250,  -398,
1219     -398,  -398,  -398,  -398,  -398,  -398,   254,  -398,  -398,  -398,
1220      -20,  -398,   333,   340,  -398,   -20,  -398,  -398,  -398,   -20,
1221      102,   132,    75,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1222     -398,   255,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1223     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1224      336,  -398,  -398,    49,  -398,  -398,  -398,  -398,    90,  -398,
1225     -398,  -398,  -398,   256,   260,   259,   261,  -398,   298,    36,
1226     -398,  -398,  -398,  -398,  -398,  -398,   -20,  -398,   -20,   228,
1227      290,   292,   262,  -398,  -398,   257,   265,   268,   266,   273,
1228      269,   274,   318,  -398,   -20,   138,  -398,   290,  -398,   292,
1229      107,  -398,  -398,  -398,  -398,   318,   270,  -398
1230 };
1231 
1232 /* YYPGOTO[NTERM-NUM].  */
1233 static const yytype_int16 yypgoto[] =
1234 {
1235     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1236     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   -78,
1237      -82,  -398,  -100,   155,   -86,   215,  -398,  -398,  -372,  -398,
1238      -54,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   173,
1239     -398,  -398,  -398,  -118,  -398,  -398,   232,  -398,  -398,  -398,
1240     -398,  -398,   303,  -398,  -398,  -398,   114,  -398,  -398,  -398,
1241     -398,  -398,  -398,  -398,  -398,  -398,  -398,   -53,  -398,   -88,
1242     -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1243     -398,  -334,   130,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1244     -398,  -398,  -398,  -398,  -398,     0,  -398,  -398,  -397,  -398,
1245     -398,  -398,  -398,  -398,  -398,   305,  -398,  -398,  -398,  -398,
1246     -398,  -398,  -398,  -396,  -383,   306,  -398,  -398,  -137,   -87,
1247     -120,   -89,  -398,  -398,  -398,  -398,  -398,   263,  -398,   185,
1248     -398,  -398,  -398,  -177,   199,  -154,  -398,  -398,  -398,  -398,
1249     -398,  -398,    -6
1250 };
1251 
1252 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
1253    positive, shift that token.  If negative, reduce the rule which
1254    number is the opposite.  If YYTABLE_NINF, syntax error.  */
1255 #define YYTABLE_NINF -230
1256 static const yytype_int16 yytable[] =
1257 {
1258      152,   146,   150,    52,   209,   256,   165,   210,   386,   168,
1259      116,   117,   159,   433,     5,   163,   153,   163,   241,   164,
1260      163,   166,   167,   125,   280,   118,   235,   422,   154,    13,
1261       14,    15,   269,   264,    16,   152,    17,    18,    19,    20,
1262       21,    22,    23,    24,    25,    26,    27,   334,   118,   119,
1263      273,   213,   116,   117,   459,     1,     2,   116,   117,   119,
1264      120,   246,   325,   326,    58,   470,   335,   118,   461,   208,
1265      120,   473,   118,   313,   313,     7,   456,   265,   476,   314,
1266      314,   315,   212,   121,    10,    11,   474,   122,   247,   445,
1267      277,   119,   471,    72,    73,   235,   119,   123,   390,    59,
1268      155,    68,   120,   327,   174,   124,   121,   120,   324,   391,
1269       72,    73,   295,    53,   199,   124,   175,   316,   278,   317,
1270      317,   251,   200,    10,    11,   121,   313,   417,   279,   122,
1271      121,   296,   314,   252,   122,   201,   435,   221,   202,   232,
1272      292,   418,   163,    68,   222,   203,    55,   124,   436,    72,
1273       73,   302,   124,   380,   124,    71,    91,    92,   344,   204,
1274      176,   419,   177,   381,    93,    82,   169,    83,   178,    72,
1275       73,   238,   317,   420,   170,   179,   180,   181,   239,   182,
1276       56,   183,   205,   206,   439,   423,    94,    95,   257,   152,
1277      184,   258,   259,    98,   440,   260,   350,   171,    57,   446,
1278      351,    96,   250,   261,   251,    80,    88,   185,   186,   447,
1279       84,   172,    89,   475,   112,    86,   252,   113,   114,   427,
1280       81,   262,   402,   403,   404,   405,   406,   407,   408,   409,
1281      410,   411,   412,   413,    63,    64,    65,    66,    67,   218,
1282      219,    78,    79,    99,   100,   101,   102,   370,   371,   372,
1283      373,    10,    11,    71,   227,   104,   382,   383,    87,   105,
1284      428,   138,   106,   152,   395,   150,   107,   108,   109,   110,
1285      136,   415,   137,   140,   141,   143,   220,   157,   216,   -66,
1286      211,   224,   160,   245,   217,   226,   242,   231,   214,   236,
1287      237,   152,   270,   243,   244,   249,   350,   255,   267,   272,
1288      274,   275,   285,   434,   286,    58,   290,   298,   288,   291,
1289     -229,   300,   293,   303,   294,   305,   307,   309,   311,   320,
1290      321,   323,   330,   337,   332,   338,   455,   340,   343,   345,
1291      353,   346,   352,   354,   356,   358,   359,   363,   357,   365,
1292      367,   375,   360,   361,   388,   362,   369,   377,   378,   379,
1293      152,   395,   150,   385,   389,   400,   429,   152,   416,   350,
1294      424,   425,   426,   431,   452,   448,   427,   441,   442,   449,
1295      450,   457,   451,   462,   464,   350,   463,   465,   466,   467,
1296      469,   468,   477,   472,   284,   312,   454,   297,     0,   342,
1297      142,   438,   228,     0,   147,   148,     0,     0,   271,   287,
1298        0,     0,   215
1299 };
1300 
1301 #define yypact_value_is_default(yystate) \
1302   ((yystate) == (-398))
1303 
1304 #define yytable_value_is_error(yytable_value) \
1305   YYID (0)
1306 
1307 static const yytype_int16 yycheck[] =
1308 {
1309       89,    89,    89,     9,   124,   182,   106,   125,    23,   109,
1310       23,    24,    98,   385,     0,   104,    27,   106,   172,   105,
1311      109,   107,   108,    77,    23,    38,   163,   361,    39,     5,
1312        6,     7,   186,    26,    10,   124,    12,    13,    14,    15,
1313       16,    17,    18,    19,    20,    21,    22,    35,    38,    62,
1314      204,   137,    23,    24,   450,     3,     4,    23,    24,    62,
1315       73,    29,    41,    42,    65,   462,    54,    38,   451,   123,
1316       73,   467,    38,    25,    25,     8,   448,    70,   475,    31,
1317       31,    33,   136,    96,    99,   100,   469,   100,    56,   423,
1318      208,    62,   464,   113,   114,   232,    62,   110,    62,   100,
1319      111,   100,    73,    82,    34,   118,    96,    73,   262,    73,
1320      113,   114,   230,   108,    29,   118,    46,    69,   109,    71,
1321       71,    27,    37,    99,   100,    96,    25,    26,   119,   100,
1322       96,   231,    31,    39,   100,    50,    34,    61,    53,   110,
1323      226,    40,   231,   100,    68,    60,    99,   118,    46,   113,
1324      114,   237,   118,   109,   118,    99,    29,    30,   278,    74,
1325       28,    60,    30,   119,    37,     9,    29,    11,    36,   113,
1326      114,    61,    71,    72,    37,    43,    44,    45,    68,    47,
1327       99,    49,    97,    98,   109,   362,    59,    60,    48,   278,
1328       58,    51,    52,   109,   119,    55,   285,    60,    99,   109,
1329      286,    74,    25,    63,    27,   108,   111,    75,    76,   119,
1330       99,    74,   117,   106,   101,   117,    39,   104,   105,   112,
1331      108,    81,    84,    85,    86,    87,    88,    89,    90,    91,
1332       92,    93,    94,    95,    19,    20,    21,    22,    23,    23,
1333       24,    26,    27,   101,   102,   103,   104,    77,    78,    79,
1334       80,    99,   100,    99,   100,   109,   113,   114,   117,   109,
1335      380,    99,   109,   352,   352,   352,   109,   109,   109,   104,
1336      109,   357,   109,   109,   100,    23,    23,   111,    99,   111,
1337      111,    23,   115,    64,   112,   109,   111,   109,   117,   109,
1338      109,   380,    66,   111,   111,   111,   385,   111,   111,   111,
1339      111,   111,   109,   389,   109,    65,   112,   104,   117,   112,
1340      104,    83,   116,    23,   116,    23,    23,    23,    67,   111,
1341      111,   111,    23,   111,    29,    23,   446,    23,   110,   112,
1342      110,   104,   118,   111,   109,   112,   112,    23,   109,    23,
1343       23,    23,   112,   112,   350,   112,   112,   112,   112,   112,
1344      439,   439,   439,   109,   109,    23,    23,   446,    57,   448,
1345      112,   112,   112,    23,    66,   109,   112,   112,    32,   109,
1346      111,   449,   111,   111,   109,   464,   119,   109,   112,   106,
1347      106,   112,   112,   465,   211,   255,   439,   232,    -1,   275,
1348       87,   391,   160,    -1,    89,    89,    -1,    -1,   199,   214,
1349       -1,    -1,   139
1350 };
1351 
1352 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1353    symbol of state STATE-NUM.  */
1354 static const yytype_uint16 yystos[] =
1355 {
1356        0,     3,     4,   121,   122,     0,   123,     8,   124,   125,
1357       99,   100,   262,     5,     6,     7,    10,    12,    13,    14,
1358       15,    16,    17,    18,    19,    20,    21,    22,   126,   127,
1359      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
1360      138,   141,   170,   171,   178,   179,   180,   242,   244,   245,
1361      248,   261,   262,   108,   246,    99,    99,    99,    65,   100,
1362      145,   151,   249,   145,   145,   145,   145,   145,   100,   146,
1363      159,    99,   113,   114,   144,   166,   168,   241,   145,   145,
1364      108,   108,     9,    11,    99,   247,   117,   117,   111,   117,
1365      182,    29,    30,    37,    59,    60,    74,   250,   109,   101,
1366      102,   103,   104,   164,   109,   109,   109,   109,   109,   109,
1367      104,   161,   101,   104,   105,   163,    23,    24,    38,    62,
1368       73,    96,   100,   110,   118,   150,   152,   172,   186,   189,
1369      225,   229,   232,   236,   238,   239,   109,   109,    99,   243,
1370      109,   100,   172,    23,   181,   185,   189,   225,   235,   237,
1371      239,   240,   241,    27,    39,   111,   251,   111,   255,   144,
1372      115,   165,   142,   241,   144,   142,   144,   144,   142,    29,
1373       37,    60,    74,   177,    34,    46,    28,    30,    36,    43,
1374       44,    45,    47,    49,    58,    75,    76,   190,   192,   195,
1375      197,   199,   203,   206,   208,   210,   212,   215,   224,    29,
1376       37,    50,    53,    60,    74,    97,    98,   173,   150,   240,
1377      163,   111,   150,   144,   117,   247,    99,   112,    23,    24,
1378       23,    61,    68,   252,    23,   258,   109,   100,   166,   167,
1379      169,   109,   110,   143,   150,   238,   109,   109,    61,    68,
1380      254,   255,   111,   111,   111,    64,    29,    56,   207,   111,
1381       25,    27,    39,   196,   253,   111,   253,    48,    51,    52,
1382       55,    63,    81,   219,    26,    70,   211,   111,   257,   255,
1383       66,   254,   111,   255,   111,   111,   175,   163,   109,   119,
1384       23,   153,   154,   155,   159,   109,   109,   249,   117,   183,
1385      112,   112,   144,   116,   116,   163,   142,   143,   104,   162,
1386       83,   139,   144,    23,   233,    23,   234,    23,   209,    23,
1387      202,    67,   202,    25,    31,    33,    69,    71,   191,   201,
1388      111,   111,   220,   111,   255,    41,    42,    82,   216,   217,
1389       23,   260,    29,   200,    35,    54,   204,   111,    23,   176,
1390       23,   174,   176,   110,   240,   112,   104,   160,   147,   148,
1391      241,   144,   118,   110,   111,   256,   109,   109,   112,   112,
1392      112,   112,   112,    23,   223,    23,   221,    23,   222,   112,
1393       77,    78,    79,    80,   205,    23,   218,   112,   112,   112,
1394      109,   119,   113,   114,   156,   109,    23,   149,   262,   109,
1395       62,    73,   184,   187,   188,   189,   226,   227,   230,   235,
1396       23,   259,    84,    85,    86,    87,    88,    89,    90,    91,
1397       92,    93,    94,    95,   140,   144,    57,    26,    40,    60,
1398       72,   193,   201,   253,   112,   112,   112,   112,   240,    23,
1399      157,    23,   158,   148,   144,    34,    46,   213,   215,   109,
1400      119,   112,    32,   194,   198,   201,   109,   119,   109,   109,
1401      111,   111,    66,   214,   187,   240,   148,   139,   228,   233,
1402      231,   234,   111,   119,   109,   109,   112,   106,   112,   106,
1403      218,   148,   140,   233,   234,   106,   218,   112
1404 };
1405 
1406 #define yyerrok		(yyerrstatus = 0)
1407 #define yyclearin	(yychar = YYEMPTY)
1408 #define YYEMPTY		(-2)
1409 #define YYEOF		0
1410 
1411 #define YYACCEPT	goto yyacceptlab
1412 #define YYABORT		goto yyabortlab
1413 #define YYERROR		goto yyerrorlab
1414 
1415 
1416 /* Like YYERROR except do call yyerror.  This remains here temporarily
1417    to ease the transition to the new meaning of YYERROR, for GCC.
1418    Once GCC version 2 has supplanted version 1, this can go.  However,
1419    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
1420    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
1421    discussed.  */
1422 
1423 #define YYFAIL		goto yyerrlab
1424 #if defined YYFAIL
1425   /* This is here to suppress warnings from the GCC cpp's
1426      -Wunused-macros.  Normally we don't worry about that warning, but
1427      some users do, and we want to make it easy for users to remove
1428      YYFAIL uses, which will produce warnings from Bison 2.5.  */
1429 #endif
1430 
1431 #define YYRECOVERING()  (!!yyerrstatus)
1432 
1433 #define YYBACKUP(Token, Value)					\
1434 do								\
1435   if (yychar == YYEMPTY && yylen == 1)				\
1436     {								\
1437       yychar = (Token);						\
1438       yylval = (Value);						\
1439       YYPOPSTACK (1);						\
1440       goto yybackup;						\
1441     }								\
1442   else								\
1443     {								\
1444       yyerror (&yylloc, state, YY_("syntax error: cannot back up")); \
1445       YYERROR;							\
1446     }								\
1447 while (YYID (0))
1448 
1449 
1450 #define YYTERROR	1
1451 #define YYERRCODE	256
1452 
1453 
1454 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
1455    If N is 0, then set CURRENT to the empty location which ends
1456    the previous symbol: RHS[0] (always defined).  */
1457 
1458 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
1459 #ifndef YYLLOC_DEFAULT
1460 # define YYLLOC_DEFAULT(Current, Rhs, N)				\
1461     do									\
1462       if (YYID (N))                                                    \
1463 	{								\
1464 	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
1465 	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
1466 	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
1467 	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
1468 	}								\
1469       else								\
1470 	{								\
1471 	  (Current).first_line   = (Current).last_line   =		\
1472 	    YYRHSLOC (Rhs, 0).last_line;				\
1473 	  (Current).first_column = (Current).last_column =		\
1474 	    YYRHSLOC (Rhs, 0).last_column;				\
1475 	}								\
1476     while (YYID (0))
1477 #endif
1478 
1479 
1480 /* YY_LOCATION_PRINT -- Print the location on the stream.
1481    This macro was not mandated originally: define only if we know
1482    we won't break user code: when these are the locations we know.  */
1483 
1484 #ifndef YY_LOCATION_PRINT
1485 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1486 #  define YY_LOCATION_PRINT(File, Loc)			\
1487      fprintf (File, "%d.%d-%d.%d",			\
1488 	      (Loc).first_line, (Loc).first_column,	\
1489 	      (Loc).last_line,  (Loc).last_column)
1490 # else
1491 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1492 # endif
1493 #endif
1494 
1495 
1496 /* YYLEX -- calling `yylex' with the right arguments.  */
1497 
1498 #ifdef YYLEX_PARAM
1499 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
1500 #else
1501 # define YYLEX yylex (&yylval, &yylloc, scanner)
1502 #endif
1503 
1504 /* Enable debugging if requested.  */
1505 #if YYDEBUG
1506 
1507 # ifndef YYFPRINTF
1508 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1509 #  define YYFPRINTF fprintf
1510 # endif
1511 
1512 # define YYDPRINTF(Args)			\
1513 do {						\
1514   if (yydebug)					\
1515     YYFPRINTF Args;				\
1516 } while (YYID (0))
1517 
1518 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
1519 do {									  \
1520   if (yydebug)								  \
1521     {									  \
1522       YYFPRINTF (stderr, "%s ", Title);					  \
1523       yy_symbol_print (stderr,						  \
1524 		  Type, Value, Location, state); \
1525       YYFPRINTF (stderr, "\n");						  \
1526     }									  \
1527 } while (YYID (0))
1528 
1529 
1530 /*--------------------------------.
1531 | Print this symbol on YYOUTPUT.  |
1532 `--------------------------------*/
1533 
1534 /*ARGSUSED*/
1535 #if (defined __STDC__ || defined __C99__FUNC__ \
1536      || defined __cplusplus || defined _MSC_VER)
1537 static void
yy_symbol_value_print(FILE * yyoutput,int yytype,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,struct asm_parser_state * state)1538 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1539 #else
1540 static void
1541 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, state)
1542     FILE *yyoutput;
1543     int yytype;
1544     YYSTYPE const * const yyvaluep;
1545     YYLTYPE const * const yylocationp;
1546     struct asm_parser_state *state;
1547 #endif
1548 {
1549   if (!yyvaluep)
1550     return;
1551   YYUSE (yylocationp);
1552   YYUSE (state);
1553 # ifdef YYPRINT
1554   if (yytype < YYNTOKENS)
1555     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1556 # else
1557   YYUSE (yyoutput);
1558 # endif
1559   switch (yytype)
1560     {
1561       default:
1562 	break;
1563     }
1564 }
1565 
1566 
1567 /*--------------------------------.
1568 | Print this symbol on YYOUTPUT.  |
1569 `--------------------------------*/
1570 
1571 #if (defined __STDC__ || defined __C99__FUNC__ \
1572      || defined __cplusplus || defined _MSC_VER)
1573 static void
yy_symbol_print(FILE * yyoutput,int yytype,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,struct asm_parser_state * state)1574 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1575 #else
1576 static void
1577 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, state)
1578     FILE *yyoutput;
1579     int yytype;
1580     YYSTYPE const * const yyvaluep;
1581     YYLTYPE const * const yylocationp;
1582     struct asm_parser_state *state;
1583 #endif
1584 {
1585   if (yytype < YYNTOKENS)
1586     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1587   else
1588     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1589 
1590   YY_LOCATION_PRINT (yyoutput, *yylocationp);
1591   YYFPRINTF (yyoutput, ": ");
1592   yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, state);
1593   YYFPRINTF (yyoutput, ")");
1594 }
1595 
1596 /*------------------------------------------------------------------.
1597 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1598 | TOP (included).                                                   |
1599 `------------------------------------------------------------------*/
1600 
1601 #if (defined __STDC__ || defined __C99__FUNC__ \
1602      || defined __cplusplus || defined _MSC_VER)
1603 static void
yy_stack_print(yytype_int16 * yybottom,yytype_int16 * yytop)1604 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1605 #else
1606 static void
1607 yy_stack_print (yybottom, yytop)
1608     yytype_int16 *yybottom;
1609     yytype_int16 *yytop;
1610 #endif
1611 {
1612   YYFPRINTF (stderr, "Stack now");
1613   for (; yybottom <= yytop; yybottom++)
1614     {
1615       int yybot = *yybottom;
1616       YYFPRINTF (stderr, " %d", yybot);
1617     }
1618   YYFPRINTF (stderr, "\n");
1619 }
1620 
1621 # define YY_STACK_PRINT(Bottom, Top)				\
1622 do {								\
1623   if (yydebug)							\
1624     yy_stack_print ((Bottom), (Top));				\
1625 } while (YYID (0))
1626 
1627 
1628 /*------------------------------------------------.
1629 | Report that the YYRULE is going to be reduced.  |
1630 `------------------------------------------------*/
1631 
1632 #if (defined __STDC__ || defined __C99__FUNC__ \
1633      || defined __cplusplus || defined _MSC_VER)
1634 static void
yy_reduce_print(YYSTYPE * yyvsp,YYLTYPE * yylsp,int yyrule,struct asm_parser_state * state)1635 yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct asm_parser_state *state)
1636 #else
1637 static void
1638 yy_reduce_print (yyvsp, yylsp, yyrule, state)
1639     YYSTYPE *yyvsp;
1640     YYLTYPE *yylsp;
1641     int yyrule;
1642     struct asm_parser_state *state;
1643 #endif
1644 {
1645   int yynrhs = yyr2[yyrule];
1646   int yyi;
1647   unsigned long int yylno = yyrline[yyrule];
1648   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1649 	     yyrule - 1, yylno);
1650   /* The symbols being reduced.  */
1651   for (yyi = 0; yyi < yynrhs; yyi++)
1652     {
1653       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1654       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1655 		       &(yyvsp[(yyi + 1) - (yynrhs)])
1656 		       , &(yylsp[(yyi + 1) - (yynrhs)])		       , state);
1657       YYFPRINTF (stderr, "\n");
1658     }
1659 }
1660 
1661 # define YY_REDUCE_PRINT(Rule)		\
1662 do {					\
1663   if (yydebug)				\
1664     yy_reduce_print (yyvsp, yylsp, Rule, state); \
1665 } while (YYID (0))
1666 
1667 /* Nonzero means print parse trace.  It is left uninitialized so that
1668    multiple parsers can coexist.  */
1669 int yydebug;
1670 #else /* !YYDEBUG */
1671 # define YYDPRINTF(Args)
1672 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1673 # define YY_STACK_PRINT(Bottom, Top)
1674 # define YY_REDUCE_PRINT(Rule)
1675 #endif /* !YYDEBUG */
1676 
1677 
1678 /* YYINITDEPTH -- initial size of the parser's stacks.  */
1679 #ifndef	YYINITDEPTH
1680 # define YYINITDEPTH 200
1681 #endif
1682 
1683 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1684    if the built-in stack extension method is used).
1685 
1686    Do not make this value too large; the results are undefined if
1687    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1688    evaluated with infinite-precision integer arithmetic.  */
1689 
1690 #ifndef YYMAXDEPTH
1691 # define YYMAXDEPTH 10000
1692 #endif
1693 
1694 
1695 #if YYERROR_VERBOSE
1696 
1697 # ifndef yystrlen
1698 #  if defined __GLIBC__ && defined _STRING_H
1699 #   define yystrlen strlen
1700 #  else
1701 /* Return the length of YYSTR.  */
1702 #if (defined __STDC__ || defined __C99__FUNC__ \
1703      || defined __cplusplus || defined _MSC_VER)
1704 static YYSIZE_T
yystrlen(const char * yystr)1705 yystrlen (const char *yystr)
1706 #else
1707 static YYSIZE_T
1708 yystrlen (yystr)
1709     const char *yystr;
1710 #endif
1711 {
1712   YYSIZE_T yylen;
1713   for (yylen = 0; yystr[yylen]; yylen++)
1714     continue;
1715   return yylen;
1716 }
1717 #  endif
1718 # endif
1719 
1720 # ifndef yystpcpy
1721 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1722 #   define yystpcpy stpcpy
1723 #  else
1724 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1725    YYDEST.  */
1726 #if (defined __STDC__ || defined __C99__FUNC__ \
1727      || defined __cplusplus || defined _MSC_VER)
1728 static char *
yystpcpy(char * yydest,const char * yysrc)1729 yystpcpy (char *yydest, const char *yysrc)
1730 #else
1731 static char *
1732 yystpcpy (yydest, yysrc)
1733     char *yydest;
1734     const char *yysrc;
1735 #endif
1736 {
1737   char *yyd = yydest;
1738   const char *yys = yysrc;
1739 
1740   while ((*yyd++ = *yys++) != '\0')
1741     continue;
1742 
1743   return yyd - 1;
1744 }
1745 #  endif
1746 # endif
1747 
1748 # ifndef yytnamerr
1749 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1750    quotes and backslashes, so that it's suitable for yyerror.  The
1751    heuristic is that double-quoting is unnecessary unless the string
1752    contains an apostrophe, a comma, or backslash (other than
1753    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1754    null, do not copy; instead, return the length of what the result
1755    would have been.  */
1756 static YYSIZE_T
yytnamerr(char * yyres,const char * yystr)1757 yytnamerr (char *yyres, const char *yystr)
1758 {
1759   if (*yystr == '"')
1760     {
1761       YYSIZE_T yyn = 0;
1762       char const *yyp = yystr;
1763 
1764       for (;;)
1765 	switch (*++yyp)
1766 	  {
1767 	  case '\'':
1768 	  case ',':
1769 	    goto do_not_strip_quotes;
1770 
1771 	  case '\\':
1772 	    if (*++yyp != '\\')
1773 	      goto do_not_strip_quotes;
1774 	    /* Fall through.  */
1775 	  default:
1776 	    if (yyres)
1777 	      yyres[yyn] = *yyp;
1778 	    yyn++;
1779 	    break;
1780 
1781 	  case '"':
1782 	    if (yyres)
1783 	      yyres[yyn] = '\0';
1784 	    return yyn;
1785 	  }
1786     do_not_strip_quotes: ;
1787     }
1788 
1789   if (! yyres)
1790     return yystrlen (yystr);
1791 
1792   return yystpcpy (yyres, yystr) - yyres;
1793 }
1794 # endif
1795 
1796 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1797    about the unexpected token YYTOKEN for the state stack whose top is
1798    YYSSP.
1799 
1800    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1801    not large enough to hold the message.  In that case, also set
1802    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1803    required number of bytes is too large to store.  */
1804 static int
yysyntax_error(YYSIZE_T * yymsg_alloc,char ** yymsg,yytype_int16 * yyssp,int yytoken)1805 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1806                 yytype_int16 *yyssp, int yytoken)
1807 {
1808   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
1809   YYSIZE_T yysize = yysize0;
1810   YYSIZE_T yysize1;
1811   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1812   /* Internationalized format string. */
1813   const char *yyformat = 0;
1814   /* Arguments of yyformat. */
1815   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1816   /* Number of reported tokens (one for the "unexpected", one per
1817      "expected"). */
1818   int yycount = 0;
1819 
1820   /* There are many possibilities here to consider:
1821      - Assume YYFAIL is not used.  It's too flawed to consider.  See
1822        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
1823        for details.  YYERROR is fine as it does not invoke this
1824        function.
1825      - If this state is a consistent state with a default action, then
1826        the only way this function was invoked is if the default action
1827        is an error action.  In that case, don't check for expected
1828        tokens because there are none.
1829      - The only way there can be no lookahead present (in yychar) is if
1830        this state is a consistent state with a default action.  Thus,
1831        detecting the absence of a lookahead is sufficient to determine
1832        that there is no unexpected or expected token to report.  In that
1833        case, just report a simple "syntax error".
1834      - Don't assume there isn't a lookahead just because this state is a
1835        consistent state with a default action.  There might have been a
1836        previous inconsistent state, consistent state with a non-default
1837        action, or user semantic action that manipulated yychar.
1838      - Of course, the expected token list depends on states to have
1839        correct lookahead information, and it depends on the parser not
1840        to perform extra reductions after fetching a lookahead from the
1841        scanner and before detecting a syntax error.  Thus, state merging
1842        (from LALR or IELR) and default reductions corrupt the expected
1843        token list.  However, the list is correct for canonical LR with
1844        one exception: it will still contain any token that will not be
1845        accepted due to an error action in a later state.
1846   */
1847   if (yytoken != YYEMPTY)
1848     {
1849       int yyn = yypact[*yyssp];
1850       yyarg[yycount++] = yytname[yytoken];
1851       if (!yypact_value_is_default (yyn))
1852         {
1853           /* Start YYX at -YYN if negative to avoid negative indexes in
1854              YYCHECK.  In other words, skip the first -YYN actions for
1855              this state because they are default actions.  */
1856           int yyxbegin = yyn < 0 ? -yyn : 0;
1857           /* Stay within bounds of both yycheck and yytname.  */
1858           int yychecklim = YYLAST - yyn + 1;
1859           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1860           int yyx;
1861 
1862           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1863             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1864                 && !yytable_value_is_error (yytable[yyx + yyn]))
1865               {
1866                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1867                   {
1868                     yycount = 1;
1869                     yysize = yysize0;
1870                     break;
1871                   }
1872                 yyarg[yycount++] = yytname[yyx];
1873                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1874                 if (! (yysize <= yysize1
1875                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1876                   return 2;
1877                 yysize = yysize1;
1878               }
1879         }
1880     }
1881 
1882   switch (yycount)
1883     {
1884 # define YYCASE_(N, S)                      \
1885       case N:                               \
1886         yyformat = S;                       \
1887       break
1888       YYCASE_(0, YY_("syntax error"));
1889       YYCASE_(1, YY_("syntax error, unexpected %s"));
1890       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1891       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1892       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1893       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1894 # undef YYCASE_
1895     }
1896 
1897   yysize1 = yysize + yystrlen (yyformat);
1898   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1899     return 2;
1900   yysize = yysize1;
1901 
1902   if (*yymsg_alloc < yysize)
1903     {
1904       *yymsg_alloc = 2 * yysize;
1905       if (! (yysize <= *yymsg_alloc
1906              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1907         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1908       return 1;
1909     }
1910 
1911   /* Avoid sprintf, as that infringes on the user's name space.
1912      Don't have undefined behavior even if the translation
1913      produced a string with the wrong number of "%s"s.  */
1914   {
1915     char *yyp = *yymsg;
1916     int yyi = 0;
1917     while ((*yyp = *yyformat) != '\0')
1918       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1919         {
1920           yyp += yytnamerr (yyp, yyarg[yyi++]);
1921           yyformat += 2;
1922         }
1923       else
1924         {
1925           yyp++;
1926           yyformat++;
1927         }
1928   }
1929   return 0;
1930 }
1931 #endif /* YYERROR_VERBOSE */
1932 
1933 /*-----------------------------------------------.
1934 | Release the memory associated to this symbol.  |
1935 `-----------------------------------------------*/
1936 
1937 /*ARGSUSED*/
1938 #if (defined __STDC__ || defined __C99__FUNC__ \
1939      || defined __cplusplus || defined _MSC_VER)
1940 static void
yydestruct(const char * yymsg,int yytype,YYSTYPE * yyvaluep,YYLTYPE * yylocationp,struct asm_parser_state * state)1941 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct asm_parser_state *state)
1942 #else
1943 static void
1944 yydestruct (yymsg, yytype, yyvaluep, yylocationp, state)
1945     const char *yymsg;
1946     int yytype;
1947     YYSTYPE *yyvaluep;
1948     YYLTYPE *yylocationp;
1949     struct asm_parser_state *state;
1950 #endif
1951 {
1952   YYUSE (yyvaluep);
1953   YYUSE (yylocationp);
1954   YYUSE (state);
1955 
1956   if (!yymsg)
1957     yymsg = "Deleting";
1958   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1959 
1960   switch (yytype)
1961     {
1962 
1963       default:
1964 	break;
1965     }
1966 }
1967 
1968 
1969 /* Prevent warnings from -Wmissing-prototypes.  */
1970 #ifdef YYPARSE_PARAM
1971 #if defined __STDC__ || defined __cplusplus
1972 int yyparse (void *YYPARSE_PARAM);
1973 #else
1974 int yyparse ();
1975 #endif
1976 #else /* ! YYPARSE_PARAM */
1977 #if defined __STDC__ || defined __cplusplus
1978 int yyparse (struct asm_parser_state *state);
1979 #else
1980 int yyparse ();
1981 #endif
1982 #endif /* ! YYPARSE_PARAM */
1983 
1984 
1985 /*----------.
1986 | yyparse.  |
1987 `----------*/
1988 
1989 #ifdef YYPARSE_PARAM
1990 #if (defined __STDC__ || defined __C99__FUNC__ \
1991      || defined __cplusplus || defined _MSC_VER)
1992 int
yyparse(void * YYPARSE_PARAM)1993 yyparse (void *YYPARSE_PARAM)
1994 #else
1995 int
1996 yyparse (YYPARSE_PARAM)
1997     void *YYPARSE_PARAM;
1998 #endif
1999 #else /* ! YYPARSE_PARAM */
2000 #if (defined __STDC__ || defined __C99__FUNC__ \
2001      || defined __cplusplus || defined _MSC_VER)
2002 int
2003 yyparse (struct asm_parser_state *state)
2004 #else
2005 int
2006 yyparse (state)
2007     struct asm_parser_state *state;
2008 #endif
2009 #endif
2010 {
2011 /* The lookahead symbol.  */
2012 int yychar;
2013 
2014 /* The semantic value of the lookahead symbol.  */
2015 YYSTYPE yylval;
2016 
2017 /* Location data for the lookahead symbol.  */
2018 YYLTYPE yylloc;
2019 
2020     /* Number of syntax errors so far.  */
2021     int yynerrs;
2022 
2023     int yystate;
2024     /* Number of tokens to shift before error messages enabled.  */
2025     int yyerrstatus;
2026 
2027     /* The stacks and their tools:
2028        `yyss': related to states.
2029        `yyvs': related to semantic values.
2030        `yyls': related to locations.
2031 
2032        Refer to the stacks thru separate pointers, to allow yyoverflow
2033        to reallocate them elsewhere.  */
2034 
2035     /* The state stack.  */
2036     yytype_int16 yyssa[YYINITDEPTH];
2037     yytype_int16 *yyss;
2038     yytype_int16 *yyssp;
2039 
2040     /* The semantic value stack.  */
2041     YYSTYPE yyvsa[YYINITDEPTH];
2042     YYSTYPE *yyvs;
2043     YYSTYPE *yyvsp;
2044 
2045     /* The location stack.  */
2046     YYLTYPE yylsa[YYINITDEPTH];
2047     YYLTYPE *yyls;
2048     YYLTYPE *yylsp;
2049 
2050     /* The locations where the error started and ended.  */
2051     YYLTYPE yyerror_range[3];
2052 
2053     YYSIZE_T yystacksize;
2054 
2055   int yyn;
2056   int yyresult;
2057   /* Lookahead token as an internal (translated) token number.  */
2058   int yytoken;
2059   /* The variables used to return semantic value and location from the
2060      action routines.  */
2061   YYSTYPE yyval;
2062   YYLTYPE yyloc;
2063 
2064 #if YYERROR_VERBOSE
2065   /* Buffer for error messages, and its allocated size.  */
2066   char yymsgbuf[128];
2067   char *yymsg = yymsgbuf;
2068   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
2069 #endif
2070 
2071 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
2072 
2073   /* The number of symbols on the RHS of the reduced rule.
2074      Keep to zero when no symbol should be popped.  */
2075   int yylen = 0;
2076 
2077   yytoken = 0;
2078   yyss = yyssa;
2079   yyvs = yyvsa;
2080   yyls = yylsa;
2081   yystacksize = YYINITDEPTH;
2082 
2083   YYDPRINTF ((stderr, "Starting parse\n"));
2084 
2085   yystate = 0;
2086   yyerrstatus = 0;
2087   yynerrs = 0;
2088   yychar = YYEMPTY; /* Cause a token to be read.  */
2089 
2090   /* Initialize stack pointers.
2091      Waste one element of value and location stack
2092      so that they stay on the same level as the state stack.
2093      The wasted elements are never initialized.  */
2094   yyssp = yyss;
2095   yyvsp = yyvs;
2096   yylsp = yyls;
2097 
2098 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
2099   /* Initialize the default location before parsing starts.  */
2100   yylloc.first_line   = yylloc.last_line   = 1;
2101   yylloc.first_column = yylloc.last_column = 1;
2102 #endif
2103 
2104   goto yysetstate;
2105 
2106 /*------------------------------------------------------------.
2107 | yynewstate -- Push a new state, which is found in yystate.  |
2108 `------------------------------------------------------------*/
2109  yynewstate:
2110   /* In all cases, when you get here, the value and location stacks
2111      have just been pushed.  So pushing a state here evens the stacks.  */
2112   yyssp++;
2113 
2114  yysetstate:
2115   *yyssp = yystate;
2116 
2117   if (yyss + yystacksize - 1 <= yyssp)
2118     {
2119       /* Get the current used size of the three stacks, in elements.  */
2120       YYSIZE_T yysize = yyssp - yyss + 1;
2121 
2122 #ifdef yyoverflow
2123       {
2124 	/* Give user a chance to reallocate the stack.  Use copies of
2125 	   these so that the &'s don't force the real ones into
2126 	   memory.  */
2127 	YYSTYPE *yyvs1 = yyvs;
2128 	yytype_int16 *yyss1 = yyss;
2129 	YYLTYPE *yyls1 = yyls;
2130 
2131 	/* Each stack pointer address is followed by the size of the
2132 	   data in use in that stack, in bytes.  This used to be a
2133 	   conditional around just the two extra args, but that might
2134 	   be undefined if yyoverflow is a macro.  */
2135 	yyoverflow (YY_("memory exhausted"),
2136 		    &yyss1, yysize * sizeof (*yyssp),
2137 		    &yyvs1, yysize * sizeof (*yyvsp),
2138 		    &yyls1, yysize * sizeof (*yylsp),
2139 		    &yystacksize);
2140 
2141 	yyls = yyls1;
2142 	yyss = yyss1;
2143 	yyvs = yyvs1;
2144       }
2145 #else /* no yyoverflow */
2146 # ifndef YYSTACK_RELOCATE
2147       goto yyexhaustedlab;
2148 # else
2149       /* Extend the stack our own way.  */
2150       if (YYMAXDEPTH <= yystacksize)
2151 	goto yyexhaustedlab;
2152       yystacksize *= 2;
2153       if (YYMAXDEPTH < yystacksize)
2154 	yystacksize = YYMAXDEPTH;
2155 
2156       {
2157 	yytype_int16 *yyss1 = yyss;
2158 	union yyalloc *yyptr =
2159 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2160 	if (! yyptr)
2161 	  goto yyexhaustedlab;
2162 	YYSTACK_RELOCATE (yyss_alloc, yyss);
2163 	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2164 	YYSTACK_RELOCATE (yyls_alloc, yyls);
2165 #  undef YYSTACK_RELOCATE
2166 	if (yyss1 != yyssa)
2167 	  YYSTACK_FREE (yyss1);
2168       }
2169 # endif
2170 #endif /* no yyoverflow */
2171 
2172       yyssp = yyss + yysize - 1;
2173       yyvsp = yyvs + yysize - 1;
2174       yylsp = yyls + yysize - 1;
2175 
2176       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2177 		  (unsigned long int) yystacksize));
2178 
2179       if (yyss + yystacksize - 1 <= yyssp)
2180 	YYABORT;
2181     }
2182 
2183   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2184 
2185   if (yystate == YYFINAL)
2186     YYACCEPT;
2187 
2188   goto yybackup;
2189 
2190 /*-----------.
2191 | yybackup.  |
2192 `-----------*/
2193 yybackup:
2194 
2195   /* Do appropriate processing given the current state.  Read a
2196      lookahead token if we need one and don't already have one.  */
2197 
2198   /* First try to decide what to do without reference to lookahead token.  */
2199   yyn = yypact[yystate];
2200   if (yypact_value_is_default (yyn))
2201     goto yydefault;
2202 
2203   /* Not known => get a lookahead token if don't already have one.  */
2204 
2205   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
2206   if (yychar == YYEMPTY)
2207     {
2208       YYDPRINTF ((stderr, "Reading a token: "));
2209       yychar = YYLEX;
2210     }
2211 
2212   if (yychar <= YYEOF)
2213     {
2214       yychar = yytoken = YYEOF;
2215       YYDPRINTF ((stderr, "Now at end of input.\n"));
2216     }
2217   else
2218     {
2219       yytoken = YYTRANSLATE (yychar);
2220       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2221     }
2222 
2223   /* If the proper action on seeing token YYTOKEN is to reduce or to
2224      detect an error, take that action.  */
2225   yyn += yytoken;
2226   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2227     goto yydefault;
2228   yyn = yytable[yyn];
2229   if (yyn <= 0)
2230     {
2231       if (yytable_value_is_error (yyn))
2232         goto yyerrlab;
2233       yyn = -yyn;
2234       goto yyreduce;
2235     }
2236 
2237   /* Count tokens shifted since error; after three, turn off error
2238      status.  */
2239   if (yyerrstatus)
2240     yyerrstatus--;
2241 
2242   /* Shift the lookahead token.  */
2243   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2244 
2245   /* Discard the shifted token.  */
2246   yychar = YYEMPTY;
2247 
2248   yystate = yyn;
2249   *++yyvsp = yylval;
2250   *++yylsp = yylloc;
2251   goto yynewstate;
2252 
2253 
2254 /*-----------------------------------------------------------.
2255 | yydefault -- do the default action for the current state.  |
2256 `-----------------------------------------------------------*/
2257 yydefault:
2258   yyn = yydefact[yystate];
2259   if (yyn == 0)
2260     goto yyerrlab;
2261   goto yyreduce;
2262 
2263 
2264 /*-----------------------------.
2265 | yyreduce -- Do a reduction.  |
2266 `-----------------------------*/
2267 yyreduce:
2268   /* yyn is the number of a rule to reduce with.  */
2269   yylen = yyr2[yyn];
2270 
2271   /* If YYLEN is nonzero, implement the default value of the action:
2272      `$$ = $1'.
2273 
2274      Otherwise, the following line sets YYVAL to garbage.
2275      This behavior is undocumented and Bison
2276      users should not rely upon it.  Assigning to YYVAL
2277      unconditionally makes the parser a bit smaller, and it avoids a
2278      GCC warning that YYVAL may be used uninitialized.  */
2279   yyval = yyvsp[1-yylen];
2280 
2281   /* Default location.  */
2282   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
2283   YY_REDUCE_PRINT (yyn);
2284   switch (yyn)
2285     {
2286         case 3:
2287 
2288 /* Line 1806 of yacc.c  */
2289 #line 282 "src/src/mesa/program/program_parse.y"
2290     {
2291 	   if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
2292 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
2293 
2294 	   }
2295 	   state->mode = ARB_vertex;
2296 	}
2297     break;
2298 
2299   case 4:
2300 
2301 /* Line 1806 of yacc.c  */
2302 #line 290 "src/src/mesa/program/program_parse.y"
2303     {
2304 	   if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
2305 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
2306 	   }
2307 	   state->mode = ARB_fragment;
2308 
2309 	   state->option.TexRect =
2310 	      (state->ctx->Extensions.NV_texture_rectangle != GL_FALSE);
2311 	}
2312     break;
2313 
2314   case 7:
2315 
2316 /* Line 1806 of yacc.c  */
2317 #line 306 "src/src/mesa/program/program_parse.y"
2318     {
2319 	   int valid = 0;
2320 
2321 	   if (state->mode == ARB_vertex) {
2322 	      valid = _mesa_ARBvp_parse_option(state, (yyvsp[(2) - (3)].string));
2323 	   } else if (state->mode == ARB_fragment) {
2324 	      valid = _mesa_ARBfp_parse_option(state, (yyvsp[(2) - (3)].string));
2325 	   }
2326 
2327 
2328 	   free((yyvsp[(2) - (3)].string));
2329 
2330 	   if (!valid) {
2331 	      const char *const err_str = (state->mode == ARB_vertex)
2332 		 ? "invalid ARB vertex program option"
2333 		 : "invalid ARB fragment program option";
2334 
2335 	      yyerror(& (yylsp[(2) - (3)]), state, err_str);
2336 	      YYERROR;
2337 	   }
2338 	}
2339     break;
2340 
2341   case 10:
2342 
2343 /* Line 1806 of yacc.c  */
2344 #line 334 "src/src/mesa/program/program_parse.y"
2345     {
2346 	   if ((yyvsp[(1) - (2)].inst) != NULL) {
2347 	      if (state->inst_tail == NULL) {
2348 		 state->inst_head = (yyvsp[(1) - (2)].inst);
2349 	      } else {
2350 		 state->inst_tail->next = (yyvsp[(1) - (2)].inst);
2351 	      }
2352 
2353 	      state->inst_tail = (yyvsp[(1) - (2)].inst);
2354 	      (yyvsp[(1) - (2)].inst)->next = NULL;
2355 
2356 	      state->prog->NumInstructions++;
2357 	   }
2358 	}
2359     break;
2360 
2361   case 12:
2362 
2363 /* Line 1806 of yacc.c  */
2364 #line 352 "src/src/mesa/program/program_parse.y"
2365     {
2366 	   (yyval.inst) = (yyvsp[(1) - (1)].inst);
2367 	   state->prog->NumAluInstructions++;
2368 	}
2369     break;
2370 
2371   case 13:
2372 
2373 /* Line 1806 of yacc.c  */
2374 #line 357 "src/src/mesa/program/program_parse.y"
2375     {
2376 	   (yyval.inst) = (yyvsp[(1) - (1)].inst);
2377 	   state->prog->NumTexInstructions++;
2378 	}
2379     break;
2380 
2381   case 24:
2382 
2383 /* Line 1806 of yacc.c  */
2384 #line 378 "src/src/mesa/program/program_parse.y"
2385     {
2386 	   (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2387 	}
2388     break;
2389 
2390   case 25:
2391 
2392 /* Line 1806 of yacc.c  */
2393 #line 384 "src/src/mesa/program/program_parse.y"
2394     {
2395 	   if ((yyvsp[(1) - (4)].temp_inst).Opcode == OPCODE_DDY)
2396 	      state->fragment.UsesDFdy = 1;
2397 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2398 	}
2399     break;
2400 
2401   case 26:
2402 
2403 /* Line 1806 of yacc.c  */
2404 #line 392 "src/src/mesa/program/program_parse.y"
2405     {
2406 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2407 	}
2408     break;
2409 
2410   case 27:
2411 
2412 /* Line 1806 of yacc.c  */
2413 #line 398 "src/src/mesa/program/program_parse.y"
2414     {
2415 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
2416 	}
2417     break;
2418 
2419   case 28:
2420 
2421 /* Line 1806 of yacc.c  */
2422 #line 405 "src/src/mesa/program/program_parse.y"
2423     {
2424 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
2425 	}
2426     break;
2427 
2428   case 29:
2429 
2430 /* Line 1806 of yacc.c  */
2431 #line 412 "src/src/mesa/program/program_parse.y"
2432     {
2433 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg));
2434 	}
2435     break;
2436 
2437   case 30:
2438 
2439 /* Line 1806 of yacc.c  */
2440 #line 418 "src/src/mesa/program/program_parse.y"
2441     {
2442 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
2443 	   if ((yyval.inst) != NULL) {
2444 	      const GLbitfield tex_mask = (1U << (yyvsp[(6) - (8)].integer));
2445 	      GLbitfield shadow_tex = 0;
2446 	      GLbitfield target_mask = 0;
2447 
2448 
2449 	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[(6) - (8)].integer);
2450 
2451 	      if ((yyvsp[(8) - (8)].integer) < 0) {
2452 		 shadow_tex = tex_mask;
2453 
2454 		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(8) - (8)].integer);
2455 		 (yyval.inst)->Base.TexShadow = 1;
2456 	      } else {
2457 		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[(8) - (8)].integer);
2458 	      }
2459 
2460 	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2461 
2462 	      /* If this texture unit was previously accessed and that access
2463 	       * had a different texture target, generate an error.
2464 	       *
2465 	       * If this texture unit was previously accessed and that access
2466 	       * had a different shadow mode, generate an error.
2467 	       */
2468 	      if ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != 0)
2469 		  && ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != target_mask)
2470 		      || ((state->prog->ShadowSamplers & tex_mask)
2471 			  != shadow_tex))) {
2472 		 yyerror(& (yylsp[(8) - (8)]), state,
2473 			 "multiple targets used on one texture image unit");
2474 		 YYERROR;
2475 	      }
2476 
2477 
2478 	      state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] |= target_mask;
2479 	      state->prog->ShadowSamplers |= shadow_tex;
2480 	   }
2481 	}
2482     break;
2483 
2484   case 31:
2485 
2486 /* Line 1806 of yacc.c  */
2487 #line 462 "src/src/mesa/program/program_parse.y"
2488     {
2489 	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
2490 	   state->fragment.UsesKill = 1;
2491 	}
2492     break;
2493 
2494   case 32:
2495 
2496 /* Line 1806 of yacc.c  */
2497 #line 467 "src/src/mesa/program/program_parse.y"
2498     {
2499 	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL);
2500 	   (yyval.inst)->Base.DstReg.CondMask = (yyvsp[(2) - (2)].dst_reg).CondMask;
2501 	   (yyval.inst)->Base.DstReg.CondSwizzle = (yyvsp[(2) - (2)].dst_reg).CondSwizzle;
2502 	   (yyval.inst)->Base.DstReg.CondSrc = (yyvsp[(2) - (2)].dst_reg).CondSrc;
2503 	   state->fragment.UsesKill = 1;
2504 	}
2505     break;
2506 
2507   case 33:
2508 
2509 /* Line 1806 of yacc.c  */
2510 #line 477 "src/src/mesa/program/program_parse.y"
2511     {
2512 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (12)].temp_inst), & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg));
2513 	   if ((yyval.inst) != NULL) {
2514 	      const GLbitfield tex_mask = (1U << (yyvsp[(10) - (12)].integer));
2515 	      GLbitfield shadow_tex = 0;
2516 	      GLbitfield target_mask = 0;
2517 
2518 
2519 	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[(10) - (12)].integer);
2520 
2521 	      if ((yyvsp[(12) - (12)].integer) < 0) {
2522 		 shadow_tex = tex_mask;
2523 
2524 		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(12) - (12)].integer);
2525 		 (yyval.inst)->Base.TexShadow = 1;
2526 	      } else {
2527 		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[(12) - (12)].integer);
2528 	      }
2529 
2530 	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2531 
2532 	      /* If this texture unit was previously accessed and that access
2533 	       * had a different texture target, generate an error.
2534 	       *
2535 	       * If this texture unit was previously accessed and that access
2536 	       * had a different shadow mode, generate an error.
2537 	       */
2538 	      if ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != 0)
2539 		  && ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != target_mask)
2540 		      || ((state->prog->ShadowSamplers & tex_mask)
2541 			  != shadow_tex))) {
2542 		 yyerror(& (yylsp[(12) - (12)]), state,
2543 			 "multiple targets used on one texture image unit");
2544 		 YYERROR;
2545 	      }
2546 
2547 
2548 	      state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] |= target_mask;
2549 	      state->prog->ShadowSamplers |= shadow_tex;
2550 	   }
2551 	}
2552     break;
2553 
2554   case 34:
2555 
2556 /* Line 1806 of yacc.c  */
2557 #line 521 "src/src/mesa/program/program_parse.y"
2558     {
2559 	   (yyval.integer) = (yyvsp[(2) - (2)].integer);
2560 	}
2561     break;
2562 
2563   case 35:
2564 
2565 /* Line 1806 of yacc.c  */
2566 #line 526 "src/src/mesa/program/program_parse.y"
2567     { (yyval.integer) = TEXTURE_1D_INDEX; }
2568     break;
2569 
2570   case 36:
2571 
2572 /* Line 1806 of yacc.c  */
2573 #line 527 "src/src/mesa/program/program_parse.y"
2574     { (yyval.integer) = TEXTURE_2D_INDEX; }
2575     break;
2576 
2577   case 37:
2578 
2579 /* Line 1806 of yacc.c  */
2580 #line 528 "src/src/mesa/program/program_parse.y"
2581     { (yyval.integer) = TEXTURE_3D_INDEX; }
2582     break;
2583 
2584   case 38:
2585 
2586 /* Line 1806 of yacc.c  */
2587 #line 529 "src/src/mesa/program/program_parse.y"
2588     { (yyval.integer) = TEXTURE_CUBE_INDEX; }
2589     break;
2590 
2591   case 39:
2592 
2593 /* Line 1806 of yacc.c  */
2594 #line 530 "src/src/mesa/program/program_parse.y"
2595     { (yyval.integer) = TEXTURE_RECT_INDEX; }
2596     break;
2597 
2598   case 40:
2599 
2600 /* Line 1806 of yacc.c  */
2601 #line 531 "src/src/mesa/program/program_parse.y"
2602     { (yyval.integer) = -TEXTURE_1D_INDEX; }
2603     break;
2604 
2605   case 41:
2606 
2607 /* Line 1806 of yacc.c  */
2608 #line 532 "src/src/mesa/program/program_parse.y"
2609     { (yyval.integer) = -TEXTURE_2D_INDEX; }
2610     break;
2611 
2612   case 42:
2613 
2614 /* Line 1806 of yacc.c  */
2615 #line 533 "src/src/mesa/program/program_parse.y"
2616     { (yyval.integer) = -TEXTURE_RECT_INDEX; }
2617     break;
2618 
2619   case 43:
2620 
2621 /* Line 1806 of yacc.c  */
2622 #line 534 "src/src/mesa/program/program_parse.y"
2623     { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; }
2624     break;
2625 
2626   case 44:
2627 
2628 /* Line 1806 of yacc.c  */
2629 #line 535 "src/src/mesa/program/program_parse.y"
2630     { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; }
2631     break;
2632 
2633   case 45:
2634 
2635 /* Line 1806 of yacc.c  */
2636 #line 536 "src/src/mesa/program/program_parse.y"
2637     { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; }
2638     break;
2639 
2640   case 46:
2641 
2642 /* Line 1806 of yacc.c  */
2643 #line 537 "src/src/mesa/program/program_parse.y"
2644     { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; }
2645     break;
2646 
2647   case 47:
2648 
2649 /* Line 1806 of yacc.c  */
2650 #line 541 "src/src/mesa/program/program_parse.y"
2651     {
2652 	   /* FIXME: Is this correct?  Should the extenedSwizzle be applied
2653 	    * FIXME: to the existing swizzle?
2654 	    */
2655 	   (yyvsp[(4) - (6)].src_reg).Base.Swizzle = (yyvsp[(6) - (6)].swiz_mask).swizzle;
2656 	   (yyvsp[(4) - (6)].src_reg).Base.Negate = (yyvsp[(6) - (6)].swiz_mask).mask;
2657 
2658 	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), NULL, NULL);
2659 	}
2660     break;
2661 
2662   case 48:
2663 
2664 /* Line 1806 of yacc.c  */
2665 #line 553 "src/src/mesa/program/program_parse.y"
2666     {
2667 	   (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
2668 
2669 	   if ((yyvsp[(1) - (2)].negate)) {
2670 	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2671 	   }
2672 	}
2673     break;
2674 
2675   case 49:
2676 
2677 /* Line 1806 of yacc.c  */
2678 #line 561 "src/src/mesa/program/program_parse.y"
2679     {
2680 	   (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
2681 
2682 	   if (!state->option.NV_fragment) {
2683 	      yyerror(& (yylsp[(2) - (4)]), state, "unexpected character '|'");
2684 	      YYERROR;
2685 	   }
2686 
2687 	   if ((yyvsp[(1) - (4)].negate)) {
2688 	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2689 	   }
2690 
2691 	   (yyval.src_reg).Base.Abs = 1;
2692 	}
2693     break;
2694 
2695   case 50:
2696 
2697 /* Line 1806 of yacc.c  */
2698 #line 578 "src/src/mesa/program/program_parse.y"
2699     {
2700 	   (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
2701 
2702 	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2703 						    (yyvsp[(2) - (2)].swiz_mask).swizzle);
2704 	}
2705     break;
2706 
2707   case 51:
2708 
2709 /* Line 1806 of yacc.c  */
2710 #line 585 "src/src/mesa/program/program_parse.y"
2711     {
2712 	   struct asm_symbol temp_sym;
2713 
2714 	   if (!state->option.NV_fragment) {
2715 	      yyerror(& (yylsp[(1) - (1)]), state, "expected scalar suffix");
2716 	      YYERROR;
2717 	   }
2718 
2719 	   memset(& temp_sym, 0, sizeof(temp_sym));
2720 	   temp_sym.param_binding_begin = ~0;
2721 	   initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector), GL_TRUE);
2722 
2723 	   set_src_reg_swz(& (yyval.src_reg), PROGRAM_CONSTANT,
2724                            temp_sym.param_binding_begin,
2725                            temp_sym.param_binding_swizzle);
2726 	}
2727     break;
2728 
2729   case 52:
2730 
2731 /* Line 1806 of yacc.c  */
2732 #line 604 "src/src/mesa/program/program_parse.y"
2733     {
2734 	   (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
2735 
2736 	   if ((yyvsp[(1) - (3)].negate)) {
2737 	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2738 	   }
2739 
2740 	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2741 						    (yyvsp[(3) - (3)].swiz_mask).swizzle);
2742 	}
2743     break;
2744 
2745   case 53:
2746 
2747 /* Line 1806 of yacc.c  */
2748 #line 615 "src/src/mesa/program/program_parse.y"
2749     {
2750 	   (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
2751 
2752 	   if (!state->option.NV_fragment) {
2753 	      yyerror(& (yylsp[(2) - (5)]), state, "unexpected character '|'");
2754 	      YYERROR;
2755 	   }
2756 
2757 	   if ((yyvsp[(1) - (5)].negate)) {
2758 	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2759 	   }
2760 
2761 	   (yyval.src_reg).Base.Abs = 1;
2762 	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2763 						    (yyvsp[(4) - (5)].swiz_mask).swizzle);
2764 	}
2765     break;
2766 
2767   case 54:
2768 
2769 /* Line 1806 of yacc.c  */
2770 #line 635 "src/src/mesa/program/program_parse.y"
2771     {
2772 	   (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg);
2773 	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (3)].swiz_mask).mask;
2774 	   (yyval.dst_reg).CondMask = (yyvsp[(3) - (3)].dst_reg).CondMask;
2775 	   (yyval.dst_reg).CondSwizzle = (yyvsp[(3) - (3)].dst_reg).CondSwizzle;
2776 	   (yyval.dst_reg).CondSrc = (yyvsp[(3) - (3)].dst_reg).CondSrc;
2777 
2778 	   if ((yyval.dst_reg).File == PROGRAM_OUTPUT) {
2779 	      /* Technically speaking, this should check that it is in
2780 	       * vertex program mode.  However, PositionInvariant can never be
2781 	       * set in fragment program mode, so it is somewhat irrelevant.
2782 	       */
2783 	      if (state->option.PositionInvariant
2784 	       && ((yyval.dst_reg).Index == VERT_RESULT_HPOS)) {
2785 		 yyerror(& (yylsp[(1) - (3)]), state, "position-invariant programs cannot "
2786 			 "write position");
2787 		 YYERROR;
2788 	      }
2789 
2790 	      state->prog->OutputsWritten |= BITFIELD64_BIT((yyval.dst_reg).Index);
2791 	   }
2792 	}
2793     break;
2794 
2795   case 55:
2796 
2797 /* Line 1806 of yacc.c  */
2798 #line 660 "src/src/mesa/program/program_parse.y"
2799     {
2800 	   set_dst_reg(& (yyval.dst_reg), PROGRAM_ADDRESS, 0);
2801 	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
2802 	}
2803     break;
2804 
2805   case 56:
2806 
2807 /* Line 1806 of yacc.c  */
2808 #line 667 "src/src/mesa/program/program_parse.y"
2809     {
2810 	   const unsigned xyzw_valid =
2811 	      ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
2812 	      | ((yyvsp[(3) - (7)].ext_swizzle).xyzw_valid << 1)
2813 	      | ((yyvsp[(5) - (7)].ext_swizzle).xyzw_valid << 2)
2814 	      | ((yyvsp[(7) - (7)].ext_swizzle).xyzw_valid << 3);
2815 	   const unsigned rgba_valid =
2816 	      ((yyvsp[(1) - (7)].ext_swizzle).rgba_valid << 0)
2817 	      | ((yyvsp[(3) - (7)].ext_swizzle).rgba_valid << 1)
2818 	      | ((yyvsp[(5) - (7)].ext_swizzle).rgba_valid << 2)
2819 	      | ((yyvsp[(7) - (7)].ext_swizzle).rgba_valid << 3);
2820 
2821 	   /* All of the swizzle components have to be valid in either RGBA
2822 	    * or XYZW.  Note that 0 and 1 are valid in both, so both masks
2823 	    * can have some bits set.
2824 	    *
2825 	    * We somewhat deviate from the spec here.  It would be really hard
2826 	    * to figure out which component is the error, and there probably
2827 	    * isn't a lot of benefit.
2828 	    */
2829 	   if ((rgba_valid != 0x0f) && (xyzw_valid != 0x0f)) {
2830 	      yyerror(& (yylsp[(1) - (7)]), state, "cannot combine RGBA and XYZW swizzle "
2831 		      "components");
2832 	      YYERROR;
2833 	   }
2834 
2835 	   (yyval.swiz_mask).swizzle = MAKE_SWIZZLE4((yyvsp[(1) - (7)].ext_swizzle).swz, (yyvsp[(3) - (7)].ext_swizzle).swz, (yyvsp[(5) - (7)].ext_swizzle).swz, (yyvsp[(7) - (7)].ext_swizzle).swz);
2836 	   (yyval.swiz_mask).mask = ((yyvsp[(1) - (7)].ext_swizzle).negate) | ((yyvsp[(3) - (7)].ext_swizzle).negate << 1) | ((yyvsp[(5) - (7)].ext_swizzle).negate << 2)
2837 	      | ((yyvsp[(7) - (7)].ext_swizzle).negate << 3);
2838 	}
2839     break;
2840 
2841   case 57:
2842 
2843 /* Line 1806 of yacc.c  */
2844 #line 700 "src/src/mesa/program/program_parse.y"
2845     {
2846 	   (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
2847 	   (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
2848 	}
2849     break;
2850 
2851   case 58:
2852 
2853 /* Line 1806 of yacc.c  */
2854 #line 707 "src/src/mesa/program/program_parse.y"
2855     {
2856 	   if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
2857 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2858 	      YYERROR;
2859 	   }
2860 
2861 	   (yyval.ext_swizzle).swz = ((yyvsp[(1) - (1)].integer) == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
2862 
2863 	   /* 0 and 1 are valid for both RGBA swizzle names and XYZW
2864 	    * swizzle names.
2865 	    */
2866 	   (yyval.ext_swizzle).xyzw_valid = 1;
2867 	   (yyval.ext_swizzle).rgba_valid = 1;
2868 	}
2869     break;
2870 
2871   case 59:
2872 
2873 /* Line 1806 of yacc.c  */
2874 #line 722 "src/src/mesa/program/program_parse.y"
2875     {
2876 	   char s;
2877 
2878 	   if (strlen((yyvsp[(1) - (1)].string)) > 1) {
2879 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2880 	      YYERROR;
2881 	   }
2882 
2883 	   s = (yyvsp[(1) - (1)].string)[0];
2884 	   free((yyvsp[(1) - (1)].string));
2885 
2886 	   switch (s) {
2887 	   case 'x':
2888 	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2889 	      (yyval.ext_swizzle).xyzw_valid = 1;
2890 	      break;
2891 	   case 'y':
2892 	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2893 	      (yyval.ext_swizzle).xyzw_valid = 1;
2894 	      break;
2895 	   case 'z':
2896 	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2897 	      (yyval.ext_swizzle).xyzw_valid = 1;
2898 	      break;
2899 	   case 'w':
2900 	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2901 	      (yyval.ext_swizzle).xyzw_valid = 1;
2902 	      break;
2903 
2904 	   case 'r':
2905 	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2906 	      (yyval.ext_swizzle).rgba_valid = 1;
2907 	      break;
2908 	   case 'g':
2909 	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2910 	      (yyval.ext_swizzle).rgba_valid = 1;
2911 	      break;
2912 	   case 'b':
2913 	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2914 	      (yyval.ext_swizzle).rgba_valid = 1;
2915 	      break;
2916 	   case 'a':
2917 	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2918 	      (yyval.ext_swizzle).rgba_valid = 1;
2919 	      break;
2920 
2921 	   default:
2922 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2923 	      YYERROR;
2924 	      break;
2925 	   }
2926 	}
2927     break;
2928 
2929   case 60:
2930 
2931 /* Line 1806 of yacc.c  */
2932 #line 777 "src/src/mesa/program/program_parse.y"
2933     {
2934 	   struct asm_symbol *const s = (struct asm_symbol *)
2935 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
2936 
2937 	   free((yyvsp[(1) - (1)].string));
2938 
2939 	   if (s == NULL) {
2940 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2941 	      YYERROR;
2942 	   } else if ((s->type != at_param) && (s->type != at_temp)
2943 		      && (s->type != at_attrib)) {
2944 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2945 	      YYERROR;
2946 	   } else if ((s->type == at_param) && s->param_is_array) {
2947 	      yyerror(& (yylsp[(1) - (1)]), state, "non-array access to array PARAM");
2948 	      YYERROR;
2949 	   }
2950 
2951 	   init_src_reg(& (yyval.src_reg));
2952 	   switch (s->type) {
2953 	   case at_temp:
2954 	      set_src_reg(& (yyval.src_reg), PROGRAM_TEMPORARY, s->temp_binding);
2955 	      break;
2956 	   case at_param:
2957               set_src_reg_swz(& (yyval.src_reg), s->param_binding_type,
2958                               s->param_binding_begin,
2959                               s->param_binding_swizzle);
2960 	      break;
2961 	   case at_attrib:
2962 	      set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, s->attrib_binding);
2963 	      state->prog->InputsRead |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2964 
2965 	      if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
2966 		 YYERROR;
2967 	      }
2968 	      break;
2969 
2970 	   default:
2971 	      YYERROR;
2972 	      break;
2973 	   }
2974 	}
2975     break;
2976 
2977   case 61:
2978 
2979 /* Line 1806 of yacc.c  */
2980 #line 820 "src/src/mesa/program/program_parse.y"
2981     {
2982 	   set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, (yyvsp[(1) - (1)].attrib));
2983 	   state->prog->InputsRead |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2984 
2985 	   if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
2986 	      YYERROR;
2987 	   }
2988 	}
2989     break;
2990 
2991   case 62:
2992 
2993 /* Line 1806 of yacc.c  */
2994 #line 829 "src/src/mesa/program/program_parse.y"
2995     {
2996 	   if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr
2997 	       && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) {
2998 	      yyerror(& (yylsp[(3) - (4)]), state, "out of bounds array access");
2999 	      YYERROR;
3000 	   }
3001 
3002 	   init_src_reg(& (yyval.src_reg));
3003 	   (yyval.src_reg).Base.File = (yyvsp[(1) - (4)].sym)->param_binding_type;
3004 
3005 	   if ((yyvsp[(3) - (4)].src_reg).Base.RelAddr) {
3006               state->prog->IndirectRegisterFiles |= (1 << (yyval.src_reg).Base.File);
3007 	      (yyvsp[(1) - (4)].sym)->param_accessed_indirectly = 1;
3008 
3009 	      (yyval.src_reg).Base.RelAddr = 1;
3010 	      (yyval.src_reg).Base.Index = (yyvsp[(3) - (4)].src_reg).Base.Index;
3011 	      (yyval.src_reg).Symbol = (yyvsp[(1) - (4)].sym);
3012 	   } else {
3013 	      (yyval.src_reg).Base.Index = (yyvsp[(1) - (4)].sym)->param_binding_begin + (yyvsp[(3) - (4)].src_reg).Base.Index;
3014 	   }
3015 	}
3016     break;
3017 
3018   case 63:
3019 
3020 /* Line 1806 of yacc.c  */
3021 #line 851 "src/src/mesa/program/program_parse.y"
3022     {
3023            gl_register_file file = ((yyvsp[(1) - (1)].temp_sym).name != NULL)
3024 	      ? (yyvsp[(1) - (1)].temp_sym).param_binding_type
3025 	      : PROGRAM_CONSTANT;
3026            set_src_reg_swz(& (yyval.src_reg), file, (yyvsp[(1) - (1)].temp_sym).param_binding_begin,
3027                            (yyvsp[(1) - (1)].temp_sym).param_binding_swizzle);
3028 	}
3029     break;
3030 
3031   case 64:
3032 
3033 /* Line 1806 of yacc.c  */
3034 #line 861 "src/src/mesa/program/program_parse.y"
3035     {
3036 	   set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[(1) - (1)].result));
3037 	}
3038     break;
3039 
3040   case 65:
3041 
3042 /* Line 1806 of yacc.c  */
3043 #line 865 "src/src/mesa/program/program_parse.y"
3044     {
3045 	   struct asm_symbol *const s = (struct asm_symbol *)
3046 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
3047 
3048 	   free((yyvsp[(1) - (1)].string));
3049 
3050 	   if (s == NULL) {
3051 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
3052 	      YYERROR;
3053 	   } else if ((s->type != at_output) && (s->type != at_temp)) {
3054 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
3055 	      YYERROR;
3056 	   }
3057 
3058 	   switch (s->type) {
3059 	   case at_temp:
3060 	      set_dst_reg(& (yyval.dst_reg), PROGRAM_TEMPORARY, s->temp_binding);
3061 	      break;
3062 	   case at_output:
3063 	      set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, s->output_binding);
3064 	      break;
3065 	   default:
3066 	      set_dst_reg(& (yyval.dst_reg), s->param_binding_type, s->param_binding_begin);
3067 	      break;
3068 	   }
3069 	}
3070     break;
3071 
3072   case 66:
3073 
3074 /* Line 1806 of yacc.c  */
3075 #line 894 "src/src/mesa/program/program_parse.y"
3076     {
3077 	   struct asm_symbol *const s = (struct asm_symbol *)
3078 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
3079 
3080 	   free((yyvsp[(1) - (1)].string));
3081 
3082 	   if (s == NULL) {
3083 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
3084 	      YYERROR;
3085 	   } else if ((s->type != at_param) || !s->param_is_array) {
3086 	      yyerror(& (yylsp[(1) - (1)]), state, "array access to non-PARAM variable");
3087 	      YYERROR;
3088 	   } else {
3089 	      (yyval.sym) = s;
3090 	   }
3091 	}
3092     break;
3093 
3094   case 69:
3095 
3096 /* Line 1806 of yacc.c  */
3097 #line 915 "src/src/mesa/program/program_parse.y"
3098     {
3099 	   init_src_reg(& (yyval.src_reg));
3100 	   (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
3101 	}
3102     break;
3103 
3104   case 70:
3105 
3106 /* Line 1806 of yacc.c  */
3107 #line 922 "src/src/mesa/program/program_parse.y"
3108     {
3109 	   /* FINISHME: Add support for multiple address registers.
3110 	    */
3111 	   /* FINISHME: Add support for 4-component address registers.
3112 	    */
3113 	   init_src_reg(& (yyval.src_reg));
3114 	   (yyval.src_reg).Base.RelAddr = 1;
3115 	   (yyval.src_reg).Base.Index = (yyvsp[(3) - (3)].integer);
3116 	}
3117     break;
3118 
3119   case 71:
3120 
3121 /* Line 1806 of yacc.c  */
3122 #line 933 "src/src/mesa/program/program_parse.y"
3123     { (yyval.integer) = 0; }
3124     break;
3125 
3126   case 72:
3127 
3128 /* Line 1806 of yacc.c  */
3129 #line 934 "src/src/mesa/program/program_parse.y"
3130     { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
3131     break;
3132 
3133   case 73:
3134 
3135 /* Line 1806 of yacc.c  */
3136 #line 935 "src/src/mesa/program/program_parse.y"
3137     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); }
3138     break;
3139 
3140   case 74:
3141 
3142 /* Line 1806 of yacc.c  */
3143 #line 939 "src/src/mesa/program/program_parse.y"
3144     {
3145 	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > (state->limits->MaxAddressOffset - 1))) {
3146               char s[100];
3147               _mesa_snprintf(s, sizeof(s),
3148                              "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
3149 	      yyerror(& (yylsp[(1) - (1)]), state, s);
3150 	      YYERROR;
3151 	   } else {
3152 	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3153 	   }
3154 	}
3155     break;
3156 
3157   case 75:
3158 
3159 /* Line 1806 of yacc.c  */
3160 #line 953 "src/src/mesa/program/program_parse.y"
3161     {
3162 	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > state->limits->MaxAddressOffset)) {
3163               char s[100];
3164               _mesa_snprintf(s, sizeof(s),
3165                              "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
3166 	      yyerror(& (yylsp[(1) - (1)]), state, s);
3167 	      YYERROR;
3168 	   } else {
3169 	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3170 	   }
3171 	}
3172     break;
3173 
3174   case 76:
3175 
3176 /* Line 1806 of yacc.c  */
3177 #line 967 "src/src/mesa/program/program_parse.y"
3178     {
3179 	   struct asm_symbol *const s = (struct asm_symbol *)
3180 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
3181 
3182 	   free((yyvsp[(1) - (1)].string));
3183 
3184 	   if (s == NULL) {
3185 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid array member");
3186 	      YYERROR;
3187 	   } else if (s->type != at_address) {
3188 	      yyerror(& (yylsp[(1) - (1)]), state,
3189 		      "invalid variable for indexed array access");
3190 	      YYERROR;
3191 	   } else {
3192 	      (yyval.sym) = s;
3193 	   }
3194 	}
3195     break;
3196 
3197   case 77:
3198 
3199 /* Line 1806 of yacc.c  */
3200 #line 987 "src/src/mesa/program/program_parse.y"
3201     {
3202 	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
3203 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
3204 	      YYERROR;
3205 	   } else {
3206 	      (yyval.swiz_mask) = (yyvsp[(1) - (1)].swiz_mask);
3207 	   }
3208 	}
3209     break;
3210 
3211   case 78:
3212 
3213 /* Line 1806 of yacc.c  */
3214 #line 998 "src/src/mesa/program/program_parse.y"
3215     {
3216 	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
3217 	      yyerror(& (yylsp[(1) - (1)]), state,
3218 		      "address register write mask must be \".x\"");
3219 	      YYERROR;
3220 	   } else {
3221 	      (yyval.swiz_mask) = (yyvsp[(1) - (1)].swiz_mask);
3222 	   }
3223 	}
3224     break;
3225 
3226   case 83:
3227 
3228 /* Line 1806 of yacc.c  */
3229 #line 1014 "src/src/mesa/program/program_parse.y"
3230     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
3231     break;
3232 
3233   case 88:
3234 
3235 /* Line 1806 of yacc.c  */
3236 #line 1018 "src/src/mesa/program/program_parse.y"
3237     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
3238     break;
3239 
3240   case 89:
3241 
3242 /* Line 1806 of yacc.c  */
3243 #line 1022 "src/src/mesa/program/program_parse.y"
3244     {
3245 	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
3246 	}
3247     break;
3248 
3249   case 90:
3250 
3251 /* Line 1806 of yacc.c  */
3252 #line 1026 "src/src/mesa/program/program_parse.y"
3253     {
3254 	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
3255 	}
3256     break;
3257 
3258   case 91:
3259 
3260 /* Line 1806 of yacc.c  */
3261 #line 1030 "src/src/mesa/program/program_parse.y"
3262     {
3263 	   (yyval.dst_reg).CondMask = COND_TR;
3264 	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3265 	   (yyval.dst_reg).CondSrc = 0;
3266 	}
3267     break;
3268 
3269   case 92:
3270 
3271 /* Line 1806 of yacc.c  */
3272 #line 1038 "src/src/mesa/program/program_parse.y"
3273     {
3274 	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
3275 	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
3276 	}
3277     break;
3278 
3279   case 93:
3280 
3281 /* Line 1806 of yacc.c  */
3282 #line 1045 "src/src/mesa/program/program_parse.y"
3283     {
3284 	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
3285 	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
3286 	}
3287     break;
3288 
3289   case 94:
3290 
3291 /* Line 1806 of yacc.c  */
3292 #line 1052 "src/src/mesa/program/program_parse.y"
3293     {
3294 	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
3295 	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
3296 	      char *const err_str =
3297 		 make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
3298 
3299 	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
3300 		      ? err_str : "invalid condition code");
3301 
3302 	      if (err_str != NULL) {
3303 		 free(err_str);
3304 	      }
3305 
3306 	      YYERROR;
3307 	   }
3308 
3309 	   (yyval.dst_reg).CondMask = cond;
3310 	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3311 	   (yyval.dst_reg).CondSrc = 0;
3312 	}
3313     break;
3314 
3315   case 95:
3316 
3317 /* Line 1806 of yacc.c  */
3318 #line 1075 "src/src/mesa/program/program_parse.y"
3319     {
3320 	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
3321 	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
3322 	      char *const err_str =
3323 		 make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
3324 
3325 	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
3326 		      ? err_str : "invalid condition code");
3327 
3328 	      if (err_str != NULL) {
3329 		 free(err_str);
3330 	      }
3331 
3332 	      YYERROR;
3333 	   }
3334 
3335 	   (yyval.dst_reg).CondMask = cond;
3336 	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3337 	   (yyval.dst_reg).CondSrc = 0;
3338 	}
3339     break;
3340 
3341   case 102:
3342 
3343 /* Line 1806 of yacc.c  */
3344 #line 1106 "src/src/mesa/program/program_parse.y"
3345     {
3346 	   struct asm_symbol *const s =
3347 	      declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
3348 
3349 	   if (s == NULL) {
3350 	      free((yyvsp[(2) - (4)].string));
3351 	      YYERROR;
3352 	   } else {
3353 	      s->attrib_binding = (yyvsp[(4) - (4)].attrib);
3354 	      state->InputsBound |= BITFIELD64_BIT(s->attrib_binding);
3355 
3356 	      if (!validate_inputs(& (yylsp[(4) - (4)]), state)) {
3357 		 YYERROR;
3358 	      }
3359 	   }
3360 	}
3361     break;
3362 
3363   case 103:
3364 
3365 /* Line 1806 of yacc.c  */
3366 #line 1125 "src/src/mesa/program/program_parse.y"
3367     {
3368 	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
3369 	}
3370     break;
3371 
3372   case 104:
3373 
3374 /* Line 1806 of yacc.c  */
3375 #line 1129 "src/src/mesa/program/program_parse.y"
3376     {
3377 	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
3378 	}
3379     break;
3380 
3381   case 105:
3382 
3383 /* Line 1806 of yacc.c  */
3384 #line 1135 "src/src/mesa/program/program_parse.y"
3385     {
3386 	   (yyval.attrib) = VERT_ATTRIB_POS;
3387 	}
3388     break;
3389 
3390   case 106:
3391 
3392 /* Line 1806 of yacc.c  */
3393 #line 1139 "src/src/mesa/program/program_parse.y"
3394     {
3395 	   (yyval.attrib) = VERT_ATTRIB_WEIGHT;
3396 	}
3397     break;
3398 
3399   case 107:
3400 
3401 /* Line 1806 of yacc.c  */
3402 #line 1143 "src/src/mesa/program/program_parse.y"
3403     {
3404 	   (yyval.attrib) = VERT_ATTRIB_NORMAL;
3405 	}
3406     break;
3407 
3408   case 108:
3409 
3410 /* Line 1806 of yacc.c  */
3411 #line 1147 "src/src/mesa/program/program_parse.y"
3412     {
3413 	   if (!state->ctx->Extensions.EXT_secondary_color) {
3414 	      yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
3415 	      YYERROR;
3416 	   }
3417 
3418 	   (yyval.attrib) = VERT_ATTRIB_COLOR0 + (yyvsp[(2) - (2)].integer);
3419 	}
3420     break;
3421 
3422   case 109:
3423 
3424 /* Line 1806 of yacc.c  */
3425 #line 1156 "src/src/mesa/program/program_parse.y"
3426     {
3427 	   if (!state->ctx->Extensions.EXT_fog_coord) {
3428 	      yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
3429 	      YYERROR;
3430 	   }
3431 
3432 	   (yyval.attrib) = VERT_ATTRIB_FOG;
3433 	}
3434     break;
3435 
3436   case 110:
3437 
3438 /* Line 1806 of yacc.c  */
3439 #line 1165 "src/src/mesa/program/program_parse.y"
3440     {
3441 	   (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
3442 	}
3443     break;
3444 
3445   case 111:
3446 
3447 /* Line 1806 of yacc.c  */
3448 #line 1169 "src/src/mesa/program/program_parse.y"
3449     {
3450 	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
3451 	   YYERROR;
3452 	}
3453     break;
3454 
3455   case 112:
3456 
3457 /* Line 1806 of yacc.c  */
3458 #line 1174 "src/src/mesa/program/program_parse.y"
3459     {
3460 	   (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
3461 	}
3462     break;
3463 
3464   case 113:
3465 
3466 /* Line 1806 of yacc.c  */
3467 #line 1180 "src/src/mesa/program/program_parse.y"
3468     {
3469 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
3470 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
3471 	      YYERROR;
3472 	   }
3473 
3474 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3475 	}
3476     break;
3477 
3478   case 117:
3479 
3480 /* Line 1806 of yacc.c  */
3481 #line 1194 "src/src/mesa/program/program_parse.y"
3482     {
3483 	   (yyval.attrib) = FRAG_ATTRIB_WPOS;
3484 	}
3485     break;
3486 
3487   case 118:
3488 
3489 /* Line 1806 of yacc.c  */
3490 #line 1198 "src/src/mesa/program/program_parse.y"
3491     {
3492 	   (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
3493 	}
3494     break;
3495 
3496   case 119:
3497 
3498 /* Line 1806 of yacc.c  */
3499 #line 1202 "src/src/mesa/program/program_parse.y"
3500     {
3501 	   (yyval.attrib) = FRAG_ATTRIB_FOGC;
3502 	}
3503     break;
3504 
3505   case 120:
3506 
3507 /* Line 1806 of yacc.c  */
3508 #line 1206 "src/src/mesa/program/program_parse.y"
3509     {
3510 	   (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
3511 	}
3512     break;
3513 
3514   case 123:
3515 
3516 /* Line 1806 of yacc.c  */
3517 #line 1214 "src/src/mesa/program/program_parse.y"
3518     {
3519 	   struct asm_symbol *const s =
3520 	      declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
3521 
3522 	   if (s == NULL) {
3523 	      free((yyvsp[(2) - (3)].string));
3524 	      YYERROR;
3525 	   } else {
3526 	      s->param_binding_type = (yyvsp[(3) - (3)].temp_sym).param_binding_type;
3527 	      s->param_binding_begin = (yyvsp[(3) - (3)].temp_sym).param_binding_begin;
3528 	      s->param_binding_length = (yyvsp[(3) - (3)].temp_sym).param_binding_length;
3529               s->param_binding_swizzle = (yyvsp[(3) - (3)].temp_sym).param_binding_swizzle;
3530 	      s->param_is_array = 0;
3531 	   }
3532 	}
3533     break;
3534 
3535   case 124:
3536 
3537 /* Line 1806 of yacc.c  */
3538 #line 1232 "src/src/mesa/program/program_parse.y"
3539     {
3540 	   if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {
3541 	      free((yyvsp[(2) - (6)].string));
3542 	      yyerror(& (yylsp[(4) - (6)]), state,
3543 		      "parameter array size and number of bindings must match");
3544 	      YYERROR;
3545 	   } else {
3546 	      struct asm_symbol *const s =
3547 		 declare_variable(state, (yyvsp[(2) - (6)].string), (yyvsp[(6) - (6)].temp_sym).type, & (yylsp[(2) - (6)]));
3548 
3549 	      if (s == NULL) {
3550 		 free((yyvsp[(2) - (6)].string));
3551 		 YYERROR;
3552 	      } else {
3553 		 s->param_binding_type = (yyvsp[(6) - (6)].temp_sym).param_binding_type;
3554 		 s->param_binding_begin = (yyvsp[(6) - (6)].temp_sym).param_binding_begin;
3555 		 s->param_binding_length = (yyvsp[(6) - (6)].temp_sym).param_binding_length;
3556                  s->param_binding_swizzle = SWIZZLE_XYZW;
3557 		 s->param_is_array = 1;
3558 	      }
3559 	   }
3560 	}
3561     break;
3562 
3563   case 125:
3564 
3565 /* Line 1806 of yacc.c  */
3566 #line 1257 "src/src/mesa/program/program_parse.y"
3567     {
3568 	   (yyval.integer) = 0;
3569 	}
3570     break;
3571 
3572   case 126:
3573 
3574 /* Line 1806 of yacc.c  */
3575 #line 1261 "src/src/mesa/program/program_parse.y"
3576     {
3577 	   if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) {
3578               char msg[100];
3579               _mesa_snprintf(msg, sizeof(msg),
3580                              "invalid parameter array size (size=%d max=%u)",
3581                              (yyvsp[(1) - (1)].integer), state->limits->MaxParameters);
3582 	      yyerror(& (yylsp[(1) - (1)]), state, msg);
3583 	      YYERROR;
3584 	   } else {
3585 	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3586 	   }
3587 	}
3588     break;
3589 
3590   case 127:
3591 
3592 /* Line 1806 of yacc.c  */
3593 #line 1276 "src/src/mesa/program/program_parse.y"
3594     {
3595 	   (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
3596 	}
3597     break;
3598 
3599   case 128:
3600 
3601 /* Line 1806 of yacc.c  */
3602 #line 1282 "src/src/mesa/program/program_parse.y"
3603     {
3604 	   (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
3605 	}
3606     break;
3607 
3608   case 130:
3609 
3610 /* Line 1806 of yacc.c  */
3611 #line 1289 "src/src/mesa/program/program_parse.y"
3612     {
3613 	   (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;
3614 	   (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym);
3615 	}
3616     break;
3617 
3618   case 131:
3619 
3620 /* Line 1806 of yacc.c  */
3621 #line 1296 "src/src/mesa/program/program_parse.y"
3622     {
3623 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3624 	   (yyval.temp_sym).param_binding_begin = ~0;
3625 	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3626 	}
3627     break;
3628 
3629   case 132:
3630 
3631 /* Line 1806 of yacc.c  */
3632 #line 1302 "src/src/mesa/program/program_parse.y"
3633     {
3634 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3635 	   (yyval.temp_sym).param_binding_begin = ~0;
3636 	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3637 	}
3638     break;
3639 
3640   case 133:
3641 
3642 /* Line 1806 of yacc.c  */
3643 #line 1308 "src/src/mesa/program/program_parse.y"
3644     {
3645 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3646 	   (yyval.temp_sym).param_binding_begin = ~0;
3647 	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);
3648 	}
3649     break;
3650 
3651   case 134:
3652 
3653 /* Line 1806 of yacc.c  */
3654 #line 1316 "src/src/mesa/program/program_parse.y"
3655     {
3656 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3657 	   (yyval.temp_sym).param_binding_begin = ~0;
3658 	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3659 	}
3660     break;
3661 
3662   case 135:
3663 
3664 /* Line 1806 of yacc.c  */
3665 #line 1322 "src/src/mesa/program/program_parse.y"
3666     {
3667 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3668 	   (yyval.temp_sym).param_binding_begin = ~0;
3669 	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3670 	}
3671     break;
3672 
3673   case 136:
3674 
3675 /* Line 1806 of yacc.c  */
3676 #line 1328 "src/src/mesa/program/program_parse.y"
3677     {
3678 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3679 	   (yyval.temp_sym).param_binding_begin = ~0;
3680 	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);
3681 	}
3682     break;
3683 
3684   case 137:
3685 
3686 /* Line 1806 of yacc.c  */
3687 #line 1336 "src/src/mesa/program/program_parse.y"
3688     {
3689 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3690 	   (yyval.temp_sym).param_binding_begin = ~0;
3691 	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3692 	}
3693     break;
3694 
3695   case 138:
3696 
3697 /* Line 1806 of yacc.c  */
3698 #line 1342 "src/src/mesa/program/program_parse.y"
3699     {
3700 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3701 	   (yyval.temp_sym).param_binding_begin = ~0;
3702 	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3703 	}
3704     break;
3705 
3706   case 139:
3707 
3708 /* Line 1806 of yacc.c  */
3709 #line 1348 "src/src/mesa/program/program_parse.y"
3710     {
3711 	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3712 	   (yyval.temp_sym).param_binding_begin = ~0;
3713 	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_FALSE);
3714 	}
3715     break;
3716 
3717   case 140:
3718 
3719 /* Line 1806 of yacc.c  */
3720 #line 1355 "src/src/mesa/program/program_parse.y"
3721     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); }
3722     break;
3723 
3724   case 141:
3725 
3726 /* Line 1806 of yacc.c  */
3727 #line 1356 "src/src/mesa/program/program_parse.y"
3728     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3729     break;
3730 
3731   case 142:
3732 
3733 /* Line 1806 of yacc.c  */
3734 #line 1359 "src/src/mesa/program/program_parse.y"
3735     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3736     break;
3737 
3738   case 143:
3739 
3740 /* Line 1806 of yacc.c  */
3741 #line 1360 "src/src/mesa/program/program_parse.y"
3742     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3743     break;
3744 
3745   case 144:
3746 
3747 /* Line 1806 of yacc.c  */
3748 #line 1361 "src/src/mesa/program/program_parse.y"
3749     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3750     break;
3751 
3752   case 145:
3753 
3754 /* Line 1806 of yacc.c  */
3755 #line 1362 "src/src/mesa/program/program_parse.y"
3756     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3757     break;
3758 
3759   case 146:
3760 
3761 /* Line 1806 of yacc.c  */
3762 #line 1363 "src/src/mesa/program/program_parse.y"
3763     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3764     break;
3765 
3766   case 147:
3767 
3768 /* Line 1806 of yacc.c  */
3769 #line 1364 "src/src/mesa/program/program_parse.y"
3770     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3771     break;
3772 
3773   case 148:
3774 
3775 /* Line 1806 of yacc.c  */
3776 #line 1365 "src/src/mesa/program/program_parse.y"
3777     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3778     break;
3779 
3780   case 149:
3781 
3782 /* Line 1806 of yacc.c  */
3783 #line 1366 "src/src/mesa/program/program_parse.y"
3784     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3785     break;
3786 
3787   case 150:
3788 
3789 /* Line 1806 of yacc.c  */
3790 #line 1367 "src/src/mesa/program/program_parse.y"
3791     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3792     break;
3793 
3794   case 151:
3795 
3796 /* Line 1806 of yacc.c  */
3797 #line 1368 "src/src/mesa/program/program_parse.y"
3798     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3799     break;
3800 
3801   case 152:
3802 
3803 /* Line 1806 of yacc.c  */
3804 #line 1369 "src/src/mesa/program/program_parse.y"
3805     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3806     break;
3807 
3808   case 153:
3809 
3810 /* Line 1806 of yacc.c  */
3811 #line 1373 "src/src/mesa/program/program_parse.y"
3812     {
3813 	   memset((yyval.state), 0, sizeof((yyval.state)));
3814 	   (yyval.state)[0] = STATE_MATERIAL;
3815 	   (yyval.state)[1] = (yyvsp[(2) - (3)].integer);
3816 	   (yyval.state)[2] = (yyvsp[(3) - (3)].integer);
3817 	}
3818     break;
3819 
3820   case 154:
3821 
3822 /* Line 1806 of yacc.c  */
3823 #line 1382 "src/src/mesa/program/program_parse.y"
3824     {
3825 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3826 	}
3827     break;
3828 
3829   case 155:
3830 
3831 /* Line 1806 of yacc.c  */
3832 #line 1386 "src/src/mesa/program/program_parse.y"
3833     {
3834 	   (yyval.integer) = STATE_EMISSION;
3835 	}
3836     break;
3837 
3838   case 156:
3839 
3840 /* Line 1806 of yacc.c  */
3841 #line 1390 "src/src/mesa/program/program_parse.y"
3842     {
3843 	   (yyval.integer) = STATE_SHININESS;
3844 	}
3845     break;
3846 
3847   case 157:
3848 
3849 /* Line 1806 of yacc.c  */
3850 #line 1396 "src/src/mesa/program/program_parse.y"
3851     {
3852 	   memset((yyval.state), 0, sizeof((yyval.state)));
3853 	   (yyval.state)[0] = STATE_LIGHT;
3854 	   (yyval.state)[1] = (yyvsp[(3) - (5)].integer);
3855 	   (yyval.state)[2] = (yyvsp[(5) - (5)].integer);
3856 	}
3857     break;
3858 
3859   case 158:
3860 
3861 /* Line 1806 of yacc.c  */
3862 #line 1405 "src/src/mesa/program/program_parse.y"
3863     {
3864 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3865 	}
3866     break;
3867 
3868   case 159:
3869 
3870 /* Line 1806 of yacc.c  */
3871 #line 1409 "src/src/mesa/program/program_parse.y"
3872     {
3873 	   (yyval.integer) = STATE_POSITION;
3874 	}
3875     break;
3876 
3877   case 160:
3878 
3879 /* Line 1806 of yacc.c  */
3880 #line 1413 "src/src/mesa/program/program_parse.y"
3881     {
3882 	   if (!state->ctx->Extensions.EXT_point_parameters) {
3883 	      yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
3884 	      YYERROR;
3885 	   }
3886 
3887 	   (yyval.integer) = STATE_ATTENUATION;
3888 	}
3889     break;
3890 
3891   case 161:
3892 
3893 /* Line 1806 of yacc.c  */
3894 #line 1422 "src/src/mesa/program/program_parse.y"
3895     {
3896 	   (yyval.integer) = (yyvsp[(2) - (2)].integer);
3897 	}
3898     break;
3899 
3900   case 162:
3901 
3902 /* Line 1806 of yacc.c  */
3903 #line 1426 "src/src/mesa/program/program_parse.y"
3904     {
3905 	   (yyval.integer) = STATE_HALF_VECTOR;
3906 	}
3907     break;
3908 
3909   case 163:
3910 
3911 /* Line 1806 of yacc.c  */
3912 #line 1432 "src/src/mesa/program/program_parse.y"
3913     {
3914 	   (yyval.integer) = STATE_SPOT_DIRECTION;
3915 	}
3916     break;
3917 
3918   case 164:
3919 
3920 /* Line 1806 of yacc.c  */
3921 #line 1438 "src/src/mesa/program/program_parse.y"
3922     {
3923 	   (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
3924 	   (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
3925 	}
3926     break;
3927 
3928   case 165:
3929 
3930 /* Line 1806 of yacc.c  */
3931 #line 1445 "src/src/mesa/program/program_parse.y"
3932     {
3933 	   memset((yyval.state), 0, sizeof((yyval.state)));
3934 	   (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
3935 	}
3936     break;
3937 
3938   case 166:
3939 
3940 /* Line 1806 of yacc.c  */
3941 #line 1450 "src/src/mesa/program/program_parse.y"
3942     {
3943 	   memset((yyval.state), 0, sizeof((yyval.state)));
3944 	   (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
3945 	   (yyval.state)[1] = (yyvsp[(1) - (2)].integer);
3946 	}
3947     break;
3948 
3949   case 167:
3950 
3951 /* Line 1806 of yacc.c  */
3952 #line 1458 "src/src/mesa/program/program_parse.y"
3953     {
3954 	   memset((yyval.state), 0, sizeof((yyval.state)));
3955 	   (yyval.state)[0] = STATE_LIGHTPROD;
3956 	   (yyval.state)[1] = (yyvsp[(3) - (6)].integer);
3957 	   (yyval.state)[2] = (yyvsp[(5) - (6)].integer);
3958 	   (yyval.state)[3] = (yyvsp[(6) - (6)].integer);
3959 	}
3960     break;
3961 
3962   case 169:
3963 
3964 /* Line 1806 of yacc.c  */
3965 #line 1470 "src/src/mesa/program/program_parse.y"
3966     {
3967 	   memset((yyval.state), 0, sizeof((yyval.state)));
3968 	   (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
3969 	   (yyval.state)[1] = (yyvsp[(2) - (3)].integer);
3970 	}
3971     break;
3972 
3973   case 170:
3974 
3975 /* Line 1806 of yacc.c  */
3976 #line 1478 "src/src/mesa/program/program_parse.y"
3977     {
3978 	   (yyval.integer) = STATE_TEXENV_COLOR;
3979 	}
3980     break;
3981 
3982   case 171:
3983 
3984 /* Line 1806 of yacc.c  */
3985 #line 1484 "src/src/mesa/program/program_parse.y"
3986     {
3987 	   (yyval.integer) = STATE_AMBIENT;
3988 	}
3989     break;
3990 
3991   case 172:
3992 
3993 /* Line 1806 of yacc.c  */
3994 #line 1488 "src/src/mesa/program/program_parse.y"
3995     {
3996 	   (yyval.integer) = STATE_DIFFUSE;
3997 	}
3998     break;
3999 
4000   case 173:
4001 
4002 /* Line 1806 of yacc.c  */
4003 #line 1492 "src/src/mesa/program/program_parse.y"
4004     {
4005 	   (yyval.integer) = STATE_SPECULAR;
4006 	}
4007     break;
4008 
4009   case 174:
4010 
4011 /* Line 1806 of yacc.c  */
4012 #line 1498 "src/src/mesa/program/program_parse.y"
4013     {
4014 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
4015 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
4016 	      YYERROR;
4017 	   }
4018 
4019 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4020 	}
4021     break;
4022 
4023   case 175:
4024 
4025 /* Line 1806 of yacc.c  */
4026 #line 1509 "src/src/mesa/program/program_parse.y"
4027     {
4028 	   memset((yyval.state), 0, sizeof((yyval.state)));
4029 	   (yyval.state)[0] = STATE_TEXGEN;
4030 	   (yyval.state)[1] = (yyvsp[(2) - (4)].integer);
4031 	   (yyval.state)[2] = (yyvsp[(3) - (4)].integer) + (yyvsp[(4) - (4)].integer);
4032 	}
4033     break;
4034 
4035   case 176:
4036 
4037 /* Line 1806 of yacc.c  */
4038 #line 1518 "src/src/mesa/program/program_parse.y"
4039     {
4040 	   (yyval.integer) = STATE_TEXGEN_EYE_S;
4041 	}
4042     break;
4043 
4044   case 177:
4045 
4046 /* Line 1806 of yacc.c  */
4047 #line 1522 "src/src/mesa/program/program_parse.y"
4048     {
4049 	   (yyval.integer) = STATE_TEXGEN_OBJECT_S;
4050 	}
4051     break;
4052 
4053   case 178:
4054 
4055 /* Line 1806 of yacc.c  */
4056 #line 1527 "src/src/mesa/program/program_parse.y"
4057     {
4058 	   (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
4059 	}
4060     break;
4061 
4062   case 179:
4063 
4064 /* Line 1806 of yacc.c  */
4065 #line 1531 "src/src/mesa/program/program_parse.y"
4066     {
4067 	   (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
4068 	}
4069     break;
4070 
4071   case 180:
4072 
4073 /* Line 1806 of yacc.c  */
4074 #line 1535 "src/src/mesa/program/program_parse.y"
4075     {
4076 	   (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
4077 	}
4078     break;
4079 
4080   case 181:
4081 
4082 /* Line 1806 of yacc.c  */
4083 #line 1539 "src/src/mesa/program/program_parse.y"
4084     {
4085 	   (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
4086 	}
4087     break;
4088 
4089   case 182:
4090 
4091 /* Line 1806 of yacc.c  */
4092 #line 1545 "src/src/mesa/program/program_parse.y"
4093     {
4094 	   memset((yyval.state), 0, sizeof((yyval.state)));
4095 	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
4096 	}
4097     break;
4098 
4099   case 183:
4100 
4101 /* Line 1806 of yacc.c  */
4102 #line 1552 "src/src/mesa/program/program_parse.y"
4103     {
4104 	   (yyval.integer) = STATE_FOG_COLOR;
4105 	}
4106     break;
4107 
4108   case 184:
4109 
4110 /* Line 1806 of yacc.c  */
4111 #line 1556 "src/src/mesa/program/program_parse.y"
4112     {
4113 	   (yyval.integer) = STATE_FOG_PARAMS;
4114 	}
4115     break;
4116 
4117   case 185:
4118 
4119 /* Line 1806 of yacc.c  */
4120 #line 1562 "src/src/mesa/program/program_parse.y"
4121     {
4122 	   memset((yyval.state), 0, sizeof((yyval.state)));
4123 	   (yyval.state)[0] = STATE_CLIPPLANE;
4124 	   (yyval.state)[1] = (yyvsp[(3) - (5)].integer);
4125 	}
4126     break;
4127 
4128   case 186:
4129 
4130 /* Line 1806 of yacc.c  */
4131 #line 1570 "src/src/mesa/program/program_parse.y"
4132     {
4133 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
4134 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
4135 	      YYERROR;
4136 	   }
4137 
4138 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4139 	}
4140     break;
4141 
4142   case 187:
4143 
4144 /* Line 1806 of yacc.c  */
4145 #line 1581 "src/src/mesa/program/program_parse.y"
4146     {
4147 	   memset((yyval.state), 0, sizeof((yyval.state)));
4148 	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
4149 	}
4150     break;
4151 
4152   case 188:
4153 
4154 /* Line 1806 of yacc.c  */
4155 #line 1588 "src/src/mesa/program/program_parse.y"
4156     {
4157 	   (yyval.integer) = STATE_POINT_SIZE;
4158 	}
4159     break;
4160 
4161   case 189:
4162 
4163 /* Line 1806 of yacc.c  */
4164 #line 1592 "src/src/mesa/program/program_parse.y"
4165     {
4166 	   (yyval.integer) = STATE_POINT_ATTENUATION;
4167 	}
4168     break;
4169 
4170   case 190:
4171 
4172 /* Line 1806 of yacc.c  */
4173 #line 1598 "src/src/mesa/program/program_parse.y"
4174     {
4175 	   (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
4176 	   (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
4177 	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
4178 	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
4179 	   (yyval.state)[4] = (yyvsp[(1) - (5)].state)[2];
4180 	}
4181     break;
4182 
4183   case 191:
4184 
4185 /* Line 1806 of yacc.c  */
4186 #line 1608 "src/src/mesa/program/program_parse.y"
4187     {
4188 	   (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
4189 	   (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
4190 	   (yyval.state)[2] = (yyvsp[(2) - (2)].state)[2];
4191 	   (yyval.state)[3] = (yyvsp[(2) - (2)].state)[3];
4192 	   (yyval.state)[4] = (yyvsp[(1) - (2)].state)[2];
4193 	}
4194     break;
4195 
4196   case 192:
4197 
4198 /* Line 1806 of yacc.c  */
4199 #line 1618 "src/src/mesa/program/program_parse.y"
4200     {
4201 	   (yyval.state)[2] = 0;
4202 	   (yyval.state)[3] = 3;
4203 	}
4204     break;
4205 
4206   case 193:
4207 
4208 /* Line 1806 of yacc.c  */
4209 #line 1623 "src/src/mesa/program/program_parse.y"
4210     {
4211 	   /* It seems logical that the matrix row range specifier would have
4212 	    * to specify a range or more than one row (i.e., $5 > $3).
4213 	    * However, the ARB_vertex_program spec says "a program will fail
4214 	    * to load if <a> is greater than <b>."  This means that $3 == $5
4215 	    * is valid.
4216 	    */
4217 	   if ((yyvsp[(3) - (6)].integer) > (yyvsp[(5) - (6)].integer)) {
4218 	      yyerror(& (yylsp[(3) - (6)]), state, "invalid matrix row range");
4219 	      YYERROR;
4220 	   }
4221 
4222 	   (yyval.state)[2] = (yyvsp[(3) - (6)].integer);
4223 	   (yyval.state)[3] = (yyvsp[(5) - (6)].integer);
4224 	}
4225     break;
4226 
4227   case 194:
4228 
4229 /* Line 1806 of yacc.c  */
4230 #line 1641 "src/src/mesa/program/program_parse.y"
4231     {
4232 	   (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
4233 	   (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
4234 	   (yyval.state)[2] = (yyvsp[(3) - (3)].integer);
4235 	}
4236     break;
4237 
4238   case 195:
4239 
4240 /* Line 1806 of yacc.c  */
4241 #line 1649 "src/src/mesa/program/program_parse.y"
4242     {
4243 	   (yyval.integer) = 0;
4244 	}
4245     break;
4246 
4247   case 196:
4248 
4249 /* Line 1806 of yacc.c  */
4250 #line 1653 "src/src/mesa/program/program_parse.y"
4251     {
4252 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4253 	}
4254     break;
4255 
4256   case 197:
4257 
4258 /* Line 1806 of yacc.c  */
4259 #line 1659 "src/src/mesa/program/program_parse.y"
4260     {
4261 	   (yyval.integer) = STATE_MATRIX_INVERSE;
4262 	}
4263     break;
4264 
4265   case 198:
4266 
4267 /* Line 1806 of yacc.c  */
4268 #line 1663 "src/src/mesa/program/program_parse.y"
4269     {
4270 	   (yyval.integer) = STATE_MATRIX_TRANSPOSE;
4271 	}
4272     break;
4273 
4274   case 199:
4275 
4276 /* Line 1806 of yacc.c  */
4277 #line 1667 "src/src/mesa/program/program_parse.y"
4278     {
4279 	   (yyval.integer) = STATE_MATRIX_INVTRANS;
4280 	}
4281     break;
4282 
4283   case 200:
4284 
4285 /* Line 1806 of yacc.c  */
4286 #line 1673 "src/src/mesa/program/program_parse.y"
4287     {
4288 	   if ((yyvsp[(1) - (1)].integer) > 3) {
4289 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
4290 	      YYERROR;
4291 	   }
4292 
4293 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4294 	}
4295     break;
4296 
4297   case 201:
4298 
4299 /* Line 1806 of yacc.c  */
4300 #line 1684 "src/src/mesa/program/program_parse.y"
4301     {
4302 	   (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
4303 	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
4304 	}
4305     break;
4306 
4307   case 202:
4308 
4309 /* Line 1806 of yacc.c  */
4310 #line 1689 "src/src/mesa/program/program_parse.y"
4311     {
4312 	   (yyval.state)[0] = STATE_PROJECTION_MATRIX;
4313 	   (yyval.state)[1] = 0;
4314 	}
4315     break;
4316 
4317   case 203:
4318 
4319 /* Line 1806 of yacc.c  */
4320 #line 1694 "src/src/mesa/program/program_parse.y"
4321     {
4322 	   (yyval.state)[0] = STATE_MVP_MATRIX;
4323 	   (yyval.state)[1] = 0;
4324 	}
4325     break;
4326 
4327   case 204:
4328 
4329 /* Line 1806 of yacc.c  */
4330 #line 1699 "src/src/mesa/program/program_parse.y"
4331     {
4332 	   (yyval.state)[0] = STATE_TEXTURE_MATRIX;
4333 	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
4334 	}
4335     break;
4336 
4337   case 205:
4338 
4339 /* Line 1806 of yacc.c  */
4340 #line 1704 "src/src/mesa/program/program_parse.y"
4341     {
4342 	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
4343 	   YYERROR;
4344 	}
4345     break;
4346 
4347   case 206:
4348 
4349 /* Line 1806 of yacc.c  */
4350 #line 1709 "src/src/mesa/program/program_parse.y"
4351     {
4352 	   (yyval.state)[0] = STATE_PROGRAM_MATRIX;
4353 	   (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
4354 	}
4355     break;
4356 
4357   case 207:
4358 
4359 /* Line 1806 of yacc.c  */
4360 #line 1716 "src/src/mesa/program/program_parse.y"
4361     {
4362 	   (yyval.integer) = 0;
4363 	}
4364     break;
4365 
4366   case 208:
4367 
4368 /* Line 1806 of yacc.c  */
4369 #line 1720 "src/src/mesa/program/program_parse.y"
4370     {
4371 	   (yyval.integer) = (yyvsp[(2) - (3)].integer);
4372 	}
4373     break;
4374 
4375   case 209:
4376 
4377 /* Line 1806 of yacc.c  */
4378 #line 1725 "src/src/mesa/program/program_parse.y"
4379     {
4380 	   /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
4381 	    * zero is valid.
4382 	    */
4383 	   if ((yyvsp[(1) - (1)].integer) != 0) {
4384 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid modelview matrix index");
4385 	      YYERROR;
4386 	   }
4387 
4388 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4389 	}
4390     break;
4391 
4392   case 210:
4393 
4394 /* Line 1806 of yacc.c  */
4395 #line 1738 "src/src/mesa/program/program_parse.y"
4396     {
4397 	   /* Since GL_ARB_matrix_palette isn't supported, just let any value
4398 	    * through here.  The error will be generated later.
4399 	    */
4400 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4401 	}
4402     break;
4403 
4404   case 211:
4405 
4406 /* Line 1806 of yacc.c  */
4407 #line 1746 "src/src/mesa/program/program_parse.y"
4408     {
4409 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
4410 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
4411 	      YYERROR;
4412 	   }
4413 
4414 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4415 	}
4416     break;
4417 
4418   case 212:
4419 
4420 /* Line 1806 of yacc.c  */
4421 #line 1757 "src/src/mesa/program/program_parse.y"
4422     {
4423 	   memset((yyval.state), 0, sizeof((yyval.state)));
4424 	   (yyval.state)[0] = STATE_DEPTH_RANGE;
4425 	}
4426     break;
4427 
4428   case 217:
4429 
4430 /* Line 1806 of yacc.c  */
4431 #line 1769 "src/src/mesa/program/program_parse.y"
4432     {
4433 	   memset((yyval.state), 0, sizeof((yyval.state)));
4434 	   (yyval.state)[0] = state->state_param_enum;
4435 	   (yyval.state)[1] = STATE_ENV;
4436 	   (yyval.state)[2] = (yyvsp[(4) - (5)].state)[0];
4437 	   (yyval.state)[3] = (yyvsp[(4) - (5)].state)[1];
4438 	}
4439     break;
4440 
4441   case 218:
4442 
4443 /* Line 1806 of yacc.c  */
4444 #line 1779 "src/src/mesa/program/program_parse.y"
4445     {
4446 	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
4447 	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
4448 	}
4449     break;
4450 
4451   case 219:
4452 
4453 /* Line 1806 of yacc.c  */
4454 #line 1784 "src/src/mesa/program/program_parse.y"
4455     {
4456 	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
4457 	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
4458 	}
4459     break;
4460 
4461   case 220:
4462 
4463 /* Line 1806 of yacc.c  */
4464 #line 1791 "src/src/mesa/program/program_parse.y"
4465     {
4466 	   memset((yyval.state), 0, sizeof((yyval.state)));
4467 	   (yyval.state)[0] = state->state_param_enum;
4468 	   (yyval.state)[1] = STATE_ENV;
4469 	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
4470 	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
4471 	}
4472     break;
4473 
4474   case 221:
4475 
4476 /* Line 1806 of yacc.c  */
4477 #line 1801 "src/src/mesa/program/program_parse.y"
4478     {
4479 	   memset((yyval.state), 0, sizeof((yyval.state)));
4480 	   (yyval.state)[0] = state->state_param_enum;
4481 	   (yyval.state)[1] = STATE_LOCAL;
4482 	   (yyval.state)[2] = (yyvsp[(4) - (5)].state)[0];
4483 	   (yyval.state)[3] = (yyvsp[(4) - (5)].state)[1];
4484 	}
4485     break;
4486 
4487   case 222:
4488 
4489 /* Line 1806 of yacc.c  */
4490 #line 1810 "src/src/mesa/program/program_parse.y"
4491     {
4492 	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
4493 	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
4494 	}
4495     break;
4496 
4497   case 223:
4498 
4499 /* Line 1806 of yacc.c  */
4500 #line 1815 "src/src/mesa/program/program_parse.y"
4501     {
4502 	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
4503 	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
4504 	}
4505     break;
4506 
4507   case 224:
4508 
4509 /* Line 1806 of yacc.c  */
4510 #line 1822 "src/src/mesa/program/program_parse.y"
4511     {
4512 	   memset((yyval.state), 0, sizeof((yyval.state)));
4513 	   (yyval.state)[0] = state->state_param_enum;
4514 	   (yyval.state)[1] = STATE_LOCAL;
4515 	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
4516 	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
4517 	}
4518     break;
4519 
4520   case 225:
4521 
4522 /* Line 1806 of yacc.c  */
4523 #line 1832 "src/src/mesa/program/program_parse.y"
4524     {
4525 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
4526 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
4527 	      YYERROR;
4528 	   }
4529 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4530 	}
4531     break;
4532 
4533   case 226:
4534 
4535 /* Line 1806 of yacc.c  */
4536 #line 1842 "src/src/mesa/program/program_parse.y"
4537     {
4538 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
4539 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
4540 	      YYERROR;
4541 	   }
4542 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4543 	}
4544     break;
4545 
4546   case 231:
4547 
4548 /* Line 1806 of yacc.c  */
4549 #line 1857 "src/src/mesa/program/program_parse.y"
4550     {
4551 	   (yyval.vector).count = 4;
4552 	   (yyval.vector).data[0].f = (yyvsp[(1) - (1)].real);
4553 	   (yyval.vector).data[1].f = (yyvsp[(1) - (1)].real);
4554 	   (yyval.vector).data[2].f = (yyvsp[(1) - (1)].real);
4555 	   (yyval.vector).data[3].f = (yyvsp[(1) - (1)].real);
4556 	}
4557     break;
4558 
4559   case 232:
4560 
4561 /* Line 1806 of yacc.c  */
4562 #line 1867 "src/src/mesa/program/program_parse.y"
4563     {
4564 	   (yyval.vector).count = 1;
4565 	   (yyval.vector).data[0].f = (yyvsp[(1) - (1)].real);
4566 	   (yyval.vector).data[1].f = (yyvsp[(1) - (1)].real);
4567 	   (yyval.vector).data[2].f = (yyvsp[(1) - (1)].real);
4568 	   (yyval.vector).data[3].f = (yyvsp[(1) - (1)].real);
4569 	}
4570     break;
4571 
4572   case 233:
4573 
4574 /* Line 1806 of yacc.c  */
4575 #line 1875 "src/src/mesa/program/program_parse.y"
4576     {
4577 	   (yyval.vector).count = 1;
4578 	   (yyval.vector).data[0].f = (float) (yyvsp[(1) - (1)].integer);
4579 	   (yyval.vector).data[1].f = (float) (yyvsp[(1) - (1)].integer);
4580 	   (yyval.vector).data[2].f = (float) (yyvsp[(1) - (1)].integer);
4581 	   (yyval.vector).data[3].f = (float) (yyvsp[(1) - (1)].integer);
4582 	}
4583     break;
4584 
4585   case 234:
4586 
4587 /* Line 1806 of yacc.c  */
4588 #line 1885 "src/src/mesa/program/program_parse.y"
4589     {
4590 	   (yyval.vector).count = 4;
4591 	   (yyval.vector).data[0].f = (yyvsp[(2) - (3)].real);
4592 	   (yyval.vector).data[1].f = 0.0f;
4593 	   (yyval.vector).data[2].f = 0.0f;
4594 	   (yyval.vector).data[3].f = 1.0f;
4595 	}
4596     break;
4597 
4598   case 235:
4599 
4600 /* Line 1806 of yacc.c  */
4601 #line 1893 "src/src/mesa/program/program_parse.y"
4602     {
4603 	   (yyval.vector).count = 4;
4604 	   (yyval.vector).data[0].f = (yyvsp[(2) - (5)].real);
4605 	   (yyval.vector).data[1].f = (yyvsp[(4) - (5)].real);
4606 	   (yyval.vector).data[2].f = 0.0f;
4607 	   (yyval.vector).data[3].f = 1.0f;
4608 	}
4609     break;
4610 
4611   case 236:
4612 
4613 /* Line 1806 of yacc.c  */
4614 #line 1902 "src/src/mesa/program/program_parse.y"
4615     {
4616 	   (yyval.vector).count = 4;
4617 	   (yyval.vector).data[0].f = (yyvsp[(2) - (7)].real);
4618 	   (yyval.vector).data[1].f = (yyvsp[(4) - (7)].real);
4619 	   (yyval.vector).data[2].f = (yyvsp[(6) - (7)].real);
4620 	   (yyval.vector).data[3].f = 1.0f;
4621 	}
4622     break;
4623 
4624   case 237:
4625 
4626 /* Line 1806 of yacc.c  */
4627 #line 1911 "src/src/mesa/program/program_parse.y"
4628     {
4629 	   (yyval.vector).count = 4;
4630 	   (yyval.vector).data[0].f = (yyvsp[(2) - (9)].real);
4631 	   (yyval.vector).data[1].f = (yyvsp[(4) - (9)].real);
4632 	   (yyval.vector).data[2].f = (yyvsp[(6) - (9)].real);
4633 	   (yyval.vector).data[3].f = (yyvsp[(8) - (9)].real);
4634 	}
4635     break;
4636 
4637   case 238:
4638 
4639 /* Line 1806 of yacc.c  */
4640 #line 1921 "src/src/mesa/program/program_parse.y"
4641     {
4642 	   (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
4643 	}
4644     break;
4645 
4646   case 239:
4647 
4648 /* Line 1806 of yacc.c  */
4649 #line 1925 "src/src/mesa/program/program_parse.y"
4650     {
4651 	   (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
4652 	}
4653     break;
4654 
4655   case 240:
4656 
4657 /* Line 1806 of yacc.c  */
4658 #line 1930 "src/src/mesa/program/program_parse.y"
4659     { (yyval.negate) = FALSE; }
4660     break;
4661 
4662   case 241:
4663 
4664 /* Line 1806 of yacc.c  */
4665 #line 1931 "src/src/mesa/program/program_parse.y"
4666     { (yyval.negate) = TRUE;  }
4667     break;
4668 
4669   case 242:
4670 
4671 /* Line 1806 of yacc.c  */
4672 #line 1932 "src/src/mesa/program/program_parse.y"
4673     { (yyval.negate) = FALSE; }
4674     break;
4675 
4676   case 243:
4677 
4678 /* Line 1806 of yacc.c  */
4679 #line 1935 "src/src/mesa/program/program_parse.y"
4680     { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
4681     break;
4682 
4683   case 245:
4684 
4685 /* Line 1806 of yacc.c  */
4686 #line 1939 "src/src/mesa/program/program_parse.y"
4687     {
4688 	   /* NV_fragment_program_option defines the size qualifiers in a
4689 	    * fairly broken way.  "SHORT" or "LONG" can optionally be used
4690 	    * before TEMP or OUTPUT.  However, neither is a reserved word!
4691 	    * This means that we have to parse it as an identifier, then check
4692 	    * to make sure it's one of the valid values.  *sigh*
4693 	    *
4694 	    * In addition, the grammar in the extension spec does *not* allow
4695 	    * the size specifier to be optional, but all known implementations
4696 	    * do.
4697 	    */
4698 	   if (!state->option.NV_fragment) {
4699 	      yyerror(& (yylsp[(1) - (1)]), state, "unexpected IDENTIFIER");
4700 	      YYERROR;
4701 	   }
4702 
4703 	   if (strcmp("SHORT", (yyvsp[(1) - (1)].string)) == 0) {
4704 	   } else if (strcmp("LONG", (yyvsp[(1) - (1)].string)) == 0) {
4705 	   } else {
4706 	      char *const err_str =
4707 		 make_error_string("invalid storage size specifier \"%s\"",
4708 				   (yyvsp[(1) - (1)].string));
4709 
4710 	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
4711 		      ? err_str : "invalid storage size specifier");
4712 
4713 	      if (err_str != NULL) {
4714 		 free(err_str);
4715 	      }
4716 
4717 	      YYERROR;
4718 	   }
4719 	}
4720     break;
4721 
4722   case 246:
4723 
4724 /* Line 1806 of yacc.c  */
4725 #line 1973 "src/src/mesa/program/program_parse.y"
4726     {
4727 	}
4728     break;
4729 
4730   case 247:
4731 
4732 /* Line 1806 of yacc.c  */
4733 #line 1977 "src/src/mesa/program/program_parse.y"
4734     { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
4735     break;
4736 
4737   case 249:
4738 
4739 /* Line 1806 of yacc.c  */
4740 #line 1981 "src/src/mesa/program/program_parse.y"
4741     {
4742 	   if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
4743 	      free((yyvsp[(3) - (3)].string));
4744 	      YYERROR;
4745 	   }
4746 	}
4747     break;
4748 
4749   case 250:
4750 
4751 /* Line 1806 of yacc.c  */
4752 #line 1988 "src/src/mesa/program/program_parse.y"
4753     {
4754 	   if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
4755 	      free((yyvsp[(1) - (1)].string));
4756 	      YYERROR;
4757 	   }
4758 	}
4759     break;
4760 
4761   case 251:
4762 
4763 /* Line 1806 of yacc.c  */
4764 #line 1997 "src/src/mesa/program/program_parse.y"
4765     {
4766 	   struct asm_symbol *const s =
4767 	      declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
4768 
4769 	   if (s == NULL) {
4770 	      free((yyvsp[(3) - (5)].string));
4771 	      YYERROR;
4772 	   } else {
4773 	      s->output_binding = (yyvsp[(5) - (5)].result);
4774 	   }
4775 	}
4776     break;
4777 
4778   case 252:
4779 
4780 /* Line 1806 of yacc.c  */
4781 #line 2011 "src/src/mesa/program/program_parse.y"
4782     {
4783 	   if (state->mode == ARB_vertex) {
4784 	      (yyval.result) = VERT_RESULT_HPOS;
4785 	   } else {
4786 	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4787 	      YYERROR;
4788 	   }
4789 	}
4790     break;
4791 
4792   case 253:
4793 
4794 /* Line 1806 of yacc.c  */
4795 #line 2020 "src/src/mesa/program/program_parse.y"
4796     {
4797 	   if (state->mode == ARB_vertex) {
4798 	      (yyval.result) = VERT_RESULT_FOGC;
4799 	   } else {
4800 	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4801 	      YYERROR;
4802 	   }
4803 	}
4804     break;
4805 
4806   case 254:
4807 
4808 /* Line 1806 of yacc.c  */
4809 #line 2029 "src/src/mesa/program/program_parse.y"
4810     {
4811 	   (yyval.result) = (yyvsp[(2) - (2)].result);
4812 	}
4813     break;
4814 
4815   case 255:
4816 
4817 /* Line 1806 of yacc.c  */
4818 #line 2033 "src/src/mesa/program/program_parse.y"
4819     {
4820 	   if (state->mode == ARB_vertex) {
4821 	      (yyval.result) = VERT_RESULT_PSIZ;
4822 	   } else {
4823 	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4824 	      YYERROR;
4825 	   }
4826 	}
4827     break;
4828 
4829   case 256:
4830 
4831 /* Line 1806 of yacc.c  */
4832 #line 2042 "src/src/mesa/program/program_parse.y"
4833     {
4834 	   if (state->mode == ARB_vertex) {
4835 	      (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
4836 	   } else {
4837 	      yyerror(& (yylsp[(2) - (3)]), state, "invalid program result name");
4838 	      YYERROR;
4839 	   }
4840 	}
4841     break;
4842 
4843   case 257:
4844 
4845 /* Line 1806 of yacc.c  */
4846 #line 2051 "src/src/mesa/program/program_parse.y"
4847     {
4848 	   if (state->mode == ARB_fragment) {
4849 	      (yyval.result) = FRAG_RESULT_DEPTH;
4850 	   } else {
4851 	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4852 	      YYERROR;
4853 	   }
4854 	}
4855     break;
4856 
4857   case 258:
4858 
4859 /* Line 1806 of yacc.c  */
4860 #line 2062 "src/src/mesa/program/program_parse.y"
4861     {
4862 	   (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
4863 	}
4864     break;
4865 
4866   case 259:
4867 
4868 /* Line 1806 of yacc.c  */
4869 #line 2068 "src/src/mesa/program/program_parse.y"
4870     {
4871 	   if (state->mode == ARB_vertex) {
4872 	      (yyval.integer) = VERT_RESULT_COL0;
4873 	   } else {
4874 	      if (state->option.DrawBuffers)
4875 		 (yyval.integer) = FRAG_RESULT_DATA0;
4876 	      else
4877 		 (yyval.integer) = FRAG_RESULT_COLOR;
4878 	   }
4879 	}
4880     break;
4881 
4882   case 260:
4883 
4884 /* Line 1806 of yacc.c  */
4885 #line 2079 "src/src/mesa/program/program_parse.y"
4886     {
4887 	   if (state->mode == ARB_vertex) {
4888 	      yyerror(& (yylsp[(1) - (3)]), state, "invalid program result name");
4889 	      YYERROR;
4890 	   } else {
4891 	      if (!state->option.DrawBuffers) {
4892 		 /* From the ARB_draw_buffers spec (same text exists
4893 		  * for ATI_draw_buffers):
4894 		  *
4895 		  *     If this option is not specified, a fragment
4896 		  *     program that attempts to bind
4897 		  *     "result.color[n]" will fail to load, and only
4898 		  *     "result.color" will be allowed.
4899 		  */
4900 		 yyerror(& (yylsp[(1) - (3)]), state,
4901 			 "result.color[] used without "
4902 			 "`OPTION ARB_draw_buffers' or "
4903 			 "`OPTION ATI_draw_buffers'");
4904 		 YYERROR;
4905 	      } else if ((yyvsp[(2) - (3)].integer) >= state->MaxDrawBuffers) {
4906 		 yyerror(& (yylsp[(1) - (3)]), state,
4907 			 "result.color[] exceeds MAX_DRAW_BUFFERS_ARB");
4908 		 YYERROR;
4909 	      }
4910 	      (yyval.integer) = FRAG_RESULT_DATA0 + (yyvsp[(2) - (3)].integer);
4911 	   }
4912 	}
4913     break;
4914 
4915   case 261:
4916 
4917 /* Line 1806 of yacc.c  */
4918 #line 2107 "src/src/mesa/program/program_parse.y"
4919     {
4920 	   if (state->mode == ARB_vertex) {
4921 	      (yyval.integer) = VERT_RESULT_COL0;
4922 	   } else {
4923 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4924 	      YYERROR;
4925 	   }
4926 	}
4927     break;
4928 
4929   case 262:
4930 
4931 /* Line 1806 of yacc.c  */
4932 #line 2116 "src/src/mesa/program/program_parse.y"
4933     {
4934 	   if (state->mode == ARB_vertex) {
4935 	      (yyval.integer) = VERT_RESULT_BFC0;
4936 	   } else {
4937 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4938 	      YYERROR;
4939 	   }
4940 	}
4941     break;
4942 
4943   case 263:
4944 
4945 /* Line 1806 of yacc.c  */
4946 #line 2127 "src/src/mesa/program/program_parse.y"
4947     {
4948 	   (yyval.integer) = 0;
4949 	}
4950     break;
4951 
4952   case 264:
4953 
4954 /* Line 1806 of yacc.c  */
4955 #line 2131 "src/src/mesa/program/program_parse.y"
4956     {
4957 	   if (state->mode == ARB_vertex) {
4958 	      (yyval.integer) = 0;
4959 	   } else {
4960 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4961 	      YYERROR;
4962 	   }
4963 	}
4964     break;
4965 
4966   case 265:
4967 
4968 /* Line 1806 of yacc.c  */
4969 #line 2140 "src/src/mesa/program/program_parse.y"
4970     {
4971 	   if (state->mode == ARB_vertex) {
4972 	      (yyval.integer) = 1;
4973 	   } else {
4974 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4975 	      YYERROR;
4976 	   }
4977 	}
4978     break;
4979 
4980   case 266:
4981 
4982 /* Line 1806 of yacc.c  */
4983 #line 2150 "src/src/mesa/program/program_parse.y"
4984     { (yyval.integer) = 0; }
4985     break;
4986 
4987   case 267:
4988 
4989 /* Line 1806 of yacc.c  */
4990 #line 2151 "src/src/mesa/program/program_parse.y"
4991     { (yyval.integer) = 0; }
4992     break;
4993 
4994   case 268:
4995 
4996 /* Line 1806 of yacc.c  */
4997 #line 2152 "src/src/mesa/program/program_parse.y"
4998     { (yyval.integer) = 1; }
4999     break;
5000 
5001   case 269:
5002 
5003 /* Line 1806 of yacc.c  */
5004 #line 2155 "src/src/mesa/program/program_parse.y"
5005     { (yyval.integer) = 0; }
5006     break;
5007 
5008   case 270:
5009 
5010 /* Line 1806 of yacc.c  */
5011 #line 2156 "src/src/mesa/program/program_parse.y"
5012     { (yyval.integer) = 0; }
5013     break;
5014 
5015   case 271:
5016 
5017 /* Line 1806 of yacc.c  */
5018 #line 2157 "src/src/mesa/program/program_parse.y"
5019     { (yyval.integer) = 1; }
5020     break;
5021 
5022   case 272:
5023 
5024 /* Line 1806 of yacc.c  */
5025 #line 2160 "src/src/mesa/program/program_parse.y"
5026     { (yyval.integer) = 0; }
5027     break;
5028 
5029   case 273:
5030 
5031 /* Line 1806 of yacc.c  */
5032 #line 2161 "src/src/mesa/program/program_parse.y"
5033     { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
5034     break;
5035 
5036   case 274:
5037 
5038 /* Line 1806 of yacc.c  */
5039 #line 2164 "src/src/mesa/program/program_parse.y"
5040     { (yyval.integer) = 0; }
5041     break;
5042 
5043   case 275:
5044 
5045 /* Line 1806 of yacc.c  */
5046 #line 2165 "src/src/mesa/program/program_parse.y"
5047     { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
5048     break;
5049 
5050   case 276:
5051 
5052 /* Line 1806 of yacc.c  */
5053 #line 2168 "src/src/mesa/program/program_parse.y"
5054     { (yyval.integer) = 0; }
5055     break;
5056 
5057   case 277:
5058 
5059 /* Line 1806 of yacc.c  */
5060 #line 2169 "src/src/mesa/program/program_parse.y"
5061     { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
5062     break;
5063 
5064   case 278:
5065 
5066 /* Line 1806 of yacc.c  */
5067 #line 2173 "src/src/mesa/program/program_parse.y"
5068     {
5069 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
5070 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
5071 	      YYERROR;
5072 	   }
5073 
5074 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
5075 	}
5076     break;
5077 
5078   case 279:
5079 
5080 /* Line 1806 of yacc.c  */
5081 #line 2184 "src/src/mesa/program/program_parse.y"
5082     {
5083 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
5084 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
5085 	      YYERROR;
5086 	   }
5087 
5088 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
5089 	}
5090     break;
5091 
5092   case 280:
5093 
5094 /* Line 1806 of yacc.c  */
5095 #line 2195 "src/src/mesa/program/program_parse.y"
5096     {
5097 	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
5098 	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
5099 	      YYERROR;
5100 	   }
5101 
5102 	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
5103 	}
5104     break;
5105 
5106   case 281:
5107 
5108 /* Line 1806 of yacc.c  */
5109 #line 2206 "src/src/mesa/program/program_parse.y"
5110     {
5111 	   struct asm_symbol *exist = (struct asm_symbol *)
5112 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
5113 	   struct asm_symbol *target = (struct asm_symbol *)
5114 	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(4) - (4)].string));
5115 
5116 	   free((yyvsp[(4) - (4)].string));
5117 
5118 	   if (exist != NULL) {
5119 	      char m[1000];
5120 	      _mesa_snprintf(m, sizeof(m), "redeclared identifier: %s", (yyvsp[(2) - (4)].string));
5121 	      free((yyvsp[(2) - (4)].string));
5122 	      yyerror(& (yylsp[(2) - (4)]), state, m);
5123 	      YYERROR;
5124 	   } else if (target == NULL) {
5125 	      free((yyvsp[(2) - (4)].string));
5126 	      yyerror(& (yylsp[(4) - (4)]), state,
5127 		      "undefined variable binding in ALIAS statement");
5128 	      YYERROR;
5129 	   } else {
5130 	      _mesa_symbol_table_add_symbol(state->st, 0, (yyvsp[(2) - (4)].string), target);
5131 	   }
5132 	}
5133     break;
5134 
5135 
5136 
5137 /* Line 1806 of yacc.c  */
5138 #line 5139 "src/chromium_gensrc/mesa/program/program_parse.tab.c"
5139       default: break;
5140     }
5141   /* User semantic actions sometimes alter yychar, and that requires
5142      that yytoken be updated with the new translation.  We take the
5143      approach of translating immediately before every use of yytoken.
5144      One alternative is translating here after every semantic action,
5145      but that translation would be missed if the semantic action invokes
5146      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
5147      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
5148      incorrect destructor might then be invoked immediately.  In the
5149      case of YYERROR or YYBACKUP, subsequent parser actions might lead
5150      to an incorrect destructor call or verbose syntax error message
5151      before the lookahead is translated.  */
5152   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
5153 
5154   YYPOPSTACK (yylen);
5155   yylen = 0;
5156   YY_STACK_PRINT (yyss, yyssp);
5157 
5158   *++yyvsp = yyval;
5159   *++yylsp = yyloc;
5160 
5161   /* Now `shift' the result of the reduction.  Determine what state
5162      that goes to, based on the state we popped back to and the rule
5163      number reduced by.  */
5164 
5165   yyn = yyr1[yyn];
5166 
5167   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5168   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
5169     yystate = yytable[yystate];
5170   else
5171     yystate = yydefgoto[yyn - YYNTOKENS];
5172 
5173   goto yynewstate;
5174 
5175 
5176 /*------------------------------------.
5177 | yyerrlab -- here on detecting error |
5178 `------------------------------------*/
5179 yyerrlab:
5180   /* Make sure we have latest lookahead translation.  See comments at
5181      user semantic actions for why this is necessary.  */
5182   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
5183 
5184   /* If not already recovering from an error, report this error.  */
5185   if (!yyerrstatus)
5186     {
5187       ++yynerrs;
5188 #if ! YYERROR_VERBOSE
5189       yyerror (&yylloc, state, YY_("syntax error"));
5190 #else
5191 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
5192                                         yyssp, yytoken)
5193       {
5194         char const *yymsgp = YY_("syntax error");
5195         int yysyntax_error_status;
5196         yysyntax_error_status = YYSYNTAX_ERROR;
5197         if (yysyntax_error_status == 0)
5198           yymsgp = yymsg;
5199         else if (yysyntax_error_status == 1)
5200           {
5201             if (yymsg != yymsgbuf)
5202               YYSTACK_FREE (yymsg);
5203             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
5204             if (!yymsg)
5205               {
5206                 yymsg = yymsgbuf;
5207                 yymsg_alloc = sizeof yymsgbuf;
5208                 yysyntax_error_status = 2;
5209               }
5210             else
5211               {
5212                 yysyntax_error_status = YYSYNTAX_ERROR;
5213                 yymsgp = yymsg;
5214               }
5215           }
5216         yyerror (&yylloc, state, yymsgp);
5217         if (yysyntax_error_status == 2)
5218           goto yyexhaustedlab;
5219       }
5220 # undef YYSYNTAX_ERROR
5221 #endif
5222     }
5223 
5224   yyerror_range[1] = yylloc;
5225 
5226   if (yyerrstatus == 3)
5227     {
5228       /* If just tried and failed to reuse lookahead token after an
5229 	 error, discard it.  */
5230 
5231       if (yychar <= YYEOF)
5232 	{
5233 	  /* Return failure if at end of input.  */
5234 	  if (yychar == YYEOF)
5235 	    YYABORT;
5236 	}
5237       else
5238 	{
5239 	  yydestruct ("Error: discarding",
5240 		      yytoken, &yylval, &yylloc, state);
5241 	  yychar = YYEMPTY;
5242 	}
5243     }
5244 
5245   /* Else will try to reuse lookahead token after shifting the error
5246      token.  */
5247   goto yyerrlab1;
5248 
5249 
5250 /*---------------------------------------------------.
5251 | yyerrorlab -- error raised explicitly by YYERROR.  |
5252 `---------------------------------------------------*/
5253 yyerrorlab:
5254 
5255   /* Pacify compilers like GCC when the user code never invokes
5256      YYERROR and the label yyerrorlab therefore never appears in user
5257      code.  */
5258   if (/*CONSTCOND*/ 0)
5259      goto yyerrorlab;
5260 
5261   yyerror_range[1] = yylsp[1-yylen];
5262   /* Do not reclaim the symbols of the rule which action triggered
5263      this YYERROR.  */
5264   YYPOPSTACK (yylen);
5265   yylen = 0;
5266   YY_STACK_PRINT (yyss, yyssp);
5267   yystate = *yyssp;
5268   goto yyerrlab1;
5269 
5270 
5271 /*-------------------------------------------------------------.
5272 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
5273 `-------------------------------------------------------------*/
5274 yyerrlab1:
5275   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
5276 
5277   for (;;)
5278     {
5279       yyn = yypact[yystate];
5280       if (!yypact_value_is_default (yyn))
5281 	{
5282 	  yyn += YYTERROR;
5283 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5284 	    {
5285 	      yyn = yytable[yyn];
5286 	      if (0 < yyn)
5287 		break;
5288 	    }
5289 	}
5290 
5291       /* Pop the current state because it cannot handle the error token.  */
5292       if (yyssp == yyss)
5293 	YYABORT;
5294 
5295       yyerror_range[1] = *yylsp;
5296       yydestruct ("Error: popping",
5297 		  yystos[yystate], yyvsp, yylsp, state);
5298       YYPOPSTACK (1);
5299       yystate = *yyssp;
5300       YY_STACK_PRINT (yyss, yyssp);
5301     }
5302 
5303   *++yyvsp = yylval;
5304 
5305   yyerror_range[2] = yylloc;
5306   /* Using YYLLOC is tempting, but would change the location of
5307      the lookahead.  YYLOC is available though.  */
5308   YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
5309   *++yylsp = yyloc;
5310 
5311   /* Shift the error token.  */
5312   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5313 
5314   yystate = yyn;
5315   goto yynewstate;
5316 
5317 
5318 /*-------------------------------------.
5319 | yyacceptlab -- YYACCEPT comes here.  |
5320 `-------------------------------------*/
5321 yyacceptlab:
5322   yyresult = 0;
5323   goto yyreturn;
5324 
5325 /*-----------------------------------.
5326 | yyabortlab -- YYABORT comes here.  |
5327 `-----------------------------------*/
5328 yyabortlab:
5329   yyresult = 1;
5330   goto yyreturn;
5331 
5332 #if !defined(yyoverflow) || YYERROR_VERBOSE
5333 /*-------------------------------------------------.
5334 | yyexhaustedlab -- memory exhaustion comes here.  |
5335 `-------------------------------------------------*/
5336 yyexhaustedlab:
5337   yyerror (&yylloc, state, YY_("memory exhausted"));
5338   yyresult = 2;
5339   /* Fall through.  */
5340 #endif
5341 
5342 yyreturn:
5343   if (yychar != YYEMPTY)
5344     {
5345       /* Make sure we have latest lookahead translation.  See comments at
5346          user semantic actions for why this is necessary.  */
5347       yytoken = YYTRANSLATE (yychar);
5348       yydestruct ("Cleanup: discarding lookahead",
5349                   yytoken, &yylval, &yylloc, state);
5350     }
5351   /* Do not reclaim the symbols of the rule which action triggered
5352      this YYABORT or YYACCEPT.  */
5353   YYPOPSTACK (yylen);
5354   YY_STACK_PRINT (yyss, yyssp);
5355   while (yyssp != yyss)
5356     {
5357       yydestruct ("Cleanup: popping",
5358 		  yystos[*yyssp], yyvsp, yylsp, state);
5359       YYPOPSTACK (1);
5360     }
5361 #ifndef yyoverflow
5362   if (yyss != yyssa)
5363     YYSTACK_FREE (yyss);
5364 #endif
5365 #if YYERROR_VERBOSE
5366   if (yymsg != yymsgbuf)
5367     YYSTACK_FREE (yymsg);
5368 #endif
5369   /* Make sure YYID is used.  */
5370   return YYID (yyresult);
5371 }
5372 
5373 
5374 
5375 /* Line 2067 of yacc.c  */
5376 #line 2235 "src/src/mesa/program/program_parse.y"
5377 
5378 
5379 void
asm_instruction_set_operands(struct asm_instruction * inst,const struct prog_dst_register * dst,const struct asm_src_register * src0,const struct asm_src_register * src1,const struct asm_src_register * src2)5380 asm_instruction_set_operands(struct asm_instruction *inst,
5381 			     const struct prog_dst_register *dst,
5382 			     const struct asm_src_register *src0,
5383 			     const struct asm_src_register *src1,
5384 			     const struct asm_src_register *src2)
5385 {
5386    /* In the core ARB extensions only the KIL instruction doesn't have a
5387     * destination register.
5388     */
5389    if (dst == NULL) {
5390       init_dst_reg(& inst->Base.DstReg);
5391    } else {
5392       inst->Base.DstReg = *dst;
5393    }
5394 
5395    /* The only instruction that doesn't have any source registers is the
5396     * condition-code based KIL instruction added by NV_fragment_program_option.
5397     */
5398    if (src0 != NULL) {
5399       inst->Base.SrcReg[0] = src0->Base;
5400       inst->SrcReg[0] = *src0;
5401    } else {
5402       init_src_reg(& inst->SrcReg[0]);
5403    }
5404 
5405    if (src1 != NULL) {
5406       inst->Base.SrcReg[1] = src1->Base;
5407       inst->SrcReg[1] = *src1;
5408    } else {
5409       init_src_reg(& inst->SrcReg[1]);
5410    }
5411 
5412    if (src2 != NULL) {
5413       inst->Base.SrcReg[2] = src2->Base;
5414       inst->SrcReg[2] = *src2;
5415    } else {
5416       init_src_reg(& inst->SrcReg[2]);
5417    }
5418 }
5419 
5420 
5421 struct asm_instruction *
asm_instruction_ctor(gl_inst_opcode op,const struct prog_dst_register * dst,const struct asm_src_register * src0,const struct asm_src_register * src1,const struct asm_src_register * src2)5422 asm_instruction_ctor(gl_inst_opcode op,
5423 		     const struct prog_dst_register *dst,
5424 		     const struct asm_src_register *src0,
5425 		     const struct asm_src_register *src1,
5426 		     const struct asm_src_register *src2)
5427 {
5428    struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
5429 
5430    if (inst) {
5431       _mesa_init_instructions(& inst->Base, 1);
5432       inst->Base.Opcode = op;
5433 
5434       asm_instruction_set_operands(inst, dst, src0, src1, src2);
5435    }
5436 
5437    return inst;
5438 }
5439 
5440 
5441 struct asm_instruction *
asm_instruction_copy_ctor(const struct prog_instruction * base,const struct prog_dst_register * dst,const struct asm_src_register * src0,const struct asm_src_register * src1,const struct asm_src_register * src2)5442 asm_instruction_copy_ctor(const struct prog_instruction *base,
5443 			  const struct prog_dst_register *dst,
5444 			  const struct asm_src_register *src0,
5445 			  const struct asm_src_register *src1,
5446 			  const struct asm_src_register *src2)
5447 {
5448    struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
5449 
5450    if (inst) {
5451       _mesa_init_instructions(& inst->Base, 1);
5452       inst->Base.Opcode = base->Opcode;
5453       inst->Base.CondUpdate = base->CondUpdate;
5454       inst->Base.CondDst = base->CondDst;
5455       inst->Base.SaturateMode = base->SaturateMode;
5456       inst->Base.Precision = base->Precision;
5457 
5458       asm_instruction_set_operands(inst, dst, src0, src1, src2);
5459    }
5460 
5461    return inst;
5462 }
5463 
5464 
5465 void
init_dst_reg(struct prog_dst_register * r)5466 init_dst_reg(struct prog_dst_register *r)
5467 {
5468    memset(r, 0, sizeof(*r));
5469    r->File = PROGRAM_UNDEFINED;
5470    r->WriteMask = WRITEMASK_XYZW;
5471    r->CondMask = COND_TR;
5472    r->CondSwizzle = SWIZZLE_NOOP;
5473 }
5474 
5475 
5476 /** Like init_dst_reg() but set the File and Index fields. */
5477 void
set_dst_reg(struct prog_dst_register * r,gl_register_file file,GLint index)5478 set_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index)
5479 {
5480    const GLint maxIndex = 1 << INST_INDEX_BITS;
5481    const GLint minIndex = 0;
5482    ASSERT(index >= minIndex);
5483    (void) minIndex;
5484    ASSERT(index <= maxIndex);
5485    (void) maxIndex;
5486    ASSERT(file == PROGRAM_TEMPORARY ||
5487 	  file == PROGRAM_ADDRESS ||
5488 	  file == PROGRAM_OUTPUT);
5489    memset(r, 0, sizeof(*r));
5490    r->File = file;
5491    r->Index = index;
5492    r->WriteMask = WRITEMASK_XYZW;
5493    r->CondMask = COND_TR;
5494    r->CondSwizzle = SWIZZLE_NOOP;
5495 }
5496 
5497 
5498 void
init_src_reg(struct asm_src_register * r)5499 init_src_reg(struct asm_src_register *r)
5500 {
5501    memset(r, 0, sizeof(*r));
5502    r->Base.File = PROGRAM_UNDEFINED;
5503    r->Base.Swizzle = SWIZZLE_NOOP;
5504    r->Symbol = NULL;
5505 }
5506 
5507 
5508 /** Like init_src_reg() but set the File and Index fields.
5509  * \return GL_TRUE if a valid src register, GL_FALSE otherwise
5510  */
5511 void
set_src_reg(struct asm_src_register * r,gl_register_file file,GLint index)5512 set_src_reg(struct asm_src_register *r, gl_register_file file, GLint index)
5513 {
5514    set_src_reg_swz(r, file, index, SWIZZLE_XYZW);
5515 }
5516 
5517 
5518 void
set_src_reg_swz(struct asm_src_register * r,gl_register_file file,GLint index,GLuint swizzle)5519 set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
5520                 GLuint swizzle)
5521 {
5522    const GLint maxIndex = (1 << INST_INDEX_BITS) - 1;
5523    const GLint minIndex = -(1 << INST_INDEX_BITS);
5524    ASSERT(file < PROGRAM_FILE_MAX);
5525    ASSERT(index >= minIndex);
5526    (void) minIndex;
5527    ASSERT(index <= maxIndex);
5528    (void) maxIndex;
5529    memset(r, 0, sizeof(*r));
5530    r->Base.File = file;
5531    r->Base.Index = index;
5532    r->Base.Swizzle = swizzle;
5533    r->Symbol = NULL;
5534 }
5535 
5536 
5537 /**
5538  * Validate the set of inputs used by a program
5539  *
5540  * Validates that legal sets of inputs are used by the program.  In this case
5541  * "used" included both reading the input or binding the input to a name using
5542  * the \c ATTRIB command.
5543  *
5544  * \return
5545  * \c TRUE if the combination of inputs used is valid, \c FALSE otherwise.
5546  */
5547 int
validate_inputs(struct YYLTYPE * locp,struct asm_parser_state * state)5548 validate_inputs(struct YYLTYPE *locp, struct asm_parser_state *state)
5549 {
5550    const GLbitfield64 inputs = state->prog->InputsRead | state->InputsBound;
5551 
5552    if (((inputs & VERT_BIT_FF_ALL) & (inputs >> VERT_ATTRIB_GENERIC0)) != 0) {
5553       yyerror(locp, state, "illegal use of generic attribute and name attribute");
5554       return 0;
5555    }
5556 
5557    return 1;
5558 }
5559 
5560 
5561 struct asm_symbol *
declare_variable(struct asm_parser_state * state,char * name,enum asm_type t,struct YYLTYPE * locp)5562 declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
5563 		 struct YYLTYPE *locp)
5564 {
5565    struct asm_symbol *s = NULL;
5566    struct asm_symbol *exist = (struct asm_symbol *)
5567       _mesa_symbol_table_find_symbol(state->st, 0, name);
5568 
5569 
5570    if (exist != NULL) {
5571       yyerror(locp, state, "redeclared identifier");
5572    } else {
5573       s = calloc(1, sizeof(struct asm_symbol));
5574       s->name = name;
5575       s->type = t;
5576 
5577       switch (t) {
5578       case at_temp:
5579 	 if (state->prog->NumTemporaries >= state->limits->MaxTemps) {
5580 	    yyerror(locp, state, "too many temporaries declared");
5581 	    free(s);
5582 	    return NULL;
5583 	 }
5584 
5585 	 s->temp_binding = state->prog->NumTemporaries;
5586 	 state->prog->NumTemporaries++;
5587 	 break;
5588 
5589       case at_address:
5590 	 if (state->prog->NumAddressRegs >= state->limits->MaxAddressRegs) {
5591 	    yyerror(locp, state, "too many address registers declared");
5592 	    free(s);
5593 	    return NULL;
5594 	 }
5595 
5596 	 /* FINISHME: Add support for multiple address registers.
5597 	  */
5598 	 state->prog->NumAddressRegs++;
5599 	 break;
5600 
5601       default:
5602 	 break;
5603       }
5604 
5605       _mesa_symbol_table_add_symbol(state->st, 0, s->name, s);
5606       s->next = state->sym;
5607       state->sym = s;
5608    }
5609 
5610    return s;
5611 }
5612 
5613 
add_state_reference(struct gl_program_parameter_list * param_list,const gl_state_index tokens[STATE_LENGTH])5614 int add_state_reference(struct gl_program_parameter_list *param_list,
5615 			const gl_state_index tokens[STATE_LENGTH])
5616 {
5617    const GLuint size = 4; /* XXX fix */
5618    char *name;
5619    GLint index;
5620 
5621    name = _mesa_program_state_string(tokens);
5622    index = _mesa_add_parameter(param_list, PROGRAM_STATE_VAR, name,
5623                                size, GL_NONE, NULL, tokens, 0x0);
5624    param_list->StateFlags |= _mesa_program_state_flags(tokens);
5625 
5626    /* free name string here since we duplicated it in add_parameter() */
5627    free(name);
5628 
5629    return index;
5630 }
5631 
5632 
5633 int
initialize_symbol_from_state(struct gl_program * prog,struct asm_symbol * param_var,const gl_state_index tokens[STATE_LENGTH])5634 initialize_symbol_from_state(struct gl_program *prog,
5635 			     struct asm_symbol *param_var,
5636 			     const gl_state_index tokens[STATE_LENGTH])
5637 {
5638    int idx = -1;
5639    gl_state_index state_tokens[STATE_LENGTH];
5640 
5641 
5642    memcpy(state_tokens, tokens, sizeof(state_tokens));
5643 
5644    param_var->type = at_param;
5645    param_var->param_binding_type = PROGRAM_STATE_VAR;
5646 
5647    /* If we are adding a STATE_MATRIX that has multiple rows, we need to
5648     * unroll it and call add_state_reference() for each row
5649     */
5650    if ((state_tokens[0] == STATE_MODELVIEW_MATRIX ||
5651 	state_tokens[0] == STATE_PROJECTION_MATRIX ||
5652 	state_tokens[0] == STATE_MVP_MATRIX ||
5653 	state_tokens[0] == STATE_TEXTURE_MATRIX ||
5654 	state_tokens[0] == STATE_PROGRAM_MATRIX)
5655        && (state_tokens[2] != state_tokens[3])) {
5656       int row;
5657       const int first_row = state_tokens[2];
5658       const int last_row = state_tokens[3];
5659 
5660       for (row = first_row; row <= last_row; row++) {
5661 	 state_tokens[2] = state_tokens[3] = row;
5662 
5663 	 idx = add_state_reference(prog->Parameters, state_tokens);
5664 	 if (param_var->param_binding_begin == ~0U) {
5665 	    param_var->param_binding_begin = idx;
5666             param_var->param_binding_swizzle = SWIZZLE_XYZW;
5667          }
5668 
5669 	 param_var->param_binding_length++;
5670       }
5671    }
5672    else {
5673       idx = add_state_reference(prog->Parameters, state_tokens);
5674       if (param_var->param_binding_begin == ~0U) {
5675 	 param_var->param_binding_begin = idx;
5676          param_var->param_binding_swizzle = SWIZZLE_XYZW;
5677       }
5678       param_var->param_binding_length++;
5679    }
5680 
5681    return idx;
5682 }
5683 
5684 
5685 int
initialize_symbol_from_param(struct gl_program * prog,struct asm_symbol * param_var,const gl_state_index tokens[STATE_LENGTH])5686 initialize_symbol_from_param(struct gl_program *prog,
5687 			     struct asm_symbol *param_var,
5688 			     const gl_state_index tokens[STATE_LENGTH])
5689 {
5690    int idx = -1;
5691    gl_state_index state_tokens[STATE_LENGTH];
5692 
5693 
5694    memcpy(state_tokens, tokens, sizeof(state_tokens));
5695 
5696    assert((state_tokens[0] == STATE_VERTEX_PROGRAM)
5697 	  || (state_tokens[0] == STATE_FRAGMENT_PROGRAM));
5698    assert((state_tokens[1] == STATE_ENV)
5699 	  || (state_tokens[1] == STATE_LOCAL));
5700 
5701    /*
5702     * The param type is STATE_VAR.  The program parameter entry will
5703     * effectively be a pointer into the LOCAL or ENV parameter array.
5704     */
5705    param_var->type = at_param;
5706    param_var->param_binding_type = PROGRAM_STATE_VAR;
5707 
5708    /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,
5709     * we need to unroll it and call add_state_reference() for each row
5710     */
5711    if (state_tokens[2] != state_tokens[3]) {
5712       int row;
5713       const int first_row = state_tokens[2];
5714       const int last_row = state_tokens[3];
5715 
5716       for (row = first_row; row <= last_row; row++) {
5717 	 state_tokens[2] = state_tokens[3] = row;
5718 
5719 	 idx = add_state_reference(prog->Parameters, state_tokens);
5720 	 if (param_var->param_binding_begin == ~0U) {
5721 	    param_var->param_binding_begin = idx;
5722             param_var->param_binding_swizzle = SWIZZLE_XYZW;
5723          }
5724 	 param_var->param_binding_length++;
5725       }
5726    }
5727    else {
5728       idx = add_state_reference(prog->Parameters, state_tokens);
5729       if (param_var->param_binding_begin == ~0U) {
5730 	 param_var->param_binding_begin = idx;
5731          param_var->param_binding_swizzle = SWIZZLE_XYZW;
5732       }
5733       param_var->param_binding_length++;
5734    }
5735 
5736    return idx;
5737 }
5738 
5739 
5740 /**
5741  * Put a float/vector constant/literal into the parameter list.
5742  * \param param_var  returns info about the parameter/constant's location,
5743  *                   binding, type, etc.
5744  * \param vec  the vector/constant to add
5745  * \param allowSwizzle  if true, try to consolidate constants which only differ
5746  *                      by a swizzle.  We don't want to do this when building
5747  *                      arrays of constants that may be indexed indirectly.
5748  * \return index of the constant in the parameter list.
5749  */
5750 int
initialize_symbol_from_const(struct gl_program * prog,struct asm_symbol * param_var,const struct asm_vector * vec,GLboolean allowSwizzle)5751 initialize_symbol_from_const(struct gl_program *prog,
5752 			     struct asm_symbol *param_var,
5753 			     const struct asm_vector *vec,
5754                              GLboolean allowSwizzle)
5755 {
5756    unsigned swizzle;
5757    const int idx = _mesa_add_unnamed_constant(prog->Parameters,
5758                                               vec->data, vec->count,
5759                                               allowSwizzle ? &swizzle : NULL);
5760 
5761    param_var->type = at_param;
5762    param_var->param_binding_type = PROGRAM_CONSTANT;
5763 
5764    if (param_var->param_binding_begin == ~0U) {
5765       param_var->param_binding_begin = idx;
5766       param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;
5767    }
5768    param_var->param_binding_length++;
5769 
5770    return idx;
5771 }
5772 
5773 
5774 char *
make_error_string(const char * fmt,...)5775 make_error_string(const char *fmt, ...)
5776 {
5777    int length;
5778    char *str;
5779    va_list args;
5780 
5781 
5782    /* Call vsnprintf once to determine how large the final string is.  Call it
5783     * again to do the actual formatting.  from the vsnprintf manual page:
5784     *
5785     *    Upon successful return, these functions return the number of
5786     *    characters printed  (not including the trailing '\0' used to end
5787     *    output to strings).
5788     */
5789    va_start(args, fmt);
5790    length = 1 + vsnprintf(NULL, 0, fmt, args);
5791    va_end(args);
5792 
5793    str = malloc(length);
5794    if (str) {
5795       va_start(args, fmt);
5796       vsnprintf(str, length, fmt, args);
5797       va_end(args);
5798    }
5799 
5800    return str;
5801 }
5802 
5803 
5804 void
yyerror(YYLTYPE * locp,struct asm_parser_state * state,const char * s)5805 yyerror(YYLTYPE *locp, struct asm_parser_state *state, const char *s)
5806 {
5807    char *err_str;
5808 
5809 
5810    err_str = make_error_string("glProgramStringARB(%s)\n", s);
5811    if (err_str) {
5812       _mesa_error(state->ctx, GL_INVALID_OPERATION, "%s", err_str);
5813       free(err_str);
5814    }
5815 
5816    err_str = make_error_string("line %u, char %u: error: %s\n",
5817 			       locp->first_line, locp->first_column, s);
5818    _mesa_set_program_error(state->ctx, locp->position, err_str);
5819 
5820    if (err_str) {
5821       free(err_str);
5822    }
5823 }
5824 
5825 
5826 GLboolean
_mesa_parse_arb_program(struct gl_context * ctx,GLenum target,const GLubyte * str,GLsizei len,struct asm_parser_state * state)5827 _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *str,
5828 			GLsizei len, struct asm_parser_state *state)
5829 {
5830    struct asm_instruction *inst;
5831    unsigned i;
5832    GLubyte *strz;
5833    GLboolean result = GL_FALSE;
5834    void *temp;
5835    struct asm_symbol *sym;
5836 
5837    state->ctx = ctx;
5838    state->prog->Target = target;
5839    state->prog->Parameters = _mesa_new_parameter_list();
5840 
5841    /* Make a copy of the program string and force it to be NUL-terminated.
5842     */
5843    strz = (GLubyte *) malloc(len + 1);
5844    if (strz == NULL) {
5845       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glProgramStringARB");
5846       return GL_FALSE;
5847    }
5848    memcpy (strz, str, len);
5849    strz[len] = '\0';
5850 
5851    state->prog->String = strz;
5852 
5853    state->st = _mesa_symbol_table_ctor();
5854 
5855    state->limits = (target == GL_VERTEX_PROGRAM_ARB)
5856       ? & ctx->Const.VertexProgram
5857       : & ctx->Const.FragmentProgram;
5858 
5859    state->MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
5860    state->MaxTextureCoordUnits = ctx->Const.MaxTextureCoordUnits;
5861    state->MaxTextureUnits = ctx->Const.MaxTextureUnits;
5862    state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
5863    state->MaxLights = ctx->Const.MaxLights;
5864    state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
5865    state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
5866 
5867    state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
5868       ? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
5869 
5870    _mesa_set_program_error(ctx, -1, NULL);
5871 
5872    _mesa_program_lexer_ctor(& state->scanner, state, (const char *) str, len);
5873    yyparse(state);
5874    _mesa_program_lexer_dtor(state->scanner);
5875 
5876 
5877    if (ctx->Program.ErrorPos != -1) {
5878       goto error;
5879    }
5880 
5881    if (! _mesa_layout_parameters(state)) {
5882       struct YYLTYPE loc;
5883 
5884       loc.first_line = 0;
5885       loc.first_column = 0;
5886       loc.position = len;
5887 
5888       yyerror(& loc, state, "invalid PARAM usage");
5889       goto error;
5890    }
5891 
5892 
5893 
5894    /* Add one instruction to store the "END" instruction.
5895     */
5896    state->prog->Instructions =
5897       _mesa_alloc_instructions(state->prog->NumInstructions + 1);
5898    inst = state->inst_head;
5899    for (i = 0; i < state->prog->NumInstructions; i++) {
5900       struct asm_instruction *const temp = inst->next;
5901 
5902       state->prog->Instructions[i] = inst->Base;
5903       inst = temp;
5904    }
5905 
5906    /* Finally, tag on an OPCODE_END instruction */
5907    {
5908       const GLuint numInst = state->prog->NumInstructions;
5909       _mesa_init_instructions(state->prog->Instructions + numInst, 1);
5910       state->prog->Instructions[numInst].Opcode = OPCODE_END;
5911    }
5912    state->prog->NumInstructions++;
5913 
5914    state->prog->NumParameters = state->prog->Parameters->NumParameters;
5915    state->prog->NumAttributes = _mesa_bitcount_64(state->prog->InputsRead);
5916 
5917    /*
5918     * Initialize native counts to logical counts.  The device driver may
5919     * change them if program is translated into a hardware program.
5920     */
5921    state->prog->NumNativeInstructions = state->prog->NumInstructions;
5922    state->prog->NumNativeTemporaries = state->prog->NumTemporaries;
5923    state->prog->NumNativeParameters = state->prog->NumParameters;
5924    state->prog->NumNativeAttributes = state->prog->NumAttributes;
5925    state->prog->NumNativeAddressRegs = state->prog->NumAddressRegs;
5926 
5927    result = GL_TRUE;
5928 
5929 error:
5930    for (inst = state->inst_head; inst != NULL; inst = temp) {
5931       temp = inst->next;
5932       free(inst);
5933    }
5934 
5935    state->inst_head = NULL;
5936    state->inst_tail = NULL;
5937 
5938    for (sym = state->sym; sym != NULL; sym = temp) {
5939       temp = sym->next;
5940 
5941       free((void *) sym->name);
5942       free(sym);
5943    }
5944    state->sym = NULL;
5945 
5946    _mesa_symbol_table_dtor(state->st);
5947    state->st = NULL;
5948 
5949    return result;
5950 }
5951 
5952