Skip to content

Commit c4ab811

Browse files
committed
[PowerPC] Implement VSX Vector Integer Arithmetic Instructions
* xvadduwm - VSX Vector Add UnsignedWord Modulo * xvadduhm - VSXVectorAddUnsigned HalfwordModulo * xvsubuwm - VSXVectorSubtract UnsignedWord Modulo * xvsubuhm - VSX Vector SubtractUnsigned HalfwordModulo * xvmuluwm - VSX Vector MultiplyUnsigned WordModulo * xvmuluhm - VSXVectorMultiply Unsigned Halfword Modulo * xvmulhsw - VSX Vector MultiplyHigh SignedWord * xvmulhsh - VSX Vector Multiply HighSigned Halfword * xvmulhuw - VSX Vector Multiply HighUnsigned Word * xvmulhuh - VSX Vector MultiplyHigh UnsignedHalfword
1 parent c511e1a commit c4ab811

File tree

4 files changed

+146
-0
lines changed

4 files changed

+146
-0
lines changed

llvm/lib/Target/PowerPC/PPCInstrFuture.td

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,30 @@ class VXForm_VRTAB5<bits<11> xo, dag OOL, dag IOL, string asmstr,
120120
let Inst{21...31} = xo;
121121
}
122122

123+
class XX3Form_XTAB6<bits<8> xo, dag OOL, dag IOL, string asmstr,
124+
list<dag> pattern> : I<60, OOL, IOL, asmstr, NoItinerary> {
125+
bits<6> XT;
126+
bits<6> XA;
127+
bits<6> XB;
128+
129+
let Pattern = pattern;
130+
131+
let Inst{6...10} = XT{4...0};
132+
let Inst{11...15} = XA{4...0};
133+
let Inst{16...20} = XB{4...0};
134+
let Inst{21...28} = xo;
135+
let Inst{29} = XA{5};
136+
let Inst{30} = XB{5};
137+
let Inst{31} = XT{5};
138+
}
139+
140+
141+
//-------------------------- Instruction definitions -------------------------//
142+
143+
// Predicate combinations available:
144+
// [IsISAFuture]
145+
// [HasVSX, IsISAFuture]
146+
123147
let Predicates = [IsISAFuture] in {
124148
defm SUBFUS : XOForm_RTAB5_L1r<31, 72, (outs g8rc:$RT),
125149
(ins g8rc:$RA, g8rc:$RB, u1imm:$L), "subfus",
@@ -191,4 +215,26 @@ let Predicates = [HasVSX, IsISAFuture] in {
191215
def VUCMPRLH
192216
: VXForm_VRTAB5<323, (outs vrrc:$VRT), (ins vrrc:$VRA, vrrc:$VRB),
193217
"vucmprlh $VRT, $VRA, $VRB", []>;
218+
219+
// VSX Vector Integer Arithmetic Instructions
220+
def XVADDUWM : XX3Form_XTAB6<131, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
221+
"xvadduwm $XT, $XA, $XB", []>;
222+
def XVADDUHM : XX3Form_XTAB6<139, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
223+
"xvadduhm $XT, $XA, $XB", []>;
224+
def XVSUBUWM: XX3Form_XTAB6<147, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
225+
"xvsubuwm $XT, $XA, $XB", []>;
226+
def XVSUBUHM: XX3Form_XTAB6<155, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
227+
"xvsubuhm $XT, $XA, $XB", []>;
228+
def XVMULUWM: XX3Form_XTAB6<163, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
229+
"xvmuluwm $XT, $XA, $XB", []>;
230+
def XVMULUHM: XX3Form_XTAB6<171, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
231+
"xvmuluhm $XT, $XA, $XB", []>;
232+
def XVMULHSW: XX3Form_XTAB6<179, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
233+
"xvmulhsw $XT, $XA, $XB", []>;
234+
def XVMULHSH: XX3Form_XTAB6<187, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
235+
"xvmulhsh $XT, $XA, $XB", []>;
236+
def XVMULHUW: XX3Form_XTAB6<114, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
237+
"xvmulhuw $XT, $XA, $XB", []>;
238+
def XVMULHUH: XX3Form_XTAB6<122, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
239+
"xvmulhuh $XT, $XA, $XB", []>;
194240
}

llvm/test/MC/Disassembler/PowerPC/ppc-encoding-ISAFuture.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,33 @@
231231

232232
#CHECK: vucmprhh 1, 3, 6
233233
0x10,0x23,0x31,0x03
234+
235+
#CHECK: xvadduwm 4, 5, 7
236+
0xf0,0x85,0x3c,0x18
237+
238+
#CHECK: xvadduhm 4, 5, 7
239+
0xf0,0x85,0x3c,0x58
240+
241+
#CHECK: xvsubuwm 4, 5, 7
242+
0xf0,0x85,0x3c,0x98
243+
244+
#CHECK: xvsubuhm 4, 5, 7
245+
0xf0,0x85,0x3c,0xd8
246+
247+
#CHECK: xvmuluwm 4, 5, 7
248+
0xf0,0x85,0x3d,0x18
249+
250+
#CHECK: xvmuluhm 4, 5, 7
251+
0xf0,0x85,0x3d,0x58
252+
253+
#CHECK: xvmulhsw 4, 5, 7
254+
0xf0,0x85,0x3d,0x98
255+
256+
#CHECK: xvmulhsh 4, 5, 7
257+
0xf0,0x85,0x3d,0xd8
258+
259+
#CHECK: xvmulhuw 4, 5, 7
260+
0xf0,0x85,0x3b,0x90
261+
262+
#CHECK: xvmulhuh 4, 5, 7
263+
0xf0,0x85,0x3b,0xd0

llvm/test/MC/Disassembler/PowerPC/ppc64le-encoding-ISAFuture.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,33 @@
225225

226226
#CHECK: vucmprhh 1, 3, 6
227227
0x03,0x31,0x23,0x10
228+
229+
#CHECK: xvadduwm 4, 5, 7
230+
0x18,0x3c,0x85,0xf0
231+
232+
#CHECK: xvadduhm 4, 5, 7
233+
0x58,0x3c,0x85,0xf0
234+
235+
#CHECK: xvsubuwm 4, 5, 7
236+
0x98,0x3c,0x85,0xf0
237+
238+
#CHECK: xvsubuhm 4, 5, 7
239+
0xd8,0x3c,0x85,0xf0
240+
241+
#CHECK: xvmuluwm 4, 5, 7
242+
0x18,0x3d,0x85,0xf0
243+
244+
#CHECK: xvmuluhm 4, 5, 7
245+
0x58,0x3d,0x85,0xf0
246+
247+
#CHECK: xvmulhsw 4, 5, 7
248+
0x98,0x3d,0x85,0xf0
249+
250+
#CHECK: xvmulhsh 4, 5, 7
251+
0xd8,0x3d,0x85,0xf0
252+
253+
#CHECK: xvmulhuw 4, 5, 7
254+
0x90,0x3b,0x85,0xf0
255+
256+
#CHECK: xvmulhuh 4, 5, 7
257+
0xd0,0x3b,0x85,0xf0

llvm/test/MC/PowerPC/ppc-encoding-ISAFuture.s

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,43 @@
330330
vucmprhh 1, 3, 6
331331
#CHECK-BE: vucmprhh 1, 3, 6 # encoding: [0x10,0x23,0x31,0x03]
332332
#CHECK-LE: vucmprhh 1, 3, 6 # encoding: [0x03,0x31,0x23,0x10]
333+
334+
xvadduwm 4, 5, 7
335+
#CHECK-BE: xvadduwm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x18]
336+
#CHECK-LE: xvadduwm 4, 5, 7 # encoding: [0x18,0x3c,0x85,0xf0]
337+
338+
xvadduhm 4, 5, 7
339+
#CHECK-BE: xvadduhm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x58]
340+
#CHECK-LE: xvadduhm 4, 5, 7 # encoding: [0x58,0x3c,0x85,0xf0]
341+
342+
xvsubuwm 4, 5, 7
343+
#CHECK-BE: xvsubuwm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x98]
344+
#CHECK-LE: xvsubuwm 4, 5, 7 # encoding: [0x98,0x3c,0x85,0xf0]
345+
346+
xvsubuhm 4, 5, 7
347+
#CHECK-BE: xvsubuhm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0xd8]
348+
#CHECK-LE: xvsubuhm 4, 5, 7 # encoding: [0xd8,0x3c,0x85,0xf0]
349+
350+
xvmuluwm 4, 5, 7
351+
#CHECK-BE: xvmuluwm 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x18]
352+
#CHECK-LE: xvmuluwm 4, 5, 7 # encoding: [0x18,0x3d,0x85,0xf0]
353+
354+
xvmuluhm 4, 5, 7
355+
#CHECK-BE: xvmuluhm 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x58]
356+
#CHECK-LE: xvmuluhm 4, 5, 7 # encoding: [0x58,0x3d,0x85,0xf0]
357+
358+
xvmulhsw 4, 5, 7
359+
#CHECK-BE: xvmulhsw 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x98]
360+
#CHECK-LE: xvmulhsw 4, 5, 7 # encoding: [0x98,0x3d,0x85,0xf0]
361+
362+
xvmulhsh 4, 5, 7
363+
#CHECK-BE: xvmulhsh 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0xd8]
364+
#CHECK-LE: xvmulhsh 4, 5, 7 # encoding: [0xd8,0x3d,0x85,0xf0]
365+
366+
xvmulhuw 4, 5, 7
367+
#CHECK-BE: xvmulhuw 4, 5, 7 # encoding: [0xf0,0x85,0x3b,0x90]
368+
#CHECK-LE: xvmulhuw 4, 5, 7 # encoding: [0x90,0x3b,0x85,0xf0]
369+
370+
xvmulhuh 4, 5, 7
371+
#CHECK-BE: xvmulhuh 4, 5, 7 # encoding: [0xf0,0x85,0x3b,0xd0]
372+
#CHECK-LE: xvmulhuh 4, 5, 7 # encoding: [0xd0,0x3b,0x85,0xf0]

0 commit comments

Comments
 (0)