1770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick%{ 2770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/* 3770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Copyright © 2009 Intel Corporation 4770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * 5770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Permission is hereby granted, free of charge, to any person obtaining a 6770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * copy of this software and associated documentation files (the "Software"), 7770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * to deal in the Software without restriction, including without limitation 8770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * and/or sell copies of the Software, and to permit persons to whom the 10770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Software is furnished to do so, subject to the following conditions: 11770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * 12770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * The above copyright notice and this permission notice (including the next 13770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * paragraph) shall be included in all copies or substantial portions of the 14770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Software. 15770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * 16770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * DEALINGS IN THE SOFTWARE. 23770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick */ 24770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#include "main/glheader.h" 25269f16cd96fdbee5d178130171b4ef40258f61cfNeil Roberts#include "main/imports.h" 26ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/prog_instruction.h" 27ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/prog_statevars.h" 28ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/symbol_table.h" 29ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/program_parser.h" 30ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/program_parse.tab.h" 31770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 32770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define require_ARB_vp (yyextra->mode == ARB_vertex) 33770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define require_ARB_fp (yyextra->mode == ARB_fragment) 34ede0cd4d8c8eb8c6c443c84905138091944d69afIan Romanick#define require_NV_fp (yyextra->option.NV_fragment) 351edd13bf23c7a9dad00420f519a35f75b27e853bIan Romanick#define require_shadow (yyextra->option.Shadow) 3688018e2e073909ae807f16707f2701e068900926Ian Romanick#define require_rect (yyextra->option.TexRect) 37aafd5762593aa01f2d612f4d769d1af383422c1cIan Romanick#define require_texarray (yyextra->option.TexArray) 38770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 39970823978c2f7d2cf0757aa6ddbd6289b34c476fMichal Krol#ifndef HAVE_UNISTD_H 40970823978c2f7d2cf0757aa6ddbd6289b34c476fMichal Krol#define YY_NO_UNISTD_H 41970823978c2f7d2cf0757aa6ddbd6289b34c476fMichal Krol#endif 42970823978c2f7d2cf0757aa6ddbd6289b34c476fMichal Krol 43770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define return_token_or_IDENTIFIER(condition, token) \ 44770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick do { \ 45770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick if (condition) { \ 46770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return token; \ 47770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } else { \ 48731810f8546174e45c717b0a9aa289a26593dfa0Ian Romanick return handle_ident(yyextra, yytext, yylval); \ 49770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } \ 50770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } while (0) 51770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 52770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define return_token_or_DOT(condition, token) \ 53770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick do { \ 54770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick if (condition) { \ 55770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return token; \ 56770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } else { \ 57770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yyless(1); \ 58770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return DOT; \ 59770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } \ 60770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } while (0) 61770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 62770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 63d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick#define return_opcode(condition, token, opcode, len) \ 64770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick do { \ 65d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick if (condition && \ 66d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick _mesa_parse_instruction_suffix(yyextra, \ 67d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick yytext + len, \ 68d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick & yylval->temp_inst)) { \ 69770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->temp_inst.Opcode = OPCODE_ ## opcode; \ 70770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return token; \ 71770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } else { \ 72731810f8546174e45c717b0a9aa289a26593dfa0Ian Romanick return handle_ident(yyextra, yytext, yylval); \ 73770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } \ 74770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } while (0) 75770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 76770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define SWIZZLE_INVAL MAKE_SWIZZLE4(SWIZZLE_NIL, SWIZZLE_NIL, \ 77770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick SWIZZLE_NIL, SWIZZLE_NIL) 78770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 79770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstatic unsigned 80770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickmask_from_char(char c) 81770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{ 82770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick switch (c) { 83770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'x': 84770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'r': 85770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return WRITEMASK_X; 86770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'y': 87770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'g': 88770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return WRITEMASK_Y; 89770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'z': 90770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'b': 91770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return WRITEMASK_Z; 92770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'w': 93770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'a': 94770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return WRITEMASK_W; 95770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } 96770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 97770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return 0; 98770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 99770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 100770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstatic unsigned 101770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickswiz_from_char(char c) 102770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{ 103770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick switch (c) { 104770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'x': 105770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'r': 106770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return SWIZZLE_X; 107770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'y': 108770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'g': 109770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return SWIZZLE_Y; 110770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'z': 111770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'b': 112770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return SWIZZLE_Z; 113770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'w': 114770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick case 'a': 115770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return SWIZZLE_W; 116770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } 117770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 118770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return 0; 119770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 120770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 1210e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanickstatic int 1220e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanickhandle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval) 1230e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick{ 1244e4c2ee1fd574d1d651c559f46afb6ca5487156dIan Romanick lval->string = strdup(text); 1250e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick 1260e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL) 1270e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick ? IDENTIFIER : USED_IDENTIFIER; 1280e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick} 1290e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick 130770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define YY_USER_ACTION \ 131770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick do { \ 132770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->first_column = yylloc->last_column; \ 133770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->last_column += yyleng; \ 134770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick if ((yylloc->first_line == 1) \ 135770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick && (yylloc->first_column == 1)) { \ 136770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->position = 1; \ 137770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } else { \ 138770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->position += yylloc->last_column - yylloc->first_column; \ 139770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } \ 140770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } while(0); 141770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 142b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worth#define YY_NO_INPUT 143b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worth 144b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worth/* Yes, this is intentionally doing nothing. We have this line of code 145b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worthhere only to avoid the compiler complaining about an unput function 146b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worththat is defined, but never called. */ 147b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worth#define YY_USER_INIT while (0) { unput(0); } 148b4a08a0d87908b024a3d2595073b1beb6eda161eCarl Worth 149770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define YY_EXTRA_TYPE struct asm_parser_state * 1503c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worth 1513c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worth/* Flex defines a couple of functions with no declarations nor the 1523c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worthstatic keyword. Declare them here to avoid a compiler warning. */ 1533c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worthint yyget_column (yyscan_t yyscanner); 1543c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worthvoid yyset_column (int column_no , yyscan_t yyscanner); 1553c716a7ec2cabfc18a2506f9db655406f8c64fb0Carl Worth 156770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick%} 157770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 158770cebbc29863ae944a31463ee4bdeb789105abaIan Romanicknum [0-9]+ 159770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickexp [Ee][-+]?[0-9]+ 160770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickfrac "."[0-9]+ 161770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickdot "."[ \t]* 162770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 163d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanicksz [HRX]? 164d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanickszf [HR]? 165d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanickcc C? 166d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanicksat (_SAT)? 167d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 168a834381506d5be80251953666198fc3b9bc4b731Dave Airlie%option prefix="_mesa_program_" 169770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick%option bison-bridge bison-locations reentrant noyywrap 170770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick%% 171770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 172770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"!!ARBvp1.0" { return ARBvp_10; } 173770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"!!ARBfp1.0" { return ARBfp_10; } 174770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickADDRESS { 175770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->integer = at_address; 176770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS); 177770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 178770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickALIAS { return ALIAS; } 179770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickATTRIB { return ATTRIB; } 180770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickEND { return END; } 181770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickOPTION { return OPTION; } 182770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickOUTPUT { return OUTPUT; } 183770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickPARAM { return PARAM; } 184770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickTEMP { yylval->integer = at_temp; return TEMP; } 185770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 186d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickABS{sz}{cc}{sat} { return_opcode( 1, VECTOR_OP, ABS, 3); } 187d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickADD{sz}{cc}{sat} { return_opcode( 1, BIN_OP, ADD, 3); } 188d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickARL { return_opcode(require_ARB_vp, ARL, ARL, 3); } 189d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 190d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickCMP{sat} { return_opcode(require_ARB_fp, TRI_OP, CMP, 3); } 191d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickCOS{szf}{cc}{sat} { return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); } 192d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 193d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDDX{szf}{cc}{sat} { return_opcode(require_NV_fp, VECTOR_OP, DDX, 3); } 194d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDDY{szf}{cc}{sat} { return_opcode(require_NV_fp, VECTOR_OP, DDY, 3); } 195d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDP3{sz}{cc}{sat} { return_opcode( 1, BIN_OP, DP3, 3); } 196d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDP4{sz}{cc}{sat} { return_opcode( 1, BIN_OP, DP4, 3); } 197d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDPH{sz}{cc}{sat} { return_opcode( 1, BIN_OP, DPH, 3); } 198d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickDST{szf}{cc}{sat} { return_opcode( 1, BIN_OP, DST, 3); } 199d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 200d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickEX2{szf}{cc}{sat} { return_opcode( 1, SCALAR_OP, EX2, 3); } 201d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickEXP { return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); } 202d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 203d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickFLR{sz}{cc}{sat} { return_opcode( 1, VECTOR_OP, FLR, 3); } 204d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickFRC{sz}{cc}{sat} { return_opcode( 1, VECTOR_OP, FRC, 3); } 205d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 206d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickKIL { return_opcode(require_ARB_fp, KIL, KIL, 3); } 207d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 208d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickLIT{szf}{cc}{sat} { return_opcode( 1, VECTOR_OP, LIT, 3); } 209d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickLG2{szf}{cc}{sat} { return_opcode( 1, SCALAR_OP, LG2, 3); } 210d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickLOG { return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); } 211d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickLRP{sz}{cc}{sat} { return_opcode(require_ARB_fp, TRI_OP, LRP, 3); } 212d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 213d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickMAD{sz}{cc}{sat} { return_opcode( 1, TRI_OP, MAD, 3); } 214d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickMAX{sz}{cc}{sat} { return_opcode( 1, BIN_OP, MAX, 3); } 215d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickMIN{sz}{cc}{sat} { return_opcode( 1, BIN_OP, MIN, 3); } 216d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickMOV{sz}{cc}{sat} { return_opcode( 1, VECTOR_OP, MOV, 3); } 217d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickMUL{sz}{cc}{sat} { return_opcode( 1, BIN_OP, MUL, 3); } 218d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 219d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickPK2H { return_opcode(require_NV_fp, VECTOR_OP, PK2H, 4); } 220d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickPK2US { return_opcode(require_NV_fp, VECTOR_OP, PK2US, 5); } 221d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickPK4B { return_opcode(require_NV_fp, VECTOR_OP, PK4B, 4); } 222d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickPK4UB { return_opcode(require_NV_fp, VECTOR_OP, PK4UB, 5); } 223d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickPOW{szf}{cc}{sat} { return_opcode( 1, BINSC_OP, POW, 3); } 224d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 225d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickRCP{szf}{cc}{sat} { return_opcode( 1, SCALAR_OP, RCP, 3); } 226d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickRFL{szf}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, RFL, 3); } 227d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickRSQ{szf}{cc}{sat} { return_opcode( 1, SCALAR_OP, RSQ, 3); } 228d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 229d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSCS{sat} { return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); } 230d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSEQ{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, SEQ, 3); } 231d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSFL{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, SFL, 3); } 232d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSGE{sz}{cc}{sat} { return_opcode( 1, BIN_OP, SGE, 3); } 233d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSGT{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, SGT, 3); } 234d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSIN{szf}{cc}{sat} { return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); } 235d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSLE{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, SLE, 3); } 236d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSLT{sz}{cc}{sat} { return_opcode( 1, BIN_OP, SLT, 3); } 237d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSNE{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, SNE, 3); } 238d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSTR{sz}{cc}{sat} { return_opcode(require_NV_fp, BIN_OP, STR, 3); } 239d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSUB{sz}{cc}{sat} { return_opcode( 1, BIN_OP, SUB, 3); } 240d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickSWZ{sat} { return_opcode( 1, SWZ, SWZ, 3); } 241d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 242d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickTEX{cc}{sat} { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); } 243d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickTXB{cc}{sat} { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); } 244d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickTXD{cc}{sat} { return_opcode(require_NV_fp, TXD_OP, TXD, 3); } 245d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickTXP{cc}{sat} { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); } 246d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 247d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickUP2H{cc}{sat} { return_opcode(require_NV_fp, SCALAR_OP, UP2H, 4); } 248d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickUP2US{cc}{sat} { return_opcode(require_NV_fp, SCALAR_OP, UP2US, 5); } 24909af58d7ed7dfa8f2ce2b881bb849064e136c830Ian RomanickUP4B{cc}{sat} { return_opcode(require_NV_fp, SCALAR_OP, UP4B, 4); } 25009af58d7ed7dfa8f2ce2b881bb849064e136c830Ian RomanickUP4UB{cc}{sat} { return_opcode(require_NV_fp, SCALAR_OP, UP4UB, 5); } 251d0adebb8d5ef680590b0f281a20516318c0b8b62Ian Romanick 252d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickX2D{szf}{cc}{sat} { return_opcode(require_NV_fp, TRI_OP, X2D, 3); } 253d0adebb8d5ef680590b0f281a20516318c0b8b62Ian RomanickXPD{sat} { return_opcode( 1, BIN_OP, XPD, 3); } 254770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 255770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickvertex { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); } 256770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickfragment { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); } 257770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickprogram { return PROGRAM; } 258770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstate { return STATE; } 259770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickresult { return RESULT; } 260770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 261770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}ambient { return AMBIENT; } 262cbe4133109c95fa6b90d8a601c78f043db456809Ian Romanick{dot}attenuation { return ATTENUATION; } 263770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}back { return BACK; } 264770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}clip { return_token_or_DOT(require_ARB_vp, CLIP); } 265770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}color { return COLOR; } 266770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}depth { return_token_or_DOT(require_ARB_fp, DEPTH); } 267770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}diffuse { return DIFFUSE; } 268770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}direction { return DIRECTION; } 269770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}emission { return EMISSION; } 270770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}env { return ENV; } 271770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}eye { return EYE; } 272770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}fogcoord { return FOGCOORD; } 273770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}fog { return FOG; } 274770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}front { return FRONT; } 275770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}half { return HALF; } 276770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}inverse { return INVERSE; } 277770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}invtrans { return INVTRANS; } 278770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}light { return LIGHT; } 279770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}lightmodel { return LIGHTMODEL; } 280770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}lightprod { return LIGHTPROD; } 281770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}local { return LOCAL; } 282770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}material { return MATERIAL; } 283770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}program { return MAT_PROGRAM; } 284770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}matrix { return MATRIX; } 285770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}matrixindex { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); } 286770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}modelview { return MODELVIEW; } 287770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}mvp { return MVP; } 288770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}normal { return_token_or_DOT(require_ARB_vp, NORMAL); } 289770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}object { return OBJECT; } 290770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}palette { return PALETTE; } 291770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}params { return PARAMS; } 292770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}plane { return PLANE; } 2933fedd08779c2bc4a5f02c035e7ca4cab5da649ddBrian Paul{dot}point { return_token_or_DOT(require_ARB_vp, POINT_TOK); } 294770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}pointsize { return_token_or_DOT(require_ARB_vp, POINTSIZE); } 295770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}position { return POSITION; } 296770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}primary { return PRIMARY; } 297770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}projection { return PROJECTION; } 298770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}range { return_token_or_DOT(require_ARB_fp, RANGE); } 299770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}row { return ROW; } 300770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}scenecolor { return SCENECOLOR; } 301770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}secondary { return SECONDARY; } 302770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}shininess { return SHININESS; } 3033fedd08779c2bc4a5f02c035e7ca4cab5da649ddBrian Paul{dot}size { return_token_or_DOT(require_ARB_vp, SIZE_TOK); } 304770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}specular { return SPECULAR; } 305770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}spot { return SPOT; } 306770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}texcoord { return TEXCOORD; } 307770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}texenv { return_token_or_DOT(require_ARB_fp, TEXENV); } 308770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}texgen { return_token_or_DOT(require_ARB_vp, TEXGEN); } 309770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}q { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); } 310770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}s { return_token_or_DOT(require_ARB_vp, TEXGEN_S); } 311770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}t { return_token_or_DOT(require_ARB_vp, TEXGEN_T); } 312770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}texture { return TEXTURE; } 313770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}transpose { return TRANSPOSE; } 314770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}attrib { return_token_or_DOT(require_ARB_vp, VTXATTRIB); } 315770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{dot}weight { return_token_or_DOT(require_ARB_vp, WEIGHT); } 316770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 317770cebbc29863ae944a31463ee4bdeb789105abaIan Romanicktexture { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); } 318770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick1D { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); } 319770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick2D { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); } 320770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick3D { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); } 321770cebbc29863ae944a31463ee4bdeb789105abaIan RomanickCUBE { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); } 32288018e2e073909ae807f16707f2701e068900926Ian RomanickRECT { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); } 3231edd13bf23c7a9dad00420f519a35f75b27e853bIan RomanickSHADOW1D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); } 3241edd13bf23c7a9dad00420f519a35f75b27e853bIan RomanickSHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); } 3251edd13bf23c7a9dad00420f519a35f75b27e853bIan RomanickSHADOWRECT { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); } 326aafd5762593aa01f2d612f4d769d1af383422c1cIan RomanickARRAY1D { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); } 327aafd5762593aa01f2d612f4d769d1af383422c1cIan RomanickARRAY2D { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); } 328aafd5762593aa01f2d612f4d769d1af383422c1cIan RomanickARRAYSHADOW1D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); } 329aafd5762593aa01f2d612f4d769d1af383422c1cIan RomanickARRAYSHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); } 330770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 3310e7953366f2a8ab1b0e885d94f6635c7640b3cc7Ian Romanick[_a-zA-Z$][_a-zA-Z0-9$]* { return handle_ident(yyextra, yytext, yylval); } 332770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 333770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".." { return DOT_DOT; } 334770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 335770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{num} { 336770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->integer = strtol(yytext, NULL, 10); 337770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return INTEGER; 338770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 339770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{num}?{frac}{exp}? { 340346298c7658f2ec8b105e5e53101637af232724fMarcin BaczyÅ„ski yylval->real = _mesa_strtof(yytext, NULL); 341770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return REAL; 342770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 343770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{num}"."/[^.] { 344346298c7658f2ec8b105e5e53101637af232724fMarcin BaczyÅ„ski yylval->real = _mesa_strtof(yytext, NULL); 345770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return REAL; 346770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 347770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{num}{exp} { 348346298c7658f2ec8b105e5e53101637af232724fMarcin BaczyÅ„ski yylval->real = _mesa_strtof(yytext, NULL); 349770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return REAL; 350770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 351770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{num}"."{exp} { 352346298c7658f2ec8b105e5e53101637af232724fMarcin BaczyÅ„ski yylval->real = _mesa_strtof(yytext, NULL); 353770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return REAL; 354770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 355770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 356770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".xyzw" { 357770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_NOOP; 358770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XYZW; 359770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK4; 360770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 361770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 362770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".xy"[zw] { 363770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 364770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XY 365770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[3]); 366770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK3; 367770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 368770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".xzw" { 369770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 370770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XZW; 371770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK3; 372770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 373770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".yzw" { 374770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 375770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_YZW; 376770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK3; 377770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 378770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 379770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".x"[yzw] { 380770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 381770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_X 382770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[2]); 383770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK2; 384770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 385770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".y"[zw] { 386770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 387770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_Y 388770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[2]); 389770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK2; 390770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 391770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".zw" { 392770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 393770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_ZW; 394770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK2; 395770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 396770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 397770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"."[xyzw] { 398770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick const unsigned s = swiz_from_char(yytext[1]); 399770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s); 400770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = mask_from_char(yytext[1]); 401770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK1; 402770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 403770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 404770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"."[xyzw]{4} { 405770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]), 406770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[2]), 407770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[3]), 408770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[4])); 409770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = 0; 410770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return SWIZZLE; 411770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 412770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 413770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".rgba" { 414770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_NOOP; 415770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XYZW; 416770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK4); 417770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 418770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 419770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".rg"[ba] { 420770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 421770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XY 422770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[3]); 423770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK3); 424770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 425770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".rba" { 426770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 427770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_XZW; 428770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK3); 429770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 430770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".gba" { 431770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 432770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_YZW; 433770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK3); 434770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 435770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 436770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".r"[gba] { 437770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 438770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_X 439770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[2]); 440770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK2); 441770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 442770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".g"[ba] { 443770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 444770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_Y 445770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick | mask_from_char(yytext[2]); 446770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK2); 447770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 448770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".ba" { 449770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = SWIZZLE_INVAL; 450770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_ZW; 451770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK2); 452770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 453770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 454770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"."[gba] { 455770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick const unsigned s = swiz_from_char(yytext[1]); 456770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s); 457770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = mask_from_char(yytext[1]); 458770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, MASK1); 459770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 460770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 461770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 462770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick".r" { 463770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick if (require_ARB_vp) { 464770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return TEXGEN_R; 465770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } else { 466770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, 467770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick SWIZZLE_X, SWIZZLE_X); 468770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = WRITEMASK_X; 469770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return MASK1; 470770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick } 471770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 472770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 473770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"."[rgba]{4} { 474770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]), 475770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[2]), 476770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[3]), 477770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick swiz_from_char(yytext[4])); 478770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylval->swiz_mask.mask = 0; 479770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick return_token_or_DOT(require_ARB_fp, SWIZZLE); 480770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 481770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 482770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick"." { return DOT; } 483770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 484770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick\n { 485770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->first_line++; 486770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->first_column = 1; 487770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->last_line++; 488770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->last_column = 1; 489770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylloc->position++; 490770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 4919b70c33e735ff060ddad7d0b501d19c670f41618Ian Romanick[ \t\r]+ /* eat whitespace */ ; 492770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#.*$ /* eat comments */ ; 493770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick. { return yytext[0]; } 494770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick%% 495770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 496770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickvoid 497770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick_mesa_program_lexer_ctor(void **scanner, struct asm_parser_state *state, 498770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick const char *string, size_t len) 499770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{ 500770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylex_init_extra(state, scanner); 501770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yy_scan_bytes(string, len, *scanner); 502770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 503770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick 504770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickvoid 505770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick_mesa_program_lexer_dtor(void *scanner) 506770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick{ 507770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick yylex_destroy(scanner); 508770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} 509