const char *snl;
extern int rem(int p, int q);
extern void readsymbol(int typeof_P, void *p);
extern real float(int n);
extern char * tostring(int p);
extern char * substring(char *s, int f, int t);
extern int freespace();
extern void svc(int n, struct (null) *r);
extern int addr(int typeof_P, void *p);
extern int *integer(int n);
extern short *shortinteger(int n);
extern char *byteinteger(int n);
extern char * *string(int n);
extern struct (null) record ;
(/*should not get here any more*/ int n;
/*or here*/)
extern real *real(int n);
extern long real *longreal(int n);
extern char *length(char *s);
extern char *charno(char *s, int n);
extern int int(real x);
extern int intpt(real x);
extern void iocp(int n);
extern int typeof(int typeof_N, void *n);
extern int sizeof(int typeof_N, void *n);
extern real fracpt(real x);
extern void prompt(char *s);
extern int nextsymbol();
extern void skipsymbol();
extern void printsymbol(int sym);
extern void printstring(char *s);
extern void write(int v, int p);
extern void selectinput(int n);
extern void selectoutput(int n);
extern void openinput(int n, char *fd);
extern void openoutput(int n, char *fd);
extern void closeinput();
extern void closeoutput();
extern void resetinput();
extern void resetoutput();
extern char * time();
extern char * date();
extern int cputime();
extern int *comreg(int n);
extern void read(int typeof_X, void *x);
extern void print(real val, int before, int after);
extern void printfl(real val, int places);
extern void space();
extern void spaces(int n);
extern void newline();
extern void newlines(int n);
typedef struct FILEFM{int unit; int owner; int n1; int n2;} filefm;
typedef struct EVENTFM{int event; int sub; int extra; char *message; int pc; int x;} eventfm;
extern struct EVENTFM event;
typedef struct IMPCOMFM{int statements; int flags; int code; int gla; int diags; int perm; char *file; char *option;} impcomfm;
extern struct IMPCOMFM impcom;
int main(int argc, char **argv) {
const char *programep;
const char *systemprefix;
const char *traceroutine;
const char *readsymfn;
// bounds [0 : 24]
// do it now: const char {*,2}actual {NO INIT}
// bounds [-1 : 5]
// do it now: const char {*,2}breg {NO INIT}
// bounds [1 : 8]
// do it now: const char {*,2}genmap {NO INIT}
// bounds [1 : 3]
// do it now: const char {*,2}setops {NO INIT}
// bounds [1 : 40]
// do it now: const short {*,2}opindex {NO INIT}
// bounds [1 : 124]
// do it now: const short {*,2}opcode {NO INIT}
// bounds [16 : 21]
// do it now: const char {*,2}inverted {NO INIT}
typedef struct VARFM{int disp; short format; short extra; short length; short header; ; ; short xform; ; ; char flag; char form; ; ; char base; char type;} varfm;
// ON DIM DO: struct VARFM {*,0}var
// bounds [0 : 800]
DIM 0x0001 0x0001
struct VARFM *decvar;
struct VARFM *fp;
struct VARFM *ap;
static struct VARFM begin;
typedef struct STACKFM{int disp; short format; short extra; short length; short header; short rt; short varno; short type; ; ; short xform; ; ; char flag; char form; ; ; ; ; short xbase; ; ; char index; char base; ; ; char dim; char oper; struct STACKFM *link;} stackfm;
// ON DIM DO: struct STACKFM {*,0}stak
// bounds [0 : 25]
DIM 0x0001 0x0001
struct STACKFM *descasl;
typedef struct SPTFM{struct STACKFM *v;} sptfm;
// ON DIM DO: struct SPTFM {*,0}stacked
// bounds [1 : 16]
DIM 0x0001 0x0001
typedef struct DFM{struct STACKFM *d; struct DFM *link;} dfm;
// ON DIM DO: struct DFM {*,0}dlist
// bounds [0 : 25]
DIM 0x0001 0x0001
struct DFM *dasl;
struct DFM using;
typedef struct CYCLEFM{int cvdisp; int fvdisp; short lab; short shadow; short initial; short cvform; char reg; char cvtype; char cvbase; char fvbase; char tempbase;} cyclefm;
// ON DIM DO: struct CYCLEFM {*,0}forstk
// bounds [0 : 30]
DIM 0x0001 0x0001
struct CYCLEFM *for;
static int forstp;
// ON DIM DO: short {*,0}temps
// bounds [1 : 60]
DIM 0x0001 0x0001
static int tempbase;
static int nexttemp;
static int newtemp;
const struct (null) *null;
typedef struct LABELFM{short id; short tag;} labelfm;
// ON DIM DO: struct LABELFM {*,0}labels
// bounds [1 : 80]
DIM 0x0001 0x0001
// bounds [0 : 24]
// do it now: static int {*,1}activity {NO INIT}
static int claimed;
static short control;
static short diagnose;
static int level;
static int mainep;
static int unassignedrtn;
int j;
int k;
int len;
int n;
int val;
int aparm;
int opr;
static int ca;
static int ga;
static int lita;
static int litmax;
static int diag1;
static int diag2;
static int ccca;
static int ccreg;
int sym;
int next;
int vlb;
int vub;
int allocate;
int falign;
static int currentline;
static int lastline;
static int stp;
int datasize;
static int frame;
static int extraframe;
int parms;
int local;
static int invert;
static int swopped;
static int uncondjump;
static int gtype;
static int gmode;
int decl;
static short languagemask;
int cheapreg;
int otype;
int owntype;
int ownform;
int spec;
int frozen;
int potype;
int diagtype;
diagtype = 0;
int diagform;
diagform = 0;
int diagsize;
diagsize = 0;
long real rvalue;
static int ownval;
static int mantissa;
int oarea;
int dim;
int dv;
int wdisp;
int pdisp;
int gdisp;
static int blockno;
static int defns;
static int specs;
static int relocations;
static int vardiags;
static int totalca;
static int lastca;
static int traceflag;
int jtag;
static char *externalid;
static char *alias;
static char *blockname;
static char *internalid;
static int faulty;
static int nullstring;
char *cslen;
// ON DIM DO: char {*,0}currentstring
// bounds [0 : 255]
DIM 0x0001 0x0001
static int lastgpr;
static int lastfpr;
static int lasteo;
typedef struct KFM{struct KFM *link; struct KFM *array; int disp; short reg; char type; char form; char base; char ktype;} kfm;
// ON DIM DO: struct KFM {*,0}knowledge
// bounds [1 : 120]
DIM 0x0001 0x0001
static struct KFM *klist;
static struct KFM *kasl;
int knownregs;
knownregs = 0;
int inuse;
inuse = 0;
typedef struct ENVFM{int label; int inuse; int known; struct KFM *link;} envfm;
// ON DIM DO: struct ENVFM {*,0}envir
// bounds [1 : 5]
DIM 0x0001 0x0001
static int envp;
void rr(int op, int r1, int r2);
void rx(int op, int r1, int base, int disp);
void rxi(int op, int r1, int base, int disp);
void rxd(int op, int r1, struct STACKFM *v);
void setline();
goto L_0001;
void show(struct STACKFM *v)
{
write(v->varno, 2);
printsymbol(58);
write(v->type, 3);
write(v->form, 2);
write(v->flag, 2);
write(v->sptfm, 3);
write(v->disp, 5);
write(v->length, 3);
write(v->extra, 3);
write(v->format, 3);
write(v->header, 3);
write(v->v, 3);
if (v->oper == 0) goto L_0002;
write(v->oper, 2);
newline();
printstring(" +");
show(v->link);
goto L_0003;
L_0002:
newline();
L_0003:
return(0);
}
L_0001:
goto L_0004;
void abort(int code)
{
struct DFM *dd;
int j;
selectoutput(0);
printstring("*Compiler error '");
for (j = 24; j += (-8); j != 0) {
printsymbol(((code >> j) & 255));
}
L_0008:
printstring("' at line");
write(currentline, 1);
newline();
printstring("Please seek assistance!!");
newline();
if (stp == 0) goto L_0009;
printstring("STACK:");
newline();
for (j = 1; j += 1; j != stp) {
show(stacked[j].v);
}
L_000d:
L_0009:
if (&using.link == null) goto L_000e;
printstring("USING:");
newline();
dd = &using.link;
for (;;) {
L_000f:
show(dd->d);
dd = &dd->link;
if (dd != null) goto L_0010;
goto L_0011;
L_0010:
}
L_0011:
L_000e:
selectoutput(2);
// EVENT 0x000f
L_0004:
goto L_0012;
void warn(int n)
{
// bounds [1 : 8]
/*todo: gcc jump table extension*/ void **w;
selectoutput(0);
printstring("*WARNING: line");
write(currentline, 1);
printstring(": ");
goto *w[n];
w_1:
printstring("division by zero");
goto U_00c1;
w_2:
printstring("Illegal FOR");
goto U_00c1;
w_3:
printstring("Non-local control variable?");
goto U_00c1;
w_4:
printstring("Invalid parameter for READ SYMBOL");
goto U_00c1;
w_5:
printstring("String constant too long");
goto U_00c1;
w_6:
printstring("No. of shifts outwith 0..31");
goto U_00c1;
w_7:
printstring("Illegal constant exponent");
goto U_00c1;
w_8:
printstring("Numerical constant too big");
goto U_00c1;
U_00c1:
newline();
selectoutput(2);
L_0012:
goto L_0013;
void monitor(struct STACKFM *v, char *text)
{
selectoutput(0);
printstring(text);
printsymbol(58);
spaces((9 - *length(text)));
show(*v);
selectoutput(2);
L_0013:
goto L_0014;
int floating(struct STACKFM *v)
{
if (v->type < 7) goto L_0015;
if (v->type != 255) goto L_0016;
L_0015:
if (v->oper == 0) goto L_0017;
if (v->link.type < 7) goto L_0017;
L_0016:
L_0017:
if (v->oper < 16) goto L_0018;
L_0018:
L_0014:
goto L_0019;
int zero(struct STACKFM *v)
{
if (v->disp != 0) goto L_001a;
if (v->sptfm != 0) goto L_001a;
if (0 == v->form) goto L_001b;
if (v->form == 5) goto L_001b;
L_001a:
L_001b:
if (v->oper == 0) goto L_001c;
L_001c:
L_0019:
goto L_001d;
int const(struct STACKFM *v)
{
if (v->form != 0) goto L_001e;
if (v->oper == 0) goto L_001f;
L_001e:
L_001f:
if (v->type <= 3) goto L_0020;
L_0020:
L_001d:
goto L_0021;
int minrecordsize(struct STACKFM *a, struct STACKFM *b)
{
int n;
int m;
n = a->format;
if (n == 0) goto L_0022;
n = (var[n].length & 65535);
L_0022:
m = b->format;
if (m == 0) goto L_0023;
m = (var[m].length & 65535);
L_0023:
if (n == 0) goto L_0024;
if (m == 0) goto L_0025;
if (m >= n) goto L_0025;
L_0024:
n = m;
L_0025:
if (n <= 0) goto L_0026;
return(n);
L_0026:
abort(1382376240);
L_0021:
goto L_0027;
int power(int n)
{
int j;
int ref;
ref = 1;
for (j = 1; j += 1; j != 14) {
ref = (ref << 1);
if (ref < n) goto L_002c;
if (ref != n) goto L_002d;
return(j);
L_002d:
return((-1));
L_002c:
}
L_002b:
return((-1));
L_0027:
goto L_002e;
int same(struct STACKFM *v, struct STACKFM *w)
{
if (v->disp != w->disp) goto L_002f;
if (v->sptfm != w->sptfm) goto L_002f;
if (v->type != w->type) goto L_002f;
if (v->form != w->form) goto L_002f;
if (v->extra != w->extra) goto L_002f;
L_002f:
L_002e:
goto L_0030;
int infreereg(struct STACKFM *v)
{
if (v->form != 1) goto L_0031;
if (activity[v->sptfm] <= 1) goto L_0032;
L_0031:
L_0032:
L_0030:
goto L_0033;
int temp()
{
int t;
if (nexttemp != newtemp) goto L_0034;
t = ((frame + 3) & (\3));
frame = (t + 4);
if (newtemp != 60) goto L_0035;
return(t);
L_0035:
newtemp = (newtemp + 1);
temps[newtemp] = t;
L_0034:
nexttemp = (nexttemp + 1);
return((temps[nexttemp] & 65535));
L_0033:
goto L_0036;
int tag()
{
int s1;
int s2;
s1 = next;
readsymbol(s2);
readsymbol(next);
return(((s1 << 8) | s2));
L_0036:
goto L_0037;
void getd()
{
long real p;
int i;
int n;
real ten;
real one;
n = 10;
rvalue = n;
n = 1;
one = n;
n = tag();
readsymbol(next);
U_00cf:
ten = rvalue;
rvalue = 0;
for (;;) {
L_0038:
sym = next;
readsymbol(next);
if (sym != 46) goto L_0039;
goto L_003a;
L_0039:
n = (n - 1);
if (sym != 64) goto L_003b;
goto U_00d0;
L_003b:
if (sym != 95) goto L_003c;
goto U_00cf;
L_003c:
if (sym < 65) goto L_003d;
sym = (((sym - 65) + 48) + 10);
L_003d:
rvalue = ((rvalue * ten) + (sym - 48));
if (n != 0) goto L_003e;
goto U_00d1;
L_003e:
}
L_003a:
p = one;
for (;;) {
L_003f:
n = (n - 1);
if (n != 0) goto L_0040;
goto U_00d1;
L_0040:
sym = next;
readsymbol(next);
if (sym != 64) goto L_0041;
goto U_00d0;
L_0041:
if (sym < 65) goto L_0042;
sym = (((sym - 65) + 48) + 10);
L_0042:
p = (p / ten);
rvalue = (rvalue + ((sym - 48) * p));
}
U_00d0:
n = tag();
if ((n & 32768) == 0) goto L_0043;
n = (n | -65536);
L_0043:
rvalue = (rvalue * imp_real_exp(ten, n));
U_00d1:
if (next != 85) goto L_0044;
readsymbol(next);
rvalue = (-rvalue);
L_0044:
L_0037:
goto L_0045;
void release(int reg)
{
if (reg <= 24) goto L_0046;
abort(1380273201);
L_0046:
if (reg == 0) goto L_0047;
if (activity[reg] >= 0) goto L_0048;
L_0047:
return;
L_0048:
activity[reg] = (activity[reg] - 1);
if (activity[reg] >= 0) goto L_0049;
abort(1380273202);
L_0049:
claimed = (claimed - 1);
L_0045:
goto L_004a;
void claim(int reg)
{
if (reg <= 24) goto L_004b;
abort(1129073969);
L_004b:
if (reg == 0) goto L_004c;
if (activity[reg] >= 0) goto L_004d;
L_004c:
return;
L_004d:
activity[reg] = (activity[reg] + 1);
claimed = (claimed + 1);
L_004a:
void forgetreg(int mask);
void forgetall();
void forgetvar(struct STACKFM *v);
goto L_004e;
void hazard(int reg)
{
int n;
int t;
int tot;
struct DFM *p;
struct STACKFM u;
goto L_004e;
void mod(struct STACKFM *v)
{
// bounds [0 : 9]
/*todo: gcc jump table extension*/ void **sw;
v->sptfm = local;
n = (n - 1);
goto *sw[v->form];
sw_9:
sw_8:
sw_7:
if (tot != 1) goto L_004f;
claim(reg);
rx(1, reg, reg, v->extra);
u.type = 1;
v->extra = t;
goto U_00d9;
L_004f:
sw_0:
abort(1212242481);
sw_4:
if (v->disp != 0) goto L_0050;
v->disp = t;
v->form = 6;
goto U_00da;
L_0050:
sw_6:
sw_5:
v->form = (v->form + 3);
v->extra = t;
goto U_00da;
sw_1:
v->form = 4;
v->disp = t;
v->type = u.type;
U_00da:
v->flag = (v->flag | 8);
U_00d9:
L_004e:
n = activity[reg];
if (n > 0) goto L_0051;
return;
L_0051:
tot = n;
claimed = (claimed - n);
activity[reg] = 0;
t = temp();
u.type = 1;
if (17 > reg) goto L_0052;
if (reg > 24) goto L_0052;
u.type = 7;
L_0052:
p = &using.link;
for (;;) {
L_0053:
if (p != null) goto L_0054;
goto L_0055;
L_0054:
if (p->d.cyclefm != reg) goto L_0056;
mod(p->d);
L_0056:
p = &p->link;
}
L_0055:
u.closeoutput = local;
u.disp = t;
u.xform = (4 | (8 << 8));
rxd(2, reg, u);
forgetvar(u);
if (n == 0) goto L_0057;
abort(1212242482);
L_0057:
for (;;) {
L_0058:
goto L_0058;
void hazardall()
{
int j;
forgetreg((-1));
if (claimed == 0) goto L_0059;
for (j = 1; j += 1; j != 24) {
hazard(j);
}
L_005d:
L_0059:
L_0058:
goto L_005e;
void resetoptimisationdata()
{
int j;
lastgpr = 1;
lastfpr = 17;
lasteo = 1;
envp = 0;
knownregs = (-1);
inuse = 0;
kasl = null;
klist = null;
for (j = 1; j += 1; j != 120) {
knowledge[j].link = kasl;
kasl = &knowledge[j];
}
L_0062:
for (j = 1; j += 1; j != 5) {
envir[j].label = 0;
envir[j].link = null;
}
L_0066:
L_005e:
goto L_0067;
void dumpoptlist()
{
struct KFM *p;
selectoutput(0);
p = klist;
if (p != null) goto L_0068;
printstring("*opt list empty");
newline();
goto L_0069;
L_0068:
for (;;) {
L_006a:
write(p->type, 1);
write(p->form, 1);
write(p->disp, 3);
printsymbol(40);
write(p->base, (-1));
printstring(") =");
write(p->reg, 1);
newline();
p = &p->link;
if (p == null) goto L_006b;
}
L_006b:
L_0069:
selectoutput(2);
L_0067:
goto L_006c;
struct KFM kentry (struct STACKFM *v, int fuzz)
{
struct KFM *p;
struct KFM *q;
fuzz = (\fuzz);
p = klist;
q = null;
for (;;) {
L_006d:
if (p == null) goto L_006e;
if (((p->disp ^ v->disp) & fuzz) != 0) goto L_006f;
if (p->base != v->sptfm) goto L_006f;
goto U_00d8;
L_006f:
q = p;
p = &p->link;
}
L_006e:
return(null);
U_00d8:
if (q == null) goto L_0070;
q->link = &p->link;
p->link = klist;
klist = p;
L_0070:
return(klist);
L_006c:
goto L_0071;
struct KFM newkcell ()
{
struct KFM *p;
struct KFM *q;
int n;
if (kasl == null) goto L_0072;
if (inuse < 20) goto L_0073;
L_0072:
p = klist;
q = null;
n = 20;
for (;;) {
L_0074:
n = (n - 1);
if (&p->link != null) goto L_0075;
goto L_0076;
L_0075:
q = p;
p = &p->link;
}
L_0076:
if (n == 0) goto L_0077;
abort(1330664497);
L_0077:
q->link = null;
p->link = kasl;
kasl = p;
inuse = (inuse - 1);
L_0073:
p = kasl;
kasl = &kasl->link;
inuse = (inuse + 1);
if (inuse <= 20) goto L_0078;
abort(1332769843);
L_0078:
memset(*p,0,sizeof struct KFM);
return(p);
L_0071:
goto L_0079;
void associate(struct STACKFM *v, int reg)
{
struct KFM *p;
if (reg == 1) goto L_007a;
if (v->sptfm != reg) goto L_007b;
L_007a:
return;
L_007b:
p = &*kentry(*v, 0);
if (p != null) goto L_007c;
p = &*newkcell();
p->link = klist;
klist = p;
goto L_007d;
L_007c:
forgetreg((1 << p->reg));
L_007d:
p->reg = reg;
p->base = v->sptfm;
p->disp = v->disp;
p->type = v->type;
p->form = v->form;
p->ktype = 1;
knownregs = (knownregs | (1 << reg));
if (activity[p->base] < 0) goto L_007e;
knownregs = (knownregs | (1 << p->base));
L_007e:
L_0079:
goto L_007f;
void cheapen(struct STACKFM *v, int mode)
{
struct KFM *p;
int reg;
int form;
int type;
form = v->form;
type = v->type;
p = &*kentry(*v, 0);
if (p != null) goto L_0080;
return;
L_0080:
if (p->form != 4) goto L_0081;
v->flag = (v->flag | 8);
L_0081:
if (p->reg != 0) goto L_0082;
return;
L_0082:
if (form == 6) goto L_0083;
if (p->type != type) goto L_0083;
cheapreg = p->reg;
L_0083:
if (mode >= 0) goto L_0084;
if (form != 4) goto L_0084;
return;
L_0084:
reg = p->reg;
if (form != 6) goto L_0085;
if (p->type != 1) goto L_0085;
if (p->form != 4) goto L_0085;
release(v->sptfm);
claim(reg);
v->sptfm = reg;
v->disp = 0;
v->xform = 4;
cheapen(*v, mode);
goto L_0086;
L_0085:
if (p->type != type) goto L_0087;
if (p->form == form) goto L_0088;
L_0087:
return;
L_0088:
release(v->sptfm);
claim(reg);
v->sptfm = reg;
v->disp = 0;
v->xform = 1;
L_0086:
if (diagnose >= 0) goto L_0089;
monitor(*v, "CHEAPENED");
if ((diagnose & 16) == 0) goto L_008a;
dumpoptlist();
L_008a:
L_0089:
L_007f:
goto L_008b;
void forgetvar(struct STACKFM *v)
{
struct KFM *p;
for (;;) {
L_008c:
p = &*kentry(*v, 3);
if (p != null) goto L_008d;
return;
L_008d:
p->base = (26 + 1);
}
L_008b:
goto L_008e;
void forgetreg(int regmask)
{
struct KFM *p;
if ((knownregs & regmask) != 0) goto L_008f;
return;
L_008f:
regmask = (regmask & (\1));
knownregs = (knownregs & (\regmask));
p = klist;
if (regmask >= 0) goto L_0090;
for (;;) {
L_0091:
if (p == null) goto L_0092;
if ((regmask & (1 << p->base)) == 0) goto L_0093;
p->base = (26 + 1);
L_0093:
p->reg = 0;
p = &p->link;
}
L_0092:
goto L_0094;
L_0090:
for (;;) {
L_0095:
if (p == null) goto L_0096;
if ((regmask & (1 << p->base)) == 0) goto L_0097;
p->base = (26 + 1);
L_0097:
if ((regmask & (1 << p->reg)) == 0) goto L_0098;
p->reg = 0;
L_0098:
p = &p->link;
}
L_0096:
L_0094:
for (;;) {
L_0099:
if (klist == null) goto L_009a;
if (klist->base != (26 + 1)) goto L_009a;
p = klist;
klist = &klist->link;
p->link = kasl;
kasl = p;
inuse = (inuse - 1);
}
L_009a:
if (inuse >= 0) goto L_009b;
abort(1433625919);
L_009b:
L_008e:
goto L_009c;
void forgetall()
{
struct KFM *p;
if (klist == null) goto L_009d;
p = klist;
for (;;) {
L_009e:
inuse = (inuse - 1);
if (&p->link != null) goto L_009f;
goto L_00a0;
L_009f:
p = &p->link;
}
L_00a0:
p->link = kasl;
kasl = klist;
klist = null;
L_009d:
if (inuse == 0) goto L_00a1;
abort(1180789868);
L_00a1:
knownregs = 0;
L_009c:
goto L_00a2;
struct ENVFM environment (int label)
{
struct ENVFM *e;
int j;
if (label <= 0) goto L_00a3;
for (j = 1; j += 1; j != 5) {
e = &envir[j];
if (e->label != label) goto L_00a8;
return(e);
L_00a8:
}
L_00a7:
L_00a3:
return(null);
L_00a2:
goto L_00a9;
struct ENVFM newenv (struct ENVFM *e)
{
struct KFM *k;
if (e != null) goto L_00aa;
envp = (envp + 1);
if (envp <= 5) goto L_00ab;
envp = 1;
L_00ab:
e = &envir[envp];
L_00aa:
k = &e->link;
if (k == null) goto L_00ac;
for (;;) {
L_00ad:
if (&k->link == null) goto L_00ae;
k = &k->link;
}
L_00ae:
k->link = kasl;
kasl = &e->link;
L_00ac:
e->inuse = 0;
e->label = 0;
e->link = null;
return(e);
L_00a9:
goto L_00af;
struct KFM ecopy (struct KFM *l)
{
struct KFM *k;
if (l != null) goto L_00b0;
return(null);
L_00b0:
if (kasl != null) goto L_00b1;
abort(1164144496);
L_00b1:
k = kasl;
kasl = &k->link;
memcpy(*k,*l,sizeof struct KFM);
k->link = &*ecopy(l->link);
return(k);
L_00af:
goto L_00b2;
void restoreenvironment(int label)
{
struct ENVFM *e;
struct ENVFM temp;
temp.link = klist;
e = &*newenv(temp);
e = &*environment(label);
if (e != null) goto L_00b3;
klist = null;
knownregs = 0;
inuse = 0;
goto L_00b4;
L_00b3:
klist = &*ecopy(e->link);
knownregs = e->known;
inuse = e->inuse;
L_00b4:
L_00b2:
goto L_00b5;
void rememberenvironment(int label)
{
struct ENVFM *e;
if (label > 0) goto L_00b6;
return;
L_00b6:
e = &*environment(label);
e = &*newenv(*e);
e->label = label;
e->known = knownregs;
e->inuse = inuse;
e->link = &*ecopy(*klist);
L_00b5:
goto L_00b7;
void mergeenvironment(int label)
{
struct ENVFM *e;
struct KFM *k;
struct KFM *end;
struct KFM *x;
struct KFM khead;
goto L_00b7;
void merge(struct KFM *k)
{
struct KFM *p;
p = klist;
for (;;) {
L_00b8:
if (p == null) goto L_00b9;
if (p->disp != k->disp) goto L_00ba;
if (p->reg != k->reg) goto L_00ba;
if (p->base != k->base) goto L_00ba;
if (p->form != k->form) goto L_00ba;
if (p->type != k->type) goto L_00ba;
if (p->ktype != k->ktype) goto L_00ba;
end->link = k;
end = k;
e->known = ((e->known | (1 << p->reg)) | (1 << p->base));
e->inuse = (e->inuse + 1);
return;
L_00ba:
p = &p->link;
}
L_00b9:
k->link = kasl;
kasl = k;
L_00b7:
e = &*environment(label);
if (e == null) goto L_00bb;
k = &e->link;
e->link = null;
e->inuse = 0;
e->known = 0;
khead.link = null;
end = &khead;
for (;;) {
L_00bc:
if (k == null) goto L_00bd;
x = &k->link;
merge(*k);
k = x;
}
L_00bd:
end->link = null;
e->link = &khead.link;
L_00bb:
for (;;) {
L_00be:
goto L_00be;
int gpr()
{
// bounds [1 : 8]
// do it now: const char {*,2}pref {NO INIT}
int r;
int j;
int mask;
mask = knownregs;
for (;;) {
L_00bf:
for (j = 1; j += 1; j != 8) {
lastgpr = (lastgpr - 1);
if (lastgpr != 0) goto L_00c4;
lastgpr = 8;
L_00c4:
r = pref[lastgpr];
if (activity[r] != 0) goto L_00c5;
if ((mask & (1 << r)) != 0) goto L_00c5;
return(r);
L_00c5:
}
L_00c3:
if (mask != 0) goto L_00c6;
goto L_00c7;
L_00c6:
mask = 0;
}
L_00c7:
hazard(5);
return(5);
L_00be:
goto L_00c8;
int evenoddpair()
{
// bounds [1 : 3]
// do it now: const char {*,2}even {NO INIT}
int j;
int r;
int mask;
mask = knownregs;
for (;;) {
L_00c9:
for (j = 1; j += 1; j != 3) {
lasteo = (lasteo - 1);
if (lasteo != 0) goto L_00ce;
lasteo = 3;
L_00ce:
r = even[lasteo];
if (activity[r] != 0) goto L_00cf;
if (activity[(r + 1)] != 0) goto L_00cf;
if ((mask & (3 << r)) != 0) goto L_00cf;
return((r + 1));
L_00cf:
}
L_00cd:
if (mask != 0) goto L_00d0;
goto L_00d1;
L_00d0:
mask = 0;
}
L_00d1:
hazard(3);
hazard(4);
return(4);
L_00c8:
goto L_00d2;
int fpr()
{
int j;
int mask;
mask = knownregs;
for (;;) {
L_00d3:
for (j = 17; j += 1; j != 24) {
lastfpr = (lastfpr - 1);
if (lastfpr != (17 - 1)) goto L_00d8;
lastfpr = 24;
L_00d8:
if (activity[lastfpr] != 0) goto L_00d9;
return(lastfpr);
L_00d9:
}
L_00d7:
if (mask != 0) goto L_00da;
goto L_00db;
L_00da:
mask = 0;
}
L_00db:
hazard(17);
return(17);
L_00d2:
goto L_00dc;
void put(int n)
{
printsymbol((n >> 8));
printsymbol((n & 255));
L_00dc:
goto L_00dd;
void selectliteralarea()
{
int k;
printsymbol(13);
if (ca >= 0) goto L_00de;
abort(1145917489);
L_00de:
k = lita;
lita = ca;
ca = k;
L_00dd:
goto L_00df;
void selectcodearea()
{
int k;
if (ca <= 0) goto L_00e0;
abort(1145917490);
L_00e0:
k = lita;
lita = ca;
ca = k;
printsymbol(12);
L_00df:
goto L_00e1;
void phex(int n)
{
int j;
int k;
spaces(2);
for (j = 12; j += (-4); j != 0) {
k = ((n >> j) & 15);
if (k > 9) goto L_00e6;
k = (k + 48);
goto L_00e7;
L_00e6:
k = ((k - 10) + 65);
L_00e7:
printsymbol(k);
}
L_00e5:
L_00e1:
goto L_00e8;
void dumptag(int tag, int type)
{
// bounds [1 : 6]
// do it now: const char * {*,2}s {NO INIT}
selectoutput(0);
printsymbol(42);
write(ca, (-3));
printstring(s[type]);
write(tag, 1);
newline();
selectoutput(2);
L_00e8:
goto L_00e9;
void dump(int p, int val)
{
int k;
selectoutput(0);
if (p != 17217) goto L_00ea;
printstring("CA ");
k = ca;
goto L_00eb;
L_00ea:
printstring("GA ");
k = ga;
L_00eb:
write((k - 2), (-3));
printsymbol(58);
phex(val);
newline();
selectoutput(2);
L_00e9:
goto L_00ec;
void cput(int n)
{
printsymbol(7);
printsymbol((n >> 8));
printsymbol((n & 255));
ca = (ca + 2);
if (diagnose >= 0) goto L_00ed;
dump(17217, n);
L_00ed:
L_00ec:
goto L_00ee;
void gput(int n)
{
printsymbol(8);
printsymbol((n >> 8));
printsymbol((n & 255));
ga = (ga + 2);
if (diagnose >= 0) goto L_00ef;
dump(18241, n);
L_00ef:
L_00ee:
goto L_00f0;
void cword(int n)
{
cput((n >> 16));
cput(n);
L_00f0:
goto L_00f1;
void litbyte(int n)
{
static int v;
static int f;
f = (\f);
if (f != 0) goto L_00f2;
ca = (ca + 1);
cput(((v << 8) + (n & 255)));
goto L_00f3;
L_00f2:
v = n;
ca = (ca - 1);
L_00f3:
if (ca <= 0) goto L_00f4;
abort(1145917491);
L_00f4:
L_00f1:
goto L_00f5;
void gword(int n)
{
gput((n >> 16));
gput((n & 65535));
L_00f5:
goto L_00f6;
void gwordrel(int n)
{
gput((n >> 16));
gput((n & 65535));
printsymbol(20);
relocations = (relocations + 1);
L_00f6:
goto L_00f7;
void gwordcrel(int n)
{
gput((n >> 16));
gput((n & 65535));
printsymbol(19);
relocations = (relocations + 1);
L_00f7:
goto L_00f8;
void gbyte(int n)
{
static int v;
static int f;
f = (\f);
if (f != 0) goto L_00f9;
ga = (ga - 1);
gput(((v << 8) + (n & 255)));
goto L_00fa;
L_00f9:
v = n;
ga = (ga + 1);
L_00fa:
L_00f8:
goto L_00fb;
void gfix(int align)
{
for (;;) {
L_00fc:
if ((ga & align) == 0) goto L_00fd;
gbyte(0);
}
L_00fd:
L_00fb:
goto L_00fe;
void definetag(int ref)
{
int k;
selectoutput(1);
printsymbol(1);
printsymbol((ref >> 8));
printsymbol((ref & 255));
k = (ca >> 1);
printsymbol((k >> 8));
printsymbol((k & 255));
selectoutput(2);
if (diagnose >= 0) goto L_00ff;
dumptag(ref, 1);
L_00ff:
L_00fe:
goto L_0100;
void definereference(int ref, int type)
{
int k;
if (currentline == lastline) goto L_0101;
setline();
L_0101:
selectoutput(1);
printsymbol(type);
printsymbol((ref >> 8));
printsymbol((ref & 255));
k = (ca >> 1);
printsymbol((k >> 8));
printsymbol((k & 255));
selectoutput(2);
if (diagnose >= 0) goto L_0102;
dumptag(ref, type);
L_0102:
printsymbol(type);
if (type != 2) goto L_0103;
printsymbol((ref >> 8));
printsymbol((ref & 255));
L_0103:
L_0100:
goto L_0104;
void claimliteral(int size, int align)
{
int k;
if (ca < 0) goto L_0105;
if (litmax <= 0) goto L_0106;
L_0105:
abort(1145917492);
L_0106:
if ((lita & 1) == 0) goto L_0107;
selectliteralarea();
litbyte(0);
selectcodearea();
L_0107:
litmax = (-((((-litmax) + size) + align) & (\align)));
lita = litmax;
k = ((-lita) >> 1);
printsymbol(14);
put(k);
L_0104:
goto L_0108;
void setline()
{
int flag;
if (ca >= 0) goto L_0109;
return;
L_0109:
if ((currentline - lastline) == 1) goto L_010a;
flag = 10;
goto L_010b;
L_010a:
flag = 9;
L_010b:
selectoutput(1);
printsymbol(flag);
if (flag != 10) goto L_010c;
put(currentline);
L_010c:
if (diagnose >= 0) goto L_010d;
selectoutput(0);
printstring("-->line");
write(currentline, 1);
newline();
L_010d:
selectoutput(2);
printsymbol(flag);
if (flag != 10) goto L_010e;
put(currentline);
L_010e:
lastline = currentline;
lastca = ca;
L_0108:
goto L_010f;
void describe(int base, int disp, char * *xsym)
{
int size;
int type;
int j;
int k;
// bounds [0 : 13]
// do it now: const char {*,2}compressedtype {NO INIT}
if (*length(xsym) <= 12) goto L_0110;
*length(xsym) = 12;
L_0110:
printsymbol(*length(xsym));
for (j = 1; j += 1; j != *length(xsym)) {
printsymbol(*charno(xsym, j));
}
L_0114:
if (base >= 0) goto L_0115;
return;
L_0115:
size = diagsize;
type = diagtype;
if (diagtype >= 3) goto L_0116;
if (diagform > 2) goto L_0116;
if (size != 0) goto L_0117;
L_0116:
size = 1;
L_0117:
if (diagtype > 0) goto L_0118;
type = 1;
L_0118:
k = (((size - 1) << 2) + (type - 1));
j = 0;
if (otype == 0) goto L_0119;
if (spec == 0) goto L_0119;
j = 128;
L_0119:
printsymbol(otype);
printsymbol((((compressedtype[k] << 4) | diagform) | j));
j = ((actual[base] << 20) + (disp & 1048575));
printsymbol((j >> 16));
printsymbol((j >> 8));
printsymbol(j);
L_010f:
goto L_011a;
void setdiag(int base, int disp)
{
vardiags = (vardiags + 4);
if (*length(internalid) <= 6) goto L_011b;
vardiags = (vardiags + 2);
L_011b:
printsymbol(11);
describe(base, disp, internalid);
L_011a:
goto L_011c;
void externallink(int reftype, int datasize, int addr)
{
int k;
if (4 > reftype) goto L_011d;
if (reftype <= 7) goto L_011e;
L_011d:
abort(1145917493);
L_011e:
if ((reftype & 1) == 0) goto L_011f;
defns = (defns + 1);
goto L_0120;
L_011f:
specs = (specs + 1);
L_0120:
printsymbol(21);
printsymbol(reftype);
put((datasize / 2));
k = 14;
if (reftype != 7) goto L_0121;
k = 15;
L_0121:
describe(k, (addr / 2), externalid);
if ((reftype & 1) != 0) goto L_0122;
gword(0);
gword(0);
if (reftype != 6) goto L_0123;
gword(0);
goto L_0124;
L_0123:
gword((-1));
L_0124:
L_0122:
L_011c:
goto L_0125;
void closefiles()
{
selectoutput(1);
printsymbol(18);
put((totalca >> 1));
put(((-litmax) >> 1));
put((ga >> 1));
put(defns);
put(specs);
put(relocations);
printsymbol(0);
closeoutput();
selectoutput(2);
printsymbol(18);
closeoutput();
L_0125:
goto L_0126;
void rxd(int op, int r1, struct STACKFM *v)
{
int index;
int mask;
int code;
int format;
int type;
int form;
int base;
int disp;
int x;
int k;
int oldca;
struct STACKFM u;
// bounds [1 : 8]
// do it now: const char {*,2}typeindex {NO INIT}
oldca = ca;
type = v->type;
form = v->form;
base = v->sptfm;
disp = v->disp;
x = v->rem;
if (r1 < 17) goto L_0127;
op = (op + 13);
L_0127:
mask = opindex[op];
index = (mask & 255);
if (lastline == currentline) goto L_0128;
setline();
L_0128:
if (form == 0) goto L_0129;
if (form != 5) goto L_012a;
L_0129:
if (x == 0) goto L_012b;
abort(1381516408);
L_012b:
if (disp != 0) goto L_012c;
if (base == 0) goto L_012c;
if (11 == op) goto L_012c;
if (op == 12) goto L_012c;
if (op == 29) goto L_012c;
if (r1 != base) goto L_012d;
if (op == 1) goto L_012e;
L_012d:
u.closeoutput = base;
u.disp = 0;
u.form = 1;
rxd(op, r1, u);
return;
L_012e:
code = 16;
goto L_012f;
L_012c:
if (op != 1) goto L_0130;
if (r1 != base) goto L_0130;
if (15 < disp) goto L_0130;
if (disp < (-15)) goto L_0130;
op = 3;
if (disp >= 0) goto L_0131;
op = 4;
disp = (-disp);
L_0131:
u.form = 0;
u.closeoutput = 0;
u.disp = disp;
rxd(op, r1, u);
release(base);
return;
L_0130:
if (op != 11) goto L_0132;
if (disp != 1) goto L_0132;
if (base != 0) goto L_0132;
claim(r1);
u.closeoutput = r1;
u.disp = 0;
u.form = 1;
rxd(3, r1, u);
return;
L_0132:
if ((mask & 2048) != 0) goto L_0133;
if (11 == op) goto L_0133;
if (op == 12) goto L_0133;
if (op == 29) goto L_0133;
abort(1381516337);
L_0133:
index = (index + 3);
format = 0;
if (15 < disp) goto L_0134;
if (disp < (-15)) goto L_0134;
if (base != 0) goto L_0134;
if (((8192 + 16384) & mask) == 0) goto L_0134;
if (disp < 0) goto L_0135;
format = 2;
goto L_0136;
L_0135:
format = 3;
disp = (-disp);
L_0136:
goto L_0137;
L_0134:
if (32767 < disp) goto L_0138;
if (disp < (-32768)) goto L_0138;
format = 1;
L_0138:
L_0137:
code = opcode[(index + format)];
if (format < 2) goto L_0139;
cput((((code & 65280) + (actual[r1] << 4)) + disp));
goto L_013a;
L_0139:
cput((((code & 65280) + (actual[r1] << 4)) + actual[base]));
if (format != 0) goto L_013b;
cput((disp >> 16));
L_013b:
cput(disp);
L_013a:
L_012f:
goto L_013c;
L_012a:
if (form != 1) goto L_013d;
if (r1 == 0) goto L_013e;
if (base == 0) goto L_013e;
if (x == 0) goto L_013f;
L_013e:
abort(1381516338);
L_013f:
code = opcode[index];
if ((code & 32) == 0) goto L_0140;
k = r1;
r1 = base;
base = k;
L_0140:
cput((((code & 65280) + (actual[r1] << 4)) + actual[base]));
goto L_013c;
L_013d:
if (r1 == 0) goto L_0141;
if (base != 1) goto L_0142;
L_0141:
abort(1381516339);
L_0142:
format = typeindex[type];
if (format != 0) goto L_0143;
abort(1381516340);
L_0143:
code = opcode[(index + format)];
if (((code & 15) & disp) == 0) goto L_0144;
abort(1381516341);
L_0144:
cput((((code & 65280) + (actual[r1] << 4)) + actual[base]));
if (0 > disp) goto L_0145;
if (disp > 16383) goto L_0145;
if (x == 0) goto L_0146;
L_0145:
cput(((16384 + (actual[x] << 8)) + ((disp >> 16) & 255)));
L_0146:
cput(disp);
L_013c:
if (base <= 0) goto L_0147;
release(base);
L_0147:
if (x == 0) goto L_0148;
release(x);
L_0148:
if ((code & 64) == 0) goto L_0149;
ccca = ((ccca + ca) - oldca);
goto L_014a;
L_0149:
if ((code & 16) != 0) goto L_014b;
ccca = ca;
ccreg = r1;
L_014b:
L_014a:
L_0126:
goto L_014c;
void rr(int op, int r1, int r2)
{
struct STACKFM v;
v.closeoutput = r2;
v.disp = 0;
v.type = 1;
if (r1 < 17) goto L_014d;
v.type = 7;
L_014d:
v.form = 1;
rxd(op, r1, v);
L_014c:
goto L_014e;
void rxi(int op, int r1, int base, int disp)
{
struct STACKFM v;
v.closeoutput = base;
v.disp = disp;
v.type = 1;
v.form = 0;
rxd(op, r1, v);
L_014e:
goto L_014f;
void rx(int op, int r1, int base, int disp)
{
struct STACKFM v;
v.closeoutput = base;
v.disp = disp;
v.type = 1;
if (r1 < 17) goto L_0150;
v.type = 7;
L_0150:
v.form = 4;
rxd(op, r1, v);
L_014f:
goto L_0151;
void skip(int halfwords, int condition)
{
// bounds [0 : 5]
// do it now: const short {*,2}jump {NO INIT}
if ((condition & 16) == 0) goto L_0152;
condition = inverted[condition];
L_0152:
if (0 >= halfwords) goto L_0153;
if (halfwords > 14) goto L_0153;
if (0 > condition) goto L_0153;
if (condition <= 5) goto L_0154;
L_0153:
abort(1397444657);
L_0154:
cput((jump[condition] | (halfwords + 1)));
L_0151:
goto L_0155;
void machinecode()
{
// bounds [1 : 204]
// do it now: const int {*,2}mcop {NO INIT}
// bounds [1 : 204]
// do it now: const short {*,2}opflags {NO INIT}
char *opcode;
struct VARFM *v;
int op;
int base;
int disp;
int index;
int flags;
int p;
int n;
int reg;
goto L_0155;
void mcerror(char *s)
{
selectoutput(0);
printsymbol(42);
write(currentline, 3);
space();
printstring(opcode);
printstring(": ");
printstring(s);
newline();
selectoutput(2);
for (;;) {
L_0156:
if (sym == 59) goto L_0157;
sym = next;
readsymbol(next);
}
L_0157:
L_0155:
goto L_0158;
void getopcode()
{
strncpy(opcode,"",7+1);
op = 0;
for (;;) {
L_0159:
sym = next;
readsymbol(next);
if (sym != 95) goto L_015a;
goto L_015b;
L_015a:
if (*length(opcode) == 6) goto L_015c;
op = ((op << 6) ^ sym);
strncpy(opcode,opcode,7+1);
L_015c:
}
L_015b:
sym = next;
readsymbol(next);
L_0158:
goto L_015d;
int findopcode()
{
int high;
int low;
int p;
high = 204;
low = 1;
for (;;) {
L_015e:
if (high < low) goto L_015f;
p = ((high + low) >> 1);
if (mcop[p] != op) goto L_0160;
return(p);
L_0160:
if (mcop[p] <= op) goto L_0161;
high = (p - 1);
goto L_0162;
L_0161:
low = (p + 1);
L_0162:
}
L_015f:
mcerror("unknown operation");
return(0);
L_015d:
goto L_0163;
int value(int *n)
{
*n = 0;
if (48 > sym) goto L_0164;
if (sym <= 55) goto L_0165;
L_0164:
L_0165:
for (;;) {
L_0166:
*n = ((*n << 3) | (sym - 48));
sym = next;
readsymbol(next);
if (48 > sym) goto L_0167;
if (sym <= 55) goto L_0168;
L_0167:
L_0168:
}
L_0163:
goto L_0169;
int register(int *r)
{
if (value(*r)) goto L_016a;
L_016a:
if (0 > *r) goto L_016b;
if (*r <= 15) goto L_016c;
L_016b:
L_016c:
L_0169:
goto L_016d;
int dealwithplusminus()
{
int sign;
int n;
if (sym == 43) goto L_016e;
if (sym == 45) goto L_016e;
L_016e:
sign = sym;
sym = next;
readsymbol(next);
if (value(n)) goto L_016f;
mcerror("invalid offset");
L_016f:
if (sign != 45) goto L_0170;
n = (-n);
L_0170:
disp = (disp + n);
L_016d:
base = (-1);
index = (-1);
disp = 0;
getopcode();
p = findopcode();
if (p != 0) goto L_0171;
return;
L_0171:
flags = opflags[p];
if ((flags & 1) == 0) goto L_0172;
reg = ((flags >> 4) & 15);
goto L_0173;
L_0172:
if (register(reg)) goto L_0174;
mcerror("register 1?");
return;
L_0174:
if (sym == 44) goto L_0175;
mcerror("comma missing");
return;
L_0175:
sym = next;
readsymbol(next);
L_0173:
if ((flags & 2) == 0) goto L_0176;
if (register(base)) goto L_0177;
mcerror("register 2?");
return;
L_0177:
goto L_0178;
L_0176:
if (sym != 32) goto L_0179;
n = tag();
sym = next;
readsymbol(next);
v = &var[n];
disp = v->disp;
if (v->form != 14) goto L_017a;
definereference((disp & 4095), 2);
disp = 0;
base = 15;
if (dealwithplusminus()) goto L_017b;
return;
L_017b:
goto L_017c;
L_017a:
if (v->base == 0) goto L_017d;
base = actual[v->base];
L_017d:
if (dealwithplusminus()) goto L_017e;
return;
L_017e:
if (sym != 40) goto L_017f;
if (base <= 0) goto L_0180;
goto U_010a;
L_0180:
goto U_010b;
L_017f:
L_017c:
goto L_0178;
L_0179:
if (sym != 45) goto L_0181;
if (!(dealwithplusminus())) goto L_0181;
goto L_0182;
L_0181:
if (value(disp)) goto L_0183;
mcerror("displacement?");
return;
L_0183:
L_0182:
if (dealwithplusminus()) goto L_0184;
return;
L_0184:
if (sym != 40) goto L_0185;
U_010b:
sym = next;
readsymbol(next);
if (register(base)) goto L_0186;
mcerror("base register?");
return;
L_0186:
if (sym != 44) goto L_0187;
U_010a:
sym = next;
readsymbol(next);
if ((flags & 4) != 0) goto L_0188;
mcerror("no double indexed form");
return;
L_0188:
if (register(index)) goto L_0189;
mcerror("index register?");
return;
L_0189:
L_0187:
if (sym == 41) goto L_018a;
mcerror(") missing");
return;
L_018a:
sym = next;
readsymbol(next);
L_0185:
L_0178:
if (sym == 59) goto L_018b;
mcerror("form?");
return;
L_018b:
if (base >= 0) goto L_018c;
base = 0;
L_018c:
if (index >= 0) goto L_018d;
index = 0;
L_018d:
if (base != 0) goto L_018e;
if (index == 0) goto L_018e;
base = index;
index = 0;
L_018e:
cput((((flags & 65280) + (reg << 4)) + base));
if ((flags & 8) == 0) goto L_018f;
cput((disp & 65535));
goto L_0190;
L_018f:
if ((flags & 16) == 0) goto L_0191;
if ((flags & 1) != 0) goto L_0191;
cput((disp >> 16));
cput((disp & 65535));
goto L_0190;
L_0191:
if ((flags & 2) != 0) goto L_0192;
if ((disp >> 14) != 0) goto L_0193;
if (index <= 0) goto L_0194;
L_0193:
if ((flags & 4) != 0) goto L_0195;
mcerror("no RX3 form");
return;
L_0195:
cput(((16384 + (index << 8)) + ((disp >> 16) & 255)));
L_0194:
cput((disp & 65535));
L_0192:
L_0190:
for (;;) {
L_0196:
goto L_0196;
void setdopevector()
{
int t;
t = ((vub - vlb) + 1);
claimliteral((4 * 4), 3);
selectliteralarea();
dv = ca;
cword(1);
cword(vlb);
cword(vub);
cword(datasize);
selectcodearea();
vub = (t * datasize);
vlb = (vlb * datasize);
L_0196:
goto L_0197;
void perm(int n)
{
// bounds [0 : 8]
// do it now: const short {*,2}rmap {NO INIT}
int k;
int r;
int h;
// bounds [1 : 50]
// do it now: const short {*,2}hazardreg {NO INIT}
h = hazardreg[n];
if (claimed == 0) goto L_0198;
k = (h & 32767);
r = 0;
for (;;) {
L_0199:
if (k == 0) goto L_019a;
if ((k & 1) == 0) goto L_019b;
hazard(rmap[r]);
L_019b:
k = (k >> 1);
r = (r + 1);
}
L_019a:
L_0198:
r = ((((h & (128 + 256)) << (17 - 7)) | (h & 127)) << 1);
forgetreg(r);
if (h >= 0) goto L_019c;
if (wdisp == 0) goto L_019c;
rxi(3, 8, 0, wdisp);
L_019c:
definereference((n & 255), 3);
rx(22, 16, 15, (n & 255));
if (h >= 0) goto L_019d;
if (wdisp == 0) goto L_019e;
rxi(4, 8, 0, wdisp);
L_019e:
wdisp = ((wdisp + 44) + 256);
L_019d:
L_0197:
goto L_019f;
void dumptrace()
{
if (currentline == lastline) goto L_01a0;
traceflag = 0;
perm(50);
cput(currentline);
L_01a0:
L_019f:
goto L_01a1;
void assemble(int amode, int labs, int names)
{
// bounds [33 : 127]
/*todo: gcc jump table extension*/ void **c;
// bounds [65 : 90]
/*todo: gcc jump table extension*/ void **pc;
typedef struct EVFM{int low; int high; int events; int label;} evfm;
struct EVFM event;
memset(event,0,sizeof struct EVFM);
struct VARFM *v;
struct VARFM *gvar;
struct STACKFM *lhs;
struct STACKFM *rhs;
struct STACKFM *x;
int oldframe;
int oldextraframe;
int oldjump;
int oldtempbase;
int oldnexttemp;
int trueframebase;
int putativeframebase;
int maxframe;
int altfirst;
int altalign;
altalign = 0;
int oldvardiags;
int gstart;
int labelstart;
static int freetag;
int maxlocal;
maxlocal = 0;
int maxparm;
maxparm = 0;
int minparm;
minparm = 0;
int markassigned;
markassigned = 1;
int closed;
closed = 8;
int returnlabel;
returnlabel = 0;
int px;
px = 0;
int procca;
procca = ca;
int swlist;
swlist = 0;
int lasta;
lasta = (-1);
int linesize;
linesize = 0;
int blockindex;
int j;
int k;
int t;
void compiletostring(struct STACKFM *v);
void poplhs();
void lrd(struct STACKFM *v, int reg);
void load(struct STACKFM *v, int reg);
void assign(int assop);
void arrayref(int mode);
void operate(int n);
void compare(struct STACKFM *l, struct STACKFM *r, int next);
void testzero(struct STACKFM *v);
void header(struct VARFM *v);
void blockmark(int mark);
int newtag();
oldjump = uncondjump;
uncondjump = (-1);
oldvardiags = vardiags;
vardiags = 0;
labelstart = labs;
oldframe = frame;
oldextraframe = extraframe;
extraframe = 0;
oldtempbase = tempbase;
oldnexttemp = nexttemp;
tempbase = newtemp;
nexttemp = newtemp;
U_0131:
pdisp = 0;
wdisp = 0;
gdisp = (-1);
event.events = 0;
if (gdisp == (-1)) goto L_01a2;
abort(758194239);
L_01a2:
gvar = decvar;
gstart = names;
if (amode < 0) goto L_01a3;
frame = 44;
ca = 0;
level = (level + 1);
if (level <= 5) goto L_01a4;
if (spec != 0) goto L_01a4;
abort(1095577648);
L_01a4:
local = breg[level];
activity[local] = (-1);
gdisp = ((7 - 6) * 4);
if (spec != 0) goto L_01a5;
resetoptimisationdata();
L_01a5:
if (amode != 0) goto L_01a6;
blockno = (blockno + 1);
blockindex = blockno;
blockmark(16);
if (sym != 72) goto L_01a7;
gdisp = (-1);
if (level != 1) goto L_01a8;
strncpy(externalid,programep,19+1);
otype = 3;
potype = otype;
L_01a8:
header(*gvar);
L_01a7:
L_01a6:
goto L_01a9;
L_01a3:
if (amode != (-1)) goto L_01aa;
gvar->extra = parms;
frame = 0;
L_01aa:
trueframebase = frame;
putativeframebase = ((frame + 3) & (\3));
frame = putativeframebase;
maxframe = frame;
altfirst = (parms - 1);
L_01a9:
goto L_01a1;
void blockmark(int mark)
{
int k;
int limit;
k = 1;
for (;;) {
L_01ab:
selectoutput(k);
printsymbol(mark);
if (mark != 16) goto L_01ac;
printsymbol(blockindex);
if (k != 2) goto L_01ad;
put(currentline);
lastline = (-15);
describe((-1), 0, blockname);
L_01ad:
goto L_01ae;
L_01ac:
if (k != 1) goto L_01af;
if (freetag <= 32767) goto L_01b0;
abort(1413564223);
L_01b0:
put((ca >> 1));
put(vardiags);
frame = ((frame + 3) & (\3));
k = (frame + extraframe);
if ((control & 32) != 0) goto L_01b1;
k = (k >> 2);
limit = 65535;
goto L_01b2;
L_01b1:
limit = 32767;
L_01b2:
if (0 >= k) goto L_01b3;
if (k <= limit) goto L_01b4;
L_01b3:
abort(1179798847);
L_01b4:
put(k);
printsymbol(actual[local]);
put(event.events);
put(event.label);
put(event.low);
totalca = (totalca + ca);
L_01af:
L_01ae:
if (k != 2) goto L_01b5;
goto L_01b6;
L_01b5:
k = 2;
}
L_01b6:
lastca = (-1);
L_01a1:
goto L_01b7;
void setframepatch()
{
if (diagnose >= 0) goto L_01b8;
selectoutput(0);
printstring(" Block index");
write(blockindex, 1);
newline();
selectoutput(2);
L_01b8:
printsymbol(15);
L_01b7:
goto L_01b9;
void definevar()
{
int type;
int form;
int tf;
int size;
int format;
int s;
int new;
int round;
int dimension;
int ignore;
struct STACKFM temp;
int k;
// bounds [0 : 18]
// do it now: const short {*,2}fmap {NO INIT}
// bounds [0 : 8]
// do it now: const char {*,2}vsize {NO INIT}
static int primno;
ignore = 0;
if (amode < 0) goto L_01ba;
if (amode != 1) goto L_01bb;
L_01ba:
ignore = 1;
L_01bb:
strncpy(internalid,"",19+1);
new = 0;
round = 3;
decl = tag();
if (decl != 0) goto L_01bc;
parms = (parms - 1);
if (parms > names) goto L_01bd;
abort(1145460273);
L_01bd:
decvar = &var[parms];
memset(*decvar,0,sizeof struct VARFM);
goto L_01be;
L_01bc:
if (decl < parms) goto L_01bf;
abort(1145460274);
L_01bf:
decvar = &var[decl];
if (decl <= names) goto L_01c0;
names = decl;
new = 1;
memset(*decvar,0,sizeof struct VARFM);
L_01c0:
L_01be:
for (;;) {
L_01c1:
sym = next;
readsymbol(next);
if (sym != 44) goto L_01c2;
goto L_01c3;
L_01c2:
if (*length(internalid) == 12) goto L_01c4;
strncpy(internalid,internalid,19+1);
L_01c4:
}
L_01c3:
if (internalid != "") goto L_01c5;
ignore = 1;
L_01c5:
tf = tag();
readsymbol(next);
type = (tf >> 4);
form = (tf & 15);
size = tag();
readsymbol(next);
diagtype = type;
diagform = form;
diagsize = size;
if (type != 1) goto L_01c6;
if (size == 1) goto L_01c6;
if (size != 2) goto L_01c7;
type = 3;
round = 0;
L_01c7:
if (size != 3) goto L_01c8;
type = 2;
round = 1;
L_01c8:
size = vsize[type];
goto L_01c9;
L_01c6:
if (type != 2) goto L_01ca;
type = 7;
size = vsize[type];
goto L_01c9;
L_01ca:
if (type != 4) goto L_01cb;
type = 6;
format = size;
decvar->format = format;
if (format > names) goto L_01cc;
size = (var[format].length & 65535);
L_01cc:
goto L_01c9;
L_01cb:
if (type != 3) goto L_01cd;
type = 5;
round = 0;
decvar->length = size;
size = (size + 1);
goto L_01c9;
L_01cd:
size = vsize[type];
L_01c9:
if (type == 5) goto L_01ce;
decvar->length = size;
L_01ce:
decvar->type = type;
decvar->xform = fmap[form];
otype = tag();
spec = ((otype >> 3) & 1);
dimension = ((otype >> 8) & 255);
otype = (otype & 7);
if (otype == 0) goto L_01cf;
if (otype < 3) goto L_01d0;
if (alias == "") goto L_01d1;
strncpy(externalid,alias,19+1);
goto L_01d2;
L_01d1:
if (otype != 4) goto L_01d3;
strncpy(externalid,systemprefix,19+1);
goto L_01d2;
L_01d3:
strncpy(externalid,internalid,19+1);
L_01d2:
if (otype > 5) goto L_01d4;
otype = 3;
L_01d4:
L_01d0:
L_01cf:
strncpy(alias,"",19+1);
if (7 > form) goto L_01d5;
if (form > 10) goto L_01d5;
gtype = spec;
if (otype == 0) goto L_01d6;
if (spec == 0) goto L_01d6;
if (otype != 6) goto L_01d7;
primno = (primno + 1);
decvar->flag = (decvar->flag | 4);
decvar->header = primno;
if (primno == 2) goto L_01d8;
return;
L_01d8:
otype = 3;
strncpy(externalid,readsymfn,19+1);
L_01d7:
gfix(3);
decvar->disp = ga;
decvar->base = 14;
externallink(6, 0, ga);
return;
L_01d6:
if (gmode != 0) goto L_01d9;
potype = otype;
if (new == 0) goto L_01da;
decvar->disp = newtag();
L_01da:
if (spec != 0) goto L_01db;
strncpy(blockname,internalid,19+1);
L_01db:
return;
L_01d9:
ignore = 1;
otype = 0;
size = 4;
datasize = 4;
goto L_01dc;
L_01d5:
datasize = size;
if (form == 1) goto L_01dd;
round = 3;
if (type != 0) goto L_01de;
ignore = 1;
decvar->extra = gmode;
type = 4;
size = 8;
decvar->type = 4;
goto L_01df;
L_01de:
if (form == 11) goto L_01e0;
if (form != 13) goto L_01e1;
L_01e0:
ignore = 1;
size = 0;
if (form != 13) goto L_01e2;
datasize = 4;
L_01e2:
goto L_01df;
L_01e1:
if (form == 12) goto L_01e3;
if (form != 14) goto L_01e4;
L_01e3:
ignore = 1;
size = (2 * 4);
round = 3;
decvar->header = (-1);
if (0 >= dimension) goto L_01e5;
if (dimension <= 7) goto L_01e6;
L_01e5:
abort(1145460275);
L_01e6:
decvar->flag = (decvar->flag | dimension);
goto L_01df;
L_01e4:
size = 4;
L_01df:
L_01dd:
L_01dc:
if (otype == 0) goto L_01e7;
if (otype != 2) goto L_01e8;
if (type != 5) goto L_01e9;
if (form != 1) goto L_01e9;
datasize = 0;
L_01e9:
if (form == 2) goto L_01ea;
if (form == 12) goto L_01ea;
if (form != 14) goto L_01eb;
L_01ea:
otype = 0;
goto L_01ec;
L_01eb:
ignore = 1;
L_01ec:
goto L_01ed;
L_01e8:
gfix(round);
if (ignore == 1) goto L_01ee;
setdiag(14, ga);
L_01ee:
L_01ed:
owntype = type;
ownform = form;
if (form != 2) goto L_01ef;
owntype = 1;
datasize = 4;
L_01ef:
decvar->header = (-1);
if (spec != 0) goto L_01f0;
if (form == 11) goto L_01f1;
if (form != 13) goto L_01f2;
L_01f1:
ownform = 11;
decvar->flag = ((decvar->flag & (\96)) | (64 | 1));
if (0 >= decvar->length) goto L_01f3;
if (decvar->length > 32767) goto L_01f3;
if ((-32768) > vlb) goto L_01f3;
if (vub > 32767) goto L_01f3;
decvar->flag = (decvar->flag | 32);
L_01f3:
gfix(3);
setdopevector();
if (otype == 2) goto L_01f4;
decvar->disp = ga;
decvar->base = 14;
gwordrel(((ga + 8) - vlb));
gwordcrel(dv);
goto L_01f5;
L_01f4:
claimliteral(vub, 3);
selectliteralarea();
decvar->disp = ga;
decvar->base = 14;
gwordcrel((ca - vlb));
gwordcrel(dv);
selectcodearea();
L_01f5:
if (otype != 3) goto L_01f6;
externallink(5, 0, (ga - 8));
L_01f6:
L_01f2:
goto L_01f7;
L_01f0:
decvar->xform = ((decvar->xform + 3) | (8 << 8));
if (form < 11) goto L_01f8;
decvar->xform = (decvar->xform | (1 << 8));
L_01f8:
decvar->base = 14;
decvar->disp = 0;
decvar->extra = (ga + 8);
externallink(4, 0, ga);
L_01f7:
return;
L_01e7:
if (form != 3) goto L_01f9;
decvar->disp = newtag();
return;
L_01f9:
if (form != 6) goto L_01fa;
decvar->extra = vlb;
decvar->length = ((vub - vlb) + 1);
decvar->format = (freetag + 1);
claimliteral(((((vub - vlb) + 1) + 2) * 2), 1);
decvar->base = 15;
decvar->disp = litmax;
selectliteralarea();
cput(vlb);
cput(vub);
for (s = vlb; s += 1; s != vub) {
freetag = (freetag + 1);
definereference(freetag, 4);
cput(freetag);
}
L_01fe:
selectcodearea();
return;
L_01fa:
if (form != 4) goto L_01ff;
if (gmode == 0) goto L_0200;
if (decvar->length <= frame) goto L_0201;
frame = decvar->length;
L_0201:
goto L_0202;
L_0200:
gtype = (-1);
spec = (-1);
L_0202:
return;
L_01ff:
decvar->base = local;
if (gdisp < 0) goto L_0203;
if ((decvar->flag & 96) != 0) goto L_0203;
if (decvar->form != 6) goto L_0204;
if (decvar->type != 4) goto L_0205;
L_0204:
if (decvar->form != 4) goto L_0203;
if (decvar->type > 3) goto L_0203;
L_0205:
decvar->disp = gdisp;
gdisp = (gdisp - 4);
if (decvar->form != 4) goto L_0206;
if (2 > decvar->type) goto L_0206;
if (decvar->type > 3) goto L_0206;
decvar->disp = (decvar->disp + decvar->type);
L_0206:
decvar->flag = (decvar->flag | 2);
minparm = (minparm + 1);
if ((control & 128) != 0) goto L_0207;
temp.form = decvar->form;
temp.type = decvar->type;
temp.closeoutput = decvar->base;
temp.disp = decvar->disp;
if (temp.form != 6) goto L_0208;
temp.form = 4;
temp.type = 1;
L_0208:
associate(temp, (7 - (minparm - 1)));
L_0207:
goto L_0209;
L_0203:
frame = ((frame + round) & (\round));
maxlocal = frame;
decvar->disp = frame;
frame = (frame + size);
altalign = (altalign | round);
L_0209:
if (ignore != 0) goto L_020a;
setdiag(local, decvar->disp);
L_020a:
L_01b9:
goto L_020b;
int checkable(struct STACKFM *v)
{
if (v->form == 0) goto L_020c;
if (v->form != 5) goto L_020d;
L_020c:
L_020d:
if ((v->flag & 8) == 0) goto L_020e;
L_020e:
if (v->type == 1) goto L_020f;
if (v->type == 5) goto L_020f;
if (v->type < 7) goto L_0210;
L_020f:
L_0210:
L_020b:
goto L_0211;
struct STACKFM descriptor ()
{
struct DFM *d;
struct STACKFM *v;
stp = (stp + 1);
if (stp <= 16) goto L_0212;
abort(1146307377);
L_0212:
v = descasl;
if (v != null) goto L_0213;
abort(1146307378);
L_0213:
d = dasl;
if (d != null) goto L_0214;
abort(1146307379);
L_0214:
descasl = &v->link;
memset(*v,0,sizeof struct STACKFM);
dasl = &d->link;
d->link = &using.link;
using.link = d;
d->d = v;
return(v);
L_0211:
goto L_0215;
void drop(struct STACKFM *descriptor)
{
struct DFM *p;
struct DFM *q;
p = &using;
for (;;) {
L_0216:
q = &p->link;
if (q != null) goto L_0217;
abort(1146244944);
L_0217:
if (&q->d != descriptor) goto L_0218;
goto L_0219;
L_0218:
p = q;
}
L_0219:
p->link = &q->link;
q->link = dasl;
dasl = q;
descriptor->link = descasl;
descasl = descriptor;
L_0215:
goto L_021a;
void vstack(int varno)
{
struct VARFM *w;
if (0 > varno) goto L_021b;
if (varno <= 800) goto L_021c;
L_021b:
abort(1448301643);
L_021c:
w = &var[varno];
lhs = &*descriptor();
stacked[stp].v = lhs;
lhs->sptfm = w->base;
lhs->disp = w->disp;
lhs->format = w->format;
lhs->extra = w->extra;
lhs->type = w->type;
lhs->length = w->length;
lhs->header = w->header;
lhs->link = null;
lhs->type = w->type;
lhs->xform = w->xform;
lhs->v = (w->flag & 7);
lhs->varno = varno;
if ((diagnose & 1) == 0) goto L_021d;
monitor(*lhs, "V stack");
L_021d:
L_021a:
goto L_021e;
void sstack(struct STACKFM *v)
{
struct STACKFM *t;
t = &*descriptor();
memcpy(*t,*v,sizeof struct STACKFM);
stacked[stp].v = t;
if ((diagnose & 1) == 0) goto L_021f;
monitor(*t, "S STACK");
L_021f:
L_021e:
goto L_0220;
void cstack(int n)
{
rhs = &*descriptor();
rhs->sptfm = 0;
rhs->disp = n;
rhs->type = 1;
rhs->form = 0;
stacked[stp].v = rhs;
if ((diagnose & 1) == 0) goto L_0221;
monitor(*rhs, "C stack");
L_0221:
L_0220:
goto L_0222;
void cload(int value, int reg)
{
cstack(value);
poplhs();
lrd(*lhs, reg);
L_0222:
goto L_0223;
void sset(int base, int disp, int xform, int extra)
{
rhs = &*descriptor();
rhs->sptfm = base;
rhs->disp = disp;
rhs->type = 1;
rhs->xform = xform;
rhs->extra = extra;
rhs->link = null;
stacked[stp].v = rhs;
if ((diagnose & 1) == 0) goto L_0224;
monitor(*rhs, "SSET");
L_0224:
L_0223:
goto L_0225;
void setlhs()
{
lhs = &stacked[stp].v;
if ((diagnose & 1) == 0) goto L_0226;
monitor(*lhs, "SET LHS");
L_0226:
L_0225:
goto L_0227;
void setboth()
{
if (stp > 1) goto L_0228;
abort(1397052482);
L_0228:
lhs = &stacked[(stp - 1)].v;
rhs = &stacked[stp].v;
if ((diagnose & 1) == 0) goto L_0229;
monitor(*lhs, "BOTH LHS");
monitor(*rhs, "BOTH RHS");
L_0229:
L_0227:
goto L_022a;
void poplhs()
{
if (stp > 0) goto L_022b;
abort(1347375180);
L_022b:
lhs = &stacked[stp].v;
stp = (stp - 1);
if ((diagnose & 1) == 0) goto L_022c;
monitor(*lhs, "POP LHS");
L_022c:
L_022a:
goto L_022d;
void popdrop()
{
poplhs();
if ((diagnose & 1) == 0) goto L_022e;
monitor(*lhs, "POP DROP");
L_022e:
drop(*lhs);
L_022d:
goto L_022f;
void dumpstring(int max)
{
int j;
if (max != 0) goto L_0230;
max = (*cslen + 1);
goto L_0231;
L_0230:
if ((*cslen + 1) <= max) goto L_0232;
if (*cslen != 128) goto L_0233;
if (currentstring[1] == 128) goto L_0234;
L_0233:
warn(5);
currentstring[0] = (max - 1);
L_0234:
L_0232:
L_0231:
if (otype != 2) goto L_0235;
selectliteralarea();
for (j = 0; j += 1; j != (max - 1)) {
litbyte(currentstring[j]);
}
L_0239:
selectcodearea();
goto L_023a;
L_0235:
for (j = 0; j += 1; j != (max - 1)) {
gbyte(currentstring[j]);
}
L_023e:
L_023a:
L_022f:
goto L_023f;
void getstring()
{
int l;
l = next;
*cslen = 0;
for (;;) {
L_0240:
if (l <= 0) goto L_0241;
l = (l - 1);
readsymbol(next);
*cslen = ((*cslen + 1) & 255);
currentstring[*cslen] = next;
}
L_0241:
readsymbol(next);
if (next == 65) goto L_0242;
if (next == 36) goto L_0242;
if (next != 46) goto L_0243;
if (*cslen != 1) goto L_0243;
if ((control & (1 | 2)) != 0) goto L_0243;
cstack(currentstring[1]);
rhs->flag = (rhs->flag | 1);
return;
L_0243:
cstack(0);
rhs->type = 5;
otype = 2;
rhs->sptfm = 15;
rhs->xform = (4 | (8 << 8));
rhs->format = (*cslen + 1);
if (*cslen != 0) goto L_0244;
if (nullstring != 0) goto L_0245;
L_0244:
claimliteral((*cslen + 1), 1);
rhs->disp = lita;
dumpstring(0);
if (nullstring != 0) goto L_0246;
if (0 != *cslen) goto L_0246;
nullstring = rhs->disp;
L_0246:
goto L_0247;
L_0245:
rhs->disp = nullstring;
L_0247:
goto L_0248;
L_0242:
cstack(0);
L_0248:
L_023f:
goto L_0249;
int realconstant(int force)
{
static int last;
static int next;
int j;
int k;
// bounds [0 : 31]
// do it now: static int {*,1}val {NO INIT}
// bounds [0 : 31]
// do it now: static short {*,1}index {NO INIT}
k = *integer(addr(rvalue));
if (otype == 2) goto L_024a;
gfix(3);
gword(k);
return((ga - 4));
L_024a:
if (force != 0) goto L_024b;
j = last;
for (;;) {
L_024c:
if (val[last] != k) goto L_024d;
goto U_0149;
L_024d:
last = ((last + 1) & 31);
if (last != j) goto L_024e;
goto L_024f;
L_024e:
}
L_024f:
claimliteral(4, (4 - 1));
L_024b:
next = ((next + 1) & 31);
last = next;
selectliteralarea();
val[last] = k;
index[last] = ca;
cword(k);
selectcodearea();
U_0149:
return(index[last]);
L_0249:
goto L_0250;
int newtag()
{
freetag = (freetag + 1);
return(freetag);
L_0250:
goto L_0251;
struct LABELFM newlabel ()
{
labs = (labs + 1);
if (labs <= 80) goto L_0252;
abort(1313620556);
L_0252:
return(&labels[labs]);
L_0251:
goto L_0253;
struct LABELFM find (int label)
{
int lp;
struct LABELFM *l;
lp = labs;
for (;;) {
L_0254:
if (lp == labelstart) goto L_0255;
l = &labels[lp];
if (l->id != label) goto L_0256;
return(l);
L_0256:
lp = (lp - 1);
}
L_0255:
return(null);
L_0253:
goto L_0257;
void definelabel(int label)
{
int ltag;
int new;
struct LABELFM *l;
struct ENVFM *e;
ccca = 0;
new = 0;
if (label != 0) goto L_0258;
return;
L_0258:
if (label >= 0) goto L_0259;
ltag = (-label);
new = 1;
goto L_025a;
L_0259:
l = &*find(label);
if (l != null) goto L_025b;
l = &*newlabel();
l->id = label;
l->tag = newtag();
new = 1;
goto L_025c;
L_025b:
if (l->tag >= 0) goto L_025d;
if (label < 0) goto L_025d;
l->tag = newtag();
new = 1;
L_025d:
L_025c:
l->tag = (l->tag | -32768);
ltag = l->tag;
L_025a:
if (new == 0) goto L_025e;
e = &*environment(label);
if (e == null) goto L_025f;
e->label = 0;
L_025f:
L_025e:
definetag((ltag & 32767));
if (uncondjump == ca) goto L_0260;
mergeenvironment(label);
L_0260:
restoreenvironment(label);
if (traceflag == 0) goto L_0261;
if (next == 58) goto L_0262;
if (next == 76) goto L_0262;
dumptrace();
L_0262:
L_0261:
uncondjump = 0;
markassigned = 0;
L_0257:
goto L_0263;
void jumpto(int label, int cond, int def)
{
struct LABELFM *lab;
int ref;
invert = 0;
if ((cond & 16) == 0) goto L_0264;
cond = inverted[cond];
L_0264:
if (def < 0) goto L_0265;
if (label != 0) goto L_0266;
return;
L_0266:
if (label >= 0) goto L_0267;
jtag = (-label);
goto L_0268;
L_0267:
lab = &*find(label);
if (lab != null) goto L_0269;
lab = &*newlabel();
lab->id = label;
lab->tag = newtag();
rememberenvironment(label);
goto L_026a;
L_0269:
if (lab->tag >= 0) goto L_026b;
if (def != 1) goto L_026b;
lab->tag = newtag();
rememberenvironment(label);
goto L_026a;
L_026b:
if (lab->tag <= 0) goto L_026c;
mergeenvironment(label);
L_026c:
L_026a:
jtag = (lab->tag & 32767);
L_0268:
goto L_026d;
L_0265:
jtag = label;
L_026d:
if (cond != 12) goto L_026e;
ref = 5;
goto L_026f;
L_026e:
ref = 6;
L_026f:
definereference(jtag, ref);
cput(((jtag << 4) + (cond & 15)));
ccca = (ccca + 2);
if (cond != 12) goto L_0270;
uncondjump = ca;
if (next != 58) goto L_0271;
traceflag = (control & 64);
L_0271:
goto L_0272;
L_0270:
traceflag = (control & 64);
L_0272:
markassigned = 0;
L_0263:
goto L_0273;
void float(struct STACKFM *v, int r)
{
int k;
if (r != 26) goto L_0274;
r = fpr();
L_0274:
if (!(const(*v))) goto L_0275;
if (v->disp != 0) goto L_0276;
hazard(r);
claim(r);
rr(4, r, r);
claim(r);
v->type = 7;
v->form = 1;
v->sptfm = r;
goto L_0277;
L_0276:
rvalue = v->disp;
otype = 2;
k = realconstant(0);
v->xform = ((8 << 8) | 4);
v->type = 7;
v->sptfm = 15;
v->disp = k;
L_0277:
goto L_0278;
L_0275:
load(*v, 25);
rr(13, r, v->sptfm);
claim(r);
v->form = 1;
v->type = 7;
v->sptfm = r;
L_0278:
L_0273:
goto L_0279;
void lrd(struct STACKFM *v, int reg)
{
load(*v, reg);
release(v->sptfm);
drop(*v);
L_0279:
goto L_027a;
void quickload(int reg, int form, int base, int disp)
{
struct STACKFM v;
memset(v,0,sizeof struct STACKFM);
v.type = 1;
v.form = form;
v.sptfm = base;
v.disp = disp;
load(v, reg);
L_027a:
goto L_027b;
void reduce(struct STACKFM *v)
{
int type;
int xform;
int disp;
int base;
xform = (v->xform - 3);
type = v->type;
disp = v->disp;
base = v->sptfm;
v->disp = v->extra;
v->type = 1;
v->form = 4;
load(*v, 25);
v->type = type;
v->xform = (xform & (\(8 << 8)));
v->disp = disp;
L_027b:
goto L_027c;
void amap(struct STACKFM *v)
{
int f;
// bounds [0 : 15]
// do it now: const short {*,2}map {NO INIT}
f = map[v->form];
if (f >= 0) goto L_027d;
if (v->form == 14) goto L_027e;
abort(1095582032);
L_027e:
f = gpr();
forgetreg((1 << f));
definereference((v->disp & 4095), 2);
rx(23, f, 15, 0);
v->type = 1;
v->xform = 1;
v->sptfm = f;
v->disp = 0;
claim(f);
return;
L_027d:
if (f == 7) goto L_027f;
if (f != 8) goto L_0280;
L_027f:
if (v->disp != 0) goto L_0280;
if (f != 7) goto L_0281;
f = 6;
goto L_0282;
L_0281:
f = 4;
L_0282:
v->disp = v->extra;
L_0280:
v->type = 1;
v->form = f;
L_027c:
goto L_0283;
void amaps(struct STACKFM *v)
{
int t;
int l;
t = v->type;
l = v->length;
amap(*v);
if (t == 5) goto L_0284;
return;
L_0284:
if (v->form < 7) goto L_0285;
reduce(*v);
L_0285:
if (v->form == 4) goto L_0286;
if (v->form != 6) goto L_0287;
L_0286:
load(*v, 25);
L_0287:
v->disp = (v->disp + (l << 24));
v->form = 5;
L_0283:
goto L_0288;
void vmap(struct STACKFM *v)
{
int mod;
int f;
int t;
// bounds [0 : 8]
// do it now: const short {*,2}map {NO INIT}
mod = 0;
if (v->oper == 0) goto L_0289;
if (v->oper == 3) goto L_028a;
if (v->oper != 4) goto L_028b;
L_028a:
if (!(const(v->link))) goto L_028b;
mod = v->link.disp;
if (v->oper != 4) goto L_028c;
mod = (-mod);
L_028c:
v->oper = 0;
drop(v->link);
L_028b:
load(*v, 25);
goto L_028d;
L_0289:
if (v->form == 6) goto L_028e;
if (v->form != 9) goto L_028f;
L_028e:
t = v->type;
amap(*v);
load(*v, 25);
v->type = t;
v->form = 4;
L_028f:
L_028d:
f = map[v->form];
if (f >= 0) goto L_0290;
abort(1447903568);
L_0290:
v->form = f;
v->disp = (v->disp + mod);
L_0288:
goto L_0291;
void address(struct STACKFM *v, int mode)
{
int type;
int form;
int reg;
int d;
int cr;
static struct STACKFM *last;
if ((diagnose & 2) == 0) goto L_0292;
monitor(*v, "ADDRESS");
L_0292:
reg = mode;
if (reg > 0) goto L_0293;
reg = 25;
if (v->type >= 7) goto L_0294;
if (v->oper == 0) goto L_0295;
if (!(floating(*v))) goto L_0295;
L_0294:
reg = 26;
L_0295:
L_0293:
cr = reg;
if (v->oper == 0) goto L_0296;
if (v->oper != 3) goto L_0297;
if (!(const(v->link))) goto L_0297;
if (v->type > 3) goto L_0297;
d = v->link.disp;
drop(v->link);
v->oper = 0;
load(*v, reg);
v->disp = d;
v->form = 5;
goto L_0298;
L_0297:
load(*v, reg);
L_0298:
goto U_0155;
L_0296:
form = v->form;
type = v->type;
if (form < 7) goto L_0299;
reduce(*v);
form = v->form;
L_0299:
if ((control & 128) != 0) goto L_029a;
cheapreg = cr;
cheapen(*v, mode);
cr = cheapreg;
form = v->form;
L_029a:
if (form == 1) goto L_029b;
if (form != 0) goto L_029c;
L_029b:
goto U_0155;
L_029c:
if (form != 5) goto L_029d;
if (v->sptfm != 0) goto L_029e;
v->form = 0;
goto L_029f;
L_029e:
if (v->disp != 0) goto L_02a0;
v->form = 1;
L_02a0:
L_029f:
goto U_0155;
L_029d:
if (form != 6) goto L_02a1;
v->form = 4;
v->type = 1;
load(*v, 25);
v->type = type;
v->xform = (((v->flag & (\8)) << 8) | 4);
v->disp = 0;
form = 4;
L_02a1:
if (last == v) goto L_02a2;
last = v;
if (mode < 0) goto L_02a3;
if ((control & 2) == 0) goto L_02a4;
if (v->type == 5) goto L_02a4;
if (checkable(*v)) goto L_02a5;
L_02a4:
if (v->type != 3) goto L_02a3;
L_02a5:
load(*v, reg);
L_02a3:
last = null;
L_02a2:
U_0155:
cheapreg = cr;
L_0291:
goto L_02a6;
void load(struct STACKFM *v, int r)
{
struct STACKFM *w;
// bounds [0 : 9]
/*todo: gcc jump table extension*/ void **f;
// bounds [1 : 17]
/*todo: gcc jump table extension*/ void **iop;
// bounds [1 : 17]
/*todo: gcc jump table extension*/ void **rop;
struct STACKFM z;
struct STACKFM *temprhs;
int op;
int d;
int type;
int temp;
int n;
int uflag;
// bounds [1 : 16]
// do it now: const char {*,2}twin {NO INIT}
goto L_02a6;
void pickup(struct STACKFM *v)
{
int old;
load(*v, r);
if (r == 25) goto L_02a7;
if (r != 26) goto L_02a8;
L_02a7:
old = r;
r = v->sptfm;
if (activity[r] == 1) goto L_02a9;
if (activity[r] != 2) goto L_02aa;
if (w->sptfm != r) goto L_02aa;
L_02a9:
return;
L_02aa:
if (old != 25) goto L_02ab;
r = gpr();
goto L_02ac;
L_02ab:
r = fpr();
L_02ac:
load(*v, r);
goto L_02ad;
L_02a8:
if (activity[r] == 1) goto L_02ae;
abort(1349084011);
L_02ae:
L_02ad:
L_02a6:
if ((diagnose & 2) == 0) goto L_02af;
monitor(*v, "LOAD");
L_02af:
if (floating(*v)) goto L_02b0;
if (17 > r) goto L_02b1;
if (r <= 24) goto L_02b0;
L_02b1:
if (r != 26) goto L_02b2;
L_02b0:
goto U_015d;
L_02b2:
op = v->oper;
v->oper = 0;
if (op == 0) goto L_02b3;
w = &v->link;
if (w->sptfm != r) goto L_02b4;
if (r == v->sptfm) goto L_02b4;
load(*w, 25);
L_02b4:
goto *iop[op];
L_02b3:
if (v->type == 0) goto L_02b5;
if (v->type == 5) goto L_02b5;
if (v->type != 6) goto L_02b6;
L_02b5:
amap(*v);
L_02b6:
address(*v, r);
if (r != 25) goto L_02b7;
if (v->form != 1) goto L_02b8;
return;
L_02b8:
if (v->form != 5) goto L_02b9;
if (activity[v->sptfm] != 1) goto L_02b9;
if ((-15) > v->disp) goto L_02b9;
if (v->disp > 15) goto L_02b9;
r = v->sptfm;
goto L_02ba;
L_02b9:
r = gpr();
L_02ba:
goto L_02bb;
L_02b7:
if (v->sptfm != r) goto L_02bc;
if (activity[r] <= 1) goto L_02bd;
release(r);
v->sptfm = 0;
hazard(r);
claim(r);
v->sptfm = r;
L_02bd:
goto L_02be;
L_02bc:
hazard(r);
L_02be:
L_02bb:
goto *f[v->form];
f_8:
f_9:
f_7:
f_6:
abort(4998193);
f_5:
f_0:
if (v->type < 7) goto L_02bf;
abort(4998194);
L_02bf:
rxi(1, r, v->sptfm, v->disp);
forgetreg((1 << r));
if (r == v->sptfm) goto L_02c0;
associate(*v, r);
L_02c0:
U_015e:
v->type = 1;
U_015f:
v->form = 1;
v->sptfm = r;
v->disp = 0;
claim(r);
return;
f_1:
if (v->sptfm != r) goto L_02c1;
return;
L_02c1:
rr(1, r, v->sptfm);
forgetreg((1 << r));
v->sptfm = r;
claim(r);
return;
f_4:
uflag = (control & 2);
if (1 >= v->type) goto L_02c2;
if (v->type >= 7) goto L_02c2;
if (2 == v->type) goto L_02c3;
if (v->type == 3) goto L_02c3;
abort(4998195);
L_02c3:
uflag = 0;
goto L_02c4;
L_02c2:
if ((v->flag & 8) != 0) goto L_02c5;
if (!(checkable(*v))) goto L_02c5;
if (v->type != 255) goto L_02c6;
L_02c5:
uflag = 0;
L_02c6:
L_02c4:
if (v->type != 255) goto L_02c7;
v->type = 2;
rxd(37, r, *v);
forgetreg((1 << r));
goto L_02c8;
L_02c7:
rxd(1, r, *v);
forgetreg((1 << r));
associate(*v, r);
L_02c8:
if (uflag == 0) goto L_02c9;
if (v->type >= 7) goto L_02ca;
v->type = 1;
if (level == 5) goto L_02cb;
rr(28, r, 13);
goto L_02cc;
L_02cb:
rx(28, r, 15, 12);
L_02cc:
goto L_02cd;
L_02ca:
v->type = 7;
rx(7, r, 15, 12);
L_02cd:
rr(22, 16, 15);
v->flag = (v->flag & (\8));
L_02c9:
goto U_015f;
iop_8:
if ((control & 2) != 0) goto L_02ce;
if (w->form != 0) goto L_02ce;
address(*v, r);
if (w->disp != 65535) goto L_02cf;
if (v->form != 4) goto L_02d0;
if (v->type == 1) goto L_02d1;
if (v->type != 2) goto L_02d0;
L_02d1:
if (v->type != 1) goto L_02d2;
v->disp = (v->disp + 2);
L_02d2:
U_0160:
v->type = 255;
drop(*w);
load(*v, r);
return;
L_02d0:
goto L_02d3;
L_02cf:
if (w->disp != 255) goto L_02d4;
drop(*w);
if (v->form != 1) goto L_02d5;
if (r != 25) goto L_02d6;
r = gpr();
L_02d6:
rr(31, r, v->sptfm);
goto U_015e;
L_02d5:
if (v->type != 1) goto L_02d7;
v->disp = (v->disp + 3);
goto L_02d8;
L_02d7:
if (v->type != 2) goto L_02d9;
v->disp = (v->disp + 1);
L_02d9:
L_02d8:
v->type = 3;
load(*v, r);
return;
L_02d4:
L_02d3:
L_02ce:
iop_3:
iop_4:
iop_9:
iop_10:
pickup(*v);
address(*w, 0);
rxd(op, r, *w);
goto U_0161;
iop_12:
if ((control & 2) != 0) goto L_02da;
if (w->form != 0) goto L_02da;
if (w->disp != 16) goto L_02da;
address(*v, r);
if (v->form != 4) goto L_02db;
if (v->type != 1) goto L_02db;
goto U_0160;
L_02db:
L_02da:
iop_11:
if (w->form == 0) goto L_02dc;
if ((control & 1) == 0) goto L_02dc;
load(*w, 3);
perm(29);
L_02dc:
pickup(*v);
if (w->form != 0) goto L_02dd;
if (0 > w->disp) goto L_02de;
if (w->disp <= ((8 * 4) - 1)) goto L_02df;
L_02de:
warn(6);
L_02df:
goto L_02e0;
L_02dd:
if (w->form == 1) goto L_02e1;
load(*w, 25);
L_02e1:
w->disp = 0;
L_02e0:
rxi(op, v->sptfm, w->sptfm, w->disp);
goto U_0161;
iop_1:
iop_2:
abort(4998196);
iop_6:
if (w->form != 0) goto L_02e2;
n = power(w->disp);
if (n <= 0) goto L_02e3;
pickup(*v);
testzero(*v);
r = v->sptfm;
claim(r);
d = 1;
if (n <= 4) goto L_02e4;
d = 2;
L_02e4:
skip(d, 5);
rxi(3, v->sptfm, 0, (\((-1) << n)));
rxi(29, v->sptfm, 0, n);
goto U_0161;
L_02e3:
L_02e2:
iop_5:
iop_14:
if (r != 25) goto L_02e5;
n = 0;
if (op != 5) goto L_02e6;
n = 1;
L_02e6:
if (!(infreereg(*v))) goto L_02e7;
if ((actual[v->sptfm] & 1) != n) goto L_02e7;
if (activity[twin[v->sptfm]] != 0) goto L_02e7;
temp = v->sptfm;
if (op == 5) goto L_02e8;
temp = twin[temp];
L_02e8:
goto L_02e9;
L_02e7:
temp = evenoddpair();
L_02e9:
goto L_02ea;
L_02e5:
if ((actual[r] & 1) == 0) goto L_02eb;
if (activity[twin[r]] != 0) goto L_02eb;
temp = r;
goto L_02ec;
L_02eb:
temp = evenoddpair();
L_02ec:
L_02ea:
n = twin[temp];
claim(n);
load(*v, temp);
release(n);
hazard(n);
claim(n);
d = op;
if (op == 5) goto L_02ed;
rr(1, n, temp);
claim(temp);
rxi(29, n, 0, 31);
d = 6;
L_02ed:
forgetreg(((2 + 1) << n));
address(*w, 0);
if (w->form == 0) goto L_02ee;
if (w->form == 5) goto L_02ee;
if (w->type == 1) goto L_02ef;
L_02ee:
load(*w, 25);
L_02ef:
rxd(d, n, *w);
release(n);
if (op != 5) goto L_02f0;
if ((control & 1) == 0) goto L_02f1;
if (n == 1) goto L_02f2;
claim(n);
rr(1, 1, n);
L_02f2:
perm(21);
L_02f1:
goto L_02f3;
L_02f0:
if (op != 14) goto L_02f4;
claim(n);
release(temp);
d = temp;
temp = n;
n = d;
L_02f4:
L_02f3:
v->sptfm = temp;
v->disp = 0;
v->form = 1;
if (temp == r) goto L_02f5;
load(*v, r);
L_02f5:
goto U_0161;
iop_13:
if (r == v->sptfm) goto L_02f6;
if (v->type != 3) goto L_02f7;
L_02f6:
load(*v, 25);
goto L_02f8;
L_02f7:
address(*v, 0);
if (v->form == 4) goto L_02f9;
if (v->form == 1) goto L_02f9;
if (v->form == 0) goto L_02f9;
load(*v, 25);
L_02f9:
L_02f8:
if (v->type != 1) goto L_02fa;
v->disp = (v->disp + (4 / 2));
L_02fa:
pickup(*w);
rxd(13, r, *v);
v->sptfm = r;
v->disp = 0;
v->xform = 1;
goto U_0161;
iop_15:
load(*v, 4);
load(*w, 3);
release(4);
release(3);
perm(2);
claim(2);
v->sptfm = 2;
goto U_0161;
iop_7:
address(*v, r);
if (v->type == 0) goto L_02fb;
if (pdisp != 0) goto L_02fc;
pdisp = 44;
L_02fc:
temprhs = rhs;
sset(8, pdisp, 4, 0);
rhs->type = 5;
rhs->length = 255;
rhs = temprhs;
sstack(*v);
v->sptfm = 0;
assign(1);
claim(3);
v->type = 5;
v->form = 4;
v->sptfm = 3;
v->disp = 0;
v->length = 255;
pdisp = (pdisp + 256);
L_02fb:
if ((w->flag & 1) == 0) goto L_02fd;
memcpy(z,*v,sizeof struct STACKFM);
claim(z.sptfm);
z.type = 3;
load(z, 25);
rxi(1, z.sptfm, z.sptfm, 1);
claim(z.sptfm);
load(*w, 25);
v->rem = z.sptfm;
v->type = 3;
v->form = 4;
rxd(2, w->sptfm, *v);
release(w->sptfm);
claim(v->sptfm);
v->rem = 0;
rxd(2, z.sptfm, *v);
goto L_02fe;
L_02fd:
load(*v, 3);
load(*w, 2);
release(2);
release(3);
n = v->length;
if (n != 0) goto L_02ff;
n = 255;
L_02ff:
perm(6);
cput(n);
v->form = 4;
L_02fe:
claim(v->sptfm);
v->type = 0;
if (r == 25) goto L_0300;
if (r == 0) goto L_0300;
load(*v, r);
v->type = 0;
v->form = 4;
L_0300:
drop(*w);
return;
U_015d:
if (r != 25) goto L_0301;
abort(4998197);
L_0301:
op = v->oper;
v->oper = 0;
if (op == 0) goto L_0302;
w = &v->link;
goto *rop[op];
rop_1:
rop_11:
rop_12:
rop_8:
rop_9:
rop_10:
rop_7:
rop_13:
abort(4998198);
rop_17:
op = 6;
rop_6:
rop_3:
rop_4:
rop_5:
if (w->type >= 7) goto L_0303;
float(*w, 26);
if (w->form != 1) goto L_0304;
if (1 == v->form) goto L_0304;
if (v->type < 7) goto L_0304;
if (op == 3) goto L_0305;
if (op != 5) goto L_0304;
L_0305:
memcpy(z,*v,sizeof struct STACKFM);
memcpy(*v,*w,sizeof struct STACKFM);
memcpy(*w,z,sizeof struct STACKFM);
L_0304:
L_0303:
pickup(*v);
r = v->sptfm;
address(*w, 0);
rxd(op, r, *w);
goto U_0161;
rop_2:
abort(4998199);
L_0302:
if (v->type >= 7) goto L_0306;
float(*v, r);
L_0306:
address(*v, r);
if (v->form != 1) goto L_0307;
if (r == 26) goto L_0308;
if (v->sptfm != r) goto L_0309;
L_0308:
return;
L_0309:
hazard(r);
rr(1, r, v->sptfm);
v->sptfm = r;
claim(r);
return;
L_0307:
if (r != 26) goto L_030a;
r = fpr();
goto L_030b;
L_030a:
if (r == v->sptfm) goto L_030c;
hazard(r);
L_030c:
L_030b:
if (17 > r) goto L_030d;
if (r <= 24) goto L_030e;
L_030d:
abort(4998200);
L_030e:
goto *f[v->form];
rop_16:
if (w->type < 7) goto L_030f;
abort(4998201);
L_030f:
load(*v, 18);
load(*w, 2);
release(18);
release(2);
perm(3);
claim(17);
v->sptfm = 17;
U_0161:
if (v->type > 3) goto L_0310;
v->type = 1;
L_0310:
forgetreg((1 << v->sptfm));
drop(*w);
for (;;) {
L_0311:
goto L_0311;
void cop(int op, struct STACKFM *lh, struct STACKFM *rh)
{
int l;
int r;
// bounds [1 : 17]
/*todo: gcc jump table extension*/ void **s;
goto L_0311;
int p10(int n)
{
int value;
int power;
value = 1;
power = 0;
for (;;) {
L_0312:
if (value < n) goto L_0313;
return(power);
L_0313:
value = (value * 10);
power = (power + 1);
if (power <= 100) goto L_0314;
abort(1129271345);
L_0314:
}
L_0311:
l = lh->disp;
r = rh->disp;
goto *s[op];
s_2:
s_1:
s_7:
abort(1129271346);
s_3:
l = (l + r);
goto U_0155;
s_4:
l = (l - r);
goto U_0155;
s_9:
l = (l | r);
goto U_0155;
s_8:
l = (l & r);
goto U_0155;
s_10:
l = (l ^ r);
goto U_0155;
s_11:
l = (l << r);
goto U_0155;
s_5:
l = (l * r);
goto U_0155;
s_13:
l = (l * r);
goto U_0155;
s_12:
l = (l >> r);
goto U_0155;
s_15:
l = imp_int_exp(l, r);
goto U_0155;
s_6:
if (r != 0) goto L_0315;
warn(1);
r = 1;
L_0315:
l = (l / r);
goto U_0155;
s_14:
if (r != 0) goto L_0316;
warn(1);
r = 1;
L_0316:
l = (l - ((l / r) * r));
goto U_0155;
s_16:
if ((p10(abs(l)) * r) <= 70) goto L_0317;
warn(7);
r = 0;
L_0317:
rvalue = imp_real_exp(l, r);
goto U_0156;
s_17:
if (r != 0) goto L_0318;
warn(1);
r = 1;
L_0318:
rvalue = (l / r);
U_0156:
otype = 2;
l = realconstant(0);
lh->sptfm = 15;
lh->type = 7;
lh->form = 4;
U_0155:
lh->disp = l;
for (;;) {
L_0319:
goto L_0319;
void operate(int oper)
{
struct STACKFM *lh;
struct STACKFM *rh;
struct STACKFM *with;
int key;
int lcon;
int rcon;
int wcon;
int lop;
// bounds [3 : 17]
// do it now: const char {*,2}transitive {NO INIT}
// bounds [3 : 17]
// do it now: const char {*,2}commutative {NO INIT}
// bounds [3 : 17]
// do it now: const short {*,2}nopvalue {NO INIT}
goto L_0319;
void pickup(struct STACKFM *v)
{
if (!(floating(*v))) goto L_031a;
load(*v, 26);
goto L_031b;
L_031a:
load(*v, 25);
L_031b:
L_0319:
stp = (stp - 1);
lcon = 0;
rcon = 0;
wcon = 0;
lh = &stacked[stp].v;
if (!(const(*lh))) goto L_031c;
lcon = 1;
goto L_031d;
L_031c:
if (lh->type == 5) goto L_031e;
if (lh->type == 0) goto L_031e;
if (lh->oper != 0) goto L_031f;
address(*lh, 0);
L_031f:
L_031e:
L_031d:
rh = &stacked[(stp + 1)].v;
if (!(const(*rh))) goto L_0320;
rcon = 1;
if (oper != 4) goto L_0321;
oper = 3;
rh->disp = (-rh->disp);
L_0321:
L_0320:
if (lh->oper == 0) goto L_0322;
lop = lh->oper;
with = &lh->link;
if (!(const(*with))) goto L_0323;
wcon = 1;
L_0323:
if ((wcon & rcon) == 0) goto L_0324;
key = (transitive[oper] | transitive[lop]);
if (key == 0) goto L_0325;
if (key != 1) goto L_0326;
if (oper != lop) goto L_0326;
L_0325:
if (lop != 4) goto L_0327;
with->disp = (-with->disp);
lop = 3;
L_0327:
cop(oper, *rh, *with);
drop(*with);
lh->link = rh;
lh->oper = lop;
goto U_015b;
L_0326:
L_0324:
pickup(*lh);
L_0322:
if (rcon == 0) goto L_0328;
if (lcon != 0) goto L_0329;
if (oper != 3) goto L_032a;
if (lh->type != 1) goto L_032a;
if (lh->form == 1) goto L_0329;
if (lh->form != 5) goto L_032a;
L_0329:
if (lh->form != 1) goto L_032b;
lh->form = 5;
L_032b:
cop(oper, *lh, *rh);
drop(*rh);
return;
L_032a:
L_0328:
if (rh->oper == 0) goto L_032c;
pickup(*rh);
goto L_032d;
L_032c:
if (rcon == 0) goto L_032e;
if (rh->disp != 2) goto L_032e;
if (oper == 5) goto L_032f;
if (oper == 15) goto L_032f;
if (oper != 16) goto L_0330;
L_032f:
if (oper != 5) goto L_0331;
oper = 3;
goto L_0332;
L_0331:
oper = 5;
L_0332:
memcpy(*rh,*lh,sizeof struct STACKFM);
rcon = 0;
claim(rh->sptfm);
L_0330:
L_032e:
L_032d:
if (commutative[oper] == 0) goto L_0333;
if (lcon != 0) goto L_0334;
if (lh->form == 1) goto L_0333;
if (rh->form != 1) goto L_0333;
if (activity[rh->sptfm] < 0) goto L_0333;
L_0334:
rh->link = lh;
stacked[stp].v = rh;
rh->oper = oper;
with = rh;
rh = lh;
lh = with;
rcon = lcon;
goto L_0335;
L_0333:
lh->oper = oper;
lh->link = rh;
L_0335:
U_015b:
if (rcon == 0) goto L_0336;
if (rh->disp != nopvalue[oper]) goto L_0337;
lh->oper = 0;
drop(*rh);
goto L_0338;
L_0337:
if (oper != 5) goto L_0339;
if ((control & 1) != 0) goto L_0339;
key = power(rh->disp);
if (key <= 0) goto L_033a;
lh->oper = 11;
rh->disp = key;
L_033a:
L_0339:
L_0338:
L_0336:
for (;;) {
L_033b:
goto L_033b;
void assign(int assop)
{
// bounds [-1 : 3]
// do it now: const char {*,2}stringmove {NO INIT}
struct STACKFM *lh;
struct STACKFM *rh;
struct STACKFM *x;
struct STACKFM temp;
int n;
int p;
int t;
int op;
int insert;
int form;
int lhdisp;
insert = 0;
if (stp >= 2) goto L_033c;
abort(1095979825);
L_033c:
rh = &stacked[stp].v;
lh = &stacked[(stp - 1)].v;
form = lh->form;
if ((diagnose & 4) == 0) goto L_033d;
monitor(*lh, "ASS LH");
monitor(*rh, "ASS RH");
L_033d:
if (assop >= 0) goto L_033e;
if ((lh->flag & 4) == 0) goto L_033f;
memcpy(temp,*lh,sizeof struct STACKFM);
memcpy(*lh,*rh,sizeof struct STACKFM);
memcpy(*rh,temp,sizeof struct STACKFM);
pdisp = 0;
return;
L_033f:
lh->extra = (lh->extra - 1);
vstack(lh->extra);
lh = &stacked[stp].v;
form = lh->form;
lhdisp = lh->disp;
if (lh->form == 4) goto L_0340;
assop = 0;
L_0340:
if ((lh->flag & 2) != 0) goto L_0341;
pdisp = (lh->disp + lh->length);
if (lh->type != 5) goto L_0342;
if (form != 4) goto L_0342;
pdisp = (pdisp + 1);
L_0342:
lh->disp = (lh->disp + wdisp);
L_0341:
if ((lh->flag & 16) == 0) goto L_0343;
assop = 1;
lh->type = 1;
lh->form = 4;
rh->type = 1;
rh->form = 5;
if (rh->sptfm == 0) goto L_0344;
if (rh->sptfm == 14) goto L_0344;
rh->form = 4;
goto L_0345;
L_0344:
if (rh->sptfm != 14) goto L_0346;
rh->disp = (rh->disp - (5 * 4));
goto L_0345;
L_0346:
p = ((frame + 3) & (\3));
frame = (p + (8 * 4));
t = rh->disp;
rh->disp = p;
rh->sptfm = local;
definereference(t, 2);
rx(23, 16, 15, 0);
rx(25, 9, local, p);
L_0345:
L_0343:
L_033e:
stp = (stp - 2);
if ((rh->flag & 96) == 0) goto L_0347;
pdisp = (lh->disp + (2 * 4));
hazard(1);
address(*lh, (-1));
address(*rh, (-1));
if (rh->header != (-1)) goto L_0348;
rx(1, 1, rh->sptfm, rh->disp);
goto L_0349;
L_0348:
rxi(1, 1, rh->sptfm, rh->disp);
rx(3, 1, 14, rh->header);
rh->disp = rh->header;
rh->sptfm = 14;
L_0349:
if (lh->type != 5) goto L_034a;
if (lh->length != 0) goto L_034a;
rxi(3, 1, 0, (rh->length << 24));
L_034a:
forgetreg((1 << 1));
rx(2, 1, lh->sptfm, lh->disp);
claim(rh->sptfm);
rx(1, 1, rh->sptfm, (rh->disp + 4));
claim(lh->sptfm);
rx(2, 1, lh->sptfm, (lh->disp + 4));
drop(*lh);
drop(*rh);
return;
L_0347:
if (lh->type != 4) goto L_034b;
if (assop == 0) goto L_034c;
abort(1095979826);
L_034c:
if (rh->type != 4) goto L_034d;
amap(*lh);
address(*lh, (-1));
amap(*rh);
address(*rh, (-1));
hazard(1);
rx(1, 1, rh->sptfm, rh->disp);
rx(2, 1, lh->sptfm, lh->disp);
claim(lh->sptfm);
claim(rh->sptfm);
rx(1, 1, rh->sptfm, (rh->disp + 4));
rx(2, 1, lh->sptfm, (lh->disp + 4));
drop(*lh);
drop(*rh);
return;
L_034d:
t = rh->type;
rh->flag = (rh->flag | 8);
n = rh->length;
if (t != 5) goto L_034e;
n = (n + 1);
L_034e:
amaps(*rh);
lrd(*rh, 25);
p = rh->sptfm;
rx(2, p, lh->sptfm, lh->disp);
claim(lh->sptfm);
cload(((n << 4) + genmap[t]), p);
rx(2, p, lh->sptfm, (lh->disp + 4));
drop(*lh);
return;
L_034b:
if (assop != 0) goto L_034f;
amap(*lh);
if (lh->length != 0) goto L_0350;
amaps(*rh);
goto L_0351;
L_0350:
amap(*rh);
L_0351:
L_034f:
if (lh->type != 6) goto L_0352;
n = minrecordsize(*lh, *rh);
if (rh->form == 0) goto L_0353;
lrd(*rh, 2);
op = 27;
goto L_0354;
L_0353:
drop(*rh);
op = 28;
L_0354:
lrd(*lh, 3);
cload((n >> 2), 4);
perm(op);
return;
L_0352:
if (lh->type != 5) goto L_0355;
if ((lh->flag & 2) != 0) goto L_0355;
if (assop <= 0) goto L_0356;
if (rh->format != 1) goto L_0356;
drop(*rh);
lh->type = 3;
sstack(*lh);
drop(*lh);
cstack(0);
assign(assop);
return;
L_0356:
p = lh->length;
if (assop == 2) goto L_0357;
if (!(same(*lh, *rh))) goto L_0357;
if (rh->oper != 0) goto L_0358;
drop(*lh);
drop(*rh);
goto L_0359;
L_0358:
rh->length = p;
release(lh->sptfm);
drop(*lh);
rh->type = 0;
lrd(*rh, 0);
L_0359:
goto L_035a;
L_0357:
if ((control & 32) == 0) goto L_035b;
if (assop == 2) goto L_035b;
if (rh->oper == 0) goto L_035b;
if (same(*lh, *rh)) goto L_035b;
if (same(*lh, rh->link)) goto L_035b;
x = &rh->link;
rh->oper = 0;
load(*lh, 3);
lrd(*rh, 2);
perm(stringmove[3]);
lh->form = 4;
lh->type = 0;
lh->oper = 7;
lh->link = x;
lrd(*lh, 0);
goto L_035a;
L_035b:
rh->flag = (rh->flag & (\1));
if (assop == 2) goto L_035c;
if ((control & 32) != 0) goto L_035d;
if (p < rh->length) goto L_035e;
if ((control & 2) == 0) goto L_035d;
if (checkable(*rh)) goto L_035e;
L_035d:
assop = 3;
L_035e:
L_035c:
if (rh->oper != 0) goto L_035f;
lrd(*lh, 3);
lrd(*rh, 2);
goto L_0360;
L_035f:
lrd(*rh, 2);
lrd(*lh, 3);
L_0360:
perm(stringmove[assop]);
if (assop == 3) goto L_0361;
cput(p);
L_0361:
L_035a:
return;
L_0355:
if ((lh->flag & 2) == 0) goto L_0362;
p = 7;
if (lhdisp >= 4) goto L_0363;
p = 6;
L_0363:
if (lh->type != 5) goto L_0364;
p = 2;
L_0364:
if (rh->oper == 0) goto L_0365;
load(*rh, p);
L_0365:
drop(*lh);
lh = &stacked[stp].v;
rh->oper = p;
rh->link = &lh->link;
lh->link = rh;
address(*lh, (-1));
goto L_0366;
L_0362:
address(*lh, (-1));
if ((control & 23) != 0) goto L_0367;
if (rh->type > 2) goto L_0367;
if (rh->oper == 0) goto L_0368;
if (rh->oper != 3) goto L_0367;
L_0368:
if (!(same(*lh, *rh))) goto L_0367;
if (rh->oper != 0) goto L_0369;
release(rh->sptfm);
drop(*rh);
release(lh->sptfm);
drop(*lh);
return;
L_0369:
x = rh;
rh = &rh->link;
release(x->sptfm);
drop(*x);
load(*rh, 25);
address(*lh, (-1));
rxd(38, rh->sptfm, *lh);
forgetvar(*lh);
release(rh->sptfm);
drop(*rh);
drop(*lh);
return;
L_0367:
t = rh->type;
if (rh->sptfm != 0) goto L_036a;
if (rh->form != 0) goto L_036a;
if (rh->oper != 0) goto L_036a;
if ((-32768) > rh->disp) goto L_036b;
if (rh->disp > 32767) goto L_036b;
if ((rh->disp & (\255)) != 0) goto L_036c;
t = 3;
goto L_036d;
L_036c:
t = 2;
L_036d:
L_036b:
L_036a:
n = assop;
if (lh->type > 3) goto L_036e;
if (lh->type > t) goto L_036f;
L_036e:
assop = 2;
L_036f:
if (lh->form != 1) goto L_0370;
load(*rh, lh->sptfm);
assop = 2;
goto L_0371;
L_0370:
p = cheapreg;
if (lh->type < 7) goto L_0372;
if (floating(*rh)) goto L_0372;
float(*rh, p);
L_0372:
address(*rh, p);
if (rh->form == 1) goto L_0373;
load(*rh, p);
L_0373:
p = rh->sptfm;
if (lh->form == 4) goto L_0374;
address(*lh, (-1));
L_0374:
rxd(2, p, *lh);
if ((control & 128) != 0) goto L_0375;
t = activity[lh->sptfm];
if (t < 0) goto L_0376;
if ((control & 32) == 0) goto L_0377;
L_0376:
forgetvar(*lh);
if (markassigned == 0) goto L_0378;
if (lh->sptfm != local) goto L_0378;
var[lh->varno].flag = (var[lh->varno].flag | 8);
L_0378:
goto L_0379;
L_0377:
forgetall();
L_0379:
lh->flag = (lh->flag | (rh->flag & 8));
if (n == 2) goto L_037a;
associate(*lh, p);
L_037a:
L_0375:
release(p);
L_0371:
drop(*lh);
drop(*rh);
L_0366:
if (assop != 1) goto L_037b;
if ((control & 1) == 0) goto L_037b;
if (lh->type != 2) goto L_037c;
claim(p);
rr(30, p, p);
perm(22);
goto L_037d;
L_037c:
rxi(36, p, 0, (\255));
perm(23);
L_037d:
L_037b:
L_033b:
goto L_037e;
void loadparams(struct STACKFM *v)
{
int reg;
struct STACKFM *next;
if (v != null) goto L_037f;
return;
L_037f:
reg = v->oper;
v->oper = 0;
next = &v->link;
load(*v, reg);
loadparams(*next);
release(reg);
drop(*v);
L_037e:
goto L_0380;
void arrayref(int mode)
{
int flags;
int p;
int type;
int base;
int assbit;
int mult;
int shift;
struct STACKFM *temp;
goto L_0380;
int specialcase()
{
shift = power(mult);
if (shift >= 0) goto L_0381;
if ((flags & 32) != 0) goto L_0381;
if (base != 0) goto L_0382;
L_0381:
L_0382:
L_0380:
goto L_0383;
void uncheckedref()
{
int header;
int length;
int format;
int extra;
header = lhs->header;
length = lhs->length;
format = lhs->format;
extra = 0;
if (rhs->oper == 3) goto L_0384;
if (rhs->oper != 0) goto L_0385;
if (rhs->form == 5) goto L_0384;
if (rhs->form != 0) goto L_0385;
L_0384:
if (rhs->oper != 3) goto L_0386;
if (rhs->link.form == 0) goto L_0387;
if (rhs->link.form != 5) goto L_0388;
L_0387:
extra = rhs->link.disp;
if (rhs->link.form != 5) goto L_0389;
rhs->link.form = 1;
rhs->link.disp = 0;
goto L_038a;
L_0389:
rhs->oper = 0;
drop(rhs->link);
L_038a:
L_0388:
goto L_038b;
L_0386:
extra = rhs->disp;
rhs->disp = 0;
if (rhs->form != 5) goto L_038c;
rhs->form = 1;
L_038c:
L_038b:
extra = (extra * mult);
L_0385:
if (shift < 0) goto L_038d;
cstack(shift);
operate(11);
goto L_038e;
L_038d:
cstack(mult);
operate(13);
L_038e:
lhs->type = 1;
if (lhs->header < 0) goto L_038f;
amap(*lhs);
sset(14, lhs->header, 4, 0);
operate(3);
L_038f:
operate(3);
setlhs();
if (extra == 0) goto L_0390;
cstack(extra);
operate(3);
setlhs();
L_0390:
vmap(*lhs);
if ((flags & 128) == 0) goto L_0391;
vmap(*lhs);
L_0391:
lhs->type = type;
lhs->format = format;
lhs->length = length;
lhs->xform = (lhs->form | assbit);
L_0383:
if (mode == 0) goto L_0392;
setboth();
stp = (stp - 1);
if (rhs->oper == 0) goto L_0393;
load(*rhs, 25);
L_0393:
rhs->link = &lhs->link;
lhs->link = rhs;
lhs->oper = (lhs->oper + 1);
return;
L_0392:
setboth();
if ((lhs->oper + 1) == lhs->v) goto L_0394;
abort(1095910961);
L_0394:
flags = lhs->flag;
lhs->flag = (lhs->flag & (\(128 + 96)));
base = lhs->sptfm;
type = lhs->type;
assbit = (lhs->xform & (8 << 8));
if ((control & 4) != 0) goto L_0395;
if (lhs->oper == 0) goto L_0396;
L_0395:
if (base != 0) goto L_0397;
L_0396:
mult = lhs->length;
if (lhs->type != 5) goto L_0398;
mult = (mult + 1);
L_0398:
if ((flags & 128) == 0) goto L_0399;
mult = 4;
L_0399:
if (!(specialcase())) goto L_039a;
uncheckedref();
return;
L_039a:
L_0397:
stp = (stp - 1);
if (lhs->oper != 0) goto L_039b;
load(*rhs, 2);
drop(*rhs);
p = 13;
goto L_039c;
L_039b:
if (lhs->oper != 1) goto L_039d;
load(lhs->link, 2);
drop(lhs->link);
load(*rhs, 3);
drop(*rhs);
p = 14;
if ((control & 4) != 0) goto L_039e;
p = 16;
L_039e:
goto L_039c;
L_039d:
if (rhs->oper == 0) goto L_039f;
load(*rhs, 25);
L_039f:
rhs->link = &lhs->link;
for (p = pdisp; p += 4; p != (pdisp + ((lhs->oper - 1) * 4))) {
temp = &rhs->link;
lrd(*rhs, 25);
rx(2, rhs->sptfm, 8, p);
rhs = temp;
}
L_03a3:
load(*rhs, 2);
rhs->form = 5;
rhs->sptfm = 8;
rhs->disp = pdisp;
load(*rhs, 3);
drop(*rhs);
p = 15;
L_039c:
lhs->oper = 0;
amap(*lhs);
if (lhs->header < 0) goto L_03a4;
sset(14, lhs->header, 5, 0);
load(*rhs, 4);
drop(*rhs);
stp = (stp - 1);
goto L_03a5;
L_03a4:
load(*lhs, 4);
L_03a5:
release(2);
release(4);
if (p == 13) goto L_03a6;
release(3);
L_03a6:
perm(p);
claim(2);
if (lhs->header < 0) goto L_03a7;
sset(lhs->sptfm, lhs->disp, lhs->form, lhs->extra);
lhs->sptfm = 2;
lhs->disp = 0;
lhs->form = 1;
lhs->type = 1;
operate(3);
goto L_03a8;
L_03a7:
lhs->sptfm = 2;
lhs->disp = 0;
L_03a8:
vmap(*lhs);
lhs->type = type;
lhs->xform = (assbit | 4);
if ((flags & 128) == 0) goto L_03a9;
lhs->form = 6;
L_03a9:
for (;;) {
L_03aa:
goto L_03aa;
void testzero(struct STACKFM *v)
{
struct STACKFM *w;
int cr;
cr = 25;
if (!(floating(*v))) goto L_03ab;
cr = 26;
L_03ab:
if (v->oper != 8) goto L_03ac;
if (sym != 63) goto L_03ac;
if (!(const(v->link))) goto L_03ac;
w = &v->link;
v->oper = 0;
load(*v, cr);
rxd(36, v->sptfm, *w);
drop(*w);
release(v->sptfm);
goto L_03ad;
L_03ac:
load(*v, cr);
if (ca != ccca) goto L_03ae;
if (ccreg == v->sptfm) goto L_03af;
L_03ae:
rr(1, v->sptfm, v->sptfm);
goto L_03b0;
L_03af:
release(v->sptfm);
L_03b0:
L_03ad:
L_03aa:
goto L_03b1;
void comparerecords(struct STACKFM *l, struct STACKFM *r, int n)
{
amap(*l);
load(*l, 2);
amap(*r);
load(*r, 3);
cload(n, 4);
setboth();
release(2);
release(3);
perm(34);
L_03b1:
goto L_03b2;
void comparereals(struct STACKFM *l, struct STACKFM *r)
{
load(*l, 26);
address(*r, 0);
if (floating(*r)) goto L_03b3;
float(*r, 26);
L_03b3:
rxd(7, l->sptfm, *r);
release(l->sptfm);
L_03b2:
goto L_03b4;
void comparestrings(struct STACKFM *l, struct STACKFM *r)
{
struct STACKFM *temp;
if (l->sptfm != 15) goto L_03b5;
if (l->disp != nullstring) goto L_03b5;
temp = r;
r = l;
l = temp;
invert = (invert ^ 16);
L_03b5:
if (r->sptfm != 15) goto L_03b6;
if (r->disp != nullstring) goto L_03b6;
if (l->oper == 0) goto L_03b7;
load(*l, 25);
L_03b7:
l->type = 3;
testzero(*l);
goto L_03b8;
L_03b6:
if (r->oper == 0) goto L_03b9;
load(*r, 3);
L_03b9:
load(*l, 2);
load(*r, 3);
release(2);
release(3);
perm(9);
L_03b8:
l->type = 5;
l->form = 4;
pdisp = 0;
L_03b4:
goto L_03ba;
void compare(struct STACKFM *l, struct STACKFM *r, int next)
{
swopped = 0;
if (l->type == 0) goto L_03bb;
if (l->type != 5) goto L_03bc;
L_03bb:
comparestrings(*l, *r);
return;
L_03bc:
if (!(zero(*r))) goto L_03bd;
testzero(*l);
return;
L_03bd:
if (!(zero(*l))) goto L_03be;
testzero(*r);
invert = (invert ^ 16);
return;
L_03be:
if (floating(*l)) goto L_03bf;
if (!(floating(*r))) goto L_03c0;
L_03bf:
comparereals(*l, *r);
return;
L_03c0:
if (l->type != 6) goto L_03c1;
comparerecords(*l, *r, minrecordsize(*l, *r));
return;
L_03c1:
address(*l, 0);
load(*l, 25);
address(*r, 0);
if (61 == next) goto L_03c2;
if (next == 35) goto L_03c2;
rxd(7, l->sptfm, *r);
goto L_03c3;
L_03c2:
rxd(28, l->sptfm, *r);
L_03c3:
release(l->sptfm);
L_03ba:
goto L_03c4;
void resolve(int flag)
{
struct STACKFM *s;
struct STACKFM *a;
struct STACKFM *b;
struct STACKFM *c;
int p;
int q;
if ((flag & 1) != 0) goto L_03c5;
cstack(0);
L_03c5:
poplhs();
c = lhs;
poplhs();
b = lhs;
if ((flag & 2) != 0) goto L_03c6;
cstack(0);
L_03c6:
poplhs();
a = lhs;
poplhs();
s = lhs;
load(*s, 4);
load(*a, 3);
load(*b, 2);
load(*c, 5);
p = a->length;
q = c->length;
release(4);
drop(*s);
release(3);
drop(*a);
release(2);
drop(*b);
release(5);
drop(*c);
perm(7);
cput(((p << 8) + (q & 255)));
if ((flag & 4) != 0) goto L_03c7;
perm(8);
L_03c7:
L_03c4:
goto L_03c8;
void header(struct VARFM *v)
{
if (frame >= 44) goto L_03c9;
frame = 44;
L_03c9:
definetag((v->disp & 4095));
rx(25, ((6 + 2) - minparm), 8, ((2 - minparm) * 4));
if (potype < 3) goto L_03ca;
externallink(7, 0, 0);
rx(2, 16, 8, ((16 - 6) * 4));
if ((control & 12) == 0) goto L_03cb;
if (unassignedrtn != 0) goto L_03cb;
unassignedrtn = 1;
selectoutput(1);
printsymbol(3);
put(1);
put(0);
selectoutput(2);
L_03cb:
L_03ca:
rr(1, local, 8);
if (v->header == 0) goto L_03cc;
if (v != &begin) goto L_03cd;
abort(1212437041);
L_03cd:
sset(local, v->header, 4, 0);
rhs->type = 5;
sset(2, 0, 1, 0);
claim(2);
assign(3);
if ((control & 32) == 0) goto L_03ce;
v->header = 0;
goto L_03cf;
L_03ce:
cput(2066);
L_03cf:
L_03cc:
frame = ((frame + 3) & (\3));
if ((control & 32) != 0) goto L_03d0;
perm(26);
cput(frame);
cput(0);
goto L_03d1;
L_03d0:
rxi(3, 8, 0, 44);
L_03d1:
setframepatch();
if (level == 5) goto L_03d2;
if ((control & 2) == 0) goto L_03d2;
rx(1, 13, 15, 12);
activity[13] = (-1);
L_03d2:
if (v->header == 0) goto L_03d3;
cput(2081);
perm(4);
cput(ap->length);
v->header = 0;
L_03d3:
if ((control & 64) == 0) goto L_03d4;
if (v != &begin) goto L_03d5;
if (potype < 3) goto L_03d5;
strncpy(externalid,traceroutine,19+1);
externallink(6, 0, ga);
perm(50);
cput(0);
L_03d5:
traceflag = (control & 64);
L_03d4:
memset(event,0,sizeof struct EVFM);
L_03c8:
goto L_03d6;
void return()
{
if (uncondjump != ca) goto L_03d7;
return;
L_03d7:
if (returnlabel == 0) goto L_03d8;
jumpto(returnlabel, 12, 0);
goto L_03d9;
L_03d8:
returnlabel = 28673;
definelabel(returnlabel);
rx(24, 8, local, ((8 - 6) * 4));
rr(21, 1, 16);
L_03d9:
uncondjump = ca;
closed = 0;
L_03d6:
goto L_03da;
void compiletostring(struct STACKFM *v)
{
if (next != 46) goto L_03db;
if ((control & (1 | 2)) != 0) goto L_03db;
v->flag = (v->flag | 1);
return;
L_03db:
if (!(const(*v))) goto L_03dc;
currentstring[0] = 1;
currentstring[1] = (v->disp & 255);
claimliteral(2, 0);
otype = 2;
dumpstring(0);
v->sptfm = 15;
v->disp = litmax;
goto L_03dd;
L_03dc:
load(*v, 25);
frame = ((frame + 1) & (\1));
rr(31, 1, v->sptfm);
rxi(3, 1, 0, (1 << 8));
rx(32, 1, local, frame);
v->sptfm = local;
v->disp = frame;
frame = (frame + 2);
L_03dd:
v->type = 5;
v->xform = (4 | (8 << 8));
v->length = 1;
L_03da:
goto L_03de;
void call(struct STACKFM *v)
{
// bounds [1 : 23]
/*todo: gcc jump table extension*/ void **b;
// bounds [9 : 17]
// do it now: const char {*,2}newtype {NO INIT}
// bounds [1 : 7]
// do it now: const char {*,2}newsize {NO INIT}
int t;
int l;
int p;
if ((v->flag & 4) == 0) goto L_03df;
l = 0;
t = v->header;
sym = 0;
if (t != 2) goto L_03e0;
v->flag = (v->flag & (\4));
v->header = 0;
goto L_03e1;
L_03e0:
drop(*v);
L_03e1:
setlhs();
goto *b[t];
b_1:
operate(14);
return;
b_2:
call(*v);
sset(2, 0, 1, 0);
if (lhs->type == 6) goto L_03e2;
if (lhs->type != 4) goto L_03e3;
L_03e2:
warn(4);
cload(5, 1);
cload(5, 2);
perm(20);
setlhs();
lhs->type = 3;
L_03e3:
claim(rhs->sptfm);
if (lhs->type != 5) goto L_03e4;
compiletostring(*rhs);
L_03e4:
assign(1);
return;
b_3:
float(*lhs, 26);
return;
b_4:
compiletostring(*lhs);
return;
b_8:
t = lhs->type;
amap(*lhs);
if (t != 5) goto L_03e5;
if (lhs->form == 5) goto L_03e5;
if (lhs->form == 8) goto L_03e5;
load(*lhs, 25);
lhs->form = 4;
forgetreg((1 << lhs->sptfm));
rxd(23, lhs->sptfm, *lhs);
claim(lhs->sptfm);
lhs->form = 1;
L_03e5:
return;
b_16:
cstack(0);
b_17:
setboth();
amap(*lhs);
if ((control & 4) == 0) goto L_03e6;
if (!(const(*rhs))) goto L_03e7;
if ((t - 16) > rhs->disp) goto L_03e7;
if (rhs->disp > lhs->length) goto L_03e7;
L_03e6:
operate(3);
setlhs();
goto L_03e8;
L_03e7:
load(*lhs, 2);
load(*rhs, 3);
drop(*rhs);
stp = (stp - 1);
release(2);
release(3);
perm(31);
cput((lhs->length & 255));
claim(2);
setlhs();
lhs->sptfm = 2;
lhs->disp = 0;
lhs->xform = 1;
L_03e8:
goto U_015c;
b_12:
b_9:
b_10:
b_11:
b_13:
b_14:
b_15:
U_015c:
vmap(*lhs);
lhs->type = newtype[t];
lhs->length = newsize[lhs->type];
return;
b_19:
load(*lhs, 26);
p = gpr();
hazard(p);
rr(27, p, lhs->sptfm);
claim(p);
lhs->sptfm = p;
lhs->type = 1;
lhs->xform = 1;
return;
b_18:
p = 33;
t = 1;
l = 2;
goto U_015d;
b_23:
p = 10;
t = 7;
l = 18;
U_015d:
load(*lhs, 18);
release(18);
perm(p);
claim(l);
setlhs();
lhs->sptfm = l;
lhs->xform = 1;
lhs->type = t;
return;
b_5:
load(*lhs, 4);
drop(*lhs);
stp = (stp - 1);
setboth();
stp = (stp - 2);
load(*lhs, 2);
load(*rhs, 3);
drop(*lhs);
drop(*rhs);
release(2);
release(3);
release(4);
perm(12);
claim(2);
sset(2, 0, 4, 0);
rhs->type = 5;
return;
b_21:
b_22:
if (lhs->type == 4) goto L_03e9;
if (t != 21) goto L_03ea;
p = genmap[lhs->type];
goto L_03eb;
L_03ea:
p = lhs->length;
if (lhs->type != 5) goto L_03ec;
p = (p + 1);
L_03ec:
L_03eb:
release(lhs->sptfm);
lhs->type = 1;
lhs->form = 0;
lhs->sptfm = 0;
lhs->disp = p;
goto L_03ed;
L_03e9:
lhs->disp = (lhs->disp + 4);
lhs->xform = ((8 << 8) | 4);
lhs->type = 1;
if (t != 21) goto L_03ee;
cstack(15);
operate(8);
goto L_03ef;
L_03ee:
cstack(4);
operate(12);
L_03ef:
L_03ed:
return;
b_6:
perm(32);
claim(2);
sset(2, 0, 1, 0);
return;
b_7:
for (p = 17; p += 1; p != 24) {
hazard(p);
}
L_03f3:
setboth();
stp = (stp - 2);
if (const(*lhs)) goto L_03f4;
load(*lhs, 25);
L_03f4:
address(*rhs, (-1));
rx(21, 17, rhs->sptfm, rhs->disp);
claim(rhs->sptfm);
rx(33, 1, lhs->sptfm, lhs->disp);
rx(22, 17, rhs->sptfm, rhs->disp);
drop(*lhs);
drop(*rhs);
forgetreg((-1));
return;
b_20:
load(*lhs, 5);
release(5);
drop(*lhs);
stp = (stp - 1);
perm(49);
return;
L_03df:
wdisp = ((wdisp + 3) & (\3));
if ((v->flag & 8) != 0) goto L_03f5;
hazardall();
L_03f5:
if (v->sptfm == 0) goto L_03f6;
if (v->sptfm == 14) goto L_03f7;
t = newtag();
definereference(t, 2);
rx(23, 16, 15, 0);
L_03f7:
rx(25, 6, 8, wdisp);
if (wdisp == 0) goto L_03f8;
rxi(3, 8, 0, wdisp);
L_03f8:
if (v->sptfm != 14) goto L_03f9;
rx(24, 14, 14, v->disp);
rr(22, 16, 16);
goto L_03fa;
L_03f9:
quickload(3, 4, v->sptfm, v->disp);
forgetreg((1 << 3));
rx(24, 9, 3, 0);
rx(22, 16, 16, 4);
definetag(t);
L_03fa:
goto L_03fb;
L_03f6:
if (wdisp == 0) goto L_03fc;
rxi(3, 8, 0, wdisp);
L_03fc:
definereference((v->disp & 4095), 2);
rx(22, 16, 15, 0);
if (wdisp == 0) goto L_03fd;
rxi(4, 8, 0, wdisp);
L_03fd:
if ((v->flag & 8) == 0) goto L_03fe;
uncondjump = ca;
L_03fe:
L_03fb:
wdisp = v->header;
pdisp = v->rt;
if (v->type != 0) goto L_03ff;
drop(*v);
L_03ff:
L_03de:
goto L_0400;
void compilerop(int n)
{
struct STACKFM *p;
p = &*descriptor();
stp = (stp - 1);
p->flag = 4;
p->header = n;
if (0 >= n) goto L_0401;
if (n <= 23) goto L_0402;
L_0401:
abort(1129140048);
L_0402:
call(*p);
L_0400:
goto L_0403;
void compilefor()
{
struct STACKFM *cv;
struct STACKFM *iv;
struct STACKFM *inc;
struct STACKFM *fv;
int lab;
int safe;
int n;
int reg;
int shadow;
goto L_0403;
void stab(struct STACKFM *v, int type)
{
int t;
int r;
if (!(const(*v))) goto L_0404;
return;
L_0404:
load(*v, 25);
r = v->sptfm;
t = temp();
v->sptfm = local;
v->disp = t;
v->type = type;
v->xform = ((8 << 8) | 4);
rx(2, r, local, t);
release(r);
if ((control & 128) != 0) goto L_0405;
associate(*v, r);
L_0405:
L_0403:
goto L_0406;
void set(struct STACKFM *v, int reg)
{
struct STACKFM *r;
sstack(*v);
r = &stacked[stp].v;
lrd(*r, reg);
stp = (stp - 1);
L_0406:
cv = &stacked[(stp - 3)].v;
inc = &stacked[(stp - 2)].v;
fv = &stacked[(stp - 1)].v;
lab = tag();
if (forstp != 30) goto L_0407;
abort(1179603505);
L_0407:
forstp = (forstp + 1);
for = &forstk[forstp];
n = nexttemp;
shadow = (-1);
if ((control & 4) == 0) goto L_0408;
shadow = temp();
L_0408:
stab(*fv, 1);
stab(*inc, 1);
for->tempbase = tempbase;
if (n == nexttemp) goto L_0409;
tempbase = newtemp;
L_0409:
safe = 0;
sstack(*inc);
operate(4);
iv = &stacked[stp].v;
if (cv->form != 4) goto L_040a;
if (activity[cv->sptfm] < 0) goto L_040b;
L_040a:
n = cv->type;
amap(*cv);
stab(*cv, n);
cv->form = 6;
L_040b:
stp = (stp - 4);
if (!(const(*fv))) goto L_040c;
if (!(const(*iv))) goto L_040c;
if (!(const(*inc))) goto L_040c;
if (inc->disp == 0) goto L_040d;
n = (fv->disp - iv->disp);
if ((n ^ inc->disp) < 0) goto L_040e;
if (((n / inc->disp) * inc->disp) != n) goto L_040e;
safe = 1;
L_040e:
L_040d:
if (safe != 0) goto L_040f;
warn(2);
goto L_0410;
L_040f:
safe = (fv->disp - iv->disp);
L_0410:
L_040c:
reg = iv->sptfm;
if (reg > 3) goto L_0411;
reg = gpr();
goto L_0412;
L_0411:
reg = 25;
L_0412:
load(*iv, reg);
reg = iv->sptfm;
if (safe != 0) goto L_0413;
if ((control & 4) == 0) goto L_0413;
set(*iv, 1);
claim(reg);
set(*fv, 2);
set(*inc, 3);
perm(24);
L_0413:
if (safe != 0) goto L_0414;
sstack(*cv);
sstack(*iv);
assign(1);
claim(reg);
for->initial = (8000 + forstp);
jumpto(for->initial, 12, 1);
L_0414:
definelabel(lab);
traceflag = (control & 64);
sstack(*cv);
sstack(*iv);
sstack(*inc);
operate(3);
drop(*iv);
drop(*inc);
setlhs();
load(*lhs, reg);
assign(1);
if (shadow < 0) goto L_0415;
rx(2, reg, local, shadow);
L_0415:
for->lab = lab;
for->reg = reg;
for->shadow = shadow;
for->cvbase = cv->sptfm;
for->cvdisp = cv->disp;
for->cvtype = cv->type;
for->cvform = cv->xform;
for->fvbase = fv->sptfm;
for->fvdisp = fv->disp;
drop(*cv);
drop(*fv);
for (;;) {
L_0416:
for (;;) {
L_0417:
sym = next;
readsymbol(next);
goto *c[sym];
c_108:
languagemask = tag();
goto L_0418;
c_79:
if (stp == 0) goto L_0419;
abort(1398033215);
L_0419:
if (&using.link == null) goto L_041a;
abort(1431522887);
L_041a:
if (claimed == 0) goto L_041b;
abort(1129073988);
L_041b:
if (ca >= 0) goto L_041c;
abort(1279874111);
L_041c:
wdisp = 0;
pdisp = 0;
nexttemp = tempbase;
currentline = tag();
if ((control & 64) == 0) goto L_041d;
if (next == 58) goto L_041e;
if (next != 76) goto L_041f;
L_041e:
traceflag = 1;
goto L_0420;
L_041f:
if (traceflag == 0) goto L_0421;
dumptrace();
L_0421:
L_0420:
L_041d:
goto L_0418;
c_36:
definevar();
goto L_0418;
c_98:
popdrop();
vub = lhs->disp;
popdrop();
vlb = lhs->disp;
goto L_0418;
goto L_0416;
void adump()
{
// bounds [1 : 8]
/*todo: gcc jump table extension*/ void **c;
// bounds [1 : 8]
/*todo: gcc jump table extension*/ void **g;
// bounds [1 : 8]
// do it now: const int {*,2}low {NO INIT}
// bounds [1 : 8]
// do it now: const int {*,2}high {NO INIT}
int j;
if (high[owntype] == 0) goto L_0422;
if ((control & 1) == 0) goto L_0422;
if (low[owntype] > ownval) goto L_0423;
if (ownval <= high[owntype]) goto L_0424;
L_0423:
warn(8);
L_0424:
L_0422:
if (otype == 2) goto L_0425;
goto *g[owntype];
L_0425:
if (5 == owntype) goto L_0426;
if (owntype >= 7) goto L_0426;
selectliteralarea();
L_0426:
goto *c[owntype];
g_1:
gword(ownval);
return;
c_1:
cword(ownval);
goto U_015d;
c_7:
c_8:
g_7:
g_8:
j = realconstant(1);
return;
g_3:
gbyte(ownval);
return;
c_3:
litbyte(ownval);
goto U_015d;
g_2:
gput(ownval);
return;
c_2:
cput(ownval);
goto U_015d;
c_5:
g_5:
dumpstring(datasize);
return;
g_6:
for (j = 1; j += 1; j != (datasize >> 1)) {
gput(0);
}
L_042a:
return;
c_6:
abort(1094995280);
U_015d:
selectcodearea();
L_0416:
c_65:
aparm = tag();
if (stp == 0) goto L_042b;
decvar->flag = (decvar->flag | 8);
popdrop();
if (owntype < 7) goto L_042c;
if (lhs->type >= 7) goto L_042d;
rvalue = lhs->disp;
L_042d:
ownval = *integer(addr(rvalue));
mantissa = *integer((addr(rvalue) + 4));
goto L_042e;
L_042c:
ownval = lhs->disp;
L_042e:
goto L_042f;
L_042b:
if (owntype != 3) goto L_0430;
ownval = 128;
goto L_0431;
L_0430:
if (owntype != 2) goto L_0432;
ownval = -32640;
goto L_0431;
L_0432:
if (owntype == 5) goto L_0433;
ownval = -2139062144;
mantissa = -2139062144;
goto L_0431;
L_0433:
*cslen = 128;
currentstring[1] = 128;
L_0431:
L_042f:
if (ownform == 11) goto L_0434;
if (ownform != 13) goto L_0435;
L_0434:
for (j = 1; j += 1; j != aparm) {
adump();
}
L_0439:
goto L_043a;
L_0435:
if (otype != 0) goto L_043b;
decvar->flag = (decvar->flag & (\8));
decvar->disp = ownval;
decvar->base = 0;
if (decvar->form != 4) goto L_043c;
decvar->form = 0;
goto L_043d;
L_043c:
if (decvar->form != 6) goto L_043e;
setdiag(0, ownval);
L_043e:
decvar->form = (decvar->form + (4 - 6));
L_043d:
goto L_043f;
L_043b:
decvar->base = 14;
decvar->disp = ga;
if (otype < 3) goto L_0440;
decvar->flag = (decvar->flag & (\8));
externallink(5, datasize, ga);
goto L_0441;
L_0440:
if (otype != 2) goto L_0442;
if (decvar->type != 5) goto L_0443;
claimliteral((*cslen + 1), 1);
j = litmax;
dumpstring(0);
goto L_0444;
L_0443:
if (decvar->type < 7) goto L_0445;
j = realconstant(0);
goto L_0444;
L_0445:
abort(1095577649);
L_0444:
decvar->base = 15;
decvar->disp = j;
goto L_0418;
L_0442:
L_0441:
adump();
L_043f:
L_043a:
goto L_0418;
c_39:
getstring();
goto L_0418;
c_71:
getstring();
strncpy(alias,"",19+1);
for (j = 1; j += 1; j != *cslen) {
strncpy(alias,alias,19+1);
}
L_0449:
popdrop();
goto L_0418;
c_78:
cstack(((tag() << 16) | tag()));
goto L_0418;
c_68:
getd();
if (rvalue != 0) goto L_044a;
cstack(0);
goto L_0418;
L_044a:
if (next != 65) goto L_044b;
goto L_0418;
L_044b:
otype = 2;
j = realconstant(0);
sset(15, j, 4, 0);
rhs->type = 7;
goto L_0418;
c_110:
j = tag();
setlhs();
vstack((var[lhs->format].extra - j));
setboth();
stp = (stp - 1);
if (rhs->form == 15) goto L_044c;
if (lhs->form == 4) goto L_044d;
if (lhs->form != 7) goto L_044e;
L_044d:
rhs->disp = (lhs->disp + rhs->disp);
lhs->xform = ((lhs->form - 4) + rhs->xform);
goto L_044f;
L_044e:
if (lhs->form != 9) goto L_0450;
lhs->form = 7;
lhs->type = 1;
load(*lhs, 25);
lhs->xform = rhs->xform;
goto L_0451;
L_0450:
if (lhs->form > 1) goto L_0452;
lhs->xform = rhs->xform;
goto L_0453;
L_0452:
lhs->extra = lhs->disp;
lhs->xform = (rhs->xform + 3);
L_0453:
L_0451:
L_044f:
lhs->disp = rhs->disp;
lhs->type = rhs->type;
lhs->rt = rhs->rt;
lhs->header = rhs->header;
L_044c:
lhs->length = rhs->length;
lhs->format = rhs->format;
lhs->v = rhs->v;
drop(*rhs);
goto L_0418;
c_64:
vstack(tag());
if ((lhs->flag & 16) == 0) goto L_0454;
if (next == 112) goto L_0454;
if ((lhs->flag & 4) != 0) goto L_0454;
lhs->rt = pdisp;
lhs->header = wdisp;
wdisp = ((pdisp + 3) & (\3));
pdisp = 0;
L_0454:
goto L_0418;
c_69:
poplhs();
x = lhs;
loadparams(x->link);
call(*x);
if (x->type == 0) goto L_0455;
if (sym == 0) goto L_0455;
sstack(*x);
drop(*x);
setlhs();
if (lhs->type < 7) goto L_0456;
opr = 17;
goto L_0457;
L_0456:
opr = 2;
L_0457:
lhs->sptfm = opr;
lhs->disp = 0;
claim(opr);
if (lhs->form != 1) goto L_0458;
if (lhs->type == 5) goto L_0459;
if (lhs->type != 6) goto L_0458;
L_0459:
lhs->sptfm = 2;
lhs->form = 4;
if (next == 83) goto L_045a;
if (next == 112) goto L_045a;
if (next == 63) goto L_045a;
if (lhs->type != 5) goto L_045b;
n = 256;
lhs->length = 255;
goto L_045c;
L_045b:
n = var[lhs->format].length;
L_045c:
if (pdisp != 0) goto L_045d;
pdisp = 44;
L_045d:
lhs->sptfm = 8;
lhs->disp = pdisp;
sstack(*lhs);
sset(2, 0, 4, 0);
if (lhs->type != 5) goto L_045e;
rhs->type = 5;
goto L_045f;
L_045e:
rhs->type = 6;
rhs->format = lhs->format;
L_045f:
assign(1);
pdisp = (pdisp + n);
if (lhs->type != 5) goto L_0460;
lhs->type = 0;
L_0460:
L_045a:
L_0458:
L_0455:
goto L_0418;
c_77:
c_86:
setlhs();
opr = 2;
if (sym != 86) goto L_0461;
if (gvar->type < 7) goto L_0462;
opr = 17;
goto L_0463;
L_0462:
if (gvar->type != 6) goto L_0464;
if (!(zero(*lhs))) goto L_0464;
lhs->type = 6;
lhs->form = 4;
lhs->sptfm = 8;
lhs->disp = 0;
lhs->format = gvar->format;
sstack(*lhs);
cstack(0);
assign(1);
setlhs();
L_0464:
L_0463:
goto L_0465;
L_0461:
amaps(*lhs);
L_0465:
lrd(*lhs, opr);
stp = (stp - 1);
if (sym != 86) goto L_0466;
if (gvar->type != 5) goto L_0467;
if (gvar->length <= 0) goto L_0467;
cload(gvar->length, 1);
perm(11);
goto L_0468;
L_0467:
if ((control & 1) == 0) goto L_0469;
if (gvar->type != 2) goto L_046a;
claim(opr);
rr(30, opr, opr);
perm(22);
goto L_046b;
L_046a:
if (gvar->type != 3) goto L_046c;
rxi(36, opr, 0, (\255));
perm(23);
L_046c:
L_046b:
L_0469:
L_0468:
L_0466:
c_82:
return();
goto L_0418;
c_75:
k = 0;
goto U_0158;
c_84:
k = (-1);
U_0158:
cload(k, 2);
return();
goto L_0418;
c_97:
arrayref(0);
goto L_0418;
c_105:
arrayref(1);
goto L_0418;
c_46:
operate(7);
goto L_0418;
c_43:
operate(3);
goto L_0418;
c_92:
k = (-1);
goto U_0159;
c_85:
k = 0;
U_0159:
poplhs();
cstack(k);
sstack(*lhs);
drop(*lhs);
c_45:
operate(4);
goto L_0418;
c_33:
operate(9);
goto L_0418;
c_37:
operate(10);
goto L_0418;
c_38:
operate(8);
goto L_0418;
c_91:
operate(11);
goto L_0418;
c_93:
operate(12);
goto L_0418;
c_42:
operate(5);
goto L_0418;
c_47:
operate(6);
goto L_0418;
c_81:
operate(17);
goto L_0418;
c_88:
operate(15);
goto L_0418;
c_120:
operate(16);
goto L_0418;
c_118:
setlhs();
if (!(floating(*lhs))) goto L_046d;
load(*lhs, 26);
opr = fpr();
goto L_046e;
L_046d:
load(*lhs, 25);
opr = gpr();
L_046e:
poplhs();
k = lhs->sptfm;
load(*lhs, opr);
n = newtag();
jumpto(n, 5, -1);
cstack(0);
sstack(*lhs);
drop(*lhs);
operate(4);
setlhs();
load(*lhs, k);
definetag(n);
goto L_0418;
c_106:
assign(2);
goto L_0418;
c_83:
assign(1);
goto L_0418;
c_90:
assign(0);
goto L_0418;
c_112:
assign((-1));
goto L_0418;
c_117:
c_113:
if (sym != 117) goto L_046f;
k = 3;
goto L_0470;
L_046f:
k = 4;
L_0470:
setboth();
t = lhs->type;
j = lhs->length;
if (t != 5) goto L_0471;
j = (j + 1);
L_0471:
amap(*lhs);
if (j != 0) goto L_0472;
abort(1095577653);
L_0472:
if (j != 2) goto L_0473;
cstack(1);
j = 11;
goto L_0474;
L_0473:
if (j != 4) goto L_0475;
cstack(2);
j = 11;
goto L_0474;
L_0475:
cstack(j);
j = 5;
L_0474:
operate(j);
operate(k);
setlhs();
vmap(*lhs);
lhs->type = t;
goto L_0418;
c_61:
c_107:
opr = 0;
goto U_015a;
c_35:
c_116:
opr = 1;
goto U_015a;
c_60:
opr = 2;
goto U_015a;
c_62:
opr = 3;
goto U_015a;
c_40:
opr = 4;
goto U_015a;
c_41:
opr = 5;
goto U_015a;
U_015a:
val = tag();
jumpto(val, (opr + invert), 1);
invert = 0;
goto L_0418;
c_67:
setboth();
t = lhs->type;
amap(*lhs);
amap(*rhs);
if (t != 5) goto L_0476;
if (lhs->form == 4) goto L_0477;
if (lhs->form == 7) goto L_0477;
if (rhs->form == 4) goto L_0477;
if (rhs->form != 7) goto L_0476;
L_0477:
operate(10);
cstack(8);
operate(11);
cstack(0);
L_0476:
c_63:
setboth();
compare(*lhs, *rhs, next);
stp = (stp - 2);
drop(*lhs);
drop(*rhs);
goto L_0418;
c_34:
setboth();
invert = 16;
compare(*rhs, *lhs, next);
stp = (stp - 1);
memcpy(*lhs,*rhs,sizeof struct STACKFM);
drop(*rhs);
claim(lhs->sptfm);
goto L_0418;
c_114:
resolve(tag());
goto L_0418;
c_95:
uncondjump = 0;
markassigned = 0;
forgetall();
v = &var[tag()];
popdrop();
j = (lhs->disp - v->extra);
if (0 > j) goto L_0478;
if (j < v->length) goto L_0479;
L_0478:
abort(1095577904);
L_0479:
definetag(((v->format + j) | 32768));
goto L_0418;
c_87:
v = &var[tag()];
if ((control & 32) != 0) goto L_047a;
poplhs();
lrd(*lhs, 2);
rxi(1, 3, 15, v->disp);
perm(19);
goto L_047b;
L_047a:
cstack(1);
operate(11);
poplhs();
k = ((v->disp + (2 * 2)) - (v->extra * 2));
if (!(const(*lhs))) goto L_047c;
k = (k + lhs->disp);
j = 0;
goto L_047d;
L_047c:
load(*lhs, 25);
j = lhs->sptfm;
L_047d:
lhs->sptfm = 15;
lhs->rem = j;
lhs->disp = k;
lhs->type = 2;
lhs->form = 4;
rxd(37, 2, *lhs);
claim(2);
drop(*lhs);
rr(3, 2, 2);
claim(2);
rr(3, 2, 15);
rr(21, 1, 2);
L_047b:
uncondjump = ca;
goto L_0418;
c_66:
val = tag();
if (val == for->lab) goto L_047e;
jumpto(val, 12, 0);
goto L_047f;
L_047e:
sset(for->cvbase, for->cvdisp, for->cvform, 0);
hazard(for->reg);
poplhs();
lhs->type = for->cvtype;
lhs->flag = (lhs->flag | 8);
lrd(*lhs, for->reg);
if (for->shadow < 0) goto L_0480;
rx(28, for->reg, local, for->shadow);
perm(25);
L_0480:
if (for->initial == 0) goto L_0481;
definelabel(for->initial);
for->initial = 0;
L_0481:
if (for->fvbase != 0) goto L_0482;
if (for->fvdisp != 0) goto L_0483;
claim(for->reg);
rr(1, for->reg, for->reg);
goto L_0484;
L_0483:
rxi(28, for->reg, for->fvbase, for->fvdisp);
L_0484:
goto L_0485;
L_0482:
rx(28, for->reg, for->fvbase, for->fvdisp);
L_0485:
jumpto(val, 1, 0);
if (next == 58) goto L_0486;
abort(1095577909);
L_0486:
readsymbol(next);
definelabel(tag());
if (for->shadow < 0) goto L_0487;
if (level == 5) goto L_0488;
rx(2, 13, local, for->shadow);
goto L_0489;
L_0488:
rx(1, for->reg, 15, 12);
rx(2, for->reg, local, for->shadow);
forgetreg((1 << for->reg));
L_0489:
L_0487:
tempbase = for->tempbase;
forstp = (forstp - 1);
if (forstp >= 0) goto L_048a;
abort(1095578160);
L_048a:
for = &forstk[forstp];
L_047f:
goto L_0418;
c_70:
val = tag();
if (val < 8000) goto L_048b;
abort(1095578165);
L_048b:
jumpto(val, 12, 1);
goto L_0418;
goto L_048c;
int userlabel(int lab)
{
struct VARFM *v;
if (lab <= names) goto L_048d;
names = lab;
v = &var[lab];
memset(*v,0,sizeof struct VARFM);
v->form = 14;
v->disp = newtag();
return((-v->disp));
L_048d:
return((-var[lab].disp));
L_048c:
c_74:
jumpto(userlabel(tag()), 12, 0);
goto L_0418;
c_76:
definelabel(userlabel(tag()));
goto L_0418;
c_58:
j = tag();
if (j < 8000) goto L_048e;
abort(1095578416);
L_048e:
definelabel(j);
goto L_0418;
c_102:
compilefor();
goto L_0418;
c_119:
markassigned = 0;
machinecode();
forgetreg((-1));
goto L_0418;
c_80:
popdrop();
cput(lhs->disp);
forgetreg((-1));
goto L_0418;
c_121:
j = tag();
diagnose = 0;
if (((j >> 14) & 3) != 2) goto L_048f;
diagnose = (j & 16383);
if ((diagnose & 4) == 0) goto L_0490;
diagnose = (diagnose | ((-1) << 15));
L_0490:
goto L_0491;
L_048f:
L_0491:
goto L_0418;
c_122:
control = tag();
goto L_0418;
c_109:
j = (-1);
goto U_015c;
c_115:
if ((control & 64) == 0) goto L_0492;
perm(50);
cput(0);
L_0492:
j = 0;
goto U_015c;
c_101:
j = tag();
U_015c:
for (;;) {
L_0493:
if (stp >= 2) goto L_0494;
cstack(0);
}
L_0494:
poplhs();
lrd(*lhs, 3);
poplhs();
lrd(*lhs, 2);
cload(j, 1);
perm(20);
uncondjump = ca;
goto L_0418;
c_111:
event.events = tag();
readsymbol(next);
k = tag();
j = ((frame + 3) & (\3));
frame = (j + 4);
rx(2, 8, local, j);
jumpto(k, 12, 1);
event.low = jtag;
forgetall();
event.label = newtag();
definetag(event.label);
rx(1, 8, local, j);
goto L_0418;
c_104:
compilerop(tag());
goto L_0418;
c_103:
c_100:
allocate = (sym - 103);
dim = tag();
if (0 >= dim) goto L_0495;
if (dim <= 7) goto L_0496;
L_0495:
abort(1095578421);
L_0496:
readsymbol(next);
n = tag();
if (gmode != 0) goto L_0497;
names = (names - n);
goto L_0498;
L_0497:
parms = (parms + n);
L_0498:
setboth();
dv = 0;
t = (-1);
if ((control & 23) != 0) goto L_0499;
if (dim != 1) goto L_0499;
if (lhs->disp > (rhs->disp + 1)) goto L_0499;
if (!(const(*rhs))) goto L_049a;
if (!(const(*lhs))) goto L_049a;
t = 0;
if (0 >= datasize) goto L_049b;
if (datasize > 32767) goto L_049b;
if ((-32768) > lhs->disp) goto L_049b;
if (lhs->disp > 32767) goto L_049b;
if ((-32768) > rhs->disp) goto L_049b;
if (rhs->disp > 32767) goto L_049b;
dim = (dim | 32);
L_049b:
L_049a:
L_0499:
if (gmode != 0) goto L_049c;
if (t < 0) goto L_049d;
L_049c:
vlb = lhs->disp;
vub = rhs->disp;
if (vlb <= (vub + 1)) goto L_049e;
abort(1095578672);
L_049e:
setdopevector();
stp = (stp - 2);
drop(*lhs);
drop(*rhs);
if (gmode != 0) goto L_049f;
quickload(5, 5, 15, dv);
release(5);
vub = ((vub + 3) & (\3));
L_049f:
goto L_04a0;
L_049d:
frame = ((frame + 3) & (\3));
k = frame;
frame = (frame + 4);
quickload(5, 5, local, k);
release(5);
stp = 0;
for (j = 1; j += 1; j != (dim << 1)) {
stp = (stp + 1);
setlhs();
claim(5);
lrd(*lhs, 25);
rx(2, lhs->sptfm, 5, (frame - k));
frame = (frame + 4);
if ((j & 1) != 0) goto L_04a5;
frame = (frame + 4);
L_04a5:
}
L_04a4:
perm(17);
cput(dim);
cput(datasize);
stp = 0;
L_04a0:
if (dv != 0) goto L_04a6;
quickload(3, 5, local, frame);
release(3);
forgetreg((1 << 3));
L_04a6:
for (j = 1; j += 1; j != n) {
if (gmode != 0) goto L_04ab;
names = (names + 1);
decvar = &var[names];
goto L_04ac;
L_04ab:
parms = (parms - 1);
decvar = &var[parms];
L_04ac:
decvar->disp = frame;
decvar->flag = (decvar->flag | dim);
if (gmode != 0) goto L_04ad;
decvar->header = (-1);
decvar->base = local;
decvar->flag = (decvar->flag | 64);
if (dv != 0) goto L_04ae;
if (allocate == 0) goto L_04af;
perm(18);
goto L_04b0;
L_04af:
rx(2, 5, local, (frame + 4));
rx(2, 2, local, (frame + 0));
L_04b0:
goto L_04b1;
L_04ae:
rx(2, 5, local, (frame + 4));
if (allocate == 0) goto L_04b2;
rxi(1, 1, 8, (-vlb));
rxi(3, 8, 0, vub);
goto L_04b3;
L_04b2:
rxi(1, 1, 0, (-vlb));
L_04b3:
rx(2, 1, local, (frame + 0));
L_04b1:
frame = (frame + (2 * 4));
goto L_04b4;
L_04ad:
gfix(3);
decvar->header = ga;
decvar->base = 0;
gword((-vlb));
gwordcrel(dv);
if (allocate == 0) goto L_04b5;
frame = (frame + vub);
L_04b5:
L_04b4:
}
L_04aa:
goto L_0418;
c_94:
setlhs();
lhs->type = 6;
lhs->format = tag();
goto L_0418;
goto L_04b6;
void tempset()
{
frame = ((frame + 3) & (\3));
sset(local, frame, 4, 0);
rhs->type = 6;
rhs->format = 800;
frame = (frame + 32);
L_04b6:
c_73:
sym = next;
readsymbol(next);
if (65 > sym) goto L_04b7;
if (sym > 90) goto L_04b7;
goto *pc[sym];
L_04b7:
abort(((1226842175 - (32 << 8)) + (sym << 8)));
pc_65:
pc_68:
pc_75:
cload(0, 7);
claim(7);
setboth();
j = next;
readsymbol(next);
if (sym != 65) goto L_04b8;
if (j > 1) goto L_04b9;
k = 61;
goto L_04ba;
L_04b9:
k = 60;
L_04ba:
compare(*lhs, *rhs, k);
goto L_04bb;
L_04b8:
if (sym != 75) goto L_04bc;
load(*lhs, 25);
address(*rhs, (-1));
rhs->type = 1;
rxd(39, lhs->sptfm, *rhs);
release(lhs->sptfm);
goto L_04bb;
L_04bc:
k = next;
readsymbol(next);
comparerecords(*lhs, *rhs, k);
L_04bb:
stp = (stp - 2);
drop(*lhs);
drop(*rhs);
skip(1, (j + invert));
invert = 0;
rxi(3, 7, 0, 1);
forgetreg((1 << 7));
ccca = 0;
sset(7, 0, 1, 0);
goto L_0418;
pc_66:
sym = next;
readsymbol(next);
ownform = 11;
owntype = 3;
claimliteral(sym, 3);
selectliteralarea();
decvar->disp = ca;
decvar->base = 15;
selectcodearea();
goto L_0418;
pc_67:
setlhs();
if (lhs->form != 4) goto L_04bd;
if (lhs->oper == 0) goto L_04be;
L_04bd:
t = 25;
if (!(floating(*lhs))) goto L_04bf;
t = 26;
L_04bf:
load(*lhs, t);
hazard(lhs->sptfm);
L_04be:
goto L_0418;
pc_73:
setboth();
lrd(*rhs, 25);
address(*lhs, (-1));
lhs->type = 1;
rxd(40, rhs->sptfm, *lhs);
claim(lhs->sptfm);
lhs->type = 6;
stp = (stp - 1);
goto L_0418;
pc_71:
pc_72:
if (sym != 72) goto L_04c0;
k = tag();
L_04c0:
if (next == 83) goto L_04c1;
tempset();
sstack(*rhs);
rhs->type = 0;
goto L_04c2;
L_04c1:
readsymbol(next);
L_04c2:
if (sym != 71) goto L_04c3;
cstack(0);
goto L_04c4;
L_04c3:
vstack(k);
L_04c4:
assign(1);
goto L_0418;
pc_74:
setboth();
lrd(*lhs, 2);
lrd(*rhs, 3);
perm(35);
if (next > 1) goto L_04c5;
cput(0);
goto L_04c6;
L_04c5:
if (next != 3) goto L_04c7;
cput(2);
goto L_04c6;
L_04c7:
cput(1);
L_04c6:
stp = (stp - 2);
sset(7, 0, 1, 0);
claim(7);
if (next != 0) goto L_04c8;
rxi(10, 7, 0, 1);
L_04c8:
readsymbol(next);
goto L_0418;
pc_76:
poplhs();
x = lhs;
setlhs();
if (lhs->type == 0) goto L_04c9;
poplhs();
tempset();
sstack(*lhs);
drop(*lhs);
assign(1);
sset(local, (frame - 32), 4, 0);
rhs->type = 0;
setlhs();
L_04c9:
load(*lhs, 2);
lrd(*x, 3);
perm(setops[next]);
readsymbol(next);
goto L_0418;
pc_83:
setboth();
stacked[(stp - 1)].v = rhs;
stacked[stp].v = lhs;
goto L_0418;
pc_78:
if ((control & 2) == 0) goto L_04ca;
setlhs();
testzero(*lhs);
claim(lhs->sptfm);
rr(22, 16, 15);
L_04ca:
goto L_0418;
pc_87:
cstack(0);
rhs->form = 1;
rhs->sptfm = 8;
goto L_0418;
c_126:
sym = next;
readsymbol(next);
if (sym != 65) goto L_04cb;
decvar = gvar;
assemble((-2), labs, names);
altalign = (altalign | falign);
goto L_04cc;
L_04cb:
if (sym != 66) goto L_04cd;
goto U_015e;
L_04cd:
if (sym == 67) goto L_04ce;
abort(1095578677);
L_04ce:
if (frame <= maxframe) goto L_04cf;
maxframe = frame;
L_04cf:
frame = putativeframebase;
L_04cc:
goto L_0418;
c_123:
gmode = (-1);
assemble(gtype, labs, names);
goto L_0418;
c_125:
gmode = 0;
if (amode >= 0) goto L_04d0;
goto U_015e;
L_04d0:
if ((gvar->flag & 4) == 0) goto L_04d1;
goto U_015e;
L_04d1:
if (names <= gstart) goto L_04d2;
gvar->extra = parms;
for (j = (gstart + 1); j += 1; j != names) {
ap = &var[j];
parms = (parms - 1);
fp = &var[parms];
memcpy(*fp,*ap,sizeof struct VARFM);
fp->base = 8;
if ((ap->flag & 96) != 0) goto L_04d7;
ap->flag = ((ap->flag & (\2)) | 8);
L_04d7:
}
L_04d6:
if (parms >= names) goto L_04d8;
abort(1095578928);
L_04d8:
if (ap->type != 5) goto L_04d9;
if ((ap->xform & ((96 << 8) + 255)) != 4) goto L_04d9;
if (ap->base == 0) goto L_04d9;
gvar->header = ap->disp;
fp->flag = (fp->flag | 2);
L_04d9:
L_04d2:
gdisp = (-1);
maxparm = frame;
if (amode == 0) goto L_04da;
goto U_015e;
L_04da:
header(*gvar);
goto L_0418;
c_72:
decvar = &begin;
decvar->disp = newtag();
otype = 0;
spec = 0;
potype = 0;
if (level == 0) goto L_04db;
cstack(decvar->disp);
poplhs();
lhs->type = 0;
call(*lhs);
L_04db:
strncpy(blockname,"BLOCK",19+1);
assemble(0, labs, names);
goto L_0418;
L_0418:
}
c_44:
c_48:
c_49:
c_50:
c_51:
c_52:
c_53:
c_54:
c_55:
c_56:
c_57:
c_59:
c_89:
c_96:
c_99:
c_124:
c_127:
abort(((4144928 << 8) | sym));
goto L_04dc;
void alignalternatives()
{
int n;
int mod;
int j;
struct VARFM *v;
falign = altalign;
n = (putativeframebase - trueframebase);
if (n == 0) goto L_04dd;
if (altalign != 3) goto L_04de;
L_04dd:
return;
L_04de:
if (altalign != 0) goto L_04df;
mod = n;
goto L_04e0;
L_04df:
if (n != 1) goto L_04e1;
return;
L_04e1:
mod = 2;
L_04e0:
for (j = parms; j += 1; j != altfirst) {
v = &var[j];
v->disp = (v->disp - mod);
}
L_04e5:
maxframe = (maxframe - mod);
L_04dc:
c_59:
if (level == 0) goto L_04e6;
if (uncondjump != ca) goto L_04e7;
if (gvar->type != 0) goto L_04e8;
if ((control & 32) != 0) goto L_04e8;
L_04e7:
if ((control & 64) == 0) goto L_04e9;
if (level != 1) goto L_04e9;
perm(50);
cput(0);
L_04e9:
return();
L_04e8:
goto L_04ea;
L_04e6:
if ((ga & 1) == 0) goto L_04eb;
gbyte(0);
L_04eb:
if ((lita & 1) == 0) goto L_04ec;
claimliteral(0, 0);
L_04ec:
L_04ea:
gvar->flag = (gvar->flag | closed);
blockmark(17);
resetoptimisationdata();
U_015e:
if (amode < 0) goto L_04ed;
if (local == 13) goto L_04ee;
activity[local] = 0;
L_04ee:
level = (level - 1);
local = breg[level];
goto L_04ef;
L_04ed:
alignalternatives();
if (maxframe <= frame) goto L_04f0;
frame = maxframe;
L_04f0:
if (amode != (-2)) goto L_04f1;
oldframe = frame;
goto L_04f2;
L_04f1:
frame = ((frame + 3) & (\3));
if ((frame >> 16) == 0) goto L_04f3;
abort(1095578933);
L_04f3:
gvar->length = frame;
L_04f2:
L_04ef:
frame = oldframe;
extraframe = oldextraframe;
uncondjump = oldjump;
ca = procca;
vardiags = oldvardiags;
newtemp = tempbase;
nexttemp = oldnexttemp;
tempbase = oldtempbase;
lastline = (-15);
for (;;) {
L_04f4:
control = (impcom.flags & 255);
if ((control & 32) == 0) goto L_04f5;
control = (control & (\23));
L_04f5:
selectinput(1);
selectoutput(2);
printsymbol((12 >> 1));
printsymbol((8 >> 1));
claimliteral(8, 3);
var[0] = 0;
var[800].length = 32;
parms = 800;
cslen = ¤tstring[0];
activity[8] = (-1);
activity[15] = (-1);
activity[0] = (-1);
activity[14] = (-1);
activity[16] = (-1);
for (j = 0; j += 1; j != (25 - 1)) {
stak[j].link = &stak[(j + 1)];
dlist[j].link = &dlist[(j + 1)];
}
L_04f9:
stak[25].link = null;
dlist[25].link = null;
descasl = &stak[0];
dasl = &dlist[0];
using.link = null;
for (j = 0; j += 1; j != 30) {
forstk[j] = 0;
}
L_04fd:
forstp = 0;
for = &forstk[0];
readsymbol(next);
spec = 0;
decvar = &begin;
assemble(2, 0, 0);
closefiles();
if (faulty == 0) goto L_04fe;
// EVENT 0x000f
L_04fe: