home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / crt / aldiv.s next >
Encoding:
Text File  |  1979-01-10  |  1.1 KB  |  103 lines

  1. / Long quotient
  2.  
  3. .globl    aldiv
  4. .globl    csv, cret
  5. aldiv:
  6.     jsr    r5,csv
  7.     mov    8.(r5),r3
  8.     sxt    r4
  9.     bpl    1f
  10.     neg    r3
  11. 1:
  12.     cmp    r4,6.(r5)
  13.     bne    hardldiv
  14.     mov    4(r5),r1
  15.     mov    2(r1),r2
  16.     mov    (r1),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.     mov    4.(r5),r2
  46.     mov    r0,(r2)+
  47.     mov    r1,(r2)
  48.     jmp    cret
  49.  
  50. / The divisor is known to be >= 2^15 so only 16 cycles are needed.
  51. hardldiv:
  52.     clr    -(sp)
  53.     mov    4.(r5),r0
  54.     mov    2(r0),r2
  55.     mov    (r0),r1
  56.     bpl    1f
  57.     com    (sp)
  58.     neg    r1
  59.     neg    r2
  60.     sbc    r1
  61. 1:
  62.     clr    r0
  63.     mov    6.(r5),r3
  64.     bge    1f
  65.     neg    r3
  66.     neg    8.(r5)
  67.     sbc    r3
  68.     com    (sp)
  69. 1:
  70.     mov    $16.,r4
  71. 1:
  72.     clc
  73.     rol    r2
  74.     rol    r1
  75.     rol    r0
  76.     cmp    r3,r0
  77.     bgt    3f
  78.     blt    2f
  79.     cmp    8.(r5),r1
  80.     blos    2f
  81. 3:
  82.     sob    r4,1b
  83.     br    1f
  84. 2:
  85.     sub    8.(r5),r1
  86.     sbc    r0
  87.     sub    r3,r0
  88.     inc    r2
  89.     sob    r4,1b
  90. 1:
  91.     mov    r2,r1
  92.     clr    r0
  93.     tst    (sp)+
  94.     beq    1f
  95.     neg    r0
  96.     neg    r1
  97.     sbc    r0
  98. 1:
  99.     mov    4.(r5),r2
  100.     mov    r0,(r2)+
  101.     mov    r1,(r2)
  102.     jmp    cret
  103.