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), ®7, ®7, 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), ®7, ®7, 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), ®7, ®7, 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), ®7, ®7, (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), ®7, ®7, (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, ®7, ®7, 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, ®7, ®7, 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, ®7, ®7, 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, ®7, ®7, 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, ®7, ®7, 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), ®7, ®7, 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), ®7, ®7, 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, ®7, ®7, 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, ®7, ®7, 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, ®7, ®7, (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, ®7, ®7, (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, ®7, ®7, 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