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

  1. / Long remainder
  2.  
  3. .globl    alrem
  4. .globl    csv, cret
  5. alrem:
  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    hardlrem
  14.     mov    4.(r5),r0
  15.     mov    2(r0),r2
  16.     mov    (r0),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.     mov    4.(r5),r3
  41.     mov    r0,(r3)+
  42.     mov    r1,(r3)
  43.     jmp    cret
  44.  
  45. / The divisor is known to be >= 2^15.  Only 16 cycles are
  46. / needed to get a remainder.
  47. hardlrem:
  48.     mov    4.(r5),r0
  49.     mov    2(r0),r2
  50.     mov    (r0),r1
  51.     bpl    1f
  52.     neg    r1
  53.     neg    r2
  54.     sbc    r1
  55. 1:
  56.     clr    r0
  57.     mov    6.(r5),r3
  58.     bge    1f
  59.     neg    r3
  60.     neg    8.(r5)
  61.     sbc    r3
  62. 1:
  63.     mov    $16.,r4
  64. 1:
  65.     clc
  66.     rol    r2
  67.     rol    r1
  68.     rol    r0
  69.     cmp    r3,r0
  70.     blt    2f
  71.     bgt    3f
  72.     cmp    8.(r5),r1
  73.     blos    2f
  74. 3:
  75.     sob    r4,1b
  76.     br    1f
  77. 2:
  78.     sub    8.(r5),r1
  79.     sbc    r0
  80.     sub    r3,r0
  81.     sob    r4,1b
  82. 1:
  83.     mov    4.(r5),r3
  84.     tst    (r3)
  85.     bge    1f
  86.     neg    r0
  87.     neg    r1
  88.     sbc    r0
  89. 1:
  90.     mov    r0,(r3)+
  91.     mov    r1,(r3)
  92.     jmp    cret
  93.