SUBROUTINE SGEN INTEGER WOPTR, WO (64), TLI, TL (128) INTEGER BO, SS, SS2, NRFCH COMMON /SCR1/ WOPTR, WO, TLI, TL COMMON /SCR1/ BO, SS, SS2, NRFCH INTEGER NI, NJ, NK INTEGER NSIZE INTEGER NLX, FNLX, REMNLX, OVNLX, TNAME INTEGER NLSTRT, NLSTOP, NLSIZE, SRCHST INTEGER NTSTRT INTEGER NTSTOP INTEGER NTSIZE INTEGER PARFLG INTEGER SPARFL INTEGER NLWRDS INTEGER TX INTEGER NLENO INTEGER STDMD INTEGER MSHIFT INTEGER REGCNT INTEGER NULLX INTEGER STPTRX INTEGER SPMODE INTEGER DPMODE INTEGER SPECMD INTEGER ENFLAG INTEGER DFINED INTEGER CVALUE INTEGER NLXLCI INTEGER ENEXTD INTEGER NAMAT0 INTEGER NAMCON INTEGER NLMODE INTEGER PARBIT INTEGER OPBIT INTEGER LOCALB INTEGER REGBIT INTEGER EXTBIT INTEGER STRBIT INTEGER DPBIT INTEGER CBIT INTEGER PBIT INTEGER EPBIT INTEGER IOBIT INTEGER ARBIT INTEGER EXDBIT INTEGER TPLBIT INTEGER USEBIT INTEGER LCMASK INTEGER MDMASK INTEGER NAMLOC, REGNUM COMMON /NLIST/ NI COMMON /NLIST/ NJ COMMON /NLIST/ NK COMMON /NLIST/ NSIZE COMMON /NLIST/ NLX COMMON /NLIST/ FNLX COMMON /NLIST/ REMNLX COMMON /NLIST/ OVNLX COMMON /NLIST/ TNAME COMMON /NLIST/ NLSTRT COMMON /NLIST/ NLSTOP COMMON /NLIST/ NLSIZE COMMON /NLIST/ SRCHST COMMON /NLIST/ NTSTRT COMMON /NLIST/ NTSTOP COMMON /NLIST/ NTSIZE COMMON /NLIST/ PARFLG COMMON /NLIST/ SPARFL COMMON /NLIST/ NLWRDS COMMON /NLIST/ TX COMMON /NLIST/ NLENO COMMON /NLIST/ STDMD COMMON /NLIST/ MSHIFT COMMON /NLIST/ REGCNT COMMON /NLIST/ NULLX COMMON /NLIST/ STPTRX COMMON /NLIST/ SPMODE COMMON /NLIST/ DPMODE COMMON /NLIST/ SPECMD COMMON /NLIST/ ENFLAG COMMON /NLIST/ DFINED COMMON /NLIST/ CVALUE COMMON /NLIST/ NLXLCI COMMON /NLIST/ ENEXTD COMMON /NLIST/ NAMAT0 COMMON /NLIST/ NAMCON COMMON /NLIST/ NLMODE COMMON /NLIST/ PARBIT COMMON /NLIST/ OPBIT COMMON /NLIST/ LOCALB COMMON /NLIST/ REGBIT COMMON /NLIST/ EXTBIT COMMON /NLIST/ STRBIT COMMON /NLIST/ DPBIT COMMON /NLIST/ CBIT COMMON /NLIST/ PBIT COMMON /NLIST/ EPBIT COMMON /NLIST/ IOBIT COMMON /NLIST/ ARBIT COMMON /NLIST/ EXDBIT COMMON /NLIST/ TPLBIT COMMON /NLIST/ USEBIT COMMON /NLIST/ LCMASK COMMON /NLIST/ MDMASK COMMON /NLIST/ NAMLOC, REGNUM INTEGER NINE INTEGER COMMA, SEMIC, PERIOD, COLON, FOR, DOOP, WHILE INTEGER RBRACE, LBRACE, RETOP, CRUTCH INTEGER LPAREN, RPAREN, LBK, RBK INTEGER EQUAL, NEQUAL, GTR, GEQ, LESS, LESSEQ, ARROW INTEGER PLUS, MINUS, MULT, DIVIDE, MODOP INTEGER OROP, ANDOP, AOROP, XOROP, AANDOP INTEGER LSHIFT, RSHIFT, LCYCLE, RCYCLE, ALSHFT, ARSHFT INTEGER NEG, UPARO, DNARO, COM INTEGER LOC, GIZZY, QUOTE, ZRL, TEMPL INTEGER SP, DP, ST, HEX INTEGER ATSIGN INTEGER ICLP06 COMMON /OPERS/ NINE COMMON /OPERS/ COMMA, SEMIC, PERIOD, COLON, FOR, DOOP, WHILE COMMON /OPERS/ RBRACE, LBRACE, RETOP, CRUTCH COMMON /OPERS/ LPAREN, RPAREN, LBK, RBK COMMON /OPERS/ EQUAL, NEQUAL, GTR, GEQ, LESS, LESSEQ, ARROW COMMON /OPERS/ PLUS, MINUS, MULT, DIVIDE, MODOP COMMON /OPERS/ OROP, ANDOP, AOROP, XOROP, AANDOP COMMON /OPERS/ LSHIFT, RSHIFT, LCYCLE, RCYCLE, ALSHFT, ARSHFT COMMON /OPERS/ NEG, UPARO, DNARO, COM COMMON /OPERS/ LOC, GIZZY, QUOTE, ZRL, TEMPL COMMON /OPERS/ SP, DP, ST, HEX COMMON /OPERS/ ATSIGN COMMON /OPERS/ ICLP06 INTEGER AREG, XREG, YREG, NRREGS INTEGER STATUS (10), STAREG, STXREG, STYREG INTEGER REGS (10) INTEGER ACTREG (2), ACTLO, ACTHI INTEGER NZREG INTEGER ICLP10 COMMON / REGS / AREG, XREG, YREG, NRREGS COMMON / REGS / STATUS, REGS, ACTREG, NZREG COMMON / REGS / ICLP10 EQUIVALENCE (ACTLO, ACTREG (1)) EQUIVALENCE (ACTHI, ACTREG (2)) EQUIVALENCE (STAREG, STATUS (1)) EQUIVALENCE (STXREG, STATUS (2)) EQUIVALENCE (STYREG, STATUS (3)) INTEGER CLRACV INTEGER CLRACX INTEGER CLRSTA INTEGER TRAREG INTEGER SAVREG INTEGER CTFREE INTEGER SETREG INTEGER ICLP11 COMMON /RMCODE/ CLRACV, CLRACX, CLRSTA, TRAREG, SAVREG COMMON /RMCODE/ CTFREE, SETREG COMMON /RMCODE/ ICLP11 INTEGER STK (20, 13) INTEGER NAMEX (40) INTEGER OPX, STKSIZ, OCBIT, FUNBIT, SBIAS INTEGER ICLP14 COMMON /SDEFS/ STK, OPX, STKSIZ, OCBIT, FUNBIT, SBIAS COMMON /SDEFS/ ICLP14 EQUIVALENCE (STK (1,1), NAMEX (1)) INTEGER MODE (40), SUBX (20), SUBXM (20), BIAS (40) EQUIVALENCE (STK (1, 3), MODE (1)) EQUIVALENCE (STK (1, 2), SUBX (1)) EQUIVALENCE (STK (1, 4), SUBXM (1)) EQUIVALENCE (STK (1, 5), BIAS (1)) INTEGER LOCFLG (20) EQUIVALENCE (STK (1, 7), LOCFLG (1)) INTEGER OPCODE (20) EQUIVALENCE (STK (1, 9), OPCODE (1)) INTEGER WF1,WF2,WF3,WF4,WF5,WF6,WF7,WF8,WF9,WF10,WF11,WF12,WF13,W 1F14,WF15,WF16,WF17 INTEGER ICLP16 COMMON / WF / WF1,WF2,WF3,WF4,WF5,WF6,WF7,WF8,WF9,WF10,WF11,WF12 1,WF13,WF14,WF15,WF16,WF17 COMMON / WF / ICLP16 INTEGER OP, LEFT, RIGHT, LSTKX, RSTKX INTEGER TS, LOAD, BASE INTEGER THIS, OTHER, SIDE, HI, LOW INTEGER INTBR, ROW, COL, INREG, OUTREG INTEGER BCC, BNE INTEGER CLC, JMP, LDAABS, LDAI, LDAZP INTEGER SBCI, SEC, STAZP, TAX, TXA LOGICAL COMZER, EZSTA, MORE COMMON /GCOM/ OP, LEFT, RIGHT, LSTKX, RSTKX COMMON /GCOM/ TS, LOAD, BASE COMMON /GCOM/ THIS, OTHER, SIDE, HI, LOW COMMON /GCOM/ INTBR, ROW, COL, INREG, OUTREG COMMON /GCOM/ BCC, BNE COMMON /GCOM/ CLC, JMP, LDAABS, LDAI, LDAZP COMMON /GCOM/ SBCI, SEC, STAZP, TAX, TXA COMMON /GCOM/ COMZER, EZSTA, MORE INTEGER SEQS, SEQCT, DEXTLI, BMITLI INTEGER SHOP, OPTS, CTNX, SHFTLI LOGICAL VARSHF MODE (RIGHT) = SPMODE IF (.NOT. (NAMEX (RIGHT) .EQ. NULLX .AND. OPCODE (RIGHT) .EQ. LDAI 1))GO TO 13042 VARSHF = .FALSE. SEQS = BIAS (RIGHT) GO TO 13043 13042 CONTINUE VARSHF = .TRUE. SEQS = 1 SIDE = RIGHT CALL GLXY (XREG) 13043 CONTINUE IF (.NOT. (STAREG .NE. LEFT))GO TO 13044 SIDE = LEFT IF (.NOT. VARSHF .AND. SEQS .EQ. 1 .AND. MODE (LEFT) .EQ. DPMODE 1.AND. (OP .EQ. LSHIFT .OR. OP .EQ. RSHIFT)) GO TO 2000 CALL GENLA IF (MODE (LEFT) .EQ. DPMODE) CALL GENMOV STAREG = LEFT 13044 CONTINUE LOCFLG (LEFT) = 0 IF (SEQS .EQ. 0) RETURN SHOP = OP - LSHIFT + 1 IF (.NOT. (MODE (LEFT) .EQ. DPMODE))GO TO 13046 SHOP = SHOP + 6 CALL REGMAN (SAVREG, AREG, CTNX) CTNX = REGS (CTNX) GO TO 13047 13046 CONTINUE IF (.NOT. (OP .EQ. RCYCLE))GO TO 13048 CALL REGMAN (CTFREE, CTNX, 1) CTNX = REGS (CTNX) CALL BLDOP (STAZP, WF5, 0, CTNX, WF7) 13048 CONTINUE 13047 CONTINUE IF (.NOT. (VARSHF))GO TO 13050 CALL DEFTL (TLI) DEXTLI = TLI TLI = TLI + 1 CALL BLDBLK (202, WF4) BMITLI = TLI TLI = TLI + 1 CALL BLDOP (48, WF5, 0, BMITLI, WF9) 13050 CONTINUE DO 13052 SEQCT = 1, SEQS GO TO (100, 200, 300, 400, 100, 200, 500, 600, 700, 800, 900, 100 10), SHOP 100 CALL BLDBLK (10, WF4) GO TO 13052 200 CALL BLDBLK (74, WF4) GO TO 13052 300 CALL BLDBLK (CLC, WF4) CALL BLDBLK (42, WF4) CALL BLDOP (105, WF5, 0, NULLX, WF7) GO TO 13052 400 CALL BLDOP (102, WF5, 0, CTNX, WF7) CALL BLDBLK (106, WF4) GO TO 13052 500 CALL BLDOP ( 6, WF5, 0, CTNX, WF7) CALL BLDOP ( 38, WF5, 1, CTNX, WF7) GO TO 13052 600 CALL BLDOP ( 70, WF5, 1, CTNX, WF7) CALL BLDOP (102, WF5, 0, CTNX, WF7) GO TO 13052 700 CALL BLDOP (LDAZP, WF5, 0, CTNX, WF7) CALL BLDBLK (42, WF4) CALL BLDOP (38, WF5, 1, CTNX, WF7) CALL BLDOP (38, WF5, 0, CTNX, WF7) GO TO 13052 800 CALL BLDOP (LDAZP, WF5, 0, CTNX, WF7) CALL BLDBLK (106, WF4) CALL BLDOP (102, WF5, 1, CTNX, WF7) CALL BLDOP (102, WF5, 0, CTNX, WF7) GO TO 13052 900 CONTINUE 1000 CALL FAULTP (15) 13052 CONTINUE IF (.NOT. (VARSHF))GO TO 13054 CALL BLDOP (76, WF8, 0, DEXTLI, WF9) CALL DEFTL (BMITLI) CALL REGMAN (CLRACX, NZREG, 0) 13054 CONTINUE CALL REGMAN (CLRACX, AREG, 0) RETURN 2000 IF (.NOT. (OP .EQ. LSHIFT))GO TO 13056 CALL GENLA CALL BLDBLK (10, WF4) CALL GENMOV CALL BLDBLK (42, WF4) GO TO 13057 13056 CONTINUE THIS = HI OTHER = LOW CALL GENLA CALL BLDBLK (74, WF4) CALL GENMOV CALL BLDBLK (106, WF4) 13057 CONTINUE RETURN END