Home | History | Annotate | Line # | Download | only in config
bfin-parse.c revision 1.1
      1  1.1  christos /* A Bison parser, made by GNU Bison 3.8.2.  */
      2  1.1  christos 
      3  1.1  christos /* Bison implementation for Yacc-like parsers in C
      4  1.1  christos 
      5  1.1  christos    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
      6  1.1  christos    Inc.
      7  1.1  christos 
      8  1.1  christos    This program is free software: you can redistribute it and/or modify
      9  1.1  christos    it under the terms of the GNU General Public License as published by
     10  1.1  christos    the Free Software Foundation, either version 3 of the License, or
     11  1.1  christos    (at your option) any later version.
     12  1.1  christos 
     13  1.1  christos    This program is distributed in the hope that it will be useful,
     14  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  1.1  christos    GNU General Public License for more details.
     17  1.1  christos 
     18  1.1  christos    You should have received a copy of the GNU General Public License
     19  1.1  christos    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
     20  1.1  christos 
     21  1.1  christos /* As a special exception, you may create a larger work that contains
     22  1.1  christos    part or all of the Bison parser skeleton and distribute that work
     23  1.1  christos    under terms of your choice, so long as that work isn't itself a
     24  1.1  christos    parser generator using the skeleton or a modified version thereof
     25  1.1  christos    as a parser skeleton.  Alternatively, if you modify or redistribute
     26  1.1  christos    the parser skeleton itself, you may (at your option) remove this
     27  1.1  christos    special exception, which will cause the skeleton and the resulting
     28  1.1  christos    Bison output files to be licensed under the GNU General Public
     29  1.1  christos    License without this special exception.
     30  1.1  christos 
     31  1.1  christos    This special exception was added by the Free Software Foundation in
     32  1.1  christos    version 2.2 of Bison.  */
     33  1.1  christos 
     34  1.1  christos /* C LALR(1) parser skeleton written by Richard Stallman, by
     35  1.1  christos    simplifying the original so-called "semantic" parser.  */
     36  1.1  christos 
     37  1.1  christos /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
     38  1.1  christos    especially those whose name start with YY_ or yy_.  They are
     39  1.1  christos    private implementation details that can be changed or removed.  */
     40  1.1  christos 
     41  1.1  christos /* All symbols defined below should begin with yy or YY, to avoid
     42  1.1  christos    infringing on user name space.  This should be done even for local
     43  1.1  christos    variables, as they might otherwise be expanded by user macros.
     44  1.1  christos    There are some unavoidable exceptions within include files to
     45  1.1  christos    define necessary library symbols; they are noted "INFRINGES ON
     46  1.1  christos    USER NAME SPACE" below.  */
     47  1.1  christos 
     48  1.1  christos /* Identify Bison output, and Bison version.  */
     49  1.1  christos #define YYBISON 30802
     50  1.1  christos 
     51  1.1  christos /* Bison version string.  */
     52  1.1  christos #define YYBISON_VERSION "3.8.2"
     53  1.1  christos 
     54  1.1  christos /* Skeleton name.  */
     55  1.1  christos #define YYSKELETON_NAME "yacc.c"
     56  1.1  christos 
     57  1.1  christos /* Pure parsers.  */
     58  1.1  christos #define YYPURE 0
     59  1.1  christos 
     60  1.1  christos /* Push parsers.  */
     61  1.1  christos #define YYPUSH 0
     62  1.1  christos 
     63  1.1  christos /* Pull parsers.  */
     64  1.1  christos #define YYPULL 1
     65  1.1  christos 
     66  1.1  christos 
     67  1.1  christos 
     68  1.1  christos 
     69  1.1  christos /* First part of user prologue.  */
     70  1.1  christos #line 20 "./config/bfin-parse.y"
     71  1.1  christos 
     72  1.1  christos 
     73  1.1  christos #include "as.h"
     74  1.1  christos 
     75  1.1  christos #include "bfin-aux.h"  /* Opcode generating auxiliaries.  */
     76  1.1  christos #include "elf/common.h"
     77  1.1  christos #include "elf/bfin.h"
     78  1.1  christos 
     79  1.1  christos /* This file uses an old-style yyerror returning int.  Disable
     80  1.1  christos    generation of a modern prototype for yyerror.  */
     81  1.1  christos #define yyerror yyerror
     82  1.1  christos 
     83  1.1  christos #define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
     84  1.1  christos 	bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
     85  1.1  christos 
     86  1.1  christos #define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
     87  1.1  christos 	bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
     88  1.1  christos 	                   dst, src0, src1, w0)
     89  1.1  christos 
     90  1.1  christos #define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
     91  1.1  christos 	bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
     92  1.1  christos 	                    dst, src0, src1, w0)
     93  1.1  christos 
     94  1.1  christos #define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls)  \
     95  1.1  christos 	bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
     96  1.1  christos 
     97  1.1  christos #define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls)  \
     98  1.1  christos 	bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
     99  1.1  christos 
    100  1.1  christos #define LDIMMHALF_R(reg, h, s, z, hword) \
    101  1.1  christos 	bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
    102  1.1  christos 
    103  1.1  christos #define LDIMMHALF_R5(reg, h, s, z, hword) \
    104  1.1  christos         bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
    105  1.1  christos 
    106  1.1  christos #define LDSTIDXI(ptr, reg, w, sz, z, offset)  \
    107  1.1  christos 	bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
    108  1.1  christos 
    109  1.1  christos #define LDST(ptr, reg, aop, sz, z, w)  \
    110  1.1  christos 	bfin_gen_ldst (ptr, reg, aop, sz, z, w)
    111  1.1  christos 
    112  1.1  christos #define LDSTII(ptr, reg, offset, w, op)  \
    113  1.1  christos 	bfin_gen_ldstii (ptr, reg, offset, w, op)
    114  1.1  christos 
    115  1.1  christos #define DSPLDST(i, m, reg, aop, w) \
    116  1.1  christos 	bfin_gen_dspldst (i, reg, aop, w, m)
    117  1.1  christos 
    118  1.1  christos #define LDSTPMOD(ptr, reg, idx, aop, w) \
    119  1.1  christos 	bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
    120  1.1  christos 
    121  1.1  christos #define LDSTIIFP(offset, reg, w)  \
    122  1.1  christos 	bfin_gen_ldstiifp (reg, offset, w)
    123  1.1  christos 
    124  1.1  christos #define LOGI2OP(dst, src, opc) \
    125  1.1  christos 	bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
    126  1.1  christos 
    127  1.1  christos #define ALU2OP(dst, src, opc)  \
    128  1.1  christos 	bfin_gen_alu2op (dst, src, opc)
    129  1.1  christos 
    130  1.1  christos #define BRCC(t, b, offset) \
    131  1.1  christos 	bfin_gen_brcc (t, b, offset)
    132  1.1  christos 
    133  1.1  christos #define UJUMP(offset) \
    134  1.1  christos 	bfin_gen_ujump (offset)
    135  1.1  christos 
    136  1.1  christos #define PROGCTRL(prgfunc, poprnd) \
    137  1.1  christos 	bfin_gen_progctrl (prgfunc, poprnd)
    138  1.1  christos 
    139  1.1  christos #define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
    140  1.1  christos 	bfin_gen_pushpopmultiple (dr, pr, d, p, w)
    141  1.1  christos 
    142  1.1  christos #define PUSHPOPREG(reg, w) \
    143  1.1  christos 	bfin_gen_pushpopreg (reg, w)
    144  1.1  christos 
    145  1.1  christos #define CALLA(addr, s)  \
    146  1.1  christos 	bfin_gen_calla (addr, s)
    147  1.1  christos 
    148  1.1  christos #define LINKAGE(r, framesize) \
    149  1.1  christos 	bfin_gen_linkage (r, framesize)
    150  1.1  christos 
    151  1.1  christos #define COMPI2OPD(dst, src, op)  \
    152  1.1  christos 	bfin_gen_compi2opd (dst, src, op)
    153  1.1  christos 
    154  1.1  christos #define COMPI2OPP(dst, src, op)  \
    155  1.1  christos 	bfin_gen_compi2opp (dst, src, op)
    156  1.1  christos 
    157  1.1  christos #define DAGMODIK(i, op)  \
    158  1.1  christos 	bfin_gen_dagmodik (i, op)
    159  1.1  christos 
    160  1.1  christos #define DAGMODIM(i, m, op, br)  \
    161  1.1  christos 	bfin_gen_dagmodim (i, m, op, br)
    162  1.1  christos 
    163  1.1  christos #define COMP3OP(dst, src0, src1, opc)   \
    164  1.1  christos 	bfin_gen_comp3op (src0, src1, dst, opc)
    165  1.1  christos 
    166  1.1  christos #define PTR2OP(dst, src, opc)   \
    167  1.1  christos 	bfin_gen_ptr2op (dst, src, opc)
    168  1.1  christos 
    169  1.1  christos #define CCFLAG(x, y, opc, i, g)  \
    170  1.1  christos 	bfin_gen_ccflag (x, y, opc, i, g)
    171  1.1  christos 
    172  1.1  christos #define CCMV(src, dst, t) \
    173  1.1  christos 	bfin_gen_ccmv (src, dst, t)
    174  1.1  christos 
    175  1.1  christos #define CACTRL(reg, a, op) \
    176  1.1  christos 	bfin_gen_cactrl (reg, a, op)
    177  1.1  christos 
    178  1.1  christos #define LOOPSETUP(soffset, c, rop, eoffset, reg) \
    179  1.1  christos 	bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
    180  1.1  christos 
    181  1.1  christos #define HL2(r1, r0)  (IS_H (r1) << 1 | IS_H (r0))
    182  1.1  christos #define IS_RANGE(bits, expr, sign, mul)    \
    183  1.1  christos 	value_match(expr, bits, sign, mul, 1)
    184  1.1  christos #define IS_URANGE(bits, expr, sign, mul)    \
    185  1.1  christos 	value_match(expr, bits, sign, mul, 0)
    186  1.1  christos #define IS_CONST(expr) (expr->type == Expr_Node_Constant)
    187  1.1  christos #define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
    188  1.1  christos #define IS_IMM(expr, bits)  value_match (expr, bits, 0, 1, 1)
    189  1.1  christos #define IS_UIMM(expr, bits)  value_match (expr, bits, 0, 1, 0)
    190  1.1  christos 
    191  1.1  christos #define IS_PCREL4(expr) \
    192  1.1  christos 	(value_match (expr, 4, 0, 2, 0))
    193  1.1  christos 
    194  1.1  christos #define IS_LPPCREL10(expr) \
    195  1.1  christos 	(value_match (expr, 10, 0, 2, 0))
    196  1.1  christos 
    197  1.1  christos #define IS_PCREL10(expr) \
    198  1.1  christos 	(value_match (expr, 10, 0, 2, 1))
    199  1.1  christos 
    200  1.1  christos #define IS_PCREL12(expr) \
    201  1.1  christos 	(value_match (expr, 12, 0, 2, 1))
    202  1.1  christos 
    203  1.1  christos #define IS_PCREL24(expr) \
    204  1.1  christos 	(value_match (expr, 24, 0, 2, 1))
    205  1.1  christos 
    206  1.1  christos 
    207  1.1  christos static int value_match (Expr_Node *, int, int, int, int);
    208  1.1  christos 
    209  1.1  christos extern FILE *errorf;
    210  1.1  christos extern INSTR_T insn;
    211  1.1  christos 
    212  1.1  christos static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
    213  1.1  christos static Expr_Node *unary  (Expr_Op_Type, Expr_Node *);
    214  1.1  christos 
    215  1.1  christos static void notethat (const char *, ...);
    216  1.1  christos 
    217  1.1  christos extern char *yytext;
    218  1.1  christos 
    219  1.1  christos /* Used to set SRCx fields to all 1s as described in the PRM.  */
    220  1.1  christos static Register reg7 = {REG_R7, 0};
    221  1.1  christos 
    222  1.1  christos void error (const char *format, ...)
    223  1.1  christos {
    224  1.1  christos     va_list ap;
    225  1.1  christos     static char buffer[2000];
    226  1.1  christos 
    227  1.1  christos     va_start (ap, format);
    228  1.1  christos     vsprintf (buffer, format, ap);
    229  1.1  christos     va_end (ap);
    230  1.1  christos 
    231  1.1  christos     as_bad ("%s", buffer);
    232  1.1  christos }
    233  1.1  christos 
    234  1.1  christos static int
    235  1.1  christos yyerror (const char *msg)
    236  1.1  christos {
    237  1.1  christos   if (msg[0] == '\0')
    238  1.1  christos     error ("%s", msg);
    239  1.1  christos 
    240  1.1  christos   else if (yytext[0] != ';')
    241  1.1  christos     error ("%s. Input text was %s.", msg, yytext);
    242  1.1  christos   else
    243  1.1  christos     error ("%s.", msg);
    244  1.1  christos 
    245  1.1  christos   return -1;
    246  1.1  christos }
    247  1.1  christos 
    248  1.1  christos static int
    249  1.1  christos in_range_p (Expr_Node *exp, int from, int to, unsigned int mask)
    250  1.1  christos {
    251  1.1  christos   int val = EXPR_VALUE (exp);
    252  1.1  christos   if (exp->type != Expr_Node_Constant)
    253  1.1  christos     return 0;
    254  1.1  christos   if (val < from || val > to)
    255  1.1  christos     return 0;
    256  1.1  christos   return (val & mask) == 0;
    257  1.1  christos }
    258  1.1  christos 
    259  1.1  christos extern int yylex (void);
    260  1.1  christos 
    261  1.1  christos #define imm3(x) EXPR_VALUE (x)
    262  1.1  christos #define imm4(x) EXPR_VALUE (x)
    263  1.1  christos #define uimm4(x) EXPR_VALUE (x)
    264  1.1  christos #define imm5(x) EXPR_VALUE (x)
    265  1.1  christos #define uimm5(x) EXPR_VALUE (x)
    266  1.1  christos #define imm6(x) EXPR_VALUE (x)
    267  1.1  christos #define imm7(x) EXPR_VALUE (x)
    268  1.1  christos #define uimm8(x) EXPR_VALUE (x)
    269  1.1  christos #define imm16(x) EXPR_VALUE (x)
    270  1.1  christos #define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
    271  1.1  christos #define uimm16(x) EXPR_VALUE (x)
    272  1.1  christos 
    273  1.1  christos /* Return true if a value is inside a range.  */
    274  1.1  christos #define IN_RANGE(x, low, high) \
    275  1.1  christos   (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
    276  1.1  christos 
    277  1.1  christos /* Auxiliary functions.  */
    278  1.1  christos 
    279  1.1  christos static int
    280  1.1  christos valid_dreg_pair (Register *reg1, Expr_Node *reg2)
    281  1.1  christos {
    282  1.1  christos   if (!IS_DREG (*reg1))
    283  1.1  christos     {
    284  1.1  christos       yyerror ("Dregs expected");
    285  1.1  christos       return 0;
    286  1.1  christos     }
    287  1.1  christos 
    288  1.1  christos   if (reg1->regno != 1 && reg1->regno != 3)
    289  1.1  christos     {
    290  1.1  christos       yyerror ("Bad register pair");
    291  1.1  christos       return 0;
    292  1.1  christos     }
    293  1.1  christos 
    294  1.1  christos   if (imm7 (reg2) != reg1->regno - 1)
    295  1.1  christos     {
    296  1.1  christos       yyerror ("Bad register pair");
    297  1.1  christos       return 0;
    298  1.1  christos     }
    299  1.1  christos 
    300  1.1  christos   reg1->regno--;
    301  1.1  christos   return 1;
    302  1.1  christos }
    303  1.1  christos 
    304  1.1  christos static int
    305  1.1  christos check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
    306  1.1  christos {
    307  1.1  christos   if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
    308  1.1  christos       || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
    309  1.1  christos     return yyerror ("Source multiplication register mismatch");
    310  1.1  christos 
    311  1.1  christos   return 0;
    312  1.1  christos }
    313  1.1  christos 
    314  1.1  christos 
    315  1.1  christos /* Check mac option.  */
    316  1.1  christos 
    317  1.1  christos static int
    318  1.1  christos check_macfunc_option (Macfunc *a, Opt_mode *opt)
    319  1.1  christos {
    320  1.1  christos   /* Default option is always valid.  */
    321  1.1  christos   if (opt->mod == 0)
    322  1.1  christos     return 0;
    323  1.1  christos 
    324  1.1  christos   if ((a->w == 1 && a->P == 1
    325  1.1  christos        && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
    326  1.1  christos        && opt->mod != M_S2RND && opt->mod != M_ISS2)
    327  1.1  christos       || (a->w == 1 && a->P == 0
    328  1.1  christos 	  && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
    329  1.1  christos 	  && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND
    330  1.1  christos 	  && opt->mod != M_ISS2 && opt->mod != M_IH)
    331  1.1  christos       || (a->w == 0 && a->P == 0
    332  1.1  christos 	  && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32))
    333  1.1  christos     return -1;
    334  1.1  christos 
    335  1.1  christos   return 0;
    336  1.1  christos }
    337  1.1  christos 
    338  1.1  christos /* Check (vector) mac funcs and ops.  */
    339  1.1  christos 
    340  1.1  christos static int
    341  1.1  christos check_macfuncs (Macfunc *aa, Opt_mode *opa,
    342  1.1  christos 		Macfunc *ab, Opt_mode *opb)
    343  1.1  christos {
    344  1.1  christos   /* Variables for swapping.  */
    345  1.1  christos   Macfunc mtmp;
    346  1.1  christos   Opt_mode otmp;
    347  1.1  christos 
    348  1.1  christos   /* The option mode should be put at the end of the second instruction
    349  1.1  christos      of the vector except M, which should follow MAC1 instruction.  */
    350  1.1  christos   if (opa->mod != 0)
    351  1.1  christos     return yyerror ("Bad opt mode");
    352  1.1  christos 
    353  1.1  christos   /* If a0macfunc comes before a1macfunc, swap them.  */
    354  1.1  christos 
    355  1.1  christos   if (aa->n == 0)
    356  1.1  christos     {
    357  1.1  christos       /*  (M) is not allowed here.  */
    358  1.1  christos       if (opa->MM != 0)
    359  1.1  christos 	return yyerror ("(M) not allowed with A0MAC");
    360  1.1  christos       if (ab->n != 1)
    361  1.1  christos 	return yyerror ("Vector AxMACs can't be same");
    362  1.1  christos 
    363  1.1  christos       mtmp = *aa; *aa = *ab; *ab = mtmp;
    364  1.1  christos       otmp = *opa; *opa = *opb; *opb = otmp;
    365  1.1  christos     }
    366  1.1  christos   else
    367  1.1  christos     {
    368  1.1  christos       if (opb->MM != 0)
    369  1.1  christos 	return yyerror ("(M) not allowed with A0MAC");
    370  1.1  christos       if (ab->n != 0)
    371  1.1  christos 	return yyerror ("Vector AxMACs can't be same");
    372  1.1  christos     }
    373  1.1  christos 
    374  1.1  christos   /*  If both ops are one of 0, 1, or 2, we have multiply_halfregs in both
    375  1.1  christos   assignment_or_macfuncs.  */
    376  1.1  christos   if ((aa->op == 0 || aa->op == 1 || aa->op == 2)
    377  1.1  christos       && (ab->op == 0 || ab->op == 1 || ab->op == 2))
    378  1.1  christos     {
    379  1.1  christos       if (check_multiply_halfregs (aa, ab) < 0)
    380  1.1  christos 	return -1;
    381  1.1  christos     }
    382  1.1  christos   else
    383  1.1  christos     {
    384  1.1  christos       /*  Only one of the assign_macfuncs has a half reg multiply
    385  1.1  christos       Evil trick: Just 'OR' their source register codes:
    386  1.1  christos       We can do that, because we know they were initialized to 0
    387  1.1  christos       in the rules that don't use multiply_halfregs.  */
    388  1.1  christos       aa->s0.regno |= (ab->s0.regno & CODE_MASK);
    389  1.1  christos       aa->s1.regno |= (ab->s1.regno & CODE_MASK);
    390  1.1  christos     }
    391  1.1  christos 
    392  1.1  christos   if (aa->w == ab->w && aa->P != ab->P)
    393  1.1  christos     return yyerror ("Destination Dreg sizes (full or half) must match");
    394  1.1  christos 
    395  1.1  christos   if (aa->w && ab->w)
    396  1.1  christos     {
    397  1.1  christos       if (aa->P && (aa->dst.regno - ab->dst.regno) != 1)
    398  1.1  christos 	return yyerror ("Destination Dregs (full) must differ by one");
    399  1.1  christos       if (!aa->P && aa->dst.regno != ab->dst.regno)
    400  1.1  christos 	return yyerror ("Destination Dregs (half) must match");
    401  1.1  christos     }
    402  1.1  christos 
    403  1.1  christos   /* Make sure mod flags get ORed, too.  */
    404  1.1  christos   opb->mod |= opa->mod;
    405  1.1  christos 
    406  1.1  christos   /* Check option.  */
    407  1.1  christos   if (check_macfunc_option (aa, opb) < 0
    408  1.1  christos       && check_macfunc_option (ab, opb) < 0)
    409  1.1  christos     return yyerror ("bad option");
    410  1.1  christos 
    411  1.1  christos   /* Make sure first macfunc has got both P flags ORed.  */
    412  1.1  christos   aa->P |= ab->P;
    413  1.1  christos 
    414  1.1  christos   return 0;
    415  1.1  christos }
    416  1.1  christos 
    417  1.1  christos 
    418  1.1  christos static int
    419  1.1  christos is_group1 (INSTR_T x)
    420  1.1  christos {
    421  1.1  christos   /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii.  */
    422  1.1  christos   if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
    423  1.1  christos     return 1;
    424  1.1  christos 
    425  1.1  christos   return 0;
    426  1.1  christos }
    427  1.1  christos 
    428  1.1  christos static int
    429  1.1  christos is_group2 (INSTR_T x)
    430  1.1  christos {
    431  1.1  christos   if ((((x->value & 0xfc00) == 0x9c00)  /* dspLDST.  */
    432  1.1  christos        && !((x->value & 0xfde0) == 0x9c60)  /* dagMODim.  */
    433  1.1  christos        && !((x->value & 0xfde0) == 0x9ce0)  /* dagMODim with bit rev.  */
    434  1.1  christos        && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik.  */
    435  1.1  christos       || (x->value == 0x0000))
    436  1.1  christos     return 1;
    437  1.1  christos   return 0;
    438  1.1  christos }
    439  1.1  christos 
    440  1.1  christos static int
    441  1.1  christos is_store (INSTR_T x)
    442  1.1  christos {
    443  1.1  christos   if (!x)
    444  1.1  christos     return 0;
    445  1.1  christos 
    446  1.1  christos   if ((x->value & 0xf000) == 0x8000)
    447  1.1  christos     {
    448  1.1  christos       int aop = ((x->value >> 9) & 0x3);
    449  1.1  christos       int w = ((x->value >> 11) & 0x1);
    450  1.1  christos       if (!w || aop == 3)
    451  1.1  christos 	return 0;
    452  1.1  christos       return 1;
    453  1.1  christos     }
    454  1.1  christos 
    455  1.1  christos   if (((x->value & 0xFF60) == 0x9E60) ||  /* dagMODim_0 */
    456  1.1  christos       ((x->value & 0xFFF0) == 0x9F60))    /* dagMODik_0 */
    457  1.1  christos     return 0;
    458  1.1  christos 
    459  1.1  christos   /* decode_dspLDST_0 */
    460  1.1  christos   if ((x->value & 0xFC00) == 0x9C00)
    461  1.1  christos     {
    462  1.1  christos       int w = ((x->value >> 9) & 0x1);
    463  1.1  christos       if (w)
    464  1.1  christos 	return 1;
    465  1.1  christos     }
    466  1.1  christos 
    467  1.1  christos   return 0;
    468  1.1  christos }
    469  1.1  christos 
    470  1.1  christos static INSTR_T
    471  1.1  christos gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2)
    472  1.1  christos {
    473  1.1  christos   int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0;
    474  1.1  christos   int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0;
    475  1.1  christos   int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0;
    476  1.1  christos 
    477  1.1  christos   if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3))
    478  1.1  christos     yyerror ("resource conflict in multi-issue instruction");
    479  1.1  christos 
    480  1.1  christos   /* Anomaly 05000074 */
    481  1.1  christos   if (ENABLE_AC_05000074
    482  1.1  christos       && dsp32 != NULL && dsp16_grp1 != NULL
    483  1.1  christos       && (dsp32->value & 0xf780) == 0xc680
    484  1.1  christos       && ((dsp16_grp1->value & 0xfe40) == 0x9240
    485  1.1  christos 	  || (dsp16_grp1->value & 0xfe08) == 0xba08
    486  1.1  christos 	  || (dsp16_grp1->value & 0xfc00) == 0xbc00))
    487  1.1  christos     yyerror ("anomaly 05000074 - Multi-Issue Instruction with \
    488  1.1  christos dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported");
    489  1.1  christos 
    490  1.1  christos   if (is_store (dsp16_grp1) && is_store (dsp16_grp2))
    491  1.1  christos     yyerror ("Only one instruction in multi-issue instruction can be a store");
    492  1.1  christos 
    493  1.1  christos   return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2);
    494  1.1  christos }
    495  1.1  christos 
    496  1.1  christos 
    497  1.1  christos #line 498 "config/bfin-parse.c"
    498  1.1  christos 
    499  1.1  christos # ifndef YY_CAST
    500  1.1  christos #  ifdef __cplusplus
    501  1.1  christos #   define YY_CAST(Type, Val) static_cast<Type> (Val)
    502  1.1  christos #   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
    503  1.1  christos #  else
    504  1.1  christos #   define YY_CAST(Type, Val) ((Type) (Val))
    505  1.1  christos #   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
    506  1.1  christos #  endif
    507  1.1  christos # endif
    508  1.1  christos # ifndef YY_NULLPTR
    509  1.1  christos #  if defined __cplusplus
    510  1.1  christos #   if 201103L <= __cplusplus
    511  1.1  christos #    define YY_NULLPTR nullptr
    512  1.1  christos #   else
    513  1.1  christos #    define YY_NULLPTR 0
    514  1.1  christos #   endif
    515  1.1  christos #  else
    516  1.1  christos #   define YY_NULLPTR ((void*)0)
    517  1.1  christos #  endif
    518  1.1  christos # endif
    519  1.1  christos 
    520  1.1  christos /* Use api.header.include to #include this header
    521  1.1  christos    instead of duplicating it here.  */
    522  1.1  christos #ifndef YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
    523  1.1  christos # define YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
    524  1.1  christos /* Debug traces.  */
    525  1.1  christos #ifndef YYDEBUG
    526  1.1  christos # define YYDEBUG 0
    527  1.1  christos #endif
    528  1.1  christos #if YYDEBUG
    529  1.1  christos extern int yydebug;
    530  1.1  christos #endif
    531  1.1  christos 
    532  1.1  christos /* Token kinds.  */
    533  1.1  christos #ifndef YYTOKENTYPE
    534  1.1  christos # define YYTOKENTYPE
    535  1.1  christos   enum yytokentype
    536  1.1  christos   {
    537  1.1  christos     YYEMPTY = -2,
    538  1.1  christos     YYEOF = 0,                     /* "end of file"  */
    539  1.1  christos     YYerror = 256,                 /* error  */
    540  1.1  christos     YYUNDEF = 257,                 /* "invalid token"  */
    541  1.1  christos     BYTEOP16P = 258,               /* BYTEOP16P  */
    542  1.1  christos     BYTEOP16M = 259,               /* BYTEOP16M  */
    543  1.1  christos     BYTEOP1P = 260,                /* BYTEOP1P  */
    544  1.1  christos     BYTEOP2P = 261,                /* BYTEOP2P  */
    545  1.1  christos     BYTEOP3P = 262,                /* BYTEOP3P  */
    546  1.1  christos     BYTEUNPACK = 263,              /* BYTEUNPACK  */
    547  1.1  christos     BYTEPACK = 264,                /* BYTEPACK  */
    548  1.1  christos     PACK = 265,                    /* PACK  */
    549  1.1  christos     SAA = 266,                     /* SAA  */
    550  1.1  christos     ALIGN8 = 267,                  /* ALIGN8  */
    551  1.1  christos     ALIGN16 = 268,                 /* ALIGN16  */
    552  1.1  christos     ALIGN24 = 269,                 /* ALIGN24  */
    553  1.1  christos     VIT_MAX = 270,                 /* VIT_MAX  */
    554  1.1  christos     EXTRACT = 271,                 /* EXTRACT  */
    555  1.1  christos     DEPOSIT = 272,                 /* DEPOSIT  */
    556  1.1  christos     EXPADJ = 273,                  /* EXPADJ  */
    557  1.1  christos     SEARCH = 274,                  /* SEARCH  */
    558  1.1  christos     ONES = 275,                    /* ONES  */
    559  1.1  christos     SIGN = 276,                    /* SIGN  */
    560  1.1  christos     SIGNBITS = 277,                /* SIGNBITS  */
    561  1.1  christos     LINK = 278,                    /* LINK  */
    562  1.1  christos     UNLINK = 279,                  /* UNLINK  */
    563  1.1  christos     REG = 280,                     /* REG  */
    564  1.1  christos     PC = 281,                      /* PC  */
    565  1.1  christos     CCREG = 282,                   /* CCREG  */
    566  1.1  christos     BYTE_DREG = 283,               /* BYTE_DREG  */
    567  1.1  christos     REG_A_DOUBLE_ZERO = 284,       /* REG_A_DOUBLE_ZERO  */
    568  1.1  christos     REG_A_DOUBLE_ONE = 285,        /* REG_A_DOUBLE_ONE  */
    569  1.1  christos     A_ZERO_DOT_L = 286,            /* A_ZERO_DOT_L  */
    570  1.1  christos     A_ZERO_DOT_H = 287,            /* A_ZERO_DOT_H  */
    571  1.1  christos     A_ONE_DOT_L = 288,             /* A_ONE_DOT_L  */
    572  1.1  christos     A_ONE_DOT_H = 289,             /* A_ONE_DOT_H  */
    573  1.1  christos     HALF_REG = 290,                /* HALF_REG  */
    574  1.1  christos     NOP = 291,                     /* NOP  */
    575  1.1  christos     RTI = 292,                     /* RTI  */
    576  1.1  christos     RTS = 293,                     /* RTS  */
    577  1.1  christos     RTX = 294,                     /* RTX  */
    578  1.1  christos     RTN = 295,                     /* RTN  */
    579  1.1  christos     RTE = 296,                     /* RTE  */
    580  1.1  christos     HLT = 297,                     /* HLT  */
    581  1.1  christos     IDLE = 298,                    /* IDLE  */
    582  1.1  christos     STI = 299,                     /* STI  */
    583  1.1  christos     CLI = 300,                     /* CLI  */
    584  1.1  christos     CSYNC = 301,                   /* CSYNC  */
    585  1.1  christos     SSYNC = 302,                   /* SSYNC  */
    586  1.1  christos     EMUEXCPT = 303,                /* EMUEXCPT  */
    587  1.1  christos     RAISE = 304,                   /* RAISE  */
    588  1.1  christos     EXCPT = 305,                   /* EXCPT  */
    589  1.1  christos     LSETUP = 306,                  /* LSETUP  */
    590  1.1  christos     LOOP = 307,                    /* LOOP  */
    591  1.1  christos     LOOP_BEGIN = 308,              /* LOOP_BEGIN  */
    592  1.1  christos     LOOP_END = 309,                /* LOOP_END  */
    593  1.1  christos     DISALGNEXCPT = 310,            /* DISALGNEXCPT  */
    594  1.1  christos     JUMP = 311,                    /* JUMP  */
    595  1.1  christos     JUMP_DOT_S = 312,              /* JUMP_DOT_S  */
    596  1.1  christos     JUMP_DOT_L = 313,              /* JUMP_DOT_L  */
    597  1.1  christos     CALL = 314,                    /* CALL  */
    598  1.1  christos     ABORT = 315,                   /* ABORT  */
    599  1.1  christos     NOT = 316,                     /* NOT  */
    600  1.1  christos     TILDA = 317,                   /* TILDA  */
    601  1.1  christos     BANG = 318,                    /* BANG  */
    602  1.1  christos     AMPERSAND = 319,               /* AMPERSAND  */
    603  1.1  christos     BAR = 320,                     /* BAR  */
    604  1.1  christos     PERCENT = 321,                 /* PERCENT  */
    605  1.1  christos     CARET = 322,                   /* CARET  */
    606  1.1  christos     BXOR = 323,                    /* BXOR  */
    607  1.1  christos     MINUS = 324,                   /* MINUS  */
    608  1.1  christos     PLUS = 325,                    /* PLUS  */
    609  1.1  christos     STAR = 326,                    /* STAR  */
    610  1.1  christos     SLASH = 327,                   /* SLASH  */
    611  1.1  christos     NEG = 328,                     /* NEG  */
    612  1.1  christos     MIN = 329,                     /* MIN  */
    613  1.1  christos     MAX = 330,                     /* MAX  */
    614  1.1  christos     ABS = 331,                     /* ABS  */
    615  1.1  christos     DOUBLE_BAR = 332,              /* DOUBLE_BAR  */
    616  1.1  christos     _PLUS_BAR_PLUS = 333,          /* _PLUS_BAR_PLUS  */
    617  1.1  christos     _PLUS_BAR_MINUS = 334,         /* _PLUS_BAR_MINUS  */
    618  1.1  christos     _MINUS_BAR_PLUS = 335,         /* _MINUS_BAR_PLUS  */
    619  1.1  christos     _MINUS_BAR_MINUS = 336,        /* _MINUS_BAR_MINUS  */
    620  1.1  christos     _MINUS_MINUS = 337,            /* _MINUS_MINUS  */
    621  1.1  christos     _PLUS_PLUS = 338,              /* _PLUS_PLUS  */
    622  1.1  christos     SHIFT = 339,                   /* SHIFT  */
    623  1.1  christos     LSHIFT = 340,                  /* LSHIFT  */
    624  1.1  christos     ASHIFT = 341,                  /* ASHIFT  */
    625  1.1  christos     BXORSHIFT = 342,               /* BXORSHIFT  */
    626  1.1  christos     _GREATER_GREATER_GREATER_THAN_ASSIGN = 343, /* _GREATER_GREATER_GREATER_THAN_ASSIGN  */
    627  1.1  christos     ROT = 344,                     /* ROT  */
    628  1.1  christos     LESS_LESS = 345,               /* LESS_LESS  */
    629  1.1  christos     GREATER_GREATER = 346,         /* GREATER_GREATER  */
    630  1.1  christos     _GREATER_GREATER_GREATER = 347, /* _GREATER_GREATER_GREATER  */
    631  1.1  christos     _LESS_LESS_ASSIGN = 348,       /* _LESS_LESS_ASSIGN  */
    632  1.1  christos     _GREATER_GREATER_ASSIGN = 349, /* _GREATER_GREATER_ASSIGN  */
    633  1.1  christos     DIVS = 350,                    /* DIVS  */
    634  1.1  christos     DIVQ = 351,                    /* DIVQ  */
    635  1.1  christos     ASSIGN = 352,                  /* ASSIGN  */
    636  1.1  christos     _STAR_ASSIGN = 353,            /* _STAR_ASSIGN  */
    637  1.1  christos     _BAR_ASSIGN = 354,             /* _BAR_ASSIGN  */
    638  1.1  christos     _CARET_ASSIGN = 355,           /* _CARET_ASSIGN  */
    639  1.1  christos     _AMPERSAND_ASSIGN = 356,       /* _AMPERSAND_ASSIGN  */
    640  1.1  christos     _MINUS_ASSIGN = 357,           /* _MINUS_ASSIGN  */
    641  1.1  christos     _PLUS_ASSIGN = 358,            /* _PLUS_ASSIGN  */
    642  1.1  christos     _ASSIGN_BANG = 359,            /* _ASSIGN_BANG  */
    643  1.1  christos     _LESS_THAN_ASSIGN = 360,       /* _LESS_THAN_ASSIGN  */
    644  1.1  christos     _ASSIGN_ASSIGN = 361,          /* _ASSIGN_ASSIGN  */
    645  1.1  christos     GE = 362,                      /* GE  */
    646  1.1  christos     LT = 363,                      /* LT  */
    647  1.1  christos     LE = 364,                      /* LE  */
    648  1.1  christos     GT = 365,                      /* GT  */
    649  1.1  christos     LESS_THAN = 366,               /* LESS_THAN  */
    650  1.1  christos     FLUSHINV = 367,                /* FLUSHINV  */
    651  1.1  christos     FLUSH = 368,                   /* FLUSH  */
    652  1.1  christos     IFLUSH = 369,                  /* IFLUSH  */
    653  1.1  christos     PREFETCH = 370,                /* PREFETCH  */
    654  1.1  christos     PRNT = 371,                    /* PRNT  */
    655  1.1  christos     OUTC = 372,                    /* OUTC  */
    656  1.1  christos     WHATREG = 373,                 /* WHATREG  */
    657  1.1  christos     TESTSET = 374,                 /* TESTSET  */
    658  1.1  christos     ASL = 375,                     /* ASL  */
    659  1.1  christos     ASR = 376,                     /* ASR  */
    660  1.1  christos     B = 377,                       /* B  */
    661  1.1  christos     W = 378,                       /* W  */
    662  1.1  christos     NS = 379,                      /* NS  */
    663  1.1  christos     S = 380,                       /* S  */
    664  1.1  christos     CO = 381,                      /* CO  */
    665  1.1  christos     SCO = 382,                     /* SCO  */
    666  1.1  christos     TH = 383,                      /* TH  */
    667  1.1  christos     TL = 384,                      /* TL  */
    668  1.1  christos     BP = 385,                      /* BP  */
    669  1.1  christos     BREV = 386,                    /* BREV  */
    670  1.1  christos     X = 387,                       /* X  */
    671  1.1  christos     Z = 388,                       /* Z  */
    672  1.1  christos     M = 389,                       /* M  */
    673  1.1  christos     MMOD = 390,                    /* MMOD  */
    674  1.1  christos     R = 391,                       /* R  */
    675  1.1  christos     RND = 392,                     /* RND  */
    676  1.1  christos     RNDL = 393,                    /* RNDL  */
    677  1.1  christos     RNDH = 394,                    /* RNDH  */
    678  1.1  christos     RND12 = 395,                   /* RND12  */
    679  1.1  christos     RND20 = 396,                   /* RND20  */
    680  1.1  christos     V = 397,                       /* V  */
    681  1.1  christos     LO = 398,                      /* LO  */
    682  1.1  christos     HI = 399,                      /* HI  */
    683  1.1  christos     BITTGL = 400,                  /* BITTGL  */
    684  1.1  christos     BITCLR = 401,                  /* BITCLR  */
    685  1.1  christos     BITSET = 402,                  /* BITSET  */
    686  1.1  christos     BITTST = 403,                  /* BITTST  */
    687  1.1  christos     BITMUX = 404,                  /* BITMUX  */
    688  1.1  christos     DBGAL = 405,                   /* DBGAL  */
    689  1.1  christos     DBGAH = 406,                   /* DBGAH  */
    690  1.1  christos     DBGHALT = 407,                 /* DBGHALT  */
    691  1.1  christos     DBG = 408,                     /* DBG  */
    692  1.1  christos     DBGA = 409,                    /* DBGA  */
    693  1.1  christos     DBGCMPLX = 410,                /* DBGCMPLX  */
    694  1.1  christos     IF = 411,                      /* IF  */
    695  1.1  christos     COMMA = 412,                   /* COMMA  */
    696  1.1  christos     BY = 413,                      /* BY  */
    697  1.1  christos     COLON = 414,                   /* COLON  */
    698  1.1  christos     SEMICOLON = 415,               /* SEMICOLON  */
    699  1.1  christos     RPAREN = 416,                  /* RPAREN  */
    700  1.1  christos     LPAREN = 417,                  /* LPAREN  */
    701  1.1  christos     LBRACK = 418,                  /* LBRACK  */
    702  1.1  christos     RBRACK = 419,                  /* RBRACK  */
    703  1.1  christos     STATUS_REG = 420,              /* STATUS_REG  */
    704  1.1  christos     MNOP = 421,                    /* MNOP  */
    705  1.1  christos     SYMBOL = 422,                  /* SYMBOL  */
    706  1.1  christos     NUMBER = 423,                  /* NUMBER  */
    707  1.1  christos     GOT = 424,                     /* GOT  */
    708  1.1  christos     GOT17M4 = 425,                 /* GOT17M4  */
    709  1.1  christos     FUNCDESC_GOT17M4 = 426,        /* FUNCDESC_GOT17M4  */
    710  1.1  christos     AT = 427,                      /* AT  */
    711  1.1  christos     PLTPC = 428                    /* PLTPC  */
    712  1.1  christos   };
    713  1.1  christos   typedef enum yytokentype yytoken_kind_t;
    714  1.1  christos #endif
    715  1.1  christos /* Token kinds.  */
    716  1.1  christos #define YYEMPTY -2
    717  1.1  christos #define YYEOF 0
    718  1.1  christos #define YYerror 256
    719  1.1  christos #define YYUNDEF 257
    720  1.1  christos #define BYTEOP16P 258
    721  1.1  christos #define BYTEOP16M 259
    722  1.1  christos #define BYTEOP1P 260
    723  1.1  christos #define BYTEOP2P 261
    724  1.1  christos #define BYTEOP3P 262
    725  1.1  christos #define BYTEUNPACK 263
    726  1.1  christos #define BYTEPACK 264
    727  1.1  christos #define PACK 265
    728  1.1  christos #define SAA 266
    729  1.1  christos #define ALIGN8 267
    730  1.1  christos #define ALIGN16 268
    731  1.1  christos #define ALIGN24 269
    732  1.1  christos #define VIT_MAX 270
    733  1.1  christos #define EXTRACT 271
    734  1.1  christos #define DEPOSIT 272
    735  1.1  christos #define EXPADJ 273
    736  1.1  christos #define SEARCH 274
    737  1.1  christos #define ONES 275
    738  1.1  christos #define SIGN 276
    739  1.1  christos #define SIGNBITS 277
    740  1.1  christos #define LINK 278
    741  1.1  christos #define UNLINK 279
    742  1.1  christos #define REG 280
    743  1.1  christos #define PC 281
    744  1.1  christos #define CCREG 282
    745  1.1  christos #define BYTE_DREG 283
    746  1.1  christos #define REG_A_DOUBLE_ZERO 284
    747  1.1  christos #define REG_A_DOUBLE_ONE 285
    748  1.1  christos #define A_ZERO_DOT_L 286
    749  1.1  christos #define A_ZERO_DOT_H 287
    750  1.1  christos #define A_ONE_DOT_L 288
    751  1.1  christos #define A_ONE_DOT_H 289
    752  1.1  christos #define HALF_REG 290
    753  1.1  christos #define NOP 291
    754  1.1  christos #define RTI 292
    755  1.1  christos #define RTS 293
    756  1.1  christos #define RTX 294
    757  1.1  christos #define RTN 295
    758  1.1  christos #define RTE 296
    759  1.1  christos #define HLT 297
    760  1.1  christos #define IDLE 298
    761  1.1  christos #define STI 299
    762  1.1  christos #define CLI 300
    763  1.1  christos #define CSYNC 301
    764  1.1  christos #define SSYNC 302
    765  1.1  christos #define EMUEXCPT 303
    766  1.1  christos #define RAISE 304
    767  1.1  christos #define EXCPT 305
    768  1.1  christos #define LSETUP 306
    769  1.1  christos #define LOOP 307
    770  1.1  christos #define LOOP_BEGIN 308
    771  1.1  christos #define LOOP_END 309
    772  1.1  christos #define DISALGNEXCPT 310
    773  1.1  christos #define JUMP 311
    774  1.1  christos #define JUMP_DOT_S 312
    775  1.1  christos #define JUMP_DOT_L 313
    776  1.1  christos #define CALL 314
    777  1.1  christos #define ABORT 315
    778  1.1  christos #define NOT 316
    779  1.1  christos #define TILDA 317
    780  1.1  christos #define BANG 318
    781  1.1  christos #define AMPERSAND 319
    782  1.1  christos #define BAR 320
    783  1.1  christos #define PERCENT 321
    784  1.1  christos #define CARET 322
    785  1.1  christos #define BXOR 323
    786  1.1  christos #define MINUS 324
    787  1.1  christos #define PLUS 325
    788  1.1  christos #define STAR 326
    789  1.1  christos #define SLASH 327
    790  1.1  christos #define NEG 328
    791  1.1  christos #define MIN 329
    792  1.1  christos #define MAX 330
    793  1.1  christos #define ABS 331
    794  1.1  christos #define DOUBLE_BAR 332
    795  1.1  christos #define _PLUS_BAR_PLUS 333
    796  1.1  christos #define _PLUS_BAR_MINUS 334
    797  1.1  christos #define _MINUS_BAR_PLUS 335
    798  1.1  christos #define _MINUS_BAR_MINUS 336
    799  1.1  christos #define _MINUS_MINUS 337
    800  1.1  christos #define _PLUS_PLUS 338
    801  1.1  christos #define SHIFT 339
    802  1.1  christos #define LSHIFT 340
    803  1.1  christos #define ASHIFT 341
    804  1.1  christos #define BXORSHIFT 342
    805  1.1  christos #define _GREATER_GREATER_GREATER_THAN_ASSIGN 343
    806  1.1  christos #define ROT 344
    807  1.1  christos #define LESS_LESS 345
    808  1.1  christos #define GREATER_GREATER 346
    809  1.1  christos #define _GREATER_GREATER_GREATER 347
    810  1.1  christos #define _LESS_LESS_ASSIGN 348
    811  1.1  christos #define _GREATER_GREATER_ASSIGN 349
    812  1.1  christos #define DIVS 350
    813  1.1  christos #define DIVQ 351
    814  1.1  christos #define ASSIGN 352
    815  1.1  christos #define _STAR_ASSIGN 353
    816  1.1  christos #define _BAR_ASSIGN 354
    817  1.1  christos #define _CARET_ASSIGN 355
    818  1.1  christos #define _AMPERSAND_ASSIGN 356
    819  1.1  christos #define _MINUS_ASSIGN 357
    820  1.1  christos #define _PLUS_ASSIGN 358
    821  1.1  christos #define _ASSIGN_BANG 359
    822  1.1  christos #define _LESS_THAN_ASSIGN 360
    823  1.1  christos #define _ASSIGN_ASSIGN 361
    824  1.1  christos #define GE 362
    825  1.1  christos #define LT 363
    826  1.1  christos #define LE 364
    827  1.1  christos #define GT 365
    828  1.1  christos #define LESS_THAN 366
    829  1.1  christos #define FLUSHINV 367
    830  1.1  christos #define FLUSH 368
    831  1.1  christos #define IFLUSH 369
    832  1.1  christos #define PREFETCH 370
    833  1.1  christos #define PRNT 371
    834  1.1  christos #define OUTC 372
    835  1.1  christos #define WHATREG 373
    836  1.1  christos #define TESTSET 374
    837  1.1  christos #define ASL 375
    838  1.1  christos #define ASR 376
    839  1.1  christos #define B 377
    840  1.1  christos #define W 378
    841  1.1  christos #define NS 379
    842  1.1  christos #define S 380
    843  1.1  christos #define CO 381
    844  1.1  christos #define SCO 382
    845  1.1  christos #define TH 383
    846  1.1  christos #define TL 384
    847  1.1  christos #define BP 385
    848  1.1  christos #define BREV 386
    849  1.1  christos #define X 387
    850  1.1  christos #define Z 388
    851  1.1  christos #define M 389
    852  1.1  christos #define MMOD 390
    853  1.1  christos #define R 391
    854  1.1  christos #define RND 392
    855  1.1  christos #define RNDL 393
    856  1.1  christos #define RNDH 394
    857  1.1  christos #define RND12 395
    858  1.1  christos #define RND20 396
    859  1.1  christos #define V 397
    860  1.1  christos #define LO 398
    861  1.1  christos #define HI 399
    862  1.1  christos #define BITTGL 400
    863  1.1  christos #define BITCLR 401
    864  1.1  christos #define BITSET 402
    865  1.1  christos #define BITTST 403
    866  1.1  christos #define BITMUX 404
    867  1.1  christos #define DBGAL 405
    868  1.1  christos #define DBGAH 406
    869  1.1  christos #define DBGHALT 407
    870  1.1  christos #define DBG 408
    871  1.1  christos #define DBGA 409
    872  1.1  christos #define DBGCMPLX 410
    873  1.1  christos #define IF 411
    874  1.1  christos #define COMMA 412
    875  1.1  christos #define BY 413
    876  1.1  christos #define COLON 414
    877  1.1  christos #define SEMICOLON 415
    878  1.1  christos #define RPAREN 416
    879  1.1  christos #define LPAREN 417
    880  1.1  christos #define LBRACK 418
    881  1.1  christos #define RBRACK 419
    882  1.1  christos #define STATUS_REG 420
    883  1.1  christos #define MNOP 421
    884  1.1  christos #define SYMBOL 422
    885  1.1  christos #define NUMBER 423
    886  1.1  christos #define GOT 424
    887  1.1  christos #define GOT17M4 425
    888  1.1  christos #define FUNCDESC_GOT17M4 426
    889  1.1  christos #define AT 427
    890  1.1  christos #define PLTPC 428
    891  1.1  christos 
    892  1.1  christos /* Value type.  */
    893  1.1  christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    894  1.1  christos union YYSTYPE
    895  1.1  christos {
    896  1.1  christos #line 447 "./config/bfin-parse.y"
    897  1.1  christos 
    898  1.1  christos   INSTR_T instr;
    899  1.1  christos   Expr_Node *expr;
    900  1.1  christos   SYMBOL_T symbol;
    901  1.1  christos   long value;
    902  1.1  christos   Register reg;
    903  1.1  christos   Macfunc macfunc;
    904  1.1  christos   struct { int r0; int s0; int x0; int aop; } modcodes;
    905  1.1  christos   struct { int r0; } r0;
    906  1.1  christos   Opt_mode mod;
    907  1.1  christos 
    908  1.1  christos #line 909 "config/bfin-parse.c"
    909  1.1  christos 
    910  1.1  christos };
    911  1.1  christos typedef union YYSTYPE YYSTYPE;
    912  1.1  christos # define YYSTYPE_IS_TRIVIAL 1
    913  1.1  christos # define YYSTYPE_IS_DECLARED 1
    914  1.1  christos #endif
    915  1.1  christos 
    916  1.1  christos 
    917  1.1  christos extern YYSTYPE yylval;
    918  1.1  christos 
    919  1.1  christos 
    920  1.1  christos int yyparse (void);
    921  1.1  christos 
    922  1.1  christos 
    923  1.1  christos #endif /* !YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED  */
    924  1.1  christos /* Symbol kind.  */
    925  1.1  christos enum yysymbol_kind_t
    926  1.1  christos {
    927  1.1  christos   YYSYMBOL_YYEMPTY = -2,
    928  1.1  christos   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
    929  1.1  christos   YYSYMBOL_YYerror = 1,                    /* error  */
    930  1.1  christos   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
    931  1.1  christos   YYSYMBOL_BYTEOP16P = 3,                  /* BYTEOP16P  */
    932  1.1  christos   YYSYMBOL_BYTEOP16M = 4,                  /* BYTEOP16M  */
    933  1.1  christos   YYSYMBOL_BYTEOP1P = 5,                   /* BYTEOP1P  */
    934  1.1  christos   YYSYMBOL_BYTEOP2P = 6,                   /* BYTEOP2P  */
    935  1.1  christos   YYSYMBOL_BYTEOP3P = 7,                   /* BYTEOP3P  */
    936  1.1  christos   YYSYMBOL_BYTEUNPACK = 8,                 /* BYTEUNPACK  */
    937  1.1  christos   YYSYMBOL_BYTEPACK = 9,                   /* BYTEPACK  */
    938  1.1  christos   YYSYMBOL_PACK = 10,                      /* PACK  */
    939  1.1  christos   YYSYMBOL_SAA = 11,                       /* SAA  */
    940  1.1  christos   YYSYMBOL_ALIGN8 = 12,                    /* ALIGN8  */
    941  1.1  christos   YYSYMBOL_ALIGN16 = 13,                   /* ALIGN16  */
    942  1.1  christos   YYSYMBOL_ALIGN24 = 14,                   /* ALIGN24  */
    943  1.1  christos   YYSYMBOL_VIT_MAX = 15,                   /* VIT_MAX  */
    944  1.1  christos   YYSYMBOL_EXTRACT = 16,                   /* EXTRACT  */
    945  1.1  christos   YYSYMBOL_DEPOSIT = 17,                   /* DEPOSIT  */
    946  1.1  christos   YYSYMBOL_EXPADJ = 18,                    /* EXPADJ  */
    947  1.1  christos   YYSYMBOL_SEARCH = 19,                    /* SEARCH  */
    948  1.1  christos   YYSYMBOL_ONES = 20,                      /* ONES  */
    949  1.1  christos   YYSYMBOL_SIGN = 21,                      /* SIGN  */
    950  1.1  christos   YYSYMBOL_SIGNBITS = 22,                  /* SIGNBITS  */
    951  1.1  christos   YYSYMBOL_LINK = 23,                      /* LINK  */
    952  1.1  christos   YYSYMBOL_UNLINK = 24,                    /* UNLINK  */
    953  1.1  christos   YYSYMBOL_REG = 25,                       /* REG  */
    954  1.1  christos   YYSYMBOL_PC = 26,                        /* PC  */
    955  1.1  christos   YYSYMBOL_CCREG = 27,                     /* CCREG  */
    956  1.1  christos   YYSYMBOL_BYTE_DREG = 28,                 /* BYTE_DREG  */
    957  1.1  christos   YYSYMBOL_REG_A_DOUBLE_ZERO = 29,         /* REG_A_DOUBLE_ZERO  */
    958  1.1  christos   YYSYMBOL_REG_A_DOUBLE_ONE = 30,          /* REG_A_DOUBLE_ONE  */
    959  1.1  christos   YYSYMBOL_A_ZERO_DOT_L = 31,              /* A_ZERO_DOT_L  */
    960  1.1  christos   YYSYMBOL_A_ZERO_DOT_H = 32,              /* A_ZERO_DOT_H  */
    961  1.1  christos   YYSYMBOL_A_ONE_DOT_L = 33,               /* A_ONE_DOT_L  */
    962  1.1  christos   YYSYMBOL_A_ONE_DOT_H = 34,               /* A_ONE_DOT_H  */
    963  1.1  christos   YYSYMBOL_HALF_REG = 35,                  /* HALF_REG  */
    964  1.1  christos   YYSYMBOL_NOP = 36,                       /* NOP  */
    965  1.1  christos   YYSYMBOL_RTI = 37,                       /* RTI  */
    966  1.1  christos   YYSYMBOL_RTS = 38,                       /* RTS  */
    967  1.1  christos   YYSYMBOL_RTX = 39,                       /* RTX  */
    968  1.1  christos   YYSYMBOL_RTN = 40,                       /* RTN  */
    969  1.1  christos   YYSYMBOL_RTE = 41,                       /* RTE  */
    970  1.1  christos   YYSYMBOL_HLT = 42,                       /* HLT  */
    971  1.1  christos   YYSYMBOL_IDLE = 43,                      /* IDLE  */
    972  1.1  christos   YYSYMBOL_STI = 44,                       /* STI  */
    973  1.1  christos   YYSYMBOL_CLI = 45,                       /* CLI  */
    974  1.1  christos   YYSYMBOL_CSYNC = 46,                     /* CSYNC  */
    975  1.1  christos   YYSYMBOL_SSYNC = 47,                     /* SSYNC  */
    976  1.1  christos   YYSYMBOL_EMUEXCPT = 48,                  /* EMUEXCPT  */
    977  1.1  christos   YYSYMBOL_RAISE = 49,                     /* RAISE  */
    978  1.1  christos   YYSYMBOL_EXCPT = 50,                     /* EXCPT  */
    979  1.1  christos   YYSYMBOL_LSETUP = 51,                    /* LSETUP  */
    980  1.1  christos   YYSYMBOL_LOOP = 52,                      /* LOOP  */
    981  1.1  christos   YYSYMBOL_LOOP_BEGIN = 53,                /* LOOP_BEGIN  */
    982  1.1  christos   YYSYMBOL_LOOP_END = 54,                  /* LOOP_END  */
    983  1.1  christos   YYSYMBOL_DISALGNEXCPT = 55,              /* DISALGNEXCPT  */
    984  1.1  christos   YYSYMBOL_JUMP = 56,                      /* JUMP  */
    985  1.1  christos   YYSYMBOL_JUMP_DOT_S = 57,                /* JUMP_DOT_S  */
    986  1.1  christos   YYSYMBOL_JUMP_DOT_L = 58,                /* JUMP_DOT_L  */
    987  1.1  christos   YYSYMBOL_CALL = 59,                      /* CALL  */
    988  1.1  christos   YYSYMBOL_ABORT = 60,                     /* ABORT  */
    989  1.1  christos   YYSYMBOL_NOT = 61,                       /* NOT  */
    990  1.1  christos   YYSYMBOL_TILDA = 62,                     /* TILDA  */
    991  1.1  christos   YYSYMBOL_BANG = 63,                      /* BANG  */
    992  1.1  christos   YYSYMBOL_AMPERSAND = 64,                 /* AMPERSAND  */
    993  1.1  christos   YYSYMBOL_BAR = 65,                       /* BAR  */
    994  1.1  christos   YYSYMBOL_PERCENT = 66,                   /* PERCENT  */
    995  1.1  christos   YYSYMBOL_CARET = 67,                     /* CARET  */
    996  1.1  christos   YYSYMBOL_BXOR = 68,                      /* BXOR  */
    997  1.1  christos   YYSYMBOL_MINUS = 69,                     /* MINUS  */
    998  1.1  christos   YYSYMBOL_PLUS = 70,                      /* PLUS  */
    999  1.1  christos   YYSYMBOL_STAR = 71,                      /* STAR  */
   1000  1.1  christos   YYSYMBOL_SLASH = 72,                     /* SLASH  */
   1001  1.1  christos   YYSYMBOL_NEG = 73,                       /* NEG  */
   1002  1.1  christos   YYSYMBOL_MIN = 74,                       /* MIN  */
   1003  1.1  christos   YYSYMBOL_MAX = 75,                       /* MAX  */
   1004  1.1  christos   YYSYMBOL_ABS = 76,                       /* ABS  */
   1005  1.1  christos   YYSYMBOL_DOUBLE_BAR = 77,                /* DOUBLE_BAR  */
   1006  1.1  christos   YYSYMBOL__PLUS_BAR_PLUS = 78,            /* _PLUS_BAR_PLUS  */
   1007  1.1  christos   YYSYMBOL__PLUS_BAR_MINUS = 79,           /* _PLUS_BAR_MINUS  */
   1008  1.1  christos   YYSYMBOL__MINUS_BAR_PLUS = 80,           /* _MINUS_BAR_PLUS  */
   1009  1.1  christos   YYSYMBOL__MINUS_BAR_MINUS = 81,          /* _MINUS_BAR_MINUS  */
   1010  1.1  christos   YYSYMBOL__MINUS_MINUS = 82,              /* _MINUS_MINUS  */
   1011  1.1  christos   YYSYMBOL__PLUS_PLUS = 83,                /* _PLUS_PLUS  */
   1012  1.1  christos   YYSYMBOL_SHIFT = 84,                     /* SHIFT  */
   1013  1.1  christos   YYSYMBOL_LSHIFT = 85,                    /* LSHIFT  */
   1014  1.1  christos   YYSYMBOL_ASHIFT = 86,                    /* ASHIFT  */
   1015  1.1  christos   YYSYMBOL_BXORSHIFT = 87,                 /* BXORSHIFT  */
   1016  1.1  christos   YYSYMBOL__GREATER_GREATER_GREATER_THAN_ASSIGN = 88, /* _GREATER_GREATER_GREATER_THAN_ASSIGN  */
   1017  1.1  christos   YYSYMBOL_ROT = 89,                       /* ROT  */
   1018  1.1  christos   YYSYMBOL_LESS_LESS = 90,                 /* LESS_LESS  */
   1019  1.1  christos   YYSYMBOL_GREATER_GREATER = 91,           /* GREATER_GREATER  */
   1020  1.1  christos   YYSYMBOL__GREATER_GREATER_GREATER = 92,  /* _GREATER_GREATER_GREATER  */
   1021  1.1  christos   YYSYMBOL__LESS_LESS_ASSIGN = 93,         /* _LESS_LESS_ASSIGN  */
   1022  1.1  christos   YYSYMBOL__GREATER_GREATER_ASSIGN = 94,   /* _GREATER_GREATER_ASSIGN  */
   1023  1.1  christos   YYSYMBOL_DIVS = 95,                      /* DIVS  */
   1024  1.1  christos   YYSYMBOL_DIVQ = 96,                      /* DIVQ  */
   1025  1.1  christos   YYSYMBOL_ASSIGN = 97,                    /* ASSIGN  */
   1026  1.1  christos   YYSYMBOL__STAR_ASSIGN = 98,              /* _STAR_ASSIGN  */
   1027  1.1  christos   YYSYMBOL__BAR_ASSIGN = 99,               /* _BAR_ASSIGN  */
   1028  1.1  christos   YYSYMBOL__CARET_ASSIGN = 100,            /* _CARET_ASSIGN  */
   1029  1.1  christos   YYSYMBOL__AMPERSAND_ASSIGN = 101,        /* _AMPERSAND_ASSIGN  */
   1030  1.1  christos   YYSYMBOL__MINUS_ASSIGN = 102,            /* _MINUS_ASSIGN  */
   1031  1.1  christos   YYSYMBOL__PLUS_ASSIGN = 103,             /* _PLUS_ASSIGN  */
   1032  1.1  christos   YYSYMBOL__ASSIGN_BANG = 104,             /* _ASSIGN_BANG  */
   1033  1.1  christos   YYSYMBOL__LESS_THAN_ASSIGN = 105,        /* _LESS_THAN_ASSIGN  */
   1034  1.1  christos   YYSYMBOL__ASSIGN_ASSIGN = 106,           /* _ASSIGN_ASSIGN  */
   1035  1.1  christos   YYSYMBOL_GE = 107,                       /* GE  */
   1036  1.1  christos   YYSYMBOL_LT = 108,                       /* LT  */
   1037  1.1  christos   YYSYMBOL_LE = 109,                       /* LE  */
   1038  1.1  christos   YYSYMBOL_GT = 110,                       /* GT  */
   1039  1.1  christos   YYSYMBOL_LESS_THAN = 111,                /* LESS_THAN  */
   1040  1.1  christos   YYSYMBOL_FLUSHINV = 112,                 /* FLUSHINV  */
   1041  1.1  christos   YYSYMBOL_FLUSH = 113,                    /* FLUSH  */
   1042  1.1  christos   YYSYMBOL_IFLUSH = 114,                   /* IFLUSH  */
   1043  1.1  christos   YYSYMBOL_PREFETCH = 115,                 /* PREFETCH  */
   1044  1.1  christos   YYSYMBOL_PRNT = 116,                     /* PRNT  */
   1045  1.1  christos   YYSYMBOL_OUTC = 117,                     /* OUTC  */
   1046  1.1  christos   YYSYMBOL_WHATREG = 118,                  /* WHATREG  */
   1047  1.1  christos   YYSYMBOL_TESTSET = 119,                  /* TESTSET  */
   1048  1.1  christos   YYSYMBOL_ASL = 120,                      /* ASL  */
   1049  1.1  christos   YYSYMBOL_ASR = 121,                      /* ASR  */
   1050  1.1  christos   YYSYMBOL_B = 122,                        /* B  */
   1051  1.1  christos   YYSYMBOL_W = 123,                        /* W  */
   1052  1.1  christos   YYSYMBOL_NS = 124,                       /* NS  */
   1053  1.1  christos   YYSYMBOL_S = 125,                        /* S  */
   1054  1.1  christos   YYSYMBOL_CO = 126,                       /* CO  */
   1055  1.1  christos   YYSYMBOL_SCO = 127,                      /* SCO  */
   1056  1.1  christos   YYSYMBOL_TH = 128,                       /* TH  */
   1057  1.1  christos   YYSYMBOL_TL = 129,                       /* TL  */
   1058  1.1  christos   YYSYMBOL_BP = 130,                       /* BP  */
   1059  1.1  christos   YYSYMBOL_BREV = 131,                     /* BREV  */
   1060  1.1  christos   YYSYMBOL_X = 132,                        /* X  */
   1061  1.1  christos   YYSYMBOL_Z = 133,                        /* Z  */
   1062  1.1  christos   YYSYMBOL_M = 134,                        /* M  */
   1063  1.1  christos   YYSYMBOL_MMOD = 135,                     /* MMOD  */
   1064  1.1  christos   YYSYMBOL_R = 136,                        /* R  */
   1065  1.1  christos   YYSYMBOL_RND = 137,                      /* RND  */
   1066  1.1  christos   YYSYMBOL_RNDL = 138,                     /* RNDL  */
   1067  1.1  christos   YYSYMBOL_RNDH = 139,                     /* RNDH  */
   1068  1.1  christos   YYSYMBOL_RND12 = 140,                    /* RND12  */
   1069  1.1  christos   YYSYMBOL_RND20 = 141,                    /* RND20  */
   1070  1.1  christos   YYSYMBOL_V = 142,                        /* V  */
   1071  1.1  christos   YYSYMBOL_LO = 143,                       /* LO  */
   1072  1.1  christos   YYSYMBOL_HI = 144,                       /* HI  */
   1073  1.1  christos   YYSYMBOL_BITTGL = 145,                   /* BITTGL  */
   1074  1.1  christos   YYSYMBOL_BITCLR = 146,                   /* BITCLR  */
   1075  1.1  christos   YYSYMBOL_BITSET = 147,                   /* BITSET  */
   1076  1.1  christos   YYSYMBOL_BITTST = 148,                   /* BITTST  */
   1077  1.1  christos   YYSYMBOL_BITMUX = 149,                   /* BITMUX  */
   1078  1.1  christos   YYSYMBOL_DBGAL = 150,                    /* DBGAL  */
   1079  1.1  christos   YYSYMBOL_DBGAH = 151,                    /* DBGAH  */
   1080  1.1  christos   YYSYMBOL_DBGHALT = 152,                  /* DBGHALT  */
   1081  1.1  christos   YYSYMBOL_DBG = 153,                      /* DBG  */
   1082  1.1  christos   YYSYMBOL_DBGA = 154,                     /* DBGA  */
   1083  1.1  christos   YYSYMBOL_DBGCMPLX = 155,                 /* DBGCMPLX  */
   1084  1.1  christos   YYSYMBOL_IF = 156,                       /* IF  */
   1085  1.1  christos   YYSYMBOL_COMMA = 157,                    /* COMMA  */
   1086  1.1  christos   YYSYMBOL_BY = 158,                       /* BY  */
   1087  1.1  christos   YYSYMBOL_COLON = 159,                    /* COLON  */
   1088  1.1  christos   YYSYMBOL_SEMICOLON = 160,                /* SEMICOLON  */
   1089  1.1  christos   YYSYMBOL_RPAREN = 161,                   /* RPAREN  */
   1090  1.1  christos   YYSYMBOL_LPAREN = 162,                   /* LPAREN  */
   1091  1.1  christos   YYSYMBOL_LBRACK = 163,                   /* LBRACK  */
   1092  1.1  christos   YYSYMBOL_RBRACK = 164,                   /* RBRACK  */
   1093  1.1  christos   YYSYMBOL_STATUS_REG = 165,               /* STATUS_REG  */
   1094  1.1  christos   YYSYMBOL_MNOP = 166,                     /* MNOP  */
   1095  1.1  christos   YYSYMBOL_SYMBOL = 167,                   /* SYMBOL  */
   1096  1.1  christos   YYSYMBOL_NUMBER = 168,                   /* NUMBER  */
   1097  1.1  christos   YYSYMBOL_GOT = 169,                      /* GOT  */
   1098  1.1  christos   YYSYMBOL_GOT17M4 = 170,                  /* GOT17M4  */
   1099  1.1  christos   YYSYMBOL_FUNCDESC_GOT17M4 = 171,         /* FUNCDESC_GOT17M4  */
   1100  1.1  christos   YYSYMBOL_AT = 172,                       /* AT  */
   1101  1.1  christos   YYSYMBOL_PLTPC = 173,                    /* PLTPC  */
   1102  1.1  christos   YYSYMBOL_YYACCEPT = 174,                 /* $accept  */
   1103  1.1  christos   YYSYMBOL_statement = 175,                /* statement  */
   1104  1.1  christos   YYSYMBOL_asm = 176,                      /* asm  */
   1105  1.1  christos   YYSYMBOL_asm_1 = 177,                    /* asm_1  */
   1106  1.1  christos   YYSYMBOL_REG_A = 178,                    /* REG_A  */
   1107  1.1  christos   YYSYMBOL_opt_mode = 179,                 /* opt_mode  */
   1108  1.1  christos   YYSYMBOL_asr_asl = 180,                  /* asr_asl  */
   1109  1.1  christos   YYSYMBOL_sco = 181,                      /* sco  */
   1110  1.1  christos   YYSYMBOL_asr_asl_0 = 182,                /* asr_asl_0  */
   1111  1.1  christos   YYSYMBOL_amod0 = 183,                    /* amod0  */
   1112  1.1  christos   YYSYMBOL_amod1 = 184,                    /* amod1  */
   1113  1.1  christos   YYSYMBOL_amod2 = 185,                    /* amod2  */
   1114  1.1  christos   YYSYMBOL_xpmod = 186,                    /* xpmod  */
   1115  1.1  christos   YYSYMBOL_xpmod1 = 187,                   /* xpmod1  */
   1116  1.1  christos   YYSYMBOL_vsmod = 188,                    /* vsmod  */
   1117  1.1  christos   YYSYMBOL_vmod = 189,                     /* vmod  */
   1118  1.1  christos   YYSYMBOL_smod = 190,                     /* smod  */
   1119  1.1  christos   YYSYMBOL_searchmod = 191,                /* searchmod  */
   1120  1.1  christos   YYSYMBOL_aligndir = 192,                 /* aligndir  */
   1121  1.1  christos   YYSYMBOL_byteop_mod = 193,               /* byteop_mod  */
   1122  1.1  christos   YYSYMBOL_c_align = 194,                  /* c_align  */
   1123  1.1  christos   YYSYMBOL_w32_or_nothing = 195,           /* w32_or_nothing  */
   1124  1.1  christos   YYSYMBOL_iu_or_nothing = 196,            /* iu_or_nothing  */
   1125  1.1  christos   YYSYMBOL_reg_with_predec = 197,          /* reg_with_predec  */
   1126  1.1  christos   YYSYMBOL_reg_with_postinc = 198,         /* reg_with_postinc  */
   1127  1.1  christos   YYSYMBOL_min_max = 199,                  /* min_max  */
   1128  1.1  christos   YYSYMBOL_op_bar_op = 200,                /* op_bar_op  */
   1129  1.1  christos   YYSYMBOL_plus_minus = 201,               /* plus_minus  */
   1130  1.1  christos   YYSYMBOL_rnd_op = 202,                   /* rnd_op  */
   1131  1.1  christos   YYSYMBOL_b3_op = 203,                    /* b3_op  */
   1132  1.1  christos   YYSYMBOL_post_op = 204,                  /* post_op  */
   1133  1.1  christos   YYSYMBOL_a_assign = 205,                 /* a_assign  */
   1134  1.1  christos   YYSYMBOL_a_minusassign = 206,            /* a_minusassign  */
   1135  1.1  christos   YYSYMBOL_a_plusassign = 207,             /* a_plusassign  */
   1136  1.1  christos   YYSYMBOL_assign_macfunc = 208,           /* assign_macfunc  */
   1137  1.1  christos   YYSYMBOL_a_macfunc = 209,                /* a_macfunc  */
   1138  1.1  christos   YYSYMBOL_multiply_halfregs = 210,        /* multiply_halfregs  */
   1139  1.1  christos   YYSYMBOL_cc_op = 211,                    /* cc_op  */
   1140  1.1  christos   YYSYMBOL_ccstat = 212,                   /* ccstat  */
   1141  1.1  christos   YYSYMBOL_symbol = 213,                   /* symbol  */
   1142  1.1  christos   YYSYMBOL_any_gotrel = 214,               /* any_gotrel  */
   1143  1.1  christos   YYSYMBOL_got = 215,                      /* got  */
   1144  1.1  christos   YYSYMBOL_got_or_expr = 216,              /* got_or_expr  */
   1145  1.1  christos   YYSYMBOL_pltpc = 217,                    /* pltpc  */
   1146  1.1  christos   YYSYMBOL_eterm = 218,                    /* eterm  */
   1147  1.1  christos   YYSYMBOL_expr = 219,                     /* expr  */
   1148  1.1  christos   YYSYMBOL_expr_1 = 220                    /* expr_1  */
   1149  1.1  christos };
   1150  1.1  christos typedef enum yysymbol_kind_t yysymbol_kind_t;
   1151  1.1  christos 
   1152  1.1  christos 
   1153  1.1  christos 
   1154  1.1  christos 
   1155  1.1  christos #ifdef short
   1156  1.1  christos # undef short
   1157  1.1  christos #endif
   1158  1.1  christos 
   1159  1.1  christos /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
   1160  1.1  christos    <limits.h> and (if available) <stdint.h> are included
   1161  1.1  christos    so that the code can choose integer types of a good width.  */
   1162  1.1  christos 
   1163  1.1  christos #ifndef __PTRDIFF_MAX__
   1164  1.1  christos # include <limits.h> /* INFRINGES ON USER NAME SPACE */
   1165  1.1  christos # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
   1166  1.1  christos #  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
   1167  1.1  christos #  define YY_STDINT_H
   1168  1.1  christos # endif
   1169  1.1  christos #endif
   1170  1.1  christos 
   1171  1.1  christos /* Narrow types that promote to a signed type and that can represent a
   1172  1.1  christos    signed or unsigned integer of at least N bits.  In tables they can
   1173  1.1  christos    save space and decrease cache pressure.  Promoting to a signed type
   1174  1.1  christos    helps avoid bugs in integer arithmetic.  */
   1175  1.1  christos 
   1176  1.1  christos #ifdef __INT_LEAST8_MAX__
   1177  1.1  christos typedef __INT_LEAST8_TYPE__ yytype_int8;
   1178  1.1  christos #elif defined YY_STDINT_H
   1179  1.1  christos typedef int_least8_t yytype_int8;
   1180  1.1  christos #else
   1181  1.1  christos typedef signed char yytype_int8;
   1182  1.1  christos #endif
   1183  1.1  christos 
   1184  1.1  christos #ifdef __INT_LEAST16_MAX__
   1185  1.1  christos typedef __INT_LEAST16_TYPE__ yytype_int16;
   1186  1.1  christos #elif defined YY_STDINT_H
   1187  1.1  christos typedef int_least16_t yytype_int16;
   1188  1.1  christos #else
   1189  1.1  christos typedef short yytype_int16;
   1190  1.1  christos #endif
   1191  1.1  christos 
   1192  1.1  christos /* Work around bug in HP-UX 11.23, which defines these macros
   1193  1.1  christos    incorrectly for preprocessor constants.  This workaround can likely
   1194  1.1  christos    be removed in 2023, as HPE has promised support for HP-UX 11.23
   1195  1.1  christos    (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
   1196  1.1  christos    <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
   1197  1.1  christos #ifdef __hpux
   1198  1.1  christos # undef UINT_LEAST8_MAX
   1199  1.1  christos # undef UINT_LEAST16_MAX
   1200  1.1  christos # define UINT_LEAST8_MAX 255
   1201  1.1  christos # define UINT_LEAST16_MAX 65535
   1202  1.1  christos #endif
   1203  1.1  christos 
   1204  1.1  christos #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
   1205  1.1  christos typedef __UINT_LEAST8_TYPE__ yytype_uint8;
   1206  1.1  christos #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
   1207  1.1  christos        && UINT_LEAST8_MAX <= INT_MAX)
   1208  1.1  christos typedef uint_least8_t yytype_uint8;
   1209  1.1  christos #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
   1210  1.1  christos typedef unsigned char yytype_uint8;
   1211  1.1  christos #else
   1212  1.1  christos typedef short yytype_uint8;
   1213  1.1  christos #endif
   1214  1.1  christos 
   1215  1.1  christos #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
   1216  1.1  christos typedef __UINT_LEAST16_TYPE__ yytype_uint16;
   1217  1.1  christos #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
   1218  1.1  christos        && UINT_LEAST16_MAX <= INT_MAX)
   1219  1.1  christos typedef uint_least16_t yytype_uint16;
   1220  1.1  christos #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
   1221  1.1  christos typedef unsigned short yytype_uint16;
   1222  1.1  christos #else
   1223  1.1  christos typedef int yytype_uint16;
   1224  1.1  christos #endif
   1225  1.1  christos 
   1226  1.1  christos #ifndef YYPTRDIFF_T
   1227  1.1  christos # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
   1228  1.1  christos #  define YYPTRDIFF_T __PTRDIFF_TYPE__
   1229  1.1  christos #  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
   1230  1.1  christos # elif defined PTRDIFF_MAX
   1231  1.1  christos #  ifndef ptrdiff_t
   1232  1.1  christos #   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
   1233  1.1  christos #  endif
   1234  1.1  christos #  define YYPTRDIFF_T ptrdiff_t
   1235  1.1  christos #  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
   1236  1.1  christos # else
   1237  1.1  christos #  define YYPTRDIFF_T long
   1238  1.1  christos #  define YYPTRDIFF_MAXIMUM LONG_MAX
   1239  1.1  christos # endif
   1240  1.1  christos #endif
   1241  1.1  christos 
   1242  1.1  christos #ifndef YYSIZE_T
   1243  1.1  christos # ifdef __SIZE_TYPE__
   1244  1.1  christos #  define YYSIZE_T __SIZE_TYPE__
   1245  1.1  christos # elif defined size_t
   1246  1.1  christos #  define YYSIZE_T size_t
   1247  1.1  christos # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
   1248  1.1  christos #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
   1249  1.1  christos #  define YYSIZE_T size_t
   1250  1.1  christos # else
   1251  1.1  christos #  define YYSIZE_T unsigned
   1252  1.1  christos # endif
   1253  1.1  christos #endif
   1254  1.1  christos 
   1255  1.1  christos #define YYSIZE_MAXIMUM                                  \
   1256  1.1  christos   YY_CAST (YYPTRDIFF_T,                                 \
   1257  1.1  christos            (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
   1258  1.1  christos             ? YYPTRDIFF_MAXIMUM                         \
   1259  1.1  christos             : YY_CAST (YYSIZE_T, -1)))
   1260  1.1  christos 
   1261  1.1  christos #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
   1262  1.1  christos 
   1263  1.1  christos 
   1264  1.1  christos /* Stored state numbers (used for stacks). */
   1265  1.1  christos typedef yytype_int16 yy_state_t;
   1266  1.1  christos 
   1267  1.1  christos /* State numbers in computations.  */
   1268  1.1  christos typedef int yy_state_fast_t;
   1269  1.1  christos 
   1270  1.1  christos #ifndef YY_
   1271  1.1  christos # if defined YYENABLE_NLS && YYENABLE_NLS
   1272  1.1  christos #  if ENABLE_NLS
   1273  1.1  christos #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
   1274  1.1  christos #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
   1275  1.1  christos #  endif
   1276  1.1  christos # endif
   1277  1.1  christos # ifndef YY_
   1278  1.1  christos #  define YY_(Msgid) Msgid
   1279  1.1  christos # endif
   1280  1.1  christos #endif
   1281  1.1  christos 
   1282  1.1  christos 
   1283  1.1  christos #ifndef YY_ATTRIBUTE_PURE
   1284  1.1  christos # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
   1285  1.1  christos #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
   1286  1.1  christos # else
   1287  1.1  christos #  define YY_ATTRIBUTE_PURE
   1288  1.1  christos # endif
   1289  1.1  christos #endif
   1290  1.1  christos 
   1291  1.1  christos #ifndef YY_ATTRIBUTE_UNUSED
   1292  1.1  christos # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
   1293  1.1  christos #  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
   1294  1.1  christos # else
   1295  1.1  christos #  define YY_ATTRIBUTE_UNUSED
   1296  1.1  christos # endif
   1297  1.1  christos #endif
   1298  1.1  christos 
   1299  1.1  christos /* Suppress unused-variable warnings by "using" E.  */
   1300  1.1  christos #if ! defined lint || defined __GNUC__
   1301  1.1  christos # define YY_USE(E) ((void) (E))
   1302  1.1  christos #else
   1303  1.1  christos # define YY_USE(E) /* empty */
   1304  1.1  christos #endif
   1305  1.1  christos 
   1306  1.1  christos /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
   1307  1.1  christos #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
   1308  1.1  christos # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
   1309  1.1  christos #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
   1310  1.1  christos     _Pragma ("GCC diagnostic push")                                     \
   1311  1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
   1312  1.1  christos # else
   1313  1.1  christos #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
   1314  1.1  christos     _Pragma ("GCC diagnostic push")                                     \
   1315  1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
   1316  1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
   1317  1.1  christos # endif
   1318  1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
   1319  1.1  christos     _Pragma ("GCC diagnostic pop")
   1320  1.1  christos #else
   1321  1.1  christos # define YY_INITIAL_VALUE(Value) Value
   1322  1.1  christos #endif
   1323  1.1  christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1324  1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1325  1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
   1326  1.1  christos #endif
   1327  1.1  christos #ifndef YY_INITIAL_VALUE
   1328  1.1  christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
   1329  1.1  christos #endif
   1330  1.1  christos 
   1331  1.1  christos #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
   1332  1.1  christos # define YY_IGNORE_USELESS_CAST_BEGIN                          \
   1333  1.1  christos     _Pragma ("GCC diagnostic push")                            \
   1334  1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
   1335  1.1  christos # define YY_IGNORE_USELESS_CAST_END            \
   1336  1.1  christos     _Pragma ("GCC diagnostic pop")
   1337  1.1  christos #endif
   1338  1.1  christos #ifndef YY_IGNORE_USELESS_CAST_BEGIN
   1339  1.1  christos # define YY_IGNORE_USELESS_CAST_BEGIN
   1340  1.1  christos # define YY_IGNORE_USELESS_CAST_END
   1341  1.1  christos #endif
   1342  1.1  christos 
   1343  1.1  christos 
   1344  1.1  christos #define YY_ASSERT(E) ((void) (0 && (E)))
   1345  1.1  christos 
   1346  1.1  christos #if !defined yyoverflow
   1347  1.1  christos 
   1348  1.1  christos /* The parser invokes alloca or malloc; define the necessary symbols.  */
   1349  1.1  christos 
   1350  1.1  christos # ifdef YYSTACK_USE_ALLOCA
   1351  1.1  christos #  if YYSTACK_USE_ALLOCA
   1352  1.1  christos #   ifdef __GNUC__
   1353  1.1  christos #    define YYSTACK_ALLOC __builtin_alloca
   1354  1.1  christos #   elif defined __BUILTIN_VA_ARG_INCR
   1355  1.1  christos #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
   1356  1.1  christos #   elif defined _AIX
   1357  1.1  christos #    define YYSTACK_ALLOC __alloca
   1358  1.1  christos #   elif defined _MSC_VER
   1359  1.1  christos #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
   1360  1.1  christos #    define alloca _alloca
   1361  1.1  christos #   else
   1362  1.1  christos #    define YYSTACK_ALLOC alloca
   1363  1.1  christos #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
   1364  1.1  christos #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
   1365  1.1  christos       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
   1366  1.1  christos #     ifndef EXIT_SUCCESS
   1367  1.1  christos #      define EXIT_SUCCESS 0
   1368  1.1  christos #     endif
   1369  1.1  christos #    endif
   1370  1.1  christos #   endif
   1371  1.1  christos #  endif
   1372  1.1  christos # endif
   1373  1.1  christos 
   1374  1.1  christos # ifdef YYSTACK_ALLOC
   1375  1.1  christos    /* Pacify GCC's 'empty if-body' warning.  */
   1376  1.1  christos #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
   1377  1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
   1378  1.1  christos     /* The OS might guarantee only one guard page at the bottom of the stack,
   1379  1.1  christos        and a page size can be as small as 4096 bytes.  So we cannot safely
   1380  1.1  christos        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
   1381  1.1  christos        to allow for a few compiler-allocated temporary stack slots.  */
   1382  1.1  christos #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
   1383  1.1  christos #  endif
   1384  1.1  christos # else
   1385  1.1  christos #  define YYSTACK_ALLOC YYMALLOC
   1386  1.1  christos #  define YYSTACK_FREE YYFREE
   1387  1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
   1388  1.1  christos #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
   1389  1.1  christos #  endif
   1390  1.1  christos #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
   1391  1.1  christos        && ! ((defined YYMALLOC || defined malloc) \
   1392  1.1  christos              && (defined YYFREE || defined free)))
   1393  1.1  christos #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
   1394  1.1  christos #   ifndef EXIT_SUCCESS
   1395  1.1  christos #    define EXIT_SUCCESS 0
   1396  1.1  christos #   endif
   1397  1.1  christos #  endif
   1398  1.1  christos #  ifndef YYMALLOC
   1399  1.1  christos #   define YYMALLOC malloc
   1400  1.1  christos #   if ! defined malloc && ! defined EXIT_SUCCESS
   1401  1.1  christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
   1402  1.1  christos #   endif
   1403  1.1  christos #  endif
   1404  1.1  christos #  ifndef YYFREE
   1405  1.1  christos #   define YYFREE free
   1406  1.1  christos #   if ! defined free && ! defined EXIT_SUCCESS
   1407  1.1  christos void free (void *); /* INFRINGES ON USER NAME SPACE */
   1408  1.1  christos #   endif
   1409  1.1  christos #  endif
   1410  1.1  christos # endif
   1411  1.1  christos #endif /* !defined yyoverflow */
   1412  1.1  christos 
   1413  1.1  christos #if (! defined yyoverflow \
   1414  1.1  christos      && (! defined __cplusplus \
   1415  1.1  christos          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
   1416  1.1  christos 
   1417  1.1  christos /* A type that is properly aligned for any stack member.  */
   1418  1.1  christos union yyalloc
   1419  1.1  christos {
   1420  1.1  christos   yy_state_t yyss_alloc;
   1421  1.1  christos   YYSTYPE yyvs_alloc;
   1422  1.1  christos };
   1423  1.1  christos 
   1424  1.1  christos /* The size of the maximum gap between one aligned stack and the next.  */
   1425  1.1  christos # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
   1426  1.1  christos 
   1427  1.1  christos /* The size of an array large to enough to hold all stacks, each with
   1428  1.1  christos    N elements.  */
   1429  1.1  christos # define YYSTACK_BYTES(N) \
   1430  1.1  christos      ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
   1431  1.1  christos       + YYSTACK_GAP_MAXIMUM)
   1432  1.1  christos 
   1433  1.1  christos # define YYCOPY_NEEDED 1
   1434  1.1  christos 
   1435  1.1  christos /* Relocate STACK from its old location to the new one.  The
   1436  1.1  christos    local variables YYSIZE and YYSTACKSIZE give the old and new number of
   1437  1.1  christos    elements in the stack, and YYPTR gives the new location of the
   1438  1.1  christos    stack.  Advance YYPTR to a properly aligned location for the next
   1439  1.1  christos    stack.  */
   1440  1.1  christos # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
   1441  1.1  christos     do                                                                  \
   1442  1.1  christos       {                                                                 \
   1443  1.1  christos         YYPTRDIFF_T yynewbytes;                                         \
   1444  1.1  christos         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
   1445  1.1  christos         Stack = &yyptr->Stack_alloc;                                    \
   1446  1.1  christos         yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
   1447  1.1  christos         yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
   1448  1.1  christos       }                                                                 \
   1449  1.1  christos     while (0)
   1450  1.1  christos 
   1451  1.1  christos #endif
   1452  1.1  christos 
   1453  1.1  christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
   1454  1.1  christos /* Copy COUNT objects from SRC to DST.  The source and destination do
   1455  1.1  christos    not overlap.  */
   1456  1.1  christos # ifndef YYCOPY
   1457  1.1  christos #  if defined __GNUC__ && 1 < __GNUC__
   1458  1.1  christos #   define YYCOPY(Dst, Src, Count) \
   1459  1.1  christos       __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
   1460  1.1  christos #  else
   1461  1.1  christos #   define YYCOPY(Dst, Src, Count)              \
   1462  1.1  christos       do                                        \
   1463  1.1  christos         {                                       \
   1464  1.1  christos           YYPTRDIFF_T yyi;                      \
   1465  1.1  christos           for (yyi = 0; yyi < (Count); yyi++)   \
   1466  1.1  christos             (Dst)[yyi] = (Src)[yyi];            \
   1467  1.1  christos         }                                       \
   1468  1.1  christos       while (0)
   1469  1.1  christos #  endif
   1470  1.1  christos # endif
   1471  1.1  christos #endif /* !YYCOPY_NEEDED */
   1472  1.1  christos 
   1473  1.1  christos /* YYFINAL -- State number of the termination state.  */
   1474  1.1  christos #define YYFINAL  156
   1475  1.1  christos /* YYLAST -- Last index in YYTABLE.  */
   1476  1.1  christos #define YYLAST   1309
   1477  1.1  christos 
   1478  1.1  christos /* YYNTOKENS -- Number of terminals.  */
   1479  1.1  christos #define YYNTOKENS  174
   1480  1.1  christos /* YYNNTS -- Number of nonterminals.  */
   1481  1.1  christos #define YYNNTS  47
   1482  1.1  christos /* YYNRULES -- Number of rules.  */
   1483  1.1  christos #define YYNRULES  354
   1484  1.1  christos /* YYNSTATES -- Number of states.  */
   1485  1.1  christos #define YYNSTATES  1021
   1486  1.1  christos 
   1487  1.1  christos /* YYMAXUTOK -- Last valid token kind.  */
   1488  1.1  christos #define YYMAXUTOK   428
   1489  1.1  christos 
   1490  1.1  christos 
   1491  1.1  christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
   1492  1.1  christos    as returned by yylex, with out-of-bounds checking.  */
   1493  1.1  christos #define YYTRANSLATE(YYX)                                \
   1494  1.1  christos   (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
   1495  1.1  christos    ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
   1496  1.1  christos    : YYSYMBOL_YYUNDEF)
   1497  1.1  christos 
   1498  1.1  christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
   1499  1.1  christos    as returned by yylex.  */
   1500  1.1  christos static const yytype_uint8 yytranslate[] =
   1501  1.1  christos {
   1502  1.1  christos        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1503  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1504  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1505  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1506  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1507  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1508  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1509  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1510  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1511  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1512  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1513  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1514  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1515  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1516  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1517  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1518  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1519  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1520  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1521  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1522  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1523  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1524  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1525  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1526  1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1527  1.1  christos        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
   1528  1.1  christos        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
   1529  1.1  christos       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
   1530  1.1  christos       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
   1531  1.1  christos       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
   1532  1.1  christos       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
   1533  1.1  christos       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
   1534  1.1  christos       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
   1535  1.1  christos       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
   1536  1.1  christos       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
   1537  1.1  christos       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
   1538  1.1  christos      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
   1539  1.1  christos      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
   1540  1.1  christos      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
   1541  1.1  christos      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
   1542  1.1  christos      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
   1543  1.1  christos      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
   1544  1.1  christos      165,   166,   167,   168,   169,   170,   171,   172,   173
   1545  1.1  christos };
   1546  1.1  christos 
   1547  1.1  christos #if YYDEBUG
   1548  1.1  christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
   1549  1.1  christos static const yytype_int16 yyrline[] =
   1550  1.1  christos {
   1551  1.1  christos        0,   648,   648,   649,   661,   663,   696,   723,   734,   738,
   1552  1.1  christos      776,   796,   801,   811,   821,   826,   831,   849,   867,   881,
   1553  1.1  christos      894,   910,   932,   950,   975,   997,  1002,  1012,  1023,  1034,
   1554  1.1  christos     1048,  1063,  1079,  1095,  1106,  1120,  1146,  1164,  1169,  1175,
   1555  1.1  christos     1187,  1198,  1209,  1220,  1231,  1242,  1253,  1279,  1293,  1303,
   1556  1.1  christos     1348,  1367,  1378,  1389,  1400,  1411,  1422,  1438,  1455,  1471,
   1557  1.1  christos     1482,  1493,  1526,  1537,  1550,  1561,  1600,  1610,  1620,  1640,
   1558  1.1  christos     1650,  1660,  1671,  1685,  1696,  1709,  1719,  1731,  1746,  1757,
   1559  1.1  christos     1763,  1785,  1796,  1807,  1815,  1841,  1871,  1900,  1931,  1945,
   1560  1.1  christos     1956,  1970,  2004,  2022,  2047,  2059,  2077,  2088,  2099,  2110,
   1561  1.1  christos     2123,  2134,  2145,  2156,  2167,  2178,  2211,  2221,  2234,  2254,
   1562  1.1  christos     2265,  2276,  2289,  2302,  2313,  2324,  2335,  2346,  2356,  2367,
   1563  1.1  christos     2378,  2390,  2401,  2412,  2426,  2439,  2451,  2463,  2474,  2485,
   1564  1.1  christos     2496,  2508,  2520,  2531,  2542,  2553,  2563,  2569,  2575,  2581,
   1565  1.1  christos     2587,  2593,  2599,  2605,  2611,  2617,  2623,  2634,  2645,  2656,
   1566  1.1  christos     2667,  2678,  2689,  2700,  2706,  2720,  2731,  2742,  2753,  2764,
   1567  1.1  christos     2774,  2787,  2795,  2803,  2827,  2838,  2849,  2860,  2871,  2882,
   1568  1.1  christos     2894,  2907,  2916,  2927,  2938,  2950,  2961,  2972,  2983,  2997,
   1569  1.1  christos     3009,  3035,  3065,  3076,  3101,  3138,  3166,  3191,  3202,  3213,
   1570  1.1  christos     3224,  3250,  3269,  3283,  3307,  3319,  3338,  3384,  3421,  3437,
   1571  1.1  christos     3456,  3470,  3489,  3505,  3513,  3522,  3533,  3545,  3559,  3567,
   1572  1.1  christos     3577,  3589,  3600,  3610,  3621,  3632,  3638,  3643,  3648,  3654,
   1573  1.1  christos     3662,  3668,  3674,  3680,  3686,  3692,  3700,  3714,  3718,  3728,
   1574  1.1  christos     3732,  3737,  3742,  3747,  3754,  3758,  3765,  3769,  3774,  3779,
   1575  1.1  christos     3787,  3791,  3798,  3802,  3810,  3815,  3821,  3830,  3835,  3841,
   1576  1.1  christos     3847,  3853,  3862,  3865,  3869,  3876,  3879,  3883,  3890,  3895,
   1577  1.1  christos     3901,  3907,  3913,  3918,  3926,  3929,  3936,  3939,  3946,  3950,
   1578  1.1  christos     3954,  3958,  3965,  3968,  3975,  3980,  3987,  3994,  4006,  4010,
   1579  1.1  christos     4014,  4021,  4024,  4034,  4037,  4046,  4052,  4061,  4065,  4072,
   1580  1.1  christos     4076,  4080,  4084,  4091,  4095,  4102,  4110,  4118,  4126,  4134,
   1581  1.1  christos     4141,  4148,  4156,  4166,  4171,  4176,  4181,  4189,  4192,  4196,
   1582  1.1  christos     4205,  4212,  4219,  4226,  4241,  4247,  4260,  4273,  4291,  4298,
   1583  1.1  christos     4305,  4315,  4328,  4332,  4336,  4340,  4347,  4353,  4359,  4365,
   1584  1.1  christos     4375,  4384,  4386,  4388,  4392,  4400,  4404,  4411,  4417,  4423,
   1585  1.1  christos     4427,  4431,  4435,  4441,  4447,  4451,  4455,  4459,  4463,  4467,
   1586  1.1  christos     4471,  4475,  4479,  4483,  4487
   1587  1.1  christos };
   1588  1.1  christos #endif
   1589  1.1  christos 
   1590  1.1  christos /** Accessing symbol of state STATE.  */
   1591  1.1  christos #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
   1592  1.1  christos 
   1593  1.1  christos #if YYDEBUG || 0
   1594  1.1  christos /* The user-facing name of the symbol whose (internal) number is
   1595  1.1  christos    YYSYMBOL.  No bounds checking.  */
   1596  1.1  christos static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
   1597  1.1  christos 
   1598  1.1  christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
   1599  1.1  christos    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
   1600  1.1  christos static const char *const yytname[] =
   1601  1.1  christos {
   1602  1.1  christos   "\"end of file\"", "error", "\"invalid token\"", "BYTEOP16P",
   1603  1.1  christos   "BYTEOP16M", "BYTEOP1P", "BYTEOP2P", "BYTEOP3P", "BYTEUNPACK",
   1604  1.1  christos   "BYTEPACK", "PACK", "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX",
   1605  1.1  christos   "EXTRACT", "DEPOSIT", "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS",
   1606  1.1  christos   "LINK", "UNLINK", "REG", "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO",
   1607  1.1  christos   "REG_A_DOUBLE_ONE", "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L",
   1608  1.1  christos   "A_ONE_DOT_H", "HALF_REG", "NOP", "RTI", "RTS", "RTX", "RTN", "RTE",
   1609  1.1  christos   "HLT", "IDLE", "STI", "CLI", "CSYNC", "SSYNC", "EMUEXCPT", "RAISE",
   1610  1.1  christos   "EXCPT", "LSETUP", "LOOP", "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT",
   1611  1.1  christos   "JUMP", "JUMP_DOT_S", "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA",
   1612  1.1  christos   "BANG", "AMPERSAND", "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS",
   1613  1.1  christos   "STAR", "SLASH", "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR",
   1614  1.1  christos   "_PLUS_BAR_PLUS", "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS",
   1615  1.1  christos   "_MINUS_BAR_MINUS", "_MINUS_MINUS", "_PLUS_PLUS", "SHIFT", "LSHIFT",
   1616  1.1  christos   "ASHIFT", "BXORSHIFT", "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT",
   1617  1.1  christos   "LESS_LESS", "GREATER_GREATER", "_GREATER_GREATER_GREATER",
   1618  1.1  christos   "_LESS_LESS_ASSIGN", "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN",
   1619  1.1  christos   "_STAR_ASSIGN", "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN",
   1620  1.1  christos   "_MINUS_ASSIGN", "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN",
   1621  1.1  christos   "_ASSIGN_ASSIGN", "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV",
   1622  1.1  christos   "FLUSH", "IFLUSH", "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET",
   1623  1.1  christos   "ASL", "ASR", "B", "W", "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV",
   1624  1.1  christos   "X", "Z", "M", "MMOD", "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V",
   1625  1.1  christos   "LO", "HI", "BITTGL", "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL",
   1626  1.1  christos   "DBGAH", "DBGHALT", "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY",
   1627  1.1  christos   "COLON", "SEMICOLON", "RPAREN", "LPAREN", "LBRACK", "RBRACK",
   1628  1.1  christos   "STATUS_REG", "MNOP", "SYMBOL", "NUMBER", "GOT", "GOT17M4",
   1629  1.1  christos   "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept", "statement", "asm",
   1630  1.1  christos   "asm_1", "REG_A", "opt_mode", "asr_asl", "sco", "asr_asl_0", "amod0",
   1631  1.1  christos   "amod1", "amod2", "xpmod", "xpmod1", "vsmod", "vmod", "smod",
   1632  1.1  christos   "searchmod", "aligndir", "byteop_mod", "c_align", "w32_or_nothing",
   1633  1.1  christos   "iu_or_nothing", "reg_with_predec", "reg_with_postinc", "min_max",
   1634  1.1  christos   "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op", "a_assign",
   1635  1.1  christos   "a_minusassign", "a_plusassign", "assign_macfunc", "a_macfunc",
   1636  1.1  christos   "multiply_halfregs", "cc_op", "ccstat", "symbol", "any_gotrel", "got",
   1637  1.1  christos   "got_or_expr", "pltpc", "eterm", "expr", "expr_1", YY_NULLPTR
   1638  1.1  christos };
   1639  1.1  christos 
   1640  1.1  christos static const char *
   1641  1.1  christos yysymbol_name (yysymbol_kind_t yysymbol)
   1642  1.1  christos {
   1643  1.1  christos   return yytname[yysymbol];
   1644  1.1  christos }
   1645  1.1  christos #endif
   1646  1.1  christos 
   1647  1.1  christos #define YYPACT_NINF (-869)
   1648  1.1  christos 
   1649  1.1  christos #define yypact_value_is_default(Yyn) \
   1650  1.1  christos   ((Yyn) == YYPACT_NINF)
   1651  1.1  christos 
   1652  1.1  christos #define YYTABLE_NINF (-214)
   1653  1.1  christos 
   1654  1.1  christos #define yytable_value_is_error(Yyn) \
   1655  1.1  christos   0
   1656  1.1  christos 
   1657  1.1  christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
   1658  1.1  christos    STATE-NUM.  */
   1659  1.1  christos static const yytype_int16 yypact[] =
   1660  1.1  christos {
   1661  1.1  christos      862,  -869,   -96,   -14,  -869,   653,   618,  -869,  -869,   -22,
   1662  1.1  christos       -7,    20,    71,    85,  -869,  -869,  -869,  -869,  -869,  -869,
   1663  1.1  christos     -869,  -869,    58,   176,  -869,  -869,  -869,   -14,   -14,    48,
   1664  1.1  christos      -14,   167,   231,  -869,   327,   -14,   -14,   376,  -869,    53,
   1665  1.1  christos       56,    94,    96,   120,   126,   114,    64,   139,   144,   419,
   1666  1.1  christos      115,   171,   185,   199,   207,   230,  -869,   324,   250,   258,
   1667  1.1  christos       43,   358,    25,   419,  -869,   387,  -869,   -39,    13,   325,
   1668  1.1  christos      223,   245,   390,   300,  -869,  -869,   443,   -14,   -14,   -14,
   1669  1.1  christos     -869,  -869,  -869,  -869,  -869,   582,   152,   170,   178,   496,
   1670  1.1  christos      453,   203,   259,     7,  -869,  -869,  -869,    26,   -46,   448,
   1671  1.1  christos      455,   458,   464,   111,  -869,  -869,  -869,  -869,   -14,   463,
   1672  1.1  christos      -10,  -869,    -9,  -869,    32,  -869,  -869,   308,  -869,  -869,
   1673  1.1  christos      102,  -869,  -869,   479,   492,   497,  -869,   505,  -869,   508,
   1674  1.1  christos     -869,   523,  -869,  -869,  -869,   526,   541,   561,  -869,   530,
   1675  1.1  christos      567,   581,   586,   602,   611,   625,  -869,  -869,   549,   632,
   1676  1.1  christos       57,   589,   221,   172,   637,   614,  -869,  1008,  -869,  -869,
   1677  1.1  christos     -869,   365,     4,  -869,   584,   394,   365,   365,   365,   498,
   1678  1.1  christos      365,    -6,   -14,  -869,  -869,   507,  -869,  -869,   301,   510,
   1679  1.1  christos      519,  -869,  -869,   524,   -14,   -14,   -14,   -14,   -14,   -14,
   1680  1.1  christos      -14,   -14,   -14,   -14,  -869,  -869,  -869,  -869,  -869,  -869,
   1681  1.1  christos      548,   554,   563,   576,   583,  -869,  -869,  -869,   587,   592,
   1682  1.1  christos      597,   601,  -869,   598,   673,   -19,   279,   293,  -869,  -869,
   1683  1.1  christos      663,   698,   719,   723,   728,   594,   599,    63,   733,   691,
   1684  1.1  christos      603,   604,   300,   605,  -869,  -869,  -869,   606,  -869,   225,
   1685  1.1  christos      607,   271,  -869,   608,  -869,  -869,  -869,  -869,  -869,  -869,
   1686  1.1  christos      609,   610,   739,   208,   -25,   676,   538,   740,   741,   615,
   1687  1.1  christos      394,  -869,   300,  -869,   617,   680,   620,   709,   612,   621,
   1688  1.1  christos      710,   626,   627,   -41,    -3,    14,    17,   628,   281,   349,
   1689  1.1  christos     -869,   631,   633,   634,   636,   638,   639,   640,   641,   690,
   1690  1.1  christos      -14,    62,   767,   -14,  -869,  -869,  -869,   769,   -14,   643,
   1691  1.1  christos      644,  -869,    -8,   507,  -869,   773,   764,   646,   647,   648,
   1692  1.1  christos      651,   365,   652,   -14,   -14,   -14,   675,  -869,   666,  -869,
   1693  1.1  christos      134,   166,   276,   -14,  -869,   630,   642,  -869,   483,   368,
   1694  1.1  christos      368,  -869,  -869,   532,   532,   780,   786,   787,   788,   779,
   1695  1.1  christos      790,   791,   792,   793,   794,   795,   659,  -869,  -869,  -869,
   1696  1.1  christos     -869,   -14,   -14,   -14,   797,   798,   318,  -869,   799,  -869,
   1697  1.1  christos     -869,   662,   664,   667,   669,   670,   671,   806,   807,   765,
   1698  1.1  christos      340,   390,   390,   245,   677,   384,   365,   809,   811,   682,
   1699  1.1  christos      493,  -869,   706,   297,   317,   319,   815,   365,   365,   365,
   1700  1.1  christos      816,   817,   226,  -869,  -869,  -869,  -869,   707,   818,    37,
   1701  1.1  christos      -14,   -14,   -14,   824,   812,   688,   692,   823,   245,   693,
   1702  1.1  christos      694,   -14,   827,  -869,   828,  -869,  -869,   830,   831,   833,
   1703  1.1  christos      685,  -869,  -869,  -869,  -869,  -869,  -869,   -14,   697,   842,
   1704  1.1  christos      -14,   704,   -14,   -14,   -14,   844,   -14,   -14,   -14,  -869,
   1705  1.1  christos      845,   712,   774,   -14,   714,   182,   715,   716,   785,  -869,
   1706  1.1  christos     1008,  -869,  -869,   724,  -869,   365,   365,   849,   853,   766,
   1707  1.1  christos      100,  -869,  -869,  -869,   729,   763,   796,  -869,   800,  -869,
   1708  1.1  christos      829,   832,   300,   768,   771,   776,   777,   770,   775,   781,
   1709  1.1  christos      783,   784,  -869,  -869,  -869,   903,   662,   664,   662,   -58,
   1710  1.1  christos      -15,   772,   782,   789,    33,  -869,   802,  -869,   902,   907,
   1711  1.1  christos      910,   472,   281,   445,   924,  -869,   801,  -869,   925,   -14,
   1712  1.1  christos      803,   804,   808,   813,   926,   805,   810,   819,   820,   820,
   1713  1.1  christos     -869,  -869,   820,   820,   821,  -869,  -869,  -869,   826,   825,
   1714  1.1  christos      834,   835,   836,   837,   838,   839,   840,  -869,   840,   841,
   1715  1.1  christos      843,   917,   918,   562,   859,  -869,   919,   860,   864,   861,
   1716  1.1  christos      865,   868,   869,  -869,   846,   863,   870,   872,   866,   908,
   1717  1.1  christos      909,   911,   914,   912,   913,   915,  -869,   857,   931,   916,
   1718  1.1  christos      867,   934,   871,   875,   876,   944,   920,   -14,   891,   921,
   1719  1.1  christos      922,  -869,  -869,   365,  -869,  -869,   927,  -869,   928,   929,
   1720  1.1  christos        5,    10,  -869,   964,   -14,   -14,   -14,   968,   959,   970,
   1721  1.1  christos      961,   981,   933,  -869,  -869,  -869,  1050,   119,  -869,  1052,
   1722  1.1  christos      559,  -869,  -869,  -869,  1054,   930,   211,   247,   932,  -869,
   1723  1.1  christos      664,   662,  -869,  -869,   -14,   923,  1056,   -14,   935,   936,
   1724  1.1  christos     -869,   937,   938,  -869,   941,  -869,  -869,  1057,  1058,  1060,
   1725  1.1  christos      989,  -869,  -869,  -869,   953,  -869,  -869,  -869,  -869,   -14,
   1726  1.1  christos      -14,   940,  1059,  1061,  -869,   546,   365,   365,   967,  -869,
   1727  1.1  christos     -869,  1063,  -869,  -869,   840,  1070,   942,  -869,  1003,  1082,
   1728  1.1  christos      -14,  -869,  -869,  -869,  -869,  1011,  1084,  1014,  1015,   278,
   1729  1.1  christos     -869,  -869,  -869,   365,  -869,  -869,  -869,   952,  -869,   984,
   1730  1.1  christos      216,   956,   954,  1091,  1093,  -869,  -869,   287,   365,   365,
   1731  1.1  christos      962,   365,  -869,  -869,   365,  -869,   365,   965,   969,   971,
   1732  1.1  christos      972,   973,   974,   975,   976,   977,   -14,  1035,  -869,  -869,
   1733  1.1  christos     -869,   978,  1036,   979,   980,  1045,  -869,  1001,  -869,  1019,
   1734  1.1  christos     -869,  -869,  -869,  -869,   982,   598,   983,   985,   598,  1055,
   1735  1.1  christos     -869,   407,  -869,  1051,   990,   991,   390,   995,  1004,  1005,
   1736  1.1  christos      574,  -869,  1006,  1007,  1016,  1017,  1012,  1018,  1020,  1021,
   1737  1.1  christos     -869,  1022,  -869,   390,  1075,  -869,  1151,  -869,  1144,  1155,
   1738  1.1  christos     -869,  -869,  1023,  -869,  1024,  1025,  1026,  1158,  1164,   -14,
   1739  1.1  christos     1165,  -869,  -869,  -869,  1166,  -869,  -869,  -869,  1167,   365,
   1740  1.1  christos      -14,  1168,  1170,  1171,  -869,  -869,   940,   598,  1030,  1037,
   1741  1.1  christos     1172,  -869,  1174,  -869,  -869,  1169,  1040,  1041,   598,  -869,
   1742  1.1  christos      598,   598,  -869,   -14,  -869,  -869,  -869,  -869,   365,  -869,
   1743  1.1  christos      664,   300,  -869,  -869,  -869,  1042,  1043,   664,  -869,  -869,
   1744  1.1  christos     -869,   372,  1180,  -869,  1135,  -869,   300,  1182,  -869,  -869,
   1745  1.1  christos     -869,   940,  -869,  1183,  1184,  1053,  1048,  1062,  1128,  1065,
   1746  1.1  christos     1064,  1066,  1068,  1067,  1071,  1072,  -869,  -869,  1081,  -869,
   1747  1.1  christos      596,   635,  1145,  -869,  -869,  -869,  -869,  -869,  -869,  1147,
   1748  1.1  christos     -869,  -869,  -869,  -869,  -869,  1073,  1076,  1074,  1179,  -869,
   1749  1.1  christos     1126,  -869,  1077,  1078,   -14,   619,  1121,   -14,  -869,  1094,
   1750  1.1  christos     1079,   -14,   -14,   -14,  1083,  1195,  1196,  1190,   365,  -869,
   1751  1.1  christos     1200,  -869,  1162,   -14,   -14,   -14,  1079,  -869,  -869,  -869,
   1752  1.1  christos     -869,  1085,   954,  1086,  1087,  1102,  -869,  1088,  1089,  1090,
   1753  1.1  christos     -869,  1080,   843,  -869,   843,  1092,  1218,  -869,  1095,  1097,
   1754  1.1  christos     -869,  -869,  -869,  -869,  -869,  1096,  1098,  1099,  1100,   350,
   1755  1.1  christos     -869,  -869,  -869,  -869,  1101,  1215,  1220,  -869,   595,  -869,
   1756  1.1  christos       84,  -869,   591,  -869,  -869,  -869,   312,   375,  1208,  1105,
   1757  1.1  christos     1106,   378,   402,   403,   418,   426,   460,   476,   481,   616,
   1758  1.1  christos     -869,   119,  -869,  1107,   -14,   -14,  1119,  -869,  1123,  -869,
   1759  1.1  christos     1120,  -869,  1130,  -869,  1131,  -869,  1133,  -869,  1134,  -869,
   1760  1.1  christos     1136,  -869,  1110,  1112,  1188,  1113,  1114,  1115,  1116,  1117,
   1761  1.1  christos     1118,  1122,  1124,  1125,  1127,  -869,  -869,  1245,  1079,  1079,
   1762  1.1  christos     -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,
   1763  1.1  christos     -869
   1764  1.1  christos };
   1765  1.1  christos 
   1766  1.1  christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
   1767  1.1  christos    Performed when YYTABLE does not specify something else to do.  Zero
   1768  1.1  christos    means the default is an error.  */
   1769  1.1  christos static const yytype_int16 yydefact[] =
   1770  1.1  christos {
   1771  1.1  christos        0,     7,     0,     0,   204,     0,     0,   227,   228,     0,
   1772  1.1  christos        0,     0,     0,     0,   136,   138,   137,   139,   140,   141,
   1773  1.1  christos      221,   142,     0,     0,   143,   144,   145,     0,     0,     0,
   1774  1.1  christos        0,     0,     0,    11,     0,     0,     0,     0,   215,     0,
   1775  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   1776  1.1  christos        0,     0,     0,     0,     0,     0,   220,   216,     0,     0,
   1777  1.1  christos        0,     0,     0,     0,     8,     0,     3,     0,     0,     0,
   1778  1.1  christos        0,     0,     0,   229,   314,    79,     0,     0,     0,     0,
   1779  1.1  christos      330,   338,   339,   354,   203,   343,     0,     0,     0,     0,
   1780  1.1  christos        0,     0,     0,   322,   323,   325,   324,     0,     0,     0,
   1781  1.1  christos        0,     0,     0,     0,   147,   146,   152,   153,     0,     0,
   1782  1.1  christos      338,   212,   338,   214,     0,   155,   156,   339,   158,   157,
   1783  1.1  christos        0,   160,   159,     0,     0,     0,   174,     0,   172,     0,
   1784  1.1  christos      176,     0,   178,   226,   225,     0,     0,     0,   322,     0,
   1785  1.1  christos        0,     0,     0,     0,     0,     0,   218,   217,     0,     0,
   1786  1.1  christos        0,     0,     0,   307,     0,     0,     1,     0,     4,   310,
   1787  1.1  christos      311,   312,     0,    45,     0,     0,     0,     0,     0,     0,
   1788  1.1  christos        0,    44,     0,   318,    48,   281,   320,   319,     0,     9,
   1789  1.1  christos        0,   341,   342,     0,     0,     0,     0,     0,     0,     0,
   1790  1.1  christos        0,     0,     0,     0,   167,   170,   168,   169,   165,   166,
   1791  1.1  christos        0,     0,     0,     0,     0,   278,   279,   280,     0,     0,
   1792  1.1  christos        0,    80,    82,   252,     0,   252,     0,     0,   287,   288,
   1793  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,   313,
   1794  1.1  christos        0,     0,   229,   255,    62,    58,    56,    60,    61,    81,
   1795  1.1  christos        0,     0,    83,     0,   327,   326,    26,    14,    27,    15,
   1796  1.1  christos        0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
   1797  1.1  christos        0,   317,   229,    47,     0,   208,     0,     0,     0,     0,
   1798  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,   307,   307,
   1799  1.1  christos      329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   1800  1.1  christos        0,     0,     0,     0,   294,   293,   309,   308,     0,     0,
   1801  1.1  christos        0,   328,     0,   281,   202,     0,     0,    37,    25,     0,
   1802  1.1  christos        0,     0,     0,     0,     0,     0,     0,    39,     0,    55,
   1803  1.1  christos        0,     0,     0,     0,   340,   351,   353,   346,   352,   348,
   1804  1.1  christos      347,   344,   345,   349,   350,     0,     0,     0,     0,     0,
   1805  1.1  christos        0,     0,     0,     0,     0,     0,   293,   289,   290,   291,
   1806  1.1  christos      292,     0,     0,     0,     0,     0,     0,    52,     0,    46,
   1807  1.1  christos      164,   258,   264,     0,     0,     0,     0,     0,     0,     0,
   1808  1.1  christos        0,     0,     0,     0,     0,   307,     0,     0,     0,    85,
   1809  1.1  christos        0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
   1810  1.1  christos        0,     0,     0,   109,   119,   120,   118,     0,     0,     0,
   1811  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   1812  1.1  christos       84,     0,     0,   148,     0,   337,   149,     0,     0,     0,
   1813  1.1  christos        0,   173,   171,   175,   177,   154,   308,     0,     0,   308,
   1814  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,   219,
   1815  1.1  christos        0,   134,     0,     0,     0,     0,     0,     0,     0,   285,
   1816  1.1  christos        0,     6,    59,     0,   321,     0,     0,     0,     0,     0,
   1817  1.1  christos        0,    90,   104,    99,     0,     0,     0,   233,     0,   232,
   1818  1.1  christos        0,     0,   229,     0,     0,     0,     0,     0,     0,     0,
   1819  1.1  christos        0,     0,    78,    66,    67,     0,   258,   264,   258,   242,
   1820  1.1  christos      244,     0,     0,     0,     0,   163,     0,    24,     0,     0,
   1821  1.1  christos        0,     0,   307,   307,     0,   312,     0,   315,   308,     0,
   1822  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,   283,   283,
   1823  1.1  christos       73,    74,   283,   283,     0,    75,    69,    70,     0,     0,
   1824  1.1  christos        0,     0,     0,     0,     0,     0,   266,   106,   266,     0,
   1825  1.1  christos      244,     0,     0,   307,     0,   316,     0,     0,   209,     0,
   1826  1.1  christos        0,     0,     0,   286,     0,     0,     0,     0,     0,     0,
   1827  1.1  christos        0,     0,     0,     0,     0,     0,   131,     0,     0,   132,
   1828  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   1829  1.1  christos        0,   100,    88,     0,   114,   116,    40,   282,     0,     0,
   1830  1.1  christos        0,     0,    10,     0,     0,     0,     0,     0,     0,     0,
   1831  1.1  christos        0,     0,     0,    91,   105,   108,     0,   236,    51,     0,
   1832  1.1  christos        0,    35,   254,   253,     0,     0,     0,     0,     0,   103,
   1833  1.1  christos      264,   258,   115,   117,     0,     0,   308,     0,     0,     0,
   1834  1.1  christos       12,     0,   339,   335,     0,   336,   197,     0,     0,     0,
   1835  1.1  christos        0,   256,   257,    57,     0,    76,    77,    71,    72,     0,
   1836  1.1  christos        0,     0,     0,     0,    41,     0,     0,     0,     0,    92,
   1837  1.1  christos      107,     0,    38,   101,   266,   308,     0,    13,     0,     0,
   1838  1.1  christos        0,   151,   150,   162,   161,     0,     0,     0,     0,     0,
   1839  1.1  christos      127,   125,   126,     0,   224,   223,   222,     0,   130,     0,
   1840  1.1  christos        0,     0,     0,     0,     0,   190,     5,     0,     0,     0,
   1841  1.1  christos        0,     0,   230,   231,     0,   313,     0,     0,     0,     0,
   1842  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,   237,   238,
   1843  1.1  christos      239,     0,     0,     0,     0,     0,   259,     0,   260,     0,
   1844  1.1  christos      261,   265,   102,    93,     0,   252,     0,     0,   252,     0,
   1845  1.1  christos      195,     0,   196,     0,     0,     0,     0,     0,     0,     0,
   1846  1.1  christos        0,   121,     0,     0,     0,     0,     0,     0,     0,     0,
   1847  1.1  christos       89,     0,   186,     0,   205,   210,     0,   179,     0,     0,
   1848  1.1  christos      182,   183,     0,   135,     0,     0,     0,     0,     0,     0,
   1849  1.1  christos        0,   201,   191,   184,     0,   199,    54,    53,     0,     0,
   1850  1.1  christos        0,     0,     0,     0,    33,   110,     0,   252,    96,     0,
   1851  1.1  christos        0,   243,     0,   245,   246,     0,     0,     0,   252,   194,
   1852  1.1  christos      252,   252,   187,     0,   331,   332,   333,   334,     0,    28,
   1853  1.1  christos      264,   229,   284,   129,   128,     0,     0,   264,    95,    42,
   1854  1.1  christos       43,     0,     0,   267,     0,   189,   229,     0,   180,   192,
   1855  1.1  christos      181,     0,   133,     0,     0,     0,     0,     0,     0,     0,
   1856  1.1  christos        0,     0,     0,     0,     0,     0,   122,    98,     0,    68,
   1857  1.1  christos        0,     0,     0,   263,   262,   193,   188,   185,    65,     0,
   1858  1.1  christos       36,    87,   234,   235,    94,     0,     0,     0,     0,    86,
   1859  1.1  christos      206,   123,     0,     0,     0,     0,     0,     0,   124,     0,
   1860  1.1  christos      272,     0,     0,     0,     0,     0,     0,     0,     0,   112,
   1861  1.1  christos        0,   111,     0,     0,     0,     0,   272,   268,   271,   270,
   1862  1.1  christos      269,     0,     0,     0,     0,     0,    63,     0,     0,     0,
   1863  1.1  christos       97,   247,   244,    20,   244,     0,     0,   207,     0,     0,
   1864  1.1  christos       18,    19,   200,   198,    64,     0,    30,     0,     0,   236,
   1865  1.1  christos       23,    22,    21,   113,     0,     0,     0,   273,     0,    29,
   1866  1.1  christos        0,    31,     0,    32,   240,   241,     0,     0,     0,     0,
   1867  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   1868  1.1  christos      249,   236,   248,     0,     0,     0,     0,   275,     0,   274,
   1869  1.1  christos        0,   296,     0,   298,     0,   297,     0,   295,     0,   303,
   1870  1.1  christos        0,   304,     0,     0,     0,     0,     0,     0,     0,     0,
   1871  1.1  christos        0,     0,     0,     0,     0,   251,   250,     0,   272,   272,
   1872  1.1  christos      276,   277,   300,   302,   301,   299,   305,   306,    34,    16,
   1873  1.1  christos       17
   1874  1.1  christos };
   1875  1.1  christos 
   1876  1.1  christos /* YYPGOTO[NTERM-NUM].  */
   1877  1.1  christos static const yytype_int16 yypgoto[] =
   1878  1.1  christos {
   1879  1.1  christos     -869,  -869,  -869,  -133,    41,  -216,  -733,  -868,   313,  -869,
   1880  1.1  christos     -509,  -869,  -198,  -869,  -458,  -460,  -515,  -869,  -804,  -869,
   1881  1.1  christos     -869,   986,    23,  -869,   -31,  -869,   421,  -205,  -869,  -869,
   1882  1.1  christos     -253,     2,    22,  -171,   987,  -206,   -56,    46,  -869,   -17,
   1883  1.1  christos     -869,  -869,  -869,  1247,  -869,   -27,     0
   1884  1.1  christos };
   1885  1.1  christos 
   1886  1.1  christos /* YYDEFGOTO[NTERM-NUM].  */
   1887  1.1  christos static const yytype_int16 yydefgoto[] =
   1888  1.1  christos {
   1889  1.1  christos        0,    65,    66,    67,   370,   179,   751,   721,   957,   608,
   1890  1.1  christos      611,   940,   357,   381,   495,   497,   659,   911,   916,   949,
   1891  1.1  christos      230,   319,   645,    69,   126,   231,   354,   298,   951,   953,
   1892  1.1  christos      299,   371,   372,    72,    73,    74,   177,    98,    75,    82,
   1893  1.1  christos      817,   633,   634,   118,    83,    84,    85
   1894  1.1  christos };
   1895  1.1  christos 
   1896  1.1  christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
   1897  1.1  christos    positive, shift that token.  If negative, reduce the rule whose
   1898  1.1  christos    number is the opposite.  If YYTABLE_NINF, syntax error.  */
   1899  1.1  christos static const yytype_int16 yytable[] =
   1900  1.1  christos {
   1901  1.1  christos      106,   107,    70,   109,   111,   113,   355,   115,   116,   119,
   1902  1.1  christos      122,   128,   130,   132,   173,   176,   379,   359,   134,   117,
   1903  1.1  christos      117,   374,    71,   660,   302,   428,   431,   604,   603,   304,
   1904  1.1  christos      605,   662,   239,   232,     7,     8,     7,     8,   157,     7,
   1905  1.1  christos        8,    68,   420,   174,   294,   295,   410,   262,    77,   398,
   1906  1.1  christos      153,   404,   306,   242,   409,    78,   373,   266,   267,   195,
   1907  1.1  christos      197,   199,   233,   856,   236,   238,    76,  -211,  -213,   450,
   1908  1.1  christos      150,   956,   172,   427,   430,    99,   263,   181,   182,   183,
   1909  1.1  christos      420,   264,   289,   104,   313,   314,   315,   442,   369,   408,
   1910  1.1  christos      100,   159,     7,     8,    77,   139,   244,   420,   147,   606,
   1911  1.1  christos      420,    78,   930,   993,   607,   534,   151,   154,   881,   155,
   1912  1.1  christos      159,   171,   175,   290,   183,   160,   161,   101,   443,   245,
   1913  1.1  christos      183,   158,   510,   421,   535,    77,   250,   269,   270,   251,
   1914  1.1  christos      229,   252,    78,   253,   241,   584,   254,   397,   255,   133,
   1915  1.1  christos        7,     8,   609,   356,   261,   317,   256,   610,    79,   760,
   1916  1.1  christos     -211,  -213,   451,    80,    81,   240,   316,   615,   616,    70,
   1917  1.1  christos      732,   422,    77,   733,    77,   182,   305,   704,   102,    78,
   1918  1.1  christos      509,    78,   706,    77,   243,   617,    77,   194,   423,    71,
   1919  1.1  christos       78,   424,   103,    78,   325,   326,   327,   328,   329,   330,
   1920  1.1  christos      331,   332,   333,   334,    79,   196,   257,   258,    68,    80,
   1921  1.1  christos       81,   105,   303,   198,  1019,  1020,   307,   308,   309,   310,
   1922  1.1  christos      108,   312,   963,   964,    77,   123,   181,   182,   124,   775,
   1923  1.1  christos      776,    78,   965,   966,   777,    79,   135,   183,   235,    77,
   1924  1.1  christos       80,    81,    77,   394,   259,   778,    78,     7,     8,    78,
   1925  1.1  christos       77,   294,   295,   395,   718,   719,   720,    78,   163,   625,
   1926  1.1  christos      628,   530,     7,     8,   296,   297,   592,   125,   164,   127,
   1927  1.1  christos      183,   531,    79,   441,    79,    77,   445,    80,    81,    80,
   1928  1.1  christos       81,   447,    78,   260,     7,     8,    79,   140,    80,    81,
   1929  1.1  christos      164,    80,    81,   129,   237,    77,   461,   462,   463,   131,
   1930  1.1  christos      666,   466,   165,    77,   396,   467,   473,   624,   627,   166,
   1931  1.1  christos       78,   470,   136,   770,   360,     7,     8,   137,   167,   168,
   1932  1.1  christos      169,   471,   170,   771,    79,   173,   176,   576,   361,    80,
   1933  1.1  christos       81,    77,   518,   468,   486,   487,   488,   469,    78,    79,
   1934  1.1  christos      383,   384,    79,   141,    80,   110,   385,    80,    81,   571,
   1935  1.1  christos       79,    77,   520,   572,   522,    80,    81,   142,    78,   146,
   1936  1.1  christos      294,   295,   459,     7,     8,    77,   519,   521,   523,    77,
   1937  1.1  christos      870,   143,    78,   296,   426,    79,    78,   874,   727,   144,
   1938  1.1  christos       80,    81,   728,   536,   537,   538,   387,   388,   292,    77,
   1939  1.1  christos      293,    77,   389,   152,   547,    79,    78,   156,    78,    77,
   1940  1.1  christos       80,    81,   145,    79,     7,     8,    78,   875,    80,   112,
   1941  1.1  christos      554,     7,     8,   557,   729,   559,   560,   561,   730,   563,
   1942  1.1  christos      564,   565,   148,   941,   506,   942,   569,   511,   294,   295,
   1943  1.1  christos      149,    79,   162,     7,     8,   164,    80,    81,   525,   526,
   1944  1.1  christos      527,   296,   429,   585,   186,   320,   321,   159,    77,   190,
   1945  1.1  christos      191,    79,   160,   505,   784,    78,    80,    81,   785,   544,
   1946  1.1  christos      491,   492,    70,   294,   295,    79,    77,   579,   580,    79,
   1947  1.1  christos       80,    81,   178,    78,    80,    81,   296,   508,   180,   969,
   1948  1.1  christos      954,   955,    71,   970,   623,   718,   719,   720,   234,    79,
   1949  1.1  christos      268,    79,   635,   246,    80,    81,    80,    81,   265,   114,
   1950  1.1  christos      247,    68,   632,   248,    80,    81,   578,   578,   374,   249,
   1951  1.1  christos      409,   200,   201,   202,   271,   203,   204,   622,   205,   206,
   1952  1.1  christos      207,   208,   209,   210,   294,   295,   138,   272,    94,    95,
   1953  1.1  christos       96,   211,   273,   212,   213,     7,     8,   296,   626,   214,
   1954  1.1  christos      274,   215,   971,   275,    77,   976,   972,   809,   120,   977,
   1955  1.1  christos      812,    78,   646,    80,    81,   647,   648,   184,   276,   186,
   1956  1.1  christos      697,   277,   188,   189,   190,   191,    79,   280,   216,   978,
   1957  1.1  christos      980,    80,    81,   979,   981,   217,   278,   708,   709,   710,
   1958  1.1  christos      218,   219,   220,   192,   193,   982,   814,   815,   816,   983,
   1959  1.1  christos      221,   222,   223,   984,   287,   224,   279,   985,   184,   185,
   1960  1.1  christos      186,   187,   281,   188,   189,   190,   191,   734,   186,   857,
   1961  1.1  christos      737,   188,   189,   190,   191,   871,   282,   294,   295,   306,
   1962  1.1  christos      865,   283,   866,   867,   192,   193,   291,   986,   225,   226,
   1963  1.1  christos      879,   987,   748,   749,   700,   515,   516,   284,   400,   401,
   1964  1.1  christos      402,   705,   261,   988,    79,   403,   285,   989,   990,    80,
   1965  1.1  christos       81,   301,   991,   765,   296,   665,   184,   185,   186,   187,
   1966  1.1  christos      286,   188,   189,   190,   191,   306,   896,   288,   227,   228,
   1967  1.1  christos      311,   781,   300,    80,    81,   343,   344,   322,   345,   318,
   1968  1.1  christos      294,   346,   192,   193,   347,   348,   349,   350,   323,   347,
   1969  1.1  christos      348,   349,   350,   723,   724,   324,   754,   755,   362,   799,
   1970  1.1  christos      821,   351,   352,   353,   825,   826,   186,   756,   757,   188,
   1971  1.1  christos      189,   190,   191,   789,   294,   295,   184,   836,   186,   187,
   1972  1.1  christos      335,   188,   189,   190,   191,    93,   336,    94,    95,    96,
   1973  1.1  christos      192,   193,    97,   363,   772,   337,   907,   908,   909,   910,
   1974  1.1  christos      961,   962,   192,   193,   967,   968,   954,   955,   338,   786,
   1975  1.1  christos      787,    86,   578,   358,   364,   339,    87,    88,   365,   340,
   1976  1.1  christos       89,    90,   847,   366,   341,    91,    92,   367,   375,   342,
   1977  1.1  christos      356,   376,   368,   852,   393,   377,   378,   380,   382,   386,
   1978  1.1  christos      390,   391,   392,   399,   411,   405,   406,   412,   407,   414,
   1979  1.1  christos      417,   413,   416,   418,   419,   415,   868,   440,   432,   425,
   1980  1.1  christos      433,   434,   444,   435,   446,   436,   437,   438,   453,   454,
   1981  1.1  christos      464,   465,   439,   455,   456,   474,   457,   448,   449,   458,
   1982  1.1  christos      460,   475,   476,   477,   478,   479,   480,   481,   482,   483,
   1983  1.1  christos      484,   485,   489,   490,   494,   498,   496,   499,   500,   501,
   1984  1.1  christos      851,   502,   503,   493,   512,   504,   513,   517,   507,   514,
   1985  1.1  christos      524,   528,   529,   533,   532,   539,   541,   540,   543,   553,
   1986  1.1  christos      542,   546,   548,   549,   545,   550,   551,   906,   552,   869,
   1987  1.1  christos      913,   555,    -2,     1,   917,   918,   919,   556,   558,   562,
   1988  1.1  christos      566,   568,   876,     2,   567,   570,   927,   928,   929,   573,
   1989  1.1  christos      574,   932,   575,   577,   581,     3,     4,     5,   582,     6,
   1990  1.1  christos      586,     7,     8,     9,    10,    11,    12,    13,    14,    15,
   1991  1.1  christos       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
   1992  1.1  christos       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
   1993  1.1  christos       36,    37,    38,   583,   587,   593,   590,   597,   602,   591,
   1994  1.1  christos      594,   588,   598,   612,   589,   595,   596,   619,   599,   924,
   1995  1.1  christos      600,   601,   620,   613,   618,   621,   614,   995,   996,   629,
   1996  1.1  christos      631,   640,   663,   664,   668,   670,   688,    39,    40,   691,
   1997  1.1  christos      676,   637,   630,   679,   690,   638,   641,   636,   692,   695,
   1998  1.1  christos      639,   642,   693,   694,    41,    42,    43,    44,   649,    45,
   1999  1.1  christos      643,    46,   644,   650,    47,    48,   651,   687,   159,   707,
   2000  1.1  christos      698,   652,   653,   711,   712,   713,   714,   654,   699,   655,
   2001  1.1  christos      656,   657,   658,   661,    49,   610,   715,    50,    51,    52,
   2002  1.1  christos      675,    53,    54,    55,    56,    57,    58,    59,    60,     2,
   2003  1.1  christos      667,   669,   671,   716,    61,    62,   672,    63,    64,   673,
   2004  1.1  christos      674,     3,     4,     5,   677,     6,   678,     7,     8,     9,
   2005  1.1  christos       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
   2006  1.1  christos       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
   2007  1.1  christos       30,    31,    32,    33,    34,    35,    36,    37,    38,   680,
   2008  1.1  christos      681,   683,   682,   684,   685,   717,   686,   722,   689,   725,
   2009  1.1  christos      696,   736,   743,   744,   701,   745,   746,   735,   747,   702,
   2010  1.1  christos      703,   726,   758,   731,   752,   761,   753,   739,   759,   738,
   2011  1.1  christos      763,   740,   750,    39,    40,   742,   762,   764,   766,   767,
   2012  1.1  christos      741,   768,   769,   773,   774,   779,   782,   780,   783,   788,
   2013  1.1  christos       41,    42,    43,    44,   790,    45,   791,    46,   792,   793,
   2014  1.1  christos       47,    48,   800,   802,   794,   795,   796,   797,   798,   801,
   2015  1.1  christos      803,   804,   805,   806,   807,   813,   808,   810,   818,   811,
   2016  1.1  christos       49,   819,   820,    50,    51,    52,   822,    53,    54,    55,
   2017  1.1  christos       56,    57,    58,    59,    60,   823,   824,   827,   828,   831,
   2018  1.1  christos       61,    62,   837,    63,    64,   832,   838,   829,   830,   839,
   2019  1.1  christos      840,   833,   834,   845,   841,   842,   835,   843,   844,   846,
   2020  1.1  christos      848,   849,   858,   853,   850,   854,   855,   860,   859,   861,
   2021  1.1  christos      862,   863,   864,   872,   873,   877,   878,   880,   882,   883,
   2022  1.1  christos      885,   420,   884,   894,   902,   897,   898,   903,   912,   914,
   2023  1.1  christos      921,   922,   923,   886,   887,   888,   891,   925,   889,   890,
   2024  1.1  christos      892,   893,   926,   900,   899,   901,   904,   905,   935,   944,
   2025  1.1  christos      959,   915,   939,   973,   920,   960,   931,   933,   934,   936,
   2026  1.1  christos      937,   938,   945,   943,   946,   997,   999,   947,   998,  1007,
   2027  1.1  christos      948,   950,   952,   958,   974,   975,  1000,  1001,   994,  1002,
   2028  1.1  christos     1003,  1005,  1004,  1006,  1008,  1009,  1010,  1011,  1012,  1013,
   2029  1.1  christos     1018,   895,   992,  1014,   121,  1015,  1016,     0,  1017,   452,
   2030  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   2031  1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,   472
   2032  1.1  christos };
   2033  1.1  christos 
   2034  1.1  christos static const yytype_int16 yycheck[] =
   2035  1.1  christos {
   2036  1.1  christos       27,    28,     0,    30,    31,    32,   211,    34,    35,    36,
   2037  1.1  christos       37,    42,    43,    44,    70,    71,   232,   215,    45,    36,
   2038  1.1  christos       37,   227,     0,   538,   157,   278,   279,   487,   486,    25,
   2039  1.1  christos      488,   540,    25,    89,    29,    30,    29,    30,    77,    29,
   2040  1.1  christos       30,     0,    83,    70,    69,    70,   262,   103,    62,   254,
   2041  1.1  christos       25,   256,    71,    27,   260,    69,   227,    25,    26,    86,
   2042  1.1  christos       87,    88,    89,   796,    91,    92,   162,    77,    77,    77,
   2043  1.1  christos       27,   939,    70,   278,   279,    97,   103,    77,    78,    79,
   2044  1.1  christos       83,   108,    25,    25,    90,    91,    92,    25,    25,   260,
   2045  1.1  christos       97,    97,    29,    30,    62,    49,   142,    83,    57,   157,
   2046  1.1  christos       83,    69,   906,   971,   162,    68,    63,    82,   841,    63,
   2047  1.1  christos       97,    70,    71,    56,   114,   102,   103,    97,    56,   165,
   2048  1.1  christos      120,   160,   375,   164,    87,    62,    15,    25,    26,    18,
   2049  1.1  christos       89,    20,    69,    22,    93,    35,    25,   162,    27,    25,
   2050  1.1  christos       29,    30,   157,   162,   103,   172,    35,   162,   162,   664,
   2051  1.1  christos      160,   160,   160,   167,   168,   148,   162,   124,   125,   157,
   2052  1.1  christos      620,   164,    62,   621,    62,   165,   162,   162,    97,    69,
   2053  1.1  christos      375,    69,   162,    62,   148,   142,    62,    25,   164,   157,
   2054  1.1  christos       69,   164,    97,    69,   184,   185,   186,   187,   188,   189,
   2055  1.1  christos      190,   191,   192,   193,   162,    25,    85,    86,   157,   167,
   2056  1.1  christos      168,    25,   161,    25,  1008,  1009,   165,   166,   167,   168,
   2057  1.1  christos      162,   170,   128,   129,    62,   162,   216,   217,   162,     3,
   2058  1.1  christos        4,    69,   138,   139,     8,   162,   162,   227,    25,    62,
   2059  1.1  christos      167,   168,    62,    25,   123,    19,    69,    29,    30,    69,
   2060  1.1  christos       62,    69,    70,    35,   125,   126,   127,    69,    25,   502,
   2061  1.1  christos      503,    25,    29,    30,    82,    83,   472,   163,    35,   163,
   2062  1.1  christos      260,    35,   162,   290,   162,    62,   293,   167,   168,   167,
   2063  1.1  christos      168,   298,    69,   162,    29,    30,   162,   162,   167,   168,
   2064  1.1  christos       35,   167,   168,   163,    25,    62,   313,   314,   315,   163,
   2065  1.1  christos      543,   157,    69,    62,   253,   161,   323,   502,   503,    76,
   2066  1.1  christos       69,    25,   163,    25,    25,    29,    30,   163,    85,    86,
   2067  1.1  christos       87,    35,    89,    35,   162,   371,   372,   450,    25,   167,
   2068  1.1  christos      168,    62,    25,   157,   351,   352,   353,   161,    69,   162,
   2069  1.1  christos      105,   106,   162,   162,   167,   168,   111,   167,   168,   157,
   2070  1.1  christos      162,    62,    25,   161,    25,   167,   168,   162,    69,    25,
   2071  1.1  christos       69,    70,   311,    29,    30,    62,   383,   384,   385,    62,
   2072  1.1  christos      820,   162,    69,    82,    83,   162,    69,   827,   157,   162,
   2073  1.1  christos      167,   168,   161,   400,   401,   402,   105,   106,   157,    62,
   2074  1.1  christos      159,    62,   111,    25,   411,   162,    69,     0,    69,    62,
   2075  1.1  christos      167,   168,   162,   162,    29,    30,    69,    25,   167,   168,
   2076  1.1  christos      427,    29,    30,   430,   157,   432,   433,   434,   161,   436,
   2077  1.1  christos      437,   438,   162,   922,   373,   924,   443,   376,    69,    70,
   2078  1.1  christos      162,   162,    97,    29,    30,    35,   167,   168,   387,   388,
   2079  1.1  christos      389,    82,    83,   460,    66,   134,   135,    97,    62,    71,
   2080  1.1  christos       72,   162,   102,   103,   157,    69,   167,   168,   161,   408,
   2081  1.1  christos      132,   133,   450,    69,    70,   162,    62,   455,   456,   162,
   2082  1.1  christos      167,   168,   162,    69,   167,   168,    82,    83,    25,   157,
   2083  1.1  christos      120,   121,   450,   161,   501,   125,   126,   127,    25,   162,
   2084  1.1  christos      172,   162,   509,    35,   167,   168,   167,   168,    25,   162,
   2085  1.1  christos       35,   450,   509,    35,   167,   168,   455,   456,   704,    35,
   2086  1.1  christos      706,     5,     6,     7,    25,     9,    10,    35,    12,    13,
   2087  1.1  christos       14,    15,    16,    17,    69,    70,    97,    25,    99,   100,
   2088  1.1  christos      101,    25,    25,    27,    28,    29,    30,    82,    83,    33,
   2089  1.1  christos       25,    35,   157,    25,    62,   157,   161,   735,   162,   161,
   2090  1.1  christos      738,    69,   519,   167,   168,   522,   523,    64,    25,    66,
   2091  1.1  christos      577,    25,    69,    70,    71,    72,   162,    27,    62,   157,
   2092  1.1  christos      157,   167,   168,   161,   161,    69,    25,   594,   595,   596,
   2093  1.1  christos       74,    75,    76,    90,    91,   157,   169,   170,   171,   161,
   2094  1.1  christos       84,    85,    86,   157,    35,    89,    25,   161,    64,    65,
   2095  1.1  christos       66,    67,    25,    69,    70,    71,    72,   624,    66,   797,
   2096  1.1  christos      627,    69,    70,    71,    72,   821,    25,    69,    70,    71,
   2097  1.1  christos      808,    25,   810,   811,    90,    91,    27,   157,   122,   123,
   2098  1.1  christos      836,   161,   649,   650,   583,   132,   133,    25,    90,    91,
   2099  1.1  christos       92,   590,   591,   157,   162,    97,    25,   161,   157,   167,
   2100  1.1  christos      168,    27,   161,   670,    82,    83,    64,    65,    66,    67,
   2101  1.1  christos       25,    69,    70,    71,    72,    71,   861,    25,   162,   163,
   2102  1.1  christos      162,   692,    25,   167,   168,    64,    65,   157,    67,   162,
   2103  1.1  christos       69,    70,    90,    91,    78,    79,    80,    81,   159,    78,
   2104  1.1  christos       79,    80,    81,   124,   125,   161,   140,   141,    25,   716,
   2105  1.1  christos      746,    90,    91,    92,   120,   121,    66,   656,   657,    69,
   2106  1.1  christos       70,    71,    72,   701,    69,    70,    64,   763,    66,    67,
   2107  1.1  christos      162,    69,    70,    71,    72,    97,   162,    99,   100,   101,
   2108  1.1  christos       90,    91,   104,    25,   683,   162,   107,   108,   109,   110,
   2109  1.1  christos      135,   136,    90,    91,   143,   144,   120,   121,   162,   698,
   2110  1.1  christos      699,    88,   701,    70,    25,   162,    93,    94,    25,   162,
   2111  1.1  christos       97,    98,   779,    25,   162,   102,   103,   163,    25,   162,
   2112  1.1  christos      162,    70,   163,   790,    25,   162,   162,   162,   162,   162,
   2113  1.1  christos      162,   162,   162,    97,   157,    35,    35,    97,   163,    70,
   2114  1.1  christos       70,   161,   161,   157,   157,   173,   813,    97,   157,   161,
   2115  1.1  christos      157,   157,    25,   157,    25,   157,   157,   157,    25,    35,
   2116  1.1  christos      125,   135,   161,   157,   157,    25,   158,   164,   164,   158,
   2117  1.1  christos      158,    25,    25,    25,    35,    25,    25,    25,    25,    25,
   2118  1.1  christos       25,   162,    25,    25,   162,   158,   162,   158,   158,   158,
   2119  1.1  christos      789,    25,    25,    34,    25,    70,    25,   131,   161,   157,
   2120  1.1  christos       25,    25,    25,    25,   137,    21,   158,    35,    25,   164,
   2121  1.1  christos      158,   157,    25,    25,   161,    25,    25,   884,    25,   818,
   2122  1.1  christos      887,   164,     0,     1,   891,   892,   893,    25,   164,    25,
   2123  1.1  christos       25,    97,   831,    11,   162,   161,   903,   904,   905,   164,
   2124  1.1  christos      164,   912,    97,   159,    35,    23,    24,    25,    35,    27,
   2125  1.1  christos      161,    29,    30,    31,    32,    33,    34,    35,    36,    37,
   2126  1.1  christos       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
   2127  1.1  christos       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
   2128  1.1  christos       58,    59,    60,   157,   161,   157,    97,   157,    25,    97,
   2129  1.1  christos      159,   135,   157,   161,   134,   159,   159,    35,   157,   898,
   2130  1.1  christos      157,   157,    35,   161,   142,    35,   157,   974,   975,    25,
   2131  1.1  christos       25,    25,    35,    35,    35,    91,    25,    95,    96,    25,
   2132  1.1  christos       97,   157,   161,    97,    97,   157,   161,   164,    97,    25,
   2133  1.1  christos      157,   161,    97,    97,   112,   113,   114,   115,   157,   117,
   2134  1.1  christos      161,   119,   162,   157,   122,   123,   161,   130,    97,    25,
   2135  1.1  christos       69,   157,   157,    25,    35,    25,    35,   161,    76,   162,
   2136  1.1  christos      162,   162,   162,   162,   142,   162,    25,   145,   146,   147,
   2137  1.1  christos      164,   149,   150,   151,   152,   153,   154,   155,   156,    11,
   2138  1.1  christos      161,   161,   161,    90,   162,   163,   161,   165,   166,   161,
   2139  1.1  christos      161,    23,    24,    25,   164,    27,   164,    29,    30,    31,
   2140  1.1  christos       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
   2141  1.1  christos       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
   2142  1.1  christos       52,    53,    54,    55,    56,    57,    58,    59,    60,   161,
   2143  1.1  christos      161,   157,   161,   161,   161,    25,   161,    25,   162,    25,
   2144  1.1  christos      160,    25,    25,    25,   157,    25,    97,   164,   135,   161,
   2145  1.1  christos      161,   161,   125,   161,    35,    25,    35,   161,    35,   164,
   2146  1.1  christos       97,   164,   162,    95,    96,   164,   164,    25,    97,    25,
   2147  1.1  christos      172,    97,    97,   161,   130,   159,    25,   163,    25,   157,
   2148  1.1  christos      112,   113,   114,   115,   159,   117,   157,   119,   157,   157,
   2149  1.1  christos      122,   123,    97,    97,   161,   161,   161,   161,   161,   161,
   2150  1.1  christos      161,   161,    97,   142,   125,    90,   164,   164,    97,   164,
   2151  1.1  christos      142,   161,   161,   145,   146,   147,   161,   149,   150,   151,
   2152  1.1  christos      152,   153,   154,   155,   156,   161,   161,   161,   161,   157,
   2153  1.1  christos      162,   163,    97,   165,   166,   157,    25,   161,   161,    35,
   2154  1.1  christos       25,   161,   161,    25,   161,   161,   164,   162,   162,    25,
   2155  1.1  christos       25,    25,   162,    25,    27,    25,    25,    25,   161,    25,
   2156  1.1  christos       31,   161,   161,   161,   161,    25,    71,    25,    25,    25,
   2157  1.1  christos      162,    83,   159,   132,    35,    70,    69,    91,    97,   125,
   2158  1.1  christos       25,    25,    32,   161,   159,   161,   159,    27,   162,   161,
   2159  1.1  christos      159,   159,    70,   157,   161,   161,   159,   159,   136,    21,
   2160  1.1  christos       25,   162,   162,    35,   161,    25,   161,   161,   161,   161,
   2161  1.1  christos      161,   161,   157,   161,   157,   136,   136,   161,   135,    71,
   2162  1.1  christos      162,   162,   162,   162,   159,   159,   136,   136,   161,   136,
   2163  1.1  christos      136,   161,   136,   161,   161,   161,   161,   161,   161,   161,
   2164  1.1  christos       35,   860,   969,   161,    37,   161,   161,    -1,   161,   303,
   2165  1.1  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
   2166  1.1  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   322
   2167  1.1  christos };
   2168  1.1  christos 
   2169  1.1  christos /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
   2170  1.1  christos    state STATE-NUM.  */
   2171  1.1  christos static const yytype_uint8 yystos[] =
   2172  1.1  christos {
   2173  1.1  christos        0,     1,    11,    23,    24,    25,    27,    29,    30,    31,
   2174  1.1  christos       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
   2175  1.1  christos       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
   2176  1.1  christos       52,    53,    54,    55,    56,    57,    58,    59,    60,    95,
   2177  1.1  christos       96,   112,   113,   114,   115,   117,   119,   122,   123,   142,
   2178  1.1  christos      145,   146,   147,   149,   150,   151,   152,   153,   154,   155,
   2179  1.1  christos      156,   162,   163,   165,   166,   175,   176,   177,   178,   197,
   2180  1.1  christos      205,   206,   207,   208,   209,   212,   162,    62,    69,   162,
   2181  1.1  christos      167,   168,   213,   218,   219,   220,    88,    93,    94,    97,
   2182  1.1  christos       98,   102,   103,    97,    99,   100,   101,   104,   211,    97,
   2183  1.1  christos       97,    97,    97,    97,    25,    25,   219,   219,   162,   219,
   2184  1.1  christos      168,   219,   168,   219,   162,   219,   219,   213,   217,   219,
   2185  1.1  christos      162,   217,   219,   162,   162,   163,   198,   163,   198,   163,
   2186  1.1  christos      198,   163,   198,    25,   219,   162,   163,   163,    97,   211,
   2187  1.1  christos      162,   162,   162,   162,   162,   162,    25,   178,   162,   162,
   2188  1.1  christos       27,    63,    25,    25,    82,   211,     0,    77,   160,    97,
   2189  1.1  christos      102,   103,    97,    25,    35,    69,    76,    85,    86,    87,
   2190  1.1  christos       89,   178,   205,   210,   219,   178,   210,   210,   162,   179,
   2191  1.1  christos       25,   220,   220,   220,    64,    65,    66,    67,    69,    70,
   2192  1.1  christos       71,    72,    90,    91,    25,   219,    25,   219,    25,   219,
   2193  1.1  christos        5,     6,     7,     9,    10,    12,    13,    14,    15,    16,
   2194  1.1  christos       17,    25,    27,    28,    33,    35,    62,    69,    74,    75,
   2195  1.1  christos       76,    84,    85,    86,    89,   122,   123,   162,   163,   178,
   2196  1.1  christos      194,   199,   210,   219,    25,    25,   219,    25,   219,    25,
   2197  1.1  christos      148,   178,    27,   148,   142,   165,    35,    35,    35,    35,
   2198  1.1  christos       15,    18,    20,    22,    25,    27,    35,    85,    86,   123,
   2199  1.1  christos      162,   178,   210,   219,   219,    25,    25,    26,   172,    25,
   2200  1.1  christos       26,    25,    25,    25,    25,    25,    25,    25,    25,    25,
   2201  1.1  christos       27,    25,    25,    25,    25,    25,    25,    35,    25,    25,
   2202  1.1  christos       56,    27,   157,   159,    69,    70,    82,    83,   201,   204,
   2203  1.1  christos       25,    27,   177,   178,    25,   162,    71,   178,   178,   178,
   2204  1.1  christos      178,   162,   178,    90,    91,    92,   162,   219,   162,   195,
   2205  1.1  christos      134,   135,   157,   159,   161,   220,   220,   220,   220,   220,
   2206  1.1  christos      220,   220,   220,   220,   220,   162,   162,   162,   162,   162,
   2207  1.1  christos      162,   162,   162,    64,    65,    67,    70,    78,    79,    80,
   2208  1.1  christos       81,    90,    91,    92,   200,   201,   162,   186,    70,   186,
   2209  1.1  christos       25,    25,    25,    25,    25,    25,    25,   163,   163,    25,
   2210  1.1  christos      178,   205,   206,   207,   209,    25,    70,   162,   162,   179,
   2211  1.1  christos      162,   187,   162,   105,   106,   111,   162,   105,   106,   111,
   2212  1.1  christos      162,   162,   162,    25,    25,    35,   178,   162,   201,    97,
   2213  1.1  christos       90,    91,    92,    97,   201,    35,    35,   163,   207,   209,
   2214  1.1  christos      179,   157,    97,   161,    70,   173,   161,    70,   157,   157,
   2215  1.1  christos       83,   164,   164,   164,   164,   161,    83,   201,   204,    83,
   2216  1.1  christos      201,   204,   157,   157,   157,   157,   157,   157,   157,   161,
   2217  1.1  christos       97,   219,    25,    56,    25,   219,    25,   219,   164,   164,
   2218  1.1  christos       77,   160,   195,    25,    35,   157,   157,   158,   158,   178,
   2219  1.1  christos      158,   219,   219,   219,   125,   135,   157,   161,   157,   161,
   2220  1.1  christos       25,    35,   208,   219,    25,    25,    25,    25,    35,    25,
   2221  1.1  christos       25,    25,    25,    25,    25,   162,   219,   219,   219,    25,
   2222  1.1  christos       25,   132,   133,    34,   162,   188,   162,   189,   158,   158,
   2223  1.1  christos      158,   158,    25,    25,    70,   103,   178,   161,    83,   201,
   2224  1.1  christos      204,   178,    25,    25,   157,   132,   133,   131,    25,   219,
   2225  1.1  christos       25,   219,    25,   219,    25,   178,   178,   178,    25,    25,
   2226  1.1  christos       25,    35,   137,    25,    68,    87,   219,   219,   219,    21,
   2227  1.1  christos       35,   158,   158,    25,   178,   161,   157,   219,    25,    25,
   2228  1.1  christos       25,    25,    25,   164,   219,   164,    25,   219,   164,   219,
   2229  1.1  christos      219,   219,    25,   219,   219,   219,    25,   162,    97,   219,
   2230  1.1  christos      161,   157,   161,   164,   164,    97,   177,   159,   178,   205,
   2231  1.1  christos      205,    35,    35,   157,    35,   219,   161,   161,   135,   134,
   2232  1.1  christos       97,    97,   179,   157,   159,   159,   159,   157,   157,   157,
   2233  1.1  christos      157,   157,    25,   188,   189,   188,   157,   162,   183,   157,
   2234  1.1  christos      162,   184,   161,   161,   157,   124,   125,   142,   142,    35,
   2235  1.1  christos       35,    35,    35,   219,   201,   204,    83,   201,   204,    25,
   2236  1.1  christos      161,    25,   213,   215,   216,   219,   164,   157,   157,   157,
   2237  1.1  christos       25,   161,   161,   161,   162,   196,   196,   196,   196,   157,
   2238  1.1  christos      157,   161,   157,   157,   161,   162,   162,   162,   162,   190,
   2239  1.1  christos      190,   162,   184,    35,    35,    83,   204,   161,    35,   161,
   2240  1.1  christos       91,   161,   161,   161,   161,   164,    97,   164,   164,    97,
   2241  1.1  christos      161,   161,   161,   157,   161,   161,   161,   130,    25,   162,
   2242  1.1  christos       97,    25,    97,    97,    97,    25,   160,   219,    69,    76,
   2243  1.1  christos      178,   157,   161,   161,   162,   178,   162,    25,   219,   219,
   2244  1.1  christos      219,    25,    35,    25,    35,    25,    90,    25,   125,   126,
   2245  1.1  christos      127,   181,    25,   124,   125,    25,   161,   157,   161,   157,
   2246  1.1  christos      161,   161,   189,   188,   219,   164,    25,   219,   164,   161,
   2247  1.1  christos      164,   172,   164,    25,    25,    25,    97,   135,   219,   219,
   2248  1.1  christos      162,   180,    35,    35,   140,   141,   178,   178,   125,    35,
   2249  1.1  christos      190,    25,   164,    97,    25,   219,    97,    25,    97,    97,
   2250  1.1  christos       25,    35,   178,   161,   130,     3,     4,     8,    19,   159,
   2251  1.1  christos      163,   198,    25,    25,   157,   161,   178,   178,   157,   205,
   2252  1.1  christos      159,   157,   157,   157,   161,   161,   161,   161,   161,   219,
   2253  1.1  christos       97,   161,    97,   161,   161,    97,   142,   125,   164,   186,
   2254  1.1  christos      164,   164,   186,    90,   169,   170,   171,   214,    97,   161,
   2255  1.1  christos      161,   210,   161,   161,   161,   120,   121,   161,   161,   161,
   2256  1.1  christos      161,   157,   157,   161,   161,   164,   210,    97,    25,    35,
   2257  1.1  christos       25,   161,   161,   162,   162,    25,    25,   219,    25,    25,
   2258  1.1  christos       27,   178,   219,    25,    25,    25,   180,   186,   162,   161,
   2259  1.1  christos       25,    25,    31,   161,   161,   186,   186,   186,   219,   178,
   2260  1.1  christos      189,   179,   161,   161,   189,    25,   178,    25,    71,   179,
   2261  1.1  christos       25,   180,    25,    25,   159,   162,   161,   159,   161,   162,
   2262  1.1  christos      161,   159,   159,   159,   132,   200,   201,    70,    69,   161,
   2263  1.1  christos      157,   161,    35,    91,   159,   159,   219,   107,   108,   109,
   2264  1.1  christos      110,   191,    97,   219,   125,   162,   192,   219,   219,   219,
   2265  1.1  christos      161,    25,    25,    32,   178,    27,    70,   219,   219,   219,
   2266  1.1  christos      192,   161,   198,   161,   161,   136,   161,   161,   161,   162,
   2267  1.1  christos      185,   184,   184,   161,    21,   157,   157,   161,   162,   193,
   2268  1.1  christos      162,   202,   162,   203,   120,   121,   181,   182,   162,    25,
   2269  1.1  christos       25,   135,   136,   128,   129,   138,   139,   143,   144,   157,
   2270  1.1  christos      161,   157,   161,    35,   159,   159,   157,   161,   157,   161,
   2271  1.1  christos      157,   161,   157,   161,   157,   161,   157,   161,   157,   161,
   2272  1.1  christos      157,   161,   182,   181,   161,   219,   219,   136,   135,   136,
   2273  1.1  christos      136,   136,   136,   136,   136,   161,   161,    71,   161,   161,
   2274  1.1  christos      161,   161,   161,   161,   161,   161,   161,   161,    35,   192,
   2275  1.1  christos      192
   2276  1.1  christos };
   2277  1.1  christos 
   2278  1.1  christos /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
   2279  1.1  christos static const yytype_uint8 yyr1[] =
   2280  1.1  christos {
   2281  1.1  christos        0,   174,   175,   175,   176,   176,   176,   176,   177,   177,
   2282  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2283  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2284  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2285  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2286  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2287  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2288  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2289  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2290  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2291  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2292  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2293  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2294  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2295  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2296  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2297  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2298  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2299  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2300  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2301  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2302  1.1  christos      177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
   2303  1.1  christos      177,   177,   177,   177,   177,   177,   177,   178,   178,   179,
   2304  1.1  christos      179,   179,   179,   179,   180,   180,   181,   181,   181,   181,
   2305  1.1  christos      182,   182,   183,   183,   184,   184,   184,   185,   185,   185,
   2306  1.1  christos      185,   185,   186,   186,   186,   187,   187,   187,   188,   188,
   2307  1.1  christos      188,   188,   188,   188,   189,   189,   190,   190,   191,   191,
   2308  1.1  christos      191,   191,   192,   192,   193,   193,   193,   193,   194,   194,
   2309  1.1  christos      194,   195,   195,   196,   196,   197,   198,   199,   199,   200,
   2310  1.1  christos      200,   200,   200,   201,   201,   202,   202,   202,   202,   202,
   2311  1.1  christos      202,   202,   202,   203,   203,   203,   203,   204,   204,   204,
   2312  1.1  christos      205,   206,   207,   208,   208,   208,   208,   208,   209,   209,
   2313  1.1  christos      209,   210,   211,   211,   211,   211,   212,   212,   212,   212,
   2314  1.1  christos      213,   214,   214,   214,   215,   216,   216,   217,   218,   218,
   2315  1.1  christos      218,   218,   218,   219,   220,   220,   220,   220,   220,   220,
   2316  1.1  christos      220,   220,   220,   220,   220
   2317  1.1  christos };
   2318  1.1  christos 
   2319  1.1  christos /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
   2320  1.1  christos static const yytype_int8 yyr2[] =
   2321  1.1  christos {
   2322  1.1  christos        0,     2,     0,     1,     2,     6,     4,     1,     1,     2,
   2323  1.1  christos        5,     1,     6,     6,     3,     3,    17,    17,    11,    11,
   2324  1.1  christos       11,    12,    12,    12,     5,     3,     3,     3,     8,    13,
   2325  1.1  christos       12,    13,    13,     8,    17,     6,     9,     3,     6,     3,
   2326  1.1  christos        5,     6,     8,     8,     2,     2,     4,     3,     2,     4,
   2327  1.1  christos        3,     6,     4,     7,     7,     3,     3,     6,     3,     4,
   2328  1.1  christos        3,     3,     3,    11,    11,     9,     5,     5,     9,     5,
   2329  1.1  christos        5,     6,     6,     5,     5,     5,     6,     6,     5,     1,
   2330  1.1  christos        3,     3,     3,     3,     4,     4,     9,     9,     5,     7,
   2331  1.1  christos        4,     6,     6,     7,     9,     8,     8,    11,     9,     4,
   2332  1.1  christos        5,     6,     7,     6,     4,     6,     5,     6,     6,     4,
   2333  1.1  christos        8,    10,    10,    12,     5,     6,     5,     6,     4,     4,
   2334  1.1  christos        4,     7,     9,     9,     9,     6,     6,     6,     8,     8,
   2335  1.1  christos        6,     5,     5,     8,     4,     7,     1,     1,     1,     1,
   2336  1.1  christos        1,     1,     1,     1,     1,     1,     2,     2,     4,     4,
   2337  1.1  christos        6,     6,     2,     2,     4,     2,     2,     2,     2,     2,
   2338  1.1  christos        2,     6,     6,     5,     4,     3,     3,     3,     3,     3,
   2339  1.1  christos        3,     4,     2,     4,     2,     4,     2,     4,     2,     7,
   2340  1.1  christos        8,     8,     7,     7,     7,     9,     7,     8,     9,     8,
   2341  1.1  christos        6,     7,     8,     9,     8,     7,     7,     6,    11,     7,
   2342  1.1  christos       11,     7,     3,     2,     1,     7,     9,    11,     3,     5,
   2343  1.1  christos        7,     2,     2,     2,     2,     1,     1,     2,     2,     4,
   2344  1.1  christos        1,     1,     6,     6,     6,     2,     2,     1,     1,     0,
   2345  1.1  christos        5,     5,     3,     3,     3,     3,     0,     1,     1,     1,
   2346  1.1  christos        1,     1,     0,     3,     0,     3,     3,     0,     3,     3,
   2347  1.1  christos        5,     5,     0,     3,     3,     0,     3,     3,     0,     3,
   2348  1.1  christos        3,     3,     5,     5,     0,     3,     0,     3,     1,     1,
   2349  1.1  christos        1,     1,     0,     3,     3,     3,     5,     5,     1,     1,
   2350  1.1  christos        1,     0,     3,     0,     3,     4,     4,     1,     1,     1,
   2351  1.1  christos        1,     1,     1,     1,     1,     3,     3,     3,     3,     5,
   2352  1.1  christos        5,     5,     5,     3,     3,     5,     5,     0,     1,     1,
   2353  1.1  christos        2,     2,     2,     3,     1,     5,     5,     3,     2,     2,
   2354  1.1  christos        2,     3,     1,     1,     1,     1,     3,     3,     3,     3,
   2355  1.1  christos        1,     1,     1,     1,     3,     1,     1,     3,     1,     1,
   2356  1.1  christos        3,     2,     2,     1,     3,     3,     3,     3,     3,     3,
   2357  1.1  christos        3,     3,     3,     3,     1
   2358  1.1  christos };
   2359  1.1  christos 
   2360  1.1  christos 
   2361  1.1  christos enum { YYENOMEM = -2 };
   2362  1.1  christos 
   2363  1.1  christos #define yyerrok         (yyerrstatus = 0)
   2364  1.1  christos #define yyclearin       (yychar = YYEMPTY)
   2365  1.1  christos 
   2366  1.1  christos #define YYACCEPT        goto yyacceptlab
   2367  1.1  christos #define YYABORT         goto yyabortlab
   2368  1.1  christos #define YYERROR         goto yyerrorlab
   2369  1.1  christos #define YYNOMEM         goto yyexhaustedlab
   2370  1.1  christos 
   2371  1.1  christos 
   2372  1.1  christos #define YYRECOVERING()  (!!yyerrstatus)
   2373  1.1  christos 
   2374  1.1  christos #define YYBACKUP(Token, Value)                                    \
   2375  1.1  christos   do                                                              \
   2376  1.1  christos     if (yychar == YYEMPTY)                                        \
   2377  1.1  christos       {                                                           \
   2378  1.1  christos         yychar = (Token);                                         \
   2379  1.1  christos         yylval = (Value);                                         \
   2380  1.1  christos         YYPOPSTACK (yylen);                                       \
   2381  1.1  christos         yystate = *yyssp;                                         \
   2382  1.1  christos         goto yybackup;                                            \
   2383  1.1  christos       }                                                           \
   2384  1.1  christos     else                                                          \
   2385  1.1  christos       {                                                           \
   2386  1.1  christos         yyerror (YY_("syntax error: cannot back up")); \
   2387  1.1  christos         YYERROR;                                                  \
   2388  1.1  christos       }                                                           \
   2389  1.1  christos   while (0)
   2390  1.1  christos 
   2391  1.1  christos /* Backward compatibility with an undocumented macro.
   2392  1.1  christos    Use YYerror or YYUNDEF. */
   2393  1.1  christos #define YYERRCODE YYUNDEF
   2394  1.1  christos 
   2395  1.1  christos 
   2396  1.1  christos /* Enable debugging if requested.  */
   2397  1.1  christos #if YYDEBUG
   2398  1.1  christos 
   2399  1.1  christos # ifndef YYFPRINTF
   2400  1.1  christos #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
   2401  1.1  christos #  define YYFPRINTF fprintf
   2402  1.1  christos # endif
   2403  1.1  christos 
   2404  1.1  christos # define YYDPRINTF(Args)                        \
   2405  1.1  christos do {                                            \
   2406  1.1  christos   if (yydebug)                                  \
   2407  1.1  christos     YYFPRINTF Args;                             \
   2408  1.1  christos } while (0)
   2409  1.1  christos 
   2410  1.1  christos 
   2411  1.1  christos 
   2412  1.1  christos 
   2413  1.1  christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
   2414  1.1  christos do {                                                                      \
   2415  1.1  christos   if (yydebug)                                                            \
   2416  1.1  christos     {                                                                     \
   2417  1.1  christos       YYFPRINTF (stderr, "%s ", Title);                                   \
   2418  1.1  christos       yy_symbol_print (stderr,                                            \
   2419  1.1  christos                   Kind, Value); \
   2420  1.1  christos       YYFPRINTF (stderr, "\n");                                           \
   2421  1.1  christos     }                                                                     \
   2422  1.1  christos } while (0)
   2423  1.1  christos 
   2424  1.1  christos 
   2425  1.1  christos /*-----------------------------------.
   2426  1.1  christos | Print this symbol's value on YYO.  |
   2427  1.1  christos `-----------------------------------*/
   2428  1.1  christos 
   2429  1.1  christos static void
   2430  1.1  christos yy_symbol_value_print (FILE *yyo,
   2431  1.1  christos                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   2432  1.1  christos {
   2433  1.1  christos   FILE *yyoutput = yyo;
   2434  1.1  christos   YY_USE (yyoutput);
   2435  1.1  christos   if (!yyvaluep)
   2436  1.1  christos     return;
   2437  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   2438  1.1  christos   YY_USE (yykind);
   2439  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   2440  1.1  christos }
   2441  1.1  christos 
   2442  1.1  christos 
   2443  1.1  christos /*---------------------------.
   2444  1.1  christos | Print this symbol on YYO.  |
   2445  1.1  christos `---------------------------*/
   2446  1.1  christos 
   2447  1.1  christos static void
   2448  1.1  christos yy_symbol_print (FILE *yyo,
   2449  1.1  christos                  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   2450  1.1  christos {
   2451  1.1  christos   YYFPRINTF (yyo, "%s %s (",
   2452  1.1  christos              yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
   2453  1.1  christos 
   2454  1.1  christos   yy_symbol_value_print (yyo, yykind, yyvaluep);
   2455  1.1  christos   YYFPRINTF (yyo, ")");
   2456  1.1  christos }
   2457  1.1  christos 
   2458  1.1  christos /*------------------------------------------------------------------.
   2459  1.1  christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
   2460  1.1  christos | TOP (included).                                                   |
   2461  1.1  christos `------------------------------------------------------------------*/
   2462  1.1  christos 
   2463  1.1  christos static void
   2464  1.1  christos yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
   2465  1.1  christos {
   2466  1.1  christos   YYFPRINTF (stderr, "Stack now");
   2467  1.1  christos   for (; yybottom <= yytop; yybottom++)
   2468  1.1  christos     {
   2469  1.1  christos       int yybot = *yybottom;
   2470  1.1  christos       YYFPRINTF (stderr, " %d", yybot);
   2471  1.1  christos     }
   2472  1.1  christos   YYFPRINTF (stderr, "\n");
   2473  1.1  christos }
   2474  1.1  christos 
   2475  1.1  christos # define YY_STACK_PRINT(Bottom, Top)                            \
   2476  1.1  christos do {                                                            \
   2477  1.1  christos   if (yydebug)                                                  \
   2478  1.1  christos     yy_stack_print ((Bottom), (Top));                           \
   2479  1.1  christos } while (0)
   2480  1.1  christos 
   2481  1.1  christos 
   2482  1.1  christos /*------------------------------------------------.
   2483  1.1  christos | Report that the YYRULE is going to be reduced.  |
   2484  1.1  christos `------------------------------------------------*/
   2485  1.1  christos 
   2486  1.1  christos static void
   2487  1.1  christos yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
   2488  1.1  christos                  int yyrule)
   2489  1.1  christos {
   2490  1.1  christos   int yylno = yyrline[yyrule];
   2491  1.1  christos   int yynrhs = yyr2[yyrule];
   2492  1.1  christos   int yyi;
   2493  1.1  christos   YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
   2494  1.1  christos              yyrule - 1, yylno);
   2495  1.1  christos   /* The symbols being reduced.  */
   2496  1.1  christos   for (yyi = 0; yyi < yynrhs; yyi++)
   2497  1.1  christos     {
   2498  1.1  christos       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
   2499  1.1  christos       yy_symbol_print (stderr,
   2500  1.1  christos                        YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
   2501  1.1  christos                        &yyvsp[(yyi + 1) - (yynrhs)]);
   2502  1.1  christos       YYFPRINTF (stderr, "\n");
   2503  1.1  christos     }
   2504  1.1  christos }
   2505  1.1  christos 
   2506  1.1  christos # define YY_REDUCE_PRINT(Rule)          \
   2507  1.1  christos do {                                    \
   2508  1.1  christos   if (yydebug)                          \
   2509  1.1  christos     yy_reduce_print (yyssp, yyvsp, Rule); \
   2510  1.1  christos } while (0)
   2511  1.1  christos 
   2512  1.1  christos /* Nonzero means print parse trace.  It is left uninitialized so that
   2513  1.1  christos    multiple parsers can coexist.  */
   2514  1.1  christos int yydebug;
   2515  1.1  christos #else /* !YYDEBUG */
   2516  1.1  christos # define YYDPRINTF(Args) ((void) 0)
   2517  1.1  christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
   2518  1.1  christos # define YY_STACK_PRINT(Bottom, Top)
   2519  1.1  christos # define YY_REDUCE_PRINT(Rule)
   2520  1.1  christos #endif /* !YYDEBUG */
   2521  1.1  christos 
   2522  1.1  christos 
   2523  1.1  christos /* YYINITDEPTH -- initial size of the parser's stacks.  */
   2524  1.1  christos #ifndef YYINITDEPTH
   2525  1.1  christos # define YYINITDEPTH 200
   2526  1.1  christos #endif
   2527  1.1  christos 
   2528  1.1  christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   2529  1.1  christos    if the built-in stack extension method is used).
   2530  1.1  christos 
   2531  1.1  christos    Do not make this value too large; the results are undefined if
   2532  1.1  christos    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   2533  1.1  christos    evaluated with infinite-precision integer arithmetic.  */
   2534  1.1  christos 
   2535  1.1  christos #ifndef YYMAXDEPTH
   2536  1.1  christos # define YYMAXDEPTH 10000
   2537  1.1  christos #endif
   2538  1.1  christos 
   2539  1.1  christos 
   2540  1.1  christos 
   2541  1.1  christos 
   2542  1.1  christos 
   2543  1.1  christos 
   2544  1.1  christos /*-----------------------------------------------.
   2545  1.1  christos | Release the memory associated to this symbol.  |
   2546  1.1  christos `-----------------------------------------------*/
   2547  1.1  christos 
   2548  1.1  christos static void
   2549  1.1  christos yydestruct (const char *yymsg,
   2550  1.1  christos             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
   2551  1.1  christos {
   2552  1.1  christos   YY_USE (yyvaluep);
   2553  1.1  christos   if (!yymsg)
   2554  1.1  christos     yymsg = "Deleting";
   2555  1.1  christos   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
   2556  1.1  christos 
   2557  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   2558  1.1  christos   YY_USE (yykind);
   2559  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   2560  1.1  christos }
   2561  1.1  christos 
   2562  1.1  christos 
   2563  1.1  christos /* Lookahead token kind.  */
   2564  1.1  christos int yychar;
   2565  1.1  christos 
   2566  1.1  christos /* The semantic value of the lookahead symbol.  */
   2567  1.1  christos YYSTYPE yylval;
   2568  1.1  christos /* Number of syntax errors so far.  */
   2569  1.1  christos int yynerrs;
   2570  1.1  christos 
   2571  1.1  christos 
   2572  1.1  christos 
   2573  1.1  christos 
   2574  1.1  christos /*----------.
   2575  1.1  christos | yyparse.  |
   2576  1.1  christos `----------*/
   2577  1.1  christos 
   2578  1.1  christos int
   2579  1.1  christos yyparse (void)
   2580  1.1  christos {
   2581  1.1  christos     yy_state_fast_t yystate = 0;
   2582  1.1  christos     /* Number of tokens to shift before error messages enabled.  */
   2583  1.1  christos     int yyerrstatus = 0;
   2584  1.1  christos 
   2585  1.1  christos     /* Refer to the stacks through separate pointers, to allow yyoverflow
   2586  1.1  christos        to reallocate them elsewhere.  */
   2587  1.1  christos 
   2588  1.1  christos     /* Their size.  */
   2589  1.1  christos     YYPTRDIFF_T yystacksize = YYINITDEPTH;
   2590  1.1  christos 
   2591  1.1  christos     /* The state stack: array, bottom, top.  */
   2592  1.1  christos     yy_state_t yyssa[YYINITDEPTH];
   2593  1.1  christos     yy_state_t *yyss = yyssa;
   2594  1.1  christos     yy_state_t *yyssp = yyss;
   2595  1.1  christos 
   2596  1.1  christos     /* The semantic value stack: array, bottom, top.  */
   2597  1.1  christos     YYSTYPE yyvsa[YYINITDEPTH];
   2598  1.1  christos     YYSTYPE *yyvs = yyvsa;
   2599  1.1  christos     YYSTYPE *yyvsp = yyvs;
   2600  1.1  christos 
   2601  1.1  christos   int yyn;
   2602  1.1  christos   /* The return value of yyparse.  */
   2603  1.1  christos   int yyresult;
   2604  1.1  christos   /* Lookahead symbol kind.  */
   2605  1.1  christos   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   2606  1.1  christos   /* The variables used to return semantic value and location from the
   2607  1.1  christos      action routines.  */
   2608  1.1  christos   YYSTYPE yyval;
   2609  1.1  christos 
   2610  1.1  christos 
   2611  1.1  christos 
   2612  1.1  christos #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
   2613  1.1  christos 
   2614  1.1  christos   /* The number of symbols on the RHS of the reduced rule.
   2615  1.1  christos      Keep to zero when no symbol should be popped.  */
   2616  1.1  christos   int yylen = 0;
   2617  1.1  christos 
   2618  1.1  christos   YYDPRINTF ((stderr, "Starting parse\n"));
   2619  1.1  christos 
   2620  1.1  christos   yychar = YYEMPTY; /* Cause a token to be read.  */
   2621  1.1  christos 
   2622  1.1  christos   goto yysetstate;
   2623  1.1  christos 
   2624  1.1  christos 
   2625  1.1  christos /*------------------------------------------------------------.
   2626  1.1  christos | yynewstate -- push a new state, which is found in yystate.  |
   2627  1.1  christos `------------------------------------------------------------*/
   2628  1.1  christos yynewstate:
   2629  1.1  christos   /* In all cases, when you get here, the value and location stacks
   2630  1.1  christos      have just been pushed.  So pushing a state here evens the stacks.  */
   2631  1.1  christos   yyssp++;
   2632  1.1  christos 
   2633  1.1  christos 
   2634  1.1  christos /*--------------------------------------------------------------------.
   2635  1.1  christos | yysetstate -- set current state (the top of the stack) to yystate.  |
   2636  1.1  christos `--------------------------------------------------------------------*/
   2637  1.1  christos yysetstate:
   2638  1.1  christos   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   2639  1.1  christos   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
   2640  1.1  christos   YY_IGNORE_USELESS_CAST_BEGIN
   2641  1.1  christos   *yyssp = YY_CAST (yy_state_t, yystate);
   2642  1.1  christos   YY_IGNORE_USELESS_CAST_END
   2643  1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   2644  1.1  christos 
   2645  1.1  christos   if (yyss + yystacksize - 1 <= yyssp)
   2646  1.1  christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
   2647  1.1  christos     YYNOMEM;
   2648  1.1  christos #else
   2649  1.1  christos     {
   2650  1.1  christos       /* Get the current used size of the three stacks, in elements.  */
   2651  1.1  christos       YYPTRDIFF_T yysize = yyssp - yyss + 1;
   2652  1.1  christos 
   2653  1.1  christos # if defined yyoverflow
   2654  1.1  christos       {
   2655  1.1  christos         /* Give user a chance to reallocate the stack.  Use copies of
   2656  1.1  christos            these so that the &'s don't force the real ones into
   2657  1.1  christos            memory.  */
   2658  1.1  christos         yy_state_t *yyss1 = yyss;
   2659  1.1  christos         YYSTYPE *yyvs1 = yyvs;
   2660  1.1  christos 
   2661  1.1  christos         /* Each stack pointer address is followed by the size of the
   2662  1.1  christos            data in use in that stack, in bytes.  This used to be a
   2663  1.1  christos            conditional around just the two extra args, but that might
   2664  1.1  christos            be undefined if yyoverflow is a macro.  */
   2665  1.1  christos         yyoverflow (YY_("memory exhausted"),
   2666  1.1  christos                     &yyss1, yysize * YYSIZEOF (*yyssp),
   2667  1.1  christos                     &yyvs1, yysize * YYSIZEOF (*yyvsp),
   2668  1.1  christos                     &yystacksize);
   2669  1.1  christos         yyss = yyss1;
   2670  1.1  christos         yyvs = yyvs1;
   2671  1.1  christos       }
   2672  1.1  christos # else /* defined YYSTACK_RELOCATE */
   2673  1.1  christos       /* Extend the stack our own way.  */
   2674  1.1  christos       if (YYMAXDEPTH <= yystacksize)
   2675  1.1  christos         YYNOMEM;
   2676  1.1  christos       yystacksize *= 2;
   2677  1.1  christos       if (YYMAXDEPTH < yystacksize)
   2678  1.1  christos         yystacksize = YYMAXDEPTH;
   2679  1.1  christos 
   2680  1.1  christos       {
   2681  1.1  christos         yy_state_t *yyss1 = yyss;
   2682  1.1  christos         union yyalloc *yyptr =
   2683  1.1  christos           YY_CAST (union yyalloc *,
   2684  1.1  christos                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
   2685  1.1  christos         if (! yyptr)
   2686  1.1  christos           YYNOMEM;
   2687  1.1  christos         YYSTACK_RELOCATE (yyss_alloc, yyss);
   2688  1.1  christos         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
   2689  1.1  christos #  undef YYSTACK_RELOCATE
   2690  1.1  christos         if (yyss1 != yyssa)
   2691  1.1  christos           YYSTACK_FREE (yyss1);
   2692  1.1  christos       }
   2693  1.1  christos # endif
   2694  1.1  christos 
   2695  1.1  christos       yyssp = yyss + yysize - 1;
   2696  1.1  christos       yyvsp = yyvs + yysize - 1;
   2697  1.1  christos 
   2698  1.1  christos       YY_IGNORE_USELESS_CAST_BEGIN
   2699  1.1  christos       YYDPRINTF ((stderr, "Stack size increased to %ld\n",
   2700  1.1  christos                   YY_CAST (long, yystacksize)));
   2701  1.1  christos       YY_IGNORE_USELESS_CAST_END
   2702  1.1  christos 
   2703  1.1  christos       if (yyss + yystacksize - 1 <= yyssp)
   2704  1.1  christos         YYABORT;
   2705  1.1  christos     }
   2706  1.1  christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
   2707  1.1  christos 
   2708  1.1  christos 
   2709  1.1  christos   if (yystate == YYFINAL)
   2710  1.1  christos     YYACCEPT;
   2711  1.1  christos 
   2712  1.1  christos   goto yybackup;
   2713  1.1  christos 
   2714  1.1  christos 
   2715  1.1  christos /*-----------.
   2716  1.1  christos | yybackup.  |
   2717  1.1  christos `-----------*/
   2718  1.1  christos yybackup:
   2719  1.1  christos   /* Do appropriate processing given the current state.  Read a
   2720  1.1  christos      lookahead token if we need one and don't already have one.  */
   2721  1.1  christos 
   2722  1.1  christos   /* First try to decide what to do without reference to lookahead token.  */
   2723  1.1  christos   yyn = yypact[yystate];
   2724  1.1  christos   if (yypact_value_is_default (yyn))
   2725  1.1  christos     goto yydefault;
   2726  1.1  christos 
   2727  1.1  christos   /* Not known => get a lookahead token if don't already have one.  */
   2728  1.1  christos 
   2729  1.1  christos   /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   2730  1.1  christos   if (yychar == YYEMPTY)
   2731  1.1  christos     {
   2732  1.1  christos       YYDPRINTF ((stderr, "Reading a token\n"));
   2733  1.1  christos       yychar = yylex ();
   2734  1.1  christos     }
   2735  1.1  christos 
   2736  1.1  christos   if (yychar <= YYEOF)
   2737  1.1  christos     {
   2738  1.1  christos       yychar = YYEOF;
   2739  1.1  christos       yytoken = YYSYMBOL_YYEOF;
   2740  1.1  christos       YYDPRINTF ((stderr, "Now at end of input.\n"));
   2741  1.1  christos     }
   2742  1.1  christos   else if (yychar == YYerror)
   2743  1.1  christos     {
   2744  1.1  christos       /* The scanner already issued an error message, process directly
   2745  1.1  christos          to error recovery.  But do not keep the error token as
   2746  1.1  christos          lookahead, it is too special and may lead us to an endless
   2747  1.1  christos          loop in error recovery. */
   2748  1.1  christos       yychar = YYUNDEF;
   2749  1.1  christos       yytoken = YYSYMBOL_YYerror;
   2750  1.1  christos       goto yyerrlab1;
   2751  1.1  christos     }
   2752  1.1  christos   else
   2753  1.1  christos     {
   2754  1.1  christos       yytoken = YYTRANSLATE (yychar);
   2755  1.1  christos       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
   2756  1.1  christos     }
   2757  1.1  christos 
   2758  1.1  christos   /* If the proper action on seeing token YYTOKEN is to reduce or to
   2759  1.1  christos      detect an error, take that action.  */
   2760  1.1  christos   yyn += yytoken;
   2761  1.1  christos   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
   2762  1.1  christos     goto yydefault;
   2763  1.1  christos   yyn = yytable[yyn];
   2764  1.1  christos   if (yyn <= 0)
   2765  1.1  christos     {
   2766  1.1  christos       if (yytable_value_is_error (yyn))
   2767  1.1  christos         goto yyerrlab;
   2768  1.1  christos       yyn = -yyn;
   2769  1.1  christos       goto yyreduce;
   2770  1.1  christos     }
   2771  1.1  christos 
   2772  1.1  christos   /* Count tokens shifted since error; after three, turn off error
   2773  1.1  christos      status.  */
   2774  1.1  christos   if (yyerrstatus)
   2775  1.1  christos     yyerrstatus--;
   2776  1.1  christos 
   2777  1.1  christos   /* Shift the lookahead token.  */
   2778  1.1  christos   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
   2779  1.1  christos   yystate = yyn;
   2780  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   2781  1.1  christos   *++yyvsp = yylval;
   2782  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   2783  1.1  christos 
   2784  1.1  christos   /* Discard the shifted token.  */
   2785  1.1  christos   yychar = YYEMPTY;
   2786  1.1  christos   goto yynewstate;
   2787  1.1  christos 
   2788  1.1  christos 
   2789  1.1  christos /*-----------------------------------------------------------.
   2790  1.1  christos | yydefault -- do the default action for the current state.  |
   2791  1.1  christos `-----------------------------------------------------------*/
   2792  1.1  christos yydefault:
   2793  1.1  christos   yyn = yydefact[yystate];
   2794  1.1  christos   if (yyn == 0)
   2795  1.1  christos     goto yyerrlab;
   2796  1.1  christos   goto yyreduce;
   2797  1.1  christos 
   2798  1.1  christos 
   2799  1.1  christos /*-----------------------------.
   2800  1.1  christos | yyreduce -- do a reduction.  |
   2801  1.1  christos `-----------------------------*/
   2802  1.1  christos yyreduce:
   2803  1.1  christos   /* yyn is the number of a rule to reduce with.  */
   2804  1.1  christos   yylen = yyr2[yyn];
   2805  1.1  christos 
   2806  1.1  christos   /* If YYLEN is nonzero, implement the default value of the action:
   2807  1.1  christos      '$$ = $1'.
   2808  1.1  christos 
   2809  1.1  christos      Otherwise, the following line sets YYVAL to garbage.
   2810  1.1  christos      This behavior is undocumented and Bison
   2811  1.1  christos      users should not rely upon it.  Assigning to YYVAL
   2812  1.1  christos      unconditionally makes the parser a bit smaller, and it avoids a
   2813  1.1  christos      GCC warning that YYVAL may be used uninitialized.  */
   2814  1.1  christos   yyval = yyvsp[1-yylen];
   2815  1.1  christos 
   2816  1.1  christos 
   2817  1.1  christos   YY_REDUCE_PRINT (yyn);
   2818  1.1  christos   switch (yyn)
   2819  1.1  christos     {
   2820  1.1  christos   case 3: /* statement: asm  */
   2821  1.1  christos #line 650 "./config/bfin-parse.y"
   2822  1.1  christos         {
   2823  1.1  christos 	  insn = (yyvsp[0].instr);
   2824  1.1  christos 	  if (insn == (INSTR_T) 0)
   2825  1.1  christos 	    return NO_INSN_GENERATED;
   2826  1.1  christos 	  else if (insn == (INSTR_T) - 1)
   2827  1.1  christos 	    return SEMANTIC_ERROR;
   2828  1.1  christos 	  else
   2829  1.1  christos 	    return INSN_GENERATED;
   2830  1.1  christos 	}
   2831  1.1  christos #line 2832 "config/bfin-parse.c"
   2832  1.1  christos     break;
   2833  1.1  christos 
   2834  1.1  christos   case 5: /* asm: asm_1 DOUBLE_BAR asm_1 DOUBLE_BAR asm_1 SEMICOLON  */
   2835  1.1  christos #line 664 "./config/bfin-parse.y"
   2836  1.1  christos         {
   2837  1.1  christos 	  if (((yyvsp[-5].instr)->value & 0xf800) == 0xc000)
   2838  1.1  christos 	    {
   2839  1.1  christos 	      if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
   2840  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-3].instr), (yyvsp[-1].instr));
   2841  1.1  christos 	      else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
   2842  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-1].instr), (yyvsp[-3].instr));
   2843  1.1  christos 	      else
   2844  1.1  christos 		return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instruction group");
   2845  1.1  christos 	    }
   2846  1.1  christos 	  else if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
   2847  1.1  christos 	    {
   2848  1.1  christos 	      if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-1].instr)))
   2849  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-5].instr), (yyvsp[-1].instr));
   2850  1.1  christos 	      else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-1].instr)))
   2851  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), (yyvsp[-5].instr));
   2852  1.1  christos 	      else
   2853  1.1  christos 		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instruction group");
   2854  1.1  christos 	    }
   2855  1.1  christos 	  else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
   2856  1.1  christos 	    {
   2857  1.1  christos 	      if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-3].instr)))
   2858  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-5].instr), (yyvsp[-3].instr));
   2859  1.1  christos 	      else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-3].instr)))
   2860  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), (yyvsp[-5].instr));
   2861  1.1  christos 	      else
   2862  1.1  christos 		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instruction group");
   2863  1.1  christos 	    }
   2864  1.1  christos 	  else
   2865  1.1  christos 	    error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
   2866  1.1  christos 	}
   2867  1.1  christos #line 2868 "config/bfin-parse.c"
   2868  1.1  christos     break;
   2869  1.1  christos 
   2870  1.1  christos   case 6: /* asm: asm_1 DOUBLE_BAR asm_1 SEMICOLON  */
   2871  1.1  christos #line 697 "./config/bfin-parse.y"
   2872  1.1  christos         {
   2873  1.1  christos 	  if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
   2874  1.1  christos 	    {
   2875  1.1  christos 	      if (is_group1 ((yyvsp[-1].instr)))
   2876  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), 0);
   2877  1.1  christos 	      else if (is_group2 ((yyvsp[-1].instr)))
   2878  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), 0, (yyvsp[-1].instr));
   2879  1.1  christos 	      else
   2880  1.1  christos 		return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
   2881  1.1  christos 	    }
   2882  1.1  christos 	  else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
   2883  1.1  christos 	    {
   2884  1.1  christos 	      if (is_group1 ((yyvsp[-3].instr)))
   2885  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), 0);
   2886  1.1  christos 	      else if (is_group2 ((yyvsp[-3].instr)))
   2887  1.1  christos 		(yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), 0, (yyvsp[-3].instr));
   2888  1.1  christos 	      else
   2889  1.1  christos 		return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
   2890  1.1  christos 	    }
   2891  1.1  christos 	  else if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
   2892  1.1  christos 	      (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-3].instr), (yyvsp[-1].instr));
   2893  1.1  christos 	  else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
   2894  1.1  christos 	    (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-1].instr), (yyvsp[-3].instr));
   2895  1.1  christos 	  else
   2896  1.1  christos 	    return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
   2897  1.1  christos 	}
   2898  1.1  christos #line 2899 "config/bfin-parse.c"
   2899  1.1  christos     break;
   2900  1.1  christos 
   2901  1.1  christos   case 7: /* asm: error  */
   2902  1.1  christos #line 724 "./config/bfin-parse.y"
   2903  1.1  christos         {
   2904  1.1  christos 	(yyval.instr) = 0;
   2905  1.1  christos 	yyerror ("");
   2906  1.1  christos 	yyerrok;
   2907  1.1  christos 	}
   2908  1.1  christos #line 2909 "config/bfin-parse.c"
   2909  1.1  christos     break;
   2910  1.1  christos 
   2911  1.1  christos   case 8: /* asm_1: MNOP  */
   2912  1.1  christos #line 735 "./config/bfin-parse.y"
   2913  1.1  christos         {
   2914  1.1  christos 	  (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
   2915  1.1  christos 	}
   2916  1.1  christos #line 2917 "config/bfin-parse.c"
   2917  1.1  christos     break;
   2918  1.1  christos 
   2919  1.1  christos   case 9: /* asm_1: assign_macfunc opt_mode  */
   2920  1.1  christos #line 739 "./config/bfin-parse.y"
   2921  1.1  christos         {
   2922  1.1  christos 	  int op0, op1;
   2923  1.1  christos 	  int w0 = 0, w1 = 0;
   2924  1.1  christos 	  int h00, h10, h01, h11;
   2925  1.1  christos 
   2926  1.1  christos 	  if (check_macfunc_option (&(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
   2927  1.1  christos 	    return yyerror ("bad option");
   2928  1.1  christos 
   2929  1.1  christos 	  if ((yyvsp[-1].macfunc).n == 0)
   2930  1.1  christos 	    {
   2931  1.1  christos 	      if ((yyvsp[0].mod).MM)
   2932  1.1  christos 		return yyerror ("(m) not allowed with a0 unit");
   2933  1.1  christos 	      op1 = 3;
   2934  1.1  christos 	      op0 = (yyvsp[-1].macfunc).op;
   2935  1.1  christos 	      w1 = 0;
   2936  1.1  christos               w0 = (yyvsp[-1].macfunc).w;
   2937  1.1  christos 	      h00 = IS_H ((yyvsp[-1].macfunc).s0);
   2938  1.1  christos               h10 = IS_H ((yyvsp[-1].macfunc).s1);
   2939  1.1  christos 	      h01 = h11 = 0;
   2940  1.1  christos 	    }
   2941  1.1  christos 	  else
   2942  1.1  christos 	    {
   2943  1.1  christos 	      op1 = (yyvsp[-1].macfunc).op;
   2944  1.1  christos 	      op0 = 3;
   2945  1.1  christos 	      w1 = (yyvsp[-1].macfunc).w;
   2946  1.1  christos               w0 = 0;
   2947  1.1  christos 	      h00 = h10 = 0;
   2948  1.1  christos 	      h01 = IS_H ((yyvsp[-1].macfunc).s0);
   2949  1.1  christos               h11 = IS_H ((yyvsp[-1].macfunc).s1);
   2950  1.1  christos 	    }
   2951  1.1  christos 	  (yyval.instr) = DSP32MAC (op1, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, w1, (yyvsp[-1].macfunc).P, h01, h11, h00, h10,
   2952  1.1  christos 			 &(yyvsp[-1].macfunc).dst, op0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, w0);
   2953  1.1  christos 	}
   2954  1.1  christos #line 2955 "config/bfin-parse.c"
   2955  1.1  christos     break;
   2956  1.1  christos 
   2957  1.1  christos   case 10: /* asm_1: assign_macfunc opt_mode COMMA assign_macfunc opt_mode  */
   2958  1.1  christos #line 777 "./config/bfin-parse.y"
   2959  1.1  christos         {
   2960  1.1  christos 	  Register *dst;
   2961  1.1  christos 
   2962  1.1  christos 	  if (check_macfuncs (&(yyvsp[-4].macfunc), &(yyvsp[-3].mod), &(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
   2963  1.1  christos 	    return -1;
   2964  1.1  christos 	  notethat ("assign_macfunc (.), assign_macfunc (.)\n");
   2965  1.1  christos 
   2966  1.1  christos 	  if ((yyvsp[-4].macfunc).w)
   2967  1.1  christos 	    dst = &(yyvsp[-4].macfunc).dst;
   2968  1.1  christos 	  else
   2969  1.1  christos 	    dst = &(yyvsp[-1].macfunc).dst;
   2970  1.1  christos 
   2971  1.1  christos 	  (yyval.instr) = DSP32MAC ((yyvsp[-4].macfunc).op, (yyvsp[-3].mod).MM, (yyvsp[0].mod).mod, (yyvsp[-4].macfunc).w, (yyvsp[-4].macfunc).P,
   2972  1.1  christos 			 IS_H ((yyvsp[-4].macfunc).s0),  IS_H ((yyvsp[-4].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
   2973  1.1  christos 			 dst, (yyvsp[-1].macfunc).op, &(yyvsp[-4].macfunc).s0, &(yyvsp[-4].macfunc).s1, (yyvsp[-1].macfunc).w);
   2974  1.1  christos 	}
   2975  1.1  christos #line 2976 "config/bfin-parse.c"
   2976  1.1  christos     break;
   2977  1.1  christos 
   2978  1.1  christos   case 11: /* asm_1: DISALGNEXCPT  */
   2979  1.1  christos #line 797 "./config/bfin-parse.y"
   2980  1.1  christos         {
   2981  1.1  christos 	  notethat ("dsp32alu: DISALGNEXCPT\n");
   2982  1.1  christos 	  (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
   2983  1.1  christos 	}
   2984  1.1  christos #line 2985 "config/bfin-parse.c"
   2985  1.1  christos     break;
   2986  1.1  christos 
   2987  1.1  christos   case 12: /* asm_1: REG ASSIGN LPAREN a_plusassign REG_A RPAREN  */
   2988  1.1  christos #line 802 "./config/bfin-parse.y"
   2989  1.1  christos         {
   2990  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && !IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
   2991  1.1  christos 	    {
   2992  1.1  christos 	      notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
   2993  1.1  christos 	      (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[-5].reg), &reg7, &reg7, 0, 0, 0);
   2994  1.1  christos 	    }
   2995  1.1  christos 	  else
   2996  1.1  christos 	    return yyerror ("Register mismatch");
   2997  1.1  christos 	}
   2998  1.1  christos #line 2999 "config/bfin-parse.c"
   2999  1.1  christos     break;
   3000  1.1  christos 
   3001  1.1  christos   case 13: /* asm_1: HALF_REG ASSIGN LPAREN a_plusassign REG_A RPAREN  */
   3002  1.1  christos #line 812 "./config/bfin-parse.y"
   3003  1.1  christos         {
   3004  1.1  christos 	  if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
   3005  1.1  christos 	    {
   3006  1.1  christos 	      notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
   3007  1.1  christos 	      (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &reg7, &reg7, 0, 0, 1);
   3008  1.1  christos 	    }
   3009  1.1  christos 	  else
   3010  1.1  christos 	    return yyerror ("Register mismatch");
   3011  1.1  christos 	}
   3012  1.1  christos #line 3013 "config/bfin-parse.c"
   3013  1.1  christos     break;
   3014  1.1  christos 
   3015  1.1  christos   case 14: /* asm_1: A_ZERO_DOT_H ASSIGN HALF_REG  */
   3016  1.1  christos #line 822 "./config/bfin-parse.y"
   3017  1.1  christos         {
   3018  1.1  christos 	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
   3019  1.1  christos 	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
   3020  1.1  christos 	}
   3021  1.1  christos #line 3022 "config/bfin-parse.c"
   3022  1.1  christos     break;
   3023  1.1  christos 
   3024  1.1  christos   case 15: /* asm_1: A_ONE_DOT_H ASSIGN HALF_REG  */
   3025  1.1  christos #line 827 "./config/bfin-parse.y"
   3026  1.1  christos         {
   3027  1.1  christos 	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
   3028  1.1  christos 	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
   3029  1.1  christos 	}
   3030  1.1  christos #line 3031 "config/bfin-parse.c"
   3031  1.1  christos     break;
   3032  1.1  christos 
   3033  1.1  christos   case 16: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16P LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir  */
   3034  1.1  christos #line 833 "./config/bfin-parse.y"
   3035  1.1  christos         {
   3036  1.1  christos 	  if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
   3037  1.1  christos 	    return yyerror ("Dregs expected");
   3038  1.1  christos 	  else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
   3039  1.1  christos 	    return yyerror ("Illegal dest register combination");
   3040  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3041  1.1  christos 	    return yyerror ("Bad dreg pair");
   3042  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3043  1.1  christos 	    return yyerror ("Bad dreg pair");
   3044  1.1  christos 	  else
   3045  1.1  christos 	    {
   3046  1.1  christos 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (aligndir)\n");
   3047  1.1  christos 	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
   3048  1.1  christos 	    }
   3049  1.1  christos 	}
   3050  1.1  christos #line 3051 "config/bfin-parse.c"
   3051  1.1  christos     break;
   3052  1.1  christos 
   3053  1.1  christos   case 17: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16M LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir  */
   3054  1.1  christos #line 851 "./config/bfin-parse.y"
   3055  1.1  christos         {
   3056  1.1  christos 	  if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
   3057  1.1  christos 	    return yyerror ("Dregs expected");
   3058  1.1  christos 	  else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
   3059  1.1  christos 	    return yyerror ("Illegal dest register combination");
   3060  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3061  1.1  christos 	    return yyerror ("Bad dreg pair");
   3062  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3063  1.1  christos 	    return yyerror ("Bad dreg pair");
   3064  1.1  christos 	  else
   3065  1.1  christos 	    {
   3066  1.1  christos 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
   3067  1.1  christos 	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 1);
   3068  1.1  christos 	    }
   3069  1.1  christos 	}
   3070  1.1  christos #line 3071 "config/bfin-parse.c"
   3071  1.1  christos     break;
   3072  1.1  christos 
   3073  1.1  christos   case 18: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEUNPACK REG COLON expr aligndir  */
   3074  1.1  christos #line 868 "./config/bfin-parse.y"
   3075  1.1  christos         {
   3076  1.1  christos 	  if (!IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)))
   3077  1.1  christos 	    return yyerror ("Dregs expected");
   3078  1.1  christos 	  else if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
   3079  1.1  christos 	    return yyerror ("Illegal dest register combination");
   3080  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
   3081  1.1  christos 	    return yyerror ("Bad dreg pair");
   3082  1.1  christos 	  else
   3083  1.1  christos 	    {
   3084  1.1  christos 	      notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
   3085  1.1  christos 	      (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, (yyvsp[0].r0).r0, 0, 1);
   3086  1.1  christos 	    }
   3087  1.1  christos 	}
   3088  1.1  christos #line 3089 "config/bfin-parse.c"
   3089  1.1  christos     break;
   3090  1.1  christos 
   3091  1.1  christos   case 19: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN SEARCH REG LPAREN searchmod RPAREN  */
   3092  1.1  christos #line 882 "./config/bfin-parse.y"
   3093  1.1  christos         {
   3094  1.1  christos 	  if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
   3095  1.1  christos 	    return yyerror ("Illegal dest register combination");
   3096  1.1  christos 
   3097  1.1  christos 	  if (IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)))
   3098  1.1  christos 	    {
   3099  1.1  christos 	      notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
   3100  1.1  christos 	      (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0, (yyvsp[-1].r0).r0);
   3101  1.1  christos 	    }
   3102  1.1  christos 	  else
   3103  1.1  christos 	    return yyerror ("Register mismatch");
   3104  1.1  christos 	}
   3105  1.1  christos #line 3106 "config/bfin-parse.c"
   3106  1.1  christos     break;
   3107  1.1  christos 
   3108  1.1  christos   case 20: /* asm_1: REG ASSIGN A_ONE_DOT_L PLUS A_ONE_DOT_H COMMA REG ASSIGN A_ZERO_DOT_L PLUS A_ZERO_DOT_H  */
   3109  1.1  christos #line 896 "./config/bfin-parse.y"
   3110  1.1  christos         {
   3111  1.1  christos 	  if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
   3112  1.1  christos 	    return yyerror ("Illegal dest register combination");
   3113  1.1  christos 
   3114  1.1  christos 	  if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-4].reg)))
   3115  1.1  christos 	    {
   3116  1.1  christos 	      notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h  \n");
   3117  1.1  christos 	      (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &reg7, &reg7, 0, 0, 1);
   3118  1.1  christos 	    }
   3119  1.1  christos 	  else
   3120  1.1  christos 	    return yyerror ("Register mismatch");
   3121  1.1  christos 	}
   3122  1.1  christos #line 3123 "config/bfin-parse.c"
   3123  1.1  christos     break;
   3124  1.1  christos 
   3125  1.1  christos   case 21: /* asm_1: REG ASSIGN REG_A PLUS REG_A COMMA REG ASSIGN REG_A MINUS REG_A amod1  */
   3126  1.1  christos #line 911 "./config/bfin-parse.y"
   3127  1.1  christos         {
   3128  1.1  christos 	  if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
   3129  1.1  christos 	    return yyerror ("Resource conflict in dest reg");
   3130  1.1  christos 
   3131  1.1  christos 	  if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
   3132  1.1  christos 	      && IS_A1 ((yyvsp[-3].reg)) && !IS_A1 ((yyvsp[-1].reg)))
   3133  1.1  christos 	    {
   3134  1.1  christos 	      notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
   3135  1.1  christos 	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &reg7, &reg7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 0);
   3136  1.1  christos 
   3137  1.1  christos 	    }
   3138  1.1  christos 	  else if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
   3139  1.1  christos 		   && !IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
   3140  1.1  christos 	    {
   3141  1.1  christos 	      notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
   3142  1.1  christos 	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &reg7, &reg7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 1);
   3143  1.1  christos 	    }
   3144  1.1  christos 	  else
   3145  1.1  christos 	    return yyerror ("Register mismatch");
   3146  1.1  christos 	}
   3147  1.1  christos #line 3148 "config/bfin-parse.c"
   3148  1.1  christos     break;
   3149  1.1  christos 
   3150  1.1  christos   case 22: /* asm_1: REG ASSIGN REG plus_minus REG COMMA REG ASSIGN REG plus_minus REG amod1  */
   3151  1.1  christos #line 933 "./config/bfin-parse.y"
   3152  1.1  christos         {
   3153  1.1  christos 	  if ((yyvsp[-8].r0).r0 == (yyvsp[-2].r0).r0)
   3154  1.1  christos 	    return yyerror ("Operators must differ");
   3155  1.1  christos 
   3156  1.1  christos 	  if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg))
   3157  1.1  christos 	      && REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) && REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
   3158  1.1  christos 	    {
   3159  1.1  christos 	      notethat ("dsp32alu: dregs = dregs + dregs,"
   3160  1.1  christos 		       "dregs = dregs - dregs (amod1)\n");
   3161  1.1  christos 	      (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);
   3162  1.1  christos 	    }
   3163  1.1  christos 	  else
   3164  1.1  christos 	    return yyerror ("Register mismatch");
   3165  1.1  christos 	}
   3166  1.1  christos #line 3167 "config/bfin-parse.c"
   3167  1.1  christos     break;
   3168  1.1  christos 
   3169  1.1  christos   case 23: /* asm_1: REG ASSIGN REG op_bar_op REG COMMA REG ASSIGN REG op_bar_op REG amod2  */
   3170  1.1  christos #line 951 "./config/bfin-parse.y"
   3171  1.1  christos         {
   3172  1.1  christos 	  if (!REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) || !REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
   3173  1.1  christos 	    return yyerror ("Differing source registers");
   3174  1.1  christos 
   3175  1.1  christos 	  if (!IS_DREG ((yyvsp[-11].reg)) || !IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)) || !IS_DREG ((yyvsp[-5].reg)))
   3176  1.1  christos 	    return yyerror ("Dregs expected");
   3177  1.1  christos 
   3178  1.1  christos 	  if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
   3179  1.1  christos 	    return yyerror ("Resource conflict in dest reg");
   3180  1.1  christos 
   3181  1.1  christos 	  if ((yyvsp[-8].r0).r0 == 1 && (yyvsp[-2].r0).r0 == 2)
   3182  1.1  christos 	    {
   3183  1.1  christos 	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
   3184  1.1  christos 	      (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);
   3185  1.1  christos 	    }
   3186  1.1  christos 	  else if ((yyvsp[-8].r0).r0 == 0 && (yyvsp[-2].r0).r0 == 3)
   3187  1.1  christos 	    {
   3188  1.1  christos 	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
   3189  1.1  christos 	      (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);
   3190  1.1  christos 	    }
   3191  1.1  christos 	  else
   3192  1.1  christos 	    return yyerror ("Bar operand mismatch");
   3193  1.1  christos 	}
   3194  1.1  christos #line 3195 "config/bfin-parse.c"
   3195  1.1  christos     break;
   3196  1.1  christos 
   3197  1.1  christos   case 24: /* asm_1: REG ASSIGN ABS REG vmod  */
   3198  1.1  christos #line 976 "./config/bfin-parse.y"
   3199  1.1  christos         {
   3200  1.1  christos 	  int op;
   3201  1.1  christos 
   3202  1.1  christos 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3203  1.1  christos 	    {
   3204  1.1  christos 	      if ((yyvsp[0].r0).r0)
   3205  1.1  christos 		{
   3206  1.1  christos 		  notethat ("dsp32alu: dregs = ABS dregs (v)\n");
   3207  1.1  christos 		  op = 6;
   3208  1.1  christos 		}
   3209  1.1  christos 	      else
   3210  1.1  christos 		{
   3211  1.1  christos 		  /* Vector version of ABS.  */
   3212  1.1  christos 		  notethat ("dsp32alu: dregs = ABS dregs\n");
   3213  1.1  christos 		  op = 7;
   3214  1.1  christos 		}
   3215  1.1  christos 	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, 0, 0, 2);
   3216  1.1  christos 	    }
   3217  1.1  christos 	  else
   3218  1.1  christos 	    return yyerror ("Dregs expected");
   3219  1.1  christos 	}
   3220  1.1  christos #line 3221 "config/bfin-parse.c"
   3221  1.1  christos     break;
   3222  1.1  christos 
   3223  1.1  christos   case 25: /* asm_1: a_assign ABS REG_A  */
   3224  1.1  christos #line 998 "./config/bfin-parse.y"
   3225  1.1  christos         {
   3226  1.1  christos 	  notethat ("dsp32alu: Ax = ABS Ax\n");
   3227  1.1  christos 	  (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[-2].reg)), 0, 0, &reg7, &reg7, 0, 0, IS_A1 ((yyvsp[0].reg)));
   3228  1.1  christos 	}
   3229  1.1  christos #line 3230 "config/bfin-parse.c"
   3230  1.1  christos     break;
   3231  1.1  christos 
   3232  1.1  christos   case 26: /* asm_1: A_ZERO_DOT_L ASSIGN HALF_REG  */
   3233  1.1  christos #line 1003 "./config/bfin-parse.y"
   3234  1.1  christos         {
   3235  1.1  christos 	  if (IS_DREG_L ((yyvsp[0].reg)))
   3236  1.1  christos 	    {
   3237  1.1  christos 	      notethat ("dsp32alu: A0.l = reg_half\n");
   3238  1.1  christos 	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
   3239  1.1  christos 	    }
   3240  1.1  christos 	  else
   3241  1.1  christos 	    return yyerror ("A0.l = Rx.l expected");
   3242  1.1  christos 	}
   3243  1.1  christos #line 3244 "config/bfin-parse.c"
   3244  1.1  christos     break;
   3245  1.1  christos 
   3246  1.1  christos   case 27: /* asm_1: A_ONE_DOT_L ASSIGN HALF_REG  */
   3247  1.1  christos #line 1013 "./config/bfin-parse.y"
   3248  1.1  christos         {
   3249  1.1  christos 	  if (IS_DREG_L ((yyvsp[0].reg)))
   3250  1.1  christos 	    {
   3251  1.1  christos 	      notethat ("dsp32alu: A1.l = reg_half\n");
   3252  1.1  christos 	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
   3253  1.1  christos 	    }
   3254  1.1  christos 	  else
   3255  1.1  christos 	    return yyerror ("A1.l = Rx.l expected");
   3256  1.1  christos 	}
   3257  1.1  christos #line 3258 "config/bfin-parse.c"
   3258  1.1  christos     break;
   3259  1.1  christos 
   3260  1.1  christos   case 28: /* asm_1: REG ASSIGN c_align LPAREN REG COMMA REG RPAREN  */
   3261  1.1  christos #line 1024 "./config/bfin-parse.y"
   3262  1.1  christos         {
   3263  1.1  christos 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3264  1.1  christos 	    {
   3265  1.1  christos 	      notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
   3266  1.1  christos 	      (yyval.instr) = DSP32SHIFT (13, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[-5].r0).r0, 0);
   3267  1.1  christos 	    }
   3268  1.1  christos 	  else
   3269  1.1  christos 	    return yyerror ("Dregs expected");
   3270  1.1  christos 	}
   3271  1.1  christos #line 3272 "config/bfin-parse.c"
   3272  1.1  christos     break;
   3273  1.1  christos 
   3274  1.1  christos   case 29: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN byteop_mod  */
   3275  1.1  christos #line 1035 "./config/bfin-parse.y"
   3276  1.1  christos         {
   3277  1.1  christos 	  if (!IS_DREG ((yyvsp[-12].reg)))
   3278  1.1  christos 	    return yyerror ("Dregs expected");
   3279  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3280  1.1  christos 	    return yyerror ("Bad dreg pair");
   3281  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3282  1.1  christos 	    return yyerror ("Bad dreg pair");
   3283  1.1  christos 	  else
   3284  1.1  christos 	    {
   3285  1.1  christos 	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
   3286  1.1  christos 	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).r0);
   3287  1.1  christos 	    }
   3288  1.1  christos 	}
   3289  1.1  christos #line 3290 "config/bfin-parse.c"
   3290  1.1  christos     break;
   3291  1.1  christos 
   3292  1.1  christos   case 30: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN  */
   3293  1.1  christos #line 1049 "./config/bfin-parse.y"
   3294  1.1  christos         {
   3295  1.1  christos 	  if (!IS_DREG ((yyvsp[-11].reg)))
   3296  1.1  christos 	    return yyerror ("Dregs expected");
   3297  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-7].reg), (yyvsp[-5].expr)))
   3298  1.1  christos 	    return yyerror ("Bad dreg pair");
   3299  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
   3300  1.1  christos 	    return yyerror ("Bad dreg pair");
   3301  1.1  christos 	  else
   3302  1.1  christos 	    {
   3303  1.1  christos 	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
   3304  1.1  christos 	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-11].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0);
   3305  1.1  christos 	    }
   3306  1.1  christos 	}
   3307  1.1  christos #line 3308 "config/bfin-parse.c"
   3308  1.1  christos     break;
   3309  1.1  christos 
   3310  1.1  christos   case 31: /* asm_1: REG ASSIGN BYTEOP2P LPAREN REG COLON expr COMMA REG COLON expr RPAREN rnd_op  */
   3311  1.1  christos #line 1065 "./config/bfin-parse.y"
   3312  1.1  christos         {
   3313  1.1  christos 	  if (!IS_DREG ((yyvsp[-12].reg)))
   3314  1.1  christos 	    return yyerror ("Dregs expected");
   3315  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3316  1.1  christos 	    return yyerror ("Bad dreg pair");
   3317  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3318  1.1  christos 	    return yyerror ("Bad dreg pair");
   3319  1.1  christos 	  else
   3320  1.1  christos 	    {
   3321  1.1  christos 	      notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
   3322  1.1  christos 	      (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);
   3323  1.1  christos 	    }
   3324  1.1  christos 	}
   3325  1.1  christos #line 3326 "config/bfin-parse.c"
   3326  1.1  christos     break;
   3327  1.1  christos 
   3328  1.1  christos   case 32: /* asm_1: REG ASSIGN BYTEOP3P LPAREN REG COLON expr COMMA REG COLON expr RPAREN b3_op  */
   3329  1.1  christos #line 1081 "./config/bfin-parse.y"
   3330  1.1  christos         {
   3331  1.1  christos 	  if (!IS_DREG ((yyvsp[-12].reg)))
   3332  1.1  christos 	    return yyerror ("Dregs expected");
   3333  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3334  1.1  christos 	    return yyerror ("Bad dreg pair");
   3335  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3336  1.1  christos 	    return yyerror ("Bad dreg pair");
   3337  1.1  christos 	  else
   3338  1.1  christos 	    {
   3339  1.1  christos 	      notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
   3340  1.1  christos 	      (yyval.instr) = DSP32ALU (23, (yyvsp[0].modcodes).x0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, 0);
   3341  1.1  christos 	    }
   3342  1.1  christos 	}
   3343  1.1  christos #line 3344 "config/bfin-parse.c"
   3344  1.1  christos     break;
   3345  1.1  christos 
   3346  1.1  christos   case 33: /* asm_1: REG ASSIGN BYTEPACK LPAREN REG COMMA REG RPAREN  */
   3347  1.1  christos #line 1096 "./config/bfin-parse.y"
   3348  1.1  christos         {
   3349  1.1  christos 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3350  1.1  christos 	    {
   3351  1.1  christos 	      notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
   3352  1.1  christos 	      (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[-7].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 0, 0, 0);
   3353  1.1  christos 	    }
   3354  1.1  christos 	  else
   3355  1.1  christos 	    return yyerror ("Dregs expected");
   3356  1.1  christos 	}
   3357  1.1  christos #line 3358 "config/bfin-parse.c"
   3358  1.1  christos     break;
   3359  1.1  christos 
   3360  1.1  christos   case 34: /* asm_1: HALF_REG ASSIGN HALF_REG ASSIGN SIGN LPAREN HALF_REG RPAREN STAR HALF_REG PLUS SIGN LPAREN HALF_REG RPAREN STAR HALF_REG  */
   3361  1.1  christos #line 1108 "./config/bfin-parse.y"
   3362  1.1  christos         {
   3363  1.1  christos 	  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)))
   3364  1.1  christos 	    {
   3365  1.1  christos 	      notethat ("dsp32alu:	dregs_hi = dregs_lo ="
   3366  1.1  christos 		       "SIGN (dregs_hi) * dregs_hi + "
   3367  1.1  christos 		       "SIGN (dregs_lo) * dregs_lo \n");
   3368  1.1  christos 
   3369  1.1  christos 		(yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[-16].reg), &(yyvsp[-10].reg), &(yyvsp[-7].reg), 0, 0, 0);
   3370  1.1  christos 	    }
   3371  1.1  christos 	  else
   3372  1.1  christos 	    return yyerror ("Dregs expected");
   3373  1.1  christos 	}
   3374  1.1  christos #line 3375 "config/bfin-parse.c"
   3375  1.1  christos     break;
   3376  1.1  christos 
   3377  1.1  christos   case 35: /* asm_1: REG ASSIGN REG plus_minus REG amod1  */
   3378  1.1  christos #line 1121 "./config/bfin-parse.y"
   3379  1.1  christos         {
   3380  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3381  1.1  christos 	    {
   3382  1.1  christos 	      if ((yyvsp[0].modcodes).aop == 0)
   3383  1.1  christos 		{
   3384  1.1  christos 	          /* No saturation flag specified, generate the 16 bit variant.  */
   3385  1.1  christos 		  notethat ("COMP3op: dregs = dregs +- dregs\n");
   3386  1.1  christos 		  (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[-2].r0).r0);
   3387  1.1  christos 		}
   3388  1.1  christos 	      else
   3389  1.1  christos 		{
   3390  1.1  christos 		 /* Saturation flag specified, generate the 32 bit variant.  */
   3391  1.1  christos                  notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
   3392  1.1  christos                  (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);
   3393  1.1  christos 		}
   3394  1.1  christos 	    }
   3395  1.1  christos 	  else
   3396  1.1  christos 	    if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)) && (yyvsp[-2].r0).r0 == 0)
   3397  1.1  christos 	      {
   3398  1.1  christos 		notethat ("COMP3op: pregs = pregs + pregs\n");
   3399  1.1  christos 		(yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 5);
   3400  1.1  christos 	      }
   3401  1.1  christos 	    else
   3402  1.1  christos 	      return yyerror ("Dregs expected");
   3403  1.1  christos 	}
   3404  1.1  christos #line 3405 "config/bfin-parse.c"
   3405  1.1  christos     break;
   3406  1.1  christos 
   3407  1.1  christos   case 36: /* asm_1: REG ASSIGN min_max LPAREN REG COMMA REG RPAREN vmod  */
   3408  1.1  christos #line 1147 "./config/bfin-parse.y"
   3409  1.1  christos         {
   3410  1.1  christos 	  int op;
   3411  1.1  christos 
   3412  1.1  christos 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
   3413  1.1  christos 	    {
   3414  1.1  christos 	      if ((yyvsp[0].r0).r0)
   3415  1.1  christos 		op = 6;
   3416  1.1  christos 	      else
   3417  1.1  christos 		op = 7;
   3418  1.1  christos 
   3419  1.1  christos 	      notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
   3420  1.1  christos 	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), &(yyvsp[-2].reg), 0, 0, (yyvsp[-6].r0).r0);
   3421  1.1  christos 	    }
   3422  1.1  christos 	  else
   3423  1.1  christos 	    return yyerror ("Dregs expected");
   3424  1.1  christos 	}
   3425  1.1  christos #line 3426 "config/bfin-parse.c"
   3426  1.1  christos     break;
   3427  1.1  christos 
   3428  1.1  christos   case 37: /* asm_1: a_assign MINUS REG_A  */
   3429  1.1  christos #line 1165 "./config/bfin-parse.y"
   3430  1.1  christos         {
   3431  1.1  christos 	  notethat ("dsp32alu: Ax = - Ax\n");
   3432  1.1  christos 	  (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[-2].reg)), 0, 0, &reg7, &reg7, 0, 0, IS_A1 ((yyvsp[0].reg)));
   3433  1.1  christos 	}
   3434  1.1  christos #line 3435 "config/bfin-parse.c"
   3435  1.1  christos     break;
   3436  1.1  christos 
   3437  1.1  christos   case 38: /* asm_1: HALF_REG ASSIGN HALF_REG plus_minus HALF_REG amod1  */
   3438  1.1  christos #line 1170 "./config/bfin-parse.y"
   3439  1.1  christos         {
   3440  1.1  christos 	  notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
   3441  1.1  christos 	  (yyval.instr) = DSP32ALU (2 | (yyvsp[-2].r0).r0, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg),
   3442  1.1  christos 			 (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)));
   3443  1.1  christos 	}
   3444  1.1  christos #line 3445 "config/bfin-parse.c"
   3445  1.1  christos     break;
   3446  1.1  christos 
   3447  1.1  christos   case 39: /* asm_1: a_assign a_assign expr  */
   3448  1.1  christos #line 1176 "./config/bfin-parse.y"
   3449  1.1  christos         {
   3450  1.1  christos 	  if (EXPR_VALUE ((yyvsp[0].expr)) == 0 && !REG_SAME ((yyvsp[-2].reg), (yyvsp[-1].reg)))
   3451  1.1  christos 	    {
   3452  1.1  christos 	      notethat ("dsp32alu: A1 = A0 = 0\n");
   3453  1.1  christos 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 0, 0, 2);
   3454  1.1  christos 	    }
   3455  1.1  christos 	  else
   3456  1.1  christos 	    return yyerror ("Bad value, 0 expected");
   3457  1.1  christos 	}
   3458  1.1  christos #line 3459 "config/bfin-parse.c"
   3459  1.1  christos     break;
   3460  1.1  christos 
   3461  1.1  christos   case 40: /* asm_1: a_assign REG_A LPAREN S RPAREN  */
   3462  1.1  christos #line 1188 "./config/bfin-parse.y"
   3463  1.1  christos         {
   3464  1.1  christos 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)))
   3465  1.1  christos 	    {
   3466  1.1  christos 	      notethat ("dsp32alu: Ax = Ax (S)\n");
   3467  1.1  christos 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 1, 0, IS_A1 ((yyvsp[-4].reg)));
   3468  1.1  christos 	    }
   3469  1.1  christos 	  else
   3470  1.1  christos 	    return yyerror ("Registers must be equal");
   3471  1.1  christos 	}
   3472  1.1  christos #line 3473 "config/bfin-parse.c"
   3473  1.1  christos     break;
   3474  1.1  christos 
   3475  1.1  christos   case 41: /* asm_1: HALF_REG ASSIGN REG LPAREN RND RPAREN  */
   3476  1.1  christos #line 1199 "./config/bfin-parse.y"
   3477  1.1  christos         {
   3478  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)))
   3479  1.1  christos 	    {
   3480  1.1  christos 	      notethat ("dsp32alu: dregs_half = dregs (RND)\n");
   3481  1.1  christos 	      (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, 0, 3);
   3482  1.1  christos 	    }
   3483  1.1  christos 	  else
   3484  1.1  christos 	    return yyerror ("Dregs expected");
   3485  1.1  christos 	}
   3486  1.1  christos #line 3487 "config/bfin-parse.c"
   3487  1.1  christos     break;
   3488  1.1  christos 
   3489  1.1  christos   case 42: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND12 RPAREN  */
   3490  1.1  christos #line 1210 "./config/bfin-parse.y"
   3491  1.1  christos         {
   3492  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
   3493  1.1  christos 	    {
   3494  1.1  christos 	      notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
   3495  1.1  christos 	      (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);
   3496  1.1  christos 	    }
   3497  1.1  christos 	  else
   3498  1.1  christos 	    return yyerror ("Dregs expected");
   3499  1.1  christos 	}
   3500  1.1  christos #line 3501 "config/bfin-parse.c"
   3501  1.1  christos     break;
   3502  1.1  christos 
   3503  1.1  christos   case 43: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND20 RPAREN  */
   3504  1.1  christos #line 1221 "./config/bfin-parse.y"
   3505  1.1  christos         {
   3506  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
   3507  1.1  christos 	    {
   3508  1.1  christos 	      notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
   3509  1.1  christos 	      (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);
   3510  1.1  christos 	    }
   3511  1.1  christos 	  else
   3512  1.1  christos 	    return yyerror ("Dregs expected");
   3513  1.1  christos 	}
   3514  1.1  christos #line 3515 "config/bfin-parse.c"
   3515  1.1  christos     break;
   3516  1.1  christos 
   3517  1.1  christos   case 44: /* asm_1: a_assign REG_A  */
   3518  1.1  christos #line 1232 "./config/bfin-parse.y"
   3519  1.1  christos         {
   3520  1.1  christos 	  if (!REG_SAME ((yyvsp[-1].reg), (yyvsp[0].reg)))
   3521  1.1  christos 	    {
   3522  1.1  christos 	      notethat ("dsp32alu: An = Am\n");
   3523  1.1  christos 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, IS_A1 ((yyvsp[-1].reg)), 0, 3);
   3524  1.1  christos 	    }
   3525  1.1  christos 	  else
   3526  1.1  christos 	    return yyerror ("Accu reg arguments must differ");
   3527  1.1  christos 	}
   3528  1.1  christos #line 3529 "config/bfin-parse.c"
   3529  1.1  christos     break;
   3530  1.1  christos 
   3531  1.1  christos   case 45: /* asm_1: a_assign REG  */
   3532  1.1  christos #line 1243 "./config/bfin-parse.y"
   3533  1.1  christos         {
   3534  1.1  christos 	  if (IS_DREG ((yyvsp[0].reg)))
   3535  1.1  christos 	    {
   3536  1.1  christos 	      notethat ("dsp32alu: An = dregs\n");
   3537  1.1  christos 	      (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[0].reg), 0, 1, 0, IS_A1 ((yyvsp[-1].reg)) << 1);
   3538  1.1  christos 	    }
   3539  1.1  christos 	  else
   3540  1.1  christos 	    return yyerror ("Dregs expected");
   3541  1.1  christos 	}
   3542  1.1  christos #line 3543 "config/bfin-parse.c"
   3543  1.1  christos     break;
   3544  1.1  christos 
   3545  1.1  christos   case 46: /* asm_1: REG ASSIGN HALF_REG xpmod  */
   3546  1.1  christos #line 1254 "./config/bfin-parse.y"
   3547  1.1  christos         {
   3548  1.1  christos 	  if (!IS_H ((yyvsp[-1].reg)))
   3549  1.1  christos 	    {
   3550  1.1  christos 	      if ((yyvsp[-3].reg).regno == REG_A0x && IS_DREG ((yyvsp[-1].reg)))
   3551  1.1  christos 		{
   3552  1.1  christos 		  notethat ("dsp32alu: A0.x = dregs_lo\n");
   3553  1.1  christos 		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 1);
   3554  1.1  christos 		}
   3555  1.1  christos 	      else if ((yyvsp[-3].reg).regno == REG_A1x && IS_DREG ((yyvsp[-1].reg)))
   3556  1.1  christos 		{
   3557  1.1  christos 		  notethat ("dsp32alu: A1.x = dregs_lo\n");
   3558  1.1  christos 		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 3);
   3559  1.1  christos 		}
   3560  1.1  christos 	      else if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3561  1.1  christos 		{
   3562  1.1  christos 		  notethat ("ALU2op: dregs = dregs_lo\n");
   3563  1.1  christos 		  (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 10 | ((yyvsp[0].r0).r0 ? 0: 1));
   3564  1.1  christos 		}
   3565  1.1  christos 	      else
   3566  1.1  christos 	        return yyerror ("Register mismatch");
   3567  1.1  christos 	    }
   3568  1.1  christos 	  else
   3569  1.1  christos 	    return yyerror ("Low reg expected");
   3570  1.1  christos 	}
   3571  1.1  christos #line 3572 "config/bfin-parse.c"
   3572  1.1  christos     break;
   3573  1.1  christos 
   3574  1.1  christos   case 47: /* asm_1: HALF_REG ASSIGN expr  */
   3575  1.1  christos #line 1280 "./config/bfin-parse.y"
   3576  1.1  christos         {
   3577  1.1  christos 	  notethat ("LDIMMhalf: pregs_half = imm16\n");
   3578  1.1  christos 
   3579  1.1  christos 	  if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)) && !IS_IREG ((yyvsp[-2].reg))
   3580  1.1  christos 	      && !IS_MREG ((yyvsp[-2].reg)) && !IS_BREG ((yyvsp[-2].reg)) && !IS_LREG ((yyvsp[-2].reg)))
   3581  1.1  christos 	    return yyerror ("Wrong register for load immediate");
   3582  1.1  christos 
   3583  1.1  christos 	  if (!IS_IMM ((yyvsp[0].expr), 16) && !IS_UIMM ((yyvsp[0].expr), 16))
   3584  1.1  christos 	    return yyerror ("Constant out of range");
   3585  1.1  christos 
   3586  1.1  christos 	  (yyval.instr) = LDIMMHALF_R (&(yyvsp[-2].reg), IS_H ((yyvsp[-2].reg)), 0, 0, (yyvsp[0].expr));
   3587  1.1  christos 	}
   3588  1.1  christos #line 3589 "config/bfin-parse.c"
   3589  1.1  christos     break;
   3590  1.1  christos 
   3591  1.1  christos   case 48: /* asm_1: a_assign expr  */
   3592  1.1  christos #line 1294 "./config/bfin-parse.y"
   3593  1.1  christos         {
   3594  1.1  christos 	  notethat ("dsp32alu: An = 0\n");
   3595  1.1  christos 
   3596  1.1  christos 	  if (imm7 ((yyvsp[0].expr)) != 0)
   3597  1.1  christos 	    return yyerror ("0 expected");
   3598  1.1  christos 
   3599  1.1  christos 	  (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)));
   3600  1.1  christos 	}
   3601  1.1  christos #line 3602 "config/bfin-parse.c"
   3602  1.1  christos     break;
   3603  1.1  christos 
   3604  1.1  christos   case 49: /* asm_1: REG ASSIGN expr xpmod1  */
   3605  1.1  christos #line 1304 "./config/bfin-parse.y"
   3606  1.1  christos         {
   3607  1.1  christos 	  if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)) && !IS_IREG ((yyvsp[-3].reg))
   3608  1.1  christos 	      && !IS_MREG ((yyvsp[-3].reg)) && !IS_BREG ((yyvsp[-3].reg)) && !IS_LREG ((yyvsp[-3].reg)))
   3609  1.1  christos 	    return yyerror ("Wrong register for load immediate");
   3610  1.1  christos 
   3611  1.1  christos 	  if ((yyvsp[0].r0).r0 == 0)
   3612  1.1  christos 	    {
   3613  1.1  christos 	      /* 7 bit immediate value if possible.
   3614  1.1  christos 		 We will check for that constant value for efficiency
   3615  1.1  christos 		 If it goes to reloc, it will be 16 bit.  */
   3616  1.1  christos 	      if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_DREG ((yyvsp[-3].reg)))
   3617  1.1  christos 		{
   3618  1.1  christos 		  notethat ("COMPI2opD: dregs = imm7 (x) \n");
   3619  1.1  christos 		  (yyval.instr) = COMPI2OPD (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
   3620  1.1  christos 		}
   3621  1.1  christos 	      else if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_PREG ((yyvsp[-3].reg)))
   3622  1.1  christos 		{
   3623  1.1  christos 		  notethat ("COMPI2opP: pregs = imm7 (x)\n");
   3624  1.1  christos 		  (yyval.instr) = COMPI2OPP (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
   3625  1.1  christos 		}
   3626  1.1  christos 	      else
   3627  1.1  christos 		{
   3628  1.1  christos 		  if (IS_CONST ((yyvsp[-1].expr)) && !IS_IMM ((yyvsp[-1].expr), 16))
   3629  1.1  christos 		    return yyerror ("Immediate value out of range");
   3630  1.1  christos 
   3631  1.1  christos 		  notethat ("LDIMMhalf: regs = luimm16 (x)\n");
   3632  1.1  christos 		  /* reg, H, S, Z.   */
   3633  1.1  christos 		  (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 1, 0, (yyvsp[-1].expr));
   3634  1.1  christos 		}
   3635  1.1  christos 	    }
   3636  1.1  christos 	  else
   3637  1.1  christos 	    {
   3638  1.1  christos 	      /* (z) There is no 7 bit zero extended instruction.
   3639  1.1  christos 	      If the expr is a relocation, generate it.   */
   3640  1.1  christos 
   3641  1.1  christos 	      if (IS_CONST ((yyvsp[-1].expr)) && !IS_UIMM ((yyvsp[-1].expr), 16))
   3642  1.1  christos 		return yyerror ("Immediate value out of range");
   3643  1.1  christos 
   3644  1.1  christos 	      notethat ("LDIMMhalf: regs = luimm16 (x)\n");
   3645  1.1  christos 	      /* reg, H, S, Z.  */
   3646  1.1  christos 	      (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 0, 1, (yyvsp[-1].expr));
   3647  1.1  christos 	    }
   3648  1.1  christos 	}
   3649  1.1  christos #line 3650 "config/bfin-parse.c"
   3650  1.1  christos     break;
   3651  1.1  christos 
   3652  1.1  christos   case 50: /* asm_1: HALF_REG ASSIGN REG  */
   3653  1.1  christos #line 1349 "./config/bfin-parse.y"
   3654  1.1  christos         {
   3655  1.1  christos 	  if (IS_H ((yyvsp[-2].reg)))
   3656  1.1  christos 	    return yyerror ("Low reg expected");
   3657  1.1  christos 
   3658  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A0x)
   3659  1.1  christos 	    {
   3660  1.1  christos 	      notethat ("dsp32alu: dregs_lo = A0.x\n");
   3661  1.1  christos 	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), &reg7, &reg7, 0, 0, 0);
   3662  1.1  christos 	    }
   3663  1.1  christos 	  else if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A1x)
   3664  1.1  christos 	    {
   3665  1.1  christos 	      notethat ("dsp32alu: dregs_lo = A1.x\n");
   3666  1.1  christos 	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), &reg7, &reg7, 0, 0, 1);
   3667  1.1  christos 	    }
   3668  1.1  christos 	  else
   3669  1.1  christos 	    return yyerror ("Register mismatch");
   3670  1.1  christos 	}
   3671  1.1  christos #line 3672 "config/bfin-parse.c"
   3672  1.1  christos     break;
   3673  1.1  christos 
   3674  1.1  christos   case 51: /* asm_1: REG ASSIGN REG op_bar_op REG amod0  */
   3675  1.1  christos #line 1368 "./config/bfin-parse.y"
   3676  1.1  christos         {
   3677  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3678  1.1  christos 	    {
   3679  1.1  christos 	      notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
   3680  1.1  christos 	      (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);
   3681  1.1  christos 	    }
   3682  1.1  christos 	  else
   3683  1.1  christos 	    return yyerror ("Register mismatch");
   3684  1.1  christos 	}
   3685  1.1  christos #line 3686 "config/bfin-parse.c"
   3686  1.1  christos     break;
   3687  1.1  christos 
   3688  1.1  christos   case 52: /* asm_1: REG ASSIGN BYTE_DREG xpmod  */
   3689  1.1  christos #line 1379 "./config/bfin-parse.y"
   3690  1.1  christos         {
   3691  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   3692  1.1  christos 	    {
   3693  1.1  christos 	      notethat ("ALU2op: dregs = dregs_byte\n");
   3694  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 12 | ((yyvsp[0].r0).r0 ? 0: 1));
   3695  1.1  christos 	    }
   3696  1.1  christos 	  else
   3697  1.1  christos 	    return yyerror ("Register mismatch");
   3698  1.1  christos 	}
   3699  1.1  christos #line 3700 "config/bfin-parse.c"
   3700  1.1  christos     break;
   3701  1.1  christos 
   3702  1.1  christos   case 53: /* asm_1: a_assign ABS REG_A COMMA a_assign ABS REG_A  */
   3703  1.1  christos #line 1390 "./config/bfin-parse.y"
   3704  1.1  christos         {
   3705  1.1  christos 	  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)))
   3706  1.1  christos 	    {
   3707  1.1  christos 	      notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
   3708  1.1  christos 	      (yyval.instr) = DSP32ALU (16, 0, 0, 0, &reg7, &reg7, 0, 0, 3);
   3709  1.1  christos 	    }
   3710  1.1  christos 	  else
   3711  1.1  christos 	    return yyerror ("Register mismatch");
   3712  1.1  christos 	}
   3713  1.1  christos #line 3714 "config/bfin-parse.c"
   3714  1.1  christos     break;
   3715  1.1  christos 
   3716  1.1  christos   case 54: /* asm_1: a_assign MINUS REG_A COMMA a_assign MINUS REG_A  */
   3717  1.1  christos #line 1401 "./config/bfin-parse.y"
   3718  1.1  christos         {
   3719  1.1  christos 	  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)))
   3720  1.1  christos 	    {
   3721  1.1  christos 	      notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
   3722  1.1  christos 	      (yyval.instr) = DSP32ALU (14, 0, 0, 0, &reg7, &reg7, 0, 0, 3);
   3723  1.1  christos 	    }
   3724  1.1  christos 	  else
   3725  1.1  christos 	    return yyerror ("Register mismatch");
   3726  1.1  christos 	}
   3727  1.1  christos #line 3728 "config/bfin-parse.c"
   3728  1.1  christos     break;
   3729  1.1  christos 
   3730  1.1  christos   case 55: /* asm_1: a_minusassign REG_A w32_or_nothing  */
   3731  1.1  christos #line 1412 "./config/bfin-parse.y"
   3732  1.1  christos         {
   3733  1.1  christos 	  if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
   3734  1.1  christos 	    {
   3735  1.1  christos 	      notethat ("dsp32alu: A0 -= A1\n");
   3736  1.1  christos 	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, &reg7, &reg7, (yyvsp[0].r0).r0, 0, 3);
   3737  1.1  christos 	    }
   3738  1.1  christos 	  else
   3739  1.1  christos 	    return yyerror ("Register mismatch");
   3740  1.1  christos 	}
   3741  1.1  christos #line 3742 "config/bfin-parse.c"
   3742  1.1  christos     break;
   3743  1.1  christos 
   3744  1.1  christos   case 56: /* asm_1: REG _MINUS_ASSIGN expr  */
   3745  1.1  christos #line 1423 "./config/bfin-parse.y"
   3746  1.1  christos         {
   3747  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 4)
   3748  1.1  christos 	    {
   3749  1.1  christos 	      notethat ("dagMODik: iregs -= 4\n");
   3750  1.1  christos 	      (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 3);
   3751  1.1  christos 	    }
   3752  1.1  christos 	  else if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 2)
   3753  1.1  christos 	    {
   3754  1.1  christos 	      notethat ("dagMODik: iregs -= 2\n");
   3755  1.1  christos 	      (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 1);
   3756  1.1  christos 	    }
   3757  1.1  christos 	  else
   3758  1.1  christos 	    return yyerror ("Register or value mismatch");
   3759  1.1  christos 	}
   3760  1.1  christos #line 3761 "config/bfin-parse.c"
   3761  1.1  christos     break;
   3762  1.1  christos 
   3763  1.1  christos   case 57: /* asm_1: REG _PLUS_ASSIGN REG LPAREN BREV RPAREN  */
   3764  1.1  christos #line 1439 "./config/bfin-parse.y"
   3765  1.1  christos         {
   3766  1.1  christos 	  if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
   3767  1.1  christos 	    {
   3768  1.1  christos 	      notethat ("dagMODim: iregs += mregs (opt_brev)\n");
   3769  1.1  christos 	      /* i, m, op, br.  */
   3770  1.1  christos 	      (yyval.instr) = DAGMODIM (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1);
   3771  1.1  christos 	    }
   3772  1.1  christos 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
   3773  1.1  christos 	    {
   3774  1.1  christos 	      notethat ("PTR2op: pregs += pregs (BREV )\n");
   3775  1.1  christos 	      (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 5);
   3776  1.1  christos 	    }
   3777  1.1  christos 	  else
   3778  1.1  christos 	    return yyerror ("Register mismatch");
   3779  1.1  christos 	}
   3780  1.1  christos #line 3781 "config/bfin-parse.c"
   3781  1.1  christos     break;
   3782  1.1  christos 
   3783  1.1  christos   case 58: /* asm_1: REG _MINUS_ASSIGN REG  */
   3784  1.1  christos #line 1456 "./config/bfin-parse.y"
   3785  1.1  christos         {
   3786  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
   3787  1.1  christos 	    {
   3788  1.1  christos 	      notethat ("dagMODim: iregs -= mregs\n");
   3789  1.1  christos 	      (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1, 0);
   3790  1.1  christos 	    }
   3791  1.1  christos 	  else if (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg)))
   3792  1.1  christos 	    {
   3793  1.1  christos 	      notethat ("PTR2op: pregs -= pregs\n");
   3794  1.1  christos 	      (yyval.instr) = PTR2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
   3795  1.1  christos 	    }
   3796  1.1  christos 	  else
   3797  1.1  christos 	    return yyerror ("Register mismatch");
   3798  1.1  christos 	}
   3799  1.1  christos #line 3800 "config/bfin-parse.c"
   3800  1.1  christos     break;
   3801  1.1  christos 
   3802  1.1  christos   case 59: /* asm_1: REG_A _PLUS_ASSIGN REG_A w32_or_nothing  */
   3803  1.1  christos #line 1472 "./config/bfin-parse.y"
   3804  1.1  christos         {
   3805  1.1  christos 	  if (!IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
   3806  1.1  christos 	    {
   3807  1.1  christos 	      notethat ("dsp32alu: A0 += A1 (W32)\n");
   3808  1.1  christos 	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, &reg7, &reg7, (yyvsp[0].r0).r0, 0, 2);
   3809  1.1  christos 	    }
   3810  1.1  christos 	  else
   3811  1.1  christos 	    return yyerror ("Register mismatch");
   3812  1.1  christos 	}
   3813  1.1  christos #line 3814 "config/bfin-parse.c"
   3814  1.1  christos     break;
   3815  1.1  christos 
   3816  1.1  christos   case 60: /* asm_1: REG _PLUS_ASSIGN REG  */
   3817  1.1  christos #line 1483 "./config/bfin-parse.y"
   3818  1.1  christos         {
   3819  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
   3820  1.1  christos 	    {
   3821  1.1  christos 	      notethat ("dagMODim: iregs += mregs\n");
   3822  1.1  christos 	      (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0, 0);
   3823  1.1  christos 	    }
   3824  1.1  christos 	  else
   3825  1.1  christos 	    return yyerror ("iregs += mregs expected");
   3826  1.1  christos 	}
   3827  1.1  christos #line 3828 "config/bfin-parse.c"
   3828  1.1  christos     break;
   3829  1.1  christos 
   3830  1.1  christos   case 61: /* asm_1: REG _PLUS_ASSIGN expr  */
   3831  1.1  christos #line 1494 "./config/bfin-parse.y"
   3832  1.1  christos         {
   3833  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)))
   3834  1.1  christos 	    {
   3835  1.1  christos 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 4)
   3836  1.1  christos 		{
   3837  1.1  christos 		  notethat ("dagMODik: iregs += 4\n");
   3838  1.1  christos 		  (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 2);
   3839  1.1  christos 		}
   3840  1.1  christos 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
   3841  1.1  christos 		{
   3842  1.1  christos 		  notethat ("dagMODik: iregs += 2\n");
   3843  1.1  christos 		  (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 0);
   3844  1.1  christos 		}
   3845  1.1  christos 	      else
   3846  1.1  christos 		return yyerror ("iregs += [ 2 | 4 ");
   3847  1.1  christos 	    }
   3848  1.1  christos 	  else if (IS_PREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
   3849  1.1  christos 	    {
   3850  1.1  christos 	      notethat ("COMPI2opP: pregs += imm7\n");
   3851  1.1  christos 	      (yyval.instr) = COMPI2OPP (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
   3852  1.1  christos 	    }
   3853  1.1  christos 	  else if (IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
   3854  1.1  christos 	    {
   3855  1.1  christos 	      notethat ("COMPI2opD: dregs += imm7\n");
   3856  1.1  christos 	      (yyval.instr) = COMPI2OPD (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
   3857  1.1  christos 	    }
   3858  1.1  christos 	  else if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))) && IS_CONST ((yyvsp[0].expr)))
   3859  1.1  christos 	    return yyerror ("Immediate value out of range");
   3860  1.1  christos 	  else
   3861  1.1  christos 	    return yyerror ("Register mismatch");
   3862  1.1  christos 	}
   3863  1.1  christos #line 3864 "config/bfin-parse.c"
   3864  1.1  christos     break;
   3865  1.1  christos 
   3866  1.1  christos   case 62: /* asm_1: REG _STAR_ASSIGN REG  */
   3867  1.1  christos #line 1527 "./config/bfin-parse.y"
   3868  1.1  christos         {
   3869  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   3870  1.1  christos 	    {
   3871  1.1  christos 	      notethat ("ALU2op: dregs *= dregs\n");
   3872  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
   3873  1.1  christos 	    }
   3874  1.1  christos 	  else
   3875  1.1  christos 	    return yyerror ("Register mismatch");
   3876  1.1  christos 	}
   3877  1.1  christos #line 3878 "config/bfin-parse.c"
   3878  1.1  christos     break;
   3879  1.1  christos 
   3880  1.1  christos   case 63: /* asm_1: SAA LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir  */
   3881  1.1  christos #line 1538 "./config/bfin-parse.y"
   3882  1.1  christos         {
   3883  1.1  christos 	  if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
   3884  1.1  christos 	    return yyerror ("Bad dreg pair");
   3885  1.1  christos 	  else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
   3886  1.1  christos 	    return yyerror ("Bad dreg pair");
   3887  1.1  christos 	  else
   3888  1.1  christos 	    {
   3889  1.1  christos 	      notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
   3890  1.1  christos 	      (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
   3891  1.1  christos 	    }
   3892  1.1  christos 	}
   3893  1.1  christos #line 3894 "config/bfin-parse.c"
   3894  1.1  christos     break;
   3895  1.1  christos 
   3896  1.1  christos   case 64: /* asm_1: a_assign REG_A LPAREN S RPAREN COMMA a_assign REG_A LPAREN S RPAREN  */
   3897  1.1  christos #line 1551 "./config/bfin-parse.y"
   3898  1.1  christos         {
   3899  1.1  christos 	  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)))
   3900  1.1  christos 	    {
   3901  1.1  christos 	      notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
   3902  1.1  christos 	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 1, 0, 2);
   3903  1.1  christos 	    }
   3904  1.1  christos 	  else
   3905  1.1  christos 	    return yyerror ("Register mismatch");
   3906  1.1  christos 	}
   3907  1.1  christos #line 3908 "config/bfin-parse.c"
   3908  1.1  christos     break;
   3909  1.1  christos 
   3910  1.1  christos   case 65: /* asm_1: REG ASSIGN LPAREN REG PLUS REG RPAREN LESS_LESS expr  */
   3911  1.1  christos #line 1562 "./config/bfin-parse.y"
   3912  1.1  christos         {
   3913  1.1  christos 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg))
   3914  1.1  christos 	      && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
   3915  1.1  christos 	    {
   3916  1.1  christos 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
   3917  1.1  christos 		{
   3918  1.1  christos 		  notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
   3919  1.1  christos 		  (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 4);
   3920  1.1  christos 		}
   3921  1.1  christos 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
   3922  1.1  christos 		{
   3923  1.1  christos 		  notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
   3924  1.1  christos 		  (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 5);
   3925  1.1  christos 		}
   3926  1.1  christos 	      else
   3927  1.1  christos 		return yyerror ("Bad shift value");
   3928  1.1  christos 	    }
   3929  1.1  christos 	  else if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg))
   3930  1.1  christos 		   && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
   3931  1.1  christos 	    {
   3932  1.1  christos 	      if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
   3933  1.1  christos 		{
   3934  1.1  christos 		  notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
   3935  1.1  christos 		  (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 6);
   3936  1.1  christos 		}
   3937  1.1  christos 	      else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
   3938  1.1  christos 		{
   3939  1.1  christos 		  notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
   3940  1.1  christos 		  (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 7);
   3941  1.1  christos 		}
   3942  1.1  christos 	      else
   3943  1.1  christos 		return yyerror ("Bad shift value");
   3944  1.1  christos 	    }
   3945  1.1  christos 	  else
   3946  1.1  christos 	    return yyerror ("Register mismatch");
   3947  1.1  christos 	}
   3948  1.1  christos #line 3949 "config/bfin-parse.c"
   3949  1.1  christos     break;
   3950  1.1  christos 
   3951  1.1  christos   case 66: /* asm_1: REG ASSIGN REG BAR REG  */
   3952  1.1  christos #line 1601 "./config/bfin-parse.y"
   3953  1.1  christos         {
   3954  1.1  christos 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   3955  1.1  christos 	    {
   3956  1.1  christos 	      notethat ("COMP3op: dregs = dregs | dregs\n");
   3957  1.1  christos 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
   3958  1.1  christos 	    }
   3959  1.1  christos 	  else
   3960  1.1  christos 	    return yyerror ("Dregs expected");
   3961  1.1  christos 	}
   3962  1.1  christos #line 3963 "config/bfin-parse.c"
   3963  1.1  christos     break;
   3964  1.1  christos 
   3965  1.1  christos   case 67: /* asm_1: REG ASSIGN REG CARET REG  */
   3966  1.1  christos #line 1611 "./config/bfin-parse.y"
   3967  1.1  christos         {
   3968  1.1  christos 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   3969  1.1  christos 	    {
   3970  1.1  christos 	      notethat ("COMP3op: dregs = dregs ^ dregs\n");
   3971  1.1  christos 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 4);
   3972  1.1  christos 	    }
   3973  1.1  christos 	  else
   3974  1.1  christos 	    return yyerror ("Dregs expected");
   3975  1.1  christos 	}
   3976  1.1  christos #line 3977 "config/bfin-parse.c"
   3977  1.1  christos     break;
   3978  1.1  christos 
   3979  1.1  christos   case 68: /* asm_1: REG ASSIGN REG PLUS LPAREN REG LESS_LESS expr RPAREN  */
   3980  1.1  christos #line 1621 "./config/bfin-parse.y"
   3981  1.1  christos         {
   3982  1.1  christos 	  if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)))
   3983  1.1  christos 	    {
   3984  1.1  christos 	      if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
   3985  1.1  christos 		{
   3986  1.1  christos 		  notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
   3987  1.1  christos 		  (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 6);
   3988  1.1  christos 		}
   3989  1.1  christos 	      else if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
   3990  1.1  christos 		{
   3991  1.1  christos 		  notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
   3992  1.1  christos 		  (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 7);
   3993  1.1  christos 		}
   3994  1.1  christos 	      else
   3995  1.1  christos 		  return yyerror ("Bad shift value");
   3996  1.1  christos 	    }
   3997  1.1  christos 	  else
   3998  1.1  christos 	    return yyerror ("Dregs expected");
   3999  1.1  christos 	}
   4000  1.1  christos #line 4001 "config/bfin-parse.c"
   4001  1.1  christos     break;
   4002  1.1  christos 
   4003  1.1  christos   case 69: /* asm_1: CCREG ASSIGN REG_A _ASSIGN_ASSIGN REG_A  */
   4004  1.1  christos #line 1641 "./config/bfin-parse.y"
   4005  1.1  christos         {
   4006  1.1  christos 	  if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
   4007  1.1  christos 	    {
   4008  1.1  christos 	      notethat ("CCflag: CC = A0 == A1\n");
   4009  1.1  christos 	      (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
   4010  1.1  christos 	    }
   4011  1.1  christos 	  else
   4012  1.1  christos 	    return yyerror ("AREGs are in bad order or same");
   4013  1.1  christos 	}
   4014  1.1  christos #line 4015 "config/bfin-parse.c"
   4015  1.1  christos     break;
   4016  1.1  christos 
   4017  1.1  christos   case 70: /* asm_1: CCREG ASSIGN REG_A LESS_THAN REG_A  */
   4018  1.1  christos #line 1651 "./config/bfin-parse.y"
   4019  1.1  christos         {
   4020  1.1  christos 	  if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
   4021  1.1  christos 	    {
   4022  1.1  christos 	      notethat ("CCflag: CC = A0 < A1\n");
   4023  1.1  christos 	      (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
   4024  1.1  christos 	    }
   4025  1.1  christos 	  else
   4026  1.1  christos 	    return yyerror ("AREGs are in bad order or same");
   4027  1.1  christos 	}
   4028  1.1  christos #line 4029 "config/bfin-parse.c"
   4029  1.1  christos     break;
   4030  1.1  christos 
   4031  1.1  christos   case 71: /* asm_1: CCREG ASSIGN REG LESS_THAN REG iu_or_nothing  */
   4032  1.1  christos #line 1661 "./config/bfin-parse.y"
   4033  1.1  christos         {
   4034  1.1  christos 	  if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   4035  1.1  christos 	      || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
   4036  1.1  christos 	    {
   4037  1.1  christos 	      notethat ("CCflag: CC = dpregs < dpregs\n");
   4038  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
   4039  1.1  christos 	    }
   4040  1.1  christos 	  else
   4041  1.1  christos 	    return yyerror ("Bad register in comparison");
   4042  1.1  christos 	}
   4043  1.1  christos #line 4044 "config/bfin-parse.c"
   4044  1.1  christos     break;
   4045  1.1  christos 
   4046  1.1  christos   case 72: /* asm_1: CCREG ASSIGN REG LESS_THAN expr iu_or_nothing  */
   4047  1.1  christos #line 1672 "./config/bfin-parse.y"
   4048  1.1  christos         {
   4049  1.1  christos 	  if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
   4050  1.1  christos 	    return yyerror ("Bad register in comparison");
   4051  1.1  christos 
   4052  1.1  christos 	  if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
   4053  1.1  christos 	      || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
   4054  1.1  christos 	    {
   4055  1.1  christos 	      notethat ("CCflag: CC = dpregs < (u)imm3\n");
   4056  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
   4057  1.1  christos 	    }
   4058  1.1  christos 	  else
   4059  1.1  christos 	    return yyerror ("Bad constant value");
   4060  1.1  christos 	}
   4061  1.1  christos #line 4062 "config/bfin-parse.c"
   4062  1.1  christos     break;
   4063  1.1  christos 
   4064  1.1  christos   case 73: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN REG  */
   4065  1.1  christos #line 1686 "./config/bfin-parse.y"
   4066  1.1  christos         {
   4067  1.1  christos 	  if ((IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   4068  1.1  christos 	      || (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg))))
   4069  1.1  christos 	    {
   4070  1.1  christos 	      notethat ("CCflag: CC = dpregs == dpregs\n");
   4071  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), (yyvsp[0].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
   4072  1.1  christos 	    }
   4073  1.1  christos 	  else
   4074  1.1  christos 	    return yyerror ("Bad register in comparison");
   4075  1.1  christos 	}
   4076  1.1  christos #line 4077 "config/bfin-parse.c"
   4077  1.1  christos     break;
   4078  1.1  christos 
   4079  1.1  christos   case 74: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN expr  */
   4080  1.1  christos #line 1697 "./config/bfin-parse.y"
   4081  1.1  christos         {
   4082  1.1  christos 	  if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
   4083  1.1  christos 	    return yyerror ("Bad register in comparison");
   4084  1.1  christos 
   4085  1.1  christos 	  if (IS_IMM ((yyvsp[0].expr), 3))
   4086  1.1  christos 	    {
   4087  1.1  christos 	      notethat ("CCflag: CC = dpregs == imm3\n");
   4088  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), imm3 ((yyvsp[0].expr)), 0, 1, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
   4089  1.1  christos 	    }
   4090  1.1  christos 	  else
   4091  1.1  christos 	    return yyerror ("Bad constant range");
   4092  1.1  christos 	}
   4093  1.1  christos #line 4094 "config/bfin-parse.c"
   4094  1.1  christos     break;
   4095  1.1  christos 
   4096  1.1  christos   case 75: /* asm_1: CCREG ASSIGN REG_A _LESS_THAN_ASSIGN REG_A  */
   4097  1.1  christos #line 1710 "./config/bfin-parse.y"
   4098  1.1  christos         {
   4099  1.1  christos 	  if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
   4100  1.1  christos 	    {
   4101  1.1  christos 	      notethat ("CCflag: CC = A0 <= A1\n");
   4102  1.1  christos 	      (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
   4103  1.1  christos 	    }
   4104  1.1  christos 	  else
   4105  1.1  christos 	    return yyerror ("AREGs are in bad order or same");
   4106  1.1  christos 	}
   4107  1.1  christos #line 4108 "config/bfin-parse.c"
   4108  1.1  christos     break;
   4109  1.1  christos 
   4110  1.1  christos   case 76: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN REG iu_or_nothing  */
   4111  1.1  christos #line 1720 "./config/bfin-parse.y"
   4112  1.1  christos         {
   4113  1.1  christos 	  if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   4114  1.1  christos 	      || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
   4115  1.1  christos 	    {
   4116  1.1  christos 	      notethat ("CCflag: CC = dpregs <= dpregs (..)\n");
   4117  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK,
   4118  1.1  christos 			   1 + (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
   4119  1.1  christos 	    }
   4120  1.1  christos 	  else
   4121  1.1  christos 	    return yyerror ("Bad register in comparison");
   4122  1.1  christos 	}
   4123  1.1  christos #line 4124 "config/bfin-parse.c"
   4124  1.1  christos     break;
   4125  1.1  christos 
   4126  1.1  christos   case 77: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN expr iu_or_nothing  */
   4127  1.1  christos #line 1732 "./config/bfin-parse.y"
   4128  1.1  christos         {
   4129  1.1  christos 	  if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
   4130  1.1  christos 	    return yyerror ("Bad register in comparison");
   4131  1.1  christos 
   4132  1.1  christos 	  if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
   4133  1.1  christos 	      || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
   4134  1.1  christos 	    {
   4135  1.1  christos 	      notethat ("CCflag: CC = dpregs <= (u)imm3\n");
   4136  1.1  christos 	      (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
   4137  1.1  christos 	    }
   4138  1.1  christos 	  else
   4139  1.1  christos 	    return yyerror ("Bad constant value");
   4140  1.1  christos 	}
   4141  1.1  christos #line 4142 "config/bfin-parse.c"
   4142  1.1  christos     break;
   4143  1.1  christos 
   4144  1.1  christos   case 78: /* asm_1: REG ASSIGN REG AMPERSAND REG  */
   4145  1.1  christos #line 1747 "./config/bfin-parse.y"
   4146  1.1  christos         {
   4147  1.1  christos 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   4148  1.1  christos 	    {
   4149  1.1  christos 	      notethat ("COMP3op: dregs = dregs & dregs\n");
   4150  1.1  christos 	      (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
   4151  1.1  christos 	    }
   4152  1.1  christos 	  else
   4153  1.1  christos 	    return yyerror ("Dregs expected");
   4154  1.1  christos 	}
   4155  1.1  christos #line 4156 "config/bfin-parse.c"
   4156  1.1  christos     break;
   4157  1.1  christos 
   4158  1.1  christos   case 79: /* asm_1: ccstat  */
   4159  1.1  christos #line 1758 "./config/bfin-parse.y"
   4160  1.1  christos         {
   4161  1.1  christos 	  notethat ("CC2stat operation\n");
   4162  1.1  christos 	  (yyval.instr) = bfin_gen_cc2stat ((yyvsp[0].modcodes).r0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).s0);
   4163  1.1  christos 	}
   4164  1.1  christos #line 4165 "config/bfin-parse.c"
   4165  1.1  christos     break;
   4166  1.1  christos 
   4167  1.1  christos   case 80: /* asm_1: REG ASSIGN REG  */
   4168  1.1  christos #line 1764 "./config/bfin-parse.y"
   4169  1.1  christos         {
   4170  1.1  christos 	  if ((IS_GENREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
   4171  1.1  christos 	      || (IS_GENREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
   4172  1.1  christos 	      || (IS_DAGREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
   4173  1.1  christos 	      || (IS_DAGREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
   4174  1.1  christos 	      || (IS_GENREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP)
   4175  1.1  christos 	      || ((yyvsp[-2].reg).regno == REG_USP && IS_GENREG ((yyvsp[0].reg)))
   4176  1.1  christos 	      || ((yyvsp[-2].reg).regno == REG_USP && (yyvsp[0].reg).regno == REG_USP)
   4177  1.1  christos 	      || (IS_DREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
   4178  1.1  christos 	      || (IS_PREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
   4179  1.1  christos 	      || (IS_SYSREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
   4180  1.1  christos 	      || (IS_ALLREG ((yyvsp[-2].reg)) && IS_EMUDAT ((yyvsp[0].reg)))
   4181  1.1  christos 	      || (IS_EMUDAT ((yyvsp[-2].reg)) && IS_ALLREG ((yyvsp[0].reg)))
   4182  1.1  christos 	      || (IS_SYSREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP))
   4183  1.1  christos 	    {
   4184  1.1  christos 	      (yyval.instr) = bfin_gen_regmv (&(yyvsp[0].reg), &(yyvsp[-2].reg));
   4185  1.1  christos 	    }
   4186  1.1  christos 	  else
   4187  1.1  christos 	    return yyerror ("Unsupported register move");
   4188  1.1  christos 	}
   4189  1.1  christos #line 4190 "config/bfin-parse.c"
   4190  1.1  christos     break;
   4191  1.1  christos 
   4192  1.1  christos   case 81: /* asm_1: CCREG ASSIGN REG  */
   4193  1.1  christos #line 1786 "./config/bfin-parse.y"
   4194  1.1  christos         {
   4195  1.1  christos 	  if (IS_DREG ((yyvsp[0].reg)))
   4196  1.1  christos 	    {
   4197  1.1  christos 	      notethat ("CC2dreg: CC = dregs\n");
   4198  1.1  christos 	      (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[0].reg));
   4199  1.1  christos 	    }
   4200  1.1  christos 	  else
   4201  1.1  christos 	    return yyerror ("Only 'CC = Dreg' supported");
   4202  1.1  christos 	}
   4203  1.1  christos #line 4204 "config/bfin-parse.c"
   4204  1.1  christos     break;
   4205  1.1  christos 
   4206  1.1  christos   case 82: /* asm_1: REG ASSIGN CCREG  */
   4207  1.1  christos #line 1797 "./config/bfin-parse.y"
   4208  1.1  christos         {
   4209  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)))
   4210  1.1  christos 	    {
   4211  1.1  christos 	      notethat ("CC2dreg: dregs = CC\n");
   4212  1.1  christos 	      (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[-2].reg));
   4213  1.1  christos 	    }
   4214  1.1  christos 	  else
   4215  1.1  christos 	    return yyerror ("Only 'Dreg = CC' supported");
   4216  1.1  christos 	}
   4217  1.1  christos #line 4218 "config/bfin-parse.c"
   4218  1.1  christos     break;
   4219  1.1  christos 
   4220  1.1  christos   case 83: /* asm_1: CCREG _ASSIGN_BANG CCREG  */
   4221  1.1  christos #line 1808 "./config/bfin-parse.y"
   4222  1.1  christos         {
   4223  1.1  christos 	  notethat ("CC2dreg: CC =! CC\n");
   4224  1.1  christos 	  (yyval.instr) = bfin_gen_cc2dreg (3, 0);
   4225  1.1  christos 	}
   4226  1.1  christos #line 4227 "config/bfin-parse.c"
   4227  1.1  christos     break;
   4228  1.1  christos 
   4229  1.1  christos   case 84: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode  */
   4230  1.1  christos #line 1816 "./config/bfin-parse.y"
   4231  1.1  christos         {
   4232  1.1  christos 	  notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
   4233  1.1  christos 
   4234  1.1  christos 	  if (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
   4235  1.1  christos 	    return yyerror ("(M) not allowed with MAC0");
   4236  1.1  christos 
   4237  1.1  christos 	  if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
   4238  1.1  christos 	      && (yyvsp[0].mod).mod != M_IU && (yyvsp[0].mod).mod != M_T && (yyvsp[0].mod).mod != M_TFU
   4239  1.1  christos 	      && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2 && (yyvsp[0].mod).mod != M_IH)
   4240  1.1  christos 	    return yyerror ("bad option.");
   4241  1.1  christos 
   4242  1.1  christos 	  if (IS_H ((yyvsp[-3].reg)))
   4243  1.1  christos 	    {
   4244  1.1  christos 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
   4245  1.1  christos 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
   4246  1.1  christos 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
   4247  1.1  christos 	    }
   4248  1.1  christos 	  else
   4249  1.1  christos 	    {
   4250  1.1  christos 	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 0,
   4251  1.1  christos 			      0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
   4252  1.1  christos 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
   4253  1.1  christos 	    }
   4254  1.1  christos 	}
   4255  1.1  christos #line 4256 "config/bfin-parse.c"
   4256  1.1  christos     break;
   4257  1.1  christos 
   4258  1.1  christos   case 85: /* asm_1: REG ASSIGN multiply_halfregs opt_mode  */
   4259  1.1  christos #line 1842 "./config/bfin-parse.y"
   4260  1.1  christos         {
   4261  1.1  christos 	  /* Odd registers can use (M).  */
   4262  1.1  christos 	  if (!IS_DREG ((yyvsp[-3].reg)))
   4263  1.1  christos 	    return yyerror ("Dreg expected");
   4264  1.1  christos 
   4265  1.1  christos 	  if (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
   4266  1.1  christos 	    return yyerror ("(M) not allowed with MAC0");
   4267  1.1  christos 
   4268  1.1  christos 	  if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
   4269  1.1  christos 	      && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2)
   4270  1.1  christos 	    return yyerror ("bad option");
   4271  1.1  christos 
   4272  1.1  christos 	  if (!IS_EVEN ((yyvsp[-3].reg)))
   4273  1.1  christos 	    {
   4274  1.1  christos 	      notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
   4275  1.1  christos 
   4276  1.1  christos 	      (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
   4277  1.1  christos 			      IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
   4278  1.1  christos 			      &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
   4279  1.1  christos 	    }
   4280  1.1  christos 	  else
   4281  1.1  christos 	    {
   4282  1.1  christos 	      notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
   4283  1.1  christos 	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 1,
   4284  1.1  christos 			      0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
   4285  1.1  christos 			      &(yyvsp[-3].reg),  0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
   4286  1.1  christos 	    }
   4287  1.1  christos 	}
   4288  1.1  christos #line 4289 "config/bfin-parse.c"
   4289  1.1  christos     break;
   4290  1.1  christos 
   4291  1.1  christos   case 86: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode COMMA HALF_REG ASSIGN multiply_halfregs opt_mode  */
   4292  1.1  christos #line 1873 "./config/bfin-parse.y"
   4293  1.1  christos         {
   4294  1.1  christos 	  if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
   4295  1.1  christos 	    return yyerror ("Dregs expected");
   4296  1.1  christos 
   4297  1.1  christos 	  if (!IS_HCOMPL((yyvsp[-8].reg), (yyvsp[-3].reg)))
   4298  1.1  christos 	    return yyerror ("Dest registers mismatch");
   4299  1.1  christos 
   4300  1.1  christos 	  if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
   4301  1.1  christos 	    return -1;
   4302  1.1  christos 
   4303  1.1  christos 	  if ((!IS_H ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
   4304  1.1  christos 	      || (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
   4305  1.1  christos 	    return yyerror ("(M) not allowed with MAC0");
   4306  1.1  christos 
   4307  1.1  christos 	  notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
   4308  1.1  christos 		    "dregs_lo = multiply_halfregs opt_mode\n");
   4309  1.1  christos 
   4310  1.1  christos 	  if (IS_H ((yyvsp[-8].reg)))
   4311  1.1  christos 	    (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 0,
   4312  1.1  christos 			    IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
   4313  1.1  christos 			    &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
   4314  1.1  christos 	  else
   4315  1.1  christos 	    (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
   4316  1.1  christos 			    IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
   4317  1.1  christos 			    &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
   4318  1.1  christos 	}
   4319  1.1  christos #line 4320 "config/bfin-parse.c"
   4320  1.1  christos     break;
   4321  1.1  christos 
   4322  1.1  christos   case 87: /* asm_1: REG ASSIGN multiply_halfregs opt_mode COMMA REG ASSIGN multiply_halfregs opt_mode  */
   4323  1.1  christos #line 1901 "./config/bfin-parse.y"
   4324  1.1  christos         {
   4325  1.1  christos 	  if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
   4326  1.1  christos 	    return yyerror ("Dregs expected");
   4327  1.1  christos 
   4328  1.1  christos 	  if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-3].reg).regno - (yyvsp[-8].reg).regno != 1)
   4329  1.1  christos 	      || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[-8].reg).regno - (yyvsp[-3].reg).regno != 1))
   4330  1.1  christos 	    return yyerror ("Dest registers mismatch");
   4331  1.1  christos 
   4332  1.1  christos 	  if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
   4333  1.1  christos 	    return -1;
   4334  1.1  christos 
   4335  1.1  christos 	  if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
   4336  1.1  christos 	      || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
   4337  1.1  christos 	    return yyerror ("(M) not allowed with MAC0");
   4338  1.1  christos 
   4339  1.1  christos 	  notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
   4340  1.1  christos 		   "dregs = multiply_halfregs opt_mode\n");
   4341  1.1  christos 
   4342  1.1  christos 	  if (IS_EVEN ((yyvsp[-8].reg)))
   4343  1.1  christos 	    (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
   4344  1.1  christos 			    IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
   4345  1.1  christos 			    &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
   4346  1.1  christos 	  else
   4347  1.1  christos 	    (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 1,
   4348  1.1  christos 			    IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
   4349  1.1  christos 			    &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
   4350  1.1  christos 	}
   4351  1.1  christos #line 4352 "config/bfin-parse.c"
   4352  1.1  christos     break;
   4353  1.1  christos 
   4354  1.1  christos   case 88: /* asm_1: a_assign ASHIFT REG_A BY HALF_REG  */
   4355  1.1  christos #line 1932 "./config/bfin-parse.y"
   4356  1.1  christos         {
   4357  1.1  christos 	  if (!REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)))
   4358  1.1  christos 	    return yyerror ("Aregs must be same");
   4359  1.1  christos 
   4360  1.1  christos 	  if (IS_DREG ((yyvsp[0].reg)) && !IS_H ((yyvsp[0].reg)))
   4361  1.1  christos 	    {
   4362  1.1  christos 	      notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
   4363  1.1  christos 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 0, IS_A1 ((yyvsp[-4].reg)));
   4364  1.1  christos 	    }
   4365  1.1  christos 	  else
   4366  1.1  christos 	    return yyerror ("Dregs expected");
   4367  1.1  christos 	}
   4368  1.1  christos #line 4369 "config/bfin-parse.c"
   4369  1.1  christos     break;
   4370  1.1  christos 
   4371  1.1  christos   case 89: /* asm_1: HALF_REG ASSIGN ASHIFT HALF_REG BY HALF_REG smod  */
   4372  1.1  christos #line 1946 "./config/bfin-parse.y"
   4373  1.1  christos         {
   4374  1.1  christos 	  if (IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
   4375  1.1  christos 	    {
   4376  1.1  christos 	      notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
   4377  1.1  christos 	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-6].reg), (yyvsp[-3].reg)));
   4378  1.1  christos 	    }
   4379  1.1  christos 	  else
   4380  1.1  christos 	    return yyerror ("Dregs expected");
   4381  1.1  christos 	}
   4382  1.1  christos #line 4383 "config/bfin-parse.c"
   4383  1.1  christos     break;
   4384  1.1  christos 
   4385  1.1  christos   case 90: /* asm_1: a_assign REG_A LESS_LESS expr  */
   4386  1.1  christos #line 1957 "./config/bfin-parse.y"
   4387  1.1  christos         {
   4388  1.1  christos 	  if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
   4389  1.1  christos 	    return yyerror ("Aregs must be same");
   4390  1.1  christos 
   4391  1.1  christos 	  if (IS_UIMM ((yyvsp[0].expr), 5))
   4392  1.1  christos 	    {
   4393  1.1  christos 	      notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
   4394  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
   4395  1.1  christos 	    }
   4396  1.1  christos 	  else
   4397  1.1  christos 	    return yyerror ("Bad shift value");
   4398  1.1  christos 	}
   4399  1.1  christos #line 4400 "config/bfin-parse.c"
   4400  1.1  christos     break;
   4401  1.1  christos 
   4402  1.1  christos   case 91: /* asm_1: REG ASSIGN REG LESS_LESS expr vsmod  */
   4403  1.1  christos #line 1971 "./config/bfin-parse.y"
   4404  1.1  christos         {
   4405  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4406  1.1  christos 	    {
   4407  1.1  christos 	      if ((yyvsp[0].modcodes).r0)
   4408  1.1  christos 		{
   4409  1.1  christos 		  /*  Vector?  */
   4410  1.1  christos 		  notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
   4411  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), imm4 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
   4412  1.1  christos 		}
   4413  1.1  christos 	      else
   4414  1.1  christos 		{
   4415  1.1  christos 		  notethat ("dsp32shiftimm: dregs =  dregs << uimm5 (.)\n");
   4416  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
   4417  1.1  christos 		}
   4418  1.1  christos 	    }
   4419  1.1  christos 	  else if ((yyvsp[0].modcodes).s0 == 0 && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
   4420  1.1  christos 	    {
   4421  1.1  christos 	      if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
   4422  1.1  christos 		{
   4423  1.1  christos 		  notethat ("PTR2op: pregs = pregs << 2\n");
   4424  1.1  christos 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 1);
   4425  1.1  christos 		}
   4426  1.1  christos 	      else if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
   4427  1.1  christos 		{
   4428  1.1  christos 		  notethat ("COMP3op: pregs = pregs << 1\n");
   4429  1.1  christos 		  (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-3].reg), 5);
   4430  1.1  christos 		}
   4431  1.1  christos 	      else
   4432  1.1  christos 		return yyerror ("Bad shift value");
   4433  1.1  christos 	    }
   4434  1.1  christos 	  else
   4435  1.1  christos 	    return yyerror ("Bad shift value or register");
   4436  1.1  christos 	}
   4437  1.1  christos #line 4438 "config/bfin-parse.c"
   4438  1.1  christos     break;
   4439  1.1  christos 
   4440  1.1  christos   case 92: /* asm_1: HALF_REG ASSIGN HALF_REG LESS_LESS expr smod  */
   4441  1.1  christos #line 2005 "./config/bfin-parse.y"
   4442  1.1  christos         {
   4443  1.1  christos 	  if (IS_UIMM ((yyvsp[-1].expr), 4))
   4444  1.1  christos 	    {
   4445  1.1  christos 	      if ((yyvsp[0].modcodes).s0)
   4446  1.1  christos 		{
   4447  1.1  christos 		  notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n");
   4448  1.1  christos 		  (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)));
   4449  1.1  christos 		}
   4450  1.1  christos 	      else
   4451  1.1  christos 		{
   4452  1.1  christos 		  notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
   4453  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
   4454  1.1  christos 		}
   4455  1.1  christos 	    }
   4456  1.1  christos 	  else
   4457  1.1  christos 	    return yyerror ("Bad shift value");
   4458  1.1  christos 	}
   4459  1.1  christos #line 4460 "config/bfin-parse.c"
   4460  1.1  christos     break;
   4461  1.1  christos 
   4462  1.1  christos   case 93: /* asm_1: REG ASSIGN ASHIFT REG BY HALF_REG vsmod  */
   4463  1.1  christos #line 2023 "./config/bfin-parse.y"
   4464  1.1  christos         {
   4465  1.1  christos 	  int op;
   4466  1.1  christos 
   4467  1.1  christos 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
   4468  1.1  christos 	    {
   4469  1.1  christos 	      if ((yyvsp[0].modcodes).r0)
   4470  1.1  christos 		{
   4471  1.1  christos 		  op = 1;
   4472  1.1  christos 		  notethat ("dsp32shift: dregs = ASHIFT dregs BY "
   4473  1.1  christos 			   "dregs_lo (V, .)\n");
   4474  1.1  christos 		}
   4475  1.1  christos 	      else
   4476  1.1  christos 		{
   4477  1.1  christos 
   4478  1.1  christos 		  op = 2;
   4479  1.1  christos 		  notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
   4480  1.1  christos 		}
   4481  1.1  christos 	      (yyval.instr) = DSP32SHIFT (op, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
   4482  1.1  christos 	    }
   4483  1.1  christos 	  else
   4484  1.1  christos 	    return yyerror ("Dregs expected");
   4485  1.1  christos 	}
   4486  1.1  christos #line 4487 "config/bfin-parse.c"
   4487  1.1  christos     break;
   4488  1.1  christos 
   4489  1.1  christos   case 94: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN REG COMMA HALF_REG RPAREN vmod  */
   4490  1.1  christos #line 2048 "./config/bfin-parse.y"
   4491  1.1  christos         {
   4492  1.1  christos 	  if (IS_DREG_L ((yyvsp[-8].reg)) && IS_DREG_L ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
   4493  1.1  christos 	    {
   4494  1.1  christos 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
   4495  1.1  christos 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
   4496  1.1  christos 	    }
   4497  1.1  christos 	  else
   4498  1.1  christos 	    return yyerror ("Bad shift value or register");
   4499  1.1  christos 	}
   4500  1.1  christos #line 4501 "config/bfin-parse.c"
   4501  1.1  christos     break;
   4502  1.1  christos 
   4503  1.1  christos   case 95: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN HALF_REG COMMA HALF_REG RPAREN  */
   4504  1.1  christos #line 2060 "./config/bfin-parse.y"
   4505  1.1  christos         {
   4506  1.1  christos 	  if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
   4507  1.1  christos 	    {
   4508  1.1  christos 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
   4509  1.1  christos 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
   4510  1.1  christos 	    }
   4511  1.1  christos 	  else if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_H ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
   4512  1.1  christos 	    {
   4513  1.1  christos 	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
   4514  1.1  christos 	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 3, 0);
   4515  1.1  christos 	    }
   4516  1.1  christos 	  else
   4517  1.1  christos 	    return yyerror ("Bad shift value or register");
   4518  1.1  christos 	}
   4519  1.1  christos #line 4520 "config/bfin-parse.c"
   4520  1.1  christos     break;
   4521  1.1  christos 
   4522  1.1  christos   case 96: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN  */
   4523  1.1  christos #line 2078 "./config/bfin-parse.y"
   4524  1.1  christos         {
   4525  1.1  christos 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   4526  1.1  christos 	    {
   4527  1.1  christos 	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
   4528  1.1  christos 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
   4529  1.1  christos 	    }
   4530  1.1  christos 	  else
   4531  1.1  christos 	    return yyerror ("Register mismatch");
   4532  1.1  christos 	}
   4533  1.1  christos #line 4534 "config/bfin-parse.c"
   4534  1.1  christos     break;
   4535  1.1  christos 
   4536  1.1  christos   case 97: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN LPAREN X RPAREN  */
   4537  1.1  christos #line 2089 "./config/bfin-parse.y"
   4538  1.1  christos         {
   4539  1.1  christos 	  if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)))
   4540  1.1  christos 	    {
   4541  1.1  christos 	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
   4542  1.1  christos 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &(yyvsp[-6].reg), 3, 0);
   4543  1.1  christos 	    }
   4544  1.1  christos 	  else
   4545  1.1  christos 	    return yyerror ("Register mismatch");
   4546  1.1  christos 	}
   4547  1.1  christos #line 4548 "config/bfin-parse.c"
   4548  1.1  christos     break;
   4549  1.1  christos 
   4550  1.1  christos   case 98: /* asm_1: REG ASSIGN EXTRACT LPAREN REG COMMA HALF_REG RPAREN xpmod  */
   4551  1.1  christos #line 2100 "./config/bfin-parse.y"
   4552  1.1  christos         {
   4553  1.1  christos 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
   4554  1.1  christos 	    {
   4555  1.1  christos 	      notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
   4556  1.1  christos 	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
   4557  1.1  christos 	    }
   4558  1.1  christos 	  else
   4559  1.1  christos 	    return yyerror ("Register mismatch");
   4560  1.1  christos 	}
   4561  1.1  christos #line 4562 "config/bfin-parse.c"
   4562  1.1  christos     break;
   4563  1.1  christos 
   4564  1.1  christos   case 99: /* asm_1: a_assign REG_A _GREATER_GREATER_GREATER expr  */
   4565  1.1  christos #line 2111 "./config/bfin-parse.y"
   4566  1.1  christos         {
   4567  1.1  christos 	  if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
   4568  1.1  christos 	    return yyerror ("Aregs must be same");
   4569  1.1  christos 
   4570  1.1  christos 	  if (IS_UIMM ((yyvsp[0].expr), 5))
   4571  1.1  christos 	    {
   4572  1.1  christos 	      notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
   4573  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
   4574  1.1  christos 	    }
   4575  1.1  christos 	  else
   4576  1.1  christos 	    return yyerror ("Shift value range error");
   4577  1.1  christos 	}
   4578  1.1  christos #line 4579 "config/bfin-parse.c"
   4579  1.1  christos     break;
   4580  1.1  christos 
   4581  1.1  christos   case 100: /* asm_1: a_assign LSHIFT REG_A BY HALF_REG  */
   4582  1.1  christos #line 2124 "./config/bfin-parse.y"
   4583  1.1  christos         {
   4584  1.1  christos 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
   4585  1.1  christos 	    {
   4586  1.1  christos 	      notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
   4587  1.1  christos 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 1, IS_A1 ((yyvsp[-4].reg)));
   4588  1.1  christos 	    }
   4589  1.1  christos 	  else
   4590  1.1  christos 	    return yyerror ("Register mismatch");
   4591  1.1  christos 	}
   4592  1.1  christos #line 4593 "config/bfin-parse.c"
   4593  1.1  christos     break;
   4594  1.1  christos 
   4595  1.1  christos   case 101: /* asm_1: HALF_REG ASSIGN LSHIFT HALF_REG BY HALF_REG  */
   4596  1.1  christos #line 2135 "./config/bfin-parse.y"
   4597  1.1  christos         {
   4598  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
   4599  1.1  christos 	    {
   4600  1.1  christos 	      notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
   4601  1.1  christos 	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-2].reg)));
   4602  1.1  christos 	    }
   4603  1.1  christos 	  else
   4604  1.1  christos 	    return yyerror ("Register mismatch");
   4605  1.1  christos 	}
   4606  1.1  christos #line 4607 "config/bfin-parse.c"
   4607  1.1  christos     break;
   4608  1.1  christos 
   4609  1.1  christos   case 102: /* asm_1: REG ASSIGN LSHIFT REG BY HALF_REG vmod  */
   4610  1.1  christos #line 2146 "./config/bfin-parse.y"
   4611  1.1  christos         {
   4612  1.1  christos 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
   4613  1.1  christos 	    {
   4614  1.1  christos 	      notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
   4615  1.1  christos 	      (yyval.instr) = DSP32SHIFT ((yyvsp[0].r0).r0 ? 1: 2, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
   4616  1.1  christos 	    }
   4617  1.1  christos 	  else
   4618  1.1  christos 	    return yyerror ("Register mismatch");
   4619  1.1  christos 	}
   4620  1.1  christos #line 4621 "config/bfin-parse.c"
   4621  1.1  christos     break;
   4622  1.1  christos 
   4623  1.1  christos   case 103: /* asm_1: REG ASSIGN SHIFT REG BY HALF_REG  */
   4624  1.1  christos #line 2157 "./config/bfin-parse.y"
   4625  1.1  christos         {
   4626  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
   4627  1.1  christos 	    {
   4628  1.1  christos 	      notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
   4629  1.1  christos 	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, 0);
   4630  1.1  christos 	    }
   4631  1.1  christos 	  else
   4632  1.1  christos 	    return yyerror ("Register mismatch");
   4633  1.1  christos 	}
   4634  1.1  christos #line 4635 "config/bfin-parse.c"
   4635  1.1  christos     break;
   4636  1.1  christos 
   4637  1.1  christos   case 104: /* asm_1: a_assign REG_A GREATER_GREATER expr  */
   4638  1.1  christos #line 2168 "./config/bfin-parse.y"
   4639  1.1  christos         {
   4640  1.1  christos 	  if (REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6) >= 0)
   4641  1.1  christos 	    {
   4642  1.1  christos 	      notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
   4643  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 1, IS_A1 ((yyvsp[-3].reg)));
   4644  1.1  christos 	    }
   4645  1.1  christos 	  else
   4646  1.1  christos 	    return yyerror ("Accu register expected");
   4647  1.1  christos 	}
   4648  1.1  christos #line 4649 "config/bfin-parse.c"
   4649  1.1  christos     break;
   4650  1.1  christos 
   4651  1.1  christos   case 105: /* asm_1: REG ASSIGN REG GREATER_GREATER expr vmod  */
   4652  1.1  christos #line 2179 "./config/bfin-parse.y"
   4653  1.1  christos         {
   4654  1.1  christos 	  if ((yyvsp[0].r0).r0 == 1)
   4655  1.1  christos 	    {
   4656  1.1  christos 	      if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4657  1.1  christos 		{
   4658  1.1  christos 		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
   4659  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
   4660  1.1  christos 		}
   4661  1.1  christos 	      else
   4662  1.1  christos 	        return yyerror ("Register mismatch");
   4663  1.1  christos 	    }
   4664  1.1  christos 	  else
   4665  1.1  christos 	    {
   4666  1.1  christos 	      if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4667  1.1  christos 		{
   4668  1.1  christos 		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
   4669  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
   4670  1.1  christos 		}
   4671  1.1  christos 	      else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 2)
   4672  1.1  christos 		{
   4673  1.1  christos 		  notethat ("PTR2op: pregs = pregs >> 2\n");
   4674  1.1  christos 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 3);
   4675  1.1  christos 		}
   4676  1.1  christos 	      else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 1)
   4677  1.1  christos 		{
   4678  1.1  christos 		  notethat ("PTR2op: pregs = pregs >> 1\n");
   4679  1.1  christos 		  (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 4);
   4680  1.1  christos 		}
   4681  1.1  christos 	      else
   4682  1.1  christos 	        return yyerror ("Register mismatch");
   4683  1.1  christos 	    }
   4684  1.1  christos 	}
   4685  1.1  christos #line 4686 "config/bfin-parse.c"
   4686  1.1  christos     break;
   4687  1.1  christos 
   4688  1.1  christos   case 106: /* asm_1: HALF_REG ASSIGN HALF_REG GREATER_GREATER expr  */
   4689  1.1  christos #line 2212 "./config/bfin-parse.y"
   4690  1.1  christos         {
   4691  1.1  christos 	  if (IS_UIMM ((yyvsp[0].expr), 5))
   4692  1.1  christos 	    {
   4693  1.1  christos 	      notethat ("dsp32shiftimm:  dregs_half =  dregs_half >> uimm5\n");
   4694  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-4].reg), -uimm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
   4695  1.1  christos 	    }
   4696  1.1  christos 	  else
   4697  1.1  christos 	    return yyerror ("Register mismatch");
   4698  1.1  christos 	}
   4699  1.1  christos #line 4700 "config/bfin-parse.c"
   4700  1.1  christos     break;
   4701  1.1  christos 
   4702  1.1  christos   case 107: /* asm_1: HALF_REG ASSIGN HALF_REG _GREATER_GREATER_GREATER expr smod  */
   4703  1.1  christos #line 2222 "./config/bfin-parse.y"
   4704  1.1  christos         {
   4705  1.1  christos 	  if (IS_UIMM ((yyvsp[-1].expr), 5))
   4706  1.1  christos 	    {
   4707  1.1  christos 	      notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
   4708  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg),
   4709  1.1  christos 				  (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
   4710  1.1  christos 	    }
   4711  1.1  christos 	  else
   4712  1.1  christos 	    return yyerror ("Register or modifier mismatch");
   4713  1.1  christos 	}
   4714  1.1  christos #line 4715 "config/bfin-parse.c"
   4715  1.1  christos     break;
   4716  1.1  christos 
   4717  1.1  christos   case 108: /* asm_1: REG ASSIGN REG _GREATER_GREATER_GREATER expr vsmod  */
   4718  1.1  christos #line 2235 "./config/bfin-parse.y"
   4719  1.1  christos         {
   4720  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4721  1.1  christos 	    {
   4722  1.1  christos 	      if ((yyvsp[0].modcodes).r0)
   4723  1.1  christos 		{
   4724  1.1  christos 		  /* Vector?  */
   4725  1.1  christos 		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (V, .)\n");
   4726  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
   4727  1.1  christos 		}
   4728  1.1  christos 	      else
   4729  1.1  christos 		{
   4730  1.1  christos 		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (.)\n");
   4731  1.1  christos 		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
   4732  1.1  christos 		}
   4733  1.1  christos 	    }
   4734  1.1  christos 	  else
   4735  1.1  christos 	    return yyerror ("Register mismatch");
   4736  1.1  christos 	}
   4737  1.1  christos #line 4738 "config/bfin-parse.c"
   4738  1.1  christos     break;
   4739  1.1  christos 
   4740  1.1  christos   case 109: /* asm_1: HALF_REG ASSIGN ONES REG  */
   4741  1.1  christos #line 2255 "./config/bfin-parse.y"
   4742  1.1  christos         {
   4743  1.1  christos 	  if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
   4744  1.1  christos 	    {
   4745  1.1  christos 	      notethat ("dsp32shift: dregs_lo = ONES dregs\n");
   4746  1.1  christos 	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 3, 0);
   4747  1.1  christos 	    }
   4748  1.1  christos 	  else
   4749  1.1  christos 	    return yyerror ("Register mismatch");
   4750  1.1  christos 	}
   4751  1.1  christos #line 4752 "config/bfin-parse.c"
   4752  1.1  christos     break;
   4753  1.1  christos 
   4754  1.1  christos   case 110: /* asm_1: REG ASSIGN PACK LPAREN HALF_REG COMMA HALF_REG RPAREN  */
   4755  1.1  christos #line 2266 "./config/bfin-parse.y"
   4756  1.1  christos         {
   4757  1.1  christos 	  if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   4758  1.1  christos 	    {
   4759  1.1  christos 	      notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
   4760  1.1  christos 	      (yyval.instr) = DSP32SHIFT (4, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)), 0);
   4761  1.1  christos 	    }
   4762  1.1  christos 	  else
   4763  1.1  christos 	    return yyerror ("Register mismatch");
   4764  1.1  christos 	}
   4765  1.1  christos #line 4766 "config/bfin-parse.c"
   4766  1.1  christos     break;
   4767  1.1  christos 
   4768  1.1  christos   case 111: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXORSHIFT LPAREN REG_A COMMA REG RPAREN  */
   4769  1.1  christos #line 2277 "./config/bfin-parse.y"
   4770  1.1  christos         {
   4771  1.1  christos 	  if (IS_DREG ((yyvsp[-9].reg))
   4772  1.1  christos 	      && (yyvsp[-3].reg).regno == REG_A0
   4773  1.1  christos 	      && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
   4774  1.1  christos 	    {
   4775  1.1  christos 	      notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
   4776  1.1  christos 	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 0, 0);
   4777  1.1  christos 	    }
   4778  1.1  christos 	  else
   4779  1.1  christos 	    return yyerror ("Register mismatch");
   4780  1.1  christos 	}
   4781  1.1  christos #line 4782 "config/bfin-parse.c"
   4782  1.1  christos     break;
   4783  1.1  christos 
   4784  1.1  christos   case 112: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG RPAREN  */
   4785  1.1  christos #line 2290 "./config/bfin-parse.y"
   4786  1.1  christos         {
   4787  1.1  christos 	  if (IS_DREG ((yyvsp[-9].reg))
   4788  1.1  christos 	      && (yyvsp[-3].reg).regno == REG_A0
   4789  1.1  christos 	      && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
   4790  1.1  christos 	    {
   4791  1.1  christos 	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
   4792  1.1  christos 	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 1, 0);
   4793  1.1  christos 	    }
   4794  1.1  christos 	  else
   4795  1.1  christos 	    return yyerror ("Register mismatch");
   4796  1.1  christos 	}
   4797  1.1  christos #line 4798 "config/bfin-parse.c"
   4798  1.1  christos     break;
   4799  1.1  christos 
   4800  1.1  christos   case 113: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN  */
   4801  1.1  christos #line 2303 "./config/bfin-parse.y"
   4802  1.1  christos         {
   4803  1.1  christos 	  if (IS_DREG ((yyvsp[-11].reg)) && !IS_H ((yyvsp[-11].reg)) && !REG_SAME ((yyvsp[-5].reg), (yyvsp[-3].reg)))
   4804  1.1  christos 	    {
   4805  1.1  christos 	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
   4806  1.1  christos 	      (yyval.instr) = DSP32SHIFT (12, &(yyvsp[-11].reg), 0, 0, 1, 0);
   4807  1.1  christos 	    }
   4808  1.1  christos 	  else
   4809  1.1  christos 	    return yyerror ("Register mismatch");
   4810  1.1  christos 	}
   4811  1.1  christos #line 4812 "config/bfin-parse.c"
   4812  1.1  christos     break;
   4813  1.1  christos 
   4814  1.1  christos   case 114: /* asm_1: a_assign ROT REG_A BY HALF_REG  */
   4815  1.1  christos #line 2314 "./config/bfin-parse.y"
   4816  1.1  christos         {
   4817  1.1  christos 	  if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
   4818  1.1  christos 	    {
   4819  1.1  christos 	      notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
   4820  1.1  christos 	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 2, IS_A1 ((yyvsp[-4].reg)));
   4821  1.1  christos 	    }
   4822  1.1  christos 	  else
   4823  1.1  christos 	    return yyerror ("Register mismatch");
   4824  1.1  christos 	}
   4825  1.1  christos #line 4826 "config/bfin-parse.c"
   4826  1.1  christos     break;
   4827  1.1  christos 
   4828  1.1  christos   case 115: /* asm_1: REG ASSIGN ROT REG BY HALF_REG  */
   4829  1.1  christos #line 2325 "./config/bfin-parse.y"
   4830  1.1  christos         {
   4831  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
   4832  1.1  christos 	    {
   4833  1.1  christos 	      notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
   4834  1.1  christos 	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 3, 0);
   4835  1.1  christos 	    }
   4836  1.1  christos 	  else
   4837  1.1  christos 	    return yyerror ("Register mismatch");
   4838  1.1  christos 	}
   4839  1.1  christos #line 4840 "config/bfin-parse.c"
   4840  1.1  christos     break;
   4841  1.1  christos 
   4842  1.1  christos   case 116: /* asm_1: a_assign ROT REG_A BY expr  */
   4843  1.1  christos #line 2336 "./config/bfin-parse.y"
   4844  1.1  christos         {
   4845  1.1  christos 	  if (IS_IMM ((yyvsp[0].expr), 6))
   4846  1.1  christos 	    {
   4847  1.1  christos 	      notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
   4848  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[0].expr)), 0, 2, IS_A1 ((yyvsp[-4].reg)));
   4849  1.1  christos 	    }
   4850  1.1  christos 	  else
   4851  1.1  christos 	    return yyerror ("Register mismatch");
   4852  1.1  christos 	}
   4853  1.1  christos #line 4854 "config/bfin-parse.c"
   4854  1.1  christos     break;
   4855  1.1  christos 
   4856  1.1  christos   case 117: /* asm_1: REG ASSIGN ROT REG BY expr  */
   4857  1.1  christos #line 2347 "./config/bfin-parse.y"
   4858  1.1  christos         {
   4859  1.1  christos 	  if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6))
   4860  1.1  christos 	    {
   4861  1.1  christos 	      (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 3, IS_A1 ((yyvsp[-5].reg)));
   4862  1.1  christos 	    }
   4863  1.1  christos 	  else
   4864  1.1  christos 	    return yyerror ("Register mismatch");
   4865  1.1  christos 	}
   4866  1.1  christos #line 4867 "config/bfin-parse.c"
   4867  1.1  christos     break;
   4868  1.1  christos 
   4869  1.1  christos   case 118: /* asm_1: HALF_REG ASSIGN SIGNBITS REG_A  */
   4870  1.1  christos #line 2357 "./config/bfin-parse.y"
   4871  1.1  christos         {
   4872  1.1  christos 	  if (IS_DREG_L ((yyvsp[-3].reg)))
   4873  1.1  christos 	    {
   4874  1.1  christos 	      notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
   4875  1.1  christos 	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, 0, IS_A1 ((yyvsp[0].reg)), 0);
   4876  1.1  christos 	    }
   4877  1.1  christos 	  else
   4878  1.1  christos 	    return yyerror ("Register mismatch");
   4879  1.1  christos 	}
   4880  1.1  christos #line 4881 "config/bfin-parse.c"
   4881  1.1  christos     break;
   4882  1.1  christos 
   4883  1.1  christos   case 119: /* asm_1: HALF_REG ASSIGN SIGNBITS REG  */
   4884  1.1  christos #line 2368 "./config/bfin-parse.y"
   4885  1.1  christos         {
   4886  1.1  christos 	  if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
   4887  1.1  christos 	    {
   4888  1.1  christos 	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
   4889  1.1  christos 	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 0, 0);
   4890  1.1  christos 	    }
   4891  1.1  christos 	  else
   4892  1.1  christos 	    return yyerror ("Register mismatch");
   4893  1.1  christos 	}
   4894  1.1  christos #line 4895 "config/bfin-parse.c"
   4895  1.1  christos     break;
   4896  1.1  christos 
   4897  1.1  christos   case 120: /* asm_1: HALF_REG ASSIGN SIGNBITS HALF_REG  */
   4898  1.1  christos #line 2379 "./config/bfin-parse.y"
   4899  1.1  christos         {
   4900  1.1  christos 	  if (IS_DREG_L ((yyvsp[-3].reg)))
   4901  1.1  christos 	    {
   4902  1.1  christos 	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
   4903  1.1  christos 	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 1 + IS_H ((yyvsp[0].reg)), 0);
   4904  1.1  christos 	    }
   4905  1.1  christos 	  else
   4906  1.1  christos 	    return yyerror ("Register mismatch");
   4907  1.1  christos 	}
   4908  1.1  christos #line 4909 "config/bfin-parse.c"
   4909  1.1  christos     break;
   4910  1.1  christos 
   4911  1.1  christos   case 121: /* asm_1: HALF_REG ASSIGN VIT_MAX LPAREN REG RPAREN asr_asl  */
   4912  1.1  christos #line 2391 "./config/bfin-parse.y"
   4913  1.1  christos         {
   4914  1.1  christos 	  if (IS_DREG_L ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-2].reg)))
   4915  1.1  christos 	    {
   4916  1.1  christos 	      notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
   4917  1.1  christos 	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-6].reg), 0, &(yyvsp[-2].reg), ((yyvsp[0].r0).r0 ? 0 : 1), 0);
   4918  1.1  christos 	    }
   4919  1.1  christos 	  else
   4920  1.1  christos 	    return yyerror ("Register mismatch");
   4921  1.1  christos 	}
   4922  1.1  christos #line 4923 "config/bfin-parse.c"
   4923  1.1  christos     break;
   4924  1.1  christos 
   4925  1.1  christos   case 122: /* asm_1: REG ASSIGN VIT_MAX LPAREN REG COMMA REG RPAREN asr_asl  */
   4926  1.1  christos #line 2402 "./config/bfin-parse.y"
   4927  1.1  christos         {
   4928  1.1  christos 	  if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
   4929  1.1  christos 	    {
   4930  1.1  christos 	      notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
   4931  1.1  christos 	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), 2 | ((yyvsp[0].r0).r0 ? 0 : 1), 0);
   4932  1.1  christos 	    }
   4933  1.1  christos 	  else
   4934  1.1  christos 	    return yyerror ("Register mismatch");
   4935  1.1  christos 	}
   4936  1.1  christos #line 4937 "config/bfin-parse.c"
   4937  1.1  christos     break;
   4938  1.1  christos 
   4939  1.1  christos   case 123: /* asm_1: BITMUX LPAREN REG COMMA REG COMMA REG_A RPAREN asr_asl  */
   4940  1.1  christos #line 2413 "./config/bfin-parse.y"
   4941  1.1  christos         {
   4942  1.1  christos 	  if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)))
   4943  1.1  christos 	    return yyerror ("Illegal source register combination");
   4944  1.1  christos 
   4945  1.1  christos 	  if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)) && !IS_A1 ((yyvsp[-2].reg)))
   4946  1.1  christos 	    {
   4947  1.1  christos 	      notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
   4948  1.1  christos 	      (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[-6].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
   4949  1.1  christos 	    }
   4950  1.1  christos 	  else
   4951  1.1  christos 	    return yyerror ("Register mismatch");
   4952  1.1  christos 	}
   4953  1.1  christos #line 4954 "config/bfin-parse.c"
   4954  1.1  christos     break;
   4955  1.1  christos 
   4956  1.1  christos   case 124: /* asm_1: a_assign BXORSHIFT LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN  */
   4957  1.1  christos #line 2427 "./config/bfin-parse.y"
   4958  1.1  christos         {
   4959  1.1  christos 	  if (!IS_A1 ((yyvsp[-8].reg)) && !IS_A1 ((yyvsp[-5].reg)) && IS_A1 ((yyvsp[-3].reg)))
   4960  1.1  christos 	    {
   4961  1.1  christos 	      notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
   4962  1.1  christos 	      (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
   4963  1.1  christos 	    }
   4964  1.1  christos 	  else
   4965  1.1  christos 	    return yyerror ("Dregs expected");
   4966  1.1  christos 	}
   4967  1.1  christos #line 4968 "config/bfin-parse.c"
   4968  1.1  christos     break;
   4969  1.1  christos 
   4970  1.1  christos   case 125: /* asm_1: BITCLR LPAREN REG COMMA expr RPAREN  */
   4971  1.1  christos #line 2440 "./config/bfin-parse.y"
   4972  1.1  christos         {
   4973  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4974  1.1  christos 	    {
   4975  1.1  christos 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
   4976  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 4);
   4977  1.1  christos 	    }
   4978  1.1  christos 	  else
   4979  1.1  christos 	    return yyerror ("Register mismatch");
   4980  1.1  christos 	}
   4981  1.1  christos #line 4982 "config/bfin-parse.c"
   4982  1.1  christos     break;
   4983  1.1  christos 
   4984  1.1  christos   case 126: /* asm_1: BITSET LPAREN REG COMMA expr RPAREN  */
   4985  1.1  christos #line 2452 "./config/bfin-parse.y"
   4986  1.1  christos         {
   4987  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   4988  1.1  christos 	    {
   4989  1.1  christos 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
   4990  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 2);
   4991  1.1  christos 	    }
   4992  1.1  christos 	  else
   4993  1.1  christos 	    return yyerror ("Register mismatch");
   4994  1.1  christos 	}
   4995  1.1  christos #line 4996 "config/bfin-parse.c"
   4996  1.1  christos     break;
   4997  1.1  christos 
   4998  1.1  christos   case 127: /* asm_1: BITTGL LPAREN REG COMMA expr RPAREN  */
   4999  1.1  christos #line 2464 "./config/bfin-parse.y"
   5000  1.1  christos         {
   5001  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   5002  1.1  christos 	    {
   5003  1.1  christos 	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
   5004  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 3);
   5005  1.1  christos 	    }
   5006  1.1  christos 	  else
   5007  1.1  christos 	    return yyerror ("Register mismatch");
   5008  1.1  christos 	}
   5009  1.1  christos #line 5010 "config/bfin-parse.c"
   5010  1.1  christos     break;
   5011  1.1  christos 
   5012  1.1  christos   case 128: /* asm_1: CCREG _ASSIGN_BANG BITTST LPAREN REG COMMA expr RPAREN  */
   5013  1.1  christos #line 2475 "./config/bfin-parse.y"
   5014  1.1  christos         {
   5015  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   5016  1.1  christos 	    {
   5017  1.1  christos 	      notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
   5018  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 0);
   5019  1.1  christos 	    }
   5020  1.1  christos 	  else
   5021  1.1  christos 	    return yyerror ("Register mismatch or value error");
   5022  1.1  christos 	}
   5023  1.1  christos #line 5024 "config/bfin-parse.c"
   5024  1.1  christos     break;
   5025  1.1  christos 
   5026  1.1  christos   case 129: /* asm_1: CCREG ASSIGN BITTST LPAREN REG COMMA expr RPAREN  */
   5027  1.1  christos #line 2486 "./config/bfin-parse.y"
   5028  1.1  christos         {
   5029  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
   5030  1.1  christos 	    {
   5031  1.1  christos 	      notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
   5032  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 1);
   5033  1.1  christos 	    }
   5034  1.1  christos 	  else
   5035  1.1  christos 	    return yyerror ("Register mismatch or value error");
   5036  1.1  christos 	}
   5037  1.1  christos #line 5038 "config/bfin-parse.c"
   5038  1.1  christos     break;
   5039  1.1  christos 
   5040  1.1  christos   case 130: /* asm_1: IF BANG CCREG REG ASSIGN REG  */
   5041  1.1  christos #line 2497 "./config/bfin-parse.y"
   5042  1.1  christos         {
   5043  1.1  christos 	  if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg)))
   5044  1.1  christos 	      && (IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg))))
   5045  1.1  christos 	    {
   5046  1.1  christos 	      notethat ("ccMV: IF ! CC gregs = gregs\n");
   5047  1.1  christos 	      (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 0);
   5048  1.1  christos 	    }
   5049  1.1  christos 	  else
   5050  1.1  christos 	    return yyerror ("Register mismatch");
   5051  1.1  christos 	}
   5052  1.1  christos #line 5053 "config/bfin-parse.c"
   5053  1.1  christos     break;
   5054  1.1  christos 
   5055  1.1  christos   case 131: /* asm_1: IF CCREG REG ASSIGN REG  */
   5056  1.1  christos #line 2509 "./config/bfin-parse.y"
   5057  1.1  christos         {
   5058  1.1  christos 	  if ((IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg)))
   5059  1.1  christos 	      && (IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))))
   5060  1.1  christos 	    {
   5061  1.1  christos 	      notethat ("ccMV: IF CC gregs = gregs\n");
   5062  1.1  christos 	      (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 1);
   5063  1.1  christos 	    }
   5064  1.1  christos 	  else
   5065  1.1  christos 	    return yyerror ("Register mismatch");
   5066  1.1  christos 	}
   5067  1.1  christos #line 5068 "config/bfin-parse.c"
   5068  1.1  christos     break;
   5069  1.1  christos 
   5070  1.1  christos   case 132: /* asm_1: IF BANG CCREG JUMP expr  */
   5071  1.1  christos #line 2521 "./config/bfin-parse.y"
   5072  1.1  christos         {
   5073  1.1  christos 	  if (IS_PCREL10 ((yyvsp[0].expr)))
   5074  1.1  christos 	    {
   5075  1.1  christos 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
   5076  1.1  christos 	      (yyval.instr) = BRCC (0, 0, (yyvsp[0].expr));
   5077  1.1  christos 	    }
   5078  1.1  christos 	  else
   5079  1.1  christos 	    return yyerror ("Bad jump offset");
   5080  1.1  christos 	}
   5081  1.1  christos #line 5082 "config/bfin-parse.c"
   5082  1.1  christos     break;
   5083  1.1  christos 
   5084  1.1  christos   case 133: /* asm_1: IF BANG CCREG JUMP expr LPAREN BP RPAREN  */
   5085  1.1  christos #line 2532 "./config/bfin-parse.y"
   5086  1.1  christos         {
   5087  1.1  christos 	  if (IS_PCREL10 ((yyvsp[-3].expr)))
   5088  1.1  christos 	    {
   5089  1.1  christos 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
   5090  1.1  christos 	      (yyval.instr) = BRCC (0, 1, (yyvsp[-3].expr));
   5091  1.1  christos 	    }
   5092  1.1  christos 	  else
   5093  1.1  christos 	    return yyerror ("Bad jump offset");
   5094  1.1  christos 	}
   5095  1.1  christos #line 5096 "config/bfin-parse.c"
   5096  1.1  christos     break;
   5097  1.1  christos 
   5098  1.1  christos   case 134: /* asm_1: IF CCREG JUMP expr  */
   5099  1.1  christos #line 2543 "./config/bfin-parse.y"
   5100  1.1  christos         {
   5101  1.1  christos 	  if (IS_PCREL10 ((yyvsp[0].expr)))
   5102  1.1  christos 	    {
   5103  1.1  christos 	      notethat ("BRCC: IF CC JUMP  pcrel11m2\n");
   5104  1.1  christos 	      (yyval.instr) = BRCC (1, 0, (yyvsp[0].expr));
   5105  1.1  christos 	    }
   5106  1.1  christos 	  else
   5107  1.1  christos 	    return yyerror ("Bad jump offset");
   5108  1.1  christos 	}
   5109  1.1  christos #line 5110 "config/bfin-parse.c"
   5110  1.1  christos     break;
   5111  1.1  christos 
   5112  1.1  christos   case 135: /* asm_1: IF CCREG JUMP expr LPAREN BP RPAREN  */
   5113  1.1  christos #line 2554 "./config/bfin-parse.y"
   5114  1.1  christos         {
   5115  1.1  christos 	  if (IS_PCREL10 ((yyvsp[-3].expr)))
   5116  1.1  christos 	    {
   5117  1.1  christos 	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
   5118  1.1  christos 	      (yyval.instr) = BRCC (1, 1, (yyvsp[-3].expr));
   5119  1.1  christos 	    }
   5120  1.1  christos 	  else
   5121  1.1  christos 	    return yyerror ("Bad jump offset");
   5122  1.1  christos 	}
   5123  1.1  christos #line 5124 "config/bfin-parse.c"
   5124  1.1  christos     break;
   5125  1.1  christos 
   5126  1.1  christos   case 136: /* asm_1: NOP  */
   5127  1.1  christos #line 2564 "./config/bfin-parse.y"
   5128  1.1  christos         {
   5129  1.1  christos 	  notethat ("ProgCtrl: NOP\n");
   5130  1.1  christos 	  (yyval.instr) = PROGCTRL (0, 0);
   5131  1.1  christos 	}
   5132  1.1  christos #line 5133 "config/bfin-parse.c"
   5133  1.1  christos     break;
   5134  1.1  christos 
   5135  1.1  christos   case 137: /* asm_1: RTS  */
   5136  1.1  christos #line 2570 "./config/bfin-parse.y"
   5137  1.1  christos         {
   5138  1.1  christos 	  notethat ("ProgCtrl: RTS\n");
   5139  1.1  christos 	  (yyval.instr) = PROGCTRL (1, 0);
   5140  1.1  christos 	}
   5141  1.1  christos #line 5142 "config/bfin-parse.c"
   5142  1.1  christos     break;
   5143  1.1  christos 
   5144  1.1  christos   case 138: /* asm_1: RTI  */
   5145  1.1  christos #line 2576 "./config/bfin-parse.y"
   5146  1.1  christos         {
   5147  1.1  christos 	  notethat ("ProgCtrl: RTI\n");
   5148  1.1  christos 	  (yyval.instr) = PROGCTRL (1, 1);
   5149  1.1  christos 	}
   5150  1.1  christos #line 5151 "config/bfin-parse.c"
   5151  1.1  christos     break;
   5152  1.1  christos 
   5153  1.1  christos   case 139: /* asm_1: RTX  */
   5154  1.1  christos #line 2582 "./config/bfin-parse.y"
   5155  1.1  christos         {
   5156  1.1  christos 	  notethat ("ProgCtrl: RTX\n");
   5157  1.1  christos 	  (yyval.instr) = PROGCTRL (1, 2);
   5158  1.1  christos 	}
   5159  1.1  christos #line 5160 "config/bfin-parse.c"
   5160  1.1  christos     break;
   5161  1.1  christos 
   5162  1.1  christos   case 140: /* asm_1: RTN  */
   5163  1.1  christos #line 2588 "./config/bfin-parse.y"
   5164  1.1  christos         {
   5165  1.1  christos 	  notethat ("ProgCtrl: RTN\n");
   5166  1.1  christos 	  (yyval.instr) = PROGCTRL (1, 3);
   5167  1.1  christos 	}
   5168  1.1  christos #line 5169 "config/bfin-parse.c"
   5169  1.1  christos     break;
   5170  1.1  christos 
   5171  1.1  christos   case 141: /* asm_1: RTE  */
   5172  1.1  christos #line 2594 "./config/bfin-parse.y"
   5173  1.1  christos         {
   5174  1.1  christos 	  notethat ("ProgCtrl: RTE\n");
   5175  1.1  christos 	  (yyval.instr) = PROGCTRL (1, 4);
   5176  1.1  christos 	}
   5177  1.1  christos #line 5178 "config/bfin-parse.c"
   5178  1.1  christos     break;
   5179  1.1  christos 
   5180  1.1  christos   case 142: /* asm_1: IDLE  */
   5181  1.1  christos #line 2600 "./config/bfin-parse.y"
   5182  1.1  christos         {
   5183  1.1  christos 	  notethat ("ProgCtrl: IDLE\n");
   5184  1.1  christos 	  (yyval.instr) = PROGCTRL (2, 0);
   5185  1.1  christos 	}
   5186  1.1  christos #line 5187 "config/bfin-parse.c"
   5187  1.1  christos     break;
   5188  1.1  christos 
   5189  1.1  christos   case 143: /* asm_1: CSYNC  */
   5190  1.1  christos #line 2606 "./config/bfin-parse.y"
   5191  1.1  christos         {
   5192  1.1  christos 	  notethat ("ProgCtrl: CSYNC\n");
   5193  1.1  christos 	  (yyval.instr) = PROGCTRL (2, 3);
   5194  1.1  christos 	}
   5195  1.1  christos #line 5196 "config/bfin-parse.c"
   5196  1.1  christos     break;
   5197  1.1  christos 
   5198  1.1  christos   case 144: /* asm_1: SSYNC  */
   5199  1.1  christos #line 2612 "./config/bfin-parse.y"
   5200  1.1  christos         {
   5201  1.1  christos 	  notethat ("ProgCtrl: SSYNC\n");
   5202  1.1  christos 	  (yyval.instr) = PROGCTRL (2, 4);
   5203  1.1  christos 	}
   5204  1.1  christos #line 5205 "config/bfin-parse.c"
   5205  1.1  christos     break;
   5206  1.1  christos 
   5207  1.1  christos   case 145: /* asm_1: EMUEXCPT  */
   5208  1.1  christos #line 2618 "./config/bfin-parse.y"
   5209  1.1  christos         {
   5210  1.1  christos 	  notethat ("ProgCtrl: EMUEXCPT\n");
   5211  1.1  christos 	  (yyval.instr) = PROGCTRL (2, 5);
   5212  1.1  christos 	}
   5213  1.1  christos #line 5214 "config/bfin-parse.c"
   5214  1.1  christos     break;
   5215  1.1  christos 
   5216  1.1  christos   case 146: /* asm_1: CLI REG  */
   5217  1.1  christos #line 2624 "./config/bfin-parse.y"
   5218  1.1  christos         {
   5219  1.1  christos 	  if (IS_DREG ((yyvsp[0].reg)))
   5220  1.1  christos 	    {
   5221  1.1  christos 	      notethat ("ProgCtrl: CLI dregs\n");
   5222  1.1  christos 	      (yyval.instr) = PROGCTRL (3, (yyvsp[0].reg).regno & CODE_MASK);
   5223  1.1  christos 	    }
   5224  1.1  christos 	  else
   5225  1.1  christos 	    return yyerror ("Dreg expected for CLI");
   5226  1.1  christos 	}
   5227  1.1  christos #line 5228 "config/bfin-parse.c"
   5228  1.1  christos     break;
   5229  1.1  christos 
   5230  1.1  christos   case 147: /* asm_1: STI REG  */
   5231  1.1  christos #line 2635 "./config/bfin-parse.y"
   5232  1.1  christos         {
   5233  1.1  christos 	  if (IS_DREG ((yyvsp[0].reg)))
   5234  1.1  christos 	    {
   5235  1.1  christos 	      notethat ("ProgCtrl: STI dregs\n");
   5236  1.1  christos 	      (yyval.instr) = PROGCTRL (4, (yyvsp[0].reg).regno & CODE_MASK);
   5237  1.1  christos 	    }
   5238  1.1  christos 	  else
   5239  1.1  christos 	    return yyerror ("Dreg expected for STI");
   5240  1.1  christos 	}
   5241  1.1  christos #line 5242 "config/bfin-parse.c"
   5242  1.1  christos     break;
   5243  1.1  christos 
   5244  1.1  christos   case 148: /* asm_1: JUMP LPAREN REG RPAREN  */
   5245  1.1  christos #line 2646 "./config/bfin-parse.y"
   5246  1.1  christos         {
   5247  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5248  1.1  christos 	    {
   5249  1.1  christos 	      notethat ("ProgCtrl: JUMP (pregs )\n");
   5250  1.1  christos 	      (yyval.instr) = PROGCTRL (5, (yyvsp[-1].reg).regno & CODE_MASK);
   5251  1.1  christos 	    }
   5252  1.1  christos 	  else
   5253  1.1  christos 	    return yyerror ("Bad register for indirect jump");
   5254  1.1  christos 	}
   5255  1.1  christos #line 5256 "config/bfin-parse.c"
   5256  1.1  christos     break;
   5257  1.1  christos 
   5258  1.1  christos   case 149: /* asm_1: CALL LPAREN REG RPAREN  */
   5259  1.1  christos #line 2657 "./config/bfin-parse.y"
   5260  1.1  christos         {
   5261  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5262  1.1  christos 	    {
   5263  1.1  christos 	      notethat ("ProgCtrl: CALL (pregs )\n");
   5264  1.1  christos 	      (yyval.instr) = PROGCTRL (6, (yyvsp[-1].reg).regno & CODE_MASK);
   5265  1.1  christos 	    }
   5266  1.1  christos 	  else
   5267  1.1  christos 	    return yyerror ("Bad register for indirect call");
   5268  1.1  christos 	}
   5269  1.1  christos #line 5270 "config/bfin-parse.c"
   5270  1.1  christos     break;
   5271  1.1  christos 
   5272  1.1  christos   case 150: /* asm_1: CALL LPAREN PC PLUS REG RPAREN  */
   5273  1.1  christos #line 2668 "./config/bfin-parse.y"
   5274  1.1  christos         {
   5275  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5276  1.1  christos 	    {
   5277  1.1  christos 	      notethat ("ProgCtrl: CALL (PC + pregs )\n");
   5278  1.1  christos 	      (yyval.instr) = PROGCTRL (7, (yyvsp[-1].reg).regno & CODE_MASK);
   5279  1.1  christos 	    }
   5280  1.1  christos 	  else
   5281  1.1  christos 	    return yyerror ("Bad register for indirect call");
   5282  1.1  christos 	}
   5283  1.1  christos #line 5284 "config/bfin-parse.c"
   5284  1.1  christos     break;
   5285  1.1  christos 
   5286  1.1  christos   case 151: /* asm_1: JUMP LPAREN PC PLUS REG RPAREN  */
   5287  1.1  christos #line 2679 "./config/bfin-parse.y"
   5288  1.1  christos         {
   5289  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5290  1.1  christos 	    {
   5291  1.1  christos 	      notethat ("ProgCtrl: JUMP (PC + pregs )\n");
   5292  1.1  christos 	      (yyval.instr) = PROGCTRL (8, (yyvsp[-1].reg).regno & CODE_MASK);
   5293  1.1  christos 	    }
   5294  1.1  christos 	  else
   5295  1.1  christos 	    return yyerror ("Bad register for indirect jump");
   5296  1.1  christos 	}
   5297  1.1  christos #line 5298 "config/bfin-parse.c"
   5298  1.1  christos     break;
   5299  1.1  christos 
   5300  1.1  christos   case 152: /* asm_1: RAISE expr  */
   5301  1.1  christos #line 2690 "./config/bfin-parse.y"
   5302  1.1  christos         {
   5303  1.1  christos 	  if (IS_UIMM ((yyvsp[0].expr), 4))
   5304  1.1  christos 	    {
   5305  1.1  christos 	      notethat ("ProgCtrl: RAISE uimm4\n");
   5306  1.1  christos 	      (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[0].expr)));
   5307  1.1  christos 	    }
   5308  1.1  christos 	  else
   5309  1.1  christos 	    return yyerror ("Bad value for RAISE");
   5310  1.1  christos 	}
   5311  1.1  christos #line 5312 "config/bfin-parse.c"
   5312  1.1  christos     break;
   5313  1.1  christos 
   5314  1.1  christos   case 153: /* asm_1: EXCPT expr  */
   5315  1.1  christos #line 2701 "./config/bfin-parse.y"
   5316  1.1  christos         {
   5317  1.1  christos 		notethat ("ProgCtrl: EMUEXCPT\n");
   5318  1.1  christos 		(yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[0].expr)));
   5319  1.1  christos 	}
   5320  1.1  christos #line 5321 "config/bfin-parse.c"
   5321  1.1  christos     break;
   5322  1.1  christos 
   5323  1.1  christos   case 154: /* asm_1: TESTSET LPAREN REG RPAREN  */
   5324  1.1  christos #line 2707 "./config/bfin-parse.y"
   5325  1.1  christos         {
   5326  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5327  1.1  christos 	    {
   5328  1.1  christos 	      if ((yyvsp[-1].reg).regno == REG_SP || (yyvsp[-1].reg).regno == REG_FP)
   5329  1.1  christos 		return yyerror ("Bad register for TESTSET");
   5330  1.1  christos 
   5331  1.1  christos 	      notethat ("ProgCtrl: TESTSET (pregs )\n");
   5332  1.1  christos 	      (yyval.instr) = PROGCTRL (11, (yyvsp[-1].reg).regno & CODE_MASK);
   5333  1.1  christos 	    }
   5334  1.1  christos 	  else
   5335  1.1  christos 	    return yyerror ("Preg expected");
   5336  1.1  christos 	}
   5337  1.1  christos #line 5338 "config/bfin-parse.c"
   5338  1.1  christos     break;
   5339  1.1  christos 
   5340  1.1  christos   case 155: /* asm_1: JUMP expr  */
   5341  1.1  christos #line 2721 "./config/bfin-parse.y"
   5342  1.1  christos         {
   5343  1.1  christos 	  if (IS_PCREL12 ((yyvsp[0].expr)))
   5344  1.1  christos 	    {
   5345  1.1  christos 	      notethat ("UJUMP: JUMP pcrel12\n");
   5346  1.1  christos 	      (yyval.instr) = UJUMP ((yyvsp[0].expr));
   5347  1.1  christos 	    }
   5348  1.1  christos 	  else
   5349  1.1  christos 	    return yyerror ("Bad value for relative jump");
   5350  1.1  christos 	}
   5351  1.1  christos #line 5352 "config/bfin-parse.c"
   5352  1.1  christos     break;
   5353  1.1  christos 
   5354  1.1  christos   case 156: /* asm_1: JUMP_DOT_S expr  */
   5355  1.1  christos #line 2732 "./config/bfin-parse.y"
   5356  1.1  christos         {
   5357  1.1  christos 	  if (IS_PCREL12 ((yyvsp[0].expr)))
   5358  1.1  christos 	    {
   5359  1.1  christos 	      notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
   5360  1.1  christos 	      (yyval.instr) = UJUMP((yyvsp[0].expr));
   5361  1.1  christos 	    }
   5362  1.1  christos 	  else
   5363  1.1  christos 	    return yyerror ("Bad value for relative jump");
   5364  1.1  christos 	}
   5365  1.1  christos #line 5366 "config/bfin-parse.c"
   5366  1.1  christos     break;
   5367  1.1  christos 
   5368  1.1  christos   case 157: /* asm_1: JUMP_DOT_L expr  */
   5369  1.1  christos #line 2743 "./config/bfin-parse.y"
   5370  1.1  christos         {
   5371  1.1  christos 	  if (IS_PCREL24 ((yyvsp[0].expr)))
   5372  1.1  christos 	    {
   5373  1.1  christos 	      notethat ("CALLa: jump.l pcrel24\n");
   5374  1.1  christos 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 0);
   5375  1.1  christos 	    }
   5376  1.1  christos 	  else
   5377  1.1  christos 	    return yyerror ("Bad value for long jump");
   5378  1.1  christos 	}
   5379  1.1  christos #line 5380 "config/bfin-parse.c"
   5380  1.1  christos     break;
   5381  1.1  christos 
   5382  1.1  christos   case 158: /* asm_1: JUMP_DOT_L pltpc  */
   5383  1.1  christos #line 2754 "./config/bfin-parse.y"
   5384  1.1  christos         {
   5385  1.1  christos 	  if (IS_PCREL24 ((yyvsp[0].expr)))
   5386  1.1  christos 	    {
   5387  1.1  christos 	      notethat ("CALLa: jump.l pcrel24\n");
   5388  1.1  christos 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
   5389  1.1  christos 	    }
   5390  1.1  christos 	  else
   5391  1.1  christos 	    return yyerror ("Bad value for long jump");
   5392  1.1  christos 	}
   5393  1.1  christos #line 5394 "config/bfin-parse.c"
   5394  1.1  christos     break;
   5395  1.1  christos 
   5396  1.1  christos   case 159: /* asm_1: CALL expr  */
   5397  1.1  christos #line 2765 "./config/bfin-parse.y"
   5398  1.1  christos         {
   5399  1.1  christos 	  if (IS_PCREL24 ((yyvsp[0].expr)))
   5400  1.1  christos 	    {
   5401  1.1  christos 	      notethat ("CALLa: CALL pcrel25m2\n");
   5402  1.1  christos 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 1);
   5403  1.1  christos 	    }
   5404  1.1  christos 	  else
   5405  1.1  christos 	    return yyerror ("Bad call address");
   5406  1.1  christos 	}
   5407  1.1  christos #line 5408 "config/bfin-parse.c"
   5408  1.1  christos     break;
   5409  1.1  christos 
   5410  1.1  christos   case 160: /* asm_1: CALL pltpc  */
   5411  1.1  christos #line 2775 "./config/bfin-parse.y"
   5412  1.1  christos         {
   5413  1.1  christos 	  if (IS_PCREL24 ((yyvsp[0].expr)))
   5414  1.1  christos 	    {
   5415  1.1  christos 	      notethat ("CALLa: CALL pcrel25m2\n");
   5416  1.1  christos 	      (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
   5417  1.1  christos 	    }
   5418  1.1  christos 	  else
   5419  1.1  christos 	    return yyerror ("Bad call address");
   5420  1.1  christos 	}
   5421  1.1  christos #line 5422 "config/bfin-parse.c"
   5422  1.1  christos     break;
   5423  1.1  christos 
   5424  1.1  christos   case 161: /* asm_1: DIVQ LPAREN REG COMMA REG RPAREN  */
   5425  1.1  christos #line 2788 "./config/bfin-parse.y"
   5426  1.1  christos         {
   5427  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   5428  1.1  christos 	    (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 8);
   5429  1.1  christos 	  else
   5430  1.1  christos 	    return yyerror ("Bad registers for DIVQ");
   5431  1.1  christos 	}
   5432  1.1  christos #line 5433 "config/bfin-parse.c"
   5433  1.1  christos     break;
   5434  1.1  christos 
   5435  1.1  christos   case 162: /* asm_1: DIVS LPAREN REG COMMA REG RPAREN  */
   5436  1.1  christos #line 2796 "./config/bfin-parse.y"
   5437  1.1  christos         {
   5438  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
   5439  1.1  christos 	    (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 9);
   5440  1.1  christos 	  else
   5441  1.1  christos 	    return yyerror ("Bad registers for DIVS");
   5442  1.1  christos 	}
   5443  1.1  christos #line 5444 "config/bfin-parse.c"
   5444  1.1  christos     break;
   5445  1.1  christos 
   5446  1.1  christos   case 163: /* asm_1: REG ASSIGN MINUS REG vsmod  */
   5447  1.1  christos #line 2804 "./config/bfin-parse.y"
   5448  1.1  christos         {
   5449  1.1  christos 	  if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
   5450  1.1  christos 	    {
   5451  1.1  christos 	      if ((yyvsp[0].modcodes).r0 == 0 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 0)
   5452  1.1  christos 		{
   5453  1.1  christos 		  notethat ("ALU2op: dregs = - dregs\n");
   5454  1.1  christos 		  (yyval.instr) = ALU2OP (&(yyvsp[-4].reg), &(yyvsp[-1].reg), 14);
   5455  1.1  christos 		}
   5456  1.1  christos 	      else if ((yyvsp[0].modcodes).r0 == 1 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 3)
   5457  1.1  christos 		{
   5458  1.1  christos 		  notethat ("dsp32alu: dregs = - dregs (.)\n");
   5459  1.1  christos 		  (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
   5460  1.1  christos 		}
   5461  1.1  christos 	      else
   5462  1.1  christos 		{
   5463  1.1  christos 		  notethat ("dsp32alu: dregs = - dregs (.)\n");
   5464  1.1  christos 		  (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
   5465  1.1  christos 		}
   5466  1.1  christos 	    }
   5467  1.1  christos 	  else
   5468  1.1  christos 	    return yyerror ("Dregs expected");
   5469  1.1  christos 	}
   5470  1.1  christos #line 5471 "config/bfin-parse.c"
   5471  1.1  christos     break;
   5472  1.1  christos 
   5473  1.1  christos   case 164: /* asm_1: REG ASSIGN TILDA REG  */
   5474  1.1  christos #line 2828 "./config/bfin-parse.y"
   5475  1.1  christos         {
   5476  1.1  christos 	  if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
   5477  1.1  christos 	    {
   5478  1.1  christos 	      notethat ("ALU2op: dregs = ~dregs\n");
   5479  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[0].reg), 15);
   5480  1.1  christos 	    }
   5481  1.1  christos 	  else
   5482  1.1  christos 	    return yyerror ("Dregs expected");
   5483  1.1  christos 	}
   5484  1.1  christos #line 5485 "config/bfin-parse.c"
   5485  1.1  christos     break;
   5486  1.1  christos 
   5487  1.1  christos   case 165: /* asm_1: REG _GREATER_GREATER_ASSIGN REG  */
   5488  1.1  christos #line 2839 "./config/bfin-parse.y"
   5489  1.1  christos         {
   5490  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   5491  1.1  christos 	    {
   5492  1.1  christos 	      notethat ("ALU2op: dregs >>= dregs\n");
   5493  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1);
   5494  1.1  christos 	    }
   5495  1.1  christos 	  else
   5496  1.1  christos 	    return yyerror ("Dregs expected");
   5497  1.1  christos 	}
   5498  1.1  christos #line 5499 "config/bfin-parse.c"
   5499  1.1  christos     break;
   5500  1.1  christos 
   5501  1.1  christos   case 166: /* asm_1: REG _GREATER_GREATER_ASSIGN expr  */
   5502  1.1  christos #line 2850 "./config/bfin-parse.y"
   5503  1.1  christos         {
   5504  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
   5505  1.1  christos 	    {
   5506  1.1  christos 	      notethat ("LOGI2op: dregs >>= uimm5\n");
   5507  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 6);
   5508  1.1  christos 	    }
   5509  1.1  christos 	  else
   5510  1.1  christos 	    return yyerror ("Dregs expected or value error");
   5511  1.1  christos 	}
   5512  1.1  christos #line 5513 "config/bfin-parse.c"
   5513  1.1  christos     break;
   5514  1.1  christos 
   5515  1.1  christos   case 167: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN REG  */
   5516  1.1  christos #line 2861 "./config/bfin-parse.y"
   5517  1.1  christos         {
   5518  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   5519  1.1  christos 	    {
   5520  1.1  christos 	      notethat ("ALU2op: dregs >>>= dregs\n");
   5521  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
   5522  1.1  christos 	    }
   5523  1.1  christos 	  else
   5524  1.1  christos 	    return yyerror ("Dregs expected");
   5525  1.1  christos 	}
   5526  1.1  christos #line 5527 "config/bfin-parse.c"
   5527  1.1  christos     break;
   5528  1.1  christos 
   5529  1.1  christos   case 168: /* asm_1: REG _LESS_LESS_ASSIGN REG  */
   5530  1.1  christos #line 2872 "./config/bfin-parse.y"
   5531  1.1  christos         {
   5532  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   5533  1.1  christos 	    {
   5534  1.1  christos 	      notethat ("ALU2op: dregs <<= dregs\n");
   5535  1.1  christos 	      (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
   5536  1.1  christos 	    }
   5537  1.1  christos 	  else
   5538  1.1  christos 	    return yyerror ("Dregs expected");
   5539  1.1  christos 	}
   5540  1.1  christos #line 5541 "config/bfin-parse.c"
   5541  1.1  christos     break;
   5542  1.1  christos 
   5543  1.1  christos   case 169: /* asm_1: REG _LESS_LESS_ASSIGN expr  */
   5544  1.1  christos #line 2883 "./config/bfin-parse.y"
   5545  1.1  christos         {
   5546  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
   5547  1.1  christos 	    {
   5548  1.1  christos 	      notethat ("LOGI2op: dregs <<= uimm5\n");
   5549  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 7);
   5550  1.1  christos 	    }
   5551  1.1  christos 	  else
   5552  1.1  christos 	    return yyerror ("Dregs expected or const value error");
   5553  1.1  christos 	}
   5554  1.1  christos #line 5555 "config/bfin-parse.c"
   5555  1.1  christos     break;
   5556  1.1  christos 
   5557  1.1  christos   case 170: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN expr  */
   5558  1.1  christos #line 2895 "./config/bfin-parse.y"
   5559  1.1  christos         {
   5560  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
   5561  1.1  christos 	    {
   5562  1.1  christos 	      notethat ("LOGI2op: dregs >>>= uimm5\n");
   5563  1.1  christos 	      (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 5);
   5564  1.1  christos 	    }
   5565  1.1  christos 	  else
   5566  1.1  christos 	    return yyerror ("Dregs expected");
   5567  1.1  christos 	}
   5568  1.1  christos #line 5569 "config/bfin-parse.c"
   5569  1.1  christos     break;
   5570  1.1  christos 
   5571  1.1  christos   case 171: /* asm_1: FLUSH LBRACK REG RBRACK  */
   5572  1.1  christos #line 2908 "./config/bfin-parse.y"
   5573  1.1  christos         {
   5574  1.1  christos 	  notethat ("CaCTRL: FLUSH [ pregs ]\n");
   5575  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5576  1.1  christos 	    (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 2);
   5577  1.1  christos 	  else
   5578  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5579  1.1  christos 	}
   5580  1.1  christos #line 5581 "config/bfin-parse.c"
   5581  1.1  christos     break;
   5582  1.1  christos 
   5583  1.1  christos   case 172: /* asm_1: FLUSH reg_with_postinc  */
   5584  1.1  christos #line 2917 "./config/bfin-parse.y"
   5585  1.1  christos         {
   5586  1.1  christos 	  if (IS_PREG ((yyvsp[0].reg)))
   5587  1.1  christos 	    {
   5588  1.1  christos 	      notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
   5589  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 2);
   5590  1.1  christos 	    }
   5591  1.1  christos 	  else
   5592  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5593  1.1  christos 	}
   5594  1.1  christos #line 5595 "config/bfin-parse.c"
   5595  1.1  christos     break;
   5596  1.1  christos 
   5597  1.1  christos   case 173: /* asm_1: FLUSHINV LBRACK REG RBRACK  */
   5598  1.1  christos #line 2928 "./config/bfin-parse.y"
   5599  1.1  christos         {
   5600  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5601  1.1  christos 	    {
   5602  1.1  christos 	      notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
   5603  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 1);
   5604  1.1  christos 	    }
   5605  1.1  christos 	  else
   5606  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5607  1.1  christos 	}
   5608  1.1  christos #line 5609 "config/bfin-parse.c"
   5609  1.1  christos     break;
   5610  1.1  christos 
   5611  1.1  christos   case 174: /* asm_1: FLUSHINV reg_with_postinc  */
   5612  1.1  christos #line 2939 "./config/bfin-parse.y"
   5613  1.1  christos         {
   5614  1.1  christos 	  if (IS_PREG ((yyvsp[0].reg)))
   5615  1.1  christos 	    {
   5616  1.1  christos 	      notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
   5617  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 1);
   5618  1.1  christos 	    }
   5619  1.1  christos 	  else
   5620  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5621  1.1  christos 	}
   5622  1.1  christos #line 5623 "config/bfin-parse.c"
   5623  1.1  christos     break;
   5624  1.1  christos 
   5625  1.1  christos   case 175: /* asm_1: IFLUSH LBRACK REG RBRACK  */
   5626  1.1  christos #line 2951 "./config/bfin-parse.y"
   5627  1.1  christos         {
   5628  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5629  1.1  christos 	    {
   5630  1.1  christos 	      notethat ("CaCTRL: IFLUSH [ pregs ]\n");
   5631  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 3);
   5632  1.1  christos 	    }
   5633  1.1  christos 	  else
   5634  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5635  1.1  christos 	}
   5636  1.1  christos #line 5637 "config/bfin-parse.c"
   5637  1.1  christos     break;
   5638  1.1  christos 
   5639  1.1  christos   case 176: /* asm_1: IFLUSH reg_with_postinc  */
   5640  1.1  christos #line 2962 "./config/bfin-parse.y"
   5641  1.1  christos         {
   5642  1.1  christos 	  if (IS_PREG ((yyvsp[0].reg)))
   5643  1.1  christos 	    {
   5644  1.1  christos 	      notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
   5645  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 3);
   5646  1.1  christos 	    }
   5647  1.1  christos 	  else
   5648  1.1  christos 	    return yyerror ("Bad register(s) for FLUSH");
   5649  1.1  christos 	}
   5650  1.1  christos #line 5651 "config/bfin-parse.c"
   5651  1.1  christos     break;
   5652  1.1  christos 
   5653  1.1  christos   case 177: /* asm_1: PREFETCH LBRACK REG RBRACK  */
   5654  1.1  christos #line 2973 "./config/bfin-parse.y"
   5655  1.1  christos         {
   5656  1.1  christos 	  if (IS_PREG ((yyvsp[-1].reg)))
   5657  1.1  christos 	    {
   5658  1.1  christos 	      notethat ("CaCTRL: PREFETCH [ pregs ]\n");
   5659  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 0);
   5660  1.1  christos 	    }
   5661  1.1  christos 	  else
   5662  1.1  christos 	    return yyerror ("Bad register(s) for PREFETCH");
   5663  1.1  christos 	}
   5664  1.1  christos #line 5665 "config/bfin-parse.c"
   5665  1.1  christos     break;
   5666  1.1  christos 
   5667  1.1  christos   case 178: /* asm_1: PREFETCH reg_with_postinc  */
   5668  1.1  christos #line 2984 "./config/bfin-parse.y"
   5669  1.1  christos         {
   5670  1.1  christos 	  if (IS_PREG ((yyvsp[0].reg)))
   5671  1.1  christos 	    {
   5672  1.1  christos 	      notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
   5673  1.1  christos 	      (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 0);
   5674  1.1  christos 	    }
   5675  1.1  christos 	  else
   5676  1.1  christos 	    return yyerror ("Bad register(s) for PREFETCH");
   5677  1.1  christos 	}
   5678  1.1  christos #line 5679 "config/bfin-parse.c"
   5679  1.1  christos     break;
   5680  1.1  christos 
   5681  1.1  christos   case 179: /* asm_1: B LBRACK REG post_op RBRACK ASSIGN REG  */
   5682  1.1  christos #line 2998 "./config/bfin-parse.y"
   5683  1.1  christos         {
   5684  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5685  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5686  1.1  christos 	  if (!IS_PREG ((yyvsp[-4].reg)))
   5687  1.1  christos 	    return yyerror ("Preg expected in address");
   5688  1.1  christos 
   5689  1.1  christos 	  notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
   5690  1.1  christos 	  (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 2, 0, 1);
   5691  1.1  christos 	}
   5692  1.1  christos #line 5693 "config/bfin-parse.c"
   5693  1.1  christos     break;
   5694  1.1  christos 
   5695  1.1  christos   case 180: /* asm_1: B LBRACK REG plus_minus expr RBRACK ASSIGN REG  */
   5696  1.1  christos #line 3010 "./config/bfin-parse.y"
   5697  1.1  christos         {
   5698  1.1  christos 	  Expr_Node *tmp = (yyvsp[-3].expr);
   5699  1.1  christos 
   5700  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5701  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5702  1.1  christos 	  if (!IS_PREG ((yyvsp[-5].reg)))
   5703  1.1  christos 	    return yyerror ("Preg expected in address");
   5704  1.1  christos 
   5705  1.1  christos 	  if (IS_RELOC ((yyvsp[-3].expr)))
   5706  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   5707  1.1  christos 
   5708  1.1  christos 	  if ((yyvsp[-4].r0).r0)
   5709  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   5710  1.1  christos 
   5711  1.1  christos 	  if (in_range_p (tmp, -32768, 32767, 0))
   5712  1.1  christos 	    {
   5713  1.1  christos 	      notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
   5714  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 2, 0, (yyvsp[-3].expr));
   5715  1.1  christos 	    }
   5716  1.1  christos 	  else
   5717  1.1  christos 	    return yyerror ("Displacement out of range");
   5718  1.1  christos 	}
   5719  1.1  christos #line 5720 "config/bfin-parse.c"
   5720  1.1  christos     break;
   5721  1.1  christos 
   5722  1.1  christos   case 181: /* asm_1: W LBRACK REG plus_minus expr RBRACK ASSIGN REG  */
   5723  1.1  christos #line 3036 "./config/bfin-parse.y"
   5724  1.1  christos         {
   5725  1.1  christos 	  Expr_Node *tmp = (yyvsp[-3].expr);
   5726  1.1  christos 
   5727  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5728  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5729  1.1  christos 	  if (!IS_PREG ((yyvsp[-5].reg)))
   5730  1.1  christos 	    return yyerror ("Preg expected in address");
   5731  1.1  christos 
   5732  1.1  christos 	  if ((yyvsp[-4].r0).r0)
   5733  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   5734  1.1  christos 
   5735  1.1  christos 	  if (IS_RELOC ((yyvsp[-3].expr)))
   5736  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   5737  1.1  christos 
   5738  1.1  christos 	  if (in_range_p (tmp, 0, 30, 1))
   5739  1.1  christos 	    {
   5740  1.1  christos 	      notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
   5741  1.1  christos 	      (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, 1);
   5742  1.1  christos 	    }
   5743  1.1  christos 	  else if (in_range_p (tmp, -65536, 65535, 1))
   5744  1.1  christos 	    {
   5745  1.1  christos 	      notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
   5746  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 1, 0, tmp);
   5747  1.1  christos 	    }
   5748  1.1  christos 	  else
   5749  1.1  christos 	    return yyerror ("Displacement out of range");
   5750  1.1  christos 	}
   5751  1.1  christos #line 5752 "config/bfin-parse.c"
   5752  1.1  christos     break;
   5753  1.1  christos 
   5754  1.1  christos   case 182: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN REG  */
   5755  1.1  christos #line 3066 "./config/bfin-parse.y"
   5756  1.1  christos         {
   5757  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5758  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5759  1.1  christos 	  if (!IS_PREG ((yyvsp[-4].reg)))
   5760  1.1  christos 	    return yyerror ("Preg expected in address");
   5761  1.1  christos 
   5762  1.1  christos 	  notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
   5763  1.1  christos 	  (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1, 0, 1);
   5764  1.1  christos 	}
   5765  1.1  christos #line 5766 "config/bfin-parse.c"
   5766  1.1  christos     break;
   5767  1.1  christos 
   5768  1.1  christos   case 183: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN HALF_REG  */
   5769  1.1  christos #line 3077 "./config/bfin-parse.y"
   5770  1.1  christos         {
   5771  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5772  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5773  1.1  christos 	  if ((yyvsp[-3].modcodes).x0 == 2)
   5774  1.1  christos 	    {
   5775  1.1  christos 	      if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
   5776  1.1  christos 		return yyerror ("Ireg or Preg expected in address");
   5777  1.1  christos 	    }
   5778  1.1  christos 	  else if (!IS_IREG ((yyvsp[-4].reg)))
   5779  1.1  christos 	    return yyerror ("Ireg expected in address");
   5780  1.1  christos 
   5781  1.1  christos 	  if (IS_IREG ((yyvsp[-4].reg)))
   5782  1.1  christos 	    {
   5783  1.1  christos 	      notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
   5784  1.1  christos 	      (yyval.instr) = DSPLDST (&(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
   5785  1.1  christos 	    }
   5786  1.1  christos 	  else
   5787  1.1  christos 	    {
   5788  1.1  christos 	      notethat ("LDSTpmod: W [ pregs ] = dregs_half\n");
   5789  1.1  christos 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[0].reg), &(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
   5790  1.1  christos 	    }
   5791  1.1  christos 	}
   5792  1.1  christos #line 5793 "config/bfin-parse.c"
   5793  1.1  christos     break;
   5794  1.1  christos 
   5795  1.1  christos   case 184: /* asm_1: LBRACK REG plus_minus expr RBRACK ASSIGN REG  */
   5796  1.1  christos #line 3102 "./config/bfin-parse.y"
   5797  1.1  christos         {
   5798  1.1  christos 	  Expr_Node *tmp = (yyvsp[-3].expr);
   5799  1.1  christos 	  int ispreg = IS_PREG ((yyvsp[0].reg));
   5800  1.1  christos 
   5801  1.1  christos 	  if (!IS_PREG ((yyvsp[-5].reg)))
   5802  1.1  christos 	    return yyerror ("Preg expected in address");
   5803  1.1  christos 
   5804  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)) && !ispreg)
   5805  1.1  christos 	    return yyerror ("Preg expected for source operand");
   5806  1.1  christos 
   5807  1.1  christos 	  if ((yyvsp[-4].r0).r0)
   5808  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   5809  1.1  christos 
   5810  1.1  christos 	  if (IS_RELOC ((yyvsp[-3].expr)))
   5811  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   5812  1.1  christos 
   5813  1.1  christos 	  if (in_range_p (tmp, 0, 63, 3))
   5814  1.1  christos 	    {
   5815  1.1  christos 	      notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
   5816  1.1  christos 	      (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, ispreg ? 3 : 0);
   5817  1.1  christos 	    }
   5818  1.1  christos 	  else if ((yyvsp[-5].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
   5819  1.1  christos 	    {
   5820  1.1  christos 	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
   5821  1.1  christos 	      tmp = unary (Expr_Op_Type_NEG, tmp);
   5822  1.1  christos 	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[0].reg), 1);
   5823  1.1  christos 	    }
   5824  1.1  christos 	  else if (in_range_p (tmp, -131072, 131071, 3))
   5825  1.1  christos 	    {
   5826  1.1  christos 	      notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
   5827  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 0, ispreg ? 1 : 0, tmp);
   5828  1.1  christos 	    }
   5829  1.1  christos 	  else
   5830  1.1  christos 	    return yyerror ("Displacement out of range");
   5831  1.1  christos 	}
   5832  1.1  christos #line 5833 "config/bfin-parse.c"
   5833  1.1  christos     break;
   5834  1.1  christos 
   5835  1.1  christos   case 185: /* asm_1: REG ASSIGN W LBRACK REG plus_minus expr RBRACK xpmod  */
   5836  1.1  christos #line 3139 "./config/bfin-parse.y"
   5837  1.1  christos         {
   5838  1.1  christos 	  Expr_Node *tmp = (yyvsp[-2].expr);
   5839  1.1  christos 	  if (!IS_DREG ((yyvsp[-8].reg)))
   5840  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   5841  1.1  christos 	  if (!IS_PREG ((yyvsp[-4].reg)))
   5842  1.1  christos 	    return yyerror ("Preg expected in address");
   5843  1.1  christos 
   5844  1.1  christos 	  if ((yyvsp[-3].r0).r0)
   5845  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   5846  1.1  christos 
   5847  1.1  christos 	  if (IS_RELOC ((yyvsp[-2].expr)))
   5848  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   5849  1.1  christos 
   5850  1.1  christos 	  if (in_range_p (tmp, 0, 30, 1))
   5851  1.1  christos 	    {
   5852  1.1  christos 	      notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n");
   5853  1.1  christos 	      (yyval.instr) = LDSTII (&(yyvsp[-4].reg), &(yyvsp[-8].reg), tmp, 0, 1 << (yyvsp[0].r0).r0);
   5854  1.1  christos 	    }
   5855  1.1  christos 	  else if (in_range_p (tmp, -65536, 65535, 1))
   5856  1.1  christos 	    {
   5857  1.1  christos 	      notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
   5858  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 1, (yyvsp[0].r0).r0, tmp);
   5859  1.1  christos 	    }
   5860  1.1  christos 	  else
   5861  1.1  christos 	    return yyerror ("Displacement out of range");
   5862  1.1  christos 	}
   5863  1.1  christos #line 5864 "config/bfin-parse.c"
   5864  1.1  christos     break;
   5865  1.1  christos 
   5866  1.1  christos   case 186: /* asm_1: HALF_REG ASSIGN W LBRACK REG post_op RBRACK  */
   5867  1.1  christos #line 3167 "./config/bfin-parse.y"
   5868  1.1  christos         {
   5869  1.1  christos 	  if (!IS_DREG ((yyvsp[-6].reg)))
   5870  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5871  1.1  christos 	  if ((yyvsp[-1].modcodes).x0 == 2)
   5872  1.1  christos 	    {
   5873  1.1  christos 	      if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
   5874  1.1  christos 		return yyerror ("Ireg or Preg expected in address");
   5875  1.1  christos 	    }
   5876  1.1  christos 	  else if (!IS_IREG ((yyvsp[-2].reg)))
   5877  1.1  christos 	    return yyerror ("Ireg expected in address");
   5878  1.1  christos 
   5879  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)))
   5880  1.1  christos 	    {
   5881  1.1  christos 	      notethat ("dspLDST: dregs_half = W [ iregs <post_op> ]\n");
   5882  1.1  christos 	      (yyval.instr) = DSPLDST(&(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), &(yyvsp[-6].reg), (yyvsp[-1].modcodes).x0, 0);
   5883  1.1  christos 	    }
   5884  1.1  christos 	  else
   5885  1.1  christos 	    {
   5886  1.1  christos 	      notethat ("LDSTpmod: dregs_half = W [ pregs <post_op> ]\n");
   5887  1.1  christos 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-2].reg), &(yyvsp[-6].reg), &(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), 0);
   5888  1.1  christos 	    }
   5889  1.1  christos 	}
   5890  1.1  christos #line 5891 "config/bfin-parse.c"
   5891  1.1  christos     break;
   5892  1.1  christos 
   5893  1.1  christos   case 187: /* asm_1: REG ASSIGN W LBRACK REG post_op RBRACK xpmod  */
   5894  1.1  christos #line 3192 "./config/bfin-parse.y"
   5895  1.1  christos         {
   5896  1.1  christos 	  if (!IS_DREG ((yyvsp[-7].reg)))
   5897  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   5898  1.1  christos 	  if (!IS_PREG ((yyvsp[-3].reg)))
   5899  1.1  christos 	    return yyerror ("Preg expected in address");
   5900  1.1  christos 
   5901  1.1  christos 	  notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
   5902  1.1  christos 	  (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 1, (yyvsp[0].r0).r0, 0);
   5903  1.1  christos 	}
   5904  1.1  christos #line 5905 "config/bfin-parse.c"
   5905  1.1  christos     break;
   5906  1.1  christos 
   5907  1.1  christos   case 188: /* asm_1: REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK xpmod  */
   5908  1.1  christos #line 3203 "./config/bfin-parse.y"
   5909  1.1  christos         {
   5910  1.1  christos 	  if (!IS_DREG ((yyvsp[-8].reg)))
   5911  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   5912  1.1  christos 	  if (!IS_PREG ((yyvsp[-4].reg)) || !IS_PREG ((yyvsp[-2].reg)))
   5913  1.1  christos 	    return yyerror ("Preg expected in address");
   5914  1.1  christos 
   5915  1.1  christos 	  notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
   5916  1.1  christos 	  (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[-8].reg), &(yyvsp[-2].reg), 3, (yyvsp[0].r0).r0);
   5917  1.1  christos 	}
   5918  1.1  christos #line 5919 "config/bfin-parse.c"
   5919  1.1  christos     break;
   5920  1.1  christos 
   5921  1.1  christos   case 189: /* asm_1: HALF_REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK  */
   5922  1.1  christos #line 3214 "./config/bfin-parse.y"
   5923  1.1  christos         {
   5924  1.1  christos 	  if (!IS_DREG ((yyvsp[-7].reg)))
   5925  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   5926  1.1  christos 	  if (!IS_PREG ((yyvsp[-3].reg)) || !IS_PREG ((yyvsp[-1].reg)))
   5927  1.1  christos 	    return yyerror ("Preg expected in address");
   5928  1.1  christos 
   5929  1.1  christos 	  notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
   5930  1.1  christos 	  (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-7].reg), &(yyvsp[-1].reg), 1 + IS_H ((yyvsp[-7].reg)), 0);
   5931  1.1  christos 	}
   5932  1.1  christos #line 5933 "config/bfin-parse.c"
   5933  1.1  christos     break;
   5934  1.1  christos 
   5935  1.1  christos   case 190: /* asm_1: LBRACK REG post_op RBRACK ASSIGN REG  */
   5936  1.1  christos #line 3225 "./config/bfin-parse.y"
   5937  1.1  christos         {
   5938  1.1  christos 	  if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
   5939  1.1  christos 	    return yyerror ("Ireg or Preg expected in address");
   5940  1.1  christos 	  else if (IS_IREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)))
   5941  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5942  1.1  christos 	  else if (IS_PREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)) && !IS_PREG ((yyvsp[0].reg)))
   5943  1.1  christos 	    return yyerror ("Dreg or Preg expected for source operand");
   5944  1.1  christos 
   5945  1.1  christos 	  if (IS_IREG ((yyvsp[-4].reg)))
   5946  1.1  christos 	    {
   5947  1.1  christos 	      notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
   5948  1.1  christos 	      (yyval.instr) = DSPLDST(&(yyvsp[-4].reg), 0, &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
   5949  1.1  christos 	    }
   5950  1.1  christos 	  else if (IS_DREG ((yyvsp[0].reg)))
   5951  1.1  christos 	    {
   5952  1.1  christos 	      notethat ("LDST: [ pregs <post_op> ] = dregs\n");
   5953  1.1  christos 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 0, 1);
   5954  1.1  christos 	    }
   5955  1.1  christos 	  else
   5956  1.1  christos 	    {
   5957  1.1  christos 	      notethat ("LDST: [ pregs <post_op> ] = pregs\n");
   5958  1.1  christos 	      (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 1, 1);
   5959  1.1  christos 	    }
   5960  1.1  christos 	}
   5961  1.1  christos #line 5962 "config/bfin-parse.c"
   5962  1.1  christos     break;
   5963  1.1  christos 
   5964  1.1  christos   case 191: /* asm_1: LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN REG  */
   5965  1.1  christos #line 3251 "./config/bfin-parse.y"
   5966  1.1  christos         {
   5967  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5968  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5969  1.1  christos 
   5970  1.1  christos 	  if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
   5971  1.1  christos 	    {
   5972  1.1  christos 	      notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
   5973  1.1  christos 	      (yyval.instr) = DSPLDST(&(yyvsp[-5].reg), (yyvsp[-3].reg).regno & CODE_MASK, &(yyvsp[0].reg), 3, 1);
   5974  1.1  christos 	    }
   5975  1.1  christos 	  else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
   5976  1.1  christos 	    {
   5977  1.1  christos 	      notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
   5978  1.1  christos 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 0, 1);
   5979  1.1  christos 	    }
   5980  1.1  christos 	  else
   5981  1.1  christos 	    return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
   5982  1.1  christos 	}
   5983  1.1  christos #line 5984 "config/bfin-parse.c"
   5984  1.1  christos     break;
   5985  1.1  christos 
   5986  1.1  christos   case 192: /* asm_1: W LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN HALF_REG  */
   5987  1.1  christos #line 3270 "./config/bfin-parse.y"
   5988  1.1  christos         {
   5989  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   5990  1.1  christos 	    return yyerror ("Dreg expected for source operand");
   5991  1.1  christos 
   5992  1.1  christos 	  if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
   5993  1.1  christos 	    {
   5994  1.1  christos 	      notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
   5995  1.1  christos 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
   5996  1.1  christos 	    }
   5997  1.1  christos 	  else
   5998  1.1  christos 	    return yyerror ("Preg ++ Preg expected in address");
   5999  1.1  christos 	}
   6000  1.1  christos #line 6001 "config/bfin-parse.c"
   6001  1.1  christos     break;
   6002  1.1  christos 
   6003  1.1  christos   case 193: /* asm_1: REG ASSIGN B LBRACK REG plus_minus expr RBRACK xpmod  */
   6004  1.1  christos #line 3284 "./config/bfin-parse.y"
   6005  1.1  christos         {
   6006  1.1  christos 	  Expr_Node *tmp = (yyvsp[-2].expr);
   6007  1.1  christos 	  if (!IS_DREG ((yyvsp[-8].reg)))
   6008  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   6009  1.1  christos 	  if (!IS_PREG ((yyvsp[-4].reg)))
   6010  1.1  christos 	    return yyerror ("Preg expected in address");
   6011  1.1  christos 
   6012  1.1  christos 	  if ((yyvsp[-3].r0).r0)
   6013  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   6014  1.1  christos 
   6015  1.1  christos 	  if (IS_RELOC ((yyvsp[-2].expr)))
   6016  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   6017  1.1  christos 
   6018  1.1  christos 	  if (in_range_p (tmp, -32768, 32767, 0))
   6019  1.1  christos 	    {
   6020  1.1  christos 	      notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
   6021  1.1  christos 		       (yyvsp[0].r0).r0 ? 'X' : 'Z');
   6022  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 2, (yyvsp[0].r0).r0, tmp);
   6023  1.1  christos 	    }
   6024  1.1  christos 	  else
   6025  1.1  christos 	    return yyerror ("Displacement out of range");
   6026  1.1  christos 	}
   6027  1.1  christos #line 6028 "config/bfin-parse.c"
   6028  1.1  christos     break;
   6029  1.1  christos 
   6030  1.1  christos   case 194: /* asm_1: REG ASSIGN B LBRACK REG post_op RBRACK xpmod  */
   6031  1.1  christos #line 3308 "./config/bfin-parse.y"
   6032  1.1  christos         {
   6033  1.1  christos 	  if (!IS_DREG ((yyvsp[-7].reg)))
   6034  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   6035  1.1  christos 	  if (!IS_PREG ((yyvsp[-3].reg)))
   6036  1.1  christos 	    return yyerror ("Preg expected in address");
   6037  1.1  christos 
   6038  1.1  christos 	  notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
   6039  1.1  christos 		    (yyvsp[0].r0).r0 ? 'X' : 'Z');
   6040  1.1  christos 	  (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 2, (yyvsp[0].r0).r0, 0);
   6041  1.1  christos 	}
   6042  1.1  christos #line 6043 "config/bfin-parse.c"
   6043  1.1  christos     break;
   6044  1.1  christos 
   6045  1.1  christos   case 195: /* asm_1: REG ASSIGN LBRACK REG _PLUS_PLUS REG RBRACK  */
   6046  1.1  christos #line 3320 "./config/bfin-parse.y"
   6047  1.1  christos         {
   6048  1.1  christos 	  if (!IS_DREG ((yyvsp[-6].reg)))
   6049  1.1  christos 	    return yyerror ("Dreg expected for destination operand");
   6050  1.1  christos 
   6051  1.1  christos 	  if (IS_IREG ((yyvsp[-3].reg)) && IS_MREG ((yyvsp[-1].reg)))
   6052  1.1  christos 	    {
   6053  1.1  christos 	      notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
   6054  1.1  christos 	      (yyval.instr) = DSPLDST(&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, &(yyvsp[-6].reg), 3, 0);
   6055  1.1  christos 	    }
   6056  1.1  christos 	  else if (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
   6057  1.1  christos 	    {
   6058  1.1  christos 	      notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
   6059  1.1  christos 	      (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-6].reg), &(yyvsp[-1].reg), 0, 0);
   6060  1.1  christos 	    }
   6061  1.1  christos 	  else
   6062  1.1  christos 	    return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
   6063  1.1  christos 	}
   6064  1.1  christos #line 6065 "config/bfin-parse.c"
   6065  1.1  christos     break;
   6066  1.1  christos 
   6067  1.1  christos   case 196: /* asm_1: REG ASSIGN LBRACK REG plus_minus got_or_expr RBRACK  */
   6068  1.1  christos #line 3339 "./config/bfin-parse.y"
   6069  1.1  christos         {
   6070  1.1  christos 	  Expr_Node *tmp = (yyvsp[-1].expr);
   6071  1.1  christos 	  int ispreg = IS_PREG ((yyvsp[-6].reg));
   6072  1.1  christos 	  int isgot = IS_RELOC((yyvsp[-1].expr));
   6073  1.1  christos 
   6074  1.1  christos 	  if (!IS_PREG ((yyvsp[-3].reg)))
   6075  1.1  christos 	    return yyerror ("Preg expected in address");
   6076  1.1  christos 
   6077  1.1  christos 	  if (!IS_DREG ((yyvsp[-6].reg)) && !ispreg)
   6078  1.1  christos 	    return yyerror ("Dreg or Preg expected for destination operand");
   6079  1.1  christos 
   6080  1.1  christos 	  if (tmp->type == Expr_Node_Reloc
   6081  1.1  christos 	      && strcmp (tmp->value.s_value,
   6082  1.1  christos 			 "_current_shared_library_p5_offset_") != 0)
   6083  1.1  christos 	    return yyerror ("Plain symbol used as offset");
   6084  1.1  christos 
   6085  1.1  christos 	  if ((yyvsp[-2].r0).r0)
   6086  1.1  christos 	    tmp = unary (Expr_Op_Type_NEG, tmp);
   6087  1.1  christos 
   6088  1.1  christos 	  if (isgot)
   6089  1.1  christos 	    {
   6090  1.1  christos 	      notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
   6091  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
   6092  1.1  christos 	    }
   6093  1.1  christos 	  else if (in_range_p (tmp, 0, 63, 3))
   6094  1.1  christos 	    {
   6095  1.1  christos 	      notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
   6096  1.1  christos 	      (yyval.instr) = LDSTII (&(yyvsp[-3].reg), &(yyvsp[-6].reg), tmp, 0, ispreg ? 3 : 0);
   6097  1.1  christos 	    }
   6098  1.1  christos 	  else if ((yyvsp[-3].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
   6099  1.1  christos 	    {
   6100  1.1  christos 	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
   6101  1.1  christos 	      tmp = unary (Expr_Op_Type_NEG, tmp);
   6102  1.1  christos 	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[-6].reg), 0);
   6103  1.1  christos 	    }
   6104  1.1  christos 	  else if (in_range_p (tmp, -131072, 131071, 3))
   6105  1.1  christos 	    {
   6106  1.1  christos 	      notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
   6107  1.1  christos 	      (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
   6108  1.1  christos 
   6109  1.1  christos 	    }
   6110  1.1  christos 	  else
   6111  1.1  christos 	    return yyerror ("Displacement out of range");
   6112  1.1  christos 	}
   6113  1.1  christos #line 6114 "config/bfin-parse.c"
   6114  1.1  christos     break;
   6115  1.1  christos 
   6116  1.1  christos   case 197: /* asm_1: REG ASSIGN LBRACK REG post_op RBRACK  */
   6117  1.1  christos #line 3385 "./config/bfin-parse.y"
   6118  1.1  christos         {
   6119  1.1  christos 	  if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
   6120  1.1  christos 	    return yyerror ("Ireg or Preg expected in address");
   6121  1.1  christos 	  else if (IS_IREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)))
   6122  1.1  christos 	    return yyerror ("Dreg expected in destination operand");
   6123  1.1  christos 	  else if (IS_PREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)) && !IS_PREG ((yyvsp[-5].reg))
   6124  1.1  christos 		   && ((yyvsp[-2].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[-5].reg)) || (yyvsp[-1].modcodes).x0 != 0))
   6125  1.1  christos 	    return yyerror ("Dreg or Preg expected in destination operand");
   6126  1.1  christos 
   6127  1.1  christos 	  if (IS_IREG ((yyvsp[-2].reg)))
   6128  1.1  christos 	    {
   6129  1.1  christos 	      notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
   6130  1.1  christos 	      (yyval.instr) = DSPLDST (&(yyvsp[-2].reg), 0, &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0);
   6131  1.1  christos 	    }
   6132  1.1  christos 	  else if (IS_DREG ((yyvsp[-5].reg)))
   6133  1.1  christos 	    {
   6134  1.1  christos 	      notethat ("LDST: dregs = [ pregs <post_op> ]\n");
   6135  1.1  christos 	      (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 0, 0);
   6136  1.1  christos 	    }
   6137  1.1  christos 	  else if (IS_PREG ((yyvsp[-5].reg)))
   6138  1.1  christos 	    {
   6139  1.1  christos 	      if (REG_SAME ((yyvsp[-5].reg), (yyvsp[-2].reg)) && (yyvsp[-1].modcodes).x0 != 2)
   6140  1.1  christos 		return yyerror ("Pregs can't be same");
   6141  1.1  christos 
   6142  1.1  christos 	      notethat ("LDST: pregs = [ pregs <post_op> ]\n");
   6143  1.1  christos 	      (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 1, 0);
   6144  1.1  christos 	    }
   6145  1.1  christos 	  else
   6146  1.1  christos 	    {
   6147  1.1  christos 	      notethat ("PushPopReg: allregs = [ SP ++ ]\n");
   6148  1.1  christos 	      (yyval.instr) = PUSHPOPREG (&(yyvsp[-5].reg), 0);
   6149  1.1  christos 	    }
   6150  1.1  christos 	}
   6151  1.1  christos #line 6152 "config/bfin-parse.c"
   6152  1.1  christos     break;
   6153  1.1  christos 
   6154  1.1  christos   case 198: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr COMMA REG COLON expr RPAREN  */
   6155  1.1  christos #line 3422 "./config/bfin-parse.y"
   6156  1.1  christos         {
   6157  1.1  christos 	  if ((yyvsp[-10].reg).regno != REG_SP)
   6158  1.1  christos 	    yyerror ("Stack Pointer expected");
   6159  1.1  christos 	  if ((yyvsp[-7].reg).regno == REG_R7
   6160  1.1  christos 	      && IN_RANGE ((yyvsp[-5].expr), 0, 7)
   6161  1.1  christos 	      && (yyvsp[-3].reg).regno == REG_P5
   6162  1.1  christos 	      && IN_RANGE ((yyvsp[-1].expr), 0, 5))
   6163  1.1  christos 	    {
   6164  1.1  christos 	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
   6165  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-5].expr)), imm5 ((yyvsp[-1].expr)), 1, 1, 1);
   6166  1.1  christos 	    }
   6167  1.1  christos 	  else
   6168  1.1  christos 	    return yyerror ("Bad register for PushPopMultiple");
   6169  1.1  christos 	}
   6170  1.1  christos #line 6171 "config/bfin-parse.c"
   6171  1.1  christos     break;
   6172  1.1  christos 
   6173  1.1  christos   case 199: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr RPAREN  */
   6174  1.1  christos #line 3438 "./config/bfin-parse.y"
   6175  1.1  christos         {
   6176  1.1  christos 	  if ((yyvsp[-6].reg).regno != REG_SP)
   6177  1.1  christos 	    yyerror ("Stack Pointer expected");
   6178  1.1  christos 
   6179  1.1  christos 	  if ((yyvsp[-3].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-1].expr), 0, 7))
   6180  1.1  christos 	    {
   6181  1.1  christos 	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
   6182  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-1].expr)), 0, 1, 0, 1);
   6183  1.1  christos 	    }
   6184  1.1  christos 	  else if ((yyvsp[-3].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-1].expr), 0, 6))
   6185  1.1  christos 	    {
   6186  1.1  christos 	      notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
   6187  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-1].expr)), 0, 1, 1);
   6188  1.1  christos 	    }
   6189  1.1  christos 	  else
   6190  1.1  christos 	    return yyerror ("Bad register for PushPopMultiple");
   6191  1.1  christos 	}
   6192  1.1  christos #line 6193 "config/bfin-parse.c"
   6193  1.1  christos     break;
   6194  1.1  christos 
   6195  1.1  christos   case 200: /* asm_1: LPAREN REG COLON expr COMMA REG COLON expr RPAREN ASSIGN reg_with_postinc  */
   6196  1.1  christos #line 3457 "./config/bfin-parse.y"
   6197  1.1  christos         {
   6198  1.1  christos 	  if ((yyvsp[0].reg).regno != REG_SP)
   6199  1.1  christos 	    yyerror ("Stack Pointer expected");
   6200  1.1  christos 	  if ((yyvsp[-9].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[-7].expr), 0, 7))
   6201  1.1  christos 	      && (yyvsp[-5].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[-3].expr), 0, 6)))
   6202  1.1  christos 	    {
   6203  1.1  christos 	      notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
   6204  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-7].expr)), imm5 ((yyvsp[-3].expr)), 1, 1, 0);
   6205  1.1  christos 	    }
   6206  1.1  christos 	  else
   6207  1.1  christos 	    return yyerror ("Bad register range for PushPopMultiple");
   6208  1.1  christos 	}
   6209  1.1  christos #line 6210 "config/bfin-parse.c"
   6210  1.1  christos     break;
   6211  1.1  christos 
   6212  1.1  christos   case 201: /* asm_1: LPAREN REG COLON expr RPAREN ASSIGN reg_with_postinc  */
   6213  1.1  christos #line 3471 "./config/bfin-parse.y"
   6214  1.1  christos         {
   6215  1.1  christos 	  if ((yyvsp[0].reg).regno != REG_SP)
   6216  1.1  christos 	    yyerror ("Stack Pointer expected");
   6217  1.1  christos 
   6218  1.1  christos 	  if ((yyvsp[-5].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-3].expr), 0, 7))
   6219  1.1  christos 	    {
   6220  1.1  christos 	      notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
   6221  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-3].expr)), 0, 1, 0, 0);
   6222  1.1  christos 	    }
   6223  1.1  christos 	  else if ((yyvsp[-5].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-3].expr), 0, 6))
   6224  1.1  christos 	    {
   6225  1.1  christos 	      notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
   6226  1.1  christos 	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-3].expr)), 0, 1, 0);
   6227  1.1  christos 	    }
   6228  1.1  christos 	  else
   6229  1.1  christos 	    return yyerror ("Bad register range for PushPopMultiple");
   6230  1.1  christos 	}
   6231  1.1  christos #line 6232 "config/bfin-parse.c"
   6232  1.1  christos     break;
   6233  1.1  christos 
   6234  1.1  christos   case 202: /* asm_1: reg_with_predec ASSIGN REG  */
   6235  1.1  christos #line 3490 "./config/bfin-parse.y"
   6236  1.1  christos         {
   6237  1.1  christos 	  if ((yyvsp[-2].reg).regno != REG_SP)
   6238  1.1  christos 	    yyerror ("Stack Pointer expected");
   6239  1.1  christos 
   6240  1.1  christos 	  if (IS_ALLREG ((yyvsp[0].reg)))
   6241  1.1  christos 	    {
   6242  1.1  christos 	      notethat ("PushPopReg: [ -- SP ] = allregs\n");
   6243  1.1  christos 	      (yyval.instr) = PUSHPOPREG (&(yyvsp[0].reg), 1);
   6244  1.1  christos 	    }
   6245  1.1  christos 	  else
   6246  1.1  christos 	    return yyerror ("Bad register for PushPopReg");
   6247  1.1  christos 	}
   6248  1.1  christos #line 6249 "config/bfin-parse.c"
   6249  1.1  christos     break;
   6250  1.1  christos 
   6251  1.1  christos   case 203: /* asm_1: LINK expr  */
   6252  1.1  christos #line 3506 "./config/bfin-parse.y"
   6253  1.1  christos         {
   6254  1.1  christos 	  if (IS_URANGE (16, (yyvsp[0].expr), 0, 4))
   6255  1.1  christos 	    (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[0].expr)));
   6256  1.1  christos 	  else
   6257  1.1  christos 	    return yyerror ("Bad constant for LINK");
   6258  1.1  christos 	}
   6259  1.1  christos #line 6260 "config/bfin-parse.c"
   6260  1.1  christos     break;
   6261  1.1  christos 
   6262  1.1  christos   case 204: /* asm_1: UNLINK  */
   6263  1.1  christos #line 3514 "./config/bfin-parse.y"
   6264  1.1  christos         {
   6265  1.1  christos 		notethat ("linkage: UNLINK\n");
   6266  1.1  christos 		(yyval.instr) = LINKAGE (1, 0);
   6267  1.1  christos 	}
   6268  1.1  christos #line 6269 "config/bfin-parse.c"
   6269  1.1  christos     break;
   6270  1.1  christos 
   6271  1.1  christos   case 205: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG  */
   6272  1.1  christos #line 3523 "./config/bfin-parse.y"
   6273  1.1  christos         {
   6274  1.1  christos 	  if (IS_PCREL4 ((yyvsp[-4].expr)) && IS_LPPCREL10 ((yyvsp[-2].expr)) && IS_CREG ((yyvsp[0].reg)))
   6275  1.1  christos 	    {
   6276  1.1  christos 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
   6277  1.1  christos 	      (yyval.instr) = LOOPSETUP ((yyvsp[-4].expr), &(yyvsp[0].reg), 0, (yyvsp[-2].expr), 0);
   6278  1.1  christos 	    }
   6279  1.1  christos 	  else
   6280  1.1  christos 	    return yyerror ("Bad register or values for LSETUP");
   6281  1.1  christos 
   6282  1.1  christos 	}
   6283  1.1  christos #line 6284 "config/bfin-parse.c"
   6284  1.1  christos     break;
   6285  1.1  christos 
   6286  1.1  christos   case 206: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG  */
   6287  1.1  christos #line 3534 "./config/bfin-parse.y"
   6288  1.1  christos         {
   6289  1.1  christos 	  if (IS_PCREL4 ((yyvsp[-6].expr)) && IS_LPPCREL10 ((yyvsp[-4].expr))
   6290  1.1  christos 	      && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
   6291  1.1  christos 	    {
   6292  1.1  christos 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
   6293  1.1  christos 	      (yyval.instr) = LOOPSETUP ((yyvsp[-6].expr), &(yyvsp[-2].reg), 1, (yyvsp[-4].expr), &(yyvsp[0].reg));
   6294  1.1  christos 	    }
   6295  1.1  christos 	  else
   6296  1.1  christos 	    return yyerror ("Bad register or values for LSETUP");
   6297  1.1  christos 	}
   6298  1.1  christos #line 6299 "config/bfin-parse.c"
   6299  1.1  christos     break;
   6300  1.1  christos 
   6301  1.1  christos   case 207: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG GREATER_GREATER expr  */
   6302  1.1  christos #line 3546 "./config/bfin-parse.y"
   6303  1.1  christos         {
   6304  1.1  christos 	  if (IS_PCREL4 ((yyvsp[-8].expr)) && IS_LPPCREL10 ((yyvsp[-6].expr))
   6305  1.1  christos 	      && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg))
   6306  1.1  christos 	      && EXPR_VALUE ((yyvsp[0].expr)) == 1)
   6307  1.1  christos 	    {
   6308  1.1  christos 	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
   6309  1.1  christos 	      (yyval.instr) = LOOPSETUP ((yyvsp[-8].expr), &(yyvsp[-4].reg), 3, (yyvsp[-6].expr), &(yyvsp[-2].reg));
   6310  1.1  christos 	    }
   6311  1.1  christos 	  else
   6312  1.1  christos 	    return yyerror ("Bad register or values for LSETUP");
   6313  1.1  christos 	}
   6314  1.1  christos #line 6315 "config/bfin-parse.c"
   6315  1.1  christos     break;
   6316  1.1  christos 
   6317  1.1  christos   case 208: /* asm_1: LOOP expr REG  */
   6318  1.1  christos #line 3560 "./config/bfin-parse.y"
   6319  1.1  christos         {
   6320  1.1  christos 	  if (!IS_RELOC ((yyvsp[-1].expr)))
   6321  1.1  christos 	    return yyerror ("Invalid expression in loop statement");
   6322  1.1  christos 	  if (!IS_CREG ((yyvsp[0].reg)))
   6323  1.1  christos             return yyerror ("Invalid loop counter register");
   6324  1.1  christos 	(yyval.instr) = bfin_gen_loop ((yyvsp[-1].expr), &(yyvsp[0].reg), 0, 0);
   6325  1.1  christos 	}
   6326  1.1  christos #line 6327 "config/bfin-parse.c"
   6327  1.1  christos     break;
   6328  1.1  christos 
   6329  1.1  christos   case 209: /* asm_1: LOOP expr REG ASSIGN REG  */
   6330  1.1  christos #line 3568 "./config/bfin-parse.y"
   6331  1.1  christos         {
   6332  1.1  christos 	  if (IS_RELOC ((yyvsp[-3].expr)) && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
   6333  1.1  christos 	    {
   6334  1.1  christos 	      notethat ("Loop: LOOP expr counters = pregs\n");
   6335  1.1  christos 	      (yyval.instr) = bfin_gen_loop ((yyvsp[-3].expr), &(yyvsp[-2].reg), 1, &(yyvsp[0].reg));
   6336  1.1  christos 	    }
   6337  1.1  christos 	  else
   6338  1.1  christos 	    return yyerror ("Bad register or values for LOOP");
   6339  1.1  christos 	}
   6340  1.1  christos #line 6341 "config/bfin-parse.c"
   6341  1.1  christos     break;
   6342  1.1  christos 
   6343  1.1  christos   case 210: /* asm_1: LOOP expr REG ASSIGN REG GREATER_GREATER expr  */
   6344  1.1  christos #line 3578 "./config/bfin-parse.y"
   6345  1.1  christos         {
   6346  1.1  christos 	  if (IS_RELOC ((yyvsp[-5].expr)) && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 1)
   6347  1.1  christos 	    {
   6348  1.1  christos 	      notethat ("Loop: LOOP expr counters = pregs >> 1\n");
   6349  1.1  christos 	      (yyval.instr) = bfin_gen_loop ((yyvsp[-5].expr), &(yyvsp[-4].reg), 3, &(yyvsp[-2].reg));
   6350  1.1  christos 	    }
   6351  1.1  christos 	  else
   6352  1.1  christos 	    return yyerror ("Bad register or values for LOOP");
   6353  1.1  christos 	}
   6354  1.1  christos #line 6355 "config/bfin-parse.c"
   6355  1.1  christos     break;
   6356  1.1  christos 
   6357  1.1  christos   case 211: /* asm_1: LOOP_BEGIN NUMBER  */
   6358  1.1  christos #line 3590 "./config/bfin-parse.y"
   6359  1.1  christos         {
   6360  1.1  christos 	  Expr_Node_Value val;
   6361  1.1  christos 	  val.i_value = (yyvsp[0].value);
   6362  1.1  christos 	  Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
   6363  1.1  christos 	  bfin_loop_attempt_create_label (tmp, 1);
   6364  1.1  christos 	  if (!IS_RELOC (tmp))
   6365  1.1  christos 	    return yyerror ("Invalid expression in LOOP_BEGIN statement");
   6366  1.1  christos 	  bfin_loop_beginend (tmp, 1);
   6367  1.1  christos 	  (yyval.instr) = 0;
   6368  1.1  christos 	}
   6369  1.1  christos #line 6370 "config/bfin-parse.c"
   6370  1.1  christos     break;
   6371  1.1  christos 
   6372  1.1  christos   case 212: /* asm_1: LOOP_BEGIN expr  */
   6373  1.1  christos #line 3601 "./config/bfin-parse.y"
   6374  1.1  christos         {
   6375  1.1  christos 	  if (!IS_RELOC ((yyvsp[0].expr)))
   6376  1.1  christos 	    return yyerror ("Invalid expression in LOOP_BEGIN statement");
   6377  1.1  christos 
   6378  1.1  christos 	  bfin_loop_beginend ((yyvsp[0].expr), 1);
   6379  1.1  christos 	  (yyval.instr) = 0;
   6380  1.1  christos 	}
   6381  1.1  christos #line 6382 "config/bfin-parse.c"
   6382  1.1  christos     break;
   6383  1.1  christos 
   6384  1.1  christos   case 213: /* asm_1: LOOP_END NUMBER  */
   6385  1.1  christos #line 3611 "./config/bfin-parse.y"
   6386  1.1  christos         {
   6387  1.1  christos 	  Expr_Node_Value val;
   6388  1.1  christos 	  val.i_value = (yyvsp[0].value);
   6389  1.1  christos 	  Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
   6390  1.1  christos 	  bfin_loop_attempt_create_label (tmp, 1);
   6391  1.1  christos 	  if (!IS_RELOC (tmp))
   6392  1.1  christos 	    return yyerror ("Invalid expression in LOOP_END statement");
   6393  1.1  christos 	  bfin_loop_beginend (tmp, 0);
   6394  1.1  christos 	  (yyval.instr) = 0;
   6395  1.1  christos 	}
   6396  1.1  christos #line 6397 "config/bfin-parse.c"
   6397  1.1  christos     break;
   6398  1.1  christos 
   6399  1.1  christos   case 214: /* asm_1: LOOP_END expr  */
   6400  1.1  christos #line 3622 "./config/bfin-parse.y"
   6401  1.1  christos         {
   6402  1.1  christos 	  if (!IS_RELOC ((yyvsp[0].expr)))
   6403  1.1  christos 	    return yyerror ("Invalid expression in LOOP_END statement");
   6404  1.1  christos 
   6405  1.1  christos 	  bfin_loop_beginend ((yyvsp[0].expr), 0);
   6406  1.1  christos 	  (yyval.instr) = 0;
   6407  1.1  christos 	}
   6408  1.1  christos #line 6409 "config/bfin-parse.c"
   6409  1.1  christos     break;
   6410  1.1  christos 
   6411  1.1  christos   case 215: /* asm_1: ABORT  */
   6412  1.1  christos #line 3633 "./config/bfin-parse.y"
   6413  1.1  christos         {
   6414  1.1  christos 	  notethat ("psedoDEBUG: ABORT\n");
   6415  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, 3, 0);
   6416  1.1  christos 	}
   6417  1.1  christos #line 6418 "config/bfin-parse.c"
   6418  1.1  christos     break;
   6419  1.1  christos 
   6420  1.1  christos   case 216: /* asm_1: DBG  */
   6421  1.1  christos #line 3639 "./config/bfin-parse.y"
   6422  1.1  christos         {
   6423  1.1  christos 	  notethat ("pseudoDEBUG: DBG\n");
   6424  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
   6425  1.1  christos 	}
   6426  1.1  christos #line 6427 "config/bfin-parse.c"
   6427  1.1  christos     break;
   6428  1.1  christos 
   6429  1.1  christos   case 217: /* asm_1: DBG REG_A  */
   6430  1.1  christos #line 3644 "./config/bfin-parse.y"
   6431  1.1  christos         {
   6432  1.1  christos 	  notethat ("pseudoDEBUG: DBG REG_A\n");
   6433  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[0].reg)), 0);
   6434  1.1  christos 	}
   6435  1.1  christos #line 6436 "config/bfin-parse.c"
   6436  1.1  christos     break;
   6437  1.1  christos 
   6438  1.1  christos   case 218: /* asm_1: DBG REG  */
   6439  1.1  christos #line 3649 "./config/bfin-parse.y"
   6440  1.1  christos         {
   6441  1.1  christos 	  notethat ("pseudoDEBUG: DBG allregs\n");
   6442  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[0].reg).regno & CODE_MASK, ((yyvsp[0].reg).regno & CLASS_MASK) >> 4);
   6443  1.1  christos 	}
   6444  1.1  christos #line 6445 "config/bfin-parse.c"
   6445  1.1  christos     break;
   6446  1.1  christos 
   6447  1.1  christos   case 219: /* asm_1: DBGCMPLX LPAREN REG RPAREN  */
   6448  1.1  christos #line 3655 "./config/bfin-parse.y"
   6449  1.1  christos         {
   6450  1.1  christos 	  if (!IS_DREG ((yyvsp[-1].reg)))
   6451  1.1  christos 	    return yyerror ("Dregs expected");
   6452  1.1  christos 	  notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
   6453  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, 6, ((yyvsp[-1].reg).regno & CODE_MASK) >> 4);
   6454  1.1  christos 	}
   6455  1.1  christos #line 6456 "config/bfin-parse.c"
   6456  1.1  christos     break;
   6457  1.1  christos 
   6458  1.1  christos   case 220: /* asm_1: DBGHALT  */
   6459  1.1  christos #line 3663 "./config/bfin-parse.y"
   6460  1.1  christos         {
   6461  1.1  christos 	  notethat ("psedoDEBUG: DBGHALT\n");
   6462  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
   6463  1.1  christos 	}
   6464  1.1  christos #line 6465 "config/bfin-parse.c"
   6465  1.1  christos     break;
   6466  1.1  christos 
   6467  1.1  christos   case 221: /* asm_1: HLT  */
   6468  1.1  christos #line 3669 "./config/bfin-parse.y"
   6469  1.1  christos         {
   6470  1.1  christos 	  notethat ("psedoDEBUG: HLT\n");
   6471  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0);
   6472  1.1  christos 	}
   6473  1.1  christos #line 6474 "config/bfin-parse.c"
   6474  1.1  christos     break;
   6475  1.1  christos 
   6476  1.1  christos   case 222: /* asm_1: DBGA LPAREN HALF_REG COMMA expr RPAREN  */
   6477  1.1  christos #line 3675 "./config/bfin-parse.y"
   6478  1.1  christos         {
   6479  1.1  christos 	  notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n");
   6480  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[-3].reg)), &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
   6481  1.1  christos 	}
   6482  1.1  christos #line 6483 "config/bfin-parse.c"
   6483  1.1  christos     break;
   6484  1.1  christos 
   6485  1.1  christos   case 223: /* asm_1: DBGAH LPAREN REG COMMA expr RPAREN  */
   6486  1.1  christos #line 3681 "./config/bfin-parse.y"
   6487  1.1  christos         {
   6488  1.1  christos 	  notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n");
   6489  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
   6490  1.1  christos 	}
   6491  1.1  christos #line 6492 "config/bfin-parse.c"
   6492  1.1  christos     break;
   6493  1.1  christos 
   6494  1.1  christos   case 224: /* asm_1: DBGAL LPAREN REG COMMA expr RPAREN  */
   6495  1.1  christos #line 3687 "./config/bfin-parse.y"
   6496  1.1  christos         {
   6497  1.1  christos 	  notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n");
   6498  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
   6499  1.1  christos 	}
   6500  1.1  christos #line 6501 "config/bfin-parse.c"
   6501  1.1  christos     break;
   6502  1.1  christos 
   6503  1.1  christos   case 225: /* asm_1: OUTC expr  */
   6504  1.1  christos #line 3693 "./config/bfin-parse.y"
   6505  1.1  christos         {
   6506  1.1  christos 	  if (!IS_UIMM ((yyvsp[0].expr), 8))
   6507  1.1  christos 	    return yyerror ("Constant out of range");
   6508  1.1  christos 	  notethat ("psedodbg_assert: OUTC uimm8\n");
   6509  1.1  christos 	  (yyval.instr) = bfin_gen_pseudochr (uimm8 ((yyvsp[0].expr)));
   6510  1.1  christos 	}
   6511  1.1  christos #line 6512 "config/bfin-parse.c"
   6512  1.1  christos     break;
   6513  1.1  christos 
   6514  1.1  christos   case 226: /* asm_1: OUTC REG  */
   6515  1.1  christos #line 3701 "./config/bfin-parse.y"
   6516  1.1  christos         {
   6517  1.1  christos 	  if (!IS_DREG ((yyvsp[0].reg)))
   6518  1.1  christos 	    return yyerror ("Dregs expected");
   6519  1.1  christos 	  notethat ("psedodbg_assert: OUTC dreg\n");
   6520  1.1  christos 	  (yyval.instr) = bfin_gen_pseudodbg (2, (yyvsp[0].reg).regno & CODE_MASK, 0);
   6521  1.1  christos 	}
   6522  1.1  christos #line 6523 "config/bfin-parse.c"
   6523  1.1  christos     break;
   6524  1.1  christos 
   6525  1.1  christos   case 227: /* REG_A: REG_A_DOUBLE_ZERO  */
   6526  1.1  christos #line 3715 "./config/bfin-parse.y"
   6527  1.1  christos         {
   6528  1.1  christos 	(yyval.reg) = (yyvsp[0].reg);
   6529  1.1  christos 	}
   6530  1.1  christos #line 6531 "config/bfin-parse.c"
   6531  1.1  christos     break;
   6532  1.1  christos 
   6533  1.1  christos   case 228: /* REG_A: REG_A_DOUBLE_ONE  */
   6534  1.1  christos #line 3719 "./config/bfin-parse.y"
   6535  1.1  christos         {
   6536  1.1  christos 	(yyval.reg) = (yyvsp[0].reg);
   6537  1.1  christos 	}
   6538  1.1  christos #line 6539 "config/bfin-parse.c"
   6539  1.1  christos     break;
   6540  1.1  christos 
   6541  1.1  christos   case 229: /* opt_mode: %empty  */
   6542  1.1  christos #line 3728 "./config/bfin-parse.y"
   6543  1.1  christos         {
   6544  1.1  christos 	(yyval.mod).MM = 0;
   6545  1.1  christos 	(yyval.mod).mod = 0;
   6546  1.1  christos 	}
   6547  1.1  christos #line 6548 "config/bfin-parse.c"
   6548  1.1  christos     break;
   6549  1.1  christos 
   6550  1.1  christos   case 230: /* opt_mode: LPAREN M COMMA MMOD RPAREN  */
   6551  1.1  christos #line 3733 "./config/bfin-parse.y"
   6552  1.1  christos         {
   6553  1.1  christos 	(yyval.mod).MM = 1;
   6554  1.1  christos 	(yyval.mod).mod = (yyvsp[-1].value);
   6555  1.1  christos 	}
   6556  1.1  christos #line 6557 "config/bfin-parse.c"
   6557  1.1  christos     break;
   6558  1.1  christos 
   6559  1.1  christos   case 231: /* opt_mode: LPAREN MMOD COMMA M RPAREN  */
   6560  1.1  christos #line 3738 "./config/bfin-parse.y"
   6561  1.1  christos         {
   6562  1.1  christos 	(yyval.mod).MM = 1;
   6563  1.1  christos 	(yyval.mod).mod = (yyvsp[-3].value);
   6564  1.1  christos 	}
   6565  1.1  christos #line 6566 "config/bfin-parse.c"
   6566  1.1  christos     break;
   6567  1.1  christos 
   6568  1.1  christos   case 232: /* opt_mode: LPAREN MMOD RPAREN  */
   6569  1.1  christos #line 3743 "./config/bfin-parse.y"
   6570  1.1  christos         {
   6571  1.1  christos 	(yyval.mod).MM = 0;
   6572  1.1  christos 	(yyval.mod).mod = (yyvsp[-1].value);
   6573  1.1  christos 	}
   6574  1.1  christos #line 6575 "config/bfin-parse.c"
   6575  1.1  christos     break;
   6576  1.1  christos 
   6577  1.1  christos   case 233: /* opt_mode: LPAREN M RPAREN  */
   6578  1.1  christos #line 3748 "./config/bfin-parse.y"
   6579  1.1  christos         {
   6580  1.1  christos 	(yyval.mod).MM = 1;
   6581  1.1  christos 	(yyval.mod).mod = 0;
   6582  1.1  christos 	}
   6583  1.1  christos #line 6584 "config/bfin-parse.c"
   6584  1.1  christos     break;
   6585  1.1  christos 
   6586  1.1  christos   case 234: /* asr_asl: LPAREN ASL RPAREN  */
   6587  1.1  christos #line 3755 "./config/bfin-parse.y"
   6588  1.1  christos         {
   6589  1.1  christos 	(yyval.r0).r0 = 1;
   6590  1.1  christos 	}
   6591  1.1  christos #line 6592 "config/bfin-parse.c"
   6592  1.1  christos     break;
   6593  1.1  christos 
   6594  1.1  christos   case 235: /* asr_asl: LPAREN ASR RPAREN  */
   6595  1.1  christos #line 3759 "./config/bfin-parse.y"
   6596  1.1  christos         {
   6597  1.1  christos 	(yyval.r0).r0 = 0;
   6598  1.1  christos 	}
   6599  1.1  christos #line 6600 "config/bfin-parse.c"
   6600  1.1  christos     break;
   6601  1.1  christos 
   6602  1.1  christos   case 236: /* sco: %empty  */
   6603  1.1  christos #line 3765 "./config/bfin-parse.y"
   6604  1.1  christos         {
   6605  1.1  christos 	(yyval.modcodes).s0 = 0;
   6606  1.1  christos 	(yyval.modcodes).x0 = 0;
   6607  1.1  christos 	}
   6608  1.1  christos #line 6609 "config/bfin-parse.c"
   6609  1.1  christos     break;
   6610  1.1  christos 
   6611  1.1  christos   case 237: /* sco: S  */
   6612  1.1  christos #line 3770 "./config/bfin-parse.y"
   6613  1.1  christos         {
   6614  1.1  christos 	(yyval.modcodes).s0 = 1;
   6615  1.1  christos 	(yyval.modcodes).x0 = 0;
   6616  1.1  christos 	}
   6617  1.1  christos #line 6618 "config/bfin-parse.c"
   6618  1.1  christos     break;
   6619  1.1  christos 
   6620  1.1  christos   case 238: /* sco: CO  */
   6621  1.1  christos #line 3775 "./config/bfin-parse.y"
   6622  1.1  christos         {
   6623  1.1  christos 	(yyval.modcodes).s0 = 0;
   6624  1.1  christos 	(yyval.modcodes).x0 = 1;
   6625  1.1  christos 	}
   6626  1.1  christos #line 6627 "config/bfin-parse.c"
   6627  1.1  christos     break;
   6628  1.1  christos 
   6629  1.1  christos   case 239: /* sco: SCO  */
   6630  1.1  christos #line 3780 "./config/bfin-parse.y"
   6631  1.1  christos         {
   6632  1.1  christos 	(yyval.modcodes).s0 = 1;
   6633  1.1  christos 	(yyval.modcodes).x0 = 1;
   6634  1.1  christos 	}
   6635  1.1  christos #line 6636 "config/bfin-parse.c"
   6636  1.1  christos     break;
   6637  1.1  christos 
   6638  1.1  christos   case 240: /* asr_asl_0: ASL  */
   6639  1.1  christos #line 3788 "./config/bfin-parse.y"
   6640  1.1  christos         {
   6641  1.1  christos 	(yyval.r0).r0 = 1;
   6642  1.1  christos 	}
   6643  1.1  christos #line 6644 "config/bfin-parse.c"
   6644  1.1  christos     break;
   6645  1.1  christos 
   6646  1.1  christos   case 241: /* asr_asl_0: ASR  */
   6647  1.1  christos #line 3792 "./config/bfin-parse.y"
   6648  1.1  christos         {
   6649  1.1  christos 	(yyval.r0).r0 = 0;
   6650  1.1  christos 	}
   6651  1.1  christos #line 6652 "config/bfin-parse.c"
   6652  1.1  christos     break;
   6653  1.1  christos 
   6654  1.1  christos   case 242: /* amod0: %empty  */
   6655  1.1  christos #line 3798 "./config/bfin-parse.y"
   6656  1.1  christos         {
   6657  1.1  christos 	(yyval.modcodes).s0 = 0;
   6658  1.1  christos 	(yyval.modcodes).x0 = 0;
   6659  1.1  christos 	}
   6660  1.1  christos #line 6661 "config/bfin-parse.c"
   6661  1.1  christos     break;
   6662  1.1  christos 
   6663  1.1  christos   case 243: /* amod0: LPAREN sco RPAREN  */
   6664  1.1  christos #line 3803 "./config/bfin-parse.y"
   6665  1.1  christos         {
   6666  1.1  christos 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
   6667  1.1  christos 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
   6668  1.1  christos 	}
   6669  1.1  christos #line 6670 "config/bfin-parse.c"
   6670  1.1  christos     break;
   6671  1.1  christos 
   6672  1.1  christos   case 244: /* amod1: %empty  */
   6673  1.1  christos #line 3810 "./config/bfin-parse.y"
   6674  1.1  christos         {
   6675  1.1  christos 	(yyval.modcodes).s0 = 0;
   6676  1.1  christos 	(yyval.modcodes).x0 = 0;
   6677  1.1  christos 	(yyval.modcodes).aop = 0;
   6678  1.1  christos 	}
   6679  1.1  christos #line 6680 "config/bfin-parse.c"
   6680  1.1  christos     break;
   6681  1.1  christos 
   6682  1.1  christos   case 245: /* amod1: LPAREN NS RPAREN  */
   6683  1.1  christos #line 3816 "./config/bfin-parse.y"
   6684  1.1  christos         {
   6685  1.1  christos 	(yyval.modcodes).s0 = 0;
   6686  1.1  christos 	(yyval.modcodes).x0 = 0;
   6687  1.1  christos 	(yyval.modcodes).aop = 1;
   6688  1.1  christos 	}
   6689  1.1  christos #line 6690 "config/bfin-parse.c"
   6690  1.1  christos     break;
   6691  1.1  christos 
   6692  1.1  christos   case 246: /* amod1: LPAREN S RPAREN  */
   6693  1.1  christos #line 3822 "./config/bfin-parse.y"
   6694  1.1  christos         {
   6695  1.1  christos 	(yyval.modcodes).s0 = 1;
   6696  1.1  christos 	(yyval.modcodes).x0 = 0;
   6697  1.1  christos 	(yyval.modcodes).aop = 1;
   6698  1.1  christos 	}
   6699  1.1  christos #line 6700 "config/bfin-parse.c"
   6700  1.1  christos     break;
   6701  1.1  christos 
   6702  1.1  christos   case 247: /* amod2: %empty  */
   6703  1.1  christos #line 3830 "./config/bfin-parse.y"
   6704  1.1  christos         {
   6705  1.1  christos 	(yyval.modcodes).r0 = 0;
   6706  1.1  christos 	(yyval.modcodes).s0 = 0;
   6707  1.1  christos 	(yyval.modcodes).x0 = 0;
   6708  1.1  christos 	}
   6709  1.1  christos #line 6710 "config/bfin-parse.c"
   6710  1.1  christos     break;
   6711  1.1  christos 
   6712  1.1  christos   case 248: /* amod2: LPAREN asr_asl_0 RPAREN  */
   6713  1.1  christos #line 3836 "./config/bfin-parse.y"
   6714  1.1  christos         {
   6715  1.1  christos 	(yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
   6716  1.1  christos 	(yyval.modcodes).s0 = 0;
   6717  1.1  christos 	(yyval.modcodes).x0 = 0;
   6718  1.1  christos 	}
   6719  1.1  christos #line 6720 "config/bfin-parse.c"
   6720  1.1  christos     break;
   6721  1.1  christos 
   6722  1.1  christos   case 249: /* amod2: LPAREN sco RPAREN  */
   6723  1.1  christos #line 3842 "./config/bfin-parse.y"
   6724  1.1  christos         {
   6725  1.1  christos 	(yyval.modcodes).r0 = 0;
   6726  1.1  christos 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
   6727  1.1  christos 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
   6728  1.1  christos 	}
   6729  1.1  christos #line 6730 "config/bfin-parse.c"
   6730  1.1  christos     break;
   6731  1.1  christos 
   6732  1.1  christos   case 250: /* amod2: LPAREN asr_asl_0 COMMA sco RPAREN  */
   6733  1.1  christos #line 3848 "./config/bfin-parse.y"
   6734  1.1  christos         {
   6735  1.1  christos 	(yyval.modcodes).r0 = 2 + (yyvsp[-3].r0).r0;
   6736  1.1  christos 	(yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
   6737  1.1  christos 	(yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
   6738  1.1  christos 	}
   6739  1.1  christos #line 6740 "config/bfin-parse.c"
   6740  1.1  christos     break;
   6741  1.1  christos 
   6742  1.1  christos   case 251: /* amod2: LPAREN sco COMMA asr_asl_0 RPAREN  */
   6743  1.1  christos #line 3854 "./config/bfin-parse.y"
   6744  1.1  christos         {
   6745  1.1  christos 	(yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
   6746  1.1  christos 	(yyval.modcodes).s0 = (yyvsp[-3].modcodes).s0;
   6747  1.1  christos 	(yyval.modcodes).x0 = (yyvsp[-3].modcodes).x0;
   6748  1.1  christos 	}
   6749  1.1  christos #line 6750 "config/bfin-parse.c"
   6750  1.1  christos     break;
   6751  1.1  christos 
   6752  1.1  christos   case 252: /* xpmod: %empty  */
   6753  1.1  christos #line 3862 "./config/bfin-parse.y"
   6754  1.1  christos         {
   6755  1.1  christos 	(yyval.r0).r0 = 0;
   6756  1.1  christos 	}
   6757  1.1  christos #line 6758 "config/bfin-parse.c"
   6758  1.1  christos     break;
   6759  1.1  christos 
   6760  1.1  christos   case 253: /* xpmod: LPAREN Z RPAREN  */
   6761  1.1  christos #line 3866 "./config/bfin-parse.y"
   6762  1.1  christos         {
   6763  1.1  christos 	(yyval.r0).r0 = 0;
   6764  1.1  christos 	}
   6765  1.1  christos #line 6766 "config/bfin-parse.c"
   6766  1.1  christos     break;
   6767  1.1  christos 
   6768  1.1  christos   case 254: /* xpmod: LPAREN X RPAREN  */
   6769  1.1  christos #line 3870 "./config/bfin-parse.y"
   6770  1.1  christos         {
   6771  1.1  christos 	(yyval.r0).r0 = 1;
   6772  1.1  christos 	}
   6773  1.1  christos #line 6774 "config/bfin-parse.c"
   6774  1.1  christos     break;
   6775  1.1  christos 
   6776  1.1  christos   case 255: /* xpmod1: %empty  */
   6777  1.1  christos #line 3876 "./config/bfin-parse.y"
   6778  1.1  christos         {
   6779  1.1  christos 	(yyval.r0).r0 = 0;
   6780  1.1  christos 	}
   6781  1.1  christos #line 6782 "config/bfin-parse.c"
   6782  1.1  christos     break;
   6783  1.1  christos 
   6784  1.1  christos   case 256: /* xpmod1: LPAREN X RPAREN  */
   6785  1.1  christos #line 3880 "./config/bfin-parse.y"
   6786  1.1  christos         {
   6787  1.1  christos 	(yyval.r0).r0 = 0;
   6788  1.1  christos 	}
   6789  1.1  christos #line 6790 "config/bfin-parse.c"
   6790  1.1  christos     break;
   6791  1.1  christos 
   6792  1.1  christos   case 257: /* xpmod1: LPAREN Z RPAREN  */
   6793  1.1  christos #line 3884 "./config/bfin-parse.y"
   6794  1.1  christos         {
   6795  1.1  christos 	(yyval.r0).r0 = 1;
   6796  1.1  christos 	}
   6797  1.1  christos #line 6798 "config/bfin-parse.c"
   6798  1.1  christos     break;
   6799  1.1  christos 
   6800  1.1  christos   case 258: /* vsmod: %empty  */
   6801  1.1  christos #line 3890 "./config/bfin-parse.y"
   6802  1.1  christos         {
   6803  1.1  christos 	(yyval.modcodes).r0 = 0;
   6804  1.1  christos 	(yyval.modcodes).s0 = 0;
   6805  1.1  christos 	(yyval.modcodes).aop = 0;
   6806  1.1  christos 	}
   6807  1.1  christos #line 6808 "config/bfin-parse.c"
   6808  1.1  christos     break;
   6809  1.1  christos 
   6810  1.1  christos   case 259: /* vsmod: LPAREN NS RPAREN  */
   6811  1.1  christos #line 3896 "./config/bfin-parse.y"
   6812  1.1  christos         {
   6813  1.1  christos 	(yyval.modcodes).r0 = 0;
   6814  1.1  christos 	(yyval.modcodes).s0 = 0;
   6815  1.1  christos 	(yyval.modcodes).aop = 3;
   6816  1.1  christos 	}
   6817  1.1  christos #line 6818 "config/bfin-parse.c"
   6818  1.1  christos     break;
   6819  1.1  christos 
   6820  1.1  christos   case 260: /* vsmod: LPAREN S RPAREN  */
   6821  1.1  christos #line 3902 "./config/bfin-parse.y"
   6822  1.1  christos         {
   6823  1.1  christos 	(yyval.modcodes).r0 = 0;
   6824  1.1  christos 	(yyval.modcodes).s0 = 1;
   6825  1.1  christos 	(yyval.modcodes).aop = 3;
   6826  1.1  christos 	}
   6827  1.1  christos #line 6828 "config/bfin-parse.c"
   6828  1.1  christos     break;
   6829  1.1  christos 
   6830  1.1  christos   case 261: /* vsmod: LPAREN V RPAREN  */
   6831  1.1  christos #line 3908 "./config/bfin-parse.y"
   6832  1.1  christos         {
   6833  1.1  christos 	(yyval.modcodes).r0 = 1;
   6834  1.1  christos 	(yyval.modcodes).s0 = 0;
   6835  1.1  christos 	(yyval.modcodes).aop = 3;
   6836  1.1  christos 	}
   6837  1.1  christos #line 6838 "config/bfin-parse.c"
   6838  1.1  christos     break;
   6839  1.1  christos 
   6840  1.1  christos   case 262: /* vsmod: LPAREN V COMMA S RPAREN  */
   6841  1.1  christos #line 3914 "./config/bfin-parse.y"
   6842  1.1  christos         {
   6843  1.1  christos 	(yyval.modcodes).r0 = 1;
   6844  1.1  christos 	(yyval.modcodes).s0 = 1;
   6845  1.1  christos 	}
   6846  1.1  christos #line 6847 "config/bfin-parse.c"
   6847  1.1  christos     break;
   6848  1.1  christos 
   6849  1.1  christos   case 263: /* vsmod: LPAREN S COMMA V RPAREN  */
   6850  1.1  christos #line 3919 "./config/bfin-parse.y"
   6851  1.1  christos         {
   6852  1.1  christos 	(yyval.modcodes).r0 = 1;
   6853  1.1  christos 	(yyval.modcodes).s0 = 1;
   6854  1.1  christos 	}
   6855  1.1  christos #line 6856 "config/bfin-parse.c"
   6856  1.1  christos     break;
   6857  1.1  christos 
   6858  1.1  christos   case 264: /* vmod: %empty  */
   6859  1.1  christos #line 3926 "./config/bfin-parse.y"
   6860  1.1  christos         {
   6861  1.1  christos 	(yyval.r0).r0 = 0;
   6862  1.1  christos 	}
   6863  1.1  christos #line 6864 "config/bfin-parse.c"
   6864  1.1  christos     break;
   6865  1.1  christos 
   6866  1.1  christos   case 265: /* vmod: LPAREN V RPAREN  */
   6867  1.1  christos #line 3930 "./config/bfin-parse.y"
   6868  1.1  christos         {
   6869  1.1  christos 	(yyval.r0).r0 = 1;
   6870  1.1  christos 	}
   6871  1.1  christos #line 6872 "config/bfin-parse.c"
   6872  1.1  christos     break;
   6873  1.1  christos 
   6874  1.1  christos   case 266: /* smod: %empty  */
   6875  1.1  christos #line 3936 "./config/bfin-parse.y"
   6876  1.1  christos         {
   6877  1.1  christos 	(yyval.modcodes).s0 = 0;
   6878  1.1  christos 	}
   6879  1.1  christos #line 6880 "config/bfin-parse.c"
   6880  1.1  christos     break;
   6881  1.1  christos 
   6882  1.1  christos   case 267: /* smod: LPAREN S RPAREN  */
   6883  1.1  christos #line 3940 "./config/bfin-parse.y"
   6884  1.1  christos         {
   6885  1.1  christos 	(yyval.modcodes).s0 = 1;
   6886  1.1  christos 	}
   6887  1.1  christos #line 6888 "config/bfin-parse.c"
   6888  1.1  christos     break;
   6889  1.1  christos 
   6890  1.1  christos   case 268: /* searchmod: GE  */
   6891  1.1  christos #line 3947 "./config/bfin-parse.y"
   6892  1.1  christos         {
   6893  1.1  christos 	(yyval.r0).r0 = 1;
   6894  1.1  christos 	}
   6895  1.1  christos #line 6896 "config/bfin-parse.c"
   6896  1.1  christos     break;
   6897  1.1  christos 
   6898  1.1  christos   case 269: /* searchmod: GT  */
   6899  1.1  christos #line 3951 "./config/bfin-parse.y"
   6900  1.1  christos         {
   6901  1.1  christos 	(yyval.r0).r0 = 0;
   6902  1.1  christos 	}
   6903  1.1  christos #line 6904 "config/bfin-parse.c"
   6904  1.1  christos     break;
   6905  1.1  christos 
   6906  1.1  christos   case 270: /* searchmod: LE  */
   6907  1.1  christos #line 3955 "./config/bfin-parse.y"
   6908  1.1  christos         {
   6909  1.1  christos 	(yyval.r0).r0 = 3;
   6910  1.1  christos 	}
   6911  1.1  christos #line 6912 "config/bfin-parse.c"
   6912  1.1  christos     break;
   6913  1.1  christos 
   6914  1.1  christos   case 271: /* searchmod: LT  */
   6915  1.1  christos #line 3959 "./config/bfin-parse.y"
   6916  1.1  christos         {
   6917  1.1  christos 	(yyval.r0).r0 = 2;
   6918  1.1  christos 	}
   6919  1.1  christos #line 6920 "config/bfin-parse.c"
   6920  1.1  christos     break;
   6921  1.1  christos 
   6922  1.1  christos   case 272: /* aligndir: %empty  */
   6923  1.1  christos #line 3965 "./config/bfin-parse.y"
   6924  1.1  christos         {
   6925  1.1  christos 	(yyval.r0).r0 = 0;
   6926  1.1  christos 	}
   6927  1.1  christos #line 6928 "config/bfin-parse.c"
   6928  1.1  christos     break;
   6929  1.1  christos 
   6930  1.1  christos   case 273: /* aligndir: LPAREN R RPAREN  */
   6931  1.1  christos #line 3969 "./config/bfin-parse.y"
   6932  1.1  christos         {
   6933  1.1  christos 	(yyval.r0).r0 = 1;
   6934  1.1  christos 	}
   6935  1.1  christos #line 6936 "config/bfin-parse.c"
   6936  1.1  christos     break;
   6937  1.1  christos 
   6938  1.1  christos   case 274: /* byteop_mod: LPAREN R RPAREN  */
   6939  1.1  christos #line 3976 "./config/bfin-parse.y"
   6940  1.1  christos         {
   6941  1.1  christos 	(yyval.modcodes).r0 = 0;
   6942  1.1  christos 	(yyval.modcodes).s0 = 1;
   6943  1.1  christos 	}
   6944  1.1  christos #line 6945 "config/bfin-parse.c"
   6945  1.1  christos     break;
   6946  1.1  christos 
   6947  1.1  christos   case 275: /* byteop_mod: LPAREN MMOD RPAREN  */
   6948  1.1  christos #line 3981 "./config/bfin-parse.y"
   6949  1.1  christos         {
   6950  1.1  christos 	if ((yyvsp[-1].value) != M_T)
   6951  1.1  christos 	  return yyerror ("Bad modifier");
   6952  1.1  christos 	(yyval.modcodes).r0 = 1;
   6953  1.1  christos 	(yyval.modcodes).s0 = 0;
   6954  1.1  christos 	}
   6955  1.1  christos #line 6956 "config/bfin-parse.c"
   6956  1.1  christos     break;
   6957  1.1  christos 
   6958  1.1  christos   case 276: /* byteop_mod: LPAREN MMOD COMMA R RPAREN  */
   6959  1.1  christos #line 3988 "./config/bfin-parse.y"
   6960  1.1  christos         {
   6961  1.1  christos 	if ((yyvsp[-3].value) != M_T)
   6962  1.1  christos 	  return yyerror ("Bad modifier");
   6963  1.1  christos 	(yyval.modcodes).r0 = 1;
   6964  1.1  christos 	(yyval.modcodes).s0 = 1;
   6965  1.1  christos 	}
   6966  1.1  christos #line 6967 "config/bfin-parse.c"
   6967  1.1  christos     break;
   6968  1.1  christos 
   6969  1.1  christos   case 277: /* byteop_mod: LPAREN R COMMA MMOD RPAREN  */
   6970  1.1  christos #line 3995 "./config/bfin-parse.y"
   6971  1.1  christos         {
   6972  1.1  christos 	if ((yyvsp[-1].value) != M_T)
   6973  1.1  christos 	  return yyerror ("Bad modifier");
   6974  1.1  christos 	(yyval.modcodes).r0 = 1;
   6975  1.1  christos 	(yyval.modcodes).s0 = 1;
   6976  1.1  christos 	}
   6977  1.1  christos #line 6978 "config/bfin-parse.c"
   6978  1.1  christos     break;
   6979  1.1  christos 
   6980  1.1  christos   case 278: /* c_align: ALIGN8  */
   6981  1.1  christos #line 4007 "./config/bfin-parse.y"
   6982  1.1  christos         {
   6983  1.1  christos 	(yyval.r0).r0 = 0;
   6984  1.1  christos 	}
   6985  1.1  christos #line 6986 "config/bfin-parse.c"
   6986  1.1  christos     break;
   6987  1.1  christos 
   6988  1.1  christos   case 279: /* c_align: ALIGN16  */
   6989  1.1  christos #line 4011 "./config/bfin-parse.y"
   6990  1.1  christos         {
   6991  1.1  christos 	(yyval.r0).r0 = 1;
   6992  1.1  christos 	}
   6993  1.1  christos #line 6994 "config/bfin-parse.c"
   6994  1.1  christos     break;
   6995  1.1  christos 
   6996  1.1  christos   case 280: /* c_align: ALIGN24  */
   6997  1.1  christos #line 4015 "./config/bfin-parse.y"
   6998  1.1  christos         {
   6999  1.1  christos 	(yyval.r0).r0 = 2;
   7000  1.1  christos 	}
   7001  1.1  christos #line 7002 "config/bfin-parse.c"
   7002  1.1  christos     break;
   7003  1.1  christos 
   7004  1.1  christos   case 281: /* w32_or_nothing: %empty  */
   7005  1.1  christos #line 4021 "./config/bfin-parse.y"
   7006  1.1  christos         {
   7007  1.1  christos 	(yyval.r0).r0 = 0;
   7008  1.1  christos 	}
   7009  1.1  christos #line 7010 "config/bfin-parse.c"
   7010  1.1  christos     break;
   7011  1.1  christos 
   7012  1.1  christos   case 282: /* w32_or_nothing: LPAREN MMOD RPAREN  */
   7013  1.1  christos #line 4025 "./config/bfin-parse.y"
   7014  1.1  christos         {
   7015  1.1  christos 	  if ((yyvsp[-1].value) == M_W32)
   7016  1.1  christos 	    (yyval.r0).r0 = 1;
   7017  1.1  christos 	  else
   7018  1.1  christos 	    return yyerror ("Only (W32) allowed");
   7019  1.1  christos 	}
   7020  1.1  christos #line 7021 "config/bfin-parse.c"
   7021  1.1  christos     break;
   7022  1.1  christos 
   7023  1.1  christos   case 283: /* iu_or_nothing: %empty  */
   7024  1.1  christos #line 4034 "./config/bfin-parse.y"
   7025  1.1  christos         {
   7026  1.1  christos 	(yyval.r0).r0 = 1;
   7027  1.1  christos 	}
   7028  1.1  christos #line 7029 "config/bfin-parse.c"
   7029  1.1  christos     break;
   7030  1.1  christos 
   7031  1.1  christos   case 284: /* iu_or_nothing: LPAREN MMOD RPAREN  */
   7032  1.1  christos #line 4038 "./config/bfin-parse.y"
   7033  1.1  christos         {
   7034  1.1  christos 	  if ((yyvsp[-1].value) == M_IU)
   7035  1.1  christos 	    (yyval.r0).r0 = 3;
   7036  1.1  christos 	  else
   7037  1.1  christos 	    return yyerror ("(IU) expected");
   7038  1.1  christos 	}
   7039  1.1  christos #line 7040 "config/bfin-parse.c"
   7040  1.1  christos     break;
   7041  1.1  christos 
   7042  1.1  christos   case 285: /* reg_with_predec: LBRACK _MINUS_MINUS REG RBRACK  */
   7043  1.1  christos #line 4047 "./config/bfin-parse.y"
   7044  1.1  christos         {
   7045  1.1  christos 	(yyval.reg) = (yyvsp[-1].reg);
   7046  1.1  christos 	}
   7047  1.1  christos #line 7048 "config/bfin-parse.c"
   7048  1.1  christos     break;
   7049  1.1  christos 
   7050  1.1  christos   case 286: /* reg_with_postinc: LBRACK REG _PLUS_PLUS RBRACK  */
   7051  1.1  christos #line 4053 "./config/bfin-parse.y"
   7052  1.1  christos         {
   7053  1.1  christos 	(yyval.reg) = (yyvsp[-2].reg);
   7054  1.1  christos 	}
   7055  1.1  christos #line 7056 "config/bfin-parse.c"
   7056  1.1  christos     break;
   7057  1.1  christos 
   7058  1.1  christos   case 287: /* min_max: MIN  */
   7059  1.1  christos #line 4062 "./config/bfin-parse.y"
   7060  1.1  christos         {
   7061  1.1  christos 	(yyval.r0).r0 = 1;
   7062  1.1  christos 	}
   7063  1.1  christos #line 7064 "config/bfin-parse.c"
   7064  1.1  christos     break;
   7065  1.1  christos 
   7066  1.1  christos   case 288: /* min_max: MAX  */
   7067  1.1  christos #line 4066 "./config/bfin-parse.y"
   7068  1.1  christos         {
   7069  1.1  christos 	(yyval.r0).r0 = 0;
   7070  1.1  christos 	}
   7071  1.1  christos #line 7072 "config/bfin-parse.c"
   7072  1.1  christos     break;
   7073  1.1  christos 
   7074  1.1  christos   case 289: /* op_bar_op: _PLUS_BAR_PLUS  */
   7075  1.1  christos #line 4073 "./config/bfin-parse.y"
   7076  1.1  christos         {
   7077  1.1  christos 	(yyval.r0).r0 = 0;
   7078  1.1  christos 	}
   7079  1.1  christos #line 7080 "config/bfin-parse.c"
   7080  1.1  christos     break;
   7081  1.1  christos 
   7082  1.1  christos   case 290: /* op_bar_op: _PLUS_BAR_MINUS  */
   7083  1.1  christos #line 4077 "./config/bfin-parse.y"
   7084  1.1  christos         {
   7085  1.1  christos 	(yyval.r0).r0 = 1;
   7086  1.1  christos 	}
   7087  1.1  christos #line 7088 "config/bfin-parse.c"
   7088  1.1  christos     break;
   7089  1.1  christos 
   7090  1.1  christos   case 291: /* op_bar_op: _MINUS_BAR_PLUS  */
   7091  1.1  christos #line 4081 "./config/bfin-parse.y"
   7092  1.1  christos         {
   7093  1.1  christos 	(yyval.r0).r0 = 2;
   7094  1.1  christos 	}
   7095  1.1  christos #line 7096 "config/bfin-parse.c"
   7096  1.1  christos     break;
   7097  1.1  christos 
   7098  1.1  christos   case 292: /* op_bar_op: _MINUS_BAR_MINUS  */
   7099  1.1  christos #line 4085 "./config/bfin-parse.y"
   7100  1.1  christos         {
   7101  1.1  christos 	(yyval.r0).r0 = 3;
   7102  1.1  christos 	}
   7103  1.1  christos #line 7104 "config/bfin-parse.c"
   7104  1.1  christos     break;
   7105  1.1  christos 
   7106  1.1  christos   case 293: /* plus_minus: PLUS  */
   7107  1.1  christos #line 4092 "./config/bfin-parse.y"
   7108  1.1  christos         {
   7109  1.1  christos 	(yyval.r0).r0 = 0;
   7110  1.1  christos 	}
   7111  1.1  christos #line 7112 "config/bfin-parse.c"
   7112  1.1  christos     break;
   7113  1.1  christos 
   7114  1.1  christos   case 294: /* plus_minus: MINUS  */
   7115  1.1  christos #line 4096 "./config/bfin-parse.y"
   7116  1.1  christos         {
   7117  1.1  christos 	(yyval.r0).r0 = 1;
   7118  1.1  christos 	}
   7119  1.1  christos #line 7120 "config/bfin-parse.c"
   7120  1.1  christos     break;
   7121  1.1  christos 
   7122  1.1  christos   case 295: /* rnd_op: LPAREN RNDH RPAREN  */
   7123  1.1  christos #line 4103 "./config/bfin-parse.y"
   7124  1.1  christos         {
   7125  1.1  christos 	  (yyval.modcodes).r0 = 1;	/* HL.  */
   7126  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7127  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7128  1.1  christos 	  (yyval.modcodes).aop = 0;	/* aop.  */
   7129  1.1  christos 	}
   7130  1.1  christos #line 7131 "config/bfin-parse.c"
   7131  1.1  christos     break;
   7132  1.1  christos 
   7133  1.1  christos   case 296: /* rnd_op: LPAREN TH RPAREN  */
   7134  1.1  christos #line 4111 "./config/bfin-parse.y"
   7135  1.1  christos         {
   7136  1.1  christos 	  (yyval.modcodes).r0 = 1;	/* HL.  */
   7137  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7138  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7139  1.1  christos 	  (yyval.modcodes).aop = 1;	/* aop.  */
   7140  1.1  christos 	}
   7141  1.1  christos #line 7142 "config/bfin-parse.c"
   7142  1.1  christos     break;
   7143  1.1  christos 
   7144  1.1  christos   case 297: /* rnd_op: LPAREN RNDL RPAREN  */
   7145  1.1  christos #line 4119 "./config/bfin-parse.y"
   7146  1.1  christos         {
   7147  1.1  christos 	  (yyval.modcodes).r0 = 0;	/* HL.  */
   7148  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7149  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7150  1.1  christos 	  (yyval.modcodes).aop = 0;	/* aop.  */
   7151  1.1  christos 	}
   7152  1.1  christos #line 7153 "config/bfin-parse.c"
   7153  1.1  christos     break;
   7154  1.1  christos 
   7155  1.1  christos   case 298: /* rnd_op: LPAREN TL RPAREN  */
   7156  1.1  christos #line 4127 "./config/bfin-parse.y"
   7157  1.1  christos         {
   7158  1.1  christos 	  (yyval.modcodes).r0 = 0;	/* HL.  */
   7159  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7160  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7161  1.1  christos 	  (yyval.modcodes).aop = 1;
   7162  1.1  christos 	}
   7163  1.1  christos #line 7164 "config/bfin-parse.c"
   7164  1.1  christos     break;
   7165  1.1  christos 
   7166  1.1  christos   case 299: /* rnd_op: LPAREN RNDH COMMA R RPAREN  */
   7167  1.1  christos #line 4135 "./config/bfin-parse.y"
   7168  1.1  christos         {
   7169  1.1  christos 	  (yyval.modcodes).r0 = 1;	/* HL.  */
   7170  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7171  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7172  1.1  christos 	  (yyval.modcodes).aop = 0;	/* aop.  */
   7173  1.1  christos 	}
   7174  1.1  christos #line 7175 "config/bfin-parse.c"
   7175  1.1  christos     break;
   7176  1.1  christos 
   7177  1.1  christos   case 300: /* rnd_op: LPAREN TH COMMA R RPAREN  */
   7178  1.1  christos #line 4142 "./config/bfin-parse.y"
   7179  1.1  christos         {
   7180  1.1  christos 	  (yyval.modcodes).r0 = 1;	/* HL.  */
   7181  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7182  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7183  1.1  christos 	  (yyval.modcodes).aop = 1;	/* aop.  */
   7184  1.1  christos 	}
   7185  1.1  christos #line 7186 "config/bfin-parse.c"
   7186  1.1  christos     break;
   7187  1.1  christos 
   7188  1.1  christos   case 301: /* rnd_op: LPAREN RNDL COMMA R RPAREN  */
   7189  1.1  christos #line 4149 "./config/bfin-parse.y"
   7190  1.1  christos         {
   7191  1.1  christos 	  (yyval.modcodes).r0 = 0;	/* HL.  */
   7192  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7193  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7194  1.1  christos 	  (yyval.modcodes).aop = 0;	/* aop.  */
   7195  1.1  christos 	}
   7196  1.1  christos #line 7197 "config/bfin-parse.c"
   7197  1.1  christos     break;
   7198  1.1  christos 
   7199  1.1  christos   case 302: /* rnd_op: LPAREN TL COMMA R RPAREN  */
   7200  1.1  christos #line 4157 "./config/bfin-parse.y"
   7201  1.1  christos         {
   7202  1.1  christos 	  (yyval.modcodes).r0 = 0;	/* HL.  */
   7203  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7204  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* x.  */
   7205  1.1  christos 	  (yyval.modcodes).aop = 1;	/* aop.  */
   7206  1.1  christos 	}
   7207  1.1  christos #line 7208 "config/bfin-parse.c"
   7208  1.1  christos     break;
   7209  1.1  christos 
   7210  1.1  christos   case 303: /* b3_op: LPAREN LO RPAREN  */
   7211  1.1  christos #line 4167 "./config/bfin-parse.y"
   7212  1.1  christos         {
   7213  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7214  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* HL.  */
   7215  1.1  christos 	}
   7216  1.1  christos #line 7217 "config/bfin-parse.c"
   7217  1.1  christos     break;
   7218  1.1  christos 
   7219  1.1  christos   case 304: /* b3_op: LPAREN HI RPAREN  */
   7220  1.1  christos #line 4172 "./config/bfin-parse.y"
   7221  1.1  christos         {
   7222  1.1  christos 	  (yyval.modcodes).s0 = 0;	/* s.  */
   7223  1.1  christos 	  (yyval.modcodes).x0 = 1;	/* HL.  */
   7224  1.1  christos 	}
   7225  1.1  christos #line 7226 "config/bfin-parse.c"
   7226  1.1  christos     break;
   7227  1.1  christos 
   7228  1.1  christos   case 305: /* b3_op: LPAREN LO COMMA R RPAREN  */
   7229  1.1  christos #line 4177 "./config/bfin-parse.y"
   7230  1.1  christos         {
   7231  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7232  1.1  christos 	  (yyval.modcodes).x0 = 0;	/* HL.  */
   7233  1.1  christos 	}
   7234  1.1  christos #line 7235 "config/bfin-parse.c"
   7235  1.1  christos     break;
   7236  1.1  christos 
   7237  1.1  christos   case 306: /* b3_op: LPAREN HI COMMA R RPAREN  */
   7238  1.1  christos #line 4182 "./config/bfin-parse.y"
   7239  1.1  christos         {
   7240  1.1  christos 	  (yyval.modcodes).s0 = 1;	/* s.  */
   7241  1.1  christos 	  (yyval.modcodes).x0 = 1;	/* HL.  */
   7242  1.1  christos 	}
   7243  1.1  christos #line 7244 "config/bfin-parse.c"
   7244  1.1  christos     break;
   7245  1.1  christos 
   7246  1.1  christos   case 307: /* post_op: %empty  */
   7247  1.1  christos #line 4189 "./config/bfin-parse.y"
   7248  1.1  christos         {
   7249  1.1  christos 	(yyval.modcodes).x0 = 2;
   7250  1.1  christos 	}
   7251  1.1  christos #line 7252 "config/bfin-parse.c"
   7252  1.1  christos     break;
   7253  1.1  christos 
   7254  1.1  christos   case 308: /* post_op: _PLUS_PLUS  */
   7255  1.1  christos #line 4193 "./config/bfin-parse.y"
   7256  1.1  christos         {
   7257  1.1  christos 	(yyval.modcodes).x0 = 0;
   7258  1.1  christos 	}
   7259  1.1  christos #line 7260 "config/bfin-parse.c"
   7260  1.1  christos     break;
   7261  1.1  christos 
   7262  1.1  christos   case 309: /* post_op: _MINUS_MINUS  */
   7263  1.1  christos #line 4197 "./config/bfin-parse.y"
   7264  1.1  christos         {
   7265  1.1  christos 	(yyval.modcodes).x0 = 1;
   7266  1.1  christos 	}
   7267  1.1  christos #line 7268 "config/bfin-parse.c"
   7268  1.1  christos     break;
   7269  1.1  christos 
   7270  1.1  christos   case 310: /* a_assign: REG_A ASSIGN  */
   7271  1.1  christos #line 4206 "./config/bfin-parse.y"
   7272  1.1  christos         {
   7273  1.1  christos 	(yyval.reg) = (yyvsp[-1].reg);
   7274  1.1  christos 	}
   7275  1.1  christos #line 7276 "config/bfin-parse.c"
   7276  1.1  christos     break;
   7277  1.1  christos 
   7278  1.1  christos   case 311: /* a_minusassign: REG_A _MINUS_ASSIGN  */
   7279  1.1  christos #line 4213 "./config/bfin-parse.y"
   7280  1.1  christos         {
   7281  1.1  christos 	(yyval.reg) = (yyvsp[-1].reg);
   7282  1.1  christos 	}
   7283  1.1  christos #line 7284 "config/bfin-parse.c"
   7284  1.1  christos     break;
   7285  1.1  christos 
   7286  1.1  christos   case 312: /* a_plusassign: REG_A _PLUS_ASSIGN  */
   7287  1.1  christos #line 4220 "./config/bfin-parse.y"
   7288  1.1  christos         {
   7289  1.1  christos 	(yyval.reg) = (yyvsp[-1].reg);
   7290  1.1  christos 	}
   7291  1.1  christos #line 7292 "config/bfin-parse.c"
   7292  1.1  christos     break;
   7293  1.1  christos 
   7294  1.1  christos   case 313: /* assign_macfunc: REG ASSIGN REG_A  */
   7295  1.1  christos #line 4227 "./config/bfin-parse.y"
   7296  1.1  christos         {
   7297  1.1  christos 	  if (IS_A1 ((yyvsp[0].reg)) && IS_EVEN ((yyvsp[-2].reg)))
   7298  1.1  christos 	    return yyerror ("Cannot move A1 to even register");
   7299  1.1  christos 	  else if (!IS_A1 ((yyvsp[0].reg)) && !IS_EVEN ((yyvsp[-2].reg)))
   7300  1.1  christos 	    return yyerror ("Cannot move A0 to odd register");
   7301  1.1  christos 
   7302  1.1  christos 	  (yyval.macfunc).w = 1;
   7303  1.1  christos           (yyval.macfunc).P = 1;
   7304  1.1  christos           (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
   7305  1.1  christos 	  (yyval.macfunc).op = 3;
   7306  1.1  christos           (yyval.macfunc).dst = (yyvsp[-2].reg);
   7307  1.1  christos 	  (yyval.macfunc).s0.regno = 0;
   7308  1.1  christos           (yyval.macfunc).s1.regno = 0;
   7309  1.1  christos 	}
   7310  1.1  christos #line 7311 "config/bfin-parse.c"
   7311  1.1  christos     break;
   7312  1.1  christos 
   7313  1.1  christos   case 314: /* assign_macfunc: a_macfunc  */
   7314  1.1  christos #line 4242 "./config/bfin-parse.y"
   7315  1.1  christos         {
   7316  1.1  christos 	  (yyval.macfunc) = (yyvsp[0].macfunc);
   7317  1.1  christos 	  (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
   7318  1.1  christos 	  (yyval.macfunc).dst.regno = 0;
   7319  1.1  christos 	}
   7320  1.1  christos #line 7321 "config/bfin-parse.c"
   7321  1.1  christos     break;
   7322  1.1  christos 
   7323  1.1  christos   case 315: /* assign_macfunc: REG ASSIGN LPAREN a_macfunc RPAREN  */
   7324  1.1  christos #line 4248 "./config/bfin-parse.y"
   7325  1.1  christos         {
   7326  1.1  christos 	  if ((yyvsp[-1].macfunc).n && IS_EVEN ((yyvsp[-4].reg)))
   7327  1.1  christos 	    return yyerror ("Cannot move A1 to even register");
   7328  1.1  christos 	  else if (!(yyvsp[-1].macfunc).n && !IS_EVEN ((yyvsp[-4].reg)))
   7329  1.1  christos 	    return yyerror ("Cannot move A0 to odd register");
   7330  1.1  christos 
   7331  1.1  christos 	  (yyval.macfunc) = (yyvsp[-1].macfunc);
   7332  1.1  christos 	  (yyval.macfunc).w = 1;
   7333  1.1  christos           (yyval.macfunc).P = 1;
   7334  1.1  christos           (yyval.macfunc).dst = (yyvsp[-4].reg);
   7335  1.1  christos 	}
   7336  1.1  christos #line 7337 "config/bfin-parse.c"
   7337  1.1  christos     break;
   7338  1.1  christos 
   7339  1.1  christos   case 316: /* assign_macfunc: HALF_REG ASSIGN LPAREN a_macfunc RPAREN  */
   7340  1.1  christos #line 4261 "./config/bfin-parse.y"
   7341  1.1  christos         {
   7342  1.1  christos 	  if ((yyvsp[-1].macfunc).n && !IS_H ((yyvsp[-4].reg)))
   7343  1.1  christos 	    return yyerror ("Cannot move A1 to low half of register");
   7344  1.1  christos 	  else if (!(yyvsp[-1].macfunc).n && IS_H ((yyvsp[-4].reg)))
   7345  1.1  christos 	    return yyerror ("Cannot move A0 to high half of register");
   7346  1.1  christos 
   7347  1.1  christos 	  (yyval.macfunc) = (yyvsp[-1].macfunc);
   7348  1.1  christos 	  (yyval.macfunc).w = 1;
   7349  1.1  christos 	  (yyval.macfunc).P = 0;
   7350  1.1  christos           (yyval.macfunc).dst = (yyvsp[-4].reg);
   7351  1.1  christos 	}
   7352  1.1  christos #line 7353 "config/bfin-parse.c"
   7353  1.1  christos     break;
   7354  1.1  christos 
   7355  1.1  christos   case 317: /* assign_macfunc: HALF_REG ASSIGN REG_A  */
   7356  1.1  christos #line 4274 "./config/bfin-parse.y"
   7357  1.1  christos         {
   7358  1.1  christos 	  if (IS_A1 ((yyvsp[0].reg)) && !IS_H ((yyvsp[-2].reg)))
   7359  1.1  christos 	    return yyerror ("Cannot move A1 to low half of register");
   7360  1.1  christos 	  else if (!IS_A1 ((yyvsp[0].reg)) && IS_H ((yyvsp[-2].reg)))
   7361  1.1  christos 	    return yyerror ("Cannot move A0 to high half of register");
   7362  1.1  christos 
   7363  1.1  christos 	  (yyval.macfunc).w = 1;
   7364  1.1  christos 	  (yyval.macfunc).P = 0;
   7365  1.1  christos 	  (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
   7366  1.1  christos 	  (yyval.macfunc).op = 3;
   7367  1.1  christos           (yyval.macfunc).dst = (yyvsp[-2].reg);
   7368  1.1  christos 	  (yyval.macfunc).s0.regno = 0;
   7369  1.1  christos           (yyval.macfunc).s1.regno = 0;
   7370  1.1  christos 	}
   7371  1.1  christos #line 7372 "config/bfin-parse.c"
   7372  1.1  christos     break;
   7373  1.1  christos 
   7374  1.1  christos   case 318: /* a_macfunc: a_assign multiply_halfregs  */
   7375  1.1  christos #line 4292 "./config/bfin-parse.y"
   7376  1.1  christos         {
   7377  1.1  christos 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
   7378  1.1  christos 	  (yyval.macfunc).op = 0;
   7379  1.1  christos 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
   7380  1.1  christos 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
   7381  1.1  christos 	}
   7382  1.1  christos #line 7383 "config/bfin-parse.c"
   7383  1.1  christos     break;
   7384  1.1  christos 
   7385  1.1  christos   case 319: /* a_macfunc: a_plusassign multiply_halfregs  */
   7386  1.1  christos #line 4299 "./config/bfin-parse.y"
   7387  1.1  christos         {
   7388  1.1  christos 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
   7389  1.1  christos 	  (yyval.macfunc).op = 1;
   7390  1.1  christos 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
   7391  1.1  christos 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
   7392  1.1  christos 	}
   7393  1.1  christos #line 7394 "config/bfin-parse.c"
   7394  1.1  christos     break;
   7395  1.1  christos 
   7396  1.1  christos   case 320: /* a_macfunc: a_minusassign multiply_halfregs  */
   7397  1.1  christos #line 4306 "./config/bfin-parse.y"
   7398  1.1  christos         {
   7399  1.1  christos 	  (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
   7400  1.1  christos 	  (yyval.macfunc).op = 2;
   7401  1.1  christos 	  (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
   7402  1.1  christos 	  (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
   7403  1.1  christos 	}
   7404  1.1  christos #line 7405 "config/bfin-parse.c"
   7405  1.1  christos     break;
   7406  1.1  christos 
   7407  1.1  christos   case 321: /* multiply_halfregs: HALF_REG STAR HALF_REG  */
   7408  1.1  christos #line 4316 "./config/bfin-parse.y"
   7409  1.1  christos         {
   7410  1.1  christos 	  if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
   7411  1.1  christos 	    {
   7412  1.1  christos 	      (yyval.macfunc).s0 = (yyvsp[-2].reg);
   7413  1.1  christos               (yyval.macfunc).s1 = (yyvsp[0].reg);
   7414  1.1  christos 	    }
   7415  1.1  christos 	  else
   7416  1.1  christos 	    return yyerror ("Dregs expected");
   7417  1.1  christos 	}
   7418  1.1  christos #line 7419 "config/bfin-parse.c"
   7419  1.1  christos     break;
   7420  1.1  christos 
   7421  1.1  christos   case 322: /* cc_op: ASSIGN  */
   7422  1.1  christos #line 4329 "./config/bfin-parse.y"
   7423  1.1  christos         {
   7424  1.1  christos 	(yyval.r0).r0 = 0;
   7425  1.1  christos 	}
   7426  1.1  christos #line 7427 "config/bfin-parse.c"
   7427  1.1  christos     break;
   7428  1.1  christos 
   7429  1.1  christos   case 323: /* cc_op: _BAR_ASSIGN  */
   7430  1.1  christos #line 4333 "./config/bfin-parse.y"
   7431  1.1  christos         {
   7432  1.1  christos 	(yyval.r0).r0 = 1;
   7433  1.1  christos 	}
   7434  1.1  christos #line 7435 "config/bfin-parse.c"
   7435  1.1  christos     break;
   7436  1.1  christos 
   7437  1.1  christos   case 324: /* cc_op: _AMPERSAND_ASSIGN  */
   7438  1.1  christos #line 4337 "./config/bfin-parse.y"
   7439  1.1  christos         {
   7440  1.1  christos 	(yyval.r0).r0 = 2;
   7441  1.1  christos 	}
   7442  1.1  christos #line 7443 "config/bfin-parse.c"
   7443  1.1  christos     break;
   7444  1.1  christos 
   7445  1.1  christos   case 325: /* cc_op: _CARET_ASSIGN  */
   7446  1.1  christos #line 4341 "./config/bfin-parse.y"
   7447  1.1  christos         {
   7448  1.1  christos 	(yyval.r0).r0 = 3;
   7449  1.1  christos 	}
   7450  1.1  christos #line 7451 "config/bfin-parse.c"
   7451  1.1  christos     break;
   7452  1.1  christos 
   7453  1.1  christos   case 326: /* ccstat: CCREG cc_op STATUS_REG  */
   7454  1.1  christos #line 4348 "./config/bfin-parse.y"
   7455  1.1  christos         {
   7456  1.1  christos 	  (yyval.modcodes).r0 = (yyvsp[0].reg).regno;
   7457  1.1  christos 	  (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
   7458  1.1  christos 	  (yyval.modcodes).s0 = 0;
   7459  1.1  christos 	}
   7460  1.1  christos #line 7461 "config/bfin-parse.c"
   7461  1.1  christos     break;
   7462  1.1  christos 
   7463  1.1  christos   case 327: /* ccstat: CCREG cc_op V  */
   7464  1.1  christos #line 4354 "./config/bfin-parse.y"
   7465  1.1  christos         {
   7466  1.1  christos 	  (yyval.modcodes).r0 = 0x18;
   7467  1.1  christos 	  (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
   7468  1.1  christos 	  (yyval.modcodes).s0 = 0;
   7469  1.1  christos 	}
   7470  1.1  christos #line 7471 "config/bfin-parse.c"
   7471  1.1  christos     break;
   7472  1.1  christos 
   7473  1.1  christos   case 328: /* ccstat: STATUS_REG cc_op CCREG  */
   7474  1.1  christos #line 4360 "./config/bfin-parse.y"
   7475  1.1  christos         {
   7476  1.1  christos 	  (yyval.modcodes).r0 = (yyvsp[-2].reg).regno;
   7477  1.1  christos 	  (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
   7478  1.1  christos 	  (yyval.modcodes).s0 = 1;
   7479  1.1  christos 	}
   7480  1.1  christos #line 7481 "config/bfin-parse.c"
   7481  1.1  christos     break;
   7482  1.1  christos 
   7483  1.1  christos   case 329: /* ccstat: V cc_op CCREG  */
   7484  1.1  christos #line 4366 "./config/bfin-parse.y"
   7485  1.1  christos         {
   7486  1.1  christos 	  (yyval.modcodes).r0 = 0x18;
   7487  1.1  christos 	  (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
   7488  1.1  christos 	  (yyval.modcodes).s0 = 1;
   7489  1.1  christos 	}
   7490  1.1  christos #line 7491 "config/bfin-parse.c"
   7491  1.1  christos     break;
   7492  1.1  christos 
   7493  1.1  christos   case 330: /* symbol: SYMBOL  */
   7494  1.1  christos #line 4376 "./config/bfin-parse.y"
   7495  1.1  christos         {
   7496  1.1  christos 	Expr_Node_Value val;
   7497  1.1  christos 	val.s_value = S_GET_NAME((yyvsp[0].symbol));
   7498  1.1  christos 	(yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
   7499  1.1  christos 	}
   7500  1.1  christos #line 7501 "config/bfin-parse.c"
   7501  1.1  christos     break;
   7502  1.1  christos 
   7503  1.1  christos   case 331: /* any_gotrel: GOT  */
   7504  1.1  christos #line 4385 "./config/bfin-parse.y"
   7505  1.1  christos         { (yyval.value) = BFD_RELOC_BFIN_GOT; }
   7506  1.1  christos #line 7507 "config/bfin-parse.c"
   7507  1.1  christos     break;
   7508  1.1  christos 
   7509  1.1  christos   case 332: /* any_gotrel: GOT17M4  */
   7510  1.1  christos #line 4387 "./config/bfin-parse.y"
   7511  1.1  christos         { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
   7512  1.1  christos #line 7513 "config/bfin-parse.c"
   7513  1.1  christos     break;
   7514  1.1  christos 
   7515  1.1  christos   case 333: /* any_gotrel: FUNCDESC_GOT17M4  */
   7516  1.1  christos #line 4389 "./config/bfin-parse.y"
   7517  1.1  christos         { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
   7518  1.1  christos #line 7519 "config/bfin-parse.c"
   7519  1.1  christos     break;
   7520  1.1  christos 
   7521  1.1  christos   case 334: /* got: symbol AT any_gotrel  */
   7522  1.1  christos #line 4393 "./config/bfin-parse.y"
   7523  1.1  christos         {
   7524  1.1  christos 	Expr_Node_Value val;
   7525  1.1  christos 	val.i_value = (yyvsp[0].value);
   7526  1.1  christos 	(yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[-2].expr), NULL);
   7527  1.1  christos 	}
   7528  1.1  christos #line 7529 "config/bfin-parse.c"
   7529  1.1  christos     break;
   7530  1.1  christos 
   7531  1.1  christos   case 335: /* got_or_expr: got  */
   7532  1.1  christos #line 4401 "./config/bfin-parse.y"
   7533  1.1  christos         {
   7534  1.1  christos 	(yyval.expr) = (yyvsp[0].expr);
   7535  1.1  christos 	}
   7536  1.1  christos #line 7537 "config/bfin-parse.c"
   7537  1.1  christos     break;
   7538  1.1  christos 
   7539  1.1  christos   case 336: /* got_or_expr: expr  */
   7540  1.1  christos #line 4405 "./config/bfin-parse.y"
   7541  1.1  christos         {
   7542  1.1  christos 	(yyval.expr) = (yyvsp[0].expr);
   7543  1.1  christos 	}
   7544  1.1  christos #line 7545 "config/bfin-parse.c"
   7545  1.1  christos     break;
   7546  1.1  christos 
   7547  1.1  christos   case 337: /* pltpc: symbol AT PLTPC  */
   7548  1.1  christos #line 4412 "./config/bfin-parse.y"
   7549  1.1  christos         {
   7550  1.1  christos 	(yyval.expr) = (yyvsp[-2].expr);
   7551  1.1  christos 	}
   7552  1.1  christos #line 7553 "config/bfin-parse.c"
   7553  1.1  christos     break;
   7554  1.1  christos 
   7555  1.1  christos   case 338: /* eterm: NUMBER  */
   7556  1.1  christos #line 4418 "./config/bfin-parse.y"
   7557  1.1  christos         {
   7558  1.1  christos 	Expr_Node_Value val;
   7559  1.1  christos 	val.i_value = (yyvsp[0].value);
   7560  1.1  christos 	(yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
   7561  1.1  christos 	}
   7562  1.1  christos #line 7563 "config/bfin-parse.c"
   7563  1.1  christos     break;
   7564  1.1  christos 
   7565  1.1  christos   case 339: /* eterm: symbol  */
   7566  1.1  christos #line 4424 "./config/bfin-parse.y"
   7567  1.1  christos         {
   7568  1.1  christos 	(yyval.expr) = (yyvsp[0].expr);
   7569  1.1  christos 	}
   7570  1.1  christos #line 7571 "config/bfin-parse.c"
   7571  1.1  christos     break;
   7572  1.1  christos 
   7573  1.1  christos   case 340: /* eterm: LPAREN expr_1 RPAREN  */
   7574  1.1  christos #line 4428 "./config/bfin-parse.y"
   7575  1.1  christos         {
   7576  1.1  christos 	(yyval.expr) = (yyvsp[-1].expr);
   7577  1.1  christos 	}
   7578  1.1  christos #line 7579 "config/bfin-parse.c"
   7579  1.1  christos     break;
   7580  1.1  christos 
   7581  1.1  christos   case 341: /* eterm: TILDA expr_1  */
   7582  1.1  christos #line 4432 "./config/bfin-parse.y"
   7583  1.1  christos         {
   7584  1.1  christos 	(yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[0].expr));
   7585  1.1  christos 	}
   7586  1.1  christos #line 7587 "config/bfin-parse.c"
   7587  1.1  christos     break;
   7588  1.1  christos 
   7589  1.1  christos   case 342: /* eterm: MINUS expr_1  */
   7590  1.1  christos #line 4436 "./config/bfin-parse.y"
   7591  1.1  christos         {
   7592  1.1  christos 	(yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[0].expr));
   7593  1.1  christos 	}
   7594  1.1  christos #line 7595 "config/bfin-parse.c"
   7595  1.1  christos     break;
   7596  1.1  christos 
   7597  1.1  christos   case 343: /* expr: expr_1  */
   7598  1.1  christos #line 4442 "./config/bfin-parse.y"
   7599  1.1  christos         {
   7600  1.1  christos 	(yyval.expr) = (yyvsp[0].expr);
   7601  1.1  christos 	}
   7602  1.1  christos #line 7603 "config/bfin-parse.c"
   7603  1.1  christos     break;
   7604  1.1  christos 
   7605  1.1  christos   case 344: /* expr_1: expr_1 STAR expr_1  */
   7606  1.1  christos #line 4448 "./config/bfin-parse.y"
   7607  1.1  christos         {
   7608  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[-2].expr), (yyvsp[0].expr));
   7609  1.1  christos 	}
   7610  1.1  christos #line 7611 "config/bfin-parse.c"
   7611  1.1  christos     break;
   7612  1.1  christos 
   7613  1.1  christos   case 345: /* expr_1: expr_1 SLASH expr_1  */
   7614  1.1  christos #line 4452 "./config/bfin-parse.y"
   7615  1.1  christos         {
   7616  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[-2].expr), (yyvsp[0].expr));
   7617  1.1  christos 	}
   7618  1.1  christos #line 7619 "config/bfin-parse.c"
   7619  1.1  christos     break;
   7620  1.1  christos 
   7621  1.1  christos   case 346: /* expr_1: expr_1 PERCENT expr_1  */
   7622  1.1  christos #line 4456 "./config/bfin-parse.y"
   7623  1.1  christos         {
   7624  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[-2].expr), (yyvsp[0].expr));
   7625  1.1  christos 	}
   7626  1.1  christos #line 7627 "config/bfin-parse.c"
   7627  1.1  christos     break;
   7628  1.1  christos 
   7629  1.1  christos   case 347: /* expr_1: expr_1 PLUS expr_1  */
   7630  1.1  christos #line 4460 "./config/bfin-parse.y"
   7631  1.1  christos         {
   7632  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[-2].expr), (yyvsp[0].expr));
   7633  1.1  christos 	}
   7634  1.1  christos #line 7635 "config/bfin-parse.c"
   7635  1.1  christos     break;
   7636  1.1  christos 
   7637  1.1  christos   case 348: /* expr_1: expr_1 MINUS expr_1  */
   7638  1.1  christos #line 4464 "./config/bfin-parse.y"
   7639  1.1  christos         {
   7640  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[-2].expr), (yyvsp[0].expr));
   7641  1.1  christos 	}
   7642  1.1  christos #line 7643 "config/bfin-parse.c"
   7643  1.1  christos     break;
   7644  1.1  christos 
   7645  1.1  christos   case 349: /* expr_1: expr_1 LESS_LESS expr_1  */
   7646  1.1  christos #line 4468 "./config/bfin-parse.y"
   7647  1.1  christos         {
   7648  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[-2].expr), (yyvsp[0].expr));
   7649  1.1  christos 	}
   7650  1.1  christos #line 7651 "config/bfin-parse.c"
   7651  1.1  christos     break;
   7652  1.1  christos 
   7653  1.1  christos   case 350: /* expr_1: expr_1 GREATER_GREATER expr_1  */
   7654  1.1  christos #line 4472 "./config/bfin-parse.y"
   7655  1.1  christos         {
   7656  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[-2].expr), (yyvsp[0].expr));
   7657  1.1  christos 	}
   7658  1.1  christos #line 7659 "config/bfin-parse.c"
   7659  1.1  christos     break;
   7660  1.1  christos 
   7661  1.1  christos   case 351: /* expr_1: expr_1 AMPERSAND expr_1  */
   7662  1.1  christos #line 4476 "./config/bfin-parse.y"
   7663  1.1  christos         {
   7664  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[-2].expr), (yyvsp[0].expr));
   7665  1.1  christos 	}
   7666  1.1  christos #line 7667 "config/bfin-parse.c"
   7667  1.1  christos     break;
   7668  1.1  christos 
   7669  1.1  christos   case 352: /* expr_1: expr_1 CARET expr_1  */
   7670  1.1  christos #line 4480 "./config/bfin-parse.y"
   7671  1.1  christos         {
   7672  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[-2].expr), (yyvsp[0].expr));
   7673  1.1  christos 	}
   7674  1.1  christos #line 7675 "config/bfin-parse.c"
   7675  1.1  christos     break;
   7676  1.1  christos 
   7677  1.1  christos   case 353: /* expr_1: expr_1 BAR expr_1  */
   7678  1.1  christos #line 4484 "./config/bfin-parse.y"
   7679  1.1  christos         {
   7680  1.1  christos 	(yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[-2].expr), (yyvsp[0].expr));
   7681  1.1  christos 	}
   7682  1.1  christos #line 7683 "config/bfin-parse.c"
   7683  1.1  christos     break;
   7684  1.1  christos 
   7685  1.1  christos   case 354: /* expr_1: eterm  */
   7686  1.1  christos #line 4488 "./config/bfin-parse.y"
   7687  1.1  christos         {
   7688  1.1  christos 	(yyval.expr) = (yyvsp[0].expr);
   7689  1.1  christos 	}
   7690  1.1  christos #line 7691 "config/bfin-parse.c"
   7691  1.1  christos     break;
   7692  1.1  christos 
   7693  1.1  christos 
   7694  1.1  christos #line 7695 "config/bfin-parse.c"
   7695  1.1  christos 
   7696  1.1  christos       default: break;
   7697  1.1  christos     }
   7698  1.1  christos   /* User semantic actions sometimes alter yychar, and that requires
   7699  1.1  christos      that yytoken be updated with the new translation.  We take the
   7700  1.1  christos      approach of translating immediately before every use of yytoken.
   7701  1.1  christos      One alternative is translating here after every semantic action,
   7702  1.1  christos      but that translation would be missed if the semantic action invokes
   7703  1.1  christos      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
   7704  1.1  christos      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
   7705  1.1  christos      incorrect destructor might then be invoked immediately.  In the
   7706  1.1  christos      case of YYERROR or YYBACKUP, subsequent parser actions might lead
   7707  1.1  christos      to an incorrect destructor call or verbose syntax error message
   7708  1.1  christos      before the lookahead is translated.  */
   7709  1.1  christos   YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
   7710  1.1  christos 
   7711  1.1  christos   YYPOPSTACK (yylen);
   7712  1.1  christos   yylen = 0;
   7713  1.1  christos 
   7714  1.1  christos   *++yyvsp = yyval;
   7715  1.1  christos 
   7716  1.1  christos   /* Now 'shift' the result of the reduction.  Determine what state
   7717  1.1  christos      that goes to, based on the state we popped back to and the rule
   7718  1.1  christos      number reduced by.  */
   7719  1.1  christos   {
   7720  1.1  christos     const int yylhs = yyr1[yyn] - YYNTOKENS;
   7721  1.1  christos     const int yyi = yypgoto[yylhs] + *yyssp;
   7722  1.1  christos     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
   7723  1.1  christos                ? yytable[yyi]
   7724  1.1  christos                : yydefgoto[yylhs]);
   7725  1.1  christos   }
   7726  1.1  christos 
   7727  1.1  christos   goto yynewstate;
   7728  1.1  christos 
   7729  1.1  christos 
   7730  1.1  christos /*--------------------------------------.
   7731  1.1  christos | yyerrlab -- here on detecting error.  |
   7732  1.1  christos `--------------------------------------*/
   7733  1.1  christos yyerrlab:
   7734  1.1  christos   /* Make sure we have latest lookahead translation.  See comments at
   7735  1.1  christos      user semantic actions for why this is necessary.  */
   7736  1.1  christos   yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   7737  1.1  christos   /* If not already recovering from an error, report this error.  */
   7738  1.1  christos   if (!yyerrstatus)
   7739  1.1  christos     {
   7740  1.1  christos       ++yynerrs;
   7741  1.1  christos       yyerror (YY_("syntax error"));
   7742  1.1  christos     }
   7743  1.1  christos 
   7744  1.1  christos   if (yyerrstatus == 3)
   7745  1.1  christos     {
   7746  1.1  christos       /* If just tried and failed to reuse lookahead token after an
   7747  1.1  christos          error, discard it.  */
   7748  1.1  christos 
   7749  1.1  christos       if (yychar <= YYEOF)
   7750  1.1  christos         {
   7751  1.1  christos           /* Return failure if at end of input.  */
   7752  1.1  christos           if (yychar == YYEOF)
   7753  1.1  christos             YYABORT;
   7754  1.1  christos         }
   7755  1.1  christos       else
   7756  1.1  christos         {
   7757  1.1  christos           yydestruct ("Error: discarding",
   7758  1.1  christos                       yytoken, &yylval);
   7759  1.1  christos           yychar = YYEMPTY;
   7760  1.1  christos         }
   7761  1.1  christos     }
   7762  1.1  christos 
   7763  1.1  christos   /* Else will try to reuse lookahead token after shifting the error
   7764  1.1  christos      token.  */
   7765  1.1  christos   goto yyerrlab1;
   7766  1.1  christos 
   7767  1.1  christos 
   7768  1.1  christos /*---------------------------------------------------.
   7769  1.1  christos | yyerrorlab -- error raised explicitly by YYERROR.  |
   7770  1.1  christos `---------------------------------------------------*/
   7771  1.1  christos yyerrorlab:
   7772  1.1  christos   /* Pacify compilers when the user code never invokes YYERROR and the
   7773  1.1  christos      label yyerrorlab therefore never appears in user code.  */
   7774  1.1  christos   if (0)
   7775  1.1  christos     YYERROR;
   7776  1.1  christos   ++yynerrs;
   7777  1.1  christos 
   7778  1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   7779  1.1  christos      this YYERROR.  */
   7780  1.1  christos   YYPOPSTACK (yylen);
   7781  1.1  christos   yylen = 0;
   7782  1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   7783  1.1  christos   yystate = *yyssp;
   7784  1.1  christos   goto yyerrlab1;
   7785  1.1  christos 
   7786  1.1  christos 
   7787  1.1  christos /*-------------------------------------------------------------.
   7788  1.1  christos | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   7789  1.1  christos `-------------------------------------------------------------*/
   7790  1.1  christos yyerrlab1:
   7791  1.1  christos   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
   7792  1.1  christos 
   7793  1.1  christos   /* Pop stack until we find a state that shifts the error token.  */
   7794  1.1  christos   for (;;)
   7795  1.1  christos     {
   7796  1.1  christos       yyn = yypact[yystate];
   7797  1.1  christos       if (!yypact_value_is_default (yyn))
   7798  1.1  christos         {
   7799  1.1  christos           yyn += YYSYMBOL_YYerror;
   7800  1.1  christos           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
   7801  1.1  christos             {
   7802  1.1  christos               yyn = yytable[yyn];
   7803  1.1  christos               if (0 < yyn)
   7804  1.1  christos                 break;
   7805  1.1  christos             }
   7806  1.1  christos         }
   7807  1.1  christos 
   7808  1.1  christos       /* Pop the current state because it cannot handle the error token.  */
   7809  1.1  christos       if (yyssp == yyss)
   7810  1.1  christos         YYABORT;
   7811  1.1  christos 
   7812  1.1  christos 
   7813  1.1  christos       yydestruct ("Error: popping",
   7814  1.1  christos                   YY_ACCESSING_SYMBOL (yystate), yyvsp);
   7815  1.1  christos       YYPOPSTACK (1);
   7816  1.1  christos       yystate = *yyssp;
   7817  1.1  christos       YY_STACK_PRINT (yyss, yyssp);
   7818  1.1  christos     }
   7819  1.1  christos 
   7820  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   7821  1.1  christos   *++yyvsp = yylval;
   7822  1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   7823  1.1  christos 
   7824  1.1  christos 
   7825  1.1  christos   /* Shift the error token.  */
   7826  1.1  christos   YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
   7827  1.1  christos 
   7828  1.1  christos   yystate = yyn;
   7829  1.1  christos   goto yynewstate;
   7830  1.1  christos 
   7831  1.1  christos 
   7832  1.1  christos /*-------------------------------------.
   7833  1.1  christos | yyacceptlab -- YYACCEPT comes here.  |
   7834  1.1  christos `-------------------------------------*/
   7835  1.1  christos yyacceptlab:
   7836  1.1  christos   yyresult = 0;
   7837  1.1  christos   goto yyreturnlab;
   7838  1.1  christos 
   7839  1.1  christos 
   7840  1.1  christos /*-----------------------------------.
   7841  1.1  christos | yyabortlab -- YYABORT comes here.  |
   7842  1.1  christos `-----------------------------------*/
   7843  1.1  christos yyabortlab:
   7844  1.1  christos   yyresult = 1;
   7845  1.1  christos   goto yyreturnlab;
   7846  1.1  christos 
   7847  1.1  christos 
   7848  1.1  christos /*-----------------------------------------------------------.
   7849  1.1  christos | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
   7850  1.1  christos `-----------------------------------------------------------*/
   7851  1.1  christos yyexhaustedlab:
   7852  1.1  christos   yyerror (YY_("memory exhausted"));
   7853  1.1  christos   yyresult = 2;
   7854  1.1  christos   goto yyreturnlab;
   7855  1.1  christos 
   7856  1.1  christos 
   7857  1.1  christos /*----------------------------------------------------------.
   7858  1.1  christos | yyreturnlab -- parsing is finished, clean up and return.  |
   7859  1.1  christos `----------------------------------------------------------*/
   7860  1.1  christos yyreturnlab:
   7861  1.1  christos   if (yychar != YYEMPTY)
   7862  1.1  christos     {
   7863  1.1  christos       /* Make sure we have latest lookahead translation.  See comments at
   7864  1.1  christos          user semantic actions for why this is necessary.  */
   7865  1.1  christos       yytoken = YYTRANSLATE (yychar);
   7866  1.1  christos       yydestruct ("Cleanup: discarding lookahead",
   7867  1.1  christos                   yytoken, &yylval);
   7868  1.1  christos     }
   7869  1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   7870  1.1  christos      this YYABORT or YYACCEPT.  */
   7871  1.1  christos   YYPOPSTACK (yylen);
   7872  1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   7873  1.1  christos   while (yyssp != yyss)
   7874  1.1  christos     {
   7875  1.1  christos       yydestruct ("Cleanup: popping",
   7876  1.1  christos                   YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
   7877  1.1  christos       YYPOPSTACK (1);
   7878  1.1  christos     }
   7879  1.1  christos #ifndef yyoverflow
   7880  1.1  christos   if (yyss != yyssa)
   7881  1.1  christos     YYSTACK_FREE (yyss);
   7882  1.1  christos #endif
   7883  1.1  christos 
   7884  1.1  christos   return yyresult;
   7885  1.1  christos }
   7886  1.1  christos 
   7887  1.1  christos #line 4494 "./config/bfin-parse.y"
   7888  1.1  christos 
   7889  1.1  christos 
   7890  1.1  christos EXPR_T
   7891  1.1  christos mkexpr (int x, SYMBOL_T s)
   7892  1.1  christos {
   7893  1.1  christos   EXPR_T e = XNEW (struct expression_cell);
   7894  1.1  christos   e->value = x;
   7895  1.1  christos   EXPR_SYMBOL(e) = s;
   7896  1.1  christos   return e;
   7897  1.1  christos }
   7898  1.1  christos 
   7899  1.1  christos static int
   7900  1.1  christos value_match (Expr_Node *exp, int sz, int sign, int mul, int issigned)
   7901  1.1  christos {
   7902  1.1  christos   int umax = (1 << sz) - 1;
   7903  1.1  christos   int min = -(1 << (sz - 1));
   7904  1.1  christos   int max = (1 << (sz - 1)) - 1;
   7905  1.1  christos 
   7906  1.1  christos   int v = (EXPR_VALUE (exp)) & 0xffffffff;
   7907  1.1  christos 
   7908  1.1  christos   if ((v % mul) != 0)
   7909  1.1  christos     {
   7910  1.1  christos       error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
   7911  1.1  christos       return 0;
   7912  1.1  christos     }
   7913  1.1  christos 
   7914  1.1  christos   v /= mul;
   7915  1.1  christos 
   7916  1.1  christos   if (sign)
   7917  1.1  christos     v = -v;
   7918  1.1  christos 
   7919  1.1  christos   if (issigned)
   7920  1.1  christos     {
   7921  1.1  christos       if (v >= min && v <= max) return 1;
   7922  1.1  christos 
   7923  1.1  christos #ifdef DEBUG
   7924  1.1  christos       fprintf(stderr, "signed value %lx out of range\n", v * mul);
   7925  1.1  christos #endif
   7926  1.1  christos       return 0;
   7927  1.1  christos     }
   7928  1.1  christos   if (v <= umax && v >= 0)
   7929  1.1  christos     return 1;
   7930  1.1  christos #ifdef DEBUG
   7931  1.1  christos   fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
   7932  1.1  christos #endif
   7933  1.1  christos   return 0;
   7934  1.1  christos }
   7935  1.1  christos 
   7936  1.1  christos /* Return the expression structure that allows symbol operations.
   7937  1.1  christos    If the left and right children are constants, do the operation.  */
   7938  1.1  christos static Expr_Node *
   7939  1.1  christos binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
   7940  1.1  christos {
   7941  1.1  christos   Expr_Node_Value val;
   7942  1.1  christos 
   7943  1.1  christos   if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
   7944  1.1  christos     {
   7945  1.1  christos       switch (op)
   7946  1.1  christos 	{
   7947  1.1  christos         case Expr_Op_Type_Add:
   7948  1.1  christos 	  x->value.i_value += y->value.i_value;
   7949  1.1  christos 	  break;
   7950  1.1  christos         case Expr_Op_Type_Sub:
   7951  1.1  christos 	  x->value.i_value -= y->value.i_value;
   7952  1.1  christos 	  break;
   7953  1.1  christos         case Expr_Op_Type_Mult:
   7954  1.1  christos 	  x->value.i_value *= y->value.i_value;
   7955  1.1  christos 	  break;
   7956  1.1  christos         case Expr_Op_Type_Div:
   7957  1.1  christos 	  if (y->value.i_value == 0)
   7958  1.1  christos 	    error ("Illegal Expression:  Division by zero.");
   7959  1.1  christos 	  else
   7960  1.1  christos 	    x->value.i_value /= y->value.i_value;
   7961  1.1  christos 	  break;
   7962  1.1  christos         case Expr_Op_Type_Mod:
   7963  1.1  christos 	  x->value.i_value %= y->value.i_value;
   7964  1.1  christos 	  break;
   7965  1.1  christos         case Expr_Op_Type_Lshift:
   7966  1.1  christos 	  x->value.i_value <<= y->value.i_value;
   7967  1.1  christos 	  break;
   7968  1.1  christos         case Expr_Op_Type_Rshift:
   7969  1.1  christos 	  x->value.i_value >>= y->value.i_value;
   7970  1.1  christos 	  break;
   7971  1.1  christos         case Expr_Op_Type_BAND:
   7972  1.1  christos 	  x->value.i_value &= y->value.i_value;
   7973  1.1  christos 	  break;
   7974  1.1  christos         case Expr_Op_Type_BOR:
   7975  1.1  christos 	  x->value.i_value |= y->value.i_value;
   7976  1.1  christos 	  break;
   7977  1.1  christos         case Expr_Op_Type_BXOR:
   7978  1.1  christos 	  x->value.i_value ^= y->value.i_value;
   7979  1.1  christos 	  break;
   7980  1.1  christos         case Expr_Op_Type_LAND:
   7981  1.1  christos 	  x->value.i_value = x->value.i_value && y->value.i_value;
   7982  1.1  christos 	  break;
   7983  1.1  christos         case Expr_Op_Type_LOR:
   7984  1.1  christos 	  x->value.i_value = x->value.i_value || y->value.i_value;
   7985  1.1  christos 	  break;
   7986  1.1  christos 
   7987  1.1  christos 	default:
   7988  1.1  christos 	  error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
   7989  1.1  christos 	}
   7990  1.1  christos       return x;
   7991  1.1  christos     }
   7992  1.1  christos   /* Canonicalize order to EXPR OP CONSTANT.  */
   7993  1.1  christos   if (x->type == Expr_Node_Constant)
   7994  1.1  christos     {
   7995  1.1  christos       Expr_Node *t = x;
   7996  1.1  christos       x = y;
   7997  1.1  christos       y = t;
   7998  1.1  christos     }
   7999  1.1  christos   /* Canonicalize subtraction of const to addition of negated const.  */
   8000  1.1  christos   if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant)
   8001  1.1  christos     {
   8002  1.1  christos       op = Expr_Op_Type_Add;
   8003  1.1  christos       y->value.i_value = -y->value.i_value;
   8004  1.1  christos     }
   8005  1.1  christos   if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
   8006  1.1  christos       && x->Right_Child->type == Expr_Node_Constant)
   8007  1.1  christos     {
   8008  1.1  christos       if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
   8009  1.1  christos 	{
   8010  1.1  christos 	  x->Right_Child->value.i_value += y->value.i_value;
   8011  1.1  christos 	  return x;
   8012  1.1  christos 	}
   8013  1.1  christos     }
   8014  1.1  christos 
   8015  1.1  christos   /* Create a new expression structure.  */
   8016  1.1  christos   val.op_value = op;
   8017  1.1  christos   return Expr_Node_Create (Expr_Node_Binop, val, x, y);
   8018  1.1  christos }
   8019  1.1  christos 
   8020  1.1  christos static Expr_Node *
   8021  1.1  christos unary (Expr_Op_Type op, Expr_Node *x)
   8022  1.1  christos {
   8023  1.1  christos   if (x->type == Expr_Node_Constant)
   8024  1.1  christos     {
   8025  1.1  christos       switch (op)
   8026  1.1  christos 	{
   8027  1.1  christos 	case Expr_Op_Type_NEG:
   8028  1.1  christos 	  x->value.i_value = -x->value.i_value;
   8029  1.1  christos 	  break;
   8030  1.1  christos 	case Expr_Op_Type_COMP:
   8031  1.1  christos 	  x->value.i_value = ~x->value.i_value;
   8032  1.1  christos 	  break;
   8033  1.1  christos 	default:
   8034  1.1  christos 	  error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
   8035  1.1  christos 	}
   8036  1.1  christos       return x;
   8037  1.1  christos     }
   8038  1.1  christos   else
   8039  1.1  christos     {
   8040  1.1  christos       /* Create a new expression structure.  */
   8041  1.1  christos       Expr_Node_Value val;
   8042  1.1  christos       val.op_value = op;
   8043  1.1  christos       return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
   8044  1.1  christos     }
   8045  1.1  christos }
   8046  1.1  christos 
   8047  1.1  christos int debug_codeselection = 0;
   8048  1.1  christos static void
   8049  1.1  christos notethat (const char *format, ...)
   8050  1.1  christos {
   8051  1.1  christos   va_list ap;
   8052  1.1  christos   va_start (ap, format);
   8053  1.1  christos   if (debug_codeselection)
   8054  1.1  christos     {
   8055  1.1  christos       vfprintf (errorf, format, ap);
   8056  1.1  christos     }
   8057  1.1  christos   va_end (ap);
   8058  1.1  christos }
   8059  1.1  christos 
   8060  1.1  christos #ifdef TEST
   8061  1.1  christos main (int argc, char **argv)
   8062  1.1  christos {
   8063  1.1  christos   yyparse();
   8064  1.1  christos }
   8065  1.1  christos #endif
   8066  1.1  christos 
   8067