From 3f950c9f17d0a73ad62ca9b16b8cc5d01574a584 Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 9 Feb 1990 16:34:17 +0000 Subject: [PATCH] Added a new operator for ncg: is_rom() --- h/cgg_cg.h | 1 + mach/proto/ncg/compute.c | 8 ++++++++ mach/proto/ncg/fillem.c | 2 +- util/ncgg/cgg.y | 4 +++- util/ncgg/keywords | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/h/cgg_cg.h b/h/cgg_cg.h index c6717da3a..acc29f4ed 100644 --- a/h/cgg_cg.h +++ b/h/cgg_cg.h @@ -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 */ diff --git a/mach/proto/ncg/compute.c b/mach/proto/ncg/compute.c index 60ff090b8..466ad0099 100644 --- a/mach/proto/ncg/compute.c +++ b/mach/proto/ncg/compute.c @@ -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); diff --git a/mach/proto/ncg/fillem.c b/mach/proto/ncg/fillem.c index 9b9d898bd..5a6a8827d 100644 --- a/mach/proto/ncg/fillem.c +++ b/mach/proto/ncg/fillem.c @@ -279,7 +279,7 @@ dopseudo() { } break; } - if (rommask != 0) { + if (nromwords != 0) { romcont[MAXROM]=rommask; enterglo(labstr,romcont); } diff --git a/util/ncgg/cgg.y b/util/ncgg/cgg.y index b51a49b87..ab122e9f1 100644 --- a/util/ncgg/cgg.y +++ b/util/ncgg/cgg.y @@ -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 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 ')' diff --git a/util/ncgg/keywords b/util/ncgg/keywords index 48f6019c2..ea5183376 100644 --- a/util/ncgg/keywords +++ b/util/ncgg/keywords @@ -24,6 +24,7 @@ from FROM gen GEN highw HIGHW inreg INREG +is_rom ISROM kills KILLS leaving LEAVING loww LOWW -- 2.34.1