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