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 rl78_parse
69 #define yylex rl78_lex
70 #define yyerror rl78_error
71 #define yydebug rl78_debug
72 #define yynerrs rl78_nerrs
73 #define yylval rl78_lval
74 #define yychar rl78_char
75
76 /* First part of user prologue. */
77 #line 20 "./config/rl78-parse.y"
78
79
80 #include "as.h"
81 #include "safe-ctype.h"
82 #include "rl78-defs.h"
83
84 static int rl78_lex (void);
85
86 /* Ok, here are the rules for using these macros...
87
88 B*() is used to specify the base opcode bytes. Fields to be filled
89 in later, leave zero. Call this first.
90
91 F() and FE() are used to fill in fields within the base opcode bytes. You MUST
92 call B*() before any F() or FE().
93
94 [UN]*O*(), PC*() appends operands to the end of the opcode. You
95 must call P() and B*() before any of these, so that the fixups
96 have the right byte location.
97 O = signed, UO = unsigned, NO = negated, PC = pcrel
98
99 IMM() adds an immediate and fills in the field for it.
100 NIMM() same, but negates the immediate.
101 NBIMM() same, but negates the immediate, for sbb.
102 DSP() adds a displacement, and fills in the field for it.
103
104 Note that order is significant for the O, IMM, and DSP macros, as
105 they append their data to the operand buffer in the order that you
106 call them.
107
108 Use "disp" for displacements whenever possible; this handles the
109 "0" case properly. */
110
111 #define B1(b1) rl78_base1 (b1)
112 #define B2(b1, b2) rl78_base2 (b1, b2)
113 #define B3(b1, b2, b3) rl78_base3 (b1, b2, b3)
114 #define B4(b1, b2, b3, b4) rl78_base4 (b1, b2, b3, b4)
115
116 /* POS is bits from the MSB of the first byte to the LSB of the last byte. */
117 #define F(val,pos,sz) rl78_field (val, pos, sz)
118 #define FE(exp,pos,sz) rl78_field (exp_val (exp), pos, sz);
119
120 #define O1(v) rl78_op (v, 1, RL78REL_DATA)
121 #define O2(v) rl78_op (v, 2, RL78REL_DATA)
122 #define O3(v) rl78_op (v, 3, RL78REL_DATA)
123 #define O4(v) rl78_op (v, 4, RL78REL_DATA)
124
125 #define PC1(v) rl78_op (v, 1, RL78REL_PCREL)
126 #define PC2(v) rl78_op (v, 2, RL78REL_PCREL)
127 #define PC3(v) rl78_op (v, 3, RL78REL_PCREL)
128
129 #define IMM(v,pos) F (immediate (v, RL78REL_SIGNED, pos), pos, 2); \
130 if (v.X_op != O_constant && v.X_op != O_big) rl78_linkrelax_imm (pos)
131 #define NIMM(v,pos) F (immediate (v, RL78REL_NEGATIVE, pos), pos, 2)
132 #define NBIMM(v,pos) F (immediate (v, RL78REL_NEGATIVE_BORROW, pos), pos, 2)
133 #define DSP(v,pos,msz) if (!v.X_md) rl78_relax (RL78_RELAX_DISP, pos); \
134 else rl78_linkrelax_dsp (pos); \
135 F (displacement (v, msz), pos, 2)
136
137 #define id24(a,b2,b3) B3 (0xfb+a, b2, b3)
138
139 static int expr_is_sfr (expressionS);
140 static int expr_is_saddr (expressionS);
141 static int expr_is_word_aligned (expressionS);
142 static int exp_val (expressionS exp);
143
144 static int need_flag = 0;
145 static int rl78_in_brackets = 0;
146 static int rl78_last_token = 0;
147 static char * rl78_init_start;
148 static char * rl78_last_exp_start = 0;
149 static int rl78_bit_insn = 0;
150
151 #define YYDEBUG 1
152 #define YYERROR_VERBOSE 1
153
154 #define NOT_SADDR rl78_error ("Expression not 0xFFE20 to 0xFFF1F")
155 #define SA(e) if (!expr_is_saddr (e)) NOT_SADDR;
156
157 #define SET_SA(e) e.X_md = BFD_RELOC_RL78_SADDR
158
159 #define NOT_SFR rl78_error ("Expression not 0xFFF00 to 0xFFFFF")
160 #define SFR(e) if (!expr_is_sfr (e)) NOT_SFR;
161
162 #define NOT_SFR_OR_SADDR rl78_error ("Expression not 0xFFE20 to 0xFFFFF")
163
164 #define NOT_ES if (rl78_has_prefix()) rl78_error ("ES: prefix not allowed here");
165
166 #define WA(x) if (!expr_is_word_aligned (x)) rl78_error ("Expression not word-aligned");
167
168 #define ISA_G10(s) if (!rl78_isa_g10()) rl78_error (s " is only supported on the G10")
169 #define ISA_G13(s) if (!rl78_isa_g13()) rl78_error (s " is only supported on the G13")
170 #define ISA_G14(s) if (!rl78_isa_g14()) rl78_error (s " is only supported on the G14")
171
172 static void check_expr_is_bit_index (expressionS);
173 #define Bit(e) check_expr_is_bit_index (e);
174
175 /* Returns TRUE (non-zero) if the expression is a constant in the
176 given range. */
177 static int check_expr_is_const (expressionS, int vmin, int vmax);
178
179 /* Convert a "regb" value to a "reg_xbc" value. Error if other
180 registers are passed. Needed to avoid reduce-reduce conflicts. */
181 static int
reg_xbc(int reg)182 reg_xbc (int reg)
183 {
184 switch (reg)
185 {
186 case 0: /* X */
187 return 0x10;
188 case 3: /* B */
189 return 0x20;
190 case 2: /* C */
191 return 0x30;
192 default:
193 rl78_error ("Only X, B, or C allowed here");
194 return 0;
195 }
196 }
197
198
199 #line 200 "config/rl78-parse.c"
200
201 # ifndef YY_CAST
202 # ifdef __cplusplus
203 # define YY_CAST(Type, Val) static_cast<Type> (Val)
204 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
205 # else
206 # define YY_CAST(Type, Val) ((Type) (Val))
207 # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
208 # endif
209 # endif
210 # ifndef YY_NULLPTR
211 # if defined __cplusplus
212 # if 201103L <= __cplusplus
213 # define YY_NULLPTR nullptr
214 # else
215 # define YY_NULLPTR 0
216 # endif
217 # else
218 # define YY_NULLPTR ((void*)0)
219 # endif
220 # endif
221
222 /* Use api.header.include to #include this header
223 instead of duplicating it here. */
224 #ifndef YY_RL78_CONFIG_RL_PARSE_H_INCLUDED
225 # define YY_RL78_CONFIG_RL_PARSE_H_INCLUDED
226 /* Debug traces. */
227 #ifndef YYDEBUG
228 # define YYDEBUG 0
229 #endif
230 #if YYDEBUG
231 extern int rl78_debug;
232 #endif
233
234 /* Token kinds. */
235 #ifndef YYTOKENTYPE
236 # define YYTOKENTYPE
237 enum yytokentype
238 {
239 YYEMPTY = -2,
240 YYEOF = 0, /* "end of file" */
241 YYerror = 256, /* error */
242 YYUNDEF = 257, /* "invalid token" */
243 A = 258, /* A */
244 X = 259, /* X */
245 B = 260, /* B */
246 C = 261, /* C */
247 D = 262, /* D */
248 E = 263, /* E */
249 H = 264, /* H */
250 L = 265, /* L */
251 AX = 266, /* AX */
252 BC = 267, /* BC */
253 DE = 268, /* DE */
254 HL = 269, /* HL */
255 SPL = 270, /* SPL */
256 SPH = 271, /* SPH */
257 PSW = 272, /* PSW */
258 CS = 273, /* CS */
259 ES = 274, /* ES */
260 PMC = 275, /* PMC */
261 MEM = 276, /* MEM */
262 FLAG = 277, /* FLAG */
263 SP = 278, /* SP */
264 CY = 279, /* CY */
265 RB0 = 280, /* RB0 */
266 RB1 = 281, /* RB1 */
267 RB2 = 282, /* RB2 */
268 RB3 = 283, /* RB3 */
269 EXPR = 284, /* EXPR */
270 UNKNOWN_OPCODE = 285, /* UNKNOWN_OPCODE */
271 IS_OPCODE = 286, /* IS_OPCODE */
272 DOT_S = 287, /* DOT_S */
273 DOT_B = 288, /* DOT_B */
274 DOT_W = 289, /* DOT_W */
275 DOT_L = 290, /* DOT_L */
276 DOT_A = 291, /* DOT_A */
277 DOT_UB = 292, /* DOT_UB */
278 DOT_UW = 293, /* DOT_UW */
279 ADD = 294, /* ADD */
280 ADDC = 295, /* ADDC */
281 ADDW = 296, /* ADDW */
282 AND_ = 297, /* AND_ */
283 AND1 = 298, /* AND1 */
284 BF = 299, /* BF */
285 BH = 300, /* BH */
286 BNC = 301, /* BNC */
287 BNH = 302, /* BNH */
288 BNZ = 303, /* BNZ */
289 BR = 304, /* BR */
290 BRK = 305, /* BRK */
291 BRK1 = 306, /* BRK1 */
292 BT = 307, /* BT */
293 BTCLR = 308, /* BTCLR */
294 BZ = 309, /* BZ */
295 CALL = 310, /* CALL */
296 CALLT = 311, /* CALLT */
297 CLR1 = 312, /* CLR1 */
298 CLRB = 313, /* CLRB */
299 CLRW = 314, /* CLRW */
300 CMP = 315, /* CMP */
301 CMP0 = 316, /* CMP0 */
302 CMPS = 317, /* CMPS */
303 CMPW = 318, /* CMPW */
304 DEC = 319, /* DEC */
305 DECW = 320, /* DECW */
306 DI = 321, /* DI */
307 DIVHU = 322, /* DIVHU */
308 DIVWU = 323, /* DIVWU */
309 EI = 324, /* EI */
310 HALT = 325, /* HALT */
311 INC = 326, /* INC */
312 INCW = 327, /* INCW */
313 MACH = 328, /* MACH */
314 MACHU = 329, /* MACHU */
315 MOV = 330, /* MOV */
316 MOV1 = 331, /* MOV1 */
317 MOVS = 332, /* MOVS */
318 MOVW = 333, /* MOVW */
319 MULH = 334, /* MULH */
320 MULHU = 335, /* MULHU */
321 MULU = 336, /* MULU */
322 NOP = 337, /* NOP */
323 NOT1 = 338, /* NOT1 */
324 ONEB = 339, /* ONEB */
325 ONEW = 340, /* ONEW */
326 OR = 341, /* OR */
327 OR1 = 342, /* OR1 */
328 POP = 343, /* POP */
329 PUSH = 344, /* PUSH */
330 RET = 345, /* RET */
331 RETI = 346, /* RETI */
332 RETB = 347, /* RETB */
333 ROL = 348, /* ROL */
334 ROLC = 349, /* ROLC */
335 ROLWC = 350, /* ROLWC */
336 ROR = 351, /* ROR */
337 RORC = 352, /* RORC */
338 SAR = 353, /* SAR */
339 SARW = 354, /* SARW */
340 SEL = 355, /* SEL */
341 SET1 = 356, /* SET1 */
342 SHL = 357, /* SHL */
343 SHLW = 358, /* SHLW */
344 SHR = 359, /* SHR */
345 SHRW = 360, /* SHRW */
346 SKC = 361, /* SKC */
347 SKH = 362, /* SKH */
348 SKNC = 363, /* SKNC */
349 SKNH = 364, /* SKNH */
350 SKNZ = 365, /* SKNZ */
351 SKZ = 366, /* SKZ */
352 STOP = 367, /* STOP */
353 SUB = 368, /* SUB */
354 SUBC = 369, /* SUBC */
355 SUBW = 370, /* SUBW */
356 XCH = 371, /* XCH */
357 XCHW = 372, /* XCHW */
358 XOR = 373, /* XOR */
359 XOR1 = 374 /* XOR1 */
360 };
361 typedef enum yytokentype yytoken_kind_t;
362 #endif
363 /* Token kinds. */
364 #define YYEMPTY -2
365 #define YYEOF 0
366 #define YYerror 256
367 #define YYUNDEF 257
368 #define A 258
369 #define X 259
370 #define B 260
371 #define C 261
372 #define D 262
373 #define E 263
374 #define H 264
375 #define L 265
376 #define AX 266
377 #define BC 267
378 #define DE 268
379 #define HL 269
380 #define SPL 270
381 #define SPH 271
382 #define PSW 272
383 #define CS 273
384 #define ES 274
385 #define PMC 275
386 #define MEM 276
387 #define FLAG 277
388 #define SP 278
389 #define CY 279
390 #define RB0 280
391 #define RB1 281
392 #define RB2 282
393 #define RB3 283
394 #define EXPR 284
395 #define UNKNOWN_OPCODE 285
396 #define IS_OPCODE 286
397 #define DOT_S 287
398 #define DOT_B 288
399 #define DOT_W 289
400 #define DOT_L 290
401 #define DOT_A 291
402 #define DOT_UB 292
403 #define DOT_UW 293
404 #define ADD 294
405 #define ADDC 295
406 #define ADDW 296
407 #define AND_ 297
408 #define AND1 298
409 #define BF 299
410 #define BH 300
411 #define BNC 301
412 #define BNH 302
413 #define BNZ 303
414 #define BR 304
415 #define BRK 305
416 #define BRK1 306
417 #define BT 307
418 #define BTCLR 308
419 #define BZ 309
420 #define CALL 310
421 #define CALLT 311
422 #define CLR1 312
423 #define CLRB 313
424 #define CLRW 314
425 #define CMP 315
426 #define CMP0 316
427 #define CMPS 317
428 #define CMPW 318
429 #define DEC 319
430 #define DECW 320
431 #define DI 321
432 #define DIVHU 322
433 #define DIVWU 323
434 #define EI 324
435 #define HALT 325
436 #define INC 326
437 #define INCW 327
438 #define MACH 328
439 #define MACHU 329
440 #define MOV 330
441 #define MOV1 331
442 #define MOVS 332
443 #define MOVW 333
444 #define MULH 334
445 #define MULHU 335
446 #define MULU 336
447 #define NOP 337
448 #define NOT1 338
449 #define ONEB 339
450 #define ONEW 340
451 #define OR 341
452 #define OR1 342
453 #define POP 343
454 #define PUSH 344
455 #define RET 345
456 #define RETI 346
457 #define RETB 347
458 #define ROL 348
459 #define ROLC 349
460 #define ROLWC 350
461 #define ROR 351
462 #define RORC 352
463 #define SAR 353
464 #define SARW 354
465 #define SEL 355
466 #define SET1 356
467 #define SHL 357
468 #define SHLW 358
469 #define SHR 359
470 #define SHRW 360
471 #define SKC 361
472 #define SKH 362
473 #define SKNC 363
474 #define SKNH 364
475 #define SKNZ 365
476 #define SKZ 366
477 #define STOP 367
478 #define SUB 368
479 #define SUBC 369
480 #define SUBW 370
481 #define XCH 371
482 #define XCHW 372
483 #define XOR 373
484 #define XOR1 374
485
486 /* Value type. */
487 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
488 union YYSTYPE
489 {
490 #line 144 "./config/rl78-parse.y"
491
492 int regno;
493 expressionS exp;
494
495 #line 496 "config/rl78-parse.c"
496
497 };
498 typedef union YYSTYPE YYSTYPE;
499 # define YYSTYPE_IS_TRIVIAL 1
500 # define YYSTYPE_IS_DECLARED 1
501 #endif
502
503
504 extern YYSTYPE rl78_lval;
505
506
507 int rl78_parse (void);
508
509
510 #endif /* !YY_RL78_CONFIG_RL_PARSE_H_INCLUDED */
511 /* Symbol kind. */
512 enum yysymbol_kind_t
513 {
514 YYSYMBOL_YYEMPTY = -2,
515 YYSYMBOL_YYEOF = 0, /* "end of file" */
516 YYSYMBOL_YYerror = 1, /* error */
517 YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
518 YYSYMBOL_A = 3, /* A */
519 YYSYMBOL_X = 4, /* X */
520 YYSYMBOL_B = 5, /* B */
521 YYSYMBOL_C = 6, /* C */
522 YYSYMBOL_D = 7, /* D */
523 YYSYMBOL_E = 8, /* E */
524 YYSYMBOL_H = 9, /* H */
525 YYSYMBOL_L = 10, /* L */
526 YYSYMBOL_AX = 11, /* AX */
527 YYSYMBOL_BC = 12, /* BC */
528 YYSYMBOL_DE = 13, /* DE */
529 YYSYMBOL_HL = 14, /* HL */
530 YYSYMBOL_SPL = 15, /* SPL */
531 YYSYMBOL_SPH = 16, /* SPH */
532 YYSYMBOL_PSW = 17, /* PSW */
533 YYSYMBOL_CS = 18, /* CS */
534 YYSYMBOL_ES = 19, /* ES */
535 YYSYMBOL_PMC = 20, /* PMC */
536 YYSYMBOL_MEM = 21, /* MEM */
537 YYSYMBOL_FLAG = 22, /* FLAG */
538 YYSYMBOL_SP = 23, /* SP */
539 YYSYMBOL_CY = 24, /* CY */
540 YYSYMBOL_RB0 = 25, /* RB0 */
541 YYSYMBOL_RB1 = 26, /* RB1 */
542 YYSYMBOL_RB2 = 27, /* RB2 */
543 YYSYMBOL_RB3 = 28, /* RB3 */
544 YYSYMBOL_EXPR = 29, /* EXPR */
545 YYSYMBOL_UNKNOWN_OPCODE = 30, /* UNKNOWN_OPCODE */
546 YYSYMBOL_IS_OPCODE = 31, /* IS_OPCODE */
547 YYSYMBOL_DOT_S = 32, /* DOT_S */
548 YYSYMBOL_DOT_B = 33, /* DOT_B */
549 YYSYMBOL_DOT_W = 34, /* DOT_W */
550 YYSYMBOL_DOT_L = 35, /* DOT_L */
551 YYSYMBOL_DOT_A = 36, /* DOT_A */
552 YYSYMBOL_DOT_UB = 37, /* DOT_UB */
553 YYSYMBOL_DOT_UW = 38, /* DOT_UW */
554 YYSYMBOL_ADD = 39, /* ADD */
555 YYSYMBOL_ADDC = 40, /* ADDC */
556 YYSYMBOL_ADDW = 41, /* ADDW */
557 YYSYMBOL_AND_ = 42, /* AND_ */
558 YYSYMBOL_AND1 = 43, /* AND1 */
559 YYSYMBOL_BF = 44, /* BF */
560 YYSYMBOL_BH = 45, /* BH */
561 YYSYMBOL_BNC = 46, /* BNC */
562 YYSYMBOL_BNH = 47, /* BNH */
563 YYSYMBOL_BNZ = 48, /* BNZ */
564 YYSYMBOL_BR = 49, /* BR */
565 YYSYMBOL_BRK = 50, /* BRK */
566 YYSYMBOL_BRK1 = 51, /* BRK1 */
567 YYSYMBOL_BT = 52, /* BT */
568 YYSYMBOL_BTCLR = 53, /* BTCLR */
569 YYSYMBOL_BZ = 54, /* BZ */
570 YYSYMBOL_CALL = 55, /* CALL */
571 YYSYMBOL_CALLT = 56, /* CALLT */
572 YYSYMBOL_CLR1 = 57, /* CLR1 */
573 YYSYMBOL_CLRB = 58, /* CLRB */
574 YYSYMBOL_CLRW = 59, /* CLRW */
575 YYSYMBOL_CMP = 60, /* CMP */
576 YYSYMBOL_CMP0 = 61, /* CMP0 */
577 YYSYMBOL_CMPS = 62, /* CMPS */
578 YYSYMBOL_CMPW = 63, /* CMPW */
579 YYSYMBOL_DEC = 64, /* DEC */
580 YYSYMBOL_DECW = 65, /* DECW */
581 YYSYMBOL_DI = 66, /* DI */
582 YYSYMBOL_DIVHU = 67, /* DIVHU */
583 YYSYMBOL_DIVWU = 68, /* DIVWU */
584 YYSYMBOL_EI = 69, /* EI */
585 YYSYMBOL_HALT = 70, /* HALT */
586 YYSYMBOL_INC = 71, /* INC */
587 YYSYMBOL_INCW = 72, /* INCW */
588 YYSYMBOL_MACH = 73, /* MACH */
589 YYSYMBOL_MACHU = 74, /* MACHU */
590 YYSYMBOL_MOV = 75, /* MOV */
591 YYSYMBOL_MOV1 = 76, /* MOV1 */
592 YYSYMBOL_MOVS = 77, /* MOVS */
593 YYSYMBOL_MOVW = 78, /* MOVW */
594 YYSYMBOL_MULH = 79, /* MULH */
595 YYSYMBOL_MULHU = 80, /* MULHU */
596 YYSYMBOL_MULU = 81, /* MULU */
597 YYSYMBOL_NOP = 82, /* NOP */
598 YYSYMBOL_NOT1 = 83, /* NOT1 */
599 YYSYMBOL_ONEB = 84, /* ONEB */
600 YYSYMBOL_ONEW = 85, /* ONEW */
601 YYSYMBOL_OR = 86, /* OR */
602 YYSYMBOL_OR1 = 87, /* OR1 */
603 YYSYMBOL_POP = 88, /* POP */
604 YYSYMBOL_PUSH = 89, /* PUSH */
605 YYSYMBOL_RET = 90, /* RET */
606 YYSYMBOL_RETI = 91, /* RETI */
607 YYSYMBOL_RETB = 92, /* RETB */
608 YYSYMBOL_ROL = 93, /* ROL */
609 YYSYMBOL_ROLC = 94, /* ROLC */
610 YYSYMBOL_ROLWC = 95, /* ROLWC */
611 YYSYMBOL_ROR = 96, /* ROR */
612 YYSYMBOL_RORC = 97, /* RORC */
613 YYSYMBOL_SAR = 98, /* SAR */
614 YYSYMBOL_SARW = 99, /* SARW */
615 YYSYMBOL_SEL = 100, /* SEL */
616 YYSYMBOL_SET1 = 101, /* SET1 */
617 YYSYMBOL_SHL = 102, /* SHL */
618 YYSYMBOL_SHLW = 103, /* SHLW */
619 YYSYMBOL_SHR = 104, /* SHR */
620 YYSYMBOL_SHRW = 105, /* SHRW */
621 YYSYMBOL_SKC = 106, /* SKC */
622 YYSYMBOL_SKH = 107, /* SKH */
623 YYSYMBOL_SKNC = 108, /* SKNC */
624 YYSYMBOL_SKNH = 109, /* SKNH */
625 YYSYMBOL_SKNZ = 110, /* SKNZ */
626 YYSYMBOL_SKZ = 111, /* SKZ */
627 YYSYMBOL_STOP = 112, /* STOP */
628 YYSYMBOL_SUB = 113, /* SUB */
629 YYSYMBOL_SUBC = 114, /* SUBC */
630 YYSYMBOL_SUBW = 115, /* SUBW */
631 YYSYMBOL_XCH = 116, /* XCH */
632 YYSYMBOL_XCHW = 117, /* XCHW */
633 YYSYMBOL_XOR = 118, /* XOR */
634 YYSYMBOL_XOR1 = 119, /* XOR1 */
635 YYSYMBOL_120_ = 120, /* ',' */
636 YYSYMBOL_121_ = 121, /* '#' */
637 YYSYMBOL_122_ = 122, /* '!' */
638 YYSYMBOL_123_ = 123, /* '[' */
639 YYSYMBOL_124_ = 124, /* ']' */
640 YYSYMBOL_125_ = 125, /* '+' */
641 YYSYMBOL_126_ = 126, /* '.' */
642 YYSYMBOL_127_ = 127, /* '$' */
643 YYSYMBOL_128_ = 128, /* ':' */
644 YYSYMBOL_YYACCEPT = 129, /* $accept */
645 YYSYMBOL_statement = 130, /* statement */
646 YYSYMBOL_131_1 = 131, /* $@1 */
647 YYSYMBOL_132_2 = 132, /* $@2 */
648 YYSYMBOL_133_3 = 133, /* $@3 */
649 YYSYMBOL_134_4 = 134, /* $@4 */
650 YYSYMBOL_135_5 = 135, /* $@5 */
651 YYSYMBOL_136_6 = 136, /* $@6 */
652 YYSYMBOL_137_7 = 137, /* $@7 */
653 YYSYMBOL_138_8 = 138, /* $@8 */
654 YYSYMBOL_139_9 = 139, /* $@9 */
655 YYSYMBOL_140_10 = 140, /* $@10 */
656 YYSYMBOL_141_11 = 141, /* $@11 */
657 YYSYMBOL_142_12 = 142, /* $@12 */
658 YYSYMBOL_143_13 = 143, /* $@13 */
659 YYSYMBOL_144_14 = 144, /* $@14 */
660 YYSYMBOL_145_15 = 145, /* $@15 */
661 YYSYMBOL_146_16 = 146, /* $@16 */
662 YYSYMBOL_147_17 = 147, /* $@17 */
663 YYSYMBOL_148_18 = 148, /* $@18 */
664 YYSYMBOL_149_19 = 149, /* $@19 */
665 YYSYMBOL_150_20 = 150, /* $@20 */
666 YYSYMBOL_151_21 = 151, /* $@21 */
667 YYSYMBOL_152_22 = 152, /* $@22 */
668 YYSYMBOL_153_23 = 153, /* $@23 */
669 YYSYMBOL_154_24 = 154, /* $@24 */
670 YYSYMBOL_155_25 = 155, /* $@25 */
671 YYSYMBOL_156_26 = 156, /* $@26 */
672 YYSYMBOL_157_27 = 157, /* $@27 */
673 YYSYMBOL_158_28 = 158, /* $@28 */
674 YYSYMBOL_159_29 = 159, /* $@29 */
675 YYSYMBOL_160_30 = 160, /* $@30 */
676 YYSYMBOL_161_31 = 161, /* $@31 */
677 YYSYMBOL_162_32 = 162, /* $@32 */
678 YYSYMBOL_163_33 = 163, /* $@33 */
679 YYSYMBOL_164_34 = 164, /* $@34 */
680 YYSYMBOL_165_35 = 165, /* $@35 */
681 YYSYMBOL_166_36 = 166, /* $@36 */
682 YYSYMBOL_167_37 = 167, /* $@37 */
683 YYSYMBOL_168_38 = 168, /* $@38 */
684 YYSYMBOL_opt_es = 169, /* opt_es */
685 YYSYMBOL_regb = 170, /* regb */
686 YYSYMBOL_regb_na = 171, /* regb_na */
687 YYSYMBOL_regw = 172, /* regw */
688 YYSYMBOL_regw_na = 173, /* regw_na */
689 YYSYMBOL_sfr = 174, /* sfr */
690 YYSYMBOL_addsub = 175, /* addsub */
691 YYSYMBOL_addsubw = 176, /* addsubw */
692 YYSYMBOL_andor1 = 177, /* andor1 */
693 YYSYMBOL_bt_bf = 178, /* bt_bf */
694 YYSYMBOL_setclr1 = 179, /* setclr1 */
695 YYSYMBOL_oneclrb = 180, /* oneclrb */
696 YYSYMBOL_oneclrw = 181, /* oneclrw */
697 YYSYMBOL_incdec = 182, /* incdec */
698 YYSYMBOL_incdecw = 183, /* incdecw */
699 YYSYMBOL_mov1 = 184 /* mov1 */
700 };
701 typedef enum yysymbol_kind_t yysymbol_kind_t;
702
703
704
705
706 #ifdef short
707 # undef short
708 #endif
709
710 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
711 <limits.h> and (if available) <stdint.h> are included
712 so that the code can choose integer types of a good width. */
713
714 #ifndef __PTRDIFF_MAX__
715 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
716 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
717 # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
718 # define YY_STDINT_H
719 # endif
720 #endif
721
722 /* Narrow types that promote to a signed type and that can represent a
723 signed or unsigned integer of at least N bits. In tables they can
724 save space and decrease cache pressure. Promoting to a signed type
725 helps avoid bugs in integer arithmetic. */
726
727 #ifdef __INT_LEAST8_MAX__
728 typedef __INT_LEAST8_TYPE__ yytype_int8;
729 #elif defined YY_STDINT_H
730 typedef int_least8_t yytype_int8;
731 #else
732 typedef signed char yytype_int8;
733 #endif
734
735 #ifdef __INT_LEAST16_MAX__
736 typedef __INT_LEAST16_TYPE__ yytype_int16;
737 #elif defined YY_STDINT_H
738 typedef int_least16_t yytype_int16;
739 #else
740 typedef short yytype_int16;
741 #endif
742
743 /* Work around bug in HP-UX 11.23, which defines these macros
744 incorrectly for preprocessor constants. This workaround can likely
745 be removed in 2023, as HPE has promised support for HP-UX 11.23
746 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
747 <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
748 #ifdef __hpux
749 # undef UINT_LEAST8_MAX
750 # undef UINT_LEAST16_MAX
751 # define UINT_LEAST8_MAX 255
752 # define UINT_LEAST16_MAX 65535
753 #endif
754
755 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
756 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
757 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
758 && UINT_LEAST8_MAX <= INT_MAX)
759 typedef uint_least8_t yytype_uint8;
760 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
761 typedef unsigned char yytype_uint8;
762 #else
763 typedef short yytype_uint8;
764 #endif
765
766 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
767 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
768 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
769 && UINT_LEAST16_MAX <= INT_MAX)
770 typedef uint_least16_t yytype_uint16;
771 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
772 typedef unsigned short yytype_uint16;
773 #else
774 typedef int yytype_uint16;
775 #endif
776
777 #ifndef YYPTRDIFF_T
778 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
779 # define YYPTRDIFF_T __PTRDIFF_TYPE__
780 # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
781 # elif defined PTRDIFF_MAX
782 # ifndef ptrdiff_t
783 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
784 # endif
785 # define YYPTRDIFF_T ptrdiff_t
786 # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
787 # else
788 # define YYPTRDIFF_T long
789 # define YYPTRDIFF_MAXIMUM LONG_MAX
790 # endif
791 #endif
792
793 #ifndef YYSIZE_T
794 # ifdef __SIZE_TYPE__
795 # define YYSIZE_T __SIZE_TYPE__
796 # elif defined size_t
797 # define YYSIZE_T size_t
798 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
799 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
800 # define YYSIZE_T size_t
801 # else
802 # define YYSIZE_T unsigned
803 # endif
804 #endif
805
806 #define YYSIZE_MAXIMUM \
807 YY_CAST (YYPTRDIFF_T, \
808 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
809 ? YYPTRDIFF_MAXIMUM \
810 : YY_CAST (YYSIZE_T, -1)))
811
812 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
813
814
815 /* Stored state numbers (used for stacks). */
816 typedef yytype_int16 yy_state_t;
817
818 /* State numbers in computations. */
819 typedef int yy_state_fast_t;
820
821 #ifndef YY_
822 # if defined YYENABLE_NLS && YYENABLE_NLS
823 # if ENABLE_NLS
824 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
825 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
826 # endif
827 # endif
828 # ifndef YY_
829 # define YY_(Msgid) Msgid
830 # endif
831 #endif
832
833
834 #ifndef YY_ATTRIBUTE_PURE
835 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
836 # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
837 # else
838 # define YY_ATTRIBUTE_PURE
839 # endif
840 #endif
841
842 #ifndef YY_ATTRIBUTE_UNUSED
843 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
844 # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
845 # else
846 # define YY_ATTRIBUTE_UNUSED
847 # endif
848 #endif
849
850 /* Suppress unused-variable warnings by "using" E. */
851 #if ! defined lint || defined __GNUC__
852 # define YY_USE(E) ((void) (E))
853 #else
854 # define YY_USE(E) /* empty */
855 #endif
856
857 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
858 #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
859 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
860 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
861 _Pragma ("GCC diagnostic push") \
862 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
863 # else
864 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
865 _Pragma ("GCC diagnostic push") \
866 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
867 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
868 # endif
869 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
870 _Pragma ("GCC diagnostic pop")
871 #else
872 # define YY_INITIAL_VALUE(Value) Value
873 #endif
874 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
875 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
876 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
877 #endif
878 #ifndef YY_INITIAL_VALUE
879 # define YY_INITIAL_VALUE(Value) /* Nothing. */
880 #endif
881
882 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
883 # define YY_IGNORE_USELESS_CAST_BEGIN \
884 _Pragma ("GCC diagnostic push") \
885 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
886 # define YY_IGNORE_USELESS_CAST_END \
887 _Pragma ("GCC diagnostic pop")
888 #endif
889 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
890 # define YY_IGNORE_USELESS_CAST_BEGIN
891 # define YY_IGNORE_USELESS_CAST_END
892 #endif
893
894
895 #define YY_ASSERT(E) ((void) (0 && (E)))
896
897 #if !defined yyoverflow
898
899 /* The parser invokes alloca or malloc; define the necessary symbols. */
900
901 # ifdef YYSTACK_USE_ALLOCA
902 # if YYSTACK_USE_ALLOCA
903 # ifdef __GNUC__
904 # define YYSTACK_ALLOC __builtin_alloca
905 # elif defined __BUILTIN_VA_ARG_INCR
906 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
907 # elif defined _AIX
908 # define YYSTACK_ALLOC __alloca
909 # elif defined _MSC_VER
910 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
911 # define alloca _alloca
912 # else
913 # define YYSTACK_ALLOC alloca
914 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
915 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
916 /* Use EXIT_SUCCESS as a witness for stdlib.h. */
917 # ifndef EXIT_SUCCESS
918 # define EXIT_SUCCESS 0
919 # endif
920 # endif
921 # endif
922 # endif
923 # endif
924
925 # ifdef YYSTACK_ALLOC
926 /* Pacify GCC's 'empty if-body' warning. */
927 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
928 # ifndef YYSTACK_ALLOC_MAXIMUM
929 /* The OS might guarantee only one guard page at the bottom of the stack,
930 and a page size can be as small as 4096 bytes. So we cannot safely
931 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
932 to allow for a few compiler-allocated temporary stack slots. */
933 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
934 # endif
935 # else
936 # define YYSTACK_ALLOC YYMALLOC
937 # define YYSTACK_FREE YYFREE
938 # ifndef YYSTACK_ALLOC_MAXIMUM
939 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
940 # endif
941 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
942 && ! ((defined YYMALLOC || defined malloc) \
943 && (defined YYFREE || defined free)))
944 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
945 # ifndef EXIT_SUCCESS
946 # define EXIT_SUCCESS 0
947 # endif
948 # endif
949 # ifndef YYMALLOC
950 # define YYMALLOC malloc
951 # if ! defined malloc && ! defined EXIT_SUCCESS
952 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
953 # endif
954 # endif
955 # ifndef YYFREE
956 # define YYFREE free
957 # if ! defined free && ! defined EXIT_SUCCESS
958 void free (void *); /* INFRINGES ON USER NAME SPACE */
959 # endif
960 # endif
961 # endif
962 #endif /* !defined yyoverflow */
963
964 #if (! defined yyoverflow \
965 && (! defined __cplusplus \
966 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
967
968 /* A type that is properly aligned for any stack member. */
969 union yyalloc
970 {
971 yy_state_t yyss_alloc;
972 YYSTYPE yyvs_alloc;
973 };
974
975 /* The size of the maximum gap between one aligned stack and the next. */
976 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
977
978 /* The size of an array large to enough to hold all stacks, each with
979 N elements. */
980 # define YYSTACK_BYTES(N) \
981 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
982 + YYSTACK_GAP_MAXIMUM)
983
984 # define YYCOPY_NEEDED 1
985
986 /* Relocate STACK from its old location to the new one. The
987 local variables YYSIZE and YYSTACKSIZE give the old and new number of
988 elements in the stack, and YYPTR gives the new location of the
989 stack. Advance YYPTR to a properly aligned location for the next
990 stack. */
991 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
992 do \
993 { \
994 YYPTRDIFF_T yynewbytes; \
995 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
996 Stack = &yyptr->Stack_alloc; \
997 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
998 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
999 } \
1000 while (0)
1001
1002 #endif
1003
1004 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1005 /* Copy COUNT objects from SRC to DST. The source and destination do
1006 not overlap. */
1007 # ifndef YYCOPY
1008 # if defined __GNUC__ && 1 < __GNUC__
1009 # define YYCOPY(Dst, Src, Count) \
1010 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1011 # else
1012 # define YYCOPY(Dst, Src, Count) \
1013 do \
1014 { \
1015 YYPTRDIFF_T yyi; \
1016 for (yyi = 0; yyi < (Count); yyi++) \
1017 (Dst)[yyi] = (Src)[yyi]; \
1018 } \
1019 while (0)
1020 # endif
1021 # endif
1022 #endif /* !YYCOPY_NEEDED */
1023
1024 /* YYFINAL -- State number of the termination state. */
1025 #define YYFINAL 180
1026 /* YYLAST -- Last index in YYTABLE. */
1027 #define YYLAST 844
1028
1029 /* YYNTOKENS -- Number of terminals. */
1030 #define YYNTOKENS 129
1031 /* YYNNTS -- Number of nonterminals. */
1032 #define YYNNTS 56
1033 /* YYNRULES -- Number of rules. */
1034 #define YYNRULES 324
1035 /* YYNSTATES -- Number of states. */
1036 #define YYNSTATES 744
1037
1038 /* YYMAXUTOK -- Last valid token kind. */
1039 #define YYMAXUTOK 374
1040
1041
1042 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1043 as returned by yylex, with out-of-bounds checking. */
1044 #define YYTRANSLATE(YYX) \
1045 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1046 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1047 : YYSYMBOL_YYUNDEF)
1048
1049 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1050 as returned by yylex. */
1051 static const yytype_uint8 yytranslate[] =
1052 {
1053 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1054 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1055 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1056 2, 2, 2, 122, 2, 121, 127, 2, 2, 2,
1057 2, 2, 2, 125, 120, 2, 126, 2, 2, 2,
1058 2, 2, 2, 2, 2, 2, 2, 2, 128, 2,
1059 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1060 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1061 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1062 2, 123, 2, 124, 2, 2, 2, 2, 2, 2,
1063 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1064 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1065 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1066 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1067 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1068 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1069 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1070 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1071 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1072 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1073 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1074 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1075 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1076 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1077 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1078 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1079 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1080 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1081 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1082 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1083 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1084 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1085 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1086 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1087 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1088 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1089 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1090 115, 116, 117, 118, 119
1091 };
1092
1093 #if YYDEBUG
1094 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1095 static const yytype_int16 yyrline[] =
1096 {
1097 0, 187, 187, 208, 211, 211, 214, 217, 220, 223,
1098 223, 226, 229, 232, 235, 238, 241, 250, 253, 256,
1099 256, 259, 262, 265, 268, 276, 276, 279, 279, 288,
1100 288, 291, 291, 296, 299, 302, 305, 308, 311, 316,
1101 319, 328, 331, 336, 339, 342, 345, 348, 353, 356,
1102 361, 364, 367, 370, 373, 394, 397, 400, 409, 412,
1103 415, 420, 422, 424, 426, 429, 429, 432, 437, 439,
1104 444, 447, 450, 453, 456, 456, 459, 464, 469, 472,
1105 472, 474, 476, 478, 480, 485, 488, 488, 491, 494,
1106 499, 502, 507, 507, 510, 510, 513, 516, 516, 524,
1107 524, 527, 527, 530, 530, 535, 543, 545, 548, 555,
1108 555, 564, 567, 570, 573, 576, 576, 585, 588, 591,
1109 594, 597, 597, 606, 606, 606, 609, 612, 619, 619,
1110 619, 626, 629, 632, 635, 638, 641, 644, 647, 650,
1111 653, 656, 659, 662, 665, 668, 671, 674, 677, 680,
1112 683, 686, 689, 692, 695, 698, 701, 704, 704, 707,
1113 707, 710, 710, 713, 713, 716, 716, 719, 719, 724,
1114 733, 736, 739, 742, 751, 754, 757, 762, 767, 770,
1115 773, 773, 782, 782, 791, 791, 800, 803, 806, 809,
1116 812, 815, 818, 821, 824, 827, 830, 833, 836, 839,
1117 842, 845, 848, 851, 854, 857, 860, 860, 863, 863,
1118 866, 866, 869, 869, 872, 872, 875, 878, 881, 884,
1119 887, 892, 897, 902, 905, 908, 911, 916, 919, 922,
1120 927, 932, 937, 942, 947, 952, 959, 964, 971, 974,
1121 977, 980, 985, 990, 995, 1000, 1005, 1012, 1017, 1024,
1122 1027, 1030, 1033, 1036, 1039, 1044, 1049, 1056, 1059, 1062,
1123 1065, 1068, 1071, 1074, 1077, 1088, 1097, 1098, 1102, 1103,
1124 1104, 1105, 1106, 1107, 1108, 1109, 1112, 1113, 1114, 1115,
1125 1116, 1117, 1118, 1121, 1122, 1123, 1124, 1127, 1128, 1129,
1126 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1144, 1145, 1146,
1127 1147, 1148, 1149, 1150, 1151, 1154, 1155, 1156, 1159, 1160,
1128 1161, 1164, 1165, 1166, 1169, 1170, 1173, 1174, 1177, 1178,
1129 1181, 1182, 1185, 1186, 1189
1130 };
1131 #endif
1132
1133 /** Accessing symbol of state STATE. */
1134 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1135
1136 #if YYDEBUG || 0
1137 /* The user-facing name of the symbol whose (internal) number is
1138 YYSYMBOL. No bounds checking. */
1139 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1140
1141 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1142 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1143 static const char *const yytname[] =
1144 {
1145 "\"end of file\"", "error", "\"invalid token\"", "A", "X", "B", "C",
1146 "D", "E", "H", "L", "AX", "BC", "DE", "HL", "SPL", "SPH", "PSW", "CS",
1147 "ES", "PMC", "MEM", "FLAG", "SP", "CY", "RB0", "RB1", "RB2", "RB3",
1148 "EXPR", "UNKNOWN_OPCODE", "IS_OPCODE", "DOT_S", "DOT_B", "DOT_W",
1149 "DOT_L", "DOT_A", "DOT_UB", "DOT_UW", "ADD", "ADDC", "ADDW", "AND_",
1150 "AND1", "BF", "BH", "BNC", "BNH", "BNZ", "BR", "BRK", "BRK1", "BT",
1151 "BTCLR", "BZ", "CALL", "CALLT", "CLR1", "CLRB", "CLRW", "CMP", "CMP0",
1152 "CMPS", "CMPW", "DEC", "DECW", "DI", "DIVHU", "DIVWU", "EI", "HALT",
1153 "INC", "INCW", "MACH", "MACHU", "MOV", "MOV1", "MOVS", "MOVW", "MULH",
1154 "MULHU", "MULU", "NOP", "NOT1", "ONEB", "ONEW", "OR", "OR1", "POP",
1155 "PUSH", "RET", "RETI", "RETB", "ROL", "ROLC", "ROLWC", "ROR", "RORC",
1156 "SAR", "SARW", "SEL", "SET1", "SHL", "SHLW", "SHR", "SHRW", "SKC", "SKH",
1157 "SKNC", "SKNH", "SKNZ", "SKZ", "STOP", "SUB", "SUBC", "SUBW", "XCH",
1158 "XCHW", "XOR", "XOR1", "','", "'#'", "'!'", "'['", "']'", "'+'", "'.'",
1159 "'$'", "':'", "$accept", "statement", "$@1", "$@2", "$@3", "$@4", "$@5",
1160 "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
1161 "$@15", "$@16", "$@17", "$@18", "$@19", "$@20", "$@21", "$@22", "$@23",
1162 "$@24", "$@25", "$@26", "$@27", "$@28", "$@29", "$@30", "$@31", "$@32",
1163 "$@33", "$@34", "$@35", "$@36", "$@37", "$@38", "opt_es", "regb",
1164 "regb_na", "regw", "regw_na", "sfr", "addsub", "addsubw", "andor1",
1165 "bt_bf", "setclr1", "oneclrb", "oneclrw", "incdec", "incdecw", "mov1", YY_NULLPTR
1166 };
1167
1168 static const char *
yysymbol_name(yysymbol_kind_t yysymbol)1169 yysymbol_name (yysymbol_kind_t yysymbol)
1170 {
1171 return yytname[yysymbol];
1172 }
1173 #endif
1174
1175 #define YYPACT_NINF (-212)
1176
1177 #define yypact_value_is_default(Yyn) \
1178 ((Yyn) == YYPACT_NINF)
1179
1180 #define YYTABLE_NINF (-1)
1181
1182 #define yytable_value_is_error(Yyn) \
1183 0
1184
1185 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1186 STATE-NUM. */
1187 static const yytype_int16 yypact[] =
1188 {
1189 226, -44, -212, -212, -212, -212, -212, -212, -212, -34,
1190 -15, 14, 20, 42, -212, -212, -212, -212, 45, 91,
1191 -80, -212, -212, -212, -212, 347, 134, -212, -212, -212,
1192 -212, -212, -212, -212, -212, -212, -212, -212, -212, 53,
1193 -212, 136, 430, -212, -212, 153, -212, 150, -212, -212,
1194 -212, -212, 413, 451, -212, -212, -212, 181, 186, 198,
1195 192, 212, 214, 225, 232, -212, 368, 210, 236, 231,
1196 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1197 242, 244, -212, -212, 261, 221, 107, 325, 162, 343,
1198 403, 222, 10, 235, 362, 328, 341, 385, 394, 402,
1199 -212, 38, 81, 411, -212, -212, -212, -212, 82, 263,
1200 -212, 428, -212, -212, -212, -212, 300, -212, 273, 351,
1201 -212, -212, -212, -212, 367, -212, -212, -212, -212, -212,
1202 -212, -212, -212, -212, -212, -212, 376, -212, -212, 457,
1203 11, 372, 383, 384, 386, -212, -212, -212, 388, 36,
1204 389, -212, -212, -212, -212, -212, -212, -212, -212, 390,
1205 391, 392, 393, 395, 396, 397, 398, -212, -212, -212,
1206 -212, 401, 404, 405, 406, 407, 408, 409, 410, 412,
1207 -212, 414, -212, 415, 416, 418, 419, 420, 379, 300,
1208 417, 421, 422, 423, -212, 424, 0, 425, -212, -212,
1209 -212, -212, -212, 431, -212, -212, -212, -212, -212, -212,
1210 -212, -212, -212, -212, 426, -212, 485, 505, -212, -212,
1211 233, -212, 432, 427, 434, 436, 435, -212, -212, -212,
1212 -212, -212, -212, 491, -212, 493, -212, -212, 494, 502,
1213 439, -212, -212, 504, 136, 80, 440, 437, -79, 184,
1214 29, 72, 521, 123, 41, 79, 512, 239, 102, 513,
1215 516, 517, 523, 526, 527, 535, 536, 537, 538, 539,
1216 540, 541, 542, 543, 429, 399, 18, 453, 545, 572,
1217 95, 455, 381, 548, 549, 565, 551, 552, 553, 554,
1218 570, 556, -212, 557, 267, -212, -212, 462, -212, 559,
1219 575, 561, 400, 562, 578, 564, -212, -212, -212, -212,
1220 -212, -212, 471, 566, 63, -212, -212, 567, 5, 6,
1221 161, 473, 268, 280, 330, -212, 569, 86, 571, 573,
1222 -212, 474, -212, 574, 65, -212, -212, 576, 55, 342,
1223 481, 480, 335, 345, 348, -212, -212, -212, 577, 486,
1224 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1225 -212, -212, -212, -212, -212, -212, 344, -212, -212, -212,
1226 -212, 580, 352, -212, 489, 487, -212, -212, 582, 354,
1227 -212, 583, 488, 490, 492, 495, 497, 498, 496, 499,
1228 -212, -212, 500, 501, -212, -212, 584, 608, 594, -212,
1229 503, 507, 506, 508, 510, 509, 511, 514, 519, 610,
1230 -212, 518, 600, 433, 520, -212, 601, -212, 607, 522,
1231 524, 525, 530, 531, 613, 532, 111, 533, 614, -212,
1232 -212, 615, -212, -212, 616, -212, 534, 618, 438, -212,
1233 -212, 625, 544, 546, 547, 626, 555, 558, 627, 560,
1234 629, 563, 630, -212, -212, 631, 632, 465, -212, -212,
1235 633, 641, 634, 568, -212, -212, 635, 651, -212, 637,
1236 638, 655, 643, 550, 579, 581, 585, 644, 587, -212,
1237 586, 590, 645, 652, 650, 653, 667, 656, 660, 589,
1238 662, 591, 363, -212, -212, 593, 356, 358, 360, 7,
1239 -212, -212, -212, 588, 598, 599, 8, 684, 596, 685,
1240 597, 602, 603, 27, 604, -212, -212, -212, 605, 382,
1241 -212, -212, 606, 364, 366, 369, -212, -212, 611, 612,
1242 617, -212, 679, 680, 609, 681, 619, 682, 620, -212,
1243 -212, 371, 373, -212, 375, -212, 665, -212, 377, -212,
1244 -212, 621, -212, 666, 668, 669, 670, -212, 671, 672,
1245 -212, 622, -212, -212, -212, 623, -212, -212, 673, -212,
1246 674, 624, 628, 636, -212, -212, 675, -212, 114, -212,
1247 676, -212, 693, -212, 28, 30, 31, -212, 694, -212,
1248 639, -212, 642, 646, 647, -212, 695, 648, -212, -212,
1249 649, 640, 654, 657, -212, -212, 696, -212, 705, -212,
1250 706, -212, 698, 699, 725, -212, -212, 659, -212, 663,
1251 -212, 664, -212, 709, -212, 139, -212, 165, -212, -212,
1252 710, -212, -212, 661, -212, -212, -212, 677, -212, -212,
1253 658, -212, 678, 683, 686, -212, -212, -212, 687, 688,
1254 689, 690, -212, 691, -212, -212, 711, -212, 712, -212,
1255 713, -212, 32, 746, 747, 33, -212, -212, 35, 692,
1256 -212, -212, -212, 697, 700, -212, 701, -212, -212, -212,
1257 740, 742, -212, 743, 702, 703, 704, 707, 708, 714,
1258 715, 716, 726, 717, -212, 727, 733, -212, -212, -212,
1259 -212, -212, -212, -212, -212, -212, -212, 729, -212, -212,
1260 -212, 732, -212, -212, 734, -212, -212, -212, -212, -212,
1261 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1262 -212, 736, -212, -212, -212, -212, -212, -212, -212, -212,
1263 -212, -212, -212, -212
1264 };
1265
1266 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1267 Performed when YYTABLE does not specify something else to do. Zero
1268 means the default is an error. */
1269 static const yytype_int16 yydefact[] =
1270 {
1271 0, 0, 2, 297, 298, 305, 302, 308, 312, 0,
1272 0, 0, 0, 0, 48, 49, 311, 313, 0, 0,
1273 0, 315, 317, 319, 301, 266, 0, 307, 321, 323,
1274 90, 97, 99, 91, 105, 320, 322, 103, 101, 266,
1275 324, 266, 266, 94, 92, 0, 221, 0, 316, 318,
1276 303, 309, 0, 0, 227, 228, 229, 0, 0, 0,
1277 0, 0, 0, 0, 0, 314, 0, 0, 0, 0,
1278 249, 250, 251, 252, 253, 254, 255, 299, 300, 306,
1279 0, 0, 304, 310, 0, 266, 0, 0, 266, 266,
1280 266, 0, 0, 266, 266, 0, 0, 0, 0, 0,
1281 43, 0, 0, 0, 283, 284, 285, 286, 0, 0,
1282 50, 0, 70, 71, 72, 73, 0, 74, 0, 0,
1283 98, 100, 104, 102, 0, 276, 278, 277, 280, 279,
1284 282, 281, 290, 291, 292, 293, 294, 295, 296, 0,
1285 0, 0, 0, 0, 0, 287, 288, 289, 0, 0,
1286 0, 95, 93, 96, 222, 224, 223, 226, 225, 0,
1287 0, 0, 0, 0, 0, 0, 0, 238, 239, 240,
1288 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1289 1, 0, 4, 0, 0, 0, 0, 0, 0, 294,
1290 0, 0, 0, 0, 55, 0, 0, 0, 61, 62,
1291 63, 64, 65, 0, 68, 69, 269, 268, 271, 270,
1292 273, 272, 275, 274, 0, 79, 0, 0, 78, 86,
1293 0, 85, 0, 0, 0, 0, 0, 33, 37, 34,
1294 38, 36, 46, 0, 44, 0, 35, 52, 0, 0,
1295 0, 267, 75, 0, 266, 266, 267, 0, 0, 0,
1296 266, 266, 0, 266, 0, 0, 0, 0, 266, 0,
1297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1298 0, 0, 0, 0, 266, 0, 266, 0, 0, 0,
1299 266, 0, 266, 0, 0, 0, 0, 0, 0, 0,
1300 0, 0, 66, 0, 0, 80, 81, 0, 87, 0,
1301 0, 0, 266, 0, 0, 0, 47, 45, 53, 51,
1302 54, 76, 0, 0, 0, 114, 126, 0, 0, 0,
1303 0, 0, 0, 0, 0, 113, 0, 0, 0, 0,
1304 127, 0, 219, 0, 0, 186, 218, 0, 0, 0,
1305 0, 0, 0, 0, 0, 187, 220, 214, 0, 0,
1306 230, 231, 232, 233, 234, 235, 236, 237, 242, 243,
1307 244, 245, 246, 247, 248, 264, 0, 256, 265, 6,
1308 9, 0, 0, 7, 0, 0, 8, 19, 0, 0,
1309 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1310 58, 57, 0, 0, 56, 67, 0, 0, 0, 88,
1311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1312 106, 121, 0, 0, 0, 118, 0, 115, 0, 0,
1313 0, 0, 0, 0, 0, 0, 0, 0, 0, 107,
1314 123, 0, 108, 128, 0, 178, 182, 0, 0, 217,
1315 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1316 0, 0, 0, 215, 179, 0, 0, 0, 10, 3,
1317 0, 0, 0, 0, 20, 17, 0, 0, 24, 0,
1318 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
1319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1320 0, 0, 0, 122, 117, 0, 0, 0, 0, 0,
1321 111, 116, 109, 0, 0, 0, 0, 0, 0, 0,
1322 0, 0, 0, 0, 0, 124, 120, 129, 0, 0,
1323 183, 188, 0, 0, 0, 0, 185, 180, 0, 0,
1324 0, 189, 0, 0, 0, 0, 0, 0, 0, 216,
1325 257, 0, 0, 11, 0, 5, 0, 21, 0, 29,
1326 27, 0, 25, 0, 0, 0, 0, 59, 0, 0,
1327 83, 0, 174, 170, 169, 0, 171, 173, 0, 175,
1328 0, 0, 0, 0, 154, 131, 0, 136, 0, 163,
1329 0, 119, 0, 110, 0, 0, 0, 156, 0, 132,
1330 0, 137, 0, 0, 0, 167, 0, 0, 125, 130,
1331 0, 0, 0, 0, 203, 190, 0, 194, 0, 208,
1332 0, 181, 0, 0, 0, 205, 191, 0, 195, 0,
1333 212, 0, 258, 0, 260, 0, 12, 0, 16, 23,
1334 0, 30, 28, 0, 26, 41, 40, 0, 39, 60,
1335 0, 89, 0, 0, 0, 146, 149, 153, 0, 0,
1336 0, 0, 164, 0, 112, 147, 0, 150, 0, 155,
1337 0, 152, 0, 0, 0, 0, 168, 159, 0, 0,
1338 198, 200, 202, 0, 0, 209, 0, 199, 201, 204,
1339 0, 0, 213, 0, 0, 0, 0, 0, 0, 0,
1340 0, 0, 0, 0, 84, 0, 0, 77, 134, 141,
1341 143, 139, 161, 145, 148, 151, 135, 0, 142, 144,
1342 140, 0, 160, 165, 0, 177, 192, 196, 206, 193,
1343 197, 210, 259, 262, 263, 261, 14, 15, 13, 22,
1344 31, 0, 172, 176, 162, 133, 138, 166, 157, 207,
1345 211, 32, 42, 158
1346 };
1347
1348 /* YYPGOTO[NTERM-NUM]. */
1349 static const yytype_int16 yypgoto[] =
1350 {
1351 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1352 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1353 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1354 -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
1355 -39, 529, -84, -48, -211, -82, -212, -212, -212, -212,
1356 -212, -212, -212, -212, -212, -212
1357 };
1358
1359 /* YYDEFGOTO[NTERM-NUM]. */
1360 static const yytype_int16 yydefgoto[] =
1361 {
1362 0, 84, 277, 458, 464, 634, 632, 631, 741, 292,
1363 242, 295, 298, 152, 151, 120, 121, 123, 122, 583,
1364 501, 493, 515, 598, 517, 599, 743, 712, 734, 652,
1365 737, 666, 611, 520, 526, 739, 675, 740, 682, 453,
1366 118, 218, 141, 110, 150, 142, 85, 86, 87, 88,
1367 89, 90, 91, 92, 93, 94
1368 };
1369
1370 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1371 positive, shift that token. If negative, reduce the rule whose
1372 number is the opposite. If YYTABLE_NINF, syntax error. */
1373 static const yytype_int16 yytable[] =
1374 {
1375 140, 184, 143, 149, 156, 158, 192, 197, 415, 417,
1376 581, 587, 226, 206, 207, 208, 209, 210, 211, 212,
1377 213, 369, 125, 126, 127, 128, 129, 130, 131, 214,
1378 595, 655, 325, 657, 659, 706, 710, 116, 713, 215,
1379 248, 319, 335, 111, 320, 221, 183, 370, 116, 191,
1380 196, 203, 336, 100, 220, 225, 124, 125, 126, 127,
1381 128, 129, 130, 131, 368, 255, 440, 232, 132, 133,
1382 134, 135, 136, 137, 138, 206, 207, 208, 209, 210,
1383 211, 212, 213, 95, 125, 126, 127, 128, 129, 130,
1384 131, 116, 411, 96, 436, 132, 133, 134, 135, 189,
1385 137, 138, 104, 105, 106, 107, 104, 105, 106, 107,
1386 234, 237, 97, 345, 116, 430, 510, 511, 185, 649,
1387 650, 116, 289, 290, 377, 346, 416, 418, 582, 588,
1388 186, 347, 216, 217, 249, 145, 146, 147, 119, 371,
1389 512, 98, 116, 651, 685, 686, 332, 99, 596, 656,
1390 326, 658, 660, 707, 711, 116, 714, 153, 256, 257,
1391 233, 315, 337, 316, 101, 188, 419, 420, 687, 102,
1392 688, 689, 103, 421, 154, 139, 441, 132, 133, 134,
1393 135, 189, 137, 138, 159, 412, 413, 437, 438, 160,
1394 367, 190, 373, 328, 690, 163, 321, 322, 323, 338,
1395 385, 313, 339, 235, 238, 312, 314, 324, 431, 161,
1396 162, 327, 329, 108, 334, 164, 378, 165, 109, 349,
1397 405, 174, 175, 348, 181, 125, 126, 127, 128, 129,
1398 130, 131, 380, 204, 205, 366, 166, 372, 1, 176,
1399 116, 379, 177, 384, 333, 178, 104, 105, 106, 107,
1400 182, 341, 342, 343, 116, 179, 2, 167, 168, 169,
1401 170, 180, 344, 404, 219, 3, 4, 5, 6, 7,
1402 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
1403 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1404 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
1405 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1406 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
1407 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1408 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
1409 78, 79, 80, 81, 82, 83, 193, 442, 443, 187,
1410 112, 113, 114, 115, 444, 299, 300, 227, 132, 133,
1411 134, 135, 189, 137, 138, 222, 116, 194, 571, 572,
1412 228, 171, 195, 172, 173, 573, 117, 132, 133, 134,
1413 135, 189, 137, 138, 382, 239, 223, 601, 602, 396,
1414 397, 224, 423, 424, 603, 243, 132, 133, 134, 135,
1415 189, 137, 138, 402, 425, 426, 198, 199, 200, 201,
1416 383, 145, 146, 147, 229, 132, 133, 134, 135, 189,
1417 137, 138, 116, 230, 104, 105, 106, 107, 241, 403,
1418 155, 231, 202, 125, 126, 127, 128, 129, 130, 131,
1419 236, 144, 145, 146, 147, 495, 496, 497, 116, 116,
1420 522, 523, 524, 148, 427, 428, 498, 240, 365, 447,
1421 448, 525, 104, 105, 106, 107, 456, 457, 157, 449,
1422 450, 244, 451, 452, 460, 461, 466, 467, 541, 542,
1423 575, 576, 577, 578, 579, 580, 247, 245, 605, 606,
1424 607, 608, 250, 609, 610, 622, 623, 624, 625, 626,
1425 627, 629, 630, 251, 246, 283, 253, 252, 254, 258,
1426 259, 260, 261, 262, 296, 263, 264, 265, 266, 297,
1427 306, 267, 307, 308, 268, 269, 270, 271, 272, 273,
1428 274, 309, 275, 311, 276, 331, 279, 278, 280, 281,
1429 282, 340, 350, 284, 285, 351, 352, 302, 286, 287,
1430 288, 291, 353, 293, 294, 354, 355, 318, 301, 304,
1431 303, 305, 317, 310, 356, 357, 358, 359, 360, 361,
1432 362, 363, 364, 374, 375, 376, 381, 386, 387, 388,
1433 389, 390, 391, 392, 393, 394, 395, 398, 399, 400,
1434 401, 406, 407, 408, 409, 410, 414, 422, 429, 434,
1435 432, 445, 433, 435, 446, 439, 454, 463, 455, 459,
1436 462, 465, 468, 479, 469, 471, 470, 473, 474, 476,
1437 475, 472, 480, 481, 491, 478, 477, 483, 482, 494,
1438 500, 488, 484, 486, 485, 487, 502, 531, 489, 490,
1439 499, 492, 508, 514, 516, 518, 503, 521, 504, 505,
1440 506, 507, 509, 513, 527, 544, 534, 519, 536, 538,
1441 539, 540, 543, 545, 547, 548, 549, 550, 528, 551,
1442 529, 530, 552, 557, 561, 532, 562, 553, 533, 563,
1443 535, 565, 564, 537, 567, 566, 569, 589, 591, 546,
1444 615, 616, 618, 620, 628, 635, 715, 636, 637, 638,
1445 639, 640, 643, 644, 648, 653, 554, 555, 584, 677,
1446 678, 559, 556, 558, 560, 568, 570, 574, 585, 586,
1447 590, 592, 654, 661, 667, 673, 593, 594, 597, 600,
1448 604, 612, 613, 617, 674, 676, 679, 614, 684, 691,
1449 703, 704, 705, 619, 621, 633, 641, 642, 645, 708,
1450 709, 719, 646, 720, 721, 730, 732, 733, 735, 662,
1451 647, 736, 663, 738, 670, 742, 664, 665, 668, 669,
1452 0, 0, 0, 0, 0, 0, 0, 0, 671, 680,
1453 330, 672, 694, 681, 683, 0, 0, 692, 0, 0,
1454 0, 0, 0, 0, 0, 0, 0, 693, 0, 0,
1455 0, 0, 0, 696, 695, 0, 0, 0, 0, 0,
1456 697, 698, 699, 700, 701, 702, 0, 0, 0, 0,
1457 0, 716, 0, 0, 717, 718, 722, 723, 724, 0,
1458 0, 725, 726, 0, 0, 0, 0, 0, 727, 728,
1459 729, 0, 0, 0, 731
1460 };
1461
1462 static const yytype_int16 yycheck[] =
1463 {
1464 39, 85, 41, 42, 52, 53, 88, 89, 3, 3,
1465 3, 3, 94, 3, 4, 5, 6, 7, 8, 9,
1466 10, 3, 4, 5, 6, 7, 8, 9, 10, 19,
1467 3, 3, 3, 3, 3, 3, 3, 19, 3, 29,
1468 29, 120, 253, 123, 123, 93, 85, 29, 19, 88,
1469 89, 90, 11, 11, 93, 94, 3, 4, 5, 6,
1470 7, 8, 9, 10, 275, 29, 11, 29, 15, 16,
1471 17, 18, 19, 20, 21, 3, 4, 5, 6, 7,
1472 8, 9, 10, 127, 4, 5, 6, 7, 8, 9,
1473 10, 19, 29, 127, 29, 15, 16, 17, 18, 19,
1474 20, 21, 11, 12, 13, 14, 11, 12, 13, 14,
1475 29, 29, 127, 11, 19, 29, 5, 6, 11, 5,
1476 6, 19, 122, 123, 29, 23, 121, 121, 121, 121,
1477 23, 29, 122, 123, 123, 12, 13, 14, 4, 121,
1478 29, 127, 19, 29, 5, 6, 23, 127, 121, 121,
1479 121, 121, 121, 121, 121, 19, 121, 4, 122, 123,
1480 122, 245, 121, 245, 122, 3, 5, 6, 29, 127,
1481 5, 6, 127, 12, 24, 122, 121, 15, 16, 17,
1482 18, 19, 20, 21, 3, 122, 123, 122, 123, 3,
1483 274, 29, 276, 121, 29, 3, 12, 13, 14, 120,
1484 282, 121, 123, 122, 122, 244, 245, 23, 122, 11,
1485 12, 250, 251, 122, 253, 3, 121, 3, 127, 258,
1486 302, 11, 12, 121, 3, 4, 5, 6, 7, 8,
1487 9, 10, 280, 11, 12, 274, 11, 276, 12, 3,
1488 19, 280, 11, 282, 121, 3, 11, 12, 13, 14,
1489 29, 12, 13, 14, 19, 11, 30, 25, 26, 27,
1490 28, 0, 23, 302, 29, 39, 40, 41, 42, 43,
1491 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
1492 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1493 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1494 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1495 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1496 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
1497 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
1498 114, 115, 116, 117, 118, 119, 3, 5, 6, 24,
1499 3, 4, 5, 6, 12, 122, 123, 29, 15, 16,
1500 17, 18, 19, 20, 21, 3, 19, 24, 5, 6,
1501 29, 3, 29, 5, 6, 12, 29, 15, 16, 17,
1502 18, 19, 20, 21, 3, 122, 24, 5, 6, 122,
1503 123, 29, 124, 125, 12, 122, 15, 16, 17, 18,
1504 19, 20, 21, 3, 124, 125, 3, 4, 5, 6,
1505 29, 12, 13, 14, 29, 15, 16, 17, 18, 19,
1506 20, 21, 19, 29, 11, 12, 13, 14, 128, 29,
1507 17, 29, 29, 4, 5, 6, 7, 8, 9, 10,
1508 29, 11, 12, 13, 14, 12, 13, 14, 19, 19,
1509 12, 13, 14, 23, 124, 125, 23, 29, 29, 124,
1510 125, 23, 11, 12, 13, 14, 122, 123, 17, 124,
1511 125, 120, 124, 125, 122, 123, 122, 123, 13, 14,
1512 124, 125, 124, 125, 124, 125, 29, 120, 124, 125,
1513 124, 125, 120, 124, 125, 124, 125, 124, 125, 124,
1514 125, 124, 125, 120, 128, 126, 120, 123, 120, 120,
1515 120, 120, 120, 120, 29, 120, 120, 120, 120, 14,
1516 29, 120, 29, 29, 120, 120, 120, 120, 120, 120,
1517 120, 29, 120, 29, 120, 14, 120, 122, 120, 120,
1518 120, 29, 29, 126, 123, 29, 29, 120, 126, 126,
1519 126, 126, 29, 122, 128, 29, 29, 120, 126, 123,
1520 126, 126, 122, 124, 29, 29, 29, 29, 29, 29,
1521 29, 29, 29, 120, 29, 3, 121, 29, 29, 14,
1522 29, 29, 29, 29, 14, 29, 29, 125, 29, 14,
1523 29, 29, 14, 29, 123, 29, 29, 124, 29, 125,
1524 29, 120, 29, 29, 124, 29, 29, 120, 122, 29,
1525 121, 29, 29, 29, 126, 123, 126, 120, 120, 120,
1526 124, 126, 14, 29, 14, 124, 126, 120, 125, 29,
1527 29, 120, 126, 123, 126, 126, 29, 11, 124, 120,
1528 120, 123, 29, 29, 29, 29, 124, 29, 124, 124,
1529 120, 120, 120, 120, 29, 14, 29, 123, 29, 29,
1530 29, 29, 29, 29, 29, 14, 29, 29, 124, 14,
1531 124, 124, 29, 29, 29, 120, 24, 127, 120, 29,
1532 120, 14, 29, 120, 24, 29, 24, 3, 3, 121,
1533 11, 11, 11, 11, 29, 29, 4, 29, 29, 29,
1534 29, 29, 29, 29, 29, 29, 127, 126, 120, 11,
1535 11, 125, 127, 126, 124, 126, 125, 124, 120, 120,
1536 124, 124, 29, 29, 29, 29, 124, 124, 124, 124,
1537 124, 120, 120, 124, 29, 29, 11, 120, 29, 29,
1538 29, 29, 29, 124, 124, 124, 124, 124, 124, 3,
1539 3, 11, 124, 11, 11, 29, 29, 24, 29, 120,
1540 124, 29, 120, 29, 124, 29, 120, 120, 120, 120,
1541 -1, -1, -1, -1, -1, -1, -1, -1, 124, 120,
1542 251, 124, 124, 120, 120, -1, -1, 126, -1, -1,
1543 -1, -1, -1, -1, -1, -1, -1, 120, -1, -1,
1544 -1, -1, -1, 120, 126, -1, -1, -1, -1, -1,
1545 124, 124, 124, 124, 124, 124, -1, -1, -1, -1,
1546 -1, 124, -1, -1, 124, 124, 124, 124, 124, -1,
1547 -1, 124, 124, -1, -1, -1, -1, -1, 124, 124,
1548 124, -1, -1, -1, 127
1549 };
1550
1551 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
1552 state STATE-NUM. */
1553 static const yytype_uint8 yystos[] =
1554 {
1555 0, 12, 30, 39, 40, 41, 42, 43, 44, 45,
1556 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
1557 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
1558 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
1559 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1560 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1561 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1562 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
1563 116, 117, 118, 119, 130, 175, 176, 177, 178, 179,
1564 180, 181, 182, 183, 184, 127, 127, 127, 127, 127,
1565 11, 122, 127, 127, 11, 12, 13, 14, 122, 127,
1566 172, 123, 3, 4, 5, 6, 19, 29, 169, 4,
1567 144, 145, 147, 146, 3, 4, 5, 6, 7, 8,
1568 9, 10, 15, 16, 17, 18, 19, 20, 21, 122,
1569 169, 171, 174, 169, 11, 12, 13, 14, 23, 169,
1570 173, 143, 142, 4, 24, 17, 172, 17, 172, 3,
1571 3, 11, 12, 3, 3, 3, 11, 25, 26, 27,
1572 28, 3, 5, 6, 11, 12, 3, 11, 3, 11,
1573 0, 3, 29, 169, 171, 11, 23, 24, 3, 19,
1574 29, 169, 174, 3, 24, 29, 169, 174, 3, 4,
1575 5, 6, 29, 169, 11, 12, 3, 4, 5, 6,
1576 7, 8, 9, 10, 19, 29, 122, 123, 170, 29,
1577 169, 172, 3, 24, 29, 169, 174, 29, 29, 29,
1578 29, 29, 29, 122, 29, 122, 29, 29, 122, 122,
1579 29, 128, 139, 122, 120, 120, 128, 29, 29, 123,
1580 120, 120, 123, 120, 120, 29, 122, 123, 120, 120,
1581 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
1582 120, 120, 120, 120, 120, 120, 120, 131, 122, 120,
1583 120, 120, 120, 126, 126, 123, 126, 126, 126, 122,
1584 123, 126, 138, 122, 128, 140, 29, 14, 141, 122,
1585 123, 126, 120, 126, 123, 126, 29, 29, 29, 29,
1586 124, 29, 169, 121, 169, 171, 174, 122, 120, 120,
1587 123, 12, 13, 14, 23, 3, 121, 169, 121, 169,
1588 170, 14, 23, 121, 169, 173, 11, 121, 120, 123,
1589 29, 12, 13, 14, 23, 11, 23, 29, 121, 169,
1590 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1591 29, 29, 29, 29, 29, 29, 169, 171, 173, 3,
1592 29, 121, 169, 171, 120, 29, 3, 29, 121, 169,
1593 172, 121, 3, 29, 169, 174, 29, 29, 14, 29,
1594 29, 29, 29, 14, 29, 29, 122, 123, 125, 29,
1595 14, 29, 3, 29, 169, 174, 29, 14, 29, 123,
1596 29, 29, 122, 123, 29, 3, 121, 3, 121, 5,
1597 6, 12, 124, 124, 125, 124, 125, 124, 125, 29,
1598 29, 122, 29, 29, 125, 29, 29, 122, 123, 29,
1599 11, 121, 5, 6, 12, 120, 124, 124, 125, 124,
1600 125, 124, 125, 168, 29, 122, 122, 123, 132, 29,
1601 122, 123, 121, 120, 133, 29, 122, 123, 29, 126,
1602 126, 123, 126, 120, 120, 124, 120, 126, 124, 29,
1603 14, 29, 125, 120, 126, 126, 123, 126, 120, 124,
1604 120, 14, 123, 150, 29, 12, 13, 14, 23, 120,
1605 29, 149, 29, 124, 124, 124, 120, 120, 29, 120,
1606 5, 6, 29, 120, 29, 151, 29, 153, 29, 123,
1607 162, 29, 12, 13, 14, 23, 163, 29, 124, 124,
1608 124, 11, 120, 120, 29, 120, 29, 120, 29, 29,
1609 29, 13, 14, 29, 14, 29, 121, 29, 14, 29,
1610 29, 14, 29, 127, 127, 126, 127, 29, 126, 125,
1611 124, 29, 24, 29, 29, 14, 29, 24, 126, 24,
1612 125, 5, 6, 12, 124, 124, 125, 124, 125, 124,
1613 125, 3, 121, 148, 120, 120, 120, 3, 121, 3,
1614 124, 3, 124, 124, 124, 3, 121, 124, 152, 154,
1615 124, 5, 6, 12, 124, 124, 125, 124, 125, 124,
1616 125, 161, 120, 120, 120, 11, 11, 124, 11, 124,
1617 11, 124, 124, 125, 124, 125, 124, 125, 29, 124,
1618 125, 136, 135, 124, 134, 29, 29, 29, 29, 29,
1619 29, 124, 124, 29, 29, 124, 124, 124, 29, 5,
1620 6, 29, 158, 29, 29, 3, 121, 3, 121, 3,
1621 121, 29, 120, 120, 120, 120, 160, 29, 120, 120,
1622 124, 124, 124, 29, 29, 165, 29, 11, 11, 11,
1623 120, 120, 167, 120, 29, 5, 6, 29, 5, 6,
1624 29, 29, 126, 120, 124, 126, 120, 124, 124, 124,
1625 124, 124, 124, 29, 29, 29, 3, 121, 3, 3,
1626 3, 121, 156, 3, 121, 4, 124, 124, 124, 11,
1627 11, 11, 124, 124, 124, 124, 124, 124, 124, 124,
1628 29, 127, 29, 24, 157, 29, 29, 159, 29, 164,
1629 166, 137, 29, 155
1630 };
1631
1632 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
1633 static const yytype_uint8 yyr1[] =
1634 {
1635 0, 129, 130, 130, 131, 130, 130, 130, 130, 132,
1636 130, 130, 130, 130, 130, 130, 130, 130, 130, 133,
1637 130, 130, 130, 130, 130, 134, 130, 135, 130, 136,
1638 130, 137, 130, 130, 130, 130, 130, 130, 130, 130,
1639 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1640 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1641 130, 130, 130, 130, 130, 138, 130, 130, 130, 130,
1642 130, 130, 130, 130, 139, 130, 130, 130, 130, 140,
1643 130, 130, 130, 130, 130, 130, 141, 130, 130, 130,
1644 130, 130, 142, 130, 143, 130, 130, 144, 130, 145,
1645 130, 146, 130, 147, 130, 130, 130, 130, 130, 148,
1646 130, 130, 130, 130, 130, 149, 130, 130, 130, 130,
1647 130, 150, 130, 151, 152, 130, 130, 130, 153, 154,
1648 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1649 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1650 130, 130, 130, 130, 130, 130, 130, 155, 130, 156,
1651 130, 157, 130, 158, 130, 159, 130, 160, 130, 130,
1652 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1653 161, 130, 162, 130, 163, 130, 130, 130, 130, 130,
1654 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1655 130, 130, 130, 130, 130, 130, 164, 130, 165, 130,
1656 166, 130, 167, 130, 168, 130, 130, 130, 130, 130,
1657 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1658 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1659 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1660 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
1661 130, 130, 130, 130, 130, 130, 169, 169, 170, 170,
1662 170, 170, 170, 170, 170, 170, 171, 171, 171, 171,
1663 171, 171, 171, 172, 172, 172, 172, 173, 173, 173,
1664 174, 174, 174, 174, 174, 174, 174, 175, 175, 175,
1665 175, 175, 175, 175, 175, 176, 176, 176, 177, 177,
1666 177, 178, 178, 178, 179, 179, 180, 180, 181, 181,
1667 182, 182, 183, 183, 184
1668 };
1669
1670 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
1671 static const yytype_int8 yyr2[] =
1672 {
1673 0, 2, 1, 5, 0, 6, 4, 4, 4, 0,
1674 5, 6, 7, 9, 9, 9, 7, 5, 4, 0,
1675 5, 6, 9, 7, 5, 0, 7, 0, 7, 0,
1676 7, 0, 10, 3, 3, 3, 3, 3, 3, 7,
1677 7, 7, 10, 2, 3, 4, 3, 4, 1, 1,
1678 2, 4, 3, 4, 4, 2, 4, 4, 4, 6,
1679 7, 2, 2, 2, 2, 0, 3, 4, 2, 2,
1680 2, 2, 2, 2, 0, 3, 4, 9, 2, 0,
1681 3, 3, 5, 6, 8, 2, 0, 3, 4, 7,
1682 1, 1, 0, 2, 0, 2, 2, 0, 2, 0,
1683 2, 0, 2, 0, 2, 1, 5, 5, 5, 0,
1684 7, 6, 8, 4, 4, 0, 6, 6, 5, 7,
1685 6, 0, 6, 0, 0, 7, 4, 4, 0, 0,
1686 7, 7, 7, 10, 9, 9, 7, 7, 10, 9,
1687 9, 9, 9, 9, 9, 9, 8, 8, 9, 8,
1688 8, 9, 8, 8, 7, 8, 7, 0, 11, 0,
1689 9, 0, 10, 0, 8, 0, 10, 0, 8, 6,
1690 6, 6, 9, 6, 6, 6, 9, 9, 5, 5,
1691 0, 7, 0, 6, 0, 6, 4, 4, 6, 6,
1692 7, 7, 9, 9, 7, 7, 9, 9, 8, 8,
1693 8, 8, 8, 7, 8, 7, 0, 10, 0, 8,
1694 0, 10, 0, 8, 0, 5, 6, 5, 4, 4,
1695 4, 1, 2, 2, 2, 2, 2, 1, 1, 1,
1696 4, 4, 4, 4, 4, 4, 4, 4, 2, 2,
1697 2, 2, 4, 4, 4, 4, 4, 4, 4, 1,
1698 1, 1, 1, 1, 1, 1, 4, 6, 7, 9,
1699 7, 9, 9, 9, 4, 4, 0, 2, 1, 1,
1700 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1701 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1702 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1703 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1704 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1705 1, 1, 1, 1, 1
1706 };
1707
1708
1709 enum { YYENOMEM = -2 };
1710
1711 #define yyerrok (yyerrstatus = 0)
1712 #define yyclearin (yychar = YYEMPTY)
1713
1714 #define YYACCEPT goto yyacceptlab
1715 #define YYABORT goto yyabortlab
1716 #define YYERROR goto yyerrorlab
1717 #define YYNOMEM goto yyexhaustedlab
1718
1719
1720 #define YYRECOVERING() (!!yyerrstatus)
1721
1722 #define YYBACKUP(Token, Value) \
1723 do \
1724 if (yychar == YYEMPTY) \
1725 { \
1726 yychar = (Token); \
1727 yylval = (Value); \
1728 YYPOPSTACK (yylen); \
1729 yystate = *yyssp; \
1730 goto yybackup; \
1731 } \
1732 else \
1733 { \
1734 yyerror (YY_("syntax error: cannot back up")); \
1735 YYERROR; \
1736 } \
1737 while (0)
1738
1739 /* Backward compatibility with an undocumented macro.
1740 Use YYerror or YYUNDEF. */
1741 #define YYERRCODE YYUNDEF
1742
1743
1744 /* Enable debugging if requested. */
1745 #if YYDEBUG
1746
1747 # ifndef YYFPRINTF
1748 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1749 # define YYFPRINTF fprintf
1750 # endif
1751
1752 # define YYDPRINTF(Args) \
1753 do { \
1754 if (yydebug) \
1755 YYFPRINTF Args; \
1756 } while (0)
1757
1758
1759
1760
1761 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
1762 do { \
1763 if (yydebug) \
1764 { \
1765 YYFPRINTF (stderr, "%s ", Title); \
1766 yy_symbol_print (stderr, \
1767 Kind, Value); \
1768 YYFPRINTF (stderr, "\n"); \
1769 } \
1770 } while (0)
1771
1772
1773 /*-----------------------------------.
1774 | Print this symbol's value on YYO. |
1775 `-----------------------------------*/
1776
1777 static void
yy_symbol_value_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep)1778 yy_symbol_value_print (FILE *yyo,
1779 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
1780 {
1781 FILE *yyoutput = yyo;
1782 YY_USE (yyoutput);
1783 if (!yyvaluep)
1784 return;
1785 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1786 YY_USE (yykind);
1787 YY_IGNORE_MAYBE_UNINITIALIZED_END
1788 }
1789
1790
1791 /*---------------------------.
1792 | Print this symbol on YYO. |
1793 `---------------------------*/
1794
1795 static void
yy_symbol_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep)1796 yy_symbol_print (FILE *yyo,
1797 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
1798 {
1799 YYFPRINTF (yyo, "%s %s (",
1800 yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
1801
1802 yy_symbol_value_print (yyo, yykind, yyvaluep);
1803 YYFPRINTF (yyo, ")");
1804 }
1805
1806 /*------------------------------------------------------------------.
1807 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1808 | TOP (included). |
1809 `------------------------------------------------------------------*/
1810
1811 static void
yy_stack_print(yy_state_t * yybottom,yy_state_t * yytop)1812 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
1813 {
1814 YYFPRINTF (stderr, "Stack now");
1815 for (; yybottom <= yytop; yybottom++)
1816 {
1817 int yybot = *yybottom;
1818 YYFPRINTF (stderr, " %d", yybot);
1819 }
1820 YYFPRINTF (stderr, "\n");
1821 }
1822
1823 # define YY_STACK_PRINT(Bottom, Top) \
1824 do { \
1825 if (yydebug) \
1826 yy_stack_print ((Bottom), (Top)); \
1827 } while (0)
1828
1829
1830 /*------------------------------------------------.
1831 | Report that the YYRULE is going to be reduced. |
1832 `------------------------------------------------*/
1833
1834 static void
yy_reduce_print(yy_state_t * yyssp,YYSTYPE * yyvsp,int yyrule)1835 yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
1836 int yyrule)
1837 {
1838 int yylno = yyrline[yyrule];
1839 int yynrhs = yyr2[yyrule];
1840 int yyi;
1841 YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
1842 yyrule - 1, yylno);
1843 /* The symbols being reduced. */
1844 for (yyi = 0; yyi < yynrhs; yyi++)
1845 {
1846 YYFPRINTF (stderr, " $%d = ", yyi + 1);
1847 yy_symbol_print (stderr,
1848 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
1849 &yyvsp[(yyi + 1) - (yynrhs)]);
1850 YYFPRINTF (stderr, "\n");
1851 }
1852 }
1853
1854 # define YY_REDUCE_PRINT(Rule) \
1855 do { \
1856 if (yydebug) \
1857 yy_reduce_print (yyssp, yyvsp, Rule); \
1858 } while (0)
1859
1860 /* Nonzero means print parse trace. It is left uninitialized so that
1861 multiple parsers can coexist. */
1862 int yydebug;
1863 #else /* !YYDEBUG */
1864 # define YYDPRINTF(Args) ((void) 0)
1865 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
1866 # define YY_STACK_PRINT(Bottom, Top)
1867 # define YY_REDUCE_PRINT(Rule)
1868 #endif /* !YYDEBUG */
1869
1870
1871 /* YYINITDEPTH -- initial size of the parser's stacks. */
1872 #ifndef YYINITDEPTH
1873 # define YYINITDEPTH 200
1874 #endif
1875
1876 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1877 if the built-in stack extension method is used).
1878
1879 Do not make this value too large; the results are undefined if
1880 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1881 evaluated with infinite-precision integer arithmetic. */
1882
1883 #ifndef YYMAXDEPTH
1884 # define YYMAXDEPTH 10000
1885 #endif
1886
1887
1888
1889
1890
1891
1892 /*-----------------------------------------------.
1893 | Release the memory associated to this symbol. |
1894 `-----------------------------------------------*/
1895
1896 static void
yydestruct(const char * yymsg,yysymbol_kind_t yykind,YYSTYPE * yyvaluep)1897 yydestruct (const char *yymsg,
1898 yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
1899 {
1900 YY_USE (yyvaluep);
1901 if (!yymsg)
1902 yymsg = "Deleting";
1903 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1904
1905 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1906 YY_USE (yykind);
1907 YY_IGNORE_MAYBE_UNINITIALIZED_END
1908 }
1909
1910
1911 /* Lookahead token kind. */
1912 int yychar;
1913
1914 /* The semantic value of the lookahead symbol. */
1915 YYSTYPE yylval;
1916 /* Number of syntax errors so far. */
1917 int yynerrs;
1918
1919
1920
1921
1922 /*----------.
1923 | yyparse. |
1924 `----------*/
1925
1926 int
yyparse(void)1927 yyparse (void)
1928 {
1929 yy_state_fast_t yystate = 0;
1930 /* Number of tokens to shift before error messages enabled. */
1931 int yyerrstatus = 0;
1932
1933 /* Refer to the stacks through separate pointers, to allow yyoverflow
1934 to reallocate them elsewhere. */
1935
1936 /* Their size. */
1937 YYPTRDIFF_T yystacksize = YYINITDEPTH;
1938
1939 /* The state stack: array, bottom, top. */
1940 yy_state_t yyssa[YYINITDEPTH];
1941 yy_state_t *yyss = yyssa;
1942 yy_state_t *yyssp = yyss;
1943
1944 /* The semantic value stack: array, bottom, top. */
1945 YYSTYPE yyvsa[YYINITDEPTH];
1946 YYSTYPE *yyvs = yyvsa;
1947 YYSTYPE *yyvsp = yyvs;
1948
1949 int yyn;
1950 /* The return value of yyparse. */
1951 int yyresult;
1952 /* Lookahead symbol kind. */
1953 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1954 /* The variables used to return semantic value and location from the
1955 action routines. */
1956 YYSTYPE yyval;
1957
1958
1959
1960 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1961
1962 /* The number of symbols on the RHS of the reduced rule.
1963 Keep to zero when no symbol should be popped. */
1964 int yylen = 0;
1965
1966 YYDPRINTF ((stderr, "Starting parse\n"));
1967
1968 yychar = YYEMPTY; /* Cause a token to be read. */
1969
1970 goto yysetstate;
1971
1972
1973 /*------------------------------------------------------------.
1974 | yynewstate -- push a new state, which is found in yystate. |
1975 `------------------------------------------------------------*/
1976 yynewstate:
1977 /* In all cases, when you get here, the value and location stacks
1978 have just been pushed. So pushing a state here evens the stacks. */
1979 yyssp++;
1980
1981
1982 /*--------------------------------------------------------------------.
1983 | yysetstate -- set current state (the top of the stack) to yystate. |
1984 `--------------------------------------------------------------------*/
1985 yysetstate:
1986 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1987 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1988 YY_IGNORE_USELESS_CAST_BEGIN
1989 *yyssp = YY_CAST (yy_state_t, yystate);
1990 YY_IGNORE_USELESS_CAST_END
1991 YY_STACK_PRINT (yyss, yyssp);
1992
1993 if (yyss + yystacksize - 1 <= yyssp)
1994 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
1995 YYNOMEM;
1996 #else
1997 {
1998 /* Get the current used size of the three stacks, in elements. */
1999 YYPTRDIFF_T yysize = yyssp - yyss + 1;
2000
2001 # if defined yyoverflow
2002 {
2003 /* Give user a chance to reallocate the stack. Use copies of
2004 these so that the &'s don't force the real ones into
2005 memory. */
2006 yy_state_t *yyss1 = yyss;
2007 YYSTYPE *yyvs1 = yyvs;
2008
2009 /* Each stack pointer address is followed by the size of the
2010 data in use in that stack, in bytes. This used to be a
2011 conditional around just the two extra args, but that might
2012 be undefined if yyoverflow is a macro. */
2013 yyoverflow (YY_("memory exhausted"),
2014 &yyss1, yysize * YYSIZEOF (*yyssp),
2015 &yyvs1, yysize * YYSIZEOF (*yyvsp),
2016 &yystacksize);
2017 yyss = yyss1;
2018 yyvs = yyvs1;
2019 }
2020 # else /* defined YYSTACK_RELOCATE */
2021 /* Extend the stack our own way. */
2022 if (YYMAXDEPTH <= yystacksize)
2023 YYNOMEM;
2024 yystacksize *= 2;
2025 if (YYMAXDEPTH < yystacksize)
2026 yystacksize = YYMAXDEPTH;
2027
2028 {
2029 yy_state_t *yyss1 = yyss;
2030 union yyalloc *yyptr =
2031 YY_CAST (union yyalloc *,
2032 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2033 if (! yyptr)
2034 YYNOMEM;
2035 YYSTACK_RELOCATE (yyss_alloc, yyss);
2036 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2037 # undef YYSTACK_RELOCATE
2038 if (yyss1 != yyssa)
2039 YYSTACK_FREE (yyss1);
2040 }
2041 # endif
2042
2043 yyssp = yyss + yysize - 1;
2044 yyvsp = yyvs + yysize - 1;
2045
2046 YY_IGNORE_USELESS_CAST_BEGIN
2047 YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2048 YY_CAST (long, yystacksize)));
2049 YY_IGNORE_USELESS_CAST_END
2050
2051 if (yyss + yystacksize - 1 <= yyssp)
2052 YYABORT;
2053 }
2054 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2055
2056
2057 if (yystate == YYFINAL)
2058 YYACCEPT;
2059
2060 goto yybackup;
2061
2062
2063 /*-----------.
2064 | yybackup. |
2065 `-----------*/
2066 yybackup:
2067 /* Do appropriate processing given the current state. Read a
2068 lookahead token if we need one and don't already have one. */
2069
2070 /* First try to decide what to do without reference to lookahead token. */
2071 yyn = yypact[yystate];
2072 if (yypact_value_is_default (yyn))
2073 goto yydefault;
2074
2075 /* Not known => get a lookahead token if don't already have one. */
2076
2077 /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2078 if (yychar == YYEMPTY)
2079 {
2080 YYDPRINTF ((stderr, "Reading a token\n"));
2081 yychar = yylex ();
2082 }
2083
2084 if (yychar <= YYEOF)
2085 {
2086 yychar = YYEOF;
2087 yytoken = YYSYMBOL_YYEOF;
2088 YYDPRINTF ((stderr, "Now at end of input.\n"));
2089 }
2090 else if (yychar == YYerror)
2091 {
2092 /* The scanner already issued an error message, process directly
2093 to error recovery. But do not keep the error token as
2094 lookahead, it is too special and may lead us to an endless
2095 loop in error recovery. */
2096 yychar = YYUNDEF;
2097 yytoken = YYSYMBOL_YYerror;
2098 goto yyerrlab1;
2099 }
2100 else
2101 {
2102 yytoken = YYTRANSLATE (yychar);
2103 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2104 }
2105
2106 /* If the proper action on seeing token YYTOKEN is to reduce or to
2107 detect an error, take that action. */
2108 yyn += yytoken;
2109 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2110 goto yydefault;
2111 yyn = yytable[yyn];
2112 if (yyn <= 0)
2113 {
2114 if (yytable_value_is_error (yyn))
2115 goto yyerrlab;
2116 yyn = -yyn;
2117 goto yyreduce;
2118 }
2119
2120 /* Count tokens shifted since error; after three, turn off error
2121 status. */
2122 if (yyerrstatus)
2123 yyerrstatus--;
2124
2125 /* Shift the lookahead token. */
2126 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2127 yystate = yyn;
2128 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2129 *++yyvsp = yylval;
2130 YY_IGNORE_MAYBE_UNINITIALIZED_END
2131
2132 /* Discard the shifted token. */
2133 yychar = YYEMPTY;
2134 goto yynewstate;
2135
2136
2137 /*-----------------------------------------------------------.
2138 | yydefault -- do the default action for the current state. |
2139 `-----------------------------------------------------------*/
2140 yydefault:
2141 yyn = yydefact[yystate];
2142 if (yyn == 0)
2143 goto yyerrlab;
2144 goto yyreduce;
2145
2146
2147 /*-----------------------------.
2148 | yyreduce -- do a reduction. |
2149 `-----------------------------*/
2150 yyreduce:
2151 /* yyn is the number of a rule to reduce with. */
2152 yylen = yyr2[yyn];
2153
2154 /* If YYLEN is nonzero, implement the default value of the action:
2155 '$$ = $1'.
2156
2157 Otherwise, the following line sets YYVAL to garbage.
2158 This behavior is undocumented and Bison
2159 users should not rely upon it. Assigning to YYVAL
2160 unconditionally makes the parser a bit smaller, and it avoids a
2161 GCC warning that YYVAL may be used uninitialized. */
2162 yyval = yyvsp[1-yylen];
2163
2164
2165 YY_REDUCE_PRINT (yyn);
2166 switch (yyn)
2167 {
2168 case 2: /* statement: UNKNOWN_OPCODE */
2169 #line 188 "./config/rl78-parse.y"
2170 { as_bad (_("Unknown opcode: %s"), rl78_init_start); }
2171 #line 2172 "config/rl78-parse.c"
2172 break;
2173
2174 case 3: /* statement: addsub A ',' '#' EXPR */
2175 #line 209 "./config/rl78-parse.y"
2176 { B1 (0x0c|(yyvsp[-4].regno)); O1 ((yyvsp[0].exp)); }
2177 #line 2178 "config/rl78-parse.c"
2178 break;
2179
2180 case 4: /* $@1: %empty */
2181 #line 211 "./config/rl78-parse.y"
2182 {SA((yyvsp[0].exp))}
2183 #line 2184 "config/rl78-parse.c"
2184 break;
2185
2186 case 5: /* statement: addsub EXPR $@1 ',' '#' EXPR */
2187 #line 212 "./config/rl78-parse.y"
2188 { B1 (0x0a|(yyvsp[-5].regno)); SET_SA ((yyvsp[-4].exp)); O1 ((yyvsp[-4].exp)); O1 ((yyvsp[0].exp)); }
2189 #line 2190 "config/rl78-parse.c"
2190 break;
2191
2192 case 6: /* statement: addsub A ',' A */
2193 #line 215 "./config/rl78-parse.y"
2194 { B2 (0x61, 0x01|(yyvsp[-3].regno)); }
2195 #line 2196 "config/rl78-parse.c"
2196 break;
2197
2198 case 7: /* statement: addsub A ',' regb_na */
2199 #line 218 "./config/rl78-parse.y"
2200 { B2 (0x61, 0x08|(yyvsp[-3].regno)); F ((yyvsp[0].regno), 13, 3); }
2201 #line 2202 "config/rl78-parse.c"
2202 break;
2203
2204 case 8: /* statement: addsub regb_na ',' A */
2205 #line 221 "./config/rl78-parse.y"
2206 { B2 (0x61, 0x00|(yyvsp[-3].regno)); F ((yyvsp[-2].regno), 13, 3); }
2207 #line 2208 "config/rl78-parse.c"
2208 break;
2209
2210 case 9: /* $@2: %empty */
2211 #line 223 "./config/rl78-parse.y"
2212 {SA((yyvsp[0].exp))}
2213 #line 2214 "config/rl78-parse.c"
2214 break;
2215
2216 case 10: /* statement: addsub A ',' EXPR $@2 */
2217 #line 224 "./config/rl78-parse.y"
2218 { B1 (0x0b|(yyvsp[-4].regno)); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2219 #line 2220 "config/rl78-parse.c"
2220 break;
2221
2222 case 11: /* statement: addsub A ',' opt_es '!' EXPR */
2223 #line 227 "./config/rl78-parse.y"
2224 { B1 (0x0f|(yyvsp[-5].regno)); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2225 #line 2226 "config/rl78-parse.c"
2226 break;
2227
2228 case 12: /* statement: addsub A ',' opt_es '[' HL ']' */
2229 #line 230 "./config/rl78-parse.y"
2230 { B1 (0x0d|(yyvsp[-6].regno)); }
2231 #line 2232 "config/rl78-parse.c"
2232 break;
2233
2234 case 13: /* statement: addsub A ',' opt_es '[' HL '+' EXPR ']' */
2235 #line 233 "./config/rl78-parse.y"
2236 { B1 (0x0e|(yyvsp[-8].regno)); O1 ((yyvsp[-1].exp)); }
2237 #line 2238 "config/rl78-parse.c"
2238 break;
2239
2240 case 14: /* statement: addsub A ',' opt_es '[' HL '+' B ']' */
2241 #line 236 "./config/rl78-parse.y"
2242 { B2 (0x61, 0x80|(yyvsp[-8].regno)); }
2243 #line 2244 "config/rl78-parse.c"
2244 break;
2245
2246 case 15: /* statement: addsub A ',' opt_es '[' HL '+' C ']' */
2247 #line 239 "./config/rl78-parse.y"
2248 { B2 (0x61, 0x82|(yyvsp[-8].regno)); }
2249 #line 2250 "config/rl78-parse.c"
2250 break;
2251
2252 case 16: /* statement: addsub opt_es '!' EXPR ',' '#' EXPR */
2253 #line 242 "./config/rl78-parse.y"
2254 { if ((yyvsp[-6].regno) != 0x40)
2255 { rl78_error ("Only CMP takes these operands"); }
2256 else
2257 { B1 (0x00|(yyvsp[-6].regno)); O2 ((yyvsp[-3].exp)); O1 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2258 }
2259 #line 2260 "config/rl78-parse.c"
2260 break;
2261
2262 case 17: /* statement: addsubw AX ',' '#' EXPR */
2263 #line 251 "./config/rl78-parse.y"
2264 { B1 (0x04|(yyvsp[-4].regno)); O2 ((yyvsp[0].exp)); }
2265 #line 2266 "config/rl78-parse.c"
2266 break;
2267
2268 case 18: /* statement: addsubw AX ',' regw */
2269 #line 254 "./config/rl78-parse.y"
2270 { B1 (0x01|(yyvsp[-3].regno)); F ((yyvsp[0].regno), 5, 2); }
2271 #line 2272 "config/rl78-parse.c"
2272 break;
2273
2274 case 19: /* $@3: %empty */
2275 #line 256 "./config/rl78-parse.y"
2276 {SA((yyvsp[0].exp))}
2277 #line 2278 "config/rl78-parse.c"
2278 break;
2279
2280 case 20: /* statement: addsubw AX ',' EXPR $@3 */
2281 #line 257 "./config/rl78-parse.y"
2282 { B1 (0x06|(yyvsp[-4].regno)); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2283 #line 2284 "config/rl78-parse.c"
2284 break;
2285
2286 case 21: /* statement: addsubw AX ',' opt_es '!' EXPR */
2287 #line 260 "./config/rl78-parse.y"
2288 { B1 (0x02|(yyvsp[-5].regno)); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2289 #line 2290 "config/rl78-parse.c"
2290 break;
2291
2292 case 22: /* statement: addsubw AX ',' opt_es '[' HL '+' EXPR ']' */
2293 #line 263 "./config/rl78-parse.y"
2294 { B2 (0x61, 0x09|(yyvsp[-8].regno)); O1 ((yyvsp[-1].exp)); }
2295 #line 2296 "config/rl78-parse.c"
2296 break;
2297
2298 case 23: /* statement: addsubw AX ',' opt_es '[' HL ']' */
2299 #line 266 "./config/rl78-parse.y"
2300 { B3 (0x61, 0x09|(yyvsp[-6].regno), 0); }
2301 #line 2302 "config/rl78-parse.c"
2302 break;
2303
2304 case 24: /* statement: addsubw SP ',' '#' EXPR */
2305 #line 269 "./config/rl78-parse.y"
2306 { B1 ((yyvsp[-4].regno) ? 0x20 : 0x10); O1 ((yyvsp[0].exp));
2307 if ((yyvsp[-4].regno) == 0x40)
2308 rl78_error ("CMPW SP,#imm not allowed");
2309 }
2310 #line 2311 "config/rl78-parse.c"
2311 break;
2312
2313 case 25: /* $@4: %empty */
2314 #line 276 "./config/rl78-parse.y"
2315 {Bit((yyvsp[0].exp))}
2316 #line 2317 "config/rl78-parse.c"
2317 break;
2318
2319 case 26: /* statement: andor1 CY ',' sfr '.' EXPR $@4 */
2320 #line 277 "./config/rl78-parse.y"
2321 { B3 (0x71, 0x08|(yyvsp[-6].regno), (yyvsp[-3].regno)); FE ((yyvsp[-1].exp), 9, 3); }
2322 #line 2323 "config/rl78-parse.c"
2323 break;
2324
2325 case 27: /* $@5: %empty */
2326 #line 279 "./config/rl78-parse.y"
2327 {Bit((yyvsp[0].exp))}
2328 #line 2329 "config/rl78-parse.c"
2329 break;
2330
2331 case 28: /* statement: andor1 CY ',' EXPR '.' EXPR $@5 */
2332 #line 280 "./config/rl78-parse.y"
2333 { if (expr_is_sfr ((yyvsp[-3].exp)))
2334 { B2 (0x71, 0x08|(yyvsp[-6].regno)); FE ((yyvsp[-1].exp), 9, 3); O1 ((yyvsp[-3].exp)); }
2335 else if (expr_is_saddr ((yyvsp[-3].exp)))
2336 { B2 (0x71, 0x00|(yyvsp[-6].regno)); FE ((yyvsp[-1].exp), 9, 3); SET_SA ((yyvsp[-3].exp)); O1 ((yyvsp[-3].exp)); }
2337 else
2338 NOT_SFR_OR_SADDR;
2339 }
2340 #line 2341 "config/rl78-parse.c"
2341 break;
2342
2343 case 29: /* $@6: %empty */
2344 #line 288 "./config/rl78-parse.y"
2345 {Bit((yyvsp[0].exp))}
2346 #line 2347 "config/rl78-parse.c"
2347 break;
2348
2349 case 30: /* statement: andor1 CY ',' A '.' EXPR $@6 */
2350 #line 289 "./config/rl78-parse.y"
2351 { B2 (0x71, 0x88|(yyvsp[-6].regno)); FE ((yyvsp[-1].exp), 9, 3); }
2352 #line 2353 "config/rl78-parse.c"
2353 break;
2354
2355 case 31: /* $@7: %empty */
2356 #line 291 "./config/rl78-parse.y"
2357 {Bit((yyvsp[0].exp))}
2358 #line 2359 "config/rl78-parse.c"
2359 break;
2360
2361 case 32: /* statement: andor1 CY ',' opt_es '[' HL ']' '.' EXPR $@7 */
2362 #line 292 "./config/rl78-parse.y"
2363 { B2 (0x71, 0x80|(yyvsp[-9].regno)); FE ((yyvsp[-1].exp), 9, 3); }
2364 #line 2365 "config/rl78-parse.c"
2365 break;
2366
2367 case 33: /* statement: BC '$' EXPR */
2368 #line 297 "./config/rl78-parse.y"
2369 { B1 (0xdc); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2370 #line 2371 "config/rl78-parse.c"
2371 break;
2372
2373 case 34: /* statement: BNC '$' EXPR */
2374 #line 300 "./config/rl78-parse.y"
2375 { B1 (0xde); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2376 #line 2377 "config/rl78-parse.c"
2377 break;
2378
2379 case 35: /* statement: BZ '$' EXPR */
2380 #line 303 "./config/rl78-parse.y"
2381 { B1 (0xdd); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2382 #line 2383 "config/rl78-parse.c"
2383 break;
2384
2385 case 36: /* statement: BNZ '$' EXPR */
2386 #line 306 "./config/rl78-parse.y"
2387 { B1 (0xdf); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2388 #line 2389 "config/rl78-parse.c"
2389 break;
2390
2391 case 37: /* statement: BH '$' EXPR */
2392 #line 309 "./config/rl78-parse.y"
2393 { B2 (0x61, 0xc3); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2394 #line 2395 "config/rl78-parse.c"
2395 break;
2396
2397 case 38: /* statement: BNH '$' EXPR */
2398 #line 312 "./config/rl78-parse.y"
2399 { B2 (0x61, 0xd3); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2400 #line 2401 "config/rl78-parse.c"
2401 break;
2402
2403 case 39: /* statement: bt_bf sfr '.' EXPR ',' '$' EXPR */
2404 #line 317 "./config/rl78-parse.y"
2405 { B3 (0x31, 0x80|(yyvsp[-6].regno), (yyvsp[-5].regno)); FE ((yyvsp[-3].exp), 9, 3); PC1 ((yyvsp[0].exp)); }
2406 #line 2407 "config/rl78-parse.c"
2407 break;
2408
2409 case 40: /* statement: bt_bf EXPR '.' EXPR ',' '$' EXPR */
2410 #line 320 "./config/rl78-parse.y"
2411 { if (expr_is_sfr ((yyvsp[-5].exp)))
2412 { B2 (0x31, 0x80|(yyvsp[-6].regno)); FE ((yyvsp[-3].exp), 9, 3); O1 ((yyvsp[-5].exp)); PC1 ((yyvsp[0].exp)); }
2413 else if (expr_is_saddr ((yyvsp[-5].exp)))
2414 { B2 (0x31, 0x00|(yyvsp[-6].regno)); FE ((yyvsp[-3].exp), 9, 3); SET_SA ((yyvsp[-5].exp)); O1 ((yyvsp[-5].exp)); PC1 ((yyvsp[0].exp)); }
2415 else
2416 NOT_SFR_OR_SADDR;
2417 }
2418 #line 2419 "config/rl78-parse.c"
2419 break;
2420
2421 case 41: /* statement: bt_bf A '.' EXPR ',' '$' EXPR */
2422 #line 329 "./config/rl78-parse.y"
2423 { B2 (0x31, 0x01|(yyvsp[-6].regno)); FE ((yyvsp[-3].exp), 9, 3); PC1 ((yyvsp[0].exp)); }
2424 #line 2425 "config/rl78-parse.c"
2425 break;
2426
2427 case 42: /* statement: bt_bf opt_es '[' HL ']' '.' EXPR ',' '$' EXPR */
2428 #line 332 "./config/rl78-parse.y"
2429 { B2 (0x31, 0x81|(yyvsp[-9].regno)); FE ((yyvsp[-3].exp), 9, 3); PC1 ((yyvsp[0].exp)); }
2430 #line 2431 "config/rl78-parse.c"
2431 break;
2432
2433 case 43: /* statement: BR AX */
2434 #line 337 "./config/rl78-parse.y"
2435 { B2 (0x61, 0xcb); }
2436 #line 2437 "config/rl78-parse.c"
2437 break;
2438
2439 case 44: /* statement: BR '$' EXPR */
2440 #line 340 "./config/rl78-parse.y"
2441 { B1 (0xef); PC1 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2442 #line 2443 "config/rl78-parse.c"
2443 break;
2444
2445 case 45: /* statement: BR '$' '!' EXPR */
2446 #line 343 "./config/rl78-parse.y"
2447 { B1 (0xee); PC2 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2448 #line 2449 "config/rl78-parse.c"
2449 break;
2450
2451 case 46: /* statement: BR '!' EXPR */
2452 #line 346 "./config/rl78-parse.y"
2453 { B1 (0xed); O2 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2454 #line 2455 "config/rl78-parse.c"
2455 break;
2456
2457 case 47: /* statement: BR '!' '!' EXPR */
2458 #line 349 "./config/rl78-parse.y"
2459 { B1 (0xec); O3 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2460 #line 2461 "config/rl78-parse.c"
2461 break;
2462
2463 case 48: /* statement: BRK */
2464 #line 354 "./config/rl78-parse.y"
2465 { B2 (0x61, 0xcc); }
2466 #line 2467 "config/rl78-parse.c"
2467 break;
2468
2469 case 49: /* statement: BRK1 */
2470 #line 357 "./config/rl78-parse.y"
2471 { B1 (0xff); }
2472 #line 2473 "config/rl78-parse.c"
2473 break;
2474
2475 case 50: /* statement: CALL regw */
2476 #line 362 "./config/rl78-parse.y"
2477 { B2 (0x61, 0xca); F ((yyvsp[0].regno), 10, 2); }
2478 #line 2479 "config/rl78-parse.c"
2479 break;
2480
2481 case 51: /* statement: CALL '$' '!' EXPR */
2482 #line 365 "./config/rl78-parse.y"
2483 { B1 (0xfe); PC2 ((yyvsp[0].exp)); }
2484 #line 2485 "config/rl78-parse.c"
2485 break;
2486
2487 case 52: /* statement: CALL '!' EXPR */
2488 #line 368 "./config/rl78-parse.y"
2489 { B1 (0xfd); O2 ((yyvsp[0].exp)); }
2490 #line 2491 "config/rl78-parse.c"
2491 break;
2492
2493 case 53: /* statement: CALL '!' '!' EXPR */
2494 #line 371 "./config/rl78-parse.y"
2495 { B1 (0xfc); O3 ((yyvsp[0].exp)); rl78_linkrelax_branch (); }
2496 #line 2497 "config/rl78-parse.c"
2497 break;
2498
2499 case 54: /* statement: CALLT '[' EXPR ']' */
2500 #line 374 "./config/rl78-parse.y"
2501 { if ((yyvsp[-1].exp).X_op != O_constant)
2502 rl78_error ("CALLT requires a numeric address");
2503 else
2504 {
2505 int i = (yyvsp[-1].exp).X_add_number;
2506 if (i < 0x80 || i > 0xbe)
2507 rl78_error ("CALLT address not 0x80..0xbe");
2508 else if (i & 1)
2509 rl78_error ("CALLT address not even");
2510 else
2511 {
2512 B2 (0x61, 0x84);
2513 F ((i >> 1) & 7, 9, 3);
2514 F ((i >> 4) & 7, 14, 2);
2515 }
2516 }
2517 }
2518 #line 2519 "config/rl78-parse.c"
2519 break;
2520
2521 case 55: /* statement: setclr1 CY */
2522 #line 395 "./config/rl78-parse.y"
2523 { B2 (0x71, (yyvsp[-1].regno) ? 0x88 : 0x80); }
2524 #line 2525 "config/rl78-parse.c"
2525 break;
2526
2527 case 56: /* statement: setclr1 sfr '.' EXPR */
2528 #line 398 "./config/rl78-parse.y"
2529 { B3 (0x71, 0x0a|(yyvsp[-3].regno), (yyvsp[-2].regno)); FE ((yyvsp[0].exp), 9, 3); }
2530 #line 2531 "config/rl78-parse.c"
2531 break;
2532
2533 case 57: /* statement: setclr1 EXPR '.' EXPR */
2534 #line 401 "./config/rl78-parse.y"
2535 { if (expr_is_sfr ((yyvsp[-2].exp)))
2536 { B2 (0x71, 0x0a|(yyvsp[-3].regno)); FE ((yyvsp[0].exp), 9, 3); O1 ((yyvsp[-2].exp)); }
2537 else if (expr_is_saddr ((yyvsp[-2].exp)))
2538 { B2 (0x71, 0x02|(yyvsp[-3].regno)); FE ((yyvsp[0].exp), 9, 3); SET_SA ((yyvsp[-2].exp)); O1 ((yyvsp[-2].exp)); }
2539 else
2540 NOT_SFR_OR_SADDR;
2541 }
2542 #line 2543 "config/rl78-parse.c"
2543 break;
2544
2545 case 58: /* statement: setclr1 A '.' EXPR */
2546 #line 410 "./config/rl78-parse.y"
2547 { B2 (0x71, 0x8a|(yyvsp[-3].regno)); FE ((yyvsp[0].exp), 9, 3); }
2548 #line 2549 "config/rl78-parse.c"
2549 break;
2550
2551 case 59: /* statement: setclr1 opt_es '!' EXPR '.' EXPR */
2552 #line 413 "./config/rl78-parse.y"
2553 { B2 (0x71, 0x00+(yyvsp[-5].regno)*0x08); FE ((yyvsp[0].exp), 9, 3); O2 ((yyvsp[-2].exp)); rl78_linkrelax_addr16 (); }
2554 #line 2555 "config/rl78-parse.c"
2555 break;
2556
2557 case 60: /* statement: setclr1 opt_es '[' HL ']' '.' EXPR */
2558 #line 416 "./config/rl78-parse.y"
2559 { B2 (0x71, 0x82|(yyvsp[-6].regno)); FE ((yyvsp[0].exp), 9, 3); }
2560 #line 2561 "config/rl78-parse.c"
2561 break;
2562
2563 case 61: /* statement: oneclrb A */
2564 #line 421 "./config/rl78-parse.y"
2565 { B1 (0xe1|(yyvsp[-1].regno)); }
2566 #line 2567 "config/rl78-parse.c"
2567 break;
2568
2569 case 62: /* statement: oneclrb X */
2570 #line 423 "./config/rl78-parse.y"
2571 { B1 (0xe0|(yyvsp[-1].regno)); }
2572 #line 2573 "config/rl78-parse.c"
2573 break;
2574
2575 case 63: /* statement: oneclrb B */
2576 #line 425 "./config/rl78-parse.y"
2577 { B1 (0xe3|(yyvsp[-1].regno)); }
2578 #line 2579 "config/rl78-parse.c"
2579 break;
2580
2581 case 64: /* statement: oneclrb C */
2582 #line 427 "./config/rl78-parse.y"
2583 { B1 (0xe2|(yyvsp[-1].regno)); }
2584 #line 2585 "config/rl78-parse.c"
2585 break;
2586
2587 case 65: /* $@8: %empty */
2588 #line 429 "./config/rl78-parse.y"
2589 {SA((yyvsp[0].exp))}
2590 #line 2591 "config/rl78-parse.c"
2591 break;
2592
2593 case 66: /* statement: oneclrb EXPR $@8 */
2594 #line 430 "./config/rl78-parse.y"
2595 { B1 (0xe4|(yyvsp[-2].regno)); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2596 #line 2597 "config/rl78-parse.c"
2597 break;
2598
2599 case 67: /* statement: oneclrb opt_es '!' EXPR */
2600 #line 433 "./config/rl78-parse.y"
2601 { B1 (0xe5|(yyvsp[-3].regno)); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2602 #line 2603 "config/rl78-parse.c"
2603 break;
2604
2605 case 68: /* statement: oneclrw AX */
2606 #line 438 "./config/rl78-parse.y"
2607 { B1 (0xe6|(yyvsp[-1].regno)); }
2608 #line 2609 "config/rl78-parse.c"
2609 break;
2610
2611 case 69: /* statement: oneclrw BC */
2612 #line 440 "./config/rl78-parse.y"
2613 { B1 (0xe7|(yyvsp[-1].regno)); }
2614 #line 2615 "config/rl78-parse.c"
2615 break;
2616
2617 case 70: /* statement: CMP0 A */
2618 #line 445 "./config/rl78-parse.y"
2619 { B1 (0xd1); }
2620 #line 2621 "config/rl78-parse.c"
2621 break;
2622
2623 case 71: /* statement: CMP0 X */
2624 #line 448 "./config/rl78-parse.y"
2625 { B1 (0xd0); }
2626 #line 2627 "config/rl78-parse.c"
2627 break;
2628
2629 case 72: /* statement: CMP0 B */
2630 #line 451 "./config/rl78-parse.y"
2631 { B1 (0xd3); }
2632 #line 2633 "config/rl78-parse.c"
2633 break;
2634
2635 case 73: /* statement: CMP0 C */
2636 #line 454 "./config/rl78-parse.y"
2637 { B1 (0xd2); }
2638 #line 2639 "config/rl78-parse.c"
2639 break;
2640
2641 case 74: /* $@9: %empty */
2642 #line 456 "./config/rl78-parse.y"
2643 {SA((yyvsp[0].exp))}
2644 #line 2645 "config/rl78-parse.c"
2645 break;
2646
2647 case 75: /* statement: CMP0 EXPR $@9 */
2648 #line 457 "./config/rl78-parse.y"
2649 { B1 (0xd4); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2650 #line 2651 "config/rl78-parse.c"
2651 break;
2652
2653 case 76: /* statement: CMP0 opt_es '!' EXPR */
2654 #line 460 "./config/rl78-parse.y"
2655 { B1 (0xd5); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2656 #line 2657 "config/rl78-parse.c"
2657 break;
2658
2659 case 77: /* statement: CMPS X ',' opt_es '[' HL '+' EXPR ']' */
2660 #line 465 "./config/rl78-parse.y"
2661 { B2 (0x61, 0xde); O1 ((yyvsp[-1].exp)); }
2662 #line 2663 "config/rl78-parse.c"
2663 break;
2664
2665 case 78: /* statement: incdec regb */
2666 #line 470 "./config/rl78-parse.y"
2667 { B1 (0x80|(yyvsp[-1].regno)); F ((yyvsp[0].regno), 5, 3); }
2668 #line 2669 "config/rl78-parse.c"
2669 break;
2670
2671 case 79: /* $@10: %empty */
2672 #line 472 "./config/rl78-parse.y"
2673 {SA((yyvsp[0].exp))}
2674 #line 2675 "config/rl78-parse.c"
2675 break;
2676
2677 case 80: /* statement: incdec EXPR $@10 */
2678 #line 473 "./config/rl78-parse.y"
2679 { B1 (0xa4|(yyvsp[-2].regno)); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2680 #line 2681 "config/rl78-parse.c"
2681 break;
2682
2683 case 81: /* statement: incdec '!' EXPR */
2684 #line 475 "./config/rl78-parse.y"
2685 { B1 (0xa0|(yyvsp[-2].regno)); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2686 #line 2687 "config/rl78-parse.c"
2687 break;
2688
2689 case 82: /* statement: incdec ES ':' '!' EXPR */
2690 #line 477 "./config/rl78-parse.y"
2691 { B2 (0x11, 0xa0|(yyvsp[-4].regno)); O2 ((yyvsp[0].exp)); }
2692 #line 2693 "config/rl78-parse.c"
2693 break;
2694
2695 case 83: /* statement: incdec '[' HL '+' EXPR ']' */
2696 #line 479 "./config/rl78-parse.y"
2697 { B2 (0x61, 0x59+(yyvsp[-5].regno)); O1 ((yyvsp[-1].exp)); }
2698 #line 2699 "config/rl78-parse.c"
2699 break;
2700
2701 case 84: /* statement: incdec ES ':' '[' HL '+' EXPR ']' */
2702 #line 481 "./config/rl78-parse.y"
2703 { B3 (0x11, 0x61, 0x59+(yyvsp[-7].regno)); O1 ((yyvsp[-1].exp)); }
2704 #line 2705 "config/rl78-parse.c"
2705 break;
2706
2707 case 85: /* statement: incdecw regw */
2708 #line 486 "./config/rl78-parse.y"
2709 { B1 (0xa1|(yyvsp[-1].regno)); F ((yyvsp[0].regno), 5, 2); }
2710 #line 2711 "config/rl78-parse.c"
2711 break;
2712
2713 case 86: /* $@11: %empty */
2714 #line 488 "./config/rl78-parse.y"
2715 {SA((yyvsp[0].exp))}
2716 #line 2717 "config/rl78-parse.c"
2717 break;
2718
2719 case 87: /* statement: incdecw EXPR $@11 */
2720 #line 489 "./config/rl78-parse.y"
2721 { B1 (0xa6|(yyvsp[-2].regno)); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2722 #line 2723 "config/rl78-parse.c"
2723 break;
2724
2725 case 88: /* statement: incdecw opt_es '!' EXPR */
2726 #line 492 "./config/rl78-parse.y"
2727 { B1 (0xa2|(yyvsp[-3].regno)); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2728 #line 2729 "config/rl78-parse.c"
2729 break;
2730
2731 case 89: /* statement: incdecw opt_es '[' HL '+' EXPR ']' */
2732 #line 495 "./config/rl78-parse.y"
2733 { B2 (0x61, 0x79+(yyvsp[-6].regno)); O1 ((yyvsp[-1].exp)); }
2734 #line 2735 "config/rl78-parse.c"
2735 break;
2736
2737 case 90: /* statement: DI */
2738 #line 500 "./config/rl78-parse.y"
2739 { B3 (0x71, 0x7b, 0xfa); }
2740 #line 2741 "config/rl78-parse.c"
2741 break;
2742
2743 case 91: /* statement: EI */
2744 #line 503 "./config/rl78-parse.y"
2745 { B3 (0x71, 0x7a, 0xfa); }
2746 #line 2747 "config/rl78-parse.c"
2747 break;
2748
2749 case 92: /* $@12: %empty */
2750 #line 507 "./config/rl78-parse.y"
2751 { ISA_G14 ("MULHU"); }
2752 #line 2753 "config/rl78-parse.c"
2753 break;
2754
2755 case 93: /* statement: MULHU $@12 */
2756 #line 508 "./config/rl78-parse.y"
2757 { B3 (0xce, 0xfb, 0x01); }
2758 #line 2759 "config/rl78-parse.c"
2759 break;
2760
2761 case 94: /* $@13: %empty */
2762 #line 510 "./config/rl78-parse.y"
2763 { ISA_G14 ("MULH"); }
2764 #line 2765 "config/rl78-parse.c"
2765 break;
2766
2767 case 95: /* statement: MULH $@13 */
2768 #line 511 "./config/rl78-parse.y"
2769 { B3 (0xce, 0xfb, 0x02); }
2770 #line 2771 "config/rl78-parse.c"
2771 break;
2772
2773 case 96: /* statement: MULU X */
2774 #line 514 "./config/rl78-parse.y"
2775 { B1 (0xd6); }
2776 #line 2777 "config/rl78-parse.c"
2777 break;
2778
2779 case 97: /* $@14: %empty */
2780 #line 516 "./config/rl78-parse.y"
2781 { ISA_G14 ("DIVHU"); }
2782 #line 2783 "config/rl78-parse.c"
2783 break;
2784
2785 case 98: /* statement: DIVHU $@14 */
2786 #line 517 "./config/rl78-parse.y"
2787 { B3 (0xce, 0xfb, 0x03); }
2788 #line 2789 "config/rl78-parse.c"
2789 break;
2790
2791 case 99: /* $@15: %empty */
2792 #line 524 "./config/rl78-parse.y"
2793 { ISA_G14 ("DIVWU"); }
2794 #line 2795 "config/rl78-parse.c"
2795 break;
2796
2797 case 100: /* statement: DIVWU $@15 */
2798 #line 525 "./config/rl78-parse.y"
2799 { B3 (0xce, 0xfb, 0x0b); }
2800 #line 2801 "config/rl78-parse.c"
2801 break;
2802
2803 case 101: /* $@16: %empty */
2804 #line 527 "./config/rl78-parse.y"
2805 { ISA_G14 ("MACHU"); }
2806 #line 2807 "config/rl78-parse.c"
2807 break;
2808
2809 case 102: /* statement: MACHU $@16 */
2810 #line 528 "./config/rl78-parse.y"
2811 { B3 (0xce, 0xfb, 0x05); }
2812 #line 2813 "config/rl78-parse.c"
2813 break;
2814
2815 case 103: /* $@17: %empty */
2816 #line 530 "./config/rl78-parse.y"
2817 { ISA_G14 ("MACH"); }
2818 #line 2819 "config/rl78-parse.c"
2819 break;
2820
2821 case 104: /* statement: MACH $@17 */
2822 #line 531 "./config/rl78-parse.y"
2823 { B3 (0xce, 0xfb, 0x06); }
2824 #line 2825 "config/rl78-parse.c"
2825 break;
2826
2827 case 105: /* statement: HALT */
2828 #line 536 "./config/rl78-parse.y"
2829 { B2 (0x61, 0xed); }
2830 #line 2831 "config/rl78-parse.c"
2831 break;
2832
2833 case 106: /* statement: MOV A ',' '#' EXPR */
2834 #line 544 "./config/rl78-parse.y"
2835 { B1 (0x51); O1 ((yyvsp[0].exp)); }
2836 #line 2837 "config/rl78-parse.c"
2837 break;
2838
2839 case 107: /* statement: MOV regb_na ',' '#' EXPR */
2840 #line 546 "./config/rl78-parse.y"
2841 { B1 (0x50); F((yyvsp[-3].regno), 5, 3); O1 ((yyvsp[0].exp)); }
2842 #line 2843 "config/rl78-parse.c"
2843 break;
2844
2845 case 108: /* statement: MOV sfr ',' '#' EXPR */
2846 #line 549 "./config/rl78-parse.y"
2847 { if ((yyvsp[-3].regno) != 0xfd)
2848 { B2 (0xce, (yyvsp[-3].regno)); O1 ((yyvsp[0].exp)); }
2849 else
2850 { B1 (0x41); O1 ((yyvsp[0].exp)); }
2851 }
2852 #line 2853 "config/rl78-parse.c"
2853 break;
2854
2855 case 109: /* $@18: %empty */
2856 #line 555 "./config/rl78-parse.y"
2857 {NOT_ES}
2858 #line 2859 "config/rl78-parse.c"
2859 break;
2860
2861 case 110: /* statement: MOV opt_es EXPR ',' '#' EXPR $@18 */
2862 #line 556 "./config/rl78-parse.y"
2863 { if (expr_is_sfr ((yyvsp[-4].exp)))
2864 { B1 (0xce); O1 ((yyvsp[-4].exp)); O1 ((yyvsp[-1].exp)); }
2865 else if (expr_is_saddr ((yyvsp[-4].exp)))
2866 { B1 (0xcd); SET_SA ((yyvsp[-4].exp)); O1 ((yyvsp[-4].exp)); O1 ((yyvsp[-1].exp)); }
2867 else
2868 NOT_SFR_OR_SADDR;
2869 }
2870 #line 2871 "config/rl78-parse.c"
2871 break;
2872
2873 case 111: /* statement: MOV '!' EXPR ',' '#' EXPR */
2874 #line 565 "./config/rl78-parse.y"
2875 { B1 (0xcf); O2 ((yyvsp[-3].exp)); O1 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2876 #line 2877 "config/rl78-parse.c"
2877 break;
2878
2879 case 112: /* statement: MOV ES ':' '!' EXPR ',' '#' EXPR */
2880 #line 568 "./config/rl78-parse.y"
2881 { B2 (0x11, 0xcf); O2 ((yyvsp[-3].exp)); O1 ((yyvsp[0].exp)); }
2882 #line 2883 "config/rl78-parse.c"
2883 break;
2884
2885 case 113: /* statement: MOV regb_na ',' A */
2886 #line 571 "./config/rl78-parse.y"
2887 { B1 (0x70); F ((yyvsp[-2].regno), 5, 3); }
2888 #line 2889 "config/rl78-parse.c"
2889 break;
2890
2891 case 114: /* statement: MOV A ',' regb_na */
2892 #line 574 "./config/rl78-parse.y"
2893 { B1 (0x60); F ((yyvsp[0].regno), 5, 3); }
2894 #line 2895 "config/rl78-parse.c"
2895 break;
2896
2897 case 115: /* $@19: %empty */
2898 #line 576 "./config/rl78-parse.y"
2899 {NOT_ES}
2900 #line 2901 "config/rl78-parse.c"
2901 break;
2902
2903 case 116: /* statement: MOV opt_es EXPR ',' A $@19 */
2904 #line 577 "./config/rl78-parse.y"
2905 { if (expr_is_sfr ((yyvsp[-3].exp)))
2906 { B1 (0x9e); O1 ((yyvsp[-3].exp)); }
2907 else if (expr_is_saddr ((yyvsp[-3].exp)))
2908 { B1 (0x9d); SET_SA ((yyvsp[-3].exp)); O1 ((yyvsp[-3].exp)); }
2909 else
2910 NOT_SFR_OR_SADDR;
2911 }
2912 #line 2913 "config/rl78-parse.c"
2913 break;
2914
2915 case 117: /* statement: MOV A ',' opt_es '!' EXPR */
2916 #line 586 "./config/rl78-parse.y"
2917 { B1 (0x8f); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2918 #line 2919 "config/rl78-parse.c"
2919 break;
2920
2921 case 118: /* statement: MOV '!' EXPR ',' A */
2922 #line 589 "./config/rl78-parse.y"
2923 { B1 (0x9f); O2 ((yyvsp[-2].exp)); rl78_linkrelax_addr16 (); }
2924 #line 2925 "config/rl78-parse.c"
2925 break;
2926
2927 case 119: /* statement: MOV ES ':' '!' EXPR ',' A */
2928 #line 592 "./config/rl78-parse.y"
2929 { B2 (0x11, 0x9f); O2 ((yyvsp[-2].exp)); }
2930 #line 2931 "config/rl78-parse.c"
2931 break;
2932
2933 case 120: /* statement: MOV regb_na ',' opt_es '!' EXPR */
2934 #line 595 "./config/rl78-parse.y"
2935 { B1 (0xc9|reg_xbc((yyvsp[-4].regno))); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
2936 #line 2937 "config/rl78-parse.c"
2937 break;
2938
2939 case 121: /* $@20: %empty */
2940 #line 597 "./config/rl78-parse.y"
2941 {NOT_ES}
2942 #line 2943 "config/rl78-parse.c"
2943 break;
2944
2945 case 122: /* statement: MOV A ',' opt_es EXPR $@20 */
2946 #line 598 "./config/rl78-parse.y"
2947 { if (expr_is_saddr ((yyvsp[-1].exp)))
2948 { B1 (0x8d); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); }
2949 else if (expr_is_sfr ((yyvsp[-1].exp)))
2950 { B1 (0x8e); O1 ((yyvsp[-1].exp)); }
2951 else
2952 NOT_SFR_OR_SADDR;
2953 }
2954 #line 2955 "config/rl78-parse.c"
2955 break;
2956
2957 case 123: /* $@21: %empty */
2958 #line 606 "./config/rl78-parse.y"
2959 {SA((yyvsp[0].exp))}
2960 #line 2961 "config/rl78-parse.c"
2961 break;
2962
2963 case 124: /* $@22: %empty */
2964 #line 606 "./config/rl78-parse.y"
2965 {NOT_ES}
2966 #line 2967 "config/rl78-parse.c"
2967 break;
2968
2969 case 125: /* statement: MOV regb_na ',' opt_es EXPR $@21 $@22 */
2970 #line 607 "./config/rl78-parse.y"
2971 { B1 (0xc8|reg_xbc((yyvsp[-5].regno))); SET_SA ((yyvsp[-2].exp)); O1 ((yyvsp[-2].exp)); }
2972 #line 2973 "config/rl78-parse.c"
2973 break;
2974
2975 case 126: /* statement: MOV A ',' sfr */
2976 #line 610 "./config/rl78-parse.y"
2977 { B2 (0x8e, (yyvsp[0].regno)); }
2978 #line 2979 "config/rl78-parse.c"
2979 break;
2980
2981 case 127: /* statement: MOV sfr ',' regb */
2982 #line 613 "./config/rl78-parse.y"
2983 { if ((yyvsp[0].regno) != 1)
2984 rl78_error ("Only A allowed here");
2985 else
2986 { B2 (0x9e, (yyvsp[-2].regno)); }
2987 }
2988 #line 2989 "config/rl78-parse.c"
2989 break;
2990
2991 case 128: /* $@23: %empty */
2992 #line 619 "./config/rl78-parse.y"
2993 {SA((yyvsp[0].exp))}
2994 #line 2995 "config/rl78-parse.c"
2995 break;
2996
2997 case 129: /* $@24: %empty */
2998 #line 619 "./config/rl78-parse.y"
2999 {NOT_ES}
3000 #line 3001 "config/rl78-parse.c"
3001 break;
3002
3003 case 130: /* statement: MOV sfr ',' opt_es EXPR $@23 $@24 */
3004 #line 620 "./config/rl78-parse.y"
3005 { if ((yyvsp[-5].regno) != 0xfd)
3006 rl78_error ("Only ES allowed here");
3007 else
3008 { B2 (0x61, 0xb8); SET_SA ((yyvsp[-2].exp)); O1 ((yyvsp[-2].exp)); }
3009 }
3010 #line 3011 "config/rl78-parse.c"
3011 break;
3012
3013 case 131: /* statement: MOV A ',' opt_es '[' DE ']' */
3014 #line 627 "./config/rl78-parse.y"
3015 { B1 (0x89); }
3016 #line 3017 "config/rl78-parse.c"
3017 break;
3018
3019 case 132: /* statement: MOV opt_es '[' DE ']' ',' A */
3020 #line 630 "./config/rl78-parse.y"
3021 { B1 (0x99); }
3022 #line 3023 "config/rl78-parse.c"
3023 break;
3024
3025 case 133: /* statement: MOV opt_es '[' DE '+' EXPR ']' ',' '#' EXPR */
3026 #line 633 "./config/rl78-parse.y"
3027 { B1 (0xca); O1 ((yyvsp[-4].exp)); O1 ((yyvsp[0].exp)); }
3028 #line 3029 "config/rl78-parse.c"
3029 break;
3030
3031 case 134: /* statement: MOV A ',' opt_es '[' DE '+' EXPR ']' */
3032 #line 636 "./config/rl78-parse.y"
3033 { B1 (0x8a); O1 ((yyvsp[-1].exp)); }
3034 #line 3035 "config/rl78-parse.c"
3035 break;
3036
3037 case 135: /* statement: MOV opt_es '[' DE '+' EXPR ']' ',' A */
3038 #line 639 "./config/rl78-parse.y"
3039 { B1 (0x9a); O1 ((yyvsp[-3].exp)); }
3040 #line 3041 "config/rl78-parse.c"
3041 break;
3042
3043 case 136: /* statement: MOV A ',' opt_es '[' HL ']' */
3044 #line 642 "./config/rl78-parse.y"
3045 { B1 (0x8b); }
3046 #line 3047 "config/rl78-parse.c"
3047 break;
3048
3049 case 137: /* statement: MOV opt_es '[' HL ']' ',' A */
3050 #line 645 "./config/rl78-parse.y"
3051 { B1 (0x9b); }
3052 #line 3053 "config/rl78-parse.c"
3053 break;
3054
3055 case 138: /* statement: MOV opt_es '[' HL '+' EXPR ']' ',' '#' EXPR */
3056 #line 648 "./config/rl78-parse.y"
3057 { B1 (0xcc); O1 ((yyvsp[-4].exp)); O1 ((yyvsp[0].exp)); }
3058 #line 3059 "config/rl78-parse.c"
3059 break;
3060
3061 case 139: /* statement: MOV A ',' opt_es '[' HL '+' EXPR ']' */
3062 #line 651 "./config/rl78-parse.y"
3063 { B1 (0x8c); O1 ((yyvsp[-1].exp)); }
3064 #line 3065 "config/rl78-parse.c"
3065 break;
3066
3067 case 140: /* statement: MOV opt_es '[' HL '+' EXPR ']' ',' A */
3068 #line 654 "./config/rl78-parse.y"
3069 { B1 (0x9c); O1 ((yyvsp[-3].exp)); }
3070 #line 3071 "config/rl78-parse.c"
3071 break;
3072
3073 case 141: /* statement: MOV A ',' opt_es '[' HL '+' B ']' */
3074 #line 657 "./config/rl78-parse.y"
3075 { B2 (0x61, 0xc9); }
3076 #line 3077 "config/rl78-parse.c"
3077 break;
3078
3079 case 142: /* statement: MOV opt_es '[' HL '+' B ']' ',' A */
3080 #line 660 "./config/rl78-parse.y"
3081 { B2 (0x61, 0xd9); }
3082 #line 3083 "config/rl78-parse.c"
3083 break;
3084
3085 case 143: /* statement: MOV A ',' opt_es '[' HL '+' C ']' */
3086 #line 663 "./config/rl78-parse.y"
3087 { B2 (0x61, 0xe9); }
3088 #line 3089 "config/rl78-parse.c"
3089 break;
3090
3091 case 144: /* statement: MOV opt_es '[' HL '+' C ']' ',' A */
3092 #line 666 "./config/rl78-parse.y"
3093 { B2 (0x61, 0xf9); }
3094 #line 3095 "config/rl78-parse.c"
3095 break;
3096
3097 case 145: /* statement: MOV opt_es EXPR '[' B ']' ',' '#' EXPR */
3098 #line 669 "./config/rl78-parse.y"
3099 { B1 (0x19); O2 ((yyvsp[-6].exp)); O1 ((yyvsp[0].exp)); }
3100 #line 3101 "config/rl78-parse.c"
3101 break;
3102
3103 case 146: /* statement: MOV A ',' opt_es EXPR '[' B ']' */
3104 #line 672 "./config/rl78-parse.y"
3105 { B1 (0x09); O2 ((yyvsp[-3].exp)); }
3106 #line 3107 "config/rl78-parse.c"
3107 break;
3108
3109 case 147: /* statement: MOV opt_es EXPR '[' B ']' ',' A */
3110 #line 675 "./config/rl78-parse.y"
3111 { B1 (0x18); O2 ((yyvsp[-5].exp)); }
3112 #line 3113 "config/rl78-parse.c"
3113 break;
3114
3115 case 148: /* statement: MOV opt_es EXPR '[' C ']' ',' '#' EXPR */
3116 #line 678 "./config/rl78-parse.y"
3117 { B1 (0x38); O2 ((yyvsp[-6].exp)); O1 ((yyvsp[0].exp)); }
3118 #line 3119 "config/rl78-parse.c"
3119 break;
3120
3121 case 149: /* statement: MOV A ',' opt_es EXPR '[' C ']' */
3122 #line 681 "./config/rl78-parse.y"
3123 { B1 (0x29); O2 ((yyvsp[-3].exp)); }
3124 #line 3125 "config/rl78-parse.c"
3125 break;
3126
3127 case 150: /* statement: MOV opt_es EXPR '[' C ']' ',' A */
3128 #line 684 "./config/rl78-parse.y"
3129 { B1 (0x28); O2 ((yyvsp[-5].exp)); }
3130 #line 3131 "config/rl78-parse.c"
3131 break;
3132
3133 case 151: /* statement: MOV opt_es EXPR '[' BC ']' ',' '#' EXPR */
3134 #line 687 "./config/rl78-parse.y"
3135 { B1 (0x39); O2 ((yyvsp[-6].exp)); O1 ((yyvsp[0].exp)); }
3136 #line 3137 "config/rl78-parse.c"
3137 break;
3138
3139 case 152: /* statement: MOV opt_es '[' BC ']' ',' '#' EXPR */
3140 #line 690 "./config/rl78-parse.y"
3141 { B3 (0x39, 0, 0); O1 ((yyvsp[0].exp)); }
3142 #line 3143 "config/rl78-parse.c"
3143 break;
3144
3145 case 153: /* statement: MOV A ',' opt_es EXPR '[' BC ']' */
3146 #line 693 "./config/rl78-parse.y"
3147 { B1 (0x49); O2 ((yyvsp[-3].exp)); }
3148 #line 3149 "config/rl78-parse.c"
3149 break;
3150
3151 case 154: /* statement: MOV A ',' opt_es '[' BC ']' */
3152 #line 696 "./config/rl78-parse.y"
3153 { B3 (0x49, 0, 0); }
3154 #line 3155 "config/rl78-parse.c"
3155 break;
3156
3157 case 155: /* statement: MOV opt_es EXPR '[' BC ']' ',' A */
3158 #line 699 "./config/rl78-parse.y"
3159 { B1 (0x48); O2 ((yyvsp[-5].exp)); }
3160 #line 3161 "config/rl78-parse.c"
3161 break;
3162
3163 case 156: /* statement: MOV opt_es '[' BC ']' ',' A */
3164 #line 702 "./config/rl78-parse.y"
3165 { B3 (0x48, 0, 0); }
3166 #line 3167 "config/rl78-parse.c"
3167 break;
3168
3169 case 157: /* $@25: %empty */
3170 #line 704 "./config/rl78-parse.y"
3171 {NOT_ES}
3172 #line 3173 "config/rl78-parse.c"
3173 break;
3174
3175 case 158: /* statement: MOV opt_es '[' SP '+' EXPR ']' ',' '#' EXPR $@25 */
3176 #line 705 "./config/rl78-parse.y"
3177 { B1 (0xc8); O1 ((yyvsp[-5].exp)); O1 ((yyvsp[-1].exp)); }
3178 #line 3179 "config/rl78-parse.c"
3179 break;
3180
3181 case 159: /* $@26: %empty */
3182 #line 707 "./config/rl78-parse.y"
3183 {NOT_ES}
3184 #line 3185 "config/rl78-parse.c"
3185 break;
3186
3187 case 160: /* statement: MOV opt_es '[' SP ']' ',' '#' EXPR $@26 */
3188 #line 708 "./config/rl78-parse.y"
3189 { B2 (0xc8, 0); O1 ((yyvsp[-1].exp)); }
3190 #line 3191 "config/rl78-parse.c"
3191 break;
3192
3193 case 161: /* $@27: %empty */
3194 #line 710 "./config/rl78-parse.y"
3195 {NOT_ES}
3196 #line 3197 "config/rl78-parse.c"
3197 break;
3198
3199 case 162: /* statement: MOV A ',' opt_es '[' SP '+' EXPR ']' $@27 */
3200 #line 711 "./config/rl78-parse.y"
3201 { B1 (0x88); O1 ((yyvsp[-2].exp)); }
3202 #line 3203 "config/rl78-parse.c"
3203 break;
3204
3205 case 163: /* $@28: %empty */
3206 #line 713 "./config/rl78-parse.y"
3207 {NOT_ES}
3208 #line 3209 "config/rl78-parse.c"
3209 break;
3210
3211 case 164: /* statement: MOV A ',' opt_es '[' SP ']' $@28 */
3212 #line 714 "./config/rl78-parse.y"
3213 { B2 (0x88, 0); }
3214 #line 3215 "config/rl78-parse.c"
3215 break;
3216
3217 case 165: /* $@29: %empty */
3218 #line 716 "./config/rl78-parse.y"
3219 {NOT_ES}
3220 #line 3221 "config/rl78-parse.c"
3221 break;
3222
3223 case 166: /* statement: MOV opt_es '[' SP '+' EXPR ']' ',' A $@29 */
3224 #line 717 "./config/rl78-parse.y"
3225 { B1 (0x98); O1 ((yyvsp[-4].exp)); }
3226 #line 3227 "config/rl78-parse.c"
3227 break;
3228
3229 case 167: /* $@30: %empty */
3230 #line 719 "./config/rl78-parse.y"
3231 {NOT_ES}
3232 #line 3233 "config/rl78-parse.c"
3233 break;
3234
3235 case 168: /* statement: MOV opt_es '[' SP ']' ',' A $@30 */
3236 #line 720 "./config/rl78-parse.y"
3237 { B2 (0x98, 0); }
3238 #line 3239 "config/rl78-parse.c"
3239 break;
3240
3241 case 169: /* statement: mov1 CY ',' EXPR '.' EXPR */
3242 #line 725 "./config/rl78-parse.y"
3243 { if (expr_is_saddr ((yyvsp[-2].exp)))
3244 { B2 (0x71, 0x04); FE ((yyvsp[0].exp), 9, 3); SET_SA ((yyvsp[-2].exp)); O1 ((yyvsp[-2].exp)); }
3245 else if (expr_is_sfr ((yyvsp[-2].exp)))
3246 { B2 (0x71, 0x0c); FE ((yyvsp[0].exp), 9, 3); O1 ((yyvsp[-2].exp)); }
3247 else
3248 NOT_SFR_OR_SADDR;
3249 }
3250 #line 3251 "config/rl78-parse.c"
3251 break;
3252
3253 case 170: /* statement: mov1 CY ',' A '.' EXPR */
3254 #line 734 "./config/rl78-parse.y"
3255 { B2 (0x71, 0x8c); FE ((yyvsp[0].exp), 9, 3); }
3256 #line 3257 "config/rl78-parse.c"
3257 break;
3258
3259 case 171: /* statement: mov1 CY ',' sfr '.' EXPR */
3260 #line 737 "./config/rl78-parse.y"
3261 { B3 (0x71, 0x0c, (yyvsp[-2].regno)); FE ((yyvsp[0].exp), 9, 3); }
3262 #line 3263 "config/rl78-parse.c"
3263 break;
3264
3265 case 172: /* statement: mov1 CY ',' opt_es '[' HL ']' '.' EXPR */
3266 #line 740 "./config/rl78-parse.y"
3267 { B2 (0x71, 0x84); FE ((yyvsp[0].exp), 9, 3); }
3268 #line 3269 "config/rl78-parse.c"
3269 break;
3270
3271 case 173: /* statement: mov1 EXPR '.' EXPR ',' CY */
3272 #line 743 "./config/rl78-parse.y"
3273 { if (expr_is_saddr ((yyvsp[-4].exp)))
3274 { B2 (0x71, 0x01); FE ((yyvsp[-2].exp), 9, 3); SET_SA ((yyvsp[-4].exp)); O1 ((yyvsp[-4].exp)); }
3275 else if (expr_is_sfr ((yyvsp[-4].exp)))
3276 { B2 (0x71, 0x09); FE ((yyvsp[-2].exp), 9, 3); O1 ((yyvsp[-4].exp)); }
3277 else
3278 NOT_SFR_OR_SADDR;
3279 }
3280 #line 3281 "config/rl78-parse.c"
3281 break;
3282
3283 case 174: /* statement: mov1 A '.' EXPR ',' CY */
3284 #line 752 "./config/rl78-parse.y"
3285 { B2 (0x71, 0x89); FE ((yyvsp[-2].exp), 9, 3); }
3286 #line 3287 "config/rl78-parse.c"
3287 break;
3288
3289 case 175: /* statement: mov1 sfr '.' EXPR ',' CY */
3290 #line 755 "./config/rl78-parse.y"
3291 { B3 (0x71, 0x09, (yyvsp[-4].regno)); FE ((yyvsp[-2].exp), 9, 3); }
3292 #line 3293 "config/rl78-parse.c"
3293 break;
3294
3295 case 176: /* statement: mov1 opt_es '[' HL ']' '.' EXPR ',' CY */
3296 #line 758 "./config/rl78-parse.y"
3297 { B2 (0x71, 0x81); FE ((yyvsp[-2].exp), 9, 3); }
3298 #line 3299 "config/rl78-parse.c"
3299 break;
3300
3301 case 177: /* statement: MOVS opt_es '[' HL '+' EXPR ']' ',' X */
3302 #line 763 "./config/rl78-parse.y"
3303 { B2 (0x61, 0xce); O1 ((yyvsp[-3].exp)); }
3304 #line 3305 "config/rl78-parse.c"
3305 break;
3306
3307 case 178: /* statement: MOVW AX ',' '#' EXPR */
3308 #line 768 "./config/rl78-parse.y"
3309 { B1 (0x30); O2 ((yyvsp[0].exp)); }
3310 #line 3311 "config/rl78-parse.c"
3311 break;
3312
3313 case 179: /* statement: MOVW regw_na ',' '#' EXPR */
3314 #line 771 "./config/rl78-parse.y"
3315 { B1 (0x30); F ((yyvsp[-3].regno), 5, 2); O2 ((yyvsp[0].exp)); }
3316 #line 3317 "config/rl78-parse.c"
3317 break;
3318
3319 case 180: /* $@31: %empty */
3320 #line 773 "./config/rl78-parse.y"
3321 {NOT_ES}
3322 #line 3323 "config/rl78-parse.c"
3323 break;
3324
3325 case 181: /* statement: MOVW opt_es EXPR ',' '#' EXPR $@31 */
3326 #line 774 "./config/rl78-parse.y"
3327 { if (expr_is_saddr ((yyvsp[-4].exp)))
3328 { B1 (0xc9); SET_SA ((yyvsp[-4].exp)); O1 ((yyvsp[-4].exp)); O2 ((yyvsp[-1].exp)); }
3329 else if (expr_is_sfr ((yyvsp[-4].exp)))
3330 { B1 (0xcb); O1 ((yyvsp[-4].exp)); O2 ((yyvsp[-1].exp)); }
3331 else
3332 NOT_SFR_OR_SADDR;
3333 }
3334 #line 3335 "config/rl78-parse.c"
3335 break;
3336
3337 case 182: /* $@32: %empty */
3338 #line 782 "./config/rl78-parse.y"
3339 {NOT_ES}
3340 #line 3341 "config/rl78-parse.c"
3341 break;
3342
3343 case 183: /* statement: MOVW AX ',' opt_es EXPR $@32 */
3344 #line 783 "./config/rl78-parse.y"
3345 { if (expr_is_saddr ((yyvsp[-1].exp)))
3346 { B1 (0xad); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); WA((yyvsp[-1].exp)); }
3347 else if (expr_is_sfr ((yyvsp[-1].exp)))
3348 { B1 (0xae); O1 ((yyvsp[-1].exp)); WA((yyvsp[-1].exp)); }
3349 else
3350 NOT_SFR_OR_SADDR;
3351 }
3352 #line 3353 "config/rl78-parse.c"
3353 break;
3354
3355 case 184: /* $@33: %empty */
3356 #line 791 "./config/rl78-parse.y"
3357 {NOT_ES}
3358 #line 3359 "config/rl78-parse.c"
3359 break;
3360
3361 case 185: /* statement: MOVW opt_es EXPR ',' AX $@33 */
3362 #line 792 "./config/rl78-parse.y"
3363 { if (expr_is_saddr ((yyvsp[-3].exp)))
3364 { B1 (0xbd); SET_SA ((yyvsp[-3].exp)); O1 ((yyvsp[-3].exp)); WA((yyvsp[-3].exp)); }
3365 else if (expr_is_sfr ((yyvsp[-3].exp)))
3366 { B1 (0xbe); O1 ((yyvsp[-3].exp)); WA((yyvsp[-3].exp)); }
3367 else
3368 NOT_SFR_OR_SADDR;
3369 }
3370 #line 3371 "config/rl78-parse.c"
3371 break;
3372
3373 case 186: /* statement: MOVW AX ',' regw_na */
3374 #line 801 "./config/rl78-parse.y"
3375 { B1 (0x11); F ((yyvsp[0].regno), 5, 2); }
3376 #line 3377 "config/rl78-parse.c"
3377 break;
3378
3379 case 187: /* statement: MOVW regw_na ',' AX */
3380 #line 804 "./config/rl78-parse.y"
3381 { B1 (0x10); F ((yyvsp[-2].regno), 5, 2); }
3382 #line 3383 "config/rl78-parse.c"
3383 break;
3384
3385 case 188: /* statement: MOVW AX ',' opt_es '!' EXPR */
3386 #line 807 "./config/rl78-parse.y"
3387 { B1 (0xaf); O2 ((yyvsp[0].exp)); WA((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
3388 #line 3389 "config/rl78-parse.c"
3389 break;
3390
3391 case 189: /* statement: MOVW opt_es '!' EXPR ',' AX */
3392 #line 810 "./config/rl78-parse.y"
3393 { B1 (0xbf); O2 ((yyvsp[-2].exp)); WA((yyvsp[-2].exp)); rl78_linkrelax_addr16 (); }
3394 #line 3395 "config/rl78-parse.c"
3395 break;
3396
3397 case 190: /* statement: MOVW AX ',' opt_es '[' DE ']' */
3398 #line 813 "./config/rl78-parse.y"
3399 { B1 (0xa9); }
3400 #line 3401 "config/rl78-parse.c"
3401 break;
3402
3403 case 191: /* statement: MOVW opt_es '[' DE ']' ',' AX */
3404 #line 816 "./config/rl78-parse.y"
3405 { B1 (0xb9); }
3406 #line 3407 "config/rl78-parse.c"
3407 break;
3408
3409 case 192: /* statement: MOVW AX ',' opt_es '[' DE '+' EXPR ']' */
3410 #line 819 "./config/rl78-parse.y"
3411 { B1 (0xaa); O1 ((yyvsp[-1].exp)); }
3412 #line 3413 "config/rl78-parse.c"
3413 break;
3414
3415 case 193: /* statement: MOVW opt_es '[' DE '+' EXPR ']' ',' AX */
3416 #line 822 "./config/rl78-parse.y"
3417 { B1 (0xba); O1 ((yyvsp[-3].exp)); }
3418 #line 3419 "config/rl78-parse.c"
3419 break;
3420
3421 case 194: /* statement: MOVW AX ',' opt_es '[' HL ']' */
3422 #line 825 "./config/rl78-parse.y"
3423 { B1 (0xab); }
3424 #line 3425 "config/rl78-parse.c"
3425 break;
3426
3427 case 195: /* statement: MOVW opt_es '[' HL ']' ',' AX */
3428 #line 828 "./config/rl78-parse.y"
3429 { B1 (0xbb); }
3430 #line 3431 "config/rl78-parse.c"
3431 break;
3432
3433 case 196: /* statement: MOVW AX ',' opt_es '[' HL '+' EXPR ']' */
3434 #line 831 "./config/rl78-parse.y"
3435 { B1 (0xac); O1 ((yyvsp[-1].exp)); }
3436 #line 3437 "config/rl78-parse.c"
3437 break;
3438
3439 case 197: /* statement: MOVW opt_es '[' HL '+' EXPR ']' ',' AX */
3440 #line 834 "./config/rl78-parse.y"
3441 { B1 (0xbc); O1 ((yyvsp[-3].exp)); }
3442 #line 3443 "config/rl78-parse.c"
3443 break;
3444
3445 case 198: /* statement: MOVW AX ',' opt_es EXPR '[' B ']' */
3446 #line 837 "./config/rl78-parse.y"
3447 { B1 (0x59); O2 ((yyvsp[-3].exp)); }
3448 #line 3449 "config/rl78-parse.c"
3449 break;
3450
3451 case 199: /* statement: MOVW opt_es EXPR '[' B ']' ',' AX */
3452 #line 840 "./config/rl78-parse.y"
3453 { B1 (0x58); O2 ((yyvsp[-5].exp)); }
3454 #line 3455 "config/rl78-parse.c"
3455 break;
3456
3457 case 200: /* statement: MOVW AX ',' opt_es EXPR '[' C ']' */
3458 #line 843 "./config/rl78-parse.y"
3459 { B1 (0x69); O2 ((yyvsp[-3].exp)); }
3460 #line 3461 "config/rl78-parse.c"
3461 break;
3462
3463 case 201: /* statement: MOVW opt_es EXPR '[' C ']' ',' AX */
3464 #line 846 "./config/rl78-parse.y"
3465 { B1 (0x68); O2 ((yyvsp[-5].exp)); }
3466 #line 3467 "config/rl78-parse.c"
3467 break;
3468
3469 case 202: /* statement: MOVW AX ',' opt_es EXPR '[' BC ']' */
3470 #line 849 "./config/rl78-parse.y"
3471 { B1 (0x79); O2 ((yyvsp[-3].exp)); }
3472 #line 3473 "config/rl78-parse.c"
3473 break;
3474
3475 case 203: /* statement: MOVW AX ',' opt_es '[' BC ']' */
3476 #line 852 "./config/rl78-parse.y"
3477 { B3 (0x79, 0, 0); }
3478 #line 3479 "config/rl78-parse.c"
3479 break;
3480
3481 case 204: /* statement: MOVW opt_es EXPR '[' BC ']' ',' AX */
3482 #line 855 "./config/rl78-parse.y"
3483 { B1 (0x78); O2 ((yyvsp[-5].exp)); }
3484 #line 3485 "config/rl78-parse.c"
3485 break;
3486
3487 case 205: /* statement: MOVW opt_es '[' BC ']' ',' AX */
3488 #line 858 "./config/rl78-parse.y"
3489 { B3 (0x78, 0, 0); }
3490 #line 3491 "config/rl78-parse.c"
3491 break;
3492
3493 case 206: /* $@34: %empty */
3494 #line 860 "./config/rl78-parse.y"
3495 {NOT_ES}
3496 #line 3497 "config/rl78-parse.c"
3497 break;
3498
3499 case 207: /* statement: MOVW AX ',' opt_es '[' SP '+' EXPR ']' $@34 */
3500 #line 861 "./config/rl78-parse.y"
3501 { B1 (0xa8); O1 ((yyvsp[-2].exp)); WA((yyvsp[-2].exp));}
3502 #line 3503 "config/rl78-parse.c"
3503 break;
3504
3505 case 208: /* $@35: %empty */
3506 #line 863 "./config/rl78-parse.y"
3507 {NOT_ES}
3508 #line 3509 "config/rl78-parse.c"
3509 break;
3510
3511 case 209: /* statement: MOVW AX ',' opt_es '[' SP ']' $@35 */
3512 #line 864 "./config/rl78-parse.y"
3513 { B2 (0xa8, 0); }
3514 #line 3515 "config/rl78-parse.c"
3515 break;
3516
3517 case 210: /* $@36: %empty */
3518 #line 866 "./config/rl78-parse.y"
3519 {NOT_ES}
3520 #line 3521 "config/rl78-parse.c"
3521 break;
3522
3523 case 211: /* statement: MOVW opt_es '[' SP '+' EXPR ']' ',' AX $@36 */
3524 #line 867 "./config/rl78-parse.y"
3525 { B1 (0xb8); O1 ((yyvsp[-4].exp)); WA((yyvsp[-4].exp)); }
3526 #line 3527 "config/rl78-parse.c"
3527 break;
3528
3529 case 212: /* $@37: %empty */
3530 #line 869 "./config/rl78-parse.y"
3531 {NOT_ES}
3532 #line 3533 "config/rl78-parse.c"
3533 break;
3534
3535 case 213: /* statement: MOVW opt_es '[' SP ']' ',' AX $@37 */
3536 #line 870 "./config/rl78-parse.y"
3537 { B2 (0xb8, 0); }
3538 #line 3539 "config/rl78-parse.c"
3539 break;
3540
3541 case 214: /* $@38: %empty */
3542 #line 872 "./config/rl78-parse.y"
3543 {SA((yyvsp[0].exp))}
3544 #line 3545 "config/rl78-parse.c"
3545 break;
3546
3547 case 215: /* statement: MOVW regw_na ',' EXPR $@38 */
3548 #line 873 "./config/rl78-parse.y"
3549 { B1 (0xca); F ((yyvsp[-3].regno), 2, 2); SET_SA ((yyvsp[-1].exp)); O1 ((yyvsp[-1].exp)); WA((yyvsp[-1].exp)); }
3550 #line 3551 "config/rl78-parse.c"
3551 break;
3552
3553 case 216: /* statement: MOVW regw_na ',' opt_es '!' EXPR */
3554 #line 876 "./config/rl78-parse.y"
3555 { B1 (0xcb); F ((yyvsp[-4].regno), 2, 2); O2 ((yyvsp[0].exp)); WA((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
3556 #line 3557 "config/rl78-parse.c"
3557 break;
3558
3559 case 217: /* statement: MOVW SP ',' '#' EXPR */
3560 #line 879 "./config/rl78-parse.y"
3561 { B2 (0xcb, 0xf8); O2 ((yyvsp[0].exp)); }
3562 #line 3563 "config/rl78-parse.c"
3563 break;
3564
3565 case 218: /* statement: MOVW SP ',' AX */
3566 #line 882 "./config/rl78-parse.y"
3567 { B2 (0xbe, 0xf8); }
3568 #line 3569 "config/rl78-parse.c"
3569 break;
3570
3571 case 219: /* statement: MOVW AX ',' SP */
3572 #line 885 "./config/rl78-parse.y"
3573 { B2 (0xae, 0xf8); }
3574 #line 3575 "config/rl78-parse.c"
3575 break;
3576
3577 case 220: /* statement: MOVW regw_na ',' SP */
3578 #line 888 "./config/rl78-parse.y"
3579 { B3 (0xcb, 0xf8, 0xff); F ((yyvsp[-2].regno), 2, 2); }
3580 #line 3581 "config/rl78-parse.c"
3581 break;
3582
3583 case 221: /* statement: NOP */
3584 #line 893 "./config/rl78-parse.y"
3585 { B1 (0x00); }
3586 #line 3587 "config/rl78-parse.c"
3587 break;
3588
3589 case 222: /* statement: NOT1 CY */
3590 #line 898 "./config/rl78-parse.y"
3591 { B2 (0x71, 0xc0); }
3592 #line 3593 "config/rl78-parse.c"
3593 break;
3594
3595 case 223: /* statement: POP regw */
3596 #line 903 "./config/rl78-parse.y"
3597 { B1 (0xc0); F ((yyvsp[0].regno), 5, 2); }
3598 #line 3599 "config/rl78-parse.c"
3599 break;
3600
3601 case 224: /* statement: POP PSW */
3602 #line 906 "./config/rl78-parse.y"
3603 { B2 (0x61, 0xcd); }
3604 #line 3605 "config/rl78-parse.c"
3605 break;
3606
3607 case 225: /* statement: PUSH regw */
3608 #line 909 "./config/rl78-parse.y"
3609 { B1 (0xc1); F ((yyvsp[0].regno), 5, 2); }
3610 #line 3611 "config/rl78-parse.c"
3611 break;
3612
3613 case 226: /* statement: PUSH PSW */
3614 #line 912 "./config/rl78-parse.y"
3615 { B2 (0x61, 0xdd); }
3616 #line 3617 "config/rl78-parse.c"
3617 break;
3618
3619 case 227: /* statement: RET */
3620 #line 917 "./config/rl78-parse.y"
3621 { B1 (0xd7); }
3622 #line 3623 "config/rl78-parse.c"
3623 break;
3624
3625 case 228: /* statement: RETI */
3626 #line 920 "./config/rl78-parse.y"
3627 { B2 (0x61, 0xfc); }
3628 #line 3629 "config/rl78-parse.c"
3629 break;
3630
3631 case 229: /* statement: RETB */
3632 #line 923 "./config/rl78-parse.y"
3633 { B2 (0x61, 0xec); }
3634 #line 3635 "config/rl78-parse.c"
3635 break;
3636
3637 case 230: /* statement: ROL A ',' EXPR */
3638 #line 928 "./config/rl78-parse.y"
3639 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3640 { B2 (0x61, 0xeb); }
3641 }
3642 #line 3643 "config/rl78-parse.c"
3643 break;
3644
3645 case 231: /* statement: ROLC A ',' EXPR */
3646 #line 933 "./config/rl78-parse.y"
3647 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3648 { B2 (0x61, 0xdc); }
3649 }
3650 #line 3651 "config/rl78-parse.c"
3651 break;
3652
3653 case 232: /* statement: ROLWC AX ',' EXPR */
3654 #line 938 "./config/rl78-parse.y"
3655 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3656 { B2 (0x61, 0xee); }
3657 }
3658 #line 3659 "config/rl78-parse.c"
3659 break;
3660
3661 case 233: /* statement: ROLWC BC ',' EXPR */
3662 #line 943 "./config/rl78-parse.y"
3663 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3664 { B2 (0x61, 0xfe); }
3665 }
3666 #line 3667 "config/rl78-parse.c"
3667 break;
3668
3669 case 234: /* statement: ROR A ',' EXPR */
3670 #line 948 "./config/rl78-parse.y"
3671 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3672 { B2 (0x61, 0xdb); }
3673 }
3674 #line 3675 "config/rl78-parse.c"
3675 break;
3676
3677 case 235: /* statement: RORC A ',' EXPR */
3678 #line 953 "./config/rl78-parse.y"
3679 { if (check_expr_is_const ((yyvsp[0].exp), 1, 1))
3680 { B2 (0x61, 0xfb);}
3681 }
3682 #line 3683 "config/rl78-parse.c"
3683 break;
3684
3685 case 236: /* statement: SAR A ',' EXPR */
3686 #line 960 "./config/rl78-parse.y"
3687 { if (check_expr_is_const ((yyvsp[0].exp), 1, 7))
3688 { B2 (0x31, 0x0b); FE ((yyvsp[0].exp), 9, 3); }
3689 }
3690 #line 3691 "config/rl78-parse.c"
3691 break;
3692
3693 case 237: /* statement: SARW AX ',' EXPR */
3694 #line 965 "./config/rl78-parse.y"
3695 { if (check_expr_is_const ((yyvsp[0].exp), 1, 15))
3696 { B2 (0x31, 0x0f); FE ((yyvsp[0].exp), 8, 4); }
3697 }
3698 #line 3699 "config/rl78-parse.c"
3699 break;
3700
3701 case 238: /* statement: SEL RB0 */
3702 #line 972 "./config/rl78-parse.y"
3703 { B2 (0x61, 0xcf); }
3704 #line 3705 "config/rl78-parse.c"
3705 break;
3706
3707 case 239: /* statement: SEL RB1 */
3708 #line 975 "./config/rl78-parse.y"
3709 { B2 (0x61, 0xdf); }
3710 #line 3711 "config/rl78-parse.c"
3711 break;
3712
3713 case 240: /* statement: SEL RB2 */
3714 #line 978 "./config/rl78-parse.y"
3715 { B2 (0x61, 0xef); }
3716 #line 3717 "config/rl78-parse.c"
3717 break;
3718
3719 case 241: /* statement: SEL RB3 */
3720 #line 981 "./config/rl78-parse.y"
3721 { B2 (0x61, 0xff); }
3722 #line 3723 "config/rl78-parse.c"
3723 break;
3724
3725 case 242: /* statement: SHL A ',' EXPR */
3726 #line 986 "./config/rl78-parse.y"
3727 { if (check_expr_is_const ((yyvsp[0].exp), 1, 7))
3728 { B2 (0x31, 0x09); FE ((yyvsp[0].exp), 9, 3); }
3729 }
3730 #line 3731 "config/rl78-parse.c"
3731 break;
3732
3733 case 243: /* statement: SHL B ',' EXPR */
3734 #line 991 "./config/rl78-parse.y"
3735 { if (check_expr_is_const ((yyvsp[0].exp), 1, 7))
3736 { B2 (0x31, 0x08); FE ((yyvsp[0].exp), 9, 3); }
3737 }
3738 #line 3739 "config/rl78-parse.c"
3739 break;
3740
3741 case 244: /* statement: SHL C ',' EXPR */
3742 #line 996 "./config/rl78-parse.y"
3743 { if (check_expr_is_const ((yyvsp[0].exp), 1, 7))
3744 { B2 (0x31, 0x07); FE ((yyvsp[0].exp), 9, 3); }
3745 }
3746 #line 3747 "config/rl78-parse.c"
3747 break;
3748
3749 case 245: /* statement: SHLW AX ',' EXPR */
3750 #line 1001 "./config/rl78-parse.y"
3751 { if (check_expr_is_const ((yyvsp[0].exp), 1, 15))
3752 { B2 (0x31, 0x0d); FE ((yyvsp[0].exp), 8, 4); }
3753 }
3754 #line 3755 "config/rl78-parse.c"
3755 break;
3756
3757 case 246: /* statement: SHLW BC ',' EXPR */
3758 #line 1006 "./config/rl78-parse.y"
3759 { if (check_expr_is_const ((yyvsp[0].exp), 1, 15))
3760 { B2 (0x31, 0x0c); FE ((yyvsp[0].exp), 8, 4); }
3761 }
3762 #line 3763 "config/rl78-parse.c"
3763 break;
3764
3765 case 247: /* statement: SHR A ',' EXPR */
3766 #line 1013 "./config/rl78-parse.y"
3767 { if (check_expr_is_const ((yyvsp[0].exp), 1, 7))
3768 { B2 (0x31, 0x0a); FE ((yyvsp[0].exp), 9, 3); }
3769 }
3770 #line 3771 "config/rl78-parse.c"
3771 break;
3772
3773 case 248: /* statement: SHRW AX ',' EXPR */
3774 #line 1018 "./config/rl78-parse.y"
3775 { if (check_expr_is_const ((yyvsp[0].exp), 1, 15))
3776 { B2 (0x31, 0x0e); FE ((yyvsp[0].exp), 8, 4); }
3777 }
3778 #line 3779 "config/rl78-parse.c"
3779 break;
3780
3781 case 249: /* statement: SKC */
3782 #line 1025 "./config/rl78-parse.y"
3783 { B2 (0x61, 0xc8); rl78_relax (RL78_RELAX_BRANCH, 0); }
3784 #line 3785 "config/rl78-parse.c"
3785 break;
3786
3787 case 250: /* statement: SKH */
3788 #line 1028 "./config/rl78-parse.y"
3789 { B2 (0x61, 0xe3); rl78_relax (RL78_RELAX_BRANCH, 0); }
3790 #line 3791 "config/rl78-parse.c"
3791 break;
3792
3793 case 251: /* statement: SKNC */
3794 #line 1031 "./config/rl78-parse.y"
3795 { B2 (0x61, 0xd8); rl78_relax (RL78_RELAX_BRANCH, 0); }
3796 #line 3797 "config/rl78-parse.c"
3797 break;
3798
3799 case 252: /* statement: SKNH */
3800 #line 1034 "./config/rl78-parse.y"
3801 { B2 (0x61, 0xf3); rl78_relax (RL78_RELAX_BRANCH, 0); }
3802 #line 3803 "config/rl78-parse.c"
3803 break;
3804
3805 case 253: /* statement: SKNZ */
3806 #line 1037 "./config/rl78-parse.y"
3807 { B2 (0x61, 0xf8); rl78_relax (RL78_RELAX_BRANCH, 0); }
3808 #line 3809 "config/rl78-parse.c"
3809 break;
3810
3811 case 254: /* statement: SKZ */
3812 #line 1040 "./config/rl78-parse.y"
3813 { B2 (0x61, 0xe8); rl78_relax (RL78_RELAX_BRANCH, 0); }
3814 #line 3815 "config/rl78-parse.c"
3815 break;
3816
3817 case 255: /* statement: STOP */
3818 #line 1045 "./config/rl78-parse.y"
3819 { B2 (0x61, 0xfd); }
3820 #line 3821 "config/rl78-parse.c"
3821 break;
3822
3823 case 256: /* statement: XCH A ',' regb_na */
3824 #line 1050 "./config/rl78-parse.y"
3825 { if ((yyvsp[0].regno) == 0) /* X */
3826 { B1 (0x08); }
3827 else
3828 { B2 (0x61, 0x88); F ((yyvsp[0].regno), 13, 3); }
3829 }
3830 #line 3831 "config/rl78-parse.c"
3831 break;
3832
3833 case 257: /* statement: XCH A ',' opt_es '!' EXPR */
3834 #line 1057 "./config/rl78-parse.y"
3835 { B2 (0x61, 0xaa); O2 ((yyvsp[0].exp)); rl78_linkrelax_addr16 (); }
3836 #line 3837 "config/rl78-parse.c"
3837 break;
3838
3839 case 258: /* statement: XCH A ',' opt_es '[' DE ']' */
3840 #line 1060 "./config/rl78-parse.y"
3841 { B2 (0x61, 0xae); }
3842 #line 3843 "config/rl78-parse.c"
3843 break;
3844
3845 case 259: /* statement: XCH A ',' opt_es '[' DE '+' EXPR ']' */
3846 #line 1063 "./config/rl78-parse.y"
3847 { B2 (0x61, 0xaf); O1 ((yyvsp[-1].exp)); }
3848 #line 3849 "config/rl78-parse.c"
3849 break;
3850
3851 case 260: /* statement: XCH A ',' opt_es '[' HL ']' */
3852 #line 1066 "./config/rl78-parse.y"
3853 { B2 (0x61, 0xac); }
3854 #line 3855 "config/rl78-parse.c"
3855 break;
3856
3857 case 261: /* statement: XCH A ',' opt_es '[' HL '+' EXPR ']' */
3858 #line 1069 "./config/rl78-parse.y"
3859 { B2 (0x61, 0xad); O1 ((yyvsp[-1].exp)); }
3860 #line 3861 "config/rl78-parse.c"
3861 break;
3862
3863 case 262: /* statement: XCH A ',' opt_es '[' HL '+' B ']' */
3864 #line 1072 "./config/rl78-parse.y"
3865 { B2 (0x61, 0xb9); }
3866 #line 3867 "config/rl78-parse.c"
3867 break;
3868
3869 case 263: /* statement: XCH A ',' opt_es '[' HL '+' C ']' */
3870 #line 1075 "./config/rl78-parse.y"
3871 { B2 (0x61, 0xa9); }
3872 #line 3873 "config/rl78-parse.c"
3873 break;
3874
3875 case 264: /* statement: XCH A ',' EXPR */
3876 #line 1078 "./config/rl78-parse.y"
3877 { if (expr_is_sfr ((yyvsp[0].exp)))
3878 { B2 (0x61, 0xab); O1 ((yyvsp[0].exp)); }
3879 else if (expr_is_saddr ((yyvsp[0].exp)))
3880 { B2 (0x61, 0xa8); SET_SA ((yyvsp[0].exp)); O1 ((yyvsp[0].exp)); }
3881 else
3882 NOT_SFR_OR_SADDR;
3883 }
3884 #line 3885 "config/rl78-parse.c"
3885 break;
3886
3887 case 265: /* statement: XCHW AX ',' regw_na */
3888 #line 1089 "./config/rl78-parse.y"
3889 { B1 (0x31); F ((yyvsp[0].regno), 5, 2); }
3890 #line 3891 "config/rl78-parse.c"
3891 break;
3892
3893 case 267: /* opt_es: ES ':' */
3894 #line 1099 "./config/rl78-parse.y"
3895 { rl78_prefix (0x11); }
3896 #line 3897 "config/rl78-parse.c"
3897 break;
3898
3899 case 268: /* regb: X */
3900 #line 1102 "./config/rl78-parse.y"
3901 { (yyval.regno) = 0; }
3902 #line 3903 "config/rl78-parse.c"
3903 break;
3904
3905 case 269: /* regb: A */
3906 #line 1103 "./config/rl78-parse.y"
3907 { (yyval.regno) = 1; }
3908 #line 3909 "config/rl78-parse.c"
3909 break;
3910
3911 case 270: /* regb: C */
3912 #line 1104 "./config/rl78-parse.y"
3913 { (yyval.regno) = 2; }
3914 #line 3915 "config/rl78-parse.c"
3915 break;
3916
3917 case 271: /* regb: B */
3918 #line 1105 "./config/rl78-parse.y"
3919 { (yyval.regno) = 3; }
3920 #line 3921 "config/rl78-parse.c"
3921 break;
3922
3923 case 272: /* regb: E */
3924 #line 1106 "./config/rl78-parse.y"
3925 { (yyval.regno) = 4; }
3926 #line 3927 "config/rl78-parse.c"
3927 break;
3928
3929 case 273: /* regb: D */
3930 #line 1107 "./config/rl78-parse.y"
3931 { (yyval.regno) = 5; }
3932 #line 3933 "config/rl78-parse.c"
3933 break;
3934
3935 case 274: /* regb: L */
3936 #line 1108 "./config/rl78-parse.y"
3937 { (yyval.regno) = 6; }
3938 #line 3939 "config/rl78-parse.c"
3939 break;
3940
3941 case 275: /* regb: H */
3942 #line 1109 "./config/rl78-parse.y"
3943 { (yyval.regno) = 7; }
3944 #line 3945 "config/rl78-parse.c"
3945 break;
3946
3947 case 276: /* regb_na: X */
3948 #line 1112 "./config/rl78-parse.y"
3949 { (yyval.regno) = 0; }
3950 #line 3951 "config/rl78-parse.c"
3951 break;
3952
3953 case 277: /* regb_na: C */
3954 #line 1113 "./config/rl78-parse.y"
3955 { (yyval.regno) = 2; }
3956 #line 3957 "config/rl78-parse.c"
3957 break;
3958
3959 case 278: /* regb_na: B */
3960 #line 1114 "./config/rl78-parse.y"
3961 { (yyval.regno) = 3; }
3962 #line 3963 "config/rl78-parse.c"
3963 break;
3964
3965 case 279: /* regb_na: E */
3966 #line 1115 "./config/rl78-parse.y"
3967 { (yyval.regno) = 4; }
3968 #line 3969 "config/rl78-parse.c"
3969 break;
3970
3971 case 280: /* regb_na: D */
3972 #line 1116 "./config/rl78-parse.y"
3973 { (yyval.regno) = 5; }
3974 #line 3975 "config/rl78-parse.c"
3975 break;
3976
3977 case 281: /* regb_na: L */
3978 #line 1117 "./config/rl78-parse.y"
3979 { (yyval.regno) = 6; }
3980 #line 3981 "config/rl78-parse.c"
3981 break;
3982
3983 case 282: /* regb_na: H */
3984 #line 1118 "./config/rl78-parse.y"
3985 { (yyval.regno) = 7; }
3986 #line 3987 "config/rl78-parse.c"
3987 break;
3988
3989 case 283: /* regw: AX */
3990 #line 1121 "./config/rl78-parse.y"
3991 { (yyval.regno) = 0; }
3992 #line 3993 "config/rl78-parse.c"
3993 break;
3994
3995 case 284: /* regw: BC */
3996 #line 1122 "./config/rl78-parse.y"
3997 { (yyval.regno) = 1; }
3998 #line 3999 "config/rl78-parse.c"
3999 break;
4000
4001 case 285: /* regw: DE */
4002 #line 1123 "./config/rl78-parse.y"
4003 { (yyval.regno) = 2; }
4004 #line 4005 "config/rl78-parse.c"
4005 break;
4006
4007 case 286: /* regw: HL */
4008 #line 1124 "./config/rl78-parse.y"
4009 { (yyval.regno) = 3; }
4010 #line 4011 "config/rl78-parse.c"
4011 break;
4012
4013 case 287: /* regw_na: BC */
4014 #line 1127 "./config/rl78-parse.y"
4015 { (yyval.regno) = 1; }
4016 #line 4017 "config/rl78-parse.c"
4017 break;
4018
4019 case 288: /* regw_na: DE */
4020 #line 1128 "./config/rl78-parse.y"
4021 { (yyval.regno) = 2; }
4022 #line 4023 "config/rl78-parse.c"
4023 break;
4024
4025 case 289: /* regw_na: HL */
4026 #line 1129 "./config/rl78-parse.y"
4027 { (yyval.regno) = 3; }
4028 #line 4029 "config/rl78-parse.c"
4029 break;
4030
4031 case 290: /* sfr: SPL */
4032 #line 1132 "./config/rl78-parse.y"
4033 { (yyval.regno) = 0xf8; }
4034 #line 4035 "config/rl78-parse.c"
4035 break;
4036
4037 case 291: /* sfr: SPH */
4038 #line 1133 "./config/rl78-parse.y"
4039 { (yyval.regno) = 0xf9; }
4040 #line 4041 "config/rl78-parse.c"
4041 break;
4042
4043 case 292: /* sfr: PSW */
4044 #line 1134 "./config/rl78-parse.y"
4045 { (yyval.regno) = 0xfa; }
4046 #line 4047 "config/rl78-parse.c"
4047 break;
4048
4049 case 293: /* sfr: CS */
4050 #line 1135 "./config/rl78-parse.y"
4051 { (yyval.regno) = 0xfc; }
4052 #line 4053 "config/rl78-parse.c"
4053 break;
4054
4055 case 294: /* sfr: ES */
4056 #line 1136 "./config/rl78-parse.y"
4057 { (yyval.regno) = 0xfd; }
4058 #line 4059 "config/rl78-parse.c"
4059 break;
4060
4061 case 295: /* sfr: PMC */
4062 #line 1137 "./config/rl78-parse.y"
4063 { (yyval.regno) = 0xfe; }
4064 #line 4065 "config/rl78-parse.c"
4065 break;
4066
4067 case 296: /* sfr: MEM */
4068 #line 1138 "./config/rl78-parse.y"
4069 { (yyval.regno) = 0xff; }
4070 #line 4071 "config/rl78-parse.c"
4071 break;
4072
4073 case 297: /* addsub: ADD */
4074 #line 1144 "./config/rl78-parse.y"
4075 { (yyval.regno) = 0x00; }
4076 #line 4077 "config/rl78-parse.c"
4077 break;
4078
4079 case 298: /* addsub: ADDC */
4080 #line 1145 "./config/rl78-parse.y"
4081 { (yyval.regno) = 0x10; }
4082 #line 4083 "config/rl78-parse.c"
4083 break;
4084
4085 case 299: /* addsub: SUB */
4086 #line 1146 "./config/rl78-parse.y"
4087 { (yyval.regno) = 0x20; }
4088 #line 4089 "config/rl78-parse.c"
4089 break;
4090
4091 case 300: /* addsub: SUBC */
4092 #line 1147 "./config/rl78-parse.y"
4093 { (yyval.regno) = 0x30; }
4094 #line 4095 "config/rl78-parse.c"
4095 break;
4096
4097 case 301: /* addsub: CMP */
4098 #line 1148 "./config/rl78-parse.y"
4099 { (yyval.regno) = 0x40; }
4100 #line 4101 "config/rl78-parse.c"
4101 break;
4102
4103 case 302: /* addsub: AND_ */
4104 #line 1149 "./config/rl78-parse.y"
4105 { (yyval.regno) = 0x50; }
4106 #line 4107 "config/rl78-parse.c"
4107 break;
4108
4109 case 303: /* addsub: OR */
4110 #line 1150 "./config/rl78-parse.y"
4111 { (yyval.regno) = 0x60; }
4112 #line 4113 "config/rl78-parse.c"
4113 break;
4114
4115 case 304: /* addsub: XOR */
4116 #line 1151 "./config/rl78-parse.y"
4117 { (yyval.regno) = 0x70; }
4118 #line 4119 "config/rl78-parse.c"
4119 break;
4120
4121 case 305: /* addsubw: ADDW */
4122 #line 1154 "./config/rl78-parse.y"
4123 { (yyval.regno) = 0x00; }
4124 #line 4125 "config/rl78-parse.c"
4125 break;
4126
4127 case 306: /* addsubw: SUBW */
4128 #line 1155 "./config/rl78-parse.y"
4129 { (yyval.regno) = 0x20; }
4130 #line 4131 "config/rl78-parse.c"
4131 break;
4132
4133 case 307: /* addsubw: CMPW */
4134 #line 1156 "./config/rl78-parse.y"
4135 { (yyval.regno) = 0x40; }
4136 #line 4137 "config/rl78-parse.c"
4137 break;
4138
4139 case 308: /* andor1: AND1 */
4140 #line 1159 "./config/rl78-parse.y"
4141 { (yyval.regno) = 0x05; rl78_bit_insn = 1; }
4142 #line 4143 "config/rl78-parse.c"
4143 break;
4144
4145 case 309: /* andor1: OR1 */
4146 #line 1160 "./config/rl78-parse.y"
4147 { (yyval.regno) = 0x06; rl78_bit_insn = 1; }
4148 #line 4149 "config/rl78-parse.c"
4149 break;
4150
4151 case 310: /* andor1: XOR1 */
4152 #line 1161 "./config/rl78-parse.y"
4153 { (yyval.regno) = 0x07; rl78_bit_insn = 1; }
4154 #line 4155 "config/rl78-parse.c"
4155 break;
4156
4157 case 311: /* bt_bf: BT */
4158 #line 1164 "./config/rl78-parse.y"
4159 { (yyval.regno) = 0x02; rl78_bit_insn = 1; rl78_linkrelax_branch (); }
4160 #line 4161 "config/rl78-parse.c"
4161 break;
4162
4163 case 312: /* bt_bf: BF */
4164 #line 1165 "./config/rl78-parse.y"
4165 { (yyval.regno) = 0x04; rl78_bit_insn = 1; rl78_linkrelax_branch (); }
4166 #line 4167 "config/rl78-parse.c"
4167 break;
4168
4169 case 313: /* bt_bf: BTCLR */
4170 #line 1166 "./config/rl78-parse.y"
4171 { (yyval.regno) = 0x00; rl78_bit_insn = 1; }
4172 #line 4173 "config/rl78-parse.c"
4173 break;
4174
4175 case 314: /* setclr1: SET1 */
4176 #line 1169 "./config/rl78-parse.y"
4177 { (yyval.regno) = 0; rl78_bit_insn = 1; }
4178 #line 4179 "config/rl78-parse.c"
4179 break;
4180
4181 case 315: /* setclr1: CLR1 */
4182 #line 1170 "./config/rl78-parse.y"
4183 { (yyval.regno) = 1; rl78_bit_insn = 1; }
4184 #line 4185 "config/rl78-parse.c"
4185 break;
4186
4187 case 316: /* oneclrb: ONEB */
4188 #line 1173 "./config/rl78-parse.y"
4189 { (yyval.regno) = 0x00; }
4190 #line 4191 "config/rl78-parse.c"
4191 break;
4192
4193 case 317: /* oneclrb: CLRB */
4194 #line 1174 "./config/rl78-parse.y"
4195 { (yyval.regno) = 0x10; }
4196 #line 4197 "config/rl78-parse.c"
4197 break;
4198
4199 case 318: /* oneclrw: ONEW */
4200 #line 1177 "./config/rl78-parse.y"
4201 { (yyval.regno) = 0x00; }
4202 #line 4203 "config/rl78-parse.c"
4203 break;
4204
4205 case 319: /* oneclrw: CLRW */
4206 #line 1178 "./config/rl78-parse.y"
4207 { (yyval.regno) = 0x10; }
4208 #line 4209 "config/rl78-parse.c"
4209 break;
4210
4211 case 320: /* incdec: INC */
4212 #line 1181 "./config/rl78-parse.y"
4213 { (yyval.regno) = 0x00; }
4214 #line 4215 "config/rl78-parse.c"
4215 break;
4216
4217 case 321: /* incdec: DEC */
4218 #line 1182 "./config/rl78-parse.y"
4219 { (yyval.regno) = 0x10; }
4220 #line 4221 "config/rl78-parse.c"
4221 break;
4222
4223 case 322: /* incdecw: INCW */
4224 #line 1185 "./config/rl78-parse.y"
4225 { (yyval.regno) = 0x00; }
4226 #line 4227 "config/rl78-parse.c"
4227 break;
4228
4229 case 323: /* incdecw: DECW */
4230 #line 1186 "./config/rl78-parse.y"
4231 { (yyval.regno) = 0x10; }
4232 #line 4233 "config/rl78-parse.c"
4233 break;
4234
4235 case 324: /* mov1: MOV1 */
4236 #line 1189 "./config/rl78-parse.y"
4237 { rl78_bit_insn = 1; }
4238 #line 4239 "config/rl78-parse.c"
4239 break;
4240
4241
4242 #line 4243 "config/rl78-parse.c"
4243
4244 default: break;
4245 }
4246 /* User semantic actions sometimes alter yychar, and that requires
4247 that yytoken be updated with the new translation. We take the
4248 approach of translating immediately before every use of yytoken.
4249 One alternative is translating here after every semantic action,
4250 but that translation would be missed if the semantic action invokes
4251 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4252 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
4253 incorrect destructor might then be invoked immediately. In the
4254 case of YYERROR or YYBACKUP, subsequent parser actions might lead
4255 to an incorrect destructor call or verbose syntax error message
4256 before the lookahead is translated. */
4257 YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
4258
4259 YYPOPSTACK (yylen);
4260 yylen = 0;
4261
4262 *++yyvsp = yyval;
4263
4264 /* Now 'shift' the result of the reduction. Determine what state
4265 that goes to, based on the state we popped back to and the rule
4266 number reduced by. */
4267 {
4268 const int yylhs = yyr1[yyn] - YYNTOKENS;
4269 const int yyi = yypgoto[yylhs] + *yyssp;
4270 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
4271 ? yytable[yyi]
4272 : yydefgoto[yylhs]);
4273 }
4274
4275 goto yynewstate;
4276
4277
4278 /*--------------------------------------.
4279 | yyerrlab -- here on detecting error. |
4280 `--------------------------------------*/
4281 yyerrlab:
4282 /* Make sure we have latest lookahead translation. See comments at
4283 user semantic actions for why this is necessary. */
4284 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
4285 /* If not already recovering from an error, report this error. */
4286 if (!yyerrstatus)
4287 {
4288 ++yynerrs;
4289 yyerror (YY_("syntax error"));
4290 }
4291
4292 if (yyerrstatus == 3)
4293 {
4294 /* If just tried and failed to reuse lookahead token after an
4295 error, discard it. */
4296
4297 if (yychar <= YYEOF)
4298 {
4299 /* Return failure if at end of input. */
4300 if (yychar == YYEOF)
4301 YYABORT;
4302 }
4303 else
4304 {
4305 yydestruct ("Error: discarding",
4306 yytoken, &yylval);
4307 yychar = YYEMPTY;
4308 }
4309 }
4310
4311 /* Else will try to reuse lookahead token after shifting the error
4312 token. */
4313 goto yyerrlab1;
4314
4315
4316 /*---------------------------------------------------.
4317 | yyerrorlab -- error raised explicitly by YYERROR. |
4318 `---------------------------------------------------*/
4319 yyerrorlab:
4320 /* Pacify compilers when the user code never invokes YYERROR and the
4321 label yyerrorlab therefore never appears in user code. */
4322 if (0)
4323 YYERROR;
4324 ++yynerrs;
4325
4326 /* Do not reclaim the symbols of the rule whose action triggered
4327 this YYERROR. */
4328 YYPOPSTACK (yylen);
4329 yylen = 0;
4330 YY_STACK_PRINT (yyss, yyssp);
4331 yystate = *yyssp;
4332 goto yyerrlab1;
4333
4334
4335 /*-------------------------------------------------------------.
4336 | yyerrlab1 -- common code for both syntax error and YYERROR. |
4337 `-------------------------------------------------------------*/
4338 yyerrlab1:
4339 yyerrstatus = 3; /* Each real token shifted decrements this. */
4340
4341 /* Pop stack until we find a state that shifts the error token. */
4342 for (;;)
4343 {
4344 yyn = yypact[yystate];
4345 if (!yypact_value_is_default (yyn))
4346 {
4347 yyn += YYSYMBOL_YYerror;
4348 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4349 {
4350 yyn = yytable[yyn];
4351 if (0 < yyn)
4352 break;
4353 }
4354 }
4355
4356 /* Pop the current state because it cannot handle the error token. */
4357 if (yyssp == yyss)
4358 YYABORT;
4359
4360
4361 yydestruct ("Error: popping",
4362 YY_ACCESSING_SYMBOL (yystate), yyvsp);
4363 YYPOPSTACK (1);
4364 yystate = *yyssp;
4365 YY_STACK_PRINT (yyss, yyssp);
4366 }
4367
4368 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4369 *++yyvsp = yylval;
4370 YY_IGNORE_MAYBE_UNINITIALIZED_END
4371
4372
4373 /* Shift the error token. */
4374 YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
4375
4376 yystate = yyn;
4377 goto yynewstate;
4378
4379
4380 /*-------------------------------------.
4381 | yyacceptlab -- YYACCEPT comes here. |
4382 `-------------------------------------*/
4383 yyacceptlab:
4384 yyresult = 0;
4385 goto yyreturnlab;
4386
4387
4388 /*-----------------------------------.
4389 | yyabortlab -- YYABORT comes here. |
4390 `-----------------------------------*/
4391 yyabortlab:
4392 yyresult = 1;
4393 goto yyreturnlab;
4394
4395
4396 /*-----------------------------------------------------------.
4397 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
4398 `-----------------------------------------------------------*/
4399 yyexhaustedlab:
4400 yyerror (YY_("memory exhausted"));
4401 yyresult = 2;
4402 goto yyreturnlab;
4403
4404
4405 /*----------------------------------------------------------.
4406 | yyreturnlab -- parsing is finished, clean up and return. |
4407 `----------------------------------------------------------*/
4408 yyreturnlab:
4409 if (yychar != YYEMPTY)
4410 {
4411 /* Make sure we have latest lookahead translation. See comments at
4412 user semantic actions for why this is necessary. */
4413 yytoken = YYTRANSLATE (yychar);
4414 yydestruct ("Cleanup: discarding lookahead",
4415 yytoken, &yylval);
4416 }
4417 /* Do not reclaim the symbols of the rule whose action triggered
4418 this YYABORT or YYACCEPT. */
4419 YYPOPSTACK (yylen);
4420 YY_STACK_PRINT (yyss, yyssp);
4421 while (yyssp != yyss)
4422 {
4423 yydestruct ("Cleanup: popping",
4424 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
4425 YYPOPSTACK (1);
4426 }
4427 #ifndef yyoverflow
4428 if (yyss != yyssa)
4429 YYSTACK_FREE (yyss);
4430 #endif
4431
4432 return yyresult;
4433 }
4434
4435 #line 1192 "./config/rl78-parse.y"
4436
4437 /* ====================================================================== */
4438
4439 static struct
4440 {
4441 const char * string;
4442 int token;
4443 int val;
4444 }
4445 token_table[] =
4446 {
4447 { "r0", X, 0 },
4448 { "r1", A, 1 },
4449 { "r2", C, 2 },
4450 { "r3", B, 3 },
4451 { "r4", E, 4 },
4452 { "r5", D, 5 },
4453 { "r6", L, 6 },
4454 { "r7", H, 7 },
4455 { "x", X, 0 },
4456 { "a", A, 1 },
4457 { "c", C, 2 },
4458 { "b", B, 3 },
4459 { "e", E, 4 },
4460 { "d", D, 5 },
4461 { "l", L, 6 },
4462 { "h", H, 7 },
4463
4464 { "rp0", AX, 0 },
4465 { "rp1", BC, 1 },
4466 { "rp2", DE, 2 },
4467 { "rp3", HL, 3 },
4468 { "ax", AX, 0 },
4469 { "bc", BC, 1 },
4470 { "de", DE, 2 },
4471 { "hl", HL, 3 },
4472
4473 { "RB0", RB0, 0 },
4474 { "RB1", RB1, 1 },
4475 { "RB2", RB2, 2 },
4476 { "RB3", RB3, 3 },
4477
4478 { "sp", SP, 0 },
4479 { "cy", CY, 0 },
4480
4481 { "spl", SPL, 0xf8 },
4482 { "sph", SPH, 0xf9 },
4483 { "psw", PSW, 0xfa },
4484 { "cs", CS, 0xfc },
4485 { "es", ES, 0xfd },
4486 { "pmc", PMC, 0xfe },
4487 { "mem", MEM, 0xff },
4488
4489 { ".s", DOT_S, 0 },
4490 { ".b", DOT_B, 0 },
4491 { ".w", DOT_W, 0 },
4492 { ".l", DOT_L, 0 },
4493 { ".a", DOT_A , 0},
4494 { ".ub", DOT_UB, 0 },
4495 { ".uw", DOT_UW , 0},
4496
4497 { "c", FLAG, 0 },
4498 { "z", FLAG, 1 },
4499 { "s", FLAG, 2 },
4500 { "o", FLAG, 3 },
4501 { "i", FLAG, 8 },
4502 { "u", FLAG, 9 },
4503
4504 #define OPC(x) { #x, x, IS_OPCODE }
4505
4506 OPC(ADD),
4507 OPC(ADDC),
4508 OPC(ADDW),
4509 { "and", AND_, IS_OPCODE },
4510 OPC(AND1),
4511 OPC(BC),
4512 OPC(BF),
4513 OPC(BH),
4514 OPC(BNC),
4515 OPC(BNH),
4516 OPC(BNZ),
4517 OPC(BR),
4518 OPC(BRK),
4519 OPC(BRK1),
4520 OPC(BT),
4521 OPC(BTCLR),
4522 OPC(BZ),
4523 OPC(CALL),
4524 OPC(CALLT),
4525 OPC(CLR1),
4526 OPC(CLRB),
4527 OPC(CLRW),
4528 OPC(CMP),
4529 OPC(CMP0),
4530 OPC(CMPS),
4531 OPC(CMPW),
4532 OPC(DEC),
4533 OPC(DECW),
4534 OPC(DI),
4535 OPC(DIVHU),
4536 OPC(DIVWU),
4537 OPC(EI),
4538 OPC(HALT),
4539 OPC(INC),
4540 OPC(INCW),
4541 OPC(MACH),
4542 OPC(MACHU),
4543 OPC(MOV),
4544 OPC(MOV1),
4545 OPC(MOVS),
4546 OPC(MOVW),
4547 OPC(MULH),
4548 OPC(MULHU),
4549 OPC(MULU),
4550 OPC(NOP),
4551 OPC(NOT1),
4552 OPC(ONEB),
4553 OPC(ONEW),
4554 OPC(OR),
4555 OPC(OR1),
4556 OPC(POP),
4557 OPC(PUSH),
4558 OPC(RET),
4559 OPC(RETI),
4560 OPC(RETB),
4561 OPC(ROL),
4562 OPC(ROLC),
4563 OPC(ROLWC),
4564 OPC(ROR),
4565 OPC(RORC),
4566 OPC(SAR),
4567 OPC(SARW),
4568 OPC(SEL),
4569 OPC(SET1),
4570 OPC(SHL),
4571 OPC(SHLW),
4572 OPC(SHR),
4573 OPC(SHRW),
4574 OPC(SKC),
4575 OPC(SKH),
4576 OPC(SKNC),
4577 OPC(SKNH),
4578 OPC(SKNZ),
4579 OPC(SKZ),
4580 OPC(STOP),
4581 OPC(SUB),
4582 OPC(SUBC),
4583 OPC(SUBW),
4584 OPC(XCH),
4585 OPC(XCHW),
4586 OPC(XOR),
4587 OPC(XOR1),
4588 };
4589
4590 #define NUM_TOKENS (sizeof (token_table) / sizeof (token_table[0]))
4591
4592 void
rl78_lex_init(char * beginning,char * ending)4593 rl78_lex_init (char * beginning, char * ending)
4594 {
4595 rl78_init_start = beginning;
4596 rl78_lex_start = beginning;
4597 rl78_lex_end = ending;
4598 rl78_in_brackets = 0;
4599 rl78_last_token = 0;
4600
4601 rl78_bit_insn = 0;
4602
4603 setbuf (stdout, 0);
4604 }
4605
4606 /* Return a pointer to the '.' in a bit index expression (like
4607 foo.5), or NULL if none is found. */
4608 static char *
find_bit_index(char * tok)4609 find_bit_index (char *tok)
4610 {
4611 char *last_dot = NULL;
4612 char *last_digit = NULL;
4613 while (*tok && *tok != ',')
4614 {
4615 if (*tok == '.')
4616 {
4617 last_dot = tok;
4618 last_digit = NULL;
4619 }
4620 else if (*tok >= '0' && *tok <= '7'
4621 && last_dot != NULL
4622 && last_digit == NULL)
4623 {
4624 last_digit = tok;
4625 }
4626 else if (ISSPACE (*tok))
4627 {
4628 /* skip */
4629 }
4630 else
4631 {
4632 last_dot = NULL;
4633 last_digit = NULL;
4634 }
4635 tok ++;
4636 }
4637 if (last_dot != NULL
4638 && last_digit != NULL)
4639 return last_dot;
4640 return NULL;
4641 }
4642
4643 static int
rl78_lex(void)4644 rl78_lex (void)
4645 {
4646 /*unsigned int ci;*/
4647 char * save_input_pointer;
4648 char * bit = NULL;
4649
4650 while (ISSPACE (*rl78_lex_start)
4651 && rl78_lex_start != rl78_lex_end)
4652 rl78_lex_start ++;
4653
4654 rl78_last_exp_start = rl78_lex_start;
4655
4656 if (rl78_lex_start == rl78_lex_end)
4657 return 0;
4658
4659 if (ISALPHA (*rl78_lex_start)
4660 || (*rl78_lex_start == '.' && ISALPHA (rl78_lex_start[1])))
4661 {
4662 unsigned int i;
4663 char * e;
4664 char save;
4665
4666 for (e = rl78_lex_start + 1;
4667 e < rl78_lex_end && ISALNUM (*e);
4668 e ++)
4669 ;
4670 save = *e;
4671 *e = 0;
4672
4673 for (i = 0; i < NUM_TOKENS; i++)
4674 if (strcasecmp (rl78_lex_start, token_table[i].string) == 0
4675 && !(token_table[i].val == IS_OPCODE && rl78_last_token != 0)
4676 && !(token_table[i].token == FLAG && !need_flag))
4677 {
4678 rl78_lval.regno = token_table[i].val;
4679 *e = save;
4680 rl78_lex_start = e;
4681 rl78_last_token = token_table[i].token;
4682 return token_table[i].token;
4683 }
4684 *e = save;
4685 }
4686
4687 if (rl78_last_token == 0)
4688 {
4689 rl78_last_token = UNKNOWN_OPCODE;
4690 return UNKNOWN_OPCODE;
4691 }
4692
4693 if (rl78_last_token == UNKNOWN_OPCODE)
4694 return 0;
4695
4696 if (*rl78_lex_start == '[')
4697 rl78_in_brackets = 1;
4698 if (*rl78_lex_start == ']')
4699 rl78_in_brackets = 0;
4700
4701 /* '.' is funny - the syntax includes it for bitfields, but only for
4702 bitfields. We check for it specially so we can allow labels
4703 with '.' in them. */
4704
4705 if (rl78_bit_insn
4706 && *rl78_lex_start == '.'
4707 && find_bit_index (rl78_lex_start) == rl78_lex_start)
4708 {
4709 rl78_last_token = *rl78_lex_start;
4710 return *rl78_lex_start ++;
4711 }
4712
4713 if ((rl78_in_brackets && *rl78_lex_start == '+')
4714 || strchr ("[],#!$:", *rl78_lex_start))
4715 {
4716 rl78_last_token = *rl78_lex_start;
4717 return *rl78_lex_start ++;
4718 }
4719
4720 /* Again, '.' is funny. Look for '.<digit>' at the end of the line
4721 or before a comma, which is a bitfield, not an expression. */
4722
4723 if (rl78_bit_insn)
4724 {
4725 bit = find_bit_index (rl78_lex_start);
4726 if (bit)
4727 *bit = 0;
4728 else
4729 bit = NULL;
4730 }
4731
4732 save_input_pointer = input_line_pointer;
4733 input_line_pointer = rl78_lex_start;
4734 rl78_lval.exp.X_md = 0;
4735 expression (&rl78_lval.exp);
4736
4737 if (bit)
4738 *bit = '.';
4739
4740 rl78_lex_start = input_line_pointer;
4741 input_line_pointer = save_input_pointer;
4742 rl78_last_token = EXPR;
4743 return EXPR;
4744 }
4745
4746 int
rl78_error(const char * str)4747 rl78_error (const char * str)
4748 {
4749 int len;
4750
4751 len = rl78_last_exp_start - rl78_init_start;
4752
4753 as_bad ("%s", rl78_init_start);
4754 as_bad ("%*s^ %s", len, "", str);
4755 return 0;
4756 }
4757
4758 static int
expr_is_sfr(expressionS exp)4759 expr_is_sfr (expressionS exp)
4760 {
4761 unsigned long v;
4762
4763 if (exp.X_op != O_constant)
4764 return 0;
4765
4766 v = exp.X_add_number;
4767 if (0xFFF00 <= v && v <= 0xFFFFF)
4768 return 1;
4769 return 0;
4770 }
4771
4772 static int
expr_is_saddr(expressionS exp)4773 expr_is_saddr (expressionS exp)
4774 {
4775 unsigned long v;
4776
4777 if (exp.X_op != O_constant)
4778 return 1;
4779
4780 v = exp.X_add_number;
4781 if (0xFFE20 <= v && v <= 0xFFF1F)
4782 return 1;
4783 return 0;
4784 }
4785
4786 static int
expr_is_word_aligned(expressionS exp)4787 expr_is_word_aligned (expressionS exp)
4788 {
4789 unsigned long v;
4790
4791 if (exp.X_op != O_constant)
4792 return 1;
4793
4794 v = exp.X_add_number;
4795 if (v & 1)
4796 return 0;
4797 return 1;
4798
4799 }
4800
4801 static void
check_expr_is_bit_index(expressionS exp)4802 check_expr_is_bit_index (expressionS exp)
4803 {
4804 int val;
4805
4806 if (exp.X_op != O_constant)
4807 {
4808 rl78_error (_("bit index must be a constant"));
4809 return;
4810 }
4811 val = exp.X_add_number;
4812
4813 if (val < 0 || val > 7)
4814 rl78_error (_("rtsd size must be 0..7"));
4815 }
4816
4817 static int
exp_val(expressionS exp)4818 exp_val (expressionS exp)
4819 {
4820 if (exp.X_op != O_constant)
4821 {
4822 rl78_error (_("constant expected"));
4823 return 0;
4824 }
4825 return exp.X_add_number;
4826 }
4827
4828 static int
check_expr_is_const(expressionS e,int vmin,int vmax)4829 check_expr_is_const (expressionS e, int vmin, int vmax)
4830 {
4831 static char buf[100];
4832 if (e.X_op != O_constant
4833 || e.X_add_number < vmin
4834 || e.X_add_number > vmax)
4835 {
4836 if (vmin == vmax)
4837 sprintf (buf, "%d expected here", vmin);
4838 else
4839 sprintf (buf, "%d..%d expected here", vmin, vmax);
4840 rl78_error(buf);
4841 return 0;
4842 }
4843 return 1;
4844 }
4845