altivec.md revision 146895
1117395Skan;; AltiVec patterns. 2132718Skan;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. 3117395Skan;; Contributed by Aldy Hernandez (aldy@quesejoda.com) 4117395Skan 5132718Skan;; This file is part of GCC. 6117395Skan 7132718Skan;; GCC is free software; you can redistribute it and/or modify it 8132718Skan;; under the terms of the GNU General Public License as published 9132718Skan;; by the Free Software Foundation; either version 2, or (at your 10132718Skan;; option) any later version. 11117395Skan 12132718Skan;; GCC is distributed in the hope that it will be useful, but WITHOUT 13132718Skan;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14132718Skan;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15132718Skan;; License for more details. 16117395Skan 17117395Skan;; You should have received a copy of the GNU General Public License 18132718Skan;; along with GCC; see the file COPYING. If not, write to the 19132718Skan;; Free Software Foundation, 59 Temple Place - Suite 330, Boston, 20132718Skan;; MA 02111-1307, USA. 21117395Skan 22132718Skan(define_constants 23132718Skan [(UNSPEC_VSPLTISW 141) 24132718Skan (UNSPEC_VSPLTISH 140) 25132718Skan (UNSPEC_VSPLTISB 139) 26132718Skan ]) 27132718Skan 28117395Skan;; Generic LVX load instruction. 29117395Skan(define_insn "altivec_lvx_4si" 30117395Skan [(set (match_operand:V4SI 0 "altivec_register_operand" "=v") 31117395Skan (match_operand:V4SI 1 "memory_operand" "m"))] 32117395Skan "TARGET_ALTIVEC" 33117395Skan "lvx %0,%y1" 34117395Skan [(set_attr "type" "vecload")]) 35117395Skan 36117395Skan(define_insn "altivec_lvx_8hi" 37117395Skan [(set (match_operand:V8HI 0 "altivec_register_operand" "=v") 38117395Skan (match_operand:V8HI 1 "memory_operand" "m"))] 39117395Skan "TARGET_ALTIVEC" 40117395Skan "lvx %0,%y1" 41117395Skan [(set_attr "type" "vecload")]) 42117395Skan 43117395Skan(define_insn "altivec_lvx_16qi" 44117395Skan [(set (match_operand:V16QI 0 "altivec_register_operand" "=v") 45117395Skan (match_operand:V16QI 1 "memory_operand" "m"))] 46117395Skan "TARGET_ALTIVEC" 47117395Skan "lvx %0,%y1" 48117395Skan [(set_attr "type" "vecload")]) 49117395Skan 50117395Skan(define_insn "altivec_lvx_4sf" 51117395Skan [(set (match_operand:V4SF 0 "altivec_register_operand" "=v") 52117395Skan (match_operand:V4SF 1 "memory_operand" "m"))] 53117395Skan "TARGET_ALTIVEC" 54117395Skan "lvx %0,%y1" 55117395Skan [(set_attr "type" "vecload")]) 56117395Skan 57117395Skan;; Generic STVX store instruction. 58117395Skan(define_insn "altivec_stvx_4si" 59117395Skan [(set (match_operand:V4SI 0 "memory_operand" "=m") 60117395Skan (match_operand:V4SI 1 "altivec_register_operand" "v"))] 61117395Skan "TARGET_ALTIVEC" 62117395Skan "stvx %1,%y0" 63117395Skan [(set_attr "type" "vecstore")]) 64117395Skan 65117395Skan(define_insn "altivec_stvx_8hi" 66117395Skan [(set (match_operand:V8HI 0 "memory_operand" "=m") 67117395Skan (match_operand:V8HI 1 "altivec_register_operand" "v"))] 68117395Skan "TARGET_ALTIVEC" 69117395Skan "stvx %1,%y0" 70117395Skan [(set_attr "type" "vecstore")]) 71117395Skan 72117395Skan(define_insn "altivec_stvx_16qi" 73117395Skan [(set (match_operand:V16QI 0 "memory_operand" "=m") 74117395Skan (match_operand:V16QI 1 "altivec_register_operand" "v"))] 75117395Skan "TARGET_ALTIVEC" 76117395Skan "stvx %1,%y0" 77117395Skan [(set_attr "type" "vecstore")]) 78117395Skan 79117395Skan(define_insn "altivec_stvx_4sf" 80117395Skan [(set (match_operand:V4SF 0 "memory_operand" "=m") 81117395Skan (match_operand:V4SF 1 "altivec_register_operand" "v"))] 82117395Skan "TARGET_ALTIVEC" 83117395Skan "stvx %1,%y0" 84117395Skan [(set_attr "type" "vecstore")]) 85117395Skan 86117395Skan;; Vector move instructions. 87117395Skan(define_expand "movv4si" 88117395Skan [(set (match_operand:V4SI 0 "nonimmediate_operand" "") 89117395Skan (match_operand:V4SI 1 "any_operand" ""))] 90117395Skan "TARGET_ALTIVEC" 91117395Skan "{ rs6000_emit_move (operands[0], operands[1], V4SImode); DONE; }") 92117395Skan 93117395Skan(define_insn "*movv4si_internal" 94132718Skan [(set (match_operand:V4SI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v") 95132718Skan (match_operand:V4SI 1 "input_operand" "v,m,v,r,o,r,W"))] 96132718Skan "TARGET_ALTIVEC 97132718Skan && (register_operand (operands[0], V4SImode) 98132718Skan || register_operand (operands[1], V4SImode))" 99132718Skan "* 100132718Skan{ 101132718Skan switch (which_alternative) 102132718Skan { 103132718Skan case 0: return \"stvx %1,%y0\"; 104132718Skan case 1: return \"lvx %0,%y1\"; 105132718Skan case 2: return \"vor %0,%1,%1\"; 106132718Skan case 3: return \"#\"; 107132718Skan case 4: return \"#\"; 108132718Skan case 5: return \"#\"; 109132718Skan case 6: return output_vec_const_move (operands); 110132718Skan default: abort(); 111132718Skan } 112132718Skan}" 113132718Skan [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")]) 114117395Skan 115132718Skan(define_split 116132718Skan [(set (match_operand:V4SI 0 "nonimmediate_operand" "") 117132718Skan (match_operand:V4SI 1 "input_operand" ""))] 118132718Skan "TARGET_ALTIVEC && reload_completed 119132718Skan && gpr_or_gpr_p (operands[0], operands[1])" 120132718Skan [(pc)] 121132718Skan{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) 122132718Skan 123132718Skan(define_split 124132718Skan [(set (match_operand:V4SI 0 "altivec_register_operand" "") 125132718Skan (match_operand:V4SI 1 "easy_vector_constant_add_self" ""))] 126132718Skan "TARGET_ALTIVEC && reload_completed" 127132718Skan [(set (match_dup 0) (match_dup 3)) 128132718Skan (set (match_dup 0) 129132718Skan (plus:V4SI (match_dup 0) 130132718Skan (match_dup 0)))] 131132718Skan " 132132718Skan{ 133132718Skan operands[3] = gen_easy_vector_constant_add_self (operands[1]); 134132718Skan}") 135132718Skan 136117395Skan(define_expand "movv8hi" 137117395Skan [(set (match_operand:V8HI 0 "nonimmediate_operand" "") 138117395Skan (match_operand:V8HI 1 "any_operand" ""))] 139117395Skan "TARGET_ALTIVEC" 140117395Skan "{ rs6000_emit_move (operands[0], operands[1], V8HImode); DONE; }") 141117395Skan 142117395Skan(define_insn "*movv8hi_internal1" 143132718Skan [(set (match_operand:V8HI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v") 144132718Skan (match_operand:V8HI 1 "input_operand" "v,m,v,r,o,r,W"))] 145132718Skan "TARGET_ALTIVEC 146132718Skan && (register_operand (operands[0], V8HImode) 147132718Skan || register_operand (operands[1], V8HImode))" 148132718Skan "* 149132718Skan{ 150132718Skan switch (which_alternative) 151132718Skan { 152132718Skan case 0: return \"stvx %1,%y0\"; 153132718Skan case 1: return \"lvx %0,%y1\"; 154132718Skan case 2: return \"vor %0,%1,%1\"; 155132718Skan case 3: return \"#\"; 156132718Skan case 4: return \"#\"; 157132718Skan case 5: return \"#\"; 158132718Skan case 6: return output_vec_const_move (operands); 159132718Skan default: abort (); 160132718Skan } 161132718Skan}" 162132718Skan [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")]) 163117395Skan 164132718Skan(define_split 165132718Skan [(set (match_operand:V8HI 0 "nonimmediate_operand" "") 166132718Skan (match_operand:V8HI 1 "input_operand" ""))] 167132718Skan "TARGET_ALTIVEC && reload_completed 168132718Skan && gpr_or_gpr_p (operands[0], operands[1])" 169132718Skan [(pc)] 170132718Skan{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) 171132718Skan 172132718Skan(define_split 173132718Skan [(set (match_operand:V8HI 0 "altivec_register_operand" "") 174132718Skan (match_operand:V8HI 1 "easy_vector_constant_add_self" ""))] 175132718Skan "TARGET_ALTIVEC && reload_completed" 176132718Skan [(set (match_dup 0) (match_dup 3)) 177132718Skan (set (match_dup 0) 178132718Skan (plus:V8HI (match_dup 0) 179132718Skan (match_dup 0)))] 180132718Skan " 181132718Skan{ 182132718Skan operands[3] = gen_easy_vector_constant_add_self (operands[1]); 183132718Skan}") 184132718Skan 185117395Skan(define_expand "movv16qi" 186117395Skan [(set (match_operand:V16QI 0 "nonimmediate_operand" "") 187117395Skan (match_operand:V16QI 1 "any_operand" ""))] 188117395Skan "TARGET_ALTIVEC" 189117395Skan "{ rs6000_emit_move (operands[0], operands[1], V16QImode); DONE; }") 190117395Skan 191117395Skan(define_insn "*movv16qi_internal1" 192132718Skan [(set (match_operand:V16QI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v") 193132718Skan (match_operand:V16QI 1 "input_operand" "v,m,v,r,o,r,W"))] 194132718Skan "TARGET_ALTIVEC 195132718Skan && (register_operand (operands[0], V16QImode) 196132718Skan || register_operand (operands[1], V16QImode))" 197132718Skan "* 198132718Skan{ 199132718Skan switch (which_alternative) 200132718Skan { 201132718Skan case 0: return \"stvx %1,%y0\"; 202132718Skan case 1: return \"lvx %0,%y1\"; 203132718Skan case 2: return \"vor %0,%1,%1\"; 204132718Skan case 3: return \"#\"; 205132718Skan case 4: return \"#\"; 206132718Skan case 5: return \"#\"; 207132718Skan case 6: return output_vec_const_move (operands); 208132718Skan default: abort (); 209132718Skan } 210132718Skan}" 211132718Skan [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")]) 212117395Skan 213132718Skan(define_split 214132718Skan [(set (match_operand:V16QI 0 "nonimmediate_operand" "") 215132718Skan (match_operand:V16QI 1 "input_operand" ""))] 216132718Skan "TARGET_ALTIVEC && reload_completed 217132718Skan && gpr_or_gpr_p (operands[0], operands[1])" 218132718Skan [(pc)] 219132718Skan{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) 220132718Skan 221132718Skan(define_split 222132718Skan [(set (match_operand:V16QI 0 "altivec_register_operand" "") 223132718Skan (match_operand:V16QI 1 "easy_vector_constant_add_self" ""))] 224132718Skan "TARGET_ALTIVEC && reload_completed" 225132718Skan [(set (match_dup 0) (match_dup 3)) 226132718Skan (set (match_dup 0) 227132718Skan (plus:V16QI (match_dup 0) 228132718Skan (match_dup 0)))] 229132718Skan " 230132718Skan{ 231132718Skan operands[3] = gen_easy_vector_constant_add_self (operands[1]); 232132718Skan}") 233132718Skan 234117395Skan(define_expand "movv4sf" 235117395Skan [(set (match_operand:V4SF 0 "nonimmediate_operand" "") 236117395Skan (match_operand:V4SF 1 "any_operand" ""))] 237117395Skan "TARGET_ALTIVEC" 238117395Skan "{ rs6000_emit_move (operands[0], operands[1], V4SFmode); DONE; }") 239117395Skan 240117395Skan(define_insn "*movv4sf_internal1" 241132718Skan [(set (match_operand:V4SF 0 "nonimmediate_operand" "=m,v,v,o,r,r,v") 242132718Skan (match_operand:V4SF 1 "input_operand" "v,m,v,r,o,r,W"))] 243132718Skan "TARGET_ALTIVEC 244132718Skan && (register_operand (operands[0], V4SFmode) 245132718Skan || register_operand (operands[1], V4SFmode))" 246132718Skan "* 247132718Skan{ 248132718Skan switch (which_alternative) 249132718Skan { 250132718Skan case 0: return \"stvx %1,%y0\"; 251132718Skan case 1: return \"lvx %0,%y1\"; 252132718Skan case 2: return \"vor %0,%1,%1\"; 253132718Skan case 3: return \"#\"; 254132718Skan case 4: return \"#\"; 255132718Skan case 5: return \"#\"; 256132718Skan case 6: return output_vec_const_move (operands); 257132718Skan default: abort (); 258132718Skan } 259132718Skan}" 260132718Skan [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")]) 261117395Skan 262132718Skan(define_split 263132718Skan [(set (match_operand:V4SF 0 "nonimmediate_operand" "") 264132718Skan (match_operand:V4SF 1 "input_operand" ""))] 265132718Skan "TARGET_ALTIVEC && reload_completed 266132718Skan && gpr_or_gpr_p (operands[0], operands[1])" 267132718Skan [(pc)] 268132718Skan{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) 269132718Skan 270117395Skan(define_insn "get_vrsave_internal" 271117395Skan [(set (match_operand:SI 0 "register_operand" "=r") 272117395Skan (unspec:SI [(reg:SI 109)] 214))] 273117395Skan "TARGET_ALTIVEC" 274117395Skan "* 275117395Skan{ 276117395Skan if (TARGET_MACHO) 277117395Skan return \"mfspr %0,256\"; 278117395Skan else 279117395Skan return \"mfvrsave %0\"; 280117395Skan}" 281132718Skan [(set_attr "type" "*")]) 282117395Skan 283117395Skan(define_insn "*set_vrsave_internal" 284117395Skan [(match_parallel 0 "vrsave_operation" 285117395Skan [(set (reg:SI 109) 286117395Skan (unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r") 287117395Skan (reg:SI 109)] 30))])] 288117395Skan "TARGET_ALTIVEC" 289117395Skan "* 290117395Skan{ 291117395Skan if (TARGET_MACHO) 292117395Skan return \"mtspr 256,%1\"; 293117395Skan else 294117395Skan return \"mtvrsave %1\"; 295117395Skan}" 296132718Skan [(set_attr "type" "*")]) 297117395Skan 298117395Skan;; Simple binary operations. 299117395Skan 300117395Skan(define_insn "addv16qi3" 301117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 302117395Skan (plus:V16QI (match_operand:V16QI 1 "register_operand" "v") 303117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 304117395Skan "TARGET_ALTIVEC" 305117395Skan "vaddubm %0,%1,%2" 306117395Skan [(set_attr "type" "vecsimple")]) 307117395Skan 308117395Skan(define_insn "addv8hi3" 309117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 310117395Skan (plus:V8HI (match_operand:V8HI 1 "register_operand" "v") 311117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 312117395Skan "TARGET_ALTIVEC" 313117395Skan "vadduhm %0,%1,%2" 314117395Skan [(set_attr "type" "vecsimple")]) 315117395Skan 316117395Skan(define_insn "addv4si3" 317117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 318117395Skan (plus:V4SI (match_operand:V4SI 1 "register_operand" "v") 319117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 320117395Skan "TARGET_ALTIVEC" 321117395Skan "vadduwm %0,%1,%2" 322117395Skan [(set_attr "type" "vecsimple")]) 323117395Skan 324117395Skan(define_insn "addv4sf3" 325117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 326117395Skan (plus:V4SF (match_operand:V4SF 1 "register_operand" "v") 327117395Skan (match_operand:V4SF 2 "register_operand" "v")))] 328117395Skan "TARGET_ALTIVEC" 329117395Skan "vaddfp %0,%1,%2" 330117395Skan [(set_attr "type" "vecfloat")]) 331117395Skan 332117395Skan(define_insn "altivec_vaddcuw" 333117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 334117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 335117395Skan (match_operand:V4SI 2 "register_operand" "v")] 35))] 336117395Skan "TARGET_ALTIVEC" 337117395Skan "vaddcuw %0,%1,%2" 338117395Skan [(set_attr "type" "vecsimple")]) 339117395Skan 340117395Skan(define_insn "altivec_vaddubs" 341117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 342117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 343117395Skan (match_operand:V16QI 2 "register_operand" "v")] 36)) 344117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 345117395Skan "TARGET_ALTIVEC" 346117395Skan "vaddubs %0,%1,%2" 347117395Skan [(set_attr "type" "vecsimple")]) 348117395Skan 349117395Skan(define_insn "altivec_vaddsbs" 350117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 351117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 352117395Skan (match_operand:V16QI 2 "register_operand" "v")] 37)) 353117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 354117395Skan "TARGET_ALTIVEC" 355117395Skan "vaddsbs %0,%1,%2" 356117395Skan [(set_attr "type" "vecsimple")]) 357117395Skan 358117395Skan(define_insn "altivec_vadduhs" 359117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 360117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 361117395Skan (match_operand:V8HI 2 "register_operand" "v")] 38)) 362117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 363117395Skan "TARGET_ALTIVEC" 364117395Skan "vadduhs %0,%1,%2" 365117395Skan [(set_attr "type" "vecsimple")]) 366117395Skan 367117395Skan(define_insn "altivec_vaddshs" 368117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 369117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 370117395Skan (match_operand:V8HI 2 "register_operand" "v")] 39)) 371117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 372117395Skan "TARGET_ALTIVEC" 373117395Skan "vaddshs %0,%1,%2" 374117395Skan [(set_attr "type" "vecsimple")]) 375117395Skan 376117395Skan(define_insn "altivec_vadduws" 377117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 378117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 379117395Skan (match_operand:V4SI 2 "register_operand" "v")] 40)) 380117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 381117395Skan "TARGET_ALTIVEC" 382117395Skan "vadduws %0,%1,%2" 383117395Skan [(set_attr "type" "vecsimple")]) 384117395Skan 385117395Skan(define_insn "altivec_vaddsws" 386117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 387117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 388117395Skan (match_operand:V4SI 2 "register_operand" "v")] 41)) 389117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 390117395Skan "TARGET_ALTIVEC" 391117395Skan "vaddsws %0,%1,%2" 392117395Skan [(set_attr "type" "vecsimple")]) 393117395Skan 394117395Skan(define_insn "andv4si3" 395117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 396117395Skan (and:V4SI (match_operand:V4SI 1 "register_operand" "v") 397117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 398117395Skan "TARGET_ALTIVEC" 399117395Skan "vand %0,%1,%2" 400117395Skan [(set_attr "type" "vecsimple")]) 401117395Skan 402117395Skan(define_insn "altivec_vandc" 403117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 404117395Skan (and:V4SI (match_operand:V4SI 1 "register_operand" "v") 405117395Skan (not:V4SI (match_operand:V4SI 2 "register_operand" "v"))))] 406117395Skan "TARGET_ALTIVEC" 407117395Skan "vandc %0,%1,%2" 408117395Skan [(set_attr "type" "vecsimple")]) 409117395Skan 410117395Skan(define_insn "altivec_vavgub" 411117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 412117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 413117395Skan (match_operand:V16QI 2 "register_operand" "v")] 44))] 414117395Skan "TARGET_ALTIVEC" 415117395Skan "vavgub %0,%1,%2" 416117395Skan [(set_attr "type" "vecsimple")]) 417117395Skan 418117395Skan(define_insn "altivec_vavgsb" 419117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 420117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 421117395Skan (match_operand:V16QI 2 "register_operand" "v")] 45))] 422117395Skan "TARGET_ALTIVEC" 423117395Skan "vavgsb %0,%1,%2" 424117395Skan [(set_attr "type" "vecsimple")]) 425117395Skan 426117395Skan(define_insn "altivec_vavguh" 427117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 428117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 429117395Skan (match_operand:V8HI 2 "register_operand" "v")] 46))] 430117395Skan "TARGET_ALTIVEC" 431117395Skan "vavguh %0,%1,%2" 432117395Skan [(set_attr "type" "vecsimple")]) 433117395Skan 434117395Skan(define_insn "altivec_vavgsh" 435117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 436117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 437117395Skan (match_operand:V8HI 2 "register_operand" "v")] 47))] 438117395Skan "TARGET_ALTIVEC" 439117395Skan "vavgsh %0,%1,%2" 440117395Skan [(set_attr "type" "vecsimple")]) 441117395Skan 442117395Skan(define_insn "altivec_vavguw" 443117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 444117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 445117395Skan (match_operand:V4SI 2 "register_operand" "v")] 48))] 446117395Skan "TARGET_ALTIVEC" 447117395Skan "vavguw %0,%1,%2" 448117395Skan [(set_attr "type" "vecsimple")]) 449117395Skan 450117395Skan(define_insn "altivec_vavgsw" 451117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 452117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 453117395Skan (match_operand:V4SI 2 "register_operand" "v")] 49))] 454117395Skan "TARGET_ALTIVEC" 455117395Skan "vavgsw %0,%1,%2" 456117395Skan [(set_attr "type" "vecsimple")]) 457117395Skan 458117395Skan(define_insn "altivec_vcmpbfp" 459117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 460117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 461117395Skan (match_operand:V4SF 2 "register_operand" "v")] 50))] 462117395Skan "TARGET_ALTIVEC" 463117395Skan "vcmpbfp %0,%1,%2" 464117395Skan [(set_attr "type" "veccmp")]) 465117395Skan 466117395Skan(define_insn "altivec_vcmpequb" 467117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 468117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 469117395Skan (match_operand:V16QI 2 "register_operand" "v")] 51))] 470117395Skan "TARGET_ALTIVEC" 471117395Skan "vcmpequb %0,%1,%2" 472117395Skan [(set_attr "type" "vecsimple")]) 473117395Skan 474117395Skan(define_insn "altivec_vcmpequh" 475117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 476117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 477117395Skan (match_operand:V8HI 2 "register_operand" "v")] 52))] 478117395Skan "TARGET_ALTIVEC" 479117395Skan "vcmpequh %0,%1,%2" 480117395Skan [(set_attr "type" "vecsimple")]) 481117395Skan 482117395Skan(define_insn "altivec_vcmpequw" 483117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 484117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 485117395Skan (match_operand:V4SI 2 "register_operand" "v")] 53))] 486117395Skan "TARGET_ALTIVEC" 487117395Skan "vcmpequw %0,%1,%2" 488117395Skan [(set_attr "type" "vecsimple")]) 489117395Skan 490117395Skan(define_insn "altivec_vcmpeqfp" 491117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 492117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 493117395Skan (match_operand:V4SF 2 "register_operand" "v")] 54))] 494117395Skan "TARGET_ALTIVEC" 495117395Skan "vcmpeqfp %0,%1,%2" 496117395Skan [(set_attr "type" "veccmp")]) 497117395Skan 498117395Skan(define_insn "altivec_vcmpgefp" 499117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 500117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 501117395Skan (match_operand:V4SF 2 "register_operand" "v")] 55))] 502117395Skan "TARGET_ALTIVEC" 503117395Skan "vcmpgefp %0,%1,%2" 504117395Skan [(set_attr "type" "veccmp")]) 505117395Skan 506117395Skan(define_insn "altivec_vcmpgtub" 507117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 508117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 509117395Skan (match_operand:V16QI 2 "register_operand" "v")] 56))] 510117395Skan "TARGET_ALTIVEC" 511117395Skan "vcmpgtub %0,%1,%2" 512117395Skan [(set_attr "type" "vecsimple")]) 513117395Skan 514117395Skan(define_insn "altivec_vcmpgtsb" 515117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 516117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 517117395Skan (match_operand:V16QI 2 "register_operand" "v")] 57))] 518117395Skan "TARGET_ALTIVEC" 519117395Skan "vcmpgtsb %0,%1,%2" 520117395Skan [(set_attr "type" "vecsimple")]) 521117395Skan 522117395Skan(define_insn "altivec_vcmpgtuh" 523117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 524117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 525117395Skan (match_operand:V8HI 2 "register_operand" "v")] 58))] 526117395Skan "TARGET_ALTIVEC" 527117395Skan "vcmpgtuh %0,%1,%2" 528117395Skan [(set_attr "type" "vecsimple")]) 529117395Skan 530117395Skan(define_insn "altivec_vcmpgtsh" 531117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 532117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 533117395Skan (match_operand:V8HI 2 "register_operand" "v")] 59))] 534117395Skan "TARGET_ALTIVEC" 535117395Skan "vcmpgtsh %0,%1,%2" 536117395Skan [(set_attr "type" "vecsimple")]) 537117395Skan 538117395Skan(define_insn "altivec_vcmpgtuw" 539117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 540117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 541117395Skan (match_operand:V4SI 2 "register_operand" "v")] 60))] 542117395Skan "TARGET_ALTIVEC" 543117395Skan "vcmpgtuw %0,%1,%2" 544117395Skan [(set_attr "type" "vecsimple")]) 545117395Skan 546117395Skan(define_insn "altivec_vcmpgtsw" 547117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 548117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 549117395Skan (match_operand:V4SI 2 "register_operand" "v")] 61))] 550117395Skan "TARGET_ALTIVEC" 551117395Skan "vcmpgtsw %0,%1,%2" 552117395Skan [(set_attr "type" "vecsimple")]) 553117395Skan 554117395Skan(define_insn "altivec_vcmpgtfp" 555117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 556117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 557117395Skan (match_operand:V4SF 2 "register_operand" "v")] 62))] 558117395Skan "TARGET_ALTIVEC" 559117395Skan "vcmpgtfp %0,%1,%2" 560117395Skan [(set_attr "type" "veccmp")]) 561117395Skan 562117395Skan;; Fused multiply add 563117395Skan(define_insn "altivec_vmaddfp" 564117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 565117395Skan (plus:V4SF (mult:V4SF (match_operand:V4SF 1 "register_operand" "v") 566117395Skan (match_operand:V4SF 2 "register_operand" "v")) 567117395Skan (match_operand:V4SF 3 "register_operand" "v")))] 568117395Skan "TARGET_ALTIVEC" 569117395Skan "vmaddfp %0,%1,%2,%3" 570117395Skan [(set_attr "type" "vecfloat")]) 571117395Skan 572117395Skan;; We do multiply as a fused multiply-add with an add of a -0.0 vector. 573117395Skan 574117395Skan(define_expand "mulv4sf3" 575117395Skan [(use (match_operand:V4SF 0 "register_operand" "")) 576117395Skan (use (match_operand:V4SF 1 "register_operand" "")) 577117395Skan (use (match_operand:V4SF 2 "register_operand" ""))] 578117395Skan "TARGET_ALTIVEC && TARGET_FUSED_MADD" 579117395Skan " 580117395Skan{ 581117395Skan rtx neg0; 582117395Skan 583117395Skan /* Generate [-0.0, -0.0, -0.0, -0.0]. */ 584117395Skan neg0 = gen_reg_rtx (V4SFmode); 585117395Skan emit_insn (gen_altivec_vspltisw_v4sf (neg0, GEN_INT (-1))); 586117395Skan emit_insn (gen_altivec_vslw_v4sf (neg0, neg0, neg0)); 587117395Skan 588117395Skan /* Use the multiply-add. */ 589117395Skan emit_insn (gen_altivec_vmaddfp (operands[0], operands[1], operands[2], 590117395Skan neg0)); 591117395Skan DONE; 592117395Skan}") 593117395Skan 594117395Skan;; Fused multiply subtract 595117395Skan(define_insn "altivec_vnmsubfp" 596117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 597146895Skan (neg:V4SF (minus:V4SF (mult:V4SF (match_operand:V4SF 1 "register_operand" "v") 598117395Skan (match_operand:V4SF 2 "register_operand" "v")) 599146895Skan (match_operand:V4SF 3 "register_operand" "v"))))] 600117395Skan "TARGET_ALTIVEC" 601117395Skan "vnmsubfp %0,%1,%2,%3" 602117395Skan [(set_attr "type" "vecfloat")]) 603117395Skan 604117395Skan 605117395Skan(define_insn "altivec_vmsumubm" 606117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 607117395Skan (unspec:V4SI [(match_operand:V16QI 1 "register_operand" "v") 608117395Skan (match_operand:V16QI 2 "register_operand" "v") 609117395Skan (match_operand:V4SI 3 "register_operand" "v")] 65))] 610117395Skan "TARGET_ALTIVEC" 611132718Skan "vmsumubm %0,%1,%2,%3" 612117395Skan [(set_attr "type" "veccomplex")]) 613117395Skan 614117395Skan(define_insn "altivec_vmsummbm" 615117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 616117395Skan (unspec:V4SI [(match_operand:V16QI 1 "register_operand" "v") 617117395Skan (match_operand:V16QI 2 "register_operand" "v") 618117395Skan (match_operand:V4SI 3 "register_operand" "v")] 66))] 619117395Skan "TARGET_ALTIVEC" 620132718Skan "vmsummbm %0,%1,%2,%3" 621117395Skan [(set_attr "type" "veccomplex")]) 622117395Skan 623117395Skan(define_insn "altivec_vmsumuhm" 624117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 625117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 626117395Skan (match_operand:V8HI 2 "register_operand" "v") 627117395Skan (match_operand:V4SI 3 "register_operand" "v")] 67))] 628117395Skan "TARGET_ALTIVEC" 629132718Skan "vmsumuhm %0,%1,%2,%3" 630117395Skan [(set_attr "type" "veccomplex")]) 631117395Skan 632117395Skan(define_insn "altivec_vmsumshm" 633117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 634117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 635117395Skan (match_operand:V8HI 2 "register_operand" "v") 636117395Skan (match_operand:V4SI 3 "register_operand" "v")] 68))] 637117395Skan "TARGET_ALTIVEC" 638132718Skan "vmsumshm %0,%1,%2,%3" 639117395Skan [(set_attr "type" "veccomplex")]) 640117395Skan 641117395Skan(define_insn "altivec_vmsumuhs" 642117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 643117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 644117395Skan (match_operand:V8HI 2 "register_operand" "v") 645117395Skan (match_operand:V4SI 3 "register_operand" "v")] 69)) 646117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 647117395Skan "TARGET_ALTIVEC" 648132718Skan "vmsumuhs %0,%1,%2,%3" 649117395Skan [(set_attr "type" "veccomplex")]) 650117395Skan 651117395Skan(define_insn "altivec_vmsumshs" 652117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 653117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 654117395Skan (match_operand:V8HI 2 "register_operand" "v") 655117395Skan (match_operand:V4SI 3 "register_operand" "v")] 70)) 656117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 657117395Skan "TARGET_ALTIVEC" 658132718Skan "vmsumshs %0,%1,%2,%3" 659117395Skan [(set_attr "type" "veccomplex")]) 660117395Skan 661117395Skan(define_insn "umaxv16qi3" 662117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 663117395Skan (umax:V16QI (match_operand:V16QI 1 "register_operand" "v") 664117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 665117395Skan "TARGET_ALTIVEC" 666117395Skan "vmaxub %0,%1,%2" 667117395Skan [(set_attr "type" "vecsimple")]) 668117395Skan 669117395Skan(define_insn "smaxv16qi3" 670117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 671117395Skan (smax:V16QI (match_operand:V16QI 1 "register_operand" "v") 672117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 673117395Skan "TARGET_ALTIVEC" 674117395Skan "vmaxsb %0,%1,%2" 675117395Skan [(set_attr "type" "vecsimple")]) 676117395Skan 677117395Skan(define_insn "umaxv8hi3" 678117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 679117395Skan (umax:V8HI (match_operand:V8HI 1 "register_operand" "v") 680117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 681117395Skan "TARGET_ALTIVEC" 682117395Skan "vmaxuh %0,%1,%2" 683117395Skan [(set_attr "type" "vecsimple")]) 684117395Skan 685117395Skan(define_insn "smaxv8hi3" 686117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 687117395Skan (smax:V8HI (match_operand:V8HI 1 "register_operand" "v") 688117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 689117395Skan "TARGET_ALTIVEC" 690117395Skan "vmaxsh %0,%1,%2" 691117395Skan [(set_attr "type" "vecsimple")]) 692117395Skan 693117395Skan(define_insn "umaxv4si3" 694117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 695117395Skan (umax:V4SI (match_operand:V4SI 1 "register_operand" "v") 696117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 697117395Skan "TARGET_ALTIVEC" 698117395Skan "vmaxuw %0,%1,%2" 699117395Skan [(set_attr "type" "vecsimple")]) 700117395Skan 701117395Skan(define_insn "smaxv4si3" 702117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 703117395Skan (smax:V4SI (match_operand:V4SI 1 "register_operand" "v") 704117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 705117395Skan "TARGET_ALTIVEC" 706117395Skan "vmaxsw %0,%1,%2" 707117395Skan [(set_attr "type" "vecsimple")]) 708117395Skan 709117395Skan(define_insn "smaxv4sf3" 710117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 711117395Skan (smax:V4SF (match_operand:V4SF 1 "register_operand" "v") 712117395Skan (match_operand:V4SF 2 "register_operand" "v")))] 713117395Skan "TARGET_ALTIVEC" 714117395Skan "vmaxfp %0,%1,%2" 715117395Skan [(set_attr "type" "veccmp")]) 716117395Skan 717117395Skan(define_insn "altivec_vmhaddshs" 718117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 719117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 720117395Skan (match_operand:V8HI 2 "register_operand" "v") 721117395Skan (match_operand:V8HI 3 "register_operand" "v")] 71)) 722117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 723117395Skan "TARGET_ALTIVEC" 724132718Skan "vmhaddshs %0,%1,%2,%3" 725117395Skan [(set_attr "type" "veccomplex")]) 726117395Skan(define_insn "altivec_vmhraddshs" 727117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 728117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 729117395Skan (match_operand:V8HI 2 "register_operand" "v") 730117395Skan (match_operand:V8HI 3 "register_operand" "v")] 72)) 731117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 732117395Skan "TARGET_ALTIVEC" 733132718Skan "vmhraddshs %0,%1,%2,%3" 734117395Skan [(set_attr "type" "veccomplex")]) 735117395Skan(define_insn "altivec_vmladduhm" 736117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 737117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 738117395Skan (match_operand:V8HI 2 "register_operand" "v") 739117395Skan (match_operand:V8HI 3 "register_operand" "v")] 73))] 740117395Skan "TARGET_ALTIVEC" 741132718Skan "vmladduhm %0,%1,%2,%3" 742117395Skan [(set_attr "type" "veccomplex")]) 743117395Skan 744117395Skan(define_insn "altivec_vmrghb" 745117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 746117395Skan (vec_merge:V16QI (vec_select:V16QI (match_operand:V16QI 1 "register_operand" "v") 747117395Skan (parallel [(const_int 8) 748117395Skan (const_int 9) 749117395Skan (const_int 10) 750117395Skan (const_int 11) 751117395Skan (const_int 12) 752117395Skan (const_int 13) 753117395Skan (const_int 14) 754117395Skan (const_int 15) 755117395Skan (const_int 0) 756117395Skan (const_int 1) 757117395Skan (const_int 2) 758117395Skan (const_int 3) 759117395Skan (const_int 4) 760117395Skan (const_int 5) 761117395Skan (const_int 6) 762117395Skan (const_int 7)])) 763117395Skan (match_operand:V16QI 2 "register_operand" "v") 764117395Skan (const_int 255)))] 765117395Skan "TARGET_ALTIVEC" 766117395Skan "vmrghb %0,%1,%2" 767117395Skan [(set_attr "type" "vecperm")]) 768117395Skan 769117395Skan(define_insn "altivec_vmrghh" 770117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 771117395Skan (vec_merge:V8HI (vec_select:V8HI (match_operand:V8HI 1 "register_operand" "v") 772117395Skan (parallel [(const_int 4) 773117395Skan (const_int 5) 774117395Skan (const_int 6) 775117395Skan (const_int 7) 776117395Skan (const_int 0) 777117395Skan (const_int 1) 778117395Skan (const_int 2) 779117395Skan (const_int 3)])) 780117395Skan (match_operand:V8HI 2 "register_operand" "v") 781117395Skan (const_int 15)))] 782117395Skan "TARGET_ALTIVEC" 783117395Skan "vmrghh %0,%1,%2" 784117395Skan [(set_attr "type" "vecperm")]) 785117395Skan 786117395Skan(define_insn "altivec_vmrghw" 787117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 788117395Skan (vec_merge:V4SI (vec_select:V4SI (match_operand:V4SI 1 "register_operand" "v") 789117395Skan (parallel [(const_int 2) 790117395Skan (const_int 3) 791117395Skan (const_int 0) 792117395Skan (const_int 1)])) 793117395Skan (match_operand:V4SI 2 "register_operand" "v") 794117395Skan (const_int 12)))] 795117395Skan "TARGET_ALTIVEC" 796117395Skan "vmrghw %0,%1,%2" 797117395Skan [(set_attr "type" "vecperm")]) 798117395Skan 799117395Skan(define_insn "altivec_vmrglb" 800117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 801117395Skan (vec_merge:V16QI (vec_select:V16QI (match_operand:V16QI 2 "register_operand" "v") 802117395Skan (parallel [(const_int 0) 803117395Skan (const_int 1) 804117395Skan (const_int 2) 805117395Skan (const_int 3) 806117395Skan (const_int 4) 807117395Skan (const_int 5) 808117395Skan (const_int 6) 809117395Skan (const_int 7) 810117395Skan (const_int 8) 811117395Skan (const_int 9) 812117395Skan (const_int 10) 813117395Skan (const_int 11) 814117395Skan (const_int 12) 815117395Skan (const_int 13) 816117395Skan (const_int 14) 817117395Skan (const_int 15)])) 818117395Skan (match_operand:V16QI 1 "register_operand" "v") 819117395Skan (const_int 255)))] 820117395Skan "TARGET_ALTIVEC" 821117395Skan "vmrglb %0,%1,%2" 822117395Skan [(set_attr "type" "vecperm")]) 823117395Skan 824117395Skan(define_insn "altivec_vmrglh" 825117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 826117395Skan (vec_merge:V8HI (vec_select:V8HI (match_operand:V8HI 2 "register_operand" "v") 827117395Skan (parallel [(const_int 0) 828117395Skan (const_int 1) 829117395Skan (const_int 2) 830117395Skan (const_int 3) 831117395Skan (const_int 4) 832117395Skan (const_int 5) 833117395Skan (const_int 6) 834117395Skan (const_int 7)])) 835117395Skan (match_operand:V8HI 1 "register_operand" "v") 836117395Skan (const_int 15)))] 837117395Skan "TARGET_ALTIVEC" 838117395Skan "vmrglh %0,%1,%2" 839117395Skan [(set_attr "type" "vecperm")]) 840117395Skan 841117395Skan(define_insn "altivec_vmrglw" 842117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 843117395Skan (vec_merge:V4SI (vec_select:V4SI (match_operand:V4SI 2 "register_operand" "v") 844117395Skan (parallel [(const_int 0) 845117395Skan (const_int 1) 846117395Skan (const_int 2) 847117395Skan (const_int 3)])) 848117395Skan (match_operand:V4SI 1 "register_operand" "v") 849117395Skan (const_int 12)))] 850117395Skan "TARGET_ALTIVEC" 851117395Skan "vmrglw %0,%1,%2" 852117395Skan [(set_attr "type" "vecperm")]) 853117395Skan 854117395Skan(define_insn "uminv16qi3" 855117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 856117395Skan (umin:V16QI (match_operand:V16QI 1 "register_operand" "v") 857117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 858117395Skan "TARGET_ALTIVEC" 859117395Skan "vminub %0,%1,%2" 860117395Skan [(set_attr "type" "vecsimple")]) 861117395Skan 862117395Skan(define_insn "sminv16qi3" 863117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 864117395Skan (smin:V16QI (match_operand:V16QI 1 "register_operand" "v") 865117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 866117395Skan "TARGET_ALTIVEC" 867117395Skan "vminsb %0,%1,%2" 868117395Skan [(set_attr "type" "vecsimple")]) 869117395Skan 870117395Skan(define_insn "uminv8hi3" 871117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 872117395Skan (umin:V8HI (match_operand:V8HI 1 "register_operand" "v") 873117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 874117395Skan "TARGET_ALTIVEC" 875117395Skan "vminuh %0,%1,%2" 876117395Skan [(set_attr "type" "vecsimple")]) 877117395Skan 878117395Skan(define_insn "sminv8hi3" 879117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 880117395Skan (smin:V8HI (match_operand:V8HI 1 "register_operand" "v") 881117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 882117395Skan "TARGET_ALTIVEC" 883117395Skan "vminsh %0,%1,%2" 884117395Skan [(set_attr "type" "vecsimple")]) 885117395Skan 886117395Skan(define_insn "uminv4si3" 887117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 888117395Skan (umin:V4SI (match_operand:V4SI 1 "register_operand" "v") 889117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 890117395Skan "TARGET_ALTIVEC" 891117395Skan "vminuw %0,%1,%2" 892117395Skan [(set_attr "type" "vecsimple")]) 893117395Skan 894117395Skan(define_insn "sminv4si3" 895117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 896117395Skan (smin:V4SI (match_operand:V4SI 1 "register_operand" "v") 897117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 898117395Skan "TARGET_ALTIVEC" 899117395Skan "vminsw %0,%1,%2" 900117395Skan [(set_attr "type" "vecsimple")]) 901117395Skan 902117395Skan(define_insn "sminv4sf3" 903117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 904117395Skan (smin:V4SF (match_operand:V4SF 1 "register_operand" "v") 905117395Skan (match_operand:V4SF 2 "register_operand" "v")))] 906117395Skan "TARGET_ALTIVEC" 907117395Skan "vminfp %0,%1,%2" 908117395Skan [(set_attr "type" "veccmp")]) 909117395Skan 910117395Skan(define_insn "altivec_vmuleub" 911117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 912117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v") 913117395Skan (match_operand:V16QI 2 "register_operand" "v")] 83))] 914117395Skan "TARGET_ALTIVEC" 915117395Skan "vmuleub %0,%1,%2" 916117395Skan [(set_attr "type" "veccomplex")]) 917117395Skan 918117395Skan(define_insn "altivec_vmulesb" 919117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 920117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v") 921117395Skan (match_operand:V16QI 2 "register_operand" "v")] 84))] 922117395Skan "TARGET_ALTIVEC" 923117395Skan "vmulesb %0,%1,%2" 924117395Skan [(set_attr "type" "veccomplex")]) 925117395Skan 926117395Skan(define_insn "altivec_vmuleuh" 927117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 928117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 929117395Skan (match_operand:V8HI 2 "register_operand" "v")] 85))] 930117395Skan "TARGET_ALTIVEC" 931117395Skan "vmuleuh %0,%1,%2" 932117395Skan [(set_attr "type" "veccomplex")]) 933117395Skan 934117395Skan(define_insn "altivec_vmulesh" 935117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 936117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 937117395Skan (match_operand:V8HI 2 "register_operand" "v")] 86))] 938117395Skan "TARGET_ALTIVEC" 939117395Skan "vmulesh %0,%1,%2" 940117395Skan [(set_attr "type" "veccomplex")]) 941117395Skan 942117395Skan(define_insn "altivec_vmuloub" 943117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 944117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v") 945117395Skan (match_operand:V16QI 2 "register_operand" "v")] 87))] 946117395Skan "TARGET_ALTIVEC" 947117395Skan "vmuloub %0,%1,%2" 948117395Skan [(set_attr "type" "veccomplex")]) 949117395Skan 950117395Skan(define_insn "altivec_vmulosb" 951117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 952117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v") 953117395Skan (match_operand:V16QI 2 "register_operand" "v")] 88))] 954117395Skan "TARGET_ALTIVEC" 955117395Skan "vmulosb %0,%1,%2" 956117395Skan [(set_attr "type" "veccomplex")]) 957117395Skan 958117395Skan(define_insn "altivec_vmulouh" 959117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 960117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 961117395Skan (match_operand:V8HI 2 "register_operand" "v")] 89))] 962117395Skan "TARGET_ALTIVEC" 963117395Skan "vmulouh %0,%1,%2" 964117395Skan [(set_attr "type" "veccomplex")]) 965117395Skan 966117395Skan(define_insn "altivec_vmulosh" 967117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 968117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 969117395Skan (match_operand:V8HI 2 "register_operand" "v")] 90))] 970117395Skan "TARGET_ALTIVEC" 971117395Skan "vmulosh %0,%1,%2" 972117395Skan [(set_attr "type" "veccomplex")]) 973117395Skan 974117395Skan(define_insn "altivec_vnor" 975117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 976117395Skan (not:V4SI (ior:V4SI (match_operand:V4SI 1 "register_operand" "v") 977117395Skan (match_operand:V4SI 2 "register_operand" "v"))))] 978117395Skan "TARGET_ALTIVEC" 979117395Skan "vnor %0,%1,%2" 980117395Skan [(set_attr "type" "vecsimple")]) 981117395Skan 982117395Skan(define_insn "iorv4si3" 983117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 984117395Skan (ior:V4SI (match_operand:V4SI 1 "register_operand" "v") 985117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 986117395Skan "TARGET_ALTIVEC" 987117395Skan "vor %0,%1,%2" 988117395Skan [(set_attr "type" "vecsimple")]) 989117395Skan 990117395Skan(define_insn "altivec_vpkuhum" 991117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 992117395Skan (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") 993117395Skan (match_operand:V8HI 2 "register_operand" "v")] 93))] 994117395Skan "TARGET_ALTIVEC" 995117395Skan "vpkuhum %0,%1,%2" 996117395Skan [(set_attr "type" "vecperm")]) 997117395Skan 998117395Skan(define_insn "altivec_vpkuwum" 999117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1000117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1001117395Skan (match_operand:V4SI 2 "register_operand" "v")] 94))] 1002117395Skan "TARGET_ALTIVEC" 1003117395Skan "vpkuwum %0,%1,%2" 1004117395Skan [(set_attr "type" "vecperm")]) 1005117395Skan 1006117395Skan(define_insn "altivec_vpkpx" 1007117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1008117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1009117395Skan (match_operand:V4SI 2 "register_operand" "v")] 95))] 1010117395Skan "TARGET_ALTIVEC" 1011117395Skan "vpkpx %0,%1,%2" 1012117395Skan [(set_attr "type" "vecperm")]) 1013117395Skan 1014117395Skan(define_insn "altivec_vpkuhss" 1015117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1016117395Skan (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") 1017117395Skan (match_operand:V8HI 2 "register_operand" "v")] 96)) 1018117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1019117395Skan "TARGET_ALTIVEC" 1020117395Skan "vpkuhss %0,%1,%2" 1021117395Skan [(set_attr "type" "vecperm")]) 1022117395Skan 1023117395Skan(define_insn "altivec_vpkshss" 1024117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1025117395Skan (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") 1026117395Skan (match_operand:V8HI 2 "register_operand" "v")] 97)) 1027117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1028117395Skan "TARGET_ALTIVEC" 1029117395Skan "vpkshss %0,%1,%2" 1030117395Skan [(set_attr "type" "vecperm")]) 1031117395Skan 1032117395Skan(define_insn "altivec_vpkuwss" 1033117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1034117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1035117395Skan (match_operand:V4SI 2 "register_operand" "v")] 98)) 1036117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1037117395Skan "TARGET_ALTIVEC" 1038117395Skan "vpkuwss %0,%1,%2" 1039117395Skan [(set_attr "type" "vecperm")]) 1040117395Skan 1041117395Skan(define_insn "altivec_vpkswss" 1042117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1043117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1044117395Skan (match_operand:V4SI 2 "register_operand" "v")] 99)) 1045117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1046117395Skan "TARGET_ALTIVEC" 1047117395Skan "vpkswss %0,%1,%2" 1048117395Skan [(set_attr "type" "vecperm")]) 1049117395Skan 1050117395Skan(define_insn "altivec_vpkuhus" 1051117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1052117395Skan (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") 1053117395Skan (match_operand:V8HI 2 "register_operand" "v")] 100)) 1054117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1055117395Skan "TARGET_ALTIVEC" 1056117395Skan "vpkuhus %0,%1,%2" 1057117395Skan [(set_attr "type" "vecperm")]) 1058117395Skan 1059117395Skan(define_insn "altivec_vpkshus" 1060117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1061117395Skan (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v") 1062117395Skan (match_operand:V8HI 2 "register_operand" "v")] 101)) 1063117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1064117395Skan "TARGET_ALTIVEC" 1065117395Skan "vpkshus %0,%1,%2" 1066117395Skan [(set_attr "type" "vecperm")]) 1067117395Skan 1068117395Skan(define_insn "altivec_vpkuwus" 1069117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1070117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1071117395Skan (match_operand:V4SI 2 "register_operand" "v")] 102)) 1072117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1073117395Skan "TARGET_ALTIVEC" 1074117395Skan "vpkuwus %0,%1,%2" 1075117395Skan [(set_attr "type" "vecperm")]) 1076117395Skan 1077117395Skan(define_insn "altivec_vpkswus" 1078117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1079117395Skan (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v") 1080117395Skan (match_operand:V4SI 2 "register_operand" "v")] 103)) 1081117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1082117395Skan "TARGET_ALTIVEC" 1083117395Skan "vpkswus %0,%1,%2" 1084117395Skan [(set_attr "type" "vecperm")]) 1085117395Skan 1086117395Skan(define_insn "altivec_vrlb" 1087117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1088117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1089117395Skan (match_operand:V16QI 2 "register_operand" "v")] 104))] 1090117395Skan "TARGET_ALTIVEC" 1091117395Skan "vrlb %0,%1,%2" 1092117395Skan [(set_attr "type" "vecsimple")]) 1093117395Skan 1094117395Skan(define_insn "altivec_vrlh" 1095117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1096117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1097117395Skan (match_operand:V8HI 2 "register_operand" "v")] 105))] 1098117395Skan "TARGET_ALTIVEC" 1099117395Skan "vrlh %0,%1,%2" 1100117395Skan [(set_attr "type" "vecsimple")]) 1101117395Skan 1102117395Skan(define_insn "altivec_vrlw" 1103117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1104117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1105117395Skan (match_operand:V4SI 2 "register_operand" "v")] 106))] 1106117395Skan "TARGET_ALTIVEC" 1107117395Skan "vrlw %0,%1,%2" 1108117395Skan [(set_attr "type" "vecsimple")]) 1109117395Skan 1110117395Skan(define_insn "altivec_vslb" 1111117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1112117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1113117395Skan (match_operand:V16QI 2 "register_operand" "v")] 107))] 1114117395Skan "TARGET_ALTIVEC" 1115117395Skan "vslb %0,%1,%2" 1116117395Skan [(set_attr "type" "vecsimple")]) 1117117395Skan 1118117395Skan(define_insn "altivec_vslh" 1119117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1120117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1121117395Skan (match_operand:V8HI 2 "register_operand" "v")] 108))] 1122117395Skan "TARGET_ALTIVEC" 1123117395Skan "vslh %0,%1,%2" 1124117395Skan [(set_attr "type" "vecsimple")]) 1125117395Skan 1126117395Skan(define_insn "altivec_vslw" 1127117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1128117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1129117395Skan (match_operand:V4SI 2 "register_operand" "v")] 109))] 1130117395Skan "TARGET_ALTIVEC" 1131117395Skan "vslw %0,%1,%2" 1132117395Skan [(set_attr "type" "vecsimple")]) 1133117395Skan 1134117395Skan(define_insn "altivec_vslw_v4sf" 1135117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1136117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") 1137117395Skan (match_operand:V4SF 2 "register_operand" "v")] 109))] 1138117395Skan "TARGET_ALTIVEC" 1139117395Skan "vslw %0,%1,%2" 1140117395Skan [(set_attr "type" "vecsimple")]) 1141117395Skan 1142117395Skan(define_insn "altivec_vsl" 1143117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1144117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1145117395Skan (match_operand:V4SI 2 "register_operand" "v")] 110))] 1146117395Skan "TARGET_ALTIVEC" 1147117395Skan "vsl %0,%1,%2" 1148117395Skan [(set_attr "type" "vecperm")]) 1149117395Skan 1150117395Skan(define_insn "altivec_vslo" 1151117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1152117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1153117395Skan (match_operand:V4SI 2 "register_operand" "v")] 111))] 1154117395Skan "TARGET_ALTIVEC" 1155117395Skan "vslo %0,%1,%2" 1156117395Skan [(set_attr "type" "vecperm")]) 1157117395Skan 1158117395Skan(define_insn "altivec_vsrb" 1159117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1160117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1161117395Skan (match_operand:V16QI 2 "register_operand" "v")] 112))] 1162117395Skan "TARGET_ALTIVEC" 1163117395Skan "vsrb %0,%1,%2" 1164117395Skan [(set_attr "type" "vecsimple")]) 1165117395Skan 1166117395Skan(define_insn "altivec_vsrh" 1167117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1168117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1169117395Skan (match_operand:V8HI 2 "register_operand" "v")] 113))] 1170117395Skan "TARGET_ALTIVEC" 1171117395Skan "vsrh %0,%1,%2" 1172117395Skan [(set_attr "type" "vecsimple")]) 1173117395Skan 1174117395Skan(define_insn "altivec_vsrw" 1175117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1176117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1177117395Skan (match_operand:V4SI 2 "register_operand" "v")] 114))] 1178117395Skan "TARGET_ALTIVEC" 1179117395Skan "vsrw %0,%1,%2" 1180117395Skan [(set_attr "type" "vecsimple")]) 1181117395Skan 1182117395Skan(define_insn "altivec_vsrab" 1183117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1184117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1185117395Skan (match_operand:V16QI 2 "register_operand" "v")] 115))] 1186117395Skan "TARGET_ALTIVEC" 1187117395Skan "vsrab %0,%1,%2" 1188117395Skan [(set_attr "type" "vecsimple")]) 1189117395Skan 1190117395Skan(define_insn "altivec_vsrah" 1191117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1192117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1193117395Skan (match_operand:V8HI 2 "register_operand" "v")] 116))] 1194117395Skan "TARGET_ALTIVEC" 1195117395Skan "vsrah %0,%1,%2" 1196117395Skan [(set_attr "type" "vecsimple")]) 1197117395Skan 1198117395Skan(define_insn "altivec_vsraw" 1199117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1200117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1201117395Skan (match_operand:V4SI 2 "register_operand" "v")] 117))] 1202117395Skan "TARGET_ALTIVEC" 1203117395Skan "vsraw %0,%1,%2" 1204117395Skan [(set_attr "type" "vecsimple")]) 1205117395Skan 1206117395Skan(define_insn "altivec_vsr" 1207117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1208117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1209117395Skan (match_operand:V4SI 2 "register_operand" "v")] 118))] 1210117395Skan "TARGET_ALTIVEC" 1211117395Skan "vsr %0,%1,%2" 1212117395Skan [(set_attr "type" "vecperm")]) 1213117395Skan 1214117395Skan(define_insn "altivec_vsro" 1215117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1216117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1217117395Skan (match_operand:V4SI 2 "register_operand" "v")] 119))] 1218117395Skan "TARGET_ALTIVEC" 1219117395Skan "vsro %0,%1,%2" 1220117395Skan [(set_attr "type" "vecperm")]) 1221117395Skan 1222117395Skan(define_insn "subv16qi3" 1223117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1224117395Skan (minus:V16QI (match_operand:V16QI 1 "register_operand" "v") 1225117395Skan (match_operand:V16QI 2 "register_operand" "v")))] 1226117395Skan "TARGET_ALTIVEC" 1227117395Skan "vsububm %0,%1,%2" 1228117395Skan [(set_attr "type" "vecsimple")]) 1229117395Skan 1230117395Skan(define_insn "subv8hi3" 1231117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1232117395Skan (minus:V8HI (match_operand:V8HI 1 "register_operand" "v") 1233117395Skan (match_operand:V8HI 2 "register_operand" "v")))] 1234117395Skan "TARGET_ALTIVEC" 1235117395Skan "vsubuhm %0,%1,%2" 1236117395Skan [(set_attr "type" "vecsimple")]) 1237117395Skan 1238117395Skan(define_insn "subv4si3" 1239117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1240117395Skan (minus:V4SI (match_operand:V4SI 1 "register_operand" "v") 1241117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 1242117395Skan "TARGET_ALTIVEC" 1243117395Skan "vsubuwm %0,%1,%2" 1244117395Skan [(set_attr "type" "vecsimple")]) 1245117395Skan 1246117395Skan(define_insn "subv4sf3" 1247117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1248117395Skan (minus:V4SF (match_operand:V4SF 1 "register_operand" "v") 1249117395Skan (match_operand:V4SF 2 "register_operand" "v")))] 1250117395Skan "TARGET_ALTIVEC" 1251117395Skan "vsubfp %0,%1,%2" 1252117395Skan [(set_attr "type" "vecfloat")]) 1253117395Skan 1254117395Skan(define_insn "altivec_vsubcuw" 1255117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1256117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1257117395Skan (match_operand:V4SI 2 "register_operand" "v")] 124))] 1258117395Skan "TARGET_ALTIVEC" 1259117395Skan "vsubcuw %0,%1,%2" 1260117395Skan [(set_attr "type" "vecsimple")]) 1261117395Skan 1262117395Skan(define_insn "altivec_vsububs" 1263117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1264117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1265117395Skan (match_operand:V16QI 2 "register_operand" "v")] 125)) 1266117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1267117395Skan "TARGET_ALTIVEC" 1268117395Skan "vsububs %0,%1,%2" 1269117395Skan [(set_attr "type" "vecsimple")]) 1270117395Skan 1271117395Skan(define_insn "altivec_vsubsbs" 1272117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1273117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1274117395Skan (match_operand:V16QI 2 "register_operand" "v")] 126)) 1275117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1276117395Skan "TARGET_ALTIVEC" 1277117395Skan "vsubsbs %0,%1,%2" 1278117395Skan [(set_attr "type" "vecsimple")]) 1279117395Skan 1280117395Skan(define_insn "altivec_vsubuhs" 1281117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1282117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1283117395Skan (match_operand:V8HI 2 "register_operand" "v")] 127)) 1284117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1285117395Skan "TARGET_ALTIVEC" 1286117395Skan "vsubuhs %0,%1,%2" 1287117395Skan [(set_attr "type" "vecsimple")]) 1288117395Skan 1289117395Skan(define_insn "altivec_vsubshs" 1290117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1291117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1292117395Skan (match_operand:V8HI 2 "register_operand" "v")] 128)) 1293117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1294117395Skan "TARGET_ALTIVEC" 1295117395Skan "vsubshs %0,%1,%2" 1296117395Skan [(set_attr "type" "vecsimple")]) 1297117395Skan 1298117395Skan(define_insn "altivec_vsubuws" 1299117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1300117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1301117395Skan (match_operand:V4SI 2 "register_operand" "v")] 129)) 1302117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1303117395Skan "TARGET_ALTIVEC" 1304117395Skan "vsubuws %0,%1,%2" 1305117395Skan [(set_attr "type" "vecsimple")]) 1306117395Skan 1307117395Skan(define_insn "altivec_vsubsws" 1308117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1309117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1310117395Skan (match_operand:V4SI 2 "register_operand" "v")] 130)) 1311117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1312117395Skan "TARGET_ALTIVEC" 1313117395Skan "vsubsws %0,%1,%2" 1314117395Skan [(set_attr "type" "vecsimple")]) 1315117395Skan 1316117395Skan(define_insn "altivec_vsum4ubs" 1317117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1318117395Skan (unspec:V4SI [(match_operand:V16QI 1 "register_operand" "v") 1319117395Skan (match_operand:V4SI 2 "register_operand" "v")] 131)) 1320117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1321117395Skan "TARGET_ALTIVEC" 1322117395Skan "vsum4ubs %0,%1,%2" 1323117395Skan [(set_attr "type" "veccomplex")]) 1324117395Skan 1325117395Skan(define_insn "altivec_vsum4sbs" 1326117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1327117395Skan (unspec:V4SI [(match_operand:V16QI 1 "register_operand" "v") 1328117395Skan (match_operand:V4SI 2 "register_operand" "v")] 132)) 1329117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1330117395Skan "TARGET_ALTIVEC" 1331117395Skan "vsum4sbs %0,%1,%2" 1332117395Skan [(set_attr "type" "veccomplex")]) 1333117395Skan 1334117395Skan(define_insn "altivec_vsum4shs" 1335117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1336117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v") 1337117395Skan (match_operand:V4SI 2 "register_operand" "v")] 133)) 1338117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1339117395Skan "TARGET_ALTIVEC" 1340117395Skan "vsum4shs %0,%1,%2" 1341117395Skan [(set_attr "type" "veccomplex")]) 1342117395Skan 1343117395Skan(define_insn "altivec_vsum2sws" 1344117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1345117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1346117395Skan (match_operand:V4SI 2 "register_operand" "v")] 134)) 1347117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1348117395Skan "TARGET_ALTIVEC" 1349117395Skan "vsum2sws %0,%1,%2" 1350117395Skan [(set_attr "type" "veccomplex")]) 1351117395Skan 1352117395Skan(define_insn "altivec_vsumsws" 1353117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1354117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1355117395Skan (match_operand:V4SI 2 "register_operand" "v")] 135)) 1356117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1357117395Skan "TARGET_ALTIVEC" 1358117395Skan "vsumsws %0,%1,%2" 1359117395Skan [(set_attr "type" "veccomplex")]) 1360117395Skan 1361132718Skan;; Vector xor's 1362117395Skan(define_insn "xorv4si3" 1363117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1364117395Skan (xor:V4SI (match_operand:V4SI 1 "register_operand" "v") 1365117395Skan (match_operand:V4SI 2 "register_operand" "v")))] 1366117395Skan "TARGET_ALTIVEC" 1367117395Skan "vxor %0,%1,%2" 1368117395Skan [(set_attr "type" "vecsimple")]) 1369117395Skan 1370132718Skan(define_insn "xorv8hi3" 1371132718Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1372132718Skan (xor:V8HI (match_operand:V8HI 1 "register_operand" "v") 1373132718Skan (match_operand:V8HI 2 "register_operand" "v")))] 1374132718Skan "TARGET_ALTIVEC" 1375132718Skan "vxor %0,%1,%2" 1376132718Skan [(set_attr "type" "vecsimple")]) 1377132718Skan 1378132718Skan(define_insn "xorv16qi3" 1379132718Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1380132718Skan (xor:V16QI (match_operand:V16QI 1 "register_operand" "v") 1381132718Skan (match_operand:V16QI 2 "register_operand" "v")))] 1382132718Skan "TARGET_ALTIVEC" 1383132718Skan "vxor %0,%1,%2" 1384132718Skan [(set_attr "type" "vecsimple")]) 1385132718Skan 1386117395Skan(define_insn "altivec_vspltb" 1387117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1388117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1389117395Skan (match_operand:QI 2 "immediate_operand" "i")] 136))] 1390117395Skan "TARGET_ALTIVEC" 1391117395Skan "vspltb %0,%1,%2" 1392117395Skan [(set_attr "type" "vecperm")]) 1393132718Skan;; End of vector xor's 1394117395Skan 1395117395Skan(define_insn "altivec_vsplth" 1396117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1397117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1398117395Skan (match_operand:QI 2 "immediate_operand" "i")] 137))] 1399117395Skan "TARGET_ALTIVEC" 1400117395Skan "vsplth %0,%1,%2" 1401117395Skan [(set_attr "type" "vecperm")]) 1402117395Skan 1403117395Skan(define_insn "altivec_vspltw" 1404117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1405117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1406117395Skan (match_operand:QI 2 "immediate_operand" "i")] 138))] 1407117395Skan "TARGET_ALTIVEC" 1408117395Skan "vspltw %0,%1,%2" 1409117395Skan [(set_attr "type" "vecperm")]) 1410117395Skan 1411117395Skan(define_insn "altivec_vspltisb" 1412117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1413132718Skan (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 1414132718Skan UNSPEC_VSPLTISB))] 1415117395Skan "TARGET_ALTIVEC" 1416132718Skan "vspltisb %0,%1" 1417132718Skan [(set_attr "type" "vecperm")]) 1418117395Skan 1419117395Skan(define_insn "altivec_vspltish" 1420117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1421132718Skan (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 1422132718Skan UNSPEC_VSPLTISH))] 1423117395Skan "TARGET_ALTIVEC" 1424132718Skan "vspltish %0,%1" 1425132718Skan [(set_attr "type" "vecperm")]) 1426117395Skan 1427117395Skan(define_insn "altivec_vspltisw" 1428117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1429132718Skan (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 1430132718Skan UNSPEC_VSPLTISW))] 1431117395Skan "TARGET_ALTIVEC" 1432132718Skan "vspltisw %0,%1" 1433132718Skan [(set_attr "type" "vecperm")]) 1434117395Skan 1435117395Skan(define_insn "altivec_vspltisw_v4sf" 1436117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1437117395Skan (unspec:V4SF [(match_operand:QI 1 "immediate_operand" "i")] 142))] 1438117395Skan "TARGET_ALTIVEC" 1439132718Skan "vspltisw %0,%1" 1440132718Skan [(set_attr "type" "vecperm")]) 1441117395Skan 1442117395Skan(define_insn "ftruncv4sf2" 1443117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1444117395Skan (fix:V4SF (match_operand:V4SF 1 "register_operand" "v")))] 1445117395Skan "TARGET_ALTIVEC" 1446132718Skan "vrfiz %0,%1" 1447117395Skan [(set_attr "type" "vecfloat")]) 1448117395Skan 1449117395Skan(define_insn "altivec_vperm_4si" 1450117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1451117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1452117395Skan (match_operand:V4SI 2 "register_operand" "v") 1453117395Skan (match_operand:V16QI 3 "register_operand" "v")] 144))] 1454117395Skan "TARGET_ALTIVEC" 1455117395Skan "vperm %0,%1,%2,%3" 1456117395Skan [(set_attr "type" "vecperm")]) 1457117395Skan 1458117395Skan(define_insn "altivec_vperm_4sf" 1459117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1460117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") 1461117395Skan (match_operand:V4SF 2 "register_operand" "v") 1462117395Skan (match_operand:V16QI 3 "register_operand" "v")] 145))] 1463117395Skan "TARGET_ALTIVEC" 1464117395Skan "vperm %0,%1,%2,%3" 1465117395Skan [(set_attr "type" "vecperm")]) 1466117395Skan 1467117395Skan(define_insn "altivec_vperm_8hi" 1468117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1469117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1470117395Skan (match_operand:V8HI 2 "register_operand" "v") 1471117395Skan (match_operand:V16QI 3 "register_operand" "v")] 146))] 1472117395Skan "TARGET_ALTIVEC" 1473117395Skan "vperm %0,%1,%2,%3" 1474117395Skan [(set_attr "type" "vecperm")]) 1475117395Skan 1476117395Skan(define_insn "altivec_vperm_16qi" 1477117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1478117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1479117395Skan (match_operand:V16QI 2 "register_operand" "v") 1480117395Skan (match_operand:V16QI 3 "register_operand" "v")] 147))] 1481117395Skan "TARGET_ALTIVEC" 1482117395Skan "vperm %0,%1,%2,%3" 1483117395Skan [(set_attr "type" "vecperm")]) 1484117395Skan 1485117395Skan(define_insn "altivec_vrfip" 1486117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1487117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 148))] 1488117395Skan "TARGET_ALTIVEC" 1489132718Skan "vrfip %0,%1" 1490117395Skan [(set_attr "type" "vecfloat")]) 1491117395Skan 1492117395Skan(define_insn "altivec_vrfin" 1493117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1494117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 149))] 1495117395Skan "TARGET_ALTIVEC" 1496132718Skan "vrfin %0,%1" 1497117395Skan [(set_attr "type" "vecfloat")]) 1498117395Skan 1499117395Skan(define_insn "altivec_vrfim" 1500117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1501117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 150))] 1502117395Skan "TARGET_ALTIVEC" 1503132718Skan "vrfim %0,%1" 1504117395Skan [(set_attr "type" "vecfloat")]) 1505117395Skan 1506117395Skan(define_insn "altivec_vcfux" 1507117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1508117395Skan (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") 1509117395Skan (match_operand:QI 2 "immediate_operand" "i")] 151))] 1510117395Skan "TARGET_ALTIVEC" 1511132718Skan "vcfux %0,%1,%2" 1512117395Skan [(set_attr "type" "vecfloat")]) 1513117395Skan 1514117395Skan(define_insn "altivec_vcfsx" 1515117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1516117395Skan (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v") 1517117395Skan (match_operand:QI 2 "immediate_operand" "i")] 152))] 1518117395Skan "TARGET_ALTIVEC" 1519132718Skan "vcfsx %0,%1,%2" 1520117395Skan [(set_attr "type" "vecfloat")]) 1521117395Skan 1522117395Skan(define_insn "altivec_vctuxs" 1523117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1524117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 1525117395Skan (match_operand:QI 2 "immediate_operand" "i")] 153)) 1526117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1527117395Skan "TARGET_ALTIVEC" 1528132718Skan "vctuxs %0,%1,%2" 1529117395Skan [(set_attr "type" "vecfloat")]) 1530117395Skan 1531117395Skan(define_insn "altivec_vctsxs" 1532117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1533117395Skan (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v") 1534117395Skan (match_operand:QI 2 "immediate_operand" "i")] 154)) 1535117395Skan (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))] 1536117395Skan "TARGET_ALTIVEC" 1537132718Skan "vctsxs %0,%1,%2" 1538117395Skan [(set_attr "type" "vecfloat")]) 1539117395Skan 1540117395Skan(define_insn "altivec_vlogefp" 1541117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1542117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 155))] 1543117395Skan "TARGET_ALTIVEC" 1544132718Skan "vlogefp %0,%1" 1545117395Skan [(set_attr "type" "vecfloat")]) 1546117395Skan 1547117395Skan(define_insn "altivec_vexptefp" 1548117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1549117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 156))] 1550117395Skan "TARGET_ALTIVEC" 1551132718Skan "vexptefp %0,%1" 1552117395Skan [(set_attr "type" "vecfloat")]) 1553117395Skan 1554117395Skan(define_insn "altivec_vrsqrtefp" 1555117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1556117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 157))] 1557117395Skan "TARGET_ALTIVEC" 1558132718Skan "vrsqrtefp %0,%1" 1559117395Skan [(set_attr "type" "vecfloat")]) 1560117395Skan 1561117395Skan(define_insn "altivec_vrefp" 1562117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1563117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v")] 158))] 1564117395Skan "TARGET_ALTIVEC" 1565132718Skan "vrefp %0,%1" 1566117395Skan [(set_attr "type" "vecfloat")]) 1567117395Skan 1568117395Skan(define_insn "altivec_vsel_4si" 1569117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1570117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1571117395Skan (match_operand:V4SI 2 "register_operand" "v") 1572117395Skan (match_operand:V4SI 3 "register_operand" "v")] 159))] 1573117395Skan "TARGET_ALTIVEC" 1574117395Skan "vsel %0,%1,%2,%3" 1575117395Skan [(set_attr "type" "vecperm")]) 1576117395Skan 1577117395Skan(define_insn "altivec_vsel_4sf" 1578117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1579117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") 1580117395Skan (match_operand:V4SF 2 "register_operand" "v") 1581117395Skan (match_operand:V4SI 3 "register_operand" "v")] 160))] 1582117395Skan "TARGET_ALTIVEC" 1583117395Skan "vsel %0,%1,%2,%3" 1584117395Skan [(set_attr "type" "vecperm")]) 1585117395Skan 1586117395Skan(define_insn "altivec_vsel_8hi" 1587117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1588117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1589117395Skan (match_operand:V8HI 2 "register_operand" "v") 1590117395Skan (match_operand:V8HI 3 "register_operand" "v")] 161))] 1591117395Skan "TARGET_ALTIVEC" 1592117395Skan "vsel %0,%1,%2,%3" 1593117395Skan [(set_attr "type" "vecperm")]) 1594117395Skan 1595117395Skan(define_insn "altivec_vsel_16qi" 1596117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1597117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1598117395Skan (match_operand:V16QI 2 "register_operand" "v") 1599117395Skan (match_operand:V16QI 3 "register_operand" "v")] 162))] 1600117395Skan "TARGET_ALTIVEC" 1601117395Skan "vsel %0,%1,%2,%3" 1602117395Skan [(set_attr "type" "vecperm")]) 1603117395Skan 1604117395Skan(define_insn "altivec_vsldoi_4si" 1605117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1606117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") 1607117395Skan (match_operand:V4SI 2 "register_operand" "v") 1608117395Skan (match_operand:QI 3 "immediate_operand" "i")] 163))] 1609117395Skan "TARGET_ALTIVEC" 1610132718Skan "vsldoi %0,%1,%2,%3" 1611117395Skan [(set_attr "type" "vecperm")]) 1612117395Skan 1613117395Skan(define_insn "altivec_vsldoi_4sf" 1614117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1615117395Skan (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") 1616117395Skan (match_operand:V4SF 2 "register_operand" "v") 1617117395Skan (match_operand:QI 3 "immediate_operand" "i")] 164))] 1618117395Skan "TARGET_ALTIVEC" 1619132718Skan "vsldoi %0,%1,%2,%3" 1620117395Skan [(set_attr "type" "vecperm")]) 1621117395Skan 1622117395Skan(define_insn "altivec_vsldoi_8hi" 1623117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1624117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") 1625117395Skan (match_operand:V8HI 2 "register_operand" "v") 1626117395Skan (match_operand:QI 3 "immediate_operand" "i")] 165))] 1627117395Skan "TARGET_ALTIVEC" 1628132718Skan "vsldoi %0,%1,%2,%3" 1629117395Skan [(set_attr "type" "vecperm")]) 1630117395Skan 1631117395Skan(define_insn "altivec_vsldoi_16qi" 1632117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1633117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") 1634117395Skan (match_operand:V16QI 2 "register_operand" "v") 1635117395Skan (match_operand:QI 3 "immediate_operand" "i")] 166))] 1636117395Skan "TARGET_ALTIVEC" 1637132718Skan "vsldoi %0,%1,%2,%3" 1638117395Skan [(set_attr "type" "vecperm")]) 1639117395Skan 1640117395Skan(define_insn "altivec_vupkhsb" 1641117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1642117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] 1643117395Skan "TARGET_ALTIVEC" 1644132718Skan "vupkhsb %0,%1" 1645117395Skan [(set_attr "type" "vecperm")]) 1646117395Skan 1647117395Skan(define_insn "altivec_vupkhpx" 1648117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1649117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] 1650117395Skan "TARGET_ALTIVEC" 1651132718Skan "vupkhpx %0,%1" 1652117395Skan [(set_attr "type" "vecperm")]) 1653117395Skan 1654117395Skan(define_insn "altivec_vupkhsh" 1655117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1656117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] 1657117395Skan "TARGET_ALTIVEC" 1658132718Skan "vupkhsh %0,%1" 1659117395Skan [(set_attr "type" "vecperm")]) 1660117395Skan 1661117395Skan(define_insn "altivec_vupklsb" 1662117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1663117395Skan (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] 1664117395Skan "TARGET_ALTIVEC" 1665132718Skan "vupklsb %0,%1" 1666117395Skan [(set_attr "type" "vecperm")]) 1667117395Skan 1668117395Skan(define_insn "altivec_vupklpx" 1669117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1670117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] 1671117395Skan "TARGET_ALTIVEC" 1672132718Skan "vupklpx %0,%1" 1673117395Skan [(set_attr "type" "vecperm")]) 1674117395Skan 1675117395Skan(define_insn "altivec_vupklsh" 1676117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1677117395Skan (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] 1678117395Skan "TARGET_ALTIVEC" 1679132718Skan "vupklsh %0,%1" 1680117395Skan [(set_attr "type" "vecperm")]) 1681117395Skan 1682117395Skan;; AltiVec predicates. 1683117395Skan 1684117395Skan(define_expand "cr6_test_for_zero" 1685117395Skan [(set (match_operand:SI 0 "register_operand" "=r") 1686117395Skan (eq:SI (reg:CC 74) 1687117395Skan (const_int 0)))] 1688117395Skan "TARGET_ALTIVEC" 1689117395Skan "") 1690117395Skan 1691117395Skan(define_expand "cr6_test_for_zero_reverse" 1692117395Skan [(set (match_operand:SI 0 "register_operand" "=r") 1693117395Skan (eq:SI (reg:CC 74) 1694117395Skan (const_int 0))) 1695117395Skan (set (match_dup 0) (minus:SI (const_int 1) (match_dup 0)))] 1696117395Skan "TARGET_ALTIVEC" 1697117395Skan "") 1698117395Skan 1699117395Skan(define_expand "cr6_test_for_lt" 1700117395Skan [(set (match_operand:SI 0 "register_operand" "=r") 1701117395Skan (lt:SI (reg:CC 74) 1702117395Skan (const_int 0)))] 1703117395Skan "TARGET_ALTIVEC" 1704117395Skan "") 1705117395Skan 1706117395Skan(define_expand "cr6_test_for_lt_reverse" 1707117395Skan [(set (match_operand:SI 0 "register_operand" "=r") 1708117395Skan (lt:SI (reg:CC 74) 1709117395Skan (const_int 0))) 1710117395Skan (set (match_dup 0) (minus:SI (const_int 1) (match_dup 0)))] 1711117395Skan "TARGET_ALTIVEC" 1712117395Skan "") 1713117395Skan 1714117395Skan;; We can get away with generating the opcode on the fly (%3 below) 1715117395Skan;; because all the predicates have the same scheduling parameters. 1716117395Skan 1717117395Skan(define_insn "altivec_predicate_v4si" 1718117395Skan [(set (reg:CC 74) 1719117395Skan (unspec:CC [(match_operand:V4SI 1 "register_operand" "v") 1720117395Skan (match_operand:V4SI 2 "register_operand" "v") 1721117395Skan (match_operand 3 "any_operand" "")] 173)) 1722117395Skan (clobber (match_scratch:V4SI 0 "=v"))] 1723117395Skan "TARGET_ALTIVEC" 1724117395Skan "%3 %0,%1,%2" 1725117395Skan[(set_attr "type" "veccmp")]) 1726117395Skan 1727117395Skan(define_insn "altivec_predicate_v4sf" 1728117395Skan [(set (reg:CC 74) 1729117395Skan (unspec:CC [(match_operand:V4SF 1 "register_operand" "v") 1730117395Skan (match_operand:V4SF 2 "register_operand" "v") 1731117395Skan (match_operand 3 "any_operand" "")] 174)) 1732117395Skan (clobber (match_scratch:V4SF 0 "=v"))] 1733117395Skan "TARGET_ALTIVEC" 1734117395Skan "%3 %0,%1,%2" 1735117395Skan[(set_attr "type" "veccmp")]) 1736117395Skan 1737117395Skan(define_insn "altivec_predicate_v8hi" 1738117395Skan [(set (reg:CC 74) 1739117395Skan (unspec:CC [(match_operand:V8HI 1 "register_operand" "v") 1740117395Skan (match_operand:V8HI 2 "register_operand" "v") 1741117395Skan (match_operand 3 "any_operand" "")] 175)) 1742117395Skan (clobber (match_scratch:V8HI 0 "=v"))] 1743117395Skan "TARGET_ALTIVEC" 1744117395Skan "%3 %0,%1,%2" 1745117395Skan[(set_attr "type" "veccmp")]) 1746117395Skan 1747117395Skan(define_insn "altivec_predicate_v16qi" 1748117395Skan [(set (reg:CC 74) 1749117395Skan (unspec:CC [(match_operand:V16QI 1 "register_operand" "v") 1750117395Skan (match_operand:V16QI 2 "register_operand" "v") 1751117395Skan (match_operand 3 "any_operand" "")] 175)) 1752117395Skan (clobber (match_scratch:V16QI 0 "=v"))] 1753117395Skan "TARGET_ALTIVEC" 1754117395Skan "%3 %0,%1,%2" 1755117395Skan[(set_attr "type" "veccmp")]) 1756117395Skan 1757117395Skan(define_insn "altivec_mtvscr" 1758117395Skan [(set (reg:SI 110) 1759117395Skan (unspec_volatile:SI 1760117395Skan [(match_operand:V4SI 0 "register_operand" "v")] 186))] 1761117395Skan "TARGET_ALTIVEC" 1762117395Skan "mtvscr %0" 1763117395Skan [(set_attr "type" "vecsimple")]) 1764117395Skan 1765117395Skan(define_insn "altivec_mfvscr" 1766117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1767117395Skan (unspec_volatile:V8HI [(reg:SI 110)] 187))] 1768117395Skan "TARGET_ALTIVEC" 1769117395Skan "mfvscr %0" 1770117395Skan [(set_attr "type" "vecsimple")]) 1771117395Skan 1772117395Skan(define_insn "altivec_dssall" 1773117395Skan [(unspec [(const_int 0)] 188)] 1774117395Skan "TARGET_ALTIVEC" 1775117395Skan "dssall" 1776117395Skan [(set_attr "type" "vecsimple")]) 1777117395Skan 1778117395Skan(define_insn "altivec_dss" 1779117395Skan [(unspec [(match_operand:QI 0 "immediate_operand" "i")] 189)] 1780117395Skan "TARGET_ALTIVEC" 1781117395Skan "dss %0" 1782117395Skan [(set_attr "type" "vecsimple")]) 1783117395Skan 1784117395Skan(define_insn "altivec_dst" 1785132718Skan [(unspec [(match_operand:V4SI 0 "memory_operand" "Q") 1786117395Skan (match_operand:SI 1 "register_operand" "r") 1787117395Skan (match_operand:QI 2 "immediate_operand" "i")] 190)] 1788117395Skan "TARGET_ALTIVEC" 1789132718Skan "dst %P0,%1,%2" 1790117395Skan [(set_attr "type" "vecsimple")]) 1791117395Skan 1792117395Skan(define_insn "altivec_dstt" 1793132718Skan [(unspec [(match_operand:V4SI 0 "memory_operand" "Q") 1794117395Skan (match_operand:SI 1 "register_operand" "r") 1795117395Skan (match_operand:QI 2 "immediate_operand" "i")] 191)] 1796117395Skan "TARGET_ALTIVEC" 1797132718Skan "dstt %P0,%1,%2" 1798117395Skan [(set_attr "type" "vecsimple")]) 1799117395Skan 1800117395Skan(define_insn "altivec_dstst" 1801132718Skan [(unspec [(match_operand:V4SI 0 "memory_operand" "Q") 1802117395Skan (match_operand:SI 1 "register_operand" "r") 1803117395Skan (match_operand:QI 2 "immediate_operand" "i")] 192)] 1804117395Skan "TARGET_ALTIVEC" 1805132718Skan "dstst %P0,%1,%2" 1806117395Skan [(set_attr "type" "vecsimple")]) 1807117395Skan 1808117395Skan(define_insn "altivec_dststt" 1809132718Skan [(unspec [(match_operand:V4SI 0 "memory_operand" "Q") 1810117395Skan (match_operand:SI 1 "register_operand" "r") 1811117395Skan (match_operand:QI 2 "immediate_operand" "i")] 193)] 1812117395Skan "TARGET_ALTIVEC" 1813132718Skan "dststt %P0,%1,%2" 1814117395Skan [(set_attr "type" "vecsimple")]) 1815117395Skan 1816117395Skan(define_insn "altivec_lvsl" 1817117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1818132718Skan (unspec:V16QI [(match_operand 1 "memory_operand" "m")] 194))] 1819117395Skan "TARGET_ALTIVEC" 1820132718Skan "lvsl %0,%y1" 1821117395Skan [(set_attr "type" "vecload")]) 1822117395Skan 1823117395Skan(define_insn "altivec_lvsr" 1824117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1825132718Skan (unspec:V16QI [(match_operand 1 "memory_operand" "m")] 195))] 1826117395Skan "TARGET_ALTIVEC" 1827132718Skan "lvsr %0,%y1" 1828117395Skan [(set_attr "type" "vecload")]) 1829117395Skan 1830117395Skan;; Parallel some of the LVE* and STV*'s with unspecs because some have 1831117395Skan;; identical rtl but different instructions-- and gcc gets confused. 1832117395Skan 1833117395Skan(define_insn "altivec_lvebx" 1834117395Skan [(parallel 1835117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1836132718Skan (match_operand:V16QI 1 "memory_operand" "m")) 1837117395Skan (unspec [(const_int 0)] 196)])] 1838117395Skan "TARGET_ALTIVEC" 1839132718Skan "lvebx %0,%y1" 1840117395Skan [(set_attr "type" "vecload")]) 1841117395Skan 1842117395Skan(define_insn "altivec_lvehx" 1843117395Skan [(parallel 1844117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1845132718Skan (match_operand:V8HI 1 "memory_operand" "m")) 1846117395Skan (unspec [(const_int 0)] 197)])] 1847117395Skan "TARGET_ALTIVEC" 1848132718Skan "lvehx %0,%y1" 1849117395Skan [(set_attr "type" "vecload")]) 1850117395Skan 1851117395Skan(define_insn "altivec_lvewx" 1852117395Skan [(parallel 1853117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1854132718Skan (match_operand:V4SI 1 "memory_operand" "m")) 1855117395Skan (unspec [(const_int 0)] 198)])] 1856117395Skan "TARGET_ALTIVEC" 1857132718Skan "lvewx %0,%y1" 1858117395Skan [(set_attr "type" "vecload")]) 1859117395Skan 1860117395Skan(define_insn "altivec_lvxl" 1861117395Skan [(parallel 1862117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1863132718Skan (match_operand:V4SI 1 "memory_operand" "m")) 1864117395Skan (unspec [(const_int 0)] 213)])] 1865117395Skan "TARGET_ALTIVEC" 1866132718Skan "lvxl %0,%y1" 1867117395Skan [(set_attr "type" "vecload")]) 1868117395Skan 1869117395Skan(define_insn "altivec_lvx" 1870117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1871132718Skan (match_operand:V4SI 1 "memory_operand" "m"))] 1872117395Skan "TARGET_ALTIVEC" 1873132718Skan "lvx %0,%y1" 1874117395Skan [(set_attr "type" "vecload")]) 1875117395Skan 1876117395Skan(define_insn "altivec_stvx" 1877117395Skan [(parallel 1878132718Skan [(set (match_operand:V4SI 0 "memory_operand" "=m") 1879132718Skan (match_operand:V4SI 1 "register_operand" "v")) 1880117395Skan (unspec [(const_int 0)] 201)])] 1881117395Skan "TARGET_ALTIVEC" 1882132718Skan "stvx %1,%y0" 1883117395Skan [(set_attr "type" "vecstore")]) 1884117395Skan 1885117395Skan(define_insn "altivec_stvxl" 1886117395Skan [(parallel 1887132718Skan [(set (match_operand:V4SI 0 "memory_operand" "=m") 1888132718Skan (match_operand:V4SI 1 "register_operand" "v")) 1889117395Skan (unspec [(const_int 0)] 202)])] 1890117395Skan "TARGET_ALTIVEC" 1891132718Skan "stvxl %1,%y0" 1892117395Skan [(set_attr "type" "vecstore")]) 1893117395Skan 1894117395Skan(define_insn "altivec_stvebx" 1895117395Skan [(parallel 1896132718Skan [(set (match_operand:V16QI 0 "memory_operand" "=m") 1897132718Skan (match_operand:V16QI 1 "register_operand" "v")) 1898117395Skan (unspec [(const_int 0)] 203)])] 1899117395Skan "TARGET_ALTIVEC" 1900132718Skan "stvebx %1,%y0" 1901117395Skan [(set_attr "type" "vecstore")]) 1902117395Skan 1903117395Skan(define_insn "altivec_stvehx" 1904117395Skan [(parallel 1905132718Skan [(set (match_operand:V8HI 0 "memory_operand" "=m") 1906132718Skan (match_operand:V8HI 1 "register_operand" "v")) 1907117395Skan (unspec [(const_int 0)] 204)])] 1908117395Skan "TARGET_ALTIVEC" 1909132718Skan "stvehx %1,%y0" 1910117395Skan [(set_attr "type" "vecstore")]) 1911117395Skan 1912117395Skan(define_insn "altivec_stvewx" 1913117395Skan [(parallel 1914132718Skan [(set (match_operand:V4SI 0 "memory_operand" "=m") 1915132718Skan (match_operand:V4SI 1 "register_operand" "v")) 1916117395Skan (unspec [(const_int 0)] 205)])] 1917117395Skan "TARGET_ALTIVEC" 1918132718Skan "stvewx %1,%y0" 1919117395Skan [(set_attr "type" "vecstore")]) 1920117395Skan 1921117395Skan(define_insn "absv16qi2" 1922117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1923117395Skan (abs:V16QI (match_operand:V16QI 1 "register_operand" "v"))) 1924117395Skan (clobber (match_scratch:V16QI 2 "=&v")) 1925117395Skan (clobber (match_scratch:V16QI 3 "=&v"))] 1926117395Skan "TARGET_ALTIVEC" 1927117395Skan "vspltisb %2,0\;vsububm %3,%2,%1\;vmaxsb %0,%1,%3" 1928132718Skan [(set_attr "type" "vecsimple") 1929117395Skan (set_attr "length" "12")]) 1930117395Skan 1931117395Skan(define_insn "absv8hi2" 1932117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1933117395Skan (abs:V8HI (match_operand:V8HI 1 "register_operand" "v"))) 1934117395Skan (clobber (match_scratch:V8HI 2 "=&v")) 1935117395Skan (clobber (match_scratch:V8HI 3 "=&v"))] 1936117395Skan "TARGET_ALTIVEC" 1937117395Skan "vspltisb %2,0\;vsubuhm %3,%2,%1\;vmaxsh %0,%1,%3" 1938132718Skan [(set_attr "type" "vecsimple") 1939117395Skan (set_attr "length" "12")]) 1940117395Skan 1941117395Skan(define_insn "absv4si2" 1942117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1943117395Skan (abs:V4SI (match_operand:V4SI 1 "register_operand" "v"))) 1944117395Skan (clobber (match_scratch:V4SI 2 "=&v")) 1945117395Skan (clobber (match_scratch:V4SI 3 "=&v"))] 1946117395Skan "TARGET_ALTIVEC" 1947117395Skan "vspltisb %2,0\;vsubuwm %3,%2,%1\;vmaxsw %0,%1,%3" 1948132718Skan [(set_attr "type" "vecsimple") 1949117395Skan (set_attr "length" "12")]) 1950117395Skan 1951117395Skan(define_insn "absv4sf2" 1952117395Skan [(set (match_operand:V4SF 0 "register_operand" "=v") 1953117395Skan (abs:V4SF (match_operand:V4SF 1 "register_operand" "v"))) 1954117395Skan (clobber (match_scratch:V4SF 2 "=&v")) 1955117395Skan (clobber (match_scratch:V4SF 3 "=&v"))] 1956117395Skan "TARGET_ALTIVEC" 1957132718Skan "vspltisw %2,-1\;vslw %3,%2,%2\;vandc %0,%1,%3" 1958132718Skan [(set_attr "type" "vecsimple") 1959117395Skan (set_attr "length" "12")]) 1960117395Skan 1961117395Skan(define_insn "altivec_abss_v16qi" 1962117395Skan [(set (match_operand:V16QI 0 "register_operand" "=v") 1963117395Skan (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")] 210)) 1964117395Skan (clobber (match_scratch:V16QI 2 "=&v")) 1965117395Skan (clobber (match_scratch:V16QI 3 "=&v"))] 1966117395Skan "TARGET_ALTIVEC" 1967117395Skan "vspltisb %2,0\;vsubsbs %3,%2,%1\;vmaxsb %0,%1,%3" 1968132718Skan [(set_attr "type" "vecsimple") 1969117395Skan (set_attr "length" "12")]) 1970117395Skan 1971117395Skan(define_insn "altivec_abss_v8hi" 1972117395Skan [(set (match_operand:V8HI 0 "register_operand" "=v") 1973117395Skan (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")] 211)) 1974117395Skan (clobber (match_scratch:V8HI 2 "=&v")) 1975117395Skan (clobber (match_scratch:V8HI 3 "=&v"))] 1976117395Skan "TARGET_ALTIVEC" 1977117395Skan "vspltisb %2,0\;vsubshs %3,%2,%1\;vmaxsh %0,%1,%3" 1978132718Skan [(set_attr "type" "vecsimple") 1979117395Skan (set_attr "length" "12")]) 1980117395Skan 1981117395Skan(define_insn "altivec_abss_v4si" 1982117395Skan [(set (match_operand:V4SI 0 "register_operand" "=v") 1983117395Skan (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")] 212)) 1984117395Skan (clobber (match_scratch:V4SI 2 "=&v")) 1985117395Skan (clobber (match_scratch:V4SI 3 "=&v"))] 1986117395Skan "TARGET_ALTIVEC" 1987117395Skan "vspltisb %2,0\;vsubsws %3,%2,%1\;vmaxsw %0,%1,%3" 1988132718Skan [(set_attr "type" "vecsimple") 1989117395Skan (set_attr "length" "12")]) 1990