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