| 11 |
%type <lcalk> rejestr |
%type <lcalk> rejestr |
| 12 |
%type <lcalk> rozkazy_3arg |
%type <lcalk> rozkazy_3arg |
| 13 |
%type <lcalk> argumenty |
%type <lcalk> argumenty |
|
%type <lcalk> lo_op |
|
|
%type <lcalk> hi_op |
|
| 14 |
%type <lcalk> b_cond |
%type <lcalk> b_cond |
| 15 |
%type <lcalk> mem_load |
%type <lcalk> mem_load |
| 16 |
%type <lcalk> mem_store |
%type <lcalk> mem_store |
| 257 |
|
|
| 258 |
etyk = (eStala)?eStala:eDane; |
etyk = (eStala)?eStala:eDane; |
| 259 |
|
|
| 260 |
|
// to przydałoby się całkiem inaczej rozwiązać, ale |
| 261 |
|
// nie mam czasu :/ |
| 262 |
|
if (!etyk) |
| 263 |
|
etyk = ZnajdzEtykieteRozkazu($1); |
| 264 |
|
|
| 265 |
if (!etyk) |
if (!etyk) |
| 266 |
{ |
{ |
| 267 |
yyerror(E_NOCONST); |
yyerror(E_NOCONST); |
| 270 |
else |
else |
| 271 |
$$ = etyk->adres; |
$$ = etyk->adres; |
| 272 |
} |
} |
| 273 |
|
| LO NAWIASL liczba NAWIASP |
| 274 |
|
{ |
| 275 |
|
$$ = OP_LO($3); |
| 276 |
|
} |
| 277 |
|
| HI NAWIASL liczba NAWIASP |
| 278 |
|
{ |
| 279 |
|
$$ = OP_HI($3); |
| 280 |
|
} |
| 281 |
; |
; |
| 282 |
|
|
| 283 |
wyr2: dyrektywa |
wyr2: dyrektywa |
| 564 |
DodajRozkaz(ZrobRozkaz(TYP_REGREG, F_ALU, 0, OPC_SUBCC, |
DodajRozkaz(ZrobRozkaz(TYP_REGREG, F_ALU, 0, OPC_SUBCC, |
| 565 |
$4, $2, 0), TAK, NULL); |
$4, $2, 0), TAK, NULL); |
| 566 |
} |
} |
| 567 |
| R_SETHI sethi PRZECINEK rejestr |
| R_SETHI liczba PRZECINEK rejestr |
| 568 |
|
{ |
| 569 |
|
if ($2 > 0x3FFFFF) |
| 570 |
|
{ |
| 571 |
|
yyerror(E_OVERFLOW); |
| 572 |
|
YYABORT; |
| 573 |
|
} |
| 574 |
|
DodajRozkaz(ZrobSetHi($4,$2), TAK, NULL); |
| 575 |
|
} |
| 576 |
|
| PR_SET liczba PRZECINEK rejestr |
| 577 |
{ |
{ |
| 578 |
// DodajRozkaz(ZrobSethi($4,$2), ); |
DodajRozkaz( ZrobSetHi($4, OP_HI($2)), TAK, NULL); |
| 579 |
|
DodajRozkaz( ZrobRozkaz(TYP_REGIMM, F_ALU, $4, OPC_OR, |
| 580 |
|
$4, 0, OP_LO($2)), TAK, NULL); |
| 581 |
} |
} |
| 582 |
| mem_instr |
| mem_instr |
| 583 |
| R_JMPL adres_wew PRZECINEK rejestr |
| R_JMPL adres_wew PRZECINEK rejestr |
| 590 |
} |
} |
| 591 |
; |
; |
| 592 |
|
|
|
sethi: |
|
|
; |
|
|
|
|
| 593 |
mem_instr: mem_load adres PRZECINEK rejestr |
mem_instr: mem_load adres PRZECINEK rejestr |
| 594 |
{ |
{ |
| 595 |
ulint rozkaz = $2 | ROZKAZ_OPC($1) | ROZKAZ_DST($4); |
ulint rozkaz = $2 | ROZKAZ_OPC($1) | ROZKAZ_DST($4); |
| 669 |
{ |
{ |
| 670 |
ulint slowoRozkazowe = $2 | ROZKAZ_OPC($1); |
ulint slowoRozkazowe = $2 | ROZKAZ_OPC($1); |
| 671 |
|
|
| 672 |
//sprawdzenie, czy nie było %lo() z etykietą, której |
DodajRozkaz(slowoRozkazowe, TAK, NULL); |
|
// jeszcze nie było |
|
|
// if (etykLink) |
|
|
// DodajRozkaz(slowoRozkazowe, NIE, etykLink); |
|
|
// else |
|
|
DodajRozkaz(slowoRozkazowe, TAK, NULL); |
|
|
etykLink = NULL; |
|
| 673 |
} |
} |
| 674 |
; |
; |
| 675 |
|
|
| 722 |
else |
else |
| 723 |
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1); |
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1); |
| 724 |
} |
} |
|
| lo_op |
|
|
{ |
|
|
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($1); |
|
|
} |
|
|
; |
|
|
|
|
|
lo_op: LO NAWIASL CIAG_ALNUM NAWIASP |
|
|
{ |
|
|
/* etykLink = ZnajdzEtykieteStalej($3); |
|
|
|
|
|
if (!etykLink) |
|
|
{ |
|
|
etykLink = ZnajdzEtykieteDanych($3); |
|
|
if (!etykLink) |
|
|
*/ |
|
|
} |
|
|
| LO NAWIASL liczba NAWIASP |
|
|
{ |
|
|
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM(OP_LO($3)); |
|
|
} |
|
| 725 |
; |
; |
| 726 |
|
|
|
hi_op: HI NAWIASL CIAG_ALNUM NAWIASP |
|
|
{ |
|
|
} |
|
|
| HI NAWIASL liczba NAWIASP |
|
|
{ |
|
|
$$ = OP_HI($3); |
|
|
} |
|
|
; |
|