* hppa.h (pa_opcodes): Use "cX" completer instead of "cx" in fstqx
[external/binutils.git] / gas / testsuite / gas / bfin / shift2.s
1
2 .EXTERN MY_LABEL2;
3 .section .text;
4
5 //
6 //9 SHIFT/ROTATE OPERATIONS
7 //
8
9 //Preg = ( Preg + Preg ) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */
10 P0 = (P0+P0)<<1;
11 P0 = (P0+P1)<<1;
12 P2 = (P2+P0)<<1;
13 P1 = (P1+P2)<<1;
14
15 //P0 = (P2+P0)<<1;
16
17 //Preg = ( Preg + Preg ) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */
18 P0 = (P0+P0)<<2;
19 P0 = (P0+P1)<<2;
20 P2 = (P2+P0)<<2;
21 P1 = (P1+P2)<<2;
22
23 //P0 = (P2+P0)<<2;
24
25 //Dreg = (Dreg + Dreg) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */
26 R0 = (R0+R0)<<1;
27 R0 = (R0+R1)<<1;
28 R2 = (R2+R0)<<1;
29 R1 = (R1+R2)<<1;
30
31 //R0 = (R2+R0)<<1;
32
33
34 //Dreg = (Dreg + Dreg) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */
35 R0 = (R0+R0)<<2;
36 R0 = (R0+R1)<<2;
37 R2 = (R2+R0)<<2;
38 R1 = (R1+R2)<<2;
39
40 //R0 = (R2+R0)<<2;
41
42 //Preg = Preg + ( Preg << 1 ) ; /* adder_pntr + (src_pntr x 2) (a) */
43 P0 = P0 + (P0 << 1);
44 P0 = P0 + (P1 << 1);
45 P0 = P0 + (P2 << 1);
46 P0 = P1 + (P2 << 1);
47 P0 = P2 + (P3 << 1);
48 P1 = P0 + (P0 << 1);
49 P1 = P0 + (P1 << 1);
50 P1 = P0 + (P2 << 1);
51 P1 = P1 + (P2 << 1);
52 P1 = P2 + (P3 << 1);
53
54 //Preg = Preg + ( Preg << 2 ) ; /* adder_pntr + (src_pntr x 4) (a) */
55 P0 = P0 + (P0 << 2);
56 P0 = P0 + (P1 << 2);
57 P0 = P0 + (P2 << 2);
58 P0 = P1 + (P2 << 2);
59 P0 = P2 + (P3 << 2);
60 P1 = P0 + (P0 << 2);
61 P1 = P0 + (P1 << 2);
62 P1 = P0 + (P2 << 2);
63 P1 = P1 + (P2 << 2);
64 P1 = P2 + (P3 << 2);
65
66 //Dreg >>>= uimm5 ; /* arithmetic right shift (a) */
67 R0 >>>= 0;
68 R0 >>>= 31;
69 R0 >>>= 5;
70 R5 >>>= 0;
71 R5 >>>= 31;
72 R5 >>>= 5;
73
74 //Dreg <<= uimm5 ; /* logical left shift (a) */
75 R0 <<= 0;
76 R0 <<= 31;
77 R0 <<= 5;
78 R5 <<= 0;
79 R5 <<= 31;
80 R5 <<= 5;
81 //Dreg_lo_hi = Dreg_lo_hi >>> uimm4 ; /* arithmetic right shift (b) */
82 R0.L = R0.L >>> 0;
83 R0.L = R0.L >>> 15;
84 R0.L = R0.H >>> 0;
85 R0.L = R0.H >>> 15;
86 R0.H = R0.L >>> 0;
87 R0.H = R0.L >>> 15;
88 R0.H = R0.H >>> 0;
89 R0.H = R0.H >>> 15;
90
91 R0.L = R1.L >>> 0;
92 R0.L = R1.L >>> 15;
93 R0.L = R1.H >>> 0;
94 R0.L = R1.H >>> 15;
95 R0.H = R1.L >>> 0;
96 R0.H = R1.L >>> 15;
97 R0.H = R1.H >>> 0;
98 R0.H = R1.H >>> 15;
99
100 R0.L = R7.L >>> 0;
101 R1.L = R6.L >>> 15;
102 R2.L = R5.H >>> 0;
103 R3.L = R4.H >>> 15;
104 R4.H = R3.L >>> 0;
105 R5.H = R2.L >>> 15;
106 R6.H = R1.H >>> 0;
107 R7.H = R0.H >>> 15;
108
109 //Dreg_lo_hi = Dreg_lo_hi << uimm4 (S) ; /* arithmetic left shift (b) */
110 R0.L = R0.L << 0(S);
111 R0.L = R0.L << 15(S);
112 R0.L = R0.H << 0(S);
113 R0.L = R0.H << 15(S);
114 R0.H = R0.L << 0(S);
115 R0.H = R0.L << 15(S);
116 R0.H = R0.H << 0(S);
117 R0.H = R0.H << 15(S);
118
119 R0.L = R1.L << 0(S);
120 R0.L = R1.L << 15(S);
121 R0.L = R1.H << 0(S);
122 R0.L = R1.H << 15(S);
123 R0.H = R1.L << 0(S);
124 R0.H = R1.L << 15(S);
125 R0.H = R1.H << 0(S);
126 R0.H = R1.H << 15(S);
127
128 R0.L = R7.L << 0(S);
129 R1.L = R6.L << 15(S);
130 R2.L = R5.H << 0(S);
131 R3.L = R4.H << 15(S);
132 R4.H = R3.L << 0(S);
133 R5.H = R2.L << 15(S);
134 R6.H = R1.H << 0(S);
135 R7.H = R0.H << 15(S);
136 //Dreg = Dreg >>> uimm5 ; /* arithmetic right shift (b) */
137 R0 = R0 >>> 0;
138 R0 = R0 >>> 31;
139 R0 = R1 >>> 0;
140 R0 = R1 >>> 31;
141 R7 = R0 >>> 0;
142 R6 = R1 >>> 31;
143 R5 = R2 >>> 0;
144 R4 = R3 >>> 31;
145 R3 = R4 >>> 0;
146 R2 = R5 >>> 31;
147 R1 = R6 >>> 0;
148 R0 = R7 >>> 31;
149
150 //Dreg = Dreg << uimm5 (S) ; /* arithmetic left shift (b) */
151 R0 = R0 << 0(S);
152 R0 = R0 << 31(S);
153 R0 = R1 << 0(S);
154 R0 = R1 << 31(S);
155 R7 = R0 << 0(S);
156 R6 = R1 << 31(S);
157 R5 = R2 << 0(S);
158 R4 = R3 << 31(S);
159 R3 = R4 << 0(S);
160 R2 = R5 << 31(S);
161 R1 = R6 << 0(S);
162 R0 = R7 << 31(S);
163 //A0 = A0 >>> uimm5 ; /* arithmetic right shift (b) */
164 A0 = A0 >>> 0;
165 A0 = A0 >>> 15;
166 A0 = A0 >>> 31;
167
168 //A0 = A0 << uimm5 ; /* logical left shift (b) */
169 A0 = A0 << 0;
170 A0 = A0 << 15;
171 A0 = A0 << 31;
172
173 //A1 = A1 >>> uimm5 ; /* arithmetic right shift (b) */
174 A1 = A1 >>> 0;
175 A1 = A1 >>> 15;
176 A1 = A1 >>> 31;
177
178 //A1 = A1 << uimm5 ; /* logical left shift (b) */
179 A1 = A1 << 0;
180 A1 = A1 << 15;
181 A1 = A1 << 31;
182
183 //Dreg >>>= Dreg ; /* arithmetic right shift (a) */
184 R0 >>>= R0;
185 R0 >>>= R1;
186 R1 >>>= R0;
187 R1 >>>= R7;
188
189 //Dreg <<= Dreg ; /* logical left shift (a) */
190 R0 <<= R0;
191 R0 <<= R1;
192 R1 <<= R0;
193 R1 <<= R7;
194
195 //Dreg_lo_hi = ASHIFT Dreg_lo_hi BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */
196 r3.l = ashift r0.h by r7.l ; /* shift, half-word */
197 r3.h = ashift r0.l by r7.l ;
198 r3.h = ashift r0.h by r7.l ;
199 r3.l = ashift r0.l by r7.l ;
200 r3.l = ashift r0.h by r7.l(s) ; /* shift, half-word, saturated */
201 r3.h = ashift r0.l by r7.l(s) ; /* shift, half-word, saturated */
202 r3.h = ashift r0.h by r7.l(s) ;
203 r3.l = ashift r0.l by r7.l (s) ;
204
205 //Dreg = ASHIFT Dreg BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */
206 r4 = ashift r2 by r7.l ; /* shift, word */
207 r4 = ashift r2 by r7.l (s) ; /* shift, word, saturated */
208
209 //A0 = ASHIFT A0 BY Dreg_lo ; /* arithmetic right shift (b)*/
210 A0 = ashift A0 by r7.l ; /* shift, Accumulator */
211
212 //A1 = ASHIFT A1 BY Dreg_lo ; /* arithmetic right shift (b)*/
213 A1 = ashift A1 by r7.l ; /* shift, Accumulator */
214
215 p3 = p2 >> 1 ; /* pointer right shift by 1 */
216 p3 = p3 >> 2 ; /* pointer right shift by 2 */
217 p4 = p5 << 1 ; /* pointer left shift by 1 */
218 p0 = p1 << 2 ; /* pointer left shift by 2 */
219 r3 >>= 17 ; /* data right shift */
220 r3 <<= 17 ; /* data left shift */
221 r3.l = r0.l >> 4 ; /* data right shift, half-word register */
222 r3.l = r0.h >> 4 ; /* same as above; half-word register combinations are arbitrary */
223 r3.h = r0.l << 12 ; /* data left shift, half-word register */
224 r3.h = r0.h << 14 ; /* same as above; half-word register combinations are arbitrary */
225
226 r3 = r6 >> 4 ; /* right shift, 32-bit word */
227 r3 = r6 << 4 ; /* left shift, 32-bit word */
228
229 a0 = a0 >> 7 ; /* Accumulator right shift */
230 a1 = a1 >> 25 ; /* Accumulator right shift */
231 a0 = a0 << 7 ; /* Accumulator left shift */
232 a1 = a1 << 14 ; /* Accumulator left shift */
233
234 r3 >>= r0 ; /* data right shift */
235 r3 <<= r1 ; /* data left shift */
236
237 r3.l = lshift r0.l by r2.l ; /* shift direction controlled by sign of R2.L */
238 r3.h = lshift r0.l by r2.l ;
239
240 a0 = lshift a0 by r7.l ;
241 a1 = lshift a1 by r7.l ;
242
243 r4 = rot r1 by 31 ; /* rotate left */
244 r4 = rot r1 by -32 ; /* rotate right */
245 r4 = rot r1 by 5 ; /* rotate right */
246
247 a0 = rot a0 by 22 ; /* rotate Accumulator left */
248 a0 = rot a0 by -32 ; /* rotate Accumulator left */
249 a0 = rot a0 by 31 ; /* rotate Accumulator left */
250
251 a1 = rot a1 by -32 ; /* rotate Accumulator right */
252 a1 = rot a1 by 31 ; /* rotate Accumulator right */
253 a1 = rot a1 by 22 ; /* rotate Accumulator right */
254
255 r4 = rot r1 by r2.l ;
256 a0 = rot a0 by r3.l ;
257 a1 = rot a1 by r7.l ;
258
259 r0.l = r1.l << 0;
260 r0.l = r1.l << 1;
261 r0.l = r1.l << 2;
262 r0.l = r1.l << 4;
263 r0.l = r1.l >> 0;
264 r0.l = r1.l >> 1;
265 r0.l = r1.l >> 2;
266 r0.l = r1.l >> 4;
267 r0.l = r1.l >>> 1;
268 r0.l = r1.l >>> 2;
269 r0.l = r1.l >>> 4;
270
271 r0.l = r1.h << 0;
272 r0.l = r1.h << 1;
273 r0.l = r1.h << 2;
274 r0.l = r1.h << 4;
275 r0.l = r1.h >> 0;
276 r0.l = r1.h >> 1;
277 r0.l = r1.h >> 2;
278 r0.l = r1.h >> 4;
279 r0.l = r1.h >>> 1;
280 r0.l = r1.h >>> 2;
281 r0.l = r1.h >>> 4;
282
283 r0.l = r1.h << 0 (S);
284 r0.l = r1.h << 1 (S);
285 r0.l = r1.h << 2 (S);
286 r0.l = r1.h << 4 (S);
287 r0.l = r1.h >>> 1 (S);
288 r0.l = r1.h >>> 2 (S);
289 r0.l = r1.h >>> 4 (S);
290