1b8e80941Smrg/* A Bison parser, made by GNU Bison 3.2.4.  */
2848b8605Smrg
3848b8605Smrg/* Bison implementation for Yacc-like parsers in C
4b8e80941Smrg
5b8e80941Smrg   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
6b8e80941Smrg
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.
11b8e80941Smrg
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.
16b8e80941Smrg
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.
29b8e80941Smrg
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
43b8e80941Smrg/* Undocumented macros, especially those whose name start with YY_,
44b8e80941Smrg   are private implementation details.  Do not rely on them.  */
45b8e80941Smrg
46848b8605Smrg/* Identify Bison output.  */
47848b8605Smrg#define YYBISON 1
48848b8605Smrg
49848b8605Smrg/* Bison version.  */
50b8e80941Smrg#define YYBISON_VERSION "3.2.4"
51848b8605Smrg
52848b8605Smrg/* Skeleton name.  */
53848b8605Smrg#define YYSKELETON_NAME "yacc.c"
54848b8605Smrg
55848b8605Smrg/* Pure parsers.  */
56848b8605Smrg#define YYPURE 1
57848b8605Smrg
58848b8605Smrg/* Push parsers.  */
59848b8605Smrg#define YYPUSH 0
60848b8605Smrg
61848b8605Smrg/* Pull parsers.  */
62848b8605Smrg#define YYPULL 1
63848b8605Smrg
64848b8605Smrg
65848b8605Smrg/* Substitute the variable and function names.  */
66848b8605Smrg#define yyparse         _mesa_program_parse
67848b8605Smrg#define yylex           _mesa_program_lex
68848b8605Smrg#define yyerror         _mesa_program_error
69848b8605Smrg#define yydebug         _mesa_program_debug
70848b8605Smrg#define yynerrs         _mesa_program_nerrs
71848b8605Smrg
72b8e80941Smrg
73b8e80941Smrg/* First part of user prologue.  */
74b8e80941Smrg#line 1 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:338  */
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 */
98b8e80941Smrg
99b8e80941Smrg#include <stdarg.h>
100848b8605Smrg#include <stdio.h>
101848b8605Smrg#include <stdlib.h>
102848b8605Smrg#include <string.h>
103848b8605Smrg
104b8e80941Smrg#include "main/errors.h"
105848b8605Smrg#include "main/mtypes.h"
106848b8605Smrg#include "main/imports.h"
107848b8605Smrg#include "program/program.h"
108848b8605Smrg#include "program/prog_parameter.h"
109848b8605Smrg#include "program/prog_parameter_layout.h"
110848b8605Smrg#include "program/prog_statevars.h"
111848b8605Smrg#include "program/prog_instruction.h"
112848b8605Smrg
113848b8605Smrg#include "program/symbol_table.h"
114848b8605Smrg#include "program/program_parser.h"
115848b8605Smrg
116b8e80941Smrg#include "util/u_math.h"
117b8e80941Smrg
118848b8605Smrgextern void *yy_scan_string(char *);
119848b8605Smrgextern void yy_delete_buffer(void *);
120848b8605Smrg
121848b8605Smrgstatic struct asm_symbol *declare_variable(struct asm_parser_state *state,
122848b8605Smrg    char *name, enum asm_type t, struct YYLTYPE *locp);
123848b8605Smrg
124848b8605Smrgstatic int add_state_reference(struct gl_program_parameter_list *param_list,
125b8e80941Smrg    const gl_state_index16 tokens[STATE_LENGTH]);
126848b8605Smrg
127848b8605Smrgstatic int initialize_symbol_from_state(struct gl_program *prog,
128b8e80941Smrg    struct asm_symbol *param_var, const gl_state_index16 tokens[STATE_LENGTH]);
129848b8605Smrg
130848b8605Smrgstatic int initialize_symbol_from_param(struct gl_program *prog,
131b8e80941Smrg    struct asm_symbol *param_var, const gl_state_index16 tokens[STATE_LENGTH]);
132848b8605Smrg
133848b8605Smrgstatic int initialize_symbol_from_const(struct gl_program *prog,
134848b8605Smrg    struct asm_symbol *param_var, const struct asm_vector *vec,
135848b8605Smrg    GLboolean allowSwizzle);
136848b8605Smrg
137848b8605Smrgstatic int yyparse(struct asm_parser_state *state);
138848b8605Smrg
139848b8605Smrgstatic char *make_error_string(const char *fmt, ...);
140848b8605Smrg
141848b8605Smrgstatic void yyerror(struct YYLTYPE *locp, struct asm_parser_state *state,
142848b8605Smrg    const char *s);
143848b8605Smrg
144848b8605Smrgstatic int validate_inputs(struct YYLTYPE *locp,
145848b8605Smrg    struct asm_parser_state *state);
146848b8605Smrg
147848b8605Smrgstatic void init_dst_reg(struct prog_dst_register *r);
148848b8605Smrg
149848b8605Smrgstatic void set_dst_reg(struct prog_dst_register *r,
150848b8605Smrg                        gl_register_file file, GLint index);
151848b8605Smrg
152848b8605Smrgstatic void init_src_reg(struct asm_src_register *r);
153848b8605Smrg
154848b8605Smrgstatic void set_src_reg(struct asm_src_register *r,
155848b8605Smrg                        gl_register_file file, GLint index);
156848b8605Smrg
157848b8605Smrgstatic void set_src_reg_swz(struct asm_src_register *r,
158848b8605Smrg                            gl_register_file file, GLint index, GLuint swizzle);
159848b8605Smrg
160848b8605Smrgstatic void asm_instruction_set_operands(struct asm_instruction *inst,
161848b8605Smrg    const struct prog_dst_register *dst, const struct asm_src_register *src0,
162848b8605Smrg    const struct asm_src_register *src1, const struct asm_src_register *src2);
163848b8605Smrg
164b8e80941Smrgstatic struct asm_instruction *asm_instruction_ctor(enum prog_opcode op,
165848b8605Smrg    const struct prog_dst_register *dst, const struct asm_src_register *src0,
166848b8605Smrg    const struct asm_src_register *src1, const struct asm_src_register *src2);
167848b8605Smrg
168848b8605Smrgstatic struct asm_instruction *asm_instruction_copy_ctor(
169848b8605Smrg    const struct prog_instruction *base, const struct prog_dst_register *dst,
170848b8605Smrg    const struct asm_src_register *src0, const struct asm_src_register *src1,
171848b8605Smrg    const struct asm_src_register *src2);
172848b8605Smrg
173848b8605Smrg#ifndef FALSE
174848b8605Smrg#define FALSE 0
175848b8605Smrg#define TRUE (!FALSE)
176848b8605Smrg#endif
177848b8605Smrg
178848b8605Smrg#define YYLLOC_DEFAULT(Current, Rhs, N)					\
179848b8605Smrg   do {									\
180848b8605Smrg      if (N) {							\
181848b8605Smrg	 (Current).first_line = YYRHSLOC(Rhs, 1).first_line;		\
182848b8605Smrg	 (Current).first_column = YYRHSLOC(Rhs, 1).first_column;	\
183848b8605Smrg	 (Current).position = YYRHSLOC(Rhs, 1).position;		\
184848b8605Smrg	 (Current).last_line = YYRHSLOC(Rhs, N).last_line;		\
185848b8605Smrg	 (Current).last_column = YYRHSLOC(Rhs, N).last_column;		\
186848b8605Smrg      } else {								\
187848b8605Smrg	 (Current).first_line = YYRHSLOC(Rhs, 0).last_line;		\
188848b8605Smrg	 (Current).last_line = (Current).first_line;			\
189848b8605Smrg	 (Current).first_column = YYRHSLOC(Rhs, 0).last_column;		\
190848b8605Smrg	 (Current).last_column = (Current).first_column;		\
191848b8605Smrg	 (Current).position = YYRHSLOC(Rhs, 0).position			\
192848b8605Smrg	    + (Current).first_column;					\
193848b8605Smrg      }									\
194848b8605Smrg   } while(0)
195848b8605Smrg
196b8e80941Smrg#line 197 "program_parse.tab.c" /* yacc.c:338  */
197b8e80941Smrg# ifndef YY_NULLPTR
198b8e80941Smrg#  if defined __cplusplus
199b8e80941Smrg#   if 201103L <= __cplusplus
200b8e80941Smrg#    define YY_NULLPTR nullptr
201b8e80941Smrg#   else
202b8e80941Smrg#    define YY_NULLPTR 0
203b8e80941Smrg#   endif
204848b8605Smrg#  else
205b8e80941Smrg#   define YY_NULLPTR ((void*)0)
206848b8605Smrg#  endif
207848b8605Smrg# endif
208848b8605Smrg
209848b8605Smrg/* Enabling verbose error messages.  */
210848b8605Smrg#ifdef YYERROR_VERBOSE
211848b8605Smrg# undef YYERROR_VERBOSE
212848b8605Smrg# define YYERROR_VERBOSE 1
213848b8605Smrg#else
214848b8605Smrg# define YYERROR_VERBOSE 1
215848b8605Smrg#endif
216848b8605Smrg
217848b8605Smrg/* In a future release of Bison, this section will be replaced
218848b8605Smrg   by #include "program_parse.tab.h".  */
219848b8605Smrg#ifndef YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED
220848b8605Smrg# define YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED
221b8e80941Smrg/* Debug traces.  */
222848b8605Smrg#ifndef YYDEBUG
223848b8605Smrg# define YYDEBUG 0
224848b8605Smrg#endif
225848b8605Smrg#if YYDEBUG
226848b8605Smrgextern int _mesa_program_debug;
227848b8605Smrg#endif
228848b8605Smrg
229b8e80941Smrg/* Token type.  */
230848b8605Smrg#ifndef YYTOKENTYPE
231848b8605Smrg# define YYTOKENTYPE
232b8e80941Smrg  enum yytokentype
233b8e80941Smrg  {
234b8e80941Smrg    ARBvp_10 = 258,
235b8e80941Smrg    ARBfp_10 = 259,
236b8e80941Smrg    ADDRESS = 260,
237b8e80941Smrg    ALIAS = 261,
238b8e80941Smrg    ATTRIB = 262,
239b8e80941Smrg    OPTION = 263,
240b8e80941Smrg    OUTPUT = 264,
241b8e80941Smrg    PARAM = 265,
242b8e80941Smrg    TEMP = 266,
243b8e80941Smrg    END = 267,
244b8e80941Smrg    BIN_OP = 268,
245b8e80941Smrg    BINSC_OP = 269,
246b8e80941Smrg    SAMPLE_OP = 270,
247b8e80941Smrg    SCALAR_OP = 271,
248b8e80941Smrg    TRI_OP = 272,
249b8e80941Smrg    VECTOR_OP = 273,
250b8e80941Smrg    ARL = 274,
251b8e80941Smrg    KIL = 275,
252b8e80941Smrg    SWZ = 276,
253b8e80941Smrg    TXD_OP = 277,
254b8e80941Smrg    INTEGER = 278,
255b8e80941Smrg    REAL = 279,
256b8e80941Smrg    AMBIENT = 280,
257b8e80941Smrg    ATTENUATION = 281,
258b8e80941Smrg    BACK = 282,
259b8e80941Smrg    CLIP = 283,
260b8e80941Smrg    COLOR = 284,
261b8e80941Smrg    DEPTH = 285,
262b8e80941Smrg    DIFFUSE = 286,
263b8e80941Smrg    DIRECTION = 287,
264b8e80941Smrg    EMISSION = 288,
265b8e80941Smrg    ENV = 289,
266b8e80941Smrg    EYE = 290,
267b8e80941Smrg    FOG = 291,
268b8e80941Smrg    FOGCOORD = 292,
269b8e80941Smrg    FRAGMENT = 293,
270b8e80941Smrg    FRONT = 294,
271b8e80941Smrg    HALF = 295,
272b8e80941Smrg    INVERSE = 296,
273b8e80941Smrg    INVTRANS = 297,
274b8e80941Smrg    LIGHT = 298,
275b8e80941Smrg    LIGHTMODEL = 299,
276b8e80941Smrg    LIGHTPROD = 300,
277b8e80941Smrg    LOCAL = 301,
278b8e80941Smrg    MATERIAL = 302,
279b8e80941Smrg    MAT_PROGRAM = 303,
280b8e80941Smrg    MATRIX = 304,
281b8e80941Smrg    MATRIXINDEX = 305,
282b8e80941Smrg    MODELVIEW = 306,
283b8e80941Smrg    MVP = 307,
284b8e80941Smrg    NORMAL = 308,
285b8e80941Smrg    OBJECT = 309,
286b8e80941Smrg    PALETTE = 310,
287b8e80941Smrg    PARAMS = 311,
288b8e80941Smrg    PLANE = 312,
289b8e80941Smrg    POINT_TOK = 313,
290b8e80941Smrg    POINTSIZE = 314,
291b8e80941Smrg    POSITION = 315,
292b8e80941Smrg    PRIMARY = 316,
293b8e80941Smrg    PROGRAM = 317,
294b8e80941Smrg    PROJECTION = 318,
295b8e80941Smrg    RANGE = 319,
296b8e80941Smrg    RESULT = 320,
297b8e80941Smrg    ROW = 321,
298b8e80941Smrg    SCENECOLOR = 322,
299b8e80941Smrg    SECONDARY = 323,
300b8e80941Smrg    SHININESS = 324,
301b8e80941Smrg    SIZE_TOK = 325,
302b8e80941Smrg    SPECULAR = 326,
303b8e80941Smrg    SPOT = 327,
304b8e80941Smrg    STATE = 328,
305b8e80941Smrg    TEXCOORD = 329,
306b8e80941Smrg    TEXENV = 330,
307b8e80941Smrg    TEXGEN = 331,
308b8e80941Smrg    TEXGEN_Q = 332,
309b8e80941Smrg    TEXGEN_R = 333,
310b8e80941Smrg    TEXGEN_S = 334,
311b8e80941Smrg    TEXGEN_T = 335,
312b8e80941Smrg    TEXTURE = 336,
313b8e80941Smrg    TRANSPOSE = 337,
314b8e80941Smrg    TEXTURE_UNIT = 338,
315b8e80941Smrg    TEX_1D = 339,
316b8e80941Smrg    TEX_2D = 340,
317b8e80941Smrg    TEX_3D = 341,
318b8e80941Smrg    TEX_CUBE = 342,
319b8e80941Smrg    TEX_RECT = 343,
320b8e80941Smrg    TEX_SHADOW1D = 344,
321b8e80941Smrg    TEX_SHADOW2D = 345,
322b8e80941Smrg    TEX_SHADOWRECT = 346,
323b8e80941Smrg    TEX_ARRAY1D = 347,
324b8e80941Smrg    TEX_ARRAY2D = 348,
325b8e80941Smrg    TEX_ARRAYSHADOW1D = 349,
326b8e80941Smrg    TEX_ARRAYSHADOW2D = 350,
327b8e80941Smrg    VERTEX = 351,
328b8e80941Smrg    VTXATTRIB = 352,
329b8e80941Smrg    IDENTIFIER = 353,
330b8e80941Smrg    USED_IDENTIFIER = 354,
331b8e80941Smrg    MASK4 = 355,
332b8e80941Smrg    MASK3 = 356,
333b8e80941Smrg    MASK2 = 357,
334b8e80941Smrg    MASK1 = 358,
335b8e80941Smrg    SWIZZLE = 359,
336b8e80941Smrg    DOT_DOT = 360,
337b8e80941Smrg    DOT = 361
338b8e80941Smrg  };
339848b8605Smrg#endif
340848b8605Smrg
341b8e80941Smrg/* Value type.  */
342848b8605Smrg#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
343b8e80941Smrg
344b8e80941Smrgunion YYSTYPE
345848b8605Smrg{
346b8e80941Smrg#line 129 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:353  */
347848b8605Smrg
348848b8605Smrg   struct asm_instruction *inst;
349848b8605Smrg   struct asm_symbol *sym;
350848b8605Smrg   struct asm_symbol temp_sym;
351848b8605Smrg   struct asm_swizzle_mask swiz_mask;
352848b8605Smrg   struct asm_src_register src_reg;
353848b8605Smrg   struct prog_dst_register dst_reg;
354848b8605Smrg   struct prog_instruction temp_inst;
355848b8605Smrg   char *string;
356848b8605Smrg   unsigned result;
357848b8605Smrg   unsigned attrib;
358848b8605Smrg   int integer;
359848b8605Smrg   float real;
360b8e80941Smrg   gl_state_index16 state[STATE_LENGTH];
361848b8605Smrg   int negate;
362848b8605Smrg   struct asm_vector vector;
363b8e80941Smrg   enum prog_opcode opcode;
364848b8605Smrg
365848b8605Smrg   struct {
366848b8605Smrg      unsigned swz;
367848b8605Smrg      unsigned rgba_valid:1;
368848b8605Smrg      unsigned xyzw_valid:1;
369848b8605Smrg      unsigned negate:1;
370848b8605Smrg   } ext_swizzle;
371848b8605Smrg
372b8e80941Smrg#line 373 "program_parse.tab.c" /* yacc.c:353  */
373b8e80941Smrg};
374848b8605Smrg
375b8e80941Smrgtypedef union YYSTYPE YYSTYPE;
376848b8605Smrg# define YYSTYPE_IS_TRIVIAL 1
377848b8605Smrg# define YYSTYPE_IS_DECLARED 1
378848b8605Smrg#endif
379848b8605Smrg
380b8e80941Smrg/* Location type.  */
381848b8605Smrg#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
382b8e80941Smrgtypedef struct YYLTYPE YYLTYPE;
383b8e80941Smrgstruct YYLTYPE
384848b8605Smrg{
385848b8605Smrg  int first_line;
386848b8605Smrg  int first_column;
387848b8605Smrg  int last_line;
388848b8605Smrg  int last_column;
389b8e80941Smrg};
390848b8605Smrg# define YYLTYPE_IS_DECLARED 1
391848b8605Smrg# define YYLTYPE_IS_TRIVIAL 1
392848b8605Smrg#endif
393848b8605Smrg
394848b8605Smrg
395b8e80941Smrg
396848b8605Smrgint _mesa_program_parse (struct asm_parser_state *state);
397848b8605Smrg
398848b8605Smrg#endif /* !YY__MESA_PROGRAM_PROGRAM_PARSE_TAB_H_INCLUDED  */
399848b8605Smrg
400b8e80941Smrg/* Second part of user prologue.  */
401b8e80941Smrg#line 271 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:355  */
402848b8605Smrg
403848b8605Smrgextern int
404848b8605Smrg_mesa_program_lexer_lex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
405848b8605Smrg                        void *yyscanner);
406848b8605Smrg
407848b8605Smrgstatic int
408848b8605Smrgyylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
409848b8605Smrg      struct asm_parser_state *state)
410848b8605Smrg{
411848b8605Smrg   return _mesa_program_lexer_lex(yylval_param, yylloc_param, state->scanner);
412848b8605Smrg}
413848b8605Smrg
414b8e80941Smrg#line 415 "program_parse.tab.c" /* yacc.c:355  */
415848b8605Smrg
416848b8605Smrg#ifdef short
417848b8605Smrg# undef short
418848b8605Smrg#endif
419848b8605Smrg
420848b8605Smrg#ifdef YYTYPE_UINT8
421848b8605Smrgtypedef YYTYPE_UINT8 yytype_uint8;
422848b8605Smrg#else
423848b8605Smrgtypedef unsigned char yytype_uint8;
424848b8605Smrg#endif
425848b8605Smrg
426848b8605Smrg#ifdef YYTYPE_INT8
427848b8605Smrgtypedef YYTYPE_INT8 yytype_int8;
428848b8605Smrg#else
429b8e80941Smrgtypedef signed char yytype_int8;
430848b8605Smrg#endif
431848b8605Smrg
432848b8605Smrg#ifdef YYTYPE_UINT16
433848b8605Smrgtypedef YYTYPE_UINT16 yytype_uint16;
434848b8605Smrg#else
435b8e80941Smrgtypedef unsigned short yytype_uint16;
436848b8605Smrg#endif
437848b8605Smrg
438848b8605Smrg#ifdef YYTYPE_INT16
439848b8605Smrgtypedef YYTYPE_INT16 yytype_int16;
440848b8605Smrg#else
441b8e80941Smrgtypedef short yytype_int16;
442848b8605Smrg#endif
443848b8605Smrg
444848b8605Smrg#ifndef YYSIZE_T
445848b8605Smrg# ifdef __SIZE_TYPE__
446848b8605Smrg#  define YYSIZE_T __SIZE_TYPE__
447848b8605Smrg# elif defined size_t
448848b8605Smrg#  define YYSIZE_T size_t
449b8e80941Smrg# elif ! defined YYSIZE_T
450848b8605Smrg#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
451848b8605Smrg#  define YYSIZE_T size_t
452848b8605Smrg# else
453b8e80941Smrg#  define YYSIZE_T unsigned
454848b8605Smrg# endif
455848b8605Smrg#endif
456848b8605Smrg
457848b8605Smrg#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
458848b8605Smrg
459848b8605Smrg#ifndef YY_
460848b8605Smrg# if defined YYENABLE_NLS && YYENABLE_NLS
461848b8605Smrg#  if ENABLE_NLS
462848b8605Smrg#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
463848b8605Smrg#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
464848b8605Smrg#  endif
465848b8605Smrg# endif
466848b8605Smrg# ifndef YY_
467848b8605Smrg#  define YY_(Msgid) Msgid
468848b8605Smrg# endif
469848b8605Smrg#endif
470848b8605Smrg
471b8e80941Smrg#ifndef YY_ATTRIBUTE
472b8e80941Smrg# if (defined __GNUC__                                               \
473b8e80941Smrg      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
474b8e80941Smrg     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
475b8e80941Smrg#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
476b8e80941Smrg# else
477b8e80941Smrg#  define YY_ATTRIBUTE(Spec) /* empty */
478b8e80941Smrg# endif
479b8e80941Smrg#endif
480b8e80941Smrg
481b8e80941Smrg#ifndef YY_ATTRIBUTE_PURE
482b8e80941Smrg# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
483b8e80941Smrg#endif
484b8e80941Smrg
485b8e80941Smrg#ifndef YY_ATTRIBUTE_UNUSED
486b8e80941Smrg# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
487b8e80941Smrg#endif
488b8e80941Smrg
489848b8605Smrg/* Suppress unused-variable warnings by "using" E.  */
490848b8605Smrg#if ! defined lint || defined __GNUC__
491848b8605Smrg# define YYUSE(E) ((void) (E))
492848b8605Smrg#else
493848b8605Smrg# define YYUSE(E) /* empty */
494848b8605Smrg#endif
495848b8605Smrg
496b8e80941Smrg#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
497b8e80941Smrg/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
498b8e80941Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
499b8e80941Smrg    _Pragma ("GCC diagnostic push") \
500b8e80941Smrg    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
501b8e80941Smrg    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
502b8e80941Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
503b8e80941Smrg    _Pragma ("GCC diagnostic pop")
504848b8605Smrg#else
505b8e80941Smrg# define YY_INITIAL_VALUE(Value) Value
506848b8605Smrg#endif
507b8e80941Smrg#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
508b8e80941Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
509b8e80941Smrg# define YY_IGNORE_MAYBE_UNINITIALIZED_END
510b8e80941Smrg#endif
511b8e80941Smrg#ifndef YY_INITIAL_VALUE
512b8e80941Smrg# define YY_INITIAL_VALUE(Value) /* Nothing. */
513848b8605Smrg#endif
514848b8605Smrg
515b8e80941Smrg
516848b8605Smrg#if ! defined yyoverflow || YYERROR_VERBOSE
517848b8605Smrg
518848b8605Smrg/* The parser invokes alloca or malloc; define the necessary symbols.  */
519848b8605Smrg
520848b8605Smrg# ifdef YYSTACK_USE_ALLOCA
521848b8605Smrg#  if YYSTACK_USE_ALLOCA
522848b8605Smrg#   ifdef __GNUC__
523848b8605Smrg#    define YYSTACK_ALLOC __builtin_alloca
524848b8605Smrg#   elif defined __BUILTIN_VA_ARG_INCR
525848b8605Smrg#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
526848b8605Smrg#   elif defined _AIX
527848b8605Smrg#    define YYSTACK_ALLOC __alloca
528848b8605Smrg#   elif defined _MSC_VER
529848b8605Smrg#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
530848b8605Smrg#    define alloca _alloca
531848b8605Smrg#   else
532848b8605Smrg#    define YYSTACK_ALLOC alloca
533b8e80941Smrg#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
534848b8605Smrg#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
535848b8605Smrg      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
536848b8605Smrg#     ifndef EXIT_SUCCESS
537848b8605Smrg#      define EXIT_SUCCESS 0
538848b8605Smrg#     endif
539848b8605Smrg#    endif
540848b8605Smrg#   endif
541848b8605Smrg#  endif
542848b8605Smrg# endif
543848b8605Smrg
544848b8605Smrg# ifdef YYSTACK_ALLOC
545b8e80941Smrg   /* Pacify GCC's 'empty if-body' warning.  */
546b8e80941Smrg#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
547848b8605Smrg#  ifndef YYSTACK_ALLOC_MAXIMUM
548848b8605Smrg    /* The OS might guarantee only one guard page at the bottom of the stack,
549848b8605Smrg       and a page size can be as small as 4096 bytes.  So we cannot safely
550848b8605Smrg       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
551848b8605Smrg       to allow for a few compiler-allocated temporary stack slots.  */
552848b8605Smrg#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
553848b8605Smrg#  endif
554848b8605Smrg# else
555848b8605Smrg#  define YYSTACK_ALLOC YYMALLOC
556848b8605Smrg#  define YYSTACK_FREE YYFREE
557848b8605Smrg#  ifndef YYSTACK_ALLOC_MAXIMUM
558848b8605Smrg#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
559848b8605Smrg#  endif
560848b8605Smrg#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
561848b8605Smrg       && ! ((defined YYMALLOC || defined malloc) \
562b8e80941Smrg             && (defined YYFREE || defined free)))
563848b8605Smrg#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
564848b8605Smrg#   ifndef EXIT_SUCCESS
565848b8605Smrg#    define EXIT_SUCCESS 0
566848b8605Smrg#   endif
567848b8605Smrg#  endif
568848b8605Smrg#  ifndef YYMALLOC
569848b8605Smrg#   define YYMALLOC malloc
570b8e80941Smrg#   if ! defined malloc && ! defined EXIT_SUCCESS
571848b8605Smrgvoid *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
572848b8605Smrg#   endif
573848b8605Smrg#  endif
574848b8605Smrg#  ifndef YYFREE
575848b8605Smrg#   define YYFREE free
576b8e80941Smrg#   if ! defined free && ! defined EXIT_SUCCESS
577848b8605Smrgvoid free (void *); /* INFRINGES ON USER NAME SPACE */
578848b8605Smrg#   endif
579848b8605Smrg#  endif
580848b8605Smrg# endif
581848b8605Smrg#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
582848b8605Smrg
583848b8605Smrg
584848b8605Smrg#if (! defined yyoverflow \
585848b8605Smrg     && (! defined __cplusplus \
586b8e80941Smrg         || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
587b8e80941Smrg             && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
588848b8605Smrg
589848b8605Smrg/* A type that is properly aligned for any stack member.  */
590848b8605Smrgunion yyalloc
591848b8605Smrg{
592848b8605Smrg  yytype_int16 yyss_alloc;
593848b8605Smrg  YYSTYPE yyvs_alloc;
594848b8605Smrg  YYLTYPE yyls_alloc;
595848b8605Smrg};
596848b8605Smrg
597848b8605Smrg/* The size of the maximum gap between one aligned stack and the next.  */
598848b8605Smrg# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
599848b8605Smrg
600848b8605Smrg/* The size of an array large to enough to hold all stacks, each with
601848b8605Smrg   N elements.  */
602848b8605Smrg# define YYSTACK_BYTES(N) \
603848b8605Smrg     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
604848b8605Smrg      + 2 * YYSTACK_GAP_MAXIMUM)
605848b8605Smrg
606848b8605Smrg# define YYCOPY_NEEDED 1
607848b8605Smrg
608848b8605Smrg/* Relocate STACK from its old location to the new one.  The
609848b8605Smrg   local variables YYSIZE and YYSTACKSIZE give the old and new number of
610848b8605Smrg   elements in the stack, and YYPTR gives the new location of the
611848b8605Smrg   stack.  Advance YYPTR to a properly aligned location for the next
612848b8605Smrg   stack.  */
613b8e80941Smrg# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
614b8e80941Smrg    do                                                                  \
615b8e80941Smrg      {                                                                 \
616b8e80941Smrg        YYSIZE_T yynewbytes;                                            \
617b8e80941Smrg        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
618b8e80941Smrg        Stack = &yyptr->Stack_alloc;                                    \
619b8e80941Smrg        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
620b8e80941Smrg        yyptr += yynewbytes / sizeof (*yyptr);                          \
621b8e80941Smrg      }                                                                 \
622b8e80941Smrg    while (0)
623848b8605Smrg
624848b8605Smrg#endif
625848b8605Smrg
626848b8605Smrg#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
627848b8605Smrg/* Copy COUNT objects from SRC to DST.  The source and destination do
628848b8605Smrg   not overlap.  */
629848b8605Smrg# ifndef YYCOPY
630848b8605Smrg#  if defined __GNUC__ && 1 < __GNUC__
631848b8605Smrg#   define YYCOPY(Dst, Src, Count) \
632848b8605Smrg      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
633848b8605Smrg#  else
634848b8605Smrg#   define YYCOPY(Dst, Src, Count)              \
635848b8605Smrg      do                                        \
636848b8605Smrg        {                                       \
637848b8605Smrg          YYSIZE_T yyi;                         \
638848b8605Smrg          for (yyi = 0; yyi < (Count); yyi++)   \
639848b8605Smrg            (Dst)[yyi] = (Src)[yyi];            \
640848b8605Smrg        }                                       \
641b8e80941Smrg      while (0)
642848b8605Smrg#  endif
643848b8605Smrg# endif
644848b8605Smrg#endif /* !YYCOPY_NEEDED */
645848b8605Smrg
646848b8605Smrg/* YYFINAL -- State number of the termination state.  */
647848b8605Smrg#define YYFINAL  5
648848b8605Smrg/* YYLAST -- Last index in YYTABLE.  */
649b8e80941Smrg#define YYLAST   353
650848b8605Smrg
651848b8605Smrg/* YYNTOKENS -- Number of terminals.  */
652b8e80941Smrg#define YYNTOKENS  116
653848b8605Smrg/* YYNNTS -- Number of nonterminals.  */
654b8e80941Smrg#define YYNNTS  136
655848b8605Smrg/* YYNRULES -- Number of rules.  */
656b8e80941Smrg#define YYNRULES  267
657b8e80941Smrg/* YYNSTATES -- Number of states.  */
658b8e80941Smrg#define YYNSTATES  450
659848b8605Smrg
660b8e80941Smrg/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
661b8e80941Smrg   by yylex, with out-of-bounds checking.  */
662848b8605Smrg#define YYUNDEFTOK  2
663b8e80941Smrg#define YYMAXUTOK   361
664848b8605Smrg
665b8e80941Smrg#define YYTRANSLATE(YYX)                                                \
666b8e80941Smrg  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
667848b8605Smrg
668b8e80941Smrg/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
669b8e80941Smrg   as returned by yylex, without out-of-bounds checking.  */
670848b8605Smrgstatic const yytype_uint8 yytranslate[] =
671848b8605Smrg{
672848b8605Smrg       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
673848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
674848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
675848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
676b8e80941Smrg       2,     2,     2,   111,   108,   112,     2,     2,     2,     2,
677b8e80941Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,   107,
678b8e80941Smrg       2,   113,     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,
681b8e80941Smrg       2,   109,     2,   110,     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,
684b8e80941Smrg       2,     2,     2,   114,     2,   115,     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,     2,     2,     2,     2,
691848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
692848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
693848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
694848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
695848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
696848b8605Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
697848b8605Smrg       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
698848b8605Smrg       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
699848b8605Smrg      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
700848b8605Smrg      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
701848b8605Smrg      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
702848b8605Smrg      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
703848b8605Smrg      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
704848b8605Smrg      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
705848b8605Smrg      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
706848b8605Smrg      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
707848b8605Smrg      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
708b8e80941Smrg     105,   106
709848b8605Smrg};
710848b8605Smrg
711848b8605Smrg#if YYDEBUG
712b8e80941Smrg  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
713848b8605Smrgstatic const yytype_uint16 yyrline[] =
714848b8605Smrg{
715b8e80941Smrg       0,   286,   286,   289,   297,   309,   310,   313,   337,   338,
716b8e80941Smrg     341,   356,   359,   364,   371,   372,   373,   374,   375,   376,
717b8e80941Smrg     377,   380,   381,   382,   385,   391,   397,   403,   410,   416,
718b8e80941Smrg     423,   467,   474,   518,   524,   525,   526,   527,   528,   529,
719b8e80941Smrg     530,   531,   532,   533,   534,   535,   538,   550,   560,   569,
720b8e80941Smrg     582,   604,   611,   644,   651,   667,   726,   769,   778,   800,
721b8e80941Smrg     810,   814,   843,   862,   862,   864,   871,   883,   884,   885,
722b8e80941Smrg     888,   902,   916,   936,   947,   959,   961,   962,   963,   964,
723b8e80941Smrg     967,   967,   967,   967,   968,   971,   972,   973,   974,   975,
724b8e80941Smrg     976,   979,   998,  1002,  1008,  1012,  1016,  1020,  1024,  1028,
725b8e80941Smrg    1033,  1039,  1050,  1052,  1056,  1060,  1064,  1070,  1070,  1072,
726b8e80941Smrg    1090,  1116,  1119,  1134,  1140,  1146,  1147,  1154,  1160,  1166,
727b8e80941Smrg    1174,  1180,  1186,  1194,  1200,  1206,  1214,  1215,  1218,  1219,
728b8e80941Smrg    1220,  1221,  1222,  1223,  1224,  1225,  1226,  1227,  1228,  1231,
729b8e80941Smrg    1240,  1244,  1248,  1254,  1263,  1267,  1271,  1280,  1284,  1290,
730b8e80941Smrg    1296,  1303,  1308,  1316,  1326,  1328,  1336,  1342,  1346,  1350,
731b8e80941Smrg    1356,  1367,  1376,  1380,  1385,  1389,  1393,  1397,  1403,  1410,
732b8e80941Smrg    1414,  1420,  1428,  1439,  1446,  1450,  1456,  1466,  1477,  1481,
733b8e80941Smrg    1499,  1508,  1511,  1517,  1521,  1525,  1531,  1542,  1547,  1552,
734b8e80941Smrg    1557,  1562,  1567,  1575,  1578,  1583,  1596,  1604,  1615,  1623,
735b8e80941Smrg    1623,  1625,  1625,  1627,  1637,  1642,  1649,  1659,  1668,  1673,
736b8e80941Smrg    1680,  1690,  1700,  1712,  1712,  1713,  1713,  1715,  1725,  1733,
737b8e80941Smrg    1743,  1751,  1759,  1768,  1779,  1783,  1789,  1790,  1791,  1794,
738b8e80941Smrg    1794,  1797,  1797,  1800,  1807,  1816,  1830,  1839,  1848,  1852,
739b8e80941Smrg    1861,  1870,  1881,  1888,  1898,  1926,  1935,  1947,  1950,  1959,
740b8e80941Smrg    1970,  1971,  1972,  1975,  1976,  1977,  1980,  1981,  1984,  1985,
741b8e80941Smrg    1988,  1989,  1992,  2003,  2014,  2025,  2051,  2052
742848b8605Smrg};
743848b8605Smrg#endif
744848b8605Smrg
745848b8605Smrg#if YYDEBUG || YYERROR_VERBOSE || 1
746848b8605Smrg/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
747848b8605Smrg   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
748848b8605Smrgstatic const char *const yytname[] =
749848b8605Smrg{
750848b8605Smrg  "$end", "error", "$undefined", "ARBvp_10", "ARBfp_10", "ADDRESS",
751848b8605Smrg  "ALIAS", "ATTRIB", "OPTION", "OUTPUT", "PARAM", "TEMP", "END", "BIN_OP",
752848b8605Smrg  "BINSC_OP", "SAMPLE_OP", "SCALAR_OP", "TRI_OP", "VECTOR_OP", "ARL",
753848b8605Smrg  "KIL", "SWZ", "TXD_OP", "INTEGER", "REAL", "AMBIENT", "ATTENUATION",
754848b8605Smrg  "BACK", "CLIP", "COLOR", "DEPTH", "DIFFUSE", "DIRECTION", "EMISSION",
755848b8605Smrg  "ENV", "EYE", "FOG", "FOGCOORD", "FRAGMENT", "FRONT", "HALF", "INVERSE",
756848b8605Smrg  "INVTRANS", "LIGHT", "LIGHTMODEL", "LIGHTPROD", "LOCAL", "MATERIAL",
757848b8605Smrg  "MAT_PROGRAM", "MATRIX", "MATRIXINDEX", "MODELVIEW", "MVP", "NORMAL",
758848b8605Smrg  "OBJECT", "PALETTE", "PARAMS", "PLANE", "POINT_TOK", "POINTSIZE",
759848b8605Smrg  "POSITION", "PRIMARY", "PROGRAM", "PROJECTION", "RANGE", "RESULT", "ROW",
760848b8605Smrg  "SCENECOLOR", "SECONDARY", "SHININESS", "SIZE_TOK", "SPECULAR", "SPOT",
761848b8605Smrg  "STATE", "TEXCOORD", "TEXENV", "TEXGEN", "TEXGEN_Q", "TEXGEN_R",
762848b8605Smrg  "TEXGEN_S", "TEXGEN_T", "TEXTURE", "TRANSPOSE", "TEXTURE_UNIT", "TEX_1D",
763848b8605Smrg  "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "TEX_SHADOW1D",
764848b8605Smrg  "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
765848b8605Smrg  "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
766b8e80941Smrg  "IDENTIFIER", "USED_IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1",
767b8e80941Smrg  "SWIZZLE", "DOT_DOT", "DOT", "';'", "','", "'['", "']'", "'+'", "'-'",
768b8e80941Smrg  "'='", "'{'", "'}'", "$accept", "program", "language", "optionSequence",
769b8e80941Smrg  "option", "statementSequence", "statement", "instruction",
770b8e80941Smrg  "ALU_instruction", "TexInstruction", "ARL_instruction",
771848b8605Smrg  "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
772848b8605Smrg  "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
773848b8605Smrg  "KIL_instruction", "TXD_instruction", "texImageUnit", "texTarget",
774848b8605Smrg  "SWZ_instruction", "scalarSrcReg", "scalarUse", "swizzleSrcReg",
775848b8605Smrg  "maskedDstReg", "maskedAddrReg", "extendedSwizzle", "extSwizComp",
776848b8605Smrg  "extSwizSel", "srcReg", "dstReg", "progParamArray", "progParamArrayMem",
777848b8605Smrg  "progParamArrayAbs", "progParamArrayRel", "addrRegRelOffset",
778848b8605Smrg  "addrRegPosOffset", "addrRegNegOffset", "addrReg", "addrComponent",
779848b8605Smrg  "addrWriteMask", "scalarSuffix", "swizzleSuffix", "optionalMask",
780848b8605Smrg  "namingStatement", "ATTRIB_statement", "attribBinding", "vtxAttribItem",
781b8e80941Smrg  "vtxAttribNum", "vtxWeightNum", "fragAttribItem", "PARAM_statement",
782b8e80941Smrg  "PARAM_singleStmt", "PARAM_multipleStmt", "optArraySize",
783b8e80941Smrg  "paramSingleInit", "paramMultipleInit", "paramMultInitList",
784b8e80941Smrg  "paramSingleItemDecl", "paramSingleItemUse", "paramMultipleItem",
785b8e80941Smrg  "stateMultipleItem", "stateSingleItem", "stateMaterialItem",
786b8e80941Smrg  "stateMatProperty", "stateLightItem", "stateLightProperty",
787b8e80941Smrg  "stateSpotProperty", "stateLightModelItem", "stateLModProperty",
788b8e80941Smrg  "stateLightProdItem", "stateLProdProperty", "stateTexEnvItem",
789b8e80941Smrg  "stateTexEnvProperty", "ambDiffSpecProperty", "stateLightNumber",
790b8e80941Smrg  "stateTexGenItem", "stateTexGenType", "stateTexGenCoord", "stateFogItem",
791b8e80941Smrg  "stateFogProperty", "stateClipPlaneItem", "stateClipPlaneNum",
792b8e80941Smrg  "statePointItem", "statePointProperty", "stateMatrixRow",
793b8e80941Smrg  "stateMatrixRows", "optMatrixRows", "stateMatrixItem",
794b8e80941Smrg  "stateOptMatModifier", "stateMatModifier", "stateMatrixRowNum",
795b8e80941Smrg  "stateMatrixName", "stateOptModMatNum", "stateModMatNum",
796b8e80941Smrg  "statePaletteMatNum", "stateProgramMatNum", "stateDepthItem",
797b8e80941Smrg  "programSingleItem", "programMultipleItem", "progEnvParams",
798b8e80941Smrg  "progEnvParamNums", "progEnvParam", "progLocalParams",
799b8e80941Smrg  "progLocalParamNums", "progLocalParam", "progEnvParamNum",
800b8e80941Smrg  "progLocalParamNum", "paramConstDecl", "paramConstUse",
801b8e80941Smrg  "paramConstScalarDecl", "paramConstScalarUse", "paramConstVector",
802b8e80941Smrg  "signedFloatConstant", "optionalSign", "TEMP_statement", "@1",
803848b8605Smrg  "ADDRESS_statement", "@2", "varNameList", "OUTPUT_statement",
804848b8605Smrg  "resultBinding", "resultColBinding", "optResultFaceType",
805848b8605Smrg  "optResultColorType", "optFaceType", "optColorType",
806848b8605Smrg  "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
807848b8605Smrg  "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
808b8e80941Smrg  "ALIAS_statement", "string", YY_NULLPTR
809848b8605Smrg};
810848b8605Smrg#endif
811848b8605Smrg
812848b8605Smrg# ifdef YYPRINT
813b8e80941Smrg/* YYTOKNUM[NUM] -- (External) token number corresponding to the
814b8e80941Smrg   (internal) symbol number NUM (which must be that of a token).  */
815848b8605Smrgstatic const yytype_uint16 yytoknum[] =
816848b8605Smrg{
817848b8605Smrg       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
818848b8605Smrg     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
819848b8605Smrg     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
820848b8605Smrg     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
821848b8605Smrg     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
822848b8605Smrg     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
823848b8605Smrg     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
824848b8605Smrg     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
825848b8605Smrg     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
826848b8605Smrg     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
827b8e80941Smrg     355,   356,   357,   358,   359,   360,   361,    59,    44,    91,
828b8e80941Smrg      93,    43,    45,    61,   123,   125
829848b8605Smrg};
830848b8605Smrg# endif
831848b8605Smrg
832b8e80941Smrg#define YYPACT_NINF -383
833b8e80941Smrg
834b8e80941Smrg#define yypact_value_is_default(Yystate) \
835b8e80941Smrg  (!!((Yystate) == (-383)))
836b8e80941Smrg
837b8e80941Smrg#define YYTABLE_NINF -63
838b8e80941Smrg
839b8e80941Smrg#define yytable_value_is_error(Yytable_value) \
840b8e80941Smrg  0
841b8e80941Smrg
842b8e80941Smrg  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
843b8e80941Smrg     STATE-NUM.  */
844b8e80941Smrgstatic const yytype_int16 yypact[] =
845848b8605Smrg{
846b8e80941Smrg     117,  -383,  -383,    30,  -383,  -383,    25,    78,  -383,   177,
847b8e80941Smrg    -383,  -383,   -36,  -383,   -21,   -19,    -1,     1,  -383,  -383,
848b8e80941Smrg     -33,   -33,   -33,   -33,   -33,   -33,   -17,   106,   -33,   -33,
849b8e80941Smrg    -383,    52,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,
850b8e80941Smrg    -383,  -383,  -383,  -383,    54,  -383,  -383,  -383,  -383,  -383,
851b8e80941Smrg    -383,  -383,  -383,  -383,    14,    51,    58,    65,    44,    14,
852b8e80941Smrg      86,  -383,    72,    67,  -383,    77,   119,   120,   123,   124,
853b8e80941Smrg    -383,   125,   131,  -383,  -383,  -383,   -16,   127,   128,  -383,
854b8e80941Smrg    -383,  -383,   134,   145,   -15,   178,   115,   -26,  -383,   134,
855b8e80941Smrg     -14,  -383,  -383,  -383,  -383,   136,  -383,   106,  -383,  -383,
856b8e80941Smrg    -383,  -383,  -383,   106,   106,   106,   106,   106,   106,  -383,
857b8e80941Smrg    -383,  -383,  -383,    31,    80,    64,   -10,   137,   106,    32,
858b8e80941Smrg     138,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,
859b8e80941Smrg     -16,   106,   150,  -383,  -383,  -383,  -383,   139,  -383,  -383,
860b8e80941Smrg    -383,  -383,  -383,  -383,  -383,   202,  -383,  -383,   227,    49,
861b8e80941Smrg     228,  -383,   146,   147,   -16,   148,  -383,   149,  -383,  -383,
862b8e80941Smrg      73,  -383,  -383,   136,  -383,   143,   151,   152,   189,     5,
863b8e80941Smrg     153,    28,   154,    92,   100,     2,   155,   136,  -383,  -383,
864b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,   192,  -383,
865b8e80941Smrg      73,  -383,   157,  -383,  -383,   136,   158,  -383,    35,  -383,
866b8e80941Smrg    -383,  -383,  -383,    -3,   160,   163,  -383,   159,  -383,  -383,
867b8e80941Smrg     164,  -383,  -383,  -383,  -383,   165,   106,   106,  -383,   156,
868b8e80941Smrg     190,   106,  -383,  -383,  -383,  -383,   253,   254,   255,  -383,
869b8e80941Smrg    -383,  -383,  -383,   256,  -383,  -383,  -383,  -383,   213,   256,
870b8e80941Smrg       4,   172,   173,  -383,   174,  -383,   136,     7,  -383,  -383,
871b8e80941Smrg    -383,   261,   257,    16,   176,  -383,   264,  -383,   265,   106,
872b8e80941Smrg    -383,  -383,   179,  -383,  -383,   187,   106,   106,   180,  -383,
873b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,   182,   184,   185,  -383,
874b8e80941Smrg     186,  -383,   188,  -383,   194,  -383,   195,  -383,   196,  -383,
875b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,   272,   274,  -383,   276,
876b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,   197,  -383,  -383,
877b8e80941Smrg    -383,  -383,   144,   277,  -383,   198,  -383,   199,    39,  -383,
878b8e80941Smrg    -383,   118,  -383,   193,     3,   203,    -8,   279,  -383,   116,
879b8e80941Smrg     106,  -383,  -383,   258,   102,    92,  -383,   200,  -383,   204,
880b8e80941Smrg    -383,   206,  -383,  -383,  -383,  -383,  -383,  -383,  -383,   207,
881b8e80941Smrg    -383,  -383,   106,  -383,   289,   290,  -383,   106,  -383,  -383,
882b8e80941Smrg    -383,   106,    91,    64,    41,  -383,  -383,  -383,  -383,  -383,
883b8e80941Smrg    -383,  -383,  -383,   208,  -383,  -383,  -383,  -383,  -383,  -383,
884b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,
885b8e80941Smrg    -383,  -383,   287,  -383,  -383,    13,  -383,  -383,  -383,  -383,
886b8e80941Smrg      50,  -383,  -383,  -383,  -383,   212,   214,   218,   219,  -383,
887b8e80941Smrg     263,    -8,  -383,  -383,  -383,  -383,  -383,  -383,   106,  -383,
888b8e80941Smrg     106,   190,   253,   254,   221,  -383,  -383,   217,   215,   226,
889b8e80941Smrg     211,   230,   229,   231,   277,  -383,   106,   116,  -383,   253,
890b8e80941Smrg    -383,   254,   -47,  -383,  -383,  -383,  -383,   277,   232,  -383
891848b8605Smrg};
892848b8605Smrg
893b8e80941Smrg  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
894b8e80941Smrg     Performed when YYTABLE does not specify something else to do.  Zero
895b8e80941Smrg     means the default is an error.  */
896b8e80941Smrgstatic const yytype_uint16 yydefact[] =
897848b8605Smrg{
898b8e80941Smrg       0,     3,     4,     0,     6,     1,     9,     0,     5,     0,
899b8e80941Smrg     266,   267,     0,   231,     0,     0,     0,     0,   229,     2,
900b8e80941Smrg       0,     0,     0,     0,     0,     0,     0,   228,     0,     0,
901b8e80941Smrg       8,     0,    12,    13,    14,    15,    16,    17,    18,    19,
902b8e80941Smrg      21,    22,    23,    20,     0,    85,    86,   107,   108,    87,
903b8e80941Smrg      88,    89,    90,     7,     0,     0,     0,     0,     0,     0,
904b8e80941Smrg       0,    61,     0,    84,    60,     0,     0,     0,     0,     0,
905b8e80941Smrg      72,     0,     0,   226,   227,    31,     0,     0,     0,    10,
906b8e80941Smrg      11,   234,   232,     0,     0,     0,   111,   228,   109,   230,
907b8e80941Smrg     243,   241,   237,   239,   236,   256,   238,   228,    80,    81,
908b8e80941Smrg      82,    83,    50,   228,   228,   228,   228,   228,   228,    74,
909b8e80941Smrg      51,   219,   218,     0,     0,     0,     0,    56,   228,    79,
910b8e80941Smrg       0,    57,    59,   120,   121,   199,   200,   122,   215,   216,
911b8e80941Smrg       0,   228,     0,   265,    91,   235,   112,     0,   113,   117,
912b8e80941Smrg     118,   119,   213,   214,   217,     0,   246,   245,     0,   247,
913b8e80941Smrg       0,   240,     0,     0,     0,     0,    26,     0,    25,    24,
914b8e80941Smrg     253,   105,   103,   256,    93,     0,     0,     0,     0,     0,
915b8e80941Smrg       0,   250,     0,   250,     0,     0,   260,   256,   128,   129,
916b8e80941Smrg     130,   131,   133,   132,   134,   135,   136,   137,     0,   138,
917b8e80941Smrg     253,    97,     0,    95,    94,   256,     0,    92,     0,    77,
918b8e80941Smrg      76,    78,    49,     0,     0,     0,   233,     0,   225,   224,
919b8e80941Smrg       0,   248,   249,   242,   262,     0,   228,   228,    47,     0,
920b8e80941Smrg       0,   228,   254,   255,   104,   106,     0,     0,     0,   198,
921b8e80941Smrg     169,   170,   168,     0,   151,   252,   251,   150,     0,     0,
922b8e80941Smrg       0,     0,   193,   189,     0,   188,   256,   181,   175,   174,
923b8e80941Smrg     173,     0,     0,     0,     0,    96,     0,    98,     0,   228,
924b8e80941Smrg     220,    65,     0,    63,    64,     0,   228,   228,     0,   110,
925b8e80941Smrg     244,   257,    28,    27,    75,    48,   258,     0,     0,   211,
926b8e80941Smrg       0,   212,     0,   172,     0,   160,     0,   152,     0,   157,
927b8e80941Smrg     158,   141,   142,   159,   139,   140,     0,     0,   187,     0,
928b8e80941Smrg     190,   183,   185,   184,   180,   182,   264,     0,   156,   155,
929b8e80941Smrg     162,   163,     0,     0,   102,     0,   101,     0,     0,    58,
930b8e80941Smrg      73,    67,    46,     0,     0,     0,   228,     0,    33,     0,
931b8e80941Smrg     228,   206,   210,     0,     0,   250,   197,     0,   195,     0,
932b8e80941Smrg     196,     0,   261,   167,   166,   164,   165,   161,   186,     0,
933b8e80941Smrg      99,   100,   228,   221,     0,     0,    66,   228,    54,    53,
934b8e80941Smrg      55,   228,     0,     0,     0,   115,   123,   126,   124,   201,
935b8e80941Smrg     202,   125,   263,     0,    34,    35,    36,    37,    38,    39,
936b8e80941Smrg      40,    41,    42,    43,    44,    45,    30,    29,   171,   146,
937b8e80941Smrg     148,   145,     0,   143,   144,     0,   192,   194,   191,   176,
938b8e80941Smrg       0,    70,    68,    71,    69,     0,     0,     0,     0,   127,
939b8e80941Smrg     178,   228,   114,   259,   149,   147,   153,   154,   228,   222,
940b8e80941Smrg     228,     0,     0,     0,     0,   177,   116,     0,     0,     0,
941b8e80941Smrg       0,   204,     0,   208,     0,   223,   228,     0,   203,     0,
942b8e80941Smrg     207,     0,     0,    52,    32,   205,   209,     0,     0,   179
943848b8605Smrg};
944848b8605Smrg
945b8e80941Smrg  /* YYPGOTO[NTERM-NUM].  */
946b8e80941Smrgstatic const yytype_int16 yypgoto[] =
947848b8605Smrg{
948b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,
949b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,   -84,
950b8e80941Smrg     -97,  -383,   -99,  -383,   -92,   191,  -383,  -383,  -346,  -383,
951b8e80941Smrg     -78,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,   135,
952b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,   259,  -383,  -383,
953b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,
954b8e80941Smrg    -383,   -70,  -383,   -86,  -383,  -383,  -383,  -383,  -383,  -383,
955b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -317,   105,  -383,  -383,  -383,
956b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,  -383,   -18,
957b8e80941Smrg    -383,  -383,  -378,  -383,  -383,  -383,  -383,  -383,  -383,   260,
958b8e80941Smrg    -383,  -383,  -383,  -383,  -383,  -383,  -383,  -377,  -382,   266,
959b8e80941Smrg    -383,  -383,  -383,   -85,  -115,   -87,  -383,  -383,  -383,  -383,
960b8e80941Smrg     291,  -383,   267,  -383,  -383,  -383,  -169,   161,  -153,  -383,
961b8e80941Smrg    -383,  -383,  -383,  -383,  -383,    22
962848b8605Smrg};
963848b8605Smrg
964b8e80941Smrg  /* YYDEFGOTO[NTERM-NUM].  */
965848b8605Smrgstatic const yytype_int16 yydefgoto[] =
966848b8605Smrg{
967b8e80941Smrg      -1,     3,     4,     6,     8,     9,    30,    31,    32,    33,
968b8e80941Smrg      34,    35,    36,    37,    38,    39,    40,    41,    42,   277,
969b8e80941Smrg     386,    43,   153,   218,    75,    62,    71,   322,   323,   359,
970b8e80941Smrg     119,    63,   120,   262,   263,   264,   356,   402,   404,    72,
971b8e80941Smrg     321,   110,   275,   202,   102,    44,    45,   121,   197,   317,
972b8e80941Smrg     315,   164,    46,    47,    48,   137,    88,   269,   364,   138,
973b8e80941Smrg     122,   365,   366,   123,   178,   294,   179,   393,   415,   180,
974b8e80941Smrg     237,   181,   416,   182,   309,   295,   286,   183,   312,   347,
975b8e80941Smrg     184,   232,   185,   284,   186,   250,   187,   409,   425,   188,
976b8e80941Smrg     304,   305,   349,   247,   298,   339,   341,   337,   189,   124,
977b8e80941Smrg     368,   369,   430,   125,   370,   432,   126,   280,   282,   371,
978b8e80941Smrg     127,   142,   128,   129,   144,    76,    49,    59,    50,    54,
979b8e80941Smrg      82,    51,    64,    96,   149,   213,   238,   224,   151,   328,
980b8e80941Smrg     252,   215,   373,   307,    52,    12
981848b8605Smrg};
982848b8605Smrg
983b8e80941Smrg  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
984b8e80941Smrg     positive, shift that token.  If negative, reduce the rule whose
985b8e80941Smrg     number is the opposite.  If YYTABLE_NINF, syntax error.  */
986b8e80941Smrgstatic const yytype_int16 yytable[] =
987848b8605Smrg{
988b8e80941Smrg     145,   139,   143,   198,   240,   152,   156,   111,   112,   159,
989b8e80941Smrg     225,   405,   155,   146,   157,   158,   154,   394,   154,   190,
990b8e80941Smrg     261,   154,   113,   113,   253,   147,   358,   191,   248,   289,
991b8e80941Smrg       5,   145,    60,     7,   230,   290,   114,   291,   289,   205,
992b8e80941Smrg     192,   433,   257,   193,   290,   431,   114,   115,   301,   302,
993b8e80941Smrg     194,   310,   204,   234,   362,   235,   442,   115,   447,   446,
994b8e80941Smrg     160,   231,   445,   399,   195,   363,    61,   236,   161,   448,
995b8e80941Smrg     311,    53,   249,   292,   428,   293,   219,    55,   417,    56,
996b8e80941Smrg     116,   116,    70,   117,   293,    73,    74,   196,   118,   303,
997b8e80941Smrg     443,   162,   167,   300,   168,   148,    70,    57,   118,    58,
998b8e80941Smrg     169,    10,    11,    73,    74,   163,   118,   170,   171,   172,
999b8e80941Smrg     211,   173,    81,   174,   165,    90,    91,   212,   273,   235,
1000b8e80941Smrg       1,     2,   175,    92,   272,   407,   166,   289,   389,   278,
1001b8e80941Smrg     154,   236,   199,   290,   222,   200,   201,   408,   136,   176,
1002b8e80941Smrg     177,   223,   390,   259,   318,    93,    94,   352,   241,   411,
1003b8e80941Smrg     260,   242,   243,    86,   353,   244,   412,    87,   418,    79,
1004b8e80941Smrg      95,    80,   391,   245,    83,   419,   395,    98,    99,   100,
1005b8e80941Smrg     101,    84,   145,   293,   392,   325,    10,    11,    85,   324,
1006b8e80941Smrg      97,   246,    13,    14,    15,   103,    16,    17,    18,    19,
1007b8e80941Smrg      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
1008b8e80941Smrg     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
1009b8e80941Smrg     384,   385,    65,    66,    67,    68,    69,    73,    74,    77,
1010b8e80941Smrg      78,   343,   344,   345,   346,   208,   209,   104,   105,   354,
1011b8e80941Smrg     355,   106,   107,   108,   109,   130,   131,   400,   387,   145,
1012b8e80941Smrg     367,   143,   132,    60,   133,   150,   -62,   203,   206,   207,
1013b8e80941Smrg     210,   214,   226,   229,   216,   217,   220,   221,   254,   274,
1014b8e80941Smrg     227,   228,   233,   239,   251,   145,   256,   258,   266,   406,
1015b8e80941Smrg     324,   267,   268,   276,   270,   271,   279,   281,   283,   285,
1016b8e80941Smrg     287,   296,   297,   299,   306,   313,   308,   314,   316,   319,
1017b8e80941Smrg     320,   327,   329,   330,   326,   336,   331,   338,   332,   340,
1018b8e80941Smrg     348,   357,   372,   427,   333,   334,   335,   342,   350,   351,
1019b8e80941Smrg     396,   361,   401,   403,   397,   388,   398,   399,   413,   414,
1020b8e80941Smrg     420,   438,   421,   436,   145,   367,   143,   422,   423,   424,
1021b8e80941Smrg     434,   145,   435,   324,   437,   439,   441,   429,   265,   440,
1022b8e80941Smrg     444,   426,   449,   134,   288,   410,   360,   140,     0,   324,
1023b8e80941Smrg      89,   255,   135,   141
1024848b8605Smrg};
1025848b8605Smrg
1026b8e80941Smrgstatic const yytype_int16 yycheck[] =
1027848b8605Smrg{
1028b8e80941Smrg      87,    87,    87,   118,   173,    97,   105,    23,    24,   108,
1029b8e80941Smrg     163,   357,   104,    27,   106,   107,   103,   334,   105,    29,
1030b8e80941Smrg      23,   108,    38,    38,   177,    39,    23,    37,    26,    25,
1031b8e80941Smrg       0,   118,    65,     8,    29,    31,    62,    33,    25,   131,
1032b8e80941Smrg      50,   423,   195,    53,    31,   422,    62,    73,    41,    42,
1033b8e80941Smrg      60,    35,   130,    25,    62,    27,   434,    73,   105,   441,
1034b8e80941Smrg      29,    56,   439,   110,    74,    73,    99,    39,    37,   447,
1035b8e80941Smrg      54,   107,    70,    69,   420,    71,   154,    98,   395,    98,
1036b8e80941Smrg      96,    96,    99,    99,    71,   111,   112,    97,   114,    82,
1037b8e80941Smrg     436,    60,    28,   246,    30,   109,    99,    98,   114,    98,
1038b8e80941Smrg      36,    98,    99,   111,   112,    74,   114,    43,    44,    45,
1039b8e80941Smrg      61,    47,    98,    49,    34,    29,    30,    68,   217,    27,
1040b8e80941Smrg       3,     4,    58,    37,   216,    34,    46,    25,    26,   221,
1041b8e80941Smrg     217,    39,   100,    31,    61,   103,   104,    46,    23,    75,
1042b8e80941Smrg      76,    68,    40,   108,   259,    59,    60,   108,    48,   108,
1043b8e80941Smrg     115,    51,    52,   109,   115,    55,   115,   113,   108,   107,
1044b8e80941Smrg      74,   107,    60,    63,   113,   115,   335,   100,   101,   102,
1045b8e80941Smrg     103,   113,   259,    71,    72,   267,    98,    99,   113,   266,
1046b8e80941Smrg     108,    81,     5,     6,     7,   108,     9,    10,    11,    12,
1047b8e80941Smrg      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
1048b8e80941Smrg      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
1049b8e80941Smrg      94,    95,    21,    22,    23,    24,    25,   111,   112,    28,
1050b8e80941Smrg      29,    77,    78,    79,    80,    23,    24,   108,   108,   111,
1051b8e80941Smrg     112,   108,   108,   108,   103,   108,   108,   352,   330,   326,
1052b8e80941Smrg     326,   326,   108,    65,    99,   109,   109,   109,    98,   110,
1053b8e80941Smrg      23,    23,   109,    64,   108,   108,   108,   108,    66,   103,
1054b8e80941Smrg     109,   109,   109,   109,   109,   352,   109,   109,   108,   361,
1055b8e80941Smrg     357,   108,   113,    83,   110,   110,    23,    23,    23,    23,
1056b8e80941Smrg      67,   109,   109,   109,    23,   109,    29,    23,    23,   110,
1057b8e80941Smrg     103,   109,   108,   108,   114,    23,   110,    23,   110,    23,
1058b8e80941Smrg      23,   108,    23,   418,   110,   110,   110,   110,   110,   110,
1059b8e80941Smrg     110,   108,    23,    23,   110,    57,   110,   110,   110,    32,
1060b8e80941Smrg     108,   110,   108,   108,   411,   411,   411,   109,   109,    66,
1061b8e80941Smrg     109,   418,   115,   420,   108,   105,   105,   421,   203,   110,
1062b8e80941Smrg     437,   411,   110,    84,   239,   363,   324,    87,    -1,   436,
1063b8e80941Smrg      59,   190,    85,    87
1064848b8605Smrg};
1065848b8605Smrg
1066b8e80941Smrg  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1067b8e80941Smrg     symbol of state STATE-NUM.  */
1068b8e80941Smrgstatic const yytype_uint8 yystos[] =
1069848b8605Smrg{
1070b8e80941Smrg       0,     3,     4,   117,   118,     0,   119,     8,   120,   121,
1071b8e80941Smrg      98,    99,   251,     5,     6,     7,     9,    10,    11,    12,
1072b8e80941Smrg      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
1073b8e80941Smrg     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
1074b8e80941Smrg     132,   133,   134,   137,   161,   162,   168,   169,   170,   232,
1075b8e80941Smrg     234,   237,   250,   107,   235,    98,    98,    98,    98,   233,
1076b8e80941Smrg      65,    99,   141,   147,   238,   141,   141,   141,   141,   141,
1077b8e80941Smrg      99,   142,   155,   111,   112,   140,   231,   141,   141,   107,
1078b8e80941Smrg     107,    98,   236,   113,   113,   113,   109,   113,   172,   236,
1079b8e80941Smrg      29,    30,    37,    59,    60,    74,   239,   108,   100,   101,
1080b8e80941Smrg     102,   103,   160,   108,   108,   108,   108,   108,   108,   103,
1081b8e80941Smrg     157,    23,    24,    38,    62,    73,    96,    99,   114,   146,
1082b8e80941Smrg     148,   163,   176,   179,   215,   219,   222,   226,   228,   229,
1083b8e80941Smrg     108,   108,   108,    99,   163,   238,    23,   171,   175,   179,
1084b8e80941Smrg     215,   225,   227,   229,   230,   231,    27,    39,   109,   240,
1085b8e80941Smrg     109,   244,   140,   138,   231,   140,   138,   140,   140,   138,
1086b8e80941Smrg      29,    37,    60,    74,   167,    34,    46,    28,    30,    36,
1087b8e80941Smrg      43,    44,    45,    47,    49,    58,    75,    76,   180,   182,
1088b8e80941Smrg     185,   187,   189,   193,   196,   198,   200,   202,   205,   214,
1089b8e80941Smrg      29,    37,    50,    53,    60,    74,    97,   164,   230,   100,
1090b8e80941Smrg     103,   104,   159,   109,   146,   140,    98,   110,    23,    24,
1091b8e80941Smrg      23,    61,    68,   241,    23,   247,   108,   108,   139,   146,
1092b8e80941Smrg     108,   108,    61,    68,   243,   244,   109,   109,   109,    64,
1093b8e80941Smrg      29,    56,   197,   109,    25,    27,    39,   186,   242,   109,
1094b8e80941Smrg     242,    48,    51,    52,    55,    63,    81,   209,    26,    70,
1095b8e80941Smrg     201,   109,   246,   244,    66,   243,   109,   244,   109,   108,
1096b8e80941Smrg     115,    23,   149,   150,   151,   155,   108,   108,   113,   173,
1097b8e80941Smrg     110,   110,   140,   138,   103,   158,    83,   135,   140,    23,
1098b8e80941Smrg     223,    23,   224,    23,   199,    23,   192,    67,   192,    25,
1099b8e80941Smrg      31,    33,    69,    71,   181,   191,   109,   109,   210,   109,
1100b8e80941Smrg     244,    41,    42,    82,   206,   207,    23,   249,    29,   190,
1101b8e80941Smrg      35,    54,   194,   109,    23,   166,    23,   165,   230,   110,
1102b8e80941Smrg     103,   156,   143,   144,   231,   140,   114,   109,   245,   108,
1103b8e80941Smrg     108,   110,   110,   110,   110,   110,    23,   213,    23,   211,
1104b8e80941Smrg      23,   212,   110,    77,    78,    79,    80,   195,    23,   208,
1105b8e80941Smrg     110,   110,   108,   115,   111,   112,   152,   108,    23,   145,
1106b8e80941Smrg     251,   108,    62,    73,   174,   177,   178,   179,   216,   217,
1107b8e80941Smrg     220,   225,    23,   248,    84,    85,    86,    87,    88,    89,
1108b8e80941Smrg      90,    91,    92,    93,    94,    95,   136,   140,    57,    26,
1109b8e80941Smrg      40,    60,    72,   183,   191,   242,   110,   110,   110,   110,
1110b8e80941Smrg     230,    23,   153,    23,   154,   144,   140,    34,    46,   203,
1111b8e80941Smrg     205,   108,   115,   110,    32,   184,   188,   191,   108,   115,
1112b8e80941Smrg     108,   108,   109,   109,    66,   204,   177,   230,   144,   135,
1113b8e80941Smrg     218,   223,   221,   224,   109,   115,   108,   108,   110,   105,
1114b8e80941Smrg     110,   105,   208,   144,   136,   223,   224,   105,   208,   110
1115848b8605Smrg};
1116848b8605Smrg
1117b8e80941Smrg  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1118b8e80941Smrgstatic const yytype_uint8 yyr1[] =
1119848b8605Smrg{
1120b8e80941Smrg       0,   116,   117,   118,   118,   119,   119,   120,   121,   121,
1121b8e80941Smrg     122,   122,   123,   123,   124,   124,   124,   124,   124,   124,
1122b8e80941Smrg     124,   125,   125,   125,   126,   127,   128,   129,   130,   131,
1123b8e80941Smrg     132,   133,   134,   135,   136,   136,   136,   136,   136,   136,
1124b8e80941Smrg     136,   136,   136,   136,   136,   136,   137,   138,   139,   140,
1125b8e80941Smrg     141,   142,   143,   144,   145,   145,   146,   146,   146,   146,
1126b8e80941Smrg     147,   147,   148,   149,   149,   150,   151,   152,   152,   152,
1127b8e80941Smrg     153,   154,   155,   156,   157,   158,   159,   159,   159,   159,
1128b8e80941Smrg     160,   160,   160,   160,   160,   161,   161,   161,   161,   161,
1129b8e80941Smrg     161,   162,   163,   163,   164,   164,   164,   164,   164,   164,
1130b8e80941Smrg     164,   165,   166,   167,   167,   167,   167,   168,   168,   169,
1131b8e80941Smrg     170,   171,   171,   172,   173,   174,   174,   175,   175,   175,
1132b8e80941Smrg     176,   176,   176,   177,   177,   177,   178,   178,   179,   179,
1133b8e80941Smrg     179,   179,   179,   179,   179,   179,   179,   179,   179,   180,
1134b8e80941Smrg     181,   181,   181,   182,   183,   183,   183,   183,   183,   184,
1135b8e80941Smrg     185,   186,   186,   187,   188,   189,   190,   191,   191,   191,
1136b8e80941Smrg     192,   193,   194,   194,   195,   195,   195,   195,   196,   197,
1137b8e80941Smrg     197,   198,   199,   200,   201,   201,   202,   203,   204,   204,
1138b8e80941Smrg     205,   206,   206,   207,   207,   207,   208,   209,   209,   209,
1139b8e80941Smrg     209,   209,   209,   210,   210,   211,   212,   213,   214,   215,
1140b8e80941Smrg     215,   216,   216,   217,   218,   218,   219,   220,   221,   221,
1141b8e80941Smrg     222,   223,   224,   225,   225,   226,   226,   227,   228,   228,
1142b8e80941Smrg     229,   229,   229,   229,   230,   230,   231,   231,   231,   233,
1143b8e80941Smrg     232,   235,   234,   236,   236,   237,   238,   238,   238,   238,
1144b8e80941Smrg     238,   238,   239,   240,   240,   240,   240,   241,   241,   241,
1145b8e80941Smrg     242,   242,   242,   243,   243,   243,   244,   244,   245,   245,
1146b8e80941Smrg     246,   246,   247,   248,   249,   250,   251,   251
1147848b8605Smrg};
1148848b8605Smrg
1149b8e80941Smrg  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
1150b8e80941Smrgstatic const yytype_uint8 yyr2[] =
1151848b8605Smrg{
1152b8e80941Smrg       0,     2,     4,     1,     1,     2,     0,     3,     2,     0,
1153b8e80941Smrg       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
1154b8e80941Smrg       1,     1,     1,     1,     4,     4,     4,     6,     6,     8,
1155b8e80941Smrg       8,     2,    12,     2,     1,     1,     1,     1,     1,     1,
1156b8e80941Smrg       1,     1,     1,     1,     1,     1,     6,     2,     2,     3,
1157b8e80941Smrg       2,     2,     7,     2,     1,     1,     1,     1,     4,     1,
1158b8e80941Smrg       1,     1,     1,     1,     1,     1,     3,     0,     2,     2,
1159b8e80941Smrg       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
1160b8e80941Smrg       1,     1,     1,     1,     0,     1,     1,     1,     1,     1,
1161b8e80941Smrg       1,     4,     2,     2,     1,     1,     2,     1,     2,     4,
1162b8e80941Smrg       4,     1,     1,     1,     2,     1,     2,     1,     1,     3,
1163b8e80941Smrg       6,     0,     1,     2,     4,     1,     3,     1,     1,     1,
1164b8e80941Smrg       1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
1165b8e80941Smrg       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
1166b8e80941Smrg       1,     1,     1,     5,     1,     1,     1,     2,     1,     1,
1167b8e80941Smrg       2,     1,     2,     6,     1,     3,     1,     1,     1,     1,
1168b8e80941Smrg       1,     4,     1,     1,     1,     1,     1,     1,     2,     1,
1169b8e80941Smrg       1,     5,     1,     2,     1,     1,     5,     2,     0,     6,
1170b8e80941Smrg       3,     0,     1,     1,     1,     1,     1,     2,     1,     1,
1171b8e80941Smrg       2,     4,     4,     0,     3,     1,     1,     1,     2,     1,
1172b8e80941Smrg       1,     1,     1,     5,     1,     3,     5,     5,     1,     3,
1173b8e80941Smrg       5,     1,     1,     1,     1,     1,     1,     1,     1,     1,
1174b8e80941Smrg       3,     5,     7,     9,     2,     2,     1,     1,     0,     0,
1175b8e80941Smrg       3,     0,     3,     3,     1,     4,     2,     2,     2,     2,
1176b8e80941Smrg       3,     2,     3,     0,     3,     1,     1,     0,     1,     1,
1177b8e80941Smrg       0,     1,     1,     0,     1,     1,     0,     3,     0,     3,
1178b8e80941Smrg       0,     3,     1,     1,     1,     4,     1,     1
1179848b8605Smrg};
1180848b8605Smrg
1181b8e80941Smrg
1182b8e80941Smrg#define yyerrok         (yyerrstatus = 0)
1183b8e80941Smrg#define yyclearin       (yychar = YYEMPTY)
1184b8e80941Smrg#define YYEMPTY         (-2)
1185b8e80941Smrg#define YYEOF           0
1186b8e80941Smrg
1187b8e80941Smrg#define YYACCEPT        goto yyacceptlab
1188b8e80941Smrg#define YYABORT         goto yyabortlab
1189b8e80941Smrg#define YYERROR         goto yyerrorlab
1190b8e80941Smrg
1191848b8605Smrg
1192848b8605Smrg#define YYRECOVERING()  (!!yyerrstatus)
1193848b8605Smrg
1194848b8605Smrg#define YYBACKUP(Token, Value)                                  \
1195848b8605Smrgdo                                                              \
1196848b8605Smrg  if (yychar == YYEMPTY)                                        \
1197848b8605Smrg    {                                                           \
1198848b8605Smrg      yychar = (Token);                                         \
1199848b8605Smrg      yylval = (Value);                                         \
1200848b8605Smrg      YYPOPSTACK (yylen);                                       \
1201848b8605Smrg      yystate = *yyssp;                                         \
1202848b8605Smrg      goto yybackup;                                            \
1203848b8605Smrg    }                                                           \
1204848b8605Smrg  else                                                          \
1205848b8605Smrg    {                                                           \
1206848b8605Smrg      yyerror (&yylloc, state, YY_("syntax error: cannot back up")); \
1207b8e80941Smrg      YYERROR;                                                  \
1208b8e80941Smrg    }                                                           \
1209b8e80941Smrgwhile (0)
1210848b8605Smrg
1211b8e80941Smrg/* Error token number */
1212b8e80941Smrg#define YYTERROR        1
1213b8e80941Smrg#define YYERRCODE       256
1214848b8605Smrg
1215848b8605Smrg
1216848b8605Smrg/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
1217848b8605Smrg   If N is 0, then set CURRENT to the empty location which ends
1218848b8605Smrg   the previous symbol: RHS[0] (always defined).  */
1219848b8605Smrg
1220848b8605Smrg#ifndef YYLLOC_DEFAULT
1221848b8605Smrg# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
1222848b8605Smrg    do                                                                  \
1223b8e80941Smrg      if (N)                                                            \
1224848b8605Smrg        {                                                               \
1225848b8605Smrg          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
1226848b8605Smrg          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
1227848b8605Smrg          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
1228848b8605Smrg          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
1229848b8605Smrg        }                                                               \
1230848b8605Smrg      else                                                              \
1231848b8605Smrg        {                                                               \
1232848b8605Smrg          (Current).first_line   = (Current).last_line   =              \
1233848b8605Smrg            YYRHSLOC (Rhs, 0).last_line;                                \
1234848b8605Smrg          (Current).first_column = (Current).last_column =              \
1235848b8605Smrg            YYRHSLOC (Rhs, 0).last_column;                              \
1236848b8605Smrg        }                                                               \
1237b8e80941Smrg    while (0)
1238848b8605Smrg#endif
1239848b8605Smrg
1240848b8605Smrg#define YYRHSLOC(Rhs, K) ((Rhs)[K])
1241848b8605Smrg
1242848b8605Smrg
1243b8e80941Smrg/* Enable debugging if requested.  */
1244b8e80941Smrg#if YYDEBUG
1245b8e80941Smrg
1246b8e80941Smrg# ifndef YYFPRINTF
1247b8e80941Smrg#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1248b8e80941Smrg#  define YYFPRINTF fprintf
1249b8e80941Smrg# endif
1250b8e80941Smrg
1251b8e80941Smrg# define YYDPRINTF(Args)                        \
1252b8e80941Smrgdo {                                            \
1253b8e80941Smrg  if (yydebug)                                  \
1254b8e80941Smrg    YYFPRINTF Args;                             \
1255b8e80941Smrg} while (0)
1256b8e80941Smrg
1257848b8605Smrg
1258848b8605Smrg/* YY_LOCATION_PRINT -- Print the location on the stream.
1259848b8605Smrg   This macro was not mandated originally: define only if we know
1260848b8605Smrg   we won't break user code: when these are the locations we know.  */
1261848b8605Smrg
1262848b8605Smrg#ifndef YY_LOCATION_PRINT
1263848b8605Smrg# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1264b8e80941Smrg
1265b8e80941Smrg/* Print *YYLOCP on YYO.  Private, do not rely on its existence. */
1266b8e80941Smrg
1267b8e80941SmrgYY_ATTRIBUTE_UNUSED
1268b8e80941Smrgstatic int
1269b8e80941Smrgyy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
1270b8e80941Smrg{
1271b8e80941Smrg  int res = 0;
1272b8e80941Smrg  int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
1273b8e80941Smrg  if (0 <= yylocp->first_line)
1274b8e80941Smrg    {
1275b8e80941Smrg      res += YYFPRINTF (yyo, "%d", yylocp->first_line);
1276b8e80941Smrg      if (0 <= yylocp->first_column)
1277b8e80941Smrg        res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
1278b8e80941Smrg    }
1279b8e80941Smrg  if (0 <= yylocp->last_line)
1280b8e80941Smrg    {
1281b8e80941Smrg      if (yylocp->first_line < yylocp->last_line)
1282b8e80941Smrg        {
1283b8e80941Smrg          res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
1284b8e80941Smrg          if (0 <= end_col)
1285b8e80941Smrg            res += YYFPRINTF (yyo, ".%d", end_col);
1286b8e80941Smrg        }
1287b8e80941Smrg      else if (0 <= end_col && yylocp->first_column < end_col)
1288b8e80941Smrg        res += YYFPRINTF (yyo, "-%d", end_col);
1289b8e80941Smrg    }
1290b8e80941Smrg  return res;
1291b8e80941Smrg }
1292b8e80941Smrg
1293b8e80941Smrg#  define YY_LOCATION_PRINT(File, Loc)          \
1294b8e80941Smrg  yy_location_print_ (File, &(Loc))
1295b8e80941Smrg
1296848b8605Smrg# else
1297848b8605Smrg#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1298848b8605Smrg# endif
1299848b8605Smrg#endif
1300848b8605Smrg
1301848b8605Smrg
1302b8e80941Smrg# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
1303b8e80941Smrgdo {                                                                      \
1304b8e80941Smrg  if (yydebug)                                                            \
1305b8e80941Smrg    {                                                                     \
1306b8e80941Smrg      YYFPRINTF (stderr, "%s ", Title);                                   \
1307b8e80941Smrg      yy_symbol_print (stderr,                                            \
1308b8e80941Smrg                  Type, Value, Location, state); \
1309b8e80941Smrg      YYFPRINTF (stderr, "\n");                                           \
1310b8e80941Smrg    }                                                                     \
1311b8e80941Smrg} while (0)
1312848b8605Smrg
1313848b8605Smrg
1314b8e80941Smrg/*-----------------------------------.
1315b8e80941Smrg| Print this symbol's value on YYO.  |
1316b8e80941Smrg`-----------------------------------*/
1317848b8605Smrg
1318848b8605Smrgstatic void
1319b8e80941Smrgyy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1320848b8605Smrg{
1321b8e80941Smrg  FILE *yyoutput = yyo;
1322b8e80941Smrg  YYUSE (yyoutput);
1323848b8605Smrg  YYUSE (yylocationp);
1324848b8605Smrg  YYUSE (state);
1325b8e80941Smrg  if (!yyvaluep)
1326b8e80941Smrg    return;
1327848b8605Smrg# ifdef YYPRINT
1328848b8605Smrg  if (yytype < YYNTOKENS)
1329b8e80941Smrg    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
1330848b8605Smrg# endif
1331b8e80941Smrg  YYUSE (yytype);
1332848b8605Smrg}
1333848b8605Smrg
1334848b8605Smrg
1335b8e80941Smrg/*---------------------------.
1336b8e80941Smrg| Print this symbol on YYO.  |
1337b8e80941Smrg`---------------------------*/
1338848b8605Smrg
1339848b8605Smrgstatic void
1340b8e80941Smrgyy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct asm_parser_state *state)
1341848b8605Smrg{
1342b8e80941Smrg  YYFPRINTF (yyo, "%s %s (",
1343b8e80941Smrg             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
1344848b8605Smrg
1345b8e80941Smrg  YY_LOCATION_PRINT (yyo, *yylocationp);
1346b8e80941Smrg  YYFPRINTF (yyo, ": ");
1347b8e80941Smrg  yy_symbol_value_print (yyo, yytype, yyvaluep, yylocationp, state);
1348b8e80941Smrg  YYFPRINTF (yyo, ")");
1349848b8605Smrg}
1350848b8605Smrg
1351848b8605Smrg/*------------------------------------------------------------------.
1352848b8605Smrg| yy_stack_print -- Print the state stack from its BOTTOM up to its |
1353848b8605Smrg| TOP (included).                                                   |
1354848b8605Smrg`------------------------------------------------------------------*/
1355848b8605Smrg
1356848b8605Smrgstatic void
1357848b8605Smrgyy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1358848b8605Smrg{
1359848b8605Smrg  YYFPRINTF (stderr, "Stack now");
1360848b8605Smrg  for (; yybottom <= yytop; yybottom++)
1361848b8605Smrg    {
1362848b8605Smrg      int yybot = *yybottom;
1363848b8605Smrg      YYFPRINTF (stderr, " %d", yybot);
1364848b8605Smrg    }
1365848b8605Smrg  YYFPRINTF (stderr, "\n");
1366848b8605Smrg}
1367848b8605Smrg
1368b8e80941Smrg# define YY_STACK_PRINT(Bottom, Top)                            \
1369b8e80941Smrgdo {                                                            \
1370b8e80941Smrg  if (yydebug)                                                  \
1371b8e80941Smrg    yy_stack_print ((Bottom), (Top));                           \
1372b8e80941Smrg} while (0)
1373848b8605Smrg
1374848b8605Smrg
1375848b8605Smrg/*------------------------------------------------.
1376848b8605Smrg| Report that the YYRULE is going to be reduced.  |
1377848b8605Smrg`------------------------------------------------*/
1378848b8605Smrg
1379848b8605Smrgstatic void
1380b8e80941Smrgyy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct asm_parser_state *state)
1381848b8605Smrg{
1382b8e80941Smrg  unsigned long yylno = yyrline[yyrule];
1383848b8605Smrg  int yynrhs = yyr2[yyrule];
1384848b8605Smrg  int yyi;
1385848b8605Smrg  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1386b8e80941Smrg             yyrule - 1, yylno);
1387848b8605Smrg  /* The symbols being reduced.  */
1388848b8605Smrg  for (yyi = 0; yyi < yynrhs; yyi++)
1389848b8605Smrg    {
1390848b8605Smrg      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1391b8e80941Smrg      yy_symbol_print (stderr,
1392b8e80941Smrg                       yystos[yyssp[yyi + 1 - yynrhs]],
1393b8e80941Smrg                       &(yyvsp[(yyi + 1) - (yynrhs)])
1394b8e80941Smrg                       , &(yylsp[(yyi + 1) - (yynrhs)])                       , state);
1395848b8605Smrg      YYFPRINTF (stderr, "\n");
1396848b8605Smrg    }
1397848b8605Smrg}
1398848b8605Smrg
1399b8e80941Smrg# define YY_REDUCE_PRINT(Rule)          \
1400b8e80941Smrgdo {                                    \
1401b8e80941Smrg  if (yydebug)                          \
1402b8e80941Smrg    yy_reduce_print (yyssp, yyvsp, yylsp, Rule, state); \
1403b8e80941Smrg} while (0)
1404848b8605Smrg
1405848b8605Smrg/* Nonzero means print parse trace.  It is left uninitialized so that
1406848b8605Smrg   multiple parsers can coexist.  */
1407848b8605Smrgint yydebug;
1408848b8605Smrg#else /* !YYDEBUG */
1409848b8605Smrg# define YYDPRINTF(Args)
1410848b8605Smrg# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1411848b8605Smrg# define YY_STACK_PRINT(Bottom, Top)
1412848b8605Smrg# define YY_REDUCE_PRINT(Rule)
1413848b8605Smrg#endif /* !YYDEBUG */
1414848b8605Smrg
1415848b8605Smrg
1416848b8605Smrg/* YYINITDEPTH -- initial size of the parser's stacks.  */
1417b8e80941Smrg#ifndef YYINITDEPTH
1418848b8605Smrg# define YYINITDEPTH 200
1419848b8605Smrg#endif
1420848b8605Smrg
1421848b8605Smrg/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1422848b8605Smrg   if the built-in stack extension method is used).
1423848b8605Smrg
1424848b8605Smrg   Do not make this value too large; the results are undefined if
1425848b8605Smrg   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1426848b8605Smrg   evaluated with infinite-precision integer arithmetic.  */
1427848b8605Smrg
1428848b8605Smrg#ifndef YYMAXDEPTH
1429848b8605Smrg# define YYMAXDEPTH 10000
1430848b8605Smrg#endif
1431848b8605Smrg
1432848b8605Smrg
1433848b8605Smrg#if YYERROR_VERBOSE
1434848b8605Smrg
1435848b8605Smrg# ifndef yystrlen
1436848b8605Smrg#  if defined __GLIBC__ && defined _STRING_H
1437848b8605Smrg#   define yystrlen strlen
1438848b8605Smrg#  else
1439848b8605Smrg/* Return the length of YYSTR.  */
1440848b8605Smrgstatic YYSIZE_T
1441848b8605Smrgyystrlen (const char *yystr)
1442848b8605Smrg{
1443848b8605Smrg  YYSIZE_T yylen;
1444848b8605Smrg  for (yylen = 0; yystr[yylen]; yylen++)
1445848b8605Smrg    continue;
1446848b8605Smrg  return yylen;
1447848b8605Smrg}
1448848b8605Smrg#  endif
1449848b8605Smrg# endif
1450848b8605Smrg
1451848b8605Smrg# ifndef yystpcpy
1452848b8605Smrg#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1453848b8605Smrg#   define yystpcpy stpcpy
1454848b8605Smrg#  else
1455848b8605Smrg/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1456848b8605Smrg   YYDEST.  */
1457848b8605Smrgstatic char *
1458848b8605Smrgyystpcpy (char *yydest, const char *yysrc)
1459848b8605Smrg{
1460848b8605Smrg  char *yyd = yydest;
1461848b8605Smrg  const char *yys = yysrc;
1462848b8605Smrg
1463848b8605Smrg  while ((*yyd++ = *yys++) != '\0')
1464848b8605Smrg    continue;
1465848b8605Smrg
1466848b8605Smrg  return yyd - 1;
1467848b8605Smrg}
1468848b8605Smrg#  endif
1469848b8605Smrg# endif
1470848b8605Smrg
1471848b8605Smrg# ifndef yytnamerr
1472848b8605Smrg/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1473848b8605Smrg   quotes and backslashes, so that it's suitable for yyerror.  The
1474848b8605Smrg   heuristic is that double-quoting is unnecessary unless the string
1475848b8605Smrg   contains an apostrophe, a comma, or backslash (other than
1476848b8605Smrg   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1477848b8605Smrg   null, do not copy; instead, return the length of what the result
1478848b8605Smrg   would have been.  */
1479848b8605Smrgstatic YYSIZE_T
1480848b8605Smrgyytnamerr (char *yyres, const char *yystr)
1481848b8605Smrg{
1482848b8605Smrg  if (*yystr == '"')
1483848b8605Smrg    {
1484848b8605Smrg      YYSIZE_T yyn = 0;
1485848b8605Smrg      char const *yyp = yystr;
1486848b8605Smrg
1487848b8605Smrg      for (;;)
1488b8e80941Smrg        switch (*++yyp)
1489b8e80941Smrg          {
1490b8e80941Smrg          case '\'':
1491b8e80941Smrg          case ',':
1492b8e80941Smrg            goto do_not_strip_quotes;
1493b8e80941Smrg
1494b8e80941Smrg          case '\\':
1495b8e80941Smrg            if (*++yyp != '\\')
1496b8e80941Smrg              goto do_not_strip_quotes;
1497b8e80941Smrg            /* Fall through.  */
1498b8e80941Smrg          default:
1499b8e80941Smrg            if (yyres)
1500b8e80941Smrg              yyres[yyn] = *yyp;
1501b8e80941Smrg            yyn++;
1502b8e80941Smrg            break;
1503b8e80941Smrg
1504b8e80941Smrg          case '"':
1505b8e80941Smrg            if (yyres)
1506b8e80941Smrg              yyres[yyn] = '\0';
1507b8e80941Smrg            return yyn;
1508b8e80941Smrg          }
1509848b8605Smrg    do_not_strip_quotes: ;
1510848b8605Smrg    }
1511848b8605Smrg
1512848b8605Smrg  if (! yyres)
1513848b8605Smrg    return yystrlen (yystr);
1514848b8605Smrg
1515b8e80941Smrg  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
1516848b8605Smrg}
1517848b8605Smrg# endif
1518848b8605Smrg
1519848b8605Smrg/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1520848b8605Smrg   about the unexpected token YYTOKEN for the state stack whose top is
1521848b8605Smrg   YYSSP.
1522848b8605Smrg
1523848b8605Smrg   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1524848b8605Smrg   not large enough to hold the message.  In that case, also set
1525848b8605Smrg   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1526848b8605Smrg   required number of bytes is too large to store.  */
1527848b8605Smrgstatic int
1528848b8605Smrgyysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1529848b8605Smrg                yytype_int16 *yyssp, int yytoken)
1530848b8605Smrg{
1531b8e80941Smrg  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1532848b8605Smrg  YYSIZE_T yysize = yysize0;
1533848b8605Smrg  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1534848b8605Smrg  /* Internationalized format string. */
1535b8e80941Smrg  const char *yyformat = YY_NULLPTR;
1536848b8605Smrg  /* Arguments of yyformat. */
1537848b8605Smrg  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1538848b8605Smrg  /* Number of reported tokens (one for the "unexpected", one per
1539848b8605Smrg     "expected"). */
1540848b8605Smrg  int yycount = 0;
1541848b8605Smrg
1542848b8605Smrg  /* There are many possibilities here to consider:
1543848b8605Smrg     - If this state is a consistent state with a default action, then
1544848b8605Smrg       the only way this function was invoked is if the default action
1545848b8605Smrg       is an error action.  In that case, don't check for expected
1546848b8605Smrg       tokens because there are none.
1547848b8605Smrg     - The only way there can be no lookahead present (in yychar) is if
1548848b8605Smrg       this state is a consistent state with a default action.  Thus,
1549848b8605Smrg       detecting the absence of a lookahead is sufficient to determine
1550848b8605Smrg       that there is no unexpected or expected token to report.  In that
1551848b8605Smrg       case, just report a simple "syntax error".
1552848b8605Smrg     - Don't assume there isn't a lookahead just because this state is a
1553848b8605Smrg       consistent state with a default action.  There might have been a
1554848b8605Smrg       previous inconsistent state, consistent state with a non-default
1555848b8605Smrg       action, or user semantic action that manipulated yychar.
1556848b8605Smrg     - Of course, the expected token list depends on states to have
1557848b8605Smrg       correct lookahead information, and it depends on the parser not
1558848b8605Smrg       to perform extra reductions after fetching a lookahead from the
1559848b8605Smrg       scanner and before detecting a syntax error.  Thus, state merging
1560848b8605Smrg       (from LALR or IELR) and default reductions corrupt the expected
1561848b8605Smrg       token list.  However, the list is correct for canonical LR with
1562848b8605Smrg       one exception: it will still contain any token that will not be
1563848b8605Smrg       accepted due to an error action in a later state.
1564848b8605Smrg  */
1565848b8605Smrg  if (yytoken != YYEMPTY)
1566848b8605Smrg    {
1567848b8605Smrg      int yyn = yypact[*yyssp];
1568848b8605Smrg      yyarg[yycount++] = yytname[yytoken];
1569848b8605Smrg      if (!yypact_value_is_default (yyn))
1570848b8605Smrg        {
1571848b8605Smrg          /* Start YYX at -YYN if negative to avoid negative indexes in
1572848b8605Smrg             YYCHECK.  In other words, skip the first -YYN actions for
1573848b8605Smrg             this state because they are default actions.  */
1574848b8605Smrg          int yyxbegin = yyn < 0 ? -yyn : 0;
1575848b8605Smrg          /* Stay within bounds of both yycheck and yytname.  */
1576848b8605Smrg          int yychecklim = YYLAST - yyn + 1;
1577848b8605Smrg          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1578848b8605Smrg          int yyx;
1579848b8605Smrg
1580848b8605Smrg          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1581848b8605Smrg            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1582848b8605Smrg                && !yytable_value_is_error (yytable[yyx + yyn]))
1583848b8605Smrg              {
1584848b8605Smrg                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1585848b8605Smrg                  {
1586848b8605Smrg                    yycount = 1;
1587848b8605Smrg                    yysize = yysize0;
1588848b8605Smrg                    break;
1589848b8605Smrg                  }
1590848b8605Smrg                yyarg[yycount++] = yytname[yyx];
1591b8e80941Smrg                {
1592b8e80941Smrg                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1593b8e80941Smrg                  if (! (yysize <= yysize1
1594b8e80941Smrg                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1595b8e80941Smrg                    return 2;
1596b8e80941Smrg                  yysize = yysize1;
1597b8e80941Smrg                }
1598848b8605Smrg              }
1599848b8605Smrg        }
1600848b8605Smrg    }
1601848b8605Smrg
1602848b8605Smrg  switch (yycount)
1603848b8605Smrg    {
1604848b8605Smrg# define YYCASE_(N, S)                      \
1605848b8605Smrg      case N:                               \
1606848b8605Smrg        yyformat = S;                       \
1607848b8605Smrg      break
1608b8e80941Smrg    default: /* Avoid compiler warnings. */
1609848b8605Smrg      YYCASE_(0, YY_("syntax error"));
1610848b8605Smrg      YYCASE_(1, YY_("syntax error, unexpected %s"));
1611848b8605Smrg      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1612848b8605Smrg      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1613848b8605Smrg      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1614848b8605Smrg      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1615848b8605Smrg# undef YYCASE_
1616848b8605Smrg    }
1617848b8605Smrg
1618b8e80941Smrg  {
1619b8e80941Smrg    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1620b8e80941Smrg    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1621b8e80941Smrg      return 2;
1622b8e80941Smrg    yysize = yysize1;
1623b8e80941Smrg  }
1624848b8605Smrg
1625848b8605Smrg  if (*yymsg_alloc < yysize)
1626848b8605Smrg    {
1627848b8605Smrg      *yymsg_alloc = 2 * yysize;
1628848b8605Smrg      if (! (yysize <= *yymsg_alloc
1629848b8605Smrg             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1630848b8605Smrg        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1631848b8605Smrg      return 1;
1632848b8605Smrg    }
1633848b8605Smrg
1634848b8605Smrg  /* Avoid sprintf, as that infringes on the user's name space.
1635848b8605Smrg     Don't have undefined behavior even if the translation
1636848b8605Smrg     produced a string with the wrong number of "%s"s.  */
1637848b8605Smrg  {
1638848b8605Smrg    char *yyp = *yymsg;
1639848b8605Smrg    int yyi = 0;
1640848b8605Smrg    while ((*yyp = *yyformat) != '\0')
1641848b8605Smrg      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1642848b8605Smrg        {
1643848b8605Smrg          yyp += yytnamerr (yyp, yyarg[yyi++]);
1644848b8605Smrg          yyformat += 2;
1645848b8605Smrg        }
1646848b8605Smrg      else
1647848b8605Smrg        {
1648848b8605Smrg          yyp++;
1649848b8605Smrg          yyformat++;
1650848b8605Smrg        }
1651848b8605Smrg  }
1652848b8605Smrg  return 0;
1653848b8605Smrg}
1654848b8605Smrg#endif /* YYERROR_VERBOSE */
1655848b8605Smrg
1656848b8605Smrg/*-----------------------------------------------.
1657848b8605Smrg| Release the memory associated to this symbol.  |
1658848b8605Smrg`-----------------------------------------------*/
1659848b8605Smrg
1660848b8605Smrgstatic void
1661848b8605Smrgyydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct asm_parser_state *state)
1662848b8605Smrg{
1663848b8605Smrg  YYUSE (yyvaluep);
1664848b8605Smrg  YYUSE (yylocationp);
1665848b8605Smrg  YYUSE (state);
1666848b8605Smrg  if (!yymsg)
1667848b8605Smrg    yymsg = "Deleting";
1668848b8605Smrg  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1669848b8605Smrg
1670b8e80941Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1671b8e80941Smrg  YYUSE (yytype);
1672b8e80941Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_END
1673848b8605Smrg}
1674848b8605Smrg
1675848b8605Smrg
1676848b8605Smrg
1677848b8605Smrg
1678848b8605Smrg/*----------.
1679848b8605Smrg| yyparse.  |
1680848b8605Smrg`----------*/
1681848b8605Smrg
1682848b8605Smrgint
1683848b8605Smrgyyparse (struct asm_parser_state *state)
1684848b8605Smrg{
1685848b8605Smrg/* The lookahead symbol.  */
1686848b8605Smrgint yychar;
1687848b8605Smrg
1688848b8605Smrg
1689b8e80941Smrg/* The semantic value of the lookahead symbol.  */
1690848b8605Smrg/* Default value used for initialization, for pacifying older GCCs
1691848b8605Smrg   or non-GCC compilers.  */
1692b8e80941SmrgYY_INITIAL_VALUE (static YYSTYPE yyval_default;)
1693b8e80941SmrgYYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
1694848b8605Smrg
1695848b8605Smrg/* Location data for the lookahead symbol.  */
1696b8e80941Smrgstatic YYLTYPE yyloc_default
1697b8e80941Smrg# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1698b8e80941Smrg  = { 1, 1, 1, 1 }
1699b8e80941Smrg# endif
1700b8e80941Smrg;
1701b8e80941SmrgYYLTYPE yylloc = yyloc_default;
1702848b8605Smrg
1703848b8605Smrg    /* Number of syntax errors so far.  */
1704848b8605Smrg    int yynerrs;
1705848b8605Smrg
1706848b8605Smrg    int yystate;
1707848b8605Smrg    /* Number of tokens to shift before error messages enabled.  */
1708848b8605Smrg    int yyerrstatus;
1709848b8605Smrg
1710848b8605Smrg    /* The stacks and their tools:
1711b8e80941Smrg       'yyss': related to states.
1712b8e80941Smrg       'yyvs': related to semantic values.
1713b8e80941Smrg       'yyls': related to locations.
1714848b8605Smrg
1715848b8605Smrg       Refer to the stacks through separate pointers, to allow yyoverflow
1716848b8605Smrg       to reallocate them elsewhere.  */
1717848b8605Smrg
1718848b8605Smrg    /* The state stack.  */
1719848b8605Smrg    yytype_int16 yyssa[YYINITDEPTH];
1720848b8605Smrg    yytype_int16 *yyss;
1721848b8605Smrg    yytype_int16 *yyssp;
1722848b8605Smrg
1723848b8605Smrg    /* The semantic value stack.  */
1724848b8605Smrg    YYSTYPE yyvsa[YYINITDEPTH];
1725848b8605Smrg    YYSTYPE *yyvs;
1726848b8605Smrg    YYSTYPE *yyvsp;
1727848b8605Smrg
1728848b8605Smrg    /* The location stack.  */
1729848b8605Smrg    YYLTYPE yylsa[YYINITDEPTH];
1730848b8605Smrg    YYLTYPE *yyls;
1731848b8605Smrg    YYLTYPE *yylsp;
1732848b8605Smrg
1733848b8605Smrg    /* The locations where the error started and ended.  */
1734848b8605Smrg    YYLTYPE yyerror_range[3];
1735848b8605Smrg
1736848b8605Smrg    YYSIZE_T yystacksize;
1737848b8605Smrg
1738848b8605Smrg  int yyn;
1739848b8605Smrg  int yyresult;
1740848b8605Smrg  /* Lookahead token as an internal (translated) token number.  */
1741848b8605Smrg  int yytoken = 0;
1742848b8605Smrg  /* The variables used to return semantic value and location from the
1743848b8605Smrg     action routines.  */
1744848b8605Smrg  YYSTYPE yyval;
1745848b8605Smrg  YYLTYPE yyloc;
1746848b8605Smrg
1747848b8605Smrg#if YYERROR_VERBOSE
1748848b8605Smrg  /* Buffer for error messages, and its allocated size.  */
1749848b8605Smrg  char yymsgbuf[128];
1750848b8605Smrg  char *yymsg = yymsgbuf;
1751848b8605Smrg  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1752848b8605Smrg#endif
1753848b8605Smrg
1754848b8605Smrg#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
1755848b8605Smrg
1756848b8605Smrg  /* The number of symbols on the RHS of the reduced rule.
1757848b8605Smrg     Keep to zero when no symbol should be popped.  */
1758848b8605Smrg  int yylen = 0;
1759848b8605Smrg
1760b8e80941Smrg  yyssp = yyss = yyssa;
1761b8e80941Smrg  yyvsp = yyvs = yyvsa;
1762b8e80941Smrg  yylsp = yyls = yylsa;
1763848b8605Smrg  yystacksize = YYINITDEPTH;
1764848b8605Smrg
1765848b8605Smrg  YYDPRINTF ((stderr, "Starting parse\n"));
1766848b8605Smrg
1767848b8605Smrg  yystate = 0;
1768848b8605Smrg  yyerrstatus = 0;
1769848b8605Smrg  yynerrs = 0;
1770848b8605Smrg  yychar = YYEMPTY; /* Cause a token to be read.  */
1771b8e80941Smrg  yylsp[0] = yylloc;
1772848b8605Smrg  goto yysetstate;
1773848b8605Smrg
1774848b8605Smrg/*------------------------------------------------------------.
1775848b8605Smrg| yynewstate -- Push a new state, which is found in yystate.  |
1776848b8605Smrg`------------------------------------------------------------*/
1777848b8605Smrg yynewstate:
1778848b8605Smrg  /* In all cases, when you get here, the value and location stacks
1779848b8605Smrg     have just been pushed.  So pushing a state here evens the stacks.  */
1780848b8605Smrg  yyssp++;
1781848b8605Smrg
1782848b8605Smrg yysetstate:
1783b8e80941Smrg  *yyssp = (yytype_int16) yystate;
1784848b8605Smrg
1785848b8605Smrg  if (yyss + yystacksize - 1 <= yyssp)
1786848b8605Smrg    {
1787848b8605Smrg      /* Get the current used size of the three stacks, in elements.  */
1788b8e80941Smrg      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
1789848b8605Smrg
1790848b8605Smrg#ifdef yyoverflow
1791848b8605Smrg      {
1792b8e80941Smrg        /* Give user a chance to reallocate the stack.  Use copies of
1793b8e80941Smrg           these so that the &'s don't force the real ones into
1794b8e80941Smrg           memory.  */
1795b8e80941Smrg        YYSTYPE *yyvs1 = yyvs;
1796b8e80941Smrg        yytype_int16 *yyss1 = yyss;
1797b8e80941Smrg        YYLTYPE *yyls1 = yyls;
1798b8e80941Smrg
1799b8e80941Smrg        /* Each stack pointer address is followed by the size of the
1800b8e80941Smrg           data in use in that stack, in bytes.  This used to be a
1801b8e80941Smrg           conditional around just the two extra args, but that might
1802b8e80941Smrg           be undefined if yyoverflow is a macro.  */
1803b8e80941Smrg        yyoverflow (YY_("memory exhausted"),
1804b8e80941Smrg                    &yyss1, yysize * sizeof (*yyssp),
1805b8e80941Smrg                    &yyvs1, yysize * sizeof (*yyvsp),
1806b8e80941Smrg                    &yyls1, yysize * sizeof (*yylsp),
1807b8e80941Smrg                    &yystacksize);
1808b8e80941Smrg        yyss = yyss1;
1809b8e80941Smrg        yyvs = yyvs1;
1810b8e80941Smrg        yyls = yyls1;
1811848b8605Smrg      }
1812848b8605Smrg#else /* no yyoverflow */
1813848b8605Smrg# ifndef YYSTACK_RELOCATE
1814848b8605Smrg      goto yyexhaustedlab;
1815848b8605Smrg# else
1816848b8605Smrg      /* Extend the stack our own way.  */
1817848b8605Smrg      if (YYMAXDEPTH <= yystacksize)
1818b8e80941Smrg        goto yyexhaustedlab;
1819848b8605Smrg      yystacksize *= 2;
1820848b8605Smrg      if (YYMAXDEPTH < yystacksize)
1821b8e80941Smrg        yystacksize = YYMAXDEPTH;
1822848b8605Smrg
1823848b8605Smrg      {
1824b8e80941Smrg        yytype_int16 *yyss1 = yyss;
1825b8e80941Smrg        union yyalloc *yyptr =
1826b8e80941Smrg          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1827b8e80941Smrg        if (! yyptr)
1828b8e80941Smrg          goto yyexhaustedlab;
1829b8e80941Smrg        YYSTACK_RELOCATE (yyss_alloc, yyss);
1830b8e80941Smrg        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1831b8e80941Smrg        YYSTACK_RELOCATE (yyls_alloc, yyls);
1832848b8605Smrg#  undef YYSTACK_RELOCATE
1833b8e80941Smrg        if (yyss1 != yyssa)
1834b8e80941Smrg          YYSTACK_FREE (yyss1);
1835848b8605Smrg      }
1836848b8605Smrg# endif
1837848b8605Smrg#endif /* no yyoverflow */
1838848b8605Smrg
1839848b8605Smrg      yyssp = yyss + yysize - 1;
1840848b8605Smrg      yyvsp = yyvs + yysize - 1;
1841848b8605Smrg      yylsp = yyls + yysize - 1;
1842848b8605Smrg
1843848b8605Smrg      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1844b8e80941Smrg                  (unsigned long) yystacksize));
1845848b8605Smrg
1846848b8605Smrg      if (yyss + yystacksize - 1 <= yyssp)
1847b8e80941Smrg        YYABORT;
1848848b8605Smrg    }
1849848b8605Smrg
1850848b8605Smrg  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1851848b8605Smrg
1852848b8605Smrg  if (yystate == YYFINAL)
1853848b8605Smrg    YYACCEPT;
1854848b8605Smrg
1855848b8605Smrg  goto yybackup;
1856848b8605Smrg
1857848b8605Smrg/*-----------.
1858848b8605Smrg| yybackup.  |
1859848b8605Smrg`-----------*/
1860848b8605Smrgyybackup:
1861848b8605Smrg
1862848b8605Smrg  /* Do appropriate processing given the current state.  Read a
1863848b8605Smrg     lookahead token if we need one and don't already have one.  */
1864848b8605Smrg
1865848b8605Smrg  /* First try to decide what to do without reference to lookahead token.  */
1866848b8605Smrg  yyn = yypact[yystate];
1867848b8605Smrg  if (yypact_value_is_default (yyn))
1868848b8605Smrg    goto yydefault;
1869848b8605Smrg
1870848b8605Smrg  /* Not known => get a lookahead token if don't already have one.  */
1871848b8605Smrg
1872848b8605Smrg  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1873848b8605Smrg  if (yychar == YYEMPTY)
1874848b8605Smrg    {
1875848b8605Smrg      YYDPRINTF ((stderr, "Reading a token: "));
1876b8e80941Smrg      yychar = yylex (&yylval, &yylloc, state);
1877848b8605Smrg    }
1878848b8605Smrg
1879848b8605Smrg  if (yychar <= YYEOF)
1880848b8605Smrg    {
1881848b8605Smrg      yychar = yytoken = YYEOF;
1882848b8605Smrg      YYDPRINTF ((stderr, "Now at end of input.\n"));
1883848b8605Smrg    }
1884848b8605Smrg  else
1885848b8605Smrg    {
1886848b8605Smrg      yytoken = YYTRANSLATE (yychar);
1887848b8605Smrg      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1888848b8605Smrg    }
1889848b8605Smrg
1890848b8605Smrg  /* If the proper action on seeing token YYTOKEN is to reduce or to
1891848b8605Smrg     detect an error, take that action.  */
1892848b8605Smrg  yyn += yytoken;
1893848b8605Smrg  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1894848b8605Smrg    goto yydefault;
1895848b8605Smrg  yyn = yytable[yyn];
1896848b8605Smrg  if (yyn <= 0)
1897848b8605Smrg    {
1898848b8605Smrg      if (yytable_value_is_error (yyn))
1899848b8605Smrg        goto yyerrlab;
1900848b8605Smrg      yyn = -yyn;
1901848b8605Smrg      goto yyreduce;
1902848b8605Smrg    }
1903848b8605Smrg
1904848b8605Smrg  /* Count tokens shifted since error; after three, turn off error
1905848b8605Smrg     status.  */
1906848b8605Smrg  if (yyerrstatus)
1907848b8605Smrg    yyerrstatus--;
1908848b8605Smrg
1909848b8605Smrg  /* Shift the lookahead token.  */
1910848b8605Smrg  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1911848b8605Smrg
1912848b8605Smrg  /* Discard the shifted token.  */
1913848b8605Smrg  yychar = YYEMPTY;
1914848b8605Smrg
1915848b8605Smrg  yystate = yyn;
1916848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1917848b8605Smrg  *++yyvsp = yylval;
1918848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_END
1919848b8605Smrg  *++yylsp = yylloc;
1920848b8605Smrg  goto yynewstate;
1921848b8605Smrg
1922848b8605Smrg
1923848b8605Smrg/*-----------------------------------------------------------.
1924848b8605Smrg| yydefault -- do the default action for the current state.  |
1925848b8605Smrg`-----------------------------------------------------------*/
1926848b8605Smrgyydefault:
1927848b8605Smrg  yyn = yydefact[yystate];
1928848b8605Smrg  if (yyn == 0)
1929848b8605Smrg    goto yyerrlab;
1930848b8605Smrg  goto yyreduce;
1931848b8605Smrg
1932848b8605Smrg
1933848b8605Smrg/*-----------------------------.
1934848b8605Smrg| yyreduce -- Do a reduction.  |
1935848b8605Smrg`-----------------------------*/
1936848b8605Smrgyyreduce:
1937848b8605Smrg  /* yyn is the number of a rule to reduce with.  */
1938848b8605Smrg  yylen = yyr2[yyn];
1939848b8605Smrg
1940848b8605Smrg  /* If YYLEN is nonzero, implement the default value of the action:
1941b8e80941Smrg     '$$ = $1'.
1942848b8605Smrg
1943848b8605Smrg     Otherwise, the following line sets YYVAL to garbage.
1944848b8605Smrg     This behavior is undocumented and Bison
1945848b8605Smrg     users should not rely upon it.  Assigning to YYVAL
1946848b8605Smrg     unconditionally makes the parser a bit smaller, and it avoids a
1947848b8605Smrg     GCC warning that YYVAL may be used uninitialized.  */
1948848b8605Smrg  yyval = yyvsp[1-yylen];
1949848b8605Smrg
1950b8e80941Smrg  /* Default location. */
1951848b8605Smrg  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
1952b8e80941Smrg  yyerror_range[1] = yyloc;
1953848b8605Smrg  YY_REDUCE_PRINT (yyn);
1954848b8605Smrg  switch (yyn)
1955848b8605Smrg    {
1956848b8605Smrg        case 3:
1957b8e80941Smrg#line 290 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
1958848b8605Smrg    {
1959848b8605Smrg	   if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
1960b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid fragment program header");
1961848b8605Smrg
1962848b8605Smrg	   }
1963848b8605Smrg	   state->mode = ARB_vertex;
1964848b8605Smrg	}
1965b8e80941Smrg#line 1966 "program_parse.tab.c" /* yacc.c:1645  */
1966848b8605Smrg    break;
1967848b8605Smrg
1968848b8605Smrg  case 4:
1969b8e80941Smrg#line 298 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
1970848b8605Smrg    {
1971848b8605Smrg	   if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
1972b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid vertex program header");
1973848b8605Smrg	   }
1974848b8605Smrg	   state->mode = ARB_fragment;
1975848b8605Smrg
1976848b8605Smrg	   state->option.TexRect =
1977848b8605Smrg	      (state->ctx->Extensions.NV_texture_rectangle != GL_FALSE);
1978848b8605Smrg	}
1979b8e80941Smrg#line 1980 "program_parse.tab.c" /* yacc.c:1645  */
1980848b8605Smrg    break;
1981848b8605Smrg
1982848b8605Smrg  case 7:
1983b8e80941Smrg#line 314 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
1984848b8605Smrg    {
1985848b8605Smrg	   int valid = 0;
1986848b8605Smrg
1987848b8605Smrg	   if (state->mode == ARB_vertex) {
1988b8e80941Smrg	      valid = _mesa_ARBvp_parse_option(state, (yyvsp[-1].string));
1989848b8605Smrg	   } else if (state->mode == ARB_fragment) {
1990b8e80941Smrg	      valid = _mesa_ARBfp_parse_option(state, (yyvsp[-1].string));
1991848b8605Smrg	   }
1992848b8605Smrg
1993848b8605Smrg
1994b8e80941Smrg	   free((yyvsp[-1].string));
1995848b8605Smrg
1996848b8605Smrg	   if (!valid) {
1997848b8605Smrg	      const char *const err_str = (state->mode == ARB_vertex)
1998848b8605Smrg		 ? "invalid ARB vertex program option"
1999848b8605Smrg		 : "invalid ARB fragment program option";
2000848b8605Smrg
2001b8e80941Smrg	      yyerror(& (yylsp[-1]), state, err_str);
2002848b8605Smrg	      YYERROR;
2003848b8605Smrg	   }
2004848b8605Smrg	}
2005b8e80941Smrg#line 2006 "program_parse.tab.c" /* yacc.c:1645  */
2006848b8605Smrg    break;
2007848b8605Smrg
2008848b8605Smrg  case 10:
2009b8e80941Smrg#line 342 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2010848b8605Smrg    {
2011b8e80941Smrg	   if ((yyvsp[-1].inst) != NULL) {
2012848b8605Smrg	      if (state->inst_tail == NULL) {
2013b8e80941Smrg		 state->inst_head = (yyvsp[-1].inst);
2014848b8605Smrg	      } else {
2015b8e80941Smrg		 state->inst_tail->next = (yyvsp[-1].inst);
2016848b8605Smrg	      }
2017848b8605Smrg
2018b8e80941Smrg	      state->inst_tail = (yyvsp[-1].inst);
2019b8e80941Smrg	      (yyvsp[-1].inst)->next = NULL;
2020848b8605Smrg
2021b8e80941Smrg              state->prog->arb.NumInstructions++;
2022848b8605Smrg	   }
2023848b8605Smrg	}
2024b8e80941Smrg#line 2025 "program_parse.tab.c" /* yacc.c:1645  */
2025848b8605Smrg    break;
2026848b8605Smrg
2027848b8605Smrg  case 12:
2028b8e80941Smrg#line 360 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2029848b8605Smrg    {
2030b8e80941Smrg	   (yyval.inst) = (yyvsp[0].inst);
2031b8e80941Smrg           state->prog->arb.NumAluInstructions++;
2032848b8605Smrg	}
2033b8e80941Smrg#line 2034 "program_parse.tab.c" /* yacc.c:1645  */
2034848b8605Smrg    break;
2035848b8605Smrg
2036848b8605Smrg  case 13:
2037b8e80941Smrg#line 365 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2038848b8605Smrg    {
2039b8e80941Smrg	   (yyval.inst) = (yyvsp[0].inst);
2040b8e80941Smrg           state->prog->arb.NumTexInstructions++;
2041848b8605Smrg	}
2042b8e80941Smrg#line 2043 "program_parse.tab.c" /* yacc.c:1645  */
2043848b8605Smrg    break;
2044848b8605Smrg
2045848b8605Smrg  case 24:
2046b8e80941Smrg#line 386 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2047848b8605Smrg    {
2048b8e80941Smrg	   (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[-2].dst_reg), & (yyvsp[0].src_reg), NULL, NULL);
2049848b8605Smrg	}
2050b8e80941Smrg#line 2051 "program_parse.tab.c" /* yacc.c:1645  */
2051848b8605Smrg    break;
2052848b8605Smrg
2053848b8605Smrg  case 25:
2054b8e80941Smrg#line 392 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2055848b8605Smrg    {
2056b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-3].temp_inst), & (yyvsp[-2].dst_reg), & (yyvsp[0].src_reg), NULL, NULL);
2057848b8605Smrg	}
2058b8e80941Smrg#line 2059 "program_parse.tab.c" /* yacc.c:1645  */
2059848b8605Smrg    break;
2060848b8605Smrg
2061848b8605Smrg  case 26:
2062b8e80941Smrg#line 398 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2063848b8605Smrg    {
2064b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-3].temp_inst), & (yyvsp[-2].dst_reg), & (yyvsp[0].src_reg), NULL, NULL);
2065848b8605Smrg	}
2066b8e80941Smrg#line 2067 "program_parse.tab.c" /* yacc.c:1645  */
2067848b8605Smrg    break;
2068848b8605Smrg
2069848b8605Smrg  case 27:
2070b8e80941Smrg#line 404 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2071848b8605Smrg    {
2072b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-5].temp_inst), & (yyvsp[-4].dst_reg), & (yyvsp[-2].src_reg), & (yyvsp[0].src_reg), NULL);
2073848b8605Smrg	}
2074b8e80941Smrg#line 2075 "program_parse.tab.c" /* yacc.c:1645  */
2075848b8605Smrg    break;
2076848b8605Smrg
2077848b8605Smrg  case 28:
2078b8e80941Smrg#line 411 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2079848b8605Smrg    {
2080b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-5].temp_inst), & (yyvsp[-4].dst_reg), & (yyvsp[-2].src_reg), & (yyvsp[0].src_reg), NULL);
2081848b8605Smrg	}
2082b8e80941Smrg#line 2083 "program_parse.tab.c" /* yacc.c:1645  */
2083848b8605Smrg    break;
2084848b8605Smrg
2085848b8605Smrg  case 29:
2086b8e80941Smrg#line 418 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2087848b8605Smrg    {
2088b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-7].temp_inst), & (yyvsp[-6].dst_reg), & (yyvsp[-4].src_reg), & (yyvsp[-2].src_reg), & (yyvsp[0].src_reg));
2089848b8605Smrg	}
2090b8e80941Smrg#line 2091 "program_parse.tab.c" /* yacc.c:1645  */
2091848b8605Smrg    break;
2092848b8605Smrg
2093848b8605Smrg  case 30:
2094b8e80941Smrg#line 424 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2095848b8605Smrg    {
2096b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-7].temp_inst), & (yyvsp[-6].dst_reg), & (yyvsp[-4].src_reg), NULL, NULL);
2097848b8605Smrg	   if ((yyval.inst) != NULL) {
2098b8e80941Smrg	      const GLbitfield tex_mask = (1U << (yyvsp[-2].integer));
2099848b8605Smrg	      GLbitfield shadow_tex = 0;
2100848b8605Smrg	      GLbitfield target_mask = 0;
2101848b8605Smrg
2102848b8605Smrg
2103b8e80941Smrg	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[-2].integer);
2104848b8605Smrg
2105b8e80941Smrg	      if ((yyvsp[0].integer) < 0) {
2106848b8605Smrg		 shadow_tex = tex_mask;
2107848b8605Smrg
2108b8e80941Smrg		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[0].integer);
2109848b8605Smrg		 (yyval.inst)->Base.TexShadow = 1;
2110848b8605Smrg	      } else {
2111b8e80941Smrg		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[0].integer);
2112848b8605Smrg	      }
2113848b8605Smrg
2114848b8605Smrg	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2115848b8605Smrg
2116848b8605Smrg	      /* If this texture unit was previously accessed and that access
2117848b8605Smrg	       * had a different texture target, generate an error.
2118848b8605Smrg	       *
2119848b8605Smrg	       * If this texture unit was previously accessed and that access
2120848b8605Smrg	       * had a different shadow mode, generate an error.
2121848b8605Smrg	       */
2122b8e80941Smrg	      if ((state->prog->TexturesUsed[(yyvsp[-2].integer)] != 0)
2123b8e80941Smrg		  && ((state->prog->TexturesUsed[(yyvsp[-2].integer)] != target_mask)
2124848b8605Smrg		      || ((state->prog->ShadowSamplers & tex_mask)
2125848b8605Smrg			  != shadow_tex))) {
2126b8e80941Smrg		 yyerror(& (yylsp[0]), state,
2127848b8605Smrg			 "multiple targets used on one texture image unit");
2128848b8605Smrg		 YYERROR;
2129848b8605Smrg	      }
2130848b8605Smrg
2131848b8605Smrg
2132b8e80941Smrg	      state->prog->TexturesUsed[(yyvsp[-2].integer)] |= target_mask;
2133848b8605Smrg	      state->prog->ShadowSamplers |= shadow_tex;
2134848b8605Smrg	   }
2135848b8605Smrg	}
2136b8e80941Smrg#line 2137 "program_parse.tab.c" /* yacc.c:1645  */
2137848b8605Smrg    break;
2138848b8605Smrg
2139848b8605Smrg  case 31:
2140b8e80941Smrg#line 468 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2141848b8605Smrg    {
2142b8e80941Smrg	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[0].src_reg), NULL, NULL);
2143848b8605Smrg	   state->fragment.UsesKill = 1;
2144848b8605Smrg	}
2145b8e80941Smrg#line 2146 "program_parse.tab.c" /* yacc.c:1645  */
2146848b8605Smrg    break;
2147848b8605Smrg
2148848b8605Smrg  case 32:
2149b8e80941Smrg#line 475 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2150848b8605Smrg    {
2151b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-11].temp_inst), & (yyvsp[-10].dst_reg), & (yyvsp[-8].src_reg), & (yyvsp[-6].src_reg), & (yyvsp[-4].src_reg));
2152848b8605Smrg	   if ((yyval.inst) != NULL) {
2153b8e80941Smrg	      const GLbitfield tex_mask = (1U << (yyvsp[-2].integer));
2154848b8605Smrg	      GLbitfield shadow_tex = 0;
2155848b8605Smrg	      GLbitfield target_mask = 0;
2156848b8605Smrg
2157848b8605Smrg
2158b8e80941Smrg	      (yyval.inst)->Base.TexSrcUnit = (yyvsp[-2].integer);
2159848b8605Smrg
2160b8e80941Smrg	      if ((yyvsp[0].integer) < 0) {
2161848b8605Smrg		 shadow_tex = tex_mask;
2162848b8605Smrg
2163b8e80941Smrg		 (yyval.inst)->Base.TexSrcTarget = -(yyvsp[0].integer);
2164848b8605Smrg		 (yyval.inst)->Base.TexShadow = 1;
2165848b8605Smrg	      } else {
2166b8e80941Smrg		 (yyval.inst)->Base.TexSrcTarget = (yyvsp[0].integer);
2167848b8605Smrg	      }
2168848b8605Smrg
2169848b8605Smrg	      target_mask = (1U << (yyval.inst)->Base.TexSrcTarget);
2170848b8605Smrg
2171848b8605Smrg	      /* If this texture unit was previously accessed and that access
2172848b8605Smrg	       * had a different texture target, generate an error.
2173848b8605Smrg	       *
2174848b8605Smrg	       * If this texture unit was previously accessed and that access
2175848b8605Smrg	       * had a different shadow mode, generate an error.
2176848b8605Smrg	       */
2177b8e80941Smrg	      if ((state->prog->TexturesUsed[(yyvsp[-2].integer)] != 0)
2178b8e80941Smrg		  && ((state->prog->TexturesUsed[(yyvsp[-2].integer)] != target_mask)
2179848b8605Smrg		      || ((state->prog->ShadowSamplers & tex_mask)
2180848b8605Smrg			  != shadow_tex))) {
2181b8e80941Smrg		 yyerror(& (yylsp[0]), state,
2182848b8605Smrg			 "multiple targets used on one texture image unit");
2183848b8605Smrg		 YYERROR;
2184848b8605Smrg	      }
2185848b8605Smrg
2186848b8605Smrg
2187b8e80941Smrg	      state->prog->TexturesUsed[(yyvsp[-2].integer)] |= target_mask;
2188848b8605Smrg	      state->prog->ShadowSamplers |= shadow_tex;
2189848b8605Smrg	   }
2190848b8605Smrg	}
2191b8e80941Smrg#line 2192 "program_parse.tab.c" /* yacc.c:1645  */
2192848b8605Smrg    break;
2193848b8605Smrg
2194b8e80941Smrg  case 33:
2195b8e80941Smrg#line 519 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2196848b8605Smrg    {
2197b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
2198848b8605Smrg	}
2199b8e80941Smrg#line 2200 "program_parse.tab.c" /* yacc.c:1645  */
2200848b8605Smrg    break;
2201848b8605Smrg
2202b8e80941Smrg  case 34:
2203b8e80941Smrg#line 524 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2204848b8605Smrg    { (yyval.integer) = TEXTURE_1D_INDEX; }
2205b8e80941Smrg#line 2206 "program_parse.tab.c" /* yacc.c:1645  */
2206848b8605Smrg    break;
2207848b8605Smrg
2208b8e80941Smrg  case 35:
2209b8e80941Smrg#line 525 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2210848b8605Smrg    { (yyval.integer) = TEXTURE_2D_INDEX; }
2211b8e80941Smrg#line 2212 "program_parse.tab.c" /* yacc.c:1645  */
2212848b8605Smrg    break;
2213848b8605Smrg
2214b8e80941Smrg  case 36:
2215b8e80941Smrg#line 526 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2216848b8605Smrg    { (yyval.integer) = TEXTURE_3D_INDEX; }
2217b8e80941Smrg#line 2218 "program_parse.tab.c" /* yacc.c:1645  */
2218848b8605Smrg    break;
2219848b8605Smrg
2220b8e80941Smrg  case 37:
2221b8e80941Smrg#line 527 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2222848b8605Smrg    { (yyval.integer) = TEXTURE_CUBE_INDEX; }
2223b8e80941Smrg#line 2224 "program_parse.tab.c" /* yacc.c:1645  */
2224848b8605Smrg    break;
2225848b8605Smrg
2226b8e80941Smrg  case 38:
2227b8e80941Smrg#line 528 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2228848b8605Smrg    { (yyval.integer) = TEXTURE_RECT_INDEX; }
2229b8e80941Smrg#line 2230 "program_parse.tab.c" /* yacc.c:1645  */
2230848b8605Smrg    break;
2231848b8605Smrg
2232b8e80941Smrg  case 39:
2233b8e80941Smrg#line 529 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2234848b8605Smrg    { (yyval.integer) = -TEXTURE_1D_INDEX; }
2235b8e80941Smrg#line 2236 "program_parse.tab.c" /* yacc.c:1645  */
2236848b8605Smrg    break;
2237848b8605Smrg
2238b8e80941Smrg  case 40:
2239b8e80941Smrg#line 530 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2240848b8605Smrg    { (yyval.integer) = -TEXTURE_2D_INDEX; }
2241b8e80941Smrg#line 2242 "program_parse.tab.c" /* yacc.c:1645  */
2242848b8605Smrg    break;
2243848b8605Smrg
2244b8e80941Smrg  case 41:
2245b8e80941Smrg#line 531 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2246848b8605Smrg    { (yyval.integer) = -TEXTURE_RECT_INDEX; }
2247b8e80941Smrg#line 2248 "program_parse.tab.c" /* yacc.c:1645  */
2248848b8605Smrg    break;
2249848b8605Smrg
2250b8e80941Smrg  case 42:
2251b8e80941Smrg#line 532 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2252848b8605Smrg    { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; }
2253b8e80941Smrg#line 2254 "program_parse.tab.c" /* yacc.c:1645  */
2254848b8605Smrg    break;
2255848b8605Smrg
2256b8e80941Smrg  case 43:
2257b8e80941Smrg#line 533 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2258848b8605Smrg    { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; }
2259b8e80941Smrg#line 2260 "program_parse.tab.c" /* yacc.c:1645  */
2260848b8605Smrg    break;
2261848b8605Smrg
2262b8e80941Smrg  case 44:
2263b8e80941Smrg#line 534 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2264848b8605Smrg    { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; }
2265b8e80941Smrg#line 2266 "program_parse.tab.c" /* yacc.c:1645  */
2266848b8605Smrg    break;
2267848b8605Smrg
2268b8e80941Smrg  case 45:
2269b8e80941Smrg#line 535 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2270848b8605Smrg    { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; }
2271b8e80941Smrg#line 2272 "program_parse.tab.c" /* yacc.c:1645  */
2272848b8605Smrg    break;
2273848b8605Smrg
2274b8e80941Smrg  case 46:
2275b8e80941Smrg#line 539 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2276848b8605Smrg    {
2277848b8605Smrg	   /* FIXME: Is this correct?  Should the extenedSwizzle be applied
2278848b8605Smrg	    * FIXME: to the existing swizzle?
2279848b8605Smrg	    */
2280b8e80941Smrg	   (yyvsp[-2].src_reg).Base.Swizzle = (yyvsp[0].swiz_mask).swizzle;
2281b8e80941Smrg	   (yyvsp[-2].src_reg).Base.Negate = (yyvsp[0].swiz_mask).mask;
2282848b8605Smrg
2283b8e80941Smrg	   (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[-5].temp_inst), & (yyvsp[-4].dst_reg), & (yyvsp[-2].src_reg), NULL, NULL);
2284848b8605Smrg	}
2285b8e80941Smrg#line 2286 "program_parse.tab.c" /* yacc.c:1645  */
2286848b8605Smrg    break;
2287848b8605Smrg
2288b8e80941Smrg  case 47:
2289b8e80941Smrg#line 551 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2290848b8605Smrg    {
2291b8e80941Smrg	   (yyval.src_reg) = (yyvsp[0].src_reg);
2292848b8605Smrg
2293b8e80941Smrg	   if ((yyvsp[-1].negate)) {
2294848b8605Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2295848b8605Smrg	   }
2296848b8605Smrg	}
2297b8e80941Smrg#line 2298 "program_parse.tab.c" /* yacc.c:1645  */
2298848b8605Smrg    break;
2299848b8605Smrg
2300b8e80941Smrg  case 48:
2301b8e80941Smrg#line 561 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2302848b8605Smrg    {
2303b8e80941Smrg	   (yyval.src_reg) = (yyvsp[-1].src_reg);
2304848b8605Smrg
2305b8e80941Smrg	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2306b8e80941Smrg						    (yyvsp[0].swiz_mask).swizzle);
2307848b8605Smrg	}
2308b8e80941Smrg#line 2309 "program_parse.tab.c" /* yacc.c:1645  */
2309848b8605Smrg    break;
2310848b8605Smrg
2311b8e80941Smrg  case 49:
2312b8e80941Smrg#line 570 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2313848b8605Smrg    {
2314b8e80941Smrg	   (yyval.src_reg) = (yyvsp[-1].src_reg);
2315b8e80941Smrg
2316b8e80941Smrg	   if ((yyvsp[-2].negate)) {
2317b8e80941Smrg	      (yyval.src_reg).Base.Negate = ~(yyval.src_reg).Base.Negate;
2318b8e80941Smrg	   }
2319848b8605Smrg
2320848b8605Smrg	   (yyval.src_reg).Base.Swizzle = _mesa_combine_swizzles((yyval.src_reg).Base.Swizzle,
2321b8e80941Smrg						    (yyvsp[0].swiz_mask).swizzle);
2322848b8605Smrg	}
2323b8e80941Smrg#line 2324 "program_parse.tab.c" /* yacc.c:1645  */
2324848b8605Smrg    break;
2325848b8605Smrg
2326b8e80941Smrg  case 50:
2327b8e80941Smrg#line 583 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2328848b8605Smrg    {
2329b8e80941Smrg	   (yyval.dst_reg) = (yyvsp[-1].dst_reg);
2330b8e80941Smrg	   (yyval.dst_reg).WriteMask = (yyvsp[0].swiz_mask).mask;
2331848b8605Smrg
2332848b8605Smrg	   if ((yyval.dst_reg).File == PROGRAM_OUTPUT) {
2333848b8605Smrg	      /* Technically speaking, this should check that it is in
2334848b8605Smrg	       * vertex program mode.  However, PositionInvariant can never be
2335848b8605Smrg	       * set in fragment program mode, so it is somewhat irrelevant.
2336848b8605Smrg	       */
2337848b8605Smrg	      if (state->option.PositionInvariant
2338848b8605Smrg	       && ((yyval.dst_reg).Index == VARYING_SLOT_POS)) {
2339b8e80941Smrg		 yyerror(& (yylsp[-1]), state, "position-invariant programs cannot "
2340848b8605Smrg			 "write position");
2341848b8605Smrg		 YYERROR;
2342848b8605Smrg	      }
2343848b8605Smrg
2344b8e80941Smrg              state->prog->info.outputs_written |= BITFIELD64_BIT((yyval.dst_reg).Index);
2345848b8605Smrg	   }
2346848b8605Smrg	}
2347b8e80941Smrg#line 2348 "program_parse.tab.c" /* yacc.c:1645  */
2348848b8605Smrg    break;
2349848b8605Smrg
2350b8e80941Smrg  case 51:
2351b8e80941Smrg#line 605 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2352848b8605Smrg    {
2353848b8605Smrg	   set_dst_reg(& (yyval.dst_reg), PROGRAM_ADDRESS, 0);
2354b8e80941Smrg	   (yyval.dst_reg).WriteMask = (yyvsp[0].swiz_mask).mask;
2355848b8605Smrg	}
2356b8e80941Smrg#line 2357 "program_parse.tab.c" /* yacc.c:1645  */
2357848b8605Smrg    break;
2358848b8605Smrg
2359b8e80941Smrg  case 52:
2360b8e80941Smrg#line 612 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2361848b8605Smrg    {
2362848b8605Smrg	   const unsigned xyzw_valid =
2363b8e80941Smrg	      ((yyvsp[-6].ext_swizzle).xyzw_valid << 0)
2364b8e80941Smrg	      | ((yyvsp[-4].ext_swizzle).xyzw_valid << 1)
2365b8e80941Smrg	      | ((yyvsp[-2].ext_swizzle).xyzw_valid << 2)
2366b8e80941Smrg	      | ((yyvsp[0].ext_swizzle).xyzw_valid << 3);
2367848b8605Smrg	   const unsigned rgba_valid =
2368b8e80941Smrg	      ((yyvsp[-6].ext_swizzle).rgba_valid << 0)
2369b8e80941Smrg	      | ((yyvsp[-4].ext_swizzle).rgba_valid << 1)
2370b8e80941Smrg	      | ((yyvsp[-2].ext_swizzle).rgba_valid << 2)
2371b8e80941Smrg	      | ((yyvsp[0].ext_swizzle).rgba_valid << 3);
2372848b8605Smrg
2373848b8605Smrg	   /* All of the swizzle components have to be valid in either RGBA
2374848b8605Smrg	    * or XYZW.  Note that 0 and 1 are valid in both, so both masks
2375848b8605Smrg	    * can have some bits set.
2376848b8605Smrg	    *
2377848b8605Smrg	    * We somewhat deviate from the spec here.  It would be really hard
2378848b8605Smrg	    * to figure out which component is the error, and there probably
2379848b8605Smrg	    * isn't a lot of benefit.
2380848b8605Smrg	    */
2381848b8605Smrg	   if ((rgba_valid != 0x0f) && (xyzw_valid != 0x0f)) {
2382b8e80941Smrg	      yyerror(& (yylsp[-6]), state, "cannot combine RGBA and XYZW swizzle "
2383848b8605Smrg		      "components");
2384848b8605Smrg	      YYERROR;
2385848b8605Smrg	   }
2386848b8605Smrg
2387b8e80941Smrg	   (yyval.swiz_mask).swizzle = MAKE_SWIZZLE4((yyvsp[-6].ext_swizzle).swz, (yyvsp[-4].ext_swizzle).swz, (yyvsp[-2].ext_swizzle).swz, (yyvsp[0].ext_swizzle).swz);
2388b8e80941Smrg	   (yyval.swiz_mask).mask = ((yyvsp[-6].ext_swizzle).negate) | ((yyvsp[-4].ext_swizzle).negate << 1) | ((yyvsp[-2].ext_swizzle).negate << 2)
2389b8e80941Smrg	      | ((yyvsp[0].ext_swizzle).negate << 3);
2390848b8605Smrg	}
2391b8e80941Smrg#line 2392 "program_parse.tab.c" /* yacc.c:1645  */
2392848b8605Smrg    break;
2393848b8605Smrg
2394b8e80941Smrg  case 53:
2395b8e80941Smrg#line 645 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2396848b8605Smrg    {
2397b8e80941Smrg	   (yyval.ext_swizzle) = (yyvsp[0].ext_swizzle);
2398b8e80941Smrg	   (yyval.ext_swizzle).negate = ((yyvsp[-1].negate)) ? 1 : 0;
2399848b8605Smrg	}
2400b8e80941Smrg#line 2401 "program_parse.tab.c" /* yacc.c:1645  */
2401848b8605Smrg    break;
2402848b8605Smrg
2403b8e80941Smrg  case 54:
2404b8e80941Smrg#line 652 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2405848b8605Smrg    {
2406b8e80941Smrg	   if (((yyvsp[0].integer) != 0) && ((yyvsp[0].integer) != 1)) {
2407b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid extended swizzle selector");
2408848b8605Smrg	      YYERROR;
2409848b8605Smrg	   }
2410848b8605Smrg
2411b8e80941Smrg	   (yyval.ext_swizzle).swz = ((yyvsp[0].integer) == 0) ? SWIZZLE_ZERO : SWIZZLE_ONE;
2412848b8605Smrg           (yyval.ext_swizzle).negate = 0;
2413848b8605Smrg
2414848b8605Smrg	   /* 0 and 1 are valid for both RGBA swizzle names and XYZW
2415848b8605Smrg	    * swizzle names.
2416848b8605Smrg	    */
2417848b8605Smrg	   (yyval.ext_swizzle).xyzw_valid = 1;
2418848b8605Smrg	   (yyval.ext_swizzle).rgba_valid = 1;
2419848b8605Smrg	}
2420b8e80941Smrg#line 2421 "program_parse.tab.c" /* yacc.c:1645  */
2421848b8605Smrg    break;
2422848b8605Smrg
2423b8e80941Smrg  case 55:
2424b8e80941Smrg#line 668 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2425848b8605Smrg    {
2426848b8605Smrg	   char s;
2427848b8605Smrg
2428b8e80941Smrg	   if (strlen((yyvsp[0].string)) > 1) {
2429b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid extended swizzle selector");
2430848b8605Smrg	      YYERROR;
2431848b8605Smrg	   }
2432848b8605Smrg
2433b8e80941Smrg	   s = (yyvsp[0].string)[0];
2434b8e80941Smrg	   free((yyvsp[0].string));
2435848b8605Smrg
2436848b8605Smrg           (yyval.ext_swizzle).rgba_valid = 0;
2437848b8605Smrg           (yyval.ext_swizzle).xyzw_valid = 0;
2438848b8605Smrg           (yyval.ext_swizzle).negate = 0;
2439848b8605Smrg
2440848b8605Smrg	   switch (s) {
2441848b8605Smrg	   case 'x':
2442848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2443848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2444848b8605Smrg	      break;
2445848b8605Smrg	   case 'y':
2446848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2447848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2448848b8605Smrg	      break;
2449848b8605Smrg	   case 'z':
2450848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2451848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2452848b8605Smrg	      break;
2453848b8605Smrg	   case 'w':
2454848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2455848b8605Smrg	      (yyval.ext_swizzle).xyzw_valid = 1;
2456848b8605Smrg	      break;
2457848b8605Smrg
2458848b8605Smrg	   case 'r':
2459848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_X;
2460848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2461848b8605Smrg	      break;
2462848b8605Smrg	   case 'g':
2463848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Y;
2464848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2465848b8605Smrg	      break;
2466848b8605Smrg	   case 'b':
2467848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_Z;
2468848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2469848b8605Smrg	      break;
2470848b8605Smrg	   case 'a':
2471848b8605Smrg	      (yyval.ext_swizzle).swz = SWIZZLE_W;
2472848b8605Smrg	      (yyval.ext_swizzle).rgba_valid = 1;
2473848b8605Smrg	      break;
2474848b8605Smrg
2475848b8605Smrg	   default:
2476b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid extended swizzle selector");
2477848b8605Smrg	      YYERROR;
2478848b8605Smrg	      break;
2479848b8605Smrg	   }
2480848b8605Smrg	}
2481b8e80941Smrg#line 2482 "program_parse.tab.c" /* yacc.c:1645  */
2482848b8605Smrg    break;
2483848b8605Smrg
2484b8e80941Smrg  case 56:
2485b8e80941Smrg#line 727 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2486848b8605Smrg    {
2487848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2488b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[0].string));
2489848b8605Smrg
2490b8e80941Smrg	   free((yyvsp[0].string));
2491848b8605Smrg
2492848b8605Smrg	   if (s == NULL) {
2493b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid operand variable");
2494848b8605Smrg	      YYERROR;
2495848b8605Smrg	   } else if ((s->type != at_param) && (s->type != at_temp)
2496848b8605Smrg		      && (s->type != at_attrib)) {
2497b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid operand variable");
2498848b8605Smrg	      YYERROR;
2499848b8605Smrg	   } else if ((s->type == at_param) && s->param_is_array) {
2500b8e80941Smrg	      yyerror(& (yylsp[0]), state, "non-array access to array PARAM");
2501848b8605Smrg	      YYERROR;
2502848b8605Smrg	   }
2503848b8605Smrg
2504848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2505848b8605Smrg	   switch (s->type) {
2506848b8605Smrg	   case at_temp:
2507848b8605Smrg	      set_src_reg(& (yyval.src_reg), PROGRAM_TEMPORARY, s->temp_binding);
2508848b8605Smrg	      break;
2509848b8605Smrg	   case at_param:
2510848b8605Smrg              set_src_reg_swz(& (yyval.src_reg), s->param_binding_type,
2511848b8605Smrg                              s->param_binding_begin,
2512848b8605Smrg                              s->param_binding_swizzle);
2513848b8605Smrg	      break;
2514848b8605Smrg	   case at_attrib:
2515848b8605Smrg	      set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, s->attrib_binding);
2516b8e80941Smrg              state->prog->info.inputs_read |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2517848b8605Smrg
2518b8e80941Smrg	      if (!validate_inputs(& (yylsp[0]), state)) {
2519848b8605Smrg		 YYERROR;
2520848b8605Smrg	      }
2521848b8605Smrg	      break;
2522848b8605Smrg
2523848b8605Smrg	   default:
2524848b8605Smrg	      YYERROR;
2525848b8605Smrg	      break;
2526848b8605Smrg	   }
2527848b8605Smrg	}
2528b8e80941Smrg#line 2529 "program_parse.tab.c" /* yacc.c:1645  */
2529848b8605Smrg    break;
2530848b8605Smrg
2531b8e80941Smrg  case 57:
2532b8e80941Smrg#line 770 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2533848b8605Smrg    {
2534b8e80941Smrg	   set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, (yyvsp[0].attrib));
2535b8e80941Smrg           state->prog->info.inputs_read |= BITFIELD64_BIT((yyval.src_reg).Base.Index);
2536848b8605Smrg
2537b8e80941Smrg	   if (!validate_inputs(& (yylsp[0]), state)) {
2538848b8605Smrg	      YYERROR;
2539848b8605Smrg	   }
2540848b8605Smrg	}
2541b8e80941Smrg#line 2542 "program_parse.tab.c" /* yacc.c:1645  */
2542848b8605Smrg    break;
2543848b8605Smrg
2544b8e80941Smrg  case 58:
2545b8e80941Smrg#line 779 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2546848b8605Smrg    {
2547b8e80941Smrg	   if (! (yyvsp[-1].src_reg).Base.RelAddr
2548b8e80941Smrg	       && ((unsigned) (yyvsp[-1].src_reg).Base.Index >= (yyvsp[-3].sym)->param_binding_length)) {
2549b8e80941Smrg	      yyerror(& (yylsp[-1]), state, "out of bounds array access");
2550848b8605Smrg	      YYERROR;
2551848b8605Smrg	   }
2552848b8605Smrg
2553848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2554b8e80941Smrg	   (yyval.src_reg).Base.File = (yyvsp[-3].sym)->param_binding_type;
2555848b8605Smrg
2556b8e80941Smrg	   if ((yyvsp[-1].src_reg).Base.RelAddr) {
2557b8e80941Smrg              state->prog->arb.IndirectRegisterFiles |= (1 << (yyval.src_reg).Base.File);
2558b8e80941Smrg	      (yyvsp[-3].sym)->param_accessed_indirectly = 1;
2559848b8605Smrg
2560848b8605Smrg	      (yyval.src_reg).Base.RelAddr = 1;
2561b8e80941Smrg	      (yyval.src_reg).Base.Index = (yyvsp[-1].src_reg).Base.Index;
2562b8e80941Smrg	      (yyval.src_reg).Symbol = (yyvsp[-3].sym);
2563848b8605Smrg	   } else {
2564b8e80941Smrg	      (yyval.src_reg).Base.Index = (yyvsp[-3].sym)->param_binding_begin + (yyvsp[-1].src_reg).Base.Index;
2565848b8605Smrg	   }
2566848b8605Smrg	}
2567b8e80941Smrg#line 2568 "program_parse.tab.c" /* yacc.c:1645  */
2568848b8605Smrg    break;
2569848b8605Smrg
2570b8e80941Smrg  case 59:
2571b8e80941Smrg#line 801 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2572848b8605Smrg    {
2573b8e80941Smrg           gl_register_file file = ((yyvsp[0].temp_sym).name != NULL)
2574b8e80941Smrg	      ? (yyvsp[0].temp_sym).param_binding_type
2575848b8605Smrg	      : PROGRAM_CONSTANT;
2576b8e80941Smrg           set_src_reg_swz(& (yyval.src_reg), file, (yyvsp[0].temp_sym).param_binding_begin,
2577b8e80941Smrg                           (yyvsp[0].temp_sym).param_binding_swizzle);
2578848b8605Smrg	}
2579b8e80941Smrg#line 2580 "program_parse.tab.c" /* yacc.c:1645  */
2580848b8605Smrg    break;
2581848b8605Smrg
2582b8e80941Smrg  case 60:
2583b8e80941Smrg#line 811 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2584848b8605Smrg    {
2585b8e80941Smrg	   set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[0].result));
2586848b8605Smrg	}
2587b8e80941Smrg#line 2588 "program_parse.tab.c" /* yacc.c:1645  */
2588848b8605Smrg    break;
2589848b8605Smrg
2590b8e80941Smrg  case 61:
2591b8e80941Smrg#line 815 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2592848b8605Smrg    {
2593848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2594b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[0].string));
2595848b8605Smrg
2596b8e80941Smrg	   free((yyvsp[0].string));
2597848b8605Smrg
2598848b8605Smrg	   if (s == NULL) {
2599b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid operand variable");
2600848b8605Smrg	      YYERROR;
2601848b8605Smrg	   } else if ((s->type != at_output) && (s->type != at_temp)) {
2602b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid operand variable");
2603848b8605Smrg	      YYERROR;
2604848b8605Smrg	   }
2605848b8605Smrg
2606848b8605Smrg	   switch (s->type) {
2607848b8605Smrg	   case at_temp:
2608848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), PROGRAM_TEMPORARY, s->temp_binding);
2609848b8605Smrg	      break;
2610848b8605Smrg	   case at_output:
2611848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, s->output_binding);
2612848b8605Smrg	      break;
2613848b8605Smrg	   default:
2614848b8605Smrg	      set_dst_reg(& (yyval.dst_reg), s->param_binding_type, s->param_binding_begin);
2615848b8605Smrg	      break;
2616848b8605Smrg	   }
2617848b8605Smrg	}
2618b8e80941Smrg#line 2619 "program_parse.tab.c" /* yacc.c:1645  */
2619848b8605Smrg    break;
2620848b8605Smrg
2621b8e80941Smrg  case 62:
2622b8e80941Smrg#line 844 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2623848b8605Smrg    {
2624848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2625b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[0].string));
2626848b8605Smrg
2627b8e80941Smrg	   free((yyvsp[0].string));
2628848b8605Smrg
2629848b8605Smrg	   if (s == NULL) {
2630b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid operand variable");
2631848b8605Smrg	      YYERROR;
2632848b8605Smrg	   } else if ((s->type != at_param) || !s->param_is_array) {
2633b8e80941Smrg	      yyerror(& (yylsp[0]), state, "array access to non-PARAM variable");
2634848b8605Smrg	      YYERROR;
2635848b8605Smrg	   } else {
2636848b8605Smrg	      (yyval.sym) = s;
2637848b8605Smrg	   }
2638848b8605Smrg	}
2639b8e80941Smrg#line 2640 "program_parse.tab.c" /* yacc.c:1645  */
2640848b8605Smrg    break;
2641848b8605Smrg
2642b8e80941Smrg  case 65:
2643b8e80941Smrg#line 865 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2644848b8605Smrg    {
2645848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2646b8e80941Smrg	   (yyval.src_reg).Base.Index = (yyvsp[0].integer);
2647848b8605Smrg	}
2648b8e80941Smrg#line 2649 "program_parse.tab.c" /* yacc.c:1645  */
2649848b8605Smrg    break;
2650848b8605Smrg
2651b8e80941Smrg  case 66:
2652b8e80941Smrg#line 872 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2653848b8605Smrg    {
2654848b8605Smrg	   /* FINISHME: Add support for multiple address registers.
2655848b8605Smrg	    */
2656848b8605Smrg	   /* FINISHME: Add support for 4-component address registers.
2657848b8605Smrg	    */
2658848b8605Smrg	   init_src_reg(& (yyval.src_reg));
2659848b8605Smrg	   (yyval.src_reg).Base.RelAddr = 1;
2660b8e80941Smrg	   (yyval.src_reg).Base.Index = (yyvsp[0].integer);
2661848b8605Smrg	}
2662b8e80941Smrg#line 2663 "program_parse.tab.c" /* yacc.c:1645  */
2663848b8605Smrg    break;
2664848b8605Smrg
2665b8e80941Smrg  case 67:
2666b8e80941Smrg#line 883 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2667848b8605Smrg    { (yyval.integer) = 0; }
2668b8e80941Smrg#line 2669 "program_parse.tab.c" /* yacc.c:1645  */
2669848b8605Smrg    break;
2670848b8605Smrg
2671b8e80941Smrg  case 68:
2672b8e80941Smrg#line 884 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2673b8e80941Smrg    { (yyval.integer) = (yyvsp[0].integer); }
2674b8e80941Smrg#line 2675 "program_parse.tab.c" /* yacc.c:1645  */
2675848b8605Smrg    break;
2676848b8605Smrg
2677b8e80941Smrg  case 69:
2678b8e80941Smrg#line 885 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2679b8e80941Smrg    { (yyval.integer) = -(yyvsp[0].integer); }
2680b8e80941Smrg#line 2681 "program_parse.tab.c" /* yacc.c:1645  */
2681848b8605Smrg    break;
2682848b8605Smrg
2683b8e80941Smrg  case 70:
2684b8e80941Smrg#line 889 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2685848b8605Smrg    {
2686b8e80941Smrg	   if (((yyvsp[0].integer) < 0) || ((yyvsp[0].integer) > (state->limits->MaxAddressOffset - 1))) {
2687848b8605Smrg              char s[100];
2688848b8605Smrg              _mesa_snprintf(s, sizeof(s),
2689b8e80941Smrg                             "relative address offset too large (%d)", (yyvsp[0].integer));
2690b8e80941Smrg	      yyerror(& (yylsp[0]), state, s);
2691848b8605Smrg	      YYERROR;
2692848b8605Smrg	   } else {
2693b8e80941Smrg	      (yyval.integer) = (yyvsp[0].integer);
2694848b8605Smrg	   }
2695848b8605Smrg	}
2696b8e80941Smrg#line 2697 "program_parse.tab.c" /* yacc.c:1645  */
2697848b8605Smrg    break;
2698848b8605Smrg
2699b8e80941Smrg  case 71:
2700b8e80941Smrg#line 903 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2701848b8605Smrg    {
2702b8e80941Smrg	   if (((yyvsp[0].integer) < 0) || ((yyvsp[0].integer) > state->limits->MaxAddressOffset)) {
2703848b8605Smrg              char s[100];
2704848b8605Smrg              _mesa_snprintf(s, sizeof(s),
2705b8e80941Smrg                             "relative address offset too large (%d)", (yyvsp[0].integer));
2706b8e80941Smrg	      yyerror(& (yylsp[0]), state, s);
2707848b8605Smrg	      YYERROR;
2708848b8605Smrg	   } else {
2709b8e80941Smrg	      (yyval.integer) = (yyvsp[0].integer);
2710848b8605Smrg	   }
2711848b8605Smrg	}
2712b8e80941Smrg#line 2713 "program_parse.tab.c" /* yacc.c:1645  */
2713848b8605Smrg    break;
2714848b8605Smrg
2715b8e80941Smrg  case 72:
2716b8e80941Smrg#line 917 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2717848b8605Smrg    {
2718848b8605Smrg	   struct asm_symbol *const s = (struct asm_symbol *)
2719b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[0].string));
2720848b8605Smrg
2721b8e80941Smrg	   free((yyvsp[0].string));
2722848b8605Smrg
2723848b8605Smrg	   if (s == NULL) {
2724b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid array member");
2725848b8605Smrg	      YYERROR;
2726848b8605Smrg	   } else if (s->type != at_address) {
2727b8e80941Smrg	      yyerror(& (yylsp[0]), state,
2728848b8605Smrg		      "invalid variable for indexed array access");
2729848b8605Smrg	      YYERROR;
2730848b8605Smrg	   } else {
2731848b8605Smrg	      (yyval.sym) = s;
2732848b8605Smrg	   }
2733848b8605Smrg	}
2734b8e80941Smrg#line 2735 "program_parse.tab.c" /* yacc.c:1645  */
2735848b8605Smrg    break;
2736848b8605Smrg
2737b8e80941Smrg  case 73:
2738b8e80941Smrg#line 937 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2739848b8605Smrg    {
2740b8e80941Smrg	   if ((yyvsp[0].swiz_mask).mask != WRITEMASK_X) {
2741b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid address component selector");
2742848b8605Smrg	      YYERROR;
2743848b8605Smrg	   } else {
2744b8e80941Smrg	      (yyval.swiz_mask) = (yyvsp[0].swiz_mask);
2745848b8605Smrg	   }
2746848b8605Smrg	}
2747b8e80941Smrg#line 2748 "program_parse.tab.c" /* yacc.c:1645  */
2748848b8605Smrg    break;
2749848b8605Smrg
2750b8e80941Smrg  case 74:
2751b8e80941Smrg#line 948 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2752848b8605Smrg    {
2753b8e80941Smrg	   if ((yyvsp[0].swiz_mask).mask != WRITEMASK_X) {
2754b8e80941Smrg	      yyerror(& (yylsp[0]), state,
2755848b8605Smrg		      "address register write mask must be \".x\"");
2756848b8605Smrg	      YYERROR;
2757848b8605Smrg	   } else {
2758b8e80941Smrg	      (yyval.swiz_mask) = (yyvsp[0].swiz_mask);
2759848b8605Smrg	   }
2760848b8605Smrg	}
2761b8e80941Smrg#line 2762 "program_parse.tab.c" /* yacc.c:1645  */
2762848b8605Smrg    break;
2763848b8605Smrg
2764b8e80941Smrg  case 79:
2765b8e80941Smrg#line 964 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2766848b8605Smrg    { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
2767b8e80941Smrg#line 2768 "program_parse.tab.c" /* yacc.c:1645  */
2768848b8605Smrg    break;
2769848b8605Smrg
2770b8e80941Smrg  case 84:
2771b8e80941Smrg#line 968 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2772848b8605Smrg    { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; }
2773b8e80941Smrg#line 2774 "program_parse.tab.c" /* yacc.c:1645  */
2774848b8605Smrg    break;
2775848b8605Smrg
2776848b8605Smrg  case 91:
2777b8e80941Smrg#line 980 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2778848b8605Smrg    {
2779848b8605Smrg	   struct asm_symbol *const s =
2780b8e80941Smrg	      declare_variable(state, (yyvsp[-2].string), at_attrib, & (yylsp[-2]));
2781848b8605Smrg
2782848b8605Smrg	   if (s == NULL) {
2783b8e80941Smrg	      free((yyvsp[-2].string));
2784848b8605Smrg	      YYERROR;
2785848b8605Smrg	   } else {
2786b8e80941Smrg	      s->attrib_binding = (yyvsp[0].attrib);
2787848b8605Smrg	      state->InputsBound |= BITFIELD64_BIT(s->attrib_binding);
2788848b8605Smrg
2789b8e80941Smrg	      if (!validate_inputs(& (yylsp[0]), state)) {
2790848b8605Smrg		 YYERROR;
2791848b8605Smrg	      }
2792848b8605Smrg	   }
2793848b8605Smrg	}
2794b8e80941Smrg#line 2795 "program_parse.tab.c" /* yacc.c:1645  */
2795848b8605Smrg    break;
2796848b8605Smrg
2797b8e80941Smrg  case 92:
2798b8e80941Smrg#line 999 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2799848b8605Smrg    {
2800b8e80941Smrg	   (yyval.attrib) = (yyvsp[0].attrib);
2801848b8605Smrg	}
2802b8e80941Smrg#line 2803 "program_parse.tab.c" /* yacc.c:1645  */
2803848b8605Smrg    break;
2804848b8605Smrg
2805b8e80941Smrg  case 93:
2806b8e80941Smrg#line 1003 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2807848b8605Smrg    {
2808b8e80941Smrg	   (yyval.attrib) = (yyvsp[0].attrib);
2809848b8605Smrg	}
2810b8e80941Smrg#line 2811 "program_parse.tab.c" /* yacc.c:1645  */
2811848b8605Smrg    break;
2812848b8605Smrg
2813b8e80941Smrg  case 94:
2814b8e80941Smrg#line 1009 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2815848b8605Smrg    {
2816848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_POS;
2817848b8605Smrg	}
2818b8e80941Smrg#line 2819 "program_parse.tab.c" /* yacc.c:1645  */
2819848b8605Smrg    break;
2820848b8605Smrg
2821b8e80941Smrg  case 95:
2822b8e80941Smrg#line 1013 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2823848b8605Smrg    {
2824848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_NORMAL;
2825848b8605Smrg	}
2826b8e80941Smrg#line 2827 "program_parse.tab.c" /* yacc.c:1645  */
2827848b8605Smrg    break;
2828848b8605Smrg
2829b8e80941Smrg  case 96:
2830b8e80941Smrg#line 1017 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2831848b8605Smrg    {
2832b8e80941Smrg	   (yyval.attrib) = VERT_ATTRIB_COLOR0 + (yyvsp[0].integer);
2833848b8605Smrg	}
2834b8e80941Smrg#line 2835 "program_parse.tab.c" /* yacc.c:1645  */
2835848b8605Smrg    break;
2836848b8605Smrg
2837b8e80941Smrg  case 97:
2838b8e80941Smrg#line 1021 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2839848b8605Smrg    {
2840848b8605Smrg	   (yyval.attrib) = VERT_ATTRIB_FOG;
2841848b8605Smrg	}
2842b8e80941Smrg#line 2843 "program_parse.tab.c" /* yacc.c:1645  */
2843848b8605Smrg    break;
2844848b8605Smrg
2845b8e80941Smrg  case 98:
2846b8e80941Smrg#line 1025 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2847848b8605Smrg    {
2848b8e80941Smrg	   (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[0].integer);
2849848b8605Smrg	}
2850b8e80941Smrg#line 2851 "program_parse.tab.c" /* yacc.c:1645  */
2851848b8605Smrg    break;
2852848b8605Smrg
2853b8e80941Smrg  case 99:
2854b8e80941Smrg#line 1029 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2855848b8605Smrg    {
2856b8e80941Smrg	   yyerror(& (yylsp[-3]), state, "GL_ARB_matrix_palette not supported");
2857848b8605Smrg	   YYERROR;
2858848b8605Smrg	}
2859b8e80941Smrg#line 2860 "program_parse.tab.c" /* yacc.c:1645  */
2860848b8605Smrg    break;
2861848b8605Smrg
2862b8e80941Smrg  case 100:
2863b8e80941Smrg#line 1034 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2864848b8605Smrg    {
2865b8e80941Smrg	   (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[-1].integer);
2866848b8605Smrg	}
2867b8e80941Smrg#line 2868 "program_parse.tab.c" /* yacc.c:1645  */
2868848b8605Smrg    break;
2869848b8605Smrg
2870b8e80941Smrg  case 101:
2871b8e80941Smrg#line 1040 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2872848b8605Smrg    {
2873b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->limits->MaxAttribs) {
2874b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid vertex attribute reference");
2875848b8605Smrg	      YYERROR;
2876848b8605Smrg	   }
2877848b8605Smrg
2878b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
2879848b8605Smrg	}
2880b8e80941Smrg#line 2881 "program_parse.tab.c" /* yacc.c:1645  */
2881848b8605Smrg    break;
2882848b8605Smrg
2883b8e80941Smrg  case 103:
2884b8e80941Smrg#line 1053 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2885848b8605Smrg    {
2886848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_POS;
2887848b8605Smrg	}
2888b8e80941Smrg#line 2889 "program_parse.tab.c" /* yacc.c:1645  */
2889848b8605Smrg    break;
2890848b8605Smrg
2891b8e80941Smrg  case 104:
2892b8e80941Smrg#line 1057 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2893848b8605Smrg    {
2894b8e80941Smrg	   (yyval.attrib) = VARYING_SLOT_COL0 + (yyvsp[0].integer);
2895848b8605Smrg	}
2896b8e80941Smrg#line 2897 "program_parse.tab.c" /* yacc.c:1645  */
2897848b8605Smrg    break;
2898848b8605Smrg
2899b8e80941Smrg  case 105:
2900b8e80941Smrg#line 1061 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2901848b8605Smrg    {
2902848b8605Smrg	   (yyval.attrib) = VARYING_SLOT_FOGC;
2903848b8605Smrg	}
2904b8e80941Smrg#line 2905 "program_parse.tab.c" /* yacc.c:1645  */
2905848b8605Smrg    break;
2906848b8605Smrg
2907b8e80941Smrg  case 106:
2908b8e80941Smrg#line 1065 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2909848b8605Smrg    {
2910b8e80941Smrg	   (yyval.attrib) = VARYING_SLOT_TEX0 + (yyvsp[0].integer);
2911848b8605Smrg	}
2912b8e80941Smrg#line 2913 "program_parse.tab.c" /* yacc.c:1645  */
2913848b8605Smrg    break;
2914848b8605Smrg
2915b8e80941Smrg  case 109:
2916b8e80941Smrg#line 1073 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2917848b8605Smrg    {
2918848b8605Smrg	   struct asm_symbol *const s =
2919b8e80941Smrg	      declare_variable(state, (yyvsp[-1].string), at_param, & (yylsp[-1]));
2920848b8605Smrg
2921848b8605Smrg	   if (s == NULL) {
2922b8e80941Smrg	      free((yyvsp[-1].string));
2923848b8605Smrg	      YYERROR;
2924848b8605Smrg	   } else {
2925b8e80941Smrg	      s->param_binding_type = (yyvsp[0].temp_sym).param_binding_type;
2926b8e80941Smrg	      s->param_binding_begin = (yyvsp[0].temp_sym).param_binding_begin;
2927b8e80941Smrg	      s->param_binding_length = (yyvsp[0].temp_sym).param_binding_length;
2928b8e80941Smrg              s->param_binding_swizzle = (yyvsp[0].temp_sym).param_binding_swizzle;
2929848b8605Smrg	      s->param_is_array = 0;
2930848b8605Smrg	   }
2931848b8605Smrg	}
2932b8e80941Smrg#line 2933 "program_parse.tab.c" /* yacc.c:1645  */
2933848b8605Smrg    break;
2934848b8605Smrg
2935b8e80941Smrg  case 110:
2936b8e80941Smrg#line 1091 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2937848b8605Smrg    {
2938b8e80941Smrg	   if (((yyvsp[-2].integer) != 0) && ((unsigned) (yyvsp[-2].integer) != (yyvsp[0].temp_sym).param_binding_length)) {
2939b8e80941Smrg	      free((yyvsp[-4].string));
2940b8e80941Smrg	      yyerror(& (yylsp[-2]), state,
2941848b8605Smrg		      "parameter array size and number of bindings must match");
2942848b8605Smrg	      YYERROR;
2943848b8605Smrg	   } else {
2944848b8605Smrg	      struct asm_symbol *const s =
2945b8e80941Smrg		 declare_variable(state, (yyvsp[-4].string), (yyvsp[0].temp_sym).type, & (yylsp[-4]));
2946848b8605Smrg
2947848b8605Smrg	      if (s == NULL) {
2948b8e80941Smrg		 free((yyvsp[-4].string));
2949848b8605Smrg		 YYERROR;
2950848b8605Smrg	      } else {
2951b8e80941Smrg		 s->param_binding_type = (yyvsp[0].temp_sym).param_binding_type;
2952b8e80941Smrg		 s->param_binding_begin = (yyvsp[0].temp_sym).param_binding_begin;
2953b8e80941Smrg		 s->param_binding_length = (yyvsp[0].temp_sym).param_binding_length;
2954848b8605Smrg                 s->param_binding_swizzle = SWIZZLE_XYZW;
2955848b8605Smrg		 s->param_is_array = 1;
2956848b8605Smrg	      }
2957848b8605Smrg	   }
2958848b8605Smrg	}
2959b8e80941Smrg#line 2960 "program_parse.tab.c" /* yacc.c:1645  */
2960848b8605Smrg    break;
2961848b8605Smrg
2962b8e80941Smrg  case 111:
2963b8e80941Smrg#line 1116 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2964848b8605Smrg    {
2965848b8605Smrg	   (yyval.integer) = 0;
2966848b8605Smrg	}
2967b8e80941Smrg#line 2968 "program_parse.tab.c" /* yacc.c:1645  */
2968848b8605Smrg    break;
2969848b8605Smrg
2970b8e80941Smrg  case 112:
2971b8e80941Smrg#line 1120 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2972848b8605Smrg    {
2973b8e80941Smrg	   if (((yyvsp[0].integer) < 1) || ((unsigned) (yyvsp[0].integer) > state->limits->MaxParameters)) {
2974848b8605Smrg              char msg[100];
2975848b8605Smrg              _mesa_snprintf(msg, sizeof(msg),
2976848b8605Smrg                             "invalid parameter array size (size=%d max=%u)",
2977b8e80941Smrg                             (yyvsp[0].integer), state->limits->MaxParameters);
2978b8e80941Smrg	      yyerror(& (yylsp[0]), state, msg);
2979848b8605Smrg	      YYERROR;
2980848b8605Smrg	   } else {
2981b8e80941Smrg	      (yyval.integer) = (yyvsp[0].integer);
2982848b8605Smrg	   }
2983848b8605Smrg	}
2984b8e80941Smrg#line 2985 "program_parse.tab.c" /* yacc.c:1645  */
2985848b8605Smrg    break;
2986848b8605Smrg
2987b8e80941Smrg  case 113:
2988b8e80941Smrg#line 1135 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2989848b8605Smrg    {
2990b8e80941Smrg	   (yyval.temp_sym) = (yyvsp[0].temp_sym);
2991848b8605Smrg	}
2992b8e80941Smrg#line 2993 "program_parse.tab.c" /* yacc.c:1645  */
2993848b8605Smrg    break;
2994848b8605Smrg
2995b8e80941Smrg  case 114:
2996b8e80941Smrg#line 1141 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
2997848b8605Smrg    {
2998b8e80941Smrg	   (yyval.temp_sym) = (yyvsp[-1].temp_sym);
2999848b8605Smrg	}
3000b8e80941Smrg#line 3001 "program_parse.tab.c" /* yacc.c:1645  */
3001848b8605Smrg    break;
3002848b8605Smrg
3003b8e80941Smrg  case 116:
3004b8e80941Smrg#line 1148 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3005848b8605Smrg    {
3006b8e80941Smrg	   (yyvsp[-2].temp_sym).param_binding_length += (yyvsp[0].temp_sym).param_binding_length;
3007b8e80941Smrg	   (yyval.temp_sym) = (yyvsp[-2].temp_sym);
3008848b8605Smrg	}
3009b8e80941Smrg#line 3010 "program_parse.tab.c" /* yacc.c:1645  */
3010848b8605Smrg    break;
3011848b8605Smrg
3012b8e80941Smrg  case 117:
3013b8e80941Smrg#line 1155 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3014848b8605Smrg    {
3015848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3016848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3017b8e80941Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3018848b8605Smrg	}
3019b8e80941Smrg#line 3020 "program_parse.tab.c" /* yacc.c:1645  */
3020848b8605Smrg    break;
3021848b8605Smrg
3022b8e80941Smrg  case 118:
3023b8e80941Smrg#line 1161 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3024848b8605Smrg    {
3025848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3026848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3027b8e80941Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3028848b8605Smrg	}
3029b8e80941Smrg#line 3030 "program_parse.tab.c" /* yacc.c:1645  */
3030848b8605Smrg    break;
3031848b8605Smrg
3032b8e80941Smrg  case 119:
3033b8e80941Smrg#line 1167 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3034848b8605Smrg    {
3035848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3036848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3037b8e80941Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[0].vector), GL_TRUE);
3038848b8605Smrg	}
3039b8e80941Smrg#line 3040 "program_parse.tab.c" /* yacc.c:1645  */
3040848b8605Smrg    break;
3041848b8605Smrg
3042b8e80941Smrg  case 120:
3043b8e80941Smrg#line 1175 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3044848b8605Smrg    {
3045848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3046848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3047b8e80941Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3048848b8605Smrg	}
3049b8e80941Smrg#line 3050 "program_parse.tab.c" /* yacc.c:1645  */
3050848b8605Smrg    break;
3051848b8605Smrg
3052b8e80941Smrg  case 121:
3053b8e80941Smrg#line 1181 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3054848b8605Smrg    {
3055848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3056848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3057b8e80941Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3058848b8605Smrg	}
3059b8e80941Smrg#line 3060 "program_parse.tab.c" /* yacc.c:1645  */
3060848b8605Smrg    break;
3061848b8605Smrg
3062b8e80941Smrg  case 122:
3063b8e80941Smrg#line 1187 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3064848b8605Smrg    {
3065848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3066848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3067b8e80941Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[0].vector), GL_TRUE);
3068848b8605Smrg	}
3069b8e80941Smrg#line 3070 "program_parse.tab.c" /* yacc.c:1645  */
3070848b8605Smrg    break;
3071848b8605Smrg
3072b8e80941Smrg  case 123:
3073b8e80941Smrg#line 1195 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3074848b8605Smrg    {
3075848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3076848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3077b8e80941Smrg	   initialize_symbol_from_state(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3078848b8605Smrg	}
3079b8e80941Smrg#line 3080 "program_parse.tab.c" /* yacc.c:1645  */
3080848b8605Smrg    break;
3081848b8605Smrg
3082b8e80941Smrg  case 124:
3083b8e80941Smrg#line 1201 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3084848b8605Smrg    {
3085848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3086848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3087b8e80941Smrg	   initialize_symbol_from_param(state->prog, & (yyval.temp_sym), (yyvsp[0].state));
3088848b8605Smrg	}
3089b8e80941Smrg#line 3090 "program_parse.tab.c" /* yacc.c:1645  */
3090848b8605Smrg    break;
3091848b8605Smrg
3092b8e80941Smrg  case 125:
3093b8e80941Smrg#line 1207 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3094848b8605Smrg    {
3095848b8605Smrg	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
3096848b8605Smrg	   (yyval.temp_sym).param_binding_begin = ~0;
3097b8e80941Smrg	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[0].vector), GL_FALSE);
3098848b8605Smrg	}
3099b8e80941Smrg#line 3100 "program_parse.tab.c" /* yacc.c:1645  */
3100848b8605Smrg    break;
3101848b8605Smrg
3102b8e80941Smrg  case 126:
3103b8e80941Smrg#line 1214 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3104b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3105b8e80941Smrg#line 3106 "program_parse.tab.c" /* yacc.c:1645  */
3106848b8605Smrg    break;
3107848b8605Smrg
3108b8e80941Smrg  case 127:
3109b8e80941Smrg#line 1215 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3110b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3111b8e80941Smrg#line 3112 "program_parse.tab.c" /* yacc.c:1645  */
3112848b8605Smrg    break;
3113848b8605Smrg
3114b8e80941Smrg  case 128:
3115b8e80941Smrg#line 1218 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3116b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3117b8e80941Smrg#line 3118 "program_parse.tab.c" /* yacc.c:1645  */
3118848b8605Smrg    break;
3119848b8605Smrg
3120b8e80941Smrg  case 129:
3121b8e80941Smrg#line 1219 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3122b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3123b8e80941Smrg#line 3124 "program_parse.tab.c" /* yacc.c:1645  */
3124848b8605Smrg    break;
3125848b8605Smrg
3126b8e80941Smrg  case 130:
3127b8e80941Smrg#line 1220 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3128b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3129b8e80941Smrg#line 3130 "program_parse.tab.c" /* yacc.c:1645  */
3130848b8605Smrg    break;
3131848b8605Smrg
3132b8e80941Smrg  case 131:
3133b8e80941Smrg#line 1221 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3134b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3135b8e80941Smrg#line 3136 "program_parse.tab.c" /* yacc.c:1645  */
3136848b8605Smrg    break;
3137848b8605Smrg
3138b8e80941Smrg  case 132:
3139b8e80941Smrg#line 1222 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3140b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3141b8e80941Smrg#line 3142 "program_parse.tab.c" /* yacc.c:1645  */
3142848b8605Smrg    break;
3143848b8605Smrg
3144b8e80941Smrg  case 133:
3145b8e80941Smrg#line 1223 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3146b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3147b8e80941Smrg#line 3148 "program_parse.tab.c" /* yacc.c:1645  */
3148848b8605Smrg    break;
3149848b8605Smrg
3150b8e80941Smrg  case 134:
3151b8e80941Smrg#line 1224 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3152b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3153b8e80941Smrg#line 3154 "program_parse.tab.c" /* yacc.c:1645  */
3154848b8605Smrg    break;
3155848b8605Smrg
3156b8e80941Smrg  case 135:
3157b8e80941Smrg#line 1225 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3158b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3159b8e80941Smrg#line 3160 "program_parse.tab.c" /* yacc.c:1645  */
3160848b8605Smrg    break;
3161848b8605Smrg
3162b8e80941Smrg  case 136:
3163b8e80941Smrg#line 1226 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3164b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3165b8e80941Smrg#line 3166 "program_parse.tab.c" /* yacc.c:1645  */
3166848b8605Smrg    break;
3167848b8605Smrg
3168b8e80941Smrg  case 137:
3169b8e80941Smrg#line 1227 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3170b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3171b8e80941Smrg#line 3172 "program_parse.tab.c" /* yacc.c:1645  */
3172848b8605Smrg    break;
3173848b8605Smrg
3174b8e80941Smrg  case 138:
3175b8e80941Smrg#line 1228 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3176b8e80941Smrg    { memcpy((yyval.state), (yyvsp[0].state), sizeof((yyval.state))); }
3177b8e80941Smrg#line 3178 "program_parse.tab.c" /* yacc.c:1645  */
3178848b8605Smrg    break;
3179848b8605Smrg
3180b8e80941Smrg  case 139:
3181b8e80941Smrg#line 1232 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3182848b8605Smrg    {
3183848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3184848b8605Smrg	   (yyval.state)[0] = STATE_MATERIAL;
3185b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].integer);
3186b8e80941Smrg	   (yyval.state)[2] = (yyvsp[0].integer);
3187848b8605Smrg	}
3188b8e80941Smrg#line 3189 "program_parse.tab.c" /* yacc.c:1645  */
3189848b8605Smrg    break;
3190848b8605Smrg
3191b8e80941Smrg  case 140:
3192b8e80941Smrg#line 1241 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3193848b8605Smrg    {
3194b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3195848b8605Smrg	}
3196b8e80941Smrg#line 3197 "program_parse.tab.c" /* yacc.c:1645  */
3197848b8605Smrg    break;
3198848b8605Smrg
3199b8e80941Smrg  case 141:
3200b8e80941Smrg#line 1245 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3201848b8605Smrg    {
3202848b8605Smrg	   (yyval.integer) = STATE_EMISSION;
3203848b8605Smrg	}
3204b8e80941Smrg#line 3205 "program_parse.tab.c" /* yacc.c:1645  */
3205848b8605Smrg    break;
3206848b8605Smrg
3207b8e80941Smrg  case 142:
3208b8e80941Smrg#line 1249 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3209848b8605Smrg    {
3210848b8605Smrg	   (yyval.integer) = STATE_SHININESS;
3211848b8605Smrg	}
3212b8e80941Smrg#line 3213 "program_parse.tab.c" /* yacc.c:1645  */
3213848b8605Smrg    break;
3214848b8605Smrg
3215b8e80941Smrg  case 143:
3216b8e80941Smrg#line 1255 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3217848b8605Smrg    {
3218848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3219848b8605Smrg	   (yyval.state)[0] = STATE_LIGHT;
3220b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-2].integer);
3221b8e80941Smrg	   (yyval.state)[2] = (yyvsp[0].integer);
3222848b8605Smrg	}
3223b8e80941Smrg#line 3224 "program_parse.tab.c" /* yacc.c:1645  */
3224848b8605Smrg    break;
3225848b8605Smrg
3226b8e80941Smrg  case 144:
3227b8e80941Smrg#line 1264 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3228848b8605Smrg    {
3229b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3230848b8605Smrg	}
3231b8e80941Smrg#line 3232 "program_parse.tab.c" /* yacc.c:1645  */
3232848b8605Smrg    break;
3233848b8605Smrg
3234b8e80941Smrg  case 145:
3235b8e80941Smrg#line 1268 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3236848b8605Smrg    {
3237848b8605Smrg	   (yyval.integer) = STATE_POSITION;
3238848b8605Smrg	}
3239b8e80941Smrg#line 3240 "program_parse.tab.c" /* yacc.c:1645  */
3240848b8605Smrg    break;
3241848b8605Smrg
3242b8e80941Smrg  case 146:
3243b8e80941Smrg#line 1272 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3244848b8605Smrg    {
3245848b8605Smrg	   if (!state->ctx->Extensions.EXT_point_parameters) {
3246b8e80941Smrg	      yyerror(& (yylsp[0]), state, "GL_ARB_point_parameters not supported");
3247848b8605Smrg	      YYERROR;
3248848b8605Smrg	   }
3249848b8605Smrg
3250848b8605Smrg	   (yyval.integer) = STATE_ATTENUATION;
3251848b8605Smrg	}
3252b8e80941Smrg#line 3253 "program_parse.tab.c" /* yacc.c:1645  */
3253848b8605Smrg    break;
3254848b8605Smrg
3255b8e80941Smrg  case 147:
3256b8e80941Smrg#line 1281 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3257848b8605Smrg    {
3258b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3259848b8605Smrg	}
3260b8e80941Smrg#line 3261 "program_parse.tab.c" /* yacc.c:1645  */
3261848b8605Smrg    break;
3262848b8605Smrg
3263b8e80941Smrg  case 148:
3264b8e80941Smrg#line 1285 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3265848b8605Smrg    {
3266848b8605Smrg	   (yyval.integer) = STATE_HALF_VECTOR;
3267848b8605Smrg	}
3268b8e80941Smrg#line 3269 "program_parse.tab.c" /* yacc.c:1645  */
3269848b8605Smrg    break;
3270848b8605Smrg
3271b8e80941Smrg  case 149:
3272b8e80941Smrg#line 1291 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3273848b8605Smrg    {
3274848b8605Smrg	   (yyval.integer) = STATE_SPOT_DIRECTION;
3275848b8605Smrg	}
3276b8e80941Smrg#line 3277 "program_parse.tab.c" /* yacc.c:1645  */
3277848b8605Smrg    break;
3278848b8605Smrg
3279b8e80941Smrg  case 150:
3280b8e80941Smrg#line 1297 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3281848b8605Smrg    {
3282b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].state)[0];
3283b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].state)[1];
3284848b8605Smrg	}
3285b8e80941Smrg#line 3286 "program_parse.tab.c" /* yacc.c:1645  */
3286848b8605Smrg    break;
3287848b8605Smrg
3288b8e80941Smrg  case 151:
3289b8e80941Smrg#line 1304 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3290848b8605Smrg    {
3291848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3292848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
3293848b8605Smrg	}
3294b8e80941Smrg#line 3295 "program_parse.tab.c" /* yacc.c:1645  */
3295848b8605Smrg    break;
3296848b8605Smrg
3297b8e80941Smrg  case 152:
3298b8e80941Smrg#line 1309 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3299848b8605Smrg    {
3300848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3301848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
3302b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].integer);
3303848b8605Smrg	}
3304b8e80941Smrg#line 3305 "program_parse.tab.c" /* yacc.c:1645  */
3305848b8605Smrg    break;
3306848b8605Smrg
3307b8e80941Smrg  case 153:
3308b8e80941Smrg#line 1317 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3309848b8605Smrg    {
3310848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3311848b8605Smrg	   (yyval.state)[0] = STATE_LIGHTPROD;
3312b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-3].integer);
3313b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].integer);
3314b8e80941Smrg	   (yyval.state)[3] = (yyvsp[0].integer);
3315848b8605Smrg	}
3316b8e80941Smrg#line 3317 "program_parse.tab.c" /* yacc.c:1645  */
3317848b8605Smrg    break;
3318848b8605Smrg
3319b8e80941Smrg  case 155:
3320b8e80941Smrg#line 1329 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3321848b8605Smrg    {
3322848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3323b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].integer);
3324b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].integer);
3325848b8605Smrg	}
3326b8e80941Smrg#line 3327 "program_parse.tab.c" /* yacc.c:1645  */
3327848b8605Smrg    break;
3328848b8605Smrg
3329b8e80941Smrg  case 156:
3330b8e80941Smrg#line 1337 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3331848b8605Smrg    {
3332848b8605Smrg	   (yyval.integer) = STATE_TEXENV_COLOR;
3333848b8605Smrg	}
3334b8e80941Smrg#line 3335 "program_parse.tab.c" /* yacc.c:1645  */
3335848b8605Smrg    break;
3336848b8605Smrg
3337b8e80941Smrg  case 157:
3338b8e80941Smrg#line 1343 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3339848b8605Smrg    {
3340848b8605Smrg	   (yyval.integer) = STATE_AMBIENT;
3341848b8605Smrg	}
3342b8e80941Smrg#line 3343 "program_parse.tab.c" /* yacc.c:1645  */
3343848b8605Smrg    break;
3344848b8605Smrg
3345b8e80941Smrg  case 158:
3346b8e80941Smrg#line 1347 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3347848b8605Smrg    {
3348848b8605Smrg	   (yyval.integer) = STATE_DIFFUSE;
3349848b8605Smrg	}
3350b8e80941Smrg#line 3351 "program_parse.tab.c" /* yacc.c:1645  */
3351848b8605Smrg    break;
3352848b8605Smrg
3353b8e80941Smrg  case 159:
3354b8e80941Smrg#line 1351 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3355848b8605Smrg    {
3356848b8605Smrg	   (yyval.integer) = STATE_SPECULAR;
3357848b8605Smrg	}
3358b8e80941Smrg#line 3359 "program_parse.tab.c" /* yacc.c:1645  */
3359848b8605Smrg    break;
3360848b8605Smrg
3361b8e80941Smrg  case 160:
3362b8e80941Smrg#line 1357 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3363848b8605Smrg    {
3364b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxLights) {
3365b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid light selector");
3366848b8605Smrg	      YYERROR;
3367848b8605Smrg	   }
3368848b8605Smrg
3369b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3370848b8605Smrg	}
3371b8e80941Smrg#line 3372 "program_parse.tab.c" /* yacc.c:1645  */
3372848b8605Smrg    break;
3373848b8605Smrg
3374b8e80941Smrg  case 161:
3375b8e80941Smrg#line 1368 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3376848b8605Smrg    {
3377848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3378848b8605Smrg	   (yyval.state)[0] = STATE_TEXGEN;
3379b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-2].integer);
3380b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].integer) + (yyvsp[0].integer);
3381848b8605Smrg	}
3382b8e80941Smrg#line 3383 "program_parse.tab.c" /* yacc.c:1645  */
3383848b8605Smrg    break;
3384848b8605Smrg
3385b8e80941Smrg  case 162:
3386b8e80941Smrg#line 1377 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3387848b8605Smrg    {
3388848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_S;
3389848b8605Smrg	}
3390b8e80941Smrg#line 3391 "program_parse.tab.c" /* yacc.c:1645  */
3391848b8605Smrg    break;
3392848b8605Smrg
3393b8e80941Smrg  case 163:
3394b8e80941Smrg#line 1381 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3395848b8605Smrg    {
3396848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_OBJECT_S;
3397848b8605Smrg	}
3398b8e80941Smrg#line 3399 "program_parse.tab.c" /* yacc.c:1645  */
3399848b8605Smrg    break;
3400848b8605Smrg
3401b8e80941Smrg  case 164:
3402b8e80941Smrg#line 1386 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3403848b8605Smrg    {
3404848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
3405848b8605Smrg	}
3406b8e80941Smrg#line 3407 "program_parse.tab.c" /* yacc.c:1645  */
3407848b8605Smrg    break;
3408848b8605Smrg
3409b8e80941Smrg  case 165:
3410b8e80941Smrg#line 1390 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3411848b8605Smrg    {
3412848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
3413848b8605Smrg	}
3414b8e80941Smrg#line 3415 "program_parse.tab.c" /* yacc.c:1645  */
3415848b8605Smrg    break;
3416848b8605Smrg
3417b8e80941Smrg  case 166:
3418b8e80941Smrg#line 1394 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3419848b8605Smrg    {
3420848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
3421848b8605Smrg	}
3422b8e80941Smrg#line 3423 "program_parse.tab.c" /* yacc.c:1645  */
3423848b8605Smrg    break;
3424848b8605Smrg
3425b8e80941Smrg  case 167:
3426b8e80941Smrg#line 1398 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3427848b8605Smrg    {
3428848b8605Smrg	   (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
3429848b8605Smrg	}
3430b8e80941Smrg#line 3431 "program_parse.tab.c" /* yacc.c:1645  */
3431848b8605Smrg    break;
3432848b8605Smrg
3433b8e80941Smrg  case 168:
3434b8e80941Smrg#line 1404 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3435848b8605Smrg    {
3436848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3437b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].integer);
3438848b8605Smrg	}
3439b8e80941Smrg#line 3440 "program_parse.tab.c" /* yacc.c:1645  */
3440848b8605Smrg    break;
3441848b8605Smrg
3442b8e80941Smrg  case 169:
3443b8e80941Smrg#line 1411 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3444848b8605Smrg    {
3445848b8605Smrg	   (yyval.integer) = STATE_FOG_COLOR;
3446848b8605Smrg	}
3447b8e80941Smrg#line 3448 "program_parse.tab.c" /* yacc.c:1645  */
3448848b8605Smrg    break;
3449848b8605Smrg
3450b8e80941Smrg  case 170:
3451b8e80941Smrg#line 1415 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3452848b8605Smrg    {
3453848b8605Smrg	   (yyval.integer) = STATE_FOG_PARAMS;
3454848b8605Smrg	}
3455b8e80941Smrg#line 3456 "program_parse.tab.c" /* yacc.c:1645  */
3456848b8605Smrg    break;
3457848b8605Smrg
3458b8e80941Smrg  case 171:
3459b8e80941Smrg#line 1421 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3460848b8605Smrg    {
3461848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3462848b8605Smrg	   (yyval.state)[0] = STATE_CLIPPLANE;
3463b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-2].integer);
3464848b8605Smrg	}
3465b8e80941Smrg#line 3466 "program_parse.tab.c" /* yacc.c:1645  */
3466848b8605Smrg    break;
3467848b8605Smrg
3468b8e80941Smrg  case 172:
3469b8e80941Smrg#line 1429 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3470848b8605Smrg    {
3471b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxClipPlanes) {
3472b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid clip plane selector");
3473848b8605Smrg	      YYERROR;
3474848b8605Smrg	   }
3475848b8605Smrg
3476b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3477848b8605Smrg	}
3478b8e80941Smrg#line 3479 "program_parse.tab.c" /* yacc.c:1645  */
3479848b8605Smrg    break;
3480848b8605Smrg
3481b8e80941Smrg  case 173:
3482b8e80941Smrg#line 1440 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3483848b8605Smrg    {
3484848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3485b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].integer);
3486848b8605Smrg	}
3487b8e80941Smrg#line 3488 "program_parse.tab.c" /* yacc.c:1645  */
3488848b8605Smrg    break;
3489848b8605Smrg
3490b8e80941Smrg  case 174:
3491b8e80941Smrg#line 1447 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3492848b8605Smrg    {
3493848b8605Smrg	   (yyval.integer) = STATE_POINT_SIZE;
3494848b8605Smrg	}
3495b8e80941Smrg#line 3496 "program_parse.tab.c" /* yacc.c:1645  */
3496848b8605Smrg    break;
3497848b8605Smrg
3498b8e80941Smrg  case 175:
3499b8e80941Smrg#line 1451 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3500848b8605Smrg    {
3501848b8605Smrg	   (yyval.integer) = STATE_POINT_ATTENUATION;
3502848b8605Smrg	}
3503b8e80941Smrg#line 3504 "program_parse.tab.c" /* yacc.c:1645  */
3504848b8605Smrg    break;
3505848b8605Smrg
3506b8e80941Smrg  case 176:
3507b8e80941Smrg#line 1457 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3508848b8605Smrg    {
3509b8e80941Smrg	   (yyval.state)[0] = (yyvsp[-4].state)[0];
3510b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-4].state)[1];
3511b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].integer);
3512b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].integer);
3513b8e80941Smrg	   (yyval.state)[4] = (yyvsp[-4].state)[2];
3514848b8605Smrg	}
3515b8e80941Smrg#line 3516 "program_parse.tab.c" /* yacc.c:1645  */
3516848b8605Smrg    break;
3517848b8605Smrg
3518b8e80941Smrg  case 177:
3519b8e80941Smrg#line 1467 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3520848b8605Smrg    {
3521b8e80941Smrg	   (yyval.state)[0] = (yyvsp[-1].state)[0];
3522b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].state)[1];
3523b8e80941Smrg	   (yyval.state)[2] = (yyvsp[0].state)[2];
3524b8e80941Smrg	   (yyval.state)[3] = (yyvsp[0].state)[3];
3525b8e80941Smrg	   (yyval.state)[4] = (yyvsp[-1].state)[2];
3526848b8605Smrg	}
3527b8e80941Smrg#line 3528 "program_parse.tab.c" /* yacc.c:1645  */
3528848b8605Smrg    break;
3529848b8605Smrg
3530b8e80941Smrg  case 178:
3531b8e80941Smrg#line 1477 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3532848b8605Smrg    {
3533848b8605Smrg	   (yyval.state)[2] = 0;
3534848b8605Smrg	   (yyval.state)[3] = 3;
3535848b8605Smrg	}
3536b8e80941Smrg#line 3537 "program_parse.tab.c" /* yacc.c:1645  */
3537848b8605Smrg    break;
3538848b8605Smrg
3539b8e80941Smrg  case 179:
3540b8e80941Smrg#line 1482 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3541848b8605Smrg    {
3542848b8605Smrg	   /* It seems logical that the matrix row range specifier would have
3543848b8605Smrg	    * to specify a range or more than one row (i.e., $5 > $3).
3544848b8605Smrg	    * However, the ARB_vertex_program spec says "a program will fail
3545848b8605Smrg	    * to load if <a> is greater than <b>."  This means that $3 == $5
3546848b8605Smrg	    * is valid.
3547848b8605Smrg	    */
3548b8e80941Smrg	   if ((yyvsp[-3].integer) > (yyvsp[-1].integer)) {
3549b8e80941Smrg	      yyerror(& (yylsp[-3]), state, "invalid matrix row range");
3550848b8605Smrg	      YYERROR;
3551848b8605Smrg	   }
3552848b8605Smrg
3553b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-3].integer);
3554b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].integer);
3555848b8605Smrg	}
3556b8e80941Smrg#line 3557 "program_parse.tab.c" /* yacc.c:1645  */
3557848b8605Smrg    break;
3558848b8605Smrg
3559b8e80941Smrg  case 180:
3560b8e80941Smrg#line 1500 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3561848b8605Smrg    {
3562b8e80941Smrg	   (yyval.state)[0] = (yyvsp[-1].state)[0];
3563b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].state)[1];
3564b8e80941Smrg	   (yyval.state)[2] = (yyvsp[0].integer);
3565848b8605Smrg	}
3566b8e80941Smrg#line 3567 "program_parse.tab.c" /* yacc.c:1645  */
3567848b8605Smrg    break;
3568848b8605Smrg
3569b8e80941Smrg  case 181:
3570b8e80941Smrg#line 1508 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3571848b8605Smrg    {
3572848b8605Smrg	   (yyval.integer) = 0;
3573848b8605Smrg	}
3574b8e80941Smrg#line 3575 "program_parse.tab.c" /* yacc.c:1645  */
3575848b8605Smrg    break;
3576848b8605Smrg
3577b8e80941Smrg  case 182:
3578b8e80941Smrg#line 1512 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3579848b8605Smrg    {
3580b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3581848b8605Smrg	}
3582b8e80941Smrg#line 3583 "program_parse.tab.c" /* yacc.c:1645  */
3583848b8605Smrg    break;
3584848b8605Smrg
3585b8e80941Smrg  case 183:
3586b8e80941Smrg#line 1518 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3587848b8605Smrg    {
3588848b8605Smrg	   (yyval.integer) = STATE_MATRIX_INVERSE;
3589848b8605Smrg	}
3590b8e80941Smrg#line 3591 "program_parse.tab.c" /* yacc.c:1645  */
3591848b8605Smrg    break;
3592848b8605Smrg
3593b8e80941Smrg  case 184:
3594b8e80941Smrg#line 1522 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3595848b8605Smrg    {
3596848b8605Smrg	   (yyval.integer) = STATE_MATRIX_TRANSPOSE;
3597848b8605Smrg	}
3598b8e80941Smrg#line 3599 "program_parse.tab.c" /* yacc.c:1645  */
3599848b8605Smrg    break;
3600848b8605Smrg
3601b8e80941Smrg  case 185:
3602b8e80941Smrg#line 1526 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3603848b8605Smrg    {
3604848b8605Smrg	   (yyval.integer) = STATE_MATRIX_INVTRANS;
3605848b8605Smrg	}
3606b8e80941Smrg#line 3607 "program_parse.tab.c" /* yacc.c:1645  */
3607848b8605Smrg    break;
3608848b8605Smrg
3609b8e80941Smrg  case 186:
3610b8e80941Smrg#line 1532 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3611848b8605Smrg    {
3612b8e80941Smrg	   if ((yyvsp[0].integer) > 3) {
3613b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid matrix row reference");
3614848b8605Smrg	      YYERROR;
3615848b8605Smrg	   }
3616848b8605Smrg
3617b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3618848b8605Smrg	}
3619b8e80941Smrg#line 3620 "program_parse.tab.c" /* yacc.c:1645  */
3620848b8605Smrg    break;
3621848b8605Smrg
3622b8e80941Smrg  case 187:
3623b8e80941Smrg#line 1543 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3624848b8605Smrg    {
3625848b8605Smrg	   (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
3626b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3627848b8605Smrg	}
3628b8e80941Smrg#line 3629 "program_parse.tab.c" /* yacc.c:1645  */
3629848b8605Smrg    break;
3630848b8605Smrg
3631b8e80941Smrg  case 188:
3632b8e80941Smrg#line 1548 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3633848b8605Smrg    {
3634848b8605Smrg	   (yyval.state)[0] = STATE_PROJECTION_MATRIX;
3635848b8605Smrg	   (yyval.state)[1] = 0;
3636848b8605Smrg	}
3637b8e80941Smrg#line 3638 "program_parse.tab.c" /* yacc.c:1645  */
3638848b8605Smrg    break;
3639848b8605Smrg
3640b8e80941Smrg  case 189:
3641b8e80941Smrg#line 1553 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3642848b8605Smrg    {
3643848b8605Smrg	   (yyval.state)[0] = STATE_MVP_MATRIX;
3644848b8605Smrg	   (yyval.state)[1] = 0;
3645848b8605Smrg	}
3646b8e80941Smrg#line 3647 "program_parse.tab.c" /* yacc.c:1645  */
3647848b8605Smrg    break;
3648848b8605Smrg
3649b8e80941Smrg  case 190:
3650b8e80941Smrg#line 1558 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3651848b8605Smrg    {
3652848b8605Smrg	   (yyval.state)[0] = STATE_TEXTURE_MATRIX;
3653b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3654848b8605Smrg	}
3655b8e80941Smrg#line 3656 "program_parse.tab.c" /* yacc.c:1645  */
3656848b8605Smrg    break;
3657848b8605Smrg
3658b8e80941Smrg  case 191:
3659b8e80941Smrg#line 1563 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3660848b8605Smrg    {
3661b8e80941Smrg	   yyerror(& (yylsp[-3]), state, "GL_ARB_matrix_palette not supported");
3662848b8605Smrg	   YYERROR;
3663848b8605Smrg	}
3664b8e80941Smrg#line 3665 "program_parse.tab.c" /* yacc.c:1645  */
3665848b8605Smrg    break;
3666848b8605Smrg
3667b8e80941Smrg  case 192:
3668b8e80941Smrg#line 1568 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3669848b8605Smrg    {
3670848b8605Smrg	   (yyval.state)[0] = STATE_PROGRAM_MATRIX;
3671b8e80941Smrg	   (yyval.state)[1] = (yyvsp[-1].integer);
3672848b8605Smrg	}
3673b8e80941Smrg#line 3674 "program_parse.tab.c" /* yacc.c:1645  */
3674848b8605Smrg    break;
3675848b8605Smrg
3676b8e80941Smrg  case 193:
3677b8e80941Smrg#line 1575 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3678848b8605Smrg    {
3679848b8605Smrg	   (yyval.integer) = 0;
3680848b8605Smrg	}
3681b8e80941Smrg#line 3682 "program_parse.tab.c" /* yacc.c:1645  */
3682848b8605Smrg    break;
3683848b8605Smrg
3684b8e80941Smrg  case 194:
3685b8e80941Smrg#line 1579 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3686848b8605Smrg    {
3687b8e80941Smrg	   (yyval.integer) = (yyvsp[-1].integer);
3688848b8605Smrg	}
3689b8e80941Smrg#line 3690 "program_parse.tab.c" /* yacc.c:1645  */
3690848b8605Smrg    break;
3691848b8605Smrg
3692b8e80941Smrg  case 195:
3693b8e80941Smrg#line 1584 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3694848b8605Smrg    {
3695848b8605Smrg	   /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
3696848b8605Smrg	    * zero is valid.
3697848b8605Smrg	    */
3698b8e80941Smrg	   if ((yyvsp[0].integer) != 0) {
3699b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid modelview matrix index");
3700848b8605Smrg	      YYERROR;
3701848b8605Smrg	   }
3702848b8605Smrg
3703b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3704848b8605Smrg	}
3705b8e80941Smrg#line 3706 "program_parse.tab.c" /* yacc.c:1645  */
3706848b8605Smrg    break;
3707848b8605Smrg
3708b8e80941Smrg  case 196:
3709b8e80941Smrg#line 1597 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3710848b8605Smrg    {
3711848b8605Smrg	   /* Since GL_ARB_matrix_palette isn't supported, just let any value
3712848b8605Smrg	    * through here.  The error will be generated later.
3713848b8605Smrg	    */
3714b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3715848b8605Smrg	}
3716b8e80941Smrg#line 3717 "program_parse.tab.c" /* yacc.c:1645  */
3717848b8605Smrg    break;
3718848b8605Smrg
3719b8e80941Smrg  case 197:
3720b8e80941Smrg#line 1605 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3721848b8605Smrg    {
3722b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxProgramMatrices) {
3723b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program matrix selector");
3724848b8605Smrg	      YYERROR;
3725848b8605Smrg	   }
3726848b8605Smrg
3727b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3728848b8605Smrg	}
3729b8e80941Smrg#line 3730 "program_parse.tab.c" /* yacc.c:1645  */
3730848b8605Smrg    break;
3731848b8605Smrg
3732b8e80941Smrg  case 198:
3733b8e80941Smrg#line 1616 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3734848b8605Smrg    {
3735848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3736848b8605Smrg	   (yyval.state)[0] = STATE_DEPTH_RANGE;
3737848b8605Smrg	}
3738b8e80941Smrg#line 3739 "program_parse.tab.c" /* yacc.c:1645  */
3739848b8605Smrg    break;
3740848b8605Smrg
3741b8e80941Smrg  case 203:
3742b8e80941Smrg#line 1628 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3743848b8605Smrg    {
3744848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3745848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
3746848b8605Smrg	   (yyval.state)[1] = STATE_ENV;
3747b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].state)[0];
3748b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].state)[1];
3749848b8605Smrg	}
3750b8e80941Smrg#line 3751 "program_parse.tab.c" /* yacc.c:1645  */
3751848b8605Smrg    break;
3752848b8605Smrg
3753b8e80941Smrg  case 204:
3754b8e80941Smrg#line 1638 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3755848b8605Smrg    {
3756b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].integer);
3757b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3758848b8605Smrg	}
3759b8e80941Smrg#line 3760 "program_parse.tab.c" /* yacc.c:1645  */
3760848b8605Smrg    break;
3761848b8605Smrg
3762b8e80941Smrg  case 205:
3763b8e80941Smrg#line 1643 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3764848b8605Smrg    {
3765b8e80941Smrg	   (yyval.state)[0] = (yyvsp[-2].integer);
3766b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3767848b8605Smrg	}
3768b8e80941Smrg#line 3769 "program_parse.tab.c" /* yacc.c:1645  */
3769848b8605Smrg    break;
3770848b8605Smrg
3771b8e80941Smrg  case 206:
3772b8e80941Smrg#line 1650 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3773848b8605Smrg    {
3774848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3775848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
3776848b8605Smrg	   (yyval.state)[1] = STATE_ENV;
3777b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].integer);
3778b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].integer);
3779848b8605Smrg	}
3780b8e80941Smrg#line 3781 "program_parse.tab.c" /* yacc.c:1645  */
3781848b8605Smrg    break;
3782848b8605Smrg
3783b8e80941Smrg  case 207:
3784b8e80941Smrg#line 1660 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3785848b8605Smrg    {
3786848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3787848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
3788848b8605Smrg	   (yyval.state)[1] = STATE_LOCAL;
3789b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].state)[0];
3790b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].state)[1];
3791848b8605Smrg	}
3792b8e80941Smrg#line 3793 "program_parse.tab.c" /* yacc.c:1645  */
3793848b8605Smrg    break;
3794848b8605Smrg
3795b8e80941Smrg  case 208:
3796b8e80941Smrg#line 1669 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3797848b8605Smrg    {
3798b8e80941Smrg	   (yyval.state)[0] = (yyvsp[0].integer);
3799b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3800848b8605Smrg	}
3801b8e80941Smrg#line 3802 "program_parse.tab.c" /* yacc.c:1645  */
3802848b8605Smrg    break;
3803848b8605Smrg
3804b8e80941Smrg  case 209:
3805b8e80941Smrg#line 1674 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3806848b8605Smrg    {
3807b8e80941Smrg	   (yyval.state)[0] = (yyvsp[-2].integer);
3808b8e80941Smrg	   (yyval.state)[1] = (yyvsp[0].integer);
3809848b8605Smrg	}
3810b8e80941Smrg#line 3811 "program_parse.tab.c" /* yacc.c:1645  */
3811848b8605Smrg    break;
3812848b8605Smrg
3813b8e80941Smrg  case 210:
3814b8e80941Smrg#line 1681 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3815848b8605Smrg    {
3816848b8605Smrg	   memset((yyval.state), 0, sizeof((yyval.state)));
3817848b8605Smrg	   (yyval.state)[0] = state->state_param_enum;
3818848b8605Smrg	   (yyval.state)[1] = STATE_LOCAL;
3819b8e80941Smrg	   (yyval.state)[2] = (yyvsp[-1].integer);
3820b8e80941Smrg	   (yyval.state)[3] = (yyvsp[-1].integer);
3821848b8605Smrg	}
3822b8e80941Smrg#line 3823 "program_parse.tab.c" /* yacc.c:1645  */
3823848b8605Smrg    break;
3824848b8605Smrg
3825b8e80941Smrg  case 211:
3826b8e80941Smrg#line 1691 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3827848b8605Smrg    {
3828b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->limits->MaxEnvParams) {
3829b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid environment parameter reference");
3830848b8605Smrg	      YYERROR;
3831848b8605Smrg	   }
3832b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3833848b8605Smrg	}
3834b8e80941Smrg#line 3835 "program_parse.tab.c" /* yacc.c:1645  */
3835848b8605Smrg    break;
3836848b8605Smrg
3837b8e80941Smrg  case 212:
3838b8e80941Smrg#line 1701 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3839848b8605Smrg    {
3840b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->limits->MaxLocalParams) {
3841b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid local parameter reference");
3842848b8605Smrg	      YYERROR;
3843848b8605Smrg	   }
3844b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
3845848b8605Smrg	}
3846b8e80941Smrg#line 3847 "program_parse.tab.c" /* yacc.c:1645  */
3847848b8605Smrg    break;
3848848b8605Smrg
3849b8e80941Smrg  case 217:
3850b8e80941Smrg#line 1716 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3851848b8605Smrg    {
3852848b8605Smrg	   (yyval.vector).count = 4;
3853b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[0].real);
3854b8e80941Smrg	   (yyval.vector).data[1].f = (yyvsp[0].real);
3855b8e80941Smrg	   (yyval.vector).data[2].f = (yyvsp[0].real);
3856b8e80941Smrg	   (yyval.vector).data[3].f = (yyvsp[0].real);
3857848b8605Smrg	}
3858b8e80941Smrg#line 3859 "program_parse.tab.c" /* yacc.c:1645  */
3859848b8605Smrg    break;
3860848b8605Smrg
3861b8e80941Smrg  case 218:
3862b8e80941Smrg#line 1726 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3863848b8605Smrg    {
3864848b8605Smrg	   (yyval.vector).count = 1;
3865b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[0].real);
3866b8e80941Smrg	   (yyval.vector).data[1].f = (yyvsp[0].real);
3867b8e80941Smrg	   (yyval.vector).data[2].f = (yyvsp[0].real);
3868b8e80941Smrg	   (yyval.vector).data[3].f = (yyvsp[0].real);
3869848b8605Smrg	}
3870b8e80941Smrg#line 3871 "program_parse.tab.c" /* yacc.c:1645  */
3871848b8605Smrg    break;
3872848b8605Smrg
3873b8e80941Smrg  case 219:
3874b8e80941Smrg#line 1734 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3875848b8605Smrg    {
3876848b8605Smrg	   (yyval.vector).count = 1;
3877b8e80941Smrg	   (yyval.vector).data[0].f = (float) (yyvsp[0].integer);
3878b8e80941Smrg	   (yyval.vector).data[1].f = (float) (yyvsp[0].integer);
3879b8e80941Smrg	   (yyval.vector).data[2].f = (float) (yyvsp[0].integer);
3880b8e80941Smrg	   (yyval.vector).data[3].f = (float) (yyvsp[0].integer);
3881848b8605Smrg	}
3882b8e80941Smrg#line 3883 "program_parse.tab.c" /* yacc.c:1645  */
3883848b8605Smrg    break;
3884848b8605Smrg
3885b8e80941Smrg  case 220:
3886b8e80941Smrg#line 1744 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3887848b8605Smrg    {
3888848b8605Smrg	   (yyval.vector).count = 4;
3889b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[-1].real);
3890848b8605Smrg	   (yyval.vector).data[1].f = 0.0f;
3891848b8605Smrg	   (yyval.vector).data[2].f = 0.0f;
3892848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
3893848b8605Smrg	}
3894b8e80941Smrg#line 3895 "program_parse.tab.c" /* yacc.c:1645  */
3895848b8605Smrg    break;
3896848b8605Smrg
3897b8e80941Smrg  case 221:
3898b8e80941Smrg#line 1752 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3899848b8605Smrg    {
3900848b8605Smrg	   (yyval.vector).count = 4;
3901b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[-3].real);
3902b8e80941Smrg	   (yyval.vector).data[1].f = (yyvsp[-1].real);
3903848b8605Smrg	   (yyval.vector).data[2].f = 0.0f;
3904848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
3905848b8605Smrg	}
3906b8e80941Smrg#line 3907 "program_parse.tab.c" /* yacc.c:1645  */
3907848b8605Smrg    break;
3908848b8605Smrg
3909b8e80941Smrg  case 222:
3910b8e80941Smrg#line 1761 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3911848b8605Smrg    {
3912848b8605Smrg	   (yyval.vector).count = 4;
3913b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[-5].real);
3914b8e80941Smrg	   (yyval.vector).data[1].f = (yyvsp[-3].real);
3915b8e80941Smrg	   (yyval.vector).data[2].f = (yyvsp[-1].real);
3916848b8605Smrg	   (yyval.vector).data[3].f = 1.0f;
3917848b8605Smrg	}
3918b8e80941Smrg#line 3919 "program_parse.tab.c" /* yacc.c:1645  */
3919848b8605Smrg    break;
3920848b8605Smrg
3921b8e80941Smrg  case 223:
3922b8e80941Smrg#line 1770 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3923848b8605Smrg    {
3924848b8605Smrg	   (yyval.vector).count = 4;
3925b8e80941Smrg	   (yyval.vector).data[0].f = (yyvsp[-7].real);
3926b8e80941Smrg	   (yyval.vector).data[1].f = (yyvsp[-5].real);
3927b8e80941Smrg	   (yyval.vector).data[2].f = (yyvsp[-3].real);
3928b8e80941Smrg	   (yyval.vector).data[3].f = (yyvsp[-1].real);
3929848b8605Smrg	}
3930b8e80941Smrg#line 3931 "program_parse.tab.c" /* yacc.c:1645  */
3931848b8605Smrg    break;
3932848b8605Smrg
3933b8e80941Smrg  case 224:
3934b8e80941Smrg#line 1780 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3935848b8605Smrg    {
3936b8e80941Smrg	   (yyval.real) = ((yyvsp[-1].negate)) ? -(yyvsp[0].real) : (yyvsp[0].real);
3937848b8605Smrg	}
3938b8e80941Smrg#line 3939 "program_parse.tab.c" /* yacc.c:1645  */
3939848b8605Smrg    break;
3940848b8605Smrg
3941b8e80941Smrg  case 225:
3942b8e80941Smrg#line 1784 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3943848b8605Smrg    {
3944b8e80941Smrg	   (yyval.real) = (float)(((yyvsp[-1].negate)) ? -(yyvsp[0].integer) : (yyvsp[0].integer));
3945848b8605Smrg	}
3946b8e80941Smrg#line 3947 "program_parse.tab.c" /* yacc.c:1645  */
3947848b8605Smrg    break;
3948848b8605Smrg
3949b8e80941Smrg  case 226:
3950b8e80941Smrg#line 1789 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3951848b8605Smrg    { (yyval.negate) = FALSE; }
3952b8e80941Smrg#line 3953 "program_parse.tab.c" /* yacc.c:1645  */
3953848b8605Smrg    break;
3954848b8605Smrg
3955b8e80941Smrg  case 227:
3956b8e80941Smrg#line 1790 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3957848b8605Smrg    { (yyval.negate) = TRUE;  }
3958b8e80941Smrg#line 3959 "program_parse.tab.c" /* yacc.c:1645  */
3959848b8605Smrg    break;
3960848b8605Smrg
3961b8e80941Smrg  case 228:
3962b8e80941Smrg#line 1791 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3963848b8605Smrg    { (yyval.negate) = FALSE; }
3964b8e80941Smrg#line 3965 "program_parse.tab.c" /* yacc.c:1645  */
3965848b8605Smrg    break;
3966848b8605Smrg
3967b8e80941Smrg  case 229:
3968b8e80941Smrg#line 1794 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3969b8e80941Smrg    { (yyval.integer) = (yyvsp[0].integer); }
3970b8e80941Smrg#line 3971 "program_parse.tab.c" /* yacc.c:1645  */
3971848b8605Smrg    break;
3972848b8605Smrg
3973b8e80941Smrg  case 231:
3974b8e80941Smrg#line 1797 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3975b8e80941Smrg    { (yyval.integer) = (yyvsp[0].integer); }
3976b8e80941Smrg#line 3977 "program_parse.tab.c" /* yacc.c:1645  */
3977848b8605Smrg    break;
3978848b8605Smrg
3979b8e80941Smrg  case 233:
3980b8e80941Smrg#line 1801 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3981848b8605Smrg    {
3982b8e80941Smrg	   if (!declare_variable(state, (yyvsp[0].string), (yyvsp[-3].integer), & (yylsp[0]))) {
3983b8e80941Smrg	      free((yyvsp[0].string));
3984848b8605Smrg	      YYERROR;
3985848b8605Smrg	   }
3986848b8605Smrg	}
3987b8e80941Smrg#line 3988 "program_parse.tab.c" /* yacc.c:1645  */
3988848b8605Smrg    break;
3989848b8605Smrg
3990b8e80941Smrg  case 234:
3991b8e80941Smrg#line 1808 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
3992848b8605Smrg    {
3993b8e80941Smrg	   if (!declare_variable(state, (yyvsp[0].string), (yyvsp[-1].integer), & (yylsp[0]))) {
3994b8e80941Smrg	      free((yyvsp[0].string));
3995848b8605Smrg	      YYERROR;
3996848b8605Smrg	   }
3997848b8605Smrg	}
3998b8e80941Smrg#line 3999 "program_parse.tab.c" /* yacc.c:1645  */
3999848b8605Smrg    break;
4000848b8605Smrg
4001b8e80941Smrg  case 235:
4002b8e80941Smrg#line 1817 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4003848b8605Smrg    {
4004848b8605Smrg	   struct asm_symbol *const s =
4005b8e80941Smrg	      declare_variable(state, (yyvsp[-2].string), at_output, & (yylsp[-2]));
4006848b8605Smrg
4007848b8605Smrg	   if (s == NULL) {
4008b8e80941Smrg	      free((yyvsp[-2].string));
4009848b8605Smrg	      YYERROR;
4010848b8605Smrg	   } else {
4011b8e80941Smrg	      s->output_binding = (yyvsp[0].result);
4012848b8605Smrg	   }
4013848b8605Smrg	}
4014b8e80941Smrg#line 4015 "program_parse.tab.c" /* yacc.c:1645  */
4015848b8605Smrg    break;
4016848b8605Smrg
4017b8e80941Smrg  case 236:
4018b8e80941Smrg#line 1831 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4019848b8605Smrg    {
4020848b8605Smrg	   if (state->mode == ARB_vertex) {
4021848b8605Smrg	      (yyval.result) = VARYING_SLOT_POS;
4022848b8605Smrg	   } else {
4023b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4024848b8605Smrg	      YYERROR;
4025848b8605Smrg	   }
4026848b8605Smrg	}
4027b8e80941Smrg#line 4028 "program_parse.tab.c" /* yacc.c:1645  */
4028848b8605Smrg    break;
4029848b8605Smrg
4030b8e80941Smrg  case 237:
4031b8e80941Smrg#line 1840 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4032848b8605Smrg    {
4033848b8605Smrg	   if (state->mode == ARB_vertex) {
4034848b8605Smrg	      (yyval.result) = VARYING_SLOT_FOGC;
4035848b8605Smrg	   } else {
4036b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4037848b8605Smrg	      YYERROR;
4038848b8605Smrg	   }
4039848b8605Smrg	}
4040b8e80941Smrg#line 4041 "program_parse.tab.c" /* yacc.c:1645  */
4041848b8605Smrg    break;
4042848b8605Smrg
4043b8e80941Smrg  case 238:
4044b8e80941Smrg#line 1849 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4045848b8605Smrg    {
4046b8e80941Smrg	   (yyval.result) = (yyvsp[0].result);
4047848b8605Smrg	}
4048b8e80941Smrg#line 4049 "program_parse.tab.c" /* yacc.c:1645  */
4049848b8605Smrg    break;
4050848b8605Smrg
4051b8e80941Smrg  case 239:
4052b8e80941Smrg#line 1853 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4053848b8605Smrg    {
4054848b8605Smrg	   if (state->mode == ARB_vertex) {
4055848b8605Smrg	      (yyval.result) = VARYING_SLOT_PSIZ;
4056848b8605Smrg	   } else {
4057b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4058848b8605Smrg	      YYERROR;
4059848b8605Smrg	   }
4060848b8605Smrg	}
4061b8e80941Smrg#line 4062 "program_parse.tab.c" /* yacc.c:1645  */
4062848b8605Smrg    break;
4063848b8605Smrg
4064b8e80941Smrg  case 240:
4065b8e80941Smrg#line 1862 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4066848b8605Smrg    {
4067848b8605Smrg	   if (state->mode == ARB_vertex) {
4068b8e80941Smrg	      (yyval.result) = VARYING_SLOT_TEX0 + (yyvsp[0].integer);
4069848b8605Smrg	   } else {
4070b8e80941Smrg	      yyerror(& (yylsp[-1]), state, "invalid program result name");
4071848b8605Smrg	      YYERROR;
4072848b8605Smrg	   }
4073848b8605Smrg	}
4074b8e80941Smrg#line 4075 "program_parse.tab.c" /* yacc.c:1645  */
4075848b8605Smrg    break;
4076848b8605Smrg
4077b8e80941Smrg  case 241:
4078b8e80941Smrg#line 1871 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4079848b8605Smrg    {
4080848b8605Smrg	   if (state->mode == ARB_fragment) {
4081848b8605Smrg	      (yyval.result) = FRAG_RESULT_DEPTH;
4082848b8605Smrg	   } else {
4083b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4084848b8605Smrg	      YYERROR;
4085848b8605Smrg	   }
4086848b8605Smrg	}
4087b8e80941Smrg#line 4088 "program_parse.tab.c" /* yacc.c:1645  */
4088848b8605Smrg    break;
4089848b8605Smrg
4090b8e80941Smrg  case 242:
4091b8e80941Smrg#line 1882 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4092848b8605Smrg    {
4093b8e80941Smrg	   (yyval.result) = (yyvsp[-1].integer) + (yyvsp[0].integer);
4094848b8605Smrg	}
4095b8e80941Smrg#line 4096 "program_parse.tab.c" /* yacc.c:1645  */
4096848b8605Smrg    break;
4097848b8605Smrg
4098b8e80941Smrg  case 243:
4099b8e80941Smrg#line 1888 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4100848b8605Smrg    {
4101848b8605Smrg	   if (state->mode == ARB_vertex) {
4102848b8605Smrg	      (yyval.integer) = VARYING_SLOT_COL0;
4103848b8605Smrg	   } else {
4104848b8605Smrg	      if (state->option.DrawBuffers)
4105848b8605Smrg		 (yyval.integer) = FRAG_RESULT_DATA0;
4106848b8605Smrg	      else
4107848b8605Smrg		 (yyval.integer) = FRAG_RESULT_COLOR;
4108848b8605Smrg	   }
4109848b8605Smrg	}
4110b8e80941Smrg#line 4111 "program_parse.tab.c" /* yacc.c:1645  */
4111848b8605Smrg    break;
4112848b8605Smrg
4113b8e80941Smrg  case 244:
4114b8e80941Smrg#line 1899 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4115848b8605Smrg    {
4116848b8605Smrg	   if (state->mode == ARB_vertex) {
4117b8e80941Smrg	      yyerror(& (yylsp[-2]), state, "invalid program result name");
4118848b8605Smrg	      YYERROR;
4119848b8605Smrg	   } else {
4120848b8605Smrg	      if (!state->option.DrawBuffers) {
4121848b8605Smrg		 /* From the ARB_draw_buffers spec (same text exists
4122848b8605Smrg		  * for ATI_draw_buffers):
4123848b8605Smrg		  *
4124848b8605Smrg		  *     If this option is not specified, a fragment
4125848b8605Smrg		  *     program that attempts to bind
4126848b8605Smrg		  *     "result.color[n]" will fail to load, and only
4127848b8605Smrg		  *     "result.color" will be allowed.
4128848b8605Smrg		  */
4129b8e80941Smrg		 yyerror(& (yylsp[-2]), state,
4130848b8605Smrg			 "result.color[] used without "
4131848b8605Smrg			 "`OPTION ARB_draw_buffers' or "
4132848b8605Smrg			 "`OPTION ATI_draw_buffers'");
4133848b8605Smrg		 YYERROR;
4134b8e80941Smrg	      } else if ((yyvsp[-1].integer) >= state->MaxDrawBuffers) {
4135b8e80941Smrg		 yyerror(& (yylsp[-2]), state,
4136848b8605Smrg			 "result.color[] exceeds MAX_DRAW_BUFFERS_ARB");
4137848b8605Smrg		 YYERROR;
4138848b8605Smrg	      }
4139b8e80941Smrg	      (yyval.integer) = FRAG_RESULT_DATA0 + (yyvsp[-1].integer);
4140848b8605Smrg	   }
4141848b8605Smrg	}
4142b8e80941Smrg#line 4143 "program_parse.tab.c" /* yacc.c:1645  */
4143848b8605Smrg    break;
4144848b8605Smrg
4145b8e80941Smrg  case 245:
4146b8e80941Smrg#line 1927 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4147848b8605Smrg    {
4148848b8605Smrg	   if (state->mode == ARB_vertex) {
4149848b8605Smrg	      (yyval.integer) = VARYING_SLOT_COL0;
4150848b8605Smrg	   } else {
4151b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4152848b8605Smrg	      YYERROR;
4153848b8605Smrg	   }
4154848b8605Smrg	}
4155b8e80941Smrg#line 4156 "program_parse.tab.c" /* yacc.c:1645  */
4156848b8605Smrg    break;
4157848b8605Smrg
4158b8e80941Smrg  case 246:
4159b8e80941Smrg#line 1936 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4160848b8605Smrg    {
4161848b8605Smrg	   if (state->mode == ARB_vertex) {
4162848b8605Smrg	      (yyval.integer) = VARYING_SLOT_BFC0;
4163848b8605Smrg	   } else {
4164b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4165848b8605Smrg	      YYERROR;
4166848b8605Smrg	   }
4167848b8605Smrg	}
4168b8e80941Smrg#line 4169 "program_parse.tab.c" /* yacc.c:1645  */
4169848b8605Smrg    break;
4170848b8605Smrg
4171b8e80941Smrg  case 247:
4172b8e80941Smrg#line 1947 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4173848b8605Smrg    {
4174848b8605Smrg	   (yyval.integer) = 0;
4175848b8605Smrg	}
4176b8e80941Smrg#line 4177 "program_parse.tab.c" /* yacc.c:1645  */
4177848b8605Smrg    break;
4178848b8605Smrg
4179b8e80941Smrg  case 248:
4180b8e80941Smrg#line 1951 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4181848b8605Smrg    {
4182848b8605Smrg	   if (state->mode == ARB_vertex) {
4183848b8605Smrg	      (yyval.integer) = 0;
4184848b8605Smrg	   } else {
4185b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4186848b8605Smrg	      YYERROR;
4187848b8605Smrg	   }
4188848b8605Smrg	}
4189b8e80941Smrg#line 4190 "program_parse.tab.c" /* yacc.c:1645  */
4190848b8605Smrg    break;
4191848b8605Smrg
4192b8e80941Smrg  case 249:
4193b8e80941Smrg#line 1960 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4194848b8605Smrg    {
4195848b8605Smrg	   if (state->mode == ARB_vertex) {
4196848b8605Smrg	      (yyval.integer) = 1;
4197848b8605Smrg	   } else {
4198b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid program result name");
4199848b8605Smrg	      YYERROR;
4200848b8605Smrg	   }
4201848b8605Smrg	}
4202b8e80941Smrg#line 4203 "program_parse.tab.c" /* yacc.c:1645  */
4203848b8605Smrg    break;
4204848b8605Smrg
4205b8e80941Smrg  case 250:
4206b8e80941Smrg#line 1970 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4207848b8605Smrg    { (yyval.integer) = 0; }
4208b8e80941Smrg#line 4209 "program_parse.tab.c" /* yacc.c:1645  */
4209848b8605Smrg    break;
4210848b8605Smrg
4211b8e80941Smrg  case 251:
4212b8e80941Smrg#line 1971 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4213848b8605Smrg    { (yyval.integer) = 0; }
4214b8e80941Smrg#line 4215 "program_parse.tab.c" /* yacc.c:1645  */
4215848b8605Smrg    break;
4216848b8605Smrg
4217b8e80941Smrg  case 252:
4218b8e80941Smrg#line 1972 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4219848b8605Smrg    { (yyval.integer) = 1; }
4220b8e80941Smrg#line 4221 "program_parse.tab.c" /* yacc.c:1645  */
4221848b8605Smrg    break;
4222848b8605Smrg
4223b8e80941Smrg  case 253:
4224b8e80941Smrg#line 1975 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4225848b8605Smrg    { (yyval.integer) = 0; }
4226b8e80941Smrg#line 4227 "program_parse.tab.c" /* yacc.c:1645  */
4227848b8605Smrg    break;
4228848b8605Smrg
4229b8e80941Smrg  case 254:
4230b8e80941Smrg#line 1976 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4231848b8605Smrg    { (yyval.integer) = 0; }
4232b8e80941Smrg#line 4233 "program_parse.tab.c" /* yacc.c:1645  */
4233848b8605Smrg    break;
4234848b8605Smrg
4235b8e80941Smrg  case 255:
4236b8e80941Smrg#line 1977 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4237848b8605Smrg    { (yyval.integer) = 1; }
4238b8e80941Smrg#line 4239 "program_parse.tab.c" /* yacc.c:1645  */
4239848b8605Smrg    break;
4240848b8605Smrg
4241b8e80941Smrg  case 256:
4242b8e80941Smrg#line 1980 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4243848b8605Smrg    { (yyval.integer) = 0; }
4244b8e80941Smrg#line 4245 "program_parse.tab.c" /* yacc.c:1645  */
4245848b8605Smrg    break;
4246848b8605Smrg
4247b8e80941Smrg  case 257:
4248b8e80941Smrg#line 1981 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4249b8e80941Smrg    { (yyval.integer) = (yyvsp[-1].integer); }
4250b8e80941Smrg#line 4251 "program_parse.tab.c" /* yacc.c:1645  */
4251848b8605Smrg    break;
4252848b8605Smrg
4253b8e80941Smrg  case 258:
4254b8e80941Smrg#line 1984 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4255848b8605Smrg    { (yyval.integer) = 0; }
4256b8e80941Smrg#line 4257 "program_parse.tab.c" /* yacc.c:1645  */
4257848b8605Smrg    break;
4258848b8605Smrg
4259b8e80941Smrg  case 259:
4260b8e80941Smrg#line 1985 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4261b8e80941Smrg    { (yyval.integer) = (yyvsp[-1].integer); }
4262b8e80941Smrg#line 4263 "program_parse.tab.c" /* yacc.c:1645  */
4263848b8605Smrg    break;
4264848b8605Smrg
4265b8e80941Smrg  case 260:
4266b8e80941Smrg#line 1988 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4267848b8605Smrg    { (yyval.integer) = 0; }
4268b8e80941Smrg#line 4269 "program_parse.tab.c" /* yacc.c:1645  */
4269848b8605Smrg    break;
4270848b8605Smrg
4271b8e80941Smrg  case 261:
4272b8e80941Smrg#line 1989 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4273b8e80941Smrg    { (yyval.integer) = (yyvsp[-1].integer); }
4274b8e80941Smrg#line 4275 "program_parse.tab.c" /* yacc.c:1645  */
4275848b8605Smrg    break;
4276848b8605Smrg
4277b8e80941Smrg  case 262:
4278b8e80941Smrg#line 1993 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4279848b8605Smrg    {
4280b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxTextureCoordUnits) {
4281b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid texture coordinate unit selector");
4282848b8605Smrg	      YYERROR;
4283848b8605Smrg	   }
4284848b8605Smrg
4285b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
4286848b8605Smrg	}
4287b8e80941Smrg#line 4288 "program_parse.tab.c" /* yacc.c:1645  */
4288848b8605Smrg    break;
4289848b8605Smrg
4290b8e80941Smrg  case 263:
4291b8e80941Smrg#line 2004 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4292848b8605Smrg    {
4293b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxTextureImageUnits) {
4294b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid texture image unit selector");
4295848b8605Smrg	      YYERROR;
4296848b8605Smrg	   }
4297848b8605Smrg
4298b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
4299848b8605Smrg	}
4300b8e80941Smrg#line 4301 "program_parse.tab.c" /* yacc.c:1645  */
4301848b8605Smrg    break;
4302848b8605Smrg
4303b8e80941Smrg  case 264:
4304b8e80941Smrg#line 2015 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4305848b8605Smrg    {
4306b8e80941Smrg	   if ((unsigned) (yyvsp[0].integer) >= state->MaxTextureUnits) {
4307b8e80941Smrg	      yyerror(& (yylsp[0]), state, "invalid texture unit selector");
4308848b8605Smrg	      YYERROR;
4309848b8605Smrg	   }
4310848b8605Smrg
4311b8e80941Smrg	   (yyval.integer) = (yyvsp[0].integer);
4312848b8605Smrg	}
4313b8e80941Smrg#line 4314 "program_parse.tab.c" /* yacc.c:1645  */
4314848b8605Smrg    break;
4315848b8605Smrg
4316b8e80941Smrg  case 265:
4317b8e80941Smrg#line 2026 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1645  */
4318848b8605Smrg    {
4319848b8605Smrg	   struct asm_symbol *exist = (struct asm_symbol *)
4320b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[-2].string));
4321848b8605Smrg	   struct asm_symbol *target = (struct asm_symbol *)
4322b8e80941Smrg              _mesa_symbol_table_find_symbol(state->st, (yyvsp[0].string));
4323848b8605Smrg
4324b8e80941Smrg	   free((yyvsp[0].string));
4325848b8605Smrg
4326848b8605Smrg	   if (exist != NULL) {
4327848b8605Smrg	      char m[1000];
4328b8e80941Smrg	      _mesa_snprintf(m, sizeof(m), "redeclared identifier: %s", (yyvsp[-2].string));
4329b8e80941Smrg	      free((yyvsp[-2].string));
4330b8e80941Smrg	      yyerror(& (yylsp[-2]), state, m);
4331848b8605Smrg	      YYERROR;
4332848b8605Smrg	   } else if (target == NULL) {
4333b8e80941Smrg	      free((yyvsp[-2].string));
4334b8e80941Smrg	      yyerror(& (yylsp[0]), state,
4335848b8605Smrg		      "undefined variable binding in ALIAS statement");
4336848b8605Smrg	      YYERROR;
4337848b8605Smrg	   } else {
4338b8e80941Smrg              _mesa_symbol_table_add_symbol(state->st, (yyvsp[-2].string), target);
4339848b8605Smrg	   }
4340848b8605Smrg	}
4341b8e80941Smrg#line 4342 "program_parse.tab.c" /* yacc.c:1645  */
4342848b8605Smrg    break;
4343848b8605Smrg
4344848b8605Smrg
4345b8e80941Smrg#line 4346 "program_parse.tab.c" /* yacc.c:1645  */
4346848b8605Smrg      default: break;
4347848b8605Smrg    }
4348848b8605Smrg  /* User semantic actions sometimes alter yychar, and that requires
4349848b8605Smrg     that yytoken be updated with the new translation.  We take the
4350848b8605Smrg     approach of translating immediately before every use of yytoken.
4351848b8605Smrg     One alternative is translating here after every semantic action,
4352848b8605Smrg     but that translation would be missed if the semantic action invokes
4353848b8605Smrg     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4354848b8605Smrg     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
4355848b8605Smrg     incorrect destructor might then be invoked immediately.  In the
4356848b8605Smrg     case of YYERROR or YYBACKUP, subsequent parser actions might lead
4357848b8605Smrg     to an incorrect destructor call or verbose syntax error message
4358848b8605Smrg     before the lookahead is translated.  */
4359848b8605Smrg  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
4360848b8605Smrg
4361848b8605Smrg  YYPOPSTACK (yylen);
4362848b8605Smrg  yylen = 0;
4363848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
4364848b8605Smrg
4365848b8605Smrg  *++yyvsp = yyval;
4366848b8605Smrg  *++yylsp = yyloc;
4367848b8605Smrg
4368b8e80941Smrg  /* Now 'shift' the result of the reduction.  Determine what state
4369848b8605Smrg     that goes to, based on the state we popped back to and the rule
4370848b8605Smrg     number reduced by.  */
4371b8e80941Smrg  {
4372b8e80941Smrg    const int yylhs = yyr1[yyn] - YYNTOKENS;
4373b8e80941Smrg    const int yyi = yypgoto[yylhs] + *yyssp;
4374b8e80941Smrg    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
4375b8e80941Smrg               ? yytable[yyi]
4376b8e80941Smrg               : yydefgoto[yylhs]);
4377b8e80941Smrg  }
4378848b8605Smrg
4379848b8605Smrg  goto yynewstate;
4380848b8605Smrg
4381848b8605Smrg
4382b8e80941Smrg/*--------------------------------------.
4383b8e80941Smrg| yyerrlab -- here on detecting error.  |
4384b8e80941Smrg`--------------------------------------*/
4385848b8605Smrgyyerrlab:
4386848b8605Smrg  /* Make sure we have latest lookahead translation.  See comments at
4387848b8605Smrg     user semantic actions for why this is necessary.  */
4388848b8605Smrg  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
4389848b8605Smrg
4390848b8605Smrg  /* If not already recovering from an error, report this error.  */
4391848b8605Smrg  if (!yyerrstatus)
4392848b8605Smrg    {
4393848b8605Smrg      ++yynerrs;
4394848b8605Smrg#if ! YYERROR_VERBOSE
4395848b8605Smrg      yyerror (&yylloc, state, YY_("syntax error"));
4396848b8605Smrg#else
4397848b8605Smrg# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
4398848b8605Smrg                                        yyssp, yytoken)
4399848b8605Smrg      {
4400848b8605Smrg        char const *yymsgp = YY_("syntax error");
4401848b8605Smrg        int yysyntax_error_status;
4402848b8605Smrg        yysyntax_error_status = YYSYNTAX_ERROR;
4403848b8605Smrg        if (yysyntax_error_status == 0)
4404848b8605Smrg          yymsgp = yymsg;
4405848b8605Smrg        else if (yysyntax_error_status == 1)
4406848b8605Smrg          {
4407848b8605Smrg            if (yymsg != yymsgbuf)
4408848b8605Smrg              YYSTACK_FREE (yymsg);
4409848b8605Smrg            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
4410848b8605Smrg            if (!yymsg)
4411848b8605Smrg              {
4412848b8605Smrg                yymsg = yymsgbuf;
4413848b8605Smrg                yymsg_alloc = sizeof yymsgbuf;
4414848b8605Smrg                yysyntax_error_status = 2;
4415848b8605Smrg              }
4416848b8605Smrg            else
4417848b8605Smrg              {
4418848b8605Smrg                yysyntax_error_status = YYSYNTAX_ERROR;
4419848b8605Smrg                yymsgp = yymsg;
4420848b8605Smrg              }
4421848b8605Smrg          }
4422848b8605Smrg        yyerror (&yylloc, state, yymsgp);
4423848b8605Smrg        if (yysyntax_error_status == 2)
4424848b8605Smrg          goto yyexhaustedlab;
4425848b8605Smrg      }
4426848b8605Smrg# undef YYSYNTAX_ERROR
4427848b8605Smrg#endif
4428848b8605Smrg    }
4429848b8605Smrg
4430848b8605Smrg  yyerror_range[1] = yylloc;
4431848b8605Smrg
4432848b8605Smrg  if (yyerrstatus == 3)
4433848b8605Smrg    {
4434848b8605Smrg      /* If just tried and failed to reuse lookahead token after an
4435b8e80941Smrg         error, discard it.  */
4436848b8605Smrg
4437848b8605Smrg      if (yychar <= YYEOF)
4438b8e80941Smrg        {
4439b8e80941Smrg          /* Return failure if at end of input.  */
4440b8e80941Smrg          if (yychar == YYEOF)
4441b8e80941Smrg            YYABORT;
4442b8e80941Smrg        }
4443848b8605Smrg      else
4444b8e80941Smrg        {
4445b8e80941Smrg          yydestruct ("Error: discarding",
4446b8e80941Smrg                      yytoken, &yylval, &yylloc, state);
4447b8e80941Smrg          yychar = YYEMPTY;
4448b8e80941Smrg        }
4449848b8605Smrg    }
4450848b8605Smrg
4451848b8605Smrg  /* Else will try to reuse lookahead token after shifting the error
4452848b8605Smrg     token.  */
4453848b8605Smrg  goto yyerrlab1;
4454848b8605Smrg
4455848b8605Smrg
4456848b8605Smrg/*---------------------------------------------------.
4457848b8605Smrg| yyerrorlab -- error raised explicitly by YYERROR.  |
4458848b8605Smrg`---------------------------------------------------*/
4459848b8605Smrgyyerrorlab:
4460848b8605Smrg
4461848b8605Smrg  /* Pacify compilers like GCC when the user code never invokes
4462848b8605Smrg     YYERROR and the label yyerrorlab therefore never appears in user
4463848b8605Smrg     code.  */
4464848b8605Smrg  if (/*CONSTCOND*/ 0)
4465848b8605Smrg     goto yyerrorlab;
4466848b8605Smrg
4467b8e80941Smrg  /* Do not reclaim the symbols of the rule whose action triggered
4468848b8605Smrg     this YYERROR.  */
4469848b8605Smrg  YYPOPSTACK (yylen);
4470848b8605Smrg  yylen = 0;
4471848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
4472848b8605Smrg  yystate = *yyssp;
4473848b8605Smrg  goto yyerrlab1;
4474848b8605Smrg
4475848b8605Smrg
4476848b8605Smrg/*-------------------------------------------------------------.
4477848b8605Smrg| yyerrlab1 -- common code for both syntax error and YYERROR.  |
4478848b8605Smrg`-------------------------------------------------------------*/
4479848b8605Smrgyyerrlab1:
4480b8e80941Smrg  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
4481848b8605Smrg
4482848b8605Smrg  for (;;)
4483848b8605Smrg    {
4484848b8605Smrg      yyn = yypact[yystate];
4485848b8605Smrg      if (!yypact_value_is_default (yyn))
4486b8e80941Smrg        {
4487b8e80941Smrg          yyn += YYTERROR;
4488b8e80941Smrg          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4489b8e80941Smrg            {
4490b8e80941Smrg              yyn = yytable[yyn];
4491b8e80941Smrg              if (0 < yyn)
4492b8e80941Smrg                break;
4493b8e80941Smrg            }
4494b8e80941Smrg        }
4495848b8605Smrg
4496848b8605Smrg      /* Pop the current state because it cannot handle the error token.  */
4497848b8605Smrg      if (yyssp == yyss)
4498b8e80941Smrg        YYABORT;
4499848b8605Smrg
4500848b8605Smrg      yyerror_range[1] = *yylsp;
4501848b8605Smrg      yydestruct ("Error: popping",
4502b8e80941Smrg                  yystos[yystate], yyvsp, yylsp, state);
4503848b8605Smrg      YYPOPSTACK (1);
4504848b8605Smrg      yystate = *yyssp;
4505848b8605Smrg      YY_STACK_PRINT (yyss, yyssp);
4506848b8605Smrg    }
4507848b8605Smrg
4508848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4509848b8605Smrg  *++yyvsp = yylval;
4510848b8605Smrg  YY_IGNORE_MAYBE_UNINITIALIZED_END
4511848b8605Smrg
4512848b8605Smrg  yyerror_range[2] = yylloc;
4513848b8605Smrg  /* Using YYLLOC is tempting, but would change the location of
4514848b8605Smrg     the lookahead.  YYLOC is available though.  */
4515848b8605Smrg  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
4516848b8605Smrg  *++yylsp = yyloc;
4517848b8605Smrg
4518848b8605Smrg  /* Shift the error token.  */
4519848b8605Smrg  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
4520848b8605Smrg
4521848b8605Smrg  yystate = yyn;
4522848b8605Smrg  goto yynewstate;
4523848b8605Smrg
4524848b8605Smrg
4525848b8605Smrg/*-------------------------------------.
4526848b8605Smrg| yyacceptlab -- YYACCEPT comes here.  |
4527848b8605Smrg`-------------------------------------*/
4528848b8605Smrgyyacceptlab:
4529848b8605Smrg  yyresult = 0;
4530848b8605Smrg  goto yyreturn;
4531848b8605Smrg
4532848b8605Smrg/*-----------------------------------.
4533848b8605Smrg| yyabortlab -- YYABORT comes here.  |
4534848b8605Smrg`-----------------------------------*/
4535848b8605Smrgyyabortlab:
4536848b8605Smrg  yyresult = 1;
4537848b8605Smrg  goto yyreturn;
4538848b8605Smrg
4539848b8605Smrg#if !defined yyoverflow || YYERROR_VERBOSE
4540848b8605Smrg/*-------------------------------------------------.
4541848b8605Smrg| yyexhaustedlab -- memory exhaustion comes here.  |
4542848b8605Smrg`-------------------------------------------------*/
4543848b8605Smrgyyexhaustedlab:
4544848b8605Smrg  yyerror (&yylloc, state, YY_("memory exhausted"));
4545848b8605Smrg  yyresult = 2;
4546848b8605Smrg  /* Fall through.  */
4547848b8605Smrg#endif
4548848b8605Smrg
4549848b8605Smrgyyreturn:
4550848b8605Smrg  if (yychar != YYEMPTY)
4551848b8605Smrg    {
4552848b8605Smrg      /* Make sure we have latest lookahead translation.  See comments at
4553848b8605Smrg         user semantic actions for why this is necessary.  */
4554848b8605Smrg      yytoken = YYTRANSLATE (yychar);
4555848b8605Smrg      yydestruct ("Cleanup: discarding lookahead",
4556848b8605Smrg                  yytoken, &yylval, &yylloc, state);
4557848b8605Smrg    }
4558b8e80941Smrg  /* Do not reclaim the symbols of the rule whose action triggered
4559848b8605Smrg     this YYABORT or YYACCEPT.  */
4560848b8605Smrg  YYPOPSTACK (yylen);
4561848b8605Smrg  YY_STACK_PRINT (yyss, yyssp);
4562848b8605Smrg  while (yyssp != yyss)
4563848b8605Smrg    {
4564848b8605Smrg      yydestruct ("Cleanup: popping",
4565b8e80941Smrg                  yystos[*yyssp], yyvsp, yylsp, state);
4566848b8605Smrg      YYPOPSTACK (1);
4567848b8605Smrg    }
4568848b8605Smrg#ifndef yyoverflow
4569848b8605Smrg  if (yyss != yyssa)
4570848b8605Smrg    YYSTACK_FREE (yyss);
4571848b8605Smrg#endif
4572848b8605Smrg#if YYERROR_VERBOSE
4573848b8605Smrg  if (yymsg != yymsgbuf)
4574848b8605Smrg    YYSTACK_FREE (yymsg);
4575848b8605Smrg#endif
4576b8e80941Smrg  return yyresult;
4577848b8605Smrg}
4578b8e80941Smrg#line 2055 "/cvs/xsrc/external/mit/MesaLib/dist/src/mesa/program/program_parse.y" /* yacc.c:1903  */
4579848b8605Smrg
4580848b8605Smrg
4581848b8605Smrgvoid
4582848b8605Smrgasm_instruction_set_operands(struct asm_instruction *inst,
4583848b8605Smrg			     const struct prog_dst_register *dst,
4584848b8605Smrg			     const struct asm_src_register *src0,
4585848b8605Smrg			     const struct asm_src_register *src1,
4586848b8605Smrg			     const struct asm_src_register *src2)
4587848b8605Smrg{
4588848b8605Smrg   /* In the core ARB extensions only the KIL instruction doesn't have a
4589848b8605Smrg    * destination register.
4590848b8605Smrg    */
4591848b8605Smrg   if (dst == NULL) {
4592848b8605Smrg      init_dst_reg(& inst->Base.DstReg);
4593848b8605Smrg   } else {
4594848b8605Smrg      inst->Base.DstReg = *dst;
4595848b8605Smrg   }
4596848b8605Smrg
4597848b8605Smrg   if (src0 != NULL) {
4598848b8605Smrg      inst->Base.SrcReg[0] = src0->Base;
4599848b8605Smrg      inst->SrcReg[0] = *src0;
4600848b8605Smrg   } else {
4601848b8605Smrg      init_src_reg(& inst->SrcReg[0]);
4602848b8605Smrg   }
4603848b8605Smrg
4604848b8605Smrg   if (src1 != NULL) {
4605848b8605Smrg      inst->Base.SrcReg[1] = src1->Base;
4606848b8605Smrg      inst->SrcReg[1] = *src1;
4607848b8605Smrg   } else {
4608848b8605Smrg      init_src_reg(& inst->SrcReg[1]);
4609848b8605Smrg   }
4610848b8605Smrg
4611848b8605Smrg   if (src2 != NULL) {
4612848b8605Smrg      inst->Base.SrcReg[2] = src2->Base;
4613848b8605Smrg      inst->SrcReg[2] = *src2;
4614848b8605Smrg   } else {
4615848b8605Smrg      init_src_reg(& inst->SrcReg[2]);
4616848b8605Smrg   }
4617848b8605Smrg}
4618848b8605Smrg
4619848b8605Smrg
4620848b8605Smrgstruct asm_instruction *
4621b8e80941Smrgasm_instruction_ctor(enum prog_opcode op,
4622848b8605Smrg		     const struct prog_dst_register *dst,
4623848b8605Smrg		     const struct asm_src_register *src0,
4624848b8605Smrg		     const struct asm_src_register *src1,
4625848b8605Smrg		     const struct asm_src_register *src2)
4626848b8605Smrg{
4627848b8605Smrg   struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
4628848b8605Smrg
4629848b8605Smrg   if (inst) {
4630848b8605Smrg      _mesa_init_instructions(& inst->Base, 1);
4631848b8605Smrg      inst->Base.Opcode = op;
4632848b8605Smrg
4633848b8605Smrg      asm_instruction_set_operands(inst, dst, src0, src1, src2);
4634848b8605Smrg   }
4635848b8605Smrg
4636848b8605Smrg   return inst;
4637848b8605Smrg}
4638848b8605Smrg
4639848b8605Smrg
4640848b8605Smrgstruct asm_instruction *
4641848b8605Smrgasm_instruction_copy_ctor(const struct prog_instruction *base,
4642848b8605Smrg			  const struct prog_dst_register *dst,
4643848b8605Smrg			  const struct asm_src_register *src0,
4644848b8605Smrg			  const struct asm_src_register *src1,
4645848b8605Smrg			  const struct asm_src_register *src2)
4646848b8605Smrg{
4647848b8605Smrg   struct asm_instruction *inst = CALLOC_STRUCT(asm_instruction);
4648848b8605Smrg
4649848b8605Smrg   if (inst) {
4650848b8605Smrg      _mesa_init_instructions(& inst->Base, 1);
4651848b8605Smrg      inst->Base.Opcode = base->Opcode;
4652b8e80941Smrg      inst->Base.Saturate = base->Saturate;
4653848b8605Smrg
4654848b8605Smrg      asm_instruction_set_operands(inst, dst, src0, src1, src2);
4655848b8605Smrg   }
4656848b8605Smrg
4657848b8605Smrg   return inst;
4658848b8605Smrg}
4659848b8605Smrg
4660848b8605Smrg
4661848b8605Smrgvoid
4662848b8605Smrginit_dst_reg(struct prog_dst_register *r)
4663848b8605Smrg{
4664848b8605Smrg   memset(r, 0, sizeof(*r));
4665848b8605Smrg   r->File = PROGRAM_UNDEFINED;
4666848b8605Smrg   r->WriteMask = WRITEMASK_XYZW;
4667848b8605Smrg}
4668848b8605Smrg
4669848b8605Smrg
4670848b8605Smrg/** Like init_dst_reg() but set the File and Index fields. */
4671848b8605Smrgvoid
4672848b8605Smrgset_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index)
4673848b8605Smrg{
4674848b8605Smrg   const GLint maxIndex = 1 << INST_INDEX_BITS;
4675848b8605Smrg   const GLint minIndex = 0;
4676b8e80941Smrg   assert(index >= minIndex);
4677848b8605Smrg   (void) minIndex;
4678b8e80941Smrg   assert(index <= maxIndex);
4679848b8605Smrg   (void) maxIndex;
4680b8e80941Smrg   assert(file == PROGRAM_TEMPORARY ||
4681848b8605Smrg	  file == PROGRAM_ADDRESS ||
4682848b8605Smrg	  file == PROGRAM_OUTPUT);
4683848b8605Smrg   memset(r, 0, sizeof(*r));
4684848b8605Smrg   r->File = file;
4685848b8605Smrg   r->Index = index;
4686848b8605Smrg   r->WriteMask = WRITEMASK_XYZW;
4687848b8605Smrg}
4688848b8605Smrg
4689848b8605Smrg
4690848b8605Smrgvoid
4691848b8605Smrginit_src_reg(struct asm_src_register *r)
4692848b8605Smrg{
4693848b8605Smrg   memset(r, 0, sizeof(*r));
4694848b8605Smrg   r->Base.File = PROGRAM_UNDEFINED;
4695848b8605Smrg   r->Base.Swizzle = SWIZZLE_NOOP;
4696848b8605Smrg   r->Symbol = NULL;
4697848b8605Smrg}
4698848b8605Smrg
4699848b8605Smrg
4700848b8605Smrg/** Like init_src_reg() but set the File and Index fields.
4701848b8605Smrg * \return GL_TRUE if a valid src register, GL_FALSE otherwise
4702848b8605Smrg */
4703848b8605Smrgvoid
4704848b8605Smrgset_src_reg(struct asm_src_register *r, gl_register_file file, GLint index)
4705848b8605Smrg{
4706848b8605Smrg   set_src_reg_swz(r, file, index, SWIZZLE_XYZW);
4707848b8605Smrg}
4708848b8605Smrg
4709848b8605Smrg
4710848b8605Smrgvoid
4711848b8605Smrgset_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
4712848b8605Smrg                GLuint swizzle)
4713848b8605Smrg{
4714848b8605Smrg   const GLint maxIndex = (1 << INST_INDEX_BITS) - 1;
4715848b8605Smrg   const GLint minIndex = -(1 << INST_INDEX_BITS);
4716b8e80941Smrg   assert(file < PROGRAM_FILE_MAX);
4717b8e80941Smrg   assert(index >= minIndex);
4718848b8605Smrg   (void) minIndex;
4719b8e80941Smrg   assert(index <= maxIndex);
4720848b8605Smrg   (void) maxIndex;
4721848b8605Smrg   memset(r, 0, sizeof(*r));
4722848b8605Smrg   r->Base.File = file;
4723848b8605Smrg   r->Base.Index = index;
4724848b8605Smrg   r->Base.Swizzle = swizzle;
4725848b8605Smrg   r->Symbol = NULL;
4726848b8605Smrg}
4727848b8605Smrg
4728848b8605Smrg
4729848b8605Smrg/**
4730848b8605Smrg * Validate the set of inputs used by a program
4731848b8605Smrg *
4732848b8605Smrg * Validates that legal sets of inputs are used by the program.  In this case
4733848b8605Smrg * "used" included both reading the input or binding the input to a name using
4734848b8605Smrg * the \c ATTRIB command.
4735848b8605Smrg *
4736848b8605Smrg * \return
4737848b8605Smrg * \c TRUE if the combination of inputs used is valid, \c FALSE otherwise.
4738848b8605Smrg */
4739848b8605Smrgint
4740848b8605Smrgvalidate_inputs(struct YYLTYPE *locp, struct asm_parser_state *state)
4741848b8605Smrg{
4742b8e80941Smrg   const GLbitfield64 inputs = state->prog->info.inputs_read | state->InputsBound;
4743b8e80941Smrg   GLbitfield ff_inputs = 0;
4744848b8605Smrg
4745b8e80941Smrg   /* Since Mesa internal attribute indices are different from
4746b8e80941Smrg    * how NV_vertex_program defines attribute aliasing, we have to construct
4747b8e80941Smrg    * a separate usage mask based on how the aliasing is defined.
4748b8e80941Smrg    *
4749b8e80941Smrg    * Note that attribute aliasing is optional if NV_vertex_program is
4750b8e80941Smrg    * unsupported.
4751b8e80941Smrg    */
4752b8e80941Smrg   if (inputs & VERT_BIT_POS)
4753b8e80941Smrg      ff_inputs |= 1 << 0;
4754b8e80941Smrg   if (inputs & VERT_BIT_NORMAL)
4755b8e80941Smrg      ff_inputs |= 1 << 2;
4756b8e80941Smrg   if (inputs & VERT_BIT_COLOR0)
4757b8e80941Smrg      ff_inputs |= 1 << 3;
4758b8e80941Smrg   if (inputs & VERT_BIT_COLOR1)
4759b8e80941Smrg      ff_inputs |= 1 << 4;
4760b8e80941Smrg   if (inputs & VERT_BIT_FOG)
4761b8e80941Smrg      ff_inputs |= 1 << 5;
4762b8e80941Smrg
4763b8e80941Smrg   ff_inputs |= ((inputs & VERT_BIT_TEX_ALL) >> VERT_ATTRIB_TEX0) << 8;
4764b8e80941Smrg
4765b8e80941Smrg   if ((ff_inputs & (inputs >> VERT_ATTRIB_GENERIC0)) != 0) {
4766848b8605Smrg      yyerror(locp, state, "illegal use of generic attribute and name attribute");
4767848b8605Smrg      return 0;
4768848b8605Smrg   }
4769848b8605Smrg
4770848b8605Smrg   return 1;
4771848b8605Smrg}
4772848b8605Smrg
4773848b8605Smrg
4774848b8605Smrgstruct asm_symbol *
4775848b8605Smrgdeclare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
4776848b8605Smrg		 struct YYLTYPE *locp)
4777848b8605Smrg{
4778848b8605Smrg   struct asm_symbol *s = NULL;
4779848b8605Smrg   struct asm_symbol *exist = (struct asm_symbol *)
4780b8e80941Smrg      _mesa_symbol_table_find_symbol(state->st, name);
4781848b8605Smrg
4782848b8605Smrg
4783848b8605Smrg   if (exist != NULL) {
4784848b8605Smrg      yyerror(locp, state, "redeclared identifier");
4785848b8605Smrg   } else {
4786848b8605Smrg      s = calloc(1, sizeof(struct asm_symbol));
4787848b8605Smrg      s->name = name;
4788848b8605Smrg      s->type = t;
4789848b8605Smrg
4790848b8605Smrg      switch (t) {
4791848b8605Smrg      case at_temp:
4792b8e80941Smrg         if (state->prog->arb.NumTemporaries >= state->limits->MaxTemps) {
4793848b8605Smrg	    yyerror(locp, state, "too many temporaries declared");
4794848b8605Smrg	    free(s);
4795848b8605Smrg	    return NULL;
4796848b8605Smrg	 }
4797848b8605Smrg
4798b8e80941Smrg         s->temp_binding = state->prog->arb.NumTemporaries;
4799b8e80941Smrg         state->prog->arb.NumTemporaries++;
4800848b8605Smrg	 break;
4801848b8605Smrg
4802848b8605Smrg      case at_address:
4803b8e80941Smrg         if (state->prog->arb.NumAddressRegs >=
4804b8e80941Smrg             state->limits->MaxAddressRegs) {
4805848b8605Smrg	    yyerror(locp, state, "too many address registers declared");
4806848b8605Smrg	    free(s);
4807848b8605Smrg	    return NULL;
4808848b8605Smrg	 }
4809848b8605Smrg
4810848b8605Smrg	 /* FINISHME: Add support for multiple address registers.
4811848b8605Smrg	  */
4812b8e80941Smrg         state->prog->arb.NumAddressRegs++;
4813848b8605Smrg	 break;
4814848b8605Smrg
4815848b8605Smrg      default:
4816848b8605Smrg	 break;
4817848b8605Smrg      }
4818848b8605Smrg
4819b8e80941Smrg      _mesa_symbol_table_add_symbol(state->st, s->name, s);
4820848b8605Smrg      s->next = state->sym;
4821848b8605Smrg      state->sym = s;
4822848b8605Smrg   }
4823848b8605Smrg
4824848b8605Smrg   return s;
4825848b8605Smrg}
4826848b8605Smrg
4827848b8605Smrg
4828848b8605Smrgint add_state_reference(struct gl_program_parameter_list *param_list,
4829b8e80941Smrg			const gl_state_index16 tokens[STATE_LENGTH])
4830848b8605Smrg{
4831848b8605Smrg   const GLuint size = 4; /* XXX fix */
4832848b8605Smrg   char *name;
4833848b8605Smrg   GLint index;
4834848b8605Smrg
4835848b8605Smrg   name = _mesa_program_state_string(tokens);
4836848b8605Smrg   index = _mesa_add_parameter(param_list, PROGRAM_STATE_VAR, name,
4837b8e80941Smrg                               size, GL_NONE, NULL, tokens, true);
4838848b8605Smrg   param_list->StateFlags |= _mesa_program_state_flags(tokens);
4839848b8605Smrg
4840848b8605Smrg   /* free name string here since we duplicated it in add_parameter() */
4841848b8605Smrg   free(name);
4842848b8605Smrg
4843848b8605Smrg   return index;
4844848b8605Smrg}
4845848b8605Smrg
4846848b8605Smrg
4847848b8605Smrgint
4848848b8605Smrginitialize_symbol_from_state(struct gl_program *prog,
4849848b8605Smrg			     struct asm_symbol *param_var,
4850b8e80941Smrg			     const gl_state_index16 tokens[STATE_LENGTH])
4851848b8605Smrg{
4852848b8605Smrg   int idx = -1;
4853b8e80941Smrg   gl_state_index16 state_tokens[STATE_LENGTH];
4854848b8605Smrg
4855848b8605Smrg
4856848b8605Smrg   memcpy(state_tokens, tokens, sizeof(state_tokens));
4857848b8605Smrg
4858848b8605Smrg   param_var->type = at_param;
4859848b8605Smrg   param_var->param_binding_type = PROGRAM_STATE_VAR;
4860848b8605Smrg
4861848b8605Smrg   /* If we are adding a STATE_MATRIX that has multiple rows, we need to
4862848b8605Smrg    * unroll it and call add_state_reference() for each row
4863848b8605Smrg    */
4864848b8605Smrg   if ((state_tokens[0] == STATE_MODELVIEW_MATRIX ||
4865848b8605Smrg	state_tokens[0] == STATE_PROJECTION_MATRIX ||
4866848b8605Smrg	state_tokens[0] == STATE_MVP_MATRIX ||
4867848b8605Smrg	state_tokens[0] == STATE_TEXTURE_MATRIX ||
4868848b8605Smrg	state_tokens[0] == STATE_PROGRAM_MATRIX)
4869848b8605Smrg       && (state_tokens[2] != state_tokens[3])) {
4870848b8605Smrg      int row;
4871848b8605Smrg      const int first_row = state_tokens[2];
4872848b8605Smrg      const int last_row = state_tokens[3];
4873848b8605Smrg
4874848b8605Smrg      for (row = first_row; row <= last_row; row++) {
4875848b8605Smrg	 state_tokens[2] = state_tokens[3] = row;
4876848b8605Smrg
4877848b8605Smrg	 idx = add_state_reference(prog->Parameters, state_tokens);
4878848b8605Smrg	 if (param_var->param_binding_begin == ~0U) {
4879848b8605Smrg	    param_var->param_binding_begin = idx;
4880848b8605Smrg            param_var->param_binding_swizzle = SWIZZLE_XYZW;
4881848b8605Smrg         }
4882848b8605Smrg
4883848b8605Smrg	 param_var->param_binding_length++;
4884848b8605Smrg      }
4885848b8605Smrg   }
4886848b8605Smrg   else {
4887848b8605Smrg      idx = add_state_reference(prog->Parameters, state_tokens);
4888848b8605Smrg      if (param_var->param_binding_begin == ~0U) {
4889848b8605Smrg	 param_var->param_binding_begin = idx;
4890848b8605Smrg         param_var->param_binding_swizzle = SWIZZLE_XYZW;
4891848b8605Smrg      }
4892848b8605Smrg      param_var->param_binding_length++;
4893848b8605Smrg   }
4894848b8605Smrg
4895848b8605Smrg   return idx;
4896848b8605Smrg}
4897848b8605Smrg
4898848b8605Smrg
4899848b8605Smrgint
4900848b8605Smrginitialize_symbol_from_param(struct gl_program *prog,
4901848b8605Smrg			     struct asm_symbol *param_var,
4902b8e80941Smrg			     const gl_state_index16 tokens[STATE_LENGTH])
4903848b8605Smrg{
4904848b8605Smrg   int idx = -1;
4905b8e80941Smrg   gl_state_index16 state_tokens[STATE_LENGTH];
4906848b8605Smrg
4907848b8605Smrg
4908848b8605Smrg   memcpy(state_tokens, tokens, sizeof(state_tokens));
4909848b8605Smrg
4910848b8605Smrg   assert((state_tokens[0] == STATE_VERTEX_PROGRAM)
4911848b8605Smrg	  || (state_tokens[0] == STATE_FRAGMENT_PROGRAM));
4912848b8605Smrg   assert((state_tokens[1] == STATE_ENV)
4913848b8605Smrg	  || (state_tokens[1] == STATE_LOCAL));
4914848b8605Smrg
4915848b8605Smrg   /*
4916848b8605Smrg    * The param type is STATE_VAR.  The program parameter entry will
4917848b8605Smrg    * effectively be a pointer into the LOCAL or ENV parameter array.
4918848b8605Smrg    */
4919848b8605Smrg   param_var->type = at_param;
4920848b8605Smrg   param_var->param_binding_type = PROGRAM_STATE_VAR;
4921848b8605Smrg
4922848b8605Smrg   /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,
4923848b8605Smrg    * we need to unroll it and call add_state_reference() for each row
4924848b8605Smrg    */
4925848b8605Smrg   if (state_tokens[2] != state_tokens[3]) {
4926848b8605Smrg      int row;
4927848b8605Smrg      const int first_row = state_tokens[2];
4928848b8605Smrg      const int last_row = state_tokens[3];
4929848b8605Smrg
4930848b8605Smrg      for (row = first_row; row <= last_row; row++) {
4931848b8605Smrg	 state_tokens[2] = state_tokens[3] = row;
4932848b8605Smrg
4933848b8605Smrg	 idx = add_state_reference(prog->Parameters, state_tokens);
4934848b8605Smrg	 if (param_var->param_binding_begin == ~0U) {
4935848b8605Smrg	    param_var->param_binding_begin = idx;
4936848b8605Smrg            param_var->param_binding_swizzle = SWIZZLE_XYZW;
4937848b8605Smrg         }
4938848b8605Smrg	 param_var->param_binding_length++;
4939848b8605Smrg      }
4940848b8605Smrg   }
4941848b8605Smrg   else {
4942848b8605Smrg      idx = add_state_reference(prog->Parameters, state_tokens);
4943848b8605Smrg      if (param_var->param_binding_begin == ~0U) {
4944848b8605Smrg	 param_var->param_binding_begin = idx;
4945848b8605Smrg         param_var->param_binding_swizzle = SWIZZLE_XYZW;
4946848b8605Smrg      }
4947848b8605Smrg      param_var->param_binding_length++;
4948848b8605Smrg   }
4949848b8605Smrg
4950848b8605Smrg   return idx;
4951848b8605Smrg}
4952848b8605Smrg
4953848b8605Smrg
4954848b8605Smrg/**
4955848b8605Smrg * Put a float/vector constant/literal into the parameter list.
4956848b8605Smrg * \param param_var  returns info about the parameter/constant's location,
4957848b8605Smrg *                   binding, type, etc.
4958848b8605Smrg * \param vec  the vector/constant to add
4959848b8605Smrg * \param allowSwizzle  if true, try to consolidate constants which only differ
4960848b8605Smrg *                      by a swizzle.  We don't want to do this when building
4961848b8605Smrg *                      arrays of constants that may be indexed indirectly.
4962848b8605Smrg * \return index of the constant in the parameter list.
4963848b8605Smrg */
4964848b8605Smrgint
4965848b8605Smrginitialize_symbol_from_const(struct gl_program *prog,
4966848b8605Smrg			     struct asm_symbol *param_var,
4967848b8605Smrg			     const struct asm_vector *vec,
4968848b8605Smrg                             GLboolean allowSwizzle)
4969848b8605Smrg{
4970848b8605Smrg   unsigned swizzle;
4971848b8605Smrg   const int idx = _mesa_add_unnamed_constant(prog->Parameters,
4972848b8605Smrg                                              vec->data, vec->count,
4973848b8605Smrg                                              allowSwizzle ? &swizzle : NULL);
4974848b8605Smrg
4975848b8605Smrg   param_var->type = at_param;
4976848b8605Smrg   param_var->param_binding_type = PROGRAM_CONSTANT;
4977848b8605Smrg
4978848b8605Smrg   if (param_var->param_binding_begin == ~0U) {
4979848b8605Smrg      param_var->param_binding_begin = idx;
4980848b8605Smrg      param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;
4981848b8605Smrg   }
4982848b8605Smrg   param_var->param_binding_length++;
4983848b8605Smrg
4984848b8605Smrg   return idx;
4985848b8605Smrg}
4986848b8605Smrg
4987848b8605Smrg
4988848b8605Smrgchar *
4989848b8605Smrgmake_error_string(const char *fmt, ...)
4990848b8605Smrg{
4991848b8605Smrg   int length;
4992848b8605Smrg   char *str;
4993848b8605Smrg   va_list args;
4994848b8605Smrg
4995848b8605Smrg
4996848b8605Smrg   /* Call vsnprintf once to determine how large the final string is.  Call it
4997848b8605Smrg    * again to do the actual formatting.  from the vsnprintf manual page:
4998848b8605Smrg    *
4999848b8605Smrg    *    Upon successful return, these functions return the number of
5000848b8605Smrg    *    characters printed  (not including the trailing '\0' used to end
5001848b8605Smrg    *    output to strings).
5002848b8605Smrg    */
5003848b8605Smrg   va_start(args, fmt);
5004848b8605Smrg   length = 1 + vsnprintf(NULL, 0, fmt, args);
5005848b8605Smrg   va_end(args);
5006848b8605Smrg
5007848b8605Smrg   str = malloc(length);
5008848b8605Smrg   if (str) {
5009848b8605Smrg      va_start(args, fmt);
5010848b8605Smrg      vsnprintf(str, length, fmt, args);
5011848b8605Smrg      va_end(args);
5012848b8605Smrg   }
5013848b8605Smrg
5014848b8605Smrg   return str;
5015848b8605Smrg}
5016848b8605Smrg
5017848b8605Smrg
5018848b8605Smrgvoid
5019848b8605Smrgyyerror(YYLTYPE *locp, struct asm_parser_state *state, const char *s)
5020848b8605Smrg{
5021848b8605Smrg   char *err_str;
5022848b8605Smrg
5023848b8605Smrg
5024848b8605Smrg   err_str = make_error_string("glProgramStringARB(%s)\n", s);
5025848b8605Smrg   if (err_str) {
5026848b8605Smrg      _mesa_error(state->ctx, GL_INVALID_OPERATION, "%s", err_str);
5027848b8605Smrg      free(err_str);
5028848b8605Smrg   }
5029848b8605Smrg
5030848b8605Smrg   err_str = make_error_string("line %u, char %u: error: %s\n",
5031848b8605Smrg			       locp->first_line, locp->first_column, s);
5032848b8605Smrg   _mesa_set_program_error(state->ctx, locp->position, err_str);
5033848b8605Smrg
5034848b8605Smrg   if (err_str) {
5035848b8605Smrg      free(err_str);
5036848b8605Smrg   }
5037848b8605Smrg}
5038848b8605Smrg
5039848b8605Smrg
5040848b8605SmrgGLboolean
5041848b8605Smrg_mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *str,
5042848b8605Smrg			GLsizei len, struct asm_parser_state *state)
5043848b8605Smrg{
5044848b8605Smrg   struct asm_instruction *inst;
5045848b8605Smrg   unsigned i;
5046848b8605Smrg   GLubyte *strz;
5047848b8605Smrg   GLboolean result = GL_FALSE;
5048848b8605Smrg   void *temp;
5049848b8605Smrg   struct asm_symbol *sym;
5050848b8605Smrg
5051848b8605Smrg   state->ctx = ctx;
5052848b8605Smrg   state->prog->Target = target;
5053848b8605Smrg   state->prog->Parameters = _mesa_new_parameter_list();
5054848b8605Smrg
5055848b8605Smrg   /* Make a copy of the program string and force it to be NUL-terminated.
5056848b8605Smrg    */
5057b8e80941Smrg   strz = (GLubyte *) ralloc_size(state->mem_ctx, len + 1);
5058848b8605Smrg   if (strz == NULL) {
5059848b8605Smrg      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glProgramStringARB");
5060848b8605Smrg      return GL_FALSE;
5061848b8605Smrg   }
5062848b8605Smrg   memcpy (strz, str, len);
5063848b8605Smrg   strz[len] = '\0';
5064848b8605Smrg
5065848b8605Smrg   state->prog->String = strz;
5066848b8605Smrg
5067848b8605Smrg   state->st = _mesa_symbol_table_ctor();
5068848b8605Smrg
5069848b8605Smrg   state->limits = (target == GL_VERTEX_PROGRAM_ARB)
5070848b8605Smrg      ? & ctx->Const.Program[MESA_SHADER_VERTEX]
5071848b8605Smrg      : & ctx->Const.Program[MESA_SHADER_FRAGMENT];
5072848b8605Smrg
5073848b8605Smrg   state->MaxTextureImageUnits = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits;
5074848b8605Smrg   state->MaxTextureCoordUnits = ctx->Const.MaxTextureCoordUnits;
5075848b8605Smrg   state->MaxTextureUnits = ctx->Const.MaxTextureUnits;
5076848b8605Smrg   state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
5077848b8605Smrg   state->MaxLights = ctx->Const.MaxLights;
5078848b8605Smrg   state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
5079848b8605Smrg   state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
5080848b8605Smrg
5081848b8605Smrg   state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
5082848b8605Smrg      ? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
5083848b8605Smrg
5084848b8605Smrg   _mesa_set_program_error(ctx, -1, NULL);
5085848b8605Smrg
5086848b8605Smrg   _mesa_program_lexer_ctor(& state->scanner, state, (const char *) str, len);
5087848b8605Smrg   yyparse(state);
5088848b8605Smrg   _mesa_program_lexer_dtor(state->scanner);
5089848b8605Smrg
5090848b8605Smrg
5091848b8605Smrg   if (ctx->Program.ErrorPos != -1) {
5092848b8605Smrg      goto error;
5093848b8605Smrg   }
5094848b8605Smrg
5095848b8605Smrg   if (! _mesa_layout_parameters(state)) {
5096848b8605Smrg      struct YYLTYPE loc;
5097848b8605Smrg
5098848b8605Smrg      loc.first_line = 0;
5099848b8605Smrg      loc.first_column = 0;
5100848b8605Smrg      loc.position = len;
5101848b8605Smrg
5102848b8605Smrg      yyerror(& loc, state, "invalid PARAM usage");
5103848b8605Smrg      goto error;
5104848b8605Smrg   }
5105848b8605Smrg
5106848b8605Smrg
5107848b8605Smrg
5108848b8605Smrg   /* Add one instruction to store the "END" instruction.
5109848b8605Smrg    */
5110b8e80941Smrg   state->prog->arb.Instructions =
5111b8e80941Smrg      rzalloc_array(state->mem_ctx, struct prog_instruction,
5112b8e80941Smrg                    state->prog->arb.NumInstructions + 1);
5113848b8605Smrg
5114b8e80941Smrg   if (state->prog->arb.Instructions == NULL) {
5115848b8605Smrg      goto error;
5116848b8605Smrg   }
5117848b8605Smrg
5118848b8605Smrg   inst = state->inst_head;
5119b8e80941Smrg   for (i = 0; i < state->prog->arb.NumInstructions; i++) {
5120848b8605Smrg      struct asm_instruction *const temp = inst->next;
5121848b8605Smrg
5122b8e80941Smrg      state->prog->arb.Instructions[i] = inst->Base;
5123848b8605Smrg      inst = temp;
5124848b8605Smrg   }
5125848b8605Smrg
5126848b8605Smrg   /* Finally, tag on an OPCODE_END instruction */
5127848b8605Smrg   {
5128b8e80941Smrg      const GLuint numInst = state->prog->arb.NumInstructions;
5129b8e80941Smrg      _mesa_init_instructions(state->prog->arb.Instructions + numInst, 1);
5130b8e80941Smrg      state->prog->arb.Instructions[numInst].Opcode = OPCODE_END;
5131848b8605Smrg   }
5132b8e80941Smrg   state->prog->arb.NumInstructions++;
5133848b8605Smrg
5134b8e80941Smrg   state->prog->arb.NumParameters = state->prog->Parameters->NumParameters;
5135b8e80941Smrg   state->prog->arb.NumAttributes =
5136b8e80941Smrg      util_bitcount64(state->prog->info.inputs_read);
5137848b8605Smrg
5138848b8605Smrg   /*
5139848b8605Smrg    * Initialize native counts to logical counts.  The device driver may
5140848b8605Smrg    * change them if program is translated into a hardware program.
5141848b8605Smrg    */
5142b8e80941Smrg   state->prog->arb.NumNativeInstructions = state->prog->arb.NumInstructions;
5143b8e80941Smrg   state->prog->arb.NumNativeTemporaries = state->prog->arb.NumTemporaries;
5144b8e80941Smrg   state->prog->arb.NumNativeParameters = state->prog->arb.NumParameters;
5145b8e80941Smrg   state->prog->arb.NumNativeAttributes = state->prog->arb.NumAttributes;
5146b8e80941Smrg   state->prog->arb.NumNativeAddressRegs = state->prog->arb.NumAddressRegs;
5147848b8605Smrg
5148848b8605Smrg   result = GL_TRUE;
5149848b8605Smrg
5150848b8605Smrgerror:
5151848b8605Smrg   for (inst = state->inst_head; inst != NULL; inst = temp) {
5152848b8605Smrg      temp = inst->next;
5153848b8605Smrg      free(inst);
5154848b8605Smrg   }
5155848b8605Smrg
5156848b8605Smrg   state->inst_head = NULL;
5157848b8605Smrg   state->inst_tail = NULL;
5158848b8605Smrg
5159848b8605Smrg   for (sym = state->sym; sym != NULL; sym = temp) {
5160848b8605Smrg      temp = sym->next;
5161848b8605Smrg
5162848b8605Smrg      free((void *) sym->name);
5163848b8605Smrg      free(sym);
5164848b8605Smrg   }
5165848b8605Smrg   state->sym = NULL;
5166848b8605Smrg
5167848b8605Smrg   _mesa_symbol_table_dtor(state->st);
5168848b8605Smrg   state->st = NULL;
5169848b8605Smrg
5170848b8605Smrg   return result;
5171848b8605Smrg}
5172