home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / crt / ldiv.s < prev    next >
Encoding:
Text File  |  1979-01-10  |  978 b   |  96 lines

  1. / Long quotient
  2.  
  3. .globl    ldiv
  4. .globl    csv, cret
  5.  
  6. ldiv:
  7.     jsr    r5,csv
  8.     mov    10.(r5),r3
  9.     sxt    r4
  10.     bpl    1f
  11.     neg    r3
  12. 1:
  13.     cmp    r4,8.(r5)
  14.     bne    hardldiv
  15.     mov    6.(r5),r2
  16.     mov    4.(r5),r1
  17.     bge    1f
  18.     neg    r1
  19.     neg    r2
  20.     sbc    r1
  21.     com    r4
  22. 1:
  23.     mov    r4,-(sp)
  24.     clr    r0
  25.     div    r3,r0
  26.     mov    r0,r4        /high quotient
  27.     mov    r1,r0
  28.     mov    r2,r1
  29.     div    r3,r0
  30.     bvc    1f
  31.     sub    r3,r0        / this is the clever part
  32.     div    r3,r0
  33.     tst    r1
  34.     sxt    r1
  35.     add    r1,r0        / cannot overflow!
  36. 1:
  37.     mov    r0,r1
  38.     mov    r4,r0
  39.     tst    (sp)+
  40.     bpl    9f
  41.     neg    r0
  42.     neg    r1
  43.     sbc    r0
  44. 9:
  45.     jmp    cret
  46.  
  47. / The divisor is known to be >= 2^15 so only 16 cycles are needed.
  48. hardldiv:
  49.     clr    -(sp)
  50.     mov    6.(r5),r2
  51.     mov    4.(r5),r1
  52.     bpl    1f
  53.     com    (sp)
  54.     neg    r1
  55.     neg    r2
  56.     sbc    r1
  57. 1:
  58.     clr    r0
  59.     mov    8.(r5),r3
  60.     bge    1f
  61.     neg    r3
  62.     neg    10.(r5)
  63.     sbc    r3
  64.     com    (sp)
  65. 1:
  66.     mov    $16.,r4
  67. 1:
  68.     clc
  69.     rol    r2
  70.     rol    r1
  71.     rol    r0
  72.     cmp    r3,r0
  73.     bgt    3f
  74.     blt    2f
  75.     cmp    10.(r5),r1
  76.     blos    2f
  77. 3:
  78.     sob    r4,1b
  79.     br    1f
  80. 2:
  81.     sub    10.(r5),r1
  82.     sbc    r0
  83.     sub    r3,r0
  84.     inc    r2
  85.     sob    r4,1b
  86. 1:
  87.     mov    r2,r1
  88.     clr    r0
  89.     tst    (sp)+
  90.     beq    1f
  91.     neg    r0
  92.     neg    r1
  93.     sbc    r0
  94. 1:
  95.     jmp    cret
  96.