make to work with new em_code interface
This commit is contained in:
		
							parent
							
								
									d7d501d43a
								
							
						
					
					
						commit
						d6c52e0fef
					
				
					 3 changed files with 87 additions and 32 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| EMHOME =	../../.. | EMHOME =	../../.. | ||||||
| MODLIB =	$(EMHOME)/modules/lib | MODLIB =	$(EMHOME)/modules/lib | ||||||
| INCL =		-I$(EMHOME)/modules/h | INCL =		-I$(EMHOME)/modules/h -I$(EMHOME)/h | ||||||
| GFILES=		occam.g | GFILES=		occam.g | ||||||
| PRIMARY=	occam.o Lpars.o keytab.o lex.yy.o code.o em.o | PRIMARY=	occam.o Lpars.o keytab.o lex.yy.o code.o em.o | ||||||
| SECUNDARY=	symtab.o expr.o builtin.o | SECUNDARY=	symtab.o expr.o builtin.o | ||||||
|  | @ -8,7 +8,8 @@ TERTIARY=	report.o | ||||||
| LLOPT= | LLOPT= | ||||||
| LEXLIB=-ll | LEXLIB=-ll | ||||||
| LIBRARY=	$(MODLIB)/libem_mes.a $(MODLIB)/libemk.a \
 | LIBRARY=	$(MODLIB)/libem_mes.a $(MODLIB)/libemk.a \
 | ||||||
| 		$(MODLIB)/libprint.a $(MODLIB)/libstring.a \
 | 		$(MODLIB)/liballoc.a $(MODLIB)/libprint.a \
 | ||||||
|  | 		$(MODLIB)/libstring.a \
 | ||||||
| 		$(MODLIB)/libsystem.a $(LEXLIB) | 		$(MODLIB)/libsystem.a $(LEXLIB) | ||||||
| CFLAGS =	-Dvoid=int -O $(INCL) | CFLAGS =	-Dvoid=int -O $(INCL) | ||||||
| LDFLAGS =	-i | LDFLAGS =	-i | ||||||
|  |  | ||||||
|  | @ -195,18 +195,8 @@ void Loe(name, offset) char *name; int offset; | ||||||
| 		C_loe_dnam(name, (arith) offset); | 		C_loe_dnam(name, (arith) offset); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| typedef int (*pfi)(); |  | ||||||
| 
 |  | ||||||
| static int operators[]=	{ '<', '>', '=',  GE,  LE,  NE }; | static int operators[]=	{ '<', '>', '=',  GE,  LE,  NE }; | ||||||
| 
 | 
 | ||||||
| extern C_blt(), C_bgt(), C_beq(), C_bge(), C_ble(), C_bne(); |  | ||||||
| extern C_tlt(), C_tgt(), C_teq(), C_tge(), C_tle(), C_tne(); |  | ||||||
| extern C_zlt(), C_zgt(), C_zeq(), C_zge(), C_zle(), C_zne(); |  | ||||||
| 
 |  | ||||||
| static pfi C_bxx[]= { C_blt, C_bgt, C_beq, C_bge, C_ble, C_bne }; |  | ||||||
| static pfi C_txx[]= { C_tlt, C_tgt, C_teq, C_tge, C_tle, C_tne }; |  | ||||||
| static pfi C_zxx[]= { C_zlt, C_zgt, C_zeq, C_zge, C_zle, C_zne }; |  | ||||||
| 
 |  | ||||||
