OSDN Git Service

* config/rs6000/spe.md (SPE_ACC_REGNO): Delete definition.
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / spe.md
1 ;; e500 SPE description
2 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
3 ;; Free Software Foundation, Inc.
4 ;; Contributed by Aldy Hernandez (aldy@quesejoda.com)
5
6 ;; This file is part of GCC.
7
8 ;; GCC is free software; you can redistribute it and/or modify it
9 ;; under the terms of the GNU General Public License as published
10 ;; by the Free Software Foundation; either version 2, or (at your
11 ;; option) any later version.
12
13 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
14 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16 ;; License for more details.
17
18 ;; You should have received a copy of the GNU General Public License
19 ;; along with GCC; see the file COPYING.  If not, write to the
20 ;; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 ;; MA 02110-1301, USA.
22
23 (define_constants
24   [(CMPDFEQ_GPR         1006)
25    (TSTDFEQ_GPR         1007)
26    (CMPDFGT_GPR         1008)
27    (TSTDFGT_GPR         1009)
28    (CMPDFLT_GPR         1010)
29    (TSTDFLT_GPR         1011)
30    (CMPTFEQ_GPR         1012)
31    (TSTTFEQ_GPR         1013)
32    (CMPTFGT_GPR         1014)
33    (TSTTFGT_GPR         1015)
34    (CMPTFLT_GPR         1016)
35    (TSTTFLT_GPR         1017)
36    (E500_CR_IOR_COMPARE 1018)
37    ])
38
39 ;; Modes using a 64-bit register.
40 (define_mode_macro SPE64 [DF V4HI V2SF V1DI V2SI])
41
42 ;; Likewise, but allow TFmode (two registers) as well.
43 (define_mode_macro SPE64TF [DF V4HI V2SF V1DI V2SI TF])
44
45 ;; DImode and TImode.
46 (define_mode_macro DITI [DI TI])
47
48 (define_insn "*negsf2_gpr"
49   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
50         (neg:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
51   "TARGET_HARD_FLOAT && !TARGET_FPRS"
52   "efsneg %0,%1"
53   [(set_attr "type" "fpsimple")])
54
55 (define_insn "*abssf2_gpr"
56   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
57         (abs:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
58   "TARGET_HARD_FLOAT && !TARGET_FPRS"
59   "efsabs %0,%1"
60   [(set_attr "type" "fpsimple")])
61
62 (define_insn "*nabssf2_gpr"
63   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
64         (neg:SF (abs:SF (match_operand:SF 1 "gpc_reg_operand" "r"))))]
65   "TARGET_HARD_FLOAT && !TARGET_FPRS"
66   "efsnabs %0,%1"
67   [(set_attr "type" "fpsimple")])
68
69 (define_insn "*addsf3_gpr"
70   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
71         (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%r")
72                  (match_operand:SF 2 "gpc_reg_operand" "r")))]
73   "TARGET_HARD_FLOAT && !TARGET_FPRS"
74   "efsadd %0,%1,%2"
75   [(set_attr "type" "fp")])
76
77 (define_insn "*subsf3_gpr"
78   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
79         (minus:SF (match_operand:SF 1 "gpc_reg_operand" "r")
80                   (match_operand:SF 2 "gpc_reg_operand" "r")))]
81   "TARGET_HARD_FLOAT && !TARGET_FPRS"
82   "efssub %0,%1,%2"
83   [(set_attr "type" "fp")])
84
85 (define_insn "*mulsf3_gpr"
86   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
87         (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%r")
88                  (match_operand:SF 2 "gpc_reg_operand" "r")))]
89   "TARGET_HARD_FLOAT && !TARGET_FPRS"
90   "efsmul %0,%1,%2"
91   [(set_attr "type" "fp")])
92
93 (define_insn "*divsf3_gpr"
94   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
95         (div:SF (match_operand:SF 1 "gpc_reg_operand" "r")
96                 (match_operand:SF 2 "gpc_reg_operand" "r")))]
97   "TARGET_HARD_FLOAT && !TARGET_FPRS"
98   "efsdiv %0,%1,%2"
99   [(set_attr "type" "vecfdiv")])
100
101 ;; Floating point conversion instructions.
102
103 (define_insn "fixuns_truncdfsi2"
104   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
105         (unsigned_fix:SI (match_operand:DF 1 "gpc_reg_operand" "r")))]
106   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
107   "efdctuiz %0,%1"
108   [(set_attr "type" "fp")])
109
110 (define_insn "spe_extendsfdf2"
111   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
112         (float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "r")))]
113   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
114   "efdcfs %0,%1"
115   [(set_attr "type" "fp")])
116
117 (define_insn "spe_fixuns_truncsfsi2"
118   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
119         (unsigned_fix:SI (match_operand:SF 1 "gpc_reg_operand" "r")))]
120   "TARGET_HARD_FLOAT && !TARGET_FPRS"
121   "efsctuiz %0,%1"
122   [(set_attr "type" "fp")])
123
124 (define_insn "spe_fix_truncsfsi2"
125   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
126         (fix:SI (match_operand:SF 1 "gpc_reg_operand" "r")))]
127   "TARGET_HARD_FLOAT && !TARGET_FPRS"
128   "efsctsiz %0,%1"
129   [(set_attr "type" "fp")])
130
131 (define_insn "spe_fix_truncdfsi2"
132   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
133         (fix:SI (match_operand:DF 1 "gpc_reg_operand" "r")))]
134   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
135   "efdctsiz %0,%1"
136   [(set_attr "type" "fp")])
137
138 (define_insn "spe_floatunssisf2"
139   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
140         (unsigned_float:SF (match_operand:SI 1 "gpc_reg_operand" "r")))]
141   "TARGET_HARD_FLOAT && !TARGET_FPRS"
142   "efscfui %0,%1"
143   [(set_attr "type" "fp")])
144
145 (define_insn "spe_floatunssidf2"
146   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
147         (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))]
148   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
149   "efdcfui %0,%1"
150   [(set_attr "type" "fp")])
151
152 (define_insn "spe_floatsisf2"
153   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
154         (float:SF (match_operand:SI 1 "gpc_reg_operand" "r")))]
155   "TARGET_HARD_FLOAT && !TARGET_FPRS"
156   "efscfsi %0,%1"
157   [(set_attr "type" "fp")])
158
159 (define_insn "spe_floatsidf2"
160   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
161         (float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))]
162   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
163   "efdcfsi %0,%1"
164   [(set_attr "type" "fp")])
165
166 ;; SPE SIMD instructions
167
168 (define_insn "spe_evabs"
169   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
170         (abs:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
171   "TARGET_SPE"
172   "evabs %0,%1"
173   [(set_attr "type" "vecsimple")
174    (set_attr  "length" "4")])
175
176 (define_insn "spe_evandc"
177   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
178         (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
179                   (not:V2SI (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
180   "TARGET_SPE"
181   "evandc %0,%1,%2"
182   [(set_attr "type" "vecsimple")
183    (set_attr  "length" "4")])
184
185 (define_insn "spe_evand"
186   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
187         (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
188                   (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
189   "TARGET_SPE"
190   "evand %0,%1,%2"
191   [(set_attr "type" "vecsimple")
192    (set_attr  "length" "4")])
193
194 ;; Vector compare instructions
195
196 (define_insn "spe_evcmpeq"
197   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
198         (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
199                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 500))]
200   "TARGET_SPE"
201   "evcmpeq %0,%1,%2"
202   [(set_attr "type" "veccmp")
203    (set_attr  "length" "4")])
204
205 (define_insn "spe_evcmpgts"
206   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
207         (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
208                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 501))]
209   "TARGET_SPE"
210   "evcmpgts %0,%1,%2"
211   [(set_attr "type" "veccmp")
212    (set_attr  "length" "4")])
213
214 (define_insn "spe_evcmpgtu"
215   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
216         (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
217                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 502))]
218   "TARGET_SPE"
219   "evcmpgtu %0,%1,%2"
220   [(set_attr "type" "veccmp")
221    (set_attr  "length" "4")])
222
223 (define_insn "spe_evcmplts"
224   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
225         (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
226                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 503))]
227   "TARGET_SPE"
228   "evcmplts %0,%1,%2"
229   [(set_attr "type" "veccmp")
230    (set_attr  "length" "4")])
231
232 (define_insn "spe_evcmpltu"
233   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
234         (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
235                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 504))]
236   "TARGET_SPE"
237   "evcmpltu %0,%1,%2"
238   [(set_attr "type" "veccmp")
239    (set_attr  "length" "4")])
240
241 ;; Floating point vector compare instructions
242
243 (define_insn "spe_evfscmpeq"
244   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
245         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
246                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 538))
247    (clobber (reg:SI SPEFSCR_REGNO))]
248   "TARGET_SPE"
249   "evfscmpeq %0,%1,%2"
250   [(set_attr "type" "veccmp")
251    (set_attr  "length" "4")])
252
253 (define_insn "spe_evfscmpgt"
254   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
255         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
256                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 539))
257    (clobber (reg:SI SPEFSCR_REGNO))]
258   "TARGET_SPE"
259   "evfscmpgt %0,%1,%2"
260   [(set_attr "type" "veccmp")
261    (set_attr  "length" "4")])
262
263 (define_insn "spe_evfscmplt"
264   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
265         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
266                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 540))
267    (clobber (reg:SI SPEFSCR_REGNO))]
268   "TARGET_SPE"
269   "evfscmplt %0,%1,%2"
270   [(set_attr "type" "veccmp")
271    (set_attr  "length" "4")])
272
273 (define_insn "spe_evfststeq"
274   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
275         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
276                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 541))]
277   "TARGET_SPE"
278   "evfststeq %0,%1,%2"
279   [(set_attr "type" "veccmp")
280    (set_attr  "length" "4")])
281
282 (define_insn "spe_evfststgt"
283   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
284         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
285                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 542))]
286   "TARGET_SPE"
287   "evfststgt %0,%1,%2"
288   [(set_attr "type" "veccmp")
289    (set_attr  "length" "4")])
290
291 (define_insn "spe_evfststlt"
292   [(set (match_operand:CC 0 "cc_reg_operand" "=y")
293         (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
294                     (match_operand:V2SF 2 "gpc_reg_operand" "r")] 543))]
295   "TARGET_SPE"
296   "evfststlt %0,%1,%2"
297   [(set_attr "type" "veccmp")
298    (set_attr  "length" "4")])
299
300 ;; End of vector compare instructions
301
302 (define_insn "spe_evcntlsw"
303   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
304         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 505))]
305   "TARGET_SPE"
306   "evcntlsw %0,%1"
307   [(set_attr "type" "vecsimple")
308    (set_attr  "length" "4")])
309
310 (define_insn "spe_evcntlzw"
311   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
312         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 506))]
313   "TARGET_SPE"
314   "evcntlzw %0,%1"
315   [(set_attr "type" "vecsimple")
316    (set_attr  "length" "4")])
317
318 (define_insn "spe_eveqv"
319   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
320         (not:V2SI (xor:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
321                             (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
322   "TARGET_SPE"
323   "eveqv %0,%1,%2"
324   [(set_attr "type" "vecsimple")
325    (set_attr  "length" "4")])
326
327 (define_insn "spe_evextsb"
328   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
329         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 507))]
330   "TARGET_SPE"
331   "evextsb %0,%1"
332   [(set_attr "type" "vecsimple")
333    (set_attr  "length" "4")])
334
335 (define_insn "spe_evextsh"
336   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
337         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 508))]
338   "TARGET_SPE"
339   "evextsh %0,%1"
340   [(set_attr "type" "vecsimple")
341    (set_attr  "length" "4")])
342
343 (define_insn "spe_evlhhesplat"
344   [(set (match_operand:V2SI 0 "gpc_reg_operand"  "=r")
345         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand"   "b")
346                            (match_operand:QI 2 "immediate_operand" "i"))))
347    (unspec [(const_int 0)] 509)]
348   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
349   "evlhhesplat %0,%2*2(%1)"
350   [(set_attr "type" "vecload")
351    (set_attr  "length" "4")])
352
353 (define_insn "spe_evlhhesplatx"
354   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
355         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
356                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
357    (unspec [(const_int 0)] 510)]
358   "TARGET_SPE"
359   "evlhhesplatx %0,%1,%2"
360   [(set_attr "type" "vecload")
361    (set_attr  "length" "4")])
362
363 (define_insn "spe_evlhhossplat"
364   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
365         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
366                            (match_operand:QI 2 "immediate_operand" "i"))))
367    (unspec [(const_int 0)] 511)]
368   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
369   "evlhhossplat %0,%2*2(%1)"
370   [(set_attr "type" "vecload")
371    (set_attr  "length" "4")])
372
373 (define_insn "spe_evlhhossplatx"
374   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
375         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
376                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
377    (unspec [(const_int 0)] 512)]
378   "TARGET_SPE"
379   "evlhhossplatx %0,%1,%2"
380   [(set_attr "type" "vecload")
381    (set_attr  "length" "4")])
382
383 (define_insn "spe_evlhhousplat"
384   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
385         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
386                            (match_operand:QI 2 "immediate_operand" "i"))))
387    (unspec [(const_int 0)] 513)]
388   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
389   "evlhhousplat %0,%2*2(%1)"
390   [(set_attr "type" "vecload")
391    (set_attr  "length" "4")])
392
393 (define_insn "spe_evlhhousplatx"
394   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
395         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
396                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
397    (unspec [(const_int 0)] 514)]
398   "TARGET_SPE"
399   "evlhhousplatx %0,%1,%2"
400   [(set_attr "type" "vecload")
401    (set_attr  "length" "4")])
402
403 (define_insn "spe_evlwhsplat"
404   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
405         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
406                            (match_operand:QI 2 "immediate_operand" "i"))))
407    (unspec [(const_int 0)] 515)]
408   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
409   "evlwhsplat %0,%2*4(%1)"
410   [(set_attr "type" "vecload")
411    (set_attr  "length" "4")])
412
413 (define_insn "spe_evlwhsplatx"
414   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
415         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
416                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
417    (unspec [(const_int 0)] 516)]
418   "TARGET_SPE"
419   "evlwhsplatx %0,%1,%2"
420   [(set_attr "type" "vecload")
421    (set_attr  "length" "4")])
422
423 (define_insn "spe_evlwwsplat"
424   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
425         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
426                            (match_operand:QI 2 "immediate_operand" "i"))))
427    (unspec [(const_int 0)] 517)]
428   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
429   "evlwwsplat %0,%2*4(%1)"
430   [(set_attr "type" "vecload")
431    (set_attr  "length" "4")])
432
433 (define_insn "spe_evlwwsplatx"
434   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
435         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
436                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
437    (unspec [(const_int 0)] 518)]
438   "TARGET_SPE"
439   "evlwwsplatx %0,%1,%2"
440   [(set_attr "type" "vecload")
441    (set_attr  "length" "4")])
442
443 (define_insn "spe_evmergehi"
444   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
445         (vec_merge:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
446                         (vec_select:V2SI
447                          (match_operand:V2SI 2 "gpc_reg_operand" "r")
448                          (parallel [(const_int 1)
449                                     (const_int 0)]))
450                         (const_int 2)))]
451   "TARGET_SPE"
452   "evmergehi %0,%1,%2"
453   [(set_attr "type" "vecsimple")
454    (set_attr  "length" "4")])
455
456 (define_insn "spe_evmergehilo"
457   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
458         (vec_merge:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
459                         (match_operand:V2SI 2 "gpc_reg_operand" "r")
460                         (const_int 2)))]
461   "TARGET_SPE"
462   "evmergehilo %0,%1,%2"
463   [(set_attr "type" "vecsimple")
464    (set_attr  "length" "4")])
465
466 (define_insn "spe_evmergelo"
467   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
468         (vec_merge:V2SI (vec_select:V2SI
469                          (match_operand:V2SI 1 "gpc_reg_operand" "r")
470                          (parallel [(const_int 1)
471                                     (const_int 0)]))
472                         (match_operand:V2SI 2 "gpc_reg_operand" "r")
473                         (const_int 2)))]
474   "TARGET_SPE"
475   "evmergelo %0,%1,%2"
476   [(set_attr "type" "vecsimple")
477    (set_attr  "length" "4")])
478
479 (define_insn "spe_evmergelohi"
480   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
481         (vec_merge:V2SI (vec_select:V2SI
482                          (match_operand:V2SI 1 "gpc_reg_operand" "r")
483                          (parallel [(const_int 1)
484                                     (const_int 0)]))
485                         (vec_select:V2SI
486                          (match_operand:V2SI 2 "gpc_reg_operand" "r")
487                          (parallel [(const_int 1)
488                                     (const_int 0)]))
489                         (const_int 2)))]
490   "TARGET_SPE"
491   "evmergelohi %0,%1,%2"
492   [(set_attr "type" "vecsimple")
493    (set_attr  "length" "4")])
494
495 (define_insn "spe_evnand"
496   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
497         (not:V2SI (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
498                             (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
499   "TARGET_SPE"
500   "evnand %0,%1,%2"
501   [(set_attr "type" "vecsimple")
502    (set_attr  "length" "4")])
503
504 (define_insn "negv2si2"
505   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
506         (neg:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
507   "TARGET_SPE"
508   "evneg %0,%1"
509   [(set_attr "type" "vecsimple")
510    (set_attr  "length" "4")])
511
512 (define_insn "spe_evnor"
513   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
514         (not:V2SI  (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
515                              (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
516   "TARGET_SPE"
517   "evnor %0,%1,%2"
518   [(set_attr "type" "vecsimple")
519    (set_attr  "length" "4")])
520
521 (define_insn "spe_evorc"
522   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
523         (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
524                   (not:V2SI (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
525   "TARGET_SPE"
526   "evorc %0,%1,%2"
527   [(set_attr "type" "vecsimple")
528    (set_attr  "length" "4")])
529
530 (define_insn "spe_evor"
531   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
532         (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
533                   (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
534   "TARGET_SPE"
535   "evor %0,%1,%2"
536   [(set_attr "type" "vecsimple")
537    (set_attr  "length" "4")])
538
539 (define_insn "spe_evrlwi"
540   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
541         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
542                       (match_operand:QI 2 "immediate_operand" "i")] 519))]
543   "TARGET_SPE"
544   "evrlwi %0,%1,%2"
545   [(set_attr "type" "vecsimple")
546    (set_attr  "length" "4")])
547
548 (define_insn "spe_evrlw"
549   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
550         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
551                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 520))]
552   "TARGET_SPE"
553   "evrlw %0,%1,%2"
554   [(set_attr "type" "veccomplex")
555    (set_attr  "length" "4")])
556
557 (define_insn "spe_evrndw"
558   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
559         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 521))]
560   "TARGET_SPE"
561   "evrndw %0,%1"
562   [(set_attr "type" "vecsimple")
563    (set_attr  "length" "4")])
564
565 (define_insn "spe_evsel"
566   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
567         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
568                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
569                       (match_operand:CC 3 "cc_reg_operand" "y")] 522))]
570   "TARGET_SPE"
571   "evsel %0,%1,%2,%3"
572   [(set_attr "type" "veccmp")
573    (set_attr "length" "4")])
574
575 (define_insn "spe_evsel_fs"
576   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
577         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")
578                       (match_operand:V2SF 2 "gpc_reg_operand" "r")
579                       (match_operand:CC 3 "cc_reg_operand" "y")] 725))]
580   "TARGET_SPE"
581   "evsel %0,%1,%2,%3"
582   [(set_attr "type" "veccmp")
583    (set_attr "length" "4")])
584
585 (define_insn "spe_evslwi"
586   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
587         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
588                       (match_operand:QI 2 "immediate_operand" "i")]
589                      523))]
590   "TARGET_SPE"
591   "evslwi %0,%1,%2"
592   [(set_attr "type" "vecsimple")
593    (set_attr  "length" "4")])
594
595 (define_insn "spe_evslw"
596   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
597         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
598                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 524))]
599   "TARGET_SPE"
600   "evslw %0,%1,%2"
601   [(set_attr "type" "vecsimple")
602    (set_attr  "length" "4")])
603
604 (define_insn "spe_evsrwis"
605   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
606         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
607                       (match_operand:QI 2 "immediate_operand" "i")]
608                      525))]
609   "TARGET_SPE"
610   "evsrwis %0,%1,%2"
611   [(set_attr "type" "vecsimple")
612    (set_attr  "length" "4")])
613
614 (define_insn "spe_evsrwiu"
615   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
616         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
617                       (match_operand:QI 2 "immediate_operand" "i")]
618                      526))]
619   "TARGET_SPE"
620   "evsrwiu %0,%1,%2"
621   [(set_attr "type" "vecsimple")
622    (set_attr  "length" "4")])
623
624 (define_insn "spe_evsrws"
625   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
626         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
627                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 527))]
628   "TARGET_SPE"
629   "evsrws %0,%1,%2"
630   [(set_attr "type" "vecsimple")
631    (set_attr  "length" "4")])
632
633 (define_insn "spe_evsrwu"
634   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
635         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
636                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 528))]
637   "TARGET_SPE"
638   "evsrwu %0,%1,%2"
639   [(set_attr "type" "vecsimple")
640    (set_attr  "length" "4")])
641
642 ;; vector xors
643
644 (define_insn "xorv2si3"
645   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
646         (xor:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
647                   (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
648   "TARGET_SPE"
649   "evxor %0,%1,%2"
650   [(set_attr "type" "vecsimple")
651    (set_attr  "length" "4")])
652
653 (define_insn "xorv4hi3"
654   [(set (match_operand:V4HI 0 "gpc_reg_operand" "=r")
655         (xor:V4HI (match_operand:V4HI 1 "gpc_reg_operand" "r")
656                   (match_operand:V4HI 2 "gpc_reg_operand" "r")))]
657   "TARGET_SPE"
658   "evxor %0,%1,%2"
659   [(set_attr "type" "vecsimple")
660    (set_attr  "length" "4")])
661
662 (define_insn "xorv1di3"
663   [(set (match_operand:V1DI 0 "gpc_reg_operand" "=r")
664         (xor:V1DI (match_operand:V1DI 1 "gpc_reg_operand" "r")
665                   (match_operand:V1DI 2 "gpc_reg_operand" "r")))]
666   "TARGET_SPE"
667   "evxor %0,%1,%2"
668   [(set_attr "type" "vecsimple")
669    (set_attr  "length" "4")])
670
671 ;; end of vector xors
672
673 (define_insn "spe_evfsabs"
674   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
675         (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
676   "TARGET_SPE"
677   "evfsabs %0,%1"
678   [(set_attr "type" "vecsimple")
679    (set_attr  "length" "4")])
680
681 (define_insn "spe_evfsadd"
682   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
683         (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
684                    (match_operand:V2SF 2 "gpc_reg_operand" "r")))
685    (clobber (reg:SI SPEFSCR_REGNO))]
686   "TARGET_SPE"
687   "evfsadd %0,%1,%2"
688   [(set_attr "type" "vecfloat")
689    (set_attr  "length" "4")])
690
691 (define_insn "spe_evfscfsf"
692   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
693         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 529))]
694   "TARGET_SPE"
695   "evfscfsf %0,%1"
696   [(set_attr "type" "vecfloat")
697    (set_attr  "length" "4")])
698
699 (define_insn "spe_evfscfsi"
700   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
701         (float:V2SF (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
702   "TARGET_SPE"
703   "evfscfsi %0,%1"
704   [(set_attr "type" "vecfloat")
705    (set_attr  "length" "4")])
706
707 (define_insn "spe_evfscfuf"
708   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
709         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 530))]
710   "TARGET_SPE"
711   "evfscfuf %0,%1"
712   [(set_attr "type" "vecfloat")
713    (set_attr  "length" "4")])
714
715 (define_insn "spe_evfscfui"
716   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
717         (unspec:V2SF [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 701))]
718   "TARGET_SPE"
719   "evfscfui %0,%1"
720   [(set_attr "type" "vecfloat")
721    (set_attr  "length" "4")])
722
723 (define_insn "spe_evfsctsf"
724   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
725         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 531))]
726   "TARGET_SPE"
727   "evfsctsf %0,%1"
728   [(set_attr "type" "vecfloat")
729    (set_attr  "length" "4")])
730
731 (define_insn "spe_evfsctsi"
732   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
733         (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 532))]
734   "TARGET_SPE"
735   "evfsctsi %0,%1"
736   [(set_attr "type" "vecfloat")
737    (set_attr  "length" "4")])
738
739 (define_insn "spe_evfsctsiz"
740   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
741         (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 533))]
742   "TARGET_SPE"
743   "evfsctsiz %0,%1"
744   [(set_attr "type" "vecfloat")
745    (set_attr  "length" "4")])
746
747 (define_insn "spe_evfsctuf"
748   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
749         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 534))]
750   "TARGET_SPE"
751   "evfsctuf %0,%1"
752   [(set_attr "type" "vecfloat")
753    (set_attr  "length" "4")])
754
755 (define_insn "spe_evfsctui"
756   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
757         (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 535))]
758   "TARGET_SPE"
759   "evfsctui %0,%1"
760   [(set_attr "type" "vecfloat")
761    (set_attr  "length" "4")])
762
763 (define_insn "spe_evfsctuiz"
764   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
765         (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 536))]
766   "TARGET_SPE"
767   "evfsctuiz %0,%1"
768   [(set_attr "type" "vecfloat")
769    (set_attr  "length" "4")])
770
771 (define_insn "spe_evfsdiv"
772   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
773         (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
774                   (match_operand:V2SF 2 "gpc_reg_operand" "r")))
775    (clobber (reg:SI SPEFSCR_REGNO))]
776   "TARGET_SPE"
777   "evfsdiv %0,%1,%2"
778   [(set_attr "type" "vecfdiv")
779    (set_attr  "length" "4")])
780
781 (define_insn "spe_evfsmul"
782   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
783         (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
784                    (match_operand:V2SF 2 "gpc_reg_operand" "r")))
785    (clobber (reg:SI SPEFSCR_REGNO))]
786   "TARGET_SPE"
787   "evfsmul %0,%1,%2"
788   [(set_attr "type" "vecfloat")
789    (set_attr  "length" "4")])
790
791 (define_insn "spe_evfsnabs"
792   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
793         (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 537))]
794   "TARGET_SPE"
795   "evfsnabs %0,%1"
796   [(set_attr "type" "vecsimple")
797    (set_attr  "length" "4")])
798
799 (define_insn "spe_evfsneg"
800   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
801         (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
802   "TARGET_SPE"
803   "evfsneg %0,%1"
804   [(set_attr "type" "vecsimple")
805    (set_attr  "length" "4")])
806
807 (define_insn "spe_evfssub"
808   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
809         (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
810                     (match_operand:V2SF 2 "gpc_reg_operand" "r")))
811    (clobber (reg:SI SPEFSCR_REGNO))]
812   "TARGET_SPE"
813   "evfssub %0,%1,%2"
814   [(set_attr "type" "vecfloat")
815    (set_attr  "length" "4")])
816
817 ;; SPE SIMD load instructions.
818
819 ;; Only the hardware engineer who designed the SPE understands the
820 ;; plethora of load and store instructions ;-).  We have no way of
821 ;; differentiating between them with RTL so use an unspec of const_int 0 
822 ;; to avoid identical RTL.
823
824 (define_insn "spe_evldd"
825   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
826         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
827                            (match_operand:QI 2 "immediate_operand" "i"))))
828    (unspec [(const_int 0)] 544)]
829   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
830   "evldd %0,%2*8(%1)"
831   [(set_attr "type" "vecload")
832    (set_attr  "length" "4")])
833
834 (define_insn "spe_evlddx"
835   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
836         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
837                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
838    (unspec [(const_int 0)] 545)]
839   "TARGET_SPE"
840   "evlddx %0,%1,%2"
841   [(set_attr "type" "vecload")
842    (set_attr  "length" "4")])
843
844 (define_insn "spe_evldh"
845   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
846         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
847                            (match_operand:QI 2 "immediate_operand" "i"))))
848    (unspec [(const_int 0)] 546)]
849   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
850   "evldh %0,%2*8(%1)"
851   [(set_attr "type" "vecload")
852    (set_attr  "length" "4")])
853
854 (define_insn "spe_evldhx"
855   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
856         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
857                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
858    (unspec [(const_int 0)] 547)]
859   "TARGET_SPE"
860   "evldhx %0,%1,%2"
861   [(set_attr "type" "vecload")
862    (set_attr  "length" "4")])
863
864 (define_insn "spe_evldw"
865   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
866         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
867                            (match_operand:QI 2 "immediate_operand" "i"))))
868    (unspec [(const_int 0)] 548)]
869   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
870   "evldw %0,%2*8(%1)"
871   [(set_attr "type" "vecload")
872    (set_attr  "length" "4")])
873
874 (define_insn "spe_evldwx"
875   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
876         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
877                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
878    (unspec [(const_int 0)] 549)]
879   "TARGET_SPE"
880   "evldwx %0,%1,%2"
881   [(set_attr "type" "vecload")
882    (set_attr  "length" "4")])
883
884 (define_insn "spe_evlwhe"
885   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
886         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
887                            (match_operand:QI 2 "immediate_operand" "i"))))
888    (unspec [(const_int 0)] 550)]
889   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
890   "evlwhe %0,%2*4(%1)"
891   [(set_attr "type" "vecload")
892    (set_attr  "length" "4")])
893
894 (define_insn "spe_evlwhex"
895   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
896         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
897                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
898    (unspec [(const_int 0)] 551)]
899   "TARGET_SPE"
900   "evlwhex %0,%1,%2"
901   [(set_attr "type" "vecload")
902    (set_attr  "length" "4")])
903
904 (define_insn "spe_evlwhos"
905   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
906         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
907                            (match_operand:QI 2 "immediate_operand" "i"))))
908    (unspec [(const_int 0)] 552)]
909   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
910   "evlwhos %0,%2*4(%1)"
911   [(set_attr "type" "vecload")
912    (set_attr  "length" "4")])
913
914 (define_insn "spe_evlwhosx"
915   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
916         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
917                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
918    (unspec [(const_int 0)] 553)]
919   "TARGET_SPE"
920   "evlwhosx %0,%1,%2"
921   [(set_attr "type" "vecload")
922    (set_attr  "length" "4")])
923
924 (define_insn "spe_evlwhou"
925   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
926         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
927                            (match_operand:QI 2 "immediate_operand" "i"))))
928    (unspec [(const_int 0)] 554)]
929   "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
930   "evlwhou %0,%2*4(%1)"
931   [(set_attr "type" "vecload")
932    (set_attr  "length" "4")])
933
934 (define_insn "spe_evlwhoux"
935   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
936         (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
937                            (match_operand:SI 2 "gpc_reg_operand" "r"))))
938    (unspec [(const_int 0)] 555)]
939   "TARGET_SPE"
940   "evlwhoux %0,%1,%2"
941   [(set_attr "type" "vecload")
942    (set_attr  "length" "4")])
943
944 (define_insn "spe_brinc"
945   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
946         (unspec:SI [(match_operand:SI 1 "gpc_reg_operand" "r")
947                     (match_operand:SI 2 "gpc_reg_operand" "r")] 556))]
948   "TARGET_SPE"
949   "brinc %0,%1,%2"
950   [(set_attr "type" "brinc")
951    (set_attr  "length" "4")])
952
953 (define_insn "spe_evmhegsmfaa"
954   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
955         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
956                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
957                       (reg:V2SI SPE_ACC_REGNO)] 557))
958    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
959   "TARGET_SPE"
960   "evmhegsmfaa %0,%1,%2"
961   [(set_attr "type" "veccomplex")
962    (set_attr  "length" "4")])
963
964 (define_insn "spe_evmhegsmfan"
965   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
966         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
967                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
968                       (reg:V2SI SPE_ACC_REGNO)] 558))
969    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
970   "TARGET_SPE"
971   "evmhegsmfan %0,%1,%2"
972   [(set_attr "type" "veccomplex")
973    (set_attr  "length" "4")])
974
975 (define_insn "spe_evmhegsmiaa"
976   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
977         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
978                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
979                       (reg:V2SI SPE_ACC_REGNO)] 559))
980    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
981   "TARGET_SPE"
982   "evmhegsmiaa %0,%1,%2"
983   [(set_attr "type" "veccomplex")
984    (set_attr  "length" "4")])
985
986 (define_insn "spe_evmhegsmian"
987   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
988         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
989                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
990                       (reg:V2SI SPE_ACC_REGNO)] 560))
991    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
992   "TARGET_SPE"
993   "evmhegsmian %0,%1,%2"
994   [(set_attr "type" "veccomplex")
995    (set_attr  "length" "4")])
996
997 (define_insn "spe_evmhegumiaa"
998   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
999         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1000                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1001                       (reg:V2SI SPE_ACC_REGNO)] 561))
1002    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1003   "TARGET_SPE"
1004   "evmhegumiaa %0,%1,%2"
1005   [(set_attr "type" "veccomplex")
1006    (set_attr  "length" "4")])
1007
1008 (define_insn "spe_evmhegumian"
1009   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1010         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1011                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1012                       (reg:V2SI SPE_ACC_REGNO)] 562))
1013    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1014   "TARGET_SPE"
1015   "evmhegumian %0,%1,%2"
1016   [(set_attr "type" "veccomplex")
1017    (set_attr  "length" "4")])
1018
1019 (define_insn "spe_evmhesmfaaw"
1020   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1021         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1022                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1023                       (reg:V2SI SPE_ACC_REGNO)] 563))
1024    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1025   "TARGET_SPE"
1026   "evmhesmfaaw %0,%1,%2"
1027   [(set_attr "type" "veccomplex")
1028    (set_attr  "length" "4")])
1029
1030 (define_insn "spe_evmhesmfanw"
1031   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1032         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1033                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1034                       (reg:V2SI SPE_ACC_REGNO)] 564))
1035    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1036   "TARGET_SPE"
1037   "evmhesmfanw %0,%1,%2"
1038   [(set_attr "type" "veccomplex")
1039    (set_attr  "length" "4")])
1040
1041 (define_insn "spe_evmhesmfa"
1042   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1043         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1044                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 565))
1045    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1046   "TARGET_SPE"
1047   "evmhesmfa %0,%1,%2"
1048   [(set_attr "type" "veccomplex")
1049    (set_attr  "length" "4")])
1050
1051 (define_insn "spe_evmhesmf"
1052   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1053         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1054                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 566))]
1055   "TARGET_SPE"
1056   "evmhesmf %0,%1,%2"
1057   [(set_attr "type" "veccomplex")
1058    (set_attr  "length" "4")])
1059
1060 (define_insn "spe_evmhesmiaaw"
1061   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1062         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1063                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1064                       (reg:V2SI SPE_ACC_REGNO)] 567))
1065    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1066   "TARGET_SPE"
1067   "evmhesmiaaw %0,%1,%2"
1068   [(set_attr "type" "veccomplex")
1069    (set_attr  "length" "4")])
1070
1071 (define_insn "spe_evmhesmianw"
1072   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1073         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1074                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1075                       (reg:V2SI SPE_ACC_REGNO)] 568))
1076    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1077   "TARGET_SPE"
1078   "evmhesmianw %0,%1,%2"
1079   [(set_attr "type" "veccomplex")
1080    (set_attr  "length" "4")])
1081
1082 (define_insn "spe_evmhesmia"
1083   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1084         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1085                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 569))
1086    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1087   "TARGET_SPE"
1088   "evmhesmia %0,%1,%2"
1089   [(set_attr "type" "veccomplex")
1090    (set_attr  "length" "4")])
1091
1092 (define_insn "spe_evmhesmi"
1093   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1094         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1095                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 570))]
1096   "TARGET_SPE"
1097   "evmhesmi %0,%1,%2"
1098   [(set_attr "type" "veccomplex")
1099    (set_attr  "length" "4")])
1100
1101 (define_insn "spe_evmhessfaaw"
1102   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1103         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1104                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1105                       (reg:V2SI SPE_ACC_REGNO)] 571))
1106    (clobber (reg:SI SPEFSCR_REGNO))
1107    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1108   "TARGET_SPE"
1109   "evmhessfaaw %0,%1,%2"
1110   [(set_attr "type" "veccomplex")
1111    (set_attr  "length" "4")])
1112
1113 (define_insn "spe_evmhessfanw"
1114   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1115         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1116                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1117                       (reg:V2SI SPE_ACC_REGNO)] 572))
1118    (clobber (reg:SI SPEFSCR_REGNO))
1119    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1120   "TARGET_SPE"
1121   "evmhessfanw %0,%1,%2"
1122   [(set_attr "type" "veccomplex")
1123    (set_attr  "length" "4")])
1124
1125 (define_insn "spe_evmhessfa"
1126   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1127         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1128                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 573))
1129    (clobber (reg:SI SPEFSCR_REGNO))
1130    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1131   "TARGET_SPE"
1132   "evmhessfa %0,%1,%2"
1133   [(set_attr "type" "veccomplex")
1134    (set_attr  "length" "4")])
1135
1136 (define_insn "spe_evmhessf"
1137   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1138         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1139                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 574))
1140    (clobber (reg:SI SPEFSCR_REGNO))]
1141   "TARGET_SPE"
1142   "evmhessf %0,%1,%2"
1143   [(set_attr "type" "veccomplex")
1144    (set_attr  "length" "4")])
1145
1146 (define_insn "spe_evmhessiaaw"
1147   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1148         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1149                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1150                       (reg:V2SI SPE_ACC_REGNO)] 575))
1151    (clobber (reg:SI SPEFSCR_REGNO))
1152    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1153   "TARGET_SPE"
1154   "evmhessiaaw %0,%1,%2"
1155   [(set_attr "type" "veccomplex")
1156    (set_attr  "length" "4")])
1157
1158 (define_insn "spe_evmhessianw"
1159   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1160         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1161                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1162                       (reg:V2SI SPE_ACC_REGNO)] 576))
1163    (clobber (reg:SI SPEFSCR_REGNO))
1164    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1165   "TARGET_SPE"
1166   "evmhessianw %0,%1,%2"
1167   [(set_attr "type" "veccomplex")
1168    (set_attr  "length" "4")])
1169
1170 (define_insn "spe_evmheumiaaw"
1171   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1172         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1173                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1174                       (reg:V2SI SPE_ACC_REGNO)] 577))
1175    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1176   "TARGET_SPE"
1177   "evmheumiaaw %0,%1,%2"
1178   [(set_attr "type" "veccomplex")
1179    (set_attr  "length" "4")])
1180
1181 (define_insn "spe_evmheumianw"
1182   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1183         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1184                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1185                       (reg:V2SI SPE_ACC_REGNO)] 578))
1186    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1187   "TARGET_SPE"
1188   "evmheumianw %0,%1,%2"
1189   [(set_attr "type" "veccomplex")
1190    (set_attr  "length" "4")])
1191
1192 (define_insn "spe_evmheumia"
1193   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1194         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1195                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 579))
1196    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1197   "TARGET_SPE"
1198   "evmheumia %0,%1,%2"
1199   [(set_attr "type" "veccomplex")
1200    (set_attr  "length" "4")])
1201
1202 (define_insn "spe_evmheumi"
1203   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1204         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1205                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 580))]
1206   "TARGET_SPE"
1207   "evmheumi %0,%1,%2"
1208   [(set_attr "type" "veccomplex")
1209    (set_attr  "length" "4")])
1210
1211 (define_insn "spe_evmheusiaaw"
1212   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1213         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1214                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1215                       (reg:V2SI SPE_ACC_REGNO)] 581))
1216    (clobber (reg:SI SPEFSCR_REGNO))
1217    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1218   "TARGET_SPE"
1219   "evmheusiaaw %0,%1,%2"
1220   [(set_attr "type" "veccomplex")
1221    (set_attr  "length" "4")])
1222
1223 (define_insn "spe_evmheusianw"
1224   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1225         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1226                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1227                       (reg:V2SI SPE_ACC_REGNO)] 582))
1228    (clobber (reg:SI SPEFSCR_REGNO))
1229    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1230   "TARGET_SPE"
1231   "evmheusianw %0,%1,%2"
1232   [(set_attr "type" "veccomplex")
1233    (set_attr  "length" "4")])
1234
1235 (define_insn "spe_evmhogsmfaa"
1236   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1237         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1238                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1239                       (reg:V2SI SPE_ACC_REGNO)] 583))
1240    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1241   "TARGET_SPE"
1242   "evmhogsmfaa %0,%1,%2"
1243   [(set_attr "type" "veccomplex")
1244    (set_attr  "length" "4")])
1245
1246 (define_insn "spe_evmhogsmfan"
1247   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1248         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1249                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1250                       (reg:V2SI SPE_ACC_REGNO)] 584))
1251    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1252   "TARGET_SPE"
1253   "evmhogsmfan %0,%1,%2"
1254   [(set_attr "type" "veccomplex")
1255    (set_attr  "length" "4")])
1256
1257 (define_insn "spe_evmhogsmiaa"
1258   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1259         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1260                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1261                       (reg:V2SI SPE_ACC_REGNO)] 585))
1262    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1263   "TARGET_SPE"
1264   "evmhogsmiaa %0,%1,%2"
1265   [(set_attr "type" "veccomplex")
1266    (set_attr  "length" "4")])
1267
1268 (define_insn "spe_evmhogsmian"
1269   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1270         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1271                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1272                       (reg:V2SI SPE_ACC_REGNO)] 586))
1273    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1274   "TARGET_SPE"
1275   "evmhogsmian %0,%1,%2"
1276   [(set_attr "type" "veccomplex")
1277    (set_attr  "length" "4")])
1278
1279 (define_insn "spe_evmhogumiaa"
1280   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1281         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1282                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1283                       (reg:V2SI SPE_ACC_REGNO)] 587))
1284    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1285   "TARGET_SPE"
1286   "evmhogumiaa %0,%1,%2"
1287   [(set_attr "type" "veccomplex")
1288    (set_attr  "length" "4")])
1289
1290 (define_insn "spe_evmhogumian"
1291   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1292         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1293                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1294                       (reg:V2SI SPE_ACC_REGNO)] 588))
1295    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1296   "TARGET_SPE"
1297   "evmhogumian %0,%1,%2"
1298   [(set_attr "type" "veccomplex")
1299    (set_attr  "length" "4")])
1300
1301 (define_insn "spe_evmhosmfaaw"
1302   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1303         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1304                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1305                       (reg:V2SI SPE_ACC_REGNO)] 589))
1306    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1307   "TARGET_SPE"
1308   "evmhosmfaaw %0,%1,%2"
1309   [(set_attr "type" "veccomplex")
1310    (set_attr  "length" "4")])
1311
1312 (define_insn "spe_evmhosmfanw"
1313   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1314         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1315                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1316                       (reg:V2SI SPE_ACC_REGNO)] 590))
1317    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1318   "TARGET_SPE"
1319   "evmhosmfanw %0,%1,%2"
1320   [(set_attr "type" "veccomplex")
1321    (set_attr  "length" "4")])
1322
1323 (define_insn "spe_evmhosmfa"
1324   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1325         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1326                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 591))]
1327   "TARGET_SPE"
1328   "evmhosmfa %0,%1,%2"
1329   [(set_attr "type" "veccomplex")
1330    (set_attr  "length" "4")])
1331
1332 (define_insn "spe_evmhosmf"
1333   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1334         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1335                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 592))
1336    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1337   "TARGET_SPE"
1338   "evmhosmf %0,%1,%2"
1339   [(set_attr "type" "veccomplex")
1340    (set_attr  "length" "4")])
1341
1342 (define_insn "spe_evmhosmiaaw"
1343   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1344         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1345                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1346                       (reg:V2SI SPE_ACC_REGNO)] 593))
1347    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1348   "TARGET_SPE"
1349   "evmhosmiaaw %0,%1,%2"
1350   [(set_attr "type" "veccomplex")
1351    (set_attr  "length" "4")])
1352
1353 (define_insn "spe_evmhosmianw"
1354   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1355         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1356                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1357                       (reg:V2SI SPE_ACC_REGNO)] 594))
1358    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1359   "TARGET_SPE"
1360   "evmhosmianw %0,%1,%2"
1361   [(set_attr "type" "veccomplex")
1362    (set_attr  "length" "4")])
1363
1364 (define_insn "spe_evmhosmia"
1365   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1366         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1367                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 595))
1368    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1369   "TARGET_SPE"
1370   "evmhosmia %0,%1,%2"
1371   [(set_attr "type" "veccomplex")
1372    (set_attr  "length" "4")])
1373
1374 (define_insn "spe_evmhosmi"
1375   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1376         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1377                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 596))]
1378   "TARGET_SPE"
1379   "evmhosmi %0,%1,%2"
1380   [(set_attr "type" "veccomplex")
1381    (set_attr  "length" "4")])
1382
1383 (define_insn "spe_evmhossfaaw"
1384   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1385         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1386                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1387                       (reg:V2SI SPE_ACC_REGNO)] 597))
1388    (clobber (reg:SI SPEFSCR_REGNO))
1389    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1390   "TARGET_SPE"
1391   "evmhossfaaw %0,%1,%2"
1392   [(set_attr "type" "veccomplex")
1393    (set_attr  "length" "4")])
1394
1395 (define_insn "spe_evmhossfanw"
1396   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1397         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1398                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1399                       (reg:V2SI SPE_ACC_REGNO)] 598))
1400    (clobber (reg:SI SPEFSCR_REGNO))
1401    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1402   "TARGET_SPE"
1403   "evmhossfanw %0,%1,%2"
1404   [(set_attr "type" "veccomplex")
1405    (set_attr  "length" "4")])
1406
1407 (define_insn "spe_evmhossfa"
1408   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1409         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1410                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1411                       (reg:V2SI SPE_ACC_REGNO)] 599))
1412    (clobber (reg:SI SPEFSCR_REGNO))
1413    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1414   "TARGET_SPE"
1415   "evmhossfa %0,%1,%2"
1416   [(set_attr "type" "veccomplex")
1417    (set_attr  "length" "4")])
1418
1419 (define_insn "spe_evmhossf"
1420   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1421         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1422                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 600))
1423    (clobber (reg:SI SPEFSCR_REGNO))]
1424   "TARGET_SPE"
1425   "evmhossf %0,%1,%2"
1426   [(set_attr "type" "veccomplex")
1427    (set_attr  "length" "4")])
1428
1429 (define_insn "spe_evmhossiaaw"
1430   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1431         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1432                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1433                       (reg:V2SI SPE_ACC_REGNO)] 601))
1434    (clobber (reg:SI SPEFSCR_REGNO))
1435    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1436   "TARGET_SPE"
1437   "evmhossiaaw %0,%1,%2"
1438   [(set_attr "type" "veccomplex")
1439    (set_attr  "length" "4")])
1440
1441 (define_insn "spe_evmhossianw"
1442   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1443         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1444                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1445                       (reg:V2SI SPE_ACC_REGNO)] 602))
1446    (clobber (reg:SI SPEFSCR_REGNO))
1447    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1448   "TARGET_SPE"
1449   "evmhossianw %0,%1,%2"
1450   [(set_attr "type" "veccomplex")
1451    (set_attr  "length" "4")])
1452
1453 (define_insn "spe_evmhoumiaaw"
1454   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1455         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1456                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1457                       (reg:V2SI SPE_ACC_REGNO)] 603))
1458    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1459   "TARGET_SPE"
1460   "evmhoumiaaw %0,%1,%2"
1461   [(set_attr "type" "veccomplex")
1462    (set_attr  "length" "4")])
1463
1464 (define_insn "spe_evmhoumianw"
1465   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1466         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1467                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1468                       (reg:V2SI SPE_ACC_REGNO)] 604))
1469    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1470   "TARGET_SPE"
1471   "evmhoumianw %0,%1,%2"
1472   [(set_attr "type" "veccomplex")
1473    (set_attr  "length" "4")])
1474
1475 (define_insn "spe_evmhoumia"
1476   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1477         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1478                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 605))
1479    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1480   "TARGET_SPE"
1481   "evmhoumia %0,%1,%2"
1482   [(set_attr "type" "veccomplex")
1483    (set_attr  "length" "4")])
1484
1485 (define_insn "spe_evmhoumi"
1486   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1487         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1488                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 606))]
1489   "TARGET_SPE"
1490   "evmhoumi %0,%1,%2"
1491   [(set_attr "type" "veccomplex")
1492    (set_attr  "length" "4")])
1493
1494 (define_insn "spe_evmhousiaaw"
1495   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1496         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1497                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1498                       (reg:V2SI SPE_ACC_REGNO)] 607))
1499    (clobber (reg:SI SPEFSCR_REGNO))
1500    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1501   "TARGET_SPE"
1502   "evmhousiaaw %0,%1,%2"
1503   [(set_attr "type" "veccomplex")
1504    (set_attr  "length" "4")])
1505
1506 (define_insn "spe_evmhousianw"
1507   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1508         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1509                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1510                       (reg:V2SI SPE_ACC_REGNO)] 608))
1511    (clobber (reg:SI SPEFSCR_REGNO))
1512    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1513   "TARGET_SPE"
1514   "evmhousianw %0,%1,%2"
1515   [(set_attr "type" "veccomplex")
1516    (set_attr  "length" "4")])
1517
1518 (define_insn "spe_evmmlssfa"
1519   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1520         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1521                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 609))]
1522   "TARGET_SPE"
1523   "evmmlssfa %0,%1,%2"
1524   [(set_attr "type" "veccomplex")
1525    (set_attr  "length" "4")])
1526
1527 (define_insn "spe_evmmlssf"
1528   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1529         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1530                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 610))]
1531   "TARGET_SPE"
1532   "evmmlssf %0,%1,%2"
1533   [(set_attr "type" "veccomplex")
1534    (set_attr  "length" "4")])
1535
1536 (define_insn "spe_evmwhsmfa"
1537   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1538         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1539                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 611))
1540    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1541   "TARGET_SPE"
1542   "evmwhsmfa %0,%1,%2"
1543   [(set_attr "type" "veccomplex")
1544    (set_attr  "length" "4")])
1545
1546 (define_insn "spe_evmwhsmf"
1547   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1548         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1549                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 612))]
1550   "TARGET_SPE"
1551   "evmwhsmf %0,%1,%2"
1552   [(set_attr "type" "veccomplex")
1553    (set_attr  "length" "4")])
1554
1555 (define_insn "spe_evmwhsmia"
1556   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1557         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1558                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 613))
1559    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1560   "TARGET_SPE"
1561   "evmwhsmia %0,%1,%2"
1562   [(set_attr "type" "veccomplex")
1563    (set_attr  "length" "4")])
1564
1565 (define_insn "spe_evmwhsmi"
1566   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1567         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1568                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 614))]
1569   "TARGET_SPE"
1570   "evmwhsmi %0,%1,%2"
1571   [(set_attr "type" "veccomplex")
1572    (set_attr  "length" "4")])
1573
1574 (define_insn "spe_evmwhssfa"
1575   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1576         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1577                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 615))
1578    (clobber (reg:SI SPEFSCR_REGNO))
1579    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1580   "TARGET_SPE"
1581   "evmwhssfa %0,%1,%2"
1582   [(set_attr "type" "veccomplex")
1583    (set_attr  "length" "4")])
1584
1585 (define_insn "spe_evmwhusian"
1586   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1587         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1588                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 626))]
1589   "TARGET_SPE"
1590   "evmwhusian %0,%1,%2"
1591   [(set_attr "type" "veccomplex")
1592    (set_attr  "length" "4")])
1593
1594 (define_insn "spe_evmwhssf"
1595   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1596         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1597                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 628))
1598    (clobber (reg:SI SPEFSCR_REGNO))]
1599   "TARGET_SPE"
1600   "evmwhssf %0,%1,%2"
1601   [(set_attr "type" "veccomplex")
1602    (set_attr  "length" "4")])
1603
1604 (define_insn "spe_evmwhumia"
1605   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1606         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1607                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 629))
1608    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1609   "TARGET_SPE"
1610   "evmwhumia %0,%1,%2"
1611   [(set_attr "type" "veccomplex")
1612    (set_attr  "length" "4")])
1613
1614 (define_insn "spe_evmwhumi"
1615   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1616         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1617                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 630))]
1618   "TARGET_SPE"
1619   "evmwhumi %0,%1,%2"
1620   [(set_attr "type" "veccomplex")
1621    (set_attr  "length" "4")])
1622
1623 (define_insn "spe_evmwlsmiaaw"
1624   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1625         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1626                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1627                       (reg:V2SI SPE_ACC_REGNO)] 635))
1628    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1629   "TARGET_SPE"
1630   "evmwlsmiaaw %0,%1,%2"
1631   [(set_attr "type" "veccomplex")
1632    (set_attr  "length" "4")])
1633
1634 (define_insn "spe_evmwlsmianw"
1635   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1636         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1637                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1638                       (reg:V2SI SPE_ACC_REGNO)] 636))
1639    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1640   "TARGET_SPE"
1641   "evmwlsmianw %0,%1,%2"
1642   [(set_attr "type" "veccomplex")
1643    (set_attr  "length" "4")])
1644
1645 (define_insn "spe_evmwlssiaaw"
1646   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1647         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1648                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1649                       (reg:V2SI SPE_ACC_REGNO)] 641))
1650    (clobber (reg:SI SPEFSCR_REGNO))
1651    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1652   "TARGET_SPE"
1653   "evmwlssiaaw %0,%1,%2"
1654   [(set_attr "type" "veccomplex")
1655    (set_attr  "length" "4")])
1656
1657 (define_insn "spe_evmwlssianw"
1658   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1659         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1660                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1661                       (reg:V2SI SPE_ACC_REGNO)] 642))
1662    (clobber (reg:SI SPEFSCR_REGNO))
1663    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1664   "TARGET_SPE"
1665   "evmwlssianw %0,%1,%2"
1666   [(set_attr "type" "veccomplex")
1667    (set_attr  "length" "4")])
1668
1669 (define_insn "spe_evmwlumiaaw"
1670   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1671         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1672                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1673                       (reg:V2SI SPE_ACC_REGNO)] 643))
1674    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1675   "TARGET_SPE"
1676   "evmwlumiaaw %0,%1,%2"
1677   [(set_attr "type" "veccomplex")
1678    (set_attr  "length" "4")])
1679
1680 (define_insn "spe_evmwlumianw"
1681   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1682         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1683                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1684                       (reg:V2SI SPE_ACC_REGNO)] 644))
1685    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1686   "TARGET_SPE"
1687   "evmwlumianw %0,%1,%2"
1688   [(set_attr "type" "veccomplex")
1689    (set_attr  "length" "4")])
1690
1691 (define_insn "spe_evmwlumia"
1692   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1693         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1694                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 645))
1695    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1696   "TARGET_SPE"
1697   "evmwlumia %0,%1,%2"
1698   [(set_attr "type" "veccomplex")
1699    (set_attr  "length" "4")])
1700
1701 (define_insn "spe_evmwlumi"
1702   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1703         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1704                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 646))]
1705   "TARGET_SPE"
1706   "evmwlumi %0,%1,%2"
1707   [(set_attr "type" "veccomplex")
1708    (set_attr  "length" "4")])
1709
1710 (define_insn "spe_evmwlusiaaw"
1711   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1712         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1713                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1714                       (reg:V2SI SPE_ACC_REGNO)] 647))
1715    (clobber (reg:SI SPEFSCR_REGNO))
1716    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1717   "TARGET_SPE"
1718   "evmwlusiaaw %0,%1,%2"
1719   [(set_attr "type" "veccomplex")
1720    (set_attr  "length" "4")])
1721
1722 (define_insn "spe_evmwlusianw"
1723   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1724         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1725                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1726                       (reg:V2SI SPE_ACC_REGNO)] 648))
1727    (clobber (reg:SI SPEFSCR_REGNO))
1728    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1729   "TARGET_SPE"
1730   "evmwlusianw %0,%1,%2"
1731   [(set_attr "type" "veccomplex")
1732    (set_attr  "length" "4")])
1733
1734 (define_insn "spe_evmwsmfaa"
1735   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1736         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1737                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1738                       (reg:V2SI SPE_ACC_REGNO)] 649))
1739    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1740   "TARGET_SPE"
1741   "evmwsmfaa %0,%1,%2"
1742   [(set_attr "type" "veccomplex")
1743    (set_attr  "length" "4")])
1744
1745 (define_insn "spe_evmwsmfan"
1746   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1747         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1748                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1749                       (reg:V2SI SPE_ACC_REGNO)] 650))
1750    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1751   "TARGET_SPE"
1752   "evmwsmfan %0,%1,%2"
1753   [(set_attr "type" "veccomplex")
1754    (set_attr  "length" "4")])
1755
1756 (define_insn "spe_evmwsmfa"
1757   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1758         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1759                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 651))
1760    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1761   "TARGET_SPE"
1762   "evmwsmfa %0,%1,%2"
1763   [(set_attr "type" "veccomplex")
1764    (set_attr  "length" "4")])
1765
1766 (define_insn "spe_evmwsmf"
1767   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1768         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1769                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 652))]
1770   "TARGET_SPE"
1771   "evmwsmf %0,%1,%2"
1772   [(set_attr "type" "veccomplex")
1773    (set_attr  "length" "4")])
1774
1775 (define_insn "spe_evmwsmiaa"
1776   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1777         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1778                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1779                       (reg:V2SI SPE_ACC_REGNO)] 653))
1780    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1781   "TARGET_SPE"
1782   "evmwsmiaa %0,%1,%2"
1783   [(set_attr "type" "veccomplex")
1784    (set_attr  "length" "4")])
1785
1786 (define_insn "spe_evmwsmian"
1787   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1788         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1789                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1790                       (reg:V2SI SPE_ACC_REGNO)] 654))
1791    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1792   "TARGET_SPE"
1793   "evmwsmian %0,%1,%2"
1794   [(set_attr "type" "veccomplex")
1795    (set_attr  "length" "4")])
1796
1797 (define_insn "spe_evmwsmia"
1798   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1799         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1800                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 655))
1801    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1802   "TARGET_SPE"
1803   "evmwsmia %0,%1,%2"
1804   [(set_attr "type" "veccomplex")
1805    (set_attr  "length" "4")])
1806
1807 (define_insn "spe_evmwsmi"
1808   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1809         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1810                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 656))]
1811   "TARGET_SPE"
1812   "evmwsmi %0,%1,%2"
1813   [(set_attr "type" "veccomplex")
1814    (set_attr  "length" "4")])
1815
1816 (define_insn "spe_evmwssfaa"
1817   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1818         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1819                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1820                       (reg:V2SI SPE_ACC_REGNO)] 657))
1821    (clobber (reg:SI SPEFSCR_REGNO))
1822    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1823   "TARGET_SPE"
1824   "evmwssfaa %0,%1,%2"
1825   [(set_attr "type" "veccomplex")
1826    (set_attr  "length" "4")])
1827
1828 (define_insn "spe_evmwssfan"
1829   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1830         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1831                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1832                       (reg:V2SI SPE_ACC_REGNO)] 658))
1833    (clobber (reg:SI SPEFSCR_REGNO))
1834    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1835   "TARGET_SPE"
1836   "evmwssfan %0,%1,%2"
1837   [(set_attr "type" "veccomplex")
1838    (set_attr  "length" "4")])
1839
1840 (define_insn "spe_evmwssfa"
1841   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1842         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1843                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 659))
1844    (clobber (reg:SI SPEFSCR_REGNO))
1845    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1846   "TARGET_SPE"
1847   "evmwssfa %0,%1,%2"
1848   [(set_attr "type" "veccomplex")
1849    (set_attr  "length" "4")])
1850
1851 (define_insn "spe_evmwssf"
1852   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1853         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1854                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 660))
1855    (clobber (reg:SI SPEFSCR_REGNO))]
1856   "TARGET_SPE"
1857   "evmwssf %0,%1,%2"
1858   [(set_attr "type" "veccomplex")
1859    (set_attr  "length" "4")])
1860
1861 (define_insn "spe_evmwumiaa"
1862   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1863         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1864                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1865                       (reg:V2SI SPE_ACC_REGNO)] 661))
1866    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1867   "TARGET_SPE"
1868   "evmwumiaa %0,%1,%2"
1869   [(set_attr "type" "veccomplex")
1870    (set_attr  "length" "4")])
1871
1872 (define_insn "spe_evmwumian"
1873   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1874         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1875                       (match_operand:V2SI 2 "gpc_reg_operand" "r")
1876                       (reg:V2SI SPE_ACC_REGNO)] 662))
1877    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1878   "TARGET_SPE"
1879   "evmwumian %0,%1,%2"
1880   [(set_attr "type" "veccomplex")
1881    (set_attr  "length" "4")])
1882
1883 (define_insn "spe_evmwumia"
1884   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1885         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1886                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 663))
1887    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1888   "TARGET_SPE"
1889   "evmwumia %0,%1,%2"
1890   [(set_attr "type" "veccomplex")
1891    (set_attr  "length" "4")])
1892
1893 (define_insn "spe_evmwumi"
1894   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1895         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1896                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 664))]
1897   "TARGET_SPE"
1898   "evmwumi %0,%1,%2"
1899   [(set_attr "type" "veccomplex")
1900    (set_attr  "length" "4")])
1901
1902 (define_insn "spe_evaddw"
1903   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1904         (plus:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
1905                    (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
1906   "TARGET_SPE"
1907   "evaddw %0,%1,%2"
1908   [(set_attr "type" "vecsimple")
1909    (set_attr  "length" "4")])
1910
1911 (define_insn "spe_evaddusiaaw"
1912   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1913         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1914                       (reg:V2SI SPE_ACC_REGNO)] 673))
1915    (clobber (reg:SI SPEFSCR_REGNO))
1916    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1917   "TARGET_SPE"
1918   "evaddusiaaw %0,%1"
1919   [(set_attr "type" "veccomplex")
1920    (set_attr  "length" "4")])
1921
1922 (define_insn "spe_evaddumiaaw"
1923   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1924         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1925                       (reg:V2SI SPE_ACC_REGNO)] 674))
1926    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1927   "TARGET_SPE"
1928   "evaddumiaaw %0,%1"
1929   [(set_attr "type" "veccomplex")
1930    (set_attr  "length" "4")])
1931
1932 (define_insn "spe_evaddssiaaw"
1933   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1934         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1935                       (reg:V2SI SPE_ACC_REGNO)] 675))
1936    (clobber (reg:SI SPEFSCR_REGNO))
1937    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1938   "TARGET_SPE"
1939   "evaddssiaaw %0,%1"
1940   [(set_attr "type" "veccomplex")
1941    (set_attr  "length" "4")])
1942
1943 (define_insn "spe_evaddsmiaaw"
1944   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1945         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1946                       (reg:V2SI SPE_ACC_REGNO)] 676))
1947    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1948   "TARGET_SPE"
1949   "evaddsmiaaw %0,%1"
1950   [(set_attr "type" "veccomplex")
1951    (set_attr  "length" "4")])
1952
1953 (define_insn "spe_evaddiw"
1954   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1955         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1956                       (match_operand:QI 2 "immediate_operand" "i")] 677))]
1957   "TARGET_SPE"
1958   "evaddiw %0,%1,%2"
1959   [(set_attr "type" "vecsimple")
1960    (set_attr  "length" "4")])
1961
1962 (define_insn "spe_evsubifw"
1963   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1964         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1965                       (match_operand:QI 2 "immediate_operand" "i")] 678))]
1966   "TARGET_SPE"
1967   "evsubifw %0,%2,%1"
1968   [(set_attr "type" "veccomplex")
1969    (set_attr  "length" "4")])
1970
1971 (define_insn "spe_evsubfw"
1972   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1973         (minus:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
1974                     (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
1975   "TARGET_SPE"
1976   "evsubfw %0,%2,%1"
1977   [(set_attr "type" "veccomplex")
1978    (set_attr  "length" "4")])
1979
1980 (define_insn "spe_evsubfusiaaw"
1981   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1982         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1983                       (reg:V2SI SPE_ACC_REGNO)] 679))
1984    (clobber (reg:SI SPEFSCR_REGNO))
1985    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1986   "TARGET_SPE"
1987   "evsubfusiaaw %0,%1"
1988   [(set_attr "type" "veccomplex")
1989    (set_attr  "length" "4")])
1990
1991 (define_insn "spe_evsubfumiaaw"
1992   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
1993         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
1994                       (reg:V2SI SPE_ACC_REGNO)] 680))
1995    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
1996   "TARGET_SPE"
1997   "evsubfumiaaw %0,%1"
1998   [(set_attr "type" "veccomplex")
1999    (set_attr  "length" "4")])
2000
2001 (define_insn "spe_evsubfssiaaw"
2002   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2003         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2004                       (reg:V2SI SPE_ACC_REGNO)] 681))
2005    (clobber (reg:SI SPEFSCR_REGNO))
2006    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2007   "TARGET_SPE"
2008   "evsubfssiaaw %0,%1"
2009   [(set_attr "type" "veccomplex")
2010    (set_attr  "length" "4")])
2011
2012 (define_insn "spe_evsubfsmiaaw"
2013   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2014         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2015                       (reg:V2SI SPE_ACC_REGNO)] 682))
2016    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2017   "TARGET_SPE"
2018   "evsubfsmiaaw %0,%1"
2019   [(set_attr "type" "veccomplex")
2020    (set_attr  "length" "4")])
2021
2022 (define_insn "spe_evmra"
2023   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2024         (match_operand:V2SI 1 "gpc_reg_operand" "r"))
2025    (set (reg:V2SI SPE_ACC_REGNO)
2026         (unspec:V2SI [(match_dup 1)] 726))]
2027   "TARGET_SPE"
2028   "evmra %0,%1"
2029   [(set_attr "type" "veccomplex")
2030    (set_attr  "length" "4")])
2031
2032 (define_insn "spe_evdivws"
2033   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2034         (div:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
2035                   (match_operand:V2SI 2 "gpc_reg_operand" "r")))
2036    (clobber (reg:SI SPEFSCR_REGNO))]
2037   "TARGET_SPE"
2038   "evdivws %0,%1,%2"
2039   [(set_attr "type" "vecdiv")
2040    (set_attr  "length" "4")])
2041
2042 (define_insn "spe_evdivwu"
2043   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2044         (udiv:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
2045                    (match_operand:V2SI 2 "gpc_reg_operand" "r")))
2046       (clobber (reg:SI SPEFSCR_REGNO))]
2047   "TARGET_SPE"
2048   "evdivwu %0,%1,%2"
2049   [(set_attr "type" "vecdiv")
2050    (set_attr  "length" "4")])
2051
2052 (define_insn "spe_evsplatfi"
2053   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2054         (unspec:V2SI [(match_operand:QI 1 "immediate_operand" "i")] 684))]
2055   "TARGET_SPE"
2056   "evsplatfi %0,%1"
2057   [(set_attr "type" "vecperm")
2058    (set_attr  "length" "4")])
2059
2060 (define_insn "spe_evsplati"
2061   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2062         (unspec:V2SI [(match_operand:QI 1 "immediate_operand" "i")] 685))]
2063   "TARGET_SPE"
2064   "evsplati %0,%1"
2065   [(set_attr "type" "vecperm")
2066    (set_attr  "length" "4")])
2067
2068 (define_insn "spe_evstdd"
2069   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2070                            (match_operand:QI 1 "immediate_operand" "i")))
2071         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2072    (unspec [(const_int 0)] 686)]
2073   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2074   "evstdd %2,%1*8(%0)"
2075   [(set_attr "type" "vecstore")
2076    (set_attr  "length" "4")])
2077
2078 (define_insn "spe_evstddx"
2079   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2080                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2081         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2082    (unspec [(const_int 0)] 687)]
2083   "TARGET_SPE"
2084   "evstddx %2,%0,%1"
2085   [(set_attr "type" "vecstore")
2086    (set_attr  "length" "4")])
2087
2088 (define_insn "spe_evstdh"
2089   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2090                            (match_operand:QI 1 "immediate_operand" "i")))
2091         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2092    (unspec [(const_int 0)] 688)]
2093   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2094   "evstdh %2,%1*8(%0)"
2095   [(set_attr "type" "vecstore")
2096    (set_attr  "length" "4")])
2097
2098 (define_insn "spe_evstdhx"
2099   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2100                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2101         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2102    (unspec [(const_int 0)] 689)]
2103   "TARGET_SPE"
2104   "evstdhx %2,%0,%1"
2105   [(set_attr "type" "vecstore")
2106    (set_attr  "length" "4")])
2107
2108 (define_insn "spe_evstdw"
2109   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2110                            (match_operand:QI 1 "immediate_operand" "i")))
2111         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2112    (unspec [(const_int 0)] 690)]
2113   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2114   "evstdw %2,%1*8(%0)"
2115   [(set_attr "type" "vecstore")
2116    (set_attr  "length" "4")])
2117
2118 (define_insn "spe_evstdwx"
2119   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2120                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2121         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2122    (unspec [(const_int 0)] 691)]
2123   "TARGET_SPE"
2124   "evstdwx %2,%0,%1"
2125   [(set_attr "type" "vecstore")
2126    (set_attr  "length" "4")])
2127
2128 (define_insn "spe_evstwhe"
2129   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2130                            (match_operand:QI 1 "immediate_operand" "i")))
2131         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2132    (unspec [(const_int 0)] 692)]
2133   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2134   "evstwhe %2,%1*4(%0)"
2135   [(set_attr "type" "vecstore")
2136    (set_attr  "length" "4")])
2137
2138 (define_insn "spe_evstwhex"
2139   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2140                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2141         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2142    (unspec [(const_int 0)] 693)]
2143   "TARGET_SPE"
2144   "evstwhex %2,%0,%1"
2145   [(set_attr "type" "vecstore")
2146    (set_attr  "length" "4")])
2147
2148 (define_insn "spe_evstwho"
2149   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2150                            (match_operand:QI 1 "immediate_operand" "i")))
2151         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2152    (unspec [(const_int 0)] 694)]
2153   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2154   "evstwho %2,%1*4(%0)"
2155   [(set_attr "type" "vecstore")
2156    (set_attr  "length" "4")])
2157
2158 (define_insn "spe_evstwhox"
2159   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2160                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2161         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2162    (unspec [(const_int 0)] 695)]
2163   "TARGET_SPE"
2164   "evstwhox %2,%0,%1"
2165   [(set_attr "type" "vecstore")
2166    (set_attr  "length" "4")])
2167
2168 (define_insn "spe_evstwwe"
2169   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2170                            (match_operand:QI 1 "immediate_operand" "i")))
2171         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2172    (unspec [(const_int 0)] 696)]
2173   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2174   "evstwwe %2,%1*4(%0)"
2175   [(set_attr "type" "vecstore")
2176    (set_attr  "length" "4")])
2177
2178 (define_insn "spe_evstwwex"
2179   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2180                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2181         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2182    (unspec [(const_int 0)] 697)]
2183   "TARGET_SPE"
2184   "evstwwex %2,%0,%1"
2185   [(set_attr "type" "vecstore")
2186    (set_attr  "length" "4")])
2187
2188 (define_insn "spe_evstwwo"
2189   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2190                            (match_operand:QI 1 "immediate_operand" "i")))
2191         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2192    (unspec [(const_int 0)] 698)]
2193   "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
2194   "evstwwo %2,%1*4(%0)"
2195   [(set_attr "type" "vecstore")
2196    (set_attr  "length" "4")])
2197
2198 (define_insn "spe_evstwwox"
2199   [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
2200                            (match_operand:SI 1 "gpc_reg_operand" "r")))
2201         (match_operand:V2SI 2 "gpc_reg_operand" "r"))
2202    (unspec [(const_int 0)] 699)]
2203   "TARGET_SPE"
2204   "evstwwox %2,%0,%1"
2205   [(set_attr "type" "vecstore")
2206    (set_attr  "length" "4")])
2207
2208 ;; Double-precision floating point instructions.
2209
2210 ;; FIXME: Add o=r option.
2211 (define_insn "*frob_<SPE64:mode>_<DITI:mode>"
2212   [(set (match_operand:SPE64 0 "nonimmediate_operand" "=r,r")
2213         (subreg:SPE64 (match_operand:DITI 1 "input_operand" "r,m") 0))]
2214   "(TARGET_E500_DOUBLE && <SPE64:MODE>mode == DFmode)
2215    || (TARGET_SPE && <SPE64:MODE>mode != DFmode)"
2216   "@
2217    evmergelo %0,%1,%L1
2218    evldd%X1 %0,%y1")
2219
2220 (define_insn "*frob_tf_ti"
2221   [(set (match_operand:TF 0 "gpc_reg_operand" "=r")
2222         (subreg:TF (match_operand:TI 1 "gpc_reg_operand" "r") 0))]
2223   "TARGET_E500_DOUBLE"
2224   "evmergelo %0,%1,%L1\;evmergelo %L0,%Y1,%Z1"
2225   [(set_attr "length" "8")])
2226
2227 (define_insn "*frob_<mode>_di_2"
2228   [(set (subreg:DI (match_operand:SPE64TF 0 "nonimmediate_operand" "+&r,r") 0)
2229         (match_operand:DI 1 "input_operand" "r,m"))]
2230   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2231    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2232   "@
2233    evmergelo %0,%1,%L1
2234    evldd%X1 %0,%y1")
2235
2236 (define_insn "*frob_tf_di_8_2"
2237   [(set (subreg:DI (match_operand:TF 0 "nonimmediate_operand" "+&r,r") 8)
2238         (match_operand:DI 1 "input_operand" "r,m"))]
2239   "TARGET_E500_DOUBLE"
2240   "@
2241    evmergelo %L0,%1,%L1
2242    evldd%X1 %L0,%y1")
2243
2244 (define_insn "*frob_di_<mode>"
2245   [(set (match_operand:DI 0 "nonimmediate_operand" "=&r")
2246         (subreg:DI (match_operand:SPE64TF 1 "input_operand" "r") 0))]
2247   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2248    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2249   "evmergehi %0,%1,%1\;mr %L0,%1"
2250   [(set_attr "length" "8")])
2251
2252 (define_insn "*frob_ti_tf"
2253   [(set (match_operand:TI 0 "nonimmediate_operand" "=&r")
2254         (subreg:TI (match_operand:TF 1 "input_operand" "r") 0))]
2255   "TARGET_E500_DOUBLE"
2256   "evmergehi %0,%1,%1\;mr %L0,%1\;evmergehi %Y0,%L1,%L1\;mr %Z0,%L1"
2257   [(set_attr "length" "16")])
2258
2259 (define_insn "*frob_<DITI:mode>_<SPE64:mode>_2"
2260   [(set (subreg:SPE64 (match_operand:DITI 0 "register_operand" "+&r,r") 0)
2261         (match_operand:SPE64 1 "input_operand" "r,m"))]
2262   "(TARGET_E500_DOUBLE && <SPE64:MODE>mode == DFmode)
2263    || (TARGET_SPE && <SPE64:MODE>mode != DFmode)"
2264   "*
2265 {
2266   switch (which_alternative)
2267     {
2268     default: 
2269       gcc_unreachable ();
2270     case 0:
2271       return \"evmergehi %0,%1,%1\;mr %L0,%1\";
2272     case 1:
2273       /* If the address is not offsettable we need to load the whole
2274          doubleword into a 64-bit register and then copy the high word
2275          to form the correct output layout.  */
2276       if (!offsettable_nonstrict_memref_p (operands[1]))
2277         return \"evldd%X1 %L0,%y1\;evmergehi %0,%L0,%L0\";
2278       /* If the low-address word is used in the address, we must load
2279         it last.  Otherwise, load it first.  Note that we cannot have
2280         auto-increment in that case since the address register is
2281         known to be dead.  */
2282       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
2283                              operands[1], 0))
2284         return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
2285       else
2286         return \"{l%U1%X1|lwz%U1%X1} %0,%1\;{l|lwz} %L0,%L1\";
2287     }
2288 }"
2289   [(set_attr "length" "8,8")])
2290
2291 ; As the above, but TImode at offset 8.
2292 (define_insn "*frob_ti_<mode>_8_2"
2293   [(set (subreg:SPE64 (match_operand:TI 0 "register_operand" "+&r,r") 8)
2294         (match_operand:SPE64 1 "input_operand" "r,m"))]
2295   "(TARGET_E500_DOUBLE && <MODE>mode == DFmode)
2296    || (TARGET_SPE && <MODE>mode != DFmode)"
2297   "*
2298 {
2299   switch (which_alternative)
2300     {
2301     default: 
2302       gcc_unreachable ();
2303     case 0:
2304       return \"evmergehi %Y0,%1,%1\;mr %Z0,%1\";
2305     case 1:
2306       if (!offsettable_nonstrict_memref_p (operands[1]))
2307         return \"evldd%X1 %Z0,%y1\;evmergehi %Y0,%Z0,%Z0\";
2308       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
2309                              operands[1], 0))
2310         return \"{l|lwz} %Z0,%L1\;{l|lwz} %Y0,%1\";
2311       else
2312         return \"{l%U1%X1|lwz%U1%X1} %Y0,%1\;{l|lwz} %Z0,%L1\";
2313     }
2314 }"
2315   [(set_attr "length" "8,8")])
2316
2317 (define_insn "*frob_ti_tf_2"
2318   [(set (subreg:TF (match_operand:TI 0 "gpc_reg_operand" "=&r") 0)
2319         (match_operand:TF 1 "input_operand" "r"))]
2320   "TARGET_E500_DOUBLE"
2321   "evmergehi %0,%1,%1\;mr %L0,%1\;evmergehi %Y0,%L1,%L1\;mr %Z0,%L1"
2322   [(set_attr "length" "16")])
2323
2324 (define_insn "*mov_si<mode>_e500_subreg0"
2325   [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,&r") 0)
2326         (match_operand:SI 1 "input_operand" "r,m"))]
2327   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2328    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2329   "@
2330    evmergelo %0,%1,%0
2331    evmergelohi %0,%0,%0\;{l%U1%X1|lwz%U1%X1} %0,%1\;evmergelohi %0,%0,%0"
2332   [(set_attr "length" "4,12")])
2333
2334 ;; ??? Could use evstwwe for memory stores in some cases, depending on
2335 ;; the offset.
2336 (define_insn "*mov_si<mode>_e500_subreg0_2"
2337   [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "+r,m")
2338         (subreg:SI (match_operand:SPE64TF 1 "register_operand" "+r,&r") 0))]
2339   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2340    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2341   "@
2342    evmergehi %0,%0,%1
2343    evmergelohi %1,%1,%1\;{st%U0%X0|stw%U0%X0} %1,%0"
2344   [(set_attr "length" "4,8")])
2345
2346 (define_insn "*mov_si<mode>_e500_subreg4"
2347   [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,r") 4)
2348         (match_operand:SI 1 "input_operand" "r,m"))]
2349   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2350    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2351   "@
2352    mr %0,%1
2353    {l%U1%X1|lwz%U1%X1} %0,%1")
2354
2355 (define_insn "*mov_si<mode>_e500_subreg4_2"
2356   [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "+r,m")
2357         (subreg:SI (match_operand:SPE64TF 1 "register_operand" "r,r") 4))]
2358   "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode))
2359    || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
2360   "@
2361    mr %0,%1
2362    {st%U0%X0|stw%U0%X0} %1,%0")
2363
2364 (define_insn "*mov_sitf_e500_subreg8"
2365   [(set (subreg:SI (match_operand:TF 0 "register_operand" "+r,&r") 8)
2366         (match_operand:SI 1 "input_operand" "r,m"))]
2367   "TARGET_E500_DOUBLE"
2368   "@
2369    evmergelo %L0,%1,%L0
2370    evmergelohi %L0,%L0,%L0\;{l%U1%X1|lwz%U1%X1} %L0,%1\;evmergelohi %L0,%L0,%L0"
2371   [(set_attr "length" "4,12")])
2372
2373 (define_insn "*mov_sitf_e500_subreg8_2"
2374   [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "+r,m")
2375         (subreg:SI (match_operand:TF 1 "register_operand" "+r,&r") 8))]
2376   "TARGET_E500_DOUBLE"
2377   "@
2378    evmergehi %0,%0,%L1
2379    evmergelohi %L1,%L1,%L1\;{st%U0%X0|stw%U0%X0} %L1,%0"
2380   [(set_attr "length" "4,8")])
2381
2382 (define_insn "*mov_sitf_e500_subreg12"
2383   [(set (subreg:SI (match_operand:TF 0 "register_operand" "+r,r") 12)
2384         (match_operand:SI 1 "input_operand" "r,m"))]
2385   "TARGET_E500_DOUBLE"
2386   "@
2387    mr %L0,%1
2388    {l%U1%X1|lwz%U1%X1} %L0,%1")
2389
2390 (define_insn "*mov_sitf_e500_subreg12_2"
2391   [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "+r,m")
2392         (subreg:SI (match_operand:TF 1 "register_operand" "r,r") 12))]
2393   "TARGET_E500_DOUBLE"
2394   "@
2395    mr %0,%L1
2396    {st%U0%X0|stw%U0%X0} %L1,%0")
2397
2398 ;; FIXME: Allow r=CONST0.
2399 (define_insn "*movdf_e500_double"
2400   [(set (match_operand:DF 0 "rs6000_nonimmediate_operand" "=r,r,m")
2401         (match_operand:DF 1 "input_operand" "r,m,r"))]
2402   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE
2403     && (gpc_reg_operand (operands[0], DFmode)
2404         || gpc_reg_operand (operands[1], DFmode))"
2405   "*
2406  {
2407    switch (which_alternative)
2408      {
2409      case 0:
2410        return \"evor %0,%1,%1\";
2411      case 1:
2412        return \"evldd%X1 %0,%y1\";
2413      case 2:
2414        return \"evstdd%X0 %1,%y0\";
2415      default:
2416        gcc_unreachable ();
2417      }
2418  }"
2419   [(set_attr "type" "*,vecload,vecstore")
2420    (set_attr "length" "*,*,*")])
2421
2422 (define_insn "spe_truncdfsf2"
2423   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
2424         (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "r")))]
2425   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2426   "efscfd %0,%1")
2427
2428 (define_insn "spe_absdf2"
2429   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2430         (abs:DF (match_operand:DF 1 "gpc_reg_operand" "r")))]
2431   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2432   "efdabs %0,%1")
2433
2434 (define_insn "spe_nabsdf2"
2435   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2436         (neg:DF (abs:DF (match_operand:DF 1 "gpc_reg_operand" "r"))))]
2437   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2438   "efdnabs %0,%1")
2439
2440 (define_insn "spe_negdf2"
2441   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2442         (neg:DF (match_operand:DF 1 "gpc_reg_operand" "r")))]
2443   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2444   "efdneg %0,%1")
2445
2446 (define_insn "spe_adddf3"
2447   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2448         (plus:DF (match_operand:DF 1 "gpc_reg_operand" "r")
2449                  (match_operand:DF 2 "gpc_reg_operand" "r")))]
2450   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2451   "efdadd %0,%1,%2")
2452
2453 (define_insn "spe_subdf3"
2454   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2455         (minus:DF (match_operand:DF 1 "gpc_reg_operand" "r")
2456                   (match_operand:DF 2 "gpc_reg_operand" "r")))]
2457   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2458   "efdsub %0,%1,%2")
2459
2460 (define_insn "spe_muldf3"
2461   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2462         (mult:DF (match_operand:DF 1 "gpc_reg_operand" "r")
2463                  (match_operand:DF 2 "gpc_reg_operand" "r")))]
2464   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2465   "efdmul %0,%1,%2")
2466
2467 (define_insn "spe_divdf3"
2468   [(set (match_operand:DF 0 "gpc_reg_operand" "=r")
2469         (div:DF (match_operand:DF 1 "gpc_reg_operand" "r")
2470                 (match_operand:DF 2 "gpc_reg_operand" "r")))]
2471   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE"
2472   "efddiv %0,%1,%2")
2473
2474 ;; Double-precision floating point instructions for IBM long double.
2475
2476 (define_insn_and_split "spe_trunctfdf2_internal1"
2477   [(set (match_operand:DF 0 "gpc_reg_operand" "=r,?r")
2478         (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "0,r")))]
2479   "!TARGET_IEEEQUAD
2480    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2481   "@
2482    #
2483    evor %0,%1,%1"
2484   "&& reload_completed && REGNO (operands[0]) == REGNO (operands[1])"
2485   [(const_int 0)]
2486 {
2487   emit_note (NOTE_INSN_DELETED);
2488   DONE;
2489 })
2490
2491 (define_insn_and_split "spe_trunctfsf2"
2492   [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
2493         (float_truncate:SF (match_operand:TF 1 "gpc_reg_operand" "r")))
2494    (clobber (match_scratch:DF 2 "=r"))]
2495   "!TARGET_IEEEQUAD
2496    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2497   "#"
2498   "&& reload_completed"
2499   [(set (match_dup 2)
2500         (float_truncate:DF (match_dup 1)))
2501    (set (match_dup 0)
2502         (float_truncate:SF (match_dup 2)))]
2503   "")
2504
2505 (define_insn "spe_extenddftf2"
2506   [(set (match_operand:TF 0 "rs6000_nonimmediate_operand" "=r,?r,r,o")
2507         (float_extend:TF (match_operand:DF 1 "input_operand" "0,r,m,r")))
2508    (clobber (match_scratch:DF 2 "=X,X,X,&r"))]
2509   "!TARGET_IEEEQUAD
2510    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2511   "@
2512    evxor %L0,%L0,%L0
2513    evor %0,%1,%1\;evxor %L0,%L0,%L0
2514    evldd%X1 %0,%y1\;evxor %L0,%L0,%L0
2515    evstdd%X0 %1,%y0\;evxor %2,%2,%2\;evstdd %2,%Y0"
2516   [(set_attr "length" "4,8,8,12")])
2517
2518 (define_expand "spe_fix_trunctfsi2"
2519   [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
2520                    (fix:SI (match_operand:TF 1 "gpc_reg_operand" "")))
2521               (clobber (match_dup 2))
2522               (clobber (match_dup 3))
2523               (clobber (match_dup 4))])]
2524   "!TARGET_IEEEQUAD
2525    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2526 {
2527   operands[2] = gen_reg_rtx (DFmode);
2528   operands[3] = gen_reg_rtx (SImode);
2529   operands[4] = gen_reg_rtx (SImode);
2530 })
2531
2532 ; Like fix_trunc_helper, add with rounding towards 0.
2533 (define_insn "spe_fix_trunctfsi2_internal"
2534   [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
2535         (fix:SI (match_operand:TF 1 "gpc_reg_operand" "r")))
2536    (clobber (match_operand:DF 2 "gpc_reg_operand" "=r"))
2537    (clobber (match_operand:SI 3 "gpc_reg_operand" "=&r"))
2538    (clobber (match_operand:SI 4 "gpc_reg_operand" "=&r"))]
2539   "!TARGET_IEEEQUAD
2540    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2541   "mfspefscr %3\;rlwinm %4,%3,0,0,29\;ori %4,%4,1\;efdadd %2,%1,%L1\;mtspefscr %3\;efdctsiz %0, %2"
2542   [(set_attr "length" "24")])
2543
2544 (define_insn "spe_negtf2_internal"
2545   [(set (match_operand:TF 0 "gpc_reg_operand" "=r")
2546         (neg:TF (match_operand:TF 1 "gpc_reg_operand" "r")))]
2547   "!TARGET_IEEEQUAD
2548    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2549   "*
2550 {
2551   if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
2552     return \"efdneg %L0,%L1\;efdneg %0,%1\";
2553   else
2554     return \"efdneg %0,%1\;efdneg %L0,%L1\";
2555 }"
2556   [(set_attr "length" "8")])
2557
2558 (define_expand "spe_abstf2_cmp"
2559   [(set (match_operand:TF 0 "gpc_reg_operand" "=f")
2560         (match_operand:TF 1 "gpc_reg_operand" "f"))
2561    (set (match_dup 3) (match_dup 5))
2562    (set (match_dup 5) (abs:DF (match_dup 5)))
2563    (set (match_dup 4) (unspec:CCFP [(compare:CCFP (match_dup 3)
2564                                                   (match_dup 5))] CMPDFEQ_GPR))
2565    (set (pc) (if_then_else (eq (match_dup 4) (const_int 0))
2566                            (label_ref (match_operand 2 "" ""))
2567                            (pc)))
2568    (set (match_dup 6) (neg:DF (match_dup 6)))]
2569   "!TARGET_IEEEQUAD
2570    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2571   "
2572 {
2573   const int hi_word = FLOAT_WORDS_BIG_ENDIAN ? 0 : GET_MODE_SIZE (DFmode);
2574   const int lo_word = FLOAT_WORDS_BIG_ENDIAN ? GET_MODE_SIZE (DFmode) : 0;
2575   operands[3] = gen_reg_rtx (DFmode);
2576   operands[4] = gen_reg_rtx (CCFPmode);
2577   operands[5] = simplify_gen_subreg (DFmode, operands[0], TFmode, hi_word);
2578   operands[6] = simplify_gen_subreg (DFmode, operands[0], TFmode, lo_word);
2579 }")
2580
2581 (define_expand "spe_abstf2_tst"
2582   [(set (match_operand:TF 0 "gpc_reg_operand" "=f")
2583         (match_operand:TF 1 "gpc_reg_operand" "f"))
2584    (set (match_dup 3) (match_dup 5))
2585    (set (match_dup 5) (abs:DF (match_dup 5)))
2586    (set (match_dup 4) (unspec:CCFP [(compare:CCFP (match_dup 3)
2587                                                   (match_dup 5))] TSTDFEQ_GPR))
2588    (set (pc) (if_then_else (eq (match_dup 4) (const_int 0))
2589                            (label_ref (match_operand 2 "" ""))
2590                            (pc)))
2591    (set (match_dup 6) (neg:DF (match_dup 6)))]
2592   "!TARGET_IEEEQUAD
2593    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128"
2594   "
2595 {
2596   const int hi_word = FLOAT_WORDS_BIG_ENDIAN ? 0 : GET_MODE_SIZE (DFmode);
2597   const int lo_word = FLOAT_WORDS_BIG_ENDIAN ? GET_MODE_SIZE (DFmode) : 0;
2598   operands[3] = gen_reg_rtx (DFmode);
2599   operands[4] = gen_reg_rtx (CCFPmode);
2600   operands[5] = simplify_gen_subreg (DFmode, operands[0], TFmode, hi_word);
2601   operands[6] = simplify_gen_subreg (DFmode, operands[0], TFmode, lo_word);
2602 }")
2603
2604 ;; Vector move instructions.
2605
2606 (define_expand "movv2si"
2607   [(set (match_operand:V2SI 0 "nonimmediate_operand" "")
2608         (match_operand:V2SI 1 "any_operand" ""))]
2609   "TARGET_SPE"
2610   "{ rs6000_emit_move (operands[0], operands[1], V2SImode); DONE; }")
2611
2612 (define_insn "*movv2si_internal"
2613   [(set (match_operand:V2SI 0 "nonimmediate_operand" "=m,r,r,r")
2614         (match_operand:V2SI 1 "input_operand" "r,m,r,W"))]
2615   "TARGET_SPE
2616    && (gpc_reg_operand (operands[0], V2SImode)
2617        || gpc_reg_operand (operands[1], V2SImode))"
2618   "*
2619 {
2620   switch (which_alternative)
2621     {
2622     case 0: return \"evstdd%X0 %1,%y0\";
2623     case 1: return \"evldd%X1 %0,%y1\";
2624     case 2: return \"evor %0,%1,%1\";
2625     case 3: return output_vec_const_move (operands);
2626     default: gcc_unreachable ();
2627     }
2628 }"
2629   [(set_attr "type" "vecload,vecstore,*,*")
2630    (set_attr "length" "*,*,*,12")])
2631
2632 (define_split
2633   [(set (match_operand:V2SI 0 "register_operand" "")
2634         (match_operand:V2SI 1 "zero_constant" ""))]
2635   "TARGET_SPE && reload_completed"
2636   [(set (match_dup 0)
2637         (xor:V2SI (match_dup 0) (match_dup 0)))]
2638   "")
2639
2640 (define_expand "movv1di"
2641   [(set (match_operand:V1DI 0 "nonimmediate_operand" "")
2642         (match_operand:V1DI 1 "any_operand" ""))]
2643   "TARGET_SPE"
2644   "{ rs6000_emit_move (operands[0], operands[1], V1DImode); DONE; }")
2645
2646 (define_insn "*movv1di_internal"
2647   [(set (match_operand:V1DI 0 "nonimmediate_operand" "=m,r,r,r")
2648         (match_operand:V1DI 1 "input_operand" "r,m,r,W"))]
2649   "TARGET_SPE
2650    && (gpc_reg_operand (operands[0], V1DImode)
2651        || gpc_reg_operand (operands[1], V1DImode))"
2652   "@
2653    evstdd%X0 %1,%y0
2654    evldd%X1 %0,%y1
2655    evor %0,%1,%1
2656    evxor %0,%0,%0"
2657   [(set_attr "type" "vecload,vecstore,*,*")
2658    (set_attr "length" "*,*,*,*")])
2659
2660 (define_expand "movv4hi"
2661   [(set (match_operand:V4HI 0 "nonimmediate_operand" "")
2662         (match_operand:V4HI 1 "any_operand" ""))]
2663   "TARGET_SPE"
2664   "{ rs6000_emit_move (operands[0], operands[1], V4HImode); DONE; }")
2665
2666 (define_insn "*movv4hi_internal"
2667   [(set (match_operand:V4HI 0 "nonimmediate_operand" "=m,r,r,r")
2668         (match_operand:V4HI 1 "input_operand" "r,m,r,W"))]
2669   "TARGET_SPE
2670    && (gpc_reg_operand (operands[0], V4HImode)
2671        || gpc_reg_operand (operands[1], V4HImode))"
2672   "@
2673    evstdd%X0 %1,%y0
2674    evldd%X1 %0,%y1
2675    evor %0,%1,%1
2676    evxor %0,%0,%0"
2677   [(set_attr "type" "vecload")])
2678
2679 (define_expand "movv2sf"
2680   [(set (match_operand:V2SF 0 "nonimmediate_operand" "")
2681         (match_operand:V2SF 1 "any_operand" ""))]
2682   "TARGET_SPE"
2683   "{ rs6000_emit_move (operands[0], operands[1], V2SFmode); DONE; }")
2684
2685 (define_insn "*movv2sf_internal"
2686   [(set (match_operand:V2SF 0 "nonimmediate_operand" "=m,r,r,r")
2687         (match_operand:V2SF 1 "input_operand" "r,m,r,W"))]
2688   "TARGET_SPE
2689    && (gpc_reg_operand (operands[0], V2SFmode)
2690        || gpc_reg_operand (operands[1], V2SFmode))"
2691   "@
2692    evstdd%X0 %1,%y0
2693    evldd%X1 %0,%y1
2694    evor %0,%1,%1
2695    evxor %0,%0,%0"
2696   [(set_attr "type" "vecload,vecstore,*,*")
2697    (set_attr "length" "*,*,*,*")])
2698
2699 ;; End of vector move instructions.
2700
2701 (define_insn "spe_evmwhssfaa"
2702   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2703         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2704                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 702))
2705    (clobber (reg:SI SPEFSCR_REGNO))
2706    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2707   "TARGET_SPE"
2708   "evmwhssfaa %0,%1,%2"
2709   [(set_attr "type" "veccomplex")
2710    (set_attr  "length" "4")])
2711
2712 (define_insn "spe_evmwhssmaa"
2713   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2714         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2715                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 703))
2716    (clobber (reg:SI SPEFSCR_REGNO))
2717    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2718   "TARGET_SPE"
2719   "evmwhssmaa %0,%1,%2"
2720   [(set_attr "type" "veccomplex")
2721    (set_attr  "length" "4")])
2722
2723 (define_insn "spe_evmwhsmfaa"
2724   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2725         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2726                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 704))
2727    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2728   "TARGET_SPE"
2729   "evmwhsmfaa %0,%1,%2"
2730   [(set_attr "type" "veccomplex")
2731    (set_attr  "length" "4")])
2732
2733 (define_insn "spe_evmwhsmiaa"
2734   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2735         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2736                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 705))
2737    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2738   "TARGET_SPE"
2739   "evmwhsmiaa %0,%1,%2"
2740   [(set_attr "type" "veccomplex")
2741    (set_attr  "length" "4")])
2742
2743 (define_insn "spe_evmwhusiaa"
2744   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2745         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2746                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 706))
2747    (clobber (reg:SI SPEFSCR_REGNO))
2748    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2749   "TARGET_SPE"
2750   "evmwhusiaa %0,%1,%2"
2751   [(set_attr "type" "veccomplex")
2752    (set_attr  "length" "4")])
2753
2754 (define_insn "spe_evmwhumiaa"
2755   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2756         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2757                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 707))
2758    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2759   "TARGET_SPE"
2760   "evmwhumiaa %0,%1,%2"
2761   [(set_attr "type" "veccomplex")
2762    (set_attr  "length" "4")])
2763
2764 (define_insn "spe_evmwhssfan"
2765   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2766         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2767                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 708))
2768    (clobber (reg:SI SPEFSCR_REGNO))
2769    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2770   "TARGET_SPE"
2771   "evmwhssfan %0,%1,%2"
2772   [(set_attr "type" "veccomplex")
2773    (set_attr  "length" "4")])
2774
2775 (define_insn "spe_evmwhssian"
2776   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2777         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2778                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 709))
2779    (clobber (reg:SI SPEFSCR_REGNO))
2780    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2781   "TARGET_SPE"
2782   "evmwhssian %0,%1,%2"
2783   [(set_attr "type" "veccomplex")
2784    (set_attr  "length" "4")])
2785
2786 (define_insn "spe_evmwhsmfan"
2787   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2788         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2789                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 710))
2790    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2791   "TARGET_SPE"
2792   "evmwhsmfan %0,%1,%2"
2793   [(set_attr "type" "veccomplex")
2794    (set_attr  "length" "4")])
2795
2796 (define_insn "spe_evmwhsmian"
2797   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2798         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2799                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 711))
2800    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2801   "TARGET_SPE"
2802   "evmwhsmian %0,%1,%2"
2803   [(set_attr "type" "veccomplex")
2804    (set_attr  "length" "4")])
2805
2806 (define_insn "spe_evmwhumian"
2807   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2808         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2809                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 713))
2810    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2811   "TARGET_SPE"
2812   "evmwhumian %0,%1,%2"
2813   [(set_attr "type" "veccomplex")
2814    (set_attr  "length" "4")])
2815
2816 (define_insn "spe_evmwhgssfaa"
2817   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2818         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2819                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 714))
2820    (clobber (reg:SI SPEFSCR_REGNO))
2821    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2822   "TARGET_SPE"
2823   "evmwhgssfaa %0,%1,%2"
2824   [(set_attr "type" "veccomplex")
2825    (set_attr  "length" "4")])
2826
2827 (define_insn "spe_evmwhgsmfaa"
2828   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2829         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2830                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 715))
2831    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2832   "TARGET_SPE"
2833   "evmwhgsmfaa %0,%1,%2"
2834   [(set_attr "type" "veccomplex")
2835    (set_attr  "length" "4")])
2836
2837 (define_insn "spe_evmwhgsmiaa"
2838   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2839         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2840                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 716))
2841    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2842   "TARGET_SPE"
2843   "evmwhgsmiaa %0,%1,%2"
2844   [(set_attr "type" "veccomplex")
2845    (set_attr  "length" "4")])
2846
2847 (define_insn "spe_evmwhgumiaa"
2848   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2849         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2850                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 717))
2851    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2852   "TARGET_SPE"
2853   "evmwhgumiaa %0,%1,%2"
2854   [(set_attr "type" "veccomplex")
2855    (set_attr  "length" "4")])
2856
2857 (define_insn "spe_evmwhgssfan"
2858   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2859         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2860                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 718))
2861    (clobber (reg:SI SPEFSCR_REGNO))
2862    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2863   "TARGET_SPE"
2864   "evmwhgssfan %0,%1,%2"
2865   [(set_attr "type" "veccomplex")
2866    (set_attr  "length" "4")])
2867
2868 (define_insn "spe_evmwhgsmfan"
2869   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2870         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2871                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 719))
2872    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2873   "TARGET_SPE"
2874   "evmwhgsmfan %0,%1,%2"
2875   [(set_attr "type" "veccomplex")
2876    (set_attr  "length" "4")])
2877
2878 (define_insn "spe_evmwhgsmian"
2879   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2880         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2881                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 720))
2882    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2883   "TARGET_SPE"
2884   "evmwhgsmian %0,%1,%2"
2885   [(set_attr "type" "veccomplex")
2886    (set_attr  "length" "4")])
2887
2888 (define_insn "spe_evmwhgumian"
2889   [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
2890         (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
2891                       (match_operand:V2SI 2 "gpc_reg_operand" "r")] 721))
2892    (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
2893   "TARGET_SPE"
2894   "evmwhgumian %0,%1,%2"
2895   [(set_attr "type" "veccomplex")
2896    (set_attr  "length" "4")])
2897
2898 (define_insn "spe_mtspefscr"
2899   [(set (reg:SI SPEFSCR_REGNO)
2900         (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
2901                             722))]
2902   "TARGET_SPE"
2903   "mtspefscr %0"
2904   [(set_attr "type" "vecsimple")])
2905
2906 (define_insn "spe_mfspefscr"
2907   [(set (match_operand:SI 0 "register_operand" "=r")
2908         (unspec_volatile:SI [(reg:SI SPEFSCR_REGNO)] 723))]
2909   "TARGET_SPE"
2910   "mfspefscr %0"
2911   [(set_attr "type" "vecsimple")])
2912
2913 ;; FP comparison stuff.
2914
2915 ;; Flip the GT bit.
2916 (define_insn "e500_flip_gt_bit"
2917   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2918         (unspec:CCFP
2919          [(match_operand:CCFP 1 "cc_reg_operand" "y")] 999))]
2920   "!TARGET_FPRS && TARGET_HARD_FLOAT"
2921   "*
2922 {
2923   return output_e500_flip_gt_bit (operands[0], operands[1]);
2924 }"
2925   [(set_attr "type" "cr_logical")])
2926
2927 ;; MPC8540 single-precision FP instructions on GPRs.
2928 ;; We have 2 variants for each.  One for IEEE compliant math and one
2929 ;; for non IEEE compliant math.
2930
2931 (define_insn "cmpsfeq_gpr"
2932   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2933         (unspec:CCFP
2934          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2935                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2936          1000))]
2937   "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
2938   "efscmpeq %0,%1,%2"
2939   [(set_attr "type" "veccmp")])
2940
2941 (define_insn "tstsfeq_gpr"
2942   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2943         (unspec:CCFP
2944          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2945                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2946          1001))]
2947   "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
2948   "efststeq %0,%1,%2"
2949   [(set_attr "type" "veccmpsimple")])
2950
2951 (define_insn "cmpsfgt_gpr"
2952   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2953         (unspec:CCFP
2954          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2955                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2956          1002))]
2957   "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
2958   "efscmpgt %0,%1,%2"
2959   [(set_attr "type" "veccmp")])
2960
2961 (define_insn "tstsfgt_gpr"
2962   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2963         (unspec:CCFP
2964          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2965                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2966          1003))]
2967   "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
2968   "efststgt %0,%1,%2"
2969   [(set_attr "type" "veccmpsimple")])
2970
2971 (define_insn "cmpsflt_gpr"
2972   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2973         (unspec:CCFP
2974          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2975                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2976          1004))]
2977   "TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
2978   "efscmplt %0,%1,%2"
2979   [(set_attr "type" "veccmp")])
2980
2981 (define_insn "tstsflt_gpr"
2982   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2983         (unspec:CCFP
2984          [(compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "r")
2985                         (match_operand:SF 2 "gpc_reg_operand" "r"))]
2986          1005))]
2987   "TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
2988   "efststlt %0,%1,%2"
2989   [(set_attr "type" "veccmpsimple")])
2990
2991 ;; Same thing, but for double-precision.
2992
2993 (define_insn "cmpdfeq_gpr"
2994   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
2995         (unspec:CCFP
2996          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
2997                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
2998          CMPDFEQ_GPR))]
2999   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations"
3000   "efdcmpeq %0,%1,%2"
3001   [(set_attr "type" "veccmp")])
3002
3003 (define_insn "tstdfeq_gpr"
3004   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3005         (unspec:CCFP
3006          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
3007                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
3008          TSTDFEQ_GPR))]
3009   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations"
3010   "efdtsteq %0,%1,%2"
3011   [(set_attr "type" "veccmpsimple")])
3012
3013 (define_insn "cmpdfgt_gpr"
3014   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3015         (unspec:CCFP
3016          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
3017                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
3018          CMPDFGT_GPR))]
3019   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations"
3020   "efdcmpgt %0,%1,%2"
3021   [(set_attr "type" "veccmp")])
3022
3023 (define_insn "tstdfgt_gpr"
3024   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3025         (unspec:CCFP
3026          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
3027                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
3028          TSTDFGT_GPR))]
3029   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations"
3030   "efdtstgt %0,%1,%2"
3031   [(set_attr "type" "veccmpsimple")])
3032
3033 (define_insn "cmpdflt_gpr"
3034   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3035         (unspec:CCFP
3036          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
3037                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
3038          CMPDFLT_GPR))]
3039   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && !flag_unsafe_math_optimizations"
3040   "efdcmplt %0,%1,%2"
3041   [(set_attr "type" "veccmp")])
3042
3043 (define_insn "tstdflt_gpr"
3044   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3045         (unspec:CCFP
3046          [(compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "r")
3047                         (match_operand:DF 2 "gpc_reg_operand" "r"))]
3048          TSTDFLT_GPR))]
3049   "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations"
3050   "efdtstlt %0,%1,%2"
3051   [(set_attr "type" "veccmpsimple")])
3052
3053 ;; Same thing, but for IBM long double.
3054
3055 (define_insn "cmptfeq_gpr"
3056   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3057         (unspec:CCFP
3058          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3059                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3060          CMPTFEQ_GPR))]
3061   "!TARGET_IEEEQUAD
3062    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3063    && !flag_unsafe_math_optimizations"
3064   "efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmpeq %0,%L1,%L2"
3065   [(set_attr "type" "veccmp")
3066    (set_attr "length" "12")])
3067
3068 (define_insn "tsttfeq_gpr"
3069   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3070         (unspec:CCFP
3071          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3072                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3073          TSTTFEQ_GPR))]
3074   "!TARGET_IEEEQUAD
3075    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3076    && flag_unsafe_math_optimizations"
3077   "efdtsteq %0,%1,%2\;bng %0,$+8\;efdtsteq %0,%L1,%L2"
3078   [(set_attr "type" "veccmpsimple")
3079    (set_attr "length" "12")])
3080
3081 (define_insn "cmptfgt_gpr"
3082   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3083         (unspec:CCFP
3084          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3085                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3086          CMPTFGT_GPR))]
3087   "!TARGET_IEEEQUAD
3088    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3089    && !flag_unsafe_math_optimizations"
3090   "efdcmpgt %0,%1,%2\;bgt %0,$+16\;efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmpgt %0,%L1,%L2"
3091   [(set_attr "type" "veccmp")
3092    (set_attr "length" "20")])
3093
3094 (define_insn "tsttfgt_gpr"
3095   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3096         (unspec:CCFP
3097          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3098                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3099          TSTTFGT_GPR))]
3100   "!TARGET_IEEEQUAD
3101    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3102    && flag_unsafe_math_optimizations"
3103   "efdtstgt %0,%1,%2\;bgt %0,$+16\;efdtsteq %0,%1,%2\;bng %0,$+8\;efdtstgt %0,%L1,%L2"
3104   [(set_attr "type" "veccmpsimple")
3105    (set_attr "length" "20")])
3106
3107 (define_insn "cmptflt_gpr"
3108   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3109         (unspec:CCFP
3110          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3111                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3112          CMPTFLT_GPR))]
3113   "!TARGET_IEEEQUAD
3114    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3115    && !flag_unsafe_math_optimizations"
3116   "efdcmplt %0,%1,%2\;bgt %0,$+16\;efdcmpeq %0,%1,%2\;bng %0,$+8\;efdcmplt %0,%L1,%L2"
3117   [(set_attr "type" "veccmp")
3118    (set_attr "length" "20")])
3119
3120 (define_insn "tsttflt_gpr"
3121   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3122         (unspec:CCFP
3123          [(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "r")
3124                         (match_operand:TF 2 "gpc_reg_operand" "r"))]
3125          TSTTFLT_GPR))]
3126   "!TARGET_IEEEQUAD
3127    && TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && TARGET_LONG_DOUBLE_128
3128    && flag_unsafe_math_optimizations"
3129   "efdtstlt %0,%1,%2\;bgt %0,$+16\;efdtsteq %0,%1,%2\;bng %0,$+8\;efdtstlt %0,%L1,%L2"
3130   [(set_attr "type" "veccmpsimple")
3131    (set_attr "length" "20")])
3132
3133 ;; Like cceq_ior_compare, but compare the GT bits.
3134 (define_insn "e500_cr_ior_compare"
3135   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
3136         (unspec:CCFP [(match_operand 1 "cc_reg_operand" "y")
3137                       (match_operand 2 "cc_reg_operand" "y")]
3138                      E500_CR_IOR_COMPARE))]
3139   "TARGET_E500"
3140   "cror 4*%0+gt,4*%1+gt,4*%2+gt"
3141   [(set_attr "type" "cr_logical")])