1/* A Bison parser, made by GNU Bison 3.0. */ 2 3/* Bison implementation for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. 6 7 This program is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20/* As a special exception, you may create a larger work that contains 21 part or all of the Bison parser skeleton and distribute that work 22 under terms of your choice, so long as that work isn't itself a 23 parser generator using the skeleton or a modified version thereof 24 as a parser skeleton. Alternatively, if you modify or redistribute 25 the parser skeleton itself, you may (at your option) remove this 26 special exception, which will cause the skeleton and the resulting 27 Bison output files to be licensed under the GNU General Public 28 License without this special exception. 29 30 This special exception was added by the Free Software Foundation in 31 version 2.2 of Bison. */ 32 33/* C LALR(1) parser skeleton written by Richard Stallman, by 34 simplifying the original so-called "semantic" parser. */ 35 36/* All symbols defined below should begin with yy or YY, to avoid 37 infringing on user name space. This should be done even for local 38 variables, as they might otherwise be expanded by user macros. 39 There are some unavoidable exceptions within include files to 40 define necessary library symbols; they are noted "INFRINGES ON 41 USER NAME SPACE" below. */ 42 43/* Identify Bison output. */ 44#define YYBISON 1 45 46/* Bison version. */ 47#define YYBISON_VERSION "3.0" 48 49/* Skeleton name. */ 50#define YYSKELETON_NAME "yacc.c" 51 52/* Pure parsers. */ 53#define YYPURE 0 54 55/* Push parsers. */ 56#define YYPUSH 0 57 58/* Pull parsers. */ 59#define YYPULL 1 60 61 62/* Substitute the variable and function names. */ 63#define yyparse rx_parse 64#define yylex rx_lex 65#define yyerror rx_error 66#define yydebug rx_debug 67#define yynerrs rx_nerrs 68 69#define yylval rx_lval 70#define yychar rx_char 71 72/* Copy the first part of user declarations. */ 73#line 20 "./config/rx-parse.y" /* yacc.c:339 */ 74 75 76#include "as.h" 77#include "safe-ctype.h" 78#include "rx-defs.h" 79 80static int rx_lex (void); 81 82#define COND_EQ 0 83#define COND_NE 1 84 85#define MEMEX 0x06 86 87#define BSIZE 0 88#define WSIZE 1 89#define LSIZE 2 90 91/* .sb .sw .l .uw */ 92static int sizemap[] = { BSIZE, WSIZE, LSIZE, WSIZE }; 93 94/* Ok, here are the rules for using these macros... 95 96 B*() is used to specify the base opcode bytes. Fields to be filled 97 in later, leave zero. Call this first. 98 99 F() and FE() are used to fill in fields within the base opcode bytes. You MUST 100 call B*() before any F() or FE(). 101 102 [UN]*O*(), PC*() appends operands to the end of the opcode. You 103 must call P() and B*() before any of these, so that the fixups 104 have the right byte location. 105 O = signed, UO = unsigned, NO = negated, PC = pcrel 106 107 IMM() adds an immediate and fills in the field for it. 108 NIMM() same, but negates the immediate. 109 NBIMM() same, but negates the immediate, for sbb. 110 DSP() adds a displacement, and fills in the field for it. 111 112 Note that order is significant for the O, IMM, and DSP macros, as 113 they append their data to the operand buffer in the order that you 114 call them. 115 116 Use "disp" for displacements whenever possible; this handles the 117 "0" case properly. */ 118 119#define B1(b1) rx_base1 (b1) 120#define B2(b1, b2) rx_base2 (b1, b2) 121#define B3(b1, b2, b3) rx_base3 (b1, b2, b3) 122#define B4(b1, b2, b3, b4) rx_base4 (b1, b2, b3, b4) 123 124/* POS is bits from the MSB of the first byte to the LSB of the last byte. */ 125#define F(val,pos,sz) rx_field (val, pos, sz) 126#define FE(exp,pos,sz) rx_field (exp_val (exp), pos, sz); 127 128#define O1(v) rx_op (v, 1, RXREL_SIGNED); rx_range (v, -128, 255) 129#define O2(v) rx_op (v, 2, RXREL_SIGNED); rx_range (v, -32768, 65536) 130#define O3(v) rx_op (v, 3, RXREL_SIGNED); rx_range (v, -8388608, 16777216) 131#define O4(v) rx_op (v, 4, RXREL_SIGNED) 132 133#define UO1(v) rx_op (v, 1, RXREL_UNSIGNED); rx_range (v, 0, 255) 134#define UO2(v) rx_op (v, 2, RXREL_UNSIGNED); rx_range (v, 0, 65536) 135#define UO3(v) rx_op (v, 3, RXREL_UNSIGNED); rx_range (v, 0, 16777216) 136#define UO4(v) rx_op (v, 4, RXREL_UNSIGNED) 137 138#define NO1(v) rx_op (v, 1, RXREL_NEGATIVE) 139#define NO2(v) rx_op (v, 2, RXREL_NEGATIVE) 140#define NO3(v) rx_op (v, 3, RXREL_NEGATIVE) 141#define NO4(v) rx_op (v, 4, RXREL_NEGATIVE) 142 143#define PC1(v) rx_op (v, 1, RXREL_PCREL) 144#define PC2(v) rx_op (v, 2, RXREL_PCREL) 145#define PC3(v) rx_op (v, 3, RXREL_PCREL) 146 147#define IMM_(v,pos,size) F (immediate (v, RXREL_SIGNED, pos, size), pos, 2); \ 148 if (v.X_op != O_constant && v.X_op != O_big) rx_linkrelax_imm (pos) 149#define IMM(v,pos) IMM_ (v, pos, 32) 150#define IMMW(v,pos) IMM_ (v, pos, 16); rx_range (v, -32768, 65536) 151#define IMMB(v,pos) IMM_ (v, pos, 8); rx_range (v, -128, 255) 152#define NIMM(v,pos) F (immediate (v, RXREL_NEGATIVE, pos, 32), pos, 2) 153#define NBIMM(v,pos) F (immediate (v, RXREL_NEGATIVE_BORROW, pos, 32), pos, 2) 154#define DSP(v,pos,msz) if (!v.X_md) rx_relax (RX_RELAX_DISP, pos); \ 155 else rx_linkrelax_dsp (pos); \ 156 F (displacement (v, msz), pos, 2) 157 158#define id24(a,b2,b3) B3 (0xfb + a, b2, b3) 159 160static void rx_check_float_support (void); 161static int rx_intop (expressionS, int, int); 162static int rx_uintop (expressionS, int); 163static int rx_disp3op (expressionS); 164static int rx_disp5op (expressionS *, int); 165static int rx_disp5op0 (expressionS *, int); 166static int exp_val (expressionS exp); 167static expressionS zero_expr (void); 168static int immediate (expressionS, int, int, int); 169static int displacement (expressionS, int); 170static void rtsd_immediate (expressionS); 171static void rx_range (expressionS, int, int); 172static void rx_check_v2 (void); 173 174static int need_flag = 0; 175static int rx_in_brackets = 0; 176static int rx_last_token = 0; 177static char * rx_init_start; 178static char * rx_last_exp_start = 0; 179static int sub_op; 180static int sub_op2; 181 182#define YYDEBUG 1 183#define YYERROR_VERBOSE 1 184 185 186#line 187 "rx-parse.c" /* yacc.c:339 */ 187 188# ifndef YY_NULL 189# if defined __cplusplus && 201103L <= __cplusplus 190# define YY_NULL nullptr 191# else 192# define YY_NULL 0 193# endif 194# endif 195 196/* Enabling verbose error messages. */ 197#ifdef YYERROR_VERBOSE 198# undef YYERROR_VERBOSE 199# define YYERROR_VERBOSE 1 200#else 201# define YYERROR_VERBOSE 0 202#endif 203 204/* In a future release of Bison, this section will be replaced 205 by #include "y.tab.h". */ 206#ifndef YY_RX_RX_PARSE_H_INCLUDED 207# define YY_RX_RX_PARSE_H_INCLUDED 208/* Debug traces. */ 209#ifndef YYDEBUG 210# define YYDEBUG 0 211#endif 212#if YYDEBUG 213extern int rx_debug; 214#endif 215 216/* Token type. */ 217#ifndef YYTOKENTYPE 218# define YYTOKENTYPE 219 enum yytokentype 220 { 221 REG = 258, 222 FLAG = 259, 223 CREG = 260, 224 ACC = 261, 225 EXPR = 262, 226 UNKNOWN_OPCODE = 263, 227 IS_OPCODE = 264, 228 DOT_S = 265, 229 DOT_B = 266, 230 DOT_W = 267, 231 DOT_L = 268, 232 DOT_A = 269, 233 DOT_UB = 270, 234 DOT_UW = 271, 235 ABS = 272, 236 ADC = 273, 237 ADD = 274, 238 AND_ = 275, 239 BCLR = 276, 240 BCND = 277, 241 BMCND = 278, 242 BNOT = 279, 243 BRA = 280, 244 BRK = 281, 245 BSET = 282, 246 BSR = 283, 247 BTST = 284, 248 CLRPSW = 285, 249 CMP = 286, 250 DBT = 287, 251 DIV = 288, 252 DIVU = 289, 253 EDIV = 290, 254 EDIVU = 291, 255 EMACA = 292, 256 EMSBA = 293, 257 EMUL = 294, 258 EMULA = 295, 259 EMULU = 296, 260 FADD = 297, 261 FCMP = 298, 262 FDIV = 299, 263 FMUL = 300, 264 FREIT = 301, 265 FSUB = 302, 266 FSQRT = 303, 267 FTOI = 304, 268 FTOU = 305, 269 INT = 306, 270 ITOF = 307, 271 JMP = 308, 272 JSR = 309, 273 MACHI = 310, 274 MACLH = 311, 275 MACLO = 312, 276 MAX = 313, 277 MIN = 314, 278 MOV = 315, 279 MOVCO = 316, 280 MOVLI = 317, 281 MOVU = 318, 282 MSBHI = 319, 283 MSBLH = 320, 284 MSBLO = 321, 285 MUL = 322, 286 MULHI = 323, 287 MULLH = 324, 288 MULLO = 325, 289 MULU = 326, 290 MVFACHI = 327, 291 MVFACGU = 328, 292 MVFACMI = 329, 293 MVFACLO = 330, 294 MVFC = 331, 295 MVTACGU = 332, 296 MVTACHI = 333, 297 MVTACLO = 334, 298 MVTC = 335, 299 MVTIPL = 336, 300 NEG = 337, 301 NOP = 338, 302 NOT = 339, 303 OR = 340, 304 POP = 341, 305 POPC = 342, 306 POPM = 343, 307 PUSH = 344, 308 PUSHA = 345, 309 PUSHC = 346, 310 PUSHM = 347, 311 RACL = 348, 312 RACW = 349, 313 RDACL = 350, 314 RDACW = 351, 315 REIT = 352, 316 REVL = 353, 317 REVW = 354, 318 RMPA = 355, 319 ROLC = 356, 320 RORC = 357, 321 ROTL = 358, 322 ROTR = 359, 323 ROUND = 360, 324 RTE = 361, 325 RTFI = 362, 326 RTS = 363, 327 RTSD = 364, 328 SAT = 365, 329 SATR = 366, 330 SBB = 367, 331 SCCND = 368, 332 SCMPU = 369, 333 SETPSW = 370, 334 SHAR = 371, 335 SHLL = 372, 336 SHLR = 373, 337 SMOVB = 374, 338 SMOVF = 375, 339 SMOVU = 376, 340 SSTR = 377, 341 STNZ = 378, 342 STOP = 379, 343 STZ = 380, 344 SUB = 381, 345 SUNTIL = 382, 346 SWHILE = 383, 347 TST = 384, 348 UTOF = 385, 349 WAIT = 386, 350 XCHG = 387, 351 XOR = 388 352 }; 353#endif 354/* Tokens. */ 355#define REG 258 356#define FLAG 259 357#define CREG 260 358#define ACC 261 359#define EXPR 262 360#define UNKNOWN_OPCODE 263 361#define IS_OPCODE 264 362#define DOT_S 265 363#define DOT_B 266 364#define DOT_W 267 365#define DOT_L 268 366#define DOT_A 269 367#define DOT_UB 270 368#define DOT_UW 271 369#define ABS 272 370#define ADC 273 371#define ADD 274 372#define AND_ 275 373#define BCLR 276 374#define BCND 277 375#define BMCND 278 376#define BNOT 279 377#define BRA 280 378#define BRK 281 379#define BSET 282 380#define BSR 283 381#define BTST 284 382#define CLRPSW 285 383#define CMP 286 384#define DBT 287 385#define DIV 288 386#define DIVU 289 387#define EDIV 290 388#define EDIVU 291 389#define EMACA 292 390#define EMSBA 293 391#define EMUL 294 392#define EMULA 295 393#define EMULU 296 394#define FADD 297 395#define FCMP 298 396#define FDIV 299 397#define FMUL 300 398#define FREIT 301 399#define FSUB 302 400#define FSQRT 303 401#define FTOI 304 402#define FTOU 305 403#define INT 306 404#define ITOF 307 405#define JMP 308 406#define JSR 309 407#define MACHI 310 408#define MACLH 311 409#define MACLO 312 410#define MAX 313 411#define MIN 314 412#define MOV 315 413#define MOVCO 316 414#define MOVLI 317 415#define MOVU 318 416#define MSBHI 319 417#define MSBLH 320 418#define MSBLO 321 419#define MUL 322 420#define MULHI 323 421#define MULLH 324 422#define MULLO 325 423#define MULU 326 424#define MVFACHI 327 425#define MVFACGU 328 426#define MVFACMI 329 427#define MVFACLO 330 428#define MVFC 331 429#define MVTACGU 332 430#define MVTACHI 333 431#define MVTACLO 334 432#define MVTC 335 433#define MVTIPL 336 434#define NEG 337 435#define NOP 338 436#define NOT 339 437#define OR 340 438#define POP 341 439#define POPC 342 440#define POPM 343 441#define PUSH 344 442#define PUSHA 345 443#define PUSHC 346 444#define PUSHM 347 445#define RACL 348 446#define RACW 349 447#define RDACL 350 448#define RDACW 351 449#define REIT 352 450#define REVL 353 451#define REVW 354 452#define RMPA 355 453#define ROLC 356 454#define RORC 357 455#define ROTL 358 456#define ROTR 359 457#define ROUND 360 458#define RTE 361 459#define RTFI 362 460#define RTS 363 461#define RTSD 364 462#define SAT 365 463#define SATR 366 464#define SBB 367 465#define SCCND 368 466#define SCMPU 369 467#define SETPSW 370 468#define SHAR 371 469#define SHLL 372 470#define SHLR 373 471#define SMOVB 374 472#define SMOVF 375 473#define SMOVU 376 474#define SSTR 377 475#define STNZ 378 476#define STOP 379 477#define STZ 380 478#define SUB 381 479#define SUNTIL 382 480#define SWHILE 383 481#define TST 384 482#define UTOF 385 483#define WAIT 386 484#define XCHG 387 485#define XOR 388 486 487/* Value type. */ 488#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 489typedef union YYSTYPE YYSTYPE; 490union YYSTYPE 491{ 492#line 135 "./config/rx-parse.y" /* yacc.c:355 */ 493 494 int regno; 495 expressionS exp; 496 497#line 498 "rx-parse.c" /* yacc.c:355 */ 498}; 499# define YYSTYPE_IS_TRIVIAL 1 500# define YYSTYPE_IS_DECLARED 1 501#endif 502 503 504extern YYSTYPE rx_lval; 505 506int rx_parse (void); 507 508#endif /* !YY_RX_RX_PARSE_H_INCLUDED */ 509 510/* Copy the second part of user declarations. */ 511 512#line 513 "rx-parse.c" /* yacc.c:358 */ 513 514#ifdef short 515# undef short 516#endif 517 518#ifdef YYTYPE_UINT8 519typedef YYTYPE_UINT8 yytype_uint8; 520#else 521typedef unsigned char yytype_uint8; 522#endif 523 524#ifdef YYTYPE_INT8 525typedef YYTYPE_INT8 yytype_int8; 526#else 527typedef signed char yytype_int8; 528#endif 529 530#ifdef YYTYPE_UINT16 531typedef YYTYPE_UINT16 yytype_uint16; 532#else 533typedef unsigned short int yytype_uint16; 534#endif 535 536#ifdef YYTYPE_INT16 537typedef YYTYPE_INT16 yytype_int16; 538#else 539typedef short int yytype_int16; 540#endif 541 542#ifndef YYSIZE_T 543# ifdef __SIZE_TYPE__ 544# define YYSIZE_T __SIZE_TYPE__ 545# elif defined size_t 546# define YYSIZE_T size_t 547# elif ! defined YYSIZE_T 548# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 549# define YYSIZE_T size_t 550# else 551# define YYSIZE_T unsigned int 552# endif 553#endif 554 555#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 556 557#ifndef YY_ 558# if defined YYENABLE_NLS && YYENABLE_NLS 559# if ENABLE_NLS 560# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 561# define YY_(Msgid) dgettext ("bison-runtime", Msgid) 562# endif 563# endif 564# ifndef YY_ 565# define YY_(Msgid) Msgid 566# endif 567#endif 568 569#ifndef __attribute__ 570/* This feature is available in gcc versions 2.5 and later. */ 571# if (! defined __GNUC__ || __GNUC__ < 2 \ 572 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) 573# define __attribute__(Spec) /* empty */ 574# endif 575#endif 576 577/* Suppress unused-variable warnings by "using" E. */ 578#if ! defined lint || defined __GNUC__ 579# define YYUSE(E) ((void) (E)) 580#else 581# define YYUSE(E) /* empty */ 582#endif 583 584#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ 585/* Suppress an incorrect diagnostic about yylval being uninitialized. */ 586# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 587 _Pragma ("GCC diagnostic push") \ 588 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ 589 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 590# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 591 _Pragma ("GCC diagnostic pop") 592#else 593# define YY_INITIAL_VALUE(Value) Value 594#endif 595#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 596# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 597# define YY_IGNORE_MAYBE_UNINITIALIZED_END 598#endif 599#ifndef YY_INITIAL_VALUE 600# define YY_INITIAL_VALUE(Value) /* Nothing. */ 601#endif 602 603 604#if ! defined yyoverflow || YYERROR_VERBOSE 605 606/* The parser invokes alloca or malloc; define the necessary symbols. */ 607 608# ifdef YYSTACK_USE_ALLOCA 609# if YYSTACK_USE_ALLOCA 610# ifdef __GNUC__ 611# define YYSTACK_ALLOC __builtin_alloca 612# elif defined __BUILTIN_VA_ARG_INCR 613# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 614# elif defined _AIX 615# define YYSTACK_ALLOC __alloca 616# elif defined _MSC_VER 617# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 618# define alloca _alloca 619# else 620# define YYSTACK_ALLOC alloca 621# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS 622# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 623 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ 624# ifndef EXIT_SUCCESS 625# define EXIT_SUCCESS 0 626# endif 627# endif 628# endif 629# endif 630# endif 631 632# ifdef YYSTACK_ALLOC 633 /* Pacify GCC's 'empty if-body' warning. */ 634# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 635# ifndef YYSTACK_ALLOC_MAXIMUM 636 /* The OS might guarantee only one guard page at the bottom of the stack, 637 and a page size can be as small as 4096 bytes. So we cannot safely 638 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 639 to allow for a few compiler-allocated temporary stack slots. */ 640# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 641# endif 642# else 643# define YYSTACK_ALLOC YYMALLOC 644# define YYSTACK_FREE YYFREE 645# ifndef YYSTACK_ALLOC_MAXIMUM 646# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 647# endif 648# if (defined __cplusplus && ! defined EXIT_SUCCESS \ 649 && ! ((defined YYMALLOC || defined malloc) \ 650 && (defined YYFREE || defined free))) 651# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 652# ifndef EXIT_SUCCESS 653# define EXIT_SUCCESS 0 654# endif 655# endif 656# ifndef YYMALLOC 657# define YYMALLOC malloc 658# if ! defined malloc && ! defined EXIT_SUCCESS 659void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 660# endif 661# endif 662# ifndef YYFREE 663# define YYFREE free 664# if ! defined free && ! defined EXIT_SUCCESS 665void free (void *); /* INFRINGES ON USER NAME SPACE */ 666# endif 667# endif 668# endif 669#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 670 671 672#if (! defined yyoverflow \ 673 && (! defined __cplusplus \ 674 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 675 676/* A type that is properly aligned for any stack member. */ 677union yyalloc 678{ 679 yytype_int16 yyss_alloc; 680 YYSTYPE yyvs_alloc; 681}; 682 683/* The size of the maximum gap between one aligned stack and the next. */ 684# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 685 686/* The size of an array large to enough to hold all stacks, each with 687 N elements. */ 688# define YYSTACK_BYTES(N) \ 689 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 690 + YYSTACK_GAP_MAXIMUM) 691 692# define YYCOPY_NEEDED 1 693 694/* Relocate STACK from its old location to the new one. The 695 local variables YYSIZE and YYSTACKSIZE give the old and new number of 696 elements in the stack, and YYPTR gives the new location of the 697 stack. Advance YYPTR to a properly aligned location for the next 698 stack. */ 699# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 700 do \ 701 { \ 702 YYSIZE_T yynewbytes; \ 703 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 704 Stack = &yyptr->Stack_alloc; \ 705 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 706 yyptr += yynewbytes / sizeof (*yyptr); \ 707 } \ 708 while (0) 709 710#endif 711 712#if defined YYCOPY_NEEDED && YYCOPY_NEEDED 713/* Copy COUNT objects from SRC to DST. The source and destination do 714 not overlap. */ 715# ifndef YYCOPY 716# if defined __GNUC__ && 1 < __GNUC__ 717# define YYCOPY(Dst, Src, Count) \ 718 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) 719# else 720# define YYCOPY(Dst, Src, Count) \ 721 do \ 722 { \ 723 YYSIZE_T yyi; \ 724 for (yyi = 0; yyi < (Count); yyi++) \ 725 (Dst)[yyi] = (Src)[yyi]; \ 726 } \ 727 while (0) 728# endif 729# endif 730#endif /* !YYCOPY_NEEDED */ 731 732/* YYFINAL -- State number of the termination state. */ 733#define YYFINAL 255 734/* YYLAST -- Last index in YYTABLE. */ 735#define YYLAST 780 736 737/* YYNTOKENS -- Number of terminals. */ 738#define YYNTOKENS 140 739/* YYNNTS -- Number of nonterminals. */ 740#define YYNNTS 76 741/* YYNRULES -- Number of rules. */ 742#define YYNRULES 294 743/* YYNSTATES -- Number of states. */ 744#define YYNSTATES 760 745 746/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned 747 by yylex, with out-of-bounds checking. */ 748#define YYUNDEFTOK 2 749#define YYMAXUTOK 388 750 751#define YYTRANSLATE(YYX) \ 752 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 753 754/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM 755 as returned by yylex, without out-of-bounds checking. */ 756static const yytype_uint8 yytranslate[] = 757{ 758 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 759 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 760 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 761 2, 2, 2, 2, 2, 134, 2, 2, 2, 2, 762 2, 2, 2, 139, 135, 138, 2, 2, 2, 2, 763 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 764 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 765 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 766 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 767 2, 136, 2, 137, 2, 2, 2, 2, 2, 2, 768 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 769 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 770 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 771 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 772 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 773 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 774 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 775 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 776 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 777 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 778 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 779 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 780 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 781 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 782 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 783 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 784 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 785 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 786 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 787 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 788 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 789 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 790 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 791 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 792 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 793 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 794 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 795 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 796 125, 126, 127, 128, 129, 130, 131, 132, 133 797}; 798 799#if YYDEBUG 800 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ 801static const yytype_uint16 yyrline[] = 802{ 803 0, 178, 178, 183, 186, 189, 192, 197, 212, 215, 804 220, 229, 234, 242, 245, 250, 252, 254, 259, 277, 805 280, 283, 286, 294, 300, 308, 317, 322, 325, 330, 806 335, 338, 346, 353, 361, 367, 373, 379, 385, 393, 807 403, 408, 408, 409, 409, 410, 410, 414, 427, 440, 808 445, 450, 452, 457, 462, 464, 466, 471, 476, 481, 809 491, 501, 503, 508, 510, 512, 514, 519, 521, 523, 810 525, 530, 532, 534, 539, 544, 546, 548, 550, 555, 811 561, 569, 583, 588, 593, 598, 603, 608, 610, 612, 812 617, 622, 622, 623, 623, 624, 624, 625, 625, 626, 813 626, 627, 627, 628, 628, 629, 629, 630, 630, 631, 814 631, 632, 632, 633, 633, 634, 634, 635, 635, 636, 815 636, 640, 640, 641, 641, 642, 642, 643, 643, 644, 816 644, 648, 650, 652, 654, 657, 659, 661, 663, 668, 817 668, 669, 669, 670, 670, 671, 671, 672, 672, 673, 818 673, 674, 674, 675, 675, 676, 676, 683, 685, 690, 819 696, 702, 704, 706, 708, 710, 712, 714, 716, 722, 820 724, 726, 728, 730, 732, 732, 733, 735, 735, 736, 821 738, 738, 739, 747, 758, 760, 765, 767, 772, 774, 822 779, 779, 780, 780, 781, 781, 782, 782, 786, 794, 823 801, 803, 808, 815, 821, 826, 829, 832, 837, 837, 824 838, 838, 839, 839, 840, 840, 841, 841, 846, 851, 825 856, 861, 863, 865, 867, 869, 871, 873, 875, 877, 826 877, 878, 880, 888, 896, 912, 914, 916, 918, 925, 827 927, 935, 937, 939, 945, 950, 951, 955, 956, 960, 828 962, 967, 972, 972, 974, 979, 981, 983, 990, 994, 829 996, 998, 1002, 1004, 1006, 1008, 1013, 1013, 1016, 1020, 830 1020, 1023, 1023, 1029, 1029, 1053, 1054, 1057, 1057, 1062, 831 1063, 1064, 1065, 1066, 1069, 1070, 1071, 1072, 1075, 1076, 832 1077, 1080, 1081, 1084, 1085 833}; 834#endif 835 836#if YYDEBUG || YYERROR_VERBOSE || 0 837/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 838 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 839static const char *const yytname[] = 840{ 841 "$end", "error", "$undefined", "REG", "FLAG", "CREG", "ACC", "EXPR", 842 "UNKNOWN_OPCODE", "IS_OPCODE", "DOT_S", "DOT_B", "DOT_W", "DOT_L", 843 "DOT_A", "DOT_UB", "DOT_UW", "ABS", "ADC", "ADD", "AND_", "BCLR", "BCND", 844 "BMCND", "BNOT", "BRA", "BRK", "BSET", "BSR", "BTST", "CLRPSW", "CMP", 845 "DBT", "DIV", "DIVU", "EDIV", "EDIVU", "EMACA", "EMSBA", "EMUL", "EMULA", 846 "EMULU", "FADD", "FCMP", "FDIV", "FMUL", "FREIT", "FSUB", "FSQRT", 847 "FTOI", "FTOU", "INT", "ITOF", "JMP", "JSR", "MACHI", "MACLH", "MACLO", 848 "MAX", "MIN", "MOV", "MOVCO", "MOVLI", "MOVU", "MSBHI", "MSBLH", "MSBLO", 849 "MUL", "MULHI", "MULLH", "MULLO", "MULU", "MVFACHI", "MVFACGU", 850 "MVFACMI", "MVFACLO", "MVFC", "MVTACGU", "MVTACHI", "MVTACLO", "MVTC", 851 "MVTIPL", "NEG", "NOP", "NOT", "OR", "POP", "POPC", "POPM", "PUSH", 852 "PUSHA", "PUSHC", "PUSHM", "RACL", "RACW", "RDACL", "RDACW", "REIT", 853 "REVL", "REVW", "RMPA", "ROLC", "RORC", "ROTL", "ROTR", "ROUND", "RTE", 854 "RTFI", "RTS", "RTSD", "SAT", "SATR", "SBB", "SCCND", "SCMPU", "SETPSW", 855 "SHAR", "SHLL", "SHLR", "SMOVB", "SMOVF", "SMOVU", "SSTR", "STNZ", 856 "STOP", "STZ", "SUB", "SUNTIL", "SWHILE", "TST", "UTOF", "WAIT", "XCHG", 857 "XOR", "'#'", "','", "'['", "']'", "'-'", "'+'", "$accept", "statement", 858 "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", 859 "$@11", "$@12", "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", 860 "$@20", "$@21", "$@22", "$@23", "$@24", "$@25", "$@26", "$@27", "$@28", 861 "$@29", "$@30", "$@31", "$@32", "$@33", "$@34", "$@35", "$@36", "$@37", 862 "$@38", "$@39", "$@40", "$@41", "$@42", "$@43", "$@44", "$@45", 863 "op_subadd", "op_dp20_rm_l", "op_dp20_rm", "op_dp20_i", "op_dp20_rim", 864 "op_dp20_rim_l", "op_dp20_rr", "op_dp20_r", "op_dp20_ri", "$@46", 865 "op_xchg", "op_shift_rot", "op_shift", "float3_op", "float2_op", "$@47", 866 "float2_op_ni", "$@48", "$@49", "mvfa_op", "$@50", "disp", "flag", 867 "$@51", "memex", "bwl", "bw", "opt_l", "opt_b", YY_NULL 868}; 869#endif 870 871# ifdef YYPRINT 872/* YYTOKNUM[NUM] -- (External) token number corresponding to the 873 (internal) symbol number NUM (which must be that of a token). */ 874static const yytype_uint16 yytoknum[] = 875{ 876 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 877 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 878 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 879 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 880 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 881 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 882 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 883 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 884 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 885 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 886 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 887 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 888 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 889 385, 386, 387, 388, 35, 44, 91, 93, 45, 43 890}; 891# endif 892 893#define YYPACT_NINF -600 894 895#define yypact_value_is_default(Yystate) \ 896 (!!((Yystate) == (-600))) 897 898#define YYTABLE_NINF -270 899 900#define yytable_value_is_error(Yytable_value) \ 901 0 902 903 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 904 STATE-NUM. */ 905static const yytype_int16 yypact[] = 906{ 907 645, -600, -600, -600, -128, -112, 14, 114, -98, 24, 908 71, -600, 28, 60, 29, -600, 16, -600, -600, -600, 909 46, 48, -75, 68, -45, -600, -600, -600, -600, -600, 910 -600, -600, -600, -39, -600, 98, 112, 132, 151, 167, 911 -600, -600, 34, 169, 54, 57, 194, 203, 205, 81, 912 213, 214, 215, 216, -600, 217, 219, 220, 221, 223, 913 224, 30, 95, -600, -600, -600, 96, 225, 226, 230, 914 148, 229, 232, 104, 105, 106, 108, -600, -600, 148, 915 238, 240, 110, 111, -600, -600, -600, -600, 113, 243, 916 -600, 115, 199, -600, -600, -600, -600, -600, -600, -600, 917 -600, 148, -600, -600, 116, 148, 148, -600, -600, -600, 918 -600, -600, 248, 249, 21, 244, 5, 246, 5, 120, 919 250, -600, 251, 252, 254, 255, 121, 256, -600, 257, 920 258, 259, -600, 261, 266, 135, 264, -600, 267, 268, 921 270, 141, 271, -600, 273, 144, -600, 274, 146, 22, 922 22, 145, 149, 152, 6, 150, 152, 6, 23, 31, 923 31, 23, 23, 280, 280, 280, 281, 6, -600, -600, 924 154, 155, 156, 22, 22, 153, 158, 159, 287, 0, 925 160, 293, -600, -600, 7, 162, 163, 164, 295, 5, 926 165, 168, 170, -600, -600, -600, -600, -600, -600, -600, 927 171, 172, 173, 174, 175, 297, 304, 249, 249, 305, 928 5, -600, -600, 176, -600, -600, -600, 58, -600, 177, 929 306, 309, 310, 311, 316, 316, -600, -600, -600, 313, 930 316, 314, 316, 280, 315, -600, 317, 89, 320, 318, 931 -600, 32, 32, 32, -600, 152, 152, 319, 5, -600, 932 -600, 22, 6, 6, 22, -600, 193, -600, 196, 322, 933 -600, -600, -600, 191, 198, 201, -600, 204, 206, -600, 934 124, 207, -600, -600, -600, 208, 179, 209, -600, -600, 935 -600, -600, -600, 181, 210, -600, -600, -600, 184, 211, 936 -600, 327, 212, 329, 218, -600, -600, -600, 222, -600, 937 331, 332, -600, 227, -600, 228, 334, -600, -600, 231, 938 341, -600, 233, -600, 234, -600, 335, 318, -600, -600, 939 -600, -600, -600, -600, -600, -600, 336, 346, 347, -600, 940 -600, 344, 345, 348, 235, 236, 237, -1, 239, 241, 941 242, 245, 1, 351, 353, 354, 247, -600, 356, 357, 942 358, -600, 253, -600, -600, -600, 360, 359, 361, 366, 943 369, 260, -600, -600, -600, 265, -600, 373, -600, 263, 944 376, 275, 276, 277, 278, 279, -600, -600, 282, -600, 945 283, -600, -600, 284, 285, -600, -600, 269, 377, -600, 946 -600, -600, -600, -600, -600, 380, -600, 286, -600, -600, 947 -600, -600, -600, 382, 383, 288, 385, 386, 387, 388, 948 389, -600, 272, 186, 189, -600, 289, 192, -600, 290, 949 195, -600, 291, 197, -600, 390, 292, 391, 393, 296, 950 298, 399, 400, 299, 403, 300, 406, 408, 301, 294, 951 302, 303, 307, 308, 312, 321, 413, 8, 419, -7, 952 421, 425, 323, 429, 436, 40, 437, 324, 325, 326, 953 438, 328, 330, 333, 439, -600, -600, -600, -600, -600, 954 375, 441, -600, 442, -600, 443, 444, 445, 446, 450, 955 451, 452, 454, 459, 461, 337, 338, -600, 463, -600, 956 -600, 464, 339, 340, 342, 343, -600, 466, -600, 349, 957 -600, 350, 467, -600, 352, 468, -600, 355, 471, -600, 958 362, -600, 75, -600, 363, 472, 473, -600, 364, 475, 959 367, 479, 368, 371, 480, 481, 483, 484, 486, 11, 960 33, 13, -600, -600, 372, 2, 370, 490, 374, 379, 961 381, 384, 491, -600, 392, 492, 395, 394, 396, 493, 962 497, 498, -600, 504, 505, 506, 397, -600, -600, 398, 963 -600, -600, -600, -600, -600, -600, -600, 401, -600, 404, 964 494, 514, -600, -600, 435, 516, 517, 94, 405, 519, 965 520, 407, 521, 409, 522, 410, 523, -600, -600, -600, 966 402, -600, 414, 101, -600, -600, 107, -600, 524, -600, 967 435, 525, -600, 411, -600, -600, -600, 531, 415, 533, 968 416, -600, 535, 417, 537, 41, 540, 420, 422, 200, 969 423, 426, -600, -600, 428, 427, 542, 430, 431, -600, 970 -600, -600, -600, -600, -600, 544, -600, 551, -600, 432, 971 -600, 433, -600, -600, 434, 440, 476, 447, 448, 476, 972 449, 476, 453, 476, 455, 553, 554, 456, 458, 460, 973 462, -600, 465, -600, 435, 457, 557, 469, 567, 470, 974 568, 474, 569, -600, 477, 478, 202, 482, -600, 485, 975 570, 571, 573, 487, -600, 574, 575, 488, -600, 576, 976 577, 578, 579, -600, -600, 572, 476, -600, 476, -600, 977 585, -600, 587, -600, -600, 584, 586, 596, 598, 599, 978 489, -600, 495, -600, 496, -600, 499, -600, 500, -600, 979 -600, -600, 502, 601, 602, -600, -600, -600, 605, -600, 980 -600, 606, -600, -600, -600, -600, -600, -600, -600, -600, 981 -600, -600, -600, -600, -600, -600, 607, -600, -600, -600, 982 -600, 609, -600, 503, -600, -600, -600, 507, -600, -600 983}; 984 985 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. 986 Performed when YYTABLE does not specify something else to do. Zero 987 means the default is an error. */ 988static const yytype_uint16 yydefact[] = 989{ 990 0, 2, 97, 95, 210, 214, 0, 0, 0, 0, 991 291, 3, 0, 291, 0, 277, 275, 4, 107, 109, 992 0, 0, 121, 0, 123, 143, 141, 147, 145, 139, 993 149, 151, 153, 0, 127, 0, 0, 0, 0, 0, 994 99, 101, 284, 0, 0, 288, 0, 0, 0, 212, 995 0, 0, 0, 174, 229, 177, 180, 0, 0, 0, 996 0, 0, 0, 93, 6, 115, 216, 0, 0, 0, 997 284, 0, 0, 0, 0, 0, 0, 196, 194, 284, 998 0, 0, 190, 192, 155, 76, 75, 5, 0, 0, 999 78, 91, 284, 67, 277, 43, 45, 41, 69, 70, 1000 68, 284, 119, 117, 208, 284, 284, 111, 129, 77, 1001 125, 113, 0, 0, 275, 0, 275, 0, 275, 0, 1002 0, 18, 0, 0, 0, 0, 0, 0, 7, 0, 1003 0, 0, 292, 0, 0, 0, 0, 10, 0, 0, 1004 0, 0, 0, 62, 0, 0, 276, 0, 0, 275, 1005 275, 0, 0, 0, 275, 0, 0, 275, 275, 271, 1006 271, 275, 275, 271, 271, 271, 0, 275, 63, 64, 1007 0, 0, 0, 275, 275, 285, 286, 287, 0, 0, 1008 0, 0, 289, 290, 0, 0, 0, 0, 0, 275, 1009 0, 0, 0, 173, 273, 273, 176, 273, 179, 273, 1010 0, 0, 169, 171, 0, 0, 0, 0, 0, 0, 1011 275, 58, 60, 0, 285, 286, 287, 275, 59, 0, 1012 0, 0, 0, 0, 0, 0, 74, 56, 55, 0, 1013 0, 0, 0, 271, 0, 54, 0, 275, 287, 275, 1014 61, 0, 0, 0, 73, 252, 252, 0, 275, 71, 1015 72, 275, 275, 275, 275, 1, 250, 98, 0, 0, 1016 247, 248, 96, 0, 0, 0, 211, 0, 0, 215, 1017 275, 0, 12, 13, 17, 0, 275, 0, 9, 14, 1018 15, 8, 65, 275, 0, 16, 11, 66, 275, 0, 1019 278, 0, 0, 0, 0, 245, 246, 108, 0, 110, 1020 0, 0, 104, 0, 122, 0, 0, 106, 124, 0, 1021 0, 144, 0, 142, 0, 268, 0, 275, 148, 146, 1022 140, 150, 152, 154, 50, 128, 0, 0, 0, 100, 1023 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 1025 0, 175, 0, 230, 178, 181, 0, 0, 0, 0, 1026 0, 0, 79, 94, 116, 0, 217, 0, 57, 0, 1027 0, 0, 182, 0, 0, 0, 197, 195, 0, 191, 1028 0, 193, 156, 40, 0, 92, 157, 0, 0, 261, 1029 44, 46, 42, 254, 120, 0, 118, 0, 209, 112, 1030 130, 126, 114, 0, 0, 0, 0, 0, 0, 0, 1031 0, 132, 0, 275, 275, 134, 0, 275, 131, 0, 1032 275, 133, 0, 275, 26, 0, 0, 0, 0, 0, 1033 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1034 165, 0, 167, 0, 0, 0, 0, 0, 0, 0, 1035 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1036 0, 161, 0, 163, 0, 199, 231, 170, 172, 198, 1037 0, 0, 48, 0, 47, 0, 0, 0, 0, 0, 1038 0, 0, 0, 0, 0, 0, 0, 253, 0, 249, 1039 239, 0, 0, 34, 235, 0, 36, 0, 52, 0, 1040 203, 0, 0, 204, 0, 0, 51, 0, 0, 53, 1041 0, 33, 281, 241, 0, 0, 0, 255, 0, 0, 1042 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1043 0, 0, 39, 85, 0, 0, 0, 0, 0, 0, 1044 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1045 0, 0, 35, 0, 0, 0, 0, 202, 37, 0, 1046 232, 183, 233, 234, 258, 200, 201, 0, 218, 0, 1047 0, 0, 32, 244, 291, 0, 0, 281, 0, 0, 1048 0, 0, 0, 0, 0, 0, 0, 279, 280, 282, 1049 0, 283, 0, 281, 221, 222, 281, 223, 0, 262, 1050 291, 0, 270, 0, 166, 224, 168, 0, 0, 0, 1051 0, 38, 0, 0, 0, 0, 0, 0, 0, 275, 1052 0, 0, 219, 220, 0, 0, 0, 0, 0, 225, 1053 226, 227, 162, 228, 164, 0, 90, 0, 158, 259, 1054 251, 0, 49, 238, 0, 0, 293, 0, 0, 293, 1055 0, 293, 0, 293, 0, 0, 0, 0, 0, 0, 1056 0, 265, 0, 267, 291, 0, 0, 0, 0, 0, 1057 0, 0, 0, 82, 0, 0, 275, 0, 86, 0, 1058 0, 0, 0, 0, 30, 0, 0, 0, 25, 0, 1059 0, 0, 0, 294, 136, 0, 293, 138, 293, 135, 1060 0, 137, 0, 27, 28, 0, 0, 0, 0, 0, 1061 0, 19, 0, 20, 0, 21, 0, 80, 0, 184, 1062 185, 81, 0, 0, 0, 186, 187, 31, 0, 188, 1063 189, 0, 260, 240, 236, 237, 88, 159, 160, 87, 1064 89, 242, 243, 256, 257, 264, 0, 22, 23, 24, 1065 205, 0, 206, 0, 207, 274, 272, 0, 83, 84 1066}; 1067 1068 /* YYPGOTO[NTERM-NUM]. */ 1069static const yytype_int16 yypgoto[] = 1070{ 1071 -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, 1072 -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, 1073 -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, 1074 -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, 1075 -600, -600, -600, -600, -600, -600, -600, -81, 412, -600, 1076 -93, -80, -600, -131, -600, 534, -600, -119, -168, -139, 1077 52, 501, -600, -122, -600, -600, -14, -600, -16, 526, 1078 -600, -538, -26, -600, -12, -599 1079}; 1080 1081 /* YYDEFGOTO[NTERM-NUM]. */ 1082static const yytype_int16 yydefgoto[] = 1083{ 1084 -1, 112, 243, 241, 242, 237, 207, 114, 113, 173, 1085 174, 153, 156, 149, 150, 251, 254, 208, 246, 245, 1086 154, 157, 253, 167, 252, 162, 159, 158, 161, 160, 1087 163, 164, 165, 233, 194, 197, 199, 230, 232, 225, 1088 224, 248, 116, 189, 118, 210, 195, 266, 260, 295, 1089 296, 297, 262, 257, 487, 394, 395, 304, 389, 390, 1090 311, 313, 314, 315, 316, 317, 351, 352, 298, 143, 1091 144, 592, 179, 184, 134, 694 1092}; 1093 1094 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If 1095 positive, shift that token. If negative, reduce the rule whose 1096 number is the opposite. If YYTABLE_NINF, syntax error. */ 1097static const yytype_int16 yytable[] = 1098{ 1099 148, 140, 449, 335, 455, 615, 115, 336, 265, 303, 1100 340, 533, 146, 146, 341, 534, 611, 119, 146, 145, 1101 146, 261, 117, 146, 258, 294, 309, 126, 146, 146, 1102 146, 135, 141, 204, -269, 375, 125, 269, 308, 645, 1103 146, 321, 322, 323, 217, 175, 176, 177, 325, 151, 1104 697, 152, 699, 226, 701, 658, 376, 377, 660, -103, 1105 302, 368, 379, 307, 381, 146, 239, 137, 182, 183, 1106 299, 155, 138, 132, 139, 244, 363, 364, 128, 249, 1107 250, 129, 130, 131, 132, 133, 587, 588, 589, -105, 1108 590, 591, 258, 329, 330, 166, 146, 737, 263, 738, 1109 267, 168, 267, 391, 392, 587, 588, 589, 347, 644, 1110 591, 382, 587, 588, 589, 169, 657, 591, 587, 588, 1111 589, 121, 659, 591, 122, 123, 124, 411, 537, 366, 1112 538, 146, 539, 400, 401, 170, 337, 450, 305, 456, 1113 616, 305, 312, 342, 535, 312, 312, 607, 120, 612, 1114 147, 305, 393, 393, 171, 259, 259, 310, 127, 214, 1115 215, 216, 136, 142, 205, -266, 388, 398, 178, 609, 1116 172, 399, 180, 267, 402, 545, 672, 546, 673, 547, 1117 674, 353, 415, 354, 418, 355, 146, 421, 146, 498, 1118 181, 146, 500, 146, 267, 503, 146, 185, 506, 146, 1119 509, 369, 146, 678, 146, 721, 186, 146, 187, 146, 1120 214, 215, 238, 319, 320, 188, 190, 191, 192, 193, 1121 196, 263, 198, 387, 201, 200, 202, 203, 211, 206, 1122 209, 212, 267, 213, 218, 219, 305, 305, 220, 221, 1123 222, 227, 223, 228, 229, 231, 235, 234, 255, 236, 1124 247, 264, 256, 268, 412, 270, 276, 271, 272, 273, 1125 416, 274, 275, 277, 278, 279, 280, 419, 281, 282, 1126 283, 284, 422, 287, 285, 286, 288, 290, 289, 291, 1127 300, 292, 293, -269, 301, 306, 259, 331, 324, 326, 1128 327, 328, 332, 333, 334, 338, 339, 343, 344, 345, 1129 348, 439, 346, 349, 361, 350, 356, 357, 358, 359, 1130 360, 362, 365, 371, 367, 370, 372, 373, 374, 375, 1131 378, 380, 383, 386, 384, 146, 397, 406, 403, 405, 1132 424, 404, 426, 407, 429, 430, 408, 433, 438, 440, 1133 409, 410, 413, 414, 417, 420, 423, 425, 435, 441, 1134 442, 443, 444, 427, 457, 445, 458, 459, 428, 461, 1135 462, 463, 431, 465, 432, 466, 434, 467, 437, 436, 1136 446, 447, 468, 448, 469, 451, 472, 453, 452, 474, 1137 557, 454, 460, 486, 485, 489, 490, 464, 492, 493, 1138 494, 495, 496, 511, 513, 470, 514, 499, 501, 473, 1139 471, 504, 517, 518, 507, 484, 520, 510, 497, 522, 1140 475, 476, 477, 478, 479, 523, 532, 480, 481, 482, 1141 483, 488, 536, 491, 540, 502, 505, 508, 541, 512, 1142 525, 515, 543, 516, 519, 521, 524, 526, 527, 544, 1143 548, 552, 528, 529, 558, 559, 556, 530, 132, 560, 1144 561, 562, 563, 564, 565, 566, 531, 567, 542, 549, 1145 550, 551, 568, 553, 569, 554, 572, 573, 555, 578, 1146 581, 583, 570, 571, 585, 575, 574, 576, 594, 595, 1147 577, 597, 599, 602, 603, 579, 580, 693, 582, 604, 1148 605, 584, 606, 618, 623, 625, 0, 639, 586, 629, 1149 593, 596, 598, 630, 631, 600, 601, 617, 614, 619, 1150 632, 633, 634, 608, 610, 613, 620, 640, 621, 642, 1151 643, 622, 647, 648, 650, 652, 654, 661, 663, 624, 1152 626, 627, 635, 628, 665, 636, 667, 655, 669, 637, 1153 671, 638, 646, 675, 649, 684, 651, 653, 664, 656, 1154 687, 666, 668, 670, 688, 676, 703, 704, 680, 677, 1155 712, 681, 641, 682, 683, 685, 686, 689, 690, 691, 1156 714, 716, 718, 725, 726, 692, 727, 729, 730, 732, 1157 733, 734, 735, 736, 695, 696, 698, 741, 662, 742, 1158 700, 705, 702, 706, 711, 707, 739, 708, 740, 743, 1159 709, 744, 745, 679, 752, 753, 713, 715, 754, 755, 1160 756, 717, 757, 0, 719, 720, 0, 723, 0, 0, 1161 240, 724, 728, 731, 746, 0, 0, 0, 0, 0, 1162 0, 0, 747, 748, 0, 0, 749, 750, 751, 0, 1163 758, 0, 0, 0, 759, 0, 0, 0, 0, 385, 1164 0, 0, 710, 1, 0, 0, 0, 0, 0, 0, 1165 722, 318, 2, 3, 4, 5, 6, 7, 8, 9, 1166 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1167 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 1168 28, 0, 29, 30, 31, 32, 33, 34, 35, 36, 1169 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 1170 47, 48, 49, 50, 51, 52, 0, 53, 54, 55, 1171 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 1172 66, 67, 68, 69, 70, 0, 71, 72, 73, 74, 1173 75, 76, 0, 77, 78, 79, 80, 81, 82, 83, 1174 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 1175 94, 95, 96, 97, 98, 99, 100, 101, 102, 0, 1176 103, 104, 105, 106, 107, 108, 109, 110, 111, 0, 1177 396 1178}; 1179 1180static const yytype_int16 yycheck[] = 1181{ 1182 16, 13, 3, 3, 3, 3, 134, 7, 3, 3, 1183 3, 3, 7, 7, 7, 7, 3, 3, 7, 3, 1184 7, 114, 134, 7, 3, 3, 3, 3, 7, 7, 1185 7, 3, 3, 3, 3, 3, 134, 118, 157, 577, 1186 7, 163, 164, 165, 70, 11, 12, 13, 167, 3, 1187 649, 3, 651, 79, 653, 593, 224, 225, 596, 134, 1188 153, 3, 230, 156, 232, 7, 92, 7, 11, 12, 1189 150, 3, 12, 13, 14, 101, 207, 208, 7, 105, 1190 106, 10, 11, 12, 13, 14, 11, 12, 13, 134, 1191 15, 16, 3, 173, 174, 134, 7, 696, 114, 698, 1192 116, 3, 118, 242, 243, 11, 12, 13, 189, 15, 1193 16, 233, 11, 12, 13, 3, 15, 16, 11, 12, 1194 13, 7, 15, 16, 10, 11, 12, 3, 135, 210, 1195 137, 7, 139, 252, 253, 3, 136, 138, 154, 138, 1196 138, 157, 158, 136, 136, 161, 162, 136, 134, 136, 1197 134, 167, 245, 246, 3, 134, 134, 134, 134, 11, 1198 12, 13, 134, 134, 134, 134, 134, 248, 134, 136, 1199 3, 251, 3, 189, 254, 135, 135, 137, 137, 139, 1200 139, 195, 3, 197, 3, 199, 7, 3, 7, 3, 1201 136, 7, 3, 7, 210, 3, 7, 3, 3, 7, 1202 3, 217, 7, 3, 7, 3, 3, 7, 3, 7, 1203 11, 12, 13, 161, 162, 134, 3, 3, 3, 3, 1204 3, 237, 3, 239, 3, 5, 3, 3, 3, 134, 1205 134, 5, 248, 3, 5, 3, 252, 253, 134, 134, 1206 134, 3, 134, 3, 134, 134, 3, 134, 0, 134, 1207 134, 7, 3, 7, 270, 135, 135, 7, 7, 7, 1208 276, 7, 7, 7, 7, 7, 7, 283, 7, 3, 1209 135, 7, 288, 3, 7, 7, 135, 4, 7, 135, 1210 135, 7, 136, 3, 135, 135, 134, 134, 7, 135, 1211 135, 135, 134, 134, 7, 135, 3, 135, 135, 135, 1212 135, 317, 7, 135, 7, 135, 135, 135, 135, 135, 1213 135, 7, 7, 7, 138, 138, 7, 7, 7, 3, 1214 7, 7, 7, 3, 7, 7, 7, 136, 135, 7, 1215 3, 135, 3, 135, 3, 3, 135, 3, 3, 3, 1216 136, 135, 135, 135, 135, 135, 135, 135, 7, 3, 1217 3, 7, 7, 135, 3, 7, 3, 3, 136, 3, 1218 3, 3, 135, 3, 136, 6, 135, 6, 134, 136, 1219 135, 135, 6, 136, 5, 136, 3, 135, 137, 3, 1220 5, 136, 135, 3, 7, 3, 3, 134, 3, 3, 1221 3, 3, 3, 3, 3, 135, 3, 413, 414, 136, 1222 135, 417, 3, 3, 420, 136, 3, 423, 136, 3, 1223 135, 135, 135, 135, 135, 7, 3, 135, 135, 135, 1224 135, 135, 3, 135, 3, 136, 136, 136, 3, 137, 1225 136, 135, 3, 135, 135, 135, 135, 135, 135, 3, 1226 3, 3, 135, 135, 3, 3, 7, 135, 13, 6, 1227 6, 6, 6, 3, 3, 3, 135, 3, 135, 135, 1228 135, 135, 3, 135, 3, 135, 3, 3, 135, 3, 1229 3, 3, 135, 135, 3, 135, 137, 135, 6, 6, 1230 137, 6, 3, 3, 3, 136, 136, 11, 136, 6, 1231 6, 136, 6, 3, 3, 3, -1, 3, 136, 6, 1232 137, 137, 135, 6, 6, 137, 135, 137, 136, 135, 1233 6, 6, 6, 529, 530, 531, 137, 3, 137, 3, 1234 3, 137, 3, 3, 3, 3, 3, 3, 3, 137, 1235 135, 137, 135, 137, 3, 137, 3, 135, 3, 138, 1236 3, 137, 137, 3, 137, 3, 137, 137, 137, 135, 1237 6, 136, 136, 136, 3, 135, 3, 3, 135, 137, 1238 3, 135, 574, 135, 137, 135, 135, 135, 135, 135, 1239 3, 3, 3, 3, 3, 135, 3, 3, 3, 3, 1240 3, 3, 3, 11, 137, 137, 137, 3, 600, 3, 1241 137, 135, 137, 135, 137, 135, 11, 135, 11, 3, 1242 135, 3, 3, 619, 3, 3, 137, 137, 3, 3, 1243 3, 137, 3, -1, 137, 137, -1, 135, -1, -1, 1244 94, 136, 135, 135, 135, -1, -1, -1, -1, -1, 1245 -1, -1, 137, 137, -1, -1, 137, 137, 136, -1, 1246 137, -1, -1, -1, 137, -1, -1, -1, -1, 237, 1247 -1, -1, 664, 8, -1, -1, -1, -1, -1, -1, 1248 676, 160, 17, 18, 19, 20, 21, 22, 23, 24, 1249 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 1250 -1, -1, 37, 38, 39, 40, 41, 42, 43, 44, 1251 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 1252 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 1253 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, 1254 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 1255 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, 1256 95, 96, -1, 98, 99, 100, 101, 102, 103, 104, 1257 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 1258 115, 116, 117, 118, 119, 120, 121, 122, 123, -1, 1259 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, 1260 246 1261}; 1262 1263 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 1264 symbol of state STATE-NUM. */ 1265static const yytype_uint8 yystos[] = 1266{ 1267 0, 8, 17, 18, 19, 20, 21, 22, 23, 24, 1268 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 1269 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 1270 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 1271 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 1272 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 1273 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 1274 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, 1275 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 1276 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 1277 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 1278 132, 133, 141, 148, 147, 134, 182, 134, 184, 3, 1279 134, 7, 10, 11, 12, 134, 3, 134, 7, 10, 1280 11, 12, 13, 14, 214, 3, 134, 7, 12, 14, 1281 214, 3, 134, 209, 210, 3, 7, 134, 208, 153, 1282 154, 3, 3, 151, 160, 3, 152, 161, 167, 166, 1283 169, 168, 165, 170, 171, 172, 134, 163, 3, 3, 1284 3, 3, 3, 149, 150, 11, 12, 13, 134, 212, 1285 3, 136, 11, 12, 213, 3, 3, 3, 134, 183, 1286 3, 3, 3, 3, 174, 186, 3, 175, 3, 176, 1287 5, 3, 3, 3, 3, 134, 134, 146, 157, 134, 1288 185, 3, 5, 3, 11, 12, 13, 212, 5, 3, 1289 134, 134, 134, 134, 180, 179, 212, 3, 3, 134, 1290 177, 134, 178, 173, 134, 3, 134, 145, 13, 212, 1291 209, 143, 144, 142, 212, 159, 158, 134, 181, 212, 1292 212, 155, 164, 162, 156, 0, 3, 193, 3, 134, 1293 188, 190, 192, 208, 7, 3, 187, 208, 7, 187, 1294 135, 7, 7, 7, 7, 7, 135, 7, 7, 7, 1295 7, 7, 3, 135, 7, 7, 7, 3, 135, 7, 1296 4, 135, 7, 136, 3, 189, 190, 191, 208, 191, 1297 135, 135, 190, 3, 197, 208, 135, 190, 197, 3, 1298 134, 200, 208, 201, 202, 203, 204, 205, 201, 200, 1299 200, 203, 203, 203, 7, 197, 135, 135, 135, 191, 1300 191, 134, 134, 134, 7, 3, 7, 136, 135, 3, 1301 3, 7, 136, 135, 135, 135, 7, 187, 135, 135, 1302 135, 206, 207, 206, 206, 206, 135, 135, 135, 135, 1303 135, 7, 7, 193, 193, 7, 187, 138, 3, 208, 1304 138, 7, 7, 7, 7, 3, 198, 198, 7, 198, 1305 7, 198, 203, 7, 7, 188, 3, 208, 134, 198, 1306 199, 199, 199, 190, 195, 196, 195, 7, 187, 191, 1307 197, 197, 191, 135, 135, 7, 136, 135, 135, 136, 1308 135, 3, 208, 135, 135, 3, 208, 135, 3, 208, 1309 135, 3, 208, 135, 3, 135, 3, 135, 136, 3, 1310 3, 135, 136, 3, 135, 7, 136, 134, 3, 208, 1311 3, 3, 3, 7, 7, 7, 135, 135, 136, 3, 1312 138, 136, 137, 135, 136, 3, 138, 3, 3, 3, 1313 135, 3, 3, 3, 134, 3, 6, 6, 6, 5, 1314 135, 135, 3, 136, 3, 135, 135, 135, 135, 135, 1315 135, 135, 135, 135, 136, 7, 3, 194, 135, 3, 1316 3, 135, 3, 3, 3, 3, 3, 136, 3, 208, 1317 3, 208, 136, 3, 208, 136, 3, 208, 136, 3, 1318 208, 3, 137, 3, 3, 135, 135, 3, 3, 135, 1319 3, 135, 3, 7, 135, 136, 135, 135, 135, 135, 1320 135, 135, 3, 3, 7, 136, 3, 135, 137, 139, 1321 3, 3, 135, 3, 3, 135, 137, 139, 3, 135, 1322 135, 135, 3, 135, 135, 135, 7, 5, 3, 3, 1323 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 1324 135, 135, 3, 3, 137, 135, 135, 137, 3, 136, 1325 136, 3, 136, 3, 136, 3, 136, 11, 12, 13, 1326 15, 16, 211, 137, 6, 6, 137, 6, 135, 3, 1327 137, 135, 3, 3, 6, 6, 6, 136, 208, 136, 1328 208, 3, 136, 208, 136, 3, 138, 137, 3, 135, 1329 137, 137, 137, 3, 137, 3, 135, 137, 137, 6, 1330 6, 6, 6, 6, 6, 135, 137, 138, 137, 3, 1331 3, 214, 3, 3, 15, 211, 137, 3, 3, 137, 1332 3, 137, 3, 137, 3, 135, 135, 15, 211, 15, 1333 211, 3, 214, 3, 137, 3, 136, 3, 136, 3, 1334 136, 3, 135, 137, 139, 3, 135, 137, 3, 208, 1335 135, 135, 135, 137, 3, 135, 135, 6, 3, 135, 1336 135, 135, 135, 11, 215, 137, 137, 215, 137, 215, 1337 137, 215, 137, 3, 3, 135, 135, 135, 135, 135, 1338 214, 137, 3, 137, 3, 137, 3, 137, 3, 137, 1339 137, 3, 208, 135, 136, 3, 3, 3, 135, 3, 1340 3, 135, 3, 3, 3, 3, 11, 215, 215, 11, 1341 11, 3, 3, 3, 3, 3, 135, 137, 137, 137, 1342 137, 136, 3, 3, 3, 3, 3, 3, 137, 137 1343}; 1344 1345 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 1346static const yytype_uint8 yyr1[] = 1347{ 1348 0, 140, 141, 141, 141, 141, 141, 141, 141, 141, 1349 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1350 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1351 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1352 141, 142, 141, 143, 141, 144, 141, 141, 141, 141, 1353 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1354 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1355 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1356 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1357 141, 145, 141, 146, 141, 147, 141, 148, 141, 149, 1358 141, 150, 141, 151, 141, 152, 141, 153, 141, 154, 1359 141, 155, 141, 156, 141, 157, 141, 158, 141, 159, 1360 141, 160, 141, 161, 141, 162, 141, 163, 141, 164, 1361 141, 141, 141, 141, 141, 141, 141, 141, 141, 165, 1362 141, 166, 141, 167, 141, 168, 141, 169, 141, 170, 1363 141, 171, 141, 172, 141, 173, 141, 141, 141, 141, 1364 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1365 141, 141, 141, 141, 174, 141, 141, 175, 141, 141, 1366 176, 141, 141, 141, 141, 141, 141, 141, 141, 141, 1367 177, 141, 178, 141, 179, 141, 180, 141, 141, 141, 1368 141, 141, 141, 141, 141, 141, 141, 141, 181, 141, 1369 182, 141, 183, 141, 184, 141, 185, 141, 141, 141, 1370 141, 141, 141, 141, 141, 141, 141, 141, 141, 186, 1371 141, 141, 141, 141, 141, 187, 187, 187, 187, 188, 1372 188, 189, 189, 189, 190, 191, 191, 192, 192, 193, 1373 193, 194, 196, 195, 195, 197, 197, 197, 198, 199, 1374 199, 199, 200, 200, 200, 200, 202, 201, 201, 204, 1375 203, 205, 203, 207, 206, 208, 208, 210, 209, 211, 1376 211, 211, 211, 211, 212, 212, 212, 212, 213, 213, 1377 213, 214, 214, 215, 215 1378}; 1379 1380 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ 1381static const yytype_uint8 yyr2[] = 1382{ 1383 0, 2, 1, 1, 1, 1, 1, 2, 3, 3, 1384 2, 3, 3, 3, 3, 3, 3, 3, 2, 8, 1385 8, 8, 9, 9, 9, 7, 4, 8, 8, 5, 1386 7, 8, 5, 5, 5, 5, 5, 5, 6, 5, 1387 3, 0, 3, 0, 3, 0, 3, 4, 4, 7, 1388 3, 5, 5, 5, 2, 2, 2, 3, 2, 2, 1389 2, 2, 2, 2, 2, 3, 3, 1, 1, 1, 1390 1, 2, 2, 2, 2, 1, 1, 1, 1, 3, 1391 8, 8, 7, 10, 11, 5, 7, 9, 9, 9, 1392 6, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1393 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1394 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1395 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1396 3, 4, 4, 4, 4, 8, 8, 8, 8, 0, 1397 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1398 3, 0, 3, 0, 3, 0, 3, 3, 6, 9, 1399 9, 4, 6, 4, 6, 4, 6, 4, 6, 2, 1400 4, 2, 4, 2, 0, 3, 2, 0, 3, 2, 1401 0, 3, 3, 5, 8, 8, 8, 8, 8, 8, 1402 0, 3, 0, 3, 0, 3, 0, 3, 4, 4, 1403 5, 5, 5, 5, 5, 9, 9, 9, 0, 3, 1404 0, 3, 0, 3, 0, 3, 0, 3, 5, 6, 1405 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 1406 3, 4, 5, 5, 5, 3, 7, 7, 5, 3, 1407 7, 3, 7, 7, 4, 1, 1, 1, 1, 3, 1408 1, 3, 0, 2, 1, 3, 7, 7, 3, 4, 1409 6, 1, 4, 3, 7, 5, 0, 5, 1, 0, 1410 4, 0, 8, 0, 7, 0, 1, 0, 2, 1, 1411 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1412 1, 0, 1, 0, 1 1413}; 1414 1415 1416#define yyerrok (yyerrstatus = 0) 1417#define yyclearin (yychar = YYEMPTY) 1418#define YYEMPTY (-2) 1419#define YYEOF 0 1420 1421#define YYACCEPT goto yyacceptlab 1422#define YYABORT goto yyabortlab 1423#define YYERROR goto yyerrorlab 1424 1425 1426#define YYRECOVERING() (!!yyerrstatus) 1427 1428#define YYBACKUP(Token, Value) \ 1429do \ 1430 if (yychar == YYEMPTY) \ 1431 { \ 1432 yychar = (Token); \ 1433 yylval = (Value); \ 1434 YYPOPSTACK (yylen); \ 1435 yystate = *yyssp; \ 1436 goto yybackup; \ 1437 } \ 1438 else \ 1439 { \ 1440 yyerror (YY_("syntax error: cannot back up")); \ 1441 YYERROR; \ 1442 } \ 1443while (0) 1444 1445/* Error token number */ 1446#define YYTERROR 1 1447#define YYERRCODE 256 1448 1449 1450 1451/* Enable debugging if requested. */ 1452#if YYDEBUG 1453 1454# ifndef YYFPRINTF 1455# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 1456# define YYFPRINTF fprintf 1457# endif 1458 1459# define YYDPRINTF(Args) \ 1460do { \ 1461 if (yydebug) \ 1462 YYFPRINTF Args; \ 1463} while (0) 1464 1465/* This macro is provided for backward compatibility. */ 1466#ifndef YY_LOCATION_PRINT 1467# define YY_LOCATION_PRINT(File, Loc) ((void) 0) 1468#endif 1469 1470 1471# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 1472do { \ 1473 if (yydebug) \ 1474 { \ 1475 YYFPRINTF (stderr, "%s ", Title); \ 1476 yy_symbol_print (stderr, \ 1477 Type, Value); \ 1478 YYFPRINTF (stderr, "\n"); \ 1479 } \ 1480} while (0) 1481 1482 1483/*----------------------------------------. 1484| Print this symbol's value on YYOUTPUT. | 1485`----------------------------------------*/ 1486 1487static void 1488yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1489{ 1490 FILE *yyo = yyoutput; 1491 YYUSE (yyo); 1492 if (!yyvaluep) 1493 return; 1494# ifdef YYPRINT 1495 if (yytype < YYNTOKENS) 1496 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1497# endif 1498 YYUSE (yytype); 1499} 1500 1501 1502/*--------------------------------. 1503| Print this symbol on YYOUTPUT. | 1504`--------------------------------*/ 1505 1506static void 1507yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1508{ 1509 YYFPRINTF (yyoutput, "%s %s (", 1510 yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); 1511 1512 yy_symbol_value_print (yyoutput, yytype, yyvaluep); 1513 YYFPRINTF (yyoutput, ")"); 1514} 1515 1516/*------------------------------------------------------------------. 1517| yy_stack_print -- Print the state stack from its BOTTOM up to its | 1518| TOP (included). | 1519`------------------------------------------------------------------*/ 1520 1521static void 1522yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 1523{ 1524 YYFPRINTF (stderr, "Stack now"); 1525 for (; yybottom <= yytop; yybottom++) 1526 { 1527 int yybot = *yybottom; 1528 YYFPRINTF (stderr, " %d", yybot); 1529 } 1530 YYFPRINTF (stderr, "\n"); 1531} 1532 1533# define YY_STACK_PRINT(Bottom, Top) \ 1534do { \ 1535 if (yydebug) \ 1536 yy_stack_print ((Bottom), (Top)); \ 1537} while (0) 1538 1539 1540/*------------------------------------------------. 1541| Report that the YYRULE is going to be reduced. | 1542`------------------------------------------------*/ 1543 1544static void 1545yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) 1546{ 1547 unsigned long int yylno = yyrline[yyrule]; 1548 int yynrhs = yyr2[yyrule]; 1549 int yyi; 1550 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 1551 yyrule - 1, yylno); 1552 /* The symbols being reduced. */ 1553 for (yyi = 0; yyi < yynrhs; yyi++) 1554 { 1555 YYFPRINTF (stderr, " $%d = ", yyi + 1); 1556 yy_symbol_print (stderr, 1557 yystos[yyssp[yyi + 1 - yynrhs]], 1558 &(yyvsp[(yyi + 1) - (yynrhs)]) 1559 ); 1560 YYFPRINTF (stderr, "\n"); 1561 } 1562} 1563 1564# define YY_REDUCE_PRINT(Rule) \ 1565do { \ 1566 if (yydebug) \ 1567 yy_reduce_print (yyssp, yyvsp, Rule); \ 1568} while (0) 1569 1570/* Nonzero means print parse trace. It is left uninitialized so that 1571 multiple parsers can coexist. */ 1572int yydebug; 1573#else /* !YYDEBUG */ 1574# define YYDPRINTF(Args) 1575# define YY_SYMBOL_PRINT(Title, Type, Value, Location) 1576# define YY_STACK_PRINT(Bottom, Top) 1577# define YY_REDUCE_PRINT(Rule) 1578#endif /* !YYDEBUG */ 1579 1580 1581/* YYINITDEPTH -- initial size of the parser's stacks. */ 1582#ifndef YYINITDEPTH 1583# define YYINITDEPTH 200 1584#endif 1585 1586/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1587 if the built-in stack extension method is used). 1588 1589 Do not make this value too large; the results are undefined if 1590 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 1591 evaluated with infinite-precision integer arithmetic. */ 1592 1593#ifndef YYMAXDEPTH 1594# define YYMAXDEPTH 10000 1595#endif 1596 1597 1598#if YYERROR_VERBOSE 1599 1600# ifndef yystrlen 1601# if defined __GLIBC__ && defined _STRING_H 1602# define yystrlen strlen 1603# else 1604/* Return the length of YYSTR. */ 1605static YYSIZE_T 1606yystrlen (const char *yystr) 1607{ 1608 YYSIZE_T yylen; 1609 for (yylen = 0; yystr[yylen]; yylen++) 1610 continue; 1611 return yylen; 1612} 1613# endif 1614# endif 1615 1616# ifndef yystpcpy 1617# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 1618# define yystpcpy stpcpy 1619# else 1620/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1621 YYDEST. */ 1622static char * 1623yystpcpy (char *yydest, const char *yysrc) 1624{ 1625 char *yyd = yydest; 1626 const char *yys = yysrc; 1627 1628 while ((*yyd++ = *yys++) != '\0') 1629 continue; 1630 1631 return yyd - 1; 1632} 1633# endif 1634# endif 1635 1636# ifndef yytnamerr 1637/* Copy to YYRES the contents of YYSTR after stripping away unnecessary 1638 quotes and backslashes, so that it's suitable for yyerror. The 1639 heuristic is that double-quoting is unnecessary unless the string 1640 contains an apostrophe, a comma, or backslash (other than 1641 backslash-backslash). YYSTR is taken from yytname. If YYRES is 1642 null, do not copy; instead, return the length of what the result 1643 would have been. */ 1644static YYSIZE_T 1645yytnamerr (char *yyres, const char *yystr) 1646{ 1647 if (*yystr == '"') 1648 { 1649 YYSIZE_T yyn = 0; 1650 char const *yyp = yystr; 1651 1652 for (;;) 1653 switch (*++yyp) 1654 { 1655 case '\'': 1656 case ',': 1657 goto do_not_strip_quotes; 1658 1659 case '\\': 1660 if (*++yyp != '\\') 1661 goto do_not_strip_quotes; 1662 /* Fall through. */ 1663 default: 1664 if (yyres) 1665 yyres[yyn] = *yyp; 1666 yyn++; 1667 break; 1668 1669 case '"': 1670 if (yyres) 1671 yyres[yyn] = '\0'; 1672 return yyn; 1673 } 1674 do_not_strip_quotes: ; 1675 } 1676 1677 if (! yyres) 1678 return yystrlen (yystr); 1679 1680 return yystpcpy (yyres, yystr) - yyres; 1681} 1682# endif 1683 1684/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 1685 about the unexpected token YYTOKEN for the state stack whose top is 1686 YYSSP. 1687 1688 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 1689 not large enough to hold the message. In that case, also set 1690 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 1691 required number of bytes is too large to store. */ 1692static int 1693yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 1694 yytype_int16 *yyssp, int yytoken) 1695{ 1696 YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); 1697 YYSIZE_T yysize = yysize0; 1698 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 1699 /* Internationalized format string. */ 1700 const char *yyformat = YY_NULL; 1701 /* Arguments of yyformat. */ 1702 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 1703 /* Number of reported tokens (one for the "unexpected", one per 1704 "expected"). */ 1705 int yycount = 0; 1706 1707 /* There are many possibilities here to consider: 1708 - If this state is a consistent state with a default action, then 1709 the only way this function was invoked is if the default action 1710 is an error action. In that case, don't check for expected 1711 tokens because there are none. 1712 - The only way there can be no lookahead present (in yychar) is if 1713 this state is a consistent state with a default action. Thus, 1714 detecting the absence of a lookahead is sufficient to determine 1715 that there is no unexpected or expected token to report. In that 1716 case, just report a simple "syntax error". 1717 - Don't assume there isn't a lookahead just because this state is a 1718 consistent state with a default action. There might have been a 1719 previous inconsistent state, consistent state with a non-default 1720 action, or user semantic action that manipulated yychar. 1721 - Of course, the expected token list depends on states to have 1722 correct lookahead information, and it depends on the parser not 1723 to perform extra reductions after fetching a lookahead from the 1724 scanner and before detecting a syntax error. Thus, state merging 1725 (from LALR or IELR) and default reductions corrupt the expected 1726 token list. However, the list is correct for canonical LR with 1727 one exception: it will still contain any token that will not be 1728 accepted due to an error action in a later state. 1729 */ 1730 if (yytoken != YYEMPTY) 1731 { 1732 int yyn = yypact[*yyssp]; 1733 yyarg[yycount++] = yytname[yytoken]; 1734 if (!yypact_value_is_default (yyn)) 1735 { 1736 /* Start YYX at -YYN if negative to avoid negative indexes in 1737 YYCHECK. In other words, skip the first -YYN actions for 1738 this state because they are default actions. */ 1739 int yyxbegin = yyn < 0 ? -yyn : 0; 1740 /* Stay within bounds of both yycheck and yytname. */ 1741 int yychecklim = YYLAST - yyn + 1; 1742 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 1743 int yyx; 1744 1745 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 1746 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 1747 && !yytable_value_is_error (yytable[yyx + yyn])) 1748 { 1749 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 1750 { 1751 yycount = 1; 1752 yysize = yysize0; 1753 break; 1754 } 1755 yyarg[yycount++] = yytname[yyx]; 1756 { 1757 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); 1758 if (! (yysize <= yysize1 1759 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1760 return 2; 1761 yysize = yysize1; 1762 } 1763 } 1764 } 1765 } 1766 1767 switch (yycount) 1768 { 1769# define YYCASE_(N, S) \ 1770 case N: \ 1771 yyformat = S; \ 1772 break 1773 YYCASE_(0, YY_("syntax error")); 1774 YYCASE_(1, YY_("syntax error, unexpected %s")); 1775 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 1776 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 1777 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 1778 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 1779# undef YYCASE_ 1780 } 1781 1782 { 1783 YYSIZE_T yysize1 = yysize + yystrlen (yyformat); 1784 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1785 return 2; 1786 yysize = yysize1; 1787 } 1788 1789 if (*yymsg_alloc < yysize) 1790 { 1791 *yymsg_alloc = 2 * yysize; 1792 if (! (yysize <= *yymsg_alloc 1793 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 1794 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 1795 return 1; 1796 } 1797 1798 /* Avoid sprintf, as that infringes on the user's name space. 1799 Don't have undefined behavior even if the translation 1800 produced a string with the wrong number of "%s"s. */ 1801 { 1802 char *yyp = *yymsg; 1803 int yyi = 0; 1804 while ((*yyp = *yyformat) != '\0') 1805 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 1806 { 1807 yyp += yytnamerr (yyp, yyarg[yyi++]); 1808 yyformat += 2; 1809 } 1810 else 1811 { 1812 yyp++; 1813 yyformat++; 1814 } 1815 } 1816 return 0; 1817} 1818#endif /* YYERROR_VERBOSE */ 1819 1820/*-----------------------------------------------. 1821| Release the memory associated to this symbol. | 1822`-----------------------------------------------*/ 1823 1824static void 1825yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 1826{ 1827 YYUSE (yyvaluep); 1828 if (!yymsg) 1829 yymsg = "Deleting"; 1830 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 1831 1832 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1833 YYUSE (yytype); 1834 YY_IGNORE_MAYBE_UNINITIALIZED_END 1835} 1836 1837 1838 1839 1840/* The lookahead symbol. */ 1841int yychar; 1842 1843/* The semantic value of the lookahead symbol. */ 1844YYSTYPE yylval; 1845/* Number of syntax errors so far. */ 1846int yynerrs; 1847 1848 1849/*----------. 1850| yyparse. | 1851`----------*/ 1852 1853int 1854yyparse (void) 1855{ 1856 int yystate; 1857 /* Number of tokens to shift before error messages enabled. */ 1858 int yyerrstatus; 1859 1860 /* The stacks and their tools: 1861 'yyss': related to states. 1862 'yyvs': related to semantic values. 1863 1864 Refer to the stacks through separate pointers, to allow yyoverflow 1865 to reallocate them elsewhere. */ 1866 1867 /* The state stack. */ 1868 yytype_int16 yyssa[YYINITDEPTH]; 1869 yytype_int16 *yyss; 1870 yytype_int16 *yyssp; 1871 1872 /* The semantic value stack. */ 1873 YYSTYPE yyvsa[YYINITDEPTH]; 1874 YYSTYPE *yyvs; 1875 YYSTYPE *yyvsp; 1876 1877 YYSIZE_T yystacksize; 1878 1879 int yyn; 1880 int yyresult; 1881 /* Lookahead token as an internal (translated) token number. */ 1882 int yytoken = 0; 1883 /* The variables used to return semantic value and location from the 1884 action routines. */ 1885 YYSTYPE yyval; 1886 1887#if YYERROR_VERBOSE 1888 /* Buffer for error messages, and its allocated size. */ 1889 char yymsgbuf[128]; 1890 char *yymsg = yymsgbuf; 1891 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 1892#endif 1893 1894#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 1895 1896 /* The number of symbols on the RHS of the reduced rule. 1897 Keep to zero when no symbol should be popped. */ 1898 int yylen = 0; 1899 1900 yyssp = yyss = yyssa; 1901 yyvsp = yyvs = yyvsa; 1902 yystacksize = YYINITDEPTH; 1903 1904 YYDPRINTF ((stderr, "Starting parse\n")); 1905 1906 yystate = 0; 1907 yyerrstatus = 0; 1908 yynerrs = 0; 1909 yychar = YYEMPTY; /* Cause a token to be read. */ 1910 goto yysetstate; 1911 1912/*------------------------------------------------------------. 1913| yynewstate -- Push a new state, which is found in yystate. | 1914`------------------------------------------------------------*/ 1915 yynewstate: 1916 /* In all cases, when you get here, the value and location stacks 1917 have just been pushed. So pushing a state here evens the stacks. */ 1918 yyssp++; 1919 1920 yysetstate: 1921 *yyssp = yystate; 1922 1923 if (yyss + yystacksize - 1 <= yyssp) 1924 { 1925 /* Get the current used size of the three stacks, in elements. */ 1926 YYSIZE_T yysize = yyssp - yyss + 1; 1927 1928#ifdef yyoverflow 1929 { 1930 /* Give user a chance to reallocate the stack. Use copies of 1931 these so that the &'s don't force the real ones into 1932 memory. */ 1933 YYSTYPE *yyvs1 = yyvs; 1934 yytype_int16 *yyss1 = yyss; 1935 1936 /* Each stack pointer address is followed by the size of the 1937 data in use in that stack, in bytes. This used to be a 1938 conditional around just the two extra args, but that might 1939 be undefined if yyoverflow is a macro. */ 1940 yyoverflow (YY_("memory exhausted"), 1941 &yyss1, yysize * sizeof (*yyssp), 1942 &yyvs1, yysize * sizeof (*yyvsp), 1943 &yystacksize); 1944 1945 yyss = yyss1; 1946 yyvs = yyvs1; 1947 } 1948#else /* no yyoverflow */ 1949# ifndef YYSTACK_RELOCATE 1950 goto yyexhaustedlab; 1951# else 1952 /* Extend the stack our own way. */ 1953 if (YYMAXDEPTH <= yystacksize) 1954 goto yyexhaustedlab; 1955 yystacksize *= 2; 1956 if (YYMAXDEPTH < yystacksize) 1957 yystacksize = YYMAXDEPTH; 1958 1959 { 1960 yytype_int16 *yyss1 = yyss; 1961 union yyalloc *yyptr = 1962 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1963 if (! yyptr) 1964 goto yyexhaustedlab; 1965 YYSTACK_RELOCATE (yyss_alloc, yyss); 1966 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 1967# undef YYSTACK_RELOCATE 1968 if (yyss1 != yyssa) 1969 YYSTACK_FREE (yyss1); 1970 } 1971# endif 1972#endif /* no yyoverflow */ 1973 1974 yyssp = yyss + yysize - 1; 1975 yyvsp = yyvs + yysize - 1; 1976 1977 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1978 (unsigned long int) yystacksize)); 1979 1980 if (yyss + yystacksize - 1 <= yyssp) 1981 YYABORT; 1982 } 1983 1984 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1985 1986 if (yystate == YYFINAL) 1987 YYACCEPT; 1988 1989 goto yybackup; 1990 1991/*-----------. 1992| yybackup. | 1993`-----------*/ 1994yybackup: 1995 1996 /* Do appropriate processing given the current state. Read a 1997 lookahead token if we need one and don't already have one. */ 1998 1999 /* First try to decide what to do without reference to lookahead token. */ 2000 yyn = yypact[yystate]; 2001 if (yypact_value_is_default (yyn)) 2002 goto yydefault; 2003 2004 /* Not known => get a lookahead token if don't already have one. */ 2005 2006 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 2007 if (yychar == YYEMPTY) 2008 { 2009 YYDPRINTF ((stderr, "Reading a token: ")); 2010 yychar = yylex (); 2011 } 2012 2013 if (yychar <= YYEOF) 2014 { 2015 yychar = yytoken = YYEOF; 2016 YYDPRINTF ((stderr, "Now at end of input.\n")); 2017 } 2018 else 2019 { 2020 yytoken = YYTRANSLATE (yychar); 2021 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 2022 } 2023 2024 /* If the proper action on seeing token YYTOKEN is to reduce or to 2025 detect an error, take that action. */ 2026 yyn += yytoken; 2027 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 2028 goto yydefault; 2029 yyn = yytable[yyn]; 2030 if (yyn <= 0) 2031 { 2032 if (yytable_value_is_error (yyn)) 2033 goto yyerrlab; 2034 yyn = -yyn; 2035 goto yyreduce; 2036 } 2037 2038 /* Count tokens shifted since error; after three, turn off error 2039 status. */ 2040 if (yyerrstatus) 2041 yyerrstatus--; 2042 2043 /* Shift the lookahead token. */ 2044 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 2045 2046 /* Discard the shifted token. */ 2047 yychar = YYEMPTY; 2048 2049 yystate = yyn; 2050 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 2051 *++yyvsp = yylval; 2052 YY_IGNORE_MAYBE_UNINITIALIZED_END 2053 2054 goto yynewstate; 2055 2056 2057/*-----------------------------------------------------------. 2058| yydefault -- do the default action for the current state. | 2059`-----------------------------------------------------------*/ 2060yydefault: 2061 yyn = yydefact[yystate]; 2062 if (yyn == 0) 2063 goto yyerrlab; 2064 goto yyreduce; 2065 2066 2067/*-----------------------------. 2068| yyreduce -- Do a reduction. | 2069`-----------------------------*/ 2070yyreduce: 2071 /* yyn is the number of a rule to reduce with. */ 2072 yylen = yyr2[yyn]; 2073 2074 /* If YYLEN is nonzero, implement the default value of the action: 2075 '$$ = $1'. 2076 2077 Otherwise, the following line sets YYVAL to garbage. 2078 This behavior is undocumented and Bison 2079 users should not rely upon it. Assigning to YYVAL 2080 unconditionally makes the parser a bit smaller, and it avoids a 2081 GCC warning that YYVAL may be used uninitialized. */ 2082 yyval = yyvsp[1-yylen]; 2083 2084 2085 YY_REDUCE_PRINT (yyn); 2086 switch (yyn) 2087 { 2088 case 2: 2089#line 179 "./config/rx-parse.y" /* yacc.c:1661 */ 2090 { as_bad (_("Unknown opcode: %s"), rx_init_start); } 2091#line 2092 "rx-parse.c" /* yacc.c:1661 */ 2092 break; 2093 2094 case 3: 2095#line 184 "./config/rx-parse.y" /* yacc.c:1661 */ 2096 { B1 (0x00); } 2097#line 2098 "rx-parse.c" /* yacc.c:1661 */ 2098 break; 2099 2100 case 4: 2101#line 187 "./config/rx-parse.y" /* yacc.c:1661 */ 2102 { B1 (0x01); } 2103#line 2104 "rx-parse.c" /* yacc.c:1661 */ 2104 break; 2105 2106 case 5: 2107#line 190 "./config/rx-parse.y" /* yacc.c:1661 */ 2108 { B1 (0x02); } 2109#line 2110 "rx-parse.c" /* yacc.c:1661 */ 2110 break; 2111 2112 case 6: 2113#line 193 "./config/rx-parse.y" /* yacc.c:1661 */ 2114 { B1 (0x03); } 2115#line 2116 "rx-parse.c" /* yacc.c:1661 */ 2116 break; 2117 2118 case 7: 2119#line 198 "./config/rx-parse.y" /* yacc.c:1661 */ 2120 { if (rx_disp3op ((yyvsp[0].exp))) 2121 { B1 (0x08); rx_disp3 ((yyvsp[0].exp), 5); } 2122 else if (rx_intop ((yyvsp[0].exp), 8, 8)) 2123 { B1 (0x2e); PC1 ((yyvsp[0].exp)); } 2124 else if (rx_intop ((yyvsp[0].exp), 16, 16)) 2125 { B1 (0x38); PC2 ((yyvsp[0].exp)); } 2126 else if (rx_intop ((yyvsp[0].exp), 24, 24)) 2127 { B1 (0x04); PC3 ((yyvsp[0].exp)); } 2128 else 2129 { rx_relax (RX_RELAX_BRANCH, 0); 2130 rx_linkrelax_branch (); 2131 /* We'll convert this to a longer one later if needed. */ 2132 B1 (0x08); rx_disp3 ((yyvsp[0].exp), 5); } } 2133#line 2134 "rx-parse.c" /* yacc.c:1661 */ 2134 break; 2135 2136 case 8: 2137#line 213 "./config/rx-parse.y" /* yacc.c:1661 */ 2138 { B1 (0x04); PC3 ((yyvsp[0].exp)); } 2139#line 2140 "rx-parse.c" /* yacc.c:1661 */ 2140 break; 2141 2142 case 9: 2143#line 216 "./config/rx-parse.y" /* yacc.c:1661 */ 2144 { B1 (0x08); rx_disp3 ((yyvsp[0].exp), 5); } 2145#line 2146 "rx-parse.c" /* yacc.c:1661 */ 2146 break; 2147 2148 case 10: 2149#line 221 "./config/rx-parse.y" /* yacc.c:1661 */ 2150 { if (rx_intop ((yyvsp[0].exp), 16, 16)) 2151 { B1 (0x39); PC2 ((yyvsp[0].exp)); } 2152 else if (rx_intop ((yyvsp[0].exp), 24, 24)) 2153 { B1 (0x05); PC3 ((yyvsp[0].exp)); } 2154 else 2155 { rx_relax (RX_RELAX_BRANCH, 0); 2156 rx_linkrelax_branch (); 2157 B1 (0x39); PC2 ((yyvsp[0].exp)); } } 2158#line 2159 "rx-parse.c" /* yacc.c:1661 */ 2159 break; 2160 2161 case 11: 2162#line 230 "./config/rx-parse.y" /* yacc.c:1661 */ 2163 { B1 (0x05), PC3 ((yyvsp[0].exp)); } 2164#line 2165 "rx-parse.c" /* yacc.c:1661 */ 2165 break; 2166 2167 case 12: 2168#line 235 "./config/rx-parse.y" /* yacc.c:1661 */ 2169 { if ((yyvsp[-2].regno) == COND_EQ || (yyvsp[-2].regno) == COND_NE) 2170 { B1 ((yyvsp[-2].regno) == COND_EQ ? 0x10 : 0x18); rx_disp3 ((yyvsp[0].exp), 5); } 2171 else 2172 as_bad (_("Only BEQ and BNE may have .S")); } 2173#line 2174 "rx-parse.c" /* yacc.c:1661 */ 2174 break; 2175 2176 case 13: 2177#line 243 "./config/rx-parse.y" /* yacc.c:1661 */ 2178 { B1 (0x20); F ((yyvsp[-2].regno), 4, 4); PC1 ((yyvsp[0].exp)); } 2179#line 2180 "rx-parse.c" /* yacc.c:1661 */ 2180 break; 2181 2182 case 14: 2183#line 246 "./config/rx-parse.y" /* yacc.c:1661 */ 2184 { B1 (0x2e), PC1 ((yyvsp[0].exp)); } 2185#line 2186 "rx-parse.c" /* yacc.c:1661 */ 2186 break; 2187 2188 case 15: 2189#line 251 "./config/rx-parse.y" /* yacc.c:1661 */ 2190 { B1 (0x38), PC2 ((yyvsp[0].exp)); } 2191#line 2192 "rx-parse.c" /* yacc.c:1661 */ 2192 break; 2193 2194 case 16: 2195#line 253 "./config/rx-parse.y" /* yacc.c:1661 */ 2196 { B1 (0x39), PC2 ((yyvsp[0].exp)); } 2197#line 2198 "rx-parse.c" /* yacc.c:1661 */ 2198 break; 2199 2200 case 17: 2201#line 255 "./config/rx-parse.y" /* yacc.c:1661 */ 2202 { if ((yyvsp[-2].regno) == COND_EQ || (yyvsp[-2].regno) == COND_NE) 2203 { B1 ((yyvsp[-2].regno) == COND_EQ ? 0x3a : 0x3b); PC2 ((yyvsp[0].exp)); } 2204 else 2205 as_bad (_("Only BEQ and BNE may have .W")); } 2206#line 2207 "rx-parse.c" /* yacc.c:1661 */ 2207 break; 2208 2209 case 18: 2210#line 260 "./config/rx-parse.y" /* yacc.c:1661 */ 2211 { if ((yyvsp[-1].regno) == COND_EQ || (yyvsp[-1].regno) == COND_NE) 2212 { 2213 rx_relax (RX_RELAX_BRANCH, 0); 2214 rx_linkrelax_branch (); 2215 B1 ((yyvsp[-1].regno) == COND_EQ ? 0x10 : 0x18); rx_disp3 ((yyvsp[0].exp), 5); 2216 } 2217 else 2218 { 2219 rx_relax (RX_RELAX_BRANCH, 0); 2220 /* This is because we might turn it into a 2221 jump-over-jump long branch. */ 2222 rx_linkrelax_branch (); 2223 B1 (0x20); F ((yyvsp[-1].regno), 4, 4); PC1 ((yyvsp[0].exp)); 2224 } } 2225#line 2226 "rx-parse.c" /* yacc.c:1661 */ 2226 break; 2227 2228 case 19: 2229#line 278 "./config/rx-parse.y" /* yacc.c:1661 */ 2230 { B2 (0xf8, 0x04); F ((yyvsp[-1].regno), 8, 4); IMMB ((yyvsp[-4].exp), 12);} 2231#line 2232 "rx-parse.c" /* yacc.c:1661 */ 2232 break; 2233 2234 case 20: 2235#line 281 "./config/rx-parse.y" /* yacc.c:1661 */ 2236 { B2 (0xf8, 0x01); F ((yyvsp[-1].regno), 8, 4); IMMW ((yyvsp[-4].exp), 12);} 2237#line 2238 "rx-parse.c" /* yacc.c:1661 */ 2238 break; 2239 2240 case 21: 2241#line 284 "./config/rx-parse.y" /* yacc.c:1661 */ 2242 { B2 (0xf8, 0x02); F ((yyvsp[-1].regno), 8, 4); IMM ((yyvsp[-4].exp), 12);} 2243#line 2244 "rx-parse.c" /* yacc.c:1661 */ 2244 break; 2245 2246 case 22: 2247#line 288 "./config/rx-parse.y" /* yacc.c:1661 */ 2248 { if ((yyvsp[-1].regno) <= 7 && rx_uintop ((yyvsp[-5].exp), 8) && rx_disp5op0 (&(yyvsp[-3].exp), BSIZE)) 2249 { B2 (0x3c, 0); rx_field5s2 ((yyvsp[-3].exp)); F ((yyvsp[-1].regno), 9, 3); O1 ((yyvsp[-5].exp)); } 2250 else 2251 { B2 (0xf8, 0x04); F ((yyvsp[-1].regno), 8, 4); DSP ((yyvsp[-3].exp), 6, BSIZE); O1 ((yyvsp[-5].exp)); 2252 if ((yyvsp[-5].exp).X_op != O_constant && (yyvsp[-5].exp).X_op != O_big) rx_linkrelax_imm (12); } } 2253#line 2254 "rx-parse.c" /* yacc.c:1661 */ 2254 break; 2255 2256 case 23: 2257#line 295 "./config/rx-parse.y" /* yacc.c:1661 */ 2258 { if ((yyvsp[-1].regno) <= 7 && rx_uintop ((yyvsp[-5].exp), 8) && rx_disp5op0 (&(yyvsp[-3].exp), WSIZE)) 2259 { B2 (0x3d, 0); rx_field5s2 ((yyvsp[-3].exp)); F ((yyvsp[-1].regno), 9, 3); O1 ((yyvsp[-5].exp)); } 2260 else 2261 { B2 (0xf8, 0x01); F ((yyvsp[-1].regno), 8, 4); DSP ((yyvsp[-3].exp), 6, WSIZE); IMMW ((yyvsp[-5].exp), 12); } } 2262#line 2263 "rx-parse.c" /* yacc.c:1661 */ 2263 break; 2264 2265 case 24: 2266#line 301 "./config/rx-parse.y" /* yacc.c:1661 */ 2267 { if ((yyvsp[-1].regno) <= 7 && rx_uintop ((yyvsp[-5].exp), 8) && rx_disp5op0 (&(yyvsp[-3].exp), LSIZE)) 2268 { B2 (0x3e, 0); rx_field5s2 ((yyvsp[-3].exp)); F ((yyvsp[-1].regno), 9, 3); O1 ((yyvsp[-5].exp)); } 2269 else 2270 { B2 (0xf8, 0x02); F ((yyvsp[-1].regno), 8, 4); DSP ((yyvsp[-3].exp), 6, LSIZE); IMM ((yyvsp[-5].exp), 12); } } 2271#line 2272 "rx-parse.c" /* yacc.c:1661 */ 2272 break; 2273 2274 case 25: 2275#line 309 "./config/rx-parse.y" /* yacc.c:1661 */ 2276 { B2 (0x3f, 0); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); rtsd_immediate ((yyvsp[-4].exp)); 2277 if ((yyvsp[-2].regno) == 0) 2278 rx_error (_("RTSD cannot pop R0")); 2279 if ((yyvsp[-2].regno) > (yyvsp[0].regno)) 2280 rx_error (_("RTSD first reg must be <= second reg")); } 2281#line 2282 "rx-parse.c" /* yacc.c:1661 */ 2282 break; 2283 2284 case 26: 2285#line 318 "./config/rx-parse.y" /* yacc.c:1661 */ 2286 { B2 (0x47, 0); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2287#line 2288 "rx-parse.c" /* yacc.c:1661 */ 2288 break; 2289 2290 case 27: 2291#line 323 "./config/rx-parse.y" /* yacc.c:1661 */ 2292 { B2 (0x44, 0); F ((yyvsp[-4].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); DSP ((yyvsp[-6].exp), 6, BSIZE); } 2293#line 2294 "rx-parse.c" /* yacc.c:1661 */ 2294 break; 2295 2296 case 28: 2297#line 326 "./config/rx-parse.y" /* yacc.c:1661 */ 2298 { B3 (MEMEX, 0x04, 0); F ((yyvsp[-2].regno), 8, 2); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, sizemap[(yyvsp[-2].regno)]); } 2299#line 2300 "rx-parse.c" /* yacc.c:1661 */ 2300 break; 2301 2302 case 29: 2303#line 331 "./config/rx-parse.y" /* yacc.c:1661 */ 2304 { B2 (0x5b, 0x00); F ((yyvsp[-3].regno), 5, 1); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2305#line 2306 "rx-parse.c" /* yacc.c:1661 */ 2306 break; 2307 2308 case 30: 2309#line 336 "./config/rx-parse.y" /* yacc.c:1661 */ 2310 { B2 (0x58, 0x00); F ((yyvsp[-5].regno), 5, 1); F ((yyvsp[-3].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2311#line 2312 "rx-parse.c" /* yacc.c:1661 */ 2312 break; 2313 2314 case 31: 2315#line 339 "./config/rx-parse.y" /* yacc.c:1661 */ 2316 { if ((yyvsp[-3].regno) <= 7 && (yyvsp[0].regno) <= 7 && rx_disp5op (&(yyvsp[-5].exp), (yyvsp[-6].regno))) 2317 { B2 (0xb0, 0); F ((yyvsp[-6].regno), 4, 1); F ((yyvsp[-3].regno), 9, 3); F ((yyvsp[0].regno), 13, 3); rx_field5s ((yyvsp[-5].exp)); } 2318 else 2319 { B2 (0x58, 0x00); F ((yyvsp[-6].regno), 5, 1); F ((yyvsp[-3].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); DSP ((yyvsp[-5].exp), 6, (yyvsp[-6].regno)); } } 2320#line 2321 "rx-parse.c" /* yacc.c:1661 */ 2321 break; 2322 2323 case 32: 2324#line 347 "./config/rx-parse.y" /* yacc.c:1661 */ 2325 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2326 { B2 (0x60, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2327 else 2328 /* This is really an add, but we negate the immediate. */ 2329 { B2 (0x70, 0); F ((yyvsp[0].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); NIMM ((yyvsp[-2].exp), 6); } } 2330#line 2331 "rx-parse.c" /* yacc.c:1661 */ 2331 break; 2332 2333 case 33: 2334#line 354 "./config/rx-parse.y" /* yacc.c:1661 */ 2335 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2336 { B2 (0x61, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2337 else if (rx_uintop ((yyvsp[-2].exp), 8)) 2338 { B2 (0x75, 0x50); F ((yyvsp[0].regno), 12, 4); UO1 ((yyvsp[-2].exp)); } 2339 else 2340 { B2 (0x74, 0x00); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-2].exp), 6); } } 2341#line 2342 "rx-parse.c" /* yacc.c:1661 */ 2342 break; 2343 2344 case 34: 2345#line 362 "./config/rx-parse.y" /* yacc.c:1661 */ 2346 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2347 { B2 (0x62, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2348 else 2349 { B2 (0x70, 0); F ((yyvsp[0].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-2].exp), 6); } } 2350#line 2351 "rx-parse.c" /* yacc.c:1661 */ 2351 break; 2352 2353 case 35: 2354#line 368 "./config/rx-parse.y" /* yacc.c:1661 */ 2355 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2356 { B2 (0x63, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2357 else 2358 { B2 (0x74, 0x10); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-2].exp), 6); } } 2359#line 2360 "rx-parse.c" /* yacc.c:1661 */ 2360 break; 2361 2362 case 36: 2363#line 374 "./config/rx-parse.y" /* yacc.c:1661 */ 2364 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2365 { B2 (0x64, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2366 else 2367 { B2 (0x74, 0x20); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-2].exp), 6); } } 2368#line 2369 "rx-parse.c" /* yacc.c:1661 */ 2369 break; 2370 2371 case 37: 2372#line 380 "./config/rx-parse.y" /* yacc.c:1661 */ 2373 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2374 { B2 (0x65, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2375 else 2376 { B2 (0x74, 0x30); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-2].exp), 6); } } 2377#line 2378 "rx-parse.c" /* yacc.c:1661 */ 2378 break; 2379 2380 case 38: 2381#line 386 "./config/rx-parse.y" /* yacc.c:1661 */ 2382 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2383 { B2 (0x66, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2384 else if (rx_uintop ((yyvsp[-2].exp), 8)) 2385 { B2 (0x75, 0x40); F ((yyvsp[0].regno), 12, 4); UO1 ((yyvsp[-2].exp)); } 2386 else 2387 { B2 (0xfb, 0x02); F ((yyvsp[0].regno), 8, 4); IMM ((yyvsp[-2].exp), 12); } } 2388#line 2389 "rx-parse.c" /* yacc.c:1661 */ 2389 break; 2390 2391 case 39: 2392#line 394 "./config/rx-parse.y" /* yacc.c:1661 */ 2393 { if (rx_uintop ((yyvsp[-2].exp), 4)) 2394 { B2 (0x66, 0); FE ((yyvsp[-2].exp), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2395 else if (rx_uintop ((yyvsp[-2].exp), 8)) 2396 { B2 (0x75, 0x40); F ((yyvsp[0].regno), 12, 4); UO1 ((yyvsp[-2].exp)); } 2397 else 2398 { B2 (0xfb, 0x02); F ((yyvsp[0].regno), 8, 4); IMM ((yyvsp[-2].exp), 12); } } 2399#line 2400 "rx-parse.c" /* yacc.c:1661 */ 2400 break; 2401 2402 case 40: 2403#line 404 "./config/rx-parse.y" /* yacc.c:1661 */ 2404 { B1 (0x67); rtsd_immediate ((yyvsp[0].exp)); } 2405#line 2406 "rx-parse.c" /* yacc.c:1661 */ 2406 break; 2407 2408 case 41: 2409#line 408 "./config/rx-parse.y" /* yacc.c:1661 */ 2410 { sub_op = 0; } 2411#line 2412 "rx-parse.c" /* yacc.c:1661 */ 2412 break; 2413 2414 case 43: 2415#line 409 "./config/rx-parse.y" /* yacc.c:1661 */ 2416 { sub_op = 1; } 2417#line 2418 "rx-parse.c" /* yacc.c:1661 */ 2418 break; 2419 2420 case 45: 2421#line 410 "./config/rx-parse.y" /* yacc.c:1661 */ 2422 { sub_op = 2; } 2423#line 2424 "rx-parse.c" /* yacc.c:1661 */ 2424 break; 2425 2426 case 47: 2427#line 415 "./config/rx-parse.y" /* yacc.c:1661 */ 2428 { 2429 if ((yyvsp[-2].regno) == (yyvsp[0].regno)) 2430 { B2 (0x7e, 0x80); F (LSIZE, 10, 2); F ((yyvsp[-2].regno), 12, 4); } 2431 else 2432 { B2 (0x6e, 0); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2433 if ((yyvsp[-2].regno) == 0) 2434 rx_error (_("PUSHM cannot push R0")); 2435 if ((yyvsp[-2].regno) > (yyvsp[0].regno)) 2436 rx_error (_("PUSHM first reg must be <= second reg")); } 2437#line 2438 "rx-parse.c" /* yacc.c:1661 */ 2438 break; 2439 2440 case 48: 2441#line 428 "./config/rx-parse.y" /* yacc.c:1661 */ 2442 { 2443 if ((yyvsp[-2].regno) == (yyvsp[0].regno)) 2444 { B2 (0x7e, 0xb0); F ((yyvsp[-2].regno), 12, 4); } 2445 else 2446 { B2 (0x6f, 0); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2447 if ((yyvsp[-2].regno) == 0) 2448 rx_error (_("POPM cannot pop R0")); 2449 if ((yyvsp[-2].regno) > (yyvsp[0].regno)) 2450 rx_error (_("POPM first reg must be <= second reg")); } 2451#line 2452 "rx-parse.c" /* yacc.c:1661 */ 2452 break; 2453 2454 case 49: 2455#line 441 "./config/rx-parse.y" /* yacc.c:1661 */ 2456 { B2 (0x70, 0x00); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); IMM ((yyvsp[-4].exp), 6); } 2457#line 2458 "rx-parse.c" /* yacc.c:1661 */ 2458 break; 2459 2460 case 50: 2461#line 446 "./config/rx-parse.y" /* yacc.c:1661 */ 2462 { B2(0x75, 0x60), UO1 ((yyvsp[0].exp)); } 2463#line 2464 "rx-parse.c" /* yacc.c:1661 */ 2464 break; 2465 2466 case 51: 2467#line 451 "./config/rx-parse.y" /* yacc.c:1661 */ 2468 { B2 (0x78, 0); FE ((yyvsp[-2].exp), 7, 5); F ((yyvsp[0].regno), 12, 4); } 2469#line 2470 "rx-parse.c" /* yacc.c:1661 */ 2470 break; 2471 2472 case 52: 2473#line 453 "./config/rx-parse.y" /* yacc.c:1661 */ 2474 { B2 (0x7a, 0); FE ((yyvsp[-2].exp), 7, 5); F ((yyvsp[0].regno), 12, 4); } 2475#line 2476 "rx-parse.c" /* yacc.c:1661 */ 2476 break; 2477 2478 case 53: 2479#line 458 "./config/rx-parse.y" /* yacc.c:1661 */ 2480 { B2 (0x7c, 0x00); FE ((yyvsp[-2].exp), 7, 5); F ((yyvsp[0].regno), 12, 4); } 2481#line 2482 "rx-parse.c" /* yacc.c:1661 */ 2482 break; 2483 2484 case 54: 2485#line 463 "./config/rx-parse.y" /* yacc.c:1661 */ 2486 { B2 (0x7e, 0x30); F ((yyvsp[0].regno), 12, 4); } 2487#line 2488 "rx-parse.c" /* yacc.c:1661 */ 2488 break; 2489 2490 case 55: 2491#line 465 "./config/rx-parse.y" /* yacc.c:1661 */ 2492 { B2 (0x7e, 0x40); F ((yyvsp[0].regno), 12, 4); } 2493#line 2494 "rx-parse.c" /* yacc.c:1661 */ 2494 break; 2495 2496 case 56: 2497#line 467 "./config/rx-parse.y" /* yacc.c:1661 */ 2498 { B2 (0x7e, 0x50); F ((yyvsp[0].regno), 12, 4); } 2499#line 2500 "rx-parse.c" /* yacc.c:1661 */ 2500 break; 2501 2502 case 57: 2503#line 472 "./config/rx-parse.y" /* yacc.c:1661 */ 2504 { B2 (0x7e, 0x80); F ((yyvsp[-1].regno), 10, 2); F ((yyvsp[0].regno), 12, 4); } 2505#line 2506 "rx-parse.c" /* yacc.c:1661 */ 2506 break; 2507 2508 case 58: 2509#line 477 "./config/rx-parse.y" /* yacc.c:1661 */ 2510 { B2 (0x7e, 0xb0); F ((yyvsp[0].regno), 12, 4); } 2511#line 2512 "rx-parse.c" /* yacc.c:1661 */ 2512 break; 2513 2514 case 59: 2515#line 482 "./config/rx-parse.y" /* yacc.c:1661 */ 2516 { if ((yyvsp[0].regno) == 13) 2517 { rx_check_v2 (); } 2518 if ((yyvsp[0].regno) < 16) 2519 { B2 (0x7e, 0xc0); F ((yyvsp[0].regno), 12, 4); } 2520 else 2521 as_bad (_("PUSHC can only push the first 16 control registers")); } 2522#line 2523 "rx-parse.c" /* yacc.c:1661 */ 2523 break; 2524 2525 case 60: 2526#line 492 "./config/rx-parse.y" /* yacc.c:1661 */ 2527 { if ((yyvsp[0].regno) == 13) 2528 { rx_check_v2 (); } 2529 if ((yyvsp[0].regno) < 16) 2530 { B2 (0x7e, 0xe0); F ((yyvsp[0].regno), 12, 4); } 2531 else 2532 as_bad (_("POPC can only pop the first 16 control registers")); } 2533#line 2534 "rx-parse.c" /* yacc.c:1661 */ 2534 break; 2535 2536 case 61: 2537#line 502 "./config/rx-parse.y" /* yacc.c:1661 */ 2538 { B2 (0x7f, 0xa0); F ((yyvsp[0].regno), 12, 4); } 2539#line 2540 "rx-parse.c" /* yacc.c:1661 */ 2540 break; 2541 2542 case 62: 2543#line 504 "./config/rx-parse.y" /* yacc.c:1661 */ 2544 { B2 (0x7f, 0xb0); F ((yyvsp[0].regno), 12, 4); } 2545#line 2546 "rx-parse.c" /* yacc.c:1661 */ 2546 break; 2547 2548 case 63: 2549#line 509 "./config/rx-parse.y" /* yacc.c:1661 */ 2550 { B2 (0x7f, 0x00); F ((yyvsp[0].regno), 12, 4); } 2551#line 2552 "rx-parse.c" /* yacc.c:1661 */ 2552 break; 2553 2554 case 64: 2555#line 511 "./config/rx-parse.y" /* yacc.c:1661 */ 2556 { B2 (0x7f, 0x10); F ((yyvsp[0].regno), 12, 4); } 2557#line 2558 "rx-parse.c" /* yacc.c:1661 */ 2558 break; 2559 2560 case 65: 2561#line 513 "./config/rx-parse.y" /* yacc.c:1661 */ 2562 { B2 (0x7f, 0x40); F ((yyvsp[0].regno), 12, 4); } 2563#line 2564 "rx-parse.c" /* yacc.c:1661 */ 2564 break; 2565 2566 case 66: 2567#line 515 "./config/rx-parse.y" /* yacc.c:1661 */ 2568 { B2 (0x7f, 0x50); F ((yyvsp[0].regno), 12, 4); } 2569#line 2570 "rx-parse.c" /* yacc.c:1661 */ 2570 break; 2571 2572 case 67: 2573#line 520 "./config/rx-parse.y" /* yacc.c:1661 */ 2574 { B2 (0x7f, 0x83); rx_note_string_insn_use (); } 2575#line 2576 "rx-parse.c" /* yacc.c:1661 */ 2576 break; 2577 2578 case 68: 2579#line 522 "./config/rx-parse.y" /* yacc.c:1661 */ 2580 { B2 (0x7f, 0x87); rx_note_string_insn_use (); } 2581#line 2582 "rx-parse.c" /* yacc.c:1661 */ 2582 break; 2583 2584 case 69: 2585#line 524 "./config/rx-parse.y" /* yacc.c:1661 */ 2586 { B2 (0x7f, 0x8b); rx_note_string_insn_use (); } 2587#line 2588 "rx-parse.c" /* yacc.c:1661 */ 2588 break; 2589 2590 case 70: 2591#line 526 "./config/rx-parse.y" /* yacc.c:1661 */ 2592 { B2 (0x7f, 0x8f); rx_note_string_insn_use (); } 2593#line 2594 "rx-parse.c" /* yacc.c:1661 */ 2594 break; 2595 2596 case 71: 2597#line 531 "./config/rx-parse.y" /* yacc.c:1661 */ 2598 { B2 (0x7f, 0x80); F ((yyvsp[0].regno), 14, 2); rx_note_string_insn_use (); } 2599#line 2600 "rx-parse.c" /* yacc.c:1661 */ 2600 break; 2601 2602 case 72: 2603#line 533 "./config/rx-parse.y" /* yacc.c:1661 */ 2604 { B2 (0x7f, 0x84); F ((yyvsp[0].regno), 14, 2); rx_note_string_insn_use (); } 2605#line 2606 "rx-parse.c" /* yacc.c:1661 */ 2606 break; 2607 2608 case 73: 2609#line 535 "./config/rx-parse.y" /* yacc.c:1661 */ 2610 { B2 (0x7f, 0x88); F ((yyvsp[0].regno), 14, 2); } 2611#line 2612 "rx-parse.c" /* yacc.c:1661 */ 2612 break; 2613 2614 case 74: 2615#line 540 "./config/rx-parse.y" /* yacc.c:1661 */ 2616 { B2 (0x7f, 0x8c); F ((yyvsp[0].regno), 14, 2); rx_note_string_insn_use (); } 2617#line 2618 "rx-parse.c" /* yacc.c:1661 */ 2618 break; 2619 2620 case 75: 2621#line 545 "./config/rx-parse.y" /* yacc.c:1661 */ 2622 { B2 (0x7f, 0x94); } 2623#line 2624 "rx-parse.c" /* yacc.c:1661 */ 2624 break; 2625 2626 case 76: 2627#line 547 "./config/rx-parse.y" /* yacc.c:1661 */ 2628 { B2 (0x7f, 0x95); } 2629#line 2630 "rx-parse.c" /* yacc.c:1661 */ 2630 break; 2631 2632 case 77: 2633#line 549 "./config/rx-parse.y" /* yacc.c:1661 */ 2634 { B2 (0x7f, 0x96); } 2635#line 2636 "rx-parse.c" /* yacc.c:1661 */ 2636 break; 2637 2638 case 78: 2639#line 551 "./config/rx-parse.y" /* yacc.c:1661 */ 2640 { B2 (0x7f, 0x93); } 2641#line 2642 "rx-parse.c" /* yacc.c:1661 */ 2642 break; 2643 2644 case 79: 2645#line 556 "./config/rx-parse.y" /* yacc.c:1661 */ 2646 { B3 (0x75, 0x70, 0x00); FE ((yyvsp[0].exp), 20, 4); } 2647#line 2648 "rx-parse.c" /* yacc.c:1661 */ 2648 break; 2649 2650 case 80: 2651#line 562 "./config/rx-parse.y" /* yacc.c:1661 */ 2652 { if ((yyvsp[-5].regno) <= 7 && (yyvsp[-1].regno) <= 7 && rx_disp5op (&(yyvsp[-3].exp), (yyvsp[-6].regno))) 2653 { B2 (0x80, 0); F ((yyvsp[-6].regno), 2, 2); F ((yyvsp[-1].regno), 9, 3); F ((yyvsp[-5].regno), 13, 3); rx_field5s ((yyvsp[-3].exp)); } 2654 else 2655 { B2 (0xc3, 0x00); F ((yyvsp[-6].regno), 2, 2); F ((yyvsp[-1].regno), 8, 4); F ((yyvsp[-5].regno), 12, 4); DSP ((yyvsp[-3].exp), 4, (yyvsp[-6].regno)); }} 2656#line 2657 "rx-parse.c" /* yacc.c:1661 */ 2657 break; 2658 2659 case 81: 2660#line 570 "./config/rx-parse.y" /* yacc.c:1661 */ 2661 { if ((yyvsp[-3].regno) <= 7 && (yyvsp[0].regno) <= 7 && rx_disp5op (&(yyvsp[-5].exp), (yyvsp[-6].regno))) 2662 { B2 (0x88, 0); F ((yyvsp[-6].regno), 2, 2); F ((yyvsp[-3].regno), 9, 3); F ((yyvsp[0].regno), 13, 3); rx_field5s ((yyvsp[-5].exp)); } 2663 else 2664 { B2 (0xcc, 0x00); F ((yyvsp[-6].regno), 2, 2); F ((yyvsp[-3].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); DSP ((yyvsp[-5].exp), 6, (yyvsp[-6].regno)); } } 2665#line 2666 "rx-parse.c" /* yacc.c:1661 */ 2666 break; 2667 2668 case 82: 2669#line 584 "./config/rx-parse.y" /* yacc.c:1661 */ 2670 { B2 (0xc3, 0x00); F ((yyvsp[-5].regno), 2, 2); F ((yyvsp[-1].regno), 8, 4); F ((yyvsp[-4].regno), 12, 4); } 2671#line 2672 "rx-parse.c" /* yacc.c:1661 */ 2672 break; 2673 2674 case 83: 2675#line 589 "./config/rx-parse.y" /* yacc.c:1661 */ 2676 { B2 (0xc0, 0); F ((yyvsp[-8].regno), 2, 2); F ((yyvsp[-6].regno), 8, 4); F ((yyvsp[-1].regno), 12, 4); DSP ((yyvsp[-3].exp), 4, (yyvsp[-8].regno)); } 2677#line 2678 "rx-parse.c" /* yacc.c:1661 */ 2678 break; 2679 2680 case 84: 2681#line 594 "./config/rx-parse.y" /* yacc.c:1661 */ 2682 { B2 (0xc0, 0x00); F ((yyvsp[-9].regno), 2, 2); F ((yyvsp[-6].regno), 8, 4); F ((yyvsp[-1].regno), 12, 4); DSP ((yyvsp[-8].exp), 6, (yyvsp[-9].regno)); DSP ((yyvsp[-3].exp), 4, (yyvsp[-9].regno)); } 2683#line 2684 "rx-parse.c" /* yacc.c:1661 */ 2684 break; 2685 2686 case 85: 2687#line 599 "./config/rx-parse.y" /* yacc.c:1661 */ 2688 { B2 (0xcf, 0x00); F ((yyvsp[-3].regno), 2, 2); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2689#line 2690 "rx-parse.c" /* yacc.c:1661 */ 2690 break; 2691 2692 case 86: 2693#line 604 "./config/rx-parse.y" /* yacc.c:1661 */ 2694 { B2 (0xcc, 0x00); F ((yyvsp[-5].regno), 2, 2); F ((yyvsp[-3].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 2695#line 2696 "rx-parse.c" /* yacc.c:1661 */ 2696 break; 2697 2698 case 87: 2699#line 609 "./config/rx-parse.y" /* yacc.c:1661 */ 2700 { B2 (0xf0, 0x00); F ((yyvsp[-2].regno), 8, 4); FE ((yyvsp[-6].exp), 13, 3); DSP ((yyvsp[-4].exp), 6, BSIZE); } 2701#line 2702 "rx-parse.c" /* yacc.c:1661 */ 2702 break; 2703 2704 case 88: 2705#line 611 "./config/rx-parse.y" /* yacc.c:1661 */ 2706 { B2 (0xf0, 0x08); F ((yyvsp[-2].regno), 8, 4); FE ((yyvsp[-6].exp), 13, 3); DSP ((yyvsp[-4].exp), 6, BSIZE); } 2707#line 2708 "rx-parse.c" /* yacc.c:1661 */ 2708 break; 2709 2710 case 89: 2711#line 613 "./config/rx-parse.y" /* yacc.c:1661 */ 2712 { B2 (0xf4, 0x00); F ((yyvsp[-2].regno), 8, 4); FE ((yyvsp[-6].exp), 13, 3); DSP ((yyvsp[-4].exp), 6, BSIZE); } 2713#line 2714 "rx-parse.c" /* yacc.c:1661 */ 2714 break; 2715 2716 case 90: 2717#line 618 "./config/rx-parse.y" /* yacc.c:1661 */ 2718 { B2 (0xf4, 0x08); F ((yyvsp[-4].regno), 14, 2); F ((yyvsp[-1].regno), 8, 4); DSP ((yyvsp[-3].exp), 6, (yyvsp[-4].regno)); } 2719#line 2720 "rx-parse.c" /* yacc.c:1661 */ 2720 break; 2721 2722 case 91: 2723#line 622 "./config/rx-parse.y" /* yacc.c:1661 */ 2724 { sub_op = 0; } 2725#line 2726 "rx-parse.c" /* yacc.c:1661 */ 2726 break; 2727 2728 case 93: 2729#line 623 "./config/rx-parse.y" /* yacc.c:1661 */ 2730 { sub_op = 1; sub_op2 = 1; } 2731#line 2732 "rx-parse.c" /* yacc.c:1661 */ 2732 break; 2733 2734 case 95: 2735#line 624 "./config/rx-parse.y" /* yacc.c:1661 */ 2736 { sub_op = 2; } 2737#line 2738 "rx-parse.c" /* yacc.c:1661 */ 2738 break; 2739 2740 case 97: 2741#line 625 "./config/rx-parse.y" /* yacc.c:1661 */ 2742 { sub_op = 3; sub_op2 = 2; } 2743#line 2744 "rx-parse.c" /* yacc.c:1661 */ 2744 break; 2745 2746 case 99: 2747#line 626 "./config/rx-parse.y" /* yacc.c:1661 */ 2748 { sub_op = 4; } 2749#line 2750 "rx-parse.c" /* yacc.c:1661 */ 2750 break; 2751 2752 case 101: 2753#line 627 "./config/rx-parse.y" /* yacc.c:1661 */ 2754 { sub_op = 5; } 2755#line 2756 "rx-parse.c" /* yacc.c:1661 */ 2756 break; 2757 2758 case 103: 2759#line 628 "./config/rx-parse.y" /* yacc.c:1661 */ 2760 { sub_op = 6; } 2761#line 2762 "rx-parse.c" /* yacc.c:1661 */ 2762 break; 2763 2764 case 105: 2765#line 629 "./config/rx-parse.y" /* yacc.c:1661 */ 2766 { sub_op = 7; } 2767#line 2768 "rx-parse.c" /* yacc.c:1661 */ 2768 break; 2769 2770 case 107: 2771#line 630 "./config/rx-parse.y" /* yacc.c:1661 */ 2772 { sub_op = 8; } 2773#line 2774 "rx-parse.c" /* yacc.c:1661 */ 2774 break; 2775 2776 case 109: 2777#line 631 "./config/rx-parse.y" /* yacc.c:1661 */ 2778 { sub_op = 9; } 2779#line 2780 "rx-parse.c" /* yacc.c:1661 */ 2780 break; 2781 2782 case 111: 2783#line 632 "./config/rx-parse.y" /* yacc.c:1661 */ 2784 { sub_op = 12; } 2785#line 2786 "rx-parse.c" /* yacc.c:1661 */ 2786 break; 2787 2788 case 113: 2789#line 633 "./config/rx-parse.y" /* yacc.c:1661 */ 2790 { sub_op = 13; } 2791#line 2792 "rx-parse.c" /* yacc.c:1661 */ 2792 break; 2793 2794 case 115: 2795#line 634 "./config/rx-parse.y" /* yacc.c:1661 */ 2796 { sub_op = 14; sub_op2 = 0; } 2797#line 2798 "rx-parse.c" /* yacc.c:1661 */ 2798 break; 2799 2800 case 117: 2801#line 635 "./config/rx-parse.y" /* yacc.c:1661 */ 2802 { sub_op = 14; sub_op2 = 0; } 2803#line 2804 "rx-parse.c" /* yacc.c:1661 */ 2804 break; 2805 2806 case 119: 2807#line 636 "./config/rx-parse.y" /* yacc.c:1661 */ 2808 { sub_op = 15; sub_op2 = 1; } 2809#line 2810 "rx-parse.c" /* yacc.c:1661 */ 2810 break; 2811 2812 case 121: 2813#line 640 "./config/rx-parse.y" /* yacc.c:1661 */ 2814 { sub_op = 6; } 2815#line 2816 "rx-parse.c" /* yacc.c:1661 */ 2816 break; 2817 2818 case 123: 2819#line 641 "./config/rx-parse.y" /* yacc.c:1661 */ 2820 { sub_op = 7; } 2821#line 2822 "rx-parse.c" /* yacc.c:1661 */ 2822 break; 2823 2824 case 125: 2825#line 642 "./config/rx-parse.y" /* yacc.c:1661 */ 2826 { sub_op = 16; } 2827#line 2828 "rx-parse.c" /* yacc.c:1661 */ 2828 break; 2829 2830 case 127: 2831#line 643 "./config/rx-parse.y" /* yacc.c:1661 */ 2832 { sub_op = 17; } 2833#line 2834 "rx-parse.c" /* yacc.c:1661 */ 2834 break; 2835 2836 case 129: 2837#line 644 "./config/rx-parse.y" /* yacc.c:1661 */ 2838 { sub_op = 21; } 2839#line 2840 "rx-parse.c" /* yacc.c:1661 */ 2840 break; 2841 2842 case 131: 2843#line 649 "./config/rx-parse.y" /* yacc.c:1661 */ 2844 { id24 (1, 0x63, 0x00); F ((yyvsp[0].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); } 2845#line 2846 "rx-parse.c" /* yacc.c:1661 */ 2846 break; 2847 2848 case 132: 2849#line 651 "./config/rx-parse.y" /* yacc.c:1661 */ 2850 { id24 (1, 0x67, 0x00); F ((yyvsp[0].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); } 2851#line 2852 "rx-parse.c" /* yacc.c:1661 */ 2852 break; 2853 2854 case 133: 2855#line 653 "./config/rx-parse.y" /* yacc.c:1661 */ 2856 { id24 (1, 0x6b, 0x00); F ((yyvsp[0].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); } 2857#line 2858 "rx-parse.c" /* yacc.c:1661 */ 2858 break; 2859 2860 case 134: 2861#line 655 "./config/rx-parse.y" /* yacc.c:1661 */ 2862 { id24 (1, 0x6f, 0x00); F ((yyvsp[0].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); } 2863#line 2864 "rx-parse.c" /* yacc.c:1661 */ 2864 break; 2865 2866 case 135: 2867#line 658 "./config/rx-parse.y" /* yacc.c:1661 */ 2868 { id24 (1, 0x60, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[-6].regno), 20, 4); DSP ((yyvsp[-4].exp), 14, BSIZE); } 2869#line 2870 "rx-parse.c" /* yacc.c:1661 */ 2870 break; 2871 2872 case 136: 2873#line 660 "./config/rx-parse.y" /* yacc.c:1661 */ 2874 { id24 (1, 0x64, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[-6].regno), 20, 4); DSP ((yyvsp[-4].exp), 14, BSIZE); } 2875#line 2876 "rx-parse.c" /* yacc.c:1661 */ 2876 break; 2877 2878 case 137: 2879#line 662 "./config/rx-parse.y" /* yacc.c:1661 */ 2880 { id24 (1, 0x68, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[-6].regno), 20, 4); DSP ((yyvsp[-4].exp), 14, BSIZE); } 2881#line 2882 "rx-parse.c" /* yacc.c:1661 */ 2882 break; 2883 2884 case 138: 2885#line 664 "./config/rx-parse.y" /* yacc.c:1661 */ 2886 { id24 (1, 0x6c, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[-6].regno), 20, 4); DSP ((yyvsp[-4].exp), 14, BSIZE); } 2887#line 2888 "rx-parse.c" /* yacc.c:1661 */ 2888 break; 2889 2890 case 139: 2891#line 668 "./config/rx-parse.y" /* yacc.c:1661 */ 2892 { sub_op = 0; } 2893#line 2894 "rx-parse.c" /* yacc.c:1661 */ 2894 break; 2895 2896 case 141: 2897#line 669 "./config/rx-parse.y" /* yacc.c:1661 */ 2898 { sub_op = 1; } 2899#line 2900 "rx-parse.c" /* yacc.c:1661 */ 2900 break; 2901 2902 case 143: 2903#line 670 "./config/rx-parse.y" /* yacc.c:1661 */ 2904 { sub_op = 2; } 2905#line 2906 "rx-parse.c" /* yacc.c:1661 */ 2906 break; 2907 2908 case 145: 2909#line 671 "./config/rx-parse.y" /* yacc.c:1661 */ 2910 { sub_op = 3; } 2911#line 2912 "rx-parse.c" /* yacc.c:1661 */ 2912 break; 2913 2914 case 147: 2915#line 672 "./config/rx-parse.y" /* yacc.c:1661 */ 2916 { sub_op = 4; } 2917#line 2918 "rx-parse.c" /* yacc.c:1661 */ 2918 break; 2919 2920 case 149: 2921#line 673 "./config/rx-parse.y" /* yacc.c:1661 */ 2922 { sub_op = 8; } 2923#line 2924 "rx-parse.c" /* yacc.c:1661 */ 2924 break; 2925 2926 case 151: 2927#line 674 "./config/rx-parse.y" /* yacc.c:1661 */ 2928 { sub_op = 5; } 2929#line 2930 "rx-parse.c" /* yacc.c:1661 */ 2930 break; 2931 2932 case 153: 2933#line 675 "./config/rx-parse.y" /* yacc.c:1661 */ 2934 { sub_op = 9; } 2935#line 2936 "rx-parse.c" /* yacc.c:1661 */ 2936 break; 2937 2938 case 155: 2939#line 676 "./config/rx-parse.y" /* yacc.c:1661 */ 2940 { sub_op = 6; } 2941#line 2942 "rx-parse.c" /* yacc.c:1661 */ 2942 break; 2943 2944 case 157: 2945#line 684 "./config/rx-parse.y" /* yacc.c:1661 */ 2946 { id24 (1, 0xdb, 0x00); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 16, 4); } 2947#line 2948 "rx-parse.c" /* yacc.c:1661 */ 2948 break; 2949 2950 case 158: 2951#line 686 "./config/rx-parse.y" /* yacc.c:1661 */ 2952 { id24 (1, 0xd0, 0x00); F ((yyvsp[-5].regno), 20, 4); F ((yyvsp[-4].regno), 12, 2); F ((yyvsp[-1].regno), 16, 4); DSP ((yyvsp[-3].exp), 14, (yyvsp[-4].regno)); } 2953#line 2954 "rx-parse.c" /* yacc.c:1661 */ 2954 break; 2955 2956 case 159: 2957#line 691 "./config/rx-parse.y" /* yacc.c:1661 */ 2958 { id24 (1, 0xe0, 0x00); F ((yyvsp[-8].regno), 20, 4); FE ((yyvsp[-6].exp), 11, 3); 2959 F ((yyvsp[-2].regno), 16, 4); DSP ((yyvsp[-4].exp), 14, BSIZE); } 2960#line 2961 "rx-parse.c" /* yacc.c:1661 */ 2961 break; 2962 2963 case 160: 2964#line 697 "./config/rx-parse.y" /* yacc.c:1661 */ 2965 { id24 (1, 0xe0, 0x0f); FE ((yyvsp[-6].exp), 11, 3); F ((yyvsp[-2].regno), 16, 4); 2966 DSP ((yyvsp[-4].exp), 14, BSIZE); } 2967#line 2968 "rx-parse.c" /* yacc.c:1661 */ 2968 break; 2969 2970 case 161: 2971#line 703 "./config/rx-parse.y" /* yacc.c:1661 */ 2972 { id24 (2, 0x00, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 2973#line 2974 "rx-parse.c" /* yacc.c:1661 */ 2974 break; 2975 2976 case 162: 2977#line 705 "./config/rx-parse.y" /* yacc.c:1661 */ 2978 { rx_check_v2 (); id24 (2, 0x00, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 2979#line 2980 "rx-parse.c" /* yacc.c:1661 */ 2980 break; 2981 2982 case 163: 2983#line 707 "./config/rx-parse.y" /* yacc.c:1661 */ 2984 { id24 (2, 0x01, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 2985#line 2986 "rx-parse.c" /* yacc.c:1661 */ 2986 break; 2987 2988 case 164: 2989#line 709 "./config/rx-parse.y" /* yacc.c:1661 */ 2990 { rx_check_v2 (); id24 (2, 0x01, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 2991#line 2992 "rx-parse.c" /* yacc.c:1661 */ 2992 break; 2993 2994 case 165: 2995#line 711 "./config/rx-parse.y" /* yacc.c:1661 */ 2996 { id24 (2, 0x04, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 2997#line 2998 "rx-parse.c" /* yacc.c:1661 */ 2998 break; 2999 3000 case 166: 3001#line 713 "./config/rx-parse.y" /* yacc.c:1661 */ 3002 { rx_check_v2 (); id24 (2, 0x04, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3003#line 3004 "rx-parse.c" /* yacc.c:1661 */ 3004 break; 3005 3006 case 167: 3007#line 715 "./config/rx-parse.y" /* yacc.c:1661 */ 3008 { id24 (2, 0x05, 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3009#line 3010 "rx-parse.c" /* yacc.c:1661 */ 3010 break; 3011 3012 case 168: 3013#line 717 "./config/rx-parse.y" /* yacc.c:1661 */ 3014 { rx_check_v2 (); id24 (2, 0x05, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3015#line 3016 "rx-parse.c" /* yacc.c:1661 */ 3016 break; 3017 3018 case 169: 3019#line 723 "./config/rx-parse.y" /* yacc.c:1661 */ 3020 { id24 (2, 0x17, 0x00); F ((yyvsp[0].regno), 20, 4); } 3021#line 3022 "rx-parse.c" /* yacc.c:1661 */ 3022 break; 3023 3024 case 170: 3025#line 725 "./config/rx-parse.y" /* yacc.c:1661 */ 3026 { rx_check_v2 (); id24 (2, 0x17, 0x00); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 16, 1); } 3027#line 3028 "rx-parse.c" /* yacc.c:1661 */ 3028 break; 3029 3030 case 171: 3031#line 727 "./config/rx-parse.y" /* yacc.c:1661 */ 3032 { id24 (2, 0x17, 0x10); F ((yyvsp[0].regno), 20, 4); } 3033#line 3034 "rx-parse.c" /* yacc.c:1661 */ 3034 break; 3035 3036 case 172: 3037#line 729 "./config/rx-parse.y" /* yacc.c:1661 */ 3038 { rx_check_v2 (); id24 (2, 0x17, 0x10); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 16, 1); } 3039#line 3040 "rx-parse.c" /* yacc.c:1661 */ 3040 break; 3041 3042 case 173: 3043#line 731 "./config/rx-parse.y" /* yacc.c:1661 */ 3044 { id24 (2, 0x1f, 0x00); F ((yyvsp[0].regno), 20, 4); } 3045#line 3046 "rx-parse.c" /* yacc.c:1661 */ 3046 break; 3047 3048 case 174: 3049#line 732 "./config/rx-parse.y" /* yacc.c:1661 */ 3050 { sub_op = 0; } 3051#line 3052 "rx-parse.c" /* yacc.c:1661 */ 3052 break; 3053 3054 case 176: 3055#line 734 "./config/rx-parse.y" /* yacc.c:1661 */ 3056 { id24 (2, 0x1f, 0x20); F ((yyvsp[0].regno), 20, 4); } 3057#line 3058 "rx-parse.c" /* yacc.c:1661 */ 3058 break; 3059 3060 case 177: 3061#line 735 "./config/rx-parse.y" /* yacc.c:1661 */ 3062 { sub_op = 2; } 3063#line 3064 "rx-parse.c" /* yacc.c:1661 */ 3064 break; 3065 3066 case 179: 3067#line 737 "./config/rx-parse.y" /* yacc.c:1661 */ 3068 { id24 (2, 0x1f, 0x10); F ((yyvsp[0].regno), 20, 4); } 3069#line 3070 "rx-parse.c" /* yacc.c:1661 */ 3070 break; 3071 3072 case 180: 3073#line 738 "./config/rx-parse.y" /* yacc.c:1661 */ 3074 { sub_op = 1; } 3075#line 3076 "rx-parse.c" /* yacc.c:1661 */ 3076 break; 3077 3078 case 182: 3079#line 740 "./config/rx-parse.y" /* yacc.c:1661 */ 3080 { id24 (2, 0x18, 0x00); 3081 if (rx_uintop ((yyvsp[0].exp), 4) && (yyvsp[0].exp).X_add_number == 1) 3082 ; 3083 else if (rx_uintop ((yyvsp[0].exp), 4) && (yyvsp[0].exp).X_add_number == 2) 3084 F (1, 19, 1); 3085 else 3086 as_bad (_("RACW expects #1 or #2"));} 3087#line 3088 "rx-parse.c" /* yacc.c:1661 */ 3088 break; 3089 3090 case 183: 3091#line 748 "./config/rx-parse.y" /* yacc.c:1661 */ 3092 { rx_check_v2 (); id24 (2, 0x18, 0x00); F ((yyvsp[0].regno), 16, 1); 3093 if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 1) 3094 ; 3095 else if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 2) 3096 F (1, 19, 1); 3097 else 3098 as_bad (_("RACW expects #1 or #2"));} 3099#line 3100 "rx-parse.c" /* yacc.c:1661 */ 3100 break; 3101 3102 case 184: 3103#line 759 "./config/rx-parse.y" /* yacc.c:1661 */ 3104 { id24 (2, 0x20, 0); F ((yyvsp[-6].regno), 14, 2); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[-5].regno), 20, 4); } 3105#line 3106 "rx-parse.c" /* yacc.c:1661 */ 3106 break; 3107 3108 case 185: 3109#line 761 "./config/rx-parse.y" /* yacc.c:1661 */ 3110 { id24 (2, 0x24, 0); F ((yyvsp[-6].regno), 14, 2); F ((yyvsp[-1].regno), 16, 4); F ((yyvsp[-5].regno), 20, 4); } 3111#line 3112 "rx-parse.c" /* yacc.c:1661 */ 3112 break; 3113 3114 case 186: 3115#line 766 "./config/rx-parse.y" /* yacc.c:1661 */ 3116 { id24 (2, 0x28, 0); F ((yyvsp[-6].regno), 14, 2); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3117#line 3118 "rx-parse.c" /* yacc.c:1661 */ 3118 break; 3119 3120 case 187: 3121#line 768 "./config/rx-parse.y" /* yacc.c:1661 */ 3122 { id24 (2, 0x2c, 0); F ((yyvsp[-6].regno), 14, 2); F ((yyvsp[-3].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3123#line 3124 "rx-parse.c" /* yacc.c:1661 */ 3124 break; 3125 3126 case 188: 3127#line 773 "./config/rx-parse.y" /* yacc.c:1661 */ 3128 { id24 (2, 0x38, 0); F ((yyvsp[-6].regno), 15, 1); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3129#line 3130 "rx-parse.c" /* yacc.c:1661 */ 3130 break; 3131 3132 case 189: 3133#line 775 "./config/rx-parse.y" /* yacc.c:1661 */ 3134 { id24 (2, 0x3c, 0); F ((yyvsp[-6].regno), 15, 1); F ((yyvsp[-3].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3135#line 3136 "rx-parse.c" /* yacc.c:1661 */ 3136 break; 3137 3138 case 190: 3139#line 779 "./config/rx-parse.y" /* yacc.c:1661 */ 3140 { sub_op = 6; } 3141#line 3142 "rx-parse.c" /* yacc.c:1661 */ 3142 break; 3143 3144 case 192: 3145#line 780 "./config/rx-parse.y" /* yacc.c:1661 */ 3146 { sub_op = 4; } 3147#line 3148 "rx-parse.c" /* yacc.c:1661 */ 3148 break; 3149 3150 case 194: 3151#line 781 "./config/rx-parse.y" /* yacc.c:1661 */ 3152 { sub_op = 5; } 3153#line 3154 "rx-parse.c" /* yacc.c:1661 */ 3154 break; 3155 3156 case 196: 3157#line 782 "./config/rx-parse.y" /* yacc.c:1661 */ 3158 { sub_op = 7; } 3159#line 3160 "rx-parse.c" /* yacc.c:1661 */ 3160 break; 3161 3162 case 198: 3163#line 787 "./config/rx-parse.y" /* yacc.c:1661 */ 3164 { if ((yyvsp[0].regno) == 13) 3165 rx_check_v2 (); 3166 id24 (2, 0x68, 0x00); F ((yyvsp[0].regno) % 16, 20, 4); F ((yyvsp[0].regno) / 16, 15, 1); 3167 F ((yyvsp[-2].regno), 16, 4); } 3168#line 3169 "rx-parse.c" /* yacc.c:1661 */ 3169 break; 3170 3171 case 199: 3172#line 795 "./config/rx-parse.y" /* yacc.c:1661 */ 3173 { if ((yyvsp[-2].regno) == 13) 3174 rx_check_v2 (); 3175 id24 (2, 0x6a, 0); F ((yyvsp[-2].regno), 15, 5); F ((yyvsp[0].regno), 20, 4); } 3176#line 3177 "rx-parse.c" /* yacc.c:1661 */ 3177 break; 3178 3179 case 200: 3180#line 802 "./config/rx-parse.y" /* yacc.c:1661 */ 3181 { id24 (2, 0x6e, 0); FE ((yyvsp[-2].exp), 15, 5); F ((yyvsp[0].regno), 20, 4); } 3182#line 3183 "rx-parse.c" /* yacc.c:1661 */ 3183 break; 3184 3185 case 201: 3186#line 804 "./config/rx-parse.y" /* yacc.c:1661 */ 3187 { id24 (2, 0x6c, 0); FE ((yyvsp[-2].exp), 15, 5); F ((yyvsp[0].regno), 20, 4); } 3188#line 3189 "rx-parse.c" /* yacc.c:1661 */ 3189 break; 3190 3191 case 202: 3192#line 809 "./config/rx-parse.y" /* yacc.c:1661 */ 3193 { if ((yyvsp[0].regno) == 13) 3194 rx_check_v2 (); 3195 id24 (2, 0x73, 0x00); F ((yyvsp[0].regno), 19, 5); IMM ((yyvsp[-2].exp), 12); } 3196#line 3197 "rx-parse.c" /* yacc.c:1661 */ 3197 break; 3198 3199 case 203: 3200#line 816 "./config/rx-parse.y" /* yacc.c:1661 */ 3201 { id24 (2, 0xe0, 0x00); F ((yyvsp[-4].regno), 16, 4); FE ((yyvsp[-2].exp), 11, 5); 3202 F ((yyvsp[0].regno), 20, 4); } 3203#line 3204 "rx-parse.c" /* yacc.c:1661 */ 3204 break; 3205 3206 case 204: 3207#line 822 "./config/rx-parse.y" /* yacc.c:1661 */ 3208 { id24 (2, 0xe0, 0xf0); FE ((yyvsp[-2].exp), 11, 5); F ((yyvsp[0].regno), 20, 4); } 3209#line 3210 "rx-parse.c" /* yacc.c:1661 */ 3210 break; 3211 3212 case 205: 3213#line 827 "./config/rx-parse.y" /* yacc.c:1661 */ 3214 { id24 (3, 0x00, 0); F ((yyvsp[-7].regno), 10, 2); F ((yyvsp[-3].regno), 12, 4); F ((yyvsp[-1].regno), 16, 4); F ((yyvsp[-6].regno), 20, 4); } 3215#line 3216 "rx-parse.c" /* yacc.c:1661 */ 3216 break; 3217 3218 case 206: 3219#line 830 "./config/rx-parse.y" /* yacc.c:1661 */ 3220 { id24 (3, 0x40, 0); F ((yyvsp[-7].regno), 10, 2); F ((yyvsp[-5].regno), 12, 4); F ((yyvsp[-3].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3221#line 3222 "rx-parse.c" /* yacc.c:1661 */ 3222 break; 3223 3224 case 207: 3225#line 833 "./config/rx-parse.y" /* yacc.c:1661 */ 3226 { id24 (3, 0xc0, 0); F ((yyvsp[-7].regno), 10, 2); F ((yyvsp[-5].regno), 12, 4); F ((yyvsp[-3].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3227#line 3228 "rx-parse.c" /* yacc.c:1661 */ 3228 break; 3229 3230 case 208: 3231#line 837 "./config/rx-parse.y" /* yacc.c:1661 */ 3232 { sub_op = 0; } 3233#line 3234 "rx-parse.c" /* yacc.c:1661 */ 3234 break; 3235 3236 case 210: 3237#line 838 "./config/rx-parse.y" /* yacc.c:1661 */ 3238 { sub_op = 2; } 3239#line 3240 "rx-parse.c" /* yacc.c:1661 */ 3240 break; 3241 3242 case 212: 3243#line 839 "./config/rx-parse.y" /* yacc.c:1661 */ 3244 { sub_op = 3; } 3245#line 3246 "rx-parse.c" /* yacc.c:1661 */ 3246 break; 3247 3248 case 214: 3249#line 840 "./config/rx-parse.y" /* yacc.c:1661 */ 3250 { sub_op = 4; } 3251#line 3252 "rx-parse.c" /* yacc.c:1661 */ 3252 break; 3253 3254 case 216: 3255#line 841 "./config/rx-parse.y" /* yacc.c:1661 */ 3256 { sub_op = 5; } 3257#line 3258 "rx-parse.c" /* yacc.c:1661 */ 3258 break; 3259 3260 case 218: 3261#line 847 "./config/rx-parse.y" /* yacc.c:1661 */ 3262 { id24 (2, 0x70, 0x20); F ((yyvsp[0].regno), 20, 4); NBIMM ((yyvsp[-2].exp), 12); } 3263#line 3264 "rx-parse.c" /* yacc.c:1661 */ 3264 break; 3265 3266 case 219: 3267#line 852 "./config/rx-parse.y" /* yacc.c:1661 */ 3268 { rx_check_v2 (); B3 (0xfd, 0x27, 0x00); F ((yyvsp[-1].regno), 16, 4); F ((yyvsp[-4].regno), 20, 4); } 3269#line 3270 "rx-parse.c" /* yacc.c:1661 */ 3270 break; 3271 3272 case 220: 3273#line 857 "./config/rx-parse.y" /* yacc.c:1661 */ 3274 { rx_check_v2 (); B3 (0xfd, 0x2f, 0x00); F ((yyvsp[-3].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3275#line 3276 "rx-parse.c" /* yacc.c:1661 */ 3276 break; 3277 3278 case 221: 3279#line 862 "./config/rx-parse.y" /* yacc.c:1661 */ 3280 { rx_check_v2 (); id24 (2, 0x07, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3281#line 3282 "rx-parse.c" /* yacc.c:1661 */ 3282 break; 3283 3284 case 222: 3285#line 864 "./config/rx-parse.y" /* yacc.c:1661 */ 3286 { rx_check_v2 (); id24 (2, 0x47, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3287#line 3288 "rx-parse.c" /* yacc.c:1661 */ 3288 break; 3289 3290 case 223: 3291#line 866 "./config/rx-parse.y" /* yacc.c:1661 */ 3292 { rx_check_v2 (); id24 (2, 0x03, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3293#line 3294 "rx-parse.c" /* yacc.c:1661 */ 3294 break; 3295 3296 case 224: 3297#line 868 "./config/rx-parse.y" /* yacc.c:1661 */ 3298 { rx_check_v2 (); id24 (2, 0x06, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3299#line 3300 "rx-parse.c" /* yacc.c:1661 */ 3300 break; 3301 3302 case 225: 3303#line 870 "./config/rx-parse.y" /* yacc.c:1661 */ 3304 { rx_check_v2 (); id24 (2, 0x44, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3305#line 3306 "rx-parse.c" /* yacc.c:1661 */ 3306 break; 3307 3308 case 226: 3309#line 872 "./config/rx-parse.y" /* yacc.c:1661 */ 3310 { rx_check_v2 (); id24 (2, 0x46, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3311#line 3312 "rx-parse.c" /* yacc.c:1661 */ 3312 break; 3313 3314 case 227: 3315#line 874 "./config/rx-parse.y" /* yacc.c:1661 */ 3316 { rx_check_v2 (); id24 (2, 0x45, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3317#line 3318 "rx-parse.c" /* yacc.c:1661 */ 3318 break; 3319 3320 case 228: 3321#line 876 "./config/rx-parse.y" /* yacc.c:1661 */ 3322 { rx_check_v2 (); id24 (2, 0x02, 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 1); } 3323#line 3324 "rx-parse.c" /* yacc.c:1661 */ 3324 break; 3325 3326 case 229: 3327#line 877 "./config/rx-parse.y" /* yacc.c:1661 */ 3328 { sub_op = 3; } 3329#line 3330 "rx-parse.c" /* yacc.c:1661 */ 3330 break; 3331 3332 case 231: 3333#line 879 "./config/rx-parse.y" /* yacc.c:1661 */ 3334 { rx_check_v2 (); id24 (2, 0x17, 0x30); F ((yyvsp[0].regno), 16, 1); F ((yyvsp[-2].regno), 20, 4); } 3335#line 3336 "rx-parse.c" /* yacc.c:1661 */ 3336 break; 3337 3338 case 232: 3339#line 881 "./config/rx-parse.y" /* yacc.c:1661 */ 3340 { rx_check_v2 (); id24 (2, 0x19, 0x00); F ((yyvsp[0].regno), 16, 1); 3341 if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 1) 3342 ; 3343 else if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 2) 3344 F (1, 19, 1); 3345 else 3346 as_bad (_("RACL expects #1 or #2"));} 3347#line 3348 "rx-parse.c" /* yacc.c:1661 */ 3348 break; 3349 3350 case 233: 3351#line 889 "./config/rx-parse.y" /* yacc.c:1661 */ 3352 { rx_check_v2 (); id24 (2, 0x19, 0x40); F ((yyvsp[0].regno), 16, 1); 3353 if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 1) 3354 ; 3355 else if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 2) 3356 F (1, 19, 1); 3357 else 3358 as_bad (_("RDACL expects #1 or #2"));} 3359#line 3360 "rx-parse.c" /* yacc.c:1661 */ 3360 break; 3361 3362 case 234: 3363#line 897 "./config/rx-parse.y" /* yacc.c:1661 */ 3364 { rx_check_v2 (); id24 (2, 0x18, 0x40); F ((yyvsp[0].regno), 16, 1); 3365 if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 1) 3366 ; 3367 else if (rx_uintop ((yyvsp[-2].exp), 4) && (yyvsp[-2].exp).X_add_number == 2) 3368 F (1, 19, 1); 3369 else 3370 as_bad (_("RDACW expects #1 or #2"));} 3371#line 3372 "rx-parse.c" /* yacc.c:1661 */ 3372 break; 3373 3374 case 235: 3375#line 913 "./config/rx-parse.y" /* yacc.c:1661 */ 3376 { B2 (0x43 + (sub_op<<2), 0); F ((yyvsp[-2].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); } 3377#line 3378 "rx-parse.c" /* yacc.c:1661 */ 3378 break; 3379 3380 case 236: 3381#line 915 "./config/rx-parse.y" /* yacc.c:1661 */ 3382 { B2 (0x40 + (sub_op<<2), 0); F ((yyvsp[-4].regno), 8, 4); F ((yyvsp[0].regno), 12, 4); DSP ((yyvsp[-6].exp), 6, BSIZE); } 3383#line 3384 "rx-parse.c" /* yacc.c:1661 */ 3384 break; 3385 3386 case 237: 3387#line 917 "./config/rx-parse.y" /* yacc.c:1661 */ 3388 { B3 (MEMEX, sub_op<<2, 0); F ((yyvsp[-2].regno), 8, 2); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, sizemap[(yyvsp[-2].regno)]); } 3389#line 3390 "rx-parse.c" /* yacc.c:1661 */ 3390 break; 3391 3392 case 238: 3393#line 919 "./config/rx-parse.y" /* yacc.c:1661 */ 3394 { id24 (4, sub_op<<4, 0), F ((yyvsp[0].regno), 12, 4), F ((yyvsp[-4].regno), 16, 4), F ((yyvsp[-2].regno), 20, 4); } 3395#line 3396 "rx-parse.c" /* yacc.c:1661 */ 3396 break; 3397 3398 case 239: 3399#line 926 "./config/rx-parse.y" /* yacc.c:1661 */ 3400 { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3401#line 3402 "rx-parse.c" /* yacc.c:1661 */ 3402 break; 3403 3404 case 240: 3405#line 928 "./config/rx-parse.y" /* yacc.c:1661 */ 3406 { B4 (MEMEX, 0xa0, 0x00 + sub_op, 0x00); 3407 F ((yyvsp[-4].regno), 24, 4); F ((yyvsp[0].regno), 28, 4); DSP ((yyvsp[-6].exp), 14, LSIZE); } 3408#line 3409 "rx-parse.c" /* yacc.c:1661 */ 3409 break; 3410 3411 case 241: 3412#line 936 "./config/rx-parse.y" /* yacc.c:1661 */ 3413 { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3414#line 3415 "rx-parse.c" /* yacc.c:1661 */ 3415 break; 3416 3417 case 242: 3418#line 938 "./config/rx-parse.y" /* yacc.c:1661 */ 3419 { id24 (1, 0x00 + (sub_op<<2), 0x00); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, BSIZE); } 3420#line 3421 "rx-parse.c" /* yacc.c:1661 */ 3421 break; 3422 3423 case 243: 3424#line 940 "./config/rx-parse.y" /* yacc.c:1661 */ 3425 { B4 (MEMEX, 0x20 + ((yyvsp[-2].regno) << 6), 0x00 + sub_op, 0x00); 3426 F ((yyvsp[-4].regno), 24, 4); F ((yyvsp[0].regno), 28, 4); DSP ((yyvsp[-6].exp), 14, sizemap[(yyvsp[-2].regno)]); } 3427#line 3428 "rx-parse.c" /* yacc.c:1661 */ 3428 break; 3429 3430 case 244: 3431#line 946 "./config/rx-parse.y" /* yacc.c:1661 */ 3432 { id24 (2, 0x70, sub_op<<4); F ((yyvsp[0].regno), 20, 4); IMM ((yyvsp[-2].exp), 12); } 3433#line 3434 "rx-parse.c" /* yacc.c:1661 */ 3434 break; 3435 3436 case 249: 3437#line 961 "./config/rx-parse.y" /* yacc.c:1661 */ 3438 { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3439#line 3440 "rx-parse.c" /* yacc.c:1661 */ 3440 break; 3441 3442 case 250: 3443#line 963 "./config/rx-parse.y" /* yacc.c:1661 */ 3444 { B2 (0x7e, sub_op2 << 4); F ((yyvsp[0].regno), 12, 4); } 3445#line 3446 "rx-parse.c" /* yacc.c:1661 */ 3446 break; 3447 3448 case 251: 3449#line 968 "./config/rx-parse.y" /* yacc.c:1661 */ 3450 { id24 (1, 0x4b + (sub_op2<<2), 0x00); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3451#line 3452 "rx-parse.c" /* yacc.c:1661 */ 3452 break; 3453 3454 case 252: 3455#line 972 "./config/rx-parse.y" /* yacc.c:1661 */ 3456 { rx_check_v2 (); } 3457#line 3458 "rx-parse.c" /* yacc.c:1661 */ 3458 break; 3459 3460 case 255: 3461#line 980 "./config/rx-parse.y" /* yacc.c:1661 */ 3462 { id24 (1, 0x03 + (sub_op<<2), 0); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3463#line 3464 "rx-parse.c" /* yacc.c:1661 */ 3464 break; 3465 3466 case 256: 3467#line 982 "./config/rx-parse.y" /* yacc.c:1661 */ 3468 { id24 (1, 0x00 + (sub_op<<2), 0); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, BSIZE); } 3469#line 3470 "rx-parse.c" /* yacc.c:1661 */ 3470 break; 3471 3472 case 257: 3473#line 984 "./config/rx-parse.y" /* yacc.c:1661 */ 3474 { B4 (MEMEX, 0x20, 0x00 + sub_op, 0); F ((yyvsp[-2].regno), 8, 2); F ((yyvsp[-4].regno), 24, 4); F ((yyvsp[0].regno), 28, 4); 3475 DSP ((yyvsp[-6].exp), 14, sizemap[(yyvsp[-2].regno)]); } 3476#line 3477 "rx-parse.c" /* yacc.c:1661 */ 3477 break; 3478 3479 case 258: 3480#line 991 "./config/rx-parse.y" /* yacc.c:1661 */ 3481 { id24 (2, 0x60 + sub_op, 0); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3482#line 3483 "rx-parse.c" /* yacc.c:1661 */ 3483 break; 3484 3485 case 259: 3486#line 995 "./config/rx-parse.y" /* yacc.c:1661 */ 3487 { B2 (0x68 + (sub_op<<1), 0); FE ((yyvsp[-2].exp), 7, 5); F ((yyvsp[0].regno), 12, 4); } 3488#line 3489 "rx-parse.c" /* yacc.c:1661 */ 3489 break; 3490 3491 case 260: 3492#line 997 "./config/rx-parse.y" /* yacc.c:1661 */ 3493 { id24 (2, 0x80 + (sub_op << 5), 0); FE ((yyvsp[-4].exp), 11, 5); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3494#line 3495 "rx-parse.c" /* yacc.c:1661 */ 3495 break; 3496 3497 case 262: 3498#line 1003 "./config/rx-parse.y" /* yacc.c:1661 */ 3499 { rx_check_float_support (); id24 (2, 0x72, sub_op << 4); F ((yyvsp[0].regno), 20, 4); O4 ((yyvsp[-2].exp)); } 3500#line 3501 "rx-parse.c" /* yacc.c:1661 */ 3501 break; 3502 3503 case 263: 3504#line 1005 "./config/rx-parse.y" /* yacc.c:1661 */ 3505 { rx_check_float_support (); id24 (1, 0x83 + (sub_op << 2), 0); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3506#line 3507 "rx-parse.c" /* yacc.c:1661 */ 3507 break; 3508 3509 case 264: 3510#line 1007 "./config/rx-parse.y" /* yacc.c:1661 */ 3511 { rx_check_float_support (); id24 (1, 0x80 + (sub_op << 2), 0); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, LSIZE); } 3512#line 3513 "rx-parse.c" /* yacc.c:1661 */ 3513 break; 3514 3515 case 265: 3516#line 1009 "./config/rx-parse.y" /* yacc.c:1661 */ 3517 { rx_check_v2 (); id24 (4, 0x80 + (sub_op << 4), 0 ); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[-2].regno), 20, 4); F ((yyvsp[0].regno), 12, 4); } 3518#line 3519 "rx-parse.c" /* yacc.c:1661 */ 3519 break; 3520 3521 case 266: 3522#line 1013 "./config/rx-parse.y" /* yacc.c:1661 */ 3523 { rx_check_float_support (); } 3524#line 3525 "rx-parse.c" /* yacc.c:1661 */ 3525 break; 3526 3527 case 267: 3528#line 1015 "./config/rx-parse.y" /* yacc.c:1661 */ 3529 { id24 (2, 0x72, sub_op << 4); F ((yyvsp[0].regno), 20, 4); O4 ((yyvsp[-2].exp)); } 3530#line 3531 "rx-parse.c" /* yacc.c:1661 */ 3531 break; 3532 3533 case 269: 3534#line 1020 "./config/rx-parse.y" /* yacc.c:1661 */ 3535 { rx_check_float_support (); } 3536#line 3537 "rx-parse.c" /* yacc.c:1661 */ 3537 break; 3538 3539 case 270: 3540#line 1022 "./config/rx-parse.y" /* yacc.c:1661 */ 3541 { id24 (1, 0x83 + (sub_op << 2), 0); F ((yyvsp[-2].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); } 3542#line 3543 "rx-parse.c" /* yacc.c:1661 */ 3543 break; 3544 3545 case 271: 3546#line 1023 "./config/rx-parse.y" /* yacc.c:1661 */ 3547 { rx_check_float_support (); } 3548#line 3549 "rx-parse.c" /* yacc.c:1661 */ 3549 break; 3550 3551 case 272: 3552#line 1025 "./config/rx-parse.y" /* yacc.c:1661 */ 3553 { id24 (1, 0x80 + (sub_op << 2), 0); F ((yyvsp[-4].regno), 16, 4); F ((yyvsp[0].regno), 20, 4); DSP ((yyvsp[-6].exp), 14, LSIZE); } 3554#line 3555 "rx-parse.c" /* yacc.c:1661 */ 3555 break; 3556 3557 case 273: 3558#line 1029 "./config/rx-parse.y" /* yacc.c:1661 */ 3559 { rx_check_v2 (); } 3560#line 3561 "rx-parse.c" /* yacc.c:1661 */ 3561 break; 3562 3563 case 274: 3564#line 1031 "./config/rx-parse.y" /* yacc.c:1661 */ 3565 { id24 (2, 0x1e, sub_op << 4); F ((yyvsp[0].regno), 20, 4); F ((yyvsp[-2].regno), 16, 1); 3566 if (rx_uintop ((yyvsp[-4].exp), 4)) 3567 { 3568 switch (exp_val ((yyvsp[-4].exp))) 3569 { 3570 case 0: 3571 F (1, 15, 1); 3572 break; 3573 case 1: 3574 F (1, 15, 1); 3575 F (1, 17, 1); 3576 break; 3577 case 2: 3578 break; 3579 default: 3580 as_bad (_("IMM expects #0 to #2"));} 3581 } else 3582 as_bad (_("IMM expects #0 to #2"));} 3583#line 3584 "rx-parse.c" /* yacc.c:1661 */ 3584 break; 3585 3586 case 275: 3587#line 1053 "./config/rx-parse.y" /* yacc.c:1661 */ 3588 { (yyval.exp) = zero_expr (); } 3589#line 3590 "rx-parse.c" /* yacc.c:1661 */ 3590 break; 3591 3592 case 276: 3593#line 1054 "./config/rx-parse.y" /* yacc.c:1661 */ 3594 { (yyval.exp) = (yyvsp[0].exp); } 3595#line 3596 "rx-parse.c" /* yacc.c:1661 */ 3596 break; 3597 3598 case 277: 3599#line 1057 "./config/rx-parse.y" /* yacc.c:1661 */ 3600 { need_flag = 1; } 3601#line 3602 "rx-parse.c" /* yacc.c:1661 */ 3602 break; 3603 3604 case 278: 3605#line 1057 "./config/rx-parse.y" /* yacc.c:1661 */ 3606 { need_flag = 0; (yyval.regno) = (yyvsp[0].regno); } 3607#line 3608 "rx-parse.c" /* yacc.c:1661 */ 3608 break; 3609 3610 case 279: 3611#line 1062 "./config/rx-parse.y" /* yacc.c:1661 */ 3612 { (yyval.regno) = 0; } 3613#line 3614 "rx-parse.c" /* yacc.c:1661 */ 3614 break; 3615 3616 case 280: 3617#line 1063 "./config/rx-parse.y" /* yacc.c:1661 */ 3618 { (yyval.regno) = 1; } 3619#line 3620 "rx-parse.c" /* yacc.c:1661 */ 3620 break; 3621 3622 case 281: 3623#line 1064 "./config/rx-parse.y" /* yacc.c:1661 */ 3624 { (yyval.regno) = 2; } 3625#line 3626 "rx-parse.c" /* yacc.c:1661 */ 3626 break; 3627 3628 case 282: 3629#line 1065 "./config/rx-parse.y" /* yacc.c:1661 */ 3630 { (yyval.regno) = 2; } 3631#line 3632 "rx-parse.c" /* yacc.c:1661 */ 3632 break; 3633 3634 case 283: 3635#line 1066 "./config/rx-parse.y" /* yacc.c:1661 */ 3636 { (yyval.regno) = 3; } 3637#line 3638 "rx-parse.c" /* yacc.c:1661 */ 3638 break; 3639 3640 case 284: 3641#line 1069 "./config/rx-parse.y" /* yacc.c:1661 */ 3642 { (yyval.regno) = LSIZE; } 3643#line 3644 "rx-parse.c" /* yacc.c:1661 */ 3644 break; 3645 3646 case 285: 3647#line 1070 "./config/rx-parse.y" /* yacc.c:1661 */ 3648 { (yyval.regno) = BSIZE; } 3649#line 3650 "rx-parse.c" /* yacc.c:1661 */ 3650 break; 3651 3652 case 286: 3653#line 1071 "./config/rx-parse.y" /* yacc.c:1661 */ 3654 { (yyval.regno) = WSIZE; } 3655#line 3656 "rx-parse.c" /* yacc.c:1661 */ 3656 break; 3657 3658 case 287: 3659#line 1072 "./config/rx-parse.y" /* yacc.c:1661 */ 3660 { (yyval.regno) = LSIZE; } 3661#line 3662 "rx-parse.c" /* yacc.c:1661 */ 3662 break; 3663 3664 case 288: 3665#line 1075 "./config/rx-parse.y" /* yacc.c:1661 */ 3666 { (yyval.regno) = 1; } 3667#line 3668 "rx-parse.c" /* yacc.c:1661 */ 3668 break; 3669 3670 case 289: 3671#line 1076 "./config/rx-parse.y" /* yacc.c:1661 */ 3672 { (yyval.regno) = 0; } 3673#line 3674 "rx-parse.c" /* yacc.c:1661 */ 3674 break; 3675 3676 case 290: 3677#line 1077 "./config/rx-parse.y" /* yacc.c:1661 */ 3678 { (yyval.regno) = 1; } 3679#line 3680 "rx-parse.c" /* yacc.c:1661 */ 3680 break; 3681 3682 case 291: 3683#line 1080 "./config/rx-parse.y" /* yacc.c:1661 */ 3684 {} 3685#line 3686 "rx-parse.c" /* yacc.c:1661 */ 3686 break; 3687 3688 case 292: 3689#line 1081 "./config/rx-parse.y" /* yacc.c:1661 */ 3690 {} 3691#line 3692 "rx-parse.c" /* yacc.c:1661 */ 3692 break; 3693 3694 case 293: 3695#line 1084 "./config/rx-parse.y" /* yacc.c:1661 */ 3696 {} 3697#line 3698 "rx-parse.c" /* yacc.c:1661 */ 3698 break; 3699 3700 case 294: 3701#line 1085 "./config/rx-parse.y" /* yacc.c:1661 */ 3702 {} 3703#line 3704 "rx-parse.c" /* yacc.c:1661 */ 3704 break; 3705 3706 3707#line 3708 "rx-parse.c" /* yacc.c:1661 */ 3708 default: break; 3709 } 3710 /* User semantic actions sometimes alter yychar, and that requires 3711 that yytoken be updated with the new translation. We take the 3712 approach of translating immediately before every use of yytoken. 3713 One alternative is translating here after every semantic action, 3714 but that translation would be missed if the semantic action invokes 3715 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 3716 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 3717 incorrect destructor might then be invoked immediately. In the 3718 case of YYERROR or YYBACKUP, subsequent parser actions might lead 3719 to an incorrect destructor call or verbose syntax error message 3720 before the lookahead is translated. */ 3721 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 3722 3723 YYPOPSTACK (yylen); 3724 yylen = 0; 3725 YY_STACK_PRINT (yyss, yyssp); 3726 3727 *++yyvsp = yyval; 3728 3729 /* Now 'shift' the result of the reduction. Determine what state 3730 that goes to, based on the state we popped back to and the rule 3731 number reduced by. */ 3732 3733 yyn = yyr1[yyn]; 3734 3735 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 3736 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 3737 yystate = yytable[yystate]; 3738 else 3739 yystate = yydefgoto[yyn - YYNTOKENS]; 3740 3741 goto yynewstate; 3742 3743 3744/*--------------------------------------. 3745| yyerrlab -- here on detecting error. | 3746`--------------------------------------*/ 3747yyerrlab: 3748 /* Make sure we have latest lookahead translation. See comments at 3749 user semantic actions for why this is necessary. */ 3750 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 3751 3752 /* If not already recovering from an error, report this error. */ 3753 if (!yyerrstatus) 3754 { 3755 ++yynerrs; 3756#if ! YYERROR_VERBOSE 3757 yyerror (YY_("syntax error")); 3758#else 3759# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 3760 yyssp, yytoken) 3761 { 3762 char const *yymsgp = YY_("syntax error"); 3763 int yysyntax_error_status; 3764 yysyntax_error_status = YYSYNTAX_ERROR; 3765 if (yysyntax_error_status == 0) 3766 yymsgp = yymsg; 3767 else if (yysyntax_error_status == 1) 3768 { 3769 if (yymsg != yymsgbuf) 3770 YYSTACK_FREE (yymsg); 3771 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 3772 if (!yymsg) 3773 { 3774 yymsg = yymsgbuf; 3775 yymsg_alloc = sizeof yymsgbuf; 3776 yysyntax_error_status = 2; 3777 } 3778 else 3779 { 3780 yysyntax_error_status = YYSYNTAX_ERROR; 3781 yymsgp = yymsg; 3782 } 3783 } 3784 yyerror (yymsgp); 3785 if (yysyntax_error_status == 2) 3786 goto yyexhaustedlab; 3787 } 3788# undef YYSYNTAX_ERROR 3789#endif 3790 } 3791 3792 3793 3794 if (yyerrstatus == 3) 3795 { 3796 /* If just tried and failed to reuse lookahead token after an 3797 error, discard it. */ 3798 3799 if (yychar <= YYEOF) 3800 { 3801 /* Return failure if at end of input. */ 3802 if (yychar == YYEOF) 3803 YYABORT; 3804 } 3805 else 3806 { 3807 yydestruct ("Error: discarding", 3808 yytoken, &yylval); 3809 yychar = YYEMPTY; 3810 } 3811 } 3812 3813 /* Else will try to reuse lookahead token after shifting the error 3814 token. */ 3815 goto yyerrlab1; 3816 3817 3818/*---------------------------------------------------. 3819| yyerrorlab -- error raised explicitly by YYERROR. | 3820`---------------------------------------------------*/ 3821yyerrorlab: 3822 3823 /* Pacify compilers like GCC when the user code never invokes 3824 YYERROR and the label yyerrorlab therefore never appears in user 3825 code. */ 3826 if (/*CONSTCOND*/ 0) 3827 goto yyerrorlab; 3828 3829 /* Do not reclaim the symbols of the rule whose action triggered 3830 this YYERROR. */ 3831 YYPOPSTACK (yylen); 3832 yylen = 0; 3833 YY_STACK_PRINT (yyss, yyssp); 3834 yystate = *yyssp; 3835 goto yyerrlab1; 3836 3837 3838/*-------------------------------------------------------------. 3839| yyerrlab1 -- common code for both syntax error and YYERROR. | 3840`-------------------------------------------------------------*/ 3841yyerrlab1: 3842 yyerrstatus = 3; /* Each real token shifted decrements this. */ 3843 3844 for (;;) 3845 { 3846 yyn = yypact[yystate]; 3847 if (!yypact_value_is_default (yyn)) 3848 { 3849 yyn += YYTERROR; 3850 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 3851 { 3852 yyn = yytable[yyn]; 3853 if (0 < yyn) 3854 break; 3855 } 3856 } 3857 3858 /* Pop the current state because it cannot handle the error token. */ 3859 if (yyssp == yyss) 3860 YYABORT; 3861 3862 3863 yydestruct ("Error: popping", 3864 yystos[yystate], yyvsp); 3865 YYPOPSTACK (1); 3866 yystate = *yyssp; 3867 YY_STACK_PRINT (yyss, yyssp); 3868 } 3869 3870 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 3871 *++yyvsp = yylval; 3872 YY_IGNORE_MAYBE_UNINITIALIZED_END 3873 3874 3875 /* Shift the error token. */ 3876 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 3877 3878 yystate = yyn; 3879 goto yynewstate; 3880 3881 3882/*-------------------------------------. 3883| yyacceptlab -- YYACCEPT comes here. | 3884`-------------------------------------*/ 3885yyacceptlab: 3886 yyresult = 0; 3887 goto yyreturn; 3888 3889/*-----------------------------------. 3890| yyabortlab -- YYABORT comes here. | 3891`-----------------------------------*/ 3892yyabortlab: 3893 yyresult = 1; 3894 goto yyreturn; 3895 3896#if !defined yyoverflow || YYERROR_VERBOSE 3897/*-------------------------------------------------. 3898| yyexhaustedlab -- memory exhaustion comes here. | 3899`-------------------------------------------------*/ 3900yyexhaustedlab: 3901 yyerror (YY_("memory exhausted")); 3902 yyresult = 2; 3903 /* Fall through. */ 3904#endif 3905 3906yyreturn: 3907 if (yychar != YYEMPTY) 3908 { 3909 /* Make sure we have latest lookahead translation. See comments at 3910 user semantic actions for why this is necessary. */ 3911 yytoken = YYTRANSLATE (yychar); 3912 yydestruct ("Cleanup: discarding lookahead", 3913 yytoken, &yylval); 3914 } 3915 /* Do not reclaim the symbols of the rule whose action triggered 3916 this YYABORT or YYACCEPT. */ 3917 YYPOPSTACK (yylen); 3918 YY_STACK_PRINT (yyss, yyssp); 3919 while (yyssp != yyss) 3920 { 3921 yydestruct ("Cleanup: popping", 3922 yystos[*yyssp], yyvsp); 3923 YYPOPSTACK (1); 3924 } 3925#ifndef yyoverflow 3926 if (yyss != yyssa) 3927 YYSTACK_FREE (yyss); 3928#endif 3929#if YYERROR_VERBOSE 3930 if (yymsg != yymsgbuf) 3931 YYSTACK_FREE (yymsg); 3932#endif 3933 return yyresult; 3934} 3935#line 1088 "./config/rx-parse.y" /* yacc.c:1906 */ 3936 3937/* ====================================================================== */ 3938 3939static struct 3940{ 3941 const char * string; 3942 int token; 3943 int val; 3944} 3945token_table[] = 3946{ 3947 { "r0", REG, 0 }, 3948 { "r1", REG, 1 }, 3949 { "r2", REG, 2 }, 3950 { "r3", REG, 3 }, 3951 { "r4", REG, 4 }, 3952 { "r5", REG, 5 }, 3953 { "r6", REG, 6 }, 3954 { "r7", REG, 7 }, 3955 { "r8", REG, 8 }, 3956 { "r9", REG, 9 }, 3957 { "r10", REG, 10 }, 3958 { "r11", REG, 11 }, 3959 { "r12", REG, 12 }, 3960 { "r13", REG, 13 }, 3961 { "r14", REG, 14 }, 3962 { "r15", REG, 15 }, 3963 3964 { "psw", CREG, 0 }, 3965 { "pc", CREG, 1 }, 3966 { "usp", CREG, 2 }, 3967 { "fpsw", CREG, 3 }, 3968 /* reserved */ 3969 /* reserved */ 3970 /* reserved */ 3971 { "wr", CREG, 7 }, 3972 3973 { "bpsw", CREG, 8 }, 3974 { "bpc", CREG, 9 }, 3975 { "isp", CREG, 10 }, 3976 { "fintv", CREG, 11 }, 3977 { "intb", CREG, 12 }, 3978 { "extb", CREG, 13 }, 3979 3980 { "pbp", CREG, 16 }, 3981 { "pben", CREG, 17 }, 3982 3983 { "bbpsw", CREG, 24 }, 3984 { "bbpc", CREG, 25 }, 3985 3986 { ".s", DOT_S, 0 }, 3987 { ".b", DOT_B, 0 }, 3988 { ".w", DOT_W, 0 }, 3989 { ".l", DOT_L, 0 }, 3990 { ".a", DOT_A , 0}, 3991 { ".ub", DOT_UB, 0 }, 3992 { ".uw", DOT_UW , 0}, 3993 3994 { "c", FLAG, 0 }, 3995 { "z", FLAG, 1 }, 3996 { "s", FLAG, 2 }, 3997 { "o", FLAG, 3 }, 3998 { "i", FLAG, 8 }, 3999 { "u", FLAG, 9 }, 4000 4001 { "a0", ACC, 0 }, 4002 { "a1", ACC, 1 }, 4003 4004#define OPC(x) { #x, x, IS_OPCODE } 4005 OPC(ABS), 4006 OPC(ADC), 4007 OPC(ADD), 4008 { "and", AND_, IS_OPCODE }, 4009 OPC(BCLR), 4010 OPC(BCND), 4011 OPC(BMCND), 4012 OPC(BNOT), 4013 OPC(BRA), 4014 OPC(BRK), 4015 OPC(BSET), 4016 OPC(BSR), 4017 OPC(BTST), 4018 OPC(CLRPSW), 4019 OPC(CMP), 4020 OPC(DBT), 4021 OPC(DIV), 4022 OPC(DIVU), 4023 OPC(EDIV), 4024 OPC(EDIVU), 4025 OPC(EMACA), 4026 OPC(EMSBA), 4027 OPC(EMUL), 4028 OPC(EMULA), 4029 OPC(EMULU), 4030 OPC(FADD), 4031 OPC(FCMP), 4032 OPC(FDIV), 4033 OPC(FMUL), 4034 OPC(FREIT), 4035 OPC(FSQRT), 4036 OPC(FTOU), 4037 OPC(FSUB), 4038 OPC(FTOI), 4039 OPC(INT), 4040 OPC(ITOF), 4041 OPC(JMP), 4042 OPC(JSR), 4043 OPC(MVFACGU), 4044 OPC(MVFACHI), 4045 OPC(MVFACMI), 4046 OPC(MVFACLO), 4047 OPC(MVFC), 4048 OPC(MVTACGU), 4049 OPC(MVTACHI), 4050 OPC(MVTACLO), 4051 OPC(MVTC), 4052 OPC(MVTIPL), 4053 OPC(MACHI), 4054 OPC(MACLO), 4055 OPC(MACLH), 4056 OPC(MAX), 4057 OPC(MIN), 4058 OPC(MOV), 4059 OPC(MOVCO), 4060 OPC(MOVLI), 4061 OPC(MOVU), 4062 OPC(MSBHI), 4063 OPC(MSBLH), 4064 OPC(MSBLO), 4065 OPC(MUL), 4066 OPC(MULHI), 4067 OPC(MULLH), 4068 OPC(MULLO), 4069 OPC(MULU), 4070 OPC(NEG), 4071 OPC(NOP), 4072 OPC(NOT), 4073 OPC(OR), 4074 OPC(POP), 4075 OPC(POPC), 4076 OPC(POPM), 4077 OPC(PUSH), 4078 OPC(PUSHA), 4079 OPC(PUSHC), 4080 OPC(PUSHM), 4081 OPC(RACL), 4082 OPC(RACW), 4083 OPC(RDACL), 4084 OPC(RDACW), 4085 OPC(REIT), 4086 OPC(REVL), 4087 OPC(REVW), 4088 OPC(RMPA), 4089 OPC(ROLC), 4090 OPC(RORC), 4091 OPC(ROTL), 4092 OPC(ROTR), 4093 OPC(ROUND), 4094 OPC(RTE), 4095 OPC(RTFI), 4096 OPC(RTS), 4097 OPC(RTSD), 4098 OPC(SAT), 4099 OPC(SATR), 4100 OPC(SBB), 4101 OPC(SCCND), 4102 OPC(SCMPU), 4103 OPC(SETPSW), 4104 OPC(SHAR), 4105 OPC(SHLL), 4106 OPC(SHLR), 4107 OPC(SMOVB), 4108 OPC(SMOVF), 4109 OPC(SMOVU), 4110 OPC(SSTR), 4111 OPC(STNZ), 4112 OPC(STOP), 4113 OPC(STZ), 4114 OPC(SUB), 4115 OPC(SUNTIL), 4116 OPC(SWHILE), 4117 OPC(TST), 4118 OPC(UTOF), 4119 OPC(WAIT), 4120 OPC(XCHG), 4121 OPC(XOR), 4122}; 4123 4124#define NUM_TOKENS (sizeof (token_table) / sizeof (token_table[0])) 4125 4126static struct 4127{ 4128 const char * string; 4129 int token; 4130} 4131condition_opcode_table[] = 4132{ 4133 { "b", BCND }, 4134 { "bm", BMCND }, 4135 { "sc", SCCND }, 4136}; 4137 4138#define NUM_CONDITION_OPCODES (sizeof (condition_opcode_table) / sizeof (condition_opcode_table[0])) 4139 4140static struct 4141{ 4142 const char * string; 4143 int val; 4144} 4145condition_table[] = 4146{ 4147 { "z", 0 }, 4148 { "eq", 0 }, 4149 { "geu", 2 }, 4150 { "c", 2 }, 4151 { "gtu", 4 }, 4152 { "pz", 6 }, 4153 { "ge", 8 }, 4154 { "gt", 10 }, 4155 { "o", 12}, 4156 /* always = 14 */ 4157 { "nz", 1 }, 4158 { "ne", 1 }, 4159 { "ltu", 3 }, 4160 { "nc", 3 }, 4161 { "leu", 5 }, 4162 { "n", 7 }, 4163 { "lt", 9 }, 4164 { "le", 11 }, 4165 { "no", 13 } 4166 /* never = 15 */ 4167}; 4168 4169#define NUM_CONDITIONS (sizeof (condition_table) / sizeof (condition_table[0])) 4170 4171void 4172rx_lex_init (char * beginning, char * ending) 4173{ 4174 rx_init_start = beginning; 4175 rx_lex_start = beginning; 4176 rx_lex_end = ending; 4177 rx_in_brackets = 0; 4178 rx_last_token = 0; 4179 4180 setbuf (stdout, 0); 4181} 4182 4183static int 4184check_condition (const char * base) 4185{ 4186 char * cp; 4187 unsigned int i; 4188 4189 if ((unsigned) (rx_lex_end - rx_lex_start) < strlen (base) + 1) 4190 return 0; 4191 if (memcmp (rx_lex_start, base, strlen (base))) 4192 return 0; 4193 cp = rx_lex_start + strlen (base); 4194 for (i = 0; i < NUM_CONDITIONS; i ++) 4195 { 4196 if (strcasecmp (cp, condition_table[i].string) == 0) 4197 { 4198 rx_lval.regno = condition_table[i].val; 4199 return 1; 4200 } 4201 } 4202 return 0; 4203} 4204 4205static int 4206rx_lex (void) 4207{ 4208 unsigned int ci; 4209 char * save_input_pointer; 4210 4211 while (ISSPACE (*rx_lex_start) 4212 && rx_lex_start != rx_lex_end) 4213 rx_lex_start ++; 4214 4215 rx_last_exp_start = rx_lex_start; 4216 4217 if (rx_lex_start == rx_lex_end) 4218 return 0; 4219 4220 if (ISALPHA (*rx_lex_start) 4221 || (rx_pid_register != -1 && memcmp (rx_lex_start, "%pidreg", 7) == 0) 4222 || (rx_gp_register != -1 && memcmp (rx_lex_start, "%gpreg", 6) == 0) 4223 || (*rx_lex_start == '.' && ISALPHA (rx_lex_start[1]))) 4224 { 4225 unsigned int i; 4226 char * e; 4227 char save; 4228 4229 for (e = rx_lex_start + 1; 4230 e < rx_lex_end && ISALNUM (*e); 4231 e ++) 4232 ; 4233 save = *e; 4234 *e = 0; 4235 4236 if (strcmp (rx_lex_start, "%pidreg") == 0) 4237 { 4238 { 4239 rx_lval.regno = rx_pid_register; 4240 *e = save; 4241 rx_lex_start = e; 4242 rx_last_token = REG; 4243 return REG; 4244 } 4245 } 4246 4247 if (strcmp (rx_lex_start, "%gpreg") == 0) 4248 { 4249 { 4250 rx_lval.regno = rx_gp_register; 4251 *e = save; 4252 rx_lex_start = e; 4253 rx_last_token = REG; 4254 return REG; 4255 } 4256 } 4257 4258 if (rx_last_token == 0) 4259 for (ci = 0; ci < NUM_CONDITION_OPCODES; ci ++) 4260 if (check_condition (condition_opcode_table[ci].string)) 4261 { 4262 *e = save; 4263 rx_lex_start = e; 4264 rx_last_token = condition_opcode_table[ci].token; 4265 return condition_opcode_table[ci].token; 4266 } 4267 4268 for (i = 0; i < NUM_TOKENS; i++) 4269 if (strcasecmp (rx_lex_start, token_table[i].string) == 0 4270 && !(token_table[i].val == IS_OPCODE && rx_last_token != 0) 4271 && !(token_table[i].token == FLAG && !need_flag)) 4272 { 4273 rx_lval.regno = token_table[i].val; 4274 *e = save; 4275 rx_lex_start = e; 4276 rx_last_token = token_table[i].token; 4277 return token_table[i].token; 4278 } 4279 *e = save; 4280 } 4281 4282 if (rx_last_token == 0) 4283 { 4284 rx_last_token = UNKNOWN_OPCODE; 4285 return UNKNOWN_OPCODE; 4286 } 4287 4288 if (rx_last_token == UNKNOWN_OPCODE) 4289 return 0; 4290 4291 if (*rx_lex_start == '[') 4292 rx_in_brackets = 1; 4293 if (*rx_lex_start == ']') 4294 rx_in_brackets = 0; 4295 4296 if (rx_in_brackets 4297 || rx_last_token == REG 4298 || strchr ("[],#", *rx_lex_start)) 4299 { 4300 rx_last_token = *rx_lex_start; 4301 return *rx_lex_start ++; 4302 } 4303 4304 save_input_pointer = input_line_pointer; 4305 input_line_pointer = rx_lex_start; 4306 rx_lval.exp.X_md = 0; 4307 expression (&rx_lval.exp); 4308 4309 /* We parse but ignore any :<size> modifier on expressions. */ 4310 if (*input_line_pointer == ':') 4311 { 4312 char *cp; 4313 4314 for (cp = input_line_pointer + 1; *cp && cp < rx_lex_end; cp++) 4315 if (!ISDIGIT (*cp)) 4316 break; 4317 if (cp > input_line_pointer+1) 4318 input_line_pointer = cp; 4319 } 4320 4321 rx_lex_start = input_line_pointer; 4322 input_line_pointer = save_input_pointer; 4323 rx_last_token = EXPR; 4324 return EXPR; 4325} 4326 4327int 4328rx_error (const char * str) 4329{ 4330 int len; 4331 4332 len = rx_last_exp_start - rx_init_start; 4333 4334 as_bad ("%s", rx_init_start); 4335 as_bad ("%*s^ %s", len, "", str); 4336 return 0; 4337} 4338 4339static int 4340rx_intop (expressionS exp, int nbits, int opbits) 4341{ 4342 long v; 4343 long mask, msb; 4344 4345 if (exp.X_op == O_big) 4346 { 4347 if (nbits == 32) 4348 return 1; 4349 if (exp.X_add_number == -1) 4350 return 0; 4351 } 4352 else if (exp.X_op != O_constant) 4353 return 0; 4354 v = exp.X_add_number; 4355 4356 msb = 1UL << (opbits - 1); 4357 mask = (1UL << opbits) - 1; 4358 4359 if ((v & msb) && ! (v & ~mask)) 4360 v -= 1UL << opbits; 4361 4362 switch (nbits) 4363 { 4364 case 4: 4365 return -0x8 <= v && v <= 0x7; 4366 case 5: 4367 return -0x10 <= v && v <= 0x17; 4368 case 8: 4369 return -0x80 <= v && v <= 0x7f; 4370 case 16: 4371 return -0x8000 <= v && v <= 0x7fff; 4372 case 24: 4373 return -0x800000 <= v && v <= 0x7fffff; 4374 case 32: 4375 return 1; 4376 default: 4377 printf ("rx_intop passed %d\n", nbits); 4378 abort (); 4379 } 4380 return 1; 4381} 4382 4383static int 4384rx_uintop (expressionS exp, int nbits) 4385{ 4386 unsigned long v; 4387 4388 if (exp.X_op != O_constant) 4389 return 0; 4390 v = exp.X_add_number; 4391 4392 switch (nbits) 4393 { 4394 case 4: 4395 return v <= 0xf; 4396 case 8: 4397 return v <= 0xff; 4398 case 16: 4399 return v <= 0xffff; 4400 case 24: 4401 return v <= 0xffffff; 4402 default: 4403 printf ("rx_uintop passed %d\n", nbits); 4404 abort (); 4405 } 4406 return 1; 4407} 4408 4409static int 4410rx_disp3op (expressionS exp) 4411{ 4412 unsigned long v; 4413 4414 if (exp.X_op != O_constant) 4415 return 0; 4416 v = exp.X_add_number; 4417 if (v < 3 || v > 10) 4418 return 0; 4419 return 1; 4420} 4421 4422static int 4423rx_disp5op (expressionS * exp, int msize) 4424{ 4425 long v; 4426 4427 if (exp->X_op != O_constant) 4428 return 0; 4429 v = exp->X_add_number; 4430 4431 switch (msize) 4432 { 4433 case BSIZE: 4434 if (0 <= v && v <= 31) 4435 return 1; 4436 break; 4437 case WSIZE: 4438 if (v & 1) 4439 return 0; 4440 if (0 <= v && v <= 63) 4441 { 4442 exp->X_add_number >>= 1; 4443 return 1; 4444 } 4445 break; 4446 case LSIZE: 4447 if (v & 3) 4448 return 0; 4449 if (0 <= v && v <= 127) 4450 { 4451 exp->X_add_number >>= 2; 4452 return 1; 4453 } 4454 break; 4455 } 4456 return 0; 4457} 4458 4459/* Just like the above, but allows a zero displacement. */ 4460 4461static int 4462rx_disp5op0 (expressionS * exp, int msize) 4463{ 4464 if (exp->X_op != O_constant) 4465 return 0; 4466 if (exp->X_add_number == 0) 4467 return 1; 4468 return rx_disp5op (exp, msize); 4469} 4470 4471static int 4472exp_val (expressionS exp) 4473{ 4474 if (exp.X_op != O_constant) 4475 { 4476 rx_error (_("constant expected")); 4477 return 0; 4478 } 4479 return exp.X_add_number; 4480} 4481 4482static expressionS 4483zero_expr (void) 4484{ 4485 /* Static, so program load sets it to all zeros, which is what we want. */ 4486 static expressionS zero; 4487 zero.X_op = O_constant; 4488 return zero; 4489} 4490 4491static int 4492immediate (expressionS exp, int type, int pos, int bits) 4493{ 4494 /* We will emit constants ourself here, so negate them. */ 4495 if (type == RXREL_NEGATIVE && exp.X_op == O_constant) 4496 exp.X_add_number = - exp.X_add_number; 4497 if (type == RXREL_NEGATIVE_BORROW) 4498 { 4499 if (exp.X_op == O_constant) 4500 exp.X_add_number = - exp.X_add_number - 1; 4501 else 4502 rx_error (_("sbb cannot use symbolic immediates")); 4503 } 4504 4505 if (rx_intop (exp, 8, bits)) 4506 { 4507 rx_op (exp, 1, type); 4508 return 1; 4509 } 4510 else if (rx_intop (exp, 16, bits)) 4511 { 4512 rx_op (exp, 2, type); 4513 return 2; 4514 } 4515 else if (rx_uintop (exp, 16) && bits == 16) 4516 { 4517 rx_op (exp, 2, type); 4518 return 2; 4519 } 4520 else if (rx_intop (exp, 24, bits)) 4521 { 4522 rx_op (exp, 3, type); 4523 return 3; 4524 } 4525 else if (rx_intop (exp, 32, bits)) 4526 { 4527 rx_op (exp, 4, type); 4528 return 0; 4529 } 4530 else if (type == RXREL_SIGNED) 4531 { 4532 /* This is a symbolic immediate, we will relax it later. */ 4533 rx_relax (RX_RELAX_IMM, pos); 4534 rx_op (exp, linkrelax ? 4 : 1, type); 4535 return 1; 4536 } 4537 else 4538 { 4539 /* Let the linker deal with it. */ 4540 rx_op (exp, 4, type); 4541 return 0; 4542 } 4543} 4544 4545static int 4546displacement (expressionS exp, int msize) 4547{ 4548 int val; 4549 int vshift = 0; 4550 4551 if (exp.X_op == O_symbol 4552 && exp.X_md) 4553 { 4554 switch (exp.X_md) 4555 { 4556 case BFD_RELOC_GPREL16: 4557 switch (msize) 4558 { 4559 case BSIZE: 4560 exp.X_md = BFD_RELOC_RX_GPRELB; 4561 break; 4562 case WSIZE: 4563 exp.X_md = BFD_RELOC_RX_GPRELW; 4564 break; 4565 case LSIZE: 4566 exp.X_md = BFD_RELOC_RX_GPRELL; 4567 break; 4568 } 4569 O2 (exp); 4570 return 2; 4571 } 4572 } 4573 4574 if (exp.X_op == O_subtract) 4575 { 4576 exp.X_md = BFD_RELOC_RX_DIFF; 4577 O2 (exp); 4578 return 2; 4579 } 4580 4581 if (exp.X_op != O_constant) 4582 { 4583 rx_error (_("displacements must be constants")); 4584 return -1; 4585 } 4586 val = exp.X_add_number; 4587 4588 if (val == 0) 4589 return 0; 4590 4591 switch (msize) 4592 { 4593 case BSIZE: 4594 break; 4595 case WSIZE: 4596 if (val & 1) 4597 rx_error (_("word displacement not word-aligned")); 4598 vshift = 1; 4599 break; 4600 case LSIZE: 4601 if (val & 3) 4602 rx_error (_("long displacement not long-aligned")); 4603 vshift = 2; 4604 break; 4605 default: 4606 as_bad (_("displacement with unknown size (internal bug?)\n")); 4607 break; 4608 } 4609 4610 val >>= vshift; 4611 exp.X_add_number = val; 4612 4613 if (0 <= val && val <= 255 ) 4614 { 4615 O1 (exp); 4616 return 1; 4617 } 4618 4619 if (0 <= val && val <= 65535) 4620 { 4621 O2 (exp); 4622 return 2; 4623 } 4624 if (val < 0) 4625 rx_error (_("negative displacements not allowed")); 4626 else 4627 rx_error (_("displacement too large")); 4628 return -1; 4629} 4630 4631static void 4632rtsd_immediate (expressionS exp) 4633{ 4634 int val; 4635 4636 if (exp.X_op != O_constant) 4637 { 4638 rx_error (_("rtsd size must be constant")); 4639 return; 4640 } 4641 val = exp.X_add_number; 4642 if (val & 3) 4643 rx_error (_("rtsd size must be multiple of 4")); 4644 4645 if (val < 0 || val > 1020) 4646 rx_error (_("rtsd size must be 0..1020")); 4647 4648 val >>= 2; 4649 exp.X_add_number = val; 4650 O1 (exp); 4651} 4652 4653static void 4654rx_range (expressionS exp, int minv, int maxv) 4655{ 4656 int val; 4657 4658 if (exp.X_op != O_constant) 4659 return; 4660 4661 val = exp.X_add_number; 4662 if (val < minv || val > maxv) 4663 as_warn (_("Value %d out of range %d..%d"), val, minv, maxv); 4664} 4665 4666static void 4667rx_check_float_support (void) 4668{ 4669 if (rx_cpu == RX100 || rx_cpu == RX200) 4670 rx_error (_("target CPU type does not support floating point instructions")); 4671} 4672 4673static void 4674rx_check_v2 (void) 4675{ 4676 if (rx_cpu < RXV2) 4677 rx_error (_("target CPU type does not support v2 instructions")); 4678} 4679