program_parse.tab.c revision 848b8605
1848b8605Smrg/* A Bison parser, made by GNU Bison 2.6.4.  */
2848b8605Smrg
3848b8605Smrg/* Bison implementation for Yacc-like parsers in C
4848b8605Smrg
5848b8605Smrg      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
6848b8605Smrg
7848b8605Smrg   This program is free software: you can redistribute it and/or modify
8848b8605Smrg   it under the terms of the GNU General Public License as published by
9848b8605Smrg   the Free Software Foundation, either version 3 of the License, or
10848b8605Smrg   (at your option) any later version.
11848b8605Smrg
12848b8605Smrg   This program is distributed in the hope that it will be useful,
13848b8605Smrg   but WITHOUT ANY WARRANTY; without even the implied warranty of
14848b8605Smrg   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15848b8605Smrg   GNU General Public License for more details.
16848b8605Smrg
17848b8605Smrg   You should have received a copy of the GNU General Public License
18848b8605Smrg   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19848b8605Smrg
20848b8605Smrg/* As a special exception, you may create a larger work that contains
21848b8605Smrg   part or all of the Bison parser skeleton and distribute that work
22848b8605Smrg   under terms of your choice, so long as that work isn't itself a
23848b8605Smrg   parser generator using the skeleton or a modified version thereof
24848b8605Smrg   as a parser skeleton.  Alternatively, if you modify or redistribute
25848b8605Smrg   the parser skeleton itself, you may (at your option) remove this
26848b8605Smrg   special exception, which will cause the skeleton and the resulting
27848b8605Smrg   Bison output files to be licensed under the GNU General Public
28848b8605Smrg   License without this special exception.
29848b8605Smrg
30848b8605Smrg   This special exception was added by the Free Software Foundation in
31848b8605Smrg   version 2.2 of Bison.  */
32848b8605Smrg
33848b8605Smrg/* C LALR(1) parser skeleton written by Richard Stallman, by
34848b8605Smrg   simplifying the original so-called "semantic" parser.  */
35848b8605Smrg
36848b8605Smrg/* All symbols defined below should begin with yy or YY, to avoid
37848b8605Smrg   infringing on user name space.  This should be done even for local
38848b8605Smrg   variables, as they might otherwise be expanded by user macros.
39848b8605Smrg   There are some unavoidable exceptions within include files to
40848b8605Smrg   define necessary library symbols; they are noted "INFRINGES ON
41848b8605Smrg   USER NAME SPACE" below.  */
42848b8605Smrg
43848b8605Smrg/* Identify Bison output.  */
44848b8605Smrg#define YYBISON 1
45848b8605Smrg
46848b8605Smrg/* Bison version.  */
47848b8605Smrg#define YYBISON_VERSION "2.6.4"
48848b8605Smrg
49848b8605Smrg/* Skeleton name.  */
50848b8605Smrg#define YYSKELETON_NAME "yacc.c"
51848b8605Smrg
52848b8605Smrg/* Pure parsers.  */
53848b8605Smrg#define YYPURE 1
54848b8605Smrg
55848b8605Smrg/* Push parsers.  */
56848b8605Smrg#define YYPUSH 0
57848b8605Smrg
58848b8605Smrg/* Pull parsers.  */
59848b8605Smrg#define YYPULL 1
60848b8605Smrg
61848b8605Smrg
62848b8605Smrg/* Substitute the variable and function names.  */
63848b8605Smrg#define yyparse         _mesa_program_parse
64848b8605Smrg#define yylex           _mesa_program_lex
65848b8605Smrg#define yyerror         _mesa_program_error
66848b8605Smrg#define yylval          _mesa_program_lval
67848b8605Smrg#define yychar          _mesa_program_char
68848b8605Smrg#define yydebug         _mesa_program_debug
69848b8605Smrg#define yynerrs         _mesa_program_nerrs
70848b8605Smrg#define yylloc          _mesa_program_lloc
71848b8605Smrg
72848b8605Smrg/* Copy the first part of user declarations.  */
73848b8605Smrg/* Line 358 of yacc.c  */
74848b8605Smrg#line 1 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
75848b8605Smrg
76848b8605Smrg/*
77848b8605Smrg * Copyright © 2009 Intel Corporation
78848b8605Smrg *
79848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a
80848b8605Smrg * copy of this software and associated documentation files (the "Software"),
81848b8605Smrg * to deal in the Software without restriction, including without limitation
82848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
83848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the
84848b8605Smrg * Software is furnished to do so, subject to the following conditions:
85848b8605Smrg *
86848b8605Smrg * The above copyright notice and this permission notice (including the next
87848b8605Smrg * paragraph) shall be included in all copies or substantial portions of the
88848b8605Smrg * Software.
89848b8605Smrg *
90848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
91848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
92848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
93848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
94848b8605Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
95848b8605Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
96848b8605Smrg * DEALINGS IN THE SOFTWARE.
97848b8605Smrg */
98848b8605Smrg#include <stdio.h>
99848b8605Smrg#include <stdlib.h>
100848b8605Smrg#include <string.h>
101848b8605Smrg
102848b8605Smrg#include "main/mtypes.h"
103848b8605Smrg#include "main/imports.h"
104848b8605Smrg#include "program/program.h"
105848b8605Smrg#include "program/prog_parameter.h"
106848b8605Smrg#include "program/prog_parameter_layout.h"
107848b8605Smrg#include "program/prog_statevars.h"
108848b8605Smrg#include "program/prog_instruction.h"
109848b8605Smrg
110848b8605Smrg#include "program/symbol_table.h"
111848b8605Smrg#include "program/program_parser.h"
112848b8605Smrg
113848b8605Smrgextern void *yy_scan_string(char *);
114848b8605Smrgextern void yy_delete_buffer(void *);
115848b8605Smrg
116848b8605Smrgstatic struct asm_symbol *declare_variable(struct asm_parser_state *state,
117848b8605Smrg    char *name, enum asm_type t, struct YYLTYPE *locp);
118848b8605Smrg
119848b8605Smrgstatic int add_state_reference(struct gl_program_parameter_list *param_list,
120848b8605Smrg    const gl_state_index tokens[STATE_LENGTH]);
121848b8605Smrg
122848b8605Smrgstatic int initialize_symbol_from_state(struct gl_program *prog,
123848b8605Smrg    struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
124848b8605Smrg
125848b8605Smrgstatic int initialize_symbol_from_param(struct gl_program *prog,
126848b8605Smrg    struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);
127848b8605Smrg
128848b8605Smrgstatic int initialize_symbol_from_const(struct gl_program *prog,
129848b8605Smrg    struct asm_symbol *param_var, const struct asm_vector *vec,
130848b8605Smrg    GLboolean allowSwizzle);
131848b8605Smrg
132848b8605Smrgstatic int yyparse(struct asm_parser_state *state);
133848b8605Smrg
134848b8605Smrgstatic char *make_error_string(const char *fmt, ...);
135848b8605Smrg
136848b8605Smrgstatic void yyerror(struct YYLTYPE *locp, struct asm_parser_state *state,
137848b8605Smrg    const char *s);
138848b8605Smrg
139848b8605Smrgstatic int validate_inputs(struct YYLTYPE *locp,
140848b8605Smrg    struct asm_parser_state *state);
141848b8605Smrg
142848b8605Smrgstatic void init_dst_reg(struct prog_dst_register *r);
143848b8605Smrg
144848b8605Smrgstatic void set_dst_reg(struct prog_dst_register *r,
145848b8605Smrg                        gl_register_file file, GLint index);
146848b8605Smrg
147848b8605Smrgstatic void init_src_reg(struct asm_src_register *r);
148848b8605Smrg
149848b8605Smrgstatic void set_src_reg(struct asm_src_register *r,
150848b8605Smrg                        gl_register_file file, GLint index);
151848b8605Smrg
152848b8605Smrgstatic void set_src_reg_swz(struct asm_src_register *r,
153848b8605Smrg                            gl_register_file file, GLint index, GLuint swizzle);
154848b8605Smrg
155848b8605Smrgstatic void asm_instruction_set_operands(struct asm_instruction *inst,
156848b8605Smrg    const struct prog_dst_register *dst, const struct asm_src_register *src0,
157848b8605Smrg    const struct asm_src_register *src1, const struct asm_src_register *src2);
158848b8605Smrg
159848b8605Smrgstatic struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
160848b8605Smrg    const struct prog_dst_register *dst, const struct asm_src_register *src0,
161848b8605Smrg    const struct asm_src_register *src1, const struct asm_src_register *src2);
162848b8605Smrg
163848b8605Smrgstatic struct asm_instruction *asm_instruction_copy_ctor(
164848b8605Smrg    const struct prog_instruction *base, const struct prog_dst_register *dst,
165848b8605Smrg    const struct asm_src_register *src0, const struct asm_src_register *src1,
166848b8605Smrg    const struct asm_src_register *src2);
167848b8605Smrg
168848b8605Smrg#ifndef FALSE
169848b8605Smrg#define FALSE 0
170848b8605Smrg#define TRUE (!FALSE)
171848b8605Smrg#endif
172848b8605Smrg
173848b8605Smrg#define YYLLOC_DEFAULT(Current, Rhs, N)					\
174848b8605Smrg   do {									\
175848b8605Smrg      if (N) {							\
176848b8605Smrg	 (Current).first_line = YYRHSLOC(Rhs, 1).first_line;		\
177848b8605Smrg	 (Current).first_column = YYRHSLOC(Rhs, 1).first_column;	\
178848b8605Smrg	 (Current).position = YYRHSLOC(Rhs, 1).position;		\
179848b8605Smrg	 (Current).last_line = YYRHSLOC(Rhs, N).last_line;		\
180848b8605Smrg	 (Current).last_column = YYRHSLOC(Rhs, N).last_column;		\
181848b8605Smrg      } else {								\
182848b8605Smrg	 (Current).first_line = YYRHSLOC(Rhs, 0).last_line;		\
183848b8605Smrg	 (Current).last_line = (Current).first_line;			\
184848b8605Smrg	 (Current).first_column = YYRHSLOC(Rhs, 0).last_column;		\
185848b8605Smrg	 (Current).last_column = (Current).first_column;		\
186848b8605Smrg	 (Current).position = YYRHSLOC(Rhs, 0).position			\
187848b8605Smrg	    + (Current).first_column;					\
188848b8605Smrg      }									\
189848b8605Smrg   } while(0)
190848b8605Smrg
191848b8605Smrg/* Line 358 of yacc.c  */
192848b8605Smrg#line 193 "program_parse.tab.c"
193848b8605Smrg
194848b8605Smrg# ifndef YY_NULL
195848b8605Smrg#  if defined __cplusplus && 201103L <= __cplusplus
196848b8605Smrg#   define YY_NULL nullptr
197848b8605Smrg#  else
198848b8605Smrg#   define YY_NULL 0
199848b8605Smrg#  endif
200848b8605Smrg# endif
201848b8605Smrg
202848b8605Smrg/* Enabling verbose error messages.  */
203848b8605Smrg#ifdef YYERROR_VERBOSE
204848b8605Smrg# undef YYERROR_VERBOSE
205848b8605Smrg# define YYERROR_VERBOSE 1
206848b8605Smrg#else
207848b8605Smrg# define YYERROR_VERBOSE 1
208848b8605Smrg#endif
209848b8605Smrg
210848b8605Smrg/* In a future release of Bison, this section will be replaced
211848b8605Smrg   by #include "program_parse.tab.h".  */
212848b8605Smrg#ifndef YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED
213848b8605Smrg# define YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED
214848b8605Smrg/* Enabling traces.  */
215848b8605Smrg#ifndef YYDEBUG
216848b8605Smrg# define YYDEBUG 0
217848b8605Smrg#endif
218848b8605Smrg#if YYDEBUG
219848b8605Smrgextern int _mesa_program_debug;
220848b8605Smrg#endif
221848b8605Smrg
222848b8605Smrg/* Tokens.  */
223848b8605Smrg#ifndef YYTOKENTYPE
224848b8605Smrg# define YYTOKENTYPE
225848b8605Smrg   /* Put the tokens into the symbol table, so that GDB and other debuggers
226848b8605Smrg      know about them.  */
227848b8605Smrg   enum yytokentype {
228848b8605Smrg     ARBvp_10 = 258,
229848b8605Smrg     ARBfp_10 = 259,
230848b8605Smrg     ADDRESS = 260,
231848b8605Smrg     ALIAS = 261,
232848b8605Smrg     ATTRIB = 262,
233848b8605Smrg     OPTION = 263,
234848b8605Smrg     OUTPUT = 264,
235848b8605Smrg     PARAM = 265,
236848b8605Smrg     TEMP = 266,
237848b8605Smrg     END = 267,
238848b8605Smrg     BIN_OP = 268,
239848b8605Smrg     BINSC_OP = 269,
240848b8605Smrg     SAMPLE_OP = 270,
241848b8605Smrg     SCALAR_OP = 271,
242848b8605Smrg     TRI_OP = 272,
243848b8605Smrg     VECTOR_OP = 273,
244848b8605Smrg     ARL = 274,
245848b8605Smrg     KIL = 275,
246848b8605Smrg     SWZ = 276,
247848b8605Smrg     TXD_OP = 277,
248848b8605Smrg     INTEGER = 278,
249848b8605Smrg     REAL = 279,
250848b8605Smrg     AMBIENT = 280,
251848b8605Smrg     ATTENUATION = 281,
252848b8605Smrg     BACK = 282,
253848b8605Smrg     CLIP = 283,
254848b8605Smrg     COLOR = 284,
255848b8605Smrg     DEPTH = 285,
256848b8605Smrg     DIFFUSE = 286,
257848b8605Smrg     DIRECTION = 287,
258848b8605Smrg     EMISSION = 288,
259848b8605Smrg     ENV = 289,
260848b8605Smrg     EYE = 290,
261848b8605Smrg     FOG = 291,
262848b8605Smrg     FOGCOORD = 292,
263848b8605Smrg     FRAGMENT = 293,
264848b8605Smrg     FRONT = 294,
265848b8605Smrg     HALF = 295,
266848b8605Smrg     INVERSE = 296,
267848b8605Smrg     INVTRANS = 297,
268848b8605Smrg     LIGHT = 298,
269848b8605Smrg     LIGHTMODEL = 299,
270848b8605Smrg     LIGHTPROD = 300,
271848b8605Smrg     LOCAL = 301,
272848b8605Smrg     MATERIAL = 302,
273848b8605Smrg     MAT_PROGRAM = 303,
274848b8605Smrg     MATRIX = 304,
275848b8605Smrg     MATRIXINDEX = 305,
276848b8605Smrg     MODELVIEW = 306,
277848b8605Smrg     MVP = 307,
278848b8605Smrg     NORMAL = 308,
279848b8605Smrg     OBJECT = 309,
280848b8605Smrg     PALETTE = 310,
281848b8605Smrg     PARAMS = 311,
282848b8605Smrg     PLANE = 312,
283848b8605Smrg     POINT_TOK = 313,
284848b8605Smrg     POINTSIZE = 314,
285848b8605Smrg     POSITION = 315,
286848b8605Smrg     PRIMARY = 316,
287848b8605Smrg     PROGRAM = 317,
288848b8605Smrg     PROJECTION = 318,
289848b8605Smrg     RANGE = 319,
290848b8605Smrg     RESULT = 320,
291848b8605Smrg     ROW = 321,
292848b8605Smrg     SCENECOLOR = 322,
293848b8605Smrg     SECONDARY = 323,
294848b8605Smrg     SHININESS = 324,
295848b8605Smrg     SIZE_TOK = 325,
296848b8605Smrg     SPECULAR = 326,
297848b8605Smrg     SPOT = 327,
298848b8605Smrg     STATE = 328,
299848b8605Smrg     TEXCOORD = 329,
300848b8605Smrg     TEXENV = 330,
301848b8605Smrg     TEXGEN = 331,
302848b8605Smrg     TEXGEN_Q = 332,
303848b8605Smrg     TEXGEN_R = 333,
304848b8605Smrg     TEXGEN_S = 334,
305848b8605Smrg     TEXGEN_T = 335,
306848b8605Smrg     TEXTURE = 336,
307848b8605Smrg     TRANSPOSE = 337,
308848b8605Smrg     TEXTURE_UNIT = 338,
309848b8605Smrg     TEX_1D = 339,
310848b8605Smrg     TEX_2D = 340,
311848b8605Smrg     TEX_3D = 341,
312848b8605Smrg     TEX_CUBE = 342,
313848b8605Smrg     TEX_RECT = 343,
314848b8605Smrg     TEX_SHADOW1D = 344,
315848b8605Smrg     TEX_SHADOW2D = 345,
316848b8605Smrg     TEX_SHADOWRECT = 346,
317848b8605Smrg     TEX_ARRAY1D = 347,
318848b8605Smrg     TEX_ARRAY2D = 348,
319848b8605Smrg     TEX_ARRAYSHADOW1D = 349,
320848b8605Smrg     TEX_ARRAYSHADOW2D = 350,
321848b8605Smrg     VERTEX = 351,
322848b8605Smrg     VTXATTRIB = 352,
323848b8605Smrg     WEIGHT = 353,
324848b8605Smrg     IDENTIFIER = 354,
325848b8605Smrg     USED_IDENTIFIER = 355,
326848b8605Smrg     MASK4 = 356,
327848b8605Smrg     MASK3 = 357,
328848b8605Smrg     MASK2 = 358,
329848b8605Smrg     MASK1 = 359,
330848b8605Smrg     SWIZZLE = 360,
331848b8605Smrg     DOT_DOT = 361,
332848b8605Smrg     DOT = 362
333848b8605Smrg   };
334848b8605Smrg#endif
335848b8605Smrg
336848b8605Smrg
337848b8605Smrg#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
338848b8605Smrgtypedef union YYSTYPE
339848b8605Smrg{
340848b8605Smrg/* Line 374 of yacc.c  */
341848b8605Smrg#line 124 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
342848b8605Smrg
343848b8605Smrg   struct asm_instruction *inst;
344848b8605Smrg   struct asm_symbol *sym;
345848b8605Smrg   struct asm_symbol temp_sym;
346848b8605Smrg   struct asm_swizzle_mask swiz_mask;
347848b8605Smrg   struct asm_src_register src_reg;
348848b8605Smrg   struct prog_dst_register dst_reg;
349848b8605Smrg   struct prog_instruction temp_inst;
350848b8605Smrg   char *string;
351848b8605Smrg   unsigned result;
352848b8605Smrg   unsigned attrib;
353848b8605Smrg   int integer;
354848b8605Smrg   float real;
355848b8605Smrg   gl_state_index state[STATE_LENGTH];
356848b8605Smrg   int negate;
357848b8605Smrg   struct asm_vector vector;
358848b8605Smrg   gl_inst_opcode opcode;
359848b8605Smrg
360848b8605Smrg   struct {
361848b8605Smrg      unsigned swz;
362848b8605Smrg      unsigned rgba_valid:1;
363848b8605Smrg      unsigned xyzw_valid:1;
364848b8605Smrg      unsigned negate:1;
365848b8605Smrg   } ext_swizzle;
366848b8605Smrg
367848b8605Smrg
368848b8605Smrg/* Line 374 of yacc.c  */
369848b8605Smrg#line 370 "program_parse.tab.c"
370848b8605Smrg} YYSTYPE;
371848b8605Smrg# define YYSTYPE_IS_TRIVIAL 1
372848b8605Smrg# define yystype YYSTYPE /* obsolescent; will be withdrawn */
373848b8605Smrg# define YYSTYPE_IS_DECLARED 1
374848b8605Smrg#endif
375848b8605Smrg
376848b8605Smrg#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
377848b8605Smrgtypedef struct YYLTYPE
378848b8605Smrg{
379848b8605Smrg  int first_line;
380848b8605Smrg  int first_column;
381848b8605Smrg  int last_line;
382848b8605Smrg  int last_column;
383848b8605Smrg} YYLTYPE;
384848b8605Smrg# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
385848b8605Smrg# define YYLTYPE_IS_DECLARED 1
386848b8605Smrg# define YYLTYPE_IS_TRIVIAL 1
387848b8605Smrg#endif
388848b8605Smrg
389848b8605Smrg
390848b8605Smrg#ifdef YYPARSE_PARAM
391848b8605Smrg#if defined __STDC__ || defined __cplusplus
392848b8605Smrgint _mesa_program_parse (void *YYPARSE_PARAM);
393848b8605Smrg#else
394848b8605Smrgint _mesa_program_parse ();
395848b8605Smrg#endif
396848b8605Smrg#else /* ! YYPARSE_PARAM */
397848b8605Smrg#if defined __STDC__ || defined __cplusplus
398848b8605Smrgint _mesa_program_parse (struct asm_parser_state *state);
399848b8605Smrg#else
400848b8605Smrgint _mesa_program_parse ();
401848b8605Smrg#endif
402848b8605Smrg#endif /* ! YYPARSE_PARAM */
403848b8605Smrg
404848b8605Smrg#endif /* !YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED  */
405848b8605Smrg
406848b8605Smrg/* Copy the second part of user declarations.  */
407848b8605Smrg/* Line 377 of yacc.c  */
408848b8605Smrg#line 269 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
409848b8605Smrg
410848b8605Smrgextern int
411848b8605Smrg_mesa_program_lexer_lex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
412848b8605Smrg                        void *yyscanner);
413848b8605Smrg
414848b8605Smrgstatic int
415848b8605Smrgyylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
416848b8605Smrg      struct asm_parser_state *state)
417848b8605Smrg{
418848b8605Smrg   return _mesa_program_lexer_lex(yylval_param, yylloc_param, state->scanner);
419848b8605Smrg}
420848b8605Smrg
421848b8605Smrg/* Line 377 of yacc.c  */
422848b8605Smrg#line 423 "program_parse.tab.c"
423848b8605Smrg
424848b8605Smrg#ifdef short
425848b8605Smrg# undef short
426848b8605Smrg#endif
427848b8605Smrg
428848b8605Smrg#ifdef YYTYPE_UINT8
429848b8605Smrgtypedef YYTYPE_UINT8 yytype_uint8;
430848b8605Smrg#else
431848b8605Smrgtypedef unsigned char yytype_uint8;
432848b8605Smrg#endif
433848b8605Smrg
434848b8605Smrg#ifdef YYTYPE_INT8
435848b8605Smrgtypedef YYTYPE_INT8 yytype_int8;
436848b8605Smrg#elif (defined __STDC__ || defined __C99__FUNC__ \
437848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
438848b8605Smrgtypedef signed char yytype_int8;
439848b8605Smrg#else
440848b8605Smrgtypedef short int yytype_int8;
441848b8605Smrg#endif
442848b8605Smrg
443848b8605Smrg#ifdef YYTYPE_UINT16
444848b8605Smrgtypedef YYTYPE_UINT16 yytype_uint16;
445848b8605Smrg#else
446848b8605Smrgtypedef unsigned short int yytype_uint16;
447848b8605Smrg#endif
448848b8605Smrg
449848b8605Smrg#ifdef YYTYPE_INT16
450848b8605Smrgtypedef YYTYPE_INT16 yytype_int16;
451848b8605Smrg#else
452848b8605Smrgtypedef short int yytype_int16;
453848b8605Smrg#endif
454848b8605Smrg
455848b8605Smrg#ifndef YYSIZE_T
456848b8605Smrg# ifdef __SIZE_TYPE__
457848b8605Smrg#  define YYSIZE_T __SIZE_TYPE__
458848b8605Smrg# elif defined size_t
459848b8605Smrg#  define YYSIZE_T size_t
460848b8605Smrg# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
461848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
462848b8605Smrg#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
463848b8605Smrg#  define YYSIZE_T size_t
464848b8605Smrg# else
465848b8605Smrg#  define YYSIZE_T unsigned int
466848b8605Smrg# endif
467848b8605Smrg#endif
468848b8605Smrg
469848b8605Smrg#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
470848b8605Smrg
471848b8605Smrg#ifndef YY_
472848b8605Smrg# if defined YYENABLE_NLS && YYENABLE_NLS
473848b8605Smrg#  if ENABLE_NLS
474848b8605Smrg#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
475848b8605Smrg#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
476848b8605Smrg#  endif
477848b8605Smrg# endif
478848b8605Smrg# ifndef YY_
479848b8605Smrg#  define YY_(Msgid) Msgid
480848b8605Smrg# endif
481848b8605Smrg#endif
482848b8605Smrg
483848b8605Smrg/* Suppress unused-variable warnings by "using" E.  */
484848b8605Smrg#if ! defined lint || defined __GNUC__
485848b8605Smrg# define YYUSE(E) ((void) (E))
486848b8605Smrg#else
487848b8605Smrg# define YYUSE(E) /* empty */
488848b8605Smrg#endif
489848b8605Smrg
490848b8605Smrg/* Identity function, used to suppress warnings about constant conditions.  */
491848b8605Smrg#ifndef lint
492848b8605Smrg# define YYID(N) (N)
493848b8605Smrg#else
494848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
495848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
496848b8605Smrgstatic int
497848b8605SmrgYYID (int yyi)
498848b8605Smrg#else
499848b8605Smrgstatic int
500848b8605SmrgYYID (yyi)
501848b8605Smrg    int yyi;
502848b8605Smrg#endif
503848b8605Smrg{
504848b8605Smrg  return yyi;
505848b8605Smrg}
506848b8605Smrg#endif
507848b8605Smrg
508848b8605Smrg#if ! defined yyoverflow || YYERROR_VERBOSE
509848b8605Smrg
510848b8605Smrg/* The parser invokes alloca or malloc; define the necessary symbols.  */
511848b8605Smrg
512848b8605Smrg# ifdef YYSTACK_USE_ALLOCA
513848b8605Smrg#  if YYSTACK_USE_ALLOCA
514848b8605Smrg#   ifdef __GNUC__
515848b8605Smrg#    define YYSTACK_ALLOC __builtin_alloca
516848b8605Smrg#   elif defined __BUILTIN_VA_ARG_INCR
517848b8605Smrg#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
518848b8605Smrg#   elif defined _AIX
519848b8605Smrg#    define YYSTACK_ALLOC __alloca
520848b8605Smrg#   elif defined _MSC_VER
521848b8605Smrg#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
522848b8605Smrg#    define alloca _alloca
523848b8605Smrg#   else
524848b8605Smrg#    define YYSTACK_ALLOC alloca
525848b8605Smrg#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
526848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
527848b8605Smrg#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
528848b8605Smrg      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
529848b8605Smrg#     ifndef EXIT_SUCCESS
530848b8605Smrg#      define EXIT_SUCCESS 0
531848b8605Smrg#     endif
532848b8605Smrg#    endif
533848b8605Smrg#   endif
534848b8605Smrg#  endif
535848b8605Smrg# endif
536848b8605Smrg
537848b8605Smrg# ifdef YYSTACK_ALLOC
538848b8605Smrg   /* Pacify GCC's `empty if-body' warning.  */
539848b8605Smrg#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
540848b8605Smrg#  ifndef YYSTACK_ALLOC_MAXIMUM
541848b8605Smrg    /* The OS might guarantee only one guard page at the bottom of the stack,
542848b8605Smrg       and a page size can be as small as 4096 bytes.  So we cannot safely
543848b8605Smrg       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
544848b8605Smrg       to allow for a few compiler-allocated temporary stack slots.  */
545848b8605Smrg#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
546848b8605Smrg#  endif
547848b8605Smrg# else
548848b8605Smrg#  define YYSTACK_ALLOC YYMALLOC
549848b8605Smrg#  define YYSTACK_FREE YYFREE
550848b8605Smrg#  ifndef YYSTACK_ALLOC_MAXIMUM
551848b8605Smrg#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
552848b8605Smrg#  endif
553848b8605Smrg#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
554848b8605Smrg       && ! ((defined YYMALLOC || defined malloc) \
555848b8605Smrg	     && (defined YYFREE || defined free)))
556848b8605Smrg#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
557848b8605Smrg#   ifndef EXIT_SUCCESS
558848b8605Smrg#    define EXIT_SUCCESS 0
559848b8605Smrg#   endif
560848b8605Smrg#  endif
561848b8605Smrg#  ifndef YYMALLOC
562848b8605Smrg#   define YYMALLOC malloc
563848b8605Smrg#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
564848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
565848b8605Smrgvoid *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
566848b8605Smrg#   endif
567848b8605Smrg#  endif
568848b8605Smrg#  ifndef YYFREE
569848b8605Smrg#   define YYFREE free
570848b8605Smrg#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
571848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
572848b8605Smrgvoid free (void *); /* INFRINGES ON USER NAME SPACE */
573848b8605Smrg#   endif
574848b8605Smrg#  endif
575848b8605Smrg# endif
576848b8605Smrg#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
577848b8605Smrg
578848b8605Smrg
579848b8605Smrg#if (! defined yyoverflow \
580848b8605Smrg     && (! defined __cplusplus \
581848b8605Smrg	 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
582848b8605Smrg	     && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
583848b8605Smrg
584848b8605Smrg/* A type that is properly aligned for any stack member.  */
585848b8605Smrgunion yyalloc
586848b8605Smrg{
587848b8605Smrg  yytype_int16 yyss_alloc;
588848b8605Smrg  YYSTYPE yyvs_alloc;
589848b8605Smrg  YYLTYPE yyls_alloc;
590848b8605Smrg};
591848b8605Smrg
592848b8605Smrg/* The size of the maximum gap between one aligned stack and the next.  */
593848b8605Smrg# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
594848b8605Smrg
595848b8605Smrg/* The size of an array large to enough to hold all stacks, each with
596848b8605Smrg   N elements.  */
597848b8605Smrg# define YYSTACK_BYTES(N) \
598848b8605Smrg     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
599848b8605Smrg      + 2 * YYSTACK_GAP_MAXIMUM)
600848b8605Smrg
601848b8605Smrg# define YYCOPY_NEEDED 1
602848b8605Smrg
603848b8605Smrg/* Relocate STACK from its old location to the new one.  The
604848b8605Smrg   local variables YYSIZE and YYSTACKSIZE give the old and new number of
605848b8605Smrg   elements in the stack, and YYPTR gives the new location of the
606848b8605Smrg   stack.  Advance YYPTR to a properly aligned location for the next
607848b8605Smrg   stack.  */
608848b8605Smrg# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
609848b8605Smrg    do									\
610848b8605Smrg      {									\
611848b8605Smrg	YYSIZE_T yynewbytes;						\
612848b8605Smrg	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
613848b8605Smrg	Stack = &yyptr->Stack_alloc;					\
614848b8605Smrg	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
615848b8605Smrg	yyptr += yynewbytes / sizeof (*yyptr);				\
616848b8605Smrg      }									\
617848b8605Smrg    while (YYID (0))
618848b8605Smrg
619848b8605Smrg#endif
620848b8605Smrg
621848b8605Smrg#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
622848b8605Smrg/* Copy COUNT objects from SRC to DST.  The source and destination do
623848b8605Smrg   not overlap.  */
624848b8605Smrg# ifndef YYCOPY
625848b8605Smrg#  if defined __GNUC__ && 1 < __GNUC__
626848b8605Smrg#   define YYCOPY(Dst, Src, Count) \
627848b8605Smrg      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
628848b8605Smrg#  else
629848b8605Smrg#   define YYCOPY(Dst, Src, Count)              \
630848b8605Smrg      do                                        \
631848b8605Smrg        {                                       \
632848b8605Smrg          YYSIZE_T yyi;                         \
633848b8605Smrg          for (yyi = 0; yyi < (Count); yyi++)   \
634848b8605Smrg            (Dst)[yyi] = (Src)[yyi];            \
635848b8605Smrg        }                                       \
636848b8605Smrg      while (YYID (0))
637848b8605Smrg#  endif
638848b8605Smrg# endif
639848b8605Smrg#endif /* !YYCOPY_NEEDED */
640848b8605Smrg
641848b8605Smrg/* YYFINAL -- State number of the termination state.  */
642848b8605Smrg#define YYFINAL  5
643848b8605Smrg/* YYLAST -- Last index in YYTABLE.  */
644848b8605Smrg#define YYLAST   402
645848b8605Smrg
646848b8605Smrg/* YYNTOKENS -- Number of terminals.  */
647848b8605Smrg#define YYNTOKENS  120
648848b8605Smrg/* YYNNTS -- Number of nonterminals.  */
649848b8605Smrg#define YYNNTS  143
650848b8605Smrg/* YYNRULES -- Number of rules.  */
651848b8605Smrg#define YYNRULES  283
652848b8605Smrg/* YYNRULES -- Number of states.  */
653848b8605Smrg#define YYNSTATES  478
654848b8605Smrg
655848b8605Smrg/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
656848b8605Smrg#define YYUNDEFTOK  2
657848b8605Smrg#define YYMAXUTOK   362
658848b8605Smrg
659848b8605Smrg#define YYTRANSLATE(YYX)						\
660848b8605Smrg  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
661848b8605Smrg
662848b8605Smrg/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
663848b8605Smrgstatic const yytype_uint8 yytranslate[] =
664848b8605Smrg{
665848b8605Smrg       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
666848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
667848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
668848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
669848b8605Smrg     115,   116,     2,   113,   109,   114,     2,     2,     2,     2,
670848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,   108,
671848b8605Smrg       2,   117,     2,     2,     2,     2,     2,     2,     2,     2,
672848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
673848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
674848b8605Smrg       2,   111,     2,   112,     2,     2,     2,     2,     2,     2,
675848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
676848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
677848b8605Smrg       2,     2,     2,   118,   110,   119,     2,     2,     2,     2,
678848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
679848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
680848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
681848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
682848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
683848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
684848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
685848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
686848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
687848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
688848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
689848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
690848b8605Smrg       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
691848b8605Smrg       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
692848b8605Smrg      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
693848b8605Smrg      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
694848b8605Smrg      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
695848b8605Smrg      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
696848b8605Smrg      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
697848b8605Smrg      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
698848b8605Smrg      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
699848b8605Smrg      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
700848b8605Smrg      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
701848b8605Smrg     105,   106,   107
702848b8605Smrg};
703848b8605Smrg
704848b8605Smrg#if YYDEBUG
705848b8605Smrg/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
706848b8605Smrg   YYRHS.  */
707848b8605Smrgstatic const yytype_uint16 yyprhs[] =
708848b8605Smrg{
709848b8605Smrg       0,     0,     3,     8,    10,    12,    15,    16,    20,    23,
710848b8605Smrg      24,    27,    30,    32,    34,    36,    38,    40,    42,    44,
711848b8605Smrg      46,    48,    50,    52,    54,    59,    64,    69,    76,    83,
712848b8605Smrg      92,   101,   104,   107,   120,   123,   125,   127,   129,   131,
713848b8605Smrg     133,   135,   137,   139,   141,   143,   145,   147,   154,   157,
714848b8605Smrg     162,   165,   167,   171,   177,   181,   184,   192,   195,   197,
715848b8605Smrg     199,   201,   203,   208,   210,   212,   214,   216,   218,   220,
716848b8605Smrg     222,   226,   227,   230,   233,   235,   237,   239,   241,   243,
717848b8605Smrg     245,   247,   249,   251,   252,   254,   256,   258,   260,   261,
718848b8605Smrg     265,   269,   270,   273,   276,   278,   280,   282,   284,   286,
719848b8605Smrg     288,   290,   292,   297,   300,   303,   305,   308,   310,   313,
720848b8605Smrg     315,   318,   323,   328,   330,   331,   335,   337,   339,   342,
721848b8605Smrg     344,   347,   349,   351,   355,   362,   363,   365,   368,   373,
722848b8605Smrg     375,   379,   381,   383,   385,   387,   389,   391,   393,   395,
723848b8605Smrg     397,   399,   402,   405,   408,   411,   414,   417,   420,   423,
724848b8605Smrg     426,   429,   432,   435,   439,   441,   443,   445,   451,   453,
725848b8605Smrg     455,   457,   460,   462,   464,   467,   469,   472,   479,   481,
726848b8605Smrg     485,   487,   489,   491,   493,   495,   500,   502,   504,   506,
727848b8605Smrg     508,   510,   512,   515,   517,   519,   525,   527,   530,   532,
728848b8605Smrg     534,   540,   543,   544,   551,   555,   556,   558,   560,   562,
729848b8605Smrg     564,   566,   569,   571,   573,   576,   581,   586,   587,   591,
730848b8605Smrg     593,   595,   597,   600,   602,   604,   606,   608,   614,   616,
731848b8605Smrg     620,   626,   632,   634,   638,   644,   646,   648,   650,   652,
732848b8605Smrg     654,   656,   658,   660,   662,   666,   672,   680,   690,   693,
733848b8605Smrg     696,   698,   700,   701,   702,   707,   709,   710,   711,   715,
734848b8605Smrg     719,   721,   727,   730,   733,   736,   739,   743,   746,   750,
735848b8605Smrg     751,   755,   757,   759,   760,   762,   764,   765,   767,   769,
736848b8605Smrg     770,   772,   774,   775,   779,   780,   784,   785,   789,   791,
737848b8605Smrg     793,   795,   800,   802
738848b8605Smrg};
739848b8605Smrg
740848b8605Smrg/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
741848b8605Smrgstatic const yytype_int16 yyrhs[] =
742848b8605Smrg{
743848b8605Smrg     121,     0,    -1,   122,   123,   125,    12,    -1,     3,    -1,
744848b8605Smrg       4,    -1,   123,   124,    -1,    -1,     8,   262,   108,    -1,
745848b8605Smrg     125,   126,    -1,    -1,   127,   108,    -1,   170,   108,    -1,
746848b8605Smrg     128,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
747848b8605Smrg     133,    -1,   134,    -1,   135,    -1,   141,    -1,   136,    -1,
748848b8605Smrg     137,    -1,   138,    -1,    19,   146,   109,   142,    -1,    18,
749848b8605Smrg     145,   109,   144,    -1,    16,   145,   109,   142,    -1,    14,
750848b8605Smrg     145,   109,   142,   109,   142,    -1,    13,   145,   109,   144,
751848b8605Smrg     109,   144,    -1,    17,   145,   109,   144,   109,   144,   109,
752848b8605Smrg     144,    -1,    15,   145,   109,   144,   109,   139,   109,   140,
753848b8605Smrg      -1,    20,   144,    -1,    20,   166,    -1,    22,   145,   109,
754848b8605Smrg     144,   109,   144,   109,   144,   109,   139,   109,   140,    -1,
755848b8605Smrg      83,   256,    -1,    84,    -1,    85,    -1,    86,    -1,    87,
756848b8605Smrg      -1,    88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
757848b8605Smrg      -1,    93,    -1,    94,    -1,    95,    -1,    21,   145,   109,
758848b8605Smrg     150,   109,   147,    -1,   241,   143,    -1,   241,   110,   143,
759848b8605Smrg     110,    -1,   150,   162,    -1,   238,    -1,   241,   150,   163,
760848b8605Smrg      -1,   241,   110,   150,   163,   110,    -1,   151,   164,   165,
761848b8605Smrg      -1,   159,   161,    -1,   148,   109,   148,   109,   148,   109,
762848b8605Smrg     148,    -1,   241,   149,    -1,    23,    -1,   262,    -1,   100,
763848b8605Smrg      -1,   172,    -1,   152,   111,   153,   112,    -1,   186,    -1,
764848b8605Smrg     249,    -1,   100,    -1,   100,    -1,   154,    -1,   155,    -1,
765848b8605Smrg      23,    -1,   159,   160,   156,    -1,    -1,   113,   157,    -1,
766848b8605Smrg     114,   158,    -1,    23,    -1,    23,    -1,   100,    -1,   104,
767848b8605Smrg      -1,   104,    -1,   104,    -1,   104,    -1,   101,    -1,   105,
768848b8605Smrg      -1,    -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,
769848b8605Smrg      -1,   115,   166,   116,    -1,   115,   167,   116,    -1,    -1,
770848b8605Smrg     168,   163,    -1,   169,   163,    -1,    99,    -1,   100,    -1,
771848b8605Smrg     171,    -1,   178,    -1,   242,    -1,   245,    -1,   248,    -1,
772848b8605Smrg     261,    -1,     7,    99,   117,   172,    -1,    96,   173,    -1,
773848b8605Smrg      38,   177,    -1,    60,    -1,    98,   175,    -1,    53,    -1,
774848b8605Smrg      29,   254,    -1,    37,    -1,    74,   255,    -1,    50,   111,
775848b8605Smrg     176,   112,    -1,    97,   111,   174,   112,    -1,    23,    -1,
776848b8605Smrg      -1,   111,   176,   112,    -1,    23,    -1,    60,    -1,    29,
777848b8605Smrg     254,    -1,    37,    -1,    74,   255,    -1,   179,    -1,   180,
778848b8605Smrg      -1,    10,    99,   182,    -1,    10,    99,   111,   181,   112,
779848b8605Smrg     183,    -1,    -1,    23,    -1,   117,   185,    -1,   117,   118,
780848b8605Smrg     184,   119,    -1,   187,    -1,   184,   109,   187,    -1,   189,
781848b8605Smrg      -1,   225,    -1,   235,    -1,   189,    -1,   225,    -1,   236,
782848b8605Smrg      -1,   188,    -1,   226,    -1,   235,    -1,   189,    -1,    73,
783848b8605Smrg     213,    -1,    73,   190,    -1,    73,   192,    -1,    73,   195,
784848b8605Smrg      -1,    73,   197,    -1,    73,   203,    -1,    73,   199,    -1,
785848b8605Smrg      73,   206,    -1,    73,   208,    -1,    73,   210,    -1,    73,
786848b8605Smrg     212,    -1,    73,   224,    -1,    47,   253,   191,    -1,   201,
787848b8605Smrg      -1,    33,    -1,    69,    -1,    43,   111,   202,   112,   193,
788848b8605Smrg      -1,   201,    -1,    60,    -1,    26,    -1,    72,   194,    -1,
789848b8605Smrg      40,    -1,    32,    -1,    44,   196,    -1,    25,    -1,   253,
790848b8605Smrg      67,    -1,    45,   111,   202,   112,   253,   198,    -1,   201,
791848b8605Smrg      -1,    75,   257,   200,    -1,    29,    -1,    25,    -1,    31,
792848b8605Smrg      -1,    71,    -1,    23,    -1,    76,   255,   204,   205,    -1,
793848b8605Smrg      35,    -1,    54,    -1,    79,    -1,    80,    -1,    78,    -1,
794848b8605Smrg      77,    -1,    36,   207,    -1,    29,    -1,    56,    -1,    28,
795848b8605Smrg     111,   209,   112,    57,    -1,    23,    -1,    58,   211,    -1,
796848b8605Smrg      70,    -1,    26,    -1,   215,    66,   111,   218,   112,    -1,
797848b8605Smrg     215,   214,    -1,    -1,    66,   111,   218,   106,   218,   112,
798848b8605Smrg      -1,    49,   219,   216,    -1,    -1,   217,    -1,    41,    -1,
799848b8605Smrg      82,    -1,    42,    -1,    23,    -1,    51,   220,    -1,    63,
800848b8605Smrg      -1,    52,    -1,    81,   255,    -1,    55,   111,   222,   112,
801848b8605Smrg      -1,    48,   111,   223,   112,    -1,    -1,   111,   221,   112,
802848b8605Smrg      -1,    23,    -1,    23,    -1,    23,    -1,    30,    64,    -1,
803848b8605Smrg     229,    -1,   232,    -1,   227,    -1,   230,    -1,    62,    34,
804848b8605Smrg     111,   228,   112,    -1,   233,    -1,   233,   106,   233,    -1,
805848b8605Smrg      62,    34,   111,   233,   112,    -1,    62,    46,   111,   231,
806848b8605Smrg     112,    -1,   234,    -1,   234,   106,   234,    -1,    62,    46,
807848b8605Smrg     111,   234,   112,    -1,    23,    -1,    23,    -1,   237,    -1,
808848b8605Smrg     239,    -1,   238,    -1,   239,    -1,   240,    -1,    24,    -1,
809848b8605Smrg      23,    -1,   118,   240,   119,    -1,   118,   240,   109,   240,
810848b8605Smrg     119,    -1,   118,   240,   109,   240,   109,   240,   119,    -1,
811848b8605Smrg     118,   240,   109,   240,   109,   240,   109,   240,   119,    -1,
812848b8605Smrg     241,    24,    -1,   241,    23,    -1,   113,    -1,   114,    -1,
813848b8605Smrg      -1,    -1,   244,    11,   243,   247,    -1,   262,    -1,    -1,
814848b8605Smrg      -1,     5,   246,   247,    -1,   247,   109,    99,    -1,    99,
815848b8605Smrg      -1,   244,     9,    99,   117,   249,    -1,    65,    60,    -1,
816848b8605Smrg      65,    37,    -1,    65,   250,    -1,    65,    59,    -1,    65,
817848b8605Smrg      74,   255,    -1,    65,    30,    -1,    29,   251,   252,    -1,
818848b8605Smrg      -1,   111,    23,   112,    -1,    39,    -1,    27,    -1,    -1,
819848b8605Smrg      61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,    -1,
820848b8605Smrg      61,    -1,    68,    -1,    -1,   111,   258,   112,    -1,    -1,
821848b8605Smrg     111,   259,   112,    -1,    -1,   111,   260,   112,    -1,    23,
822848b8605Smrg      -1,    23,    -1,    23,    -1,     6,    99,   117,   100,    -1,
823848b8605Smrg      99,    -1,   100,    -1
824848b8605Smrg};
825848b8605Smrg
826848b8605Smrg/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
827848b8605Smrgstatic const yytype_uint16 yyrline[] =
828848b8605Smrg{
829848b8605Smrg       0,   284,   284,   287,   295,   307,   308,   311,   335,   336,
830848b8605Smrg     339,   354,   357,   362,   369,   370,   371,   372,   373,   374,
831848b8605Smrg     375,   378,   379,   380,   383,   389,   397,   403,   410,   416,
832848b8605Smrg     423,   467,   472,   481,   525,   531,   532,   533,   534,   535,
833848b8605Smrg     536,   537,   538,   539,   540,   541,   542,   545,   557,   565,
834848b8605Smrg     582,   589,   608,   619,   639,   663,   670,   703,   710,   726,
835848b8605Smrg     785,   828,   837,   859,   869,   873,   902,   921,   921,   923,
836848b8605Smrg     930,   942,   943,   944,   947,   961,   975,   995,  1006,  1018,
837848b8605Smrg    1020,  1021,  1022,  1023,  1026,  1026,  1026,  1026,  1027,  1030,
838848b8605Smrg    1034,  1039,  1045,  1052,  1059,  1081,  1103,  1104,  1105,  1106,
839848b8605Smrg    1107,  1108,  1111,  1130,  1134,  1140,  1144,  1148,  1152,  1156,
840848b8605Smrg    1160,  1164,  1169,  1175,  1186,  1186,  1187,  1189,  1193,  1197,
841848b8605Smrg    1201,  1207,  1207,  1209,  1227,  1253,  1256,  1271,  1277,  1283,
842848b8605Smrg    1284,  1291,  1297,  1303,  1311,  1317,  1323,  1331,  1337,  1343,
843848b8605Smrg    1351,  1352,  1355,  1356,  1357,  1358,  1359,  1360,  1361,  1362,
844848b8605Smrg    1363,  1364,  1365,  1368,  1377,  1381,  1385,  1391,  1400,  1404,
845848b8605Smrg    1408,  1417,  1421,  1427,  1433,  1440,  1445,  1453,  1463,  1465,
846848b8605Smrg    1473,  1479,  1483,  1487,  1493,  1504,  1513,  1517,  1522,  1526,
847848b8605Smrg    1530,  1534,  1540,  1547,  1551,  1557,  1565,  1576,  1583,  1587,
848848b8605Smrg    1593,  1603,  1614,  1618,  1636,  1645,  1648,  1654,  1658,  1662,
849848b8605Smrg    1668,  1679,  1684,  1689,  1694,  1699,  1704,  1712,  1715,  1720,
850848b8605Smrg    1733,  1741,  1752,  1760,  1760,  1762,  1762,  1764,  1774,  1779,
851848b8605Smrg    1786,  1796,  1805,  1810,  1817,  1827,  1837,  1849,  1849,  1850,
852848b8605Smrg    1850,  1852,  1862,  1870,  1880,  1888,  1896,  1905,  1916,  1920,
853848b8605Smrg    1926,  1927,  1928,  1931,  1931,  1934,  1969,  1973,  1973,  1976,
854848b8605Smrg    1983,  1992,  2006,  2015,  2024,  2028,  2037,  2046,  2057,  2064,
855848b8605Smrg    2074,  2102,  2111,  2123,  2126,  2135,  2146,  2147,  2148,  2151,
856848b8605Smrg    2152,  2153,  2156,  2157,  2160,  2161,  2164,  2165,  2168,  2179,
857848b8605Smrg    2190,  2201,  2227,  2228
858848b8605Smrg};
859848b8605Smrg#endif
860848b8605Smrg
861848b8605Smrg#if YYDEBUG || YYERROR_VERBOSE || 1
862848b8605Smrg/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
863848b8605Smrg   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
864848b8605Smrgstatic const char *const yytname[] =
865848b8605Smrg{
866848b8605Smrg  "$end", "error", "$undefined", "ARBvp_10", "ARBfp_10", "ADDRESS",
867848b8605Smrg  "ALIAS", "ATTRIB", "OPTION", "OUTPUT", "PARAM", "TEMP", "END", "BIN_OP",
868848b8605Smrg  "BINSC_OP", "SAMPLE_OP", "SCALAR_OP", "TRI_OP", "VECTOR_OP", "ARL",
869848b8605Smrg  "KIL", "SWZ", "TXD_OP", "INTEGER", "REAL", "AMBIENT", "ATTENUATION",
870848b8605Smrg  "BACK", "CLIP", "COLOR", "DEPTH", "DIFFUSE", "DIRECTION", "EMISSION",
871848b8605Smrg  "ENV", "EYE", "FOG", "FOGCOORD", "FRAGMENT", "FRONT", "HALF", "INVERSE",
872848b8605Smrg  "INVTRANS", "LIGHT", "LIGHTMODEL", "LIGHTPROD", "LOCAL", "MATERIAL",
873848b8605Smrg  "MAT_PROGRAM", "MATRIX", "MATRIXINDEX", "MODELVIEW", "MVP", "NORMAL",
874848b8605Smrg  "OBJECT", "PALETTE", "PARAMS", "PLANE", "POINT_TOK", "POINTSIZE",
875848b8605Smrg  "POSITION", "PRIMARY", "PROGRAM", "PROJECTION", "RANGE", "RESULT", "ROW",
876848b8605Smrg  "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE_TOK", "SPECULAR", "SPOT",
877848b8605Smrg  "STATE", "TEXCOORD", "TEXENV", "TEXGEN", "TEXGEN_Q", "TEXGEN_R",
878848b8605Smrg  "TEXGEN_S", "TEXGEN_T", "TEXTURE", "TRANSPOSE", "TEXTURE_UNIT", "TEX_1D",
879848b8605Smrg  "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "TEX_SHADOW1D",
880848b8605Smrg  "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
881848b8605Smrg  "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
882848b8605Smrg  "WEIGHT", "IDENTIFIER", "USED_IDENTIFIER", "MASK4", "MASK3", "MASK2",
883848b8605Smrg  "MASK1", "SWIZZLE", "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'",
884848b8605Smrg  "'+'", "'-'", "'('", "')'", "'='", "'{'", "'}'", "$accept", "program",
885848b8605Smrg  "language", "optionSequence", "option", "statementSequence", "statement",
886848b8605Smrg  "instruction", "ALU_instruction", "TexInstruction", "ARL_instruction",
887848b8605Smrg  "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
888848b8605Smrg  "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
889848b8605Smrg  "KIL_instruction", "TXD_instruction", "texImageUnit", "texTarget",
890848b8605Smrg  "SWZ_instruction", "scalarSrcReg", "scalarUse", "swizzleSrcReg",
891848b8605Smrg  "maskedDstReg", "maskedAddrReg", "extendedSwizzle", "extSwizComp",
892848b8605Smrg  "extSwizSel", "srcReg", "dstReg", "progParamArray", "progParamArrayMem",
893848b8605Smrg  "progParamArrayAbs", "progParamArrayRel", "addrRegRelOffset",
894848b8605Smrg  "addrRegPosOffset", "addrRegNegOffset", "addrReg", "addrComponent",
895848b8605Smrg  "addrWriteMask", "scalarSuffix", "swizzleSuffix", "optionalMask",
896848b8605Smrg  "optionalCcMask", "ccTest", "ccTest2", "ccMaskRule", "ccMaskRule2",
897848b8605Smrg  "namingStatement", "ATTRIB_statement", "attribBinding", "vtxAttribItem",
898848b8605Smrg  "vtxAttribNum", "vtxOptWeightNum", "vtxWeightNum", "fragAttribItem",
899848b8605Smrg  "PARAM_statement", "PARAM_singleStmt", "PARAM_multipleStmt",
900848b8605Smrg  "optArraySize", "paramSingleInit", "paramMultipleInit",
901848b8605Smrg  "paramMultInitList", "paramSingleItemDecl", "paramSingleItemUse",
902848b8605Smrg  "paramMultipleItem", "stateMultipleItem", "stateSingleItem",
903848b8605Smrg  "stateMaterialItem", "stateMatProperty", "stateLightItem",
904848b8605Smrg  "stateLightProperty", "stateSpotProperty", "stateLightModelItem",
905848b8605Smrg  "stateLModProperty", "stateLightProdItem", "stateLProdProperty",
906848b8605Smrg  "stateTexEnvItem", "stateTexEnvProperty", "ambDiffSpecProperty",
907848b8605Smrg  "stateLightNumber", "stateTexGenItem", "stateTexGenType",
908848b8605Smrg  "stateTexGenCoord", "stateFogItem", "stateFogProperty",
909848b8605Smrg  "stateClipPlaneItem", "stateClipPlaneNum", "statePointItem",
910848b8605Smrg  "statePointProperty", "stateMatrixRow", "stateMatrixRows",
911848b8605Smrg  "optMatrixRows", "stateMatrixItem", "stateOptMatModifier",
912848b8605Smrg  "stateMatModifier", "stateMatrixRowNum", "stateMatrixName",
913848b8605Smrg  "stateOptModMatNum", "stateModMatNum", "statePaletteMatNum",
914848b8605Smrg  "stateProgramMatNum", "stateDepthItem", "programSingleItem",
915848b8605Smrg  "programMultipleItem", "progEnvParams", "progEnvParamNums",
916848b8605Smrg  "progEnvParam", "progLocalParams", "progLocalParamNums",
917848b8605Smrg  "progLocalParam", "progEnvParamNum", "progLocalParamNum",
918848b8605Smrg  "paramConstDecl", "paramConstUse", "paramConstScalarDecl",
919848b8605Smrg  "paramConstScalarUse", "paramConstVector", "signedFloatConstant",
920848b8605Smrg  "optionalSign", "TEMP_statement", "@1", "optVarSize",
921848b8605Smrg  "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
922848b8605Smrg  "resultBinding", "resultColBinding", "optResultFaceType",
923848b8605Smrg  "optResultColorType", "optFaceType", "optColorType",
924848b8605Smrg  "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
925848b8605Smrg  "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
926848b8605Smrg  "ALIAS_statement", "string", YY_NULL
927848b8605Smrg};
928848b8605Smrg#endif
929848b8605Smrg
930848b8605Smrg# ifdef YYPRINT
931848b8605Smrg/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
932848b8605Smrg   token YYLEX-NUM.  */
933848b8605Smrgstatic const yytype_uint16 yytoknum[] =
934848b8605Smrg{
935848b8605Smrg       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
936848b8605Smrg     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
937848b8605Smrg     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
938848b8605Smrg     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
939848b8605Smrg     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
940848b8605Smrg     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
941848b8605Smrg     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
942848b8605Smrg     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
943848b8605Smrg     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
944848b8605Smrg     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
945848b8605Smrg     355,   356,   357,   358,   359,   360,   361,   362,    59,    44,
946848b8605Smrg     124,    91,    93,    43,    45,    40,    41,    61,   123,   125
947848b8605Smrg};
948848b8605Smrg# endif
949848b8605Smrg
950848b8605Smrg/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
951848b8605Smrgstatic const yytype_uint16 yyr1[] =
952848b8605Smrg{
953848b8605Smrg       0,   120,   121,   122,   122,   123,   123,   124,   125,   125,
954848b8605Smrg     126,   126,   127,   127,   128,   128,   128,   128,   128,   128,
955848b8605Smrg     128,   129,   129,   129,   130,   131,   132,   133,   134,   135,
956848b8605Smrg     136,   137,   137,   138,   139,   140,   140,   140,   140,   140,
957848b8605Smrg     140,   140,   140,   140,   140,   140,   140,   141,   142,   142,
958848b8605Smrg     143,   143,   144,   144,   145,   146,   147,   148,   149,   149,
959848b8605Smrg     150,   150,   150,   150,   151,   151,   152,   153,   153,   154,
960848b8605Smrg     155,   156,   156,   156,   157,   158,   159,   160,   161,   162,
961848b8605Smrg     163,   163,   163,   163,   164,   164,   164,   164,   164,   165,
962848b8605Smrg     165,   165,   166,   167,   168,   169,   170,   170,   170,   170,
963848b8605Smrg     170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
964848b8605Smrg     173,   173,   173,   174,   175,   175,   176,   177,   177,   177,
965848b8605Smrg     177,   178,   178,   179,   180,   181,   181,   182,   183,   184,
966848b8605Smrg     184,   185,   185,   185,   186,   186,   186,   187,   187,   187,
967848b8605Smrg     188,   188,   189,   189,   189,   189,   189,   189,   189,   189,
968848b8605Smrg     189,   189,   189,   190,   191,   191,   191,   192,   193,   193,
969848b8605Smrg     193,   193,   193,   194,   195,   196,   196,   197,   198,   199,
970848b8605Smrg     200,   201,   201,   201,   202,   203,   204,   204,   205,   205,
971848b8605Smrg     205,   205,   206,   207,   207,   208,   209,   210,   211,   211,
972848b8605Smrg     212,   213,   214,   214,   215,   216,   216,   217,   217,   217,
973848b8605Smrg     218,   219,   219,   219,   219,   219,   219,   220,   220,   221,
974848b8605Smrg     222,   223,   224,   225,   225,   226,   226,   227,   228,   228,
975848b8605Smrg     229,   230,   231,   231,   232,   233,   234,   235,   235,   236,
976848b8605Smrg     236,   237,   238,   238,   239,   239,   239,   239,   240,   240,
977848b8605Smrg     241,   241,   241,   243,   242,   244,   244,   246,   245,   247,
978848b8605Smrg     247,   248,   249,   249,   249,   249,   249,   249,   250,   251,
979848b8605Smrg     251,   251,   251,   252,   252,   252,   253,   253,   253,   254,
980848b8605Smrg     254,   254,   255,   255,   256,   256,   257,   257,   258,   259,
981848b8605Smrg     260,   261,   262,   262
982848b8605Smrg};
983848b8605Smrg
984848b8605Smrg/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
985848b8605Smrgstatic const yytype_uint8 yyr2[] =
986848b8605Smrg{
987848b8605Smrg       0,     2,     4,     1,     1,     2,     0,     3,     2,     0,
988848b8605Smrg       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
989848b8605Smrg       1,     1,     1,     1,     4,     4,     4,     6,     6,     8,
990848b8605Smrg       8,     2,     2,    12,     2,     1,     1,     1,     1,     1,
991848b8605Smrg       1,     1,     1,     1,     1,     1,     1,     6,     2,     4,
992848b8605Smrg       2,     1,     3,     5,     3,     2,     7,     2,     1,     1,
993848b8605Smrg       1,     1,     4,     1,     1,     1,     1,     1,     1,     1,
994848b8605Smrg       3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
995848b8605Smrg       1,     1,     1,     0,     1,     1,     1,     1,     0,     3,
996848b8605Smrg       3,     0,     2,     2,     1,     1,     1,     1,     1,     1,
997848b8605Smrg       1,     1,     4,     2,     2,     1,     2,     1,     2,     1,
998848b8605Smrg       2,     4,     4,     1,     0,     3,     1,     1,     2,     1,
999848b8605Smrg       2,     1,     1,     3,     6,     0,     1,     2,     4,     1,
1000848b8605Smrg       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
1001848b8605Smrg       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1002848b8605Smrg       2,     2,     2,     3,     1,     1,     1,     5,     1,     1,
1003848b8605Smrg       1,     2,     1,     1,     2,     1,     2,     6,     1,     3,
1004848b8605Smrg       1,     1,     1,     1,     1,     4,     1,     1,     1,     1,
1005848b8605Smrg       1,     1,     2,     1,     1,     5,     1,     2,     1,     1,
1006848b8605Smrg       5,     2,     0,     6,     3,     0,     1,     1,     1,     1,
1007848b8605Smrg       1,     2,     1,     1,     2,     4,     4,     0,     3,     1,
1008848b8605Smrg       1,     1,     2,     1,     1,     1,     1,     5,     1,     3,
1009848b8605Smrg       5,     5,     1,     3,     5,     1,     1,     1,     1,     1,
1010848b8605Smrg       1,     1,     1,     1,     3,     5,     7,     9,     2,     2,
1011848b8605Smrg       1,     1,     0,     0,     4,     1,     0,     0,     3,     3,
1012848b8605Smrg       1,     5,     2,     2,     2,     2,     3,     2,     3,     0,
1013848b8605Smrg       3,     1,     1,     0,     1,     1,     0,     1,     1,     0,
1014848b8605Smrg       1,     1,     0,     3,     0,     3,     0,     3,     1,     1,
1015848b8605Smrg       1,     4,     1,     1
1016848b8605Smrg};
1017848b8605Smrg
1018848b8605Smrg/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1019848b8605Smrg   Performed when YYTABLE doesn't specify something else to do.  Zero
1020848b8605Smrg   means the default is an error.  */
1021848b8605Smrgstatic const yytype_uint16 yydefact[] =
1022848b8605Smrg{
1023848b8605Smrg       0,     3,     4,     0,     6,     1,     9,     0,     5,   246,
1024848b8605Smrg     282,   283,     0,   247,     0,     0,     0,     2,     0,     0,
1025848b8605Smrg       0,     0,     0,     0,     0,   242,     0,     0,     8,     0,
1026848b8605Smrg      12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
1027848b8605Smrg      23,    20,     0,    96,    97,   121,   122,    98,     0,    99,
1028848b8605Smrg     100,   101,   245,     7,     0,     0,     0,     0,     0,    65,
1029848b8605Smrg       0,    88,    64,     0,     0,     0,     0,     0,    76,     0,
1030848b8605Smrg       0,    94,   240,   241,    31,    32,    83,     0,     0,     0,
1031848b8605Smrg      10,    11,     0,   243,   250,   248,     0,     0,   125,   242,
1032848b8605Smrg     123,   259,   257,   253,   255,   252,   272,   254,   242,    84,
1033848b8605Smrg      85,    86,    87,    91,   242,   242,   242,   242,   242,   242,
1034848b8605Smrg      78,    55,    81,    80,    82,    92,   233,   232,     0,     0,
1035848b8605Smrg       0,     0,    60,     0,   242,    83,     0,    61,    63,   134,
1036848b8605Smrg     135,   213,   214,   136,   229,   230,     0,   242,     0,     0,
1037848b8605Smrg       0,   281,   102,   126,     0,   127,   131,   132,   133,   227,
1038848b8605Smrg     228,   231,     0,   262,   261,     0,   263,     0,   256,     0,
1039848b8605Smrg       0,    54,     0,     0,     0,    26,     0,    25,    24,   269,
1040848b8605Smrg     119,   117,   272,   104,     0,     0,     0,     0,     0,     0,
1041848b8605Smrg     266,     0,   266,     0,     0,   276,   272,   142,   143,   144,
1042848b8605Smrg     145,   147,   146,   148,   149,   150,   151,     0,   152,   269,
1043848b8605Smrg     109,     0,   107,   105,   272,     0,   114,   103,    83,     0,
1044848b8605Smrg      52,     0,     0,     0,     0,   244,   249,     0,   239,   238,
1045848b8605Smrg       0,   264,   265,   258,   278,     0,   242,    95,     0,     0,
1046848b8605Smrg      83,   242,     0,    48,     0,    51,     0,   242,   270,   271,
1047848b8605Smrg     118,   120,     0,     0,     0,   212,   183,   184,   182,     0,
1048848b8605Smrg     165,   268,   267,   164,     0,     0,     0,     0,   207,   203,
1049848b8605Smrg       0,   202,   272,   195,   189,   188,   187,     0,     0,     0,
1050848b8605Smrg       0,   108,     0,   110,     0,     0,   106,     0,   242,   234,
1051848b8605Smrg      69,     0,    67,    68,     0,   242,   242,   251,     0,   124,
1052848b8605Smrg     260,   273,    28,    89,    90,    93,    27,     0,    79,    50,
1053848b8605Smrg     274,     0,     0,   225,     0,   226,     0,   186,     0,   174,
1054848b8605Smrg       0,   166,     0,   171,   172,   155,   156,   173,   153,   154,
1055848b8605Smrg       0,     0,   201,     0,   204,   197,   199,   198,   194,   196,
1056848b8605Smrg     280,     0,   170,   169,   176,   177,     0,     0,   116,     0,
1057848b8605Smrg     113,     0,     0,    53,     0,    62,    77,    71,    47,     0,
1058848b8605Smrg       0,     0,   242,    49,     0,    34,     0,   242,   220,   224,
1059848b8605Smrg       0,     0,   266,   211,     0,   209,     0,   210,     0,   277,
1060848b8605Smrg     181,   180,   178,   179,   175,   200,     0,   111,   112,   115,
1061848b8605Smrg     242,   235,     0,     0,    70,   242,    58,    57,    59,   242,
1062848b8605Smrg       0,     0,     0,   129,   137,   140,   138,   215,   216,   139,
1063848b8605Smrg     279,     0,    35,    36,    37,    38,    39,    40,    41,    42,
1064848b8605Smrg      43,    44,    45,    46,    30,    29,   185,   160,   162,   159,
1065848b8605Smrg       0,   157,   158,     0,   206,   208,   205,   190,     0,    74,
1066848b8605Smrg      72,    75,    73,     0,     0,     0,     0,   141,   192,   242,
1067848b8605Smrg     128,   275,   163,   161,   167,   168,   242,   236,   242,     0,
1068848b8605Smrg       0,     0,     0,   191,   130,     0,     0,     0,     0,   218,
1069848b8605Smrg       0,   222,     0,   237,   242,     0,   217,     0,   221,     0,
1070848b8605Smrg       0,    56,    33,   219,   223,     0,     0,   193
1071848b8605Smrg};
1072848b8605Smrg
1073848b8605Smrg/* YYDEFGOTO[NTERM-NUM].  */
1074848b8605Smrgstatic const yytype_int16 yydefgoto[] =
1075848b8605Smrg{
1076848b8605Smrg      -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
1077848b8605Smrg      32,    33,    34,    35,    36,    37,    38,    39,    40,   301,
1078848b8605Smrg     414,    41,   162,   233,    74,    60,    69,   348,   349,   387,
1079848b8605Smrg     234,    61,   126,   281,   282,   283,   384,   430,   432,    70,
1080848b8605Smrg     347,   111,   299,   115,   103,   161,    75,   229,    76,   230,
1081848b8605Smrg      42,    43,   127,   207,   341,   276,   339,   173,    44,    45,
1082848b8605Smrg      46,   144,    90,   289,   392,   145,   128,   393,   394,   129,
1083848b8605Smrg     187,   318,   188,   421,   443,   189,   253,   190,   444,   191,
1084848b8605Smrg     333,   319,   310,   192,   336,   374,   193,   248,   194,   308,
1085848b8605Smrg     195,   266,   196,   437,   453,   197,   328,   329,   376,   263,
1086848b8605Smrg     322,   366,   368,   364,   198,   130,   396,   397,   458,   131,
1087848b8605Smrg     398,   460,   132,   304,   306,   399,   133,   149,   134,   135,
1088848b8605Smrg     151,    77,    47,   139,    48,    49,    54,    85,    50,    62,
1089848b8605Smrg      97,   156,   223,   254,   240,   158,   355,   268,   225,   401,
1090848b8605Smrg     331,    51,    12
1091848b8605Smrg};
1092848b8605Smrg
1093848b8605Smrg/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1094848b8605Smrg   STATE-NUM.  */
1095848b8605Smrg#define YYPACT_NINF -398
1096848b8605Smrgstatic const yytype_int16 yypact[] =
1097848b8605Smrg{
1098848b8605Smrg      52,  -398,  -398,    14,  -398,  -398,    67,   152,  -398,    24,
1099848b8605Smrg    -398,  -398,     5,  -398,    47,    81,    99,  -398,    -1,    -1,
1100848b8605Smrg      -1,    -1,    -1,    -1,    43,    56,    -1,    -1,  -398,    97,
1101848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1102848b8605Smrg    -398,  -398,   112,  -398,  -398,  -398,  -398,  -398,   156,  -398,
1103848b8605Smrg    -398,  -398,  -398,  -398,   111,    98,   141,    95,   127,  -398,
1104848b8605Smrg      84,   142,  -398,   146,   150,   153,   157,   158,  -398,   159,
1105848b8605Smrg     165,  -398,  -398,  -398,  -398,  -398,   113,   -13,   161,   163,
1106848b8605Smrg    -398,  -398,   162,  -398,  -398,   164,   174,    10,   252,    -3,
1107848b8605Smrg    -398,   -11,  -398,  -398,  -398,  -398,   166,  -398,   -20,  -398,
1108848b8605Smrg    -398,  -398,  -398,   167,   -20,   -20,   -20,   -20,   -20,   -20,
1109848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   137,    70,
1110848b8605Smrg     132,    85,   168,    34,   -20,   113,   169,  -398,  -398,  -398,
1111848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,    34,   -20,   171,   111,
1112848b8605Smrg     179,  -398,  -398,  -398,   172,  -398,  -398,  -398,  -398,  -398,
1113848b8605Smrg    -398,  -398,   216,  -398,  -398,   253,    76,   258,  -398,   176,
1114848b8605Smrg     154,  -398,   178,    29,   180,  -398,   181,  -398,  -398,   110,
1115848b8605Smrg    -398,  -398,   166,  -398,   175,   182,   183,   219,    32,   184,
1116848b8605Smrg     177,   186,    94,   140,     7,   187,   166,  -398,  -398,  -398,
1117848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,   226,  -398,   110,
1118848b8605Smrg    -398,   188,  -398,  -398,   166,   189,   190,  -398,   113,     9,
1119848b8605Smrg    -398,     1,   193,   195,   240,   164,  -398,   191,  -398,  -398,
1120848b8605Smrg     194,  -398,  -398,  -398,  -398,   197,   -20,  -398,   196,   198,
1121848b8605Smrg     113,   -20,    34,  -398,   203,   206,   228,   -20,  -398,  -398,
1122848b8605Smrg    -398,  -398,   290,   292,   293,  -398,  -398,  -398,  -398,   294,
1123848b8605Smrg    -398,  -398,  -398,  -398,   251,   294,    48,   208,   209,  -398,
1124848b8605Smrg     210,  -398,   166,    21,  -398,  -398,  -398,   299,   295,    12,
1125848b8605Smrg     212,  -398,   302,  -398,   304,   302,  -398,   218,   -20,  -398,
1126848b8605Smrg    -398,   217,  -398,  -398,   227,   -20,   -20,  -398,   214,  -398,
1127848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,   220,  -398,  -398,
1128848b8605Smrg     222,   225,   229,  -398,   223,  -398,   224,  -398,   230,  -398,
1129848b8605Smrg     231,  -398,   233,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1130848b8605Smrg     314,   316,  -398,   317,  -398,  -398,  -398,  -398,  -398,  -398,
1131848b8605Smrg    -398,   234,  -398,  -398,  -398,  -398,   170,   318,  -398,   235,
1132848b8605Smrg    -398,   236,   237,  -398,    44,  -398,  -398,   143,  -398,   244,
1133848b8605Smrg     -15,   245,    36,  -398,   332,  -398,   138,   -20,  -398,  -398,
1134848b8605Smrg     301,   101,    94,  -398,   248,  -398,   249,  -398,   250,  -398,
1135848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,   254,  -398,  -398,  -398,
1136848b8605Smrg     -20,  -398,   333,   340,  -398,   -20,  -398,  -398,  -398,   -20,
1137848b8605Smrg     102,   132,    75,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1138848b8605Smrg    -398,   255,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1139848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1140848b8605Smrg     336,  -398,  -398,    49,  -398,  -398,  -398,  -398,    90,  -398,
1141848b8605Smrg    -398,  -398,  -398,   256,   260,   259,   261,  -398,   298,    36,
1142848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,   -20,  -398,   -20,   228,
1143848b8605Smrg     290,   292,   262,  -398,  -398,   257,   265,   268,   266,   273,
1144848b8605Smrg     269,   274,   318,  -398,   -20,   138,  -398,   290,  -398,   292,
1145848b8605Smrg     107,  -398,  -398,  -398,  -398,   318,   270,  -398
1146848b8605Smrg};
1147848b8605Smrg
1148848b8605Smrg/* YYPGOTO[NTERM-NUM].  */
1149848b8605Smrgstatic const yytype_int16 yypgoto[] =
1150848b8605Smrg{
1151848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1152848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   -78,
1153848b8605Smrg     -82,  -398,  -100,   155,   -86,   215,  -398,  -398,  -372,  -398,
1154848b8605Smrg     -54,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,   173,
1155848b8605Smrg    -398,  -398,  -398,  -118,  -398,  -398,   232,  -398,  -398,  -398,
1156848b8605Smrg    -398,  -398,   303,  -398,  -398,  -398,   114,  -398,  -398,  -398,
1157848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,   -53,  -398,   -88,
1158848b8605Smrg    -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1159848b8605Smrg    -398,  -334,   130,  -398,  -398,  -398,  -398,  -398,  -398,  -398,
1160848b8605Smrg    -398,  -398,  -398,  -398,  -398,     0,  -398,  -398,  -397,  -398,
1161848b8605Smrg    -398,  -398,  -398,  -398,  -398,   305,  -398,  -398,  -398,  -398,
1162848b8605Smrg    -398,  -398,  -398,  -396,  -383,   306,  -398,  -398,  -137,   -87,
1163848b8605Smrg    -120,   -89,  -398,  -398,  -398,  -398,  -398,   263,  -398,   185,
1164848b8605Smrg    -398,  -398,  -398,  -177,   199,  -154,  -398,  -398,  -398,  -398,
1165848b8605Smrg    -398,  -398,    -6
1166848b8605Smrg};
1167848b8605Smrg
1168848b8605Smrg/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
1169848b8605Smrg   positive, shift that token.  If negative, reduce the rule which
1170848b8605Smrg   number is the opposite.  If YYTABLE_NINF, syntax error.  */
1171848b8605Smrg#define YYTABLE_NINF -230
1172848b8605Smrgstatic const yytype_int16 yytable[] =
1173848b8605Smrg{
1174848b8605Smrg     152,   146,   150,    52,   209,   256,   165,   210,   386,   168,
1175848b8605Smrg     116,   117,   159,   433,     5,   163,   153,   163,   241,   164,
1176848b8605Smrg     163,   166,   167,   125,   280,   118,   235,   422,   154,    13,
1177848b8605Smrg      14,    15,   269,   264,    16,   152,    17,    18,    19,    20,
1178848b8605Smrg      21,    22,    23,    24,    25,    26,    27,   334,   118,   119,
1179848b8605Smrg     273,   213,   116,   117,   459,     1,     2,   116,   117,   119,
1180848b8605Smrg     120,   246,   325,   326,    58,   470,   335,   118,   461,   208,
1181848b8605Smrg     120,   473,   118,   313,   313,     7,   456,   265,   476,   314,
1182848b8605Smrg     314,   315,   212,   121,    10,    11,   474,   122,   247,   445,
1183848b8605Smrg     277,   119,   471,    72,    73,   235,   119,   123,   390,    59,
1184848b8605Smrg     155,    68,   120,   327,   174,   124,   121,   120,   324,   391,
1185848b8605Smrg      72,    73,   295,    53,   199,   124,   175,   316,   278,   317,
1186848b8605Smrg     317,   251,   200,    10,    11,   121,   313,   417,   279,   122,
1187848b8605Smrg     121,   296,   314,   252,   122,   201,   435,   221,   202,   232,
1188848b8605Smrg     292,   418,   163,    68,   222,   203,    55,   124,   436,    72,
1189848b8605Smrg      73,   302,   124,   380,   124,    71,    91,    92,   344,   204,
1190848b8605Smrg     176,   419,   177,   381,    93,    82,   169,    83,   178,    72,
1191848b8605Smrg      73,   238,   317,   420,   170,   179,   180,   181,   239,   182,
1192848b8605Smrg      56,   183,   205,   206,   439,   423,    94,    95,   257,   152,
1193848b8605Smrg     184,   258,   259,    98,   440,   260,   350,   171,    57,   446,
1194848b8605Smrg     351,    96,   250,   261,   251,    80,    88,   185,   186,   447,
1195848b8605Smrg      84,   172,    89,   475,   112,    86,   252,   113,   114,   427,
1196848b8605Smrg      81,   262,   402,   403,   404,   405,   406,   407,   408,   409,
1197848b8605Smrg     410,   411,   412,   413,    63,    64,    65,    66,    67,   218,
1198848b8605Smrg     219,    78,    79,    99,   100,   101,   102,   370,   371,   372,
1199848b8605Smrg     373,    10,    11,    71,   227,   104,   382,   383,    87,   105,
1200848b8605Smrg     428,   138,   106,   152,   395,   150,   107,   108,   109,   110,
1201848b8605Smrg     136,   415,   137,   140,   141,   143,   220,   157,   216,   -66,
1202848b8605Smrg     211,   224,   160,   245,   217,   226,   242,   231,   214,   236,
1203848b8605Smrg     237,   152,   270,   243,   244,   249,   350,   255,   267,   272,
1204848b8605Smrg     274,   275,   285,   434,   286,    58,   290,   298,   288,   291,
1205848b8605Smrg    -229,   300,   293,   303,   294,   305,   307,   309,   311,   320,
1206848b8605Smrg     321,   323,   330,   337,   332,   338,   455,   340,   343,   345,
1207848b8605Smrg     353,   346,   352,   354,   356,   358,   359,   363,   357,   365,
1208848b8605Smrg     367,   375,   360,   361,   388,   362,   369,   377,   378,   379,
1209848b8605Smrg     152,   395,   150,   385,   389,   400,   429,   152,   416,   350,
1210848b8605Smrg     424,   425,   426,   431,   452,   448,   427,   441,   442,   449,
1211848b8605Smrg     450,   457,   451,   462,   464,   350,   463,   465,   466,   467,
1212848b8605Smrg     469,   468,   477,   472,   284,   312,   454,   297,     0,   342,
1213848b8605Smrg     142,   438,   228,     0,   147,   148,     0,     0,   271,   287,
1214848b8605Smrg       0,     0,   215
1215848b8605Smrg};
1216848b8605Smrg
1217848b8605Smrg#define yypact_value_is_default(Yystate) \
1218848b8605Smrg  (!!((Yystate) == (-398)))
1219848b8605Smrg
1220848b8605Smrg#define yytable_value_is_error(Yytable_value) \
1221848b8605Smrg  YYID (0)
1222848b8605Smrg
1223848b8605Smrgstatic const yytype_int16 yycheck[] =
1224848b8605Smrg{
1225848b8605Smrg      89,    89,    89,     9,   124,   182,   106,   125,    23,   109,
1226848b8605Smrg      23,    24,    98,   385,     0,   104,    27,   106,   172,   105,
1227848b8605Smrg     109,   107,   108,    77,    23,    38,   163,   361,    39,     5,
1228848b8605Smrg       6,     7,   186,    26,    10,   124,    12,    13,    14,    15,
1229848b8605Smrg      16,    17,    18,    19,    20,    21,    22,    35,    38,    62,
1230848b8605Smrg     204,   137,    23,    24,   450,     3,     4,    23,    24,    62,
1231848b8605Smrg      73,    29,    41,    42,    65,   462,    54,    38,   451,   123,
1232848b8605Smrg      73,   467,    38,    25,    25,     8,   448,    70,   475,    31,
1233848b8605Smrg      31,    33,   136,    96,    99,   100,   469,   100,    56,   423,
1234848b8605Smrg     208,    62,   464,   113,   114,   232,    62,   110,    62,   100,
1235848b8605Smrg     111,   100,    73,    82,    34,   118,    96,    73,   262,    73,
1236848b8605Smrg     113,   114,   230,   108,    29,   118,    46,    69,   109,    71,
1237848b8605Smrg      71,    27,    37,    99,   100,    96,    25,    26,   119,   100,
1238848b8605Smrg      96,   231,    31,    39,   100,    50,    34,    61,    53,   110,
1239848b8605Smrg     226,    40,   231,   100,    68,    60,    99,   118,    46,   113,
1240848b8605Smrg     114,   237,   118,   109,   118,    99,    29,    30,   278,    74,
1241848b8605Smrg      28,    60,    30,   119,    37,     9,    29,    11,    36,   113,
1242848b8605Smrg     114,    61,    71,    72,    37,    43,    44,    45,    68,    47,
1243848b8605Smrg      99,    49,    97,    98,   109,   362,    59,    60,    48,   278,
1244848b8605Smrg      58,    51,    52,   109,   119,    55,   285,    60,    99,   109,
1245848b8605Smrg     286,    74,    25,    63,    27,   108,   111,    75,    76,   119,
1246848b8605Smrg      99,    74,   117,   106,   101,   117,    39,   104,   105,   112,
1247848b8605Smrg     108,    81,    84,    85,    86,    87,    88,    89,    90,    91,
1248848b8605Smrg      92,    93,    94,    95,    19,    20,    21,    22,    23,    23,
1249848b8605Smrg      24,    26,    27,   101,   102,   103,   104,    77,    78,    79,
1250848b8605Smrg      80,    99,   100,    99,   100,   109,   113,   114,   117,   109,
1251848b8605Smrg     380,    99,   109,   352,   352,   352,   109,   109,   109,   104,
1252848b8605Smrg     109,   357,   109,   109,   100,    23,    23,   111,    99,   111,
1253848b8605Smrg     111,    23,   115,    64,   112,   109,   111,   109,   117,   109,
1254848b8605Smrg     109,   380,    66,   111,   111,   111,   385,   111,   111,   111,
1255848b8605Smrg     111,   111,   109,   389,   109,    65,   112,   104,   117,   112,
1256848b8605Smrg     104,    83,   116,    23,   116,    23,    23,    23,    67,   111,
1257848b8605Smrg     111,   111,    23,   111,    29,    23,   446,    23,   110,   112,
1258848b8605Smrg     110,   104,   118,   111,   109,   112,   112,    23,   109,    23,
1259848b8605Smrg      23,    23,   112,   112,   350,   112,   112,   112,   112,   112,
1260848b8605Smrg     439,   439,   439,   109,   109,    23,    23,   446,    57,   448,
1261848b8605Smrg     112,   112,   112,    23,    66,   109,   112,   112,    32,   109,
1262848b8605Smrg     111,   449,   111,   111,   109,   464,   119,   109,   112,   106,
1263848b8605Smrg     106,   112,   112,   465,   211,   255,   439,   232,    -1,   275,
1264848b8605Smrg      87,   391,   160,    -1,    89,    89,    -1,    -1,   199,   214,
1265848b8605Smrg      -1,    -1,   139
1266848b8605Smrg};
1267848b8605Smrg
1268848b8605Smrg/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1269848b8605Smrg   symbol of state STATE-NUM.  */
1270848b8605Smrgstatic const yytype_uint16 yystos[] =
1271848b8605Smrg{
1272848b8605Smrg       0,     3,     4,   121,   122,     0,   123,     8,   124,   125,
1273848b8605Smrg      99,   100,   262,     5,     6,     7,    10,    12,    13,    14,
1274848b8605Smrg      15,    16,    17,    18,    19,    20,    21,    22,   126,   127,
1275848b8605Smrg     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
1276848b8605Smrg     138,   141,   170,   171,   178,   179,   180,   242,   244,   245,
1277848b8605Smrg     248,   261,   262,   108,   246,    99,    99,    99,    65,   100,
1278848b8605Smrg     145,   151,   249,   145,   145,   145,   145,   145,   100,   146,
1279848b8605Smrg     159,    99,   113,   114,   144,   166,   168,   241,   145,   145,
1280848b8605Smrg     108,   108,     9,    11,    99,   247,   117,   117,   111,   117,
1281848b8605Smrg     182,    29,    30,    37,    59,    60,    74,   250,   109,   101,
1282848b8605Smrg     102,   103,   104,   164,   109,   109,   109,   109,   109,   109,
1283848b8605Smrg     104,   161,   101,   104,   105,   163,    23,    24,    38,    62,
1284848b8605Smrg      73,    96,   100,   110,   118,   150,   152,   172,   186,   189,
1285848b8605Smrg     225,   229,   232,   236,   238,   239,   109,   109,    99,   243,
1286848b8605Smrg     109,   100,   172,    23,   181,   185,   189,   225,   235,   237,
1287848b8605Smrg     239,   240,   241,    27,    39,   111,   251,   111,   255,   144,
1288848b8605Smrg     115,   165,   142,   241,   144,   142,   144,   144,   142,    29,
1289848b8605Smrg      37,    60,    74,   177,    34,    46,    28,    30,    36,    43,
1290848b8605Smrg      44,    45,    47,    49,    58,    75,    76,   190,   192,   195,
1291848b8605Smrg     197,   199,   203,   206,   208,   210,   212,   215,   224,    29,
1292848b8605Smrg      37,    50,    53,    60,    74,    97,    98,   173,   150,   240,
1293848b8605Smrg     163,   111,   150,   144,   117,   247,    99,   112,    23,    24,
1294848b8605Smrg      23,    61,    68,   252,    23,   258,   109,   100,   166,   167,
1295848b8605Smrg     169,   109,   110,   143,   150,   238,   109,   109,    61,    68,
1296848b8605Smrg     254,   255,   111,   111,   111,    64,    29,    56,   207,   111,
1297848b8605Smrg      25,    27,    39,   196,   253,   111,   253,    48,    51,    52,
1298848b8605Smrg      55,    63,    81,   219,    26,    70,   211,   111,   257,   255,
1299848b8605Smrg      66,   254,   111,   255,   111,   111,   175,   163,   109,   119,
1300848b8605Smrg      23,   153,   154,   155,   159,   109,   109,   249,   117,   183,
1301848b8605Smrg     112,   112,   144,   116,   116,   163,   142,   143,   104,   162,
1302848b8605Smrg      83,   139,   144,    23,   233,    23,   234,    23,   209,    23,
1303848b8605Smrg     202,    67,   202,    25,    31,    33,    69,    71,   191,   201,
1304848b8605Smrg     111,   111,   220,   111,   255,    41,    42,    82,   216,   217,
1305848b8605Smrg      23,   260,    29,   200,    35,    54,   204,   111,    23,   176,
1306848b8605Smrg      23,   174,   176,   110,   240,   112,   104,   160,   147,   148,
1307848b8605Smrg     241,   144,   118,   110,   111,   256,   109,   109,   112,   112,
1308848b8605Smrg     112,   112,   112,    23,   223,    23,   221,    23,   222,   112,
1309848b8605Smrg      77,    78,    79,    80,   205,    23,   218,   112,   112,   112,
1310848b8605Smrg     109,   119,   113,   114,   156,   109,    23,   149,   262,   109,
1311848b8605Smrg      62,    73,   184,   187,   188,   189,   226,   227,   230,   235,
1312848b8605Smrg      23,   259,    84,    85,    86,    87,    88,    89,    90,    91,
1313848b8605Smrg      92,    93,    94,    95,   140,   144,    57,    26,    40,    60,
1314848b8605Smrg      72,   193,   201,   253,   112,   112,   112,   112,   240,    23,
1315848b8605Smrg     157,    23,   158,   148,   144,    34,    46,   213,   215,   109,
1316848b8605Smrg     119,   112,    32,   194,   198,   201,   109,   119,   109,   109,
1317848b8605Smrg     111,   111,    66,   214,   187,   240,   148,   139,   228,   233,
1318848b8605Smrg     231,   234,   111,   119,   109,   109,   112,   106,   112,   106,
1319848b8605Smrg     218,   148,   140,   233,   234,   106,   218,   112
1320848b8605Smrg};
1321848b8605Smrg
1322848b8605Smrg#define yyerrok		(yyerrstatus = 0)
1323848b8605Smrg#define yyclearin	(yychar = YYEMPTY)
1324848b8605Smrg#define YYEMPTY		(-2)
1325848b8605Smrg#define YYEOF		0
1326848b8605Smrg
1327848b8605Smrg#define YYACCEPT	goto yyacceptlab
1328848b8605Smrg#define YYABORT		goto yyabortlab
1329848b8605Smrg#define YYERROR		goto yyerrorlab
1330848b8605Smrg
1331848b8605Smrg
1332848b8605Smrg/* Like YYERROR except do call yyerror.  This remains here temporarily
1333848b8605Smrg   to ease the transition to the new meaning of YYERROR, for GCC.
1334848b8605Smrg   Once GCC version 2 has supplanted version 1, this can go.  However,
1335848b8605Smrg   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
1336848b8605Smrg   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
1337848b8605Smrg   discussed.  */
1338848b8605Smrg
1339848b8605Smrg#define YYFAIL		goto yyerrlab
1340848b8605Smrg#if defined YYFAIL
1341848b8605Smrg  /* This is here to suppress warnings from the GCC cpp's
1342848b8605Smrg     -Wunused-macros.  Normally we don't worry about that warning, but
1343848b8605Smrg     some users do, and we want to make it easy for users to remove
1344848b8605Smrg     YYFAIL uses, which will produce warnings from Bison 2.5.  */
1345848b8605Smrg#endif
1346848b8605Smrg
1347848b8605Smrg#define YYRECOVERING()  (!!yyerrstatus)
1348848b8605Smrg
1349848b8605Smrg#define YYBACKUP(Token, Value)                                  \
1350848b8605Smrgdo                                                              \
1351848b8605Smrg  if (yychar == YYEMPTY)                                        \
1352848b8605Smrg    {                                                           \
1353848b8605Smrg      yychar = (Token);                                         \
1354848b8605Smrg      yylval = (Value);                                         \
1355848b8605Smrg      YYPOPSTACK (yylen);                                       \
1356848b8605Smrg      yystate = *yyssp;                                         \
1357848b8605Smrg      goto yybackup;                                            \
1358848b8605Smrg    }                                                           \
1359848b8605Smrg  else                                                          \
1360848b8605Smrg    {                                                           \
1361848b8605Smrg      yyerror (&yylloc, state, YY_("syntax error: cannot back up")); \
1362848b8605Smrg      YYERROR;							\
1363848b8605Smrg    }								\
1364848b8605Smrgwhile (YYID (0))
1365848b8605Smrg
1366848b8605Smrg
1367848b8605Smrg#define YYTERROR	1
1368848b8605Smrg#define YYERRCODE	256
1369848b8605Smrg
1370848b8605Smrg/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
1371848b8605Smrg   If N is 0, then set CURRENT to the empty location which ends
1372848b8605Smrg   the previous symbol: RHS[0] (always defined).  */
1373848b8605Smrg
1374848b8605Smrg#ifndef YYLLOC_DEFAULT
1375848b8605Smrg# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
1376848b8605Smrg    do                                                                  \
1377848b8605Smrg      if (YYID (N))                                                     \
1378848b8605Smrg        {                                                               \
1379848b8605Smrg          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
1380848b8605Smrg          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
1381848b8605Smrg          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
1382848b8605Smrg          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
1383848b8605Smrg        }                                                               \
1384848b8605Smrg      else                                                              \
1385848b8605Smrg        {                                                               \
1386848b8605Smrg          (Current).first_line   = (Current).last_line   =              \
1387848b8605Smrg            YYRHSLOC (Rhs, 0).last_line;                                \
1388848b8605Smrg          (Current).first_column = (Current).last_column =              \
1389848b8605Smrg            YYRHSLOC (Rhs, 0).last_column;                              \
1390848b8605Smrg        }                                                               \
1391848b8605Smrg    while (YYID (0))
1392848b8605Smrg#endif
1393848b8605Smrg
1394848b8605Smrg#define YYRHSLOC(Rhs, K) ((Rhs)[K])
1395848b8605Smrg
1396848b8605Smrg
1397848b8605Smrg
1398848b8605Smrg/* YY_LOCATION_PRINT -- Print the location on the stream.
1399848b8605Smrg   This macro was not mandated originally: define only if we know
1400848b8605Smrg   we won't break user code: when these are the locations we know.  */
1401848b8605Smrg
1402848b8605Smrg#ifndef YY_LOCATION_PRINT
1403848b8605Smrg# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1404848b8605Smrg#  define YY_LOCATION_PRINT(File, Loc)			\
1405848b8605Smrg     fprintf (File, "%d.%d-%d.%d",			\
1406848b8605Smrg	      (Loc).first_line, (Loc).first_column,	\
1407848b8605Smrg	      (Loc).last_line,  (Loc).last_column)
1408848b8605Smrg# else
1409848b8605Smrg#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1410848b8605Smrg# endif
1411848b8605Smrg#endif
1412848b8605Smrg
1413848b8605Smrg
1414848b8605Smrg/* YYLEX -- calling `yylex' with the right arguments.  */
1415848b8605Smrg
1416848b8605Smrg#ifdef YYLEX_PARAM
1417848b8605Smrg# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
1418848b8605Smrg#else
1419848b8605Smrg# define YYLEX yylex (&yylval, &yylloc, state)
1420848b8605Smrg#endif
1421848b8605Smrg
1422848b8605Smrg/* Enable debugging if requested.  */
1423848b8605Smrg#if YYDEBUG
1424848b8605Smrg
1425848b8605Smrg# ifndef YYFPRINTF
1426848b8605Smrg#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1427848b8605Smrg#  define YYFPRINTF fprintf
1428848b8605Smrg# endif
1429848b8605Smrg
1430848b8605Smrg# define YYDPRINTF(Args)			\
1431848b8605Smrgdo {						\
1432848b8605Smrg  if (yydebug)					\
1433848b8605Smrg    YYFPRINTF Args;				\
1434848b8605Smrg} while (YYID (0))
1435848b8605Smrg
1436848b8605Smrg# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
1437848b8605Smrgdo {									  \
1438848b8605Smrg  if (yydebug)								  \
1439848b8605Smrg    {									  \
1440848b8605Smrg      YYFPRINTF (stderr, "%s ", Title);					  \
1441848b8605Smrg      yy_symbol_print (stderr,						  \
1442848b8605Smrg		  Type, Value, Location, state); \
1443848b8605Smrg      YYFPRINTF (stderr, "\n");						  \
1444848b8605Smrg    }									  \
1445848b8605Smrg} while (YYID (0))
1446848b8605Smrg
1447848b8605Smrg
1448848b8605Smrg/*--------------------------------.
1449848b8605Smrg| Print this symbol on YYOUTPUT.  |
1450848b8605Smrg`--------------------------------*/
1451848b8605Smrg
1452848b8605Smrg/*ARGSUSED*/
1453848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1454848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1455848b8605Smrgstatic void
1456848b8605Smrgyy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1457848b8605Smrg#else
1458848b8605Smrgstatic void
1459848b8605Smrgyy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, state)
1460848b8605Smrg    FILE *yyoutput;
1461848b8605Smrg    int yytype;
1462848b8605Smrg    YYSTYPE const * const yyvaluep;
1463848b8605Smrg    YYLTYPE const * const yylocationp;
1464848b8605Smrg    struct asm_parser_state *state;
1465848b8605Smrg#endif
1466848b8605Smrg{
1467848b8605Smrg  FILE *yyo = yyoutput;
1468848b8605Smrg  YYUSE (yyo);
1469848b8605Smrg  if (!yyvaluep)
1470848b8605Smrg    return;
1471848b8605Smrg  YYUSE (yylocationp);
1472848b8605Smrg  YYUSE (state);
1473848b8605Smrg# ifdef YYPRINT
1474848b8605Smrg  if (yytype < YYNTOKENS)
1475848b8605Smrg    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1476848b8605Smrg# else
1477848b8605Smrg  YYUSE (yyoutput);
1478848b8605Smrg# endif
1479848b8605Smrg  switch (yytype)
1480848b8605Smrg    {
1481848b8605Smrg      default:
1482848b8605Smrg	break;
1483848b8605Smrg    }
1484848b8605Smrg}
1485848b8605Smrg
1486848b8605Smrg
1487848b8605Smrg/*--------------------------------.
1488848b8605Smrg| Print this symbol on YYOUTPUT.  |
1489848b8605Smrg`--------------------------------*/
1490848b8605Smrg
1491848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1492848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1493848b8605Smrgstatic void
1494848b8605Smrgyy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1495848b8605Smrg#else
1496848b8605Smrgstatic void
1497848b8605Smrgyy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, state)
1498848b8605Smrg    FILE *yyoutput;
1499848b8605Smrg    int yytype;
1500848b8605Smrg    YYSTYPE const * const yyvaluep;
1501848b8605Smrg    YYLTYPE const * const yylocationp;
1502848b8605Smrg    struct asm_parser_state *state;
1503848b8605Smrg#endif
1504848b8605Smrg{
1505848b8605Smrg  if (yytype < YYNTOKENS)
1506848b8605Smrg    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1507848b8605Smrg  else
1508848b8605Smrg    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1509848b8605Smrg
1510848b8605Smrg  YY_LOCATION_PRINT (yyoutput, *yylocationp);
1511848b8605Smrg  YYFPRINTF (yyoutput, ": ");
1512848b8605Smrg  yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, state);
1513848b8605Smrg  YYFPRINTF (yyoutput, ")");
1514848b8605Smrg}
1515848b8605Smrg
1516848b8605Smrg/*------------------------------------------------------------------.
1517848b8605Smrg| yy_stack_print -- Print the state stack from its BOTTOM up to its |
1518848b8605Smrg| TOP (included).                                                   |
1519848b8605Smrg`------------------------------------------------------------------*/
1520848b8605Smrg
1521848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1522848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1523848b8605Smrgstatic void
1524848b8605Smrgyy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1525848b8605Smrg#else
1526848b8605Smrgstatic void
1527848b8605Smrgyy_stack_print (yybottom, yytop)
1528848b8605Smrg    yytype_int16 *yybottom;
1529848b8605Smrg    yytype_int16 *yytop;
1530848b8605Smrg#endif
1531848b8605Smrg{
1532848b8605Smrg  YYFPRINTF (stderr, "Stack now");
1533848b8605Smrg  for (; yybottom <= yytop; yybottom++)
1534848b8605Smrg    {
1535848b8605Smrg      int yybot = *yybottom;
1536848b8605Smrg      YYFPRINTF (stderr, " %d", yybot);
1537848b8605Smrg    }
1538848b8605Smrg  YYFPRINTF (stderr, "\n");
1539848b8605Smrg}
1540848b8605Smrg
1541848b8605Smrg# define YY_STACK_PRINT(Bottom, Top)				\
1542848b8605Smrgdo {								\
1543848b8605Smrg  if (yydebug)							\
1544848b8605Smrg    yy_stack_print ((Bottom), (Top));				\
1545848b8605Smrg} while (YYID (0))
1546848b8605Smrg
1547848b8605Smrg
1548848b8605Smrg/*------------------------------------------------.
1549848b8605Smrg| Report that the YYRULE is going to be reduced.  |
1550848b8605Smrg`------------------------------------------------*/
1551848b8605Smrg
1552848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1553848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1554848b8605Smrgstatic void
1555848b8605Smrgyy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct asm_parser_state *state)
1556848b8605Smrg#else
1557848b8605Smrgstatic void
1558848b8605Smrgyy_reduce_print (yyvsp, yylsp, yyrule, state)
1559848b8605Smrg    YYSTYPE *yyvsp;
1560848b8605Smrg    YYLTYPE *yylsp;
1561848b8605Smrg    int yyrule;
1562848b8605Smrg    struct asm_parser_state *state;
1563848b8605Smrg#endif
1564848b8605Smrg{
1565848b8605Smrg  int yynrhs = yyr2[yyrule];
1566848b8605Smrg  int yyi;
1567848b8605Smrg  unsigned long int yylno = yyrline[yyrule];
1568848b8605Smrg  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1569848b8605Smrg	     yyrule - 1, yylno);
1570848b8605Smrg  /* The symbols being reduced.  */
1571848b8605Smrg  for (yyi = 0; yyi < yynrhs; yyi++)
1572848b8605Smrg    {
1573848b8605Smrg      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1574848b8605Smrg      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1575848b8605Smrg		       &(yyvsp[(yyi + 1) - (yynrhs)])
1576848b8605Smrg		       , &(yylsp[(yyi + 1) - (yynrhs)])		       , state);
1577848b8605Smrg      YYFPRINTF (stderr, "\n");
1578848b8605Smrg    }
1579848b8605Smrg}
1580848b8605Smrg
1581848b8605Smrg# define YY_REDUCE_PRINT(Rule)		\
1582848b8605Smrgdo {					\
1583848b8605Smrg  if (yydebug)				\
1584848b8605Smrg    yy_reduce_print (yyvsp, yylsp, Rule, state); \
1585848b8605Smrg} while (YYID (0))
1586848b8605Smrg
1587848b8605Smrg/* Nonzero means print parse trace.  It is left uninitialized so that
1588848b8605Smrg   multiple parsers can coexist.  */
1589848b8605Smrgint yydebug;
1590848b8605Smrg#else /* !YYDEBUG */
1591848b8605Smrg# define YYDPRINTF(Args)
1592848b8605Smrg# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1593848b8605Smrg# define YY_STACK_PRINT(Bottom, Top)
1594848b8605Smrg# define YY_REDUCE_PRINT(Rule)
1595848b8605Smrg#endif /* !YYDEBUG */
1596848b8605Smrg
1597848b8605Smrg
1598848b8605Smrg/* YYINITDEPTH -- initial size of the parser's stacks.  */
1599848b8605Smrg#ifndef	YYINITDEPTH
1600848b8605Smrg# define YYINITDEPTH 200
1601848b8605Smrg#endif
1602848b8605Smrg
1603848b8605Smrg/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1604848b8605Smrg   if the built-in stack extension method is used).
1605848b8605Smrg
1606848b8605Smrg   Do not make this value too large; the results are undefined if
1607848b8605Smrg   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1608848b8605Smrg   evaluated with infinite-precision integer arithmetic.  */
1609848b8605Smrg
1610848b8605Smrg#ifndef YYMAXDEPTH
1611848b8605Smrg# define YYMAXDEPTH 10000
1612848b8605Smrg#endif
1613848b8605Smrg
1614848b8605Smrg
1615848b8605Smrg#if YYERROR_VERBOSE
1616848b8605Smrg
1617848b8605Smrg# ifndef yystrlen
1618848b8605Smrg#  if defined __GLIBC__ && defined _STRING_H
1619848b8605Smrg#   define yystrlen strlen
1620848b8605Smrg#  else
1621848b8605Smrg/* Return the length of YYSTR.  */
1622848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1623848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1624848b8605Smrgstatic YYSIZE_T
1625848b8605Smrgyystrlen (const char *yystr)
1626848b8605Smrg#else
1627848b8605Smrgstatic YYSIZE_T
1628848b8605Smrgyystrlen (yystr)
1629848b8605Smrg    const char *yystr;
1630848b8605Smrg#endif
1631848b8605Smrg{
1632848b8605Smrg  YYSIZE_T yylen;
1633848b8605Smrg  for (yylen = 0; yystr[yylen]; yylen++)
1634848b8605Smrg    continue;
1635848b8605Smrg  return yylen;
1636848b8605Smrg}
1637848b8605Smrg#  endif
1638848b8605Smrg# endif
1639848b8605Smrg
1640848b8605Smrg# ifndef yystpcpy
1641848b8605Smrg#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1642848b8605Smrg#   define yystpcpy stpcpy
1643848b8605Smrg#  else
1644848b8605Smrg/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1645848b8605Smrg   YYDEST.  */
1646848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1647848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1648848b8605Smrgstatic char *
1649848b8605Smrgyystpcpy (char *yydest, const char *yysrc)
1650848b8605Smrg#else
1651848b8605Smrgstatic char *
1652848b8605Smrgyystpcpy (yydest, yysrc)
1653848b8605Smrg    char *yydest;
1654848b8605Smrg    const char *yysrc;
1655848b8605Smrg#endif
1656848b8605Smrg{
1657848b8605Smrg  char *yyd = yydest;
1658848b8605Smrg  const char *yys = yysrc;
1659848b8605Smrg
1660848b8605Smrg  while ((*yyd++ = *yys++) != '\0')
1661848b8605Smrg    continue;
1662848b8605Smrg
1663848b8605Smrg  return yyd - 1;
1664848b8605Smrg}
1665848b8605Smrg#  endif
1666848b8605Smrg# endif
1667848b8605Smrg
1668848b8605Smrg# ifndef yytnamerr
1669848b8605Smrg/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1670848b8605Smrg   quotes and backslashes, so that it's suitable for yyerror.  The
1671848b8605Smrg   heuristic is that double-quoting is unnecessary unless the string
1672848b8605Smrg   contains an apostrophe, a comma, or backslash (other than
1673848b8605Smrg   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1674848b8605Smrg   null, do not copy; instead, return the length of what the result
1675848b8605Smrg   would have been.  */
1676848b8605Smrgstatic YYSIZE_T
1677848b8605Smrgyytnamerr (char *yyres, const char *yystr)
1678848b8605Smrg{
1679848b8605Smrg  if (*yystr == '"')
1680848b8605Smrg    {
1681848b8605Smrg      YYSIZE_T yyn = 0;
1682848b8605Smrg      char const *yyp = yystr;
1683848b8605Smrg
1684848b8605Smrg      for (;;)
1685848b8605Smrg	switch (*++yyp)
1686848b8605Smrg	  {
1687848b8605Smrg	  case '\'':
1688848b8605Smrg	  case ',':
1689848b8605Smrg	    goto do_not_strip_quotes;
1690848b8605Smrg
1691848b8605Smrg	  case '\\':
1692848b8605Smrg	    if (*++yyp != '\\')
1693848b8605Smrg	      goto do_not_strip_quotes;
1694848b8605Smrg	    /* Fall through.  */
1695848b8605Smrg	  default:
1696848b8605Smrg	    if (yyres)
1697848b8605Smrg	      yyres[yyn] = *yyp;
1698848b8605Smrg	    yyn++;
1699848b8605Smrg	    break;
1700848b8605Smrg
1701848b8605Smrg	  case '"':
1702848b8605Smrg	    if (yyres)
1703848b8605Smrg	      yyres[yyn] = '\0';
1704848b8605Smrg	    return yyn;
1705848b8605Smrg	  }
1706848b8605Smrg    do_not_strip_quotes: ;
1707848b8605Smrg    }
1708848b8605Smrg
1709848b8605Smrg  if (! yyres)
1710848b8605Smrg    return yystrlen (yystr);
1711848b8605Smrg
1712848b8605Smrg  return yystpcpy (yyres, yystr) - yyres;
1713848b8605Smrg}
1714848b8605Smrg# endif
1715848b8605Smrg
1716848b8605Smrg/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1717848b8605Smrg   about the unexpected token YYTOKEN for the state stack whose top is
1718848b8605Smrg   YYSSP.
1719848b8605Smrg
1720848b8605Smrg   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1721848b8605Smrg   not large enough to hold the message.  In that case, also set
1722848b8605Smrg   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1723848b8605Smrg   required number of bytes is too large to store.  */
1724848b8605Smrgstatic int
1725848b8605Smrgyysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1726848b8605Smrg                yytype_int16 *yyssp, int yytoken)
1727848b8605Smrg{
1728848b8605Smrg  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
1729848b8605Smrg  YYSIZE_T yysize = yysize0;
1730848b8605Smrg  YYSIZE_T yysize1;
1731848b8605Smrg  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1732848b8605Smrg  /* Internationalized format string. */
1733848b8605Smrg  const char *yyformat = YY_NULL;
1734848b8605Smrg  /* Arguments of yyformat. */
1735848b8605Smrg  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1736848b8605Smrg  /* Number of reported tokens (one for the "unexpected", one per
1737848b8605Smrg     "expected"). */
1738848b8605Smrg  int yycount = 0;
1739848b8605Smrg
1740848b8605Smrg  /* There are many possibilities here to consider:
1741848b8605Smrg     - Assume YYFAIL is not used.  It's too flawed to consider.  See
1742848b8605Smrg       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
1743848b8605Smrg       for details.  YYERROR is fine as it does not invoke this
1744848b8605Smrg       function.
1745848b8605Smrg     - If this state is a consistent state with a default action, then
1746848b8605Smrg       the only way this function was invoked is if the default action
1747848b8605Smrg       is an error action.  In that case, don't check for expected
1748848b8605Smrg       tokens because there are none.
1749848b8605Smrg     - The only way there can be no lookahead present (in yychar) is if
1750848b8605Smrg       this state is a consistent state with a default action.  Thus,
1751848b8605Smrg       detecting the absence of a lookahead is sufficient to determine
1752848b8605Smrg       that there is no unexpected or expected token to report.  In that
1753848b8605Smrg       case, just report a simple "syntax error".
1754848b8605Smrg     - Don't assume there isn't a lookahead just because this state is a
1755848b8605Smrg       consistent state with a default action.  There might have been a
1756848b8605Smrg       previous inconsistent state, consistent state with a non-default
1757848b8605Smrg       action, or user semantic action that manipulated yychar.
1758848b8605Smrg     - Of course, the expected token list depends on states to have
1759848b8605Smrg       correct lookahead information, and it depends on the parser not
1760848b8605Smrg       to perform extra reductions after fetching a lookahead from the
1761848b8605Smrg       scanner and before detecting a syntax error.  Thus, state merging
1762848b8605Smrg       (from LALR or IELR) and default reductions corrupt the expected
1763848b8605Smrg       token list.  However, the list is correct for canonical LR with
1764848b8605Smrg       one exception: it will still contain any token that will not be
1765848b8605Smrg       accepted due to an error action in a later state.
1766848b8605Smrg  */
1767848b8605Smrg  if (yytoken != YYEMPTY)
1768848b8605Smrg    {
1769848b8605Smrg      int yyn = yypact[*yyssp];
1770848b8605Smrg      yyarg[yycount++] = yytname[yytoken];
1771848b8605Smrg      if (!yypact_value_is_default (yyn))
1772848b8605Smrg        {
1773848b8605Smrg          /* Start YYX at -YYN if negative to avoid negative indexes in
1774848b8605Smrg             YYCHECK.  In other words, skip the first -YYN actions for
1775848b8605Smrg             this state because they are default actions.  */
1776848b8605Smrg          int yyxbegin = yyn < 0 ? -yyn : 0;
1777848b8605Smrg          /* Stay within bounds of both yycheck and yytname.  */
1778848b8605Smrg          int yychecklim = YYLAST - yyn + 1;
1779848b8605Smrg          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1780848b8605Smrg          int yyx;
1781848b8605Smrg
1782848b8605Smrg          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1783848b8605Smrg            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1784848b8605Smrg                && !yytable_value_is_error (yytable[yyx + yyn]))
1785848b8605Smrg              {
1786848b8605Smrg                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1787848b8605Smrg                  {
1788848b8605Smrg                    yycount = 1;
1789848b8605Smrg                    yysize = yysize0;
1790848b8605Smrg                    break;
1791848b8605Smrg                  }
1792848b8605Smrg                yyarg[yycount++] = yytname[yyx];
1793848b8605Smrg                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
1794848b8605Smrg                if (! (yysize <= yysize1
1795848b8605Smrg                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1796848b8605Smrg                  return 2;
1797848b8605Smrg                yysize = yysize1;
1798848b8605Smrg              }
1799848b8605Smrg        }
1800848b8605Smrg    }
1801848b8605Smrg
1802848b8605Smrg  switch (yycount)
1803848b8605Smrg    {
1804848b8605Smrg# define YYCASE_(N, S)                      \
1805848b8605Smrg      case N:                               \
1806848b8605Smrg        yyformat = S;                       \
1807848b8605Smrg      break
1808848b8605Smrg      YYCASE_(0, YY_("syntax error"));
1809848b8605Smrg      YYCASE_(1, YY_("syntax error, unexpected %s"));
1810848b8605Smrg      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1811848b8605Smrg      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1812848b8605Smrg      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1813848b8605Smrg      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1814848b8605Smrg# undef YYCASE_
1815848b8605Smrg    }
1816848b8605Smrg
1817848b8605Smrg  yysize1 = yysize + yystrlen (yyformat);
1818848b8605Smrg  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1819848b8605Smrg    return 2;
1820848b8605Smrg  yysize = yysize1;
1821848b8605Smrg
1822848b8605Smrg  if (*yymsg_alloc < yysize)
1823848b8605Smrg    {
1824848b8605Smrg      *yymsg_alloc = 2 * yysize;
1825848b8605Smrg      if (! (yysize <= *yymsg_alloc
1826848b8605Smrg             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1827848b8605Smrg        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1828848b8605Smrg      return 1;
1829848b8605Smrg    }
1830848b8605Smrg
1831848b8605Smrg  /* Avoid sprintf, as that infringes on the user's name space.
1832848b8605Smrg     Don't have undefined behavior even if the translation
1833848b8605Smrg     produced a string with the wrong number of "%s"s.  */
1834848b8605Smrg  {
1835848b8605Smrg    char *yyp = *yymsg;
1836848b8605Smrg    int yyi = 0;
1837848b8605Smrg    while ((*yyp = *yyformat) != '\0')
1838848b8605Smrg      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1839848b8605Smrg        {
1840848b8605Smrg          yyp += yytnamerr (yyp, yyarg[yyi++]);
1841848b8605Smrg          yyformat += 2;
1842848b8605Smrg        }
1843848b8605Smrg      else
1844848b8605Smrg        {
1845848b8605Smrg          yyp++;
1846848b8605Smrg          yyformat++;
1847848b8605Smrg        }
1848848b8605Smrg  }
1849848b8605Smrg  return 0;
1850848b8605Smrg}
1851848b8605Smrg#endif /* YYERROR_VERBOSE */
1852848b8605Smrg
1853848b8605Smrg/*-----------------------------------------------.
1854848b8605Smrg| Release the memory associated to this symbol.  |
1855848b8605Smrg`-----------------------------------------------*/
1856848b8605Smrg
1857848b8605Smrg/*ARGSUSED*/
1858848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1859848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1860848b8605Smrgstatic void
1861848b8605Smrgyydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct asm_parser_state *state)
1862848b8605Smrg#else
1863848b8605Smrgstatic void
1864848b8605Smrgyydestruct (yymsg, yytype, yyvaluep, yylocationp, state)
1865848b8605Smrg    const char *yymsg;
1866848b8605Smrg    int yytype;
1867848b8605Smrg    YYSTYPE *yyvaluep;
1868848b8605Smrg    YYLTYPE *yylocationp;
1869848b8605Smrg    struct asm_parser_state *state;
1870848b8605Smrg#endif
1871848b8605Smrg{
1872848b8605Smrg  YYUSE (yyvaluep);
1873848b8605Smrg  YYUSE (yylocationp);
1874848b8605Smrg  YYUSE (state);
1875848b8605Smrg
1876848b8605Smrg  if (!yymsg)
1877848b8605Smrg    yymsg = "Deleting";
1878848b8605Smrg  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1879848b8605Smrg
1880848b8605Smrg  switch (yytype)
1881848b8605Smrg    {
1882848b8605Smrg
1883848b8605Smrg      default:
1884848b8605Smrg	break;
1885848b8605Smrg    }
1886848b8605Smrg}
1887848b8605Smrg
1888848b8605Smrg
1889848b8605Smrg
1890848b8605Smrg
1891848b8605Smrg/*----------.
1892848b8605Smrg| yyparse.  |
1893848b8605Smrg`----------*/
1894848b8605Smrg
1895848b8605Smrg#ifdef YYPARSE_PARAM
1896848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1897848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1898848b8605Smrgint
1899848b8605Smrgyyparse (void *YYPARSE_PARAM)
1900848b8605Smrg#else
1901848b8605Smrgint
1902848b8605Smrgyyparse (YYPARSE_PARAM)
1903848b8605Smrg    void *YYPARSE_PARAM;
1904848b8605Smrg#endif
1905848b8605Smrg#else /* ! YYPARSE_PARAM */
1906848b8605Smrg#if (defined __STDC__ || defined __C99__FUNC__ \
1907848b8605Smrg     || defined __cplusplus || defined _MSC_VER)
1908848b8605Smrgint
1909848b8605Smrgyyparse (struct asm_parser_state *state)
1910848b8605Smrg#else
1911848b8605Smrgint
1912848b8605Smrgyyparse (state)
1913848b8605Smrg    struct asm_parser_state *state;
1914848b8605Smrg#endif
1915848b8605Smrg#endif
1916848b8605Smrg{
1917848b8605Smrg/* The lookahead symbol.  */
1918848b8605Smrgint yychar;
1919848b8605Smrg
1920848b8605Smrg
1921848b8605Smrg#if defined __GNUC__ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__))
1922848b8605Smrg/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
1923848b8605Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1924848b8605Smrg    _Pragma ("GCC diagnostic push") \
1925848b8605Smrg    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1926848b8605Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1927848b8605Smrg    _Pragma ("GCC diagnostic pop")
1928848b8605Smrg#else
1929848b8605Smrg/* Default value used for initialization, for pacifying older GCCs
1930848b8605Smrg   or non-GCC compilers.  */
1931848b8605Smrgstatic YYSTYPE yyval_default;
1932848b8605Smrg# define YYLVAL_INITIALIZE() (yylval = yyval_default)
1933848b8605Smrg#endif
1934848b8605Smrg#ifndef YYLVAL_INITIALIZE
1935848b8605Smrg# define YYLVAL_INITIALIZE()
1936848b8605Smrg#endif
1937848b8605Smrg#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1938848b8605Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1939848b8605Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_END
1940848b8605Smrg#endif
1941848b8605Smrg
1942848b8605Smrg/* The semantic value of the lookahead symbol.  */
1943848b8605SmrgYYSTYPE yylval;
1944848b8605Smrg
1945848b8605Smrg/* Location data for the lookahead symbol.  */
1946848b8605SmrgYYLTYPE yylloc;
1947848b8605Smrg
1948848b8605Smrg    /* Number of syntax errors so far.  */
1949848b8605Smrg    int yynerrs;
1950848b8605Smrg
1951848b8605Smrg    int yystate;
1952848b8605Smrg    /* Number of tokens to shift before error messages enabled.  */
1953848b8605Smrg    int yyerrstatus;
1954848b8605Smrg
1955848b8605Smrg    /* The stacks and their tools:
1956848b8605Smrg       `yyss': related to states.
1957848b8605Smrg       `yyvs': related to semantic values.
1958848b8605Smrg       `yyls': related to locations.
1959848b8605Smrg
1960848b8605Smrg       Refer to the stacks through separate pointers, to allow yyoverflow
1961848b8605Smrg       to reallocate them elsewhere.  */
1962848b8605Smrg
1963848b8605Smrg    /* The state stack.  */
1964848b8605Smrg    yytype_int16 yyssa[YYINITDEPTH];
1965848b8605Smrg    yytype_int16 *yyss;
1966848b8605Smrg    yytype_int16 *yyssp;
1967848b8605Smrg
1968848b8605Smrg    /* The semantic value stack.  */
1969848b8605Smrg    YYSTYPE yyvsa[YYINITDEPTH];
1970848b8605Smrg    YYSTYPE *yyvs;
1971848b8605Smrg    YYSTYPE *yyvsp;
1972848b8605Smrg
1973848b8605Smrg    /* The location stack.  */
1974848b8605Smrg    YYLTYPE yylsa[YYINITDEPTH];
1975848b8605Smrg    YYLTYPE *yyls;
1976848b8605Smrg    YYLTYPE *yylsp;
1977848b8605Smrg
1978848b8605Smrg    /* The locations where the error started and ended.  */
1979848b8605Smrg    YYLTYPE yyerror_range[3];
1980848b8605Smrg
1981848b8605Smrg    YYSIZE_T yystacksize;
1982848b8605Smrg
1983848b8605Smrg  int yyn;
1984848b8605Smrg  int yyresult;
1985848b8605Smrg  /* Lookahead token as an internal (translated) token number.  */
1986848b8605Smrg  int yytoken = 0;
1987848b8605Smrg  /* The variables used to return semantic value and location from the
1988848b8605Smrg     action routines.  */
1989848b8605Smrg  YYSTYPE yyval;
1990848b8605Smrg  YYLTYPE yyloc;
1991848b8605Smrg
1992848b8605Smrg#if YYERROR_VERBOSE
1993848b8605Smrg  /* Buffer for error messages, and its allocated size.  */
1994848b8605Smrg  char yymsgbuf[128];
1995848b8605Smrg  char *yymsg = yymsgbuf;
1996848b8605Smrg  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1997848b8605Smrg#endif
1998848b8605Smrg
1999848b8605Smrg#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
2000848b8605Smrg
2001848b8605Smrg  /* The number of symbols on the RHS of the reduced rule.
2002848b8605Smrg     Keep to zero when no symbol should be popped.  */
2003848b8605Smrg  int yylen = 0;
2004848b8605Smrg
2005848b8605Smrg  yyss = yyssa;
2006848b8605Smrg  yyvs = yyvsa;
2007848b8605Smrg  yyls = yylsa;
2008848b8605Smrg  yystacksize = YYINITDEPTH;
2009848b8605Smrg
2010848b8605Smrg  YYDPRINTF ((stderr, "Starting parse\n"));
2011848b8605Smrg
2012848b8605Smrg  yystate = 0;
2013848b8605Smrg  yyerrstatus = 0;
2014848b8605Smrg  yynerrs = 0;
2015848b8605Smrg  yychar = YYEMPTY; /* Cause a token to be read.  */
2016848b8605Smrg
2017848b8605Smrg  /* Initialize stack pointers.
2018848b8605Smrg     Waste one element of value and location stack
2019848b8605Smrg     so that they stay on the same level as the state stack.
2020848b8605Smrg     The wasted elements are never initialized.  */
2021848b8605Smrg  yyssp = yyss;
2022848b8605Smrg  yyvsp = yyvs;
2023848b8605Smrg  yylsp = yyls;
2024848b8605Smrg
2025848b8605Smrg  YYLVAL_INITIALIZE ();
2026848b8605Smrg#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
2027848b8605Smrg  /* Initialize the default location before parsing starts.  */
2028848b8605Smrg  yylloc.first_line   = yylloc.last_line   = 1;
2029848b8605Smrg  yylloc.first_column = yylloc.last_column = 1;
2030848b8605Smrg#endif
2031848b8605Smrg  goto yysetstate;
2032848b8605Smrg
2033848b8605Smrg/*------------------------------------------------------------.
2034848b8605Smrg| yynewstate -- Push a new state, which is found in yystate.  |
2035848b8605Smrg`------------------------------------------------------------*/
2036848b8605Smrg yynewstate:
2037848b8605Smrg  /* In all cases, when you get here, the value and location stacks
2038848b8605Smrg     have just been pushed.  So pushing a state here evens the stacks.  */
2039848b8605Smrg  yyssp++;
2040848b8605Smrg
2041848b8605Smrg yysetstate:
2042848b8605Smrg  *yyssp = yystate;
2043848b8605Smrg
2044848b8605Smrg  if (yyss + yystacksize - 1 <= yyssp)
2045848b8605Smrg    {
2046848b8605Smrg      /* Get the current used size of the three stacks, in elements.  */
2047848b8605Smrg      YYSIZE_T yysize = yyssp - yyss + 1;
2048848b8605Smrg
2049848b8605Smrg#ifdef yyoverflow
2050848b8605Smrg      {
2051848b8605Smrg	/* Give user a chance to reallocate the stack.  Use copies of
2052848b8605Smrg	   these so that the &'s don't force the real ones into
2053848b8605Smrg	   memory.  */
2054848b8605Smrg	YYSTYPE *yyvs1 = yyvs;
2055848b8605Smrg	yytype_int16 *yyss1 = yyss;
2056848b8605Smrg	YYLTYPE *yyls1 = yyls;
2057848b8605Smrg
2058848b8605Smrg	/* Each stack pointer address is followed by the size of the
2059848b8605Smrg	   data in use in that stack, in bytes.  This used to be a
2060848b8605Smrg	   conditional around just the two extra args, but that might
2061848b8605Smrg	   be undefined if yyoverflow is a macro.  */
2062848b8605Smrg	yyoverflow (YY_("memory exhausted"),
2063848b8605Smrg		    &yyss1, yysize * sizeof (*yyssp),
2064848b8605Smrg		    &yyvs1, yysize * sizeof (*yyvsp),
2065848b8605Smrg		    &yyls1, yysize * sizeof (*yylsp),
2066848b8605Smrg		    &yystacksize);
2067848b8605Smrg
2068848b8605Smrg	yyls = yyls1;
2069848b8605Smrg	yyss = yyss1;
2070848b8605Smrg	yyvs = yyvs1;
2071848b8605Smrg      }
2072848b8605Smrg#else /* no yyoverflow */
2073848b8605Smrg# ifndef YYSTACK_RELOCATE
2074848b8605Smrg      goto yyexhaustedlab;
2075848b8605Smrg# else
2076848b8605Smrg      /* Extend the stack our own way.  */
2077848b8605Smrg      if (YYMAXDEPTH <= yystacksize)
2078848b8605Smrg	goto yyexhaustedlab;
2079848b8605Smrg      yystacksize *= 2;
2080848b8605Smrg      if (YYMAXDEPTH < yystacksize)
2081848b8605Smrg	yystacksize = YYMAXDEPTH;
2082848b8605Smrg
2083848b8605Smrg      {
2084848b8605Smrg	yytype_int16 *yyss1 = yyss;
2085848b8605Smrg	union yyalloc *yyptr =
2086848b8605Smrg	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2087848b8605Smrg	if (! yyptr)
2088848b8605Smrg	  goto yyexhaustedlab;
2089848b8605Smrg	YYSTACK_RELOCATE (yyss_alloc, yyss);
2090848b8605Smrg	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2091848b8605Smrg	YYSTACK_RELOCATE (yyls_alloc, yyls);
2092848b8605Smrg#  undef YYSTACK_RELOCATE
2093848b8605Smrg	if (yyss1 != yyssa)
2094848b8605Smrg	  YYSTACK_FREE (yyss1);
2095848b8605Smrg      }
2096848b8605Smrg# endif
2097848b8605Smrg#endif /* no yyoverflow */
2098848b8605Smrg
2099848b8605Smrg      yyssp = yyss + yysize - 1;
2100848b8605Smrg      yyvsp = yyvs + yysize - 1;
2101848b8605Smrg      yylsp = yyls + yysize - 1;
2102848b8605Smrg
2103848b8605Smrg      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2104848b8605Smrg		  (unsigned long int) yystacksize));
2105848b8605Smrg
2106848b8605Smrg      if (yyss + yystacksize - 1 <= yyssp)
2107848b8605Smrg	YYABORT;
2108848b8605Smrg    }
2109848b8605Smrg
2110848b8605Smrg  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2111848b8605Smrg
2112848b8605Smrg  if (yystate == YYFINAL)
2113848b8605Smrg    YYACCEPT;
2114848b8605Smrg
2115848b8605Smrg  goto yybackup;
2116848b8605Smrg
2117848b8605Smrg/*-----------.
2118848b8605Smrg| yybackup.  |
2119848b8605Smrg`-----------*/
2120848b8605Smrgyybackup:
2121848b8605Smrg
2122848b8605Smrg  /* Do appropriate processing given the current state.  Read a
2123848b8605Smrg     lookahead token if we need one and don't already have one.  */
2124848b8605Smrg
2125848b8605Smrg  /* First try to decide what to do without reference to lookahead token.  */
2126848b8605Smrg  yyn = yypact[yystate];
2127848b8605Smrg  if (yypact_value_is_default (yyn))
2128848b8605Smrg    goto yydefault;
2129848b8605Smrg
2130848b8605Smrg  /* Not known => get a lookahead token if don't already have one.  */
2131848b8605Smrg
2132848b8605Smrg  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
2133848b8605Smrg  if (yychar == YYEMPTY)
2134848b8605Smrg    {
2135848b8605Smrg      YYDPRINTF ((stderr, "Reading a token: "));
2136848b8605Smrg      yychar = YYLEX;
2137848b8605Smrg    }
2138848b8605Smrg
2139848b8605Smrg  if (yychar <= YYEOF)
2140848b8605Smrg    {
2141848b8605Smrg      yychar = yytoken = YYEOF;
2142848b8605Smrg      YYDPRINTF ((stderr, "Now at end of input.\n"));
2143848b8605Smrg    }
2144848b8605Smrg  else
2145848b8605Smrg    {
2146848b8605Smrg      yytoken = YYTRANSLATE (yychar);
2147848b8605Smrg      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2148848b8605Smrg    }
2149848b8605Smrg
2150848b8605Smrg  /* If the proper action on seeing token YYTOKEN is to reduce or to
2151848b8605Smrg     detect an error, take that action.  */
2152848b8605Smrg  yyn += yytoken;
2153848b8605Smrg  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2154848b8605Smrg    goto yydefault;
2155848b8605Smrg  yyn = yytable[yyn];
2156848b8605Smrg  if (yyn <= 0)
2157848b8605Smrg    {
2158848b8605Smrg      if (yytable_value_is_error (yyn))
2159848b8605Smrg        goto yyerrlab;
2160848b8605Smrg      yyn = -yyn;
2161848b8605Smrg      goto yyreduce;
2162848b8605Smrg    }
2163848b8605Smrg
2164848b8605Smrg  /* Count tokens shifted since error; after three, turn off error
2165848b8605Smrg     status.  */
2166848b8605Smrg  if (yyerrstatus)
2167848b8605Smrg    yyerrstatus--;
2168848b8605Smrg
2169848b8605Smrg  /* Shift the lookahead token.  */
2170848b8605Smrg  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2171848b8605Smrg
2172848b8605Smrg  /* Discard the shifted token.  */
2173848b8605Smrg  yychar = YYEMPTY;
2174848b8605Smrg
2175848b8605Smrg  yystate = yyn;
2176848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2177848b8605Smrg  *++yyvsp = yylval;
2178848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_END
2179848b8605Smrg  *++yylsp = yylloc;
2180848b8605Smrg  goto yynewstate;
2181848b8605Smrg
2182848b8605Smrg
2183848b8605Smrg/*-----------------------------------------------------------.
2184848b8605Smrg| yydefault -- do the default action for the current state.  |
2185848b8605Smrg`-----------------------------------------------------------*/
2186848b8605Smrgyydefault:
2187848b8605Smrg  yyn = yydefact[yystate];
2188848b8605Smrg  if (yyn == 0)
2189848b8605Smrg    goto yyerrlab;
2190848b8605Smrg  goto yyreduce;
2191848b8605Smrg
2192848b8605Smrg
2193848b8605Smrg/*-----------------------------.
2194848b8605Smrg| yyreduce -- Do a reduction.  |
2195848b8605Smrg`-----------------------------*/
2196848b8605Smrgyyreduce:
2197848b8605Smrg  /* yyn is the number of a rule to reduce with.  */
2198848b8605Smrg  yylen = yyr2[yyn];
2199848b8605Smrg
2200848b8605Smrg  /* If YYLEN is nonzero, implement the default value of the action:
2201848b8605Smrg     `$$ = $1'.
2202848b8605Smrg
2203848b8605Smrg     Otherwise, the following line sets YYVAL to garbage.
2204848b8605Smrg     This behavior is undocumented and Bison
2205848b8605Smrg     users should not rely upon it.  Assigning to YYVAL
2206848b8605Smrg     unconditionally makes the parser a bit smaller, and it avoids a
2207848b8605Smrg     GCC warning that YYVAL may be used uninitialized.  */
2208848b8605Smrg  yyval = yyvsp[1-yylen];
2209848b8605Smrg
2210848b8605Smrg  /* Default location.  */
2211848b8605Smrg  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
2212848b8605Smrg  YY_REDUCE_PRINT (yyn);
2213848b8605Smrg  switch (yyn)
2214848b8605Smrg    {
2215848b8605Smrg        case 3:
2216848b8605Smrg/* Line 1813 of yacc.c  */
2217848b8605Smrg#line 288 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2218848b8605Smrg    {
2219848b8605Smrg	   if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
2220848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
2221848b8605Smrg
2222848b8605Smrg	   }
2223848b8605Smrg	   state->mode = ARB_vertex;
2224848b8605Smrg	}
2225848b8605Smrg    break;
2226848b8605Smrg
2227848b8605Smrg  case 4:
2228848b8605Smrg/* Line 1813 of yacc.c  */
2229848b8605Smrg#line 296 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2230848b8605Smrg    {
2231848b8605Smrg	   if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
2232848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
2233848b8605Smrg	   }
2234848b8605Smrg	   state->mode = ARB_fragment;
2235848b8605Smrg
2236848b8605Smrg	   state->option.TexRect =
2237848b8605Smrg	      (state->ctx->Extensions.NV_texture_rectangle != GL_FALSE);
2238848b8605Smrg	}
2239848b8605Smrg    break;
2240848b8605Smrg
2241848b8605Smrg  case 7:
2242848b8605Smrg/* Line 1813 of yacc.c  */
2243848b8605Smrg#line 312 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2244848b8605Smrg    {
2245848b8605Smrg	   int valid = 0;
2246848b8605Smrg
2247848b8605Smrg	   if (state->mode == ARB_vertex) {
2248848b8605Smrg	      valid = _mesa_ARBvp_parse_option(state, (yyvsp[(2) - (3)].string));
2249848b8605Smrg	   } else if (state->mode == ARB_fragment) {
2250848b8605Smrg	      valid = _mesa_ARBfp_parse_option(state, (yyvsp[(2) - (3)].string));
2251848b8605Smrg	   }
2252848b8605Smrg
2253848b8605Smrg
2254848b8605Smrg	   free((yyvsp[(2) - (3)].string));
2255848b8605Smrg
2256848b8605Smrg	   if (!valid) {
2257848b8605Smrg	      const char *const err_str = (state->mode == ARB_vertex)
2258848b8605Smrg		 ? "invalid ARB vertex program option"
2259848b8605Smrg		 : "invalid ARB fragment program option";
2260848b8605Smrg
2261848b8605Smrg	      yyerror(& (yylsp[(2) - (3)]), state, err_str);
2262848b8605Smrg	      YYERROR;
2263848b8605Smrg	   }
2264848b8605Smrg	}
2265848b8605Smrg    break;
2266848b8605Smrg
2267848b8605Smrg  case 10:
2268848b8605Smrg/* Line 1813 of yacc.c  */
2269848b8605Smrg#line 340 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2270848b8605Smrg    {
2271848b8605Smrg	   if ((yyvsp[(1) - (2)].inst) != NULL) {
2272848b8605Smrg	      if (state->inst_tail == NULL) {
2273848b8605Smrg		 state->inst_head = (yyvsp[(1) - (2)].inst);
2274848b8605Smrg	      } else {
2275848b8605Smrg		 state->inst_tail->next = (yyvsp[(1) - (2)].inst);
2276848b8605Smrg	      }
2277848b8605Smrg
2278848b8605Smrg	      state->inst_tail = (yyvsp[(1) - (2)].inst);
2279848b8605Smrg	      (yyvsp[(1) - (2)].inst)->next = NULL;
2280848b8605Smrg
2281848b8605Smrg	      state->prog->NumInstructions++;
2282848b8605Smrg	   }
2283848b8605Smrg	}
2284848b8605Smrg    break;
2285848b8605Smrg
2286848b8605Smrg  case 12:
2287848b8605Smrg/* Line 1813 of yacc.c  */
2288848b8605Smrg#line 358 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2289848b8605Smrg    {
2290848b8605Smrg	   (yyval.inst) = (yyvsp[(1) - (1)].inst);
2291848b8605Smrg	   state->prog->NumAluInstructions++;
2292848b8605Smrg	}
2293848b8605Smrg    break;
2294848b8605Smrg
2295848b8605Smrg  case 13:
2296848b8605Smrg/* Line 1813 of yacc.c  */
2297848b8605Smrg#line 363 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2298848b8605Smrg    {
2299848b8605Smrg	   (yyval.inst) = (yyvsp[(1) - (1)].inst);
2300848b8605Smrg	   state->prog->NumTexInstructions++;
2301848b8605Smrg	}
2302848b8605Smrg    break;
2303848b8605Smrg
2304848b8605Smrg  case 24:
2305848b8605Smrg/* Line 1813 of yacc.c  */
2306848b8605Smrg#line 384 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2307848b8605Smrg    {
2308848b8605Smrg	   (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2309848b8605Smrg	}
2310848b8605Smrg    break;
2311848b8605Smrg
2312848b8605Smrg  case 25:
2313848b8605Smrg/* Line 1813 of yacc.c  */
2314848b8605Smrg#line 390 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2315848b8605Smrg    {
2316848b8605Smrg	   if ((yyvsp[(1) - (4)].temp_inst).Opcode == OPCODE_DDY)
2317848b8605Smrg	      state->fragment.UsesDFdy = 1;
2318848b8605Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2319848b8605Smrg	}
2320848b8605Smrg    break;
2321848b8605Smrg
2322848b8605Smrg  case 26:
2323848b8605Smrg/* Line 1813 of yacc.c  */
2324848b8605Smrg#line 398 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2325848b8605Smrg    {
2326848b8605Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
2327848b8605Smrg	}
2328848b8605Smrg    break;
2329848b8605Smrg
2330848b8605Smrg  case 27:
2331848b8605Smrg/* Line 1813 of yacc.c  */
2332848b8605Smrg#line 404 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2333848b8605Smrg    {
2334848b8605Smrg	   (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);
2335848b8605Smrg	}
2336848b8605Smrg    break;
2337848b8605Smrg
2338848b8605Smrg  case 28:
2339848b8605Smrg/* Line 1813 of yacc.c  */
2340848b8605Smrg#line 411 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2341848b8605Smrg    {
2342848b8605Smrg	   (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);
2343848b8605Smrg	}
2344848b8605Smrg    break;
2345848b8605Smrg
2346848b8605Smrg  case 29:
2347848b8605Smrg/* Line 1813 of yacc.c  */
2348848b8605Smrg#line 418 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2349848b8605Smrg    {
2350848b8605Smrg	   (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));
2351848b8605Smrg	}
2352848b8605Smrg    break;
2353848b8605Smrg
2354848b8605Smrg  case 30:
2355848b8605Smrg/* Line 1813 of yacc.c  */
2356848b8605Smrg#line 424 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2357848b8605Smrg    {
2358848b8605Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
2359848b8605Smrg	   if ((yyval.inst) != NULL) {
2360848b8605Smrg	      const GLbitfield tex_mask = (1U << (yyvsp[(6) - (8)].integer));
2361848b8605Smrg	      GLbitfield shadow_tex = 0;
2362848b8605Smrg	      GLbitfield target_mask = 0;
2363848b8605Smrg
2364848b8605Smrg
2365848b8605Smrg	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[(6) - (8)].integer);
2366848b8605Smrg
2367848b8605Smrg	      if ((yyvsp[(8) - (8)].integer) < 0) {
2368848b8605Smrg		 shadow_tex = tex_mask;
2369848b8605Smrg
2370848b8605Smrg		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(8) - (8)].integer);
2371848b8605Smrg		 (yyval.inst)->Base.TexShadow = 1;
2372848b8605Smrg	      } else {
2373848b8605Smrg		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[(8) - (8)].integer);
2374848b8605Smrg	      }
2375848b8605Smrg
2376848b8605Smrg	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2377848b8605Smrg
2378848b8605Smrg	      /* If this texture unit was previously accessed and that access
2379848b8605Smrg	       * had a different texture target, generate an error.
2380848b8605Smrg	       *
2381848b8605Smrg	       * If this texture unit was previously accessed and that access
2382848b8605Smrg	       * had a different shadow mode, generate an error.
2383848b8605Smrg	       */
2384848b8605Smrg	      if ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != 0)
2385848b8605Smrg		  && ((state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] != target_mask)
2386848b8605Smrg		      || ((state->prog->ShadowSamplers & tex_mask)
2387848b8605Smrg			  != shadow_tex))) {
2388848b8605Smrg		 yyerror(& (yylsp[(8) - (8)]), state,
2389848b8605Smrg			 "multiple targets used on one texture image unit");
2390848b8605Smrg		 YYERROR;
2391848b8605Smrg	      }
2392848b8605Smrg
2393848b8605Smrg
2394848b8605Smrg	      state->prog->TexturesUsed[(yyvsp[(6) - (8)].integer)] |= target_mask;
2395848b8605Smrg	      state->prog->ShadowSamplers |= shadow_tex;
2396848b8605Smrg	   }
2397848b8605Smrg	}
2398848b8605Smrg    break;
2399848b8605Smrg
2400848b8605Smrg  case 31:
2401848b8605Smrg/* Line 1813 of yacc.c  */
2402848b8605Smrg#line 468 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2403848b8605Smrg    {
2404848b8605Smrg	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
2405848b8605Smrg	   state->fragment.UsesKill = 1;
2406848b8605Smrg	}
2407848b8605Smrg    break;
2408848b8605Smrg
2409848b8605Smrg  case 32:
2410848b8605Smrg/* Line 1813 of yacc.c  */
2411848b8605Smrg#line 473 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2412848b8605Smrg    {
2413848b8605Smrg	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL);
2414848b8605Smrg	   (yyval.inst)->Base.DstReg.CondMask = (yyvsp[(2) - (2)].dst_reg).CondMask;
2415848b8605Smrg	   (yyval.inst)->Base.DstReg.CondSwizzle = (yyvsp[(2) - (2)].dst_reg).CondSwizzle;
2416848b8605Smrg	   state->fragment.UsesKill = 1;
2417848b8605Smrg	}
2418848b8605Smrg    break;
2419848b8605Smrg
2420848b8605Smrg  case 33:
2421848b8605Smrg/* Line 1813 of yacc.c  */
2422848b8605Smrg#line 482 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2423848b8605Smrg    {
2424848b8605Smrg	   (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));
2425848b8605Smrg	   if ((yyval.inst) != NULL) {
2426848b8605Smrg	      const GLbitfield tex_mask = (1U << (yyvsp[(10) - (12)].integer));
2427848b8605Smrg	      GLbitfield shadow_tex = 0;
2428848b8605Smrg	      GLbitfield target_mask = 0;
2429848b8605Smrg
2430848b8605Smrg
2431848b8605Smrg	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[(10) - (12)].integer);
2432848b8605Smrg
2433848b8605Smrg	      if ((yyvsp[(12) - (12)].integer) < 0) {
2434848b8605Smrg		 shadow_tex = tex_mask;
2435848b8605Smrg
2436848b8605Smrg		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[(12) - (12)].integer);
2437848b8605Smrg		 (yyval.inst)->Base.TexShadow = 1;
2438848b8605Smrg	      } else {
2439848b8605Smrg		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[(12) - (12)].integer);
2440848b8605Smrg	      }
2441848b8605Smrg
2442848b8605Smrg	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2443848b8605Smrg
2444848b8605Smrg	      /* If this texture unit was previously accessed and that access
2445848b8605Smrg	       * had a different texture target, generate an error.
2446848b8605Smrg	       *
2447848b8605Smrg	       * If this texture unit was previously accessed and that access
2448848b8605Smrg	       * had a different shadow mode, generate an error.
2449848b8605Smrg	       */
2450848b8605Smrg	      if ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != 0)
2451848b8605Smrg		  && ((state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] != target_mask)
2452848b8605Smrg		      || ((state->prog->ShadowSamplers & tex_mask)
2453848b8605Smrg			  != shadow_tex))) {
2454848b8605Smrg		 yyerror(& (yylsp[(12) - (12)]), state,
2455848b8605Smrg			 "multiple targets used on one texture image unit");
2456848b8605Smrg		 YYERROR;
2457848b8605Smrg	      }
2458848b8605Smrg
2459848b8605Smrg
2460848b8605Smrg	      state->prog->TexturesUsed[(yyvsp[(10) - (12)].integer)] |= target_mask;
2461848b8605Smrg	      state->prog->ShadowSamplers |= shadow_tex;
2462848b8605Smrg	   }
2463848b8605Smrg	}
2464848b8605Smrg    break;
2465848b8605Smrg
2466848b8605Smrg  case 34:
2467848b8605Smrg/* Line 1813 of yacc.c  */
2468848b8605Smrg#line 526 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2469848b8605Smrg    {
2470848b8605Smrg	   (yyval.integer) = (yyvsp[(2) - (2)].integer);
2471848b8605Smrg	}
2472848b8605Smrg    break;
2473848b8605Smrg
2474848b8605Smrg  case 35:
2475848b8605Smrg/* Line 1813 of yacc.c  */
2476848b8605Smrg#line 531 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2477848b8605Smrg    { (yyval.integer) = TEXTURE_1D_INDEX; }
2478848b8605Smrg    break;
2479848b8605Smrg
2480848b8605Smrg  case 36:
2481848b8605Smrg/* Line 1813 of yacc.c  */
2482848b8605Smrg#line 532 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2483848b8605Smrg    { (yyval.integer) = TEXTURE_2D_INDEX; }
2484848b8605Smrg    break;
2485848b8605Smrg
2486848b8605Smrg  case 37:
2487848b8605Smrg/* Line 1813 of yacc.c  */
2488848b8605Smrg#line 533 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2489848b8605Smrg    { (yyval.integer) = TEXTURE_3D_INDEX; }
2490848b8605Smrg    break;
2491848b8605Smrg
2492848b8605Smrg  case 38:
2493848b8605Smrg/* Line 1813 of yacc.c  */
2494848b8605Smrg#line 534 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2495848b8605Smrg    { (yyval.integer) = TEXTURE_CUBE_INDEX; }
2496848b8605Smrg    break;
2497848b8605Smrg
2498848b8605Smrg  case 39:
2499848b8605Smrg/* Line 1813 of yacc.c  */
2500848b8605Smrg#line 535 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2501848b8605Smrg    { (yyval.integer) = TEXTURE_RECT_INDEX; }
2502848b8605Smrg    break;
2503848b8605Smrg
2504848b8605Smrg  case 40:
2505848b8605Smrg/* Line 1813 of yacc.c  */
2506848b8605Smrg#line 536 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2507848b8605Smrg    { (yyval.integer) = -TEXTURE_1D_INDEX; }
2508848b8605Smrg    break;
2509848b8605Smrg
2510848b8605Smrg  case 41:
2511848b8605Smrg/* Line 1813 of yacc.c  */
2512848b8605Smrg#line 537 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2513848b8605Smrg    { (yyval.integer) = -TEXTURE_2D_INDEX; }
2514848b8605Smrg    break;
2515848b8605Smrg
2516848b8605Smrg  case 42:
2517848b8605Smrg/* Line 1813 of yacc.c  */
2518848b8605Smrg#line 538 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2519848b8605Smrg    { (yyval.integer) = -TEXTURE_RECT_INDEX; }
2520848b8605Smrg    break;
2521848b8605Smrg
2522848b8605Smrg  case 43:
2523848b8605Smrg/* Line 1813 of yacc.c  */
2524848b8605Smrg#line 539 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2525848b8605Smrg    { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; }
2526848b8605Smrg    break;
2527848b8605Smrg
2528848b8605Smrg  case 44:
2529848b8605Smrg/* Line 1813 of yacc.c  */
2530848b8605Smrg#line 540 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2531848b8605Smrg    { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; }
2532848b8605Smrg    break;
2533848b8605Smrg
2534848b8605Smrg  case 45:
2535848b8605Smrg/* Line 1813 of yacc.c  */
2536848b8605Smrg#line 541 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2537848b8605Smrg    { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; }
2538848b8605Smrg    break;
2539848b8605Smrg
2540848b8605Smrg  case 46:
2541848b8605Smrg/* Line 1813 of yacc.c  */
2542848b8605Smrg#line 542 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2543848b8605Smrg    { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; }
2544848b8605Smrg    break;
2545848b8605Smrg
2546848b8605Smrg  case 47:
2547848b8605Smrg/* Line 1813 of yacc.c  */
2548848b8605Smrg#line 546 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2549848b8605Smrg    {
2550848b8605Smrg	   /* FIXME: Is this correct?  Should the extenedSwizzle be applied
2551848b8605Smrg	    * FIXME: to the existing swizzle?
2552848b8605Smrg	    */
2553848b8605Smrg	   (yyvsp[(4) - (6)].src_reg).Base.Swizzle = (yyvsp[(6) - (6)].swiz_mask).swizzle;
2554848b8605Smrg	   (yyvsp[(4) - (6)].src_reg).Base.Negate = (yyvsp[(6) - (6)].swiz_mask).mask;
2555848b8605Smrg
2556848b8605Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), NULL, NULL);
2557848b8605Smrg	}
2558848b8605Smrg    break;
2559848b8605Smrg
2560848b8605Smrg  case 48:
2561848b8605Smrg/* Line 1813 of yacc.c  */
2562848b8605Smrg#line 558 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2563848b8605Smrg    {
2564848b8605Smrg	   (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
2565848b8605Smrg
2566848b8605Smrg	   if ((yyvsp[(1) - (2)].negate)) {
2567848b8605Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2568848b8605Smrg	   }
2569848b8605Smrg	}
2570848b8605Smrg    break;
2571848b8605Smrg
2572848b8605Smrg  case 49:
2573848b8605Smrg/* Line 1813 of yacc.c  */
2574848b8605Smrg#line 566 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2575848b8605Smrg    {
2576848b8605Smrg	   (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
2577848b8605Smrg
2578848b8605Smrg	   if (!state->option.NV_fragment) {
2579848b8605Smrg	      yyerror(& (yylsp[(2) - (4)]), state, "unexpected character '|'");
2580848b8605Smrg	      YYERROR;
2581848b8605Smrg	   }
2582848b8605Smrg
2583848b8605Smrg	   if ((yyvsp[(1) - (4)].negate)) {
2584848b8605Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2585848b8605Smrg	   }
2586848b8605Smrg
2587848b8605Smrg	   (yyval.src_reg).Base.Abs = 1;
2588848b8605Smrg	}
2589848b8605Smrg    break;
2590848b8605Smrg
2591848b8605Smrg  case 50:
2592848b8605Smrg/* Line 1813 of yacc.c  */
2593848b8605Smrg#line 583 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2594848b8605Smrg    {
2595848b8605Smrg	   (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
2596848b8605Smrg
2597848b8605Smrg	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2598848b8605Smrg						    (yyvsp[(2) - (2)].swiz_mask).swizzle);
2599848b8605Smrg	}
2600848b8605Smrg    break;
2601848b8605Smrg
2602848b8605Smrg  case 51:
2603848b8605Smrg/* Line 1813 of yacc.c  */
2604848b8605Smrg#line 590 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2605848b8605Smrg    {
2606848b8605Smrg	   struct asm_symbol temp_sym;
2607848b8605Smrg
2608848b8605Smrg	   if (!state->option.NV_fragment) {
2609848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "expected scalar suffix");
2610848b8605Smrg	      YYERROR;
2611848b8605Smrg	   }
2612848b8605Smrg
2613848b8605Smrg	   memset(& temp_sym, 0, sizeof(temp_sym));
2614848b8605Smrg	   temp_sym.param_binding_begin = ~0;
2615848b8605Smrg	   initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector), GL_TRUE);
2616848b8605Smrg
2617848b8605Smrg	   set_src_reg_swz(& (yyval.src_reg), PROGRAM_CONSTANT,
2618848b8605Smrg                           temp_sym.param_binding_begin,
2619848b8605Smrg                           temp_sym.param_binding_swizzle);
2620848b8605Smrg	}
2621848b8605Smrg    break;
2622848b8605Smrg
2623848b8605Smrg  case 52:
2624848b8605Smrg/* Line 1813 of yacc.c  */
2625848b8605Smrg#line 609 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2626848b8605Smrg    {
2627848b8605Smrg	   (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
2628848b8605Smrg
2629848b8605Smrg	   if ((yyvsp[(1) - (3)].negate)) {
2630848b8605Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2631848b8605Smrg	   }
2632848b8605Smrg
2633848b8605Smrg	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2634848b8605Smrg						    (yyvsp[(3) - (3)].swiz_mask).swizzle);
2635848b8605Smrg	}
2636848b8605Smrg    break;
2637848b8605Smrg
2638848b8605Smrg  case 53:
2639848b8605Smrg/* Line 1813 of yacc.c  */
2640848b8605Smrg#line 620 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2641848b8605Smrg    {
2642848b8605Smrg	   (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
2643848b8605Smrg
2644848b8605Smrg	   if (!state->option.NV_fragment) {
2645848b8605Smrg	      yyerror(& (yylsp[(2) - (5)]), state, "unexpected character '|'");
2646848b8605Smrg	      YYERROR;
2647848b8605Smrg	   }
2648848b8605Smrg
2649848b8605Smrg	   if ((yyvsp[(1) - (5)].negate)) {
2650848b8605Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2651848b8605Smrg	   }
2652848b8605Smrg
2653848b8605Smrg	   (yyval.src_reg).Base.Abs = 1;
2654848b8605Smrg	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2655848b8605Smrg						    (yyvsp[(4) - (5)].swiz_mask).swizzle);
2656848b8605Smrg	}
2657848b8605Smrg    break;
2658848b8605Smrg
2659848b8605Smrg  case 54:
2660848b8605Smrg/* Line 1813 of yacc.c  */
2661848b8605Smrg#line 640 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2662848b8605Smrg    {
2663848b8605Smrg	   (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg);
2664848b8605Smrg	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (3)].swiz_mask).mask;
2665848b8605Smrg	   (yyval.dst_reg).CondMask = (yyvsp[(3) - (3)].dst_reg).CondMask;
2666848b8605Smrg	   (yyval.dst_reg).CondSwizzle = (yyvsp[(3) - (3)].dst_reg).CondSwizzle;
2667848b8605Smrg
2668848b8605Smrg	   if ((yyval.dst_reg).File == PROGRAM_OUTPUT) {
2669848b8605Smrg	      /* Technically speaking, this should check that it is in
2670848b8605Smrg	       * vertex program mode.  However, PositionInvariant can never be
2671848b8605Smrg	       * set in fragment program mode, so it is somewhat irrelevant.
2672848b8605Smrg	       */
2673848b8605Smrg	      if (state->option.PositionInvariant
2674848b8605Smrg	       && ((yyval.dst_reg).Index == VARYING_SLOT_POS)) {
2675848b8605Smrg		 yyerror(& (yylsp[(1) - (3)]), state, "position-invariant programs cannot "
2676848b8605Smrg			 "write position");
2677848b8605Smrg		 YYERROR;
2678848b8605Smrg	      }
2679848b8605Smrg
2680848b8605Smrg	      state->prog->OutputsWritten |= BITFIELD64_BIT((yyval.dst_reg).Index);
2681848b8605Smrg	   }
2682848b8605Smrg	}
2683848b8605Smrg    break;
2684848b8605Smrg
2685848b8605Smrg  case 55:
2686848b8605Smrg/* Line 1813 of yacc.c  */
2687848b8605Smrg#line 664 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2688848b8605Smrg    {
2689848b8605Smrg	   set_dst_reg(& (yyval.dst_reg), PROGRAM_ADDRESS, 0);
2690848b8605Smrg	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
2691848b8605Smrg	}
2692848b8605Smrg    break;
2693848b8605Smrg
2694848b8605Smrg  case 56:
2695848b8605Smrg/* Line 1813 of yacc.c  */
2696848b8605Smrg#line 671 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2697848b8605Smrg    {
2698848b8605Smrg	   const unsigned xyzw_valid =
2699848b8605Smrg	      ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
2700848b8605Smrg	      | ((yyvsp[(3) - (7)].ext_swizzle).xyzw_valid << 1)
2701848b8605Smrg	      | ((yyvsp[(5) - (7)].ext_swizzle).xyzw_valid << 2)
2702848b8605Smrg	      | ((yyvsp[(7) - (7)].ext_swizzle).xyzw_valid << 3);
2703848b8605Smrg	   const unsigned rgba_valid =
2704848b8605Smrg	      ((yyvsp[(1) - (7)].ext_swizzle).rgba_valid << 0)
2705848b8605Smrg	      | ((yyvsp[(3) - (7)].ext_swizzle).rgba_valid << 1)
2706848b8605Smrg	      | ((yyvsp[(5) - (7)].ext_swizzle).rgba_valid << 2)
2707848b8605Smrg	      | ((yyvsp[(7) - (7)].ext_swizzle).rgba_valid << 3);
2708848b8605Smrg
2709848b8605Smrg	   /* All of the swizzle components have to be valid in either RGBA
2710848b8605Smrg	    * or XYZW.  Note that 0 and 1 are valid in both, so both masks
2711848b8605Smrg	    * can have some bits set.
2712848b8605Smrg	    *
2713848b8605Smrg	    * We somewhat deviate from the spec here.  It would be really hard
2714848b8605Smrg	    * to figure out which component is the error, and there probably
2715848b8605Smrg	    * isn't a lot of benefit.
2716848b8605Smrg	    */
2717848b8605Smrg	   if ((rgba_valid != 0x0f) && (xyzw_valid != 0x0f)) {
2718848b8605Smrg	      yyerror(& (yylsp[(1) - (7)]), state, "cannot combine RGBA and XYZW swizzle "
2719848b8605Smrg		      "components");
2720848b8605Smrg	      YYERROR;
2721848b8605Smrg	   }
2722848b8605Smrg
2723848b8605Smrg	   (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);
2724848b8605Smrg	   (yyval.swiz_mask).mask = ((yyvsp[(1) - (7)].ext_swizzle).negate) | ((yyvsp[(3) - (7)].ext_swizzle).negate << 1) | ((yyvsp[(5) - (7)].ext_swizzle).negate << 2)
2725848b8605Smrg	      | ((yyvsp[(7) - (7)].ext_swizzle).negate << 3);
2726848b8605Smrg	}
2727848b8605Smrg    break;
2728848b8605Smrg
2729848b8605Smrg  case 57:
2730848b8605Smrg/* Line 1813 of yacc.c  */
2731848b8605Smrg#line 704 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2732848b8605Smrg    {
2733848b8605Smrg	   (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
2734848b8605Smrg	   (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
2735848b8605Smrg	}
2736848b8605Smrg    break;
2737848b8605Smrg
2738848b8605Smrg  case 58:
2739848b8605Smrg/* Line 1813 of yacc.c  */
2740848b8605Smrg#line 711 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2741848b8605Smrg    {
2742848b8605Smrg	   if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
2743848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2744848b8605Smrg	      YYERROR;
2745848b8605Smrg	   }
2746848b8605Smrg
2747848b8605Smrg	   (yyval.ext_swizzle).swz = ((yyvsp[(1) - (1)].integer) == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
2748848b8605Smrg           (yyval.ext_swizzle).negate = 0;
2749848b8605Smrg
2750848b8605Smrg	   /* 0 and 1 are valid for both RGBA swizzle names and XYZW
2751848b8605Smrg	    * swizzle names.
2752848b8605Smrg	    */
2753848b8605Smrg	   (yyval.ext_swizzle).xyzw_valid = 1;
2754848b8605Smrg	   (yyval.ext_swizzle).rgba_valid = 1;
2755848b8605Smrg	}
2756848b8605Smrg    break;
2757848b8605Smrg
2758848b8605Smrg  case 59:
2759848b8605Smrg/* Line 1813 of yacc.c  */
2760848b8605Smrg#line 727 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2761848b8605Smrg    {
2762848b8605Smrg	   char s;
2763848b8605Smrg
2764848b8605Smrg	   if (strlen((yyvsp[(1) - (1)].string)) > 1) {
2765848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2766848b8605Smrg	      YYERROR;
2767848b8605Smrg	   }
2768848b8605Smrg
2769848b8605Smrg	   s = (yyvsp[(1) - (1)].string)[0];
2770848b8605Smrg	   free((yyvsp[(1) - (1)].string));
2771848b8605Smrg
2772848b8605Smrg           (yyval.ext_swizzle).rgba_valid = 0;
2773848b8605Smrg           (yyval.ext_swizzle).xyzw_valid = 0;
2774848b8605Smrg           (yyval.ext_swizzle).negate = 0;
2775848b8605Smrg
2776848b8605Smrg	   switch (s) {
2777848b8605Smrg	   case 'x':
2778848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2779848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2780848b8605Smrg	      break;
2781848b8605Smrg	   case 'y':
2782848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2783848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2784848b8605Smrg	      break;
2785848b8605Smrg	   case 'z':
2786848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2787848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2788848b8605Smrg	      break;
2789848b8605Smrg	   case 'w':
2790848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2791848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2792848b8605Smrg	      break;
2793848b8605Smrg
2794848b8605Smrg	   case 'r':
2795848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2796848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2797848b8605Smrg	      break;
2798848b8605Smrg	   case 'g':
2799848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2800848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2801848b8605Smrg	      break;
2802848b8605Smrg	   case 'b':
2803848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2804848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2805848b8605Smrg	      break;
2806848b8605Smrg	   case 'a':
2807848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2808848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2809848b8605Smrg	      break;
2810848b8605Smrg
2811848b8605Smrg	   default:
2812848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
2813848b8605Smrg	      YYERROR;
2814848b8605Smrg	      break;
2815848b8605Smrg	   }
2816848b8605Smrg	}
2817848b8605Smrg    break;
2818848b8605Smrg
2819848b8605Smrg  case 60:
2820848b8605Smrg/* Line 1813 of yacc.c  */
2821848b8605Smrg#line 786 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2822848b8605Smrg    {
2823848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2824848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
2825848b8605Smrg
2826848b8605Smrg	   free((yyvsp[(1) - (1)].string));
2827848b8605Smrg
2828848b8605Smrg	   if (s == NULL) {
2829848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2830848b8605Smrg	      YYERROR;
2831848b8605Smrg	   } else if ((s->type != at_param) && (s->type != at_temp)
2832848b8605Smrg		      && (s->type != at_attrib)) {
2833848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2834848b8605Smrg	      YYERROR;
2835848b8605Smrg	   } else if ((s->type == at_param) && s->param_is_array) {
2836848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "non-array access to array PARAM");
2837848b8605Smrg	      YYERROR;
2838848b8605Smrg	   }
2839848b8605Smrg
2840848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2841848b8605Smrg	   switch (s->type) {
2842848b8605Smrg	   case at_temp:
2843848b8605Smrg	      set_src_reg(& (yyval.src_reg), PROGRAM_TEMPORARY, s->temp_binding);
2844848b8605Smrg	      break;
2845848b8605Smrg	   case at_param:
2846848b8605Smrg              set_src_reg_swz(& (yyval.src_reg), s->param_binding_type,
2847848b8605Smrg                              s->param_binding_begin,
2848848b8605Smrg                              s->param_binding_swizzle);
2849848b8605Smrg	      break;
2850848b8605Smrg	   case at_attrib:
2851848b8605Smrg	      set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, s->attrib_binding);
2852848b8605Smrg	      state->prog->InputsRead |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2853848b8605Smrg
2854848b8605Smrg	      if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
2855848b8605Smrg		 YYERROR;
2856848b8605Smrg	      }
2857848b8605Smrg	      break;
2858848b8605Smrg
2859848b8605Smrg	   default:
2860848b8605Smrg	      YYERROR;
2861848b8605Smrg	      break;
2862848b8605Smrg	   }
2863848b8605Smrg	}
2864848b8605Smrg    break;
2865848b8605Smrg
2866848b8605Smrg  case 61:
2867848b8605Smrg/* Line 1813 of yacc.c  */
2868848b8605Smrg#line 829 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2869848b8605Smrg    {
2870848b8605Smrg	   set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, (yyvsp[(1) - (1)].attrib));
2871848b8605Smrg	   state->prog->InputsRead |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2872848b8605Smrg
2873848b8605Smrg	   if (!validate_inputs(& (yylsp[(1) - (1)]), state)) {
2874848b8605Smrg	      YYERROR;
2875848b8605Smrg	   }
2876848b8605Smrg	}
2877848b8605Smrg    break;
2878848b8605Smrg
2879848b8605Smrg  case 62:
2880848b8605Smrg/* Line 1813 of yacc.c  */
2881848b8605Smrg#line 838 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2882848b8605Smrg    {
2883848b8605Smrg	   if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr
2884848b8605Smrg	       && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) {
2885848b8605Smrg	      yyerror(& (yylsp[(3) - (4)]), state, "out of bounds array access");
2886848b8605Smrg	      YYERROR;
2887848b8605Smrg	   }
2888848b8605Smrg
2889848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2890848b8605Smrg	   (yyval.src_reg).Base.File = (yyvsp[(1) - (4)].sym)->param_binding_type;
2891848b8605Smrg
2892848b8605Smrg	   if ((yyvsp[(3) - (4)].src_reg).Base.RelAddr) {
2893848b8605Smrg              state->prog->IndirectRegisterFiles |= (1 << (yyval.src_reg).Base.File);
2894848b8605Smrg	      (yyvsp[(1) - (4)].sym)->param_accessed_indirectly = 1;
2895848b8605Smrg
2896848b8605Smrg	      (yyval.src_reg).Base.RelAddr = 1;
2897848b8605Smrg	      (yyval.src_reg).Base.Index = (yyvsp[(3) - (4)].src_reg).Base.Index;
2898848b8605Smrg	      (yyval.src_reg).Symbol = (yyvsp[(1) - (4)].sym);
2899848b8605Smrg	   } else {
2900848b8605Smrg	      (yyval.src_reg).Base.Index = (yyvsp[(1) - (4)].sym)->param_binding_begin + (yyvsp[(3) - (4)].src_reg).Base.Index;
2901848b8605Smrg	   }
2902848b8605Smrg	}
2903848b8605Smrg    break;
2904848b8605Smrg
2905848b8605Smrg  case 63:
2906848b8605Smrg/* Line 1813 of yacc.c  */
2907848b8605Smrg#line 860 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2908848b8605Smrg    {
2909848b8605Smrg           gl_register_file file = ((yyvsp[(1) - (1)].temp_sym).name != NULL)
2910848b8605Smrg	      ? (yyvsp[(1) - (1)].temp_sym).param_binding_type
2911848b8605Smrg	      : PROGRAM_CONSTANT;
2912848b8605Smrg           set_src_reg_swz(& (yyval.src_reg), file, (yyvsp[(1) - (1)].temp_sym).param_binding_begin,
2913848b8605Smrg                           (yyvsp[(1) - (1)].temp_sym).param_binding_swizzle);
2914848b8605Smrg	}
2915848b8605Smrg    break;
2916848b8605Smrg
2917848b8605Smrg  case 64:
2918848b8605Smrg/* Line 1813 of yacc.c  */
2919848b8605Smrg#line 870 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2920848b8605Smrg    {
2921848b8605Smrg	   set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[(1) - (1)].result));
2922848b8605Smrg	}
2923848b8605Smrg    break;
2924848b8605Smrg
2925848b8605Smrg  case 65:
2926848b8605Smrg/* Line 1813 of yacc.c  */
2927848b8605Smrg#line 874 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2928848b8605Smrg    {
2929848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2930848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
2931848b8605Smrg
2932848b8605Smrg	   free((yyvsp[(1) - (1)].string));
2933848b8605Smrg
2934848b8605Smrg	   if (s == NULL) {
2935848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2936848b8605Smrg	      YYERROR;
2937848b8605Smrg	   } else if ((s->type != at_output) && (s->type != at_temp)) {
2938848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2939848b8605Smrg	      YYERROR;
2940848b8605Smrg	   }
2941848b8605Smrg
2942848b8605Smrg	   switch (s->type) {
2943848b8605Smrg	   case at_temp:
2944848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), PROGRAM_TEMPORARY, s->temp_binding);
2945848b8605Smrg	      break;
2946848b8605Smrg	   case at_output:
2947848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, s->output_binding);
2948848b8605Smrg	      break;
2949848b8605Smrg	   default:
2950848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), s->param_binding_type, s->param_binding_begin);
2951848b8605Smrg	      break;
2952848b8605Smrg	   }
2953848b8605Smrg	}
2954848b8605Smrg    break;
2955848b8605Smrg
2956848b8605Smrg  case 66:
2957848b8605Smrg/* Line 1813 of yacc.c  */
2958848b8605Smrg#line 903 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2959848b8605Smrg    {
2960848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2961848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
2962848b8605Smrg
2963848b8605Smrg	   free((yyvsp[(1) - (1)].string));
2964848b8605Smrg
2965848b8605Smrg	   if (s == NULL) {
2966848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
2967848b8605Smrg	      YYERROR;
2968848b8605Smrg	   } else if ((s->type != at_param) || !s->param_is_array) {
2969848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "array access to non-PARAM variable");
2970848b8605Smrg	      YYERROR;
2971848b8605Smrg	   } else {
2972848b8605Smrg	      (yyval.sym) = s;
2973848b8605Smrg	   }
2974848b8605Smrg	}
2975848b8605Smrg    break;
2976848b8605Smrg
2977848b8605Smrg  case 69:
2978848b8605Smrg/* Line 1813 of yacc.c  */
2979848b8605Smrg#line 924 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2980848b8605Smrg    {
2981848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2982848b8605Smrg	   (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
2983848b8605Smrg	}
2984848b8605Smrg    break;
2985848b8605Smrg
2986848b8605Smrg  case 70:
2987848b8605Smrg/* Line 1813 of yacc.c  */
2988848b8605Smrg#line 931 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
2989848b8605Smrg    {
2990848b8605Smrg	   /* FINISHME: Add support for multiple address registers.
2991848b8605Smrg	    */
2992848b8605Smrg	   /* FINISHME: Add support for 4-component address registers.
2993848b8605Smrg	    */
2994848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2995848b8605Smrg	   (yyval.src_reg).Base.RelAddr = 1;
2996848b8605Smrg	   (yyval.src_reg).Base.Index = (yyvsp[(3) - (3)].integer);
2997848b8605Smrg	}
2998848b8605Smrg    break;
2999848b8605Smrg
3000848b8605Smrg  case 71:
3001848b8605Smrg/* Line 1813 of yacc.c  */
3002848b8605Smrg#line 942 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3003848b8605Smrg    { (yyval.integer) = 0; }
3004848b8605Smrg    break;
3005848b8605Smrg
3006848b8605Smrg  case 72:
3007848b8605Smrg/* Line 1813 of yacc.c  */
3008848b8605Smrg#line 943 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3009848b8605Smrg    { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
3010848b8605Smrg    break;
3011848b8605Smrg
3012848b8605Smrg  case 73:
3013848b8605Smrg/* Line 1813 of yacc.c  */
3014848b8605Smrg#line 944 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3015848b8605Smrg    { (yyval.integer) = -(yyvsp[(2) - (2)].integer); }
3016848b8605Smrg    break;
3017848b8605Smrg
3018848b8605Smrg  case 74:
3019848b8605Smrg/* Line 1813 of yacc.c  */
3020848b8605Smrg#line 948 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3021848b8605Smrg    {
3022848b8605Smrg	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > (state->limits->MaxAddressOffset - 1))) {
3023848b8605Smrg              char s[100];
3024848b8605Smrg              _mesa_snprintf(s, sizeof(s),
3025848b8605Smrg                             "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
3026848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, s);
3027848b8605Smrg	      YYERROR;
3028848b8605Smrg	   } else {
3029848b8605Smrg	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3030848b8605Smrg	   }
3031848b8605Smrg	}
3032848b8605Smrg    break;
3033848b8605Smrg
3034848b8605Smrg  case 75:
3035848b8605Smrg/* Line 1813 of yacc.c  */
3036848b8605Smrg#line 962 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3037848b8605Smrg    {
3038848b8605Smrg	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > state->limits->MaxAddressOffset)) {
3039848b8605Smrg              char s[100];
3040848b8605Smrg              _mesa_snprintf(s, sizeof(s),
3041848b8605Smrg                             "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
3042848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, s);
3043848b8605Smrg	      YYERROR;
3044848b8605Smrg	   } else {
3045848b8605Smrg	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3046848b8605Smrg	   }
3047848b8605Smrg	}
3048848b8605Smrg    break;
3049848b8605Smrg
3050848b8605Smrg  case 76:
3051848b8605Smrg/* Line 1813 of yacc.c  */
3052848b8605Smrg#line 976 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3053848b8605Smrg    {
3054848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
3055848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
3056848b8605Smrg
3057848b8605Smrg	   free((yyvsp[(1) - (1)].string));
3058848b8605Smrg
3059848b8605Smrg	   if (s == NULL) {
3060848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid array member");
3061848b8605Smrg	      YYERROR;
3062848b8605Smrg	   } else if (s->type != at_address) {
3063848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state,
3064848b8605Smrg		      "invalid variable for indexed array access");
3065848b8605Smrg	      YYERROR;
3066848b8605Smrg	   } else {
3067848b8605Smrg	      (yyval.sym) = s;
3068848b8605Smrg	   }
3069848b8605Smrg	}
3070848b8605Smrg    break;
3071848b8605Smrg
3072848b8605Smrg  case 77:
3073848b8605Smrg/* Line 1813 of yacc.c  */
3074848b8605Smrg#line 996 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3075848b8605Smrg    {
3076848b8605Smrg	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
3077848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
3078848b8605Smrg	      YYERROR;
3079848b8605Smrg	   } else {
3080848b8605Smrg	      (yyval.swiz_mask) = (yyvsp[(1) - (1)].swiz_mask);
3081848b8605Smrg	   }
3082848b8605Smrg	}
3083848b8605Smrg    break;
3084848b8605Smrg
3085848b8605Smrg  case 78:
3086848b8605Smrg/* Line 1813 of yacc.c  */
3087848b8605Smrg#line 1007 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3088848b8605Smrg    {
3089848b8605Smrg	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
3090848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state,
3091848b8605Smrg		      "address register write mask must be \".x\"");
3092848b8605Smrg	      YYERROR;
3093848b8605Smrg	   } else {
3094848b8605Smrg	      (yyval.swiz_mask) = (yyvsp[(1) - (1)].swiz_mask);
3095848b8605Smrg	   }
3096848b8605Smrg	}
3097848b8605Smrg    break;
3098848b8605Smrg
3099848b8605Smrg  case 83:
3100848b8605Smrg/* Line 1813 of yacc.c  */
3101848b8605Smrg#line 1023 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3102848b8605Smrg    { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
3103848b8605Smrg    break;
3104848b8605Smrg
3105848b8605Smrg  case 88:
3106848b8605Smrg/* Line 1813 of yacc.c  */
3107848b8605Smrg#line 1027 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3108848b8605Smrg    { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
3109848b8605Smrg    break;
3110848b8605Smrg
3111848b8605Smrg  case 89:
3112848b8605Smrg/* Line 1813 of yacc.c  */
3113848b8605Smrg#line 1031 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3114848b8605Smrg    {
3115848b8605Smrg	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
3116848b8605Smrg	}
3117848b8605Smrg    break;
3118848b8605Smrg
3119848b8605Smrg  case 90:
3120848b8605Smrg/* Line 1813 of yacc.c  */
3121848b8605Smrg#line 1035 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3122848b8605Smrg    {
3123848b8605Smrg	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
3124848b8605Smrg	}
3125848b8605Smrg    break;
3126848b8605Smrg
3127848b8605Smrg  case 91:
3128848b8605Smrg/* Line 1813 of yacc.c  */
3129848b8605Smrg#line 1039 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3130848b8605Smrg    {
3131848b8605Smrg	   (yyval.dst_reg).CondMask = COND_TR;
3132848b8605Smrg	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3133848b8605Smrg	}
3134848b8605Smrg    break;
3135848b8605Smrg
3136848b8605Smrg  case 92:
3137848b8605Smrg/* Line 1813 of yacc.c  */
3138848b8605Smrg#line 1046 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3139848b8605Smrg    {
3140848b8605Smrg	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
3141848b8605Smrg	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
3142848b8605Smrg	}
3143848b8605Smrg    break;
3144848b8605Smrg
3145848b8605Smrg  case 93:
3146848b8605Smrg/* Line 1813 of yacc.c  */
3147848b8605Smrg#line 1053 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3148848b8605Smrg    {
3149848b8605Smrg	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
3150848b8605Smrg	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle;
3151848b8605Smrg	}
3152848b8605Smrg    break;
3153848b8605Smrg
3154848b8605Smrg  case 94:
3155848b8605Smrg/* Line 1813 of yacc.c  */
3156848b8605Smrg#line 1060 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3157848b8605Smrg    {
3158848b8605Smrg	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
3159848b8605Smrg	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
3160848b8605Smrg	      char *const err_str =
3161848b8605Smrg		 make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
3162848b8605Smrg
3163848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
3164848b8605Smrg		      ? err_str : "invalid condition code");
3165848b8605Smrg
3166848b8605Smrg	      if (err_str != NULL) {
3167848b8605Smrg		 free(err_str);
3168848b8605Smrg	      }
3169848b8605Smrg
3170848b8605Smrg	      YYERROR;
3171848b8605Smrg	   }
3172848b8605Smrg
3173848b8605Smrg	   (yyval.dst_reg).CondMask = cond;
3174848b8605Smrg	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3175848b8605Smrg	}
3176848b8605Smrg    break;
3177848b8605Smrg
3178848b8605Smrg  case 95:
3179848b8605Smrg/* Line 1813 of yacc.c  */
3180848b8605Smrg#line 1082 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3181848b8605Smrg    {
3182848b8605Smrg	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));
3183848b8605Smrg	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) {
3184848b8605Smrg	      char *const err_str =
3185848b8605Smrg		 make_error_string("invalid condition code \"%s\"", (yyvsp[(1) - (1)].string));
3186848b8605Smrg
3187848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
3188848b8605Smrg		      ? err_str : "invalid condition code");
3189848b8605Smrg
3190848b8605Smrg	      if (err_str != NULL) {
3191848b8605Smrg		 free(err_str);
3192848b8605Smrg	      }
3193848b8605Smrg
3194848b8605Smrg	      YYERROR;
3195848b8605Smrg	   }
3196848b8605Smrg
3197848b8605Smrg	   (yyval.dst_reg).CondMask = cond;
3198848b8605Smrg	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
3199848b8605Smrg	}
3200848b8605Smrg    break;
3201848b8605Smrg
3202848b8605Smrg  case 102:
3203848b8605Smrg/* Line 1813 of yacc.c  */
3204848b8605Smrg#line 1112 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3205848b8605Smrg    {
3206848b8605Smrg	   struct asm_symbol *const s =
3207848b8605Smrg	      declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
3208848b8605Smrg
3209848b8605Smrg	   if (s == NULL) {
3210848b8605Smrg	      free((yyvsp[(2) - (4)].string));
3211848b8605Smrg	      YYERROR;
3212848b8605Smrg	   } else {
3213848b8605Smrg	      s->attrib_binding = (yyvsp[(4) - (4)].attrib);
3214848b8605Smrg	      state->InputsBound |= BITFIELD64_BIT(s->attrib_binding);
3215848b8605Smrg
3216848b8605Smrg	      if (!validate_inputs(& (yylsp[(4) - (4)]), state)) {
3217848b8605Smrg		 YYERROR;
3218848b8605Smrg	      }
3219848b8605Smrg	   }
3220848b8605Smrg	}
3221848b8605Smrg    break;
3222848b8605Smrg
3223848b8605Smrg  case 103:
3224848b8605Smrg/* Line 1813 of yacc.c  */
3225848b8605Smrg#line 1131 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3226848b8605Smrg    {
3227848b8605Smrg	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
3228848b8605Smrg	}
3229848b8605Smrg    break;
3230848b8605Smrg
3231848b8605Smrg  case 104:
3232848b8605Smrg/* Line 1813 of yacc.c  */
3233848b8605Smrg#line 1135 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3234848b8605Smrg    {
3235848b8605Smrg	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
3236848b8605Smrg	}
3237848b8605Smrg    break;
3238848b8605Smrg
3239848b8605Smrg  case 105:
3240848b8605Smrg/* Line 1813 of yacc.c  */
3241848b8605Smrg#line 1141 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3242848b8605Smrg    {
3243848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_POS;
3244848b8605Smrg	}
3245848b8605Smrg    break;
3246848b8605Smrg
3247848b8605Smrg  case 106:
3248848b8605Smrg/* Line 1813 of yacc.c  */
3249848b8605Smrg#line 1145 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3250848b8605Smrg    {
3251848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_WEIGHT;
3252848b8605Smrg	}
3253848b8605Smrg    break;
3254848b8605Smrg
3255848b8605Smrg  case 107:
3256848b8605Smrg/* Line 1813 of yacc.c  */
3257848b8605Smrg#line 1149 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3258848b8605Smrg    {
3259848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_NORMAL;
3260848b8605Smrg	}
3261848b8605Smrg    break;
3262848b8605Smrg
3263848b8605Smrg  case 108:
3264848b8605Smrg/* Line 1813 of yacc.c  */
3265848b8605Smrg#line 1153 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3266848b8605Smrg    {
3267848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_COLOR0 + (yyvsp[(2) - (2)].integer);
3268848b8605Smrg	}
3269848b8605Smrg    break;
3270848b8605Smrg
3271848b8605Smrg  case 109:
3272848b8605Smrg/* Line 1813 of yacc.c  */
3273848b8605Smrg#line 1157 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3274848b8605Smrg    {
3275848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_FOG;
3276848b8605Smrg	}
3277848b8605Smrg    break;
3278848b8605Smrg
3279848b8605Smrg  case 110:
3280848b8605Smrg/* Line 1813 of yacc.c  */
3281848b8605Smrg#line 1161 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3282848b8605Smrg    {
3283848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
3284848b8605Smrg	}
3285848b8605Smrg    break;
3286848b8605Smrg
3287848b8605Smrg  case 111:
3288848b8605Smrg/* Line 1813 of yacc.c  */
3289848b8605Smrg#line 1165 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3290848b8605Smrg    {
3291848b8605Smrg	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
3292848b8605Smrg	   YYERROR;
3293848b8605Smrg	}
3294848b8605Smrg    break;
3295848b8605Smrg
3296848b8605Smrg  case 112:
3297848b8605Smrg/* Line 1813 of yacc.c  */
3298848b8605Smrg#line 1170 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3299848b8605Smrg    {
3300848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
3301848b8605Smrg	}
3302848b8605Smrg    break;
3303848b8605Smrg
3304848b8605Smrg  case 113:
3305848b8605Smrg/* Line 1813 of yacc.c  */
3306848b8605Smrg#line 1176 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3307848b8605Smrg    {
3308848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
3309848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
3310848b8605Smrg	      YYERROR;
3311848b8605Smrg	   }
3312848b8605Smrg
3313848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3314848b8605Smrg	}
3315848b8605Smrg    break;
3316848b8605Smrg
3317848b8605Smrg  case 117:
3318848b8605Smrg/* Line 1813 of yacc.c  */
3319848b8605Smrg#line 1190 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3320848b8605Smrg    {
3321848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_POS;
3322848b8605Smrg	}
3323848b8605Smrg    break;
3324848b8605Smrg
3325848b8605Smrg  case 118:
3326848b8605Smrg/* Line 1813 of yacc.c  */
3327848b8605Smrg#line 1194 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3328848b8605Smrg    {
3329848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_COL0 + (yyvsp[(2) - (2)].integer);
3330848b8605Smrg	}
3331848b8605Smrg    break;
3332848b8605Smrg
3333848b8605Smrg  case 119:
3334848b8605Smrg/* Line 1813 of yacc.c  */
3335848b8605Smrg#line 1198 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3336848b8605Smrg    {
3337848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_FOGC;
3338848b8605Smrg	}
3339848b8605Smrg    break;
3340848b8605Smrg
3341848b8605Smrg  case 120:
3342848b8605Smrg/* Line 1813 of yacc.c  */
3343848b8605Smrg#line 1202 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3344848b8605Smrg    {
3345848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_TEX0 + (yyvsp[(2) - (2)].integer);
3346848b8605Smrg	}
3347848b8605Smrg    break;
3348848b8605Smrg
3349848b8605Smrg  case 123:
3350848b8605Smrg/* Line 1813 of yacc.c  */
3351848b8605Smrg#line 1210 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3352848b8605Smrg    {
3353848b8605Smrg	   struct asm_symbol *const s =
3354848b8605Smrg	      declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
3355848b8605Smrg
3356848b8605Smrg	   if (s == NULL) {
3357848b8605Smrg	      free((yyvsp[(2) - (3)].string));
3358848b8605Smrg	      YYERROR;
3359848b8605Smrg	   } else {
3360848b8605Smrg	      s->param_binding_type = (yyvsp[(3) - (3)].temp_sym).param_binding_type;
3361848b8605Smrg	      s->param_binding_begin = (yyvsp[(3) - (3)].temp_sym).param_binding_begin;
3362848b8605Smrg	      s->param_binding_length = (yyvsp[(3) - (3)].temp_sym).param_binding_length;
3363848b8605Smrg              s->param_binding_swizzle = (yyvsp[(3) - (3)].temp_sym).param_binding_swizzle;
3364848b8605Smrg	      s->param_is_array = 0;
3365848b8605Smrg	   }
3366848b8605Smrg	}
3367848b8605Smrg    break;
3368848b8605Smrg
3369848b8605Smrg  case 124:
3370848b8605Smrg/* Line 1813 of yacc.c  */
3371848b8605Smrg#line 1228 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3372848b8605Smrg    {
3373848b8605Smrg	   if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {
3374848b8605Smrg	      free((yyvsp[(2) - (6)].string));
3375848b8605Smrg	      yyerror(& (yylsp[(4) - (6)]), state,
3376848b8605Smrg		      "parameter array size and number of bindings must match");
3377848b8605Smrg	      YYERROR;
3378848b8605Smrg	   } else {
3379848b8605Smrg	      struct asm_symbol *const s =
3380848b8605Smrg		 declare_variable(state, (yyvsp[(2) - (6)].string), (yyvsp[(6) - (6)].temp_sym).type, & (yylsp[(2) - (6)]));
3381848b8605Smrg
3382848b8605Smrg	      if (s == NULL) {
3383848b8605Smrg		 free((yyvsp[(2) - (6)].string));
3384848b8605Smrg		 YYERROR;
3385848b8605Smrg	      } else {
3386848b8605Smrg		 s->param_binding_type = (yyvsp[(6) - (6)].temp_sym).param_binding_type;
3387848b8605Smrg		 s->param_binding_begin = (yyvsp[(6) - (6)].temp_sym).param_binding_begin;
3388848b8605Smrg		 s->param_binding_length = (yyvsp[(6) - (6)].temp_sym).param_binding_length;
3389848b8605Smrg                 s->param_binding_swizzle = SWIZZLE_XYZW;
3390848b8605Smrg		 s->param_is_array = 1;
3391848b8605Smrg	      }
3392848b8605Smrg	   }
3393848b8605Smrg	}
3394848b8605Smrg    break;
3395848b8605Smrg
3396848b8605Smrg  case 125:
3397848b8605Smrg/* Line 1813 of yacc.c  */
3398848b8605Smrg#line 1253 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3399848b8605Smrg    {
3400848b8605Smrg	   (yyval.integer) = 0;
3401848b8605Smrg	}
3402848b8605Smrg    break;
3403848b8605Smrg
3404848b8605Smrg  case 126:
3405848b8605Smrg/* Line 1813 of yacc.c  */
3406848b8605Smrg#line 1257 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3407848b8605Smrg    {
3408848b8605Smrg	   if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) {
3409848b8605Smrg              char msg[100];
3410848b8605Smrg              _mesa_snprintf(msg, sizeof(msg),
3411848b8605Smrg                             "invalid parameter array size (size=%d max=%u)",
3412848b8605Smrg                             (yyvsp[(1) - (1)].integer), state->limits->MaxParameters);
3413848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, msg);
3414848b8605Smrg	      YYERROR;
3415848b8605Smrg	   } else {
3416848b8605Smrg	      (yyval.integer) = (yyvsp[(1) - (1)].integer);
3417848b8605Smrg	   }
3418848b8605Smrg	}
3419848b8605Smrg    break;
3420848b8605Smrg
3421848b8605Smrg  case 127:
3422848b8605Smrg/* Line 1813 of yacc.c  */
3423848b8605Smrg#line 1272 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3424848b8605Smrg    {
3425848b8605Smrg	   (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
3426848b8605Smrg	}
3427848b8605Smrg    break;
3428848b8605Smrg
3429848b8605Smrg  case 128:
3430848b8605Smrg/* Line 1813 of yacc.c  */
3431848b8605Smrg#line 1278 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3432848b8605Smrg    {
3433848b8605Smrg	   (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
3434848b8605Smrg	}
3435848b8605Smrg    break;
3436848b8605Smrg
3437848b8605Smrg  case 130:
3438848b8605Smrg/* Line 1813 of yacc.c  */
3439848b8605Smrg#line 1285 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3440848b8605Smrg    {
3441848b8605Smrg	   (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;
3442848b8605Smrg	   (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym);
3443848b8605Smrg	}
3444848b8605Smrg    break;
3445848b8605Smrg
3446848b8605Smrg  case 131:
3447848b8605Smrg/* Line 1813 of yacc.c  */
3448848b8605Smrg#line 1292 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3449848b8605Smrg    {
3450848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3451848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3452848b8605Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3453848b8605Smrg	}
3454848b8605Smrg    break;
3455848b8605Smrg
3456848b8605Smrg  case 132:
3457848b8605Smrg/* Line 1813 of yacc.c  */
3458848b8605Smrg#line 1298 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3459848b8605Smrg    {
3460848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3461848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3462848b8605Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3463848b8605Smrg	}
3464848b8605Smrg    break;
3465848b8605Smrg
3466848b8605Smrg  case 133:
3467848b8605Smrg/* Line 1813 of yacc.c  */
3468848b8605Smrg#line 1304 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3469848b8605Smrg    {
3470848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3471848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3472848b8605Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);
3473848b8605Smrg	}
3474848b8605Smrg    break;
3475848b8605Smrg
3476848b8605Smrg  case 134:
3477848b8605Smrg/* Line 1813 of yacc.c  */
3478848b8605Smrg#line 1312 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3479848b8605Smrg    {
3480848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3481848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3482848b8605Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3483848b8605Smrg	}
3484848b8605Smrg    break;
3485848b8605Smrg
3486848b8605Smrg  case 135:
3487848b8605Smrg/* Line 1813 of yacc.c  */
3488848b8605Smrg#line 1318 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3489848b8605Smrg    {
3490848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3491848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3492848b8605Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3493848b8605Smrg	}
3494848b8605Smrg    break;
3495848b8605Smrg
3496848b8605Smrg  case 136:
3497848b8605Smrg/* Line 1813 of yacc.c  */
3498848b8605Smrg#line 1324 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3499848b8605Smrg    {
3500848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3501848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3502848b8605Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);
3503848b8605Smrg	}
3504848b8605Smrg    break;
3505848b8605Smrg
3506848b8605Smrg  case 137:
3507848b8605Smrg/* Line 1813 of yacc.c  */
3508848b8605Smrg#line 1332 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3509848b8605Smrg    {
3510848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3511848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3512848b8605Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3513848b8605Smrg	}
3514848b8605Smrg    break;
3515848b8605Smrg
3516848b8605Smrg  case 138:
3517848b8605Smrg/* Line 1813 of yacc.c  */
3518848b8605Smrg#line 1338 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3519848b8605Smrg    {
3520848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3521848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3522848b8605Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[(1) - (1)].state));
3523848b8605Smrg	}
3524848b8605Smrg    break;
3525848b8605Smrg
3526848b8605Smrg  case 139:
3527848b8605Smrg/* Line 1813 of yacc.c  */
3528848b8605Smrg#line 1344 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3529848b8605Smrg    {
3530848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3531848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3532848b8605Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_FALSE);
3533848b8605Smrg	}
3534848b8605Smrg    break;
3535848b8605Smrg
3536848b8605Smrg  case 140:
3537848b8605Smrg/* Line 1813 of yacc.c  */
3538848b8605Smrg#line 1351 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3539848b8605Smrg    { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); }
3540848b8605Smrg    break;
3541848b8605Smrg
3542848b8605Smrg  case 141:
3543848b8605Smrg/* Line 1813 of yacc.c  */
3544848b8605Smrg#line 1352 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3545848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3546848b8605Smrg    break;
3547848b8605Smrg
3548848b8605Smrg  case 142:
3549848b8605Smrg/* Line 1813 of yacc.c  */
3550848b8605Smrg#line 1355 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3551848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3552848b8605Smrg    break;
3553848b8605Smrg
3554848b8605Smrg  case 143:
3555848b8605Smrg/* Line 1813 of yacc.c  */
3556848b8605Smrg#line 1356 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3557848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3558848b8605Smrg    break;
3559848b8605Smrg
3560848b8605Smrg  case 144:
3561848b8605Smrg/* Line 1813 of yacc.c  */
3562848b8605Smrg#line 1357 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3563848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3564848b8605Smrg    break;
3565848b8605Smrg
3566848b8605Smrg  case 145:
3567848b8605Smrg/* Line 1813 of yacc.c  */
3568848b8605Smrg#line 1358 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3569848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3570848b8605Smrg    break;
3571848b8605Smrg
3572848b8605Smrg  case 146:
3573848b8605Smrg/* Line 1813 of yacc.c  */
3574848b8605Smrg#line 1359 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3575848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3576848b8605Smrg    break;
3577848b8605Smrg
3578848b8605Smrg  case 147:
3579848b8605Smrg/* Line 1813 of yacc.c  */
3580848b8605Smrg#line 1360 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3581848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3582848b8605Smrg    break;
3583848b8605Smrg
3584848b8605Smrg  case 148:
3585848b8605Smrg/* Line 1813 of yacc.c  */
3586848b8605Smrg#line 1361 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3587848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3588848b8605Smrg    break;
3589848b8605Smrg
3590848b8605Smrg  case 149:
3591848b8605Smrg/* Line 1813 of yacc.c  */
3592848b8605Smrg#line 1362 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3593848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3594848b8605Smrg    break;
3595848b8605Smrg
3596848b8605Smrg  case 150:
3597848b8605Smrg/* Line 1813 of yacc.c  */
3598848b8605Smrg#line 1363 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3599848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3600848b8605Smrg    break;
3601848b8605Smrg
3602848b8605Smrg  case 151:
3603848b8605Smrg/* Line 1813 of yacc.c  */
3604848b8605Smrg#line 1364 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3605848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3606848b8605Smrg    break;
3607848b8605Smrg
3608848b8605Smrg  case 152:
3609848b8605Smrg/* Line 1813 of yacc.c  */
3610848b8605Smrg#line 1365 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3611848b8605Smrg    { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); }
3612848b8605Smrg    break;
3613848b8605Smrg
3614848b8605Smrg  case 153:
3615848b8605Smrg/* Line 1813 of yacc.c  */
3616848b8605Smrg#line 1369 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3617848b8605Smrg    {
3618848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3619848b8605Smrg	   (yyval.state)[0] = STATE_MATERIAL;
3620848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (3)].integer);
3621848b8605Smrg	   (yyval.state)[2] = (yyvsp[(3) - (3)].integer);
3622848b8605Smrg	}
3623848b8605Smrg    break;
3624848b8605Smrg
3625848b8605Smrg  case 154:
3626848b8605Smrg/* Line 1813 of yacc.c  */
3627848b8605Smrg#line 1378 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3628848b8605Smrg    {
3629848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3630848b8605Smrg	}
3631848b8605Smrg    break;
3632848b8605Smrg
3633848b8605Smrg  case 155:
3634848b8605Smrg/* Line 1813 of yacc.c  */
3635848b8605Smrg#line 1382 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3636848b8605Smrg    {
3637848b8605Smrg	   (yyval.integer) = STATE_EMISSION;
3638848b8605Smrg	}
3639848b8605Smrg    break;
3640848b8605Smrg
3641848b8605Smrg  case 156:
3642848b8605Smrg/* Line 1813 of yacc.c  */
3643848b8605Smrg#line 1386 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3644848b8605Smrg    {
3645848b8605Smrg	   (yyval.integer) = STATE_SHININESS;
3646848b8605Smrg	}
3647848b8605Smrg    break;
3648848b8605Smrg
3649848b8605Smrg  case 157:
3650848b8605Smrg/* Line 1813 of yacc.c  */
3651848b8605Smrg#line 1392 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3652848b8605Smrg    {
3653848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3654848b8605Smrg	   (yyval.state)[0] = STATE_LIGHT;
3655848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (5)].integer);
3656848b8605Smrg	   (yyval.state)[2] = (yyvsp[(5) - (5)].integer);
3657848b8605Smrg	}
3658848b8605Smrg    break;
3659848b8605Smrg
3660848b8605Smrg  case 158:
3661848b8605Smrg/* Line 1813 of yacc.c  */
3662848b8605Smrg#line 1401 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3663848b8605Smrg    {
3664848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3665848b8605Smrg	}
3666848b8605Smrg    break;
3667848b8605Smrg
3668848b8605Smrg  case 159:
3669848b8605Smrg/* Line 1813 of yacc.c  */
3670848b8605Smrg#line 1405 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3671848b8605Smrg    {
3672848b8605Smrg	   (yyval.integer) = STATE_POSITION;
3673848b8605Smrg	}
3674848b8605Smrg    break;
3675848b8605Smrg
3676848b8605Smrg  case 160:
3677848b8605Smrg/* Line 1813 of yacc.c  */
3678848b8605Smrg#line 1409 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3679848b8605Smrg    {
3680848b8605Smrg	   if (!state->ctx->Extensions.EXT_point_parameters) {
3681848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
3682848b8605Smrg	      YYERROR;
3683848b8605Smrg	   }
3684848b8605Smrg
3685848b8605Smrg	   (yyval.integer) = STATE_ATTENUATION;
3686848b8605Smrg	}
3687848b8605Smrg    break;
3688848b8605Smrg
3689848b8605Smrg  case 161:
3690848b8605Smrg/* Line 1813 of yacc.c  */
3691848b8605Smrg#line 1418 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3692848b8605Smrg    {
3693848b8605Smrg	   (yyval.integer) = (yyvsp[(2) - (2)].integer);
3694848b8605Smrg	}
3695848b8605Smrg    break;
3696848b8605Smrg
3697848b8605Smrg  case 162:
3698848b8605Smrg/* Line 1813 of yacc.c  */
3699848b8605Smrg#line 1422 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3700848b8605Smrg    {
3701848b8605Smrg	   (yyval.integer) = STATE_HALF_VECTOR;
3702848b8605Smrg	}
3703848b8605Smrg    break;
3704848b8605Smrg
3705848b8605Smrg  case 163:
3706848b8605Smrg/* Line 1813 of yacc.c  */
3707848b8605Smrg#line 1428 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3708848b8605Smrg    {
3709848b8605Smrg	   (yyval.integer) = STATE_SPOT_DIRECTION;
3710848b8605Smrg	}
3711848b8605Smrg    break;
3712848b8605Smrg
3713848b8605Smrg  case 164:
3714848b8605Smrg/* Line 1813 of yacc.c  */
3715848b8605Smrg#line 1434 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3716848b8605Smrg    {
3717848b8605Smrg	   (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
3718848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
3719848b8605Smrg	}
3720848b8605Smrg    break;
3721848b8605Smrg
3722848b8605Smrg  case 165:
3723848b8605Smrg/* Line 1813 of yacc.c  */
3724848b8605Smrg#line 1441 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3725848b8605Smrg    {
3726848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3727848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
3728848b8605Smrg	}
3729848b8605Smrg    break;
3730848b8605Smrg
3731848b8605Smrg  case 166:
3732848b8605Smrg/* Line 1813 of yacc.c  */
3733848b8605Smrg#line 1446 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3734848b8605Smrg    {
3735848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3736848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
3737848b8605Smrg	   (yyval.state)[1] = (yyvsp[(1) - (2)].integer);
3738848b8605Smrg	}
3739848b8605Smrg    break;
3740848b8605Smrg
3741848b8605Smrg  case 167:
3742848b8605Smrg/* Line 1813 of yacc.c  */
3743848b8605Smrg#line 1454 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3744848b8605Smrg    {
3745848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3746848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTPROD;
3747848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (6)].integer);
3748848b8605Smrg	   (yyval.state)[2] = (yyvsp[(5) - (6)].integer);
3749848b8605Smrg	   (yyval.state)[3] = (yyvsp[(6) - (6)].integer);
3750848b8605Smrg	}
3751848b8605Smrg    break;
3752848b8605Smrg
3753848b8605Smrg  case 169:
3754848b8605Smrg/* Line 1813 of yacc.c  */
3755848b8605Smrg#line 1466 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3756848b8605Smrg    {
3757848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3758848b8605Smrg	   (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
3759848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (3)].integer);
3760848b8605Smrg	}
3761848b8605Smrg    break;
3762848b8605Smrg
3763848b8605Smrg  case 170:
3764848b8605Smrg/* Line 1813 of yacc.c  */
3765848b8605Smrg#line 1474 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3766848b8605Smrg    {
3767848b8605Smrg	   (yyval.integer) = STATE_TEXENV_COLOR;
3768848b8605Smrg	}
3769848b8605Smrg    break;
3770848b8605Smrg
3771848b8605Smrg  case 171:
3772848b8605Smrg/* Line 1813 of yacc.c  */
3773848b8605Smrg#line 1480 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3774848b8605Smrg    {
3775848b8605Smrg	   (yyval.integer) = STATE_AMBIENT;
3776848b8605Smrg	}
3777848b8605Smrg    break;
3778848b8605Smrg
3779848b8605Smrg  case 172:
3780848b8605Smrg/* Line 1813 of yacc.c  */
3781848b8605Smrg#line 1484 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3782848b8605Smrg    {
3783848b8605Smrg	   (yyval.integer) = STATE_DIFFUSE;
3784848b8605Smrg	}
3785848b8605Smrg    break;
3786848b8605Smrg
3787848b8605Smrg  case 173:
3788848b8605Smrg/* Line 1813 of yacc.c  */
3789848b8605Smrg#line 1488 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3790848b8605Smrg    {
3791848b8605Smrg	   (yyval.integer) = STATE_SPECULAR;
3792848b8605Smrg	}
3793848b8605Smrg    break;
3794848b8605Smrg
3795848b8605Smrg  case 174:
3796848b8605Smrg/* Line 1813 of yacc.c  */
3797848b8605Smrg#line 1494 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3798848b8605Smrg    {
3799848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
3800848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
3801848b8605Smrg	      YYERROR;
3802848b8605Smrg	   }
3803848b8605Smrg
3804848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3805848b8605Smrg	}
3806848b8605Smrg    break;
3807848b8605Smrg
3808848b8605Smrg  case 175:
3809848b8605Smrg/* Line 1813 of yacc.c  */
3810848b8605Smrg#line 1505 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3811848b8605Smrg    {
3812848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3813848b8605Smrg	   (yyval.state)[0] = STATE_TEXGEN;
3814848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (4)].integer);
3815848b8605Smrg	   (yyval.state)[2] = (yyvsp[(3) - (4)].integer) + (yyvsp[(4) - (4)].integer);
3816848b8605Smrg	}
3817848b8605Smrg    break;
3818848b8605Smrg
3819848b8605Smrg  case 176:
3820848b8605Smrg/* Line 1813 of yacc.c  */
3821848b8605Smrg#line 1514 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3822848b8605Smrg    {
3823848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_S;
3824848b8605Smrg	}
3825848b8605Smrg    break;
3826848b8605Smrg
3827848b8605Smrg  case 177:
3828848b8605Smrg/* Line 1813 of yacc.c  */
3829848b8605Smrg#line 1518 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3830848b8605Smrg    {
3831848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_OBJECT_S;
3832848b8605Smrg	}
3833848b8605Smrg    break;
3834848b8605Smrg
3835848b8605Smrg  case 178:
3836848b8605Smrg/* Line 1813 of yacc.c  */
3837848b8605Smrg#line 1523 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3838848b8605Smrg    {
3839848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
3840848b8605Smrg	}
3841848b8605Smrg    break;
3842848b8605Smrg
3843848b8605Smrg  case 179:
3844848b8605Smrg/* Line 1813 of yacc.c  */
3845848b8605Smrg#line 1527 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3846848b8605Smrg    {
3847848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
3848848b8605Smrg	}
3849848b8605Smrg    break;
3850848b8605Smrg
3851848b8605Smrg  case 180:
3852848b8605Smrg/* Line 1813 of yacc.c  */
3853848b8605Smrg#line 1531 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3854848b8605Smrg    {
3855848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
3856848b8605Smrg	}
3857848b8605Smrg    break;
3858848b8605Smrg
3859848b8605Smrg  case 181:
3860848b8605Smrg/* Line 1813 of yacc.c  */
3861848b8605Smrg#line 1535 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3862848b8605Smrg    {
3863848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
3864848b8605Smrg	}
3865848b8605Smrg    break;
3866848b8605Smrg
3867848b8605Smrg  case 182:
3868848b8605Smrg/* Line 1813 of yacc.c  */
3869848b8605Smrg#line 1541 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3870848b8605Smrg    {
3871848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3872848b8605Smrg	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
3873848b8605Smrg	}
3874848b8605Smrg    break;
3875848b8605Smrg
3876848b8605Smrg  case 183:
3877848b8605Smrg/* Line 1813 of yacc.c  */
3878848b8605Smrg#line 1548 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3879848b8605Smrg    {
3880848b8605Smrg	   (yyval.integer) = STATE_FOG_COLOR;
3881848b8605Smrg	}
3882848b8605Smrg    break;
3883848b8605Smrg
3884848b8605Smrg  case 184:
3885848b8605Smrg/* Line 1813 of yacc.c  */
3886848b8605Smrg#line 1552 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3887848b8605Smrg    {
3888848b8605Smrg	   (yyval.integer) = STATE_FOG_PARAMS;
3889848b8605Smrg	}
3890848b8605Smrg    break;
3891848b8605Smrg
3892848b8605Smrg  case 185:
3893848b8605Smrg/* Line 1813 of yacc.c  */
3894848b8605Smrg#line 1558 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3895848b8605Smrg    {
3896848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3897848b8605Smrg	   (yyval.state)[0] = STATE_CLIPPLANE;
3898848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (5)].integer);
3899848b8605Smrg	}
3900848b8605Smrg    break;
3901848b8605Smrg
3902848b8605Smrg  case 186:
3903848b8605Smrg/* Line 1813 of yacc.c  */
3904848b8605Smrg#line 1566 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3905848b8605Smrg    {
3906848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
3907848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
3908848b8605Smrg	      YYERROR;
3909848b8605Smrg	   }
3910848b8605Smrg
3911848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
3912848b8605Smrg	}
3913848b8605Smrg    break;
3914848b8605Smrg
3915848b8605Smrg  case 187:
3916848b8605Smrg/* Line 1813 of yacc.c  */
3917848b8605Smrg#line 1577 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3918848b8605Smrg    {
3919848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3920848b8605Smrg	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
3921848b8605Smrg	}
3922848b8605Smrg    break;
3923848b8605Smrg
3924848b8605Smrg  case 188:
3925848b8605Smrg/* Line 1813 of yacc.c  */
3926848b8605Smrg#line 1584 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3927848b8605Smrg    {
3928848b8605Smrg	   (yyval.integer) = STATE_POINT_SIZE;
3929848b8605Smrg	}
3930848b8605Smrg    break;
3931848b8605Smrg
3932848b8605Smrg  case 189:
3933848b8605Smrg/* Line 1813 of yacc.c  */
3934848b8605Smrg#line 1588 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3935848b8605Smrg    {
3936848b8605Smrg	   (yyval.integer) = STATE_POINT_ATTENUATION;
3937848b8605Smrg	}
3938848b8605Smrg    break;
3939848b8605Smrg
3940848b8605Smrg  case 190:
3941848b8605Smrg/* Line 1813 of yacc.c  */
3942848b8605Smrg#line 1594 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3943848b8605Smrg    {
3944848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
3945848b8605Smrg	   (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
3946848b8605Smrg	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
3947848b8605Smrg	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
3948848b8605Smrg	   (yyval.state)[4] = (yyvsp[(1) - (5)].state)[2];
3949848b8605Smrg	}
3950848b8605Smrg    break;
3951848b8605Smrg
3952848b8605Smrg  case 191:
3953848b8605Smrg/* Line 1813 of yacc.c  */
3954848b8605Smrg#line 1604 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3955848b8605Smrg    {
3956848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
3957848b8605Smrg	   (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
3958848b8605Smrg	   (yyval.state)[2] = (yyvsp[(2) - (2)].state)[2];
3959848b8605Smrg	   (yyval.state)[3] = (yyvsp[(2) - (2)].state)[3];
3960848b8605Smrg	   (yyval.state)[4] = (yyvsp[(1) - (2)].state)[2];
3961848b8605Smrg	}
3962848b8605Smrg    break;
3963848b8605Smrg
3964848b8605Smrg  case 192:
3965848b8605Smrg/* Line 1813 of yacc.c  */
3966848b8605Smrg#line 1614 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3967848b8605Smrg    {
3968848b8605Smrg	   (yyval.state)[2] = 0;
3969848b8605Smrg	   (yyval.state)[3] = 3;
3970848b8605Smrg	}
3971848b8605Smrg    break;
3972848b8605Smrg
3973848b8605Smrg  case 193:
3974848b8605Smrg/* Line 1813 of yacc.c  */
3975848b8605Smrg#line 1619 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3976848b8605Smrg    {
3977848b8605Smrg	   /* It seems logical that the matrix row range specifier would have
3978848b8605Smrg	    * to specify a range or more than one row (i.e., $5 > $3).
3979848b8605Smrg	    * However, the ARB_vertex_program spec says "a program will fail
3980848b8605Smrg	    * to load if <a> is greater than <b>."  This means that $3 == $5
3981848b8605Smrg	    * is valid.
3982848b8605Smrg	    */
3983848b8605Smrg	   if ((yyvsp[(3) - (6)].integer) > (yyvsp[(5) - (6)].integer)) {
3984848b8605Smrg	      yyerror(& (yylsp[(3) - (6)]), state, "invalid matrix row range");
3985848b8605Smrg	      YYERROR;
3986848b8605Smrg	   }
3987848b8605Smrg
3988848b8605Smrg	   (yyval.state)[2] = (yyvsp[(3) - (6)].integer);
3989848b8605Smrg	   (yyval.state)[3] = (yyvsp[(5) - (6)].integer);
3990848b8605Smrg	}
3991848b8605Smrg    break;
3992848b8605Smrg
3993848b8605Smrg  case 194:
3994848b8605Smrg/* Line 1813 of yacc.c  */
3995848b8605Smrg#line 1637 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
3996848b8605Smrg    {
3997848b8605Smrg	   (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
3998848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
3999848b8605Smrg	   (yyval.state)[2] = (yyvsp[(3) - (3)].integer);
4000848b8605Smrg	}
4001848b8605Smrg    break;
4002848b8605Smrg
4003848b8605Smrg  case 195:
4004848b8605Smrg/* Line 1813 of yacc.c  */
4005848b8605Smrg#line 1645 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4006848b8605Smrg    {
4007848b8605Smrg	   (yyval.integer) = 0;
4008848b8605Smrg	}
4009848b8605Smrg    break;
4010848b8605Smrg
4011848b8605Smrg  case 196:
4012848b8605Smrg/* Line 1813 of yacc.c  */
4013848b8605Smrg#line 1649 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4014848b8605Smrg    {
4015848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4016848b8605Smrg	}
4017848b8605Smrg    break;
4018848b8605Smrg
4019848b8605Smrg  case 197:
4020848b8605Smrg/* Line 1813 of yacc.c  */
4021848b8605Smrg#line 1655 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4022848b8605Smrg    {
4023848b8605Smrg	   (yyval.integer) = STATE_MATRIX_INVERSE;
4024848b8605Smrg	}
4025848b8605Smrg    break;
4026848b8605Smrg
4027848b8605Smrg  case 198:
4028848b8605Smrg/* Line 1813 of yacc.c  */
4029848b8605Smrg#line 1659 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4030848b8605Smrg    {
4031848b8605Smrg	   (yyval.integer) = STATE_MATRIX_TRANSPOSE;
4032848b8605Smrg	}
4033848b8605Smrg    break;
4034848b8605Smrg
4035848b8605Smrg  case 199:
4036848b8605Smrg/* Line 1813 of yacc.c  */
4037848b8605Smrg#line 1663 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4038848b8605Smrg    {
4039848b8605Smrg	   (yyval.integer) = STATE_MATRIX_INVTRANS;
4040848b8605Smrg	}
4041848b8605Smrg    break;
4042848b8605Smrg
4043848b8605Smrg  case 200:
4044848b8605Smrg/* Line 1813 of yacc.c  */
4045848b8605Smrg#line 1669 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4046848b8605Smrg    {
4047848b8605Smrg	   if ((yyvsp[(1) - (1)].integer) > 3) {
4048848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
4049848b8605Smrg	      YYERROR;
4050848b8605Smrg	   }
4051848b8605Smrg
4052848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4053848b8605Smrg	}
4054848b8605Smrg    break;
4055848b8605Smrg
4056848b8605Smrg  case 201:
4057848b8605Smrg/* Line 1813 of yacc.c  */
4058848b8605Smrg#line 1680 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4059848b8605Smrg    {
4060848b8605Smrg	   (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
4061848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
4062848b8605Smrg	}
4063848b8605Smrg    break;
4064848b8605Smrg
4065848b8605Smrg  case 202:
4066848b8605Smrg/* Line 1813 of yacc.c  */
4067848b8605Smrg#line 1685 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4068848b8605Smrg    {
4069848b8605Smrg	   (yyval.state)[0] = STATE_PROJECTION_MATRIX;
4070848b8605Smrg	   (yyval.state)[1] = 0;
4071848b8605Smrg	}
4072848b8605Smrg    break;
4073848b8605Smrg
4074848b8605Smrg  case 203:
4075848b8605Smrg/* Line 1813 of yacc.c  */
4076848b8605Smrg#line 1690 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4077848b8605Smrg    {
4078848b8605Smrg	   (yyval.state)[0] = STATE_MVP_MATRIX;
4079848b8605Smrg	   (yyval.state)[1] = 0;
4080848b8605Smrg	}
4081848b8605Smrg    break;
4082848b8605Smrg
4083848b8605Smrg  case 204:
4084848b8605Smrg/* Line 1813 of yacc.c  */
4085848b8605Smrg#line 1695 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4086848b8605Smrg    {
4087848b8605Smrg	   (yyval.state)[0] = STATE_TEXTURE_MATRIX;
4088848b8605Smrg	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
4089848b8605Smrg	}
4090848b8605Smrg    break;
4091848b8605Smrg
4092848b8605Smrg  case 205:
4093848b8605Smrg/* Line 1813 of yacc.c  */
4094848b8605Smrg#line 1700 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4095848b8605Smrg    {
4096848b8605Smrg	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
4097848b8605Smrg	   YYERROR;
4098848b8605Smrg	}
4099848b8605Smrg    break;
4100848b8605Smrg
4101848b8605Smrg  case 206:
4102848b8605Smrg/* Line 1813 of yacc.c  */
4103848b8605Smrg#line 1705 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4104848b8605Smrg    {
4105848b8605Smrg	   (yyval.state)[0] = STATE_PROGRAM_MATRIX;
4106848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
4107848b8605Smrg	}
4108848b8605Smrg    break;
4109848b8605Smrg
4110848b8605Smrg  case 207:
4111848b8605Smrg/* Line 1813 of yacc.c  */
4112848b8605Smrg#line 1712 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4113848b8605Smrg    {
4114848b8605Smrg	   (yyval.integer) = 0;
4115848b8605Smrg	}
4116848b8605Smrg    break;
4117848b8605Smrg
4118848b8605Smrg  case 208:
4119848b8605Smrg/* Line 1813 of yacc.c  */
4120848b8605Smrg#line 1716 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4121848b8605Smrg    {
4122848b8605Smrg	   (yyval.integer) = (yyvsp[(2) - (3)].integer);
4123848b8605Smrg	}
4124848b8605Smrg    break;
4125848b8605Smrg
4126848b8605Smrg  case 209:
4127848b8605Smrg/* Line 1813 of yacc.c  */
4128848b8605Smrg#line 1721 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4129848b8605Smrg    {
4130848b8605Smrg	   /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
4131848b8605Smrg	    * zero is valid.
4132848b8605Smrg	    */
4133848b8605Smrg	   if ((yyvsp[(1) - (1)].integer) != 0) {
4134848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid modelview matrix index");
4135848b8605Smrg	      YYERROR;
4136848b8605Smrg	   }
4137848b8605Smrg
4138848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4139848b8605Smrg	}
4140848b8605Smrg    break;
4141848b8605Smrg
4142848b8605Smrg  case 210:
4143848b8605Smrg/* Line 1813 of yacc.c  */
4144848b8605Smrg#line 1734 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4145848b8605Smrg    {
4146848b8605Smrg	   /* Since GL_ARB_matrix_palette isn't supported, just let any value
4147848b8605Smrg	    * through here.  The error will be generated later.
4148848b8605Smrg	    */
4149848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4150848b8605Smrg	}
4151848b8605Smrg    break;
4152848b8605Smrg
4153848b8605Smrg  case 211:
4154848b8605Smrg/* Line 1813 of yacc.c  */
4155848b8605Smrg#line 1742 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4156848b8605Smrg    {
4157848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
4158848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
4159848b8605Smrg	      YYERROR;
4160848b8605Smrg	   }
4161848b8605Smrg
4162848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4163848b8605Smrg	}
4164848b8605Smrg    break;
4165848b8605Smrg
4166848b8605Smrg  case 212:
4167848b8605Smrg/* Line 1813 of yacc.c  */
4168848b8605Smrg#line 1753 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4169848b8605Smrg    {
4170848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
4171848b8605Smrg	   (yyval.state)[0] = STATE_DEPTH_RANGE;
4172848b8605Smrg	}
4173848b8605Smrg    break;
4174848b8605Smrg
4175848b8605Smrg  case 217:
4176848b8605Smrg/* Line 1813 of yacc.c  */
4177848b8605Smrg#line 1765 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4178848b8605Smrg    {
4179848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
4180848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
4181848b8605Smrg	   (yyval.state)[1] = STATE_ENV;
4182848b8605Smrg	   (yyval.state)[2] = (yyvsp[(4) - (5)].state)[0];
4183848b8605Smrg	   (yyval.state)[3] = (yyvsp[(4) - (5)].state)[1];
4184848b8605Smrg	}
4185848b8605Smrg    break;
4186848b8605Smrg
4187848b8605Smrg  case 218:
4188848b8605Smrg/* Line 1813 of yacc.c  */
4189848b8605Smrg#line 1775 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4190848b8605Smrg    {
4191848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
4192848b8605Smrg	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
4193848b8605Smrg	}
4194848b8605Smrg    break;
4195848b8605Smrg
4196848b8605Smrg  case 219:
4197848b8605Smrg/* Line 1813 of yacc.c  */
4198848b8605Smrg#line 1780 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4199848b8605Smrg    {
4200848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
4201848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
4202848b8605Smrg	}
4203848b8605Smrg    break;
4204848b8605Smrg
4205848b8605Smrg  case 220:
4206848b8605Smrg/* Line 1813 of yacc.c  */
4207848b8605Smrg#line 1787 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4208848b8605Smrg    {
4209848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
4210848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
4211848b8605Smrg	   (yyval.state)[1] = STATE_ENV;
4212848b8605Smrg	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
4213848b8605Smrg	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
4214848b8605Smrg	}
4215848b8605Smrg    break;
4216848b8605Smrg
4217848b8605Smrg  case 221:
4218848b8605Smrg/* Line 1813 of yacc.c  */
4219848b8605Smrg#line 1797 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4220848b8605Smrg    {
4221848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
4222848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
4223848b8605Smrg	   (yyval.state)[1] = STATE_LOCAL;
4224848b8605Smrg	   (yyval.state)[2] = (yyvsp[(4) - (5)].state)[0];
4225848b8605Smrg	   (yyval.state)[3] = (yyvsp[(4) - (5)].state)[1];
4226848b8605Smrg	}
4227848b8605Smrg    break;
4228848b8605Smrg
4229848b8605Smrg  case 222:
4230848b8605Smrg/* Line 1813 of yacc.c  */
4231848b8605Smrg#line 1806 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4232848b8605Smrg    {
4233848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
4234848b8605Smrg	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
4235848b8605Smrg	}
4236848b8605Smrg    break;
4237848b8605Smrg
4238848b8605Smrg  case 223:
4239848b8605Smrg/* Line 1813 of yacc.c  */
4240848b8605Smrg#line 1811 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4241848b8605Smrg    {
4242848b8605Smrg	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
4243848b8605Smrg	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
4244848b8605Smrg	}
4245848b8605Smrg    break;
4246848b8605Smrg
4247848b8605Smrg  case 224:
4248848b8605Smrg/* Line 1813 of yacc.c  */
4249848b8605Smrg#line 1818 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4250848b8605Smrg    {
4251848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
4252848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
4253848b8605Smrg	   (yyval.state)[1] = STATE_LOCAL;
4254848b8605Smrg	   (yyval.state)[2] = (yyvsp[(4) - (5)].integer);
4255848b8605Smrg	   (yyval.state)[3] = (yyvsp[(4) - (5)].integer);
4256848b8605Smrg	}
4257848b8605Smrg    break;
4258848b8605Smrg
4259848b8605Smrg  case 225:
4260848b8605Smrg/* Line 1813 of yacc.c  */
4261848b8605Smrg#line 1828 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4262848b8605Smrg    {
4263848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
4264848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
4265848b8605Smrg	      YYERROR;
4266848b8605Smrg	   }
4267848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4268848b8605Smrg	}
4269848b8605Smrg    break;
4270848b8605Smrg
4271848b8605Smrg  case 226:
4272848b8605Smrg/* Line 1813 of yacc.c  */
4273848b8605Smrg#line 1838 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4274848b8605Smrg    {
4275848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
4276848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
4277848b8605Smrg	      YYERROR;
4278848b8605Smrg	   }
4279848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4280848b8605Smrg	}
4281848b8605Smrg    break;
4282848b8605Smrg
4283848b8605Smrg  case 231:
4284848b8605Smrg/* Line 1813 of yacc.c  */
4285848b8605Smrg#line 1853 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4286848b8605Smrg    {
4287848b8605Smrg	   (yyval.vector).count = 4;
4288848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(1) - (1)].real);
4289848b8605Smrg	   (yyval.vector).data[1].f = (yyvsp[(1) - (1)].real);
4290848b8605Smrg	   (yyval.vector).data[2].f = (yyvsp[(1) - (1)].real);
4291848b8605Smrg	   (yyval.vector).data[3].f = (yyvsp[(1) - (1)].real);
4292848b8605Smrg	}
4293848b8605Smrg    break;
4294848b8605Smrg
4295848b8605Smrg  case 232:
4296848b8605Smrg/* Line 1813 of yacc.c  */
4297848b8605Smrg#line 1863 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4298848b8605Smrg    {
4299848b8605Smrg	   (yyval.vector).count = 1;
4300848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(1) - (1)].real);
4301848b8605Smrg	   (yyval.vector).data[1].f = (yyvsp[(1) - (1)].real);
4302848b8605Smrg	   (yyval.vector).data[2].f = (yyvsp[(1) - (1)].real);
4303848b8605Smrg	   (yyval.vector).data[3].f = (yyvsp[(1) - (1)].real);
4304848b8605Smrg	}
4305848b8605Smrg    break;
4306848b8605Smrg
4307848b8605Smrg  case 233:
4308848b8605Smrg/* Line 1813 of yacc.c  */
4309848b8605Smrg#line 1871 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4310848b8605Smrg    {
4311848b8605Smrg	   (yyval.vector).count = 1;
4312848b8605Smrg	   (yyval.vector).data[0].f = (float) (yyvsp[(1) - (1)].integer);
4313848b8605Smrg	   (yyval.vector).data[1].f = (float) (yyvsp[(1) - (1)].integer);
4314848b8605Smrg	   (yyval.vector).data[2].f = (float) (yyvsp[(1) - (1)].integer);
4315848b8605Smrg	   (yyval.vector).data[3].f = (float) (yyvsp[(1) - (1)].integer);
4316848b8605Smrg	}
4317848b8605Smrg    break;
4318848b8605Smrg
4319848b8605Smrg  case 234:
4320848b8605Smrg/* Line 1813 of yacc.c  */
4321848b8605Smrg#line 1881 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4322848b8605Smrg    {
4323848b8605Smrg	   (yyval.vector).count = 4;
4324848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(2) - (3)].real);
4325848b8605Smrg	   (yyval.vector).data[1].f = 0.0f;
4326848b8605Smrg	   (yyval.vector).data[2].f = 0.0f;
4327848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
4328848b8605Smrg	}
4329848b8605Smrg    break;
4330848b8605Smrg
4331848b8605Smrg  case 235:
4332848b8605Smrg/* Line 1813 of yacc.c  */
4333848b8605Smrg#line 1889 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4334848b8605Smrg    {
4335848b8605Smrg	   (yyval.vector).count = 4;
4336848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(2) - (5)].real);
4337848b8605Smrg	   (yyval.vector).data[1].f = (yyvsp[(4) - (5)].real);
4338848b8605Smrg	   (yyval.vector).data[2].f = 0.0f;
4339848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
4340848b8605Smrg	}
4341848b8605Smrg    break;
4342848b8605Smrg
4343848b8605Smrg  case 236:
4344848b8605Smrg/* Line 1813 of yacc.c  */
4345848b8605Smrg#line 1898 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4346848b8605Smrg    {
4347848b8605Smrg	   (yyval.vector).count = 4;
4348848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(2) - (7)].real);
4349848b8605Smrg	   (yyval.vector).data[1].f = (yyvsp[(4) - (7)].real);
4350848b8605Smrg	   (yyval.vector).data[2].f = (yyvsp[(6) - (7)].real);
4351848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
4352848b8605Smrg	}
4353848b8605Smrg    break;
4354848b8605Smrg
4355848b8605Smrg  case 237:
4356848b8605Smrg/* Line 1813 of yacc.c  */
4357848b8605Smrg#line 1907 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4358848b8605Smrg    {
4359848b8605Smrg	   (yyval.vector).count = 4;
4360848b8605Smrg	   (yyval.vector).data[0].f = (yyvsp[(2) - (9)].real);
4361848b8605Smrg	   (yyval.vector).data[1].f = (yyvsp[(4) - (9)].real);
4362848b8605Smrg	   (yyval.vector).data[2].f = (yyvsp[(6) - (9)].real);
4363848b8605Smrg	   (yyval.vector).data[3].f = (yyvsp[(8) - (9)].real);
4364848b8605Smrg	}
4365848b8605Smrg    break;
4366848b8605Smrg
4367848b8605Smrg  case 238:
4368848b8605Smrg/* Line 1813 of yacc.c  */
4369848b8605Smrg#line 1917 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4370848b8605Smrg    {
4371848b8605Smrg	   (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
4372848b8605Smrg	}
4373848b8605Smrg    break;
4374848b8605Smrg
4375848b8605Smrg  case 239:
4376848b8605Smrg/* Line 1813 of yacc.c  */
4377848b8605Smrg#line 1921 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4378848b8605Smrg    {
4379848b8605Smrg	   (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
4380848b8605Smrg	}
4381848b8605Smrg    break;
4382848b8605Smrg
4383848b8605Smrg  case 240:
4384848b8605Smrg/* Line 1813 of yacc.c  */
4385848b8605Smrg#line 1926 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4386848b8605Smrg    { (yyval.negate) = FALSE; }
4387848b8605Smrg    break;
4388848b8605Smrg
4389848b8605Smrg  case 241:
4390848b8605Smrg/* Line 1813 of yacc.c  */
4391848b8605Smrg#line 1927 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4392848b8605Smrg    { (yyval.negate) = TRUE;  }
4393848b8605Smrg    break;
4394848b8605Smrg
4395848b8605Smrg  case 242:
4396848b8605Smrg/* Line 1813 of yacc.c  */
4397848b8605Smrg#line 1928 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4398848b8605Smrg    { (yyval.negate) = FALSE; }
4399848b8605Smrg    break;
4400848b8605Smrg
4401848b8605Smrg  case 243:
4402848b8605Smrg/* Line 1813 of yacc.c  */
4403848b8605Smrg#line 1931 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4404848b8605Smrg    { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
4405848b8605Smrg    break;
4406848b8605Smrg
4407848b8605Smrg  case 245:
4408848b8605Smrg/* Line 1813 of yacc.c  */
4409848b8605Smrg#line 1935 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4410848b8605Smrg    {
4411848b8605Smrg	   /* NV_fragment_program_option defines the size qualifiers in a
4412848b8605Smrg	    * fairly broken way.  "SHORT" or "LONG" can optionally be used
4413848b8605Smrg	    * before TEMP or OUTPUT.  However, neither is a reserved word!
4414848b8605Smrg	    * This means that we have to parse it as an identifier, then check
4415848b8605Smrg	    * to make sure it's one of the valid values.  *sigh*
4416848b8605Smrg	    *
4417848b8605Smrg	    * In addition, the grammar in the extension spec does *not* allow
4418848b8605Smrg	    * the size specifier to be optional, but all known implementations
4419848b8605Smrg	    * do.
4420848b8605Smrg	    */
4421848b8605Smrg	   if (!state->option.NV_fragment) {
4422848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "unexpected IDENTIFIER");
4423848b8605Smrg	      YYERROR;
4424848b8605Smrg	   }
4425848b8605Smrg
4426848b8605Smrg	   if (strcmp("SHORT", (yyvsp[(1) - (1)].string)) == 0) {
4427848b8605Smrg	   } else if (strcmp("LONG", (yyvsp[(1) - (1)].string)) == 0) {
4428848b8605Smrg	   } else {
4429848b8605Smrg	      char *const err_str =
4430848b8605Smrg		 make_error_string("invalid storage size specifier \"%s\"",
4431848b8605Smrg				   (yyvsp[(1) - (1)].string));
4432848b8605Smrg
4433848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, (err_str != NULL)
4434848b8605Smrg		      ? err_str : "invalid storage size specifier");
4435848b8605Smrg
4436848b8605Smrg	      if (err_str != NULL) {
4437848b8605Smrg		 free(err_str);
4438848b8605Smrg	      }
4439848b8605Smrg
4440848b8605Smrg	      YYERROR;
4441848b8605Smrg	   }
4442848b8605Smrg	}
4443848b8605Smrg    break;
4444848b8605Smrg
4445848b8605Smrg  case 246:
4446848b8605Smrg/* Line 1813 of yacc.c  */
4447848b8605Smrg#line 1969 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4448848b8605Smrg    {
4449848b8605Smrg	}
4450848b8605Smrg    break;
4451848b8605Smrg
4452848b8605Smrg  case 247:
4453848b8605Smrg/* Line 1813 of yacc.c  */
4454848b8605Smrg#line 1973 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4455848b8605Smrg    { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
4456848b8605Smrg    break;
4457848b8605Smrg
4458848b8605Smrg  case 249:
4459848b8605Smrg/* Line 1813 of yacc.c  */
4460848b8605Smrg#line 1977 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4461848b8605Smrg    {
4462848b8605Smrg	   if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
4463848b8605Smrg	      free((yyvsp[(3) - (3)].string));
4464848b8605Smrg	      YYERROR;
4465848b8605Smrg	   }
4466848b8605Smrg	}
4467848b8605Smrg    break;
4468848b8605Smrg
4469848b8605Smrg  case 250:
4470848b8605Smrg/* Line 1813 of yacc.c  */
4471848b8605Smrg#line 1984 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4472848b8605Smrg    {
4473848b8605Smrg	   if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
4474848b8605Smrg	      free((yyvsp[(1) - (1)].string));
4475848b8605Smrg	      YYERROR;
4476848b8605Smrg	   }
4477848b8605Smrg	}
4478848b8605Smrg    break;
4479848b8605Smrg
4480848b8605Smrg  case 251:
4481848b8605Smrg/* Line 1813 of yacc.c  */
4482848b8605Smrg#line 1993 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4483848b8605Smrg    {
4484848b8605Smrg	   struct asm_symbol *const s =
4485848b8605Smrg	      declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
4486848b8605Smrg
4487848b8605Smrg	   if (s == NULL) {
4488848b8605Smrg	      free((yyvsp[(3) - (5)].string));
4489848b8605Smrg	      YYERROR;
4490848b8605Smrg	   } else {
4491848b8605Smrg	      s->output_binding = (yyvsp[(5) - (5)].result);
4492848b8605Smrg	   }
4493848b8605Smrg	}
4494848b8605Smrg    break;
4495848b8605Smrg
4496848b8605Smrg  case 252:
4497848b8605Smrg/* Line 1813 of yacc.c  */
4498848b8605Smrg#line 2007 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4499848b8605Smrg    {
4500848b8605Smrg	   if (state->mode == ARB_vertex) {
4501848b8605Smrg	      (yyval.result) = VARYING_SLOT_POS;
4502848b8605Smrg	   } else {
4503848b8605Smrg	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4504848b8605Smrg	      YYERROR;
4505848b8605Smrg	   }
4506848b8605Smrg	}
4507848b8605Smrg    break;
4508848b8605Smrg
4509848b8605Smrg  case 253:
4510848b8605Smrg/* Line 1813 of yacc.c  */
4511848b8605Smrg#line 2016 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4512848b8605Smrg    {
4513848b8605Smrg	   if (state->mode == ARB_vertex) {
4514848b8605Smrg	      (yyval.result) = VARYING_SLOT_FOGC;
4515848b8605Smrg	   } else {
4516848b8605Smrg	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4517848b8605Smrg	      YYERROR;
4518848b8605Smrg	   }
4519848b8605Smrg	}
4520848b8605Smrg    break;
4521848b8605Smrg
4522848b8605Smrg  case 254:
4523848b8605Smrg/* Line 1813 of yacc.c  */
4524848b8605Smrg#line 2025 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4525848b8605Smrg    {
4526848b8605Smrg	   (yyval.result) = (yyvsp[(2) - (2)].result);
4527848b8605Smrg	}
4528848b8605Smrg    break;
4529848b8605Smrg
4530848b8605Smrg  case 255:
4531848b8605Smrg/* Line 1813 of yacc.c  */
4532848b8605Smrg#line 2029 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4533848b8605Smrg    {
4534848b8605Smrg	   if (state->mode == ARB_vertex) {
4535848b8605Smrg	      (yyval.result) = VARYING_SLOT_PSIZ;
4536848b8605Smrg	   } else {
4537848b8605Smrg	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4538848b8605Smrg	      YYERROR;
4539848b8605Smrg	   }
4540848b8605Smrg	}
4541848b8605Smrg    break;
4542848b8605Smrg
4543848b8605Smrg  case 256:
4544848b8605Smrg/* Line 1813 of yacc.c  */
4545848b8605Smrg#line 2038 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4546848b8605Smrg    {
4547848b8605Smrg	   if (state->mode == ARB_vertex) {
4548848b8605Smrg	      (yyval.result) = VARYING_SLOT_TEX0 + (yyvsp[(3) - (3)].integer);
4549848b8605Smrg	   } else {
4550848b8605Smrg	      yyerror(& (yylsp[(2) - (3)]), state, "invalid program result name");
4551848b8605Smrg	      YYERROR;
4552848b8605Smrg	   }
4553848b8605Smrg	}
4554848b8605Smrg    break;
4555848b8605Smrg
4556848b8605Smrg  case 257:
4557848b8605Smrg/* Line 1813 of yacc.c  */
4558848b8605Smrg#line 2047 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4559848b8605Smrg    {
4560848b8605Smrg	   if (state->mode == ARB_fragment) {
4561848b8605Smrg	      (yyval.result) = FRAG_RESULT_DEPTH;
4562848b8605Smrg	   } else {
4563848b8605Smrg	      yyerror(& (yylsp[(2) - (2)]), state, "invalid program result name");
4564848b8605Smrg	      YYERROR;
4565848b8605Smrg	   }
4566848b8605Smrg	}
4567848b8605Smrg    break;
4568848b8605Smrg
4569848b8605Smrg  case 258:
4570848b8605Smrg/* Line 1813 of yacc.c  */
4571848b8605Smrg#line 2058 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4572848b8605Smrg    {
4573848b8605Smrg	   (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
4574848b8605Smrg	}
4575848b8605Smrg    break;
4576848b8605Smrg
4577848b8605Smrg  case 259:
4578848b8605Smrg/* Line 1813 of yacc.c  */
4579848b8605Smrg#line 2064 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4580848b8605Smrg    {
4581848b8605Smrg	   if (state->mode == ARB_vertex) {
4582848b8605Smrg	      (yyval.integer) = VARYING_SLOT_COL0;
4583848b8605Smrg	   } else {
4584848b8605Smrg	      if (state->option.DrawBuffers)
4585848b8605Smrg		 (yyval.integer) = FRAG_RESULT_DATA0;
4586848b8605Smrg	      else
4587848b8605Smrg		 (yyval.integer) = FRAG_RESULT_COLOR;
4588848b8605Smrg	   }
4589848b8605Smrg	}
4590848b8605Smrg    break;
4591848b8605Smrg
4592848b8605Smrg  case 260:
4593848b8605Smrg/* Line 1813 of yacc.c  */
4594848b8605Smrg#line 2075 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4595848b8605Smrg    {
4596848b8605Smrg	   if (state->mode == ARB_vertex) {
4597848b8605Smrg	      yyerror(& (yylsp[(1) - (3)]), state, "invalid program result name");
4598848b8605Smrg	      YYERROR;
4599848b8605Smrg	   } else {
4600848b8605Smrg	      if (!state->option.DrawBuffers) {
4601848b8605Smrg		 /* From the ARB_draw_buffers spec (same text exists
4602848b8605Smrg		  * for ATI_draw_buffers):
4603848b8605Smrg		  *
4604848b8605Smrg		  *     If this option is not specified, a fragment
4605848b8605Smrg		  *     program that attempts to bind
4606848b8605Smrg		  *     "result.color[n]" will fail to load, and only
4607848b8605Smrg		  *     "result.color" will be allowed.
4608848b8605Smrg		  */
4609848b8605Smrg		 yyerror(& (yylsp[(1) - (3)]), state,
4610848b8605Smrg			 "result.color[] used without "
4611848b8605Smrg			 "`OPTION ARB_draw_buffers' or "
4612848b8605Smrg			 "`OPTION ATI_draw_buffers'");
4613848b8605Smrg		 YYERROR;
4614848b8605Smrg	      } else if ((yyvsp[(2) - (3)].integer) >= state->MaxDrawBuffers) {
4615848b8605Smrg		 yyerror(& (yylsp[(1) - (3)]), state,
4616848b8605Smrg			 "result.color[] exceeds MAX_DRAW_BUFFERS_ARB");
4617848b8605Smrg		 YYERROR;
4618848b8605Smrg	      }
4619848b8605Smrg	      (yyval.integer) = FRAG_RESULT_DATA0 + (yyvsp[(2) - (3)].integer);
4620848b8605Smrg	   }
4621848b8605Smrg	}
4622848b8605Smrg    break;
4623848b8605Smrg
4624848b8605Smrg  case 261:
4625848b8605Smrg/* Line 1813 of yacc.c  */
4626848b8605Smrg#line 2103 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4627848b8605Smrg    {
4628848b8605Smrg	   if (state->mode == ARB_vertex) {
4629848b8605Smrg	      (yyval.integer) = VARYING_SLOT_COL0;
4630848b8605Smrg	   } else {
4631848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4632848b8605Smrg	      YYERROR;
4633848b8605Smrg	   }
4634848b8605Smrg	}
4635848b8605Smrg    break;
4636848b8605Smrg
4637848b8605Smrg  case 262:
4638848b8605Smrg/* Line 1813 of yacc.c  */
4639848b8605Smrg#line 2112 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4640848b8605Smrg    {
4641848b8605Smrg	   if (state->mode == ARB_vertex) {
4642848b8605Smrg	      (yyval.integer) = VARYING_SLOT_BFC0;
4643848b8605Smrg	   } else {
4644848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4645848b8605Smrg	      YYERROR;
4646848b8605Smrg	   }
4647848b8605Smrg	}
4648848b8605Smrg    break;
4649848b8605Smrg
4650848b8605Smrg  case 263:
4651848b8605Smrg/* Line 1813 of yacc.c  */
4652848b8605Smrg#line 2123 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4653848b8605Smrg    {
4654848b8605Smrg	   (yyval.integer) = 0;
4655848b8605Smrg	}
4656848b8605Smrg    break;
4657848b8605Smrg
4658848b8605Smrg  case 264:
4659848b8605Smrg/* Line 1813 of yacc.c  */
4660848b8605Smrg#line 2127 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4661848b8605Smrg    {
4662848b8605Smrg	   if (state->mode == ARB_vertex) {
4663848b8605Smrg	      (yyval.integer) = 0;
4664848b8605Smrg	   } else {
4665848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4666848b8605Smrg	      YYERROR;
4667848b8605Smrg	   }
4668848b8605Smrg	}
4669848b8605Smrg    break;
4670848b8605Smrg
4671848b8605Smrg  case 265:
4672848b8605Smrg/* Line 1813 of yacc.c  */
4673848b8605Smrg#line 2136 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4674848b8605Smrg    {
4675848b8605Smrg	   if (state->mode == ARB_vertex) {
4676848b8605Smrg	      (yyval.integer) = 1;
4677848b8605Smrg	   } else {
4678848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program result name");
4679848b8605Smrg	      YYERROR;
4680848b8605Smrg	   }
4681848b8605Smrg	}
4682848b8605Smrg    break;
4683848b8605Smrg
4684848b8605Smrg  case 266:
4685848b8605Smrg/* Line 1813 of yacc.c  */
4686848b8605Smrg#line 2146 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4687848b8605Smrg    { (yyval.integer) = 0; }
4688848b8605Smrg    break;
4689848b8605Smrg
4690848b8605Smrg  case 267:
4691848b8605Smrg/* Line 1813 of yacc.c  */
4692848b8605Smrg#line 2147 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4693848b8605Smrg    { (yyval.integer) = 0; }
4694848b8605Smrg    break;
4695848b8605Smrg
4696848b8605Smrg  case 268:
4697848b8605Smrg/* Line 1813 of yacc.c  */
4698848b8605Smrg#line 2148 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4699848b8605Smrg    { (yyval.integer) = 1; }
4700848b8605Smrg    break;
4701848b8605Smrg
4702848b8605Smrg  case 269:
4703848b8605Smrg/* Line 1813 of yacc.c  */
4704848b8605Smrg#line 2151 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4705848b8605Smrg    { (yyval.integer) = 0; }
4706848b8605Smrg    break;
4707848b8605Smrg
4708848b8605Smrg  case 270:
4709848b8605Smrg/* Line 1813 of yacc.c  */
4710848b8605Smrg#line 2152 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4711848b8605Smrg    { (yyval.integer) = 0; }
4712848b8605Smrg    break;
4713848b8605Smrg
4714848b8605Smrg  case 271:
4715848b8605Smrg/* Line 1813 of yacc.c  */
4716848b8605Smrg#line 2153 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4717848b8605Smrg    { (yyval.integer) = 1; }
4718848b8605Smrg    break;
4719848b8605Smrg
4720848b8605Smrg  case 272:
4721848b8605Smrg/* Line 1813 of yacc.c  */
4722848b8605Smrg#line 2156 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4723848b8605Smrg    { (yyval.integer) = 0; }
4724848b8605Smrg    break;
4725848b8605Smrg
4726848b8605Smrg  case 273:
4727848b8605Smrg/* Line 1813 of yacc.c  */
4728848b8605Smrg#line 2157 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4729848b8605Smrg    { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
4730848b8605Smrg    break;
4731848b8605Smrg
4732848b8605Smrg  case 274:
4733848b8605Smrg/* Line 1813 of yacc.c  */
4734848b8605Smrg#line 2160 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4735848b8605Smrg    { (yyval.integer) = 0; }
4736848b8605Smrg    break;
4737848b8605Smrg
4738848b8605Smrg  case 275:
4739848b8605Smrg/* Line 1813 of yacc.c  */
4740848b8605Smrg#line 2161 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4741848b8605Smrg    { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
4742848b8605Smrg    break;
4743848b8605Smrg
4744848b8605Smrg  case 276:
4745848b8605Smrg/* Line 1813 of yacc.c  */
4746848b8605Smrg#line 2164 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4747848b8605Smrg    { (yyval.integer) = 0; }
4748848b8605Smrg    break;
4749848b8605Smrg
4750848b8605Smrg  case 277:
4751848b8605Smrg/* Line 1813 of yacc.c  */
4752848b8605Smrg#line 2165 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4753848b8605Smrg    { (yyval.integer) = (yyvsp[(2) - (3)].integer); }
4754848b8605Smrg    break;
4755848b8605Smrg
4756848b8605Smrg  case 278:
4757848b8605Smrg/* Line 1813 of yacc.c  */
4758848b8605Smrg#line 2169 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4759848b8605Smrg    {
4760848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
4761848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
4762848b8605Smrg	      YYERROR;
4763848b8605Smrg	   }
4764848b8605Smrg
4765848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4766848b8605Smrg	}
4767848b8605Smrg    break;
4768848b8605Smrg
4769848b8605Smrg  case 279:
4770848b8605Smrg/* Line 1813 of yacc.c  */
4771848b8605Smrg#line 2180 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4772848b8605Smrg    {
4773848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
4774848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
4775848b8605Smrg	      YYERROR;
4776848b8605Smrg	   }
4777848b8605Smrg
4778848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4779848b8605Smrg	}
4780848b8605Smrg    break;
4781848b8605Smrg
4782848b8605Smrg  case 280:
4783848b8605Smrg/* Line 1813 of yacc.c  */
4784848b8605Smrg#line 2191 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4785848b8605Smrg    {
4786848b8605Smrg	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
4787848b8605Smrg	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
4788848b8605Smrg	      YYERROR;
4789848b8605Smrg	   }
4790848b8605Smrg
4791848b8605Smrg	   (yyval.integer) = (yyvsp[(1) - (1)].integer);
4792848b8605Smrg	}
4793848b8605Smrg    break;
4794848b8605Smrg
4795848b8605Smrg  case 281:
4796848b8605Smrg/* Line 1813 of yacc.c  */
4797848b8605Smrg#line 2202 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
4798848b8605Smrg    {
4799848b8605Smrg	   struct asm_symbol *exist = (struct asm_symbol *)
4800848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
4801848b8605Smrg	   struct asm_symbol *target = (struct asm_symbol *)
4802848b8605Smrg	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(4) - (4)].string));
4803848b8605Smrg
4804848b8605Smrg	   free((yyvsp[(4) - (4)].string));
4805848b8605Smrg
4806848b8605Smrg	   if (exist != NULL) {
4807848b8605Smrg	      char m[1000];
4808848b8605Smrg	      _mesa_snprintf(m, sizeof(m), "redeclared identifier: %s", (yyvsp[(2) - (4)].string));
4809848b8605Smrg	      free((yyvsp[(2) - (4)].string));
4810848b8605Smrg	      yyerror(& (yylsp[(2) - (4)]), state, m);
4811848b8605Smrg	      YYERROR;
4812848b8605Smrg	   } else if (target == NULL) {
4813848b8605Smrg	      free((yyvsp[(2) - (4)].string));
4814848b8605Smrg	      yyerror(& (yylsp[(4) - (4)]), state,
4815848b8605Smrg		      "undefined variable binding in ALIAS statement");
4816848b8605Smrg	      YYERROR;
4817848b8605Smrg	   } else {
4818848b8605Smrg	      _mesa_symbol_table_add_symbol(state->st, 0, (yyvsp[(2) - (4)].string), target);
4819848b8605Smrg	   }
4820848b8605Smrg	}
4821848b8605Smrg    break;
4822848b8605Smrg
4823848b8605Smrg
4824848b8605Smrg/* Line 1813 of yacc.c  */
4825848b8605Smrg#line 4826 "program_parse.tab.c"
4826848b8605Smrg      default: break;
4827848b8605Smrg    }
4828848b8605Smrg  /* User semantic actions sometimes alter yychar, and that requires
4829848b8605Smrg     that yytoken be updated with the new translation.  We take the
4830848b8605Smrg     approach of translating immediately before every use of yytoken.
4831848b8605Smrg     One alternative is translating here after every semantic action,
4832848b8605Smrg     but that translation would be missed if the semantic action invokes
4833848b8605Smrg     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4834848b8605Smrg     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
4835848b8605Smrg     incorrect destructor might then be invoked immediately.  In the
4836848b8605Smrg     case of YYERROR or YYBACKUP, subsequent parser actions might lead
4837848b8605Smrg     to an incorrect destructor call or verbose syntax error message
4838848b8605Smrg     before the lookahead is translated.  */
4839848b8605Smrg  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
4840848b8605Smrg
4841848b8605Smrg  YYPOPSTACK (yylen);
4842848b8605Smrg  yylen = 0;
4843848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
4844848b8605Smrg
4845848b8605Smrg  *++yyvsp = yyval;
4846848b8605Smrg  *++yylsp = yyloc;
4847848b8605Smrg
4848848b8605Smrg  /* Now `shift' the result of the reduction.  Determine what state
4849848b8605Smrg     that goes to, based on the state we popped back to and the rule
4850848b8605Smrg     number reduced by.  */
4851848b8605Smrg
4852848b8605Smrg  yyn = yyr1[yyn];
4853848b8605Smrg
4854848b8605Smrg  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4855848b8605Smrg  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
4856848b8605Smrg    yystate = yytable[yystate];
4857848b8605Smrg  else
4858848b8605Smrg    yystate = yydefgoto[yyn - YYNTOKENS];
4859848b8605Smrg
4860848b8605Smrg  goto yynewstate;
4861848b8605Smrg
4862848b8605Smrg
4863848b8605Smrg/*------------------------------------.
4864848b8605Smrg| yyerrlab -- here on detecting error |
4865848b8605Smrg`------------------------------------*/
4866848b8605Smrgyyerrlab:
4867848b8605Smrg  /* Make sure we have latest lookahead translation.  See comments at
4868848b8605Smrg     user semantic actions for why this is necessary.  */
4869848b8605Smrg  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
4870848b8605Smrg
4871848b8605Smrg  /* If not already recovering from an error, report this error.  */
4872848b8605Smrg  if (!yyerrstatus)
4873848b8605Smrg    {
4874848b8605Smrg      ++yynerrs;
4875848b8605Smrg#if ! YYERROR_VERBOSE
4876848b8605Smrg      yyerror (&yylloc, state, YY_("syntax error"));
4877848b8605Smrg#else
4878848b8605Smrg# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
4879848b8605Smrg                                        yyssp, yytoken)
4880848b8605Smrg      {
4881848b8605Smrg        char const *yymsgp = YY_("syntax error");
4882848b8605Smrg        int yysyntax_error_status;
4883848b8605Smrg        yysyntax_error_status = YYSYNTAX_ERROR;
4884848b8605Smrg        if (yysyntax_error_status == 0)
4885848b8605Smrg          yymsgp = yymsg;
4886848b8605Smrg        else if (yysyntax_error_status == 1)
4887848b8605Smrg          {
4888848b8605Smrg            if (yymsg != yymsgbuf)
4889848b8605Smrg              YYSTACK_FREE (yymsg);
4890848b8605Smrg            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
4891848b8605Smrg            if (!yymsg)
4892848b8605Smrg              {
4893848b8605Smrg                yymsg = yymsgbuf;
4894848b8605Smrg                yymsg_alloc = sizeof yymsgbuf;
4895848b8605Smrg                yysyntax_error_status = 2;
4896848b8605Smrg              }
4897848b8605Smrg            else
4898848b8605Smrg              {
4899848b8605Smrg                yysyntax_error_status = YYSYNTAX_ERROR;
4900848b8605Smrg                yymsgp = yymsg;
4901848b8605Smrg              }
4902848b8605Smrg          }
4903848b8605Smrg        yyerror (&yylloc, state, yymsgp);
4904848b8605Smrg        if (yysyntax_error_status == 2)
4905848b8605Smrg          goto yyexhaustedlab;
4906848b8605Smrg      }
4907848b8605Smrg# undef YYSYNTAX_ERROR
4908848b8605Smrg#endif
4909848b8605Smrg    }
4910848b8605Smrg
4911848b8605Smrg  yyerror_range[1] = yylloc;
4912848b8605Smrg
4913848b8605Smrg  if (yyerrstatus == 3)
4914848b8605Smrg    {
4915848b8605Smrg      /* If just tried and failed to reuse lookahead token after an
4916848b8605Smrg	 error, discard it.  */
4917848b8605Smrg
4918848b8605Smrg      if (yychar <= YYEOF)
4919848b8605Smrg	{
4920848b8605Smrg	  /* Return failure if at end of input.  */
4921848b8605Smrg	  if (yychar == YYEOF)
4922848b8605Smrg	    YYABORT;
4923848b8605Smrg	}
4924848b8605Smrg      else
4925848b8605Smrg	{
4926848b8605Smrg	  yydestruct ("Error: discarding",
4927848b8605Smrg		      yytoken, &yylval, &yylloc, state);
4928848b8605Smrg	  yychar = YYEMPTY;
4929848b8605Smrg	}
4930848b8605Smrg    }
4931848b8605Smrg
4932848b8605Smrg  /* Else will try to reuse lookahead token after shifting the error
4933848b8605Smrg     token.  */
4934848b8605Smrg  goto yyerrlab1;
4935848b8605Smrg
4936848b8605Smrg
4937848b8605Smrg/*---------------------------------------------------.
4938848b8605Smrg| yyerrorlab -- error raised explicitly by YYERROR.  |
4939848b8605Smrg`---------------------------------------------------*/
4940848b8605Smrgyyerrorlab:
4941848b8605Smrg
4942848b8605Smrg  /* Pacify compilers like GCC when the user code never invokes
4943848b8605Smrg     YYERROR and the label yyerrorlab therefore never appears in user
4944848b8605Smrg     code.  */
4945848b8605Smrg  if (/*CONSTCOND*/ 0)
4946848b8605Smrg     goto yyerrorlab;
4947848b8605Smrg
4948848b8605Smrg  yyerror_range[1] = yylsp[1-yylen];
4949848b8605Smrg  /* Do not reclaim the symbols of the rule which action triggered
4950848b8605Smrg     this YYERROR.  */
4951848b8605Smrg  YYPOPSTACK (yylen);
4952848b8605Smrg  yylen = 0;
4953848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
4954848b8605Smrg  yystate = *yyssp;
4955848b8605Smrg  goto yyerrlab1;
4956848b8605Smrg
4957848b8605Smrg
4958848b8605Smrg/*-------------------------------------------------------------.
4959848b8605Smrg| yyerrlab1 -- common code for both syntax error and YYERROR.  |
4960848b8605Smrg`-------------------------------------------------------------*/
4961848b8605Smrgyyerrlab1:
4962848b8605Smrg  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
4963848b8605Smrg
4964848b8605Smrg  for (;;)
4965848b8605Smrg    {
4966848b8605Smrg      yyn = yypact[yystate];
4967848b8605Smrg      if (!yypact_value_is_default (yyn))
4968848b8605Smrg	{
4969848b8605Smrg	  yyn += YYTERROR;
4970848b8605Smrg	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4971848b8605Smrg	    {
4972848b8605Smrg	      yyn = yytable[yyn];
4973848b8605Smrg	      if (0 < yyn)
4974848b8605Smrg		break;
4975848b8605Smrg	    }
4976848b8605Smrg	}
4977848b8605Smrg
4978848b8605Smrg      /* Pop the current state because it cannot handle the error token.  */
4979848b8605Smrg      if (yyssp == yyss)
4980848b8605Smrg	YYABORT;
4981848b8605Smrg
4982848b8605Smrg      yyerror_range[1] = *yylsp;
4983848b8605Smrg      yydestruct ("Error: popping",
4984848b8605Smrg		  yystos[yystate], yyvsp, yylsp, state);
4985848b8605Smrg      YYPOPSTACK (1);
4986848b8605Smrg      yystate = *yyssp;
4987848b8605Smrg      YY_STACK_PRINT (yyss, yyssp);
4988848b8605Smrg    }
4989848b8605Smrg
4990848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4991848b8605Smrg  *++yyvsp = yylval;
4992848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_END
4993848b8605Smrg
4994848b8605Smrg  yyerror_range[2] = yylloc;
4995848b8605Smrg  /* Using YYLLOC is tempting, but would change the location of
4996848b8605Smrg     the lookahead.  YYLOC is available though.  */
4997848b8605Smrg  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
4998848b8605Smrg  *++yylsp = yyloc;
4999848b8605Smrg
5000848b8605Smrg  /* Shift the error token.  */
5001848b8605Smrg  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5002848b8605Smrg
5003848b8605Smrg  yystate = yyn;
5004848b8605Smrg  goto yynewstate;
5005848b8605Smrg
5006848b8605Smrg
5007848b8605Smrg/*-------------------------------------.
5008848b8605Smrg| yyacceptlab -- YYACCEPT comes here.  |
5009848b8605Smrg`-------------------------------------*/
5010848b8605Smrgyyacceptlab:
5011848b8605Smrg  yyresult = 0;
5012848b8605Smrg  goto yyreturn;
5013848b8605Smrg
5014848b8605Smrg/*-----------------------------------.
5015848b8605Smrg| yyabortlab -- YYABORT comes here.  |
5016848b8605Smrg`-----------------------------------*/
5017848b8605Smrgyyabortlab:
5018848b8605Smrg  yyresult = 1;
5019848b8605Smrg  goto yyreturn;
5020848b8605Smrg
5021848b8605Smrg#if !defined yyoverflow || YYERROR_VERBOSE
5022848b8605Smrg/*-------------------------------------------------.
5023848b8605Smrg| yyexhaustedlab -- memory exhaustion comes here.  |
5024848b8605Smrg`-------------------------------------------------*/
5025848b8605Smrgyyexhaustedlab:
5026848b8605Smrg  yyerror (&yylloc, state, YY_("memory exhausted"));
5027848b8605Smrg  yyresult = 2;
5028848b8605Smrg  /* Fall through.  */
5029848b8605Smrg#endif
5030848b8605Smrg
5031848b8605Smrgyyreturn:
5032848b8605Smrg  if (yychar != YYEMPTY)
5033848b8605Smrg    {
5034848b8605Smrg      /* Make sure we have latest lookahead translation.  See comments at
5035848b8605Smrg         user semantic actions for why this is necessary.  */
5036848b8605Smrg      yytoken = YYTRANSLATE (yychar);
5037848b8605Smrg      yydestruct ("Cleanup: discarding lookahead",
5038848b8605Smrg                  yytoken, &yylval, &yylloc, state);
5039848b8605Smrg    }
5040848b8605Smrg  /* Do not reclaim the symbols of the rule which action triggered
5041848b8605Smrg     this YYABORT or YYACCEPT.  */
5042848b8605Smrg  YYPOPSTACK (yylen);
5043848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
5044848b8605Smrg  while (yyssp != yyss)
5045848b8605Smrg    {
5046848b8605Smrg      yydestruct ("Cleanup: popping",
5047848b8605Smrg		  yystos[*yyssp], yyvsp, yylsp, state);
5048848b8605Smrg      YYPOPSTACK (1);
5049848b8605Smrg    }
5050848b8605Smrg#ifndef yyoverflow
5051848b8605Smrg  if (yyss != yyssa)
5052848b8605Smrg    YYSTACK_FREE (yyss);
5053848b8605Smrg#endif
5054848b8605Smrg#if YYERROR_VERBOSE
5055848b8605Smrg  if (yymsg != yymsgbuf)
5056848b8605Smrg    YYSTACK_FREE (yymsg);
5057848b8605Smrg#endif
5058848b8605Smrg  /* Make sure YYID is used.  */
5059848b8605Smrg  return YYID (yyresult);
5060848b8605Smrg}
5061848b8605Smrg
5062848b8605Smrg
5063848b8605Smrg/* Line 2076 of yacc.c  */
5064848b8605Smrg#line 2231 "/usr/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y"
5065848b8605Smrg
5066848b8605Smrg
5067848b8605Smrgvoid
5068848b8605Smrgasm_instruction_set_operands(struct asm_instruction *inst,
5069848b8605Smrg			     const struct prog_dst_register *dst,
5070848b8605Smrg			     const struct asm_src_register *src0,
5071848b8605Smrg			     const struct asm_src_register *src1,
5072848b8605Smrg			     const struct asm_src_register *src2)
5073848b8605Smrg{
5074848b8605Smrg   /* In the core ARB extensions only the KIL instruction doesn't have a
5075848b8605Smrg    * destination register.
5076848b8605Smrg    */
5077848b8605Smrg   if (dst == NULL) {
5078848b8605Smrg      init_dst_reg(& inst->Base.DstReg);
5079848b8605Smrg   } else {
5080848b8605Smrg      inst->Base.DstReg = *dst;
5081848b8605Smrg   }
5082848b8605Smrg
5083848b8605Smrg   /* The only instruction that doesn't have any source registers is the
5084848b8605Smrg    * condition-code based KIL instruction added by NV_fragment_program_option.
5085848b8605Smrg    */
5086848b8605Smrg   if (src0 != NULL) {
5087848b8605Smrg      inst->Base.SrcReg[0] = src0->Base;
5088848b8605Smrg      inst->SrcReg[0] = *src0;
5089848b8605Smrg   } else {
5090848b8605Smrg      init_src_reg(& inst->SrcReg[0]);
5091848b8605Smrg   }
5092848b8605Smrg
5093848b8605Smrg   if (src1 != NULL) {
5094848b8605Smrg      inst->Base.SrcReg[1] = src1->Base;
5095848b8605Smrg      inst->SrcReg[1] = *src1;
5096848b8605Smrg   } else {
5097848b8605Smrg      init_src_reg(& inst->SrcReg[1]);
5098848b8605Smrg   }
5099848b8605Smrg
5100848b8605Smrg   if (src2 != NULL) {
5101848b8605Smrg      inst->Base.SrcReg[2] = src2->Base;
5102848b8605Smrg      inst->SrcReg[2] = *src2;
5103848b8605Smrg   } else {
5104848b8605Smrg      init_src_reg(& inst->SrcReg[2]);
5105848b8605Smrg   }
5106848b8605Smrg}
5107848b8605Smrg
5108848b8605Smrg
5109848b8605Smrgstruct asm_instruction *
5110848b8605Smrgasm_instruction_ctor(gl_inst_opcode op,
5111848b8605Smrg		     const struct prog_dst_register *dst,
5112848b8605Smrg		     const struct asm_src_register *src0,
5113848b8605Smrg		     const struct asm_src_register *src1,
5114848b8605Smrg		     const struct asm_src_register *src2)
5115848b8605Smrg{
5116848b8605Smrg   struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
5117848b8605Smrg
5118848b8605Smrg   if (inst) {
5119848b8605Smrg      _mesa_init_instructions(& inst->Base, 1);
5120848b8605Smrg      inst->Base.Opcode = op;
5121848b8605Smrg
5122848b8605Smrg      asm_instruction_set_operands(inst, dst, src0, src1, src2);
5123848b8605Smrg   }
5124848b8605Smrg
5125848b8605Smrg   return inst;
5126848b8605Smrg}
5127848b8605Smrg
5128848b8605Smrg
5129848b8605Smrgstruct asm_instruction *
5130848b8605Smrgasm_instruction_copy_ctor(const struct prog_instruction *base,
5131848b8605Smrg			  const struct prog_dst_register *dst,
5132848b8605Smrg			  const struct asm_src_register *src0,
5133848b8605Smrg			  const struct asm_src_register *src1,
5134848b8605Smrg			  const struct asm_src_register *src2)
5135848b8605Smrg{
5136848b8605Smrg   struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
5137848b8605Smrg
5138848b8605Smrg   if (inst) {
5139848b8605Smrg      _mesa_init_instructions(& inst->Base, 1);
5140848b8605Smrg      inst->Base.Opcode = base->Opcode;
5141848b8605Smrg      inst->Base.CondUpdate = base->CondUpdate;
5142848b8605Smrg      inst->Base.CondDst = base->CondDst;
5143848b8605Smrg      inst->Base.SaturateMode = base->SaturateMode;
5144848b8605Smrg      inst->Base.Precision = base->Precision;
5145848b8605Smrg
5146848b8605Smrg      asm_instruction_set_operands(inst, dst, src0, src1, src2);
5147848b8605Smrg   }
5148848b8605Smrg
5149848b8605Smrg   return inst;
5150848b8605Smrg}
5151848b8605Smrg
5152848b8605Smrg
5153848b8605Smrgvoid
5154848b8605Smrginit_dst_reg(struct prog_dst_register *r)
5155848b8605Smrg{
5156848b8605Smrg   memset(r, 0, sizeof(*r));
5157848b8605Smrg   r->File = PROGRAM_UNDEFINED;
5158848b8605Smrg   r->WriteMask = WRITEMASK_XYZW;
5159848b8605Smrg   r->CondMask = COND_TR;
5160848b8605Smrg   r->CondSwizzle = SWIZZLE_NOOP;
5161848b8605Smrg}
5162848b8605Smrg
5163848b8605Smrg
5164848b8605Smrg/** Like init_dst_reg() but set the File and Index fields. */
5165848b8605Smrgvoid
5166848b8605Smrgset_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index)
5167848b8605Smrg{
5168848b8605Smrg   const GLint maxIndex = 1 << INST_INDEX_BITS;
5169848b8605Smrg   const GLint minIndex = 0;
5170848b8605Smrg   ASSERT(index >= minIndex);
5171848b8605Smrg   (void) minIndex;
5172848b8605Smrg   ASSERT(index <= maxIndex);
5173848b8605Smrg   (void) maxIndex;
5174848b8605Smrg   ASSERT(file == PROGRAM_TEMPORARY ||
5175848b8605Smrg	  file == PROGRAM_ADDRESS ||
5176848b8605Smrg	  file == PROGRAM_OUTPUT);
5177848b8605Smrg   memset(r, 0, sizeof(*r));
5178848b8605Smrg   r->File = file;
5179848b8605Smrg   r->Index = index;
5180848b8605Smrg   r->WriteMask = WRITEMASK_XYZW;
5181848b8605Smrg   r->CondMask = COND_TR;
5182848b8605Smrg   r->CondSwizzle = SWIZZLE_NOOP;
5183848b8605Smrg}
5184848b8605Smrg
5185848b8605Smrg
5186848b8605Smrgvoid
5187848b8605Smrginit_src_reg(struct asm_src_register *r)
5188848b8605Smrg{
5189848b8605Smrg   memset(r, 0, sizeof(*r));
5190848b8605Smrg   r->Base.File = PROGRAM_UNDEFINED;
5191848b8605Smrg   r->Base.Swizzle = SWIZZLE_NOOP;
5192848b8605Smrg   r->Symbol = NULL;
5193848b8605Smrg}
5194848b8605Smrg
5195848b8605Smrg
5196848b8605Smrg/** Like init_src_reg() but set the File and Index fields.
5197848b8605Smrg * \return GL_TRUE if a valid src register, GL_FALSE otherwise
5198848b8605Smrg */
5199848b8605Smrgvoid
5200848b8605Smrgset_src_reg(struct asm_src_register *r, gl_register_file file, GLint index)
5201848b8605Smrg{
5202848b8605Smrg   set_src_reg_swz(r, file, index, SWIZZLE_XYZW);
5203848b8605Smrg}
5204848b8605Smrg
5205848b8605Smrg
5206848b8605Smrgvoid
5207848b8605Smrgset_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
5208848b8605Smrg                GLuint swizzle)
5209848b8605Smrg{
5210848b8605Smrg   const GLint maxIndex = (1 << INST_INDEX_BITS) - 1;
5211848b8605Smrg   const GLint minIndex = -(1 << INST_INDEX_BITS);
5212848b8605Smrg   ASSERT(file < PROGRAM_FILE_MAX);
5213848b8605Smrg   ASSERT(index >= minIndex);
5214848b8605Smrg   (void) minIndex;
5215848b8605Smrg   ASSERT(index <= maxIndex);
5216848b8605Smrg   (void) maxIndex;
5217848b8605Smrg   memset(r, 0, sizeof(*r));
5218848b8605Smrg   r->Base.File = file;
5219848b8605Smrg   r->Base.Index = index;
5220848b8605Smrg   r->Base.Swizzle = swizzle;
5221848b8605Smrg   r->Symbol = NULL;
5222848b8605Smrg}
5223848b8605Smrg
5224848b8605Smrg
5225848b8605Smrg/**
5226848b8605Smrg * Validate the set of inputs used by a program
5227848b8605Smrg *
5228848b8605Smrg * Validates that legal sets of inputs are used by the program.  In this case
5229848b8605Smrg * "used" included both reading the input or binding the input to a name using
5230848b8605Smrg * the \c ATTRIB command.
5231848b8605Smrg *
5232848b8605Smrg * \return
5233848b8605Smrg * \c TRUE if the combination of inputs used is valid, \c FALSE otherwise.
5234848b8605Smrg */
5235848b8605Smrgint
5236848b8605Smrgvalidate_inputs(struct YYLTYPE *locp, struct asm_parser_state *state)
5237848b8605Smrg{
5238848b8605Smrg   const GLbitfield64 inputs = state->prog->InputsRead | state->InputsBound;
5239848b8605Smrg
5240848b8605Smrg   if (((inputs & VERT_BIT_FF_ALL) & (inputs >> VERT_ATTRIB_GENERIC0)) != 0) {
5241848b8605Smrg      yyerror(locp, state, "illegal use of generic attribute and name attribute");
5242848b8605Smrg      return 0;
5243848b8605Smrg   }
5244848b8605Smrg
5245848b8605Smrg   return 1;
5246848b8605Smrg}
5247848b8605Smrg
5248848b8605Smrg
5249848b8605Smrgstruct asm_symbol *
5250848b8605Smrgdeclare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
5251848b8605Smrg		 struct YYLTYPE *locp)
5252848b8605Smrg{
5253848b8605Smrg   struct asm_symbol *s = NULL;
5254848b8605Smrg   struct asm_symbol *exist = (struct asm_symbol *)
5255848b8605Smrg      _mesa_symbol_table_find_symbol(state->st, 0, name);
5256848b8605Smrg
5257848b8605Smrg
5258848b8605Smrg   if (exist != NULL) {
5259848b8605Smrg      yyerror(locp, state, "redeclared identifier");
5260848b8605Smrg   } else {
5261848b8605Smrg      s = calloc(1, sizeof(struct asm_symbol));
5262848b8605Smrg      s->name = name;
5263848b8605Smrg      s->type = t;
5264848b8605Smrg
5265848b8605Smrg      switch (t) {
5266848b8605Smrg      case at_temp:
5267848b8605Smrg	 if (state->prog->NumTemporaries >= state->limits->MaxTemps) {
5268848b8605Smrg	    yyerror(locp, state, "too many temporaries declared");
5269848b8605Smrg	    free(s);
5270848b8605Smrg	    return NULL;
5271848b8605Smrg	 }
5272848b8605Smrg
5273848b8605Smrg	 s->temp_binding = state->prog->NumTemporaries;
5274848b8605Smrg	 state->prog->NumTemporaries++;
5275848b8605Smrg	 break;
5276848b8605Smrg
5277848b8605Smrg      case at_address:
5278848b8605Smrg	 if (state->prog->NumAddressRegs >= state->limits->MaxAddressRegs) {
5279848b8605Smrg	    yyerror(locp, state, "too many address registers declared");
5280848b8605Smrg	    free(s);
5281848b8605Smrg	    return NULL;
5282848b8605Smrg	 }
5283848b8605Smrg
5284848b8605Smrg	 /* FINISHME: Add support for multiple address registers.
5285848b8605Smrg	  */
5286848b8605Smrg	 state->prog->NumAddressRegs++;
5287848b8605Smrg	 break;
5288848b8605Smrg
5289848b8605Smrg      default:
5290848b8605Smrg	 break;
5291848b8605Smrg      }
5292848b8605Smrg
5293848b8605Smrg      _mesa_symbol_table_add_symbol(state->st, 0, s->name, s);
5294848b8605Smrg      s->next = state->sym;
5295848b8605Smrg      state->sym = s;
5296848b8605Smrg   }
5297848b8605Smrg
5298848b8605Smrg   return s;
5299848b8605Smrg}
5300848b8605Smrg
5301848b8605Smrg
5302848b8605Smrgint add_state_reference(struct gl_program_parameter_list *param_list,
5303848b8605Smrg			const gl_state_index tokens[STATE_LENGTH])
5304848b8605Smrg{
5305848b8605Smrg   const GLuint size = 4; /* XXX fix */
5306848b8605Smrg   char *name;
5307848b8605Smrg   GLint index;
5308848b8605Smrg
5309848b8605Smrg   name = _mesa_program_state_string(tokens);
5310848b8605Smrg   index = _mesa_add_parameter(param_list, PROGRAM_STATE_VAR, name,
5311848b8605Smrg                               size, GL_NONE, NULL, tokens);
5312848b8605Smrg   param_list->StateFlags |= _mesa_program_state_flags(tokens);
5313848b8605Smrg
5314848b8605Smrg   /* free name string here since we duplicated it in add_parameter() */
5315848b8605Smrg   free(name);
5316848b8605Smrg
5317848b8605Smrg   return index;
5318848b8605Smrg}
5319848b8605Smrg
5320848b8605Smrg
5321848b8605Smrgint
5322848b8605Smrginitialize_symbol_from_state(struct gl_program *prog,
5323848b8605Smrg			     struct asm_symbol *param_var,
5324848b8605Smrg			     const gl_state_index tokens[STATE_LENGTH])
5325848b8605Smrg{
5326848b8605Smrg   int idx = -1;
5327848b8605Smrg   gl_state_index state_tokens[STATE_LENGTH];
5328848b8605Smrg
5329848b8605Smrg
5330848b8605Smrg   memcpy(state_tokens, tokens, sizeof(state_tokens));
5331848b8605Smrg
5332848b8605Smrg   param_var->type = at_param;
5333848b8605Smrg   param_var->param_binding_type = PROGRAM_STATE_VAR;
5334848b8605Smrg
5335848b8605Smrg   /* If we are adding a STATE_MATRIX that has multiple rows, we need to
5336848b8605Smrg    * unroll it and call add_state_reference() for each row
5337848b8605Smrg    */
5338848b8605Smrg   if ((state_tokens[0] == STATE_MODELVIEW_MATRIX ||
5339848b8605Smrg	state_tokens[0] == STATE_PROJECTION_MATRIX ||
5340848b8605Smrg	state_tokens[0] == STATE_MVP_MATRIX ||
5341848b8605Smrg	state_tokens[0] == STATE_TEXTURE_MATRIX ||
5342848b8605Smrg	state_tokens[0] == STATE_PROGRAM_MATRIX)
5343848b8605Smrg       && (state_tokens[2] != state_tokens[3])) {
5344848b8605Smrg      int row;
5345848b8605Smrg      const int first_row = state_tokens[2];
5346848b8605Smrg      const int last_row = state_tokens[3];
5347848b8605Smrg
5348848b8605Smrg      for (row = first_row; row <= last_row; row++) {
5349848b8605Smrg	 state_tokens[2] = state_tokens[3] = row;
5350848b8605Smrg
5351848b8605Smrg	 idx = add_state_reference(prog->Parameters, state_tokens);
5352848b8605Smrg	 if (param_var->param_binding_begin == ~0U) {
5353848b8605Smrg	    param_var->param_binding_begin = idx;
5354848b8605Smrg            param_var->param_binding_swizzle = SWIZZLE_XYZW;
5355848b8605Smrg         }
5356848b8605Smrg
5357848b8605Smrg	 param_var->param_binding_length++;
5358848b8605Smrg      }
5359848b8605Smrg   }
5360848b8605Smrg   else {
5361848b8605Smrg      idx = add_state_reference(prog->Parameters, state_tokens);
5362848b8605Smrg      if (param_var->param_binding_begin == ~0U) {
5363848b8605Smrg	 param_var->param_binding_begin = idx;
5364848b8605Smrg         param_var->param_binding_swizzle = SWIZZLE_XYZW;
5365848b8605Smrg      }
5366848b8605Smrg      param_var->param_binding_length++;
5367848b8605Smrg   }
5368848b8605Smrg
5369848b8605Smrg   return idx;
5370848b8605Smrg}
5371848b8605Smrg
5372848b8605Smrg
5373848b8605Smrgint
5374848b8605Smrginitialize_symbol_from_param(struct gl_program *prog,
5375848b8605Smrg			     struct asm_symbol *param_var,
5376848b8605Smrg			     const gl_state_index tokens[STATE_LENGTH])
5377848b8605Smrg{
5378848b8605Smrg   int idx = -1;
5379848b8605Smrg   gl_state_index state_tokens[STATE_LENGTH];
5380848b8605Smrg
5381848b8605Smrg
5382848b8605Smrg   memcpy(state_tokens, tokens, sizeof(state_tokens));
5383848b8605Smrg
5384848b8605Smrg   assert((state_tokens[0] == STATE_VERTEX_PROGRAM)
5385848b8605Smrg	  || (state_tokens[0] == STATE_FRAGMENT_PROGRAM));
5386848b8605Smrg   assert((state_tokens[1] == STATE_ENV)
5387848b8605Smrg	  || (state_tokens[1] == STATE_LOCAL));
5388848b8605Smrg
5389848b8605Smrg   /*
5390848b8605Smrg    * The param type is STATE_VAR.  The program parameter entry will
5391848b8605Smrg    * effectively be a pointer into the LOCAL or ENV parameter array.
5392848b8605Smrg    */
5393848b8605Smrg   param_var->type = at_param;
5394848b8605Smrg   param_var->param_binding_type = PROGRAM_STATE_VAR;
5395848b8605Smrg
5396848b8605Smrg   /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,
5397848b8605Smrg    * we need to unroll it and call add_state_reference() for each row
5398848b8605Smrg    */
5399848b8605Smrg   if (state_tokens[2] != state_tokens[3]) {
5400848b8605Smrg      int row;
5401848b8605Smrg      const int first_row = state_tokens[2];
5402848b8605Smrg      const int last_row = state_tokens[3];
5403848b8605Smrg
5404848b8605Smrg      for (row = first_row; row <= last_row; row++) {
5405848b8605Smrg	 state_tokens[2] = state_tokens[3] = row;
5406848b8605Smrg
5407848b8605Smrg	 idx = add_state_reference(prog->Parameters, state_tokens);
5408848b8605Smrg	 if (param_var->param_binding_begin == ~0U) {
5409848b8605Smrg	    param_var->param_binding_begin = idx;
5410848b8605Smrg            param_var->param_binding_swizzle = SWIZZLE_XYZW;
5411848b8605Smrg         }
5412848b8605Smrg	 param_var->param_binding_length++;
5413848b8605Smrg      }
5414848b8605Smrg   }
5415848b8605Smrg   else {
5416848b8605Smrg      idx = add_state_reference(prog->Parameters, state_tokens);
5417848b8605Smrg      if (param_var->param_binding_begin == ~0U) {
5418848b8605Smrg	 param_var->param_binding_begin = idx;
5419848b8605Smrg         param_var->param_binding_swizzle = SWIZZLE_XYZW;
5420848b8605Smrg      }
5421848b8605Smrg      param_var->param_binding_length++;
5422848b8605Smrg   }
5423848b8605Smrg
5424848b8605Smrg   return idx;
5425848b8605Smrg}
5426848b8605Smrg
5427848b8605Smrg
5428848b8605Smrg/**
5429848b8605Smrg * Put a float/vector constant/literal into the parameter list.
5430848b8605Smrg * \param param_var  returns info about the parameter/constant's location,
5431848b8605Smrg *                   binding, type, etc.
5432848b8605Smrg * \param vec  the vector/constant to add
5433848b8605Smrg * \param allowSwizzle  if true, try to consolidate constants which only differ
5434848b8605Smrg *                      by a swizzle.  We don't want to do this when building
5435848b8605Smrg *                      arrays of constants that may be indexed indirectly.
5436848b8605Smrg * \return index of the constant in the parameter list.
5437848b8605Smrg */
5438848b8605Smrgint
5439848b8605Smrginitialize_symbol_from_const(struct gl_program *prog,
5440848b8605Smrg			     struct asm_symbol *param_var,
5441848b8605Smrg			     const struct asm_vector *vec,
5442848b8605Smrg                             GLboolean allowSwizzle)
5443848b8605Smrg{
5444848b8605Smrg   unsigned swizzle;
5445848b8605Smrg   const int idx = _mesa_add_unnamed_constant(prog->Parameters,
5446848b8605Smrg                                              vec->data, vec->count,
5447848b8605Smrg                                              allowSwizzle ? &swizzle : NULL);
5448848b8605Smrg
5449848b8605Smrg   param_var->type = at_param;
5450848b8605Smrg   param_var->param_binding_type = PROGRAM_CONSTANT;
5451848b8605Smrg
5452848b8605Smrg   if (param_var->param_binding_begin == ~0U) {
5453848b8605Smrg      param_var->param_binding_begin = idx;
5454848b8605Smrg      param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;
5455848b8605Smrg   }
5456848b8605Smrg   param_var->param_binding_length++;
5457848b8605Smrg
5458848b8605Smrg   return idx;
5459848b8605Smrg}
5460848b8605Smrg
5461848b8605Smrg
5462848b8605Smrgchar *
5463848b8605Smrgmake_error_string(const char *fmt, ...)
5464848b8605Smrg{
5465848b8605Smrg   int length;
5466848b8605Smrg   char *str;
5467848b8605Smrg   va_list args;
5468848b8605Smrg
5469848b8605Smrg
5470848b8605Smrg   /* Call vsnprintf once to determine how large the final string is.  Call it
5471848b8605Smrg    * again to do the actual formatting.  from the vsnprintf manual page:
5472848b8605Smrg    *
5473848b8605Smrg    *    Upon successful return, these functions return the number of
5474848b8605Smrg    *    characters printed  (not including the trailing '\0' used to end
5475848b8605Smrg    *    output to strings).
5476848b8605Smrg    */
5477848b8605Smrg   va_start(args, fmt);
5478848b8605Smrg   length = 1 + vsnprintf(NULL, 0, fmt, args);
5479848b8605Smrg   va_end(args);
5480848b8605Smrg
5481848b8605Smrg   str = malloc(length);
5482848b8605Smrg   if (str) {
5483848b8605Smrg      va_start(args, fmt);
5484848b8605Smrg      vsnprintf(str, length, fmt, args);
5485848b8605Smrg      va_end(args);
5486848b8605Smrg   }
5487848b8605Smrg
5488848b8605Smrg   return str;
5489848b8605Smrg}
5490848b8605Smrg
5491848b8605Smrg
5492848b8605Smrgvoid
5493848b8605Smrgyyerror(YYLTYPE *locp, struct asm_parser_state *state, const char *s)
5494848b8605Smrg{
5495848b8605Smrg   char *err_str;
5496848b8605Smrg
5497848b8605Smrg
5498848b8605Smrg   err_str = make_error_string("glProgramStringARB(%s)\n", s);
5499848b8605Smrg   if (err_str) {
5500848b8605Smrg      _mesa_error(state->ctx, GL_INVALID_OPERATION, "%s", err_str);
5501848b8605Smrg      free(err_str);
5502848b8605Smrg   }
5503848b8605Smrg
5504848b8605Smrg   err_str = make_error_string("line %u, char %u: error: %s\n",
5505848b8605Smrg			       locp->first_line, locp->first_column, s);
5506848b8605Smrg   _mesa_set_program_error(state->ctx, locp->position, err_str);
5507848b8605Smrg
5508848b8605Smrg   if (err_str) {
5509848b8605Smrg      free(err_str);
5510848b8605Smrg   }
5511848b8605Smrg}
5512848b8605Smrg
5513848b8605Smrg
5514848b8605SmrgGLboolean
5515848b8605Smrg_mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *str,
5516848b8605Smrg			GLsizei len, struct asm_parser_state *state)
5517848b8605Smrg{
5518848b8605Smrg   struct asm_instruction *inst;
5519848b8605Smrg   unsigned i;
5520848b8605Smrg   GLubyte *strz;
5521848b8605Smrg   GLboolean result = GL_FALSE;
5522848b8605Smrg   void *temp;
5523848b8605Smrg   struct asm_symbol *sym;
5524848b8605Smrg
5525848b8605Smrg   state->ctx = ctx;
5526848b8605Smrg   state->prog->Target = target;
5527848b8605Smrg   state->prog->Parameters = _mesa_new_parameter_list();
5528848b8605Smrg
5529848b8605Smrg   /* Make a copy of the program string and force it to be NUL-terminated.
5530848b8605Smrg    */
5531848b8605Smrg   strz = (GLubyte *) malloc(len + 1);
5532848b8605Smrg   if (strz == NULL) {
5533848b8605Smrg      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glProgramStringARB");
5534848b8605Smrg      return GL_FALSE;
5535848b8605Smrg   }
5536848b8605Smrg   memcpy (strz, str, len);
5537848b8605Smrg   strz[len] = '\0';
5538848b8605Smrg
5539848b8605Smrg   state->prog->String = strz;
5540848b8605Smrg
5541848b8605Smrg   state->st = _mesa_symbol_table_ctor();
5542848b8605Smrg
5543848b8605Smrg   state->limits = (target == GL_VERTEX_PROGRAM_ARB)
5544848b8605Smrg      ? & ctx->Const.Program[MESA_SHADER_VERTEX]
5545848b8605Smrg      : & ctx->Const.Program[MESA_SHADER_FRAGMENT];
5546848b8605Smrg
5547848b8605Smrg   state->MaxTextureImageUnits = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits;
5548848b8605Smrg   state->MaxTextureCoordUnits = ctx->Const.MaxTextureCoordUnits;
5549848b8605Smrg   state->MaxTextureUnits = ctx->Const.MaxTextureUnits;
5550848b8605Smrg   state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
5551848b8605Smrg   state->MaxLights = ctx->Const.MaxLights;
5552848b8605Smrg   state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
5553848b8605Smrg   state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
5554848b8605Smrg
5555848b8605Smrg   state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
5556848b8605Smrg      ? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
5557848b8605Smrg
5558848b8605Smrg   _mesa_set_program_error(ctx, -1, NULL);
5559848b8605Smrg
5560848b8605Smrg   _mesa_program_lexer_ctor(& state->scanner, state, (const char *) str, len);
5561848b8605Smrg   yyparse(state);
5562848b8605Smrg   _mesa_program_lexer_dtor(state->scanner);
5563848b8605Smrg
5564848b8605Smrg
5565848b8605Smrg   if (ctx->Program.ErrorPos != -1) {
5566848b8605Smrg      goto error;
5567848b8605Smrg   }
5568848b8605Smrg
5569848b8605Smrg   if (! _mesa_layout_parameters(state)) {
5570848b8605Smrg      struct YYLTYPE loc;
5571848b8605Smrg
5572848b8605Smrg      loc.first_line = 0;
5573848b8605Smrg      loc.first_column = 0;
5574848b8605Smrg      loc.position = len;
5575848b8605Smrg
5576848b8605Smrg      yyerror(& loc, state, "invalid PARAM usage");
5577848b8605Smrg      goto error;
5578848b8605Smrg   }
5579848b8605Smrg
5580848b8605Smrg
5581848b8605Smrg
5582848b8605Smrg   /* Add one instruction to store the "END" instruction.
5583848b8605Smrg    */
5584848b8605Smrg   state->prog->Instructions =
5585848b8605Smrg      _mesa_alloc_instructions(state->prog->NumInstructions + 1);
5586848b8605Smrg
5587848b8605Smrg   if (state->prog->Instructions == NULL) {
5588848b8605Smrg      goto error;
5589848b8605Smrg   }
5590848b8605Smrg
5591848b8605Smrg   inst = state->inst_head;
5592848b8605Smrg   for (i = 0; i < state->prog->NumInstructions; i++) {
5593848b8605Smrg      struct asm_instruction *const temp = inst->next;
5594848b8605Smrg
5595848b8605Smrg      state->prog->Instructions[i] = inst->Base;
5596848b8605Smrg      inst = temp;
5597848b8605Smrg   }
5598848b8605Smrg
5599848b8605Smrg   /* Finally, tag on an OPCODE_END instruction */
5600848b8605Smrg   {
5601848b8605Smrg      const GLuint numInst = state->prog->NumInstructions;
5602848b8605Smrg      _mesa_init_instructions(state->prog->Instructions + numInst, 1);
5603848b8605Smrg      state->prog->Instructions[numInst].Opcode = OPCODE_END;
5604848b8605Smrg   }
5605848b8605Smrg   state->prog->NumInstructions++;
5606848b8605Smrg
5607848b8605Smrg   state->prog->NumParameters = state->prog->Parameters->NumParameters;
5608848b8605Smrg   state->prog->NumAttributes = _mesa_bitcount_64(state->prog->InputsRead);
5609848b8605Smrg
5610848b8605Smrg   /*
5611848b8605Smrg    * Initialize native counts to logical counts.  The device driver may
5612848b8605Smrg    * change them if program is translated into a hardware program.
5613848b8605Smrg    */
5614848b8605Smrg   state->prog->NumNativeInstructions = state->prog->NumInstructions;
5615848b8605Smrg   state->prog->NumNativeTemporaries = state->prog->NumTemporaries;
5616848b8605Smrg   state->prog->NumNativeParameters = state->prog->NumParameters;
5617848b8605Smrg   state->prog->NumNativeAttributes = state->prog->NumAttributes;
5618848b8605Smrg   state->prog->NumNativeAddressRegs = state->prog->NumAddressRegs;
5619848b8605Smrg
5620848b8605Smrg   result = GL_TRUE;
5621848b8605Smrg
5622848b8605Smrgerror:
5623848b8605Smrg   for (inst = state->inst_head; inst != NULL; inst = temp) {
5624848b8605Smrg      temp = inst->next;
5625848b8605Smrg      free(inst);
5626848b8605Smrg   }
5627848b8605Smrg
5628848b8605Smrg   state->inst_head = NULL;
5629848b8605Smrg   state->inst_tail = NULL;
5630848b8605Smrg
5631848b8605Smrg   for (sym = state->sym; sym != NULL; sym = temp) {
5632848b8605Smrg      temp = sym->next;
5633848b8605Smrg
5634848b8605Smrg      free((void *) sym->name);
5635848b8605Smrg      free(sym);
5636848b8605Smrg   }
5637848b8605Smrg   state->sym = NULL;
5638848b8605Smrg
5639848b8605Smrg   _mesa_symbol_table_dtor(state->st);
5640848b8605Smrg   state->st = NULL;
5641848b8605Smrg
5642848b8605Smrg   return result;
5643848b8605Smrg}
5644