bfin-parse.c revision 1.1 1 1.1 christos /* A Bison parser, made by GNU Bison 3.8.2. */
2 1.1 christos
3 1.1 christos /* Bison implementation for Yacc-like parsers in C
4 1.1 christos
5 1.1 christos Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 1.1 christos Inc.
7 1.1 christos
8 1.1 christos This program is free software: you can redistribute it and/or modify
9 1.1 christos it under the terms of the GNU General Public License as published by
10 1.1 christos the Free Software Foundation, either version 3 of the License, or
11 1.1 christos (at your option) any later version.
12 1.1 christos
13 1.1 christos This program is distributed in the hope that it will be useful,
14 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
15 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 1.1 christos GNU General Public License for more details.
17 1.1 christos
18 1.1 christos You should have received a copy of the GNU General Public License
19 1.1 christos along with this program. If not, see <https://www.gnu.org/licenses/>. */
20 1.1 christos
21 1.1 christos /* As a special exception, you may create a larger work that contains
22 1.1 christos part or all of the Bison parser skeleton and distribute that work
23 1.1 christos under terms of your choice, so long as that work isn't itself a
24 1.1 christos parser generator using the skeleton or a modified version thereof
25 1.1 christos as a parser skeleton. Alternatively, if you modify or redistribute
26 1.1 christos the parser skeleton itself, you may (at your option) remove this
27 1.1 christos special exception, which will cause the skeleton and the resulting
28 1.1 christos Bison output files to be licensed under the GNU General Public
29 1.1 christos License without this special exception.
30 1.1 christos
31 1.1 christos This special exception was added by the Free Software Foundation in
32 1.1 christos version 2.2 of Bison. */
33 1.1 christos
34 1.1 christos /* C LALR(1) parser skeleton written by Richard Stallman, by
35 1.1 christos simplifying the original so-called "semantic" parser. */
36 1.1 christos
37 1.1 christos /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 1.1 christos especially those whose name start with YY_ or yy_. They are
39 1.1 christos private implementation details that can be changed or removed. */
40 1.1 christos
41 1.1 christos /* All symbols defined below should begin with yy or YY, to avoid
42 1.1 christos infringing on user name space. This should be done even for local
43 1.1 christos variables, as they might otherwise be expanded by user macros.
44 1.1 christos There are some unavoidable exceptions within include files to
45 1.1 christos define necessary library symbols; they are noted "INFRINGES ON
46 1.1 christos USER NAME SPACE" below. */
47 1.1 christos
48 1.1 christos /* Identify Bison output, and Bison version. */
49 1.1 christos #define YYBISON 30802
50 1.1 christos
51 1.1 christos /* Bison version string. */
52 1.1 christos #define YYBISON_VERSION "3.8.2"
53 1.1 christos
54 1.1 christos /* Skeleton name. */
55 1.1 christos #define YYSKELETON_NAME "yacc.c"
56 1.1 christos
57 1.1 christos /* Pure parsers. */
58 1.1 christos #define YYPURE 0
59 1.1 christos
60 1.1 christos /* Push parsers. */
61 1.1 christos #define YYPUSH 0
62 1.1 christos
63 1.1 christos /* Pull parsers. */
64 1.1 christos #define YYPULL 1
65 1.1 christos
66 1.1 christos
67 1.1 christos
68 1.1 christos
69 1.1 christos /* First part of user prologue. */
70 1.1 christos #line 20 "./config/bfin-parse.y"
71 1.1 christos
72 1.1 christos
73 1.1 christos #include "as.h"
74 1.1 christos
75 1.1 christos #include "bfin-aux.h" /* Opcode generating auxiliaries. */
76 1.1 christos #include "elf/common.h"
77 1.1 christos #include "elf/bfin.h"
78 1.1 christos
79 1.1 christos /* This file uses an old-style yyerror returning int. Disable
80 1.1 christos generation of a modern prototype for yyerror. */
81 1.1 christos #define yyerror yyerror
82 1.1 christos
83 1.1 christos #define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
84 1.1 christos bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
85 1.1 christos
86 1.1 christos #define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
87 1.1 christos bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
88 1.1 christos dst, src0, src1, w0)
89 1.1 christos
90 1.1 christos #define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
91 1.1 christos bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
92 1.1 christos dst, src0, src1, w0)
93 1.1 christos
94 1.1 christos #define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls) \
95 1.1 christos bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
96 1.1 christos
97 1.1 christos #define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls) \
98 1.1 christos bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
99 1.1 christos
100 1.1 christos #define LDIMMHALF_R(reg, h, s, z, hword) \
101 1.1 christos bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
102 1.1 christos
103 1.1 christos #define LDIMMHALF_R5(reg, h, s, z, hword) \
104 1.1 christos bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
105 1.1 christos
106 1.1 christos #define LDSTIDXI(ptr, reg, w, sz, z, offset) \
107 1.1 christos bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
108 1.1 christos
109 1.1 christos #define LDST(ptr, reg, aop, sz, z, w) \
110 1.1 christos bfin_gen_ldst (ptr, reg, aop, sz, z, w)
111 1.1 christos
112 1.1 christos #define LDSTII(ptr, reg, offset, w, op) \
113 1.1 christos bfin_gen_ldstii (ptr, reg, offset, w, op)
114 1.1 christos
115 1.1 christos #define DSPLDST(i, m, reg, aop, w) \
116 1.1 christos bfin_gen_dspldst (i, reg, aop, w, m)
117 1.1 christos
118 1.1 christos #define LDSTPMOD(ptr, reg, idx, aop, w) \
119 1.1 christos bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
120 1.1 christos
121 1.1 christos #define LDSTIIFP(offset, reg, w) \
122 1.1 christos bfin_gen_ldstiifp (reg, offset, w)
123 1.1 christos
124 1.1 christos #define LOGI2OP(dst, src, opc) \
125 1.1 christos bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
126 1.1 christos
127 1.1 christos #define ALU2OP(dst, src, opc) \
128 1.1 christos bfin_gen_alu2op (dst, src, opc)
129 1.1 christos
130 1.1 christos #define BRCC(t, b, offset) \
131 1.1 christos bfin_gen_brcc (t, b, offset)
132 1.1 christos
133 1.1 christos #define UJUMP(offset) \
134 1.1 christos bfin_gen_ujump (offset)
135 1.1 christos
136 1.1 christos #define PROGCTRL(prgfunc, poprnd) \
137 1.1 christos bfin_gen_progctrl (prgfunc, poprnd)
138 1.1 christos
139 1.1 christos #define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
140 1.1 christos bfin_gen_pushpopmultiple (dr, pr, d, p, w)
141 1.1 christos
142 1.1 christos #define PUSHPOPREG(reg, w) \
143 1.1 christos bfin_gen_pushpopreg (reg, w)
144 1.1 christos
145 1.1 christos #define CALLA(addr, s) \
146 1.1 christos bfin_gen_calla (addr, s)
147 1.1 christos
148 1.1 christos #define LINKAGE(r, framesize) \
149 1.1 christos bfin_gen_linkage (r, framesize)
150 1.1 christos
151 1.1 christos #define COMPI2OPD(dst, src, op) \
152 1.1 christos bfin_gen_compi2opd (dst, src, op)
153 1.1 christos
154 1.1 christos #define COMPI2OPP(dst, src, op) \
155 1.1 christos bfin_gen_compi2opp (dst, src, op)
156 1.1 christos
157 1.1 christos #define DAGMODIK(i, op) \
158 1.1 christos bfin_gen_dagmodik (i, op)
159 1.1 christos
160 1.1 christos #define DAGMODIM(i, m, op, br) \
161 1.1 christos bfin_gen_dagmodim (i, m, op, br)
162 1.1 christos
163 1.1 christos #define COMP3OP(dst, src0, src1, opc) \
164 1.1 christos bfin_gen_comp3op (src0, src1, dst, opc)
165 1.1 christos
166 1.1 christos #define PTR2OP(dst, src, opc) \
167 1.1 christos bfin_gen_ptr2op (dst, src, opc)
168 1.1 christos
169 1.1 christos #define CCFLAG(x, y, opc, i, g) \
170 1.1 christos bfin_gen_ccflag (x, y, opc, i, g)
171 1.1 christos
172 1.1 christos #define CCMV(src, dst, t) \
173 1.1 christos bfin_gen_ccmv (src, dst, t)
174 1.1 christos
175 1.1 christos #define CACTRL(reg, a, op) \
176 1.1 christos bfin_gen_cactrl (reg, a, op)
177 1.1 christos
178 1.1 christos #define LOOPSETUP(soffset, c, rop, eoffset, reg) \
179 1.1 christos bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
180 1.1 christos
181 1.1 christos #define HL2(r1, r0) (IS_H (r1) << 1 | IS_H (r0))
182 1.1 christos #define IS_RANGE(bits, expr, sign, mul) \
183 1.1 christos value_match(expr, bits, sign, mul, 1)
184 1.1 christos #define IS_URANGE(bits, expr, sign, mul) \
185 1.1 christos value_match(expr, bits, sign, mul, 0)
186 1.1 christos #define IS_CONST(expr) (expr->type == Expr_Node_Constant)
187 1.1 christos #define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
188 1.1 christos #define IS_IMM(expr, bits) value_match (expr, bits, 0, 1, 1)
189 1.1 christos #define IS_UIMM(expr, bits) value_match (expr, bits, 0, 1, 0)
190 1.1 christos
191 1.1 christos #define IS_PCREL4(expr) \
192 1.1 christos (value_match (expr, 4, 0, 2, 0))
193 1.1 christos
194 1.1 christos #define IS_LPPCREL10(expr) \
195 1.1 christos (value_match (expr, 10, 0, 2, 0))
196 1.1 christos
197 1.1 christos #define IS_PCREL10(expr) \
198 1.1 christos (value_match (expr, 10, 0, 2, 1))
199 1.1 christos
200 1.1 christos #define IS_PCREL12(expr) \
201 1.1 christos (value_match (expr, 12, 0, 2, 1))
202 1.1 christos
203 1.1 christos #define IS_PCREL24(expr) \
204 1.1 christos (value_match (expr, 24, 0, 2, 1))
205 1.1 christos
206 1.1 christos
207 1.1 christos static int value_match (Expr_Node *, int, int, int, int);
208 1.1 christos
209 1.1 christos extern FILE *errorf;
210 1.1 christos extern INSTR_T insn;
211 1.1 christos
212 1.1 christos static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
213 1.1 christos static Expr_Node *unary (Expr_Op_Type, Expr_Node *);
214 1.1 christos
215 1.1 christos static void notethat (const char *, ...);
216 1.1 christos
217 1.1 christos extern char *yytext;
218 1.1 christos
219 1.1 christos /* Used to set SRCx fields to all 1s as described in the PRM. */
220 1.1 christos static Register reg7 = {REG_R7, 0};
221 1.1 christos
222 1.1 christos void error (const char *format, ...)
223 1.1 christos {
224 1.1 christos va_list ap;
225 1.1 christos static char buffer[2000];
226 1.1 christos
227 1.1 christos va_start (ap, format);
228 1.1 christos vsprintf (buffer, format, ap);
229 1.1 christos va_end (ap);
230 1.1 christos
231 1.1 christos as_bad ("%s", buffer);
232 1.1 christos }
233 1.1 christos
234 1.1 christos static int
235 1.1 christos yyerror (const char *msg)
236 1.1 christos {
237 1.1 christos if (msg[0] == '\0')
238 1.1 christos error ("%s", msg);
239 1.1 christos
240 1.1 christos else if (yytext[0] != ';')
241 1.1 christos error ("%s. Input text was %s.", msg, yytext);
242 1.1 christos else
243 1.1 christos error ("%s.", msg);
244 1.1 christos
245 1.1 christos return -1;
246 1.1 christos }
247 1.1 christos
248 1.1 christos static int
249 1.1 christos in_range_p (Expr_Node *exp, int from, int to, unsigned int mask)
250 1.1 christos {
251 1.1 christos int val = EXPR_VALUE (exp);
252 1.1 christos if (exp->type != Expr_Node_Constant)
253 1.1 christos return 0;
254 1.1 christos if (val < from || val > to)
255 1.1 christos return 0;
256 1.1 christos return (val & mask) == 0;
257 1.1 christos }
258 1.1 christos
259 1.1 christos extern int yylex (void);
260 1.1 christos
261 1.1 christos #define imm3(x) EXPR_VALUE (x)
262 1.1 christos #define imm4(x) EXPR_VALUE (x)
263 1.1 christos #define uimm4(x) EXPR_VALUE (x)
264 1.1 christos #define imm5(x) EXPR_VALUE (x)
265 1.1 christos #define uimm5(x) EXPR_VALUE (x)
266 1.1 christos #define imm6(x) EXPR_VALUE (x)
267 1.1 christos #define imm7(x) EXPR_VALUE (x)
268 1.1 christos #define uimm8(x) EXPR_VALUE (x)
269 1.1 christos #define imm16(x) EXPR_VALUE (x)
270 1.1 christos #define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
271 1.1 christos #define uimm16(x) EXPR_VALUE (x)
272 1.1 christos
273 1.1 christos /* Return true if a value is inside a range. */
274 1.1 christos #define IN_RANGE(x, low, high) \
275 1.1 christos (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
276 1.1 christos
277 1.1 christos /* Auxiliary functions. */
278 1.1 christos
279 1.1 christos static int
280 1.1 christos valid_dreg_pair (Register *reg1, Expr_Node *reg2)
281 1.1 christos {
282 1.1 christos if (!IS_DREG (*reg1))
283 1.1 christos {
284 1.1 christos yyerror ("Dregs expected");
285 1.1 christos return 0;
286 1.1 christos }
287 1.1 christos
288 1.1 christos if (reg1->regno != 1 && reg1->regno != 3)
289 1.1 christos {
290 1.1 christos yyerror ("Bad register pair");
291 1.1 christos return 0;
292 1.1 christos }
293 1.1 christos
294 1.1 christos if (imm7 (reg2) != reg1->regno - 1)
295 1.1 christos {
296 1.1 christos yyerror ("Bad register pair");
297 1.1 christos return 0;
298 1.1 christos }
299 1.1 christos
300 1.1 christos reg1->regno--;
301 1.1 christos return 1;
302 1.1 christos }
303 1.1 christos
304 1.1 christos static int
305 1.1 christos check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
306 1.1 christos {
307 1.1 christos if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
308 1.1 christos || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
309 1.1 christos return yyerror ("Source multiplication register mismatch");
310 1.1 christos
311 1.1 christos return 0;
312 1.1 christos }
313 1.1 christos
314 1.1 christos
315 1.1 christos /* Check mac option. */
316 1.1 christos
317 1.1 christos static int
318 1.1 christos check_macfunc_option (Macfunc *a, Opt_mode *opt)
319 1.1 christos {
320 1.1 christos /* Default option is always valid. */
321 1.1 christos if (opt->mod == 0)
322 1.1 christos return 0;
323 1.1 christos
324 1.1 christos if ((a->w == 1 && a->P == 1
325 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
326 1.1 christos && opt->mod != M_S2RND && opt->mod != M_ISS2)
327 1.1 christos || (a->w == 1 && a->P == 0
328 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
329 1.1 christos && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND
330 1.1 christos && opt->mod != M_ISS2 && opt->mod != M_IH)
331 1.1 christos || (a->w == 0 && a->P == 0
332 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32))
333 1.1 christos return -1;
334 1.1 christos
335 1.1 christos return 0;
336 1.1 christos }
337 1.1 christos
338 1.1 christos /* Check (vector) mac funcs and ops. */
339 1.1 christos
340 1.1 christos static int
341 1.1 christos check_macfuncs (Macfunc *aa, Opt_mode *opa,
342 1.1 christos Macfunc *ab, Opt_mode *opb)
343 1.1 christos {
344 1.1 christos /* Variables for swapping. */
345 1.1 christos Macfunc mtmp;
346 1.1 christos Opt_mode otmp;
347 1.1 christos
348 1.1 christos /* The option mode should be put at the end of the second instruction
349 1.1 christos of the vector except M, which should follow MAC1 instruction. */
350 1.1 christos if (opa->mod != 0)
351 1.1 christos return yyerror ("Bad opt mode");
352 1.1 christos
353 1.1 christos /* If a0macfunc comes before a1macfunc, swap them. */
354 1.1 christos
355 1.1 christos if (aa->n == 0)
356 1.1 christos {
357 1.1 christos /* (M) is not allowed here. */
358 1.1 christos if (opa->MM != 0)
359 1.1 christos return yyerror ("(M) not allowed with A0MAC");
360 1.1 christos if (ab->n != 1)
361 1.1 christos return yyerror ("Vector AxMACs can't be same");
362 1.1 christos
363 1.1 christos mtmp = *aa; *aa = *ab; *ab = mtmp;
364 1.1 christos otmp = *opa; *opa = *opb; *opb = otmp;
365 1.1 christos }
366 1.1 christos else
367 1.1 christos {
368 1.1 christos if (opb->MM != 0)
369 1.1 christos return yyerror ("(M) not allowed with A0MAC");
370 1.1 christos if (ab->n != 0)
371 1.1 christos return yyerror ("Vector AxMACs can't be same");
372 1.1 christos }
373 1.1 christos
374 1.1 christos /* If both ops are one of 0, 1, or 2, we have multiply_halfregs in both
375 1.1 christos assignment_or_macfuncs. */
376 1.1 christos if ((aa->op == 0 || aa->op == 1 || aa->op == 2)
377 1.1 christos && (ab->op == 0 || ab->op == 1 || ab->op == 2))
378 1.1 christos {
379 1.1 christos if (check_multiply_halfregs (aa, ab) < 0)
380 1.1 christos return -1;
381 1.1 christos }
382 1.1 christos else
383 1.1 christos {
384 1.1 christos /* Only one of the assign_macfuncs has a half reg multiply
385 1.1 christos Evil trick: Just 'OR' their source register codes:
386 1.1 christos We can do that, because we know they were initialized to 0
387 1.1 christos in the rules that don't use multiply_halfregs. */
388 1.1 christos aa->s0.regno |= (ab->s0.regno & CODE_MASK);
389 1.1 christos aa->s1.regno |= (ab->s1.regno & CODE_MASK);
390 1.1 christos }
391 1.1 christos
392 1.1 christos if (aa->w == ab->w && aa->P != ab->P)
393 1.1 christos return yyerror ("Destination Dreg sizes (full or half) must match");
394 1.1 christos
395 1.1 christos if (aa->w && ab->w)
396 1.1 christos {
397 1.1 christos if (aa->P && (aa->dst.regno - ab->dst.regno) != 1)
398 1.1 christos return yyerror ("Destination Dregs (full) must differ by one");
399 1.1 christos if (!aa->P && aa->dst.regno != ab->dst.regno)
400 1.1 christos return yyerror ("Destination Dregs (half) must match");
401 1.1 christos }
402 1.1 christos
403 1.1 christos /* Make sure mod flags get ORed, too. */
404 1.1 christos opb->mod |= opa->mod;
405 1.1 christos
406 1.1 christos /* Check option. */
407 1.1 christos if (check_macfunc_option (aa, opb) < 0
408 1.1 christos && check_macfunc_option (ab, opb) < 0)
409 1.1 christos return yyerror ("bad option");
410 1.1 christos
411 1.1 christos /* Make sure first macfunc has got both P flags ORed. */
412 1.1 christos aa->P |= ab->P;
413 1.1 christos
414 1.1 christos return 0;
415 1.1 christos }
416 1.1 christos
417 1.1 christos
418 1.1 christos static int
419 1.1 christos is_group1 (INSTR_T x)
420 1.1 christos {
421 1.1 christos /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii. */
422 1.1 christos if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
423 1.1 christos return 1;
424 1.1 christos
425 1.1 christos return 0;
426 1.1 christos }
427 1.1 christos
428 1.1 christos static int
429 1.1 christos is_group2 (INSTR_T x)
430 1.1 christos {
431 1.1 christos if ((((x->value & 0xfc00) == 0x9c00) /* dspLDST. */
432 1.1 christos && !((x->value & 0xfde0) == 0x9c60) /* dagMODim. */
433 1.1 christos && !((x->value & 0xfde0) == 0x9ce0) /* dagMODim with bit rev. */
434 1.1 christos && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik. */
435 1.1 christos || (x->value == 0x0000))
436 1.1 christos return 1;
437 1.1 christos return 0;
438 1.1 christos }
439 1.1 christos
440 1.1 christos static int
441 1.1 christos is_store (INSTR_T x)
442 1.1 christos {
443 1.1 christos if (!x)
444 1.1 christos return 0;
445 1.1 christos
446 1.1 christos if ((x->value & 0xf000) == 0x8000)
447 1.1 christos {
448 1.1 christos int aop = ((x->value >> 9) & 0x3);
449 1.1 christos int w = ((x->value >> 11) & 0x1);
450 1.1 christos if (!w || aop == 3)
451 1.1 christos return 0;
452 1.1 christos return 1;
453 1.1 christos }
454 1.1 christos
455 1.1 christos if (((x->value & 0xFF60) == 0x9E60) || /* dagMODim_0 */
456 1.1 christos ((x->value & 0xFFF0) == 0x9F60)) /* dagMODik_0 */
457 1.1 christos return 0;
458 1.1 christos
459 1.1 christos /* decode_dspLDST_0 */
460 1.1 christos if ((x->value & 0xFC00) == 0x9C00)
461 1.1 christos {
462 1.1 christos int w = ((x->value >> 9) & 0x1);
463 1.1 christos if (w)
464 1.1 christos return 1;
465 1.1 christos }
466 1.1 christos
467 1.1 christos return 0;
468 1.1 christos }
469 1.1 christos
470 1.1 christos static INSTR_T
471 1.1 christos gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2)
472 1.1 christos {
473 1.1 christos int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0;
474 1.1 christos int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0;
475 1.1 christos int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0;
476 1.1 christos
477 1.1 christos if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3))
478 1.1 christos yyerror ("resource conflict in multi-issue instruction");
479 1.1 christos
480 1.1 christos /* Anomaly 05000074 */
481 1.1 christos if (ENABLE_AC_05000074
482 1.1 christos && dsp32 != NULL && dsp16_grp1 != NULL
483 1.1 christos && (dsp32->value & 0xf780) == 0xc680
484 1.1 christos && ((dsp16_grp1->value & 0xfe40) == 0x9240
485 1.1 christos || (dsp16_grp1->value & 0xfe08) == 0xba08
486 1.1 christos || (dsp16_grp1->value & 0xfc00) == 0xbc00))
487 1.1 christos yyerror ("anomaly 05000074 - Multi-Issue Instruction with \
488 1.1 christos dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported");
489 1.1 christos
490 1.1 christos if (is_store (dsp16_grp1) && is_store (dsp16_grp2))
491 1.1 christos yyerror ("Only one instruction in multi-issue instruction can be a store");
492 1.1 christos
493 1.1 christos return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2);
494 1.1 christos }
495 1.1 christos
496 1.1 christos
497 1.1 christos #line 498 "config/bfin-parse.c"
498 1.1 christos
499 1.1 christos # ifndef YY_CAST
500 1.1 christos # ifdef __cplusplus
501 1.1 christos # define YY_CAST(Type, Val) static_cast<Type> (Val)
502 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
503 1.1 christos # else
504 1.1 christos # define YY_CAST(Type, Val) ((Type) (Val))
505 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
506 1.1 christos # endif
507 1.1 christos # endif
508 1.1 christos # ifndef YY_NULLPTR
509 1.1 christos # if defined __cplusplus
510 1.1 christos # if 201103L <= __cplusplus
511 1.1 christos # define YY_NULLPTR nullptr
512 1.1 christos # else
513 1.1 christos # define YY_NULLPTR 0
514 1.1 christos # endif
515 1.1 christos # else
516 1.1 christos # define YY_NULLPTR ((void*)0)
517 1.1 christos # endif
518 1.1 christos # endif
519 1.1 christos
520 1.1 christos /* Use api.header.include to #include this header
521 1.1 christos instead of duplicating it here. */
522 1.1 christos #ifndef YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
523 1.1 christos # define YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
524 1.1 christos /* Debug traces. */
525 1.1 christos #ifndef YYDEBUG
526 1.1 christos # define YYDEBUG 0
527 1.1 christos #endif
528 1.1 christos #if YYDEBUG
529 1.1 christos extern int yydebug;
530 1.1 christos #endif
531 1.1 christos
532 1.1 christos /* Token kinds. */
533 1.1 christos #ifndef YYTOKENTYPE
534 1.1 christos # define YYTOKENTYPE
535 1.1 christos enum yytokentype
536 1.1 christos {
537 1.1 christos YYEMPTY = -2,
538 1.1 christos YYEOF = 0, /* "end of file" */
539 1.1 christos YYerror = 256, /* error */
540 1.1 christos YYUNDEF = 257, /* "invalid token" */
541 1.1 christos BYTEOP16P = 258, /* BYTEOP16P */
542 1.1 christos BYTEOP16M = 259, /* BYTEOP16M */
543 1.1 christos BYTEOP1P = 260, /* BYTEOP1P */
544 1.1 christos BYTEOP2P = 261, /* BYTEOP2P */
545 1.1 christos BYTEOP3P = 262, /* BYTEOP3P */
546 1.1 christos BYTEUNPACK = 263, /* BYTEUNPACK */
547 1.1 christos BYTEPACK = 264, /* BYTEPACK */
548 1.1 christos PACK = 265, /* PACK */
549 1.1 christos SAA = 266, /* SAA */
550 1.1 christos ALIGN8 = 267, /* ALIGN8 */
551 1.1 christos ALIGN16 = 268, /* ALIGN16 */
552 1.1 christos ALIGN24 = 269, /* ALIGN24 */
553 1.1 christos VIT_MAX = 270, /* VIT_MAX */
554 1.1 christos EXTRACT = 271, /* EXTRACT */
555 1.1 christos DEPOSIT = 272, /* DEPOSIT */
556 1.1 christos EXPADJ = 273, /* EXPADJ */
557 1.1 christos SEARCH = 274, /* SEARCH */
558 1.1 christos ONES = 275, /* ONES */
559 1.1 christos SIGN = 276, /* SIGN */
560 1.1 christos SIGNBITS = 277, /* SIGNBITS */
561 1.1 christos LINK = 278, /* LINK */
562 1.1 christos UNLINK = 279, /* UNLINK */
563 1.1 christos REG = 280, /* REG */
564 1.1 christos PC = 281, /* PC */
565 1.1 christos CCREG = 282, /* CCREG */
566 1.1 christos BYTE_DREG = 283, /* BYTE_DREG */
567 1.1 christos REG_A_DOUBLE_ZERO = 284, /* REG_A_DOUBLE_ZERO */
568 1.1 christos REG_A_DOUBLE_ONE = 285, /* REG_A_DOUBLE_ONE */
569 1.1 christos A_ZERO_DOT_L = 286, /* A_ZERO_DOT_L */
570 1.1 christos A_ZERO_DOT_H = 287, /* A_ZERO_DOT_H */
571 1.1 christos A_ONE_DOT_L = 288, /* A_ONE_DOT_L */
572 1.1 christos A_ONE_DOT_H = 289, /* A_ONE_DOT_H */
573 1.1 christos HALF_REG = 290, /* HALF_REG */
574 1.1 christos NOP = 291, /* NOP */
575 1.1 christos RTI = 292, /* RTI */
576 1.1 christos RTS = 293, /* RTS */
577 1.1 christos RTX = 294, /* RTX */
578 1.1 christos RTN = 295, /* RTN */
579 1.1 christos RTE = 296, /* RTE */
580 1.1 christos HLT = 297, /* HLT */
581 1.1 christos IDLE = 298, /* IDLE */
582 1.1 christos STI = 299, /* STI */
583 1.1 christos CLI = 300, /* CLI */
584 1.1 christos CSYNC = 301, /* CSYNC */
585 1.1 christos SSYNC = 302, /* SSYNC */
586 1.1 christos EMUEXCPT = 303, /* EMUEXCPT */
587 1.1 christos RAISE = 304, /* RAISE */
588 1.1 christos EXCPT = 305, /* EXCPT */
589 1.1 christos LSETUP = 306, /* LSETUP */
590 1.1 christos LOOP = 307, /* LOOP */
591 1.1 christos LOOP_BEGIN = 308, /* LOOP_BEGIN */
592 1.1 christos LOOP_END = 309, /* LOOP_END */
593 1.1 christos DISALGNEXCPT = 310, /* DISALGNEXCPT */
594 1.1 christos JUMP = 311, /* JUMP */
595 1.1 christos JUMP_DOT_S = 312, /* JUMP_DOT_S */
596 1.1 christos JUMP_DOT_L = 313, /* JUMP_DOT_L */
597 1.1 christos CALL = 314, /* CALL */
598 1.1 christos ABORT = 315, /* ABORT */
599 1.1 christos NOT = 316, /* NOT */
600 1.1 christos TILDA = 317, /* TILDA */
601 1.1 christos BANG = 318, /* BANG */
602 1.1 christos AMPERSAND = 319, /* AMPERSAND */
603 1.1 christos BAR = 320, /* BAR */
604 1.1 christos PERCENT = 321, /* PERCENT */
605 1.1 christos CARET = 322, /* CARET */
606 1.1 christos BXOR = 323, /* BXOR */
607 1.1 christos MINUS = 324, /* MINUS */
608 1.1 christos PLUS = 325, /* PLUS */
609 1.1 christos STAR = 326, /* STAR */
610 1.1 christos SLASH = 327, /* SLASH */
611 1.1 christos NEG = 328, /* NEG */
612 1.1 christos MIN = 329, /* MIN */
613 1.1 christos MAX = 330, /* MAX */
614 1.1 christos ABS = 331, /* ABS */
615 1.1 christos DOUBLE_BAR = 332, /* DOUBLE_BAR */
616 1.1 christos _PLUS_BAR_PLUS = 333, /* _PLUS_BAR_PLUS */
617 1.1 christos _PLUS_BAR_MINUS = 334, /* _PLUS_BAR_MINUS */
618 1.1 christos _MINUS_BAR_PLUS = 335, /* _MINUS_BAR_PLUS */
619 1.1 christos _MINUS_BAR_MINUS = 336, /* _MINUS_BAR_MINUS */
620 1.1 christos _MINUS_MINUS = 337, /* _MINUS_MINUS */
621 1.1 christos _PLUS_PLUS = 338, /* _PLUS_PLUS */
622 1.1 christos SHIFT = 339, /* SHIFT */
623 1.1 christos LSHIFT = 340, /* LSHIFT */
624 1.1 christos ASHIFT = 341, /* ASHIFT */
625 1.1 christos BXORSHIFT = 342, /* BXORSHIFT */
626 1.1 christos _GREATER_GREATER_GREATER_THAN_ASSIGN = 343, /* _GREATER_GREATER_GREATER_THAN_ASSIGN */
627 1.1 christos ROT = 344, /* ROT */
628 1.1 christos LESS_LESS = 345, /* LESS_LESS */
629 1.1 christos GREATER_GREATER = 346, /* GREATER_GREATER */
630 1.1 christos _GREATER_GREATER_GREATER = 347, /* _GREATER_GREATER_GREATER */
631 1.1 christos _LESS_LESS_ASSIGN = 348, /* _LESS_LESS_ASSIGN */
632 1.1 christos _GREATER_GREATER_ASSIGN = 349, /* _GREATER_GREATER_ASSIGN */
633 1.1 christos DIVS = 350, /* DIVS */
634 1.1 christos DIVQ = 351, /* DIVQ */
635 1.1 christos ASSIGN = 352, /* ASSIGN */
636 1.1 christos _STAR_ASSIGN = 353, /* _STAR_ASSIGN */
637 1.1 christos _BAR_ASSIGN = 354, /* _BAR_ASSIGN */
638 1.1 christos _CARET_ASSIGN = 355, /* _CARET_ASSIGN */
639 1.1 christos _AMPERSAND_ASSIGN = 356, /* _AMPERSAND_ASSIGN */
640 1.1 christos _MINUS_ASSIGN = 357, /* _MINUS_ASSIGN */
641 1.1 christos _PLUS_ASSIGN = 358, /* _PLUS_ASSIGN */
642 1.1 christos _ASSIGN_BANG = 359, /* _ASSIGN_BANG */
643 1.1 christos _LESS_THAN_ASSIGN = 360, /* _LESS_THAN_ASSIGN */
644 1.1 christos _ASSIGN_ASSIGN = 361, /* _ASSIGN_ASSIGN */
645 1.1 christos GE = 362, /* GE */
646 1.1 christos LT = 363, /* LT */
647 1.1 christos LE = 364, /* LE */
648 1.1 christos GT = 365, /* GT */
649 1.1 christos LESS_THAN = 366, /* LESS_THAN */
650 1.1 christos FLUSHINV = 367, /* FLUSHINV */
651 1.1 christos FLUSH = 368, /* FLUSH */
652 1.1 christos IFLUSH = 369, /* IFLUSH */
653 1.1 christos PREFETCH = 370, /* PREFETCH */
654 1.1 christos PRNT = 371, /* PRNT */
655 1.1 christos OUTC = 372, /* OUTC */
656 1.1 christos WHATREG = 373, /* WHATREG */
657 1.1 christos TESTSET = 374, /* TESTSET */
658 1.1 christos ASL = 375, /* ASL */
659 1.1 christos ASR = 376, /* ASR */
660 1.1 christos B = 377, /* B */
661 1.1 christos W = 378, /* W */
662 1.1 christos NS = 379, /* NS */
663 1.1 christos S = 380, /* S */
664 1.1 christos CO = 381, /* CO */
665 1.1 christos SCO = 382, /* SCO */
666 1.1 christos TH = 383, /* TH */
667 1.1 christos TL = 384, /* TL */
668 1.1 christos BP = 385, /* BP */
669 1.1 christos BREV = 386, /* BREV */
670 1.1 christos X = 387, /* X */
671 1.1 christos Z = 388, /* Z */
672 1.1 christos M = 389, /* M */
673 1.1 christos MMOD = 390, /* MMOD */
674 1.1 christos R = 391, /* R */
675 1.1 christos RND = 392, /* RND */
676 1.1 christos RNDL = 393, /* RNDL */
677 1.1 christos RNDH = 394, /* RNDH */
678 1.1 christos RND12 = 395, /* RND12 */
679 1.1 christos RND20 = 396, /* RND20 */
680 1.1 christos V = 397, /* V */
681 1.1 christos LO = 398, /* LO */
682 1.1 christos HI = 399, /* HI */
683 1.1 christos BITTGL = 400, /* BITTGL */
684 1.1 christos BITCLR = 401, /* BITCLR */
685 1.1 christos BITSET = 402, /* BITSET */
686 1.1 christos BITTST = 403, /* BITTST */
687 1.1 christos BITMUX = 404, /* BITMUX */
688 1.1 christos DBGAL = 405, /* DBGAL */
689 1.1 christos DBGAH = 406, /* DBGAH */
690 1.1 christos DBGHALT = 407, /* DBGHALT */
691 1.1 christos DBG = 408, /* DBG */
692 1.1 christos DBGA = 409, /* DBGA */
693 1.1 christos DBGCMPLX = 410, /* DBGCMPLX */
694 1.1 christos IF = 411, /* IF */
695 1.1 christos COMMA = 412, /* COMMA */
696 1.1 christos BY = 413, /* BY */
697 1.1 christos COLON = 414, /* COLON */
698 1.1 christos SEMICOLON = 415, /* SEMICOLON */
699 1.1 christos RPAREN = 416, /* RPAREN */
700 1.1 christos LPAREN = 417, /* LPAREN */
701 1.1 christos LBRACK = 418, /* LBRACK */
702 1.1 christos RBRACK = 419, /* RBRACK */
703 1.1 christos STATUS_REG = 420, /* STATUS_REG */
704 1.1 christos MNOP = 421, /* MNOP */
705 1.1 christos SYMBOL = 422, /* SYMBOL */
706 1.1 christos NUMBER = 423, /* NUMBER */
707 1.1 christos GOT = 424, /* GOT */
708 1.1 christos GOT17M4 = 425, /* GOT17M4 */
709 1.1 christos FUNCDESC_GOT17M4 = 426, /* FUNCDESC_GOT17M4 */
710 1.1 christos AT = 427, /* AT */
711 1.1 christos PLTPC = 428 /* PLTPC */
712 1.1 christos };
713 1.1 christos typedef enum yytokentype yytoken_kind_t;
714 1.1 christos #endif
715 1.1 christos /* Token kinds. */
716 1.1 christos #define YYEMPTY -2
717 1.1 christos #define YYEOF 0
718 1.1 christos #define YYerror 256
719 1.1 christos #define YYUNDEF 257
720 1.1 christos #define BYTEOP16P 258
721 1.1 christos #define BYTEOP16M 259
722 1.1 christos #define BYTEOP1P 260
723 1.1 christos #define BYTEOP2P 261
724 1.1 christos #define BYTEOP3P 262
725 1.1 christos #define BYTEUNPACK 263
726 1.1 christos #define BYTEPACK 264
727 1.1 christos #define PACK 265
728 1.1 christos #define SAA 266
729 1.1 christos #define ALIGN8 267
730 1.1 christos #define ALIGN16 268
731 1.1 christos #define ALIGN24 269
732 1.1 christos #define VIT_MAX 270
733 1.1 christos #define EXTRACT 271
734 1.1 christos #define DEPOSIT 272
735 1.1 christos #define EXPADJ 273
736 1.1 christos #define SEARCH 274
737 1.1 christos #define ONES 275
738 1.1 christos #define SIGN 276
739 1.1 christos #define SIGNBITS 277
740 1.1 christos #define LINK 278
741 1.1 christos #define UNLINK 279
742 1.1 christos #define REG 280
743 1.1 christos #define PC 281
744 1.1 christos #define CCREG 282
745 1.1 christos #define BYTE_DREG 283
746 1.1 christos #define REG_A_DOUBLE_ZERO 284
747 1.1 christos #define REG_A_DOUBLE_ONE 285
748 1.1 christos #define A_ZERO_DOT_L 286
749 1.1 christos #define A_ZERO_DOT_H 287
750 1.1 christos #define A_ONE_DOT_L 288
751 1.1 christos #define A_ONE_DOT_H 289
752 1.1 christos #define HALF_REG 290
753 1.1 christos #define NOP 291
754 1.1 christos #define RTI 292
755 1.1 christos #define RTS 293
756 1.1 christos #define RTX 294
757 1.1 christos #define RTN 295
758 1.1 christos #define RTE 296
759 1.1 christos #define HLT 297
760 1.1 christos #define IDLE 298
761 1.1 christos #define STI 299
762 1.1 christos #define CLI 300
763 1.1 christos #define CSYNC 301
764 1.1 christos #define SSYNC 302
765 1.1 christos #define EMUEXCPT 303
766 1.1 christos #define RAISE 304
767 1.1 christos #define EXCPT 305
768 1.1 christos #define LSETUP 306
769 1.1 christos #define LOOP 307
770 1.1 christos #define LOOP_BEGIN 308
771 1.1 christos #define LOOP_END 309
772 1.1 christos #define DISALGNEXCPT 310
773 1.1 christos #define JUMP 311
774 1.1 christos #define JUMP_DOT_S 312
775 1.1 christos #define JUMP_DOT_L 313
776 1.1 christos #define CALL 314
777 1.1 christos #define ABORT 315
778 1.1 christos #define NOT 316
779 1.1 christos #define TILDA 317
780 1.1 christos #define BANG 318
781 1.1 christos #define AMPERSAND 319
782 1.1 christos #define BAR 320
783 1.1 christos #define PERCENT 321
784 1.1 christos #define CARET 322
785 1.1 christos #define BXOR 323
786 1.1 christos #define MINUS 324
787 1.1 christos #define PLUS 325
788 1.1 christos #define STAR 326
789 1.1 christos #define SLASH 327
790 1.1 christos #define NEG 328
791 1.1 christos #define MIN 329
792 1.1 christos #define MAX 330
793 1.1 christos #define ABS 331
794 1.1 christos #define DOUBLE_BAR 332
795 1.1 christos #define _PLUS_BAR_PLUS 333
796 1.1 christos #define _PLUS_BAR_MINUS 334
797 1.1 christos #define _MINUS_BAR_PLUS 335
798 1.1 christos #define _MINUS_BAR_MINUS 336
799 1.1 christos #define _MINUS_MINUS 337
800 1.1 christos #define _PLUS_PLUS 338
801 1.1 christos #define SHIFT 339
802 1.1 christos #define LSHIFT 340
803 1.1 christos #define ASHIFT 341
804 1.1 christos #define BXORSHIFT 342
805 1.1 christos #define _GREATER_GREATER_GREATER_THAN_ASSIGN 343
806 1.1 christos #define ROT 344
807 1.1 christos #define LESS_LESS 345
808 1.1 christos #define GREATER_GREATER 346
809 1.1 christos #define _GREATER_GREATER_GREATER 347
810 1.1 christos #define _LESS_LESS_ASSIGN 348
811 1.1 christos #define _GREATER_GREATER_ASSIGN 349
812 1.1 christos #define DIVS 350
813 1.1 christos #define DIVQ 351
814 1.1 christos #define ASSIGN 352
815 1.1 christos #define _STAR_ASSIGN 353
816 1.1 christos #define _BAR_ASSIGN 354
817 1.1 christos #define _CARET_ASSIGN 355
818 1.1 christos #define _AMPERSAND_ASSIGN 356
819 1.1 christos #define _MINUS_ASSIGN 357
820 1.1 christos #define _PLUS_ASSIGN 358
821 1.1 christos #define _ASSIGN_BANG 359
822 1.1 christos #define _LESS_THAN_ASSIGN 360
823 1.1 christos #define _ASSIGN_ASSIGN 361
824 1.1 christos #define GE 362
825 1.1 christos #define LT 363
826 1.1 christos #define LE 364
827 1.1 christos #define GT 365
828 1.1 christos #define LESS_THAN 366
829 1.1 christos #define FLUSHINV 367
830 1.1 christos #define FLUSH 368
831 1.1 christos #define IFLUSH 369
832 1.1 christos #define PREFETCH 370
833 1.1 christos #define PRNT 371
834 1.1 christos #define OUTC 372
835 1.1 christos #define WHATREG 373
836 1.1 christos #define TESTSET 374
837 1.1 christos #define ASL 375
838 1.1 christos #define ASR 376
839 1.1 christos #define B 377
840 1.1 christos #define W 378
841 1.1 christos #define NS 379
842 1.1 christos #define S 380
843 1.1 christos #define CO 381
844 1.1 christos #define SCO 382
845 1.1 christos #define TH 383
846 1.1 christos #define TL 384
847 1.1 christos #define BP 385
848 1.1 christos #define BREV 386
849 1.1 christos #define X 387
850 1.1 christos #define Z 388
851 1.1 christos #define M 389
852 1.1 christos #define MMOD 390
853 1.1 christos #define R 391
854 1.1 christos #define RND 392
855 1.1 christos #define RNDL 393
856 1.1 christos #define RNDH 394
857 1.1 christos #define RND12 395
858 1.1 christos #define RND20 396
859 1.1 christos #define V 397
860 1.1 christos #define LO 398
861 1.1 christos #define HI 399
862 1.1 christos #define BITTGL 400
863 1.1 christos #define BITCLR 401
864 1.1 christos #define BITSET 402
865 1.1 christos #define BITTST 403
866 1.1 christos #define BITMUX 404
867 1.1 christos #define DBGAL 405
868 1.1 christos #define DBGAH 406
869 1.1 christos #define DBGHALT 407
870 1.1 christos #define DBG 408
871 1.1 christos #define DBGA 409
872 1.1 christos #define DBGCMPLX 410
873 1.1 christos #define IF 411
874 1.1 christos #define COMMA 412
875 1.1 christos #define BY 413
876 1.1 christos #define COLON 414
877 1.1 christos #define SEMICOLON 415
878 1.1 christos #define RPAREN 416
879 1.1 christos #define LPAREN 417
880 1.1 christos #define LBRACK 418
881 1.1 christos #define RBRACK 419
882 1.1 christos #define STATUS_REG 420
883 1.1 christos #define MNOP 421
884 1.1 christos #define SYMBOL 422
885 1.1 christos #define NUMBER 423
886 1.1 christos #define GOT 424
887 1.1 christos #define GOT17M4 425
888 1.1 christos #define FUNCDESC_GOT17M4 426
889 1.1 christos #define AT 427
890 1.1 christos #define PLTPC 428
891 1.1 christos
892 1.1 christos /* Value type. */
893 1.1 christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
894 1.1 christos union YYSTYPE
895 1.1 christos {
896 1.1 christos #line 447 "./config/bfin-parse.y"
897 1.1 christos
898 1.1 christos INSTR_T instr;
899 1.1 christos Expr_Node *expr;
900 1.1 christos SYMBOL_T symbol;
901 1.1 christos long value;
902 1.1 christos Register reg;
903 1.1 christos Macfunc macfunc;
904 1.1 christos struct { int r0; int s0; int x0; int aop; } modcodes;
905 1.1 christos struct { int r0; } r0;
906 1.1 christos Opt_mode mod;
907 1.1 christos
908 1.1 christos #line 909 "config/bfin-parse.c"
909 1.1 christos
910 1.1 christos };
911 1.1 christos typedef union YYSTYPE YYSTYPE;
912 1.1 christos # define YYSTYPE_IS_TRIVIAL 1
913 1.1 christos # define YYSTYPE_IS_DECLARED 1
914 1.1 christos #endif
915 1.1 christos
916 1.1 christos
917 1.1 christos extern YYSTYPE yylval;
918 1.1 christos
919 1.1 christos
920 1.1 christos int yyparse (void);
921 1.1 christos
922 1.1 christos
923 1.1 christos #endif /* !YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED */
924 1.1 christos /* Symbol kind. */
925 1.1 christos enum yysymbol_kind_t
926 1.1 christos {
927 1.1 christos YYSYMBOL_YYEMPTY = -2,
928 1.1 christos YYSYMBOL_YYEOF = 0, /* "end of file" */
929 1.1 christos YYSYMBOL_YYerror = 1, /* error */
930 1.1 christos YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
931 1.1 christos YYSYMBOL_BYTEOP16P = 3, /* BYTEOP16P */
932 1.1 christos YYSYMBOL_BYTEOP16M = 4, /* BYTEOP16M */
933 1.1 christos YYSYMBOL_BYTEOP1P = 5, /* BYTEOP1P */
934 1.1 christos YYSYMBOL_BYTEOP2P = 6, /* BYTEOP2P */
935 1.1 christos YYSYMBOL_BYTEOP3P = 7, /* BYTEOP3P */
936 1.1 christos YYSYMBOL_BYTEUNPACK = 8, /* BYTEUNPACK */
937 1.1 christos YYSYMBOL_BYTEPACK = 9, /* BYTEPACK */
938 1.1 christos YYSYMBOL_PACK = 10, /* PACK */
939 1.1 christos YYSYMBOL_SAA = 11, /* SAA */
940 1.1 christos YYSYMBOL_ALIGN8 = 12, /* ALIGN8 */
941 1.1 christos YYSYMBOL_ALIGN16 = 13, /* ALIGN16 */
942 1.1 christos YYSYMBOL_ALIGN24 = 14, /* ALIGN24 */
943 1.1 christos YYSYMBOL_VIT_MAX = 15, /* VIT_MAX */
944 1.1 christos YYSYMBOL_EXTRACT = 16, /* EXTRACT */
945 1.1 christos YYSYMBOL_DEPOSIT = 17, /* DEPOSIT */
946 1.1 christos YYSYMBOL_EXPADJ = 18, /* EXPADJ */
947 1.1 christos YYSYMBOL_SEARCH = 19, /* SEARCH */
948 1.1 christos YYSYMBOL_ONES = 20, /* ONES */
949 1.1 christos YYSYMBOL_SIGN = 21, /* SIGN */
950 1.1 christos YYSYMBOL_SIGNBITS = 22, /* SIGNBITS */
951 1.1 christos YYSYMBOL_LINK = 23, /* LINK */
952 1.1 christos YYSYMBOL_UNLINK = 24, /* UNLINK */
953 1.1 christos YYSYMBOL_REG = 25, /* REG */
954 1.1 christos YYSYMBOL_PC = 26, /* PC */
955 1.1 christos YYSYMBOL_CCREG = 27, /* CCREG */
956 1.1 christos YYSYMBOL_BYTE_DREG = 28, /* BYTE_DREG */
957 1.1 christos YYSYMBOL_REG_A_DOUBLE_ZERO = 29, /* REG_A_DOUBLE_ZERO */
958 1.1 christos YYSYMBOL_REG_A_DOUBLE_ONE = 30, /* REG_A_DOUBLE_ONE */
959 1.1 christos YYSYMBOL_A_ZERO_DOT_L = 31, /* A_ZERO_DOT_L */
960 1.1 christos YYSYMBOL_A_ZERO_DOT_H = 32, /* A_ZERO_DOT_H */
961 1.1 christos YYSYMBOL_A_ONE_DOT_L = 33, /* A_ONE_DOT_L */
962 1.1 christos YYSYMBOL_A_ONE_DOT_H = 34, /* A_ONE_DOT_H */
963 1.1 christos YYSYMBOL_HALF_REG = 35, /* HALF_REG */
964 1.1 christos YYSYMBOL_NOP = 36, /* NOP */
965 1.1 christos YYSYMBOL_RTI = 37, /* RTI */
966 1.1 christos YYSYMBOL_RTS = 38, /* RTS */
967 1.1 christos YYSYMBOL_RTX = 39, /* RTX */
968 1.1 christos YYSYMBOL_RTN = 40, /* RTN */
969 1.1 christos YYSYMBOL_RTE = 41, /* RTE */
970 1.1 christos YYSYMBOL_HLT = 42, /* HLT */
971 1.1 christos YYSYMBOL_IDLE = 43, /* IDLE */
972 1.1 christos YYSYMBOL_STI = 44, /* STI */
973 1.1 christos YYSYMBOL_CLI = 45, /* CLI */
974 1.1 christos YYSYMBOL_CSYNC = 46, /* CSYNC */
975 1.1 christos YYSYMBOL_SSYNC = 47, /* SSYNC */
976 1.1 christos YYSYMBOL_EMUEXCPT = 48, /* EMUEXCPT */
977 1.1 christos YYSYMBOL_RAISE = 49, /* RAISE */
978 1.1 christos YYSYMBOL_EXCPT = 50, /* EXCPT */
979 1.1 christos YYSYMBOL_LSETUP = 51, /* LSETUP */
980 1.1 christos YYSYMBOL_LOOP = 52, /* LOOP */
981 1.1 christos YYSYMBOL_LOOP_BEGIN = 53, /* LOOP_BEGIN */
982 1.1 christos YYSYMBOL_LOOP_END = 54, /* LOOP_END */
983 1.1 christos YYSYMBOL_DISALGNEXCPT = 55, /* DISALGNEXCPT */
984 1.1 christos YYSYMBOL_JUMP = 56, /* JUMP */
985 1.1 christos YYSYMBOL_JUMP_DOT_S = 57, /* JUMP_DOT_S */
986 1.1 christos YYSYMBOL_JUMP_DOT_L = 58, /* JUMP_DOT_L */
987 1.1 christos YYSYMBOL_CALL = 59, /* CALL */
988 1.1 christos YYSYMBOL_ABORT = 60, /* ABORT */
989 1.1 christos YYSYMBOL_NOT = 61, /* NOT */
990 1.1 christos YYSYMBOL_TILDA = 62, /* TILDA */
991 1.1 christos YYSYMBOL_BANG = 63, /* BANG */
992 1.1 christos YYSYMBOL_AMPERSAND = 64, /* AMPERSAND */
993 1.1 christos YYSYMBOL_BAR = 65, /* BAR */
994 1.1 christos YYSYMBOL_PERCENT = 66, /* PERCENT */
995 1.1 christos YYSYMBOL_CARET = 67, /* CARET */
996 1.1 christos YYSYMBOL_BXOR = 68, /* BXOR */
997 1.1 christos YYSYMBOL_MINUS = 69, /* MINUS */
998 1.1 christos YYSYMBOL_PLUS = 70, /* PLUS */
999 1.1 christos YYSYMBOL_STAR = 71, /* STAR */
1000 1.1 christos YYSYMBOL_SLASH = 72, /* SLASH */
1001 1.1 christos YYSYMBOL_NEG = 73, /* NEG */
1002 1.1 christos YYSYMBOL_MIN = 74, /* MIN */
1003 1.1 christos YYSYMBOL_MAX = 75, /* MAX */
1004 1.1 christos YYSYMBOL_ABS = 76, /* ABS */
1005 1.1 christos YYSYMBOL_DOUBLE_BAR = 77, /* DOUBLE_BAR */
1006 1.1 christos YYSYMBOL__PLUS_BAR_PLUS = 78, /* _PLUS_BAR_PLUS */
1007 1.1 christos YYSYMBOL__PLUS_BAR_MINUS = 79, /* _PLUS_BAR_MINUS */
1008 1.1 christos YYSYMBOL__MINUS_BAR_PLUS = 80, /* _MINUS_BAR_PLUS */
1009 1.1 christos YYSYMBOL__MINUS_BAR_MINUS = 81, /* _MINUS_BAR_MINUS */
1010 1.1 christos YYSYMBOL__MINUS_MINUS = 82, /* _MINUS_MINUS */
1011 1.1 christos YYSYMBOL__PLUS_PLUS = 83, /* _PLUS_PLUS */
1012 1.1 christos YYSYMBOL_SHIFT = 84, /* SHIFT */
1013 1.1 christos YYSYMBOL_LSHIFT = 85, /* LSHIFT */
1014 1.1 christos YYSYMBOL_ASHIFT = 86, /* ASHIFT */
1015 1.1 christos YYSYMBOL_BXORSHIFT = 87, /* BXORSHIFT */
1016 1.1 christos YYSYMBOL__GREATER_GREATER_GREATER_THAN_ASSIGN = 88, /* _GREATER_GREATER_GREATER_THAN_ASSIGN */
1017 1.1 christos YYSYMBOL_ROT = 89, /* ROT */
1018 1.1 christos YYSYMBOL_LESS_LESS = 90, /* LESS_LESS */
1019 1.1 christos YYSYMBOL_GREATER_GREATER = 91, /* GREATER_GREATER */
1020 1.1 christos YYSYMBOL__GREATER_GREATER_GREATER = 92, /* _GREATER_GREATER_GREATER */
1021 1.1 christos YYSYMBOL__LESS_LESS_ASSIGN = 93, /* _LESS_LESS_ASSIGN */
1022 1.1 christos YYSYMBOL__GREATER_GREATER_ASSIGN = 94, /* _GREATER_GREATER_ASSIGN */
1023 1.1 christos YYSYMBOL_DIVS = 95, /* DIVS */
1024 1.1 christos YYSYMBOL_DIVQ = 96, /* DIVQ */
1025 1.1 christos YYSYMBOL_ASSIGN = 97, /* ASSIGN */
1026 1.1 christos YYSYMBOL__STAR_ASSIGN = 98, /* _STAR_ASSIGN */
1027 1.1 christos YYSYMBOL__BAR_ASSIGN = 99, /* _BAR_ASSIGN */
1028 1.1 christos YYSYMBOL__CARET_ASSIGN = 100, /* _CARET_ASSIGN */
1029 1.1 christos YYSYMBOL__AMPERSAND_ASSIGN = 101, /* _AMPERSAND_ASSIGN */
1030 1.1 christos YYSYMBOL__MINUS_ASSIGN = 102, /* _MINUS_ASSIGN */
1031 1.1 christos YYSYMBOL__PLUS_ASSIGN = 103, /* _PLUS_ASSIGN */
1032 1.1 christos YYSYMBOL__ASSIGN_BANG = 104, /* _ASSIGN_BANG */
1033 1.1 christos YYSYMBOL__LESS_THAN_ASSIGN = 105, /* _LESS_THAN_ASSIGN */
1034 1.1 christos YYSYMBOL__ASSIGN_ASSIGN = 106, /* _ASSIGN_ASSIGN */
1035 1.1 christos YYSYMBOL_GE = 107, /* GE */
1036 1.1 christos YYSYMBOL_LT = 108, /* LT */
1037 1.1 christos YYSYMBOL_LE = 109, /* LE */
1038 1.1 christos YYSYMBOL_GT = 110, /* GT */
1039 1.1 christos YYSYMBOL_LESS_THAN = 111, /* LESS_THAN */
1040 1.1 christos YYSYMBOL_FLUSHINV = 112, /* FLUSHINV */
1041 1.1 christos YYSYMBOL_FLUSH = 113, /* FLUSH */
1042 1.1 christos YYSYMBOL_IFLUSH = 114, /* IFLUSH */
1043 1.1 christos YYSYMBOL_PREFETCH = 115, /* PREFETCH */
1044 1.1 christos YYSYMBOL_PRNT = 116, /* PRNT */
1045 1.1 christos YYSYMBOL_OUTC = 117, /* OUTC */
1046 1.1 christos YYSYMBOL_WHATREG = 118, /* WHATREG */
1047 1.1 christos YYSYMBOL_TESTSET = 119, /* TESTSET */
1048 1.1 christos YYSYMBOL_ASL = 120, /* ASL */
1049 1.1 christos YYSYMBOL_ASR = 121, /* ASR */
1050 1.1 christos YYSYMBOL_B = 122, /* B */
1051 1.1 christos YYSYMBOL_W = 123, /* W */
1052 1.1 christos YYSYMBOL_NS = 124, /* NS */
1053 1.1 christos YYSYMBOL_S = 125, /* S */
1054 1.1 christos YYSYMBOL_CO = 126, /* CO */
1055 1.1 christos YYSYMBOL_SCO = 127, /* SCO */
1056 1.1 christos YYSYMBOL_TH = 128, /* TH */
1057 1.1 christos YYSYMBOL_TL = 129, /* TL */
1058 1.1 christos YYSYMBOL_BP = 130, /* BP */
1059 1.1 christos YYSYMBOL_BREV = 131, /* BREV */
1060 1.1 christos YYSYMBOL_X = 132, /* X */
1061 1.1 christos YYSYMBOL_Z = 133, /* Z */
1062 1.1 christos YYSYMBOL_M = 134, /* M */
1063 1.1 christos YYSYMBOL_MMOD = 135, /* MMOD */
1064 1.1 christos YYSYMBOL_R = 136, /* R */
1065 1.1 christos YYSYMBOL_RND = 137, /* RND */
1066 1.1 christos YYSYMBOL_RNDL = 138, /* RNDL */
1067 1.1 christos YYSYMBOL_RNDH = 139, /* RNDH */
1068 1.1 christos YYSYMBOL_RND12 = 140, /* RND12 */
1069 1.1 christos YYSYMBOL_RND20 = 141, /* RND20 */
1070 1.1 christos YYSYMBOL_V = 142, /* V */
1071 1.1 christos YYSYMBOL_LO = 143, /* LO */
1072 1.1 christos YYSYMBOL_HI = 144, /* HI */
1073 1.1 christos YYSYMBOL_BITTGL = 145, /* BITTGL */
1074 1.1 christos YYSYMBOL_BITCLR = 146, /* BITCLR */
1075 1.1 christos YYSYMBOL_BITSET = 147, /* BITSET */
1076 1.1 christos YYSYMBOL_BITTST = 148, /* BITTST */
1077 1.1 christos YYSYMBOL_BITMUX = 149, /* BITMUX */
1078 1.1 christos YYSYMBOL_DBGAL = 150, /* DBGAL */
1079 1.1 christos YYSYMBOL_DBGAH = 151, /* DBGAH */
1080 1.1 christos YYSYMBOL_DBGHALT = 152, /* DBGHALT */
1081 1.1 christos YYSYMBOL_DBG = 153, /* DBG */
1082 1.1 christos YYSYMBOL_DBGA = 154, /* DBGA */
1083 1.1 christos YYSYMBOL_DBGCMPLX = 155, /* DBGCMPLX */
1084 1.1 christos YYSYMBOL_IF = 156, /* IF */
1085 1.1 christos YYSYMBOL_COMMA = 157, /* COMMA */
1086 1.1 christos YYSYMBOL_BY = 158, /* BY */
1087 1.1 christos YYSYMBOL_COLON = 159, /* COLON */
1088 1.1 christos YYSYMBOL_SEMICOLON = 160, /* SEMICOLON */
1089 1.1 christos YYSYMBOL_RPAREN = 161, /* RPAREN */
1090 1.1 christos YYSYMBOL_LPAREN = 162, /* LPAREN */
1091 1.1 christos YYSYMBOL_LBRACK = 163, /* LBRACK */
1092 1.1 christos YYSYMBOL_RBRACK = 164, /* RBRACK */
1093 1.1 christos YYSYMBOL_STATUS_REG = 165, /* STATUS_REG */
1094 1.1 christos YYSYMBOL_MNOP = 166, /* MNOP */
1095 1.1 christos YYSYMBOL_SYMBOL = 167, /* SYMBOL */
1096 1.1 christos YYSYMBOL_NUMBER = 168, /* NUMBER */
1097 1.1 christos YYSYMBOL_GOT = 169, /* GOT */
1098 1.1 christos YYSYMBOL_GOT17M4 = 170, /* GOT17M4 */
1099 1.1 christos YYSYMBOL_FUNCDESC_GOT17M4 = 171, /* FUNCDESC_GOT17M4 */
1100 1.1 christos YYSYMBOL_AT = 172, /* AT */
1101 1.1 christos YYSYMBOL_PLTPC = 173, /* PLTPC */
1102 1.1 christos YYSYMBOL_YYACCEPT = 174, /* $accept */
1103 1.1 christos YYSYMBOL_statement = 175, /* statement */
1104 1.1 christos YYSYMBOL_asm = 176, /* asm */
1105 1.1 christos YYSYMBOL_asm_1 = 177, /* asm_1 */
1106 1.1 christos YYSYMBOL_REG_A = 178, /* REG_A */
1107 1.1 christos YYSYMBOL_opt_mode = 179, /* opt_mode */
1108 1.1 christos YYSYMBOL_asr_asl = 180, /* asr_asl */
1109 1.1 christos YYSYMBOL_sco = 181, /* sco */
1110 1.1 christos YYSYMBOL_asr_asl_0 = 182, /* asr_asl_0 */
1111 1.1 christos YYSYMBOL_amod0 = 183, /* amod0 */
1112 1.1 christos YYSYMBOL_amod1 = 184, /* amod1 */
1113 1.1 christos YYSYMBOL_amod2 = 185, /* amod2 */
1114 1.1 christos YYSYMBOL_xpmod = 186, /* xpmod */
1115 1.1 christos YYSYMBOL_xpmod1 = 187, /* xpmod1 */
1116 1.1 christos YYSYMBOL_vsmod = 188, /* vsmod */
1117 1.1 christos YYSYMBOL_vmod = 189, /* vmod */
1118 1.1 christos YYSYMBOL_smod = 190, /* smod */
1119 1.1 christos YYSYMBOL_searchmod = 191, /* searchmod */
1120 1.1 christos YYSYMBOL_aligndir = 192, /* aligndir */
1121 1.1 christos YYSYMBOL_byteop_mod = 193, /* byteop_mod */
1122 1.1 christos YYSYMBOL_c_align = 194, /* c_align */
1123 1.1 christos YYSYMBOL_w32_or_nothing = 195, /* w32_or_nothing */
1124 1.1 christos YYSYMBOL_iu_or_nothing = 196, /* iu_or_nothing */
1125 1.1 christos YYSYMBOL_reg_with_predec = 197, /* reg_with_predec */
1126 1.1 christos YYSYMBOL_reg_with_postinc = 198, /* reg_with_postinc */
1127 1.1 christos YYSYMBOL_min_max = 199, /* min_max */
1128 1.1 christos YYSYMBOL_op_bar_op = 200, /* op_bar_op */
1129 1.1 christos YYSYMBOL_plus_minus = 201, /* plus_minus */
1130 1.1 christos YYSYMBOL_rnd_op = 202, /* rnd_op */
1131 1.1 christos YYSYMBOL_b3_op = 203, /* b3_op */
1132 1.1 christos YYSYMBOL_post_op = 204, /* post_op */
1133 1.1 christos YYSYMBOL_a_assign = 205, /* a_assign */
1134 1.1 christos YYSYMBOL_a_minusassign = 206, /* a_minusassign */
1135 1.1 christos YYSYMBOL_a_plusassign = 207, /* a_plusassign */
1136 1.1 christos YYSYMBOL_assign_macfunc = 208, /* assign_macfunc */
1137 1.1 christos YYSYMBOL_a_macfunc = 209, /* a_macfunc */
1138 1.1 christos YYSYMBOL_multiply_halfregs = 210, /* multiply_halfregs */
1139 1.1 christos YYSYMBOL_cc_op = 211, /* cc_op */
1140 1.1 christos YYSYMBOL_ccstat = 212, /* ccstat */
1141 1.1 christos YYSYMBOL_symbol = 213, /* symbol */
1142 1.1 christos YYSYMBOL_any_gotrel = 214, /* any_gotrel */
1143 1.1 christos YYSYMBOL_got = 215, /* got */
1144 1.1 christos YYSYMBOL_got_or_expr = 216, /* got_or_expr */
1145 1.1 christos YYSYMBOL_pltpc = 217, /* pltpc */
1146 1.1 christos YYSYMBOL_eterm = 218, /* eterm */
1147 1.1 christos YYSYMBOL_expr = 219, /* expr */
1148 1.1 christos YYSYMBOL_expr_1 = 220 /* expr_1 */
1149 1.1 christos };
1150 1.1 christos typedef enum yysymbol_kind_t yysymbol_kind_t;
1151 1.1 christos
1152 1.1 christos
1153 1.1 christos
1154 1.1 christos
1155 1.1 christos #ifdef short
1156 1.1 christos # undef short
1157 1.1 christos #endif
1158 1.1 christos
1159 1.1 christos /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
1160 1.1 christos <limits.h> and (if available) <stdint.h> are included
1161 1.1 christos so that the code can choose integer types of a good width. */
1162 1.1 christos
1163 1.1 christos #ifndef __PTRDIFF_MAX__
1164 1.1 christos # include <limits.h> /* INFRINGES ON USER NAME SPACE */
1165 1.1 christos # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1166 1.1 christos # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
1167 1.1 christos # define YY_STDINT_H
1168 1.1 christos # endif
1169 1.1 christos #endif
1170 1.1 christos
1171 1.1 christos /* Narrow types that promote to a signed type and that can represent a
1172 1.1 christos signed or unsigned integer of at least N bits. In tables they can
1173 1.1 christos save space and decrease cache pressure. Promoting to a signed type
1174 1.1 christos helps avoid bugs in integer arithmetic. */
1175 1.1 christos
1176 1.1 christos #ifdef __INT_LEAST8_MAX__
1177 1.1 christos typedef __INT_LEAST8_TYPE__ yytype_int8;
1178 1.1 christos #elif defined YY_STDINT_H
1179 1.1 christos typedef int_least8_t yytype_int8;
1180 1.1 christos #else
1181 1.1 christos typedef signed char yytype_int8;
1182 1.1 christos #endif
1183 1.1 christos
1184 1.1 christos #ifdef __INT_LEAST16_MAX__
1185 1.1 christos typedef __INT_LEAST16_TYPE__ yytype_int16;
1186 1.1 christos #elif defined YY_STDINT_H
1187 1.1 christos typedef int_least16_t yytype_int16;
1188 1.1 christos #else
1189 1.1 christos typedef short yytype_int16;
1190 1.1 christos #endif
1191 1.1 christos
1192 1.1 christos /* Work around bug in HP-UX 11.23, which defines these macros
1193 1.1 christos incorrectly for preprocessor constants. This workaround can likely
1194 1.1 christos be removed in 2023, as HPE has promised support for HP-UX 11.23
1195 1.1 christos (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
1196 1.1 christos <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
1197 1.1 christos #ifdef __hpux
1198 1.1 christos # undef UINT_LEAST8_MAX
1199 1.1 christos # undef UINT_LEAST16_MAX
1200 1.1 christos # define UINT_LEAST8_MAX 255
1201 1.1 christos # define UINT_LEAST16_MAX 65535
1202 1.1 christos #endif
1203 1.1 christos
1204 1.1 christos #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
1205 1.1 christos typedef __UINT_LEAST8_TYPE__ yytype_uint8;
1206 1.1 christos #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
1207 1.1 christos && UINT_LEAST8_MAX <= INT_MAX)
1208 1.1 christos typedef uint_least8_t yytype_uint8;
1209 1.1 christos #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
1210 1.1 christos typedef unsigned char yytype_uint8;
1211 1.1 christos #else
1212 1.1 christos typedef short yytype_uint8;
1213 1.1 christos #endif
1214 1.1 christos
1215 1.1 christos #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
1216 1.1 christos typedef __UINT_LEAST16_TYPE__ yytype_uint16;
1217 1.1 christos #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
1218 1.1 christos && UINT_LEAST16_MAX <= INT_MAX)
1219 1.1 christos typedef uint_least16_t yytype_uint16;
1220 1.1 christos #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
1221 1.1 christos typedef unsigned short yytype_uint16;
1222 1.1 christos #else
1223 1.1 christos typedef int yytype_uint16;
1224 1.1 christos #endif
1225 1.1 christos
1226 1.1 christos #ifndef YYPTRDIFF_T
1227 1.1 christos # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
1228 1.1 christos # define YYPTRDIFF_T __PTRDIFF_TYPE__
1229 1.1 christos # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
1230 1.1 christos # elif defined PTRDIFF_MAX
1231 1.1 christos # ifndef ptrdiff_t
1232 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1233 1.1 christos # endif
1234 1.1 christos # define YYPTRDIFF_T ptrdiff_t
1235 1.1 christos # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
1236 1.1 christos # else
1237 1.1 christos # define YYPTRDIFF_T long
1238 1.1 christos # define YYPTRDIFF_MAXIMUM LONG_MAX
1239 1.1 christos # endif
1240 1.1 christos #endif
1241 1.1 christos
1242 1.1 christos #ifndef YYSIZE_T
1243 1.1 christos # ifdef __SIZE_TYPE__
1244 1.1 christos # define YYSIZE_T __SIZE_TYPE__
1245 1.1 christos # elif defined size_t
1246 1.1 christos # define YYSIZE_T size_t
1247 1.1 christos # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1248 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1249 1.1 christos # define YYSIZE_T size_t
1250 1.1 christos # else
1251 1.1 christos # define YYSIZE_T unsigned
1252 1.1 christos # endif
1253 1.1 christos #endif
1254 1.1 christos
1255 1.1 christos #define YYSIZE_MAXIMUM \
1256 1.1 christos YY_CAST (YYPTRDIFF_T, \
1257 1.1 christos (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
1258 1.1 christos ? YYPTRDIFF_MAXIMUM \
1259 1.1 christos : YY_CAST (YYSIZE_T, -1)))
1260 1.1 christos
1261 1.1 christos #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
1262 1.1 christos
1263 1.1 christos
1264 1.1 christos /* Stored state numbers (used for stacks). */
1265 1.1 christos typedef yytype_int16 yy_state_t;
1266 1.1 christos
1267 1.1 christos /* State numbers in computations. */
1268 1.1 christos typedef int yy_state_fast_t;
1269 1.1 christos
1270 1.1 christos #ifndef YY_
1271 1.1 christos # if defined YYENABLE_NLS && YYENABLE_NLS
1272 1.1 christos # if ENABLE_NLS
1273 1.1 christos # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1274 1.1 christos # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1275 1.1 christos # endif
1276 1.1 christos # endif
1277 1.1 christos # ifndef YY_
1278 1.1 christos # define YY_(Msgid) Msgid
1279 1.1 christos # endif
1280 1.1 christos #endif
1281 1.1 christos
1282 1.1 christos
1283 1.1 christos #ifndef YY_ATTRIBUTE_PURE
1284 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1285 1.1 christos # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1286 1.1 christos # else
1287 1.1 christos # define YY_ATTRIBUTE_PURE
1288 1.1 christos # endif
1289 1.1 christos #endif
1290 1.1 christos
1291 1.1 christos #ifndef YY_ATTRIBUTE_UNUSED
1292 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1293 1.1 christos # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1294 1.1 christos # else
1295 1.1 christos # define YY_ATTRIBUTE_UNUSED
1296 1.1 christos # endif
1297 1.1 christos #endif
1298 1.1 christos
1299 1.1 christos /* Suppress unused-variable warnings by "using" E. */
1300 1.1 christos #if ! defined lint || defined __GNUC__
1301 1.1 christos # define YY_USE(E) ((void) (E))
1302 1.1 christos #else
1303 1.1 christos # define YY_USE(E) /* empty */
1304 1.1 christos #endif
1305 1.1 christos
1306 1.1 christos /* Suppress an incorrect diagnostic about yylval being uninitialized. */
1307 1.1 christos #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
1308 1.1 christos # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
1309 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1310 1.1 christos _Pragma ("GCC diagnostic push") \
1311 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
1312 1.1 christos # else
1313 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1314 1.1 christos _Pragma ("GCC diagnostic push") \
1315 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
1316 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1317 1.1 christos # endif
1318 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1319 1.1 christos _Pragma ("GCC diagnostic pop")
1320 1.1 christos #else
1321 1.1 christos # define YY_INITIAL_VALUE(Value) Value
1322 1.1 christos #endif
1323 1.1 christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1324 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1325 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
1326 1.1 christos #endif
1327 1.1 christos #ifndef YY_INITIAL_VALUE
1328 1.1 christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
1329 1.1 christos #endif
1330 1.1 christos
1331 1.1 christos #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1332 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN \
1333 1.1 christos _Pragma ("GCC diagnostic push") \
1334 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1335 1.1 christos # define YY_IGNORE_USELESS_CAST_END \
1336 1.1 christos _Pragma ("GCC diagnostic pop")
1337 1.1 christos #endif
1338 1.1 christos #ifndef YY_IGNORE_USELESS_CAST_BEGIN
1339 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN
1340 1.1 christos # define YY_IGNORE_USELESS_CAST_END
1341 1.1 christos #endif
1342 1.1 christos
1343 1.1 christos
1344 1.1 christos #define YY_ASSERT(E) ((void) (0 && (E)))
1345 1.1 christos
1346 1.1 christos #if !defined yyoverflow
1347 1.1 christos
1348 1.1 christos /* The parser invokes alloca or malloc; define the necessary symbols. */
1349 1.1 christos
1350 1.1 christos # ifdef YYSTACK_USE_ALLOCA
1351 1.1 christos # if YYSTACK_USE_ALLOCA
1352 1.1 christos # ifdef __GNUC__
1353 1.1 christos # define YYSTACK_ALLOC __builtin_alloca
1354 1.1 christos # elif defined __BUILTIN_VA_ARG_INCR
1355 1.1 christos # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1356 1.1 christos # elif defined _AIX
1357 1.1 christos # define YYSTACK_ALLOC __alloca
1358 1.1 christos # elif defined _MSC_VER
1359 1.1 christos # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1360 1.1 christos # define alloca _alloca
1361 1.1 christos # else
1362 1.1 christos # define YYSTACK_ALLOC alloca
1363 1.1 christos # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1364 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1365 1.1 christos /* Use EXIT_SUCCESS as a witness for stdlib.h. */
1366 1.1 christos # ifndef EXIT_SUCCESS
1367 1.1 christos # define EXIT_SUCCESS 0
1368 1.1 christos # endif
1369 1.1 christos # endif
1370 1.1 christos # endif
1371 1.1 christos # endif
1372 1.1 christos # endif
1373 1.1 christos
1374 1.1 christos # ifdef YYSTACK_ALLOC
1375 1.1 christos /* Pacify GCC's 'empty if-body' warning. */
1376 1.1 christos # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1377 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
1378 1.1 christos /* The OS might guarantee only one guard page at the bottom of the stack,
1379 1.1 christos and a page size can be as small as 4096 bytes. So we cannot safely
1380 1.1 christos invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1381 1.1 christos to allow for a few compiler-allocated temporary stack slots. */
1382 1.1 christos # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1383 1.1 christos # endif
1384 1.1 christos # else
1385 1.1 christos # define YYSTACK_ALLOC YYMALLOC
1386 1.1 christos # define YYSTACK_FREE YYFREE
1387 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
1388 1.1 christos # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1389 1.1 christos # endif
1390 1.1 christos # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1391 1.1 christos && ! ((defined YYMALLOC || defined malloc) \
1392 1.1 christos && (defined YYFREE || defined free)))
1393 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1394 1.1 christos # ifndef EXIT_SUCCESS
1395 1.1 christos # define EXIT_SUCCESS 0
1396 1.1 christos # endif
1397 1.1 christos # endif
1398 1.1 christos # ifndef YYMALLOC
1399 1.1 christos # define YYMALLOC malloc
1400 1.1 christos # if ! defined malloc && ! defined EXIT_SUCCESS
1401 1.1 christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1402 1.1 christos # endif
1403 1.1 christos # endif
1404 1.1 christos # ifndef YYFREE
1405 1.1 christos # define YYFREE free
1406 1.1 christos # if ! defined free && ! defined EXIT_SUCCESS
1407 1.1 christos void free (void *); /* INFRINGES ON USER NAME SPACE */
1408 1.1 christos # endif
1409 1.1 christos # endif
1410 1.1 christos # endif
1411 1.1 christos #endif /* !defined yyoverflow */
1412 1.1 christos
1413 1.1 christos #if (! defined yyoverflow \
1414 1.1 christos && (! defined __cplusplus \
1415 1.1 christos || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1416 1.1 christos
1417 1.1 christos /* A type that is properly aligned for any stack member. */
1418 1.1 christos union yyalloc
1419 1.1 christos {
1420 1.1 christos yy_state_t yyss_alloc;
1421 1.1 christos YYSTYPE yyvs_alloc;
1422 1.1 christos };
1423 1.1 christos
1424 1.1 christos /* The size of the maximum gap between one aligned stack and the next. */
1425 1.1 christos # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1426 1.1 christos
1427 1.1 christos /* The size of an array large to enough to hold all stacks, each with
1428 1.1 christos N elements. */
1429 1.1 christos # define YYSTACK_BYTES(N) \
1430 1.1 christos ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1431 1.1 christos + YYSTACK_GAP_MAXIMUM)
1432 1.1 christos
1433 1.1 christos # define YYCOPY_NEEDED 1
1434 1.1 christos
1435 1.1 christos /* Relocate STACK from its old location to the new one. The
1436 1.1 christos local variables YYSIZE and YYSTACKSIZE give the old and new number of
1437 1.1 christos elements in the stack, and YYPTR gives the new location of the
1438 1.1 christos stack. Advance YYPTR to a properly aligned location for the next
1439 1.1 christos stack. */
1440 1.1 christos # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1441 1.1 christos do \
1442 1.1 christos { \
1443 1.1 christos YYPTRDIFF_T yynewbytes; \
1444 1.1 christos YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1445 1.1 christos Stack = &yyptr->Stack_alloc; \
1446 1.1 christos yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1447 1.1 christos yyptr += yynewbytes / YYSIZEOF (*yyptr); \
1448 1.1 christos } \
1449 1.1 christos while (0)
1450 1.1 christos
1451 1.1 christos #endif
1452 1.1 christos
1453 1.1 christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1454 1.1 christos /* Copy COUNT objects from SRC to DST. The source and destination do
1455 1.1 christos not overlap. */
1456 1.1 christos # ifndef YYCOPY
1457 1.1 christos # if defined __GNUC__ && 1 < __GNUC__
1458 1.1 christos # define YYCOPY(Dst, Src, Count) \
1459 1.1 christos __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1460 1.1 christos # else
1461 1.1 christos # define YYCOPY(Dst, Src, Count) \
1462 1.1 christos do \
1463 1.1 christos { \
1464 1.1 christos YYPTRDIFF_T yyi; \
1465 1.1 christos for (yyi = 0; yyi < (Count); yyi++) \
1466 1.1 christos (Dst)[yyi] = (Src)[yyi]; \
1467 1.1 christos } \
1468 1.1 christos while (0)
1469 1.1 christos # endif
1470 1.1 christos # endif
1471 1.1 christos #endif /* !YYCOPY_NEEDED */
1472 1.1 christos
1473 1.1 christos /* YYFINAL -- State number of the termination state. */
1474 1.1 christos #define YYFINAL 156
1475 1.1 christos /* YYLAST -- Last index in YYTABLE. */
1476 1.1 christos #define YYLAST 1309
1477 1.1 christos
1478 1.1 christos /* YYNTOKENS -- Number of terminals. */
1479 1.1 christos #define YYNTOKENS 174
1480 1.1 christos /* YYNNTS -- Number of nonterminals. */
1481 1.1 christos #define YYNNTS 47
1482 1.1 christos /* YYNRULES -- Number of rules. */
1483 1.1 christos #define YYNRULES 354
1484 1.1 christos /* YYNSTATES -- Number of states. */
1485 1.1 christos #define YYNSTATES 1021
1486 1.1 christos
1487 1.1 christos /* YYMAXUTOK -- Last valid token kind. */
1488 1.1 christos #define YYMAXUTOK 428
1489 1.1 christos
1490 1.1 christos
1491 1.1 christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1492 1.1 christos as returned by yylex, with out-of-bounds checking. */
1493 1.1 christos #define YYTRANSLATE(YYX) \
1494 1.1 christos (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1495 1.1 christos ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1496 1.1 christos : YYSYMBOL_YYUNDEF)
1497 1.1 christos
1498 1.1 christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1499 1.1 christos as returned by yylex. */
1500 1.1 christos static const yytype_uint8 yytranslate[] =
1501 1.1 christos {
1502 1.1 christos 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1503 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1504 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1505 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1506 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1507 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1508 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1509 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1510 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1511 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1512 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1513 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1514 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1516 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1517 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1518 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1519 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1520 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1521 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1522 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1523 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1524 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1525 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1526 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1527 1.1 christos 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1528 1.1 christos 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1529 1.1 christos 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1530 1.1 christos 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1531 1.1 christos 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1532 1.1 christos 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1533 1.1 christos 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1534 1.1 christos 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1535 1.1 christos 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1536 1.1 christos 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1537 1.1 christos 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1538 1.1 christos 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1539 1.1 christos 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1540 1.1 christos 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1541 1.1 christos 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
1542 1.1 christos 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
1543 1.1 christos 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
1544 1.1 christos 165, 166, 167, 168, 169, 170, 171, 172, 173
1545 1.1 christos };
1546 1.1 christos
1547 1.1 christos #if YYDEBUG
1548 1.1 christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1549 1.1 christos static const yytype_int16 yyrline[] =
1550 1.1 christos {
1551 1.1 christos 0, 648, 648, 649, 661, 663, 696, 723, 734, 738,
1552 1.1 christos 776, 796, 801, 811, 821, 826, 831, 849, 867, 881,
1553 1.1 christos 894, 910, 932, 950, 975, 997, 1002, 1012, 1023, 1034,
1554 1.1 christos 1048, 1063, 1079, 1095, 1106, 1120, 1146, 1164, 1169, 1175,
1555 1.1 christos 1187, 1198, 1209, 1220, 1231, 1242, 1253, 1279, 1293, 1303,
1556 1.1 christos 1348, 1367, 1378, 1389, 1400, 1411, 1422, 1438, 1455, 1471,
1557 1.1 christos 1482, 1493, 1526, 1537, 1550, 1561, 1600, 1610, 1620, 1640,
1558 1.1 christos 1650, 1660, 1671, 1685, 1696, 1709, 1719, 1731, 1746, 1757,
1559 1.1 christos 1763, 1785, 1796, 1807, 1815, 1841, 1871, 1900, 1931, 1945,
1560 1.1 christos 1956, 1970, 2004, 2022, 2047, 2059, 2077, 2088, 2099, 2110,
1561 1.1 christos 2123, 2134, 2145, 2156, 2167, 2178, 2211, 2221, 2234, 2254,
1562 1.1 christos 2265, 2276, 2289, 2302, 2313, 2324, 2335, 2346, 2356, 2367,
1563 1.1 christos 2378, 2390, 2401, 2412, 2426, 2439, 2451, 2463, 2474, 2485,
1564 1.1 christos 2496, 2508, 2520, 2531, 2542, 2553, 2563, 2569, 2575, 2581,
1565 1.1 christos 2587, 2593, 2599, 2605, 2611, 2617, 2623, 2634, 2645, 2656,
1566 1.1 christos 2667, 2678, 2689, 2700, 2706, 2720, 2731, 2742, 2753, 2764,
1567 1.1 christos 2774, 2787, 2795, 2803, 2827, 2838, 2849, 2860, 2871, 2882,
1568 1.1 christos 2894, 2907, 2916, 2927, 2938, 2950, 2961, 2972, 2983, 2997,
1569 1.1 christos 3009, 3035, 3065, 3076, 3101, 3138, 3166, 3191, 3202, 3213,
1570 1.1 christos 3224, 3250, 3269, 3283, 3307, 3319, 3338, 3384, 3421, 3437,
1571 1.1 christos 3456, 3470, 3489, 3505, 3513, 3522, 3533, 3545, 3559, 3567,
1572 1.1 christos 3577, 3589, 3600, 3610, 3621, 3632, 3638, 3643, 3648, 3654,
1573 1.1 christos 3662, 3668, 3674, 3680, 3686, 3692, 3700, 3714, 3718, 3728,
1574 1.1 christos 3732, 3737, 3742, 3747, 3754, 3758, 3765, 3769, 3774, 3779,
1575 1.1 christos 3787, 3791, 3798, 3802, 3810, 3815, 3821, 3830, 3835, 3841,
1576 1.1 christos 3847, 3853, 3862, 3865, 3869, 3876, 3879, 3883, 3890, 3895,
1577 1.1 christos 3901, 3907, 3913, 3918, 3926, 3929, 3936, 3939, 3946, 3950,
1578 1.1 christos 3954, 3958, 3965, 3968, 3975, 3980, 3987, 3994, 4006, 4010,
1579 1.1 christos 4014, 4021, 4024, 4034, 4037, 4046, 4052, 4061, 4065, 4072,
1580 1.1 christos 4076, 4080, 4084, 4091, 4095, 4102, 4110, 4118, 4126, 4134,
1581 1.1 christos 4141, 4148, 4156, 4166, 4171, 4176, 4181, 4189, 4192, 4196,
1582 1.1 christos 4205, 4212, 4219, 4226, 4241, 4247, 4260, 4273, 4291, 4298,
1583 1.1 christos 4305, 4315, 4328, 4332, 4336, 4340, 4347, 4353, 4359, 4365,
1584 1.1 christos 4375, 4384, 4386, 4388, 4392, 4400, 4404, 4411, 4417, 4423,
1585 1.1 christos 4427, 4431, 4435, 4441, 4447, 4451, 4455, 4459, 4463, 4467,
1586 1.1 christos 4471, 4475, 4479, 4483, 4487
1587 1.1 christos };
1588 1.1 christos #endif
1589 1.1 christos
1590 1.1 christos /** Accessing symbol of state STATE. */
1591 1.1 christos #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1592 1.1 christos
1593 1.1 christos #if YYDEBUG || 0
1594 1.1 christos /* The user-facing name of the symbol whose (internal) number is
1595 1.1 christos YYSYMBOL. No bounds checking. */
1596 1.1 christos static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1597 1.1 christos
1598 1.1 christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1599 1.1 christos First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1600 1.1 christos static const char *const yytname[] =
1601 1.1 christos {
1602 1.1 christos "\"end of file\"", "error", "\"invalid token\"", "BYTEOP16P",
1603 1.1 christos "BYTEOP16M", "BYTEOP1P", "BYTEOP2P", "BYTEOP3P", "BYTEUNPACK",
1604 1.1 christos "BYTEPACK", "PACK", "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX",
1605 1.1 christos "EXTRACT", "DEPOSIT", "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS",
1606 1.1 christos "LINK", "UNLINK", "REG", "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO",
1607 1.1 christos "REG_A_DOUBLE_ONE", "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L",
1608 1.1 christos "A_ONE_DOT_H", "HALF_REG", "NOP", "RTI", "RTS", "RTX", "RTN", "RTE",
1609 1.1 christos "HLT", "IDLE", "STI", "CLI", "CSYNC", "SSYNC", "EMUEXCPT", "RAISE",
1610 1.1 christos "EXCPT", "LSETUP", "LOOP", "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT",
1611 1.1 christos "JUMP", "JUMP_DOT_S", "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA",
1612 1.1 christos "BANG", "AMPERSAND", "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS",
1613 1.1 christos "STAR", "SLASH", "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR",
1614 1.1 christos "_PLUS_BAR_PLUS", "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS",
1615 1.1 christos "_MINUS_BAR_MINUS", "_MINUS_MINUS", "_PLUS_PLUS", "SHIFT", "LSHIFT",
1616 1.1 christos "ASHIFT", "BXORSHIFT", "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT",
1617 1.1 christos "LESS_LESS", "GREATER_GREATER", "_GREATER_GREATER_GREATER",
1618 1.1 christos "_LESS_LESS_ASSIGN", "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN",
1619 1.1 christos "_STAR_ASSIGN", "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN",
1620 1.1 christos "_MINUS_ASSIGN", "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN",
1621 1.1 christos "_ASSIGN_ASSIGN", "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV",
1622 1.1 christos "FLUSH", "IFLUSH", "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET",
1623 1.1 christos "ASL", "ASR", "B", "W", "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV",
1624 1.1 christos "X", "Z", "M", "MMOD", "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V",
1625 1.1 christos "LO", "HI", "BITTGL", "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL",
1626 1.1 christos "DBGAH", "DBGHALT", "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY",
1627 1.1 christos "COLON", "SEMICOLON", "RPAREN", "LPAREN", "LBRACK", "RBRACK",
1628 1.1 christos "STATUS_REG", "MNOP", "SYMBOL", "NUMBER", "GOT", "GOT17M4",
1629 1.1 christos "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept", "statement", "asm",
1630 1.1 christos "asm_1", "REG_A", "opt_mode", "asr_asl", "sco", "asr_asl_0", "amod0",
1631 1.1 christos "amod1", "amod2", "xpmod", "xpmod1", "vsmod", "vmod", "smod",
1632 1.1 christos "searchmod", "aligndir", "byteop_mod", "c_align", "w32_or_nothing",
1633 1.1 christos "iu_or_nothing", "reg_with_predec", "reg_with_postinc", "min_max",
1634 1.1 christos "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op", "a_assign",
1635 1.1 christos "a_minusassign", "a_plusassign", "assign_macfunc", "a_macfunc",
1636 1.1 christos "multiply_halfregs", "cc_op", "ccstat", "symbol", "any_gotrel", "got",
1637 1.1 christos "got_or_expr", "pltpc", "eterm", "expr", "expr_1", YY_NULLPTR
1638 1.1 christos };
1639 1.1 christos
1640 1.1 christos static const char *
1641 1.1 christos yysymbol_name (yysymbol_kind_t yysymbol)
1642 1.1 christos {
1643 1.1 christos return yytname[yysymbol];
1644 1.1 christos }
1645 1.1 christos #endif
1646 1.1 christos
1647 1.1 christos #define YYPACT_NINF (-869)
1648 1.1 christos
1649 1.1 christos #define yypact_value_is_default(Yyn) \
1650 1.1 christos ((Yyn) == YYPACT_NINF)
1651 1.1 christos
1652 1.1 christos #define YYTABLE_NINF (-214)
1653 1.1 christos
1654 1.1 christos #define yytable_value_is_error(Yyn) \
1655 1.1 christos 0
1656 1.1 christos
1657 1.1 christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1658 1.1 christos STATE-NUM. */
1659 1.1 christos static const yytype_int16 yypact[] =
1660 1.1 christos {
1661 1.1 christos 862, -869, -96, -14, -869, 653, 618, -869, -869, -22,
1662 1.1 christos -7, 20, 71, 85, -869, -869, -869, -869, -869, -869,
1663 1.1 christos -869, -869, 58, 176, -869, -869, -869, -14, -14, 48,
1664 1.1 christos -14, 167, 231, -869, 327, -14, -14, 376, -869, 53,
1665 1.1 christos 56, 94, 96, 120, 126, 114, 64, 139, 144, 419,
1666 1.1 christos 115, 171, 185, 199, 207, 230, -869, 324, 250, 258,
1667 1.1 christos 43, 358, 25, 419, -869, 387, -869, -39, 13, 325,
1668 1.1 christos 223, 245, 390, 300, -869, -869, 443, -14, -14, -14,
1669 1.1 christos -869, -869, -869, -869, -869, 582, 152, 170, 178, 496,
1670 1.1 christos 453, 203, 259, 7, -869, -869, -869, 26, -46, 448,
1671 1.1 christos 455, 458, 464, 111, -869, -869, -869, -869, -14, 463,
1672 1.1 christos -10, -869, -9, -869, 32, -869, -869, 308, -869, -869,
1673 1.1 christos 102, -869, -869, 479, 492, 497, -869, 505, -869, 508,
1674 1.1 christos -869, 523, -869, -869, -869, 526, 541, 561, -869, 530,
1675 1.1 christos 567, 581, 586, 602, 611, 625, -869, -869, 549, 632,
1676 1.1 christos 57, 589, 221, 172, 637, 614, -869, 1008, -869, -869,
1677 1.1 christos -869, 365, 4, -869, 584, 394, 365, 365, 365, 498,
1678 1.1 christos 365, -6, -14, -869, -869, 507, -869, -869, 301, 510,
1679 1.1 christos 519, -869, -869, 524, -14, -14, -14, -14, -14, -14,
1680 1.1 christos -14, -14, -14, -14, -869, -869, -869, -869, -869, -869,
1681 1.1 christos 548, 554, 563, 576, 583, -869, -869, -869, 587, 592,
1682 1.1 christos 597, 601, -869, 598, 673, -19, 279, 293, -869, -869,
1683 1.1 christos 663, 698, 719, 723, 728, 594, 599, 63, 733, 691,
1684 1.1 christos 603, 604, 300, 605, -869, -869, -869, 606, -869, 225,
1685 1.1 christos 607, 271, -869, 608, -869, -869, -869, -869, -869, -869,
1686 1.1 christos 609, 610, 739, 208, -25, 676, 538, 740, 741, 615,
1687 1.1 christos 394, -869, 300, -869, 617, 680, 620, 709, 612, 621,
1688 1.1 christos 710, 626, 627, -41, -3, 14, 17, 628, 281, 349,
1689 1.1 christos -869, 631, 633, 634, 636, 638, 639, 640, 641, 690,
1690 1.1 christos -14, 62, 767, -14, -869, -869, -869, 769, -14, 643,
1691 1.1 christos 644, -869, -8, 507, -869, 773, 764, 646, 647, 648,
1692 1.1 christos 651, 365, 652, -14, -14, -14, 675, -869, 666, -869,
1693 1.1 christos 134, 166, 276, -14, -869, 630, 642, -869, 483, 368,
1694 1.1 christos 368, -869, -869, 532, 532, 780, 786, 787, 788, 779,
1695 1.1 christos 790, 791, 792, 793, 794, 795, 659, -869, -869, -869,
1696 1.1 christos -869, -14, -14, -14, 797, 798, 318, -869, 799, -869,
1697 1.1 christos -869, 662, 664, 667, 669, 670, 671, 806, 807, 765,
1698 1.1 christos 340, 390, 390, 245, 677, 384, 365, 809, 811, 682,
1699 1.1 christos 493, -869, 706, 297, 317, 319, 815, 365, 365, 365,
1700 1.1 christos 816, 817, 226, -869, -869, -869, -869, 707, 818, 37,
1701 1.1 christos -14, -14, -14, 824, 812, 688, 692, 823, 245, 693,
1702 1.1 christos 694, -14, 827, -869, 828, -869, -869, 830, 831, 833,
1703 1.1 christos 685, -869, -869, -869, -869, -869, -869, -14, 697, 842,
1704 1.1 christos -14, 704, -14, -14, -14, 844, -14, -14, -14, -869,
1705 1.1 christos 845, 712, 774, -14, 714, 182, 715, 716, 785, -869,
1706 1.1 christos 1008, -869, -869, 724, -869, 365, 365, 849, 853, 766,
1707 1.1 christos 100, -869, -869, -869, 729, 763, 796, -869, 800, -869,
1708 1.1 christos 829, 832, 300, 768, 771, 776, 777, 770, 775, 781,
1709 1.1 christos 783, 784, -869, -869, -869, 903, 662, 664, 662, -58,
1710 1.1 christos -15, 772, 782, 789, 33, -869, 802, -869, 902, 907,
1711 1.1 christos 910, 472, 281, 445, 924, -869, 801, -869, 925, -14,
1712 1.1 christos 803, 804, 808, 813, 926, 805, 810, 819, 820, 820,
1713 1.1 christos -869, -869, 820, 820, 821, -869, -869, -869, 826, 825,
1714 1.1 christos 834, 835, 836, 837, 838, 839, 840, -869, 840, 841,
1715 1.1 christos 843, 917, 918, 562, 859, -869, 919, 860, 864, 861,
1716 1.1 christos 865, 868, 869, -869, 846, 863, 870, 872, 866, 908,
1717 1.1 christos 909, 911, 914, 912, 913, 915, -869, 857, 931, 916,
1718 1.1 christos 867, 934, 871, 875, 876, 944, 920, -14, 891, 921,
1719 1.1 christos 922, -869, -869, 365, -869, -869, 927, -869, 928, 929,
1720 1.1 christos 5, 10, -869, 964, -14, -14, -14, 968, 959, 970,
1721 1.1 christos 961, 981, 933, -869, -869, -869, 1050, 119, -869, 1052,
1722 1.1 christos 559, -869, -869, -869, 1054, 930, 211, 247, 932, -869,
1723 1.1 christos 664, 662, -869, -869, -14, 923, 1056, -14, 935, 936,
1724 1.1 christos -869, 937, 938, -869, 941, -869, -869, 1057, 1058, 1060,
1725 1.1 christos 989, -869, -869, -869, 953, -869, -869, -869, -869, -14,
1726 1.1 christos -14, 940, 1059, 1061, -869, 546, 365, 365, 967, -869,
1727 1.1 christos -869, 1063, -869, -869, 840, 1070, 942, -869, 1003, 1082,
1728 1.1 christos -14, -869, -869, -869, -869, 1011, 1084, 1014, 1015, 278,
1729 1.1 christos -869, -869, -869, 365, -869, -869, -869, 952, -869, 984,
1730 1.1 christos 216, 956, 954, 1091, 1093, -869, -869, 287, 365, 365,
1731 1.1 christos 962, 365, -869, -869, 365, -869, 365, 965, 969, 971,
1732 1.1 christos 972, 973, 974, 975, 976, 977, -14, 1035, -869, -869,
1733 1.1 christos -869, 978, 1036, 979, 980, 1045, -869, 1001, -869, 1019,
1734 1.1 christos -869, -869, -869, -869, 982, 598, 983, 985, 598, 1055,
1735 1.1 christos -869, 407, -869, 1051, 990, 991, 390, 995, 1004, 1005,
1736 1.1 christos 574, -869, 1006, 1007, 1016, 1017, 1012, 1018, 1020, 1021,
1737 1.1 christos -869, 1022, -869, 390, 1075, -869, 1151, -869, 1144, 1155,
1738 1.1 christos -869, -869, 1023, -869, 1024, 1025, 1026, 1158, 1164, -14,
1739 1.1 christos 1165, -869, -869, -869, 1166, -869, -869, -869, 1167, 365,
1740 1.1 christos -14, 1168, 1170, 1171, -869, -869, 940, 598, 1030, 1037,
1741 1.1 christos 1172, -869, 1174, -869, -869, 1169, 1040, 1041, 598, -869,
1742 1.1 christos 598, 598, -869, -14, -869, -869, -869, -869, 365, -869,
1743 1.1 christos 664, 300, -869, -869, -869, 1042, 1043, 664, -869, -869,
1744 1.1 christos -869, 372, 1180, -869, 1135, -869, 300, 1182, -869, -869,
1745 1.1 christos -869, 940, -869, 1183, 1184, 1053, 1048, 1062, 1128, 1065,
1746 1.1 christos 1064, 1066, 1068, 1067, 1071, 1072, -869, -869, 1081, -869,
1747 1.1 christos 596, 635, 1145, -869, -869, -869, -869, -869, -869, 1147,
1748 1.1 christos -869, -869, -869, -869, -869, 1073, 1076, 1074, 1179, -869,
1749 1.1 christos 1126, -869, 1077, 1078, -14, 619, 1121, -14, -869, 1094,
1750 1.1 christos 1079, -14, -14, -14, 1083, 1195, 1196, 1190, 365, -869,
1751 1.1 christos 1200, -869, 1162, -14, -14, -14, 1079, -869, -869, -869,
1752 1.1 christos -869, 1085, 954, 1086, 1087, 1102, -869, 1088, 1089, 1090,
1753 1.1 christos -869, 1080, 843, -869, 843, 1092, 1218, -869, 1095, 1097,
1754 1.1 christos -869, -869, -869, -869, -869, 1096, 1098, 1099, 1100, 350,
1755 1.1 christos -869, -869, -869, -869, 1101, 1215, 1220, -869, 595, -869,
1756 1.1 christos 84, -869, 591, -869, -869, -869, 312, 375, 1208, 1105,
1757 1.1 christos 1106, 378, 402, 403, 418, 426, 460, 476, 481, 616,
1758 1.1 christos -869, 119, -869, 1107, -14, -14, 1119, -869, 1123, -869,
1759 1.1 christos 1120, -869, 1130, -869, 1131, -869, 1133, -869, 1134, -869,
1760 1.1 christos 1136, -869, 1110, 1112, 1188, 1113, 1114, 1115, 1116, 1117,
1761 1.1 christos 1118, 1122, 1124, 1125, 1127, -869, -869, 1245, 1079, 1079,
1762 1.1 christos -869, -869, -869, -869, -869, -869, -869, -869, -869, -869,
1763 1.1 christos -869
1764 1.1 christos };
1765 1.1 christos
1766 1.1 christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1767 1.1 christos Performed when YYTABLE does not specify something else to do. Zero
1768 1.1 christos means the default is an error. */
1769 1.1 christos static const yytype_int16 yydefact[] =
1770 1.1 christos {
1771 1.1 christos 0, 7, 0, 0, 204, 0, 0, 227, 228, 0,
1772 1.1 christos 0, 0, 0, 0, 136, 138, 137, 139, 140, 141,
1773 1.1 christos 221, 142, 0, 0, 143, 144, 145, 0, 0, 0,
1774 1.1 christos 0, 0, 0, 11, 0, 0, 0, 0, 215, 0,
1775 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1776 1.1 christos 0, 0, 0, 0, 0, 0, 220, 216, 0, 0,
1777 1.1 christos 0, 0, 0, 0, 8, 0, 3, 0, 0, 0,
1778 1.1 christos 0, 0, 0, 229, 314, 79, 0, 0, 0, 0,
1779 1.1 christos 330, 338, 339, 354, 203, 343, 0, 0, 0, 0,
1780 1.1 christos 0, 0, 0, 322, 323, 325, 324, 0, 0, 0,
1781 1.1 christos 0, 0, 0, 0, 147, 146, 152, 153, 0, 0,
1782 1.1 christos 338, 212, 338, 214, 0, 155, 156, 339, 158, 157,
1783 1.1 christos 0, 160, 159, 0, 0, 0, 174, 0, 172, 0,
1784 1.1 christos 176, 0, 178, 226, 225, 0, 0, 0, 322, 0,
1785 1.1 christos 0, 0, 0, 0, 0, 0, 218, 217, 0, 0,
1786 1.1 christos 0, 0, 0, 307, 0, 0, 1, 0, 4, 310,
1787 1.1 christos 311, 312, 0, 45, 0, 0, 0, 0, 0, 0,
1788 1.1 christos 0, 44, 0, 318, 48, 281, 320, 319, 0, 9,
1789 1.1 christos 0, 341, 342, 0, 0, 0, 0, 0, 0, 0,
1790 1.1 christos 0, 0, 0, 0, 167, 170, 168, 169, 165, 166,
1791 1.1 christos 0, 0, 0, 0, 0, 278, 279, 280, 0, 0,
1792 1.1 christos 0, 80, 82, 252, 0, 252, 0, 0, 287, 288,
1793 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 313,
1794 1.1 christos 0, 0, 229, 255, 62, 58, 56, 60, 61, 81,
1795 1.1 christos 0, 0, 83, 0, 327, 326, 26, 14, 27, 15,
1796 1.1 christos 0, 0, 0, 0, 50, 0, 0, 0, 0, 0,
1797 1.1 christos 0, 317, 229, 47, 0, 208, 0, 0, 0, 0,
1798 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 307, 307,
1799 1.1 christos 329, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1800 1.1 christos 0, 0, 0, 0, 294, 293, 309, 308, 0, 0,
1801 1.1 christos 0, 328, 0, 281, 202, 0, 0, 37, 25, 0,
1802 1.1 christos 0, 0, 0, 0, 0, 0, 0, 39, 0, 55,
1803 1.1 christos 0, 0, 0, 0, 340, 351, 353, 346, 352, 348,
1804 1.1 christos 347, 344, 345, 349, 350, 0, 0, 0, 0, 0,
1805 1.1 christos 0, 0, 0, 0, 0, 0, 293, 289, 290, 291,
1806 1.1 christos 292, 0, 0, 0, 0, 0, 0, 52, 0, 46,
1807 1.1 christos 164, 258, 264, 0, 0, 0, 0, 0, 0, 0,
1808 1.1 christos 0, 0, 0, 0, 0, 307, 0, 0, 0, 85,
1809 1.1 christos 0, 49, 0, 0, 0, 0, 0, 0, 0, 0,
1810 1.1 christos 0, 0, 0, 109, 119, 120, 118, 0, 0, 0,
1811 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1812 1.1 christos 84, 0, 0, 148, 0, 337, 149, 0, 0, 0,
1813 1.1 christos 0, 173, 171, 175, 177, 154, 308, 0, 0, 308,
1814 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 219,
1815 1.1 christos 0, 134, 0, 0, 0, 0, 0, 0, 0, 285,
1816 1.1 christos 0, 6, 59, 0, 321, 0, 0, 0, 0, 0,
1817 1.1 christos 0, 90, 104, 99, 0, 0, 0, 233, 0, 232,
1818 1.1 christos 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
1819 1.1 christos 0, 0, 78, 66, 67, 0, 258, 264, 258, 242,
1820 1.1 christos 244, 0, 0, 0, 0, 163, 0, 24, 0, 0,
1821 1.1 christos 0, 0, 307, 307, 0, 312, 0, 315, 308, 0,
1822 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 283, 283,
1823 1.1 christos 73, 74, 283, 283, 0, 75, 69, 70, 0, 0,
1824 1.1 christos 0, 0, 0, 0, 0, 0, 266, 106, 266, 0,
1825 1.1 christos 244, 0, 0, 307, 0, 316, 0, 0, 209, 0,
1826 1.1 christos 0, 0, 0, 286, 0, 0, 0, 0, 0, 0,
1827 1.1 christos 0, 0, 0, 0, 0, 0, 131, 0, 0, 132,
1828 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1829 1.1 christos 0, 100, 88, 0, 114, 116, 40, 282, 0, 0,
1830 1.1 christos 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
1831 1.1 christos 0, 0, 0, 91, 105, 108, 0, 236, 51, 0,
1832 1.1 christos 0, 35, 254, 253, 0, 0, 0, 0, 0, 103,
1833 1.1 christos 264, 258, 115, 117, 0, 0, 308, 0, 0, 0,
1834 1.1 christos 12, 0, 339, 335, 0, 336, 197, 0, 0, 0,
1835 1.1 christos 0, 256, 257, 57, 0, 76, 77, 71, 72, 0,
1836 1.1 christos 0, 0, 0, 0, 41, 0, 0, 0, 0, 92,
1837 1.1 christos 107, 0, 38, 101, 266, 308, 0, 13, 0, 0,
1838 1.1 christos 0, 151, 150, 162, 161, 0, 0, 0, 0, 0,
1839 1.1 christos 127, 125, 126, 0, 224, 223, 222, 0, 130, 0,
1840 1.1 christos 0, 0, 0, 0, 0, 190, 5, 0, 0, 0,
1841 1.1 christos 0, 0, 230, 231, 0, 313, 0, 0, 0, 0,
1842 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 237, 238,
1843 1.1 christos 239, 0, 0, 0, 0, 0, 259, 0, 260, 0,
1844 1.1 christos 261, 265, 102, 93, 0, 252, 0, 0, 252, 0,
1845 1.1 christos 195, 0, 196, 0, 0, 0, 0, 0, 0, 0,
1846 1.1 christos 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
1847 1.1 christos 89, 0, 186, 0, 205, 210, 0, 179, 0, 0,
1848 1.1 christos 182, 183, 0, 135, 0, 0, 0, 0, 0, 0,
1849 1.1 christos 0, 201, 191, 184, 0, 199, 54, 53, 0, 0,
1850 1.1 christos 0, 0, 0, 0, 33, 110, 0, 252, 96, 0,
1851 1.1 christos 0, 243, 0, 245, 246, 0, 0, 0, 252, 194,
1852 1.1 christos 252, 252, 187, 0, 331, 332, 333, 334, 0, 28,
1853 1.1 christos 264, 229, 284, 129, 128, 0, 0, 264, 95, 42,
1854 1.1 christos 43, 0, 0, 267, 0, 189, 229, 0, 180, 192,
1855 1.1 christos 181, 0, 133, 0, 0, 0, 0, 0, 0, 0,
1856 1.1 christos 0, 0, 0, 0, 0, 0, 122, 98, 0, 68,
1857 1.1 christos 0, 0, 0, 263, 262, 193, 188, 185, 65, 0,
1858 1.1 christos 36, 87, 234, 235, 94, 0, 0, 0, 0, 86,
1859 1.1 christos 206, 123, 0, 0, 0, 0, 0, 0, 124, 0,
1860 1.1 christos 272, 0, 0, 0, 0, 0, 0, 0, 0, 112,
1861 1.1 christos 0, 111, 0, 0, 0, 0, 272, 268, 271, 270,
1862 1.1 christos 269, 0, 0, 0, 0, 0, 63, 0, 0, 0,
1863 1.1 christos 97, 247, 244, 20, 244, 0, 0, 207, 0, 0,
1864 1.1 christos 18, 19, 200, 198, 64, 0, 30, 0, 0, 236,
1865 1.1 christos 23, 22, 21, 113, 0, 0, 0, 273, 0, 29,
1866 1.1 christos 0, 31, 0, 32, 240, 241, 0, 0, 0, 0,
1867 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1868 1.1 christos 249, 236, 248, 0, 0, 0, 0, 275, 0, 274,
1869 1.1 christos 0, 296, 0, 298, 0, 297, 0, 295, 0, 303,
1870 1.1 christos 0, 304, 0, 0, 0, 0, 0, 0, 0, 0,
1871 1.1 christos 0, 0, 0, 0, 0, 251, 250, 0, 272, 272,
1872 1.1 christos 276, 277, 300, 302, 301, 299, 305, 306, 34, 16,
1873 1.1 christos 17
1874 1.1 christos };
1875 1.1 christos
1876 1.1 christos /* YYPGOTO[NTERM-NUM]. */
1877 1.1 christos static const yytype_int16 yypgoto[] =
1878 1.1 christos {
1879 1.1 christos -869, -869, -869, -133, 41, -216, -733, -868, 313, -869,
1880 1.1 christos -509, -869, -198, -869, -458, -460, -515, -869, -804, -869,
1881 1.1 christos -869, 986, 23, -869, -31, -869, 421, -205, -869, -869,
1882 1.1 christos -253, 2, 22, -171, 987, -206, -56, 46, -869, -17,
1883 1.1 christos -869, -869, -869, 1247, -869, -27, 0
1884 1.1 christos };
1885 1.1 christos
1886 1.1 christos /* YYDEFGOTO[NTERM-NUM]. */
1887 1.1 christos static const yytype_int16 yydefgoto[] =
1888 1.1 christos {
1889 1.1 christos 0, 65, 66, 67, 370, 179, 751, 721, 957, 608,
1890 1.1 christos 611, 940, 357, 381, 495, 497, 659, 911, 916, 949,
1891 1.1 christos 230, 319, 645, 69, 126, 231, 354, 298, 951, 953,
1892 1.1 christos 299, 371, 372, 72, 73, 74, 177, 98, 75, 82,
1893 1.1 christos 817, 633, 634, 118, 83, 84, 85
1894 1.1 christos };
1895 1.1 christos
1896 1.1 christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1897 1.1 christos positive, shift that token. If negative, reduce the rule whose
1898 1.1 christos number is the opposite. If YYTABLE_NINF, syntax error. */
1899 1.1 christos static const yytype_int16 yytable[] =
1900 1.1 christos {
1901 1.1 christos 106, 107, 70, 109, 111, 113, 355, 115, 116, 119,
1902 1.1 christos 122, 128, 130, 132, 173, 176, 379, 359, 134, 117,
1903 1.1 christos 117, 374, 71, 660, 302, 428, 431, 604, 603, 304,
1904 1.1 christos 605, 662, 239, 232, 7, 8, 7, 8, 157, 7,
1905 1.1 christos 8, 68, 420, 174, 294, 295, 410, 262, 77, 398,
1906 1.1 christos 153, 404, 306, 242, 409, 78, 373, 266, 267, 195,
1907 1.1 christos 197, 199, 233, 856, 236, 238, 76, -211, -213, 450,
1908 1.1 christos 150, 956, 172, 427, 430, 99, 263, 181, 182, 183,
1909 1.1 christos 420, 264, 289, 104, 313, 314, 315, 442, 369, 408,
1910 1.1 christos 100, 159, 7, 8, 77, 139, 244, 420, 147, 606,
1911 1.1 christos 420, 78, 930, 993, 607, 534, 151, 154, 881, 155,
1912 1.1 christos 159, 171, 175, 290, 183, 160, 161, 101, 443, 245,
1913 1.1 christos 183, 158, 510, 421, 535, 77, 250, 269, 270, 251,
1914 1.1 christos 229, 252, 78, 253, 241, 584, 254, 397, 255, 133,
1915 1.1 christos 7, 8, 609, 356, 261, 317, 256, 610, 79, 760,
1916 1.1 christos -211, -213, 451, 80, 81, 240, 316, 615, 616, 70,
1917 1.1 christos 732, 422, 77, 733, 77, 182, 305, 704, 102, 78,
1918 1.1 christos 509, 78, 706, 77, 243, 617, 77, 194, 423, 71,
1919 1.1 christos 78, 424, 103, 78, 325, 326, 327, 328, 329, 330,
1920 1.1 christos 331, 332, 333, 334, 79, 196, 257, 258, 68, 80,
1921 1.1 christos 81, 105, 303, 198, 1019, 1020, 307, 308, 309, 310,
1922 1.1 christos 108, 312, 963, 964, 77, 123, 181, 182, 124, 775,
1923 1.1 christos 776, 78, 965, 966, 777, 79, 135, 183, 235, 77,
1924 1.1 christos 80, 81, 77, 394, 259, 778, 78, 7, 8, 78,
1925 1.1 christos 77, 294, 295, 395, 718, 719, 720, 78, 163, 625,
1926 1.1 christos 628, 530, 7, 8, 296, 297, 592, 125, 164, 127,
1927 1.1 christos 183, 531, 79, 441, 79, 77, 445, 80, 81, 80,
1928 1.1 christos 81, 447, 78, 260, 7, 8, 79, 140, 80, 81,
1929 1.1 christos 164, 80, 81, 129, 237, 77, 461, 462, 463, 131,
1930 1.1 christos 666, 466, 165, 77, 396, 467, 473, 624, 627, 166,
1931 1.1 christos 78, 470, 136, 770, 360, 7, 8, 137, 167, 168,
1932 1.1 christos 169, 471, 170, 771, 79, 173, 176, 576, 361, 80,
1933 1.1 christos 81, 77, 518, 468, 486, 487, 488, 469, 78, 79,
1934 1.1 christos 383, 384, 79, 141, 80, 110, 385, 80, 81, 571,
1935 1.1 christos 79, 77, 520, 572, 522, 80, 81, 142, 78, 146,
1936 1.1 christos 294, 295, 459, 7, 8, 77, 519, 521, 523, 77,
1937 1.1 christos 870, 143, 78, 296, 426, 79, 78, 874, 727, 144,
1938 1.1 christos 80, 81, 728, 536, 537, 538, 387, 388, 292, 77,
1939 1.1 christos 293, 77, 389, 152, 547, 79, 78, 156, 78, 77,
1940 1.1 christos 80, 81, 145, 79, 7, 8, 78, 875, 80, 112,
1941 1.1 christos 554, 7, 8, 557, 729, 559, 560, 561, 730, 563,
1942 1.1 christos 564, 565, 148, 941, 506, 942, 569, 511, 294, 295,
1943 1.1 christos 149, 79, 162, 7, 8, 164, 80, 81, 525, 526,
1944 1.1 christos 527, 296, 429, 585, 186, 320, 321, 159, 77, 190,
1945 1.1 christos 191, 79, 160, 505, 784, 78, 80, 81, 785, 544,
1946 1.1 christos 491, 492, 70, 294, 295, 79, 77, 579, 580, 79,
1947 1.1 christos 80, 81, 178, 78, 80, 81, 296, 508, 180, 969,
1948 1.1 christos 954, 955, 71, 970, 623, 718, 719, 720, 234, 79,
1949 1.1 christos 268, 79, 635, 246, 80, 81, 80, 81, 265, 114,
1950 1.1 christos 247, 68, 632, 248, 80, 81, 578, 578, 374, 249,
1951 1.1 christos 409, 200, 201, 202, 271, 203, 204, 622, 205, 206,
1952 1.1 christos 207, 208, 209, 210, 294, 295, 138, 272, 94, 95,
1953 1.1 christos 96, 211, 273, 212, 213, 7, 8, 296, 626, 214,
1954 1.1 christos 274, 215, 971, 275, 77, 976, 972, 809, 120, 977,
1955 1.1 christos 812, 78, 646, 80, 81, 647, 648, 184, 276, 186,
1956 1.1 christos 697, 277, 188, 189, 190, 191, 79, 280, 216, 978,
1957 1.1 christos 980, 80, 81, 979, 981, 217, 278, 708, 709, 710,
1958 1.1 christos 218, 219, 220, 192, 193, 982, 814, 815, 816, 983,
1959 1.1 christos 221, 222, 223, 984, 287, 224, 279, 985, 184, 185,
1960 1.1 christos 186, 187, 281, 188, 189, 190, 191, 734, 186, 857,
1961 1.1 christos 737, 188, 189, 190, 191, 871, 282, 294, 295, 306,
1962 1.1 christos 865, 283, 866, 867, 192, 193, 291, 986, 225, 226,
1963 1.1 christos 879, 987, 748, 749, 700, 515, 516, 284, 400, 401,
1964 1.1 christos 402, 705, 261, 988, 79, 403, 285, 989, 990, 80,
1965 1.1 christos 81, 301, 991, 765, 296, 665, 184, 185, 186, 187,
1966 1.1 christos 286, 188, 189, 190, 191, 306, 896, 288, 227, 228,
1967 1.1 christos 311, 781, 300, 80, 81, 343, 344, 322, 345, 318,
1968 1.1 christos 294, 346, 192, 193, 347, 348, 349, 350, 323, 347,
1969 1.1 christos 348, 349, 350, 723, 724, 324, 754, 755, 362, 799,
1970 1.1 christos 821, 351, 352, 353, 825, 826, 186, 756, 757, 188,
1971 1.1 christos 189, 190, 191, 789, 294, 295, 184, 836, 186, 187,
1972 1.1 christos 335, 188, 189, 190, 191, 93, 336, 94, 95, 96,
1973 1.1 christos 192, 193, 97, 363, 772, 337, 907, 908, 909, 910,
1974 1.1 christos 961, 962, 192, 193, 967, 968, 954, 955, 338, 786,
1975 1.1 christos 787, 86, 578, 358, 364, 339, 87, 88, 365, 340,
1976 1.1 christos 89, 90, 847, 366, 341, 91, 92, 367, 375, 342,
1977 1.1 christos 356, 376, 368, 852, 393, 377, 378, 380, 382, 386,
1978 1.1 christos 390, 391, 392, 399, 411, 405, 406, 412, 407, 414,
1979 1.1 christos 417, 413, 416, 418, 419, 415, 868, 440, 432, 425,
1980 1.1 christos 433, 434, 444, 435, 446, 436, 437, 438, 453, 454,
1981 1.1 christos 464, 465, 439, 455, 456, 474, 457, 448, 449, 458,
1982 1.1 christos 460, 475, 476, 477, 478, 479, 480, 481, 482, 483,
1983 1.1 christos 484, 485, 489, 490, 494, 498, 496, 499, 500, 501,
1984 1.1 christos 851, 502, 503, 493, 512, 504, 513, 517, 507, 514,
1985 1.1 christos 524, 528, 529, 533, 532, 539, 541, 540, 543, 553,
1986 1.1 christos 542, 546, 548, 549, 545, 550, 551, 906, 552, 869,
1987 1.1 christos 913, 555, -2, 1, 917, 918, 919, 556, 558, 562,
1988 1.1 christos 566, 568, 876, 2, 567, 570, 927, 928, 929, 573,
1989 1.1 christos 574, 932, 575, 577, 581, 3, 4, 5, 582, 6,
1990 1.1 christos 586, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1991 1.1 christos 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1992 1.1 christos 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1993 1.1 christos 36, 37, 38, 583, 587, 593, 590, 597, 602, 591,
1994 1.1 christos 594, 588, 598, 612, 589, 595, 596, 619, 599, 924,
1995 1.1 christos 600, 601, 620, 613, 618, 621, 614, 995, 996, 629,
1996 1.1 christos 631, 640, 663, 664, 668, 670, 688, 39, 40, 691,
1997 1.1 christos 676, 637, 630, 679, 690, 638, 641, 636, 692, 695,
1998 1.1 christos 639, 642, 693, 694, 41, 42, 43, 44, 649, 45,
1999 1.1 christos 643, 46, 644, 650, 47, 48, 651, 687, 159, 707,
2000 1.1 christos 698, 652, 653, 711, 712, 713, 714, 654, 699, 655,
2001 1.1 christos 656, 657, 658, 661, 49, 610, 715, 50, 51, 52,
2002 1.1 christos 675, 53, 54, 55, 56, 57, 58, 59, 60, 2,
2003 1.1 christos 667, 669, 671, 716, 61, 62, 672, 63, 64, 673,
2004 1.1 christos 674, 3, 4, 5, 677, 6, 678, 7, 8, 9,
2005 1.1 christos 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2006 1.1 christos 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
2007 1.1 christos 30, 31, 32, 33, 34, 35, 36, 37, 38, 680,
2008 1.1 christos 681, 683, 682, 684, 685, 717, 686, 722, 689, 725,
2009 1.1 christos 696, 736, 743, 744, 701, 745, 746, 735, 747, 702,
2010 1.1 christos 703, 726, 758, 731, 752, 761, 753, 739, 759, 738,
2011 1.1 christos 763, 740, 750, 39, 40, 742, 762, 764, 766, 767,
2012 1.1 christos 741, 768, 769, 773, 774, 779, 782, 780, 783, 788,
2013 1.1 christos 41, 42, 43, 44, 790, 45, 791, 46, 792, 793,
2014 1.1 christos 47, 48, 800, 802, 794, 795, 796, 797, 798, 801,
2015 1.1 christos 803, 804, 805, 806, 807, 813, 808, 810, 818, 811,
2016 1.1 christos 49, 819, 820, 50, 51, 52, 822, 53, 54, 55,
2017 1.1 christos 56, 57, 58, 59, 60, 823, 824, 827, 828, 831,
2018 1.1 christos 61, 62, 837, 63, 64, 832, 838, 829, 830, 839,
2019 1.1 christos 840, 833, 834, 845, 841, 842, 835, 843, 844, 846,
2020 1.1 christos 848, 849, 858, 853, 850, 854, 855, 860, 859, 861,
2021 1.1 christos 862, 863, 864, 872, 873, 877, 878, 880, 882, 883,
2022 1.1 christos 885, 420, 884, 894, 902, 897, 898, 903, 912, 914,
2023 1.1 christos 921, 922, 923, 886, 887, 888, 891, 925, 889, 890,
2024 1.1 christos 892, 893, 926, 900, 899, 901, 904, 905, 935, 944,
2025 1.1 christos 959, 915, 939, 973, 920, 960, 931, 933, 934, 936,
2026 1.1 christos 937, 938, 945, 943, 946, 997, 999, 947, 998, 1007,
2027 1.1 christos 948, 950, 952, 958, 974, 975, 1000, 1001, 994, 1002,
2028 1.1 christos 1003, 1005, 1004, 1006, 1008, 1009, 1010, 1011, 1012, 1013,
2029 1.1 christos 1018, 895, 992, 1014, 121, 1015, 1016, 0, 1017, 452,
2030 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2031 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 472
2032 1.1 christos };
2033 1.1 christos
2034 1.1 christos static const yytype_int16 yycheck[] =
2035 1.1 christos {
2036 1.1 christos 27, 28, 0, 30, 31, 32, 211, 34, 35, 36,
2037 1.1 christos 37, 42, 43, 44, 70, 71, 232, 215, 45, 36,
2038 1.1 christos 37, 227, 0, 538, 157, 278, 279, 487, 486, 25,
2039 1.1 christos 488, 540, 25, 89, 29, 30, 29, 30, 77, 29,
2040 1.1 christos 30, 0, 83, 70, 69, 70, 262, 103, 62, 254,
2041 1.1 christos 25, 256, 71, 27, 260, 69, 227, 25, 26, 86,
2042 1.1 christos 87, 88, 89, 796, 91, 92, 162, 77, 77, 77,
2043 1.1 christos 27, 939, 70, 278, 279, 97, 103, 77, 78, 79,
2044 1.1 christos 83, 108, 25, 25, 90, 91, 92, 25, 25, 260,
2045 1.1 christos 97, 97, 29, 30, 62, 49, 142, 83, 57, 157,
2046 1.1 christos 83, 69, 906, 971, 162, 68, 63, 82, 841, 63,
2047 1.1 christos 97, 70, 71, 56, 114, 102, 103, 97, 56, 165,
2048 1.1 christos 120, 160, 375, 164, 87, 62, 15, 25, 26, 18,
2049 1.1 christos 89, 20, 69, 22, 93, 35, 25, 162, 27, 25,
2050 1.1 christos 29, 30, 157, 162, 103, 172, 35, 162, 162, 664,
2051 1.1 christos 160, 160, 160, 167, 168, 148, 162, 124, 125, 157,
2052 1.1 christos 620, 164, 62, 621, 62, 165, 162, 162, 97, 69,
2053 1.1 christos 375, 69, 162, 62, 148, 142, 62, 25, 164, 157,
2054 1.1 christos 69, 164, 97, 69, 184, 185, 186, 187, 188, 189,
2055 1.1 christos 190, 191, 192, 193, 162, 25, 85, 86, 157, 167,
2056 1.1 christos 168, 25, 161, 25, 1008, 1009, 165, 166, 167, 168,
2057 1.1 christos 162, 170, 128, 129, 62, 162, 216, 217, 162, 3,
2058 1.1 christos 4, 69, 138, 139, 8, 162, 162, 227, 25, 62,
2059 1.1 christos 167, 168, 62, 25, 123, 19, 69, 29, 30, 69,
2060 1.1 christos 62, 69, 70, 35, 125, 126, 127, 69, 25, 502,
2061 1.1 christos 503, 25, 29, 30, 82, 83, 472, 163, 35, 163,
2062 1.1 christos 260, 35, 162, 290, 162, 62, 293, 167, 168, 167,
2063 1.1 christos 168, 298, 69, 162, 29, 30, 162, 162, 167, 168,
2064 1.1 christos 35, 167, 168, 163, 25, 62, 313, 314, 315, 163,
2065 1.1 christos 543, 157, 69, 62, 253, 161, 323, 502, 503, 76,
2066 1.1 christos 69, 25, 163, 25, 25, 29, 30, 163, 85, 86,
2067 1.1 christos 87, 35, 89, 35, 162, 371, 372, 450, 25, 167,
2068 1.1 christos 168, 62, 25, 157, 351, 352, 353, 161, 69, 162,
2069 1.1 christos 105, 106, 162, 162, 167, 168, 111, 167, 168, 157,
2070 1.1 christos 162, 62, 25, 161, 25, 167, 168, 162, 69, 25,
2071 1.1 christos 69, 70, 311, 29, 30, 62, 383, 384, 385, 62,
2072 1.1 christos 820, 162, 69, 82, 83, 162, 69, 827, 157, 162,
2073 1.1 christos 167, 168, 161, 400, 401, 402, 105, 106, 157, 62,
2074 1.1 christos 159, 62, 111, 25, 411, 162, 69, 0, 69, 62,
2075 1.1 christos 167, 168, 162, 162, 29, 30, 69, 25, 167, 168,
2076 1.1 christos 427, 29, 30, 430, 157, 432, 433, 434, 161, 436,
2077 1.1 christos 437, 438, 162, 922, 373, 924, 443, 376, 69, 70,
2078 1.1 christos 162, 162, 97, 29, 30, 35, 167, 168, 387, 388,
2079 1.1 christos 389, 82, 83, 460, 66, 134, 135, 97, 62, 71,
2080 1.1 christos 72, 162, 102, 103, 157, 69, 167, 168, 161, 408,
2081 1.1 christos 132, 133, 450, 69, 70, 162, 62, 455, 456, 162,
2082 1.1 christos 167, 168, 162, 69, 167, 168, 82, 83, 25, 157,
2083 1.1 christos 120, 121, 450, 161, 501, 125, 126, 127, 25, 162,
2084 1.1 christos 172, 162, 509, 35, 167, 168, 167, 168, 25, 162,
2085 1.1 christos 35, 450, 509, 35, 167, 168, 455, 456, 704, 35,
2086 1.1 christos 706, 5, 6, 7, 25, 9, 10, 35, 12, 13,
2087 1.1 christos 14, 15, 16, 17, 69, 70, 97, 25, 99, 100,
2088 1.1 christos 101, 25, 25, 27, 28, 29, 30, 82, 83, 33,
2089 1.1 christos 25, 35, 157, 25, 62, 157, 161, 735, 162, 161,
2090 1.1 christos 738, 69, 519, 167, 168, 522, 523, 64, 25, 66,
2091 1.1 christos 577, 25, 69, 70, 71, 72, 162, 27, 62, 157,
2092 1.1 christos 157, 167, 168, 161, 161, 69, 25, 594, 595, 596,
2093 1.1 christos 74, 75, 76, 90, 91, 157, 169, 170, 171, 161,
2094 1.1 christos 84, 85, 86, 157, 35, 89, 25, 161, 64, 65,
2095 1.1 christos 66, 67, 25, 69, 70, 71, 72, 624, 66, 797,
2096 1.1 christos 627, 69, 70, 71, 72, 821, 25, 69, 70, 71,
2097 1.1 christos 808, 25, 810, 811, 90, 91, 27, 157, 122, 123,
2098 1.1 christos 836, 161, 649, 650, 583, 132, 133, 25, 90, 91,
2099 1.1 christos 92, 590, 591, 157, 162, 97, 25, 161, 157, 167,
2100 1.1 christos 168, 27, 161, 670, 82, 83, 64, 65, 66, 67,
2101 1.1 christos 25, 69, 70, 71, 72, 71, 861, 25, 162, 163,
2102 1.1 christos 162, 692, 25, 167, 168, 64, 65, 157, 67, 162,
2103 1.1 christos 69, 70, 90, 91, 78, 79, 80, 81, 159, 78,
2104 1.1 christos 79, 80, 81, 124, 125, 161, 140, 141, 25, 716,
2105 1.1 christos 746, 90, 91, 92, 120, 121, 66, 656, 657, 69,
2106 1.1 christos 70, 71, 72, 701, 69, 70, 64, 763, 66, 67,
2107 1.1 christos 162, 69, 70, 71, 72, 97, 162, 99, 100, 101,
2108 1.1 christos 90, 91, 104, 25, 683, 162, 107, 108, 109, 110,
2109 1.1 christos 135, 136, 90, 91, 143, 144, 120, 121, 162, 698,
2110 1.1 christos 699, 88, 701, 70, 25, 162, 93, 94, 25, 162,
2111 1.1 christos 97, 98, 779, 25, 162, 102, 103, 163, 25, 162,
2112 1.1 christos 162, 70, 163, 790, 25, 162, 162, 162, 162, 162,
2113 1.1 christos 162, 162, 162, 97, 157, 35, 35, 97, 163, 70,
2114 1.1 christos 70, 161, 161, 157, 157, 173, 813, 97, 157, 161,
2115 1.1 christos 157, 157, 25, 157, 25, 157, 157, 157, 25, 35,
2116 1.1 christos 125, 135, 161, 157, 157, 25, 158, 164, 164, 158,
2117 1.1 christos 158, 25, 25, 25, 35, 25, 25, 25, 25, 25,
2118 1.1 christos 25, 162, 25, 25, 162, 158, 162, 158, 158, 158,
2119 1.1 christos 789, 25, 25, 34, 25, 70, 25, 131, 161, 157,
2120 1.1 christos 25, 25, 25, 25, 137, 21, 158, 35, 25, 164,
2121 1.1 christos 158, 157, 25, 25, 161, 25, 25, 884, 25, 818,
2122 1.1 christos 887, 164, 0, 1, 891, 892, 893, 25, 164, 25,
2123 1.1 christos 25, 97, 831, 11, 162, 161, 903, 904, 905, 164,
2124 1.1 christos 164, 912, 97, 159, 35, 23, 24, 25, 35, 27,
2125 1.1 christos 161, 29, 30, 31, 32, 33, 34, 35, 36, 37,
2126 1.1 christos 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
2127 1.1 christos 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
2128 1.1 christos 58, 59, 60, 157, 161, 157, 97, 157, 25, 97,
2129 1.1 christos 159, 135, 157, 161, 134, 159, 159, 35, 157, 898,
2130 1.1 christos 157, 157, 35, 161, 142, 35, 157, 974, 975, 25,
2131 1.1 christos 25, 25, 35, 35, 35, 91, 25, 95, 96, 25,
2132 1.1 christos 97, 157, 161, 97, 97, 157, 161, 164, 97, 25,
2133 1.1 christos 157, 161, 97, 97, 112, 113, 114, 115, 157, 117,
2134 1.1 christos 161, 119, 162, 157, 122, 123, 161, 130, 97, 25,
2135 1.1 christos 69, 157, 157, 25, 35, 25, 35, 161, 76, 162,
2136 1.1 christos 162, 162, 162, 162, 142, 162, 25, 145, 146, 147,
2137 1.1 christos 164, 149, 150, 151, 152, 153, 154, 155, 156, 11,
2138 1.1 christos 161, 161, 161, 90, 162, 163, 161, 165, 166, 161,
2139 1.1 christos 161, 23, 24, 25, 164, 27, 164, 29, 30, 31,
2140 1.1 christos 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
2141 1.1 christos 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
2142 1.1 christos 52, 53, 54, 55, 56, 57, 58, 59, 60, 161,
2143 1.1 christos 161, 157, 161, 161, 161, 25, 161, 25, 162, 25,
2144 1.1 christos 160, 25, 25, 25, 157, 25, 97, 164, 135, 161,
2145 1.1 christos 161, 161, 125, 161, 35, 25, 35, 161, 35, 164,
2146 1.1 christos 97, 164, 162, 95, 96, 164, 164, 25, 97, 25,
2147 1.1 christos 172, 97, 97, 161, 130, 159, 25, 163, 25, 157,
2148 1.1 christos 112, 113, 114, 115, 159, 117, 157, 119, 157, 157,
2149 1.1 christos 122, 123, 97, 97, 161, 161, 161, 161, 161, 161,
2150 1.1 christos 161, 161, 97, 142, 125, 90, 164, 164, 97, 164,
2151 1.1 christos 142, 161, 161, 145, 146, 147, 161, 149, 150, 151,
2152 1.1 christos 152, 153, 154, 155, 156, 161, 161, 161, 161, 157,
2153 1.1 christos 162, 163, 97, 165, 166, 157, 25, 161, 161, 35,
2154 1.1 christos 25, 161, 161, 25, 161, 161, 164, 162, 162, 25,
2155 1.1 christos 25, 25, 162, 25, 27, 25, 25, 25, 161, 25,
2156 1.1 christos 31, 161, 161, 161, 161, 25, 71, 25, 25, 25,
2157 1.1 christos 162, 83, 159, 132, 35, 70, 69, 91, 97, 125,
2158 1.1 christos 25, 25, 32, 161, 159, 161, 159, 27, 162, 161,
2159 1.1 christos 159, 159, 70, 157, 161, 161, 159, 159, 136, 21,
2160 1.1 christos 25, 162, 162, 35, 161, 25, 161, 161, 161, 161,
2161 1.1 christos 161, 161, 157, 161, 157, 136, 136, 161, 135, 71,
2162 1.1 christos 162, 162, 162, 162, 159, 159, 136, 136, 161, 136,
2163 1.1 christos 136, 161, 136, 161, 161, 161, 161, 161, 161, 161,
2164 1.1 christos 35, 860, 969, 161, 37, 161, 161, -1, 161, 303,
2165 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2166 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, 322
2167 1.1 christos };
2168 1.1 christos
2169 1.1 christos /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
2170 1.1 christos state STATE-NUM. */
2171 1.1 christos static const yytype_uint8 yystos[] =
2172 1.1 christos {
2173 1.1 christos 0, 1, 11, 23, 24, 25, 27, 29, 30, 31,
2174 1.1 christos 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
2175 1.1 christos 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
2176 1.1 christos 52, 53, 54, 55, 56, 57, 58, 59, 60, 95,
2177 1.1 christos 96, 112, 113, 114, 115, 117, 119, 122, 123, 142,
2178 1.1 christos 145, 146, 147, 149, 150, 151, 152, 153, 154, 155,
2179 1.1 christos 156, 162, 163, 165, 166, 175, 176, 177, 178, 197,
2180 1.1 christos 205, 206, 207, 208, 209, 212, 162, 62, 69, 162,
2181 1.1 christos 167, 168, 213, 218, 219, 220, 88, 93, 94, 97,
2182 1.1 christos 98, 102, 103, 97, 99, 100, 101, 104, 211, 97,
2183 1.1 christos 97, 97, 97, 97, 25, 25, 219, 219, 162, 219,
2184 1.1 christos 168, 219, 168, 219, 162, 219, 219, 213, 217, 219,
2185 1.1 christos 162, 217, 219, 162, 162, 163, 198, 163, 198, 163,
2186 1.1 christos 198, 163, 198, 25, 219, 162, 163, 163, 97, 211,
2187 1.1 christos 162, 162, 162, 162, 162, 162, 25, 178, 162, 162,
2188 1.1 christos 27, 63, 25, 25, 82, 211, 0, 77, 160, 97,
2189 1.1 christos 102, 103, 97, 25, 35, 69, 76, 85, 86, 87,
2190 1.1 christos 89, 178, 205, 210, 219, 178, 210, 210, 162, 179,
2191 1.1 christos 25, 220, 220, 220, 64, 65, 66, 67, 69, 70,
2192 1.1 christos 71, 72, 90, 91, 25, 219, 25, 219, 25, 219,
2193 1.1 christos 5, 6, 7, 9, 10, 12, 13, 14, 15, 16,
2194 1.1 christos 17, 25, 27, 28, 33, 35, 62, 69, 74, 75,
2195 1.1 christos 76, 84, 85, 86, 89, 122, 123, 162, 163, 178,
2196 1.1 christos 194, 199, 210, 219, 25, 25, 219, 25, 219, 25,
2197 1.1 christos 148, 178, 27, 148, 142, 165, 35, 35, 35, 35,
2198 1.1 christos 15, 18, 20, 22, 25, 27, 35, 85, 86, 123,
2199 1.1 christos 162, 178, 210, 219, 219, 25, 25, 26, 172, 25,
2200 1.1 christos 26, 25, 25, 25, 25, 25, 25, 25, 25, 25,
2201 1.1 christos 27, 25, 25, 25, 25, 25, 25, 35, 25, 25,
2202 1.1 christos 56, 27, 157, 159, 69, 70, 82, 83, 201, 204,
2203 1.1 christos 25, 27, 177, 178, 25, 162, 71, 178, 178, 178,
2204 1.1 christos 178, 162, 178, 90, 91, 92, 162, 219, 162, 195,
2205 1.1 christos 134, 135, 157, 159, 161, 220, 220, 220, 220, 220,
2206 1.1 christos 220, 220, 220, 220, 220, 162, 162, 162, 162, 162,
2207 1.1 christos 162, 162, 162, 64, 65, 67, 70, 78, 79, 80,
2208 1.1 christos 81, 90, 91, 92, 200, 201, 162, 186, 70, 186,
2209 1.1 christos 25, 25, 25, 25, 25, 25, 25, 163, 163, 25,
2210 1.1 christos 178, 205, 206, 207, 209, 25, 70, 162, 162, 179,
2211 1.1 christos 162, 187, 162, 105, 106, 111, 162, 105, 106, 111,
2212 1.1 christos 162, 162, 162, 25, 25, 35, 178, 162, 201, 97,
2213 1.1 christos 90, 91, 92, 97, 201, 35, 35, 163, 207, 209,
2214 1.1 christos 179, 157, 97, 161, 70, 173, 161, 70, 157, 157,
2215 1.1 christos 83, 164, 164, 164, 164, 161, 83, 201, 204, 83,
2216 1.1 christos 201, 204, 157, 157, 157, 157, 157, 157, 157, 161,
2217 1.1 christos 97, 219, 25, 56, 25, 219, 25, 219, 164, 164,
2218 1.1 christos 77, 160, 195, 25, 35, 157, 157, 158, 158, 178,
2219 1.1 christos 158, 219, 219, 219, 125, 135, 157, 161, 157, 161,
2220 1.1 christos 25, 35, 208, 219, 25, 25, 25, 25, 35, 25,
2221 1.1 christos 25, 25, 25, 25, 25, 162, 219, 219, 219, 25,
2222 1.1 christos 25, 132, 133, 34, 162, 188, 162, 189, 158, 158,
2223 1.1 christos 158, 158, 25, 25, 70, 103, 178, 161, 83, 201,
2224 1.1 christos 204, 178, 25, 25, 157, 132, 133, 131, 25, 219,
2225 1.1 christos 25, 219, 25, 219, 25, 178, 178, 178, 25, 25,
2226 1.1 christos 25, 35, 137, 25, 68, 87, 219, 219, 219, 21,
2227 1.1 christos 35, 158, 158, 25, 178, 161, 157, 219, 25, 25,
2228 1.1 christos 25, 25, 25, 164, 219, 164, 25, 219, 164, 219,
2229 1.1 christos 219, 219, 25, 219, 219, 219, 25, 162, 97, 219,
2230 1.1 christos 161, 157, 161, 164, 164, 97, 177, 159, 178, 205,
2231 1.1 christos 205, 35, 35, 157, 35, 219, 161, 161, 135, 134,
2232 1.1 christos 97, 97, 179, 157, 159, 159, 159, 157, 157, 157,
2233 1.1 christos 157, 157, 25, 188, 189, 188, 157, 162, 183, 157,
2234 1.1 christos 162, 184, 161, 161, 157, 124, 125, 142, 142, 35,
2235 1.1 christos 35, 35, 35, 219, 201, 204, 83, 201, 204, 25,
2236 1.1 christos 161, 25, 213, 215, 216, 219, 164, 157, 157, 157,
2237 1.1 christos 25, 161, 161, 161, 162, 196, 196, 196, 196, 157,
2238 1.1 christos 157, 161, 157, 157, 161, 162, 162, 162, 162, 190,
2239 1.1 christos 190, 162, 184, 35, 35, 83, 204, 161, 35, 161,
2240 1.1 christos 91, 161, 161, 161, 161, 164, 97, 164, 164, 97,
2241 1.1 christos 161, 161, 161, 157, 161, 161, 161, 130, 25, 162,
2242 1.1 christos 97, 25, 97, 97, 97, 25, 160, 219, 69, 76,
2243 1.1 christos 178, 157, 161, 161, 162, 178, 162, 25, 219, 219,
2244 1.1 christos 219, 25, 35, 25, 35, 25, 90, 25, 125, 126,
2245 1.1 christos 127, 181, 25, 124, 125, 25, 161, 157, 161, 157,
2246 1.1 christos 161, 161, 189, 188, 219, 164, 25, 219, 164, 161,
2247 1.1 christos 164, 172, 164, 25, 25, 25, 97, 135, 219, 219,
2248 1.1 christos 162, 180, 35, 35, 140, 141, 178, 178, 125, 35,
2249 1.1 christos 190, 25, 164, 97, 25, 219, 97, 25, 97, 97,
2250 1.1 christos 25, 35, 178, 161, 130, 3, 4, 8, 19, 159,
2251 1.1 christos 163, 198, 25, 25, 157, 161, 178, 178, 157, 205,
2252 1.1 christos 159, 157, 157, 157, 161, 161, 161, 161, 161, 219,
2253 1.1 christos 97, 161, 97, 161, 161, 97, 142, 125, 164, 186,
2254 1.1 christos 164, 164, 186, 90, 169, 170, 171, 214, 97, 161,
2255 1.1 christos 161, 210, 161, 161, 161, 120, 121, 161, 161, 161,
2256 1.1 christos 161, 157, 157, 161, 161, 164, 210, 97, 25, 35,
2257 1.1 christos 25, 161, 161, 162, 162, 25, 25, 219, 25, 25,
2258 1.1 christos 27, 178, 219, 25, 25, 25, 180, 186, 162, 161,
2259 1.1 christos 25, 25, 31, 161, 161, 186, 186, 186, 219, 178,
2260 1.1 christos 189, 179, 161, 161, 189, 25, 178, 25, 71, 179,
2261 1.1 christos 25, 180, 25, 25, 159, 162, 161, 159, 161, 162,
2262 1.1 christos 161, 159, 159, 159, 132, 200, 201, 70, 69, 161,
2263 1.1 christos 157, 161, 35, 91, 159, 159, 219, 107, 108, 109,
2264 1.1 christos 110, 191, 97, 219, 125, 162, 192, 219, 219, 219,
2265 1.1 christos 161, 25, 25, 32, 178, 27, 70, 219, 219, 219,
2266 1.1 christos 192, 161, 198, 161, 161, 136, 161, 161, 161, 162,
2267 1.1 christos 185, 184, 184, 161, 21, 157, 157, 161, 162, 193,
2268 1.1 christos 162, 202, 162, 203, 120, 121, 181, 182, 162, 25,
2269 1.1 christos 25, 135, 136, 128, 129, 138, 139, 143, 144, 157,
2270 1.1 christos 161, 157, 161, 35, 159, 159, 157, 161, 157, 161,
2271 1.1 christos 157, 161, 157, 161, 157, 161, 157, 161, 157, 161,
2272 1.1 christos 157, 161, 182, 181, 161, 219, 219, 136, 135, 136,
2273 1.1 christos 136, 136, 136, 136, 136, 161, 161, 71, 161, 161,
2274 1.1 christos 161, 161, 161, 161, 161, 161, 161, 161, 35, 192,
2275 1.1 christos 192
2276 1.1 christos };
2277 1.1 christos
2278 1.1 christos /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
2279 1.1 christos static const yytype_uint8 yyr1[] =
2280 1.1 christos {
2281 1.1 christos 0, 174, 175, 175, 176, 176, 176, 176, 177, 177,
2282 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2283 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2284 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2285 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2286 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2287 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2288 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2289 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2290 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2291 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2292 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2293 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2294 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2295 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2296 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2297 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2298 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2299 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2300 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2301 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2302 1.1 christos 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
2303 1.1 christos 177, 177, 177, 177, 177, 177, 177, 178, 178, 179,
2304 1.1 christos 179, 179, 179, 179, 180, 180, 181, 181, 181, 181,
2305 1.1 christos 182, 182, 183, 183, 184, 184, 184, 185, 185, 185,
2306 1.1 christos 185, 185, 186, 186, 186, 187, 187, 187, 188, 188,
2307 1.1 christos 188, 188, 188, 188, 189, 189, 190, 190, 191, 191,
2308 1.1 christos 191, 191, 192, 192, 193, 193, 193, 193, 194, 194,
2309 1.1 christos 194, 195, 195, 196, 196, 197, 198, 199, 199, 200,
2310 1.1 christos 200, 200, 200, 201, 201, 202, 202, 202, 202, 202,
2311 1.1 christos 202, 202, 202, 203, 203, 203, 203, 204, 204, 204,
2312 1.1 christos 205, 206, 207, 208, 208, 208, 208, 208, 209, 209,
2313 1.1 christos 209, 210, 211, 211, 211, 211, 212, 212, 212, 212,
2314 1.1 christos 213, 214, 214, 214, 215, 216, 216, 217, 218, 218,
2315 1.1 christos 218, 218, 218, 219, 220, 220, 220, 220, 220, 220,
2316 1.1 christos 220, 220, 220, 220, 220
2317 1.1 christos };
2318 1.1 christos
2319 1.1 christos /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
2320 1.1 christos static const yytype_int8 yyr2[] =
2321 1.1 christos {
2322 1.1 christos 0, 2, 0, 1, 2, 6, 4, 1, 1, 2,
2323 1.1 christos 5, 1, 6, 6, 3, 3, 17, 17, 11, 11,
2324 1.1 christos 11, 12, 12, 12, 5, 3, 3, 3, 8, 13,
2325 1.1 christos 12, 13, 13, 8, 17, 6, 9, 3, 6, 3,
2326 1.1 christos 5, 6, 8, 8, 2, 2, 4, 3, 2, 4,
2327 1.1 christos 3, 6, 4, 7, 7, 3, 3, 6, 3, 4,
2328 1.1 christos 3, 3, 3, 11, 11, 9, 5, 5, 9, 5,
2329 1.1 christos 5, 6, 6, 5, 5, 5, 6, 6, 5, 1,
2330 1.1 christos 3, 3, 3, 3, 4, 4, 9, 9, 5, 7,
2331 1.1 christos 4, 6, 6, 7, 9, 8, 8, 11, 9, 4,
2332 1.1 christos 5, 6, 7, 6, 4, 6, 5, 6, 6, 4,
2333 1.1 christos 8, 10, 10, 12, 5, 6, 5, 6, 4, 4,
2334 1.1 christos 4, 7, 9, 9, 9, 6, 6, 6, 8, 8,
2335 1.1 christos 6, 5, 5, 8, 4, 7, 1, 1, 1, 1,
2336 1.1 christos 1, 1, 1, 1, 1, 1, 2, 2, 4, 4,
2337 1.1 christos 6, 6, 2, 2, 4, 2, 2, 2, 2, 2,
2338 1.1 christos 2, 6, 6, 5, 4, 3, 3, 3, 3, 3,
2339 1.1 christos 3, 4, 2, 4, 2, 4, 2, 4, 2, 7,
2340 1.1 christos 8, 8, 7, 7, 7, 9, 7, 8, 9, 8,
2341 1.1 christos 6, 7, 8, 9, 8, 7, 7, 6, 11, 7,
2342 1.1 christos 11, 7, 3, 2, 1, 7, 9, 11, 3, 5,
2343 1.1 christos 7, 2, 2, 2, 2, 1, 1, 2, 2, 4,
2344 1.1 christos 1, 1, 6, 6, 6, 2, 2, 1, 1, 0,
2345 1.1 christos 5, 5, 3, 3, 3, 3, 0, 1, 1, 1,
2346 1.1 christos 1, 1, 0, 3, 0, 3, 3, 0, 3, 3,
2347 1.1 christos 5, 5, 0, 3, 3, 0, 3, 3, 0, 3,
2348 1.1 christos 3, 3, 5, 5, 0, 3, 0, 3, 1, 1,
2349 1.1 christos 1, 1, 0, 3, 3, 3, 5, 5, 1, 1,
2350 1.1 christos 1, 0, 3, 0, 3, 4, 4, 1, 1, 1,
2351 1.1 christos 1, 1, 1, 1, 1, 3, 3, 3, 3, 5,
2352 1.1 christos 5, 5, 5, 3, 3, 5, 5, 0, 1, 1,
2353 1.1 christos 2, 2, 2, 3, 1, 5, 5, 3, 2, 2,
2354 1.1 christos 2, 3, 1, 1, 1, 1, 3, 3, 3, 3,
2355 1.1 christos 1, 1, 1, 1, 3, 1, 1, 3, 1, 1,
2356 1.1 christos 3, 2, 2, 1, 3, 3, 3, 3, 3, 3,
2357 1.1 christos 3, 3, 3, 3, 1
2358 1.1 christos };
2359 1.1 christos
2360 1.1 christos
2361 1.1 christos enum { YYENOMEM = -2 };
2362 1.1 christos
2363 1.1 christos #define yyerrok (yyerrstatus = 0)
2364 1.1 christos #define yyclearin (yychar = YYEMPTY)
2365 1.1 christos
2366 1.1 christos #define YYACCEPT goto yyacceptlab
2367 1.1 christos #define YYABORT goto yyabortlab
2368 1.1 christos #define YYERROR goto yyerrorlab
2369 1.1 christos #define YYNOMEM goto yyexhaustedlab
2370 1.1 christos
2371 1.1 christos
2372 1.1 christos #define YYRECOVERING() (!!yyerrstatus)
2373 1.1 christos
2374 1.1 christos #define YYBACKUP(Token, Value) \
2375 1.1 christos do \
2376 1.1 christos if (yychar == YYEMPTY) \
2377 1.1 christos { \
2378 1.1 christos yychar = (Token); \
2379 1.1 christos yylval = (Value); \
2380 1.1 christos YYPOPSTACK (yylen); \
2381 1.1 christos yystate = *yyssp; \
2382 1.1 christos goto yybackup; \
2383 1.1 christos } \
2384 1.1 christos else \
2385 1.1 christos { \
2386 1.1 christos yyerror (YY_("syntax error: cannot back up")); \
2387 1.1 christos YYERROR; \
2388 1.1 christos } \
2389 1.1 christos while (0)
2390 1.1 christos
2391 1.1 christos /* Backward compatibility with an undocumented macro.
2392 1.1 christos Use YYerror or YYUNDEF. */
2393 1.1 christos #define YYERRCODE YYUNDEF
2394 1.1 christos
2395 1.1 christos
2396 1.1 christos /* Enable debugging if requested. */
2397 1.1 christos #if YYDEBUG
2398 1.1 christos
2399 1.1 christos # ifndef YYFPRINTF
2400 1.1 christos # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2401 1.1 christos # define YYFPRINTF fprintf
2402 1.1 christos # endif
2403 1.1 christos
2404 1.1 christos # define YYDPRINTF(Args) \
2405 1.1 christos do { \
2406 1.1 christos if (yydebug) \
2407 1.1 christos YYFPRINTF Args; \
2408 1.1 christos } while (0)
2409 1.1 christos
2410 1.1 christos
2411 1.1 christos
2412 1.1 christos
2413 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
2414 1.1 christos do { \
2415 1.1 christos if (yydebug) \
2416 1.1 christos { \
2417 1.1 christos YYFPRINTF (stderr, "%s ", Title); \
2418 1.1 christos yy_symbol_print (stderr, \
2419 1.1 christos Kind, Value); \
2420 1.1 christos YYFPRINTF (stderr, "\n"); \
2421 1.1 christos } \
2422 1.1 christos } while (0)
2423 1.1 christos
2424 1.1 christos
2425 1.1 christos /*-----------------------------------.
2426 1.1 christos | Print this symbol's value on YYO. |
2427 1.1 christos `-----------------------------------*/
2428 1.1 christos
2429 1.1 christos static void
2430 1.1 christos yy_symbol_value_print (FILE *yyo,
2431 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2432 1.1 christos {
2433 1.1 christos FILE *yyoutput = yyo;
2434 1.1 christos YY_USE (yyoutput);
2435 1.1 christos if (!yyvaluep)
2436 1.1 christos return;
2437 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2438 1.1 christos YY_USE (yykind);
2439 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2440 1.1 christos }
2441 1.1 christos
2442 1.1 christos
2443 1.1 christos /*---------------------------.
2444 1.1 christos | Print this symbol on YYO. |
2445 1.1 christos `---------------------------*/
2446 1.1 christos
2447 1.1 christos static void
2448 1.1 christos yy_symbol_print (FILE *yyo,
2449 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2450 1.1 christos {
2451 1.1 christos YYFPRINTF (yyo, "%s %s (",
2452 1.1 christos yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2453 1.1 christos
2454 1.1 christos yy_symbol_value_print (yyo, yykind, yyvaluep);
2455 1.1 christos YYFPRINTF (yyo, ")");
2456 1.1 christos }
2457 1.1 christos
2458 1.1 christos /*------------------------------------------------------------------.
2459 1.1 christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2460 1.1 christos | TOP (included). |
2461 1.1 christos `------------------------------------------------------------------*/
2462 1.1 christos
2463 1.1 christos static void
2464 1.1 christos yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2465 1.1 christos {
2466 1.1 christos YYFPRINTF (stderr, "Stack now");
2467 1.1 christos for (; yybottom <= yytop; yybottom++)
2468 1.1 christos {
2469 1.1 christos int yybot = *yybottom;
2470 1.1 christos YYFPRINTF (stderr, " %d", yybot);
2471 1.1 christos }
2472 1.1 christos YYFPRINTF (stderr, "\n");
2473 1.1 christos }
2474 1.1 christos
2475 1.1 christos # define YY_STACK_PRINT(Bottom, Top) \
2476 1.1 christos do { \
2477 1.1 christos if (yydebug) \
2478 1.1 christos yy_stack_print ((Bottom), (Top)); \
2479 1.1 christos } while (0)
2480 1.1 christos
2481 1.1 christos
2482 1.1 christos /*------------------------------------------------.
2483 1.1 christos | Report that the YYRULE is going to be reduced. |
2484 1.1 christos `------------------------------------------------*/
2485 1.1 christos
2486 1.1 christos static void
2487 1.1 christos yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
2488 1.1 christos int yyrule)
2489 1.1 christos {
2490 1.1 christos int yylno = yyrline[yyrule];
2491 1.1 christos int yynrhs = yyr2[yyrule];
2492 1.1 christos int yyi;
2493 1.1 christos YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2494 1.1 christos yyrule - 1, yylno);
2495 1.1 christos /* The symbols being reduced. */
2496 1.1 christos for (yyi = 0; yyi < yynrhs; yyi++)
2497 1.1 christos {
2498 1.1 christos YYFPRINTF (stderr, " $%d = ", yyi + 1);
2499 1.1 christos yy_symbol_print (stderr,
2500 1.1 christos YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2501 1.1 christos &yyvsp[(yyi + 1) - (yynrhs)]);
2502 1.1 christos YYFPRINTF (stderr, "\n");
2503 1.1 christos }
2504 1.1 christos }
2505 1.1 christos
2506 1.1 christos # define YY_REDUCE_PRINT(Rule) \
2507 1.1 christos do { \
2508 1.1 christos if (yydebug) \
2509 1.1 christos yy_reduce_print (yyssp, yyvsp, Rule); \
2510 1.1 christos } while (0)
2511 1.1 christos
2512 1.1 christos /* Nonzero means print parse trace. It is left uninitialized so that
2513 1.1 christos multiple parsers can coexist. */
2514 1.1 christos int yydebug;
2515 1.1 christos #else /* !YYDEBUG */
2516 1.1 christos # define YYDPRINTF(Args) ((void) 0)
2517 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2518 1.1 christos # define YY_STACK_PRINT(Bottom, Top)
2519 1.1 christos # define YY_REDUCE_PRINT(Rule)
2520 1.1 christos #endif /* !YYDEBUG */
2521 1.1 christos
2522 1.1 christos
2523 1.1 christos /* YYINITDEPTH -- initial size of the parser's stacks. */
2524 1.1 christos #ifndef YYINITDEPTH
2525 1.1 christos # define YYINITDEPTH 200
2526 1.1 christos #endif
2527 1.1 christos
2528 1.1 christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2529 1.1 christos if the built-in stack extension method is used).
2530 1.1 christos
2531 1.1 christos Do not make this value too large; the results are undefined if
2532 1.1 christos YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2533 1.1 christos evaluated with infinite-precision integer arithmetic. */
2534 1.1 christos
2535 1.1 christos #ifndef YYMAXDEPTH
2536 1.1 christos # define YYMAXDEPTH 10000
2537 1.1 christos #endif
2538 1.1 christos
2539 1.1 christos
2540 1.1 christos
2541 1.1 christos
2542 1.1 christos
2543 1.1 christos
2544 1.1 christos /*-----------------------------------------------.
2545 1.1 christos | Release the memory associated to this symbol. |
2546 1.1 christos `-----------------------------------------------*/
2547 1.1 christos
2548 1.1 christos static void
2549 1.1 christos yydestruct (const char *yymsg,
2550 1.1 christos yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
2551 1.1 christos {
2552 1.1 christos YY_USE (yyvaluep);
2553 1.1 christos if (!yymsg)
2554 1.1 christos yymsg = "Deleting";
2555 1.1 christos YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
2556 1.1 christos
2557 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2558 1.1 christos YY_USE (yykind);
2559 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2560 1.1 christos }
2561 1.1 christos
2562 1.1 christos
2563 1.1 christos /* Lookahead token kind. */
2564 1.1 christos int yychar;
2565 1.1 christos
2566 1.1 christos /* The semantic value of the lookahead symbol. */
2567 1.1 christos YYSTYPE yylval;
2568 1.1 christos /* Number of syntax errors so far. */
2569 1.1 christos int yynerrs;
2570 1.1 christos
2571 1.1 christos
2572 1.1 christos
2573 1.1 christos
2574 1.1 christos /*----------.
2575 1.1 christos | yyparse. |
2576 1.1 christos `----------*/
2577 1.1 christos
2578 1.1 christos int
2579 1.1 christos yyparse (void)
2580 1.1 christos {
2581 1.1 christos yy_state_fast_t yystate = 0;
2582 1.1 christos /* Number of tokens to shift before error messages enabled. */
2583 1.1 christos int yyerrstatus = 0;
2584 1.1 christos
2585 1.1 christos /* Refer to the stacks through separate pointers, to allow yyoverflow
2586 1.1 christos to reallocate them elsewhere. */
2587 1.1 christos
2588 1.1 christos /* Their size. */
2589 1.1 christos YYPTRDIFF_T yystacksize = YYINITDEPTH;
2590 1.1 christos
2591 1.1 christos /* The state stack: array, bottom, top. */
2592 1.1 christos yy_state_t yyssa[YYINITDEPTH];
2593 1.1 christos yy_state_t *yyss = yyssa;
2594 1.1 christos yy_state_t *yyssp = yyss;
2595 1.1 christos
2596 1.1 christos /* The semantic value stack: array, bottom, top. */
2597 1.1 christos YYSTYPE yyvsa[YYINITDEPTH];
2598 1.1 christos YYSTYPE *yyvs = yyvsa;
2599 1.1 christos YYSTYPE *yyvsp = yyvs;
2600 1.1 christos
2601 1.1 christos int yyn;
2602 1.1 christos /* The return value of yyparse. */
2603 1.1 christos int yyresult;
2604 1.1 christos /* Lookahead symbol kind. */
2605 1.1 christos yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
2606 1.1 christos /* The variables used to return semantic value and location from the
2607 1.1 christos action routines. */
2608 1.1 christos YYSTYPE yyval;
2609 1.1 christos
2610 1.1 christos
2611 1.1 christos
2612 1.1 christos #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
2613 1.1 christos
2614 1.1 christos /* The number of symbols on the RHS of the reduced rule.
2615 1.1 christos Keep to zero when no symbol should be popped. */
2616 1.1 christos int yylen = 0;
2617 1.1 christos
2618 1.1 christos YYDPRINTF ((stderr, "Starting parse\n"));
2619 1.1 christos
2620 1.1 christos yychar = YYEMPTY; /* Cause a token to be read. */
2621 1.1 christos
2622 1.1 christos goto yysetstate;
2623 1.1 christos
2624 1.1 christos
2625 1.1 christos /*------------------------------------------------------------.
2626 1.1 christos | yynewstate -- push a new state, which is found in yystate. |
2627 1.1 christos `------------------------------------------------------------*/
2628 1.1 christos yynewstate:
2629 1.1 christos /* In all cases, when you get here, the value and location stacks
2630 1.1 christos have just been pushed. So pushing a state here evens the stacks. */
2631 1.1 christos yyssp++;
2632 1.1 christos
2633 1.1 christos
2634 1.1 christos /*--------------------------------------------------------------------.
2635 1.1 christos | yysetstate -- set current state (the top of the stack) to yystate. |
2636 1.1 christos `--------------------------------------------------------------------*/
2637 1.1 christos yysetstate:
2638 1.1 christos YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2639 1.1 christos YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2640 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
2641 1.1 christos *yyssp = YY_CAST (yy_state_t, yystate);
2642 1.1 christos YY_IGNORE_USELESS_CAST_END
2643 1.1 christos YY_STACK_PRINT (yyss, yyssp);
2644 1.1 christos
2645 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
2646 1.1 christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2647 1.1 christos YYNOMEM;
2648 1.1 christos #else
2649 1.1 christos {
2650 1.1 christos /* Get the current used size of the three stacks, in elements. */
2651 1.1 christos YYPTRDIFF_T yysize = yyssp - yyss + 1;
2652 1.1 christos
2653 1.1 christos # if defined yyoverflow
2654 1.1 christos {
2655 1.1 christos /* Give user a chance to reallocate the stack. Use copies of
2656 1.1 christos these so that the &'s don't force the real ones into
2657 1.1 christos memory. */
2658 1.1 christos yy_state_t *yyss1 = yyss;
2659 1.1 christos YYSTYPE *yyvs1 = yyvs;
2660 1.1 christos
2661 1.1 christos /* Each stack pointer address is followed by the size of the
2662 1.1 christos data in use in that stack, in bytes. This used to be a
2663 1.1 christos conditional around just the two extra args, but that might
2664 1.1 christos be undefined if yyoverflow is a macro. */
2665 1.1 christos yyoverflow (YY_("memory exhausted"),
2666 1.1 christos &yyss1, yysize * YYSIZEOF (*yyssp),
2667 1.1 christos &yyvs1, yysize * YYSIZEOF (*yyvsp),
2668 1.1 christos &yystacksize);
2669 1.1 christos yyss = yyss1;
2670 1.1 christos yyvs = yyvs1;
2671 1.1 christos }
2672 1.1 christos # else /* defined YYSTACK_RELOCATE */
2673 1.1 christos /* Extend the stack our own way. */
2674 1.1 christos if (YYMAXDEPTH <= yystacksize)
2675 1.1 christos YYNOMEM;
2676 1.1 christos yystacksize *= 2;
2677 1.1 christos if (YYMAXDEPTH < yystacksize)
2678 1.1 christos yystacksize = YYMAXDEPTH;
2679 1.1 christos
2680 1.1 christos {
2681 1.1 christos yy_state_t *yyss1 = yyss;
2682 1.1 christos union yyalloc *yyptr =
2683 1.1 christos YY_CAST (union yyalloc *,
2684 1.1 christos YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2685 1.1 christos if (! yyptr)
2686 1.1 christos YYNOMEM;
2687 1.1 christos YYSTACK_RELOCATE (yyss_alloc, yyss);
2688 1.1 christos YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2689 1.1 christos # undef YYSTACK_RELOCATE
2690 1.1 christos if (yyss1 != yyssa)
2691 1.1 christos YYSTACK_FREE (yyss1);
2692 1.1 christos }
2693 1.1 christos # endif
2694 1.1 christos
2695 1.1 christos yyssp = yyss + yysize - 1;
2696 1.1 christos yyvsp = yyvs + yysize - 1;
2697 1.1 christos
2698 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
2699 1.1 christos YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2700 1.1 christos YY_CAST (long, yystacksize)));
2701 1.1 christos YY_IGNORE_USELESS_CAST_END
2702 1.1 christos
2703 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
2704 1.1 christos YYABORT;
2705 1.1 christos }
2706 1.1 christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2707 1.1 christos
2708 1.1 christos
2709 1.1 christos if (yystate == YYFINAL)
2710 1.1 christos YYACCEPT;
2711 1.1 christos
2712 1.1 christos goto yybackup;
2713 1.1 christos
2714 1.1 christos
2715 1.1 christos /*-----------.
2716 1.1 christos | yybackup. |
2717 1.1 christos `-----------*/
2718 1.1 christos yybackup:
2719 1.1 christos /* Do appropriate processing given the current state. Read a
2720 1.1 christos lookahead token if we need one and don't already have one. */
2721 1.1 christos
2722 1.1 christos /* First try to decide what to do without reference to lookahead token. */
2723 1.1 christos yyn = yypact[yystate];
2724 1.1 christos if (yypact_value_is_default (yyn))
2725 1.1 christos goto yydefault;
2726 1.1 christos
2727 1.1 christos /* Not known => get a lookahead token if don't already have one. */
2728 1.1 christos
2729 1.1 christos /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2730 1.1 christos if (yychar == YYEMPTY)
2731 1.1 christos {
2732 1.1 christos YYDPRINTF ((stderr, "Reading a token\n"));
2733 1.1 christos yychar = yylex ();
2734 1.1 christos }
2735 1.1 christos
2736 1.1 christos if (yychar <= YYEOF)
2737 1.1 christos {
2738 1.1 christos yychar = YYEOF;
2739 1.1 christos yytoken = YYSYMBOL_YYEOF;
2740 1.1 christos YYDPRINTF ((stderr, "Now at end of input.\n"));
2741 1.1 christos }
2742 1.1 christos else if (yychar == YYerror)
2743 1.1 christos {
2744 1.1 christos /* The scanner already issued an error message, process directly
2745 1.1 christos to error recovery. But do not keep the error token as
2746 1.1 christos lookahead, it is too special and may lead us to an endless
2747 1.1 christos loop in error recovery. */
2748 1.1 christos yychar = YYUNDEF;
2749 1.1 christos yytoken = YYSYMBOL_YYerror;
2750 1.1 christos goto yyerrlab1;
2751 1.1 christos }
2752 1.1 christos else
2753 1.1 christos {
2754 1.1 christos yytoken = YYTRANSLATE (yychar);
2755 1.1 christos YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2756 1.1 christos }
2757 1.1 christos
2758 1.1 christos /* If the proper action on seeing token YYTOKEN is to reduce or to
2759 1.1 christos detect an error, take that action. */
2760 1.1 christos yyn += yytoken;
2761 1.1 christos if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2762 1.1 christos goto yydefault;
2763 1.1 christos yyn = yytable[yyn];
2764 1.1 christos if (yyn <= 0)
2765 1.1 christos {
2766 1.1 christos if (yytable_value_is_error (yyn))
2767 1.1 christos goto yyerrlab;
2768 1.1 christos yyn = -yyn;
2769 1.1 christos goto yyreduce;
2770 1.1 christos }
2771 1.1 christos
2772 1.1 christos /* Count tokens shifted since error; after three, turn off error
2773 1.1 christos status. */
2774 1.1 christos if (yyerrstatus)
2775 1.1 christos yyerrstatus--;
2776 1.1 christos
2777 1.1 christos /* Shift the lookahead token. */
2778 1.1 christos YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2779 1.1 christos yystate = yyn;
2780 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2781 1.1 christos *++yyvsp = yylval;
2782 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2783 1.1 christos
2784 1.1 christos /* Discard the shifted token. */
2785 1.1 christos yychar = YYEMPTY;
2786 1.1 christos goto yynewstate;
2787 1.1 christos
2788 1.1 christos
2789 1.1 christos /*-----------------------------------------------------------.
2790 1.1 christos | yydefault -- do the default action for the current state. |
2791 1.1 christos `-----------------------------------------------------------*/
2792 1.1 christos yydefault:
2793 1.1 christos yyn = yydefact[yystate];
2794 1.1 christos if (yyn == 0)
2795 1.1 christos goto yyerrlab;
2796 1.1 christos goto yyreduce;
2797 1.1 christos
2798 1.1 christos
2799 1.1 christos /*-----------------------------.
2800 1.1 christos | yyreduce -- do a reduction. |
2801 1.1 christos `-----------------------------*/
2802 1.1 christos yyreduce:
2803 1.1 christos /* yyn is the number of a rule to reduce with. */
2804 1.1 christos yylen = yyr2[yyn];
2805 1.1 christos
2806 1.1 christos /* If YYLEN is nonzero, implement the default value of the action:
2807 1.1 christos '$$ = $1'.
2808 1.1 christos
2809 1.1 christos Otherwise, the following line sets YYVAL to garbage.
2810 1.1 christos This behavior is undocumented and Bison
2811 1.1 christos users should not rely upon it. Assigning to YYVAL
2812 1.1 christos unconditionally makes the parser a bit smaller, and it avoids a
2813 1.1 christos GCC warning that YYVAL may be used uninitialized. */
2814 1.1 christos yyval = yyvsp[1-yylen];
2815 1.1 christos
2816 1.1 christos
2817 1.1 christos YY_REDUCE_PRINT (yyn);
2818 1.1 christos switch (yyn)
2819 1.1 christos {
2820 1.1 christos case 3: /* statement: asm */
2821 1.1 christos #line 650 "./config/bfin-parse.y"
2822 1.1 christos {
2823 1.1 christos insn = (yyvsp[0].instr);
2824 1.1 christos if (insn == (INSTR_T) 0)
2825 1.1 christos return NO_INSN_GENERATED;
2826 1.1 christos else if (insn == (INSTR_T) - 1)
2827 1.1 christos return SEMANTIC_ERROR;
2828 1.1 christos else
2829 1.1 christos return INSN_GENERATED;
2830 1.1 christos }
2831 1.1 christos #line 2832 "config/bfin-parse.c"
2832 1.1 christos break;
2833 1.1 christos
2834 1.1 christos case 5: /* asm: asm_1 DOUBLE_BAR asm_1 DOUBLE_BAR asm_1 SEMICOLON */
2835 1.1 christos #line 664 "./config/bfin-parse.y"
2836 1.1 christos {
2837 1.1 christos if (((yyvsp[-5].instr)->value & 0xf800) == 0xc000)
2838 1.1 christos {
2839 1.1 christos if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2840 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-3].instr), (yyvsp[-1].instr));
2841 1.1 christos else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2842 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-1].instr), (yyvsp[-3].instr));
2843 1.1 christos else
2844 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instruction group");
2845 1.1 christos }
2846 1.1 christos else if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2847 1.1 christos {
2848 1.1 christos if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-1].instr)))
2849 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-5].instr), (yyvsp[-1].instr));
2850 1.1 christos else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-1].instr)))
2851 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), (yyvsp[-5].instr));
2852 1.1 christos else
2853 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instruction group");
2854 1.1 christos }
2855 1.1 christos else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2856 1.1 christos {
2857 1.1 christos if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-3].instr)))
2858 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-5].instr), (yyvsp[-3].instr));
2859 1.1 christos else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-3].instr)))
2860 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), (yyvsp[-5].instr));
2861 1.1 christos else
2862 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instruction group");
2863 1.1 christos }
2864 1.1 christos else
2865 1.1 christos error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
2866 1.1 christos }
2867 1.1 christos #line 2868 "config/bfin-parse.c"
2868 1.1 christos break;
2869 1.1 christos
2870 1.1 christos case 6: /* asm: asm_1 DOUBLE_BAR asm_1 SEMICOLON */
2871 1.1 christos #line 697 "./config/bfin-parse.y"
2872 1.1 christos {
2873 1.1 christos if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2874 1.1 christos {
2875 1.1 christos if (is_group1 ((yyvsp[-1].instr)))
2876 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), 0);
2877 1.1 christos else if (is_group2 ((yyvsp[-1].instr)))
2878 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), 0, (yyvsp[-1].instr));
2879 1.1 christos else
2880 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
2881 1.1 christos }
2882 1.1 christos else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2883 1.1 christos {
2884 1.1 christos if (is_group1 ((yyvsp[-3].instr)))
2885 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), 0);
2886 1.1 christos else if (is_group2 ((yyvsp[-3].instr)))
2887 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), 0, (yyvsp[-3].instr));
2888 1.1 christos else
2889 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
2890 1.1 christos }
2891 1.1 christos else if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2892 1.1 christos (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-3].instr), (yyvsp[-1].instr));
2893 1.1 christos else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2894 1.1 christos (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-1].instr), (yyvsp[-3].instr));
2895 1.1 christos else
2896 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
2897 1.1 christos }
2898 1.1 christos #line 2899 "config/bfin-parse.c"
2899 1.1 christos break;
2900 1.1 christos
2901 1.1 christos case 7: /* asm: error */
2902 1.1 christos #line 724 "./config/bfin-parse.y"
2903 1.1 christos {
2904 1.1 christos (yyval.instr) = 0;
2905 1.1 christos yyerror ("");
2906 1.1 christos yyerrok;
2907 1.1 christos }
2908 1.1 christos #line 2909 "config/bfin-parse.c"
2909 1.1 christos break;
2910 1.1 christos
2911 1.1 christos case 8: /* asm_1: MNOP */
2912 1.1 christos #line 735 "./config/bfin-parse.y"
2913 1.1 christos {
2914 1.1 christos (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
2915 1.1 christos }
2916 1.1 christos #line 2917 "config/bfin-parse.c"
2917 1.1 christos break;
2918 1.1 christos
2919 1.1 christos case 9: /* asm_1: assign_macfunc opt_mode */
2920 1.1 christos #line 739 "./config/bfin-parse.y"
2921 1.1 christos {
2922 1.1 christos int op0, op1;
2923 1.1 christos int w0 = 0, w1 = 0;
2924 1.1 christos int h00, h10, h01, h11;
2925 1.1 christos
2926 1.1 christos if (check_macfunc_option (&(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
2927 1.1 christos return yyerror ("bad option");
2928 1.1 christos
2929 1.1 christos if ((yyvsp[-1].macfunc).n == 0)
2930 1.1 christos {
2931 1.1 christos if ((yyvsp[0].mod).MM)
2932 1.1 christos return yyerror ("(m) not allowed with a0 unit");
2933 1.1 christos op1 = 3;
2934 1.1 christos op0 = (yyvsp[-1].macfunc).op;
2935 1.1 christos w1 = 0;
2936 1.1 christos w0 = (yyvsp[-1].macfunc).w;
2937 1.1 christos h00 = IS_H ((yyvsp[-1].macfunc).s0);
2938 1.1 christos h10 = IS_H ((yyvsp[-1].macfunc).s1);
2939 1.1 christos h01 = h11 = 0;
2940 1.1 christos }
2941 1.1 christos else
2942 1.1 christos {
2943 1.1 christos op1 = (yyvsp[-1].macfunc).op;
2944 1.1 christos op0 = 3;
2945 1.1 christos w1 = (yyvsp[-1].macfunc).w;
2946 1.1 christos w0 = 0;
2947 1.1 christos h00 = h10 = 0;
2948 1.1 christos h01 = IS_H ((yyvsp[-1].macfunc).s0);
2949 1.1 christos h11 = IS_H ((yyvsp[-1].macfunc).s1);
2950 1.1 christos }
2951 1.1 christos (yyval.instr) = DSP32MAC (op1, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, w1, (yyvsp[-1].macfunc).P, h01, h11, h00, h10,
2952 1.1 christos &(yyvsp[-1].macfunc).dst, op0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, w0);
2953 1.1 christos }
2954 1.1 christos #line 2955 "config/bfin-parse.c"
2955 1.1 christos break;
2956 1.1 christos
2957 1.1 christos case 10: /* asm_1: assign_macfunc opt_mode COMMA assign_macfunc opt_mode */
2958 1.1 christos #line 777 "./config/bfin-parse.y"
2959 1.1 christos {
2960 1.1 christos Register *dst;
2961 1.1 christos
2962 1.1 christos if (check_macfuncs (&(yyvsp[-4].macfunc), &(yyvsp[-3].mod), &(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
2963 1.1 christos return -1;
2964 1.1 christos notethat ("assign_macfunc (.), assign_macfunc (.)\n");
2965 1.1 christos
2966 1.1 christos if ((yyvsp[-4].macfunc).w)
2967 1.1 christos dst = &(yyvsp[-4].macfunc).dst;
2968 1.1 christos else
2969 1.1 christos dst = &(yyvsp[-1].macfunc).dst;
2970 1.1 christos
2971 1.1 christos (yyval.instr) = DSP32MAC ((yyvsp[-4].macfunc).op, (yyvsp[-3].mod).MM, (yyvsp[0].mod).mod, (yyvsp[-4].macfunc).w, (yyvsp[-4].macfunc).P,
2972 1.1 christos IS_H ((yyvsp[-4].macfunc).s0), IS_H ((yyvsp[-4].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
2973 1.1 christos dst, (yyvsp[-1].macfunc).op, &(yyvsp[-4].macfunc).s0, &(yyvsp[-4].macfunc).s1, (yyvsp[-1].macfunc).w);
2974 1.1 christos }
2975 1.1 christos #line 2976 "config/bfin-parse.c"
2976 1.1 christos break;
2977 1.1 christos
2978 1.1 christos case 11: /* asm_1: DISALGNEXCPT */
2979 1.1 christos #line 797 "./config/bfin-parse.y"
2980 1.1 christos {
2981 1.1 christos notethat ("dsp32alu: DISALGNEXCPT\n");
2982 1.1 christos (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
2983 1.1 christos }
2984 1.1 christos #line 2985 "config/bfin-parse.c"
2985 1.1 christos break;
2986 1.1 christos
2987 1.1 christos case 12: /* asm_1: REG ASSIGN LPAREN a_plusassign REG_A RPAREN */
2988 1.1 christos #line 802 "./config/bfin-parse.y"
2989 1.1 christos {
2990 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && !IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
2991 1.1 christos {
2992 1.1 christos notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
2993 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[-5].reg), ®7, ®7, 0, 0, 0);
2994 1.1 christos }
2995 1.1 christos else
2996 1.1 christos return yyerror ("Register mismatch");
2997 1.1 christos }
2998 1.1 christos #line 2999 "config/bfin-parse.c"
2999 1.1 christos break;
3000 1.1 christos
3001 1.1 christos case 13: /* asm_1: HALF_REG ASSIGN LPAREN a_plusassign REG_A RPAREN */
3002 1.1 christos #line 812 "./config/bfin-parse.y"
3003 1.1 christos {
3004 1.1 christos if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
3005 1.1 christos {
3006 1.1 christos notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
3007 1.1 christos (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), ®7, ®7, 0, 0, 1);
3008 1.1 christos }
3009 1.1 christos else
3010 1.1 christos return yyerror ("Register mismatch");
3011 1.1 christos }
3012 1.1 christos #line 3013 "config/bfin-parse.c"
3013 1.1 christos break;
3014 1.1 christos
3015 1.1 christos case 14: /* asm_1: A_ZERO_DOT_H ASSIGN HALF_REG */
3016 1.1 christos #line 822 "./config/bfin-parse.y"
3017 1.1 christos {
3018 1.1 christos notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
3019 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
3020 1.1 christos }
3021 1.1 christos #line 3022 "config/bfin-parse.c"
3022 1.1 christos break;
3023 1.1 christos
3024 1.1 christos case 15: /* asm_1: A_ONE_DOT_H ASSIGN HALF_REG */
3025 1.1 christos #line 827 "./config/bfin-parse.y"
3026 1.1 christos {
3027 1.1 christos notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
3028 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
3029 1.1 christos }
3030 1.1 christos #line 3031 "config/bfin-parse.c"
3031 1.1 christos break;
3032 1.1 christos
3033 1.1 christos case 16: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16P LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3034 1.1 christos #line 833 "./config/bfin-parse.y"
3035 1.1 christos {
3036 1.1 christos if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
3037 1.1 christos return yyerror ("Dregs expected");
3038 1.1 christos else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
3039 1.1 christos return yyerror ("Illegal dest register combination");
3040 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3041 1.1 christos return yyerror ("Bad dreg pair");
3042 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3043 1.1 christos return yyerror ("Bad dreg pair");
3044 1.1 christos else
3045 1.1 christos {
3046 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (aligndir)\n");
3047 1.1 christos (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
3048 1.1 christos }
3049 1.1 christos }
3050 1.1 christos #line 3051 "config/bfin-parse.c"
3051 1.1 christos break;
3052 1.1 christos
3053 1.1 christos case 17: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16M LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3054 1.1 christos #line 851 "./config/bfin-parse.y"
3055 1.1 christos {
3056 1.1 christos if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
3057 1.1 christos return yyerror ("Dregs expected");
3058 1.1 christos else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
3059 1.1 christos return yyerror ("Illegal dest register combination");
3060 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3061 1.1 christos return yyerror ("Bad dreg pair");
3062 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3063 1.1 christos return yyerror ("Bad dreg pair");
3064 1.1 christos else
3065 1.1 christos {
3066 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
3067 1.1 christos (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 1);
3068 1.1 christos }
3069 1.1 christos }
3070 1.1 christos #line 3071 "config/bfin-parse.c"
3071 1.1 christos break;
3072 1.1 christos
3073 1.1 christos case 18: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEUNPACK REG COLON expr aligndir */
3074 1.1 christos #line 868 "./config/bfin-parse.y"
3075 1.1 christos {
3076 1.1 christos if (!IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)))
3077 1.1 christos return yyerror ("Dregs expected");
3078 1.1 christos else if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
3079 1.1 christos return yyerror ("Illegal dest register combination");
3080 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
3081 1.1 christos return yyerror ("Bad dreg pair");
3082 1.1 christos else
3083 1.1 christos {
3084 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
3085 1.1 christos (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, (yyvsp[0].r0).r0, 0, 1);
3086 1.1 christos }
3087 1.1 christos }
3088 1.1 christos #line 3089 "config/bfin-parse.c"
3089 1.1 christos break;
3090 1.1 christos
3091 1.1 christos case 19: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN SEARCH REG LPAREN searchmod RPAREN */
3092 1.1 christos #line 882 "./config/bfin-parse.y"
3093 1.1 christos {
3094 1.1 christos if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
3095 1.1 christos return yyerror ("Illegal dest register combination");
3096 1.1 christos
3097 1.1 christos if (IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)))
3098 1.1 christos {
3099 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
3100 1.1 christos (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0, (yyvsp[-1].r0).r0);
3101 1.1 christos }
3102 1.1 christos else
3103 1.1 christos return yyerror ("Register mismatch");
3104 1.1 christos }
3105 1.1 christos #line 3106 "config/bfin-parse.c"
3106 1.1 christos break;
3107 1.1 christos
3108 1.1 christos case 20: /* asm_1: REG ASSIGN A_ONE_DOT_L PLUS A_ONE_DOT_H COMMA REG ASSIGN A_ZERO_DOT_L PLUS A_ZERO_DOT_H */
3109 1.1 christos #line 896 "./config/bfin-parse.y"
3110 1.1 christos {
3111 1.1 christos if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
3112 1.1 christos return yyerror ("Illegal dest register combination");
3113 1.1 christos
3114 1.1 christos if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-4].reg)))
3115 1.1 christos {
3116 1.1 christos notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h \n");
3117 1.1 christos (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[-10].reg), &(yyvsp[-4].reg), ®7, ®7, 0, 0, 1);
3118 1.1 christos }
3119 1.1 christos else
3120 1.1 christos return yyerror ("Register mismatch");
3121 1.1 christos }
3122 1.1 christos #line 3123 "config/bfin-parse.c"
3123 1.1 christos break;
3124 1.1 christos
3125 1.1 christos case 21: /* asm_1: REG ASSIGN REG_A PLUS REG_A COMMA REG ASSIGN REG_A MINUS REG_A amod1 */
3126 1.1 christos #line 911 "./config/bfin-parse.y"
3127 1.1 christos {
3128 1.1 christos if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
3129 1.1 christos return yyerror ("Resource conflict in dest reg");
3130 1.1 christos
3131 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3132 1.1 christos && IS_A1 ((yyvsp[-3].reg)) && !IS_A1 ((yyvsp[-1].reg)))
3133 1.1 christos {
3134 1.1 christos notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
3135 1.1 christos (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), ®7, ®7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 0);
3136 1.1 christos
3137 1.1 christos }
3138 1.1 christos else if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3139 1.1 christos && !IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3140 1.1 christos {
3141 1.1 christos notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
3142 1.1 christos (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), ®7, ®7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 1);
3143 1.1 christos }
3144 1.1 christos else
3145 1.1 christos return yyerror ("Register mismatch");
3146 1.1 christos }
3147 1.1 christos #line 3148 "config/bfin-parse.c"
3148 1.1 christos break;
3149 1.1 christos
3150 1.1 christos case 22: /* asm_1: REG ASSIGN REG plus_minus REG COMMA REG ASSIGN REG plus_minus REG amod1 */
3151 1.1 christos #line 933 "./config/bfin-parse.y"
3152 1.1 christos {
3153 1.1 christos if ((yyvsp[-8].r0).r0 == (yyvsp[-2].r0).r0)
3154 1.1 christos return yyerror ("Operators must differ");
3155 1.1 christos
3156 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg))
3157 1.1 christos && REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) && REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3158 1.1 christos {
3159 1.1 christos notethat ("dsp32alu: dregs = dregs + dregs,"
3160 1.1 christos "dregs = dregs - dregs (amod1)\n");
3161 1.1 christos (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 2);
3162 1.1 christos }
3163 1.1 christos else
3164 1.1 christos return yyerror ("Register mismatch");
3165 1.1 christos }
3166 1.1 christos #line 3167 "config/bfin-parse.c"
3167 1.1 christos break;
3168 1.1 christos
3169 1.1 christos case 23: /* asm_1: REG ASSIGN REG op_bar_op REG COMMA REG ASSIGN REG op_bar_op REG amod2 */
3170 1.1 christos #line 951 "./config/bfin-parse.y"
3171 1.1 christos {
3172 1.1 christos if (!REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) || !REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3173 1.1 christos return yyerror ("Differing source registers");
3174 1.1 christos
3175 1.1 christos if (!IS_DREG ((yyvsp[-11].reg)) || !IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)) || !IS_DREG ((yyvsp[-5].reg)))
3176 1.1 christos return yyerror ("Dregs expected");
3177 1.1 christos
3178 1.1 christos if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
3179 1.1 christos return yyerror ("Resource conflict in dest reg");
3180 1.1 christos
3181 1.1 christos if ((yyvsp[-8].r0).r0 == 1 && (yyvsp[-2].r0).r0 == 2)
3182 1.1 christos {
3183 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3184 1.1 christos (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3185 1.1 christos }
3186 1.1 christos else if ((yyvsp[-8].r0).r0 == 0 && (yyvsp[-2].r0).r0 == 3)
3187 1.1 christos {
3188 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3189 1.1 christos (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3190 1.1 christos }
3191 1.1 christos else
3192 1.1 christos return yyerror ("Bar operand mismatch");
3193 1.1 christos }
3194 1.1 christos #line 3195 "config/bfin-parse.c"
3195 1.1 christos break;
3196 1.1 christos
3197 1.1 christos case 24: /* asm_1: REG ASSIGN ABS REG vmod */
3198 1.1 christos #line 976 "./config/bfin-parse.y"
3199 1.1 christos {
3200 1.1 christos int op;
3201 1.1 christos
3202 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
3203 1.1 christos {
3204 1.1 christos if ((yyvsp[0].r0).r0)
3205 1.1 christos {
3206 1.1 christos notethat ("dsp32alu: dregs = ABS dregs (v)\n");
3207 1.1 christos op = 6;
3208 1.1 christos }
3209 1.1 christos else
3210 1.1 christos {
3211 1.1 christos /* Vector version of ABS. */
3212 1.1 christos notethat ("dsp32alu: dregs = ABS dregs\n");
3213 1.1 christos op = 7;
3214 1.1 christos }
3215 1.1 christos (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, 0, 0, 2);
3216 1.1 christos }
3217 1.1 christos else
3218 1.1 christos return yyerror ("Dregs expected");
3219 1.1 christos }
3220 1.1 christos #line 3221 "config/bfin-parse.c"
3221 1.1 christos break;
3222 1.1 christos
3223 1.1 christos case 25: /* asm_1: a_assign ABS REG_A */
3224 1.1 christos #line 998 "./config/bfin-parse.y"
3225 1.1 christos {
3226 1.1 christos notethat ("dsp32alu: Ax = ABS Ax\n");
3227 1.1 christos (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[-2].reg)), 0, 0, ®7, ®7, 0, 0, IS_A1 ((yyvsp[0].reg)));
3228 1.1 christos }
3229 1.1 christos #line 3230 "config/bfin-parse.c"
3230 1.1 christos break;
3231 1.1 christos
3232 1.1 christos case 26: /* asm_1: A_ZERO_DOT_L ASSIGN HALF_REG */
3233 1.1 christos #line 1003 "./config/bfin-parse.y"
3234 1.1 christos {
3235 1.1 christos if (IS_DREG_L ((yyvsp[0].reg)))
3236 1.1 christos {
3237 1.1 christos notethat ("dsp32alu: A0.l = reg_half\n");
3238 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
3239 1.1 christos }
3240 1.1 christos else
3241 1.1 christos return yyerror ("A0.l = Rx.l expected");
3242 1.1 christos }
3243 1.1 christos #line 3244 "config/bfin-parse.c"
3244 1.1 christos break;
3245 1.1 christos
3246 1.1 christos case 27: /* asm_1: A_ONE_DOT_L ASSIGN HALF_REG */
3247 1.1 christos #line 1013 "./config/bfin-parse.y"
3248 1.1 christos {
3249 1.1 christos if (IS_DREG_L ((yyvsp[0].reg)))
3250 1.1 christos {
3251 1.1 christos notethat ("dsp32alu: A1.l = reg_half\n");
3252 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
3253 1.1 christos }
3254 1.1 christos else
3255 1.1 christos return yyerror ("A1.l = Rx.l expected");
3256 1.1 christos }
3257 1.1 christos #line 3258 "config/bfin-parse.c"
3258 1.1 christos break;
3259 1.1 christos
3260 1.1 christos case 28: /* asm_1: REG ASSIGN c_align LPAREN REG COMMA REG RPAREN */
3261 1.1 christos #line 1024 "./config/bfin-parse.y"
3262 1.1 christos {
3263 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3264 1.1 christos {
3265 1.1 christos notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
3266 1.1 christos (yyval.instr) = DSP32SHIFT (13, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[-5].r0).r0, 0);
3267 1.1 christos }
3268 1.1 christos else
3269 1.1 christos return yyerror ("Dregs expected");
3270 1.1 christos }
3271 1.1 christos #line 3272 "config/bfin-parse.c"
3272 1.1 christos break;
3273 1.1 christos
3274 1.1 christos case 29: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN byteop_mod */
3275 1.1 christos #line 1035 "./config/bfin-parse.y"
3276 1.1 christos {
3277 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3278 1.1 christos return yyerror ("Dregs expected");
3279 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3280 1.1 christos return yyerror ("Bad dreg pair");
3281 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3282 1.1 christos return yyerror ("Bad dreg pair");
3283 1.1 christos else
3284 1.1 christos {
3285 1.1 christos notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3286 1.1 christos (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).r0);
3287 1.1 christos }
3288 1.1 christos }
3289 1.1 christos #line 3290 "config/bfin-parse.c"
3290 1.1 christos break;
3291 1.1 christos
3292 1.1 christos case 30: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN */
3293 1.1 christos #line 1049 "./config/bfin-parse.y"
3294 1.1 christos {
3295 1.1 christos if (!IS_DREG ((yyvsp[-11].reg)))
3296 1.1 christos return yyerror ("Dregs expected");
3297 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-7].reg), (yyvsp[-5].expr)))
3298 1.1 christos return yyerror ("Bad dreg pair");
3299 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
3300 1.1 christos return yyerror ("Bad dreg pair");
3301 1.1 christos else
3302 1.1 christos {
3303 1.1 christos notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3304 1.1 christos (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-11].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0);
3305 1.1 christos }
3306 1.1 christos }
3307 1.1 christos #line 3308 "config/bfin-parse.c"
3308 1.1 christos break;
3309 1.1 christos
3310 1.1 christos case 31: /* asm_1: REG ASSIGN BYTEOP2P LPAREN REG COLON expr COMMA REG COLON expr RPAREN rnd_op */
3311 1.1 christos #line 1065 "./config/bfin-parse.y"
3312 1.1 christos {
3313 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3314 1.1 christos return yyerror ("Dregs expected");
3315 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3316 1.1 christos return yyerror ("Bad dreg pair");
3317 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3318 1.1 christos return yyerror ("Bad dreg pair");
3319 1.1 christos else
3320 1.1 christos {
3321 1.1 christos notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
3322 1.1 christos (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).aop);
3323 1.1 christos }
3324 1.1 christos }
3325 1.1 christos #line 3326 "config/bfin-parse.c"
3326 1.1 christos break;
3327 1.1 christos
3328 1.1 christos case 32: /* asm_1: REG ASSIGN BYTEOP3P LPAREN REG COLON expr COMMA REG COLON expr RPAREN b3_op */
3329 1.1 christos #line 1081 "./config/bfin-parse.y"
3330 1.1 christos {
3331 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3332 1.1 christos return yyerror ("Dregs expected");
3333 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3334 1.1 christos return yyerror ("Bad dreg pair");
3335 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3336 1.1 christos return yyerror ("Bad dreg pair");
3337 1.1 christos else
3338 1.1 christos {
3339 1.1 christos notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
3340 1.1 christos (yyval.instr) = DSP32ALU (23, (yyvsp[0].modcodes).x0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, 0);
3341 1.1 christos }
3342 1.1 christos }
3343 1.1 christos #line 3344 "config/bfin-parse.c"
3344 1.1 christos break;
3345 1.1 christos
3346 1.1 christos case 33: /* asm_1: REG ASSIGN BYTEPACK LPAREN REG COMMA REG RPAREN */
3347 1.1 christos #line 1096 "./config/bfin-parse.y"
3348 1.1 christos {
3349 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3350 1.1 christos {
3351 1.1 christos notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
3352 1.1 christos (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[-7].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 0, 0, 0);
3353 1.1 christos }
3354 1.1 christos else
3355 1.1 christos return yyerror ("Dregs expected");
3356 1.1 christos }
3357 1.1 christos #line 3358 "config/bfin-parse.c"
3358 1.1 christos break;
3359 1.1 christos
3360 1.1 christos case 34: /* asm_1: HALF_REG ASSIGN HALF_REG ASSIGN SIGN LPAREN HALF_REG RPAREN STAR HALF_REG PLUS SIGN LPAREN HALF_REG RPAREN STAR HALF_REG */
3361 1.1 christos #line 1108 "./config/bfin-parse.y"
3362 1.1 christos {
3363 1.1 christos if (IS_HCOMPL ((yyvsp[-16].reg), (yyvsp[-14].reg)) && IS_HCOMPL ((yyvsp[-10].reg), (yyvsp[-3].reg)) && IS_HCOMPL ((yyvsp[-7].reg), (yyvsp[0].reg)))
3364 1.1 christos {
3365 1.1 christos notethat ("dsp32alu: dregs_hi = dregs_lo ="
3366 1.1 christos "SIGN (dregs_hi) * dregs_hi + "
3367 1.1 christos "SIGN (dregs_lo) * dregs_lo \n");
3368 1.1 christos
3369 1.1 christos (yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[-16].reg), &(yyvsp[-10].reg), &(yyvsp[-7].reg), 0, 0, 0);
3370 1.1 christos }
3371 1.1 christos else
3372 1.1 christos return yyerror ("Dregs expected");
3373 1.1 christos }
3374 1.1 christos #line 3375 "config/bfin-parse.c"
3375 1.1 christos break;
3376 1.1 christos
3377 1.1 christos case 35: /* asm_1: REG ASSIGN REG plus_minus REG amod1 */
3378 1.1 christos #line 1121 "./config/bfin-parse.y"
3379 1.1 christos {
3380 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3381 1.1 christos {
3382 1.1 christos if ((yyvsp[0].modcodes).aop == 0)
3383 1.1 christos {
3384 1.1 christos /* No saturation flag specified, generate the 16 bit variant. */
3385 1.1 christos notethat ("COMP3op: dregs = dregs +- dregs\n");
3386 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[-2].r0).r0);
3387 1.1 christos }
3388 1.1 christos else
3389 1.1 christos {
3390 1.1 christos /* Saturation flag specified, generate the 32 bit variant. */
3391 1.1 christos notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
3392 1.1 christos (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3393 1.1 christos }
3394 1.1 christos }
3395 1.1 christos else
3396 1.1 christos if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)) && (yyvsp[-2].r0).r0 == 0)
3397 1.1 christos {
3398 1.1 christos notethat ("COMP3op: pregs = pregs + pregs\n");
3399 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 5);
3400 1.1 christos }
3401 1.1 christos else
3402 1.1 christos return yyerror ("Dregs expected");
3403 1.1 christos }
3404 1.1 christos #line 3405 "config/bfin-parse.c"
3405 1.1 christos break;
3406 1.1 christos
3407 1.1 christos case 36: /* asm_1: REG ASSIGN min_max LPAREN REG COMMA REG RPAREN vmod */
3408 1.1 christos #line 1147 "./config/bfin-parse.y"
3409 1.1 christos {
3410 1.1 christos int op;
3411 1.1 christos
3412 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
3413 1.1 christos {
3414 1.1 christos if ((yyvsp[0].r0).r0)
3415 1.1 christos op = 6;
3416 1.1 christos else
3417 1.1 christos op = 7;
3418 1.1 christos
3419 1.1 christos notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
3420 1.1 christos (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), &(yyvsp[-2].reg), 0, 0, (yyvsp[-6].r0).r0);
3421 1.1 christos }
3422 1.1 christos else
3423 1.1 christos return yyerror ("Dregs expected");
3424 1.1 christos }
3425 1.1 christos #line 3426 "config/bfin-parse.c"
3426 1.1 christos break;
3427 1.1 christos
3428 1.1 christos case 37: /* asm_1: a_assign MINUS REG_A */
3429 1.1 christos #line 1165 "./config/bfin-parse.y"
3430 1.1 christos {
3431 1.1 christos notethat ("dsp32alu: Ax = - Ax\n");
3432 1.1 christos (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[-2].reg)), 0, 0, ®7, ®7, 0, 0, IS_A1 ((yyvsp[0].reg)));
3433 1.1 christos }
3434 1.1 christos #line 3435 "config/bfin-parse.c"
3435 1.1 christos break;
3436 1.1 christos
3437 1.1 christos case 38: /* asm_1: HALF_REG ASSIGN HALF_REG plus_minus HALF_REG amod1 */
3438 1.1 christos #line 1170 "./config/bfin-parse.y"
3439 1.1 christos {
3440 1.1 christos notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
3441 1.1 christos (yyval.instr) = DSP32ALU (2 | (yyvsp[-2].r0).r0, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg),
3442 1.1 christos (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)));
3443 1.1 christos }
3444 1.1 christos #line 3445 "config/bfin-parse.c"
3445 1.1 christos break;
3446 1.1 christos
3447 1.1 christos case 39: /* asm_1: a_assign a_assign expr */
3448 1.1 christos #line 1176 "./config/bfin-parse.y"
3449 1.1 christos {
3450 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 0 && !REG_SAME ((yyvsp[-2].reg), (yyvsp[-1].reg)))
3451 1.1 christos {
3452 1.1 christos notethat ("dsp32alu: A1 = A0 = 0\n");
3453 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 0, 0, 2);
3454 1.1 christos }
3455 1.1 christos else
3456 1.1 christos return yyerror ("Bad value, 0 expected");
3457 1.1 christos }
3458 1.1 christos #line 3459 "config/bfin-parse.c"
3459 1.1 christos break;
3460 1.1 christos
3461 1.1 christos case 40: /* asm_1: a_assign REG_A LPAREN S RPAREN */
3462 1.1 christos #line 1188 "./config/bfin-parse.y"
3463 1.1 christos {
3464 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)))
3465 1.1 christos {
3466 1.1 christos notethat ("dsp32alu: Ax = Ax (S)\n");
3467 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 1, 0, IS_A1 ((yyvsp[-4].reg)));
3468 1.1 christos }
3469 1.1 christos else
3470 1.1 christos return yyerror ("Registers must be equal");
3471 1.1 christos }
3472 1.1 christos #line 3473 "config/bfin-parse.c"
3473 1.1 christos break;
3474 1.1 christos
3475 1.1 christos case 41: /* asm_1: HALF_REG ASSIGN REG LPAREN RND RPAREN */
3476 1.1 christos #line 1199 "./config/bfin-parse.y"
3477 1.1 christos {
3478 1.1 christos if (IS_DREG ((yyvsp[-3].reg)))
3479 1.1 christos {
3480 1.1 christos notethat ("dsp32alu: dregs_half = dregs (RND)\n");
3481 1.1 christos (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, 0, 3);
3482 1.1 christos }
3483 1.1 christos else
3484 1.1 christos return yyerror ("Dregs expected");
3485 1.1 christos }
3486 1.1 christos #line 3487 "config/bfin-parse.c"
3487 1.1 christos break;
3488 1.1 christos
3489 1.1 christos case 42: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND12 RPAREN */
3490 1.1 christos #line 1210 "./config/bfin-parse.y"
3491 1.1 christos {
3492 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3493 1.1 christos {
3494 1.1 christos notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
3495 1.1 christos (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, (yyvsp[-4].r0).r0);
3496 1.1 christos }
3497 1.1 christos else
3498 1.1 christos return yyerror ("Dregs expected");
3499 1.1 christos }
3500 1.1 christos #line 3501 "config/bfin-parse.c"
3501 1.1 christos break;
3502 1.1 christos
3503 1.1 christos case 43: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND20 RPAREN */
3504 1.1 christos #line 1221 "./config/bfin-parse.y"
3505 1.1 christos {
3506 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3507 1.1 christos {
3508 1.1 christos notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
3509 1.1 christos (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1, (yyvsp[-4].r0).r0 | 2);
3510 1.1 christos }
3511 1.1 christos else
3512 1.1 christos return yyerror ("Dregs expected");
3513 1.1 christos }
3514 1.1 christos #line 3515 "config/bfin-parse.c"
3515 1.1 christos break;
3516 1.1 christos
3517 1.1 christos case 44: /* asm_1: a_assign REG_A */
3518 1.1 christos #line 1232 "./config/bfin-parse.y"
3519 1.1 christos {
3520 1.1 christos if (!REG_SAME ((yyvsp[-1].reg), (yyvsp[0].reg)))
3521 1.1 christos {
3522 1.1 christos notethat ("dsp32alu: An = Am\n");
3523 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, IS_A1 ((yyvsp[-1].reg)), 0, 3);
3524 1.1 christos }
3525 1.1 christos else
3526 1.1 christos return yyerror ("Accu reg arguments must differ");
3527 1.1 christos }
3528 1.1 christos #line 3529 "config/bfin-parse.c"
3529 1.1 christos break;
3530 1.1 christos
3531 1.1 christos case 45: /* asm_1: a_assign REG */
3532 1.1 christos #line 1243 "./config/bfin-parse.y"
3533 1.1 christos {
3534 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
3535 1.1 christos {
3536 1.1 christos notethat ("dsp32alu: An = dregs\n");
3537 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[0].reg), 0, 1, 0, IS_A1 ((yyvsp[-1].reg)) << 1);
3538 1.1 christos }
3539 1.1 christos else
3540 1.1 christos return yyerror ("Dregs expected");
3541 1.1 christos }
3542 1.1 christos #line 3543 "config/bfin-parse.c"
3543 1.1 christos break;
3544 1.1 christos
3545 1.1 christos case 46: /* asm_1: REG ASSIGN HALF_REG xpmod */
3546 1.1 christos #line 1254 "./config/bfin-parse.y"
3547 1.1 christos {
3548 1.1 christos if (!IS_H ((yyvsp[-1].reg)))
3549 1.1 christos {
3550 1.1 christos if ((yyvsp[-3].reg).regno == REG_A0x && IS_DREG ((yyvsp[-1].reg)))
3551 1.1 christos {
3552 1.1 christos notethat ("dsp32alu: A0.x = dregs_lo\n");
3553 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 1);
3554 1.1 christos }
3555 1.1 christos else if ((yyvsp[-3].reg).regno == REG_A1x && IS_DREG ((yyvsp[-1].reg)))
3556 1.1 christos {
3557 1.1 christos notethat ("dsp32alu: A1.x = dregs_lo\n");
3558 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 3);
3559 1.1 christos }
3560 1.1 christos else if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3561 1.1 christos {
3562 1.1 christos notethat ("ALU2op: dregs = dregs_lo\n");
3563 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 10 | ((yyvsp[0].r0).r0 ? 0: 1));
3564 1.1 christos }
3565 1.1 christos else
3566 1.1 christos return yyerror ("Register mismatch");
3567 1.1 christos }
3568 1.1 christos else
3569 1.1 christos return yyerror ("Low reg expected");
3570 1.1 christos }
3571 1.1 christos #line 3572 "config/bfin-parse.c"
3572 1.1 christos break;
3573 1.1 christos
3574 1.1 christos case 47: /* asm_1: HALF_REG ASSIGN expr */
3575 1.1 christos #line 1280 "./config/bfin-parse.y"
3576 1.1 christos {
3577 1.1 christos notethat ("LDIMMhalf: pregs_half = imm16\n");
3578 1.1 christos
3579 1.1 christos if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)) && !IS_IREG ((yyvsp[-2].reg))
3580 1.1 christos && !IS_MREG ((yyvsp[-2].reg)) && !IS_BREG ((yyvsp[-2].reg)) && !IS_LREG ((yyvsp[-2].reg)))
3581 1.1 christos return yyerror ("Wrong register for load immediate");
3582 1.1 christos
3583 1.1 christos if (!IS_IMM ((yyvsp[0].expr), 16) && !IS_UIMM ((yyvsp[0].expr), 16))
3584 1.1 christos return yyerror ("Constant out of range");
3585 1.1 christos
3586 1.1 christos (yyval.instr) = LDIMMHALF_R (&(yyvsp[-2].reg), IS_H ((yyvsp[-2].reg)), 0, 0, (yyvsp[0].expr));
3587 1.1 christos }
3588 1.1 christos #line 3589 "config/bfin-parse.c"
3589 1.1 christos break;
3590 1.1 christos
3591 1.1 christos case 48: /* asm_1: a_assign expr */
3592 1.1 christos #line 1294 "./config/bfin-parse.y"
3593 1.1 christos {
3594 1.1 christos notethat ("dsp32alu: An = 0\n");
3595 1.1 christos
3596 1.1 christos if (imm7 ((yyvsp[0].expr)) != 0)
3597 1.1 christos return yyerror ("0 expected");
3598 1.1 christos
3599 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)));
3600 1.1 christos }
3601 1.1 christos #line 3602 "config/bfin-parse.c"
3602 1.1 christos break;
3603 1.1 christos
3604 1.1 christos case 49: /* asm_1: REG ASSIGN expr xpmod1 */
3605 1.1 christos #line 1304 "./config/bfin-parse.y"
3606 1.1 christos {
3607 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)) && !IS_IREG ((yyvsp[-3].reg))
3608 1.1 christos && !IS_MREG ((yyvsp[-3].reg)) && !IS_BREG ((yyvsp[-3].reg)) && !IS_LREG ((yyvsp[-3].reg)))
3609 1.1 christos return yyerror ("Wrong register for load immediate");
3610 1.1 christos
3611 1.1 christos if ((yyvsp[0].r0).r0 == 0)
3612 1.1 christos {
3613 1.1 christos /* 7 bit immediate value if possible.
3614 1.1 christos We will check for that constant value for efficiency
3615 1.1 christos If it goes to reloc, it will be 16 bit. */
3616 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_DREG ((yyvsp[-3].reg)))
3617 1.1 christos {
3618 1.1 christos notethat ("COMPI2opD: dregs = imm7 (x) \n");
3619 1.1 christos (yyval.instr) = COMPI2OPD (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3620 1.1 christos }
3621 1.1 christos else if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_PREG ((yyvsp[-3].reg)))
3622 1.1 christos {
3623 1.1 christos notethat ("COMPI2opP: pregs = imm7 (x)\n");
3624 1.1 christos (yyval.instr) = COMPI2OPP (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3625 1.1 christos }
3626 1.1 christos else
3627 1.1 christos {
3628 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && !IS_IMM ((yyvsp[-1].expr), 16))
3629 1.1 christos return yyerror ("Immediate value out of range");
3630 1.1 christos
3631 1.1 christos notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3632 1.1 christos /* reg, H, S, Z. */
3633 1.1 christos (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 1, 0, (yyvsp[-1].expr));
3634 1.1 christos }
3635 1.1 christos }
3636 1.1 christos else
3637 1.1 christos {
3638 1.1 christos /* (z) There is no 7 bit zero extended instruction.
3639 1.1 christos If the expr is a relocation, generate it. */
3640 1.1 christos
3641 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && !IS_UIMM ((yyvsp[-1].expr), 16))
3642 1.1 christos return yyerror ("Immediate value out of range");
3643 1.1 christos
3644 1.1 christos notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3645 1.1 christos /* reg, H, S, Z. */
3646 1.1 christos (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 0, 1, (yyvsp[-1].expr));
3647 1.1 christos }
3648 1.1 christos }
3649 1.1 christos #line 3650 "config/bfin-parse.c"
3650 1.1 christos break;
3651 1.1 christos
3652 1.1 christos case 50: /* asm_1: HALF_REG ASSIGN REG */
3653 1.1 christos #line 1349 "./config/bfin-parse.y"
3654 1.1 christos {
3655 1.1 christos if (IS_H ((yyvsp[-2].reg)))
3656 1.1 christos return yyerror ("Low reg expected");
3657 1.1 christos
3658 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A0x)
3659 1.1 christos {
3660 1.1 christos notethat ("dsp32alu: dregs_lo = A0.x\n");
3661 1.1 christos (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), ®7, ®7, 0, 0, 0);
3662 1.1 christos }
3663 1.1 christos else if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A1x)
3664 1.1 christos {
3665 1.1 christos notethat ("dsp32alu: dregs_lo = A1.x\n");
3666 1.1 christos (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), ®7, ®7, 0, 0, 1);
3667 1.1 christos }
3668 1.1 christos else
3669 1.1 christos return yyerror ("Register mismatch");
3670 1.1 christos }
3671 1.1 christos #line 3672 "config/bfin-parse.c"
3672 1.1 christos break;
3673 1.1 christos
3674 1.1 christos case 51: /* asm_1: REG ASSIGN REG op_bar_op REG amod0 */
3675 1.1 christos #line 1368 "./config/bfin-parse.y"
3676 1.1 christos {
3677 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3678 1.1 christos {
3679 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
3680 1.1 christos (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3681 1.1 christos }
3682 1.1 christos else
3683 1.1 christos return yyerror ("Register mismatch");
3684 1.1 christos }
3685 1.1 christos #line 3686 "config/bfin-parse.c"
3686 1.1 christos break;
3687 1.1 christos
3688 1.1 christos case 52: /* asm_1: REG ASSIGN BYTE_DREG xpmod */
3689 1.1 christos #line 1379 "./config/bfin-parse.y"
3690 1.1 christos {
3691 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3692 1.1 christos {
3693 1.1 christos notethat ("ALU2op: dregs = dregs_byte\n");
3694 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 12 | ((yyvsp[0].r0).r0 ? 0: 1));
3695 1.1 christos }
3696 1.1 christos else
3697 1.1 christos return yyerror ("Register mismatch");
3698 1.1 christos }
3699 1.1 christos #line 3700 "config/bfin-parse.c"
3700 1.1 christos break;
3701 1.1 christos
3702 1.1 christos case 53: /* asm_1: a_assign ABS REG_A COMMA a_assign ABS REG_A */
3703 1.1 christos #line 1390 "./config/bfin-parse.y"
3704 1.1 christos {
3705 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3706 1.1 christos {
3707 1.1 christos notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
3708 1.1 christos (yyval.instr) = DSP32ALU (16, 0, 0, 0, ®7, ®7, 0, 0, 3);
3709 1.1 christos }
3710 1.1 christos else
3711 1.1 christos return yyerror ("Register mismatch");
3712 1.1 christos }
3713 1.1 christos #line 3714 "config/bfin-parse.c"
3714 1.1 christos break;
3715 1.1 christos
3716 1.1 christos case 54: /* asm_1: a_assign MINUS REG_A COMMA a_assign MINUS REG_A */
3717 1.1 christos #line 1401 "./config/bfin-parse.y"
3718 1.1 christos {
3719 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3720 1.1 christos {
3721 1.1 christos notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
3722 1.1 christos (yyval.instr) = DSP32ALU (14, 0, 0, 0, ®7, ®7, 0, 0, 3);
3723 1.1 christos }
3724 1.1 christos else
3725 1.1 christos return yyerror ("Register mismatch");
3726 1.1 christos }
3727 1.1 christos #line 3728 "config/bfin-parse.c"
3728 1.1 christos break;
3729 1.1 christos
3730 1.1 christos case 55: /* asm_1: a_minusassign REG_A w32_or_nothing */
3731 1.1 christos #line 1412 "./config/bfin-parse.y"
3732 1.1 christos {
3733 1.1 christos if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
3734 1.1 christos {
3735 1.1 christos notethat ("dsp32alu: A0 -= A1\n");
3736 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, 0, ®7, ®7, (yyvsp[0].r0).r0, 0, 3);
3737 1.1 christos }
3738 1.1 christos else
3739 1.1 christos return yyerror ("Register mismatch");
3740 1.1 christos }
3741 1.1 christos #line 3742 "config/bfin-parse.c"
3742 1.1 christos break;
3743 1.1 christos
3744 1.1 christos case 56: /* asm_1: REG _MINUS_ASSIGN expr */
3745 1.1 christos #line 1423 "./config/bfin-parse.y"
3746 1.1 christos {
3747 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 4)
3748 1.1 christos {
3749 1.1 christos notethat ("dagMODik: iregs -= 4\n");
3750 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 3);
3751 1.1 christos }
3752 1.1 christos else if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 2)
3753 1.1 christos {
3754 1.1 christos notethat ("dagMODik: iregs -= 2\n");
3755 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 1);
3756 1.1 christos }
3757 1.1 christos else
3758 1.1 christos return yyerror ("Register or value mismatch");
3759 1.1 christos }
3760 1.1 christos #line 3761 "config/bfin-parse.c"
3761 1.1 christos break;
3762 1.1 christos
3763 1.1 christos case 57: /* asm_1: REG _PLUS_ASSIGN REG LPAREN BREV RPAREN */
3764 1.1 christos #line 1439 "./config/bfin-parse.y"
3765 1.1 christos {
3766 1.1 christos if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
3767 1.1 christos {
3768 1.1 christos notethat ("dagMODim: iregs += mregs (opt_brev)\n");
3769 1.1 christos /* i, m, op, br. */
3770 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1);
3771 1.1 christos }
3772 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
3773 1.1 christos {
3774 1.1 christos notethat ("PTR2op: pregs += pregs (BREV )\n");
3775 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 5);
3776 1.1 christos }
3777 1.1 christos else
3778 1.1 christos return yyerror ("Register mismatch");
3779 1.1 christos }
3780 1.1 christos #line 3781 "config/bfin-parse.c"
3781 1.1 christos break;
3782 1.1 christos
3783 1.1 christos case 58: /* asm_1: REG _MINUS_ASSIGN REG */
3784 1.1 christos #line 1456 "./config/bfin-parse.y"
3785 1.1 christos {
3786 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3787 1.1 christos {
3788 1.1 christos notethat ("dagMODim: iregs -= mregs\n");
3789 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1, 0);
3790 1.1 christos }
3791 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg)))
3792 1.1 christos {
3793 1.1 christos notethat ("PTR2op: pregs -= pregs\n");
3794 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
3795 1.1 christos }
3796 1.1 christos else
3797 1.1 christos return yyerror ("Register mismatch");
3798 1.1 christos }
3799 1.1 christos #line 3800 "config/bfin-parse.c"
3800 1.1 christos break;
3801 1.1 christos
3802 1.1 christos case 59: /* asm_1: REG_A _PLUS_ASSIGN REG_A w32_or_nothing */
3803 1.1 christos #line 1472 "./config/bfin-parse.y"
3804 1.1 christos {
3805 1.1 christos if (!IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3806 1.1 christos {
3807 1.1 christos notethat ("dsp32alu: A0 += A1 (W32)\n");
3808 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, 0, ®7, ®7, (yyvsp[0].r0).r0, 0, 2);
3809 1.1 christos }
3810 1.1 christos else
3811 1.1 christos return yyerror ("Register mismatch");
3812 1.1 christos }
3813 1.1 christos #line 3814 "config/bfin-parse.c"
3814 1.1 christos break;
3815 1.1 christos
3816 1.1 christos case 60: /* asm_1: REG _PLUS_ASSIGN REG */
3817 1.1 christos #line 1483 "./config/bfin-parse.y"
3818 1.1 christos {
3819 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3820 1.1 christos {
3821 1.1 christos notethat ("dagMODim: iregs += mregs\n");
3822 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0, 0);
3823 1.1 christos }
3824 1.1 christos else
3825 1.1 christos return yyerror ("iregs += mregs expected");
3826 1.1 christos }
3827 1.1 christos #line 3828 "config/bfin-parse.c"
3828 1.1 christos break;
3829 1.1 christos
3830 1.1 christos case 61: /* asm_1: REG _PLUS_ASSIGN expr */
3831 1.1 christos #line 1494 "./config/bfin-parse.y"
3832 1.1 christos {
3833 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
3834 1.1 christos {
3835 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 4)
3836 1.1 christos {
3837 1.1 christos notethat ("dagMODik: iregs += 4\n");
3838 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 2);
3839 1.1 christos }
3840 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3841 1.1 christos {
3842 1.1 christos notethat ("dagMODik: iregs += 2\n");
3843 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 0);
3844 1.1 christos }
3845 1.1 christos else
3846 1.1 christos return yyerror ("iregs += [ 2 | 4 ");
3847 1.1 christos }
3848 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3849 1.1 christos {
3850 1.1 christos notethat ("COMPI2opP: pregs += imm7\n");
3851 1.1 christos (yyval.instr) = COMPI2OPP (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3852 1.1 christos }
3853 1.1 christos else if (IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3854 1.1 christos {
3855 1.1 christos notethat ("COMPI2opD: dregs += imm7\n");
3856 1.1 christos (yyval.instr) = COMPI2OPD (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3857 1.1 christos }
3858 1.1 christos else if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))) && IS_CONST ((yyvsp[0].expr)))
3859 1.1 christos return yyerror ("Immediate value out of range");
3860 1.1 christos else
3861 1.1 christos return yyerror ("Register mismatch");
3862 1.1 christos }
3863 1.1 christos #line 3864 "config/bfin-parse.c"
3864 1.1 christos break;
3865 1.1 christos
3866 1.1 christos case 62: /* asm_1: REG _STAR_ASSIGN REG */
3867 1.1 christos #line 1527 "./config/bfin-parse.y"
3868 1.1 christos {
3869 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3870 1.1 christos {
3871 1.1 christos notethat ("ALU2op: dregs *= dregs\n");
3872 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3873 1.1 christos }
3874 1.1 christos else
3875 1.1 christos return yyerror ("Register mismatch");
3876 1.1 christos }
3877 1.1 christos #line 3878 "config/bfin-parse.c"
3878 1.1 christos break;
3879 1.1 christos
3880 1.1 christos case 63: /* asm_1: SAA LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3881 1.1 christos #line 1538 "./config/bfin-parse.y"
3882 1.1 christos {
3883 1.1 christos if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3884 1.1 christos return yyerror ("Bad dreg pair");
3885 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3886 1.1 christos return yyerror ("Bad dreg pair");
3887 1.1 christos else
3888 1.1 christos {
3889 1.1 christos notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
3890 1.1 christos (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
3891 1.1 christos }
3892 1.1 christos }
3893 1.1 christos #line 3894 "config/bfin-parse.c"
3894 1.1 christos break;
3895 1.1 christos
3896 1.1 christos case 64: /* asm_1: a_assign REG_A LPAREN S RPAREN COMMA a_assign REG_A LPAREN S RPAREN */
3897 1.1 christos #line 1551 "./config/bfin-parse.y"
3898 1.1 christos {
3899 1.1 christos if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-9].reg)) && REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)) && !REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
3900 1.1 christos {
3901 1.1 christos notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
3902 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 1, 0, 2);
3903 1.1 christos }
3904 1.1 christos else
3905 1.1 christos return yyerror ("Register mismatch");
3906 1.1 christos }
3907 1.1 christos #line 3908 "config/bfin-parse.c"
3908 1.1 christos break;
3909 1.1 christos
3910 1.1 christos case 65: /* asm_1: REG ASSIGN LPAREN REG PLUS REG RPAREN LESS_LESS expr */
3911 1.1 christos #line 1562 "./config/bfin-parse.y"
3912 1.1 christos {
3913 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg))
3914 1.1 christos && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3915 1.1 christos {
3916 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3917 1.1 christos {
3918 1.1 christos notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
3919 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 4);
3920 1.1 christos }
3921 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3922 1.1 christos {
3923 1.1 christos notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
3924 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 5);
3925 1.1 christos }
3926 1.1 christos else
3927 1.1 christos return yyerror ("Bad shift value");
3928 1.1 christos }
3929 1.1 christos else if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg))
3930 1.1 christos && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3931 1.1 christos {
3932 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3933 1.1 christos {
3934 1.1 christos notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
3935 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 6);
3936 1.1 christos }
3937 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3938 1.1 christos {
3939 1.1 christos notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
3940 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 7);
3941 1.1 christos }
3942 1.1 christos else
3943 1.1 christos return yyerror ("Bad shift value");
3944 1.1 christos }
3945 1.1 christos else
3946 1.1 christos return yyerror ("Register mismatch");
3947 1.1 christos }
3948 1.1 christos #line 3949 "config/bfin-parse.c"
3949 1.1 christos break;
3950 1.1 christos
3951 1.1 christos case 66: /* asm_1: REG ASSIGN REG BAR REG */
3952 1.1 christos #line 1601 "./config/bfin-parse.y"
3953 1.1 christos {
3954 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3955 1.1 christos {
3956 1.1 christos notethat ("COMP3op: dregs = dregs | dregs\n");
3957 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3958 1.1 christos }
3959 1.1 christos else
3960 1.1 christos return yyerror ("Dregs expected");
3961 1.1 christos }
3962 1.1 christos #line 3963 "config/bfin-parse.c"
3963 1.1 christos break;
3964 1.1 christos
3965 1.1 christos case 67: /* asm_1: REG ASSIGN REG CARET REG */
3966 1.1 christos #line 1611 "./config/bfin-parse.y"
3967 1.1 christos {
3968 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3969 1.1 christos {
3970 1.1 christos notethat ("COMP3op: dregs = dregs ^ dregs\n");
3971 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 4);
3972 1.1 christos }
3973 1.1 christos else
3974 1.1 christos return yyerror ("Dregs expected");
3975 1.1 christos }
3976 1.1 christos #line 3977 "config/bfin-parse.c"
3977 1.1 christos break;
3978 1.1 christos
3979 1.1 christos case 68: /* asm_1: REG ASSIGN REG PLUS LPAREN REG LESS_LESS expr RPAREN */
3980 1.1 christos #line 1621 "./config/bfin-parse.y"
3981 1.1 christos {
3982 1.1 christos if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)))
3983 1.1 christos {
3984 1.1 christos if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
3985 1.1 christos {
3986 1.1 christos notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
3987 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 6);
3988 1.1 christos }
3989 1.1 christos else if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
3990 1.1 christos {
3991 1.1 christos notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
3992 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 7);
3993 1.1 christos }
3994 1.1 christos else
3995 1.1 christos return yyerror ("Bad shift value");
3996 1.1 christos }
3997 1.1 christos else
3998 1.1 christos return yyerror ("Dregs expected");
3999 1.1 christos }
4000 1.1 christos #line 4001 "config/bfin-parse.c"
4001 1.1 christos break;
4002 1.1 christos
4003 1.1 christos case 69: /* asm_1: CCREG ASSIGN REG_A _ASSIGN_ASSIGN REG_A */
4004 1.1 christos #line 1641 "./config/bfin-parse.y"
4005 1.1 christos {
4006 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4007 1.1 christos {
4008 1.1 christos notethat ("CCflag: CC = A0 == A1\n");
4009 1.1 christos (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
4010 1.1 christos }
4011 1.1 christos else
4012 1.1 christos return yyerror ("AREGs are in bad order or same");
4013 1.1 christos }
4014 1.1 christos #line 4015 "config/bfin-parse.c"
4015 1.1 christos break;
4016 1.1 christos
4017 1.1 christos case 70: /* asm_1: CCREG ASSIGN REG_A LESS_THAN REG_A */
4018 1.1 christos #line 1651 "./config/bfin-parse.y"
4019 1.1 christos {
4020 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4021 1.1 christos {
4022 1.1 christos notethat ("CCflag: CC = A0 < A1\n");
4023 1.1 christos (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
4024 1.1 christos }
4025 1.1 christos else
4026 1.1 christos return yyerror ("AREGs are in bad order or same");
4027 1.1 christos }
4028 1.1 christos #line 4029 "config/bfin-parse.c"
4029 1.1 christos break;
4030 1.1 christos
4031 1.1 christos case 71: /* asm_1: CCREG ASSIGN REG LESS_THAN REG iu_or_nothing */
4032 1.1 christos #line 1661 "./config/bfin-parse.y"
4033 1.1 christos {
4034 1.1 christos if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4035 1.1 christos || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
4036 1.1 christos {
4037 1.1 christos notethat ("CCflag: CC = dpregs < dpregs\n");
4038 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4039 1.1 christos }
4040 1.1 christos else
4041 1.1 christos return yyerror ("Bad register in comparison");
4042 1.1 christos }
4043 1.1 christos #line 4044 "config/bfin-parse.c"
4044 1.1 christos break;
4045 1.1 christos
4046 1.1 christos case 72: /* asm_1: CCREG ASSIGN REG LESS_THAN expr iu_or_nothing */
4047 1.1 christos #line 1672 "./config/bfin-parse.y"
4048 1.1 christos {
4049 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
4050 1.1 christos return yyerror ("Bad register in comparison");
4051 1.1 christos
4052 1.1 christos if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
4053 1.1 christos || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
4054 1.1 christos {
4055 1.1 christos notethat ("CCflag: CC = dpregs < (u)imm3\n");
4056 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4057 1.1 christos }
4058 1.1 christos else
4059 1.1 christos return yyerror ("Bad constant value");
4060 1.1 christos }
4061 1.1 christos #line 4062 "config/bfin-parse.c"
4062 1.1 christos break;
4063 1.1 christos
4064 1.1 christos case 73: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN REG */
4065 1.1 christos #line 1686 "./config/bfin-parse.y"
4066 1.1 christos {
4067 1.1 christos if ((IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
4068 1.1 christos || (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg))))
4069 1.1 christos {
4070 1.1 christos notethat ("CCflag: CC = dpregs == dpregs\n");
4071 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), (yyvsp[0].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
4072 1.1 christos }
4073 1.1 christos else
4074 1.1 christos return yyerror ("Bad register in comparison");
4075 1.1 christos }
4076 1.1 christos #line 4077 "config/bfin-parse.c"
4077 1.1 christos break;
4078 1.1 christos
4079 1.1 christos case 74: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN expr */
4080 1.1 christos #line 1697 "./config/bfin-parse.y"
4081 1.1 christos {
4082 1.1 christos if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
4083 1.1 christos return yyerror ("Bad register in comparison");
4084 1.1 christos
4085 1.1 christos if (IS_IMM ((yyvsp[0].expr), 3))
4086 1.1 christos {
4087 1.1 christos notethat ("CCflag: CC = dpregs == imm3\n");
4088 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), imm3 ((yyvsp[0].expr)), 0, 1, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
4089 1.1 christos }
4090 1.1 christos else
4091 1.1 christos return yyerror ("Bad constant range");
4092 1.1 christos }
4093 1.1 christos #line 4094 "config/bfin-parse.c"
4094 1.1 christos break;
4095 1.1 christos
4096 1.1 christos case 75: /* asm_1: CCREG ASSIGN REG_A _LESS_THAN_ASSIGN REG_A */
4097 1.1 christos #line 1710 "./config/bfin-parse.y"
4098 1.1 christos {
4099 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4100 1.1 christos {
4101 1.1 christos notethat ("CCflag: CC = A0 <= A1\n");
4102 1.1 christos (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
4103 1.1 christos }
4104 1.1 christos else
4105 1.1 christos return yyerror ("AREGs are in bad order or same");
4106 1.1 christos }
4107 1.1 christos #line 4108 "config/bfin-parse.c"
4108 1.1 christos break;
4109 1.1 christos
4110 1.1 christos case 76: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN REG iu_or_nothing */
4111 1.1 christos #line 1720 "./config/bfin-parse.y"
4112 1.1 christos {
4113 1.1 christos if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4114 1.1 christos || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
4115 1.1 christos {
4116 1.1 christos notethat ("CCflag: CC = dpregs <= dpregs (..)\n");
4117 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK,
4118 1.1 christos 1 + (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4119 1.1 christos }
4120 1.1 christos else
4121 1.1 christos return yyerror ("Bad register in comparison");
4122 1.1 christos }
4123 1.1 christos #line 4124 "config/bfin-parse.c"
4124 1.1 christos break;
4125 1.1 christos
4126 1.1 christos case 77: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN expr iu_or_nothing */
4127 1.1 christos #line 1732 "./config/bfin-parse.y"
4128 1.1 christos {
4129 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
4130 1.1 christos return yyerror ("Bad register in comparison");
4131 1.1 christos
4132 1.1 christos if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
4133 1.1 christos || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
4134 1.1 christos {
4135 1.1 christos notethat ("CCflag: CC = dpregs <= (u)imm3\n");
4136 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4137 1.1 christos }
4138 1.1 christos else
4139 1.1 christos return yyerror ("Bad constant value");
4140 1.1 christos }
4141 1.1 christos #line 4142 "config/bfin-parse.c"
4142 1.1 christos break;
4143 1.1 christos
4144 1.1 christos case 78: /* asm_1: REG ASSIGN REG AMPERSAND REG */
4145 1.1 christos #line 1747 "./config/bfin-parse.y"
4146 1.1 christos {
4147 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
4148 1.1 christos {
4149 1.1 christos notethat ("COMP3op: dregs = dregs & dregs\n");
4150 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
4151 1.1 christos }
4152 1.1 christos else
4153 1.1 christos return yyerror ("Dregs expected");
4154 1.1 christos }
4155 1.1 christos #line 4156 "config/bfin-parse.c"
4156 1.1 christos break;
4157 1.1 christos
4158 1.1 christos case 79: /* asm_1: ccstat */
4159 1.1 christos #line 1758 "./config/bfin-parse.y"
4160 1.1 christos {
4161 1.1 christos notethat ("CC2stat operation\n");
4162 1.1 christos (yyval.instr) = bfin_gen_cc2stat ((yyvsp[0].modcodes).r0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).s0);
4163 1.1 christos }
4164 1.1 christos #line 4165 "config/bfin-parse.c"
4165 1.1 christos break;
4166 1.1 christos
4167 1.1 christos case 80: /* asm_1: REG ASSIGN REG */
4168 1.1 christos #line 1764 "./config/bfin-parse.y"
4169 1.1 christos {
4170 1.1 christos if ((IS_GENREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4171 1.1 christos || (IS_GENREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
4172 1.1 christos || (IS_DAGREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4173 1.1 christos || (IS_DAGREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
4174 1.1 christos || (IS_GENREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP)
4175 1.1 christos || ((yyvsp[-2].reg).regno == REG_USP && IS_GENREG ((yyvsp[0].reg)))
4176 1.1 christos || ((yyvsp[-2].reg).regno == REG_USP && (yyvsp[0].reg).regno == REG_USP)
4177 1.1 christos || (IS_DREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
4178 1.1 christos || (IS_PREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
4179 1.1 christos || (IS_SYSREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4180 1.1 christos || (IS_ALLREG ((yyvsp[-2].reg)) && IS_EMUDAT ((yyvsp[0].reg)))
4181 1.1 christos || (IS_EMUDAT ((yyvsp[-2].reg)) && IS_ALLREG ((yyvsp[0].reg)))
4182 1.1 christos || (IS_SYSREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP))
4183 1.1 christos {
4184 1.1 christos (yyval.instr) = bfin_gen_regmv (&(yyvsp[0].reg), &(yyvsp[-2].reg));
4185 1.1 christos }
4186 1.1 christos else
4187 1.1 christos return yyerror ("Unsupported register move");
4188 1.1 christos }
4189 1.1 christos #line 4190 "config/bfin-parse.c"
4190 1.1 christos break;
4191 1.1 christos
4192 1.1 christos case 81: /* asm_1: CCREG ASSIGN REG */
4193 1.1 christos #line 1786 "./config/bfin-parse.y"
4194 1.1 christos {
4195 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
4196 1.1 christos {
4197 1.1 christos notethat ("CC2dreg: CC = dregs\n");
4198 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[0].reg));
4199 1.1 christos }
4200 1.1 christos else
4201 1.1 christos return yyerror ("Only 'CC = Dreg' supported");
4202 1.1 christos }
4203 1.1 christos #line 4204 "config/bfin-parse.c"
4204 1.1 christos break;
4205 1.1 christos
4206 1.1 christos case 82: /* asm_1: REG ASSIGN CCREG */
4207 1.1 christos #line 1797 "./config/bfin-parse.y"
4208 1.1 christos {
4209 1.1 christos if (IS_DREG ((yyvsp[-2].reg)))
4210 1.1 christos {
4211 1.1 christos notethat ("CC2dreg: dregs = CC\n");
4212 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[-2].reg));
4213 1.1 christos }
4214 1.1 christos else
4215 1.1 christos return yyerror ("Only 'Dreg = CC' supported");
4216 1.1 christos }
4217 1.1 christos #line 4218 "config/bfin-parse.c"
4218 1.1 christos break;
4219 1.1 christos
4220 1.1 christos case 83: /* asm_1: CCREG _ASSIGN_BANG CCREG */
4221 1.1 christos #line 1808 "./config/bfin-parse.y"
4222 1.1 christos {
4223 1.1 christos notethat ("CC2dreg: CC =! CC\n");
4224 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (3, 0);
4225 1.1 christos }
4226 1.1 christos #line 4227 "config/bfin-parse.c"
4227 1.1 christos break;
4228 1.1 christos
4229 1.1 christos case 84: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode */
4230 1.1 christos #line 1816 "./config/bfin-parse.y"
4231 1.1 christos {
4232 1.1 christos notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
4233 1.1 christos
4234 1.1 christos if (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
4235 1.1 christos return yyerror ("(M) not allowed with MAC0");
4236 1.1 christos
4237 1.1 christos if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
4238 1.1 christos && (yyvsp[0].mod).mod != M_IU && (yyvsp[0].mod).mod != M_T && (yyvsp[0].mod).mod != M_TFU
4239 1.1 christos && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2 && (yyvsp[0].mod).mod != M_IH)
4240 1.1 christos return yyerror ("bad option.");
4241 1.1 christos
4242 1.1 christos if (IS_H ((yyvsp[-3].reg)))
4243 1.1 christos {
4244 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4245 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4246 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4247 1.1 christos }
4248 1.1 christos else
4249 1.1 christos {
4250 1.1 christos (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 0,
4251 1.1 christos 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4252 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4253 1.1 christos }
4254 1.1 christos }
4255 1.1 christos #line 4256 "config/bfin-parse.c"
4256 1.1 christos break;
4257 1.1 christos
4258 1.1 christos case 85: /* asm_1: REG ASSIGN multiply_halfregs opt_mode */
4259 1.1 christos #line 1842 "./config/bfin-parse.y"
4260 1.1 christos {
4261 1.1 christos /* Odd registers can use (M). */
4262 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)))
4263 1.1 christos return yyerror ("Dreg expected");
4264 1.1 christos
4265 1.1 christos if (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
4266 1.1 christos return yyerror ("(M) not allowed with MAC0");
4267 1.1 christos
4268 1.1 christos if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
4269 1.1 christos && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2)
4270 1.1 christos return yyerror ("bad option");
4271 1.1 christos
4272 1.1 christos if (!IS_EVEN ((yyvsp[-3].reg)))
4273 1.1 christos {
4274 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
4275 1.1 christos
4276 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4277 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4278 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4279 1.1 christos }
4280 1.1 christos else
4281 1.1 christos {
4282 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
4283 1.1 christos (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 1,
4284 1.1 christos 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4285 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4286 1.1 christos }
4287 1.1 christos }
4288 1.1 christos #line 4289 "config/bfin-parse.c"
4289 1.1 christos break;
4290 1.1 christos
4291 1.1 christos case 86: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode COMMA HALF_REG ASSIGN multiply_halfregs opt_mode */
4292 1.1 christos #line 1873 "./config/bfin-parse.y"
4293 1.1 christos {
4294 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4295 1.1 christos return yyerror ("Dregs expected");
4296 1.1 christos
4297 1.1 christos if (!IS_HCOMPL((yyvsp[-8].reg), (yyvsp[-3].reg)))
4298 1.1 christos return yyerror ("Dest registers mismatch");
4299 1.1 christos
4300 1.1 christos if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4301 1.1 christos return -1;
4302 1.1 christos
4303 1.1 christos if ((!IS_H ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
4304 1.1 christos || (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
4305 1.1 christos return yyerror ("(M) not allowed with MAC0");
4306 1.1 christos
4307 1.1 christos notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
4308 1.1 christos "dregs_lo = multiply_halfregs opt_mode\n");
4309 1.1 christos
4310 1.1 christos if (IS_H ((yyvsp[-8].reg)))
4311 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4312 1.1 christos IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4313 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4314 1.1 christos else
4315 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4316 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4317 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4318 1.1 christos }
4319 1.1 christos #line 4320 "config/bfin-parse.c"
4320 1.1 christos break;
4321 1.1 christos
4322 1.1 christos case 87: /* asm_1: REG ASSIGN multiply_halfregs opt_mode COMMA REG ASSIGN multiply_halfregs opt_mode */
4323 1.1 christos #line 1901 "./config/bfin-parse.y"
4324 1.1 christos {
4325 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4326 1.1 christos return yyerror ("Dregs expected");
4327 1.1 christos
4328 1.1 christos if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-3].reg).regno - (yyvsp[-8].reg).regno != 1)
4329 1.1 christos || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[-8].reg).regno - (yyvsp[-3].reg).regno != 1))
4330 1.1 christos return yyerror ("Dest registers mismatch");
4331 1.1 christos
4332 1.1 christos if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4333 1.1 christos return -1;
4334 1.1 christos
4335 1.1 christos if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
4336 1.1 christos || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
4337 1.1 christos return yyerror ("(M) not allowed with MAC0");
4338 1.1 christos
4339 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
4340 1.1 christos "dregs = multiply_halfregs opt_mode\n");
4341 1.1 christos
4342 1.1 christos if (IS_EVEN ((yyvsp[-8].reg)))
4343 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4344 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4345 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4346 1.1 christos else
4347 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4348 1.1 christos IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4349 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4350 1.1 christos }
4351 1.1 christos #line 4352 "config/bfin-parse.c"
4352 1.1 christos break;
4353 1.1 christos
4354 1.1 christos case 88: /* asm_1: a_assign ASHIFT REG_A BY HALF_REG */
4355 1.1 christos #line 1932 "./config/bfin-parse.y"
4356 1.1 christos {
4357 1.1 christos if (!REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)))
4358 1.1 christos return yyerror ("Aregs must be same");
4359 1.1 christos
4360 1.1 christos if (IS_DREG ((yyvsp[0].reg)) && !IS_H ((yyvsp[0].reg)))
4361 1.1 christos {
4362 1.1 christos notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
4363 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 0, IS_A1 ((yyvsp[-4].reg)));
4364 1.1 christos }
4365 1.1 christos else
4366 1.1 christos return yyerror ("Dregs expected");
4367 1.1 christos }
4368 1.1 christos #line 4369 "config/bfin-parse.c"
4369 1.1 christos break;
4370 1.1 christos
4371 1.1 christos case 89: /* asm_1: HALF_REG ASSIGN ASHIFT HALF_REG BY HALF_REG smod */
4372 1.1 christos #line 1946 "./config/bfin-parse.y"
4373 1.1 christos {
4374 1.1 christos if (IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4375 1.1 christos {
4376 1.1 christos notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
4377 1.1 christos (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-6].reg), (yyvsp[-3].reg)));
4378 1.1 christos }
4379 1.1 christos else
4380 1.1 christos return yyerror ("Dregs expected");
4381 1.1 christos }
4382 1.1 christos #line 4383 "config/bfin-parse.c"
4383 1.1 christos break;
4384 1.1 christos
4385 1.1 christos case 90: /* asm_1: a_assign REG_A LESS_LESS expr */
4386 1.1 christos #line 1957 "./config/bfin-parse.y"
4387 1.1 christos {
4388 1.1 christos if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4389 1.1 christos return yyerror ("Aregs must be same");
4390 1.1 christos
4391 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4392 1.1 christos {
4393 1.1 christos notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
4394 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4395 1.1 christos }
4396 1.1 christos else
4397 1.1 christos return yyerror ("Bad shift value");
4398 1.1 christos }
4399 1.1 christos #line 4400 "config/bfin-parse.c"
4400 1.1 christos break;
4401 1.1 christos
4402 1.1 christos case 91: /* asm_1: REG ASSIGN REG LESS_LESS expr vsmod */
4403 1.1 christos #line 1971 "./config/bfin-parse.y"
4404 1.1 christos {
4405 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4406 1.1 christos {
4407 1.1 christos if ((yyvsp[0].modcodes).r0)
4408 1.1 christos {
4409 1.1 christos /* Vector? */
4410 1.1 christos notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
4411 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), imm4 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4412 1.1 christos }
4413 1.1 christos else
4414 1.1 christos {
4415 1.1 christos notethat ("dsp32shiftimm: dregs = dregs << uimm5 (.)\n");
4416 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4417 1.1 christos }
4418 1.1 christos }
4419 1.1 christos else if ((yyvsp[0].modcodes).s0 == 0 && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
4420 1.1 christos {
4421 1.1 christos if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4422 1.1 christos {
4423 1.1 christos notethat ("PTR2op: pregs = pregs << 2\n");
4424 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 1);
4425 1.1 christos }
4426 1.1 christos else if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4427 1.1 christos {
4428 1.1 christos notethat ("COMP3op: pregs = pregs << 1\n");
4429 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-3].reg), 5);
4430 1.1 christos }
4431 1.1 christos else
4432 1.1 christos return yyerror ("Bad shift value");
4433 1.1 christos }
4434 1.1 christos else
4435 1.1 christos return yyerror ("Bad shift value or register");
4436 1.1 christos }
4437 1.1 christos #line 4438 "config/bfin-parse.c"
4438 1.1 christos break;
4439 1.1 christos
4440 1.1 christos case 92: /* asm_1: HALF_REG ASSIGN HALF_REG LESS_LESS expr smod */
4441 1.1 christos #line 2005 "./config/bfin-parse.y"
4442 1.1 christos {
4443 1.1 christos if (IS_UIMM ((yyvsp[-1].expr), 4))
4444 1.1 christos {
4445 1.1 christos if ((yyvsp[0].modcodes).s0)
4446 1.1 christos {
4447 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n");
4448 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4449 1.1 christos }
4450 1.1 christos else
4451 1.1 christos {
4452 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
4453 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4454 1.1 christos }
4455 1.1 christos }
4456 1.1 christos else
4457 1.1 christos return yyerror ("Bad shift value");
4458 1.1 christos }
4459 1.1 christos #line 4460 "config/bfin-parse.c"
4460 1.1 christos break;
4461 1.1 christos
4462 1.1 christos case 93: /* asm_1: REG ASSIGN ASHIFT REG BY HALF_REG vsmod */
4463 1.1 christos #line 2023 "./config/bfin-parse.y"
4464 1.1 christos {
4465 1.1 christos int op;
4466 1.1 christos
4467 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4468 1.1 christos {
4469 1.1 christos if ((yyvsp[0].modcodes).r0)
4470 1.1 christos {
4471 1.1 christos op = 1;
4472 1.1 christos notethat ("dsp32shift: dregs = ASHIFT dregs BY "
4473 1.1 christos "dregs_lo (V, .)\n");
4474 1.1 christos }
4475 1.1 christos else
4476 1.1 christos {
4477 1.1 christos
4478 1.1 christos op = 2;
4479 1.1 christos notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
4480 1.1 christos }
4481 1.1 christos (yyval.instr) = DSP32SHIFT (op, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4482 1.1 christos }
4483 1.1 christos else
4484 1.1 christos return yyerror ("Dregs expected");
4485 1.1 christos }
4486 1.1 christos #line 4487 "config/bfin-parse.c"
4487 1.1 christos break;
4488 1.1 christos
4489 1.1 christos case 94: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN REG COMMA HALF_REG RPAREN vmod */
4490 1.1 christos #line 2048 "./config/bfin-parse.y"
4491 1.1 christos {
4492 1.1 christos if (IS_DREG_L ((yyvsp[-8].reg)) && IS_DREG_L ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4493 1.1 christos {
4494 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
4495 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4496 1.1 christos }
4497 1.1 christos else
4498 1.1 christos return yyerror ("Bad shift value or register");
4499 1.1 christos }
4500 1.1 christos #line 4501 "config/bfin-parse.c"
4501 1.1 christos break;
4502 1.1 christos
4503 1.1 christos case 95: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN HALF_REG COMMA HALF_REG RPAREN */
4504 1.1 christos #line 2060 "./config/bfin-parse.y"
4505 1.1 christos {
4506 1.1 christos if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4507 1.1 christos {
4508 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
4509 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4510 1.1 christos }
4511 1.1 christos else if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_H ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4512 1.1 christos {
4513 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
4514 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 3, 0);
4515 1.1 christos }
4516 1.1 christos else
4517 1.1 christos return yyerror ("Bad shift value or register");
4518 1.1 christos }
4519 1.1 christos #line 4520 "config/bfin-parse.c"
4520 1.1 christos break;
4521 1.1 christos
4522 1.1 christos case 96: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN */
4523 1.1 christos #line 2078 "./config/bfin-parse.y"
4524 1.1 christos {
4525 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4526 1.1 christos {
4527 1.1 christos notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
4528 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4529 1.1 christos }
4530 1.1 christos else
4531 1.1 christos return yyerror ("Register mismatch");
4532 1.1 christos }
4533 1.1 christos #line 4534 "config/bfin-parse.c"
4534 1.1 christos break;
4535 1.1 christos
4536 1.1 christos case 97: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN LPAREN X RPAREN */
4537 1.1 christos #line 2089 "./config/bfin-parse.y"
4538 1.1 christos {
4539 1.1 christos if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)))
4540 1.1 christos {
4541 1.1 christos notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
4542 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &(yyvsp[-6].reg), 3, 0);
4543 1.1 christos }
4544 1.1 christos else
4545 1.1 christos return yyerror ("Register mismatch");
4546 1.1 christos }
4547 1.1 christos #line 4548 "config/bfin-parse.c"
4548 1.1 christos break;
4549 1.1 christos
4550 1.1 christos case 98: /* asm_1: REG ASSIGN EXTRACT LPAREN REG COMMA HALF_REG RPAREN xpmod */
4551 1.1 christos #line 2100 "./config/bfin-parse.y"
4552 1.1 christos {
4553 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4554 1.1 christos {
4555 1.1 christos notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
4556 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4557 1.1 christos }
4558 1.1 christos else
4559 1.1 christos return yyerror ("Register mismatch");
4560 1.1 christos }
4561 1.1 christos #line 4562 "config/bfin-parse.c"
4562 1.1 christos break;
4563 1.1 christos
4564 1.1 christos case 99: /* asm_1: a_assign REG_A _GREATER_GREATER_GREATER expr */
4565 1.1 christos #line 2111 "./config/bfin-parse.y"
4566 1.1 christos {
4567 1.1 christos if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4568 1.1 christos return yyerror ("Aregs must be same");
4569 1.1 christos
4570 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4571 1.1 christos {
4572 1.1 christos notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
4573 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4574 1.1 christos }
4575 1.1 christos else
4576 1.1 christos return yyerror ("Shift value range error");
4577 1.1 christos }
4578 1.1 christos #line 4579 "config/bfin-parse.c"
4579 1.1 christos break;
4580 1.1 christos
4581 1.1 christos case 100: /* asm_1: a_assign LSHIFT REG_A BY HALF_REG */
4582 1.1 christos #line 2124 "./config/bfin-parse.y"
4583 1.1 christos {
4584 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4585 1.1 christos {
4586 1.1 christos notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
4587 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 1, IS_A1 ((yyvsp[-4].reg)));
4588 1.1 christos }
4589 1.1 christos else
4590 1.1 christos return yyerror ("Register mismatch");
4591 1.1 christos }
4592 1.1 christos #line 4593 "config/bfin-parse.c"
4593 1.1 christos break;
4594 1.1 christos
4595 1.1 christos case 101: /* asm_1: HALF_REG ASSIGN LSHIFT HALF_REG BY HALF_REG */
4596 1.1 christos #line 2135 "./config/bfin-parse.y"
4597 1.1 christos {
4598 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4599 1.1 christos {
4600 1.1 christos notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
4601 1.1 christos (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-2].reg)));
4602 1.1 christos }
4603 1.1 christos else
4604 1.1 christos return yyerror ("Register mismatch");
4605 1.1 christos }
4606 1.1 christos #line 4607 "config/bfin-parse.c"
4607 1.1 christos break;
4608 1.1 christos
4609 1.1 christos case 102: /* asm_1: REG ASSIGN LSHIFT REG BY HALF_REG vmod */
4610 1.1 christos #line 2146 "./config/bfin-parse.y"
4611 1.1 christos {
4612 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4613 1.1 christos {
4614 1.1 christos notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
4615 1.1 christos (yyval.instr) = DSP32SHIFT ((yyvsp[0].r0).r0 ? 1: 2, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4616 1.1 christos }
4617 1.1 christos else
4618 1.1 christos return yyerror ("Register mismatch");
4619 1.1 christos }
4620 1.1 christos #line 4621 "config/bfin-parse.c"
4621 1.1 christos break;
4622 1.1 christos
4623 1.1 christos case 103: /* asm_1: REG ASSIGN SHIFT REG BY HALF_REG */
4624 1.1 christos #line 2157 "./config/bfin-parse.y"
4625 1.1 christos {
4626 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4627 1.1 christos {
4628 1.1 christos notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
4629 1.1 christos (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, 0);
4630 1.1 christos }
4631 1.1 christos else
4632 1.1 christos return yyerror ("Register mismatch");
4633 1.1 christos }
4634 1.1 christos #line 4635 "config/bfin-parse.c"
4635 1.1 christos break;
4636 1.1 christos
4637 1.1 christos case 104: /* asm_1: a_assign REG_A GREATER_GREATER expr */
4638 1.1 christos #line 2168 "./config/bfin-parse.y"
4639 1.1 christos {
4640 1.1 christos if (REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6) >= 0)
4641 1.1 christos {
4642 1.1 christos notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
4643 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 1, IS_A1 ((yyvsp[-3].reg)));
4644 1.1 christos }
4645 1.1 christos else
4646 1.1 christos return yyerror ("Accu register expected");
4647 1.1 christos }
4648 1.1 christos #line 4649 "config/bfin-parse.c"
4649 1.1 christos break;
4650 1.1 christos
4651 1.1 christos case 105: /* asm_1: REG ASSIGN REG GREATER_GREATER expr vmod */
4652 1.1 christos #line 2179 "./config/bfin-parse.y"
4653 1.1 christos {
4654 1.1 christos if ((yyvsp[0].r0).r0 == 1)
4655 1.1 christos {
4656 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4657 1.1 christos {
4658 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
4659 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4660 1.1 christos }
4661 1.1 christos else
4662 1.1 christos return yyerror ("Register mismatch");
4663 1.1 christos }
4664 1.1 christos else
4665 1.1 christos {
4666 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4667 1.1 christos {
4668 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
4669 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4670 1.1 christos }
4671 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4672 1.1 christos {
4673 1.1 christos notethat ("PTR2op: pregs = pregs >> 2\n");
4674 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 3);
4675 1.1 christos }
4676 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4677 1.1 christos {
4678 1.1 christos notethat ("PTR2op: pregs = pregs >> 1\n");
4679 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 4);
4680 1.1 christos }
4681 1.1 christos else
4682 1.1 christos return yyerror ("Register mismatch");
4683 1.1 christos }
4684 1.1 christos }
4685 1.1 christos #line 4686 "config/bfin-parse.c"
4686 1.1 christos break;
4687 1.1 christos
4688 1.1 christos case 106: /* asm_1: HALF_REG ASSIGN HALF_REG GREATER_GREATER expr */
4689 1.1 christos #line 2212 "./config/bfin-parse.y"
4690 1.1 christos {
4691 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4692 1.1 christos {
4693 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half >> uimm5\n");
4694 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-4].reg), -uimm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
4695 1.1 christos }
4696 1.1 christos else
4697 1.1 christos return yyerror ("Register mismatch");
4698 1.1 christos }
4699 1.1 christos #line 4700 "config/bfin-parse.c"
4700 1.1 christos break;
4701 1.1 christos
4702 1.1 christos case 107: /* asm_1: HALF_REG ASSIGN HALF_REG _GREATER_GREATER_GREATER expr smod */
4703 1.1 christos #line 2222 "./config/bfin-parse.y"
4704 1.1 christos {
4705 1.1 christos if (IS_UIMM ((yyvsp[-1].expr), 5))
4706 1.1 christos {
4707 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
4708 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg),
4709 1.1 christos (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4710 1.1 christos }
4711 1.1 christos else
4712 1.1 christos return yyerror ("Register or modifier mismatch");
4713 1.1 christos }
4714 1.1 christos #line 4715 "config/bfin-parse.c"
4715 1.1 christos break;
4716 1.1 christos
4717 1.1 christos case 108: /* asm_1: REG ASSIGN REG _GREATER_GREATER_GREATER expr vsmod */
4718 1.1 christos #line 2235 "./config/bfin-parse.y"
4719 1.1 christos {
4720 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4721 1.1 christos {
4722 1.1 christos if ((yyvsp[0].modcodes).r0)
4723 1.1 christos {
4724 1.1 christos /* Vector? */
4725 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (V, .)\n");
4726 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4727 1.1 christos }
4728 1.1 christos else
4729 1.1 christos {
4730 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (.)\n");
4731 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4732 1.1 christos }
4733 1.1 christos }
4734 1.1 christos else
4735 1.1 christos return yyerror ("Register mismatch");
4736 1.1 christos }
4737 1.1 christos #line 4738 "config/bfin-parse.c"
4738 1.1 christos break;
4739 1.1 christos
4740 1.1 christos case 109: /* asm_1: HALF_REG ASSIGN ONES REG */
4741 1.1 christos #line 2255 "./config/bfin-parse.y"
4742 1.1 christos {
4743 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4744 1.1 christos {
4745 1.1 christos notethat ("dsp32shift: dregs_lo = ONES dregs\n");
4746 1.1 christos (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 3, 0);
4747 1.1 christos }
4748 1.1 christos else
4749 1.1 christos return yyerror ("Register mismatch");
4750 1.1 christos }
4751 1.1 christos #line 4752 "config/bfin-parse.c"
4752 1.1 christos break;
4753 1.1 christos
4754 1.1 christos case 110: /* asm_1: REG ASSIGN PACK LPAREN HALF_REG COMMA HALF_REG RPAREN */
4755 1.1 christos #line 2266 "./config/bfin-parse.y"
4756 1.1 christos {
4757 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4758 1.1 christos {
4759 1.1 christos notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
4760 1.1 christos (yyval.instr) = DSP32SHIFT (4, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)), 0);
4761 1.1 christos }
4762 1.1 christos else
4763 1.1 christos return yyerror ("Register mismatch");
4764 1.1 christos }
4765 1.1 christos #line 4766 "config/bfin-parse.c"
4766 1.1 christos break;
4767 1.1 christos
4768 1.1 christos case 111: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXORSHIFT LPAREN REG_A COMMA REG RPAREN */
4769 1.1 christos #line 2277 "./config/bfin-parse.y"
4770 1.1 christos {
4771 1.1 christos if (IS_DREG ((yyvsp[-9].reg))
4772 1.1 christos && (yyvsp[-3].reg).regno == REG_A0
4773 1.1 christos && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4774 1.1 christos {
4775 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
4776 1.1 christos (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 0, 0);
4777 1.1 christos }
4778 1.1 christos else
4779 1.1 christos return yyerror ("Register mismatch");
4780 1.1 christos }
4781 1.1 christos #line 4782 "config/bfin-parse.c"
4782 1.1 christos break;
4783 1.1 christos
4784 1.1 christos case 112: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG RPAREN */
4785 1.1 christos #line 2290 "./config/bfin-parse.y"
4786 1.1 christos {
4787 1.1 christos if (IS_DREG ((yyvsp[-9].reg))
4788 1.1 christos && (yyvsp[-3].reg).regno == REG_A0
4789 1.1 christos && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4790 1.1 christos {
4791 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
4792 1.1 christos (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 1, 0);
4793 1.1 christos }
4794 1.1 christos else
4795 1.1 christos return yyerror ("Register mismatch");
4796 1.1 christos }
4797 1.1 christos #line 4798 "config/bfin-parse.c"
4798 1.1 christos break;
4799 1.1 christos
4800 1.1 christos case 113: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN */
4801 1.1 christos #line 2303 "./config/bfin-parse.y"
4802 1.1 christos {
4803 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && !IS_H ((yyvsp[-11].reg)) && !REG_SAME ((yyvsp[-5].reg), (yyvsp[-3].reg)))
4804 1.1 christos {
4805 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
4806 1.1 christos (yyval.instr) = DSP32SHIFT (12, &(yyvsp[-11].reg), 0, 0, 1, 0);
4807 1.1 christos }
4808 1.1 christos else
4809 1.1 christos return yyerror ("Register mismatch");
4810 1.1 christos }
4811 1.1 christos #line 4812 "config/bfin-parse.c"
4812 1.1 christos break;
4813 1.1 christos
4814 1.1 christos case 114: /* asm_1: a_assign ROT REG_A BY HALF_REG */
4815 1.1 christos #line 2314 "./config/bfin-parse.y"
4816 1.1 christos {
4817 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4818 1.1 christos {
4819 1.1 christos notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
4820 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4821 1.1 christos }
4822 1.1 christos else
4823 1.1 christos return yyerror ("Register mismatch");
4824 1.1 christos }
4825 1.1 christos #line 4826 "config/bfin-parse.c"
4826 1.1 christos break;
4827 1.1 christos
4828 1.1 christos case 115: /* asm_1: REG ASSIGN ROT REG BY HALF_REG */
4829 1.1 christos #line 2325 "./config/bfin-parse.y"
4830 1.1 christos {
4831 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4832 1.1 christos {
4833 1.1 christos notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
4834 1.1 christos (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 3, 0);
4835 1.1 christos }
4836 1.1 christos else
4837 1.1 christos return yyerror ("Register mismatch");
4838 1.1 christos }
4839 1.1 christos #line 4840 "config/bfin-parse.c"
4840 1.1 christos break;
4841 1.1 christos
4842 1.1 christos case 116: /* asm_1: a_assign ROT REG_A BY expr */
4843 1.1 christos #line 2336 "./config/bfin-parse.y"
4844 1.1 christos {
4845 1.1 christos if (IS_IMM ((yyvsp[0].expr), 6))
4846 1.1 christos {
4847 1.1 christos notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
4848 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[0].expr)), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4849 1.1 christos }
4850 1.1 christos else
4851 1.1 christos return yyerror ("Register mismatch");
4852 1.1 christos }
4853 1.1 christos #line 4854 "config/bfin-parse.c"
4854 1.1 christos break;
4855 1.1 christos
4856 1.1 christos case 117: /* asm_1: REG ASSIGN ROT REG BY expr */
4857 1.1 christos #line 2347 "./config/bfin-parse.y"
4858 1.1 christos {
4859 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6))
4860 1.1 christos {
4861 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 3, IS_A1 ((yyvsp[-5].reg)));
4862 1.1 christos }
4863 1.1 christos else
4864 1.1 christos return yyerror ("Register mismatch");
4865 1.1 christos }
4866 1.1 christos #line 4867 "config/bfin-parse.c"
4867 1.1 christos break;
4868 1.1 christos
4869 1.1 christos case 118: /* asm_1: HALF_REG ASSIGN SIGNBITS REG_A */
4870 1.1 christos #line 2357 "./config/bfin-parse.y"
4871 1.1 christos {
4872 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)))
4873 1.1 christos {
4874 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
4875 1.1 christos (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, 0, IS_A1 ((yyvsp[0].reg)), 0);
4876 1.1 christos }
4877 1.1 christos else
4878 1.1 christos return yyerror ("Register mismatch");
4879 1.1 christos }
4880 1.1 christos #line 4881 "config/bfin-parse.c"
4881 1.1 christos break;
4882 1.1 christos
4883 1.1 christos case 119: /* asm_1: HALF_REG ASSIGN SIGNBITS REG */
4884 1.1 christos #line 2368 "./config/bfin-parse.y"
4885 1.1 christos {
4886 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4887 1.1 christos {
4888 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
4889 1.1 christos (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 0, 0);
4890 1.1 christos }
4891 1.1 christos else
4892 1.1 christos return yyerror ("Register mismatch");
4893 1.1 christos }
4894 1.1 christos #line 4895 "config/bfin-parse.c"
4895 1.1 christos break;
4896 1.1 christos
4897 1.1 christos case 120: /* asm_1: HALF_REG ASSIGN SIGNBITS HALF_REG */
4898 1.1 christos #line 2379 "./config/bfin-parse.y"
4899 1.1 christos {
4900 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)))
4901 1.1 christos {
4902 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
4903 1.1 christos (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 1 + IS_H ((yyvsp[0].reg)), 0);
4904 1.1 christos }
4905 1.1 christos else
4906 1.1 christos return yyerror ("Register mismatch");
4907 1.1 christos }
4908 1.1 christos #line 4909 "config/bfin-parse.c"
4909 1.1 christos break;
4910 1.1 christos
4911 1.1 christos case 121: /* asm_1: HALF_REG ASSIGN VIT_MAX LPAREN REG RPAREN asr_asl */
4912 1.1 christos #line 2391 "./config/bfin-parse.y"
4913 1.1 christos {
4914 1.1 christos if (IS_DREG_L ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-2].reg)))
4915 1.1 christos {
4916 1.1 christos notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
4917 1.1 christos (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-6].reg), 0, &(yyvsp[-2].reg), ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4918 1.1 christos }
4919 1.1 christos else
4920 1.1 christos return yyerror ("Register mismatch");
4921 1.1 christos }
4922 1.1 christos #line 4923 "config/bfin-parse.c"
4923 1.1 christos break;
4924 1.1 christos
4925 1.1 christos case 122: /* asm_1: REG ASSIGN VIT_MAX LPAREN REG COMMA REG RPAREN asr_asl */
4926 1.1 christos #line 2402 "./config/bfin-parse.y"
4927 1.1 christos {
4928 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
4929 1.1 christos {
4930 1.1 christos notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
4931 1.1 christos (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), 2 | ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4932 1.1 christos }
4933 1.1 christos else
4934 1.1 christos return yyerror ("Register mismatch");
4935 1.1 christos }
4936 1.1 christos #line 4937 "config/bfin-parse.c"
4937 1.1 christos break;
4938 1.1 christos
4939 1.1 christos case 123: /* asm_1: BITMUX LPAREN REG COMMA REG COMMA REG_A RPAREN asr_asl */
4940 1.1 christos #line 2413 "./config/bfin-parse.y"
4941 1.1 christos {
4942 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)))
4943 1.1 christos return yyerror ("Illegal source register combination");
4944 1.1 christos
4945 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)) && !IS_A1 ((yyvsp[-2].reg)))
4946 1.1 christos {
4947 1.1 christos notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
4948 1.1 christos (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[-6].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4949 1.1 christos }
4950 1.1 christos else
4951 1.1 christos return yyerror ("Register mismatch");
4952 1.1 christos }
4953 1.1 christos #line 4954 "config/bfin-parse.c"
4954 1.1 christos break;
4955 1.1 christos
4956 1.1 christos case 124: /* asm_1: a_assign BXORSHIFT LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN */
4957 1.1 christos #line 2427 "./config/bfin-parse.y"
4958 1.1 christos {
4959 1.1 christos if (!IS_A1 ((yyvsp[-8].reg)) && !IS_A1 ((yyvsp[-5].reg)) && IS_A1 ((yyvsp[-3].reg)))
4960 1.1 christos {
4961 1.1 christos notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
4962 1.1 christos (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
4963 1.1 christos }
4964 1.1 christos else
4965 1.1 christos return yyerror ("Dregs expected");
4966 1.1 christos }
4967 1.1 christos #line 4968 "config/bfin-parse.c"
4968 1.1 christos break;
4969 1.1 christos
4970 1.1 christos case 125: /* asm_1: BITCLR LPAREN REG COMMA expr RPAREN */
4971 1.1 christos #line 2440 "./config/bfin-parse.y"
4972 1.1 christos {
4973 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4974 1.1 christos {
4975 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4976 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 4);
4977 1.1 christos }
4978 1.1 christos else
4979 1.1 christos return yyerror ("Register mismatch");
4980 1.1 christos }
4981 1.1 christos #line 4982 "config/bfin-parse.c"
4982 1.1 christos break;
4983 1.1 christos
4984 1.1 christos case 126: /* asm_1: BITSET LPAREN REG COMMA expr RPAREN */
4985 1.1 christos #line 2452 "./config/bfin-parse.y"
4986 1.1 christos {
4987 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4988 1.1 christos {
4989 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4990 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 2);
4991 1.1 christos }
4992 1.1 christos else
4993 1.1 christos return yyerror ("Register mismatch");
4994 1.1 christos }
4995 1.1 christos #line 4996 "config/bfin-parse.c"
4996 1.1 christos break;
4997 1.1 christos
4998 1.1 christos case 127: /* asm_1: BITTGL LPAREN REG COMMA expr RPAREN */
4999 1.1 christos #line 2464 "./config/bfin-parse.y"
5000 1.1 christos {
5001 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
5002 1.1 christos {
5003 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
5004 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 3);
5005 1.1 christos }
5006 1.1 christos else
5007 1.1 christos return yyerror ("Register mismatch");
5008 1.1 christos }
5009 1.1 christos #line 5010 "config/bfin-parse.c"
5010 1.1 christos break;
5011 1.1 christos
5012 1.1 christos case 128: /* asm_1: CCREG _ASSIGN_BANG BITTST LPAREN REG COMMA expr RPAREN */
5013 1.1 christos #line 2475 "./config/bfin-parse.y"
5014 1.1 christos {
5015 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
5016 1.1 christos {
5017 1.1 christos notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
5018 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 0);
5019 1.1 christos }
5020 1.1 christos else
5021 1.1 christos return yyerror ("Register mismatch or value error");
5022 1.1 christos }
5023 1.1 christos #line 5024 "config/bfin-parse.c"
5024 1.1 christos break;
5025 1.1 christos
5026 1.1 christos case 129: /* asm_1: CCREG ASSIGN BITTST LPAREN REG COMMA expr RPAREN */
5027 1.1 christos #line 2486 "./config/bfin-parse.y"
5028 1.1 christos {
5029 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
5030 1.1 christos {
5031 1.1 christos notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
5032 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 1);
5033 1.1 christos }
5034 1.1 christos else
5035 1.1 christos return yyerror ("Register mismatch or value error");
5036 1.1 christos }
5037 1.1 christos #line 5038 "config/bfin-parse.c"
5038 1.1 christos break;
5039 1.1 christos
5040 1.1 christos case 130: /* asm_1: IF BANG CCREG REG ASSIGN REG */
5041 1.1 christos #line 2497 "./config/bfin-parse.y"
5042 1.1 christos {
5043 1.1 christos if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg)))
5044 1.1 christos && (IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg))))
5045 1.1 christos {
5046 1.1 christos notethat ("ccMV: IF ! CC gregs = gregs\n");
5047 1.1 christos (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 0);
5048 1.1 christos }
5049 1.1 christos else
5050 1.1 christos return yyerror ("Register mismatch");
5051 1.1 christos }
5052 1.1 christos #line 5053 "config/bfin-parse.c"
5053 1.1 christos break;
5054 1.1 christos
5055 1.1 christos case 131: /* asm_1: IF CCREG REG ASSIGN REG */
5056 1.1 christos #line 2509 "./config/bfin-parse.y"
5057 1.1 christos {
5058 1.1 christos if ((IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg)))
5059 1.1 christos && (IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))))
5060 1.1 christos {
5061 1.1 christos notethat ("ccMV: IF CC gregs = gregs\n");
5062 1.1 christos (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 1);
5063 1.1 christos }
5064 1.1 christos else
5065 1.1 christos return yyerror ("Register mismatch");
5066 1.1 christos }
5067 1.1 christos #line 5068 "config/bfin-parse.c"
5068 1.1 christos break;
5069 1.1 christos
5070 1.1 christos case 132: /* asm_1: IF BANG CCREG JUMP expr */
5071 1.1 christos #line 2521 "./config/bfin-parse.y"
5072 1.1 christos {
5073 1.1 christos if (IS_PCREL10 ((yyvsp[0].expr)))
5074 1.1 christos {
5075 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5076 1.1 christos (yyval.instr) = BRCC (0, 0, (yyvsp[0].expr));
5077 1.1 christos }
5078 1.1 christos else
5079 1.1 christos return yyerror ("Bad jump offset");
5080 1.1 christos }
5081 1.1 christos #line 5082 "config/bfin-parse.c"
5082 1.1 christos break;
5083 1.1 christos
5084 1.1 christos case 133: /* asm_1: IF BANG CCREG JUMP expr LPAREN BP RPAREN */
5085 1.1 christos #line 2532 "./config/bfin-parse.y"
5086 1.1 christos {
5087 1.1 christos if (IS_PCREL10 ((yyvsp[-3].expr)))
5088 1.1 christos {
5089 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5090 1.1 christos (yyval.instr) = BRCC (0, 1, (yyvsp[-3].expr));
5091 1.1 christos }
5092 1.1 christos else
5093 1.1 christos return yyerror ("Bad jump offset");
5094 1.1 christos }
5095 1.1 christos #line 5096 "config/bfin-parse.c"
5096 1.1 christos break;
5097 1.1 christos
5098 1.1 christos case 134: /* asm_1: IF CCREG JUMP expr */
5099 1.1 christos #line 2543 "./config/bfin-parse.y"
5100 1.1 christos {
5101 1.1 christos if (IS_PCREL10 ((yyvsp[0].expr)))
5102 1.1 christos {
5103 1.1 christos notethat ("BRCC: IF CC JUMP pcrel11m2\n");
5104 1.1 christos (yyval.instr) = BRCC (1, 0, (yyvsp[0].expr));
5105 1.1 christos }
5106 1.1 christos else
5107 1.1 christos return yyerror ("Bad jump offset");
5108 1.1 christos }
5109 1.1 christos #line 5110 "config/bfin-parse.c"
5110 1.1 christos break;
5111 1.1 christos
5112 1.1 christos case 135: /* asm_1: IF CCREG JUMP expr LPAREN BP RPAREN */
5113 1.1 christos #line 2554 "./config/bfin-parse.y"
5114 1.1 christos {
5115 1.1 christos if (IS_PCREL10 ((yyvsp[-3].expr)))
5116 1.1 christos {
5117 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5118 1.1 christos (yyval.instr) = BRCC (1, 1, (yyvsp[-3].expr));
5119 1.1 christos }
5120 1.1 christos else
5121 1.1 christos return yyerror ("Bad jump offset");
5122 1.1 christos }
5123 1.1 christos #line 5124 "config/bfin-parse.c"
5124 1.1 christos break;
5125 1.1 christos
5126 1.1 christos case 136: /* asm_1: NOP */
5127 1.1 christos #line 2564 "./config/bfin-parse.y"
5128 1.1 christos {
5129 1.1 christos notethat ("ProgCtrl: NOP\n");
5130 1.1 christos (yyval.instr) = PROGCTRL (0, 0);
5131 1.1 christos }
5132 1.1 christos #line 5133 "config/bfin-parse.c"
5133 1.1 christos break;
5134 1.1 christos
5135 1.1 christos case 137: /* asm_1: RTS */
5136 1.1 christos #line 2570 "./config/bfin-parse.y"
5137 1.1 christos {
5138 1.1 christos notethat ("ProgCtrl: RTS\n");
5139 1.1 christos (yyval.instr) = PROGCTRL (1, 0);
5140 1.1 christos }
5141 1.1 christos #line 5142 "config/bfin-parse.c"
5142 1.1 christos break;
5143 1.1 christos
5144 1.1 christos case 138: /* asm_1: RTI */
5145 1.1 christos #line 2576 "./config/bfin-parse.y"
5146 1.1 christos {
5147 1.1 christos notethat ("ProgCtrl: RTI\n");
5148 1.1 christos (yyval.instr) = PROGCTRL (1, 1);
5149 1.1 christos }
5150 1.1 christos #line 5151 "config/bfin-parse.c"
5151 1.1 christos break;
5152 1.1 christos
5153 1.1 christos case 139: /* asm_1: RTX */
5154 1.1 christos #line 2582 "./config/bfin-parse.y"
5155 1.1 christos {
5156 1.1 christos notethat ("ProgCtrl: RTX\n");
5157 1.1 christos (yyval.instr) = PROGCTRL (1, 2);
5158 1.1 christos }
5159 1.1 christos #line 5160 "config/bfin-parse.c"
5160 1.1 christos break;
5161 1.1 christos
5162 1.1 christos case 140: /* asm_1: RTN */
5163 1.1 christos #line 2588 "./config/bfin-parse.y"
5164 1.1 christos {
5165 1.1 christos notethat ("ProgCtrl: RTN\n");
5166 1.1 christos (yyval.instr) = PROGCTRL (1, 3);
5167 1.1 christos }
5168 1.1 christos #line 5169 "config/bfin-parse.c"
5169 1.1 christos break;
5170 1.1 christos
5171 1.1 christos case 141: /* asm_1: RTE */
5172 1.1 christos #line 2594 "./config/bfin-parse.y"
5173 1.1 christos {
5174 1.1 christos notethat ("ProgCtrl: RTE\n");
5175 1.1 christos (yyval.instr) = PROGCTRL (1, 4);
5176 1.1 christos }
5177 1.1 christos #line 5178 "config/bfin-parse.c"
5178 1.1 christos break;
5179 1.1 christos
5180 1.1 christos case 142: /* asm_1: IDLE */
5181 1.1 christos #line 2600 "./config/bfin-parse.y"
5182 1.1 christos {
5183 1.1 christos notethat ("ProgCtrl: IDLE\n");
5184 1.1 christos (yyval.instr) = PROGCTRL (2, 0);
5185 1.1 christos }
5186 1.1 christos #line 5187 "config/bfin-parse.c"
5187 1.1 christos break;
5188 1.1 christos
5189 1.1 christos case 143: /* asm_1: CSYNC */
5190 1.1 christos #line 2606 "./config/bfin-parse.y"
5191 1.1 christos {
5192 1.1 christos notethat ("ProgCtrl: CSYNC\n");
5193 1.1 christos (yyval.instr) = PROGCTRL (2, 3);
5194 1.1 christos }
5195 1.1 christos #line 5196 "config/bfin-parse.c"
5196 1.1 christos break;
5197 1.1 christos
5198 1.1 christos case 144: /* asm_1: SSYNC */
5199 1.1 christos #line 2612 "./config/bfin-parse.y"
5200 1.1 christos {
5201 1.1 christos notethat ("ProgCtrl: SSYNC\n");
5202 1.1 christos (yyval.instr) = PROGCTRL (2, 4);
5203 1.1 christos }
5204 1.1 christos #line 5205 "config/bfin-parse.c"
5205 1.1 christos break;
5206 1.1 christos
5207 1.1 christos case 145: /* asm_1: EMUEXCPT */
5208 1.1 christos #line 2618 "./config/bfin-parse.y"
5209 1.1 christos {
5210 1.1 christos notethat ("ProgCtrl: EMUEXCPT\n");
5211 1.1 christos (yyval.instr) = PROGCTRL (2, 5);
5212 1.1 christos }
5213 1.1 christos #line 5214 "config/bfin-parse.c"
5214 1.1 christos break;
5215 1.1 christos
5216 1.1 christos case 146: /* asm_1: CLI REG */
5217 1.1 christos #line 2624 "./config/bfin-parse.y"
5218 1.1 christos {
5219 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
5220 1.1 christos {
5221 1.1 christos notethat ("ProgCtrl: CLI dregs\n");
5222 1.1 christos (yyval.instr) = PROGCTRL (3, (yyvsp[0].reg).regno & CODE_MASK);
5223 1.1 christos }
5224 1.1 christos else
5225 1.1 christos return yyerror ("Dreg expected for CLI");
5226 1.1 christos }
5227 1.1 christos #line 5228 "config/bfin-parse.c"
5228 1.1 christos break;
5229 1.1 christos
5230 1.1 christos case 147: /* asm_1: STI REG */
5231 1.1 christos #line 2635 "./config/bfin-parse.y"
5232 1.1 christos {
5233 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
5234 1.1 christos {
5235 1.1 christos notethat ("ProgCtrl: STI dregs\n");
5236 1.1 christos (yyval.instr) = PROGCTRL (4, (yyvsp[0].reg).regno & CODE_MASK);
5237 1.1 christos }
5238 1.1 christos else
5239 1.1 christos return yyerror ("Dreg expected for STI");
5240 1.1 christos }
5241 1.1 christos #line 5242 "config/bfin-parse.c"
5242 1.1 christos break;
5243 1.1 christos
5244 1.1 christos case 148: /* asm_1: JUMP LPAREN REG RPAREN */
5245 1.1 christos #line 2646 "./config/bfin-parse.y"
5246 1.1 christos {
5247 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5248 1.1 christos {
5249 1.1 christos notethat ("ProgCtrl: JUMP (pregs )\n");
5250 1.1 christos (yyval.instr) = PROGCTRL (5, (yyvsp[-1].reg).regno & CODE_MASK);
5251 1.1 christos }
5252 1.1 christos else
5253 1.1 christos return yyerror ("Bad register for indirect jump");
5254 1.1 christos }
5255 1.1 christos #line 5256 "config/bfin-parse.c"
5256 1.1 christos break;
5257 1.1 christos
5258 1.1 christos case 149: /* asm_1: CALL LPAREN REG RPAREN */
5259 1.1 christos #line 2657 "./config/bfin-parse.y"
5260 1.1 christos {
5261 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5262 1.1 christos {
5263 1.1 christos notethat ("ProgCtrl: CALL (pregs )\n");
5264 1.1 christos (yyval.instr) = PROGCTRL (6, (yyvsp[-1].reg).regno & CODE_MASK);
5265 1.1 christos }
5266 1.1 christos else
5267 1.1 christos return yyerror ("Bad register for indirect call");
5268 1.1 christos }
5269 1.1 christos #line 5270 "config/bfin-parse.c"
5270 1.1 christos break;
5271 1.1 christos
5272 1.1 christos case 150: /* asm_1: CALL LPAREN PC PLUS REG RPAREN */
5273 1.1 christos #line 2668 "./config/bfin-parse.y"
5274 1.1 christos {
5275 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5276 1.1 christos {
5277 1.1 christos notethat ("ProgCtrl: CALL (PC + pregs )\n");
5278 1.1 christos (yyval.instr) = PROGCTRL (7, (yyvsp[-1].reg).regno & CODE_MASK);
5279 1.1 christos }
5280 1.1 christos else
5281 1.1 christos return yyerror ("Bad register for indirect call");
5282 1.1 christos }
5283 1.1 christos #line 5284 "config/bfin-parse.c"
5284 1.1 christos break;
5285 1.1 christos
5286 1.1 christos case 151: /* asm_1: JUMP LPAREN PC PLUS REG RPAREN */
5287 1.1 christos #line 2679 "./config/bfin-parse.y"
5288 1.1 christos {
5289 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5290 1.1 christos {
5291 1.1 christos notethat ("ProgCtrl: JUMP (PC + pregs )\n");
5292 1.1 christos (yyval.instr) = PROGCTRL (8, (yyvsp[-1].reg).regno & CODE_MASK);
5293 1.1 christos }
5294 1.1 christos else
5295 1.1 christos return yyerror ("Bad register for indirect jump");
5296 1.1 christos }
5297 1.1 christos #line 5298 "config/bfin-parse.c"
5298 1.1 christos break;
5299 1.1 christos
5300 1.1 christos case 152: /* asm_1: RAISE expr */
5301 1.1 christos #line 2690 "./config/bfin-parse.y"
5302 1.1 christos {
5303 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 4))
5304 1.1 christos {
5305 1.1 christos notethat ("ProgCtrl: RAISE uimm4\n");
5306 1.1 christos (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[0].expr)));
5307 1.1 christos }
5308 1.1 christos else
5309 1.1 christos return yyerror ("Bad value for RAISE");
5310 1.1 christos }
5311 1.1 christos #line 5312 "config/bfin-parse.c"
5312 1.1 christos break;
5313 1.1 christos
5314 1.1 christos case 153: /* asm_1: EXCPT expr */
5315 1.1 christos #line 2701 "./config/bfin-parse.y"
5316 1.1 christos {
5317 1.1 christos notethat ("ProgCtrl: EMUEXCPT\n");
5318 1.1 christos (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[0].expr)));
5319 1.1 christos }
5320 1.1 christos #line 5321 "config/bfin-parse.c"
5321 1.1 christos break;
5322 1.1 christos
5323 1.1 christos case 154: /* asm_1: TESTSET LPAREN REG RPAREN */
5324 1.1 christos #line 2707 "./config/bfin-parse.y"
5325 1.1 christos {
5326 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5327 1.1 christos {
5328 1.1 christos if ((yyvsp[-1].reg).regno == REG_SP || (yyvsp[-1].reg).regno == REG_FP)
5329 1.1 christos return yyerror ("Bad register for TESTSET");
5330 1.1 christos
5331 1.1 christos notethat ("ProgCtrl: TESTSET (pregs )\n");
5332 1.1 christos (yyval.instr) = PROGCTRL (11, (yyvsp[-1].reg).regno & CODE_MASK);
5333 1.1 christos }
5334 1.1 christos else
5335 1.1 christos return yyerror ("Preg expected");
5336 1.1 christos }
5337 1.1 christos #line 5338 "config/bfin-parse.c"
5338 1.1 christos break;
5339 1.1 christos
5340 1.1 christos case 155: /* asm_1: JUMP expr */
5341 1.1 christos #line 2721 "./config/bfin-parse.y"
5342 1.1 christos {
5343 1.1 christos if (IS_PCREL12 ((yyvsp[0].expr)))
5344 1.1 christos {
5345 1.1 christos notethat ("UJUMP: JUMP pcrel12\n");
5346 1.1 christos (yyval.instr) = UJUMP ((yyvsp[0].expr));
5347 1.1 christos }
5348 1.1 christos else
5349 1.1 christos return yyerror ("Bad value for relative jump");
5350 1.1 christos }
5351 1.1 christos #line 5352 "config/bfin-parse.c"
5352 1.1 christos break;
5353 1.1 christos
5354 1.1 christos case 156: /* asm_1: JUMP_DOT_S expr */
5355 1.1 christos #line 2732 "./config/bfin-parse.y"
5356 1.1 christos {
5357 1.1 christos if (IS_PCREL12 ((yyvsp[0].expr)))
5358 1.1 christos {
5359 1.1 christos notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
5360 1.1 christos (yyval.instr) = UJUMP((yyvsp[0].expr));
5361 1.1 christos }
5362 1.1 christos else
5363 1.1 christos return yyerror ("Bad value for relative jump");
5364 1.1 christos }
5365 1.1 christos #line 5366 "config/bfin-parse.c"
5366 1.1 christos break;
5367 1.1 christos
5368 1.1 christos case 157: /* asm_1: JUMP_DOT_L expr */
5369 1.1 christos #line 2743 "./config/bfin-parse.y"
5370 1.1 christos {
5371 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5372 1.1 christos {
5373 1.1 christos notethat ("CALLa: jump.l pcrel24\n");
5374 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 0);
5375 1.1 christos }
5376 1.1 christos else
5377 1.1 christos return yyerror ("Bad value for long jump");
5378 1.1 christos }
5379 1.1 christos #line 5380 "config/bfin-parse.c"
5380 1.1 christos break;
5381 1.1 christos
5382 1.1 christos case 158: /* asm_1: JUMP_DOT_L pltpc */
5383 1.1 christos #line 2754 "./config/bfin-parse.y"
5384 1.1 christos {
5385 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5386 1.1 christos {
5387 1.1 christos notethat ("CALLa: jump.l pcrel24\n");
5388 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5389 1.1 christos }
5390 1.1 christos else
5391 1.1 christos return yyerror ("Bad value for long jump");
5392 1.1 christos }
5393 1.1 christos #line 5394 "config/bfin-parse.c"
5394 1.1 christos break;
5395 1.1 christos
5396 1.1 christos case 159: /* asm_1: CALL expr */
5397 1.1 christos #line 2765 "./config/bfin-parse.y"
5398 1.1 christos {
5399 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5400 1.1 christos {
5401 1.1 christos notethat ("CALLa: CALL pcrel25m2\n");
5402 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 1);
5403 1.1 christos }
5404 1.1 christos else
5405 1.1 christos return yyerror ("Bad call address");
5406 1.1 christos }
5407 1.1 christos #line 5408 "config/bfin-parse.c"
5408 1.1 christos break;
5409 1.1 christos
5410 1.1 christos case 160: /* asm_1: CALL pltpc */
5411 1.1 christos #line 2775 "./config/bfin-parse.y"
5412 1.1 christos {
5413 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5414 1.1 christos {
5415 1.1 christos notethat ("CALLa: CALL pcrel25m2\n");
5416 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5417 1.1 christos }
5418 1.1 christos else
5419 1.1 christos return yyerror ("Bad call address");
5420 1.1 christos }
5421 1.1 christos #line 5422 "config/bfin-parse.c"
5422 1.1 christos break;
5423 1.1 christos
5424 1.1 christos case 161: /* asm_1: DIVQ LPAREN REG COMMA REG RPAREN */
5425 1.1 christos #line 2788 "./config/bfin-parse.y"
5426 1.1 christos {
5427 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5428 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 8);
5429 1.1 christos else
5430 1.1 christos return yyerror ("Bad registers for DIVQ");
5431 1.1 christos }
5432 1.1 christos #line 5433 "config/bfin-parse.c"
5433 1.1 christos break;
5434 1.1 christos
5435 1.1 christos case 162: /* asm_1: DIVS LPAREN REG COMMA REG RPAREN */
5436 1.1 christos #line 2796 "./config/bfin-parse.y"
5437 1.1 christos {
5438 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5439 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 9);
5440 1.1 christos else
5441 1.1 christos return yyerror ("Bad registers for DIVS");
5442 1.1 christos }
5443 1.1 christos #line 5444 "config/bfin-parse.c"
5444 1.1 christos break;
5445 1.1 christos
5446 1.1 christos case 163: /* asm_1: REG ASSIGN MINUS REG vsmod */
5447 1.1 christos #line 2804 "./config/bfin-parse.y"
5448 1.1 christos {
5449 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
5450 1.1 christos {
5451 1.1 christos if ((yyvsp[0].modcodes).r0 == 0 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 0)
5452 1.1 christos {
5453 1.1 christos notethat ("ALU2op: dregs = - dregs\n");
5454 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-4].reg), &(yyvsp[-1].reg), 14);
5455 1.1 christos }
5456 1.1 christos else if ((yyvsp[0].modcodes).r0 == 1 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 3)
5457 1.1 christos {
5458 1.1 christos notethat ("dsp32alu: dregs = - dregs (.)\n");
5459 1.1 christos (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5460 1.1 christos }
5461 1.1 christos else
5462 1.1 christos {
5463 1.1 christos notethat ("dsp32alu: dregs = - dregs (.)\n");
5464 1.1 christos (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5465 1.1 christos }
5466 1.1 christos }
5467 1.1 christos else
5468 1.1 christos return yyerror ("Dregs expected");
5469 1.1 christos }
5470 1.1 christos #line 5471 "config/bfin-parse.c"
5471 1.1 christos break;
5472 1.1 christos
5473 1.1 christos case 164: /* asm_1: REG ASSIGN TILDA REG */
5474 1.1 christos #line 2828 "./config/bfin-parse.y"
5475 1.1 christos {
5476 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
5477 1.1 christos {
5478 1.1 christos notethat ("ALU2op: dregs = ~dregs\n");
5479 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[0].reg), 15);
5480 1.1 christos }
5481 1.1 christos else
5482 1.1 christos return yyerror ("Dregs expected");
5483 1.1 christos }
5484 1.1 christos #line 5485 "config/bfin-parse.c"
5485 1.1 christos break;
5486 1.1 christos
5487 1.1 christos case 165: /* asm_1: REG _GREATER_GREATER_ASSIGN REG */
5488 1.1 christos #line 2839 "./config/bfin-parse.y"
5489 1.1 christos {
5490 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5491 1.1 christos {
5492 1.1 christos notethat ("ALU2op: dregs >>= dregs\n");
5493 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1);
5494 1.1 christos }
5495 1.1 christos else
5496 1.1 christos return yyerror ("Dregs expected");
5497 1.1 christos }
5498 1.1 christos #line 5499 "config/bfin-parse.c"
5499 1.1 christos break;
5500 1.1 christos
5501 1.1 christos case 166: /* asm_1: REG _GREATER_GREATER_ASSIGN expr */
5502 1.1 christos #line 2850 "./config/bfin-parse.y"
5503 1.1 christos {
5504 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5505 1.1 christos {
5506 1.1 christos notethat ("LOGI2op: dregs >>= uimm5\n");
5507 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 6);
5508 1.1 christos }
5509 1.1 christos else
5510 1.1 christos return yyerror ("Dregs expected or value error");
5511 1.1 christos }
5512 1.1 christos #line 5513 "config/bfin-parse.c"
5513 1.1 christos break;
5514 1.1 christos
5515 1.1 christos case 167: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN REG */
5516 1.1 christos #line 2861 "./config/bfin-parse.y"
5517 1.1 christos {
5518 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5519 1.1 christos {
5520 1.1 christos notethat ("ALU2op: dregs >>>= dregs\n");
5521 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
5522 1.1 christos }
5523 1.1 christos else
5524 1.1 christos return yyerror ("Dregs expected");
5525 1.1 christos }
5526 1.1 christos #line 5527 "config/bfin-parse.c"
5527 1.1 christos break;
5528 1.1 christos
5529 1.1 christos case 168: /* asm_1: REG _LESS_LESS_ASSIGN REG */
5530 1.1 christos #line 2872 "./config/bfin-parse.y"
5531 1.1 christos {
5532 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5533 1.1 christos {
5534 1.1 christos notethat ("ALU2op: dregs <<= dregs\n");
5535 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
5536 1.1 christos }
5537 1.1 christos else
5538 1.1 christos return yyerror ("Dregs expected");
5539 1.1 christos }
5540 1.1 christos #line 5541 "config/bfin-parse.c"
5541 1.1 christos break;
5542 1.1 christos
5543 1.1 christos case 169: /* asm_1: REG _LESS_LESS_ASSIGN expr */
5544 1.1 christos #line 2883 "./config/bfin-parse.y"
5545 1.1 christos {
5546 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5547 1.1 christos {
5548 1.1 christos notethat ("LOGI2op: dregs <<= uimm5\n");
5549 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 7);
5550 1.1 christos }
5551 1.1 christos else
5552 1.1 christos return yyerror ("Dregs expected or const value error");
5553 1.1 christos }
5554 1.1 christos #line 5555 "config/bfin-parse.c"
5555 1.1 christos break;
5556 1.1 christos
5557 1.1 christos case 170: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN expr */
5558 1.1 christos #line 2895 "./config/bfin-parse.y"
5559 1.1 christos {
5560 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5561 1.1 christos {
5562 1.1 christos notethat ("LOGI2op: dregs >>>= uimm5\n");
5563 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 5);
5564 1.1 christos }
5565 1.1 christos else
5566 1.1 christos return yyerror ("Dregs expected");
5567 1.1 christos }
5568 1.1 christos #line 5569 "config/bfin-parse.c"
5569 1.1 christos break;
5570 1.1 christos
5571 1.1 christos case 171: /* asm_1: FLUSH LBRACK REG RBRACK */
5572 1.1 christos #line 2908 "./config/bfin-parse.y"
5573 1.1 christos {
5574 1.1 christos notethat ("CaCTRL: FLUSH [ pregs ]\n");
5575 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5576 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 2);
5577 1.1 christos else
5578 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5579 1.1 christos }
5580 1.1 christos #line 5581 "config/bfin-parse.c"
5581 1.1 christos break;
5582 1.1 christos
5583 1.1 christos case 172: /* asm_1: FLUSH reg_with_postinc */
5584 1.1 christos #line 2917 "./config/bfin-parse.y"
5585 1.1 christos {
5586 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5587 1.1 christos {
5588 1.1 christos notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
5589 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 2);
5590 1.1 christos }
5591 1.1 christos else
5592 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5593 1.1 christos }
5594 1.1 christos #line 5595 "config/bfin-parse.c"
5595 1.1 christos break;
5596 1.1 christos
5597 1.1 christos case 173: /* asm_1: FLUSHINV LBRACK REG RBRACK */
5598 1.1 christos #line 2928 "./config/bfin-parse.y"
5599 1.1 christos {
5600 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5601 1.1 christos {
5602 1.1 christos notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
5603 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 1);
5604 1.1 christos }
5605 1.1 christos else
5606 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5607 1.1 christos }
5608 1.1 christos #line 5609 "config/bfin-parse.c"
5609 1.1 christos break;
5610 1.1 christos
5611 1.1 christos case 174: /* asm_1: FLUSHINV reg_with_postinc */
5612 1.1 christos #line 2939 "./config/bfin-parse.y"
5613 1.1 christos {
5614 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5615 1.1 christos {
5616 1.1 christos notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
5617 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 1);
5618 1.1 christos }
5619 1.1 christos else
5620 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5621 1.1 christos }
5622 1.1 christos #line 5623 "config/bfin-parse.c"
5623 1.1 christos break;
5624 1.1 christos
5625 1.1 christos case 175: /* asm_1: IFLUSH LBRACK REG RBRACK */
5626 1.1 christos #line 2951 "./config/bfin-parse.y"
5627 1.1 christos {
5628 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5629 1.1 christos {
5630 1.1 christos notethat ("CaCTRL: IFLUSH [ pregs ]\n");
5631 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 3);
5632 1.1 christos }
5633 1.1 christos else
5634 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5635 1.1 christos }
5636 1.1 christos #line 5637 "config/bfin-parse.c"
5637 1.1 christos break;
5638 1.1 christos
5639 1.1 christos case 176: /* asm_1: IFLUSH reg_with_postinc */
5640 1.1 christos #line 2962 "./config/bfin-parse.y"
5641 1.1 christos {
5642 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5643 1.1 christos {
5644 1.1 christos notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
5645 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 3);
5646 1.1 christos }
5647 1.1 christos else
5648 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5649 1.1 christos }
5650 1.1 christos #line 5651 "config/bfin-parse.c"
5651 1.1 christos break;
5652 1.1 christos
5653 1.1 christos case 177: /* asm_1: PREFETCH LBRACK REG RBRACK */
5654 1.1 christos #line 2973 "./config/bfin-parse.y"
5655 1.1 christos {
5656 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5657 1.1 christos {
5658 1.1 christos notethat ("CaCTRL: PREFETCH [ pregs ]\n");
5659 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 0);
5660 1.1 christos }
5661 1.1 christos else
5662 1.1 christos return yyerror ("Bad register(s) for PREFETCH");
5663 1.1 christos }
5664 1.1 christos #line 5665 "config/bfin-parse.c"
5665 1.1 christos break;
5666 1.1 christos
5667 1.1 christos case 178: /* asm_1: PREFETCH reg_with_postinc */
5668 1.1 christos #line 2984 "./config/bfin-parse.y"
5669 1.1 christos {
5670 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5671 1.1 christos {
5672 1.1 christos notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
5673 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 0);
5674 1.1 christos }
5675 1.1 christos else
5676 1.1 christos return yyerror ("Bad register(s) for PREFETCH");
5677 1.1 christos }
5678 1.1 christos #line 5679 "config/bfin-parse.c"
5679 1.1 christos break;
5680 1.1 christos
5681 1.1 christos case 179: /* asm_1: B LBRACK REG post_op RBRACK ASSIGN REG */
5682 1.1 christos #line 2998 "./config/bfin-parse.y"
5683 1.1 christos {
5684 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5685 1.1 christos return yyerror ("Dreg expected for source operand");
5686 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5687 1.1 christos return yyerror ("Preg expected in address");
5688 1.1 christos
5689 1.1 christos notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
5690 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 2, 0, 1);
5691 1.1 christos }
5692 1.1 christos #line 5693 "config/bfin-parse.c"
5693 1.1 christos break;
5694 1.1 christos
5695 1.1 christos case 180: /* asm_1: B LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5696 1.1 christos #line 3010 "./config/bfin-parse.y"
5697 1.1 christos {
5698 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5699 1.1 christos
5700 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5701 1.1 christos return yyerror ("Dreg expected for source operand");
5702 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5703 1.1 christos return yyerror ("Preg expected in address");
5704 1.1 christos
5705 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5706 1.1 christos return yyerror ("Plain symbol used as offset");
5707 1.1 christos
5708 1.1 christos if ((yyvsp[-4].r0).r0)
5709 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5710 1.1 christos
5711 1.1 christos if (in_range_p (tmp, -32768, 32767, 0))
5712 1.1 christos {
5713 1.1 christos notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
5714 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 2, 0, (yyvsp[-3].expr));
5715 1.1 christos }
5716 1.1 christos else
5717 1.1 christos return yyerror ("Displacement out of range");
5718 1.1 christos }
5719 1.1 christos #line 5720 "config/bfin-parse.c"
5720 1.1 christos break;
5721 1.1 christos
5722 1.1 christos case 181: /* asm_1: W LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5723 1.1 christos #line 3036 "./config/bfin-parse.y"
5724 1.1 christos {
5725 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5726 1.1 christos
5727 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5728 1.1 christos return yyerror ("Dreg expected for source operand");
5729 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5730 1.1 christos return yyerror ("Preg expected in address");
5731 1.1 christos
5732 1.1 christos if ((yyvsp[-4].r0).r0)
5733 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5734 1.1 christos
5735 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5736 1.1 christos return yyerror ("Plain symbol used as offset");
5737 1.1 christos
5738 1.1 christos if (in_range_p (tmp, 0, 30, 1))
5739 1.1 christos {
5740 1.1 christos notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
5741 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, 1);
5742 1.1 christos }
5743 1.1 christos else if (in_range_p (tmp, -65536, 65535, 1))
5744 1.1 christos {
5745 1.1 christos notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
5746 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 1, 0, tmp);
5747 1.1 christos }
5748 1.1 christos else
5749 1.1 christos return yyerror ("Displacement out of range");
5750 1.1 christos }
5751 1.1 christos #line 5752 "config/bfin-parse.c"
5752 1.1 christos break;
5753 1.1 christos
5754 1.1 christos case 182: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN REG */
5755 1.1 christos #line 3066 "./config/bfin-parse.y"
5756 1.1 christos {
5757 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5758 1.1 christos return yyerror ("Dreg expected for source operand");
5759 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5760 1.1 christos return yyerror ("Preg expected in address");
5761 1.1 christos
5762 1.1 christos notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
5763 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1, 0, 1);
5764 1.1 christos }
5765 1.1 christos #line 5766 "config/bfin-parse.c"
5766 1.1 christos break;
5767 1.1 christos
5768 1.1 christos case 183: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN HALF_REG */
5769 1.1 christos #line 3077 "./config/bfin-parse.y"
5770 1.1 christos {
5771 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5772 1.1 christos return yyerror ("Dreg expected for source operand");
5773 1.1 christos if ((yyvsp[-3].modcodes).x0 == 2)
5774 1.1 christos {
5775 1.1 christos if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
5776 1.1 christos return yyerror ("Ireg or Preg expected in address");
5777 1.1 christos }
5778 1.1 christos else if (!IS_IREG ((yyvsp[-4].reg)))
5779 1.1 christos return yyerror ("Ireg expected in address");
5780 1.1 christos
5781 1.1 christos if (IS_IREG ((yyvsp[-4].reg)))
5782 1.1 christos {
5783 1.1 christos notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
5784 1.1 christos (yyval.instr) = DSPLDST (&(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5785 1.1 christos }
5786 1.1 christos else
5787 1.1 christos {
5788 1.1 christos notethat ("LDSTpmod: W [ pregs ] = dregs_half\n");
5789 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[0].reg), &(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5790 1.1 christos }
5791 1.1 christos }
5792 1.1 christos #line 5793 "config/bfin-parse.c"
5793 1.1 christos break;
5794 1.1 christos
5795 1.1 christos case 184: /* asm_1: LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5796 1.1 christos #line 3102 "./config/bfin-parse.y"
5797 1.1 christos {
5798 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5799 1.1 christos int ispreg = IS_PREG ((yyvsp[0].reg));
5800 1.1 christos
5801 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5802 1.1 christos return yyerror ("Preg expected in address");
5803 1.1 christos
5804 1.1 christos if (!IS_DREG ((yyvsp[0].reg)) && !ispreg)
5805 1.1 christos return yyerror ("Preg expected for source operand");
5806 1.1 christos
5807 1.1 christos if ((yyvsp[-4].r0).r0)
5808 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5809 1.1 christos
5810 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5811 1.1 christos return yyerror ("Plain symbol used as offset");
5812 1.1 christos
5813 1.1 christos if (in_range_p (tmp, 0, 63, 3))
5814 1.1 christos {
5815 1.1 christos notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
5816 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, ispreg ? 3 : 0);
5817 1.1 christos }
5818 1.1 christos else if ((yyvsp[-5].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
5819 1.1 christos {
5820 1.1 christos notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
5821 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5822 1.1 christos (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[0].reg), 1);
5823 1.1 christos }
5824 1.1 christos else if (in_range_p (tmp, -131072, 131071, 3))
5825 1.1 christos {
5826 1.1 christos notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
5827 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 0, ispreg ? 1 : 0, tmp);
5828 1.1 christos }
5829 1.1 christos else
5830 1.1 christos return yyerror ("Displacement out of range");
5831 1.1 christos }
5832 1.1 christos #line 5833 "config/bfin-parse.c"
5833 1.1 christos break;
5834 1.1 christos
5835 1.1 christos case 185: /* asm_1: REG ASSIGN W LBRACK REG plus_minus expr RBRACK xpmod */
5836 1.1 christos #line 3139 "./config/bfin-parse.y"
5837 1.1 christos {
5838 1.1 christos Expr_Node *tmp = (yyvsp[-2].expr);
5839 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
5840 1.1 christos return yyerror ("Dreg expected for destination operand");
5841 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5842 1.1 christos return yyerror ("Preg expected in address");
5843 1.1 christos
5844 1.1 christos if ((yyvsp[-3].r0).r0)
5845 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5846 1.1 christos
5847 1.1 christos if (IS_RELOC ((yyvsp[-2].expr)))
5848 1.1 christos return yyerror ("Plain symbol used as offset");
5849 1.1 christos
5850 1.1 christos if (in_range_p (tmp, 0, 30, 1))
5851 1.1 christos {
5852 1.1 christos notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n");
5853 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-4].reg), &(yyvsp[-8].reg), tmp, 0, 1 << (yyvsp[0].r0).r0);
5854 1.1 christos }
5855 1.1 christos else if (in_range_p (tmp, -65536, 65535, 1))
5856 1.1 christos {
5857 1.1 christos notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
5858 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 1, (yyvsp[0].r0).r0, tmp);
5859 1.1 christos }
5860 1.1 christos else
5861 1.1 christos return yyerror ("Displacement out of range");
5862 1.1 christos }
5863 1.1 christos #line 5864 "config/bfin-parse.c"
5864 1.1 christos break;
5865 1.1 christos
5866 1.1 christos case 186: /* asm_1: HALF_REG ASSIGN W LBRACK REG post_op RBRACK */
5867 1.1 christos #line 3167 "./config/bfin-parse.y"
5868 1.1 christos {
5869 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)))
5870 1.1 christos return yyerror ("Dreg expected for source operand");
5871 1.1 christos if ((yyvsp[-1].modcodes).x0 == 2)
5872 1.1 christos {
5873 1.1 christos if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
5874 1.1 christos return yyerror ("Ireg or Preg expected in address");
5875 1.1 christos }
5876 1.1 christos else if (!IS_IREG ((yyvsp[-2].reg)))
5877 1.1 christos return yyerror ("Ireg expected in address");
5878 1.1 christos
5879 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
5880 1.1 christos {
5881 1.1 christos notethat ("dspLDST: dregs_half = W [ iregs <post_op> ]\n");
5882 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), &(yyvsp[-6].reg), (yyvsp[-1].modcodes).x0, 0);
5883 1.1 christos }
5884 1.1 christos else
5885 1.1 christos {
5886 1.1 christos notethat ("LDSTpmod: dregs_half = W [ pregs <post_op> ]\n");
5887 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-2].reg), &(yyvsp[-6].reg), &(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), 0);
5888 1.1 christos }
5889 1.1 christos }
5890 1.1 christos #line 5891 "config/bfin-parse.c"
5891 1.1 christos break;
5892 1.1 christos
5893 1.1 christos case 187: /* asm_1: REG ASSIGN W LBRACK REG post_op RBRACK xpmod */
5894 1.1 christos #line 3192 "./config/bfin-parse.y"
5895 1.1 christos {
5896 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
5897 1.1 christos return yyerror ("Dreg expected for destination operand");
5898 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
5899 1.1 christos return yyerror ("Preg expected in address");
5900 1.1 christos
5901 1.1 christos notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
5902 1.1 christos (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 1, (yyvsp[0].r0).r0, 0);
5903 1.1 christos }
5904 1.1 christos #line 5905 "config/bfin-parse.c"
5905 1.1 christos break;
5906 1.1 christos
5907 1.1 christos case 188: /* asm_1: REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK xpmod */
5908 1.1 christos #line 3203 "./config/bfin-parse.y"
5909 1.1 christos {
5910 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
5911 1.1 christos return yyerror ("Dreg expected for destination operand");
5912 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)) || !IS_PREG ((yyvsp[-2].reg)))
5913 1.1 christos return yyerror ("Preg expected in address");
5914 1.1 christos
5915 1.1 christos notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
5916 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[-8].reg), &(yyvsp[-2].reg), 3, (yyvsp[0].r0).r0);
5917 1.1 christos }
5918 1.1 christos #line 5919 "config/bfin-parse.c"
5919 1.1 christos break;
5920 1.1 christos
5921 1.1 christos case 189: /* asm_1: HALF_REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK */
5922 1.1 christos #line 3214 "./config/bfin-parse.y"
5923 1.1 christos {
5924 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
5925 1.1 christos return yyerror ("Dreg expected for destination operand");
5926 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)) || !IS_PREG ((yyvsp[-1].reg)))
5927 1.1 christos return yyerror ("Preg expected in address");
5928 1.1 christos
5929 1.1 christos notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
5930 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-7].reg), &(yyvsp[-1].reg), 1 + IS_H ((yyvsp[-7].reg)), 0);
5931 1.1 christos }
5932 1.1 christos #line 5933 "config/bfin-parse.c"
5933 1.1 christos break;
5934 1.1 christos
5935 1.1 christos case 190: /* asm_1: LBRACK REG post_op RBRACK ASSIGN REG */
5936 1.1 christos #line 3225 "./config/bfin-parse.y"
5937 1.1 christos {
5938 1.1 christos if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
5939 1.1 christos return yyerror ("Ireg or Preg expected in address");
5940 1.1 christos else if (IS_IREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)))
5941 1.1 christos return yyerror ("Dreg expected for source operand");
5942 1.1 christos else if (IS_PREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)) && !IS_PREG ((yyvsp[0].reg)))
5943 1.1 christos return yyerror ("Dreg or Preg expected for source operand");
5944 1.1 christos
5945 1.1 christos if (IS_IREG ((yyvsp[-4].reg)))
5946 1.1 christos {
5947 1.1 christos notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
5948 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-4].reg), 0, &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5949 1.1 christos }
5950 1.1 christos else if (IS_DREG ((yyvsp[0].reg)))
5951 1.1 christos {
5952 1.1 christos notethat ("LDST: [ pregs <post_op> ] = dregs\n");
5953 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 0, 1);
5954 1.1 christos }
5955 1.1 christos else
5956 1.1 christos {
5957 1.1 christos notethat ("LDST: [ pregs <post_op> ] = pregs\n");
5958 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 1, 1);
5959 1.1 christos }
5960 1.1 christos }
5961 1.1 christos #line 5962 "config/bfin-parse.c"
5962 1.1 christos break;
5963 1.1 christos
5964 1.1 christos case 191: /* asm_1: LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN REG */
5965 1.1 christos #line 3251 "./config/bfin-parse.y"
5966 1.1 christos {
5967 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5968 1.1 christos return yyerror ("Dreg expected for source operand");
5969 1.1 christos
5970 1.1 christos if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
5971 1.1 christos {
5972 1.1 christos notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
5973 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-5].reg), (yyvsp[-3].reg).regno & CODE_MASK, &(yyvsp[0].reg), 3, 1);
5974 1.1 christos }
5975 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5976 1.1 christos {
5977 1.1 christos notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
5978 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 0, 1);
5979 1.1 christos }
5980 1.1 christos else
5981 1.1 christos return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
5982 1.1 christos }
5983 1.1 christos #line 5984 "config/bfin-parse.c"
5984 1.1 christos break;
5985 1.1 christos
5986 1.1 christos case 192: /* asm_1: W LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN HALF_REG */
5987 1.1 christos #line 3270 "./config/bfin-parse.y"
5988 1.1 christos {
5989 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5990 1.1 christos return yyerror ("Dreg expected for source operand");
5991 1.1 christos
5992 1.1 christos if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5993 1.1 christos {
5994 1.1 christos notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
5995 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5996 1.1 christos }
5997 1.1 christos else
5998 1.1 christos return yyerror ("Preg ++ Preg expected in address");
5999 1.1 christos }
6000 1.1 christos #line 6001 "config/bfin-parse.c"
6001 1.1 christos break;
6002 1.1 christos
6003 1.1 christos case 193: /* asm_1: REG ASSIGN B LBRACK REG plus_minus expr RBRACK xpmod */
6004 1.1 christos #line 3284 "./config/bfin-parse.y"
6005 1.1 christos {
6006 1.1 christos Expr_Node *tmp = (yyvsp[-2].expr);
6007 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
6008 1.1 christos return yyerror ("Dreg expected for destination operand");
6009 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
6010 1.1 christos return yyerror ("Preg expected in address");
6011 1.1 christos
6012 1.1 christos if ((yyvsp[-3].r0).r0)
6013 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6014 1.1 christos
6015 1.1 christos if (IS_RELOC ((yyvsp[-2].expr)))
6016 1.1 christos return yyerror ("Plain symbol used as offset");
6017 1.1 christos
6018 1.1 christos if (in_range_p (tmp, -32768, 32767, 0))
6019 1.1 christos {
6020 1.1 christos notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
6021 1.1 christos (yyvsp[0].r0).r0 ? 'X' : 'Z');
6022 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 2, (yyvsp[0].r0).r0, tmp);
6023 1.1 christos }
6024 1.1 christos else
6025 1.1 christos return yyerror ("Displacement out of range");
6026 1.1 christos }
6027 1.1 christos #line 6028 "config/bfin-parse.c"
6028 1.1 christos break;
6029 1.1 christos
6030 1.1 christos case 194: /* asm_1: REG ASSIGN B LBRACK REG post_op RBRACK xpmod */
6031 1.1 christos #line 3308 "./config/bfin-parse.y"
6032 1.1 christos {
6033 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
6034 1.1 christos return yyerror ("Dreg expected for destination operand");
6035 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
6036 1.1 christos return yyerror ("Preg expected in address");
6037 1.1 christos
6038 1.1 christos notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
6039 1.1 christos (yyvsp[0].r0).r0 ? 'X' : 'Z');
6040 1.1 christos (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 2, (yyvsp[0].r0).r0, 0);
6041 1.1 christos }
6042 1.1 christos #line 6043 "config/bfin-parse.c"
6043 1.1 christos break;
6044 1.1 christos
6045 1.1 christos case 195: /* asm_1: REG ASSIGN LBRACK REG _PLUS_PLUS REG RBRACK */
6046 1.1 christos #line 3320 "./config/bfin-parse.y"
6047 1.1 christos {
6048 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)))
6049 1.1 christos return yyerror ("Dreg expected for destination operand");
6050 1.1 christos
6051 1.1 christos if (IS_IREG ((yyvsp[-3].reg)) && IS_MREG ((yyvsp[-1].reg)))
6052 1.1 christos {
6053 1.1 christos notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
6054 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, &(yyvsp[-6].reg), 3, 0);
6055 1.1 christos }
6056 1.1 christos else if (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
6057 1.1 christos {
6058 1.1 christos notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
6059 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-6].reg), &(yyvsp[-1].reg), 0, 0);
6060 1.1 christos }
6061 1.1 christos else
6062 1.1 christos return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
6063 1.1 christos }
6064 1.1 christos #line 6065 "config/bfin-parse.c"
6065 1.1 christos break;
6066 1.1 christos
6067 1.1 christos case 196: /* asm_1: REG ASSIGN LBRACK REG plus_minus got_or_expr RBRACK */
6068 1.1 christos #line 3339 "./config/bfin-parse.y"
6069 1.1 christos {
6070 1.1 christos Expr_Node *tmp = (yyvsp[-1].expr);
6071 1.1 christos int ispreg = IS_PREG ((yyvsp[-6].reg));
6072 1.1 christos int isgot = IS_RELOC((yyvsp[-1].expr));
6073 1.1 christos
6074 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
6075 1.1 christos return yyerror ("Preg expected in address");
6076 1.1 christos
6077 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)) && !ispreg)
6078 1.1 christos return yyerror ("Dreg or Preg expected for destination operand");
6079 1.1 christos
6080 1.1 christos if (tmp->type == Expr_Node_Reloc
6081 1.1 christos && strcmp (tmp->value.s_value,
6082 1.1 christos "_current_shared_library_p5_offset_") != 0)
6083 1.1 christos return yyerror ("Plain symbol used as offset");
6084 1.1 christos
6085 1.1 christos if ((yyvsp[-2].r0).r0)
6086 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6087 1.1 christos
6088 1.1 christos if (isgot)
6089 1.1 christos {
6090 1.1 christos notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
6091 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
6092 1.1 christos }
6093 1.1 christos else if (in_range_p (tmp, 0, 63, 3))
6094 1.1 christos {
6095 1.1 christos notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
6096 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-3].reg), &(yyvsp[-6].reg), tmp, 0, ispreg ? 3 : 0);
6097 1.1 christos }
6098 1.1 christos else if ((yyvsp[-3].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
6099 1.1 christos {
6100 1.1 christos notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
6101 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6102 1.1 christos (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[-6].reg), 0);
6103 1.1 christos }
6104 1.1 christos else if (in_range_p (tmp, -131072, 131071, 3))
6105 1.1 christos {
6106 1.1 christos notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
6107 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
6108 1.1 christos
6109 1.1 christos }
6110 1.1 christos else
6111 1.1 christos return yyerror ("Displacement out of range");
6112 1.1 christos }
6113 1.1 christos #line 6114 "config/bfin-parse.c"
6114 1.1 christos break;
6115 1.1 christos
6116 1.1 christos case 197: /* asm_1: REG ASSIGN LBRACK REG post_op RBRACK */
6117 1.1 christos #line 3385 "./config/bfin-parse.y"
6118 1.1 christos {
6119 1.1 christos if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
6120 1.1 christos return yyerror ("Ireg or Preg expected in address");
6121 1.1 christos else if (IS_IREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)))
6122 1.1 christos return yyerror ("Dreg expected in destination operand");
6123 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)) && !IS_PREG ((yyvsp[-5].reg))
6124 1.1 christos && ((yyvsp[-2].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[-5].reg)) || (yyvsp[-1].modcodes).x0 != 0))
6125 1.1 christos return yyerror ("Dreg or Preg expected in destination operand");
6126 1.1 christos
6127 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
6128 1.1 christos {
6129 1.1 christos notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
6130 1.1 christos (yyval.instr) = DSPLDST (&(yyvsp[-2].reg), 0, &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0);
6131 1.1 christos }
6132 1.1 christos else if (IS_DREG ((yyvsp[-5].reg)))
6133 1.1 christos {
6134 1.1 christos notethat ("LDST: dregs = [ pregs <post_op> ]\n");
6135 1.1 christos (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 0, 0);
6136 1.1 christos }
6137 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)))
6138 1.1 christos {
6139 1.1 christos if (REG_SAME ((yyvsp[-5].reg), (yyvsp[-2].reg)) && (yyvsp[-1].modcodes).x0 != 2)
6140 1.1 christos return yyerror ("Pregs can't be same");
6141 1.1 christos
6142 1.1 christos notethat ("LDST: pregs = [ pregs <post_op> ]\n");
6143 1.1 christos (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 1, 0);
6144 1.1 christos }
6145 1.1 christos else
6146 1.1 christos {
6147 1.1 christos notethat ("PushPopReg: allregs = [ SP ++ ]\n");
6148 1.1 christos (yyval.instr) = PUSHPOPREG (&(yyvsp[-5].reg), 0);
6149 1.1 christos }
6150 1.1 christos }
6151 1.1 christos #line 6152 "config/bfin-parse.c"
6152 1.1 christos break;
6153 1.1 christos
6154 1.1 christos case 198: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr COMMA REG COLON expr RPAREN */
6155 1.1 christos #line 3422 "./config/bfin-parse.y"
6156 1.1 christos {
6157 1.1 christos if ((yyvsp[-10].reg).regno != REG_SP)
6158 1.1 christos yyerror ("Stack Pointer expected");
6159 1.1 christos if ((yyvsp[-7].reg).regno == REG_R7
6160 1.1 christos && IN_RANGE ((yyvsp[-5].expr), 0, 7)
6161 1.1 christos && (yyvsp[-3].reg).regno == REG_P5
6162 1.1 christos && IN_RANGE ((yyvsp[-1].expr), 0, 5))
6163 1.1 christos {
6164 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
6165 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-5].expr)), imm5 ((yyvsp[-1].expr)), 1, 1, 1);
6166 1.1 christos }
6167 1.1 christos else
6168 1.1 christos return yyerror ("Bad register for PushPopMultiple");
6169 1.1 christos }
6170 1.1 christos #line 6171 "config/bfin-parse.c"
6171 1.1 christos break;
6172 1.1 christos
6173 1.1 christos case 199: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr RPAREN */
6174 1.1 christos #line 3438 "./config/bfin-parse.y"
6175 1.1 christos {
6176 1.1 christos if ((yyvsp[-6].reg).regno != REG_SP)
6177 1.1 christos yyerror ("Stack Pointer expected");
6178 1.1 christos
6179 1.1 christos if ((yyvsp[-3].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-1].expr), 0, 7))
6180 1.1 christos {
6181 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
6182 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-1].expr)), 0, 1, 0, 1);
6183 1.1 christos }
6184 1.1 christos else if ((yyvsp[-3].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-1].expr), 0, 6))
6185 1.1 christos {
6186 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
6187 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-1].expr)), 0, 1, 1);
6188 1.1 christos }
6189 1.1 christos else
6190 1.1 christos return yyerror ("Bad register for PushPopMultiple");
6191 1.1 christos }
6192 1.1 christos #line 6193 "config/bfin-parse.c"
6193 1.1 christos break;
6194 1.1 christos
6195 1.1 christos case 200: /* asm_1: LPAREN REG COLON expr COMMA REG COLON expr RPAREN ASSIGN reg_with_postinc */
6196 1.1 christos #line 3457 "./config/bfin-parse.y"
6197 1.1 christos {
6198 1.1 christos if ((yyvsp[0].reg).regno != REG_SP)
6199 1.1 christos yyerror ("Stack Pointer expected");
6200 1.1 christos if ((yyvsp[-9].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[-7].expr), 0, 7))
6201 1.1 christos && (yyvsp[-5].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[-3].expr), 0, 6)))
6202 1.1 christos {
6203 1.1 christos notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
6204 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-7].expr)), imm5 ((yyvsp[-3].expr)), 1, 1, 0);
6205 1.1 christos }
6206 1.1 christos else
6207 1.1 christos return yyerror ("Bad register range for PushPopMultiple");
6208 1.1 christos }
6209 1.1 christos #line 6210 "config/bfin-parse.c"
6210 1.1 christos break;
6211 1.1 christos
6212 1.1 christos case 201: /* asm_1: LPAREN REG COLON expr RPAREN ASSIGN reg_with_postinc */
6213 1.1 christos #line 3471 "./config/bfin-parse.y"
6214 1.1 christos {
6215 1.1 christos if ((yyvsp[0].reg).regno != REG_SP)
6216 1.1 christos yyerror ("Stack Pointer expected");
6217 1.1 christos
6218 1.1 christos if ((yyvsp[-5].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-3].expr), 0, 7))
6219 1.1 christos {
6220 1.1 christos notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
6221 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-3].expr)), 0, 1, 0, 0);
6222 1.1 christos }
6223 1.1 christos else if ((yyvsp[-5].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-3].expr), 0, 6))
6224 1.1 christos {
6225 1.1 christos notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
6226 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-3].expr)), 0, 1, 0);
6227 1.1 christos }
6228 1.1 christos else
6229 1.1 christos return yyerror ("Bad register range for PushPopMultiple");
6230 1.1 christos }
6231 1.1 christos #line 6232 "config/bfin-parse.c"
6232 1.1 christos break;
6233 1.1 christos
6234 1.1 christos case 202: /* asm_1: reg_with_predec ASSIGN REG */
6235 1.1 christos #line 3490 "./config/bfin-parse.y"
6236 1.1 christos {
6237 1.1 christos if ((yyvsp[-2].reg).regno != REG_SP)
6238 1.1 christos yyerror ("Stack Pointer expected");
6239 1.1 christos
6240 1.1 christos if (IS_ALLREG ((yyvsp[0].reg)))
6241 1.1 christos {
6242 1.1 christos notethat ("PushPopReg: [ -- SP ] = allregs\n");
6243 1.1 christos (yyval.instr) = PUSHPOPREG (&(yyvsp[0].reg), 1);
6244 1.1 christos }
6245 1.1 christos else
6246 1.1 christos return yyerror ("Bad register for PushPopReg");
6247 1.1 christos }
6248 1.1 christos #line 6249 "config/bfin-parse.c"
6249 1.1 christos break;
6250 1.1 christos
6251 1.1 christos case 203: /* asm_1: LINK expr */
6252 1.1 christos #line 3506 "./config/bfin-parse.y"
6253 1.1 christos {
6254 1.1 christos if (IS_URANGE (16, (yyvsp[0].expr), 0, 4))
6255 1.1 christos (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[0].expr)));
6256 1.1 christos else
6257 1.1 christos return yyerror ("Bad constant for LINK");
6258 1.1 christos }
6259 1.1 christos #line 6260 "config/bfin-parse.c"
6260 1.1 christos break;
6261 1.1 christos
6262 1.1 christos case 204: /* asm_1: UNLINK */
6263 1.1 christos #line 3514 "./config/bfin-parse.y"
6264 1.1 christos {
6265 1.1 christos notethat ("linkage: UNLINK\n");
6266 1.1 christos (yyval.instr) = LINKAGE (1, 0);
6267 1.1 christos }
6268 1.1 christos #line 6269 "config/bfin-parse.c"
6269 1.1 christos break;
6270 1.1 christos
6271 1.1 christos case 205: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG */
6272 1.1 christos #line 3523 "./config/bfin-parse.y"
6273 1.1 christos {
6274 1.1 christos if (IS_PCREL4 ((yyvsp[-4].expr)) && IS_LPPCREL10 ((yyvsp[-2].expr)) && IS_CREG ((yyvsp[0].reg)))
6275 1.1 christos {
6276 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
6277 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-4].expr), &(yyvsp[0].reg), 0, (yyvsp[-2].expr), 0);
6278 1.1 christos }
6279 1.1 christos else
6280 1.1 christos return yyerror ("Bad register or values for LSETUP");
6281 1.1 christos
6282 1.1 christos }
6283 1.1 christos #line 6284 "config/bfin-parse.c"
6284 1.1 christos break;
6285 1.1 christos
6286 1.1 christos case 206: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG */
6287 1.1 christos #line 3534 "./config/bfin-parse.y"
6288 1.1 christos {
6289 1.1 christos if (IS_PCREL4 ((yyvsp[-6].expr)) && IS_LPPCREL10 ((yyvsp[-4].expr))
6290 1.1 christos && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
6291 1.1 christos {
6292 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
6293 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-6].expr), &(yyvsp[-2].reg), 1, (yyvsp[-4].expr), &(yyvsp[0].reg));
6294 1.1 christos }
6295 1.1 christos else
6296 1.1 christos return yyerror ("Bad register or values for LSETUP");
6297 1.1 christos }
6298 1.1 christos #line 6299 "config/bfin-parse.c"
6299 1.1 christos break;
6300 1.1 christos
6301 1.1 christos case 207: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG GREATER_GREATER expr */
6302 1.1 christos #line 3546 "./config/bfin-parse.y"
6303 1.1 christos {
6304 1.1 christos if (IS_PCREL4 ((yyvsp[-8].expr)) && IS_LPPCREL10 ((yyvsp[-6].expr))
6305 1.1 christos && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg))
6306 1.1 christos && EXPR_VALUE ((yyvsp[0].expr)) == 1)
6307 1.1 christos {
6308 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
6309 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-8].expr), &(yyvsp[-4].reg), 3, (yyvsp[-6].expr), &(yyvsp[-2].reg));
6310 1.1 christos }
6311 1.1 christos else
6312 1.1 christos return yyerror ("Bad register or values for LSETUP");
6313 1.1 christos }
6314 1.1 christos #line 6315 "config/bfin-parse.c"
6315 1.1 christos break;
6316 1.1 christos
6317 1.1 christos case 208: /* asm_1: LOOP expr REG */
6318 1.1 christos #line 3560 "./config/bfin-parse.y"
6319 1.1 christos {
6320 1.1 christos if (!IS_RELOC ((yyvsp[-1].expr)))
6321 1.1 christos return yyerror ("Invalid expression in loop statement");
6322 1.1 christos if (!IS_CREG ((yyvsp[0].reg)))
6323 1.1 christos return yyerror ("Invalid loop counter register");
6324 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-1].expr), &(yyvsp[0].reg), 0, 0);
6325 1.1 christos }
6326 1.1 christos #line 6327 "config/bfin-parse.c"
6327 1.1 christos break;
6328 1.1 christos
6329 1.1 christos case 209: /* asm_1: LOOP expr REG ASSIGN REG */
6330 1.1 christos #line 3568 "./config/bfin-parse.y"
6331 1.1 christos {
6332 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)) && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
6333 1.1 christos {
6334 1.1 christos notethat ("Loop: LOOP expr counters = pregs\n");
6335 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-3].expr), &(yyvsp[-2].reg), 1, &(yyvsp[0].reg));
6336 1.1 christos }
6337 1.1 christos else
6338 1.1 christos return yyerror ("Bad register or values for LOOP");
6339 1.1 christos }
6340 1.1 christos #line 6341 "config/bfin-parse.c"
6341 1.1 christos break;
6342 1.1 christos
6343 1.1 christos case 210: /* asm_1: LOOP expr REG ASSIGN REG GREATER_GREATER expr */
6344 1.1 christos #line 3578 "./config/bfin-parse.y"
6345 1.1 christos {
6346 1.1 christos if (IS_RELOC ((yyvsp[-5].expr)) && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 1)
6347 1.1 christos {
6348 1.1 christos notethat ("Loop: LOOP expr counters = pregs >> 1\n");
6349 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-5].expr), &(yyvsp[-4].reg), 3, &(yyvsp[-2].reg));
6350 1.1 christos }
6351 1.1 christos else
6352 1.1 christos return yyerror ("Bad register or values for LOOP");
6353 1.1 christos }
6354 1.1 christos #line 6355 "config/bfin-parse.c"
6355 1.1 christos break;
6356 1.1 christos
6357 1.1 christos case 211: /* asm_1: LOOP_BEGIN NUMBER */
6358 1.1 christos #line 3590 "./config/bfin-parse.y"
6359 1.1 christos {
6360 1.1 christos Expr_Node_Value val;
6361 1.1 christos val.i_value = (yyvsp[0].value);
6362 1.1 christos Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
6363 1.1 christos bfin_loop_attempt_create_label (tmp, 1);
6364 1.1 christos if (!IS_RELOC (tmp))
6365 1.1 christos return yyerror ("Invalid expression in LOOP_BEGIN statement");
6366 1.1 christos bfin_loop_beginend (tmp, 1);
6367 1.1 christos (yyval.instr) = 0;
6368 1.1 christos }
6369 1.1 christos #line 6370 "config/bfin-parse.c"
6370 1.1 christos break;
6371 1.1 christos
6372 1.1 christos case 212: /* asm_1: LOOP_BEGIN expr */
6373 1.1 christos #line 3601 "./config/bfin-parse.y"
6374 1.1 christos {
6375 1.1 christos if (!IS_RELOC ((yyvsp[0].expr)))
6376 1.1 christos return yyerror ("Invalid expression in LOOP_BEGIN statement");
6377 1.1 christos
6378 1.1 christos bfin_loop_beginend ((yyvsp[0].expr), 1);
6379 1.1 christos (yyval.instr) = 0;
6380 1.1 christos }
6381 1.1 christos #line 6382 "config/bfin-parse.c"
6382 1.1 christos break;
6383 1.1 christos
6384 1.1 christos case 213: /* asm_1: LOOP_END NUMBER */
6385 1.1 christos #line 3611 "./config/bfin-parse.y"
6386 1.1 christos {
6387 1.1 christos Expr_Node_Value val;
6388 1.1 christos val.i_value = (yyvsp[0].value);
6389 1.1 christos Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
6390 1.1 christos bfin_loop_attempt_create_label (tmp, 1);
6391 1.1 christos if (!IS_RELOC (tmp))
6392 1.1 christos return yyerror ("Invalid expression in LOOP_END statement");
6393 1.1 christos bfin_loop_beginend (tmp, 0);
6394 1.1 christos (yyval.instr) = 0;
6395 1.1 christos }
6396 1.1 christos #line 6397 "config/bfin-parse.c"
6397 1.1 christos break;
6398 1.1 christos
6399 1.1 christos case 214: /* asm_1: LOOP_END expr */
6400 1.1 christos #line 3622 "./config/bfin-parse.y"
6401 1.1 christos {
6402 1.1 christos if (!IS_RELOC ((yyvsp[0].expr)))
6403 1.1 christos return yyerror ("Invalid expression in LOOP_END statement");
6404 1.1 christos
6405 1.1 christos bfin_loop_beginend ((yyvsp[0].expr), 0);
6406 1.1 christos (yyval.instr) = 0;
6407 1.1 christos }
6408 1.1 christos #line 6409 "config/bfin-parse.c"
6409 1.1 christos break;
6410 1.1 christos
6411 1.1 christos case 215: /* asm_1: ABORT */
6412 1.1 christos #line 3633 "./config/bfin-parse.y"
6413 1.1 christos {
6414 1.1 christos notethat ("psedoDEBUG: ABORT\n");
6415 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 3, 0);
6416 1.1 christos }
6417 1.1 christos #line 6418 "config/bfin-parse.c"
6418 1.1 christos break;
6419 1.1 christos
6420 1.1 christos case 216: /* asm_1: DBG */
6421 1.1 christos #line 3639 "./config/bfin-parse.y"
6422 1.1 christos {
6423 1.1 christos notethat ("pseudoDEBUG: DBG\n");
6424 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
6425 1.1 christos }
6426 1.1 christos #line 6427 "config/bfin-parse.c"
6427 1.1 christos break;
6428 1.1 christos
6429 1.1 christos case 217: /* asm_1: DBG REG_A */
6430 1.1 christos #line 3644 "./config/bfin-parse.y"
6431 1.1 christos {
6432 1.1 christos notethat ("pseudoDEBUG: DBG REG_A\n");
6433 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[0].reg)), 0);
6434 1.1 christos }
6435 1.1 christos #line 6436 "config/bfin-parse.c"
6436 1.1 christos break;
6437 1.1 christos
6438 1.1 christos case 218: /* asm_1: DBG REG */
6439 1.1 christos #line 3649 "./config/bfin-parse.y"
6440 1.1 christos {
6441 1.1 christos notethat ("pseudoDEBUG: DBG allregs\n");
6442 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[0].reg).regno & CODE_MASK, ((yyvsp[0].reg).regno & CLASS_MASK) >> 4);
6443 1.1 christos }
6444 1.1 christos #line 6445 "config/bfin-parse.c"
6445 1.1 christos break;
6446 1.1 christos
6447 1.1 christos case 219: /* asm_1: DBGCMPLX LPAREN REG RPAREN */
6448 1.1 christos #line 3655 "./config/bfin-parse.y"
6449 1.1 christos {
6450 1.1 christos if (!IS_DREG ((yyvsp[-1].reg)))
6451 1.1 christos return yyerror ("Dregs expected");
6452 1.1 christos notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
6453 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 6, ((yyvsp[-1].reg).regno & CODE_MASK) >> 4);
6454 1.1 christos }
6455 1.1 christos #line 6456 "config/bfin-parse.c"
6456 1.1 christos break;
6457 1.1 christos
6458 1.1 christos case 220: /* asm_1: DBGHALT */
6459 1.1 christos #line 3663 "./config/bfin-parse.y"
6460 1.1 christos {
6461 1.1 christos notethat ("psedoDEBUG: DBGHALT\n");
6462 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
6463 1.1 christos }
6464 1.1 christos #line 6465 "config/bfin-parse.c"
6465 1.1 christos break;
6466 1.1 christos
6467 1.1 christos case 221: /* asm_1: HLT */
6468 1.1 christos #line 3669 "./config/bfin-parse.y"
6469 1.1 christos {
6470 1.1 christos notethat ("psedoDEBUG: HLT\n");
6471 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0);
6472 1.1 christos }
6473 1.1 christos #line 6474 "config/bfin-parse.c"
6474 1.1 christos break;
6475 1.1 christos
6476 1.1 christos case 222: /* asm_1: DBGA LPAREN HALF_REG COMMA expr RPAREN */
6477 1.1 christos #line 3675 "./config/bfin-parse.y"
6478 1.1 christos {
6479 1.1 christos notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n");
6480 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[-3].reg)), &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6481 1.1 christos }
6482 1.1 christos #line 6483 "config/bfin-parse.c"
6483 1.1 christos break;
6484 1.1 christos
6485 1.1 christos case 223: /* asm_1: DBGAH LPAREN REG COMMA expr RPAREN */
6486 1.1 christos #line 3681 "./config/bfin-parse.y"
6487 1.1 christos {
6488 1.1 christos notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n");
6489 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6490 1.1 christos }
6491 1.1 christos #line 6492 "config/bfin-parse.c"
6492 1.1 christos break;
6493 1.1 christos
6494 1.1 christos case 224: /* asm_1: DBGAL LPAREN REG COMMA expr RPAREN */
6495 1.1 christos #line 3687 "./config/bfin-parse.y"
6496 1.1 christos {
6497 1.1 christos notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n");
6498 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6499 1.1 christos }
6500 1.1 christos #line 6501 "config/bfin-parse.c"
6501 1.1 christos break;
6502 1.1 christos
6503 1.1 christos case 225: /* asm_1: OUTC expr */
6504 1.1 christos #line 3693 "./config/bfin-parse.y"
6505 1.1 christos {
6506 1.1 christos if (!IS_UIMM ((yyvsp[0].expr), 8))
6507 1.1 christos return yyerror ("Constant out of range");
6508 1.1 christos notethat ("psedodbg_assert: OUTC uimm8\n");
6509 1.1 christos (yyval.instr) = bfin_gen_pseudochr (uimm8 ((yyvsp[0].expr)));
6510 1.1 christos }
6511 1.1 christos #line 6512 "config/bfin-parse.c"
6512 1.1 christos break;
6513 1.1 christos
6514 1.1 christos case 226: /* asm_1: OUTC REG */
6515 1.1 christos #line 3701 "./config/bfin-parse.y"
6516 1.1 christos {
6517 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
6518 1.1 christos return yyerror ("Dregs expected");
6519 1.1 christos notethat ("psedodbg_assert: OUTC dreg\n");
6520 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (2, (yyvsp[0].reg).regno & CODE_MASK, 0);
6521 1.1 christos }
6522 1.1 christos #line 6523 "config/bfin-parse.c"
6523 1.1 christos break;
6524 1.1 christos
6525 1.1 christos case 227: /* REG_A: REG_A_DOUBLE_ZERO */
6526 1.1 christos #line 3715 "./config/bfin-parse.y"
6527 1.1 christos {
6528 1.1 christos (yyval.reg) = (yyvsp[0].reg);
6529 1.1 christos }
6530 1.1 christos #line 6531 "config/bfin-parse.c"
6531 1.1 christos break;
6532 1.1 christos
6533 1.1 christos case 228: /* REG_A: REG_A_DOUBLE_ONE */
6534 1.1 christos #line 3719 "./config/bfin-parse.y"
6535 1.1 christos {
6536 1.1 christos (yyval.reg) = (yyvsp[0].reg);
6537 1.1 christos }
6538 1.1 christos #line 6539 "config/bfin-parse.c"
6539 1.1 christos break;
6540 1.1 christos
6541 1.1 christos case 229: /* opt_mode: %empty */
6542 1.1 christos #line 3728 "./config/bfin-parse.y"
6543 1.1 christos {
6544 1.1 christos (yyval.mod).MM = 0;
6545 1.1 christos (yyval.mod).mod = 0;
6546 1.1 christos }
6547 1.1 christos #line 6548 "config/bfin-parse.c"
6548 1.1 christos break;
6549 1.1 christos
6550 1.1 christos case 230: /* opt_mode: LPAREN M COMMA MMOD RPAREN */
6551 1.1 christos #line 3733 "./config/bfin-parse.y"
6552 1.1 christos {
6553 1.1 christos (yyval.mod).MM = 1;
6554 1.1 christos (yyval.mod).mod = (yyvsp[-1].value);
6555 1.1 christos }
6556 1.1 christos #line 6557 "config/bfin-parse.c"
6557 1.1 christos break;
6558 1.1 christos
6559 1.1 christos case 231: /* opt_mode: LPAREN MMOD COMMA M RPAREN */
6560 1.1 christos #line 3738 "./config/bfin-parse.y"
6561 1.1 christos {
6562 1.1 christos (yyval.mod).MM = 1;
6563 1.1 christos (yyval.mod).mod = (yyvsp[-3].value);
6564 1.1 christos }
6565 1.1 christos #line 6566 "config/bfin-parse.c"
6566 1.1 christos break;
6567 1.1 christos
6568 1.1 christos case 232: /* opt_mode: LPAREN MMOD RPAREN */
6569 1.1 christos #line 3743 "./config/bfin-parse.y"
6570 1.1 christos {
6571 1.1 christos (yyval.mod).MM = 0;
6572 1.1 christos (yyval.mod).mod = (yyvsp[-1].value);
6573 1.1 christos }
6574 1.1 christos #line 6575 "config/bfin-parse.c"
6575 1.1 christos break;
6576 1.1 christos
6577 1.1 christos case 233: /* opt_mode: LPAREN M RPAREN */
6578 1.1 christos #line 3748 "./config/bfin-parse.y"
6579 1.1 christos {
6580 1.1 christos (yyval.mod).MM = 1;
6581 1.1 christos (yyval.mod).mod = 0;
6582 1.1 christos }
6583 1.1 christos #line 6584 "config/bfin-parse.c"
6584 1.1 christos break;
6585 1.1 christos
6586 1.1 christos case 234: /* asr_asl: LPAREN ASL RPAREN */
6587 1.1 christos #line 3755 "./config/bfin-parse.y"
6588 1.1 christos {
6589 1.1 christos (yyval.r0).r0 = 1;
6590 1.1 christos }
6591 1.1 christos #line 6592 "config/bfin-parse.c"
6592 1.1 christos break;
6593 1.1 christos
6594 1.1 christos case 235: /* asr_asl: LPAREN ASR RPAREN */
6595 1.1 christos #line 3759 "./config/bfin-parse.y"
6596 1.1 christos {
6597 1.1 christos (yyval.r0).r0 = 0;
6598 1.1 christos }
6599 1.1 christos #line 6600 "config/bfin-parse.c"
6600 1.1 christos break;
6601 1.1 christos
6602 1.1 christos case 236: /* sco: %empty */
6603 1.1 christos #line 3765 "./config/bfin-parse.y"
6604 1.1 christos {
6605 1.1 christos (yyval.modcodes).s0 = 0;
6606 1.1 christos (yyval.modcodes).x0 = 0;
6607 1.1 christos }
6608 1.1 christos #line 6609 "config/bfin-parse.c"
6609 1.1 christos break;
6610 1.1 christos
6611 1.1 christos case 237: /* sco: S */
6612 1.1 christos #line 3770 "./config/bfin-parse.y"
6613 1.1 christos {
6614 1.1 christos (yyval.modcodes).s0 = 1;
6615 1.1 christos (yyval.modcodes).x0 = 0;
6616 1.1 christos }
6617 1.1 christos #line 6618 "config/bfin-parse.c"
6618 1.1 christos break;
6619 1.1 christos
6620 1.1 christos case 238: /* sco: CO */
6621 1.1 christos #line 3775 "./config/bfin-parse.y"
6622 1.1 christos {
6623 1.1 christos (yyval.modcodes).s0 = 0;
6624 1.1 christos (yyval.modcodes).x0 = 1;
6625 1.1 christos }
6626 1.1 christos #line 6627 "config/bfin-parse.c"
6627 1.1 christos break;
6628 1.1 christos
6629 1.1 christos case 239: /* sco: SCO */
6630 1.1 christos #line 3780 "./config/bfin-parse.y"
6631 1.1 christos {
6632 1.1 christos (yyval.modcodes).s0 = 1;
6633 1.1 christos (yyval.modcodes).x0 = 1;
6634 1.1 christos }
6635 1.1 christos #line 6636 "config/bfin-parse.c"
6636 1.1 christos break;
6637 1.1 christos
6638 1.1 christos case 240: /* asr_asl_0: ASL */
6639 1.1 christos #line 3788 "./config/bfin-parse.y"
6640 1.1 christos {
6641 1.1 christos (yyval.r0).r0 = 1;
6642 1.1 christos }
6643 1.1 christos #line 6644 "config/bfin-parse.c"
6644 1.1 christos break;
6645 1.1 christos
6646 1.1 christos case 241: /* asr_asl_0: ASR */
6647 1.1 christos #line 3792 "./config/bfin-parse.y"
6648 1.1 christos {
6649 1.1 christos (yyval.r0).r0 = 0;
6650 1.1 christos }
6651 1.1 christos #line 6652 "config/bfin-parse.c"
6652 1.1 christos break;
6653 1.1 christos
6654 1.1 christos case 242: /* amod0: %empty */
6655 1.1 christos #line 3798 "./config/bfin-parse.y"
6656 1.1 christos {
6657 1.1 christos (yyval.modcodes).s0 = 0;
6658 1.1 christos (yyval.modcodes).x0 = 0;
6659 1.1 christos }
6660 1.1 christos #line 6661 "config/bfin-parse.c"
6661 1.1 christos break;
6662 1.1 christos
6663 1.1 christos case 243: /* amod0: LPAREN sco RPAREN */
6664 1.1 christos #line 3803 "./config/bfin-parse.y"
6665 1.1 christos {
6666 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6667 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6668 1.1 christos }
6669 1.1 christos #line 6670 "config/bfin-parse.c"
6670 1.1 christos break;
6671 1.1 christos
6672 1.1 christos case 244: /* amod1: %empty */
6673 1.1 christos #line 3810 "./config/bfin-parse.y"
6674 1.1 christos {
6675 1.1 christos (yyval.modcodes).s0 = 0;
6676 1.1 christos (yyval.modcodes).x0 = 0;
6677 1.1 christos (yyval.modcodes).aop = 0;
6678 1.1 christos }
6679 1.1 christos #line 6680 "config/bfin-parse.c"
6680 1.1 christos break;
6681 1.1 christos
6682 1.1 christos case 245: /* amod1: LPAREN NS RPAREN */
6683 1.1 christos #line 3816 "./config/bfin-parse.y"
6684 1.1 christos {
6685 1.1 christos (yyval.modcodes).s0 = 0;
6686 1.1 christos (yyval.modcodes).x0 = 0;
6687 1.1 christos (yyval.modcodes).aop = 1;
6688 1.1 christos }
6689 1.1 christos #line 6690 "config/bfin-parse.c"
6690 1.1 christos break;
6691 1.1 christos
6692 1.1 christos case 246: /* amod1: LPAREN S RPAREN */
6693 1.1 christos #line 3822 "./config/bfin-parse.y"
6694 1.1 christos {
6695 1.1 christos (yyval.modcodes).s0 = 1;
6696 1.1 christos (yyval.modcodes).x0 = 0;
6697 1.1 christos (yyval.modcodes).aop = 1;
6698 1.1 christos }
6699 1.1 christos #line 6700 "config/bfin-parse.c"
6700 1.1 christos break;
6701 1.1 christos
6702 1.1 christos case 247: /* amod2: %empty */
6703 1.1 christos #line 3830 "./config/bfin-parse.y"
6704 1.1 christos {
6705 1.1 christos (yyval.modcodes).r0 = 0;
6706 1.1 christos (yyval.modcodes).s0 = 0;
6707 1.1 christos (yyval.modcodes).x0 = 0;
6708 1.1 christos }
6709 1.1 christos #line 6710 "config/bfin-parse.c"
6710 1.1 christos break;
6711 1.1 christos
6712 1.1 christos case 248: /* amod2: LPAREN asr_asl_0 RPAREN */
6713 1.1 christos #line 3836 "./config/bfin-parse.y"
6714 1.1 christos {
6715 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6716 1.1 christos (yyval.modcodes).s0 = 0;
6717 1.1 christos (yyval.modcodes).x0 = 0;
6718 1.1 christos }
6719 1.1 christos #line 6720 "config/bfin-parse.c"
6720 1.1 christos break;
6721 1.1 christos
6722 1.1 christos case 249: /* amod2: LPAREN sco RPAREN */
6723 1.1 christos #line 3842 "./config/bfin-parse.y"
6724 1.1 christos {
6725 1.1 christos (yyval.modcodes).r0 = 0;
6726 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6727 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6728 1.1 christos }
6729 1.1 christos #line 6730 "config/bfin-parse.c"
6730 1.1 christos break;
6731 1.1 christos
6732 1.1 christos case 250: /* amod2: LPAREN asr_asl_0 COMMA sco RPAREN */
6733 1.1 christos #line 3848 "./config/bfin-parse.y"
6734 1.1 christos {
6735 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-3].r0).r0;
6736 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6737 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6738 1.1 christos }
6739 1.1 christos #line 6740 "config/bfin-parse.c"
6740 1.1 christos break;
6741 1.1 christos
6742 1.1 christos case 251: /* amod2: LPAREN sco COMMA asr_asl_0 RPAREN */
6743 1.1 christos #line 3854 "./config/bfin-parse.y"
6744 1.1 christos {
6745 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6746 1.1 christos (yyval.modcodes).s0 = (yyvsp[-3].modcodes).s0;
6747 1.1 christos (yyval.modcodes).x0 = (yyvsp[-3].modcodes).x0;
6748 1.1 christos }
6749 1.1 christos #line 6750 "config/bfin-parse.c"
6750 1.1 christos break;
6751 1.1 christos
6752 1.1 christos case 252: /* xpmod: %empty */
6753 1.1 christos #line 3862 "./config/bfin-parse.y"
6754 1.1 christos {
6755 1.1 christos (yyval.r0).r0 = 0;
6756 1.1 christos }
6757 1.1 christos #line 6758 "config/bfin-parse.c"
6758 1.1 christos break;
6759 1.1 christos
6760 1.1 christos case 253: /* xpmod: LPAREN Z RPAREN */
6761 1.1 christos #line 3866 "./config/bfin-parse.y"
6762 1.1 christos {
6763 1.1 christos (yyval.r0).r0 = 0;
6764 1.1 christos }
6765 1.1 christos #line 6766 "config/bfin-parse.c"
6766 1.1 christos break;
6767 1.1 christos
6768 1.1 christos case 254: /* xpmod: LPAREN X RPAREN */
6769 1.1 christos #line 3870 "./config/bfin-parse.y"
6770 1.1 christos {
6771 1.1 christos (yyval.r0).r0 = 1;
6772 1.1 christos }
6773 1.1 christos #line 6774 "config/bfin-parse.c"
6774 1.1 christos break;
6775 1.1 christos
6776 1.1 christos case 255: /* xpmod1: %empty */
6777 1.1 christos #line 3876 "./config/bfin-parse.y"
6778 1.1 christos {
6779 1.1 christos (yyval.r0).r0 = 0;
6780 1.1 christos }
6781 1.1 christos #line 6782 "config/bfin-parse.c"
6782 1.1 christos break;
6783 1.1 christos
6784 1.1 christos case 256: /* xpmod1: LPAREN X RPAREN */
6785 1.1 christos #line 3880 "./config/bfin-parse.y"
6786 1.1 christos {
6787 1.1 christos (yyval.r0).r0 = 0;
6788 1.1 christos }
6789 1.1 christos #line 6790 "config/bfin-parse.c"
6790 1.1 christos break;
6791 1.1 christos
6792 1.1 christos case 257: /* xpmod1: LPAREN Z RPAREN */
6793 1.1 christos #line 3884 "./config/bfin-parse.y"
6794 1.1 christos {
6795 1.1 christos (yyval.r0).r0 = 1;
6796 1.1 christos }
6797 1.1 christos #line 6798 "config/bfin-parse.c"
6798 1.1 christos break;
6799 1.1 christos
6800 1.1 christos case 258: /* vsmod: %empty */
6801 1.1 christos #line 3890 "./config/bfin-parse.y"
6802 1.1 christos {
6803 1.1 christos (yyval.modcodes).r0 = 0;
6804 1.1 christos (yyval.modcodes).s0 = 0;
6805 1.1 christos (yyval.modcodes).aop = 0;
6806 1.1 christos }
6807 1.1 christos #line 6808 "config/bfin-parse.c"
6808 1.1 christos break;
6809 1.1 christos
6810 1.1 christos case 259: /* vsmod: LPAREN NS RPAREN */
6811 1.1 christos #line 3896 "./config/bfin-parse.y"
6812 1.1 christos {
6813 1.1 christos (yyval.modcodes).r0 = 0;
6814 1.1 christos (yyval.modcodes).s0 = 0;
6815 1.1 christos (yyval.modcodes).aop = 3;
6816 1.1 christos }
6817 1.1 christos #line 6818 "config/bfin-parse.c"
6818 1.1 christos break;
6819 1.1 christos
6820 1.1 christos case 260: /* vsmod: LPAREN S RPAREN */
6821 1.1 christos #line 3902 "./config/bfin-parse.y"
6822 1.1 christos {
6823 1.1 christos (yyval.modcodes).r0 = 0;
6824 1.1 christos (yyval.modcodes).s0 = 1;
6825 1.1 christos (yyval.modcodes).aop = 3;
6826 1.1 christos }
6827 1.1 christos #line 6828 "config/bfin-parse.c"
6828 1.1 christos break;
6829 1.1 christos
6830 1.1 christos case 261: /* vsmod: LPAREN V RPAREN */
6831 1.1 christos #line 3908 "./config/bfin-parse.y"
6832 1.1 christos {
6833 1.1 christos (yyval.modcodes).r0 = 1;
6834 1.1 christos (yyval.modcodes).s0 = 0;
6835 1.1 christos (yyval.modcodes).aop = 3;
6836 1.1 christos }
6837 1.1 christos #line 6838 "config/bfin-parse.c"
6838 1.1 christos break;
6839 1.1 christos
6840 1.1 christos case 262: /* vsmod: LPAREN V COMMA S RPAREN */
6841 1.1 christos #line 3914 "./config/bfin-parse.y"
6842 1.1 christos {
6843 1.1 christos (yyval.modcodes).r0 = 1;
6844 1.1 christos (yyval.modcodes).s0 = 1;
6845 1.1 christos }
6846 1.1 christos #line 6847 "config/bfin-parse.c"
6847 1.1 christos break;
6848 1.1 christos
6849 1.1 christos case 263: /* vsmod: LPAREN S COMMA V RPAREN */
6850 1.1 christos #line 3919 "./config/bfin-parse.y"
6851 1.1 christos {
6852 1.1 christos (yyval.modcodes).r0 = 1;
6853 1.1 christos (yyval.modcodes).s0 = 1;
6854 1.1 christos }
6855 1.1 christos #line 6856 "config/bfin-parse.c"
6856 1.1 christos break;
6857 1.1 christos
6858 1.1 christos case 264: /* vmod: %empty */
6859 1.1 christos #line 3926 "./config/bfin-parse.y"
6860 1.1 christos {
6861 1.1 christos (yyval.r0).r0 = 0;
6862 1.1 christos }
6863 1.1 christos #line 6864 "config/bfin-parse.c"
6864 1.1 christos break;
6865 1.1 christos
6866 1.1 christos case 265: /* vmod: LPAREN V RPAREN */
6867 1.1 christos #line 3930 "./config/bfin-parse.y"
6868 1.1 christos {
6869 1.1 christos (yyval.r0).r0 = 1;
6870 1.1 christos }
6871 1.1 christos #line 6872 "config/bfin-parse.c"
6872 1.1 christos break;
6873 1.1 christos
6874 1.1 christos case 266: /* smod: %empty */
6875 1.1 christos #line 3936 "./config/bfin-parse.y"
6876 1.1 christos {
6877 1.1 christos (yyval.modcodes).s0 = 0;
6878 1.1 christos }
6879 1.1 christos #line 6880 "config/bfin-parse.c"
6880 1.1 christos break;
6881 1.1 christos
6882 1.1 christos case 267: /* smod: LPAREN S RPAREN */
6883 1.1 christos #line 3940 "./config/bfin-parse.y"
6884 1.1 christos {
6885 1.1 christos (yyval.modcodes).s0 = 1;
6886 1.1 christos }
6887 1.1 christos #line 6888 "config/bfin-parse.c"
6888 1.1 christos break;
6889 1.1 christos
6890 1.1 christos case 268: /* searchmod: GE */
6891 1.1 christos #line 3947 "./config/bfin-parse.y"
6892 1.1 christos {
6893 1.1 christos (yyval.r0).r0 = 1;
6894 1.1 christos }
6895 1.1 christos #line 6896 "config/bfin-parse.c"
6896 1.1 christos break;
6897 1.1 christos
6898 1.1 christos case 269: /* searchmod: GT */
6899 1.1 christos #line 3951 "./config/bfin-parse.y"
6900 1.1 christos {
6901 1.1 christos (yyval.r0).r0 = 0;
6902 1.1 christos }
6903 1.1 christos #line 6904 "config/bfin-parse.c"
6904 1.1 christos break;
6905 1.1 christos
6906 1.1 christos case 270: /* searchmod: LE */
6907 1.1 christos #line 3955 "./config/bfin-parse.y"
6908 1.1 christos {
6909 1.1 christos (yyval.r0).r0 = 3;
6910 1.1 christos }
6911 1.1 christos #line 6912 "config/bfin-parse.c"
6912 1.1 christos break;
6913 1.1 christos
6914 1.1 christos case 271: /* searchmod: LT */
6915 1.1 christos #line 3959 "./config/bfin-parse.y"
6916 1.1 christos {
6917 1.1 christos (yyval.r0).r0 = 2;
6918 1.1 christos }
6919 1.1 christos #line 6920 "config/bfin-parse.c"
6920 1.1 christos break;
6921 1.1 christos
6922 1.1 christos case 272: /* aligndir: %empty */
6923 1.1 christos #line 3965 "./config/bfin-parse.y"
6924 1.1 christos {
6925 1.1 christos (yyval.r0).r0 = 0;
6926 1.1 christos }
6927 1.1 christos #line 6928 "config/bfin-parse.c"
6928 1.1 christos break;
6929 1.1 christos
6930 1.1 christos case 273: /* aligndir: LPAREN R RPAREN */
6931 1.1 christos #line 3969 "./config/bfin-parse.y"
6932 1.1 christos {
6933 1.1 christos (yyval.r0).r0 = 1;
6934 1.1 christos }
6935 1.1 christos #line 6936 "config/bfin-parse.c"
6936 1.1 christos break;
6937 1.1 christos
6938 1.1 christos case 274: /* byteop_mod: LPAREN R RPAREN */
6939 1.1 christos #line 3976 "./config/bfin-parse.y"
6940 1.1 christos {
6941 1.1 christos (yyval.modcodes).r0 = 0;
6942 1.1 christos (yyval.modcodes).s0 = 1;
6943 1.1 christos }
6944 1.1 christos #line 6945 "config/bfin-parse.c"
6945 1.1 christos break;
6946 1.1 christos
6947 1.1 christos case 275: /* byteop_mod: LPAREN MMOD RPAREN */
6948 1.1 christos #line 3981 "./config/bfin-parse.y"
6949 1.1 christos {
6950 1.1 christos if ((yyvsp[-1].value) != M_T)
6951 1.1 christos return yyerror ("Bad modifier");
6952 1.1 christos (yyval.modcodes).r0 = 1;
6953 1.1 christos (yyval.modcodes).s0 = 0;
6954 1.1 christos }
6955 1.1 christos #line 6956 "config/bfin-parse.c"
6956 1.1 christos break;
6957 1.1 christos
6958 1.1 christos case 276: /* byteop_mod: LPAREN MMOD COMMA R RPAREN */
6959 1.1 christos #line 3988 "./config/bfin-parse.y"
6960 1.1 christos {
6961 1.1 christos if ((yyvsp[-3].value) != M_T)
6962 1.1 christos return yyerror ("Bad modifier");
6963 1.1 christos (yyval.modcodes).r0 = 1;
6964 1.1 christos (yyval.modcodes).s0 = 1;
6965 1.1 christos }
6966 1.1 christos #line 6967 "config/bfin-parse.c"
6967 1.1 christos break;
6968 1.1 christos
6969 1.1 christos case 277: /* byteop_mod: LPAREN R COMMA MMOD RPAREN */
6970 1.1 christos #line 3995 "./config/bfin-parse.y"
6971 1.1 christos {
6972 1.1 christos if ((yyvsp[-1].value) != M_T)
6973 1.1 christos return yyerror ("Bad modifier");
6974 1.1 christos (yyval.modcodes).r0 = 1;
6975 1.1 christos (yyval.modcodes).s0 = 1;
6976 1.1 christos }
6977 1.1 christos #line 6978 "config/bfin-parse.c"
6978 1.1 christos break;
6979 1.1 christos
6980 1.1 christos case 278: /* c_align: ALIGN8 */
6981 1.1 christos #line 4007 "./config/bfin-parse.y"
6982 1.1 christos {
6983 1.1 christos (yyval.r0).r0 = 0;
6984 1.1 christos }
6985 1.1 christos #line 6986 "config/bfin-parse.c"
6986 1.1 christos break;
6987 1.1 christos
6988 1.1 christos case 279: /* c_align: ALIGN16 */
6989 1.1 christos #line 4011 "./config/bfin-parse.y"
6990 1.1 christos {
6991 1.1 christos (yyval.r0).r0 = 1;
6992 1.1 christos }
6993 1.1 christos #line 6994 "config/bfin-parse.c"
6994 1.1 christos break;
6995 1.1 christos
6996 1.1 christos case 280: /* c_align: ALIGN24 */
6997 1.1 christos #line 4015 "./config/bfin-parse.y"
6998 1.1 christos {
6999 1.1 christos (yyval.r0).r0 = 2;
7000 1.1 christos }
7001 1.1 christos #line 7002 "config/bfin-parse.c"
7002 1.1 christos break;
7003 1.1 christos
7004 1.1 christos case 281: /* w32_or_nothing: %empty */
7005 1.1 christos #line 4021 "./config/bfin-parse.y"
7006 1.1 christos {
7007 1.1 christos (yyval.r0).r0 = 0;
7008 1.1 christos }
7009 1.1 christos #line 7010 "config/bfin-parse.c"
7010 1.1 christos break;
7011 1.1 christos
7012 1.1 christos case 282: /* w32_or_nothing: LPAREN MMOD RPAREN */
7013 1.1 christos #line 4025 "./config/bfin-parse.y"
7014 1.1 christos {
7015 1.1 christos if ((yyvsp[-1].value) == M_W32)
7016 1.1 christos (yyval.r0).r0 = 1;
7017 1.1 christos else
7018 1.1 christos return yyerror ("Only (W32) allowed");
7019 1.1 christos }
7020 1.1 christos #line 7021 "config/bfin-parse.c"
7021 1.1 christos break;
7022 1.1 christos
7023 1.1 christos case 283: /* iu_or_nothing: %empty */
7024 1.1 christos #line 4034 "./config/bfin-parse.y"
7025 1.1 christos {
7026 1.1 christos (yyval.r0).r0 = 1;
7027 1.1 christos }
7028 1.1 christos #line 7029 "config/bfin-parse.c"
7029 1.1 christos break;
7030 1.1 christos
7031 1.1 christos case 284: /* iu_or_nothing: LPAREN MMOD RPAREN */
7032 1.1 christos #line 4038 "./config/bfin-parse.y"
7033 1.1 christos {
7034 1.1 christos if ((yyvsp[-1].value) == M_IU)
7035 1.1 christos (yyval.r0).r0 = 3;
7036 1.1 christos else
7037 1.1 christos return yyerror ("(IU) expected");
7038 1.1 christos }
7039 1.1 christos #line 7040 "config/bfin-parse.c"
7040 1.1 christos break;
7041 1.1 christos
7042 1.1 christos case 285: /* reg_with_predec: LBRACK _MINUS_MINUS REG RBRACK */
7043 1.1 christos #line 4047 "./config/bfin-parse.y"
7044 1.1 christos {
7045 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7046 1.1 christos }
7047 1.1 christos #line 7048 "config/bfin-parse.c"
7048 1.1 christos break;
7049 1.1 christos
7050 1.1 christos case 286: /* reg_with_postinc: LBRACK REG _PLUS_PLUS RBRACK */
7051 1.1 christos #line 4053 "./config/bfin-parse.y"
7052 1.1 christos {
7053 1.1 christos (yyval.reg) = (yyvsp[-2].reg);
7054 1.1 christos }
7055 1.1 christos #line 7056 "config/bfin-parse.c"
7056 1.1 christos break;
7057 1.1 christos
7058 1.1 christos case 287: /* min_max: MIN */
7059 1.1 christos #line 4062 "./config/bfin-parse.y"
7060 1.1 christos {
7061 1.1 christos (yyval.r0).r0 = 1;
7062 1.1 christos }
7063 1.1 christos #line 7064 "config/bfin-parse.c"
7064 1.1 christos break;
7065 1.1 christos
7066 1.1 christos case 288: /* min_max: MAX */
7067 1.1 christos #line 4066 "./config/bfin-parse.y"
7068 1.1 christos {
7069 1.1 christos (yyval.r0).r0 = 0;
7070 1.1 christos }
7071 1.1 christos #line 7072 "config/bfin-parse.c"
7072 1.1 christos break;
7073 1.1 christos
7074 1.1 christos case 289: /* op_bar_op: _PLUS_BAR_PLUS */
7075 1.1 christos #line 4073 "./config/bfin-parse.y"
7076 1.1 christos {
7077 1.1 christos (yyval.r0).r0 = 0;
7078 1.1 christos }
7079 1.1 christos #line 7080 "config/bfin-parse.c"
7080 1.1 christos break;
7081 1.1 christos
7082 1.1 christos case 290: /* op_bar_op: _PLUS_BAR_MINUS */
7083 1.1 christos #line 4077 "./config/bfin-parse.y"
7084 1.1 christos {
7085 1.1 christos (yyval.r0).r0 = 1;
7086 1.1 christos }
7087 1.1 christos #line 7088 "config/bfin-parse.c"
7088 1.1 christos break;
7089 1.1 christos
7090 1.1 christos case 291: /* op_bar_op: _MINUS_BAR_PLUS */
7091 1.1 christos #line 4081 "./config/bfin-parse.y"
7092 1.1 christos {
7093 1.1 christos (yyval.r0).r0 = 2;
7094 1.1 christos }
7095 1.1 christos #line 7096 "config/bfin-parse.c"
7096 1.1 christos break;
7097 1.1 christos
7098 1.1 christos case 292: /* op_bar_op: _MINUS_BAR_MINUS */
7099 1.1 christos #line 4085 "./config/bfin-parse.y"
7100 1.1 christos {
7101 1.1 christos (yyval.r0).r0 = 3;
7102 1.1 christos }
7103 1.1 christos #line 7104 "config/bfin-parse.c"
7104 1.1 christos break;
7105 1.1 christos
7106 1.1 christos case 293: /* plus_minus: PLUS */
7107 1.1 christos #line 4092 "./config/bfin-parse.y"
7108 1.1 christos {
7109 1.1 christos (yyval.r0).r0 = 0;
7110 1.1 christos }
7111 1.1 christos #line 7112 "config/bfin-parse.c"
7112 1.1 christos break;
7113 1.1 christos
7114 1.1 christos case 294: /* plus_minus: MINUS */
7115 1.1 christos #line 4096 "./config/bfin-parse.y"
7116 1.1 christos {
7117 1.1 christos (yyval.r0).r0 = 1;
7118 1.1 christos }
7119 1.1 christos #line 7120 "config/bfin-parse.c"
7120 1.1 christos break;
7121 1.1 christos
7122 1.1 christos case 295: /* rnd_op: LPAREN RNDH RPAREN */
7123 1.1 christos #line 4103 "./config/bfin-parse.y"
7124 1.1 christos {
7125 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7126 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7127 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7128 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7129 1.1 christos }
7130 1.1 christos #line 7131 "config/bfin-parse.c"
7131 1.1 christos break;
7132 1.1 christos
7133 1.1 christos case 296: /* rnd_op: LPAREN TH RPAREN */
7134 1.1 christos #line 4111 "./config/bfin-parse.y"
7135 1.1 christos {
7136 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7137 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7138 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7139 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7140 1.1 christos }
7141 1.1 christos #line 7142 "config/bfin-parse.c"
7142 1.1 christos break;
7143 1.1 christos
7144 1.1 christos case 297: /* rnd_op: LPAREN RNDL RPAREN */
7145 1.1 christos #line 4119 "./config/bfin-parse.y"
7146 1.1 christos {
7147 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7148 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7149 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7150 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7151 1.1 christos }
7152 1.1 christos #line 7153 "config/bfin-parse.c"
7153 1.1 christos break;
7154 1.1 christos
7155 1.1 christos case 298: /* rnd_op: LPAREN TL RPAREN */
7156 1.1 christos #line 4127 "./config/bfin-parse.y"
7157 1.1 christos {
7158 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7159 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7160 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7161 1.1 christos (yyval.modcodes).aop = 1;
7162 1.1 christos }
7163 1.1 christos #line 7164 "config/bfin-parse.c"
7164 1.1 christos break;
7165 1.1 christos
7166 1.1 christos case 299: /* rnd_op: LPAREN RNDH COMMA R RPAREN */
7167 1.1 christos #line 4135 "./config/bfin-parse.y"
7168 1.1 christos {
7169 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7170 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7171 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7172 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7173 1.1 christos }
7174 1.1 christos #line 7175 "config/bfin-parse.c"
7175 1.1 christos break;
7176 1.1 christos
7177 1.1 christos case 300: /* rnd_op: LPAREN TH COMMA R RPAREN */
7178 1.1 christos #line 4142 "./config/bfin-parse.y"
7179 1.1 christos {
7180 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7181 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7182 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7183 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7184 1.1 christos }
7185 1.1 christos #line 7186 "config/bfin-parse.c"
7186 1.1 christos break;
7187 1.1 christos
7188 1.1 christos case 301: /* rnd_op: LPAREN RNDL COMMA R RPAREN */
7189 1.1 christos #line 4149 "./config/bfin-parse.y"
7190 1.1 christos {
7191 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7192 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7193 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7194 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7195 1.1 christos }
7196 1.1 christos #line 7197 "config/bfin-parse.c"
7197 1.1 christos break;
7198 1.1 christos
7199 1.1 christos case 302: /* rnd_op: LPAREN TL COMMA R RPAREN */
7200 1.1 christos #line 4157 "./config/bfin-parse.y"
7201 1.1 christos {
7202 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7203 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7204 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7205 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7206 1.1 christos }
7207 1.1 christos #line 7208 "config/bfin-parse.c"
7208 1.1 christos break;
7209 1.1 christos
7210 1.1 christos case 303: /* b3_op: LPAREN LO RPAREN */
7211 1.1 christos #line 4167 "./config/bfin-parse.y"
7212 1.1 christos {
7213 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7214 1.1 christos (yyval.modcodes).x0 = 0; /* HL. */
7215 1.1 christos }
7216 1.1 christos #line 7217 "config/bfin-parse.c"
7217 1.1 christos break;
7218 1.1 christos
7219 1.1 christos case 304: /* b3_op: LPAREN HI RPAREN */
7220 1.1 christos #line 4172 "./config/bfin-parse.y"
7221 1.1 christos {
7222 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7223 1.1 christos (yyval.modcodes).x0 = 1; /* HL. */
7224 1.1 christos }
7225 1.1 christos #line 7226 "config/bfin-parse.c"
7226 1.1 christos break;
7227 1.1 christos
7228 1.1 christos case 305: /* b3_op: LPAREN LO COMMA R RPAREN */
7229 1.1 christos #line 4177 "./config/bfin-parse.y"
7230 1.1 christos {
7231 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7232 1.1 christos (yyval.modcodes).x0 = 0; /* HL. */
7233 1.1 christos }
7234 1.1 christos #line 7235 "config/bfin-parse.c"
7235 1.1 christos break;
7236 1.1 christos
7237 1.1 christos case 306: /* b3_op: LPAREN HI COMMA R RPAREN */
7238 1.1 christos #line 4182 "./config/bfin-parse.y"
7239 1.1 christos {
7240 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7241 1.1 christos (yyval.modcodes).x0 = 1; /* HL. */
7242 1.1 christos }
7243 1.1 christos #line 7244 "config/bfin-parse.c"
7244 1.1 christos break;
7245 1.1 christos
7246 1.1 christos case 307: /* post_op: %empty */
7247 1.1 christos #line 4189 "./config/bfin-parse.y"
7248 1.1 christos {
7249 1.1 christos (yyval.modcodes).x0 = 2;
7250 1.1 christos }
7251 1.1 christos #line 7252 "config/bfin-parse.c"
7252 1.1 christos break;
7253 1.1 christos
7254 1.1 christos case 308: /* post_op: _PLUS_PLUS */
7255 1.1 christos #line 4193 "./config/bfin-parse.y"
7256 1.1 christos {
7257 1.1 christos (yyval.modcodes).x0 = 0;
7258 1.1 christos }
7259 1.1 christos #line 7260 "config/bfin-parse.c"
7260 1.1 christos break;
7261 1.1 christos
7262 1.1 christos case 309: /* post_op: _MINUS_MINUS */
7263 1.1 christos #line 4197 "./config/bfin-parse.y"
7264 1.1 christos {
7265 1.1 christos (yyval.modcodes).x0 = 1;
7266 1.1 christos }
7267 1.1 christos #line 7268 "config/bfin-parse.c"
7268 1.1 christos break;
7269 1.1 christos
7270 1.1 christos case 310: /* a_assign: REG_A ASSIGN */
7271 1.1 christos #line 4206 "./config/bfin-parse.y"
7272 1.1 christos {
7273 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7274 1.1 christos }
7275 1.1 christos #line 7276 "config/bfin-parse.c"
7276 1.1 christos break;
7277 1.1 christos
7278 1.1 christos case 311: /* a_minusassign: REG_A _MINUS_ASSIGN */
7279 1.1 christos #line 4213 "./config/bfin-parse.y"
7280 1.1 christos {
7281 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7282 1.1 christos }
7283 1.1 christos #line 7284 "config/bfin-parse.c"
7284 1.1 christos break;
7285 1.1 christos
7286 1.1 christos case 312: /* a_plusassign: REG_A _PLUS_ASSIGN */
7287 1.1 christos #line 4220 "./config/bfin-parse.y"
7288 1.1 christos {
7289 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7290 1.1 christos }
7291 1.1 christos #line 7292 "config/bfin-parse.c"
7292 1.1 christos break;
7293 1.1 christos
7294 1.1 christos case 313: /* assign_macfunc: REG ASSIGN REG_A */
7295 1.1 christos #line 4227 "./config/bfin-parse.y"
7296 1.1 christos {
7297 1.1 christos if (IS_A1 ((yyvsp[0].reg)) && IS_EVEN ((yyvsp[-2].reg)))
7298 1.1 christos return yyerror ("Cannot move A1 to even register");
7299 1.1 christos else if (!IS_A1 ((yyvsp[0].reg)) && !IS_EVEN ((yyvsp[-2].reg)))
7300 1.1 christos return yyerror ("Cannot move A0 to odd register");
7301 1.1 christos
7302 1.1 christos (yyval.macfunc).w = 1;
7303 1.1 christos (yyval.macfunc).P = 1;
7304 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
7305 1.1 christos (yyval.macfunc).op = 3;
7306 1.1 christos (yyval.macfunc).dst = (yyvsp[-2].reg);
7307 1.1 christos (yyval.macfunc).s0.regno = 0;
7308 1.1 christos (yyval.macfunc).s1.regno = 0;
7309 1.1 christos }
7310 1.1 christos #line 7311 "config/bfin-parse.c"
7311 1.1 christos break;
7312 1.1 christos
7313 1.1 christos case 314: /* assign_macfunc: a_macfunc */
7314 1.1 christos #line 4242 "./config/bfin-parse.y"
7315 1.1 christos {
7316 1.1 christos (yyval.macfunc) = (yyvsp[0].macfunc);
7317 1.1 christos (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
7318 1.1 christos (yyval.macfunc).dst.regno = 0;
7319 1.1 christos }
7320 1.1 christos #line 7321 "config/bfin-parse.c"
7321 1.1 christos break;
7322 1.1 christos
7323 1.1 christos case 315: /* assign_macfunc: REG ASSIGN LPAREN a_macfunc RPAREN */
7324 1.1 christos #line 4248 "./config/bfin-parse.y"
7325 1.1 christos {
7326 1.1 christos if ((yyvsp[-1].macfunc).n && IS_EVEN ((yyvsp[-4].reg)))
7327 1.1 christos return yyerror ("Cannot move A1 to even register");
7328 1.1 christos else if (!(yyvsp[-1].macfunc).n && !IS_EVEN ((yyvsp[-4].reg)))
7329 1.1 christos return yyerror ("Cannot move A0 to odd register");
7330 1.1 christos
7331 1.1 christos (yyval.macfunc) = (yyvsp[-1].macfunc);
7332 1.1 christos (yyval.macfunc).w = 1;
7333 1.1 christos (yyval.macfunc).P = 1;
7334 1.1 christos (yyval.macfunc).dst = (yyvsp[-4].reg);
7335 1.1 christos }
7336 1.1 christos #line 7337 "config/bfin-parse.c"
7337 1.1 christos break;
7338 1.1 christos
7339 1.1 christos case 316: /* assign_macfunc: HALF_REG ASSIGN LPAREN a_macfunc RPAREN */
7340 1.1 christos #line 4261 "./config/bfin-parse.y"
7341 1.1 christos {
7342 1.1 christos if ((yyvsp[-1].macfunc).n && !IS_H ((yyvsp[-4].reg)))
7343 1.1 christos return yyerror ("Cannot move A1 to low half of register");
7344 1.1 christos else if (!(yyvsp[-1].macfunc).n && IS_H ((yyvsp[-4].reg)))
7345 1.1 christos return yyerror ("Cannot move A0 to high half of register");
7346 1.1 christos
7347 1.1 christos (yyval.macfunc) = (yyvsp[-1].macfunc);
7348 1.1 christos (yyval.macfunc).w = 1;
7349 1.1 christos (yyval.macfunc).P = 0;
7350 1.1 christos (yyval.macfunc).dst = (yyvsp[-4].reg);
7351 1.1 christos }
7352 1.1 christos #line 7353 "config/bfin-parse.c"
7353 1.1 christos break;
7354 1.1 christos
7355 1.1 christos case 317: /* assign_macfunc: HALF_REG ASSIGN REG_A */
7356 1.1 christos #line 4274 "./config/bfin-parse.y"
7357 1.1 christos {
7358 1.1 christos if (IS_A1 ((yyvsp[0].reg)) && !IS_H ((yyvsp[-2].reg)))
7359 1.1 christos return yyerror ("Cannot move A1 to low half of register");
7360 1.1 christos else if (!IS_A1 ((yyvsp[0].reg)) && IS_H ((yyvsp[-2].reg)))
7361 1.1 christos return yyerror ("Cannot move A0 to high half of register");
7362 1.1 christos
7363 1.1 christos (yyval.macfunc).w = 1;
7364 1.1 christos (yyval.macfunc).P = 0;
7365 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
7366 1.1 christos (yyval.macfunc).op = 3;
7367 1.1 christos (yyval.macfunc).dst = (yyvsp[-2].reg);
7368 1.1 christos (yyval.macfunc).s0.regno = 0;
7369 1.1 christos (yyval.macfunc).s1.regno = 0;
7370 1.1 christos }
7371 1.1 christos #line 7372 "config/bfin-parse.c"
7372 1.1 christos break;
7373 1.1 christos
7374 1.1 christos case 318: /* a_macfunc: a_assign multiply_halfregs */
7375 1.1 christos #line 4292 "./config/bfin-parse.y"
7376 1.1 christos {
7377 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7378 1.1 christos (yyval.macfunc).op = 0;
7379 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7380 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7381 1.1 christos }
7382 1.1 christos #line 7383 "config/bfin-parse.c"
7383 1.1 christos break;
7384 1.1 christos
7385 1.1 christos case 319: /* a_macfunc: a_plusassign multiply_halfregs */
7386 1.1 christos #line 4299 "./config/bfin-parse.y"
7387 1.1 christos {
7388 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7389 1.1 christos (yyval.macfunc).op = 1;
7390 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7391 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7392 1.1 christos }
7393 1.1 christos #line 7394 "config/bfin-parse.c"
7394 1.1 christos break;
7395 1.1 christos
7396 1.1 christos case 320: /* a_macfunc: a_minusassign multiply_halfregs */
7397 1.1 christos #line 4306 "./config/bfin-parse.y"
7398 1.1 christos {
7399 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7400 1.1 christos (yyval.macfunc).op = 2;
7401 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7402 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7403 1.1 christos }
7404 1.1 christos #line 7405 "config/bfin-parse.c"
7405 1.1 christos break;
7406 1.1 christos
7407 1.1 christos case 321: /* multiply_halfregs: HALF_REG STAR HALF_REG */
7408 1.1 christos #line 4316 "./config/bfin-parse.y"
7409 1.1 christos {
7410 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
7411 1.1 christos {
7412 1.1 christos (yyval.macfunc).s0 = (yyvsp[-2].reg);
7413 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].reg);
7414 1.1 christos }
7415 1.1 christos else
7416 1.1 christos return yyerror ("Dregs expected");
7417 1.1 christos }
7418 1.1 christos #line 7419 "config/bfin-parse.c"
7419 1.1 christos break;
7420 1.1 christos
7421 1.1 christos case 322: /* cc_op: ASSIGN */
7422 1.1 christos #line 4329 "./config/bfin-parse.y"
7423 1.1 christos {
7424 1.1 christos (yyval.r0).r0 = 0;
7425 1.1 christos }
7426 1.1 christos #line 7427 "config/bfin-parse.c"
7427 1.1 christos break;
7428 1.1 christos
7429 1.1 christos case 323: /* cc_op: _BAR_ASSIGN */
7430 1.1 christos #line 4333 "./config/bfin-parse.y"
7431 1.1 christos {
7432 1.1 christos (yyval.r0).r0 = 1;
7433 1.1 christos }
7434 1.1 christos #line 7435 "config/bfin-parse.c"
7435 1.1 christos break;
7436 1.1 christos
7437 1.1 christos case 324: /* cc_op: _AMPERSAND_ASSIGN */
7438 1.1 christos #line 4337 "./config/bfin-parse.y"
7439 1.1 christos {
7440 1.1 christos (yyval.r0).r0 = 2;
7441 1.1 christos }
7442 1.1 christos #line 7443 "config/bfin-parse.c"
7443 1.1 christos break;
7444 1.1 christos
7445 1.1 christos case 325: /* cc_op: _CARET_ASSIGN */
7446 1.1 christos #line 4341 "./config/bfin-parse.y"
7447 1.1 christos {
7448 1.1 christos (yyval.r0).r0 = 3;
7449 1.1 christos }
7450 1.1 christos #line 7451 "config/bfin-parse.c"
7451 1.1 christos break;
7452 1.1 christos
7453 1.1 christos case 326: /* ccstat: CCREG cc_op STATUS_REG */
7454 1.1 christos #line 4348 "./config/bfin-parse.y"
7455 1.1 christos {
7456 1.1 christos (yyval.modcodes).r0 = (yyvsp[0].reg).regno;
7457 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7458 1.1 christos (yyval.modcodes).s0 = 0;
7459 1.1 christos }
7460 1.1 christos #line 7461 "config/bfin-parse.c"
7461 1.1 christos break;
7462 1.1 christos
7463 1.1 christos case 327: /* ccstat: CCREG cc_op V */
7464 1.1 christos #line 4354 "./config/bfin-parse.y"
7465 1.1 christos {
7466 1.1 christos (yyval.modcodes).r0 = 0x18;
7467 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7468 1.1 christos (yyval.modcodes).s0 = 0;
7469 1.1 christos }
7470 1.1 christos #line 7471 "config/bfin-parse.c"
7471 1.1 christos break;
7472 1.1 christos
7473 1.1 christos case 328: /* ccstat: STATUS_REG cc_op CCREG */
7474 1.1 christos #line 4360 "./config/bfin-parse.y"
7475 1.1 christos {
7476 1.1 christos (yyval.modcodes).r0 = (yyvsp[-2].reg).regno;
7477 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7478 1.1 christos (yyval.modcodes).s0 = 1;
7479 1.1 christos }
7480 1.1 christos #line 7481 "config/bfin-parse.c"
7481 1.1 christos break;
7482 1.1 christos
7483 1.1 christos case 329: /* ccstat: V cc_op CCREG */
7484 1.1 christos #line 4366 "./config/bfin-parse.y"
7485 1.1 christos {
7486 1.1 christos (yyval.modcodes).r0 = 0x18;
7487 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7488 1.1 christos (yyval.modcodes).s0 = 1;
7489 1.1 christos }
7490 1.1 christos #line 7491 "config/bfin-parse.c"
7491 1.1 christos break;
7492 1.1 christos
7493 1.1 christos case 330: /* symbol: SYMBOL */
7494 1.1 christos #line 4376 "./config/bfin-parse.y"
7495 1.1 christos {
7496 1.1 christos Expr_Node_Value val;
7497 1.1 christos val.s_value = S_GET_NAME((yyvsp[0].symbol));
7498 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
7499 1.1 christos }
7500 1.1 christos #line 7501 "config/bfin-parse.c"
7501 1.1 christos break;
7502 1.1 christos
7503 1.1 christos case 331: /* any_gotrel: GOT */
7504 1.1 christos #line 4385 "./config/bfin-parse.y"
7505 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_GOT; }
7506 1.1 christos #line 7507 "config/bfin-parse.c"
7507 1.1 christos break;
7508 1.1 christos
7509 1.1 christos case 332: /* any_gotrel: GOT17M4 */
7510 1.1 christos #line 4387 "./config/bfin-parse.y"
7511 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
7512 1.1 christos #line 7513 "config/bfin-parse.c"
7513 1.1 christos break;
7514 1.1 christos
7515 1.1 christos case 333: /* any_gotrel: FUNCDESC_GOT17M4 */
7516 1.1 christos #line 4389 "./config/bfin-parse.y"
7517 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
7518 1.1 christos #line 7519 "config/bfin-parse.c"
7519 1.1 christos break;
7520 1.1 christos
7521 1.1 christos case 334: /* got: symbol AT any_gotrel */
7522 1.1 christos #line 4393 "./config/bfin-parse.y"
7523 1.1 christos {
7524 1.1 christos Expr_Node_Value val;
7525 1.1 christos val.i_value = (yyvsp[0].value);
7526 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[-2].expr), NULL);
7527 1.1 christos }
7528 1.1 christos #line 7529 "config/bfin-parse.c"
7529 1.1 christos break;
7530 1.1 christos
7531 1.1 christos case 335: /* got_or_expr: got */
7532 1.1 christos #line 4401 "./config/bfin-parse.y"
7533 1.1 christos {
7534 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7535 1.1 christos }
7536 1.1 christos #line 7537 "config/bfin-parse.c"
7537 1.1 christos break;
7538 1.1 christos
7539 1.1 christos case 336: /* got_or_expr: expr */
7540 1.1 christos #line 4405 "./config/bfin-parse.y"
7541 1.1 christos {
7542 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7543 1.1 christos }
7544 1.1 christos #line 7545 "config/bfin-parse.c"
7545 1.1 christos break;
7546 1.1 christos
7547 1.1 christos case 337: /* pltpc: symbol AT PLTPC */
7548 1.1 christos #line 4412 "./config/bfin-parse.y"
7549 1.1 christos {
7550 1.1 christos (yyval.expr) = (yyvsp[-2].expr);
7551 1.1 christos }
7552 1.1 christos #line 7553 "config/bfin-parse.c"
7553 1.1 christos break;
7554 1.1 christos
7555 1.1 christos case 338: /* eterm: NUMBER */
7556 1.1 christos #line 4418 "./config/bfin-parse.y"
7557 1.1 christos {
7558 1.1 christos Expr_Node_Value val;
7559 1.1 christos val.i_value = (yyvsp[0].value);
7560 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
7561 1.1 christos }
7562 1.1 christos #line 7563 "config/bfin-parse.c"
7563 1.1 christos break;
7564 1.1 christos
7565 1.1 christos case 339: /* eterm: symbol */
7566 1.1 christos #line 4424 "./config/bfin-parse.y"
7567 1.1 christos {
7568 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7569 1.1 christos }
7570 1.1 christos #line 7571 "config/bfin-parse.c"
7571 1.1 christos break;
7572 1.1 christos
7573 1.1 christos case 340: /* eterm: LPAREN expr_1 RPAREN */
7574 1.1 christos #line 4428 "./config/bfin-parse.y"
7575 1.1 christos {
7576 1.1 christos (yyval.expr) = (yyvsp[-1].expr);
7577 1.1 christos }
7578 1.1 christos #line 7579 "config/bfin-parse.c"
7579 1.1 christos break;
7580 1.1 christos
7581 1.1 christos case 341: /* eterm: TILDA expr_1 */
7582 1.1 christos #line 4432 "./config/bfin-parse.y"
7583 1.1 christos {
7584 1.1 christos (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[0].expr));
7585 1.1 christos }
7586 1.1 christos #line 7587 "config/bfin-parse.c"
7587 1.1 christos break;
7588 1.1 christos
7589 1.1 christos case 342: /* eterm: MINUS expr_1 */
7590 1.1 christos #line 4436 "./config/bfin-parse.y"
7591 1.1 christos {
7592 1.1 christos (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[0].expr));
7593 1.1 christos }
7594 1.1 christos #line 7595 "config/bfin-parse.c"
7595 1.1 christos break;
7596 1.1 christos
7597 1.1 christos case 343: /* expr: expr_1 */
7598 1.1 christos #line 4442 "./config/bfin-parse.y"
7599 1.1 christos {
7600 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7601 1.1 christos }
7602 1.1 christos #line 7603 "config/bfin-parse.c"
7603 1.1 christos break;
7604 1.1 christos
7605 1.1 christos case 344: /* expr_1: expr_1 STAR expr_1 */
7606 1.1 christos #line 4448 "./config/bfin-parse.y"
7607 1.1 christos {
7608 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[-2].expr), (yyvsp[0].expr));
7609 1.1 christos }
7610 1.1 christos #line 7611 "config/bfin-parse.c"
7611 1.1 christos break;
7612 1.1 christos
7613 1.1 christos case 345: /* expr_1: expr_1 SLASH expr_1 */
7614 1.1 christos #line 4452 "./config/bfin-parse.y"
7615 1.1 christos {
7616 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[-2].expr), (yyvsp[0].expr));
7617 1.1 christos }
7618 1.1 christos #line 7619 "config/bfin-parse.c"
7619 1.1 christos break;
7620 1.1 christos
7621 1.1 christos case 346: /* expr_1: expr_1 PERCENT expr_1 */
7622 1.1 christos #line 4456 "./config/bfin-parse.y"
7623 1.1 christos {
7624 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[-2].expr), (yyvsp[0].expr));
7625 1.1 christos }
7626 1.1 christos #line 7627 "config/bfin-parse.c"
7627 1.1 christos break;
7628 1.1 christos
7629 1.1 christos case 347: /* expr_1: expr_1 PLUS expr_1 */
7630 1.1 christos #line 4460 "./config/bfin-parse.y"
7631 1.1 christos {
7632 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[-2].expr), (yyvsp[0].expr));
7633 1.1 christos }
7634 1.1 christos #line 7635 "config/bfin-parse.c"
7635 1.1 christos break;
7636 1.1 christos
7637 1.1 christos case 348: /* expr_1: expr_1 MINUS expr_1 */
7638 1.1 christos #line 4464 "./config/bfin-parse.y"
7639 1.1 christos {
7640 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[-2].expr), (yyvsp[0].expr));
7641 1.1 christos }
7642 1.1 christos #line 7643 "config/bfin-parse.c"
7643 1.1 christos break;
7644 1.1 christos
7645 1.1 christos case 349: /* expr_1: expr_1 LESS_LESS expr_1 */
7646 1.1 christos #line 4468 "./config/bfin-parse.y"
7647 1.1 christos {
7648 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7649 1.1 christos }
7650 1.1 christos #line 7651 "config/bfin-parse.c"
7651 1.1 christos break;
7652 1.1 christos
7653 1.1 christos case 350: /* expr_1: expr_1 GREATER_GREATER expr_1 */
7654 1.1 christos #line 4472 "./config/bfin-parse.y"
7655 1.1 christos {
7656 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7657 1.1 christos }
7658 1.1 christos #line 7659 "config/bfin-parse.c"
7659 1.1 christos break;
7660 1.1 christos
7661 1.1 christos case 351: /* expr_1: expr_1 AMPERSAND expr_1 */
7662 1.1 christos #line 4476 "./config/bfin-parse.y"
7663 1.1 christos {
7664 1.1 christos (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[-2].expr), (yyvsp[0].expr));
7665 1.1 christos }
7666 1.1 christos #line 7667 "config/bfin-parse.c"
7667 1.1 christos break;
7668 1.1 christos
7669 1.1 christos case 352: /* expr_1: expr_1 CARET expr_1 */
7670 1.1 christos #line 4480 "./config/bfin-parse.y"
7671 1.1 christos {
7672 1.1 christos (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7673 1.1 christos }
7674 1.1 christos #line 7675 "config/bfin-parse.c"
7675 1.1 christos break;
7676 1.1 christos
7677 1.1 christos case 353: /* expr_1: expr_1 BAR expr_1 */
7678 1.1 christos #line 4484 "./config/bfin-parse.y"
7679 1.1 christos {
7680 1.1 christos (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7681 1.1 christos }
7682 1.1 christos #line 7683 "config/bfin-parse.c"
7683 1.1 christos break;
7684 1.1 christos
7685 1.1 christos case 354: /* expr_1: eterm */
7686 1.1 christos #line 4488 "./config/bfin-parse.y"
7687 1.1 christos {
7688 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7689 1.1 christos }
7690 1.1 christos #line 7691 "config/bfin-parse.c"
7691 1.1 christos break;
7692 1.1 christos
7693 1.1 christos
7694 1.1 christos #line 7695 "config/bfin-parse.c"
7695 1.1 christos
7696 1.1 christos default: break;
7697 1.1 christos }
7698 1.1 christos /* User semantic actions sometimes alter yychar, and that requires
7699 1.1 christos that yytoken be updated with the new translation. We take the
7700 1.1 christos approach of translating immediately before every use of yytoken.
7701 1.1 christos One alternative is translating here after every semantic action,
7702 1.1 christos but that translation would be missed if the semantic action invokes
7703 1.1 christos YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
7704 1.1 christos if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
7705 1.1 christos incorrect destructor might then be invoked immediately. In the
7706 1.1 christos case of YYERROR or YYBACKUP, subsequent parser actions might lead
7707 1.1 christos to an incorrect destructor call or verbose syntax error message
7708 1.1 christos before the lookahead is translated. */
7709 1.1 christos YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
7710 1.1 christos
7711 1.1 christos YYPOPSTACK (yylen);
7712 1.1 christos yylen = 0;
7713 1.1 christos
7714 1.1 christos *++yyvsp = yyval;
7715 1.1 christos
7716 1.1 christos /* Now 'shift' the result of the reduction. Determine what state
7717 1.1 christos that goes to, based on the state we popped back to and the rule
7718 1.1 christos number reduced by. */
7719 1.1 christos {
7720 1.1 christos const int yylhs = yyr1[yyn] - YYNTOKENS;
7721 1.1 christos const int yyi = yypgoto[yylhs] + *yyssp;
7722 1.1 christos yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
7723 1.1 christos ? yytable[yyi]
7724 1.1 christos : yydefgoto[yylhs]);
7725 1.1 christos }
7726 1.1 christos
7727 1.1 christos goto yynewstate;
7728 1.1 christos
7729 1.1 christos
7730 1.1 christos /*--------------------------------------.
7731 1.1 christos | yyerrlab -- here on detecting error. |
7732 1.1 christos `--------------------------------------*/
7733 1.1 christos yyerrlab:
7734 1.1 christos /* Make sure we have latest lookahead translation. See comments at
7735 1.1 christos user semantic actions for why this is necessary. */
7736 1.1 christos yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
7737 1.1 christos /* If not already recovering from an error, report this error. */
7738 1.1 christos if (!yyerrstatus)
7739 1.1 christos {
7740 1.1 christos ++yynerrs;
7741 1.1 christos yyerror (YY_("syntax error"));
7742 1.1 christos }
7743 1.1 christos
7744 1.1 christos if (yyerrstatus == 3)
7745 1.1 christos {
7746 1.1 christos /* If just tried and failed to reuse lookahead token after an
7747 1.1 christos error, discard it. */
7748 1.1 christos
7749 1.1 christos if (yychar <= YYEOF)
7750 1.1 christos {
7751 1.1 christos /* Return failure if at end of input. */
7752 1.1 christos if (yychar == YYEOF)
7753 1.1 christos YYABORT;
7754 1.1 christos }
7755 1.1 christos else
7756 1.1 christos {
7757 1.1 christos yydestruct ("Error: discarding",
7758 1.1 christos yytoken, &yylval);
7759 1.1 christos yychar = YYEMPTY;
7760 1.1 christos }
7761 1.1 christos }
7762 1.1 christos
7763 1.1 christos /* Else will try to reuse lookahead token after shifting the error
7764 1.1 christos token. */
7765 1.1 christos goto yyerrlab1;
7766 1.1 christos
7767 1.1 christos
7768 1.1 christos /*---------------------------------------------------.
7769 1.1 christos | yyerrorlab -- error raised explicitly by YYERROR. |
7770 1.1 christos `---------------------------------------------------*/
7771 1.1 christos yyerrorlab:
7772 1.1 christos /* Pacify compilers when the user code never invokes YYERROR and the
7773 1.1 christos label yyerrorlab therefore never appears in user code. */
7774 1.1 christos if (0)
7775 1.1 christos YYERROR;
7776 1.1 christos ++yynerrs;
7777 1.1 christos
7778 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
7779 1.1 christos this YYERROR. */
7780 1.1 christos YYPOPSTACK (yylen);
7781 1.1 christos yylen = 0;
7782 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7783 1.1 christos yystate = *yyssp;
7784 1.1 christos goto yyerrlab1;
7785 1.1 christos
7786 1.1 christos
7787 1.1 christos /*-------------------------------------------------------------.
7788 1.1 christos | yyerrlab1 -- common code for both syntax error and YYERROR. |
7789 1.1 christos `-------------------------------------------------------------*/
7790 1.1 christos yyerrlab1:
7791 1.1 christos yyerrstatus = 3; /* Each real token shifted decrements this. */
7792 1.1 christos
7793 1.1 christos /* Pop stack until we find a state that shifts the error token. */
7794 1.1 christos for (;;)
7795 1.1 christos {
7796 1.1 christos yyn = yypact[yystate];
7797 1.1 christos if (!yypact_value_is_default (yyn))
7798 1.1 christos {
7799 1.1 christos yyn += YYSYMBOL_YYerror;
7800 1.1 christos if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
7801 1.1 christos {
7802 1.1 christos yyn = yytable[yyn];
7803 1.1 christos if (0 < yyn)
7804 1.1 christos break;
7805 1.1 christos }
7806 1.1 christos }
7807 1.1 christos
7808 1.1 christos /* Pop the current state because it cannot handle the error token. */
7809 1.1 christos if (yyssp == yyss)
7810 1.1 christos YYABORT;
7811 1.1 christos
7812 1.1 christos
7813 1.1 christos yydestruct ("Error: popping",
7814 1.1 christos YY_ACCESSING_SYMBOL (yystate), yyvsp);
7815 1.1 christos YYPOPSTACK (1);
7816 1.1 christos yystate = *yyssp;
7817 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7818 1.1 christos }
7819 1.1 christos
7820 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
7821 1.1 christos *++yyvsp = yylval;
7822 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
7823 1.1 christos
7824 1.1 christos
7825 1.1 christos /* Shift the error token. */
7826 1.1 christos YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
7827 1.1 christos
7828 1.1 christos yystate = yyn;
7829 1.1 christos goto yynewstate;
7830 1.1 christos
7831 1.1 christos
7832 1.1 christos /*-------------------------------------.
7833 1.1 christos | yyacceptlab -- YYACCEPT comes here. |
7834 1.1 christos `-------------------------------------*/
7835 1.1 christos yyacceptlab:
7836 1.1 christos yyresult = 0;
7837 1.1 christos goto yyreturnlab;
7838 1.1 christos
7839 1.1 christos
7840 1.1 christos /*-----------------------------------.
7841 1.1 christos | yyabortlab -- YYABORT comes here. |
7842 1.1 christos `-----------------------------------*/
7843 1.1 christos yyabortlab:
7844 1.1 christos yyresult = 1;
7845 1.1 christos goto yyreturnlab;
7846 1.1 christos
7847 1.1 christos
7848 1.1 christos /*-----------------------------------------------------------.
7849 1.1 christos | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
7850 1.1 christos `-----------------------------------------------------------*/
7851 1.1 christos yyexhaustedlab:
7852 1.1 christos yyerror (YY_("memory exhausted"));
7853 1.1 christos yyresult = 2;
7854 1.1 christos goto yyreturnlab;
7855 1.1 christos
7856 1.1 christos
7857 1.1 christos /*----------------------------------------------------------.
7858 1.1 christos | yyreturnlab -- parsing is finished, clean up and return. |
7859 1.1 christos `----------------------------------------------------------*/
7860 1.1 christos yyreturnlab:
7861 1.1 christos if (yychar != YYEMPTY)
7862 1.1 christos {
7863 1.1 christos /* Make sure we have latest lookahead translation. See comments at
7864 1.1 christos user semantic actions for why this is necessary. */
7865 1.1 christos yytoken = YYTRANSLATE (yychar);
7866 1.1 christos yydestruct ("Cleanup: discarding lookahead",
7867 1.1 christos yytoken, &yylval);
7868 1.1 christos }
7869 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
7870 1.1 christos this YYABORT or YYACCEPT. */
7871 1.1 christos YYPOPSTACK (yylen);
7872 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7873 1.1 christos while (yyssp != yyss)
7874 1.1 christos {
7875 1.1 christos yydestruct ("Cleanup: popping",
7876 1.1 christos YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
7877 1.1 christos YYPOPSTACK (1);
7878 1.1 christos }
7879 1.1 christos #ifndef yyoverflow
7880 1.1 christos if (yyss != yyssa)
7881 1.1 christos YYSTACK_FREE (yyss);
7882 1.1 christos #endif
7883 1.1 christos
7884 1.1 christos return yyresult;
7885 1.1 christos }
7886 1.1 christos
7887 1.1 christos #line 4494 "./config/bfin-parse.y"
7888 1.1 christos
7889 1.1 christos
7890 1.1 christos EXPR_T
7891 1.1 christos mkexpr (int x, SYMBOL_T s)
7892 1.1 christos {
7893 1.1 christos EXPR_T e = XNEW (struct expression_cell);
7894 1.1 christos e->value = x;
7895 1.1 christos EXPR_SYMBOL(e) = s;
7896 1.1 christos return e;
7897 1.1 christos }
7898 1.1 christos
7899 1.1 christos static int
7900 1.1 christos value_match (Expr_Node *exp, int sz, int sign, int mul, int issigned)
7901 1.1 christos {
7902 1.1 christos int umax = (1 << sz) - 1;
7903 1.1 christos int min = -(1 << (sz - 1));
7904 1.1 christos int max = (1 << (sz - 1)) - 1;
7905 1.1 christos
7906 1.1 christos int v = (EXPR_VALUE (exp)) & 0xffffffff;
7907 1.1 christos
7908 1.1 christos if ((v % mul) != 0)
7909 1.1 christos {
7910 1.1 christos error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
7911 1.1 christos return 0;
7912 1.1 christos }
7913 1.1 christos
7914 1.1 christos v /= mul;
7915 1.1 christos
7916 1.1 christos if (sign)
7917 1.1 christos v = -v;
7918 1.1 christos
7919 1.1 christos if (issigned)
7920 1.1 christos {
7921 1.1 christos if (v >= min && v <= max) return 1;
7922 1.1 christos
7923 1.1 christos #ifdef DEBUG
7924 1.1 christos fprintf(stderr, "signed value %lx out of range\n", v * mul);
7925 1.1 christos #endif
7926 1.1 christos return 0;
7927 1.1 christos }
7928 1.1 christos if (v <= umax && v >= 0)
7929 1.1 christos return 1;
7930 1.1 christos #ifdef DEBUG
7931 1.1 christos fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
7932 1.1 christos #endif
7933 1.1 christos return 0;
7934 1.1 christos }
7935 1.1 christos
7936 1.1 christos /* Return the expression structure that allows symbol operations.
7937 1.1 christos If the left and right children are constants, do the operation. */
7938 1.1 christos static Expr_Node *
7939 1.1 christos binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
7940 1.1 christos {
7941 1.1 christos Expr_Node_Value val;
7942 1.1 christos
7943 1.1 christos if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
7944 1.1 christos {
7945 1.1 christos switch (op)
7946 1.1 christos {
7947 1.1 christos case Expr_Op_Type_Add:
7948 1.1 christos x->value.i_value += y->value.i_value;
7949 1.1 christos break;
7950 1.1 christos case Expr_Op_Type_Sub:
7951 1.1 christos x->value.i_value -= y->value.i_value;
7952 1.1 christos break;
7953 1.1 christos case Expr_Op_Type_Mult:
7954 1.1 christos x->value.i_value *= y->value.i_value;
7955 1.1 christos break;
7956 1.1 christos case Expr_Op_Type_Div:
7957 1.1 christos if (y->value.i_value == 0)
7958 1.1 christos error ("Illegal Expression: Division by zero.");
7959 1.1 christos else
7960 1.1 christos x->value.i_value /= y->value.i_value;
7961 1.1 christos break;
7962 1.1 christos case Expr_Op_Type_Mod:
7963 1.1 christos x->value.i_value %= y->value.i_value;
7964 1.1 christos break;
7965 1.1 christos case Expr_Op_Type_Lshift:
7966 1.1 christos x->value.i_value <<= y->value.i_value;
7967 1.1 christos break;
7968 1.1 christos case Expr_Op_Type_Rshift:
7969 1.1 christos x->value.i_value >>= y->value.i_value;
7970 1.1 christos break;
7971 1.1 christos case Expr_Op_Type_BAND:
7972 1.1 christos x->value.i_value &= y->value.i_value;
7973 1.1 christos break;
7974 1.1 christos case Expr_Op_Type_BOR:
7975 1.1 christos x->value.i_value |= y->value.i_value;
7976 1.1 christos break;
7977 1.1 christos case Expr_Op_Type_BXOR:
7978 1.1 christos x->value.i_value ^= y->value.i_value;
7979 1.1 christos break;
7980 1.1 christos case Expr_Op_Type_LAND:
7981 1.1 christos x->value.i_value = x->value.i_value && y->value.i_value;
7982 1.1 christos break;
7983 1.1 christos case Expr_Op_Type_LOR:
7984 1.1 christos x->value.i_value = x->value.i_value || y->value.i_value;
7985 1.1 christos break;
7986 1.1 christos
7987 1.1 christos default:
7988 1.1 christos error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
7989 1.1 christos }
7990 1.1 christos return x;
7991 1.1 christos }
7992 1.1 christos /* Canonicalize order to EXPR OP CONSTANT. */
7993 1.1 christos if (x->type == Expr_Node_Constant)
7994 1.1 christos {
7995 1.1 christos Expr_Node *t = x;
7996 1.1 christos x = y;
7997 1.1 christos y = t;
7998 1.1 christos }
7999 1.1 christos /* Canonicalize subtraction of const to addition of negated const. */
8000 1.1 christos if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant)
8001 1.1 christos {
8002 1.1 christos op = Expr_Op_Type_Add;
8003 1.1 christos y->value.i_value = -y->value.i_value;
8004 1.1 christos }
8005 1.1 christos if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
8006 1.1 christos && x->Right_Child->type == Expr_Node_Constant)
8007 1.1 christos {
8008 1.1 christos if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
8009 1.1 christos {
8010 1.1 christos x->Right_Child->value.i_value += y->value.i_value;
8011 1.1 christos return x;
8012 1.1 christos }
8013 1.1 christos }
8014 1.1 christos
8015 1.1 christos /* Create a new expression structure. */
8016 1.1 christos val.op_value = op;
8017 1.1 christos return Expr_Node_Create (Expr_Node_Binop, val, x, y);
8018 1.1 christos }
8019 1.1 christos
8020 1.1 christos static Expr_Node *
8021 1.1 christos unary (Expr_Op_Type op, Expr_Node *x)
8022 1.1 christos {
8023 1.1 christos if (x->type == Expr_Node_Constant)
8024 1.1 christos {
8025 1.1 christos switch (op)
8026 1.1 christos {
8027 1.1 christos case Expr_Op_Type_NEG:
8028 1.1 christos x->value.i_value = -x->value.i_value;
8029 1.1 christos break;
8030 1.1 christos case Expr_Op_Type_COMP:
8031 1.1 christos x->value.i_value = ~x->value.i_value;
8032 1.1 christos break;
8033 1.1 christos default:
8034 1.1 christos error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
8035 1.1 christos }
8036 1.1 christos return x;
8037 1.1 christos }
8038 1.1 christos else
8039 1.1 christos {
8040 1.1 christos /* Create a new expression structure. */
8041 1.1 christos Expr_Node_Value val;
8042 1.1 christos val.op_value = op;
8043 1.1 christos return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
8044 1.1 christos }
8045 1.1 christos }
8046 1.1 christos
8047 1.1 christos int debug_codeselection = 0;
8048 1.1 christos static void
8049 1.1 christos notethat (const char *format, ...)
8050 1.1 christos {
8051 1.1 christos va_list ap;
8052 1.1 christos va_start (ap, format);
8053 1.1 christos if (debug_codeselection)
8054 1.1 christos {
8055 1.1 christos vfprintf (errorf, format, ap);
8056 1.1 christos }
8057 1.1 christos va_end (ap);
8058 1.1 christos }
8059 1.1 christos
8060 1.1 christos #ifdef TEST
8061 1.1 christos main (int argc, char **argv)
8062 1.1 christos {
8063 1.1 christos yyparse();
8064 1.1 christos }
8065 1.1 christos #endif
8066 1.1 christos
8067