diff --git a/llvm/lib/Target/VE/VEInstrVec.td b/llvm/lib/Target/VE/VEInstrVec.td index c752e5c1617671..3ed3541a7172a3 100644 --- a/llvm/lib/Target/VE/VEInstrVec.td +++ b/llvm/lib/Target/VE/VEInstrVec.td @@ -144,3 +144,142 @@ defm VSTU2D : VSTm<"vstu2d", 0xd2, V64>; // Section 8.9.12 - VSTL2D (Vector Store Lower 2D) defm VSTL2D : VSTm<"vstl2d", 0xd3, V64>; + +// Multiclass for VGT instructions +let mayLoad = 1, hasSideEffects = 0, Uses = [VL] in +multiclass VGTbmopc, RegisterClass RC, + dag dag_in, string disEnc = ""> { + let DisableEncoding = disEnc in + def "" : RVM; + let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base", + isCodeGenOnly = 1 in + def _v : RVM; +} +multiclass VGTlmopc, RegisterClass RC, + dag dag_in> { + defm "" : VGTbm; + let isCodeGenOnly = 1, VE_VLInUse = 1 in { + defm l : VGTbm; + defm L : VGTbm; + } +} +multiclass VGTmmopc, RegisterClass RC, + dag dag_in> { + defm "" : VGTlm; + let m = ?, VE_VLWithMask = 1 in + defm m : VGTlm; +} +let VE_VLIndex = 4 in +multiclass VGTlhmopc, RegisterClass RC, + dag dag_in> { + defm rr : VGTmm; + let cy = 0 in + defm ir : VGTmm; + let cz = 0 in + defm rz : VGTmm; + let cy = 0, cz = 0 in + defm iz : VGTmm; +} +multiclass VGTtgmopc, RegisterClass RC> { + let vy = ? in defm v : VGTlhm; + let cs = 1, sw = ? in defm s : VGTlhm; +} +multiclass VGTmopc, RegisterClass RC> { + let vc = 1 in defm "" : VGTtgm; + let vc = 0 in defm NC : VGTtgm; +} + +// Section 8.9.13 - VGT (Vector Gather) +defm VGT : VGTm<"vgt", 0xa1, V64>; + +// Section 8.9.14 - VGTU (Vector Gather Upper) +defm VGTU : VGTm<"vgtu", 0xa2, V64>; + +// Section 8.9.15 - VGTL (Vector Gather Lower) +defm VGTLSX : VGTm<"vgtl.sx", 0xa3, V64>; +let cx = 1 in defm VGTLZX : VGTm<"vgtl.zx", 0xa3, V64>; +def : MnemonicAlias<"vgtl", "vgtl.zx">; +def : MnemonicAlias<"vgtl.nc", "vgtl.zx.nc">; + +// Multiclass for VSC instructions +let mayStore = 1, hasSideEffects = 0, Uses = [VL] in +multiclass VSCbmopc, dag dag_in> { + def "" : RVM; + let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in { + def l : RVM; + def L : RVM; + } +} +multiclass VSCmmopc, dag dag_in> { + defm "" : VSCbm; + let m = ?, VE_VLWithMask = 1 in + defm m : VSCbm; +} +let VE_VLIndex = 4 in +multiclass VSClhmopc, RegisterClass RC, + dag dag_in> { + defm rrv : VSCmm; + let cy = 0 in + defm irv : VSCmm; + let cz = 0 in + defm rzv : VSCmm; + let cy = 0, cz = 0 in + defm izv : VSCmm; +} +multiclass VSCtgmopc, RegisterClass RC> { + let vy = ? in defm v : VSClhm; + let cs = 1, sw = ? in defm s : VSClhm; +} +multiclass VSCmopc, RegisterClass RC> { + let vc = 1, cx = 0 in defm "" : VSCtgm; + let vc = 0, cx = 0 in defm NC : VSCtgm; + let vc = 1, cx = 1 in defm OT : VSCtgm; + let vc = 0, cx = 1 in defm NCOT : VSCtgm; +} + +// Section 8.9.16 - VSC (Vector Scatter) +defm VSC : VSCm<"vsc", 0xb1, V64>; + +// Section 8.9.17 - VSCU (Vector Scatter Upper) +defm VSCU : VSCm<"vscu", 0xb2, V64>; + +// Section 8.9.18 - VSCL (Vector Scatter Lower) +defm VSCL : VSCm<"vscl", 0xb3, V64>; + +// Section 8.9.19 - PFCHV (Prefetch Vector) +let Uses = [VL] in +multiclass PFCHVbmopc, dag dag_in> { + def "" : RVM; + let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in { + def l : RVM; + def L : RVM; + } +} +let VE_VLIndex = 2 in +multiclass PFCHVmopc> { + defm rr : PFCHVbm; + let cy = 0 in + defm ir : PFCHVbm; + let cz = 0 in + defm rz : PFCHVbm; + let cy = 0, cz = 0 in + defm iz : PFCHVbm; +} +let vc = 1, vx = 0 in defm PFCHV : PFCHVm<"pfchv", 0x80>; +let vc = 0, vx = 0 in defm PFCHVNC : PFCHVm<"pfchv.nc", 0x80>; diff --git a/llvm/test/MC/VE/PFCHV.s b/llvm/test/MC/VE/PFCHV.s new file mode 100644 index 00000000000000..ad5a2b90a2906e --- /dev/null +++ b/llvm/test/MC/VE/PFCHV.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: pfchv 32, 0 +# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x80] +pfchv 32, 0 + +# CHECK-INST: pfchv.nc %s11, 0 +# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x8b,0x00,0x80] +pfchv.nc %s11, 0 + +# CHECK-INST: pfchv -4, %s13 +# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x8d,0x7c,0x40,0x80] +pfchv -4, %s13 + +# CHECK-INST: pfchv.nc %s10, %s60 +# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0xbc,0x8a,0x00,0x80] +pfchv.nc %s10, %s60 diff --git a/llvm/test/MC/VE/VGT.s b/llvm/test/MC/VE/VGT.s new file mode 100644 index 00000000000000..963007ddbf38c7 --- /dev/null +++ b/llvm/test/MC/VE/VGT.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: vgt %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xa1] +vgt %v11, %v13, 23, %s12 + +# CHECK-INST: vgt.nc %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0x20,0xa1] +vgt.nc %vix, %s12, 63, 0 + +# CHECK-INST: vgt %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0x40,0xa1] +vgt %v63, %vix, -64, %s63 + +# CHECK-INST: vgt.nc %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x03,0xa1] +vgt.nc %v12, %v63, %s12, 0, %vm3 + +# CHECK-INST: vgtu %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xa2] +vgtu %v11, %v13, 23, %s12 + +# CHECK-INST: vgtu.nc %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0x20,0xa2] +vgtu.nc %vix, %s12, 63, 0 + +# CHECK-INST: vgtu %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0x40,0xa2] +vgtu %v63, %vix, -64, %s63 + +# CHECK-INST: vgtu.nc %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x03,0xa2] +vgtu.nc %v12, %v63, %s12, 0, %vm3 + +# CHECK-INST: vgtl.sx %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xa3] +vgtl.sx %v11, %v13, 23, %s12 + +# CHECK-INST: vgtl.zx.nc %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0xa0,0xa3] +vgtl.nc %vix, %s12, 63, 0 + +# CHECK-INST: vgtl.zx %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0xc0,0xa3] +vgtl.zx %v63, %vix, -64, %s63 + +# CHECK-INST: vgtl.sx.nc %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x03,0xa3] +vgtl.sx.nc %v12, %v63, %s12, 0, %vm3 diff --git a/llvm/test/MC/VE/VSC.s b/llvm/test/MC/VE/VSC.s new file mode 100644 index 00000000000000..69120d7bc1ce1c --- /dev/null +++ b/llvm/test/MC/VE/VSC.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: vsc %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xb1] +vsc %v11, %v13, 23, %s12 + +# CHECK-INST: vsc.nc %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0x20,0xb1] +vsc.nc %vix, %s12, 63, 0 + +# CHECK-INST: vsc.ot %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0xc0,0xb1] +vsc.ot %v63, %vix, -64, %s63 + +# CHECK-INST: vsc.nc.ot %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x83,0xb1] +vsc.nc.ot %v12, %v63, %s12, 0, %vm3 + +# CHECK-INST: vscu %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xb2] +vscu %v11, %v13, 23, %s12 + +# CHECK-INST: vscu.nc %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0x20,0xb2] +vscu.nc %vix, %s12, 63, 0 + +# CHECK-INST: vscu.ot %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0xc0,0xb2] +vscu.ot %v63, %vix, -64, %s63 + +# CHECK-INST: vscu.nc.ot %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x83,0xb2] +vscu.nc.ot %v12, %v63, %s12, 0, %vm3 + +# CHECK-INST: vscl %v11, %v13, 23, %s12 +# CHECK-ENCODING: encoding: [0x00,0x00,0x0d,0x0b,0x8c,0x17,0x40,0xb3] +vscl %v11, %v13, 23, %s12 + +# CHECK-INST: vscl.ot %vix, %s12, 63, 0 +# CHECK-ENCODING: encoding: [0x0c,0x00,0x00,0xff,0x00,0x3f,0xe0,0xb3] +vscl.ot %vix, %s12, 63, 0 + +# CHECK-INST: vscl.nc %v63, %vix, -64, %s63 +# CHECK-ENCODING: encoding: [0x00,0x00,0xff,0x3f,0xbf,0x40,0x00,0xb3] +vscl.nc %v63, %vix, -64, %s63 + +# CHECK-INST: vscl.nc.ot %v12, %v63, %s12, 0, %vm3 +# CHECK-ENCODING: encoding: [0x00,0x00,0x3f,0x0c,0x00,0x8c,0x83,0xb3] +vscl.nc.ot %v12, %v63, %s12, 0, %vm3