xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/rs6000/paired.md (revision f14316bcbc544b96a93e884bc5c2b15fd60e22ae)
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 "paired_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 "paired_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 "paired_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 "paired_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 "paired_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 "paired_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
520