Added a new operator for ncg: is_rom()
This commit is contained in:
		
							parent
							
								
									069d94c39b
								
							
						
					
					
						commit
						3f950c9f17
					
				
					 5 changed files with 14 additions and 2 deletions
				
			
		|  | @ -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 */ | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -279,7 +279,7 @@ dopseudo() { | |||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
| 		if (rommask != 0) { | ||||
| 		if (nromwords != 0) { | ||||
| 			romcont[MAXROM]=rommask; | ||||
| 			enterglo(labstr,romcont); | ||||
| 		} | ||||
|  |  | |||
|  | @ -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 ')' | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ from	FROM | |||
| gen	GEN | ||||
| highw	HIGHW | ||||
| inreg	INREG | ||||
| is_rom	ISROM | ||||
| kills	KILLS | ||||
| leaving	LEAVING | ||||
| loww	LOWW | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue