Skip to content

Commit 88c988e

Browse files
authored
[PowerPC] Implement VSX Vector Integer Arithmetic Instructions (#158363)
New instructions added: * 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 40aac77 commit 88c988e

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed

llvm/lib/Target/PowerPC/PPCInstrFuture.td

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,25 @@ class XX3Form_XTAB6_P1<bits<5> xo, dag OOL, dag IOL, string asmstr,
183183
let Inst{31} = XT{5};
184184
}
185185

186+
class XX3Form_XTAB6<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
187+
list<dag> pattern>
188+
: I<opcode, OOL, IOL, asmstr, NoItinerary> {
189+
190+
bits<6> XT;
191+
bits<6> XA;
192+
bits<6> XB;
193+
194+
let Pattern = pattern;
195+
196+
let Inst{6...10} = XT{4...0};
197+
let Inst{11...15} = XA{4...0};
198+
let Inst{16...20} = XB{4...0};
199+
let Inst{21...28} = xo;
200+
let Inst{29} = XA{5};
201+
let Inst{30} = XB{5};
202+
let Inst{31} = XT{5};
203+
}
204+
186205
//-------------------------- Instruction definitions -------------------------//
187206
// Predicate combinations available:
188207
// [IsISAFuture]
@@ -273,6 +292,28 @@ let Predicates = [HasVSX, IsISAFuture] in {
273292
def XXGFMUL128 : XX3Form_XTAB6_P1<26, (outs vsrc:$XT),
274293
(ins vsrc:$XA, vsrc:$XB, u1imm:$P),
275294
"xxgfmul128 $XT, $XA, $XB, $P", []>;
295+
296+
// VSX Vector Integer Arithmetic Instructions
297+
def XVADDUWM : XX3Form_XTAB6<60, 131, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
298+
"xvadduwm $XT, $XA, $XB", []>;
299+
def XVADDUHM : XX3Form_XTAB6<60, 139, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
300+
"xvadduhm $XT, $XA, $XB", []>;
301+
def XVSUBUWM: XX3Form_XTAB6<60, 147, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
302+
"xvsubuwm $XT, $XA, $XB", []>;
303+
def XVSUBUHM: XX3Form_XTAB6<60, 155, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
304+
"xvsubuhm $XT, $XA, $XB", []>;
305+
def XVMULUWM: XX3Form_XTAB6<60, 163, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
306+
"xvmuluwm $XT, $XA, $XB", []>;
307+
def XVMULUHM: XX3Form_XTAB6<60, 171, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
308+
"xvmuluhm $XT, $XA, $XB", []>;
309+
def XVMULHSW: XX3Form_XTAB6<60, 179, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
310+
"xvmulhsw $XT, $XA, $XB", []>;
311+
def XVMULHSH: XX3Form_XTAB6<60, 187, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
312+
"xvmulhsh $XT, $XA, $XB", []>;
313+
def XVMULHUW: XX3Form_XTAB6<60, 114, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
314+
"xvmulhuw $XT, $XA, $XB", []>;
315+
def XVMULHUH: XX3Form_XTAB6<60, 122, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB),
316+
"xvmulhuh $XT, $XA, $XB", []>;
276317
}
277318

278319
//---------------------------- Anonymous Patterns ----------------------------//

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

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

244244
#CHECK: xxgfmul128gcm 7, 5, 4
245245
0xf0,0xe5,0x26,0xd0
246+
247+
#CHECK: xvadduwm 4, 5, 7
248+
0xf0,0x85,0x3c,0x18
249+
250+
#CHECK: xvadduhm 4, 5, 7
251+
0xf0,0x85,0x3c,0x58
252+
253+
#CHECK: xvsubuwm 4, 5, 7
254+
0xf0,0x85,0x3c,0x98
255+
256+
#CHECK: xvsubuhm 4, 5, 7
257+
0xf0,0x85,0x3c,0xd8
258+
259+
#CHECK: xvmuluwm 4, 5, 7
260+
0xf0,0x85,0x3d,0x18
261+
262+
#CHECK: xvmuluhm 4, 5, 7
263+
0xf0,0x85,0x3d,0x58
264+
265+
#CHECK: xvmulhsw 4, 5, 7
266+
0xf0,0x85,0x3d,0x98
267+
268+
#CHECK: xvmulhsh 4, 5, 7
269+
0xf0,0x85,0x3d,0xd8
270+
271+
#CHECK: xvmulhuw 4, 5, 7
272+
0xf0,0x85,0x3b,0x90
273+
274+
#CHECK: xvmulhuh 4, 5, 7
275+
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
@@ -237,3 +237,33 @@
237237

