This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / gas / testsuite / gas / bfin / vector2.s
1 \r
2 .EXTERN MY_LABEL2;\r
3 .section .text;\r
4 \r
5 //\r
6 //14 VECTOR OPERATIONS\r
7 //\r
8 \r
9 //Dreg_hi = Dreg_lo = SIGN ( Dreg_hi ) * Dreg_hi + SIGN ( Dreg_lo ) * Dreg_lo ; /* (b) */\r
10 \r
11 r7.h=r7.l=sign(r2.h)*r3.h+sign(r2.l)*r3.l ;\r
12 r0.h=r0.l=sign(r1.h)*r2.h+sign(r1.l)*r2.l ;\r
13 r3.h=r3.l=sign(r4.h)*r5.h+sign(r4.l)*r5.l ;\r
14 r6.h=r6.l=sign(r7.h)*r0.h+sign(r7.l)*r0.l ;\r
15 r1.h=r1.l=sign(r2.h)*r3.h+sign(r2.l)*r3.l ;\r
16 r4.h=r4.l=sign(r5.h)*r6.h+sign(r5.l)*r6.l ;\r
17 r7.h=r7.l=sign(r0.h)*r1.h+sign(r0.l)*r1.l ;\r
18 r2.h=r2.l=sign(r3.h)*r4.h+sign(r3.l)*r4.l ;\r
19 \r
20 //Dual 16-Bit Operation\r
21 //Dreg = VIT_MAX ( Dreg , Dreg ) (ASL) ; /* shift history bits left (b) */\r
22 //Dreg = VIT_MAX ( Dreg , Dreg ) (ASR) ; /* shift history bits right (b) */\r
23 //Single 16-Bit Operation\r
24 //Dreg_lo = VIT_MAX ( Dreg ) (ASL) ; /* shift history bits left (b) */\r
25 //Dreg_lo = VIT_MAX ( Dreg ) (ASR) ; /* shift history bits right (b) */\r
26 r5 = vit_max(r3, r2)(asl) ; /* shift left, dual operation */\r
27 r7 = vit_max (r1, r0) (asr) ; /* shift right, dual operation */\r
28 \r
29 r0 = vit_max(r1, r2)(asl) ; /* shift left, dual operation */\r
30 r3 = vit_max (r4, r5) (asr) ; /* shift right, dual operation */\r
31 r6 = vit_max(r7, r0)(asl) ; /* shift left, dual operation */\r
32 r1 = vit_max (r2, r3) (asr) ; /* shift right, dual operation */\r
33 r4 = vit_max(r5, r6)(asl) ; /* shift left, dual operation */\r
34 r7 = vit_max (r0, r1) (asr) ; /* shift right, dual operation */\r
35 r2 = vit_max(r3, r4)(asl) ; /* shift left, dual operation */\r
36 r5 = vit_max (r6, r7) (asr) ; /* shift right, dual operation */\r
37 \r
38 \r
39 r3.l = vit_max (r1)(asl) ; /* shift left, single operation */\r
40 r3.l = vit_max (r1)(asr) ; /* shift right, single operation */\r
41 \r
42 r0.l = vit_max (r1)(asl) ; /* shift left, single operation */\r
43 r2.l = vit_max (r3)(asr) ; /* shift right, single operation */\r
44 r4.l = vit_max (r5)(asl) ; /* shift left, single operation */\r
45 r6.l = vit_max (r7)(asr) ; /* shift right, single operation */\r
46 r1.l = vit_max (r2)(asl) ; /* shift left, single operation */\r
47 r3.l = vit_max (r4)(asr) ; /* shift right, single operation */\r
48 r5.l = vit_max (r6)(asl) ; /* shift left, single operation */\r
49 r7.l = vit_max (r0)(asr) ; /* shift right, single operation */\r
50 \r
51 //Dreg = ABS Dreg (V) ; /* (b) */\r
52 r3 = abs r1 (v) ;\r
53 \r
54 r0 = abs r0 (v) ;\r
55 r0 = abs r1 (v) ;\r
56 r2 = abs r3 (v) ;\r
57 r4 = abs r5 (v) ;\r
58 r6 = abs r7 (v) ;\r
59 r1 = abs r0 (v) ;\r
60 r3 = abs r2 (v) ;\r
61 r5 = abs r4 (v) ;\r
62 r7 = abs r6 (v) ;\r
63 \r
64 //Dual 16-Bit Operations\r
65 //Dreg = Dreg +|+ Dreg (opt_mode_0) ; /* add | add (b) */\r
66 r5=r3 +|+ r4 ; /* dual 16-bit operations, add|add */\r
67 \r
68 r0=r1 +|+ r2 ;\r
69 r3=r4 +|+ r5 ;\r
70 r6=r7 +|+ r0 ;\r
71 r1=r2 +|+ r3 ;\r
72 r4=r3 +|+ r5 ;\r
73 r6=r3 +|+ r7 ;\r
74 \r
75 r0=r1 +|+ r2 (S);\r
76 r3=r4 +|+ r5 (S);\r
77 r6=r7 +|+ r0 (S);\r
78 r1=r2 +|+ r3 (S);\r
79 r4=r3 +|+ r5 (S);\r
80 r6=r3 +|+ r7 (S);\r
81 \r
82 r0=r1 +|+ r2 (CO);\r
83 r3=r4 +|+ r5 (CO);\r
84 r6=r7 +|+ r0 (CO) ;\r
85 r1=r2 +|+ r3 (CO);\r
86 r4=r3 +|+ r5 (CO);\r
87 r6=r3 +|+ r7 (CO);\r
88 \r
89 r0=r1 +|+ r2 (SCO);\r
90 r3=r4 +|+ r5 (SCO);\r
91 r6=r7 +|+ r0 (SCO);\r
92 r1=r2 +|+ r3 (SCO);\r
93 r4=r3 +|+ r5 (SCO);\r
94 r6=r3 +|+ r7 (SCO);\r
95 \r
96 //Dreg = Dreg \96|+ Dreg (opt_mode_0) ; /* subtract | add (b) */\r
97 r6=r0 -|+ r1(s) ; /* same as above, subtract|add with saturation */\r
98 \r
99 r0=r1 -|+ r2 ;\r
100 r3=r4 -|+ r5 ;\r
101 r6=r7 -|+ r0 ;\r
102 r1=r2 -|+ r3 ;\r
103 r4=r3 -|+ r5 ;\r
104 r6=r3 -|+ r7 ;\r
105 \r
106 r0=r1 -|+ r2 (S);\r
107 r3=r4 -|+ r5 (S);\r
108 r6=r7 -|+ r0 (S);\r
109 r1=r2 -|+ r3 (S);\r
110 r4=r3 -|+ r5 (S);\r
111 r6=r3 -|+ r7 (S);\r
112 \r
113 r0=r1 -|+ r2 (CO);\r
114 r3=r4 -|+ r5 (CO);\r
115 r6=r7 -|+ r0 (CO) ;\r
116 r1=r2 -|+ r3 (CO);\r
117 r4=r3 -|+ r5 (CO);\r
118 r6=r3 -|+ r7 (CO);\r
119 \r
120 r0=r1 -|+ r2 (SCO);\r
121 r3=r4 -|+ r5 (SCO);\r
122 r6=r7 -|+ r0 (SCO);\r
123 r1=r2 -|+ r3 (SCO);\r
124 r4=r3 -|+ r5 (SCO);\r
125 r6=r3 -|+ r7 (SCO);\r
126 \r
127 \r
128 //Dreg = Dreg +|\96 Dreg (opt_mode_0) ; /* add | subtract (b) */\r
129 r0=r2 +|- r1(co) ; /* add|subtract with half-word results crossed over in the destination register */\r
130 \r
131 r0=r1 +|- r2 ;\r
132 r3=r4 +|- r5 ;\r
133 r6=r7 +|- r0 ;\r
134 r1=r2 +|- r3 ;\r
135 r4=r3 +|- r5 ;\r
136 r6=r3 +|- r7 ;\r
137 \r
138 r0=r1 +|- r2 (S);\r
139 r3=r4 +|- r5 (S);\r
140 r6=r7 +|- r0 (S);\r
141 r1=r2 +|- r3 (S);\r
142 r4=r3 +|- r5 (S);\r
143 r6=r3 +|- r7 (S);\r
144 \r
145 r0=r1 +|- r2 (CO);\r
146 r3=r4 +|- r5 (CO);\r
147 r6=r7 +|- r0 (CO) ;\r
148 r1=r2 +|- r3 (CO);\r
149 r4=r3 +|- r5 (CO);\r
150 r6=r3 +|- r7 (CO);\r
151 \r
152 r0=r1 +|- r2 (SCO);\r
153 r3=r4 +|- r5 (SCO);\r
154 r6=r7 +|- r0 (SCO);\r
155 r1=r2 +|- r3 (SCO);\r
156 r4=r3 +|- r5 (SCO);\r
157 r6=r3 +|- r7 (SCO);\r
158 \r
159 //Dreg = Dreg \96|\96 Dreg (opt_mode_0) ; /* subtract | subtract (b) */\r
160 r7=r3 -|- r6(sco) ; /* subtract|subtract with saturation and half-word results crossed over in the destination register */\r
161 \r
162 r0=r1 -|- r2 ;\r
163 r3=r4 -|- r5 ;\r
164 r6=r7 -|- r0 ;\r
165 r1=r2 -|- r3 ;\r
166 r4=r3 -|- r5 ;\r
167 r6=r3 -|- r7 ;\r
168 \r
169 r0=r1 -|- r2 (S);\r
170 r3=r4 -|- r5 (S);\r
171 r6=r7 -|- r0 (S);\r
172 r1=r2 -|- r3 (S);\r
173 r4=r3 -|- r5 (S);\r
174 r6=r3 -|- r7 (S);\r
175 \r
176 r0=r1 -|- r2 (CO);\r
177 r3=r4 -|- r5 (CO);\r
178 r6=r7 -|- r0 (CO) ;\r
179 r1=r2 -|- r3 (CO);\r
180 r4=r3 -|- r5 (CO);\r
181 r6=r3 -|- r7 (CO);\r
182 \r
183 r0=r1 -|- r2 (SCO);\r
184 r3=r4 -|- r5 (SCO);\r
185 r6=r7 -|- r0 (SCO);\r
186 r1=r2 -|- r3 (SCO);\r
187 r4=r3 -|- r5 (SCO);\r
188 r6=r3 -|- r7 (SCO);\r
189 \r
190 //Quad 16-Bit Operations\r
191 //Dreg = Dreg +|+ Dreg, Dreg = Dreg \96|\96 Dreg (opt_mode_0,opt_mode_2) ; /* add | add, subtract | subtract; the set of source registers must be the same for each operation (b) */\r
192 r5=r3 +|+ r4, r7=r3-|-r4 ; /* quad 16-bit operations, add|add, subtract|subtract */\r
193 \r
194 r0=r1 +|+ r2, r7=r1 -|- r2;\r
195 r3=r4 +|+ r5, r6=r4 -|- r5;\r
196 r6=r7 +|+ r0, r5=r7 -|- r0;\r
197 r1=r2 +|+ r3, r4=r2 -|- r3;\r
198 r4=r3 +|+ r5, r3=r3 -|- r5;\r
199 r6=r3 +|+ r7, r2=r3 -|- r7;\r
200                          \r
201 r0=r1 +|+ r2, r7=r1 -|- r2(S);\r
202 r3=r4 +|+ r5, r6=r4 -|- r5(S);\r
203 r6=r7 +|+ r0, r5=r7 -|- r0(S);\r
204 r1=r2 +|+ r3, r4=r2 -|- r3(S);\r
205 r4=r3 +|+ r5, r3=r3 -|- r5(S);\r
206 r6=r3 +|+ r7, r2=r3 -|- r7(S);\r
207                          \r
208 \r
209 r0=r1 +|+ r2, r7=r1 -|- r2(CO);\r
210 r3=r4 +|+ r5, r6=r4 -|- r5(CO);\r
211 r6=r7 +|+ r0, r5=r7 -|- r0(CO);\r
212 r1=r2 +|+ r3, r4=r2 -|- r3(CO);\r
213 r4=r3 +|+ r5, r3=r3 -|- r5(CO);\r
214 r6=r3 +|+ r7, r2=r3 -|- r7(CO);\r
215                          \r
216 \r
217 r0=r1 +|+ r2, r7=r1 -|- r2(SCO);\r
218 r3=r4 +|+ r5, r6=r4 -|- r5(SCO);\r
219 r6=r7 +|+ r0, r5=r7 -|- r0(SCO);\r
220 r1=r2 +|+ r3, r4=r2 -|- r3(SCO);\r
221 r4=r3 +|+ r5, r3=r3 -|- r5(SCO);\r
222 r6=r3 +|+ r7, r2=r3 -|- r7(SCO);\r
223                          \r
224 r0=r1 +|+ r2, r7=r1 -|- r2(ASR);\r
225 r3=r4 +|+ r5, r6=r4 -|- r5(ASR);\r
226 r6=r7 +|+ r0, r5=r7 -|- r0(ASR);\r
227 r1=r2 +|+ r3, r4=r2 -|- r3(ASR);\r
228 r4=r3 +|+ r5, r3=r3 -|- r5(ASR);\r
229 r6=r3 +|+ r7, r2=r3 -|- r7(ASR);\r
230                          \r
231 \r
232 r0=r1 +|+ r2, r7=r1 -|- r2(ASL);\r
233 r3=r4 +|+ r5, r6=r4 -|- r5(ASL);\r
234 r6=r7 +|+ r0, r5=r7 -|- r0(ASL);\r
235 r1=r2 +|+ r3, r4=r2 -|- r3(ASL);\r
236 r4=r3 +|+ r5, r3=r3 -|- r5(ASL);\r
237 r6=r3 +|+ r7, r2=r3 -|- r7(ASL);\r
238                          \r
239 \r
240 r0=r1 +|+ r2, r7=r1 -|- r2(S,ASR);\r
241 r3=r4 +|+ r5, r6=r4 -|- r5(S,ASR);\r
242 r6=r7 +|+ r0, r5=r7 -|- r0(S,ASR);\r
243 r1=r2 +|+ r3, r4=r2 -|- r3(S,ASR);\r
244 r4=r3 +|+ r5, r3=r3 -|- r5(S,ASR);\r
245 r6=r3 +|+ r7, r2=r3 -|- r7(S,ASR);\r
246                          \r
247 \r
248 r0=r1 +|+ r2, r7=r1 -|- r2(CO,ASR);\r
249 r3=r4 +|+ r5, r6=r4 -|- r5(CO,ASR);\r
250 r6=r7 +|+ r0, r5=r7 -|- r0(CO,ASR);\r
251 r1=r2 +|+ r3, r4=r2 -|- r3(CO,ASR);\r
252 r4=r3 +|+ r5, r3=r3 -|- r5(CO,ASR);\r
253 r6=r3 +|+ r7, r2=r3 -|- r7(CO,ASR);\r
254                          \r
255 \r
256 r0=r1 +|+ r2, r7=r1 -|- r2(SCO,ASR);\r
257 r3=r4 +|+ r5, r6=r4 -|- r5(SCO,ASR);\r
258 r6=r7 +|+ r0, r5=r7 -|- r0(SCO,ASR);\r
259 r1=r2 +|+ r3, r4=r2 -|- r3(SCO,ASR);\r
260 r4=r3 +|+ r5, r3=r3 -|- r5(SCO,ASR);\r
261 r6=r3 +|+ r7, r2=r3 -|- r7(SCO,ASR);\r
262 \r
263 r0=r1 +|+ r2, r7=r1 -|- r2(S,ASL);\r
264 r3=r4 +|+ r5, r6=r4 -|- r5(S,ASL);\r
265 r6=r7 +|+ r0, r5=r7 -|- r0(S,ASL);\r
266 r1=r2 +|+ r3, r4=r2 -|- r3(S,ASL);\r
267 r4=r3 +|+ r5, r3=r3 -|- r5(S,ASL);\r
268 r6=r3 +|+ r7, r2=r3 -|- r7(S,ASL);\r
269                          \r
270 \r
271 r0=r1 +|+ r2, r7=r1 -|- r2(CO,ASL);\r
272 r3=r4 +|+ r5, r6=r4 -|- r5(CO,ASL);\r
273 r6=r7 +|+ r0, r5=r7 -|- r0(CO,ASL);\r
274 r1=r2 +|+ r3, r4=r2 -|- r3(CO,ASL);\r
275 r4=r3 +|+ r5, r3=r3 -|- r5(CO,ASL);\r
276 r6=r3 +|+ r7, r2=r3 -|- r7(CO,ASL);\r
277                          \r
278 \r
279 r0=r1 +|+ r2, r7=r1 -|- r2(SCO,ASL);\r
280 r3=r4 +|+ r5, r6=r4 -|- r5(SCO,ASL);\r
281 r6=r7 +|+ r0, r5=r7 -|- r0(SCO,ASL);\r
282 r1=r2 +|+ r3, r4=r2 -|- r3(SCO,ASL);\r
283 r4=r3 +|+ r5, r3=r3 -|- r5(SCO,ASL);\r
284 r6=r3 +|+ r7, r2=r3 -|- r7(SCO,ASL);\r
285 \r
286 \r
287 //Dreg = Dreg +|\96 Dreg, Dreg = Dreg \96|+ Dreg (opt_mode_0,opt_mode_2) ; /* add | subtract, subtract | add; the set of source registers must be the same for each operation (b) */\r
288 r5=r3 +|- r4, r7=r3 -|+ r4 ; /* quad 16-bit operations, add|subtract, subtract|add */\r
289 \r
290 r0=r1 +|- r2, r7=r1 -|+ r2;\r
291 r3=r4 +|- r5, r6=r4 -|+ r5;\r
292 r6=r7 +|- r0, r5=r7 -|+ r0;\r
293 r1=r2 +|- r3, r4=r2 -|+ r3;\r
294 r4=r3 +|- r5, r3=r3 -|+ r5;\r
295 r6=r3 +|- r7, r2=r3 -|+ r7;\r
296                          \r
297 r0=r1 +|- r2, r7=r1 -|+ r2(S);\r
298 r3=r4 +|- r5, r6=r4 -|+ r5(S);\r
299 r6=r7 +|- r0, r5=r7 -|+ r0(S);\r
300 r1=r2 +|- r3, r4=r2 -|+ r3(S);\r
301 r4=r3 +|- r5, r3=r3 -|+ r5(S);\r
302 r6=r3 +|- r7, r2=r3 -|+ r7(S);\r
303                          \r
304 \r
305 r0=r1 +|- r2, r7=r1 -|+ r2(CO);\r
306 r3=r4 +|- r5, r6=r4 -|+ r5(CO);\r
307 r6=r7 +|- r0, r5=r7 -|+ r0(CO);\r
308 r1=r2 +|- r3, r4=r2 -|+ r3(CO);\r
309 r4=r3 +|- r5, r3=r3 -|+ r5(CO);\r
310 r6=r3 +|- r7, r2=r3 -|+ r7(CO);\r
311                          \r
312 \r
313 r0=r1 +|- r2, r7=r1 -|+ r2(SCO);\r
314 r3=r4 +|- r5, r6=r4 -|+ r5(SCO);\r
315 r6=r7 +|- r0, r5=r7 -|+ r0(SCO);\r
316 r1=r2 +|- r3, r4=r2 -|+ r3(SCO);\r
317 r4=r3 +|- r5, r3=r3 -|+ r5(SCO);\r
318 r6=r3 +|- r7, r2=r3 -|+ r7(SCO);\r
319                          \r
320 r0=r1 +|- r2, r7=r1 -|+ r2(ASR);\r
321 r3=r4 +|- r5, r6=r4 -|+ r5(ASR);\r
322 r6=r7 +|- r0, r5=r7 -|+ r0(ASR);\r
323 r1=r2 +|- r3, r4=r2 -|+ r3(ASR);\r
324 r4=r3 +|- r5, r3=r3 -|+ r5(ASR);\r
325 r6=r3 +|- r7, r2=r3 -|+ r7(ASR);\r
326                          \r
327 \r
328 r0=r1 +|- r2, r7=r1 -|+ r2(ASL);\r
329 r3=r4 +|- r5, r6=r4 -|+ r5(ASL);\r
330 r6=r7 +|- r0, r5=r7 -|+ r0(ASL);\r
331 r1=r2 +|- r3, r4=r2 -|+ r3(ASL);\r
332 r4=r3 +|- r5, r3=r3 -|+ r5(ASL);\r
333 r6=r3 +|- r7, r2=r3 -|+ r7(ASL);\r
334                          \r
335 \r
336 r0=r1 +|- r2, r7=r1 -|+ r2(S,ASR);\r
337 r3=r4 +|- r5, r6=r4 -|+ r5(S,ASR);\r
338 r6=r7 +|- r0, r5=r7 -|+ r0(S,ASR);\r
339 r1=r2 +|- r3, r4=r2 -|+ r3(S,ASR);\r
340 r4=r3 +|- r5, r3=r3 -|+ r5(S,ASR);\r
341 r6=r3 +|- r7, r2=r3 -|+ r7(S,ASR);\r
342                          \r
343 \r
344 r0=r1 +|- r2, r7=r1 -|+ r2(CO,ASR);\r
345 r3=r4 +|- r5, r6=r4 -|+ r5(CO,ASR);\r
346 r6=r7 +|- r0, r5=r7 -|+ r0(CO,ASR);\r
347 r1=r2 +|- r3, r4=r2 -|+ r3(CO,ASR);\r
348 r4=r3 +|- r5, r3=r3 -|+ r5(CO,ASR);\r
349 r6=r3 +|- r7, r2=r3 -|+ r7(CO,ASR);\r
350                          \r
351 \r
352 r0=r1 +|- r2, r7=r1 -|+ r2(SCO,ASR);\r
353 r3=r4 +|- r5, r6=r4 -|+ r5(SCO,ASR);\r
354 r6=r7 +|- r0, r5=r7 -|+ r0(SCO,ASR);\r
355 r1=r2 +|- r3, r4=r2 -|+ r3(SCO,ASR);\r
356 r4=r3 +|- r5, r3=r3 -|+ r5(SCO,ASR);\r
357 r6=r3 +|- r7, r2=r3 -|+ r7(SCO,ASR);\r
358 \r
359 r0=r1 +|- r2, r7=r1 -|+ r2(S,ASL);\r
360 r3=r4 +|- r5, r6=r4 -|+ r5(S,ASL);\r
361 r6=r7 +|- r0, r5=r7 -|+ r0(S,ASL);\r
362 r1=r2 +|- r3, r4=r2 -|+ r3(S,ASL);\r
363 r4=r3 +|- r5, r3=r3 -|+ r5(S,ASL);\r
364 r6=r3 +|- r7, r2=r3 -|+ r7(S,ASL);\r
365                          \r
366 \r
367 r0=r1 +|- r2, r7=r1 -|+ r2(CO,ASL);\r
368 r3=r4 +|- r5, r6=r4 -|+ r5(CO,ASL);\r
369 r6=r7 +|- r0, r5=r7 -|+ r0(CO,ASL);\r
370 r1=r2 +|- r3, r4=r2 -|+ r3(CO,ASL);\r
371 r4=r3 +|- r5, r3=r3 -|+ r5(CO,ASL);\r
372 r6=r3 +|- r7, r2=r3 -|+ r7(CO,ASL);\r
373                          \r
374 \r
375 r0=r1 +|- r2, r7=r1 -|+ r2(SCO,ASL);\r
376 r3=r4 +|- r5, r6=r4 -|+ r5(SCO,ASL);\r
377 r6=r7 +|- r0, r5=r7 -|+ r0(SCO,ASL);\r
378 r1=r2 +|- r3, r4=r2 -|+ r3(SCO,ASL);\r
379 r4=r3 +|- r5, r3=r3 -|+ r5(SCO,ASL);\r
380 r6=r3 +|- r7, r2=r3 -|+ r7(SCO,ASL);\r
381 \r
382 \r
383 \r
384 //Dual 32-Bit Operations\r
385 //Dreg = Dreg + Dreg, Dreg = Dreg - Dreg (opt_mode_1) ; /* add, subtract; the set of source registers must be the same for each operation (b) */\r
386 r2=r0+r1, r3=r0-r1 ; /* 32-bit operations */\r
387 \r
388 r7=r0+r1, r0=r0-r1 ; /* 32-bit operations */\r
389 r6=r1+r2, r1=r1-r2 ; /* 32-bit operations */\r
390 r5=r2+r3, r2=r2-r3 ; /* 32-bit operations */\r
391 r4=r3+r4, r3=r3-r4 ; /* 32-bit operations */\r
392 r3=r4+r5, r4=r4-r5 ; /* 32-bit operations */\r
393 r2=r5+r6, r5=r5-r6 ; /* 32-bit operations */\r
394 r1=r6+r7, r6=r6-r7 ; /* 32-bit operations */\r
395 r0=r7+r0, r7=r7-r0 ; /* 32-bit operations */\r
396 \r
397 r2=r0+r1, r3=r0-r1(s) ; /* dual 32-bit operations with saturation */\r
398 r7=r0+r1, r0=r0-r1 (s); /* 32-bit operations */\r
399 r6=r1+r2, r1=r1-r2 (s); /* 32-bit operations */\r
400 r5=r2+r3, r2=r2-r3 (s); /* 32-bit operations */\r
401 r4=r3+r4, r3=r3-r4(s) ; /* 32-bit operations */\r
402 r3=r4+r5, r4=r4-r5 (s); /* 32-bit operations */\r
403 r2=r5+r6, r5=r5-r6 (s); /* 32-bit operations */\r
404 r1=r6+r7, r6=r6-r7 (s); /* 32-bit operations */\r
405 r0=r7+r0, r7=r7-r0 (s); /* 32-bit operations */\r
406 \r
407 \r
408 \r
409 //Dual 40-Bit Accumulator Operations\r
410 //Dreg = A1 + A0, Dreg = A1 - A0 (opt_mode_1) ; /* add, subtract Accumulators; subtract A0 from A1 (b) */\r
411 r0=a1+a0, r1=a1-a0 ;\r
412 r2=a1+a0, r3=a1-a0 ;\r
413 r4=a1+a0, r5=a1-a0 ;\r
414 r6=a1+a0, r7=a1-a0 ;\r
415 r1=a1+a0, r0=a1-a0 ;\r
416 r3=a1+a0, r2=a1-a0 ;\r
417 r5=a1+a0, r4=a1-a0 ;\r
418 \r
419 r0=a1+a0, r1=a1-a0 (s);\r
420 r2=a1+a0, r3=a1-a0 (s);\r
421 r4=a1+a0, r5=a1-a0 (s);\r
422 r6=a1+a0, r7=a1-a0 (s);\r
423 r1=a1+a0, r0=a1-a0 (s);\r
424 r3=a1+a0, r2=a1-a0 (s);\r
425 r5=a1+a0, r4=a1-a0 (s);\r
426 \r
427 //Dreg = A0 + A1, Dreg = A0 - A1 (opt_mode_1) ; /* add, subtract Accumulators; subtract A1 from A0 (b) */\r
428 r4=a0+a1, r6=a0-a1(s);\r
429 \r
430 r0=a0+a1, r1=a0-a1 ;\r
431 r2=a0+a1, r3=a0-a1 ;\r
432 r4=a0+a1, r5=a0-a1 ;\r
433 r6=a0+a1, r7=a0-a1 ;\r
434 r1=a0+a1, r0=a0-a1 ;\r
435 r3=a0+a1, r2=a0-a1 ;\r
436 r5=a0+a1, r4=a0-a1 ;\r
437 \r
438 r0=a0+a1, r1=a0-a1 (s);\r
439 r2=a0+a1, r3=a0-a1 (s);\r
440 r4=a0+a1, r5=a0-a1 (s);\r
441 r6=a0+a1, r7=a0-a1 (s);\r
442 r1=a0+a1, r0=a0-a1 (s);\r
443 r3=a0+a1, r2=a0-a1 (s);\r
444 r5=a0+a1, r4=a0-a1 (s);\r
445 \r
446 //Constant Shift Magnitude\r
447 //Dreg = Dreg >>> uimm4 (V) ; /* arithmetic shift right, immediate (b) */\r
448 R0 = R0 >>> 5(V);\r
449 \r
450 R0 = R1 >>> 5(V);\r
451 R2 = R3 >>> 5(V);\r
452 R4 = R5 >>> 5(V);\r
453 R6 = R7 >>> 5(V);\r
454 R1 = R0 >>> 5(V);\r
455 R3 = R2 >>> 5(V);\r
456 R5 = R4 >>> 5(V);\r
457 R7 = R6 >>> 5(V);\r
458 \r
459 \r
460 //Dreg = Dreg << uimm4 (V,S) ; /* arithmetic shift left, immediate with saturation (b) */\r
461 \r
462 R0 = R1 << 5(V,S);\r
463 R2 = R3 << 5(V,S);\r
464 R4 = R5 << 5(V,S);\r
465 R6 = R7 << 5(V,S);\r
466 R1 = R0 << 5(V,S);\r
467 R3 = R2 << 5(V,S);\r
468 R5 = R4 << 5(V,S);\r
469 R7 = R6 << 5(V,S);\r
470 \r
471 //Registered Shift Magnitude\r
472 //Dreg = ASHIFT Dreg BY Dreg_lo (V) ; /* arithmetic shift (b) */\r
473 r2=ashift r7 by r5.l (v) ;\r
474 \r
475 R0 = ASHIFT R1 BY R2.L (V);\r
476 R3 = ASHIFT R4 BY R5.L (V);\r
477 R6 = ASHIFT R7 BY R0.L (V);\r
478 R1 = ASHIFT R2 BY R3.L (V);\r
479 R4 = ASHIFT R5 BY R6.L (V);\r
480 R7 = ASHIFT R0 BY R1.L (V);\r
481 R2 = ASHIFT R3 BY R4.L (V);\r
482 R5 = ASHIFT R6 BY R7.L (V);\r
483 \r
484 \r
485 //Dreg = ASHIFT Dreg BY Dreg_lo (V, S) ; /* arithmetic shift with saturation (b) */\r
486 R0 = ASHIFT R1 BY R2.L (V,S);\r
487 R3 = ASHIFT R4 BY R5.L (V,S);\r
488 R6 = ASHIFT R7 BY R0.L (V,S);\r
489 R1 = ASHIFT R2 BY R3.L (V,S);\r
490 R4 = ASHIFT R5 BY R6.L (V,S);\r
491 R7 = ASHIFT R0 BY R1.L (V,S);\r
492 R2 = ASHIFT R3 BY R4.L (V,S);\r
493 R5 = ASHIFT R6 BY R7.L (V,S);\r
494 \r
495 //Constant Shift Magnitude\r
496 //Dreg = Dreg >> uimm4 (V) ; /* logical shift right, immediate (b) */\r
497 R0 = R1 >> 5(V);\r
498 R2 = R3 >> 5(V);\r
499 R4 = R5 >> 5(V);\r
500 R6 = R7 >> 5(V);\r
501 R1 = R0 >> 5(V);\r
502 R3 = R2 >> 5(V);\r
503 R5 = R4 >> 5(V);\r
504 R7 = R6 >> 5(V);\r
505 \r
506 //Dreg = Dreg << uimm4 (V) ; /* logical shift left, immediate (b) */\r
507 R0 = R1 << 5(V);\r
508 R2 = R3 << 5(V);\r
509 R4 = R5 << 5(V);\r
510 R6 = R7 << 5(V);\r
511 R1 = R0 << 5(V);\r
512 R3 = R2 << 5(V);\r
513 R5 = R4 << 5(V);\r
514 R7 = R6 << 5(V);\r
515 \r
516 \r
517 //Registered Shift Magnitude\r
518 //Dreg = LSHIFT Dreg BY Dreg_lo (V) ; /* logical shift (b) */\r
519 \r
520 R0 = LSHIFT R1 BY R2.L (V);\r
521 R3 = LSHIFT R4 BY R5.L (V);\r
522 R6 = LSHIFT R7 BY R0.L (V);\r
523 R1 = LSHIFT R2 BY R3.L (V);\r
524 R4 = LSHIFT R5 BY R6.L (V);\r
525 R7 = LSHIFT R0 BY R1.L (V);\r
526 R2 = LSHIFT R3 BY R4.L (V);\r
527 R5 = LSHIFT R6 BY R7.L (V);\r
528 \r
529 //Dreg = MAX ( Dreg , Dreg ) (V) ; /* dual 16-bit operations (b) */\r
530 r7 = max (r1, r0) (v) ;\r
531 \r
532 R0 = MAX (R1, R2) (V);\r
533 R3 = MAX (R4, R5) (V);\r
534 R6 = MAX (R7, R0) (V);\r
535 R1 = MAX (R2, R3) (V);\r
536 R4 = MAX (R5, R6) (V);\r
537 R7 = MAX (R0, R1) (V);\r
538 R2 = MAX (R3, R4) (V);\r
539 R5 = MAX (R6, R7) (V);\r
540 \r
541 //Dreg = MIN ( Dreg , Dreg ) (V) ; /* dual 16-bit operation (b) */\r
542 R0 = MIN (R1, R2) (V);\r
543 R3 = MIN (R4, R5) (V);\r
544 R6 = MIN (R7, R0) (V);\r
545 R1 = MIN (R2, R3) (V);\r
546 R4 = MIN (R5, R6) (V);\r
547 R7 = MIN (R0, R1) (V);\r
548 R2 = MIN (R3, R4) (V);\r
549 R5 = MIN (R6, R7) (V);\r
550 \r
551 r2.h=r7.l*r6.h, r2.l=r7.h*r6.h ;\r
552 /* simultaneous MAC0 and MAC1 execution, 16-bit results. Both\r
553 results are signed fractions. */\r
554 r4.l=r1.l*r0.l, r4.h=r1.h*r0.h ;\r
555 /* same as above. MAC order is arbitrary. */\r
556 r0.h=r3.h*r2.l (m), r0.l=r3.l*r2.l ;\r
557 \r
558 a1=r2.l*r3.h, a0=r2.h*r3.h ;\r
559 /* both multiply signed fractions into separate Accumulators */\r
560 a0=r1.l*r0.l, a1+=r1.h*r0.h ;\r
561 /* same as above, but sum result into A1. MAC order is arbitrary.\r
562 */\r
563 a1+=r3.h*r3.l, a0-=r3.h*r3.h ;\r
564 /* sum product into A1, subtract product from A0 */\r
565 a1=r3.h*r2.l (m), a0+=r3.l*r2.l ;\r
566 /* MAC1 multiplies a signed fraction in r3.h by an unsigned fraction\r
567 in r2.l. MAC0 multiplies two signed fractions. */\r
568 a1=r7.h*r4.h (m), a0+=r7.l*r4.l (fu) ;\r
569 /* MAC1 multiplies signed fraction by unsigned fraction. MAC0\r
570 multiplies and accumulates two unsigned fractions. */\r
571 a1+=r3.h*r2.h, a0=r3.l*r2.l (is) ;\r
572 /* both MACs perform signed integer multiplication */\r
573 a1=r6.h*r7.h, a0+=r6.l*r7.l (w32) ;\r
574 /* both MACs multiply signed fractions, sign extended, and saturate\r
575 both Accumulators at bit 31 */\r
576 r2.h=(a1=r7.l*r6.h), r2.l=(a0=r7.h*r6.h) ; /* simultaneous MAC0\r
577 and MAC1 execution, both are signed fractions, both products load\r
578 into the Accumulators,MAC1 into half-word registers. */\r
579 r4.l=(a0=r1.l*r0.l), r4.h=(a1+=r1.h*r0.h) ; /* same as above,\r
580 but sum result into A1. ; MAC order is arbitrary. */\r
581 r7.h=(a1+=r6.h*r5.l), r7.l=(a0=r6.h*r5.h) ; /* sum into A1,\r
582 subtract into A0 */\r
583 r0.h=(a1=r7.h*r4.l) (m), r0.l=(a0+=r7.l*r4.l) ; /* MAC1 multiplies\r
584 a signed fraction by an unsigned fraction. MAC0 multiplies\r
585 two signed fractions. */\r
586 r5.h=(a1=r3.h*r2.h) (m), r5.l=(a0+=r3.l*r2.l) (fu) ; /* MAC1\r
587 multiplies signed fraction by unsigned fraction. MAC0 multiplies\r
588 two unsigned fractions. */\r
589 r0.h=(a1+=r3.h*r2.h), r0.l=(a0=r3.l*r2.l) (is) ; /* both MACs\r
590 perform signed integer multiplication. */\r
591 r5.h=(a1=r2.h*r1.h), a0+=r2.l*r1.l ; /* both MACs multiply\r
592 signed fractions. MAC0 does not copy the accum result. */\r
593 r3.h=(a1=r2.h*r1.h) (m), a0=r2.l*r1.l ; /* MAC1 multiplies\r
594 signed fraction by unsigned fraction and uses all 40 bits of A1.\r
595 MAC0 multiplies two signed fractions. */\r
596 r3.h=a1, r3.l=(a0+=r0.l*r1.l) (s2rnd) ; /* MAC1 copies Accumulator\r
597 to register half. MAC0 multiplies signed fractions. Both\r
598 scale the result and round on the way to the destination register.\r
599 */\r
600 r0.l=(a0+=r7.l*r6.l), r0.h=(a1+=r7.h*r6.h) (iss2) ; /* both\r
601 MACs process signed integer the way to the destination half-registers.\r
602 */\r
603 r3=(a1=r6.h*r7.h), r2=(a0=r6.l*r7.l) ; /* simultaneous MAC0 and\r
604 MAC1 execution, both are signed fractions, both products load\r
605 into the Accumulators */\r
606 r4=(a0=r6.l*r7.l), r5=(a1+=r6.h*r7.h) ; /* same as above, but\r
607 sum result into A1. MAC order is arbitrary. */\r
608 r7=(a1+=r3.h*r5.h), r6=(a0-=r3.l*r5.l) ; /* sum into A1, subtract\r
609 into A0 */\r
610 r1=(a1=r7.l*r4.l) (m), r0=(a0+=r7.h*r4.h) ; /* MAC1 multiplies\r
611 a signed fraction by an unsigned fraction. MAC0 multiplies two\r
612 signed fractions. */\r
613 r5=(a1=r3.h*r7.h) (m), r4=(a0+=r3.l*r7.l) (fu) ; /* MAC1 multiplies\r
614 signed fraction by unsigned fraction. MAC0 multiplies two\r
615 unsigned fractions. */\r
616 r1=(a1+=r3.h*r2.h), r0=(a0=r3.l*r2.l) (is) ; /* both MACs perform\r
617 signed integer multiplication */\r
618 r5=(a1-=r6.h*r7.h), a0+=r6.l*r7.l ; /* both MACs multiply\r
619 signed fractions. MAC0 does not copy the accum result */\r
620 r3=(a1=r6.h*r7.h) (m), a0-=r6.l*r7.l ; /* MAC1 multiplies\r
621 signed fraction by unsigned fraction and uses all 40 bits of A1.\r
622 MAC0 multiplies two signed fractions. */\r
623 r3=a1, r2=(a0+=r0.l*r1.l) (s2rnd) ; /* MAC1 moves Accumulator\r
624 to register. MAC0 multiplies signed fractions. Both scale the\r
625 result and round on the way to the destination register. */\r
626 r0=(a0+=r7.l*r6.l), r1=(a1+=r7.h*r6.h) (iss2) ; /* both MACs\r
627 process signed integer operands and scale the result on the way\r
628 to the destination registers. */\r
629 \r
630 r5 =-r3 (v) ; /* R5.H becomes the negative of R3.H and R5.L\r
631 becomes the negative of R3.L If r3 = 0x0004 7FFF the result is r5\r
632 = 0xFFFC 8001 */\r
633 \r
634 r3=pack(r4.l, r5.l) ; /* pack low / low half-words */\r
635 r1=pack(r6.l, r4.h) ; /* pack low / high half-words */\r
636 r0=pack(r2.h, r4.l) ; /* pack high / low half-words */\r
637 r5=pack(r7.h, r2.h) ; /* pack high / high half-words */\r
638 \r
639 (r1,r0) = SEARCH R2 (LE) || R2=[P0++];\r
640 /* search for the last minimum in all but the\r
641 last element of the array */\r
642 (r1,r0) = SEARCH R2 (LE);\r
643 \r
644 saa (r1:0, r3:2) || r0=[i0++] || r2=[i1++] ;\r
645 saa (r1:0, r3:2)(r) || r1=[i0++] || r3=[i1++] ;\r
646 mnop || r1 = [i0++] || r3 = [i1++] ;\r
647 r7.h=r7.l=sign(r2.h)*r3.h + sign(r2.l)*r3.l || i0+=m3 || r0=[i0]\r
648 ;\r
649 \r
650 /* Add/subtract two vector values while incrementing an Ireg and\r
651 loading a data register. */\r
652 R2 = R2 +|+ R4, R4 = R2 -|- R4 (ASR) || I0 += M0 (BREV) || R1 = [I0] ;\r
653 /* Multiply and accumulate to Accumulator while loading a data\r
654 register and storing a data register using an Ireg pointer. */\r
655 A1=R2.L*R1.L, A0=R2.H*R1.H || R2.H=W[I2++] || [I3++]=R3 ;\r
656 /* Multiply and accumulate while loading two data registers. One\r
657 load uses an Ireg pointer. */\r
658 A1+=R0.L*R2.H,A0+=R0.L*R2.L || R2.L=W[I2++] || R0=[I1--] ;\r
659 R3.H=(A1+=R0.L*R1.H), R3.L=(A0+=R0.L*R1.L) || R0=[P0++] || R1=[I0] ;\r
660 /* Pack two vector values while storing a data register using an\r
661 Ireg pointer and loading another data register. */\r
662 R1=PACK(R1.H,R0.H) || [I0++]=R0 || R2.L=W[I2++] ;\r
663 \r
664 /* Multiply-Accumulate to a Data register while incrementing an\r
665 Ireg. */\r
666 r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 ;\r
667 /* which the assembler expands into:\r
668 r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 || nop ; */\r