1 //=======-- PPCInstrSPE.td - The PowerPC SPE Extension -*- tablegen -*-=======//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file describes the Signal Processing Engine extension to
10 // the PowerPC instruction set.
12 //===----------------------------------------------------------------------===//
14 class EFXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
15 InstrItinClass itin, list<dag> pattern> :
16 I<4, OOL, IOL, asmstr, itin> {
21 let Pattern = pattern;
29 class EFXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
30 InstrItinClass itin, list<dag> pattern> :
31 EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
35 class EFXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
36 InstrItinClass itin, list<dag> pattern> :
37 EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
41 class EFXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
42 InstrItinClass itin> :
43 I<4, OOL, IOL, asmstr, itin> {
55 class EVXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
56 InstrItinClass itin, list<dag> pattern> :
57 I<4, OOL, IOL, asmstr, itin> {
62 let Pattern = pattern;
70 class EVXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
71 InstrItinClass itin, list<dag> pattern> :
72 EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
76 class EVXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
77 InstrItinClass itin, list<dag> pattern> :
78 EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
82 class EVXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
83 InstrItinClass itin, list<dag> pattern> :
84 I<4, OOL, IOL, asmstr, itin> {
89 let Pattern = pattern;
98 class EVXForm_4<bits<8> xo, dag OOL, dag IOL, string asmstr,
99 InstrItinClass itin, list<dag> pattern> :
100 I<4, OOL, IOL, asmstr, itin> {
106 let Pattern = pattern;
109 let Inst{11-15} = RA;
110 let Inst{16-20} = RB;
111 let Inst{21-28} = xo;
112 let Inst{29-31} = crD;
115 class EVXForm_D<bits<11> xo, dag OOL, dag IOL, string asmstr,
116 InstrItinClass itin, list<dag> pattern> :
117 I<4, OOL, IOL, asmstr, itin>, MemriOp {
122 let Pattern = pattern;
125 let Inst{11-15} = RA;
127 let Inst{21-31} = xo;
130 let DecoderNamespace = "SPE", Predicates = [HasSPE] in {
132 def BRINC : EVXForm_1<527, (outs gprc:$RT), (ins gprc:$RA, gprc:$RB),
133 "brinc $RT, $RA, $RB", IIC_IntSimple, []>;
135 // Double-precision floating point
136 def EFDABS : EFXForm_2<740, (outs sperc:$RT), (ins sperc:$RA),
137 "efdabs $RT, $RA", IIC_FPDGeneral,
138 [(set f64:$RT, (fabs f64:$RA))]>;
140 def EFDADD : EFXForm_1<736, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
141 "efdadd $RT, $RA, $RB", IIC_FPAddSub,
142 [(set f64:$RT, (any_fadd f64:$RA, f64:$RB))]>;
144 def EFDCFS : EFXForm_2a<751, (outs sperc:$RT), (ins spe4rc:$RB),
145 "efdcfs $RT, $RB", IIC_FPDGeneral,
146 [(set f64:$RT, (any_fpextend f32:$RB))]>;
148 def EFDCFSF : EFXForm_2a<755, (outs sperc:$RT), (ins spe4rc:$RB),
149 "efdcfsf $RT, $RB", IIC_FPDGeneral, []>;
151 def EFDCFSI : EFXForm_2a<753, (outs sperc:$RT), (ins gprc:$RB),
152 "efdcfsi $RT, $RB", IIC_FPDGeneral,
153 [(set f64:$RT, (any_sint_to_fp i32:$RB))]>;
155 def EFDCFSID : EFXForm_2a<739, (outs sperc:$RT), (ins gprc:$RB),
156 "efdcfsid $RT, $RB", IIC_FPDGeneral,
159 def EFDCFUF : EFXForm_2a<754, (outs sperc:$RT), (ins spe4rc:$RB),
160 "efdcfuf $RT, $RB", IIC_FPDGeneral, []>;
162 def EFDCFUI : EFXForm_2a<752, (outs sperc:$RT), (ins gprc:$RB),
163 "efdcfui $RT, $RB", IIC_FPDGeneral,
164 [(set f64:$RT, (any_uint_to_fp i32:$RB))]>;
166 def EFDCFUID : EFXForm_2a<738, (outs sperc:$RT), (ins gprc:$RB),
167 "efdcfuid $RT, $RB", IIC_FPDGeneral,
170 let isCompare = 1 in {
171 def EFDCMPEQ : EFXForm_3<750, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
172 "efdcmpeq $crD, $RA, $RB", IIC_FPDGeneral>;
173 def EFDCMPGT : EFXForm_3<748, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
174 "efdcmpgt $crD, $RA, $RB", IIC_FPDGeneral>;
175 def EFDCMPLT : EFXForm_3<749, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
176 "efdcmplt $crD, $RA, $RB", IIC_FPDGeneral>;
179 def EFDCTSF : EFXForm_2a<759, (outs sperc:$RT), (ins spe4rc:$RB),
180 "efdctsf $RT, $RB", IIC_FPDGeneral, []>;
182 def EFDCTSI : EFXForm_2a<757, (outs gprc:$RT), (ins sperc:$RB),
183 "efdctsi $RT, $RB", IIC_FPDGeneral,
186 def EFDCTSIDZ : EFXForm_2a<747, (outs gprc:$RT), (ins sperc:$RB),
187 "efdctsidz $RT, $RB", IIC_FPDGeneral,
190 def EFDCTSIZ : EFXForm_2a<762, (outs gprc:$RT), (ins sperc:$RB),
191 "efdctsiz $RT, $RB", IIC_FPDGeneral,
192 [(set i32:$RT, (any_fp_to_sint f64:$RB))]>;
194 def EFDCTUF : EFXForm_2a<758, (outs sperc:$RT), (ins spe4rc:$RB),
195 "efdctuf $RT, $RB", IIC_FPDGeneral, []>;
197 def EFDCTUI : EFXForm_2a<756, (outs gprc:$RT), (ins sperc:$RB),
198 "efdctui $RT, $RB", IIC_FPDGeneral,
201 def EFDCTUIDZ : EFXForm_2a<746, (outs gprc:$RT), (ins sperc:$RB),
202 "efdctuidz $RT, $RB", IIC_FPDGeneral,
205 def EFDCTUIZ : EFXForm_2a<760, (outs gprc:$RT), (ins sperc:$RB),
206 "efdctuiz $RT, $RB", IIC_FPDGeneral,
207 [(set i32:$RT, (any_fp_to_uint f64:$RB))]>;
209 def EFDDIV : EFXForm_1<745, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
210 "efddiv $RT, $RA, $RB", IIC_FPDivD,
211 [(set f64:$RT, (any_fdiv f64:$RA, f64:$RB))]>;
213 def EFDMUL : EFXForm_1<744, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
214 "efdmul $RT, $RA, $RB", IIC_FPDGeneral,
215 [(set f64:$RT, (any_fmul f64:$RA, f64:$RB))]>;
217 def EFDNABS : EFXForm_2<741, (outs sperc:$RT), (ins sperc:$RA),
218 "efdnabs $RT, $RA", IIC_FPDGeneral,
219 [(set f64:$RT, (fneg (fabs f64:$RA)))]>;
221 def EFDNEG : EFXForm_2<742, (outs sperc:$RT), (ins sperc:$RA),
222 "efdneg $RT, $RA", IIC_FPDGeneral,
223 [(set f64:$RT, (fneg f64:$RA))]>;
225 def EFDSUB : EFXForm_1<737, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
226 "efdsub $RT, $RA, $RB", IIC_FPDGeneral,
227 [(set f64:$RT, (any_fsub f64:$RA, f64:$RB))]>;
229 let isCompare = 1 in {
230 def EFDTSTEQ : EFXForm_3<766, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
231 "efdtsteq $crD, $RA, $RB", IIC_FPDGeneral>;
232 def EFDTSTGT : EFXForm_3<764, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
233 "efdtstgt $crD, $RA, $RB", IIC_FPDGeneral>;
234 def EFDTSTLT : EFXForm_3<765, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
235 "efdtstlt $crD, $RA, $RB", IIC_FPDGeneral>;
238 // Single-precision floating point
239 def EFSABS : EFXForm_2<708, (outs spe4rc:$RT), (ins spe4rc:$RA),
240 "efsabs $RT, $RA", IIC_FPSGeneral,
241 [(set f32:$RT, (fabs f32:$RA))]>;
243 def EFSADD : EFXForm_1<704, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
244 "efsadd $RT, $RA, $RB", IIC_FPAddSub,
245 [(set f32:$RT, (any_fadd f32:$RA, f32:$RB))]>;
247 def EFSCFD : EFXForm_2a<719, (outs spe4rc:$RT), (ins sperc:$RB),
248 "efscfd $RT, $RB", IIC_FPSGeneral,
249 [(set f32:$RT, (any_fpround f64:$RB))]>;
251 def EFSCFSF : EFXForm_2a<723, (outs spe4rc:$RT), (ins spe4rc:$RB),
252 "efscfsf $RT, $RB", IIC_FPSGeneral, []>;
254 def EFSCFSI : EFXForm_2a<721, (outs spe4rc:$RT), (ins gprc:$RB),
255 "efscfsi $RT, $RB", IIC_FPSGeneral,
256 [(set f32:$RT, (any_sint_to_fp i32:$RB))]>;
258 def EFSCFUF : EFXForm_2a<722, (outs spe4rc:$RT), (ins spe4rc:$RB),
259 "efscfuf $RT, $RB", IIC_FPSGeneral, []>;
261 def EFSCFUI : EFXForm_2a<720, (outs spe4rc:$RT), (ins gprc:$RB),
262 "efscfui $RT, $RB", IIC_FPSGeneral,
263 [(set f32:$RT, (any_uint_to_fp i32:$RB))]>;
265 let isCompare = 1 in {
266 def EFSCMPEQ : EFXForm_3<718, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
267 "efscmpeq $crD, $RA, $RB", IIC_FPCompare>;
268 def EFSCMPGT : EFXForm_3<716, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
269 "efscmpgt $crD, $RA, $RB", IIC_FPCompare>;
270 def EFSCMPLT : EFXForm_3<717, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
271 "efscmplt $crD, $RA, $RB", IIC_FPCompare>;
274 def EFSCTSF : EFXForm_2a<727, (outs spe4rc:$RT), (ins spe4rc:$RB),
275 "efsctsf $RT, $RB", IIC_FPSGeneral, []>;
277 def EFSCTSI : EFXForm_2a<725, (outs gprc:$RT), (ins spe4rc:$RB),
278 "efsctsi $RT, $RB", IIC_FPSGeneral,
281 def EFSCTSIZ : EFXForm_2a<730, (outs gprc:$RT), (ins spe4rc:$RB),
282 "efsctsiz $RT, $RB", IIC_FPSGeneral,
283 [(set i32:$RT, (any_fp_to_sint f32:$RB))]>;
285 def EFSCTUF : EFXForm_2a<726, (outs sperc:$RT), (ins spe4rc:$RB),
286 "efsctuf $RT, $RB", IIC_FPSGeneral, []>;
288 def EFSCTUI : EFXForm_2a<724, (outs gprc:$RT), (ins spe4rc:$RB),
289 "efsctui $RT, $RB", IIC_FPSGeneral,
292 def EFSCTUIZ : EFXForm_2a<728, (outs gprc:$RT), (ins spe4rc:$RB),
293 "efsctuiz $RT, $RB", IIC_FPSGeneral,
294 [(set i32:$RT, (any_fp_to_uint f32:$RB))]>;
296 def EFSDIV : EFXForm_1<713, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
297 "efsdiv $RT, $RA, $RB", IIC_FPDivD,
298 [(set f32:$RT, (any_fdiv f32:$RA, f32:$RB))]>;
300 def EFSMUL : EFXForm_1<712, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
301 "efsmul $RT, $RA, $RB", IIC_FPGeneral,
302 [(set f32:$RT, (any_fmul f32:$RA, f32:$RB))]>;
304 def EFSNABS : EFXForm_2<709, (outs spe4rc:$RT), (ins spe4rc:$RA),
305 "efsnabs $RT, $RA", IIC_FPGeneral,
306 [(set f32:$RT, (fneg (fabs f32:$RA)))]>;
308 def EFSNEG : EFXForm_2<710, (outs spe4rc:$RT), (ins spe4rc:$RA),
309 "efsneg $RT, $RA", IIC_FPGeneral,
310 [(set f32:$RT, (fneg f32:$RA))]>;
312 def EFSSUB : EFXForm_1<705, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
313 "efssub $RT, $RA, $RB", IIC_FPSGeneral,
314 [(set f32:$RT, (any_fsub f32:$RA, f32:$RB))]>;
316 let isCompare = 1 in {
317 def EFSTSTEQ : EFXForm_3<734, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
318 "efststeq $crD, $RA, $RB", IIC_FPCompare>;
319 def EFSTSTGT : EFXForm_3<732, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
320 "efststgt $crD, $RA, $RB", IIC_FPCompare>;
321 def EFSTSTLT : EFXForm_3<733, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
322 "efststlt $crD, $RA, $RB", IIC_FPCompare>;
325 // SPE Vector operations
327 def EVABS : EVXForm_2<520, (outs sperc:$RT), (ins sperc:$RA),
328 "evabs $RT, $RA", IIC_VecGeneral,
331 def EVADDIW : EVXForm_1<514, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
332 "evaddiw $RT, $RB, $RA", IIC_VecGeneral, []>;
333 def EVADDSMIAAW : EVXForm_2<1225, (outs sperc:$RT), (ins sperc:$RA),
334 "evaddsmiaaw $RT, $RA", IIC_VecComplex, []>;
335 def EVADDSSIAAW : EVXForm_2<1217, (outs sperc:$RT), (ins sperc:$RA),
336 "evaddssiaaw $RT, $RA", IIC_VecComplex, []>;
337 def EVADDUSIAAW : EVXForm_2<1216, (outs sperc:$RT), (ins sperc:$RA),
338 "evaddusiaaw $RT, $RA", IIC_VecComplex, []>;
339 def EVADDUMIAAW : EVXForm_2<1224, (outs sperc:$RT), (ins sperc:$RA),
340 "evaddumiaaw $RT, $RA", IIC_VecComplex, []>;
341 def EVADDW : EVXForm_1<512, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
342 "evaddw $RT, $RA, $RB", IIC_VecGeneral,
345 def EVAND : EVXForm_1<529, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
346 "evand $RT, $RA, $RB", IIC_VecGeneral,
348 def EVANDC : EVXForm_1<530, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
349 "evandc $RT, $RA, $RB", IIC_VecGeneral,
352 let isCompare = 1 in {
353 def EVCMPEQ : EVXForm_3<564, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
354 "evcmpeq $crD, $RA, $RB", IIC_VecGeneral, []>;
355 def EVCMPGTS : EVXForm_3<561, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
356 "evcmpgts $crD, $RA, $RB", IIC_VecGeneral, []>;
357 def EVCMPGTU : EVXForm_3<560, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
358 "evcmpgtu $crD, $RA, $RB", IIC_VecGeneral, []>;
359 def EVCMPLTS : EVXForm_3<563, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
360 "evcmplts $crD, $RA, $RB", IIC_VecGeneral, []>;
361 def EVCMPLTU : EVXForm_3<562, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
362 "evcmpltu $crD, $RA, $RB", IIC_VecGeneral, []>;
365 def EVCNTLSW : EVXForm_2<526, (outs sperc:$RT), (ins sperc:$RA),
366 "evcntlsw $RT, $RA", IIC_VecGeneral, []>;
367 def EVCNTLZW : EVXForm_2<525, (outs sperc:$RT), (ins sperc:$RA),
368 "evcntlzw $RT, $RA", IIC_VecGeneral,
371 def EVDIVWS : EVXForm_1<1222, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
372 "evdivws $RT, $RA, $RB", IIC_VecComplex,
374 def EVDIVWU : EVXForm_1<1223, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
375 "evdivwu $RT, $RA, $RB", IIC_VecComplex,
378 def EVEQV : EVXForm_1<537, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
379 "eveqv $RT, $RA, $RB", IIC_VecGeneral,
382 def EVEXTSB : EVXForm_2<522, (outs sperc:$RT), (ins sperc:$RA),
383 "evextsb $RT, $RA", IIC_VecGeneral,
385 def EVEXTSH : EVXForm_2<523, (outs sperc:$RT), (ins sperc:$RA),
386 "evextsh $RT, $RA", IIC_VecGeneral,
389 def EVFSABS : EVXForm_2<644, (outs sperc:$RT), (ins sperc:$RA),
390 "evfsabs $RT, $RA", IIC_VecGeneral,
392 def EVFSADD : EVXForm_1<640, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
393 "evfsadd $RT, $RA, $RB", IIC_VecComplex,
395 def EVFSCFSF : EVXForm_2a<659, (outs sperc:$RT), (ins sperc:$RB),
396 "evfscfsf $RT, $RB", IIC_VecComplex, []>;
397 def EVFSCFSI : EVXForm_2a<657, (outs sperc:$RT), (ins sperc:$RB),
398 "evfscfsi $RT, $RB", IIC_VecComplex,
400 def EVFSCFUF : EVXForm_2a<658, (outs sperc:$RT), (ins sperc:$RB),
401 "evfscfuf $RT, $RB", IIC_VecComplex, []>;
402 def EVFSCFUI : EVXForm_2a<650, (outs sperc:$RT), (ins sperc:$RB),
403 "evfscfui $RT, $RB", IIC_VecComplex,
405 let isCompare = 1 in {
406 def EVFSCMPEQ : EVXForm_3<654, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
407 "evfscmpeq $crD, $RA, $RB", IIC_FPSGeneral, []>;
408 def EVFSCMPGT : EVXForm_3<652, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
409 "evfscmpgt $crD, $RA, $RB", IIC_FPSGeneral, []>;
410 def EVFSCMPLT : EVXForm_3<653, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
411 "evfscmplt $crD, $RA, $RB", IIC_FPSGeneral, []>;
414 def EVFSCTSF : EVXForm_2a<663, (outs sperc:$RT), (ins sperc:$RB),
415 "evfsctsf $RT, $RB", IIC_VecComplex, []>;
416 def EVFSCTSI : EVXForm_2a<661, (outs sperc:$RT), (ins sperc:$RB),
417 "evfsctsi $RT, $RB", IIC_VecComplex,
419 def EVFSCTSIZ : EVXForm_2a<666, (outs sperc:$RT), (ins sperc:$RB),
420 "evfsctsiz $RT, $RB", IIC_VecComplex,
422 def EVFSCTUF : EVXForm_2a<662, (outs sperc:$RT), (ins sperc:$RB),
423 "evfsctsf $RT, $RB", IIC_VecComplex, []>;
424 def EVFSCTUI : EVXForm_2a<660, (outs sperc:$RT), (ins sperc:$RB),
425 "evfsctui $RT, $RB", IIC_VecComplex,
427 def EVFSCTUIZ : EVXForm_2a<664, (outs sperc:$RT), (ins sperc:$RB),
428 "evfsctsiz $RT, $RB", IIC_VecComplex,
430 def EVFSDIV : EVXForm_1<649, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
431 "evfsdiv $RT, $RA, $RB", IIC_FPDivD,
433 def EVFSMUL : EVXForm_1<648, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
434 "evfsmul $RT, $RA, $RB", IIC_VecComplex,
436 def EVFSNABS : EVXForm_2<645, (outs sperc:$RT), (ins sperc:$RA),
437 "evfsnabs $RT, $RA", IIC_VecGeneral,
439 def EVFSNEG : EVXForm_2<646, (outs sperc:$RT), (ins sperc:$RA),
440 "evfsneg $RT, $RA", IIC_VecGeneral,
442 def EVFSSUB : EVXForm_1<641, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
443 "evfssub $RT, $RA, $RB", IIC_VecComplex,
446 let isCompare = 1 in {
447 def EVFSTSTEQ : EVXForm_3<670, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
448 "evfststeq $crD, $RA, $RB", IIC_VecGeneral, []>;
449 def EVFSTSTGT : EVXForm_3<668, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
450 "evfststgt $crD, $RA, $RB", IIC_VecGeneral, []>;
451 def EVFSTSTLT : EVXForm_3<669, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
452 "evfststlt $crD, $RA, $RB", IIC_VecGeneral, []>;
455 def EVLDD : EVXForm_D<769, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
456 "evldd $RT, $dst", IIC_LdStLoad,
457 [(set f64:$RT, (load iaddr:$dst))]>;
458 def EVLDDX : EVXForm_1<768, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
459 "evlddx $RT, $src", IIC_LdStLoad,
460 [(set f64:$RT, (load xaddr:$src))]>;
461 def EVLDH : EVXForm_D<773, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
462 "evldh $RT, $dst", IIC_LdStLoad, []>;
463 def EVLDHX : EVXForm_1<772, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
464 "evldhx $RT, $src", IIC_LdStLoad, []>;
465 def EVLDW : EVXForm_D<771, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
466 "evldw $RT, $dst", IIC_LdStLoad,
468 def EVLDWX : EVXForm_1<770, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
469 "evldwx $RT, $src", IIC_LdStLoad,
471 def EVLHHESPLAT : EVXForm_D<777, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
472 "evlhhesplat $RT, $dst", IIC_LdStLoad, []>;
473 def EVLHHESPLATX : EVXForm_1<776, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
474 "evlhhesplatx $RT, $src", IIC_LdStLoad, []>;
475 def EVLHHOUSPLAT : EVXForm_D<781, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
476 "evlhhousplat $RT, $dst", IIC_LdStLoad, []>;
477 def EVLHHOUSPLATX : EVXForm_1<780, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
478 "evlhhousplatx $RT, $src", IIC_LdStLoad, []>;
479 def EVLHHOSSPLAT : EVXForm_D<783, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
480 "evlhhossplat $RT, $dst", IIC_LdStLoad, []>;
481 def EVLHHOSSPLATX : EVXForm_1<782, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
482 "evlhhossplatx $RT, $src", IIC_LdStLoad, []>;
483 def EVLWHE : EVXForm_D<785, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
484 "evlwhe $RT, $dst", IIC_LdStLoad, []>;
485 def EVLWHEX : EVXForm_1<784, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
486 "evlwhex $RT, $src", IIC_LdStLoad, []>;
487 def EVLWHOS : EVXForm_D<791, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
488 "evlwhos $RT, $dst", IIC_LdStLoad, []>;
489 def EVLWHOSX : EVXForm_1<790, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
490 "evlwhosx $RT, $src", IIC_LdStLoad, []>;
491 def EVLWHOU : EVXForm_D<789, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
492 "evlwhou $RT, $dst", IIC_LdStLoad, []>;
493 def EVLWHOUX : EVXForm_1<788, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
494 "evlwhoux $RT, $src", IIC_LdStLoad, []>;
495 def EVLWHSPLAT : EVXForm_D<797, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
496 "evlwhsplat $RT, $dst", IIC_LdStLoad, []>;
497 def EVLWHSPLATX : EVXForm_1<796, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
498 "evlwhsplatx $RT, $src", IIC_LdStLoad, []>;
499 def EVLWWSPLAT : EVXForm_D<793, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
500 "evlwwsplat $RT, $dst", IIC_LdStLoad, []>;
501 def EVLWWSPLATX : EVXForm_1<792, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
502 "evlwwsplatx $RT, $src", IIC_LdStLoad, []>;
504 def EVMERGEHI : EVXForm_1<556, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
505 "evmergehi $RT, $RA, $RB", IIC_VecGeneral, []>;
506 def EVMERGELO : EVXForm_1<557, (outs sperc:$RT), (ins gprc:$RA, gprc:$RB),
507 "evmergelo $RT, $RA, $RB", IIC_VecGeneral, []>;
508 def EVMERGEHILO : EVXForm_1<558, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
509 "evmergehilo $RT, $RA, $RB", IIC_VecGeneral, []>;
510 def EVMERGELOHI : EVXForm_1<559, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
511 "evmergelohi $RT, $RA, $RB", IIC_VecGeneral, []>;
513 def EVMHEGSMFAA : EVXForm_1<1323, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
514 "evmhegsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
515 def EVMHEGSMFAN : EVXForm_1<1451, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
516 "evmhegsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
517 def EVMHEGSMIAA : EVXForm_1<1321, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
518 "evmhegsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
519 def EVMHEGSMIAN : EVXForm_1<1449, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
520 "evmhegsmian $RT, $RA, $RB", IIC_VecComplex, []>;
521 def EVMHEGUMIAA : EVXForm_1<1320, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
522 "evmhegumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
523 def EVMHEGUMIAN : EVXForm_1<1448, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
524 "evmhegumian $RT, $RA, $RB", IIC_VecComplex, []>;
526 def EVMHESMF : EVXForm_1<1035, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
527 "evmhesmf $RT, $RA, $RB", IIC_VecComplex, []>;
528 def EVMHESMFA : EVXForm_1<1067, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
529 "evmhesmfa $RT, $RA, $RB", IIC_VecComplex, []>;
530 def EVMHESMFAAW : EVXForm_1<1291, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
531 "evmhesmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
532 def EVMHESMFANW : EVXForm_1<1419, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
533 "evmhesmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
534 def EVMHESMI : EVXForm_1<1033, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
535 "evmhesmi $RT, $RA, $RB", IIC_VecComplex, []>;
536 def EVMHESMIA : EVXForm_1<1065, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
537 "evmhesmia $RT, $RA, $RB", IIC_VecComplex, []>;
538 def EVMHESMIAAW : EVXForm_1<1289, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
539 "evmhesmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
540 def EVMHESMIANW : EVXForm_1<1417, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
541 "evmhesmianw $RT, $RA, $RB", IIC_VecComplex, []>;
542 def EVMHESSF : EVXForm_1<1027, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
543 "evmhessf $RT, $RA, $RB", IIC_VecComplex, []>;
544 def EVMHESSFA : EVXForm_1<1059, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
545 "evmhessfa $RT, $RA, $RB", IIC_VecComplex, []>;
546 def EVMHESSFAAW : EVXForm_1<1283, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
547 "evmhessfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
548 def EVMHESSFANW : EVXForm_1<1411, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
549 "evmhessfanw $RT, $RA, $RB", IIC_VecComplex, []>;
550 def EVMHESSIAAW : EVXForm_1<1281, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
551 "evmhessiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
552 def EVMHESSIANW : EVXForm_1<1409, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
553 "evmhessianw $RT, $RA, $RB", IIC_VecComplex, []>;
554 def EVMHEUMI : EVXForm_1<1032, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
555 "evmheumi $RT, $RA, $RB", IIC_VecComplex, []>;
556 def EVMHEUMIA : EVXForm_1<1064, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
557 "evmheumia $RT, $RA, $RB", IIC_VecComplex, []>;
558 def EVMHEUMIAAW : EVXForm_1<1288, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
559 "evmheumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
560 def EVMHEUMIANW : EVXForm_1<1416, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
561 "evmheumianw $RT, $RA, $RB", IIC_VecComplex, []>;
562 def EVMHEUSIAAW : EVXForm_1<1280, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
563 "evmheusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
564 def EVMHEUSIANW : EVXForm_1<1408, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
565 "evmheusianw $RT, $RA, $RB", IIC_VecComplex, []>;
566 def EVMHOGSMFAA : EVXForm_1<1327, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
567 "evmhogsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
568 def EVMHOGSMFAN : EVXForm_1<1455, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
569 "evmhogsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
570 def EVMHOGSMIAA : EVXForm_1<1325, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
571 "evmhogsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
572 def EVMHOGSMIAN : EVXForm_1<1453, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
573 "evmhogsmian $RT, $RA, $RB", IIC_VecComplex, []>;
574 def EVMHOGUMIAA : EVXForm_1<1324, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
575 "evmhogumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
576 def EVMHOGUMIAN : EVXForm_1<1452, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
577 "evmhogumian $RT, $RA, $RB", IIC_VecComplex, []>;
578 def EVMHOSMF : EVXForm_1<1039, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
579 "evmhosmf $RT, $RA, $RB", IIC_VecComplex, []>;
580 def EVMHOSMFA : EVXForm_1<1071, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
581 "evmhosmfa $RT, $RA, $RB", IIC_VecComplex, []>;
582 def EVMHOSMFAAW : EVXForm_1<1295, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
583 "evmhosmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
584 def EVMHOSMFANW : EVXForm_1<1423, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
585 "evmhosmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
586 def EVMHOSMI : EVXForm_1<1037, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
587 "evmhosmi $RT, $RA, $RB", IIC_VecComplex, []>;
588 def EVMHOSMIA : EVXForm_1<1069, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
589 "evmhosmia $RT, $RA, $RB", IIC_VecComplex, []>;
590 def EVMHOSMIAAW : EVXForm_1<1293, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
591 "evmhosmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
592 def EVMHOSMIANW : EVXForm_1<1421, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
593 "evmhosmianw $RT, $RA, $RB", IIC_VecComplex, []>;
594 def EVMHOSSF : EVXForm_1<1031, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
595 "evmhossf $RT, $RA, $RB", IIC_VecComplex, []>;
596 def EVMHOSSFA : EVXForm_1<1063, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
597 "evmhossfa $RT, $RA, $RB", IIC_VecComplex, []>;
598 def EVMHOSSFAAW : EVXForm_1<1287, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
599 "evmhossfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
600 def EVMHOSSFANW : EVXForm_1<1415, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
601 "evmhossfanw $RT, $RA, $RB", IIC_VecComplex, []>;
602 def EVMHOSSIAAW : EVXForm_1<1285, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
603 "evmhossiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
604 def EVMHOSSIANW : EVXForm_1<1413, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
605 "evmhossianw $RT, $RA, $RB", IIC_VecComplex, []>;
606 def EVMHOUMI : EVXForm_1<1036, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
607 "evmhoumi $RT, $RA, $RB", IIC_VecComplex, []>;
608 def EVMHOUMIA : EVXForm_1<1068, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
609 "evmhoumia $RT, $RA, $RB", IIC_VecComplex, []>;
610 def EVMHOUMIAAW : EVXForm_1<1292, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
611 "evmhoumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
612 def EVMHOUMIANW : EVXForm_1<1420, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
613 "evmhoumianw $RT, $RA, $RB", IIC_VecComplex, []>;
614 def EVMHOUSIAAW : EVXForm_1<1284, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
615 "evmhousiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
616 def EVMHOUSIANW : EVXForm_1<1412, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
617 "evmhousianw $RT, $RA, $RB", IIC_VecComplex, []>;
619 def EVMRA : EVXForm_2<1220, (outs sperc:$RT), (ins sperc:$RA),
620 "evmra $RT, $RA", IIC_VecComplex, []>;
622 def EVMWHSMF : EVXForm_1<1103, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
623 "evmwhsmf $RT, $RA, $RB", IIC_VecComplex, []>;
624 def EVMWHSMFA : EVXForm_1<1135, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
625 "evmwhsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
626 def EVMWHSMI : EVXForm_1<1101, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
627 "evmwhsmi $RT, $RA, $RB", IIC_VecComplex, []>;
628 def EVMWHSMIA : EVXForm_1<1133, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
629 "evmwhsmia $RT, $RA, $RB", IIC_VecComplex, []>;
630 def EVMWHSSF : EVXForm_1<1095, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
631 "evmwhssf $RT, $RA, $RB", IIC_VecComplex, []>;
632 def EVMWHSSFA : EVXForm_1<1127, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
633 "evmwhssfa $RT, $RA, $RB", IIC_VecComplex, []>;
634 def EVMWHUMI : EVXForm_1<1100, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
635 "evmwhumi $RT, $RA, $RB", IIC_VecComplex, []>;
636 def EVMWHUMIA : EVXForm_1<1132, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
637 "evmwhumia $RT, $RA, $RB", IIC_VecComplex, []>;
638 def EVMWLSMIAAW : EVXForm_1<1353, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
639 "evmwlsmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
640 def EVMWLSMIANW : EVXForm_1<1481, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
641 "evmwlsmianw $RT, $RA, $RB", IIC_VecComplex, []>;
642 def EVMWLSSIAAW : EVXForm_1<1345, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
643 "evmwlssiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
644 def EVMWLSSIANW : EVXForm_1<1473, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
645 "evmwlssianw $RT, $RA, $RB", IIC_VecComplex, []>;
646 def EVMWLUMI : EVXForm_1<1096, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
647 "evmwlumi $RT, $RA, $RB", IIC_VecComplex,
649 def EVMWLUMIA : EVXForm_1<1128, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
650 "evmwlumia $RT, $RA, $RB", IIC_VecComplex, []>;
651 def EVMWLUMIAAW : EVXForm_1<1352, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
652 "evmwlumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
653 def EVMWLUMIANW : EVXForm_1<1480, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
654 "evmwlumianw $RT, $RA, $RB", IIC_VecComplex, []>;
655 def EVMWLUSIAAW : EVXForm_1<1344, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
656 "evmwlusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
657 def EVMWLUSIANW : EVXForm_1<1472, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
658 "evmwlusianw $RT, $RA, $RB", IIC_VecComplex, []>;
659 def EVMWSMF : EVXForm_1<1115, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
660 "evmwsmf $RT, $RA, $RB", IIC_VecComplex, []>;
661 def EVMWSMFA : EVXForm_1<1147, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
662 "evmwsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
663 def EVMWSMFAA : EVXForm_1<1371, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
664 "evmwsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
665 def EVMWSMFAN : EVXForm_1<1499, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
666 "evmwsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
667 def EVMWSMI : EVXForm_1<1113, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
668 "evmwsmi $RT, $RA, $RB", IIC_VecComplex, []>;
669 def EVMWSMIA : EVXForm_1<1145, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
670 "evmwsmia $RT, $RA, $RB", IIC_VecComplex, []>;
671 def EVMWSMIAA : EVXForm_1<1369, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
672 "evmwsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
673 def EVMWSMIAN : EVXForm_1<1497, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
674 "evmwsmian $RT, $RA, $RB", IIC_VecComplex, []>;
675 def EVMWSSF : EVXForm_1<1107, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
676 "evmwssf $RT, $RA, $RB", IIC_VecComplex, []>;
677 def EVMWSSFA : EVXForm_1<1139, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
678 "evmwssfa $RT, $RA, $RB", IIC_VecComplex, []>;
679 def EVMWSSFAA : EVXForm_1<1363, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
680 "evmwssfaa $RT, $RA, $RB", IIC_VecComplex, []>;
681 def EVMWSSFAN : EVXForm_1<1491, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
682 "evmwssfan $RT, $RA, $RB", IIC_VecComplex, []>;
683 def EVMWUMI : EVXForm_1<1112, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
684 "evmwumi $RT, $RA, $RB", IIC_VecComplex, []>;
685 def EVMWUMIA : EVXForm_1<1144, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
686 "evmwumia $RT, $RA, $RB", IIC_VecComplex, []>;
687 def EVMWUMIAA : EVXForm_1<1368, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
688 "evmwumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
689 def EVMWUMIAN : EVXForm_1<1496, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
690 "evmwumian $RT, $RA, $RB", IIC_VecComplex, []>;
693 def EVNAND : EVXForm_1<542, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
694 "evnand $RT, $RA, $RB", IIC_VecGeneral,
697 def EVNEG : EVXForm_2<521, (outs sperc:$RT), (ins sperc:$RA),
698 "evneg $RT, $RA", IIC_VecGeneral,
701 def EVNOR : EVXForm_1<536, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
702 "evnor $RT, $RA, $RB", IIC_VecGeneral,
704 def EVOR : EVXForm_1<535, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
705 "evor $RT, $RA, $RB", IIC_VecGeneral,
707 def EVORC : EVXForm_1<539, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
708 "evorc $RT, $RA, $RB", IIC_VecGeneral,
711 def EVRLWI : EVXForm_1<554, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
712 "evrlwi $RT, $RA, $RB", IIC_VecGeneral, []>;
713 def EVRLW : EVXForm_1<552, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
714 "evrlw $RT, $RA, $RB", IIC_VecGeneral,
717 def EVRNDW : EVXForm_2<524, (outs sperc:$RT), (ins sperc:$RA),
718 "evrndw $RT, $RA", IIC_VecGeneral, []>;
720 def EVSEL : EVXForm_4<79, (outs sperc:$RT),
721 (ins sperc:$RA, sperc:$RB, crrc:$crD),
722 "evsel crD,$RT,$RA,$RB", IIC_VecGeneral, []>;
724 def EVSLWI : EVXForm_1<550, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
725 "evslwi $RT, $RA, $RB", IIC_VecGeneral, []>;
726 def EVSLW : EVXForm_1<548, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
727 "evslw $RT, $RA, $RB", IIC_VecGeneral,
730 def EVSPLATFI : EVXForm_2<555, (outs sperc:$RT), (ins s5imm:$RA),
731 "evsplatfi $RT, $RA", IIC_VecGeneral, []>;
732 def EVSPLATI : EVXForm_2<553, (outs sperc:$RT), (ins s5imm:$RA),
733 "evsplati $RT, $RA", IIC_VecGeneral, []>;
735 def EVSRWIS : EVXForm_1<547, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
736 "evsrwis $RT, $RA, $RB", IIC_VecGeneral, []>;
737 def EVSRWIU : EVXForm_1<546, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
738 "evsrwiu $RT, $RA, $RB", IIC_VecGeneral, []>;
739 def EVSRWS : EVXForm_1<545, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
740 "evsrws $RT, $RA, $RB", IIC_VecGeneral,
742 def EVSRWU : EVXForm_1<544, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
743 "evsrwu $RT, $RA, $RB", IIC_VecGeneral,
746 def EVSTDD : EVXForm_D<801, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
747 "evstdd $RT, $dst", IIC_LdStStore,
748 [(store f64:$RT, iaddr:$dst)]>;
749 def EVSTDDX : EVXForm_1<800, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
750 "evstddx $RT, $dst", IIC_LdStStore,
751 [(store f64:$RT, xaddr:$dst)]>;
752 def EVSTDH : EVXForm_D<805, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
753 "evstdh $RT, $dst", IIC_LdStStore, []>;
754 def EVSTDHX : EVXForm_1<804, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
755 "evstdhx $RT, $dst", IIC_LdStStore, []>;
756 def EVSTDW : EVXForm_D<803, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
757 "evstdw $RT, $dst", IIC_LdStStore,
759 def EVSTDWX : EVXForm_1<802, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
760 "evstdwx $RT, $dst", IIC_LdStStore,
762 def EVSTWHE : EVXForm_D<817, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
763 "evstwhe $RT, $dst", IIC_LdStStore, []>;
764 def EVSTWHEX : EVXForm_1<816, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
765 "evstwhex $RT, $dst", IIC_LdStStore, []>;
766 def EVSTWHO : EVXForm_D<821, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
767 "evstwho $RT, $dst", IIC_LdStStore, []>;
768 def EVSTWHOX : EVXForm_1<820, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
769 "evstwhox $RT, $dst", IIC_LdStStore, []>;
770 def EVSTWWE : EVXForm_D<825, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
771 "evstwwe $RT, $dst", IIC_LdStStore, []>;
772 def EVSTWWEX : EVXForm_1<824, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
773 "evstwwex $RT, $dst", IIC_LdStStore, []>;
774 def EVSTWWO : EVXForm_D<829, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
775 "evstwwo $RT, $dst", IIC_LdStStore, []>;
776 def EVSTWWOX : EVXForm_1<828, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
777 "evstwwox $RT, $dst", IIC_LdStStore, []>;
779 def EVSUBFSSIAAW : EVXForm_2<1219, (outs sperc:$RT), (ins sperc:$RA),
780 "evsubfssiaaw $RT, $RA", IIC_VecComplex, []>;
781 def EVSUBFSMIAAW : EVXForm_2<1227, (outs sperc:$RT), (ins sperc:$RA),
782 "evsubfsmiaaw $RT, $RA", IIC_VecComplex, []>;
783 def EVSUBFUMIAAW : EVXForm_2<1226, (outs sperc:$RT), (ins sperc:$RA),
784 "evsubfumiaaw $RT, $RA", IIC_VecComplex, []>;
785 def EVSUBFUSIAAW : EVXForm_2<1218, (outs sperc:$RT), (ins sperc:$RA),
786 "evsubfusiaaw $RT, $RA", IIC_VecComplex, []>;
787 def EVSUBFW : EVXForm_1<516, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
788 "evsubfw $RT, $RA, $RB", IIC_VecGeneral,
790 def EVSUBIFW : EVXForm_1<518, (outs sperc:$RT), (ins u5imm:$RA, sperc:$RB),
791 "evsubifw $RT, $RA, $RB", IIC_VecGeneral, []>;
792 def EVXOR : EVXForm_1<534, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
793 "evxor $RT, $RA, $RB", IIC_VecGeneral,
796 let isAsmParserOnly = 1 in {
797 // Identical to the integer Load/Stores, but to handle floats
798 def SPELWZ : DForm_1<32, (outs spe4rc:$RST), (ins (memri $D, $RA):$addr),
799 "lwz $RST, $addr", IIC_LdStLoad,
800 [(set f32:$RST, (load iaddr:$addr))]>;
801 def SPELWZX : XForm_1<31, 23, (outs spe4rc:$RST), (ins (memrr $RA, $RB):$addr),
802 "lwzx $RST, $addr", IIC_LdStLoad,
803 [(set f32:$RST, (load xaddr:$addr))]>;
804 def SPESTW : DForm_1<36, (outs), (ins spe4rc:$RST, (memri $D, $RA):$addr),
805 "stw $RST, $addr", IIC_LdStStore,
806 [(store f32:$RST, iaddr:$addr)]>;
807 def SPESTWX : XForm_8<31, 151, (outs), (ins spe4rc:$RST, (memrr $RA, $RB):$addr),
808 "stwx $RST, $addr", IIC_LdStStore,
809 [(store f32:$RST, xaddr:$addr)]>;
814 let Predicates = [HasSPE] in {
815 def SELECT_CC_SPE4 : PPCCustomInserterPseudo<(outs spe4rc:$dst),
816 (ins crrc:$cond, spe4rc:$T, spe4rc:$F,
817 i32imm:$BROPC), "#SELECT_CC_SPE4",
819 def SELECT_CC_SPE : PPCCustomInserterPseudo<(outs sperc:$dst),
820 (ins crrc:$cond, sperc:$T, sperc:$F, i32imm:$BROPC),
823 def SELECT_SPE4 : PPCCustomInserterPseudo<(outs spe4rc:$dst), (ins crbitrc:$cond,
824 spe4rc:$T, spe4rc:$F), "#SELECT_SPE4",
825 [(set f32:$dst, (select i1:$cond, f32:$T, f32:$F))]>;
826 def SELECT_SPE : PPCCustomInserterPseudo<(outs sperc:$dst), (ins crbitrc:$cond,
827 sperc:$T, sperc:$F), "#SELECT_SPE",
828 [(set f64:$dst, (select i1:$cond, f64:$T, f64:$F))]>;
830 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLT)),
831 (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
832 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULT)),
833 (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
834 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLE)),
835 (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
836 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULE)),
837 (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
838 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETEQ)),
839 (SELECT_SPE4 (CREQV $lhs, $rhs), $tval, $fval)>;
840 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGE)),
841 (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
842 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGE)),
843 (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
844 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGT)),
845 (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
846 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGT)),
847 (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
848 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETNE)),
849 (SELECT_SPE4 (CRXOR $lhs, $rhs), $tval, $fval)>;
851 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLT)),
852 (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
853 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULT)),
854 (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
855 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLE)),
856 (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
857 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULE)),
858 (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
859 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETEQ)),
860 (SELECT_SPE (CREQV $lhs, $rhs), $tval, $fval)>;
861 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGE)),
862 (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
863 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGE)),
864 (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
865 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGT)),
866 (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
867 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGT)),
868 (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
869 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETNE)),
870 (SELECT_SPE (CRXOR $lhs, $rhs), $tval, $fval)>;
873 def : Pat<(f64 (PPCbuild_spe64 i32:$rB, i32:$rA)),
874 (f64 (COPY_TO_REGCLASS (EVMERGELO $rA, $rB), SPERC))>;
876 def : Pat<(i32 (PPCextract_spe f64:$rA, 1)),
877 (i32 (EXTRACT_SUBREG (EVMERGEHI $rA, $rA), sub_32))>;
878 def : Pat<(i32 (PPCextract_spe f64:$rA, 0)),
879 (i32 (EXTRACT_SUBREG $rA, sub_32))>;