%
% COMP-DECLS.RED - Machine-independent declaractions used by the compiler
%
% Author: Eric Benson
% Symbolic Computation Group
% Computer Science Dept.
% University of Utah
% Date: 16 October 1981
% Copyright (c) 1981 University of Utah
%
% <PSL.COMP>COMP-DECLS.RED.16, 3-Sep-82 09:46:43, Edit by BENSON
% Added PA1REFORMFN for WNOT
% <PSL.COMP>COMP-DECLS.RED.5, 3-Dec-82 18:20:08, Edit by PERDUE
% Removed PA1REFORMFN for NE
% <PSL.COMP>COMP-DECLS.RED.6, 24-Jan-83 16:04:00, Edit by MLGriss
% Changed W to !%!%!%W in the EQCAR to avoid subst W into EQCAR form
% Pass 1 functions
put('Apply, 'PA1FN, '!&PaApply);
PUT('ASSOC, 'PA1FN, '!&PAASSOC);
PUT('EQUAL, 'PA1FN, '!&PAEQUAL);
PUT('MEMBER, 'PA1FN, '!&PAMEMBER);
put('Catch, 'Pa1Fn, '!&PaCatch);
PUT('COND, 'PA1FN, '!&PACOND);
PUT('DIFFERENCE,'PA1FN, '!&PADIFF);
PUT('FUNCTION, 'PA1FN, '!&PAFUNCTION);
PUT('GETMEM, 'PA1FN, '!&PAGETMEM);
PUT('GO, 'PA1FN, '!&PAIDENT);
PUT('CASE, 'PA1FN, '!&PACASE);
PUT('INTERN, 'PA1FN, '!&PAINTERN);
PUT('LAMBDA, 'PA1FN, '!&PALAMBDA);
PUT('LESSP, 'PA1FN, '!&PALESSP);
PUT('LIST, 'PA1FN, '!&PALIST);
PUT('LOC, 'PA1REFORMFN, '!&REFORMLOC);
PUT('MAP, 'PA1FN, '!&PAMAP);
PUT('MAPC, 'PA1FN, '!&PAMAPC);
PUT('MAPCAN, 'PA1FN, '!&PAMAPCAN);
PUT('MAPCAR, 'PA1FN, '!&PAMAPCAR);
PUT('MAPCON, 'PA1FN, '!&PAMAPCON);
PUT('MAPLIST, 'PA1FN, '!&PAMAPLIST);
PUT('MINUS, 'PA1FN, '!&PAMINUS);
PUT('NULL, 'PA1REFORMFN, '!&REFORMNULL);
% PUT('NE, 'PA1REFORMFN, '!&REFORMNE); % Perdue 12/3/82
put('Nth, 'Pa1Fn, '!&PaNth);
put('PNth, 'Pa1Fn, '!&PaPNth);
PUT('PLUS2, 'PA1FN, '!&PAPLUS2);
PUT('PROG, 'PA1FN, '!&PAPROG);
PUT('PUTMEM, 'PA1FN, '!&PAPUTMEM);
PUT('PUTLISPVAR,'PA1FN, '!&PAPUTLISPVAR);
PUT('LISPVAR, 'PA1FN, '!&PALISPVAR);
PUT('QUOTE, 'PA1FN, '!&PAIDENT);
PUT('WCONST, 'PA1FN, '!&PAWCONST);
PUT('SETQ, 'PA1FN, '!&PASETQ);
PUT('WPLUS2, 'PA1FN, '!&GROUP);
PUT('WDIFFERENCE,'PA1FN, '!&GROUP);
PUT('WMINUS, 'PA1FN, '!&GROUP);
PUT('WTIMES2, 'PA1FN, '!&ASSOCOP);
PUT('WAND, 'PA1FN, '!&ASSOCOP);
PUT('WOR, 'PA1FN, '!&ASSOCOP);
PUT('WXOR, 'PA1FN, '!&ASSOCOP);
PUT('WPLUS2, 'PA1ALGFN, '!&GROUPV);
PUT('WDIFFERENCE,'PA1ALGFN, '!&GROUPV);
PUT('WMINUS, 'PA1ALGFN, '!&GROUPV);
PUT('WTIMES2, 'PA1ALGFN, '!&ASSOCOPV);
PUT('WAND, 'PA1ALGFN, '!&ASSOCOPV);
PUT('WOR, 'PA1ALGFN, '!&ASSOCOPV);
PUT('WXOR, 'PA1ALGFN, '!&ASSOCOPV);
PUT('WSHIFT, 'PA1REFORMFN, '!&DOOP);
PUT('WNOT, 'PA1REFORMFN, '!&DOOP);
put('WTimes2, 'PA1Reformfn, function !&PaReformWTimes2);
% Simplification
PUT('WPLUS2, 'DOFN, 'PLUS2);
PUT('WDIFFERENCE,'DOFN, 'DIFFERENCE);
PUT('WMINUS, 'DOFN, 'MINUS);
PUT('WTIMES2, 'DOFN, 'TIMES2);
PUT('WQUOTIENT, 'DOFN, 'QUOTIENT);
PUT('WREMAINDER,'DOFN, 'REMAINDER);
PUT('WAND, 'DOFN, 'LAND);
PUT('WOR, 'DOFN, 'LOR);
PUT('WXOR, 'DOFN, 'LXOR);
PUT('WNOT, 'DOFN, 'LNOT);
PUT('WSHIFT, 'DOFN, 'LSHIFT);
PUT('WTIMES2, 'ONE, 1);
PUT('WTIMES2, 'ZERO, 0);
PUT('WPLUS2, 'ONE, 0);
PUT('WPLUS2, 'GROUPOPS, '(WPLUS2 WDIFFERENCE WMINUS));
PUT('WMINUS, 'GROUPOPS, '(WPLUS2 WDIFFERENCE WMINUS));
PUT('WDIFFERENCE,'GROUPOPS, '(WPLUS2 WDIFFERENCE WMINUS));
PUT('WAND, 'ZERO, 0);
PUT('WOR, 'ONE, 0);
PUT('WXOR, 'ONE, 0);
% Compile functions
PUT('AND, 'COMPFN, '!&COMANDOR);
PUT('APPLY, 'COMPFN, '!&COMAPPLY);
PUT('COND, 'COMPFN, '!&COMCOND);
PUT('CONS, 'COMPFN, '!&COMCONS);
PUT('GO, 'COMPFN, '!&COMGO);
PUT('CASE, 'COMPFN, '!&COMCASE);
PUT('OR, 'COMPFN, '!&COMANDOR);
PUT('PROG, 'COMPFN, '!&COMPROG);
PUT('PROG2, 'COMPFN, '!&COMPROGN);
PUT('PROGN, 'COMPFN, '!&COMPROGN);
PUT('RETURN, 'COMPFN, '!&COMRETURN);
% Patterns for the tests and SETQ
PUT('EQ, 'OPENTST, '(TSTPAT !*JUMPEQ));
PUT('EQ, 'OPENFN, '(TVPAT !*JUMPEQ));
PUT('NE, 'OPENTST, '(TSTPAT !*JUMPNOTEQ));
PUT('NE, 'OPENFN, '(TVPAT !*JUMPNOTEQ));
PUT('AND, 'OPENTST, '!&TSTANDOR);
PUT('OR, 'OPENTST, '!&TSTANDOR);
PUT('PAIRP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE PAIR));
PUT('ATOM, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE PAIR));
PUT('STRINGP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE STR));
PUT('NOTSTRINGP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE STR));
PUT('VECTORP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE VECT));
PUT('NOTVECTORP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE VECT));
PUT('CODEP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE CODE));
PUT('NOTCODEP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE CODE));
PUT('FLOATP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE FLTN));
PUT('NOTFLOATP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE FLTN));
PUT('INTP, 'OPENTST, '(TSTPAT2 !*JUMPINTYPE POSINT));
PUT('NOTINTP, 'OPENTST, '(TSTPAT2 !*JUMPNOTINTYPE POSINT));
PUT('FIXP, 'OPENTST, '(TSTPAT2 !*JUMPINTYPE BIGN));
PUT('NOTFIXP, 'OPENTST, '(TSTPAT2 !*JUMPNOTINTYPE BIGN));
PUT('NUMBERP, 'OPENTST, '(TSTPAT2 !*JUMPINTYPE FLTN));
PUT('NOTNUMBERP,'OPENTST, '(TSTPAT2 !*JUMPNOTINTYPE FLTN));
PUT('FIXNP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE FIXN));
PUT('NOTFIXNP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE FIXN));
PUT('BIGP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE BIGN));
PUT('NOTBIGP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE BIGN));
PUT('POSINTP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE POSINT));
PUT('NOTPOSINTP,'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE POSINT));
PUT('NEGINTP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE NEGINT));
PUT('NOTNEGINTP,'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE NEGINT));
PUT('IDP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE ID));
PUT('NOTIDP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE ID));
PUT('BYTESP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE BYTES));
PUT('NOTBYTESP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE BYTES));
PUT('WRDSP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE WRDS));
PUT('NOTWRDSP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE WRDS));
PUT('HALFWORDSP, 'OPENTST, '(TSTPAT2 !*JUMPTYPE HALFWORDS));
PUT('NOTHALFWORDSP, 'OPENTST, '(TSTPAT2 !*JUMPNOTTYPE HALFWORDS));
PUT('PAIRP, 'OPENFN, '(TVPAT1 !*JUMPTYPE PAIR));
PUT('ATOM, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE PAIR));
PUT('STRINGP, 'OPENFN, '(TVPAT1 !*JUMPTYPE STR));
PUT('NOTSTRINGP,'OPENFN, '(TVPAT1 !*JUMPNOTTYPE STR));
PUT('VECTORP, 'OPENFN, '(TVPAT1 !*JUMPTYPE VECT));
PUT('NOTVECTORP,'OPENFN, '(TVPAT1 !*JUMPNOTTYPE VECT));
PUT('CODEP, 'OPENFN, '(TVPAT1 !*JUMPTYPE CODE));
PUT('NOTCODEP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE CODE));
PUT('FLOATP, 'OPENFN, '(TVPAT1 !*JUMPTYPE FLTN));
PUT('NOTFLOATP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE FLTN));
PUT('INTP, 'OPENFN, '(TVPAT1 !*JUMPINTYPE POSINT));
PUT('NOTINTP, 'OPENFN, '(TVPAT1 !*JUMPNOTINTYPE POSINT));
PUT('FIXP, 'OPENFN, '(TVPAT1 !*JUMPINTYPE BIGN));
PUT('NOTFIXP, 'OPENFN, '(TVPAT1 !*JUMPNOTINTYPE BIGN));
PUT('NUMBERP, 'OPENFN, '(TVPAT1 !*JUMPINTYPE FLTN));
PUT('NOTNUMBERP,'OPENFN, '(TVPAT1 !*JUMPNOTINTYPE FLTN));
PUT('FIXNP, 'OPENFN, '(TVPAT1 !*JUMPTYPE FIXN));
PUT('NOTFIXNP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE FIXN));
PUT('BIGP, 'OPENFN, '(TVPAT1 !*JUMPTYPE BIGN));
PUT('NOTBIGP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE BIGN));
PUT('POSINTP, 'OPENFN, '(TVPAT1 !*JUMPTYPE POSINT));
PUT('NOTPOSINTP,'OPENFN, '(TVPAT1 !*JUMPNOTTYPE POSINT));
PUT('NEGINTP, 'OPENFN, '(TVPAT1 !*JUMPTYPE NEGINT));
PUT('NOTNEGINTP,'OPENFN, '(TVPAT1 !*JUMPNOTTYPE NEGINT));
PUT('IDP, 'OPENFN, '(TVPAT1 !*JUMPTYPE ID));
PUT('NOTIDP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE ID));
PUT('BYTESP, 'OPENFN, '(TVPAT1 !*JUMPTYPE BYTES));
PUT('NOTBYTESP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE BYTES));
PUT('WRDSP, 'OPENFN, '(TVPAT1 !*JUMPTYPE WRDS));
PUT('NOTWRDSP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE WRDS));
PUT('HALFWORDSP, 'OPENFN, '(TVPAT1 !*JUMPTYPE HALFWORDS));
PUT('NOTHALFWORDSP, 'OPENFN, '(TVPAT1 !*JUMPNOTTYPE HALFWORDS));
PUT('SETQ, 'OPENFN, '(SETQPAT NIL));
PUT('RPLACA, 'OPENFN, '(RPLACPAT CAR));
PUT('RPLACD, 'OPENFN, '(RPLACPAT CDR));
PUT('WPLUS2, 'OPENFN, '(ASSOCPAT !*WPLUS2));
PUT('WDIFFERENCE,'OPENFN, '(SUBPAT !*WDIFFERENCE));
PUT('WTIMES2, 'OPENFN, '(ASSOCPAT !*WTIMES2));
PUT('WMINUS, 'OPENFN, '(UNARYPAT !*WMINUS));
PUT('WAND, 'OPENFN, '(ASSOCPAT !*WAND));
PUT('WOR, 'OPENFN, '(ASSOCPAT !*WOR));
PUT('WXOR, 'OPENFN, '(ASSOCPAT !*WXOR));
PUT('WNOT, 'OPENFN, '(UNARYPAT !*WNOT));
PUT('WSHIFT, 'OPENFN, '(NONASSOCPAT !*WSHIFT));
PUT('MKITEMREV, 'OPENFN, '(NONASSOCPAT !*MKITEM));
PUT('LOC, 'OPENFN, '(UNARYPAT !*LOC));
PUT('!*ADDMEM, 'OPENFN, '(MODMEMPAT !*ADDMEM));
PUT('!*MPYMEM, 'OPENFN, '(MODMEMPAT !*MPYMEM));
PUT('FIELD, 'OPENFN, '(FIELDPAT !*FIELD));
PUT('SIGNEDFIELD,'OPENFN, '(FIELDPAT !*SIGNEDFIELD));
PUT('PUTFIELDREV,'OPENFN, '(PUTFIELDPAT !*PUTFIELD));
PUT('WGREATERP,'OPENTST, '(TSTPATC !*JUMPWGREATERP !*JUMPWLESSP));
PUT('WLEQ, 'OPENTST, '(TSTPATC !*JUMPWLEQ !*JUMPWGEQ));
PUT('WGEQ, 'OPENTST, '(TSTPATC !*JUMPWGEQ !*JUMPWLEQ));
PUT('WLESSP, 'OPENTST, '(TSTPATC !*JUMPWLESSP !*JUMPWGREATERP));
PUT('WGREATERP, 'OPENFN, '(TVPAT !*JUMPWGREATERP));
PUT('WLEQ, 'OPENFN, '(TVPAT !*JUMPWLEQ));
PUT('WGEQ, 'OPENFN, '(TVPAT !*JUMPWGEQ));
PUT('WLESSP, 'OPENFN, '(TVPAT !*JUMPWLESSP));
PUT('EQ,'FLIPTST,'NE);
PUT('NE,'FLIPTST,'EQ);
PUT('ATOM,'FLIPTST,'PAIRP);
PUT('PAIRP,'FLIPTST,'ATOM);
PUT('STRINGP,'FLIPTST,'NOTSTRINGP);
PUT('NOTSTRINGP,'FLIPTST,'STRINGP);
PUT('BytesP,'FLIPTST,'NOTBytesP);
PUT('NOTBytesP,'FLIPTST,'BytesP);
PUT('WrdsP,'FLIPTST,'NOTWrdsP);
PUT('NOTWrdsP,'FLIPTST,'WrdsP);
PUT('HalfwordsP,'FLIPTST,'NOTHalfwordsP);
PUT('NOTHalfwordsP,'FLIPTST,'HalfwordsP);
PUT('CODEP,'FLIPTST,'NOTCODEP);
PUT('NOTCODEP, 'FLIPTST,'CODEP);
PUT('IDP,'FLIPTST,'NOTIDP);
PUT('NOTIDP,'FLIPTST,'IDP);
PUT('INTP,'FLIPTST,'NOTINTP);
PUT('NOTINTP,'FLIPTST,'INTP);
PUT('POSINTP,'FLIPTST,'NOTPOSINTP);
PUT('NOTPOSINTP,'FLIPTST,'POSINTP);
PUT('NEGINTP,'FLIPTST,'NOTNEGINTP);
PUT('NOTNEGINTP,'FLIPTST,'NEGINTP);
PUT('FIXP,'FLIPTST,'NOTFIXP);
PUT('NOTFIXP,'FLIPTST,'FIXP);
PUT('NUMBERP,'FLIPTST,'NOTNUMBERP);
PUT('NOTNUMBERP,'FLIPTST,'NUMBERP);
PUT('FIXNP,'FLIPTST,'NOTFIXNP);
PUT('NOTFIXNP,'FLIPTST,'FIXNP);
PUT('FLOATP,'FLIPTST,'NOTFLOATP);
PUT('NOTFLOATP,'FLIPTST,'FLOATP);
PUT('BIGP,'FLIPTST,'NOTBIGP);
PUT('NOTBIGP,'FLIPTST,'BIGP);
PUT('VECTORP,'FLIPTST,'NOTVECTORP);
PUT('NOTVECTORP,'FLIPTST,'VECTORP);
PUT('WLESSP,'FLIPTST,'WGEQ);
PUT('WGEQ,'FLIPTST,'WLESSP);
PUT('WLEQ,'FLIPTST,'WGREATERP);
PUT('WGREATERP,'FLIPTST,'WLEQ);
% Match functions
PUT('ANY,'MATCHFN,'!&ANY);
PUT('VAR,'MATCHFN,'!&VAR);
PUT('REG,'MATCHFN,'!®FP);
PUT('DEST,'MATCHFN,'!&DEST);
PUT('USESDEST,'MATCHFN,'!&USESDEST);
PUT('REGN,'MATCHFN,'!®N);
PUT('NOTDEST,'MATCHFN,'!&NOTDEST);
PUT('NOTANYREG,'MATCHFN,'!&NOTANYREG);
PUT('MEM,'MATCHFN,'!&MEM);
PUT('ANYREGFN,'MATCHFN,'!&ANYREGFNP);
% Tag properties
FLAG('(!$LOCAL !$GLOBAL !$FLUID QUOTE WCONST IDLOC WVAR
REG LABEL FRAME !*FRAMESIZE IREG),
'TERMINAL);
FLAG('(!$LOCAL !$GLOBAL !$FLUID WVAR),'VAR);
FLAG('(QUOTE WCONST IDLOC FRAMESIZE),'CONST);
FLAG('(REG),'REG);
FLAG('(!$FLUID !$GLOBAL),'EXTVAR);
FLAG('(CAR CDR !$NAME MEMORY FRAMESIZE), 'ANYREG);
FLAG('(!*ADDMEM !*MPYMEM),'MEMMOD);
% Optimizing functions
PUT('!*LBL, 'OPTFN, '!&LBLOPT);
PUT('!*MOVE, 'OPTFN, '!&STOPT);
PUT('!*JUMP, 'OPTFN, '!&JUMPOPT);
% Things which can be compiled
FLAG('(EXPR FEXPR MACRO NEXPR),'COMPILE);
% Some compiler macros
DEFLIST('((CAAR (LAMBDA (U) (CAR (CAR U))))
(CADR (LAMBDA (U) (CAR (CDR U))))
(CDAR (LAMBDA (U) (CDR (CAR U))))
(CDDR (LAMBDA (U) (CDR (CDR U))))
(CAAAR (LAMBDA (U) (CAR (CAR (CAR U)))))
(CAADR (LAMBDA (U) (CAR (CAR (CDR U)))))
(CADAR (LAMBDA (U) (CAR (CDR (CAR U)))))
(CADDR (LAMBDA (U) (CAR (CDR (CDR U)))))
(CDAAR (LAMBDA (U) (CDR (CAR (CAR U)))))
(CDADR (LAMBDA (U) (CDR (CAR (CDR U)))))
(CDDAR (LAMBDA (U) (CDR (CDR (CAR U)))))
(CDDDR (LAMBDA (U) (CDR (CDR (CDR U)))))
(EQCAR (LAMBDA (U V)
((LAMBDA (!%!%!%W) (AND (PAIRP !%!%!%W)
(EQ (CAR !%!%!%W) V))) U)))
(CONSTANTP (LAMBDA (U)
((LAMBDA (V) (NOT (OR (PAIRP V) (IDP V))))
U)))
(WEQ (LAMBDA (U V) (EQ U V)))
(WNEQ (LAMBDA (U V) (NE U V)))
(IPLUS2 (LAMBDA (U V) (WPLUS2 U V)))
(IADD1 (LAMBDA (U) (WPLUS2 U 1)))
(IDIFFERENCE (LAMBDA (U V) (WDIFFERENCE U V)))
(ISUB1 (LAMBDA (U) (WDIFFERENCE U 1)))
(ITIMES2 (LAMBDA (U V) (WTIMES2 U V)))
(IQUOTIENT (LAMBDA (U V) (WQUOTIENT U V)))
(IREMAINDER (LAMBDA (U V) (WREMAINDER U V)))
(IGREATERP (LAMBDA (U V) (WGREATERP U V)))
(ILESSP (LAMBDA (U V) (WLESSP U V)))
(ILEQ (LAMBDA (U V) (WLEQ U V)))
(IGEQ (LAMBDA (U V) (WGEQ U V)))
(ILOR (LAMBDA (U V) (WOR U V)))
(ILSH (LAMBDA (U V) (WSHIFT U V)))
(ILAND (LAMBDA (U V) (WAND U V)))
(ILXOR (LAMBDA (U V) (WXOR U V)))
(IZEROP (LAMBDA (U) (EQ U 0)))
(IONEP (LAMBDA (U) (EQ U 1)))
(IMINUSP (LAMBDA (U) (WLESSP U 0)))
(IMINUS (LAMBDA (U) (WMINUS U)))
(PUTFIELD (LAMBDA (U V W X) (PUTFIELDREV X U V W)))
(MKITEM (LAMBDA (U V) (MKITEMREV V U)))
(NEQ (LAMBDA (U V) (NOT (EQUAL U V))))
(GEQ (LAMBDA (U V) (NOT (LESSP U V))))
(LEQ (LAMBDA (U V) (NOT (GREATERP U V))))
(NOT (LAMBDA (U) (NULL U)))),'CMACRO);
% Macro functions
PUT('A1,'SUBSTFN,'!&ARG1);
PUT('A2,'SUBSTFN,'!&ARG2);
PUT('A3,'SUBSTFN,'!&ARG3);
PUT('A4,'SUBSTFN,'!&ARG4);
PUT('FN,'SUBSTFN,'!&PARAM1);
PUT('MAC,'SUBSTFN,'!&PARAM2);
PUT('P2,'SUBSTFN,'!&PARAM3);
PUT('P3,'SUBSTFN,'!&PARAM4);
PUT('T1,'SUBSTFN,'!&GETTEMP);
PUT('T2,'SUBSTFN,'!&GETTEMP);
PUT('T3,'SUBSTFN,'!&GETTEMP);
PUT('T4,'SUBSTFN,'!&GETTEMP);
PUT('L1,'SUBSTFN,'!&GETTEMPLBL);
PUT('L2,'SUBSTFN,'!&GETTEMPLBL);
PUT('L3,'SUBSTFN,'!&GETTEMPLBL);
PUT('L4,'SUBSTFN,'!&GETTEMPLBL);
% Emit functions
PUT('!*LOAD,'EMITFN,'!&EMITLOAD);
PUT('!*STORE,'EMITFN,'!&EMITSTORE);
PUT('!*JUMP,'EMITFN,'!&EMITJUMP);
PUT('!*LBL,'EMITFN,'!&EMITLBL);
PUT('!*ADDMEM,'EMITFN,'!&EMITMEMMOD);
PUT('!*MPYMEM,'EMITFN,'!&EMITMEMMOD);
PUT('!*ADDMEM, 'UNMEMMOD, '!*WPLUS2);
PUT('!*MPYMEM, 'UNMEMMOD, '!*WTIMES2);
% In memory operations
PUT('WPLUS2,'MEMMODFN,'!*ADDMEM);
PUT('WTIMES2,'MEMMODFN,'!*MPYMEM);
% Flip jump for conditional jump macros
PUT('!*JUMPEQ,'NEGJMP,'!*JUMPNOTEQ);
PUT('!*JUMPNOTEQ,'NEGJMP,'!*JUMPEQ);
PUT('!*JUMPTYPE,'NEGJMP,'!*JUMPNOTTYPE);
PUT('!*JUMPNOTTYPE,'NEGJMP,'!*JUMPTYPE);
PUT('!*JUMPINTYPE,'NEGJMP,'!*JUMPNOTINTYPE);
PUT('!*JUMPNOTINTYPE,'NEGJMP,'!*JUMPINTYPE);
PUT('!*JUMPWEQ,'NEGJMP,'!*JUMPWNEQ);
PUT('!*JUMPWNEQ,'NEGJMP,'!*JUMPWEQ);
PUT('!*JUMPWLESSP,'NEGJMP,'!*JUMPWGEQ);
PUT('!*JUMPWGEQ,'NEGJMP,'!*JUMPWLESSP);
PUT('!*JUMPWLEQ,'NEGJMP,'!*JUMPWGREATERP);
PUT('!*JUMPWGREATERP,'NEGJMP,'!*JUMPWLEQ);
% Assorted other flags
FLAG('(!*JUMP !*LINKE !*EXIT),'TRANSFER);
FLAG('(!*LINK !*LINKE),'UNKNOWNUSE);
PUT('!*LINK, 'EXITING, '!*LINKE);
% Initialize variables
!*MSG := T; % Do print messages
!*INSTALLDESTROY := NIL;
!*USINGDESTROY := T;
!*SHOWDEST := NIL;
!*NOFRAMEFLUID := T;
!*USEREGFLUID := NIL;
!*NOLINKE := NIL; %. Permit LINKE
!*ORD := NIL; %. Dont force ORDER
!*R2I := T; %. Do convert Rec to Iter
GLOBALGENSYM!&:=LIST GENSYM(); % initialize symbol list
MAXNARGS!&:=15;
LASTACTUALREG!& := 5;
END;