. K = FLD(F,N,EXP) . LOAD COUNTING FROM LEFT . FLD CONTAINED IN ONE WORD WORD . L A0,EXP . LSSC A0,F . SSL A0,36-N . FIELD IS LESS THAN 36 BITS BUT MAY CROSS WORD BOUNDARY . DL A0,EXP . LDSC A0,F . DSL A0,72-N . STORE COUNTING FROM LEFT . FLD (F,N,EXP) = K . FLD CONTAINED IN ONE WORD . L A0,EXP . L A1,K . LSSC A1,F+N . DSL A0,N . SSC A1,F . S A1,K . STORE COUNTING FROM LEFT . FLD LESS THAN 36 BITS BUT MAY CROSS WORD BOUNDARY . L A0,EXP . DL A1,K . LDSC A1,F . LSSL A1,N . DSL A0,N . DSC A1,F . DS A1,K CONTR . TRIAD DEFINITION RGS DEFINE THE REGISTERS N3DLD* SZ,H2 POLG . FLAG FOR SPECIAL TREATMENT SZ FLDSEX . USED TO DETECT NEGATIVE WIDTH SR,S6 R4,MINTX+056 . FLAG TO PREVENT MOVEMENT L A1,F31-2,NSEQN . THE SECOND COMMA MUST BE FLAGGED AND A1,(0777700,0777777) . SO THAT NO CONVERSION TNE A2,(0102100,07). WILL BE DONE S,T3 R5,F31-2,NSEQN . CHANGE TO 077 JNBL A14,COPND1,0,S3 4 FLDA . CHECK FOR NEGATIVE SIGN JE A15,COPND1,0,S1 3 FLDA . NEGATIVE CONSTANT WILL SLJ UPSL . ERROR OUT IN PHASE V MVW COPND1 COPND2 . ABS FUNCTION IS INSERTED MVW (070000,0) COPND1 . TO ELIMINATE (-0) AS A SHIFT COUNT MVW (0102000,0102) COPER . ABS FUNCTION OPERATOR LMJ B9,TSXFX L A5,SUBNO . RESULT OF ABS OPERATION SLJ LWSL . RETURN TO ORIGINAL RECURSION LEVEL S A5,COPND1 . REPLACE EXPRESSION WITH ABS OF FUNCTIO FLDA JNBL A14,COPND2,0,S3 4 FLDZ . CHECK FOR MINUS SIGN SZ,S3 COPND2 . REMOVE MINUS SIGN S R4,FLDSEX . SHOW NEGATIVE WIDTH JE A15,COPND2,0,S1 3 FLDZ SLJ UPSL . RETURN TO ORIGINAL RECURSION LEVEL MVW (070000,0) COPND1 MVW (010200,0102) COPER . EXPRESSION LMJ B9,TSXFX L A5,SUBNO . RESULT OF ABS FUNCTION SLJ LWSL S A5,COPND2 . REPLACE EXPRESSION WITH ABS OF FUNCTIO FLDZ L A1,FNC . ONLY FLD WHICH IS UNNESTED AN,M A1,1 . SHOULD GENERATE CODE AS IF IT IS TNZ,H2 SUBLV . ALL TO RIGHT IN SUBSCRIPT TE,H2 A1,F31C . TO LEFT OF EQUALS J FLD1 L A0,LSEQ . LOCATION OF EQUALS OPERATION L,M A1,8 . ID FOR OPERATOR TNE,S1 A1,F31+1,A0 J FLD1 L,S2 A0,STTYA . ID OF LAST STATEMENT TYPE TNE,M A0,37 . IO LIST AS IF RIGHT OF EQUALS J FLD1 L,M A1,017 . COMMA TYPE FOR FLD$ LEFT OF EQUALS S,S6 A1,COPER . FLAG FOR FLD LEFT OF EQUALS FLDB . TNZ,S3 CRRELN . TEST FOR COMPILER (FLD=ABS) J FLD8J SLJ UPSL . SETUP FOR RECURSION L A5,COPND1 . SET FOR ABS FUNCTION OF COPND1 SLJ CHEX LX,H2 B1,CTRST . INDEX TO RECURSION STACK S A5,TRST-10,B1 . REPLACE ABS OF OP CODE L A5,TRST-9,B1 . SET TO CONVERT OP 2 SLJ CHEX L,H2 B1,CTRST . CURRENT INDEX TO RECURSION STACK S A5,TRST-9,B1 . REPLACE ABS OF COPND2 SLJ LWSL . RETURN TO ORIGINAL RECURSION LEVEL FLD8J . LMJ B9,TSEX . PUT ORIGINAL COMMA TRIAD INTO TABLES MVW SUBNO FLDC1 SLJ UPSL . UP RECURSION LEVEL SLJ FORMSM . COMPUTE SUM OF TWO OPERANDS FLD3 LMJ B11,CHTS+1 NOP SLJ CHEX . CHECK TO SEE IF RESULT IS EXPRESSION S A5,COPND2 . FORM TRIAD MVW FLDC1 COPND1 MVW (0102100,07777) COPER JNE A15,COPND2,0,S1 5 $+6 IF SYM WAS AN EXPRESSION L A0,COPND2 . ACT AS IF EXPRESSION ITEM WAS READ SA A0,FL30 . IN NORMAL WAY LMJ B11,ITVSX+1 . SET PROPER BITS ON EXPRESSION LMJ B11,CHTS+1 . INSERT SECOND COMMA SLJ XERV . IMPOSSIBLE TO REDUCE A COMMA SLJ LWSL RETURN TO ORIGINAL RECURSION LEVEL L B11,CHTS SZ,H2 POLG . CLEAR SIGN FLAG J 1,B11 . RETURN TO CALLER OF FLD FLD1 L,M A1,016 . COMMA TYPE FOR FLD$ RIGHT OF EQUALS S,S6 A1,COPER . SET NEW COMMA TYPE SLJ UPSL SR,S6 R4,MINTX+056 . KEEP EXPRESSION FROM BEING COMMON SLJ CHJ . CHECK FOR J FACTORS SR,H2 R4,POLG . FLAG TO NOT PERMUTE SIGNS IN FLD MVW (030100,72) COPND1 . SET TO SUBTRACT WIDTH MVW (0101200,0) COPER . PLUS OPERATOR L,S3 A14,COPND2 . EXTRACT SIGN XOR,M A14,4 . REVERSE SIGN S,S3 A15,COPND2 LMJ B11,CHTS+1 . 72-WIDTH TO INTERNAL TABLE NOP . NO COLLAPSING IS POSSIBLE SLJ CHEX . INSERT ABS FUNCTION EXCEPT OF CONSTANT LX,H2 B1,CTRST . INDEX TO RECURSION STACK S A5,TRST-9,B1 . REPLACE ITEM WITH ABS OF ITEM FLD4 L A5,TRST-10,B1 . LAST COPND1 TZ,S3 CRRELN . COMPILER (FLD=ABS) SLJ CHEX . TEST FOR INSERTING ABS FUNCTION LX,H2 B1,CTRST . CURRENT RECURSION INDEX S A5,TRST-10,B1 FLD4J SLJ LWSL . REDUCE RECURSION LEVEL SZ,H2 POLG . CLEAR SIGN FLAG L A1,FLDSEX . FLAG FOR SIGNED FLD LSSC A1,2 OR,S3 A1,COPER . SET FLAG FOR SIGN EXTENSION S,S3 A2,COPER . ON TO OPERATOR J ROTS CHJR JNE A15,COPER,0,S6 016 *CHJ SZ,S6 MINTX+056 . ALLOW FLD TO BE COMMON EXP . TEST THE OPERATORS TO SEE IF THEY ARE CONSTANTS JNE A15,COPND1,0,T1 0301 *CHJ JNE A15,COPND2,0,T1 0301 *CHJ L,T3 A15,COPND1 SZ A13 TG,M A15,36 . SET TO MAKE ALL J FACTORS APPEAR L,M A13,36 . AS IF THEY ARE IN WORD ONE AN A15,A13 SSC A15,27 L,S1 R1,COMFL . TOTAL NUMBER OF J FACTORS A,T3 A15,COPND2 L B11,(1,0) A,S2 B11,COMFL . NUMBER TO SKIP TO FIND EITHER . IN ORDER TO SEARCH EITHER THIRD WORD OR QUARTER WORD FACTORS SE,H2 A15,FLDJ,*B11 J *CHJ . IT WAS NOT A J FACTOR TNZ,S3 FLDJ-1,B11 . TEST IF FLD INVOLVES SIGN EXTENSION J $+3 TNZ FLDSEX . FLAG FOR SIGN EXTENSION J *CHJ ALLOW EXPRESSION TO MOVE SR,S6 R4,MINTX+056 . SET BIT SO FLD CAN NOT MOVE J *CHJ FJ FORM 18,9,9 FLDJ . FIELD SPECIFICATIONS WHICH ARE J DESIGNATORS FJ 1,0,12 . T1 FJ 1,12,12 . T2 FJ 1,24,12 . T3 FJ 0,0,36 . W FJ 0,18,18 . H2 FJ 0,0,18 . H1 FJ 0,30,6 . S6 FJ 0,24,6 . S5 FJ 0,18,6 . S4 FJ 0,12,6 . S3 FJ 0,6,6 . S2 FJ 0,0,6 . S1 FLDQ FJ 0,0,9 . Q1 FJ 0,9,9 . Q2 FJ 0,18,9 . Q3 FJ 0,27,9 . Q4 CHEXR S A5,COPND2 . ITEM TO TAKE ABS OF L A0,A5 SSL A0,30 TNE,M A0,3 . SKIP ABS OF CONSTANT J *CHEX MVW (070000,0) COPND1 MVW (0102000,0102) COPER . ABS FUNCTION OPERATOR IFL FNC 1 . INCREASE FUNCTION LEVEL L A0,FNC . CURRENT FUNCTION LEVEL SZ,H2 COPER SZ FNX,A0 SR,S1 R4,FNX,A0 . INTRINSIC FUNCTION AT THIS LEVEL SR,S3 R4,FNX,A0 . NUMBER OF ABS FUNCTION L A1,(020054550100) . INITIALIZE BITS FOR S A1,INTRX,A0 . ABS FUNCTION LMJ B11,CHTS+1 . INSERT ABS FUNCTION NOP . J *CHEX FORMSR MVW (0101200,0) COPER JNE A15,COPND1,0,S1 5 $+6 TEST FOR EXPRESSION L A0,COPND1 . FUDGE DATA FOR ITVSX S A0,FL30 . SHOW EXPRESSION HAS AN LMJ B11,ITVSX+1 . EXTRA USE AS IF READ FROM FL30 JNE A15,COPND2,0,S1 5 $+6 L A0,COPND2 S A0,FL30 LMJ B11,ITVSX+1 J *FORMSM $(2) CHEX J $-$ J CHEXR . CHECK FOR INSERTING ABS FUNCTION CHJ J $-$ J CHJR . ENTRANCE TO CHECK FACTORS FORMSM J $-$ J FORMSR FLDC1 +0 . USED FOR TEMP STORAGE FLDC2 +0 . USED FOR TEMP STORAGE FLDSEX +0 . NON ZERO FOR SIGN EXTENSION END