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