18 %token <lval> LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 LTYPE5
19 %token <lval> LTYPE6 LTYPE7 LTYPE8 LTYPE9 LTYPEA
20 %token <lval> LTYPEB LTYPEC LTYPED LTYPEE LTYPEF
21 %token <lval> LTYPEG LTYPEH LTYPEI LTYPEJ LTYPEK
22 %token <lval> LTYPEL LTYPEM LTYPEN LTYPEO LTYPEP LTYPEQ
23 %token <lval> LTYPER LTYPES LTYPET LTYPEU LTYPEV LTYPEW LTYPEX LTYPEY LTYPEZ
24 %token <lval> LMOVK LDMB LSTXR
25 %token <lval> LCONST LSP LSB LFP LPC
26 %token <lval> LR LREG LF LFREG LV LVREG LC LCREG LFCR LFCSEL
27 %token <lval> LCOND LS LAT LEXT LSPR LSPREG LVTYPE
30 %token <sym> LNAME LLAB LVAR
31 %type <lval> con expr pointer offset sreg spreg
32 %type <lval> scon indexreg vset vreglist
33 %type <gen> gen rel reg freg vreg shift fcon frcon extreg vlane vgen
34 %type <gen> imm ximm name oreg nireg ioreg imsr spr cond sysarg
43 yyerror("redeclaration of %s", $1->name);
61 yyerror("redeclaration of %s", $1->name);
74 outcode($1, &nullgen, NREG, &nullgen);
79 | LTYPE1 imsr ',' spreg ',' reg
81 outcode($1, &$2, $4, &$6);
83 | LTYPE1 imsr ',' spreg ','
85 outcode($1, &$2, $4, &nullgen);
89 outcode($1, &$2, NREG, &$4);
96 outcode($1, &$2, NREG, &$4);
103 outcode($1, &$2, NREG, &$4);
110 outcode($1, &$2, NREG, &$4);
112 | LMOVK imm '<' '<' con ',' reg
118 outcode4($1, &$2, NREG, &g, &$7);
125 outcode($1, &nullgen, NREG, &$3);
129 outcode($1, &nullgen, NREG, &$3);
136 outcode($1, &nullgen, NREG, &$3);
143 outcode($1, &nullgen, NREG, &$3);
147 outcode($1, &nullgen, NREG, &nullgen);
152 | LTYPE7 imsr ',' spreg comma
154 outcode($1, &$2, $4, &nullgen);
161 outcode($1, &$2, NREG, &$4);
166 | LTYPER cond ',' reg
168 outcode($1, &$2, NREG, &$4);
171 * CSEL/CINC/CNEG/CINV
173 | LTYPES cond ',' reg ',' reg ',' reg
175 outcode4($1, &$2, $6.reg, &$4, &$8);
177 | LTYPES cond ',' reg ',' reg
179 outcode($1, &$2, $4.reg, &$6);
184 | LTYPET imm ',' reg ',' rel
186 outcode($1, &$2, $4.reg, &$6);
191 | LTYPEU cond ',' imsr ',' reg ',' imm comma
193 outcode4($1, &$2, $6.reg, &$4, &$8);
200 outcode($1, &$2, NREG, &$4);
202 | LTYPEV '$' name ',' reg
204 outcode($1, &$3, NREG, &$5);
209 | LTYPEY imm ',' imm ',' spreg ',' reg
211 outcode4($1, &$2, $6, &$4, &$8);
216 | LTYPEP imm ',' reg ',' spreg ',' reg
218 outcode4($1, &$2, $6, &$4, &$8);
225 outcode($1, &nullgen, NREG, &nullgen);
229 outcode($1, &nullgen, NREG, &$2);
236 outcode($1, &nullgen, NREG, &nullgen);
240 outcode($1, &$2, NREG, &nullgen);
244 outcode($1, &$2, NREG, &nullgen);
248 outcode($1, &nullgen, NREG, &$3);
252 outcode($1, &nullgen, NREG, &$3);
257 | LTYPEB name ',' imm
259 outcode($1, &$2, NREG, &$4);
261 | LTYPEB name ',' con ',' imm
263 outcode($1, &$2, $4, &$6);
268 | LTYPEC name '/' con ',' ximm
270 outcode($1, &$2, $4, &$6);
277 outcode($1, &$2, NREG, &$4);
284 outcode($1, &nullgen, NREG, &$3);
289 | LTYPEI freg ',' freg
291 outcode($1, &$2, NREG, &$4);
296 | LTYPEK frcon ',' freg
298 outcode($1, &$2, NREG, &$4);
300 | LTYPEK frcon ',' freg ',' freg
302 outcode($1, &$2, $4.reg, &$6);
307 | LTYPEL frcon ',' freg comma
309 outcode($1, &$2, $4.reg, &nullgen);
314 | LTYPEF cond ',' freg ',' freg ',' imm comma
316 outcode4($1, &$2, $6.reg, &$4, &$8);
321 | LTYPE9 freg ',' freg ', ' freg ',' freg comma
323 outcode4($1, &$2, $4.reg, &$6, &$8);
328 | LFCSEL cond ',' freg ',' freg ',' freg
330 outcode4($1, &$2, $6.reg, &$4, &$8);
335 | LTYPEW vgen ',' vgen
337 outcode($1, &$2, NREG, &$4);
339 | LTYPEW vgen ',' vgen ',' vgen
341 outcode($1, &$2, $4.reg, &$6);
346 | LTYPEJ gen ',' sreg ',' gen
348 outcode($1, &$2, $4, &$6);
353 | LTYPEM reg ',' reg ',' sreg ',' reg
355 outcode4($1, &$2, $6, &$4, &$8);
362 outcode($1, &$2, NREG, &nullgen);
364 | LTYPEN reg ',' sysarg
366 outcode($1, &$4, $2.reg, &nullgen);
368 | LTYPEO sysarg ',' reg
370 outcode($1, &$2, NREG, &$4);
377 outcode($1, &$2, NREG, &nullgen);
382 | LSTXR reg ',' gen ',' sreg
384 outcode($1, &$2, $6, &$4);
391 outcode($1, &nullgen, NREG, &nullgen);
406 con ',' con ',' con ',' con
410 $$.offset = SYSARG4($1, $3, $5, $7);
425 yyerror("undefined label: %s", $1->name);
435 $$.offset = $1->value + $2;
458 memmove($$.sval, $2, sizeof($$.sval));
507 if($1.name != D_EXTERN && $1.name != D_STATIC) {
536 | con '(' sreg ')' '!'
543 | '(' sreg ')' con '!'
550 | '(' sreg ')' '(' indexreg ')'
558 | '(' sreg ')' '[' indexreg ']'
564 $$.offset = $5 | (1<<16);
598 $$.offset = ($1 << 16) | ($4 << 10) | (0 << 22);
604 $$.offset = (($1&0x1F) << 16) | ($4 << 10) | (1 << 22);
610 $$.offset = ($1 << 16) | ($4 << 10) | (2 << 22);
616 $$.offset = ($1 << 16) | ($4 << 10) | (3 << 22);
631 $$.offset = ($1 << 16) | ($2 << 13);
633 | sreg LEXT '<' '<' con
636 yyerror("shift value out of range");
640 $$.offset = ($1 << 16) | ($2 << 13) | ($5 << 10);
656 if($$ < 0 || $$ >= 64)
657 yyerror("shift value out of range");
665 if($3 < 0 || $3 >= NREG)
666 print("register value out of range\n");
747 for(i=$1.reg; i<=$3.reg; i++)
749 for(i=$3.reg; i<=$1.reg; i++)
752 | vreg comma vreglist
754 $$ = (1<<$1.reg) | $3;
781 | LNAME offset '(' pointer ')'
789 | LNAME '<' '>' offset '(' LSB ')'