bfin-parse.c revision 1.1.1.2 1 1.1 christos /* A Bison parser, made by GNU Bison 3.8.2. */
2 1.1 christos
3 1.1 christos /* Bison implementation for Yacc-like parsers in C
4 1.1 christos
5 1.1 christos Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 1.1 christos Inc.
7 1.1 christos
8 1.1 christos This program is free software: you can redistribute it and/or modify
9 1.1 christos it under the terms of the GNU General Public License as published by
10 1.1 christos the Free Software Foundation, either version 3 of the License, or
11 1.1 christos (at your option) any later version.
12 1.1 christos
13 1.1 christos This program is distributed in the hope that it will be useful,
14 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
15 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 1.1 christos GNU General Public License for more details.
17 1.1 christos
18 1.1 christos You should have received a copy of the GNU General Public License
19 1.1 christos along with this program. If not, see <https://www.gnu.org/licenses/>. */
20 1.1 christos
21 1.1 christos /* As a special exception, you may create a larger work that contains
22 1.1 christos part or all of the Bison parser skeleton and distribute that work
23 1.1 christos under terms of your choice, so long as that work isn't itself a
24 1.1 christos parser generator using the skeleton or a modified version thereof
25 1.1 christos as a parser skeleton. Alternatively, if you modify or redistribute
26 1.1 christos the parser skeleton itself, you may (at your option) remove this
27 1.1 christos special exception, which will cause the skeleton and the resulting
28 1.1 christos Bison output files to be licensed under the GNU General Public
29 1.1 christos License without this special exception.
30 1.1 christos
31 1.1 christos This special exception was added by the Free Software Foundation in
32 1.1 christos version 2.2 of Bison. */
33 1.1 christos
34 1.1 christos /* C LALR(1) parser skeleton written by Richard Stallman, by
35 1.1 christos simplifying the original so-called "semantic" parser. */
36 1.1 christos
37 1.1 christos /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 1.1 christos especially those whose name start with YY_ or yy_. They are
39 1.1 christos private implementation details that can be changed or removed. */
40 1.1 christos
41 1.1 christos /* All symbols defined below should begin with yy or YY, to avoid
42 1.1 christos infringing on user name space. This should be done even for local
43 1.1 christos variables, as they might otherwise be expanded by user macros.
44 1.1 christos There are some unavoidable exceptions within include files to
45 1.1 christos define necessary library symbols; they are noted "INFRINGES ON
46 1.1 christos USER NAME SPACE" below. */
47 1.1 christos
48 1.1 christos /* Identify Bison output, and Bison version. */
49 1.1 christos #define YYBISON 30802
50 1.1 christos
51 1.1 christos /* Bison version string. */
52 1.1 christos #define YYBISON_VERSION "3.8.2"
53 1.1 christos
54 1.1 christos /* Skeleton name. */
55 1.1 christos #define YYSKELETON_NAME "yacc.c"
56 1.1 christos
57 1.1 christos /* Pure parsers. */
58 1.1 christos #define YYPURE 0
59 1.1 christos
60 1.1 christos /* Push parsers. */
61 1.1 christos #define YYPUSH 0
62 1.1 christos
63 1.1 christos /* Pull parsers. */
64 1.1 christos #define YYPULL 1
65 1.1 christos
66 1.1 christos
67 1.1 christos
68 1.1 christos
69 1.1 christos /* First part of user prologue. */
70 1.1 christos #line 20 "./config/bfin-parse.y"
71 1.1 christos
72 1.1 christos
73 1.1 christos #include "as.h"
74 1.1 christos
75 1.1 christos #include "bfin-aux.h" /* Opcode generating auxiliaries. */
76 1.1 christos #include "elf/common.h"
77 1.1 christos #include "elf/bfin.h"
78 1.1 christos
79 1.1 christos /* This file uses an old-style yyerror returning int. Disable
80 1.1 christos generation of a modern prototype for yyerror. */
81 1.1 christos #define yyerror yyerror
82 1.1 christos
83 1.1 christos #define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
84 1.1 christos bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
85 1.1 christos
86 1.1 christos #define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
87 1.1 christos bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
88 1.1 christos dst, src0, src1, w0)
89 1.1 christos
90 1.1 christos #define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
91 1.1 christos bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
92 1.1 christos dst, src0, src1, w0)
93 1.1 christos
94 1.1 christos #define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls) \
95 1.1 christos bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
96 1.1 christos
97 1.1 christos #define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls) \
98 1.1 christos bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
99 1.1 christos
100 1.1 christos #define LDIMMHALF_R(reg, h, s, z, hword) \
101 1.1 christos bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
102 1.1 christos
103 1.1 christos #define LDIMMHALF_R5(reg, h, s, z, hword) \
104 1.1 christos bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
105 1.1 christos
106 1.1 christos #define LDSTIDXI(ptr, reg, w, sz, z, offset) \
107 1.1 christos bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
108 1.1 christos
109 1.1 christos #define LDST(ptr, reg, aop, sz, z, w) \
110 1.1 christos bfin_gen_ldst (ptr, reg, aop, sz, z, w)
111 1.1 christos
112 1.1 christos #define LDSTII(ptr, reg, offset, w, op) \
113 1.1 christos bfin_gen_ldstii (ptr, reg, offset, w, op)
114 1.1 christos
115 1.1 christos #define DSPLDST(i, m, reg, aop, w) \
116 1.1 christos bfin_gen_dspldst (i, reg, aop, w, m)
117 1.1 christos
118 1.1 christos #define LDSTPMOD(ptr, reg, idx, aop, w) \
119 1.1 christos bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
120 1.1 christos
121 1.1 christos #define LDSTIIFP(offset, reg, w) \
122 1.1 christos bfin_gen_ldstiifp (reg, offset, w)
123 1.1 christos
124 1.1 christos #define LOGI2OP(dst, src, opc) \
125 1.1 christos bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
126 1.1 christos
127 1.1 christos #define ALU2OP(dst, src, opc) \
128 1.1 christos bfin_gen_alu2op (dst, src, opc)
129 1.1 christos
130 1.1 christos #define BRCC(t, b, offset) \
131 1.1 christos bfin_gen_brcc (t, b, offset)
132 1.1 christos
133 1.1 christos #define UJUMP(offset) \
134 1.1 christos bfin_gen_ujump (offset)
135 1.1 christos
136 1.1 christos #define PROGCTRL(prgfunc, poprnd) \
137 1.1 christos bfin_gen_progctrl (prgfunc, poprnd)
138 1.1 christos
139 1.1 christos #define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
140 1.1 christos bfin_gen_pushpopmultiple (dr, pr, d, p, w)
141 1.1 christos
142 1.1 christos #define PUSHPOPREG(reg, w) \
143 1.1 christos bfin_gen_pushpopreg (reg, w)
144 1.1 christos
145 1.1 christos #define CALLA(addr, s) \
146 1.1 christos bfin_gen_calla (addr, s)
147 1.1 christos
148 1.1 christos #define LINKAGE(r, framesize) \
149 1.1 christos bfin_gen_linkage (r, framesize)
150 1.1 christos
151 1.1 christos #define COMPI2OPD(dst, src, op) \
152 1.1 christos bfin_gen_compi2opd (dst, src, op)
153 1.1 christos
154 1.1 christos #define COMPI2OPP(dst, src, op) \
155 1.1 christos bfin_gen_compi2opp (dst, src, op)
156 1.1 christos
157 1.1 christos #define DAGMODIK(i, op) \
158 1.1 christos bfin_gen_dagmodik (i, op)
159 1.1 christos
160 1.1 christos #define DAGMODIM(i, m, op, br) \
161 1.1 christos bfin_gen_dagmodim (i, m, op, br)
162 1.1 christos
163 1.1 christos #define COMP3OP(dst, src0, src1, opc) \
164 1.1 christos bfin_gen_comp3op (src0, src1, dst, opc)
165 1.1 christos
166 1.1 christos #define PTR2OP(dst, src, opc) \
167 1.1 christos bfin_gen_ptr2op (dst, src, opc)
168 1.1 christos
169 1.1 christos #define CCFLAG(x, y, opc, i, g) \
170 1.1 christos bfin_gen_ccflag (x, y, opc, i, g)
171 1.1 christos
172 1.1 christos #define CCMV(src, dst, t) \
173 1.1 christos bfin_gen_ccmv (src, dst, t)
174 1.1 christos
175 1.1 christos #define CACTRL(reg, a, op) \
176 1.1 christos bfin_gen_cactrl (reg, a, op)
177 1.1 christos
178 1.1 christos #define LOOPSETUP(soffset, c, rop, eoffset, reg) \
179 1.1 christos bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
180 1.1 christos
181 1.1 christos #define HL2(r1, r0) (IS_H (r1) << 1 | IS_H (r0))
182 1.1 christos #define IS_RANGE(bits, expr, sign, mul) \
183 1.1 christos value_match(expr, bits, sign, mul, 1)
184 1.1 christos #define IS_URANGE(bits, expr, sign, mul) \
185 1.1 christos value_match(expr, bits, sign, mul, 0)
186 1.1 christos #define IS_CONST(expr) (expr->type == Expr_Node_Constant)
187 1.1 christos #define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
188 1.1 christos #define IS_IMM(expr, bits) value_match (expr, bits, 0, 1, 1)
189 1.1 christos #define IS_UIMM(expr, bits) value_match (expr, bits, 0, 1, 0)
190 1.1 christos
191 1.1 christos #define IS_PCREL4(expr) \
192 1.1 christos (value_match (expr, 4, 0, 2, 0))
193 1.1 christos
194 1.1 christos #define IS_LPPCREL10(expr) \
195 1.1 christos (value_match (expr, 10, 0, 2, 0))
196 1.1 christos
197 1.1 christos #define IS_PCREL10(expr) \
198 1.1 christos (value_match (expr, 10, 0, 2, 1))
199 1.1 christos
200 1.1 christos #define IS_PCREL12(expr) \
201 1.1 christos (value_match (expr, 12, 0, 2, 1))
202 1.1 christos
203 1.1 christos #define IS_PCREL24(expr) \
204 1.1 christos (value_match (expr, 24, 0, 2, 1))
205 1.1 christos
206 1.1 christos
207 1.1 christos static int value_match (Expr_Node *, int, int, int, int);
208 1.1 christos
209 1.1 christos extern FILE *errorf;
210 1.1 christos extern INSTR_T insn;
211 1.1 christos
212 1.1 christos static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
213 1.1 christos static Expr_Node *unary (Expr_Op_Type, Expr_Node *);
214 1.1 christos
215 1.1 christos static void notethat (const char *, ...);
216 1.1 christos
217 1.1 christos extern char *yytext;
218 1.1 christos
219 1.1 christos /* Used to set SRCx fields to all 1s as described in the PRM. */
220 1.1 christos static Register reg7 = {REG_R7, 0};
221 1.1 christos
222 1.1 christos void error (const char *format, ...)
223 1.1 christos {
224 1.1 christos va_list ap;
225 1.1 christos static char buffer[2000];
226 1.1 christos
227 1.1 christos va_start (ap, format);
228 1.1 christos vsprintf (buffer, format, ap);
229 1.1 christos va_end (ap);
230 1.1 christos
231 1.1 christos as_bad ("%s", buffer);
232 1.1 christos }
233 1.1 christos
234 1.1 christos static int
235 1.1 christos yyerror (const char *msg)
236 1.1 christos {
237 1.1 christos if (msg[0] == '\0')
238 1.1 christos error ("%s", msg);
239 1.1 christos
240 1.1 christos else if (yytext[0] != ';')
241 1.1 christos error ("%s. Input text was %s.", msg, yytext);
242 1.1 christos else
243 1.1 christos error ("%s.", msg);
244 1.1 christos
245 1.1 christos return -1;
246 1.1 christos }
247 1.1 christos
248 1.1 christos static int
249 1.1 christos in_range_p (Expr_Node *exp, int from, int to, unsigned int mask)
250 1.1 christos {
251 1.1 christos int val = EXPR_VALUE (exp);
252 1.1 christos if (exp->type != Expr_Node_Constant)
253 1.1 christos return 0;
254 1.1 christos if (val < from || val > to)
255 1.1 christos return 0;
256 1.1 christos return (val & mask) == 0;
257 1.1 christos }
258 1.1 christos
259 1.1 christos extern int yylex (void);
260 1.1 christos
261 1.1 christos #define imm3(x) EXPR_VALUE (x)
262 1.1 christos #define imm4(x) EXPR_VALUE (x)
263 1.1 christos #define uimm4(x) EXPR_VALUE (x)
264 1.1 christos #define imm5(x) EXPR_VALUE (x)
265 1.1 christos #define uimm5(x) EXPR_VALUE (x)
266 1.1 christos #define imm6(x) EXPR_VALUE (x)
267 1.1 christos #define imm7(x) EXPR_VALUE (x)
268 1.1 christos #define uimm8(x) EXPR_VALUE (x)
269 1.1 christos #define imm16(x) EXPR_VALUE (x)
270 1.1 christos #define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
271 1.1 christos #define uimm16(x) EXPR_VALUE (x)
272 1.1 christos
273 1.1 christos /* Return true if a value is inside a range. */
274 1.1 christos #define IN_RANGE(x, low, high) \
275 1.1 christos (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
276 1.1 christos
277 1.1 christos /* Auxiliary functions. */
278 1.1 christos
279 1.1 christos static int
280 1.1 christos valid_dreg_pair (Register *reg1, Expr_Node *reg2)
281 1.1 christos {
282 1.1 christos if (!IS_DREG (*reg1))
283 1.1 christos {
284 1.1 christos yyerror ("Dregs expected");
285 1.1 christos return 0;
286 1.1 christos }
287 1.1 christos
288 1.1 christos if (reg1->regno != 1 && reg1->regno != 3)
289 1.1 christos {
290 1.1 christos yyerror ("Bad register pair");
291 1.1 christos return 0;
292 1.1 christos }
293 1.1 christos
294 1.1 christos if (imm7 (reg2) != reg1->regno - 1)
295 1.1 christos {
296 1.1 christos yyerror ("Bad register pair");
297 1.1 christos return 0;
298 1.1 christos }
299 1.1 christos
300 1.1 christos reg1->regno--;
301 1.1 christos return 1;
302 1.1 christos }
303 1.1 christos
304 1.1 christos static int
305 1.1 christos check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
306 1.1 christos {
307 1.1 christos if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
308 1.1 christos || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
309 1.1 christos return yyerror ("Source multiplication register mismatch");
310 1.1 christos
311 1.1 christos return 0;
312 1.1 christos }
313 1.1 christos
314 1.1 christos
315 1.1 christos /* Check mac option. */
316 1.1 christos
317 1.1 christos static int
318 1.1 christos check_macfunc_option (Macfunc *a, Opt_mode *opt)
319 1.1 christos {
320 1.1 christos /* Default option is always valid. */
321 1.1 christos if (opt->mod == 0)
322 1.1 christos return 0;
323 1.1 christos
324 1.1 christos if ((a->w == 1 && a->P == 1
325 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
326 1.1 christos && opt->mod != M_S2RND && opt->mod != M_ISS2)
327 1.1 christos || (a->w == 1 && a->P == 0
328 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
329 1.1 christos && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND
330 1.1 christos && opt->mod != M_ISS2 && opt->mod != M_IH)
331 1.1 christos || (a->w == 0 && a->P == 0
332 1.1 christos && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32))
333 1.1 christos return -1;
334 1.1 christos
335 1.1 christos return 0;
336 1.1 christos }
337 1.1 christos
338 1.1 christos /* Check (vector) mac funcs and ops. */
339 1.1 christos
340 1.1 christos static int
341 1.1 christos check_macfuncs (Macfunc *aa, Opt_mode *opa,
342 1.1 christos Macfunc *ab, Opt_mode *opb)
343 1.1 christos {
344 1.1 christos /* Variables for swapping. */
345 1.1 christos Macfunc mtmp;
346 1.1 christos Opt_mode otmp;
347 1.1 christos
348 1.1 christos /* The option mode should be put at the end of the second instruction
349 1.1 christos of the vector except M, which should follow MAC1 instruction. */
350 1.1 christos if (opa->mod != 0)
351 1.1 christos return yyerror ("Bad opt mode");
352 1.1 christos
353 1.1 christos /* If a0macfunc comes before a1macfunc, swap them. */
354 1.1 christos
355 1.1 christos if (aa->n == 0)
356 1.1 christos {
357 1.1 christos /* (M) is not allowed here. */
358 1.1 christos if (opa->MM != 0)
359 1.1 christos return yyerror ("(M) not allowed with A0MAC");
360 1.1 christos if (ab->n != 1)
361 1.1 christos return yyerror ("Vector AxMACs can't be same");
362 1.1 christos
363 1.1 christos mtmp = *aa; *aa = *ab; *ab = mtmp;
364 1.1 christos otmp = *opa; *opa = *opb; *opb = otmp;
365 1.1 christos }
366 1.1 christos else
367 1.1 christos {
368 1.1 christos if (opb->MM != 0)
369 1.1 christos return yyerror ("(M) not allowed with A0MAC");
370 1.1 christos if (ab->n != 0)
371 1.1 christos return yyerror ("Vector AxMACs can't be same");
372 1.1 christos }
373 1.1 christos
374 1.1 christos /* If both ops are one of 0, 1, or 2, we have multiply_halfregs in both
375 1.1 christos assignment_or_macfuncs. */
376 1.1 christos if ((aa->op == 0 || aa->op == 1 || aa->op == 2)
377 1.1 christos && (ab->op == 0 || ab->op == 1 || ab->op == 2))
378 1.1 christos {
379 1.1 christos if (check_multiply_halfregs (aa, ab) < 0)
380 1.1 christos return -1;
381 1.1 christos }
382 1.1 christos else
383 1.1 christos {
384 1.1 christos /* Only one of the assign_macfuncs has a half reg multiply
385 1.1 christos Evil trick: Just 'OR' their source register codes:
386 1.1 christos We can do that, because we know they were initialized to 0
387 1.1 christos in the rules that don't use multiply_halfregs. */
388 1.1 christos aa->s0.regno |= (ab->s0.regno & CODE_MASK);
389 1.1 christos aa->s1.regno |= (ab->s1.regno & CODE_MASK);
390 1.1 christos }
391 1.1 christos
392 1.1 christos if (aa->w == ab->w && aa->P != ab->P)
393 1.1 christos return yyerror ("Destination Dreg sizes (full or half) must match");
394 1.1 christos
395 1.1 christos if (aa->w && ab->w)
396 1.1 christos {
397 1.1 christos if (aa->P && (aa->dst.regno - ab->dst.regno) != 1)
398 1.1 christos return yyerror ("Destination Dregs (full) must differ by one");
399 1.1 christos if (!aa->P && aa->dst.regno != ab->dst.regno)
400 1.1 christos return yyerror ("Destination Dregs (half) must match");
401 1.1 christos }
402 1.1 christos
403 1.1 christos /* Make sure mod flags get ORed, too. */
404 1.1 christos opb->mod |= opa->mod;
405 1.1 christos
406 1.1 christos /* Check option. */
407 1.1 christos if (check_macfunc_option (aa, opb) < 0
408 1.1 christos && check_macfunc_option (ab, opb) < 0)
409 1.1 christos return yyerror ("bad option");
410 1.1 christos
411 1.1 christos /* Make sure first macfunc has got both P flags ORed. */
412 1.1 christos aa->P |= ab->P;
413 1.1 christos
414 1.1 christos return 0;
415 1.1 christos }
416 1.1 christos
417 1.1 christos
418 1.1 christos static int
419 1.1 christos is_group1 (INSTR_T x)
420 1.1 christos {
421 1.1 christos /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii. */
422 1.1 christos if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
423 1.1 christos return 1;
424 1.1 christos
425 1.1 christos return 0;
426 1.1 christos }
427 1.1 christos
428 1.1 christos static int
429 1.1 christos is_group2 (INSTR_T x)
430 1.1 christos {
431 1.1 christos if ((((x->value & 0xfc00) == 0x9c00) /* dspLDST. */
432 1.1 christos && !((x->value & 0xfde0) == 0x9c60) /* dagMODim. */
433 1.1 christos && !((x->value & 0xfde0) == 0x9ce0) /* dagMODim with bit rev. */
434 1.1 christos && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik. */
435 1.1 christos || (x->value == 0x0000))
436 1.1 christos return 1;
437 1.1 christos return 0;
438 1.1 christos }
439 1.1 christos
440 1.1 christos static int
441 1.1 christos is_store (INSTR_T x)
442 1.1 christos {
443 1.1 christos if (!x)
444 1.1 christos return 0;
445 1.1 christos
446 1.1 christos if ((x->value & 0xf000) == 0x8000)
447 1.1 christos {
448 1.1 christos int aop = ((x->value >> 9) & 0x3);
449 1.1 christos int w = ((x->value >> 11) & 0x1);
450 1.1 christos if (!w || aop == 3)
451 1.1 christos return 0;
452 1.1 christos return 1;
453 1.1 christos }
454 1.1 christos
455 1.1 christos if (((x->value & 0xFF60) == 0x9E60) || /* dagMODim_0 */
456 1.1 christos ((x->value & 0xFFF0) == 0x9F60)) /* dagMODik_0 */
457 1.1 christos return 0;
458 1.1 christos
459 1.1 christos /* decode_dspLDST_0 */
460 1.1 christos if ((x->value & 0xFC00) == 0x9C00)
461 1.1 christos {
462 1.1 christos int w = ((x->value >> 9) & 0x1);
463 1.1 christos if (w)
464 1.1 christos return 1;
465 1.1 christos }
466 1.1 christos
467 1.1 christos return 0;
468 1.1 christos }
469 1.1 christos
470 1.1 christos static INSTR_T
471 1.1 christos gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2)
472 1.1 christos {
473 1.1 christos int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0;
474 1.1 christos int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0;
475 1.1 christos int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0;
476 1.1 christos
477 1.1 christos if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3))
478 1.1 christos yyerror ("resource conflict in multi-issue instruction");
479 1.1 christos
480 1.1 christos /* Anomaly 05000074 */
481 1.1 christos if (ENABLE_AC_05000074
482 1.1 christos && dsp32 != NULL && dsp16_grp1 != NULL
483 1.1 christos && (dsp32->value & 0xf780) == 0xc680
484 1.1 christos && ((dsp16_grp1->value & 0xfe40) == 0x9240
485 1.1 christos || (dsp16_grp1->value & 0xfe08) == 0xba08
486 1.1 christos || (dsp16_grp1->value & 0xfc00) == 0xbc00))
487 1.1 christos yyerror ("anomaly 05000074 - Multi-Issue Instruction with \
488 1.1 christos dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported");
489 1.1 christos
490 1.1 christos if (is_store (dsp16_grp1) && is_store (dsp16_grp2))
491 1.1 christos yyerror ("Only one instruction in multi-issue instruction can be a store");
492 1.1 christos
493 1.1 christos return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2);
494 1.1 christos }
495 1.1 christos
496 1.1 christos
497 1.1 christos #line 498 "config/bfin-parse.c"
498 1.1 christos
499 1.1 christos # ifndef YY_CAST
500 1.1 christos # ifdef __cplusplus
501 1.1 christos # define YY_CAST(Type, Val) static_cast<Type> (Val)
502 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
503 1.1 christos # else
504 1.1 christos # define YY_CAST(Type, Val) ((Type) (Val))
505 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
506 1.1 christos # endif
507 1.1 christos # endif
508 1.1 christos # ifndef YY_NULLPTR
509 1.1 christos # if defined __cplusplus
510 1.1 christos # if 201103L <= __cplusplus
511 1.1 christos # define YY_NULLPTR nullptr
512 1.1 christos # else
513 1.1 christos # define YY_NULLPTR 0
514 1.1 christos # endif
515 1.1 christos # else
516 1.1 christos # define YY_NULLPTR ((void*)0)
517 1.1 christos # endif
518 1.1 christos # endif
519 1.1 christos
520 1.1 christos /* Use api.header.include to #include this header
521 1.1 christos instead of duplicating it here. */
522 1.1 christos #ifndef YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
523 1.1 christos # define YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED
524 1.1 christos /* Debug traces. */
525 1.1 christos #ifndef YYDEBUG
526 1.1 christos # define YYDEBUG 0
527 1.1 christos #endif
528 1.1 christos #if YYDEBUG
529 1.1 christos extern int yydebug;
530 1.1 christos #endif
531 1.1 christos
532 1.1 christos /* Token kinds. */
533 1.1 christos #ifndef YYTOKENTYPE
534 1.1 christos # define YYTOKENTYPE
535 1.1 christos enum yytokentype
536 1.1 christos {
537 1.1 christos YYEMPTY = -2,
538 1.1 christos YYEOF = 0, /* "end of file" */
539 1.1 christos YYerror = 256, /* error */
540 1.1 christos YYUNDEF = 257, /* "invalid token" */
541 1.1 christos BYTEOP16P = 258, /* BYTEOP16P */
542 1.1 christos BYTEOP16M = 259, /* BYTEOP16M */
543 1.1 christos BYTEOP1P = 260, /* BYTEOP1P */
544 1.1 christos BYTEOP2P = 261, /* BYTEOP2P */
545 1.1 christos BYTEOP3P = 262, /* BYTEOP3P */
546 1.1 christos BYTEUNPACK = 263, /* BYTEUNPACK */
547 1.1 christos BYTEPACK = 264, /* BYTEPACK */
548 1.1 christos PACK = 265, /* PACK */
549 1.1 christos SAA = 266, /* SAA */
550 1.1 christos ALIGN8 = 267, /* ALIGN8 */
551 1.1 christos ALIGN16 = 268, /* ALIGN16 */
552 1.1 christos ALIGN24 = 269, /* ALIGN24 */
553 1.1 christos VIT_MAX = 270, /* VIT_MAX */
554 1.1 christos EXTRACT = 271, /* EXTRACT */
555 1.1 christos DEPOSIT = 272, /* DEPOSIT */
556 1.1 christos EXPADJ = 273, /* EXPADJ */
557 1.1 christos SEARCH = 274, /* SEARCH */
558 1.1 christos ONES = 275, /* ONES */
559 1.1 christos SIGN = 276, /* SIGN */
560 1.1 christos SIGNBITS = 277, /* SIGNBITS */
561 1.1 christos LINK = 278, /* LINK */
562 1.1 christos UNLINK = 279, /* UNLINK */
563 1.1 christos REG = 280, /* REG */
564 1.1 christos PC = 281, /* PC */
565 1.1 christos CCREG = 282, /* CCREG */
566 1.1 christos BYTE_DREG = 283, /* BYTE_DREG */
567 1.1 christos REG_A_DOUBLE_ZERO = 284, /* REG_A_DOUBLE_ZERO */
568 1.1 christos REG_A_DOUBLE_ONE = 285, /* REG_A_DOUBLE_ONE */
569 1.1 christos A_ZERO_DOT_L = 286, /* A_ZERO_DOT_L */
570 1.1 christos A_ZERO_DOT_H = 287, /* A_ZERO_DOT_H */
571 1.1 christos A_ONE_DOT_L = 288, /* A_ONE_DOT_L */
572 1.1 christos A_ONE_DOT_H = 289, /* A_ONE_DOT_H */
573 1.1 christos HALF_REG = 290, /* HALF_REG */
574 1.1 christos NOP = 291, /* NOP */
575 1.1 christos RTI = 292, /* RTI */
576 1.1 christos RTS = 293, /* RTS */
577 1.1 christos RTX = 294, /* RTX */
578 1.1 christos RTN = 295, /* RTN */
579 1.1 christos RTE = 296, /* RTE */
580 1.1 christos HLT = 297, /* HLT */
581 1.1 christos IDLE = 298, /* IDLE */
582 1.1 christos STI = 299, /* STI */
583 1.1 christos CLI = 300, /* CLI */
584 1.1 christos CSYNC = 301, /* CSYNC */
585 1.1 christos SSYNC = 302, /* SSYNC */
586 1.1 christos EMUEXCPT = 303, /* EMUEXCPT */
587 1.1 christos RAISE = 304, /* RAISE */
588 1.1 christos EXCPT = 305, /* EXCPT */
589 1.1 christos LSETUP = 306, /* LSETUP */
590 1.1 christos LOOP = 307, /* LOOP */
591 1.1 christos LOOP_BEGIN = 308, /* LOOP_BEGIN */
592 1.1 christos LOOP_END = 309, /* LOOP_END */
593 1.1 christos DISALGNEXCPT = 310, /* DISALGNEXCPT */
594 1.1 christos JUMP = 311, /* JUMP */
595 1.1 christos JUMP_DOT_S = 312, /* JUMP_DOT_S */
596 1.1 christos JUMP_DOT_L = 313, /* JUMP_DOT_L */
597 1.1 christos CALL = 314, /* CALL */
598 1.1 christos ABORT = 315, /* ABORT */
599 1.1 christos NOT = 316, /* NOT */
600 1.1 christos TILDA = 317, /* TILDA */
601 1.1 christos BANG = 318, /* BANG */
602 1.1 christos AMPERSAND = 319, /* AMPERSAND */
603 1.1 christos BAR = 320, /* BAR */
604 1.1 christos PERCENT = 321, /* PERCENT */
605 1.1 christos CARET = 322, /* CARET */
606 1.1 christos BXOR = 323, /* BXOR */
607 1.1 christos MINUS = 324, /* MINUS */
608 1.1 christos PLUS = 325, /* PLUS */
609 1.1 christos STAR = 326, /* STAR */
610 1.1 christos SLASH = 327, /* SLASH */
611 1.1 christos NEG = 328, /* NEG */
612 1.1 christos MIN = 329, /* MIN */
613 1.1 christos MAX = 330, /* MAX */
614 1.1 christos ABS = 331, /* ABS */
615 1.1 christos DOUBLE_BAR = 332, /* DOUBLE_BAR */
616 1.1 christos _PLUS_BAR_PLUS = 333, /* _PLUS_BAR_PLUS */
617 1.1 christos _PLUS_BAR_MINUS = 334, /* _PLUS_BAR_MINUS */
618 1.1 christos _MINUS_BAR_PLUS = 335, /* _MINUS_BAR_PLUS */
619 1.1 christos _MINUS_BAR_MINUS = 336, /* _MINUS_BAR_MINUS */
620 1.1 christos _MINUS_MINUS = 337, /* _MINUS_MINUS */
621 1.1 christos _PLUS_PLUS = 338, /* _PLUS_PLUS */
622 1.1 christos SHIFT = 339, /* SHIFT */
623 1.1 christos LSHIFT = 340, /* LSHIFT */
624 1.1 christos ASHIFT = 341, /* ASHIFT */
625 1.1 christos BXORSHIFT = 342, /* BXORSHIFT */
626 1.1 christos _GREATER_GREATER_GREATER_THAN_ASSIGN = 343, /* _GREATER_GREATER_GREATER_THAN_ASSIGN */
627 1.1 christos ROT = 344, /* ROT */
628 1.1 christos LESS_LESS = 345, /* LESS_LESS */
629 1.1 christos GREATER_GREATER = 346, /* GREATER_GREATER */
630 1.1 christos _GREATER_GREATER_GREATER = 347, /* _GREATER_GREATER_GREATER */
631 1.1 christos _LESS_LESS_ASSIGN = 348, /* _LESS_LESS_ASSIGN */
632 1.1 christos _GREATER_GREATER_ASSIGN = 349, /* _GREATER_GREATER_ASSIGN */
633 1.1 christos DIVS = 350, /* DIVS */
634 1.1 christos DIVQ = 351, /* DIVQ */
635 1.1 christos ASSIGN = 352, /* ASSIGN */
636 1.1 christos _STAR_ASSIGN = 353, /* _STAR_ASSIGN */
637 1.1 christos _BAR_ASSIGN = 354, /* _BAR_ASSIGN */
638 1.1 christos _CARET_ASSIGN = 355, /* _CARET_ASSIGN */
639 1.1 christos _AMPERSAND_ASSIGN = 356, /* _AMPERSAND_ASSIGN */
640 1.1 christos _MINUS_ASSIGN = 357, /* _MINUS_ASSIGN */
641 1.1 christos _PLUS_ASSIGN = 358, /* _PLUS_ASSIGN */
642 1.1.1.2 christos _LESS_THAN_ASSIGN = 359, /* _LESS_THAN_ASSIGN */
643 1.1.1.2 christos _ASSIGN_ASSIGN = 360, /* _ASSIGN_ASSIGN */
644 1.1.1.2 christos GE = 361, /* GE */
645 1.1.1.2 christos LT = 362, /* LT */
646 1.1.1.2 christos LE = 363, /* LE */
647 1.1.1.2 christos GT = 364, /* GT */
648 1.1.1.2 christos LESS_THAN = 365, /* LESS_THAN */
649 1.1.1.2 christos FLUSHINV = 366, /* FLUSHINV */
650 1.1.1.2 christos FLUSH = 367, /* FLUSH */
651 1.1.1.2 christos IFLUSH = 368, /* IFLUSH */
652 1.1.1.2 christos PREFETCH = 369, /* PREFETCH */
653 1.1.1.2 christos PRNT = 370, /* PRNT */
654 1.1.1.2 christos OUTC = 371, /* OUTC */
655 1.1.1.2 christos WHATREG = 372, /* WHATREG */
656 1.1.1.2 christos TESTSET = 373, /* TESTSET */
657 1.1.1.2 christos ASL = 374, /* ASL */
658 1.1.1.2 christos ASR = 375, /* ASR */
659 1.1.1.2 christos B = 376, /* B */
660 1.1.1.2 christos W = 377, /* W */
661 1.1.1.2 christos NS = 378, /* NS */
662 1.1.1.2 christos S = 379, /* S */
663 1.1.1.2 christos CO = 380, /* CO */
664 1.1.1.2 christos SCO = 381, /* SCO */
665 1.1.1.2 christos TH = 382, /* TH */
666 1.1.1.2 christos TL = 383, /* TL */
667 1.1.1.2 christos BP = 384, /* BP */
668 1.1.1.2 christos BREV = 385, /* BREV */
669 1.1.1.2 christos X = 386, /* X */
670 1.1.1.2 christos Z = 387, /* Z */
671 1.1.1.2 christos M = 388, /* M */
672 1.1.1.2 christos MMOD = 389, /* MMOD */
673 1.1.1.2 christos R = 390, /* R */
674 1.1.1.2 christos RND = 391, /* RND */
675 1.1.1.2 christos RNDL = 392, /* RNDL */
676 1.1.1.2 christos RNDH = 393, /* RNDH */
677 1.1.1.2 christos RND12 = 394, /* RND12 */
678 1.1.1.2 christos RND20 = 395, /* RND20 */
679 1.1.1.2 christos V = 396, /* V */
680 1.1.1.2 christos LO = 397, /* LO */
681 1.1.1.2 christos HI = 398, /* HI */
682 1.1.1.2 christos BITTGL = 399, /* BITTGL */
683 1.1.1.2 christos BITCLR = 400, /* BITCLR */
684 1.1.1.2 christos BITSET = 401, /* BITSET */
685 1.1.1.2 christos BITTST = 402, /* BITTST */
686 1.1.1.2 christos BITMUX = 403, /* BITMUX */
687 1.1.1.2 christos DBGAL = 404, /* DBGAL */
688 1.1.1.2 christos DBGAH = 405, /* DBGAH */
689 1.1.1.2 christos DBGHALT = 406, /* DBGHALT */
690 1.1.1.2 christos DBG = 407, /* DBG */
691 1.1.1.2 christos DBGA = 408, /* DBGA */
692 1.1.1.2 christos DBGCMPLX = 409, /* DBGCMPLX */
693 1.1.1.2 christos IF = 410, /* IF */
694 1.1.1.2 christos COMMA = 411, /* COMMA */
695 1.1.1.2 christos BY = 412, /* BY */
696 1.1.1.2 christos COLON = 413, /* COLON */
697 1.1.1.2 christos SEMICOLON = 414, /* SEMICOLON */
698 1.1.1.2 christos RPAREN = 415, /* RPAREN */
699 1.1.1.2 christos LPAREN = 416, /* LPAREN */
700 1.1.1.2 christos LBRACK = 417, /* LBRACK */
701 1.1.1.2 christos RBRACK = 418, /* RBRACK */
702 1.1.1.2 christos STATUS_REG = 419, /* STATUS_REG */
703 1.1.1.2 christos MNOP = 420, /* MNOP */
704 1.1.1.2 christos SYMBOL = 421, /* SYMBOL */
705 1.1.1.2 christos NUMBER = 422, /* NUMBER */
706 1.1.1.2 christos GOT = 423, /* GOT */
707 1.1.1.2 christos GOT17M4 = 424, /* GOT17M4 */
708 1.1.1.2 christos FUNCDESC_GOT17M4 = 425, /* FUNCDESC_GOT17M4 */
709 1.1.1.2 christos AT = 426, /* AT */
710 1.1.1.2 christos PLTPC = 427 /* PLTPC */
711 1.1 christos };
712 1.1 christos typedef enum yytokentype yytoken_kind_t;
713 1.1 christos #endif
714 1.1 christos /* Token kinds. */
715 1.1 christos #define YYEMPTY -2
716 1.1 christos #define YYEOF 0
717 1.1 christos #define YYerror 256
718 1.1 christos #define YYUNDEF 257
719 1.1 christos #define BYTEOP16P 258
720 1.1 christos #define BYTEOP16M 259
721 1.1 christos #define BYTEOP1P 260
722 1.1 christos #define BYTEOP2P 261
723 1.1 christos #define BYTEOP3P 262
724 1.1 christos #define BYTEUNPACK 263
725 1.1 christos #define BYTEPACK 264
726 1.1 christos #define PACK 265
727 1.1 christos #define SAA 266
728 1.1 christos #define ALIGN8 267
729 1.1 christos #define ALIGN16 268
730 1.1 christos #define ALIGN24 269
731 1.1 christos #define VIT_MAX 270
732 1.1 christos #define EXTRACT 271
733 1.1 christos #define DEPOSIT 272
734 1.1 christos #define EXPADJ 273
735 1.1 christos #define SEARCH 274
736 1.1 christos #define ONES 275
737 1.1 christos #define SIGN 276
738 1.1 christos #define SIGNBITS 277
739 1.1 christos #define LINK 278
740 1.1 christos #define UNLINK 279
741 1.1 christos #define REG 280
742 1.1 christos #define PC 281
743 1.1 christos #define CCREG 282
744 1.1 christos #define BYTE_DREG 283
745 1.1 christos #define REG_A_DOUBLE_ZERO 284
746 1.1 christos #define REG_A_DOUBLE_ONE 285
747 1.1 christos #define A_ZERO_DOT_L 286
748 1.1 christos #define A_ZERO_DOT_H 287
749 1.1 christos #define A_ONE_DOT_L 288
750 1.1 christos #define A_ONE_DOT_H 289
751 1.1 christos #define HALF_REG 290
752 1.1 christos #define NOP 291
753 1.1 christos #define RTI 292
754 1.1 christos #define RTS 293
755 1.1 christos #define RTX 294
756 1.1 christos #define RTN 295
757 1.1 christos #define RTE 296
758 1.1 christos #define HLT 297
759 1.1 christos #define IDLE 298
760 1.1 christos #define STI 299
761 1.1 christos #define CLI 300
762 1.1 christos #define CSYNC 301
763 1.1 christos #define SSYNC 302
764 1.1 christos #define EMUEXCPT 303
765 1.1 christos #define RAISE 304
766 1.1 christos #define EXCPT 305
767 1.1 christos #define LSETUP 306
768 1.1 christos #define LOOP 307
769 1.1 christos #define LOOP_BEGIN 308
770 1.1 christos #define LOOP_END 309
771 1.1 christos #define DISALGNEXCPT 310
772 1.1 christos #define JUMP 311
773 1.1 christos #define JUMP_DOT_S 312
774 1.1 christos #define JUMP_DOT_L 313
775 1.1 christos #define CALL 314
776 1.1 christos #define ABORT 315
777 1.1 christos #define NOT 316
778 1.1 christos #define TILDA 317
779 1.1 christos #define BANG 318
780 1.1 christos #define AMPERSAND 319
781 1.1 christos #define BAR 320
782 1.1 christos #define PERCENT 321
783 1.1 christos #define CARET 322
784 1.1 christos #define BXOR 323
785 1.1 christos #define MINUS 324
786 1.1 christos #define PLUS 325
787 1.1 christos #define STAR 326
788 1.1 christos #define SLASH 327
789 1.1 christos #define NEG 328
790 1.1 christos #define MIN 329
791 1.1 christos #define MAX 330
792 1.1 christos #define ABS 331
793 1.1 christos #define DOUBLE_BAR 332
794 1.1 christos #define _PLUS_BAR_PLUS 333
795 1.1 christos #define _PLUS_BAR_MINUS 334
796 1.1 christos #define _MINUS_BAR_PLUS 335
797 1.1 christos #define _MINUS_BAR_MINUS 336
798 1.1 christos #define _MINUS_MINUS 337
799 1.1 christos #define _PLUS_PLUS 338
800 1.1 christos #define SHIFT 339
801 1.1 christos #define LSHIFT 340
802 1.1 christos #define ASHIFT 341
803 1.1 christos #define BXORSHIFT 342
804 1.1 christos #define _GREATER_GREATER_GREATER_THAN_ASSIGN 343
805 1.1 christos #define ROT 344
806 1.1 christos #define LESS_LESS 345
807 1.1 christos #define GREATER_GREATER 346
808 1.1 christos #define _GREATER_GREATER_GREATER 347
809 1.1 christos #define _LESS_LESS_ASSIGN 348
810 1.1 christos #define _GREATER_GREATER_ASSIGN 349
811 1.1 christos #define DIVS 350
812 1.1 christos #define DIVQ 351
813 1.1 christos #define ASSIGN 352
814 1.1 christos #define _STAR_ASSIGN 353
815 1.1 christos #define _BAR_ASSIGN 354
816 1.1 christos #define _CARET_ASSIGN 355
817 1.1 christos #define _AMPERSAND_ASSIGN 356
818 1.1 christos #define _MINUS_ASSIGN 357
819 1.1 christos #define _PLUS_ASSIGN 358
820 1.1.1.2 christos #define _LESS_THAN_ASSIGN 359
821 1.1.1.2 christos #define _ASSIGN_ASSIGN 360
822 1.1.1.2 christos #define GE 361
823 1.1.1.2 christos #define LT 362
824 1.1.1.2 christos #define LE 363
825 1.1.1.2 christos #define GT 364
826 1.1.1.2 christos #define LESS_THAN 365
827 1.1.1.2 christos #define FLUSHINV 366
828 1.1.1.2 christos #define FLUSH 367
829 1.1.1.2 christos #define IFLUSH 368
830 1.1.1.2 christos #define PREFETCH 369
831 1.1.1.2 christos #define PRNT 370
832 1.1.1.2 christos #define OUTC 371
833 1.1.1.2 christos #define WHATREG 372
834 1.1.1.2 christos #define TESTSET 373
835 1.1.1.2 christos #define ASL 374
836 1.1.1.2 christos #define ASR 375
837 1.1.1.2 christos #define B 376
838 1.1.1.2 christos #define W 377
839 1.1.1.2 christos #define NS 378
840 1.1.1.2 christos #define S 379
841 1.1.1.2 christos #define CO 380
842 1.1.1.2 christos #define SCO 381
843 1.1.1.2 christos #define TH 382
844 1.1.1.2 christos #define TL 383
845 1.1.1.2 christos #define BP 384
846 1.1.1.2 christos #define BREV 385
847 1.1.1.2 christos #define X 386
848 1.1.1.2 christos #define Z 387
849 1.1.1.2 christos #define M 388
850 1.1.1.2 christos #define MMOD 389
851 1.1.1.2 christos #define R 390
852 1.1.1.2 christos #define RND 391
853 1.1.1.2 christos #define RNDL 392
854 1.1.1.2 christos #define RNDH 393
855 1.1.1.2 christos #define RND12 394
856 1.1.1.2 christos #define RND20 395
857 1.1.1.2 christos #define V 396
858 1.1.1.2 christos #define LO 397
859 1.1.1.2 christos #define HI 398
860 1.1.1.2 christos #define BITTGL 399
861 1.1.1.2 christos #define BITCLR 400
862 1.1.1.2 christos #define BITSET 401
863 1.1.1.2 christos #define BITTST 402
864 1.1.1.2 christos #define BITMUX 403
865 1.1.1.2 christos #define DBGAL 404
866 1.1.1.2 christos #define DBGAH 405
867 1.1.1.2 christos #define DBGHALT 406
868 1.1.1.2 christos #define DBG 407
869 1.1.1.2 christos #define DBGA 408
870 1.1.1.2 christos #define DBGCMPLX 409
871 1.1.1.2 christos #define IF 410
872 1.1.1.2 christos #define COMMA 411
873 1.1.1.2 christos #define BY 412
874 1.1.1.2 christos #define COLON 413
875 1.1.1.2 christos #define SEMICOLON 414
876 1.1.1.2 christos #define RPAREN 415
877 1.1.1.2 christos #define LPAREN 416
878 1.1.1.2 christos #define LBRACK 417
879 1.1.1.2 christos #define RBRACK 418
880 1.1.1.2 christos #define STATUS_REG 419
881 1.1.1.2 christos #define MNOP 420
882 1.1.1.2 christos #define SYMBOL 421
883 1.1.1.2 christos #define NUMBER 422
884 1.1.1.2 christos #define GOT 423
885 1.1.1.2 christos #define GOT17M4 424
886 1.1.1.2 christos #define FUNCDESC_GOT17M4 425
887 1.1.1.2 christos #define AT 426
888 1.1.1.2 christos #define PLTPC 427
889 1.1 christos
890 1.1 christos /* Value type. */
891 1.1 christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
892 1.1 christos union YYSTYPE
893 1.1 christos {
894 1.1 christos #line 447 "./config/bfin-parse.y"
895 1.1 christos
896 1.1 christos INSTR_T instr;
897 1.1 christos Expr_Node *expr;
898 1.1 christos SYMBOL_T symbol;
899 1.1 christos long value;
900 1.1 christos Register reg;
901 1.1 christos Macfunc macfunc;
902 1.1 christos struct { int r0; int s0; int x0; int aop; } modcodes;
903 1.1 christos struct { int r0; } r0;
904 1.1 christos Opt_mode mod;
905 1.1 christos
906 1.1.1.2 christos #line 907 "config/bfin-parse.c"
907 1.1 christos
908 1.1 christos };
909 1.1 christos typedef union YYSTYPE YYSTYPE;
910 1.1 christos # define YYSTYPE_IS_TRIVIAL 1
911 1.1 christos # define YYSTYPE_IS_DECLARED 1
912 1.1 christos #endif
913 1.1 christos
914 1.1 christos
915 1.1 christos extern YYSTYPE yylval;
916 1.1 christos
917 1.1 christos
918 1.1 christos int yyparse (void);
919 1.1 christos
920 1.1 christos
921 1.1 christos #endif /* !YY_YY_CONFIG_BFIN_PARSE_H_INCLUDED */
922 1.1 christos /* Symbol kind. */
923 1.1 christos enum yysymbol_kind_t
924 1.1 christos {
925 1.1 christos YYSYMBOL_YYEMPTY = -2,
926 1.1 christos YYSYMBOL_YYEOF = 0, /* "end of file" */
927 1.1 christos YYSYMBOL_YYerror = 1, /* error */
928 1.1 christos YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
929 1.1 christos YYSYMBOL_BYTEOP16P = 3, /* BYTEOP16P */
930 1.1 christos YYSYMBOL_BYTEOP16M = 4, /* BYTEOP16M */
931 1.1 christos YYSYMBOL_BYTEOP1P = 5, /* BYTEOP1P */
932 1.1 christos YYSYMBOL_BYTEOP2P = 6, /* BYTEOP2P */
933 1.1 christos YYSYMBOL_BYTEOP3P = 7, /* BYTEOP3P */
934 1.1 christos YYSYMBOL_BYTEUNPACK = 8, /* BYTEUNPACK */
935 1.1 christos YYSYMBOL_BYTEPACK = 9, /* BYTEPACK */
936 1.1 christos YYSYMBOL_PACK = 10, /* PACK */
937 1.1 christos YYSYMBOL_SAA = 11, /* SAA */
938 1.1 christos YYSYMBOL_ALIGN8 = 12, /* ALIGN8 */
939 1.1 christos YYSYMBOL_ALIGN16 = 13, /* ALIGN16 */
940 1.1 christos YYSYMBOL_ALIGN24 = 14, /* ALIGN24 */
941 1.1 christos YYSYMBOL_VIT_MAX = 15, /* VIT_MAX */
942 1.1 christos YYSYMBOL_EXTRACT = 16, /* EXTRACT */
943 1.1 christos YYSYMBOL_DEPOSIT = 17, /* DEPOSIT */
944 1.1 christos YYSYMBOL_EXPADJ = 18, /* EXPADJ */
945 1.1 christos YYSYMBOL_SEARCH = 19, /* SEARCH */
946 1.1 christos YYSYMBOL_ONES = 20, /* ONES */
947 1.1 christos YYSYMBOL_SIGN = 21, /* SIGN */
948 1.1 christos YYSYMBOL_SIGNBITS = 22, /* SIGNBITS */
949 1.1 christos YYSYMBOL_LINK = 23, /* LINK */
950 1.1 christos YYSYMBOL_UNLINK = 24, /* UNLINK */
951 1.1 christos YYSYMBOL_REG = 25, /* REG */
952 1.1 christos YYSYMBOL_PC = 26, /* PC */
953 1.1 christos YYSYMBOL_CCREG = 27, /* CCREG */
954 1.1 christos YYSYMBOL_BYTE_DREG = 28, /* BYTE_DREG */
955 1.1 christos YYSYMBOL_REG_A_DOUBLE_ZERO = 29, /* REG_A_DOUBLE_ZERO */
956 1.1 christos YYSYMBOL_REG_A_DOUBLE_ONE = 30, /* REG_A_DOUBLE_ONE */
957 1.1 christos YYSYMBOL_A_ZERO_DOT_L = 31, /* A_ZERO_DOT_L */
958 1.1 christos YYSYMBOL_A_ZERO_DOT_H = 32, /* A_ZERO_DOT_H */
959 1.1 christos YYSYMBOL_A_ONE_DOT_L = 33, /* A_ONE_DOT_L */
960 1.1 christos YYSYMBOL_A_ONE_DOT_H = 34, /* A_ONE_DOT_H */
961 1.1 christos YYSYMBOL_HALF_REG = 35, /* HALF_REG */
962 1.1 christos YYSYMBOL_NOP = 36, /* NOP */
963 1.1 christos YYSYMBOL_RTI = 37, /* RTI */
964 1.1 christos YYSYMBOL_RTS = 38, /* RTS */
965 1.1 christos YYSYMBOL_RTX = 39, /* RTX */
966 1.1 christos YYSYMBOL_RTN = 40, /* RTN */
967 1.1 christos YYSYMBOL_RTE = 41, /* RTE */
968 1.1 christos YYSYMBOL_HLT = 42, /* HLT */
969 1.1 christos YYSYMBOL_IDLE = 43, /* IDLE */
970 1.1 christos YYSYMBOL_STI = 44, /* STI */
971 1.1 christos YYSYMBOL_CLI = 45, /* CLI */
972 1.1 christos YYSYMBOL_CSYNC = 46, /* CSYNC */
973 1.1 christos YYSYMBOL_SSYNC = 47, /* SSYNC */
974 1.1 christos YYSYMBOL_EMUEXCPT = 48, /* EMUEXCPT */
975 1.1 christos YYSYMBOL_RAISE = 49, /* RAISE */
976 1.1 christos YYSYMBOL_EXCPT = 50, /* EXCPT */
977 1.1 christos YYSYMBOL_LSETUP = 51, /* LSETUP */
978 1.1 christos YYSYMBOL_LOOP = 52, /* LOOP */
979 1.1 christos YYSYMBOL_LOOP_BEGIN = 53, /* LOOP_BEGIN */
980 1.1 christos YYSYMBOL_LOOP_END = 54, /* LOOP_END */
981 1.1 christos YYSYMBOL_DISALGNEXCPT = 55, /* DISALGNEXCPT */
982 1.1 christos YYSYMBOL_JUMP = 56, /* JUMP */
983 1.1 christos YYSYMBOL_JUMP_DOT_S = 57, /* JUMP_DOT_S */
984 1.1 christos YYSYMBOL_JUMP_DOT_L = 58, /* JUMP_DOT_L */
985 1.1 christos YYSYMBOL_CALL = 59, /* CALL */
986 1.1 christos YYSYMBOL_ABORT = 60, /* ABORT */
987 1.1 christos YYSYMBOL_NOT = 61, /* NOT */
988 1.1 christos YYSYMBOL_TILDA = 62, /* TILDA */
989 1.1 christos YYSYMBOL_BANG = 63, /* BANG */
990 1.1 christos YYSYMBOL_AMPERSAND = 64, /* AMPERSAND */
991 1.1 christos YYSYMBOL_BAR = 65, /* BAR */
992 1.1 christos YYSYMBOL_PERCENT = 66, /* PERCENT */
993 1.1 christos YYSYMBOL_CARET = 67, /* CARET */
994 1.1 christos YYSYMBOL_BXOR = 68, /* BXOR */
995 1.1 christos YYSYMBOL_MINUS = 69, /* MINUS */
996 1.1 christos YYSYMBOL_PLUS = 70, /* PLUS */
997 1.1 christos YYSYMBOL_STAR = 71, /* STAR */
998 1.1 christos YYSYMBOL_SLASH = 72, /* SLASH */
999 1.1 christos YYSYMBOL_NEG = 73, /* NEG */
1000 1.1 christos YYSYMBOL_MIN = 74, /* MIN */
1001 1.1 christos YYSYMBOL_MAX = 75, /* MAX */
1002 1.1 christos YYSYMBOL_ABS = 76, /* ABS */
1003 1.1 christos YYSYMBOL_DOUBLE_BAR = 77, /* DOUBLE_BAR */
1004 1.1 christos YYSYMBOL__PLUS_BAR_PLUS = 78, /* _PLUS_BAR_PLUS */
1005 1.1 christos YYSYMBOL__PLUS_BAR_MINUS = 79, /* _PLUS_BAR_MINUS */
1006 1.1 christos YYSYMBOL__MINUS_BAR_PLUS = 80, /* _MINUS_BAR_PLUS */
1007 1.1 christos YYSYMBOL__MINUS_BAR_MINUS = 81, /* _MINUS_BAR_MINUS */
1008 1.1 christos YYSYMBOL__MINUS_MINUS = 82, /* _MINUS_MINUS */
1009 1.1 christos YYSYMBOL__PLUS_PLUS = 83, /* _PLUS_PLUS */
1010 1.1 christos YYSYMBOL_SHIFT = 84, /* SHIFT */
1011 1.1 christos YYSYMBOL_LSHIFT = 85, /* LSHIFT */
1012 1.1 christos YYSYMBOL_ASHIFT = 86, /* ASHIFT */
1013 1.1 christos YYSYMBOL_BXORSHIFT = 87, /* BXORSHIFT */
1014 1.1 christos YYSYMBOL__GREATER_GREATER_GREATER_THAN_ASSIGN = 88, /* _GREATER_GREATER_GREATER_THAN_ASSIGN */
1015 1.1 christos YYSYMBOL_ROT = 89, /* ROT */
1016 1.1 christos YYSYMBOL_LESS_LESS = 90, /* LESS_LESS */
1017 1.1 christos YYSYMBOL_GREATER_GREATER = 91, /* GREATER_GREATER */
1018 1.1 christos YYSYMBOL__GREATER_GREATER_GREATER = 92, /* _GREATER_GREATER_GREATER */
1019 1.1 christos YYSYMBOL__LESS_LESS_ASSIGN = 93, /* _LESS_LESS_ASSIGN */
1020 1.1 christos YYSYMBOL__GREATER_GREATER_ASSIGN = 94, /* _GREATER_GREATER_ASSIGN */
1021 1.1 christos YYSYMBOL_DIVS = 95, /* DIVS */
1022 1.1 christos YYSYMBOL_DIVQ = 96, /* DIVQ */
1023 1.1 christos YYSYMBOL_ASSIGN = 97, /* ASSIGN */
1024 1.1 christos YYSYMBOL__STAR_ASSIGN = 98, /* _STAR_ASSIGN */
1025 1.1 christos YYSYMBOL__BAR_ASSIGN = 99, /* _BAR_ASSIGN */
1026 1.1 christos YYSYMBOL__CARET_ASSIGN = 100, /* _CARET_ASSIGN */
1027 1.1 christos YYSYMBOL__AMPERSAND_ASSIGN = 101, /* _AMPERSAND_ASSIGN */
1028 1.1 christos YYSYMBOL__MINUS_ASSIGN = 102, /* _MINUS_ASSIGN */
1029 1.1 christos YYSYMBOL__PLUS_ASSIGN = 103, /* _PLUS_ASSIGN */
1030 1.1.1.2 christos YYSYMBOL__LESS_THAN_ASSIGN = 104, /* _LESS_THAN_ASSIGN */
1031 1.1.1.2 christos YYSYMBOL__ASSIGN_ASSIGN = 105, /* _ASSIGN_ASSIGN */
1032 1.1.1.2 christos YYSYMBOL_GE = 106, /* GE */
1033 1.1.1.2 christos YYSYMBOL_LT = 107, /* LT */
1034 1.1.1.2 christos YYSYMBOL_LE = 108, /* LE */
1035 1.1.1.2 christos YYSYMBOL_GT = 109, /* GT */
1036 1.1.1.2 christos YYSYMBOL_LESS_THAN = 110, /* LESS_THAN */
1037 1.1.1.2 christos YYSYMBOL_FLUSHINV = 111, /* FLUSHINV */
1038 1.1.1.2 christos YYSYMBOL_FLUSH = 112, /* FLUSH */
1039 1.1.1.2 christos YYSYMBOL_IFLUSH = 113, /* IFLUSH */
1040 1.1.1.2 christos YYSYMBOL_PREFETCH = 114, /* PREFETCH */
1041 1.1.1.2 christos YYSYMBOL_PRNT = 115, /* PRNT */
1042 1.1.1.2 christos YYSYMBOL_OUTC = 116, /* OUTC */
1043 1.1.1.2 christos YYSYMBOL_WHATREG = 117, /* WHATREG */
1044 1.1.1.2 christos YYSYMBOL_TESTSET = 118, /* TESTSET */
1045 1.1.1.2 christos YYSYMBOL_ASL = 119, /* ASL */
1046 1.1.1.2 christos YYSYMBOL_ASR = 120, /* ASR */
1047 1.1.1.2 christos YYSYMBOL_B = 121, /* B */
1048 1.1.1.2 christos YYSYMBOL_W = 122, /* W */
1049 1.1.1.2 christos YYSYMBOL_NS = 123, /* NS */
1050 1.1.1.2 christos YYSYMBOL_S = 124, /* S */
1051 1.1.1.2 christos YYSYMBOL_CO = 125, /* CO */
1052 1.1.1.2 christos YYSYMBOL_SCO = 126, /* SCO */
1053 1.1.1.2 christos YYSYMBOL_TH = 127, /* TH */
1054 1.1.1.2 christos YYSYMBOL_TL = 128, /* TL */
1055 1.1.1.2 christos YYSYMBOL_BP = 129, /* BP */
1056 1.1.1.2 christos YYSYMBOL_BREV = 130, /* BREV */
1057 1.1.1.2 christos YYSYMBOL_X = 131, /* X */
1058 1.1.1.2 christos YYSYMBOL_Z = 132, /* Z */
1059 1.1.1.2 christos YYSYMBOL_M = 133, /* M */
1060 1.1.1.2 christos YYSYMBOL_MMOD = 134, /* MMOD */
1061 1.1.1.2 christos YYSYMBOL_R = 135, /* R */
1062 1.1.1.2 christos YYSYMBOL_RND = 136, /* RND */
1063 1.1.1.2 christos YYSYMBOL_RNDL = 137, /* RNDL */
1064 1.1.1.2 christos YYSYMBOL_RNDH = 138, /* RNDH */
1065 1.1.1.2 christos YYSYMBOL_RND12 = 139, /* RND12 */
1066 1.1.1.2 christos YYSYMBOL_RND20 = 140, /* RND20 */
1067 1.1.1.2 christos YYSYMBOL_V = 141, /* V */
1068 1.1.1.2 christos YYSYMBOL_LO = 142, /* LO */
1069 1.1.1.2 christos YYSYMBOL_HI = 143, /* HI */
1070 1.1.1.2 christos YYSYMBOL_BITTGL = 144, /* BITTGL */
1071 1.1.1.2 christos YYSYMBOL_BITCLR = 145, /* BITCLR */
1072 1.1.1.2 christos YYSYMBOL_BITSET = 146, /* BITSET */
1073 1.1.1.2 christos YYSYMBOL_BITTST = 147, /* BITTST */
1074 1.1.1.2 christos YYSYMBOL_BITMUX = 148, /* BITMUX */
1075 1.1.1.2 christos YYSYMBOL_DBGAL = 149, /* DBGAL */
1076 1.1.1.2 christos YYSYMBOL_DBGAH = 150, /* DBGAH */
1077 1.1.1.2 christos YYSYMBOL_DBGHALT = 151, /* DBGHALT */
1078 1.1.1.2 christos YYSYMBOL_DBG = 152, /* DBG */
1079 1.1.1.2 christos YYSYMBOL_DBGA = 153, /* DBGA */
1080 1.1.1.2 christos YYSYMBOL_DBGCMPLX = 154, /* DBGCMPLX */
1081 1.1.1.2 christos YYSYMBOL_IF = 155, /* IF */
1082 1.1.1.2 christos YYSYMBOL_COMMA = 156, /* COMMA */
1083 1.1.1.2 christos YYSYMBOL_BY = 157, /* BY */
1084 1.1.1.2 christos YYSYMBOL_COLON = 158, /* COLON */
1085 1.1.1.2 christos YYSYMBOL_SEMICOLON = 159, /* SEMICOLON */
1086 1.1.1.2 christos YYSYMBOL_RPAREN = 160, /* RPAREN */
1087 1.1.1.2 christos YYSYMBOL_LPAREN = 161, /* LPAREN */
1088 1.1.1.2 christos YYSYMBOL_LBRACK = 162, /* LBRACK */
1089 1.1.1.2 christos YYSYMBOL_RBRACK = 163, /* RBRACK */
1090 1.1.1.2 christos YYSYMBOL_STATUS_REG = 164, /* STATUS_REG */
1091 1.1.1.2 christos YYSYMBOL_MNOP = 165, /* MNOP */
1092 1.1.1.2 christos YYSYMBOL_SYMBOL = 166, /* SYMBOL */
1093 1.1.1.2 christos YYSYMBOL_NUMBER = 167, /* NUMBER */
1094 1.1.1.2 christos YYSYMBOL_GOT = 168, /* GOT */
1095 1.1.1.2 christos YYSYMBOL_GOT17M4 = 169, /* GOT17M4 */
1096 1.1.1.2 christos YYSYMBOL_FUNCDESC_GOT17M4 = 170, /* FUNCDESC_GOT17M4 */
1097 1.1.1.2 christos YYSYMBOL_AT = 171, /* AT */
1098 1.1.1.2 christos YYSYMBOL_PLTPC = 172, /* PLTPC */
1099 1.1.1.2 christos YYSYMBOL_YYACCEPT = 173, /* $accept */
1100 1.1.1.2 christos YYSYMBOL_statement = 174, /* statement */
1101 1.1.1.2 christos YYSYMBOL_asm = 175, /* asm */
1102 1.1.1.2 christos YYSYMBOL_asm_1 = 176, /* asm_1 */
1103 1.1.1.2 christos YYSYMBOL_REG_A = 177, /* REG_A */
1104 1.1.1.2 christos YYSYMBOL_opt_mode = 178, /* opt_mode */
1105 1.1.1.2 christos YYSYMBOL_asr_asl = 179, /* asr_asl */
1106 1.1.1.2 christos YYSYMBOL_sco = 180, /* sco */
1107 1.1.1.2 christos YYSYMBOL_asr_asl_0 = 181, /* asr_asl_0 */
1108 1.1.1.2 christos YYSYMBOL_amod0 = 182, /* amod0 */
1109 1.1.1.2 christos YYSYMBOL_amod1 = 183, /* amod1 */
1110 1.1.1.2 christos YYSYMBOL_amod2 = 184, /* amod2 */
1111 1.1.1.2 christos YYSYMBOL_xpmod = 185, /* xpmod */
1112 1.1.1.2 christos YYSYMBOL_xpmod1 = 186, /* xpmod1 */
1113 1.1.1.2 christos YYSYMBOL_vsmod = 187, /* vsmod */
1114 1.1.1.2 christos YYSYMBOL_vmod = 188, /* vmod */
1115 1.1.1.2 christos YYSYMBOL_smod = 189, /* smod */
1116 1.1.1.2 christos YYSYMBOL_searchmod = 190, /* searchmod */
1117 1.1.1.2 christos YYSYMBOL_aligndir = 191, /* aligndir */
1118 1.1.1.2 christos YYSYMBOL_byteop_mod = 192, /* byteop_mod */
1119 1.1.1.2 christos YYSYMBOL_c_align = 193, /* c_align */
1120 1.1.1.2 christos YYSYMBOL_w32_or_nothing = 194, /* w32_or_nothing */
1121 1.1.1.2 christos YYSYMBOL_iu_or_nothing = 195, /* iu_or_nothing */
1122 1.1.1.2 christos YYSYMBOL_reg_with_predec = 196, /* reg_with_predec */
1123 1.1.1.2 christos YYSYMBOL_reg_with_postinc = 197, /* reg_with_postinc */
1124 1.1.1.2 christos YYSYMBOL_min_max = 198, /* min_max */
1125 1.1.1.2 christos YYSYMBOL_op_bar_op = 199, /* op_bar_op */
1126 1.1.1.2 christos YYSYMBOL_plus_minus = 200, /* plus_minus */
1127 1.1.1.2 christos YYSYMBOL_rnd_op = 201, /* rnd_op */
1128 1.1.1.2 christos YYSYMBOL_b3_op = 202, /* b3_op */
1129 1.1.1.2 christos YYSYMBOL_post_op = 203, /* post_op */
1130 1.1.1.2 christos YYSYMBOL_a_assign = 204, /* a_assign */
1131 1.1.1.2 christos YYSYMBOL_a_minusassign = 205, /* a_minusassign */
1132 1.1.1.2 christos YYSYMBOL_a_plusassign = 206, /* a_plusassign */
1133 1.1.1.2 christos YYSYMBOL_assign_macfunc = 207, /* assign_macfunc */
1134 1.1.1.2 christos YYSYMBOL_a_macfunc = 208, /* a_macfunc */
1135 1.1.1.2 christos YYSYMBOL_multiply_halfregs = 209, /* multiply_halfregs */
1136 1.1.1.2 christos YYSYMBOL_cc_op = 210, /* cc_op */
1137 1.1.1.2 christos YYSYMBOL_ccstat = 211, /* ccstat */
1138 1.1.1.2 christos YYSYMBOL_symbol = 212, /* symbol */
1139 1.1.1.2 christos YYSYMBOL_any_gotrel = 213, /* any_gotrel */
1140 1.1.1.2 christos YYSYMBOL_got = 214, /* got */
1141 1.1.1.2 christos YYSYMBOL_got_or_expr = 215, /* got_or_expr */
1142 1.1.1.2 christos YYSYMBOL_pltpc = 216, /* pltpc */
1143 1.1.1.2 christos YYSYMBOL_eterm = 217, /* eterm */
1144 1.1.1.2 christos YYSYMBOL_expr = 218, /* expr */
1145 1.1.1.2 christos YYSYMBOL_expr_1 = 219 /* expr_1 */
1146 1.1 christos };
1147 1.1 christos typedef enum yysymbol_kind_t yysymbol_kind_t;
1148 1.1 christos
1149 1.1 christos
1150 1.1 christos
1151 1.1 christos
1152 1.1 christos #ifdef short
1153 1.1 christos # undef short
1154 1.1 christos #endif
1155 1.1 christos
1156 1.1 christos /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
1157 1.1 christos <limits.h> and (if available) <stdint.h> are included
1158 1.1 christos so that the code can choose integer types of a good width. */
1159 1.1 christos
1160 1.1 christos #ifndef __PTRDIFF_MAX__
1161 1.1 christos # include <limits.h> /* INFRINGES ON USER NAME SPACE */
1162 1.1 christos # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1163 1.1 christos # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
1164 1.1 christos # define YY_STDINT_H
1165 1.1 christos # endif
1166 1.1 christos #endif
1167 1.1 christos
1168 1.1 christos /* Narrow types that promote to a signed type and that can represent a
1169 1.1 christos signed or unsigned integer of at least N bits. In tables they can
1170 1.1 christos save space and decrease cache pressure. Promoting to a signed type
1171 1.1 christos helps avoid bugs in integer arithmetic. */
1172 1.1 christos
1173 1.1 christos #ifdef __INT_LEAST8_MAX__
1174 1.1 christos typedef __INT_LEAST8_TYPE__ yytype_int8;
1175 1.1 christos #elif defined YY_STDINT_H
1176 1.1 christos typedef int_least8_t yytype_int8;
1177 1.1 christos #else
1178 1.1 christos typedef signed char yytype_int8;
1179 1.1 christos #endif
1180 1.1 christos
1181 1.1 christos #ifdef __INT_LEAST16_MAX__
1182 1.1 christos typedef __INT_LEAST16_TYPE__ yytype_int16;
1183 1.1 christos #elif defined YY_STDINT_H
1184 1.1 christos typedef int_least16_t yytype_int16;
1185 1.1 christos #else
1186 1.1 christos typedef short yytype_int16;
1187 1.1 christos #endif
1188 1.1 christos
1189 1.1 christos /* Work around bug in HP-UX 11.23, which defines these macros
1190 1.1 christos incorrectly for preprocessor constants. This workaround can likely
1191 1.1 christos be removed in 2023, as HPE has promised support for HP-UX 11.23
1192 1.1 christos (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
1193 1.1 christos <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
1194 1.1 christos #ifdef __hpux
1195 1.1 christos # undef UINT_LEAST8_MAX
1196 1.1 christos # undef UINT_LEAST16_MAX
1197 1.1 christos # define UINT_LEAST8_MAX 255
1198 1.1 christos # define UINT_LEAST16_MAX 65535
1199 1.1 christos #endif
1200 1.1 christos
1201 1.1 christos #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
1202 1.1 christos typedef __UINT_LEAST8_TYPE__ yytype_uint8;
1203 1.1 christos #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
1204 1.1 christos && UINT_LEAST8_MAX <= INT_MAX)
1205 1.1 christos typedef uint_least8_t yytype_uint8;
1206 1.1 christos #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
1207 1.1 christos typedef unsigned char yytype_uint8;
1208 1.1 christos #else
1209 1.1 christos typedef short yytype_uint8;
1210 1.1 christos #endif
1211 1.1 christos
1212 1.1 christos #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
1213 1.1 christos typedef __UINT_LEAST16_TYPE__ yytype_uint16;
1214 1.1 christos #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
1215 1.1 christos && UINT_LEAST16_MAX <= INT_MAX)
1216 1.1 christos typedef uint_least16_t yytype_uint16;
1217 1.1 christos #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
1218 1.1 christos typedef unsigned short yytype_uint16;
1219 1.1 christos #else
1220 1.1 christos typedef int yytype_uint16;
1221 1.1 christos #endif
1222 1.1 christos
1223 1.1 christos #ifndef YYPTRDIFF_T
1224 1.1 christos # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
1225 1.1 christos # define YYPTRDIFF_T __PTRDIFF_TYPE__
1226 1.1 christos # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
1227 1.1 christos # elif defined PTRDIFF_MAX
1228 1.1 christos # ifndef ptrdiff_t
1229 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1230 1.1 christos # endif
1231 1.1 christos # define YYPTRDIFF_T ptrdiff_t
1232 1.1 christos # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
1233 1.1 christos # else
1234 1.1 christos # define YYPTRDIFF_T long
1235 1.1 christos # define YYPTRDIFF_MAXIMUM LONG_MAX
1236 1.1 christos # endif
1237 1.1 christos #endif
1238 1.1 christos
1239 1.1 christos #ifndef YYSIZE_T
1240 1.1 christos # ifdef __SIZE_TYPE__
1241 1.1 christos # define YYSIZE_T __SIZE_TYPE__
1242 1.1 christos # elif defined size_t
1243 1.1 christos # define YYSIZE_T size_t
1244 1.1 christos # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1245 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1246 1.1 christos # define YYSIZE_T size_t
1247 1.1 christos # else
1248 1.1 christos # define YYSIZE_T unsigned
1249 1.1 christos # endif
1250 1.1 christos #endif
1251 1.1 christos
1252 1.1 christos #define YYSIZE_MAXIMUM \
1253 1.1 christos YY_CAST (YYPTRDIFF_T, \
1254 1.1 christos (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
1255 1.1 christos ? YYPTRDIFF_MAXIMUM \
1256 1.1 christos : YY_CAST (YYSIZE_T, -1)))
1257 1.1 christos
1258 1.1 christos #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
1259 1.1 christos
1260 1.1 christos
1261 1.1 christos /* Stored state numbers (used for stacks). */
1262 1.1 christos typedef yytype_int16 yy_state_t;
1263 1.1 christos
1264 1.1 christos /* State numbers in computations. */
1265 1.1 christos typedef int yy_state_fast_t;
1266 1.1 christos
1267 1.1 christos #ifndef YY_
1268 1.1 christos # if defined YYENABLE_NLS && YYENABLE_NLS
1269 1.1 christos # if ENABLE_NLS
1270 1.1 christos # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1271 1.1 christos # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1272 1.1 christos # endif
1273 1.1 christos # endif
1274 1.1 christos # ifndef YY_
1275 1.1 christos # define YY_(Msgid) Msgid
1276 1.1 christos # endif
1277 1.1 christos #endif
1278 1.1 christos
1279 1.1 christos
1280 1.1 christos #ifndef YY_ATTRIBUTE_PURE
1281 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1282 1.1 christos # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1283 1.1 christos # else
1284 1.1 christos # define YY_ATTRIBUTE_PURE
1285 1.1 christos # endif
1286 1.1 christos #endif
1287 1.1 christos
1288 1.1 christos #ifndef YY_ATTRIBUTE_UNUSED
1289 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1290 1.1 christos # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1291 1.1 christos # else
1292 1.1 christos # define YY_ATTRIBUTE_UNUSED
1293 1.1 christos # endif
1294 1.1 christos #endif
1295 1.1 christos
1296 1.1 christos /* Suppress unused-variable warnings by "using" E. */
1297 1.1 christos #if ! defined lint || defined __GNUC__
1298 1.1 christos # define YY_USE(E) ((void) (E))
1299 1.1 christos #else
1300 1.1 christos # define YY_USE(E) /* empty */
1301 1.1 christos #endif
1302 1.1 christos
1303 1.1 christos /* Suppress an incorrect diagnostic about yylval being uninitialized. */
1304 1.1 christos #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
1305 1.1 christos # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
1306 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1307 1.1 christos _Pragma ("GCC diagnostic push") \
1308 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
1309 1.1 christos # else
1310 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1311 1.1 christos _Pragma ("GCC diagnostic push") \
1312 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
1313 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1314 1.1 christos # endif
1315 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1316 1.1 christos _Pragma ("GCC diagnostic pop")
1317 1.1 christos #else
1318 1.1 christos # define YY_INITIAL_VALUE(Value) Value
1319 1.1 christos #endif
1320 1.1 christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1321 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1322 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
1323 1.1 christos #endif
1324 1.1 christos #ifndef YY_INITIAL_VALUE
1325 1.1 christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
1326 1.1 christos #endif
1327 1.1 christos
1328 1.1 christos #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1329 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN \
1330 1.1 christos _Pragma ("GCC diagnostic push") \
1331 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1332 1.1 christos # define YY_IGNORE_USELESS_CAST_END \
1333 1.1 christos _Pragma ("GCC diagnostic pop")
1334 1.1 christos #endif
1335 1.1 christos #ifndef YY_IGNORE_USELESS_CAST_BEGIN
1336 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN
1337 1.1 christos # define YY_IGNORE_USELESS_CAST_END
1338 1.1 christos #endif
1339 1.1 christos
1340 1.1 christos
1341 1.1 christos #define YY_ASSERT(E) ((void) (0 && (E)))
1342 1.1 christos
1343 1.1 christos #if !defined yyoverflow
1344 1.1 christos
1345 1.1 christos /* The parser invokes alloca or malloc; define the necessary symbols. */
1346 1.1 christos
1347 1.1 christos # ifdef YYSTACK_USE_ALLOCA
1348 1.1 christos # if YYSTACK_USE_ALLOCA
1349 1.1 christos # ifdef __GNUC__
1350 1.1 christos # define YYSTACK_ALLOC __builtin_alloca
1351 1.1 christos # elif defined __BUILTIN_VA_ARG_INCR
1352 1.1 christos # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1353 1.1 christos # elif defined _AIX
1354 1.1 christos # define YYSTACK_ALLOC __alloca
1355 1.1 christos # elif defined _MSC_VER
1356 1.1 christos # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1357 1.1 christos # define alloca _alloca
1358 1.1 christos # else
1359 1.1 christos # define YYSTACK_ALLOC alloca
1360 1.1 christos # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1361 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1362 1.1 christos /* Use EXIT_SUCCESS as a witness for stdlib.h. */
1363 1.1 christos # ifndef EXIT_SUCCESS
1364 1.1 christos # define EXIT_SUCCESS 0
1365 1.1 christos # endif
1366 1.1 christos # endif
1367 1.1 christos # endif
1368 1.1 christos # endif
1369 1.1 christos # endif
1370 1.1 christos
1371 1.1 christos # ifdef YYSTACK_ALLOC
1372 1.1 christos /* Pacify GCC's 'empty if-body' warning. */
1373 1.1 christos # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1374 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
1375 1.1 christos /* The OS might guarantee only one guard page at the bottom of the stack,
1376 1.1 christos and a page size can be as small as 4096 bytes. So we cannot safely
1377 1.1 christos invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1378 1.1 christos to allow for a few compiler-allocated temporary stack slots. */
1379 1.1 christos # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1380 1.1 christos # endif
1381 1.1 christos # else
1382 1.1 christos # define YYSTACK_ALLOC YYMALLOC
1383 1.1 christos # define YYSTACK_FREE YYFREE
1384 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
1385 1.1 christos # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1386 1.1 christos # endif
1387 1.1 christos # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1388 1.1 christos && ! ((defined YYMALLOC || defined malloc) \
1389 1.1 christos && (defined YYFREE || defined free)))
1390 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1391 1.1 christos # ifndef EXIT_SUCCESS
1392 1.1 christos # define EXIT_SUCCESS 0
1393 1.1 christos # endif
1394 1.1 christos # endif
1395 1.1 christos # ifndef YYMALLOC
1396 1.1 christos # define YYMALLOC malloc
1397 1.1 christos # if ! defined malloc && ! defined EXIT_SUCCESS
1398 1.1 christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1399 1.1 christos # endif
1400 1.1 christos # endif
1401 1.1 christos # ifndef YYFREE
1402 1.1 christos # define YYFREE free
1403 1.1 christos # if ! defined free && ! defined EXIT_SUCCESS
1404 1.1 christos void free (void *); /* INFRINGES ON USER NAME SPACE */
1405 1.1 christos # endif
1406 1.1 christos # endif
1407 1.1 christos # endif
1408 1.1 christos #endif /* !defined yyoverflow */
1409 1.1 christos
1410 1.1 christos #if (! defined yyoverflow \
1411 1.1 christos && (! defined __cplusplus \
1412 1.1 christos || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1413 1.1 christos
1414 1.1 christos /* A type that is properly aligned for any stack member. */
1415 1.1 christos union yyalloc
1416 1.1 christos {
1417 1.1 christos yy_state_t yyss_alloc;
1418 1.1 christos YYSTYPE yyvs_alloc;
1419 1.1 christos };
1420 1.1 christos
1421 1.1 christos /* The size of the maximum gap between one aligned stack and the next. */
1422 1.1 christos # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1423 1.1 christos
1424 1.1 christos /* The size of an array large to enough to hold all stacks, each with
1425 1.1 christos N elements. */
1426 1.1 christos # define YYSTACK_BYTES(N) \
1427 1.1 christos ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1428 1.1 christos + YYSTACK_GAP_MAXIMUM)
1429 1.1 christos
1430 1.1 christos # define YYCOPY_NEEDED 1
1431 1.1 christos
1432 1.1 christos /* Relocate STACK from its old location to the new one. The
1433 1.1 christos local variables YYSIZE and YYSTACKSIZE give the old and new number of
1434 1.1 christos elements in the stack, and YYPTR gives the new location of the
1435 1.1 christos stack. Advance YYPTR to a properly aligned location for the next
1436 1.1 christos stack. */
1437 1.1 christos # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1438 1.1 christos do \
1439 1.1 christos { \
1440 1.1 christos YYPTRDIFF_T yynewbytes; \
1441 1.1 christos YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1442 1.1 christos Stack = &yyptr->Stack_alloc; \
1443 1.1 christos yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1444 1.1 christos yyptr += yynewbytes / YYSIZEOF (*yyptr); \
1445 1.1 christos } \
1446 1.1 christos while (0)
1447 1.1 christos
1448 1.1 christos #endif
1449 1.1 christos
1450 1.1 christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1451 1.1 christos /* Copy COUNT objects from SRC to DST. The source and destination do
1452 1.1 christos not overlap. */
1453 1.1 christos # ifndef YYCOPY
1454 1.1 christos # if defined __GNUC__ && 1 < __GNUC__
1455 1.1 christos # define YYCOPY(Dst, Src, Count) \
1456 1.1 christos __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1457 1.1 christos # else
1458 1.1 christos # define YYCOPY(Dst, Src, Count) \
1459 1.1 christos do \
1460 1.1 christos { \
1461 1.1 christos YYPTRDIFF_T yyi; \
1462 1.1 christos for (yyi = 0; yyi < (Count); yyi++) \
1463 1.1 christos (Dst)[yyi] = (Src)[yyi]; \
1464 1.1 christos } \
1465 1.1 christos while (0)
1466 1.1 christos # endif
1467 1.1 christos # endif
1468 1.1 christos #endif /* !YYCOPY_NEEDED */
1469 1.1 christos
1470 1.1 christos /* YYFINAL -- State number of the termination state. */
1471 1.1.1.2 christos #define YYFINAL 155
1472 1.1 christos /* YYLAST -- Last index in YYTABLE. */
1473 1.1.1.2 christos #define YYLAST 1292
1474 1.1 christos
1475 1.1 christos /* YYNTOKENS -- Number of terminals. */
1476 1.1.1.2 christos #define YYNTOKENS 173
1477 1.1 christos /* YYNNTS -- Number of nonterminals. */
1478 1.1 christos #define YYNNTS 47
1479 1.1 christos /* YYNRULES -- Number of rules. */
1480 1.1 christos #define YYNRULES 354
1481 1.1 christos /* YYNSTATES -- Number of states. */
1482 1.1 christos #define YYNSTATES 1021
1483 1.1 christos
1484 1.1 christos /* YYMAXUTOK -- Last valid token kind. */
1485 1.1.1.2 christos #define YYMAXUTOK 427
1486 1.1 christos
1487 1.1 christos
1488 1.1 christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1489 1.1 christos as returned by yylex, with out-of-bounds checking. */
1490 1.1 christos #define YYTRANSLATE(YYX) \
1491 1.1 christos (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1492 1.1 christos ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1493 1.1 christos : YYSYMBOL_YYUNDEF)
1494 1.1 christos
1495 1.1 christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1496 1.1 christos as returned by yylex. */
1497 1.1 christos static const yytype_uint8 yytranslate[] =
1498 1.1 christos {
1499 1.1 christos 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1500 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1501 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1502 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1503 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1504 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1505 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1506 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1507 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1508 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1509 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1510 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1511 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1512 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1513 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1514 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1516 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1517 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1518 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1519 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1520 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1521 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1522 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1523 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1524 1.1 christos 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1525 1.1 christos 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1526 1.1 christos 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1527 1.1 christos 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1528 1.1 christos 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1529 1.1 christos 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1530 1.1 christos 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1531 1.1 christos 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1532 1.1 christos 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1533 1.1 christos 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1534 1.1 christos 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1535 1.1 christos 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1536 1.1 christos 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1537 1.1 christos 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1538 1.1 christos 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
1539 1.1 christos 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
1540 1.1 christos 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
1541 1.1.1.2 christos 165, 166, 167, 168, 169, 170, 171, 172
1542 1.1 christos };
1543 1.1 christos
1544 1.1 christos #if YYDEBUG
1545 1.1 christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1546 1.1 christos static const yytype_int16 yyrline[] =
1547 1.1 christos {
1548 1.1 christos 0, 648, 648, 649, 661, 663, 696, 723, 734, 738,
1549 1.1 christos 776, 796, 801, 811, 821, 826, 831, 849, 867, 881,
1550 1.1 christos 894, 910, 932, 950, 975, 997, 1002, 1012, 1023, 1034,
1551 1.1 christos 1048, 1063, 1079, 1095, 1106, 1120, 1146, 1164, 1169, 1175,
1552 1.1 christos 1187, 1198, 1209, 1220, 1231, 1242, 1253, 1279, 1293, 1303,
1553 1.1 christos 1348, 1367, 1378, 1389, 1400, 1411, 1422, 1438, 1455, 1471,
1554 1.1 christos 1482, 1493, 1526, 1537, 1550, 1561, 1600, 1610, 1620, 1640,
1555 1.1 christos 1650, 1660, 1671, 1685, 1696, 1709, 1719, 1731, 1746, 1757,
1556 1.1 christos 1763, 1785, 1796, 1807, 1815, 1841, 1871, 1900, 1931, 1945,
1557 1.1 christos 1956, 1970, 2004, 2022, 2047, 2059, 2077, 2088, 2099, 2110,
1558 1.1 christos 2123, 2134, 2145, 2156, 2167, 2178, 2211, 2221, 2234, 2254,
1559 1.1 christos 2265, 2276, 2289, 2302, 2313, 2324, 2335, 2346, 2356, 2367,
1560 1.1 christos 2378, 2390, 2401, 2412, 2426, 2439, 2451, 2463, 2474, 2485,
1561 1.1 christos 2496, 2508, 2520, 2531, 2542, 2553, 2563, 2569, 2575, 2581,
1562 1.1 christos 2587, 2593, 2599, 2605, 2611, 2617, 2623, 2634, 2645, 2656,
1563 1.1 christos 2667, 2678, 2689, 2700, 2706, 2720, 2731, 2742, 2753, 2764,
1564 1.1 christos 2774, 2787, 2795, 2803, 2827, 2838, 2849, 2860, 2871, 2882,
1565 1.1 christos 2894, 2907, 2916, 2927, 2938, 2950, 2961, 2972, 2983, 2997,
1566 1.1 christos 3009, 3035, 3065, 3076, 3101, 3138, 3166, 3191, 3202, 3213,
1567 1.1 christos 3224, 3250, 3269, 3283, 3307, 3319, 3338, 3384, 3421, 3437,
1568 1.1 christos 3456, 3470, 3489, 3505, 3513, 3522, 3533, 3545, 3559, 3567,
1569 1.1 christos 3577, 3589, 3600, 3610, 3621, 3632, 3638, 3643, 3648, 3654,
1570 1.1 christos 3662, 3668, 3674, 3680, 3686, 3692, 3700, 3714, 3718, 3728,
1571 1.1 christos 3732, 3737, 3742, 3747, 3754, 3758, 3765, 3769, 3774, 3779,
1572 1.1 christos 3787, 3791, 3798, 3802, 3810, 3815, 3821, 3830, 3835, 3841,
1573 1.1 christos 3847, 3853, 3862, 3865, 3869, 3876, 3879, 3883, 3890, 3895,
1574 1.1 christos 3901, 3907, 3913, 3918, 3926, 3929, 3936, 3939, 3946, 3950,
1575 1.1 christos 3954, 3958, 3965, 3968, 3975, 3980, 3987, 3994, 4006, 4010,
1576 1.1 christos 4014, 4021, 4024, 4034, 4037, 4046, 4052, 4061, 4065, 4072,
1577 1.1 christos 4076, 4080, 4084, 4091, 4095, 4102, 4110, 4118, 4126, 4134,
1578 1.1 christos 4141, 4148, 4156, 4166, 4171, 4176, 4181, 4189, 4192, 4196,
1579 1.1 christos 4205, 4212, 4219, 4226, 4241, 4247, 4260, 4273, 4291, 4298,
1580 1.1 christos 4305, 4315, 4328, 4332, 4336, 4340, 4347, 4353, 4359, 4365,
1581 1.1 christos 4375, 4384, 4386, 4388, 4392, 4400, 4404, 4411, 4417, 4423,
1582 1.1 christos 4427, 4431, 4435, 4441, 4447, 4451, 4455, 4459, 4463, 4467,
1583 1.1 christos 4471, 4475, 4479, 4483, 4487
1584 1.1 christos };
1585 1.1 christos #endif
1586 1.1 christos
1587 1.1 christos /** Accessing symbol of state STATE. */
1588 1.1 christos #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1589 1.1 christos
1590 1.1 christos #if YYDEBUG || 0
1591 1.1 christos /* The user-facing name of the symbol whose (internal) number is
1592 1.1 christos YYSYMBOL. No bounds checking. */
1593 1.1 christos static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1594 1.1 christos
1595 1.1 christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1596 1.1 christos First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1597 1.1 christos static const char *const yytname[] =
1598 1.1 christos {
1599 1.1 christos "\"end of file\"", "error", "\"invalid token\"", "BYTEOP16P",
1600 1.1 christos "BYTEOP16M", "BYTEOP1P", "BYTEOP2P", "BYTEOP3P", "BYTEUNPACK",
1601 1.1 christos "BYTEPACK", "PACK", "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX",
1602 1.1 christos "EXTRACT", "DEPOSIT", "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS",
1603 1.1 christos "LINK", "UNLINK", "REG", "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO",
1604 1.1 christos "REG_A_DOUBLE_ONE", "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L",
1605 1.1 christos "A_ONE_DOT_H", "HALF_REG", "NOP", "RTI", "RTS", "RTX", "RTN", "RTE",
1606 1.1 christos "HLT", "IDLE", "STI", "CLI", "CSYNC", "SSYNC", "EMUEXCPT", "RAISE",
1607 1.1 christos "EXCPT", "LSETUP", "LOOP", "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT",
1608 1.1 christos "JUMP", "JUMP_DOT_S", "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA",
1609 1.1 christos "BANG", "AMPERSAND", "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS",
1610 1.1 christos "STAR", "SLASH", "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR",
1611 1.1 christos "_PLUS_BAR_PLUS", "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS",
1612 1.1 christos "_MINUS_BAR_MINUS", "_MINUS_MINUS", "_PLUS_PLUS", "SHIFT", "LSHIFT",
1613 1.1 christos "ASHIFT", "BXORSHIFT", "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT",
1614 1.1 christos "LESS_LESS", "GREATER_GREATER", "_GREATER_GREATER_GREATER",
1615 1.1 christos "_LESS_LESS_ASSIGN", "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN",
1616 1.1 christos "_STAR_ASSIGN", "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN",
1617 1.1.1.2 christos "_MINUS_ASSIGN", "_PLUS_ASSIGN", "_LESS_THAN_ASSIGN", "_ASSIGN_ASSIGN",
1618 1.1.1.2 christos "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV", "FLUSH", "IFLUSH",
1619 1.1.1.2 christos "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET", "ASL", "ASR", "B", "W",
1620 1.1.1.2 christos "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV", "X", "Z", "M", "MMOD",
1621 1.1.1.2 christos "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V", "LO", "HI", "BITTGL",
1622 1.1.1.2 christos "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL", "DBGAH", "DBGHALT",
1623 1.1.1.2 christos "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY", "COLON", "SEMICOLON",
1624 1.1.1.2 christos "RPAREN", "LPAREN", "LBRACK", "RBRACK", "STATUS_REG", "MNOP", "SYMBOL",
1625 1.1.1.2 christos "NUMBER", "GOT", "GOT17M4", "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept",
1626 1.1.1.2 christos "statement", "asm", "asm_1", "REG_A", "opt_mode", "asr_asl", "sco",
1627 1.1.1.2 christos "asr_asl_0", "amod0", "amod1", "amod2", "xpmod", "xpmod1", "vsmod",
1628 1.1.1.2 christos "vmod", "smod", "searchmod", "aligndir", "byteop_mod", "c_align",
1629 1.1.1.2 christos "w32_or_nothing", "iu_or_nothing", "reg_with_predec", "reg_with_postinc",
1630 1.1.1.2 christos "min_max", "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op",
1631 1.1.1.2 christos "a_assign", "a_minusassign", "a_plusassign", "assign_macfunc",
1632 1.1.1.2 christos "a_macfunc", "multiply_halfregs", "cc_op", "ccstat", "symbol",
1633 1.1.1.2 christos "any_gotrel", "got", "got_or_expr", "pltpc", "eterm", "expr", "expr_1", YY_NULLPTR
1634 1.1 christos };
1635 1.1 christos
1636 1.1 christos static const char *
1637 1.1 christos yysymbol_name (yysymbol_kind_t yysymbol)
1638 1.1 christos {
1639 1.1 christos return yytname[yysymbol];
1640 1.1 christos }
1641 1.1 christos #endif
1642 1.1 christos
1643 1.1.1.2 christos #define YYPACT_NINF (-858)
1644 1.1 christos
1645 1.1 christos #define yypact_value_is_default(Yyn) \
1646 1.1 christos ((Yyn) == YYPACT_NINF)
1647 1.1 christos
1648 1.1 christos #define YYTABLE_NINF (-214)
1649 1.1 christos
1650 1.1 christos #define yytable_value_is_error(Yyn) \
1651 1.1 christos 0
1652 1.1 christos
1653 1.1 christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1654 1.1 christos STATE-NUM. */
1655 1.1 christos static const yytype_int16 yypact[] =
1656 1.1 christos {
1657 1.1.1.2 christos 861, -858, -116, -18, -858, 377, 503, -858, -858, -10,
1658 1.1.1.2 christos -3, 19, 45, 63, -858, -858, -858, -858, -858, -858,
1659 1.1.1.2 christos -858, -858, 54, 192, -858, -858, -858, -18, -18, 96,
1660 1.1.1.2 christos -18, 324, 380, -858, 392, -18, -18, 425, -858, 104,
1661 1.1.1.2 christos 134, 57, 139, 141, 155, 88, 158, 163, 166, 508,
1662 1.1.1.2 christos 190, 202, 246, 251, 259, 276, -858, 340, 287, 289,
1663 1.1.1.2 christos 20, 328, 72, 508, -858, 462, -858, -21, 288, 370,
1664 1.1.1.2 christos 77, 252, 442, 345, -858, -858, 515, -18, -18, -18,
1665 1.1.1.2 christos -858, -858, -858, -858, -858, 606, 130, 143, 191, 495,
1666 1.1.1.2 christos 527, 214, 231, 25, -858, -858, -858, 47, 498, 513,
1667 1.1.1.2 christos 519, 525, 105, -858, -858, -858, -858, -18, 560, -14,
1668 1.1.1.2 christos -858, 27, -858, 59, -858, -858, 419, -858, -858, 67,
1669 1.1.1.2 christos -858, -858, 568, 581, 588, -858, 602, -858, 615, -858,
1670 1.1.1.2 christos 623, -858, -858, -858, 655, 656, 667, -858, 666, 670,
1671 1.1.1.2 christos 683, 685, 691, 692, 700, -858, -858, 693, 705, 33,
1672 1.1.1.2 christos 704, -55, 26, 707, 708, -858, 1006, -858, -858, -858,
1673 1.1.1.2 christos 23, 9, -858, 665, 201, 23, 23, 23, 576, 23,
1674 1.1.1.2 christos 145, -18, -858, -858, 577, -858, -858, 245, 583, 582,
1675 1.1.1.2 christos -858, -858, 559, -18, -18, -18, -18, -18, -18, -18,
1676 1.1.1.2 christos -18, -18, -18, -858, -858, -858, -858, -858, -858, 580,
1677 1.1.1.2 christos 584, 585, 586, 587, -858, -858, -858, 589, 591, 593,
1678 1.1.1.2 christos 574, -858, 594, 674, -35, 264, 267, -858, -858, 724,
1679 1.1.1.2 christos 728, 731, 732, 733, 597, 598, 48, 736, 694, 604,
1680 1.1.1.2 christos 605, 345, 607, -858, -858, -858, 608, -858, 272, 0,
1681 1.1.1.2 christos 609, 348, -858, -858, -858, -858, -858, -858, 610, 611,
1682 1.1.1.2 christos 738, 359, -28, 676, 132, 739, 740, 614, 201, -858,
1683 1.1.1.2 christos 345, -858, 621, 681, 619, 697, 612, 620, 711, 626,
1684 1.1.1.2 christos 627, -26, -2, 41, 58, 628, 229, 238, -858, 630,
1685 1.1.1.2 christos 631, 633, 634, 635, 636, 637, 638, 698, -18, 42,
1686 1.1.1.2 christos 769, -18, -858, -858, -858, 771, -18, 639, 640, -858,
1687 1.1.1.2 christos 38, 577, -858, 772, 764, 644, 645, 647, 648, 23,
1688 1.1.1.2 christos 649, -18, -18, -18, 684, -858, 673, -858, 50, 185,
1689 1.1.1.2 christos 410, -18, -858, 652, 465, -858, 643, 472, 472, -858,
1690 1.1.1.2 christos -858, 506, 506, 784, 785, 786, 787, 778, 789, 790,
1691 1.1.1.2 christos 791, 793, 794, 795, 660, -858, -858, -858, -858, -18,
1692 1.1.1.2 christos -18, -18, 797, 798, 295, -858, 792, -858, -858, 663,
1693 1.1.1.2 christos 664, 671, 672, 675, 677, 802, 805, 761, 448, 442,
1694 1.1.1.2 christos 442, 252, 678, 261, 23, 808, 810, 680, 357, -858,
1695 1.1.1.2 christos 709, 277, 280, 302, -858, 679, 812, 23, 23, 23,
1696 1.1.1.2 christos 816, 227, -858, -858, -858, -858, 706, 818, 164, -18,
1697 1.1.1.2 christos -18, -18, 823, 813, 688, 690, 824, 252, 695, 696,
1698 1.1.1.2 christos -18, 825, -858, 826, -858, -858, 828, 829, 831, 710,
1699 1.1.1.2 christos -858, -858, -858, -858, -858, -858, -18, 712, 833, -18,
1700 1.1.1.2 christos 716, -18, -18, -18, 838, -18, -18, -18, -858, 842,
1701 1.1.1.2 christos 713, 773, -18, 720, 299, 719, 726, 774, -858, 1006,
1702 1.1.1.2 christos -858, -858, 725, -858, 23, 23, 834, 852, 766, 352,
1703 1.1.1.2 christos -858, -858, -858, 763, 765, 734, -858, 796, -858, 827,
1704 1.1.1.2 christos 835, 345, 770, 775, 776, 777, 780, 781, 782, 783,
1705 1.1.1.2 christos 788, -858, -858, -858, 903, 663, 664, 663, 176, 240,
1706 1.1.1.2 christos 799, 800, 806, 117, -858, 801, -858, 895, 896, 905,
1707 1.1.1.2 christos 360, 229, 265, 916, -858, 803, -858, 918, -18, 804,
1708 1.1.1.2 christos 809, 814, 815, 920, 820, 821, 830, 807, 807, -858,
1709 1.1.1.2 christos -858, 807, 807, 921, 822, -858, -858, -858, 832, 837,
1710 1.1.1.2 christos 839, 836, 840, 843, 847, 857, -858, 857, 858, 859,
1711 1.1.1.2 christos 914, 915, 278, 864, -858, 917, 867, 860, 868, 872,
1712 1.1.1.2 christos 874, 907, -858, 906, 856, 908, 909, 869, 910, 913,
1713 1.1.1.2 christos 919, 841, 922, 923, 924, -858, 855, 929, 925, 879,
1714 1.1.1.2 christos 930, 888, 889, 890, 933, 844, -18, 891, 892, 893,
1715 1.1.1.2 christos -858, -858, 23, -858, -858, 865, -858, 927, 928, 8,
1716 1.1.1.2 christos 10, -858, 939, -18, -18, -18, 964, 956, 969, 963,
1717 1.1.1.2 christos 974, 978, -858, -858, -858, 975, 372, -858, 1049, 439,
1718 1.1.1.2 christos -858, -858, -858, 1050, 931, 304, 316, 932, -858, 664,
1719 1.1.1.2 christos 663, -858, -858, -18, 926, 1051, -18, 934, 935, -858,
1720 1.1.1.2 christos 936, 937, -858, 940, -858, -858, 1052, 1053, 1055, 984,
1721 1.1.1.2 christos -858, -858, -858, 951, -858, -858, -858, -858, 938, -18,
1722 1.1.1.2 christos 943, 1058, 1061, -858, 434, 23, 23, 966, -858, -858,
1723 1.1.1.2 christos 1063, -858, -858, 857, 1075, 942, -858, 1009, 1082, -18,
1724 1.1.1.2 christos -858, -858, -858, -858, 1012, 1085, 1014, 1015, 315, -858,
1725 1.1.1.2 christos -858, -858, 23, -858, -858, -858, 953, -858, 985, 271,
1726 1.1.1.2 christos 957, 954, 1096, 1098, -858, -858, 326, 23, 23, 970,
1727 1.1.1.2 christos 23, -858, -858, 23, -858, 23, 967, 973, 976, 977,
1728 1.1.1.2 christos 971, 979, 980, 981, 982, -18, 1033, -858, -858, -858,
1729 1.1.1.2 christos 983, 1037, 986, 988, 1038, -858, 995, -858, 1013, -858,
1730 1.1.1.2 christos -858, -858, -858, 990, 594, 999, 1000, 594, 1048, -858,
1731 1.1.1.2 christos 535, -858, 1047, 989, 1004, 442, 1005, -18, 1016, 501,
1732 1.1.1.2 christos -858, 1017, 1018, 1019, 1020, 1010, 1025, 1022, 1023, -858,
1733 1.1.1.2 christos 1011, -858, 442, 1072, -858, 1120, -858, 1137, 1148, -858,
1734 1.1.1.2 christos -858, 1024, -858, 1026, 1027, 1028, 1150, 1160, -18, 1162,
1735 1.1.1.2 christos -858, -858, -858, 1165, -858, -858, -858, 1164, 23, -18,
1736 1.1.1.2 christos 1167, 1168, 1169, -858, -858, 943, 594, 1034, 1036, 1172,
1737 1.1.1.2 christos -858, 1173, -858, -858, 1170, 1039, 1040, 594, -858, 594,
1738 1.1.1.2 christos 594, -858, -18, -858, -858, -858, -858, 23, -858, 664,
1739 1.1.1.2 christos 345, -858, 1042, -858, 1043, 1044, 664, -858, -858, -858,
1740 1.1.1.2 christos 394, 1180, -858, 1135, -858, 345, 1182, -858, -858, -858,
1741 1.1.1.2 christos 943, -858, 1183, 1184, 1054, 1056, 1059, 1127, 1057, 1060,
1742 1.1.1.2 christos 1062, 1064, 1067, 1068, 1069, -858, -858, 1080, -858, 436,
1743 1.1.1.2 christos 565, 1143, -858, -858, -858, -858, -858, -858, 1145, -858,
1744 1.1.1.2 christos -858, -858, -858, -858, -858, 1070, 1065, 1071, 1181, -858,
1745 1.1.1.2 christos 1131, -858, 1074, 1076, -18, 592, 1121, -18, -858, 1104,
1746 1.1.1.2 christos 1077, -18, -18, -18, 1073, 1204, 1210, 1205, 23, -858,
1747 1.1.1.2 christos 1209, -858, 1171, -18, -18, -18, 1077, -858, -858, -858,
1748 1.1.1.2 christos -858, 1079, 954, 1083, 1084, 1105, -858, 1086, 1087, 1088,
1749 1.1.1.2 christos -858, 1081, 859, -858, 859, 1089, 1224, -858, 1094, 1095,
1750 1.1.1.2 christos -858, -858, -858, -858, -858, 1092, 1093, 1097, 1099, 463,
1751 1.1.1.2 christos -858, -858, -858, -858, 1100, 1228, 1230, -858, 511, -858,
1752 1.1.1.2 christos 140, -858, 516, -858, -858, -858, 343, 405, 1221, 1101,
1753 1.1.1.2 christos 1106, 476, 477, 491, 507, 523, 526, 531, 534, 549,
1754 1.1.1.2 christos -858, 372, -858, 1102, -18, -18, 1122, -858, 1129, -858,
1755 1.1.1.2 christos 1130, -858, 1132, -858, 1133, -858, 1134, -858, 1136, -858,
1756 1.1.1.2 christos 1138, -858, 1110, 1112, 1195, 1114, 1115, 1116, 1117, 1118,
1757 1.1.1.2 christos 1119, 1123, 1124, 1125, 1126, -858, -858, 1245, 1077, 1077,
1758 1.1.1.2 christos -858, -858, -858, -858, -858, -858, -858, -858, -858, -858,
1759 1.1.1.2 christos -858
1760 1.1 christos };
1761 1.1 christos
1762 1.1 christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1763 1.1 christos Performed when YYTABLE does not specify something else to do. Zero
1764 1.1 christos means the default is an error. */
1765 1.1 christos static const yytype_int16 yydefact[] =
1766 1.1 christos {
1767 1.1 christos 0, 7, 0, 0, 204, 0, 0, 227, 228, 0,
1768 1.1 christos 0, 0, 0, 0, 136, 138, 137, 139, 140, 141,
1769 1.1 christos 221, 142, 0, 0, 143, 144, 145, 0, 0, 0,
1770 1.1 christos 0, 0, 0, 11, 0, 0, 0, 0, 215, 0,
1771 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1772 1.1 christos 0, 0, 0, 0, 0, 0, 220, 216, 0, 0,
1773 1.1 christos 0, 0, 0, 0, 8, 0, 3, 0, 0, 0,
1774 1.1 christos 0, 0, 0, 229, 314, 79, 0, 0, 0, 0,
1775 1.1 christos 330, 338, 339, 354, 203, 343, 0, 0, 0, 0,
1776 1.1 christos 0, 0, 0, 322, 323, 325, 324, 0, 0, 0,
1777 1.1.1.2 christos 0, 0, 0, 147, 146, 152, 153, 0, 0, 338,
1778 1.1.1.2 christos 212, 338, 214, 0, 155, 156, 339, 158, 157, 0,
1779 1.1.1.2 christos 160, 159, 0, 0, 0, 174, 0, 172, 0, 176,
1780 1.1.1.2 christos 0, 178, 226, 225, 0, 0, 0, 322, 0, 0,
1781 1.1.1.2 christos 0, 0, 0, 0, 0, 218, 217, 0, 0, 0,
1782 1.1.1.2 christos 0, 0, 307, 0, 0, 1, 0, 4, 310, 311,
1783 1.1.1.2 christos 312, 0, 45, 0, 0, 0, 0, 0, 0, 0,
1784 1.1.1.2 christos 44, 0, 318, 48, 281, 320, 319, 0, 9, 0,
1785 1.1.1.2 christos 341, 342, 0, 0, 0, 0, 0, 0, 0, 0,
1786 1.1.1.2 christos 0, 0, 0, 167, 170, 168, 169, 165, 166, 0,
1787 1.1.1.2 christos 0, 0, 0, 0, 278, 279, 280, 0, 0, 0,
1788 1.1.1.2 christos 80, 82, 252, 0, 252, 0, 0, 287, 288, 0,
1789 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 0, 0, 313, 0,
1790 1.1.1.2 christos 0, 229, 255, 62, 58, 56, 60, 61, 81, 0,
1791 1.1.1.2 christos 0, 0, 327, 326, 26, 14, 27, 15, 0, 0,
1792 1.1.1.2 christos 0, 0, 50, 0, 0, 0, 0, 0, 0, 317,
1793 1.1.1.2 christos 229, 47, 0, 208, 0, 0, 0, 0, 0, 0,
1794 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 307, 307, 329, 0,
1795 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1796 1.1.1.2 christos 0, 0, 294, 293, 309, 308, 0, 0, 0, 328,
1797 1.1.1.2 christos 0, 281, 202, 0, 0, 37, 25, 0, 0, 0,
1798 1.1.1.2 christos 0, 0, 0, 0, 0, 39, 0, 55, 0, 0,
1799 1.1.1.2 christos 0, 0, 340, 351, 353, 346, 352, 348, 347, 344,
1800 1.1.1.2 christos 345, 349, 350, 0, 0, 0, 0, 0, 0, 0,
1801 1.1.1.2 christos 0, 0, 0, 0, 293, 289, 290, 291, 292, 0,
1802 1.1.1.2 christos 0, 0, 0, 0, 0, 52, 0, 46, 164, 258,
1803 1.1.1.2 christos 264, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1804 1.1.1.2 christos 0, 0, 0, 307, 0, 0, 0, 85, 0, 49,
1805 1.1.1.2 christos 0, 0, 0, 0, 83, 0, 0, 0, 0, 0,
1806 1.1.1.2 christos 0, 0, 109, 119, 120, 118, 0, 0, 0, 0,
1807 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
1808 1.1.1.2 christos 0, 0, 148, 0, 337, 149, 0, 0, 0, 0,
1809 1.1.1.2 christos 173, 171, 175, 177, 154, 308, 0, 0, 308, 0,
1810 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 0, 0, 219, 0,
1811 1.1.1.2 christos 134, 0, 0, 0, 0, 0, 0, 0, 285, 0,
1812 1.1.1.2 christos 6, 59, 0, 321, 0, 0, 0, 0, 0, 0,
1813 1.1.1.2 christos 90, 104, 99, 0, 0, 0, 233, 0, 232, 0,
1814 1.1.1.2 christos 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
1815 1.1.1.2 christos 0, 78, 66, 67, 0, 258, 264, 258, 242, 244,
1816 1.1.1.2 christos 0, 0, 0, 0, 163, 0, 24, 0, 0, 0,
1817 1.1.1.2 christos 0, 307, 307, 0, 312, 0, 315, 308, 0, 0,
1818 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 0, 283, 283, 73,
1819 1.1.1.2 christos 74, 283, 283, 0, 0, 75, 69, 70, 0, 0,
1820 1.1.1.2 christos 0, 0, 0, 0, 0, 266, 106, 266, 0, 244,
1821 1.1.1.2 christos 0, 0, 307, 0, 316, 0, 0, 209, 0, 0,
1822 1.1.1.2 christos 0, 0, 286, 0, 0, 0, 0, 0, 0, 0,
1823 1.1.1.2 christos 0, 0, 0, 0, 0, 131, 0, 0, 132, 0,
1824 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1825 1.1.1.2 christos 100, 88, 0, 114, 116, 40, 282, 0, 0, 0,
1826 1.1.1.2 christos 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
1827 1.1.1.2 christos 0, 0, 91, 105, 108, 0, 236, 51, 0, 0,
1828 1.1.1.2 christos 35, 254, 253, 0, 0, 0, 0, 0, 103, 264,
1829 1.1.1.2 christos 258, 115, 117, 0, 0, 308, 0, 0, 0, 12,
1830 1.1.1.2 christos 0, 339, 335, 0, 336, 197, 0, 0, 0, 0,
1831 1.1.1.2 christos 256, 257, 57, 0, 76, 77, 71, 72, 0, 0,
1832 1.1.1.2 christos 0, 0, 0, 41, 0, 0, 0, 0, 92, 107,
1833 1.1.1.2 christos 0, 38, 101, 266, 308, 0, 13, 0, 0, 0,
1834 1.1.1.2 christos 151, 150, 162, 161, 0, 0, 0, 0, 0, 127,
1835 1.1.1.2 christos 125, 126, 0, 224, 223, 222, 0, 130, 0, 0,
1836 1.1.1.2 christos 0, 0, 0, 0, 190, 5, 0, 0, 0, 0,
1837 1.1.1.2 christos 0, 230, 231, 0, 313, 0, 0, 0, 0, 0,
1838 1.1.1.2 christos 0, 0, 0, 0, 0, 0, 0, 237, 238, 239,
1839 1.1.1.2 christos 0, 0, 0, 0, 0, 259, 0, 260, 0, 261,
1840 1.1.1.2 christos 265, 102, 93, 0, 252, 0, 0, 252, 0, 195,
1841 1.1.1.2 christos 0, 196, 0, 0, 0, 0, 0, 0, 0, 0,
1842 1.1.1.2 christos 121, 0, 0, 0, 0, 0, 0, 0, 0, 89,
1843 1.1.1.2 christos 0, 186, 0, 205, 210, 0, 179, 0, 0, 182,
1844 1.1.1.2 christos 183, 0, 135, 0, 0, 0, 0, 0, 0, 0,
1845 1.1.1.2 christos 201, 191, 184, 0, 199, 54, 53, 0, 0, 0,
1846 1.1.1.2 christos 0, 0, 0, 33, 110, 0, 252, 96, 0, 0,
1847 1.1.1.2 christos 243, 0, 245, 246, 0, 0, 0, 252, 194, 252,
1848 1.1.1.2 christos 252, 187, 0, 331, 332, 333, 334, 0, 28, 264,
1849 1.1.1.2 christos 229, 284, 0, 129, 0, 0, 264, 95, 42, 43,
1850 1.1.1.2 christos 0, 0, 267, 0, 189, 229, 0, 180, 192, 181,
1851 1.1.1.2 christos 0, 133, 0, 0, 0, 0, 0, 0, 0, 0,
1852 1.1.1.2 christos 0, 0, 0, 0, 0, 122, 98, 0, 68, 0,
1853 1.1.1.2 christos 0, 0, 263, 262, 193, 188, 185, 65, 0, 36,
1854 1.1.1.2 christos 87, 128, 234, 235, 94, 0, 0, 0, 0, 86,
1855 1.1 christos 206, 123, 0, 0, 0, 0, 0, 0, 124, 0,
1856 1.1 christos 272, 0, 0, 0, 0, 0, 0, 0, 0, 112,
1857 1.1 christos 0, 111, 0, 0, 0, 0, 272, 268, 271, 270,
1858 1.1 christos 269, 0, 0, 0, 0, 0, 63, 0, 0, 0,
1859 1.1 christos 97, 247, 244, 20, 244, 0, 0, 207, 0, 0,
1860 1.1 christos 18, 19, 200, 198, 64, 0, 30, 0, 0, 236,
1861 1.1 christos 23, 22, 21, 113, 0, 0, 0, 273, 0, 29,
1862 1.1 christos 0, 31, 0, 32, 240, 241, 0, 0, 0, 0,
1863 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1864 1.1 christos 249, 236, 248, 0, 0, 0, 0, 275, 0, 274,
1865 1.1 christos 0, 296, 0, 298, 0, 297, 0, 295, 0, 303,
1866 1.1 christos 0, 304, 0, 0, 0, 0, 0, 0, 0, 0,
1867 1.1 christos 0, 0, 0, 0, 0, 251, 250, 0, 272, 272,
1868 1.1 christos 276, 277, 300, 302, 301, 299, 305, 306, 34, 16,
1869 1.1 christos 17
1870 1.1 christos };
1871 1.1 christos
1872 1.1 christos /* YYPGOTO[NTERM-NUM]. */
1873 1.1 christos static const yytype_int16 yypgoto[] =
1874 1.1 christos {
1875 1.1.1.2 christos -858, -858, -858, -131, 29, -225, -764, -726, 312, -858,
1876 1.1.1.2 christos -511, -858, -195, -858, -455, -460, -463, -858, -857, -858,
1877 1.1.1.2 christos -858, 987, 76, -858, -31, -858, 423, -186, -858, -858,
1878 1.1.1.2 christos -254, 2, 17, -144, 972, -210, -56, 210, -858, -16,
1879 1.1.1.2 christos -858, -858, -858, 1250, -858, -27, -8
1880 1.1 christos };
1881 1.1 christos
1882 1.1 christos /* YYDEFGOTO[NTERM-NUM]. */
1883 1.1 christos static const yytype_int16 yydefgoto[] =
1884 1.1 christos {
1885 1.1.1.2 christos 0, 65, 66, 67, 368, 178, 750, 720, 957, 607,
1886 1.1.1.2 christos 610, 940, 355, 379, 494, 496, 658, 911, 916, 949,
1887 1.1.1.2 christos 229, 317, 644, 69, 125, 230, 352, 296, 951, 953,
1888 1.1.1.2 christos 297, 369, 370, 72, 73, 74, 176, 97, 75, 82,
1889 1.1.1.2 christos 816, 632, 633, 117, 83, 84, 85
1890 1.1 christos };
1891 1.1 christos
1892 1.1 christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1893 1.1 christos positive, shift that token. If negative, reduce the rule whose
1894 1.1 christos number is the opposite. If YYTABLE_NINF, syntax error. */
1895 1.1 christos static const yytype_int16 yytable[] =
1896 1.1 christos {
1897 1.1.1.2 christos 105, 106, 70, 108, 110, 112, 377, 114, 115, 118,
1898 1.1.1.2 christos 121, 127, 129, 131, 172, 175, 372, 71, 133, 357,
1899 1.1.1.2 christos 116, 116, 427, 430, 353, 300, 603, 384, 661, 68,
1900 1.1.1.2 christos 602, 855, 604, 231, 302, 409, 304, 7, 8, 7,
1901 1.1.1.2 christos 8, 292, 293, 173, 77, 76, 260, 149, 408, 930,
1902 1.1.1.2 christos 238, 78, 7, 8, 7, 8, 156, 419, 287, 194,
1903 1.1.1.2 christos 196, 198, 232, -211, 235, 237, 397, 441, 403, 180,
1904 1.1.1.2 christos 181, 182, 171, 367, 659, 261, 881, 7, 8, 103,
1905 1.1.1.2 christos 262, 419, 371, 150, 264, 265, 146, 98, 239, 288,
1906 1.1.1.2 christos 426, 429, 267, 268, 99, 292, 293, 152, 442, 170,
1907 1.1.1.2 christos 174, 290, 162, 291, -213, 182, 7, 8, 294, 295,
1908 1.1.1.2 christos 77, 182, 163, 132, 407, 449, 100, 78, 228, 509,
1909 1.1.1.2 christos 248, 77, 241, 249, 419, 250, 354, 251, 78, 77,
1910 1.1.1.2 christos 252, 259, 253, 396, 7, 8, 78, 420, 157, 77,
1911 1.1.1.2 christos 254, 419, 101, 79, 315, -211, 164, 385, 80, 81,
1912 1.1.1.2 christos 77, 1019, 1020, 165, 153, 193, 181, 78, 70, 731,
1913 1.1.1.2 christos 102, 421, 166, 167, 168, 732, 169, 77, 195, 703,
1914 1.1.1.2 christos 303, 705, 240, 71, 78, 323, 324, 325, 326, 327,
1915 1.1.1.2 christos 328, 329, 330, 331, 332, 68, -213, 508, 242, 301,
1916 1.1.1.2 christos 255, 256, 77, 305, 306, 307, 308, 450, 310, 78,
1917 1.1.1.2 christos 759, 292, 293, 304, 422, 77, 465, 180, 181, 79,
1918 1.1.1.2 christos 466, 243, 78, 956, 80, 81, 197, 104, 182, 124,
1919 1.1.1.2 christos 79, 423, 399, 400, 401, 80, 81, 257, 79, 402,
1920 1.1.1.2 christos 7, 8, 533, 80, 81, 311, 312, 313, 79, 234,
1921 1.1.1.2 christos 614, 615, 158, 80, 81, 993, 591, 624, 627, 79,
1922 1.1.1.2 christos 182, 534, 529, 77, 80, 81, 236, 107, 616, 138,
1923 1.1.1.2 christos 78, 440, 530, 77, 444, 122, 258, 963, 964, 446,
1924 1.1.1.2 christos 78, 80, 81, 154, 774, 775, 77, 965, 966, 776,
1925 1.1.1.2 christos 395, 7, 8, 78, 460, 461, 462, 163, 665, 358,
1926 1.1.1.2 christos 777, 79, 359, 77, 472, 123, 80, 81, 292, 293,
1927 1.1.1.2 christos 78, 126, 517, 128, 79, 519, 314, 292, 293, 80,
1928 1.1.1.2 christos 81, 294, 425, 172, 175, 623, 626, 130, 575, 134,
1929 1.1.1.2 christos 294, 428, 485, 486, 487, 135, 77, 521, 136, 77,
1930 1.1.1.2 christos 292, 293, 605, 78, 292, 293, 78, 606, 458, 77,
1931 1.1.1.2 christos 769, 467, 77, 294, 507, 468, 78, 294, 625, 78,
1932 1.1.1.2 christos 770, 139, 79, 151, 518, 520, 522, 80, 81, 869,
1933 1.1.1.2 christos 294, 664, 79, 140, 77, 145, 874, 80, 81, 7,
1934 1.1.1.2 christos 8, 78, 535, 536, 537, 79, 381, 382, 318, 319,
1935 1.1.1.2 christos 80, 81, 383, 546, 393, 158, 77, 583, 7, 8,
1936 1.1.1.2 christos 159, 160, 79, 78, 394, 621, 608, 80, 81, 553,
1937 1.1.1.2 christos 505, 609, 556, 510, 558, 559, 560, 141, 562, 563,
1938 1.1.1.2 christos 564, 941, 142, 942, 77, 568, 525, 526, 527, 875,
1939 1.1.1.2 christos 143, 78, 77, 7, 8, 79, 490, 491, 79, 78,
1940 1.1.1.2 christos 80, 81, 584, 80, 81, 469, 543, 144, 79, 7,
1941 1.1.1.2 christos 8, 79, 77, 80, 81, 470, 80, 81, 147, 78,
1942 1.1.1.2 christos 148, 70, 387, 388, 77, 570, 578, 579, 389, 571,
1943 1.1.1.2 christos 726, 78, 155, 79, 727, 86, 71, 161, 80, 81,
1944 1.1.1.2 christos 87, 88, 728, 622, 89, 90, 729, 163, 68, 91,
1945 1.1.1.2 christos 92, 634, 783, 577, 577, 79, 784, 77, 514, 515,
1946 1.1.1.2 christos 80, 109, 631, 372, 78, 408, 717, 718, 719, 969,
1947 1.1.1.2 christos 199, 200, 201, 970, 202, 203, 177, 204, 205, 206,
1948 1.1.1.2 christos 207, 208, 209, 79, 345, 346, 347, 348, 80, 81,
1949 1.1.1.2 christos 210, 79, 211, 212, 7, 8, 80, 81, 213, 183,
1950 1.1.1.2 christos 214, 185, 186, 244, 187, 188, 189, 190, 185, 808,
1951 1.1.1.2 christos 179, 79, 811, 189, 190, 158, 80, 111, 245, 696,
1952 1.1.1.2 christos 159, 504, 233, 113, 246, 191, 192, 215, 80, 81,
1953 1.1.1.2 christos 247, 971, 722, 723, 216, 972, 707, 708, 709, 217,
1954 1.1.1.2 christos 218, 219, 185, 753, 754, 187, 188, 189, 190, 220,
1955 1.1.1.2 christos 221, 222, 954, 955, 223, 263, 119, 717, 718, 719,
1956 1.1.1.2 christos 266, 80, 81, 269, 645, 870, 733, 646, 647, 736,
1957 1.1.1.2 christos 93, 856, 94, 95, 96, 137, 270, 94, 95, 96,
1958 1.1.1.2 christos 879, 699, 864, 271, 865, 866, 224, 225, 704, 259,
1959 1.1.1.2 christos 824, 825, 748, 183, 184, 185, 186, 272, 187, 188,
1960 1.1.1.2 christos 189, 190, 976, 978, 292, 293, 977, 979, 341, 342,
1961 1.1.1.2 christos 273, 343, 764, 292, 344, 961, 962, 980, 274, 191,
1962 1.1.1.2 christos 192, 981, 345, 346, 347, 348, 226, 227, 967, 968,
1963 1.1.1.2 christos 780, 80, 81, 982, 349, 350, 351, 983, 954, 955,
1964 1.1.1.2 christos 183, 184, 185, 186, 896, 187, 188, 189, 190, 984,
1965 1.1.1.2 christos 275, 276, 986, 985, 755, 756, 987, 988, 798, 820,
1966 1.1.1.2 christos 990, 989, 277, 278, 991, 279, 191, 192, 907, 908,
1967 1.1.1.2 christos 909, 910, 788, 813, 814, 815, 835, 183, 280, 185,
1968 1.1.1.2 christos 281, 771, 187, 188, 189, 190, 282, 283, 185, 322,
1969 1.1.1.2 christos 822, 187, 188, 189, 190, 284, 785, 786, 285, 577,
1970 1.1.1.2 christos 286, 289, 298, 191, 192, 299, 304, 309, 316, 320,
1971 1.1.1.2 christos 321, 333, 191, 192, 356, 334, 335, 336, 337, 360,
1972 1.1.1.2 christos 338, 846, 339, 361, 340, 354, 362, 363, 364, 365,
1973 1.1.1.2 christos 366, 373, 851, 392, 374, 375, 376, 413, 378, 380,
1974 1.1.1.2 christos 386, 390, 391, 398, 404, 405, 406, 410, 411, 412,
1975 1.1.1.2 christos 415, 416, 417, 418, 414, 867, 431, 432, 424, 433,
1976 1.1.1.2 christos 434, 435, 436, 437, 443, 439, 445, 452, 438, 453,
1977 1.1.1.2 christos 454, 455, 447, 448, 456, 457, 459, 464, 463, 473,
1978 1.1.1.2 christos 474, 475, 476, 477, 478, 479, 480, 850, 481, 482,
1979 1.1.1.2 christos 483, 484, 488, 489, 493, 495, 492, 501, 497, 498,
1980 1.1.1.2 christos 502, 503, 499, 511, 500, 512, 513, 524, 506, 516,
1981 1.1.1.2 christos 523, 528, 531, 532, 538, 540, 868, 541, 539, 542,
1982 1.1.1.2 christos 547, 548, 545, 549, 550, 544, 551, 906, 555, 876,
1983 1.1.1.2 christos 913, -2, 1, 561, 917, 918, 919, 565, 587, 580,
1984 1.1.1.2 christos 567, 574, 2, 552, 566, 554, 927, 928, 929, 557,
1985 1.1.1.2 christos 569, 932, 572, 576, 3, 4, 5, 581, 6, 573,
1986 1.1.1.2 christos 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1987 1.1.1.2 christos 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1988 1.1.1.2 christos 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1989 1.1.1.2 christos 37, 38, 582, 585, 589, 586, 592, 924, 601, 588,
1990 1.1.1.2 christos 618, 619, 590, 593, 594, 595, 596, 597, 598, 599,
1991 1.1.1.2 christos 620, 628, 617, 630, 600, 639, 648, 995, 996, 662,
1992 1.1.1.2 christos 663, 669, 667, 675, 687, 690, 39, 40, 694, 611,
1993 1.1.1.2 christos 612, 697, 613, 629, 706, 636, 678, 635, 643, 698,
1994 1.1.1.2 christos 637, 638, 41, 42, 43, 44, 689, 45, 649, 46,
1995 1.1.1.2 christos 640, 641, 47, 48, 686, 691, 692, 693, 158, 710,
1996 1.1.1.2 christos 642, 711, 650, 651, 712, 652, 653, 682, 713, 714,
1997 1.1.1.2 christos 716, 654, 49, 695, 655, 50, 51, 52, 656, 53,
1998 1.1.1.2 christos 54, 55, 56, 57, 58, 59, 60, 2, 657, 660,
1999 1.1.1.2 christos 609, 700, 61, 62, 666, 63, 64, 668, 670, 3,
2000 1.1.1.2 christos 4, 5, 671, 6, 672, 7, 8, 9, 10, 11,
2001 1.1.1.2 christos 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2002 1.1.1.2 christos 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
2003 1.1.1.2 christos 32, 33, 34, 35, 36, 37, 38, 673, 715, 674,
2004 1.1.1.2 christos 679, 676, 677, 680, 721, 724, 735, 742, 743, 681,
2005 1.1.1.2 christos 744, 745, 683, 684, 685, 746, 688, 701, 702, 734,
2006 1.1.1.2 christos 757, 725, 730, 751, 747, 738, 752, 737, 758, 739,
2007 1.1.1.2 christos 760, 39, 40, 741, 749, 761, 762, 763, 740, 765,
2008 1.1.1.2 christos 766, 767, 768, 772, 773, 778, 779, 41, 42, 43,
2009 1.1.1.2 christos 44, 781, 45, 782, 46, 789, 787, 47, 48, 790,
2010 1.1.1.2 christos 799, 793, 791, 792, 801, 804, 805, 806, 812, 794,
2011 1.1.1.2 christos 795, 796, 797, 800, 817, 837, 802, 49, 803, 818,
2012 1.1.1.2 christos 50, 51, 52, 807, 53, 54, 55, 56, 57, 58,
2013 1.1.1.2 christos 59, 60, 809, 810, 819, 821, 830, 61, 62, 836,
2014 1.1.1.2 christos 63, 64, 838, 839, 834, 844, 823, 826, 827, 828,
2015 1.1.1.2 christos 829, 831, 832, 833, 840, 845, 841, 847, 842, 843,
2016 1.1.1.2 christos 848, 849, 852, 853, 854, 857, 858, 859, 860, 862,
2017 1.1.1.2 christos 863, 861, 871, 872, 873, 877, 878, 880, 882, 883,
2018 1.1.1.2 christos 419, 894, 884, 897, 898, 887, 902, 885, 912, 886,
2019 1.1.1.2 christos 888, 900, 903, 889, 890, 891, 892, 893, 914, 921,
2020 1.1.1.2 christos 899, 901, 904, 920, 905, 922, 925, 923, 915, 931,
2021 1.1.1.2 christos 935, 926, 939, 933, 934, 944, 936, 937, 938, 943,
2022 1.1.1.2 christos 945, 946, 947, 959, 948, 960, 973, 997, 950, 974,
2023 1.1.1.2 christos 952, 958, 994, 998, 975, 999, 1007, 1000, 1001, 1002,
2024 1.1.1.2 christos 1005, 1003, 1006, 1004, 1008, 1009, 1010, 1011, 1012, 1013,
2025 1.1.1.2 christos 1018, 992, 895, 1014, 1015, 1016, 1017, 120, 451, 0,
2026 1.1.1.2 christos 0, 0, 471
2027 1.1 christos };
2028 1.1 christos
2029 1.1 christos static const yytype_int16 yycheck[] =
2030 1.1 christos {
2031 1.1.1.2 christos 27, 28, 0, 30, 31, 32, 231, 34, 35, 36,
2032 1.1.1.2 christos 37, 42, 43, 44, 70, 71, 226, 0, 45, 214,
2033 1.1.1.2 christos 36, 37, 276, 277, 210, 156, 486, 27, 539, 0,
2034 1.1.1.2 christos 485, 795, 487, 89, 25, 260, 71, 29, 30, 29,
2035 1.1.1.2 christos 30, 69, 70, 70, 62, 161, 102, 27, 258, 906,
2036 1.1.1.2 christos 25, 69, 29, 30, 29, 30, 77, 83, 25, 86,
2037 1.1.1.2 christos 87, 88, 89, 77, 91, 92, 252, 25, 254, 77,
2038 1.1.1.2 christos 78, 79, 70, 25, 537, 102, 840, 29, 30, 25,
2039 1.1.1.2 christos 107, 83, 226, 63, 25, 26, 57, 97, 63, 56,
2040 1.1.1.2 christos 276, 277, 25, 26, 97, 69, 70, 25, 56, 70,
2041 1.1.1.2 christos 71, 156, 25, 158, 77, 113, 29, 30, 82, 83,
2042 1.1.1.2 christos 62, 119, 35, 25, 258, 77, 97, 69, 89, 373,
2043 1.1.1.2 christos 15, 62, 93, 18, 83, 20, 161, 22, 69, 62,
2044 1.1.1.2 christos 25, 102, 27, 161, 29, 30, 69, 163, 159, 62,
2045 1.1.1.2 christos 35, 83, 97, 161, 171, 159, 69, 147, 166, 167,
2046 1.1.1.2 christos 62, 1008, 1009, 76, 82, 25, 164, 69, 156, 619,
2047 1.1.1.2 christos 97, 163, 85, 86, 87, 620, 89, 62, 25, 161,
2048 1.1.1.2 christos 161, 161, 147, 156, 69, 183, 184, 185, 186, 187,
2049 1.1.1.2 christos 188, 189, 190, 191, 192, 156, 159, 373, 141, 160,
2050 1.1.1.2 christos 85, 86, 62, 164, 165, 166, 167, 159, 169, 69,
2051 1.1.1.2 christos 663, 69, 70, 71, 163, 62, 156, 215, 216, 161,
2052 1.1.1.2 christos 160, 164, 69, 939, 166, 167, 25, 25, 226, 162,
2053 1.1.1.2 christos 161, 163, 90, 91, 92, 166, 167, 122, 161, 97,
2054 1.1.1.2 christos 29, 30, 68, 166, 167, 90, 91, 92, 161, 25,
2055 1.1.1.2 christos 123, 124, 97, 166, 167, 971, 471, 501, 502, 161,
2056 1.1.1.2 christos 258, 87, 25, 62, 166, 167, 25, 161, 141, 49,
2057 1.1.1.2 christos 69, 288, 35, 62, 291, 161, 161, 127, 128, 296,
2058 1.1.1.2 christos 69, 166, 167, 63, 3, 4, 62, 137, 138, 8,
2059 1.1.1.2 christos 251, 29, 30, 69, 311, 312, 313, 35, 542, 25,
2060 1.1.1.2 christos 19, 161, 25, 62, 321, 161, 166, 167, 69, 70,
2061 1.1.1.2 christos 69, 162, 25, 162, 161, 25, 161, 69, 70, 166,
2062 1.1.1.2 christos 167, 82, 83, 369, 370, 501, 502, 162, 449, 161,
2063 1.1.1.2 christos 82, 83, 349, 350, 351, 162, 62, 25, 162, 62,
2064 1.1.1.2 christos 69, 70, 156, 69, 69, 70, 69, 161, 309, 62,
2065 1.1.1.2 christos 25, 156, 62, 82, 83, 160, 69, 82, 83, 69,
2066 1.1.1.2 christos 35, 161, 161, 25, 381, 382, 383, 166, 167, 819,
2067 1.1.1.2 christos 82, 83, 161, 161, 62, 25, 826, 166, 167, 29,
2068 1.1.1.2 christos 30, 69, 399, 400, 401, 161, 104, 105, 133, 134,
2069 1.1.1.2 christos 166, 167, 110, 410, 25, 97, 62, 35, 29, 30,
2070 1.1.1.2 christos 102, 103, 161, 69, 35, 35, 156, 166, 167, 426,
2071 1.1.1.2 christos 371, 161, 429, 374, 431, 432, 433, 161, 435, 436,
2072 1.1.1.2 christos 437, 922, 161, 924, 62, 442, 387, 388, 389, 25,
2073 1.1.1.2 christos 161, 69, 62, 29, 30, 161, 131, 132, 161, 69,
2074 1.1.1.2 christos 166, 167, 459, 166, 167, 25, 407, 161, 161, 29,
2075 1.1.1.2 christos 30, 161, 62, 166, 167, 35, 166, 167, 161, 69,
2076 1.1.1.2 christos 161, 449, 104, 105, 62, 156, 454, 455, 110, 160,
2077 1.1.1.2 christos 156, 69, 0, 161, 160, 88, 449, 97, 166, 167,
2078 1.1.1.2 christos 93, 94, 156, 500, 97, 98, 160, 35, 449, 102,
2079 1.1.1.2 christos 103, 508, 156, 454, 455, 161, 160, 62, 131, 132,
2080 1.1.1.2 christos 166, 167, 508, 703, 69, 705, 124, 125, 126, 156,
2081 1.1.1.2 christos 5, 6, 7, 160, 9, 10, 161, 12, 13, 14,
2082 1.1.1.2 christos 15, 16, 17, 161, 78, 79, 80, 81, 166, 167,
2083 1.1.1.2 christos 25, 161, 27, 28, 29, 30, 166, 167, 33, 64,
2084 1.1.1.2 christos 35, 66, 67, 35, 69, 70, 71, 72, 66, 734,
2085 1.1.1.2 christos 25, 161, 737, 71, 72, 97, 166, 167, 35, 576,
2086 1.1.1.2 christos 102, 103, 25, 161, 35, 90, 91, 62, 166, 167,
2087 1.1.1.2 christos 35, 156, 123, 124, 69, 160, 593, 594, 595, 74,
2088 1.1.1.2 christos 75, 76, 66, 139, 140, 69, 70, 71, 72, 84,
2089 1.1.1.2 christos 85, 86, 119, 120, 89, 25, 161, 124, 125, 126,
2090 1.1.1.2 christos 171, 166, 167, 25, 518, 820, 623, 521, 522, 626,
2091 1.1.1.2 christos 97, 796, 99, 100, 101, 97, 25, 99, 100, 101,
2092 1.1.1.2 christos 835, 582, 807, 25, 809, 810, 121, 122, 589, 590,
2093 1.1.1.2 christos 119, 120, 649, 64, 65, 66, 67, 25, 69, 70,
2094 1.1.1.2 christos 71, 72, 156, 156, 69, 70, 160, 160, 64, 65,
2095 1.1.1.2 christos 25, 67, 669, 69, 70, 134, 135, 156, 25, 90,
2096 1.1.1.2 christos 91, 160, 78, 79, 80, 81, 161, 162, 142, 143,
2097 1.1.1.2 christos 691, 166, 167, 156, 90, 91, 92, 160, 119, 120,
2098 1.1.1.2 christos 64, 65, 66, 67, 860, 69, 70, 71, 72, 156,
2099 1.1.1.2 christos 25, 25, 156, 160, 655, 656, 160, 156, 715, 745,
2100 1.1.1.2 christos 156, 160, 25, 27, 160, 25, 90, 91, 106, 107,
2101 1.1.1.2 christos 108, 109, 700, 168, 169, 170, 762, 64, 25, 66,
2102 1.1.1.2 christos 25, 682, 69, 70, 71, 72, 25, 25, 66, 160,
2103 1.1.1.2 christos 747, 69, 70, 71, 72, 25, 697, 698, 35, 700,
2104 1.1.1.2 christos 25, 27, 25, 90, 91, 27, 71, 161, 161, 156,
2105 1.1.1.2 christos 158, 161, 90, 91, 70, 161, 161, 161, 161, 25,
2106 1.1.1.2 christos 161, 778, 161, 25, 161, 161, 25, 25, 25, 162,
2107 1.1.1.2 christos 162, 25, 789, 25, 70, 161, 161, 70, 161, 161,
2108 1.1.1.2 christos 161, 161, 161, 97, 35, 35, 162, 156, 97, 160,
2109 1.1.1.2 christos 160, 70, 156, 156, 172, 812, 156, 156, 160, 156,
2110 1.1.1.2 christos 156, 156, 156, 156, 25, 97, 25, 25, 160, 35,
2111 1.1.1.2 christos 156, 156, 163, 163, 157, 157, 157, 134, 124, 25,
2112 1.1.1.2 christos 25, 25, 25, 35, 25, 25, 25, 788, 25, 25,
2113 1.1.1.2 christos 25, 161, 25, 25, 161, 161, 34, 25, 157, 157,
2114 1.1.1.2 christos 25, 70, 157, 25, 157, 25, 156, 25, 160, 130,
2115 1.1.1.2 christos 161, 25, 136, 25, 21, 157, 817, 157, 35, 25,
2116 1.1.1.2 christos 25, 25, 156, 25, 25, 160, 25, 884, 25, 830,
2117 1.1.1.2 christos 887, 0, 1, 25, 891, 892, 893, 25, 134, 35,
2118 1.1.1.2 christos 97, 97, 11, 163, 161, 163, 903, 904, 905, 163,
2119 1.1.1.2 christos 160, 912, 163, 158, 23, 24, 25, 35, 27, 163,
2120 1.1.1.2 christos 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
2121 1.1.1.2 christos 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
2122 1.1.1.2 christos 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
2123 1.1.1.2 christos 59, 60, 156, 160, 97, 160, 156, 898, 25, 133,
2124 1.1.1.2 christos 35, 35, 97, 158, 158, 158, 156, 156, 156, 156,
2125 1.1.1.2 christos 35, 25, 141, 25, 156, 25, 25, 974, 975, 35,
2126 1.1.1.2 christos 35, 91, 35, 97, 25, 25, 95, 96, 25, 160,
2127 1.1.1.2 christos 160, 69, 156, 160, 25, 156, 97, 163, 161, 76,
2128 1.1.1.2 christos 156, 156, 111, 112, 113, 114, 97, 116, 156, 118,
2129 1.1.1.2 christos 160, 160, 121, 122, 129, 97, 97, 97, 97, 25,
2130 1.1.1.2 christos 160, 35, 160, 156, 25, 156, 160, 156, 35, 25,
2131 1.1.1.2 christos 25, 161, 141, 159, 161, 144, 145, 146, 161, 148,
2132 1.1.1.2 christos 149, 150, 151, 152, 153, 154, 155, 11, 161, 161,
2133 1.1.1.2 christos 161, 156, 161, 162, 160, 164, 165, 160, 160, 23,
2134 1.1.1.2 christos 24, 25, 160, 27, 160, 29, 30, 31, 32, 33,
2135 1.1.1.2 christos 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
2136 1.1.1.2 christos 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
2137 1.1.1.2 christos 54, 55, 56, 57, 58, 59, 60, 160, 90, 163,
2138 1.1.1.2 christos 160, 163, 163, 160, 25, 25, 25, 25, 25, 160,
2139 1.1.1.2 christos 25, 97, 160, 160, 160, 134, 161, 160, 160, 163,
2140 1.1.1.2 christos 124, 160, 160, 35, 156, 160, 35, 163, 35, 163,
2141 1.1.1.2 christos 25, 95, 96, 163, 161, 163, 97, 25, 171, 97,
2142 1.1.1.2 christos 25, 97, 97, 160, 129, 158, 162, 111, 112, 113,
2143 1.1.1.2 christos 114, 25, 116, 25, 118, 158, 156, 121, 122, 156,
2144 1.1.1.2 christos 97, 160, 156, 156, 97, 97, 141, 124, 90, 160,
2145 1.1.1.2 christos 160, 160, 160, 160, 97, 25, 160, 141, 160, 160,
2146 1.1.1.2 christos 144, 145, 146, 163, 148, 149, 150, 151, 152, 153,
2147 1.1.1.2 christos 154, 155, 163, 163, 160, 160, 156, 161, 162, 97,
2148 1.1.1.2 christos 164, 165, 35, 25, 163, 25, 160, 160, 160, 160,
2149 1.1.1.2 christos 160, 156, 160, 160, 160, 25, 160, 25, 161, 161,
2150 1.1.1.2 christos 25, 27, 25, 25, 25, 161, 160, 25, 25, 160,
2151 1.1.1.2 christos 160, 31, 160, 160, 160, 25, 71, 25, 25, 25,
2152 1.1.1.2 christos 83, 131, 158, 70, 69, 158, 35, 161, 97, 160,
2153 1.1.1.2 christos 160, 156, 91, 161, 160, 158, 158, 158, 124, 25,
2154 1.1.1.2 christos 160, 160, 158, 160, 158, 25, 27, 32, 161, 160,
2155 1.1.1.2 christos 135, 70, 161, 160, 160, 21, 160, 160, 160, 160,
2156 1.1.1.2 christos 156, 156, 160, 25, 161, 25, 35, 135, 161, 158,
2157 1.1.1.2 christos 161, 161, 160, 134, 158, 135, 71, 135, 135, 135,
2158 1.1.1.2 christos 160, 135, 160, 135, 160, 160, 160, 160, 160, 160,
2159 1.1.1.2 christos 35, 969, 859, 160, 160, 160, 160, 37, 301, -1,
2160 1.1.1.2 christos -1, -1, 320
2161 1.1 christos };
2162 1.1 christos
2163 1.1 christos /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
2164 1.1 christos state STATE-NUM. */
2165 1.1 christos static const yytype_uint8 yystos[] =
2166 1.1 christos {
2167 1.1 christos 0, 1, 11, 23, 24, 25, 27, 29, 30, 31,
2168 1.1 christos 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
2169 1.1 christos 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
2170 1.1 christos 52, 53, 54, 55, 56, 57, 58, 59, 60, 95,
2171 1.1.1.2 christos 96, 111, 112, 113, 114, 116, 118, 121, 122, 141,
2172 1.1.1.2 christos 144, 145, 146, 148, 149, 150, 151, 152, 153, 154,
2173 1.1.1.2 christos 155, 161, 162, 164, 165, 174, 175, 176, 177, 196,
2174 1.1.1.2 christos 204, 205, 206, 207, 208, 211, 161, 62, 69, 161,
2175 1.1.1.2 christos 166, 167, 212, 217, 218, 219, 88, 93, 94, 97,
2176 1.1.1.2 christos 98, 102, 103, 97, 99, 100, 101, 210, 97, 97,
2177 1.1.1.2 christos 97, 97, 97, 25, 25, 218, 218, 161, 218, 167,
2178 1.1.1.2 christos 218, 167, 218, 161, 218, 218, 212, 216, 218, 161,
2179 1.1.1.2 christos 216, 218, 161, 161, 162, 197, 162, 197, 162, 197,
2180 1.1.1.2 christos 162, 197, 25, 218, 161, 162, 162, 97, 210, 161,
2181 1.1.1.2 christos 161, 161, 161, 161, 161, 25, 177, 161, 161, 27,
2182 1.1.1.2 christos 63, 25, 25, 82, 210, 0, 77, 159, 97, 102,
2183 1.1.1.2 christos 103, 97, 25, 35, 69, 76, 85, 86, 87, 89,
2184 1.1.1.2 christos 177, 204, 209, 218, 177, 209, 209, 161, 178, 25,
2185 1.1.1.2 christos 219, 219, 219, 64, 65, 66, 67, 69, 70, 71,
2186 1.1.1.2 christos 72, 90, 91, 25, 218, 25, 218, 25, 218, 5,
2187 1.1.1.2 christos 6, 7, 9, 10, 12, 13, 14, 15, 16, 17,
2188 1.1.1.2 christos 25, 27, 28, 33, 35, 62, 69, 74, 75, 76,
2189 1.1.1.2 christos 84, 85, 86, 89, 121, 122, 161, 162, 177, 193,
2190 1.1.1.2 christos 198, 209, 218, 25, 25, 218, 25, 218, 25, 63,
2191 1.1.1.2 christos 147, 177, 141, 164, 35, 35, 35, 35, 15, 18,
2192 1.1.1.2 christos 20, 22, 25, 27, 35, 85, 86, 122, 161, 177,
2193 1.1.1.2 christos 209, 218, 218, 25, 25, 26, 171, 25, 26, 25,
2194 1.1.1.2 christos 25, 25, 25, 25, 25, 25, 25, 25, 27, 25,
2195 1.1.1.2 christos 25, 25, 25, 25, 25, 35, 25, 25, 56, 27,
2196 1.1.1.2 christos 156, 158, 69, 70, 82, 83, 200, 203, 25, 27,
2197 1.1.1.2 christos 176, 177, 25, 161, 71, 177, 177, 177, 177, 161,
2198 1.1.1.2 christos 177, 90, 91, 92, 161, 218, 161, 194, 133, 134,
2199 1.1.1.2 christos 156, 158, 160, 219, 219, 219, 219, 219, 219, 219,
2200 1.1.1.2 christos 219, 219, 219, 161, 161, 161, 161, 161, 161, 161,
2201 1.1.1.2 christos 161, 64, 65, 67, 70, 78, 79, 80, 81, 90,
2202 1.1.1.2 christos 91, 92, 199, 200, 161, 185, 70, 185, 25, 25,
2203 1.1.1.2 christos 25, 25, 25, 25, 25, 162, 162, 25, 177, 204,
2204 1.1.1.2 christos 205, 206, 208, 25, 70, 161, 161, 178, 161, 186,
2205 1.1.1.2 christos 161, 104, 105, 110, 27, 147, 161, 104, 105, 110,
2206 1.1.1.2 christos 161, 161, 25, 25, 35, 177, 161, 200, 97, 90,
2207 1.1.1.2 christos 91, 92, 97, 200, 35, 35, 162, 206, 208, 178,
2208 1.1.1.2 christos 156, 97, 160, 70, 172, 160, 70, 156, 156, 83,
2209 1.1.1.2 christos 163, 163, 163, 163, 160, 83, 200, 203, 83, 200,
2210 1.1.1.2 christos 203, 156, 156, 156, 156, 156, 156, 156, 160, 97,
2211 1.1.1.2 christos 218, 25, 56, 25, 218, 25, 218, 163, 163, 77,
2212 1.1.1.2 christos 159, 194, 25, 35, 156, 156, 157, 157, 177, 157,
2213 1.1.1.2 christos 218, 218, 218, 124, 134, 156, 160, 156, 160, 25,
2214 1.1.1.2 christos 35, 207, 218, 25, 25, 25, 25, 35, 25, 25,
2215 1.1.1.2 christos 25, 25, 25, 25, 161, 218, 218, 218, 25, 25,
2216 1.1.1.2 christos 131, 132, 34, 161, 187, 161, 188, 157, 157, 157,
2217 1.1.1.2 christos 157, 25, 25, 70, 103, 177, 160, 83, 200, 203,
2218 1.1.1.2 christos 177, 25, 25, 156, 131, 132, 130, 25, 218, 25,
2219 1.1.1.2 christos 218, 25, 218, 161, 25, 177, 177, 177, 25, 25,
2220 1.1.1.2 christos 35, 136, 25, 68, 87, 218, 218, 218, 21, 35,
2221 1.1.1.2 christos 157, 157, 25, 177, 160, 156, 218, 25, 25, 25,
2222 1.1.1.2 christos 25, 25, 163, 218, 163, 25, 218, 163, 218, 218,
2223 1.1.1.2 christos 218, 25, 218, 218, 218, 25, 161, 97, 218, 160,
2224 1.1.1.2 christos 156, 160, 163, 163, 97, 176, 158, 177, 204, 204,
2225 1.1.1.2 christos 35, 35, 156, 35, 218, 160, 160, 134, 133, 97,
2226 1.1.1.2 christos 97, 178, 156, 158, 158, 158, 156, 156, 156, 156,
2227 1.1.1.2 christos 156, 25, 187, 188, 187, 156, 161, 182, 156, 161,
2228 1.1.1.2 christos 183, 160, 160, 156, 123, 124, 141, 141, 35, 35,
2229 1.1.1.2 christos 35, 35, 218, 200, 203, 83, 200, 203, 25, 160,
2230 1.1.1.2 christos 25, 212, 214, 215, 218, 163, 156, 156, 156, 25,
2231 1.1.1.2 christos 160, 160, 160, 161, 195, 195, 195, 195, 25, 156,
2232 1.1.1.2 christos 160, 156, 156, 160, 161, 161, 161, 161, 189, 189,
2233 1.1.1.2 christos 161, 183, 35, 35, 83, 203, 160, 35, 160, 91,
2234 1.1.1.2 christos 160, 160, 160, 160, 163, 97, 163, 163, 97, 160,
2235 1.1.1.2 christos 160, 160, 156, 160, 160, 160, 129, 25, 161, 97,
2236 1.1.1.2 christos 25, 97, 97, 97, 25, 159, 218, 69, 76, 177,
2237 1.1.1.2 christos 156, 160, 160, 161, 177, 161, 25, 218, 218, 218,
2238 1.1.1.2 christos 25, 35, 25, 35, 25, 90, 25, 124, 125, 126,
2239 1.1.1.2 christos 180, 25, 123, 124, 25, 160, 156, 160, 156, 160,
2240 1.1.1.2 christos 160, 188, 187, 218, 163, 25, 218, 163, 160, 163,
2241 1.1.1.2 christos 171, 163, 25, 25, 25, 97, 134, 156, 218, 161,
2242 1.1.1.2 christos 179, 35, 35, 139, 140, 177, 177, 124, 35, 189,
2243 1.1.1.2 christos 25, 163, 97, 25, 218, 97, 25, 97, 97, 25,
2244 1.1.1.2 christos 35, 177, 160, 129, 3, 4, 8, 19, 158, 162,
2245 1.1.1.2 christos 197, 25, 25, 156, 160, 177, 177, 156, 204, 158,
2246 1.1.1.2 christos 156, 156, 156, 160, 160, 160, 160, 160, 218, 97,
2247 1.1.1.2 christos 160, 97, 160, 160, 97, 141, 124, 163, 185, 163,
2248 1.1.1.2 christos 163, 185, 90, 168, 169, 170, 213, 97, 160, 160,
2249 1.1.1.2 christos 209, 160, 218, 160, 119, 120, 160, 160, 160, 160,
2250 1.1.1.2 christos 156, 156, 160, 160, 163, 209, 97, 25, 35, 25,
2251 1.1.1.2 christos 160, 160, 161, 161, 25, 25, 218, 25, 25, 27,
2252 1.1.1.2 christos 177, 218, 25, 25, 25, 179, 185, 161, 160, 25,
2253 1.1.1.2 christos 25, 31, 160, 160, 185, 185, 185, 218, 177, 188,
2254 1.1.1.2 christos 178, 160, 160, 160, 188, 25, 177, 25, 71, 178,
2255 1.1.1.2 christos 25, 179, 25, 25, 158, 161, 160, 158, 160, 161,
2256 1.1.1.2 christos 160, 158, 158, 158, 131, 199, 200, 70, 69, 160,
2257 1.1.1.2 christos 156, 160, 35, 91, 158, 158, 218, 106, 107, 108,
2258 1.1.1.2 christos 109, 190, 97, 218, 124, 161, 191, 218, 218, 218,
2259 1.1.1.2 christos 160, 25, 25, 32, 177, 27, 70, 218, 218, 218,
2260 1.1.1.2 christos 191, 160, 197, 160, 160, 135, 160, 160, 160, 161,
2261 1.1.1.2 christos 184, 183, 183, 160, 21, 156, 156, 160, 161, 192,
2262 1.1.1.2 christos 161, 201, 161, 202, 119, 120, 180, 181, 161, 25,
2263 1.1.1.2 christos 25, 134, 135, 127, 128, 137, 138, 142, 143, 156,
2264 1.1.1.2 christos 160, 156, 160, 35, 158, 158, 156, 160, 156, 160,
2265 1.1.1.2 christos 156, 160, 156, 160, 156, 160, 156, 160, 156, 160,
2266 1.1.1.2 christos 156, 160, 181, 180, 160, 218, 218, 135, 134, 135,
2267 1.1.1.2 christos 135, 135, 135, 135, 135, 160, 160, 71, 160, 160,
2268 1.1.1.2 christos 160, 160, 160, 160, 160, 160, 160, 160, 35, 191,
2269 1.1.1.2 christos 191
2270 1.1 christos };
2271 1.1 christos
2272 1.1 christos /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
2273 1.1 christos static const yytype_uint8 yyr1[] =
2274 1.1 christos {
2275 1.1.1.2 christos 0, 173, 174, 174, 175, 175, 175, 175, 176, 176,
2276 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2277 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2278 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2279 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2280 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2281 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2282 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2283 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2284 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2285 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2286 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2287 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2288 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2289 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2290 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2291 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2292 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2293 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2294 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2295 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2296 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
2297 1.1.1.2 christos 176, 176, 176, 176, 176, 176, 176, 177, 177, 178,
2298 1.1.1.2 christos 178, 178, 178, 178, 179, 179, 180, 180, 180, 180,
2299 1.1.1.2 christos 181, 181, 182, 182, 183, 183, 183, 184, 184, 184,
2300 1.1.1.2 christos 184, 184, 185, 185, 185, 186, 186, 186, 187, 187,
2301 1.1.1.2 christos 187, 187, 187, 187, 188, 188, 189, 189, 190, 190,
2302 1.1.1.2 christos 190, 190, 191, 191, 192, 192, 192, 192, 193, 193,
2303 1.1.1.2 christos 193, 194, 194, 195, 195, 196, 197, 198, 198, 199,
2304 1.1.1.2 christos 199, 199, 199, 200, 200, 201, 201, 201, 201, 201,
2305 1.1.1.2 christos 201, 201, 201, 202, 202, 202, 202, 203, 203, 203,
2306 1.1.1.2 christos 204, 205, 206, 207, 207, 207, 207, 207, 208, 208,
2307 1.1.1.2 christos 208, 209, 210, 210, 210, 210, 211, 211, 211, 211,
2308 1.1.1.2 christos 212, 213, 213, 213, 214, 215, 215, 216, 217, 217,
2309 1.1.1.2 christos 217, 217, 217, 218, 219, 219, 219, 219, 219, 219,
2310 1.1.1.2 christos 219, 219, 219, 219, 219
2311 1.1 christos };
2312 1.1 christos
2313 1.1 christos /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
2314 1.1 christos static const yytype_int8 yyr2[] =
2315 1.1 christos {
2316 1.1 christos 0, 2, 0, 1, 2, 6, 4, 1, 1, 2,
2317 1.1 christos 5, 1, 6, 6, 3, 3, 17, 17, 11, 11,
2318 1.1 christos 11, 12, 12, 12, 5, 3, 3, 3, 8, 13,
2319 1.1 christos 12, 13, 13, 8, 17, 6, 9, 3, 6, 3,
2320 1.1 christos 5, 6, 8, 8, 2, 2, 4, 3, 2, 4,
2321 1.1 christos 3, 6, 4, 7, 7, 3, 3, 6, 3, 4,
2322 1.1 christos 3, 3, 3, 11, 11, 9, 5, 5, 9, 5,
2323 1.1 christos 5, 6, 6, 5, 5, 5, 6, 6, 5, 1,
2324 1.1.1.2 christos 3, 3, 3, 4, 4, 4, 9, 9, 5, 7,
2325 1.1 christos 4, 6, 6, 7, 9, 8, 8, 11, 9, 4,
2326 1.1 christos 5, 6, 7, 6, 4, 6, 5, 6, 6, 4,
2327 1.1 christos 8, 10, 10, 12, 5, 6, 5, 6, 4, 4,
2328 1.1.1.2 christos 4, 7, 9, 9, 9, 6, 6, 6, 9, 8,
2329 1.1 christos 6, 5, 5, 8, 4, 7, 1, 1, 1, 1,
2330 1.1 christos 1, 1, 1, 1, 1, 1, 2, 2, 4, 4,
2331 1.1 christos 6, 6, 2, 2, 4, 2, 2, 2, 2, 2,
2332 1.1 christos 2, 6, 6, 5, 4, 3, 3, 3, 3, 3,
2333 1.1 christos 3, 4, 2, 4, 2, 4, 2, 4, 2, 7,
2334 1.1 christos 8, 8, 7, 7, 7, 9, 7, 8, 9, 8,
2335 1.1 christos 6, 7, 8, 9, 8, 7, 7, 6, 11, 7,
2336 1.1 christos 11, 7, 3, 2, 1, 7, 9, 11, 3, 5,
2337 1.1 christos 7, 2, 2, 2, 2, 1, 1, 2, 2, 4,
2338 1.1 christos 1, 1, 6, 6, 6, 2, 2, 1, 1, 0,
2339 1.1 christos 5, 5, 3, 3, 3, 3, 0, 1, 1, 1,
2340 1.1 christos 1, 1, 0, 3, 0, 3, 3, 0, 3, 3,
2341 1.1 christos 5, 5, 0, 3, 3, 0, 3, 3, 0, 3,
2342 1.1 christos 3, 3, 5, 5, 0, 3, 0, 3, 1, 1,
2343 1.1 christos 1, 1, 0, 3, 3, 3, 5, 5, 1, 1,
2344 1.1 christos 1, 0, 3, 0, 3, 4, 4, 1, 1, 1,
2345 1.1 christos 1, 1, 1, 1, 1, 3, 3, 3, 3, 5,
2346 1.1 christos 5, 5, 5, 3, 3, 5, 5, 0, 1, 1,
2347 1.1 christos 2, 2, 2, 3, 1, 5, 5, 3, 2, 2,
2348 1.1 christos 2, 3, 1, 1, 1, 1, 3, 3, 3, 3,
2349 1.1 christos 1, 1, 1, 1, 3, 1, 1, 3, 1, 1,
2350 1.1 christos 3, 2, 2, 1, 3, 3, 3, 3, 3, 3,
2351 1.1 christos 3, 3, 3, 3, 1
2352 1.1 christos };
2353 1.1 christos
2354 1.1 christos
2355 1.1 christos enum { YYENOMEM = -2 };
2356 1.1 christos
2357 1.1 christos #define yyerrok (yyerrstatus = 0)
2358 1.1 christos #define yyclearin (yychar = YYEMPTY)
2359 1.1 christos
2360 1.1 christos #define YYACCEPT goto yyacceptlab
2361 1.1 christos #define YYABORT goto yyabortlab
2362 1.1 christos #define YYERROR goto yyerrorlab
2363 1.1 christos #define YYNOMEM goto yyexhaustedlab
2364 1.1 christos
2365 1.1 christos
2366 1.1 christos #define YYRECOVERING() (!!yyerrstatus)
2367 1.1 christos
2368 1.1 christos #define YYBACKUP(Token, Value) \
2369 1.1 christos do \
2370 1.1 christos if (yychar == YYEMPTY) \
2371 1.1 christos { \
2372 1.1 christos yychar = (Token); \
2373 1.1 christos yylval = (Value); \
2374 1.1 christos YYPOPSTACK (yylen); \
2375 1.1 christos yystate = *yyssp; \
2376 1.1 christos goto yybackup; \
2377 1.1 christos } \
2378 1.1 christos else \
2379 1.1 christos { \
2380 1.1 christos yyerror (YY_("syntax error: cannot back up")); \
2381 1.1 christos YYERROR; \
2382 1.1 christos } \
2383 1.1 christos while (0)
2384 1.1 christos
2385 1.1 christos /* Backward compatibility with an undocumented macro.
2386 1.1 christos Use YYerror or YYUNDEF. */
2387 1.1 christos #define YYERRCODE YYUNDEF
2388 1.1 christos
2389 1.1 christos
2390 1.1 christos /* Enable debugging if requested. */
2391 1.1 christos #if YYDEBUG
2392 1.1 christos
2393 1.1 christos # ifndef YYFPRINTF
2394 1.1 christos # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2395 1.1 christos # define YYFPRINTF fprintf
2396 1.1 christos # endif
2397 1.1 christos
2398 1.1 christos # define YYDPRINTF(Args) \
2399 1.1 christos do { \
2400 1.1 christos if (yydebug) \
2401 1.1 christos YYFPRINTF Args; \
2402 1.1 christos } while (0)
2403 1.1 christos
2404 1.1 christos
2405 1.1 christos
2406 1.1 christos
2407 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
2408 1.1 christos do { \
2409 1.1 christos if (yydebug) \
2410 1.1 christos { \
2411 1.1 christos YYFPRINTF (stderr, "%s ", Title); \
2412 1.1 christos yy_symbol_print (stderr, \
2413 1.1 christos Kind, Value); \
2414 1.1 christos YYFPRINTF (stderr, "\n"); \
2415 1.1 christos } \
2416 1.1 christos } while (0)
2417 1.1 christos
2418 1.1 christos
2419 1.1 christos /*-----------------------------------.
2420 1.1 christos | Print this symbol's value on YYO. |
2421 1.1 christos `-----------------------------------*/
2422 1.1 christos
2423 1.1 christos static void
2424 1.1 christos yy_symbol_value_print (FILE *yyo,
2425 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2426 1.1 christos {
2427 1.1 christos FILE *yyoutput = yyo;
2428 1.1 christos YY_USE (yyoutput);
2429 1.1 christos if (!yyvaluep)
2430 1.1 christos return;
2431 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2432 1.1 christos YY_USE (yykind);
2433 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2434 1.1 christos }
2435 1.1 christos
2436 1.1 christos
2437 1.1 christos /*---------------------------.
2438 1.1 christos | Print this symbol on YYO. |
2439 1.1 christos `---------------------------*/
2440 1.1 christos
2441 1.1 christos static void
2442 1.1 christos yy_symbol_print (FILE *yyo,
2443 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2444 1.1 christos {
2445 1.1 christos YYFPRINTF (yyo, "%s %s (",
2446 1.1 christos yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2447 1.1 christos
2448 1.1 christos yy_symbol_value_print (yyo, yykind, yyvaluep);
2449 1.1 christos YYFPRINTF (yyo, ")");
2450 1.1 christos }
2451 1.1 christos
2452 1.1 christos /*------------------------------------------------------------------.
2453 1.1 christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2454 1.1 christos | TOP (included). |
2455 1.1 christos `------------------------------------------------------------------*/
2456 1.1 christos
2457 1.1 christos static void
2458 1.1 christos yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2459 1.1 christos {
2460 1.1 christos YYFPRINTF (stderr, "Stack now");
2461 1.1 christos for (; yybottom <= yytop; yybottom++)
2462 1.1 christos {
2463 1.1 christos int yybot = *yybottom;
2464 1.1 christos YYFPRINTF (stderr, " %d", yybot);
2465 1.1 christos }
2466 1.1 christos YYFPRINTF (stderr, "\n");
2467 1.1 christos }
2468 1.1 christos
2469 1.1 christos # define YY_STACK_PRINT(Bottom, Top) \
2470 1.1 christos do { \
2471 1.1 christos if (yydebug) \
2472 1.1 christos yy_stack_print ((Bottom), (Top)); \
2473 1.1 christos } while (0)
2474 1.1 christos
2475 1.1 christos
2476 1.1 christos /*------------------------------------------------.
2477 1.1 christos | Report that the YYRULE is going to be reduced. |
2478 1.1 christos `------------------------------------------------*/
2479 1.1 christos
2480 1.1 christos static void
2481 1.1 christos yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
2482 1.1 christos int yyrule)
2483 1.1 christos {
2484 1.1 christos int yylno = yyrline[yyrule];
2485 1.1 christos int yynrhs = yyr2[yyrule];
2486 1.1 christos int yyi;
2487 1.1 christos YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2488 1.1 christos yyrule - 1, yylno);
2489 1.1 christos /* The symbols being reduced. */
2490 1.1 christos for (yyi = 0; yyi < yynrhs; yyi++)
2491 1.1 christos {
2492 1.1 christos YYFPRINTF (stderr, " $%d = ", yyi + 1);
2493 1.1 christos yy_symbol_print (stderr,
2494 1.1 christos YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2495 1.1 christos &yyvsp[(yyi + 1) - (yynrhs)]);
2496 1.1 christos YYFPRINTF (stderr, "\n");
2497 1.1 christos }
2498 1.1 christos }
2499 1.1 christos
2500 1.1 christos # define YY_REDUCE_PRINT(Rule) \
2501 1.1 christos do { \
2502 1.1 christos if (yydebug) \
2503 1.1 christos yy_reduce_print (yyssp, yyvsp, Rule); \
2504 1.1 christos } while (0)
2505 1.1 christos
2506 1.1 christos /* Nonzero means print parse trace. It is left uninitialized so that
2507 1.1 christos multiple parsers can coexist. */
2508 1.1 christos int yydebug;
2509 1.1 christos #else /* !YYDEBUG */
2510 1.1 christos # define YYDPRINTF(Args) ((void) 0)
2511 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2512 1.1 christos # define YY_STACK_PRINT(Bottom, Top)
2513 1.1 christos # define YY_REDUCE_PRINT(Rule)
2514 1.1 christos #endif /* !YYDEBUG */
2515 1.1 christos
2516 1.1 christos
2517 1.1 christos /* YYINITDEPTH -- initial size of the parser's stacks. */
2518 1.1 christos #ifndef YYINITDEPTH
2519 1.1 christos # define YYINITDEPTH 200
2520 1.1 christos #endif
2521 1.1 christos
2522 1.1 christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2523 1.1 christos if the built-in stack extension method is used).
2524 1.1 christos
2525 1.1 christos Do not make this value too large; the results are undefined if
2526 1.1 christos YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2527 1.1 christos evaluated with infinite-precision integer arithmetic. */
2528 1.1 christos
2529 1.1 christos #ifndef YYMAXDEPTH
2530 1.1 christos # define YYMAXDEPTH 10000
2531 1.1 christos #endif
2532 1.1 christos
2533 1.1 christos
2534 1.1 christos
2535 1.1 christos
2536 1.1 christos
2537 1.1 christos
2538 1.1 christos /*-----------------------------------------------.
2539 1.1 christos | Release the memory associated to this symbol. |
2540 1.1 christos `-----------------------------------------------*/
2541 1.1 christos
2542 1.1 christos static void
2543 1.1 christos yydestruct (const char *yymsg,
2544 1.1 christos yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
2545 1.1 christos {
2546 1.1 christos YY_USE (yyvaluep);
2547 1.1 christos if (!yymsg)
2548 1.1 christos yymsg = "Deleting";
2549 1.1 christos YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
2550 1.1 christos
2551 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2552 1.1 christos YY_USE (yykind);
2553 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2554 1.1 christos }
2555 1.1 christos
2556 1.1 christos
2557 1.1 christos /* Lookahead token kind. */
2558 1.1 christos int yychar;
2559 1.1 christos
2560 1.1 christos /* The semantic value of the lookahead symbol. */
2561 1.1 christos YYSTYPE yylval;
2562 1.1 christos /* Number of syntax errors so far. */
2563 1.1 christos int yynerrs;
2564 1.1 christos
2565 1.1 christos
2566 1.1 christos
2567 1.1 christos
2568 1.1 christos /*----------.
2569 1.1 christos | yyparse. |
2570 1.1 christos `----------*/
2571 1.1 christos
2572 1.1 christos int
2573 1.1 christos yyparse (void)
2574 1.1 christos {
2575 1.1 christos yy_state_fast_t yystate = 0;
2576 1.1 christos /* Number of tokens to shift before error messages enabled. */
2577 1.1 christos int yyerrstatus = 0;
2578 1.1 christos
2579 1.1 christos /* Refer to the stacks through separate pointers, to allow yyoverflow
2580 1.1 christos to reallocate them elsewhere. */
2581 1.1 christos
2582 1.1 christos /* Their size. */
2583 1.1 christos YYPTRDIFF_T yystacksize = YYINITDEPTH;
2584 1.1 christos
2585 1.1 christos /* The state stack: array, bottom, top. */
2586 1.1 christos yy_state_t yyssa[YYINITDEPTH];
2587 1.1 christos yy_state_t *yyss = yyssa;
2588 1.1 christos yy_state_t *yyssp = yyss;
2589 1.1 christos
2590 1.1 christos /* The semantic value stack: array, bottom, top. */
2591 1.1 christos YYSTYPE yyvsa[YYINITDEPTH];
2592 1.1 christos YYSTYPE *yyvs = yyvsa;
2593 1.1 christos YYSTYPE *yyvsp = yyvs;
2594 1.1 christos
2595 1.1 christos int yyn;
2596 1.1 christos /* The return value of yyparse. */
2597 1.1 christos int yyresult;
2598 1.1 christos /* Lookahead symbol kind. */
2599 1.1 christos yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
2600 1.1 christos /* The variables used to return semantic value and location from the
2601 1.1 christos action routines. */
2602 1.1 christos YYSTYPE yyval;
2603 1.1 christos
2604 1.1 christos
2605 1.1 christos
2606 1.1 christos #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
2607 1.1 christos
2608 1.1 christos /* The number of symbols on the RHS of the reduced rule.
2609 1.1 christos Keep to zero when no symbol should be popped. */
2610 1.1 christos int yylen = 0;
2611 1.1 christos
2612 1.1 christos YYDPRINTF ((stderr, "Starting parse\n"));
2613 1.1 christos
2614 1.1 christos yychar = YYEMPTY; /* Cause a token to be read. */
2615 1.1 christos
2616 1.1 christos goto yysetstate;
2617 1.1 christos
2618 1.1 christos
2619 1.1 christos /*------------------------------------------------------------.
2620 1.1 christos | yynewstate -- push a new state, which is found in yystate. |
2621 1.1 christos `------------------------------------------------------------*/
2622 1.1 christos yynewstate:
2623 1.1 christos /* In all cases, when you get here, the value and location stacks
2624 1.1 christos have just been pushed. So pushing a state here evens the stacks. */
2625 1.1 christos yyssp++;
2626 1.1 christos
2627 1.1 christos
2628 1.1 christos /*--------------------------------------------------------------------.
2629 1.1 christos | yysetstate -- set current state (the top of the stack) to yystate. |
2630 1.1 christos `--------------------------------------------------------------------*/
2631 1.1 christos yysetstate:
2632 1.1 christos YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2633 1.1 christos YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2634 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
2635 1.1 christos *yyssp = YY_CAST (yy_state_t, yystate);
2636 1.1 christos YY_IGNORE_USELESS_CAST_END
2637 1.1 christos YY_STACK_PRINT (yyss, yyssp);
2638 1.1 christos
2639 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
2640 1.1 christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2641 1.1 christos YYNOMEM;
2642 1.1 christos #else
2643 1.1 christos {
2644 1.1 christos /* Get the current used size of the three stacks, in elements. */
2645 1.1 christos YYPTRDIFF_T yysize = yyssp - yyss + 1;
2646 1.1 christos
2647 1.1 christos # if defined yyoverflow
2648 1.1 christos {
2649 1.1 christos /* Give user a chance to reallocate the stack. Use copies of
2650 1.1 christos these so that the &'s don't force the real ones into
2651 1.1 christos memory. */
2652 1.1 christos yy_state_t *yyss1 = yyss;
2653 1.1 christos YYSTYPE *yyvs1 = yyvs;
2654 1.1 christos
2655 1.1 christos /* Each stack pointer address is followed by the size of the
2656 1.1 christos data in use in that stack, in bytes. This used to be a
2657 1.1 christos conditional around just the two extra args, but that might
2658 1.1 christos be undefined if yyoverflow is a macro. */
2659 1.1 christos yyoverflow (YY_("memory exhausted"),
2660 1.1 christos &yyss1, yysize * YYSIZEOF (*yyssp),
2661 1.1 christos &yyvs1, yysize * YYSIZEOF (*yyvsp),
2662 1.1 christos &yystacksize);
2663 1.1 christos yyss = yyss1;
2664 1.1 christos yyvs = yyvs1;
2665 1.1 christos }
2666 1.1 christos # else /* defined YYSTACK_RELOCATE */
2667 1.1 christos /* Extend the stack our own way. */
2668 1.1 christos if (YYMAXDEPTH <= yystacksize)
2669 1.1 christos YYNOMEM;
2670 1.1 christos yystacksize *= 2;
2671 1.1 christos if (YYMAXDEPTH < yystacksize)
2672 1.1 christos yystacksize = YYMAXDEPTH;
2673 1.1 christos
2674 1.1 christos {
2675 1.1 christos yy_state_t *yyss1 = yyss;
2676 1.1 christos union yyalloc *yyptr =
2677 1.1 christos YY_CAST (union yyalloc *,
2678 1.1 christos YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2679 1.1 christos if (! yyptr)
2680 1.1 christos YYNOMEM;
2681 1.1 christos YYSTACK_RELOCATE (yyss_alloc, yyss);
2682 1.1 christos YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2683 1.1 christos # undef YYSTACK_RELOCATE
2684 1.1 christos if (yyss1 != yyssa)
2685 1.1 christos YYSTACK_FREE (yyss1);
2686 1.1 christos }
2687 1.1 christos # endif
2688 1.1 christos
2689 1.1 christos yyssp = yyss + yysize - 1;
2690 1.1 christos yyvsp = yyvs + yysize - 1;
2691 1.1 christos
2692 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
2693 1.1 christos YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2694 1.1 christos YY_CAST (long, yystacksize)));
2695 1.1 christos YY_IGNORE_USELESS_CAST_END
2696 1.1 christos
2697 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
2698 1.1 christos YYABORT;
2699 1.1 christos }
2700 1.1 christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2701 1.1 christos
2702 1.1 christos
2703 1.1 christos if (yystate == YYFINAL)
2704 1.1 christos YYACCEPT;
2705 1.1 christos
2706 1.1 christos goto yybackup;
2707 1.1 christos
2708 1.1 christos
2709 1.1 christos /*-----------.
2710 1.1 christos | yybackup. |
2711 1.1 christos `-----------*/
2712 1.1 christos yybackup:
2713 1.1 christos /* Do appropriate processing given the current state. Read a
2714 1.1 christos lookahead token if we need one and don't already have one. */
2715 1.1 christos
2716 1.1 christos /* First try to decide what to do without reference to lookahead token. */
2717 1.1 christos yyn = yypact[yystate];
2718 1.1 christos if (yypact_value_is_default (yyn))
2719 1.1 christos goto yydefault;
2720 1.1 christos
2721 1.1 christos /* Not known => get a lookahead token if don't already have one. */
2722 1.1 christos
2723 1.1 christos /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2724 1.1 christos if (yychar == YYEMPTY)
2725 1.1 christos {
2726 1.1 christos YYDPRINTF ((stderr, "Reading a token\n"));
2727 1.1 christos yychar = yylex ();
2728 1.1 christos }
2729 1.1 christos
2730 1.1 christos if (yychar <= YYEOF)
2731 1.1 christos {
2732 1.1 christos yychar = YYEOF;
2733 1.1 christos yytoken = YYSYMBOL_YYEOF;
2734 1.1 christos YYDPRINTF ((stderr, "Now at end of input.\n"));
2735 1.1 christos }
2736 1.1 christos else if (yychar == YYerror)
2737 1.1 christos {
2738 1.1 christos /* The scanner already issued an error message, process directly
2739 1.1 christos to error recovery. But do not keep the error token as
2740 1.1 christos lookahead, it is too special and may lead us to an endless
2741 1.1 christos loop in error recovery. */
2742 1.1 christos yychar = YYUNDEF;
2743 1.1 christos yytoken = YYSYMBOL_YYerror;
2744 1.1 christos goto yyerrlab1;
2745 1.1 christos }
2746 1.1 christos else
2747 1.1 christos {
2748 1.1 christos yytoken = YYTRANSLATE (yychar);
2749 1.1 christos YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2750 1.1 christos }
2751 1.1 christos
2752 1.1 christos /* If the proper action on seeing token YYTOKEN is to reduce or to
2753 1.1 christos detect an error, take that action. */
2754 1.1 christos yyn += yytoken;
2755 1.1 christos if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2756 1.1 christos goto yydefault;
2757 1.1 christos yyn = yytable[yyn];
2758 1.1 christos if (yyn <= 0)
2759 1.1 christos {
2760 1.1 christos if (yytable_value_is_error (yyn))
2761 1.1 christos goto yyerrlab;
2762 1.1 christos yyn = -yyn;
2763 1.1 christos goto yyreduce;
2764 1.1 christos }
2765 1.1 christos
2766 1.1 christos /* Count tokens shifted since error; after three, turn off error
2767 1.1 christos status. */
2768 1.1 christos if (yyerrstatus)
2769 1.1 christos yyerrstatus--;
2770 1.1 christos
2771 1.1 christos /* Shift the lookahead token. */
2772 1.1 christos YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2773 1.1 christos yystate = yyn;
2774 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2775 1.1 christos *++yyvsp = yylval;
2776 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2777 1.1 christos
2778 1.1 christos /* Discard the shifted token. */
2779 1.1 christos yychar = YYEMPTY;
2780 1.1 christos goto yynewstate;
2781 1.1 christos
2782 1.1 christos
2783 1.1 christos /*-----------------------------------------------------------.
2784 1.1 christos | yydefault -- do the default action for the current state. |
2785 1.1 christos `-----------------------------------------------------------*/
2786 1.1 christos yydefault:
2787 1.1 christos yyn = yydefact[yystate];
2788 1.1 christos if (yyn == 0)
2789 1.1 christos goto yyerrlab;
2790 1.1 christos goto yyreduce;
2791 1.1 christos
2792 1.1 christos
2793 1.1 christos /*-----------------------------.
2794 1.1 christos | yyreduce -- do a reduction. |
2795 1.1 christos `-----------------------------*/
2796 1.1 christos yyreduce:
2797 1.1 christos /* yyn is the number of a rule to reduce with. */
2798 1.1 christos yylen = yyr2[yyn];
2799 1.1 christos
2800 1.1 christos /* If YYLEN is nonzero, implement the default value of the action:
2801 1.1 christos '$$ = $1'.
2802 1.1 christos
2803 1.1 christos Otherwise, the following line sets YYVAL to garbage.
2804 1.1 christos This behavior is undocumented and Bison
2805 1.1 christos users should not rely upon it. Assigning to YYVAL
2806 1.1 christos unconditionally makes the parser a bit smaller, and it avoids a
2807 1.1 christos GCC warning that YYVAL may be used uninitialized. */
2808 1.1 christos yyval = yyvsp[1-yylen];
2809 1.1 christos
2810 1.1 christos
2811 1.1 christos YY_REDUCE_PRINT (yyn);
2812 1.1 christos switch (yyn)
2813 1.1 christos {
2814 1.1 christos case 3: /* statement: asm */
2815 1.1 christos #line 650 "./config/bfin-parse.y"
2816 1.1 christos {
2817 1.1 christos insn = (yyvsp[0].instr);
2818 1.1 christos if (insn == (INSTR_T) 0)
2819 1.1 christos return NO_INSN_GENERATED;
2820 1.1 christos else if (insn == (INSTR_T) - 1)
2821 1.1 christos return SEMANTIC_ERROR;
2822 1.1 christos else
2823 1.1 christos return INSN_GENERATED;
2824 1.1 christos }
2825 1.1.1.2 christos #line 2826 "config/bfin-parse.c"
2826 1.1 christos break;
2827 1.1 christos
2828 1.1 christos case 5: /* asm: asm_1 DOUBLE_BAR asm_1 DOUBLE_BAR asm_1 SEMICOLON */
2829 1.1 christos #line 664 "./config/bfin-parse.y"
2830 1.1 christos {
2831 1.1 christos if (((yyvsp[-5].instr)->value & 0xf800) == 0xc000)
2832 1.1 christos {
2833 1.1 christos if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2834 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-3].instr), (yyvsp[-1].instr));
2835 1.1 christos else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2836 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-5].instr), (yyvsp[-1].instr), (yyvsp[-3].instr));
2837 1.1 christos else
2838 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instruction group");
2839 1.1 christos }
2840 1.1 christos else if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2841 1.1 christos {
2842 1.1 christos if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-1].instr)))
2843 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-5].instr), (yyvsp[-1].instr));
2844 1.1 christos else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-1].instr)))
2845 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), (yyvsp[-5].instr));
2846 1.1 christos else
2847 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instruction group");
2848 1.1 christos }
2849 1.1 christos else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2850 1.1 christos {
2851 1.1 christos if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-3].instr)))
2852 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-5].instr), (yyvsp[-3].instr));
2853 1.1 christos else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-3].instr)))
2854 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), (yyvsp[-5].instr));
2855 1.1 christos else
2856 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instruction group");
2857 1.1 christos }
2858 1.1 christos else
2859 1.1 christos error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
2860 1.1 christos }
2861 1.1.1.2 christos #line 2862 "config/bfin-parse.c"
2862 1.1 christos break;
2863 1.1 christos
2864 1.1 christos case 6: /* asm: asm_1 DOUBLE_BAR asm_1 SEMICOLON */
2865 1.1 christos #line 697 "./config/bfin-parse.y"
2866 1.1 christos {
2867 1.1 christos if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
2868 1.1 christos {
2869 1.1 christos if (is_group1 ((yyvsp[-1].instr)))
2870 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), (yyvsp[-1].instr), 0);
2871 1.1 christos else if (is_group2 ((yyvsp[-1].instr)))
2872 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-3].instr), 0, (yyvsp[-1].instr));
2873 1.1 christos else
2874 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
2875 1.1 christos }
2876 1.1 christos else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
2877 1.1 christos {
2878 1.1 christos if (is_group1 ((yyvsp[-3].instr)))
2879 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), (yyvsp[-3].instr), 0);
2880 1.1 christos else if (is_group2 ((yyvsp[-3].instr)))
2881 1.1 christos (yyval.instr) = gen_multi_instr_1 ((yyvsp[-1].instr), 0, (yyvsp[-3].instr));
2882 1.1 christos else
2883 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
2884 1.1 christos }
2885 1.1 christos else if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
2886 1.1 christos (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-3].instr), (yyvsp[-1].instr));
2887 1.1 christos else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
2888 1.1 christos (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[-1].instr), (yyvsp[-3].instr));
2889 1.1 christos else
2890 1.1 christos return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
2891 1.1 christos }
2892 1.1.1.2 christos #line 2893 "config/bfin-parse.c"
2893 1.1 christos break;
2894 1.1 christos
2895 1.1 christos case 7: /* asm: error */
2896 1.1 christos #line 724 "./config/bfin-parse.y"
2897 1.1 christos {
2898 1.1 christos (yyval.instr) = 0;
2899 1.1 christos yyerror ("");
2900 1.1 christos yyerrok;
2901 1.1 christos }
2902 1.1.1.2 christos #line 2903 "config/bfin-parse.c"
2903 1.1 christos break;
2904 1.1 christos
2905 1.1 christos case 8: /* asm_1: MNOP */
2906 1.1 christos #line 735 "./config/bfin-parse.y"
2907 1.1 christos {
2908 1.1 christos (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
2909 1.1 christos }
2910 1.1.1.2 christos #line 2911 "config/bfin-parse.c"
2911 1.1 christos break;
2912 1.1 christos
2913 1.1 christos case 9: /* asm_1: assign_macfunc opt_mode */
2914 1.1 christos #line 739 "./config/bfin-parse.y"
2915 1.1 christos {
2916 1.1 christos int op0, op1;
2917 1.1 christos int w0 = 0, w1 = 0;
2918 1.1 christos int h00, h10, h01, h11;
2919 1.1 christos
2920 1.1 christos if (check_macfunc_option (&(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
2921 1.1 christos return yyerror ("bad option");
2922 1.1 christos
2923 1.1 christos if ((yyvsp[-1].macfunc).n == 0)
2924 1.1 christos {
2925 1.1 christos if ((yyvsp[0].mod).MM)
2926 1.1 christos return yyerror ("(m) not allowed with a0 unit");
2927 1.1 christos op1 = 3;
2928 1.1 christos op0 = (yyvsp[-1].macfunc).op;
2929 1.1 christos w1 = 0;
2930 1.1 christos w0 = (yyvsp[-1].macfunc).w;
2931 1.1 christos h00 = IS_H ((yyvsp[-1].macfunc).s0);
2932 1.1 christos h10 = IS_H ((yyvsp[-1].macfunc).s1);
2933 1.1 christos h01 = h11 = 0;
2934 1.1 christos }
2935 1.1 christos else
2936 1.1 christos {
2937 1.1 christos op1 = (yyvsp[-1].macfunc).op;
2938 1.1 christos op0 = 3;
2939 1.1 christos w1 = (yyvsp[-1].macfunc).w;
2940 1.1 christos w0 = 0;
2941 1.1 christos h00 = h10 = 0;
2942 1.1 christos h01 = IS_H ((yyvsp[-1].macfunc).s0);
2943 1.1 christos h11 = IS_H ((yyvsp[-1].macfunc).s1);
2944 1.1 christos }
2945 1.1 christos (yyval.instr) = DSP32MAC (op1, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, w1, (yyvsp[-1].macfunc).P, h01, h11, h00, h10,
2946 1.1 christos &(yyvsp[-1].macfunc).dst, op0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, w0);
2947 1.1 christos }
2948 1.1.1.2 christos #line 2949 "config/bfin-parse.c"
2949 1.1 christos break;
2950 1.1 christos
2951 1.1 christos case 10: /* asm_1: assign_macfunc opt_mode COMMA assign_macfunc opt_mode */
2952 1.1 christos #line 777 "./config/bfin-parse.y"
2953 1.1 christos {
2954 1.1 christos Register *dst;
2955 1.1 christos
2956 1.1 christos if (check_macfuncs (&(yyvsp[-4].macfunc), &(yyvsp[-3].mod), &(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
2957 1.1 christos return -1;
2958 1.1 christos notethat ("assign_macfunc (.), assign_macfunc (.)\n");
2959 1.1 christos
2960 1.1 christos if ((yyvsp[-4].macfunc).w)
2961 1.1 christos dst = &(yyvsp[-4].macfunc).dst;
2962 1.1 christos else
2963 1.1 christos dst = &(yyvsp[-1].macfunc).dst;
2964 1.1 christos
2965 1.1 christos (yyval.instr) = DSP32MAC ((yyvsp[-4].macfunc).op, (yyvsp[-3].mod).MM, (yyvsp[0].mod).mod, (yyvsp[-4].macfunc).w, (yyvsp[-4].macfunc).P,
2966 1.1 christos IS_H ((yyvsp[-4].macfunc).s0), IS_H ((yyvsp[-4].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
2967 1.1 christos dst, (yyvsp[-1].macfunc).op, &(yyvsp[-4].macfunc).s0, &(yyvsp[-4].macfunc).s1, (yyvsp[-1].macfunc).w);
2968 1.1 christos }
2969 1.1.1.2 christos #line 2970 "config/bfin-parse.c"
2970 1.1 christos break;
2971 1.1 christos
2972 1.1 christos case 11: /* asm_1: DISALGNEXCPT */
2973 1.1 christos #line 797 "./config/bfin-parse.y"
2974 1.1 christos {
2975 1.1 christos notethat ("dsp32alu: DISALGNEXCPT\n");
2976 1.1 christos (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
2977 1.1 christos }
2978 1.1.1.2 christos #line 2979 "config/bfin-parse.c"
2979 1.1 christos break;
2980 1.1 christos
2981 1.1 christos case 12: /* asm_1: REG ASSIGN LPAREN a_plusassign REG_A RPAREN */
2982 1.1 christos #line 802 "./config/bfin-parse.y"
2983 1.1 christos {
2984 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && !IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
2985 1.1 christos {
2986 1.1 christos notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
2987 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[-5].reg), ®7, ®7, 0, 0, 0);
2988 1.1 christos }
2989 1.1 christos else
2990 1.1 christos return yyerror ("Register mismatch");
2991 1.1 christos }
2992 1.1.1.2 christos #line 2993 "config/bfin-parse.c"
2993 1.1 christos break;
2994 1.1 christos
2995 1.1 christos case 13: /* asm_1: HALF_REG ASSIGN LPAREN a_plusassign REG_A RPAREN */
2996 1.1 christos #line 812 "./config/bfin-parse.y"
2997 1.1 christos {
2998 1.1 christos if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
2999 1.1 christos {
3000 1.1 christos notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
3001 1.1 christos (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), ®7, ®7, 0, 0, 1);
3002 1.1 christos }
3003 1.1 christos else
3004 1.1 christos return yyerror ("Register mismatch");
3005 1.1 christos }
3006 1.1.1.2 christos #line 3007 "config/bfin-parse.c"
3007 1.1 christos break;
3008 1.1 christos
3009 1.1 christos case 14: /* asm_1: A_ZERO_DOT_H ASSIGN HALF_REG */
3010 1.1 christos #line 822 "./config/bfin-parse.y"
3011 1.1 christos {
3012 1.1 christos notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
3013 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
3014 1.1 christos }
3015 1.1.1.2 christos #line 3016 "config/bfin-parse.c"
3016 1.1 christos break;
3017 1.1 christos
3018 1.1 christos case 15: /* asm_1: A_ONE_DOT_H ASSIGN HALF_REG */
3019 1.1 christos #line 827 "./config/bfin-parse.y"
3020 1.1 christos {
3021 1.1 christos notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
3022 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
3023 1.1 christos }
3024 1.1.1.2 christos #line 3025 "config/bfin-parse.c"
3025 1.1 christos break;
3026 1.1 christos
3027 1.1 christos case 16: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16P LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3028 1.1 christos #line 833 "./config/bfin-parse.y"
3029 1.1 christos {
3030 1.1 christos if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
3031 1.1 christos return yyerror ("Dregs expected");
3032 1.1 christos else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
3033 1.1 christos return yyerror ("Illegal dest register combination");
3034 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3035 1.1 christos return yyerror ("Bad dreg pair");
3036 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3037 1.1 christos return yyerror ("Bad dreg pair");
3038 1.1 christos else
3039 1.1 christos {
3040 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (aligndir)\n");
3041 1.1 christos (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
3042 1.1 christos }
3043 1.1 christos }
3044 1.1.1.2 christos #line 3045 "config/bfin-parse.c"
3045 1.1 christos break;
3046 1.1 christos
3047 1.1 christos case 17: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16M LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3048 1.1 christos #line 851 "./config/bfin-parse.y"
3049 1.1 christos {
3050 1.1 christos if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
3051 1.1 christos return yyerror ("Dregs expected");
3052 1.1 christos else if (REG_SAME ((yyvsp[-15].reg), (yyvsp[-13].reg)))
3053 1.1 christos return yyerror ("Illegal dest register combination");
3054 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3055 1.1 christos return yyerror ("Bad dreg pair");
3056 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3057 1.1 christos return yyerror ("Bad dreg pair");
3058 1.1 christos else
3059 1.1 christos {
3060 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
3061 1.1 christos (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 1);
3062 1.1 christos }
3063 1.1 christos }
3064 1.1.1.2 christos #line 3065 "config/bfin-parse.c"
3065 1.1 christos break;
3066 1.1 christos
3067 1.1 christos case 18: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN BYTEUNPACK REG COLON expr aligndir */
3068 1.1 christos #line 868 "./config/bfin-parse.y"
3069 1.1 christos {
3070 1.1 christos if (!IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)))
3071 1.1 christos return yyerror ("Dregs expected");
3072 1.1 christos else if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
3073 1.1 christos return yyerror ("Illegal dest register combination");
3074 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
3075 1.1 christos return yyerror ("Bad dreg pair");
3076 1.1 christos else
3077 1.1 christos {
3078 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
3079 1.1 christos (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, (yyvsp[0].r0).r0, 0, 1);
3080 1.1 christos }
3081 1.1 christos }
3082 1.1.1.2 christos #line 3083 "config/bfin-parse.c"
3083 1.1 christos break;
3084 1.1 christos
3085 1.1 christos case 19: /* asm_1: LPAREN REG COMMA REG RPAREN ASSIGN SEARCH REG LPAREN searchmod RPAREN */
3086 1.1 christos #line 882 "./config/bfin-parse.y"
3087 1.1 christos {
3088 1.1 christos if (REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg)))
3089 1.1 christos return yyerror ("Illegal dest register combination");
3090 1.1 christos
3091 1.1 christos if (IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)))
3092 1.1 christos {
3093 1.1 christos notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
3094 1.1 christos (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0, (yyvsp[-1].r0).r0);
3095 1.1 christos }
3096 1.1 christos else
3097 1.1 christos return yyerror ("Register mismatch");
3098 1.1 christos }
3099 1.1.1.2 christos #line 3100 "config/bfin-parse.c"
3100 1.1 christos break;
3101 1.1 christos
3102 1.1 christos case 20: /* asm_1: REG ASSIGN A_ONE_DOT_L PLUS A_ONE_DOT_H COMMA REG ASSIGN A_ZERO_DOT_L PLUS A_ZERO_DOT_H */
3103 1.1 christos #line 896 "./config/bfin-parse.y"
3104 1.1 christos {
3105 1.1 christos if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
3106 1.1 christos return yyerror ("Illegal dest register combination");
3107 1.1 christos
3108 1.1 christos if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-4].reg)))
3109 1.1 christos {
3110 1.1 christos notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h \n");
3111 1.1 christos (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[-10].reg), &(yyvsp[-4].reg), ®7, ®7, 0, 0, 1);
3112 1.1 christos }
3113 1.1 christos else
3114 1.1 christos return yyerror ("Register mismatch");
3115 1.1 christos }
3116 1.1.1.2 christos #line 3117 "config/bfin-parse.c"
3117 1.1 christos break;
3118 1.1 christos
3119 1.1 christos case 21: /* asm_1: REG ASSIGN REG_A PLUS REG_A COMMA REG ASSIGN REG_A MINUS REG_A amod1 */
3120 1.1 christos #line 911 "./config/bfin-parse.y"
3121 1.1 christos {
3122 1.1 christos if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
3123 1.1 christos return yyerror ("Resource conflict in dest reg");
3124 1.1 christos
3125 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3126 1.1 christos && IS_A1 ((yyvsp[-3].reg)) && !IS_A1 ((yyvsp[-1].reg)))
3127 1.1 christos {
3128 1.1 christos notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
3129 1.1 christos (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), ®7, ®7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 0);
3130 1.1 christos
3131 1.1 christos }
3132 1.1 christos else if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
3133 1.1 christos && !IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3134 1.1 christos {
3135 1.1 christos notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
3136 1.1 christos (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), ®7, ®7, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 1);
3137 1.1 christos }
3138 1.1 christos else
3139 1.1 christos return yyerror ("Register mismatch");
3140 1.1 christos }
3141 1.1.1.2 christos #line 3142 "config/bfin-parse.c"
3142 1.1 christos break;
3143 1.1 christos
3144 1.1 christos case 22: /* asm_1: REG ASSIGN REG plus_minus REG COMMA REG ASSIGN REG plus_minus REG amod1 */
3145 1.1 christos #line 933 "./config/bfin-parse.y"
3146 1.1 christos {
3147 1.1 christos if ((yyvsp[-8].r0).r0 == (yyvsp[-2].r0).r0)
3148 1.1 christos return yyerror ("Operators must differ");
3149 1.1 christos
3150 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg))
3151 1.1 christos && REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) && REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3152 1.1 christos {
3153 1.1 christos notethat ("dsp32alu: dregs = dregs + dregs,"
3154 1.1 christos "dregs = dregs - dregs (amod1)\n");
3155 1.1 christos (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 2);
3156 1.1 christos }
3157 1.1 christos else
3158 1.1 christos return yyerror ("Register mismatch");
3159 1.1 christos }
3160 1.1.1.2 christos #line 3161 "config/bfin-parse.c"
3161 1.1 christos break;
3162 1.1 christos
3163 1.1 christos case 23: /* asm_1: REG ASSIGN REG op_bar_op REG COMMA REG ASSIGN REG op_bar_op REG amod2 */
3164 1.1 christos #line 951 "./config/bfin-parse.y"
3165 1.1 christos {
3166 1.1 christos if (!REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) || !REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
3167 1.1 christos return yyerror ("Differing source registers");
3168 1.1 christos
3169 1.1 christos if (!IS_DREG ((yyvsp[-11].reg)) || !IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)) || !IS_DREG ((yyvsp[-5].reg)))
3170 1.1 christos return yyerror ("Dregs expected");
3171 1.1 christos
3172 1.1 christos if (REG_SAME ((yyvsp[-11].reg), (yyvsp[-5].reg)))
3173 1.1 christos return yyerror ("Resource conflict in dest reg");
3174 1.1 christos
3175 1.1 christos if ((yyvsp[-8].r0).r0 == 1 && (yyvsp[-2].r0).r0 == 2)
3176 1.1 christos {
3177 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3178 1.1 christos (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3179 1.1 christos }
3180 1.1 christos else if ((yyvsp[-8].r0).r0 == 0 && (yyvsp[-2].r0).r0 == 3)
3181 1.1 christos {
3182 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
3183 1.1 christos (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
3184 1.1 christos }
3185 1.1 christos else
3186 1.1 christos return yyerror ("Bar operand mismatch");
3187 1.1 christos }
3188 1.1.1.2 christos #line 3189 "config/bfin-parse.c"
3189 1.1 christos break;
3190 1.1 christos
3191 1.1 christos case 24: /* asm_1: REG ASSIGN ABS REG vmod */
3192 1.1 christos #line 976 "./config/bfin-parse.y"
3193 1.1 christos {
3194 1.1 christos int op;
3195 1.1 christos
3196 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
3197 1.1 christos {
3198 1.1 christos if ((yyvsp[0].r0).r0)
3199 1.1 christos {
3200 1.1 christos notethat ("dsp32alu: dregs = ABS dregs (v)\n");
3201 1.1 christos op = 6;
3202 1.1 christos }
3203 1.1 christos else
3204 1.1 christos {
3205 1.1 christos /* Vector version of ABS. */
3206 1.1 christos notethat ("dsp32alu: dregs = ABS dregs\n");
3207 1.1 christos op = 7;
3208 1.1 christos }
3209 1.1 christos (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, 0, 0, 2);
3210 1.1 christos }
3211 1.1 christos else
3212 1.1 christos return yyerror ("Dregs expected");
3213 1.1 christos }
3214 1.1.1.2 christos #line 3215 "config/bfin-parse.c"
3215 1.1 christos break;
3216 1.1 christos
3217 1.1 christos case 25: /* asm_1: a_assign ABS REG_A */
3218 1.1 christos #line 998 "./config/bfin-parse.y"
3219 1.1 christos {
3220 1.1 christos notethat ("dsp32alu: Ax = ABS Ax\n");
3221 1.1 christos (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[-2].reg)), 0, 0, ®7, ®7, 0, 0, IS_A1 ((yyvsp[0].reg)));
3222 1.1 christos }
3223 1.1.1.2 christos #line 3224 "config/bfin-parse.c"
3224 1.1 christos break;
3225 1.1 christos
3226 1.1 christos case 26: /* asm_1: A_ZERO_DOT_L ASSIGN HALF_REG */
3227 1.1 christos #line 1003 "./config/bfin-parse.y"
3228 1.1 christos {
3229 1.1 christos if (IS_DREG_L ((yyvsp[0].reg)))
3230 1.1 christos {
3231 1.1 christos notethat ("dsp32alu: A0.l = reg_half\n");
3232 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
3233 1.1 christos }
3234 1.1 christos else
3235 1.1 christos return yyerror ("A0.l = Rx.l expected");
3236 1.1 christos }
3237 1.1.1.2 christos #line 3238 "config/bfin-parse.c"
3238 1.1 christos break;
3239 1.1 christos
3240 1.1 christos case 27: /* asm_1: A_ONE_DOT_L ASSIGN HALF_REG */
3241 1.1 christos #line 1013 "./config/bfin-parse.y"
3242 1.1 christos {
3243 1.1 christos if (IS_DREG_L ((yyvsp[0].reg)))
3244 1.1 christos {
3245 1.1 christos notethat ("dsp32alu: A1.l = reg_half\n");
3246 1.1 christos (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
3247 1.1 christos }
3248 1.1 christos else
3249 1.1 christos return yyerror ("A1.l = Rx.l expected");
3250 1.1 christos }
3251 1.1.1.2 christos #line 3252 "config/bfin-parse.c"
3252 1.1 christos break;
3253 1.1 christos
3254 1.1 christos case 28: /* asm_1: REG ASSIGN c_align LPAREN REG COMMA REG RPAREN */
3255 1.1 christos #line 1024 "./config/bfin-parse.y"
3256 1.1 christos {
3257 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3258 1.1 christos {
3259 1.1 christos notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
3260 1.1 christos (yyval.instr) = DSP32SHIFT (13, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[-5].r0).r0, 0);
3261 1.1 christos }
3262 1.1 christos else
3263 1.1 christos return yyerror ("Dregs expected");
3264 1.1 christos }
3265 1.1.1.2 christos #line 3266 "config/bfin-parse.c"
3266 1.1 christos break;
3267 1.1 christos
3268 1.1 christos case 29: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN byteop_mod */
3269 1.1 christos #line 1035 "./config/bfin-parse.y"
3270 1.1 christos {
3271 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3272 1.1 christos return yyerror ("Dregs expected");
3273 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3274 1.1 christos return yyerror ("Bad dreg pair");
3275 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3276 1.1 christos return yyerror ("Bad dreg pair");
3277 1.1 christos else
3278 1.1 christos {
3279 1.1 christos notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3280 1.1 christos (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).r0);
3281 1.1 christos }
3282 1.1 christos }
3283 1.1.1.2 christos #line 3284 "config/bfin-parse.c"
3284 1.1 christos break;
3285 1.1 christos
3286 1.1 christos case 30: /* asm_1: REG ASSIGN BYTEOP1P LPAREN REG COLON expr COMMA REG COLON expr RPAREN */
3287 1.1 christos #line 1049 "./config/bfin-parse.y"
3288 1.1 christos {
3289 1.1 christos if (!IS_DREG ((yyvsp[-11].reg)))
3290 1.1 christos return yyerror ("Dregs expected");
3291 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-7].reg), (yyvsp[-5].expr)))
3292 1.1 christos return yyerror ("Bad dreg pair");
3293 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
3294 1.1 christos return yyerror ("Bad dreg pair");
3295 1.1 christos else
3296 1.1 christos {
3297 1.1 christos notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
3298 1.1 christos (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-11].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0);
3299 1.1 christos }
3300 1.1 christos }
3301 1.1.1.2 christos #line 3302 "config/bfin-parse.c"
3302 1.1 christos break;
3303 1.1 christos
3304 1.1 christos case 31: /* asm_1: REG ASSIGN BYTEOP2P LPAREN REG COLON expr COMMA REG COLON expr RPAREN rnd_op */
3305 1.1 christos #line 1065 "./config/bfin-parse.y"
3306 1.1 christos {
3307 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3308 1.1 christos return yyerror ("Dregs expected");
3309 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3310 1.1 christos return yyerror ("Bad dreg pair");
3311 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3312 1.1 christos return yyerror ("Bad dreg pair");
3313 1.1 christos else
3314 1.1 christos {
3315 1.1 christos notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
3316 1.1 christos (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).aop);
3317 1.1 christos }
3318 1.1 christos }
3319 1.1.1.2 christos #line 3320 "config/bfin-parse.c"
3320 1.1 christos break;
3321 1.1 christos
3322 1.1 christos case 32: /* asm_1: REG ASSIGN BYTEOP3P LPAREN REG COLON expr COMMA REG COLON expr RPAREN b3_op */
3323 1.1 christos #line 1081 "./config/bfin-parse.y"
3324 1.1 christos {
3325 1.1 christos if (!IS_DREG ((yyvsp[-12].reg)))
3326 1.1 christos return yyerror ("Dregs expected");
3327 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3328 1.1 christos return yyerror ("Bad dreg pair");
3329 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3330 1.1 christos return yyerror ("Bad dreg pair");
3331 1.1 christos else
3332 1.1 christos {
3333 1.1 christos notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
3334 1.1 christos (yyval.instr) = DSP32ALU (23, (yyvsp[0].modcodes).x0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, 0);
3335 1.1 christos }
3336 1.1 christos }
3337 1.1.1.2 christos #line 3338 "config/bfin-parse.c"
3338 1.1 christos break;
3339 1.1 christos
3340 1.1 christos case 33: /* asm_1: REG ASSIGN BYTEPACK LPAREN REG COMMA REG RPAREN */
3341 1.1 christos #line 1096 "./config/bfin-parse.y"
3342 1.1 christos {
3343 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3344 1.1 christos {
3345 1.1 christos notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
3346 1.1 christos (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[-7].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 0, 0, 0);
3347 1.1 christos }
3348 1.1 christos else
3349 1.1 christos return yyerror ("Dregs expected");
3350 1.1 christos }
3351 1.1.1.2 christos #line 3352 "config/bfin-parse.c"
3352 1.1 christos break;
3353 1.1 christos
3354 1.1 christos case 34: /* asm_1: HALF_REG ASSIGN HALF_REG ASSIGN SIGN LPAREN HALF_REG RPAREN STAR HALF_REG PLUS SIGN LPAREN HALF_REG RPAREN STAR HALF_REG */
3355 1.1 christos #line 1108 "./config/bfin-parse.y"
3356 1.1 christos {
3357 1.1 christos if (IS_HCOMPL ((yyvsp[-16].reg), (yyvsp[-14].reg)) && IS_HCOMPL ((yyvsp[-10].reg), (yyvsp[-3].reg)) && IS_HCOMPL ((yyvsp[-7].reg), (yyvsp[0].reg)))
3358 1.1 christos {
3359 1.1 christos notethat ("dsp32alu: dregs_hi = dregs_lo ="
3360 1.1 christos "SIGN (dregs_hi) * dregs_hi + "
3361 1.1 christos "SIGN (dregs_lo) * dregs_lo \n");
3362 1.1 christos
3363 1.1 christos (yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[-16].reg), &(yyvsp[-10].reg), &(yyvsp[-7].reg), 0, 0, 0);
3364 1.1 christos }
3365 1.1 christos else
3366 1.1 christos return yyerror ("Dregs expected");
3367 1.1 christos }
3368 1.1.1.2 christos #line 3369 "config/bfin-parse.c"
3369 1.1 christos break;
3370 1.1 christos
3371 1.1 christos case 35: /* asm_1: REG ASSIGN REG plus_minus REG amod1 */
3372 1.1 christos #line 1121 "./config/bfin-parse.y"
3373 1.1 christos {
3374 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3375 1.1 christos {
3376 1.1 christos if ((yyvsp[0].modcodes).aop == 0)
3377 1.1 christos {
3378 1.1 christos /* No saturation flag specified, generate the 16 bit variant. */
3379 1.1 christos notethat ("COMP3op: dregs = dregs +- dregs\n");
3380 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[-2].r0).r0);
3381 1.1 christos }
3382 1.1 christos else
3383 1.1 christos {
3384 1.1 christos /* Saturation flag specified, generate the 32 bit variant. */
3385 1.1 christos notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
3386 1.1 christos (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3387 1.1 christos }
3388 1.1 christos }
3389 1.1 christos else
3390 1.1 christos if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)) && (yyvsp[-2].r0).r0 == 0)
3391 1.1 christos {
3392 1.1 christos notethat ("COMP3op: pregs = pregs + pregs\n");
3393 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 5);
3394 1.1 christos }
3395 1.1 christos else
3396 1.1 christos return yyerror ("Dregs expected");
3397 1.1 christos }
3398 1.1.1.2 christos #line 3399 "config/bfin-parse.c"
3399 1.1 christos break;
3400 1.1 christos
3401 1.1 christos case 36: /* asm_1: REG ASSIGN min_max LPAREN REG COMMA REG RPAREN vmod */
3402 1.1 christos #line 1147 "./config/bfin-parse.y"
3403 1.1 christos {
3404 1.1 christos int op;
3405 1.1 christos
3406 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
3407 1.1 christos {
3408 1.1 christos if ((yyvsp[0].r0).r0)
3409 1.1 christos op = 6;
3410 1.1 christos else
3411 1.1 christos op = 7;
3412 1.1 christos
3413 1.1 christos notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
3414 1.1 christos (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), &(yyvsp[-2].reg), 0, 0, (yyvsp[-6].r0).r0);
3415 1.1 christos }
3416 1.1 christos else
3417 1.1 christos return yyerror ("Dregs expected");
3418 1.1 christos }
3419 1.1.1.2 christos #line 3420 "config/bfin-parse.c"
3420 1.1 christos break;
3421 1.1 christos
3422 1.1 christos case 37: /* asm_1: a_assign MINUS REG_A */
3423 1.1 christos #line 1165 "./config/bfin-parse.y"
3424 1.1 christos {
3425 1.1 christos notethat ("dsp32alu: Ax = - Ax\n");
3426 1.1 christos (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[-2].reg)), 0, 0, ®7, ®7, 0, 0, IS_A1 ((yyvsp[0].reg)));
3427 1.1 christos }
3428 1.1.1.2 christos #line 3429 "config/bfin-parse.c"
3429 1.1 christos break;
3430 1.1 christos
3431 1.1 christos case 38: /* asm_1: HALF_REG ASSIGN HALF_REG plus_minus HALF_REG amod1 */
3432 1.1 christos #line 1170 "./config/bfin-parse.y"
3433 1.1 christos {
3434 1.1 christos notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
3435 1.1 christos (yyval.instr) = DSP32ALU (2 | (yyvsp[-2].r0).r0, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg),
3436 1.1 christos (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)));
3437 1.1 christos }
3438 1.1.1.2 christos #line 3439 "config/bfin-parse.c"
3439 1.1 christos break;
3440 1.1 christos
3441 1.1 christos case 39: /* asm_1: a_assign a_assign expr */
3442 1.1 christos #line 1176 "./config/bfin-parse.y"
3443 1.1 christos {
3444 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 0 && !REG_SAME ((yyvsp[-2].reg), (yyvsp[-1].reg)))
3445 1.1 christos {
3446 1.1 christos notethat ("dsp32alu: A1 = A0 = 0\n");
3447 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 0, 0, 2);
3448 1.1 christos }
3449 1.1 christos else
3450 1.1 christos return yyerror ("Bad value, 0 expected");
3451 1.1 christos }
3452 1.1.1.2 christos #line 3453 "config/bfin-parse.c"
3453 1.1 christos break;
3454 1.1 christos
3455 1.1 christos case 40: /* asm_1: a_assign REG_A LPAREN S RPAREN */
3456 1.1 christos #line 1188 "./config/bfin-parse.y"
3457 1.1 christos {
3458 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)))
3459 1.1 christos {
3460 1.1 christos notethat ("dsp32alu: Ax = Ax (S)\n");
3461 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 1, 0, IS_A1 ((yyvsp[-4].reg)));
3462 1.1 christos }
3463 1.1 christos else
3464 1.1 christos return yyerror ("Registers must be equal");
3465 1.1 christos }
3466 1.1.1.2 christos #line 3467 "config/bfin-parse.c"
3467 1.1 christos break;
3468 1.1 christos
3469 1.1 christos case 41: /* asm_1: HALF_REG ASSIGN REG LPAREN RND RPAREN */
3470 1.1 christos #line 1199 "./config/bfin-parse.y"
3471 1.1 christos {
3472 1.1 christos if (IS_DREG ((yyvsp[-3].reg)))
3473 1.1 christos {
3474 1.1 christos notethat ("dsp32alu: dregs_half = dregs (RND)\n");
3475 1.1 christos (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, 0, 3);
3476 1.1 christos }
3477 1.1 christos else
3478 1.1 christos return yyerror ("Dregs expected");
3479 1.1 christos }
3480 1.1.1.2 christos #line 3481 "config/bfin-parse.c"
3481 1.1 christos break;
3482 1.1 christos
3483 1.1 christos case 42: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND12 RPAREN */
3484 1.1 christos #line 1210 "./config/bfin-parse.y"
3485 1.1 christos {
3486 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3487 1.1 christos {
3488 1.1 christos notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
3489 1.1 christos (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, (yyvsp[-4].r0).r0);
3490 1.1 christos }
3491 1.1 christos else
3492 1.1 christos return yyerror ("Dregs expected");
3493 1.1 christos }
3494 1.1.1.2 christos #line 3495 "config/bfin-parse.c"
3495 1.1 christos break;
3496 1.1 christos
3497 1.1 christos case 43: /* asm_1: HALF_REG ASSIGN REG plus_minus REG LPAREN RND20 RPAREN */
3498 1.1 christos #line 1221 "./config/bfin-parse.y"
3499 1.1 christos {
3500 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
3501 1.1 christos {
3502 1.1 christos notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
3503 1.1 christos (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1, (yyvsp[-4].r0).r0 | 2);
3504 1.1 christos }
3505 1.1 christos else
3506 1.1 christos return yyerror ("Dregs expected");
3507 1.1 christos }
3508 1.1.1.2 christos #line 3509 "config/bfin-parse.c"
3509 1.1 christos break;
3510 1.1 christos
3511 1.1 christos case 44: /* asm_1: a_assign REG_A */
3512 1.1 christos #line 1232 "./config/bfin-parse.y"
3513 1.1 christos {
3514 1.1 christos if (!REG_SAME ((yyvsp[-1].reg), (yyvsp[0].reg)))
3515 1.1 christos {
3516 1.1 christos notethat ("dsp32alu: An = Am\n");
3517 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, IS_A1 ((yyvsp[-1].reg)), 0, 3);
3518 1.1 christos }
3519 1.1 christos else
3520 1.1 christos return yyerror ("Accu reg arguments must differ");
3521 1.1 christos }
3522 1.1.1.2 christos #line 3523 "config/bfin-parse.c"
3523 1.1 christos break;
3524 1.1 christos
3525 1.1 christos case 45: /* asm_1: a_assign REG */
3526 1.1 christos #line 1243 "./config/bfin-parse.y"
3527 1.1 christos {
3528 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
3529 1.1 christos {
3530 1.1 christos notethat ("dsp32alu: An = dregs\n");
3531 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[0].reg), 0, 1, 0, IS_A1 ((yyvsp[-1].reg)) << 1);
3532 1.1 christos }
3533 1.1 christos else
3534 1.1 christos return yyerror ("Dregs expected");
3535 1.1 christos }
3536 1.1.1.2 christos #line 3537 "config/bfin-parse.c"
3537 1.1 christos break;
3538 1.1 christos
3539 1.1 christos case 46: /* asm_1: REG ASSIGN HALF_REG xpmod */
3540 1.1 christos #line 1254 "./config/bfin-parse.y"
3541 1.1 christos {
3542 1.1 christos if (!IS_H ((yyvsp[-1].reg)))
3543 1.1 christos {
3544 1.1 christos if ((yyvsp[-3].reg).regno == REG_A0x && IS_DREG ((yyvsp[-1].reg)))
3545 1.1 christos {
3546 1.1 christos notethat ("dsp32alu: A0.x = dregs_lo\n");
3547 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 1);
3548 1.1 christos }
3549 1.1 christos else if ((yyvsp[-3].reg).regno == REG_A1x && IS_DREG ((yyvsp[-1].reg)))
3550 1.1 christos {
3551 1.1 christos notethat ("dsp32alu: A1.x = dregs_lo\n");
3552 1.1 christos (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 3);
3553 1.1 christos }
3554 1.1 christos else if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3555 1.1 christos {
3556 1.1 christos notethat ("ALU2op: dregs = dregs_lo\n");
3557 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 10 | ((yyvsp[0].r0).r0 ? 0: 1));
3558 1.1 christos }
3559 1.1 christos else
3560 1.1 christos return yyerror ("Register mismatch");
3561 1.1 christos }
3562 1.1 christos else
3563 1.1 christos return yyerror ("Low reg expected");
3564 1.1 christos }
3565 1.1.1.2 christos #line 3566 "config/bfin-parse.c"
3566 1.1 christos break;
3567 1.1 christos
3568 1.1 christos case 47: /* asm_1: HALF_REG ASSIGN expr */
3569 1.1 christos #line 1280 "./config/bfin-parse.y"
3570 1.1 christos {
3571 1.1 christos notethat ("LDIMMhalf: pregs_half = imm16\n");
3572 1.1 christos
3573 1.1 christos if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)) && !IS_IREG ((yyvsp[-2].reg))
3574 1.1 christos && !IS_MREG ((yyvsp[-2].reg)) && !IS_BREG ((yyvsp[-2].reg)) && !IS_LREG ((yyvsp[-2].reg)))
3575 1.1 christos return yyerror ("Wrong register for load immediate");
3576 1.1 christos
3577 1.1 christos if (!IS_IMM ((yyvsp[0].expr), 16) && !IS_UIMM ((yyvsp[0].expr), 16))
3578 1.1 christos return yyerror ("Constant out of range");
3579 1.1 christos
3580 1.1 christos (yyval.instr) = LDIMMHALF_R (&(yyvsp[-2].reg), IS_H ((yyvsp[-2].reg)), 0, 0, (yyvsp[0].expr));
3581 1.1 christos }
3582 1.1.1.2 christos #line 3583 "config/bfin-parse.c"
3583 1.1 christos break;
3584 1.1 christos
3585 1.1 christos case 48: /* asm_1: a_assign expr */
3586 1.1 christos #line 1294 "./config/bfin-parse.y"
3587 1.1 christos {
3588 1.1 christos notethat ("dsp32alu: An = 0\n");
3589 1.1 christos
3590 1.1 christos if (imm7 ((yyvsp[0].expr)) != 0)
3591 1.1 christos return yyerror ("0 expected");
3592 1.1 christos
3593 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)));
3594 1.1 christos }
3595 1.1.1.2 christos #line 3596 "config/bfin-parse.c"
3596 1.1 christos break;
3597 1.1 christos
3598 1.1 christos case 49: /* asm_1: REG ASSIGN expr xpmod1 */
3599 1.1 christos #line 1304 "./config/bfin-parse.y"
3600 1.1 christos {
3601 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)) && !IS_IREG ((yyvsp[-3].reg))
3602 1.1 christos && !IS_MREG ((yyvsp[-3].reg)) && !IS_BREG ((yyvsp[-3].reg)) && !IS_LREG ((yyvsp[-3].reg)))
3603 1.1 christos return yyerror ("Wrong register for load immediate");
3604 1.1 christos
3605 1.1 christos if ((yyvsp[0].r0).r0 == 0)
3606 1.1 christos {
3607 1.1 christos /* 7 bit immediate value if possible.
3608 1.1 christos We will check for that constant value for efficiency
3609 1.1 christos If it goes to reloc, it will be 16 bit. */
3610 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_DREG ((yyvsp[-3].reg)))
3611 1.1 christos {
3612 1.1 christos notethat ("COMPI2opD: dregs = imm7 (x) \n");
3613 1.1 christos (yyval.instr) = COMPI2OPD (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3614 1.1 christos }
3615 1.1 christos else if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_PREG ((yyvsp[-3].reg)))
3616 1.1 christos {
3617 1.1 christos notethat ("COMPI2opP: pregs = imm7 (x)\n");
3618 1.1 christos (yyval.instr) = COMPI2OPP (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
3619 1.1 christos }
3620 1.1 christos else
3621 1.1 christos {
3622 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && !IS_IMM ((yyvsp[-1].expr), 16))
3623 1.1 christos return yyerror ("Immediate value out of range");
3624 1.1 christos
3625 1.1 christos notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3626 1.1 christos /* reg, H, S, Z. */
3627 1.1 christos (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 1, 0, (yyvsp[-1].expr));
3628 1.1 christos }
3629 1.1 christos }
3630 1.1 christos else
3631 1.1 christos {
3632 1.1 christos /* (z) There is no 7 bit zero extended instruction.
3633 1.1 christos If the expr is a relocation, generate it. */
3634 1.1 christos
3635 1.1 christos if (IS_CONST ((yyvsp[-1].expr)) && !IS_UIMM ((yyvsp[-1].expr), 16))
3636 1.1 christos return yyerror ("Immediate value out of range");
3637 1.1 christos
3638 1.1 christos notethat ("LDIMMhalf: regs = luimm16 (x)\n");
3639 1.1 christos /* reg, H, S, Z. */
3640 1.1 christos (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 0, 1, (yyvsp[-1].expr));
3641 1.1 christos }
3642 1.1 christos }
3643 1.1.1.2 christos #line 3644 "config/bfin-parse.c"
3644 1.1 christos break;
3645 1.1 christos
3646 1.1 christos case 50: /* asm_1: HALF_REG ASSIGN REG */
3647 1.1 christos #line 1349 "./config/bfin-parse.y"
3648 1.1 christos {
3649 1.1 christos if (IS_H ((yyvsp[-2].reg)))
3650 1.1 christos return yyerror ("Low reg expected");
3651 1.1 christos
3652 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A0x)
3653 1.1 christos {
3654 1.1 christos notethat ("dsp32alu: dregs_lo = A0.x\n");
3655 1.1 christos (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), ®7, ®7, 0, 0, 0);
3656 1.1 christos }
3657 1.1 christos else if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A1x)
3658 1.1 christos {
3659 1.1 christos notethat ("dsp32alu: dregs_lo = A1.x\n");
3660 1.1 christos (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), ®7, ®7, 0, 0, 1);
3661 1.1 christos }
3662 1.1 christos else
3663 1.1 christos return yyerror ("Register mismatch");
3664 1.1 christos }
3665 1.1.1.2 christos #line 3666 "config/bfin-parse.c"
3666 1.1 christos break;
3667 1.1 christos
3668 1.1 christos case 51: /* asm_1: REG ASSIGN REG op_bar_op REG amod0 */
3669 1.1 christos #line 1368 "./config/bfin-parse.y"
3670 1.1 christos {
3671 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3672 1.1 christos {
3673 1.1 christos notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
3674 1.1 christos (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
3675 1.1 christos }
3676 1.1 christos else
3677 1.1 christos return yyerror ("Register mismatch");
3678 1.1 christos }
3679 1.1.1.2 christos #line 3680 "config/bfin-parse.c"
3680 1.1 christos break;
3681 1.1 christos
3682 1.1 christos case 52: /* asm_1: REG ASSIGN BYTE_DREG xpmod */
3683 1.1 christos #line 1379 "./config/bfin-parse.y"
3684 1.1 christos {
3685 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
3686 1.1 christos {
3687 1.1 christos notethat ("ALU2op: dregs = dregs_byte\n");
3688 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 12 | ((yyvsp[0].r0).r0 ? 0: 1));
3689 1.1 christos }
3690 1.1 christos else
3691 1.1 christos return yyerror ("Register mismatch");
3692 1.1 christos }
3693 1.1.1.2 christos #line 3694 "config/bfin-parse.c"
3694 1.1 christos break;
3695 1.1 christos
3696 1.1 christos case 53: /* asm_1: a_assign ABS REG_A COMMA a_assign ABS REG_A */
3697 1.1 christos #line 1390 "./config/bfin-parse.y"
3698 1.1 christos {
3699 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3700 1.1 christos {
3701 1.1 christos notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
3702 1.1 christos (yyval.instr) = DSP32ALU (16, 0, 0, 0, ®7, ®7, 0, 0, 3);
3703 1.1 christos }
3704 1.1 christos else
3705 1.1 christos return yyerror ("Register mismatch");
3706 1.1 christos }
3707 1.1.1.2 christos #line 3708 "config/bfin-parse.c"
3708 1.1 christos break;
3709 1.1 christos
3710 1.1 christos case 54: /* asm_1: a_assign MINUS REG_A COMMA a_assign MINUS REG_A */
3711 1.1 christos #line 1401 "./config/bfin-parse.y"
3712 1.1 christos {
3713 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
3714 1.1 christos {
3715 1.1 christos notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
3716 1.1 christos (yyval.instr) = DSP32ALU (14, 0, 0, 0, ®7, ®7, 0, 0, 3);
3717 1.1 christos }
3718 1.1 christos else
3719 1.1 christos return yyerror ("Register mismatch");
3720 1.1 christos }
3721 1.1.1.2 christos #line 3722 "config/bfin-parse.c"
3722 1.1 christos break;
3723 1.1 christos
3724 1.1 christos case 55: /* asm_1: a_minusassign REG_A w32_or_nothing */
3725 1.1 christos #line 1412 "./config/bfin-parse.y"
3726 1.1 christos {
3727 1.1 christos if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
3728 1.1 christos {
3729 1.1 christos notethat ("dsp32alu: A0 -= A1\n");
3730 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, 0, ®7, ®7, (yyvsp[0].r0).r0, 0, 3);
3731 1.1 christos }
3732 1.1 christos else
3733 1.1 christos return yyerror ("Register mismatch");
3734 1.1 christos }
3735 1.1.1.2 christos #line 3736 "config/bfin-parse.c"
3736 1.1 christos break;
3737 1.1 christos
3738 1.1 christos case 56: /* asm_1: REG _MINUS_ASSIGN expr */
3739 1.1 christos #line 1423 "./config/bfin-parse.y"
3740 1.1 christos {
3741 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 4)
3742 1.1 christos {
3743 1.1 christos notethat ("dagMODik: iregs -= 4\n");
3744 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 3);
3745 1.1 christos }
3746 1.1 christos else if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 2)
3747 1.1 christos {
3748 1.1 christos notethat ("dagMODik: iregs -= 2\n");
3749 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 1);
3750 1.1 christos }
3751 1.1 christos else
3752 1.1 christos return yyerror ("Register or value mismatch");
3753 1.1 christos }
3754 1.1.1.2 christos #line 3755 "config/bfin-parse.c"
3755 1.1 christos break;
3756 1.1 christos
3757 1.1 christos case 57: /* asm_1: REG _PLUS_ASSIGN REG LPAREN BREV RPAREN */
3758 1.1 christos #line 1439 "./config/bfin-parse.y"
3759 1.1 christos {
3760 1.1 christos if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
3761 1.1 christos {
3762 1.1 christos notethat ("dagMODim: iregs += mregs (opt_brev)\n");
3763 1.1 christos /* i, m, op, br. */
3764 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1);
3765 1.1 christos }
3766 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
3767 1.1 christos {
3768 1.1 christos notethat ("PTR2op: pregs += pregs (BREV )\n");
3769 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 5);
3770 1.1 christos }
3771 1.1 christos else
3772 1.1 christos return yyerror ("Register mismatch");
3773 1.1 christos }
3774 1.1.1.2 christos #line 3775 "config/bfin-parse.c"
3775 1.1 christos break;
3776 1.1 christos
3777 1.1 christos case 58: /* asm_1: REG _MINUS_ASSIGN REG */
3778 1.1 christos #line 1456 "./config/bfin-parse.y"
3779 1.1 christos {
3780 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3781 1.1 christos {
3782 1.1 christos notethat ("dagMODim: iregs -= mregs\n");
3783 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1, 0);
3784 1.1 christos }
3785 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg)))
3786 1.1 christos {
3787 1.1 christos notethat ("PTR2op: pregs -= pregs\n");
3788 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
3789 1.1 christos }
3790 1.1 christos else
3791 1.1 christos return yyerror ("Register mismatch");
3792 1.1 christos }
3793 1.1.1.2 christos #line 3794 "config/bfin-parse.c"
3794 1.1 christos break;
3795 1.1 christos
3796 1.1 christos case 59: /* asm_1: REG_A _PLUS_ASSIGN REG_A w32_or_nothing */
3797 1.1 christos #line 1472 "./config/bfin-parse.y"
3798 1.1 christos {
3799 1.1 christos if (!IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
3800 1.1 christos {
3801 1.1 christos notethat ("dsp32alu: A0 += A1 (W32)\n");
3802 1.1 christos (yyval.instr) = DSP32ALU (11, 0, 0, 0, ®7, ®7, (yyvsp[0].r0).r0, 0, 2);
3803 1.1 christos }
3804 1.1 christos else
3805 1.1 christos return yyerror ("Register mismatch");
3806 1.1 christos }
3807 1.1.1.2 christos #line 3808 "config/bfin-parse.c"
3808 1.1 christos break;
3809 1.1 christos
3810 1.1 christos case 60: /* asm_1: REG _PLUS_ASSIGN REG */
3811 1.1 christos #line 1483 "./config/bfin-parse.y"
3812 1.1 christos {
3813 1.1 christos if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
3814 1.1 christos {
3815 1.1 christos notethat ("dagMODim: iregs += mregs\n");
3816 1.1 christos (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0, 0);
3817 1.1 christos }
3818 1.1 christos else
3819 1.1 christos return yyerror ("iregs += mregs expected");
3820 1.1 christos }
3821 1.1.1.2 christos #line 3822 "config/bfin-parse.c"
3822 1.1 christos break;
3823 1.1 christos
3824 1.1 christos case 61: /* asm_1: REG _PLUS_ASSIGN expr */
3825 1.1 christos #line 1494 "./config/bfin-parse.y"
3826 1.1 christos {
3827 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
3828 1.1 christos {
3829 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 4)
3830 1.1 christos {
3831 1.1 christos notethat ("dagMODik: iregs += 4\n");
3832 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 2);
3833 1.1 christos }
3834 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3835 1.1 christos {
3836 1.1 christos notethat ("dagMODik: iregs += 2\n");
3837 1.1 christos (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 0);
3838 1.1 christos }
3839 1.1 christos else
3840 1.1 christos return yyerror ("iregs += [ 2 | 4 ");
3841 1.1 christos }
3842 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3843 1.1 christos {
3844 1.1 christos notethat ("COMPI2opP: pregs += imm7\n");
3845 1.1 christos (yyval.instr) = COMPI2OPP (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3846 1.1 christos }
3847 1.1 christos else if (IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
3848 1.1 christos {
3849 1.1 christos notethat ("COMPI2opD: dregs += imm7\n");
3850 1.1 christos (yyval.instr) = COMPI2OPD (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
3851 1.1 christos }
3852 1.1 christos else if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))) && IS_CONST ((yyvsp[0].expr)))
3853 1.1 christos return yyerror ("Immediate value out of range");
3854 1.1 christos else
3855 1.1 christos return yyerror ("Register mismatch");
3856 1.1 christos }
3857 1.1.1.2 christos #line 3858 "config/bfin-parse.c"
3858 1.1 christos break;
3859 1.1 christos
3860 1.1 christos case 62: /* asm_1: REG _STAR_ASSIGN REG */
3861 1.1 christos #line 1527 "./config/bfin-parse.y"
3862 1.1 christos {
3863 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3864 1.1 christos {
3865 1.1 christos notethat ("ALU2op: dregs *= dregs\n");
3866 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3867 1.1 christos }
3868 1.1 christos else
3869 1.1 christos return yyerror ("Register mismatch");
3870 1.1 christos }
3871 1.1.1.2 christos #line 3872 "config/bfin-parse.c"
3872 1.1 christos break;
3873 1.1 christos
3874 1.1 christos case 63: /* asm_1: SAA LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir */
3875 1.1 christos #line 1538 "./config/bfin-parse.y"
3876 1.1 christos {
3877 1.1 christos if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
3878 1.1 christos return yyerror ("Bad dreg pair");
3879 1.1 christos else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
3880 1.1 christos return yyerror ("Bad dreg pair");
3881 1.1 christos else
3882 1.1 christos {
3883 1.1 christos notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
3884 1.1 christos (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
3885 1.1 christos }
3886 1.1 christos }
3887 1.1.1.2 christos #line 3888 "config/bfin-parse.c"
3888 1.1 christos break;
3889 1.1 christos
3890 1.1 christos case 64: /* asm_1: a_assign REG_A LPAREN S RPAREN COMMA a_assign REG_A LPAREN S RPAREN */
3891 1.1 christos #line 1551 "./config/bfin-parse.y"
3892 1.1 christos {
3893 1.1 christos if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-9].reg)) && REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)) && !REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
3894 1.1 christos {
3895 1.1 christos notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
3896 1.1 christos (yyval.instr) = DSP32ALU (8, 0, 0, 0, ®7, ®7, 1, 0, 2);
3897 1.1 christos }
3898 1.1 christos else
3899 1.1 christos return yyerror ("Register mismatch");
3900 1.1 christos }
3901 1.1.1.2 christos #line 3902 "config/bfin-parse.c"
3902 1.1 christos break;
3903 1.1 christos
3904 1.1 christos case 65: /* asm_1: REG ASSIGN LPAREN REG PLUS REG RPAREN LESS_LESS expr */
3905 1.1 christos #line 1562 "./config/bfin-parse.y"
3906 1.1 christos {
3907 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg))
3908 1.1 christos && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3909 1.1 christos {
3910 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3911 1.1 christos {
3912 1.1 christos notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
3913 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 4);
3914 1.1 christos }
3915 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3916 1.1 christos {
3917 1.1 christos notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
3918 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 5);
3919 1.1 christos }
3920 1.1 christos else
3921 1.1 christos return yyerror ("Bad shift value");
3922 1.1 christos }
3923 1.1 christos else if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg))
3924 1.1 christos && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
3925 1.1 christos {
3926 1.1 christos if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
3927 1.1 christos {
3928 1.1 christos notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
3929 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 6);
3930 1.1 christos }
3931 1.1 christos else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
3932 1.1 christos {
3933 1.1 christos notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
3934 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 7);
3935 1.1 christos }
3936 1.1 christos else
3937 1.1 christos return yyerror ("Bad shift value");
3938 1.1 christos }
3939 1.1 christos else
3940 1.1 christos return yyerror ("Register mismatch");
3941 1.1 christos }
3942 1.1.1.2 christos #line 3943 "config/bfin-parse.c"
3943 1.1 christos break;
3944 1.1 christos
3945 1.1 christos case 66: /* asm_1: REG ASSIGN REG BAR REG */
3946 1.1 christos #line 1601 "./config/bfin-parse.y"
3947 1.1 christos {
3948 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3949 1.1 christos {
3950 1.1 christos notethat ("COMP3op: dregs = dregs | dregs\n");
3951 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
3952 1.1 christos }
3953 1.1 christos else
3954 1.1 christos return yyerror ("Dregs expected");
3955 1.1 christos }
3956 1.1.1.2 christos #line 3957 "config/bfin-parse.c"
3957 1.1 christos break;
3958 1.1 christos
3959 1.1 christos case 67: /* asm_1: REG ASSIGN REG CARET REG */
3960 1.1 christos #line 1611 "./config/bfin-parse.y"
3961 1.1 christos {
3962 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
3963 1.1 christos {
3964 1.1 christos notethat ("COMP3op: dregs = dregs ^ dregs\n");
3965 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 4);
3966 1.1 christos }
3967 1.1 christos else
3968 1.1 christos return yyerror ("Dregs expected");
3969 1.1 christos }
3970 1.1.1.2 christos #line 3971 "config/bfin-parse.c"
3971 1.1 christos break;
3972 1.1 christos
3973 1.1 christos case 68: /* asm_1: REG ASSIGN REG PLUS LPAREN REG LESS_LESS expr RPAREN */
3974 1.1 christos #line 1621 "./config/bfin-parse.y"
3975 1.1 christos {
3976 1.1 christos if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)))
3977 1.1 christos {
3978 1.1 christos if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
3979 1.1 christos {
3980 1.1 christos notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
3981 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 6);
3982 1.1 christos }
3983 1.1 christos else if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
3984 1.1 christos {
3985 1.1 christos notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
3986 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 7);
3987 1.1 christos }
3988 1.1 christos else
3989 1.1 christos return yyerror ("Bad shift value");
3990 1.1 christos }
3991 1.1 christos else
3992 1.1 christos return yyerror ("Dregs expected");
3993 1.1 christos }
3994 1.1.1.2 christos #line 3995 "config/bfin-parse.c"
3995 1.1 christos break;
3996 1.1 christos
3997 1.1 christos case 69: /* asm_1: CCREG ASSIGN REG_A _ASSIGN_ASSIGN REG_A */
3998 1.1 christos #line 1641 "./config/bfin-parse.y"
3999 1.1 christos {
4000 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4001 1.1 christos {
4002 1.1 christos notethat ("CCflag: CC = A0 == A1\n");
4003 1.1 christos (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
4004 1.1 christos }
4005 1.1 christos else
4006 1.1 christos return yyerror ("AREGs are in bad order or same");
4007 1.1 christos }
4008 1.1.1.2 christos #line 4009 "config/bfin-parse.c"
4009 1.1 christos break;
4010 1.1 christos
4011 1.1 christos case 70: /* asm_1: CCREG ASSIGN REG_A LESS_THAN REG_A */
4012 1.1 christos #line 1651 "./config/bfin-parse.y"
4013 1.1 christos {
4014 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4015 1.1 christos {
4016 1.1 christos notethat ("CCflag: CC = A0 < A1\n");
4017 1.1 christos (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
4018 1.1 christos }
4019 1.1 christos else
4020 1.1 christos return yyerror ("AREGs are in bad order or same");
4021 1.1 christos }
4022 1.1.1.2 christos #line 4023 "config/bfin-parse.c"
4023 1.1 christos break;
4024 1.1 christos
4025 1.1 christos case 71: /* asm_1: CCREG ASSIGN REG LESS_THAN REG iu_or_nothing */
4026 1.1 christos #line 1661 "./config/bfin-parse.y"
4027 1.1 christos {
4028 1.1 christos if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4029 1.1 christos || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
4030 1.1 christos {
4031 1.1 christos notethat ("CCflag: CC = dpregs < dpregs\n");
4032 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4033 1.1 christos }
4034 1.1 christos else
4035 1.1 christos return yyerror ("Bad register in comparison");
4036 1.1 christos }
4037 1.1.1.2 christos #line 4038 "config/bfin-parse.c"
4038 1.1 christos break;
4039 1.1 christos
4040 1.1 christos case 72: /* asm_1: CCREG ASSIGN REG LESS_THAN expr iu_or_nothing */
4041 1.1 christos #line 1672 "./config/bfin-parse.y"
4042 1.1 christos {
4043 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
4044 1.1 christos return yyerror ("Bad register in comparison");
4045 1.1 christos
4046 1.1 christos if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
4047 1.1 christos || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
4048 1.1 christos {
4049 1.1 christos notethat ("CCflag: CC = dpregs < (u)imm3\n");
4050 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4051 1.1 christos }
4052 1.1 christos else
4053 1.1 christos return yyerror ("Bad constant value");
4054 1.1 christos }
4055 1.1.1.2 christos #line 4056 "config/bfin-parse.c"
4056 1.1 christos break;
4057 1.1 christos
4058 1.1 christos case 73: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN REG */
4059 1.1 christos #line 1686 "./config/bfin-parse.y"
4060 1.1 christos {
4061 1.1 christos if ((IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
4062 1.1 christos || (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg))))
4063 1.1 christos {
4064 1.1 christos notethat ("CCflag: CC = dpregs == dpregs\n");
4065 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), (yyvsp[0].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
4066 1.1 christos }
4067 1.1 christos else
4068 1.1 christos return yyerror ("Bad register in comparison");
4069 1.1 christos }
4070 1.1.1.2 christos #line 4071 "config/bfin-parse.c"
4071 1.1 christos break;
4072 1.1 christos
4073 1.1 christos case 74: /* asm_1: CCREG ASSIGN REG _ASSIGN_ASSIGN expr */
4074 1.1 christos #line 1697 "./config/bfin-parse.y"
4075 1.1 christos {
4076 1.1 christos if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
4077 1.1 christos return yyerror ("Bad register in comparison");
4078 1.1 christos
4079 1.1 christos if (IS_IMM ((yyvsp[0].expr), 3))
4080 1.1 christos {
4081 1.1 christos notethat ("CCflag: CC = dpregs == imm3\n");
4082 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), imm3 ((yyvsp[0].expr)), 0, 1, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
4083 1.1 christos }
4084 1.1 christos else
4085 1.1 christos return yyerror ("Bad constant range");
4086 1.1 christos }
4087 1.1.1.2 christos #line 4088 "config/bfin-parse.c"
4088 1.1 christos break;
4089 1.1 christos
4090 1.1 christos case 75: /* asm_1: CCREG ASSIGN REG_A _LESS_THAN_ASSIGN REG_A */
4091 1.1 christos #line 1710 "./config/bfin-parse.y"
4092 1.1 christos {
4093 1.1 christos if ((yyvsp[-2].reg).regno == REG_A0 && (yyvsp[0].reg).regno == REG_A1)
4094 1.1 christos {
4095 1.1 christos notethat ("CCflag: CC = A0 <= A1\n");
4096 1.1 christos (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
4097 1.1 christos }
4098 1.1 christos else
4099 1.1 christos return yyerror ("AREGs are in bad order or same");
4100 1.1 christos }
4101 1.1.1.2 christos #line 4102 "config/bfin-parse.c"
4102 1.1 christos break;
4103 1.1 christos
4104 1.1 christos case 76: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN REG iu_or_nothing */
4105 1.1 christos #line 1720 "./config/bfin-parse.y"
4106 1.1 christos {
4107 1.1 christos if ((IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4108 1.1 christos || (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg))))
4109 1.1 christos {
4110 1.1 christos notethat ("CCflag: CC = dpregs <= dpregs (..)\n");
4111 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK,
4112 1.1 christos 1 + (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4113 1.1 christos }
4114 1.1 christos else
4115 1.1 christos return yyerror ("Bad register in comparison");
4116 1.1 christos }
4117 1.1.1.2 christos #line 4118 "config/bfin-parse.c"
4118 1.1 christos break;
4119 1.1 christos
4120 1.1 christos case 77: /* asm_1: CCREG ASSIGN REG _LESS_THAN_ASSIGN expr iu_or_nothing */
4121 1.1 christos #line 1732 "./config/bfin-parse.y"
4122 1.1 christos {
4123 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)))
4124 1.1 christos return yyerror ("Bad register in comparison");
4125 1.1 christos
4126 1.1 christos if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
4127 1.1 christos || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
4128 1.1 christos {
4129 1.1 christos notethat ("CCflag: CC = dpregs <= (u)imm3\n");
4130 1.1 christos (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
4131 1.1 christos }
4132 1.1 christos else
4133 1.1 christos return yyerror ("Bad constant value");
4134 1.1 christos }
4135 1.1.1.2 christos #line 4136 "config/bfin-parse.c"
4136 1.1 christos break;
4137 1.1 christos
4138 1.1 christos case 78: /* asm_1: REG ASSIGN REG AMPERSAND REG */
4139 1.1 christos #line 1747 "./config/bfin-parse.y"
4140 1.1 christos {
4141 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
4142 1.1 christos {
4143 1.1 christos notethat ("COMP3op: dregs = dregs & dregs\n");
4144 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
4145 1.1 christos }
4146 1.1 christos else
4147 1.1 christos return yyerror ("Dregs expected");
4148 1.1 christos }
4149 1.1.1.2 christos #line 4150 "config/bfin-parse.c"
4150 1.1 christos break;
4151 1.1 christos
4152 1.1 christos case 79: /* asm_1: ccstat */
4153 1.1 christos #line 1758 "./config/bfin-parse.y"
4154 1.1 christos {
4155 1.1 christos notethat ("CC2stat operation\n");
4156 1.1 christos (yyval.instr) = bfin_gen_cc2stat ((yyvsp[0].modcodes).r0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).s0);
4157 1.1 christos }
4158 1.1.1.2 christos #line 4159 "config/bfin-parse.c"
4159 1.1 christos break;
4160 1.1 christos
4161 1.1 christos case 80: /* asm_1: REG ASSIGN REG */
4162 1.1 christos #line 1764 "./config/bfin-parse.y"
4163 1.1 christos {
4164 1.1 christos if ((IS_GENREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4165 1.1 christos || (IS_GENREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
4166 1.1 christos || (IS_DAGREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4167 1.1 christos || (IS_DAGREG ((yyvsp[-2].reg)) && IS_DAGREG ((yyvsp[0].reg)))
4168 1.1 christos || (IS_GENREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP)
4169 1.1 christos || ((yyvsp[-2].reg).regno == REG_USP && IS_GENREG ((yyvsp[0].reg)))
4170 1.1 christos || ((yyvsp[-2].reg).regno == REG_USP && (yyvsp[0].reg).regno == REG_USP)
4171 1.1 christos || (IS_DREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
4172 1.1 christos || (IS_PREG ((yyvsp[-2].reg)) && IS_SYSREG ((yyvsp[0].reg)))
4173 1.1 christos || (IS_SYSREG ((yyvsp[-2].reg)) && IS_GENREG ((yyvsp[0].reg)))
4174 1.1 christos || (IS_ALLREG ((yyvsp[-2].reg)) && IS_EMUDAT ((yyvsp[0].reg)))
4175 1.1 christos || (IS_EMUDAT ((yyvsp[-2].reg)) && IS_ALLREG ((yyvsp[0].reg)))
4176 1.1 christos || (IS_SYSREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_USP))
4177 1.1 christos {
4178 1.1 christos (yyval.instr) = bfin_gen_regmv (&(yyvsp[0].reg), &(yyvsp[-2].reg));
4179 1.1 christos }
4180 1.1 christos else
4181 1.1 christos return yyerror ("Unsupported register move");
4182 1.1 christos }
4183 1.1.1.2 christos #line 4184 "config/bfin-parse.c"
4184 1.1 christos break;
4185 1.1 christos
4186 1.1 christos case 81: /* asm_1: CCREG ASSIGN REG */
4187 1.1 christos #line 1786 "./config/bfin-parse.y"
4188 1.1 christos {
4189 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
4190 1.1 christos {
4191 1.1 christos notethat ("CC2dreg: CC = dregs\n");
4192 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[0].reg));
4193 1.1 christos }
4194 1.1 christos else
4195 1.1 christos return yyerror ("Only 'CC = Dreg' supported");
4196 1.1 christos }
4197 1.1.1.2 christos #line 4198 "config/bfin-parse.c"
4198 1.1 christos break;
4199 1.1 christos
4200 1.1 christos case 82: /* asm_1: REG ASSIGN CCREG */
4201 1.1 christos #line 1797 "./config/bfin-parse.y"
4202 1.1 christos {
4203 1.1 christos if (IS_DREG ((yyvsp[-2].reg)))
4204 1.1 christos {
4205 1.1 christos notethat ("CC2dreg: dregs = CC\n");
4206 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[-2].reg));
4207 1.1 christos }
4208 1.1 christos else
4209 1.1 christos return yyerror ("Only 'Dreg = CC' supported");
4210 1.1 christos }
4211 1.1.1.2 christos #line 4212 "config/bfin-parse.c"
4212 1.1 christos break;
4213 1.1 christos
4214 1.1.1.2 christos case 83: /* asm_1: CCREG ASSIGN BANG CCREG */
4215 1.1 christos #line 1808 "./config/bfin-parse.y"
4216 1.1 christos {
4217 1.1 christos notethat ("CC2dreg: CC =! CC\n");
4218 1.1 christos (yyval.instr) = bfin_gen_cc2dreg (3, 0);
4219 1.1 christos }
4220 1.1.1.2 christos #line 4221 "config/bfin-parse.c"
4221 1.1 christos break;
4222 1.1 christos
4223 1.1 christos case 84: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode */
4224 1.1 christos #line 1816 "./config/bfin-parse.y"
4225 1.1 christos {
4226 1.1 christos notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
4227 1.1 christos
4228 1.1 christos if (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
4229 1.1 christos return yyerror ("(M) not allowed with MAC0");
4230 1.1 christos
4231 1.1 christos if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
4232 1.1 christos && (yyvsp[0].mod).mod != M_IU && (yyvsp[0].mod).mod != M_T && (yyvsp[0].mod).mod != M_TFU
4233 1.1 christos && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2 && (yyvsp[0].mod).mod != M_IH)
4234 1.1 christos return yyerror ("bad option.");
4235 1.1 christos
4236 1.1 christos if (IS_H ((yyvsp[-3].reg)))
4237 1.1 christos {
4238 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4239 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4240 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4241 1.1 christos }
4242 1.1 christos else
4243 1.1 christos {
4244 1.1 christos (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 0,
4245 1.1 christos 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4246 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4247 1.1 christos }
4248 1.1 christos }
4249 1.1.1.2 christos #line 4250 "config/bfin-parse.c"
4250 1.1 christos break;
4251 1.1 christos
4252 1.1 christos case 85: /* asm_1: REG ASSIGN multiply_halfregs opt_mode */
4253 1.1 christos #line 1842 "./config/bfin-parse.y"
4254 1.1 christos {
4255 1.1 christos /* Odd registers can use (M). */
4256 1.1 christos if (!IS_DREG ((yyvsp[-3].reg)))
4257 1.1 christos return yyerror ("Dreg expected");
4258 1.1 christos
4259 1.1 christos if (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
4260 1.1 christos return yyerror ("(M) not allowed with MAC0");
4261 1.1 christos
4262 1.1 christos if ((yyvsp[0].mod).mod != 0 && (yyvsp[0].mod).mod != M_FU && (yyvsp[0].mod).mod != M_IS
4263 1.1 christos && (yyvsp[0].mod).mod != M_S2RND && (yyvsp[0].mod).mod != M_ISS2)
4264 1.1 christos return yyerror ("bad option");
4265 1.1 christos
4266 1.1 christos if (!IS_EVEN ((yyvsp[-3].reg)))
4267 1.1 christos {
4268 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
4269 1.1 christos
4270 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4271 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
4272 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
4273 1.1 christos }
4274 1.1 christos else
4275 1.1 christos {
4276 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
4277 1.1 christos (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 1,
4278 1.1 christos 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4279 1.1 christos &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
4280 1.1 christos }
4281 1.1 christos }
4282 1.1.1.2 christos #line 4283 "config/bfin-parse.c"
4283 1.1 christos break;
4284 1.1 christos
4285 1.1 christos case 86: /* asm_1: HALF_REG ASSIGN multiply_halfregs opt_mode COMMA HALF_REG ASSIGN multiply_halfregs opt_mode */
4286 1.1 christos #line 1873 "./config/bfin-parse.y"
4287 1.1 christos {
4288 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4289 1.1 christos return yyerror ("Dregs expected");
4290 1.1 christos
4291 1.1 christos if (!IS_HCOMPL((yyvsp[-8].reg), (yyvsp[-3].reg)))
4292 1.1 christos return yyerror ("Dest registers mismatch");
4293 1.1 christos
4294 1.1 christos if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4295 1.1 christos return -1;
4296 1.1 christos
4297 1.1 christos if ((!IS_H ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
4298 1.1 christos || (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
4299 1.1 christos return yyerror ("(M) not allowed with MAC0");
4300 1.1 christos
4301 1.1 christos notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
4302 1.1 christos "dregs_lo = multiply_halfregs opt_mode\n");
4303 1.1 christos
4304 1.1 christos if (IS_H ((yyvsp[-8].reg)))
4305 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4306 1.1 christos IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4307 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4308 1.1 christos else
4309 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
4310 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4311 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4312 1.1 christos }
4313 1.1.1.2 christos #line 4314 "config/bfin-parse.c"
4314 1.1 christos break;
4315 1.1 christos
4316 1.1 christos case 87: /* asm_1: REG ASSIGN multiply_halfregs opt_mode COMMA REG ASSIGN multiply_halfregs opt_mode */
4317 1.1 christos #line 1901 "./config/bfin-parse.y"
4318 1.1 christos {
4319 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
4320 1.1 christos return yyerror ("Dregs expected");
4321 1.1 christos
4322 1.1 christos if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-3].reg).regno - (yyvsp[-8].reg).regno != 1)
4323 1.1 christos || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[-8].reg).regno - (yyvsp[-3].reg).regno != 1))
4324 1.1 christos return yyerror ("Dest registers mismatch");
4325 1.1 christos
4326 1.1 christos if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
4327 1.1 christos return -1;
4328 1.1 christos
4329 1.1 christos if ((IS_EVEN ((yyvsp[-8].reg)) && (yyvsp[-5].mod).MM)
4330 1.1 christos || (IS_EVEN ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM))
4331 1.1 christos return yyerror ("(M) not allowed with MAC0");
4332 1.1 christos
4333 1.1 christos notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
4334 1.1 christos "dregs = multiply_halfregs opt_mode\n");
4335 1.1 christos
4336 1.1 christos if (IS_EVEN ((yyvsp[-8].reg)))
4337 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4338 1.1 christos IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
4339 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4340 1.1 christos else
4341 1.1 christos (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 1,
4342 1.1 christos IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
4343 1.1 christos &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
4344 1.1 christos }
4345 1.1.1.2 christos #line 4346 "config/bfin-parse.c"
4346 1.1 christos break;
4347 1.1 christos
4348 1.1 christos case 88: /* asm_1: a_assign ASHIFT REG_A BY HALF_REG */
4349 1.1 christos #line 1932 "./config/bfin-parse.y"
4350 1.1 christos {
4351 1.1 christos if (!REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)))
4352 1.1 christos return yyerror ("Aregs must be same");
4353 1.1 christos
4354 1.1 christos if (IS_DREG ((yyvsp[0].reg)) && !IS_H ((yyvsp[0].reg)))
4355 1.1 christos {
4356 1.1 christos notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
4357 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 0, IS_A1 ((yyvsp[-4].reg)));
4358 1.1 christos }
4359 1.1 christos else
4360 1.1 christos return yyerror ("Dregs expected");
4361 1.1 christos }
4362 1.1.1.2 christos #line 4363 "config/bfin-parse.c"
4363 1.1 christos break;
4364 1.1 christos
4365 1.1 christos case 89: /* asm_1: HALF_REG ASSIGN ASHIFT HALF_REG BY HALF_REG smod */
4366 1.1 christos #line 1946 "./config/bfin-parse.y"
4367 1.1 christos {
4368 1.1 christos if (IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4369 1.1 christos {
4370 1.1 christos notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
4371 1.1 christos (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-6].reg), (yyvsp[-3].reg)));
4372 1.1 christos }
4373 1.1 christos else
4374 1.1 christos return yyerror ("Dregs expected");
4375 1.1 christos }
4376 1.1.1.2 christos #line 4377 "config/bfin-parse.c"
4377 1.1 christos break;
4378 1.1 christos
4379 1.1 christos case 90: /* asm_1: a_assign REG_A LESS_LESS expr */
4380 1.1 christos #line 1957 "./config/bfin-parse.y"
4381 1.1 christos {
4382 1.1 christos if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4383 1.1 christos return yyerror ("Aregs must be same");
4384 1.1 christos
4385 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4386 1.1 christos {
4387 1.1 christos notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
4388 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4389 1.1 christos }
4390 1.1 christos else
4391 1.1 christos return yyerror ("Bad shift value");
4392 1.1 christos }
4393 1.1.1.2 christos #line 4394 "config/bfin-parse.c"
4394 1.1 christos break;
4395 1.1 christos
4396 1.1 christos case 91: /* asm_1: REG ASSIGN REG LESS_LESS expr vsmod */
4397 1.1 christos #line 1971 "./config/bfin-parse.y"
4398 1.1 christos {
4399 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4400 1.1 christos {
4401 1.1 christos if ((yyvsp[0].modcodes).r0)
4402 1.1 christos {
4403 1.1 christos /* Vector? */
4404 1.1 christos notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
4405 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), imm4 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4406 1.1 christos }
4407 1.1 christos else
4408 1.1 christos {
4409 1.1 christos notethat ("dsp32shiftimm: dregs = dregs << uimm5 (.)\n");
4410 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
4411 1.1 christos }
4412 1.1 christos }
4413 1.1 christos else if ((yyvsp[0].modcodes).s0 == 0 && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
4414 1.1 christos {
4415 1.1 christos if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4416 1.1 christos {
4417 1.1 christos notethat ("PTR2op: pregs = pregs << 2\n");
4418 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 1);
4419 1.1 christos }
4420 1.1 christos else if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4421 1.1 christos {
4422 1.1 christos notethat ("COMP3op: pregs = pregs << 1\n");
4423 1.1 christos (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-3].reg), 5);
4424 1.1 christos }
4425 1.1 christos else
4426 1.1 christos return yyerror ("Bad shift value");
4427 1.1 christos }
4428 1.1 christos else
4429 1.1 christos return yyerror ("Bad shift value or register");
4430 1.1 christos }
4431 1.1.1.2 christos #line 4432 "config/bfin-parse.c"
4432 1.1 christos break;
4433 1.1 christos
4434 1.1 christos case 92: /* asm_1: HALF_REG ASSIGN HALF_REG LESS_LESS expr smod */
4435 1.1 christos #line 2005 "./config/bfin-parse.y"
4436 1.1 christos {
4437 1.1 christos if (IS_UIMM ((yyvsp[-1].expr), 4))
4438 1.1 christos {
4439 1.1 christos if ((yyvsp[0].modcodes).s0)
4440 1.1 christos {
4441 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n");
4442 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4443 1.1 christos }
4444 1.1 christos else
4445 1.1 christos {
4446 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
4447 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4448 1.1 christos }
4449 1.1 christos }
4450 1.1 christos else
4451 1.1 christos return yyerror ("Bad shift value");
4452 1.1 christos }
4453 1.1.1.2 christos #line 4454 "config/bfin-parse.c"
4454 1.1 christos break;
4455 1.1 christos
4456 1.1 christos case 93: /* asm_1: REG ASSIGN ASHIFT REG BY HALF_REG vsmod */
4457 1.1 christos #line 2023 "./config/bfin-parse.y"
4458 1.1 christos {
4459 1.1 christos int op;
4460 1.1 christos
4461 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
4462 1.1 christos {
4463 1.1 christos if ((yyvsp[0].modcodes).r0)
4464 1.1 christos {
4465 1.1 christos op = 1;
4466 1.1 christos notethat ("dsp32shift: dregs = ASHIFT dregs BY "
4467 1.1 christos "dregs_lo (V, .)\n");
4468 1.1 christos }
4469 1.1 christos else
4470 1.1 christos {
4471 1.1 christos
4472 1.1 christos op = 2;
4473 1.1 christos notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
4474 1.1 christos }
4475 1.1 christos (yyval.instr) = DSP32SHIFT (op, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4476 1.1 christos }
4477 1.1 christos else
4478 1.1 christos return yyerror ("Dregs expected");
4479 1.1 christos }
4480 1.1.1.2 christos #line 4481 "config/bfin-parse.c"
4481 1.1 christos break;
4482 1.1 christos
4483 1.1 christos case 94: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN REG COMMA HALF_REG RPAREN vmod */
4484 1.1 christos #line 2048 "./config/bfin-parse.y"
4485 1.1 christos {
4486 1.1 christos if (IS_DREG_L ((yyvsp[-8].reg)) && IS_DREG_L ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4487 1.1 christos {
4488 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
4489 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4490 1.1 christos }
4491 1.1 christos else
4492 1.1 christos return yyerror ("Bad shift value or register");
4493 1.1 christos }
4494 1.1.1.2 christos #line 4495 "config/bfin-parse.c"
4495 1.1 christos break;
4496 1.1 christos
4497 1.1 christos case 95: /* asm_1: HALF_REG ASSIGN EXPADJ LPAREN HALF_REG COMMA HALF_REG RPAREN */
4498 1.1 christos #line 2060 "./config/bfin-parse.y"
4499 1.1 christos {
4500 1.1 christos if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4501 1.1 christos {
4502 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
4503 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4504 1.1 christos }
4505 1.1 christos else if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_H ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4506 1.1 christos {
4507 1.1 christos notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
4508 1.1 christos (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 3, 0);
4509 1.1 christos }
4510 1.1 christos else
4511 1.1 christos return yyerror ("Bad shift value or register");
4512 1.1 christos }
4513 1.1.1.2 christos #line 4514 "config/bfin-parse.c"
4514 1.1 christos break;
4515 1.1 christos
4516 1.1 christos case 96: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN */
4517 1.1 christos #line 2078 "./config/bfin-parse.y"
4518 1.1 christos {
4519 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4520 1.1 christos {
4521 1.1 christos notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
4522 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4523 1.1 christos }
4524 1.1 christos else
4525 1.1 christos return yyerror ("Register mismatch");
4526 1.1 christos }
4527 1.1.1.2 christos #line 4528 "config/bfin-parse.c"
4528 1.1 christos break;
4529 1.1 christos
4530 1.1 christos case 97: /* asm_1: REG ASSIGN DEPOSIT LPAREN REG COMMA REG RPAREN LPAREN X RPAREN */
4531 1.1 christos #line 2089 "./config/bfin-parse.y"
4532 1.1 christos {
4533 1.1 christos if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)))
4534 1.1 christos {
4535 1.1 christos notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
4536 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &(yyvsp[-6].reg), 3, 0);
4537 1.1 christos }
4538 1.1 christos else
4539 1.1 christos return yyerror ("Register mismatch");
4540 1.1 christos }
4541 1.1.1.2 christos #line 4542 "config/bfin-parse.c"
4542 1.1 christos break;
4543 1.1 christos
4544 1.1 christos case 98: /* asm_1: REG ASSIGN EXTRACT LPAREN REG COMMA HALF_REG RPAREN xpmod */
4545 1.1 christos #line 2100 "./config/bfin-parse.y"
4546 1.1 christos {
4547 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
4548 1.1 christos {
4549 1.1 christos notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
4550 1.1 christos (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4551 1.1 christos }
4552 1.1 christos else
4553 1.1 christos return yyerror ("Register mismatch");
4554 1.1 christos }
4555 1.1.1.2 christos #line 4556 "config/bfin-parse.c"
4556 1.1 christos break;
4557 1.1 christos
4558 1.1 christos case 99: /* asm_1: a_assign REG_A _GREATER_GREATER_GREATER expr */
4559 1.1 christos #line 2111 "./config/bfin-parse.y"
4560 1.1 christos {
4561 1.1 christos if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
4562 1.1 christos return yyerror ("Aregs must be same");
4563 1.1 christos
4564 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4565 1.1 christos {
4566 1.1 christos notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
4567 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
4568 1.1 christos }
4569 1.1 christos else
4570 1.1 christos return yyerror ("Shift value range error");
4571 1.1 christos }
4572 1.1.1.2 christos #line 4573 "config/bfin-parse.c"
4573 1.1 christos break;
4574 1.1 christos
4575 1.1 christos case 100: /* asm_1: a_assign LSHIFT REG_A BY HALF_REG */
4576 1.1 christos #line 2124 "./config/bfin-parse.y"
4577 1.1 christos {
4578 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4579 1.1 christos {
4580 1.1 christos notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
4581 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 1, IS_A1 ((yyvsp[-4].reg)));
4582 1.1 christos }
4583 1.1 christos else
4584 1.1 christos return yyerror ("Register mismatch");
4585 1.1 christos }
4586 1.1.1.2 christos #line 4587 "config/bfin-parse.c"
4587 1.1 christos break;
4588 1.1 christos
4589 1.1 christos case 101: /* asm_1: HALF_REG ASSIGN LSHIFT HALF_REG BY HALF_REG */
4590 1.1 christos #line 2135 "./config/bfin-parse.y"
4591 1.1 christos {
4592 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4593 1.1 christos {
4594 1.1 christos notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
4595 1.1 christos (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-2].reg)));
4596 1.1 christos }
4597 1.1 christos else
4598 1.1 christos return yyerror ("Register mismatch");
4599 1.1 christos }
4600 1.1.1.2 christos #line 4601 "config/bfin-parse.c"
4601 1.1 christos break;
4602 1.1 christos
4603 1.1 christos case 102: /* asm_1: REG ASSIGN LSHIFT REG BY HALF_REG vmod */
4604 1.1 christos #line 2146 "./config/bfin-parse.y"
4605 1.1 christos {
4606 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
4607 1.1 christos {
4608 1.1 christos notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
4609 1.1 christos (yyval.instr) = DSP32SHIFT ((yyvsp[0].r0).r0 ? 1: 2, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
4610 1.1 christos }
4611 1.1 christos else
4612 1.1 christos return yyerror ("Register mismatch");
4613 1.1 christos }
4614 1.1.1.2 christos #line 4615 "config/bfin-parse.c"
4615 1.1 christos break;
4616 1.1 christos
4617 1.1 christos case 103: /* asm_1: REG ASSIGN SHIFT REG BY HALF_REG */
4618 1.1 christos #line 2157 "./config/bfin-parse.y"
4619 1.1 christos {
4620 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4621 1.1 christos {
4622 1.1 christos notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
4623 1.1 christos (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, 0);
4624 1.1 christos }
4625 1.1 christos else
4626 1.1 christos return yyerror ("Register mismatch");
4627 1.1 christos }
4628 1.1.1.2 christos #line 4629 "config/bfin-parse.c"
4629 1.1 christos break;
4630 1.1 christos
4631 1.1 christos case 104: /* asm_1: a_assign REG_A GREATER_GREATER expr */
4632 1.1 christos #line 2168 "./config/bfin-parse.y"
4633 1.1 christos {
4634 1.1 christos if (REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6) >= 0)
4635 1.1 christos {
4636 1.1 christos notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
4637 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 1, IS_A1 ((yyvsp[-3].reg)));
4638 1.1 christos }
4639 1.1 christos else
4640 1.1 christos return yyerror ("Accu register expected");
4641 1.1 christos }
4642 1.1.1.2 christos #line 4643 "config/bfin-parse.c"
4643 1.1 christos break;
4644 1.1 christos
4645 1.1 christos case 105: /* asm_1: REG ASSIGN REG GREATER_GREATER expr vmod */
4646 1.1 christos #line 2179 "./config/bfin-parse.y"
4647 1.1 christos {
4648 1.1 christos if ((yyvsp[0].r0).r0 == 1)
4649 1.1 christos {
4650 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4651 1.1 christos {
4652 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
4653 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4654 1.1 christos }
4655 1.1 christos else
4656 1.1 christos return yyerror ("Register mismatch");
4657 1.1 christos }
4658 1.1 christos else
4659 1.1 christos {
4660 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4661 1.1 christos {
4662 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
4663 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
4664 1.1 christos }
4665 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 2)
4666 1.1 christos {
4667 1.1 christos notethat ("PTR2op: pregs = pregs >> 2\n");
4668 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 3);
4669 1.1 christos }
4670 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 1)
4671 1.1 christos {
4672 1.1 christos notethat ("PTR2op: pregs = pregs >> 1\n");
4673 1.1 christos (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 4);
4674 1.1 christos }
4675 1.1 christos else
4676 1.1 christos return yyerror ("Register mismatch");
4677 1.1 christos }
4678 1.1 christos }
4679 1.1.1.2 christos #line 4680 "config/bfin-parse.c"
4680 1.1 christos break;
4681 1.1 christos
4682 1.1 christos case 106: /* asm_1: HALF_REG ASSIGN HALF_REG GREATER_GREATER expr */
4683 1.1 christos #line 2212 "./config/bfin-parse.y"
4684 1.1 christos {
4685 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 5))
4686 1.1 christos {
4687 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half >> uimm5\n");
4688 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-4].reg), -uimm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
4689 1.1 christos }
4690 1.1 christos else
4691 1.1 christos return yyerror ("Register mismatch");
4692 1.1 christos }
4693 1.1.1.2 christos #line 4694 "config/bfin-parse.c"
4694 1.1 christos break;
4695 1.1 christos
4696 1.1 christos case 107: /* asm_1: HALF_REG ASSIGN HALF_REG _GREATER_GREATER_GREATER expr smod */
4697 1.1 christos #line 2222 "./config/bfin-parse.y"
4698 1.1 christos {
4699 1.1 christos if (IS_UIMM ((yyvsp[-1].expr), 5))
4700 1.1 christos {
4701 1.1 christos notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
4702 1.1 christos (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg),
4703 1.1 christos (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
4704 1.1 christos }
4705 1.1 christos else
4706 1.1 christos return yyerror ("Register or modifier mismatch");
4707 1.1 christos }
4708 1.1.1.2 christos #line 4709 "config/bfin-parse.c"
4709 1.1 christos break;
4710 1.1 christos
4711 1.1 christos case 108: /* asm_1: REG ASSIGN REG _GREATER_GREATER_GREATER expr vsmod */
4712 1.1 christos #line 2235 "./config/bfin-parse.y"
4713 1.1 christos {
4714 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4715 1.1 christos {
4716 1.1 christos if ((yyvsp[0].modcodes).r0)
4717 1.1 christos {
4718 1.1 christos /* Vector? */
4719 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (V, .)\n");
4720 1.1 christos (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4721 1.1 christos }
4722 1.1 christos else
4723 1.1 christos {
4724 1.1 christos notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (.)\n");
4725 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
4726 1.1 christos }
4727 1.1 christos }
4728 1.1 christos else
4729 1.1 christos return yyerror ("Register mismatch");
4730 1.1 christos }
4731 1.1.1.2 christos #line 4732 "config/bfin-parse.c"
4732 1.1 christos break;
4733 1.1 christos
4734 1.1 christos case 109: /* asm_1: HALF_REG ASSIGN ONES REG */
4735 1.1 christos #line 2255 "./config/bfin-parse.y"
4736 1.1 christos {
4737 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4738 1.1 christos {
4739 1.1 christos notethat ("dsp32shift: dregs_lo = ONES dregs\n");
4740 1.1 christos (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 3, 0);
4741 1.1 christos }
4742 1.1 christos else
4743 1.1 christos return yyerror ("Register mismatch");
4744 1.1 christos }
4745 1.1.1.2 christos #line 4746 "config/bfin-parse.c"
4746 1.1 christos break;
4747 1.1 christos
4748 1.1 christos case 110: /* asm_1: REG ASSIGN PACK LPAREN HALF_REG COMMA HALF_REG RPAREN */
4749 1.1 christos #line 2266 "./config/bfin-parse.y"
4750 1.1 christos {
4751 1.1 christos if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
4752 1.1 christos {
4753 1.1 christos notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
4754 1.1 christos (yyval.instr) = DSP32SHIFT (4, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)), 0);
4755 1.1 christos }
4756 1.1 christos else
4757 1.1 christos return yyerror ("Register mismatch");
4758 1.1 christos }
4759 1.1.1.2 christos #line 4760 "config/bfin-parse.c"
4760 1.1 christos break;
4761 1.1 christos
4762 1.1 christos case 111: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXORSHIFT LPAREN REG_A COMMA REG RPAREN */
4763 1.1 christos #line 2277 "./config/bfin-parse.y"
4764 1.1 christos {
4765 1.1 christos if (IS_DREG ((yyvsp[-9].reg))
4766 1.1 christos && (yyvsp[-3].reg).regno == REG_A0
4767 1.1 christos && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4768 1.1 christos {
4769 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
4770 1.1 christos (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 0, 0);
4771 1.1 christos }
4772 1.1 christos else
4773 1.1 christos return yyerror ("Register mismatch");
4774 1.1 christos }
4775 1.1.1.2 christos #line 4776 "config/bfin-parse.c"
4776 1.1 christos break;
4777 1.1 christos
4778 1.1 christos case 112: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG RPAREN */
4779 1.1 christos #line 2290 "./config/bfin-parse.y"
4780 1.1 christos {
4781 1.1 christos if (IS_DREG ((yyvsp[-9].reg))
4782 1.1 christos && (yyvsp[-3].reg).regno == REG_A0
4783 1.1 christos && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
4784 1.1 christos {
4785 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
4786 1.1 christos (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 1, 0);
4787 1.1 christos }
4788 1.1 christos else
4789 1.1 christos return yyerror ("Register mismatch");
4790 1.1 christos }
4791 1.1.1.2 christos #line 4792 "config/bfin-parse.c"
4792 1.1 christos break;
4793 1.1 christos
4794 1.1 christos case 113: /* asm_1: HALF_REG ASSIGN CCREG ASSIGN BXOR LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN */
4795 1.1 christos #line 2303 "./config/bfin-parse.y"
4796 1.1 christos {
4797 1.1 christos if (IS_DREG ((yyvsp[-11].reg)) && !IS_H ((yyvsp[-11].reg)) && !REG_SAME ((yyvsp[-5].reg), (yyvsp[-3].reg)))
4798 1.1 christos {
4799 1.1 christos notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
4800 1.1 christos (yyval.instr) = DSP32SHIFT (12, &(yyvsp[-11].reg), 0, 0, 1, 0);
4801 1.1 christos }
4802 1.1 christos else
4803 1.1 christos return yyerror ("Register mismatch");
4804 1.1 christos }
4805 1.1.1.2 christos #line 4806 "config/bfin-parse.c"
4806 1.1 christos break;
4807 1.1 christos
4808 1.1 christos case 114: /* asm_1: a_assign ROT REG_A BY HALF_REG */
4809 1.1 christos #line 2314 "./config/bfin-parse.y"
4810 1.1 christos {
4811 1.1 christos if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4812 1.1 christos {
4813 1.1 christos notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
4814 1.1 christos (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4815 1.1 christos }
4816 1.1 christos else
4817 1.1 christos return yyerror ("Register mismatch");
4818 1.1 christos }
4819 1.1.1.2 christos #line 4820 "config/bfin-parse.c"
4820 1.1 christos break;
4821 1.1 christos
4822 1.1 christos case 115: /* asm_1: REG ASSIGN ROT REG BY HALF_REG */
4823 1.1 christos #line 2325 "./config/bfin-parse.y"
4824 1.1 christos {
4825 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
4826 1.1 christos {
4827 1.1 christos notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
4828 1.1 christos (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 3, 0);
4829 1.1 christos }
4830 1.1 christos else
4831 1.1 christos return yyerror ("Register mismatch");
4832 1.1 christos }
4833 1.1.1.2 christos #line 4834 "config/bfin-parse.c"
4834 1.1 christos break;
4835 1.1 christos
4836 1.1 christos case 116: /* asm_1: a_assign ROT REG_A BY expr */
4837 1.1 christos #line 2336 "./config/bfin-parse.y"
4838 1.1 christos {
4839 1.1 christos if (IS_IMM ((yyvsp[0].expr), 6))
4840 1.1 christos {
4841 1.1 christos notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
4842 1.1 christos (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[0].expr)), 0, 2, IS_A1 ((yyvsp[-4].reg)));
4843 1.1 christos }
4844 1.1 christos else
4845 1.1 christos return yyerror ("Register mismatch");
4846 1.1 christos }
4847 1.1.1.2 christos #line 4848 "config/bfin-parse.c"
4848 1.1 christos break;
4849 1.1 christos
4850 1.1 christos case 117: /* asm_1: REG ASSIGN ROT REG BY expr */
4851 1.1 christos #line 2347 "./config/bfin-parse.y"
4852 1.1 christos {
4853 1.1 christos if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6))
4854 1.1 christos {
4855 1.1 christos (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 3, IS_A1 ((yyvsp[-5].reg)));
4856 1.1 christos }
4857 1.1 christos else
4858 1.1 christos return yyerror ("Register mismatch");
4859 1.1 christos }
4860 1.1.1.2 christos #line 4861 "config/bfin-parse.c"
4861 1.1 christos break;
4862 1.1 christos
4863 1.1 christos case 118: /* asm_1: HALF_REG ASSIGN SIGNBITS REG_A */
4864 1.1 christos #line 2357 "./config/bfin-parse.y"
4865 1.1 christos {
4866 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)))
4867 1.1 christos {
4868 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
4869 1.1 christos (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, 0, IS_A1 ((yyvsp[0].reg)), 0);
4870 1.1 christos }
4871 1.1 christos else
4872 1.1 christos return yyerror ("Register mismatch");
4873 1.1 christos }
4874 1.1.1.2 christos #line 4875 "config/bfin-parse.c"
4875 1.1 christos break;
4876 1.1 christos
4877 1.1 christos case 119: /* asm_1: HALF_REG ASSIGN SIGNBITS REG */
4878 1.1 christos #line 2368 "./config/bfin-parse.y"
4879 1.1 christos {
4880 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
4881 1.1 christos {
4882 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
4883 1.1 christos (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 0, 0);
4884 1.1 christos }
4885 1.1 christos else
4886 1.1 christos return yyerror ("Register mismatch");
4887 1.1 christos }
4888 1.1.1.2 christos #line 4889 "config/bfin-parse.c"
4889 1.1 christos break;
4890 1.1 christos
4891 1.1 christos case 120: /* asm_1: HALF_REG ASSIGN SIGNBITS HALF_REG */
4892 1.1 christos #line 2379 "./config/bfin-parse.y"
4893 1.1 christos {
4894 1.1 christos if (IS_DREG_L ((yyvsp[-3].reg)))
4895 1.1 christos {
4896 1.1 christos notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
4897 1.1 christos (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 1 + IS_H ((yyvsp[0].reg)), 0);
4898 1.1 christos }
4899 1.1 christos else
4900 1.1 christos return yyerror ("Register mismatch");
4901 1.1 christos }
4902 1.1.1.2 christos #line 4903 "config/bfin-parse.c"
4903 1.1 christos break;
4904 1.1 christos
4905 1.1 christos case 121: /* asm_1: HALF_REG ASSIGN VIT_MAX LPAREN REG RPAREN asr_asl */
4906 1.1 christos #line 2391 "./config/bfin-parse.y"
4907 1.1 christos {
4908 1.1 christos if (IS_DREG_L ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-2].reg)))
4909 1.1 christos {
4910 1.1 christos notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
4911 1.1 christos (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-6].reg), 0, &(yyvsp[-2].reg), ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4912 1.1 christos }
4913 1.1 christos else
4914 1.1 christos return yyerror ("Register mismatch");
4915 1.1 christos }
4916 1.1.1.2 christos #line 4917 "config/bfin-parse.c"
4917 1.1 christos break;
4918 1.1 christos
4919 1.1 christos case 122: /* asm_1: REG ASSIGN VIT_MAX LPAREN REG COMMA REG RPAREN asr_asl */
4920 1.1 christos #line 2402 "./config/bfin-parse.y"
4921 1.1 christos {
4922 1.1 christos if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
4923 1.1 christos {
4924 1.1 christos notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
4925 1.1 christos (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), 2 | ((yyvsp[0].r0).r0 ? 0 : 1), 0);
4926 1.1 christos }
4927 1.1 christos else
4928 1.1 christos return yyerror ("Register mismatch");
4929 1.1 christos }
4930 1.1.1.2 christos #line 4931 "config/bfin-parse.c"
4931 1.1 christos break;
4932 1.1 christos
4933 1.1 christos case 123: /* asm_1: BITMUX LPAREN REG COMMA REG COMMA REG_A RPAREN asr_asl */
4934 1.1 christos #line 2413 "./config/bfin-parse.y"
4935 1.1 christos {
4936 1.1 christos if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)))
4937 1.1 christos return yyerror ("Illegal source register combination");
4938 1.1 christos
4939 1.1 christos if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)) && !IS_A1 ((yyvsp[-2].reg)))
4940 1.1 christos {
4941 1.1 christos notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
4942 1.1 christos (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[-6].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
4943 1.1 christos }
4944 1.1 christos else
4945 1.1 christos return yyerror ("Register mismatch");
4946 1.1 christos }
4947 1.1.1.2 christos #line 4948 "config/bfin-parse.c"
4948 1.1 christos break;
4949 1.1 christos
4950 1.1 christos case 124: /* asm_1: a_assign BXORSHIFT LPAREN REG_A COMMA REG_A COMMA CCREG RPAREN */
4951 1.1 christos #line 2427 "./config/bfin-parse.y"
4952 1.1 christos {
4953 1.1 christos if (!IS_A1 ((yyvsp[-8].reg)) && !IS_A1 ((yyvsp[-5].reg)) && IS_A1 ((yyvsp[-3].reg)))
4954 1.1 christos {
4955 1.1 christos notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
4956 1.1 christos (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
4957 1.1 christos }
4958 1.1 christos else
4959 1.1 christos return yyerror ("Dregs expected");
4960 1.1 christos }
4961 1.1.1.2 christos #line 4962 "config/bfin-parse.c"
4962 1.1 christos break;
4963 1.1 christos
4964 1.1 christos case 125: /* asm_1: BITCLR LPAREN REG COMMA expr RPAREN */
4965 1.1 christos #line 2440 "./config/bfin-parse.y"
4966 1.1 christos {
4967 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4968 1.1 christos {
4969 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4970 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 4);
4971 1.1 christos }
4972 1.1 christos else
4973 1.1 christos return yyerror ("Register mismatch");
4974 1.1 christos }
4975 1.1.1.2 christos #line 4976 "config/bfin-parse.c"
4976 1.1 christos break;
4977 1.1 christos
4978 1.1 christos case 126: /* asm_1: BITSET LPAREN REG COMMA expr RPAREN */
4979 1.1 christos #line 2452 "./config/bfin-parse.y"
4980 1.1 christos {
4981 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4982 1.1 christos {
4983 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4984 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 2);
4985 1.1 christos }
4986 1.1 christos else
4987 1.1 christos return yyerror ("Register mismatch");
4988 1.1 christos }
4989 1.1.1.2 christos #line 4990 "config/bfin-parse.c"
4990 1.1 christos break;
4991 1.1 christos
4992 1.1 christos case 127: /* asm_1: BITTGL LPAREN REG COMMA expr RPAREN */
4993 1.1 christos #line 2464 "./config/bfin-parse.y"
4994 1.1 christos {
4995 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
4996 1.1 christos {
4997 1.1 christos notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
4998 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 3);
4999 1.1 christos }
5000 1.1 christos else
5001 1.1 christos return yyerror ("Register mismatch");
5002 1.1 christos }
5003 1.1.1.2 christos #line 5004 "config/bfin-parse.c"
5004 1.1 christos break;
5005 1.1 christos
5006 1.1.1.2 christos case 128: /* asm_1: CCREG ASSIGN BANG BITTST LPAREN REG COMMA expr RPAREN */
5007 1.1 christos #line 2475 "./config/bfin-parse.y"
5008 1.1 christos {
5009 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
5010 1.1 christos {
5011 1.1 christos notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
5012 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 0);
5013 1.1 christos }
5014 1.1 christos else
5015 1.1 christos return yyerror ("Register mismatch or value error");
5016 1.1 christos }
5017 1.1.1.2 christos #line 5018 "config/bfin-parse.c"
5018 1.1 christos break;
5019 1.1 christos
5020 1.1 christos case 129: /* asm_1: CCREG ASSIGN BITTST LPAREN REG COMMA expr RPAREN */
5021 1.1 christos #line 2486 "./config/bfin-parse.y"
5022 1.1 christos {
5023 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
5024 1.1 christos {
5025 1.1 christos notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
5026 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 1);
5027 1.1 christos }
5028 1.1 christos else
5029 1.1 christos return yyerror ("Register mismatch or value error");
5030 1.1 christos }
5031 1.1.1.2 christos #line 5032 "config/bfin-parse.c"
5032 1.1 christos break;
5033 1.1 christos
5034 1.1 christos case 130: /* asm_1: IF BANG CCREG REG ASSIGN REG */
5035 1.1 christos #line 2497 "./config/bfin-parse.y"
5036 1.1 christos {
5037 1.1 christos if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg)))
5038 1.1 christos && (IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg))))
5039 1.1 christos {
5040 1.1 christos notethat ("ccMV: IF ! CC gregs = gregs\n");
5041 1.1 christos (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 0);
5042 1.1 christos }
5043 1.1 christos else
5044 1.1 christos return yyerror ("Register mismatch");
5045 1.1 christos }
5046 1.1.1.2 christos #line 5047 "config/bfin-parse.c"
5047 1.1 christos break;
5048 1.1 christos
5049 1.1 christos case 131: /* asm_1: IF CCREG REG ASSIGN REG */
5050 1.1 christos #line 2509 "./config/bfin-parse.y"
5051 1.1 christos {
5052 1.1 christos if ((IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg)))
5053 1.1 christos && (IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))))
5054 1.1 christos {
5055 1.1 christos notethat ("ccMV: IF CC gregs = gregs\n");
5056 1.1 christos (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 1);
5057 1.1 christos }
5058 1.1 christos else
5059 1.1 christos return yyerror ("Register mismatch");
5060 1.1 christos }
5061 1.1.1.2 christos #line 5062 "config/bfin-parse.c"
5062 1.1 christos break;
5063 1.1 christos
5064 1.1 christos case 132: /* asm_1: IF BANG CCREG JUMP expr */
5065 1.1 christos #line 2521 "./config/bfin-parse.y"
5066 1.1 christos {
5067 1.1 christos if (IS_PCREL10 ((yyvsp[0].expr)))
5068 1.1 christos {
5069 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5070 1.1 christos (yyval.instr) = BRCC (0, 0, (yyvsp[0].expr));
5071 1.1 christos }
5072 1.1 christos else
5073 1.1 christos return yyerror ("Bad jump offset");
5074 1.1 christos }
5075 1.1.1.2 christos #line 5076 "config/bfin-parse.c"
5076 1.1 christos break;
5077 1.1 christos
5078 1.1 christos case 133: /* asm_1: IF BANG CCREG JUMP expr LPAREN BP RPAREN */
5079 1.1 christos #line 2532 "./config/bfin-parse.y"
5080 1.1 christos {
5081 1.1 christos if (IS_PCREL10 ((yyvsp[-3].expr)))
5082 1.1 christos {
5083 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5084 1.1 christos (yyval.instr) = BRCC (0, 1, (yyvsp[-3].expr));
5085 1.1 christos }
5086 1.1 christos else
5087 1.1 christos return yyerror ("Bad jump offset");
5088 1.1 christos }
5089 1.1.1.2 christos #line 5090 "config/bfin-parse.c"
5090 1.1 christos break;
5091 1.1 christos
5092 1.1 christos case 134: /* asm_1: IF CCREG JUMP expr */
5093 1.1 christos #line 2543 "./config/bfin-parse.y"
5094 1.1 christos {
5095 1.1 christos if (IS_PCREL10 ((yyvsp[0].expr)))
5096 1.1 christos {
5097 1.1 christos notethat ("BRCC: IF CC JUMP pcrel11m2\n");
5098 1.1 christos (yyval.instr) = BRCC (1, 0, (yyvsp[0].expr));
5099 1.1 christos }
5100 1.1 christos else
5101 1.1 christos return yyerror ("Bad jump offset");
5102 1.1 christos }
5103 1.1.1.2 christos #line 5104 "config/bfin-parse.c"
5104 1.1 christos break;
5105 1.1 christos
5106 1.1 christos case 135: /* asm_1: IF CCREG JUMP expr LPAREN BP RPAREN */
5107 1.1 christos #line 2554 "./config/bfin-parse.y"
5108 1.1 christos {
5109 1.1 christos if (IS_PCREL10 ((yyvsp[-3].expr)))
5110 1.1 christos {
5111 1.1 christos notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
5112 1.1 christos (yyval.instr) = BRCC (1, 1, (yyvsp[-3].expr));
5113 1.1 christos }
5114 1.1 christos else
5115 1.1 christos return yyerror ("Bad jump offset");
5116 1.1 christos }
5117 1.1.1.2 christos #line 5118 "config/bfin-parse.c"
5118 1.1 christos break;
5119 1.1 christos
5120 1.1 christos case 136: /* asm_1: NOP */
5121 1.1 christos #line 2564 "./config/bfin-parse.y"
5122 1.1 christos {
5123 1.1 christos notethat ("ProgCtrl: NOP\n");
5124 1.1 christos (yyval.instr) = PROGCTRL (0, 0);
5125 1.1 christos }
5126 1.1.1.2 christos #line 5127 "config/bfin-parse.c"
5127 1.1 christos break;
5128 1.1 christos
5129 1.1 christos case 137: /* asm_1: RTS */
5130 1.1 christos #line 2570 "./config/bfin-parse.y"
5131 1.1 christos {
5132 1.1 christos notethat ("ProgCtrl: RTS\n");
5133 1.1 christos (yyval.instr) = PROGCTRL (1, 0);
5134 1.1 christos }
5135 1.1.1.2 christos #line 5136 "config/bfin-parse.c"
5136 1.1 christos break;
5137 1.1 christos
5138 1.1 christos case 138: /* asm_1: RTI */
5139 1.1 christos #line 2576 "./config/bfin-parse.y"
5140 1.1 christos {
5141 1.1 christos notethat ("ProgCtrl: RTI\n");
5142 1.1 christos (yyval.instr) = PROGCTRL (1, 1);
5143 1.1 christos }
5144 1.1.1.2 christos #line 5145 "config/bfin-parse.c"
5145 1.1 christos break;
5146 1.1 christos
5147 1.1 christos case 139: /* asm_1: RTX */
5148 1.1 christos #line 2582 "./config/bfin-parse.y"
5149 1.1 christos {
5150 1.1 christos notethat ("ProgCtrl: RTX\n");
5151 1.1 christos (yyval.instr) = PROGCTRL (1, 2);
5152 1.1 christos }
5153 1.1.1.2 christos #line 5154 "config/bfin-parse.c"
5154 1.1 christos break;
5155 1.1 christos
5156 1.1 christos case 140: /* asm_1: RTN */
5157 1.1 christos #line 2588 "./config/bfin-parse.y"
5158 1.1 christos {
5159 1.1 christos notethat ("ProgCtrl: RTN\n");
5160 1.1 christos (yyval.instr) = PROGCTRL (1, 3);
5161 1.1 christos }
5162 1.1.1.2 christos #line 5163 "config/bfin-parse.c"
5163 1.1 christos break;
5164 1.1 christos
5165 1.1 christos case 141: /* asm_1: RTE */
5166 1.1 christos #line 2594 "./config/bfin-parse.y"
5167 1.1 christos {
5168 1.1 christos notethat ("ProgCtrl: RTE\n");
5169 1.1 christos (yyval.instr) = PROGCTRL (1, 4);
5170 1.1 christos }
5171 1.1.1.2 christos #line 5172 "config/bfin-parse.c"
5172 1.1 christos break;
5173 1.1 christos
5174 1.1 christos case 142: /* asm_1: IDLE */
5175 1.1 christos #line 2600 "./config/bfin-parse.y"
5176 1.1 christos {
5177 1.1 christos notethat ("ProgCtrl: IDLE\n");
5178 1.1 christos (yyval.instr) = PROGCTRL (2, 0);
5179 1.1 christos }
5180 1.1.1.2 christos #line 5181 "config/bfin-parse.c"
5181 1.1 christos break;
5182 1.1 christos
5183 1.1 christos case 143: /* asm_1: CSYNC */
5184 1.1 christos #line 2606 "./config/bfin-parse.y"
5185 1.1 christos {
5186 1.1 christos notethat ("ProgCtrl: CSYNC\n");
5187 1.1 christos (yyval.instr) = PROGCTRL (2, 3);
5188 1.1 christos }
5189 1.1.1.2 christos #line 5190 "config/bfin-parse.c"
5190 1.1 christos break;
5191 1.1 christos
5192 1.1 christos case 144: /* asm_1: SSYNC */
5193 1.1 christos #line 2612 "./config/bfin-parse.y"
5194 1.1 christos {
5195 1.1 christos notethat ("ProgCtrl: SSYNC\n");
5196 1.1 christos (yyval.instr) = PROGCTRL (2, 4);
5197 1.1 christos }
5198 1.1.1.2 christos #line 5199 "config/bfin-parse.c"
5199 1.1 christos break;
5200 1.1 christos
5201 1.1 christos case 145: /* asm_1: EMUEXCPT */
5202 1.1 christos #line 2618 "./config/bfin-parse.y"
5203 1.1 christos {
5204 1.1 christos notethat ("ProgCtrl: EMUEXCPT\n");
5205 1.1 christos (yyval.instr) = PROGCTRL (2, 5);
5206 1.1 christos }
5207 1.1.1.2 christos #line 5208 "config/bfin-parse.c"
5208 1.1 christos break;
5209 1.1 christos
5210 1.1 christos case 146: /* asm_1: CLI REG */
5211 1.1 christos #line 2624 "./config/bfin-parse.y"
5212 1.1 christos {
5213 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
5214 1.1 christos {
5215 1.1 christos notethat ("ProgCtrl: CLI dregs\n");
5216 1.1 christos (yyval.instr) = PROGCTRL (3, (yyvsp[0].reg).regno & CODE_MASK);
5217 1.1 christos }
5218 1.1 christos else
5219 1.1 christos return yyerror ("Dreg expected for CLI");
5220 1.1 christos }
5221 1.1.1.2 christos #line 5222 "config/bfin-parse.c"
5222 1.1 christos break;
5223 1.1 christos
5224 1.1 christos case 147: /* asm_1: STI REG */
5225 1.1 christos #line 2635 "./config/bfin-parse.y"
5226 1.1 christos {
5227 1.1 christos if (IS_DREG ((yyvsp[0].reg)))
5228 1.1 christos {
5229 1.1 christos notethat ("ProgCtrl: STI dregs\n");
5230 1.1 christos (yyval.instr) = PROGCTRL (4, (yyvsp[0].reg).regno & CODE_MASK);
5231 1.1 christos }
5232 1.1 christos else
5233 1.1 christos return yyerror ("Dreg expected for STI");
5234 1.1 christos }
5235 1.1.1.2 christos #line 5236 "config/bfin-parse.c"
5236 1.1 christos break;
5237 1.1 christos
5238 1.1 christos case 148: /* asm_1: JUMP LPAREN REG RPAREN */
5239 1.1 christos #line 2646 "./config/bfin-parse.y"
5240 1.1 christos {
5241 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5242 1.1 christos {
5243 1.1 christos notethat ("ProgCtrl: JUMP (pregs )\n");
5244 1.1 christos (yyval.instr) = PROGCTRL (5, (yyvsp[-1].reg).regno & CODE_MASK);
5245 1.1 christos }
5246 1.1 christos else
5247 1.1 christos return yyerror ("Bad register for indirect jump");
5248 1.1 christos }
5249 1.1.1.2 christos #line 5250 "config/bfin-parse.c"
5250 1.1 christos break;
5251 1.1 christos
5252 1.1 christos case 149: /* asm_1: CALL LPAREN REG RPAREN */
5253 1.1 christos #line 2657 "./config/bfin-parse.y"
5254 1.1 christos {
5255 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5256 1.1 christos {
5257 1.1 christos notethat ("ProgCtrl: CALL (pregs )\n");
5258 1.1 christos (yyval.instr) = PROGCTRL (6, (yyvsp[-1].reg).regno & CODE_MASK);
5259 1.1 christos }
5260 1.1 christos else
5261 1.1 christos return yyerror ("Bad register for indirect call");
5262 1.1 christos }
5263 1.1.1.2 christos #line 5264 "config/bfin-parse.c"
5264 1.1 christos break;
5265 1.1 christos
5266 1.1 christos case 150: /* asm_1: CALL LPAREN PC PLUS REG RPAREN */
5267 1.1 christos #line 2668 "./config/bfin-parse.y"
5268 1.1 christos {
5269 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5270 1.1 christos {
5271 1.1 christos notethat ("ProgCtrl: CALL (PC + pregs )\n");
5272 1.1 christos (yyval.instr) = PROGCTRL (7, (yyvsp[-1].reg).regno & CODE_MASK);
5273 1.1 christos }
5274 1.1 christos else
5275 1.1 christos return yyerror ("Bad register for indirect call");
5276 1.1 christos }
5277 1.1.1.2 christos #line 5278 "config/bfin-parse.c"
5278 1.1 christos break;
5279 1.1 christos
5280 1.1 christos case 151: /* asm_1: JUMP LPAREN PC PLUS REG RPAREN */
5281 1.1 christos #line 2679 "./config/bfin-parse.y"
5282 1.1 christos {
5283 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5284 1.1 christos {
5285 1.1 christos notethat ("ProgCtrl: JUMP (PC + pregs )\n");
5286 1.1 christos (yyval.instr) = PROGCTRL (8, (yyvsp[-1].reg).regno & CODE_MASK);
5287 1.1 christos }
5288 1.1 christos else
5289 1.1 christos return yyerror ("Bad register for indirect jump");
5290 1.1 christos }
5291 1.1.1.2 christos #line 5292 "config/bfin-parse.c"
5292 1.1 christos break;
5293 1.1 christos
5294 1.1 christos case 152: /* asm_1: RAISE expr */
5295 1.1 christos #line 2690 "./config/bfin-parse.y"
5296 1.1 christos {
5297 1.1 christos if (IS_UIMM ((yyvsp[0].expr), 4))
5298 1.1 christos {
5299 1.1 christos notethat ("ProgCtrl: RAISE uimm4\n");
5300 1.1 christos (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[0].expr)));
5301 1.1 christos }
5302 1.1 christos else
5303 1.1 christos return yyerror ("Bad value for RAISE");
5304 1.1 christos }
5305 1.1.1.2 christos #line 5306 "config/bfin-parse.c"
5306 1.1 christos break;
5307 1.1 christos
5308 1.1 christos case 153: /* asm_1: EXCPT expr */
5309 1.1 christos #line 2701 "./config/bfin-parse.y"
5310 1.1 christos {
5311 1.1 christos notethat ("ProgCtrl: EMUEXCPT\n");
5312 1.1 christos (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[0].expr)));
5313 1.1 christos }
5314 1.1.1.2 christos #line 5315 "config/bfin-parse.c"
5315 1.1 christos break;
5316 1.1 christos
5317 1.1 christos case 154: /* asm_1: TESTSET LPAREN REG RPAREN */
5318 1.1 christos #line 2707 "./config/bfin-parse.y"
5319 1.1 christos {
5320 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5321 1.1 christos {
5322 1.1 christos if ((yyvsp[-1].reg).regno == REG_SP || (yyvsp[-1].reg).regno == REG_FP)
5323 1.1 christos return yyerror ("Bad register for TESTSET");
5324 1.1 christos
5325 1.1 christos notethat ("ProgCtrl: TESTSET (pregs )\n");
5326 1.1 christos (yyval.instr) = PROGCTRL (11, (yyvsp[-1].reg).regno & CODE_MASK);
5327 1.1 christos }
5328 1.1 christos else
5329 1.1 christos return yyerror ("Preg expected");
5330 1.1 christos }
5331 1.1.1.2 christos #line 5332 "config/bfin-parse.c"
5332 1.1 christos break;
5333 1.1 christos
5334 1.1 christos case 155: /* asm_1: JUMP expr */
5335 1.1 christos #line 2721 "./config/bfin-parse.y"
5336 1.1 christos {
5337 1.1 christos if (IS_PCREL12 ((yyvsp[0].expr)))
5338 1.1 christos {
5339 1.1 christos notethat ("UJUMP: JUMP pcrel12\n");
5340 1.1 christos (yyval.instr) = UJUMP ((yyvsp[0].expr));
5341 1.1 christos }
5342 1.1 christos else
5343 1.1 christos return yyerror ("Bad value for relative jump");
5344 1.1 christos }
5345 1.1.1.2 christos #line 5346 "config/bfin-parse.c"
5346 1.1 christos break;
5347 1.1 christos
5348 1.1 christos case 156: /* asm_1: JUMP_DOT_S expr */
5349 1.1 christos #line 2732 "./config/bfin-parse.y"
5350 1.1 christos {
5351 1.1 christos if (IS_PCREL12 ((yyvsp[0].expr)))
5352 1.1 christos {
5353 1.1 christos notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
5354 1.1 christos (yyval.instr) = UJUMP((yyvsp[0].expr));
5355 1.1 christos }
5356 1.1 christos else
5357 1.1 christos return yyerror ("Bad value for relative jump");
5358 1.1 christos }
5359 1.1.1.2 christos #line 5360 "config/bfin-parse.c"
5360 1.1 christos break;
5361 1.1 christos
5362 1.1 christos case 157: /* asm_1: JUMP_DOT_L expr */
5363 1.1 christos #line 2743 "./config/bfin-parse.y"
5364 1.1 christos {
5365 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5366 1.1 christos {
5367 1.1 christos notethat ("CALLa: jump.l pcrel24\n");
5368 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 0);
5369 1.1 christos }
5370 1.1 christos else
5371 1.1 christos return yyerror ("Bad value for long jump");
5372 1.1 christos }
5373 1.1.1.2 christos #line 5374 "config/bfin-parse.c"
5374 1.1 christos break;
5375 1.1 christos
5376 1.1 christos case 158: /* asm_1: JUMP_DOT_L pltpc */
5377 1.1 christos #line 2754 "./config/bfin-parse.y"
5378 1.1 christos {
5379 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5380 1.1 christos {
5381 1.1 christos notethat ("CALLa: jump.l pcrel24\n");
5382 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5383 1.1 christos }
5384 1.1 christos else
5385 1.1 christos return yyerror ("Bad value for long jump");
5386 1.1 christos }
5387 1.1.1.2 christos #line 5388 "config/bfin-parse.c"
5388 1.1 christos break;
5389 1.1 christos
5390 1.1 christos case 159: /* asm_1: CALL expr */
5391 1.1 christos #line 2765 "./config/bfin-parse.y"
5392 1.1 christos {
5393 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5394 1.1 christos {
5395 1.1 christos notethat ("CALLa: CALL pcrel25m2\n");
5396 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 1);
5397 1.1 christos }
5398 1.1 christos else
5399 1.1 christos return yyerror ("Bad call address");
5400 1.1 christos }
5401 1.1.1.2 christos #line 5402 "config/bfin-parse.c"
5402 1.1 christos break;
5403 1.1 christos
5404 1.1 christos case 160: /* asm_1: CALL pltpc */
5405 1.1 christos #line 2775 "./config/bfin-parse.y"
5406 1.1 christos {
5407 1.1 christos if (IS_PCREL24 ((yyvsp[0].expr)))
5408 1.1 christos {
5409 1.1 christos notethat ("CALLa: CALL pcrel25m2\n");
5410 1.1 christos (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
5411 1.1 christos }
5412 1.1 christos else
5413 1.1 christos return yyerror ("Bad call address");
5414 1.1 christos }
5415 1.1.1.2 christos #line 5416 "config/bfin-parse.c"
5416 1.1 christos break;
5417 1.1 christos
5418 1.1 christos case 161: /* asm_1: DIVQ LPAREN REG COMMA REG RPAREN */
5419 1.1 christos #line 2788 "./config/bfin-parse.y"
5420 1.1 christos {
5421 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5422 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 8);
5423 1.1 christos else
5424 1.1 christos return yyerror ("Bad registers for DIVQ");
5425 1.1 christos }
5426 1.1.1.2 christos #line 5427 "config/bfin-parse.c"
5427 1.1 christos break;
5428 1.1 christos
5429 1.1 christos case 162: /* asm_1: DIVS LPAREN REG COMMA REG RPAREN */
5430 1.1 christos #line 2796 "./config/bfin-parse.y"
5431 1.1 christos {
5432 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
5433 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 9);
5434 1.1 christos else
5435 1.1 christos return yyerror ("Bad registers for DIVS");
5436 1.1 christos }
5437 1.1.1.2 christos #line 5438 "config/bfin-parse.c"
5438 1.1 christos break;
5439 1.1 christos
5440 1.1 christos case 163: /* asm_1: REG ASSIGN MINUS REG vsmod */
5441 1.1 christos #line 2804 "./config/bfin-parse.y"
5442 1.1 christos {
5443 1.1 christos if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
5444 1.1 christos {
5445 1.1 christos if ((yyvsp[0].modcodes).r0 == 0 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 0)
5446 1.1 christos {
5447 1.1 christos notethat ("ALU2op: dregs = - dregs\n");
5448 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-4].reg), &(yyvsp[-1].reg), 14);
5449 1.1 christos }
5450 1.1 christos else if ((yyvsp[0].modcodes).r0 == 1 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 3)
5451 1.1 christos {
5452 1.1 christos notethat ("dsp32alu: dregs = - dregs (.)\n");
5453 1.1 christos (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5454 1.1 christos }
5455 1.1 christos else
5456 1.1 christos {
5457 1.1 christos notethat ("dsp32alu: dregs = - dregs (.)\n");
5458 1.1 christos (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
5459 1.1 christos }
5460 1.1 christos }
5461 1.1 christos else
5462 1.1 christos return yyerror ("Dregs expected");
5463 1.1 christos }
5464 1.1.1.2 christos #line 5465 "config/bfin-parse.c"
5465 1.1 christos break;
5466 1.1 christos
5467 1.1 christos case 164: /* asm_1: REG ASSIGN TILDA REG */
5468 1.1 christos #line 2828 "./config/bfin-parse.y"
5469 1.1 christos {
5470 1.1 christos if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
5471 1.1 christos {
5472 1.1 christos notethat ("ALU2op: dregs = ~dregs\n");
5473 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[0].reg), 15);
5474 1.1 christos }
5475 1.1 christos else
5476 1.1 christos return yyerror ("Dregs expected");
5477 1.1 christos }
5478 1.1.1.2 christos #line 5479 "config/bfin-parse.c"
5479 1.1 christos break;
5480 1.1 christos
5481 1.1 christos case 165: /* asm_1: REG _GREATER_GREATER_ASSIGN REG */
5482 1.1 christos #line 2839 "./config/bfin-parse.y"
5483 1.1 christos {
5484 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5485 1.1 christos {
5486 1.1 christos notethat ("ALU2op: dregs >>= dregs\n");
5487 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1);
5488 1.1 christos }
5489 1.1 christos else
5490 1.1 christos return yyerror ("Dregs expected");
5491 1.1 christos }
5492 1.1.1.2 christos #line 5493 "config/bfin-parse.c"
5493 1.1 christos break;
5494 1.1 christos
5495 1.1 christos case 166: /* asm_1: REG _GREATER_GREATER_ASSIGN expr */
5496 1.1 christos #line 2850 "./config/bfin-parse.y"
5497 1.1 christos {
5498 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5499 1.1 christos {
5500 1.1 christos notethat ("LOGI2op: dregs >>= uimm5\n");
5501 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 6);
5502 1.1 christos }
5503 1.1 christos else
5504 1.1 christos return yyerror ("Dregs expected or value error");
5505 1.1 christos }
5506 1.1.1.2 christos #line 5507 "config/bfin-parse.c"
5507 1.1 christos break;
5508 1.1 christos
5509 1.1 christos case 167: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN REG */
5510 1.1 christos #line 2861 "./config/bfin-parse.y"
5511 1.1 christos {
5512 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5513 1.1 christos {
5514 1.1 christos notethat ("ALU2op: dregs >>>= dregs\n");
5515 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
5516 1.1 christos }
5517 1.1 christos else
5518 1.1 christos return yyerror ("Dregs expected");
5519 1.1 christos }
5520 1.1.1.2 christos #line 5521 "config/bfin-parse.c"
5521 1.1 christos break;
5522 1.1 christos
5523 1.1 christos case 168: /* asm_1: REG _LESS_LESS_ASSIGN REG */
5524 1.1 christos #line 2872 "./config/bfin-parse.y"
5525 1.1 christos {
5526 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
5527 1.1 christos {
5528 1.1 christos notethat ("ALU2op: dregs <<= dregs\n");
5529 1.1 christos (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
5530 1.1 christos }
5531 1.1 christos else
5532 1.1 christos return yyerror ("Dregs expected");
5533 1.1 christos }
5534 1.1.1.2 christos #line 5535 "config/bfin-parse.c"
5535 1.1 christos break;
5536 1.1 christos
5537 1.1 christos case 169: /* asm_1: REG _LESS_LESS_ASSIGN expr */
5538 1.1 christos #line 2883 "./config/bfin-parse.y"
5539 1.1 christos {
5540 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5541 1.1 christos {
5542 1.1 christos notethat ("LOGI2op: dregs <<= uimm5\n");
5543 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 7);
5544 1.1 christos }
5545 1.1 christos else
5546 1.1 christos return yyerror ("Dregs expected or const value error");
5547 1.1 christos }
5548 1.1.1.2 christos #line 5549 "config/bfin-parse.c"
5549 1.1 christos break;
5550 1.1 christos
5551 1.1 christos case 170: /* asm_1: REG _GREATER_GREATER_GREATER_THAN_ASSIGN expr */
5552 1.1 christos #line 2895 "./config/bfin-parse.y"
5553 1.1 christos {
5554 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
5555 1.1 christos {
5556 1.1 christos notethat ("LOGI2op: dregs >>>= uimm5\n");
5557 1.1 christos (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 5);
5558 1.1 christos }
5559 1.1 christos else
5560 1.1 christos return yyerror ("Dregs expected");
5561 1.1 christos }
5562 1.1.1.2 christos #line 5563 "config/bfin-parse.c"
5563 1.1 christos break;
5564 1.1 christos
5565 1.1 christos case 171: /* asm_1: FLUSH LBRACK REG RBRACK */
5566 1.1 christos #line 2908 "./config/bfin-parse.y"
5567 1.1 christos {
5568 1.1 christos notethat ("CaCTRL: FLUSH [ pregs ]\n");
5569 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5570 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 2);
5571 1.1 christos else
5572 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5573 1.1 christos }
5574 1.1.1.2 christos #line 5575 "config/bfin-parse.c"
5575 1.1 christos break;
5576 1.1 christos
5577 1.1 christos case 172: /* asm_1: FLUSH reg_with_postinc */
5578 1.1 christos #line 2917 "./config/bfin-parse.y"
5579 1.1 christos {
5580 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5581 1.1 christos {
5582 1.1 christos notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
5583 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 2);
5584 1.1 christos }
5585 1.1 christos else
5586 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5587 1.1 christos }
5588 1.1.1.2 christos #line 5589 "config/bfin-parse.c"
5589 1.1 christos break;
5590 1.1 christos
5591 1.1 christos case 173: /* asm_1: FLUSHINV LBRACK REG RBRACK */
5592 1.1 christos #line 2928 "./config/bfin-parse.y"
5593 1.1 christos {
5594 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5595 1.1 christos {
5596 1.1 christos notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
5597 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 1);
5598 1.1 christos }
5599 1.1 christos else
5600 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5601 1.1 christos }
5602 1.1.1.2 christos #line 5603 "config/bfin-parse.c"
5603 1.1 christos break;
5604 1.1 christos
5605 1.1 christos case 174: /* asm_1: FLUSHINV reg_with_postinc */
5606 1.1 christos #line 2939 "./config/bfin-parse.y"
5607 1.1 christos {
5608 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5609 1.1 christos {
5610 1.1 christos notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
5611 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 1);
5612 1.1 christos }
5613 1.1 christos else
5614 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5615 1.1 christos }
5616 1.1.1.2 christos #line 5617 "config/bfin-parse.c"
5617 1.1 christos break;
5618 1.1 christos
5619 1.1 christos case 175: /* asm_1: IFLUSH LBRACK REG RBRACK */
5620 1.1 christos #line 2951 "./config/bfin-parse.y"
5621 1.1 christos {
5622 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5623 1.1 christos {
5624 1.1 christos notethat ("CaCTRL: IFLUSH [ pregs ]\n");
5625 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 3);
5626 1.1 christos }
5627 1.1 christos else
5628 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5629 1.1 christos }
5630 1.1.1.2 christos #line 5631 "config/bfin-parse.c"
5631 1.1 christos break;
5632 1.1 christos
5633 1.1 christos case 176: /* asm_1: IFLUSH reg_with_postinc */
5634 1.1 christos #line 2962 "./config/bfin-parse.y"
5635 1.1 christos {
5636 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5637 1.1 christos {
5638 1.1 christos notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
5639 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 3);
5640 1.1 christos }
5641 1.1 christos else
5642 1.1 christos return yyerror ("Bad register(s) for FLUSH");
5643 1.1 christos }
5644 1.1.1.2 christos #line 5645 "config/bfin-parse.c"
5645 1.1 christos break;
5646 1.1 christos
5647 1.1 christos case 177: /* asm_1: PREFETCH LBRACK REG RBRACK */
5648 1.1 christos #line 2973 "./config/bfin-parse.y"
5649 1.1 christos {
5650 1.1 christos if (IS_PREG ((yyvsp[-1].reg)))
5651 1.1 christos {
5652 1.1 christos notethat ("CaCTRL: PREFETCH [ pregs ]\n");
5653 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 0);
5654 1.1 christos }
5655 1.1 christos else
5656 1.1 christos return yyerror ("Bad register(s) for PREFETCH");
5657 1.1 christos }
5658 1.1.1.2 christos #line 5659 "config/bfin-parse.c"
5659 1.1 christos break;
5660 1.1 christos
5661 1.1 christos case 178: /* asm_1: PREFETCH reg_with_postinc */
5662 1.1 christos #line 2984 "./config/bfin-parse.y"
5663 1.1 christos {
5664 1.1 christos if (IS_PREG ((yyvsp[0].reg)))
5665 1.1 christos {
5666 1.1 christos notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
5667 1.1 christos (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 0);
5668 1.1 christos }
5669 1.1 christos else
5670 1.1 christos return yyerror ("Bad register(s) for PREFETCH");
5671 1.1 christos }
5672 1.1.1.2 christos #line 5673 "config/bfin-parse.c"
5673 1.1 christos break;
5674 1.1 christos
5675 1.1 christos case 179: /* asm_1: B LBRACK REG post_op RBRACK ASSIGN REG */
5676 1.1 christos #line 2998 "./config/bfin-parse.y"
5677 1.1 christos {
5678 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5679 1.1 christos return yyerror ("Dreg expected for source operand");
5680 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5681 1.1 christos return yyerror ("Preg expected in address");
5682 1.1 christos
5683 1.1 christos notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
5684 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 2, 0, 1);
5685 1.1 christos }
5686 1.1.1.2 christos #line 5687 "config/bfin-parse.c"
5687 1.1 christos break;
5688 1.1 christos
5689 1.1 christos case 180: /* asm_1: B LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5690 1.1 christos #line 3010 "./config/bfin-parse.y"
5691 1.1 christos {
5692 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5693 1.1 christos
5694 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5695 1.1 christos return yyerror ("Dreg expected for source operand");
5696 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5697 1.1 christos return yyerror ("Preg expected in address");
5698 1.1 christos
5699 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5700 1.1 christos return yyerror ("Plain symbol used as offset");
5701 1.1 christos
5702 1.1 christos if ((yyvsp[-4].r0).r0)
5703 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5704 1.1 christos
5705 1.1 christos if (in_range_p (tmp, -32768, 32767, 0))
5706 1.1 christos {
5707 1.1 christos notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
5708 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 2, 0, (yyvsp[-3].expr));
5709 1.1 christos }
5710 1.1 christos else
5711 1.1 christos return yyerror ("Displacement out of range");
5712 1.1 christos }
5713 1.1.1.2 christos #line 5714 "config/bfin-parse.c"
5714 1.1 christos break;
5715 1.1 christos
5716 1.1 christos case 181: /* asm_1: W LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5717 1.1 christos #line 3036 "./config/bfin-parse.y"
5718 1.1 christos {
5719 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5720 1.1 christos
5721 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5722 1.1 christos return yyerror ("Dreg expected for source operand");
5723 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5724 1.1 christos return yyerror ("Preg expected in address");
5725 1.1 christos
5726 1.1 christos if ((yyvsp[-4].r0).r0)
5727 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5728 1.1 christos
5729 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5730 1.1 christos return yyerror ("Plain symbol used as offset");
5731 1.1 christos
5732 1.1 christos if (in_range_p (tmp, 0, 30, 1))
5733 1.1 christos {
5734 1.1 christos notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
5735 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, 1);
5736 1.1 christos }
5737 1.1 christos else if (in_range_p (tmp, -65536, 65535, 1))
5738 1.1 christos {
5739 1.1 christos notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
5740 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 1, 0, tmp);
5741 1.1 christos }
5742 1.1 christos else
5743 1.1 christos return yyerror ("Displacement out of range");
5744 1.1 christos }
5745 1.1.1.2 christos #line 5746 "config/bfin-parse.c"
5746 1.1 christos break;
5747 1.1 christos
5748 1.1 christos case 182: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN REG */
5749 1.1 christos #line 3066 "./config/bfin-parse.y"
5750 1.1 christos {
5751 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5752 1.1 christos return yyerror ("Dreg expected for source operand");
5753 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5754 1.1 christos return yyerror ("Preg expected in address");
5755 1.1 christos
5756 1.1 christos notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
5757 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1, 0, 1);
5758 1.1 christos }
5759 1.1.1.2 christos #line 5760 "config/bfin-parse.c"
5760 1.1 christos break;
5761 1.1 christos
5762 1.1 christos case 183: /* asm_1: W LBRACK REG post_op RBRACK ASSIGN HALF_REG */
5763 1.1 christos #line 3077 "./config/bfin-parse.y"
5764 1.1 christos {
5765 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5766 1.1 christos return yyerror ("Dreg expected for source operand");
5767 1.1 christos if ((yyvsp[-3].modcodes).x0 == 2)
5768 1.1 christos {
5769 1.1 christos if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
5770 1.1 christos return yyerror ("Ireg or Preg expected in address");
5771 1.1 christos }
5772 1.1 christos else if (!IS_IREG ((yyvsp[-4].reg)))
5773 1.1 christos return yyerror ("Ireg expected in address");
5774 1.1 christos
5775 1.1 christos if (IS_IREG ((yyvsp[-4].reg)))
5776 1.1 christos {
5777 1.1 christos notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
5778 1.1 christos (yyval.instr) = DSPLDST (&(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5779 1.1 christos }
5780 1.1 christos else
5781 1.1 christos {
5782 1.1 christos notethat ("LDSTpmod: W [ pregs ] = dregs_half\n");
5783 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[0].reg), &(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5784 1.1 christos }
5785 1.1 christos }
5786 1.1.1.2 christos #line 5787 "config/bfin-parse.c"
5787 1.1 christos break;
5788 1.1 christos
5789 1.1 christos case 184: /* asm_1: LBRACK REG plus_minus expr RBRACK ASSIGN REG */
5790 1.1 christos #line 3102 "./config/bfin-parse.y"
5791 1.1 christos {
5792 1.1 christos Expr_Node *tmp = (yyvsp[-3].expr);
5793 1.1 christos int ispreg = IS_PREG ((yyvsp[0].reg));
5794 1.1 christos
5795 1.1 christos if (!IS_PREG ((yyvsp[-5].reg)))
5796 1.1 christos return yyerror ("Preg expected in address");
5797 1.1 christos
5798 1.1 christos if (!IS_DREG ((yyvsp[0].reg)) && !ispreg)
5799 1.1 christos return yyerror ("Preg expected for source operand");
5800 1.1 christos
5801 1.1 christos if ((yyvsp[-4].r0).r0)
5802 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5803 1.1 christos
5804 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)))
5805 1.1 christos return yyerror ("Plain symbol used as offset");
5806 1.1 christos
5807 1.1 christos if (in_range_p (tmp, 0, 63, 3))
5808 1.1 christos {
5809 1.1 christos notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
5810 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, ispreg ? 3 : 0);
5811 1.1 christos }
5812 1.1 christos else if ((yyvsp[-5].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
5813 1.1 christos {
5814 1.1 christos notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
5815 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5816 1.1 christos (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[0].reg), 1);
5817 1.1 christos }
5818 1.1 christos else if (in_range_p (tmp, -131072, 131071, 3))
5819 1.1 christos {
5820 1.1 christos notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
5821 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 0, ispreg ? 1 : 0, tmp);
5822 1.1 christos }
5823 1.1 christos else
5824 1.1 christos return yyerror ("Displacement out of range");
5825 1.1 christos }
5826 1.1.1.2 christos #line 5827 "config/bfin-parse.c"
5827 1.1 christos break;
5828 1.1 christos
5829 1.1 christos case 185: /* asm_1: REG ASSIGN W LBRACK REG plus_minus expr RBRACK xpmod */
5830 1.1 christos #line 3139 "./config/bfin-parse.y"
5831 1.1 christos {
5832 1.1 christos Expr_Node *tmp = (yyvsp[-2].expr);
5833 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
5834 1.1 christos return yyerror ("Dreg expected for destination operand");
5835 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
5836 1.1 christos return yyerror ("Preg expected in address");
5837 1.1 christos
5838 1.1 christos if ((yyvsp[-3].r0).r0)
5839 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
5840 1.1 christos
5841 1.1 christos if (IS_RELOC ((yyvsp[-2].expr)))
5842 1.1 christos return yyerror ("Plain symbol used as offset");
5843 1.1 christos
5844 1.1 christos if (in_range_p (tmp, 0, 30, 1))
5845 1.1 christos {
5846 1.1 christos notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n");
5847 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-4].reg), &(yyvsp[-8].reg), tmp, 0, 1 << (yyvsp[0].r0).r0);
5848 1.1 christos }
5849 1.1 christos else if (in_range_p (tmp, -65536, 65535, 1))
5850 1.1 christos {
5851 1.1 christos notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
5852 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 1, (yyvsp[0].r0).r0, tmp);
5853 1.1 christos }
5854 1.1 christos else
5855 1.1 christos return yyerror ("Displacement out of range");
5856 1.1 christos }
5857 1.1.1.2 christos #line 5858 "config/bfin-parse.c"
5858 1.1 christos break;
5859 1.1 christos
5860 1.1 christos case 186: /* asm_1: HALF_REG ASSIGN W LBRACK REG post_op RBRACK */
5861 1.1 christos #line 3167 "./config/bfin-parse.y"
5862 1.1 christos {
5863 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)))
5864 1.1 christos return yyerror ("Dreg expected for source operand");
5865 1.1 christos if ((yyvsp[-1].modcodes).x0 == 2)
5866 1.1 christos {
5867 1.1 christos if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
5868 1.1 christos return yyerror ("Ireg or Preg expected in address");
5869 1.1 christos }
5870 1.1 christos else if (!IS_IREG ((yyvsp[-2].reg)))
5871 1.1 christos return yyerror ("Ireg expected in address");
5872 1.1 christos
5873 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
5874 1.1 christos {
5875 1.1 christos notethat ("dspLDST: dregs_half = W [ iregs <post_op> ]\n");
5876 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), &(yyvsp[-6].reg), (yyvsp[-1].modcodes).x0, 0);
5877 1.1 christos }
5878 1.1 christos else
5879 1.1 christos {
5880 1.1 christos notethat ("LDSTpmod: dregs_half = W [ pregs <post_op> ]\n");
5881 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-2].reg), &(yyvsp[-6].reg), &(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), 0);
5882 1.1 christos }
5883 1.1 christos }
5884 1.1.1.2 christos #line 5885 "config/bfin-parse.c"
5885 1.1 christos break;
5886 1.1 christos
5887 1.1 christos case 187: /* asm_1: REG ASSIGN W LBRACK REG post_op RBRACK xpmod */
5888 1.1 christos #line 3192 "./config/bfin-parse.y"
5889 1.1 christos {
5890 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
5891 1.1 christos return yyerror ("Dreg expected for destination operand");
5892 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
5893 1.1 christos return yyerror ("Preg expected in address");
5894 1.1 christos
5895 1.1 christos notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
5896 1.1 christos (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 1, (yyvsp[0].r0).r0, 0);
5897 1.1 christos }
5898 1.1.1.2 christos #line 5899 "config/bfin-parse.c"
5899 1.1 christos break;
5900 1.1 christos
5901 1.1 christos case 188: /* asm_1: REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK xpmod */
5902 1.1 christos #line 3203 "./config/bfin-parse.y"
5903 1.1 christos {
5904 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
5905 1.1 christos return yyerror ("Dreg expected for destination operand");
5906 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)) || !IS_PREG ((yyvsp[-2].reg)))
5907 1.1 christos return yyerror ("Preg expected in address");
5908 1.1 christos
5909 1.1 christos notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
5910 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[-8].reg), &(yyvsp[-2].reg), 3, (yyvsp[0].r0).r0);
5911 1.1 christos }
5912 1.1.1.2 christos #line 5913 "config/bfin-parse.c"
5913 1.1 christos break;
5914 1.1 christos
5915 1.1 christos case 189: /* asm_1: HALF_REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK */
5916 1.1 christos #line 3214 "./config/bfin-parse.y"
5917 1.1 christos {
5918 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
5919 1.1 christos return yyerror ("Dreg expected for destination operand");
5920 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)) || !IS_PREG ((yyvsp[-1].reg)))
5921 1.1 christos return yyerror ("Preg expected in address");
5922 1.1 christos
5923 1.1 christos notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
5924 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-7].reg), &(yyvsp[-1].reg), 1 + IS_H ((yyvsp[-7].reg)), 0);
5925 1.1 christos }
5926 1.1.1.2 christos #line 5927 "config/bfin-parse.c"
5927 1.1 christos break;
5928 1.1 christos
5929 1.1 christos case 190: /* asm_1: LBRACK REG post_op RBRACK ASSIGN REG */
5930 1.1 christos #line 3225 "./config/bfin-parse.y"
5931 1.1 christos {
5932 1.1 christos if (!IS_IREG ((yyvsp[-4].reg)) && !IS_PREG ((yyvsp[-4].reg)))
5933 1.1 christos return yyerror ("Ireg or Preg expected in address");
5934 1.1 christos else if (IS_IREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)))
5935 1.1 christos return yyerror ("Dreg expected for source operand");
5936 1.1 christos else if (IS_PREG ((yyvsp[-4].reg)) && !IS_DREG ((yyvsp[0].reg)) && !IS_PREG ((yyvsp[0].reg)))
5937 1.1 christos return yyerror ("Dreg or Preg expected for source operand");
5938 1.1 christos
5939 1.1 christos if (IS_IREG ((yyvsp[-4].reg)))
5940 1.1 christos {
5941 1.1 christos notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
5942 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-4].reg), 0, &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
5943 1.1 christos }
5944 1.1 christos else if (IS_DREG ((yyvsp[0].reg)))
5945 1.1 christos {
5946 1.1 christos notethat ("LDST: [ pregs <post_op> ] = dregs\n");
5947 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 0, 1);
5948 1.1 christos }
5949 1.1 christos else
5950 1.1 christos {
5951 1.1 christos notethat ("LDST: [ pregs <post_op> ] = pregs\n");
5952 1.1 christos (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 1, 1);
5953 1.1 christos }
5954 1.1 christos }
5955 1.1.1.2 christos #line 5956 "config/bfin-parse.c"
5956 1.1 christos break;
5957 1.1 christos
5958 1.1 christos case 191: /* asm_1: LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN REG */
5959 1.1 christos #line 3251 "./config/bfin-parse.y"
5960 1.1 christos {
5961 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5962 1.1 christos return yyerror ("Dreg expected for source operand");
5963 1.1 christos
5964 1.1 christos if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
5965 1.1 christos {
5966 1.1 christos notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
5967 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-5].reg), (yyvsp[-3].reg).regno & CODE_MASK, &(yyvsp[0].reg), 3, 1);
5968 1.1 christos }
5969 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5970 1.1 christos {
5971 1.1 christos notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
5972 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 0, 1);
5973 1.1 christos }
5974 1.1 christos else
5975 1.1 christos return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
5976 1.1 christos }
5977 1.1.1.2 christos #line 5978 "config/bfin-parse.c"
5978 1.1 christos break;
5979 1.1 christos
5980 1.1 christos case 192: /* asm_1: W LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN HALF_REG */
5981 1.1 christos #line 3270 "./config/bfin-parse.y"
5982 1.1 christos {
5983 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
5984 1.1 christos return yyerror ("Dreg expected for source operand");
5985 1.1 christos
5986 1.1 christos if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
5987 1.1 christos {
5988 1.1 christos notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
5989 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
5990 1.1 christos }
5991 1.1 christos else
5992 1.1 christos return yyerror ("Preg ++ Preg expected in address");
5993 1.1 christos }
5994 1.1.1.2 christos #line 5995 "config/bfin-parse.c"
5995 1.1 christos break;
5996 1.1 christos
5997 1.1 christos case 193: /* asm_1: REG ASSIGN B LBRACK REG plus_minus expr RBRACK xpmod */
5998 1.1 christos #line 3284 "./config/bfin-parse.y"
5999 1.1 christos {
6000 1.1 christos Expr_Node *tmp = (yyvsp[-2].expr);
6001 1.1 christos if (!IS_DREG ((yyvsp[-8].reg)))
6002 1.1 christos return yyerror ("Dreg expected for destination operand");
6003 1.1 christos if (!IS_PREG ((yyvsp[-4].reg)))
6004 1.1 christos return yyerror ("Preg expected in address");
6005 1.1 christos
6006 1.1 christos if ((yyvsp[-3].r0).r0)
6007 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6008 1.1 christos
6009 1.1 christos if (IS_RELOC ((yyvsp[-2].expr)))
6010 1.1 christos return yyerror ("Plain symbol used as offset");
6011 1.1 christos
6012 1.1 christos if (in_range_p (tmp, -32768, 32767, 0))
6013 1.1 christos {
6014 1.1 christos notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
6015 1.1 christos (yyvsp[0].r0).r0 ? 'X' : 'Z');
6016 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 2, (yyvsp[0].r0).r0, tmp);
6017 1.1 christos }
6018 1.1 christos else
6019 1.1 christos return yyerror ("Displacement out of range");
6020 1.1 christos }
6021 1.1.1.2 christos #line 6022 "config/bfin-parse.c"
6022 1.1 christos break;
6023 1.1 christos
6024 1.1 christos case 194: /* asm_1: REG ASSIGN B LBRACK REG post_op RBRACK xpmod */
6025 1.1 christos #line 3308 "./config/bfin-parse.y"
6026 1.1 christos {
6027 1.1 christos if (!IS_DREG ((yyvsp[-7].reg)))
6028 1.1 christos return yyerror ("Dreg expected for destination operand");
6029 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
6030 1.1 christos return yyerror ("Preg expected in address");
6031 1.1 christos
6032 1.1 christos notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
6033 1.1 christos (yyvsp[0].r0).r0 ? 'X' : 'Z');
6034 1.1 christos (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 2, (yyvsp[0].r0).r0, 0);
6035 1.1 christos }
6036 1.1.1.2 christos #line 6037 "config/bfin-parse.c"
6037 1.1 christos break;
6038 1.1 christos
6039 1.1 christos case 195: /* asm_1: REG ASSIGN LBRACK REG _PLUS_PLUS REG RBRACK */
6040 1.1 christos #line 3320 "./config/bfin-parse.y"
6041 1.1 christos {
6042 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)))
6043 1.1 christos return yyerror ("Dreg expected for destination operand");
6044 1.1 christos
6045 1.1 christos if (IS_IREG ((yyvsp[-3].reg)) && IS_MREG ((yyvsp[-1].reg)))
6046 1.1 christos {
6047 1.1 christos notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
6048 1.1 christos (yyval.instr) = DSPLDST(&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, &(yyvsp[-6].reg), 3, 0);
6049 1.1 christos }
6050 1.1 christos else if (IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
6051 1.1 christos {
6052 1.1 christos notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
6053 1.1 christos (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-6].reg), &(yyvsp[-1].reg), 0, 0);
6054 1.1 christos }
6055 1.1 christos else
6056 1.1 christos return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
6057 1.1 christos }
6058 1.1.1.2 christos #line 6059 "config/bfin-parse.c"
6059 1.1 christos break;
6060 1.1 christos
6061 1.1 christos case 196: /* asm_1: REG ASSIGN LBRACK REG plus_minus got_or_expr RBRACK */
6062 1.1 christos #line 3339 "./config/bfin-parse.y"
6063 1.1 christos {
6064 1.1 christos Expr_Node *tmp = (yyvsp[-1].expr);
6065 1.1 christos int ispreg = IS_PREG ((yyvsp[-6].reg));
6066 1.1 christos int isgot = IS_RELOC((yyvsp[-1].expr));
6067 1.1 christos
6068 1.1 christos if (!IS_PREG ((yyvsp[-3].reg)))
6069 1.1 christos return yyerror ("Preg expected in address");
6070 1.1 christos
6071 1.1 christos if (!IS_DREG ((yyvsp[-6].reg)) && !ispreg)
6072 1.1 christos return yyerror ("Dreg or Preg expected for destination operand");
6073 1.1 christos
6074 1.1 christos if (tmp->type == Expr_Node_Reloc
6075 1.1 christos && strcmp (tmp->value.s_value,
6076 1.1 christos "_current_shared_library_p5_offset_") != 0)
6077 1.1 christos return yyerror ("Plain symbol used as offset");
6078 1.1 christos
6079 1.1 christos if ((yyvsp[-2].r0).r0)
6080 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6081 1.1 christos
6082 1.1 christos if (isgot)
6083 1.1 christos {
6084 1.1 christos notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
6085 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
6086 1.1 christos }
6087 1.1 christos else if (in_range_p (tmp, 0, 63, 3))
6088 1.1 christos {
6089 1.1 christos notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
6090 1.1 christos (yyval.instr) = LDSTII (&(yyvsp[-3].reg), &(yyvsp[-6].reg), tmp, 0, ispreg ? 3 : 0);
6091 1.1 christos }
6092 1.1 christos else if ((yyvsp[-3].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
6093 1.1 christos {
6094 1.1 christos notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
6095 1.1 christos tmp = unary (Expr_Op_Type_NEG, tmp);
6096 1.1 christos (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[-6].reg), 0);
6097 1.1 christos }
6098 1.1 christos else if (in_range_p (tmp, -131072, 131071, 3))
6099 1.1 christos {
6100 1.1 christos notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
6101 1.1 christos (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1 : 0, tmp);
6102 1.1 christos
6103 1.1 christos }
6104 1.1 christos else
6105 1.1 christos return yyerror ("Displacement out of range");
6106 1.1 christos }
6107 1.1.1.2 christos #line 6108 "config/bfin-parse.c"
6108 1.1 christos break;
6109 1.1 christos
6110 1.1 christos case 197: /* asm_1: REG ASSIGN LBRACK REG post_op RBRACK */
6111 1.1 christos #line 3385 "./config/bfin-parse.y"
6112 1.1 christos {
6113 1.1 christos if (!IS_IREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)))
6114 1.1 christos return yyerror ("Ireg or Preg expected in address");
6115 1.1 christos else if (IS_IREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)))
6116 1.1 christos return yyerror ("Dreg expected in destination operand");
6117 1.1 christos else if (IS_PREG ((yyvsp[-2].reg)) && !IS_DREG ((yyvsp[-5].reg)) && !IS_PREG ((yyvsp[-5].reg))
6118 1.1 christos && ((yyvsp[-2].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[-5].reg)) || (yyvsp[-1].modcodes).x0 != 0))
6119 1.1 christos return yyerror ("Dreg or Preg expected in destination operand");
6120 1.1 christos
6121 1.1 christos if (IS_IREG ((yyvsp[-2].reg)))
6122 1.1 christos {
6123 1.1 christos notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
6124 1.1 christos (yyval.instr) = DSPLDST (&(yyvsp[-2].reg), 0, &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0);
6125 1.1 christos }
6126 1.1 christos else if (IS_DREG ((yyvsp[-5].reg)))
6127 1.1 christos {
6128 1.1 christos notethat ("LDST: dregs = [ pregs <post_op> ]\n");
6129 1.1 christos (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 0, 0);
6130 1.1 christos }
6131 1.1 christos else if (IS_PREG ((yyvsp[-5].reg)))
6132 1.1 christos {
6133 1.1 christos if (REG_SAME ((yyvsp[-5].reg), (yyvsp[-2].reg)) && (yyvsp[-1].modcodes).x0 != 2)
6134 1.1 christos return yyerror ("Pregs can't be same");
6135 1.1 christos
6136 1.1 christos notethat ("LDST: pregs = [ pregs <post_op> ]\n");
6137 1.1 christos (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 1, 0);
6138 1.1 christos }
6139 1.1 christos else
6140 1.1 christos {
6141 1.1 christos notethat ("PushPopReg: allregs = [ SP ++ ]\n");
6142 1.1 christos (yyval.instr) = PUSHPOPREG (&(yyvsp[-5].reg), 0);
6143 1.1 christos }
6144 1.1 christos }
6145 1.1.1.2 christos #line 6146 "config/bfin-parse.c"
6146 1.1 christos break;
6147 1.1 christos
6148 1.1 christos case 198: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr COMMA REG COLON expr RPAREN */
6149 1.1 christos #line 3422 "./config/bfin-parse.y"
6150 1.1 christos {
6151 1.1 christos if ((yyvsp[-10].reg).regno != REG_SP)
6152 1.1 christos yyerror ("Stack Pointer expected");
6153 1.1 christos if ((yyvsp[-7].reg).regno == REG_R7
6154 1.1 christos && IN_RANGE ((yyvsp[-5].expr), 0, 7)
6155 1.1 christos && (yyvsp[-3].reg).regno == REG_P5
6156 1.1 christos && IN_RANGE ((yyvsp[-1].expr), 0, 5))
6157 1.1 christos {
6158 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
6159 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-5].expr)), imm5 ((yyvsp[-1].expr)), 1, 1, 1);
6160 1.1 christos }
6161 1.1 christos else
6162 1.1 christos return yyerror ("Bad register for PushPopMultiple");
6163 1.1 christos }
6164 1.1.1.2 christos #line 6165 "config/bfin-parse.c"
6165 1.1 christos break;
6166 1.1 christos
6167 1.1 christos case 199: /* asm_1: reg_with_predec ASSIGN LPAREN REG COLON expr RPAREN */
6168 1.1 christos #line 3438 "./config/bfin-parse.y"
6169 1.1 christos {
6170 1.1 christos if ((yyvsp[-6].reg).regno != REG_SP)
6171 1.1 christos yyerror ("Stack Pointer expected");
6172 1.1 christos
6173 1.1 christos if ((yyvsp[-3].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-1].expr), 0, 7))
6174 1.1 christos {
6175 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
6176 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-1].expr)), 0, 1, 0, 1);
6177 1.1 christos }
6178 1.1 christos else if ((yyvsp[-3].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-1].expr), 0, 6))
6179 1.1 christos {
6180 1.1 christos notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
6181 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-1].expr)), 0, 1, 1);
6182 1.1 christos }
6183 1.1 christos else
6184 1.1 christos return yyerror ("Bad register for PushPopMultiple");
6185 1.1 christos }
6186 1.1.1.2 christos #line 6187 "config/bfin-parse.c"
6187 1.1 christos break;
6188 1.1 christos
6189 1.1 christos case 200: /* asm_1: LPAREN REG COLON expr COMMA REG COLON expr RPAREN ASSIGN reg_with_postinc */
6190 1.1 christos #line 3457 "./config/bfin-parse.y"
6191 1.1 christos {
6192 1.1 christos if ((yyvsp[0].reg).regno != REG_SP)
6193 1.1 christos yyerror ("Stack Pointer expected");
6194 1.1 christos if ((yyvsp[-9].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[-7].expr), 0, 7))
6195 1.1 christos && (yyvsp[-5].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[-3].expr), 0, 6)))
6196 1.1 christos {
6197 1.1 christos notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
6198 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-7].expr)), imm5 ((yyvsp[-3].expr)), 1, 1, 0);
6199 1.1 christos }
6200 1.1 christos else
6201 1.1 christos return yyerror ("Bad register range for PushPopMultiple");
6202 1.1 christos }
6203 1.1.1.2 christos #line 6204 "config/bfin-parse.c"
6204 1.1 christos break;
6205 1.1 christos
6206 1.1 christos case 201: /* asm_1: LPAREN REG COLON expr RPAREN ASSIGN reg_with_postinc */
6207 1.1 christos #line 3471 "./config/bfin-parse.y"
6208 1.1 christos {
6209 1.1 christos if ((yyvsp[0].reg).regno != REG_SP)
6210 1.1 christos yyerror ("Stack Pointer expected");
6211 1.1 christos
6212 1.1 christos if ((yyvsp[-5].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-3].expr), 0, 7))
6213 1.1 christos {
6214 1.1 christos notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
6215 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-3].expr)), 0, 1, 0, 0);
6216 1.1 christos }
6217 1.1 christos else if ((yyvsp[-5].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-3].expr), 0, 6))
6218 1.1 christos {
6219 1.1 christos notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
6220 1.1 christos (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-3].expr)), 0, 1, 0);
6221 1.1 christos }
6222 1.1 christos else
6223 1.1 christos return yyerror ("Bad register range for PushPopMultiple");
6224 1.1 christos }
6225 1.1.1.2 christos #line 6226 "config/bfin-parse.c"
6226 1.1 christos break;
6227 1.1 christos
6228 1.1 christos case 202: /* asm_1: reg_with_predec ASSIGN REG */
6229 1.1 christos #line 3490 "./config/bfin-parse.y"
6230 1.1 christos {
6231 1.1 christos if ((yyvsp[-2].reg).regno != REG_SP)
6232 1.1 christos yyerror ("Stack Pointer expected");
6233 1.1 christos
6234 1.1 christos if (IS_ALLREG ((yyvsp[0].reg)))
6235 1.1 christos {
6236 1.1 christos notethat ("PushPopReg: [ -- SP ] = allregs\n");
6237 1.1 christos (yyval.instr) = PUSHPOPREG (&(yyvsp[0].reg), 1);
6238 1.1 christos }
6239 1.1 christos else
6240 1.1 christos return yyerror ("Bad register for PushPopReg");
6241 1.1 christos }
6242 1.1.1.2 christos #line 6243 "config/bfin-parse.c"
6243 1.1 christos break;
6244 1.1 christos
6245 1.1 christos case 203: /* asm_1: LINK expr */
6246 1.1 christos #line 3506 "./config/bfin-parse.y"
6247 1.1 christos {
6248 1.1 christos if (IS_URANGE (16, (yyvsp[0].expr), 0, 4))
6249 1.1 christos (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[0].expr)));
6250 1.1 christos else
6251 1.1 christos return yyerror ("Bad constant for LINK");
6252 1.1 christos }
6253 1.1.1.2 christos #line 6254 "config/bfin-parse.c"
6254 1.1 christos break;
6255 1.1 christos
6256 1.1 christos case 204: /* asm_1: UNLINK */
6257 1.1 christos #line 3514 "./config/bfin-parse.y"
6258 1.1 christos {
6259 1.1 christos notethat ("linkage: UNLINK\n");
6260 1.1 christos (yyval.instr) = LINKAGE (1, 0);
6261 1.1 christos }
6262 1.1.1.2 christos #line 6263 "config/bfin-parse.c"
6263 1.1 christos break;
6264 1.1 christos
6265 1.1 christos case 205: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG */
6266 1.1 christos #line 3523 "./config/bfin-parse.y"
6267 1.1 christos {
6268 1.1 christos if (IS_PCREL4 ((yyvsp[-4].expr)) && IS_LPPCREL10 ((yyvsp[-2].expr)) && IS_CREG ((yyvsp[0].reg)))
6269 1.1 christos {
6270 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
6271 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-4].expr), &(yyvsp[0].reg), 0, (yyvsp[-2].expr), 0);
6272 1.1 christos }
6273 1.1 christos else
6274 1.1 christos return yyerror ("Bad register or values for LSETUP");
6275 1.1 christos
6276 1.1 christos }
6277 1.1.1.2 christos #line 6278 "config/bfin-parse.c"
6278 1.1 christos break;
6279 1.1 christos
6280 1.1 christos case 206: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG */
6281 1.1 christos #line 3534 "./config/bfin-parse.y"
6282 1.1 christos {
6283 1.1 christos if (IS_PCREL4 ((yyvsp[-6].expr)) && IS_LPPCREL10 ((yyvsp[-4].expr))
6284 1.1 christos && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
6285 1.1 christos {
6286 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
6287 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-6].expr), &(yyvsp[-2].reg), 1, (yyvsp[-4].expr), &(yyvsp[0].reg));
6288 1.1 christos }
6289 1.1 christos else
6290 1.1 christos return yyerror ("Bad register or values for LSETUP");
6291 1.1 christos }
6292 1.1.1.2 christos #line 6293 "config/bfin-parse.c"
6293 1.1 christos break;
6294 1.1 christos
6295 1.1 christos case 207: /* asm_1: LSETUP LPAREN expr COMMA expr RPAREN REG ASSIGN REG GREATER_GREATER expr */
6296 1.1 christos #line 3546 "./config/bfin-parse.y"
6297 1.1 christos {
6298 1.1 christos if (IS_PCREL4 ((yyvsp[-8].expr)) && IS_LPPCREL10 ((yyvsp[-6].expr))
6299 1.1 christos && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg))
6300 1.1 christos && EXPR_VALUE ((yyvsp[0].expr)) == 1)
6301 1.1 christos {
6302 1.1 christos notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
6303 1.1 christos (yyval.instr) = LOOPSETUP ((yyvsp[-8].expr), &(yyvsp[-4].reg), 3, (yyvsp[-6].expr), &(yyvsp[-2].reg));
6304 1.1 christos }
6305 1.1 christos else
6306 1.1 christos return yyerror ("Bad register or values for LSETUP");
6307 1.1 christos }
6308 1.1.1.2 christos #line 6309 "config/bfin-parse.c"
6309 1.1 christos break;
6310 1.1 christos
6311 1.1 christos case 208: /* asm_1: LOOP expr REG */
6312 1.1 christos #line 3560 "./config/bfin-parse.y"
6313 1.1 christos {
6314 1.1 christos if (!IS_RELOC ((yyvsp[-1].expr)))
6315 1.1 christos return yyerror ("Invalid expression in loop statement");
6316 1.1 christos if (!IS_CREG ((yyvsp[0].reg)))
6317 1.1 christos return yyerror ("Invalid loop counter register");
6318 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-1].expr), &(yyvsp[0].reg), 0, 0);
6319 1.1 christos }
6320 1.1.1.2 christos #line 6321 "config/bfin-parse.c"
6321 1.1 christos break;
6322 1.1 christos
6323 1.1 christos case 209: /* asm_1: LOOP expr REG ASSIGN REG */
6324 1.1 christos #line 3568 "./config/bfin-parse.y"
6325 1.1 christos {
6326 1.1 christos if (IS_RELOC ((yyvsp[-3].expr)) && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
6327 1.1 christos {
6328 1.1 christos notethat ("Loop: LOOP expr counters = pregs\n");
6329 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-3].expr), &(yyvsp[-2].reg), 1, &(yyvsp[0].reg));
6330 1.1 christos }
6331 1.1 christos else
6332 1.1 christos return yyerror ("Bad register or values for LOOP");
6333 1.1 christos }
6334 1.1.1.2 christos #line 6335 "config/bfin-parse.c"
6335 1.1 christos break;
6336 1.1 christos
6337 1.1 christos case 210: /* asm_1: LOOP expr REG ASSIGN REG GREATER_GREATER expr */
6338 1.1 christos #line 3578 "./config/bfin-parse.y"
6339 1.1 christos {
6340 1.1 christos if (IS_RELOC ((yyvsp[-5].expr)) && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 1)
6341 1.1 christos {
6342 1.1 christos notethat ("Loop: LOOP expr counters = pregs >> 1\n");
6343 1.1 christos (yyval.instr) = bfin_gen_loop ((yyvsp[-5].expr), &(yyvsp[-4].reg), 3, &(yyvsp[-2].reg));
6344 1.1 christos }
6345 1.1 christos else
6346 1.1 christos return yyerror ("Bad register or values for LOOP");
6347 1.1 christos }
6348 1.1.1.2 christos #line 6349 "config/bfin-parse.c"
6349 1.1 christos break;
6350 1.1 christos
6351 1.1 christos case 211: /* asm_1: LOOP_BEGIN NUMBER */
6352 1.1 christos #line 3590 "./config/bfin-parse.y"
6353 1.1 christos {
6354 1.1 christos Expr_Node_Value val;
6355 1.1 christos val.i_value = (yyvsp[0].value);
6356 1.1 christos Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
6357 1.1 christos bfin_loop_attempt_create_label (tmp, 1);
6358 1.1 christos if (!IS_RELOC (tmp))
6359 1.1 christos return yyerror ("Invalid expression in LOOP_BEGIN statement");
6360 1.1 christos bfin_loop_beginend (tmp, 1);
6361 1.1 christos (yyval.instr) = 0;
6362 1.1 christos }
6363 1.1.1.2 christos #line 6364 "config/bfin-parse.c"
6364 1.1 christos break;
6365 1.1 christos
6366 1.1 christos case 212: /* asm_1: LOOP_BEGIN expr */
6367 1.1 christos #line 3601 "./config/bfin-parse.y"
6368 1.1 christos {
6369 1.1 christos if (!IS_RELOC ((yyvsp[0].expr)))
6370 1.1 christos return yyerror ("Invalid expression in LOOP_BEGIN statement");
6371 1.1 christos
6372 1.1 christos bfin_loop_beginend ((yyvsp[0].expr), 1);
6373 1.1 christos (yyval.instr) = 0;
6374 1.1 christos }
6375 1.1.1.2 christos #line 6376 "config/bfin-parse.c"
6376 1.1 christos break;
6377 1.1 christos
6378 1.1 christos case 213: /* asm_1: LOOP_END NUMBER */
6379 1.1 christos #line 3611 "./config/bfin-parse.y"
6380 1.1 christos {
6381 1.1 christos Expr_Node_Value val;
6382 1.1 christos val.i_value = (yyvsp[0].value);
6383 1.1 christos Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
6384 1.1 christos bfin_loop_attempt_create_label (tmp, 1);
6385 1.1 christos if (!IS_RELOC (tmp))
6386 1.1 christos return yyerror ("Invalid expression in LOOP_END statement");
6387 1.1 christos bfin_loop_beginend (tmp, 0);
6388 1.1 christos (yyval.instr) = 0;
6389 1.1 christos }
6390 1.1.1.2 christos #line 6391 "config/bfin-parse.c"
6391 1.1 christos break;
6392 1.1 christos
6393 1.1 christos case 214: /* asm_1: LOOP_END expr */
6394 1.1 christos #line 3622 "./config/bfin-parse.y"
6395 1.1 christos {
6396 1.1 christos if (!IS_RELOC ((yyvsp[0].expr)))
6397 1.1 christos return yyerror ("Invalid expression in LOOP_END statement");
6398 1.1 christos
6399 1.1 christos bfin_loop_beginend ((yyvsp[0].expr), 0);
6400 1.1 christos (yyval.instr) = 0;
6401 1.1 christos }
6402 1.1.1.2 christos #line 6403 "config/bfin-parse.c"
6403 1.1 christos break;
6404 1.1 christos
6405 1.1 christos case 215: /* asm_1: ABORT */
6406 1.1 christos #line 3633 "./config/bfin-parse.y"
6407 1.1 christos {
6408 1.1 christos notethat ("psedoDEBUG: ABORT\n");
6409 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 3, 0);
6410 1.1 christos }
6411 1.1.1.2 christos #line 6412 "config/bfin-parse.c"
6412 1.1 christos break;
6413 1.1 christos
6414 1.1 christos case 216: /* asm_1: DBG */
6415 1.1 christos #line 3639 "./config/bfin-parse.y"
6416 1.1 christos {
6417 1.1 christos notethat ("pseudoDEBUG: DBG\n");
6418 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
6419 1.1 christos }
6420 1.1.1.2 christos #line 6421 "config/bfin-parse.c"
6421 1.1 christos break;
6422 1.1 christos
6423 1.1 christos case 217: /* asm_1: DBG REG_A */
6424 1.1 christos #line 3644 "./config/bfin-parse.y"
6425 1.1 christos {
6426 1.1 christos notethat ("pseudoDEBUG: DBG REG_A\n");
6427 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[0].reg)), 0);
6428 1.1 christos }
6429 1.1.1.2 christos #line 6430 "config/bfin-parse.c"
6430 1.1 christos break;
6431 1.1 christos
6432 1.1 christos case 218: /* asm_1: DBG REG */
6433 1.1 christos #line 3649 "./config/bfin-parse.y"
6434 1.1 christos {
6435 1.1 christos notethat ("pseudoDEBUG: DBG allregs\n");
6436 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[0].reg).regno & CODE_MASK, ((yyvsp[0].reg).regno & CLASS_MASK) >> 4);
6437 1.1 christos }
6438 1.1.1.2 christos #line 6439 "config/bfin-parse.c"
6439 1.1 christos break;
6440 1.1 christos
6441 1.1 christos case 219: /* asm_1: DBGCMPLX LPAREN REG RPAREN */
6442 1.1 christos #line 3655 "./config/bfin-parse.y"
6443 1.1 christos {
6444 1.1 christos if (!IS_DREG ((yyvsp[-1].reg)))
6445 1.1 christos return yyerror ("Dregs expected");
6446 1.1 christos notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
6447 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 6, ((yyvsp[-1].reg).regno & CODE_MASK) >> 4);
6448 1.1 christos }
6449 1.1.1.2 christos #line 6450 "config/bfin-parse.c"
6450 1.1 christos break;
6451 1.1 christos
6452 1.1 christos case 220: /* asm_1: DBGHALT */
6453 1.1 christos #line 3663 "./config/bfin-parse.y"
6454 1.1 christos {
6455 1.1 christos notethat ("psedoDEBUG: DBGHALT\n");
6456 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
6457 1.1 christos }
6458 1.1.1.2 christos #line 6459 "config/bfin-parse.c"
6459 1.1 christos break;
6460 1.1 christos
6461 1.1 christos case 221: /* asm_1: HLT */
6462 1.1 christos #line 3669 "./config/bfin-parse.y"
6463 1.1 christos {
6464 1.1 christos notethat ("psedoDEBUG: HLT\n");
6465 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0);
6466 1.1 christos }
6467 1.1.1.2 christos #line 6468 "config/bfin-parse.c"
6468 1.1 christos break;
6469 1.1 christos
6470 1.1 christos case 222: /* asm_1: DBGA LPAREN HALF_REG COMMA expr RPAREN */
6471 1.1 christos #line 3675 "./config/bfin-parse.y"
6472 1.1 christos {
6473 1.1 christos notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n");
6474 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[-3].reg)), &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6475 1.1 christos }
6476 1.1.1.2 christos #line 6477 "config/bfin-parse.c"
6477 1.1 christos break;
6478 1.1 christos
6479 1.1 christos case 223: /* asm_1: DBGAH LPAREN REG COMMA expr RPAREN */
6480 1.1 christos #line 3681 "./config/bfin-parse.y"
6481 1.1 christos {
6482 1.1 christos notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n");
6483 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6484 1.1 christos }
6485 1.1.1.2 christos #line 6486 "config/bfin-parse.c"
6486 1.1 christos break;
6487 1.1 christos
6488 1.1 christos case 224: /* asm_1: DBGAL LPAREN REG COMMA expr RPAREN */
6489 1.1 christos #line 3687 "./config/bfin-parse.y"
6490 1.1 christos {
6491 1.1 christos notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n");
6492 1.1 christos (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
6493 1.1 christos }
6494 1.1.1.2 christos #line 6495 "config/bfin-parse.c"
6495 1.1 christos break;
6496 1.1 christos
6497 1.1 christos case 225: /* asm_1: OUTC expr */
6498 1.1 christos #line 3693 "./config/bfin-parse.y"
6499 1.1 christos {
6500 1.1 christos if (!IS_UIMM ((yyvsp[0].expr), 8))
6501 1.1 christos return yyerror ("Constant out of range");
6502 1.1 christos notethat ("psedodbg_assert: OUTC uimm8\n");
6503 1.1 christos (yyval.instr) = bfin_gen_pseudochr (uimm8 ((yyvsp[0].expr)));
6504 1.1 christos }
6505 1.1.1.2 christos #line 6506 "config/bfin-parse.c"
6506 1.1 christos break;
6507 1.1 christos
6508 1.1 christos case 226: /* asm_1: OUTC REG */
6509 1.1 christos #line 3701 "./config/bfin-parse.y"
6510 1.1 christos {
6511 1.1 christos if (!IS_DREG ((yyvsp[0].reg)))
6512 1.1 christos return yyerror ("Dregs expected");
6513 1.1 christos notethat ("psedodbg_assert: OUTC dreg\n");
6514 1.1 christos (yyval.instr) = bfin_gen_pseudodbg (2, (yyvsp[0].reg).regno & CODE_MASK, 0);
6515 1.1 christos }
6516 1.1.1.2 christos #line 6517 "config/bfin-parse.c"
6517 1.1 christos break;
6518 1.1 christos
6519 1.1 christos case 227: /* REG_A: REG_A_DOUBLE_ZERO */
6520 1.1 christos #line 3715 "./config/bfin-parse.y"
6521 1.1 christos {
6522 1.1 christos (yyval.reg) = (yyvsp[0].reg);
6523 1.1 christos }
6524 1.1.1.2 christos #line 6525 "config/bfin-parse.c"
6525 1.1 christos break;
6526 1.1 christos
6527 1.1 christos case 228: /* REG_A: REG_A_DOUBLE_ONE */
6528 1.1 christos #line 3719 "./config/bfin-parse.y"
6529 1.1 christos {
6530 1.1 christos (yyval.reg) = (yyvsp[0].reg);
6531 1.1 christos }
6532 1.1.1.2 christos #line 6533 "config/bfin-parse.c"
6533 1.1 christos break;
6534 1.1 christos
6535 1.1 christos case 229: /* opt_mode: %empty */
6536 1.1 christos #line 3728 "./config/bfin-parse.y"
6537 1.1 christos {
6538 1.1 christos (yyval.mod).MM = 0;
6539 1.1 christos (yyval.mod).mod = 0;
6540 1.1 christos }
6541 1.1.1.2 christos #line 6542 "config/bfin-parse.c"
6542 1.1 christos break;
6543 1.1 christos
6544 1.1 christos case 230: /* opt_mode: LPAREN M COMMA MMOD RPAREN */
6545 1.1 christos #line 3733 "./config/bfin-parse.y"
6546 1.1 christos {
6547 1.1 christos (yyval.mod).MM = 1;
6548 1.1 christos (yyval.mod).mod = (yyvsp[-1].value);
6549 1.1 christos }
6550 1.1.1.2 christos #line 6551 "config/bfin-parse.c"
6551 1.1 christos break;
6552 1.1 christos
6553 1.1 christos case 231: /* opt_mode: LPAREN MMOD COMMA M RPAREN */
6554 1.1 christos #line 3738 "./config/bfin-parse.y"
6555 1.1 christos {
6556 1.1 christos (yyval.mod).MM = 1;
6557 1.1 christos (yyval.mod).mod = (yyvsp[-3].value);
6558 1.1 christos }
6559 1.1.1.2 christos #line 6560 "config/bfin-parse.c"
6560 1.1 christos break;
6561 1.1 christos
6562 1.1 christos case 232: /* opt_mode: LPAREN MMOD RPAREN */
6563 1.1 christos #line 3743 "./config/bfin-parse.y"
6564 1.1 christos {
6565 1.1 christos (yyval.mod).MM = 0;
6566 1.1 christos (yyval.mod).mod = (yyvsp[-1].value);
6567 1.1 christos }
6568 1.1.1.2 christos #line 6569 "config/bfin-parse.c"
6569 1.1 christos break;
6570 1.1 christos
6571 1.1 christos case 233: /* opt_mode: LPAREN M RPAREN */
6572 1.1 christos #line 3748 "./config/bfin-parse.y"
6573 1.1 christos {
6574 1.1 christos (yyval.mod).MM = 1;
6575 1.1 christos (yyval.mod).mod = 0;
6576 1.1 christos }
6577 1.1.1.2 christos #line 6578 "config/bfin-parse.c"
6578 1.1 christos break;
6579 1.1 christos
6580 1.1 christos case 234: /* asr_asl: LPAREN ASL RPAREN */
6581 1.1 christos #line 3755 "./config/bfin-parse.y"
6582 1.1 christos {
6583 1.1 christos (yyval.r0).r0 = 1;
6584 1.1 christos }
6585 1.1.1.2 christos #line 6586 "config/bfin-parse.c"
6586 1.1 christos break;
6587 1.1 christos
6588 1.1 christos case 235: /* asr_asl: LPAREN ASR RPAREN */
6589 1.1 christos #line 3759 "./config/bfin-parse.y"
6590 1.1 christos {
6591 1.1 christos (yyval.r0).r0 = 0;
6592 1.1 christos }
6593 1.1.1.2 christos #line 6594 "config/bfin-parse.c"
6594 1.1 christos break;
6595 1.1 christos
6596 1.1 christos case 236: /* sco: %empty */
6597 1.1 christos #line 3765 "./config/bfin-parse.y"
6598 1.1 christos {
6599 1.1 christos (yyval.modcodes).s0 = 0;
6600 1.1 christos (yyval.modcodes).x0 = 0;
6601 1.1 christos }
6602 1.1.1.2 christos #line 6603 "config/bfin-parse.c"
6603 1.1 christos break;
6604 1.1 christos
6605 1.1 christos case 237: /* sco: S */
6606 1.1 christos #line 3770 "./config/bfin-parse.y"
6607 1.1 christos {
6608 1.1 christos (yyval.modcodes).s0 = 1;
6609 1.1 christos (yyval.modcodes).x0 = 0;
6610 1.1 christos }
6611 1.1.1.2 christos #line 6612 "config/bfin-parse.c"
6612 1.1 christos break;
6613 1.1 christos
6614 1.1 christos case 238: /* sco: CO */
6615 1.1 christos #line 3775 "./config/bfin-parse.y"
6616 1.1 christos {
6617 1.1 christos (yyval.modcodes).s0 = 0;
6618 1.1 christos (yyval.modcodes).x0 = 1;
6619 1.1 christos }
6620 1.1.1.2 christos #line 6621 "config/bfin-parse.c"
6621 1.1 christos break;
6622 1.1 christos
6623 1.1 christos case 239: /* sco: SCO */
6624 1.1 christos #line 3780 "./config/bfin-parse.y"
6625 1.1 christos {
6626 1.1 christos (yyval.modcodes).s0 = 1;
6627 1.1 christos (yyval.modcodes).x0 = 1;
6628 1.1 christos }
6629 1.1.1.2 christos #line 6630 "config/bfin-parse.c"
6630 1.1 christos break;
6631 1.1 christos
6632 1.1 christos case 240: /* asr_asl_0: ASL */
6633 1.1 christos #line 3788 "./config/bfin-parse.y"
6634 1.1 christos {
6635 1.1 christos (yyval.r0).r0 = 1;
6636 1.1 christos }
6637 1.1.1.2 christos #line 6638 "config/bfin-parse.c"
6638 1.1 christos break;
6639 1.1 christos
6640 1.1 christos case 241: /* asr_asl_0: ASR */
6641 1.1 christos #line 3792 "./config/bfin-parse.y"
6642 1.1 christos {
6643 1.1 christos (yyval.r0).r0 = 0;
6644 1.1 christos }
6645 1.1.1.2 christos #line 6646 "config/bfin-parse.c"
6646 1.1 christos break;
6647 1.1 christos
6648 1.1 christos case 242: /* amod0: %empty */
6649 1.1 christos #line 3798 "./config/bfin-parse.y"
6650 1.1 christos {
6651 1.1 christos (yyval.modcodes).s0 = 0;
6652 1.1 christos (yyval.modcodes).x0 = 0;
6653 1.1 christos }
6654 1.1.1.2 christos #line 6655 "config/bfin-parse.c"
6655 1.1 christos break;
6656 1.1 christos
6657 1.1 christos case 243: /* amod0: LPAREN sco RPAREN */
6658 1.1 christos #line 3803 "./config/bfin-parse.y"
6659 1.1 christos {
6660 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6661 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6662 1.1 christos }
6663 1.1.1.2 christos #line 6664 "config/bfin-parse.c"
6664 1.1 christos break;
6665 1.1 christos
6666 1.1 christos case 244: /* amod1: %empty */
6667 1.1 christos #line 3810 "./config/bfin-parse.y"
6668 1.1 christos {
6669 1.1 christos (yyval.modcodes).s0 = 0;
6670 1.1 christos (yyval.modcodes).x0 = 0;
6671 1.1 christos (yyval.modcodes).aop = 0;
6672 1.1 christos }
6673 1.1.1.2 christos #line 6674 "config/bfin-parse.c"
6674 1.1 christos break;
6675 1.1 christos
6676 1.1 christos case 245: /* amod1: LPAREN NS RPAREN */
6677 1.1 christos #line 3816 "./config/bfin-parse.y"
6678 1.1 christos {
6679 1.1 christos (yyval.modcodes).s0 = 0;
6680 1.1 christos (yyval.modcodes).x0 = 0;
6681 1.1 christos (yyval.modcodes).aop = 1;
6682 1.1 christos }
6683 1.1.1.2 christos #line 6684 "config/bfin-parse.c"
6684 1.1 christos break;
6685 1.1 christos
6686 1.1 christos case 246: /* amod1: LPAREN S RPAREN */
6687 1.1 christos #line 3822 "./config/bfin-parse.y"
6688 1.1 christos {
6689 1.1 christos (yyval.modcodes).s0 = 1;
6690 1.1 christos (yyval.modcodes).x0 = 0;
6691 1.1 christos (yyval.modcodes).aop = 1;
6692 1.1 christos }
6693 1.1.1.2 christos #line 6694 "config/bfin-parse.c"
6694 1.1 christos break;
6695 1.1 christos
6696 1.1 christos case 247: /* amod2: %empty */
6697 1.1 christos #line 3830 "./config/bfin-parse.y"
6698 1.1 christos {
6699 1.1 christos (yyval.modcodes).r0 = 0;
6700 1.1 christos (yyval.modcodes).s0 = 0;
6701 1.1 christos (yyval.modcodes).x0 = 0;
6702 1.1 christos }
6703 1.1.1.2 christos #line 6704 "config/bfin-parse.c"
6704 1.1 christos break;
6705 1.1 christos
6706 1.1 christos case 248: /* amod2: LPAREN asr_asl_0 RPAREN */
6707 1.1 christos #line 3836 "./config/bfin-parse.y"
6708 1.1 christos {
6709 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6710 1.1 christos (yyval.modcodes).s0 = 0;
6711 1.1 christos (yyval.modcodes).x0 = 0;
6712 1.1 christos }
6713 1.1.1.2 christos #line 6714 "config/bfin-parse.c"
6714 1.1 christos break;
6715 1.1 christos
6716 1.1 christos case 249: /* amod2: LPAREN sco RPAREN */
6717 1.1 christos #line 3842 "./config/bfin-parse.y"
6718 1.1 christos {
6719 1.1 christos (yyval.modcodes).r0 = 0;
6720 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6721 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6722 1.1 christos }
6723 1.1.1.2 christos #line 6724 "config/bfin-parse.c"
6724 1.1 christos break;
6725 1.1 christos
6726 1.1 christos case 250: /* amod2: LPAREN asr_asl_0 COMMA sco RPAREN */
6727 1.1 christos #line 3848 "./config/bfin-parse.y"
6728 1.1 christos {
6729 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-3].r0).r0;
6730 1.1 christos (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
6731 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
6732 1.1 christos }
6733 1.1.1.2 christos #line 6734 "config/bfin-parse.c"
6734 1.1 christos break;
6735 1.1 christos
6736 1.1 christos case 251: /* amod2: LPAREN sco COMMA asr_asl_0 RPAREN */
6737 1.1 christos #line 3854 "./config/bfin-parse.y"
6738 1.1 christos {
6739 1.1 christos (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
6740 1.1 christos (yyval.modcodes).s0 = (yyvsp[-3].modcodes).s0;
6741 1.1 christos (yyval.modcodes).x0 = (yyvsp[-3].modcodes).x0;
6742 1.1 christos }
6743 1.1.1.2 christos #line 6744 "config/bfin-parse.c"
6744 1.1 christos break;
6745 1.1 christos
6746 1.1 christos case 252: /* xpmod: %empty */
6747 1.1 christos #line 3862 "./config/bfin-parse.y"
6748 1.1 christos {
6749 1.1 christos (yyval.r0).r0 = 0;
6750 1.1 christos }
6751 1.1.1.2 christos #line 6752 "config/bfin-parse.c"
6752 1.1 christos break;
6753 1.1 christos
6754 1.1 christos case 253: /* xpmod: LPAREN Z RPAREN */
6755 1.1 christos #line 3866 "./config/bfin-parse.y"
6756 1.1 christos {
6757 1.1 christos (yyval.r0).r0 = 0;
6758 1.1 christos }
6759 1.1.1.2 christos #line 6760 "config/bfin-parse.c"
6760 1.1 christos break;
6761 1.1 christos
6762 1.1 christos case 254: /* xpmod: LPAREN X RPAREN */
6763 1.1 christos #line 3870 "./config/bfin-parse.y"
6764 1.1 christos {
6765 1.1 christos (yyval.r0).r0 = 1;
6766 1.1 christos }
6767 1.1.1.2 christos #line 6768 "config/bfin-parse.c"
6768 1.1 christos break;
6769 1.1 christos
6770 1.1 christos case 255: /* xpmod1: %empty */
6771 1.1 christos #line 3876 "./config/bfin-parse.y"
6772 1.1 christos {
6773 1.1 christos (yyval.r0).r0 = 0;
6774 1.1 christos }
6775 1.1.1.2 christos #line 6776 "config/bfin-parse.c"
6776 1.1 christos break;
6777 1.1 christos
6778 1.1 christos case 256: /* xpmod1: LPAREN X RPAREN */
6779 1.1 christos #line 3880 "./config/bfin-parse.y"
6780 1.1 christos {
6781 1.1 christos (yyval.r0).r0 = 0;
6782 1.1 christos }
6783 1.1.1.2 christos #line 6784 "config/bfin-parse.c"
6784 1.1 christos break;
6785 1.1 christos
6786 1.1 christos case 257: /* xpmod1: LPAREN Z RPAREN */
6787 1.1 christos #line 3884 "./config/bfin-parse.y"
6788 1.1 christos {
6789 1.1 christos (yyval.r0).r0 = 1;
6790 1.1 christos }
6791 1.1.1.2 christos #line 6792 "config/bfin-parse.c"
6792 1.1 christos break;
6793 1.1 christos
6794 1.1 christos case 258: /* vsmod: %empty */
6795 1.1 christos #line 3890 "./config/bfin-parse.y"
6796 1.1 christos {
6797 1.1 christos (yyval.modcodes).r0 = 0;
6798 1.1 christos (yyval.modcodes).s0 = 0;
6799 1.1 christos (yyval.modcodes).aop = 0;
6800 1.1 christos }
6801 1.1.1.2 christos #line 6802 "config/bfin-parse.c"
6802 1.1 christos break;
6803 1.1 christos
6804 1.1 christos case 259: /* vsmod: LPAREN NS RPAREN */
6805 1.1 christos #line 3896 "./config/bfin-parse.y"
6806 1.1 christos {
6807 1.1 christos (yyval.modcodes).r0 = 0;
6808 1.1 christos (yyval.modcodes).s0 = 0;
6809 1.1 christos (yyval.modcodes).aop = 3;
6810 1.1 christos }
6811 1.1.1.2 christos #line 6812 "config/bfin-parse.c"
6812 1.1 christos break;
6813 1.1 christos
6814 1.1 christos case 260: /* vsmod: LPAREN S RPAREN */
6815 1.1 christos #line 3902 "./config/bfin-parse.y"
6816 1.1 christos {
6817 1.1 christos (yyval.modcodes).r0 = 0;
6818 1.1 christos (yyval.modcodes).s0 = 1;
6819 1.1 christos (yyval.modcodes).aop = 3;
6820 1.1 christos }
6821 1.1.1.2 christos #line 6822 "config/bfin-parse.c"
6822 1.1 christos break;
6823 1.1 christos
6824 1.1 christos case 261: /* vsmod: LPAREN V RPAREN */
6825 1.1 christos #line 3908 "./config/bfin-parse.y"
6826 1.1 christos {
6827 1.1 christos (yyval.modcodes).r0 = 1;
6828 1.1 christos (yyval.modcodes).s0 = 0;
6829 1.1 christos (yyval.modcodes).aop = 3;
6830 1.1 christos }
6831 1.1.1.2 christos #line 6832 "config/bfin-parse.c"
6832 1.1 christos break;
6833 1.1 christos
6834 1.1 christos case 262: /* vsmod: LPAREN V COMMA S RPAREN */
6835 1.1 christos #line 3914 "./config/bfin-parse.y"
6836 1.1 christos {
6837 1.1 christos (yyval.modcodes).r0 = 1;
6838 1.1 christos (yyval.modcodes).s0 = 1;
6839 1.1 christos }
6840 1.1.1.2 christos #line 6841 "config/bfin-parse.c"
6841 1.1 christos break;
6842 1.1 christos
6843 1.1 christos case 263: /* vsmod: LPAREN S COMMA V RPAREN */
6844 1.1 christos #line 3919 "./config/bfin-parse.y"
6845 1.1 christos {
6846 1.1 christos (yyval.modcodes).r0 = 1;
6847 1.1 christos (yyval.modcodes).s0 = 1;
6848 1.1 christos }
6849 1.1.1.2 christos #line 6850 "config/bfin-parse.c"
6850 1.1 christos break;
6851 1.1 christos
6852 1.1 christos case 264: /* vmod: %empty */
6853 1.1 christos #line 3926 "./config/bfin-parse.y"
6854 1.1 christos {
6855 1.1 christos (yyval.r0).r0 = 0;
6856 1.1 christos }
6857 1.1.1.2 christos #line 6858 "config/bfin-parse.c"
6858 1.1 christos break;
6859 1.1 christos
6860 1.1 christos case 265: /* vmod: LPAREN V RPAREN */
6861 1.1 christos #line 3930 "./config/bfin-parse.y"
6862 1.1 christos {
6863 1.1 christos (yyval.r0).r0 = 1;
6864 1.1 christos }
6865 1.1.1.2 christos #line 6866 "config/bfin-parse.c"
6866 1.1 christos break;
6867 1.1 christos
6868 1.1 christos case 266: /* smod: %empty */
6869 1.1 christos #line 3936 "./config/bfin-parse.y"
6870 1.1 christos {
6871 1.1 christos (yyval.modcodes).s0 = 0;
6872 1.1 christos }
6873 1.1.1.2 christos #line 6874 "config/bfin-parse.c"
6874 1.1 christos break;
6875 1.1 christos
6876 1.1 christos case 267: /* smod: LPAREN S RPAREN */
6877 1.1 christos #line 3940 "./config/bfin-parse.y"
6878 1.1 christos {
6879 1.1 christos (yyval.modcodes).s0 = 1;
6880 1.1 christos }
6881 1.1.1.2 christos #line 6882 "config/bfin-parse.c"
6882 1.1 christos break;
6883 1.1 christos
6884 1.1 christos case 268: /* searchmod: GE */
6885 1.1 christos #line 3947 "./config/bfin-parse.y"
6886 1.1 christos {
6887 1.1 christos (yyval.r0).r0 = 1;
6888 1.1 christos }
6889 1.1.1.2 christos #line 6890 "config/bfin-parse.c"
6890 1.1 christos break;
6891 1.1 christos
6892 1.1 christos case 269: /* searchmod: GT */
6893 1.1 christos #line 3951 "./config/bfin-parse.y"
6894 1.1 christos {
6895 1.1 christos (yyval.r0).r0 = 0;
6896 1.1 christos }
6897 1.1.1.2 christos #line 6898 "config/bfin-parse.c"
6898 1.1 christos break;
6899 1.1 christos
6900 1.1 christos case 270: /* searchmod: LE */
6901 1.1 christos #line 3955 "./config/bfin-parse.y"
6902 1.1 christos {
6903 1.1 christos (yyval.r0).r0 = 3;
6904 1.1 christos }
6905 1.1.1.2 christos #line 6906 "config/bfin-parse.c"
6906 1.1 christos break;
6907 1.1 christos
6908 1.1 christos case 271: /* searchmod: LT */
6909 1.1 christos #line 3959 "./config/bfin-parse.y"
6910 1.1 christos {
6911 1.1 christos (yyval.r0).r0 = 2;
6912 1.1 christos }
6913 1.1.1.2 christos #line 6914 "config/bfin-parse.c"
6914 1.1 christos break;
6915 1.1 christos
6916 1.1 christos case 272: /* aligndir: %empty */
6917 1.1 christos #line 3965 "./config/bfin-parse.y"
6918 1.1 christos {
6919 1.1 christos (yyval.r0).r0 = 0;
6920 1.1 christos }
6921 1.1.1.2 christos #line 6922 "config/bfin-parse.c"
6922 1.1 christos break;
6923 1.1 christos
6924 1.1 christos case 273: /* aligndir: LPAREN R RPAREN */
6925 1.1 christos #line 3969 "./config/bfin-parse.y"
6926 1.1 christos {
6927 1.1 christos (yyval.r0).r0 = 1;
6928 1.1 christos }
6929 1.1.1.2 christos #line 6930 "config/bfin-parse.c"
6930 1.1 christos break;
6931 1.1 christos
6932 1.1 christos case 274: /* byteop_mod: LPAREN R RPAREN */
6933 1.1 christos #line 3976 "./config/bfin-parse.y"
6934 1.1 christos {
6935 1.1 christos (yyval.modcodes).r0 = 0;
6936 1.1 christos (yyval.modcodes).s0 = 1;
6937 1.1 christos }
6938 1.1.1.2 christos #line 6939 "config/bfin-parse.c"
6939 1.1 christos break;
6940 1.1 christos
6941 1.1 christos case 275: /* byteop_mod: LPAREN MMOD RPAREN */
6942 1.1 christos #line 3981 "./config/bfin-parse.y"
6943 1.1 christos {
6944 1.1 christos if ((yyvsp[-1].value) != M_T)
6945 1.1 christos return yyerror ("Bad modifier");
6946 1.1 christos (yyval.modcodes).r0 = 1;
6947 1.1 christos (yyval.modcodes).s0 = 0;
6948 1.1 christos }
6949 1.1.1.2 christos #line 6950 "config/bfin-parse.c"
6950 1.1 christos break;
6951 1.1 christos
6952 1.1 christos case 276: /* byteop_mod: LPAREN MMOD COMMA R RPAREN */
6953 1.1 christos #line 3988 "./config/bfin-parse.y"
6954 1.1 christos {
6955 1.1 christos if ((yyvsp[-3].value) != M_T)
6956 1.1 christos return yyerror ("Bad modifier");
6957 1.1 christos (yyval.modcodes).r0 = 1;
6958 1.1 christos (yyval.modcodes).s0 = 1;
6959 1.1 christos }
6960 1.1.1.2 christos #line 6961 "config/bfin-parse.c"
6961 1.1 christos break;
6962 1.1 christos
6963 1.1 christos case 277: /* byteop_mod: LPAREN R COMMA MMOD RPAREN */
6964 1.1 christos #line 3995 "./config/bfin-parse.y"
6965 1.1 christos {
6966 1.1 christos if ((yyvsp[-1].value) != M_T)
6967 1.1 christos return yyerror ("Bad modifier");
6968 1.1 christos (yyval.modcodes).r0 = 1;
6969 1.1 christos (yyval.modcodes).s0 = 1;
6970 1.1 christos }
6971 1.1.1.2 christos #line 6972 "config/bfin-parse.c"
6972 1.1 christos break;
6973 1.1 christos
6974 1.1 christos case 278: /* c_align: ALIGN8 */
6975 1.1 christos #line 4007 "./config/bfin-parse.y"
6976 1.1 christos {
6977 1.1 christos (yyval.r0).r0 = 0;
6978 1.1 christos }
6979 1.1.1.2 christos #line 6980 "config/bfin-parse.c"
6980 1.1 christos break;
6981 1.1 christos
6982 1.1 christos case 279: /* c_align: ALIGN16 */
6983 1.1 christos #line 4011 "./config/bfin-parse.y"
6984 1.1 christos {
6985 1.1 christos (yyval.r0).r0 = 1;
6986 1.1 christos }
6987 1.1.1.2 christos #line 6988 "config/bfin-parse.c"
6988 1.1 christos break;
6989 1.1 christos
6990 1.1 christos case 280: /* c_align: ALIGN24 */
6991 1.1 christos #line 4015 "./config/bfin-parse.y"
6992 1.1 christos {
6993 1.1 christos (yyval.r0).r0 = 2;
6994 1.1 christos }
6995 1.1.1.2 christos #line 6996 "config/bfin-parse.c"
6996 1.1 christos break;
6997 1.1 christos
6998 1.1 christos case 281: /* w32_or_nothing: %empty */
6999 1.1 christos #line 4021 "./config/bfin-parse.y"
7000 1.1 christos {
7001 1.1 christos (yyval.r0).r0 = 0;
7002 1.1 christos }
7003 1.1.1.2 christos #line 7004 "config/bfin-parse.c"
7004 1.1 christos break;
7005 1.1 christos
7006 1.1 christos case 282: /* w32_or_nothing: LPAREN MMOD RPAREN */
7007 1.1 christos #line 4025 "./config/bfin-parse.y"
7008 1.1 christos {
7009 1.1 christos if ((yyvsp[-1].value) == M_W32)
7010 1.1 christos (yyval.r0).r0 = 1;
7011 1.1 christos else
7012 1.1 christos return yyerror ("Only (W32) allowed");
7013 1.1 christos }
7014 1.1.1.2 christos #line 7015 "config/bfin-parse.c"
7015 1.1 christos break;
7016 1.1 christos
7017 1.1 christos case 283: /* iu_or_nothing: %empty */
7018 1.1 christos #line 4034 "./config/bfin-parse.y"
7019 1.1 christos {
7020 1.1 christos (yyval.r0).r0 = 1;
7021 1.1 christos }
7022 1.1.1.2 christos #line 7023 "config/bfin-parse.c"
7023 1.1 christos break;
7024 1.1 christos
7025 1.1 christos case 284: /* iu_or_nothing: LPAREN MMOD RPAREN */
7026 1.1 christos #line 4038 "./config/bfin-parse.y"
7027 1.1 christos {
7028 1.1 christos if ((yyvsp[-1].value) == M_IU)
7029 1.1 christos (yyval.r0).r0 = 3;
7030 1.1 christos else
7031 1.1 christos return yyerror ("(IU) expected");
7032 1.1 christos }
7033 1.1.1.2 christos #line 7034 "config/bfin-parse.c"
7034 1.1 christos break;
7035 1.1 christos
7036 1.1 christos case 285: /* reg_with_predec: LBRACK _MINUS_MINUS REG RBRACK */
7037 1.1 christos #line 4047 "./config/bfin-parse.y"
7038 1.1 christos {
7039 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7040 1.1 christos }
7041 1.1.1.2 christos #line 7042 "config/bfin-parse.c"
7042 1.1 christos break;
7043 1.1 christos
7044 1.1 christos case 286: /* reg_with_postinc: LBRACK REG _PLUS_PLUS RBRACK */
7045 1.1 christos #line 4053 "./config/bfin-parse.y"
7046 1.1 christos {
7047 1.1 christos (yyval.reg) = (yyvsp[-2].reg);
7048 1.1 christos }
7049 1.1.1.2 christos #line 7050 "config/bfin-parse.c"
7050 1.1 christos break;
7051 1.1 christos
7052 1.1 christos case 287: /* min_max: MIN */
7053 1.1 christos #line 4062 "./config/bfin-parse.y"
7054 1.1 christos {
7055 1.1 christos (yyval.r0).r0 = 1;
7056 1.1 christos }
7057 1.1.1.2 christos #line 7058 "config/bfin-parse.c"
7058 1.1 christos break;
7059 1.1 christos
7060 1.1 christos case 288: /* min_max: MAX */
7061 1.1 christos #line 4066 "./config/bfin-parse.y"
7062 1.1 christos {
7063 1.1 christos (yyval.r0).r0 = 0;
7064 1.1 christos }
7065 1.1.1.2 christos #line 7066 "config/bfin-parse.c"
7066 1.1 christos break;
7067 1.1 christos
7068 1.1 christos case 289: /* op_bar_op: _PLUS_BAR_PLUS */
7069 1.1 christos #line 4073 "./config/bfin-parse.y"
7070 1.1 christos {
7071 1.1 christos (yyval.r0).r0 = 0;
7072 1.1 christos }
7073 1.1.1.2 christos #line 7074 "config/bfin-parse.c"
7074 1.1 christos break;
7075 1.1 christos
7076 1.1 christos case 290: /* op_bar_op: _PLUS_BAR_MINUS */
7077 1.1 christos #line 4077 "./config/bfin-parse.y"
7078 1.1 christos {
7079 1.1 christos (yyval.r0).r0 = 1;
7080 1.1 christos }
7081 1.1.1.2 christos #line 7082 "config/bfin-parse.c"
7082 1.1 christos break;
7083 1.1 christos
7084 1.1 christos case 291: /* op_bar_op: _MINUS_BAR_PLUS */
7085 1.1 christos #line 4081 "./config/bfin-parse.y"
7086 1.1 christos {
7087 1.1 christos (yyval.r0).r0 = 2;
7088 1.1 christos }
7089 1.1.1.2 christos #line 7090 "config/bfin-parse.c"
7090 1.1 christos break;
7091 1.1 christos
7092 1.1 christos case 292: /* op_bar_op: _MINUS_BAR_MINUS */
7093 1.1 christos #line 4085 "./config/bfin-parse.y"
7094 1.1 christos {
7095 1.1 christos (yyval.r0).r0 = 3;
7096 1.1 christos }
7097 1.1.1.2 christos #line 7098 "config/bfin-parse.c"
7098 1.1 christos break;
7099 1.1 christos
7100 1.1 christos case 293: /* plus_minus: PLUS */
7101 1.1 christos #line 4092 "./config/bfin-parse.y"
7102 1.1 christos {
7103 1.1 christos (yyval.r0).r0 = 0;
7104 1.1 christos }
7105 1.1.1.2 christos #line 7106 "config/bfin-parse.c"
7106 1.1 christos break;
7107 1.1 christos
7108 1.1 christos case 294: /* plus_minus: MINUS */
7109 1.1 christos #line 4096 "./config/bfin-parse.y"
7110 1.1 christos {
7111 1.1 christos (yyval.r0).r0 = 1;
7112 1.1 christos }
7113 1.1.1.2 christos #line 7114 "config/bfin-parse.c"
7114 1.1 christos break;
7115 1.1 christos
7116 1.1 christos case 295: /* rnd_op: LPAREN RNDH RPAREN */
7117 1.1 christos #line 4103 "./config/bfin-parse.y"
7118 1.1 christos {
7119 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7120 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7121 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7122 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7123 1.1 christos }
7124 1.1.1.2 christos #line 7125 "config/bfin-parse.c"
7125 1.1 christos break;
7126 1.1 christos
7127 1.1 christos case 296: /* rnd_op: LPAREN TH RPAREN */
7128 1.1 christos #line 4111 "./config/bfin-parse.y"
7129 1.1 christos {
7130 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7131 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7132 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7133 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7134 1.1 christos }
7135 1.1.1.2 christos #line 7136 "config/bfin-parse.c"
7136 1.1 christos break;
7137 1.1 christos
7138 1.1 christos case 297: /* rnd_op: LPAREN RNDL RPAREN */
7139 1.1 christos #line 4119 "./config/bfin-parse.y"
7140 1.1 christos {
7141 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7142 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7143 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7144 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7145 1.1 christos }
7146 1.1.1.2 christos #line 7147 "config/bfin-parse.c"
7147 1.1 christos break;
7148 1.1 christos
7149 1.1 christos case 298: /* rnd_op: LPAREN TL RPAREN */
7150 1.1 christos #line 4127 "./config/bfin-parse.y"
7151 1.1 christos {
7152 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7153 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7154 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7155 1.1 christos (yyval.modcodes).aop = 1;
7156 1.1 christos }
7157 1.1.1.2 christos #line 7158 "config/bfin-parse.c"
7158 1.1 christos break;
7159 1.1 christos
7160 1.1 christos case 299: /* rnd_op: LPAREN RNDH COMMA R RPAREN */
7161 1.1 christos #line 4135 "./config/bfin-parse.y"
7162 1.1 christos {
7163 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7164 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7165 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7166 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7167 1.1 christos }
7168 1.1.1.2 christos #line 7169 "config/bfin-parse.c"
7169 1.1 christos break;
7170 1.1 christos
7171 1.1 christos case 300: /* rnd_op: LPAREN TH COMMA R RPAREN */
7172 1.1 christos #line 4142 "./config/bfin-parse.y"
7173 1.1 christos {
7174 1.1 christos (yyval.modcodes).r0 = 1; /* HL. */
7175 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7176 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7177 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7178 1.1 christos }
7179 1.1.1.2 christos #line 7180 "config/bfin-parse.c"
7180 1.1 christos break;
7181 1.1 christos
7182 1.1 christos case 301: /* rnd_op: LPAREN RNDL COMMA R RPAREN */
7183 1.1 christos #line 4149 "./config/bfin-parse.y"
7184 1.1 christos {
7185 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7186 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7187 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7188 1.1 christos (yyval.modcodes).aop = 0; /* aop. */
7189 1.1 christos }
7190 1.1.1.2 christos #line 7191 "config/bfin-parse.c"
7191 1.1 christos break;
7192 1.1 christos
7193 1.1 christos case 302: /* rnd_op: LPAREN TL COMMA R RPAREN */
7194 1.1 christos #line 4157 "./config/bfin-parse.y"
7195 1.1 christos {
7196 1.1 christos (yyval.modcodes).r0 = 0; /* HL. */
7197 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7198 1.1 christos (yyval.modcodes).x0 = 0; /* x. */
7199 1.1 christos (yyval.modcodes).aop = 1; /* aop. */
7200 1.1 christos }
7201 1.1.1.2 christos #line 7202 "config/bfin-parse.c"
7202 1.1 christos break;
7203 1.1 christos
7204 1.1 christos case 303: /* b3_op: LPAREN LO RPAREN */
7205 1.1 christos #line 4167 "./config/bfin-parse.y"
7206 1.1 christos {
7207 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7208 1.1 christos (yyval.modcodes).x0 = 0; /* HL. */
7209 1.1 christos }
7210 1.1.1.2 christos #line 7211 "config/bfin-parse.c"
7211 1.1 christos break;
7212 1.1 christos
7213 1.1 christos case 304: /* b3_op: LPAREN HI RPAREN */
7214 1.1 christos #line 4172 "./config/bfin-parse.y"
7215 1.1 christos {
7216 1.1 christos (yyval.modcodes).s0 = 0; /* s. */
7217 1.1 christos (yyval.modcodes).x0 = 1; /* HL. */
7218 1.1 christos }
7219 1.1.1.2 christos #line 7220 "config/bfin-parse.c"
7220 1.1 christos break;
7221 1.1 christos
7222 1.1 christos case 305: /* b3_op: LPAREN LO COMMA R RPAREN */
7223 1.1 christos #line 4177 "./config/bfin-parse.y"
7224 1.1 christos {
7225 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7226 1.1 christos (yyval.modcodes).x0 = 0; /* HL. */
7227 1.1 christos }
7228 1.1.1.2 christos #line 7229 "config/bfin-parse.c"
7229 1.1 christos break;
7230 1.1 christos
7231 1.1 christos case 306: /* b3_op: LPAREN HI COMMA R RPAREN */
7232 1.1 christos #line 4182 "./config/bfin-parse.y"
7233 1.1 christos {
7234 1.1 christos (yyval.modcodes).s0 = 1; /* s. */
7235 1.1 christos (yyval.modcodes).x0 = 1; /* HL. */
7236 1.1 christos }
7237 1.1.1.2 christos #line 7238 "config/bfin-parse.c"
7238 1.1 christos break;
7239 1.1 christos
7240 1.1 christos case 307: /* post_op: %empty */
7241 1.1 christos #line 4189 "./config/bfin-parse.y"
7242 1.1 christos {
7243 1.1 christos (yyval.modcodes).x0 = 2;
7244 1.1 christos }
7245 1.1.1.2 christos #line 7246 "config/bfin-parse.c"
7246 1.1 christos break;
7247 1.1 christos
7248 1.1 christos case 308: /* post_op: _PLUS_PLUS */
7249 1.1 christos #line 4193 "./config/bfin-parse.y"
7250 1.1 christos {
7251 1.1 christos (yyval.modcodes).x0 = 0;
7252 1.1 christos }
7253 1.1.1.2 christos #line 7254 "config/bfin-parse.c"
7254 1.1 christos break;
7255 1.1 christos
7256 1.1 christos case 309: /* post_op: _MINUS_MINUS */
7257 1.1 christos #line 4197 "./config/bfin-parse.y"
7258 1.1 christos {
7259 1.1 christos (yyval.modcodes).x0 = 1;
7260 1.1 christos }
7261 1.1.1.2 christos #line 7262 "config/bfin-parse.c"
7262 1.1 christos break;
7263 1.1 christos
7264 1.1 christos case 310: /* a_assign: REG_A ASSIGN */
7265 1.1 christos #line 4206 "./config/bfin-parse.y"
7266 1.1 christos {
7267 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7268 1.1 christos }
7269 1.1.1.2 christos #line 7270 "config/bfin-parse.c"
7270 1.1 christos break;
7271 1.1 christos
7272 1.1 christos case 311: /* a_minusassign: REG_A _MINUS_ASSIGN */
7273 1.1 christos #line 4213 "./config/bfin-parse.y"
7274 1.1 christos {
7275 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7276 1.1 christos }
7277 1.1.1.2 christos #line 7278 "config/bfin-parse.c"
7278 1.1 christos break;
7279 1.1 christos
7280 1.1 christos case 312: /* a_plusassign: REG_A _PLUS_ASSIGN */
7281 1.1 christos #line 4220 "./config/bfin-parse.y"
7282 1.1 christos {
7283 1.1 christos (yyval.reg) = (yyvsp[-1].reg);
7284 1.1 christos }
7285 1.1.1.2 christos #line 7286 "config/bfin-parse.c"
7286 1.1 christos break;
7287 1.1 christos
7288 1.1 christos case 313: /* assign_macfunc: REG ASSIGN REG_A */
7289 1.1 christos #line 4227 "./config/bfin-parse.y"
7290 1.1 christos {
7291 1.1 christos if (IS_A1 ((yyvsp[0].reg)) && IS_EVEN ((yyvsp[-2].reg)))
7292 1.1 christos return yyerror ("Cannot move A1 to even register");
7293 1.1 christos else if (!IS_A1 ((yyvsp[0].reg)) && !IS_EVEN ((yyvsp[-2].reg)))
7294 1.1 christos return yyerror ("Cannot move A0 to odd register");
7295 1.1 christos
7296 1.1 christos (yyval.macfunc).w = 1;
7297 1.1 christos (yyval.macfunc).P = 1;
7298 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
7299 1.1 christos (yyval.macfunc).op = 3;
7300 1.1 christos (yyval.macfunc).dst = (yyvsp[-2].reg);
7301 1.1 christos (yyval.macfunc).s0.regno = 0;
7302 1.1 christos (yyval.macfunc).s1.regno = 0;
7303 1.1 christos }
7304 1.1.1.2 christos #line 7305 "config/bfin-parse.c"
7305 1.1 christos break;
7306 1.1 christos
7307 1.1 christos case 314: /* assign_macfunc: a_macfunc */
7308 1.1 christos #line 4242 "./config/bfin-parse.y"
7309 1.1 christos {
7310 1.1 christos (yyval.macfunc) = (yyvsp[0].macfunc);
7311 1.1 christos (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
7312 1.1 christos (yyval.macfunc).dst.regno = 0;
7313 1.1 christos }
7314 1.1.1.2 christos #line 7315 "config/bfin-parse.c"
7315 1.1 christos break;
7316 1.1 christos
7317 1.1 christos case 315: /* assign_macfunc: REG ASSIGN LPAREN a_macfunc RPAREN */
7318 1.1 christos #line 4248 "./config/bfin-parse.y"
7319 1.1 christos {
7320 1.1 christos if ((yyvsp[-1].macfunc).n && IS_EVEN ((yyvsp[-4].reg)))
7321 1.1 christos return yyerror ("Cannot move A1 to even register");
7322 1.1 christos else if (!(yyvsp[-1].macfunc).n && !IS_EVEN ((yyvsp[-4].reg)))
7323 1.1 christos return yyerror ("Cannot move A0 to odd register");
7324 1.1 christos
7325 1.1 christos (yyval.macfunc) = (yyvsp[-1].macfunc);
7326 1.1 christos (yyval.macfunc).w = 1;
7327 1.1 christos (yyval.macfunc).P = 1;
7328 1.1 christos (yyval.macfunc).dst = (yyvsp[-4].reg);
7329 1.1 christos }
7330 1.1.1.2 christos #line 7331 "config/bfin-parse.c"
7331 1.1 christos break;
7332 1.1 christos
7333 1.1 christos case 316: /* assign_macfunc: HALF_REG ASSIGN LPAREN a_macfunc RPAREN */
7334 1.1 christos #line 4261 "./config/bfin-parse.y"
7335 1.1 christos {
7336 1.1 christos if ((yyvsp[-1].macfunc).n && !IS_H ((yyvsp[-4].reg)))
7337 1.1 christos return yyerror ("Cannot move A1 to low half of register");
7338 1.1 christos else if (!(yyvsp[-1].macfunc).n && IS_H ((yyvsp[-4].reg)))
7339 1.1 christos return yyerror ("Cannot move A0 to high half of register");
7340 1.1 christos
7341 1.1 christos (yyval.macfunc) = (yyvsp[-1].macfunc);
7342 1.1 christos (yyval.macfunc).w = 1;
7343 1.1 christos (yyval.macfunc).P = 0;
7344 1.1 christos (yyval.macfunc).dst = (yyvsp[-4].reg);
7345 1.1 christos }
7346 1.1.1.2 christos #line 7347 "config/bfin-parse.c"
7347 1.1 christos break;
7348 1.1 christos
7349 1.1 christos case 317: /* assign_macfunc: HALF_REG ASSIGN REG_A */
7350 1.1 christos #line 4274 "./config/bfin-parse.y"
7351 1.1 christos {
7352 1.1 christos if (IS_A1 ((yyvsp[0].reg)) && !IS_H ((yyvsp[-2].reg)))
7353 1.1 christos return yyerror ("Cannot move A1 to low half of register");
7354 1.1 christos else if (!IS_A1 ((yyvsp[0].reg)) && IS_H ((yyvsp[-2].reg)))
7355 1.1 christos return yyerror ("Cannot move A0 to high half of register");
7356 1.1 christos
7357 1.1 christos (yyval.macfunc).w = 1;
7358 1.1 christos (yyval.macfunc).P = 0;
7359 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
7360 1.1 christos (yyval.macfunc).op = 3;
7361 1.1 christos (yyval.macfunc).dst = (yyvsp[-2].reg);
7362 1.1 christos (yyval.macfunc).s0.regno = 0;
7363 1.1 christos (yyval.macfunc).s1.regno = 0;
7364 1.1 christos }
7365 1.1.1.2 christos #line 7366 "config/bfin-parse.c"
7366 1.1 christos break;
7367 1.1 christos
7368 1.1 christos case 318: /* a_macfunc: a_assign multiply_halfregs */
7369 1.1 christos #line 4292 "./config/bfin-parse.y"
7370 1.1 christos {
7371 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7372 1.1 christos (yyval.macfunc).op = 0;
7373 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7374 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7375 1.1 christos }
7376 1.1.1.2 christos #line 7377 "config/bfin-parse.c"
7377 1.1 christos break;
7378 1.1 christos
7379 1.1 christos case 319: /* a_macfunc: a_plusassign multiply_halfregs */
7380 1.1 christos #line 4299 "./config/bfin-parse.y"
7381 1.1 christos {
7382 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7383 1.1 christos (yyval.macfunc).op = 1;
7384 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7385 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7386 1.1 christos }
7387 1.1.1.2 christos #line 7388 "config/bfin-parse.c"
7388 1.1 christos break;
7389 1.1 christos
7390 1.1 christos case 320: /* a_macfunc: a_minusassign multiply_halfregs */
7391 1.1 christos #line 4306 "./config/bfin-parse.y"
7392 1.1 christos {
7393 1.1 christos (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
7394 1.1 christos (yyval.macfunc).op = 2;
7395 1.1 christos (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
7396 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
7397 1.1 christos }
7398 1.1.1.2 christos #line 7399 "config/bfin-parse.c"
7399 1.1 christos break;
7400 1.1 christos
7401 1.1 christos case 321: /* multiply_halfregs: HALF_REG STAR HALF_REG */
7402 1.1 christos #line 4316 "./config/bfin-parse.y"
7403 1.1 christos {
7404 1.1 christos if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
7405 1.1 christos {
7406 1.1 christos (yyval.macfunc).s0 = (yyvsp[-2].reg);
7407 1.1 christos (yyval.macfunc).s1 = (yyvsp[0].reg);
7408 1.1 christos }
7409 1.1 christos else
7410 1.1 christos return yyerror ("Dregs expected");
7411 1.1 christos }
7412 1.1.1.2 christos #line 7413 "config/bfin-parse.c"
7413 1.1 christos break;
7414 1.1 christos
7415 1.1 christos case 322: /* cc_op: ASSIGN */
7416 1.1 christos #line 4329 "./config/bfin-parse.y"
7417 1.1 christos {
7418 1.1 christos (yyval.r0).r0 = 0;
7419 1.1 christos }
7420 1.1.1.2 christos #line 7421 "config/bfin-parse.c"
7421 1.1 christos break;
7422 1.1 christos
7423 1.1 christos case 323: /* cc_op: _BAR_ASSIGN */
7424 1.1 christos #line 4333 "./config/bfin-parse.y"
7425 1.1 christos {
7426 1.1 christos (yyval.r0).r0 = 1;
7427 1.1 christos }
7428 1.1.1.2 christos #line 7429 "config/bfin-parse.c"
7429 1.1 christos break;
7430 1.1 christos
7431 1.1 christos case 324: /* cc_op: _AMPERSAND_ASSIGN */
7432 1.1 christos #line 4337 "./config/bfin-parse.y"
7433 1.1 christos {
7434 1.1 christos (yyval.r0).r0 = 2;
7435 1.1 christos }
7436 1.1.1.2 christos #line 7437 "config/bfin-parse.c"
7437 1.1 christos break;
7438 1.1 christos
7439 1.1 christos case 325: /* cc_op: _CARET_ASSIGN */
7440 1.1 christos #line 4341 "./config/bfin-parse.y"
7441 1.1 christos {
7442 1.1 christos (yyval.r0).r0 = 3;
7443 1.1 christos }
7444 1.1.1.2 christos #line 7445 "config/bfin-parse.c"
7445 1.1 christos break;
7446 1.1 christos
7447 1.1 christos case 326: /* ccstat: CCREG cc_op STATUS_REG */
7448 1.1 christos #line 4348 "./config/bfin-parse.y"
7449 1.1 christos {
7450 1.1 christos (yyval.modcodes).r0 = (yyvsp[0].reg).regno;
7451 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7452 1.1 christos (yyval.modcodes).s0 = 0;
7453 1.1 christos }
7454 1.1.1.2 christos #line 7455 "config/bfin-parse.c"
7455 1.1 christos break;
7456 1.1 christos
7457 1.1 christos case 327: /* ccstat: CCREG cc_op V */
7458 1.1 christos #line 4354 "./config/bfin-parse.y"
7459 1.1 christos {
7460 1.1 christos (yyval.modcodes).r0 = 0x18;
7461 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7462 1.1 christos (yyval.modcodes).s0 = 0;
7463 1.1 christos }
7464 1.1.1.2 christos #line 7465 "config/bfin-parse.c"
7465 1.1 christos break;
7466 1.1 christos
7467 1.1 christos case 328: /* ccstat: STATUS_REG cc_op CCREG */
7468 1.1 christos #line 4360 "./config/bfin-parse.y"
7469 1.1 christos {
7470 1.1 christos (yyval.modcodes).r0 = (yyvsp[-2].reg).regno;
7471 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7472 1.1 christos (yyval.modcodes).s0 = 1;
7473 1.1 christos }
7474 1.1.1.2 christos #line 7475 "config/bfin-parse.c"
7475 1.1 christos break;
7476 1.1 christos
7477 1.1 christos case 329: /* ccstat: V cc_op CCREG */
7478 1.1 christos #line 4366 "./config/bfin-parse.y"
7479 1.1 christos {
7480 1.1 christos (yyval.modcodes).r0 = 0x18;
7481 1.1 christos (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
7482 1.1 christos (yyval.modcodes).s0 = 1;
7483 1.1 christos }
7484 1.1.1.2 christos #line 7485 "config/bfin-parse.c"
7485 1.1 christos break;
7486 1.1 christos
7487 1.1 christos case 330: /* symbol: SYMBOL */
7488 1.1 christos #line 4376 "./config/bfin-parse.y"
7489 1.1 christos {
7490 1.1 christos Expr_Node_Value val;
7491 1.1 christos val.s_value = S_GET_NAME((yyvsp[0].symbol));
7492 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
7493 1.1 christos }
7494 1.1.1.2 christos #line 7495 "config/bfin-parse.c"
7495 1.1 christos break;
7496 1.1 christos
7497 1.1 christos case 331: /* any_gotrel: GOT */
7498 1.1 christos #line 4385 "./config/bfin-parse.y"
7499 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_GOT; }
7500 1.1.1.2 christos #line 7501 "config/bfin-parse.c"
7501 1.1 christos break;
7502 1.1 christos
7503 1.1 christos case 332: /* any_gotrel: GOT17M4 */
7504 1.1 christos #line 4387 "./config/bfin-parse.y"
7505 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
7506 1.1.1.2 christos #line 7507 "config/bfin-parse.c"
7507 1.1 christos break;
7508 1.1 christos
7509 1.1 christos case 333: /* any_gotrel: FUNCDESC_GOT17M4 */
7510 1.1 christos #line 4389 "./config/bfin-parse.y"
7511 1.1 christos { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
7512 1.1.1.2 christos #line 7513 "config/bfin-parse.c"
7513 1.1 christos break;
7514 1.1 christos
7515 1.1 christos case 334: /* got: symbol AT any_gotrel */
7516 1.1 christos #line 4393 "./config/bfin-parse.y"
7517 1.1 christos {
7518 1.1 christos Expr_Node_Value val;
7519 1.1 christos val.i_value = (yyvsp[0].value);
7520 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[-2].expr), NULL);
7521 1.1 christos }
7522 1.1.1.2 christos #line 7523 "config/bfin-parse.c"
7523 1.1 christos break;
7524 1.1 christos
7525 1.1 christos case 335: /* got_or_expr: got */
7526 1.1 christos #line 4401 "./config/bfin-parse.y"
7527 1.1 christos {
7528 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7529 1.1 christos }
7530 1.1.1.2 christos #line 7531 "config/bfin-parse.c"
7531 1.1 christos break;
7532 1.1 christos
7533 1.1 christos case 336: /* got_or_expr: expr */
7534 1.1 christos #line 4405 "./config/bfin-parse.y"
7535 1.1 christos {
7536 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7537 1.1 christos }
7538 1.1.1.2 christos #line 7539 "config/bfin-parse.c"
7539 1.1 christos break;
7540 1.1 christos
7541 1.1 christos case 337: /* pltpc: symbol AT PLTPC */
7542 1.1 christos #line 4412 "./config/bfin-parse.y"
7543 1.1 christos {
7544 1.1 christos (yyval.expr) = (yyvsp[-2].expr);
7545 1.1 christos }
7546 1.1.1.2 christos #line 7547 "config/bfin-parse.c"
7547 1.1 christos break;
7548 1.1 christos
7549 1.1 christos case 338: /* eterm: NUMBER */
7550 1.1 christos #line 4418 "./config/bfin-parse.y"
7551 1.1 christos {
7552 1.1 christos Expr_Node_Value val;
7553 1.1 christos val.i_value = (yyvsp[0].value);
7554 1.1 christos (yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
7555 1.1 christos }
7556 1.1.1.2 christos #line 7557 "config/bfin-parse.c"
7557 1.1 christos break;
7558 1.1 christos
7559 1.1 christos case 339: /* eterm: symbol */
7560 1.1 christos #line 4424 "./config/bfin-parse.y"
7561 1.1 christos {
7562 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7563 1.1 christos }
7564 1.1.1.2 christos #line 7565 "config/bfin-parse.c"
7565 1.1 christos break;
7566 1.1 christos
7567 1.1 christos case 340: /* eterm: LPAREN expr_1 RPAREN */
7568 1.1 christos #line 4428 "./config/bfin-parse.y"
7569 1.1 christos {
7570 1.1 christos (yyval.expr) = (yyvsp[-1].expr);
7571 1.1 christos }
7572 1.1.1.2 christos #line 7573 "config/bfin-parse.c"
7573 1.1 christos break;
7574 1.1 christos
7575 1.1 christos case 341: /* eterm: TILDA expr_1 */
7576 1.1 christos #line 4432 "./config/bfin-parse.y"
7577 1.1 christos {
7578 1.1 christos (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[0].expr));
7579 1.1 christos }
7580 1.1.1.2 christos #line 7581 "config/bfin-parse.c"
7581 1.1 christos break;
7582 1.1 christos
7583 1.1 christos case 342: /* eterm: MINUS expr_1 */
7584 1.1 christos #line 4436 "./config/bfin-parse.y"
7585 1.1 christos {
7586 1.1 christos (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[0].expr));
7587 1.1 christos }
7588 1.1.1.2 christos #line 7589 "config/bfin-parse.c"
7589 1.1 christos break;
7590 1.1 christos
7591 1.1 christos case 343: /* expr: expr_1 */
7592 1.1 christos #line 4442 "./config/bfin-parse.y"
7593 1.1 christos {
7594 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7595 1.1 christos }
7596 1.1.1.2 christos #line 7597 "config/bfin-parse.c"
7597 1.1 christos break;
7598 1.1 christos
7599 1.1 christos case 344: /* expr_1: expr_1 STAR expr_1 */
7600 1.1 christos #line 4448 "./config/bfin-parse.y"
7601 1.1 christos {
7602 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[-2].expr), (yyvsp[0].expr));
7603 1.1 christos }
7604 1.1.1.2 christos #line 7605 "config/bfin-parse.c"
7605 1.1 christos break;
7606 1.1 christos
7607 1.1 christos case 345: /* expr_1: expr_1 SLASH expr_1 */
7608 1.1 christos #line 4452 "./config/bfin-parse.y"
7609 1.1 christos {
7610 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[-2].expr), (yyvsp[0].expr));
7611 1.1 christos }
7612 1.1.1.2 christos #line 7613 "config/bfin-parse.c"
7613 1.1 christos break;
7614 1.1 christos
7615 1.1 christos case 346: /* expr_1: expr_1 PERCENT expr_1 */
7616 1.1 christos #line 4456 "./config/bfin-parse.y"
7617 1.1 christos {
7618 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[-2].expr), (yyvsp[0].expr));
7619 1.1 christos }
7620 1.1.1.2 christos #line 7621 "config/bfin-parse.c"
7621 1.1 christos break;
7622 1.1 christos
7623 1.1 christos case 347: /* expr_1: expr_1 PLUS expr_1 */
7624 1.1 christos #line 4460 "./config/bfin-parse.y"
7625 1.1 christos {
7626 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[-2].expr), (yyvsp[0].expr));
7627 1.1 christos }
7628 1.1.1.2 christos #line 7629 "config/bfin-parse.c"
7629 1.1 christos break;
7630 1.1 christos
7631 1.1 christos case 348: /* expr_1: expr_1 MINUS expr_1 */
7632 1.1 christos #line 4464 "./config/bfin-parse.y"
7633 1.1 christos {
7634 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[-2].expr), (yyvsp[0].expr));
7635 1.1 christos }
7636 1.1.1.2 christos #line 7637 "config/bfin-parse.c"
7637 1.1 christos break;
7638 1.1 christos
7639 1.1 christos case 349: /* expr_1: expr_1 LESS_LESS expr_1 */
7640 1.1 christos #line 4468 "./config/bfin-parse.y"
7641 1.1 christos {
7642 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7643 1.1 christos }
7644 1.1.1.2 christos #line 7645 "config/bfin-parse.c"
7645 1.1 christos break;
7646 1.1 christos
7647 1.1 christos case 350: /* expr_1: expr_1 GREATER_GREATER expr_1 */
7648 1.1 christos #line 4472 "./config/bfin-parse.y"
7649 1.1 christos {
7650 1.1 christos (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[-2].expr), (yyvsp[0].expr));
7651 1.1 christos }
7652 1.1.1.2 christos #line 7653 "config/bfin-parse.c"
7653 1.1 christos break;
7654 1.1 christos
7655 1.1 christos case 351: /* expr_1: expr_1 AMPERSAND expr_1 */
7656 1.1 christos #line 4476 "./config/bfin-parse.y"
7657 1.1 christos {
7658 1.1 christos (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[-2].expr), (yyvsp[0].expr));
7659 1.1 christos }
7660 1.1.1.2 christos #line 7661 "config/bfin-parse.c"
7661 1.1 christos break;
7662 1.1 christos
7663 1.1 christos case 352: /* expr_1: expr_1 CARET expr_1 */
7664 1.1 christos #line 4480 "./config/bfin-parse.y"
7665 1.1 christos {
7666 1.1 christos (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7667 1.1 christos }
7668 1.1.1.2 christos #line 7669 "config/bfin-parse.c"
7669 1.1 christos break;
7670 1.1 christos
7671 1.1 christos case 353: /* expr_1: expr_1 BAR expr_1 */
7672 1.1 christos #line 4484 "./config/bfin-parse.y"
7673 1.1 christos {
7674 1.1 christos (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[-2].expr), (yyvsp[0].expr));
7675 1.1 christos }
7676 1.1.1.2 christos #line 7677 "config/bfin-parse.c"
7677 1.1 christos break;
7678 1.1 christos
7679 1.1 christos case 354: /* expr_1: eterm */
7680 1.1 christos #line 4488 "./config/bfin-parse.y"
7681 1.1 christos {
7682 1.1 christos (yyval.expr) = (yyvsp[0].expr);
7683 1.1 christos }
7684 1.1.1.2 christos #line 7685 "config/bfin-parse.c"
7685 1.1 christos break;
7686 1.1 christos
7687 1.1 christos
7688 1.1.1.2 christos #line 7689 "config/bfin-parse.c"
7689 1.1 christos
7690 1.1 christos default: break;
7691 1.1 christos }
7692 1.1 christos /* User semantic actions sometimes alter yychar, and that requires
7693 1.1 christos that yytoken be updated with the new translation. We take the
7694 1.1 christos approach of translating immediately before every use of yytoken.
7695 1.1 christos One alternative is translating here after every semantic action,
7696 1.1 christos but that translation would be missed if the semantic action invokes
7697 1.1 christos YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
7698 1.1 christos if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
7699 1.1 christos incorrect destructor might then be invoked immediately. In the
7700 1.1 christos case of YYERROR or YYBACKUP, subsequent parser actions might lead
7701 1.1 christos to an incorrect destructor call or verbose syntax error message
7702 1.1 christos before the lookahead is translated. */
7703 1.1 christos YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
7704 1.1 christos
7705 1.1 christos YYPOPSTACK (yylen);
7706 1.1 christos yylen = 0;
7707 1.1 christos
7708 1.1 christos *++yyvsp = yyval;
7709 1.1 christos
7710 1.1 christos /* Now 'shift' the result of the reduction. Determine what state
7711 1.1 christos that goes to, based on the state we popped back to and the rule
7712 1.1 christos number reduced by. */
7713 1.1 christos {
7714 1.1 christos const int yylhs = yyr1[yyn] - YYNTOKENS;
7715 1.1 christos const int yyi = yypgoto[yylhs] + *yyssp;
7716 1.1 christos yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
7717 1.1 christos ? yytable[yyi]
7718 1.1 christos : yydefgoto[yylhs]);
7719 1.1 christos }
7720 1.1 christos
7721 1.1 christos goto yynewstate;
7722 1.1 christos
7723 1.1 christos
7724 1.1 christos /*--------------------------------------.
7725 1.1 christos | yyerrlab -- here on detecting error. |
7726 1.1 christos `--------------------------------------*/
7727 1.1 christos yyerrlab:
7728 1.1 christos /* Make sure we have latest lookahead translation. See comments at
7729 1.1 christos user semantic actions for why this is necessary. */
7730 1.1 christos yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
7731 1.1 christos /* If not already recovering from an error, report this error. */
7732 1.1 christos if (!yyerrstatus)
7733 1.1 christos {
7734 1.1 christos ++yynerrs;
7735 1.1 christos yyerror (YY_("syntax error"));
7736 1.1 christos }
7737 1.1 christos
7738 1.1 christos if (yyerrstatus == 3)
7739 1.1 christos {
7740 1.1 christos /* If just tried and failed to reuse lookahead token after an
7741 1.1 christos error, discard it. */
7742 1.1 christos
7743 1.1 christos if (yychar <= YYEOF)
7744 1.1 christos {
7745 1.1 christos /* Return failure if at end of input. */
7746 1.1 christos if (yychar == YYEOF)
7747 1.1 christos YYABORT;
7748 1.1 christos }
7749 1.1 christos else
7750 1.1 christos {
7751 1.1 christos yydestruct ("Error: discarding",
7752 1.1 christos yytoken, &yylval);
7753 1.1 christos yychar = YYEMPTY;
7754 1.1 christos }
7755 1.1 christos }
7756 1.1 christos
7757 1.1 christos /* Else will try to reuse lookahead token after shifting the error
7758 1.1 christos token. */
7759 1.1 christos goto yyerrlab1;
7760 1.1 christos
7761 1.1 christos
7762 1.1 christos /*---------------------------------------------------.
7763 1.1 christos | yyerrorlab -- error raised explicitly by YYERROR. |
7764 1.1 christos `---------------------------------------------------*/
7765 1.1 christos yyerrorlab:
7766 1.1 christos /* Pacify compilers when the user code never invokes YYERROR and the
7767 1.1 christos label yyerrorlab therefore never appears in user code. */
7768 1.1 christos if (0)
7769 1.1 christos YYERROR;
7770 1.1 christos ++yynerrs;
7771 1.1 christos
7772 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
7773 1.1 christos this YYERROR. */
7774 1.1 christos YYPOPSTACK (yylen);
7775 1.1 christos yylen = 0;
7776 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7777 1.1 christos yystate = *yyssp;
7778 1.1 christos goto yyerrlab1;
7779 1.1 christos
7780 1.1 christos
7781 1.1 christos /*-------------------------------------------------------------.
7782 1.1 christos | yyerrlab1 -- common code for both syntax error and YYERROR. |
7783 1.1 christos `-------------------------------------------------------------*/
7784 1.1 christos yyerrlab1:
7785 1.1 christos yyerrstatus = 3; /* Each real token shifted decrements this. */
7786 1.1 christos
7787 1.1 christos /* Pop stack until we find a state that shifts the error token. */
7788 1.1 christos for (;;)
7789 1.1 christos {
7790 1.1 christos yyn = yypact[yystate];
7791 1.1 christos if (!yypact_value_is_default (yyn))
7792 1.1 christos {
7793 1.1 christos yyn += YYSYMBOL_YYerror;
7794 1.1 christos if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
7795 1.1 christos {
7796 1.1 christos yyn = yytable[yyn];
7797 1.1 christos if (0 < yyn)
7798 1.1 christos break;
7799 1.1 christos }
7800 1.1 christos }
7801 1.1 christos
7802 1.1 christos /* Pop the current state because it cannot handle the error token. */
7803 1.1 christos if (yyssp == yyss)
7804 1.1 christos YYABORT;
7805 1.1 christos
7806 1.1 christos
7807 1.1 christos yydestruct ("Error: popping",
7808 1.1 christos YY_ACCESSING_SYMBOL (yystate), yyvsp);
7809 1.1 christos YYPOPSTACK (1);
7810 1.1 christos yystate = *yyssp;
7811 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7812 1.1 christos }
7813 1.1 christos
7814 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
7815 1.1 christos *++yyvsp = yylval;
7816 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
7817 1.1 christos
7818 1.1 christos
7819 1.1 christos /* Shift the error token. */
7820 1.1 christos YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
7821 1.1 christos
7822 1.1 christos yystate = yyn;
7823 1.1 christos goto yynewstate;
7824 1.1 christos
7825 1.1 christos
7826 1.1 christos /*-------------------------------------.
7827 1.1 christos | yyacceptlab -- YYACCEPT comes here. |
7828 1.1 christos `-------------------------------------*/
7829 1.1 christos yyacceptlab:
7830 1.1 christos yyresult = 0;
7831 1.1 christos goto yyreturnlab;
7832 1.1 christos
7833 1.1 christos
7834 1.1 christos /*-----------------------------------.
7835 1.1 christos | yyabortlab -- YYABORT comes here. |
7836 1.1 christos `-----------------------------------*/
7837 1.1 christos yyabortlab:
7838 1.1 christos yyresult = 1;
7839 1.1 christos goto yyreturnlab;
7840 1.1 christos
7841 1.1 christos
7842 1.1 christos /*-----------------------------------------------------------.
7843 1.1 christos | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
7844 1.1 christos `-----------------------------------------------------------*/
7845 1.1 christos yyexhaustedlab:
7846 1.1 christos yyerror (YY_("memory exhausted"));
7847 1.1 christos yyresult = 2;
7848 1.1 christos goto yyreturnlab;
7849 1.1 christos
7850 1.1 christos
7851 1.1 christos /*----------------------------------------------------------.
7852 1.1 christos | yyreturnlab -- parsing is finished, clean up and return. |
7853 1.1 christos `----------------------------------------------------------*/
7854 1.1 christos yyreturnlab:
7855 1.1 christos if (yychar != YYEMPTY)
7856 1.1 christos {
7857 1.1 christos /* Make sure we have latest lookahead translation. See comments at
7858 1.1 christos user semantic actions for why this is necessary. */
7859 1.1 christos yytoken = YYTRANSLATE (yychar);
7860 1.1 christos yydestruct ("Cleanup: discarding lookahead",
7861 1.1 christos yytoken, &yylval);
7862 1.1 christos }
7863 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
7864 1.1 christos this YYABORT or YYACCEPT. */
7865 1.1 christos YYPOPSTACK (yylen);
7866 1.1 christos YY_STACK_PRINT (yyss, yyssp);
7867 1.1 christos while (yyssp != yyss)
7868 1.1 christos {
7869 1.1 christos yydestruct ("Cleanup: popping",
7870 1.1 christos YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
7871 1.1 christos YYPOPSTACK (1);
7872 1.1 christos }
7873 1.1 christos #ifndef yyoverflow
7874 1.1 christos if (yyss != yyssa)
7875 1.1 christos YYSTACK_FREE (yyss);
7876 1.1 christos #endif
7877 1.1 christos
7878 1.1 christos return yyresult;
7879 1.1 christos }
7880 1.1 christos
7881 1.1 christos #line 4494 "./config/bfin-parse.y"
7882 1.1 christos
7883 1.1 christos
7884 1.1 christos EXPR_T
7885 1.1 christos mkexpr (int x, SYMBOL_T s)
7886 1.1 christos {
7887 1.1 christos EXPR_T e = XNEW (struct expression_cell);
7888 1.1 christos e->value = x;
7889 1.1 christos EXPR_SYMBOL(e) = s;
7890 1.1 christos return e;
7891 1.1 christos }
7892 1.1 christos
7893 1.1 christos static int
7894 1.1 christos value_match (Expr_Node *exp, int sz, int sign, int mul, int issigned)
7895 1.1 christos {
7896 1.1 christos int umax = (1 << sz) - 1;
7897 1.1 christos int min = -(1 << (sz - 1));
7898 1.1 christos int max = (1 << (sz - 1)) - 1;
7899 1.1 christos
7900 1.1 christos int v = (EXPR_VALUE (exp)) & 0xffffffff;
7901 1.1 christos
7902 1.1 christos if ((v % mul) != 0)
7903 1.1 christos {
7904 1.1 christos error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
7905 1.1 christos return 0;
7906 1.1 christos }
7907 1.1 christos
7908 1.1 christos v /= mul;
7909 1.1 christos
7910 1.1 christos if (sign)
7911 1.1 christos v = -v;
7912 1.1 christos
7913 1.1 christos if (issigned)
7914 1.1 christos {
7915 1.1 christos if (v >= min && v <= max) return 1;
7916 1.1 christos
7917 1.1 christos #ifdef DEBUG
7918 1.1 christos fprintf(stderr, "signed value %lx out of range\n", v * mul);
7919 1.1 christos #endif
7920 1.1 christos return 0;
7921 1.1 christos }
7922 1.1 christos if (v <= umax && v >= 0)
7923 1.1 christos return 1;
7924 1.1 christos #ifdef DEBUG
7925 1.1 christos fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
7926 1.1 christos #endif
7927 1.1 christos return 0;
7928 1.1 christos }
7929 1.1 christos
7930 1.1 christos /* Return the expression structure that allows symbol operations.
7931 1.1 christos If the left and right children are constants, do the operation. */
7932 1.1 christos static Expr_Node *
7933 1.1 christos binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
7934 1.1 christos {
7935 1.1 christos Expr_Node_Value val;
7936 1.1 christos
7937 1.1 christos if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
7938 1.1 christos {
7939 1.1 christos switch (op)
7940 1.1 christos {
7941 1.1 christos case Expr_Op_Type_Add:
7942 1.1 christos x->value.i_value += y->value.i_value;
7943 1.1 christos break;
7944 1.1 christos case Expr_Op_Type_Sub:
7945 1.1 christos x->value.i_value -= y->value.i_value;
7946 1.1 christos break;
7947 1.1 christos case Expr_Op_Type_Mult:
7948 1.1 christos x->value.i_value *= y->value.i_value;
7949 1.1 christos break;
7950 1.1 christos case Expr_Op_Type_Div:
7951 1.1 christos if (y->value.i_value == 0)
7952 1.1 christos error ("Illegal Expression: Division by zero.");
7953 1.1 christos else
7954 1.1 christos x->value.i_value /= y->value.i_value;
7955 1.1 christos break;
7956 1.1 christos case Expr_Op_Type_Mod:
7957 1.1 christos x->value.i_value %= y->value.i_value;
7958 1.1 christos break;
7959 1.1 christos case Expr_Op_Type_Lshift:
7960 1.1 christos x->value.i_value <<= y->value.i_value;
7961 1.1 christos break;
7962 1.1 christos case Expr_Op_Type_Rshift:
7963 1.1 christos x->value.i_value >>= y->value.i_value;
7964 1.1 christos break;
7965 1.1 christos case Expr_Op_Type_BAND:
7966 1.1 christos x->value.i_value &= y->value.i_value;
7967 1.1 christos break;
7968 1.1 christos case Expr_Op_Type_BOR:
7969 1.1 christos x->value.i_value |= y->value.i_value;
7970 1.1 christos break;
7971 1.1 christos case Expr_Op_Type_BXOR:
7972 1.1 christos x->value.i_value ^= y->value.i_value;
7973 1.1 christos break;
7974 1.1 christos case Expr_Op_Type_LAND:
7975 1.1 christos x->value.i_value = x->value.i_value && y->value.i_value;
7976 1.1 christos break;
7977 1.1 christos case Expr_Op_Type_LOR:
7978 1.1 christos x->value.i_value = x->value.i_value || y->value.i_value;
7979 1.1 christos break;
7980 1.1 christos
7981 1.1 christos default:
7982 1.1 christos error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
7983 1.1 christos }
7984 1.1 christos return x;
7985 1.1 christos }
7986 1.1 christos /* Canonicalize order to EXPR OP CONSTANT. */
7987 1.1 christos if (x->type == Expr_Node_Constant)
7988 1.1 christos {
7989 1.1 christos Expr_Node *t = x;
7990 1.1 christos x = y;
7991 1.1 christos y = t;
7992 1.1 christos }
7993 1.1 christos /* Canonicalize subtraction of const to addition of negated const. */
7994 1.1 christos if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant)
7995 1.1 christos {
7996 1.1 christos op = Expr_Op_Type_Add;
7997 1.1 christos y->value.i_value = -y->value.i_value;
7998 1.1 christos }
7999 1.1 christos if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
8000 1.1 christos && x->Right_Child->type == Expr_Node_Constant)
8001 1.1 christos {
8002 1.1 christos if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
8003 1.1 christos {
8004 1.1 christos x->Right_Child->value.i_value += y->value.i_value;
8005 1.1 christos return x;
8006 1.1 christos }
8007 1.1 christos }
8008 1.1 christos
8009 1.1 christos /* Create a new expression structure. */
8010 1.1 christos val.op_value = op;
8011 1.1 christos return Expr_Node_Create (Expr_Node_Binop, val, x, y);
8012 1.1 christos }
8013 1.1 christos
8014 1.1 christos static Expr_Node *
8015 1.1 christos unary (Expr_Op_Type op, Expr_Node *x)
8016 1.1 christos {
8017 1.1 christos if (x->type == Expr_Node_Constant)
8018 1.1 christos {
8019 1.1 christos switch (op)
8020 1.1 christos {
8021 1.1 christos case Expr_Op_Type_NEG:
8022 1.1 christos x->value.i_value = -x->value.i_value;
8023 1.1 christos break;
8024 1.1 christos case Expr_Op_Type_COMP:
8025 1.1 christos x->value.i_value = ~x->value.i_value;
8026 1.1 christos break;
8027 1.1 christos default:
8028 1.1 christos error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
8029 1.1 christos }
8030 1.1 christos return x;
8031 1.1 christos }
8032 1.1 christos else
8033 1.1 christos {
8034 1.1 christos /* Create a new expression structure. */
8035 1.1 christos Expr_Node_Value val;
8036 1.1 christos val.op_value = op;
8037 1.1 christos return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
8038 1.1 christos }
8039 1.1 christos }
8040 1.1 christos
8041 1.1 christos int debug_codeselection = 0;
8042 1.1 christos static void
8043 1.1 christos notethat (const char *format, ...)
8044 1.1 christos {
8045 1.1 christos va_list ap;
8046 1.1 christos va_start (ap, format);
8047 1.1 christos if (debug_codeselection)
8048 1.1 christos {
8049 1.1 christos vfprintf (errorf, format, ap);
8050 1.1 christos }
8051 1.1 christos va_end (ap);
8052 1.1 christos }
8053 1.1 christos
8054 1.1 christos #ifdef TEST
8055 1.1 christos main (int argc, char **argv)
8056 1.1 christos {
8057 1.1 christos yyparse();
8058 1.1 christos }
8059 1.1 christos #endif
8060 1.1 christos
8061