Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/arm/iwmmxt.md @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | f6334be47118 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 ;; ??? This file needs auditing for thumb2 | |
2 ;; Patterns for the Intel Wireless MMX technology architecture. | |
3 ;; Copyright (C) 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. | |
4 ;; Contributed by Red Hat. | |
5 | |
6 ;; This file is part of GCC. | |
7 | |
8 ;; GCC is free software; you can redistribute it and/or modify it under | |
9 ;; the terms of the GNU General Public License as published by the Free | |
10 ;; Software Foundation; either version 3, or (at your option) any later | |
11 ;; version. | |
12 | |
13 ;; GCC is distributed in the hope that it will be useful, but WITHOUT | |
14 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
15 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
16 ;; License for more details. | |
17 | |
18 ;; You should have received a copy of the GNU General Public License | |
19 ;; along with GCC; see the file COPYING3. If not see | |
20 ;; <http://www.gnu.org/licenses/>. | |
21 | |
22 ;; Integer element sizes implemented by IWMMXT. | |
23 (define_mode_iterator VMMX [V2SI V4HI V8QI]) | |
24 | |
25 ;; Integer element sizes for shifts. | |
26 (define_mode_iterator VSHFT [V4HI V2SI DI]) | |
27 | |
28 ;; Determine element size suffix from vector mode. | |
29 (define_mode_attr MMX_char [(V8QI "b") (V4HI "h") (V2SI "w") (DI "d")]) | |
30 | |
31 (define_insn "iwmmxt_iordi3" | |
32 [(set (match_operand:DI 0 "register_operand" "=y,?&r,?&r") | |
33 (ior:DI (match_operand:DI 1 "register_operand" "%y,0,r") | |
34 (match_operand:DI 2 "register_operand" "y,r,r")))] | |
35 "TARGET_REALLY_IWMMXT" | |
36 "@ | |
37 wor%?\\t%0, %1, %2 | |
38 # | |
39 #" | |
40 [(set_attr "predicable" "yes") | |
41 (set_attr "length" "4,8,8")]) | |
42 | |
43 (define_insn "iwmmxt_xordi3" | |
44 [(set (match_operand:DI 0 "register_operand" "=y,?&r,?&r") | |
45 (xor:DI (match_operand:DI 1 "register_operand" "%y,0,r") | |
46 (match_operand:DI 2 "register_operand" "y,r,r")))] | |
47 "TARGET_REALLY_IWMMXT" | |
48 "@ | |
49 wxor%?\\t%0, %1, %2 | |
50 # | |
51 #" | |
52 [(set_attr "predicable" "yes") | |
53 (set_attr "length" "4,8,8")]) | |
54 | |
55 (define_insn "iwmmxt_anddi3" | |
56 [(set (match_operand:DI 0 "register_operand" "=y,?&r,?&r") | |
57 (and:DI (match_operand:DI 1 "register_operand" "%y,0,r") | |
58 (match_operand:DI 2 "register_operand" "y,r,r")))] | |
59 "TARGET_REALLY_IWMMXT" | |
60 "@ | |
61 wand%?\\t%0, %1, %2 | |
62 # | |
63 #" | |
64 [(set_attr "predicable" "yes") | |
65 (set_attr "length" "4,8,8")]) | |
66 | |
67 (define_insn "iwmmxt_nanddi3" | |
68 [(set (match_operand:DI 0 "register_operand" "=y") | |
69 (and:DI (match_operand:DI 1 "register_operand" "y") | |
70 (not:DI (match_operand:DI 2 "register_operand" "y"))))] | |
71 "TARGET_REALLY_IWMMXT" | |
72 "wandn%?\\t%0, %1, %2" | |
73 [(set_attr "predicable" "yes")]) | |
74 | |
75 (define_insn "*iwmmxt_arm_movdi" | |
76 [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, m,y,y,yr,y,yrUy") | |
77 (match_operand:DI 1 "di_operand" "rIK,mi,r,y,yr,y,yrUy,y"))] | |
78 "TARGET_REALLY_IWMMXT | |
79 && ( register_operand (operands[0], DImode) | |
80 || register_operand (operands[1], DImode))" | |
81 "* | |
82 { | |
83 switch (which_alternative) | |
84 { | |
85 default: | |
86 return output_move_double (operands); | |
87 case 0: | |
88 return \"#\"; | |
89 case 3: | |
90 return \"wmov%?\\t%0,%1\"; | |
91 case 4: | |
92 return \"tmcrr%?\\t%0,%Q1,%R1\"; | |
93 case 5: | |
94 return \"tmrrc%?\\t%Q0,%R0,%1\"; | |
95 case 6: | |
96 return \"wldrd%?\\t%0,%1\"; | |
97 case 7: | |
98 return \"wstrd%?\\t%1,%0\"; | |
99 } | |
100 }" | |
101 [(set_attr "length" "8,8,8,4,4,4,4,4") | |
102 (set_attr "type" "*,load1,store2,*,*,*,*,*") | |
103 (set_attr "pool_range" "*,1020,*,*,*,*,*,*") | |
104 (set_attr "neg_pool_range" "*,1012,*,*,*,*,*,*")] | |
105 ) | |
106 | |
107 (define_insn "*iwmmxt_movsi_insn" | |
108 [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,rk, m,z,r,?z,Uy,z") | |
109 (match_operand:SI 1 "general_operand" "rk, I,K,mi,rk,r,z,Uy,z, z"))] | |
110 "TARGET_REALLY_IWMMXT | |
111 && ( register_operand (operands[0], SImode) | |
112 || register_operand (operands[1], SImode))" | |
113 "* | |
114 switch (which_alternative) | |
115 { | |
116 case 0: return \"mov\\t%0, %1\"; | |
117 case 1: return \"mov\\t%0, %1\"; | |
118 case 2: return \"mvn\\t%0, #%B1\"; | |
119 case 3: return \"ldr\\t%0, %1\"; | |
120 case 4: return \"str\\t%1, %0\"; | |
121 case 5: return \"tmcr\\t%0, %1\"; | |
122 case 6: return \"tmrc\\t%0, %1\"; | |
123 case 7: return arm_output_load_gr (operands); | |
124 case 8: return \"wstrw\\t%1, %0\"; | |
125 default:return \"wstrw\\t%1, [sp, #-4]!\;wldrw\\t%0, [sp], #4\\t@move CG reg\"; | |
126 }" | |
127 [(set_attr "type" "*,*,*,load1,store1,*,*,load1,store1,*") | |
128 (set_attr "length" "*,*,*,*, *,*,*, 16, *,8") | |
129 (set_attr "pool_range" "*,*,*,4096, *,*,*,1024, *,*") | |
130 (set_attr "neg_pool_range" "*,*,*,4084, *,*,*, *, 1012,*") | |
131 ;; Note - the "predicable" attribute is not allowed to have alternatives. | |
132 ;; Since the wSTRw wCx instruction is not predicable, we cannot support | |
133 ;; predicating any of the alternatives in this template. Instead, | |
134 ;; we do the predication ourselves, in cond_iwmmxt_movsi_insn. | |
135 (set_attr "predicable" "no") | |
136 ;; Also - we have to pretend that these insns clobber the condition code | |
137 ;; bits as otherwise arm_final_prescan_insn() will try to conditionalize | |
138 ;; them. | |
139 (set_attr "conds" "clob")] | |
140 ) | |
141 | |
142 ;; Because iwmmxt_movsi_insn is not predicable, we provide the | |
143 ;; cond_exec version explicitly, with appropriate constraints. | |
144 | |
145 (define_insn "*cond_iwmmxt_movsi_insn" | |
146 [(cond_exec | |
147 (match_operator 2 "arm_comparison_operator" | |
148 [(match_operand 3 "cc_register" "") | |
149 (const_int 0)]) | |
150 (set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r, m,z,r") | |
151 (match_operand:SI 1 "general_operand" "rI,K,mi,r,r,z")))] | |
152 "TARGET_REALLY_IWMMXT | |
153 && ( register_operand (operands[0], SImode) | |
154 || register_operand (operands[1], SImode))" | |
155 "* | |
156 switch (which_alternative) | |
157 { | |
158 case 0: return \"mov%?\\t%0, %1\"; | |
159 case 1: return \"mvn%?\\t%0, #%B1\"; | |
160 case 2: return \"ldr%?\\t%0, %1\"; | |
161 case 3: return \"str%?\\t%1, %0\"; | |
162 case 4: return \"tmcr%?\\t%0, %1\"; | |
163 default: return \"tmrc%?\\t%0, %1\"; | |
164 }" | |
165 [(set_attr "type" "*,*,load1,store1,*,*") | |
166 (set_attr "pool_range" "*,*,4096, *,*,*") | |
167 (set_attr "neg_pool_range" "*,*,4084, *,*,*")] | |
168 ) | |
169 | |
170 (define_insn "mov<mode>_internal" | |
171 [(set (match_operand:VMMX 0 "nonimmediate_operand" "=y,m,y,?r,?y,?r,?r,?m") | |
172 (match_operand:VMMX 1 "general_operand" "y,y,mi,y,r,r,mi,r"))] | |
173 "TARGET_REALLY_IWMMXT" | |
174 "* | |
175 switch (which_alternative) | |
176 { | |
177 case 0: return \"wmov%?\\t%0, %1\"; | |
178 case 1: return \"wstrd%?\\t%1, %0\"; | |
179 case 2: return \"wldrd%?\\t%0, %1\"; | |
180 case 3: return \"tmrrc%?\\t%Q0, %R0, %1\"; | |
181 case 4: return \"tmcrr%?\\t%0, %Q1, %R1\"; | |
182 case 5: return \"#\"; | |
183 default: return output_move_double (operands); | |
184 }" | |
185 [(set_attr "predicable" "yes") | |
186 (set_attr "length" "4, 4, 4,4,4,8, 8,8") | |
187 (set_attr "type" "*,store1,load1,*,*,*,load1,store1") | |
188 (set_attr "pool_range" "*, *, 256,*,*,*, 256,*") | |
189 (set_attr "neg_pool_range" "*, *, 244,*,*,*, 244,*")]) | |
190 | |
191 ;; Vector add/subtract | |
192 | |
193 (define_insn "*add<mode>3_iwmmxt" | |
194 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
195 (plus:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
196 (match_operand:VMMX 2 "register_operand" "y")))] | |
197 "TARGET_REALLY_IWMMXT" | |
198 "wadd<MMX_char>%?\\t%0, %1, %2" | |
199 [(set_attr "predicable" "yes")]) | |
200 | |
201 (define_insn "ssaddv8qi3" | |
202 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
203 (ss_plus:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
204 (match_operand:V8QI 2 "register_operand" "y")))] | |
205 "TARGET_REALLY_IWMMXT" | |
206 "waddbss%?\\t%0, %1, %2" | |
207 [(set_attr "predicable" "yes")]) | |
208 | |
209 (define_insn "ssaddv4hi3" | |
210 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
211 (ss_plus:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
212 (match_operand:V4HI 2 "register_operand" "y")))] | |
213 "TARGET_REALLY_IWMMXT" | |
214 "waddhss%?\\t%0, %1, %2" | |
215 [(set_attr "predicable" "yes")]) | |
216 | |
217 (define_insn "ssaddv2si3" | |
218 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
219 (ss_plus:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
220 (match_operand:V2SI 2 "register_operand" "y")))] | |
221 "TARGET_REALLY_IWMMXT" | |
222 "waddwss%?\\t%0, %1, %2" | |
223 [(set_attr "predicable" "yes")]) | |
224 | |
225 (define_insn "usaddv8qi3" | |
226 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
227 (us_plus:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
228 (match_operand:V8QI 2 "register_operand" "y")))] | |
229 "TARGET_REALLY_IWMMXT" | |
230 "waddbus%?\\t%0, %1, %2" | |
231 [(set_attr "predicable" "yes")]) | |
232 | |
233 (define_insn "usaddv4hi3" | |
234 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
235 (us_plus:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
236 (match_operand:V4HI 2 "register_operand" "y")))] | |
237 "TARGET_REALLY_IWMMXT" | |
238 "waddhus%?\\t%0, %1, %2" | |
239 [(set_attr "predicable" "yes")]) | |
240 | |
241 (define_insn "usaddv2si3" | |
242 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
243 (us_plus:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
244 (match_operand:V2SI 2 "register_operand" "y")))] | |
245 "TARGET_REALLY_IWMMXT" | |
246 "waddwus%?\\t%0, %1, %2" | |
247 [(set_attr "predicable" "yes")]) | |
248 | |
249 (define_insn "*sub<mode>3_iwmmxt" | |
250 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
251 (minus:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
252 (match_operand:VMMX 2 "register_operand" "y")))] | |
253 "TARGET_REALLY_IWMMXT" | |
254 "wsub<MMX_char>%?\\t%0, %1, %2" | |
255 [(set_attr "predicable" "yes")]) | |
256 | |
257 (define_insn "sssubv8qi3" | |
258 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
259 (ss_minus:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
260 (match_operand:V8QI 2 "register_operand" "y")))] | |
261 "TARGET_REALLY_IWMMXT" | |
262 "wsubbss%?\\t%0, %1, %2" | |
263 [(set_attr "predicable" "yes")]) | |
264 | |
265 (define_insn "sssubv4hi3" | |
266 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
267 (ss_minus:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
268 (match_operand:V4HI 2 "register_operand" "y")))] | |
269 "TARGET_REALLY_IWMMXT" | |
270 "wsubhss%?\\t%0, %1, %2" | |
271 [(set_attr "predicable" "yes")]) | |
272 | |
273 (define_insn "sssubv2si3" | |
274 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
275 (ss_minus:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
276 (match_operand:V2SI 2 "register_operand" "y")))] | |
277 "TARGET_REALLY_IWMMXT" | |
278 "wsubwss%?\\t%0, %1, %2" | |
279 [(set_attr "predicable" "yes")]) | |
280 | |
281 (define_insn "ussubv8qi3" | |
282 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
283 (us_minus:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
284 (match_operand:V8QI 2 "register_operand" "y")))] | |
285 "TARGET_REALLY_IWMMXT" | |
286 "wsubbus%?\\t%0, %1, %2" | |
287 [(set_attr "predicable" "yes")]) | |
288 | |
289 (define_insn "ussubv4hi3" | |
290 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
291 (us_minus:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
292 (match_operand:V4HI 2 "register_operand" "y")))] | |
293 "TARGET_REALLY_IWMMXT" | |
294 "wsubhus%?\\t%0, %1, %2" | |
295 [(set_attr "predicable" "yes")]) | |
296 | |
297 (define_insn "ussubv2si3" | |
298 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
299 (us_minus:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
300 (match_operand:V2SI 2 "register_operand" "y")))] | |
301 "TARGET_REALLY_IWMMXT" | |
302 "wsubwus%?\\t%0, %1, %2" | |
303 [(set_attr "predicable" "yes")]) | |
304 | |
305 (define_insn "*mulv4hi3_iwmmxt" | |
306 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
307 (mult:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
308 (match_operand:V4HI 2 "register_operand" "y")))] | |
309 "TARGET_REALLY_IWMMXT" | |
310 "wmulul%?\\t%0, %1, %2" | |
311 [(set_attr "predicable" "yes")]) | |
312 | |
313 (define_insn "smulv4hi3_highpart" | |
314 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
315 (truncate:V4HI | |
316 (lshiftrt:V4SI | |
317 (mult:V4SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y")) | |
318 (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))) | |
319 (const_int 16))))] | |
320 "TARGET_REALLY_IWMMXT" | |
321 "wmulsm%?\\t%0, %1, %2" | |
322 [(set_attr "predicable" "yes")]) | |
323 | |
324 (define_insn "umulv4hi3_highpart" | |
325 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
326 (truncate:V4HI | |
327 (lshiftrt:V4SI | |
328 (mult:V4SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y")) | |
329 (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))) | |
330 (const_int 16))))] | |
331 "TARGET_REALLY_IWMMXT" | |
332 "wmulum%?\\t%0, %1, %2" | |
333 [(set_attr "predicable" "yes")]) | |
334 | |
335 (define_insn "iwmmxt_wmacs" | |
336 [(set (match_operand:DI 0 "register_operand" "=y") | |
337 (unspec:DI [(match_operand:DI 1 "register_operand" "0") | |
338 (match_operand:V4HI 2 "register_operand" "y") | |
339 (match_operand:V4HI 3 "register_operand" "y")] UNSPEC_WMACS))] | |
340 "TARGET_REALLY_IWMMXT" | |
341 "wmacs%?\\t%0, %2, %3" | |
342 [(set_attr "predicable" "yes")]) | |
343 | |
344 (define_insn "iwmmxt_wmacsz" | |
345 [(set (match_operand:DI 0 "register_operand" "=y") | |
346 (unspec:DI [(match_operand:V4HI 1 "register_operand" "y") | |
347 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMACSZ))] | |
348 "TARGET_REALLY_IWMMXT" | |
349 "wmacsz%?\\t%0, %1, %2" | |
350 [(set_attr "predicable" "yes")]) | |
351 | |
352 (define_insn "iwmmxt_wmacu" | |
353 [(set (match_operand:DI 0 "register_operand" "=y") | |
354 (unspec:DI [(match_operand:DI 1 "register_operand" "0") | |
355 (match_operand:V4HI 2 "register_operand" "y") | |
356 (match_operand:V4HI 3 "register_operand" "y")] UNSPEC_WMACU))] | |
357 "TARGET_REALLY_IWMMXT" | |
358 "wmacu%?\\t%0, %2, %3" | |
359 [(set_attr "predicable" "yes")]) | |
360 | |
361 (define_insn "iwmmxt_wmacuz" | |
362 [(set (match_operand:DI 0 "register_operand" "=y") | |
363 (unspec:DI [(match_operand:V4HI 1 "register_operand" "y") | |
364 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMACUZ))] | |
365 "TARGET_REALLY_IWMMXT" | |
366 "wmacuz%?\\t%0, %1, %2" | |
367 [(set_attr "predicable" "yes")]) | |
368 | |
369 ;; Same as xordi3, but don't show input operands so that we don't think | |
370 ;; they are live. | |
371 (define_insn "iwmmxt_clrdi" | |
372 [(set (match_operand:DI 0 "register_operand" "=y") | |
373 (unspec:DI [(const_int 0)] UNSPEC_CLRDI))] | |
374 "TARGET_REALLY_IWMMXT" | |
375 "wxor%?\\t%0, %0, %0" | |
376 [(set_attr "predicable" "yes")]) | |
377 | |
378 ;; Seems like cse likes to generate these, so we have to support them. | |
379 | |
380 (define_insn "*iwmmxt_clrv8qi" | |
381 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
382 (const_vector:V8QI [(const_int 0) (const_int 0) | |
383 (const_int 0) (const_int 0) | |
384 (const_int 0) (const_int 0) | |
385 (const_int 0) (const_int 0)]))] | |
386 "TARGET_REALLY_IWMMXT" | |
387 "wxor%?\\t%0, %0, %0" | |
388 [(set_attr "predicable" "yes")]) | |
389 | |
390 (define_insn "*iwmmxt_clrv4hi" | |
391 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
392 (const_vector:V4HI [(const_int 0) (const_int 0) | |
393 (const_int 0) (const_int 0)]))] | |
394 "TARGET_REALLY_IWMMXT" | |
395 "wxor%?\\t%0, %0, %0" | |
396 [(set_attr "predicable" "yes")]) | |
397 | |
398 (define_insn "*iwmmxt_clrv2si" | |
399 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
400 (const_vector:V2SI [(const_int 0) (const_int 0)]))] | |
401 "TARGET_REALLY_IWMMXT" | |
402 "wxor%?\\t%0, %0, %0" | |
403 [(set_attr "predicable" "yes")]) | |
404 | |
405 ;; Unsigned averages/sum of absolute differences | |
406 | |
407 (define_insn "iwmmxt_uavgrndv8qi3" | |
408 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
409 (ashiftrt:V8QI | |
410 (plus:V8QI (plus:V8QI | |
411 (match_operand:V8QI 1 "register_operand" "y") | |
412 (match_operand:V8QI 2 "register_operand" "y")) | |
413 (const_vector:V8QI [(const_int 1) | |
414 (const_int 1) | |
415 (const_int 1) | |
416 (const_int 1) | |
417 (const_int 1) | |
418 (const_int 1) | |
419 (const_int 1) | |
420 (const_int 1)])) | |
421 (const_int 1)))] | |
422 "TARGET_REALLY_IWMMXT" | |
423 "wavg2br%?\\t%0, %1, %2" | |
424 [(set_attr "predicable" "yes")]) | |
425 | |
426 (define_insn "iwmmxt_uavgrndv4hi3" | |
427 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
428 (ashiftrt:V4HI | |
429 (plus:V4HI (plus:V4HI | |
430 (match_operand:V4HI 1 "register_operand" "y") | |
431 (match_operand:V4HI 2 "register_operand" "y")) | |
432 (const_vector:V4HI [(const_int 1) | |
433 (const_int 1) | |
434 (const_int 1) | |
435 (const_int 1)])) | |
436 (const_int 1)))] | |
437 "TARGET_REALLY_IWMMXT" | |
438 "wavg2hr%?\\t%0, %1, %2" | |
439 [(set_attr "predicable" "yes")]) | |
440 | |
441 | |
442 (define_insn "iwmmxt_uavgv8qi3" | |
443 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
444 (ashiftrt:V8QI (plus:V8QI | |
445 (match_operand:V8QI 1 "register_operand" "y") | |
446 (match_operand:V8QI 2 "register_operand" "y")) | |
447 (const_int 1)))] | |
448 "TARGET_REALLY_IWMMXT" | |
449 "wavg2b%?\\t%0, %1, %2" | |
450 [(set_attr "predicable" "yes")]) | |
451 | |
452 (define_insn "iwmmxt_uavgv4hi3" | |
453 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
454 (ashiftrt:V4HI (plus:V4HI | |
455 (match_operand:V4HI 1 "register_operand" "y") | |
456 (match_operand:V4HI 2 "register_operand" "y")) | |
457 (const_int 1)))] | |
458 "TARGET_REALLY_IWMMXT" | |
459 "wavg2h%?\\t%0, %1, %2" | |
460 [(set_attr "predicable" "yes")]) | |
461 | |
462 (define_insn "iwmmxt_psadbw" | |
463 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
464 (abs:V8QI (minus:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
465 (match_operand:V8QI 2 "register_operand" "y"))))] | |
466 "TARGET_REALLY_IWMMXT" | |
467 "psadbw%?\\t%0, %1, %2" | |
468 [(set_attr "predicable" "yes")]) | |
469 | |
470 | |
471 ;; Insert/extract/shuffle | |
472 | |
473 (define_insn "iwmmxt_tinsrb" | |
474 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
475 (vec_merge:V8QI (match_operand:V8QI 1 "register_operand" "0") | |
476 (vec_duplicate:V8QI | |
477 (truncate:QI (match_operand:SI 2 "nonimmediate_operand" "r"))) | |
478 (match_operand:SI 3 "immediate_operand" "i")))] | |
479 "TARGET_REALLY_IWMMXT" | |
480 "tinsrb%?\\t%0, %2, %3" | |
481 [(set_attr "predicable" "yes")]) | |
482 | |
483 (define_insn "iwmmxt_tinsrh" | |
484 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
485 (vec_merge:V4HI (match_operand:V4HI 1 "register_operand" "0") | |
486 (vec_duplicate:V4HI | |
487 (truncate:HI (match_operand:SI 2 "nonimmediate_operand" "r"))) | |
488 (match_operand:SI 3 "immediate_operand" "i")))] | |
489 "TARGET_REALLY_IWMMXT" | |
490 "tinsrh%?\\t%0, %2, %3" | |
491 [(set_attr "predicable" "yes")]) | |
492 | |
493 (define_insn "iwmmxt_tinsrw" | |
494 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
495 (vec_merge:V2SI (match_operand:V2SI 1 "register_operand" "0") | |
496 (vec_duplicate:V2SI | |
497 (match_operand:SI 2 "nonimmediate_operand" "r")) | |
498 (match_operand:SI 3 "immediate_operand" "i")))] | |
499 "TARGET_REALLY_IWMMXT" | |
500 "tinsrw%?\\t%0, %2, %3" | |
501 [(set_attr "predicable" "yes")]) | |
502 | |
503 (define_insn "iwmmxt_textrmub" | |
504 [(set (match_operand:SI 0 "register_operand" "=r") | |
505 (zero_extend:SI (vec_select:QI (match_operand:V8QI 1 "register_operand" "y") | |
506 (parallel | |
507 [(match_operand:SI 2 "immediate_operand" "i")]))))] | |
508 "TARGET_REALLY_IWMMXT" | |
509 "textrmub%?\\t%0, %1, %2" | |
510 [(set_attr "predicable" "yes")]) | |
511 | |
512 (define_insn "iwmmxt_textrmsb" | |
513 [(set (match_operand:SI 0 "register_operand" "=r") | |
514 (sign_extend:SI (vec_select:QI (match_operand:V8QI 1 "register_operand" "y") | |
515 (parallel | |
516 [(match_operand:SI 2 "immediate_operand" "i")]))))] | |
517 "TARGET_REALLY_IWMMXT" | |
518 "textrmsb%?\\t%0, %1, %2" | |
519 [(set_attr "predicable" "yes")]) | |
520 | |
521 (define_insn "iwmmxt_textrmuh" | |
522 [(set (match_operand:SI 0 "register_operand" "=r") | |
523 (zero_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y") | |
524 (parallel | |
525 [(match_operand:SI 2 "immediate_operand" "i")]))))] | |
526 "TARGET_REALLY_IWMMXT" | |
527 "textrmuh%?\\t%0, %1, %2" | |
528 [(set_attr "predicable" "yes")]) | |
529 | |
530 (define_insn "iwmmxt_textrmsh" | |
531 [(set (match_operand:SI 0 "register_operand" "=r") | |
532 (sign_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y") | |
533 (parallel | |
534 [(match_operand:SI 2 "immediate_operand" "i")]))))] | |
535 "TARGET_REALLY_IWMMXT" | |
536 "textrmsh%?\\t%0, %1, %2" | |
537 [(set_attr "predicable" "yes")]) | |
538 | |
539 ;; There are signed/unsigned variants of this instruction, but they are | |
540 ;; pointless. | |
541 (define_insn "iwmmxt_textrmw" | |
542 [(set (match_operand:SI 0 "register_operand" "=r") | |
543 (vec_select:SI (match_operand:V2SI 1 "register_operand" "y") | |
544 (parallel [(match_operand:SI 2 "immediate_operand" "i")])))] | |
545 "TARGET_REALLY_IWMMXT" | |
546 "textrmsw%?\\t%0, %1, %2" | |
547 [(set_attr "predicable" "yes")]) | |
548 | |
549 (define_insn "iwmmxt_wshufh" | |
550 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
551 (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y") | |
552 (match_operand:SI 2 "immediate_operand" "i")] UNSPEC_WSHUFH))] | |
553 "TARGET_REALLY_IWMMXT" | |
554 "wshufh%?\\t%0, %1, %2" | |
555 [(set_attr "predicable" "yes")]) | |
556 | |
557 ;; Mask-generating comparisons | |
558 ;; | |
559 ;; Note - you cannot use patterns like these here: | |
560 ;; | |
561 ;; (set:<vector> (match:<vector>) (<comparator>:<vector> (match:<vector>) (match:<vector>))) | |
562 ;; | |
563 ;; Because GCC will assume that the truth value (1 or 0) is installed | |
564 ;; into the entire destination vector, (with the '1' going into the least | |
565 ;; significant element of the vector). This is not how these instructions | |
566 ;; behave. | |
567 ;; | |
568 ;; Unfortunately the current patterns are illegal. They are SET insns | |
569 ;; without a SET in them. They work in most cases for ordinary code | |
570 ;; generation, but there are circumstances where they can cause gcc to fail. | |
571 ;; XXX - FIXME. | |
572 | |
573 (define_insn "eqv8qi3" | |
574 [(unspec_volatile [(match_operand:V8QI 0 "register_operand" "=y") | |
575 (match_operand:V8QI 1 "register_operand" "y") | |
576 (match_operand:V8QI 2 "register_operand" "y")] | |
577 VUNSPEC_WCMP_EQ)] | |
578 "TARGET_REALLY_IWMMXT" | |
579 "wcmpeqb%?\\t%0, %1, %2" | |
580 [(set_attr "predicable" "yes")]) | |
581 | |
582 (define_insn "eqv4hi3" | |
583 [(unspec_volatile [(match_operand:V4HI 0 "register_operand" "=y") | |
584 (match_operand:V4HI 1 "register_operand" "y") | |
585 (match_operand:V4HI 2 "register_operand" "y")] | |
586 VUNSPEC_WCMP_EQ)] | |
587 "TARGET_REALLY_IWMMXT" | |
588 "wcmpeqh%?\\t%0, %1, %2" | |
589 [(set_attr "predicable" "yes")]) | |
590 | |
591 (define_insn "eqv2si3" | |
592 [(unspec_volatile:V2SI [(match_operand:V2SI 0 "register_operand" "=y") | |
593 (match_operand:V2SI 1 "register_operand" "y") | |
594 (match_operand:V2SI 2 "register_operand" "y")] | |
595 VUNSPEC_WCMP_EQ)] | |
596 "TARGET_REALLY_IWMMXT" | |
597 "wcmpeqw%?\\t%0, %1, %2" | |
598 [(set_attr "predicable" "yes")]) | |
599 | |
600 (define_insn "gtuv8qi3" | |
601 [(unspec_volatile [(match_operand:V8QI 0 "register_operand" "=y") | |
602 (match_operand:V8QI 1 "register_operand" "y") | |
603 (match_operand:V8QI 2 "register_operand" "y")] | |
604 VUNSPEC_WCMP_GTU)] | |
605 "TARGET_REALLY_IWMMXT" | |
606 "wcmpgtub%?\\t%0, %1, %2" | |
607 [(set_attr "predicable" "yes")]) | |
608 | |
609 (define_insn "gtuv4hi3" | |
610 [(unspec_volatile [(match_operand:V4HI 0 "register_operand" "=y") | |
611 (match_operand:V4HI 1 "register_operand" "y") | |
612 (match_operand:V4HI 2 "register_operand" "y")] | |
613 VUNSPEC_WCMP_GTU)] | |
614 "TARGET_REALLY_IWMMXT" | |
615 "wcmpgtuh%?\\t%0, %1, %2" | |
616 [(set_attr "predicable" "yes")]) | |
617 | |
618 (define_insn "gtuv2si3" | |
619 [(unspec_volatile [(match_operand:V2SI 0 "register_operand" "=y") | |
620 (match_operand:V2SI 1 "register_operand" "y") | |
621 (match_operand:V2SI 2 "register_operand" "y")] | |
622 VUNSPEC_WCMP_GTU)] | |
623 "TARGET_REALLY_IWMMXT" | |
624 "wcmpgtuw%?\\t%0, %1, %2" | |
625 [(set_attr "predicable" "yes")]) | |
626 | |
627 (define_insn "gtv8qi3" | |
628 [(unspec_volatile [(match_operand:V8QI 0 "register_operand" "=y") | |
629 (match_operand:V8QI 1 "register_operand" "y") | |
630 (match_operand:V8QI 2 "register_operand" "y")] | |
631 VUNSPEC_WCMP_GT)] | |
632 "TARGET_REALLY_IWMMXT" | |
633 "wcmpgtsb%?\\t%0, %1, %2" | |
634 [(set_attr "predicable" "yes")]) | |
635 | |
636 (define_insn "gtv4hi3" | |
637 [(unspec_volatile [(match_operand:V4HI 0 "register_operand" "=y") | |
638 (match_operand:V4HI 1 "register_operand" "y") | |
639 (match_operand:V4HI 2 "register_operand" "y")] | |
640 VUNSPEC_WCMP_GT)] | |
641 "TARGET_REALLY_IWMMXT" | |
642 "wcmpgtsh%?\\t%0, %1, %2" | |
643 [(set_attr "predicable" "yes")]) | |
644 | |
645 (define_insn "gtv2si3" | |
646 [(unspec_volatile [(match_operand:V2SI 0 "register_operand" "=y") | |
647 (match_operand:V2SI 1 "register_operand" "y") | |
648 (match_operand:V2SI 2 "register_operand" "y")] | |
649 VUNSPEC_WCMP_GT)] | |
650 "TARGET_REALLY_IWMMXT" | |
651 "wcmpgtsw%?\\t%0, %1, %2" | |
652 [(set_attr "predicable" "yes")]) | |
653 | |
654 ;; Max/min insns | |
655 | |
656 (define_insn "*smax<mode>3_iwmmxt" | |
657 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
658 (smax:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
659 (match_operand:VMMX 2 "register_operand" "y")))] | |
660 "TARGET_REALLY_IWMMXT" | |
661 "wmaxs<MMX_char>%?\\t%0, %1, %2" | |
662 [(set_attr "predicable" "yes")]) | |
663 | |
664 (define_insn "*umax<mode>3_iwmmxt" | |
665 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
666 (umax:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
667 (match_operand:VMMX 2 "register_operand" "y")))] | |
668 "TARGET_REALLY_IWMMXT" | |
669 "wmaxu<MMX_char>%?\\t%0, %1, %2" | |
670 [(set_attr "predicable" "yes")]) | |
671 | |
672 (define_insn "*smin<mode>3_iwmmxt" | |
673 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
674 (smin:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
675 (match_operand:VMMX 2 "register_operand" "y")))] | |
676 "TARGET_REALLY_IWMMXT" | |
677 "wmins<MMX_char>%?\\t%0, %1, %2" | |
678 [(set_attr "predicable" "yes")]) | |
679 | |
680 (define_insn "*umin<mode>3_iwmmxt" | |
681 [(set (match_operand:VMMX 0 "register_operand" "=y") | |
682 (umin:VMMX (match_operand:VMMX 1 "register_operand" "y") | |
683 (match_operand:VMMX 2 "register_operand" "y")))] | |
684 "TARGET_REALLY_IWMMXT" | |
685 "wminu<MMX_char>%?\\t%0, %1, %2" | |
686 [(set_attr "predicable" "yes")]) | |
687 | |
688 ;; Pack/unpack insns. | |
689 | |
690 (define_insn "iwmmxt_wpackhss" | |
691 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
692 (vec_concat:V8QI | |
693 (ss_truncate:V4QI (match_operand:V4HI 1 "register_operand" "y")) | |
694 (ss_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] | |
695 "TARGET_REALLY_IWMMXT" | |
696 "wpackhss%?\\t%0, %1, %2" | |
697 [(set_attr "predicable" "yes")]) | |
698 | |
699 (define_insn "iwmmxt_wpackwss" | |
700 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
701 (vec_concat:V4HI | |
702 (ss_truncate:V2HI (match_operand:V2SI 1 "register_operand" "y")) | |
703 (ss_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))] | |
704 "TARGET_REALLY_IWMMXT" | |
705 "wpackwss%?\\t%0, %1, %2" | |
706 [(set_attr "predicable" "yes")]) | |
707 | |
708 (define_insn "iwmmxt_wpackdss" | |
709 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
710 (vec_concat:V2SI | |
711 (ss_truncate:SI (match_operand:DI 1 "register_operand" "y")) | |
712 (ss_truncate:SI (match_operand:DI 2 "register_operand" "y"))))] | |
713 "TARGET_REALLY_IWMMXT" | |
714 "wpackdss%?\\t%0, %1, %2" | |
715 [(set_attr "predicable" "yes")]) | |
716 | |
717 (define_insn "iwmmxt_wpackhus" | |
718 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
719 (vec_concat:V8QI | |
720 (us_truncate:V4QI (match_operand:V4HI 1 "register_operand" "y")) | |
721 (us_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] | |
722 "TARGET_REALLY_IWMMXT" | |
723 "wpackhus%?\\t%0, %1, %2" | |
724 [(set_attr "predicable" "yes")]) | |
725 | |
726 (define_insn "iwmmxt_wpackwus" | |
727 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
728 (vec_concat:V4HI | |
729 (us_truncate:V2HI (match_operand:V2SI 1 "register_operand" "y")) | |
730 (us_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))] | |
731 "TARGET_REALLY_IWMMXT" | |
732 "wpackwus%?\\t%0, %1, %2" | |
733 [(set_attr "predicable" "yes")]) | |
734 | |
735 (define_insn "iwmmxt_wpackdus" | |
736 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
737 (vec_concat:V2SI | |
738 (us_truncate:SI (match_operand:DI 1 "register_operand" "y")) | |
739 (us_truncate:SI (match_operand:DI 2 "register_operand" "y"))))] | |
740 "TARGET_REALLY_IWMMXT" | |
741 "wpackdus%?\\t%0, %1, %2" | |
742 [(set_attr "predicable" "yes")]) | |
743 | |
744 | |
745 (define_insn "iwmmxt_wunpckihb" | |
746 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
747 (vec_merge:V8QI | |
748 (vec_select:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
749 (parallel [(const_int 4) | |
750 (const_int 0) | |
751 (const_int 5) | |
752 (const_int 1) | |
753 (const_int 6) | |
754 (const_int 2) | |
755 (const_int 7) | |
756 (const_int 3)])) | |
757 (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "y") | |
758 (parallel [(const_int 0) | |
759 (const_int 4) | |
760 (const_int 1) | |
761 (const_int 5) | |
762 (const_int 2) | |
763 (const_int 6) | |
764 (const_int 3) | |
765 (const_int 7)])) | |
766 (const_int 85)))] | |
767 "TARGET_REALLY_IWMMXT" | |
768 "wunpckihb%?\\t%0, %1, %2" | |
769 [(set_attr "predicable" "yes")]) | |
770 | |
771 (define_insn "iwmmxt_wunpckihh" | |
772 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
773 (vec_merge:V4HI | |
774 (vec_select:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
775 (parallel [(const_int 0) | |
776 (const_int 2) | |
777 (const_int 1) | |
778 (const_int 3)])) | |
779 (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y") | |
780 (parallel [(const_int 2) | |
781 (const_int 0) | |
782 (const_int 3) | |
783 (const_int 1)])) | |
784 (const_int 5)))] | |
785 "TARGET_REALLY_IWMMXT" | |
786 "wunpckihh%?\\t%0, %1, %2" | |
787 [(set_attr "predicable" "yes")]) | |
788 | |
789 (define_insn "iwmmxt_wunpckihw" | |
790 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
791 (vec_merge:V2SI | |
792 (vec_select:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
793 (parallel [(const_int 0) | |
794 (const_int 1)])) | |
795 (vec_select:V2SI (match_operand:V2SI 2 "register_operand" "y") | |
796 (parallel [(const_int 1) | |
797 (const_int 0)])) | |
798 (const_int 1)))] | |
799 "TARGET_REALLY_IWMMXT" | |
800 "wunpckihw%?\\t%0, %1, %2" | |
801 [(set_attr "predicable" "yes")]) | |
802 | |
803 (define_insn "iwmmxt_wunpckilb" | |
804 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
805 (vec_merge:V8QI | |
806 (vec_select:V8QI (match_operand:V8QI 1 "register_operand" "y") | |
807 (parallel [(const_int 0) | |
808 (const_int 4) | |
809 (const_int 1) | |
810 (const_int 5) | |
811 (const_int 2) | |
812 (const_int 6) | |
813 (const_int 3) | |
814 (const_int 7)])) | |
815 (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "y") | |
816 (parallel [(const_int 4) | |
817 (const_int 0) | |
818 (const_int 5) | |
819 (const_int 1) | |
820 (const_int 6) | |
821 (const_int 2) | |
822 (const_int 7) | |
823 (const_int 3)])) | |
824 (const_int 85)))] | |
825 "TARGET_REALLY_IWMMXT" | |
826 "wunpckilb%?\\t%0, %1, %2" | |
827 [(set_attr "predicable" "yes")]) | |
828 | |
829 (define_insn "iwmmxt_wunpckilh" | |
830 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
831 (vec_merge:V4HI | |
832 (vec_select:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
833 (parallel [(const_int 2) | |
834 (const_int 0) | |
835 (const_int 3) | |
836 (const_int 1)])) | |
837 (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y") | |
838 (parallel [(const_int 0) | |
839 (const_int 2) | |
840 (const_int 1) | |
841 (const_int 3)])) | |
842 (const_int 5)))] | |
843 "TARGET_REALLY_IWMMXT" | |
844 "wunpckilh%?\\t%0, %1, %2" | |
845 [(set_attr "predicable" "yes")]) | |
846 | |
847 (define_insn "iwmmxt_wunpckilw" | |
848 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
849 (vec_merge:V2SI | |
850 (vec_select:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
851 (parallel [(const_int 1) | |
852 (const_int 0)])) | |
853 (vec_select:V2SI (match_operand:V2SI 2 "register_operand" "y") | |
854 (parallel [(const_int 0) | |
855 (const_int 1)])) | |
856 (const_int 1)))] | |
857 "TARGET_REALLY_IWMMXT" | |
858 "wunpckilw%?\\t%0, %1, %2" | |
859 [(set_attr "predicable" "yes")]) | |
860 | |
861 (define_insn "iwmmxt_wunpckehub" | |
862 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
863 (zero_extend:V4HI | |
864 (vec_select:V4QI (match_operand:V8QI 1 "register_operand" "y") | |
865 (parallel [(const_int 4) (const_int 5) | |
866 (const_int 6) (const_int 7)]))))] | |
867 "TARGET_REALLY_IWMMXT" | |
868 "wunpckehub%?\\t%0, %1" | |
869 [(set_attr "predicable" "yes")]) | |
870 | |
871 (define_insn "iwmmxt_wunpckehuh" | |
872 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
873 (zero_extend:V2SI | |
874 (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "y") | |
875 (parallel [(const_int 2) (const_int 3)]))))] | |
876 "TARGET_REALLY_IWMMXT" | |
877 "wunpckehuh%?\\t%0, %1" | |
878 [(set_attr "predicable" "yes")]) | |
879 | |
880 (define_insn "iwmmxt_wunpckehuw" | |
881 [(set (match_operand:DI 0 "register_operand" "=y") | |
882 (zero_extend:DI | |
883 (vec_select:SI (match_operand:V2SI 1 "register_operand" "y") | |
884 (parallel [(const_int 1)]))))] | |
885 "TARGET_REALLY_IWMMXT" | |
886 "wunpckehuw%?\\t%0, %1" | |
887 [(set_attr "predicable" "yes")]) | |
888 | |
889 (define_insn "iwmmxt_wunpckehsb" | |
890 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
891 (sign_extend:V4HI | |
892 (vec_select:V4QI (match_operand:V8QI 1 "register_operand" "y") | |
893 (parallel [(const_int 4) (const_int 5) | |
894 (const_int 6) (const_int 7)]))))] | |
895 "TARGET_REALLY_IWMMXT" | |
896 "wunpckehsb%?\\t%0, %1" | |
897 [(set_attr "predicable" "yes")]) | |
898 | |
899 (define_insn "iwmmxt_wunpckehsh" | |
900 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
901 (sign_extend:V2SI | |
902 (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "y") | |
903 (parallel [(const_int 2) (const_int 3)]))))] | |
904 "TARGET_REALLY_IWMMXT" | |
905 "wunpckehsh%?\\t%0, %1" | |
906 [(set_attr "predicable" "yes")]) | |
907 | |
908 (define_insn "iwmmxt_wunpckehsw" | |
909 [(set (match_operand:DI 0 "register_operand" "=y") | |
910 (sign_extend:DI | |
911 (vec_select:SI (match_operand:V2SI 1 "register_operand" "y") | |
912 (parallel [(const_int 1)]))))] | |
913 "TARGET_REALLY_IWMMXT" | |
914 "wunpckehsw%?\\t%0, %1" | |
915 [(set_attr "predicable" "yes")]) | |
916 | |
917 (define_insn "iwmmxt_wunpckelub" | |
918 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
919 (zero_extend:V4HI | |
920 (vec_select:V4QI (match_operand:V8QI 1 "register_operand" "y") | |
921 (parallel [(const_int 0) (const_int 1) | |
922 (const_int 2) (const_int 3)]))))] | |
923 "TARGET_REALLY_IWMMXT" | |
924 "wunpckelub%?\\t%0, %1" | |
925 [(set_attr "predicable" "yes")]) | |
926 | |
927 (define_insn "iwmmxt_wunpckeluh" | |
928 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
929 (zero_extend:V2SI | |
930 (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "y") | |
931 (parallel [(const_int 0) (const_int 1)]))))] | |
932 "TARGET_REALLY_IWMMXT" | |
933 "wunpckeluh%?\\t%0, %1" | |
934 [(set_attr "predicable" "yes")]) | |
935 | |
936 (define_insn "iwmmxt_wunpckeluw" | |
937 [(set (match_operand:DI 0 "register_operand" "=y") | |
938 (zero_extend:DI | |
939 (vec_select:SI (match_operand:V2SI 1 "register_operand" "y") | |
940 (parallel [(const_int 0)]))))] | |
941 "TARGET_REALLY_IWMMXT" | |
942 "wunpckeluw%?\\t%0, %1" | |
943 [(set_attr "predicable" "yes")]) | |
944 | |
945 (define_insn "iwmmxt_wunpckelsb" | |
946 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
947 (sign_extend:V4HI | |
948 (vec_select:V4QI (match_operand:V8QI 1 "register_operand" "y") | |
949 (parallel [(const_int 0) (const_int 1) | |
950 (const_int 2) (const_int 3)]))))] | |
951 "TARGET_REALLY_IWMMXT" | |
952 "wunpckelsb%?\\t%0, %1" | |
953 [(set_attr "predicable" "yes")]) | |
954 | |
955 (define_insn "iwmmxt_wunpckelsh" | |
956 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
957 (sign_extend:V2SI | |
958 (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "y") | |
959 (parallel [(const_int 0) (const_int 1)]))))] | |
960 "TARGET_REALLY_IWMMXT" | |
961 "wunpckelsh%?\\t%0, %1" | |
962 [(set_attr "predicable" "yes")]) | |
963 | |
964 (define_insn "iwmmxt_wunpckelsw" | |
965 [(set (match_operand:DI 0 "register_operand" "=y") | |
966 (sign_extend:DI | |
967 (vec_select:SI (match_operand:V2SI 1 "register_operand" "y") | |
968 (parallel [(const_int 0)]))))] | |
969 "TARGET_REALLY_IWMMXT" | |
970 "wunpckelsw%?\\t%0, %1" | |
971 [(set_attr "predicable" "yes")]) | |
972 | |
973 ;; Shifts | |
974 | |
975 (define_insn "rorv4hi3" | |
976 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
977 (rotatert:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
978 (match_operand:SI 2 "register_operand" "z")))] | |
979 "TARGET_REALLY_IWMMXT" | |
980 "wrorhg%?\\t%0, %1, %2" | |
981 [(set_attr "predicable" "yes")]) | |
982 | |
983 (define_insn "rorv2si3" | |
984 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
985 (rotatert:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
986 (match_operand:SI 2 "register_operand" "z")))] | |
987 "TARGET_REALLY_IWMMXT" | |
988 "wrorwg%?\\t%0, %1, %2" | |
989 [(set_attr "predicable" "yes")]) | |
990 | |
991 (define_insn "rordi3" | |
992 [(set (match_operand:DI 0 "register_operand" "=y") | |
993 (rotatert:DI (match_operand:DI 1 "register_operand" "y") | |
994 (match_operand:SI 2 "register_operand" "z")))] | |
995 "TARGET_REALLY_IWMMXT" | |
996 "wrordg%?\\t%0, %1, %2" | |
997 [(set_attr "predicable" "yes")]) | |
998 | |
999 (define_insn "ashr<mode>3_iwmmxt" | |
1000 [(set (match_operand:VSHFT 0 "register_operand" "=y") | |
1001 (ashiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y") | |
1002 (match_operand:SI 2 "register_operand" "z")))] | |
1003 "TARGET_REALLY_IWMMXT" | |
1004 "wsra<MMX_char>g%?\\t%0, %1, %2" | |
1005 [(set_attr "predicable" "yes")]) | |
1006 | |
1007 (define_insn "lshr<mode>3_iwmmxt" | |
1008 [(set (match_operand:VSHFT 0 "register_operand" "=y") | |
1009 (lshiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y") | |
1010 (match_operand:SI 2 "register_operand" "z")))] | |
1011 "TARGET_REALLY_IWMMXT" | |
1012 "wsrl<MMX_char>g%?\\t%0, %1, %2" | |
1013 [(set_attr "predicable" "yes")]) | |
1014 | |
1015 (define_insn "ashl<mode>3_iwmmxt" | |
1016 [(set (match_operand:VSHFT 0 "register_operand" "=y") | |
1017 (ashift:VSHFT (match_operand:VSHFT 1 "register_operand" "y") | |
1018 (match_operand:SI 2 "register_operand" "z")))] | |
1019 "TARGET_REALLY_IWMMXT" | |
1020 "wsll<MMX_char>g%?\\t%0, %1, %2" | |
1021 [(set_attr "predicable" "yes")]) | |
1022 | |
1023 (define_insn "rorv4hi3_di" | |
1024 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1025 (rotatert:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
1026 (match_operand:DI 2 "register_operand" "y")))] | |
1027 "TARGET_REALLY_IWMMXT" | |
1028 "wrorh%?\\t%0, %1, %2" | |
1029 [(set_attr "predicable" "yes")]) | |
1030 | |
1031 (define_insn "rorv2si3_di" | |
1032 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
1033 (rotatert:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
1034 (match_operand:DI 2 "register_operand" "y")))] | |
1035 "TARGET_REALLY_IWMMXT" | |
1036 "wrorw%?\\t%0, %1, %2" | |
1037 [(set_attr "predicable" "yes")]) | |
1038 | |
1039 (define_insn "rordi3_di" | |
1040 [(set (match_operand:DI 0 "register_operand" "=y") | |
1041 (rotatert:DI (match_operand:DI 1 "register_operand" "y") | |
1042 (match_operand:DI 2 "register_operand" "y")))] | |
1043 "TARGET_REALLY_IWMMXT" | |
1044 "wrord%?\\t%0, %1, %2" | |
1045 [(set_attr "predicable" "yes")]) | |
1046 | |
1047 (define_insn "ashrv4hi3_di" | |
1048 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1049 (ashiftrt:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
1050 (match_operand:DI 2 "register_operand" "y")))] | |
1051 "TARGET_REALLY_IWMMXT" | |
1052 "wsrah%?\\t%0, %1, %2" | |
1053 [(set_attr "predicable" "yes")]) | |
1054 | |
1055 (define_insn "ashrv2si3_di" | |
1056 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
1057 (ashiftrt:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
1058 (match_operand:DI 2 "register_operand" "y")))] | |
1059 "TARGET_REALLY_IWMMXT" | |
1060 "wsraw%?\\t%0, %1, %2" | |
1061 [(set_attr "predicable" "yes")]) | |
1062 | |
1063 (define_insn "ashrdi3_di" | |
1064 [(set (match_operand:DI 0 "register_operand" "=y") | |
1065 (ashiftrt:DI (match_operand:DI 1 "register_operand" "y") | |
1066 (match_operand:DI 2 "register_operand" "y")))] | |
1067 "TARGET_REALLY_IWMMXT" | |
1068 "wsrad%?\\t%0, %1, %2" | |
1069 [(set_attr "predicable" "yes")]) | |
1070 | |
1071 (define_insn "lshrv4hi3_di" | |
1072 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1073 (lshiftrt:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
1074 (match_operand:DI 2 "register_operand" "y")))] | |
1075 "TARGET_REALLY_IWMMXT" | |
1076 "wsrlh%?\\t%0, %1, %2" | |
1077 [(set_attr "predicable" "yes")]) | |
1078 | |
1079 (define_insn "lshrv2si3_di" | |
1080 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
1081 (lshiftrt:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
1082 (match_operand:DI 2 "register_operand" "y")))] | |
1083 "TARGET_REALLY_IWMMXT" | |
1084 "wsrlw%?\\t%0, %1, %2" | |
1085 [(set_attr "predicable" "yes")]) | |
1086 | |
1087 (define_insn "lshrdi3_di" | |
1088 [(set (match_operand:DI 0 "register_operand" "=y") | |
1089 (lshiftrt:DI (match_operand:DI 1 "register_operand" "y") | |
1090 (match_operand:DI 2 "register_operand" "y")))] | |
1091 "TARGET_REALLY_IWMMXT" | |
1092 "wsrld%?\\t%0, %1, %2" | |
1093 [(set_attr "predicable" "yes")]) | |
1094 | |
1095 (define_insn "ashlv4hi3_di" | |
1096 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1097 (ashift:V4HI (match_operand:V4HI 1 "register_operand" "y") | |
1098 (match_operand:DI 2 "register_operand" "y")))] | |
1099 "TARGET_REALLY_IWMMXT" | |
1100 "wsllh%?\\t%0, %1, %2" | |
1101 [(set_attr "predicable" "yes")]) | |
1102 | |
1103 (define_insn "ashlv2si3_di" | |
1104 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
1105 (ashift:V2SI (match_operand:V2SI 1 "register_operand" "y") | |
1106 (match_operand:DI 2 "register_operand" "y")))] | |
1107 "TARGET_REALLY_IWMMXT" | |
1108 "wsllw%?\\t%0, %1, %2" | |
1109 [(set_attr "predicable" "yes")]) | |
1110 | |
1111 (define_insn "ashldi3_di" | |
1112 [(set (match_operand:DI 0 "register_operand" "=y") | |
1113 (ashift:DI (match_operand:DI 1 "register_operand" "y") | |
1114 (match_operand:DI 2 "register_operand" "y")))] | |
1115 "TARGET_REALLY_IWMMXT" | |
1116 "wslld%?\\t%0, %1, %2" | |
1117 [(set_attr "predicable" "yes")]) | |
1118 | |
1119 (define_insn "iwmmxt_wmadds" | |
1120 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1121 (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y") | |
1122 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMADDS))] | |
1123 "TARGET_REALLY_IWMMXT" | |
1124 "wmadds%?\\t%0, %1, %2" | |
1125 [(set_attr "predicable" "yes")]) | |
1126 | |
1127 (define_insn "iwmmxt_wmaddu" | |
1128 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1129 (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y") | |
1130 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMADDU))] | |
1131 "TARGET_REALLY_IWMMXT" | |
1132 "wmaddu%?\\t%0, %1, %2" | |
1133 [(set_attr "predicable" "yes")]) | |
1134 | |
1135 (define_insn "iwmmxt_tmia" | |
1136 [(set (match_operand:DI 0 "register_operand" "=y") | |
1137 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1138 (mult:DI (sign_extend:DI | |
1139 (match_operand:SI 2 "register_operand" "r")) | |
1140 (sign_extend:DI | |
1141 (match_operand:SI 3 "register_operand" "r")))))] | |
1142 "TARGET_REALLY_IWMMXT" | |
1143 "tmia%?\\t%0, %2, %3" | |
1144 [(set_attr "predicable" "yes")]) | |
1145 | |
1146 (define_insn "iwmmxt_tmiaph" | |
1147 [(set (match_operand:DI 0 "register_operand" "=y") | |
1148 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1149 (plus:DI | |
1150 (mult:DI (sign_extend:DI | |
1151 (truncate:HI (match_operand:SI 2 "register_operand" "r"))) | |
1152 (sign_extend:DI | |
1153 (truncate:HI (match_operand:SI 3 "register_operand" "r")))) | |
1154 (mult:DI (sign_extend:DI | |
1155 (truncate:HI (ashiftrt:SI (match_dup 2) (const_int 16)))) | |
1156 (sign_extend:DI | |
1157 (truncate:HI (ashiftrt:SI (match_dup 3) (const_int 16))))))))] | |
1158 "TARGET_REALLY_IWMMXT" | |
1159 "tmiaph%?\\t%0, %2, %3" | |
1160 [(set_attr "predicable" "yes")]) | |
1161 | |
1162 (define_insn "iwmmxt_tmiabb" | |
1163 [(set (match_operand:DI 0 "register_operand" "=y") | |
1164 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1165 (mult:DI (sign_extend:DI | |
1166 (truncate:HI (match_operand:SI 2 "register_operand" "r"))) | |
1167 (sign_extend:DI | |
1168 (truncate:HI (match_operand:SI 3 "register_operand" "r"))))))] | |
1169 "TARGET_REALLY_IWMMXT" | |
1170 "tmiabb%?\\t%0, %2, %3" | |
1171 [(set_attr "predicable" "yes")]) | |
1172 | |
1173 (define_insn "iwmmxt_tmiatb" | |
1174 [(set (match_operand:DI 0 "register_operand" "=y") | |
1175 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1176 (mult:DI (sign_extend:DI | |
1177 (truncate:HI (ashiftrt:SI | |
1178 (match_operand:SI 2 "register_operand" "r") | |
1179 (const_int 16)))) | |
1180 (sign_extend:DI | |
1181 (truncate:HI (match_operand:SI 3 "register_operand" "r"))))))] | |
1182 "TARGET_REALLY_IWMMXT" | |
1183 "tmiatb%?\\t%0, %2, %3" | |
1184 [(set_attr "predicable" "yes")]) | |
1185 | |
1186 (define_insn "iwmmxt_tmiabt" | |
1187 [(set (match_operand:DI 0 "register_operand" "=y") | |
1188 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1189 (mult:DI (sign_extend:DI | |
1190 (truncate:HI (match_operand:SI 2 "register_operand" "r"))) | |
1191 (sign_extend:DI | |
1192 (truncate:HI (ashiftrt:SI | |
1193 (match_operand:SI 3 "register_operand" "r") | |
1194 (const_int 16)))))))] | |
1195 "TARGET_REALLY_IWMMXT" | |
1196 "tmiabt%?\\t%0, %2, %3" | |
1197 [(set_attr "predicable" "yes")]) | |
1198 | |
1199 (define_insn "iwmmxt_tmiatt" | |
1200 [(set (match_operand:DI 0 "register_operand" "=y") | |
1201 (plus:DI (match_operand:DI 1 "register_operand" "0") | |
1202 (mult:DI (sign_extend:DI | |
1203 (truncate:HI (ashiftrt:SI | |
1204 (match_operand:SI 2 "register_operand" "r") | |
1205 (const_int 16)))) | |
1206 (sign_extend:DI | |
1207 (truncate:HI (ashiftrt:SI | |
1208 (match_operand:SI 3 "register_operand" "r") | |
1209 (const_int 16)))))))] | |
1210 "TARGET_REALLY_IWMMXT" | |
1211 "tmiatt%?\\t%0, %2, %3" | |
1212 [(set_attr "predicable" "yes")]) | |
1213 | |
1214 (define_insn "iwmmxt_tbcstqi" | |
1215 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
1216 (vec_duplicate:V8QI (match_operand:QI 1 "register_operand" "r")))] | |
1217 "TARGET_REALLY_IWMMXT" | |
1218 "tbcstb%?\\t%0, %1" | |
1219 [(set_attr "predicable" "yes")]) | |
1220 | |
1221 (define_insn "iwmmxt_tbcsthi" | |
1222 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1223 (vec_duplicate:V4HI (match_operand:HI 1 "register_operand" "r")))] | |
1224 "TARGET_REALLY_IWMMXT" | |
1225 "tbcsth%?\\t%0, %1" | |
1226 [(set_attr "predicable" "yes")]) | |
1227 | |
1228 (define_insn "iwmmxt_tbcstsi" | |
1229 [(set (match_operand:V2SI 0 "register_operand" "=y") | |
1230 (vec_duplicate:V2SI (match_operand:SI 1 "register_operand" "r")))] | |
1231 "TARGET_REALLY_IWMMXT" | |
1232 "tbcstw%?\\t%0, %1" | |
1233 [(set_attr "predicable" "yes")]) | |
1234 | |
1235 (define_insn "iwmmxt_tmovmskb" | |
1236 [(set (match_operand:SI 0 "register_operand" "=r") | |
1237 (unspec:SI [(match_operand:V8QI 1 "register_operand" "y")] UNSPEC_TMOVMSK))] | |
1238 "TARGET_REALLY_IWMMXT" | |
1239 "tmovmskb%?\\t%0, %1" | |
1240 [(set_attr "predicable" "yes")]) | |
1241 | |
1242 (define_insn "iwmmxt_tmovmskh" | |
1243 [(set (match_operand:SI 0 "register_operand" "=r") | |
1244 (unspec:SI [(match_operand:V4HI 1 "register_operand" "y")] UNSPEC_TMOVMSK))] | |
1245 "TARGET_REALLY_IWMMXT" | |
1246 "tmovmskh%?\\t%0, %1" | |
1247 [(set_attr "predicable" "yes")]) | |
1248 | |
1249 (define_insn "iwmmxt_tmovmskw" | |
1250 [(set (match_operand:SI 0 "register_operand" "=r") | |
1251 (unspec:SI [(match_operand:V2SI 1 "register_operand" "y")] UNSPEC_TMOVMSK))] | |
1252 "TARGET_REALLY_IWMMXT" | |
1253 "tmovmskw%?\\t%0, %1" | |
1254 [(set_attr "predicable" "yes")]) | |
1255 | |
1256 (define_insn "iwmmxt_waccb" | |
1257 [(set (match_operand:DI 0 "register_operand" "=y") | |
1258 (unspec:DI [(match_operand:V8QI 1 "register_operand" "y")] UNSPEC_WACC))] | |
1259 "TARGET_REALLY_IWMMXT" | |
1260 "waccb%?\\t%0, %1" | |
1261 [(set_attr "predicable" "yes")]) | |
1262 | |
1263 (define_insn "iwmmxt_wacch" | |
1264 [(set (match_operand:DI 0 "register_operand" "=y") | |
1265 (unspec:DI [(match_operand:V4HI 1 "register_operand" "y")] UNSPEC_WACC))] | |
1266 "TARGET_REALLY_IWMMXT" | |
1267 "wacch%?\\t%0, %1" | |
1268 [(set_attr "predicable" "yes")]) | |
1269 | |
1270 (define_insn "iwmmxt_waccw" | |
1271 [(set (match_operand:DI 0 "register_operand" "=y") | |
1272 (unspec:DI [(match_operand:V2SI 1 "register_operand" "y")] UNSPEC_WACC))] | |
1273 "TARGET_REALLY_IWMMXT" | |
1274 "waccw%?\\t%0, %1" | |
1275 [(set_attr "predicable" "yes")]) | |
1276 | |
1277 (define_insn "iwmmxt_walign" | |
1278 [(set (match_operand:V8QI 0 "register_operand" "=y,y") | |
1279 (subreg:V8QI (ashiftrt:TI | |
1280 (subreg:TI (vec_concat:V16QI | |
1281 (match_operand:V8QI 1 "register_operand" "y,y") | |
1282 (match_operand:V8QI 2 "register_operand" "y,y")) 0) | |
1283 (mult:SI | |
1284 (match_operand:SI 3 "nonmemory_operand" "i,z") | |
1285 (const_int 8))) 0))] | |
1286 "TARGET_REALLY_IWMMXT" | |
1287 "@ | |
1288 waligni%?\\t%0, %1, %2, %3 | |
1289 walignr%U3%?\\t%0, %1, %2" | |
1290 [(set_attr "predicable" "yes")]) | |
1291 | |
1292 (define_insn "iwmmxt_tmrc" | |
1293 [(set (match_operand:SI 0 "register_operand" "=r") | |
1294 (unspec_volatile:SI [(match_operand:SI 1 "immediate_operand" "i")] | |
1295 VUNSPEC_TMRC))] | |
1296 "TARGET_REALLY_IWMMXT" | |
1297 "tmrc%?\\t%0, %w1" | |
1298 [(set_attr "predicable" "yes")]) | |
1299 | |
1300 (define_insn "iwmmxt_tmcr" | |
1301 [(unspec_volatile:SI [(match_operand:SI 0 "immediate_operand" "i") | |
1302 (match_operand:SI 1 "register_operand" "r")] | |
1303 VUNSPEC_TMCR)] | |
1304 "TARGET_REALLY_IWMMXT" | |
1305 "tmcr%?\\t%w0, %1" | |
1306 [(set_attr "predicable" "yes")]) | |
1307 | |
1308 (define_insn "iwmmxt_wsadb" | |
1309 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
1310 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") | |
1311 (match_operand:V8QI 2 "register_operand" "y")] UNSPEC_WSAD))] | |
1312 "TARGET_REALLY_IWMMXT" | |
1313 "wsadb%?\\t%0, %1, %2" | |
1314 [(set_attr "predicable" "yes")]) | |
1315 | |
1316 (define_insn "iwmmxt_wsadh" | |
1317 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1318 (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y") | |
1319 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WSAD))] | |
1320 "TARGET_REALLY_IWMMXT" | |
1321 "wsadh%?\\t%0, %1, %2" | |
1322 [(set_attr "predicable" "yes")]) | |
1323 | |
1324 (define_insn "iwmmxt_wsadbz" | |
1325 [(set (match_operand:V8QI 0 "register_operand" "=y") | |
1326 (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") | |
1327 (match_operand:V8QI 2 "register_operand" "y")] UNSPEC_WSADZ))] | |
1328 "TARGET_REALLY_IWMMXT" | |
1329 "wsadbz%?\\t%0, %1, %2" | |
1330 [(set_attr "predicable" "yes")]) | |
1331 | |
1332 (define_insn "iwmmxt_wsadhz" | |
1333 [(set (match_operand:V4HI 0 "register_operand" "=y") | |
1334 (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y") | |
1335 (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WSADZ))] | |
1336 "TARGET_REALLY_IWMMXT" | |
1337 "wsadhz%?\\t%0, %1, %2" | |
1338 [(set_attr "predicable" "yes")]) | |
1339 |