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

Defined functions

hardldiv defined in line 48; used 1 times
  • in line 14
ldiv declared in line 3; defined in line 6; used 1 times
  • in line 3
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 424
Valid CSS Valid XHTML 1.0 Strict