17dd7cddfSDavid du Colombier %{ 27dd7cddfSDavid du Colombier #include "a.h" 37dd7cddfSDavid du Colombier %} 47dd7cddfSDavid du Colombier %union 57dd7cddfSDavid du Colombier { 67dd7cddfSDavid du Colombier Sym *sym; 77dd7cddfSDavid du Colombier long lval; 87dd7cddfSDavid du Colombier double dval; 97dd7cddfSDavid du Colombier char sval[8]; 107dd7cddfSDavid du Colombier Gen gen; 117dd7cddfSDavid du Colombier } 127dd7cddfSDavid du Colombier %left '|' 137dd7cddfSDavid du Colombier %left '^' 147dd7cddfSDavid du Colombier %left '&' 157dd7cddfSDavid du Colombier %left '<' '>' 167dd7cddfSDavid du Colombier %left '+' '-' 177dd7cddfSDavid du Colombier %left '*' '/' '%' 1880ee5cbfSDavid du Colombier %token <lval> LMOVW LMOVB LABS LLOGW LSHW LADDW LCMP LCROP 197dd7cddfSDavid du Colombier %token <lval> LBRA LFMOV LFCONV LFCMP LFADD LFMA LTRAP LXORW 207dd7cddfSDavid du Colombier %token <lval> LNOP LEND LRETT LWORD LTEXT LDATA LRETRN 217dd7cddfSDavid du Colombier %token <lval> LCONST LSP LSB LFP LPC LCREG LFLUSH 227dd7cddfSDavid du Colombier %token <lval> LREG LFREG LR LCR LF LFPSCR 23*6891d857SDavid du Colombier %token <lval> LLR LCTR LSPR LSPREG LSEG LMSR LDCR 247dd7cddfSDavid du Colombier %token <lval> LSCHED LXLD LXST LXOP LXMV 25*6891d857SDavid du Colombier %token <lval> LRLWM LMOVMW LMOVEM LMOVFL LMTFSB LMA LFMOVX 267dd7cddfSDavid du Colombier %token <dval> LFCONST 277dd7cddfSDavid du Colombier %token <sval> LSCONST 287dd7cddfSDavid du Colombier %token <sym> LNAME LLAB LVAR 297dd7cddfSDavid du Colombier %type <lval> con expr pointer offset sreg 307dd7cddfSDavid du Colombier %type <gen> addr rreg regaddr name creg freg xlreg lr ctr 317dd7cddfSDavid du Colombier %type <gen> imm ximm fimm rel psr lcr cbit fpscr fpscrf seg msr mask 327dd7cddfSDavid du Colombier %% 337dd7cddfSDavid du Colombier prog: 347dd7cddfSDavid du Colombier | prog line 357dd7cddfSDavid du Colombier 367dd7cddfSDavid du Colombier line: 377dd7cddfSDavid du Colombier LLAB ':' 387dd7cddfSDavid du Colombier { 397dd7cddfSDavid du Colombier if($1->value != pc) 407dd7cddfSDavid du Colombier yyerror("redeclaration of %s", $1->name); 417dd7cddfSDavid du Colombier $1->value = pc; 427dd7cddfSDavid du Colombier } 437dd7cddfSDavid du Colombier line 447dd7cddfSDavid du Colombier | LNAME ':' 457dd7cddfSDavid du Colombier { 467dd7cddfSDavid du Colombier $1->type = LLAB; 477dd7cddfSDavid du Colombier $1->value = pc; 487dd7cddfSDavid du Colombier } 497dd7cddfSDavid du Colombier line 507dd7cddfSDavid du Colombier | LNAME '=' expr ';' 517dd7cddfSDavid du Colombier { 527dd7cddfSDavid du Colombier $1->type = LVAR; 537dd7cddfSDavid du Colombier $1->value = $3; 547dd7cddfSDavid du Colombier } 557dd7cddfSDavid du Colombier | LVAR '=' expr ';' 567dd7cddfSDavid du Colombier { 577dd7cddfSDavid du Colombier if($1->value != $3) 587dd7cddfSDavid du Colombier yyerror("redeclaration of %s", $1->name); 597dd7cddfSDavid du Colombier $1->value = $3; 607dd7cddfSDavid du Colombier } 617dd7cddfSDavid du Colombier | LSCHED ';' 627dd7cddfSDavid du Colombier { 637dd7cddfSDavid du Colombier nosched = $1; 647dd7cddfSDavid du Colombier } 657dd7cddfSDavid du Colombier | ';' 667dd7cddfSDavid du Colombier | inst ';' 677dd7cddfSDavid du Colombier | error ';' 687dd7cddfSDavid du Colombier 697dd7cddfSDavid du Colombier inst: 707dd7cddfSDavid du Colombier /* 717dd7cddfSDavid du Colombier * load ints and bytes 727dd7cddfSDavid du Colombier */ 737dd7cddfSDavid du Colombier LMOVW rreg ',' rreg 747dd7cddfSDavid du Colombier { 757dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 767dd7cddfSDavid du Colombier } 777dd7cddfSDavid du Colombier | LMOVW addr ',' rreg 787dd7cddfSDavid du Colombier { 797dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 807dd7cddfSDavid du Colombier } 817dd7cddfSDavid du Colombier | LMOVW regaddr ',' rreg 827dd7cddfSDavid du Colombier { 837dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 847dd7cddfSDavid du Colombier } 857dd7cddfSDavid du Colombier | LMOVB rreg ',' rreg 867dd7cddfSDavid du Colombier { 877dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 887dd7cddfSDavid du Colombier } 897dd7cddfSDavid du Colombier | LMOVB addr ',' rreg 907dd7cddfSDavid du Colombier { 917dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 927dd7cddfSDavid du Colombier } 937dd7cddfSDavid du Colombier | LMOVB regaddr ',' rreg 947dd7cddfSDavid du Colombier { 957dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 967dd7cddfSDavid du Colombier } 977dd7cddfSDavid du Colombier /* 98*6891d857SDavid du Colombier * load and store floats 997dd7cddfSDavid du Colombier */ 1007dd7cddfSDavid du Colombier | LFMOV addr ',' freg 1017dd7cddfSDavid du Colombier { 1027dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1037dd7cddfSDavid du Colombier } 1047dd7cddfSDavid du Colombier | LFMOV regaddr ',' freg 1057dd7cddfSDavid du Colombier { 1067dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1077dd7cddfSDavid du Colombier } 1087dd7cddfSDavid du Colombier | LFMOV fimm ',' freg 1097dd7cddfSDavid du Colombier { 1107dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1117dd7cddfSDavid du Colombier } 1127dd7cddfSDavid du Colombier | LFMOV freg ',' freg 1137dd7cddfSDavid du Colombier { 1147dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1157dd7cddfSDavid du Colombier } 1167dd7cddfSDavid du Colombier | LFMOV freg ',' addr 1177dd7cddfSDavid du Colombier { 1187dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1197dd7cddfSDavid du Colombier } 1207dd7cddfSDavid du Colombier | LFMOV freg ',' regaddr 1217dd7cddfSDavid du Colombier { 1227dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1237dd7cddfSDavid du Colombier } 1247dd7cddfSDavid du Colombier /* 125*6891d857SDavid du Colombier * load and store floats, indexed only 126*6891d857SDavid du Colombier */ 127*6891d857SDavid du Colombier | LFMOVX regaddr ',' freg 128*6891d857SDavid du Colombier { 129*6891d857SDavid du Colombier outcode($1, &$2, NREG, &$4); 130*6891d857SDavid du Colombier } 131*6891d857SDavid du Colombier | LFMOVX freg ',' regaddr 132*6891d857SDavid du Colombier { 133*6891d857SDavid du Colombier outcode($1, &$2, NREG, &$4); 134*6891d857SDavid du Colombier } 135*6891d857SDavid du Colombier /* 1367dd7cddfSDavid du Colombier * store ints and bytes 1377dd7cddfSDavid du Colombier */ 1387dd7cddfSDavid du Colombier | LMOVW rreg ',' addr 1397dd7cddfSDavid du Colombier { 1407dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1417dd7cddfSDavid du Colombier } 1427dd7cddfSDavid du Colombier | LMOVW rreg ',' regaddr 1437dd7cddfSDavid du Colombier { 1447dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1457dd7cddfSDavid du Colombier } 1467dd7cddfSDavid du Colombier | LMOVB rreg ',' addr 1477dd7cddfSDavid du Colombier { 1487dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1497dd7cddfSDavid du Colombier } 1507dd7cddfSDavid du Colombier | LMOVB rreg ',' regaddr 1517dd7cddfSDavid du Colombier { 1527dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1537dd7cddfSDavid du Colombier } 1547dd7cddfSDavid du Colombier /* 1557dd7cddfSDavid du Colombier * store floats 1567dd7cddfSDavid du Colombier */ 1577dd7cddfSDavid du Colombier | LMOVW freg ',' addr 1587dd7cddfSDavid du Colombier { 1597dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1607dd7cddfSDavid du Colombier } 1617dd7cddfSDavid du Colombier | LMOVW freg ',' regaddr 1627dd7cddfSDavid du Colombier { 1637dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1647dd7cddfSDavid du Colombier } 1657dd7cddfSDavid du Colombier /* 1667dd7cddfSDavid du Colombier * floating point status 1677dd7cddfSDavid du Colombier */ 1687dd7cddfSDavid du Colombier | LMOVW fpscr ',' freg 1697dd7cddfSDavid du Colombier { 1707dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1717dd7cddfSDavid du Colombier } 1727dd7cddfSDavid du Colombier | LMOVW freg ',' fpscr 1737dd7cddfSDavid du Colombier { 1747dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1757dd7cddfSDavid du Colombier } 1767dd7cddfSDavid du Colombier | LMOVW freg ',' imm ',' fpscr 1777dd7cddfSDavid du Colombier { 1787dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$4, &$6); 1797dd7cddfSDavid du Colombier } 1807dd7cddfSDavid du Colombier | LMOVW fpscr ',' creg 1817dd7cddfSDavid du Colombier { 1827dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1837dd7cddfSDavid du Colombier } 1847dd7cddfSDavid du Colombier | LMOVW imm ',' fpscrf 1857dd7cddfSDavid du Colombier { 1867dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 1877dd7cddfSDavid du Colombier } 1887dd7cddfSDavid du Colombier | LMTFSB imm ',' con 1897dd7cddfSDavid du Colombier { 1907dd7cddfSDavid du Colombier outcode($1, &$2, $4, &nullgen); 1917dd7cddfSDavid du Colombier } 1927dd7cddfSDavid du Colombier /* 1937dd7cddfSDavid du Colombier * field moves (mtcrf) 1947dd7cddfSDavid du Colombier */ 1957dd7cddfSDavid du Colombier | LMOVW rreg ',' imm ',' lcr 1967dd7cddfSDavid du Colombier { 1977dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$4, &$6); 1987dd7cddfSDavid du Colombier } 1997dd7cddfSDavid du Colombier | LMOVW rreg ',' creg 2007dd7cddfSDavid du Colombier { 2017dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2027dd7cddfSDavid du Colombier } 2037dd7cddfSDavid du Colombier | LMOVW rreg ',' lcr 2047dd7cddfSDavid du Colombier { 2057dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2067dd7cddfSDavid du Colombier } 2077dd7cddfSDavid du Colombier /* 2087dd7cddfSDavid du Colombier * integer operations 2097dd7cddfSDavid du Colombier * logical instructions 2107dd7cddfSDavid du Colombier * shift instructions 21180ee5cbfSDavid du Colombier * unary instructions 2127dd7cddfSDavid du Colombier */ 2137dd7cddfSDavid du Colombier | LADDW rreg ',' sreg ',' rreg 2147dd7cddfSDavid du Colombier { 2157dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 2167dd7cddfSDavid du Colombier } 2177dd7cddfSDavid du Colombier | LADDW imm ',' sreg ',' rreg 2187dd7cddfSDavid du Colombier { 2197dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 2207dd7cddfSDavid du Colombier } 2217dd7cddfSDavid du Colombier | LADDW rreg ',' imm ',' rreg 2227dd7cddfSDavid du Colombier { 2237dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$4, &$6); 2247dd7cddfSDavid du Colombier } 2257dd7cddfSDavid du Colombier | LADDW rreg ',' rreg 2267dd7cddfSDavid du Colombier { 2277dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2287dd7cddfSDavid du Colombier } 2297dd7cddfSDavid du Colombier | LADDW imm ',' rreg 2307dd7cddfSDavid du Colombier { 2317dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2327dd7cddfSDavid du Colombier } 2337dd7cddfSDavid du Colombier | LLOGW rreg ',' sreg ',' rreg 2347dd7cddfSDavid du Colombier { 2357dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 2367dd7cddfSDavid du Colombier } 2377dd7cddfSDavid du Colombier | LLOGW rreg ',' rreg 2387dd7cddfSDavid du Colombier { 2397dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2407dd7cddfSDavid du Colombier } 24180ee5cbfSDavid du Colombier | LSHW rreg ',' sreg ',' rreg 24280ee5cbfSDavid du Colombier { 24380ee5cbfSDavid du Colombier outcode($1, &$2, $4, &$6); 24480ee5cbfSDavid du Colombier } 24580ee5cbfSDavid du Colombier | LSHW rreg ',' rreg 24680ee5cbfSDavid du Colombier { 24780ee5cbfSDavid du Colombier outcode($1, &$2, NREG, &$4); 24880ee5cbfSDavid du Colombier } 24980ee5cbfSDavid du Colombier | LSHW imm ',' sreg ',' rreg 25080ee5cbfSDavid du Colombier { 25180ee5cbfSDavid du Colombier outcode($1, &$2, $4, &$6); 25280ee5cbfSDavid du Colombier } 25380ee5cbfSDavid du Colombier | LSHW imm ',' rreg 25480ee5cbfSDavid du Colombier { 25580ee5cbfSDavid du Colombier outcode($1, &$2, NREG, &$4); 25680ee5cbfSDavid du Colombier } 2577dd7cddfSDavid du Colombier | LABS rreg ',' rreg 2587dd7cddfSDavid du Colombier { 2597dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2607dd7cddfSDavid du Colombier } 2617dd7cddfSDavid du Colombier | LABS rreg 2627dd7cddfSDavid du Colombier { 2637dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$2); 2647dd7cddfSDavid du Colombier } 2657dd7cddfSDavid du Colombier /* 266375daca8SDavid du Colombier * multiply-accumulate 267375daca8SDavid du Colombier */ 268375daca8SDavid du Colombier | LMA rreg ',' sreg ',' rreg 269375daca8SDavid du Colombier { 270375daca8SDavid du Colombier outcode($1, &$2, $4, &$6); 271375daca8SDavid du Colombier } 272375daca8SDavid du Colombier /* 2737dd7cddfSDavid du Colombier * move immediate: macro for cau+or, addi, addis, and other combinations 2747dd7cddfSDavid du Colombier */ 2757dd7cddfSDavid du Colombier | LMOVW imm ',' rreg 2767dd7cddfSDavid du Colombier { 2777dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2787dd7cddfSDavid du Colombier } 2797dd7cddfSDavid du Colombier | LMOVW ximm ',' rreg 2807dd7cddfSDavid du Colombier { 2817dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 2827dd7cddfSDavid du Colombier } 2837dd7cddfSDavid du Colombier /* 2847dd7cddfSDavid du Colombier * condition register operations 2857dd7cddfSDavid du Colombier */ 2867dd7cddfSDavid du Colombier | LCROP cbit ',' cbit 2877dd7cddfSDavid du Colombier { 2887dd7cddfSDavid du Colombier outcode($1, &$2, $4.reg, &$4); 2897dd7cddfSDavid du Colombier } 2907dd7cddfSDavid du Colombier | LCROP cbit ',' con ',' cbit 2917dd7cddfSDavid du Colombier { 2927dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 2937dd7cddfSDavid du Colombier } 2947dd7cddfSDavid du Colombier /* 2957dd7cddfSDavid du Colombier * condition register moves 2967dd7cddfSDavid du Colombier * move from machine state register 2977dd7cddfSDavid du Colombier */ 2987dd7cddfSDavid du Colombier | LMOVW creg ',' creg 2997dd7cddfSDavid du Colombier { 3007dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3017dd7cddfSDavid du Colombier } 3027dd7cddfSDavid du Colombier | LMOVW psr ',' creg 3037dd7cddfSDavid du Colombier { 3047dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3057dd7cddfSDavid du Colombier } 3067dd7cddfSDavid du Colombier | LMOVW lcr ',' rreg 3077dd7cddfSDavid du Colombier { 3087dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3097dd7cddfSDavid du Colombier } 3107dd7cddfSDavid du Colombier | LMOVW psr ',' rreg 3117dd7cddfSDavid du Colombier { 3127dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3137dd7cddfSDavid du Colombier } 3147dd7cddfSDavid du Colombier | LMOVW seg ',' rreg 3157dd7cddfSDavid du Colombier { 3167dd7cddfSDavid du Colombier int r; 3177dd7cddfSDavid du Colombier r = $2.offset; 3187dd7cddfSDavid du Colombier $2.offset = 0; 3197dd7cddfSDavid du Colombier outcode($1, &$2, r, &$4); 3207dd7cddfSDavid du Colombier } 3217dd7cddfSDavid du Colombier | LMOVW rreg ',' seg 3227dd7cddfSDavid du Colombier { 3237dd7cddfSDavid du Colombier int r; 3247dd7cddfSDavid du Colombier r = $4.offset; 3257dd7cddfSDavid du Colombier $4.offset = 0; 3267dd7cddfSDavid du Colombier outcode($1, &$2, r, &$4); 3277dd7cddfSDavid du Colombier } 3287dd7cddfSDavid du Colombier | LMOVW xlreg ',' rreg 3297dd7cddfSDavid du Colombier { 3307dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3317dd7cddfSDavid du Colombier } 3327dd7cddfSDavid du Colombier | LMOVW rreg ',' xlreg 3337dd7cddfSDavid du Colombier { 3347dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3357dd7cddfSDavid du Colombier } 3367dd7cddfSDavid du Colombier | LMOVW creg ',' psr 3377dd7cddfSDavid du Colombier { 3387dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3397dd7cddfSDavid du Colombier } 3407dd7cddfSDavid du Colombier | LMOVW rreg ',' psr 3417dd7cddfSDavid du Colombier { 3427dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3437dd7cddfSDavid du Colombier } 3447dd7cddfSDavid du Colombier /* 3457dd7cddfSDavid du Colombier * branch, branch conditional 3467dd7cddfSDavid du Colombier * branch conditional register 3477dd7cddfSDavid du Colombier * branch conditional to count register 3487dd7cddfSDavid du Colombier */ 3497dd7cddfSDavid du Colombier | LBRA rel 3507dd7cddfSDavid du Colombier { 3517dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &$2); 3527dd7cddfSDavid du Colombier } 3537dd7cddfSDavid du Colombier | LBRA addr 3547dd7cddfSDavid du Colombier { 3557dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &$2); 3567dd7cddfSDavid du Colombier } 3577dd7cddfSDavid du Colombier | LBRA '(' xlreg ')' 3587dd7cddfSDavid du Colombier { 3597dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &$3); 3607dd7cddfSDavid du Colombier } 36180ee5cbfSDavid du Colombier | LBRA ',' rel 36280ee5cbfSDavid du Colombier { 36380ee5cbfSDavid du Colombier outcode($1, &nullgen, NREG, &$3); 36480ee5cbfSDavid du Colombier } 36580ee5cbfSDavid du Colombier | LBRA ',' addr 36680ee5cbfSDavid du Colombier { 36780ee5cbfSDavid du Colombier outcode($1, &nullgen, NREG, &$3); 36880ee5cbfSDavid du Colombier } 36980ee5cbfSDavid du Colombier | LBRA ',' '(' xlreg ')' 37080ee5cbfSDavid du Colombier { 37180ee5cbfSDavid du Colombier outcode($1, &nullgen, NREG, &$4); 37280ee5cbfSDavid du Colombier } 3737dd7cddfSDavid du Colombier | LBRA creg ',' rel 3747dd7cddfSDavid du Colombier { 3757dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3767dd7cddfSDavid du Colombier } 3777dd7cddfSDavid du Colombier | LBRA creg ',' addr 3787dd7cddfSDavid du Colombier { 3797dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 3807dd7cddfSDavid du Colombier } 3817dd7cddfSDavid du Colombier | LBRA creg ',' '(' xlreg ')' 3827dd7cddfSDavid du Colombier { 3837dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$5); 3847dd7cddfSDavid du Colombier } 3857dd7cddfSDavid du Colombier | LBRA con ',' rel 3867dd7cddfSDavid du Colombier { 3877dd7cddfSDavid du Colombier outcode($1, &nullgen, $2, &$4); 3887dd7cddfSDavid du Colombier } 3897dd7cddfSDavid du Colombier | LBRA con ',' addr 3907dd7cddfSDavid du Colombier { 3917dd7cddfSDavid du Colombier outcode($1, &nullgen, $2, &$4); 3927dd7cddfSDavid du Colombier } 3937dd7cddfSDavid du Colombier | LBRA con ',' '(' xlreg ')' 3947dd7cddfSDavid du Colombier { 3957dd7cddfSDavid du Colombier outcode($1, &nullgen, $2, &$5); 3967dd7cddfSDavid du Colombier } 3977dd7cddfSDavid du Colombier | LBRA con ',' con ',' rel 3987dd7cddfSDavid du Colombier { 3997dd7cddfSDavid du Colombier Gen g; 4007dd7cddfSDavid du Colombier g = nullgen; 4017dd7cddfSDavid du Colombier g.type = D_CONST; 4027dd7cddfSDavid du Colombier g.offset = $2; 4037dd7cddfSDavid du Colombier outcode($1, &g, $4, &$6); 4047dd7cddfSDavid du Colombier } 4057dd7cddfSDavid du Colombier | LBRA con ',' con ',' addr 4067dd7cddfSDavid du Colombier { 4077dd7cddfSDavid du Colombier Gen g; 4087dd7cddfSDavid du Colombier g = nullgen; 4097dd7cddfSDavid du Colombier g.type = D_CONST; 4107dd7cddfSDavid du Colombier g.offset = $2; 4117dd7cddfSDavid du Colombier outcode($1, &g, $4, &$6); 4127dd7cddfSDavid du Colombier } 4137dd7cddfSDavid du Colombier | LBRA con ',' con ',' '(' xlreg ')' 4147dd7cddfSDavid du Colombier { 4157dd7cddfSDavid du Colombier Gen g; 4167dd7cddfSDavid du Colombier g = nullgen; 4177dd7cddfSDavid du Colombier g.type = D_CONST; 4187dd7cddfSDavid du Colombier g.offset = $2; 4197dd7cddfSDavid du Colombier outcode($1, &g, $4, &$7); 4207dd7cddfSDavid du Colombier } 4217dd7cddfSDavid du Colombier /* 4227dd7cddfSDavid du Colombier * conditional trap 4237dd7cddfSDavid du Colombier */ 4247dd7cddfSDavid du Colombier | LTRAP rreg ',' sreg 4257dd7cddfSDavid du Colombier { 4267dd7cddfSDavid du Colombier outcode($1, &$2, $4, &nullgen); 4277dd7cddfSDavid du Colombier } 4287dd7cddfSDavid du Colombier | LTRAP imm ',' sreg 4297dd7cddfSDavid du Colombier { 4307dd7cddfSDavid du Colombier outcode($1, &$2, $4, &nullgen); 4317dd7cddfSDavid du Colombier } 4327dd7cddfSDavid du Colombier | LTRAP rreg comma 4337dd7cddfSDavid du Colombier { 4347dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 4357dd7cddfSDavid du Colombier } 4367dd7cddfSDavid du Colombier | LTRAP comma 4377dd7cddfSDavid du Colombier { 4387dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &nullgen); 4397dd7cddfSDavid du Colombier } 4407dd7cddfSDavid du Colombier /* 4417dd7cddfSDavid du Colombier * floating point operate 4427dd7cddfSDavid du Colombier */ 4437dd7cddfSDavid du Colombier | LFCONV freg ',' freg 4447dd7cddfSDavid du Colombier { 4457dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 4467dd7cddfSDavid du Colombier } 4477dd7cddfSDavid du Colombier | LFADD freg ',' freg 4487dd7cddfSDavid du Colombier { 4497dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 4507dd7cddfSDavid du Colombier } 4517dd7cddfSDavid du Colombier | LFADD freg ',' freg ',' freg 4527dd7cddfSDavid du Colombier { 4537dd7cddfSDavid du Colombier outcode($1, &$2, $4.reg, &$6); 4547dd7cddfSDavid du Colombier } 4557dd7cddfSDavid du Colombier | LFMA freg ',' freg ',' freg ',' freg 4567dd7cddfSDavid du Colombier { 4577dd7cddfSDavid du Colombier outgcode($1, &$2, $4.reg, &$6, &$8); 4587dd7cddfSDavid du Colombier } 4597dd7cddfSDavid du Colombier | LFCMP freg ',' freg 4607dd7cddfSDavid du Colombier { 4617dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 4627dd7cddfSDavid du Colombier } 4637dd7cddfSDavid du Colombier | LFCMP freg ',' freg ',' creg 4647dd7cddfSDavid du Colombier { 4657dd7cddfSDavid du Colombier outcode($1, &$2, $6.reg, &$4); 4667dd7cddfSDavid du Colombier } 4677dd7cddfSDavid du Colombier /* 4687dd7cddfSDavid du Colombier * CMP 4697dd7cddfSDavid du Colombier */ 4707dd7cddfSDavid du Colombier | LCMP rreg ',' rreg 4717dd7cddfSDavid du Colombier { 4727dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 4737dd7cddfSDavid du Colombier } 4747dd7cddfSDavid du Colombier | LCMP rreg ',' imm 4757dd7cddfSDavid du Colombier { 4767dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 4777dd7cddfSDavid du Colombier } 4787dd7cddfSDavid du Colombier | LCMP rreg ',' rreg ',' creg 4797dd7cddfSDavid du Colombier { 4807dd7cddfSDavid du Colombier outcode($1, &$2, $6.reg, &$4); 4817dd7cddfSDavid du Colombier } 4827dd7cddfSDavid du Colombier | LCMP rreg ',' imm ',' creg 4837dd7cddfSDavid du Colombier { 4847dd7cddfSDavid du Colombier outcode($1, &$2, $6.reg, &$4); 4857dd7cddfSDavid du Colombier } 4867dd7cddfSDavid du Colombier /* 4877dd7cddfSDavid du Colombier * rotate and mask 4887dd7cddfSDavid du Colombier */ 4897dd7cddfSDavid du Colombier | LRLWM imm ',' rreg ',' imm ',' rreg 4907dd7cddfSDavid du Colombier { 4917dd7cddfSDavid du Colombier outgcode($1, &$2, $4.reg, &$6, &$8); 4927dd7cddfSDavid du Colombier } 4937dd7cddfSDavid du Colombier | LRLWM imm ',' rreg ',' mask ',' rreg 4947dd7cddfSDavid du Colombier { 4957dd7cddfSDavid du Colombier outgcode($1, &$2, $4.reg, &$6, &$8); 4967dd7cddfSDavid du Colombier } 4977dd7cddfSDavid du Colombier | LRLWM rreg ',' rreg ',' imm ',' rreg 4987dd7cddfSDavid du Colombier { 4997dd7cddfSDavid du Colombier outgcode($1, &$2, $4.reg, &$6, &$8); 5007dd7cddfSDavid du Colombier } 5017dd7cddfSDavid du Colombier | LRLWM rreg ',' rreg ',' mask ',' rreg 5027dd7cddfSDavid du Colombier { 5037dd7cddfSDavid du Colombier outgcode($1, &$2, $4.reg, &$6, &$8); 5047dd7cddfSDavid du Colombier } 5057dd7cddfSDavid du Colombier /* 5067dd7cddfSDavid du Colombier * load/store multiple 5077dd7cddfSDavid du Colombier */ 5087dd7cddfSDavid du Colombier | LMOVMW addr ',' rreg 5097dd7cddfSDavid du Colombier { 5107dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5117dd7cddfSDavid du Colombier } 5127dd7cddfSDavid du Colombier | LMOVMW rreg ',' addr 5137dd7cddfSDavid du Colombier { 5147dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5157dd7cddfSDavid du Colombier } 5167dd7cddfSDavid du Colombier /* 5177dd7cddfSDavid du Colombier * various indexed load/store 5187dd7cddfSDavid du Colombier * indexed unary (eg, cache clear) 5197dd7cddfSDavid du Colombier */ 5207dd7cddfSDavid du Colombier | LXLD regaddr ',' rreg 5217dd7cddfSDavid du Colombier { 5227dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5237dd7cddfSDavid du Colombier } 5247dd7cddfSDavid du Colombier | LXLD regaddr ',' imm ',' rreg 5257dd7cddfSDavid du Colombier { 5267dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$4, &$6); 5277dd7cddfSDavid du Colombier } 5287dd7cddfSDavid du Colombier | LXST rreg ',' regaddr 5297dd7cddfSDavid du Colombier { 5307dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5317dd7cddfSDavid du Colombier } 5327dd7cddfSDavid du Colombier | LXST rreg ',' imm ',' regaddr 5337dd7cddfSDavid du Colombier { 5347dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$4, &$6); 5357dd7cddfSDavid du Colombier } 5367dd7cddfSDavid du Colombier | LXMV regaddr ',' rreg 5377dd7cddfSDavid du Colombier { 5387dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5397dd7cddfSDavid du Colombier } 5407dd7cddfSDavid du Colombier | LXMV rreg ',' regaddr 5417dd7cddfSDavid du Colombier { 5427dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5437dd7cddfSDavid du Colombier } 5447dd7cddfSDavid du Colombier | LXOP regaddr 5457dd7cddfSDavid du Colombier { 5467dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 5477dd7cddfSDavid du Colombier } 5487dd7cddfSDavid du Colombier /* 5497dd7cddfSDavid du Colombier * NOP 5507dd7cddfSDavid du Colombier */ 5517dd7cddfSDavid du Colombier | LNOP comma 5527dd7cddfSDavid du Colombier { 5537dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &nullgen); 5547dd7cddfSDavid du Colombier } 5557dd7cddfSDavid du Colombier | LNOP rreg comma 5567dd7cddfSDavid du Colombier { 5577dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 5587dd7cddfSDavid du Colombier } 5597dd7cddfSDavid du Colombier | LNOP freg comma 5607dd7cddfSDavid du Colombier { 5617dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 5627dd7cddfSDavid du Colombier } 5637dd7cddfSDavid du Colombier | LNOP ',' rreg 5647dd7cddfSDavid du Colombier { 5657dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &$3); 5667dd7cddfSDavid du Colombier } 5677dd7cddfSDavid du Colombier | LNOP ',' freg 5687dd7cddfSDavid du Colombier { 5697dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &$3); 5707dd7cddfSDavid du Colombier } 5717dd7cddfSDavid du Colombier /* 5727dd7cddfSDavid du Colombier * word 5737dd7cddfSDavid du Colombier */ 5747dd7cddfSDavid du Colombier | LWORD imm comma 5757dd7cddfSDavid du Colombier { 5767dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 5777dd7cddfSDavid du Colombier } 5787dd7cddfSDavid du Colombier | LWORD ximm comma 5797dd7cddfSDavid du Colombier { 5807dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &nullgen); 5817dd7cddfSDavid du Colombier } 5827dd7cddfSDavid du Colombier /* 5837dd7cddfSDavid du Colombier * END 5847dd7cddfSDavid du Colombier */ 5857dd7cddfSDavid du Colombier | LEND comma 5867dd7cddfSDavid du Colombier { 5877dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &nullgen); 5887dd7cddfSDavid du Colombier } 5897dd7cddfSDavid du Colombier /* 5907dd7cddfSDavid du Colombier * TEXT/GLOBL 5917dd7cddfSDavid du Colombier */ 5927dd7cddfSDavid du Colombier | LTEXT name ',' imm 5937dd7cddfSDavid du Colombier { 5947dd7cddfSDavid du Colombier outcode($1, &$2, NREG, &$4); 5957dd7cddfSDavid du Colombier } 5967dd7cddfSDavid du Colombier | LTEXT name ',' con ',' imm 5977dd7cddfSDavid du Colombier { 5987dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 5997dd7cddfSDavid du Colombier } 6007dd7cddfSDavid du Colombier | LTEXT name ',' imm ':' imm 6017dd7cddfSDavid du Colombier { 6027dd7cddfSDavid du Colombier outgcode($1, &$2, NREG, &$6, &$4); 6037dd7cddfSDavid du Colombier } 6047dd7cddfSDavid du Colombier | LTEXT name ',' con ',' imm ':' imm 6057dd7cddfSDavid du Colombier { 6067dd7cddfSDavid du Colombier outgcode($1, &$2, $4, &$8, &$6); 6077dd7cddfSDavid du Colombier } 6087dd7cddfSDavid du Colombier /* 6097dd7cddfSDavid du Colombier * DATA 6107dd7cddfSDavid du Colombier */ 6117dd7cddfSDavid du Colombier | LDATA name '/' con ',' imm 6127dd7cddfSDavid du Colombier { 6137dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 6147dd7cddfSDavid du Colombier } 6157dd7cddfSDavid du Colombier | LDATA name '/' con ',' ximm 6167dd7cddfSDavid du Colombier { 6177dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 6187dd7cddfSDavid du Colombier } 6197dd7cddfSDavid du Colombier | LDATA name '/' con ',' fimm 6207dd7cddfSDavid du Colombier { 6217dd7cddfSDavid du Colombier outcode($1, &$2, $4, &$6); 6227dd7cddfSDavid du Colombier } 6237dd7cddfSDavid du Colombier /* 6247dd7cddfSDavid du Colombier * RETURN 6257dd7cddfSDavid du Colombier */ 6267dd7cddfSDavid du Colombier | LRETRN comma 6277dd7cddfSDavid du Colombier { 6287dd7cddfSDavid du Colombier outcode($1, &nullgen, NREG, &nullgen); 6297dd7cddfSDavid du Colombier } 6307dd7cddfSDavid du Colombier 6317dd7cddfSDavid du Colombier rel: 6327dd7cddfSDavid du Colombier con '(' LPC ')' 6337dd7cddfSDavid du Colombier { 6347dd7cddfSDavid du Colombier $$ = nullgen; 6357dd7cddfSDavid du Colombier $$.type = D_BRANCH; 6367dd7cddfSDavid du Colombier $$.offset = $1 + pc; 6377dd7cddfSDavid du Colombier } 6387dd7cddfSDavid du Colombier | LNAME offset 6397dd7cddfSDavid du Colombier { 6407dd7cddfSDavid du Colombier $$ = nullgen; 6417dd7cddfSDavid du Colombier if(pass == 2) 6427dd7cddfSDavid du Colombier yyerror("undefined label: %s", $1->name); 6437dd7cddfSDavid du Colombier $$.type = D_BRANCH; 6447dd7cddfSDavid du Colombier $$.sym = $1; 6457dd7cddfSDavid du Colombier $$.offset = $2; 6467dd7cddfSDavid du Colombier } 6477dd7cddfSDavid du Colombier | LLAB offset 6487dd7cddfSDavid du Colombier { 6497dd7cddfSDavid du Colombier $$ = nullgen; 6507dd7cddfSDavid du Colombier $$.type = D_BRANCH; 6517dd7cddfSDavid du Colombier $$.sym = $1; 6527dd7cddfSDavid du Colombier $$.offset = $1->value + $2; 6537dd7cddfSDavid du Colombier } 6547dd7cddfSDavid du Colombier 6557dd7cddfSDavid du Colombier rreg: 6567dd7cddfSDavid du Colombier sreg 6577dd7cddfSDavid du Colombier { 6587dd7cddfSDavid du Colombier $$ = nullgen; 6597dd7cddfSDavid du Colombier $$.type = D_REG; 6607dd7cddfSDavid du Colombier $$.reg = $1; 6617dd7cddfSDavid du Colombier } 6627dd7cddfSDavid du Colombier 6637dd7cddfSDavid du Colombier xlreg: 6647dd7cddfSDavid du Colombier lr 6657dd7cddfSDavid du Colombier | ctr 6667dd7cddfSDavid du Colombier 6677dd7cddfSDavid du Colombier lr: 6687dd7cddfSDavid du Colombier LLR 6697dd7cddfSDavid du Colombier { 6707dd7cddfSDavid du Colombier $$ = nullgen; 6717dd7cddfSDavid du Colombier $$.type = D_SPR; 6727dd7cddfSDavid du Colombier $$.offset = $1; 6737dd7cddfSDavid du Colombier } 6747dd7cddfSDavid du Colombier 6757dd7cddfSDavid du Colombier lcr: 6767dd7cddfSDavid du Colombier LCR 6777dd7cddfSDavid du Colombier { 6787dd7cddfSDavid du Colombier $$ = nullgen; 6797dd7cddfSDavid du Colombier $$.type = D_CREG; 6807dd7cddfSDavid du Colombier $$.reg = NREG; /* whole register */ 6817dd7cddfSDavid du Colombier } 6827dd7cddfSDavid du Colombier 6837dd7cddfSDavid du Colombier ctr: 6847dd7cddfSDavid du Colombier LCTR 6857dd7cddfSDavid du Colombier { 6867dd7cddfSDavid du Colombier $$ = nullgen; 6877dd7cddfSDavid du Colombier $$.type = D_SPR; 6887dd7cddfSDavid du Colombier $$.offset = $1; 6897dd7cddfSDavid du Colombier } 6907dd7cddfSDavid du Colombier 6917dd7cddfSDavid du Colombier msr: 6927dd7cddfSDavid du Colombier LMSR 6937dd7cddfSDavid du Colombier { 6947dd7cddfSDavid du Colombier $$ = nullgen; 6957dd7cddfSDavid du Colombier $$.type = D_MSR; 6967dd7cddfSDavid du Colombier } 6977dd7cddfSDavid du Colombier 6987dd7cddfSDavid du Colombier psr: 6997dd7cddfSDavid du Colombier LSPREG 7007dd7cddfSDavid du Colombier { 7017dd7cddfSDavid du Colombier $$ = nullgen; 7027dd7cddfSDavid du Colombier $$.type = D_SPR; 7037dd7cddfSDavid du Colombier $$.offset = $1; 7047dd7cddfSDavid du Colombier } 7057dd7cddfSDavid du Colombier | LSPR '(' con ')' 7067dd7cddfSDavid du Colombier { 7077dd7cddfSDavid du Colombier $$ = nullgen; 708375daca8SDavid du Colombier $$.type = $1; 7097dd7cddfSDavid du Colombier $$.offset = $3; 7107dd7cddfSDavid du Colombier } 711*6891d857SDavid du Colombier | LDCR '(' con ')' 712*6891d857SDavid du Colombier { 713*6891d857SDavid du Colombier $$ = nullgen; 714*6891d857SDavid du Colombier $$.type = $1; 715*6891d857SDavid du Colombier $$.offset = $3; 716*6891d857SDavid du Colombier } 717*6891d857SDavid du Colombier | LDCR '(' sreg ')' 718*6891d857SDavid du Colombier { 719*6891d857SDavid du Colombier $$ = nullgen; 720*6891d857SDavid du Colombier $$.type = $1; 721*6891d857SDavid du Colombier $$.reg = $3; 722*6891d857SDavid du Colombier $$.offset = 0; 723*6891d857SDavid du Colombier } 7247dd7cddfSDavid du Colombier | msr 7257dd7cddfSDavid du Colombier 7267dd7cddfSDavid du Colombier seg: 7277dd7cddfSDavid du Colombier LSEG '(' con ')' 7287dd7cddfSDavid du Colombier { 7297dd7cddfSDavid du Colombier if($3 < 0 || $3 > 15) 7307dd7cddfSDavid du Colombier yyerror("segment register number out of range"); 7317dd7cddfSDavid du Colombier $$ = nullgen; 7327dd7cddfSDavid du Colombier $$.type = D_SREG; 7337dd7cddfSDavid du Colombier $$.reg = $3; 7347dd7cddfSDavid du Colombier $$.offset = NREG; 7357dd7cddfSDavid du Colombier } 7367dd7cddfSDavid du Colombier | LSEG '(' sreg ')' 7377dd7cddfSDavid du Colombier { 7387dd7cddfSDavid du Colombier $$ = nullgen; 7397dd7cddfSDavid du Colombier $$.type = D_SREG; 7407dd7cddfSDavid du Colombier $$.reg = NREG; 7417dd7cddfSDavid du Colombier $$.offset = $3; 7427dd7cddfSDavid du Colombier } 7437dd7cddfSDavid du Colombier 7447dd7cddfSDavid du Colombier fpscr: 7457dd7cddfSDavid du Colombier LFPSCR 7467dd7cddfSDavid du Colombier { 7477dd7cddfSDavid du Colombier $$ = nullgen; 7487dd7cddfSDavid du Colombier $$.type = D_FPSCR; 7497dd7cddfSDavid du Colombier $$.reg = NREG; 7507dd7cddfSDavid du Colombier } 7517dd7cddfSDavid du Colombier 7527dd7cddfSDavid du Colombier fpscrf: 7537dd7cddfSDavid du Colombier LFPSCR '(' con ')' 7547dd7cddfSDavid du Colombier { 7557dd7cddfSDavid du Colombier $$ = nullgen; 7567dd7cddfSDavid du Colombier $$.type = D_FPSCR; 7577dd7cddfSDavid du Colombier $$.reg = $3; 7587dd7cddfSDavid du Colombier } 7597dd7cddfSDavid du Colombier 7607dd7cddfSDavid du Colombier freg: 7617dd7cddfSDavid du Colombier LFREG 7627dd7cddfSDavid du Colombier { 7637dd7cddfSDavid du Colombier $$ = nullgen; 7647dd7cddfSDavid du Colombier $$.type = D_FREG; 7657dd7cddfSDavid du Colombier $$.reg = $1; 7667dd7cddfSDavid du Colombier } 7677dd7cddfSDavid du Colombier | LF '(' con ')' 7687dd7cddfSDavid du Colombier { 7697dd7cddfSDavid du Colombier $$ = nullgen; 7707dd7cddfSDavid du Colombier $$.type = D_FREG; 7717dd7cddfSDavid du Colombier $$.reg = $3; 7727dd7cddfSDavid du Colombier } 7737dd7cddfSDavid du Colombier 7747dd7cddfSDavid du Colombier creg: 7757dd7cddfSDavid du Colombier LCREG 7767dd7cddfSDavid du Colombier { 7777dd7cddfSDavid du Colombier $$ = nullgen; 7787dd7cddfSDavid du Colombier $$.type = D_CREG; 7797dd7cddfSDavid du Colombier $$.reg = $1; 7807dd7cddfSDavid du Colombier } 7817dd7cddfSDavid du Colombier | LCR '(' con ')' 7827dd7cddfSDavid du Colombier { 7837dd7cddfSDavid du Colombier $$ = nullgen; 7847dd7cddfSDavid du Colombier $$.type = D_CREG; 7857dd7cddfSDavid du Colombier $$.reg = $3; 7867dd7cddfSDavid du Colombier } 7877dd7cddfSDavid du Colombier 7887dd7cddfSDavid du Colombier 7897dd7cddfSDavid du Colombier cbit: con 7907dd7cddfSDavid du Colombier { 7917dd7cddfSDavid du Colombier $$ = nullgen; 7927dd7cddfSDavid du Colombier $$.type = D_REG; 7937dd7cddfSDavid du Colombier $$.reg = $1; 7947dd7cddfSDavid du Colombier } 7957dd7cddfSDavid du Colombier 7967dd7cddfSDavid du Colombier mask: 7977dd7cddfSDavid du Colombier con ',' con 7987dd7cddfSDavid du Colombier { 7997dd7cddfSDavid du Colombier int mb, me; 8007dd7cddfSDavid du Colombier ulong v; 8017dd7cddfSDavid du Colombier 8027dd7cddfSDavid du Colombier $$ = nullgen; 8037dd7cddfSDavid du Colombier $$.type = D_CONST; 8047dd7cddfSDavid du Colombier mb = $1; 8057dd7cddfSDavid du Colombier me = $3; 8067dd7cddfSDavid du Colombier if(mb < 0 || mb > 31 || me < 0 || me > 31){ 8077dd7cddfSDavid du Colombier yyerror("illegal mask start/end value(s)"); 8087dd7cddfSDavid du Colombier mb = me = 0; 8097dd7cddfSDavid du Colombier } 8107dd7cddfSDavid du Colombier if(mb <= me) 8117dd7cddfSDavid du Colombier v = ((ulong)~0L>>mb) & (~0L<<(31-me)); 8127dd7cddfSDavid du Colombier else 8137dd7cddfSDavid du Colombier v = ~(((ulong)~0L>>(me+1)) & (~0L<<(31-(mb-1)))); 8147dd7cddfSDavid du Colombier $$.offset = v; 8157dd7cddfSDavid du Colombier } 8167dd7cddfSDavid du Colombier 8177dd7cddfSDavid du Colombier ximm: 8187dd7cddfSDavid du Colombier '$' addr 8197dd7cddfSDavid du Colombier { 8207dd7cddfSDavid du Colombier $$ = $2; 8217dd7cddfSDavid du Colombier $$.type = D_CONST; 8227dd7cddfSDavid du Colombier } 8237dd7cddfSDavid du Colombier | '$' LSCONST 8247dd7cddfSDavid du Colombier { 8257dd7cddfSDavid du Colombier $$ = nullgen; 8267dd7cddfSDavid du Colombier $$.type = D_SCONST; 8277dd7cddfSDavid du Colombier memcpy($$.sval, $2, sizeof($$.sval)); 8287dd7cddfSDavid du Colombier } 8297dd7cddfSDavid du Colombier 8307dd7cddfSDavid du Colombier fimm: 8317dd7cddfSDavid du Colombier '$' LFCONST 8327dd7cddfSDavid du Colombier { 8337dd7cddfSDavid du Colombier $$ = nullgen; 8347dd7cddfSDavid du Colombier $$.type = D_FCONST; 8357dd7cddfSDavid du Colombier $$.dval = $2; 8367dd7cddfSDavid du Colombier } 8377dd7cddfSDavid du Colombier | '$' '-' LFCONST 8387dd7cddfSDavid du Colombier { 8397dd7cddfSDavid du Colombier $$ = nullgen; 8407dd7cddfSDavid du Colombier $$.type = D_FCONST; 8417dd7cddfSDavid du Colombier $$.dval = -$3; 8427dd7cddfSDavid du Colombier } 8437dd7cddfSDavid du Colombier 8447dd7cddfSDavid du Colombier imm: '$' con 8457dd7cddfSDavid du Colombier { 8467dd7cddfSDavid du Colombier $$ = nullgen; 8477dd7cddfSDavid du Colombier $$.type = D_CONST; 8487dd7cddfSDavid du Colombier $$.offset = $2; 8497dd7cddfSDavid du Colombier } 8507dd7cddfSDavid du Colombier 8517dd7cddfSDavid du Colombier sreg: 8527dd7cddfSDavid du Colombier LREG 8537dd7cddfSDavid du Colombier | LR '(' con ')' 8547dd7cddfSDavid du Colombier { 8557dd7cddfSDavid du Colombier if($$ < 0 || $$ >= NREG) 8567dd7cddfSDavid du Colombier print("register value out of range\n"); 8577dd7cddfSDavid du Colombier $$ = $3; 8587dd7cddfSDavid du Colombier } 8597dd7cddfSDavid du Colombier 8607dd7cddfSDavid du Colombier regaddr: 8617dd7cddfSDavid du Colombier '(' sreg ')' 8627dd7cddfSDavid du Colombier { 8637dd7cddfSDavid du Colombier $$ = nullgen; 8647dd7cddfSDavid du Colombier $$.type = D_OREG; 8657dd7cddfSDavid du Colombier $$.reg = $2; 8667dd7cddfSDavid du Colombier $$.offset = 0; 8677dd7cddfSDavid du Colombier } 8687dd7cddfSDavid du Colombier | '(' sreg '+' sreg ')' 8697dd7cddfSDavid du Colombier { 8707dd7cddfSDavid du Colombier $$ = nullgen; 8717dd7cddfSDavid du Colombier $$.type = D_OREG; 8727dd7cddfSDavid du Colombier $$.reg = $2; 8737dd7cddfSDavid du Colombier $$.xreg = $4; 8747dd7cddfSDavid du Colombier $$.offset = 0; 8757dd7cddfSDavid du Colombier } 8767dd7cddfSDavid du Colombier 8777dd7cddfSDavid du Colombier addr: 8787dd7cddfSDavid du Colombier name 8797dd7cddfSDavid du Colombier | con '(' sreg ')' 8807dd7cddfSDavid du Colombier { 8817dd7cddfSDavid du Colombier $$ = nullgen; 8827dd7cddfSDavid du Colombier $$.type = D_OREG; 8837dd7cddfSDavid du Colombier $$.reg = $3; 8847dd7cddfSDavid du Colombier $$.offset = $1; 8857dd7cddfSDavid du Colombier } 8867dd7cddfSDavid du Colombier 8877dd7cddfSDavid du Colombier name: 8887dd7cddfSDavid du Colombier con '(' pointer ')' 8897dd7cddfSDavid du Colombier { 8907dd7cddfSDavid du Colombier $$ = nullgen; 8917dd7cddfSDavid du Colombier $$.type = D_OREG; 8927dd7cddfSDavid du Colombier $$.name = $3; 8937dd7cddfSDavid du Colombier $$.sym = S; 8947dd7cddfSDavid du Colombier $$.offset = $1; 8957dd7cddfSDavid du Colombier } 8967dd7cddfSDavid du Colombier | LNAME offset '(' pointer ')' 8977dd7cddfSDavid du Colombier { 8987dd7cddfSDavid du Colombier $$ = nullgen; 8997dd7cddfSDavid du Colombier $$.type = D_OREG; 9007dd7cddfSDavid du Colombier $$.name = $4; 9017dd7cddfSDavid du Colombier $$.sym = $1; 9027dd7cddfSDavid du Colombier $$.offset = $2; 9037dd7cddfSDavid du Colombier } 9047dd7cddfSDavid du Colombier | LNAME '<' '>' offset '(' LSB ')' 9057dd7cddfSDavid du Colombier { 9067dd7cddfSDavid du Colombier $$ = nullgen; 9077dd7cddfSDavid du Colombier $$.type = D_OREG; 9087dd7cddfSDavid du Colombier $$.name = D_STATIC; 9097dd7cddfSDavid du Colombier $$.sym = $1; 9107dd7cddfSDavid du Colombier $$.offset = $4; 9117dd7cddfSDavid du Colombier } 9127dd7cddfSDavid du Colombier 9137dd7cddfSDavid du Colombier comma: 9147dd7cddfSDavid du Colombier | ',' 9157dd7cddfSDavid du Colombier 9167dd7cddfSDavid du Colombier offset: 9177dd7cddfSDavid du Colombier { 9187dd7cddfSDavid du Colombier $$ = 0; 9197dd7cddfSDavid du Colombier } 9207dd7cddfSDavid du Colombier | '+' con 9217dd7cddfSDavid du Colombier { 9227dd7cddfSDavid du Colombier $$ = $2; 9237dd7cddfSDavid du Colombier } 9247dd7cddfSDavid du Colombier | '-' con 9257dd7cddfSDavid du Colombier { 9267dd7cddfSDavid du Colombier $$ = -$2; 9277dd7cddfSDavid du Colombier } 9287dd7cddfSDavid du Colombier 9297dd7cddfSDavid du Colombier pointer: 9307dd7cddfSDavid du Colombier LSB 9317dd7cddfSDavid du Colombier | LSP 9327dd7cddfSDavid du Colombier | LFP 9337dd7cddfSDavid du Colombier 9347dd7cddfSDavid du Colombier con: 9357dd7cddfSDavid du Colombier LCONST 9367dd7cddfSDavid du Colombier | LVAR 9377dd7cddfSDavid du Colombier { 9387dd7cddfSDavid du Colombier $$ = $1->value; 9397dd7cddfSDavid du Colombier } 9407dd7cddfSDavid du Colombier | '-' con 9417dd7cddfSDavid du Colombier { 9427dd7cddfSDavid du Colombier $$ = -$2; 9437dd7cddfSDavid du Colombier } 9447dd7cddfSDavid du Colombier | '+' con 9457dd7cddfSDavid du Colombier { 9467dd7cddfSDavid du Colombier $$ = $2; 9477dd7cddfSDavid du Colombier } 9487dd7cddfSDavid du Colombier | '~' con 9497dd7cddfSDavid du Colombier { 9507dd7cddfSDavid du Colombier $$ = ~$2; 9517dd7cddfSDavid du Colombier } 9527dd7cddfSDavid du Colombier | '(' expr ')' 9537dd7cddfSDavid du Colombier { 9547dd7cddfSDavid du Colombier $$ = $2; 9557dd7cddfSDavid du Colombier } 9567dd7cddfSDavid du Colombier 9577dd7cddfSDavid du Colombier expr: 9587dd7cddfSDavid du Colombier con 9597dd7cddfSDavid du Colombier | expr '+' expr 9607dd7cddfSDavid du Colombier { 9617dd7cddfSDavid du Colombier $$ = $1 + $3; 9627dd7cddfSDavid du Colombier } 9637dd7cddfSDavid du Colombier | expr '-' expr 9647dd7cddfSDavid du Colombier { 9657dd7cddfSDavid du Colombier $$ = $1 - $3; 9667dd7cddfSDavid du Colombier } 9677dd7cddfSDavid du Colombier | expr '*' expr 9687dd7cddfSDavid du Colombier { 9697dd7cddfSDavid du Colombier $$ = $1 * $3; 9707dd7cddfSDavid du Colombier } 9717dd7cddfSDavid du Colombier | expr '/' expr 9727dd7cddfSDavid du Colombier { 9737dd7cddfSDavid du Colombier $$ = $1 / $3; 9747dd7cddfSDavid du Colombier } 9757dd7cddfSDavid du Colombier | expr '%' expr 9767dd7cddfSDavid du Colombier { 9777dd7cddfSDavid du Colombier $$ = $1 % $3; 9787dd7cddfSDavid du Colombier } 9797dd7cddfSDavid du Colombier | expr '<' '<' expr 9807dd7cddfSDavid du Colombier { 9817dd7cddfSDavid du Colombier $$ = $1 << $4; 9827dd7cddfSDavid du Colombier } 9837dd7cddfSDavid du Colombier | expr '>' '>' expr 9847dd7cddfSDavid du Colombier { 9857dd7cddfSDavid du Colombier $$ = $1 >> $4; 9867dd7cddfSDavid du Colombier } 9877dd7cddfSDavid du Colombier | expr '&' expr 9887dd7cddfSDavid du Colombier { 9897dd7cddfSDavid du Colombier $$ = $1 & $3; 9907dd7cddfSDavid du Colombier } 9917dd7cddfSDavid du Colombier | expr '^' expr 9927dd7cddfSDavid du Colombier { 9937dd7cddfSDavid du Colombier $$ = $1 ^ $3; 9947dd7cddfSDavid du Colombier } 9957dd7cddfSDavid du Colombier | expr '|' expr 9967dd7cddfSDavid du Colombier { 9977dd7cddfSDavid du Colombier $$ = $1 | $3; 9987dd7cddfSDavid du Colombier } 999