Added a new operator for ncg: is_rom()

This commit is contained in:
ceriel 1990-02-09 16:34:17 +00:00
parent 069d94c39b
commit 3f950c9f17
5 changed files with 14 additions and 2 deletions

View file

@ -129,6 +129,7 @@ typedef struct exprnode *node_p;
#define EX_OR 41
#define EX_XOR 42
#define EX_AND 43
#define EX_ISROM 44
typedef struct { /* to stack coercions */

View file

@ -71,6 +71,7 @@ char opdesc[] = {
LLDEF|RLDEF, /* EX_OR */
LLDEF|RLDEF, /* EX_XOR */
LLDEF|RLDEF, /* EX_AND */
0, /* EX_ISROM */
};
string salloc(),strcpy(),strcat();
@ -208,6 +209,13 @@ result_t compute(node) register node_p node; {
return(undefres);
result.e_v.e_con = gp->gl_rom[node->ex_rnode];
return(result);
case EX_ISROM:
leaf2=dollar[node->ex_lnode];
if (leaf2.e_typ != EV_ADDR)
result.e_v.e_con = 0;
else
result.e_v.e_con = lookglo(leaf2.e_v.e_addr.ea_str) != 0;
return(result);
case EX_LOWW:
result.e_v.e_con = saveemp[node->ex_lnode].em_u.em_loper&0xFFFF;
return(result);

View file

@ -279,7 +279,7 @@ dopseudo() {
}
break;
}
if (rommask != 0) {
if (nromwords != 0) {
romcont[MAXROM]=rommask;
enterglo(labstr,romcont);
}

View file

@ -75,7 +75,7 @@ iocc_t iops[20];
%token FROM TO
%token TEST MOVE STACK RETURN
%token PATTERNS PAT WITH EXACT KILLS USES REUSING GEN YIELDS LEAVING
%token DEFINED SAMESIGN SFIT UFIT ROM LOWW HIGHW
%token DEFINED SAMESIGN SFIT UFIT ROM LOWW HIGHW ISROM
%token CMPEQ CMPNE CMPLT CMPGT CMPLE CMPGE OR2 AND2 LSHIFT RSHIFT NOT COMP
%token INREG REGVAR REG_ANY REG_FLOAT REG_LOOP REG_POINTER
%token <yy_int> ADORNACCESS
@ -1015,6 +1015,8 @@ expr
{ $$ = make_expr(TYPBOOL,EX_UFIT,i_expr($3),i_expr($5)); }
| ROM '(' emarg ',' NUMBER ')'
{ $$ = make_expr(TYPINT,EX_ROM,$3-1,chkincl($5,1,3)-1); }
| ISROM '(' emarg ')'
{ $$ = make_expr(TYPINT,EX_ISROM,$3-1,0); }
| LOWW '(' emarg ')'
{ $$ = make_expr(TYPINT,EX_LOWW,$3-1,0); }
| HIGHW '(' emarg ')'

View file

@ -24,6 +24,7 @@ from FROM
gen GEN
highw HIGHW
inreg INREG
is_rom ISROM
kills KILLS
leaving LEAVING
loww LOWW