. . SECTION 1.13.0 . THIS SECTION GENERATES CODE FOR THE COLON OR FUNCTION . OPERATOR. IF THE COLON CORRESPONDS TO AN OPEN FUNCTION . LIKE 'ABS' THEN SECTION 1.13.1 IS GIVEN CONTROL. . OTHERWISE, A SUBROUTINE CALLING SEQUENCE IS GENERATED. . N5REG . THIS DEFINES THE REGISTERS $(1) . LIT OP16E* L BB2,TT2,BB1 L,XH2 B11,TT1,BB2 L,S1 AA1,TT1,BB2 TE,M AA1,03 J OP16 TP,XM 0,B11 AN,M B11,0,*0 L AA1,0,B11 TE,M AA1,2 J OP16 TEST FOR POWER OF 2 L,S6 AA1,TT3+1,BB1 TE,M AA1,062 TEST FOR BOOL J OP16 L,M BB3,2 . NUMBER OF TRIADS TO SKIP L,S2 AA1,TT3+2,BB1 TNZ,S6 TT3+2,BB1 TE,M AA1,11 TEST FOR DIVID BY POWER OF 2 J OP16QA OP16QB L AA1,ALGI A AA1,BB3 S AA1,ALGI SKIP TO NEXT TRIAD SLJ GEN PCI 0,TT1+2,BB1 PCI 0,TT2,BB2 POWER OF 2 PCI 0,TT3+2,BB1 PCI 0,TT3,BB1 SHOULD BE DEASSIGNED SLJ AREQ1 PCI 0,P1 TE,T P1,OP16EC,3 TEST DOUBLE PRECISION TE,S P0,OP16EA,0 MI 1,(LN P0,P0) OP16EA MI 1,*(SSA P0,P2) OP16EB SLJ MRSLT PCI 0,P3 SLJ DEASN PCI 0,P2 SLJ DEASN PCI 0,P4 EX ALG2 OP16EC TE,S P0,OP16ED,0 MI 1,(DLN P0,P0) OP16ED MI 1,*(DSA P0,P2) SA,U 1,P0 SHOW RESULT IN UPPER REGISTER J OP16EB OP16QA TE,M AA1,023 J OP16 . NO OFFSET L,S2 AA1,TT3+3,BB1 TE,M AA1,017 J OP16 L,S2 AA1,TT3+4,BB1 A,M BB3,2 A,M BB1,2 . POINT TO NUMERATOR TE,M AA1,11 . TEST FOR DIVIDE J OP16 J OP16QB OP16* S,H1 BB1,ARGLST SAVE TO MATCH FUNCTION NUMBER OP16JA L,H1 BB2,ARGLST JGD BB1,$+2 J OP16JB L,T1 AA1,TT12,BB1 TE,H1 AA1,ARGLST J OP16JA L,S2 AA1,TT3,BB1 TE,M AA1,021 TEST FOR COMMA J OP16JC TNZ,H2 TT3,BB1 J OP16JA OP16JC S,H2 BB1,ARGLST L,M AA1,TT3,BB1 S AA1,ARGOPA L AA1,TT10,BB2 TZ,S3 TT10,BB1 L,M AA1,0777 S,H1 AA1,ARGOPA L AA1,TT4,BB1 S AA1,ARGOPB LMJ B11,ARG L,H2 BB1,ARGLST J OP16JA OP16JB L BB1,ALGI SZ ARGLST SZ ARGREG LX,H2 B11,TT3,BB1 COLON ID TP,XH2 TT3,BB1 AN,M B11,0,*0 LA AA1,TT3,BB1 082800 AND,M AA1,0177777 082900 S,H2 AA2,ARGOPB JZ AA2,OP161 J IF REGULAR COLON 083000 L,S3 AA1,TT2,BB1 TNE,M AA1,6 TEST FOR BOOLEAN L,M AA1,1 SET TO INTEGER S AA1,TT2,BB1,S3 TLE,M AA2,63 OPEN FUNCTION TEST J *OP16T,B11 SELECT OPEN FUNCTION 083200 OP161* LA,S1 AA1,TT2,BB1 GET 2ND OPERAND ID S,H2 AA1,B11FL MARK THAT B11 DESTROYED TNE,M AA1,6 PRIMITIVE TEST 083400 J OP163 NO 083500 LA,M AA1,1 ARG NR 083700 S,H1 AA1,ARGOPB REENT L,M AA1,TT2,BB1 REENT S AA1,ARGOPA REENT L AA1,TT10,BB1 S,H1 AA1,ARGOPA REENT OP162 LMJ B11,ARG ENTER 1ST ARG IN ARGT 084400 LX BB1,ALGI BUG NUMBER 7 11/22/65 OP163* L,H2 B11,TT1,BB1 . SYM REF ALSO REFERENCED FROM N5EQ TNZ,H2 3,B11 J OPJJ . NO ARGUMENT FUNCTION L,T1 AA1,TT1,BB1 . NUMBER OF ARGS TNE,M AA1,0200 SZ AA1 TZ AA1 J OPJJ . ARG(S) ALREADY PROCESSED S,H2 B11,ARGOPA . DUMMY UP SZ,H1 ARGOPB . SET TO ARG ZERO S,H1 B11,ARGOPA . SYM POINTER TO FUNCTIUON LMJ B11,ARG . PROCESS DUMMY ARG 0 L BB1,ALGI . RESTORE BB1 L,H2 B11,TT1,BB1 . RESTORE B11 OPJJ . TP,XH2 TT1,BB1 IF NEG ANX,M B11,0,*0 SZ N5CLAG TZ TT3,BB1 IGNORE TESTING INTRINSIC FUNCTIONS J $+3 TZ,H2 3,B11 S B11,N5CLAG SET FLAG FOR ARGS FROM ARG STATEENT SZ ABNORF L,S2 AA1,2,B11 JNB AA1,$+2 S AA1,ABNORF . SET FLAG THAT FUNCTION IS ABNORMAL SLJ CLOB1 . DESTROY ALL DEST REG SZ WALKBK SZ ABNORF . LLEAR FLAG LX BB1,ALGI 084900 L,T1 AA1,TT1,BB1 NUMBER OF ARGUMENTS TNE,M AA1,0200 SZ AA1 TNZ AA1 . TEST FUNCTIONS WITH ZERO ARGS SLJ COLGX S AA1,OP16NA LA,M AA1,PZERO SA AA1,PZERO SZ PZERO+1 SZ PZERO+2 LA,M AA1,A0 085000 SA AA1,PZERO+3 085100 S,S4 AA1,CRFLGS . SUPPRESS NOP IN W. B. TZ,S2 U1110A . REENTRANT LIBRARY TNZ STIOFL . IN IO LIST? J $+4 SLJ GEN . REGISTER SAVE AND ACTIVATE MI 1,(SLJ ('ATH03$')),NAME . USERS I BANK EX $+1 TZ,S5 TT3,BB1 AUTO MATH FUNCTION TEST EVER1 J MF EVER1 LA,S2 AA1,TT3,BB1 TNE,M AA1,20 SPECIAL DIVIDE TEST J OP16AB TE,M AA1,18 ** FUNCTION TEST J OP163A ORDINARY FUNCTION LA,S6 AA1,TT1,BB1 SSC AA1,5 SSL AA1,31 LX BB2,AA1 TNE,M AA1,12 . DBL TO COMPLEX J OP16RX . NOT IMPLEMENTED TNE,M AA1,15 . COMPLEX TO DBL J OP16RX LA,S6 AA1,NEXPMT,BB2 EVER1 SA,S3 AA1,TT3,BB1 EVER1 LA,M AA1,NEXPT,BB2 TZ,S2 U1110A . REENTRANT LIBRARY J OP16RH OP16AA SA,H2 AA1,OP163Z EVER1 SLJ GEN GENERATE CALL FOR PCI 0,TT3,BB1 EXPONENTIATING PCI 0,(((B11))-3) ROUTINE MI 1,OP163Z,NAME SLJ MRSLT PCI 0,P1 EX OP163G OP16AB L,M AA1,4 SET MODE TO COMPLEX S,S3 AA1,TT3,BB1 L,M AA1,('CDV$ ') TZ,S3 U1110A . REENT. MATH LIBRARY J OP16RE . USE REENTRANT CDIV$ J OP16AA OP163A LA,H2 AA1,TT3,BB1 AND,M AA1,0177777 TE,M AA2,055 CABS TEST J OP163D TZ,S3 U1110A . REENT. MATH LIBRARY J OP16RF SLJ GEN GEN CABS CALL PCI 0,TT1,BB1 PCI 0,TT3,BB1 PCI 0,(((B11))-3) MI 1,(LMJ P3,('CABS ')),NAME OP163F SA,S P1,P0 SLJ MRSLT PCI 0,P2 EX $+1 OP163G TNZ,S2 U1110A . REENTRANT LIBRARY J OP163B . NO L,M AA2,062 . YES, LOAD WALKBACK CODE SLJ GENWLK . REENTRANT WALKBACK SZ WALKBK J OP163B MF L,S5 B11,TT3,BB1 EVER1 LA,M AA1,MFTAB,B11 EVER1 TNZ,S3 U1110A . REENT. MATH LIBRARY J OP16AA EVER1 L,M AA1,RMATHL,B11 . REENTRANT MATH LIB NAME OP16AR L,S3 BB2,TT3,BB1 . MODE OF FUNCTION SZ,H2 TT10,BB1 L AA2,BB2 TE,M AA2,1 INTEGER AND REAL USE RMATH$ AN,M BB2,1 S,H2 AA1,OP16RA . LIJ TEST L,M AA1,COLTA-1,BB2 . NAME OF I BANK S,H2 AA1,OP16RB . LXI INSTRUCTION SLJ GEN PCI 0,(((B11))-3) PCI 0,TT3,BB1 MI 1,OP16RB,NAME . LXI BANK NAME EX $+1 L,M AA1,021 S,S2 AA1,OLDITM I8 BIT RELOCATION SLJ GENR MI 1,OP16RA,NAME . LIJ TO ENTRY POINT SLJ MRSLT PCI 0,P2 EX $+1 L,M AA2,073 . WALKBACK CODE SLJ GENWLK J OP163B OP16RE L,M AA1,('CDIV$ ') J OP16AR OP16RF L,M AA1,('CABS$ ') OP16RG L,M BB2,4 SET COMPLEX TYPE J OP16AR+1 OP16RH L,M AA1,REEXNM-1,BB2 REENTRANT EXP LIB NAME TNZ,S3 U1110A . REENT. MATH LIBRARY J OP16AA . USE LMJ'S ON NON REENT. LIB. L,M AA2,0146 THERE TYPES USE RMATH$ SSL AA2,0,BB2 JNB AA2,$+3 L,M BB2,2 USE RMATH$ J OP16AR+1 L,M AA3,0,BB2 TNE,M AA3,13 J OP16RG USE CMATH$ L,M BB2,3 THE REST USE DMATH$ J OP16AR+1 OP16RX L,H2 AA1,ITEM S,H1 AA1,OP16RY LMJ B11,ERFP +OP16RY . DBL/COMPLEX EXPONENTIATION NOT ALLOWED J PHS5G OP163D L,H2 B11,TT1,BB1 SYM LOC SZ RETURN SZ NORCAL . ZERO UNLESS ARG STATEMENT SZ AA4 L,S3 AA1,2,B11 AND,M AA1,7 TE,M AA2,5 NO ARG STAT FOR DUMMY ARGS TNZ,H2 3,B11 J OPP5 LMJ B11 S B11,WALKBK S,H2 B11,NORCAL . SHOW ARG STATEMENT PRESENT L,H2 B11,3,B11 INDEX TO SPECS LXI,M B11,1 L,M AA1,1 LN,M AA3,1 L,M AA4,64 OPP1 L,S1 AA2,SYM,B11 JGD AA1,$+3 PICK UP FIRST SUBFIELD OF EACH SPEC L,S4 AA2,SYM,*B11 L,M AA1,1 TNE,M AA2,077 J OPP4 END OF LIST TG,M AA2,010 AN,M AA2,040 . REMOVE SPECIAL FLAGS FOR LXI,LIJ L BB2,AA2 EX $+3,BB2 SN AA4,WALKBK L,M AA4,$ PREVENT FINDING MORE THAN ONE WALKBACK JGD AA4,OPP1 LOC JGD AA4,OPP1 VALUE J OPP2 RETURN J OPP3 CALL AN,M AA4,65 JGD AA4,OPP1 . LOAD INCREMENT FIELD OPP2 L,H1 AA2,SYM,B11 TZ AA1 L,H2 AA2,SYM-1,B11 S AA2,RETURN SAVE RETURN REG J OPP1 OPP3 L,S2 AA3,SYM,B11 TZ AA1 L,S5 AA3,SYM-1,B11 J OPP1 OPP4 SZ AA4 . FLAG FOR LIJ AND LDJ JN AA3,OPP6 . LMJ JZ AA3,OPP7 SLJ TNE,M AA3,1 J OPP8 ER AND,M AA3,017 DSC AA3,36 . INTERCHANGE AA3 AND AA4 A,M AA3,11 OPP4A S AA3,REG+3 L AA1,CAL+1 TEP,M AA4,020 L AA1,CAL+3 TEP,M AA4,040 L AA1,CAL+4 S AA1,CALL OPP4B L,S5 AA2,RETURN REGISTER FOR RETURN JZ AA2,OP163Y TG,M AA2,28 A,M AA2,36 REGISTER NUMBER FOR RETURN IN ABSOLUTE DSA AA2,1 SSL AA3,35 LSSL AA2,1 S,S3 AA3,PZERO+3 S,T3 AA2,PZERO+3 SET REGISTER NUMBER THAT RESULT WILL BE IN J OP163Y OPP5 SZ WALKBK OPP6 L,M AA3,23 J OPP4A OPP7 L AA1,CAL SLJ S AA1,CALL J OPP4B GO TEST FOR R OPTION OPP8 L AA1,CAL+2 ER S AA1,CALL J OPP4B GO TEST FOR R OPTION OP163Y L BB1,ALGI L,T1 AA1,TT1,BB1 TNE,M AA1,0200 SZ AA1 S AA1,OP16NA L,M AA1,2 S,S1 AA1,TT1,BB1 SZ,S4 CRFLGS . GENERATE NOP IN W. B. IF APROPRIATE TZ NORCAL J OPJ16A TNZ,S2 U1110A . TEST FOR REENTRANT CODE J OPJ16C L AA1,OP16NA . NUMBER OF ARGS A,M AA1,06001 . BIT IN S2 MARKS A TFOR CALLING SEQUENC S,H2 AA1,CALXI+1 . SET UP FOR IMMEDIATE LOAD L AA1,(LXI B0,0,0,XM) L,M AA2,12 . EQUIVALENT FOR A0 SSC AA2,14 . ALIGN WITH A FIELD A AA1,AA2 SSC AA1,18 S,H1 AA1,CALXI+1 . SET TO LOAD POSITIVE OF NUMBER OF ARGU OPJ16B LMJ B11,FILE61 +CALXI OPJ16C . SLJ GEN PCI 0,TT1,BB1 PCI 0,TT3,BB1 PCI 0,REG MI 1,CALL SA,S P1,P0 EX $+1 TNZ,S2 U1110A REENTRANT LIBRARY J OPP9 L AA2,WALKBK S AA2,N0RGSA L,M AA2,062 WALKBACK CODE SLJ GENWLK L AA2,N0RGSA S AA2,WALKBK OPP9 . . SLJ TON$ TNZ,S3 LXIFLG . TEST FOR ARGS IN DBANK J OP163J . NO ARGS ARE IN LINE LMJ B11,FILE61 +CIOCTR . CHANGE TO DBANK INSTRUCTIONS L BB2,IODBNK . SYM POINTER TO CREATED LABEL SLJ EVALLB L,H1 AA1,N5ERLA . CURRENT SEQUENCE NUMBER S AA1,0,BB2 . CURRENT SEQUENCE NUMBER L,M AA1,'D' . USE AS EDIT CODE FOR LABEL S,S1 AA1,0,BB2 L,M AA1,0107 . CODE FOR LABEL S,H1 AA1,2,BB2 OP163J TNZ OP16NA NUMBER OF ARGUMENTS J OP163Q SKIP FOR CALL SLJ GEN PCI 0,TT1,BB1 PCI 0,TT3,BB1 PCI 0,REG SLJ MRSLT 085800 PCI 0,P2 085900 EX $+1 086000 OP163Q L BB1,ALGI L BB1,TT1,BB1 TEST FOR CALL EXIT L AA1,0,BB1 TNE AA1,('EXIT ') S AA1,GOTOFL SHOW CHANGE OF CONTROL OP163B LX BB1,ALGI GEN CALLING SEQ SZ,H2 ARTYIX . INITIALIZE SIXTH WORD INDEX SZ ARTYTB . INITIALIZE ENTRY L,M AA1,ARTYTB . LOC TO BUILD UP ARG TYOES S,H2 AA1,ARTYWX . LA,M AA1,1 ARG NR 086400 SA AA1,OP16A L AA2,OP16NA NUMBER OF ARGUMENTS TNZ AA2 SZ OP16A A CALL HAS NO ARGS ANA AA2,ARGX DECREASE ARGX BY 086800 SNA AA2,ARGX NR OF ARGS 086900 LA AA2,WALKBK AN,M AA2,1 JN AA2,OP1631 SA AA2,WALKBK JNZ AA2,OP1631 SLJ WKBACK LA AA1,OP16A OP1631* LX B11,(1,0) LXM B11,ARGX 087100 LR R1,OP16NA NR OF ARGS 087200 TNZ R1 J OP168Q SE,H1 AA1,ARGT3,*B11 SLJ ERRL LX,S2 BB1,ARGT-1,B11 ARGUMENT TYPE 087500 L,S3 AA1,ARGT2-1,B11 S AA1,ARGTYP L BB2,ARTYWX . WORD INDEX TO STORE ARG TYPE L BB3,ARTYIX . SIXTH INDEX TO STORE ARG TYPE TZ,H2 ARTYWX . IO ARGS MAY NOT INITIALIZE EX ARTYEX,*BB3 . SAVE ARG TYPE FOR CALLING SEQ S BB2,ARTYWX . SAVE WORD INDEX S BB3,ARTYIX . SAVE SIXTH INDEX L,S1 AA1,ARGT-1,B11 S AA1,ARGIND INDIRECT INDICATOR LA,H2 AA1,ARGT-1,B11 087600 J $+1,BB1 087700 J OP164 087800 J OP165 087900 J OP166 088000 J OP167 088100 J OP169 J OP1695 J OP1697 J OP637 J OP638 OP637 AND,M AA1,*0177777 L BB1,AA2 L,XH2 AA1,ARGT-1,B11 L,S1 BB2,ARGT-1,B11 J $+1,BB2 J OP168Q L AA1,0,BB1 J $+2 LN AA1,0,BB1 S AA1,OP164C LMJ B11,FILE61 +OP164Y J OP168Q OP638 AND,M AA1,*0177777 L BB1,AA2 LMJ B11,DTEMP J OP168Q OP164 SA,H2 AA1,OP1641 L BB2,AA1 L,S3 AA1,2,BB2 TEST FOR MAGIC FUNCTION USED AS FUNCTION ARGUMNET AND,M AA1,7 TNE,M AA2,6 J OP164B TZ,H2 CR131K J OP1642 OP16GJ SLJ GEN PCI 0,OP1641 MI 1,(+ P1) 088500 EX OP168 088600 OP1642 TE,M AA2,5 J OP16GJ SLJ GEN PCI 0,OP1641 MI 1,(+P1) EX OP16AJ OP164B L AA1,0,BB2 S AA1,OP164C SLJ GEN MI 1,(+OP164C),NAME EX OP168 OP165 TNZ,S3 LXIFLG . FORCE CALLS TO DBANK TZ ARGIND . STORE INTO CALLING SEQUENCE FROM ARG S J $+3 FROM ARG STATEMENT TZ,H2 CR131K J OP166C LX BB1,AA1 L B11,LCN L AA1,LRSTC1,B11 S,H2 AA1,1,BB1 . RSA UNDER COUNTER L B11,CRSTC1,B11 S,H1 B11,1,BB1 SLJ GEN 089200 MI 1,(+ 0),SREL 089300 EX $+1 L,M AA1,021 . FOR BANKING FORCE 18 BIT TZ,S3 LXIFLG . TO REMOVE INDEX FOR BANKING S,S2 AA1,OLDITM J OP168 OP166 SA,H2 AA1,OP1662 TYPE 2 LX BB1,AA1 TOP,M AA1,040000 . TEST FOR CHARACTER TEMP LMJ B11,DTEMP DE-ASSIGN TEMP 089600 SLJ GEN 089700 MI 1,OP1662,TEMP EX OP168 089900 OP166C S,H2 AA1,OP1662 LX BB1,AA1 TOP,M AA1,040000 . TEST FOR CHARACTER TEMP LMJ B11,DTEMP . DEASSIGN TEMP OP166A SLJ GEN MI 1,*OP1662,TEMP EX $+1 OP16AJ J OP168 OP167 SA,H2 AA1,OP1671 SLJ GEN 090100 PCI 0,OP1671 MI 1,(+ P1) 090300 EX OP168 090400 OP168 TNZ ARGIND J OP168J L,H2 AA1,OLDITM+1 OR,M AA1,*0 S,H2 AA2,OLDITM+1 OP168J TZ SPIOAU EXIT BACK TO IO J *SPIOAU TZ CRLBCM J OP168Q TP OLDITM+1 TEST FOR JUMP , LABELS J OP168Y L,M AA1,1 TZ,S1 OLDITM TEST FOR SYM RELOC J OP168L L AA4,OLDITM+1 AND,M AA4,0177777 GET SYM TABLE ADDRSS L B11,AA4 L,H1 AA4,2,B11 AND,M AA4,7 TE,M AA5,5 TEST FOR VARIABLE OR DUMMY ARG JNZ AA5,OP168L AND,M AA4,0700 TEST FOR DIMENSIONS JNZ AA5,OP168K DO NOT SET BIT INDICATING VALUE OP168L . SSC AA1,10 RATHER THAN NAME AS ARGUMENT OR AA1,OLDITM+1 S AA2,OLDITM+1 OP168K L AA1,OP16A L AA3,ARGTYP TYPE OF ARGUMENT SSC AA3,14 ALIGN WITH A FIELD OR AA3,OLDITM+1 SET TYPE INTO CALLING SEQUENCE TNZ N5CLAG S AA4,OLDITM+1 L,M AA4,050 TNZ N5CLAG DO NOT MARK ARGS FROM ARG STATEMENT S,S1 AA4,OLDITM+1 FLAG BIT FOR TYPE IN REGISTER FIELD OP168Y . ENTRANCE FOR LABELS L,M AA4,017 A,S1 AA4,OLDITM S,S1 AA4,OLDITM MARK FOR ARG TYPE . S1 OF AN ARG IS SET NEGATIVE TO AVOID CONFUSION WITH WALKBACK WORD . THE J FIELD IS SET TO 1IF THE ARGUMENT CAN BE EXPECTED TO BE . A VALUE RATHER THAN A LOCATION OP168Q LA AA2,OP16A TNE AA2,WALKBK SLJ WKBACK LA AA1,OP16A TNE AA1,OP16NA 090600 J OP1681 CALLING SEQ DONE 090700 AA,M AA1,1 090800 SA AA1,OP16A 090900 J OP1631 091000 OP1681 L BB1,ALGI . POINT AT FUNCTION TRIAD L,H2 B11,TT1,BB1 . SYMBOL TABLE POINTER L,S3 AA1,2,B11 . GET TYPE MODE FIELD TNE,M AA1,061 . TEST FOR INTERNAL FUNCTION J $+3 TE,M AA1,062 . TEST FOR CHARACTER FUNCTION J OP1681J . IT WAS A CHARACTER FUNCTION SLJ GEN PCI 1,TT13,BB1 . CREATE FORWARD REFERENCE TO EX $+1 L,M AA1,2 . ID FOR VARIABLE S,S1 AA1,TT13,BB1 SLJ GEN PCI 0,TT13,BB1 . CHARACTER PACKET MI 1,(+P1) EX $+1 OP1681J . TNZ WALKBK SLJ WKBACK TZ,S2 U1110A REENTRANT LIBRARY TNZ STIOFL IN IO LIST? J $+4 SLJ GEN RESTORE REGISTERS, ACTIVATE MI 1,(SLJ ('ATH04$')),NAME . IO I BANK EX $+1 TNZ,S3 LXIFLG . TEST SPECIAL LIJ J OP168Z L BB2,(1,ARTYTB) . SET TO GENERATE ARG TYPES ARTYXX L AA1,0,*BB2 . FIRST WORD OF ARG TYPES S AA1,ARTYQQ+1 LMJ B11,FILE61 +ARTYQQ L,M AA1,0,BB2 TLE,H2 AA1,ARTYWX . TEST FOR END OF LIST J ARTYXX LMJ B11,FILE61 . REVERT INSTRUCTIONS TO I BANK +RSTCTR SZ LXIFLG OP168Z . . AT THIS POINT THE REGISTERS ARE RESTORED WHICH WERE LOADED . BY ARGUMENT STATEMENT DEFINTION. THIS PROCESSING ONLY AFFECTS . B AND R REGISTERS L BB3,ARGX CURRENT TOP OF ARGUMENT LIST LA AA5,OP16NA NUMBER OF ARGUMENTS THIS FUNCTION JZ AA5,PHS5G NO ARGUMENTS IMPLIES CALL AN,M AA5,1 ADJUST FOR JGD LXI,M BB3,1 OP168C TNZ,T1 ARGT2,BB3 TEST FOR SAVING B OR R J OP168X L,H2 AA1,ARGT2,BB3 S,H2 AA1,OP16RL+1 TEMP NUMBER WHERE REGISTER SAVED L,T1 AA1,ARGT2,BB3 TG,M AA1,12 J OP16R RELOAD R REGISTER SSC AA1,14 A AA1,(LX B0,TEMP) OP168D SSL AA1,18 S,H1 AA1,OP16RL+1 LMJ B11,FILE61 +OP16RL OP168X A,M BB3,1 JGD AA5,OP168C J ALG2 OPJ16A TNZ,S3 LXIFLG . TEST IF A REGISTER HAS LOC OF ARGS J OPJ16C . NOTHING TO DO L AA1,OP16NA . NUMBER OF ARGS A,M AA1,04000 . MARK AS BEING A TFOR CALL S,H2 AA1,CALXI+1 L,S6 AA2,LXIFLG . REGISTER POINTING AT ARGS L AA1,(LXI B0,0,0,XM) SSC AA2,14 . ALIGN WITH A FIELD A AA1,AA2 SSC AA1,18 S,H1 AA1,CALXI+1 J OPJ16B ARTYEX S,S1 AA1,0,BB2 S,S2 AA1,0,BB2 S,S3 AA1,0,BB2 S,S4 AA1,0,BB2 S,S5 AA1,0,BB2 LMJ BB4,$+1 S,S6 AA1,0,*BB2 SZ 0,BB2 . INITIALIZE WORD OF ARG TYPES LXM,M BB3,0 J 0,BB4 COLGR TNZ,H2 CRCRFT J COLGX . NO CROSS REFERENCE WANTED SLJ CRSVE . SAVE SOME REGISTERS L,H1 AA1,N5ERLA . SEQUENCE NUMBER S,H2 AA1,SLCRX L,H2 B11,TT1,BB1 . SYM LOC OF SUBROUTINE NAME S,H1 B11,SLCRX SZ SLCRX+1 L,M AA1,012 . ID FOR ARGUMENT S,S1 AA1,SLCRX+1 SZ AA4 . ACCUMULATE ENVIRONMENT FLAGS L,S3 AA1,2,B11 AND,M AA1,7 TNE,M AA2,5 . TEST IF SUBROUTINE IS DUMMY ARGUMENT J $+3 TZ,H2 2,BB1 . TEST FOR NON STANDARD CALLING SEQUENCE A,M AA4,1 TZ,S6 CR131K A,M AA4,2 . BIT FOR LARGE CORE OPTION TZ,S5 CR131K A,M AA4,4 . BIT FOR ADR = IND OPTION S,S6 AA4,SLCRX+1 SZ AA1 . RESTORE REGISTER LMJ B11,TRCF SLJ CRRSV . RESTORE REGISTERS J COLGX . RETURN $(2) . REENT COLGX J $-$ J COLGR OP1641 +020000,0 OP1671 +060000,0 OP1691 +030000,0 OP1696 +050000,0 OP1698 +0150000,0 OP16RL +010000,0 LX B0,TEMP $(1) . REENT OP16R AN,M AA1,28 SSC AA1,14 A AA1,(LR R0,TEMP) J OP168D OP169 SA,H2 AA1,OP1691 SLJ GEN PCI 0,OP1691 MI 1,(+ P1) EX OP168 OP1695 SA,H2 AA1,OP1696 SLJ GEN PCI 0,OP1696 MI 1,(+ P1) EX OP168 OP1697 SA,H2 AA1,OP1698 SLJ GEN PCI 0,OP1698 MI 1,(J P1) EX OP168J . SECTION 1.14.0 . THIS SECTION GENERATES CODE FOR THE COMMA OPERATOR. . IN GENERAL, THE COMMA IS USED ONLY TO SEPARATE . ARGUMENTS OF FUNCTIONS. THUS, SUBROUTINE 'ARG' IS . APPLIED TO THE 2 OPERANDS UNLESS THE COMMA UNDER . CONSIDERATION IS ASSOCIATED WITH ANY OF THE FOLLOWING . BUILT-IN FUNCTIONS: MOD, MAX, MIN, SIGN, DIM, OR CMPLX. . IN THAT CASE, SECTION 1.14.1 GAINS CONTROL . OP17* LX,H2 B11,TT3,BB1 COMMA TP,XH2 TT3,BB1 ANX,M B11,0,*0 LA,H2 AA1,TT3,BB1 AND,M AA1,077777 JZ AA2,$+3 TLE,M AA2,64 J OP172-1,B11 J IF SPECIAL COMMA 092100 LA,M AA1,6 092200 TNE,S1 AA1,TT1,BB1 1ST OPERAND 092300 J OP171 NOT PRIMITIVE 092400 LA,M AA1,TT1,BB1 092500 S AA1,ARGOPA REENT L AA1,TT4,BB1 REENT S AA1,ARGOPB REENT L AA1,TT10,BB1 REENT TZ,S3 TT10,BB1 L,M AA1,0777 S,H1 AA1,ARGOPA REENT OP170 LMJ B11,ARG 093100 LX BB1,ALGI 093500 LA,M AA1,6 093600 OP171 TNE,S1 AA1,TT2,BB1 2ND OPERAND 093700 J ALG2 NOT PRIMITIVE 093800 LA,M AA1,TT2,BB1 093900 S AA1,ARGOPA REENT L AA1,TT4,BB1 REENT A AA1,(1,0) REENT S AA1,ARGOPB REENT L AA1,TT10,BB1 REENT TZ,S3 TT10,BB1 L,M AA1,0777 S,H1 AA1,ARGOPA REENT OP1710 LMJ B11,ARG 094600 J ALG2 095000 . . SECTION 1.14.1 . THE FOLLOWING IS A JUMP TABLE TO DISTRIBUTE CONTROL . ACCORDING TO THE OPEN FUNCTION BEING GENERATED FOR. . OP172 J OPMOD 095100 J OPMAX 095200 J OPMIN 095300 J OPSGN 095400 J OPDIM 095500 J OPCPX 095600 J FLD7 RIGHT SIDE OF EQUALS J FLD10 LEFT SIDE OF EQUALS J OP03 AND( ) J OP02 OR( ) J FN70 XOR J N5CHRA . CHARACTER RIGHT SIDE OF EQUALS J N5CHRB . CHARACTER LEFT SIDE OF EQUALS J DLD7 . FLD$ RIGHT OF EQUALS J DLD10 . FLD$ LEFT OF EQUALS OPMOD SLJ GEN PCI 0,TT1,BB1 095900 PCI 0,TT2,BB1 096000 PCI 0,TT3,BB1 096100 PCI 0,CRDINT CONTAINS LOC OF DP ZERO TE,T 6,$+2,P1 . GENERATE INTEGER IF TYPELESS TG,T 1,OPMOD2,P1 SLJ AREQ1 096200 PCI 0,P1 096300 TNE,U P0,OPMOD1,1 096500 SA,U 0,P0 096600 MI 1,(DSC P0,36),ABS 096700 OPMOD1 TE,T 6,OPMDBL,P1 MI 1,(DSA P0,36),ABS OPMDB2 MI 1,(DI P0,P2) SA,U 1,P0 097000 J OPMOD4 097100 OPMDBL MI 1,(DSL P0,36),ABS NO SIGN IF TYPELESS J OPMDB2 OPMOD2 SLJ AREQ1C PCI 0,P3 J $+1 EX $+1 SLJ OPMX9 STORE OPERAND IF NEGATIVE OPMOD6 SLJ GENR SA,S 0,P2 . SIGN OF MODULUS ALWAYS POSITIVE TE,T 3,OMD11,P1 TE,S P1,$+3,1 MI 1,(LA P0,*P1) J $+2 MI 1,(LN P0,*P1) MI 1,(FD P0,*P2) MI 1,(FA P0,(0233000000000)),CON 097300 MI 1,(FM P0,P2) 097400 TNE,S P1,OPMOD3,P2 MI 1,(FAN P0,P1) 097600 SA,S 1,P0 J OPMOD3+1 OPMOD3 MI 1,(FA P0,P1) 097900 TE,S P1,$+2,0 SA,S 1,P0 SLJ DEASN PCI 0,P1 OPMOD4 SLJ MRSLT 098000 PCI 0,P3 098100 SLJ DEASN PCI 0,P2 EX ALG2 098200 OMD11 . TE,S P1,$+3,1 MI 1,(DL P0,*P1) J $+2 MI 1,(DLN P0,*P1) MI 1,(DFD P0,*P2) MI 1,(DFA P0,P4) MI 1,(DFM P0,P2) TNE,S P1,OMD11C,P2 MI 1,(DFAN P0,P1) SA,S 1,P0 J OPMOD3+1 OMD11C MI 1,(DFA P0,P1) J OPMOD3+1 OPMIN OPMAX SLJ GEN MAX FUNCTION 098400 PCI 0,TT1,BB1 098500 PCI 0,TT2,BB1 098600 PCI 0,TT3,BB1 098700 SLJ OPMAXA PCI 0,P1 PCI 0,P2 PCI 0,P3 EX ALG2 OPMAXA SLJ AREQ2 PCI 0,P1 PCI 0,P2 SW P1,P2 LR,S P1 FORCE A SUBTRACT OPERATION SLJ FSRG FIND A SCRATCH REGISTER FOR COMPUTATION TE,T P1,$+3,3 MI 1,(LA P7R,P0) TRANS OPERAND TO SCRATCH J $+2 MI 1,(DL P7R,P0) EX $+1 L AA1,PZERO+3 L AA2,PSEVEN+3 S AA1,PSEVEN+3 S AA2,PZERO+3 SN,H2 AA1,GHJ INHIBIT COUNTING ON NEXT INST SLJ GENR SLJ OP10D GENERATE A SUBTRACT IN PSEVEN PCI 0,P1 PCI 0,P2 EX $+1 L AA1,PZERO+3 L AA2,PSEVEN+3 REPERMUTE REGISTER ASSIGNMENT S AA2,PZERO+3 S AA1,PSEVEN+3 SLJ GENR TE,S P0,OPMAX2,1 PERMUTE TEST IF NEGATIVE EX $+1 L BB1,ALGI L,S6 AA1,TT3,BB1 OPMAX4 TE,M AA1,2 J OPMAX3 GENERATE FOR MIN SLJ GENR MI 1,(TP P7) OPMAX5 EX $+1 SN,H2 GA1,GZI INHIBIT INCREMENTATION SLJ GENR TE,S P0,$+2,1 LR,S P1 SLJ N5LDJ LOAD ACCORDING TO TYPE PCI 0,P1 SLJ MRSLT PCI 0,P3 NOP 0 EXIT FROM ROUTINE OPMAX2 EX $+1 L BB1,ALGI PERMUTE OPERAND IF OPERANDS LOADED NEGATIVELY L,S6 AA1,TT3,BB1 BACKWARDS XOR,M AA1,1 L AA1,AA2 J OPMAX4 OPMAX3 SLJ GENR MI 1,(TN P7) J OPMAX5 $(2) . OPMX9 J $ J OPMX9R $(1) . OPMX9R . L,M GB3,1 L,S1 AA1,*GPT,GB2 L,H2 BB3,*GPT,GB2 TP,XH2 *GPT,GB2 IF NEG ANX,M BB3,0,*0 REMOVE BIT OPMX9B TNE,M AA1,5 TEST FOR SUBEXTPESSION J OPMX9C TE,M AA1,6 J OPMX9 DO NOT DEASSIGN L,T3 BB3,TT6,BB3 REGISTER TRIAD IS IN TNZ BB3 J OPMX9 NOT LOADED DO NOT DEASSIGN OPMXD TN,T2 AREGB1-12,BB3 J OPMX9 NOT NEGATIVE IN REGISTER L AA1,BB3 AN,M AA1,14 AH AA1,(2,0) L BB3,AA1 L,M AA1,0 ONLY DEASSIGN ONE LMJ B11,DONEA J OPMX9 OPMX9C L,S3 BB3,SUBEXD,BB3 TZ BB3 J OPMXD J OPMX9 OPSGN SLJ GEN SIGN FUNCTION 105600 PCI 0,TT1,BB1 105700 PCI 0,TT2,BB1 105800 PCI 0,TT3,BB1 105900 SLJ AREQ1C PCI 0,P1 J OPSGN3 P1 IS LOADED TE,T 6,$+2,P1 . GENERATE LOAD MAG IF TYPELESS TG,T 2,OPSGND,P1 MI 1,(LMA P0,P1) 106600 TE,T 6,OPSGN4,P1 . EXIT IF TYPELESS J $+2 106700 OPSGND MI 1,(DLM P0,P1) OPSGN1 TE,S P2,$+3,1 MI 1,(TP P2) 107000 J $+2 107100 MI 1,(TN P2) 107200 TG,T 2,$+3,P1 MI 1,(LNA P0,P0) 107400 J $+2 107500 MI 1,(DLN P0,P0) 107600 OPSGN4 SA,S 0,P0 . SIGN OF RESULT POSITIVE SLJ MRSLT 107800 PCI 0,P3 107900 SLJ DEASN PCI 0,P2 EX ALG2 108000 OPSGN3 TG,T 2,$+3,P1 P1 IS LOADED MI 1,(LMA P0,P0) J OPSGN1 MI 1,(DLM P0,P0) J OPSGN1 OPDIM SLJ GEN DIM FUNCTION 108200 PCI 0,TT1,BB1 108300 PCI 0,TT2,BB1 PCI 0,TT3,BB1 SLJ AREQ2 PCI 0,P1 PCI 0,P2 J OPDIM5 LR,S P1 SLJ OP10D GENERATE A SUBTRACT PCI 0,P1 MI 1,(TN P0) LR,S P0 OPDIM6 MI 1,(DSL P0,72),ABS SLJ MRSLT PCI 1,P3 EX ALG2 OPDIM5 SW P1,P2 LR,S P1 SLJ OP10D PCI 0,P1 MI 1,(TP P0) J OPDIM6 OPCPX SLJ GEN COMPLEX FUNCTION 113600 PCI 0,TT1,BB1 113700 PCI 0,TT2,BB1 113800 PCI 0,TT3,BB1 113900 SLJ AREQ1 114000 PCI 0,P1 114100 TE,U P0,$+3,0 SA,U 0,P0 MI 1,(DSC P0,36),ABS . MOVE RESULT OUT OF UPPER REGISTER SA,U 1,P0 114200 TNE,S P0,OPCPX2,P2 MI 1,(LA P0,P2) 114600 OPCPX1 SA,U 0,P0 114700 SLJ DEASN PCI 0,P2 SLJ MRSLT 114800 PCI 0,P3 114900 EX ALG2 115000 OPCPX2 MI 1,(LNA P0,P2) 115100 J OPCPX1 115200 OP19* SLJ GEN OFFSET PLUS PCI 0,TT1,BB1 PCI 0,TT3,BB1 TE,S P1,$+2,0 MOVE SIGN OF VARIABLE LR,S P2 EX ALG2 TO OPERATOR $(0). OP164Y +0140000,0 NORCAL +0 . ZERO IN NORMAL CALLING SEQUENCE CALXI +040000,0 . FORCE ABSOLUTE ADDRESSING +0 OP164C +0 ARGTYP +0 SAVES TYPE OF ARGUMENT ARGIND +0 NEGATIVE IF INDIRECT CALL REG + $ + 0 CALL + 0 + 0 CAL SLJ P1 LMJ P3,P1 ER P1 LIJ P3,P1 LDJ P3,P1 OP16RA LIJ P1,0 OP16RB LXI,M P1,0 OP16RY +015025 . ERROR WORD FOR DBL/COMPLEX COLTA 'RMATH$' 'DMATH$' 'CMATH$' ARTYIX +1,0 . SIXTH WORD INDEX FOR ARG TYPES ARTYWX +1,0 . WORD INDEX FOR ARG TYPES ARTYQQ +0250000,0 +0 ARTYTB RES 20 . SAVE SPAVE FOR ARG TYPES END