| void bxx(pos, op, L) register pos, op, L; | void bxx(pos, op, L) register pos, op, L; | ||||||
| { | { | ||||||
| 	register i; | 	register i; | ||||||
|  | @ -223,35 +213,96 @@ void bxx(pos, op, L) register pos, op, L; | ||||||
| 		if (pos && (i+=3)>=6) i-=6; | 		if (pos && (i+=3)>=6) i-=6; | ||||||
| 		if (vz>wz) { | 		if (vz>wz) { | ||||||
| 			C_cmi((arith) vz); | 			C_cmi((arith) vz); | ||||||
| 			(*C_zxx[i])((label) L); | 			switch(i) { | ||||||
|  | 			case 0: | ||||||
|  | 				C_zlt((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 1: | ||||||
|  | 				C_zgt((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 2: | ||||||
|  | 				C_zeq((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 3: | ||||||
|  | 				C_zge((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 4: | ||||||
|  | 				C_zle((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 5: | ||||||
|  | 				C_zne((label) L); | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			(*C_bxx[i])((label) L); | 			switch(i) { | ||||||
|  | 			case 0: | ||||||
|  | 				C_blt((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 1: | ||||||
|  | 				C_bgt((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 2: | ||||||
|  | 				C_beq((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 3: | ||||||
|  | 				C_bge((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 4: | ||||||
|  | 				C_ble((label) L); | ||||||
|  | 				break; | ||||||
|  | 			case 5: | ||||||
|  | 				C_bne((label) L); | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Txx(op) register int op; | void Txx(op) register int op; | ||||||
| { | { | ||||||
| 	register i; | 	switch(op) { | ||||||
| 
 | 	case '<': | ||||||
| 	for (i=0; operators[i]!=op; i++) ; | 		C_tlt(); | ||||||
| 
 | 		break; | ||||||
| 	(*C_txx[i])(); | 	case '>': | ||||||
|  | 		C_tgt(); | ||||||
|  | 		break; | ||||||
|  | 	case '=': | ||||||
|  | 		C_teq(); | ||||||
|  | 		break; | ||||||
|  | 	case GE: | ||||||
|  | 		C_tge(); | ||||||
|  | 		break; | ||||||
|  | 	case LE: | ||||||
|  | 		C_tle(); | ||||||
|  | 		break; | ||||||
|  | 	case NE: | ||||||
|  | 		C_tne(); | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
| 	cwv(); | 	cwv(); | ||||||
| 	C_ngi((arith) vz); | 	C_ngi((arith) vz); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| extern C_adi(), C_sbi(), C_mli(), C_dvi(), C_rmi(); |  | ||||||
| 
 |  | ||||||
| void xxi(op) register op; | void xxi(op) register op; | ||||||
| { | { | ||||||
| 	static int operators[]=	{ '+',   '-',   '*',   '/',   BS }; | 	switch(op) { | ||||||
| 	static pfi C_xxi[]=	{ C_adi, C_sbi, C_mli, C_dvi, C_rmi }; | 	case '+': | ||||||
| 	register i; | 		C_adi((arith) vz); | ||||||
| 
 | 		break; | ||||||
| 	for (i=0; operators[i]!=op; i++) ; | 	case '-': | ||||||
| 
 | 		C_sbi((arith) vz); | ||||||
| 	(*C_xxi[i])((arith) vz); | 		break; | ||||||
|  | 	case '*': | ||||||
|  | 		C_mli((arith) vz); | ||||||
|  | 		break; | ||||||
|  | 	case '/': | ||||||
|  | 		C_dvi((arith) vz); | ||||||
|  | 		break; | ||||||
|  | 	case BS: | ||||||
|  | 		C_rmi((arith) vz); | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void aar()			{	C_aar((arith) wz); } | void aar()			{	C_aar((arith) wz); } | ||||||
|  | @ -337,7 +388,7 @@ static void do_fil(f) struct ftree *f; | ||||||
| 		dot_label(new_dot_label(&f->lab)); | 		dot_label(new_dot_label(&f->lab)); | ||||||
| 		C_rom_scon(f->file, (arith) (strlen(f->file)+1)); | 		C_rom_scon(f->file, (arith) (strlen(f->file)+1)); | ||||||
| 	} | 	} | ||||||
| 	C_fil_dlb((label) f->lab); | 	C_fil_dlb((label) f->lab, (arith) 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void fil() | void fil() | ||||||
|  | @ -377,21 +428,24 @@ int set_file(f) char *f; | ||||||
| 
 | 
 | ||||||
| void par_begin() | void par_begin() | ||||||
| { | { | ||||||
|  | 	C_zer((arith) pz); | ||||||
| 	C_lal((arith) curr_offset); | 	C_lal((arith) curr_offset); | ||||||
| 	C_cal("pc_begin"); | 	C_cal("pc_begin"); | ||||||
| 	C_asp((arith) pz); | 	C_asp((arith) (2*pz)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void par_fork(NONZERO) int *NONZERO; | void par_fork(NONZERO) int *NONZERO; | ||||||
| { | { | ||||||
|  | 	C_zer((arith) pz); | ||||||
| 	C_cal("pc_fork"); | 	C_cal("pc_fork"); | ||||||
|  | 	C_asp(pz); | ||||||
| 	C_lfr((arith) wz); | 	C_lfr((arith) wz); | ||||||
| 	C_zne((label) new_label(NONZERO)); | 	C_zne((label) new_label(NONZERO)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void resumenext() | void resumenext() | ||||||
| { | { | ||||||
| 	C_cal("resumene"); | 	C_cal("resumenext"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void no_deadlock() | void no_deadlock() | ||||||
|  |  | ||||||
|  | @ -27,7 +27,7 @@ struct expr *new_node(op, left, right, byte) | ||||||
| 		register long lc, rc; | 		register long lc, rc; | ||||||
| 
 | 
 | ||||||
| 		lc=left->u.const; | 		lc=left->u.const; | ||||||
| 		rc=right->u.const; | 		if (right) rc=right->u.const; else rc = 0; | ||||||
| 
 | 
 | ||||||
| 		switch (op) { | 		switch (op) { | ||||||
| 		case '+':	lc+=rc; break; | 		case '+':	lc+=rc; break; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue