1//Original:/testcases/core/c_dsp32shiftim_lhalf_rn/c_dsp32shiftim_lhalf_rn.dsp
2// Spec Reference: dspshiftimm dreg_lo(hi) = lshift (dreg_lo(hi) by imm5)
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8
9
10// lshift : neg data, count (+)=left (half reg)
11// d_lo = lshift (d_lo BY d_lo)
12// RLx by RLx
13imm32 r0, 0x00000000;
14R0.L = -1;
15imm32 r1, 0x00008001;
16imm32 r2, 0x00008002;
17imm32 r3, 0x00008003;
18imm32 r4, 0x00008004;
19imm32 r5, 0x00008005;
20imm32 r6, 0x00008006;
21imm32 r7, 0x00008007;
22R0.L = R0.L >> 1;
23R1.L = R1.L >> 2;
24R2.L = R2.L >> 3;
25R3.L = R3.L >> 4;
26R4.L = R4.L >> 5;
27R5.L = R5.L >> 6;
28R6.L = R6.L >> 7;
29R7.L = R7.L >> 8;
30CHECKREG r0, 0x00007FFF;
31CHECKREG r1, 0x00002000;
32CHECKREG r2, 0x00001000;
33CHECKREG r3, 0x00000800;
34CHECKREG r4, 0x00000400;
35CHECKREG r5, 0x00000200;
36CHECKREG r6, 0x00000100;
37CHECKREG r7, 0x00000080;
38
39imm32 r0, 0x00008001;
40R1.L = -1;
41imm32 r2, 0x00008002;
42imm32 r3, 0x00008003;
43imm32 r4, 0x00008004;
44imm32 r5, 0x00008005;
45imm32 r6, 0x00008006;
46imm32 r7, 0x00008007;
47R0.L = R0.L >> 9;
48R1.L = R1.L >> 10;
49R2.L = R2.L >> 11;
50R3.L = R3.L >> 12;
51R4.L = R4.L >> 13;
52R5.L = R5.L >> 14;
53R6.L = R6.L >> 15;
54R7.L = R7.L >> 10;
55CHECKREG r0, 0x00000040;
56CHECKREG r1, 0x0000003F;
57CHECKREG r2, 0x00000010;
58CHECKREG r3, 0x00000008;
59CHECKREG r4, 0x00000004;
60CHECKREG r5, 0x00000002;
61CHECKREG r6, 0x00000001;
62CHECKREG r7, 0x00000020;
63
64
65imm32 r0, 0x30008001;
66imm32 r1, 0x30008001;
67R2.L = -15;
68imm32 r3, 0x30008003;
69imm32 r4, 0x30008004;
70imm32 r5, 0x30008005;
71imm32 r6, 0x30008006;
72imm32 r7, 0x30008007;
73R7.L = R0.L >> 1;
74R6.L = R1.L >> 2;
75R5.L = R2.L >> 3;
76R4.L = R3.L >> 4;
77R3.L = R4.L >> 5;
78R2.L = R5.L >> 6;
79R0.L = R7.L >> 8;
80R1.L = R6.L >> 7;
81CHECKREG r0, 0x30000040;
82CHECKREG r1, 0x30000040;
83CHECKREG r2, 0x0000007F;
84CHECKREG r3, 0x30000040;
85CHECKREG r4, 0x30000800;
86CHECKREG r5, 0x30001FFE;
87CHECKREG r6, 0x30002000;
88CHECKREG r7, 0x30004000;
89
90imm32 r0, 0x00008001;
91imm32 r1, 0x00008001;
92imm32 r2, 0x00008002;
93R3.L = -16;
94imm32 r4, 0x00008004;
95imm32 r5, 0x00008005;
96imm32 r6, 0x00008006;
97imm32 r7, 0x00008007;
98R6.L = R0.L >> 13;
99R5.L = R1.L >> 13;
100R4.L = R2.L >> 13;
101R3.L = R3.L >> 13;
102R2.L = R4.L >> 13;
103R1.L = R5.L >> 13;
104R0.L = R6.L >> 13;
105R7.L = R7.L >> 13;
106CHECKREG r0, 0x00000000;
107CHECKREG r1, 0x00000000;
108CHECKREG r2, 0x00000000;
109CHECKREG r3, 0x30000007;
110CHECKREG r4, 0x00000004;
111CHECKREG r5, 0x00000004;
112CHECKREG r6, 0x00000004;
113CHECKREG r7, 0x00000004;
114
115// d_lo = lshift (d_hi BY d_lo)
116// RHx by RLx
117imm32 r0, 0x00000000;
118imm32 r1, 0x80010000;
119imm32 r2, 0x80020000;
120imm32 r3, 0x80030000;
121imm32 r4, 0x80040000;
122imm32 r5, 0x80050000;
123imm32 r6, 0x80060000;
124imm32 r7, 0x80070000;
125R0.L = R0.H >> 1;
126R1.L = R1.H >> 1;
127R2.L = R2.H >> 1;
128R3.L = R3.H >> 1;
129R4.L = R4.H >> 1;
130R5.L = R5.H >> 1;
131R6.L = R6.H >> 1;
132R7.L = R7.H >> 1;
133CHECKREG r0, 0x00000000;
134CHECKREG r1, 0x80014000;
135CHECKREG r2, 0x80024001;
136CHECKREG r3, 0x80034001;
137CHECKREG r4, 0x80044002;
138CHECKREG r5, 0x80054002;
139CHECKREG r6, 0x80064003;
140CHECKREG r7, 0x80074003;
141
142imm32 r0, 0x80010000;
143R1.L = -1;
144imm32 r2, 0x80020000;
145imm32 r3, 0x80030000;
146imm32 r4, 0x80040000;
147imm32 r5, 0x80050000;
148imm32 r6, 0x80060000;
149imm32 r7, 0x80070000;
150R1.L = R0.H >> 10;
151R2.L = R1.H >> 11;
152R3.L = R2.H >> 12;
153R4.L = R3.H >> 13;
154R5.L = R4.H >> 14;
155R6.L = R5.H >> 15;
156R0.L = R7.H >> 15;
157R7.L = R6.H >> 15;
158CHECKREG r0, 0x80010001;
159CHECKREG r1, 0x80010020;
160CHECKREG r2, 0x80020010;
161CHECKREG r3, 0x80030008;
162CHECKREG r4, 0x80040004;
163CHECKREG r5, 0x80050002;
164CHECKREG r6, 0x80060001;
165CHECKREG r7, 0x80070001;
166
167
168imm32 r0, 0xa0010000;
169imm32 r1, 0xa0010000;
170R2.L = -15;
171imm32 r3, 0xa0030000;
172imm32 r4, 0xa0040000;
173imm32 r5, 0xa0050000;
174imm32 r6, 0xa0060000;
175imm32 r7, 0xa0070000;
176R2.L = R0.H >> 2;
177R3.L = R1.H >> 2;
178R4.L = R2.H >> 2;
179R5.L = R3.H >> 2;
180R6.L = R4.H >> 2;
181R7.L = R5.H >> 2;
182R0.L = R6.H >> 2;
183R1.L = R7.H >> 2;
184CHECKREG r0, 0xA0012801;
185CHECKREG r1, 0xA0012801;
186CHECKREG r2, 0x80022800;
187CHECKREG r3, 0xA0032800;
188CHECKREG r4, 0xA0042000;
189CHECKREG r5, 0xA0052800;
190CHECKREG r6, 0xA0062801;
191CHECKREG r7, 0xA0072801;
192
193imm32 r0, 0xb0010001;
194imm32 r1, 0xb0010001;
195imm32 r2, 0xb0020002;
196R3.L = -16;
197imm32 r4, 0xb0040004;
198imm32 r5, 0xb0050005;
199imm32 r6, 0xb0060006;
200imm32 r7, 0xb0070007;
201R3.L = R0.H >> 13;
202R4.L = R1.H >> 13;
203R5.L = R2.H >> 13;
204R6.L = R3.H >> 13;
205R7.L = R4.H >> 13;
206R0.L = R5.H >> 13;
207R1.L = R6.H >> 13;
208R2.L = R7.H >> 13;
209CHECKREG r0, 0xB0010005;
210CHECKREG r1, 0xB0010005;
211CHECKREG r2, 0xB0020005;
212CHECKREG r3, 0xA0030005;
213CHECKREG r4, 0xB0040005;
214CHECKREG r5, 0xB0050005;
215CHECKREG r6, 0xB0060005;
216CHECKREG r7, 0xB0070005;
217
218// d_hi = lshift (d_lo BY d_lo)
219// RLx by RLx
220imm32 r0, 0x00000001;
221imm32 r1, 0x00000001;
222imm32 r2, 0x00000002;
223imm32 r3, 0x00000003;
224imm32 r4, 0x00000004;
225imm32 r5, 0x00000005;
226imm32 r6, 0x00000006;
227imm32 r7, 0x00000007;
228R0.H = R0.L >> 14;
229R1.H = R1.L >> 14;
230R2.H = R2.L >> 14;
231R3.H = R3.L >> 14;
232R4.H = R4.L >> 14;
233R5.H = R5.L >> 14;
234R6.H = R6.L >> 14;
235R7.H = R7.L >> 14;
236CHECKREG r0, 0x00000001;
237CHECKREG r1, 0x00000001;
238CHECKREG r2, 0x00000002;
239CHECKREG r3, 0x00000003;
240CHECKREG r4, 0x00000004;
241CHECKREG r5, 0x00000005;
242CHECKREG r6, 0x00000006;
243CHECKREG r7, 0x00000007;
244
245imm32 r0, 0x00008001;
246imm32 r1, 0x00008001;
247imm32 r2, 0x00008002;
248imm32 r3, 0x00008003;
249imm32 r4, 0x00008004;
250R5.L = -1;
251imm32 r6, 0x00008006;
252imm32 r7, 0x00008007;
253R1.H = R0.L >> 5;
254R0.H = R7.L >> 5;
255R2.H = R1.L >> 5;
256R3.H = R2.L >> 5;
257R4.H = R3.L >> 5;
258R5.H = R4.L >> 5;
259R6.H = R5.L >> 5;
260R7.H = R6.L >> 5;
261CHECKREG r0, 0x04008001;
262CHECKREG r1, 0x04008001;
263CHECKREG r2, 0x04008002;
264CHECKREG r3, 0x04008003;
265CHECKREG r4, 0x04008004;
266CHECKREG r5, 0x0400FFFF;
267CHECKREG r6, 0x07FF8006;
268CHECKREG r7, 0x04008007;
269
270
271imm32 r0, 0x00009001;
272imm32 r1, 0x00009001;
273imm32 r2, 0x00009002;
274imm32 r3, 0x00009003;
275imm32 r4, 0x00009004;
276imm32 r5, 0x00009005;
277R6.L = -15;
278imm32 r7, 0x00009007;
279R3.H = R0.L >> 14;
280R4.H = R1.L >> 14;
281R5.H = R2.L >> 14;
282R6.H = R3.L >> 14;
283R7.H = R4.L >> 14;
284R0.H = R5.L >> 14;
285R1.H = R6.L >> 14;
286R2.H = R7.L >> 14;
287CHECKREG r0, 0x00029001;
288CHECKREG r1, 0x00039001;
289CHECKREG r2, 0x00029002;
290CHECKREG r3, 0x00029003;
291CHECKREG r4, 0x00029004;
292CHECKREG r5, 0x00029005;
293CHECKREG r6, 0x0002FFF1;
294CHECKREG r7, 0x00029007;
295
296imm32 r0, 0x0000a001;
297imm32 r1, 0x0000a001;
298imm32 r2, 0x0000a002;
299imm32 r3, 0x0000a003;
300imm32 r4, 0x0000a004;
301imm32 r5, 0x0000a005;
302imm32 r6, 0x0000a006;
303R7.L = -16;
304R4.H = R0.L >> 15;
305R5.H = R1.L >> 15;
306R6.H = R2.L >> 15;
307R7.H = R3.L >> 15;
308R0.H = R4.L >> 15;
309R1.H = R5.L >> 15;
310R2.H = R6.L >> 15;
311R3.H = R7.L >> 15;
312CHECKREG r0, 0x0001A001;
313CHECKREG r1, 0x0001A001;
314CHECKREG r2, 0x0001A002;
315CHECKREG r3, 0x0001A003;
316CHECKREG r4, 0x0001A004;
317CHECKREG r5, 0x0001A005;
318CHECKREG r6, 0x0001A006;
319CHECKREG r7, 0x0001FFF0;
320
321// d_lo = lshft (d_hi BY d_lo)
322// RHx by RLx
323imm32 r0, 0x80010000;
324imm32 r1, 0x80010000;
325imm32 r2, 0x80020000;
326imm32 r3, 0x80030000;
327R4.L = -1;
328imm32 r5, 0x80050000;
329imm32 r6, 0x80060000;
330imm32 r7, 0x80070000;
331R0.H = R0.H >> 4;
332R1.H = R1.H >> 4;
333R2.H = R2.H >> 4;
334R3.H = R3.H >> 4;
335R4.H = R4.H >> 4;
336R5.H = R5.H >> 4;
337R6.H = R6.H >> 4;
338R7.H = R7.H >> 4;
339CHECKREG r0, 0x08000000;
340CHECKREG r1, 0x08000000;
341CHECKREG r2, 0x08000000;
342CHECKREG r3, 0x08000000;
343CHECKREG r4, 0x0000FFFF;
344CHECKREG r5, 0x08000000;
345CHECKREG r6, 0x08000000;
346CHECKREG r7, 0x08000000;
347
348imm32 r0, 0x80010000;
349imm32 r1, 0x80010000;
350imm32 r2, 0x80020000;
351imm32 r3, 0x80030000;
352imm32 r4, 0x80040000;
353R5.L = -1;
354imm32 r6, 0x80060000;
355imm32 r7, 0x80070000;
356R1.H = R0.H >> 15;
357R2.H = R1.H >> 15;
358R3.H = R2.H >> 15;
359R4.H = R3.H >> 15;
360R5.H = R4.H >> 15;
361R6.H = R5.H >> 15;
362R0.H = R7.H >> 15;
363R7.H = R6.H >> 15;
364CHECKREG r0, 0x00010000;
365CHECKREG r1, 0x00010000;
366CHECKREG r2, 0x00000000;
367CHECKREG r3, 0x00000000;
368CHECKREG r4, 0x00000000;
369CHECKREG r5, 0x0000FFFF;
370CHECKREG r6, 0x00000000;
371CHECKREG r7, 0x00000000;
372
373
374imm32 r0, 0xd0010000;
375imm32 r1, 0xd0010000;
376imm32 r2, 0xd0020000;
377imm32 r3, 0xd0030000;
378imm32 r4, 0xd0040000;
379imm32 r5, 0xd0050000;
380R6.L = -15;
381imm32 r7, 0xd0070000;
382R3.H = R0.H >> 6;
383R4.H = R1.H >> 6;
384R5.H = R2.H >> 6;
385R6.H = R3.H >> 6;
386R7.H = R4.H >> 6;
387R0.H = R5.H >> 6;
388R1.H = R6.H >> 6;
389R2.H = R7.H >> 6;
390CHECKREG r0, 0x000D0000;
391CHECKREG r1, 0x00000000;
392CHECKREG r2, 0x00000000;
393CHECKREG r3, 0x03400000;
394CHECKREG r4, 0x03400000;
395CHECKREG r5, 0x03400000;
396CHECKREG r6, 0x000DFFF1;
397CHECKREG r7, 0x000D0000;
398
399imm32 r0, 0xe0010000;
400imm32 r1, 0xe0010000;
401imm32 r2, 0xe0020000;
402imm32 r3, 0xe0030000;
403imm32 r4, 0xe0040000;
404imm32 r5, 0xe0050000;
405imm32 r6, 0xe0060000;
406R7.L = -16;
407R4.H = R0.H >> 7;
408R5.H = R1.H >> 7;
409R6.H = R2.H >> 7;
410R7.H = R3.H >> 7;
411R0.H = R4.H >> 7;
412R1.H = R5.H >> 7;
413R2.H = R6.H >> 7;
414R3.H = R7.H >> 7;
415CHECKREG r0, 0x00030000;
416CHECKREG r1, 0x00030000;
417CHECKREG r2, 0x00030000;
418CHECKREG r3, 0x00030000;
419CHECKREG r4, 0x01C00000;
420CHECKREG r5, 0x01C00000;
421CHECKREG r6, 0x01C00000;
422CHECKREG r7, 0x01C0FFF0;
423
424pass
425