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