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