1306196Sjkim/* A Bison parser, made from itbl-parse.y 2110010Smarkm by GNU bison 1.35. */ 3110010Smarkm 4160819Ssimon#define YYBISON 1 /* Identify Bison output. */ 5110010Smarkm 6110010Smarkm# define DREG 257 7110010Smarkm# define CREG 258 8110010Smarkm# define GREG 259 9110010Smarkm# define IMMED 260 10110010Smarkm# define ADDR 261 11110010Smarkm# define INSN 262 12110010Smarkm# define NUM 263 13110010Smarkm# define ID 264 14110010Smarkm# define NL 265 15110010Smarkm# define PNUM 266 16110010Smarkm 17110010Smarkm#line 21 "itbl-parse.y" 18110010Smarkm 19110010Smarkm 20215698Ssimon/* 21215698Ssimon 22215698SsimonYacc grammar for instruction table entries. 23215698Ssimon 24215698Ssimon======================================================================= 25110010SmarkmOriginal Instruction table specification document: 26110010Smarkm 27110010Smarkm MIPS Coprocessor Table Specification 28110010Smarkm ==================================== 29110010Smarkm 30110010SmarkmThis document describes the format of the MIPS coprocessor table. The 31110010Smarkmtable specifies a list of valid functions, data registers and control 32110010Smarkmregisters that can be used in coprocessor instructions. This list, 33110010Smarkmtogether with the coprocessor instruction classes listed below, 34110010Smarkmspecifies the complete list of coprocessor instructions that will 35110010Smarkmbe recognized and assembled by the GNU assembler. In effect, 36110010Smarkmthis makes the GNU assembler table-driven, where the table is 37110010Smarkmspecified by the programmer. 38110010Smarkm 39110010SmarkmThe table is an ordinary text file that the GNU assembler reads when 40110010Smarkmit starts. Using the information in the table, the assembler 41276864Sjkimgenerates an internal list of valid coprocessor registers and 42276864Sjkimfunctions. The assembler uses this internal list in addition to the 43110010Smarkmstandard MIPS registers and instructions which are built-in to the 44110010Smarkmassembler during code generation. 45215698Ssimon 46215698SsimonTo specify the coprocessor table when invoking the GNU assembler, use 47215698Ssimonthe command line option "--itbl file", where file is the 48215698Ssimoncomplete name of the table, including path and extension. 49160819Ssimon 50215698SsimonExamples: 51160819Ssimon 52160819Ssimon gas -t cop.tbl test.s -o test.o 53276864Sjkim gas -t /usr/local/lib/cop.tbl test.s -o test.o 54276864Sjkim gas --itbl d:\gnu\data\cop.tbl test.s -o test.o 55276864Sjkim 56110010SmarkmOnly one table may be supplied during a single invocation of 57276864Sjkimthe assembler. 58276864Sjkim 59276864Sjkim 60276864SjkimInstruction classes 61276864Sjkim=================== 62276864Sjkim 63215698SsimonBelow is a list of the valid coprocessor instruction classes for 64276864Sjkimany given coprocessor "z". These instructions are already recognized 65276864Sjkimby the assembler, and are listed here only for reference. 66276864Sjkim 67276864SjkimClass format instructions 68276864Sjkim------------------------------------------------- 69215698SsimonClass1: 70276864Sjkim op base rt offset 71110010Smarkm LWCz rt,offset (base) 72110010Smarkm SWCz rt,offset (base) 73110010SmarkmClass2: 74110010Smarkm COPz sub rt rd 0 75110010Smarkm MTCz rt,rd 76110010Smarkm MFCz rt,rd 77110010Smarkm CTCz rt,rd 78110010Smarkm CFCz rt,rd 79110010SmarkmClass3: 80110010Smarkm COPz CO cofun 81110010Smarkm COPz cofun 82110010SmarkmClass4: 83110010Smarkm COPz BC br offset 84110010Smarkm BCzT offset 85110010Smarkm BCzF offset 86110010SmarkmClass5: 87110010Smarkm COPz sub rt rd 0 88110010Smarkm DMFCz rt,rd 89110010Smarkm DMTCz rt,rd 90110010SmarkmClass6: 91110010Smarkm op base rt offset 92110010Smarkm LDCz rt,offset (base) 93110010Smarkm SDCz rt,offset (base) 94110010SmarkmClass7: 95110010Smarkm COPz BC br offset 96110010Smarkm BCzTL offset 97110010Smarkm BCzFL offset 98110010Smarkm 99110010SmarkmThe coprocessor table defines coprocessor-specific registers that can 100110010Smarkmbe used with all of the above classes of instructions, where 101110010Smarkmappropriate. It also defines additional coprocessor-specific 102110010Smarkmfunctions for Class3 (COPz cofun) instructions, Thus, the table allows 103110010Smarkmthe programmer to use convenient mnemonics and operands for these 104110010Smarkmfunctions, instead of the COPz mmenmonic and cofun operand. 105110010Smarkm 106110010SmarkmThe names of the MIPS general registers and their aliases are defined 107110010Smarkmby the assembler and will be recognized as valid register names by the 108110010Smarkmassembler when used (where allowed) in coprocessor instructions. 109110010SmarkmHowever, the names and values of all coprocessor data and control 110110010Smarkmregister mnemonics must be specified in the coprocessor table. 111110010Smarkm 112110010Smarkm 113110010SmarkmTable Grammar 114110010Smarkm============= 115110010Smarkm 116110010SmarkmHere is the grammar for the coprocessor table: 117110010Smarkm 118110010Smarkm table -> entry* 119110010Smarkm 120110010Smarkm entry -> [z entrydef] [comment] '\n' 121110010Smarkm 122110010Smarkm entrydef -> type name val 123110010Smarkm entrydef -> 'insn' name val funcdef ; type of entry (instruction) 124110010Smarkm 125110010Smarkm z -> 'p'['0'..'3'] ; processor number 126110010Smarkm type -> ['dreg' | 'creg' | 'greg' ] ; type of entry (register) 127110010Smarkm ; 'dreg', 'creg' or 'greg' specifies a data, control, or general 128110010Smarkm ; register mnemonic, respectively 129110010Smarkm name -> [ltr|dec]* ; mnemonic of register/function 130110010Smarkm val -> [dec|hex] ; register/function number (integer constant) 131110010Smarkm 132110010Smarkm funcdef -> frange flags fields 133160819Ssimon ; bitfield range for opcode 134110010Smarkm ; list of fields' formats 135110010Smarkm fields -> field* 136306196Sjkim field -> [','] ftype frange flags 137215698Ssimon flags -> ['*' flagexpr] 138215698Ssimon flagexpr -> '[' flagexpr ']' 139215698Ssimon flagexpr -> val '|' flagexpr 140215698Ssimon ftype -> [ type | 'immed' | 'addr' ] 141110010Smarkm ; 'immed' specifies an immediate value; see grammar for "val" above 142296317Sdelphij ; 'addr' specifies a C identifier; name of symbol to be resolved at 143296317Sdelphij ; link time 144296317Sdelphij frange -> ':' val '-' val ; starting to ending bit positions, where 145296317Sdelphij ; where 0 is least significant bit 146296317Sdelphij frange -> (null) ; default range of 31-0 will be assumed 147296317Sdelphij 148296317Sdelphij comment -> [';'|'#'] [char]* 149296317Sdelphij char -> any printable character 150296317Sdelphij ltr -> ['a'..'z'|'A'..'Z'] 151110010Smarkm dec -> ['0'..'9']* ; value in decimal 152110010Smarkm hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']* ; value in hexadecimal 153110010Smarkm 154110010Smarkm 155215698SsimonExamples 156238405Sjkim======== 157296317Sdelphij 158296317SdelphijExample 1: 159296317Sdelphij 160296317SdelphijThe table: 161296317Sdelphij 162296317Sdelphij p1 dreg d1 1 ; data register "d1" for COP1 has value 1 163296317Sdelphij p1 creg c3 3 ; ctrl register "c3" for COP1 has value 3 164296317Sdelphij p3 func fill 0x1f:24-20 ; function "fill" for COP3 has value 31 and 165296317Sdelphij ; no fields 166296317Sdelphij 167296317Sdelphijwill allow the assembler to accept the following coprocessor instructions: 168296317Sdelphij 169296317Sdelphij LWC1 d1,0x100 ($2) 170296317Sdelphij fill 171296317Sdelphij 172296317SdelphijHere, the general purpose register "$2", and instruction "LWC1", are standard 173296317Sdelphijmnemonics built-in to the MIPS assembler. 174296317Sdelphij 175296317Sdelphij 176296317SdelphijExample 2: 177296317Sdelphij 178296317SdelphijThe table: 179296317Sdelphij 180296317Sdelphij p3 dreg d3 3 ; data register "d3" for COP3 has value 3 181296317Sdelphij p3 creg c2 22 ; control register "c2" for COP3 has value 22 182296317Sdelphij p3 func fee 0x1f:24-20 dreg:17-13 creg:12-8 immed:7-0 183110010Smarkm ; function "fee" for COP3 has value 31, and 3 fields 184110010Smarkm ; consisting of a data register, a control register, 185110010Smarkm ; and an immediate value. 186110010Smarkm 187110010Smarkmwill allow the assembler to accept the following coprocessor instruction: 188110010Smarkm 189110010Smarkm fee d3,c2,0x1 190110010Smarkm 191110010Smarkmand will emit the object code: 192110010Smarkm 193296317Sdelphij 31-26 25 24-20 19-18 17-13 12-8 7-0 194296317Sdelphij COPz CO fun dreg creg immed 195296317Sdelphij 010011 1 11111 00 00011 10110 00000001 196296317Sdelphij 197296317Sdelphij 0x4ff07601 198296317Sdelphij 199296317Sdelphij 200296317SdelphijExample 3: 201296317Sdelphij 202296317SdelphijThe table: 203296317Sdelphij 204296317Sdelphij p3 dreg d3 3 ; data register "d3" for COP3 has value 3 205296317Sdelphij p3 creg c2 22 ; control register "c2" for COP3 has value 22 206296317Sdelphij p3 func fuu 0x01f00001 dreg:17-13 creg:12-8 207296317Sdelphij 208296317Sdelphijwill allow the assembler to accept the following coprocessor 209296317Sdelphijinstruction: 210296317Sdelphij 211296317Sdelphij fuu d3,c2 212296317Sdelphij 213296317Sdelphijand will emit the object code: 214296317Sdelphij 215296317Sdelphij 31-26 25 24-20 19-18 17-13 12-8 7-0 216296317Sdelphij COPz CO fun dreg creg 217296317Sdelphij 010011 1 11111 00 00011 10110 00000001 218296317Sdelphij 219296317Sdelphij 0x4ff07601 220296317Sdelphij 221110010SmarkmIn this way, the programmer can force arbitrary bits of an instruction 222296317Sdelphijto have predefined values. 223296317Sdelphij 224296317Sdelphij======================================================================= 225296317SdelphijAdditional notes: 226296317Sdelphij 227110010SmarkmEncoding of ranges: 228296317SdelphijTo handle more than one bit position range within an instruction, 229296317Sdelphijuse 0s to mask out the ranges which don't apply. 230296317SdelphijMay decide to modify the syntax to allow commas separate multiple 231296317Sdelphijranges within an instruction (range','range). 232296317Sdelphij 233296317SdelphijChanges in grammar: 234296317Sdelphij The number of parms argument to the function entry 235296317Sdelphijwas deleted from the original format such that we now count the fields. 236296317Sdelphij 237296317Sdelphij---- 238296317SdelphijFIXME! should really change lexical analyzer 239296317Sdelphijto recognize 'dreg' etc. in context sensitive way. 240296317SdelphijCurrently function names or mnemonics may be incorrectly parsed as keywords 241296317Sdelphij 242296317SdelphijFIXME! hex is ambiguous with any digit 243296317Sdelphij 244296317Sdelphij*/ 245296317Sdelphij 246296317Sdelphij#include <stdio.h> 247296317Sdelphij#include "itbl-ops.h" 248296317Sdelphij 249296317Sdelphij/* #define DEBUG */ 250296317Sdelphij 251296317Sdelphij#ifdef DEBUG 252296317Sdelphij#ifndef DBG_LVL 253296317Sdelphij#define DBG_LVL 1 254296317Sdelphij#endif 255296317Sdelphij#else 256110010Smarkm#define DBG_LVL 0 257296317Sdelphij#endif 258296317Sdelphij 259110010Smarkm#if DBG_LVL >= 1 260110010Smarkm#define DBG(x) printf x 261110010Smarkm#else 262160819Ssimon#define DBG(x) 263110010Smarkm#endif 264296317Sdelphij 265296317Sdelphij#if DBG_LVL >= 2 266160819Ssimon#define DBGL2(x) printf x 267110010Smarkm#else 268110010Smarkm#define DBGL2(x) 269110010Smarkm#endif 270110010Smarkm 271296317Sdelphijstatic int sbit, ebit; 272160819Ssimonstatic struct itbl_entry *insn=0; 273160819Ssimonextern int insntbl_line; 274int yyparse PARAMS ((void)); 275int yylex PARAMS ((void)); 276static int yyerror PARAMS ((const char *)); 277 278 279#line 283 "itbl-parse.y" 280#ifndef YYSTYPE 281typedef union 282 { 283 char *str; 284 int num; 285 int processor; 286 unsigned long val; 287 } yystype; 288# define YYSTYPE yystype 289# define YYSTYPE_IS_TRIVIAL 1 290#endif 291#ifndef YYDEBUG 292# define YYDEBUG 0 293#endif 294 295 296 297#define YYFINAL 51 298#define YYFLAG -32768 299#define YYNTBASE 20 300 301/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ 302#define YYTRANSLATE(x) ((unsigned)(x) <= 266 ? yytranslate[x] : 34) 303 304/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ 305static const char yytranslate[] = 306{ 307 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 308 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 309 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 310 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 311 2, 2, 17, 2, 13, 19, 2, 2, 2, 2, 312 2, 2, 2, 2, 2, 2, 2, 2, 18, 2, 313 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 314 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 315 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 316 2, 15, 2, 16, 2, 2, 2, 2, 2, 2, 317 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 318 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 319 2, 2, 2, 2, 14, 2, 2, 2, 2, 2, 320 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 321 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 322 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 323 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 324 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 325 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 326 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 327 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 328 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 329 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 330 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 331 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 332 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, 333 6, 7, 8, 9, 10, 11, 12 334}; 335 336#if YYDEBUG 337static const short yyprhs[] = 338{ 339 0, 0, 2, 5, 6, 12, 13, 23, 25, 28, 340 32, 35, 36, 38, 40, 42, 46, 50, 54, 56, 341 59, 60, 65, 66, 68, 70, 72, 74, 76, 78 342}; 343static const short yyrhs[] = 344{ 345 21, 0, 22, 21, 0, 0, 30, 31, 32, 33, 346 11, 0, 0, 30, 8, 32, 33, 29, 28, 23, 347 24, 11, 0, 11, 0, 1, 11, 0, 13, 26, 348 24, 0, 26, 24, 0, 0, 31, 0, 7, 0, 349 6, 0, 25, 29, 28, 0, 9, 14, 27, 0, 350 15, 27, 16, 0, 9, 0, 17, 27, 0, 0, 351 18, 9, 19, 9, 0, 0, 12, 0, 3, 0, 352 4, 0, 5, 0, 10, 0, 9, 0, 9, 0 353}; 354 355#endif 356 357#if YYDEBUG 358/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 359static const short yyrline[] = 360{ 361 0, 300, 304, 306, 309, 316, 316, 325, 326, 329, 362 331, 332, 335, 341, 346, 353, 362, 367, 371, 377, 363 383, 389, 396, 403, 411, 417, 422, 429, 437, 445 364}; 365#endif 366 367 368#if (YYDEBUG) || defined YYERROR_VERBOSE 369 370/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ 371static const char *const yytname[] = 372{ 373 "$", "error", "$undefined.", "DREG", "CREG", "GREG", "IMMED", "ADDR", 374 "INSN", "NUM", "ID", "NL", "PNUM", "','", "'|'", "'['", "']'", "'*'", 375 "':'", "'-'", "insntbl", "entrys", "entry", "@1", "fieldspecs", "ftype", 376 "fieldspec", "flagexpr", "flags", "range", "pnum", "regtype", "name", 377 "value", 0 378}; 379#endif 380 381/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 382static const short yyr1[] = 383{ 384 0, 20, 21, 21, 22, 23, 22, 22, 22, 24, 385 24, 24, 25, 25, 25, 26, 27, 27, 27, 28, 386 28, 29, 29, 30, 31, 31, 31, 32, 34, 33 387}; 388 389/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 390static const short yyr2[] = 391{ 392 0, 1, 2, 0, 5, 0, 9, 1, 2, 3, 393 2, 0, 1, 1, 1, 3, 3, 3, 1, 2, 394 0, 4, 0, 1, 1, 1, 1, 1, 1, 1 395}; 396 397/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE 398 doesn't specify something else to do. Zero means the default is an 399 error. */ 400static const short yydefact[] = 401{ 402 0, 0, 7, 23, 1, 0, 0, 8, 2, 24, 403 25, 26, 0, 0, 27, 0, 0, 29, 22, 0, 404 0, 20, 4, 0, 0, 5, 0, 18, 0, 19, 405 11, 21, 0, 0, 14, 13, 0, 0, 22, 11, 406 12, 16, 17, 11, 6, 20, 10, 9, 15, 0, 407 0, 0 408}; 409 410static const short yydefgoto[] = 411{ 412 49, 4, 5, 30, 37, 38, 39, 29, 25, 21, 413 6, 40, 15, 18 414}; 415 416static const short yypact[] = 417{ 418 0, -9,-32768,-32768,-32768, 0, 12,-32768,-32768,-32768, 419 -32768,-32768, 3, 3,-32768, 9, 9,-32768, -8, 8, 420 19, 15,-32768, 10, -6,-32768, 24, 20, -6,-32768, 421 1,-32768, -6, 21,-32768,-32768, 18, 25, -8, 1, 422 -32768,-32768,-32768, 1,-32768, 15,-32768,-32768,-32768, 35, 423 38,-32768 424}; 425 426static const short yypgoto[] = 427{ 428 -32768, 34,-32768,-32768, -13,-32768, 4, -1, -4, 5, 429 -32768, 36, 31, 29 430}; 431 432 433#define YYLAST 45 434 435 436static const short yytable[] = 437{ 438 -3, 1, 7, 27, 9, 10, 11, 34, 35, 28, 439 20, 2, 3, 14, 36, 9, 10, 11, 17, 22, 440 12, 9, 10, 11, 34, 35, 46, 33, 23, 26, 441 47, 41, 24, 31, 32, 50, 44, 42, 51, 8, 442 43, 48, 13, 45, 16, 19 443}; 444 445static const short yycheck[] = 446{ 447 0, 1, 11, 9, 3, 4, 5, 6, 7, 15, 448 18, 11, 12, 10, 13, 3, 4, 5, 9, 11, 449 8, 3, 4, 5, 6, 7, 39, 28, 9, 19, 450 43, 32, 17, 9, 14, 0, 11, 16, 0, 5, 451 36, 45, 6, 38, 13, 16 452}; 453/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ 454#line 3 "/usr/share/bison-1.35/bison.simple" 455 456/* Skeleton output parser for bison, 457 458 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software 459 Foundation, Inc. 460 461 This program is free software; you can redistribute it and/or modify 462 it under the terms of the GNU General Public License as published by 463 the Free Software Foundation; either version 2, or (at your option) 464 any later version. 465 466 This program is distributed in the hope that it will be useful, 467 but WITHOUT ANY WARRANTY; without even the implied warranty of 468 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 469 GNU General Public License for more details. 470 471 You should have received a copy of the GNU General Public License 472 along with this program; if not, write to the Free Software 473 Foundation, Inc., 59 Temple Place - Suite 330, 474 Boston, MA 02111-1307, USA. */ 475 476/* As a special exception, when this file is copied by Bison into a 477 Bison output file, you may use that output file without restriction. 478 This special exception was added by the Free Software Foundation 479 in version 1.24 of Bison. */ 480 481/* This is the parser code that is written into each bison parser when 482 the %semantic_parser declaration is not specified in the grammar. 483 It was written by Richard Stallman by simplifying the hairy parser 484 used when %semantic_parser is specified. */ 485 486/* All symbols defined below should begin with yy or YY, to avoid 487 infringing on user name space. This should be done even for local 488 variables, as they might otherwise be expanded by user macros. 489 There are some unavoidable exceptions within include files to 490 define necessary library symbols; they are noted "INFRINGES ON 491 USER NAME SPACE" below. */ 492 493#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) 494 495/* The parser invokes alloca or malloc; define the necessary symbols. */ 496 497# if YYSTACK_USE_ALLOCA 498# define YYSTACK_ALLOC alloca 499# else 500# ifndef YYSTACK_USE_ALLOCA 501# if defined (alloca) || defined (_ALLOCA_H) 502# define YYSTACK_ALLOC alloca 503# else 504# ifdef __GNUC__ 505# define YYSTACK_ALLOC __builtin_alloca 506# endif 507# endif 508# endif 509# endif 510 511# ifdef YYSTACK_ALLOC 512 /* Pacify GCC's `empty if-body' warning. */ 513# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 514# else 515# if defined (__STDC__) || defined (__cplusplus) 516# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 517# define YYSIZE_T size_t 518# endif 519# define YYSTACK_ALLOC malloc 520# define YYSTACK_FREE free 521# endif 522#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ 523 524 525#if (! defined (yyoverflow) \ 526 && (! defined (__cplusplus) \ 527 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 528 529/* A type that is properly aligned for any stack member. */ 530union yyalloc 531{ 532 short yyss; 533 YYSTYPE yyvs; 534# if YYLSP_NEEDED 535 YYLTYPE yyls; 536# endif 537}; 538 539/* The size of the maximum gap between one aligned stack and the next. */ 540# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) 541 542/* The size of an array large to enough to hold all stacks, each with 543 N elements. */ 544# if YYLSP_NEEDED 545# define YYSTACK_BYTES(N) \ 546 ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ 547 + 2 * YYSTACK_GAP_MAX) 548# else 549# define YYSTACK_BYTES(N) \ 550 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ 551 + YYSTACK_GAP_MAX) 552# endif 553 554/* Copy COUNT objects from FROM to TO. The source and destination do 555 not overlap. */ 556# ifndef YYCOPY 557# if 1 < __GNUC__ 558# define YYCOPY(To, From, Count) \ 559 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 560# else 561# define YYCOPY(To, From, Count) \ 562 do \ 563 { \ 564 register YYSIZE_T yyi; \ 565 for (yyi = 0; yyi < (Count); yyi++) \ 566 (To)[yyi] = (From)[yyi]; \ 567 } \ 568 while (0) 569# endif 570# endif 571 572/* Relocate STACK from its old location to the new one. The 573 local variables YYSIZE and YYSTACKSIZE give the old and new number of 574 elements in the stack, and YYPTR gives the new location of the 575 stack. Advance YYPTR to a properly aligned location for the next 576 stack. */ 577# define YYSTACK_RELOCATE(Stack) \ 578 do \ 579 { \ 580 YYSIZE_T yynewbytes; \ 581 YYCOPY (&yyptr->Stack, Stack, yysize); \ 582 Stack = &yyptr->Stack; \ 583 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ 584 yyptr += yynewbytes / sizeof (*yyptr); \ 585 } \ 586 while (0) 587 588#endif 589 590 591#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) 592# define YYSIZE_T __SIZE_TYPE__ 593#endif 594#if ! defined (YYSIZE_T) && defined (size_t) 595# define YYSIZE_T size_t 596#endif 597#if ! defined (YYSIZE_T) 598# if defined (__STDC__) || defined (__cplusplus) 599# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 600# define YYSIZE_T size_t 601# endif 602#endif 603#if ! defined (YYSIZE_T) 604# define YYSIZE_T unsigned int 605#endif 606 607#define yyerrok (yyerrstatus = 0) 608#define yyclearin (yychar = YYEMPTY) 609#define YYEMPTY -2 610#define YYEOF 0 611#define YYACCEPT goto yyacceptlab 612#define YYABORT goto yyabortlab 613#define YYERROR goto yyerrlab1 614/* Like YYERROR except do call yyerror. This remains here temporarily 615 to ease the transition to the new meaning of YYERROR, for GCC. 616 Once GCC version 2 has supplanted version 1, this can go. */ 617#define YYFAIL goto yyerrlab 618#define YYRECOVERING() (!!yyerrstatus) 619#define YYBACKUP(Token, Value) \ 620do \ 621 if (yychar == YYEMPTY && yylen == 1) \ 622 { \ 623 yychar = (Token); \ 624 yylval = (Value); \ 625 yychar1 = YYTRANSLATE (yychar); \ 626 YYPOPSTACK; \ 627 goto yybackup; \ 628 } \ 629 else \ 630 { \ 631 yyerror ("syntax error: cannot back up"); \ 632 YYERROR; \ 633 } \ 634while (0) 635 636#define YYTERROR 1 637#define YYERRCODE 256 638 639 640/* YYLLOC_DEFAULT -- Compute the default location (before the actions 641 are run). 642 643 When YYLLOC_DEFAULT is run, CURRENT is set the location of the 644 first token. By default, to implement support for ranges, extend 645 its range to the last symbol. */ 646 647#ifndef YYLLOC_DEFAULT 648# define YYLLOC_DEFAULT(Current, Rhs, N) \ 649 Current.last_line = Rhs[N].last_line; \ 650 Current.last_column = Rhs[N].last_column; 651#endif 652 653 654/* YYLEX -- calling `yylex' with the right arguments. */ 655 656#if YYPURE 657# if YYLSP_NEEDED 658# ifdef YYLEX_PARAM 659# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) 660# else 661# define YYLEX yylex (&yylval, &yylloc) 662# endif 663# else /* !YYLSP_NEEDED */ 664# ifdef YYLEX_PARAM 665# define YYLEX yylex (&yylval, YYLEX_PARAM) 666# else 667# define YYLEX yylex (&yylval) 668# endif 669# endif /* !YYLSP_NEEDED */ 670#else /* !YYPURE */ 671# define YYLEX yylex () 672#endif /* !YYPURE */ 673 674 675/* Enable debugging if requested. */ 676#if YYDEBUG 677 678# ifndef YYFPRINTF 679# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 680# define YYFPRINTF fprintf 681# endif 682 683# define YYDPRINTF(Args) \ 684do { \ 685 if (yydebug) \ 686 YYFPRINTF Args; \ 687} while (0) 688/* Nonzero means print parse trace. It is left uninitialized so that 689 multiple parsers can coexist. */ 690int yydebug; 691#else /* !YYDEBUG */ 692# define YYDPRINTF(Args) 693#endif /* !YYDEBUG */ 694 695/* YYINITDEPTH -- initial size of the parser's stacks. */ 696#ifndef YYINITDEPTH 697# define YYINITDEPTH 200 698#endif 699 700/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 701 if the built-in stack extension method is used). 702 703 Do not make this value too large; the results are undefined if 704 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) 705 evaluated with infinite-precision integer arithmetic. */ 706 707#if YYMAXDEPTH == 0 708# undef YYMAXDEPTH 709#endif 710 711#ifndef YYMAXDEPTH 712# define YYMAXDEPTH 10000 713#endif 714 715#ifdef YYERROR_VERBOSE 716 717# ifndef yystrlen 718# if defined (__GLIBC__) && defined (_STRING_H) 719# define yystrlen strlen 720# else 721/* Return the length of YYSTR. */ 722static YYSIZE_T 723# if defined (__STDC__) || defined (__cplusplus) 724yystrlen (const char *yystr) 725# else 726yystrlen (yystr) 727 const char *yystr; 728# endif 729{ 730 register const char *yys = yystr; 731 732 while (*yys++ != '\0') 733 continue; 734 735 return yys - yystr - 1; 736} 737# endif 738# endif 739 740# ifndef yystpcpy 741# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) 742# define yystpcpy stpcpy 743# else 744/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 745 YYDEST. */ 746static char * 747# if defined (__STDC__) || defined (__cplusplus) 748yystpcpy (char *yydest, const char *yysrc) 749# else 750yystpcpy (yydest, yysrc) 751 char *yydest; 752 const char *yysrc; 753# endif 754{ 755 register char *yyd = yydest; 756 register const char *yys = yysrc; 757 758 while ((*yyd++ = *yys++) != '\0') 759 continue; 760 761 return yyd - 1; 762} 763# endif 764# endif 765#endif 766 767#line 315 "/usr/share/bison-1.35/bison.simple" 768 769 770/* The user can define YYPARSE_PARAM as the name of an argument to be passed 771 into yyparse. The argument should have type void *. 772 It should actually point to an object. 773 Grammar actions can access the variable by casting it 774 to the proper pointer type. */ 775 776#ifdef YYPARSE_PARAM 777# if defined (__STDC__) || defined (__cplusplus) 778# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM 779# define YYPARSE_PARAM_DECL 780# else 781# define YYPARSE_PARAM_ARG YYPARSE_PARAM 782# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; 783# endif 784#else /* !YYPARSE_PARAM */ 785# define YYPARSE_PARAM_ARG 786# define YYPARSE_PARAM_DECL 787#endif /* !YYPARSE_PARAM */ 788 789/* Prevent warning if -Wstrict-prototypes. */ 790#ifdef __GNUC__ 791# ifdef YYPARSE_PARAM 792int yyparse (void *); 793# else 794int yyparse (void); 795# endif 796#endif 797 798/* YY_DECL_VARIABLES -- depending whether we use a pure parser, 799 variables are global, or local to YYPARSE. */ 800 801#define YY_DECL_NON_LSP_VARIABLES \ 802/* The lookahead symbol. */ \ 803int yychar; \ 804 \ 805/* The semantic value of the lookahead symbol. */ \ 806YYSTYPE yylval; \ 807 \ 808/* Number of parse errors so far. */ \ 809int yynerrs; 810 811#if YYLSP_NEEDED 812# define YY_DECL_VARIABLES \ 813YY_DECL_NON_LSP_VARIABLES \ 814 \ 815/* Location data for the lookahead symbol. */ \ 816YYLTYPE yylloc; 817#else 818# define YY_DECL_VARIABLES \ 819YY_DECL_NON_LSP_VARIABLES 820#endif 821 822 823/* If nonreentrant, generate the variables here. */ 824 825#if !YYPURE 826YY_DECL_VARIABLES 827#endif /* !YYPURE */ 828 829int 830yyparse (YYPARSE_PARAM_ARG) 831 YYPARSE_PARAM_DECL 832{ 833 /* If reentrant, generate the variables here. */ 834#if YYPURE 835 YY_DECL_VARIABLES 836#endif /* !YYPURE */ 837 838 register int yystate; 839 register int yyn; 840 int yyresult; 841 /* Number of tokens to shift before error messages enabled. */ 842 int yyerrstatus; 843 /* Lookahead token as an internal (translated) token number. */ 844 int yychar1 = 0; 845 846 /* Three stacks and their tools: 847 `yyss': related to states, 848 `yyvs': related to semantic values, 849 `yyls': related to locations. 850 851 Refer to the stacks thru separate pointers, to allow yyoverflow 852 to reallocate them elsewhere. */ 853 854 /* The state stack. */ 855 short yyssa[YYINITDEPTH]; 856 short *yyss = yyssa; 857 register short *yyssp; 858 859 /* The semantic value stack. */ 860 YYSTYPE yyvsa[YYINITDEPTH]; 861 YYSTYPE *yyvs = yyvsa; 862 register YYSTYPE *yyvsp; 863 864#if YYLSP_NEEDED 865 /* The location stack. */ 866 YYLTYPE yylsa[YYINITDEPTH]; 867 YYLTYPE *yyls = yylsa; 868 YYLTYPE *yylsp; 869#endif 870 871#if YYLSP_NEEDED 872# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) 873#else 874# define YYPOPSTACK (yyvsp--, yyssp--) 875#endif 876 877 YYSIZE_T yystacksize = YYINITDEPTH; 878 879 880 /* The variables used to return semantic value and location from the 881 action routines. */ 882 YYSTYPE yyval; 883#if YYLSP_NEEDED 884 YYLTYPE yyloc; 885#endif 886 887 /* When reducing, the number of symbols on the RHS of the reduced 888 rule. */ 889 int yylen; 890 891 YYDPRINTF ((stderr, "Starting parse\n")); 892 893 yystate = 0; 894 yyerrstatus = 0; 895 yynerrs = 0; 896 yychar = YYEMPTY; /* Cause a token to be read. */ 897 898 /* Initialize stack pointers. 899 Waste one element of value and location stack 900 so that they stay on the same level as the state stack. 901 The wasted elements are never initialized. */ 902 903 yyssp = yyss; 904 yyvsp = yyvs; 905#if YYLSP_NEEDED 906 yylsp = yyls; 907#endif 908 goto yysetstate; 909 910/*------------------------------------------------------------. 911| yynewstate -- Push a new state, which is found in yystate. | 912`------------------------------------------------------------*/ 913 yynewstate: 914 /* In all cases, when you get here, the value and location stacks 915 have just been pushed. so pushing a state here evens the stacks. 916 */ 917 yyssp++; 918 919 yysetstate: 920 *yyssp = yystate; 921 922 if (yyssp >= yyss + yystacksize - 1) 923 { 924 /* Get the current used size of the three stacks, in elements. */ 925 YYSIZE_T yysize = yyssp - yyss + 1; 926 927#ifdef yyoverflow 928 { 929 /* Give user a chance to reallocate the stack. Use copies of 930 these so that the &'s don't force the real ones into 931 memory. */ 932 YYSTYPE *yyvs1 = yyvs; 933 short *yyss1 = yyss; 934 935 /* Each stack pointer address is followed by the size of the 936 data in use in that stack, in bytes. */ 937# if YYLSP_NEEDED 938 YYLTYPE *yyls1 = yyls; 939 /* This used to be a conditional around just the two extra args, 940 but that might be undefined if yyoverflow is a macro. */ 941 yyoverflow ("parser stack overflow", 942 &yyss1, yysize * sizeof (*yyssp), 943 &yyvs1, yysize * sizeof (*yyvsp), 944 &yyls1, yysize * sizeof (*yylsp), 945 &yystacksize); 946 yyls = yyls1; 947# else 948 yyoverflow ("parser stack overflow", 949 &yyss1, yysize * sizeof (*yyssp), 950 &yyvs1, yysize * sizeof (*yyvsp), 951 &yystacksize); 952# endif 953 yyss = yyss1; 954 yyvs = yyvs1; 955 } 956#else /* no yyoverflow */ 957# ifndef YYSTACK_RELOCATE 958 goto yyoverflowlab; 959# else 960 /* Extend the stack our own way. */ 961 if (yystacksize >= YYMAXDEPTH) 962 goto yyoverflowlab; 963 yystacksize *= 2; 964 if (yystacksize > YYMAXDEPTH) 965 yystacksize = YYMAXDEPTH; 966 967 { 968 short *yyss1 = yyss; 969 union yyalloc *yyptr = 970 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 971 if (! yyptr) 972 goto yyoverflowlab; 973 YYSTACK_RELOCATE (yyss); 974 YYSTACK_RELOCATE (yyvs); 975# if YYLSP_NEEDED 976 YYSTACK_RELOCATE (yyls); 977# endif 978# undef YYSTACK_RELOCATE 979 if (yyss1 != yyssa) 980 YYSTACK_FREE (yyss1); 981 } 982# endif 983#endif /* no yyoverflow */ 984 985 yyssp = yyss + yysize - 1; 986 yyvsp = yyvs + yysize - 1; 987#if YYLSP_NEEDED 988 yylsp = yyls + yysize - 1; 989#endif 990 991 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 992 (unsigned long int) yystacksize)); 993 994 if (yyssp >= yyss + yystacksize - 1) 995 YYABORT; 996 } 997 998 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 999 1000 goto yybackup; 1001 1002 1003/*-----------. 1004| yybackup. | 1005`-----------*/ 1006yybackup: 1007 1008/* Do appropriate processing given the current state. */ 1009/* Read a lookahead token if we need one and don't already have one. */ 1010/* yyresume: */ 1011 1012 /* First try to decide what to do without reference to lookahead token. */ 1013 1014 yyn = yypact[yystate]; 1015 if (yyn == YYFLAG) 1016 goto yydefault; 1017 1018 /* Not known => get a lookahead token if don't already have one. */ 1019 1020 /* yychar is either YYEMPTY or YYEOF 1021 or a valid token in external form. */ 1022 1023 if (yychar == YYEMPTY) 1024 { 1025 YYDPRINTF ((stderr, "Reading a token: ")); 1026 yychar = YYLEX; 1027 } 1028 1029 /* Convert token to internal form (in yychar1) for indexing tables with */ 1030 1031 if (yychar <= 0) /* This means end of input. */ 1032 { 1033 yychar1 = 0; 1034 yychar = YYEOF; /* Don't call YYLEX any more */ 1035 1036 YYDPRINTF ((stderr, "Now at end of input.\n")); 1037 } 1038 else 1039 { 1040 yychar1 = YYTRANSLATE (yychar); 1041 1042#if YYDEBUG 1043 /* We have to keep this `#if YYDEBUG', since we use variables 1044 which are defined only if `YYDEBUG' is set. */ 1045 if (yydebug) 1046 { 1047 YYFPRINTF (stderr, "Next token is %d (%s", 1048 yychar, yytname[yychar1]); 1049 /* Give the individual parser a way to print the precise 1050 meaning of a token, for further debugging info. */ 1051# ifdef YYPRINT 1052 YYPRINT (stderr, yychar, yylval); 1053# endif 1054 YYFPRINTF (stderr, ")\n"); 1055 } 1056#endif 1057 } 1058 1059 yyn += yychar1; 1060 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) 1061 goto yydefault; 1062 1063 yyn = yytable[yyn]; 1064 1065 /* yyn is what to do for this token type in this state. 1066 Negative => reduce, -yyn is rule number. 1067 Positive => shift, yyn is new state. 1068 New state is final state => don't bother to shift, 1069 just return success. 1070 0, or most negative number => error. */ 1071 1072 if (yyn < 0) 1073 { 1074 if (yyn == YYFLAG) 1075 goto yyerrlab; 1076 yyn = -yyn; 1077 goto yyreduce; 1078 } 1079 else if (yyn == 0) 1080 goto yyerrlab; 1081 1082 if (yyn == YYFINAL) 1083 YYACCEPT; 1084 1085 /* Shift the lookahead token. */ 1086 YYDPRINTF ((stderr, "Shifting token %d (%s), ", 1087 yychar, yytname[yychar1])); 1088 1089 /* Discard the token being shifted unless it is eof. */ 1090 if (yychar != YYEOF) 1091 yychar = YYEMPTY; 1092 1093 *++yyvsp = yylval; 1094#if YYLSP_NEEDED 1095 *++yylsp = yylloc; 1096#endif 1097 1098 /* Count tokens shifted since error; after three, turn off error 1099 status. */ 1100 if (yyerrstatus) 1101 yyerrstatus--; 1102 1103 yystate = yyn; 1104 goto yynewstate; 1105 1106 1107/*-----------------------------------------------------------. 1108| yydefault -- do the default action for the current state. | 1109`-----------------------------------------------------------*/ 1110yydefault: 1111 yyn = yydefact[yystate]; 1112 if (yyn == 0) 1113 goto yyerrlab; 1114 goto yyreduce; 1115 1116 1117/*-----------------------------. 1118| yyreduce -- Do a reduction. | 1119`-----------------------------*/ 1120yyreduce: 1121 /* yyn is the number of a rule to reduce with. */ 1122 yylen = yyr2[yyn]; 1123 1124 /* If YYLEN is nonzero, implement the default value of the action: 1125 `$$ = $1'. 1126 1127 Otherwise, the following line sets YYVAL to the semantic value of 1128 the lookahead token. This behavior is undocumented and Bison 1129 users should not rely upon it. Assigning to YYVAL 1130 unconditionally makes the parser a bit smaller, and it avoids a 1131 GCC warning that YYVAL may be used uninitialized. */ 1132 yyval = yyvsp[1-yylen]; 1133 1134#if YYLSP_NEEDED 1135 /* Similarly for the default location. Let the user run additional 1136 commands if for instance locations are ranges. */ 1137 yyloc = yylsp[1-yylen]; 1138 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); 1139#endif 1140 1141#if YYDEBUG 1142 /* We have to keep this `#if YYDEBUG', since we use variables which 1143 are defined only if `YYDEBUG' is set. */ 1144 if (yydebug) 1145 { 1146 int yyi; 1147 1148 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", 1149 yyn, yyrline[yyn]); 1150 1151 /* Print the symbols being reduced, and their result. */ 1152 for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) 1153 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); 1154 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); 1155 } 1156#endif 1157 1158 switch (yyn) { 1159 1160case 4: 1161#line 311 "itbl-parse.y" 1162{ 1163 DBG (("line %d: entry pnum=%d type=%d name=%s value=x%x\n", 1164 insntbl_line, yyvsp[-4].num, yyvsp[-3].num, yyvsp[-2].str, yyvsp[-1].val)); 1165 itbl_add_reg (yyvsp[-4].num, yyvsp[-3].num, yyvsp[-2].str, yyvsp[-1].val); 1166 } 1167 break; 1168case 5: 1169#line 317 "itbl-parse.y" 1170{ 1171 DBG (("line %d: entry pnum=%d type=INSN name=%s value=x%x", 1172 insntbl_line, yyvsp[-5].num, yyvsp[-3].str, yyvsp[-2].val)); 1173 DBG ((" sbit=%d ebit=%d flags=0x%x\n", sbit, ebit, yyvsp[0].val)); 1174 insn=itbl_add_insn (yyvsp[-5].num, yyvsp[-3].str, yyvsp[-2].val, sbit, ebit, yyvsp[0].val); 1175 } 1176 break; 1177case 6: 1178#line 324 "itbl-parse.y" 1179{} 1180 break; 1181case 12: 1182#line 337 "itbl-parse.y" 1183{ 1184 DBGL2 (("ftype\n")); 1185 yyval.num = yyvsp[0].num; 1186 } 1187 break; 1188case 13: 1189#line 342 "itbl-parse.y" 1190{ 1191 DBGL2 (("addr\n")); 1192 yyval.num = ADDR; 1193 } 1194 break; 1195case 14: 1196#line 347 "itbl-parse.y" 1197{ 1198 DBGL2 (("immed\n")); 1199 yyval.num = IMMED; 1200 } 1201 break; 1202case 15: 1203#line 355 "itbl-parse.y" 1204{ 1205 DBG (("line %d: field type=%d sbit=%d ebit=%d, flags=0x%x\n", 1206 insntbl_line, yyvsp[-2].num, sbit, ebit, yyvsp[0].val)); 1207 itbl_add_operand (insn, yyvsp[-2].num, sbit, ebit, yyvsp[0].val); 1208 } 1209 break; 1210case 16: 1211#line 364 "itbl-parse.y" 1212{ 1213 yyval.val = yyvsp[-2].num | yyvsp[0].val; 1214 } 1215 break; 1216case 17: 1217#line 368 "itbl-parse.y" 1218{ 1219 yyval.val = yyvsp[-1].val; 1220 } 1221 break; 1222case 18: 1223#line 372 "itbl-parse.y" 1224{ 1225 yyval.val = yyvsp[0].num; 1226 } 1227 break; 1228case 19: 1229#line 379 "itbl-parse.y" 1230{ 1231 DBGL2 (("flags=%d\n", yyvsp[0].val)); 1232 yyval.val = yyvsp[0].val; 1233 } 1234 break; 1235case 20: 1236#line 384 "itbl-parse.y" 1237{ 1238 yyval.val = 0; 1239 } 1240 break; 1241case 21: 1242#line 391 "itbl-parse.y" 1243{ 1244 DBGL2 (("range %d %d\n", yyvsp[-2].num, yyvsp[0].num)); 1245 sbit = yyvsp[-2].num; 1246 ebit = yyvsp[0].num; 1247 } 1248 break; 1249case 22: 1250#line 397 "itbl-parse.y" 1251{ 1252 sbit = 31; 1253 ebit = 0; 1254 } 1255 break; 1256case 23: 1257#line 405 "itbl-parse.y" 1258{ 1259 DBGL2 (("pnum=%d\n",yyvsp[0].num)); 1260 yyval.num = yyvsp[0].num; 1261 } 1262 break; 1263case 24: 1264#line 413 "itbl-parse.y" 1265{ 1266 DBGL2 (("dreg\n")); 1267 yyval.num = DREG; 1268 } 1269 break; 1270case 25: 1271#line 418 "itbl-parse.y" 1272{ 1273 DBGL2 (("creg\n")); 1274 yyval.num = CREG; 1275 } 1276 break; 1277case 26: 1278#line 423 "itbl-parse.y" 1279{ 1280 DBGL2 (("greg\n")); 1281 yyval.num = GREG; 1282 } 1283 break; 1284case 27: 1285#line 431 "itbl-parse.y" 1286{ 1287 DBGL2 (("name=%s\n",yyvsp[0].str)); 1288 yyval.str = yyvsp[0].str; 1289 } 1290 break; 1291case 28: 1292#line 439 "itbl-parse.y" 1293{ 1294 DBGL2 (("num=%d\n",yyvsp[0].num)); 1295 yyval.num = yyvsp[0].num; 1296 } 1297 break; 1298case 29: 1299#line 447 "itbl-parse.y" 1300{ 1301 DBGL2 (("val=x%x\n",yyvsp[0].num)); 1302 yyval.val = yyvsp[0].num; 1303 } 1304 break; 1305} 1306 1307#line 705 "/usr/share/bison-1.35/bison.simple" 1308 1309 1310 yyvsp -= yylen; 1311 yyssp -= yylen; 1312#if YYLSP_NEEDED 1313 yylsp -= yylen; 1314#endif 1315 1316#if YYDEBUG 1317 if (yydebug) 1318 { 1319 short *yyssp1 = yyss - 1; 1320 YYFPRINTF (stderr, "state stack now"); 1321 while (yyssp1 != yyssp) 1322 YYFPRINTF (stderr, " %d", *++yyssp1); 1323 YYFPRINTF (stderr, "\n"); 1324 } 1325#endif 1326 1327 *++yyvsp = yyval; 1328#if YYLSP_NEEDED 1329 *++yylsp = yyloc; 1330#endif 1331 1332 /* Now `shift' the result of the reduction. Determine what state 1333 that goes to, based on the state we popped back to and the rule 1334 number reduced by. */ 1335 1336 yyn = yyr1[yyn]; 1337 1338 yystate = yypgoto[yyn - YYNTBASE] + *yyssp; 1339 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) 1340 yystate = yytable[yystate]; 1341 else 1342 yystate = yydefgoto[yyn - YYNTBASE]; 1343 1344 goto yynewstate; 1345 1346 1347/*------------------------------------. 1348| yyerrlab -- here on detecting error | 1349`------------------------------------*/ 1350yyerrlab: 1351 /* If not already recovering from an error, report this error. */ 1352 if (!yyerrstatus) 1353 { 1354 ++yynerrs; 1355 1356#ifdef YYERROR_VERBOSE 1357 yyn = yypact[yystate]; 1358 1359 if (yyn > YYFLAG && yyn < YYLAST) 1360 { 1361 YYSIZE_T yysize = 0; 1362 char *yymsg; 1363 int yyx, yycount; 1364 1365 yycount = 0; 1366 /* Start YYX at -YYN if negative to avoid negative indexes in 1367 YYCHECK. */ 1368 for (yyx = yyn < 0 ? -yyn : 0; 1369 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) 1370 if (yycheck[yyx + yyn] == yyx) 1371 yysize += yystrlen (yytname[yyx]) + 15, yycount++; 1372 yysize += yystrlen ("parse error, unexpected ") + 1; 1373 yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); 1374 yymsg = (char *) YYSTACK_ALLOC (yysize); 1375 if (yymsg != 0) 1376 { 1377 char *yyp = yystpcpy (yymsg, "parse error, unexpected "); 1378 yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); 1379 1380 if (yycount < 5) 1381 { 1382 yycount = 0; 1383 for (yyx = yyn < 0 ? -yyn : 0; 1384 yyx < (int) (sizeof (yytname) / sizeof (char *)); 1385 yyx++) 1386 if (yycheck[yyx + yyn] == yyx) 1387 { 1388 const char *yyq = ! yycount ? ", expecting " : " or "; 1389 yyp = yystpcpy (yyp, yyq); 1390 yyp = yystpcpy (yyp, yytname[yyx]); 1391 yycount++; 1392 } 1393 } 1394 yyerror (yymsg); 1395 YYSTACK_FREE (yymsg); 1396 } 1397 else 1398 yyerror ("parse error; also virtual memory exhausted"); 1399 } 1400 else 1401#endif /* defined (YYERROR_VERBOSE) */ 1402 yyerror ("parse error"); 1403 } 1404 goto yyerrlab1; 1405 1406 1407/*--------------------------------------------------. 1408| yyerrlab1 -- error raised explicitly by an action | 1409`--------------------------------------------------*/ 1410yyerrlab1: 1411 if (yyerrstatus == 3) 1412 { 1413 /* If just tried and failed to reuse lookahead token after an 1414 error, discard it. */ 1415 1416 /* return failure if at end of input */ 1417 if (yychar == YYEOF) 1418 YYABORT; 1419 YYDPRINTF ((stderr, "Discarding token %d (%s).\n", 1420 yychar, yytname[yychar1])); 1421 yychar = YYEMPTY; 1422 } 1423 1424 /* Else will try to reuse lookahead token after shifting the error 1425 token. */ 1426 1427 yyerrstatus = 3; /* Each real token shifted decrements this */ 1428 1429 goto yyerrhandle; 1430 1431 1432/*-------------------------------------------------------------------. 1433| yyerrdefault -- current state does not do anything special for the | 1434| error token. | 1435`-------------------------------------------------------------------*/ 1436yyerrdefault: 1437#if 0 1438 /* This is wrong; only states that explicitly want error tokens 1439 should shift them. */ 1440 1441 /* If its default is to accept any token, ok. Otherwise pop it. */ 1442 yyn = yydefact[yystate]; 1443 if (yyn) 1444 goto yydefault; 1445#endif 1446 1447 1448/*---------------------------------------------------------------. 1449| yyerrpop -- pop the current state because it cannot handle the | 1450| error token | 1451`---------------------------------------------------------------*/ 1452yyerrpop: 1453 if (yyssp == yyss) 1454 YYABORT; 1455 yyvsp--; 1456 yystate = *--yyssp; 1457#if YYLSP_NEEDED 1458 yylsp--; 1459#endif 1460 1461#if YYDEBUG 1462 if (yydebug) 1463 { 1464 short *yyssp1 = yyss - 1; 1465 YYFPRINTF (stderr, "Error: state stack now"); 1466 while (yyssp1 != yyssp) 1467 YYFPRINTF (stderr, " %d", *++yyssp1); 1468 YYFPRINTF (stderr, "\n"); 1469 } 1470#endif 1471 1472/*--------------. 1473| yyerrhandle. | 1474`--------------*/ 1475yyerrhandle: 1476 yyn = yypact[yystate]; 1477 if (yyn == YYFLAG) 1478 goto yyerrdefault; 1479 1480 yyn += YYTERROR; 1481 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) 1482 goto yyerrdefault; 1483 1484 yyn = yytable[yyn]; 1485 if (yyn < 0) 1486 { 1487 if (yyn == YYFLAG) 1488 goto yyerrpop; 1489 yyn = -yyn; 1490 goto yyreduce; 1491 } 1492 else if (yyn == 0) 1493 goto yyerrpop; 1494 1495 if (yyn == YYFINAL) 1496 YYACCEPT; 1497 1498 YYDPRINTF ((stderr, "Shifting error token, ")); 1499 1500 *++yyvsp = yylval; 1501#if YYLSP_NEEDED 1502 *++yylsp = yylloc; 1503#endif 1504 1505 yystate = yyn; 1506 goto yynewstate; 1507 1508 1509/*-------------------------------------. 1510| yyacceptlab -- YYACCEPT comes here. | 1511`-------------------------------------*/ 1512yyacceptlab: 1513 yyresult = 0; 1514 goto yyreturn; 1515 1516/*-----------------------------------. 1517| yyabortlab -- YYABORT comes here. | 1518`-----------------------------------*/ 1519yyabortlab: 1520 yyresult = 1; 1521 goto yyreturn; 1522 1523/*---------------------------------------------. 1524| yyoverflowab -- parser overflow comes here. | 1525`---------------------------------------------*/ 1526yyoverflowlab: 1527 yyerror ("parser stack overflow"); 1528 yyresult = 2; 1529 /* Fall through. */ 1530 1531yyreturn: 1532#ifndef yyoverflow 1533 if (yyss != yyssa) 1534 YYSTACK_FREE (yyss); 1535#endif 1536 return yyresult; 1537} 1538#line 452 "itbl-parse.y" 1539 1540 1541static int 1542yyerror (msg) 1543 const char *msg; 1544{ 1545 printf ("line %d: %s\n", insntbl_line, msg); 1546 return 0; 1547} 1548