1//Original:/testcases/core/c_dsp32shift_ahh_s/c_dsp32shift_ahh_s.dsp
2// Spec Reference: dsp32shift ashift/ashift s
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8
9
10// ashift/ashift s : positive data, count (+)=left (half reg)
11// d_reg = ashift/ashift (d BY d_lo) saturation
12// Rx by RLx
13imm32 r0, 0x01230000;
14imm32 r1, 0x12345678;
15imm32 r2, 0x23456789;
16imm32 r3, 0x3456789a;
17imm32 r4, 0x456789ab;
18imm32 r5, 0x56789abc;
19imm32 r6, 0x6789abcd;
20imm32 r7, 0x789abcde;
21R5 = ASHIFT R0 BY R0.L (V , S);
22R0 = ASHIFT R1 BY R0.L (V , S);
23R1 = ASHIFT R2 BY R0.L (V , S);
24R2 = ASHIFT R3 BY R0.L (V , S);
25R3 = ASHIFT R4 BY R0.L (V , S);
26R4 = ASHIFT R5 BY R0.L (V , S);
27R7 = ASHIFT R6 BY R0.L (V , S);
28R6 = ASHIFT R7 BY R0.L (V , S);
29CHECKREG r0, 0x12345678;
30CHECKREG r1, 0x00230067;
31CHECKREG r2, 0x00340078;
32CHECKREG r3, 0x0045FF89;
33CHECKREG r4, 0x00010000;
34CHECKREG r5, 0x01230000;
35CHECKREG r6, 0x0000FFFF;
36CHECKREG r7, 0x0067FFAB;
37
38imm32 r0, 0x01230002;
39imm32 r1, 0x12345678;
40imm32 r2, 0x23456789;
41imm32 r3, 0x3456789a;
42imm32 r4, 0x456789ab;
43imm32 r5, 0x56789abc;
44imm32 r6, 0x6789abcd;
45imm32 r7, 0x789abcde;
46R1.L = 5;
47R2 = ASHIFT R0 BY R1.L (V , S);
48R3 = ASHIFT R1 BY R1.L (V , S);
49R4 = ASHIFT R2 BY R1.L (V , S);
50R5 = ASHIFT R3 BY R1.L (V , S);
51R6 = ASHIFT R4 BY R1.L (V , S);
52R7 = ASHIFT R5 BY R1.L (V , S);
53R0 = ASHIFT R6 BY R1.L (V , S);
54R1 = ASHIFT R7 BY R1.L (V , S);
55CHECKREG r0, 0x7FFF7FFF;
56CHECKREG r1, 0x7FFF7FFF;
57CHECKREG r2, 0x24600040;
58CHECKREG r3, 0x7FFF00A0;
59CHECKREG r4, 0x7FFF0800;
60CHECKREG r5, 0x7FFF1400;
61CHECKREG r6, 0x7FFF7FFF;
62CHECKREG r7, 0x7FFF7FFF;
63
64imm32 r0, 0x01230002;
65imm32 r1, 0x12345678;
66imm32 r2, 0x23456789;
67imm32 r3, 0x3456789a;
68imm32 r4, 0x456789ab;
69imm32 r5, 0x56789abc;
70imm32 r6, 0x6789abcd;
71imm32 r7, 0x789abcde;
72R2 = 15;
73R3 = ASHIFT R0 BY R2.L (V , S);
74R4 = ASHIFT R1 BY R2.L (V , S);
75R5 = ASHIFT R2 BY R2.L (V , S);
76R6 = ASHIFT R3 BY R2.L (V , S);
77R7 = ASHIFT R4 BY R2.L (V , S);
78R0 = ASHIFT R5 BY R2.L (V , S);
79R1 = ASHIFT R6 BY R2.L (V , S);
80R2 = ASHIFT R7 BY R2.L (V , S);
81CHECKREG r0, 0x00007FFF;
82CHECKREG r1, 0x7FFF7FFF;
83CHECKREG r2, 0x7FFF7FFF;
84CHECKREG r3, 0x7FFF7FFF;
85CHECKREG r4, 0x7FFF7FFF;
86CHECKREG r5, 0x00007FFF;
87CHECKREG r6, 0x7FFF7FFF;
88CHECKREG r7, 0x7FFF7FFF;
89
90imm32 r0, 0x01230002;
91imm32 r1, 0x12345678;
92imm32 r2, 0x23456789;
93imm32 r3, 0x3456789a;
94imm32 r4, 0x456789ab;
95imm32 r5, 0x56789abc;
96imm32 r6, 0x6789abcd;
97imm32 r7, 0x789abcde;
98R3.L = 16;
99R4 = ASHIFT R0 BY R3.L (V , S);
100R5 = ASHIFT R1 BY R3.L (V , S);
101R6 = ASHIFT R2 BY R3.L (V , S);
102R7 = ASHIFT R3 BY R3.L (V , S);
103R0 = ASHIFT R4 BY R3.L (V , S);
104R1 = ASHIFT R5 BY R3.L (V , S);
105R2 = ASHIFT R6 BY R3.L (V , S);
106R3 = ASHIFT R7 BY R3.L (V , S);
107CHECKREG r0, 0x7FFF7FFF;
108CHECKREG r1, 0x7FFF7FFF;
109CHECKREG r2, 0x7FFF7FFF;
110CHECKREG r3, 0x7FFF7FFF;
111CHECKREG r4, 0x7FFF7FFF;
112CHECKREG r5, 0x7FFF7FFF;
113CHECKREG r6, 0x7FFF7FFF;
114CHECKREG r7, 0x7FFF7FFF;
115
116imm32 r0, 0x01230002;
117imm32 r1, 0x12345678;
118imm32 r2, 0x23456789;
119imm32 r3, 0x3456789a;
120imm32 r4, 0x456789ab;
121imm32 r5, 0x56789abc;
122imm32 r6, 0x6789abcd;
123imm32 r7, 0x789abcde;
124R4.L = -1;
125R0 = ASHIFT R0 BY R4.L (V , S);
126R1 = ASHIFT R1 BY R4.L (V , S);
127R2 = ASHIFT R2 BY R4.L (V , S);
128R3 = ASHIFT R3 BY R4.L (V , S);
129R4 = ASHIFT R4 BY R4.L (V , S);
130R5 = ASHIFT R5 BY R4.L (V , S);
131R6 = ASHIFT R6 BY R4.L (V , S);
132R7 = ASHIFT R7 BY R4.L (V , S);
133CHECKREG r0, 0x00910001;
134CHECKREG r1, 0x091A2B3C;
135CHECKREG r2, 0x11A233C4;
136CHECKREG r3, 0x1A2B3C4D;
137CHECKREG r4, 0x22B3FFFF;
138CHECKREG r5, 0x2B3CCD5E;
139CHECKREG r6, 0x33C4D5E6;
140CHECKREG r7, 0x3C4DDE6F;
141
142imm32 r0, 0x01230002;
143imm32 r1, 0x12345678;
144imm32 r2, 0x23456789;
145imm32 r3, 0x3456789a;
146imm32 r4, 0x456789ab;
147imm32 r5, 0x56789abc;
148imm32 r6, 0x6789abcd;
149imm32 r7, 0x789abcde;
150R5.L = -6;
151R6 = ASHIFT R0 BY R5.L (V , S);
152R7 = ASHIFT R1 BY R5.L (V , S);
153R0 = ASHIFT R2 BY R5.L (V , S);
154R1 = ASHIFT R3 BY R5.L (V , S);
155R2 = ASHIFT R4 BY R5.L (V , S);
156R3 = ASHIFT R5 BY R5.L (V , S);
157R4 = ASHIFT R6 BY R5.L (V , S);
158R5 = ASHIFT R7 BY R5.L (V , S);
159CHECKREG r0, 0x008D019E;
160CHECKREG r1, 0x00D101E2;
161CHECKREG r2, 0x0115FE26;
162CHECKREG r3, 0x0159FFFF;
163CHECKREG r4, 0x00000000;
164CHECKREG r5, 0x00010005;
165CHECKREG r6, 0x00040000;
166CHECKREG r7, 0x00480159;
167
168imm32 r0, 0x01230002;
169imm32 r1, 0x12345678;
170imm32 r2, 0x23456789;
171imm32 r3, 0x3456789a;
172imm32 r4, 0x456789ab;
173imm32 r5, 0x56789abc;
174imm32 r6, 0x6789abcd;
175imm32 r7, 0x789abcde;
176R6.L = -15;
177R7 = ASHIFT R0 BY R6.L (V , S);
178R0 = ASHIFT R1 BY R6.L (V , S);
179R1 = ASHIFT R2 BY R6.L (V , S);
180R2 = ASHIFT R3 BY R6.L (V , S);
181R3 = ASHIFT R4 BY R6.L (V , S);
182R4 = ASHIFT R5 BY R6.L (V , S);
183R5 = ASHIFT R6 BY R6.L (V , S);
184R6 = ASHIFT R7 BY R6.L (V , S);
185CHECKREG r0, 0x00000000;
186CHECKREG r1, 0x00000000;
187CHECKREG r2, 0x00000000;
188CHECKREG r3, 0x0000FFFF;
189CHECKREG r4, 0x0000FFFF;
190CHECKREG r5, 0x0000FFFF;
191CHECKREG r6, 0x00000000;
192CHECKREG r7, 0x00000000;
193
194imm32 r0, 0x01230002;
195imm32 r1, 0x12345678;
196imm32 r2, 0x23456789;
197imm32 r3, 0x3456789a;
198imm32 r4, 0x456789ab;
199imm32 r5, 0x56789abc;
200imm32 r6, 0x6789abcd;
201imm32 r7, 0x789abcde;
202R7.L = -16;
203R0 = ASHIFT R0 BY R7.L (V , S);
204R1 = ASHIFT R1 BY R7.L (V , S);
205R2 = ASHIFT R2 BY R7.L (V , S);
206R3 = ASHIFT R3 BY R7.L (V , S);
207R4 = ASHIFT R4 BY R7.L (V , S);
208R5 = ASHIFT R5 BY R7.L (V , S);
209R6 = ASHIFT R6 BY R7.L (V , S);
210R7 = ASHIFT R7 BY R7.L (V , S);
211CHECKREG r0, 0x00000000;
212CHECKREG r1, 0x00000000;
213CHECKREG r2, 0x00000000;
214CHECKREG r3, 0x00000000;
215CHECKREG r4, 0x0000FFFF;
216CHECKREG r5, 0x0000FFFF;
217CHECKREG r6, 0x0000FFFF;
218CHECKREG r7, 0x0000FFFF;
219
220imm32 r0, 0x01230002;
221imm32 r1, 0x12345678;
222imm32 r2, 0x23456789;
223imm32 r3, 0x3456789a;
224imm32 r4, 0x456789ab;
225imm32 r5, 0x56789abc;
226imm32 r6, 0x6789abcd;
227imm32 r7, 0x789abcde;
228R0.L = 4;
229//r0 = ashift/ashift (r0 by rl0);
230R1 = ASHIFT R1 BY R0.L (V , S);
231R2 = ASHIFT R2 BY R0.L (V , S);
232R3 = ASHIFT R3 BY R0.L (V , S);
233R4 = ASHIFT R4 BY R0.L (V , S);
234R5 = ASHIFT R5 BY R0.L (V , S);
235R6 = ASHIFT R6 BY R0.L (V , S);
236R7 = ASHIFT R7 BY R0.L (V , S);
237CHECKREG r0, 0x01230004;
238CHECKREG r1, 0x7FFF7FFF;
239CHECKREG r2, 0x7FFF7FFF;
240CHECKREG r3, 0x7FFF7FFF;
241CHECKREG r4, 0x7FFF8000;
242CHECKREG r5, 0x7FFF8000;
243CHECKREG r6, 0x7FFF8000;
244CHECKREG r7, 0x7FFF8000;
245
246imm32 r0, 0x01230002;
247imm32 r1, 0x12345678;
248imm32 r2, 0x23456789;
249imm32 r3, 0x3456789a;
250imm32 r4, 0x456789ab;
251imm32 r5, 0x56789abc;
252imm32 r6, 0x6789abcd;
253imm32 r7, 0x789abcde;
254R1.L = 6;
255R0 = ASHIFT R0 BY R1.L (V , S);
256//r1 = ashift/ashift (r1 by rl1);
257R2 = ASHIFT R2 BY R1.L (V , S);
258R3 = ASHIFT R3 BY R1.L (V , S);
259R4 = ASHIFT R4 BY R1.L (V , S);
260R5 = ASHIFT R5 BY R1.L (V , S);
261R6 = ASHIFT R6 BY R1.L (V , S);
262R7 = ASHIFT R7 BY R1.L (V , S);
263CHECKREG r0, 0x48C00080;
264CHECKREG r1, 0x12340006;
265CHECKREG r2, 0x7FFF7FFF;
266CHECKREG r3, 0x7FFF7FFF;
267CHECKREG r4, 0x7FFF8000;
268CHECKREG r5, 0x7FFF8000;
269CHECKREG r6, 0x7FFF8000;
270CHECKREG r7, 0x7FFF8000;
271
272
273imm32 r0, 0x01230002;
274imm32 r1, 0x12345678;
275imm32 r2, 0x23456789;
276imm32 r3, 0x3456789a;
277imm32 r4, 0x456789ab;
278imm32 r5, 0x56789abc;
279imm32 r6, 0x6789abcd;
280imm32 r7, 0x789abcde;
281R2.L = 15;
282R0 = ASHIFT R0 BY R2.L (V , S);
283R1 = ASHIFT R1 BY R2.L (V , S);
284//r2 = ashift/ashift (r2 by rl2) s;
285R3 = ASHIFT R3 BY R2.L (V , S);
286R4 = ASHIFT R4 BY R2.L (V , S);
287R5 = ASHIFT R5 BY R2.L (V , S);
288R6 = ASHIFT R6 BY R2.L (V , S);
289R7 = ASHIFT R7 BY R2.L (V , S);
290CHECKREG r0, 0x7FFF7FFF;
291CHECKREG r1, 0x7FFF7FFF;
292CHECKREG r2, 0x2345000F;
293CHECKREG r3, 0x7FFF7FFF;
294CHECKREG r4, 0x7FFF8000;
295CHECKREG r5, 0x7FFF8000;
296CHECKREG r6, 0x7FFF8000;
297CHECKREG r7, 0x7FFF8000;
298
299imm32 r0, 0x01230002;
300imm32 r1, 0x12345678;
301imm32 r2, 0x23456789;
302imm32 r3, 0x3456789a;
303imm32 r4, 0x456789ab;
304imm32 r5, 0x56789abc;
305imm32 r6, 0x6789abcd;
306imm32 r7, 0x789abcde;
307R3.L = 16;
308R0 = ASHIFT R0 BY R3.L (V , S);
309R1 = ASHIFT R1 BY R3.L (V , S);
310R2 = ASHIFT R2 BY R3.L (V , S);
311//r3 = ashift/ashift (r3 by rl3) s;
312R4 = ASHIFT R4 BY R3.L (V , S);
313R5 = ASHIFT R5 BY R3.L (V , S);
314R6 = ASHIFT R6 BY R3.L (V , S);
315R7 = ASHIFT R7 BY R3.L (V , S);
316CHECKREG r0, 0x7FFF7FFF;
317CHECKREG r1, 0x7FFF7FFF;
318CHECKREG r2, 0x7FFF7FFF;
319CHECKREG r3, 0x34560010;
320CHECKREG r4, 0x7FFF8000;
321CHECKREG r5, 0x7FFF8000;
322CHECKREG r6, 0x7FFF8000;
323CHECKREG r7, 0x7FFF8000;
324
325imm32 r0, 0x01230002;
326imm32 r1, 0x12345678;
327imm32 r2, 0x23456789;
328imm32 r3, 0x3456789a;
329imm32 r4, 0x456789ab;
330imm32 r5, 0x56789abc;
331imm32 r6, 0x6789abcd;
332imm32 r7, 0x789abcde;
333R4.L = -9;
334R0 = ASHIFT R0 BY R4.L (V , S);
335R1 = ASHIFT R1 BY R4.L (V , S);
336R2 = ASHIFT R2 BY R4.L (V , S);
337R3 = ASHIFT R3 BY R4.L (V , S);
338//r4 = ashift/ashift (r4 by rl4) s;
339R5 = ASHIFT R5 BY R4.L (V , S);
340R6 = ASHIFT R6 BY R4.L (V , S);
341R7 = ASHIFT R7 BY R4.L (V , S);
342CHECKREG r0, 0x00000000;
343CHECKREG r1, 0x0009002B;
344CHECKREG r2, 0x00110033;
345CHECKREG r3, 0x001A003C;
346CHECKREG r4, 0x4567FFF7;
347CHECKREG r5, 0x002BFFCD;
348CHECKREG r6, 0x0033FFD5;
349CHECKREG r7, 0x003CFFDE;
350
351imm32 r0, 0x01230002;
352imm32 r1, 0x12345678;
353imm32 r2, 0x23456789;
354imm32 r3, 0x3456789a;
355imm32 r4, 0x456789ab;
356imm32 r5, 0x56789abc;
357imm32 r6, 0x6789abcd;
358imm32 r7, 0x789abcde;
359R5.L = -14;
360R0 = ASHIFT R0 BY R5.L (V , S);
361R1 = ASHIFT R1 BY R5.L (V , S);
362R2 = ASHIFT R2 BY R5.L (V , S);
363R3 = ASHIFT R3 BY R5.L (V , S);
364R4 = ASHIFT R4 BY R5.L (V , S);
365//r5 = ashift/ashift (r5 by rl5) s;
366R6 = ASHIFT R6 BY R5.L (V , S);
367R7 = ASHIFT R7 BY R5.L (V , S);
368CHECKREG r0, 0x00000000;
369CHECKREG r1, 0x00000001;
370CHECKREG r2, 0x00000001;
371CHECKREG r3, 0x00000001;
372CHECKREG r4, 0x0001FFFE;
373CHECKREG r5, 0x5678FFF2;
374CHECKREG r6, 0x0001FFFE;
375CHECKREG r7, 0x0001FFFE;
376
377
378imm32 r0, 0x01230002;
379imm32 r1, 0x12345678;
380imm32 r2, 0x23456789;
381imm32 r3, 0x3456789a;
382imm32 r4, 0x456789ab;
383imm32 r5, 0x56789abc;
384imm32 r6, 0x6789abcd;
385imm32 r7, 0x789abcde;
386R6.L = -15;
387R0 = ASHIFT R0 BY R6.L (V , S);
388R1 = ASHIFT R1 BY R6.L (V , S);
389R2 = ASHIFT R2 BY R6.L (V , S);
390R3 = ASHIFT R3 BY R6.L (V , S);
391R4 = ASHIFT R4 BY R6.L (V , S);
392R5 = ASHIFT R5 BY R6.L (V , S);
393//r6 = ashift/ashift (r6 by rl6) s;
394R7 = ASHIFT R7 BY R6.L (V , S);
395CHECKREG r0, 0x00000000;
396CHECKREG r1, 0x00000000;
397CHECKREG r2, 0x00000000;
398CHECKREG r3, 0x00000000;
399CHECKREG r4, 0x0000FFFF;
400CHECKREG r5, 0x0000FFFF;
401CHECKREG r6, 0x6789FFF1;
402CHECKREG r7, 0x0000FFFF;
403
404imm32 r0, 0x01230002;
405imm32 r1, 0x12345678;
406imm32 r2, 0x23456789;
407imm32 r3, 0x3456789a;
408imm32 r4, 0x456789ab;
409imm32 r5, 0x56789abc;
410imm32 r6, 0x6789abcd;
411imm32 r7, 0x789abcde;
412R7.L = -16;
413R0 = ASHIFT R0 BY R7.L (V , S);
414R1 = ASHIFT R1 BY R7.L (V , S);
415R2 = ASHIFT R2 BY R7.L (V , S);
416R3 = ASHIFT R3 BY R7.L (V , S);
417R4 = ASHIFT R4 BY R7.L (V , S);
418R5 = ASHIFT R5 BY R7.L (V , S);
419R6 = ASHIFT R6 BY R7.L (V , S);
420R7 = ASHIFT R7 BY R7.L (V , S);
421CHECKREG r0, 0x00000000;
422CHECKREG r1, 0x00000000;
423CHECKREG r2, 0x00000000;
424CHECKREG r3, 0x00000000;
425CHECKREG r4, 0x0000ffff;
426CHECKREG r5, 0x0000ffff;
427CHECKREG r6, 0x0000ffff;
428CHECKREG r7, 0x0000ffff;
429
430pass
431