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 @@ -597,3 +597,76 @@ // Section 8.10.13 - VDVX (Vector Divide) defm VDIVSL : RVDIVm<"vdivs.l", 0xfb, V64, I64, VM>; + +// Section 8.10.14 - VCMP (Vector Compare) +let cx = 0, cx2 = 0 in +defm VCMPUL : RVm<"vcmpu.l", 0xb9, V64, I64, VM>; +let cx = 0, cx2 = 1 in { + defm PVCMPULO : RVm<"pvcmpu.lo", 0xb9, V64, I32, VM>; + let isCodeGenOnly = 1 in + defm VCMPUW : RVm<"vcmpu.w", 0xb9, V64, I32, VM>; +} +let cx = 1, cx2 = 0 in +defm PVCMPUUP : RVm<"pvcmpu.up", 0xb9, V64, I64, VM>; +let cx = 1, cx2 = 1 in +defm PVCMPU : RVm<"pvcmpu", 0xb9, V64, I64, VM512>; +def : MnemonicAlias<"vcmpu.w", "pvcmpu.lo">; + +// Section 8.10.15 - VCPS (Vector Compare Single) +let cx = 0, cx2 = 0 in +defm VCMPSWSX : RVm<"vcmps.w.sx", 0xfa, V64, I32, VM>; +let cx = 0, cx2 = 1 in { + defm PVCMPSLO : RVm<"pvcmps.lo", 0xfa, V64, I32, VM>; + let isCodeGenOnly = 1 in + defm VCMPSWZX : RVm<"vcmps.w.zx", 0xfa, V64, I32, VM>; +} +let cx = 1, cx2 = 0 in +defm PVCMPSUP : RVm<"pvcmps.up", 0xfa, V64, I64, VM>; +let cx = 1, cx2 = 1 in +defm PVCMPS : RVm<"pvcmps", 0xfa, V64, I64, VM512>; +def : MnemonicAlias<"pvcmps.lo.sx", "vcmps.w.sx">; +def : MnemonicAlias<"vcmps.w.zx", "pvcmps.lo">; +def : MnemonicAlias<"vcmps.w", "pvcmps.lo">; +def : MnemonicAlias<"pvcmps.lo.zx", "pvcmps.lo">; + +// Section 8.10.16 - VCPX (Vector Compare) +defm VCMPSL : RVm<"vcmps.l", 0xba, V64, I64, VM>; + +// Section 8.10.17 - VCMS (Vector Compare and Select Maximum/Minimum Single) +let cx = 0, cx2 = 0 in +defm VMAXSWSX : RVm<"vmaxs.w.sx", 0x8a, V64, I32, VM>; +let cx = 0, cx2 = 1 in { + defm PVMAXSLO : RVm<"pvmaxs.lo", 0x8a, V64, I32, VM>; + let isCodeGenOnly = 1 in + defm VMAXSWZX : RVm<"vmaxs.w.zx", 0x8a, V64, I32, VM>; +} +let cx = 1, cx2 = 0 in +defm PVMAXSUP : RVm<"pvmaxs.up", 0x8a, V64, I64, VM>; +let cx = 1, cx2 = 1 in +defm PVMAXS : RVm<"pvmaxs", 0x8a, V64, I64, VM512>; +let cs2 = 1 in { + let cx = 0, cx2 = 0 in + defm VMINSWSX : RVm<"vmins.w.sx", 0x8a, V64, I32, VM>; + let cx = 0, cx2 = 1 in { + defm PVMINSLO : RVm<"pvmins.lo", 0x8a, V64, I32, VM>; + let isCodeGenOnly = 1 in + defm VMINSWZX : RVm<"vmins.w.zx", 0x8a, V64, I32, VM>; + } + let cx = 1, cx2 = 0 in + defm PVMINSUP : RVm<"pvmins.up", 0x8a, V64, I64, VM>; + let cx = 1, cx2 = 1 in + defm PVMINS : RVm<"pvmins", 0x8a, V64, I64, VM512>; +} +def : MnemonicAlias<"pvmaxs.lo.sx", "vmaxs.w.sx">; +def : MnemonicAlias<"vmaxs.w.zx", "pvmaxs.lo">; +def : MnemonicAlias<"vmaxs.w", "pvmaxs.lo">; +def : MnemonicAlias<"pvmaxs.lo.zx", "pvmaxs.lo">; +def : MnemonicAlias<"pvmins.lo.sx", "vmins.w.sx">; +def : MnemonicAlias<"vmins.w.zx", "pvmins.lo">; +def : MnemonicAlias<"vmins.w", "pvmins.lo">; +def : MnemonicAlias<"pvmins.lo.zx", "pvmins.lo">; + +// Section 8.10.18 - VCMX (Vector Compare and Select Maximum/Minimum) +defm VMAXSL : RVm<"vmaxs.l", 0x9a, V64, I64, VM>; +let cs2 = 1 in +defm VMINSL : RVm<"vmins.l", 0x9a, V64, I64, VM>; diff --git a/llvm/test/MC/VE/VCMP.s b/llvm/test/MC/VE/VCMP.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VCMP.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: vcmpu.l %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xb9] +vcmpu.l %v11, %s20, %v22 + +# CHECK-INST: vcmpu.l %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xb9] +vcmpu.l %vix, %vix, %vix + +# CHECK-INST: pvcmpu.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xb9] +vcmpu.w %vix, 22, %v22 + +# CHECK-INST: pvcmpu.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xb9] +pvcmpu.lo %v11, 63, %v22, %vm11 + +# CHECK-INST: pvcmpu.up %v11, %vix, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xb9] +pvcmpu.up %v11, %vix, %v22, %vm11 + +# CHECK-INST: pvcmpu %v12, %v20, %v22, %vm12 +# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xb9] +pvcmpu %v12, %v20, %v22, %vm12 diff --git a/llvm/test/MC/VE/VCMS.s b/llvm/test/MC/VE/VCMS.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VCMS.s @@ -0,0 +1,76 @@ +# 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: vmaxs.w.sx %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x8a] +vmaxs.w.sx %v11, %s20, %v22 + +# CHECK-INST: vmaxs.w.sx %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x8a] +vmaxs.w.sx %vix, %vix, %vix + +# CHECK-INST: pvmaxs.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a] +vmaxs.w.zx %vix, 22, %v22 + +# CHECK-INST: pvmaxs.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a] +vmaxs.w %vix, 22, %v22 + +# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a] +pvmaxs.lo %v11, 63, %v22, %vm11 + +# CHECK-INST: vmaxs.w.sx %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x8a] +pvmaxs.lo.sx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a] +pvmaxs.lo.zx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvmaxs.up %v11, %vix, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0x8a] +pvmaxs.up %v11, %vix, %v22, %vm11 + +# CHECK-INST: pvmaxs %v12, %v20, %v22, %vm12 +# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0x8a] +pvmaxs %v12, %v20, %v22, %vm12 + +# CHECK-INST: vmins.w.sx %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x8a] +vmins.w.sx %v11, %s20, %v22 + +# CHECK-INST: vmins.w.sx %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x8a] +vmins.w.sx %vix, %vix, %vix + +# CHECK-INST: pvmins.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a] +vmins.w.zx %vix, 22, %v22 + +# CHECK-INST: pvmins.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a] +vmins.w %vix, 22, %v22 + +# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a] +pvmins.lo %v11, 63, %v22, %vm11 + +# CHECK-INST: vmins.w.sx %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x8a] +pvmins.lo.sx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a] +pvmins.lo.zx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvmins.up %v11, %vix, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x9b,0x8a] +pvmins.up %v11, %vix, %v22, %vm11 + +# CHECK-INST: pvmins %v12, %v20, %v22, %vm12 +# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xdc,0x8a] +pvmins %v12, %v20, %v22, %vm12 diff --git a/llvm/test/MC/VE/VCMX.s b/llvm/test/MC/VE/VCMX.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VCMX.s @@ -0,0 +1,44 @@ +# 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: vmaxs.l %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x9a] +vmaxs.l %v11, %s20, %v22 + +# CHECK-INST: vmaxs.l %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x9a] +vmaxs.l %vix, %vix, %vix + +# CHECK-INST: vmaxs.l %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0x9a] +vmaxs.l %vix, 22, %v22 + +# CHECK-INST: vmaxs.l %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x9a] +vmaxs.l %v11, 63, %v22, %vm11 + +# CHECK-INST: vmaxs.l %v11, %v23, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0x9a] +vmaxs.l %v11, %v23, %v22, %vm11 + +# CHECK-INST: vmins.l %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x9a] +vmins.l %v11, %s20, %v22 + +# CHECK-INST: vmins.l %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x9a] +vmins.l %vix, %vix, %vix + +# CHECK-INST: vmins.l %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x30,0x9a] +vmins.l %vix, 22, %v22 + +# CHECK-INST: vmins.l %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x9a] +vmins.l %v11, 63, %v22, %vm11 + +# CHECK-INST: vmins.l %v11, %v23, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x1b,0x9a] +vmins.l %v11, %v23, %v22, %vm11 diff --git a/llvm/test/MC/VE/VCPS.s b/llvm/test/MC/VE/VCPS.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VCPS.s @@ -0,0 +1,40 @@ +# 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: vcmps.w.sx %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xfa] +vcmps.w.sx %v11, %s20, %v22 + +# CHECK-INST: vcmps.w.sx %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xfa] +vcmps.w.sx %vix, %vix, %vix + +# CHECK-INST: pvcmps.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa] +vcmps.w.zx %vix, 22, %v22 + +# CHECK-INST: pvcmps.lo %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa] +vcmps.w %vix, 22, %v22 + +# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa] +pvcmps.lo %v11, 63, %v22, %vm11 + +# CHECK-INST: vcmps.w.sx %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xfa] +pvcmps.lo.sx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa] +pvcmps.lo.zx %v11, 63, %v22, %vm11 + +# CHECK-INST: pvcmps.up %v11, %vix, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xfa] +pvcmps.up %v11, %vix, %v22, %vm11 + +# CHECK-INST: pvcmps %v12, %v20, %v22, %vm12 +# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xfa] +pvcmps %v12, %v20, %v22, %vm12 diff --git a/llvm/test/MC/VE/VCPX.s b/llvm/test/MC/VE/VCPX.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/VE/VCPX.s @@ -0,0 +1,24 @@ +# 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: vcmps.l %v11, %s20, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xba] +vcmps.l %v11, %s20, %v22 + +# CHECK-INST: vcmps.l %vix, %vix, %vix +# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xba] +vcmps.l %vix, %vix, %vix + +# CHECK-INST: vcmps.l %vix, 22, %v22 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0xba] +vcmps.l %vix, 22, %v22 + +# CHECK-INST: vcmps.l %v11, 63, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xba] +vcmps.l %v11, 63, %v22, %vm11 + +# CHECK-INST: vcmps.l %v11, %v23, %v22, %vm11 +# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0xba] +vcmps.l %v11, %v23, %v22, %vm11