1 /* A Bison parser, made by GNU Bison 2.1.  */
2 
3 /* Skeleton parser for Yacc-like parsing with Bison,
4    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street, Fifth Floor,
19    Boston, MA 02110-1301, USA.  */
20 
21 /* As a special exception, when this file is copied by Bison into a
22    Bison output file, you may use that output file without restriction.
23    This special exception was added by the Free Software Foundation
24    in version 1.24 of Bison.  */
25 
26 /* Written by Richard Stallman by simplifying the original so called
27    ``semantic'' parser.  */
28 
29 /* All symbols defined below should begin with yy or YY, to avoid
30    infringing on user name space.  This should be done even for local
31    variables, as they might otherwise be expanded by user macros.
32    There are some unavoidable exceptions within include files to
33    define necessary library symbols; they are noted "INFRINGES ON
34    USER NAME SPACE" below.  */
35 
36 /* Identify Bison output.  */
37 #define YYBISON 1
38 
39 /* Bison version.  */
40 #define YYBISON_VERSION "2.1"
41 
42 /* Skeleton name.  */
43 #define YYSKELETON_NAME "yacc.c"
44 
45 /* Pure parsers.  */
46 #define YYPURE 0
47 
48 /* Using locations.  */
49 #define YYLSP_NEEDED 0
50 
51 
52 
53 /* Tokens.  */
54 #ifndef YYTOKENTYPE
55 # define YYTOKENTYPE
56    /* Put the tokens into the symbol table, so that GDB and other debuggers
57       know about them.  */
58    enum yytokentype {
59      BYTEOP16P = 258,
60      BYTEOP16M = 259,
61      BYTEOP1P = 260,
62      BYTEOP2P = 261,
63      BYTEOP2M = 262,
64      BYTEOP3P = 263,
65      BYTEUNPACK = 264,
66      BYTEPACK = 265,
67      PACK = 266,
68      SAA = 267,
69      ALIGN8 = 268,
70      ALIGN16 = 269,
71      ALIGN24 = 270,
72      VIT_MAX = 271,
73      EXTRACT = 272,
74      DEPOSIT = 273,
75      EXPADJ = 274,
76      SEARCH = 275,
77      ONES = 276,
78      SIGN = 277,
79      SIGNBITS = 278,
80      LINK = 279,
81      UNLINK = 280,
82      REG = 281,
83      PC = 282,
84      CCREG = 283,
85      BYTE_DREG = 284,
86      REG_A_DOUBLE_ZERO = 285,
87      REG_A_DOUBLE_ONE = 286,
88      A_ZERO_DOT_L = 287,
89      A_ZERO_DOT_H = 288,
90      A_ONE_DOT_L = 289,
91      A_ONE_DOT_H = 290,
92      HALF_REG = 291,
93      NOP = 292,
94      RTI = 293,
95      RTS = 294,
96      RTX = 295,
97      RTN = 296,
98      RTE = 297,
99      HLT = 298,
100      IDLE = 299,
101      STI = 300,
102      CLI = 301,
103      CSYNC = 302,
104      SSYNC = 303,
105      EMUEXCPT = 304,
106      RAISE = 305,
107      EXCPT = 306,
108      LSETUP = 307,
109      LOOP = 308,
110      LOOP_BEGIN = 309,
111      LOOP_END = 310,
112      DISALGNEXCPT = 311,
113      JUMP = 312,
114      JUMP_DOT_S = 313,
115      JUMP_DOT_L = 314,
116      CALL = 315,
117      ABORT = 316,
118      NOT = 317,
119      TILDA = 318,
120      BANG = 319,
121      AMPERSAND = 320,
122      BAR = 321,
123      PERCENT = 322,
124      CARET = 323,
125      BXOR = 324,
126      MINUS = 325,
127      PLUS = 326,
128      STAR = 327,
129      SLASH = 328,
130      NEG = 329,
131      MIN = 330,
132      MAX = 331,
133      ABS = 332,
134      DOUBLE_BAR = 333,
135      _PLUS_BAR_PLUS = 334,
136      _PLUS_BAR_MINUS = 335,
137      _MINUS_BAR_PLUS = 336,
138      _MINUS_BAR_MINUS = 337,
139      _MINUS_MINUS = 338,
140      _PLUS_PLUS = 339,
141      SHIFT = 340,
142      LSHIFT = 341,
143      ASHIFT = 342,
144      BXORSHIFT = 343,
145      _GREATER_GREATER_GREATER_THAN_ASSIGN = 344,
146      ROT = 345,
147      LESS_LESS = 346,
148      GREATER_GREATER = 347,
149      _GREATER_GREATER_GREATER = 348,
150      _LESS_LESS_ASSIGN = 349,
151      _GREATER_GREATER_ASSIGN = 350,
152      DIVS = 351,
153      DIVQ = 352,
154      ASSIGN = 353,
155      _STAR_ASSIGN = 354,
156      _BAR_ASSIGN = 355,
157      _CARET_ASSIGN = 356,
158      _AMPERSAND_ASSIGN = 357,
159      _MINUS_ASSIGN = 358,
160      _PLUS_ASSIGN = 359,
161      _ASSIGN_BANG = 360,
162      _LESS_THAN_ASSIGN = 361,
163      _ASSIGN_ASSIGN = 362,
164      GE = 363,
165      LT = 364,
166      LE = 365,
167      GT = 366,
168      LESS_THAN = 367,
169      FLUSHINV = 368,
170      FLUSH = 369,
171      IFLUSH = 370,
172      PREFETCH = 371,
173      PRNT = 372,
174      OUTC = 373,
175      WHATREG = 374,
176      TESTSET = 375,
177      ASL = 376,
178      ASR = 377,
179      B = 378,
180      W = 379,
181      NS = 380,
182      S = 381,
183      CO = 382,
184      SCO = 383,
185      TH = 384,
186      TL = 385,
187      BP = 386,
188      BREV = 387,
189      X = 388,
190      Z = 389,
191      M = 390,
192      MMOD = 391,
193      R = 392,
194      RND = 393,
195      RNDL = 394,
196      RNDH = 395,
197      RND12 = 396,
198      RND20 = 397,
199      V = 398,
200      LO = 399,
201      HI = 400,
202      BITTGL = 401,
203      BITCLR = 402,
204      BITSET = 403,
205      BITTST = 404,
206      BITMUX = 405,
207      DBGAL = 406,
208      DBGAH = 407,
209      DBGHALT = 408,
210      DBG = 409,
211      DBGA = 410,
212      DBGCMPLX = 411,
213      IF = 412,
214      COMMA = 413,
215      BY = 414,
216      COLON = 415,
217      SEMICOLON = 416,
218      RPAREN = 417,
219      LPAREN = 418,
220      LBRACK = 419,
221      RBRACK = 420,
222      STATUS_REG = 421,
223      MNOP = 422,
224      SYMBOL = 423,
225      NUMBER = 424,
226      GOT = 425,
227      GOT17M4 = 426,
228      FUNCDESC_GOT17M4 = 427,
229      AT = 428,
230      PLTPC = 429
231    };
232 #endif
233 /* Tokens.  */
234 #define BYTEOP16P 258
235 #define BYTEOP16M 259
236 #define BYTEOP1P 260
237 #define BYTEOP2P 261
238 #define BYTEOP2M 262
239 #define BYTEOP3P 263
240 #define BYTEUNPACK 264
241 #define BYTEPACK 265
242 #define PACK 266
243 #define SAA 267
244 #define ALIGN8 268
245 #define ALIGN16 269
246 #define ALIGN24 270
247 #define VIT_MAX 271
248 #define EXTRACT 272
249 #define DEPOSIT 273
250 #define EXPADJ 274
251 #define SEARCH 275
252 #define ONES 276
253 #define SIGN 277
254 #define SIGNBITS 278
255 #define LINK 279
256 #define UNLINK 280
257 #define REG 281
258 #define PC 282
259 #define CCREG 283
260 #define BYTE_DREG 284
261 #define REG_A_DOUBLE_ZERO 285
262 #define REG_A_DOUBLE_ONE 286
263 #define A_ZERO_DOT_L 287
264 #define A_ZERO_DOT_H 288
265 #define A_ONE_DOT_L 289
266 #define A_ONE_DOT_H 290
267 #define HALF_REG 291
268 #define NOP 292
269 #define RTI 293
270 #define RTS 294
271 #define RTX 295
272 #define RTN 296
273 #define RTE 297
274 #define HLT 298
275 #define IDLE 299
276 #define STI 300
277 #define CLI 301
278 #define CSYNC 302
279 #define SSYNC 303
280 #define EMUEXCPT 304
281 #define RAISE 305
282 #define EXCPT 306
283 #define LSETUP 307
284 #define LOOP 308
285 #define LOOP_BEGIN 309
286 #define LOOP_END 310
287 #define DISALGNEXCPT 311
288 #define JUMP 312
289 #define JUMP_DOT_S 313
290 #define JUMP_DOT_L 314
291 #define CALL 315
292 #define ABORT 316
293 #define NOT 317
294 #define TILDA 318
295 #define BANG 319
296 #define AMPERSAND 320
297 #define BAR 321
298 #define PERCENT 322
299 #define CARET 323
300 #define BXOR 324
301 #define MINUS 325
302 #define PLUS 326
303 #define STAR 327
304 #define SLASH 328
305 #define NEG 329
306 #define MIN 330
307 #define MAX 331
308 #define ABS 332
309 #define DOUBLE_BAR 333
310 #define _PLUS_BAR_PLUS 334
311 #define _PLUS_BAR_MINUS 335
312 #define _MINUS_BAR_PLUS 336
313 #define _MINUS_BAR_MINUS 337
314 #define _MINUS_MINUS 338
315 #define _PLUS_PLUS 339
316 #define SHIFT 340
317 #define LSHIFT 341
318 #define ASHIFT 342
319 #define BXORSHIFT 343
320 #define _GREATER_GREATER_GREATER_THAN_ASSIGN 344
321 #define ROT 345
322 #define LESS_LESS 346
323 #define GREATER_GREATER 347
324 #define _GREATER_GREATER_GREATER 348
325 #define _LESS_LESS_ASSIGN 349
326 #define _GREATER_GREATER_ASSIGN 350
327 #define DIVS 351
328 #define DIVQ 352
329 #define ASSIGN 353
330 #define _STAR_ASSIGN 354
331 #define _BAR_ASSIGN 355
332 #define _CARET_ASSIGN 356
333 #define _AMPERSAND_ASSIGN 357
334 #define _MINUS_ASSIGN 358
335 #define _PLUS_ASSIGN 359
336 #define _ASSIGN_BANG 360
337 #define _LESS_THAN_ASSIGN 361
338 #define _ASSIGN_ASSIGN 362
339 #define GE 363
340 #define LT 364
341 #define LE 365
342 #define GT 366
343 #define LESS_THAN 367
344 #define FLUSHINV 368
345 #define FLUSH 369
346 #define IFLUSH 370
347 #define PREFETCH 371
348 #define PRNT 372
349 #define OUTC 373
350 #define WHATREG 374
351 #define TESTSET 375
352 #define ASL 376
353 #define ASR 377
354 #define B 378
355 #define W 379
356 #define NS 380
357 #define S 381
358 #define CO 382
359 #define SCO 383
360 #define TH 384
361 #define TL 385
362 #define BP 386
363 #define BREV 387
364 #define X 388
365 #define Z 389
366 #define M 390
367 #define MMOD 391
368 #define R 392
369 #define RND 393
370 #define RNDL 394
371 #define RNDH 395
372 #define RND12 396
373 #define RND20 397
374 #define V 398
375 #define LO 399
376 #define HI 400
377 #define BITTGL 401
378 #define BITCLR 402
379 #define BITSET 403
380 #define BITTST 404
381 #define BITMUX 405
382 #define DBGAL 406
383 #define DBGAH 407
384 #define DBGHALT 408
385 #define DBG 409
386 #define DBGA 410
387 #define DBGCMPLX 411
388 #define IF 412
389 #define COMMA 413
390 #define BY 414
391 #define COLON 415
392 #define SEMICOLON 416
393 #define RPAREN 417
394 #define LPAREN 418
395 #define LBRACK 419
396 #define RBRACK 420
397 #define STATUS_REG 421
398 #define MNOP 422
399 #define SYMBOL 423
400 #define NUMBER 424
401 #define GOT 425
402 #define GOT17M4 426
403 #define FUNCDESC_GOT17M4 427
404 #define AT 428
405 #define PLTPC 429
406 
407 
408 
409 
410 /* Copy the first part of user declarations.  */
411 #line 21 "bfin-parse.y"
412 
413 
414 #include <stdio.h>
415 #include <stdarg.h>
416 #include <obstack.h>
417 
418 #include "bfin-aux.h"  // opcode generating auxiliaries
419 #include "libbfd.h"
420 #include "elf/common.h"
421 #include "elf/bfin.h"
422 
423 #define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
424 	bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
425 
426 #define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
427 	bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
428 	                   dst, src0, src1, w0)
429 
430 #define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
431 	bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
432 	                    dst, src0, src1, w0)
433 
434 #define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls)  \
435 	bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
436 
437 #define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls)  \
438 	bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
439 
440 #define LDIMMHALF_R(reg, h, s, z, hword) \
441 	bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
442 
443 #define LDIMMHALF_R5(reg, h, s, z, hword) \
444         bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
445 
446 #define LDSTIDXI(ptr, reg, w, sz, z, offset)  \
447 	bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
448 
449 #define LDST(ptr, reg, aop, sz, z, w)  \
450 	bfin_gen_ldst (ptr, reg, aop, sz, z, w)
451 
452 #define LDSTII(ptr, reg, offset, w, op)  \
453 	bfin_gen_ldstii (ptr, reg, offset, w, op)
454 
455 #define DSPLDST(i, m, reg, aop, w) \
456 	bfin_gen_dspldst (i, reg, aop, w, m)
457 
458 #define LDSTPMOD(ptr, reg, idx, aop, w) \
459 	bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
460 
461 #define LDSTIIFP(offset, reg, w)  \
462 	bfin_gen_ldstiifp (reg, offset, w)
463 
464 #define LOGI2OP(dst, src, opc) \
465 	bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
466 
467 #define ALU2OP(dst, src, opc)  \
468 	bfin_gen_alu2op (dst, src, opc)
469 
470 #define BRCC(t, b, offset) \
471 	bfin_gen_brcc (t, b, offset)
472 
473 #define UJUMP(offset) \
474 	bfin_gen_ujump (offset)
475 
476 #define PROGCTRL(prgfunc, poprnd) \
477 	bfin_gen_progctrl (prgfunc, poprnd)
478 
479 #define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
480 	bfin_gen_pushpopmultiple (dr, pr, d, p, w)
481 
482 #define PUSHPOPREG(reg, w) \
483 	bfin_gen_pushpopreg (reg, w)
484 
485 #define CALLA(addr, s)  \
486 	bfin_gen_calla (addr, s)
487 
488 #define LINKAGE(r, framesize) \
489 	bfin_gen_linkage (r, framesize)
490 
491 #define COMPI2OPD(dst, src, op)  \
492 	bfin_gen_compi2opd (dst, src, op)
493 
494 #define COMPI2OPP(dst, src, op)  \
495 	bfin_gen_compi2opp (dst, src, op)
496 
497 #define DAGMODIK(i, op)  \
498 	bfin_gen_dagmodik (i, op)
499 
500 #define DAGMODIM(i, m, op, br)  \
501 	bfin_gen_dagmodim (i, m, op, br)
502 
503 #define COMP3OP(dst, src0, src1, opc)   \
504 	bfin_gen_comp3op (src0, src1, dst, opc)
505 
506 #define PTR2OP(dst, src, opc)   \
507 	bfin_gen_ptr2op (dst, src, opc)
508 
509 #define CCFLAG(x, y, opc, i, g)  \
510 	bfin_gen_ccflag (x, y, opc, i, g)
511 
512 #define CCMV(src, dst, t) \
513 	bfin_gen_ccmv (src, dst, t)
514 
515 #define CACTRL(reg, a, op) \
516 	bfin_gen_cactrl (reg, a, op)
517 
518 #define LOOPSETUP(soffset, c, rop, eoffset, reg) \
519 	bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
520 
521 #define HL2(r1, r0)  (IS_H (r1) << 1 | IS_H (r0))
522 #define IS_RANGE(bits, expr, sign, mul)    \
523 	value_match(expr, bits, sign, mul, 1)
524 #define IS_URANGE(bits, expr, sign, mul)    \
525 	value_match(expr, bits, sign, mul, 0)
526 #define IS_CONST(expr) (expr->type == Expr_Node_Constant)
527 #define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
528 #define IS_IMM(expr, bits)  value_match (expr, bits, 0, 1, 1)
529 #define IS_UIMM(expr, bits)  value_match (expr, bits, 0, 1, 0)
530 
531 #define IS_PCREL4(expr) \
532 	(value_match (expr, 4, 0, 2, 0))
533 
534 #define IS_LPPCREL10(expr) \
535 	(value_match (expr, 10, 0, 2, 0))
536 
537 #define IS_PCREL10(expr) \
538 	(value_match (expr, 10, 0, 2, 1))
539 
540 #define IS_PCREL12(expr) \
541 	(value_match (expr, 12, 0, 2, 1))
542 
543 #define IS_PCREL24(expr) \
544 	(value_match (expr, 24, 0, 2, 1))
545 
546 
547 static int value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned);
548 
549 extern FILE *errorf;
550 extern INSTR_T insn;
551 
552 static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
553 static Expr_Node *unary  (Expr_Op_Type, Expr_Node *);
554 
555 static void notethat (char *format, ...);
556 
557 char *current_inputline;
558 extern char *yytext;
559 int yyerror (char *msg);
560 
561 void error (char *format, ...)
562 {
563     va_list ap;
564     char buffer[2000];
565 
566     va_start (ap, format);
567     vsprintf (buffer, format, ap);
568     va_end (ap);
569 
570     as_bad (buffer);
571 }
572 
573 int
574 yyerror (char *msg)
575 {
576   if (msg[0] == '\0')
577     error ("%s", msg);
578 
579   else if (yytext[0] != ';')
580     error ("%s. Input text was %s.", msg, yytext);
581   else
582     error ("%s.", msg);
583 
584   return -1;
585 }
586 
587 static int
588 in_range_p (Expr_Node *expr, int from, int to, unsigned int mask)
589 {
590   int val = EXPR_VALUE (expr);
591   if (expr->type != Expr_Node_Constant)
592     return 0;
593   if (val < from || val > to)
594     return 0;
595   return (val & mask) == 0;
596 }
597 
598 extern int yylex (void);
599 
600 #define imm3(x) EXPR_VALUE (x)
601 #define imm4(x) EXPR_VALUE (x)
602 #define uimm4(x) EXPR_VALUE (x)
603 #define imm5(x) EXPR_VALUE (x)
604 #define uimm5(x) EXPR_VALUE (x)
605 #define imm6(x) EXPR_VALUE (x)
606 #define imm7(x) EXPR_VALUE (x)
607 #define imm16(x) EXPR_VALUE (x)
608 #define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
609 #define uimm16(x) EXPR_VALUE (x)
610 
611 /* Return true if a value is inside a range.  */
612 #define IN_RANGE(x, low, high) \
613   (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
614 
615 /* Auxiliary functions.  */
616 
617 static void
618 neg_value (Expr_Node *expr)
619 {
620   expr->value.i_value = -expr->value.i_value;
621 }
622 
623 static int
624 valid_dreg_pair (Register *reg1, Expr_Node *reg2)
625 {
626   if (!IS_DREG (*reg1))
627     {
628       yyerror ("Dregs expected");
629       return 0;
630     }
631 
632   if (reg1->regno != 1 && reg1->regno != 3)
633     {
634       yyerror ("Bad register pair");
635       return 0;
636     }
637 
638   if (imm7 (reg2) != reg1->regno - 1)
639     {
640       yyerror ("Bad register pair");
641       return 0;
642     }
643 
644   reg1->regno--;
645   return 1;
646 }
647 
648 static int
649 check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
650 {
651   if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
652       || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
653     return yyerror ("Source multiplication register mismatch");
654 
655   return 0;
656 }
657 
658 
659 /* Check (vector) mac funcs and ops.  */
660 
661 static int
662 check_macfuncs (Macfunc *aa, Opt_mode *opa,
663 		Macfunc *ab, Opt_mode *opb)
664 {
665   /* Variables for swapping.  */
666   Macfunc mtmp;
667   Opt_mode otmp;
668 
669   /* If a0macfunc comes before a1macfunc, swap them.  */
670 
671   if (aa->n == 0)
672     {
673       /*  (M) is not allowed here.  */
674       if (opa->MM != 0)
675 	return yyerror ("(M) not allowed with A0MAC");
676       if (ab->n != 1)
677 	return yyerror ("Vector AxMACs can't be same");
678 
679       mtmp = *aa; *aa = *ab; *ab = mtmp;
680       otmp = *opa; *opa = *opb; *opb = otmp;
681     }
682   else
683     {
684       if (opb->MM != 0)
685 	return yyerror ("(M) not allowed with A0MAC");
686       if (opa->mod != 0)
687 	return yyerror ("Bad opt mode");
688       if (ab->n != 0)
689 	return yyerror ("Vector AxMACs can't be same");
690     }
691 
692   /*  If both ops are != 3, we have multiply_halfregs in both
693   assignment_or_macfuncs.  */
694   if (aa->op == ab->op && aa->op != 3)
695     {
696       if (check_multiply_halfregs (aa, ab) < 0)
697 	return -1;
698     }
699   else
700     {
701       /*  Only one of the assign_macfuncs has a half reg multiply
702       Evil trick: Just 'OR' their source register codes:
703       We can do that, because we know they were initialized to 0
704       in the rules that don't use multiply_halfregs.  */
705       aa->s0.regno |= (ab->s0.regno & CODE_MASK);
706       aa->s1.regno |= (ab->s1.regno & CODE_MASK);
707     }
708 
709   if (aa->w == ab->w  && aa->P != ab->P)
710     {
711       return yyerror ("macfuncs must differ");
712       if (aa->w && (aa->dst.regno - ab->dst.regno != 1))
713 	return yyerror ("Destination Dregs must differ by one");
714     }
715   /* We assign to full regs, thus obey even/odd rules.  */
716   else if ((aa->w && aa->P && IS_EVEN (aa->dst))
717 	   || (ab->w && ab->P && !IS_EVEN (ab->dst)))
718     return yyerror ("Even/Odd register assignment mismatch");
719   /* We assign to half regs, thus obey hi/low rules.  */
720   else if ( (aa->w && !aa->P && !IS_H (aa->dst))
721 	    || (ab->w && !aa->P && IS_H (ab->dst)))
722     return yyerror ("High/Low register assignment mismatch");
723 
724   /* Make sure first macfunc has got both P flags ORed.  */
725   aa->P |= ab->P;
726 
727   /* Make sure mod flags get ORed, too.  */
728   opb->mod |= opa->mod;
729   return 0;
730 }
731 
732 
733 static int
734 is_group1 (INSTR_T x)
735 {
736   /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii.  */
737   if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
738     return 1;
739 
740   return 0;
741 }
742 
743 static int
744 is_group2 (INSTR_T x)
745 {
746   if ((((x->value & 0xfc00) == 0x9c00)  /* dspLDST.  */
747        && !((x->value & 0xfde0) == 0x9c60)  /* dagMODim.  */
748        && !((x->value & 0xfde0) == 0x9ce0)  /* dagMODim with bit rev.  */
749        && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik.  */
750       || (x->value == 0x0000))
751     return 1;
752   return 0;
753 }
754 
755 
756 
757 /* Enabling traces.  */
758 #ifndef YYDEBUG
759 # define YYDEBUG 0
760 #endif
761 
762 /* Enabling verbose error messages.  */
763 #ifdef YYERROR_VERBOSE
764 # undef YYERROR_VERBOSE
765 # define YYERROR_VERBOSE 1
766 #else
767 # define YYERROR_VERBOSE 0
768 #endif
769 
770 /* Enabling the token table.  */
771 #ifndef YYTOKEN_TABLE
772 # define YYTOKEN_TABLE 0
773 #endif
774 
775 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
776 #line 366 "bfin-parse.y"
777 typedef union YYSTYPE {
778   INSTR_T instr;
779   Expr_Node *expr;
780   SYMBOL_T symbol;
781   long value;
782   Register reg;
783   Macfunc macfunc;
784   struct { int r0; int s0; int x0; int aop; } modcodes;
785   struct { int r0; } r0;
786   Opt_mode mod;
787 } YYSTYPE;
788 /* Line 196 of yacc.c.  */
789 #line 790 "bfin-parse.c"
790 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
791 # define YYSTYPE_IS_DECLARED 1
792 # define YYSTYPE_IS_TRIVIAL 1
793 #endif
794 
795 
796 
797 /* Copy the second part of user declarations.  */
798 
799 
800 /* Line 219 of yacc.c.  */
801 #line 802 "bfin-parse.c"
802 
803 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
804 # define YYSIZE_T __SIZE_TYPE__
805 #endif
806 #if ! defined (YYSIZE_T) && defined (size_t)
807 # define YYSIZE_T size_t
808 #endif
809 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
810 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
811 # define YYSIZE_T size_t
812 #endif
813 #if ! defined (YYSIZE_T)
814 # define YYSIZE_T unsigned int
815 #endif
816 
817 #ifndef YY_
818 # if YYENABLE_NLS
819 #  if ENABLE_NLS
820 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
821 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
822 #  endif
823 # endif
824 # ifndef YY_
825 #  define YY_(msgid) msgid
826 # endif
827 #endif
828 
829 #if ! defined (yyoverflow) || YYERROR_VERBOSE
830 
831 /* The parser invokes alloca or malloc; define the necessary symbols.  */
832 
833 # ifdef YYSTACK_USE_ALLOCA
834 #  if YYSTACK_USE_ALLOCA
835 #   ifdef __GNUC__
836 #    define YYSTACK_ALLOC __builtin_alloca
837 #   else
838 #    define YYSTACK_ALLOC alloca
839 #    if defined (__STDC__) || defined (__cplusplus)
840 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
841 #     define YYINCLUDED_STDLIB_H
842 #    endif
843 #   endif
844 #  endif
845 # endif
846 
847 # ifdef YYSTACK_ALLOC
848    /* Pacify GCC's `empty if-body' warning. */
849 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
850 #  ifndef YYSTACK_ALLOC_MAXIMUM
851     /* The OS might guarantee only one guard page at the bottom of the stack,
852        and a page size can be as small as 4096 bytes.  So we cannot safely
853        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
854        to allow for a few compiler-allocated temporary stack slots.  */
855 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
856 #  endif
857 # else
858 #  define YYSTACK_ALLOC YYMALLOC
859 #  define YYSTACK_FREE YYFREE
860 #  ifndef YYSTACK_ALLOC_MAXIMUM
861 #   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
862 #  endif
863 #  ifdef __cplusplus
864 extern "C" {
865 #  endif
866 #  ifndef YYMALLOC
867 #   define YYMALLOC malloc
868 #   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
869 	&& (defined (__STDC__) || defined (__cplusplus)))
870 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
871 #   endif
872 #  endif
873 #  ifndef YYFREE
874 #   define YYFREE free
875 #   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
876 	&& (defined (__STDC__) || defined (__cplusplus)))
877 void free (void *); /* INFRINGES ON USER NAME SPACE */
878 #   endif
879 #  endif
880 #  ifdef __cplusplus
881 }
882 #  endif
883 # endif
884 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
885 
886 
887 #if (! defined (yyoverflow) \
888      && (! defined (__cplusplus) \
889 	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
890 
891 /* A type that is properly aligned for any stack member.  */
892 union yyalloc
893 {
894   short int yyss;
895   YYSTYPE yyvs;
896   };
897 
898 /* The size of the maximum gap between one aligned stack and the next.  */
899 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
900 
901 /* The size of an array large to enough to hold all stacks, each with
902    N elements.  */
903 # define YYSTACK_BYTES(N) \
904      ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\
905       + YYSTACK_GAP_MAXIMUM)
906 
907 /* Copy COUNT objects from FROM to TO.  The source and destination do
908    not overlap.  */
909 # ifndef YYCOPY
910 #  if defined (__GNUC__) && 1 < __GNUC__
911 #   define YYCOPY(To, From, Count) \
912       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
913 #  else
914 #   define YYCOPY(To, From, Count)		\
915       do					\
916 	{					\
917 	  YYSIZE_T yyi;				\
918 	  for (yyi = 0; yyi < (Count); yyi++)	\
919 	    (To)[yyi] = (From)[yyi];		\
920 	}					\
921       while (0)
922 #  endif
923 # endif
924 
925 /* Relocate STACK from its old location to the new one.  The
926    local variables YYSIZE and YYSTACKSIZE give the old and new number of
927    elements in the stack, and YYPTR gives the new location of the
928    stack.  Advance YYPTR to a properly aligned location for the next
929    stack.  */
930 # define YYSTACK_RELOCATE(Stack)					\
931     do									\
932       {									\
933 	YYSIZE_T yynewbytes;						\
934 	YYCOPY (&yyptr->Stack, Stack, yysize);				\
935 	Stack = &yyptr->Stack;						\
936 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
937 	yyptr += yynewbytes / sizeof (*yyptr);				\
938       }									\
939     while (0)
940 
941 #endif
942 
943 #if defined (__STDC__) || defined (__cplusplus)
944    typedef signed char yysigned_char;
945 #else
946    typedef short int yysigned_char;
947 #endif
948 
949 /* YYFINAL -- State number of the termination state. */
950 #define YYFINAL  149
951 /* YYLAST -- Last index in YYTABLE.  */
952 #define YYLAST   1315
953 
954 /* YYNTOKENS -- Number of terminals. */
955 #define YYNTOKENS  175
956 /* YYNNTS -- Number of nonterminals. */
957 #define YYNNTS  47
958 /* YYNRULES -- Number of rules. */
959 #define YYNRULES  349
960 /* YYNRULES -- Number of states. */
961 #define YYNSTATES  1024
962 
963 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
964 #define YYUNDEFTOK  2
965 #define YYMAXUTOK   429
966 
967 #define YYTRANSLATE(YYX)						\
968   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
969 
970 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
971 static const unsigned char yytranslate[] =
972 {
973        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
974        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
975        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
976        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
977        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
978        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
979        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
980        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
981        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
982        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
983        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
984        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
985        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
986        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
987        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
988        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
989        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
990        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
991        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
992        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
993        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
994        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
995        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
996        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
997        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
998        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
999        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
1000       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
1001       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
1002       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
1003       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1004       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1005       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1006       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1007       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1008       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
1009      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
1010      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
1011      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
1012      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
1013      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
1014      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
1015      165,   166,   167,   168,   169,   170,   171,   172,   173,   174
1016 };
1017 
1018 #if YYDEBUG
1019 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1020    YYRHS.  */
1021 static const unsigned short int yyprhs[] =
1022 {
1023        0,     0,     3,     4,     6,     9,    16,    21,    23,    25,
1024       28,    34,    36,    43,    50,    54,    58,    76,    94,   106,
1025      118,   130,   143,   156,   169,   175,   179,   183,   187,   196,
1026      210,   223,   237,   251,   265,   274,   292,   299,   309,   313,
1027      320,   324,   330,   337,   346,   355,   358,   361,   366,   370,
1028      373,   378,   382,   389,   394,   402,   410,   414,   418,   425,
1029      429,   434,   438,   442,   446,   458,   470,   480,   486,   492,
1030      502,   508,   514,   521,   528,   534,   540,   546,   553,   560,
1031      566,   568,   572,   576,   580,   584,   589,   594,   604,   614,
1032      620,   628,   633,   640,   646,   653,   661,   671,   680,   689,
1033      701,   711,   716,   722,   729,   737,   744,   749,   756,   762,
1034      769,   776,   781,   790,   801,   812,   825,   831,   838,   844,
1035      851,   856,   861,   866,   874,   884,   894,   904,   911,   918,
1036      925,   934,   943,   950,   956,   962,   971,   976,   984,   986,
1037      988,   990,   992,   994,   996,   998,  1000,  1002,  1004,  1007,
1038     1010,  1015,  1020,  1027,  1034,  1037,  1040,  1045,  1048,  1051,
1039     1054,  1057,  1060,  1063,  1070,  1077,  1083,  1088,  1092,  1096,
1040     1100,  1104,  1108,  1112,  1117,  1120,  1125,  1128,  1133,  1136,
1041     1141,  1144,  1152,  1161,  1170,  1178,  1186,  1194,  1204,  1212,
1042     1221,  1231,  1240,  1247,  1255,  1264,  1274,  1283,  1291,  1299,
1043     1306,  1310,  1322,  1330,  1342,  1350,  1354,  1357,  1359,  1367,
1044     1377,  1389,  1393,  1399,  1407,  1409,  1412,  1415,  1420,  1422,
1045     1429,  1436,  1443,  1445,  1447,  1448,  1454,  1460,  1464,  1468,
1046     1472,  1476,  1477,  1479,  1481,  1483,  1485,  1487,  1488,  1492,
1047     1493,  1497,  1501,  1502,  1506,  1510,  1516,  1522,  1523,  1527,
1048     1531,  1532,  1536,  1540,  1541,  1545,  1549,  1553,  1559,  1565,
1049     1566,  1570,  1571,  1575,  1577,  1579,  1581,  1583,  1584,  1588,
1050     1592,  1596,  1602,  1608,  1610,  1612,  1614,  1615,  1619,  1620,
1051     1624,  1629,  1634,  1636,  1638,  1640,  1642,  1644,  1646,  1648,
1052     1650,  1654,  1658,  1662,  1666,  1672,  1678,  1684,  1690,  1694,
1053     1698,  1704,  1710,  1711,  1713,  1715,  1718,  1721,  1724,  1728,
1054     1730,  1736,  1742,  1746,  1749,  1752,  1755,  1759,  1761,  1763,
1055     1765,  1767,  1771,  1775,  1779,  1783,  1785,  1787,  1789,  1791,
1056     1795,  1797,  1799,  1803,  1805,  1807,  1811,  1814,  1817,  1819,
1057     1823,  1827,  1831,  1835,  1839,  1843,  1847,  1851,  1855,  1859
1058 };
1059 
1060 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1061 static const short int yyrhs[] =
1062 {
1063      176,     0,    -1,    -1,   177,    -1,   178,   161,    -1,   178,
1064       78,   178,    78,   178,   161,    -1,   178,    78,   178,   161,
1065       -1,     1,    -1,   167,    -1,   209,   180,    -1,   209,   180,
1066      158,   209,   180,    -1,    56,    -1,    26,    98,   163,   208,
1067      179,   162,    -1,    36,    98,   163,   208,   179,   162,    -1,
1068       33,    98,    36,    -1,    35,    98,    36,    -1,   163,    26,
1069      158,    26,   162,    98,     3,   163,    26,   160,   220,   158,
1070       26,   160,   220,   162,   193,    -1,   163,    26,   158,    26,
1071      162,    98,     4,   163,    26,   160,   220,   158,    26,   160,
1072      220,   162,   193,    -1,   163,    26,   158,    26,   162,    98,
1073        9,    26,   160,   220,   193,    -1,   163,    26,   158,    26,
1074      162,    98,    20,    26,   163,   192,   162,    -1,    26,    98,
1075       34,    71,    35,   158,    26,    98,    32,    71,    33,    -1,
1076       26,    98,   179,    71,   179,   158,    26,    98,   179,    70,
1077      179,   185,    -1,    26,    98,    26,   202,    26,   158,    26,
1078       98,    26,   202,    26,   185,    -1,    26,    98,    26,   201,
1079       26,   158,    26,    98,    26,   201,    26,   186,    -1,    26,
1080       98,    77,    26,   190,    -1,   206,    77,   179,    -1,    32,
1081       98,    36,    -1,    34,    98,    36,    -1,    26,    98,   195,
1082      163,    26,   158,    26,   162,    -1,    26,    98,     5,   163,
1083       26,   160,   220,   158,    26,   160,   220,   162,   194,    -1,
1084       26,    98,     5,   163,    26,   160,   220,   158,    26,   160,
1085      220,   162,    -1,    26,    98,     6,   163,    26,   160,   220,
1086      158,    26,   160,   220,   162,   203,    -1,    26,    98,     7,
1087      163,    26,   160,   220,   158,    26,   160,   220,   162,   203,
1088       -1,    26,    98,     8,   163,    26,   160,   220,   158,    26,
1089      160,   220,   162,   204,    -1,    26,    98,    10,   163,    26,
1090      158,    26,   162,    -1,    36,    98,    36,    98,    22,   163,
1091       36,   162,    72,    36,    71,    22,   163,    36,   162,    72,
1092       36,    -1,    26,    98,    26,   202,    26,   185,    -1,    26,
1093       98,   200,   163,    26,   158,    26,   162,   190,    -1,   206,
1094       70,   179,    -1,    36,    98,    36,   202,    36,   185,    -1,
1095      206,   206,   220,    -1,   206,   179,   163,   126,   162,    -1,
1096       36,    98,    26,   163,   138,   162,    -1,    36,    98,    26,
1097      202,    26,   163,   141,   162,    -1,    36,    98,    26,   202,
1098       26,   163,   142,   162,    -1,   206,   179,    -1,   206,    26,
1099       -1,    26,    98,    36,   187,    -1,    36,    98,   220,    -1,
1100      206,   220,    -1,    26,    98,   220,   188,    -1,    36,    98,
1101       26,    -1,    26,    98,    26,   201,    26,   184,    -1,    26,
1102       98,    29,   187,    -1,   206,    77,   179,   158,   206,    77,
1103      179,    -1,   206,    70,   179,   158,   206,    70,   179,    -1,
1104      207,   179,   196,    -1,    26,   103,   220,    -1,    26,   104,
1105       26,   163,   132,   162,    -1,    26,   103,    26,    -1,   179,
1106      104,   179,   196,    -1,    26,   104,    26,    -1,    26,   104,
1107      220,    -1,    26,    99,    26,    -1,    12,   163,    26,   160,
1108      220,   158,    26,   160,   220,   162,   193,    -1,   206,   179,
1109      163,   126,   162,   158,   206,   179,   163,   126,   162,    -1,
1110       26,    98,   163,    26,    71,    26,   162,    91,   220,    -1,
1111       26,    98,    26,    66,    26,    -1,    26,    98,    26,    68,
1112       26,    -1,    26,    98,    26,    71,   163,    26,    91,   220,
1113      162,    -1,    28,    98,   179,   107,   179,    -1,    28,    98,
1114      179,   112,   179,    -1,    28,    98,    26,   112,    26,   197,
1115       -1,    28,    98,    26,   112,   220,   197,    -1,    28,    98,
1116       26,   107,    26,    -1,    28,    98,    26,   107,   220,    -1,
1117       28,    98,   179,   106,   179,    -1,    28,    98,    26,   106,
1118       26,   197,    -1,    28,    98,    26,   106,   220,   197,    -1,
1119       26,    98,    26,    65,    26,    -1,   213,    -1,    26,    98,
1120       26,    -1,    28,    98,    26,    -1,    26,    98,    28,    -1,
1121       28,   105,    28,    -1,    36,    98,   211,   180,    -1,    26,
1122       98,   211,   180,    -1,    36,    98,   211,   180,   158,    36,
1123       98,   211,   180,    -1,    26,    98,   211,   180,   158,    26,
1124       98,   211,   180,    -1,   206,    87,   179,   159,    36,    -1,
1125       36,    98,    87,    36,   159,    36,   191,    -1,   206,   179,
1126       91,   220,    -1,    26,    98,    26,    91,   220,   189,    -1,
1127       36,    98,    36,    91,   220,    -1,    36,    98,    36,    91,
1128      220,   191,    -1,    26,    98,    87,    26,   159,    36,   189,
1129       -1,    36,    98,    19,   163,    26,   158,    36,   162,   190,
1130       -1,    36,    98,    19,   163,    36,   158,    36,   162,    -1,
1131       26,    98,    18,   163,    26,   158,    26,   162,    -1,    26,
1132       98,    18,   163,    26,   158,    26,   162,   163,   133,   162,
1133       -1,    26,    98,    17,   163,    26,   158,    36,   162,   187,
1134       -1,   206,   179,    93,   220,    -1,   206,    86,   179,   159,
1135       36,    -1,    36,    98,    86,    36,   159,    36,    -1,    26,
1136       98,    86,    26,   159,    36,   190,    -1,    26,    98,    85,
1137       26,   159,    36,    -1,   206,   179,    92,   220,    -1,    26,
1138       98,    26,    92,   220,   190,    -1,    36,    98,    36,    92,
1139      220,    -1,    36,    98,    36,    93,   220,   191,    -1,    26,
1140       98,    26,    93,   220,   189,    -1,    36,    98,    21,    26,
1141       -1,    26,    98,    11,   163,    36,   158,    36,   162,    -1,
1142       36,    98,    28,    98,    88,   163,   179,   158,    26,   162,
1143       -1,    36,    98,    28,    98,    69,   163,   179,   158,    26,
1144      162,    -1,    36,    98,    28,    98,    69,   163,   179,   158,
1145      179,   158,    28,   162,    -1,   206,    90,   179,   159,    36,
1146       -1,    26,    98,    90,    26,   159,    36,    -1,   206,    90,
1147      179,   159,   220,    -1,    26,    98,    90,    26,   159,   220,
1148       -1,    36,    98,    23,   179,    -1,    36,    98,    23,    26,
1149       -1,    36,    98,    23,    36,    -1,    36,    98,    16,   163,
1150       26,   162,   181,    -1,    26,    98,    16,   163,    26,   158,
1151       26,   162,   181,    -1,   150,   163,    26,   158,    26,   158,
1152      179,   162,   181,    -1,   206,    88,   163,   179,   158,   179,
1153      158,    28,   162,    -1,   147,   163,    26,   158,   220,   162,
1154       -1,   148,   163,    26,   158,   220,   162,    -1,   146,   163,
1155       26,   158,   220,   162,    -1,    28,   105,   149,   163,    26,
1156      158,   220,   162,    -1,    28,    98,   149,   163,    26,   158,
1157      220,   162,    -1,   157,    64,    28,    26,    98,    26,    -1,
1158      157,    28,    26,    98,    26,    -1,   157,    64,    28,    57,
1159      220,    -1,   157,    64,    28,    57,   220,   163,   131,   162,
1160       -1,   157,    28,    57,   220,    -1,   157,    28,    57,   220,
1161      163,   131,   162,    -1,    37,    -1,    39,    -1,    38,    -1,
1162       40,    -1,    41,    -1,    42,    -1,    44,    -1,    47,    -1,
1163       48,    -1,    49,    -1,    46,    26,    -1,    45,    26,    -1,
1164       57,   163,    26,   162,    -1,    60,   163,    26,   162,    -1,
1165       60,   163,    27,    71,    26,   162,    -1,    57,   163,    27,
1166       71,    26,   162,    -1,    50,   220,    -1,    51,   220,    -1,
1167      120,   163,    26,   162,    -1,    57,   220,    -1,    58,   220,
1168       -1,    59,   220,    -1,    59,   218,    -1,    60,   220,    -1,
1169       60,   218,    -1,    97,   163,    26,   158,    26,   162,    -1,
1170       96,   163,    26,   158,    26,   162,    -1,    26,    98,    70,
1171       26,   189,    -1,    26,    98,    63,    26,    -1,    26,    95,
1172       26,    -1,    26,    95,   220,    -1,    26,    89,    26,    -1,
1173       26,    94,    26,    -1,    26,    94,   220,    -1,    26,    89,
1174      220,    -1,   114,   164,    26,   165,    -1,   114,   199,    -1,
1175      113,   164,    26,   165,    -1,   113,   199,    -1,   115,   164,
1176       26,   165,    -1,   115,   199,    -1,   116,   164,    26,   165,
1177       -1,   116,   199,    -1,   123,   164,    26,   205,   165,    98,
1178       26,    -1,   123,   164,    26,   202,   220,   165,    98,    26,
1179       -1,   124,   164,    26,   202,   220,   165,    98,    26,    -1,
1180      124,   164,    26,   205,   165,    98,    26,    -1,   124,   164,
1181       26,   205,   165,    98,    36,    -1,   164,    26,   202,   220,
1182      165,    98,    26,    -1,    26,    98,   124,   164,    26,   202,
1183      220,   165,   187,    -1,    36,    98,   124,   164,    26,   205,
1184      165,    -1,    26,    98,   124,   164,    26,   205,   165,   187,
1185       -1,    26,    98,   124,   164,    26,    84,    26,   165,   187,
1186       -1,    36,    98,   124,   164,    26,    84,    26,   165,    -1,
1187      164,    26,   205,   165,    98,    26,    -1,   164,    26,    84,
1188       26,   165,    98,    26,    -1,   124,   164,    26,    84,    26,
1189      165,    98,    36,    -1,    26,    98,   123,   164,    26,   202,
1190      220,   165,   187,    -1,    26,    98,   123,   164,    26,   205,
1191      165,   187,    -1,    26,    98,   164,    26,    84,    26,   165,
1192       -1,    26,    98,   164,    26,   202,   217,   165,    -1,    26,
1193       98,   164,    26,   205,   165,    -1,   220,    98,   220,    -1,
1194      198,    98,   163,    26,   160,   220,   158,    26,   160,   220,
1195      162,    -1,   198,    98,   163,    26,   160,   220,   162,    -1,
1196      163,    26,   160,   220,   158,    26,   160,   220,   162,    98,
1197      199,    -1,   163,    26,   160,   220,   162,    98,   199,    -1,
1198      198,    98,    26,    -1,    24,   220,    -1,    25,    -1,    52,
1199      163,   220,   158,   220,   162,    26,    -1,    52,   163,   220,
1200      158,   220,   162,    26,    98,    26,    -1,    52,   163,   220,
1201      158,   220,   162,    26,    98,    26,    92,   220,    -1,    53,
1202      220,    26,    -1,    53,   220,    26,    98,    26,    -1,    53,
1203      220,    26,    98,    26,    92,   220,    -1,   154,    -1,   154,
1204      179,    -1,   154,    26,    -1,   156,   163,    26,   162,    -1,
1205      153,    -1,   155,   163,    36,   158,   220,   162,    -1,   152,
1206      163,    26,   158,   220,   162,    -1,   151,   163,    26,   158,
1207      220,   162,    -1,    30,    -1,    31,    -1,    -1,   163,   135,
1208      158,   136,   162,    -1,   163,   136,   158,   135,   162,    -1,
1209      163,   136,   162,    -1,   163,   135,   162,    -1,   163,   121,
1210      162,    -1,   163,   122,   162,    -1,    -1,   126,    -1,   127,
1211       -1,   128,    -1,   121,    -1,   122,    -1,    -1,   163,   182,
1212      162,    -1,    -1,   163,   125,   162,    -1,   163,   126,   162,
1213       -1,    -1,   163,   183,   162,    -1,   163,   182,   162,    -1,
1214      163,   183,   158,   182,   162,    -1,   163,   182,   158,   183,
1215      162,    -1,    -1,   163,   134,   162,    -1,   163,   133,   162,
1216       -1,    -1,   163,   133,   162,    -1,   163,   134,   162,    -1,
1217       -1,   163,   125,   162,    -1,   163,   126,   162,    -1,   163,
1218      143,   162,    -1,   163,   143,   158,   126,   162,    -1,   163,
1219      126,   158,   143,   162,    -1,    -1,   163,   143,   162,    -1,
1220       -1,   163,   126,   162,    -1,   108,    -1,   111,    -1,   110,
1221       -1,   109,    -1,    -1,   163,   137,   162,    -1,   163,   137,
1222      162,    -1,   163,   136,   162,    -1,   163,   136,   158,   137,
1223      162,    -1,   163,   137,   158,   136,   162,    -1,    13,    -1,
1224       14,    -1,    15,    -1,    -1,   163,   136,   162,    -1,    -1,
1225      163,   136,   162,    -1,   164,    83,    26,   165,    -1,   164,
1226       26,    84,   165,    -1,    75,    -1,    76,    -1,    79,    -1,
1227       80,    -1,    81,    -1,    82,    -1,    71,    -1,    70,    -1,
1228      163,   140,   162,    -1,   163,   129,   162,    -1,   163,   139,
1229      162,    -1,   163,   130,   162,    -1,   163,   140,   158,   137,
1230      162,    -1,   163,   129,   158,   137,   162,    -1,   163,   139,
1231      158,   137,   162,    -1,   163,   130,   158,   137,   162,    -1,
1232      163,   144,   162,    -1,   163,   145,   162,    -1,   163,   144,
1233      158,   137,   162,    -1,   163,   145,   158,   137,   162,    -1,
1234       -1,    84,    -1,    83,    -1,   179,    98,    -1,   179,   103,
1235       -1,   179,   104,    -1,    26,    98,   179,    -1,   210,    -1,
1236       26,    98,   163,   210,   162,    -1,    36,    98,   163,   210,
1237      162,    -1,    36,    98,   179,    -1,   206,   211,    -1,   208,
1238      211,    -1,   207,   211,    -1,    36,    72,    36,    -1,    98,
1239       -1,   100,    -1,   102,    -1,   101,    -1,    28,   212,   166,
1240       -1,    28,   212,   143,    -1,   166,   212,    28,    -1,   143,
1241      212,    28,    -1,   168,    -1,   170,    -1,   171,    -1,   172,
1242       -1,   214,   173,   215,    -1,   216,    -1,   220,    -1,   214,
1243      173,   174,    -1,   169,    -1,   214,    -1,   163,   221,   162,
1244       -1,    63,   221,    -1,    70,   221,    -1,   221,    -1,   221,
1245       72,   221,    -1,   221,    73,   221,    -1,   221,    67,   221,
1246       -1,   221,    71,   221,    -1,   221,    70,   221,    -1,   221,
1247       91,   221,    -1,   221,    92,   221,    -1,   221,    65,   221,
1248       -1,   221,    68,   221,    -1,   221,    66,   221,    -1,   219,
1249       -1
1250 };
1251 
1252 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
1253 static const unsigned short int yyrline[] =
1254 {
1255        0,   567,   567,   568,   580,   582,   615,   642,   653,   657,
1256      692,   712,   717,   727,   737,   742,   747,   763,   779,   791,
1257      801,   814,   833,   851,   874,   896,   901,   911,   922,   933,
1258      947,   962,   978,   994,  1010,  1021,  1035,  1061,  1079,  1084,
1259     1090,  1102,  1113,  1124,  1135,  1146,  1157,  1168,  1194,  1208,
1260     1218,  1263,  1282,  1293,  1304,  1315,  1326,  1337,  1353,  1370,
1261     1386,  1397,  1408,  1439,  1450,  1463,  1474,  1513,  1523,  1533,
1262     1553,  1563,  1573,  1583,  1594,  1602,  1612,  1622,  1633,  1657,
1263     1668,  1674,  1685,  1696,  1707,  1715,  1736,  1761,  1788,  1822,
1264     1836,  1847,  1861,  1895,  1905,  1915,  1940,  1952,  1970,  1981,
1265     1992,  2003,  2016,  2027,  2038,  2049,  2060,  2071,  2104,  2114,
1266     2127,  2147,  2158,  2169,  2182,  2195,  2206,  2217,  2228,  2239,
1267     2249,  2260,  2271,  2283,  2294,  2305,  2316,  2329,  2341,  2353,
1268     2364,  2375,  2386,  2398,  2410,  2421,  2432,  2443,  2453,  2459,
1269     2465,  2471,  2477,  2483,  2489,  2495,  2501,  2507,  2513,  2524,
1270     2535,  2546,  2557,  2568,  2579,  2590,  2596,  2607,  2618,  2629,
1271     2640,  2651,  2661,  2674,  2682,  2690,  2714,  2725,  2736,  2747,
1272     2758,  2769,  2781,  2794,  2803,  2814,  2825,  2837,  2848,  2859,
1273     2870,  2884,  2896,  2911,  2930,  2941,  2959,  2993,  3011,  3028,
1274     3039,  3050,  3061,  3082,  3101,  3114,  3128,  3140,  3156,  3196,
1275     3229,  3237,  3253,  3272,  3286,  3305,  3321,  3329,  3338,  3349,
1276     3361,  3375,  3383,  3393,  3405,  3410,  3415,  3421,  3429,  3435,
1277     3441,  3447,  3460,  3464,  3474,  3478,  3483,  3488,  3493,  3500,
1278     3504,  3511,  3515,  3520,  3525,  3533,  3537,  3544,  3548,  3556,
1279     3561,  3567,  3576,  3581,  3587,  3593,  3599,  3608,  3611,  3615,
1280     3622,  3625,  3629,  3636,  3641,  3647,  3653,  3659,  3664,  3672,
1281     3675,  3682,  3685,  3692,  3696,  3700,  3704,  3711,  3714,  3721,
1282     3726,  3733,  3740,  3752,  3756,  3760,  3767,  3770,  3780,  3783,
1283     3792,  3798,  3807,  3811,  3818,  3822,  3826,  3830,  3837,  3841,
1284     3848,  3856,  3864,  3872,  3880,  3887,  3894,  3902,  3912,  3917,
1285     3922,  3927,  3935,  3938,  3942,  3951,  3958,  3965,  3972,  3987,
1286     3993,  4001,  4009,  4027,  4034,  4041,  4051,  4064,  4068,  4072,
1287     4076,  4083,  4089,  4095,  4101,  4111,  4120,  4122,  4124,  4128,
1288     4136,  4140,  4147,  4153,  4159,  4163,  4167,  4171,  4177,  4183,
1289     4187,  4191,  4195,  4199,  4203,  4207,  4211,  4215,  4219,  4223
1290 };
1291 #endif
1292 
1293 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1294 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1295    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1296 static const char *const yytname[] =
1297 {
1298   "$end", "error", "$undefined", "BYTEOP16P", "BYTEOP16M", "BYTEOP1P",
1299   "BYTEOP2P", "BYTEOP2M", "BYTEOP3P", "BYTEUNPACK", "BYTEPACK", "PACK",
1300   "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX", "EXTRACT", "DEPOSIT",
1301   "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS", "LINK", "UNLINK", "REG",
1302   "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO", "REG_A_DOUBLE_ONE",
1303   "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L", "A_ONE_DOT_H", "HALF_REG",
1304   "NOP", "RTI", "RTS", "RTX", "RTN", "RTE", "HLT", "IDLE", "STI", "CLI",
1305   "CSYNC", "SSYNC", "EMUEXCPT", "RAISE", "EXCPT", "LSETUP", "LOOP",
1306   "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT", "JUMP", "JUMP_DOT_S",
1307   "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA", "BANG", "AMPERSAND",
1308   "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS", "STAR", "SLASH",
1309   "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR", "_PLUS_BAR_PLUS",
1310   "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS", "_MINUS_BAR_MINUS", "_MINUS_MINUS",
1311   "_PLUS_PLUS", "SHIFT", "LSHIFT", "ASHIFT", "BXORSHIFT",
1312   "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT", "LESS_LESS",
1313   "GREATER_GREATER", "_GREATER_GREATER_GREATER", "_LESS_LESS_ASSIGN",
1314   "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN", "_STAR_ASSIGN",
1315   "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN", "_MINUS_ASSIGN",
1316   "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN", "_ASSIGN_ASSIGN",
1317   "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV", "FLUSH", "IFLUSH",
1318   "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET", "ASL", "ASR", "B", "W",
1319   "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV", "X", "Z", "M", "MMOD",
1320   "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V", "LO", "HI", "BITTGL",
1321   "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL", "DBGAH", "DBGHALT",
1322   "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY", "COLON", "SEMICOLON",
1323   "RPAREN", "LPAREN", "LBRACK", "RBRACK", "STATUS_REG", "MNOP", "SYMBOL",
1324   "NUMBER", "GOT", "GOT17M4", "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept",
1325   "statement", "asm", "asm_1", "REG_A", "opt_mode", "asr_asl", "sco",
1326   "asr_asl_0", "amod0", "amod1", "amod2", "xpmod", "xpmod1", "vsmod",
1327   "vmod", "smod", "searchmod", "aligndir", "byteop_mod", "c_align",
1328   "w32_or_nothing", "iu_or_nothing", "reg_with_predec", "reg_with_postinc",
1329   "min_max", "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op",
1330   "a_assign", "a_minusassign", "a_plusassign", "assign_macfunc",
1331   "a_macfunc", "multiply_halfregs", "cc_op", "ccstat", "symbol",
1332   "any_gotrel", "got", "got_or_expr", "pltpc", "eterm", "expr", "expr_1", 0
1333 };
1334 #endif
1335 
1336 # ifdef YYPRINT
1337 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1338    token YYLEX-NUM.  */
1339 static const unsigned short int yytoknum[] =
1340 {
1341        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1342      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1343      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1344      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1345      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1346      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1347      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1348      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1349      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1350      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1351      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1352      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1353      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
1354      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
1355      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
1356      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
1357      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
1358      425,   426,   427,   428,   429
1359 };
1360 # endif
1361 
1362 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1363 static const unsigned char yyr1[] =
1364 {
1365        0,   175,   176,   176,   177,   177,   177,   177,   178,   178,
1366      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1367      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1368      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1369      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1370      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1371      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1372      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1373      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1374      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1375      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1376      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1377      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1378      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1379      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1380      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1381      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1382      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1383      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1384      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1385      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1386      178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
1387      178,   178,   179,   179,   180,   180,   180,   180,   180,   181,
1388      181,   182,   182,   182,   182,   183,   183,   184,   184,   185,
1389      185,   185,   186,   186,   186,   186,   186,   187,   187,   187,
1390      188,   188,   188,   189,   189,   189,   189,   189,   189,   190,
1391      190,   191,   191,   192,   192,   192,   192,   193,   193,   194,
1392      194,   194,   194,   195,   195,   195,   196,   196,   197,   197,
1393      198,   199,   200,   200,   201,   201,   201,   201,   202,   202,
1394      203,   203,   203,   203,   203,   203,   203,   203,   204,   204,
1395      204,   204,   205,   205,   205,   206,   207,   208,   209,   209,
1396      209,   209,   209,   210,   210,   210,   211,   212,   212,   212,
1397      212,   213,   213,   213,   213,   214,   215,   215,   215,   216,
1398      217,   217,   218,   219,   219,   219,   219,   219,   220,   221,
1399      221,   221,   221,   221,   221,   221,   221,   221,   221,   221
1400 };
1401 
1402 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
1403 static const unsigned char yyr2[] =
1404 {
1405        0,     2,     0,     1,     2,     6,     4,     1,     1,     2,
1406        5,     1,     6,     6,     3,     3,    17,    17,    11,    11,
1407       11,    12,    12,    12,     5,     3,     3,     3,     8,    13,
1408       12,    13,    13,    13,     8,    17,     6,     9,     3,     6,
1409        3,     5,     6,     8,     8,     2,     2,     4,     3,     2,
1410        4,     3,     6,     4,     7,     7,     3,     3,     6,     3,
1411        4,     3,     3,     3,    11,    11,     9,     5,     5,     9,
1412        5,     5,     6,     6,     5,     5,     5,     6,     6,     5,
1413        1,     3,     3,     3,     3,     4,     4,     9,     9,     5,
1414        7,     4,     6,     5,     6,     7,     9,     8,     8,    11,
1415        9,     4,     5,     6,     7,     6,     4,     6,     5,     6,
1416        6,     4,     8,    10,    10,    12,     5,     6,     5,     6,
1417        4,     4,     4,     7,     9,     9,     9,     6,     6,     6,
1418        8,     8,     6,     5,     5,     8,     4,     7,     1,     1,
1419        1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
1420        4,     4,     6,     6,     2,     2,     4,     2,     2,     2,
1421        2,     2,     2,     6,     6,     5,     4,     3,     3,     3,
1422        3,     3,     3,     4,     2,     4,     2,     4,     2,     4,
1423        2,     7,     8,     8,     7,     7,     7,     9,     7,     8,
1424        9,     8,     6,     7,     8,     9,     8,     7,     7,     6,
1425        3,    11,     7,    11,     7,     3,     2,     1,     7,     9,
1426       11,     3,     5,     7,     1,     2,     2,     4,     1,     6,
1427        6,     6,     1,     1,     0,     5,     5,     3,     3,     3,
1428        3,     0,     1,     1,     1,     1,     1,     0,     3,     0,
1429        3,     3,     0,     3,     3,     5,     5,     0,     3,     3,
1430        0,     3,     3,     0,     3,     3,     3,     5,     5,     0,
1431        3,     0,     3,     1,     1,     1,     1,     0,     3,     3,
1432        3,     5,     5,     1,     1,     1,     0,     3,     0,     3,
1433        4,     4,     1,     1,     1,     1,     1,     1,     1,     1,
1434        3,     3,     3,     3,     5,     5,     5,     5,     3,     3,
1435        5,     5,     0,     1,     1,     2,     2,     2,     3,     1,
1436        5,     5,     3,     2,     2,     2,     3,     1,     1,     1,
1437        1,     3,     3,     3,     3,     1,     1,     1,     1,     3,
1438        1,     1,     3,     1,     1,     3,     2,     2,     1,     3,
1439        3,     3,     3,     3,     3,     3,     3,     3,     3,     1
1440 };
1441 
1442 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1443    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
1444    means the default is an error.  */
1445 static const unsigned short int yydefact[] =
1446 {
1447        0,     7,     0,     0,   207,     0,     0,   222,   223,     0,
1448        0,     0,     0,     0,   138,   140,   139,   141,   142,   143,
1449      144,     0,     0,   145,   146,   147,     0,     0,     0,     0,
1450       11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1451        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1452        0,     0,     0,   218,   214,     0,     0,     0,     0,     0,
1453        0,     8,   325,   333,     0,     3,     0,     0,     0,     0,
1454        0,     0,   224,   309,    80,   334,   349,     0,   338,     0,
1455        0,   206,     0,     0,     0,     0,     0,     0,     0,   317,
1456      318,   320,   319,     0,     0,     0,     0,     0,     0,     0,
1457      149,   148,   154,   155,     0,     0,     0,   157,   158,   334,
1458      160,   159,     0,   162,   161,   336,   337,     0,     0,     0,
1459      176,     0,   174,     0,   178,     0,   180,     0,     0,     0,
1460      317,     0,     0,     0,     0,     0,     0,     0,   216,   215,
1461        0,     0,     0,     0,     0,     0,   302,     0,     0,     1,
1462        0,     4,   305,   306,   307,     0,    46,     0,     0,     0,
1463        0,     0,     0,     0,    45,     0,   313,    49,   276,   315,
1464      314,     0,     9,     0,     0,     0,     0,     0,     0,     0,
1465        0,     0,     0,     0,     0,   169,   172,   170,   171,   167,
1466      168,     0,     0,     0,     0,     0,     0,   273,   274,   275,
1467        0,     0,     0,    81,    83,   247,     0,   247,     0,     0,
1468      282,   283,     0,     0,     0,     0,     0,     0,     0,     0,
1469        0,   308,     0,     0,   224,   250,    63,    59,    57,    61,
1470       62,    82,     0,     0,    84,     0,   322,   321,    26,    14,
1471       27,    15,     0,     0,     0,     0,    51,     0,     0,     0,
1472        0,     0,     0,   312,   224,    48,     0,   211,     0,     0,
1473        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1474      302,   302,   324,     0,     0,     0,     0,     0,     0,     0,
1475        0,     0,     0,     0,     0,     0,   335,   289,   288,   304,
1476      303,     0,     0,     0,   323,     0,   276,   205,     0,     0,
1477       38,    25,     0,     0,     0,     0,     0,     0,     0,     0,
1478       40,     0,    56,     0,     0,     0,   200,   346,   348,   341,
1479      347,   343,   342,   339,   340,   344,   345,     0,     0,     0,
1480        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1481      288,   284,   285,   286,   287,     0,     0,     0,     0,     0,
1482        0,    53,     0,    47,   166,   253,   259,     0,     0,     0,
1483        0,     0,     0,     0,     0,     0,     0,     0,     0,   302,
1484        0,     0,     0,    86,     0,    50,     0,     0,     0,     0,
1485        0,     0,     0,     0,     0,     0,     0,   111,   121,   122,
1486      120,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1487        0,     0,     0,     0,    85,     0,     0,   150,     0,   332,
1488      151,     0,     0,     0,     0,   175,   173,   177,   179,   156,
1489      303,     0,     0,   303,     0,     0,     0,     0,     0,     0,
1490        0,     0,     0,   217,     0,   136,     0,     0,     0,     0,
1491        0,     0,     0,   280,     0,     6,    60,     0,   316,     0,
1492        0,     0,     0,     0,     0,    91,   106,   101,     0,     0,
1493        0,   228,     0,   227,     0,     0,   224,     0,     0,     0,
1494        0,     0,     0,     0,     0,     0,     0,    79,    67,    68,
1495        0,   253,   259,   253,   237,   239,     0,     0,     0,     0,
1496      165,     0,    24,     0,     0,     0,     0,   302,   302,     0,
1497      307,     0,   310,   303,     0,     0,     0,     0,     0,     0,
1498        0,     0,     0,   278,   278,    74,    75,   278,   278,     0,
1499       76,    70,    71,     0,     0,     0,     0,     0,     0,     0,
1500        0,    93,   108,   261,     0,   239,     0,     0,   302,     0,
1501      311,     0,     0,   212,     0,     0,     0,     0,   281,     0,
1502        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1503        0,   133,     0,     0,   134,     0,     0,     0,     0,     0,
1504        0,     0,     0,     0,     0,     0,   102,    89,     0,   116,
1505      118,    41,   277,     0,     0,     0,     0,    10,     0,     0,
1506        0,     0,     0,     0,     0,     0,     0,     0,     0,    92,
1507      107,   110,     0,   231,    52,     0,     0,    36,   249,   248,
1508        0,     0,     0,     0,     0,   105,   259,   253,   117,   119,
1509        0,     0,   303,     0,     0,     0,    12,     0,   334,   330,
1510        0,   331,   199,     0,     0,     0,     0,   251,   252,    58,
1511        0,    77,    78,    72,    73,     0,     0,     0,     0,     0,
1512       42,     0,     0,     0,     0,    94,   109,     0,    39,   103,
1513      261,   303,     0,    13,     0,     0,     0,   153,   152,   164,
1514      163,     0,     0,     0,     0,     0,   129,   127,   128,     0,
1515      221,   220,   219,     0,   132,     0,     0,     0,     0,     0,
1516        0,   192,     5,     0,     0,     0,     0,     0,   225,   226,
1517        0,   308,     0,     0,     0,     0,     0,     0,     0,     0,
1518        0,     0,     0,     0,     0,   232,   233,   234,     0,     0,
1519        0,     0,     0,   254,     0,   255,     0,   256,   260,   104,
1520       95,     0,   247,     0,     0,   247,     0,   197,     0,   198,
1521        0,     0,     0,     0,     0,     0,     0,     0,   123,     0,
1522        0,     0,     0,     0,     0,     0,     0,    90,     0,   188,
1523        0,   208,   213,     0,   181,     0,     0,   184,   185,     0,
1524      137,     0,     0,     0,     0,     0,     0,     0,   204,   193,
1525      186,     0,   202,    55,    54,     0,     0,     0,     0,     0,
1526        0,     0,    34,   112,     0,   247,    98,     0,     0,   238,
1527        0,   240,   241,     0,     0,     0,   247,   196,   247,   247,
1528      189,     0,   326,   327,   328,   329,     0,    28,   259,   224,
1529      279,   131,   130,     0,     0,   259,    97,    43,    44,     0,
1530        0,   262,     0,   191,   224,     0,   182,   194,   183,     0,
1531      135,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1532        0,     0,     0,     0,     0,   124,   100,     0,    69,     0,
1533        0,     0,   258,   257,   195,   190,   187,    66,     0,    37,
1534       88,   229,   230,    96,     0,     0,     0,     0,    87,   209,
1535      125,     0,     0,     0,     0,     0,     0,   126,     0,   267,
1536        0,     0,     0,     0,     0,     0,     0,     0,     0,   114,
1537        0,   113,     0,     0,     0,     0,   267,   263,   266,   265,
1538      264,     0,     0,     0,     0,     0,    64,     0,     0,     0,
1539        0,    99,   242,   239,    20,   239,     0,     0,   210,     0,
1540        0,    18,    19,   203,   201,    65,     0,    30,     0,     0,
1541        0,   231,    23,    22,    21,   115,     0,     0,     0,   268,
1542        0,    29,     0,    31,    32,     0,    33,   235,   236,     0,
1543        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1544        0,     0,     0,   244,   231,   243,     0,     0,     0,     0,
1545      270,     0,   269,     0,   291,     0,   293,     0,   292,     0,
1546      290,     0,   298,     0,   299,     0,     0,     0,     0,     0,
1547        0,     0,     0,     0,     0,     0,     0,     0,   246,   245,
1548        0,   267,   267,   271,   272,   295,   297,   296,   294,   300,
1549      301,    35,    16,    17
1550 };
1551 
1552 /* YYDEFGOTO[NTERM-NUM]. */
1553 static const short int yydefgoto[] =
1554 {
1555       -1,    64,    65,    66,   364,   172,   748,   718,   960,   604,
1556      607,   942,   351,   375,   490,   492,   655,   911,   916,   951,
1557      222,   312,   641,    68,   120,   223,   348,   291,   953,   956,
1558      292,   365,   366,    71,    72,    73,   170,    94,    74,    75,
1559      815,   629,   630,   110,    76,    77,    78
1560 };
1561 
1562 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1563    STATE-NUM.  */
1564 #define YYPACT_NINF -903
1565 static const short int yypact[] =
1566 {
1567      697,  -903,   -94,   277,  -903,   676,   315,  -903,  -903,    23,
1568       32,    41,    58,    65,  -903,  -903,  -903,  -903,  -903,  -903,
1569     -903,   121,   158,  -903,  -903,  -903,   277,   277,    29,   277,
1570     -903,   318,   277,   277,   320,   277,   277,    94,   100,    64,
1571      104,   108,   131,   137,   152,   165,   376,   160,   171,   176,
1572      182,   219,   238,  -903,   566,   244,   251,    79,    96,    44,
1573      376,  -903,  -903,  -903,   350,  -903,   -57,   187,   337,    63,
1574      245,   394,   278,  -903,  -903,  -903,  -903,   349,   563,   436,
1575      277,  -903,   146,   159,   167,   489,   438,   186,   188,    37,
1576     -903,  -903,  -903,    15,  -118,   446,   462,   480,   485,    28,
1577     -903,  -903,  -903,  -903,   277,   513,    50,  -903,  -903,   353,
1578     -903,  -903,    85,  -903,  -903,  -903,  -903,   521,   534,   537,
1579     -903,   542,  -903,   567,  -903,   575,  -903,   578,   583,   585,
1580     -903,   619,   590,   598,   630,   651,   656,   680,  -903,  -903,
1581      677,   693,    62,   692,   204,   470,   200,   698,   712,  -903,
1582      886,  -903,  -903,  -903,   180,    -6,  -903,   419,   302,   180,
1583      180,   180,   589,   180,    97,   277,  -903,  -903,   595,  -903,
1584     -903,   297,   568,   277,   277,   277,   277,   277,   277,   277,
1585      277,   277,   277,   277,   591,  -903,  -903,  -903,  -903,  -903,
1586     -903,   599,   600,   601,   603,   605,   606,  -903,  -903,  -903,
1587      609,   613,   614,   580,  -903,   615,   688,   -38,   210,   226,
1588     -903,  -903,   735,   755,   756,   757,   759,   622,   623,    98,
1589      762,   718,   627,   628,   278,   629,  -903,  -903,  -903,   632,
1590     -903,   205,   633,   332,  -903,   634,  -903,  -903,  -903,  -903,
1591     -903,  -903,   635,   636,   774,   449,   -25,   703,   227,   766,
1592      768,   641,   302,  -903,   278,  -903,   648,   709,   647,   743,
1593      642,   653,   747,   661,   664,   -62,   -31,   -19,    16,   662,
1594      326,   372,  -903,   665,   667,   668,   669,   670,   671,   672,
1595      673,   733,   277,    84,   806,   277,  -903,  -903,  -903,  -903,
1596      808,   277,   674,   690,  -903,   -16,   595,  -903,   810,   801,
1597      683,   684,   679,   699,   180,   700,   277,   277,   277,   730,
1598     -903,   721,  -903,   -26,   116,   520,  -903,   441,   616,  -903,
1599      457,   313,   313,  -903,  -903,   500,   500,   277,   836,   841,
1600      842,   843,   844,   835,   846,   848,   849,   850,   851,   852,
1601      716,  -903,  -903,  -903,  -903,   277,   277,   277,   855,   856,
1602      316,  -903,   857,  -903,  -903,   722,   723,   725,   732,   734,
1603      736,   868,   870,   826,   487,   394,   394,   245,   737,   389,
1604      180,   877,   878,   748,   324,  -903,   773,   243,   268,   300,
1605      881,   180,   180,   180,   882,   883,   189,  -903,  -903,  -903,
1606     -903,   775,   903,   110,   277,   277,   277,   918,   905,   788,
1607      789,   924,   245,   790,   793,   277,   927,  -903,   928,  -903,
1608     -903,   929,   931,   932,   794,  -903,  -903,  -903,  -903,  -903,
1609     -903,   277,   795,   935,   277,   797,   277,   277,   277,   937,
1610      277,   277,   277,  -903,   938,   802,   869,   277,   804,   179,
1611      803,   805,   871,  -903,   886,  -903,  -903,   811,  -903,   180,
1612      180,   936,   940,   815,    72,  -903,  -903,  -903,   816,   817,
1613      845,  -903,   853,  -903,   879,   887,   278,   822,   824,   827,
1614      829,   830,   828,   833,   834,   837,   838,  -903,  -903,  -903,
1615      967,   722,   723,   722,   -66,    92,   832,   854,   839,    95,
1616     -903,   860,  -903,   962,   968,   969,   124,   326,   474,   981,
1617     -903,   858,  -903,   982,   277,   847,   859,   861,   863,   985,
1618      862,   864,   865,   867,   867,  -903,  -903,   867,   867,   873,
1619     -903,  -903,  -903,   888,   866,   889,   890,   894,   872,   895,
1620      896,   897,  -903,   897,   898,   899,   977,   978,   426,   901,
1621     -903,   979,   902,   926,   904,   906,   907,   908,  -903,   880,
1622      925,   892,   900,   946,   909,   910,   911,   893,   912,   913,
1623      914,  -903,   891,   999,   915,   983,  1041,   984,   986,   987,
1624     1051,   919,   277,   988,  1009,  1006,  -903,  -903,   180,  -903,
1625     -903,   930,  -903,   933,   934,     2,     6,  -903,  1061,   277,
1626      277,   277,   277,  1063,  1054,  1065,  1056,  1067,  1003,  -903,
1627     -903,  -903,  1071,   427,  -903,  1072,   455,  -903,  -903,  -903,
1628     1073,   939,   190,   209,   941,  -903,   723,   722,  -903,  -903,
1629      277,   942,  1074,   277,   943,   944,  -903,   945,   947,  -903,
1630      948,  -903,  -903,  1076,  1078,  1079,  1011,  -903,  -903,  -903,
1631      975,  -903,  -903,  -903,  -903,   277,   277,   949,  1080,  1081,
1632     -903,   497,   180,   180,   989,  -903,  -903,  1082,  -903,  -903,
1633      897,  1088,   954,  -903,  1023,  1096,   277,  -903,  -903,  -903,
1634     -903,  1025,  1098,  1027,  1028,   191,  -903,  -903,  -903,   180,
1635     -903,  -903,  -903,   965,  -903,   997,   357,   970,   971,  1103,
1636     1105,  -903,  -903,   246,   180,   180,   974,   180,  -903,  -903,
1637      180,  -903,   180,   973,   976,   980,   990,   991,   992,   993,
1638      994,   995,   996,   277,  1038,  -903,  -903,  -903,   998,  1039,
1639     1000,  1001,  1042,  -903,  1002,  -903,  1013,  -903,  -903,  -903,
1640     -903,  1004,   615,  1005,  1007,   615,  1050,  -903,   533,  -903,
1641     1044,  1012,  1014,   394,  1015,  1016,  1017,   477,  -903,  1018,
1642     1019,  1020,  1021,  1008,  1010,  1022,  1024,  -903,  1026,  -903,
1643      394,  1045,  -903,  1118,  -903,  1110,  1121,  -903,  -903,  1030,
1644     -903,  1031,  1032,  1033,  1124,  1125,   277,  1126,  -903,  -903,
1645     -903,  1127,  -903,  -903,  -903,  1131,   180,   277,  1135,  1138,
1646     1139,  1141,  -903,  -903,   949,   615,  1034,  1036,  1145,  -903,
1647     1147,  -903,  -903,  1143,  1037,  1040,   615,  -903,   615,   615,
1648     -903,   277,  -903,  -903,  -903,  -903,   180,  -903,   723,   278,
1649     -903,  -903,  -903,  1043,  1046,   723,  -903,  -903,  -903,   588,
1650     1159,  -903,  1115,  -903,   278,  1162,  -903,  -903,  -903,   949,
1651     -903,  1163,  1164,  1047,  1048,  1052,  1116,  1049,  1053,  1055,
1652     1057,  1060,  1062,  1064,  1066,  -903,  -903,  1068,  -903,   586,
1653      624,  1123,  -903,  -903,  -903,  -903,  -903,  -903,  1133,  -903,
1654     -903,  -903,  -903,  -903,  1059,  1058,  1069,  1168,  -903,  1114,
1655     -903,  1070,  1075,   277,   582,  1112,   277,  -903,  1086,  1077,
1656      277,   277,   277,   277,  1083,  1187,  1191,  1190,   180,  -903,
1657     1197,  -903,  1156,   277,   277,   277,  1077,  -903,  -903,  -903,
1658     -903,  1084,   971,  1085,  1087,  1091,  -903,  1089,  1090,  1092,
1659     1093,  -903,  1094,   899,  -903,   899,  1097,  1207,  -903,  1095,
1660     1100,  -903,  -903,  -903,  -903,  -903,  1099,  1101,  1102,  1102,
1661     1104,   456,  -903,  -903,  -903,  -903,  1106,  1206,  1208,  -903,
1662      579,  -903,   229,  -903,  -903,   555,  -903,  -903,  -903,   264,
1663      448,  1200,  1108,  1111,   463,   464,   465,   479,   482,   516,
1664      517,   518,   596,  -903,   427,  -903,  1113,   277,   277,  1107,
1665     -903,  1120,  -903,  1129,  -903,  1136,  -903,  1137,  -903,  1140,
1666     -903,  1142,  -903,  1144,  -903,  1122,  1128,  1161,  1130,  1132,
1667     1134,  1146,  1148,  1149,  1150,  1151,  1152,  1153,  -903,  -903,
1668     1201,  1077,  1077,  -903,  -903,  -903,  -903,  -903,  -903,  -903,
1669     -903,  -903,  -903,  -903
1670 };
1671 
1672 /* YYPGOTO[NTERM-NUM].  */
1673 static const short int yypgoto[] =
1674 {
1675     -903,  -903,  -903,  -134,    17,  -219,  -716,  -902,   266,  -903,
1676     -520,  -903,  -201,  -903,  -443,  -472,  -478,  -903,  -788,  -903,
1677     -903,   952,  -275,  -903,   -39,  -903,   380,  -196,   303,  -903,
1678     -252,     4,     8,  -162,   955,  -210,   -58,    49,  -903,   -20,
1679     -903,  -903,  -903,  1209,  -903,    -3,    25
1680 };
1681 
1682 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
1683    positive, shift that token.  If negative, reduce the rule which
1684    number is the opposite.  If zero, do what YYDEFACT says.
1685    If YYTABLE_NINF, syntax error.  */
1686 #define YYTABLE_NINF -3
1687 static const short int yytable[] =
1688 {
1689       81,   122,   124,   126,    69,   373,   353,   349,    70,   368,
1690      600,   166,   169,   109,   109,   658,   295,    67,   422,   425,
1691      297,   150,   414,   102,   103,   236,   105,   224,   107,   108,
1692      111,   114,     7,     8,   299,   404,     7,     8,   599,   959,
1693      601,   254,   403,   234,   242,   287,   288,   243,   237,   244,
1694      392,   245,   398,   414,   246,   656,   247,   367,     7,     8,
1695      115,   116,   444,   231,   248,   414,   167,     7,     8,    79,
1696      146,   139,   996,   165,   421,   424,   258,   259,   855,   186,
1697      188,   190,   225,   145,   228,   230,   164,   168,   281,   156,
1698      402,    35,   602,     7,     8,   131,   255,   603,    36,   157,
1699      414,   256,   221,   415,   151,   145,   233,   142,   579,   148,
1700      436,   261,   262,    35,   249,   250,   253,   505,   931,   282,
1701       36,    95,   144,   880,   363,   350,    35,   147,     7,     8,
1702       96,   145,   460,   158,   416,    35,   461,   145,   391,    97,
1703      159,   437,    36,   143,   729,   445,   417,   100,    35,   160,
1704      161,   162,   251,   163,    69,    36,    98,   298,    70,    35,
1705      618,    35,   310,    99,   235,   700,    36,    67,    36,   702,
1706      316,   296,   185,   504,   730,   300,   301,   302,   303,   529,
1707      305,   418,   757,   116,   101,   187,   232,    35,   306,   307,
1708      308,   252,   104,   189,    36,   152,    62,    63,   530,   317,
1709      318,   319,   320,   321,   322,   323,   324,   325,   326,    35,
1710        7,     8,   227,    80,   229,   525,    36,   767,    62,    63,
1711      611,   612,    35,  1022,  1023,   526,    80,   768,   119,    36,
1712       35,    62,    63,   115,   116,    80,   354,    36,   613,   642,
1713       62,    63,   643,   644,   145,   621,   624,   587,    80,    35,
1714      605,    35,   355,    62,    63,   606,    36,   117,    36,    80,
1715      309,    80,   390,   118,    62,    63,    62,    63,   121,   513,
1716      287,   288,   123,    35,   462,     7,     8,   145,   463,   435,
1717       36,   157,   439,   289,   290,   152,   662,    80,   441,    35,
1718      153,   154,    62,    63,   515,   125,    36,   287,   288,   299,
1719      127,   620,   623,   455,   456,   457,    35,   166,   169,    80,
1720      571,   377,   378,    36,    62,    63,   128,   379,   394,   395,
1721      396,   453,    80,   132,   467,   397,   517,    62,    63,   129,
1722       80,    35,     7,     8,   133,    62,    63,   566,    36,   134,
1723       35,   567,   481,   482,   483,   135,   869,    36,   724,    80,
1724      149,    80,   725,   873,    62,    63,    62,    63,   966,   967,
1725      772,   773,   284,    35,   285,    35,   774,   726,   968,   969,
1726       36,   727,    36,    80,   514,   516,   518,   775,    62,    63,
1727      176,    35,   136,    35,   501,   180,   181,   506,    36,    80,
1728       36,   531,   532,   533,    62,    63,   287,   288,   520,   521,
1729      522,   137,   542,   943,   781,   944,    80,   140,   782,   289,
1730      420,    62,    63,    89,   141,    90,    91,    92,   549,   539,
1731       93,   552,   972,   554,   555,   556,   973,   558,   559,   560,
1732      157,    80,   313,   314,   564,   155,    62,    63,   381,   382,
1733       80,   171,   287,   288,   383,    62,    63,   173,    69,   486,
1734      487,   580,    70,   574,   575,   289,   423,   510,   511,   287,
1735      288,    67,   184,    80,   226,    80,   573,   573,    62,    63,
1736       62,    63,   289,   503,   130,   388,    90,    91,    92,     7,
1737        8,   106,   238,   112,   628,   389,    62,    63,    62,    63,
1738      368,   299,   403,   619,   191,   192,   193,   194,   239,   195,
1739      196,   631,   197,   198,   199,   200,   201,   202,   176,   289,
1740      661,   178,   179,   180,   181,   203,   240,   204,   205,     7,
1741        8,   241,   174,   206,   176,   207,   260,   178,   179,   180,
1742      181,   807,   182,   183,   810,   174,   175,   176,   177,   257,
1743      178,   179,   180,   181,   287,   288,   464,   263,   182,   183,
1744        7,     8,   208,   715,   716,   717,   465,   289,   622,   209,
1745      264,   182,   183,   265,   210,   211,   212,   176,   266,   693,
1746      178,   179,   180,   181,   213,   214,   215,   957,   958,   216,
1747      720,   721,   715,   716,   717,   152,   704,   705,   706,   707,
1748      153,   500,   138,   267,   856,   696,     7,     8,   823,   824,
1749      870,   268,   701,   253,   269,   864,   974,   865,   866,   270,
1750      975,   271,   217,   218,   874,   878,   273,   731,     7,     8,
1751      734,   979,   981,   983,   274,   980,   982,   984,   174,   175,
1752      176,   177,   286,   178,   179,   180,   181,   985,   751,   752,
1753      987,   986,   745,   746,   988,   337,   338,   272,   339,   778,
1754      287,   340,   219,   220,   182,   183,   275,    62,    63,   341,
1755      342,   343,   344,   762,   896,   341,   342,   343,   344,   753,
1756      754,   345,   346,   347,   989,   991,   993,   276,   990,   992,
1757      994,   174,   277,   176,   177,   819,   178,   179,   180,   181,
1758      907,   908,   909,   910,   287,   288,   769,    -2,     1,   970,
1759      971,   786,   834,   812,   813,   814,   278,   182,   183,     2,
1760      797,   783,   784,   279,   573,   964,   965,   957,   958,   280,
1761      283,     3,     4,     5,   293,     6,   315,     7,     8,     9,
1762       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
1763      294,    20,    21,    22,    23,    24,    25,    26,    27,    28,
1764       29,   327,   304,    30,    31,    32,    33,    34,   311,   352,
1765       35,   356,   328,   329,   330,    82,   331,    36,   332,   333,
1766       83,    84,   334,   845,    85,    86,   335,   336,   350,    87,
1767       88,   357,   358,   359,   850,   360,   361,   362,   369,   370,
1768      371,   372,   374,    37,    38,   376,   380,   384,   385,   386,
1769      387,   393,   399,   849,   400,   401,   405,   406,   867,   407,
1770       39,    40,    41,    42,   408,   410,   409,    43,   411,   412,
1771       44,    45,   413,   426,   419,   427,   428,   429,   430,   431,
1772      432,   434,   438,   868,   440,   433,   447,   448,   451,   442,
1773       46,   449,   450,    47,    48,    49,   875,    50,    51,    52,
1774       53,    54,    55,    56,    57,   443,   458,   459,   452,   454,
1775       58,    59,   468,    60,    61,    62,    63,   469,   470,   471,
1776      472,   473,   474,   933,   475,   476,   477,   478,   479,   480,
1777      906,   484,   485,   913,   493,   489,   491,   917,   918,   919,
1778      920,   494,   488,   495,   497,   496,   498,   499,     2,   502,
1779      928,   929,   930,   507,   508,   512,   509,   519,   523,   524,
1780        3,     4,     5,   527,     6,   925,     7,     8,     9,    10,
1781       11,    12,    13,    14,    15,    16,    17,    18,    19,   528,
1782       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
1783      534,   535,    30,    31,    32,    33,    34,   536,   537,    35,
1784      538,   541,   540,   543,   544,   545,    36,   546,   547,   548,
1785      550,   551,   553,   557,   561,   562,   565,   563,   568,   570,
1786      569,   572,   576,   578,   998,   999,   577,   585,   581,   582,
1787      588,   583,    37,    38,   589,   586,   593,   590,   584,   591,
1788      592,   594,   595,   598,   608,   596,   597,   610,   615,    39,
1789       40,    41,    42,   614,   616,   617,    43,   625,   627,    44,
1790       45,   636,   632,   659,   660,   664,   609,   633,   666,   634,
1791      626,   635,   683,   672,   637,   684,   638,   639,   647,    46,
1792      640,   645,    47,    48,    49,   651,    50,    51,    52,    53,
1793       54,    55,    56,    57,   675,   671,   646,   648,   649,    58,
1794       59,   679,    60,    61,    62,    63,   650,   673,   652,   653,
1795      654,   657,   606,   663,   665,   674,   667,   687,   668,   669,
1796      670,   676,   677,   678,   680,   681,   682,   691,   685,   694,
1797      692,   686,   688,   695,   689,   690,   152,   703,   697,   708,
1798      709,   710,   711,   712,   713,   698,   699,   714,   719,   722,
1799      733,   723,   740,   728,   741,   742,   736,   732,   735,   743,
1800      737,   744,   747,   739,   758,   755,   749,   750,   756,   759,
1801      738,   760,   761,   763,   764,   765,   766,   770,   771,   779,
1802      776,   780,   785,   787,   788,   777,   798,   800,   789,   805,
1803      803,   811,   816,   835,   836,   804,   837,   838,   790,   791,
1804      843,   844,   846,   847,   792,   793,   794,   795,   796,   848,
1805      799,   851,   801,   802,   852,   853,   829,   854,   830,   806,
1806      808,   859,   809,   860,   817,   861,   818,   820,   821,   822,
1807      825,   826,   827,   828,   831,   876,   832,   877,   879,   881,
1808      882,   833,   839,   840,   897,   841,   842,   857,   858,   862,
1809      414,   894,   863,   898,   902,   871,   903,   883,   872,   886,
1810      912,   884,   914,   922,   885,   887,   900,   923,   888,   889,
1811      890,   899,   891,   924,   892,   926,   893,   927,   936,   946,
1812      904,   901,   962,  1010,   963,   905,   976,  1021,   995,   895,
1813      915,     0,   954,   113,  1000,   921,   932,   934,   446,   935,
1814        0,   937,   938,   947,   939,   940,  1001,   941,   948,   945,
1815        0,   949,     0,     0,   950,   952,  1002,   955,   977,   961,
1816      466,   978,     0,  1003,  1004,   997,     0,  1005,     0,  1006,
1817        0,  1007,     0,     0,  1008,     0,     0,     0,     0,     0,
1818     1009,     0,  1011,     0,  1012,     0,  1013,     0,     0,     0,
1819        0,     0,     0,     0,     0,     0,     0,     0,  1014,     0,
1820     1015,  1016,  1017,  1018,  1019,  1020
1821 };
1822 
1823 static const short int yycheck[] =
1824 {
1825        3,    40,    41,    42,     0,   224,   207,   203,     0,   219,
1826      482,    69,    70,    33,    34,   535,   150,     0,   270,   271,
1827       26,    78,    84,    26,    27,   143,    29,    85,    31,    32,
1828       33,    34,    30,    31,    72,   254,    30,    31,   481,   941,
1829      483,    99,   252,    28,    16,    70,    71,    19,   166,    21,
1830      246,    23,   248,    84,    26,   533,    28,   219,    30,    31,
1831       35,    36,    78,    26,    36,    84,    69,    30,    31,   163,
1832       26,    54,   974,    69,   270,   271,    26,    27,   794,    82,
1833       83,    84,    85,    58,    87,    88,    69,    70,    26,    26,
1834      252,    63,   158,    30,    31,    46,    99,   163,    70,    36,
1835       84,   104,    85,   165,   161,    80,    89,    28,    36,    60,
1836       26,    26,    27,    63,    86,    87,    99,   369,   906,    57,
1837       70,    98,    26,   839,    26,   163,    63,    83,    30,    31,
1838       98,   106,   158,    70,   165,    63,   162,   112,   163,    98,
1839       77,    57,    70,    64,   616,   161,   165,    26,    63,    86,
1840       87,    88,   124,    90,   150,    70,    98,   163,   150,    63,
1841       36,    63,   165,    98,   149,   163,    70,   150,    70,   163,
1842      173,   154,    26,   369,   617,   158,   159,   160,   161,    69,
1843      163,   165,   660,   158,    26,    26,   149,    63,    91,    92,
1844       93,   163,   163,    26,    70,    98,   168,   169,    88,   174,
1845      175,   176,   177,   178,   179,   180,   181,   182,   183,    63,
1846       30,    31,    26,   163,    26,    26,    70,    26,   168,   169,
1847      125,   126,    63,  1011,  1012,    36,   163,    36,   164,    70,
1848       63,   168,   169,   208,   209,   163,    26,    70,   143,   514,
1849      168,   169,   517,   518,   219,   497,   498,   466,   163,    63,
1850      158,    63,    26,   168,   169,   163,    70,   163,    70,   163,
1851      163,   163,   245,   163,   168,   169,   168,   169,   164,    26,
1852       70,    71,   164,    63,   158,    30,    31,   252,   162,   282,
1853       70,    36,   285,    83,    84,    98,   538,   163,   291,    63,
1854      103,   104,   168,   169,    26,   164,    70,    70,    71,    72,
1855      163,   497,   498,   306,   307,   308,    63,   365,   366,   163,
1856      444,   106,   107,    70,   168,   169,   164,   112,    91,    92,
1857       93,   304,   163,   163,   327,    98,    26,   168,   169,   164,
1858      163,    63,    30,    31,   163,   168,   169,   158,    70,   163,
1859       63,   162,   345,   346,   347,   163,   818,    70,   158,   163,
1860        0,   163,   162,   825,   168,   169,   168,   169,   129,   130,
1861        3,     4,   158,    63,   160,    63,     9,   158,   139,   140,
1862       70,   162,    70,   163,   377,   378,   379,    20,   168,   169,
1863       67,    63,   163,    63,   367,    72,    73,   370,    70,   163,
1864       70,   394,   395,   396,   168,   169,    70,    71,   381,   382,
1865      383,   163,   405,   923,   158,   925,   163,   163,   162,    83,
1866       84,   168,   169,    98,   163,   100,   101,   102,   421,   402,
1867      105,   424,   158,   426,   427,   428,   162,   430,   431,   432,
1868       36,   163,   135,   136,   437,    98,   168,   169,   106,   107,
1869      163,   163,    70,    71,   112,   168,   169,    98,   444,   133,
1870      134,   454,   444,   449,   450,    83,    84,   133,   134,    70,
1871       71,   444,    26,   163,    26,   163,   449,   450,   168,   169,
1872      168,   169,    83,    84,    98,    26,   100,   101,   102,    30,
1873       31,   163,    36,   163,   504,    36,   168,   169,   168,   169,
1874      700,    72,   702,   496,     5,     6,     7,     8,    36,    10,
1875       11,   504,    13,    14,    15,    16,    17,    18,    67,    83,
1876       84,    70,    71,    72,    73,    26,    36,    28,    29,    30,
1877       31,    36,    65,    34,    67,    36,   173,    70,    71,    72,
1878       73,   732,    91,    92,   735,    65,    66,    67,    68,    26,
1879       70,    71,    72,    73,    70,    71,    26,    26,    91,    92,
1880       30,    31,    63,   126,   127,   128,    36,    83,    84,    70,
1881       26,    91,    92,    26,    75,    76,    77,    67,    26,   572,
1882       70,    71,    72,    73,    85,    86,    87,   121,   122,    90,
1883      125,   126,   126,   127,   128,    98,   589,   590,   591,   592,
1884      103,   104,    26,    26,   795,   578,    30,    31,   121,   122,
1885      819,    26,   585,   586,    26,   806,   158,   808,   809,    26,
1886      162,    26,   123,   124,    26,   834,    26,   620,    30,    31,
1887      623,   158,   158,   158,    26,   162,   162,   162,    65,    66,
1888       67,    68,   162,    70,    71,    72,    73,   158,   141,   142,
1889      158,   162,   645,   646,   162,    65,    66,    28,    68,   688,
1890       70,    71,   163,   164,    91,    92,    26,   168,   169,    79,
1891       80,    81,    82,   666,   860,    79,    80,    81,    82,   652,
1892      653,    91,    92,    93,   158,   158,   158,    26,   162,   162,
1893      162,    65,    26,    67,    68,   743,    70,    71,    72,    73,
1894      108,   109,   110,   111,    70,    71,   679,     0,     1,   144,
1895      145,   697,   760,   170,   171,   172,    26,    91,    92,    12,
1896      713,   694,   695,    36,   697,   136,   137,   121,   122,    26,
1897       28,    24,    25,    26,    26,    28,   158,    30,    31,    32,
1898       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
1899       28,    44,    45,    46,    47,    48,    49,    50,    51,    52,
1900       53,   160,   163,    56,    57,    58,    59,    60,   163,    71,
1901       63,    26,   163,   163,   163,    89,   163,    70,   163,   163,
1902       94,    95,   163,   776,    98,    99,   163,   163,   163,   103,
1903      104,    26,    26,    26,   787,    26,   164,   164,    26,    71,
1904      163,   163,   163,    96,    97,   163,   163,   163,   163,   163,
1905       26,    98,    36,   786,    36,   164,   158,    98,   811,   162,
1906      113,   114,   115,   116,    71,   162,   174,   120,    71,   158,
1907      123,   124,   158,   158,   162,   158,   158,   158,   158,   158,
1908      158,    98,    26,   816,    26,   162,    26,    36,   159,   165,
1909      143,   158,   158,   146,   147,   148,   829,   150,   151,   152,
1910      153,   154,   155,   156,   157,   165,   126,   136,   159,   159,
1911      163,   164,    26,   166,   167,   168,   169,    26,    26,    26,
1912       26,    36,    26,   912,    26,    26,    26,    26,    26,   163,
1913      883,    26,    26,   886,   159,   163,   163,   890,   891,   892,
1914      893,   159,    35,   159,    26,   159,    26,    71,    12,   162,
1915      903,   904,   905,    26,    26,   132,   158,    26,    26,    26,
1916       24,    25,    26,   138,    28,   898,    30,    31,    32,    33,
1917       34,    35,    36,    37,    38,    39,    40,    41,    42,    26,
1918       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
1919       22,    36,    56,    57,    58,    59,    60,   159,   159,    63,
1920       26,   158,   162,    26,    26,    26,    70,    26,    26,   165,
1921      165,    26,   165,    26,    26,   163,   162,    98,   165,    98,
1922      165,   160,    36,   158,   977,   978,    36,    98,   162,   162,
1923      158,   136,    96,    97,   160,    98,   158,   160,   135,   160,
1924      160,   158,   158,    26,   162,   158,   158,   158,    36,   113,
1925      114,   115,   116,   143,    36,    36,   120,    26,    26,   123,
1926      124,    26,   165,    36,    36,    36,   162,   158,    92,   158,
1927      162,   158,   131,    98,   162,    26,   162,   162,   162,   143,
1928      163,   158,   146,   147,   148,   163,   150,   151,   152,   153,
1929      154,   155,   156,   157,    98,   165,   158,   158,   158,   163,
1930      164,   158,   166,   167,   168,   169,   162,   165,   163,   163,
1931      163,   163,   163,   162,   162,   165,   162,    26,   162,   162,
1932      162,   162,   162,   162,   162,   162,   162,    26,   163,    70,
1933      161,    98,    98,    77,    98,    98,    98,    26,   158,    26,
1934       36,    26,    36,    26,    91,   162,   162,    26,    26,    26,
1935       26,   162,    26,   162,    26,    26,   162,   165,   165,    98,
1936      165,   136,   163,   165,    26,   126,    36,    36,    36,   165,
1937      173,    98,    26,    98,    26,    98,    98,   162,   131,    26,
1938      160,    26,   158,   160,   158,   164,    98,    98,   158,   126,
1939       98,    91,    98,    98,    26,   143,    36,    26,   158,   158,
1940       26,    26,    26,    26,   162,   162,   162,   162,   162,    28,
1941      162,    26,   162,   162,    26,    26,   158,    26,   158,   165,
1942      165,    26,   165,    26,   162,    32,   162,   162,   162,   162,
1943      162,   162,   162,   162,   162,    26,   162,    72,    26,    26,
1944       26,   165,   162,   162,    71,   163,   163,   163,   162,   162,
1945       84,   133,   162,    70,    36,   162,    92,   160,   162,   160,
1946       98,   163,   126,    26,   162,   162,   158,    26,   163,   162,
1947      160,   162,   160,    33,   160,    28,   160,    71,   137,    22,
1948      160,   162,    26,    72,    26,   160,    36,    36,   972,   859,
1949      163,    -1,   939,    34,   137,   162,   162,   162,   296,   162,
1950       -1,   162,   162,   158,   162,   162,   136,   163,   158,   162,
1951       -1,   162,    -1,    -1,   163,   163,   137,   163,   160,   163,
1952      315,   160,    -1,   137,   137,   162,    -1,   137,    -1,   137,
1953       -1,   137,    -1,    -1,   162,    -1,    -1,    -1,    -1,    -1,
1954      162,    -1,   162,    -1,   162,    -1,   162,    -1,    -1,    -1,
1955       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   162,    -1,
1956      162,   162,   162,   162,   162,   162
1957 };
1958 
1959 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1960    symbol of state STATE-NUM.  */
1961 static const unsigned char yystos[] =
1962 {
1963        0,     1,    12,    24,    25,    26,    28,    30,    31,    32,
1964       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
1965       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
1966       56,    57,    58,    59,    60,    63,    70,    96,    97,   113,
1967      114,   115,   116,   120,   123,   124,   143,   146,   147,   148,
1968      150,   151,   152,   153,   154,   155,   156,   157,   163,   164,
1969      166,   167,   168,   169,   176,   177,   178,   179,   198,   206,
1970      207,   208,   209,   210,   213,   214,   219,   220,   221,   163,
1971      163,   220,    89,    94,    95,    98,    99,   103,   104,    98,
1972      100,   101,   102,   105,   212,    98,    98,    98,    98,    98,
1973       26,    26,   220,   220,   163,   220,   163,   220,   220,   214,
1974      218,   220,   163,   218,   220,   221,   221,   163,   163,   164,
1975      199,   164,   199,   164,   199,   164,   199,   163,   164,   164,
1976       98,   212,   163,   163,   163,   163,   163,   163,    26,   179,
1977      163,   163,    28,    64,    26,   221,    26,    83,   212,     0,
1978       78,   161,    98,   103,   104,    98,    26,    36,    70,    77,
1979       86,    87,    88,    90,   179,   206,   211,   220,   179,   211,
1980      211,   163,   180,    98,    65,    66,    67,    68,    70,    71,
1981       72,    73,    91,    92,    26,    26,   220,    26,   220,    26,
1982      220,     5,     6,     7,     8,    10,    11,    13,    14,    15,
1983       16,    17,    18,    26,    28,    29,    34,    36,    63,    70,
1984       75,    76,    77,    85,    86,    87,    90,   123,   124,   163,
1985      164,   179,   195,   200,   211,   220,    26,    26,   220,    26,
1986      220,    26,   149,   179,    28,   149,   143,   166,    36,    36,
1987       36,    36,    16,    19,    21,    23,    26,    28,    36,    86,
1988       87,   124,   163,   179,   211,   220,   220,    26,    26,    27,
1989      173,    26,    27,    26,    26,    26,    26,    26,    26,    26,
1990       26,    26,    28,    26,    26,    26,    26,    26,    26,    36,
1991       26,    26,    57,    28,   158,   160,   162,    70,    71,    83,
1992       84,   202,   205,    26,    28,   178,   179,    26,   163,    72,
1993      179,   179,   179,   179,   163,   179,    91,    92,    93,   163,
1994      220,   163,   196,   135,   136,   158,   220,   221,   221,   221,
1995      221,   221,   221,   221,   221,   221,   221,   160,   163,   163,
1996      163,   163,   163,   163,   163,   163,   163,    65,    66,    68,
1997       71,    79,    80,    81,    82,    91,    92,    93,   201,   202,
1998      163,   187,    71,   187,    26,    26,    26,    26,    26,    26,
1999       26,   164,   164,    26,   179,   206,   207,   208,   210,    26,
2000       71,   163,   163,   180,   163,   188,   163,   106,   107,   112,
2001      163,   106,   107,   112,   163,   163,   163,    26,    26,    36,
2002      179,   163,   202,    98,    91,    92,    93,    98,   202,    36,
2003       36,   164,   208,   210,   180,   158,    98,   162,    71,   174,
2004      162,    71,   158,   158,    84,   165,   165,   165,   165,   162,
2005       84,   202,   205,    84,   202,   205,   158,   158,   158,   158,
2006      158,   158,   158,   162,    98,   220,    26,    57,    26,   220,
2007       26,   220,   165,   165,    78,   161,   196,    26,    36,   158,
2008      158,   159,   159,   179,   159,   220,   220,   220,   126,   136,
2009      158,   162,   158,   162,    26,    36,   209,   220,    26,    26,
2010       26,    26,    26,    36,    26,    26,    26,    26,    26,    26,
2011      163,   220,   220,   220,    26,    26,   133,   134,    35,   163,
2012      189,   163,   190,   159,   159,   159,   159,    26,    26,    71,
2013      104,   179,   162,    84,   202,   205,   179,    26,    26,   158,
2014      133,   134,   132,    26,   220,    26,   220,    26,   220,    26,
2015      179,   179,   179,    26,    26,    26,    36,   138,    26,    69,
2016       88,   220,   220,   220,    22,    36,   159,   159,    26,   179,
2017      162,   158,   220,    26,    26,    26,    26,    26,   165,   220,
2018      165,    26,   220,   165,   220,   220,   220,    26,   220,   220,
2019      220,    26,   163,    98,   220,   162,   158,   162,   165,   165,
2020       98,   178,   160,   179,   206,   206,    36,    36,   158,    36,
2021      220,   162,   162,   136,   135,    98,    98,   180,   158,   160,
2022      160,   160,   160,   158,   158,   158,   158,   158,    26,   189,
2023      190,   189,   158,   163,   184,   158,   163,   185,   162,   162,
2024      158,   125,   126,   143,   143,    36,    36,    36,    36,   220,
2025      202,   205,    84,   202,   205,    26,   162,    26,   214,   216,
2026      217,   220,   165,   158,   158,   158,    26,   162,   162,   162,
2027      163,   197,   197,   197,   197,   158,   158,   162,   158,   158,
2028      162,   163,   163,   163,   163,   191,   191,   163,   185,    36,
2029       36,    84,   205,   162,    36,   162,    92,   162,   162,   162,
2030      162,   165,    98,   165,   165,    98,   162,   162,   162,   158,
2031      162,   162,   162,   131,    26,   163,    98,    26,    98,    98,
2032       98,    26,   161,   220,    70,    77,   179,   158,   162,   162,
2033      163,   179,   163,    26,   220,   220,   220,   220,    26,    36,
2034       26,    36,    26,    91,    26,   126,   127,   128,   182,    26,
2035      125,   126,    26,   162,   158,   162,   158,   162,   162,   190,
2036      189,   220,   165,    26,   220,   165,   162,   165,   173,   165,
2037       26,    26,    26,    98,   136,   220,   220,   163,   181,    36,
2038       36,   141,   142,   179,   179,   126,    36,   191,    26,   165,
2039       98,    26,   220,    98,    26,    98,    98,    26,    36,   179,
2040      162,   131,     3,     4,     9,    20,   160,   164,   199,    26,
2041       26,   158,   162,   179,   179,   158,   206,   160,   158,   158,
2042      158,   158,   162,   162,   162,   162,   162,   220,    98,   162,
2043       98,   162,   162,    98,   143,   126,   165,   187,   165,   165,
2044      187,    91,   170,   171,   172,   215,    98,   162,   162,   211,
2045      162,   162,   162,   121,   122,   162,   162,   162,   162,   158,
2046      158,   162,   162,   165,   211,    98,    26,    36,    26,   162,
2047      162,   163,   163,    26,    26,   220,    26,    26,    28,   179,
2048      220,    26,    26,    26,    26,   181,   187,   163,   162,    26,
2049       26,    32,   162,   162,   187,   187,   187,   220,   179,   190,
2050      180,   162,   162,   190,    26,   179,    26,    72,   180,    26,
2051      181,    26,    26,   160,   163,   162,   160,   162,   163,   162,
2052      160,   160,   160,   160,   133,   201,   202,    71,    70,   162,
2053      158,   162,    36,    92,   160,   160,   220,   108,   109,   110,
2054      111,   192,    98,   220,   126,   163,   193,   220,   220,   220,
2055      220,   162,    26,    26,    33,   179,    28,    71,   220,   220,
2056      220,   193,   162,   199,   162,   162,   137,   162,   162,   162,
2057      162,   163,   186,   185,   185,   162,    22,   158,   158,   162,
2058      163,   194,   163,   203,   203,   163,   204,   121,   122,   182,
2059      183,   163,    26,    26,   136,   137,   129,   130,   139,   140,
2060      144,   145,   158,   162,   158,   162,    36,   160,   160,   158,
2061      162,   158,   162,   158,   162,   158,   162,   158,   162,   158,
2062      162,   158,   162,   158,   162,   183,   182,   162,   220,   220,
2063      137,   136,   137,   137,   137,   137,   137,   137,   162,   162,
2064       72,   162,   162,   162,   162,   162,   162,   162,   162,   162,
2065      162,    36,   193,   193
2066 };
2067 
2068 #define yyerrok		(yyerrstatus = 0)
2069 #define yyclearin	(yychar = YYEMPTY)
2070 #define YYEMPTY		(-2)
2071 #define YYEOF		0
2072 
2073 #define YYACCEPT	goto yyacceptlab
2074 #define YYABORT		goto yyabortlab
2075 #define YYERROR		goto yyerrorlab
2076 
2077 
2078 /* Like YYERROR except do call yyerror.  This remains here temporarily
2079    to ease the transition to the new meaning of YYERROR, for GCC.
2080    Once GCC version 2 has supplanted version 1, this can go.  */
2081 
2082 #define YYFAIL		goto yyerrlab
2083 
2084 #define YYRECOVERING()  (!!yyerrstatus)
2085 
2086 #define YYBACKUP(Token, Value)					\
2087 do								\
2088   if (yychar == YYEMPTY && yylen == 1)				\
2089     {								\
2090       yychar = (Token);						\
2091       yylval = (Value);						\
2092       yytoken = YYTRANSLATE (yychar);				\
2093       YYPOPSTACK;						\
2094       goto yybackup;						\
2095     }								\
2096   else								\
2097     {								\
2098       yyerror (YY_("syntax error: cannot back up")); \
2099       YYERROR;							\
2100     }								\
2101 while (0)
2102 
2103 
2104 #define YYTERROR	1
2105 #define YYERRCODE	256
2106 
2107 
2108 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2109    If N is 0, then set CURRENT to the empty location which ends
2110    the previous symbol: RHS[0] (always defined).  */
2111 
2112 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
2113 #ifndef YYLLOC_DEFAULT
2114 # define YYLLOC_DEFAULT(Current, Rhs, N)				\
2115     do									\
2116       if (N)								\
2117 	{								\
2118 	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
2119 	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
2120 	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
2121 	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
2122 	}								\
2123       else								\
2124 	{								\
2125 	  (Current).first_line   = (Current).last_line   =		\
2126 	    YYRHSLOC (Rhs, 0).last_line;				\
2127 	  (Current).first_column = (Current).last_column =		\
2128 	    YYRHSLOC (Rhs, 0).last_column;				\
2129 	}								\
2130     while (0)
2131 #endif
2132 
2133 
2134 /* YY_LOCATION_PRINT -- Print the location on the stream.
2135    This macro was not mandated originally: define only if we know
2136    we won't break user code: when these are the locations we know.  */
2137 
2138 #ifndef YY_LOCATION_PRINT
2139 # if YYLTYPE_IS_TRIVIAL
2140 #  define YY_LOCATION_PRINT(File, Loc)			\
2141      fprintf (File, "%d.%d-%d.%d",			\
2142               (Loc).first_line, (Loc).first_column,	\
2143               (Loc).last_line,  (Loc).last_column)
2144 # else
2145 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2146 # endif
2147 #endif
2148 
2149 
2150 /* YYLEX -- calling `yylex' with the right arguments.  */
2151 
2152 #ifdef YYLEX_PARAM
2153 # define YYLEX yylex (YYLEX_PARAM)
2154 #else
2155 # define YYLEX yylex ()
2156 #endif
2157 
2158 /* Enable debugging if requested.  */
2159 #if YYDEBUG
2160 
2161 # ifndef YYFPRINTF
2162 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2163 #  define YYFPRINTF fprintf
2164 # endif
2165 
2166 # define YYDPRINTF(Args)			\
2167 do {						\
2168   if (yydebug)					\
2169     YYFPRINTF Args;				\
2170 } while (0)
2171 
2172 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
2173 do {								\
2174   if (yydebug)							\
2175     {								\
2176       YYFPRINTF (stderr, "%s ", Title);				\
2177       yysymprint (stderr,					\
2178                   Type, Value);	\
2179       YYFPRINTF (stderr, "\n");					\
2180     }								\
2181 } while (0)
2182 
2183 /*------------------------------------------------------------------.
2184 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2185 | TOP (included).                                                   |
2186 `------------------------------------------------------------------*/
2187 
2188 #if defined (__STDC__) || defined (__cplusplus)
2189 static void
2190 yy_stack_print (short int *bottom, short int *top)
2191 #else
2192 static void
2193 yy_stack_print (bottom, top)
2194     short int *bottom;
2195     short int *top;
2196 #endif
2197 {
2198   YYFPRINTF (stderr, "Stack now");
2199   for (/* Nothing. */; bottom <= top; ++bottom)
2200     YYFPRINTF (stderr, " %d", *bottom);
2201   YYFPRINTF (stderr, "\n");
2202 }
2203 
2204 # define YY_STACK_PRINT(Bottom, Top)				\
2205 do {								\
2206   if (yydebug)							\
2207     yy_stack_print ((Bottom), (Top));				\
2208 } while (0)
2209 
2210 
2211 /*------------------------------------------------.
2212 | Report that the YYRULE is going to be reduced.  |
2213 `------------------------------------------------*/
2214 
2215 #if defined (__STDC__) || defined (__cplusplus)
2216 static void
2217 yy_reduce_print (int yyrule)
2218 #else
2219 static void
2220 yy_reduce_print (yyrule)
2221     int yyrule;
2222 #endif
2223 {
2224   int yyi;
2225   unsigned long int yylno = yyrline[yyrule];
2226   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2227              yyrule - 1, yylno);
2228   /* Print the symbols being reduced, and their result.  */
2229   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2230     YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2231   YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2232 }
2233 
2234 # define YY_REDUCE_PRINT(Rule)		\
2235 do {					\
2236   if (yydebug)				\
2237     yy_reduce_print (Rule);		\
2238 } while (0)
2239 
2240 /* Nonzero means print parse trace.  It is left uninitialized so that
2241    multiple parsers can coexist.  */
2242 int yydebug;
2243 #else /* !YYDEBUG */
2244 # define YYDPRINTF(Args)
2245 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2246 # define YY_STACK_PRINT(Bottom, Top)
2247 # define YY_REDUCE_PRINT(Rule)
2248 #endif /* !YYDEBUG */
2249 
2250 
2251 /* YYINITDEPTH -- initial size of the parser's stacks.  */
2252 #ifndef	YYINITDEPTH
2253 # define YYINITDEPTH 200
2254 #endif
2255 
2256 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2257    if the built-in stack extension method is used).
2258 
2259    Do not make this value too large; the results are undefined if
2260    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2261    evaluated with infinite-precision integer arithmetic.  */
2262 
2263 #ifndef YYMAXDEPTH
2264 # define YYMAXDEPTH 10000
2265 #endif
2266 
2267 
2268 
2269 #if YYERROR_VERBOSE
2270 
2271 # ifndef yystrlen
2272 #  if defined (__GLIBC__) && defined (_STRING_H)
2273 #   define yystrlen strlen
2274 #  else
2275 /* Return the length of YYSTR.  */
2276 static YYSIZE_T
2277 #   if defined (__STDC__) || defined (__cplusplus)
2278 yystrlen (const char *yystr)
2279 #   else
2280 yystrlen (yystr)
2281      const char *yystr;
2282 #   endif
2283 {
2284   const char *yys = yystr;
2285 
2286   while (*yys++ != '\0')
2287     continue;
2288 
2289   return yys - yystr - 1;
2290 }
2291 #  endif
2292 # endif
2293 
2294 # ifndef yystpcpy
2295 #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2296 #   define yystpcpy stpcpy
2297 #  else
2298 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2299    YYDEST.  */
2300 static char *
2301 #   if defined (__STDC__) || defined (__cplusplus)
2302 yystpcpy (char *yydest, const char *yysrc)
2303 #   else
2304 yystpcpy (yydest, yysrc)
2305      char *yydest;
2306      const char *yysrc;
2307 #   endif
2308 {
2309   char *yyd = yydest;
2310   const char *yys = yysrc;
2311 
2312   while ((*yyd++ = *yys++) != '\0')
2313     continue;
2314 
2315   return yyd - 1;
2316 }
2317 #  endif
2318 # endif
2319 
2320 # ifndef yytnamerr
2321 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2322    quotes and backslashes, so that it's suitable for yyerror.  The
2323    heuristic is that double-quoting is unnecessary unless the string
2324    contains an apostrophe, a comma, or backslash (other than
2325    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
2326    null, do not copy; instead, return the length of what the result
2327    would have been.  */
2328 static YYSIZE_T
2329 yytnamerr (char *yyres, const char *yystr)
2330 {
2331   if (*yystr == '"')
2332     {
2333       size_t yyn = 0;
2334       char const *yyp = yystr;
2335 
2336       for (;;)
2337 	switch (*++yyp)
2338 	  {
2339 	  case '\'':
2340 	  case ',':
2341 	    goto do_not_strip_quotes;
2342 
2343 	  case '\\':
2344 	    if (*++yyp != '\\')
2345 	      goto do_not_strip_quotes;
2346 	    /* Fall through.  */
2347 	  default:
2348 	    if (yyres)
2349 	      yyres[yyn] = *yyp;
2350 	    yyn++;
2351 	    break;
2352 
2353 	  case '"':
2354 	    if (yyres)
2355 	      yyres[yyn] = '\0';
2356 	    return yyn;
2357 	  }
2358     do_not_strip_quotes: ;
2359     }
2360 
2361   if (! yyres)
2362     return yystrlen (yystr);
2363 
2364   return yystpcpy (yyres, yystr) - yyres;
2365 }
2366 # endif
2367 
2368 #endif /* YYERROR_VERBOSE */
2369 
2370 
2371 
2372 #if YYDEBUG
2373 /*--------------------------------.
2374 | Print this symbol on YYOUTPUT.  |
2375 `--------------------------------*/
2376 
2377 #if defined (__STDC__) || defined (__cplusplus)
2378 static void
2379 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
2380 #else
2381 static void
2382 yysymprint (yyoutput, yytype, yyvaluep)
2383     FILE *yyoutput;
2384     int yytype;
2385     YYSTYPE *yyvaluep;
2386 #endif
2387 {
2388   /* Pacify ``unused variable'' warnings.  */
2389   (void) yyvaluep;
2390 
2391   if (yytype < YYNTOKENS)
2392     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2393   else
2394     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2395 
2396 
2397 # ifdef YYPRINT
2398   if (yytype < YYNTOKENS)
2399     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2400 # endif
2401   switch (yytype)
2402     {
2403       default:
2404         break;
2405     }
2406   YYFPRINTF (yyoutput, ")");
2407 }
2408 
2409 #endif /* ! YYDEBUG */
2410 /*-----------------------------------------------.
2411 | Release the memory associated to this symbol.  |
2412 `-----------------------------------------------*/
2413 
2414 #if defined (__STDC__) || defined (__cplusplus)
2415 static void
2416 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2417 #else
2418 static void
2419 yydestruct (yymsg, yytype, yyvaluep)
2420     const char *yymsg;
2421     int yytype;
2422     YYSTYPE *yyvaluep;
2423 #endif
2424 {
2425   /* Pacify ``unused variable'' warnings.  */
2426   (void) yyvaluep;
2427 
2428   if (!yymsg)
2429     yymsg = "Deleting";
2430   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2431 
2432   switch (yytype)
2433     {
2434 
2435       default:
2436         break;
2437     }
2438 }
2439 
2440 
2441 /* Prevent warnings from -Wmissing-prototypes.  */
2442 
2443 #ifdef YYPARSE_PARAM
2444 # if defined (__STDC__) || defined (__cplusplus)
2445 int yyparse (void *YYPARSE_PARAM);
2446 # else
2447 int yyparse ();
2448 # endif
2449 #else /* ! YYPARSE_PARAM */
2450 #if defined (__STDC__) || defined (__cplusplus)
2451 int yyparse (void);
2452 #else
2453 int yyparse ();
2454 #endif
2455 #endif /* ! YYPARSE_PARAM */
2456 
2457 
2458 
2459 /* The look-ahead symbol.  */
2460 int yychar;
2461 
2462 /* The semantic value of the look-ahead symbol.  */
2463 YYSTYPE yylval;
2464 
2465 /* Number of syntax errors so far.  */
2466 int yynerrs;
2467 
2468 
2469 
2470 /*----------.
2471 | yyparse.  |
2472 `----------*/
2473 
2474 #ifdef YYPARSE_PARAM
2475 # if defined (__STDC__) || defined (__cplusplus)
2476 int yyparse (void *YYPARSE_PARAM)
2477 # else
2478 int yyparse (YYPARSE_PARAM)
2479   void *YYPARSE_PARAM;
2480 # endif
2481 #else /* ! YYPARSE_PARAM */
2482 #if defined (__STDC__) || defined (__cplusplus)
2483 int
2484 yyparse (void)
2485 #else
2486 int
2487 yyparse ()
2488     ;
2489 #endif
2490 #endif
2491 {
2492 
2493   int yystate;
2494   int yyn;
2495   int yyresult;
2496   /* Number of tokens to shift before error messages enabled.  */
2497   int yyerrstatus;
2498   /* Look-ahead token as an internal (translated) token number.  */
2499   int yytoken = 0;
2500 
2501   /* Three stacks and their tools:
2502      `yyss': related to states,
2503      `yyvs': related to semantic values,
2504      `yyls': related to locations.
2505 
2506      Refer to the stacks thru separate pointers, to allow yyoverflow
2507      to reallocate them elsewhere.  */
2508 
2509   /* The state stack.  */
2510   short int yyssa[YYINITDEPTH];
2511   short int *yyss = yyssa;
2512   short int *yyssp;
2513 
2514   /* The semantic value stack.  */
2515   YYSTYPE yyvsa[YYINITDEPTH];
2516   YYSTYPE *yyvs = yyvsa;
2517   YYSTYPE *yyvsp;
2518 
2519 
2520 
2521 #define YYPOPSTACK   (yyvsp--, yyssp--)
2522 
2523   YYSIZE_T yystacksize = YYINITDEPTH;
2524 
2525   /* The variables used to return semantic value and location from the
2526      action routines.  */
2527   YYSTYPE yyval;
2528 
2529 
2530   /* When reducing, the number of symbols on the RHS of the reduced
2531      rule.  */
2532   int yylen;
2533 
2534   YYDPRINTF ((stderr, "Starting parse\n"));
2535 
2536   yystate = 0;
2537   yyerrstatus = 0;
2538   yynerrs = 0;
2539   yychar = YYEMPTY;		/* Cause a token to be read.  */
2540 
2541   /* Initialize stack pointers.
2542      Waste one element of value and location stack
2543      so that they stay on the same level as the state stack.
2544      The wasted elements are never initialized.  */
2545 
2546   yyssp = yyss;
2547   yyvsp = yyvs;
2548 
2549   goto yysetstate;
2550 
2551 /*------------------------------------------------------------.
2552 | yynewstate -- Push a new state, which is found in yystate.  |
2553 `------------------------------------------------------------*/
2554  yynewstate:
2555   /* In all cases, when you get here, the value and location stacks
2556      have just been pushed. so pushing a state here evens the stacks.
2557      */
2558   yyssp++;
2559 
2560  yysetstate:
2561   *yyssp = yystate;
2562 
2563   if (yyss + yystacksize - 1 <= yyssp)
2564     {
2565       /* Get the current used size of the three stacks, in elements.  */
2566       YYSIZE_T yysize = yyssp - yyss + 1;
2567 
2568 #ifdef yyoverflow
2569       {
2570 	/* Give user a chance to reallocate the stack. Use copies of
2571 	   these so that the &'s don't force the real ones into
2572 	   memory.  */
2573 	YYSTYPE *yyvs1 = yyvs;
2574 	short int *yyss1 = yyss;
2575 
2576 
2577 	/* Each stack pointer address is followed by the size of the
2578 	   data in use in that stack, in bytes.  This used to be a
2579 	   conditional around just the two extra args, but that might
2580 	   be undefined if yyoverflow is a macro.  */
2581 	yyoverflow (YY_("memory exhausted"),
2582 		    &yyss1, yysize * sizeof (*yyssp),
2583 		    &yyvs1, yysize * sizeof (*yyvsp),
2584 
2585 		    &yystacksize);
2586 
2587 	yyss = yyss1;
2588 	yyvs = yyvs1;
2589       }
2590 #else /* no yyoverflow */
2591 # ifndef YYSTACK_RELOCATE
2592       goto yyexhaustedlab;
2593 # else
2594       /* Extend the stack our own way.  */
2595       if (YYMAXDEPTH <= yystacksize)
2596 	goto yyexhaustedlab;
2597       yystacksize *= 2;
2598       if (YYMAXDEPTH < yystacksize)
2599 	yystacksize = YYMAXDEPTH;
2600 
2601       {
2602 	short int *yyss1 = yyss;
2603 	union yyalloc *yyptr =
2604 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2605 	if (! yyptr)
2606 	  goto yyexhaustedlab;
2607 	YYSTACK_RELOCATE (yyss);
2608 	YYSTACK_RELOCATE (yyvs);
2609 
2610 #  undef YYSTACK_RELOCATE
2611 	if (yyss1 != yyssa)
2612 	  YYSTACK_FREE (yyss1);
2613       }
2614 # endif
2615 #endif /* no yyoverflow */
2616 
2617       yyssp = yyss + yysize - 1;
2618       yyvsp = yyvs + yysize - 1;
2619 
2620 
2621       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2622 		  (unsigned long int) yystacksize));
2623 
2624       if (yyss + yystacksize - 1 <= yyssp)
2625 	YYABORT;
2626     }
2627 
2628   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2629 
2630   goto yybackup;
2631 
2632 /*-----------.
2633 | yybackup.  |
2634 `-----------*/
2635 yybackup:
2636 
2637 /* Do appropriate processing given the current state.  */
2638 /* Read a look-ahead token if we need one and don't already have one.  */
2639 /* yyresume: */
2640 
2641   /* First try to decide what to do without reference to look-ahead token.  */
2642 
2643   yyn = yypact[yystate];
2644   if (yyn == YYPACT_NINF)
2645     goto yydefault;
2646 
2647   /* Not known => get a look-ahead token if don't already have one.  */
2648 
2649   /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
2650   if (yychar == YYEMPTY)
2651     {
2652       YYDPRINTF ((stderr, "Reading a token: "));
2653       yychar = YYLEX;
2654     }
2655 
2656   if (yychar <= YYEOF)
2657     {
2658       yychar = yytoken = YYEOF;
2659       YYDPRINTF ((stderr, "Now at end of input.\n"));
2660     }
2661   else
2662     {
2663       yytoken = YYTRANSLATE (yychar);
2664       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2665     }
2666 
2667   /* If the proper action on seeing token YYTOKEN is to reduce or to
2668      detect an error, take that action.  */
2669   yyn += yytoken;
2670   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2671     goto yydefault;
2672   yyn = yytable[yyn];
2673   if (yyn <= 0)
2674     {
2675       if (yyn == 0 || yyn == YYTABLE_NINF)
2676 	goto yyerrlab;
2677       yyn = -yyn;
2678       goto yyreduce;
2679     }
2680 
2681   if (yyn == YYFINAL)
2682     YYACCEPT;
2683 
2684   /* Shift the look-ahead token.  */
2685   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2686 
2687   /* Discard the token being shifted unless it is eof.  */
2688   if (yychar != YYEOF)
2689     yychar = YYEMPTY;
2690 
2691   *++yyvsp = yylval;
2692 
2693 
2694   /* Count tokens shifted since error; after three, turn off error
2695      status.  */
2696   if (yyerrstatus)
2697     yyerrstatus--;
2698 
2699   yystate = yyn;
2700   goto yynewstate;
2701 
2702 
2703 /*-----------------------------------------------------------.
2704 | yydefault -- do the default action for the current state.  |
2705 `-----------------------------------------------------------*/
2706 yydefault:
2707   yyn = yydefact[yystate];
2708   if (yyn == 0)
2709     goto yyerrlab;
2710   goto yyreduce;
2711 
2712 
2713 /*-----------------------------.
2714 | yyreduce -- Do a reduction.  |
2715 `-----------------------------*/
2716 yyreduce:
2717   /* yyn is the number of a rule to reduce with.  */
2718   yylen = yyr2[yyn];
2719 
2720   /* If YYLEN is nonzero, implement the default value of the action:
2721      `$$ = $1'.
2722 
2723      Otherwise, the following line sets YYVAL to garbage.
2724      This behavior is undocumented and Bison
2725      users should not rely upon it.  Assigning to YYVAL
2726      unconditionally makes the parser a bit smaller, and it avoids a
2727      GCC warning that YYVAL may be used uninitialized.  */
2728   yyval = yyvsp[1-yylen];
2729 
2730 
2731   YY_REDUCE_PRINT (yyn);
2732   switch (yyn)
2733     {
2734         case 3:
2735 #line 569 "bfin-parse.y"
2736     {
2737 	  insn = (yyvsp[0].instr);
2738 	  if (insn == (INSTR_T) 0)
2739 	    return NO_INSN_GENERATED;
2740 	  else if (insn == (INSTR_T) - 1)
2741 	    return SEMANTIC_ERROR;
2742 	  else
2743 	    return INSN_GENERATED;
2744 	}
2745     break;
2746 
2747   case 5:
2748 #line 583 "bfin-parse.y"
2749     {
2750 	  if (((yyvsp[-5].instr)->value & 0xf800) == 0xc000)
2751 	    {
2752 	      if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2753 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-5].instr), (yyvsp[-3].instr), (yyvsp[-1].instr));
2754 	      else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2755 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-5].instr), (yyvsp[-1].instr), (yyvsp[-3].instr));
2756 	      else
2757 		return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group");
2758 	    }
2759 	  else if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2760 	    {
2761 	      if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-1].instr)))
2762 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-5].instr), (yyvsp[-1].instr));
2763 	      else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-1].instr)))
2764 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-1].instr), (yyvsp[-5].instr));
2765 	      else
2766 		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group");
2767 	    }
2768 	  else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2769 	    {
2770 	      if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-3].instr)))
2771 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-5].instr), (yyvsp[-3].instr));
2772 	      else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-3].instr)))
2773 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-3].instr), (yyvsp[-5].instr));
2774 	      else
2775 		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group");
2776 	    }
2777 	  else
2778 	    error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
2779 	}
2780     break;
2781 
2782   case 6:
2783 #line 616 "bfin-parse.y"
2784     {
2785 	  if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2786 	    {
2787 	      if (is_group1 ((yyvsp[-1].instr)))
2788 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-1].instr), 0);
2789 	      else if (is_group2 ((yyvsp[-1].instr)))
2790 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), 0, (yyvsp[-1].instr));
2791 	      else
2792 		return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
2793 	    }
2794 	  else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2795 	    {
2796 	      if (is_group1 ((yyvsp[-3].instr)))
2797 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-3].instr), 0);
2798 	      else if (is_group2 ((yyvsp[-3].instr)))
2799 		(yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), 0, (yyvsp[-3].instr));
2800 	      else
2801 		return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
2802 	    }
2803 	  else if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2804 	      (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[-3].instr), (yyvsp[-1].instr));
2805 	  else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2806 	    (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[-1].instr), (yyvsp[-3].instr));
2807 	  else
2808 	    return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
2809 	}
2810     break;
2811 
2812   case 7:
2813 #line 643 "bfin-parse.y"
2814     {
2815 	(yyval.instr) = 0;
2816 	yyerror ("");
2817 	yyerrok;
2818 	}
2819     break;
2820 
2821   case 8:
2822 #line 654 "bfin-parse.y"
2823     {
2824 	  (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
2825 	}
2826     break;
2827 
2828   case 9:
2829 #line 658 "bfin-parse.y"
2830     {
2831 	  int op0, op1;
2832 	  int w0 = 0, w1 = 0;
2833 	  int h00, h10, h01, h11;
2834 
2835 	  if ((yyvsp[-1].macfunc).n == 0)
2836 	    {
2837 	      if ((yyvsp[0].mod).MM)
2838 		return yyerror ("(m) not allowed with a0 unit");
2839 	      op1 = 3;
2840 	      op0 = (yyvsp[-1].macfunc).op;
2841 	      w1 = 0;
2842               w0 = (yyvsp[-1].macfunc).w;
2843 	      h00 = IS_H ((yyvsp[-1].macfunc).s0);
2844               h10 = IS_H ((yyvsp[-1].macfunc).s1);
2845 	      h01 = h11 = 0;
2846 	    }
2847 	  else
2848 	    {
2849 	      op1 = (yyvsp[-1].macfunc).op;
2850 	      op0 = 3;
2851 	      w1 = (yyvsp[-1].macfunc).w;
2852               w0 = 0;
2853 	      h00 = h10 = 0;
2854 	      h01 = IS_H ((yyvsp[-1].macfunc).s0);
2855               h11 = IS_H ((yyvsp[-1].macfunc).s1);
2856 	    }
2857 	  (yyval.instr) = DSP32MAC (op1, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, w1, (yyvsp[-1].macfunc).P, h01, h11, h00, h10,
2858 			 &(yyvsp[-1].macfunc).dst, op0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, w0);
2859 	}
2860     break;
2861 
2862   case 10:
2863 #line 693 "bfin-parse.y"
2864     {
2865 	  Register *dst;
2866 
2867 	  if (check_macfuncs (&(yyvsp[-4].macfunc), &(yyvsp[-3].mod), &(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
2868 	    return -1;
2869 	  notethat ("assign_macfunc (.), assign_macfunc (.)\n");
2870 
2871 	  if ((yyvsp[-4].macfunc).w)
2872 	    dst = &(yyvsp[-4].macfunc).dst;
2873 	  else
2874 	    dst = &(yyvsp[-1].macfunc).dst;
2875 
2876 	  (yyval.instr) = DSP32MAC ((yyvsp[-4].macfunc).op, (yyvsp[-3].mod).MM, (yyvsp[0].mod).mod, (yyvsp[-4].macfunc).w, (yyvsp[-4].macfunc).P,
2877 			 IS_H ((yyvsp[-4].macfunc).s0),  IS_H ((yyvsp[-4].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
2878 			 dst, (yyvsp[-1].macfunc).op, &(yyvsp[-4].macfunc).s0, &(yyvsp[-4].macfunc).s1, (yyvsp[-1].macfunc).w);
2879 	}
2880     break;
2881 
2882   case 11:
2883 #line 713 "bfin-parse.y"
2884     {
2885 	  notethat ("dsp32alu: DISALGNEXCPT\n");
2886 	  (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
2887 	}
2888     break;
2889 
2890   case 12:
2891 #line 718 "bfin-parse.y"
2892     {
2893 	  if (IS_DREG ((yyvsp[-5].reg)) && !IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
2894 	    {
2895 	      notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
2896 	      (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[-5].reg), 0, 0, 0, 0, 0);
2897 	    }
2898 	  else
2899 	    return yyerror ("Register mismatch");
2900 	}
2901     break;
2902 
2903   case 13:
2904 #line 728 "bfin-parse.y"
2905     {
2906 	  if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
2907 	    {
2908 	      notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
2909 	      (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), 0, 0, 0, 0, 1);
2910 	    }
2911 	  else
2912 	    return yyerror ("Register mismatch");
2913 	}
2914     break;
2915 
2916   case 14:
2917 #line 738 "bfin-parse.y"
2918     {
2919 	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
2920 	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
2921 	}
2922     break;
2923 
2924   case 15:
2925 #line 743 "bfin-parse.y"
2926     {
2927 	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
2928 	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
2929 	}
2930     break;
2931 
2932   case 16:
2933 #line 749 "bfin-parse.y"
2934     {
2935 	  if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
2936 	    return yyerror ("Dregs expected");
2937 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
2938 	    return yyerror ("Bad dreg pair");
2939 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
2940 	    return yyerror ("Bad dreg pair");
2941 	  else
2942 	    {
2943 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (half)\n");
2944 	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
2945 	    }
2946 	}
2947     break;
2948 
2949   case 17:
2950 #line 765 "bfin-parse.y"
2951     {
2952 	  if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG((yyvsp[-13].reg)))
2953 	    return yyerror ("Dregs expected");
2954 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
2955 	    return yyerror ("Bad dreg pair");
2956 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
2957 	    return yyerror ("Bad dreg pair");
2958 	  else
2959 	    {
2960 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
2961 	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 1);
2962 	    }
2963 	}
2964     break;
2965 
2966   case 18:
2967 #line 780 "bfin-parse.y"
2968     {
2969 	  if (!IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)))
2970 	    return yyerror ("Dregs expected");
2971 	  else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
2972 	    return yyerror ("Bad dreg pair");
2973 	  else
2974 	    {
2975 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
2976 	      (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, (yyvsp[0].r0).r0, 0, 1);
2977 	    }
2978 	}
2979     break;
2980 
2981   case 19:
2982 #line 792 "bfin-parse.y"
2983     {
2984 	  if (IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)))
2985 	    {
2986 	      notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
2987 	      (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0, (yyvsp[-1].r0).r0);
2988 	    }
2989 	  else
2990 	    return yyerror ("Register mismatch");
2991 	}
2992     break;
2993 
2994   case 20:
2995 #line 803 "bfin-parse.y"
2996     {
2997 	  if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-4].reg)))
2998 	    {
2999 	      notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h  \n");
3000 	      (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[-10].reg), &(yyvsp[-4].reg), 0, 0, 0, 0, 1);
3001 	    }
3002 	  else
3003 	    return yyerror ("Register mismatch");
3004 	}
3005     break;
3006 
3007   case 21:
3008 #line 815 "bfin-parse.y"
3009     {
3010 	  if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3011 	      && IS_A1 ((yyvsp[-3].reg)) && !IS_A1 ((yyvsp[-1].reg)))
3012 	    {
3013 	      notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
3014 	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), 0, 0, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 0);
3015 
3016 	    }
3017 	  else if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3018 		   && !IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3019 	    {
3020 	      notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
3021 	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), 0, 0, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 1);
3022 	    }
3023 	  else
3024 	    return yyerror ("Register mismatch");
3025 	}
3026     break;
3027 
3028   case 22:
3029 #line 834 "bfin-parse.y"
3030     {
3031 	  if ((yyvsp[-8].r0).r0 == (yyvsp[-2].r0).r0)
3032 	    return yyerror ("Operators must differ");
3033 
3034 	  if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg))
3035 	      && REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) && REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3036 	    {
3037 	      notethat ("dsp32alu: dregs = dregs + dregs,"
3038 		       "dregs = dregs - dregs (amod1)\n");
3039 	      (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 2);
3040 	    }
3041 	  else
3042 	    return yyerror ("Register mismatch");
3043 	}
3044     break;
3045 
3046   case 23:
3047 #line 852 "bfin-parse.y"
3048     {
3049 	  if (!REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) || !REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3050 	    return yyerror ("Differing source registers");
3051 
3052 	  if (!IS_DREG ((yyvsp[-11].reg)) || !IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)) || !IS_DREG ((yyvsp[-5].reg)))
3053 	    return yyerror ("Dregs expected");
3054 
3055 
3056 	  if ((yyvsp[-8].r0).r0 == 1 && (yyvsp[-2].r0).r0 == 2)
3057 	    {
3058 	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3059 	      (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3060 	    }
3061 	  else if ((yyvsp[-8].r0).r0 == 0 && (yyvsp[-2].r0).r0 == 3)
3062 	    {
3063 	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3064 	      (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3065 	    }
3066 	  else
3067 	    return yyerror ("Bar operand mismatch");
3068 	}
3069     break;
3070 
3071   case 24:
3072 #line 875 "bfin-parse.y"
3073     {
3074 	  int op;
3075 
3076 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
3077 	    {
3078 	      if ((yyvsp[0].r0).r0)
3079 		{
3080 		  notethat ("dsp32alu: dregs = ABS dregs (v)\n");
3081 		  op = 6;
3082 		}
3083 	      else
3084 		{
3085 		  /* Vector version of ABS.  */
3086 		  notethat ("dsp32alu: dregs = ABS dregs\n");
3087 		  op = 7;
3088 		}
3089 	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, 0, 0, 2);
3090 	    }
3091 	  else
3092 	    return yyerror ("Dregs expected");
3093 	}
3094     break;
3095 
3096   case 25:
3097 #line 897 "bfin-parse.y"
3098     {
3099 	  notethat ("dsp32alu: Ax = ABS Ax\n");
3100 	  (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[-2].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[0].reg)));
3101 	}
3102     break;
3103 
3104   case 26:
3105 #line 902 "bfin-parse.y"
3106     {
3107 	  if (IS_DREG_L ((yyvsp[0].reg)))
3108 	    {
3109 	      notethat ("dsp32alu: A0.l = reg_half\n");
3110 	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
3111 	    }
3112 	  else
3113 	    return yyerror ("A0.l = Rx.l expected");
3114 	}
3115     break;
3116 
3117   case 27:
3118 #line 912 "bfin-parse.y"
3119     {
3120 	  if (IS_DREG_L ((yyvsp[0].reg)))
3121 	    {
3122 	      notethat ("dsp32alu: A1.l = reg_half\n");
3123 	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
3124 	    }
3125 	  else
3126 	    return yyerror ("A1.l = Rx.l expected");
3127 	}
3128     break;
3129 
3130   case 28:
3131 #line 923 "bfin-parse.y"
3132     {
3133 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3134 	    {
3135 	      notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
3136 	      (yyval.instr) = DSP32SHIFT (13, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[-5].r0).r0, 0);
3137 	    }
3138 	  else
3139 	    return yyerror ("Dregs expected");
3140 	}
3141     break;
3142 
3143   case 29:
3144 #line 934 "bfin-parse.y"
3145     {
3146 	  if (!IS_DREG ((yyvsp[-12].reg)))
3147 	    return yyerror ("Dregs expected");
3148 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3149 	    return yyerror ("Bad dreg pair");
3150 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3151 	    return yyerror ("Bad dreg pair");
3152 	  else
3153 	    {
3154 	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3155 	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).r0);
3156 	    }
3157 	}
3158     break;
3159 
3160   case 30:
3161 #line 948 "bfin-parse.y"
3162     {
3163 	  if (!IS_DREG ((yyvsp[-11].reg)))
3164 	    return yyerror ("Dregs expected");
3165 	  else if (!valid_dreg_pair (&(yyvsp[-7].reg), (yyvsp[-5].expr)))
3166 	    return yyerror ("Bad dreg pair");
3167 	  else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
3168 	    return yyerror ("Bad dreg pair");
3169 	  else
3170 	    {
3171 	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3172 	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-11].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0);
3173 	    }
3174 	}
3175     break;
3176 
3177   case 31:
3178 #line 964 "bfin-parse.y"
3179     {
3180 	  if (!IS_DREG ((yyvsp[-12].reg)))
3181 	    return yyerror ("Dregs expected");
3182 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3183 	    return yyerror ("Bad dreg pair");
3184 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3185 	    return yyerror ("Bad dreg pair");
3186 	  else
3187 	    {
3188 	      notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
3189 	      (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).aop);
3190 	    }
3191 	}
3192     break;
3193 
3194   case 32:
3195 #line 980 "bfin-parse.y"
3196     {
3197 	  if (!IS_DREG ((yyvsp[-12].reg)))
3198 	    return yyerror ("Dregs expected");
3199 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3200 	    return yyerror ("Bad dreg pair");
3201 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3202 	    return yyerror ("Bad dreg pair");
3203 	  else
3204 	    {
3205 	      notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
3206 	      (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).x0);
3207 	    }
3208 	}
3209     break;
3210 
3211   case 33:
3212 #line 996 "bfin-parse.y"
3213     {
3214 	  if (!IS_DREG ((yyvsp[-12].reg)))
3215 	    return yyerror ("Dregs expected");
3216 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3217 	    return yyerror ("Bad dreg pair");
3218 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3219 	    return yyerror ("Bad dreg pair");
3220 	  else
3221 	    {
3222 	      notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
3223 	      (yyval.instr) = DSP32ALU (23, (yyvsp[0].modcodes).x0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, 0);
3224 	    }
3225 	}
3226     break;
3227 
3228   case 34:
3229 #line 1011 "bfin-parse.y"
3230     {
3231 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3232 	    {
3233 	      notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
3234 	      (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[-7].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 0, 0, 0);
3235 	    }
3236 	  else
3237 	    return yyerror ("Dregs expected");
3238 	}
3239     break;
3240 
3241   case 35:
3242 #line 1023 "bfin-parse.y"
3243     {
3244 	  if (IS_HCOMPL ((yyvsp[-16].reg), (yyvsp[-14].reg)) && IS_HCOMPL ((yyvsp[-10].reg), (yyvsp[-3].reg)) && IS_HCOMPL ((yyvsp[-7].reg), (yyvsp[0].reg)))
3245 	    {
3246 	      notethat ("dsp32alu:	dregs_hi = dregs_lo ="
3247 		       "SIGN (dregs_hi) * dregs_hi + "
3248 		       "SIGN (dregs_lo) * dregs_lo \n");
3249 
3250 		(yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[-16].reg), &(yyvsp[-10].reg), &(yyvsp[-7].reg), 0, 0, 0);
3251 	    }
3252 	  else
3253 	    return yyerror ("Dregs expected");
3254 	}
3255     break;
3256 
3257   case 36:
3258 #line 1036 "bfin-parse.y"
3259     {
3260 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3261 	    {
3262 	      if ((yyvsp[0].modcodes).aop == 0)
3263 		{
3264 	          /* No saturation flag specified, generate the 16 bit variant.  */
3265 		  notethat ("COMP3op: dregs = dregs +- dregs\n");
3266 		  (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[-2].r0).r0);
3267 		}
3268 	      else
3269 		{
3270 		 /* Saturation flag specified, generate the 32 bit variant.  */
3271                  notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
3272                  (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3273 		}
3274 	    }
3275 	  else
3276 	    if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)) && (yyvsp[-2].r0).r0 == 0)
3277 	      {
3278 		notethat ("COMP3op: pregs = pregs + pregs\n");
3279 		(yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 5);
3280 	      }
3281 	    else
3282 	      return yyerror ("Dregs expected");
3283 	}
3284     break;
3285 
3286   case 37:
3287 #line 1062 "bfin-parse.y"
3288     {
3289 	  int op;
3290 
3291 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
3292 	    {
3293 	      if ((yyvsp[0].r0).r0)
3294 		op = 6;
3295 	      else
3296 		op = 7;
3297 
3298 	      notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
3299 	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), &(yyvsp[-2].reg), 0, 0, (yyvsp[-6].r0).r0);
3300 	    }
3301 	  else
3302 	    return yyerror ("Dregs expected");
3303 	}
3304     break;
3305 
3306   case 38:
3307 #line 1080 "bfin-parse.y"
3308     {
3309 	  notethat ("dsp32alu: Ax = - Ax\n");
3310 	  (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[-2].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[0].reg)));
3311 	}
3312     break;
3313 
3314   case 39:
3315 #line 1085 "bfin-parse.y"
3316     {
3317 	  notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
3318 	  (yyval.instr) = DSP32ALU (2 | (yyvsp[-2].r0).r0, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg),
3319 			 (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)));
3320 	}
3321     break;
3322 
3323   case 40:
3324 #line 1091 "bfin-parse.y"
3325     {
3326 	  if (EXPR_VALUE ((yyvsp[0].expr)) == 0 && !REG_SAME ((yyvsp[-2].reg), (yyvsp[-1].reg)))
3327 	    {
3328 	      notethat ("dsp32alu: A1 = A0 = 0\n");
3329 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, 2);
3330 	    }
3331 	  else
3332 	    return yyerror ("Bad value, 0 expected");
3333 	}
3334     break;
3335 
3336   case 41:
3337 #line 1103 "bfin-parse.y"
3338     {
3339 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)))
3340 	    {
3341 	      notethat ("dsp32alu: Ax = Ax (S)\n");
3342 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, IS_A1 ((yyvsp[-4].reg)));
3343 	    }
3344 	  else
3345 	    return yyerror ("Registers must be equal");
3346 	}
3347     break;
3348 
3349   case 42:
3350 #line 1114 "bfin-parse.y"
3351     {
3352 	  if (IS_DREG ((yyvsp[-3].reg)))
3353 	    {
3354 	      notethat ("dsp32alu: dregs_half = dregs (RND)\n");
3355 	      (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, 0, 3);
3356 	    }
3357 	  else
3358 	    return yyerror ("Dregs expected");
3359 	}
3360     break;
3361 
3362   case 43:
3363 #line 1125 "bfin-parse.y"
3364     {
3365 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3366 	    {
3367 	      notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
3368 	      (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, (yyvsp[-4].r0).r0);
3369 	    }
3370 	  else
3371 	    return yyerror ("Dregs expected");
3372 	}
3373     break;
3374 
3375   case 44:
3376 #line 1136 "bfin-parse.y"
3377     {
3378 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3379 	    {
3380 	      notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
3381 	      (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1, (yyvsp[-4].r0).r0 | 2);
3382 	    }
3383 	  else
3384 	    return yyerror ("Dregs expected");
3385 	}
3386     break;
3387 
3388   case 45:
3389 #line 1147 "bfin-parse.y"
3390     {
3391 	  if (!REG_SAME ((yyvsp[-1].reg), (yyvsp[0].reg)))
3392 	    {
3393 	      notethat ("dsp32alu: An = Am\n");
3394 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)), 0, 3);
3395 	    }
3396 	  else
3397 	    return yyerror ("Accu reg arguments must differ");
3398 	}
3399     break;
3400 
3401   case 46:
3402 #line 1158 "bfin-parse.y"
3403     {
3404 	  if (IS_DREG ((yyvsp[0].reg)))
3405 	    {
3406 	      notethat ("dsp32alu: An = dregs\n");
3407 	      (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[0].reg), 0, 1, 0, IS_A1 ((yyvsp[-1].reg)) << 1);
3408 	    }
3409 	  else
3410 	    return yyerror ("Dregs expected");
3411 	}
3412     break;
3413 
3414   case 47:
3415 #line 1169 "bfin-parse.y"
3416     {
3417 	  if (!IS_H ((yyvsp[-1].reg)))
3418 	    {
3419 	      if ((yyvsp[-3].reg).regno == REG_A0x && IS_DREG ((yyvsp[-1].reg)))
3420 		{
3421 		  notethat ("dsp32alu: A0.x = dregs_lo\n");
3422 		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 1);
3423 		}
3424 	      else if ((yyvsp[-3].reg).regno == REG_A1x && IS_DREG ((yyvsp[-1].reg)))
3425 		{
3426 		  notethat ("dsp32alu: A1.x = dregs_lo\n");
3427 		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 3);
3428 		}
3429 	      else if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3430 		{
3431 		  notethat ("ALU2op: dregs = dregs_lo\n");
3432 		  (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 10 | ((yyvsp[0].r0).r0 ? 0: 1));
3433 		}
3434 	      else
3435 	        return yyerror ("Register mismatch");
3436 	    }
3437 	  else
3438 	    return yyerror ("Low reg expected");
3439 	}
3440     break;
3441 
3442   case 48:
3443 #line 1195 "bfin-parse.y"
3444     {
3445 	  notethat ("LDIMMhalf: pregs_half = imm16\n");
3446 
3447 	  if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)) && !IS_IREG ((yyvsp[-2].reg))
3448 	      && !IS_MREG ((yyvsp[-2].reg)) && !IS_BREG ((yyvsp[-2].reg)) && !IS_LREG ((yyvsp[-2].reg)))
3449 	    return yyerror ("Wrong register for load immediate");
3450 
3451 	  if (!IS_IMM ((yyvsp[0].expr), 16) && !IS_UIMM ((yyvsp[0].expr), 16))
3452 	    return yyerror ("Constant out of range");
3453 
3454 	  (yyval.instr) = LDIMMHALF_R (&(yyvsp[-2].reg), IS_H ((yyvsp[-2].reg)), 0, 0, (yyvsp[0].expr));
3455 	}
3456     break;
3457 
3458   case 49:
3459 #line 1209 "bfin-parse.y"
3460     {
3461 	  notethat ("dsp32alu: An = 0\n");
3462 
3463 	  if (imm7 ((yyvsp[0].expr)) != 0)
3464 	    return yyerror ("0 expected");
3465 
3466 	  (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)));
3467 	}
3468     break;
3469 
3470   case 50:
3471 #line 1219 "bfin-parse.y"
3472     {
3473 	  if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)) && !IS_IREG ((yyvsp[-3].reg))
3474 	      && !IS_MREG ((yyvsp[-3].reg)) && !IS_BREG ((yyvsp[-3].reg)) && !IS_LREG ((yyvsp[-3].reg)))
3475 	    return yyerror ("Wrong register for load immediate");
3476 
3477 	  if ((yyvsp[0].r0).r0 == 0)
3478 	    {
3479 	      /* 7 bit immediate value if possible.
3480 		 We will check for that constant value for efficiency
3481 		 If it goes to reloc, it will be 16 bit.  */
3482 	      if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_DREG ((yyvsp[-3].reg)))
3483 		{
3484 		  notethat ("COMPI2opD: dregs = imm7 (x) \n");
3485 		  (yyval.instr) = COMPI2OPD (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3486 		}
3487 	      else if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_PREG ((yyvsp[-3].reg)))
3488 		{
3489 		  notethat ("COMPI2opP: pregs = imm7 (x)\n");
3490 		  (yyval.instr) = COMPI2OPP (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3491 		}
3492 	      else
3493 		{
3494 		  if (IS_CONST ((yyvsp[-1].expr)) && !IS_IMM ((yyvsp[-1].expr), 16))
3495 		    return yyerror ("Immediate value out of range");
3496 
3497 		  notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3498 		  /* reg, H, S, Z.   */
3499 		  (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 1, 0, (yyvsp[-1].expr));
3500 		}
3501 	    }
3502 	  else
3503 	    {
3504 	      /* (z) There is no 7 bit zero extended instruction.
3505 	      If the expr is a relocation, generate it.   */
3506 
3507 	      if (IS_CONST ((yyvsp[-1].expr)) && !IS_UIMM ((yyvsp[-1].expr), 16))
3508 		return yyerror ("Immediate value out of range");
3509 
3510 	      notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3511 	      /* reg, H, S, Z.  */
3512 	      (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 0, 1, (yyvsp[-1].expr));
3513 	    }
3514 	}
3515     break;
3516 
3517   case 51:
3518 #line 1264 "bfin-parse.y"
3519     {
3520 	  if (IS_H ((yyvsp[-2].reg)))
3521 	    return yyerror ("Low reg expected");
3522 
3523 	  if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A0x)
3524 	    {
3525 	      notethat ("dsp32alu: dregs_lo = A0.x\n");
3526 	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), 0, 0, 0, 0, 0);
3527 	    }
3528 	  else if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A1x)
3529 	    {
3530 	      notethat ("dsp32alu: dregs_lo = A1.x\n");
3531 	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), 0, 0, 0, 0, 1);
3532 	    }
3533 	  else
3534 	    return yyerror ("Register mismatch");
3535 	}
3536     break;
3537 
3538   case 52:
3539 #line 1283 "bfin-parse.y"
3540     {
3541 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3542 	    {
3543 	      notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
3544 	      (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3545 	    }
3546 	  else
3547 	    return yyerror ("Register mismatch");
3548 	}
3549     break;
3550 
3551   case 53:
3552 #line 1294 "bfin-parse.y"
3553     {
3554 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3555 	    {
3556 	      notethat ("ALU2op: dregs = dregs_byte\n");
3557 	      (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 12 | ((yyvsp[0].r0).r0 ? 0: 1));
3558 	    }
3559 	  else
3560 	    return yyerror ("Register mismatch");
3561 	}
3562     break;
3563 
3564   case 54:
3565 #line 1305 "bfin-parse.y"
3566     {
3567 	  if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3568 	    {
3569 	      notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
3570 	      (yyval.instr) = DSP32ALU (16, 0, 0, 0, 0, 0, 0, 0, 3);
3571 	    }
3572 	  else
3573 	    return yyerror ("Register mismatch");
3574 	}
3575     break;
3576 
3577   case 55:
3578 #line 1316 "bfin-parse.y"
3579     {
3580 	  if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3581 	    {
3582 	      notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
3583 	      (yyval.instr) = DSP32ALU (14, 0, 0, 0, 0, 0, 0, 0, 3);
3584 	    }
3585 	  else
3586 	    return yyerror ("Register mismatch");
3587 	}
3588     break;
3589 
3590   case 56:
3591 #line 1327 "bfin-parse.y"
3592     {
3593 	  if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
3594 	    {
3595 	      notethat ("dsp32alu: A0 -= A1\n");
3596 	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[0].r0).r0, 0, 3);
3597 	    }
3598 	  else
3599 	    return yyerror ("Register mismatch");
3600 	}
3601     break;
3602 
3603   case 57:
3604 #line 1338 "bfin-parse.y"
3605     {
3606 	  if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 4)
3607 	    {
3608 	      notethat ("dagMODik: iregs -= 4\n");
3609 	      (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 3);
3610 	    }
3611 	  else if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 2)
3612 	    {
3613 	      notethat ("dagMODik: iregs -= 2\n");
3614 	      (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 1);
3615 	    }
3616 	  else
3617 	    return yyerror ("Register or value mismatch");
3618 	}
3619     break;
3620 
3621   case 58:
3622 #line 1354 "bfin-parse.y"
3623     {
3624 	  if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
3625 	    {
3626 	      notethat ("dagMODim: iregs += mregs (opt_brev)\n");
3627 	      /* i, m, op, br.  */
3628 	      (yyval.instr) = DAGMODIM (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1);
3629 	    }
3630 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
3631 	    {
3632 	      notethat ("PTR2op: pregs += pregs (BREV )\n");
3633 	      (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 5);
3634 	    }
3635 	  else
3636 	    return yyerror ("Register mismatch");
3637 	}
3638     break;
3639 
3640   case 59:
3641 #line 1371 "bfin-parse.y"
3642     {
3643 	  if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3644 	    {
3645 	      notethat ("dagMODim: iregs -= mregs\n");
3646 	      (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1, 0);
3647 	    }
3648 	  else if (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg)))
3649 	    {
3650 	      notethat ("PTR2op: pregs -= pregs\n");
3651 	      (yyval.instr) = PTR2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
3652 	    }
3653 	  else
3654 	    return yyerror ("Register mismatch");
3655 	}
3656     break;
3657 
3658   case 60:
3659 #line 1387 "bfin-parse.y"
3660     {
3661 	  if (!IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3662 	    {
3663 	      notethat ("dsp32alu: A0 += A1 (W32)\n");
3664 	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[0].r0).r0, 0, 2);
3665 	    }
3666 	  else
3667 	    return yyerror ("Register mismatch");
3668 	}
3669     break;
3670 
3671   case 61:
3672 #line 1398 "bfin-parse.y"
3673     {
3674 	  if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3675 	    {
3676 	      notethat ("dagMODim: iregs += mregs\n");
3677 	      (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0, 0);
3678 	    }
3679 	  else
3680 	    return yyerror ("iregs += mregs expected");
3681 	}
3682     break;
3683 
3684   case 62:
3685 #line 1409 "bfin-parse.y"
3686     {
3687 	  if (IS_IREG ((yyvsp[-2].reg)))
3688 	    {
3689 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 4)
3690 		{
3691 		  notethat ("dagMODik: iregs += 4\n");
3692 		  (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 2);
3693 		}
3694 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3695 		{
3696 		  notethat ("dagMODik: iregs += 2\n");
3697 		  (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 0);
3698 		}
3699 	      else
3700 		return yyerror ("iregs += [ 2 | 4 ");
3701 	    }
3702 	  else if (IS_PREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3703 	    {
3704 	      notethat ("COMPI2opP: pregs += imm7\n");
3705 	      (yyval.instr) = COMPI2OPP (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3706 	    }
3707 	  else if (IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3708 	    {
3709 	      notethat ("COMPI2opD: dregs += imm7\n");
3710 	      (yyval.instr) = COMPI2OPD (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3711 	    }
3712 	  else
3713 	    return yyerror ("Register mismatch");
3714 	}
3715     break;
3716 
3717   case 63:
3718 #line 1440 "bfin-parse.y"
3719     {
3720 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3721 	    {
3722 	      notethat ("ALU2op: dregs *= dregs\n");
3723 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3724 	    }
3725 	  else
3726 	    return yyerror ("Register mismatch");
3727 	}
3728     break;
3729 
3730   case 64:
3731 #line 1451 "bfin-parse.y"
3732     {
3733 	  if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3734 	    return yyerror ("Bad dreg pair");
3735 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3736 	    return yyerror ("Bad dreg pair");
3737 	  else
3738 	    {
3739 	      notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
3740 	      (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
3741 	    }
3742 	}
3743     break;
3744 
3745   case 65:
3746 #line 1464 "bfin-parse.y"
3747     {
3748 	  if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-9].reg)) && REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)) && !REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
3749 	    {
3750 	      notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
3751 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, 2);
3752 	    }
3753 	  else
3754 	    return yyerror ("Register mismatch");
3755 	}
3756     break;
3757 
3758   case 66:
3759 #line 1475 "bfin-parse.y"
3760     {
3761 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg))
3762 	      && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3763 	    {
3764 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3765 		{
3766 		  notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
3767 		  (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 4);
3768 		}
3769 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3770 		{
3771 		  notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
3772 		  (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 5);
3773 		}
3774 	      else
3775 		return yyerror ("Bad shift value");
3776 	    }
3777 	  else if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg))
3778 		   && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3779 	    {
3780 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3781 		{
3782 		  notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
3783 		  (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 6);
3784 		}
3785 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3786 		{
3787 		  notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
3788 		  (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 7);
3789 		}
3790 	      else
3791 		return yyerror ("Bad shift value");
3792 	    }
3793 	  else
3794 	    return yyerror ("Register mismatch");
3795 	}
3796     break;
3797 
3798   case 67:
3799 #line 1514 "bfin-parse.y"
3800     {
3801 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3802 	    {
3803 	      notethat ("COMP3op: dregs = dregs | dregs\n");
3804 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3805 	    }
3806 	  else
3807 	    return yyerror ("Dregs expected");
3808 	}
3809     break;
3810 
3811   case 68:
3812 #line 1524 "bfin-parse.y"
3813     {
3814 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3815 	    {
3816 	      notethat ("COMP3op: dregs = dregs ^ dregs\n");
3817 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 4);
3818 	    }
3819 	  else
3820 	    return yyerror ("Dregs expected");
3821 	}
3822     break;
3823 
3824   case 69:
3825 #line 1534 "bfin-parse.y"
3826     {
3827 	  if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)))
3828 	    {
3829 	      if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
3830 		{
3831 		  notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
3832 		  (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 6);
3833 		}
3834 	      else if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
3835 		{
3836 		  notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
3837 		  (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 7);
3838 		}
3839 	      else
3840 		  return yyerror ("Bad shift value");
3841 	    }
3842 	  else
3843 	    return yyerror ("Dregs expected");
3844 	}
3845     break;
3846 
3847   case 70:
3848 #line 1554 "bfin-parse.y"
3849     {
3850 	  if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
3851 	    {
3852 	      notethat ("CCflag: CC = A0 == A1\n");
3853 	      (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
3854 	    }
3855 	  else
3856 	    return yyerror ("CC register expected");
3857 	}
3858     break;
3859 
3860   case 71:
3861 #line 1564 "bfin-parse.y"
3862     {
3863 	  if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
3864 	    {
3865 	      notethat ("CCflag: CC = A0 < A1\n");
3866 	      (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
3867 	    }
3868 	  else
3869 	    return yyerror ("Register mismatch");
3870 	}
3871     break;
3872 
3873   case 72:
3874 #line 1574 "bfin-parse.y"
3875     {
3876 	  if (REG_CLASS((yyvsp[-3].reg)) == REG_CLASS((yyvsp[-1].reg)))
3877 	    {
3878 	      notethat ("CCflag: CC = dpregs < dpregs\n");
3879 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
3880 	    }
3881 	  else
3882 	    return yyerror ("Compare only of same register class");
3883 	}
3884     break;
3885 
3886   case 73:
3887 #line 1584 "bfin-parse.y"
3888     {
3889 	  if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
3890 	      || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
3891 	    {
3892 	      notethat ("CCflag: CC = dpregs < (u)imm3\n");
3893 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
3894 	    }
3895 	  else
3896 	    return yyerror ("Bad constant value");
3897 	}
3898     break;
3899 
3900   case 74:
3901 #line 1595 "bfin-parse.y"
3902     {
3903 	  if (REG_CLASS((yyvsp[-2].reg)) == REG_CLASS((yyvsp[0].reg)))
3904 	    {
3905 	      notethat ("CCflag: CC = dpregs == dpregs\n");
3906 	      (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), (yyvsp[0].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
3907 	    }
3908 	}
3909     break;
3910 
3911   case 75:
3912 #line 1603 "bfin-parse.y"
3913     {
3914 	  if (IS_IMM ((yyvsp[0].expr), 3))
3915 	    {
3916 	      notethat ("CCflag: CC = dpregs == imm3\n");
3917 	      (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), imm3 ((yyvsp[0].expr)), 0, 1, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
3918 	    }
3919 	  else
3920 	    return yyerror ("Bad constant range");
3921 	}
3922     break;
3923 
3924   case 76:
3925 #line 1613 "bfin-parse.y"
3926     {
3927 	  if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
3928 	    {
3929 	      notethat ("CCflag: CC = A0 <= A1\n");
3930 	      (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
3931 	    }
3932 	  else
3933 	    return yyerror ("CC register expected");
3934 	}
3935     break;
3936 
3937   case 77:
3938 #line 1623 "bfin-parse.y"
3939     {
3940 	  if (REG_CLASS((yyvsp[-3].reg)) == REG_CLASS((yyvsp[-1].reg)))
3941 	    {
3942 	      notethat ("CCflag: CC = pregs <= pregs (..)\n");
3943 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK,
3944 			   1 + (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
3945 	    }
3946 	  else
3947 	    return yyerror ("Compare only of same register class");
3948 	}
3949     break;
3950 
3951   case 78:
3952 #line 1634 "bfin-parse.y"
3953     {
3954 	  if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
3955 	      || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
3956 	    {
3957 	      if (IS_DREG ((yyvsp[-3].reg)))
3958 		{
3959 		  notethat ("CCflag: CC = dregs <= (u)imm3\n");
3960 		  /*    x       y     opc     I     G   */
3961 		  (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, 0);
3962 		}
3963 	      else if (IS_PREG ((yyvsp[-3].reg)))
3964 		{
3965 		  notethat ("CCflag: CC = pregs <= (u)imm3\n");
3966 		  /*    x       y     opc     I     G   */
3967 		  (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, 1);
3968 		}
3969 	      else
3970 		return yyerror ("Dreg or Preg expected");
3971 	    }
3972 	  else
3973 	    return yyerror ("Bad constant value");
3974 	}
3975     break;
3976 
3977   case 79:
3978 #line 1658 "bfin-parse.y"
3979     {
3980 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3981 	    {
3982 	      notethat ("COMP3op: dregs = dregs & dregs\n");
3983 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
3984 	    }
3985 	  else
3986 	    return yyerror ("Dregs expected");
3987 	}
3988     break;
3989 
3990   case 80:
3991 #line 1669 "bfin-parse.y"
3992     {
3993 	  notethat ("CC2stat operation\n");
3994 	  (yyval.instr) = bfin_gen_cc2stat ((yyvsp[0].modcodes).r0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).s0);
3995 	}
3996     break;
3997 
3998   case 81:
3999 #line 1675 "bfin-parse.y"
4000     {
4001 	  if (IS_ALLREG ((yyvsp[-2].reg)) && IS_ALLREG ((yyvsp[0].reg)))
4002 	    {
4003 	      notethat ("REGMV: allregs = allregs\n");
4004 	      (yyval.instr) = bfin_gen_regmv (&(yyvsp[0].reg), &(yyvsp[-2].reg));
4005 	    }
4006 	  else
4007 	    return yyerror ("Register mismatch");
4008 	}
4009     break;
4010 
4011   case 82:
4012 #line 1686 "bfin-parse.y"
4013     {
4014 	  if (IS_DREG ((yyvsp[0].reg)))
4015 	    {
4016 	      notethat ("CC2dreg: CC = dregs\n");
4017 	      (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[0].reg));
4018 	    }
4019 	  else
4020 	    return yyerror ("Register mismatch");
4021 	}
4022     break;
4023 
4024   case 83:
4025 #line 1697 "bfin-parse.y"
4026     {
4027 	  if (IS_DREG ((yyvsp[-2].reg)))
4028 	    {
4029 	      notethat ("CC2dreg: dregs = CC\n");
4030 	      (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[-2].reg));
4031 	    }
4032 	  else
4033 	    return yyerror ("Register mismatch");
4034 	}
4035     break;
4036 
4037   case 84:
4038 #line 1708 "bfin-parse.y"
4039     {
4040 	  notethat ("CC2dreg: CC =! CC\n");
4041 	  (yyval.instr) = bfin_gen_cc2dreg (3, 0);
4042 	}
4043     break;
4044 
4045   case 85:
4046 #line 1716 "bfin-parse.y"
4047     {
4048 	  notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
4049 
4050 	  if (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
4051 	    return yyerror ("(M) not allowed with MAC0");
4052 
4053 	  if (IS_H ((yyvsp[-3].reg)))
4054 	    {
4055 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4056 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4057 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4058 	    }
4059 	  else
4060 	    {
4061 	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 0,
4062 			      0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4063 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4064 		}
4065 	}
4066     break;
4067 
4068   case 86:
4069 #line 1737 "bfin-parse.y"
4070     {
4071 	  /* Odd registers can use (M).  */
4072 	  if (!IS_DREG ((yyvsp[-3].reg)))
4073 	    return yyerror ("Dreg expected");
4074 
4075 	  if (!IS_EVEN ((yyvsp[-3].reg)))
4076 	    {
4077 	      notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
4078 
4079 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4080 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4081 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4082 	    }
4083 	  else if ((yyvsp[0].mod).MM == 0)
4084 	    {
4085 	      notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
4086 	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 1,
4087 			      0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4088 			      &(yyvsp[-3].reg),  0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4089 	    }
4090 	  else
4091 	    return yyerror ("Register or mode mismatch");
4092 	}
4093     break;
4094 
4095   case 87:
4096 #line 1763 "bfin-parse.y"
4097     {
4098 	  if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4099 	    return yyerror ("Dregs expected");
4100 
4101 	  if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4102 	    return -1;
4103 
4104 	  if (IS_H ((yyvsp[-8].reg)) && !IS_H ((yyvsp[-3].reg)))
4105 	    {
4106 	      notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
4107 		       "dregs_lo = multiply_halfregs opt_mode\n");
4108 	      (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4109 			      IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4110 			      &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4111 	    }
4112 	  else if (!IS_H ((yyvsp[-8].reg)) && IS_H ((yyvsp[-3].reg)) && (yyvsp[-5].mod).MM == 0)
4113 	    {
4114 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4115 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4116 			      &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4117 	    }
4118 	  else
4119 	    return yyerror ("Multfunc Register or mode mismatch");
4120 	}
4121     break;
4122 
4123   case 88:
4124 #line 1789 "bfin-parse.y"
4125     {
4126 	  if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4127 	    return yyerror ("Dregs expected");
4128 
4129 	  if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4130 	    return -1;
4131 
4132 	  notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
4133 		   "dregs = multiply_halfregs opt_mode\n");
4134 	  if (IS_EVEN ((yyvsp[-8].reg)))
4135 	    {
4136 	      if ((yyvsp[-3].reg).regno - (yyvsp[-8].reg).regno != 1 || (yyvsp[-5].mod).MM != 0)
4137 		return yyerror ("Dest registers or mode mismatch");
4138 
4139 	      /*   op1       MM      mmod  */
4140 	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 1, 1,
4141 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4142 			      &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4143 
4144 	    }
4145 	  else
4146 	    {
4147 	      if ((yyvsp[-8].reg).regno - (yyvsp[-3].reg).regno != 1)
4148 		return yyerror ("Dest registers mismatch");
4149 
4150 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4151 			      IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4152 			      &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4153 	    }
4154 	}
4155     break;
4156 
4157   case 89:
4158 #line 1823 "bfin-parse.y"
4159     {
4160 	  if (!REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)))
4161 	    return yyerror ("Aregs must be same");
4162 
4163 	  if (IS_DREG ((yyvsp[0].reg)) && !IS_H ((yyvsp[0].reg)))
4164 	    {
4165 	      notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
4166 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 0, IS_A1 ((yyvsp[-4].reg)));
4167 	    }
4168 	  else
4169 	    return yyerror ("Dregs expected");
4170 	}
4171     break;
4172 
4173   case 90:
4174 #line 1837 "bfin-parse.y"
4175     {
4176 	  if (IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4177 	    {
4178 	      notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
4179 	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-6].reg), (yyvsp[-3].reg)));
4180 	    }
4181 	  else
4182 	    return yyerror ("Dregs expected");
4183 	}
4184     break;
4185 
4186   case 91:
4187 #line 1848 "bfin-parse.y"
4188     {
4189 	  if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4190 	    return yyerror ("Aregs must be same");
4191 
4192 	  if (IS_UIMM ((yyvsp[0].expr), 5))
4193 	    {
4194 	      notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
4195 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4196 	    }
4197 	  else
4198 	    return yyerror ("Bad shift value");
4199 	}
4200     break;
4201 
4202   case 92:
4203 #line 1862 "bfin-parse.y"
4204     {
4205 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4206 	    {
4207 	      if ((yyvsp[0].modcodes).r0)
4208 		{
4209 		  /*  Vector?  */
4210 		  notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
4211 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), imm4 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4212 		}
4213 	      else
4214 		{
4215 		  notethat ("dsp32shiftimm: dregs =  dregs << uimm5 (.)\n");
4216 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4217 		}
4218 	    }
4219 	  else if ((yyvsp[0].modcodes).s0 == 0 && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
4220 	    {
4221 	      if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4222 		{
4223 		  notethat ("PTR2op: pregs = pregs << 2\n");
4224 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 1);
4225 		}
4226 	      else if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4227 		{
4228 		  notethat ("COMP3op: pregs = pregs << 1\n");
4229 		  (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-3].reg), 5);
4230 		}
4231 	      else
4232 		return yyerror ("Bad shift value");
4233 	    }
4234 	  else
4235 	    return yyerror ("Bad shift value or register");
4236 	}
4237     break;
4238 
4239   case 93:
4240 #line 1896 "bfin-parse.y"
4241     {
4242 	  if (IS_UIMM ((yyvsp[0].expr), 4))
4243 	    {
4244 	      notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
4245 	      (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-4].reg), imm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
4246 	    }
4247 	  else
4248 	    return yyerror ("Bad shift value");
4249 	}
4250     break;
4251 
4252   case 94:
4253 #line 1906 "bfin-parse.y"
4254     {
4255 	  if (IS_UIMM ((yyvsp[-1].expr), 4))
4256 	    {
4257 	      notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
4258 	      (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4259 	    }
4260 	  else
4261 	    return yyerror ("Bad shift value");
4262 	}
4263     break;
4264 
4265   case 95:
4266 #line 1916 "bfin-parse.y"
4267     {
4268 	  int op;
4269 
4270 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4271 	    {
4272 	      if ((yyvsp[0].modcodes).r0)
4273 		{
4274 		  op = 1;
4275 		  notethat ("dsp32shift: dregs = ASHIFT dregs BY "
4276 			   "dregs_lo (V, .)\n");
4277 		}
4278 	      else
4279 		{
4280 
4281 		  op = 2;
4282 		  notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
4283 		}
4284 	      (yyval.instr) = DSP32SHIFT (op, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4285 	    }
4286 	  else
4287 	    return yyerror ("Dregs expected");
4288 	}
4289     break;
4290 
4291   case 96:
4292 #line 1941 "bfin-parse.y"
4293     {
4294 	  if (IS_DREG_L ((yyvsp[-8].reg)) && IS_DREG_L ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4295 	    {
4296 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
4297 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4298 	    }
4299 	  else
4300 	    return yyerror ("Bad shift value or register");
4301 	}
4302     break;
4303 
4304   case 97:
4305 #line 1953 "bfin-parse.y"
4306     {
4307 	  if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4308 	    {
4309 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
4310 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4311 	    }
4312 	  else if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_H ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4313 	    {
4314 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
4315 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 3, 0);
4316 	    }
4317 	  else
4318 	    return yyerror ("Bad shift value or register");
4319 	}
4320     break;
4321 
4322   case 98:
4323 #line 1971 "bfin-parse.y"
4324     {
4325 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4326 	    {
4327 	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
4328 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4329 	    }
4330 	  else
4331 	    return yyerror ("Register mismatch");
4332 	}
4333     break;
4334 
4335   case 99:
4336 #line 1982 "bfin-parse.y"
4337     {
4338 	  if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)))
4339 	    {
4340 	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
4341 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &(yyvsp[-6].reg), 3, 0);
4342 	    }
4343 	  else
4344 	    return yyerror ("Register mismatch");
4345 	}
4346     break;
4347 
4348   case 100:
4349 #line 1993 "bfin-parse.y"
4350     {
4351 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4352 	    {
4353 	      notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
4354 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4355 	    }
4356 	  else
4357 	    return yyerror ("Register mismatch");
4358 	}
4359     break;
4360 
4361   case 101:
4362 #line 2004 "bfin-parse.y"
4363     {
4364 	  if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4365 	    return yyerror ("Aregs must be same");
4366 
4367 	  if (IS_UIMM ((yyvsp[0].expr), 5))
4368 	    {
4369 	      notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
4370 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4371 	    }
4372 	  else
4373 	    return yyerror ("Shift value range error");
4374 	}
4375     break;
4376 
4377   case 102:
4378 #line 2017 "bfin-parse.y"
4379     {
4380 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4381 	    {
4382 	      notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
4383 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 1, IS_A1 ((yyvsp[-4].reg)));
4384 	    }
4385 	  else
4386 	    return yyerror ("Register mismatch");
4387 	}
4388     break;
4389 
4390   case 103:
4391 #line 2028 "bfin-parse.y"
4392     {
4393 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4394 	    {
4395 	      notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
4396 	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-2].reg)));
4397 	    }
4398 	  else
4399 	    return yyerror ("Register mismatch");
4400 	}
4401     break;
4402 
4403   case 104:
4404 #line 2039 "bfin-parse.y"
4405     {
4406 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4407 	    {
4408 	      notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
4409 	      (yyval.instr) = DSP32SHIFT ((yyvsp[0].r0).r0 ? 1: 2, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4410 	    }
4411 	  else
4412 	    return yyerror ("Register mismatch");
4413 	}
4414     break;
4415 
4416   case 105:
4417 #line 2050 "bfin-parse.y"
4418     {
4419 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4420 	    {
4421 	      notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
4422 	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, 0);
4423 	    }
4424 	  else
4425 	    return yyerror ("Register mismatch");
4426 	}
4427     break;
4428 
4429   case 106:
4430 #line 2061 "bfin-parse.y"
4431     {
4432 	  if (REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6) >= 0)
4433 	    {
4434 	      notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
4435 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 1, IS_A1 ((yyvsp[-3].reg)));
4436 	    }
4437 	  else
4438 	    return yyerror ("Accu register expected");
4439 	}
4440     break;
4441 
4442   case 107:
4443 #line 2072 "bfin-parse.y"
4444     {
4445 	  if ((yyvsp[0].r0).r0 == 1)
4446 	    {
4447 	      if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4448 		{
4449 		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
4450 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4451 		}
4452 	      else
4453 	        return yyerror ("Register mismatch");
4454 	    }
4455 	  else
4456 	    {
4457 	      if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4458 		{
4459 		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
4460 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4461 		}
4462 	      else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4463 		{
4464 		  notethat ("PTR2op: pregs = pregs >> 2\n");
4465 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 3);
4466 		}
4467 	      else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4468 		{
4469 		  notethat ("PTR2op: pregs = pregs >> 1\n");
4470 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 4);
4471 		}
4472 	      else
4473 	        return yyerror ("Register mismatch");
4474 	    }
4475 	}
4476     break;
4477 
4478   case 108:
4479 #line 2105 "bfin-parse.y"
4480     {
4481 	  if (IS_UIMM ((yyvsp[0].expr), 5))
4482 	    {
4483 	      notethat ("dsp32shiftimm:  dregs_half =  dregs_half >> uimm5\n");
4484 	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-4].reg), -uimm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
4485 	    }
4486 	  else
4487 	    return yyerror ("Register mismatch");
4488 	}
4489     break;
4490 
4491   case 109:
4492 #line 2115 "bfin-parse.y"
4493     {
4494 	  if (IS_UIMM ((yyvsp[-1].expr), 5))
4495 	    {
4496 	      notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
4497 	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg),
4498 				  (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4499 	    }
4500 	  else
4501 	    return yyerror ("Register or modifier mismatch");
4502 	}
4503     break;
4504 
4505   case 110:
4506 #line 2128 "bfin-parse.y"
4507     {
4508 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4509 	    {
4510 	      if ((yyvsp[0].modcodes).r0)
4511 		{
4512 		  /* Vector?  */
4513 		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (V, .)\n");
4514 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4515 		}
4516 	      else
4517 		{
4518 		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (.)\n");
4519 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4520 		}
4521 	    }
4522 	  else
4523 	    return yyerror ("Register mismatch");
4524 	}
4525     break;
4526 
4527   case 111:
4528 #line 2148 "bfin-parse.y"
4529     {
4530 	  if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4531 	    {
4532 	      notethat ("dsp32shift: dregs_lo = ONES dregs\n");
4533 	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 3, 0);
4534 	    }
4535 	  else
4536 	    return yyerror ("Register mismatch");
4537 	}
4538     break;
4539 
4540   case 112:
4541 #line 2159 "bfin-parse.y"
4542     {
4543 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4544 	    {
4545 	      notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
4546 	      (yyval.instr) = DSP32SHIFT (4, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)), 0);
4547 	    }
4548 	  else
4549 	    return yyerror ("Register mismatch");
4550 	}
4551     break;
4552 
4553   case 113:
4554 #line 2170 "bfin-parse.y"
4555     {
4556 	  if (IS_DREG ((yyvsp[-9].reg))
4557 	      && (yyvsp[-3].reg).regno == REG_A0
4558 	      && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4559 	    {
4560 	      notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
4561 	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 0, 0);
4562 	    }
4563 	  else
4564 	    return yyerror ("Register mismatch");
4565 	}
4566     break;
4567 
4568   case 114:
4569 #line 2183 "bfin-parse.y"
4570     {
4571 	  if (IS_DREG ((yyvsp[-9].reg))
4572 	      && (yyvsp[-3].reg).regno == REG_A0
4573 	      && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4574 	    {
4575 	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
4576 	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 1, 0);
4577 	    }
4578 	  else
4579 	    return yyerror ("Register mismatch");
4580 	}
4581     break;
4582 
4583   case 115:
4584 #line 2196 "bfin-parse.y"
4585     {
4586 	  if (IS_DREG ((yyvsp[-11].reg)) && !IS_H ((yyvsp[-11].reg)) && !REG_SAME ((yyvsp[-5].reg), (yyvsp[-3].reg)))
4587 	    {
4588 	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
4589 	      (yyval.instr) = DSP32SHIFT (12, &(yyvsp[-11].reg), 0, 0, 1, 0);
4590 	    }
4591 	  else
4592 	    return yyerror ("Register mismatch");
4593 	}
4594     break;
4595 
4596   case 116:
4597 #line 2207 "bfin-parse.y"
4598     {
4599 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4600 	    {
4601 	      notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
4602 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4603 	    }
4604 	  else
4605 	    return yyerror ("Register mismatch");
4606 	}
4607     break;
4608 
4609   case 117:
4610 #line 2218 "bfin-parse.y"
4611     {
4612 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4613 	    {
4614 	      notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
4615 	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 3, 0);
4616 	    }
4617 	  else
4618 	    return yyerror ("Register mismatch");
4619 	}
4620     break;
4621 
4622   case 118:
4623 #line 2229 "bfin-parse.y"
4624     {
4625 	  if (IS_IMM ((yyvsp[0].expr), 6))
4626 	    {
4627 	      notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
4628 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[0].expr)), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4629 	    }
4630 	  else
4631 	    return yyerror ("Register mismatch");
4632 	}
4633     break;
4634 
4635   case 119:
4636 #line 2240 "bfin-parse.y"
4637     {
4638 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6))
4639 	    {
4640 	      (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 3, IS_A1 ((yyvsp[-5].reg)));
4641 	    }
4642 	  else
4643 	    return yyerror ("Register mismatch");
4644 	}
4645     break;
4646 
4647   case 120:
4648 #line 2250 "bfin-parse.y"
4649     {
4650 	  if (IS_DREG_L ((yyvsp[-3].reg)))
4651 	    {
4652 	      notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
4653 	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, 0, IS_A1 ((yyvsp[0].reg)), 0);
4654 	    }
4655 	  else
4656 	    return yyerror ("Register mismatch");
4657 	}
4658     break;
4659 
4660   case 121:
4661 #line 2261 "bfin-parse.y"
4662     {
4663 	  if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4664 	    {
4665 	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
4666 	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 0, 0);
4667 	    }
4668 	  else
4669 	    return yyerror ("Register mismatch");
4670 	}
4671     break;
4672 
4673   case 122:
4674 #line 2272 "bfin-parse.y"
4675     {
4676 	  if (IS_DREG_L ((yyvsp[-3].reg)))
4677 	    {
4678 	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
4679 	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 1 + IS_H ((yyvsp[0].reg)), 0);
4680 	    }
4681 	  else
4682 	    return yyerror ("Register mismatch");
4683 	}
4684     break;
4685 
4686   case 123:
4687 #line 2284 "bfin-parse.y"
4688     {
4689 	  if (IS_DREG_L ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-2].reg)))
4690 	    {
4691 	      notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
4692 	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-6].reg), 0, &(yyvsp[-2].reg), ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4693 	    }
4694 	  else
4695 	    return yyerror ("Register mismatch");
4696 	}
4697     break;
4698 
4699   case 124:
4700 #line 2295 "bfin-parse.y"
4701     {
4702 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
4703 	    {
4704 	      notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
4705 	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), 2 | ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4706 	    }
4707 	  else
4708 	    return yyerror ("Register mismatch");
4709 	}
4710     break;
4711 
4712   case 125:
4713 #line 2306 "bfin-parse.y"
4714     {
4715 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)) && !IS_A1 ((yyvsp[-2].reg)))
4716 	    {
4717 	      notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
4718 	      (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[-6].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4719 	    }
4720 	  else
4721 	    return yyerror ("Register mismatch");
4722 	}
4723     break;
4724 
4725   case 126:
4726 #line 2317 "bfin-parse.y"
4727     {
4728 	  if (!IS_A1 ((yyvsp[-8].reg)) && !IS_A1 ((yyvsp[-5].reg)) && IS_A1 ((yyvsp[-3].reg)))
4729 	    {
4730 	      notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
4731 	      (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
4732 	    }
4733 	  else
4734 	    return yyerror ("Dregs expected");
4735 	}
4736     break;
4737 
4738   case 127:
4739 #line 2330 "bfin-parse.y"
4740     {
4741 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4742 	    {
4743 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4744 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 4);
4745 	    }
4746 	  else
4747 	    return yyerror ("Register mismatch");
4748 	}
4749     break;
4750 
4751   case 128:
4752 #line 2342 "bfin-parse.y"
4753     {
4754 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4755 	    {
4756 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4757 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 2);
4758 	    }
4759 	  else
4760 	    return yyerror ("Register mismatch");
4761 	}
4762     break;
4763 
4764   case 129:
4765 #line 2354 "bfin-parse.y"
4766     {
4767 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4768 	    {
4769 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4770 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 3);
4771 	    }
4772 	  else
4773 	    return yyerror ("Register mismatch");
4774 	}
4775     break;
4776 
4777   case 130:
4778 #line 2365 "bfin-parse.y"
4779     {
4780 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4781 	    {
4782 	      notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
4783 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 0);
4784 	    }
4785 	  else
4786 	    return yyerror ("Register mismatch or value error");
4787 	}
4788     break;
4789 
4790   case 131:
4791 #line 2376 "bfin-parse.y"
4792     {
4793 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4794 	    {
4795 	      notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
4796 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 1);
4797 	    }
4798 	  else
4799 	    return yyerror ("Register mismatch or value error");
4800 	}
4801     break;
4802 
4803   case 132:
4804 #line 2387 "bfin-parse.y"
4805     {
4806 	  if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg)))
4807 	      && (IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg))))
4808 	    {
4809 	      notethat ("ccMV: IF ! CC gregs = gregs\n");
4810 	      (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 0);
4811 	    }
4812 	  else
4813 	    return yyerror ("Register mismatch");
4814 	}
4815     break;
4816 
4817   case 133:
4818 #line 2399 "bfin-parse.y"
4819     {
4820 	  if ((IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg)))
4821 	      && (IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))))
4822 	    {
4823 	      notethat ("ccMV: IF CC gregs = gregs\n");
4824 	      (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 1);
4825 	    }
4826 	  else
4827 	    return yyerror ("Register mismatch");
4828 	}
4829     break;
4830 
4831   case 134:
4832 #line 2411 "bfin-parse.y"
4833     {
4834 	  if (IS_PCREL10 ((yyvsp[0].expr)))
4835 	    {
4836 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
4837 	      (yyval.instr) = BRCC (0, 0, (yyvsp[0].expr));
4838 	    }
4839 	  else
4840 	    return yyerror ("Bad jump offset");
4841 	}
4842     break;
4843 
4844   case 135:
4845 #line 2422 "bfin-parse.y"
4846     {
4847 	  if (IS_PCREL10 ((yyvsp[-3].expr)))
4848 	    {
4849 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
4850 	      (yyval.instr) = BRCC (0, 1, (yyvsp[-3].expr));
4851 	    }
4852 	  else
4853 	    return yyerror ("Bad jump offset");
4854 	}
4855     break;
4856 
4857   case 136:
4858 #line 2433 "bfin-parse.y"
4859     {
4860 	  if (IS_PCREL10 ((yyvsp[0].expr)))
4861 	    {
4862 	      notethat ("BRCC: IF CC JUMP  pcrel11m2\n");
4863 	      (yyval.instr) = BRCC (1, 0, (yyvsp[0].expr));
4864 	    }
4865 	  else
4866 	    return yyerror ("Bad jump offset");
4867 	}
4868     break;
4869 
4870   case 137:
4871 #line 2444 "bfin-parse.y"
4872     {
4873 	  if (IS_PCREL10 ((yyvsp[-3].expr)))
4874 	    {
4875 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
4876 	      (yyval.instr) = BRCC (1, 1, (yyvsp[-3].expr));
4877 	    }
4878 	  else
4879 	    return yyerror ("Bad jump offset");
4880 	}
4881     break;
4882 
4883   case 138:
4884 #line 2454 "bfin-parse.y"
4885     {
4886 	  notethat ("ProgCtrl: NOP\n");
4887 	  (yyval.instr) = PROGCTRL (0, 0);
4888 	}
4889     break;
4890 
4891   case 139:
4892 #line 2460 "bfin-parse.y"
4893     {
4894 	  notethat ("ProgCtrl: RTS\n");
4895 	  (yyval.instr) = PROGCTRL (1, 0);
4896 	}
4897     break;
4898 
4899   case 140:
4900 #line 2466 "bfin-parse.y"
4901     {
4902 	  notethat ("ProgCtrl: RTI\n");
4903 	  (yyval.instr) = PROGCTRL (1, 1);
4904 	}
4905     break;
4906 
4907   case 141:
4908 #line 2472 "bfin-parse.y"
4909     {
4910 	  notethat ("ProgCtrl: RTX\n");
4911 	  (yyval.instr) = PROGCTRL (1, 2);
4912 	}
4913     break;
4914 
4915   case 142:
4916 #line 2478 "bfin-parse.y"
4917     {
4918 	  notethat ("ProgCtrl: RTN\n");
4919 	  (yyval.instr) = PROGCTRL (1, 3);
4920 	}
4921     break;
4922 
4923   case 143:
4924 #line 2484 "bfin-parse.y"
4925     {
4926 	  notethat ("ProgCtrl: RTE\n");
4927 	  (yyval.instr) = PROGCTRL (1, 4);
4928 	}
4929     break;
4930 
4931   case 144:
4932 #line 2490 "bfin-parse.y"
4933     {
4934 	  notethat ("ProgCtrl: IDLE\n");
4935 	  (yyval.instr) = PROGCTRL (2, 0);
4936 	}
4937     break;
4938 
4939   case 145:
4940 #line 2496 "bfin-parse.y"
4941     {
4942 	  notethat ("ProgCtrl: CSYNC\n");
4943 	  (yyval.instr) = PROGCTRL (2, 3);
4944 	}
4945     break;
4946 
4947   case 146:
4948 #line 2502 "bfin-parse.y"
4949     {
4950 	  notethat ("ProgCtrl: SSYNC\n");
4951 	  (yyval.instr) = PROGCTRL (2, 4);
4952 	}
4953     break;
4954 
4955   case 147:
4956 #line 2508 "bfin-parse.y"
4957     {
4958 	  notethat ("ProgCtrl: EMUEXCPT\n");
4959 	  (yyval.instr) = PROGCTRL (2, 5);
4960 	}
4961     break;
4962 
4963   case 148:
4964 #line 2514 "bfin-parse.y"
4965     {
4966 	  if (IS_DREG ((yyvsp[0].reg)))
4967 	    {
4968 	      notethat ("ProgCtrl: CLI dregs\n");
4969 	      (yyval.instr) = PROGCTRL (3, (yyvsp[0].reg).regno & CODE_MASK);
4970 	    }
4971 	  else
4972 	    return yyerror ("Dreg expected for CLI");
4973 	}
4974     break;
4975 
4976   case 149:
4977 #line 2525 "bfin-parse.y"
4978     {
4979 	  if (IS_DREG ((yyvsp[0].reg)))
4980 	    {
4981 	      notethat ("ProgCtrl: STI dregs\n");
4982 	      (yyval.instr) = PROGCTRL (4, (yyvsp[0].reg).regno & CODE_MASK);
4983 	    }
4984 	  else
4985 	    return yyerror ("Dreg expected for STI");
4986 	}
4987     break;
4988 
4989   case 150:
4990 #line 2536 "bfin-parse.y"
4991     {
4992 	  if (IS_PREG ((yyvsp[-1].reg)))
4993 	    {
4994 	      notethat ("ProgCtrl: JUMP (pregs )\n");
4995 	      (yyval.instr) = PROGCTRL (5, (yyvsp[-1].reg).regno & CODE_MASK);
4996 	    }
4997 	  else
4998 	    return yyerror ("Bad register for indirect jump");
4999 	}
5000     break;
5001 
5002   case 151:
5003 #line 2547 "bfin-parse.y"
5004     {
5005 	  if (IS_PREG ((yyvsp[-1].reg)))
5006 	    {
5007 	      notethat ("ProgCtrl: CALL (pregs )\n");
5008 	      (yyval.instr) = PROGCTRL (6, (yyvsp[-1].reg).regno & CODE_MASK);
5009 	    }
5010 	  else
5011 	    return yyerror ("Bad register for indirect call");
5012 	}
5013     break;
5014 
5015   case 152:
5016 #line 2558 "bfin-parse.y"
5017     {
5018 	  if (IS_PREG ((yyvsp[-1].reg)))
5019 	    {
5020 	      notethat ("ProgCtrl: CALL (PC + pregs )\n");
5021 	      (yyval.instr) = PROGCTRL (7, (yyvsp[-1].reg).regno & CODE_MASK);
5022 	    }
5023 	  else
5024 	    return yyerror ("Bad register for indirect call");
5025 	}
5026     break;
5027 
5028   case 153:
5029 #line 2569 "bfin-parse.y"
5030     {
5031 	  if (IS_PREG ((yyvsp[-1].reg)))
5032 	    {
5033 	      notethat ("ProgCtrl: JUMP (PC + pregs )\n");
5034 	      (yyval.instr) = PROGCTRL (8, (yyvsp[-1].reg).regno & CODE_MASK);
5035 	    }
5036 	  else
5037 	    return yyerror ("Bad register for indirect jump");
5038 	}
5039     break;
5040 
5041   case 154:
5042 #line 2580 "bfin-parse.y"
5043     {
5044 	  if (IS_UIMM ((yyvsp[0].expr), 4))
5045 	    {
5046 	      notethat ("ProgCtrl: RAISE uimm4\n");
5047 	      (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[0].expr)));
5048 	    }
5049 	  else
5050 	    return yyerror ("Bad value for RAISE");
5051 	}
5052     break;
5053 
5054   case 155:
5055 #line 2591 "bfin-parse.y"
5056     {
5057 		notethat ("ProgCtrl: EMUEXCPT\n");
5058 		(yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[0].expr)));
5059 	}
5060     break;
5061 
5062   case 156:
5063 #line 2597 "bfin-parse.y"
5064     {
5065 	  if (IS_PREG ((yyvsp[-1].reg)))
5066 	    {
5067 	      notethat ("ProgCtrl: TESTSET (pregs )\n");
5068 	      (yyval.instr) = PROGCTRL (11, (yyvsp[-1].reg).regno & CODE_MASK);
5069 	    }
5070 	  else
5071 	    return yyerror ("Preg expected");
5072 	}
5073     break;
5074 
5075   case 157:
5076 #line 2608 "bfin-parse.y"
5077     {
5078 	  if (IS_PCREL12 ((yyvsp[0].expr)))
5079 	    {
5080 	      notethat ("UJUMP: JUMP pcrel12\n");
5081 	      (yyval.instr) = UJUMP ((yyvsp[0].expr));
5082 	    }
5083 	  else
5084 	    return yyerror ("Bad value for relative jump");
5085 	}
5086     break;
5087 
5088   case 158:
5089 #line 2619 "bfin-parse.y"
5090     {
5091 	  if (IS_PCREL12 ((yyvsp[0].expr)))
5092 	    {
5093 	      notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
5094 	      (yyval.instr) = UJUMP((yyvsp[0].expr));
5095 	    }
5096 	  else
5097 	    return yyerror ("Bad value for relative jump");
5098 	}
5099     break;
5100 
5101   case 159:
5102 #line 2630 "bfin-parse.y"
5103     {
5104 	  if (IS_PCREL24 ((yyvsp[0].expr)))
5105 	    {
5106 	      notethat ("CALLa: jump.l pcrel24\n");
5107 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 0);
5108 	    }
5109 	  else
5110 	    return yyerror ("Bad value for long jump");
5111 	}
5112     break;
5113 
5114   case 160:
5115 #line 2641 "bfin-parse.y"
5116     {
5117 	  if (IS_PCREL24 ((yyvsp[0].expr)))
5118 	    {
5119 	      notethat ("CALLa: jump.l pcrel24\n");
5120 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5121 	    }
5122 	  else
5123 	    return yyerror ("Bad value for long jump");
5124 	}
5125     break;
5126 
5127   case 161:
5128 #line 2652 "bfin-parse.y"
5129     {
5130 	  if (IS_PCREL24 ((yyvsp[0].expr)))
5131 	    {
5132 	      notethat ("CALLa: CALL pcrel25m2\n");
5133 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 1);
5134 	    }
5135 	  else
5136 	    return yyerror ("Bad call address");
5137 	}
5138     break;
5139 
5140   case 162:
5141 #line 2662 "bfin-parse.y"
5142     {
5143 	  if (IS_PCREL24 ((yyvsp[0].expr)))
5144 	    {
5145 	      notethat ("CALLa: CALL pcrel25m2\n");
5146 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5147 	    }
5148 	  else
5149 	    return yyerror ("Bad call address");
5150 	}
5151     break;
5152 
5153   case 163:
5154 #line 2675 "bfin-parse.y"
5155     {
5156 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5157 	    (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 8);
5158 	  else
5159 	    return yyerror ("Bad registers for DIVQ");
5160 	}
5161     break;
5162 
5163   case 164:
5164 #line 2683 "bfin-parse.y"
5165     {
5166 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5167 	    (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 9);
5168 	  else
5169 	    return yyerror ("Bad registers for DIVS");
5170 	}
5171     break;
5172 
5173   case 165:
5174 #line 2691 "bfin-parse.y"
5175     {
5176 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
5177 	    {
5178 	      if ((yyvsp[0].modcodes).r0 == 0 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 0)
5179 		{
5180 		  notethat ("ALU2op: dregs = - dregs\n");
5181 		  (yyval.instr) = ALU2OP (&(yyvsp[-4].reg), &(yyvsp[-1].reg), 14);
5182 		}
5183 	      else if ((yyvsp[0].modcodes).r0 == 1 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 3)
5184 		{
5185 		  notethat ("dsp32alu: dregs = - dregs (.)\n");
5186 		  (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5187 		}
5188 	      else
5189 		{
5190 		  notethat ("dsp32alu: dregs = - dregs (.)\n");
5191 		  (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5192 		}
5193 	    }
5194 	  else
5195 	    return yyerror ("Dregs expected");
5196 	}
5197     break;
5198 
5199   case 166:
5200 #line 2715 "bfin-parse.y"
5201     {
5202 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
5203 	    {
5204 	      notethat ("ALU2op: dregs = ~dregs\n");
5205 	      (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[0].reg), 15);
5206 	    }
5207 	  else
5208 	    return yyerror ("Dregs expected");
5209 	}
5210     break;
5211 
5212   case 167:
5213 #line 2726 "bfin-parse.y"
5214     {
5215 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5216 	    {
5217 	      notethat ("ALU2op: dregs >>= dregs\n");
5218 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1);
5219 	    }
5220 	  else
5221 	    return yyerror ("Dregs expected");
5222 	}
5223     break;
5224 
5225   case 168:
5226 #line 2737 "bfin-parse.y"
5227     {
5228 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5229 	    {
5230 	      notethat ("LOGI2op: dregs >>= uimm5\n");
5231 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 6);
5232 	    }
5233 	  else
5234 	    return yyerror ("Dregs expected or value error");
5235 	}
5236     break;
5237 
5238   case 169:
5239 #line 2748 "bfin-parse.y"
5240     {
5241 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5242 	    {
5243 	      notethat ("ALU2op: dregs >>>= dregs\n");
5244 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
5245 	    }
5246 	  else
5247 	    return yyerror ("Dregs expected");
5248 	}
5249     break;
5250 
5251   case 170:
5252 #line 2759 "bfin-parse.y"
5253     {
5254 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5255 	    {
5256 	      notethat ("ALU2op: dregs <<= dregs\n");
5257 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
5258 	    }
5259 	  else
5260 	    return yyerror ("Dregs expected");
5261 	}
5262     break;
5263 
5264   case 171:
5265 #line 2770 "bfin-parse.y"
5266     {
5267 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5268 	    {
5269 	      notethat ("LOGI2op: dregs <<= uimm5\n");
5270 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 7);
5271 	    }
5272 	  else
5273 	    return yyerror ("Dregs expected or const value error");
5274 	}
5275     break;
5276 
5277   case 172:
5278 #line 2782 "bfin-parse.y"
5279     {
5280 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5281 	    {
5282 	      notethat ("LOGI2op: dregs >>>= uimm5\n");
5283 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 5);
5284 	    }
5285 	  else
5286 	    return yyerror ("Dregs expected");
5287 	}
5288     break;
5289 
5290   case 173:
5291 #line 2795 "bfin-parse.y"
5292     {
5293 	  notethat ("CaCTRL: FLUSH [ pregs ]\n");
5294 	  if (IS_PREG ((yyvsp[-1].reg)))
5295 	    (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 2);
5296 	  else
5297 	    return yyerror ("Bad register(s) for FLUSH");
5298 	}
5299     break;
5300 
5301   case 174:
5302 #line 2804 "bfin-parse.y"
5303     {
5304 	  if (IS_PREG ((yyvsp[0].reg)))
5305 	    {
5306 	      notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
5307 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 2);
5308 	    }
5309 	  else
5310 	    return yyerror ("Bad register(s) for FLUSH");
5311 	}
5312     break;
5313 
5314   case 175:
5315 #line 2815 "bfin-parse.y"
5316     {
5317 	  if (IS_PREG ((yyvsp[-1].reg)))
5318 	    {
5319 	      notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
5320 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 1);
5321 	    }
5322 	  else
5323 	    return yyerror ("Bad register(s) for FLUSH");
5324 	}
5325     break;
5326 
5327   case 176:
5328 #line 2826 "bfin-parse.y"
5329     {
5330 	  if (IS_PREG ((yyvsp[0].reg)))
5331 	    {
5332 	      notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
5333 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 1);
5334 	    }
5335 	  else
5336 	    return yyerror ("Bad register(s) for FLUSH");
5337 	}
5338     break;
5339 
5340   case 177:
5341 #line 2838 "bfin-parse.y"
5342     {
5343 	  if (IS_PREG ((yyvsp[-1].reg)))
5344 	    {
5345 	      notethat ("CaCTRL: IFLUSH [ pregs ]\n");
5346 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 3);
5347 	    }
5348 	  else
5349 	    return yyerror ("Bad register(s) for FLUSH");
5350 	}
5351     break;
5352 
5353   case 178:
5354 #line 2849 "bfin-parse.y"
5355     {
5356 	  if (IS_PREG ((yyvsp[0].reg)))
5357 	    {
5358 	      notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
5359 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 3);
5360 	    }
5361 	  else
5362 	    return yyerror ("Bad register(s) for FLUSH");
5363 	}
5364     break;
5365 
5366   case 179:
5367 #line 2860 "bfin-parse.y"
5368     {
5369 	  if (IS_PREG ((yyvsp[-1].reg)))
5370 	    {
5371 	      notethat ("CaCTRL: PREFETCH [ pregs ]\n");
5372 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 0);
5373 	    }
5374 	  else
5375 	    return yyerror ("Bad register(s) for PREFETCH");
5376 	}
5377     break;
5378 
5379   case 180:
5380 #line 2871 "bfin-parse.y"
5381     {
5382 	  if (IS_PREG ((yyvsp[0].reg)))
5383 	    {
5384 	      notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
5385 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 0);
5386 	    }
5387 	  else
5388 	    return yyerror ("Bad register(s) for PREFETCH");
5389 	}
5390     break;
5391 
5392   case 181:
5393 #line 2885 "bfin-parse.y"
5394     {
5395 	  if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
5396 	    {
5397 	      notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
5398 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 2, 0, 1);
5399 	    }
5400 	  else
5401 	    return yyerror ("Register mismatch");
5402 	}
5403     break;
5404 
5405   case 182:
5406 #line 2897 "bfin-parse.y"
5407     {
5408 	  if (IS_PREG ((yyvsp[-5].reg)) && IS_RANGE(16, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 1) && IS_DREG ((yyvsp[0].reg)))
5409 	    {
5410 	      notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
5411 	      if ((yyvsp[-4].r0).r0)
5412 		neg_value ((yyvsp[-3].expr));
5413 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 2, 0, (yyvsp[-3].expr));
5414 	    }
5415 	  else
5416 	    return yyerror ("Register mismatch or const size wrong");
5417 	}
5418     break;
5419 
5420   case 183:
5421 #line 2912 "bfin-parse.y"
5422     {
5423 	  if (IS_PREG ((yyvsp[-5].reg)) && IS_URANGE (4, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 2) && IS_DREG ((yyvsp[0].reg)))
5424 	    {
5425 	      notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
5426 	      (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), (yyvsp[-3].expr), 1, 1);
5427 	    }
5428 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_RANGE(16, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 2) && IS_DREG ((yyvsp[0].reg)))
5429 	    {
5430 	      notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
5431 	      if ((yyvsp[-4].r0).r0)
5432 		neg_value ((yyvsp[-3].expr));
5433 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 1, 0, (yyvsp[-3].expr));
5434 	    }
5435 	  else
5436 	    return yyerror ("Bad register(s) or wrong constant size");
5437 	}
5438     break;
5439 
5440   case 184:
5441 #line 2931 "bfin-parse.y"
5442     {
5443 	  if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
5444 	    {
5445 	      notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
5446 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1, 0, 1);
5447 	    }
5448 	  else
5449 	    return yyerror ("Bad register(s) for STORE");
5450 	}
5451     break;
5452 
5453   case 185:
5454 #line 2942 "bfin-parse.y"
5455     {
5456 	  if (IS_IREG ((yyvsp[-4].reg)))
5457 	    {
5458 	      notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
5459 	      (yyval.instr) = DSPLDST (&(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5460 	    }
5461 	  else if ((yyvsp[-3].modcodes).x0 == 2 && IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
5462 	    {
5463 	      notethat ("LDSTpmod: W [ pregs <post_op>] = dregs_half\n");
5464 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[0].reg), &(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5465 
5466 	    }
5467 	  else
5468 	    return yyerror ("Bad register(s) for STORE");
5469 	}
5470     break;
5471 
5472   case 186:
5473 #line 2960 "bfin-parse.y"
5474     {
5475 	  Expr_Node *tmp = (yyvsp[-3].expr);
5476 	  int ispreg = IS_PREG ((yyvsp[0].reg));
5477 
5478 	  if (!IS_PREG ((yyvsp[-5].reg)))
5479 	    return yyerror ("Preg expected for indirect");
5480 
5481 	  if (!IS_DREG ((yyvsp[0].reg)) && !ispreg)
5482 	    return yyerror ("Bad source register for STORE");
5483 
5484 	  if ((yyvsp[-4].r0).r0)
5485 	    tmp = unary (Expr_Op_Type_NEG, tmp);
5486 
5487 	  if (in_range_p (tmp, 0, 63, 3))
5488 	    {
5489 	      notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
5490 	      (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, ispreg ? 3 : 0);
5491 	    }
5492 	  else if ((yyvsp[-5].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
5493 	    {
5494 	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
5495 	      tmp = unary (Expr_Op_Type_NEG, tmp);
5496 	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[0].reg), 1);
5497 	    }
5498 	  else if (in_range_p (tmp, -131072, 131071, 3))
5499 	    {
5500 	      notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
5501 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 0, ispreg ? 1: 0, tmp);
5502 	    }
5503 	  else
5504 	    return yyerror ("Displacement out of range for store");
5505 	}
5506     break;
5507 
5508   case 187:
5509 #line 2994 "bfin-parse.y"
5510     {
5511 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_URANGE (4, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 2))
5512 	    {
5513 	      notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n");
5514 	      (yyval.instr) = LDSTII (&(yyvsp[-4].reg), &(yyvsp[-8].reg), (yyvsp[-2].expr), 0, 1 << (yyvsp[0].r0).r0);
5515 	    }
5516 	  else if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_RANGE(16, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 2))
5517 	    {
5518 	      notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
5519 	      if ((yyvsp[-3].r0).r0)
5520 		neg_value ((yyvsp[-2].expr));
5521 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 1, (yyvsp[0].r0).r0, (yyvsp[-2].expr));
5522 	    }
5523 	  else
5524 	    return yyerror ("Bad register or constant for LOAD");
5525 	}
5526     break;
5527 
5528   case 188:
5529 #line 3012 "bfin-parse.y"
5530     {
5531 	  if (IS_IREG ((yyvsp[-2].reg)))
5532 	    {
5533 	      notethat ("dspLDST: dregs_half = W [ iregs ]\n");
5534 	      (yyval.instr) = DSPLDST(&(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), &(yyvsp[-6].reg), (yyvsp[-1].modcodes).x0, 0);
5535 	    }
5536 	  else if ((yyvsp[-1].modcodes).x0 == 2 && IS_DREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-2].reg)))
5537 	    {
5538 	      notethat ("LDSTpmod: dregs_half = W [ pregs ]\n");
5539 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-2].reg), &(yyvsp[-6].reg), &(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), 0);
5540 	    }
5541 	  else
5542 	    return yyerror ("Bad register or post_op for LOAD");
5543 	}
5544     break;
5545 
5546   case 189:
5547 #line 3029 "bfin-parse.y"
5548     {
5549 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)))
5550 	    {
5551 	      notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
5552 	      (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 1, (yyvsp[0].r0).r0, 0);
5553 	    }
5554 	  else
5555 	    return yyerror ("Bad register for LOAD");
5556 	}
5557     break;
5558 
5559   case 190:
5560 #line 3040 "bfin-parse.y"
5561     {
5562 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_PREG ((yyvsp[-2].reg)))
5563 	    {
5564 	      notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
5565 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[-8].reg), &(yyvsp[-2].reg), 3, (yyvsp[0].r0).r0);
5566 	    }
5567 	  else
5568 	    return yyerror ("Bad register for LOAD");
5569 	}
5570     break;
5571 
5572   case 191:
5573 #line 3051 "bfin-parse.y"
5574     {
5575 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
5576 	    {
5577 	      notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
5578 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-7].reg), &(yyvsp[-1].reg), 1 + IS_H ((yyvsp[-7].reg)), 0);
5579 	    }
5580 	  else
5581 	    return yyerror ("Bad register for LOAD");
5582 	}
5583     break;
5584 
5585   case 192:
5586 #line 3062 "bfin-parse.y"
5587     {
5588 	  if (IS_IREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
5589 	    {
5590 	      notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
5591 	      (yyval.instr) = DSPLDST(&(yyvsp[-4].reg), 0, &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5592 	    }
5593 	  else if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
5594 	    {
5595 	      notethat ("LDST: [ pregs <post_op> ] = dregs\n");
5596 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 0, 1);
5597 	    }
5598 	  else if (IS_PREG ((yyvsp[-4].reg)) && IS_PREG ((yyvsp[0].reg)))
5599 	    {
5600 	      notethat ("LDST: [ pregs <post_op> ] = pregs\n");
5601 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 1, 1);
5602 	    }
5603 	  else
5604 	    return yyerror ("Bad register for STORE");
5605 	}
5606     break;
5607 
5608   case 193:
5609 #line 3083 "bfin-parse.y"
5610     {
5611 	  if (! IS_DREG ((yyvsp[0].reg)))
5612 	    return yyerror ("Expected Dreg for last argument");
5613 
5614 	  if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
5615 	    {
5616 	      notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
5617 	      (yyval.instr) = DSPLDST(&(yyvsp[-5].reg), (yyvsp[-3].reg).regno & CODE_MASK, &(yyvsp[0].reg), 3, 1);
5618 	    }
5619 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5620 	    {
5621 	      notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
5622 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 0, 1);
5623 	    }
5624 	  else
5625 	    return yyerror ("Bad register for STORE");
5626 	}
5627     break;
5628 
5629   case 194:
5630 #line 3102 "bfin-parse.y"
5631     {
5632 	  if (!IS_DREG ((yyvsp[0].reg)))
5633 	    return yyerror ("Expect Dreg as last argument");
5634 	  if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5635 	    {
5636 	      notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
5637 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5638 	    }
5639 	  else
5640 	    return yyerror ("Bad register for STORE");
5641 	}
5642     break;
5643 
5644   case 195:
5645 #line 3115 "bfin-parse.y"
5646     {
5647 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_RANGE(16, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 1))
5648 	    {
5649 	      notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
5650 		       (yyvsp[0].r0).r0 ? 'X' : 'Z');
5651 	      if ((yyvsp[-3].r0).r0)
5652 		neg_value ((yyvsp[-2].expr));
5653 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 2, (yyvsp[0].r0).r0, (yyvsp[-2].expr));
5654 	    }
5655 	  else
5656 	    return yyerror ("Bad register or value for LOAD");
5657 	}
5658     break;
5659 
5660   case 196:
5661 #line 3129 "bfin-parse.y"
5662     {
5663 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)))
5664 	    {
5665 	      notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
5666 		       (yyvsp[0].r0).r0 ? 'X' : 'Z');
5667 	      (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 2, (yyvsp[0].r0).r0, 0);
5668 	    }
5669 	  else
5670 	    return yyerror ("Bad register for LOAD");
5671 	}
5672     break;
5673 
5674   case 197:
5675 #line 3141 "bfin-parse.y"
5676     {
5677 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_IREG ((yyvsp[-3].reg)) && IS_MREG ((yyvsp[-1].reg)))
5678 	    {
5679 	      notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
5680 	      (yyval.instr) = DSPLDST(&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, &(yyvsp[-6].reg), 3, 0);
5681 	    }
5682 	  else if (IS_DREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
5683 	    {
5684 	      notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
5685 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-6].reg), &(yyvsp[-1].reg), 0, 0);
5686 	    }
5687 	  else
5688 	    return yyerror ("Bad register for LOAD");
5689 	}
5690     break;
5691 
5692   case 198:
5693 #line 3157 "bfin-parse.y"
5694     {
5695 	  Expr_Node *tmp = (yyvsp[-1].expr);
5696 	  int ispreg = IS_PREG ((yyvsp[-6].reg));
5697 	  int isgot = IS_RELOC((yyvsp[-1].expr));
5698 
5699 	  if (!IS_PREG ((yyvsp[-3].reg)))
5700 	    return yyerror ("Preg expected for indirect");
5701 
5702 	  if (!IS_DREG ((yyvsp[-6].reg)) && !ispreg)
5703 	    return yyerror ("Bad destination register for LOAD");
5704 
5705 	  if ((yyvsp[-2].r0).r0)
5706 	    tmp = unary (Expr_Op_Type_NEG, tmp);
5707 
5708 	  if(isgot){
5709 	      notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
5710 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1: 0, tmp);
5711 	  }
5712 	  else if (in_range_p (tmp, 0, 63, 3))
5713 	    {
5714 	      notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
5715 	      (yyval.instr) = LDSTII (&(yyvsp[-3].reg), &(yyvsp[-6].reg), tmp, 0, ispreg ? 3 : 0);
5716 	    }
5717 	  else if ((yyvsp[-3].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
5718 	    {
5719 	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
5720 	      tmp = unary (Expr_Op_Type_NEG, tmp);
5721 	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[-6].reg), 0);
5722 	    }
5723 	  else if (in_range_p (tmp, -131072, 131071, 3))
5724 	    {
5725 	      notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
5726 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1: 0, tmp);
5727 
5728 	    }
5729 	  else
5730 	    return yyerror ("Displacement out of range for load");
5731 	}
5732     break;
5733 
5734   case 199:
5735 #line 3197 "bfin-parse.y"
5736     {
5737 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_IREG ((yyvsp[-2].reg)))
5738 	    {
5739 	      notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
5740 	      (yyval.instr) = DSPLDST (&(yyvsp[-2].reg), 0, &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0);
5741 	    }
5742 	  else if (IS_DREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-2].reg)))
5743 	    {
5744 	      notethat ("LDST: dregs = [ pregs <post_op> ]\n");
5745 	      (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 0, 0);
5746 	    }
5747 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-2].reg)))
5748 	    {
5749 	      if (REG_SAME ((yyvsp[-5].reg), (yyvsp[-2].reg)) && (yyvsp[-1].modcodes).x0 != 2)
5750 		return yyerror ("Pregs can't be same");
5751 
5752 	      notethat ("LDST: pregs = [ pregs <post_op> ]\n");
5753 	      (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 1, 0);
5754 	    }
5755 	  else if ((yyvsp[-2].reg).regno == REG_SP && IS_ALLREG ((yyvsp[-5].reg)) && (yyvsp[-1].modcodes).x0 == 0)
5756 	    {
5757 	      notethat ("PushPopReg: allregs = [ SP ++ ]\n");
5758 	      (yyval.instr) = PUSHPOPREG (&(yyvsp[-5].reg), 0);
5759 	    }
5760 	  else
5761 	    return yyerror ("Bad register or value");
5762 	}
5763     break;
5764 
5765   case 200:
5766 #line 3230 "bfin-parse.y"
5767     {
5768 	  bfin_equals ((yyvsp[-2].expr));
5769 	  (yyval.instr) = 0;
5770 	}
5771     break;
5772 
5773   case 201:
5774 #line 3238 "bfin-parse.y"
5775     {
5776 	  if ((yyvsp[-10].reg).regno != REG_SP)
5777 	    yyerror ("Stack Pointer expected");
5778 	  if ((yyvsp[-7].reg).regno == REG_R7
5779 	      && IN_RANGE ((yyvsp[-5].expr), 0, 7)
5780 	      && (yyvsp[-3].reg).regno == REG_P5
5781 	      && IN_RANGE ((yyvsp[-1].expr), 0, 5))
5782 	    {
5783 	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
5784 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-5].expr)), imm5 ((yyvsp[-1].expr)), 1, 1, 1);
5785 	    }
5786 	  else
5787 	    return yyerror ("Bad register for PushPopMultiple");
5788 	}
5789     break;
5790 
5791   case 202:
5792 #line 3254 "bfin-parse.y"
5793     {
5794 	  if ((yyvsp[-6].reg).regno != REG_SP)
5795 	    yyerror ("Stack Pointer expected");
5796 
5797 	  if ((yyvsp[-3].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-1].expr), 0, 7))
5798 	    {
5799 	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
5800 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-1].expr)), 0, 1, 0, 1);
5801 	    }
5802 	  else if ((yyvsp[-3].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-1].expr), 0, 6))
5803 	    {
5804 	      notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
5805 	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-1].expr)), 0, 1, 1);
5806 	    }
5807 	  else
5808 	    return yyerror ("Bad register for PushPopMultiple");
5809 	}
5810     break;
5811 
5812   case 203:
5813 #line 3273 "bfin-parse.y"
5814     {
5815 	  if ((yyvsp[0].reg).regno != REG_SP)
5816 	    yyerror ("Stack Pointer expected");
5817 	  if ((yyvsp[-9].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[-7].expr), 0, 7))
5818 	      && (yyvsp[-5].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[-3].expr), 0, 6)))
5819 	    {
5820 	      notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
5821 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-7].expr)), imm5 ((yyvsp[-3].expr)), 1, 1, 0);
5822 	    }
5823 	  else
5824 	    return yyerror ("Bad register range for PushPopMultiple");
5825 	}
5826     break;
5827 
5828   case 204:
5829 #line 3287 "bfin-parse.y"
5830     {
5831 	  if ((yyvsp[0].reg).regno != REG_SP)
5832 	    yyerror ("Stack Pointer expected");
5833 
5834 	  if ((yyvsp[-5].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-3].expr), 0, 7))
5835 	    {
5836 	      notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
5837 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-3].expr)), 0, 1, 0, 0);
5838 	    }
5839 	  else if ((yyvsp[-5].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-3].expr), 0, 6))
5840 	    {
5841 	      notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
5842 	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-3].expr)), 0, 1, 0);
5843 	    }
5844 	  else
5845 	    return yyerror ("Bad register range for PushPopMultiple");
5846 	}
5847     break;
5848 
5849   case 205:
5850 #line 3306 "bfin-parse.y"
5851     {
5852 	  if ((yyvsp[-2].reg).regno != REG_SP)
5853 	    yyerror ("Stack Pointer expected");
5854 
5855 	  if (IS_ALLREG ((yyvsp[0].reg)))
5856 	    {
5857 	      notethat ("PushPopReg: [ -- SP ] = allregs\n");
5858 	      (yyval.instr) = PUSHPOPREG (&(yyvsp[0].reg), 1);
5859 	    }
5860 	  else
5861 	    return yyerror ("Bad register for PushPopReg");
5862 	}
5863     break;
5864 
5865   case 206:
5866 #line 3322 "bfin-parse.y"
5867     {
5868 	  if (IS_URANGE (16, (yyvsp[0].expr), 0, 4))
5869 	    (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[0].expr)));
5870 	  else
5871 	    return yyerror ("Bad constant for LINK");
5872 	}
5873     break;
5874 
5875   case 207:
5876 #line 3330 "bfin-parse.y"
5877     {
5878 		notethat ("linkage: UNLINK\n");
5879 		(yyval.instr) = LINKAGE (1, 0);
5880 	}
5881     break;
5882 
5883   case 208:
5884 #line 3339 "bfin-parse.y"
5885     {
5886 	  if (IS_PCREL4 ((yyvsp[-4].expr)) && IS_LPPCREL10 ((yyvsp[-2].expr)) && IS_CREG ((yyvsp[0].reg)))
5887 	    {
5888 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
5889 	      (yyval.instr) = LOOPSETUP ((yyvsp[-4].expr), &(yyvsp[0].reg), 0, (yyvsp[-2].expr), 0);
5890 	    }
5891 	  else
5892 	    return yyerror ("Bad register or values for LSETUP");
5893 
5894 	}
5895     break;
5896 
5897   case 209:
5898 #line 3350 "bfin-parse.y"
5899     {
5900 	  if (IS_PCREL4 ((yyvsp[-6].expr)) && IS_LPPCREL10 ((yyvsp[-4].expr))
5901 	      && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
5902 	    {
5903 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
5904 	      (yyval.instr) = LOOPSETUP ((yyvsp[-6].expr), &(yyvsp[-2].reg), 1, (yyvsp[-4].expr), &(yyvsp[0].reg));
5905 	    }
5906 	  else
5907 	    return yyerror ("Bad register or values for LSETUP");
5908 	}
5909     break;
5910 
5911   case 210:
5912 #line 3362 "bfin-parse.y"
5913     {
5914 	  if (IS_PCREL4 ((yyvsp[-8].expr)) && IS_LPPCREL10 ((yyvsp[-6].expr))
5915 	      && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg))
5916 	      && EXPR_VALUE ((yyvsp[0].expr)) == 1)
5917 	    {
5918 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
5919 	      (yyval.instr) = LOOPSETUP ((yyvsp[-8].expr), &(yyvsp[-4].reg), 3, (yyvsp[-6].expr), &(yyvsp[-2].reg));
5920 	    }
5921 	  else
5922 	    return yyerror ("Bad register or values for LSETUP");
5923 	}
5924     break;
5925 
5926   case 211:
5927 #line 3376 "bfin-parse.y"
5928     {
5929 	  if (!IS_RELOC ((yyvsp[-1].expr)))
5930 	    return yyerror ("Invalid expression in loop statement");
5931 	  if (!IS_CREG ((yyvsp[0].reg)))
5932             return yyerror ("Invalid loop counter register");
5933 	(yyval.instr) = bfin_gen_loop ((yyvsp[-1].expr), &(yyvsp[0].reg), 0, 0);
5934 	}
5935     break;
5936 
5937   case 212:
5938 #line 3384 "bfin-parse.y"
5939     {
5940 	  if (IS_RELOC ((yyvsp[-3].expr)) && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
5941 	    {
5942 	      notethat ("Loop: LOOP expr counters = pregs\n");
5943 	      (yyval.instr) = bfin_gen_loop ((yyvsp[-3].expr), &(yyvsp[-2].reg), 1, &(yyvsp[0].reg));
5944 	    }
5945 	  else
5946 	    return yyerror ("Bad register or values for LOOP");
5947 	}
5948     break;
5949 
5950   case 213:
5951 #line 3394 "bfin-parse.y"
5952     {
5953 	  if (IS_RELOC ((yyvsp[-5].expr)) && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 1)
5954 	    {
5955 	      notethat ("Loop: LOOP expr counters = pregs >> 1\n");
5956 	      (yyval.instr) = bfin_gen_loop ((yyvsp[-5].expr), &(yyvsp[-4].reg), 3, &(yyvsp[-2].reg));
5957 	    }
5958 	  else
5959 	    return yyerror ("Bad register or values for LOOP");
5960 	}
5961     break;
5962 
5963   case 214:
5964 #line 3406 "bfin-parse.y"
5965     {
5966 	  notethat ("pseudoDEBUG: DBG\n");
5967 	  (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
5968 	}
5969     break;
5970 
5971   case 215:
5972 #line 3411 "bfin-parse.y"
5973     {
5974 	  notethat ("pseudoDEBUG: DBG REG_A\n");
5975 	  (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[0].reg)), 0);
5976 	}
5977     break;
5978 
5979   case 216:
5980 #line 3416 "bfin-parse.y"
5981     {
5982 	  notethat ("pseudoDEBUG: DBG allregs\n");
5983 	  (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[0].reg).regno & CODE_MASK, (yyvsp[0].reg).regno & CLASS_MASK);
5984 	}
5985     break;
5986 
5987   case 217:
5988 #line 3422 "bfin-parse.y"
5989     {
5990 	  if (!IS_DREG ((yyvsp[-1].reg)))
5991 	    return yyerror ("Dregs expected");
5992 	  notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
5993 	  (yyval.instr) = bfin_gen_pseudodbg (3, 6, (yyvsp[-1].reg).regno & CODE_MASK);
5994 	}
5995     break;
5996 
5997   case 218:
5998 #line 3430 "bfin-parse.y"
5999     {
6000 	  notethat ("psedoDEBUG: DBGHALT\n");
6001 	  (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
6002 	}
6003     break;
6004 
6005   case 219:
6006 #line 3436 "bfin-parse.y"
6007     {
6008 	  notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n");
6009 	  (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[-3].reg)), &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6010 	}
6011     break;
6012 
6013   case 220:
6014 #line 3442 "bfin-parse.y"
6015     {
6016 	  notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n");
6017 	  (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6018 	}
6019     break;
6020 
6021   case 221:
6022 #line 3448 "bfin-parse.y"
6023     {
6024 	  notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n");
6025 	  (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6026 	}
6027     break;
6028 
6029   case 222:
6030 #line 3461 "bfin-parse.y"
6031     {
6032 	(yyval.reg) = (yyvsp[0].reg);
6033 	}
6034     break;
6035 
6036   case 223:
6037 #line 3465 "bfin-parse.y"
6038     {
6039 	(yyval.reg) = (yyvsp[0].reg);
6040 	}
6041     break;
6042 
6043   case 224:
6044 #line 3474 "bfin-parse.y"
6045     {
6046 	(yyval.mod).MM = 0;
6047 	(yyval.mod).mod = 0;
6048 	}
6049     break;
6050 
6051   case 225:
6052 #line 3479 "bfin-parse.y"
6053     {
6054 	(yyval.mod).MM = 1;
6055 	(yyval.mod).mod = (yyvsp[-1].value);
6056 	}
6057     break;
6058 
6059   case 226:
6060 #line 3484 "bfin-parse.y"
6061     {
6062 	(yyval.mod).MM = 1;
6063 	(yyval.mod).mod = (yyvsp[-3].value);
6064 	}
6065     break;
6066 
6067   case 227:
6068 #line 3489 "bfin-parse.y"
6069     {
6070 	(yyval.mod).MM = 0;
6071 	(yyval.mod).mod = (yyvsp[-1].value);
6072 	}
6073     break;
6074 
6075   case 228:
6076 #line 3494 "bfin-parse.y"
6077     {
6078 	(yyval.mod).MM = 1;
6079 	(yyval.mod).mod = 0;
6080 	}
6081     break;
6082 
6083   case 229:
6084 #line 3501 "bfin-parse.y"
6085     {
6086 	(yyval.r0).r0 = 1;
6087 	}
6088     break;
6089 
6090   case 230:
6091 #line 3505 "bfin-parse.y"
6092     {
6093 	(yyval.r0).r0 = 0;
6094 	}
6095     break;
6096 
6097   case 231:
6098 #line 3511 "bfin-parse.y"
6099     {
6100 	(yyval.modcodes).s0 = 0;
6101 	(yyval.modcodes).x0 = 0;
6102 	}
6103     break;
6104 
6105   case 232:
6106 #line 3516 "bfin-parse.y"
6107     {
6108 	(yyval.modcodes).s0 = 1;
6109 	(yyval.modcodes).x0 = 0;
6110 	}
6111     break;
6112 
6113   case 233:
6114 #line 3521 "bfin-parse.y"
6115     {
6116 	(yyval.modcodes).s0 = 0;
6117 	(yyval.modcodes).x0 = 1;
6118 	}
6119     break;
6120 
6121   case 234:
6122 #line 3526 "bfin-parse.y"
6123     {
6124 	(yyval.modcodes).s0 = 1;
6125 	(yyval.modcodes).x0 = 1;
6126 	}
6127     break;
6128 
6129   case 235:
6130 #line 3534 "bfin-parse.y"
6131     {
6132 	(yyval.r0).r0 = 1;
6133 	}
6134     break;
6135 
6136   case 236:
6137 #line 3538 "bfin-parse.y"
6138     {
6139 	(yyval.r0).r0 = 0;
6140 	}
6141     break;
6142 
6143   case 237:
6144 #line 3544 "bfin-parse.y"
6145     {
6146 	(yyval.modcodes).s0 = 0;
6147 	(yyval.modcodes).x0 = 0;
6148 	}
6149     break;
6150 
6151   case 238:
6152 #line 3549 "bfin-parse.y"
6153     {
6154 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6155 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6156 	}
6157     break;
6158 
6159   case 239:
6160 #line 3556 "bfin-parse.y"
6161     {
6162 	(yyval.modcodes).s0 = 0;
6163 	(yyval.modcodes).x0 = 0;
6164 	(yyval.modcodes).aop = 0;
6165 	}
6166     break;
6167 
6168   case 240:
6169 #line 3562 "bfin-parse.y"
6170     {
6171 	(yyval.modcodes).s0 = 0;
6172 	(yyval.modcodes).x0 = 0;
6173 	(yyval.modcodes).aop = 1;
6174 	}
6175     break;
6176 
6177   case 241:
6178 #line 3568 "bfin-parse.y"
6179     {
6180 	(yyval.modcodes).s0 = 1;
6181 	(yyval.modcodes).x0 = 0;
6182 	(yyval.modcodes).aop = 1;
6183 	}
6184     break;
6185 
6186   case 242:
6187 #line 3576 "bfin-parse.y"
6188     {
6189 	(yyval.modcodes).r0 = 0;
6190 	(yyval.modcodes).s0 = 0;
6191 	(yyval.modcodes).x0 = 0;
6192 	}
6193     break;
6194 
6195   case 243:
6196 #line 3582 "bfin-parse.y"
6197     {
6198 	(yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6199 	(yyval.modcodes).s0 = 0;
6200 	(yyval.modcodes).x0 = 0;
6201 	}
6202     break;
6203 
6204   case 244:
6205 #line 3588 "bfin-parse.y"
6206     {
6207 	(yyval.modcodes).r0 = 0;
6208 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6209 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6210 	}
6211     break;
6212 
6213   case 245:
6214 #line 3594 "bfin-parse.y"
6215     {
6216 	(yyval.modcodes).r0 = 2 + (yyvsp[-3].r0).r0;
6217 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6218 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6219 	}
6220     break;
6221 
6222   case 246:
6223 #line 3600 "bfin-parse.y"
6224     {
6225 	(yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6226 	(yyval.modcodes).s0 = (yyvsp[-3].modcodes).s0;
6227 	(yyval.modcodes).x0 = (yyvsp[-3].modcodes).x0;
6228 	}
6229     break;
6230 
6231   case 247:
6232 #line 3608 "bfin-parse.y"
6233     {
6234 	(yyval.r0).r0 = 0;
6235 	}
6236     break;
6237 
6238   case 248:
6239 #line 3612 "bfin-parse.y"
6240     {
6241 	(yyval.r0).r0 = 0;
6242 	}
6243     break;
6244 
6245   case 249:
6246 #line 3616 "bfin-parse.y"
6247     {
6248 	(yyval.r0).r0 = 1;
6249 	}
6250     break;
6251 
6252   case 250:
6253 #line 3622 "bfin-parse.y"
6254     {
6255 	(yyval.r0).r0 = 0;
6256 	}
6257     break;
6258 
6259   case 251:
6260 #line 3626 "bfin-parse.y"
6261     {
6262 	(yyval.r0).r0 = 0;
6263 	}
6264     break;
6265 
6266   case 252:
6267 #line 3630 "bfin-parse.y"
6268     {
6269 	(yyval.r0).r0 = 1;
6270 	}
6271     break;
6272 
6273   case 253:
6274 #line 3636 "bfin-parse.y"
6275     {
6276 	(yyval.modcodes).r0 = 0;
6277 	(yyval.modcodes).s0 = 0;
6278 	(yyval.modcodes).aop = 0;
6279 	}
6280     break;
6281 
6282   case 254:
6283 #line 3642 "bfin-parse.y"
6284     {
6285 	(yyval.modcodes).r0 = 0;
6286 	(yyval.modcodes).s0 = 0;
6287 	(yyval.modcodes).aop = 3;
6288 	}
6289     break;
6290 
6291   case 255:
6292 #line 3648 "bfin-parse.y"
6293     {
6294 	(yyval.modcodes).r0 = 0;
6295 	(yyval.modcodes).s0 = 1;
6296 	(yyval.modcodes).aop = 3;
6297 	}
6298     break;
6299 
6300   case 256:
6301 #line 3654 "bfin-parse.y"
6302     {
6303 	(yyval.modcodes).r0 = 1;
6304 	(yyval.modcodes).s0 = 0;
6305 	(yyval.modcodes).aop = 3;
6306 	}
6307     break;
6308 
6309   case 257:
6310 #line 3660 "bfin-parse.y"
6311     {
6312 	(yyval.modcodes).r0 = 1;
6313 	(yyval.modcodes).s0 = 1;
6314 	}
6315     break;
6316 
6317   case 258:
6318 #line 3665 "bfin-parse.y"
6319     {
6320 	(yyval.modcodes).r0 = 1;
6321 	(yyval.modcodes).s0 = 1;
6322 	}
6323     break;
6324 
6325   case 259:
6326 #line 3672 "bfin-parse.y"
6327     {
6328 	(yyval.r0).r0 = 0;
6329 	}
6330     break;
6331 
6332   case 260:
6333 #line 3676 "bfin-parse.y"
6334     {
6335 	(yyval.r0).r0 = 1;
6336 	}
6337     break;
6338 
6339   case 261:
6340 #line 3682 "bfin-parse.y"
6341     {
6342 	(yyval.modcodes).s0 = 0;
6343 	}
6344     break;
6345 
6346   case 262:
6347 #line 3686 "bfin-parse.y"
6348     {
6349 	(yyval.modcodes).s0 = 1;
6350 	}
6351     break;
6352 
6353   case 263:
6354 #line 3693 "bfin-parse.y"
6355     {
6356 	(yyval.r0).r0 = 1;
6357 	}
6358     break;
6359 
6360   case 264:
6361 #line 3697 "bfin-parse.y"
6362     {
6363 	(yyval.r0).r0 = 0;
6364 	}
6365     break;
6366 
6367   case 265:
6368 #line 3701 "bfin-parse.y"
6369     {
6370 	(yyval.r0).r0 = 3;
6371 	}
6372     break;
6373 
6374   case 266:
6375 #line 3705 "bfin-parse.y"
6376     {
6377 	(yyval.r0).r0 = 2;
6378 	}
6379     break;
6380 
6381   case 267:
6382 #line 3711 "bfin-parse.y"
6383     {
6384 	(yyval.r0).r0 = 0;
6385 	}
6386     break;
6387 
6388   case 268:
6389 #line 3715 "bfin-parse.y"
6390     {
6391 	(yyval.r0).r0 = 1;
6392 	}
6393     break;
6394 
6395   case 269:
6396 #line 3722 "bfin-parse.y"
6397     {
6398 	(yyval.modcodes).r0 = 0;
6399 	(yyval.modcodes).s0 = 1;
6400 	}
6401     break;
6402 
6403   case 270:
6404 #line 3727 "bfin-parse.y"
6405     {
6406 	if ((yyvsp[-1].value) != M_T)
6407 	  return yyerror ("Bad modifier");
6408 	(yyval.modcodes).r0 = 1;
6409 	(yyval.modcodes).s0 = 0;
6410 	}
6411     break;
6412 
6413   case 271:
6414 #line 3734 "bfin-parse.y"
6415     {
6416 	if ((yyvsp[-3].value) != M_T)
6417 	  return yyerror ("Bad modifier");
6418 	(yyval.modcodes).r0 = 1;
6419 	(yyval.modcodes).s0 = 1;
6420 	}
6421     break;
6422 
6423   case 272:
6424 #line 3741 "bfin-parse.y"
6425     {
6426 	if ((yyvsp[-1].value) != M_T)
6427 	  return yyerror ("Bad modifier");
6428 	(yyval.modcodes).r0 = 1;
6429 	(yyval.modcodes).s0 = 1;
6430 	}
6431     break;
6432 
6433   case 273:
6434 #line 3753 "bfin-parse.y"
6435     {
6436 	(yyval.r0).r0 = 0;
6437 	}
6438     break;
6439 
6440   case 274:
6441 #line 3757 "bfin-parse.y"
6442     {
6443 	(yyval.r0).r0 = 1;
6444 	}
6445     break;
6446 
6447   case 275:
6448 #line 3761 "bfin-parse.y"
6449     {
6450 	(yyval.r0).r0 = 2;
6451 	}
6452     break;
6453 
6454   case 276:
6455 #line 3767 "bfin-parse.y"
6456     {
6457 	(yyval.r0).r0 = 0;
6458 	}
6459     break;
6460 
6461   case 277:
6462 #line 3771 "bfin-parse.y"
6463     {
6464 	  if ((yyvsp[-1].value) == M_W32)
6465 	    (yyval.r0).r0 = 1;
6466 	  else
6467 	    return yyerror ("Only (W32) allowed");
6468 	}
6469     break;
6470 
6471   case 278:
6472 #line 3780 "bfin-parse.y"
6473     {
6474 	(yyval.r0).r0 = 1;
6475 	}
6476     break;
6477 
6478   case 279:
6479 #line 3784 "bfin-parse.y"
6480     {
6481 	  if ((yyvsp[-1].value) == M_IU)
6482 	    (yyval.r0).r0 = 3;
6483 	  else
6484 	    return yyerror ("(IU) expected");
6485 	}
6486     break;
6487 
6488   case 280:
6489 #line 3793 "bfin-parse.y"
6490     {
6491 	(yyval.reg) = (yyvsp[-1].reg);
6492 	}
6493     break;
6494 
6495   case 281:
6496 #line 3799 "bfin-parse.y"
6497     {
6498 	(yyval.reg) = (yyvsp[-2].reg);
6499 	}
6500     break;
6501 
6502   case 282:
6503 #line 3808 "bfin-parse.y"
6504     {
6505 	(yyval.r0).r0 = 1;
6506 	}
6507     break;
6508 
6509   case 283:
6510 #line 3812 "bfin-parse.y"
6511     {
6512 	(yyval.r0).r0 = 0;
6513 	}
6514     break;
6515 
6516   case 284:
6517 #line 3819 "bfin-parse.y"
6518     {
6519 	(yyval.r0).r0 = 0;
6520 	}
6521     break;
6522 
6523   case 285:
6524 #line 3823 "bfin-parse.y"
6525     {
6526 	(yyval.r0).r0 = 1;
6527 	}
6528     break;
6529 
6530   case 286:
6531 #line 3827 "bfin-parse.y"
6532     {
6533 	(yyval.r0).r0 = 2;
6534 	}
6535     break;
6536 
6537   case 287:
6538 #line 3831 "bfin-parse.y"
6539     {
6540 	(yyval.r0).r0 = 3;
6541 	}
6542     break;
6543 
6544   case 288:
6545 #line 3838 "bfin-parse.y"
6546     {
6547 	(yyval.r0).r0 = 0;
6548 	}
6549     break;
6550 
6551   case 289:
6552 #line 3842 "bfin-parse.y"
6553     {
6554 	(yyval.r0).r0 = 1;
6555 	}
6556     break;
6557 
6558   case 290:
6559 #line 3849 "bfin-parse.y"
6560     {
6561 	  (yyval.modcodes).r0 = 1;	/* HL.  */
6562 	  (yyval.modcodes).s0 = 0;	/* s.  */
6563 	  (yyval.modcodes).x0 = 0;	/* x.  */
6564 	  (yyval.modcodes).aop = 0;	/* aop.  */
6565 	}
6566     break;
6567 
6568   case 291:
6569 #line 3857 "bfin-parse.y"
6570     {
6571 	  (yyval.modcodes).r0 = 1;	/* HL.  */
6572 	  (yyval.modcodes).s0 = 0;	/* s.  */
6573 	  (yyval.modcodes).x0 = 0;	/* x.  */
6574 	  (yyval.modcodes).aop = 1;	/* aop.  */
6575 	}
6576     break;
6577 
6578   case 292:
6579 #line 3865 "bfin-parse.y"
6580     {
6581 	  (yyval.modcodes).r0 = 0;	/* HL.  */
6582 	  (yyval.modcodes).s0 = 0;	/* s.  */
6583 	  (yyval.modcodes).x0 = 0;	/* x.  */
6584 	  (yyval.modcodes).aop = 0;	/* aop.  */
6585 	}
6586     break;
6587 
6588   case 293:
6589 #line 3873 "bfin-parse.y"
6590     {
6591 	  (yyval.modcodes).r0 = 0;	/* HL.  */
6592 	  (yyval.modcodes).s0 = 0;	/* s.  */
6593 	  (yyval.modcodes).x0 = 0;	/* x.  */
6594 	  (yyval.modcodes).aop = 1;
6595 	}
6596     break;
6597 
6598   case 294:
6599 #line 3881 "bfin-parse.y"
6600     {
6601 	  (yyval.modcodes).r0 = 1;	/* HL.  */
6602 	  (yyval.modcodes).s0 = 1;	/* s.  */
6603 	  (yyval.modcodes).x0 = 0;	/* x.  */
6604 	  (yyval.modcodes).aop = 0;	/* aop.  */
6605 	}
6606     break;
6607 
6608   case 295:
6609 #line 3888 "bfin-parse.y"
6610     {
6611 	  (yyval.modcodes).r0 = 1;	/* HL.  */
6612 	  (yyval.modcodes).s0 = 1;	/* s.  */
6613 	  (yyval.modcodes).x0 = 0;	/* x.  */
6614 	  (yyval.modcodes).aop = 1;	/* aop.  */
6615 	}
6616     break;
6617 
6618   case 296:
6619 #line 3895 "bfin-parse.y"
6620     {
6621 	  (yyval.modcodes).r0 = 0;	/* HL.  */
6622 	  (yyval.modcodes).s0 = 1;	/* s.  */
6623 	  (yyval.modcodes).x0 = 0;	/* x.  */
6624 	  (yyval.modcodes).aop = 0;	/* aop.  */
6625 	}
6626     break;
6627 
6628   case 297:
6629 #line 3903 "bfin-parse.y"
6630     {
6631 	  (yyval.modcodes).r0 = 0;	/* HL.  */
6632 	  (yyval.modcodes).s0 = 1;	/* s.  */
6633 	  (yyval.modcodes).x0 = 0;	/* x.  */
6634 	  (yyval.modcodes).aop = 1;	/* aop.  */
6635 	}
6636     break;
6637 
6638   case 298:
6639 #line 3913 "bfin-parse.y"
6640     {
6641 	  (yyval.modcodes).s0 = 0;	/* s.  */
6642 	  (yyval.modcodes).x0 = 0;	/* HL.  */
6643 	}
6644     break;
6645 
6646   case 299:
6647 #line 3918 "bfin-parse.y"
6648     {
6649 	  (yyval.modcodes).s0 = 0;	/* s.  */
6650 	  (yyval.modcodes).x0 = 1;	/* HL.  */
6651 	}
6652     break;
6653 
6654   case 300:
6655 #line 3923 "bfin-parse.y"
6656     {
6657 	  (yyval.modcodes).s0 = 1;	/* s.  */
6658 	  (yyval.modcodes).x0 = 0;	/* HL.  */
6659 	}
6660     break;
6661 
6662   case 301:
6663 #line 3928 "bfin-parse.y"
6664     {
6665 	  (yyval.modcodes).s0 = 1;	/* s.  */
6666 	  (yyval.modcodes).x0 = 1;	/* HL.  */
6667 	}
6668     break;
6669 
6670   case 302:
6671 #line 3935 "bfin-parse.y"
6672     {
6673 	(yyval.modcodes).x0 = 2;
6674 	}
6675     break;
6676 
6677   case 303:
6678 #line 3939 "bfin-parse.y"
6679     {
6680 	(yyval.modcodes).x0 = 0;
6681 	}
6682     break;
6683 
6684   case 304:
6685 #line 3943 "bfin-parse.y"
6686     {
6687 	(yyval.modcodes).x0 = 1;
6688 	}
6689     break;
6690 
6691   case 305:
6692 #line 3952 "bfin-parse.y"
6693     {
6694 	(yyval.reg) = (yyvsp[-1].reg);
6695 	}
6696     break;
6697 
6698   case 306:
6699 #line 3959 "bfin-parse.y"
6700     {
6701 	(yyval.reg) = (yyvsp[-1].reg);
6702 	}
6703     break;
6704 
6705   case 307:
6706 #line 3966 "bfin-parse.y"
6707     {
6708 	(yyval.reg) = (yyvsp[-1].reg);
6709 	}
6710     break;
6711 
6712   case 308:
6713 #line 3973 "bfin-parse.y"
6714     {
6715 	  (yyval.macfunc).w = 1;
6716           (yyval.macfunc).P = 1;
6717           (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
6718 	  (yyval.macfunc).op = 3;
6719           (yyval.macfunc).dst = (yyvsp[-2].reg);
6720 	  (yyval.macfunc).s0.regno = 0;
6721           (yyval.macfunc).s1.regno = 0;
6722 
6723 	  if (IS_A1 ((yyvsp[0].reg)) && IS_EVEN ((yyvsp[-2].reg)))
6724 	    return yyerror ("Cannot move A1 to even register");
6725 	  else if (!IS_A1 ((yyvsp[0].reg)) && !IS_EVEN ((yyvsp[-2].reg)))
6726 	    return yyerror ("Cannot move A0 to odd register");
6727 	}
6728     break;
6729 
6730   case 309:
6731 #line 3988 "bfin-parse.y"
6732     {
6733 	  (yyval.macfunc) = (yyvsp[0].macfunc);
6734 	  (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
6735 	  (yyval.macfunc).dst.regno = 0;
6736 	}
6737     break;
6738 
6739   case 310:
6740 #line 3994 "bfin-parse.y"
6741     {
6742 	  (yyval.macfunc) = (yyvsp[-1].macfunc);
6743 	  (yyval.macfunc).w = 1;
6744           (yyval.macfunc).P = 1;
6745           (yyval.macfunc).dst = (yyvsp[-4].reg);
6746 	}
6747     break;
6748 
6749   case 311:
6750 #line 4002 "bfin-parse.y"
6751     {
6752 	  (yyval.macfunc) = (yyvsp[-1].macfunc);
6753 	  (yyval.macfunc).w = 1;
6754 	  (yyval.macfunc).P = 0;
6755           (yyval.macfunc).dst = (yyvsp[-4].reg);
6756 	}
6757     break;
6758 
6759   case 312:
6760 #line 4010 "bfin-parse.y"
6761     {
6762 	  (yyval.macfunc).w = 1;
6763 	  (yyval.macfunc).P = 0;
6764 	  (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
6765 	  (yyval.macfunc).op = 3;
6766           (yyval.macfunc).dst = (yyvsp[-2].reg);
6767 	  (yyval.macfunc).s0.regno = 0;
6768           (yyval.macfunc).s1.regno = 0;
6769 
6770 	  if (IS_A1 ((yyvsp[0].reg)) && !IS_H ((yyvsp[-2].reg)))
6771 	    return yyerror ("Cannot move A1 to low half of register");
6772 	  else if (!IS_A1 ((yyvsp[0].reg)) && IS_H ((yyvsp[-2].reg)))
6773 	    return yyerror ("Cannot move A0 to high half of register");
6774 	}
6775     break;
6776 
6777   case 313:
6778 #line 4028 "bfin-parse.y"
6779     {
6780 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
6781 	  (yyval.macfunc).op = 0;
6782 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
6783 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
6784 	}
6785     break;
6786 
6787   case 314:
6788 #line 4035 "bfin-parse.y"
6789     {
6790 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
6791 	  (yyval.macfunc).op = 1;
6792 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
6793 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
6794 	}
6795     break;
6796 
6797   case 315:
6798 #line 4042 "bfin-parse.y"
6799     {
6800 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
6801 	  (yyval.macfunc).op = 2;
6802 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
6803 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
6804 	}
6805     break;
6806 
6807   case 316:
6808 #line 4052 "bfin-parse.y"
6809     {
6810 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
6811 	    {
6812 	      (yyval.macfunc).s0 = (yyvsp[-2].reg);
6813               (yyval.macfunc).s1 = (yyvsp[0].reg);
6814 	    }
6815 	  else
6816 	    return yyerror ("Dregs expected");
6817 	}
6818     break;
6819 
6820   case 317:
6821 #line 4065 "bfin-parse.y"
6822     {
6823 	(yyval.r0).r0 = 0;
6824 	}
6825     break;
6826 
6827   case 318:
6828 #line 4069 "bfin-parse.y"
6829     {
6830 	(yyval.r0).r0 = 1;
6831 	}
6832     break;
6833 
6834   case 319:
6835 #line 4073 "bfin-parse.y"
6836     {
6837 	(yyval.r0).r0 = 2;
6838 	}
6839     break;
6840 
6841   case 320:
6842 #line 4077 "bfin-parse.y"
6843     {
6844 	(yyval.r0).r0 = 3;
6845 	}
6846     break;
6847 
6848   case 321:
6849 #line 4084 "bfin-parse.y"
6850     {
6851 	(yyval.modcodes).r0 = (yyvsp[0].reg).regno;
6852 	(yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
6853 	(yyval.modcodes).s0 = 0;
6854 	}
6855     break;
6856 
6857   case 322:
6858 #line 4090 "bfin-parse.y"
6859     {
6860 	(yyval.modcodes).r0 = 0x18;
6861 	(yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
6862 	(yyval.modcodes).s0 = 0;
6863 	}
6864     break;
6865 
6866   case 323:
6867 #line 4096 "bfin-parse.y"
6868     {
6869 	(yyval.modcodes).r0 = (yyvsp[-2].reg).regno;
6870 	(yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
6871 	(yyval.modcodes).s0 = 1;
6872 	}
6873     break;
6874 
6875   case 324:
6876 #line 4102 "bfin-parse.y"
6877     {
6878 	(yyval.modcodes).r0 = 0x18;
6879 	(yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
6880 	(yyval.modcodes).s0 = 1;
6881 	}
6882     break;
6883 
6884   case 325:
6885 #line 4112 "bfin-parse.y"
6886     {
6887 	Expr_Node_Value val;
6888 	val.s_value = S_GET_NAME((yyvsp[0].symbol));
6889 	(yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
6890 	}
6891     break;
6892 
6893   case 326:
6894 #line 4121 "bfin-parse.y"
6895     { (yyval.value) = BFD_RELOC_BFIN_GOT; }
6896     break;
6897 
6898   case 327:
6899 #line 4123 "bfin-parse.y"
6900     { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
6901     break;
6902 
6903   case 328:
6904 #line 4125 "bfin-parse.y"
6905     { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
6906     break;
6907 
6908   case 329:
6909 #line 4129 "bfin-parse.y"
6910     {
6911 	Expr_Node_Value val;
6912 	val.i_value = (yyvsp[0].value);
6913 	(yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[-2].expr), NULL);
6914 	}
6915     break;
6916 
6917   case 330:
6918 #line 4137 "bfin-parse.y"
6919     {
6920 	(yyval.expr) = (yyvsp[0].expr);
6921 	}
6922     break;
6923 
6924   case 331:
6925 #line 4141 "bfin-parse.y"
6926     {
6927 	(yyval.expr) = (yyvsp[0].expr);
6928 	}
6929     break;
6930 
6931   case 332:
6932 #line 4148 "bfin-parse.y"
6933     {
6934 	(yyval.expr) = (yyvsp[-2].expr);
6935 	}
6936     break;
6937 
6938   case 333:
6939 #line 4154 "bfin-parse.y"
6940     {
6941 	Expr_Node_Value val;
6942 	val.i_value = (yyvsp[0].value);
6943 	(yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
6944 	}
6945     break;
6946 
6947   case 334:
6948 #line 4160 "bfin-parse.y"
6949     {
6950 	(yyval.expr) = (yyvsp[0].expr);
6951 	}
6952     break;
6953 
6954   case 335:
6955 #line 4164 "bfin-parse.y"
6956     {
6957 	(yyval.expr) = (yyvsp[-1].expr);
6958 	}
6959     break;
6960 
6961   case 336:
6962 #line 4168 "bfin-parse.y"
6963     {
6964 	(yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[0].expr));
6965 	}
6966     break;
6967 
6968   case 337:
6969 #line 4172 "bfin-parse.y"
6970     {
6971 	(yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[0].expr));
6972 	}
6973     break;
6974 
6975   case 338:
6976 #line 4178 "bfin-parse.y"
6977     {
6978 	(yyval.expr) = (yyvsp[0].expr);
6979 	}
6980     break;
6981 
6982   case 339:
6983 #line 4184 "bfin-parse.y"
6984     {
6985 	(yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[-2].expr), (yyvsp[0].expr));
6986 	}
6987     break;
6988 
6989   case 340:
6990 #line 4188 "bfin-parse.y"
6991     {
6992 	(yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[-2].expr), (yyvsp[0].expr));
6993 	}
6994     break;
6995 
6996   case 341:
6997 #line 4192 "bfin-parse.y"
6998     {
6999 	(yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[-2].expr), (yyvsp[0].expr));
7000 	}
7001     break;
7002 
7003   case 342:
7004 #line 4196 "bfin-parse.y"
7005     {
7006 	(yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[-2].expr), (yyvsp[0].expr));
7007 	}
7008     break;
7009 
7010   case 343:
7011 #line 4200 "bfin-parse.y"
7012     {
7013 	(yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[-2].expr), (yyvsp[0].expr));
7014 	}
7015     break;
7016 
7017   case 344:
7018 #line 4204 "bfin-parse.y"
7019     {
7020 	(yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7021 	}
7022     break;
7023 
7024   case 345:
7025 #line 4208 "bfin-parse.y"
7026     {
7027 	(yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7028 	}
7029     break;
7030 
7031   case 346:
7032 #line 4212 "bfin-parse.y"
7033     {
7034 	(yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[-2].expr), (yyvsp[0].expr));
7035 	}
7036     break;
7037 
7038   case 347:
7039 #line 4216 "bfin-parse.y"
7040     {
7041 	(yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7042 	}
7043     break;
7044 
7045   case 348:
7046 #line 4220 "bfin-parse.y"
7047     {
7048 	(yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7049 	}
7050     break;
7051 
7052   case 349:
7053 #line 4224 "bfin-parse.y"
7054     {
7055 	(yyval.expr) = (yyvsp[0].expr);
7056 	}
7057     break;
7058 
7059 
7060       default: break;
7061     }
7062 
7063 /* Line 1126 of yacc.c.  */
7064 #line 7065 "bfin-parse.c"
7065 
7066   yyvsp -= yylen;
7067   yyssp -= yylen;
7068 
7069 
7070   YY_STACK_PRINT (yyss, yyssp);
7071 
7072   *++yyvsp = yyval;
7073 
7074 
7075   /* Now `shift' the result of the reduction.  Determine what state
7076      that goes to, based on the state we popped back to and the rule
7077      number reduced by.  */
7078 
7079   yyn = yyr1[yyn];
7080 
7081   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
7082   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
7083     yystate = yytable[yystate];
7084   else
7085     yystate = yydefgoto[yyn - YYNTOKENS];
7086 
7087   goto yynewstate;
7088 
7089 
7090 /*------------------------------------.
7091 | yyerrlab -- here on detecting error |
7092 `------------------------------------*/
7093 yyerrlab:
7094   /* If not already recovering from an error, report this error.  */
7095   if (!yyerrstatus)
7096     {
7097       ++yynerrs;
7098 #if YYERROR_VERBOSE
7099       yyn = yypact[yystate];
7100 
7101       if (YYPACT_NINF < yyn && yyn < YYLAST)
7102 	{
7103 	  int yytype = YYTRANSLATE (yychar);
7104 	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
7105 	  YYSIZE_T yysize = yysize0;
7106 	  YYSIZE_T yysize1;
7107 	  int yysize_overflow = 0;
7108 	  char *yymsg = 0;
7109 #	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
7110 	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
7111 	  int yyx;
7112 
7113 #if 0
7114 	  /* This is so xgettext sees the translatable formats that are
7115 	     constructed on the fly.  */
7116 	  YY_("syntax error, unexpected %s");
7117 	  YY_("syntax error, unexpected %s, expecting %s");
7118 	  YY_("syntax error, unexpected %s, expecting %s or %s");
7119 	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
7120 	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
7121 #endif
7122 	  char *yyfmt;
7123 	  char const *yyf;
7124 	  static char const yyunexpected[] = "syntax error, unexpected %s";
7125 	  static char const yyexpecting[] = ", expecting %s";
7126 	  static char const yyor[] = " or %s";
7127 	  char yyformat[sizeof yyunexpected
7128 			+ sizeof yyexpecting - 1
7129 			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
7130 			   * (sizeof yyor - 1))];
7131 	  char const *yyprefix = yyexpecting;
7132 
7133 	  /* Start YYX at -YYN if negative to avoid negative indexes in
7134 	     YYCHECK.  */
7135 	  int yyxbegin = yyn < 0 ? -yyn : 0;
7136 
7137 	  /* Stay within bounds of both yycheck and yytname.  */
7138 	  int yychecklim = YYLAST - yyn;
7139 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
7140 	  int yycount = 1;
7141 
7142 	  yyarg[0] = yytname[yytype];
7143 	  yyfmt = yystpcpy (yyformat, yyunexpected);
7144 
7145 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
7146 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
7147 	      {
7148 		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
7149 		  {
7150 		    yycount = 1;
7151 		    yysize = yysize0;
7152 		    yyformat[sizeof yyunexpected - 1] = '\0';
7153 		    break;
7154 		  }
7155 		yyarg[yycount++] = yytname[yyx];
7156 		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
7157 		yysize_overflow |= yysize1 < yysize;
7158 		yysize = yysize1;
7159 		yyfmt = yystpcpy (yyfmt, yyprefix);
7160 		yyprefix = yyor;
7161 	      }
7162 
7163 	  yyf = YY_(yyformat);
7164 	  yysize1 = yysize + yystrlen (yyf);
7165 	  yysize_overflow |= yysize1 < yysize;
7166 	  yysize = yysize1;
7167 
7168 	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
7169 	    yymsg = (char *) YYSTACK_ALLOC (yysize);
7170 	  if (yymsg)
7171 	    {
7172 	      /* Avoid sprintf, as that infringes on the user's name space.
7173 		 Don't have undefined behavior even if the translation
7174 		 produced a string with the wrong number of "%s"s.  */
7175 	      char *yyp = yymsg;
7176 	      int yyi = 0;
7177 	      while ((*yyp = *yyf))
7178 		{
7179 		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
7180 		    {
7181 		      yyp += yytnamerr (yyp, yyarg[yyi++]);
7182 		      yyf += 2;
7183 		    }
7184 		  else
7185 		    {
7186 		      yyp++;
7187 		      yyf++;
7188 		    }
7189 		}
7190 	      yyerror (yymsg);
7191 	      YYSTACK_FREE (yymsg);
7192 	    }
7193 	  else
7194 	    {
7195 	      yyerror (YY_("syntax error"));
7196 	      goto yyexhaustedlab;
7197 	    }
7198 	}
7199       else
7200 #endif /* YYERROR_VERBOSE */
7201 	yyerror (YY_("syntax error"));
7202     }
7203 
7204 
7205 
7206   if (yyerrstatus == 3)
7207     {
7208       /* If just tried and failed to reuse look-ahead token after an
7209 	 error, discard it.  */
7210 
7211       if (yychar <= YYEOF)
7212         {
7213 	  /* Return failure if at end of input.  */
7214 	  if (yychar == YYEOF)
7215 	    YYABORT;
7216         }
7217       else
7218 	{
7219 	  yydestruct ("Error: discarding", yytoken, &yylval);
7220 	  yychar = YYEMPTY;
7221 	}
7222     }
7223 
7224   /* Else will try to reuse look-ahead token after shifting the error
7225      token.  */
7226   goto yyerrlab1;
7227 
7228 
7229 /*---------------------------------------------------.
7230 | yyerrorlab -- error raised explicitly by YYERROR.  |
7231 `---------------------------------------------------*/
7232 yyerrorlab:
7233 
7234   /* Pacify compilers like GCC when the user code never invokes
7235      YYERROR and the label yyerrorlab therefore never appears in user
7236      code.  */
7237   if (0)
7238      goto yyerrorlab;
7239 
7240 yyvsp -= yylen;
7241   yyssp -= yylen;
7242   yystate = *yyssp;
7243   goto yyerrlab1;
7244 
7245 
7246 /*-------------------------------------------------------------.
7247 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
7248 `-------------------------------------------------------------*/
7249 yyerrlab1:
7250   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
7251 
7252   for (;;)
7253     {
7254       yyn = yypact[yystate];
7255       if (yyn != YYPACT_NINF)
7256 	{
7257 	  yyn += YYTERROR;
7258 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
7259 	    {
7260 	      yyn = yytable[yyn];
7261 	      if (0 < yyn)
7262 		break;
7263 	    }
7264 	}
7265 
7266       /* Pop the current state because it cannot handle the error token.  */
7267       if (yyssp == yyss)
7268 	YYABORT;
7269 
7270 
7271       yydestruct ("Error: popping", yystos[yystate], yyvsp);
7272       YYPOPSTACK;
7273       yystate = *yyssp;
7274       YY_STACK_PRINT (yyss, yyssp);
7275     }
7276 
7277   if (yyn == YYFINAL)
7278     YYACCEPT;
7279 
7280   *++yyvsp = yylval;
7281 
7282 
7283   /* Shift the error token. */
7284   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
7285 
7286   yystate = yyn;
7287   goto yynewstate;
7288 
7289 
7290 /*-------------------------------------.
7291 | yyacceptlab -- YYACCEPT comes here.  |
7292 `-------------------------------------*/
7293 yyacceptlab:
7294   yyresult = 0;
7295   goto yyreturn;
7296 
7297 /*-----------------------------------.
7298 | yyabortlab -- YYABORT comes here.  |
7299 `-----------------------------------*/
7300 yyabortlab:
7301   yyresult = 1;
7302   goto yyreturn;
7303 
7304 #ifndef yyoverflow
7305 /*-------------------------------------------------.
7306 | yyexhaustedlab -- memory exhaustion comes here.  |
7307 `-------------------------------------------------*/
7308 yyexhaustedlab:
7309   yyerror (YY_("memory exhausted"));
7310   yyresult = 2;
7311   /* Fall through.  */
7312 #endif
7313 
7314 yyreturn:
7315   if (yychar != YYEOF && yychar != YYEMPTY)
7316      yydestruct ("Cleanup: discarding lookahead",
7317 		 yytoken, &yylval);
7318   while (yyssp != yyss)
7319     {
7320       yydestruct ("Cleanup: popping",
7321 		  yystos[*yyssp], yyvsp);
7322       YYPOPSTACK;
7323     }
7324 #ifndef yyoverflow
7325   if (yyss != yyssa)
7326     YYSTACK_FREE (yyss);
7327 #endif
7328   return yyresult;
7329 }
7330 
7331 
7332 #line 4230 "bfin-parse.y"
7333 
7334 
7335 EXPR_T
7336 mkexpr (int x, SYMBOL_T s)
7337 {
7338   EXPR_T e = (EXPR_T) ALLOCATE (sizeof (struct expression_cell));
7339   e->value = x;
7340   EXPR_SYMBOL(e) = s;
7341   return e;
7342 }
7343 
7344 static int
7345 value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned)
7346 {
7347   long umax = (1L << sz) - 1;
7348   long min = -1L << (sz - 1);
7349   long max = (1L << (sz - 1)) - 1;
7350 
7351   long v = EXPR_VALUE (expr);
7352 
7353   if ((v % mul) != 0)
7354     {
7355       error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
7356       return 0;
7357     }
7358 
7359   v /= mul;
7360 
7361   if (sign)
7362     v = -v;
7363 
7364   if (issigned)
7365     {
7366       if (v >= min && v <= max) return 1;
7367 
7368 #ifdef DEBUG
7369       fprintf(stderr, "signed value %lx out of range\n", v * mul);
7370 #endif
7371       return 0;
7372     }
7373   if (v <= umax && v >= 0)
7374     return 1;
7375 #ifdef DEBUG
7376   fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
7377 #endif
7378   return 0;
7379 }
7380 
7381 /* Return the expression structure that allows symbol operations.
7382    If the left and right children are constants, do the operation.  */
7383 static Expr_Node *
7384 binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
7385 {
7386   if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
7387     {
7388       switch (op)
7389 	{
7390         case Expr_Op_Type_Add:
7391 	  x->value.i_value += y->value.i_value;
7392 	  break;
7393         case Expr_Op_Type_Sub:
7394 	  x->value.i_value -= y->value.i_value;
7395 	  break;
7396         case Expr_Op_Type_Mult:
7397 	  x->value.i_value *= y->value.i_value;
7398 	  break;
7399         case Expr_Op_Type_Div:
7400 	  if (y->value.i_value == 0)
7401 	    error ("Illegal Expression:  Division by zero.");
7402 	  else
7403 	    x->value.i_value /= y->value.i_value;
7404 	  break;
7405         case Expr_Op_Type_Mod:
7406 	  x->value.i_value %= y->value.i_value;
7407 	  break;
7408         case Expr_Op_Type_Lshift:
7409 	  x->value.i_value <<= y->value.i_value;
7410 	  break;
7411         case Expr_Op_Type_Rshift:
7412 	  x->value.i_value >>= y->value.i_value;
7413 	  break;
7414         case Expr_Op_Type_BAND:
7415 	  x->value.i_value &= y->value.i_value;
7416 	  break;
7417         case Expr_Op_Type_BOR:
7418 	  x->value.i_value |= y->value.i_value;
7419 	  break;
7420         case Expr_Op_Type_BXOR:
7421 	  x->value.i_value ^= y->value.i_value;
7422 	  break;
7423         case Expr_Op_Type_LAND:
7424 	  x->value.i_value = x->value.i_value && y->value.i_value;
7425 	  break;
7426         case Expr_Op_Type_LOR:
7427 	  x->value.i_value = x->value.i_value || y->value.i_value;
7428 	  break;
7429 
7430 	default:
7431 	  error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__);
7432 	}
7433       return x;
7434     }
7435   else
7436     {
7437     /* Create a new expression structure.  */
7438     Expr_Node_Value val;
7439     val.op_value = op;
7440     return Expr_Node_Create (Expr_Node_Binop, val, x, y);
7441   }
7442 }
7443 
7444 static Expr_Node *
7445 unary (Expr_Op_Type op, Expr_Node *x)
7446 {
7447   if (x->type == Expr_Node_Constant)
7448     {
7449       switch (op)
7450 	{
7451 	case Expr_Op_Type_NEG:
7452 	  x->value.i_value = -x->value.i_value;
7453 	  break;
7454 	case Expr_Op_Type_COMP:
7455 	  x->value.i_value = ~x->value.i_value;
7456 	  break;
7457 	default:
7458 	  error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__);
7459 	}
7460       return x;
7461     }
7462   else
7463     {
7464       /* Create a new expression structure.  */
7465       Expr_Node_Value val;
7466       val.op_value = op;
7467       return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
7468     }
7469 }
7470 
7471 int debug_codeselection = 0;
7472 static void
7473 notethat (char *format, ...)
7474 {
7475   va_list ap;
7476   va_start (ap, format);
7477   if (debug_codeselection)
7478     {
7479       vfprintf (errorf, format, ap);
7480     }
7481   va_end (ap);
7482 }
7483 
7484 #ifdef TEST
7485 main (int argc, char **argv)
7486 {
7487   yyparse();
7488 }
7489 #endif
7490 
7491 
7492