fixup commit for tag 'release-6-0-pre-1'

This commit is contained in:
cvs2hg
2007-02-25 22:49:23 +00:00
parent 6a0dd9377d
commit 2d80c1d2c8
675 changed files with 111 additions and 45781 deletions

View File

@@ -1,228 +0,0 @@
# $Header$
EMHOME=../..
CFILES=main.c getline.c lookup.c var.c process.c backward.c util.c \
alloc.c putline.c cleanup.c peephole.c flow.c reg.c tes.c \
pop_push.c
OFILES=main.o getline.o lookup.o var.o process.o backward.o util.o\
alloc.o putline.o cleanup.o peephole.o flow.o tes.o pop_push.o
ONOGLOB=regnoglob.o
OGLOB=regglob.o
LIBS=$(EMHOME)/lib/em_data.a
CFLAGS=-O -DNDEBUG -I$(EMHOME)/h
LDFLAGS=
LINT=lint
OPR=opr
PROPTS=
CPP=$(EMHOME)/lib/cpp
# LEXLIB is implementation dependent, try -ll or -lln first
LEXLIB=-ll
all: opt opt2
opt: $(OFILES) $(ONOGLOB) pattern.o $(LIBS)
$(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(ONOGLOB) pattern.o $(LIBS) -o opt
opt2: $(OFILES) $(OGLOB) pattern.o $(LIBS)
$(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(OGLOB) pattern.o $(LIBS) -o opt2
test: opt testopt
testopt
cmp: all
-cmp opt $(EMHOME)/lib/em_opt
-cmp opt2 $(EMHOME)/lib/em_opt2
-cmp em_opt.6 $(EMHOME)/man/em_opt.6
install:all
-size opt $(EMHOME)/lib/em_opt
rm -f $(EMHOME)/lib/em_opt
cp opt $(EMHOME)/lib/em_opt
-size opt2 $(EMHOME)/lib/em_opt2
rm -f $(EMHOME)/lib/em_opt2
cp opt2 $(EMHOME)/lib/em_opt2
rm -f $(EMHOME)/man/em_opt.6
cp em_opt.6 $(EMHOME)/man/em_opt.6
pattern.c: patterns mktab
$(CPP) patterns | mktab > pattern.c
mktab: mktab.o $(LIBS)
$(CC) $(CFLAGS) mktab.o $(LIBS) $(LEXLIB) -o mktab
mktab.o: scan.c optim.h param.h pattern.h types.h
pop_push.c pop_push.h: $(EMHOME)/etc/em_table pop_push.awk
awk -f pop_push.awk < $(EMHOME)/etc/em_table > pop_push.c
depend: pattern.c
sed '/^#AUTOAUTO/,$$d' Makefile >Makefile.new
echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >> Makefile.new
cp reg.c regglob.c
cp reg.c regnoglob.c
mkdep $(CFILES) pattern.c regglob.c regnoglob.c | sed 's/\.c:/.o:/' >> Makefile.new
rm -f regglob.c regnoglob.c
mv Makefile Makefile.old
mv Makefile.new Makefile
lint: $(CFILES) pattern.c
$(LINT) $(CFLAGS) $(CFILES) pattern.c>lint 2>&1
printall:
-pr $(PROPTS) Makefile -n *.h `ls $(CFILES)` mktab.y scan.l patterns|$(OPR)
touch print
print: Makefile *.h $(CFILES) mktab.y scan.l patterns
-pr $(PROPTS) -n $? | $(OPR)
touch print
opr:
make pr | $(OPR)
pr:
@pr $(PROPTS) -n Makefile *.h $(CFILES) mktab.y scan.l patterns
clean:
rm -f *.o opt mktab mktab.c scan.c pattern.c opt2 Out \
pop_push.c pop_push.h
regnoglob.o: reg.c
$(CC) $(CFLAGS) -c reg.c
mv reg.o regnoglob.o
regglob.o: reg.c
$(CC) $(CFLAGS) -c -DGLOBAL_OPT reg.c
mv reg.o regglob.o
# the next lines are generated automatically
#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
main.o: alloc.h
main.o: ext.h
main.o: param.h
main.o: tes.h
main.o: types.h
getline.o: alloc.h
getline.o: ext.h
getline.o: line.h
getline.o: lookup.h
getline.o: param.h
getline.o: proinf.h
getline.o: tes.h
getline.o: types.h
lookup.o: alloc.h
lookup.o: lookup.h
lookup.o: param.h
lookup.o: proinf.h
lookup.o: tes.h
lookup.o: types.h
var.o: lookup.h
var.o: param.h
var.o: proinf.h
var.o: tes.h
var.o: types.h
process.o: alloc.h
process.o: assert.h
process.o: ext.h
process.o: line.h
process.o: lookup.h
process.o: param.h
process.o: proinf.h
process.o: tes.h
process.o: types.h
backward.o: alloc.h
backward.o: assert.h
backward.o: ext.h
backward.o: line.h
backward.o: lookup.h
backward.o: param.h
backward.o: proinf.h
backward.o: tes.h
backward.o: types.h
util.o: assert.h
util.o: ext.h
util.o: lookup.h
util.o: optim.h
util.o: param.h
util.o: proinf.h
util.o: tes.h
util.o: types.h
alloc.o: alloc.h
alloc.o: assert.h
alloc.o: line.h
alloc.o: lookup.h
alloc.o: param.h
alloc.o: proinf.h
alloc.o: tes.h
alloc.o: types.h
putline.o: alloc.h
putline.o: assert.h
putline.o: ext.h
putline.o: line.h
putline.o: lookup.h
putline.o: optim.h
putline.o: param.h
putline.o: proinf.h
putline.o: tes.h
putline.o: types.h
cleanup.o: assert.h
cleanup.o: ext.h
cleanup.o: lookup.h
cleanup.o: param.h
cleanup.o: types.h
peephole.o: alloc.h
peephole.o: assert.h
peephole.o: ext.h
peephole.o: line.h
peephole.o: lookup.h
peephole.o: optim.h
peephole.o: param.h
peephole.o: pattern.h
peephole.o: proinf.h
peephole.o: tes.h
peephole.o: types.h
flow.o: alloc.h
flow.o: ext.h
flow.o: line.h
flow.o: optim.h
flow.o: param.h
flow.o: proinf.h
flow.o: tes.h
flow.o: types.h
reg.o: alloc.h
reg.o: assert.h
reg.o: ext.h
reg.o: line.h
reg.o: param.h
reg.o: proinf.h
reg.o: tes.h
reg.o: types.h
tes.o: alloc.h
tes.o: assert.h
tes.o: ext.h
tes.o: line.h
tes.o: param.h
tes.o: pop_push.h
tes.o: proinf.h
tes.o: tes.h
tes.o: types.h
pop_push.o: pop_push.h
pattern.o: param.h
pattern.o: pattern.h
pattern.o: types.h
regglob.o: alloc.h
regglob.o: assert.h
regglob.o: ext.h
regglob.o: line.h
regglob.o: param.h
regglob.o: proinf.h
regglob.o: tes.h
regglob.o: types.h
regnoglob.o: alloc.h
regnoglob.o: assert.h
regnoglob.o: ext.h
regnoglob.o: line.h
regnoglob.o: param.h
regnoglob.o: proinf.h
regnoglob.o: tes.h
regnoglob.o: types.h

View File

@@ -1,15 +0,0 @@
: '$Header$'
for extension in c y
do
for file in *.$extension
do ofile=`basename $file .$extension`.o
grep '^# *include.*"' $file|sed "s/.*\"\(.*\)\".*/$ofile: \1/"
done
done | sort -u >depend
ed - Makefile <<'!'
/AUTOAUTOAUTO/+,$d
$r depend
w
q
!
rm -f depend

View File

@@ -1,226 +0,0 @@
/*
* This file contains the main part of the stackheight computation phase.
*
* Author: Hans van Eck.
*/
#include <stdio.h>
#include <em_spec.h>
#include <em_mnem.h>
#include <em_pseu.h>
#include "param.h"
#include "assert.h"
#include "types.h"
#include "shc.h"
#include "alloc.h"
#include "proinf.h"
#include "line.h"
#include "ext.h"
#include "pop_push.h"
extern char *pop_push[];
extern char flow_tab[];
#define NON_CONTINUABLE(i) (flow_tab[i]&JUMP)
#define ISABRANCH(i) (flow_tab[i]&HASLABEL)
#define ISCONDBRANCH(i) (flow_tab[i]&CONDBRA)
lblst_p est_list = NULL;
#define INSTR(lnp) (lnp->l_instr & BMASK)
#define TYPE(lnp) lnp->l_optyp
#define PREV(lnp) lnp->l_prev
#define SHORT(lnp) lnp->l_a.la_short
#define MINI(lnp) ((lnp->l_optyp & BMASK) - Z_OPMINI)
#define IS_MINI(lnp) (lnp->l_optyp >= OPMINI)
#define IS_LOC(l) (l!=(line_p) 0 && INSTR(l)==op_loc && IS_MINI(l))
int state;
static int stack_height = 0;
init_state()
{
stack_height = 0;
change_state(KNOWN);
est_list = NULL;
}
shc_pseudos()
{
register line_p lp;
for (lp = pseudos; lp != (line_p)0; lp = lp->l_next) {
switch(INSTR(lp)) {
case ps_con:
case ps_rom:
if (lp->l_optyp == OPLIST) {
register arg_p ap = lp->l_a.la_arg;
while (ap != (arg_p) 0) {
if (ap->a_typ == ARGNUM) {
assign_label(ap->a_a.a_np->n_repl);
}
ap = ap->a_next;
}
} else if (lp->l_optyp == OPNUMLAB)
assign_label(lp->l_a.la_np->n_repl);
}
}
}
shc_instr(lnp)
line_p lnp;
{
char *s;
register instr = INSTR(lnp);
register int mult, arg, argdef;
line_p x = PREV(lnp);
line_p y = (x == (line_p) 0 ? (line_p) 0 : PREV(x));
if (state == NO_STACK_MES) return;
if ( instr == op_lab) {
do_inst_label(lnp);
return;
}
if (instr < sp_fmnem || instr > sp_lmnem) {
return;
}
if(state == NOTREACHED) return; /* What else ? */
s = pop_push[instr];
if (*s != '0')
while (*s != '\0') {
if (*s++ == '-') mult = -1;
else mult = 1;
if (TYPE(lnp) == OPSHORT) {
arg = SHORT(lnp);
if (arg < wordsize) arg = wordsize;
argdef = TRUE;
} else if (IS_MINI(lnp)) {
arg = MINI(lnp);
if (arg > 0 && arg < wordsize) arg = wordsize;
if (arg < 0 && -arg < wordsize) arg = -wordsize;
argdef = TRUE;
} else argdef = FALSE;
switch (*s++) {
case 'w': stack_height += mult * wordsize; break;
case 'd': stack_height += mult * wordsize * 2; break;
case 'p': stack_height += mult * pointersize; break;
case 'a':
if (argdef == FALSE || instr == op_ass) {
change_state(NO_STACK_MES);
return;
}
stack_height += mult * arg;
break;
case 'x':
if (IS_LOC(x)) {
arg = MINI(x);
if (arg < wordsize) arg = wordsize;
stack_height += mult * arg;
break;
}
change_state(NO_STACK_MES);
return;
case 'y':
if (IS_LOC(y)) {
arg = MINI(y);
if (arg < wordsize) arg = wordsize;
stack_height += mult * arg;
break;
}
change_state(NO_STACK_MES);
return;
case '?':
/* Actually, the effect of a ret on the stack is
* known, but it has a '?' anyway. I think this
* should be changed in ~etc/em_table
*/
if (instr == op_ret)
break;
change_state(NO_STACK_MES);
return;
default:
assert(FALSE);
}
}
if (ISABRANCH(instr)) do_inst_label(lnp);
if (NON_CONTINUABLE(instr)) change_state(NOTREACHED);
}
change_state(mode)
int mode;
{
state = mode;
if (mode != KNOWN) stack_height = 0;
}
delete_labels()
{
register lblst_p tmp;
while ((tmp = est_list) != NULL) {
est_list = est_list->ll_next;
oldlblst(tmp);
}
}
inst_old_label(lst_elt)
register lblst_p lst_elt;
{
if (state != NOTREACHED) {
if (stack_height < 0 || lst_elt->ll_height != stack_height) {
change_state(NO_STACK_MES);
}
} else { /* after a label */
stack_height = lst_elt->ll_height;
}
}
inst_new_label(label)
register num_p label;
{
register lblst_p lst_elt;
lst_elt = newlblst();
lst_elt->ll_next = est_list;
lst_elt->ll_num = label;
lst_elt->ll_height = stack_height;
est_list = lst_elt;
label->n_lst_elt = lst_elt;
label->n_flags |= NUMSET;
}
assign_label(label)
num_p label;
{
if (label->n_flags & NUMSET)
inst_old_label(label->n_lst_elt);
else inst_new_label(label);
}
do_inst_label(lnp) /* (re-)install a label */
line_p lnp;
{
num_p label = lnp->l_a.la_np->n_repl;
int instr = INSTR(lnp);
assign_label(label);
if (instr == op_lab) {
if (state == NOTREACHED) {
label->n_lst_elt->ll_fallthrough = FALSE;
} else {
label->n_lst_elt->ll_fallthrough = TRUE;
}
} else if (ISCONDBRANCH(instr)) { /* conditional branch */
label->n_flags |= NUMCOND;
}
if (state != NO_STACK_MES) change_state(KNOWN);
}

View File

@@ -1,20 +0,0 @@
/*
* Author: Hans van Eck.
*/
typedef struct label_list *lblst_p;
struct label_list {
lblst_p ll_next; /* pointer to next label in the list */
num_p ll_num; /* pointer to label definition */
short ll_height; /* the height of the stack at this label */
char ll_fallthrough; /* is the label reached by fallthrough ? */
};
typedef struct label_list lblst_t;
extern lblst_p est_list;
extern int state;
#define KNOWN 1
#define NOTREACHED 2
#define NO_STACK_MES 3