N5REG . DEFINE THE REGISTERS $(1) . LIT . . SECTION 1.6.0 . THIS SECTION GENERATES CODE FOR THE .OR. OPERATOR. . IF THE FIRST OPERAND HAS A UNARY MINUS, DE MORGANS . THEOREM IS APPLIED AND THE .AND. SECTION IS USED. . OP02* SLJ GEN .OR. PCI 0,TT1,BB1 061800 PCI 0,TT2,BB1 061900 PCI 0,TT3,BB1 062000 TE,S P1,OP021,0 062100 LR,S P1 REVERSE 062200 LR,S P2 LR,S P3 AND GO TO 062400 J OP031 .AND. ROUTINE 062500 OP021 SLJ AREQ1 062600 PCI 0,P2 062700 TE,U P0,OP022,0 J IF NOT IN UPPER 062800 SA,U 0,P0 062900 TE,S P0,OP0211,1 J IF P2 NEG MI 1,(DSC P0,36),ABS LOAD P0 LOWER 063100 J OP023 063200 OP0211 MI,1 1,(LNA P0,P0) . LOAD NEG P0 FROM UPPER J OP0221 OP022 TE,S P0,OP023,0 063300 MI 1,(LNA P0,P0) LOAD P0 NEG OP0221 SA,S 0,P0 OP023 MI 1,(OR P0,P1) 063600 SA,U 1,P0 RESULT IN UPPER 063700 SA,S P3,P0 SLJ MRSLT1 PCI 0,P3 063900 SLJ DEASN PCI 0,P1 EX ALG2 064000 . SECTION 1.7.0 . THIS SECTION GENERATES CODE FOR THE .AND. OPERATOR . AND IS EXACTLY ANALOGOUS TO THE PREVIOUS SECTION. . OP03* SLJ GEN . .AND. PCI 0,TT1,BB1 064300 PCI 0,TT2,BB1 064400 PCI 0,TT3,BB1 064500 TE,S P1,OP031,0 064600 LR,S P1 064700 LR,S P2 LR,S P3 064900 J OP021 065000 OP031 SLJ AREQ1 065100 PCI 0,P2 065200 TE,U P0,OP032,0 065300 SA,U 0,P0 065400 TE,S P0,OP0311,1 MI 1,(DSC P0,36),ABS 065600 J OP033 065700 OP0311 MI,1 1,(LNA P0,P0) J OP0321 OP032 TE,S P0,OP033,0 065800 MI 1,(LNA P0,P0) OP0321 SA,S 0,P0 OP033 MI 1,(AND P0,P1) 066100 J OP023+1 . . SECTION 1.8.0 . THIS SECTION GENERATES CODE FOR ALL THE RELATIONAL . OPERATORS. A LOGICAL RESULT IS COMPUTED EXCEPT . IN THE CASE OF A LOGICAL IF WITH A MAJOR RELATIONAL . OPERATOR. . OP04* SX BB2,OP04T . RELATIONAL OPS L BB3,ALGI . CURRENT TRIAD NUMBER SZ ST01F3 . CLEAR FLAG FOR EACH TRIAD TZ,S1 TT5,BB3 . TEST IF TRIAD AN ARGUMENT S BB2,ST01F3 L,T3 BB3,TT5,BB3 . GET NEXT TRIAD L,S2 AA1,TT3,BB3 . TEST FOR EQUALS OPERATOR TE,M AA1,1 S BB2,ST01F3 . SET FLAG TO IGNORE STO1F2 L BB3,EXPL SLJ GEN GENERATE 067300 PCI 0,TT1,BB1 SR R4,TEMP 067400 PCI 0,TT2,BB1 067500 PCI 0,TT3,BB1 067600 PCI 0,(030100000001) PCI 0,TT3,BB3 GET A TRUE DUMMY TRIAD EX $+1 TZ ST01F3 . TEST TO IGNORE STO1F2 J $+3 TZ ST01F2 J OP0410 SLJ GENR SLJ AREQ1 PCI 0,P4 SLJ MRSLT PCI 0,P3 EX $+1 067800 OP0410 LX BB2,OP04T TNZ ST01F3 . TEST TO IGNORE ST01F2 TNZ ST01F2 J OP0411 TZ ST01F1 EX OP0499-4,BB2 S BB2,OP04T OP0411 SZ OPCOP1 . CLEAR FLAG FOR CHARACTER OPERANDS SZ OPCOP2 . CLEAR FLAG FOR CHARACTER OP L,M BB4,0 . INDEX TO SET FIRST OPERAND L,M BB3,TT1,BB1 LMJ B11,OP4CHT . TEST FOR CHARACTER OPERAND L,M BB4,1 . INDEX TO SET SECOND OPERAND L,M BB3,TT2,BB1 LMJ B11,OP4CHT . TEST FOR CHARACTER OPERAND TNZ OPCOP2 TZ OPCOP1 . TEST FOR CHARACTER OPERANDS J O4CHGN . GO GENERATE CHARACTER CODE OP0411Q L BB2,OP04T . RESULTANT OPERATOR J $-3,BB2 J OP041 .EQ. 068100 J OP042 .NE. 068200 J OP045 .LT. 068300 J OP046 .GT. 068400 J OP047 .GE. J OP048 .LE. OP041 OP042 L AA1,OP04T PICK UP OPERATOR NUMBER OP42A SLJ GENR SLJ ZRTST PCI 0,P1 J OP42B+1 FIRST PARAMETER WAS ZERO SLJ ZRTST PCI 0,P2 J OP42B MAKE FIRST PARAMETER 0 OP42C SLJ AREQ2 PCI 0,P1 PCI 0,P2 SW P1,P2 SLJ TSTRCN PCI 0,P1 PCI 0,P2 J OPZCA . CAN USE RELATIONAL OPZCC LR,S P1 SLJ OP10D GO DO SUBTRACT PCI 0,P1 PCI 0,P2 EX $+1 L AA1,OP04T TE,M AA1,4 J OPZ43A GENERATE FOR NOT EQUAL SLJ GENR SLJ OPTZ PCI 0,P1 PCI 0,P0 J OP044A OPZCA TE,S P0,$+2,0 MI 1,(LN P0,P0) TE,S P1,OPEQS,1 EX $+1 L AA1,OP04T TE,M AA1,4 J OPZCB GENERATE FOR NOT EQUUAL SLJ GENR SLJ OPTEQ GENERATE EQUAL PCI 0,P1 J OP044A OPZCB SLJ GENR SLJ OPTNE PCI 0,P1 J OP044A OPZ43A SLJ GENR SLJ OPTNZ GENERATE A TNZ INSTRUCTION PCI 0,P1 PCI 0,P0 J OP044A OP42B SW P2,P1 TE,T P2,OP42B1,6 TE,T P1,OP42B1,1 SKIP LOAD FOR INTEGER SLJ AREQ1N PCI 0,P2 J $+4 OP42B1 SLJ AREQ1Q PCI 0,P2 J $+1 EX $+1 L AA1,OP04T TE,M AA1,4 J OPZ43B GENERATE FOR NOT EQUAL SLJ GENR SLJ OPTZ GENERATE A TZ INSTRUCTION PCI 0,P2 PCI 0,P2 J OP044A OPZ43B SLJ GENR SLJ OPTNZ GENERATE A TEST NON ZERO INSTRUCTION PCI 0,P2 PCI 0,P2 J OP044A OP044A SLJ DEASN PCI 0,P5 OP0442 EX $+1 TZ ST01F3 . TEST TO IGNORE ST01F2 J $+3 OP0442J TZ ST01F2 J OP04A SLJ GENR SLJ AREQ1 PCI 0,P3 MI 1,(SZ P0) SLJ MRSLT PCI 0,P3 EX ALG2 071100 OR45A EX $+1 L AA1,OP04T TOP,M AA1,1 . TEST GR J OR45C SLJ GENR SW P1,P2 INTERCHANGE OPS OR45A5 SLJ AREQ1 PCI 0,P1 TE,S P0,$+2,0 MI 1,(LNA P0,P0) TE,S P2,OR45J,1 LOAD NEGATIVE TO GET RID OF SIGN EX $+1 TZ,S2 CRRELN PROTECT AGAINST MINUS ZERO J OR45J1 SLJ GENR MI 1,(TG P0,P2) EX $+1 OR45J3 L AA1,OP04T TLE,M AA1,8 J $+4 L,S1 AA1,OLDITM+1 XOR,M AA1,1 S,S1 AA2,OLDITM+1 SLJ GENR SLJ DEASN PCI 0,P2 J OP044A OR45C SLJ GENR J OR45A5 OR45J SLJ FSRG GET SCRATCH REGISTER MI 1,(LN P7R,P2) EX $+1 TZ,S2 CRRELN J OR45J4 SLJ GENR OR45J5 MI 1,(TG P0,P7) EX OR45J3 OR45J1 SLJ GENR SLJ TSTRCN PCI 0,P1 J OR45KB CAN NOT BE MINUS ZERO TE,T P1,OR45KA,2 CAN BE MINUS ZERO MI 1,(AA P0,0,0,XM),ABS OR45KB MI 1,(TG P0,P2) EX OR45J3 OR45J4 SLJ GENR MI 1,(AA P0,0,0,XM),ABS . REMOVE MINUS SIGN J OR45J5 OR45KA MI 1,(FA P0,(0)),CON J OR45KB OPEQS SLJ FSRG MI 1,(LN P7R,P1) MI 1,(AA P7R,0,0,XM),ABS EX $+1 L AA1,OP04T TE,M AA1,4 J OPEQSA SLJ GENR MI 1,(TE P0,P7) J OP044A OPEQSA SLJ GENR MI 1,(TNE P0,P7) J OP044A . THE NEXT SECTION GENERATES CODE FOR A .LT. /.GT. OP045 SLJ GENR SLJ RELZER TEST FOR ZER PCI 0,P1 PCI 0,P2 J OP45S SLJ TSTREL PCI 0,P1 PCI 0,P2 J OR45A SLJ AREQ2 PCI 0,P1 PCI 0,P2 J OP45B OP45A LR,S P1 SLJ OP10D GENERATE SUBTRACT INSTRUCTION PCI 0,P1 PCI 0,P2 OP45S SLJ OPTZ GENERATE A TZ INSTRUCTION PCI 0,P1 PCI 0,P0 TE P0,OP43C,1 IN RESULT NEGATIVE INVERT TEST EX $+1 L AA1,OP04T OP43F TOP,M AA1,1 J OP43D GENERATE CODE FOR .GT. SLJ GENR MI 1,(TN P0) J OP044A OP43D SLJ GENR MI 1,(TP P0) J OP044A OP046 SLJ GENR .GT. 071700 SW P1,P2 071800 EX $+1 L AA1,OP04T XOR,M AA1,1 S AA2,OP04T J OP045 OP45B SW P1,P2 EX $+1 L AA1,OP04T INVERT OPERATOR IF OPERANDS LOADED BACKWARDS XOR,M AA1,1 S AA2,OP04T SLJ GENR J OP45A OP47B SW P1,P2 EX $+1 L AA1,OP04T XOR,M AA1,1 S AA2,OP04T SLJ GENR J OP47A . THE NEXT SECTION GENERATES CODE FOR A .GE./.LE. OP047 SLJ GENR SLJ RELZER TEST FOR ZERO OPERATOR PCI 0,P1 PCI 0,P2 J OP45V SLJ TSTREL PCI 0,P1 PCI 0,P2 J OR45A SLJ AREQ2 PCI 0,P1 PCI 0,P2 J OP47B OP47A LR,S P1 FORCE A SUBTRACT SLJ OP10D GENERATE A SUBTTACT PCI 0,P1 PCI 0,P2 OP45V TE P0,OP43E,1 IF RESULT NEGATIVE INVERT TEST EX $+1 L AA1,OP04T OP43G TOP,M AA1,1 J OP43K GENERATE FOR .LE. SLJ GENR MI 1,(JP P0,3),SREL OP43L SLJ OPTZ MAKE A TEST ZERO INSTRUCTION PCI 0,P1 PCI 0,P0 J OP044A OP43K SLJ GENR MI 1,(JN P0,3),SREL J OP43L OP43E EX $+1 L AA1,OP04T SWAP OPERATOR XOR,M AA1,1 L AA1,AA2 J OP43G OP43C EX $+1 L AA1,OP04T XOR,M AA1,1 L AA1,AA2 J OP43F OP048 SLJ GENR .LE. SW P1,P2 072600 EX $+1 L AA1,OP04T XOR,M AA1,1 S AA2,OP04T J OP047 OP0499 L,M BB2,5 L,M BB2,4 L,M BB2,8 L,M BB2,9 L,M BB2,6 L,M BB2,7 OP04A LA AA1,ST01F1 JNZ AA1,OP04B L BB1,LGNSLV L,M AA1,020000 S,H1 AA1,LOGIFX,BB1 SLJ GEN PCI 1,LOGIFX,BB1 MI 1,(J P1) EX $+1 J ALG2 OP04B SLJ GEN PCI 0,ITEM+2 TE,ID P1,$+2,7 MI 1,(J P1) EX $+1 J ALG2 OPTEQ* . THIS ROUTINE GENERATES TEST EQUQAL INSTRUCTIONS TE,T P1,OPTEA,1 INTEGER TE,T P1,OPTEA,2 REAL TE,T P1,OPTEB,3 D P TE,T P1,OPTEB,4 COMPLEX OPTEA MI 1,(TE P0,P1) NOP OPTEB MI 1,(DTE P0,P1) NOP OPTNE* . THIS ROUTINE GENERATES TEST NO EQUAL INSTRUCTIONS TE,T P1,OPTNA,1 TE,T P1,OPTNA,2 OPTNA MI 1,(TNE P0,P1) NOP OPTZ* . THIS IS AN INTERPRETIVE SECTION WHICH GENERATES THE . EQUIVALENT OF A TEST ZERO INSTRUCTION DEPENDING ON MODE TE,T P1,OPTZ1,1 INTEGER TE,T P1,OPTZ2,2 REAL TE,T P1,OPTZ3,3 DOUBLE TE,T P1,OPTZ4,4 COMPLEX OPTZ1 . BOOLEAN ALSO FALLS OUT HERE EX $+1 TZ LOADED J OPTC1L SLJ GENR MI 1,(TZ P2) NOP 0 OPTC1L SLJ GENR MI 1,(TZ P0) NOP OPTZ2 MI 1,(TEP P0,(0400400,0)),CON NOP 0 OPTZ3 MI 1,(TEP P0,(0400040,0)),CON NOP OPTZ4 MI 1,(TOP P0,(0400400,0)),CON MI 1,(TEP P0,(0400400,0)),CON SLJ UPA NOP OPTNZ* . THIS IS AN INTERPRETIVE INSTRUCTION WHICH GENERATES THE . EQUIVALENT OF A TEST NON ZERO INSTRUCTION DEPENDING ON MODE TE,T P1,OPTNZ4,4 COMPLEX TE,T P1,OPTNZ3,3 DOUBLE TE,T P1,OPTNZ2,2 REAL TE,T P1,OPTNZ1,1 INTEGER OPTNZ1 . BOOLEAN ALSO FALLS OUT HERE EX $+1 TZ LOADED J OPTNZL SLJ GENR MI 1,(TNZ P2) NOP OPTNZL SLJ GENR MI 1,(TNZ P0) NOP OPTNZ2 MI 1,(TOP P0,(0400400,0)),CON NOP OPTNZ3 MI 1,(TOP P0,(0400040,0)),CON NOP OPTNZ4 MI 1,(TOP P0,(0400400,0)),CON MI 1,(TEP P0,(0400400,0)),CON SLJ UPA INCREASE A REGISTER MI 1,(J 2),SREL NOP . THE NEXT SECTION CHECKS IF AN OPERAND IS A CHARACTER STRING, . SUBSTRING OR COMMAND STRING OP4CHT L,H2 BB2,0,BB3 . TRIAD NU OR SYM REF TP,XH2 0,BB3 AN,M BB2,0,*0 . REMOVE SIGN BIT L,S1 AA1,0,BB3 . GET ITEM ID TE,M AA1,6 J OP04C1 TNZ TT13,BB2 . TEST SUBSTRING OR COMMAND STRING J 0,B11 L,H1 AA1,TT13,BB2 . COMMAND STRING ADDRESS TNZ AA1 L,H2 AA1,TT13,BB2 . SUBSTRING ADDRESS S,H2 AA1,OPCOP1,BB4 . SET OPERAND IN PARAMETER WORD J 0,B11 OP04C1 TE,M AA1,3 . TEST FOR CONSTANT J 0,B11 TZ,S2 0,BB3 . SKIP SHORT CONSTANTS J 0,B11 L,H1 AA2,2,BB2 . TEST LONG HOLERITH CONSTANTS AND,M AA2,0777 TE,M AA3,0367 J 0,B11 L AA1,3,BB2 . LENGTH IN CHARACTERS OF STRING LSSL AA1,6 SSL AA1,24 . EXTRACT S2 AND S3 TG,M AA1,7 . TEST MULTIPLE WORD STRINGS J $+3 . LENGTH MORE THAN ONE WORD FORCE STRING TNZ OPCOP1 . FIRST OP IS CHARACTER J 0,B11 . DO NOT MAKE SUBSTRING TABLE S B11,BB3 . SAVE EXIT ADDRESS LMJ B11,QTSBR . MAKE A SUBSTRING TABLE S,H2 AA1,OPCOP1,BB4 . SAVE TEMP NUMBER J 0,BB3 . EXIT O4CHGN . L BB2,OP04T . RESULTANT OPERATOR L,M AA1,OPCHNM-4,BB2 . NAME OF EXTERNAL ROUTINE TO CALL S,H2 AA1,OPCHNX . SET ADDRESS INTO INSTRUCTION TNZ OPCOP1 J O4CHGNA TNZ OPCOP2 J O4CHGNB . ERROR OPERAND INCOMPATIBILTY O4CHGNC TZ,S2 U1110A . TEST REENTERENT LIBRARY J O4CHGNX . GENERATE A REENTERENT LIBRARY SLJ GEN PCI 0,(((B11))-3) MI 1,OPCHNX,NAME . CALL FUNCTION MI 1,OPCOP1,TEMP MI 1,OPCOP2,TEMP EX $+1 S GB1,B11FL . SHOW B11 DESTROYED L,M AA2,072 . WALKBACKCODE SLJ WKBACK . GENERATE A WALKBACK J OP0442J O4CHGNA L,S1 AA1,TT1,BB1 TE,M AA1,3 J O4CHGNB . ERROR INCOMPATIBLE OPERANDS TZ,S2 TT1,BB1 J O4CHGNB L,H2 BB2,TT1,BB1 . SYM TABLE POINTER L,H1 AA2,2,BB2 . TEST LONG HOLERITH CONSTANTS AND,M AA2,0777 TE,M AA3,0367 J O4CHGNB . INCOMPATIBLE OPERANDS LMJ B11,QTSBR . MAKE A SUBSTRING TABLE ENTRY S,H2 AA1,OPCOP1 J O4CHGNC O4CHGNB L,H1 AA1,N5ERLA S,H1 AA1,O4CHGNM LMJ B11,ERFP +O4CHGNM J PHS5G . SKIP TO NEXT STATEMENT O4CHGNX . GENERATE A RELATIONAL SEQUENCE L,M AA1,OPCHNMX-4,BB2 . NAME OF REENTERENT ROUTINE T CALL S,H2 AA1,OPCHNXR SLJ GEN . ENTER GENERATOR PCI 1,IODBNK DBANK LABEL FOR ARGS EX $+1 SLJ GEN PCI 0,(((B11))-3) PCI 0,(((A0))-3) PCI 0,N0LA . COMMON BLOCK FOR IO SCRATCH PCI 0,IODBNK . ARG LOC IN DBANK MI 1,(LXI P1,('NIOCB$'),0,M),NAME . NAME O EX $+1 . EXIT GENERATOR L,M AA1,021 S,S2 AA1,OLDITM . 18 BIT RELOCATION SLJ GENR MI 1,(LA P2,P4,0,M) . LOC OF CALLING SEQUENCE EX $+1 . EXIT GENERATOR S,S2 AA1,OLDITM . 18 BIT RELOCATION L,H1 AA1,OLDITM+1 . REMOVE J FACTOR IF ROUTINE AND AA1,(0770377) TZ,S1 CRNCCB . IS USED IN A COMMON BANK S,H1 AA2,OLDITM+1 SLJ GENR . RETURN TO GENERATOR MI 1,(LXI P2,P3,0,M) . COMMON BLOCK FOR SCRATCH EX $+1 . EXIT GENERATOR S,S2 AA1,OLDITM . 18 BIT RELOCATION SLJ GENR MI 1,OPCHNXR,NAME . GENERATE AN LIJ TO CHARACTER ROUTINE EX $+1 S,S2 AA1,OLDITM . 18 BIT RELOCATION LMJ B11,FILE61 +CIOCTR . CHANGE TO DBANK INSTRUCTIONS L BB2,IODBNK . EVALUATE DBANK LABEL SLJ EVALLB L,H1 AA1,N5ERLA . CUURRENT SEQUENCE NUMBER S AA1,0,BB2 L,M AA1,'D' . D FOR DBANK LABELS S,S1 AA1,0,BB2 L,M AA1,0107 . CODE FOR LABEL S,H1 AA1,2,BB2 SLJ GEN . RETURN TO GENERATOR MI 1,OPCOP1,TEMP MI 1,OPCOP2,TEMP EX $+1 S GB1,B11FL . MARK B11 AS DESTROYED SLJ GENWLK . GENERATE A WALKBACK LMJ B11,FILE61 +RSTCTR . RETURN CODE GENERATION TO I BANK J OP0442J . THIS SUBROUTINE CHECKS IF EITHER OPERNAD IS ZERO. IF ONE IS ZERO . IT IS FORCED TO BE THE FIRST PARAMETER. THEN IF THE OPERAND IS NOT . LOADED IT IS LOADED NEGATIELZY . IF THE OPERANDS ARE SWAPPED THE OPERATOR IS REVERSED . A RETURN SKIP IS MADE IF NEITHER OPERAND IS ZERO RELZER SLJ ZRTST PCI 0,P1 J RELA FIRST PARMETER WAS ZERO SLJ ZRTST PCI 0,P2 J $+2 NOP 1 SKIP RETURN NEITHER OPERAND ZERO SW P1,P2 J RELB RELA EX $+1 L AA1,OP04T REVERSE OPERATOR IF OPERANDS SWAPPED XOR,M AA1,1 S AA2,OP04T SLJ GENR RELB LR,S P2 FORCE LOAD TO BE NEGATIVE SLJ AREQ1 PCI 0,P2 NOP 0 TSTRCN . THIS SECTION TESTS TO SEE IF AN OPERAND OF A RELATIONAL . COULD BE MINUS ZERO. IT DOES A SKIP RETURN IF THE . OPERAND COULD BE MINUS ZERO TE,ID P1,TSNA,3 TE,ID P1,TSTRB,6 NOP 1 . COULD BE MINUS ZERO TSNA NOP 0 . CAN NOT BE MINUS ZERO TSTREL . THIS SECTION TESTS TO SEE IF RELATINAL OPERATOR MAY BE USED TE,T P1,TSTRE,3 . NO OPTIMIZATION FOR COMPLEX TE,T P1,TSTRE,4 . OR DOBLE RECISION TE,T P1,TSREAL,2 EX $+1 TZ,S1 CRRELN IF FLAG SET, ALWAYS USE RELATIONAL J TSTRG SLJ GENR TSREAL TE,ID P1,TSTRA,3 . IF CONSTANT OK TE,ID P2,TSTRA,3 . TE,ID P1,TSTRB,6 . TEST FOR FLD FUNCTION TE,ID P2,TSTRC,6 TSTRE NOP 1 . SKIP RETURN FOR NO RELATIONAL TSTRB EX $+1 L,M GB3,1 L,T3 BB2,*GPT,GB2 TSTRD TNZ TT11,BB2 J TSTRF . NO FLD SKIP RETURN L AA1,TT11,BB2 SSL AA1,26 TG,M AA1,8 J TSTRG USE RELATIONAL TLE,M AA1,5 J TSTRG . USE RELATIONAL J TSTRF . MUST SUBTRACT TSTRG SLJ GENR TSTRA NOP 0 . CAN USE RELATIONAL TSTRF SLJ GENR NOP 1 . SKIP RETURN FOR NO RELATIONAL TSTRC EX $+1 L,M GB3,2 L,T3 BB2,*GPT,GB2 J TSTRD . SECTION 1.9.0 . THIS SECTION GENERATES CODE FOR THE PLUS OPERATOR. . OP10* SLJ GEN . PLUS OPERATOR PCI 0,TT1,BB1 OPERAND 1 073400 PCI 0,TT2,BB1 OPERAND 2 073500 PCI 0,TT3,BB1 OPERATION 073600 SLJ AREQ2 073700 PCI 0,P1 073800 PCI 0,P2 073900 SW P1,P2 SWAP P1 AND P2 074000 OP10E* SLJ OP10D PCI 0,P1 PCI 0,P2 SLJ MRSLT PCI 0,P3 OP1002 EX ALG2 $(2) . OP10D* TE,S P0,OP1050,P1 J IF SIGNS EQUAL J OP10DJ $(1) . OP10DJ TE,T 5,$+2,P1 TG,T 1,OP1010,P1 J UNLESS INTEGER MI 1,(ANA P0,P1) SIGNS UNEQUAL 074300 OP1001 NOP 0 EXIT FROM ROUTINE OP1010 TG,T 2,OP1020,P1 J UNLESS REAL MI 1,(FAN P0,P1) 075000 J OP1001 075100 OP1020* TG,T 3,OP1030,P1 . J UNLESS D.P. MI 1,(DFAN P0,P1) J OP1001 OP1030* TG,T 4,OP1035,P1 JUMP UNLESS COMPLES SLJ CAN . IN-LINE COMPLEX ADD NEG. PCI 0,P1 J OP1001 OP1035 TE,T 7,OP1077,P1 . DROP OUT WORKS FUNNY TNE,T 6,OP1002,P1 . EXIT UNLESS BOOLEAN TE,T 2,OP1010+1,P2 J OP1001-1 OP1050 TE,T 5,$+2,P1 TG,T 1,OP1060,P1 MI 1,(AA P0,P1) 075900 OP1051 NOP 0 EXIT FROM ROUTINE OP1060 TG,T 2,OP1070,P1 J UNLESS REAL MI 1,(FA P0,P1) 076600 J OP1051 076700 OP1070* TG,T 3,OP1080,P1 . J UNLESS D.P. MI 1,(DFA P0,P1) J OP1051 OP1077 MI 1,(AA P0,P1) J OP1051 OP1080 TG,T 4,OP1085,P1 . J UNLESS COMPLEX SLJ CA . GEN IN LINE COMPLEX ADD PCI 0,P1 J OP1001 OP1085 TE,T 7,OP1001-1,P1 TNE,T 6,OP1002,P1 . EXIT UNLESS BOOLEAN TE,T 2,OP1060+1,P2 J OP1051-1 . SECTION 1.10.0 . THIS SECTION GENERATES CODE FOR THE DIVIDE OPERATOR. . OP11* SLJ GEN . DIVIDE OPERATOR PCI 0,TT1,BB1 OPERAND 1 077600 PCI 0,TT2,BB1 OPERAND 2 077700 PCI 0,TT3,BB1 OPERATOR 077800 SLJ AREQ1 LOAD P1 077900 PCI 0,P1 INTO P0 078000 TE,S P0,OP110C,P2 SA,S 1,P0 J OP110C+1 OP110C SA,S 0,P0 TG,T 1,OP1110,P3 JUMP UNLESS INTEGER 078100 EX $+1 L BB1,ALGI L,S6 AA1,TT3,BB1 TE,M AA1,075 J OP11J1 L,M AA1,3 S,S3 AA1,TT3,BB1 SLJ GENR J OP11Y OP11J1 SLJ GENR TE,ID P2,OP11Z,3 CHECK FOR DIVISION BY POWER OF 2 OP11Y TE,U P0,OP110B,0 SA,U 0,P0 MI,1 1,(LA P0,P0) OP110B TE,T P1,OP11BL,6 MI 1,(DSA P0,36),ABS OP110A MI 1,(DI P0,P2) OP1101 SLJ MRSLT PCI 0,P3 078600 SLJ DEASN PCI 0,P2 OP1102 EX ALG2 078700 OP11BL MI 1,(DSL P0,36),ABS J OP110A OP11YJ L BB1,ALGI L,M GB3,1 SZ OP11YI . INITILIZE L,S2 AA1,TT3,BB1 TNE,M AA1,013 AX,M GB3,1 L,M AA2,TT2,BB1 TE,M AA2,*GPT,GB2 J OP11YC L,T1 AA1,TT2,BB1 TNE,M AA1,0301 J OP11YE-1 L,H2 B11,TT2,BB1 SYM REF TP,XH2 TT2,BB1 IF NEG ANX,M B11,0,*0 L,H1 AA1,2,B11 . MODE WORD AND,M AA1,04077 MODE CLASS AND EQUIVALENT BIT TNE,M AA2,063 . TEST FOR FRACTIONAL CONSTANT S AA2,OP11YI . SET FOR FRACTIONAL CONSTANT L AA1,0,B11 VALUE OF CONSTANT J $+2 L,H2 AA1,TT2,BB1 OP11YE ANU,M AA1,1 AND AA2,AA1 JNZ AA3,OP11Y1 NUMBER WAS NOT A POWER OF 2 L,M R1,35 L B11,(1,0) SE AA1,OPMTB,*B11 OP11Y1 L,M B11,0 FLAG FOR NO SHIFTS L,M AA1,0,B11 J *OP11YB OP1104 SLJ GENR J OP110B OP1110 TG,T 2,OP1120,P3 JUMP UNLESS REAL 078800 MI 1,(FD P0,P2) 078900 J OP1101 079000 OP1120* TG,T 3,OP1130,P3 . JUMP UNLESS D.P. MI 1,(DFD P0,P2) J OP1101 OP1130 TG,T 4,OP1135,P3 JUMP UNLESS COMPLEX MI 1,(CD P0,P2) 079500 J OP1101 079600 OP1135 TNE,T 6,OP1102,P3 EXIT UNLESS BOOLEAN J OP11Y-1 OP11Z EX $+1 SLJ OP11YB CHECK FOR SPEIAL SHIFT CONSTANTS JZ AA1,OP11Y2 NO SHIFT COULD BE FOUND NOP S,H2 AA1,OP11SH S,H2 AA1,OP11BQ SLJ GENR TE,T P1,OP11BJ,6 DO LOGICAL SHIFT FOR BOOLEAN MI 1,OP11SH,ABS J OP1101 OP11BJ MI 1,OP11BQ,ABS J OP1101 $(2) . OP11SH SSA P0,0 OP11BQ SSL P0,0 $(1) . OP11Y2 SLJ GENR J OP11Y OP11YC L,T1 AA1,TT1,BB1 TNE,M AA1,0301 J OP11YD . IMMEDIATE CONSTANT L,H2 B11,TT1,BB1 . SYMBOL TABLE REFERENCE TP,XH2 TT1,BB1 IF NEG ANX,M B11,0,*0 REMOVE BIT L,H1 AA1,2,B11 . MODE WORD AND,M AA1,04077 MODE CLASS AND EQUIVALENT BIT TNE,M AA2,063 . TEST FOR FRACTIONAL CONSTANT S AA2,OP11YI . SET FOR FRACTIONAL CONSTANT L AA1,0,B11 VALUE OF CONSTANT J OP11YE OP11YD L,H2 AA1,TT1,BB1 . VALUE OF CONSTANT J OP11YE . SECTION 1.11.0 . THIS SECTION GENERATES CODE FOR THE MULTIPLY OPERATOR. . OP12* L AA1,TT1,BB1 TNE AA1,TT2,BB1 TEST FOR SQUARE J OP12J OP12JA SLJ GEN PCI 0,TT1,BB1 OPERAND 1 079900 PCI 0,TT2,BB1 OPERAND 2 080000 PCI 0,TT3,BB1 OPERATOR 080100 TNE,ID P1,$+2,3 TRY TO MAKE A CONSTANT P2 SO CHANGING POWERS OF 2 SW P1,P2 TO SHIFTS WILL CATCH MORE CASES SLJ AREQ2 080200 PCI 0,P1 080300 PCI 0,P2 080400 SW P1,P2 SWAP P1 AND P2 080500 OP12JB TE,S P0,OP120A,P1 SA,S 1,P0 J OP120A+1 OP120A SA,S 0,P0 TE,T 5,$+2,P1 TG,T 1,OP1210,P1 J UNLESS INTEGER TE,ID P1,OP12Z,3 CHECK FOR MULTIPLY BY CONSTANT MI 1,(MSI P0,P1) 080700 OP1201 SLJ MRSLT PCI 0,P3 081100 OP1202 EX ALG2 081200 OP1210 TG,T 2,OP1220,P1 J UNLESS REAL MI 1,(FM P0,P1) 081400 J OP1201 081500 OP1220* TG,T 3,OP1230,P1 MI 1,(DFM P0,P1) J OP1201 OP1230 TG,T 4,OP1255,P1 JUMP UNLESS COMPLEX SLJ CM . GEN IN LINE COMPLEX MULT. PCI 0,P1 J OP1201 OP1250 SLJ GENR . ENTER INTERPRETIVE GENERATOR MI 1,(MF P0,P1) 082300 SA,T 1,P3 MAKE RESULT INTEGER 082400 J OP1201 082500 OP1255 TE,T 2,OP1210+1,P2 TE,T 6,OP12Z,P1 J OP1201-1 OP12Z EX $+1 SLJ OP11YB TZ OP11YI . TEST FOR FRACTIONAL CONSTANT J OP1250 . OUTPUT MF INSTRUCTION JZ AA1,OP12Y1 AN,M AA1,36 SN,H2 AA1,OP12SH SLJ GENR MI 1,OP12SH,ABS J OP1201 $(2) . OP12SH SSC P0,0 $(1) . OP12Y1 SLJ GENR J OP1201-1 OP12J L,S1 AA1,TT1,BB1 A SQUARE INVOVVING A SUBEXPRESSION SHOULD TE,M AA1,5 NOT USE TEMP J OP12JA L,H2 BB2,TT1,BB1 TP,XM 0,BB2 AN,M BB2,0,*0 L,H2 AA1,SUBEXQ,BB2 TEST FOR 2 MORE USES TE,M AA1,2 MORE REQUIRE A STORE J OP12JA SLJ GEN PCI 0,TT1,BB1 PCI 0,TT2,BB1 PCI 0,TT3,BB1 SLJ AREQ1N NON DESTRUCTIVE REQUEST PCI 0,P1 SA,S 0,P0 EX $+1 S GB1,SQFL . SPECIAL SQUARE FLAG L,T3 BB3,PZERO+3 ASSIGNED OCTAL VALUE OF REGISTER NUMBER AN,M BB3,12 LMJ B11,DSYN SLJ GENR J OP120A $(2) O4CHGNM +015027 . INCOMPATIBLE OPERANDS OPCHNM 'C$RLEQ' 'C$RLNE' 'C$RLLT' 'C$RLGT' 'C$RLGE' 'C$RLLE' OPCHNMX 'C$$LEQ' . RELATIONAL EQUAL 'C$$LNE' . RELATIONAL NOT EQUAL 'C$$LLT' . RELATIONAL LESS THAN 'C$$LGT' . RELATIONAL GREATER THAN 'C$$LGE' . RELATIONAL GREATER EQUAL 'C$$LLE' . RELATIONAL LESS THAN EQUAL OPCHNX LMJ P1,$-$ OPCHNXR LIJ P1,$-$ OPCOP1 +0 . PARAMETER ONE FOR CHARACTER STRINGS OPCOP2 +0 . PARAMETER TWO FOR CHARACTER STRINGS ST01F3 +0 . FLAG TO INVALIDATE STO1F2 AND STO1F1 OP11YB J $-$ J OP11YJ OP11YI + 0 . FRACTIONAL CONSTANT INDICATOR $(1) . OPMTB . THIS TABLE HOLDS THE POWERS OF TWO WHICH CAN BE CHANGDTO SHIFTS . IN MULTIPLY OR DIVIDE INSTRUCTIONS L DO 35 , +1*/L END