238238
#CHECK: xxgfmul128gcm 7, 5, 4
239239
0xd0,0x26,0xe5,0xf0
240+
241+
#CHECK: xvadduwm 4, 5, 7
242+
0x18,0x3c,0x85,0xf0
243+
244+
#CHECK: xvadduhm 4, 5, 7
245+
0x58,0x3c,0x85,0xf0
246+
247+
#CHECK: xvsubuwm 4, 5, 7
248+
0x98,0x3c,0x85,0xf0
249+
250+
#CHECK: xvsubuhm 4, 5, 7
251+
0xd8,0x3c,0x85,0xf0
252+
253+
#CHECK: xvmuluwm 4, 5, 7
254+
0x18,0x3d,0x85,0xf0
255+
256+
#CHECK: xvmuluhm 4, 5, 7
257+
0x58,0x3d,0x85,0xf0
258+
259+
#CHECK: xvmulhsw 4, 5, 7
260+
0x98,0x3d,0x85,0xf0
261+
262+
#CHECK: xvmulhsh 4, 5, 7
263+
0xd8,0x3d,0x85,0xf0
264+
265+
#CHECK: xvmulhuw 4, 5, 7
266+
0x90,0x3b,0x85,0xf0
267+
268+
#CHECK: xvmulhuh 4, 5, 7
269+
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
@@ -346,3 +346,43 @@
346346
xxgfmul128gcm 7, 5, 4
347347
#CHECK-BE: xxgfmul128gcm 7, 5, 4 # encoding: [0xf0,0xe5,0x26,0xd0]
348348
#CHECK-LE: xxgfmul128gcm 7, 5, 4 # encoding: [0xd0,0x26,0xe5,0xf0]
349+
350+
xvadduwm 4, 5, 7
351+
#CHECK-BE: xvadduwm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x18]
352+
#CHECK-LE: xvadduwm 4, 5, 7 # encoding: [0x18,0x3c,0x85,0xf0]
353+
354+
xvadduhm 4, 5, 7
355+
#CHECK-BE: xvadduhm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x58]
356+
#CHECK-LE: xvadduhm 4, 5, 7 # encoding: [0x58,0x3c,0x85,0xf0]
357+
358+
xvsubuwm 4, 5, 7
359+
#CHECK-BE: xvsubuwm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0x98]
360+
#CHECK-LE: xvsubuwm 4, 5, 7 # encoding: [0x98,0x3c,0x85,0xf0]
361+
362+
xvsubuhm 4, 5, 7
363+
#CHECK-BE: xvsubuhm 4, 5, 7 # encoding: [0xf0,0x85,0x3c,0xd8]
364+
#CHECK-LE: xvsubuhm 4, 5, 7 # encoding: [0xd8,0x3c,0x85,0xf0]
365+
366+
xvmuluwm 4, 5, 7
367+
#CHECK-BE: xvmuluwm 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x18]
368+
#CHECK-LE: xvmuluwm 4, 5, 7 # encoding: [0x18,0x3d,0x85,0xf0]
369+
370+
xvmuluhm 4, 5, 7
371+
#CHECK-BE: xvmuluhm 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x58]
372+
#CHECK-LE: xvmuluhm 4, 5, 7 # encoding: [0x58,0x3d,0x85,0xf0]
373+
374+
xvmulhsw 4, 5, 7
375+
#CHECK-BE: xvmulhsw 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0x98]
376+
#CHECK-LE: xvmulhsw 4, 5, 7 # encoding: [0x98,0x3d,0x85,0xf0]
377+
378+
xvmulhsh 4, 5, 7
379+
#CHECK-BE: xvmulhsh 4, 5, 7 # encoding: [0xf0,0x85,0x3d,0xd8]
380+
#CHECK-LE: xvmulhsh 4, 5, 7 # encoding: [0xd8,0x3d,0x85,0xf0]
381+
382+
xvmulhuw 4, 5, 7
383+
#CHECK-BE: xvmulhuw 4, 5, 7 # encoding: [0xf0,0x85,0x3b,0x90]
384+
#CHECK-LE: xvmulhuw 4, 5, 7 # encoding: [0x90,0x3b,0x85,0xf0]
385+
386+
xvmulhuh 4, 5, 7
387+
#CHECK-BE: xvmulhuh 4, 5, 7 # encoding: [0xf0,0x85,0x3b,0xd0]
388+
#CHECK-LE: xvmulhuh 4, 5, 7 # encoding: [0xd0,0x3b,0x85,0xf0]

0 commit comments

Comments
 (0)