#include _imp_string /*%string(7)*/ P2VERSION = _imp_str_literal("004"); static int DIAG = 0; static int DEBUG = 0; static int CURRENTLINE = 0; const unsigned char INTERNALTYPE[14] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 13, }; const _imp_string /*%string(7)*/ TYPEID[14] = { _imp_str_literal("Unknown"), _imp_str_literal("Integer"), _imp_str_literal("Short "), _imp_str_literal("Half "), _imp_str_literal("Byte "), _imp_str_literal("Addr "), _imp_str_literal("Real "), _imp_str_literal("Lreal "), _imp_str_literal("String "), _imp_str_literal("Record "), _imp_str_literal("General"), _imp_str_literal("Label "), _imp_str_literal("Boolean"), _imp_str_literal("Set "), }; const unsigned char TYPEFMT[14] = { 0, 4, 2, 2, 1, 4, 4, 8, 0, 0, 0, 0, 1, 32, }; const unsigned char TYPECODE[14] = { 0, 1, 6, 6, 5, 1, 2, 8, 3, 4, 0, 10, 0, 0, }; const unsigned char TYPESIZE[14] = { 0, 4, 2, 2, 1, 4, 4, 8, 0, 0, 12, 0, 2, 32, }; const unsigned char UCHECK[14] = { 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, }; typedef struct COMMFM COMMFM; struct COMMFM { int LANGUAGE; int OPTIONS; int SPECIALS; int PRIM; int STATEMENTS; int FAULTS; int REFCOUNT; int PRIMREFCOUNT; int DEFCOUNT; int PRIMDEFCOUNT; int BLOCKCOUNT; int PRIMBLOCKCOUNT; int EXTERNALCOUNT; int PRIMEXTERNALCOUNT; int GLOBALSIZE; int PRIMGLOBALSIZE; int FORMATS; int PRIMFORMATS; int CONSTANTSIZE; int PRIMCONSTANTSIZE; int GLOBALARRAYSIZE; int TOTALITEMS; int TOTALBLOCKS; int TOTALFORMATS; int TOTALEXTERNALS; _imp_string /*%string(255)*/ SOURCEFILE; _imp_string /*%string(255)*/ MODULE; }; void PASS2( COMMFM /*name*/*INTERFACE ) { extern void D68000( int OP, int CA ); extern void DUMPENCODED( int N ); extern void PRINTHEX( int N, int P ) __asm__("3L_IMP_PRINT_HEX"); const unsigned char ACTUAL[27] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, }; const _imp_string /*%string(3)*/ REGID[27] = { _imp_str_literal(""), _imp_str_literal("R0 "), _imp_str_literal("R1 "), _imp_str_literal("R2 "), _imp_str_literal("R3 "), _imp_str_literal("R4 "), _imp_str_literal("R5 "), _imp_str_literal("R6 "), _imp_str_literal("R7 "), _imp_str_literal("R8 "), _imp_str_literal("R9 "), _imp_str_literal("R10"), _imp_str_literal("R11"), _imp_str_literal("R12"), _imp_str_literal("R13"), _imp_str_literal("R14"), _imp_str_literal("R15"), _imp_str_literal("R? "), _imp_str_literal("F0 "), _imp_str_literal("F1 "), _imp_str_literal("F2 "), _imp_str_literal("F3 "), _imp_str_literal("F4 "), _imp_str_literal("F5 "), _imp_str_literal("F6 "), _imp_str_literal("F7 "), _imp_str_literal("F? "), }; const unsigned char RTYPE[27] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, }; typedef struct BOUNDFM BOUNDFM; struct BOUNDFM { int LOWER; int UPPER; int MULT; }; typedef struct AFM AFM; struct AFM { int DIMENSION; int TOTALSIZE; int ZERODISPLACEMENT; int DV; int LOCALFRAME; int BASE; BOUNDFM BOUND[7]; }; const AFM /*name*/*ATYPE = { 0 } /* Initialise all fields of a record to 0. */; typedef struct VARFM VARFM; struct VARFM { int FLAGS; unsigned char BASE; unsigned char PRIM; unsigned char TYPE; unsigned char FORM; double RVAR; int DISP; int EXTRA; AFM /*name*/*ADATA; int FORMAT; int SCALE; int AREA; }; typedef struct OLFM OLFM; struct OLFM { int OPER; void /*name*/*LINK; }; typedef struct XFM XFM; struct XFM { int XSIZE; void /*name*/*INDEX; }; typedef struct DATAFM DATAFM; struct DATAFM { VARFM V; int VARNO; VARFM /*name*/*FV; int BIAS; unsigned char REG; unsigned char LABEL; void /*name*/*PARAMS; void /*name*/*RECORD; int OPER; void /*name*/*LINK; OLFM OPLINK; int XSIZE; void /*name*/*INDEX; XFM X; }; typedef struct MEMBERFM MEMBERFM; struct MEMBERFM { int CONST; int ITEMS; void /*name*/*A; void /*name*/*B; MEMBERFM /*name*/*LINK; }; const MEMBERFM /*name*/*MEMBERFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; typedef struct STACKFM STACKFM; struct STACKFM { VARFM V; DATAFM DATA; int FLAGS; unsigned char BASE; unsigned char PRIM; unsigned char TYPE; unsigned char FORM; double RVAL; int RHIGH; int RLOW; int DISP; int EXTRA; AFM /*name*/*ADATA; int FORMAT; int SCALE; int AREA; int VARNO; VARFM /*name*/*FV; MEMBERFM /*name*/*MEMBERS; int BIAS; unsigned char REG; unsigned char LABEL; STACKFM /*name*/*PARAMS; STACKFM /*name*/*RECORD; int OPER; STACKFM /*name*/*LINK; OLFM OPLINK; int XSIZE; STACKFM /*name*/*INDEX; XFM X; STACKFM /*name*/*USING; STACKFM /*name*/*STACK; }; const STACKFM /*name*/*STACKFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; typedef struct WITHFM WITHFM; struct WITHFM { int KEY; DATAFM DATA; WITHFM /*name*/*LINK; }; const WITHFM /*name*/*WITHFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; typedef struct WORKFM WORKFM; struct WORKFM { int SIZE; int DISPLACEMENT; int VALIDITY; }; typedef struct WORKVFM WORKVFM; struct WORKVFM { WORKVFM /*name*/*LINK; WORKFM W[31]; }; const WORKVFM /*name*/*WORKVFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; WORKVFM WORKLIST; WORKLIST = (WORKVFM){ 0 } /* Assign 0's to all fields of record */; int WORKVALIDITY; WORKVALIDITY = 1; int LASTWORK; LASTWORK = (-1); typedef struct FORFM FORFM; struct FORFM { unsigned char LABEL; unsigned char ENTRY; unsigned char REG; unsigned char CC; int TYPE; int AS; DATAFM CONTROL; DATAFM FINAL; FORFM /*name*/*LINK; }; const FORFM /*name*/*FORFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; static FORFM /*name*/*FORS = { 0 } /* Initialise all fields of a record to 0. */; static STACKFM /*name*/*STACK = { 0 } /* Initialise all fields of a record to 0. */; static STACKFM /*name*/*USING = { 0 } /* Initialise all fields of a record to 0. */; static STACKFM /*name*/*DASL = { 0 } /* Initialise all fields of a record to 0. */; typedef struct VALUEFM VALUEFM; struct VALUEFM { double REAL; int INTEGER; _imp_string /*%string(255)*/ STRING; unsigned char FILL[256]; }; static VALUEFM VALUE = { 0 } /* Initialise all fields of a record to 0. */; static VALUEFM DEFAULTVALUE = { 0 } /* Initialise all fields of a record to 0. */; const _imp_string /*%string(4)*/ OPERID[29] = { _imp_str_literal("not "), _imp_str_literal("neg "), _imp_str_literal("abs "), _imp_str_literal("add "), _imp_str_literal("sub "), _imp_str_literal("mul "), _imp_str_literal("div "), _imp_str_literal("exp "), _imp_str_literal("and "), _imp_str_literal("or "), _imp_str_literal("xor "), _imp_str_literal("bic "), _imp_str_literal("rot "), _imp_str_literal("lsh "), _imp_str_literal("rsh "), _imp_str_literal("rem "), _imp_str_literal("mod "), _imp_str_literal("ext "), _imp_str_literal("mulh"), _imp_str_literal("udiv"), _imp_str_literal("urem"), _imp_str_literal("conc"), _imp_str_literal("negr"), _imp_str_literal("absr"), _imp_str_literal("addr"), _imp_str_literal("subr"), _imp_str_literal("mulr"), _imp_str_literal("divr"), _imp_str_literal("expr"), }; const short OPERFLAGS[29] = { 40, 40, 32, 589, 588, 769, 640, 642, 781, 781, 781, 780, 640, 648, 648, 128, 128, 128, 128, 128, 128, 128, 168, 160, 129, 128, 129, 128, 130, }; const int EASYOP[9] = { 8388608, 4194304, 0, 0, 0, 0, 25165824, 2097152, 29360128, }; const int NULLVALUE[12] = { 0, 0, 1, 1, 1, (-1), 0, 0, 0, 0, 0, 0, }; const unsigned char REVERSE[10] = { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, }; const unsigned char NEGATED[10] = { 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, }; int J; int NN; static int CODE = 0; static int PENDING = 0; static int PENDINGTAG = 0; static int PENDINGLIT = 0; static int PENDINGAUTON = 0; static int PENDINGAUTO = 0; static int PENDINGAUTOCA = 0; static int LANGUAGEFLAGS = 0; static int STACKCHECK = 0; static int FALIGN = 0; static int INVERT = 0; static int UNSIGNED = 0; static int FREELABEL; typedef struct KNOWFM KNOWFM; struct KNOWFM { unsigned char FTYPE; unsigned char REG; unsigned char BASE; unsigned char OPER; int DISP; int AREA; int OPND; int EXTRA; KNOWFM /*name*/*LINK; }; const KNOWFM /*name*/*KNOWFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; typedef struct LABELFM LABELFM; struct LABELFM { int LAB; KNOWFM /*name*/*ENV; }; typedef struct ILABELFM ILABELFM; struct ILABELFM { ILABELFM /*name*/*LINK; LABELFM LAB[256]; }; const ILABELFM /*name*/*ILABELFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; ILABELFM /*name*/*ILABELLIST; ILABELLIST = NIL; typedef struct ILABELPFM ILABELPFM; struct ILABELPFM { ILABELFM /*name*/*LABEL; }; ILABELPFM ILABELS[(((unsigned char)((int)((((unsigned int)(8191)) >> (8))))) + (1))]; static KNOWFM /*name*/*KNOWING = { 0 } /* Initialise all fields of a record to 0. */; static KNOWFM /*name*/*KASL = { 0 } /* Initialise all fields of a record to 0. */; static int KTIMES[27] = { [0 ... 26] = 0 }; static int USEDTIME = 0; static int USED[27] = { [0 ... 26] = 0 }; static int ACTIVITY[27] = { [0 ... 26] = 0 }; static int ACTIVEREGISTERS = 0; int PENDINGKNOWNREGISTER; PENDINGKNOWNREGISTER = 0; STACKFM PENDINGKNOWN; static _imp_string /*%string(127)*/ ALIAS = _imp_str_literal(""); static _imp_string /*%string(127)*/ INTERNALID = _imp_str_literal(""); static _imp_string /*%string(127)*/ EXTERNALID = _imp_str_literal(""); static _imp_string /*%string(127)*/ SECTIONID = _imp_str_literal(""); static int DECLSIZE; static int VLB; static int VUB; static int OSTATE; static int OWNTYPE; static int OWNFORM; static int OWNEXTRA; static int CONSTANTTYPE; static int INITFLAG = 0; VARFM /*name*/*DEFV; VARFM ALTV; static int PARMS; static int SECTION = 0; static int CONTROL = 0; static int UNASSIGNED = 0; static int COMPILINGPRIM = 0; const _imp_string /*%string(6)*/ FORMID[6] = { _imp_str_literal("addr"), _imp_str_literal("value"), _imp_str_literal("()+"), _imp_str_literal("-()"), _imp_str_literal("proc"), _imp_str_literal("label"), }; static int ENTERPROC = 0; const int CORRUPTS[56] = { 0, 1, 4607, 0, 47, 393217, 4095, 60, 126, 15, 9, 0, 7, 15, 0, 0, 2287, 135, 0, 25, 0, 0, 4095, 77, 25, 0, 0, 58, 2559, 2559, 2559, 2559, 0, 0, 58, 0, 3, 63, 0, 31, 262145, 62, 511, 255, 8189, 56, 1023, 1023, 15, 510, 2559, 393217, 131073, 0, 0, 6160, }; const int PRIMPARAMETER[56] = { 0, 6, 7966, 2, 6, 131073, 0, 12, 6, 7, 6, 0, 7, 7, 0, 14, 2054, 4230, 0, 258, 0, 0, 0, 4172, 258, 0, 2, 259, 2304, 2304, 2304, 2304, 10, 0, 259, 10, 3, 6, 0, 7, 3, 6, 56, 472, 2, 7, 0, 0, 6, 1, 3, 131073, 131072, 0, 0, 16, }; static int LASTDIR = 0; static int REFS = 0; static int BLOCKS = 0; static int OWNBASE = 0; static int MINSB = 0; static int OWNARRAYBASE = 0; static int CONSTANTBASE = 0; static int CURRENTAREA = 0; static int LASTAREA = 0; static int EXTERNALNO = 0; static int FRAMEUSE[18] = { [0 ... 17] = 0 }; static int FMARK = 0; STACKFM UAPAT; STACKFM ZERO; STACKFM ONE; STACKFM SPV; STACKFM REGV[27]; VARFM /*name*/*FORRANGE; FORRANGE = NIL; STACKFM C255; C255 = (STACKFM){ 0 } /* Assign 0's to all fields of record */; C255.DISP = 255; C255.TYPE = 1; static int JAMIT = 0; static int ENTRYPOINT = (-1); static int DANGERLEVEL = 32767; _imp_string /*%string(127)*/ INCLUDEFILE; INCLUDEFILE = _imp_str_literal(""); int DTYPE; typedef struct QFM QFM; struct QFM { int TYPE; int SIZE; int ROUND; int BIAS; int DIM; int FORMAT; int DIAGS; int DTYPE; int DFORM; int IND; QFM /*name*/*POINTED; }; typedef struct DIAGFM DIAGFM; struct DIAGFM { DIAGFM /*name*/*LINK; VARFM /*name*/*VAR; int X; int XTYPE; int FORMAT; int EXT; _imp_string /*%string(127)*/ ID; }; const DIAGFM /*name*/*DIAGFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; DIAGFM /*name*/*DIAGLIST; DIAGLIST = NIL; static short DISPLAYVECTOR[18] = { [0 ... 17] = 0 }; static int CP = 0; unsigned char CODEBUFFER[256]; typedef struct VVFM VVFM; struct VVFM { VVFM /*name*/*LINK; VARFM V[64]; }; const VVFM /*name*/*VVFMTYPE = { 0 } /* Initialise all fields of a record to 0. */; VVFM /*name*/*VARLIST; VARLIST = NIL; typedef struct PVFM PVFM; struct PVFM { VVFM /*name*/*P; }; PVFM PVAR[32]; VARFM /*map*/*VAR( int A ) { VVFM /*name*/*V; PVFM /*name*/*X; X = &PVAR[(int)((((unsigned int)(A)) >> (6)))]; if (((X->P) != (NIL))) goto L_0002; V = _imp_NEW(VVFMTYPE); V->LINK = VARLIST; VARLIST = V; X->P = V; L_0002:; /* Remove %on %event handler here if present for this block */ return &X->P->V[((A) & (63))]; } // End of block VAR at level 2 void FLUSHCODE( void ) { int J; if (((CP) != (0))) goto L_0003; /* Remove %on %event handler here if present for this block */ return; L_0003:; _imp_PRINTSYMBOL(31); DUMPENCODED(CP); {static int _initial, _increment, _final, _control; _initial = 1; _increment = 1; _final = CP; J = _control = _initial; if (((_final-_initial) % _increment) != 0) _imp_signal(5,1,0,"Illegal cycle J = 1, 1, CP"); J -= _increment; _control -= _increment; L_0004:; if (J == _final) goto L_0005; J += _increment; _control += _increment; if (J != _control) _imp_signal(4,2,0,"Corrupt control variable J"); /* FOR loop control variable corrupted */ } _imp_PRINTSYMBOL(CODEBUFFER[J]); goto L_0004; L_0005:; CP = 0; /* Remove %on %event handler here if present for this block */ return; } // End of block FLUSHCODE at level 2 void ASSEMBLE( VARFM /*name*/*AVAR, int AMODE, int VARS, int LOCAL, int PARAMETERLIST, int /*name*/*GLOBALATTRIBUTES ) { auto void NOTINYET( void ); auto void FAIL( _imp_string /*%string(63)*/ WHY ); auto void WARN( int FAULT, _imp_string /*%string(63)*/ WHAT ); auto void DISPLAY( STACKFM /*name*/*V, int BIAS ); auto void MONITOR( STACKFM /*name*/*V, _imp_string /*%string(127)*/ TEXT ); auto int /*Boolean*/ ICONST( STACKFM /*name*/*V ); auto int /*Boolean*/ ICONSTITEM( STACKFM /*name*/*V ); auto int /*Boolean*/ CONST( STACKFM /*name*/*V ); auto int /*Boolean*/ SAME( STACKFM /*name*/*A, STACKFM /*name*/*B ); auto int /*Boolean*/ INREG( STACKFM /*name*/*V ); auto int /*Boolean*/ FLOATING( STACKFM /*name*/*V ); auto int POWER( int N ); auto int ITEMSIZE( int T ); auto STACKFM /*map*/*REGISTER( int R ); auto void CLAIM( int REGISTER ); auto void RELEASE( int REGISTER ); auto void RELEASEANDDROP( STACKFM /*name*/*V ); auto void ZAPINDEXANDRECORD( STACKFM /*name*/*V ); auto void RELEASEANDDROPPAIR( STACKFM /*name*/*A, STACKFM /*name*/*B ); auto void HAZARD( int REGISTER ); auto void PESSIMISE( STACKFM /*name*/*V ); auto void FORGET( int REGISTER ); auto void FORGETDESTINATION( STACKFM /*name*/*V ); auto void FORGETEVERYTHING( void ); auto void REMEMBER( int REGISTER, STACKFM /*name*/*V ); auto void REMEMBERZERO( int REGISTER ); auto void OPTIMISE( STACKFM /*name*/*V, int MODE ); auto void SIMPLIFY( STACKFM /*name*/*V ); auto void AMAP( STACKFM /*name*/*V ); auto void VMAP( STACKFM /*name*/*V, int TYPE ); auto void MAKEAUTOI( STACKFM /*name*/*V, int TYPE ); auto void ADVANCE( STACKFM /*name*/*V, int TYPE, int BY ); auto void LOAD( STACKFM /*name*/*V, int REGISTER ); auto void LOADUP( STACKFM /*name*/*V ); auto void LOADADDRESS( STACKFM /*name*/*V, int R ); auto void LOADUPADDRESS( STACKFM /*name*/*V ); auto void LOADPAIR( STACKFM /*name*/*A, int AR, STACKFM /*name*/*B, int BR ); auto void LOADTRIO( STACKFM /*name*/*A, int AR, STACKFM /*name*/*B, int BR, STACKFM /*name*/*C, int CR ); auto void POPSTACK( int BYTES ); auto void LOADPROTECTED( STACKFM /*name*/*V ); auto void MOVE( STACKFM /*name*/*FROM, STACKFM /*name*/*TO ); auto void MOVELITERAL( int LIT, STACKFM /*name*/*V ); auto void STORE( STACKFM /*name*/*FROM, STACKFM /*name*/*TO ); auto void STOREADDRESS( STACKFM /*name*/*FROM, STACKFM /*name*/*TO, int /*name*/*EXTRA ); auto void OPERATE( int OP, STACKFM /*name*/*L, STACKFM /*name*/*R ); auto void COMPARE( STACKFM /*name*/*L, STACKFM /*name*/*R ); auto int NEWLABEL( void ); auto void JUMPTO( int INTERNALLABEL, int CONDCODE ); auto void DEFINELABEL( int INTERNALLABEL ); auto void TESTZERO( STACKFM /*name*/*V ); auto void TESTRANGE( STACKFM /*name*/*V, VARFM /*name*/*R ); auto void CLEARVARS( int LIMIT ); auto void DIRSTRING( int OP, _imp_string /*%string(255)*/ /*name*/*S ); auto void FLOAT( STACKFM /*name*/*V, int R ); auto void DUMPEXTERNAL( int C, VARFM /*name*/*V ); auto void DO( _imp_string /*%string(31)*/ IDENT, int /*name*/*EP, int RESULT ); auto int GPR( void ); auto int FPR( void ); auto int SELECTBEST( STACKFM /*name*/*FROM, STACKFM /*name*/*TO, int D ); auto STACKFM /*map*/*DESCRIPTOR( void ); auto STACKFM /*map*/*TEMPORARY( void ); auto void DROP( STACKFM /*name*/*V ); auto STACKFM /*map*/*LOCALINTEGER( int DISP ); auto STACKFM /*map*/*LITERAL( int N ); auto STACKFM /*map*/*COPY( STACKFM /*name*/*V ); auto int TAG( void ); auto int FOURBYTES( void ); auto void PRIM( int N ); auto void DUMPTEXT( int MAX ); auto void PASSPARAMETERS( STACKFM /*name*/*V, int /*name*/*X, int BASEREG ); auto void ASSIGN( int HOW ); auto void STRINGASSIGN( STACKFM /*name*/*FROM, STACKFM /*name*/*TO ); auto void SETASSIGN( STACKFM /*name*/*FROM, STACKFM /*name*/*TO ); auto void EVALUATESTRINGEXPRESSION( STACKFM /*name*/*V ); auto void RECORDASSIGN( STACKFM /*name*/*FROM, STACKFM /*name*/*TO ); auto STACKFM /*map*/*CLAIMWORKAREA( int SIZE, int TYPE ); auto void FLUSHDIAGS( void ); auto void CONVERTFORMAT( STACKFM /*name*/*V, int TYPE ); auto void TOSHORTREAL( STACKFM /*name*/*V ); auto void STOREREALCONSTANT( STACKFM /*name*/*W ); auto void BUILDSET( STACKFM /*name*/*S ); auto void DROPMEMBERS( STACKFM /*name*/*S ); static int FRAME = 0; static int ROUND = 0; int AFRAME; AFRAME = 0; int PARAMETERFRAME; PARAMETERFRAME = 0; int PARAMETERREGS; PARAMETERREGS = 0; int STRINGRESULT; STRINGRESULT = 0; int BLOCKTYPE; BLOCKTYPE = 0; int CODEBASE; CODEBASE = 0; int UNCONDJUMP; UNCONDJUMP = (-1); int D; int N; int PARAMETERMODE; int VARBASE; VARBASE = VARS; int FIRSTALT; FIRSTALT = (((int)(PARMS)) - (1)); int FRAMEBASE; int OLDFRAME; int ALTALIGN; int FRAMEEXTRA; int MAXFRAME; int ASSIGNLOCK; ASSIGNLOCK = 1; int ATTRIBUTES; ATTRIBUTES = 0; int AT; AT = 0; int ENTRYMASK; ENTRYMASK = 0; int MYMARK; int OPEN; OPEN = 2048; int EVENTLABEL; EVENTLABEL = 0; int EVENTBODY; EVENTBODY = 0; int EVENTBITS; EVENTBITS = 0; int WSPSAVE; WSPSAVE = 0; int DANGERMARKER; DANGERMARKER = 0; int LOCALDISPLAY; LOCALDISPLAY = 0; int JLAB; int ARRAYBASE; ARRAYBASE = 0; int WORKBASE; WORKBASE = LASTWORK; int /*name*/*CA; CA = &CODEBASE; _imp_string /*%string(127)*/ PROCID; PROCID = INTERNALID; WITHFM /*name*/*WITHS; WITHS = NIL; const _imp_string /*%string(255)*/ MONITORID = _imp_str_literal("3L___monitor"); static int MONITOREP = 0; void DECODE( int WORD, int AT ) { extern void D( int W, int A ) __asm__("DECODE_ARM"); _imp_SELECTOUTPUT(0); D(WORD, AT); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block DECODE at level 3 STACKFM /*map*/*DISPLAYINFO( int BASE ) { int N; STACKFM /*name*/*T; if (((BASE) >= (DANGERLEVEL))) goto L_0007; (FRAMEUSE-128)[BASE] = 0; N = (DISPLAYVECTOR-128)[BASE]; if (((N) != (0))) goto L_0008; MINSB = (((int)(MINSB)) - (4)); N = MINSB; (DISPLAYVECTOR-128)[BASE] = N; L_0008:; T = LITERAL(N); T->FORM = 1; T->BASE = 10; goto L_0009; L_0007:; T = LOCALINTEGER(((LOCALDISPLAY) + ((int)(((4) * ((int)((((int)(BASE)) - (DANGERLEVEL))))))))); L_0009:; ATTRIBUTES = ((((ATTRIBUTES) | (1))) | (4)); T->FLAGS = ((T->FLAGS) | (128)); /* Remove %on %event handler here if present for this block */ return T; } // End of block DISPLAYINFO at level 3 void BD( int BASE, int DISP ) { _imp_WRITE(DISP, 1); _imp_PRINTSYMBOL(40); if ((((0) > (BASE))) || (((BASE) > (26)))) goto L_000a; _imp_PRINTSTRING(REGID[BASE]); goto L_000b; L_000a:; if (((BASE) < (128))) goto L_000c; if (((BASE) != (LOCAL))) goto L_000d; _imp_PRINTSTRING(_imp_str_literal("Fp")); goto L_000e; L_000d:; _imp_PRINTSYMBOL(76); BASE = (((int)((((int)(BASE)) - (128)))) - (1)); _imp_WRITE(BASE, 0); L_000e:; goto L_000f; L_000c:; _imp_WRITE(BASE, 0); L_000f:; L_000b:; _imp_PRINTSYMBOL(41); /* Remove %on %event handler here if present for this block */ return; } // End of block BD at level 3 void SHOW( int N, _imp_string /*%string(15)*/ TEXT ) { if (((N) == (0))) goto L_0010; _imp_SPACE(); _imp_PRINTSTRING(TEXT); _imp_WRITE(N, 1); L_0010:; /* Remove %on %event handler here if present for this block */ return; } // End of block SHOW at level 3 void SHOWDATA( STACKFM /*name*/*V, int LEFT ) { _imp_SPACES(LEFT); _imp_PRINTSTRING(TYPEID[V->TYPE]); _imp_SPACE(); _imp_PRINTSTRING(FORMID[V->FORM]); BD(V->BASE, V->DISP); SHOW(V->FORMAT, _imp_str_literal("Fm:")); SHOW(V->AREA, _imp_str_literal("A:")); SHOW(V->FLAGS, _imp_str_literal("Fl:")); if (((((V->FLAGS) & (1))) == (0))) goto L_0011; _imp_PRINTSYMBOL(82); L_0011:; if (((((V->FLAGS) & (2))) == (0))) goto L_0012; _imp_PRINTSYMBOL(65); L_0012:; if (((((V->FLAGS) & (64))) == (0))) goto L_0013; _imp_PRINTSYMBOL(78); L_0013:; if (((((V->FLAGS) & (4))) == (0))) goto L_0014; _imp_PRINTSYMBOL(80); L_0014:; if (((((V->FLAGS) & (8))) == (0))) goto L_0015; _imp_PRINTSYMBOL(68); L_0015:; if (((((V->FLAGS) & (131072))) == (0))) goto L_0016; _imp_PRINTSYMBOL(87); L_0016:; if (((((V->FLAGS) & (32))) == (0))) goto L_0017; _imp_PRINTSYMBOL(83); L_0017:; if (((((V->FLAGS) & (128))) == (0))) goto L_0018; _imp_PRINTSYMBOL(61); L_0018:; if (((((V->FLAGS) & (16))) == (0))) goto L_0019; _imp_PRINTSYMBOL(72); L_0019:; if (((((V->FLAGS) & (1024))) == (0))) goto L_001a; _imp_PRINTSYMBOL(88); L_001a:; if (((((V->FLAGS) & (65536))) == (0))) goto L_001b; _imp_PRINTSYMBOL(110); L_001b:; if (((((V->FLAGS) & (1048576))) == (0))) goto L_001c; _imp_PRINTSYMBOL(67); L_001c:; if (((V->VARNO) == (0))) goto L_001d; _imp_PRINTSYMBOL(35); _imp_WRITE(V->VARNO, 0); L_001d:; if (((V->RECORD) == (NIL))) goto L_001e; _imp_NEWLINE(); _imp_SPACES(LEFT); _imp_PRINTSTRING(_imp_str_literal(" _:")); DISPLAY(V->RECORD, (((int)(LEFT)) + (4))); L_001e:; if (((V->INDEX) == (NIL))) goto L_001f; _imp_NEWLINE(); _imp_WRITE(V->XSIZE, (((int)(LEFT)) + (2))); _imp_PRINTSTRING(_imp_str_literal("i:")); DISPLAY(V->INDEX, (((int)(LEFT)) + (4))); L_001f:; /* Remove %on %event handler here if present for this block */ return; } // End of block SHOWDATA at level 3 void DISPLAY( STACKFM /*name*/*V, int BIAS ) { if (((V) != (NIL))) goto L_0020; _imp_PRINTSTRING(_imp_str_literal(" Nil")); _imp_NEWLINE(); /* Remove %on %event handler here if present for this block */ return; L_0020:; SHOWDATA(V, BIAS); _imp_NEWLINE(); if (((V->OPER) == (0))) goto L_0021; _imp_SPACES((((int)(BIAS)) - (4))); _imp_PRINTSTRING((OPERID-1)[V->OPER]); DISPLAY(V->LINK, (((int)(BIAS)) + (4))); L_0021:; /* Remove %on %event handler here if present for this block */ return; } // End of block DISPLAY at level 3 void SHOWREG( int R ) { int A; A = ACTIVITY[R]; _imp_PRINTSTRING(REGID[R]); if (((A) != (0))) goto L_0022; _imp_PRINTSTRING(_imp_str_literal(" unused")); goto L_0023; L_0022:; if (((A) >= (0))) goto L_0024; if (((A) != ((-1)))) goto L_0025; _imp_PRINTSTRING(_imp_str_literal(" locked")); goto L_0026; L_0025:; _imp_PRINTSTRING(_imp_str_literal(" =")); _imp_PRINTSTRING(REGID[(-(A))]); _imp_SPACES(2); L_0026:; goto L_0023; L_0024:; _imp_PRINTSTRING(_imp_str_literal(" used*")); _imp_WRITE(A, (-1)); L_0023:; _imp_PRINTSTRING(_imp_str_literal(" u:")); PRINTHEX(USED[R], 5); _imp_PRINTSTRING(_imp_str_literal(" k:")); _imp_WRITE(KTIMES[R], 0); _imp_NEWLINE(); /* Remove %on %event handler here if present for this block */ return; } // End of block SHOWREG at level 3 void MONITORN( int N, _imp_string /*%string(255)*/ TEXT ) { _imp_SELECTOUTPUT(0); _imp_PRINTSTRING(TEXT); _imp_WRITE(N, 8); _imp_NEWLINE(); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block MONITORN at level 3 void MONITORREGISTER( int R, _imp_string /*%string(127)*/ TEXT ) { _imp_SELECTOUTPUT(0); _imp_PRINTSTRING(TEXT); _imp_SPACES(((9) - (*(int *)(_imp_LENGTH(&TEXT))))); _imp_SPACE(); SHOWREG(R); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block MONITORREGISTER at level 3 void MONITOR( STACKFM /*name*/*V, _imp_string /*%string(127)*/ TEXT ) { _imp_SELECTOUTPUT(0); _imp_PRINTSTRING(TEXT); _imp_SPACES(((9) - (*(int *)(_imp_LENGTH(&TEXT))))); _imp_SPACE(); DISPLAY(V, 6); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block MONITOR at level 3 void MONREGID( int R, _imp_string /*%string(127)*/ TEXT ) { _imp_SELECTOUTPUT(0); _imp_PRINTSTRING(REGID[R]); _imp_SPACE(); _imp_PRINTSTRING(TEXT); _imp_NEWLINE(); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block MONREGID at level 3 void DISPLAYKNOWLEDGE( void ) { KNOWFM /*name*/*K; _imp_SELECTOUTPUT(0); K = KNOWING; L_0027:; if (((K) == (NIL))) goto L_0028; _imp_PRINTSTRING(REGID[K->REG]); _imp_PRINTSTRING(_imp_str_literal(" = ")); _imp_PRINTSTRING(TYPEID[(unsigned char)((((unsigned char)(K->FTYPE)) >> (4)))]); _imp_SPACE(); _imp_PRINTSTRING(FORMID[((K->FTYPE) & (15))]); _imp_SPACE(); BD(K->BASE, K->DISP); if (((K->EXTRA) == (0))) goto L_002a; _imp_PRINTSTRING(_imp_str_literal(" X:")); _imp_WRITE(K->EXTRA, 1); L_002a:; if (((K->AREA) == (0))) goto L_002b; _imp_PRINTSTRING(_imp_str_literal(" A:")); _imp_WRITE(K->AREA, 1); L_002b:; if (((K->OPER) == (0))) goto L_002c; _imp_SPACE(); _imp_PRINTSTRING((OPERID-1)[K->OPER]); _imp_WRITE(K->OPND, 1); L_002c:; _imp_NEWLINE(); K = K->LINK; goto L_0027; L_0028:; _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block DISPLAYKNOWLEDGE at level 3 void SHOWWHERE( void ) { _imp_SELECTOUTPUT(0); _imp_PRINTSTRING(_imp_str_literal(" at line ")); _imp_WRITE(CURRENTLINE, 0); if ((_imp_strcmp(INCLUDEFILE, _imp_str_literal("")) == 0)) goto L_002d; _imp_PRINTSTRING(_imp_join((_imp_string)_imp_str_literal(" in file "),(_imp_string)INCLUDEFILE)); L_002d:; _imp_NEWLINE(); /* Remove %on %event handler here if present for this block */ return; } // End of block SHOWWHERE at level 3 void FAIL( _imp_string /*%string(63)*/ WHY ) { void PCODE( int S ) { if (((S) < (128))) goto L_002e; _imp_PRINTSTRING(_imp_str_literal("128+")); S = (((int)(S)) - (128)); L_002e:; if ((((32) > (S))) || (((S) > (126)))) goto L_002f; _imp_PRINTSYMBOL(39); _imp_PRINTSYMBOL(S); _imp_PRINTSYMBOL(39); L_002f:; _imp_WRITE(S, 3); /* Remove %on %event handler here if present for this block */ return; } // End of block PCODE at level 4 void ERR( int STREAM ) { int R; STACKFM /*name*/*U; STACKFM /*name*/*S; _imp_SELECTOUTPUT(STREAM); _imp_NEWLINE(); _imp_PRINTSTRING(_imp_str_literal("====> Pass 2 fails -- ")); _imp_PRINTSTRING(WHY); SHOWWHERE(); _imp_PRINTSTRING(_imp_str_literal("Code ")); PCODE(CODE); _imp_PRINTSTRING(_imp_str_literal(" Pending ")); PCODE(PENDING); _imp_NEWLINE(); R = 0; if ((((16)-(1)) % (1)) != 0) _imp_signal(5,1,0,"Illegal cycle R = 1, 1, 16"); L_0030:; if (R == 16) goto L_0031; R += 1; if (((ACTIVITY[R]) <= (0))) goto L_0033; SHOWREG(R); L_0033:; goto L_0030; L_0031:; S = STACK; L_0034:; if (((S) == (NIL))) goto L_0035; _imp_PRINTSTRING(_imp_str_literal("S:")); DISPLAY(S, 5); S = S->STACK; goto L_0034; L_0035:; U = USING; L_0037:; if (((U) == (NIL))) goto L_0038; _imp_PRINTSTRING(_imp_str_literal("U:")); DISPLAY(U, 5); U = U->USING; goto L_0037; L_0038:; _imp_NEWLINE(); _imp_monitor(0, (_imp_current_line != 0 ? _imp_current_line : __LINE__), (_imp_current_file != 0 ? _imp_current_file : __FILE__), __PRETTY_FUNCTION__); /* Remove %on %event handler here if present for this block */ return; } // End of block ERR at level 4 ERR(0); ERR(7); exit(0); return; } // End of block FAIL at level 3 void WARN( int FAULT, _imp_string /*%string(63)*/ WHAT ) { _imp_SELECTOUTPUT(0); INTERFACE->FAULTS = (((int)(INTERFACE->FAULTS)) + (FAULT)); if (((FAULT) != (0))) goto L_003a; _imp_PRINTSTRING(_imp_str_literal("Warning: ")); goto L_003b; L_003a:; _imp_PRINTSTRING(_imp_str_literal("*Error: ")); L_003b:; _imp_PRINTSTRING(WHAT); SHOWWHERE(); _imp_SELECTOUTPUT(2); /* Remove %on %event handler here if present for this block */ return; } // End of block WARN at level 3 void NOTINYET( void ) { FAIL(_imp_str_literal("***Not implemented yet***")); /* Remove %on %event handler here if present for this block */ return; } // End of block NOTINYET at level 3 void DIR1( int CODE ) { FLUSHCODE(); _imp_PRINTSYMBOL(CODE); PENDINGAUTO = 0; /* Remove %on %event handler here if present for this block */ return; } // End of block DIR1 at level 3 void DIR2( int CODE, int ARG1 ) { FLUSHCODE(); _imp_PRINTSYMBOL(CODE); DUMPENCODED(ARG1); if (((CODE) == (3))) goto L_003c; PENDINGAUTO = 0; L_003c:; /* Remove %on %event handler here if present for this block */ return; } // End of block DIR2 at level 3 void DIR3( int CODE, int ARG1, int ARG2 ) { FLUSHCODE(); _imp_PRINTSYMBOL(CODE); DUMPENCODED(ARG1); DUMPENCODED(ARG2); PENDINGAUTO = 0; /* Remove %on %event handler here if present for this block */ return; } // End of block DIR3 at level 3 void DIR4( int CODE, int ARG1, int ARG2, int ARG3 ) { FLUSHCODE(); _imp_PRINTSYMBOL(CODE); DUMPENCODED(ARG1); DUMPENCODED(ARG2); DUMPENCODED(ARG3); PENDINGAUTO = 0; /* Remove %on %event handler here if present for this block */ return; } // End of block DIR4 at level 3 WORKFM /*map*/*WORKAREA( int N ) { WORKVFM /*name*/*W; int E; int S; int X; if (!_imp_on_event(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) goto L_003d; /* TO DO: Remove %on %event handler just before L_003d: if present for this block */ E = _imp_EVENT().EVENT; S = _imp_EVENT().SUB; X = 0; FAIL(_imp_join((_imp_string)_imp_str_literal("too many work areas:"),(_imp_string)_imp_ITOS(E, 0))); L_003d:; if (((((DIAG) & (8))) == (0))) goto L_003e; MONITORN(N, _imp_str_literal("work area")); L_003e:; W = &WORKLIST; L_003f:; if (((N) <= (30))) goto L_0040; N = (((int)(N)) - (30)); if (((W->LINK) != (NIL))) goto L_0042; W->LINK = _imp_NEW(WORKVFMTYPE); *W->LINK = (WORKVFM){ 0 } /* Assign 0's to all fields of record */; L_0042:; W = W->LINK; goto L_003f; L_0040:; /* Remove %on %event handler here if present for this block */ return &W->W[N]; } // End of block WORKAREA at level 3 LABELFM /*map*/*ILABEL( int N ) { int X; int J; ILABELFM /*name*/*I; LABELFM /*name*/*L; if (((N) <= (8191))) goto L_0043; FAIL(_imp_str_literal("internal label/1")); L_0043:; X = (int)((((unsigned int)(N)) >> (8))); I = ILABELS[X].LABEL; if (((I) != (NIL))) goto L_0044; I = _imp_NEW(ILABELFMTYPE); ILABELS[X].LABEL = I; I->LINK = ILABELLIST; ILABELLIST = I; J = (-1); if ((((255)-(0)) % (1)) != 0) _imp_signal(5,1,0,"Illegal cycle J = 0, 1, 255"); L_0045:; if (J == 255) goto L_0046; J += 1; L = &I->LAB[J]; L->LAB = (-2147483648); L->ENV = NIL; goto L_0045; L_0046:; L_0044:; /* Remove %on %event handler here if present for this block */ return &I->LAB[((N) & (255))]; } // End of block ILABEL at level 3 void SELECTAREA( int AREAID, int /*name*/*BASE ) { DIR3(27, (int)((((unsigned int)(AREAID)) >> (8))), *BASE); CURRENTAREA = AREAID; CA = BASE; /* Remove %on %event handler here if present for this block */ return; } // End of block SELECTAREA at level 3 void SELECTCODEAREA( void ) { SELECTAREA(0, &CODEBASE); /* Remove %on %event handler here if present for this block */ return; } // End of block SELECTCODEAREA at level 3 void SELECTCONSTANTAREA( void ) { SELECTAREA(512, &CONSTANTBASE); /* Remove %on %event handler here if present for this block */ return; } // End of block SELECTCONSTANTAREA at level 3 void SELECTOWNAREA( void ) { SELECTAREA(256, &OWNBASE); /* Remove %on %event handler here if present for this block */ return; } // End of block SELECTOWNAREA at level 3 void SELECTOWNARRAYAREA( void ) { SELECTAREA(768, &OWNARRAYBASE); /* Remove %on %event handler here if present for this block */ return; } // End of block SELECTOWNARRAYAREA at level 3 void DUMPBYTE( int B ) { _imp_PRINTSYMBOL(31); _imp_PRINTSYMBOL(1); _imp_PRINTSYMBOL(((B) & (255))); *CA = ((*(int *)(CA)) + (1)); /* Remove %on %event handler here if present for this block */ return; } // End of block DUMPBYTE at level 3 void DUMPHALF( int H ) { _imp_PRINTSYMBOL(31); _imp_PRINTSYMBOL(2); _imp_PRINTSYMBOL(((H) & (255))); _imp_PRINTSYMBOL((((int)((((unsigned int)(H)) >> (8)))) & (255))); *CA = ((*(int *)(CA)) + (2)); /* Remove %on %event handler here if present for this block */ return; } // End of block DUMPHALF at level 3 void DUMPWORD( int N ) { _imp_PRINTSYMBOL(31); _imp_PRINTSYMBOL(4); _imp_PRINTSYMBOL(((N) & (255))); _imp_PRINTSYMBOL((((int)((((unsigned int)(N)) >> (8)))) & (255))); _imp_PRINTSYMBOL((((int)((((unsigned int)(N)) >> (16)))) & (255))); _imp_PRINTSYMBOL((int)((((unsigned int)(N)) >> (24)))); if (((((DIAG) & (1))) == (0))) goto L_0048; if (((CURRENTAREA) != (0))) goto L_0048; DECODE(*CA, N); L_0048:; *CA = ((*(int *)(CA)) + (4)); /* Remove %on %event handler here if present for this block */ return; } // End of block DUMPWORD at level 3 int ACTUALREGISTER( int BASE ) { STACKFM /*name*/*T; if (((BASE) < (128))) goto L_0049; if (((BASE) != (LOCAL))) goto L_004a; BASE = 11; goto L_004b; L_004a:; if (((BASE) <= (128))) goto L_004c; T = DISPLAYINFO(BASE); LOADUP(T); BASE = T->BASE; RELEASEANDDROP(T); L_004c:; L_004b:; L_0049:; /* Remove %on %event handler here if present for this block */ return ACTUAL[BASE]; } // End of block ACTUALREGISTER at level 3 int JUST( int R ) { /* Remove %on %event handler here if present for this block */ return ACTUALREGISTER(R); } // End of block JUST at level 3 int NOTHING( void ) { /* Remove %on %event handler here if present for this block */ return 33554432; } // End of block NOTHING at level 3 int IMMEDIATE( int N ) { int ROT; ROT = 16; if (((N) == (0))) goto L_004d; L_004e:; if (((((N) & (3))) != (0))) goto L_004f; ROT = (((int)(ROT)) - (1)); N = (int)((((unsigned int)(N)) >> (2))); goto L_004e; L_004f:; if ((((int)((((unsigned int)(N)) >> (8)))) == (0))) goto L_0051; /* Remove %on %event handler here if present for this block */ return (-1); L_0051:; L_004d:; /* Remove %on %event handler here if present for this block */ return ((((((((ROT) & (15))) << (8))) | (N))) | (33554432)); } // End of block IMMEDIATE at level 3 int ISHIFT( int RM, int BY, int HOW ) { if (((((HOW) & (128))) == (0))) goto L_0052; FAIL(_imp_str_literal("Bad immediate shift")); L_0052:; /* Remove %on %event handler here if present for this block */ return ((((ACTUALREGISTER(RM)) | (((((BY) & (31))) << (7))))) | (HOW)); } // End of block ISHIFT at level 3 int RSHIFT( int RM, int RS, int HOW ) { if (((((HOW) & (128))) != (0))) goto L_0053; FAIL(_imp_str_literal("Bad register shift")); L_0053:; /* Remove %on %event handler here if present for this block */ return ((((ACTUALREGISTER(RM)) | (((ACTUALREGISTER(RS)) << (8))))) | (((HOW) & (112)))); } // End of block RSHIFT at level 3 int ROT( int N, int BY ) { /* Remove %on %event handler here if present for this block */ return ((((((N) & (255))) | (((BY) << (8))))) | (33554432)); } // End of block ROT at level 3 static int PENDINGPOP = 0; void PLANT1( int FN, int RN, int RD, int X ) { DUMPWORD(((((((((FN) ^ ((-536870912)))) | (((ACTUALREGISTER(RN)) << (16))))) | (((ACTUALREGISTER(RD)) << (12))))) | (X))); if ((((((int)((((unsigned int)(FN)) >> (23)))) & (3))) == (2))) goto L_0054; FORGET(RD); L_0054:; /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT1 at level 3 void PLANT2( int FN, int RD, STACKFM /*name*/*V ) { int N; int SHIFT; int SIGN; int D; int P; int BASE; int VBASE; int EXTRA; EXTRA = 0; STACKFM /*name*/*W; if (((V->TYPE) != (4))) goto L_0055; FN = ((FN) | (4194304)); L_0055:; SIMPLIFY(V); D = V->DISP; if (((V->FORM) != (2))) goto L_0056; D = TYPESIZE[V->TYPE]; FN = ((FN) | (16777216)); goto L_0057; L_0056:; if (((V->FORM) != (3))) goto L_0058; D = (-(TYPESIZE[V->TYPE])); FN = ((FN) | (2097152)); goto L_0057; L_0058:; if (((V->FORM) == (1))) goto L_0059; FAIL(_imp_str_literal("illegal load/store")); L_0059:; L_0057:; if (((V->INDEX) != (NIL))) goto L_005a; if (((((-4095)) > (D))) || (((D) <= (4095)))) goto L_005b; L_0050:; FAIL(_imp_str_literal("Bad displacement")); L_005b:; if (((D) < (0))) goto L_005c; FN = ((FN) | (8388608)); goto L_005d; L_005c:; D = (-(D)); L_005d:; FN = ((FN) | (D)); if (((D) != (0))) goto L_005e; PENDINGAUTON = 0; PENDINGAUTO = V->BASE; PENDINGAUTOCA = *CA; L_005e:; goto L_005f; L_005a:; if (((D) == (0))) goto L_0060; FAIL(_imp_str_literal("Bad index displacement")); L_0060:; N = V->XSIZE; if (((N) != (0))) goto L_0061; FAIL(_imp_str_literal("Zero Xsize")); L_0061:; P = POWER(N); if (((P) < (0))) goto L_0062; LOADUP(V->INDEX); goto L_0063; L_0062:; P = 0; SIGN = ((N) & ((-2147483648))); L_0064:; if (((((N) & (1))) != (0))) goto L_0065; P = (((int)(P)) + (1)); N = (((int)((((unsigned int)(N)) >> (1)))) | (SIGN)); goto L_0064; L_0065:; OPERATE(6, V->INDEX, LITERAL(N)); V->XSIZE = 1; LOADUP(V->INDEX); L_0063:; FN = ((((((FN) | (8388608))) | (33554432))) | (ISHIFT(V->INDEX->BASE, P, 0))); L_005f:; if (((V->BASE) != (0))) goto L_0067; if (((V->RECORD) != (NIL))) goto L_0068; if (((V->AREA) >= (0))) goto L_0069; LOADUP(V); FN = ((FN) | (((ACTUALREGISTER(V->BASE)) << (16)))); goto L_006a; L_0069:; FAIL(_imp_str_literal("No absolute yet")); L_006a:; goto L_006b; L_0068:; LOADUP(V->RECORD); V->BASE = V->RECORD->BASE; DROP(V->RECORD); V->RECORD = NIL; FN = ((FN) | (((ACTUALREGISTER(V->BASE)) << (16)))); L_006b:; goto L_006c; L_0067:; FN = ((FN) | (((ACTUALREGISTER(V->BASE)) << (16)))); L_006c:; if (((((FN) & (((16777216) | (2097152))))) == (0))) goto L_006d; FORGET(V->BASE); L_006d:; FN = ((((FN) ^ (16777216))) | (((ACTUALREGISTER(RD)) << (12)))); DUMPWORD(((FN) ^ ((-536870912)))); if (((EXTRA) == (0))) goto L_006e; RELEASE(EXTRA); L_006e:; if (((((FN) & (1048576))) == (0))) goto L_006f; FORGET(RD); goto L_0070; L_006f:; FORGETDESTINATION(V); REMEMBER(RD, V); L_0070:; /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT2 at level 3 void PLANT3( int FN, int N ) { DUMPWORD(((((FN) ^ ((-536870912)))) | (((N) & (16777215))))); /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT3 at level 3 void PLANT4( int FN, int RN, int OPERAND ) { DUMPWORD(((((((FN) ^ ((-536870912)))) | (((ACTUALREGISTER(RN)) << (16))))) | (((OPERAND) & (65535))))); if (((((FN) & (2097152))) == (0))) goto L_0071; FORGET(RN); L_0071:; /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT4 at level 3 void PLANT5( int FN, int OFFSET ) { DUMPWORD(((((FN) ^ ((-536870912)))) | (((OFFSET) & (16777215))))); /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT5 at level 3 void PLANT6( int OP, int FD, STACKFM /*name*/*V ) { int N; int SHIFT; int SIGN; int D; int P; int BASE; int VBASE; STACKFM /*name*/*W; SIMPLIFY(V); D = V->DISP; if (((((D) & (3))) == (0))) goto L_0072; FAIL(_imp_str_literal("Floating-point alignment")); L_0072:; D = (long)((long)((int)(D)) / (long)((int)(4))); if (((V->FORM) != (2))) goto L_0073; D = (unsigned char)((((unsigned char)(TYPESIZE[V->TYPE])) >> (2))); OP = ((OP) | (16777216)); goto L_0074; L_0073:; if (((V->FORM) != (3))) goto L_0075; D = (-((unsigned char)((((unsigned char)(TYPESIZE[V->TYPE])) >> (2))))); OP = ((OP) | (2097152)); goto L_0074; L_0075:; if (((V->FORM) == (1))) goto L_0076; FAIL(_imp_str_literal("illegal load/store")); L_0076:; L_0074:; if (((V->INDEX) == (NIL))) goto L_0077; if (((((-255)) > (D))) || (((D) <= (255)))) goto L_0079; L_0078:; FAIL(_imp_str_literal("Fp Disp?")); L_0079:; W = COPY(V); LOADUPADDRESS(W); W->TYPE = V->TYPE; W->FORM = 1; PLANT6(OP, FD, W); RELEASEANDDROP(W); /* Remove %on %event handler here if present for this block */ return; L_0077:; if (((D) < (0))) goto L_007a; OP = ((OP) | (8388608)); goto L_007b; L_007a:; D = (-(D)); L_007b:; OP = ((OP) | (D)); if (((V->BASE) != (0))) goto L_007c; if (((V->RECORD) != (NIL))) goto L_007d; if (((V->AREA) >= (0))) goto L_007e; if (((V->TYPE) == (1))) goto L_007f; FAIL(_imp_str_literal("Bad external")); L_007f:; LOADUP(V); OP = ((OP) | (((ACTUALREGISTER(V->BASE)) << (16)))); goto L_0080; L_007e:; FAIL(_imp_str_literal("No absolute yet")); L_0080:; goto L_0081; L_007d:; LOADUP(V->RECORD); V->BASE = V->RECORD->BASE; DROP(V->RECORD); V->RECORD = NIL; OP = ((OP) | (((ACTUALREGISTER(V->BASE)) << (16)))); L_0081:; goto L_0082; L_007c:; OP = ((OP) | (((ACTUALREGISTER(V->BASE)) << (16)))); L_0082:; if (((((OP) & (((16777216) | (2097152))))) == (0))) goto L_0083; FORGET(V->BASE); L_0083:; OP = ((((OP) ^ (16777216))) | (((ACTUALREGISTER(FD)) << (12)))); DUMPWORD(((OP) ^ ((-536870912)))); if (((((OP) & (1048576))) == (0))) goto L_0084; FORGET(FD); goto L_0085; L_0084:; FORGETDESTINATION(V); REMEMBER(FD, V); L_0085:; /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT6 at level 3 void PLANT7( int OP, int FN, int RD, int FM ) { if (((((OP) & (8))) != (0))) goto L_0086; FM = ACTUAL[FM]; L_0086:; DUMPWORD(((((((((OP) ^ ((-536870912)))) | (((ACTUAL[FN]) << (16))))) | (((ACTUAL[RD]) << (12))))) | (FM))); if (((((OP) & (1048576))) != (0))) goto L_0087; FORGET(FN); goto L_0088; L_0087:; FORGET(RD); L_0088:; /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT7 at level 3 void PLANT8( int OP, int FN, int FM ) { if (((((OP) & (8))) != (0))) goto L_0089; FM = ACTUAL[FM]; L_0089:; DUMPWORD(((((((OP) ^ ((-536870912)))) | (((ACTUAL[FN]) << (16))))) | (FM))); /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT8 at level 3 void PLANT9( int OP, int FN, int FD, int FM ) { if (((((OP) & (8))) != (0))) goto L_008a; FM = ACTUAL[FM]; L_008a:; DUMPWORD(((((((((OP) ^ ((-536870912)))) | (((ACTUAL[FN]) << (16))))) | (((ACTUAL[FD]) << (12))))) | (FM))); FORGET(FD); /* Remove %on %event handler here if present for this block */ return; } // End of block PLANT9 at level 3 typedef struct CONSTFM CONSTFM; struct CONSTFM { int N; int STORE; int TYPE; int V1; int R1; int V2; int R2; }; void TESTASSIGNED( void ) { DIR1(24); *CA = ((*(int *)(CA)) + (4)); REFS = (((int)(REFS)) + (1)); /* Remove %on %event handler here if present for this block */ return; } // End of block TESTASSIGNED at level 3 void FLOAT( STACKFM /*name*/*V, int R ) { int N; double LONG; if (((R) != (26))) goto L_008b; R = FPR(); L_008b:; if (!(ICONST(V))) goto L_008c; if ((((0) > (V->DISP))) || (((V->DISP) <= (5)))) goto L_008e; L_008d:; if (((V->DISP) != (10))) goto L_008f; L_008e:; N = V->DISP; if (((V->DISP) != (10))) goto L_0090; N = 7; L_0090:; PLANT9(((234914176) | (8)), 0, R, N); goto L_0091; L_008f:; if (((((-5)) > (V->DISP))) || (((V->DISP) <= (0)))) goto L_0093; L_0092:; if (((V->DISP) != ((-10)))) goto L_0094; L_0093:; N = (-(V->DISP)); if (((N) != (10))) goto L_0095; N = 7; L_0095:; PLANT9(((235962752) | (8)), 0, R, N); goto L_0091; L_0094:; LONG = V->DISP; V->RVAL = LONG; CONVERTFORMAT(V, 7); STOREREALCONSTANT(V); DIR4(12, ACTUAL[R], V->DISP, 1); FORGET(R); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); L_0091:; goto L_0096; L_008c:; LOADUP(V); PLANT7(235405584, R, V->BASE, 0); RELEASE(V->BASE); L_0096:; V->TYPE = 7; V->FORM = 0; V->BASE = R; V->DISP = 0; V->AREA = 0; CLAIM(R); /* Remove %on %event handler here if present for this block */ return; } // End of block FLOAT at level 3 void LOADSAFELY( STACKFM /*name*/*V, int R ) { if (((R) != (17))) goto L_0097; LOADPROTECTED(V); goto L_0098; L_0097:; if (((R) != (26))) goto L_0099; if (FLOATING(V)) goto L_009a; FLOAT(V, 26); L_009a:; LOADPROTECTED(V); goto L_0098; L_0099:; if (((ACTIVITY[R]) != (1))) goto L_009b; if (((V->BASE) == (R))) goto L_009c; L_009b:; HAZARD(R); L_009c:; LOAD(V, R); L_0098:; /* Remove %on %event handler here if present for this block */ return; } // End of block LOADSAFELY at level 3 void CHARACTERISECONSTANT( int N, CONSTFM /*name*/*C ) { int SH; int V; int S; int X; const unsigned char BITS[16] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, }; C->N = N; V = N; if (((V) != (0))) goto L_009d; C->TYPE = 1; /* Remove %on %event handler here if present for this block */ return; L_009d:; if (((V) != ((-1)))) goto L_009e; C->TYPE = 2; /* Remove %on %event handler here if present for this block */ return; L_009e:; X = V; S = 0; L_009f:; S = ((S) + ((int)(BITS[((X) & (15))]))); X = (int)((((unsigned int)(X)) >> (4))); if (((X) == (0))) goto L_00a0; goto L_009f; L_00a0:; C->TYPE = 3; if (((S) <= (16))) goto L_00a2; C->TYPE = 4; V = (~(V)); L_00a2:; if (((V) == (0))) goto L_00a3; SH = 16; L_00a4:; if (((((V) & (3))) != (0))) goto L_00a5; SH = (((int)(SH)) - (1)); V = (int)((((unsigned int)(V)) >> (2))); goto L_00a4; L_00a5:; C->R1 = ((SH) & (15)); C->V1 = ((V) & (255)); V = (int)((((unsigned int)(V)) >> (8))); C->R2 = 0; C->V2 = 0; if (((V) == (0))) goto L_00a7; SH = (((int)(SH)) - (4)); L_00a8:; if (((((V) & (3))) != (0))) goto L_00a9; SH = (((int)(SH)) - (1)); V = (int)((((unsigned int)(V)) >> (2))); goto L_00a8; L_00a9:; C->R2 = ((SH) & (15)); C->V2 = ((V) & (255)); V = (int)((((unsigned int)(V)) >> (8))); L_00a7:; L_00a3:; if (((V) == (0))) goto L_00ab; C->TYPE = 5; L_00ab:; /* Remove %on %event handler here if present for this block */ return; } // End of block CHARACTERISECONSTANT at level 3 void NOWINREGISTER( STACKFM /*name*/*V, int R, int INHERIT ) { if (((INHERIT) == (0))) goto L_00ac; REMEMBER(R, V); L_00ac:; if (((V->INDEX) == (NIL))) goto L_00ad; RELEASEANDDROP(V->INDEX); V->INDEX = NIL; L_00ad:; if (((V->RECORD) == (NIL))) goto L_00ae; RELEASEANDDROP(V->RECORD); V->RECORD = NIL; L_00ae:; RELEASE(V->BASE); V->DATA = (DATAFM){ 0 } /* Assign 0's to all fields of record */; V->BASE = R; V->FORM = 0; V->TYPE = RTYPE[R]; CLAIM(R); /* Remove %on %event handler here if present for this block */ return; } // End of block NOWINREGISTER at level 3 void SIMPLELOAD( STACKFM /*name*/*V, int R ) { STACKFM /*name*/*W; STACKFM /*name*/*B1; STACKFM /*name*/*B2; CONSTFM C; int P; int N; int X; int T; int CHECK; OPTIMISE(V, 1); if (!(INREG(V))) goto L_00af; if (((V->BASE) == (R))) goto L_00a1; if (((R) != (17))) goto L_00b0; if (((V->BASE) <= (17))) goto L_00a1; L_00b0:; if (((R) != (26))) goto L_00b1; if (((V->BASE) < (18))) goto L_00b1; L_00a1:; /* Remove %on %event handler here if present for this block */ return; L_00b1:; L_00af:; if (((R) != (17))) goto L_00b2; R = GPR(); goto L_00b3; L_00b2:; if (((R) != (26))) goto L_00b4; R = FPR(); L_00b4:; L_00b3:; if (((V->BASE) != (R))) goto L_0041; if (((ACTIVITY[R]) == (1))) goto L_00b5; L_0041:; HAZARD(R); L_00b5:; SIMPLIFY(V); if (((R) < (18))) goto L_00b6; if (FLOATING(V)) goto L_00b6; FLOAT(V, R); /* Remove %on %event handler here if present for this block */ return; L_00b6:; if (!(ICONST(V))) goto L_00b7; CHARACTERISECONSTANT(V->DISP, &C); if (((C.TYPE) != (1))) goto L_00b8; PLANT1(27262976, 0, R, ROT(0, 0)); goto L_00b9; L_00b8:; if (((C.TYPE) != (2))) goto L_00ba; PLANT1(31457280, 0, R, ROT(0, 0)); goto L_00b9; L_00ba:; if (((C.TYPE) != (3))) goto L_00bb; PLANT1(27262976, 0, R, ROT(C.V1, C.R1)); if (((C.V2) == (0))) goto L_00bc; PLANT1(25165824, R, R, ROT(C.V2, C.R2)); L_00bc:; goto L_00b9; L_00bb:; if (((C.TYPE) != (4))) goto L_00bd; PLANT1(31457280, 0, R, ROT(C.V1, C.R1)); if (((C.V2) == (0))) goto L_00be; PLANT1(2097152, R, R, ROT(C.V2, C.R2)); L_00be:; goto L_00b9; L_00bd:; CONSTANTBASE = (((((int)(CONSTANTBASE)) + (3))) & ((~(3)))); W = LITERAL(CONSTANTBASE); W->FORM = 1; W->AREA = 512; SELECTCONSTANTAREA(); DUMPWORD(C.N); SELECTCODEAREA(); DIR3(11, ACTUAL[R], (((int)(CONSTANTBASE)) - (4))); FORGET(R); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); RELEASEANDDROP(W); L_00b9:; NOWINREGISTER(V, R, 1); goto L_00bf; L_00b7:; if (((V->FORM) != (0))) goto L_00c0; if (!(INREG(V))) goto L_00c1; if (((V->TYPE) < (6))) goto L_00c2; PLANT9(234914176, 0, R, V->BASE); goto L_00c3; L_00c2:; PLANT1(27262976, 0, R, JUST(V->BASE)); L_00c3:; NOWINREGISTER(V, R, 1); /* Remove %on %event handler here if present for this block */ return; L_00c1:; if (((V->TYPE) < (6))) goto L_00c4; STOREREALCONSTANT(V); DIR4(12, ACTUAL[R], V->DISP, 1); FORGET(R); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); REMEMBER(R, V); NOWINREGISTER(V, R, 1); /* Remove %on %event handler here if present for this block */ return; L_00c4:; if (((V->AREA) != (512))) goto L_00c5; DIR3(10, ACTUAL[R], V->DISP); FORGET(R); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); NOWINREGISTER(V, R, 1); /* Remove %on %event handler here if present for this block */ return; L_00c5:; if (((V->INDEX) == (NIL))) goto L_00c6; if (((V->RECORD) == (NIL))) goto L_00c7; if (((V->BASE) != (0))) goto L_00c7; LOADUP(V->RECORD); V->BASE = V->RECORD->BASE; DROP(V->RECORD); V->RECORD = NIL; L_00c7:; if (((V->BASE) != (0))) goto L_00c8; NOTINYET(); L_00c8:; P = POWER(V->XSIZE); if (((P) < (0))) goto L_00c9; LOADUP(V->INDEX); PLANT1(8388608, V->BASE, R, ISHIFT(V->INDEX->BASE, P, 0)); goto L_00ca; L_00c9:; OPERATE(6, V->INDEX, LITERAL(V->XSIZE)); LOADUP(V->INDEX); V->XSIZE = 1; PLANT1(8388608, V->BASE, R, JUST(V->INDEX->BASE)); L_00ca:; if (((V->DISP) <= (0))) goto L_00cb; CHARACTERISECONSTANT(V->DISP, &C); if (((C.TYPE) != (3))) goto L_00cc; PLANT1(8388608, R, R, ROT(C.V1, C.R1)); if (((C.V2) == (0))) goto L_00cd; PLANT1(8388608, R, R, ROT(C.V2, C.R2)); L_00cd:; goto L_00ce; L_00cc:; if (((C.TYPE) != (5))) goto L_00cf; U_1000:; CONSTANTBASE = (((((int)(CONSTANTBASE)) + (3))) & ((~(3)))); SELECTCONSTANTAREA(); DUMPWORD(V->DISP); SELECTCODEAREA(); X = GPR(); DIR3(11, ACTUAL[X], (((int)(CONSTANTBASE)) - (4))); FORGET(X); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); PLANT1(8388608, V->BASE, R, JUST(X)); goto L_00ce; L_00cf:; FAIL(_imp_str_literal("Bad displacement")); L_00ce:; goto L_00d0; L_00cb:; if (((V->DISP) >= (0))) goto L_00d1; CHARACTERISECONSTANT((-(V->DISP)), &C); if (((C.TYPE) != (3))) goto L_00d2; PLANT1(4194304, R, R, ROT(C.V1, C.R1)); if (((C.V2) == (0))) goto L_00d3; PLANT1(4194304, R, R, ROT(C.V2, C.R2)); L_00d3:; goto L_00d4; L_00d2:; if (((C.TYPE) != (5))) goto L_00d5; W = LITERAL(V->DISP); W->FORM = 1; W->BASE = 16; LOADUP(W); PLANT1(4194304, R, R, JUST(W->BASE)); RELEASEANDDROP(W); goto L_00d4; L_00d5:; goto U_1000; L_00d4:; L_00d1:; L_00d0:; goto L_00d6; L_00c6:; N = V->DISP; P = 8388608; if (((N) >= (0))) goto L_00d7; N = (-(N)); P = 4194304; L_00d7:; CHARACTERISECONSTANT(N, &C); if (((C.TYPE) != (1))) goto L_00d8; PLANT1(27262976, 0, R, JUST(V->BASE)); goto L_00d9; L_00d8:; if (((C.TYPE) != (3))) goto L_00da; PLANT1(P, V->BASE, R, ROT(C.V1, C.R1)); if (((C.V2) == (0))) goto L_00db; PLANT1(P, R, R, ROT(C.V2, C.R2)); L_00db:; goto L_00d9; L_00da:; if (((C.TYPE) != (5))) goto L_00dc; W = LITERAL(C.N); LOADUP(W); PLANT1(P, V->BASE, R, JUST(W->BASE)); RELEASEANDDROP(W); goto L_00d9; L_00dc:; FAIL(_imp_str_literal("negate error")); L_00d9:; L_00d6:; NOWINREGISTER(V, R, 1); goto L_00bf; L_00c0:; if (((V->FORM) != (1))) goto L_00dd; CHECK = ((V->FLAGS) & (1048576)); if (((UNASSIGNED) == (0))) goto L_00de; if (((((V->FLAGS) & (128))) == (0))) goto L_00df; L_00de:; CHECK = 0; L_00df:; if (((V->AREA) == (0))) goto L_00e0; if (((V->AREA) != (512))) goto L_00e1; if (((V->TYPE) != (1))) goto L_00e2; DIR3(11, ACTUAL[R], V->DISP); goto L_00e3; L_00e2:; if (((V->TYPE) != (7))) goto L_00e4; DIR4(12, ACTUAL[R], V->DISP, 1); goto L_00e3; L_00e4:; if (((V->TYPE) != (6))) goto L_00e5; DIR4(12, ACTUAL[R], V->DISP, 0); goto L_00e3; L_00e5:; if (((V->TYPE) == (4))) goto L_00aa; if (((V->TYPE) != (2))) goto L_00e6; L_00aa:; T = V->TYPE; AMAP(V); LOAD(V, R); V->TYPE = T; V->FORM = 1; LOAD(V, R); /* Remove %on %event handler here if present for this block */ return; L_00e6:; FAIL(_imp_str_literal("Bad constant type")); L_00e3:; REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); FORGET(R); NOWINREGISTER(V, R, 1); /* Remove %on %event handler here if present for this block */ return; L_00e1:; if (((V->AREA) >= (0))) goto L_00e7; if (((V->TYPE) == (1))) goto L_00e8; FAIL(_imp_str_literal("Bad external spec type")); L_00e8:; DIR3(13, ACTUAL[R], (-(V->AREA))); FORGET(R); REFS = (((int)(REFS)) + (1)); *CA = ((*(int *)(CA)) + (4)); NOWINREGISTER(V, R, 1); /* Remove %on %event handler here if present for this block */ return; L_00e7:; L_00e0:; if (((V->TYPE) != (4))) goto L_00e9; PLANT2(68157440, R, V); NOWINREGISTER(V, R, 1); if (((CHECK) == (0))) goto L_00ea; PLANT1(((22020096) | (1048576)), R, 0, IMMEDIATE(128)); TESTASSIGNED(); L_00ea:; goto L_00eb; L_00e9:; if (((V->TYPE) != (2))) goto L_00ec; SIMPLIFY(V); if (((V->INDEX) != (NIL))) goto L_00a6; if (((V->RECORD) == (NIL))) goto L_00ed; L_00a6:; LOADUPADDRESS(V); V->TYPE = 2; V->FORM = 1; L_00ed:; B1 = COPY(V); ADVANCE(B1, 4, 0); B2 = COPY(V); ADVANCE(B2, 4, 1); B1->FLAGS = ((B1->FLAGS) | (128)); B2->FLAGS = ((B2->FLAGS) | (128)); LOAD(B2, 15); LOAD(B1, R); LOADUP(B2); if (((CHECK) == (0))) goto L_00ee; PLANT1(((22020096) | (1048576)), B1->BASE, 0, IMMEDIATE(128)); PLANT1(((((22020096) | (1048576))) | ((-536870912))), B2->BASE, 0, IMMEDIATE(128)); TESTASSIGNED(); L_00ee:; PLANT1(27262976, 0, B2->BASE, ISHIFT(B2->BASE, 24, 0)); PLANT1(25165824, B1->BASE, R, ISHIFT(B2->BASE, 16, 64)); RELEASEANDDROPPAIR(B1, B2); NOWINREGISTER(V, R, 1); goto L_00eb; L_00ec:; if (((V->TYPE) != (6))) goto L_00ef; PLANT6(202375424, R, V); NOWINREGISTER(V, R, 1); if (((CHECK) == (0))) goto L_00f0; B1 = LITERAL(0); B1->TYPE = 7; B1->FORM = 1; B1->BASE = 10; LOADUP(B1); RELEASEANDDROP(B1); PLANT8(244379920, B1->BASE, R); TESTASSIGNED(); L_00f0:; goto L_00eb; L_00ef:; if (((V->TYPE) != (7))) goto L_00f1; PLANT6(202408192, R, V); NOWINREGISTER(V, R, 1); if (((CHECK) == (0))) goto L_00f2; B1 = LITERAL(0); B1->TYPE = 7; B1->FORM = 1; B1->BASE = 10; LOADUP(B1); RELEASEANDDROP(B1); PLANT8(244379920, B1->BASE, R); TESTASSIGNED(); L_00f2:; goto L_00eb; L_00f1:; PLANT2(68157440, R, V); NOWINREGISTER(V, R, 1); if (((CHECK) == (0))) goto L_00f3; B1 = LITERAL(0); B1->FORM = 1; B1->BASE = 10; LOADUP(B1); RELEASEANDDROP(B1); PLANT1(((22020096) | (1048576)), B1->BASE, 0, JUST(R)); TESTASSIGNED(); L_00f3:; L_00eb:; goto L_00bf; L_00dd:; if (((V->FORM) != (3))) goto L_00f4; PLANT2(68157440, R, V); FORGET(V->BASE); NOWINREGISTER(V, R, 1); goto L_00bf; L_00f4:; if (((V->FORM) != (2))) goto L_00f5; PLANT2(68157440, R, V); FORGET(V->BASE); NOWINREGISTER(V, R, 1); goto L_00bf; L_00f5:; FAIL(_imp_str_literal("Unknown type for LOAD")); L_00bf:; /* Remove %on %event handler here if present for this block */ return; } // End of block SIMPLELOAD at level 3 void MULTIPLY( STACKFM /*name*/*V, STACKFM /*name*/*W, int R ) { void CMUL( int FROM, int TO, int BY ) { int X; int OP; int WITH; int T; if (((((BY) & (1))) != (0))) goto L_00f6; OP = 27262976; WITH = 0; goto L_00f7; L_00f6:; if (((((BY) & (3))) != (1))) goto L_00f8; OP = 8388608; WITH = FROM; goto L_00f7; L_00f8:; BY = (((int)(BY)) + (1)); OP = 6291456; WITH = FROM; L_00f7:; X = 0; L_00f9:; X = (((int)(X)) + (1)); BY = (int)((((unsigned int)(BY)) >> (1))); if (((((BY) & (1))) != (0))) goto L_00fa; goto L_00f9; L_00fa:; if (((BY) != (1))) goto L_00fc; T = FROM; goto L_00fd; L_00fc:; T = GPR(); CMUL(FROM, T, BY); L_00fd:; PLANT1(OP, WITH, TO, ISHIFT(T, X, 0)); /* Remove %on %event handler here if present for this block */ return; } // End of block CMUL at level 4 int L; int INV; STACKFM /*name*/*Z; if (!(ICONST(W))) goto L_00fe; LOADSAFELY(V, R); if (((W->DISP) != (0))) goto L_00ff; FAIL(_imp_str_literal("Zero multiply")); L_00ff:; CMUL(V->BASE, V->BASE, W->DISP); goto L_0100; L_00fe:; OPTIMISE(V, 1); OPTIMISE(W, 1); Z = LITERAL(0); if (((R) == (17))) goto L_0101; if (((R) == (26))) goto L_0101; if (((ACTIVITY[R]) == (0))) goto L_0102; L_0101:; LOADPROTECTED(Z); goto L_0103; L_0102:; LOAD(Z, R); L_0103:; LOADPROTECTED(V); LOADPROTECTED(W); INV = INVERT; INVERT = 0; L = NEWLABEL(); DEFINELABEL(L); PLANT1(((27262976) | (1048576)), 0, W->BASE, ISHIFT(W->BASE, 1, 32)); PLANT1(((8388608) | ((-1073741824))), Z->BASE, Z->BASE, JUST(V->BASE)); PLANT1(27262976, 0, V->BASE, ISHIFT(V->BASE, 1, 0)); JUMPTO(L, 6); RELEASE(V->BASE); V->BASE = Z->BASE; DROP(Z); LOAD(V, R); INVERT = INV; L_0100:; RELEASEANDDROP(W); /* Remove %on %event handler here if present for this block */ return; } // End of block MULTIPLY at level 3 void DIVIDE( STACKFM /*name*/*V, STACKFM /*name*/*W, int R, int Q, int U ) { int P; int L; int OP; if (((Q) == (0))) goto L_0104; if (((U) != (0))) goto L_0105; L_0104:; if (!(ICONST(W))) goto L_0105; P = POWER(W->DISP); if (((P) <= (0))) goto L_0106; if (((U) != (0))) goto L_0107; if (((Q) != (0))) goto L_0108; W->DISP = P; OP = 15; goto L_0109; L_0108:; W->DISP = (~((((-1)) << (P)))); OP = 9; L_0109:; OPERATE(OP, V, W); LOAD(V, R); /* Remove %on %event handler here if present for this block */ return; L_0107:; if (((P) > (8))) goto L_010a; LOADSAFELY(V, R); PLANT1(((22020096) | (1048576)), V->BASE, 0, NOTHING()); L = NEWLABEL(); JUMPTO(L, 5); PLANT1(8388608, V->BASE, V->BASE, ROT((((int)(W->DISP)) - (1)), 0)); DEFINELABEL(L); PLANT1(27262976, 0, V->BASE, ISHIFT(V->BASE, P, 64)); DROP(W); /* Remove %on %event handler here if present for this block */ return; L_010a:; L_0106:; L_0105:; if (((U) != (0))) goto L_010b; OP = 49; goto L_010c; L_010b:; OP = 38; L_010c:; LOADSAFELY(V, 2); LOADPAIR(V, 2, W, 3); PRIM(OP); if (((Q) != (0))) goto L_010d; RELEASE(2); CLAIM(1); V->BASE = 1; L_010d:; LOAD(V, R); RELEASEANDDROP(W); /* Remove %on %event handler here if present for this block */ return; } // End of block DIVIDE at level 3 void COMPLEXLOAD( STACKFM /*name*/*V, int R ) { static int sw1_C_idx; static const void * /*SWITCH*/ sw1_C[29] = { &&sw1_C_1, &&sw1_C_2, &&sw1_C_3, &&sw1_C_4, &&sw1_C_5, &&sw1_C_6, &&sw1_C_7, &&sw1_C_8, &&sw1_C_9, &&sw1_C_10, &&sw1_C_11, &&sw1_C_12, &&sw1_C_13, &&sw1_C_14, &&sw1_C_15, &&sw1_C_16, &&sw1_C_17, &&sw1_C_18, &&sw1_C_19, &&sw1_C_20, &&sw1_C_21, &&sw1_C_22, &&sw1_C_23, &&sw1_C_24, &&sw1_C_25, &&sw1_C_26, &&sw1_C_27, &&sw1_C_28, &&sw1_C_29, }; static int sw2_C2_idx; static const void * /*SWITCH*/ sw2_C2[29] = { &&sw2_C2_1, &&sw2_C2_2, &&sw2_C2_3, &&sw2_C2_4, &&sw2_C2_5, &&sw2_C2_6, &&sw2_C2_7, &&sw2_C2_8, &&sw2_C2_9, &&sw2_C2_10, &&sw2_C2_11, &&sw2_C2_12, &&sw2_C2_13, &&sw2_C2_14, &&sw2_C2_15, &&sw2_C2_16, &&sw2_C2_17, &&sw2_C2_18, &&sw2_C2_19, &&sw2_C2_20, &&sw2_C2_21, &&sw2_C2_22, &&sw2_C2_23, &&sw2_C2_24, &&sw2_C2_25, &&sw2_C2_26, &&sw2_C2_27, &&sw2_C2_28, &&sw2_C2_29, }; const int REALOP[7] = { 235962752, 237011328, 234881408, 236978560, 235929984, 239075712, 241172864, }; STACKFM /*name*/*W; STACKFM /*name*/*B; CONSTFM CX; int OPER; int OP; int REG2; int N; int PA; W = V->LINK; V->LINK = NIL; OPER = V->OPER; V->OPER = 0; if (((OPER) >= (23))) goto L_010e; if (((R) < (18))) goto L_010f; L_010e:; if (((R) > (17))) goto L_0110; FAIL(_imp_str_literal("real load?")); L_0110:; if (((OPER) != (29))) goto L_0111; LOADSAFELY(V, 18); LOADPAIR(V, 18, W, 1); PRIM(6); RELEASEANDDROP(W); LOAD(V, R); /* Remove %on %event handler here if present for this block */ return; L_0111:; if (((OPER) >= (23))) goto L_0112; V->LINK = W; V->OPER = OPER; LOAD(V, 17); LOAD(V, R); /* Remove %on %event handler here if present for this block */ return; L_0112:; LOADSAFELY(V, R); OP = (REALOP-23)[OPER]; if (((W) != (NIL))) goto L_0113; PLANT9(OP, 0, V->BASE, V->BASE); goto L_0114; L_0113:; if (!(ICONST(W))) goto L_0115; if ((((0) > (W->DISP))) || (((W->DISP) <= (5)))) goto L_0117; L_0116:; if (((W->DISP) != (10))) goto L_0115; L_0117:; REG2 = W->DISP; if (((REG2) != (10))) goto L_0118; REG2 = 7; L_0118:; OP = ((OP) | (8)); goto L_0119; L_0115:; LOAD(W, 26); REG2 = W->BASE; L_0119:; PLANT9(OP, V->BASE, V->BASE, REG2); L_0114:; goto U_1001; L_010f:; if (((OPER) != (8))) goto L_011a; LOADSAFELY(V, 2); LOADPAIR(V, 2, W, 3); PRIM(5); RELEASEANDDROP(W); LOAD(V, R); /* Remove %on %event handler here if present for this block */ return; L_011a:; if (((OPER) != (17))) goto L_011b; LOADSAFELY(V, 2); LOADPAIR(V, 2, W, 3); PRIM(42); RELEASEANDDROP(W); /* Remove %on %event handler here if present for this block */ return; L_011b:; if (((OPER) != (6))) goto L_011c; MULTIPLY(V, W, R); /* Remove %on %event handler here if present for this block */ return; L_011c:; if (((OPER) != (7))) goto L_011d; DIVIDE(V, W, R, 0, 1); /* Remove %on %event handler here if present for this block */ return; L_011d:; if (((OPER) != (16))) goto L_011e; DIVIDE(V, W, R, 1, 1); /* Remove %on %event handler here if present for this block */ return; L_011e:; if (((OPER) != (19))) goto L_011f; DIVIDE(V, W, R, 0, 0); /* Remove %on %event handler here if present for this block */ return; L_011f:; if (((OPER) != (20))) goto L_0120; DIVIDE(V, W, R, 1, 0); /* Remove %on %event handler here if present for this block */ return; L_0120:; if (((OPER) != (5))) goto L_0121; if (!(ICONST(V))) goto L_0121; CHARACTERISECONSTANT(V->DISP, &CX); if (((CX.TYPE) != (3))) goto L_0122; LOAD(W, R); R = W->BASE; PLANT1(6291456, W->BASE, R, ROT(CX.V1, CX.R1)); if (((CX.V2) == (0))) goto L_0123; PLANT1(8388608, R, R, ROT(CX.V2, CX.R2)); L_0123:; goto U_1002; L_0122:; if (((CX.TYPE) != (2))) goto L_0124; LOADSAFELY(W, R); R = W->BASE; PLANT1(31457280, 0, R, JUST(W->BASE)); U_1002:; V->BASE = R; V->DISP = 0; W->BASE = 0; goto U_1001; L_0124:; L_0121:; if (((PENDINGAUTO) == (0))) goto L_0125; if (((OPER) != (4))) goto L_0125; if (!(ICONST(W))) goto L_0125; if (((((-4095)) > (W->DISP))) || (((W->DISP) > (4095)))) goto L_0125; PA = PENDINGAUTO; OPTIMISE(V, 1); if (!(INREG(V))) goto L_0126; if (((V->BASE) != (PA))) goto L_0126; if (((PENDINGAUTON) == (0))) goto L_0127; if (((_imp_IMOD((int)((((unsigned int)(W->DISP)) >> (2))))) > (255))) goto L_0126; L_0127:; DIR3(16, ((*(int *)(CA)) - (PENDINGAUTOCA)), (int)((((unsigned int)(W->DISP)) >> (PENDINGAUTON)))); FORGET(PA); DROP(W); LOADSAFELY(V, R); /* Remove %on %event handler here if present for this block */ return; L_0126:; L_0125:; if (((V->TYPE) != (2))) goto L_0128; if (((OPER) == (9))) goto L_0129; if (((OPER) != (12))) goto L_0128; L_0129:; if (!(ICONST(W))) goto L_0128; N = W->DISP; if (((OPER) != (12))) goto L_012a; N = (~(N)); L_012a:; if ((((int)((((unsigned int)(N)) >> (16)))) != (0))) goto L_012b; RELEASEANDDROP(W); if (((N) > (255))) goto L_012c; ADVANCE(V, 4, 0); if (((N) == (255))) goto L_012d; OPERATE(9, V, LITERAL(N)); L_012d:; LOAD(V, R); goto L_012e; L_012c:; if (((((N) & (255))) != (0))) goto L_012f; V->OPER = 0; *V->LINK = (STACKFM){ 0 } /* Assign 0's to all fields of record */; ADVANCE(V, 4, 1); if ((((int)((((unsigned int)(N)) >> (8)))) == (255))) goto L_0130; OPERATE(9, V, LITERAL((int)((((unsigned int)(N)) >> (8))))); L_0130:; OPERATE(14, V, LITERAL(8)); LOAD(V, R); goto L_012e; L_012f:; B = COPY(V); ADVANCE(B, 4, 1); if ((((int)((((unsigned int)(N)) >> (8)))) == (255))) goto L_0131; OPERATE(9, B, LITERAL((int)((((unsigned int)(N)) >> (8))))); L_0131:; ADVANCE(V, 4, 0); if (((((N) & (255))) == (255))) goto L_0132; OPERATE(9, V, LITERAL(((N) & (255)))); L_0132:; LOADUP(B); LOADSAFELY(V, R); LOADUP(B); LOADSAFELY(V, R); PLANT1(25165824, V->BASE, V->BASE, ISHIFT(B->BASE, 8, 0)); RELEASEANDDROP(B); L_012e:; /* Remove %on %event handler here if present for this block */ return; L_012b:; L_0128:; LOADSAFELY(V, R); R = V->BASE; if (((W) == (NIL))) goto L_0133; if (!(ICONST(W))) goto L_0134; if (((OPER) != (21))) goto L_0135; PLANT1(27262976, 0, R, ISHIFT(V->BASE, ((W->DISP) & (65535)), 32)); N = (((-1)) << ((int)((((unsigned int)(W->DISP)) >> (16))))); PLANT1(0, R, R, IMMEDIATE((~(N)))); goto U_1001; L_0135:; if (((OPER) != (9))) goto L_0136; if (((IMMEDIATE(W->DISP)) >= (0))) goto L_0136; OPER = 12; W->DISP = (~(W->DISP)); L_0136:; CHARACTERISECONSTANT(W->DISP, &CX); if (((CX.TYPE) != (2))) goto L_0137; if (((OPER) != (4))) goto L_0138; PLANT1(4194304, V->BASE, R, ROT(1, 0)); goto U_1001; L_0138:; if (((OPER) != (5))) goto L_0139; PLANT1(8388608, V->BASE, R, ROT(1, 0)); goto U_1001; L_0139:; if (((OPER) != (11))) goto L_013a; PLANT1(31457280, 0, R, JUST(V->BASE)); goto U_1001; L_013a:; goto L_013b; L_0137:; if (((CX.TYPE) != (3))) goto L_013c; sw2_C2_idx = OPER; if ((1 <= sw2_C2_idx) && (sw2_C2_idx <= 29)) goto *(sw2_C2-1)[sw2_C2_idx]; /* Bounds=1:29 */ else { /*_imp_signal(8, 2, sw2_C2_idx);*/ fprintf(stderr, "%%SWITCH index C2(%d) not in range 1:29 at %s:%d\n", sw2_C2_idx, (_imp_current_file != 0 ? _imp_current_file : __FILE__), (_imp_current_line != 0 ? _imp_current_line : __LINE__)); exit(1); } sw2_C2_4:; OP = 8388608; goto U_1003; sw2_C2_5:; OP = 4194304; goto U_1003; sw2_C2_12:; OP = 29360128; goto U_1003; sw2_C2_10:; OP = 25165824; goto U_1003; sw2_C2_11:; OP = 2097152; goto U_1003; sw2_C2_9:; if (((CX.V2) != (0))) goto L_013d; OP = 0; goto U_1003; L_013d:; goto U_1004; U_1003:; PLANT1(OP, V->BASE, R, ROT(CX.V1, CX.R1)); if (((CX.V2) == (0))) goto L_013e; PLANT1(OP, R, R, ROT(CX.V2, CX.R2)); L_013e:; goto U_1001; sw2_C2_14:; if ((((int)((((unsigned int)(W->DISP)) >> (5)))) == (0))) goto L_013f; WARN(1, _imp_str_literal("Dubious shift")); L_013f:; PLANT1(27262976, 0, R, ISHIFT(V->BASE, ((W->DISP) & (31)), 0)); goto U_1001; sw2_C2_15:; if ((((int)((((unsigned int)(W->DISP)) >> (5)))) == (0))) goto L_0140; WARN(1, _imp_str_literal("Dubious shift")); L_0140:; PLANT1(27262976, 0, R, ISHIFT(V->BASE, ((W->DISP) & (31)), 32)); goto U_1001; L_013c:; if (((CX.TYPE) != (4))) goto L_0141; CHARACTERISECONSTANT((-(W->DISP)), &CX); if (((CX.TYPE) == (3))) goto L_0142; goto U_1004; L_0142:; if (((OPER) != (4))) goto L_0143; OP = 4194304; goto U_1003; L_0143:; if (((OPER) != (5))) goto L_0144; OP = 8388608; goto U_1003; L_0144:; if (((OPER) == (15))) goto L_0145; if (((OPER) != (14))) goto L_0146; L_0145:; WARN(1, _imp_str_literal("Dubious shift")); L_0146:; L_0141:; L_013b:; L_0134:; L_0133:; U_1004:; sw2_C2_default:; if (((W) == (NIL))) goto L_0147; LOADUP(W); L_0147:; sw1_C_idx = OPER; if ((1 <= sw1_C_idx) && (sw1_C_idx <= 29)) goto *(sw1_C-1)[sw1_C_idx]; /* Bounds=1:29 */ else { /*_imp_signal(8, 2, sw1_C_idx);*/ fprintf(stderr, "%%SWITCH index C(%d) not in range 1:29 at %s:%d\n", sw1_C_idx, (_imp_current_file != 0 ? _imp_current_file : __FILE__), (_imp_current_line != 0 ? _imp_current_line : __LINE__)); exit(1); } sw1_C_1:; PLANT1(31457280, 0, R, JUST(V->BASE)); goto U_1005; sw1_C_2:; PLANT1(6291456, V->BASE, R, NOTHING()); goto U_1005; sw1_C_3:; PLANT1(((8388608) | (1048576)), R, R, NOTHING()); void _BLOCK_1_LEVEL_3_(void) { int LABEL; LABEL = NEWLABEL(); JUMPTO(LABEL, 5); PLANT1(6291456, R, R, NOTHING()); DEFINELABEL(LABEL); return; } // End of block _BLOCK_1_LEVEL_3_ at level 4 _BLOCK_1_LEVEL_3_(); goto U_1005; sw1_C_4:; PLANT1(8388608, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_5:; PLANT1(4194304, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_12:; PLANT1(29360128, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_9:; PLANT1(0, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_10:; PLANT1(25165824, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_11:; PLANT1(2097152, V->BASE, R, JUST(W->BASE)); goto U_1001; sw1_C_14:; PLANT1(27262976, 0, R, RSHIFT(V->BASE, W->BASE, 144)); goto U_1001; sw1_C_15:; PLANT1(27262976, 0, R, RSHIFT(V->BASE, W->BASE, 176)); goto U_1001; sw1_C_default:; NOTINYET(); U_1001:; if (((W) == (NIL))) goto L_0148; RELEASEANDDROP(W); L_0148:; U_1005:; /* Remove %on %event handler here if present for this block */ return; sw2_C2_1:; sw2_C2_2:; sw2_C2_3:; sw2_C2_6:; sw2_C2_7:; sw2_C2_8:; sw2_C2_13:; sw2_C2_16:; sw2_C2_17:; sw2_C2_18:; sw2_C2_19:; sw2_C2_20:; sw2_C2_21:; sw2_C2_22:; sw2_C2_23:; sw2_C2_24:; sw2_C2_25:; sw2_C2_26:; sw2_C2_27:; sw2_C2_28:; sw2_C2_29:; goto sw2_C2_default; sw1_C_6:; sw1_C_7:; sw1_C_8:; sw1_C_13:; sw1_C_16:; sw1_C_17:; sw1_C_18:; sw1_C_19:; sw1_C_20:; sw1_C_21:; sw1_C_22:; sw1_C_23:; sw1_C_24:; sw1_C_25:; sw1_C_26:; sw1_C_27:; sw1_C_28:; sw1_C_29:; goto sw1_C_default; } // End of block COMPLEXLOAD at level 3 void LOAD( STACKFM /*name*/*V, int R ) { if (((V->OPER) != (0))) goto L_0149; SIMPLELOAD(V, R); goto L_014a; L_0149:; COMPLEXLOAD(V, R); L_014a:; if (((((DIAG) & (32))) == (0))) goto L_014b; MONITOR(V, _imp_str_literal("<-Load")); L_014b:; /* Remove %on %event handler here if present for this block */ return; } // End of block LOAD at level 3 void LOADPAIR( STACKFM /*name*/*A, int AR, STACKFM /*name*/*B, int BR ) { if (((B->OPER) != (0))) goto L_014c; if (((B->RECORD) != (NIL))) goto L_014c; if (((B->INDEX) == (NIL))) goto L_014d; L_014c:; LOAD(B, BR); LOAD(A, AR); LOAD(B, BR); goto L_014e; L_014d:; LOAD(A, AR); LOAD(B, BR); LOAD(A, AR); L_014e:; /* Remove %on %event handler here if present for this block */ return; } // End of block LOADPAIR at level 3 void LOADTRIO( STACKFM /*name*/*A, int AR, STACKFM /*name*/*B, int BR, STACKFM /*name*/*C, int CR ) { if (((B->OPER) != (0))) goto L_014f; if (((B->RECORD) != (NIL))) goto L_014f; if (((B->INDEX) == (NIL))) goto L_0150; L_014f:; LOAD(B, BR); LOADPAIR(A, AR, C, CR); goto L_0151; L_0150:; if (((C->OPER) != (0))) goto L_0152; if (((C->RECORD) != (NIL))) goto L_0152; if (((C->INDEX) == (NIL))) goto L_0153; L_0152:; LOAD(C, BR); LOADPAIR(A, AR, B, BR); goto L_0151; L_0153:; LOAD(A, AR); LOADPAIR(B, BR, C, CR); L_0151:; LOAD(A, AR); LOAD(B, BR); LOAD(C, CR); /* Remove %on %event handler here if present for this block */ return; } // End of block LOADTRIO at level 3 /* Procedure parameter. probably no args given yet. */ // 1 %routine Repeat(%routine Body, %record(Stackfm)%name Times, %integer Inc, How) void REPEAT( void BODY(