diff --git a/llvm/lib/Target/VE/VEInstrVec.td b/llvm/lib/Target/VE/VEInstrVec.td --- a/llvm/lib/Target/VE/VEInstrVec.td +++ b/llvm/lib/Target/VE/VEInstrVec.td @@ -1116,3 +1116,73 @@ // Section 8.13.19 - VCVD (Vector Convert to Double-format) defm VCVTDS : RVF1m<"vcvt.d.s", 0x8f, V64, VM>; + +//----------------------------------------------------------------------------- +// Section 8.14 - Vector Reduction Instructions +//----------------------------------------------------------------------------- + +// Section 8.14.1 - VSUMS (Vector Sum Single) +defm VSUMWSX : RVF1m<"vsum.w.sx", 0xea, V64, VM>; +let cx2 = 1 in defm VSUMWZX : RVF1m<"vsum.w.zx", 0xea, V64, VM>; + +// Section 8.14.2 - VSUMX (Vector Sum) +defm VSUML : RVF1m<"vsum.l", 0xaa, V64, VM>; + +// Section 8.14.3 - VFSUM (Vector Floating Sum) +defm VFSUMD : RVF1m<"vfsum.d", 0xec, V64, VM>; +let cx = 1 in defm VFSUMS : RVF1m<"vfsum.s", 0xec, V64, VM>; + +// Section 8.14.4 - VMAXS (Vector Maximum/Minimum Single) +let cx2 = 0 in defm VRMAXSWFSTSX : RVF1m<"vrmaxs.w.fst.sx", 0xbb, V64, VM>; +let cx2 = 1 in defm VRMAXSWFSTZX : RVF1m<"vrmaxs.w.fst.zx", 0xbb, V64, VM>; +let cs = 1 in { + let cx2 = 0 in + defm VRMAXSWLSTSX : RVF1m<"vrmaxs.w.lst.sx", 0xbb, V64, VM>; + let cx2 = 1 in + defm VRMAXSWLSTZX : RVF1m<"vrmaxs.w.lst.zx", 0xbb, V64, VM>; +} +let cs2 = 1 in { + let cx2 = 0 in + defm VRMINSWFSTSX : RVF1m<"vrmins.w.fst.sx", 0xbb, V64, VM>; + let cx2 = 1 in + defm VRMINSWFSTZX : RVF1m<"vrmins.w.fst.zx", 0xbb, V64, VM>; + let cs = 1 in { + let cx2 = 0 in + defm VRMINSWLSTSX : RVF1m<"vrmins.w.lst.sx", 0xbb, V64, VM>; + let cx2 = 1 in + defm VRMINSWLSTZX : RVF1m<"vrmins.w.lst.zx", 0xbb, V64, VM>; + } +} + +// Section 8.14.5 - VMAXX (Vector Maximum/Minimum) +let cs = 0 in defm VRMAXSLFST : RVF1m<"vrmaxs.l.fst", 0xab, V64, VM>; +let cs = 1 in defm VRMAXSLLST : RVF1m<"vrmaxs.l.lst", 0xab, V64, VM>; +let cs2 = 1 in { + let cs = 0 in defm VRMINSLFST : RVF1m<"vrmins.l.fst", 0xab, V64, VM>; + let cs = 1 in defm VRMINSLLST : RVF1m<"vrmins.l.lst", 0xab, V64, VM>; +} + +// Section 8.14.6 - VFMAX (Vector Floating Maximum/Minimum) +let cs = 0 in defm VFRMAXDFST : RVF1m<"vfrmax.d.fst", 0xad, V64, VM>; +let cs = 1 in defm VFRMAXDLST : RVF1m<"vfrmax.d.lst", 0xad, V64, VM>; +let cs2 = 1 in { + let cs = 0 in defm VFRMINDFST : RVF1m<"vfrmin.d.fst", 0xad, V64, VM>; + let cs = 1 in defm VFRMINDLST : RVF1m<"vfrmin.d.lst", 0xad, V64, VM>; +} +let cx = 1 in { + let cs = 0 in defm VFRMAXSFST : RVF1m<"vfrmax.s.fst", 0xad, V64, VM>; + let cs = 1 in defm VFRMAXSLST : RVF1m<"vfrmax.s.lst", 0xad, V64, VM>; + let cs2 = 1 in { + let cs = 0 in defm VFRMINSFST : RVF1m<"vfrmin.s.fst", 0xad, V64, VM>; + let cs = 1 in defm VFRMINSLST : RVF1m<"vfrmin.s.lst", 0xad, V64, VM>; + } +} + +// Section 8.14.7 - VRAND (Vector Reduction And) +defm VRAND : RVF1m<"vrand", 0x88, V64, VM>; + +// Section 8.14.8 - VROR (Vector Reduction Or) +defm VROR : RVF1m<"vror", 0x98, V64, VM>; + +// Section 8.14.9 - VRXOR (Vector Reduction Exclusive Or) +defm VRXOR : RVF1m<"vrxor", 0x89, V64, VM>; diff --git a/llvm/test/MC/VE/VFMAX.s b/llvm/test/MC/VE/VFMAX.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VFMAX.s @@ -0,0 +1,52 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vfrmax.d.fst %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x00,0xad] +vfrmax.d.fst %v11, %v12 + +# CHECK-INST: vfrmax.d.fst %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0b,0xad] +vfrmax.d.fst %v11, %vix, %vm11 + +# CHECK-INST: vfrmax.d.lst %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x2f,0xad] +vfrmax.d.lst %vix, %v22, %vm15 + +# CHECK-INST: vfrmax.s.lst %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0xa2,0xad] +vfrmax.s.lst %v63, %v60, %vm2 + +# CHECK-INST: vfrmax.s.fst %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x80,0xad] +vfrmax.s.fst %vix, %vix, %vm0 + +# CHECK-INST: vfrmax.s.lst %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0xa2,0xad] +vfrmax.s.lst %vix, %vix, %vm2 + +# CHECK-INST: vfrmin.d.fst %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x10,0xad] +vfrmin.d.fst %v11, %v12 + +# CHECK-INST: vfrmin.d.fst %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x1b,0xad] +vfrmin.d.fst %v11, %vix, %vm11 + +# CHECK-INST: vfrmin.d.lst %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x3f,0xad] +vfrmin.d.lst %vix, %v22, %vm15 + +# CHECK-INST: vfrmin.s.lst %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0xb2,0xad] +vfrmin.s.lst %v63, %v60, %vm2 + +# CHECK-INST: vfrmin.s.fst %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x90,0xad] +vfrmin.s.fst %vix, %vix, %vm0 + +# CHECK-INST: vfrmin.s.lst %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0xb2,0xad] +vfrmin.s.lst %vix, %vix, %vm2 diff --git a/llvm/test/MC/VE/VFSUM.s b/llvm/test/MC/VE/VFSUM.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VFSUM.s @@ -0,0 +1,28 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vfsum.d %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x00,0xec] +vfsum.d %v11, %v12 + +# CHECK-INST: vfsum.d %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0b,0xec] +vfsum.d %v11, %vix, %vm11 + +# CHECK-INST: vfsum.d %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x0f,0xec] +vfsum.d %vix, %v22, %vm15 + +# CHECK-INST: vfsum.s %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0x82,0xec] +vfsum.s %v63, %v60, %vm2 + +# CHECK-INST: vfsum.s %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x80,0xec] +vfsum.s %vix, %vix, %vm0 + +# CHECK-INST: vfsum.s %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x82,0xec] +vfsum.s %vix, %vix, %vm2 diff --git a/llvm/test/MC/VE/VMAXS.s b/llvm/test/MC/VE/VMAXS.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VMAXS.s @@ -0,0 +1,52 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vrmaxs.w.fst.sx %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x00,0xbb] +vrmaxs.w.fst.sx %v11, %v12 + +# CHECK-INST: vrmaxs.w.fst.sx %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0b,0xbb] +vrmaxs.w.fst.sx %v11, %vix, %vm11 + +# CHECK-INST: vrmaxs.w.lst.sx %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x2f,0xbb] +vrmaxs.w.lst.sx %vix, %v22, %vm15 + +# CHECK-INST: vrmaxs.w.lst.zx %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0x62,0xbb] +vrmaxs.w.lst.zx %v63, %v60, %vm2 + +# CHECK-INST: vrmaxs.w.fst.zx %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x40,0xbb] +vrmaxs.w.fst.zx %vix, %vix, %vm0 + +# CHECK-INST: vrmaxs.w.lst.zx %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x62,0xbb] +vrmaxs.w.lst.zx %vix, %vix, %vm2 + +# CHECK-INST: vrmins.w.fst.sx %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x10,0xbb] +vrmins.w.fst.sx %v11, %v12 + +# CHECK-INST: vrmins.w.fst.sx %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x1b,0xbb] +vrmins.w.fst.sx %v11, %vix, %vm11 + +# CHECK-INST: vrmins.w.lst.sx %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x3f,0xbb] +vrmins.w.lst.sx %vix, %v22, %vm15 + +# CHECK-INST: vrmins.w.lst.zx %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0x72,0xbb] +vrmins.w.lst.zx %v63, %v60, %vm2 + +# CHECK-INST: vrmins.w.fst.zx %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x50,0xbb] +vrmins.w.fst.zx %vix, %vix, %vm0 + +# CHECK-INST: vrmins.w.lst.zx %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x72,0xbb] +vrmins.w.lst.zx %vix, %vix, %vm2 diff --git a/llvm/test/MC/VE/VRAND.s b/llvm/test/MC/VE/VRAND.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VRAND.s @@ -0,0 +1,20 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vrand %v11, %v22 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x00,0x88] +vrand %v11, %v22 + +# CHECK-INST: vrand %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x88] +vrand %vix, %vix + +# CHECK-INST: vrand %v11, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x0b,0x88] +vrand %v11, %v22, %vm11 + +# CHECK-INST: vrand %v11, %vix, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0f,0x88] +vrand %v11, %vix, %vm15 diff --git a/llvm/test/MC/VE/VROR.s b/llvm/test/MC/VE/VROR.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VROR.s @@ -0,0 +1,20 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vror %v11, %v22 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x00,0x98] +vror %v11, %v22 + +# CHECK-INST: vror %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x98] +vror %vix, %vix + +# CHECK-INST: vror %v11, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x0b,0x98] +vror %v11, %v22, %vm11 + +# CHECK-INST: vror %v11, %vix, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0f,0x98] +vror %v11, %vix, %vm15 diff --git a/llvm/test/MC/VE/VRXOR.s b/llvm/test/MC/VE/VRXOR.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VRXOR.s @@ -0,0 +1,20 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vrxor %v11, %v22 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x00,0x89] +vrxor %v11, %v22 + +# CHECK-INST: vrxor %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x89] +vrxor %vix, %vix + +# CHECK-INST: vrxor %v11, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0x0b,0x00,0x00,0x0b,0x89] +vrxor %v11, %v22, %vm11 + +# CHECK-INST: vrxor %v11, %vix, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0f,0x89] +vrxor %v11, %vix, %vm15 diff --git a/llvm/test/MC/VE/VSUMS.s b/llvm/test/MC/VE/VSUMS.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VSUMS.s @@ -0,0 +1,28 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vsum.w.sx %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x00,0xea] +vsum.w.sx %v11, %v12 + +# CHECK-INST: vsum.w.sx %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0b,0xea] +vsum.w.sx %v11, %vix, %vm11 + +# CHECK-INST: vsum.w.sx %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x0f,0xea] +vsum.w.sx %vix, %v22, %vm15 + +# CHECK-INST: vsum.w.zx %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0x42,0xea] +vsum.w.zx %v63, %v60, %vm2 + +# CHECK-INST: vsum.w.zx %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x40,0xea] +vsum.w.zx %vix, %vix, %vm0 + +# CHECK-INST: vsum.w.zx %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x42,0xea] +vsum.w.zx %vix, %vix, %vm2 diff --git a/llvm/test/MC/VE/VSUMX.s b/llvm/test/MC/VE/VSUMX.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VSUMX.s @@ -0,0 +1,28 @@ +# RUN: llvm-mc -triple=ve --show-encoding < %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \ +# RUN: | FileCheck %s --check-prefixes=CHECK-INST + +# CHECK-INST: vsum.l %v11, %v12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0c,0x0b,0x00,0x00,0x00,0xaa] +vsum.l %v11, %v12 + +# CHECK-INST: vsum.l %v11, %vix, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x0b,0x00,0x00,0x0b,0xaa] +vsum.l %v11, %vix, %vm11 + +# CHECK-INST: vsum.l %vix, %v22, %vm15 +# CHECK-ENCODING: encoding: [0x00,0x00,0x16,0xff,0x00,0x00,0x0f,0xaa] +vsum.l %vix, %v22, %vm15 + +# CHECK-INST: vsum.l %v63, %v60, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3c,0x3f,0x00,0x00,0x02,0xaa] +vsum.l %v63, %v60, %vm2 + +# CHECK-INST: vsum.l %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xaa] +vsum.l %vix, %vix, %vm0 + +# CHECK-INST: vsum.l %vix, %vix, %vm2 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0xff,0x00,0x00,0x02,0xaa] +vsum.l %vix, %vix, %vm2