|
|
1.1 ! root 1: / Long quotient ! 2: ! 3: .globl aldiv ! 4: .globl csv, cret ! 5: aldiv: ! 6: jsr r5,csv ! 7: mov 8.(r5),r3 ! 8: sxt r4 ! 9: bpl 1f ! 10: neg r3 ! 11: bmi hardldiv ! 12: 1: ! 13: cmp r4,6.(r5) ! 14: bne hardldiv ! 15: mov 4(r5),r1 ! 16: mov 2(r1),r2 ! 17: mov (r1),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 r2,r1 / restore clobbered dividend ! 34: mov (sp),r0 ! 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: mov 4.(r5),r2 ! 51: mov r0,(r2)+ ! 52: mov r1,(r2) ! 53: jmp cret ! 54: ! 55: / The divisor is known to be >= 2^15 so only 17 cycles are needed. ! 56: hardldiv: ! 57: clr -(sp) ! 58: mov 4.(r5),r0 ! 59: mov 2(r0),r2 ! 60: mov (r0),r1 ! 61: bpl 1f ! 62: com (sp) ! 63: neg r1 ! 64: neg r2 ! 65: sbc r1 ! 66: 1: ! 67: clr r0 ! 68: mov 6.(r5),r3 ! 69: bge 1f ! 70: neg r3 ! 71: neg 8.(r5) ! 72: sbc r3 ! 73: com (sp) ! 74: 1: ! 75: clr -(sp) ! 76: cmp r3,r0 ! 77: bhi 1f ! 78: blo 2f ! 79: cmp 8.(r5),r1 ! 80: bhi 1f ! 81: 2: ! 82: inc (sp) ! 83: sub 8.(r5),r1 ! 84: sbc r0 ! 85: sub r3,r0 ! 86: 1: ! 87: mov $16.,r4 ! 88: 1: ! 89: clc ! 90: rol r2 ! 91: rol r1 ! 92: rol r0 ! 93: cmp r3,r0 ! 94: bhi 3f ! 95: blo 2f ! 96: cmp 8.(r5),r1 ! 97: blos 2f ! 98: 3: ! 99: sob r4,1b ! 100: br 1f ! 101: 2: ! 102: sub 8.(r5),r1 ! 103: sbc r0 ! 104: sub r3,r0 ! 105: inc r2 ! 106: sob r4,1b ! 107: 1: ! 108: mov r2,r1 ! 109: mov (sp)+,r0 ! 110: tst (sp)+ ! 111: beq 1f ! 112: neg r0 ! 113: neg r1 ! 114: sbc r0 ! 115: 1: ! 116: mov 4.(r5),r2 ! 117: mov r0,(r2)+ ! 118: mov r1,(r2) ! 119: jmp cret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.