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

  1. / Long remainder
  2.  
  3. .globl    lrem
  4. .globl    csv, cret
  5.  
  6. lrem:
  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    hardlrem
  15.     mov    6.(r5),r2
  16.     mov    4.(r5),r1
  17.     mov    r1,r4
  18.     bge    1f
  19.     neg    r1
  20.     neg    r2
  21.     sbc    r1
  22. 1:
  23.     clr    r0
  24.     div    r3,r0
  25.     mov    r1,r0
  26.     mov    r2,r1
  27.     div    r3,r0
  28.     bvc    1f
  29.     sub    r3,r0
  30.     div    r3,r0
  31.     tst    r1
  32.     beq    9f
  33.     add    r3,r1
  34. 1:
  35.     tst    r4
  36.     bpl    9f
  37.     neg    r1
  38. 9:
  39.     sxt    r0
  40.     jmp    cret
  41.  
  42. / The divisor is known to be >= 2^15.  Only 16 cycles are
  43. / needed to get a remainder.
  44. hardlrem:
  45.     mov    6.(r5),r2
  46.     mov    4.(r5),r1
  47.     bpl    1f
  48.     neg    r1
  49.     neg    r2
  50.     sbc    r1
  51. 1:
  52.     clr    r0
  53.     mov    8.(r5),r3
  54.     bge    1f
  55.     neg    r3
  56.     neg    10.(r5)
  57.     sbc    r3
  58. 1:
  59.     mov    $16.,r4
  60. 1:
  61.     clc
  62.     rol    r2
  63.     rol    r1
  64.     rol    r0
  65.     cmp    r3,r0
  66.     blt    2f
  67.     bgt    3f
  68.     cmp    10.(r5),r1
  69.     blos    2f
  70. 3:
  71.     sob    r4,1b
  72.     br    1f
  73. 2:
  74.     sub    10.(r5),r1
  75.     sbc    r0
  76.     sub    r3,r0
  77.     sob    r4,1b
  78. 1:
  79.     tst    4(r5)
  80.     bge    1f
  81.     neg    r0
  82.     neg    r1
  83.     sbc    r0
  84. 1:
  85.     jmp    cret
  86.