xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/bfin/c_dsp32shift_amix.s (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
1*4b169a6bSchristos//Original:/testcases/core/c_dsp32shift_amix/c_dsp32shift_amix.dsp
2*4b169a6bSchristos// Spec Reference: dsp32shift ashift mix
3*4b169a6bSchristos# mach: bfin
4*4b169a6bSchristos
5*4b169a6bSchristos.include "testutils.inc"
6*4b169a6bSchristos	start
7*4b169a6bSchristos
8*4b169a6bSchristos// Ashift (Arithmetic ) retain the sign bit (0-->0, 1-->1)
9*4b169a6bSchristos
10*4b169a6bSchristosimm32 r4, 0x00000000;
11*4b169a6bSchristosimm32 r5, 0x00000000;
12*4b169a6bSchristosimm32 r6, 0x00000000;
13*4b169a6bSchristosimm32 r7, 0x00000000;
14*4b169a6bSchristos
15*4b169a6bSchristos// Ashift : positive data, count (+)=left (half reg)
16*4b169a6bSchristosimm32 r0, 0x00010001;
17*4b169a6bSchristosimm32 r1, 1;
18*4b169a6bSchristosimm32 r2, 0x00020002;
19*4b169a6bSchristosimm32 r3, 2;
20*4b169a6bSchristosR4.H = ASHIFT R0.H BY R1.L;
21*4b169a6bSchristosR4.L = ASHIFT R0.L BY R1.L; /* r4 = 0x00020002 */
22*4b169a6bSchristosR5.H = ASHIFT R2.H BY R3.L;
23*4b169a6bSchristosR5.L = ASHIFT R2.L BY R3.L; /* r5 = 0x00080008 */
24*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L (V); /* r6 = 0x00020002 */
25*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L (V); /* r7 = 0x00080008 */
26*4b169a6bSchristosCHECKREG r4, 0x00020002;
27*4b169a6bSchristosCHECKREG r5, 0x00080008;
28*4b169a6bSchristosCHECKREG r6, 0x00020002;
29*4b169a6bSchristosCHECKREG r7, 0x00080008;
30*4b169a6bSchristos
31*4b169a6bSchristos// Ashift : (full reg)
32*4b169a6bSchristosimm32 r1, 3;
33*4b169a6bSchristosimm32 r3, 4;
34*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L; /* r6 = 0x00080010 */
35*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L;
36*4b169a6bSchristosCHECKREG r6, 0x00080008; /* r7 = 0x00100010 */
37*4b169a6bSchristosCHECKREG r7, 0x00200020;
38*4b169a6bSchristos
39*4b169a6bSchristosA0 = 0;
40*4b169a6bSchristosA0.L = R0.L;
41*4b169a6bSchristosA0.H = R0.H;
42*4b169a6bSchristosA0 = ASHIFT A0 BY R1.L; /* a0 = 0x00080008 */
43*4b169a6bSchristosR5 = A0.w; /* r5 = 0x00080008 */
44*4b169a6bSchristos
45*4b169a6bSchristosCHECKREG r5, 0x00080008;
46*4b169a6bSchristosimm32 r4, 0x30000003;
47*4b169a6bSchristosimm32 r1, 1;
48*4b169a6bSchristosR5 = ASHIFT R4 BY R1.L; /* r5 = 0x60000006 */
49*4b169a6bSchristosCHECKREG r5, 0x60000006;
50*4b169a6bSchristosimm32 r1, 2;
51*4b169a6bSchristosR5 = ASHIFT R4 BY R1.L; /* r5 = 0xc000000c like LSHIFT */
52*4b169a6bSchristosCHECKREG r5, 0xc000000c;
53*4b169a6bSchristos
54*4b169a6bSchristos
55*4b169a6bSchristos// Ashift : count (-)=right (half reg)
56*4b169a6bSchristosimm32 r0, 0x10001000;
57*4b169a6bSchristosimm32 r1, -1;
58*4b169a6bSchristosimm32 r2, 0x10001000;
59*4b169a6bSchristosimm32 r3, -2;
60*4b169a6bSchristosR4.H = ASHIFT R0.H BY R1.L;
61*4b169a6bSchristosR4.L = ASHIFT R0.L BY R1.L; /* r4 = 0x08000800 */
62*4b169a6bSchristosR5.H = ASHIFT R2.H BY R3.L;
63*4b169a6bSchristosR5.L = ASHIFT R2.L BY R3.L; /* r4 = 0x04000400 */
64*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L (V); /* r4 = 0x08000800 */
65*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L (V); /* r4 = 0x04000400 */
66*4b169a6bSchristosCHECKREG r4, 0x08000800;
67*4b169a6bSchristosCHECKREG r5, 0x04000400;
68*4b169a6bSchristosCHECKREG r6, 0x08000800;
69*4b169a6bSchristosCHECKREG r7, 0x04000400;
70*4b169a6bSchristos
71*4b169a6bSchristos// Ashift : (full reg)
72*4b169a6bSchristosimm32 r1, -3;
73*4b169a6bSchristosimm32 r3, -4;
74*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L; /* r6 = 0x02000200 */
75*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L; /* r7 = 0x01000100 */
76*4b169a6bSchristosCHECKREG r6, 0x02000200;
77*4b169a6bSchristosCHECKREG r7, 0x01000100;
78*4b169a6bSchristos
79*4b169a6bSchristos// NEGATIVE
80*4b169a6bSchristos// Ashift : NEGATIVE data, count (+)=left (half reg)
81*4b169a6bSchristosimm32 r0, 0xc00f800f;
82*4b169a6bSchristosimm32 r1, 1;
83*4b169a6bSchristosimm32 r2, 0xe00fe00f;
84*4b169a6bSchristosimm32 r3, 2;
85*4b169a6bSchristosR4.H = ASHIFT R0.H BY R1.L;
86*4b169a6bSchristosR4.L = ASHIFT R0.L BY R1.L (S); /* r4 = 0x801e801e */
87*4b169a6bSchristosR5.H = ASHIFT R2.H BY R3.L;
88*4b169a6bSchristosR5.L = ASHIFT R2.L BY R3.L; /* r4 = 0x803c803c */
89*4b169a6bSchristosCHECKREG r4, 0x801e8000;
90*4b169a6bSchristosCHECKREG r5, 0x803c803c;
91*4b169a6bSchristos
92*4b169a6bSchristosimm32 r0, 0xc80fe00f;
93*4b169a6bSchristosimm32 r2, 0xe40fe00f;
94*4b169a6bSchristosimm32 r1, 4;
95*4b169a6bSchristosimm32 r3, 5;
96*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L; /* r6 = 0x80fe00f0 */
97*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L; /* r7 = 0x81fc01e0 */
98*4b169a6bSchristosCHECKREG r6, 0x80fe00f0;
99*4b169a6bSchristosCHECKREG r7, 0x81fc01e0;
100*4b169a6bSchristos
101*4b169a6bSchristosimm32 r0, 0xf80fe00f;
102*4b169a6bSchristosimm32 r2, 0xfc0fe00f;
103*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L (S); /* r6 = 0x80fe00f0 */
104*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L (S); /* r7 = 0x81fc01e0 */
105*4b169a6bSchristosCHECKREG r6, 0x80fe00f0;
106*4b169a6bSchristosCHECKREG r7, 0x81fc01e0;
107*4b169a6bSchristos
108*4b169a6bSchristosimm32 r0, 0xc80fe00f;
109*4b169a6bSchristosimm32 r2, 0xe40fe00f;
110*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L (S); /* r6 = 0x80000000 zero bubble tru MSB */
111*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L (S); /* r7 = 0x80000000 */
112*4b169a6bSchristosCHECKREG r6, 0x80000000;
113*4b169a6bSchristosCHECKREG r7, 0x80000000;
114*4b169a6bSchristos
115*4b169a6bSchristos
116*4b169a6bSchristos// Ashift : NEGATIVE data, count (-)=right (half reg) Working ok
117*4b169a6bSchristosimm32 r0, 0x80f080f0;
118*4b169a6bSchristosimm32 r1, -1;
119*4b169a6bSchristosimm32 r2, 0x80f080f0;
120*4b169a6bSchristosimm32 r3, -2;
121*4b169a6bSchristosR4.H = ASHIFT R0.H BY R1.L;
122*4b169a6bSchristosR4.L = ASHIFT R0.L BY R1.L; /* r4 = 0xc078c078 */
123*4b169a6bSchristosR5.H = ASHIFT R2.H BY R3.L;
124*4b169a6bSchristosR5.L = ASHIFT R2.L BY R3.L; /* r4 = 0xe03ce03c */
125*4b169a6bSchristosCHECKREG r4, 0xc078c078;
126*4b169a6bSchristosCHECKREG r5, 0xe03ce03c;
127*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L (V); /* r6 = 0xc078c078 */
128*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L (V); /* r7 = 0xe03ce03c */
129*4b169a6bSchristosCHECKREG r6, 0xc078c078;
130*4b169a6bSchristosCHECKREG r7, 0xe03ce03c;
131*4b169a6bSchristos
132*4b169a6bSchristos// Ashift : (full reg)
133*4b169a6bSchristosimm32 r1, -3;
134*4b169a6bSchristosimm32 r3, -4;
135*4b169a6bSchristosR6 = ASHIFT R0 BY R1.L; /* r6 = 0xf01e101e */
136*4b169a6bSchristosR7 = ASHIFT R2 BY R3.L; /* r7 = 0xf80f080f */
137*4b169a6bSchristosCHECKREG r6, 0xf01e101e;
138*4b169a6bSchristosCHECKREG r7, 0xf80f080f;
139*4b169a6bSchristos
140*4b169a6bSchristos
141*4b169a6bSchristos
142*4b169a6bSchristospass
143