Note: the generation of comments in the assembler source can be turned on/off by specifying $[NO]ASMCOMMENTS in the SPLash! source.
; Compilation data: SPLash! , INT=SPLash, DL=0, STACK=4088 ; $options: noALIGN, noALIGNED32, ALLOCQ, noALLOWBYTES, ASMCOPYRIGHT, ; noBIGDIRECT, noBIGPROGRAM, CC, CCINTRIN, noCHECKSTACK, CLEANFOR, COERCE, ; noCOMBEFORE, noDIRECT, noFASTMOVE, noIMPORTDB, noINNERLIST, noMAPBYTE, ; noMILLIMOVE, noMILLISCAN, NATIVEONLY, noNEGADDR, NEGX, noNEWDLDB, ; NMPCAL, OPTMOVE, PPLONGPTRS, noPRIVILEGED, noQUICK, REGVARS, ; noSAMESIZEWARN, noSPLASHEXT, noSPLASHINTRIN, SPLASHG, noSTMT, SYSINTR, ; TRACEPCAL, noUPPERCASE, noVARIABLEINTRIN, noVIRTUAL, noVIRTUALGLOBAL .SPACE $TEXT$ .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY .SUBSPA $CODE$ .VERSION "SPLash! 96H 4.13" .VERSION "Copyright (c) 1987 Allegro Consultants, Inc." .VERSION "FAC.SOURCE.SIELER" .VERSION "Compiled on WED, DEC 4, 1996, 2:27 PM " ;---------------------------------------------------- ; procedure REPORT, node # 1312, seq # 8 ; option splash; EN_report ; primary entry point for proc... report .PROC .ENTRY .EXPORT report,ENTRY STW 2,-20 (0,30) ;Save RP in NM stack OR 30,0,1 ;Remember SP (call it PSP) in R1 (for now) LDO 144 (30),30 ;Build NM stack frame STW 1,-4 (0,30) ;Save PSP in new marker STW 11,0 (0,1) ;Save old R11 (procPSP) OR 1,0,11 ;Setup procPSP STHS,MB 7,2 (0,6) ;stack mrkr Q-3 = X-reg STHS,MB 0,2 (0,6) ; Q-2 = dummy := 0 LDO 1 (0),1 ; Q-1 = Status; seg=1 DEP 9,21,6,1 ; mitroc STHS,MB 1,2 (0,6) SUB 6,5,1 ; Q-0 = DeltaQ := (R6-R5)/2 LDO 2 (1),1 EXTRU 1,30,15,1 STHS,MB 1,2 (0,6) OR 6,0,5 ;set Q:=S LDO 400 (30),30 ;allocate stack-area for pcals STW 11,-4 (0,30) ;Save PSP ; 1472 Loc=$00000048 / 9 assign LDH 20 (0,4),20 ; value @ BUF' (ind) ADD 20,4,20 ;16byte->32 LDSID (0,20),21 STW 21,12 (0,4) ;assign to @ FVP STW 20,16 (0,4) ; 1632 Loc=$0000005c / 9 assign LDW 12 (0,4),22 ; value moveexp bytes dest @ FVP (ind) load hi-3 LDW 16 (0,4),19 ;load low-32 bits MTSP 22, 2 LDO 9 (0),21 ;push move length LDO 9 (0),22 ;Setup move length LDIL L%L$C26,23 LDO R%L$C26 (23),23 LDBS,MA 1 (0,23),20 ;get source byte ADDIB,<> -1,22,.-4 ;dec move count STBS,MA 20,1 (2,19) ;save it STH 21,8 (0,4) ;assign to LEN ; 1792 Loc=$00000088 / 10 assign LDH 8 (0,4),22 ; value LEN ; pcal ASCII ; do parm # 1 Parm_1 LDH 10 (0,4),19 ;RSLT ; do parm # 2 Parm_2 LDO 10 (0),20 ; do parm # 3 Parm_3 LDH 8 (0,4),7 ;LEN EXTRS 7,31,16,7 ; Make signed LDH 20 (0,4),21 ;@ BUF' (ind) ADD 7,21,21 ;add x ADD 21,4,21 ;16byte->32 ; pop parms into registers... OR 21,0,24 ;4 bytes EXTRS 20,31,16,25 ;2 bytes, signed make signed EXTRU 19,31,16,26 ;2 bytes STHS,MB 22,2 (0,6) .IMPORT ASCII,CODE BL,N ASCII,2 NOP EXTRS 28,31,16,28 ;make signed OR 28,0,19 STHS,MB 19,2 (0,6) BL,N CCODE,2 NOP SUBI,OD 0,28,8 ;convert cc: 0 1 2 LDO 2 (8),8 ;convert cc: 2 -1 0 .IMPORT CCODE, CODE LDHS,MA -2 (0,6),20 EXTRS 20,31,16,20 ;make signed LDHS,MA -2 (0,6),21 EXTRS 21,31,16,21 ;make signed ADD 21,20,21 STH 21,8 (0,4) ;assign to LEN ; 2144 Loc=$000000f4 / 10 pcal ; pcal PRINT ; do parm # 1 Parm_1 LDH 0 (0,4),22 ;@ BUF (ind) SH1ADD 22,4,22 ;16word->32 LDSID (0,22),19 ;convert 32->64 bit addr ; do parm # 2 Parm_2 LDH 8 (0,4),20 ;negate LEN EXTRS 20,31,16,20 ;make signed SUB 0,20,20 ; do parm # 3 Parm_3 LDO 0 (0),21 ; pop parms into registers... EXTRS 21,31,16,23 ;2 bytes, signed make signed EXTRS 20,31,16,24 ;2 bytes, signed make signed OR 22,0,26 ;8 bytes, low-32 bits OR 19,0,25 ; high-32 bits .IMPORT PRINT,CODE BL,N PRINT,2 NOP BL,N CCODE,2 NOP SUBI,OD 0,28,8 ;convert cc: 0 1 2 LDO 2 (8),8 ;convert cc: 2 -1 0 L$1344 LDO 0 (0),10 ;calc #halfs to delete ; proc exit code... EX_report L$1314 LDW 0 (0,11),1 ;Fetch prior procPSP into R1 OR 11,0,30 ;SP := PSP OR 1,0,11 ;Restore procPSP LDW -20 (0,30),2 ;Get RP from NM stack frame _proc_exit ;common SPLash! exit code OR 5,0,6 ;set S:=Q LDHS,MA -2 (0,6),1 ;get delta-Q LDHS,MA -2 (0,6),20 ;get status ADDI -2,6,6 ;pop & drop Q-3 SH1ADD 1,0,1 ;convert delta-Q to bytes SUB 5,1,5 ;reset Q EXTRU,= 20,23,2,8 ;build CC LDO -3 (8),8 LDO 1 (8),8 LDHS,MA -2 (0,6),7 ;get X-reg SUB 6,10,6 ;delete parms BV 0(2) ;return EXTRS 7,31,16,7 ;make signed .CALLINFO CALLER,SAVE_RP,SAVE_SP,FRAME=496 .EXIT ; proc .PROCEND ; ------------ end proc ;---------------------------------------------------- ; procedure FACT, node # 2336, seq # 11 ; option splash; ; return address from stack building in reg 10 ; subroutine SUB, node # 2752 fact$2$sub .PROC .ENTRY .EXPORT fact$2$sub,ENTRY L$2752 STW 2,-20 (0,30) ;Save RP in NM stack OR 30,0,1 ;Remember SP (call it PSP) in R1 (for now) LDO 544 (30),30 ;Build NM stack frame STW 1,-4 (0,30) ;Save PSP in new marker STHS,MB 0,2 (0,6) ; dummy return addr ; Optimization flags := allocq, cleanfor, negx, optmove ; 2880 Loc=$00000014 / 13 begin ; 2912 Loc=$00000014 / 13 assign LDH 20 (0,4),22 ; value moveexp bytes dest @ BUF' (ind) ADD 22,4,22 ;16byte->32 LDO 78 (0),19 STBS,MA 19,1 (0,22) LDO 32 (0),19 STBS,MA 19,1 (0,22) LDO 61 (0),19 STBS,MA 19,1 (0,22) LDO 32 (0),19 STBS,MA 19,1 (0,22) LDO 4 (0),20 ;push move length STH 20,8 (0,4) ;assign to LEN ; 3072 Loc=$00000044 / 14 assign LDH 8 (0,4),21 ; value LEN ; pcal ASCII ; do parm # 1 Parm_1 LDH -8 (0,5),19 ;N ; do parm # 2 Parm_2 LDO 10 (0),20 ; do parm # 3 Parm_3 LDH 8 (0,4),7 ;LEN EXTRS 7,31,16,7 ; Make signed LDH 20 (0,4),22 ;@ BUF' (ind) ADD 7,22,22 ;add x ADD 22,4,22 ;16byte->32 ; pop parms into registers... OR 22,0,24 ;4 bytes EXTRS 20,31,16,25 ;2 bytes, signed make signed EXTRU 19,31,16,26 ;2 bytes STHS,MB 21,2 (0,6) .IMPORT ASCII,CODE BL,N ASCII,2 NOP EXTRS 28,31,16,28 ;make signed OR 28,0,22 STHS,MB 22,2 (0,6) BL,N CCODE,2 NOP SUBI,OD 0,28,8 ;convert cc: 0 1 2 LDO 2 (8),8 ;convert cc: 2 -1 0 LDHS,MA -2 (0,6),19 EXTRS 19,31,16,19 ;make signed LDHS,MA -2 (0,6),20 EXTRS 20,31,16,20 ;make signed ADD 20,19,20 STH 20,8 (0,4) ;assign to LEN ; 3424 Loc=$000000b0 / 15 pcal ; pcal PRINT ; do parm # 1 Parm_1 LDH 0 (0,4),21 ;@ BUF (ind) SH1ADD 21,4,21 ;16word->32 LDSID (0,21),22 ;convert 32->64 bit addr ; do parm # 2 Parm_2 LDH 8 (0,4),19 ;negate LEN EXTRS 19,31,16,19 ;make signed SUB 0,19,19 ; do parm # 3 Parm_3 LDO 0 (0),20 ; pop parms into registers... EXTRS 20,31,16,23 ;2 bytes, signed make signed EXTRS 19,31,16,24 ;2 bytes, signed make signed OR 21,0,26 ;8 bytes, low-32 bits OR 22,0,25 ; high-32 bits .IMPORT PRINT,CODE BL,N PRINT,2 NOP BL,N CCODE,2 NOP SUBI,OD 0,28,8 ;convert cc: 0 1 2 LDO 2 (8),8 ;convert cc: 2 -1 0 ;end L$2784 ;end of subr LDO 0 (0),10 ;# parm halfs to del L$2754 EX_fact$2$sub LDW -4 (0,30),30 ;Restore saved SP LDW -20 (0,30),2 ;Restore saved RP ADDI -2,6,6 ;delete return info BV 0(2) ;return from subr SUB 6,10,6 ;calc desired new S .CALLINFO CALLER,SAVE_RP,SAVE_SP,FRAME=496 .EXIT ; subr .PROCEND ;------------- end sub EN_fact STW 2,-20 (0,30) ;Save RP in NM stack OR 30,0,1 ;Remember SP (call it PSP) in R1 (for now) LDO 144 (30),30 ;Build NM stack frame STW 1,-4 (0,30) ;Save PSP in new marker STW 11,0 (0,1) ;Save old R11 (procPSP) OR 1,0,11 ;Setup procPSP STHS,MB 7,2 (0,6) ;stack mrkr Q-3 = X-reg STHS,MB 0,2 (0,6) ; Q-2 = dummy := 0 LDO 1 (0),1 ; Q-1 = Status; seg=1 DEP 9,21,6,1 ; mitroc STHS,MB 1,2 (0,6) SUB 6,5,1 ; Q-0 = DeltaQ := (R6-R5)/2 LDO 2 (1),1 EXTRU 1,30,15,1 STHS,MB 1,2 (0,6) OR 6,0,5 ;set Q:=S ; formal parameters: ;N Q -4 ; Procedure variables... STW 13,68 (0,11) ;Save old register for register var ;DUMMYREG reg + 13 LDO 400 (30),30 ;allocate stack-area for pcals STW 11,-4 (0,30) ;Save PSP BV 0(10) ;Return from building locals NOP ; primary entry point for proc... fact .PROC .ENTRY .EXPORT fact,ENTRY BL,N EN_fact,10 ;branch to init NOP ; 3648 Loc=$00000008 / 15 scal ; scal fact$2$sub BL,N fact$2$sub,2 NOP ; 3712 Loc=$00000010 / 15 lbl ;jump over entry point init... B,N L$8192064 NOP ; proc entry point: fac2 .ENTRY .EXPORT fac2,ENTRY BL,N EN_fact,10 ;branch to init NOP L$8192064 ; 3744 Loc=$00000008 / 15 if LDH -8 (0,5),21 ;if/then/else N EXTRU,OD 21,31,1,0 ;l16 ( ) B,N L$8192097 ; 3936 Loc=$00000014 / 16 assign;then LDH -8 (0,5),22 ; value N STHS,MB 22,2 (0,6) ;if LDH -8 (0,5),19 ;N LDO 1 (0),20 EXTRS 19,31,16,19 ;make signed COMB,>=,N 20,19,L$4352 STHS,MB 0,2 (0,6) ;then ; pcal fac2 ; do parm # 1 N LDH -8 (0,5),20 ;N EXTRS 20,31,16,20 ;make signed LDO -1 (20),20 STHS,MB 20,2 (0,6) BL,N fac2,2 NOP B,N L$8192128 L$4352 ;else LDO 1 (0),21 STHS,MB 21,2 (0,6) L$8192128 LDHS,MA -2 (0,6),22 EXTRS 22,31,16,22 ;make signed LDHS,MA -2 (0,6),19 EXTRS 19,31,16,19 ;make signed OR 22,0,25 .IMPORT $$mulI,MILLICODE BL $$mulI,31 OR 19,0,26 OR 29,0,19 STH 19,10 (0,4) ;assign to RSLT B,N L$8192096 L$8192097 ;else ; 4384 Loc=$0000007c / 17 assign LDH -8 (0,5),20 ; value N STHS,MB 20,2 (0,6) ;if LDH -8 (0,5),21 ;N LDO 1 (0),19 EXTRS 21,31,16,21 ;make signed COMB,>=,N 19,21,L$4800 STHS,MB 0,2 (0,6) ;then ; pcal fact ; do parm # 1 N LDH -8 (0,5),22 ;N EXTRS 22,31,16,22 ;make signed LDO -1 (22),22 STHS,MB 22,2 (0,6) BL,N fact,2 NOP B,N L$8192160 L$4800 ;else LDO 1 (0),19 STHS,MB 19,2 (0,6) L$8192160 LDHS,MA -2 (0,6),20 EXTRS 20,31,16,20 ;make signed LDHS,MA -2 (0,6),21 EXTRS 21,31,16,21 ;make signed OR 20,0,25 .IMPORT $$mulI,MILLICODE BL $$mulI,31 OR 21,0,26 OR 29,0,21 STH 21,10 (0,4) ;assign to RSLT L$8192096 ; 4832 Loc=$000000e0 / 17 pcal ; pcal report BL,N report,2 NOP ; 4896 Loc=$000000e8 / 17 assign LDH 10 (0,4),22 ; value RSLT STH 22,-10 (0,5) ;assign to FACT L$2368 LDO 2 (0),10 ;calc #halfs to delete ; proc exit code... EX_fact L$2338 LDW 68 (0,11),13 ;Restore register var LDW 0 (0,11),1 ;Fetch prior procPSP into R1 OR 11,0,30 ;SP := PSP OR 1,0,11 ;Restore procPSP LDW -20 (0,30),2 ;Get RP from NM stack frame B,N _proc_exit .CALLINFO CALLER,SAVE_RP,SAVE_SP,FRAME=496 .EXIT ; proc .PROCEND ; ------------ end proc ;**************************************************** ; Outer block stack building code _start_entry .EXPORT _start_entry,ENTRY _ob_init_ ; X = gr7 CC = gr8 CY = gr9 S = gr6 ;DB = gr4 DP = gr27 ret = gr11 ADDIL L%_db_area-$global$, 27 LDO R%_db_area-$global$(1), 4 ADDIL L%_q_init-$global$, 27 LDO R%_q_init-$global$(1), 5 LDO 8 (0),9 ;Initialize miTroc OR 30,0,11 ;Set R11 to SP, use as return/fp area ; Virtual arrays & pointers... ; FVP, @64, pointer BL U_INIT_TRAPS, 2 NOP .IMPORT GETINFO,CODE OR 5,0,26 ;Addr of info string LDO -52 (30),25 ;Addr of info length LDO -56 (30),24 ;Addr of parm LDO 400 (0),20 ;(Max info len) STH 20,-52 (0,30) BL,N GETINFO,2 NOP LDH -52 (0,30),20 ;Load length of returned string SUB 5,4,21 ;Calc Db address of info ADD 20,5,5 ;Add to q register LDO 1 (5),5 ;round q to nearest word DEP 0,31,1,5 STHS,MA 20,2 (0,5) ;Q-6: INFO LEN STHS,MA 21,2 (0,5) ;Q-5 INFO address LDH -56 (0,30),20 ;Load the parm value STHS,MA 20,2 (0,5) ;Q-4: PARM STHS,MA 0,2 (0,5) ;build initial Q marker... X-reg ZDEPI -1,17,1,20 ; P-relative STHS,MA 20,2 (0,5) LDIL 24,20 ; status register LDO 15 (20),20 STHS,MA 20,2 (0,5) LDO 4 (0),20 ; delta-Q = 4 STH 20,0 (0,5) LDO 408 (30),30 ;allocate stack for NM proc call... DEP 0,31,3,30 ;align 8 STW 0,-4 (0,30) ;Set PSP to 0 (for stack trace) BV 0(7) ;return to OB OR 5,0,6 ;S = gr6 ; ************************************************** ; Outer Block ... primary entry point _start .EXPORT _start,sec_prog PROGRAM .PROC .CALLINFO CALLER,SAVE_RP,SAVE_SP .ENTRY .EXPORT PROGRAM,pri_prog STW 2,-20 (0,30) STW 0,-4 (0,30) ;Set PSP to 0 (for stack trace) BL,N _ob_init_,7 NOP ; 5024 Loc=$00000010 / 18 assign STHS,MB 0,2 (0,6) ; value ; pcal fact ; do parm # 1 N LDO 6 (0),19 STHS,MB 19,2 (0,6) BL,N fact,2 NOP LDHS,MA -2 (0,6),20 ;assign to RSLT STH 20,10 (0,4) ; 5184 Loc=$0000002c / 18 pcal ; pcal report BL,N report,2 NOP .IMPORT U_INIT_TRAPS, CODE .IMPORT U_nonlocal_escape, CODE .IMPORT U_get_escapecode, CODE .IMPORT U_set_escapecode, CODE L$2 EX_PROGRAM .IMPORT TERMINATE,CODE BL,N TERMINATE,2 NOP .EXIT ; program .PROCEND ;**************************************************** ; End of Outer Block ;**************************************************** .SPACE $TEXT$ .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44 L$PREL_ .SPACE $PRIVATE$ .SUBSPA $GLOBAL$,QUAD=1,ALIGN=8,ACCESS=31 .IMPORT $global$, DATA .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 .ALIGN 8 _dl_register .word -10 ; initial DL register value .word 0 ;DL= (halfs) .ALIGN 8 _dl_area .ALIGN 8 _db_area ; (DB area) .EXPORT _db_area, DATA ; Global variables... .HALF 11 ;BUF DB + 0 @ .HALF 0 ;I DB + 1 *2= 2 .HALF 0 ;J DB + 2 *2= 4 .HALF 0 ;K DB + 3 *2= 6 .HALF 0 ;LEN DB + 4 *2= 8 .HALF 0 ;RSLT DB + 5 *2= 10 .HALF 0, 0 ;FVP DB + 6 .HALF 0, 0 .HALF 22 ;BUF' DB + 10 @' ; Indirect arrays... .BLOCKZ 80 ;BUF ( 11) -> DB + 0 ar .SPACE $TEXT$ .SUBSPA $LIT$ .ALIGN 8 L$C26 .STRING "Result = " .SPACE $TEXT$ .SUBSPA $LIT$ .ALIGN 8 L_2528 ;FOO' -> =PB + 0 ar' .STRING "this is a test" .ALIGN 8 .SPACE $PRIVATE$ .SUBSPA $DATA$ _q_init .BLOCKZ 65434 .END