13e12c5d1SDavid du Colombier %{ 23e12c5d1SDavid du Colombier #include "a.h" 33e12c5d1SDavid du Colombier %} 43e12c5d1SDavid du Colombier %union { 53e12c5d1SDavid du Colombier Sym *sym; 63e12c5d1SDavid du Colombier long lval; 7*6520663fSDavid du Colombier struct { 8*6520663fSDavid du Colombier long v1; 9*6520663fSDavid du Colombier long v2; 10*6520663fSDavid du Colombier } con2; 113e12c5d1SDavid du Colombier double dval; 123e12c5d1SDavid du Colombier char sval[8]; 133e12c5d1SDavid du Colombier Gen gen; 143e12c5d1SDavid du Colombier Gen2 gen2; 153e12c5d1SDavid du Colombier } 163e12c5d1SDavid du Colombier %left '|' 173e12c5d1SDavid du Colombier %left '^' 183e12c5d1SDavid du Colombier %left '&' 193e12c5d1SDavid du Colombier %left '<' '>' 203e12c5d1SDavid du Colombier %left '+' '-' 213e12c5d1SDavid du Colombier %left '*' '/' '%' 223e12c5d1SDavid du Colombier %token <lval> LTYPE0 LTYPE1 LTYPE2 LTYPE3 LTYPE4 23*6520663fSDavid du Colombier %token <lval> LTYPEC LTYPED LTYPEN LTYPER LTYPET LTYPES LTYPEM LTYPEI LTYPEG 243e12c5d1SDavid du Colombier %token <lval> LCONST LFP LPC LSB 253e12c5d1SDavid du Colombier %token <lval> LBREG LLREG LSREG LFREG 263e12c5d1SDavid du Colombier %token <dval> LFCONST 273e12c5d1SDavid du Colombier %token <sval> LSCONST LSP 283e12c5d1SDavid du Colombier %token <sym> LNAME LLAB LVAR 293e12c5d1SDavid du Colombier %type <lval> con expr pointer offset 30*6520663fSDavid du Colombier %type <con2> con2 31*6520663fSDavid du Colombier %type <gen> mem imm imm2 reg nam rel rem rim rom omem nmem 323e12c5d1SDavid du Colombier %type <gen2> nonnon nonrel nonrem rimnon rimrem remrim 33*6520663fSDavid du Colombier %type <gen2> spec1 spec2 spec3 spec4 spec5 spec6 spec7 spec8 343e12c5d1SDavid du Colombier %% 353e12c5d1SDavid du Colombier prog: 363e12c5d1SDavid du Colombier | prog line 373e12c5d1SDavid du Colombier 383e12c5d1SDavid du Colombier line: 393e12c5d1SDavid du Colombier LLAB ':' 403e12c5d1SDavid du Colombier { 413e12c5d1SDavid du Colombier if($1->value != pc) 423e12c5d1SDavid du Colombier yyerror("redeclaration of %s", $1->name); 433e12c5d1SDavid du Colombier $1->value = pc; 443e12c5d1SDavid du Colombier } 453e12c5d1SDavid du Colombier line 463e12c5d1SDavid du Colombier | LNAME ':' 473e12c5d1SDavid du Colombier { 483e12c5d1SDavid du Colombier $1->type = LLAB; 493e12c5d1SDavid du Colombier $1->value = pc; 503e12c5d1SDavid du Colombier } 513e12c5d1SDavid du Colombier line 523e12c5d1SDavid du Colombier | ';' 533e12c5d1SDavid du Colombier | inst ';' 543e12c5d1SDavid du Colombier | error ';' 553e12c5d1SDavid du Colombier 563e12c5d1SDavid du Colombier inst: 573e12c5d1SDavid du Colombier LNAME '=' expr 583e12c5d1SDavid du Colombier { 593e12c5d1SDavid du Colombier $1->type = LVAR; 603e12c5d1SDavid du Colombier $1->value = $3; 613e12c5d1SDavid du Colombier } 623e12c5d1SDavid du Colombier | LVAR '=' expr 633e12c5d1SDavid du Colombier { 643e12c5d1SDavid du Colombier if($1->value != $3) 653e12c5d1SDavid du Colombier yyerror("redeclaration of %s", $1->name); 663e12c5d1SDavid du Colombier $1->value = $3; 673e12c5d1SDavid du Colombier } 683e12c5d1SDavid du Colombier | LTYPE0 nonnon { outcode($1, &$2); } 693e12c5d1SDavid du Colombier | LTYPE1 nonrem { outcode($1, &$2); } 703e12c5d1SDavid du Colombier | LTYPE2 rimnon { outcode($1, &$2); } 713e12c5d1SDavid du Colombier | LTYPE3 rimrem { outcode($1, &$2); } 723e12c5d1SDavid du Colombier | LTYPE4 remrim { outcode($1, &$2); } 733e12c5d1SDavid du Colombier | LTYPER nonrel { outcode($1, &$2); } 743e12c5d1SDavid du Colombier | LTYPED spec1 { outcode($1, &$2); } 753e12c5d1SDavid du Colombier | LTYPET spec2 { outcode($1, &$2); } 763e12c5d1SDavid du Colombier | LTYPEC spec3 { outcode($1, &$2); } 773e12c5d1SDavid du Colombier | LTYPEN spec4 { outcode($1, &$2); } 783e12c5d1SDavid du Colombier | LTYPES spec5 { outcode($1, &$2); } 793e12c5d1SDavid du Colombier | LTYPEM spec6 { outcode($1, &$2); } 803ff48bf5SDavid du Colombier | LTYPEI spec7 { outcode($1, &$2); } 81*6520663fSDavid du Colombier | LTYPEG spec8 { outcode($1, &$2); } 823e12c5d1SDavid du Colombier 833e12c5d1SDavid du Colombier nonnon: 843e12c5d1SDavid du Colombier { 853e12c5d1SDavid du Colombier $$.from = nullgen; 863e12c5d1SDavid du Colombier $$.to = nullgen; 873e12c5d1SDavid du Colombier } 883e12c5d1SDavid du Colombier | ',' 893e12c5d1SDavid du Colombier { 903e12c5d1SDavid du Colombier $$.from = nullgen; 913e12c5d1SDavid du Colombier $$.to = nullgen; 923e12c5d1SDavid du Colombier } 933e12c5d1SDavid du Colombier 943e12c5d1SDavid du Colombier rimrem: 953e12c5d1SDavid du Colombier rim ',' rem 963e12c5d1SDavid du Colombier { 973e12c5d1SDavid du Colombier $$.from = $1; 983e12c5d1SDavid du Colombier $$.to = $3; 993e12c5d1SDavid du Colombier } 1003e12c5d1SDavid du Colombier 1013e12c5d1SDavid du Colombier remrim: 1023e12c5d1SDavid du Colombier rem ',' rim 1033e12c5d1SDavid du Colombier { 1043e12c5d1SDavid du Colombier $$.from = $1; 1053e12c5d1SDavid du Colombier $$.to = $3; 1063e12c5d1SDavid du Colombier } 1073e12c5d1SDavid du Colombier 1083e12c5d1SDavid du Colombier rimnon: 1093e12c5d1SDavid du Colombier rim ',' 1103e12c5d1SDavid du Colombier { 1113e12c5d1SDavid du Colombier $$.from = $1; 1123e12c5d1SDavid du Colombier $$.to = nullgen; 1133e12c5d1SDavid du Colombier } 1143e12c5d1SDavid du Colombier | rim 1153e12c5d1SDavid du Colombier { 1163e12c5d1SDavid du Colombier $$.from = $1; 1173e12c5d1SDavid du Colombier $$.to = nullgen; 1183e12c5d1SDavid du Colombier } 1193e12c5d1SDavid du Colombier 1203e12c5d1SDavid du Colombier nonrem: 1213e12c5d1SDavid du Colombier ',' rem 1223e12c5d1SDavid du Colombier { 1233e12c5d1SDavid du Colombier $$.from = nullgen; 1243e12c5d1SDavid du Colombier $$.to = $2; 1253e12c5d1SDavid du Colombier } 1263e12c5d1SDavid du Colombier | rem 1273e12c5d1SDavid du Colombier { 1283e12c5d1SDavid du Colombier $$.from = nullgen; 1293e12c5d1SDavid du Colombier $$.to = $1; 1303e12c5d1SDavid du Colombier } 1313e12c5d1SDavid du Colombier 1323e12c5d1SDavid du Colombier nonrel: 1333e12c5d1SDavid du Colombier ',' rel 1343e12c5d1SDavid du Colombier { 1353e12c5d1SDavid du Colombier $$.from = nullgen; 1363e12c5d1SDavid du Colombier $$.to = $2; 1373e12c5d1SDavid du Colombier } 1383e12c5d1SDavid du Colombier | rel 1393e12c5d1SDavid du Colombier { 1403e12c5d1SDavid du Colombier $$.from = nullgen; 1413e12c5d1SDavid du Colombier $$.to = $1; 1423e12c5d1SDavid du Colombier } 1433e12c5d1SDavid du Colombier 1443e12c5d1SDavid du Colombier spec1: /* DATA */ 14580ee5cbfSDavid du Colombier nam '/' con ',' imm 1463e12c5d1SDavid du Colombier { 1473e12c5d1SDavid du Colombier $$.from = $1; 1483e12c5d1SDavid du Colombier $$.from.scale = $3; 1493e12c5d1SDavid du Colombier $$.to = $5; 1503e12c5d1SDavid du Colombier } 1513e12c5d1SDavid du Colombier 1523e12c5d1SDavid du Colombier spec2: /* TEXT */ 1533e12c5d1SDavid du Colombier mem ',' imm 1543e12c5d1SDavid du Colombier { 1553e12c5d1SDavid du Colombier $$.from = $1; 1563e12c5d1SDavid du Colombier $$.to = $3; 1573e12c5d1SDavid du Colombier } 1583e12c5d1SDavid du Colombier | mem ',' con ',' imm 1593e12c5d1SDavid du Colombier { 1603e12c5d1SDavid du Colombier $$.from = $1; 1613e12c5d1SDavid du Colombier $$.from.scale = $3; 1623e12c5d1SDavid du Colombier $$.to = $5; 1633e12c5d1SDavid du Colombier } 1643e12c5d1SDavid du Colombier 1653e12c5d1SDavid du Colombier spec3: /* JMP/CALL */ 1663e12c5d1SDavid du Colombier ',' rom 1673e12c5d1SDavid du Colombier { 1683e12c5d1SDavid du Colombier $$.from = nullgen; 1693e12c5d1SDavid du Colombier $$.to = $2; 1703e12c5d1SDavid du Colombier } 1713e12c5d1SDavid du Colombier | rom 1723e12c5d1SDavid du Colombier { 1733e12c5d1SDavid du Colombier $$.from = nullgen; 1743e12c5d1SDavid du Colombier $$.to = $1; 1753e12c5d1SDavid du Colombier } 1763e12c5d1SDavid du Colombier 1773e12c5d1SDavid du Colombier spec4: /* NOP */ 1783e12c5d1SDavid du Colombier nonnon 1793e12c5d1SDavid du Colombier | nonrem 1803e12c5d1SDavid du Colombier 1813e12c5d1SDavid du Colombier spec5: /* SHL/SHR */ 1823e12c5d1SDavid du Colombier rim ',' rem 1833e12c5d1SDavid du Colombier { 1843e12c5d1SDavid du Colombier $$.from = $1; 1853e12c5d1SDavid du Colombier $$.to = $3; 1863e12c5d1SDavid du Colombier } 1873e12c5d1SDavid du Colombier | rim ',' rem ':' LLREG 1883e12c5d1SDavid du Colombier { 1893e12c5d1SDavid du Colombier $$.from = $1; 1903e12c5d1SDavid du Colombier $$.to = $3; 1913e12c5d1SDavid du Colombier if($$.from.index != D_NONE) 1923e12c5d1SDavid du Colombier yyerror("dp shift with lhs index"); 1933e12c5d1SDavid du Colombier $$.from.index = $5; 1943e12c5d1SDavid du Colombier } 1953e12c5d1SDavid du Colombier 1963e12c5d1SDavid du Colombier spec6: /* MOVW/MOVL */ 1973e12c5d1SDavid du Colombier rim ',' rem 1983e12c5d1SDavid du Colombier { 1993e12c5d1SDavid du Colombier $$.from = $1; 2003e12c5d1SDavid du Colombier $$.to = $3; 2013e12c5d1SDavid du Colombier } 2023e12c5d1SDavid du Colombier | rim ',' rem ':' LSREG 2033e12c5d1SDavid du Colombier { 2043e12c5d1SDavid du Colombier $$.from = $1; 2053e12c5d1SDavid du Colombier $$.to = $3; 2063e12c5d1SDavid du Colombier if($$.to.index != D_NONE) 2073e12c5d1SDavid du Colombier yyerror("dp move with lhs index"); 2083e12c5d1SDavid du Colombier $$.to.index = $5; 2093e12c5d1SDavid du Colombier } 2103e12c5d1SDavid du Colombier 2113ff48bf5SDavid du Colombier spec7: 2123ff48bf5SDavid du Colombier rim ',' 2133ff48bf5SDavid du Colombier { 2143ff48bf5SDavid du Colombier $$.from = $1; 2153ff48bf5SDavid du Colombier $$.to = nullgen; 2163ff48bf5SDavid du Colombier } 2173ff48bf5SDavid du Colombier | rim 2183ff48bf5SDavid du Colombier { 2193ff48bf5SDavid du Colombier $$.from = $1; 2203ff48bf5SDavid du Colombier $$.to = nullgen; 2213ff48bf5SDavid du Colombier } 2223ff48bf5SDavid du Colombier | rim ',' rem 2233ff48bf5SDavid du Colombier { 2243ff48bf5SDavid du Colombier $$.from = $1; 2253ff48bf5SDavid du Colombier $$.to = $3; 2263ff48bf5SDavid du Colombier } 2273ff48bf5SDavid du Colombier 228*6520663fSDavid du Colombier spec8: /* GLOBL */ 229*6520663fSDavid du Colombier mem ',' imm 230*6520663fSDavid du Colombier { 231*6520663fSDavid du Colombier $$.from = $1; 232*6520663fSDavid du Colombier $$.to = $3; 233*6520663fSDavid du Colombier } 234*6520663fSDavid du Colombier | mem ',' con ',' imm 235*6520663fSDavid du Colombier { 236*6520663fSDavid du Colombier $$.from = $1; 237*6520663fSDavid du Colombier $$.from.scale = $3; 238*6520663fSDavid du Colombier $$.to = $5; 239*6520663fSDavid du Colombier } 240*6520663fSDavid du Colombier 2413e12c5d1SDavid du Colombier rem: 2423e12c5d1SDavid du Colombier reg 2433e12c5d1SDavid du Colombier | mem 2443e12c5d1SDavid du Colombier 2453e12c5d1SDavid du Colombier rom: 2463e12c5d1SDavid du Colombier rel 2473e12c5d1SDavid du Colombier | nmem 2483e12c5d1SDavid du Colombier | '*' reg 2493e12c5d1SDavid du Colombier { 2503e12c5d1SDavid du Colombier $$ = $2; 2513e12c5d1SDavid du Colombier } 2523e12c5d1SDavid du Colombier | '*' omem 2533e12c5d1SDavid du Colombier { 2543e12c5d1SDavid du Colombier $$ = $2; 2553e12c5d1SDavid du Colombier } 25680ee5cbfSDavid du Colombier | reg 25780ee5cbfSDavid du Colombier | omem 258*6520663fSDavid du Colombier | imm 2593e12c5d1SDavid du Colombier 2603e12c5d1SDavid du Colombier rim: 2613e12c5d1SDavid du Colombier rem 2623e12c5d1SDavid du Colombier | imm 2633e12c5d1SDavid du Colombier 2643e12c5d1SDavid du Colombier rel: 2653e12c5d1SDavid du Colombier con '(' LPC ')' 2663e12c5d1SDavid du Colombier { 2673e12c5d1SDavid du Colombier $$ = nullgen; 2683e12c5d1SDavid du Colombier $$.type = D_BRANCH; 2693e12c5d1SDavid du Colombier $$.offset = $1 + pc; 2703e12c5d1SDavid du Colombier } 2713e12c5d1SDavid du Colombier | LNAME offset 2723e12c5d1SDavid du Colombier { 2733e12c5d1SDavid du Colombier $$ = nullgen; 2743e12c5d1SDavid du Colombier if(pass == 2) 2753e12c5d1SDavid du Colombier yyerror("undefined label: %s", $1->name); 2763e12c5d1SDavid du Colombier $$.type = D_BRANCH; 2773e12c5d1SDavid du Colombier $$.sym = $1; 2783e12c5d1SDavid du Colombier $$.offset = $2; 2793e12c5d1SDavid du Colombier } 2803e12c5d1SDavid du Colombier | LLAB offset 2813e12c5d1SDavid du Colombier { 2823e12c5d1SDavid du Colombier $$ = nullgen; 2833e12c5d1SDavid du Colombier $$.type = D_BRANCH; 2843e12c5d1SDavid du Colombier $$.sym = $1; 2853e12c5d1SDavid du Colombier $$.offset = $1->value + $2; 2863e12c5d1SDavid du Colombier } 2873e12c5d1SDavid du Colombier 2883e12c5d1SDavid du Colombier reg: 2893e12c5d1SDavid du Colombier LBREG 2903e12c5d1SDavid du Colombier { 2913e12c5d1SDavid du Colombier $$ = nullgen; 2923e12c5d1SDavid du Colombier $$.type = $1; 2933e12c5d1SDavid du Colombier } 2943e12c5d1SDavid du Colombier | LFREG 2953e12c5d1SDavid du Colombier { 2963e12c5d1SDavid du Colombier $$ = nullgen; 2973e12c5d1SDavid du Colombier $$.type = $1; 2983e12c5d1SDavid du Colombier } 2993e12c5d1SDavid du Colombier | LLREG 3003e12c5d1SDavid du Colombier { 3013e12c5d1SDavid du Colombier $$ = nullgen; 3023e12c5d1SDavid du Colombier $$.type = $1; 3033e12c5d1SDavid du Colombier } 3043e12c5d1SDavid du Colombier | LSP 3053e12c5d1SDavid du Colombier { 3063e12c5d1SDavid du Colombier $$ = nullgen; 3073e12c5d1SDavid du Colombier $$.type = D_SP; 3083e12c5d1SDavid du Colombier } 3093e12c5d1SDavid du Colombier | LSREG 3103e12c5d1SDavid du Colombier { 3113e12c5d1SDavid du Colombier $$ = nullgen; 3123e12c5d1SDavid du Colombier $$.type = $1; 3133e12c5d1SDavid du Colombier } 3143e12c5d1SDavid du Colombier 3153e12c5d1SDavid du Colombier imm: 3163e12c5d1SDavid du Colombier '$' con 3173e12c5d1SDavid du Colombier { 3183e12c5d1SDavid du Colombier $$ = nullgen; 3193e12c5d1SDavid du Colombier $$.type = D_CONST; 3203e12c5d1SDavid du Colombier $$.offset = $2; 3213e12c5d1SDavid du Colombier } 3223e12c5d1SDavid du Colombier | '$' nam 3233e12c5d1SDavid du Colombier { 3243e12c5d1SDavid du Colombier $$ = $2; 3253e12c5d1SDavid du Colombier $$.index = $2.type; 3263e12c5d1SDavid du Colombier $$.type = D_ADDR; 327219b2ee8SDavid du Colombier /* 3283e12c5d1SDavid du Colombier if($2.type == D_AUTO || $2.type == D_PARAM) 3293e12c5d1SDavid du Colombier yyerror("constant cannot be automatic: %s", 3303e12c5d1SDavid du Colombier $2.sym->name); 331219b2ee8SDavid du Colombier */ 3323e12c5d1SDavid du Colombier } 3333e12c5d1SDavid du Colombier | '$' LSCONST 3343e12c5d1SDavid du Colombier { 3353e12c5d1SDavid du Colombier $$ = nullgen; 3363e12c5d1SDavid du Colombier $$.type = D_SCONST; 3373e12c5d1SDavid du Colombier memcpy($$.sval, $2, sizeof($$.sval)); 3383e12c5d1SDavid du Colombier } 3393e12c5d1SDavid du Colombier | '$' LFCONST 3403e12c5d1SDavid du Colombier { 3413e12c5d1SDavid du Colombier $$ = nullgen; 3423e12c5d1SDavid du Colombier $$.type = D_FCONST; 3433e12c5d1SDavid du Colombier $$.dval = $2; 3443e12c5d1SDavid du Colombier } 345219b2ee8SDavid du Colombier | '$' '(' LFCONST ')' 346219b2ee8SDavid du Colombier { 347219b2ee8SDavid du Colombier $$ = nullgen; 348219b2ee8SDavid du Colombier $$.type = D_FCONST; 349219b2ee8SDavid du Colombier $$.dval = $3; 350219b2ee8SDavid du Colombier } 3513e12c5d1SDavid du Colombier | '$' '-' LFCONST 3523e12c5d1SDavid du Colombier { 3533e12c5d1SDavid du Colombier $$ = nullgen; 3543e12c5d1SDavid du Colombier $$.type = D_FCONST; 3553e12c5d1SDavid du Colombier $$.dval = -$3; 3563e12c5d1SDavid du Colombier } 3573e12c5d1SDavid du Colombier 358*6520663fSDavid du Colombier imm2: 359*6520663fSDavid du Colombier '$' con2 360*6520663fSDavid du Colombier { 361*6520663fSDavid du Colombier $$ = nullgen; 362*6520663fSDavid du Colombier $$.type = D_CONST2; 363*6520663fSDavid du Colombier $$.offset = $2.v1; 364*6520663fSDavid du Colombier $$.offset2 = $2.v2; 365*6520663fSDavid du Colombier } 366*6520663fSDavid du Colombier 367*6520663fSDavid du Colombier con2: 368*6520663fSDavid du Colombier LCONST 369*6520663fSDavid du Colombier { 370*6520663fSDavid du Colombier $$.v1 = $1; 371*6520663fSDavid du Colombier $$.v2 = 0; 372*6520663fSDavid du Colombier } 373*6520663fSDavid du Colombier | '-' LCONST 374*6520663fSDavid du Colombier { 375*6520663fSDavid du Colombier $$.v1 = -$2; 376*6520663fSDavid du Colombier $$.v2 = 0; 377*6520663fSDavid du Colombier } 378*6520663fSDavid du Colombier | LCONST '-' LCONST 379*6520663fSDavid du Colombier { 380*6520663fSDavid du Colombier $$.v1 = $1; 381*6520663fSDavid du Colombier $$.v2 = $3; 382*6520663fSDavid du Colombier } 383*6520663fSDavid du Colombier | '-' LCONST '-' LCONST 384*6520663fSDavid du Colombier { 385*6520663fSDavid du Colombier $$.v1 = -$2; 386*6520663fSDavid du Colombier $$.v2 = $4; 387*6520663fSDavid du Colombier } 388*6520663fSDavid du Colombier 3893e12c5d1SDavid du Colombier mem: 3903e12c5d1SDavid du Colombier omem 3913e12c5d1SDavid du Colombier | nmem 3923e12c5d1SDavid du Colombier 3933e12c5d1SDavid du Colombier omem: 3943e12c5d1SDavid du Colombier con 3953e12c5d1SDavid du Colombier { 3963e12c5d1SDavid du Colombier $$ = nullgen; 3973e12c5d1SDavid du Colombier $$.type = D_INDIR+D_NONE; 3983e12c5d1SDavid du Colombier $$.offset = $1; 3993e12c5d1SDavid du Colombier } 4003e12c5d1SDavid du Colombier | con '(' LLREG ')' 4013e12c5d1SDavid du Colombier { 4023e12c5d1SDavid du Colombier $$ = nullgen; 4033e12c5d1SDavid du Colombier $$.type = D_INDIR+$3; 4043e12c5d1SDavid du Colombier $$.offset = $1; 4053e12c5d1SDavid du Colombier } 4063e12c5d1SDavid du Colombier | con '(' LSP ')' 4073e12c5d1SDavid du Colombier { 4083e12c5d1SDavid du Colombier $$ = nullgen; 4093e12c5d1SDavid du Colombier $$.type = D_INDIR+D_SP; 4103e12c5d1SDavid du Colombier $$.offset = $1; 4113e12c5d1SDavid du Colombier } 4123e12c5d1SDavid du Colombier | con '(' LLREG '*' con ')' 4133e12c5d1SDavid du Colombier { 4143e12c5d1SDavid du Colombier $$ = nullgen; 4153e12c5d1SDavid du Colombier $$.type = D_INDIR+D_NONE; 4163e12c5d1SDavid du Colombier $$.offset = $1; 4173e12c5d1SDavid du Colombier $$.index = $3; 4183e12c5d1SDavid du Colombier $$.scale = $5; 4193e12c5d1SDavid du Colombier checkscale($$.scale); 4203e12c5d1SDavid du Colombier } 4213e12c5d1SDavid du Colombier | con '(' LLREG ')' '(' LLREG '*' con ')' 4223e12c5d1SDavid du Colombier { 4233e12c5d1SDavid du Colombier $$ = nullgen; 4243e12c5d1SDavid du Colombier $$.type = D_INDIR+$3; 4253e12c5d1SDavid du Colombier $$.offset = $1; 4263e12c5d1SDavid du Colombier $$.index = $6; 4273e12c5d1SDavid du Colombier $$.scale = $8; 4283e12c5d1SDavid du Colombier checkscale($$.scale); 4293e12c5d1SDavid du Colombier } 4303e12c5d1SDavid du Colombier | '(' LLREG ')' 4313e12c5d1SDavid du Colombier { 4323e12c5d1SDavid du Colombier $$ = nullgen; 4333e12c5d1SDavid du Colombier $$.type = D_INDIR+$2; 4343e12c5d1SDavid du Colombier } 4353e12c5d1SDavid du Colombier | '(' LSP ')' 4363e12c5d1SDavid du Colombier { 4373e12c5d1SDavid du Colombier $$ = nullgen; 4383e12c5d1SDavid du Colombier $$.type = D_INDIR+D_SP; 4393e12c5d1SDavid du Colombier } 440*6520663fSDavid du Colombier | con '(' LSREG ')' 441*6520663fSDavid du Colombier { 442*6520663fSDavid du Colombier $$ = nullgen; 443*6520663fSDavid du Colombier $$.type = D_INDIR+$3; 444*6520663fSDavid du Colombier $$.offset = $1; 445*6520663fSDavid du Colombier } 4463e12c5d1SDavid du Colombier | '(' LLREG '*' con ')' 4473e12c5d1SDavid du Colombier { 4483e12c5d1SDavid du Colombier $$ = nullgen; 4493e12c5d1SDavid du Colombier $$.type = D_INDIR+D_NONE; 4503e12c5d1SDavid du Colombier $$.index = $2; 4513e12c5d1SDavid du Colombier $$.scale = $4; 4523e12c5d1SDavid du Colombier checkscale($$.scale); 4533e12c5d1SDavid du Colombier } 4543e12c5d1SDavid du Colombier | '(' LLREG ')' '(' LLREG '*' con ')' 4553e12c5d1SDavid du Colombier { 4563e12c5d1SDavid du Colombier $$ = nullgen; 4573e12c5d1SDavid du Colombier $$.type = D_INDIR+$2; 4583e12c5d1SDavid du Colombier $$.index = $5; 4593e12c5d1SDavid du Colombier $$.scale = $7; 4603e12c5d1SDavid du Colombier checkscale($$.scale); 4613e12c5d1SDavid du Colombier } 4623e12c5d1SDavid du Colombier 4633e12c5d1SDavid du Colombier nmem: 4643e12c5d1SDavid du Colombier nam 4653e12c5d1SDavid du Colombier { 4663e12c5d1SDavid du Colombier $$ = $1; 4673e12c5d1SDavid du Colombier } 4683e12c5d1SDavid du Colombier | nam '(' LLREG '*' con ')' 4693e12c5d1SDavid du Colombier { 4703e12c5d1SDavid du Colombier $$ = $1; 4713e12c5d1SDavid du Colombier $$.index = $3; 4723e12c5d1SDavid du Colombier $$.scale = $5; 4733e12c5d1SDavid du Colombier checkscale($$.scale); 4743e12c5d1SDavid du Colombier } 4753e12c5d1SDavid du Colombier 4763e12c5d1SDavid du Colombier nam: 4773e12c5d1SDavid du Colombier LNAME offset '(' pointer ')' 4783e12c5d1SDavid du Colombier { 4793e12c5d1SDavid du Colombier $$ = nullgen; 4803e12c5d1SDavid du Colombier $$.type = $4; 4813e12c5d1SDavid du Colombier $$.sym = $1; 4823e12c5d1SDavid du Colombier $$.offset = $2; 4833e12c5d1SDavid du Colombier } 4843e12c5d1SDavid du Colombier | LNAME '<' '>' offset '(' LSB ')' 4853e12c5d1SDavid du Colombier { 4863e12c5d1SDavid du Colombier $$ = nullgen; 4873e12c5d1SDavid du Colombier $$.type = D_STATIC; 4883e12c5d1SDavid du Colombier $$.sym = $1; 4893e12c5d1SDavid du Colombier $$.offset = $4; 4903e12c5d1SDavid du Colombier } 4913e12c5d1SDavid du Colombier 4923e12c5d1SDavid du Colombier offset: 4933e12c5d1SDavid du Colombier { 4943e12c5d1SDavid du Colombier $$ = 0; 4953e12c5d1SDavid du Colombier } 4963e12c5d1SDavid du Colombier | '+' con 4973e12c5d1SDavid du Colombier { 4983e12c5d1SDavid du Colombier $$ = $2; 4993e12c5d1SDavid du Colombier } 5003e12c5d1SDavid du Colombier | '-' con 5013e12c5d1SDavid du Colombier { 5023e12c5d1SDavid du Colombier $$ = -$2; 5033e12c5d1SDavid du Colombier } 5043e12c5d1SDavid du Colombier 5053e12c5d1SDavid du Colombier pointer: 5063e12c5d1SDavid du Colombier LSB 5073e12c5d1SDavid du Colombier | LSP 5083e12c5d1SDavid du Colombier { 5093e12c5d1SDavid du Colombier $$ = D_AUTO; 5103e12c5d1SDavid du Colombier } 5113e12c5d1SDavid du Colombier | LFP 5123e12c5d1SDavid du Colombier 5133e12c5d1SDavid du Colombier con: 5143e12c5d1SDavid du Colombier LCONST 5153e12c5d1SDavid du Colombier | LVAR 5163e12c5d1SDavid du Colombier { 5173e12c5d1SDavid du Colombier $$ = $1->value; 5183e12c5d1SDavid du Colombier } 5193e12c5d1SDavid du Colombier | '-' con 5203e12c5d1SDavid du Colombier { 5213e12c5d1SDavid du Colombier $$ = -$2; 5223e12c5d1SDavid du Colombier } 5233e12c5d1SDavid du Colombier | '+' con 5243e12c5d1SDavid du Colombier { 5253e12c5d1SDavid du Colombier $$ = $2; 5263e12c5d1SDavid du Colombier } 5273e12c5d1SDavid du Colombier | '~' con 5283e12c5d1SDavid du Colombier { 5293e12c5d1SDavid du Colombier $$ = ~$2; 5303e12c5d1SDavid du Colombier } 5313e12c5d1SDavid du Colombier | '(' expr ')' 5323e12c5d1SDavid du Colombier { 5333e12c5d1SDavid du Colombier $$ = $2; 5343e12c5d1SDavid du Colombier } 5353e12c5d1SDavid du Colombier 5363e12c5d1SDavid du Colombier expr: 5373e12c5d1SDavid du Colombier con 5383e12c5d1SDavid du Colombier | expr '+' expr 5393e12c5d1SDavid du Colombier { 5403e12c5d1SDavid du Colombier $$ = $1 + $3; 5413e12c5d1SDavid du Colombier } 5423e12c5d1SDavid du Colombier | expr '-' expr 5433e12c5d1SDavid du Colombier { 5443e12c5d1SDavid du Colombier $$ = $1 - $3; 5453e12c5d1SDavid du Colombier } 5463e12c5d1SDavid du Colombier | expr '*' expr 5473e12c5d1SDavid du Colombier { 5483e12c5d1SDavid du Colombier $$ = $1 * $3; 5493e12c5d1SDavid du Colombier } 5503e12c5d1SDavid du Colombier | expr '/' expr 5513e12c5d1SDavid du Colombier { 5523e12c5d1SDavid du Colombier $$ = $1 / $3; 5533e12c5d1SDavid du Colombier } 5543e12c5d1SDavid du Colombier | expr '%' expr 5553e12c5d1SDavid du Colombier { 5563e12c5d1SDavid du Colombier $$ = $1 % $3; 5573e12c5d1SDavid du Colombier } 5583e12c5d1SDavid du Colombier | expr '<' '<' expr 5593e12c5d1SDavid du Colombier { 5603e12c5d1SDavid du Colombier $$ = $1 << $4; 5613e12c5d1SDavid du Colombier } 5623e12c5d1SDavid du Colombier | expr '>' '>' expr 5633e12c5d1SDavid du Colombier { 5643e12c5d1SDavid du Colombier $$ = $1 >> $4; 5653e12c5d1SDavid du Colombier } 5663e12c5d1SDavid du Colombier | expr '&' expr 5673e12c5d1SDavid du Colombier { 5683e12c5d1SDavid du Colombier $$ = $1 & $3; 5693e12c5d1SDavid du Colombier } 5703e12c5d1SDavid du Colombier | expr '^' expr 5713e12c5d1SDavid du Colombier { 5723e12c5d1SDavid du Colombier $$ = $1 ^ $3; 5733e12c5d1SDavid du Colombier } 5743e12c5d1SDavid du Colombier | expr '|' expr 5753e12c5d1SDavid du Colombier { 5763e12c5d1SDavid du Colombier $$ = $1 | $3; 5773e12c5d1SDavid du Colombier } 578