|
|
1.1 ! root 1: / Unsigned long quotient ! 2: ! 3: .globl uldiv ! 4: .globl csv, cret ! 5: uldiv: ! 6: jsr r5,csv ! 7: tst 8.(r5) ! 8: bne hardldiv ! 9: mov 10.(r5),r3 ! 10: bmi hardldiv ! 11: mov 6.(r5),r2 ! 12: mov 4.(r5),r1 ! 13: bmi hardest ! 14: clr r0 ! 15: div r3,r0 ! 16: mov r0,r4 /high quotient ! 17: mov r1,r0 ! 18: mov r2,r1 ! 19: div r3,r0 ! 20: bvc 1f ! 21: sub r3,r0 / this is the clever part ! 22: div r3,r0 ! 23: tst r1 ! 24: sxt r1 ! 25: add r1,r0 / cannot overflow! ! 26: 1: ! 27: mov r0,r1 ! 28: mov r4,r0 ! 29: jmp cret ! 30: ! 31: / The divisor is known to be >= 2^15 so only 16 cycles are needed. ! 32: hardldiv: ! 33: mov 6.(r5),r2 ! 34: mov 4.(r5),r1 ! 35: clr r0 ! 36: mov 8.(r5),r3 ! 37: mov $16.,r4 ! 38: 1: ! 39: clc ! 40: rol r2 ! 41: rol r1 ! 42: rol r0 ! 43: cmp r3,r0 ! 44: bhi 3f ! 45: blo 2f ! 46: cmp 10.(r5),r1 ! 47: blos 2f ! 48: 3: ! 49: sob r4,1b ! 50: br 1f ! 51: 2: ! 52: sub 10.(r5),r1 ! 53: sbc r0 ! 54: sub r3,r0 ! 55: inc r2 ! 56: sob r4,1b ! 57: 1: ! 58: clr r0 ! 59: mov r2,r1 ! 60: jmp cret ! 61: ! 62: / The dividend is known to be >= 2^31 so 32 cycles are needed. ! 63: hardest: ! 64: mov 6.(r5),r3 ! 65: mov 4.(r5),r2 ! 66: clr r1 ! 67: clr r0 ! 68: mov $32.,r4 ! 69: 1: ! 70: clc ! 71: rol r3 ! 72: rol r2 ! 73: rol r1 ! 74: rol r0 ! 75: cmp 8.(r5),r0 ! 76: bhi 3f ! 77: blo 2f ! 78: cmp 10.(r5),r1 ! 79: blos 2f ! 80: 3: ! 81: sob r4,1b ! 82: br 1f ! 83: 2: ! 84: sub 10.(r5),r1 ! 85: sbc r0 ! 86: sub 8.(r5),r0 ! 87: inc r3 ! 88: sob r4,1b ! 89: 1: ! 90: mov r2,r0 ! 91: mov r3,r1 ! 92: jmp cret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.