|
|
1.1 root 1:
2: /* ASL: test that both C & X flags are set to the last bit shifted out */
3: .global tst_shift_1
4: tst_shift_1:
5: movem.l d3-d4,-(sp)
6: move.l #0,d1
7: move.l #1,d2
8: move.l #1,d3
9: move.l #0,d4
10: lsr.l d2,d3 /* should set X & C */
11: scc d0
12: asl #1,d1 /* should clear C and X */
13: scs d1
14: addx.l d4,d4
15: tst.l d4
16: sne d4
17: or.b d1,d0
18: or.b d4,d0
19: movem.l (sp)+,d3-d4
20: rts
21:
22: /* test that lsl is modulo 64 */
23: .global tst_shift_2
24: tst_shift_2:
25: move.l #33,d1
26: move.l #1,d2
27: lsl.l d1,d2
28: sne d0
29: rts
30:
31: .global tst_shift_3
32: tst_shift_3:
33: move.l #65,d1
34: move.l #1,d2
35: lsl.l d1,d2
36: cmp.l #2,d2
37: sne d0
38: rts
39:
40: /* test that zero shift does not affect X flag */
41: .global tst_shift_4
42: tst_shift_4:
43: movem.l d3-d4,-(sp)
44: move.l #0,d1
45: move.l #1,d2
46: move.l #1,d3
47: move.l #0,d4
48: lsr.l d2,d3 /* should set X & C */
49: scc d0
50: lsr.l d1,d4 /* should not affect X & clear C */
51: scs d1
52: addx.l d4,d4
53: cmp.l #1,d4
54: sne d4
55: or.b d1,d0
56: or.b d4,d0
57: movem.l (sp)+,d3-d4
58: rts
59:
60: /* LSL: test that both C & X flags are set to the last bit shifted out */
61: .global tst_shift_5
62: tst_shift_5:
63: movem.l d3-d4,-(sp)
64: move.l #0x55555555,d1
65: move.l #0,d2
66: lsl.l #8,d1
67: scc d0
68: addx.l d2,d2
69: tst.l d2
70: seq d2
71: move.l #0,d3
72: lsl.l #1,d1
73: scs d4
74: addx.l d3,d3
75: tst.l d3
76: sne d3
77: cmp.l #0xaaaaaa00,d1
78: sne d1
79: or.b d1,d0
80: or.b d2,d0
81: or.b d3,d0
82: or.b d4,d0
83: movem.l (sp)+,d3-d4
84: rts
85:
86: /* same as above, for word shifts */
87: .global tst_shift_6
88: tst_shift_6:
89: movem.l d3-d4,-(sp)
90: move.l #0x55555555,d1
91: move.l #0,d2
92: lsl.w #8,d1
93: scc d0
94: addx.l d2,d2
95: cmp.l #1,d2
96: sne d2
97: move.l #0,d3
98: lsl.w #1,d1
99: scs d4
100: addx.l d3,d3
101: tst.l d3
102: sne d3
103: cmp.l #0x5555aa00,d1
104: sne d1
105: or.b d1,d0
106: or.b d2,d0
107: or.b d3,d0
108: or.b d4,d0
109: movem.l (sp)+,d3-d4
110: rts
111:
112: /* same as above, for byte shifts */
113: .global tst_shift_7
114: tst_shift_7:
115: movem.l d3-d4,-(sp)
116: move.l #0x55555555,d1
117: move.l #0,d2
118: lsl.b #8,d1
119: scc d0
120: addx.l d2,d2
121: cmp.l #1,d2
122: sne d2
123: moveq.l #0,d3
124: lsl.b #1,d1
125: scs d4
126: addx.l d3,d3
127: tst.l d3
128: sne d3
129: cmp.l #0x55555500,d1
130: sne d1
131: or.b d1,d0
132: or.b d2,d0
133: or.b d3,d0
134: or.b d4,d0
135: movem.l (sp)+,d3-d4
136: rts
137:
138: /* ROL: test that C is set to the last bit shifted out & that X is unaffected */
139: .global tst_shift_8
140: tst_shift_8:
141: movem.l d3-d5,-(sp)
142: moveq.l #0,d5
143: move.l #0x80000000,d0
144: add.l d0,d0 /* should set X, C and V, and clear d0 */
145: scc d1
146: svc d2
147: rol #1,d0 /* should clear C and V, and leave X unaffected */
148: scs d3
149: svs d4
150: addx.l d5,d5
151: cmp.l #1,d5
152: sne d0
153: or.b d1,d0
154: or.b d2,d0
155: or.b d3,d0
156: or.b d4,d0
157: movem.l (sp)+,d3-d5
158: rts
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.