         SYSTEM   SIG7FDP
         SYSTEM   BPM
         PAGE
         TITLE    'DOUBLE PRECISION DIVISION'
         DEF      C:DPD
BSR      EQU      10
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
R8       EQU      8
R9       EQU      9
DECZR    DATA     X'0C000000'
REMSGN   DATA     0                 REMAINDER SIGN
NBYTS    RES      1                 # OF BYTES
SHIFTN   RES      1                 LOGICAL SHIFT NUMBER
REGSV    RES      10                REGISTERS
REMDR    RES      4                 REMAINDER
REMSFT   RES      1                 REMDR SHIFT COUNT
REMFG    RES      1                 REMAINDER FLAG
REMCT    RES      1                 REMDR DIGIT COUNT
RNDFG    RES      1
REMADJ   RES      1
DIVIND   RES      4                 DIVIDEND
DIVISR   RES      4                 DIVISOR
QOTINT   RES      4                 QUOTIENT
EXCHF    RES      1                 EXCHANGE FLAG
SRSHN    RES      1                 DIVISOR SHIFT NUMBER
NDSHN    RES      1                 DIVIDEND SHIFT NUMBER
REMSV    RES      1                 SAVED REMAINDER FLAG
ADSHN    MTW,1    SRSHN             SHIFT COUNT
         MTW,1    NDSHN
STDIV    DST,0    DIVIND            SAVE INPUT DATA
         DST,0    DIVISR
         DST,0    DIVIND
C:DPD    LCI      10                START
         STM,1    REGSV
         LW,R2    BSR
         LI,R1    8
         LI,R3    0
         STW,R3   QOTINT-1,R1
         BDR,R1   %-1
         INT,R2   R2
         BCR,8    %+2
         MTW,1    EXCHF             SET DIVIDEND DIVISOR EXCHANGE FLAG
         STW,R2   RNDFG
         AND,R2   L(X'1')
         STW,R2   REMFG             REMAINDER FLAG
         LW,R4    REGSV+2
         SAD,R4   -8
         STW,R4   REMADJ            ADJUSTMENT TO REMSFT
         SAS,R5   -24
         STW,R5   REGSV+2
         LI,R2    X'2'
         AND,R2   RNDFG             ROUNDED FLAG
         STW,R2   RNDFG
         LI,R2    X'F'
         AND,R2   R3
         BNEZ     %+2
         LI,R2    16
         STW,R2   NBYTS             NUMBER OF BYTES
         LW,R2    R3
         SLD,R2   -12
         SAS,R3   -24
         STW,R3   SHIFTN            LOGICAL SHIFT NUMBER
         LW,R3    EXCHF
         EXU      STDIV,R3
         DL,1     DECZR             CLEAR DECA
         LI,R5    64
         SW,R5    NBYTS
         LW,R4    NBYTS
         STB,R4   R5
         LW,R4    REGSV-1,R2
         MBS,R4   0
         EXU      STDIV+1,R3
         DL,0     DIVISR
         BCR,3    DPEND             ILLEGAL DIVISOR
         DL,0     DIVIND
         BCS,3    NOZRO
ZEROF    DL,1     DECZR             ZERO
         MTW,0    REMFG
         BEZ      DPEND2
         DST,0    REMDR             SET REMAINDER EQUALS ZERO
         B        DPEND2
NOZRO    LI,R2    3                 CHECK SIGN
         AND,R2   DIVIND+3
         STW,R2   REMSGN
         CI,R2    0
         BCR,3    SIGNT
         LW,R3    DIVIND+3
         SLS,R3   -1
         SLS,R3   1
         STW,R3   DIVIND+3
SIGNT    LI,R1    3
         AND,R1   DIVISR+3
         CI,R1    0
         BCR,3    SIGNT1
         LW,R3    DIVISR+3
         SLS,R3   -1
         SLS,R3   1
         STW,R3   DIVISR+3
SIGNT1   AW,R1    R2                (R1)=1 FOR NEGATIVE RESULT
         DL,0     DIVIND
         LI,R2    1
         BAL,R9   CNTSFT
         DL,0     DIVISR
         LI,R2    0
         BAL,R9   CNTSFT
         LW,R2    SRSHN             SHIFT FOR RESULT
         SW,R2    NDSHN
         AI,R2    -30
         AW,R2    SHIFTN
         AW,R2    REGSV+2           DECP ADJUSTMENT
         BCS,2    DPEND
         DL,0     DIVIND
         CI,R2    -30
         BCS,1    DIGFND5
         STW,R2   SHIFTN
         AI,R2    31
         STW,R2   REMCT
         LI,R2    16
         LI,R4    0
         LI,R8    0
         LI,R3    2
         B        DIGFND2
