s14.s revision 1.1 1 1.1 christos // reg-based SHIFT test program.
2 1.1 christos // Test r4 = ASHIFT (r2 by rl3);
3 1.1 christos // Test r4 = LSHIFT (r2 by rl3);
4 1.1 christos # mach: bfin
5 1.1 christos
6 1.1 christos .include "testutils.inc"
7 1.1 christos start
8 1.1 christos
9 1.1 christos
10 1.1 christos R0.L = 0x0001;
11 1.1 christos R0.H = 0x8000;
12 1.1 christos
13 1.1 christos // arithmetic
14 1.1 christos // left by 31
15 1.1 christos // 8000 0001 -> 8000 0000
16 1.1 christos R7 = 0;
17 1.1 christos ASTAT = R7;
18 1.1 christos R3.L = 31;
19 1.1 christos R3.H = 0;
20 1.1 christos R6 = ASHIFT R0 BY R3.L;
21 1.1 christos DBGA ( R6.L , 0x0000 );
22 1.1 christos DBGA ( R6.H , 0x8000 );
23 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
24 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
25 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
26 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
27 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
28 1.1 christos
29 1.1 christos // arithmetic
30 1.1 christos // left by 32
31 1.1 christos // 8000 0001 -> 8000 0000
32 1.1 christos R7 = 0;
33 1.1 christos ASTAT = R7;
34 1.1 christos R3.L = 32;
35 1.1 christos R3.H = 0;
36 1.1 christos R6 = ASHIFT R0 BY R3.L;
37 1.1 christos DBGA ( R6.L , 0xffff );
38 1.1 christos DBGA ( R6.H , 0xffff );
39 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
40 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
41 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
42 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
43 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
44 1.1 christos
45 1.1 christos // arithmetic
46 1.1 christos // left by 40
47 1.1 christos // 8000 0001 -> 8000 0000
48 1.1 christos R7 = 0;
49 1.1 christos ASTAT = R7;
50 1.1 christos R3.L = 40;
51 1.1 christos R3.H = 0;
52 1.1 christos R6 = ASHIFT R0 BY R3.L;
53 1.1 christos DBGA ( R6.L , 0xFF80 );
54 1.1 christos DBGA ( R6.H , 0xFFFF );
55 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
56 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
57 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
58 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
59 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
60 1.1 christos
61 1.1 christos // arithmetic
62 1.1 christos // left by -32
63 1.1 christos // 8000 0001 -> 8000 0000
64 1.1 christos R7 = 0;
65 1.1 christos ASTAT = R7;
66 1.1 christos R3.L = -32;
67 1.1 christos R3.H = 0;
68 1.1 christos R6 = ASHIFT R0 BY R3.L;
69 1.1 christos DBGA ( R6.L , 0xffff );
70 1.1 christos DBGA ( R6.H , 0xffff );
71 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
72 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
73 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
74 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
75 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
76 1.1 christos
77 1.1 christos // arithmetic
78 1.1 christos // left by 63 (off scale)
79 1.1 christos // 8000 0001 -> 0000 0000
80 1.1 christos R7 = 0;
81 1.1 christos ASTAT = R7;
82 1.1 christos R0.L = 1;
83 1.1 christos R0.H = 0;
84 1.1 christos R3.L = 63;
85 1.1 christos R3.H = 0;
86 1.1 christos R6 = ASHIFT R0 BY R3.L;
87 1.1 christos DBGA ( R6.L , 0x0000 );
88 1.1 christos DBGA ( R6.H , 0x0000 );
89 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
90 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
91 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
92 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
93 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
94 1.1 christos
95 1.1 christos // arithmetic
96 1.1 christos // left by 255 looks like -1 (mask 7 bits)
97 1.1 christos // 8000 0001 -> 0000 0000
98 1.1 christos R7 = 0;
99 1.1 christos ASTAT = R7;
100 1.1 christos R0.L = 0x0100;
101 1.1 christos R0.H = 0;
102 1.1 christos R3.L = 255;
103 1.1 christos R3.H = 0;
104 1.1 christos R6 = ASHIFT R0 BY R3.L;
105 1.1 christos DBGA ( R6.L , 0x0080 );
106 1.1 christos DBGA ( R6.H , 0x0000 );
107 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
108 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
109 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
110 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
111 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
112 1.1 christos
113 1.1 christos // arithmetic
114 1.1 christos // left by 1
115 1.1 christos // 8000 0001 -> 0000 0002
116 1.1 christos R0.L = 0x0001;
117 1.1 christos R0.H = 0x8000;
118 1.1 christos R3.L = 1;
119 1.1 christos R3.H = 0;
120 1.1 christos R6 = ASHIFT R0 BY R3.L;
121 1.1 christos DBGA ( R6.L , 0x0002 );
122 1.1 christos DBGA ( R6.H , 0x0000 );
123 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
124 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
125 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
126 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
127 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
128 1.1 christos
129 1.1 christos // arithmetic
130 1.1 christos // right by 1
131 1.1 christos // 8000 0001 -> 0000 0002
132 1.1 christos R0.L = 0x0001;
133 1.1 christos R0.H = 0x8000;
134 1.1 christos R3.L = -1;
135 1.1 christos R3.H = 0;
136 1.1 christos R6 = ASHIFT R0 BY R3.L;
137 1.1 christos DBGA ( R6.L , 0x0000 );
138 1.1 christos DBGA ( R6.H , 0xc000 );
139 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
140 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
141 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
142 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
143 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
144 1.1 christos
145 1.1 christos // arithmetic
146 1.1 christos // right by -31
147 1.1 christos // 8000 0001 -> ffff ffff
148 1.1 christos R0.L = 0x0001;
149 1.1 christos R0.H = 0x8000;
150 1.1 christos R3.L = -31;
151 1.1 christos R3.H = 0;
152 1.1 christos R6 = ASHIFT R0 BY R3.L;
153 1.1 christos DBGA ( R6.L , 0xffff );
154 1.1 christos DBGA ( R6.H , 0xffff );
155 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
156 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
157 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
158 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
159 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
160 1.1 christos
161 1.1 christos // logic
162 1.1 christos // left by largest positive magnitude of 31 (0x1f)
163 1.1 christos // 8000 0001 -> 8000 0000
164 1.1 christos R0.L = 0x0001;
165 1.1 christos R0.H = 0x8000;
166 1.1 christos R3.L = 31;
167 1.1 christos R3.H = 0;
168 1.1 christos R6 = ASHIFT R0 BY R3.L;
169 1.1 christos DBGA ( R6.L , 0x0000 );
170 1.1 christos DBGA ( R6.H , 0x8000 );
171 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
172 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
173 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
174 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
175 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
176 1.1 christos
177 1.1 christos // logic
178 1.1 christos // left by 1
179 1.1 christos // 8000 0001 -> 0000 0002
180 1.1 christos R0.L = 0x0001;
181 1.1 christos R0.H = 0x8000;
182 1.1 christos R3.L = 1;
183 1.1 christos R3.H = 0;
184 1.1 christos R6 = LSHIFT R0 BY R3.L;
185 1.1 christos DBGA ( R6.L , 0x0002 );
186 1.1 christos DBGA ( R6.H , 0x0000 );
187 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
188 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
189 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
190 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
191 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
192 1.1 christos
193 1.1 christos // logic
194 1.1 christos // right by 1
195 1.1 christos // 8000 0001 -> 4000 0000
196 1.1 christos R0.L = 0x0001;
197 1.1 christos R0.H = 0x8000;
198 1.1 christos R3.L = -1;
199 1.1 christos R3.H = 0;
200 1.1 christos R6 = LSHIFT R0 BY R3.L;
201 1.1 christos DBGA ( R6.L , 0x0000 );
202 1.1 christos DBGA ( R6.H , 0x4000 );
203 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
204 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
205 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
206 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
207 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
208 1.1 christos
209 1.1 christos // logic
210 1.1 christos // right by largest negative magnitude of -31
211 1.1 christos // 8000 0001 -> 0000 0001
212 1.1 christos R0.L = 0x0001;
213 1.1 christos R0.H = 0x8000;
214 1.1 christos R3.L = -31;
215 1.1 christos R3.H = 0;
216 1.1 christos R6 = LSHIFT R0 BY R3.L;
217 1.1 christos DBGA ( R6.L , 0x0001 );
218 1.1 christos DBGA ( R6.H , 0x0000 );
219 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
220 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
221 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
222 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
223 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
224 1.1 christos
225 1.1 christos // logic
226 1.1 christos // right by -32
227 1.1 christos // 8000 0001 -> 0000 0001
228 1.1 christos R0.L = 0x0001;
229 1.1 christos R0.H = 0x8000;
230 1.1 christos R3.L = -32;
231 1.1 christos R3.H = 0;
232 1.1 christos R6 = LSHIFT R0 BY R3.L;
233 1.1 christos DBGA ( R6.L , 0x0000 );
234 1.1 christos DBGA ( R6.H , 0x0000 );
235 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
236 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
237 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
238 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
239 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
240 1.1 christos
241 1.1 christos // logic
242 1.1 christos // by +40
243 1.1 christos // 8000 0001 -> 0000 0001
244 1.1 christos R0.L = 0x0001;
245 1.1 christos R0.H = 0x8000;
246 1.1 christos R3.L = 40;
247 1.1 christos R3.H = 0;
248 1.1 christos R6 = LSHIFT R0 BY R3.L;
249 1.1 christos DBGA ( R6.L , 0x0080 );
250 1.1 christos DBGA ( R6.H , 0x0000 );
251 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
252 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
253 1.1 christos
254 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
255 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
256 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
257 1.1 christos
258 1.1 christos // rot
259 1.1 christos // left by 1
260 1.1 christos // 8000 0001 -> 0000 0002 cc=1
261 1.1 christos R7 = 0;
262 1.1 christos CC = R7;
263 1.1 christos R6 = ROT R0 BY 1;
264 1.1 christos DBGA ( R6.L , 0x0002 );
265 1.1 christos DBGA ( R6.H , 0x0000 );
266 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 );
267 1.1 christos
268 1.1 christos // rot
269 1.1 christos // right by -1
270 1.1 christos // 8000 0001 -> 4000 0000 cc=1
271 1.1 christos R7 = 0;
272 1.1 christos CC = R7;
273 1.1 christos R6 = ROT R0 BY -1;
274 1.1 christos DBGA ( R6.L , 0x0000 );
275 1.1 christos DBGA ( R6.H , 0x4000 );
276 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 );
277 1.1 christos
278 1.1 christos // rot
279 1.1 christos // right by largest positive magnitude of 31
280 1.1 christos // 8000 0001 -> a000 0000 cc=0
281 1.1 christos R7 = 0;
282 1.1 christos CC = R7;
283 1.1 christos R6 = ROT R0 BY 31;
284 1.1 christos DBGA ( R6.L , 0x0000 );
285 1.1 christos DBGA ( R6.H , 0xa000 );
286 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 );
287 1.1 christos
288 1.1 christos // rot
289 1.1 christos // right by largest positive magnitude of 31 with cc=1
290 1.1 christos // 8000 0001 cc=1 -> a000 0000 cc=0
291 1.1 christos R7 = 1;
292 1.1 christos CC = R7;
293 1.1 christos R6 = ROT R0 BY 31;
294 1.1 christos DBGA ( R6.L , 0x0000 );
295 1.1 christos DBGA ( R6.H , 0xe000 );
296 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 );
297 1.1 christos
298 1.1 christos // rot
299 1.1 christos // right by largest negative magnitude of -31
300 1.1 christos // 8000 0001 -> 0000 0005 cc=0
301 1.1 christos R7 = 0;
302 1.1 christos CC = R7;
303 1.1 christos R6 = ROT R0 BY -31;
304 1.1 christos DBGA ( R6.L , 0x0005 );
305 1.1 christos DBGA ( R6.H , 0x0000 );
306 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 );
307 1.1 christos
308 1.1 christos // rot
309 1.1 christos // right by largest negative magnitude of -31 with cc=1
310 1.1 christos // 8000 0001 cc=1 -> 0000 0007 cc=0
311 1.1 christos R7 = 1;
312 1.1 christos CC = R7;
313 1.1 christos R6 = ROT R0 BY -31;
314 1.1 christos DBGA ( R6.L , 0x0007 );
315 1.1 christos DBGA ( R6.H , 0x0000 );
316 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 );
317 1.1 christos
318 1.1 christos // rot
319 1.1 christos // left by 7
320 1.1 christos // 8000 0001 cc=1 -> 0000 00e0 cc=0
321 1.1 christos R7 = 1;
322 1.1 christos CC = R7;
323 1.1 christos R6 = ROT R0 BY 7;
324 1.1 christos DBGA ( R6.L , 0x00e0 );
325 1.1 christos DBGA ( R6.H , 0x0000 );
326 1.1 christos R7 = CC; DBGA ( R7.L , 0x0000 );
327 1.1 christos
328 1.1 christos // rot by zero
329 1.1 christos // 8000 0001 -> 8000 000
330 1.1 christos R7 = 1;
331 1.1 christos CC = R7;
332 1.1 christos R6 = ROT R0 BY 0;
333 1.1 christos DBGA ( R6.L , 0x0001 );
334 1.1 christos DBGA ( R6.H , 0x8000 );
335 1.1 christos R7 = CC; DBGA ( R7.L , 0x0001 );
336 1.1 christos
337 1.1 christos // 0 by 1
338 1.1 christos R7 = 0;
339 1.1 christos R0 = 0;
340 1.1 christos ASTAT = R7;
341 1.1 christos R6 = R0 << 1;
342 1.1 christos DBGA ( R6.L , 0x0000 );
343 1.1 christos DBGA ( R6.H , 0x0000 );
344 1.1 christos CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
345 1.1 christos CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
346 1.1 christos CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
347 1.1 christos CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
348 1.1 christos CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
349 1.1 christos
350 1.1 christos pass
351