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

Defined functions

aldiv declared in line 3; defined in line 5; used 1 times
  • in line 3
hardldiv defined in line 51; used 1 times
  • in line 13
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 493
Valid CSS Valid XHTML 1.0 Strict