changed stackheight computation to top element size computation
This commit is contained in:
parent
ee652e6908
commit
5badcb4296
6 changed files with 26 additions and 28 deletions
|
@ -858,7 +858,7 @@ normalfailed: if (stackpad!=tokpatlen) {
|
||||||
level--;
|
level--;
|
||||||
#endif
|
#endif
|
||||||
return(totalcost);
|
return(totalcost);
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
case DO_LABDEF: {
|
case DO_LABDEF: {
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,7 @@ static char rcsid[] = "$Header$";
|
||||||
#include "result.h"
|
#include "result.h"
|
||||||
#include "glosym.h"
|
#include "glosym.h"
|
||||||
#include "extern.h"
|
#include "extern.h"
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
#include <stdio.h>
|
|
||||||
#include "label.h"
|
#include "label.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -76,8 +75,8 @@ char opdesc[] = {
|
||||||
LLDEF|RLDEF, /* EX_XOR */
|
LLDEF|RLDEF, /* EX_XOR */
|
||||||
LLDEF|RLDEF, /* EX_AND */
|
LLDEF|RLDEF, /* EX_AND */
|
||||||
0, /* EX_ISROM */
|
0, /* EX_ISROM */
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
0, /* EX_STACKHEIGHT */
|
0, /* EX_TOPELTSIZE */
|
||||||
0, /* EX_FALLTHROUGH */
|
0, /* EX_FALLTHROUGH */
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -384,12 +383,12 @@ result_t compute(node) register node_p node; {
|
||||||
assert(leaf1.e_typ == EV_INT);
|
assert(leaf1.e_typ == EV_INT);
|
||||||
result.e_v.e_con = -leaf1.e_v.e_con;
|
result.e_v.e_con = -leaf1.e_v.e_con;
|
||||||
return(result);
|
return(result);
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
case EX_STACKHEIGHT: /* Hans, new */
|
case EX_TOPELTSIZE: /* Hans, new */
|
||||||
{ register label_p lbl;
|
{ register label_p lbl;
|
||||||
|
|
||||||
lbl = get_label(saveemp[node->ex_lnode].em_u.em_ioper);
|
lbl = get_label(saveemp[node->ex_lnode].em_u.em_ioper);
|
||||||
if (lbl != NULL) {
|
if (lbl != (label_p)0) {
|
||||||
result.e_v.e_con = lbl->lb_height;
|
result.e_v.e_con = lbl->lb_height;
|
||||||
} else {
|
} else {
|
||||||
result.e_v.e_con = 0;
|
result.e_v.e_con = 0;
|
||||||
|
@ -400,7 +399,7 @@ result_t compute(node) register node_p node; {
|
||||||
{ register label_p lbl;
|
{ register label_p lbl;
|
||||||
|
|
||||||
lbl = get_label(saveemp[node->ex_lnode].em_u.em_ioper);
|
lbl = get_label(saveemp[node->ex_lnode].em_u.em_ioper);
|
||||||
if (lbl != NULL) {
|
if (lbl != (label_p)0) {
|
||||||
result.e_v.e_con = lbl->lb_fallthrough;
|
result.e_v.e_con = lbl->lb_fallthrough;
|
||||||
} else result.e_v.e_con = 0;
|
} else result.e_v.e_con = 0;
|
||||||
return(result);
|
return(result);
|
||||||
|
|
|
@ -128,7 +128,7 @@ fillemlines() {
|
||||||
error("unknown instruction byte");
|
error("unknown instruction byte");
|
||||||
case sp_ilb1:
|
case sp_ilb1:
|
||||||
case sp_ilb2:
|
case sp_ilb2:
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
lp->em_instr = op_lab;
|
lp->em_instr = op_lab;
|
||||||
lp->em_optyp = OPSYMBOL;
|
lp->em_optyp = OPSYMBOL;
|
||||||
lp->em_soper = strarg(t);
|
lp->em_soper = strarg(t);
|
||||||
|
@ -177,7 +177,7 @@ fillemlines() {
|
||||||
continue;
|
continue;
|
||||||
case PAR_B:
|
case PAR_B:
|
||||||
t = sp_ilb2;
|
t = sp_ilb2;
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
lp->em_optyp = OPSYMBOL;
|
lp->em_optyp = OPSYMBOL;
|
||||||
lp->em_u.em_loper = argval;
|
lp->em_u.em_loper = argval;
|
||||||
lp->em_soper = strarg(t);
|
lp->em_soper = strarg(t);
|
||||||
|
@ -214,7 +214,7 @@ dopseudo() {
|
||||||
error("No table entry for %d",emlines[0].em_instr);
|
error("No table entry for %d",emlines[0].em_instr);
|
||||||
nextispseu=0;
|
nextispseu=0;
|
||||||
switch(savetab1) {
|
switch(savetab1) {
|
||||||
#ifndef USE_SHC
|
#ifndef USE_TES
|
||||||
case sp_ilb1:
|
case sp_ilb1:
|
||||||
case sp_ilb2:
|
case sp_ilb2:
|
||||||
swtxt();
|
swtxt();
|
||||||
|
@ -311,15 +311,15 @@ dopseudo() {
|
||||||
fatal("bad pointer size");
|
fatal("bad pointer size");
|
||||||
if ( getarg(any_ptyp)!=sp_cend )
|
if ( getarg(any_ptyp)!=sp_cend )
|
||||||
fatal("too many parameters");
|
fatal("too many parameters");
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
} else if (argval == ms_sth) {
|
} else if (argval == ms_tes) {
|
||||||
int lbl, height, flthr;
|
int lbl, size, flthr;
|
||||||
getarg(ptyp(sp_cst2)); lbl = argval;
|
getarg(ptyp(sp_cst2)); lbl = argval;
|
||||||
getarg(ptyp(sp_cst2)); height = argval;
|
getarg(ptyp(sp_cst2)); size = argval;
|
||||||
getarg(ptyp(sp_cst2)); flthr = argval;
|
getarg(ptyp(sp_cst2)); flthr = argval;
|
||||||
if ( getarg(any_ptyp)!=sp_cend )
|
if ( getarg(any_ptyp)!=sp_cend )
|
||||||
fatal("too many parameters");
|
fatal("too many parameters");
|
||||||
add_label(lbl,height, flthr);
|
add_label(lbl,size, flthr);
|
||||||
#endif
|
#endif
|
||||||
#ifdef REGVARS
|
#ifdef REGVARS
|
||||||
} else if (argval == ms_gto) {
|
} else if (argval == ms_gto) {
|
||||||
|
@ -390,7 +390,7 @@ dopseudo() {
|
||||||
break;
|
break;
|
||||||
case ps_end:
|
case ps_end:
|
||||||
getarg(cst_ptyp | ptyp(sp_cend));
|
getarg(cst_ptyp | ptyp(sp_cend));
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
kill_labels();
|
kill_labels();
|
||||||
#endif
|
#endif
|
||||||
cleanregs();
|
cleanregs();
|
||||||
|
|
|
@ -11,7 +11,7 @@ static char rcsid[] = "$Header$";
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "result.h"
|
#include "result.h"
|
||||||
#include "extern.h"
|
#include "extern.h"
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
#include "mach.h"
|
#include "mach.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ prtoken(tp,leadingchar) token_p tp; {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
printlabel(labnum)
|
printlabel(labnum)
|
||||||
int labnum;
|
int labnum;
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
#include "tables.h"
|
#include "tables.h"
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
#include <stdio.h>
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
#include "label.h"
|
#include "label.h"
|
||||||
|
|
||||||
static label_p label_list = NULL;
|
static label_p label_list = (label_p)0;
|
||||||
extern char *myalloc();
|
extern char *myalloc();
|
||||||
|
|
||||||
add_label(num, height, flth)
|
add_label(num, height, flth)
|
||||||
{
|
{
|
||||||
register label_p lbl = NULL;
|
register label_p lbl = (label_p)0;
|
||||||
|
|
||||||
if (height <= 0) return;
|
if (height <= 0) return;
|
||||||
if (flth != TRUE && flth != FALSE)
|
if (flth != TRUE && flth != FALSE)
|
||||||
|
@ -29,18 +28,18 @@ register word num;
|
||||||
{
|
{
|
||||||
register label_p tmp = label_list;
|
register label_p tmp = label_list;
|
||||||
|
|
||||||
while (tmp != NULL) {
|
while (tmp != (label_p)0) {
|
||||||
if (tmp->lb_number == num) return tmp;
|
if (tmp->lb_number == num) return tmp;
|
||||||
tmp = tmp->lb_next;
|
tmp = tmp->lb_next;
|
||||||
}
|
}
|
||||||
return NULL;
|
return (label_p)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_labels()
|
kill_labels()
|
||||||
{
|
{
|
||||||
label_p tmp;
|
label_p tmp;
|
||||||
|
|
||||||
while((tmp = label_list) != NULL) {
|
while((tmp = label_list) != (label_p)0) {
|
||||||
label_list = label_list->lb_next;
|
label_list = label_list->lb_next;
|
||||||
myfree((char *)tmp);
|
myfree((char *)tmp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ byte *trypat(bp,len) register byte *bp; {
|
||||||
if (Debug) {
|
if (Debug) {
|
||||||
fprintf(stderr,"Matched:");
|
fprintf(stderr,"Matched:");
|
||||||
for (i=0;i<patlen;i++) {
|
for (i=0;i<patlen;i++) {
|
||||||
#ifdef USE_SHC
|
#ifdef USE_TES
|
||||||
if (emp[i].em_instr == op_lab)
|
if (emp[i].em_instr == op_lab)
|
||||||
fprintf(stderr," lab");
|
fprintf(stderr," lab");
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue