1 |
|
|
2 |
%union { |
%union { |
3 |
unsigned long lcalk; |
unsigned long lcalk; |
4 |
char * string; |
char *string; |
5 |
} |
} |
6 |
|
|
7 |
%type <string> tekst_ascii |
%type <string> tekst_ascii |
18 |
%type <lcalk> mem_store |
%type <lcalk> mem_store |
19 |
%type <lcalk> adres |
%type <lcalk> adres |
20 |
%type <lcalk> adres_wew |
%type <lcalk> adres_wew |
21 |
|
%type <lcalk> adres_dsp |
22 |
|
|
23 |
|
|
24 |
%token <lcalk> LICZBA |
%token <lcalk> LICZBA |
25 |
%token MINUS |
%token MINUS |
249 |
sword = -$2; |
sword = -$2; |
250 |
$$ = (ulint) sword; |
$$ = (ulint) sword; |
251 |
} |
} |
252 |
|
| CIAG_ALNUM |
253 |
|
{ /* stała */ |
254 |
|
Lista *stala = ZnajdzEtykieteStalej($1); |
255 |
|
|
256 |
|
if (!stala) |
257 |
|
{ |
258 |
|
yyerror(E_NOCONST); |
259 |
|
YYABORT; |
260 |
|
} |
261 |
|
else |
262 |
|
$$ = stala->adres; |
263 |
|
} |
264 |
; |
; |
265 |
|
|
266 |
wyr2: dyrektywa |
wyr2: dyrektywa |
308 |
} |
} |
309 |
; |
; |
310 |
|
|
311 |
align: LICZBA { |
align: liczba { |
312 |
int _al = $1; |
int _al = $1; |
313 |
if (_al != 2 && _al != 4) |
if (_al != 2 && _al != 4) |
314 |
yywarn(W_ALIGNVAL); |
yywarn(W_ALIGNVAL); |
320 |
} |
} |
321 |
; |
; |
322 |
|
|
323 |
skip: LICZBA { |
skip: liczba { |
324 |
unsigned int i; |
unsigned int i; |
325 |
|
|
326 |
if (SprawdzSekcje(DANE)) |
if (SprawdzSekcje(DANE)) |
343 |
if (SprawdzSekcje(DANE)) |
if (SprawdzSekcje(DANE)) |
344 |
YYABORT; |
YYABORT; |
345 |
|
|
346 |
if (sbajt < INT8_MIN || (sbajt >0 && sbajt > UINT8_MAX)) |
if (sbajt < INT8_MIN || (sbajt > 0 && sbajt > UINT8_MAX)) |
347 |
{ |
{ |
348 |
yyerror(E_OVERFLOW); |
yyerror(E_OVERFLOW); |
349 |
YYABORT; |
YYABORT; |
374 |
|
|
375 |
dane_polslowa: liczba |
dane_polslowa: liczba |
376 |
{ |
{ |
377 |
int shalf = $1; |
long int shalf = $1; |
378 |
|
|
379 |
if (SprawdzSekcje(DANE)) |
if (SprawdzSekcje(DANE)) |
380 |
YYABORT; |
YYABORT; |
503 |
} |
} |
504 |
etykLink = NULL; |
etykLink = NULL; |
505 |
} |
} |
506 |
|
| PR_JMP adres_wew |
507 |
|
{ |
508 |
|
ulint rozkaz = $2; |
509 |
|
|
510 |
|
rozkaz &= (ROZKAZ_F(F_ALU) | 0x3FFFFFFF); |
511 |
|
rozkaz |= ROZKAZ_OPC(OPC_JMPL); |
512 |
|
DodajRozkaz(rozkaz, TAK, NULL); |
513 |
|
} |
514 |
; |
; |
515 |
|
|
516 |
b_cond: B_BN { $$ = $1 } |
b_cond: B_BN { $$ = $1 } |
609 |
} |
} |
610 |
| liczba |
| liczba |
611 |
{ |
{ |
612 |
if ((signed long) $1 < -4096 || ($1 > 0 && $1 > 4095)) |
long int sword = $1; |
613 |
{ |
|
614 |
yyerror(E_OVERFLOW); |
if (sword < -4096 || (sword > 0 && sword > 4095)) |
|
YYABORT; |
|
|
} |
|
|
$$ = ZrobRozkaz(TYP_REGIMM, F_MEM, 0, 0, 0, 0, $1); |
|
|
} |
|
|
| rejestr PLUS LICZBA |
|
|
{ |
|
|
if ($3 > 4095) |
|
615 |
{ |
{ |
616 |
yyerror(E_OVERFLOW); |
yyerror(E_OVERFLOW); |
617 |
YYABORT; |
YYABORT; |
618 |
} |
} |
619 |
$$ = ZrobRozkaz(TYP_REGIMM, F_MEM, 0, 0, $1, 0, $3); |
$$ = ZrobRozkaz(TYP_REGIMM, F_MEM, 0, 0, 0, 0, sword); |
620 |
} |
} |
621 |
| rejestr MINUS LICZBA |
| rejestr adres_dsp |
622 |
{ |
{ |
623 |
if ($3 > 4096) |
long int sword = $2; |
624 |
|
|
625 |
|
if (sword < -4096 || (sword > 0 && sword > 4095)) |
626 |
{ |
{ |
627 |
yyerror(E_OVERFLOW); |
yyerror(E_OVERFLOW); |
628 |
YYABORT; |
YYABORT; |
629 |
} |
} |
630 |
$$ = ZrobRozkaz(TYP_REGIMM, F_MEM, 0, 0, $1, 0, -$3); |
$$ = ZrobRozkaz(TYP_REGIMM, F_MEM, 0, 0, $1, 0, sword); |
631 |
} |
} |
632 |
; |
; |
633 |
|
|
634 |
|
adres_dsp: PLUS liczba { $$ = $2 } |
635 |
|
| MINUS liczba { $$ = (signed long) $2 * (-1); } |
636 |
|
; |
637 |
|
|
638 |
trzy_arg: rozkazy_3arg argumenty |
trzy_arg: rozkazy_3arg argumenty |
639 |
{ |
{ |
714 |
if (!etykLink) |
if (!etykLink) |
715 |
*/ |
*/ |
716 |
} |
} |
717 |
| LO NAWIASL LICZBA NAWIASP |
| LO NAWIASL liczba NAWIASP |
718 |
{ |
{ |
719 |
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM($3 & 0x3FF); |
$$ = ROZKAZ_TYP(TYP_REGIMM) | ROZKAZ_IMM(OP_LO($3)); |
720 |
} |
} |
721 |
; |
; |
722 |
|
|
723 |
hi_op: HI NAWIASL CIAG_ALNUM NAWIASP |
hi_op: HI NAWIASL CIAG_ALNUM NAWIASP |
724 |
{ |
{ |
725 |
} |
} |
726 |
| HI NAWIASL LICZBA NAWIASP |
| HI NAWIASL liczba NAWIASP |
727 |
{ |
{ |
728 |
|
$$ = OP_HI($3); |
729 |
} |
} |
730 |
; |
; |