Example assembler source code generated by SPLash!

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

Updated [3khat16.ico]HP3000 [3khat16.ico]3kMail [archive16.gif]