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