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); |
|
|
} |
|
|
; |
|