OSDN Git Service

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