|
|
1.1 ! root 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: bmi hardldiv ! 13: 1: ! 14: cmp r4,8.(r5) ! 15: bne hardldiv ! 16: mov 6.(r5),r2 ! 17: mov 4.(r5),r1 ! 18: bge 1f ! 19: neg r1 ! 20: neg r2 ! 21: sbc r1 ! 22: com r4 ! 23: 1: ! 24: mov r4,-(sp) ! 25: clr r0 ! 26: div r3,r0 ! 27: mov r0,r4 /high quotient ! 28: mov r1,r0 ! 29: mov r2,r1 ! 30: mov r0,-(sp) ! 31: div r3,r0 ! 32: bvc 1f ! 33: mov (sp),r0 ! 34: mov r2,r1 / restore clobbered dividend ! 35: sub r3,r0 / this is the clever part ! 36: div r3,r0 ! 37: tst r1 ! 38: sxt r1 ! 39: add r1,r0 / cannot overflow! ! 40: 1: ! 41: tst (sp)+ ! 42: mov r0,r1 ! 43: mov r4,r0 ! 44: tst (sp)+ ! 45: bpl 9f ! 46: neg r0 ! 47: neg r1 ! 48: sbc r0 ! 49: 9: ! 50: jmp cret ! 51: ! 52: / The divisor is known to be >= 2^15 so only 17 cycles are needed. ! 53: hardldiv: ! 54: clr -(sp) ! 55: mov 6.(r5),r2 ! 56: mov 4.(r5),r1 ! 57: bpl 1f ! 58: com (sp) ! 59: neg r1 ! 60: neg r2 ! 61: sbc r1 ! 62: 1: ! 63: clr r0 ! 64: mov 8.(r5),r3 ! 65: bge 1f ! 66: neg r3 ! 67: neg 10.(r5) ! 68: sbc r3 ! 69: com (sp) ! 70: 1: ! 71: clr -(sp) ! 72: cmp r3,r0 ! 73: bhi 1f ! 74: blo 2f ! 75: cmp 10.(r5),r1 ! 76: bhi 1f ! 77: 2: ! 78: inc (sp) ! 79: sub 10.(r5),r1 ! 80: sbc r0 ! 81: sub r3,r0 ! 82: 1: ! 83: mov $16.,r4 ! 84: 1: ! 85: clc ! 86: rol r2 ! 87: rol r1 ! 88: rol r0 ! 89: cmp r3,r0 ! 90: bhi 3f ! 91: blo 2f ! 92: cmp 10.(r5),r1 ! 93: blos 2f ! 94: 3: ! 95: sob r4,1b ! 96: br 1f ! 97: 2: ! 98: sub 10.(r5),r1 ! 99: sbc r0 ! 100: sub r3,r0 ! 101: inc r2 ! 102: sob r4,1b ! 103: 1: ! 104: mov r2,r1 ! 105: mov (sp)+,r0 ! 106: tst (sp)+ ! 107: beq 1f ! 108: neg r0 ! 109: neg r1 ! 110: sbc r0 ! 111: 1: ! 112: jmp cret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.