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