|
|
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.