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