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