DIGFND1  SLS,R8   4                 ZERO
         STB,R8   QOTINT,R4
         B        DIGFND5
DIGFND3  DC,0     DIVISR            SECOND DIGIT AND ON
         BCS,1    DIGFND4
DIGFND2  DS,0     DIVISR
         AI,R8    1
         DC,1     DECZR
         BG       DIGFND3
         BDR,R3   DIGFND1
         B        DIGFND1+1
DIGFND4  LW,R9    L(X'F0000000')
         AND,R9   12
         BNEZ     DIDSFT            NO DIVIDEND SHIFT
         DSA      1
         MTW,-1   REMSFT            UPDATE COUNT
         B        DIDSFT1
DIDSFT   DST,0    DIVIND
         DL,0     DIVISR
         DSA      -1                SHIFT DIVISOR
         DST,0    DIVISR
         DL,0     DIVIND
DIDSFT1  MTW,0    REMFG
         BEZ      NREMS1            NO REMAINDER
         MTW,-1   REMCT
         BGZ      NREMS0
         MTW,0    RNDFG
         BNEZ     NREMS             WITH ROUNDED
         BAL,R9   ADREM
NREMS    LCW,R3   R3
         B        DIGFND1+2,R3
NREMS0   LW,R9    REMCT
         CI,R9    1
         BG       REMSVS
         MTW,0    RNDFG
         BEZ      REMSVS            NO ROUNDED
         DST,0    DIVIND
         BAL,R9   ADREM
         DL,0     DIVIND
         B        REMSVS
NREMS1   MTW,-1   REMCT
         BLEZ     NREMS             FINISHED
REMSVS   BDR,R3   DIGFND6           FOR SECOND DIGIT
         STB,R8   QOTINT,R4
         AI,R4    1
         BDR,R2   DIGFND7           NEXT BYTE
DIGFND5  CI,R1    1
         BCR,3    %+3
         LI,R9    X'C'
         B        %+2
         LI,R9    X'D'
         SCS,R9   -4
         LW,R8    QOTINT+3
         SLS,R8   -4
         SLD,R8   4
         STW,R8   QOTINT+3
         MTW,0    REMFG
         BEZ      QSHIFT            NO REMAINDER REQUESTED
         MTW,0    REMSV
         BNEZ     QSHIFT            REMAINDER SAVED
         BAL,R9   ADREM
QSHIFT   DL,0     QOTINT
         DSA      *SHIFTN
         B        DPEND1
DIGFND6  SLS,R8   4                 NEXT DIGIT
         B        DIGFND3
DIGFND7  LI,R8    0                 NEXT BYTE
         LI,R3    2
         B        DIGFND3
CNTSFT   LI,R3    31                COUNT SHIFT
         DSA      1
         BCS,4    %+3
         EXU      ADSHN,R2
         BDR,R3   %-3
         CI,R2    0
         BCR,3    CNTSFT1
         DL,0     DIVIND            SHIFT DIVIDEND
         DSA      *NDSHN
         DST,0    DIVIND
         MTW,0    REMFG
         BEZ      *R9
         LCW,R2   NDSHN
         STW,R2   REMSFT            REMDR SHIFT COUNT
         B        *R9
CNTSFT1  DL,0     DIVISR            SHIFT DIVISOR
         DSA      *SRSHN
         DC,0     DIVIND
         BLE      CNTSFT2
         MTW,-1   SRSHN
         DSA      -1
CNTSFT2  DST,0    DIVISR
         B        *R9
ADREM    LW,10    REMADJ            ADJUST REMAINDER SHIFT
         AWM,10   REMSFT
         DSA      *REMSFT
         OR,15    REMSGN            SET SIGN
         DST,0    REMDR             SAVE REMAINDER
         MTW,1    REMSV
         B        *R9
DPEND    LI,R3    X'40'             SET CONDITION CODE
         B        DPEND2+1
DPEND1   DC,1     DECZR
         BCR,3    DPEND2
         BCS,1    %+3
         LI,R3    X'20'
         B        DPEND2+1
         LI,R3    X'10'
         B        DPEND2+1
DPEND2   LI,R3    0                 RESET REGISTERS & CC
         STB,R3   NBYTS
         LCI      10
         LM,1     REGSV
         LI,R3    BA(REMDR)         BA OF REMDR
         LCF      NBYTS
         B        *11
         END
