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