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