comparison gcc/config/rs6000/paired.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 77e2b8dfacca
comparison
equal deleted inserted replaced
-1:000000000000 0:a06113de4d67
1 ;; PowerPC paired single and double hummer description
2 ;; Copyright (C) 2007, 2009
3 ;; Free Software Foundation, Inc.
4 ;; Contributed by David Edelsohn <edelsohn@gnu.org> and Revital Eres
5 ;; <eres@il.ibm.com>
6
7 ;; This file is part of GCC.
8
9 ;; GCC is free software; you can redistribute it and/or modify it
10 ;; under the terms of the GNU General Public License as published
11 ;; by the Free Software Foundation; either version 3, or (at your
12 ;; option) any later version.
13
14 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
15 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 ;; License for more details.
18 ;;
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with this program; see the file COPYING3. If not see
21 ;; <http://www.gnu.org/licenses/>.
22
23 (define_constants
24 [(UNSPEC_INTERHI_V2SF 330)
25 (UNSPEC_INTERLO_V2SF 331)
26 (UNSPEC_EXTEVEN_V2SF 332)
27 (UNSPEC_EXTODD_V2SF 333)
28 ])
29
30 (define_insn "negv2sf2"
31 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
32 (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
33 "TARGET_PAIRED_FLOAT"
34 "ps_neg %0,%1"
35 [(set_attr "type" "fp")])
36
37 (define_insn "sqrtv2sf2"
38 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
39 (sqrt:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
40 "TARGET_PAIRED_FLOAT"
41 "ps_rsqrte %0,%1"
42 [(set_attr "type" "fp")])
43
44 (define_insn "absv2sf2"
45 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
46 (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
47 "TARGET_PAIRED_FLOAT"
48 "ps_abs %0,%1"
49 [(set_attr "type" "fp")])
50
51 (define_insn "nabsv2sf2"
52 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
53 (neg:V2SF (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f"))))]
54 "TARGET_PAIRED_FLOAT"
55 "ps_nabs %0,%1"
56 [(set_attr "type" "fp")])
57
58 (define_insn "addv2sf3"
59 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
60 (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
61 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
62 "TARGET_PAIRED_FLOAT"
63 "ps_add %0,%1,%2"
64 [(set_attr "type" "fp")])
65
66 (define_insn "subv2sf3"
67 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
68 (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
69 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
70 "TARGET_PAIRED_FLOAT"
71 "ps_sub %0,%1,%2"
72 [(set_attr "type" "fp")])
73
74 (define_insn "mulv2sf3"
75 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
76 (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
77 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
78 "TARGET_PAIRED_FLOAT"
79 "ps_mul %0,%1,%2"
80 [(set_attr "type" "fp")])
81
82 (define_insn "resv2sf2"
83 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
84 (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")] UNSPEC_FRES))]
85 "TARGET_PAIRED_FLOAT && flag_finite_math_only"
86 "ps_res %0,%1"
87 [(set_attr "type" "fp")])
88
89 (define_insn "divv2sf3"
90 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
91 (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
92 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
93 "TARGET_PAIRED_FLOAT"
94 "ps_div %0,%1,%2"
95 [(set_attr "type" "sdiv")])
96
97 (define_insn "paired_madds0"
98 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
99 (vec_concat:V2SF
100 (plus:SF (mult:SF (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
101 (parallel [(const_int 0)]))
102 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
103 (parallel [(const_int 0)])))
104 (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
105 (parallel [(const_int 0)])))
106 (plus:SF (mult:SF (vec_select:SF (match_dup 1)
107 (parallel [(const_int 1)]))
108 (vec_select:SF (match_dup 2)
109 (parallel [(const_int 0)])))
110 (vec_select:SF (match_dup 3)
111 (parallel [(const_int 1)])))))]
112 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
113 "ps_madds0 %0,%1,%2,%3"
114 [(set_attr "type" "fp")])
115
116 (define_insn "paired_madds1"
117 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
118 (vec_concat:V2SF
119 (plus:SF (mult:SF (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
120 (parallel [(const_int 0)]))
121 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
122 (parallel [(const_int 1)])))
123 (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
124 (parallel [(const_int 0)])))
125 (plus:SF (mult:SF (vec_select:SF (match_dup 1)
126 (parallel [(const_int 1)]))
127 (vec_select:SF (match_dup 2)
128 (parallel [(const_int 1)])))
129 (vec_select:SF (match_dup 3)
130 (parallel [(const_int 1)])))))]
131 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
132 "ps_madds1 %0,%1,%2,%3"
133 [(set_attr "type" "fp")])
134
135 (define_insn "paired_madd"
136 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
137 (plus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
138 (match_operand:V2SF 2 "gpc_reg_operand" "f"))
139 (match_operand:V2SF 3 "gpc_reg_operand" "f")))]
140 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
141 "ps_madd %0,%1,%2,%3"
142 [(set_attr "type" "fp")])
143
144 (define_insn "paired_msub"
145 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
146 (minus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
147 (match_operand:V2SF 2 "gpc_reg_operand" "f"))
148 (match_operand:V2SF 3 "gpc_reg_operand" "f")))]
149 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD"
150 "ps_msub %0,%1,%2,%3"
151 [(set_attr "type" "fp")])
152
153 (define_insn "paired_nmadd"
154 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
155 (neg:V2SF (plus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
156 (match_operand:V2SF 2 "gpc_reg_operand" "f"))
157 (match_operand:V2SF 3 "gpc_reg_operand" "f"))))]
158 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD
159 && HONOR_SIGNED_ZEROS (SFmode)"
160 "ps_nmadd %0,%1,%2,%3"
161 [(set_attr "type" "fp")])
162
163 (define_insn "paired_nmsub"
164 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
165 (neg:V2SF (minus:V2SF (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
166 (match_operand:V2SF 2 "gpc_reg_operand" "f"))
167 (match_operand:V2SF 3 "gpc_reg_operand" "f"))))]
168 "TARGET_PAIRED_FLOAT && TARGET_FUSED_MADD
169 && HONOR_SIGNED_ZEROS (DFmode)"
170 "ps_nmsub %0,%1,%2,%3"
171 [(set_attr "type" "dmul")])
172
173 (define_insn "selv2sf4"
174 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
175 (vec_concat:V2SF
176 (if_then_else:SF (ge (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
177 (parallel [(const_int 0)]))
178 (match_operand:SF 4 "zero_fp_constant" "F"))
179 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
180 (parallel [(const_int 0)]))
181 (vec_select:SF (match_operand:V2SF 3 "gpc_reg_operand" "f")
182 (parallel [(const_int 0)])))
183 (if_then_else:SF (ge (vec_select:SF (match_dup 1)
184 (parallel [(const_int 1)]))
185 (match_dup 4))
186 (vec_select:SF (match_dup 2)
187 (parallel [(const_int 1)]))
188 (vec_select:SF (match_dup 3)
189 (parallel [(const_int 1)])))))]
190
191 "TARGET_PAIRED_FLOAT"
192 "ps_sel %0,%1,%2,%3"
193 [(set_attr "type" "fp")])
194
195 (define_insn "*movv2sf_paired"
196 [(set (match_operand:V2SF 0 "nonimmediate_operand" "=Z,f,f,o,r,r,f")
197 (match_operand:V2SF 1 "input_operand" "f,Z,f,r,o,r,W"))]
198 "TARGET_PAIRED_FLOAT
199 && (register_operand (operands[0], V2SFmode)
200 || register_operand (operands[1], V2SFmode))"
201 {
202 switch (which_alternative)
203 {
204 case 0: return "psq_stx %1,%y0,0,0";
205 case 1: return "psq_lx %0,%y1,0,0";
206 case 2: return "ps_mr %0,%1";
207 case 3: return "#";
208 case 4: return "#";
209 case 5: return "#";
210 case 6: return "#";
211 default: gcc_unreachable ();
212 }
213 }
214 [(set_attr "type" "fpstore,fpload,fp,*,*,*,*")])
215
216 (define_insn "paired_stx"
217 [(set (match_operand:V2SF 0 "memory_operand" "=Z")
218 (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
219 "TARGET_PAIRED_FLOAT"
220 "psq_stx %1,%y0,0,0"
221 [(set_attr "type" "fpstore")])
222
223 (define_insn "paired_lx"
224 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
225 (match_operand:V2SF 1 "memory_operand" "Z"))]
226 "TARGET_PAIRED_FLOAT"
227 "psq_lx %0,%y1,0,0"
228 [(set_attr "type" "fpload")])
229
230
231 (define_split
232 [(set (match_operand:V2SF 0 "nonimmediate_operand" "")
233 (match_operand:V2SF 1 "input_operand" ""))]
234 "TARGET_PAIRED_FLOAT && reload_completed
235 && gpr_or_gpr_p (operands[0], operands[1])"
236 [(pc)]
237 {
238 rs6000_split_multireg_move (operands[0], operands[1]); DONE;
239 })
240
241 (define_insn "paired_cmpu0"
242 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
243 (compare:CCFP (vec_select:SF
244 (match_operand:V2SF 1 "gpc_reg_operand" "f")
245 (parallel [(const_int 0)]))
246 (vec_select:SF
247 (match_operand:V2SF 2 "gpc_reg_operand" "f")
248 (parallel [(const_int 0)]))))]
249 "TARGET_PAIRED_FLOAT"
250 "ps_cmpu0 %0,%1,%2"
251 [(set_attr "type" "fpcompare")])
252
253 (define_insn "paired_cmpu1"
254 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
255 (compare:CCFP (vec_select:SF
256 (match_operand:V2SF 1 "gpc_reg_operand" "f")
257 (parallel [(const_int 1)]))
258 (vec_select:SF
259 (match_operand:V2SF 2 "gpc_reg_operand" "f")
260 (parallel [(const_int 1)]))))]
261 "TARGET_PAIRED_FLOAT"
262 "ps_cmpu1 %0,%1,%2"
263 [(set_attr "type" "fpcompare")])
264
265 (define_insn "paired_merge00"
266 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
267 (vec_concat:V2SF
268 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
269 (parallel [(const_int 0)]))
270 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
271 (parallel [(const_int 0)]))))]
272 "TARGET_PAIRED_FLOAT"
273 "ps_merge00 %0, %1, %2"
274 [(set_attr "type" "fp")])
275
276 (define_insn "paired_merge01"
277 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
278 (vec_concat:V2SF
279 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
280 (parallel [(const_int 0)]))
281 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
282 (parallel [(const_int 1)]))))]
283 "TARGET_PAIRED_FLOAT"
284 "ps_merge01 %0, %1, %2"
285 [(set_attr "type" "fp")])
286
287 (define_insn "paired_merge10"
288 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
289 (vec_concat:V2SF
290 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
291 (parallel [(const_int 1)]))
292 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
293 (parallel [(const_int 0)]))))]
294 "TARGET_PAIRED_FLOAT"
295 "ps_merge10 %0, %1, %2"
296 [(set_attr "type" "fp")])
297
298 (define_insn "paired_merge11"
299 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
300 (vec_concat:V2SF
301 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
302 (parallel [(const_int 1)]))
303 (vec_select:SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
304 (parallel [(const_int 1)]))))]
305 "TARGET_PAIRED_FLOAT"
306 "ps_merge11 %0, %1, %2"
307 [(set_attr "type" "fp")])
308
309 (define_insn "paired_sum0"
310 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
311 (vec_concat:V2SF (plus:SF (vec_select:SF
312 (match_operand:V2SF 1 "gpc_reg_operand" "f")
313 (parallel [(const_int 0)]))
314 (vec_select:SF
315 (match_operand:V2SF 2 "gpc_reg_operand" "f")
316 (parallel [(const_int 1)])))
317 (vec_select:SF
318 (match_operand:V2SF 3 "gpc_reg_operand" "f")
319 (parallel [(const_int 1)]))))]
320 "TARGET_PAIRED_FLOAT"
321 "ps_sum0 %0,%1,%2,%3"
322 [(set_attr "type" "fp")])
323
324 (define_insn "paired_sum1"
325 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
326 (vec_concat:V2SF (vec_select:SF
327 (match_operand:V2SF 2 "gpc_reg_operand" "f")
328 (parallel [(const_int 1)]))
329 (plus:SF (vec_select:SF
330 (match_operand:V2SF 1 "gpc_reg_operand" "f")
331 (parallel [(const_int 0)]))
332 (vec_select:SF
333 (match_operand:V2SF 3 "gpc_reg_operand" "f")
334 (parallel [(const_int 1)])))))]
335 "TARGET_PAIRED_FLOAT"
336 "ps_sum1 %0,%1,%2,%3"
337 [(set_attr "type" "fp")])
338
339 (define_insn "paired_muls0"
340 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
341 (mult:V2SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
342 (vec_duplicate:V2SF
343 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
344 (parallel [(const_int 0)])))))]
345 "TARGET_PAIRED_FLOAT"
346 "ps_muls0 %0, %1, %2"
347 [(set_attr "type" "fp")])
348
349
350 (define_insn "paired_muls1"
351 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
352 (mult:V2SF (match_operand:V2SF 2 "gpc_reg_operand" "f")
353 (vec_duplicate:V2SF
354 (vec_select:SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
355 (parallel [(const_int 1)])))))]
356 "TARGET_PAIRED_FLOAT"
357 "ps_muls1 %0, %1, %2"
358 [(set_attr "type" "fp")])
359
360 (define_expand "vec_initv2sf"
361 [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
362 (match_operand 1 "" "")]
363 "TARGET_PAIRED_FLOAT"
364 {
365 paired_expand_vector_init (operands[0], operands[1]);
366 DONE;
367 })
368
369 (define_insn "*vconcatsf"
370 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
371 (vec_concat:V2SF
372 (match_operand:SF 1 "gpc_reg_operand" "f")
373 (match_operand:SF 2 "gpc_reg_operand" "f")))]
374 "TARGET_PAIRED_FLOAT"
375 "ps_merge00 %0, %1, %2"
376 [(set_attr "type" "fp")])
377
378 (define_expand "sminv2sf3"
379 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
380 (smin:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
381 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
382 "TARGET_PAIRED_FLOAT"
383 {
384 rtx tmp = gen_reg_rtx (V2SFmode);
385
386 emit_insn (gen_subv2sf3 (tmp, operands[1], operands[2]));
387 emit_insn (gen_selv2sf4 (operands[0], tmp, operands[2], operands[1], CONST0_RTX (SFmode)));
388 DONE;
389 })
390
391 (define_expand "smaxv2sf3"
392 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
393 (smax:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
394 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
395 "TARGET_PAIRED_FLOAT"
396 {
397 rtx tmp = gen_reg_rtx (V2SFmode);
398
399 emit_insn (gen_subv2sf3 (tmp, operands[1], operands[2]));
400 emit_insn (gen_selv2sf4 (operands[0], tmp, operands[1], operands[2], CONST0_RTX (SFmode)));
401 DONE;
402 })
403
404 (define_expand "reduc_smax_v2sf"
405 [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
406 (match_operand:V2SF 1 "gpc_reg_operand" "f")]
407 "TARGET_PAIRED_FLOAT"
408 {
409 rtx tmp_swap = gen_reg_rtx (V2SFmode);
410 rtx tmp = gen_reg_rtx (V2SFmode);
411
412 emit_insn (gen_paired_merge10 (tmp_swap, operands[1], operands[1]));
413 emit_insn (gen_subv2sf3 (tmp, operands[1], tmp_swap));
414 emit_insn (gen_selv2sf4 (operands[0], tmp, operands[1], tmp_swap, CONST0_RTX (SFmode)));
415
416 DONE;
417 })
418
419 (define_expand "reduc_smin_v2sf"
420 [(match_operand:V2SF 0 "gpc_reg_operand" "=f")
421 (match_operand:V2SF 1 "gpc_reg_operand" "f")]
422 "TARGET_PAIRED_FLOAT"
423 {
424 rtx tmp_swap = gen_reg_rtx (V2SFmode);
425 rtx tmp = gen_reg_rtx (V2SFmode);
426
427 emit_insn (gen_paired_merge10 (tmp_swap, operands[1], operands[1]));
428 emit_insn (gen_subv2sf3 (tmp, operands[1], tmp_swap));
429 emit_insn (gen_selv2sf4 (operands[0], tmp, tmp_swap, operands[1], CONST0_RTX (SFmode)));
430
431 DONE;
432 })
433
434 (define_expand "vec_interleave_highv2sf"
435 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
436 (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
437 (match_operand:V2SF 2 "gpc_reg_operand" "f")]
438 UNSPEC_INTERHI_V2SF))]
439 "TARGET_PAIRED_FLOAT"
440 "
441 {
442 emit_insn (gen_paired_merge00 (operands[0], operands[1], operands[2]));
443 DONE;
444 }")
445
446 (define_expand "vec_interleave_lowv2sf"
447 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
448 (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
449 (match_operand:V2SF 2 "gpc_reg_operand" "f")]
450 UNSPEC_INTERLO_V2SF))]
451 "TARGET_PAIRED_FLOAT"
452 "
453 {
454 emit_insn (gen_paired_merge11 (operands[0], operands[1], operands[2]));
455 DONE;
456 }")
457
458 (define_expand "vec_extract_evenv2sf"
459 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
460 (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
461 (match_operand:V2SF 2 "gpc_reg_operand" "f")]
462 UNSPEC_EXTEVEN_V2SF))]
463 "TARGET_PAIRED_FLOAT"
464 "
465 {
466 emit_insn (gen_paired_merge00 (operands[0], operands[1], operands[2]));
467 DONE;
468 }")
469
470 (define_expand "vec_extract_oddv2sf"
471 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
472 (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "f")
473 (match_operand:V2SF 2 "gpc_reg_operand" "f")]
474 UNSPEC_EXTODD_V2SF))]
475 "TARGET_PAIRED_FLOAT"
476 "
477 {
478 emit_insn (gen_paired_merge11 (operands[0], operands[1], operands[2]));
479 DONE;
480 }")
481
482
483 (define_expand "reduc_splus_v2sf"
484 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
485 (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
486 "TARGET_PAIRED_FLOAT"
487 "
488 {
489 emit_insn (gen_paired_sum1 (operands[0], operands[1], operands[1], operands[1]));
490 DONE;
491 }")
492
493 (define_expand "movmisalignv2sf"
494 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
495 (match_operand:V2SF 1 "gpc_reg_operand" "f"))]
496 "TARGET_PAIRED_FLOAT"
497 {
498 paired_expand_vector_move (operands);
499 DONE;
500 })
501
502 (define_expand "vcondv2sf"
503 [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
504 (if_then_else:V2SF
505 (match_operator 3 "gpc_reg_operand"
506 [(match_operand:V2SF 4 "gpc_reg_operand" "f")
507 (match_operand:V2SF 5 "gpc_reg_operand" "f")])
508 (match_operand:V2SF 1 "gpc_reg_operand" "f")
509 (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
510 "TARGET_PAIRED_FLOAT && flag_unsafe_math_optimizations"
511 "
512 {
513 if (paired_emit_vector_cond_expr (operands[0], operands[1], operands[2],
514 operands[3], operands[4], operands[5]))
515 DONE;
516 else
517 FAIL;
518 }")
519