[llvm] 7942960 - [VE] Add vector mask operation instructions

Kazushi Marukawa via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 28 16:42:49 PDT 2020


Author: Kazushi (Jam) Marukawa
Date: 2020-10-29T08:42:41+09:00
New Revision: 794296019966901a1d244c1012641dc8bf8d0b8f

URL: https://github.com/llvm/llvm-project/commit/794296019966901a1d244c1012641dc8bf8d0b8f
DIFF: https://github.com/llvm/llvm-project/commit/794296019966901a1d244c1012641dc8bf8d0b8f.diff

LOG: [VE] Add vector mask operation instructions

Add VFMK/VFMS/VFMF/ANDM/ORM/XORM/EQVM/NNDM/NEGM/PCVM/LZVM/TOVM
isntructions.  Add regression tests too.  Also add new patterns
to parse VFMK/VFMS/VFMF mnemonics.

Reviewed By: simoll

Differential Revision: https://reviews.llvm.org/D90297

Added: 
    llvm/test/MC/VE/ANDM.s
    llvm/test/MC/VE/EQVM.s
    llvm/test/MC/VE/LZVM.s
    llvm/test/MC/VE/NEGM.s
    llvm/test/MC/VE/NNDM.s
    llvm/test/MC/VE/ORM.s
    llvm/test/MC/VE/PCVM.s
    llvm/test/MC/VE/TOVM.s
    llvm/test/MC/VE/VFMF.s
    llvm/test/MC/VE/VFMK.s
    llvm/test/MC/VE/VFMS.s
    llvm/test/MC/VE/XORM.s

Modified: 
    llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
    llvm/lib/Target/VE/VEInstrVec.td

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
index a64a161a807c..a3309a68c76d 100644
--- a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
+++ b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
@@ -939,6 +939,14 @@ StringRef VEAsmParser::splitMnemonic(StringRef Name, SMLoc NameLoc,
     Mnemonic = parseRD(Name, 12, NameLoc, Operands);
   } else if (Name.startswith("pvcvt.w.s")) {
     Mnemonic = parseRD(Name, 9, NameLoc, Operands);
+  } else if (Name.startswith("vfmk.l.") || Name.startswith("vfmk.w.") ||
+             Name.startswith("vfmk.d.") || Name.startswith("vfmk.s.")) {
+    bool ICC = Name[5] == 'l' || Name[5] == 'w' ? true : false;
+    Mnemonic = parseCC(Name, 7, Name.size(), ICC, true, NameLoc, Operands);
+  } else if (Name.startswith("pvfmk.w.lo.") || Name.startswith("pvfmk.w.up.") ||
+             Name.startswith("pvfmk.s.lo.") || Name.startswith("pvfmk.s.up.")) {
+    bool ICC = Name[6] == 'l' || Name[6] == 'w' ? true : false;
+    Mnemonic = parseCC(Name, 11, Name.size(), ICC, true, NameLoc, Operands);
   } else {
     Operands->push_back(VEOperand::CreateToken(Mnemonic, NameLoc));
   }

diff  --git a/llvm/lib/Target/VE/VEInstrVec.td b/llvm/lib/Target/VE/VEInstrVec.td
index 701f9ad26f4a..77de72dc5cd8 100644
--- a/llvm/lib/Target/VE/VEInstrVec.td
+++ b/llvm/lib/Target/VE/VEInstrVec.td
@@ -654,6 +654,81 @@ multiclass RVSHFm<string opcStr, bits<8>opc, RegisterClass RC,
   let cy = 0 in defm vvi : RVlm<opcStr, ", $vy, $vz, $sy", opc, RC,
                                 (ins RC:$vy, RC:$vz, SIMM:$sy)>;
 }
+// Multiclass for generic mask calculation
+let vx = ?, hasSideEffects = 0, Uses = [VL] in
+multiclass RVMKbm<string opcStr, string argStr, bits<8>opc, dag dag_out,
+                  dag dag_in> {
+  def "" : RV<opc, dag_out, dag_in, !strconcat(opcStr, argStr)>;
+  let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
+    def l : RV<opc, dag_out, !con(dag_in, (ins I32:$vl)),
+               !strconcat(opcStr, argStr)>;
+    def L : RV<opc, dag_out, !con(dag_in, (ins VLS:$vl)),
+               !strconcat(opcStr, argStr)>;
+  }
+}
+multiclass RVMKlm<string opcStr, string argStr, bits<8>opc, RegisterClass RCM,
+                  dag dag_in> {
+  defm "" : RVMKbm<opcStr, " $vx"#argStr, opc, (outs RCM:$vx), dag_in>;
+  let m = ?, VE_VLWithMask = 1 in
+  defm m : RVMKbm<opcStr, " $vx"#argStr#", $m", opc, (outs RCM:$vx),
+                  !con(dag_in, (ins RCM:$m))>;
+}
+// Generic RV multiclass for mask calculation with a condition.
+//   e.g. VFMK, VFMS, and VFMF
+let cy = 0, sy = 0 in
+multiclass RVMKom<string opcStr, bits<8> opc, RegisterClass RC,
+                 RegisterClass RCM> {
+  let vy = ?, vz = ?, VE_VLIndex = 3 in
+  defm v : RVMKlm<opcStr#"$vy", ", $vz", opc, RCM, (ins CCOp:$vy, RC:$vz)>;
+  let vy = 15 /* AT */, VE_VLIndex = 1 in
+  defm a : RVMKlm<opcStr#"at", "", opc, RCM, (ins)>;
+  let vy = 0 /* AF */, VE_VLIndex = 1 in
+  defm na : RVMKlm<opcStr#"af", "", opc, RCM, (ins)>;
+}
+multiclass RVMKm<string opcStr, bits<8> opc, RegisterClass RC,
+                 RegisterClass RCM> {
+  defm "" : RVMKom<opcStr, opc, RC, RCM>;
+}
+// Generic RV multiclass for mask calculation with 2 arguments.
+//   e.g. ANDM, ORM, XORM, and etc.
+let cy = 0, sy = 0, vx = ?, vy = ?, vz = ?, hasSideEffects = 0 in
+multiclass RVM2m<string opcStr, bits<8> opc, RegisterClass RCM> {
+  def mm : RV<opc, (outs RCM:$vx), (ins RCM:$vy, RCM:$vz),
+              !strconcat(opcStr, " $vx, $vy, $vz")>;
+}
+// Generic RV multiclass for mask calculation with 1 argument.
+//   e.g. NEGM
+let cy = 0, sy = 0, vx = ?, vy = ?, hasSideEffects = 0 in
+multiclass RVM1m<string opcStr, bits<8> opc, RegisterClass RCM> {
+  def m : RV<opc, (outs RCM:$vx), (ins RCM:$vy),
+             !strconcat(opcStr, " $vx, $vy")>;
+}
+// Generic RV multiclass for mask calculation with 1 argument.
+//   e.g. PCVM, LZVM, and TOVM
+let cy = 0, sy = 0, vy = ?, hasSideEffects = 0, Uses = [VL] in
+multiclass RVMSbm<string opcStr, string argStr, bits<8>opc, dag dag_in> {
+  def "" : RV<opc, (outs I64:$sx), dag_in,
+              !strconcat(opcStr, " $sx,", argStr)> {
+    bits<7> sx;
+    let Inst{54-48} = sx;
+  }
+  let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
+    def l : RV<opc, (outs I64:$sx), !con(dag_in, (ins I32:$vl)),
+               !strconcat(opcStr, " $sx,", argStr)> {
+      bits<7> sx;
+      let Inst{54-48} = sx;
+    }
+    def L : RV<opc, (outs I64:$sx), !con(dag_in, (ins VLS:$vl)),
+               !strconcat(opcStr, " $sx,", argStr)> {
+      bits<7> sx;
+      let Inst{54-48} = sx;
+    }
+  }
+}
+let VE_VLIndex = 2 in
+multiclass RVMSm<string opcStr, bits<8> opc, RegisterClass RCM> {
+  defm m : RVMSbm<opcStr, " $vy", opc, (ins RCM:$vy)>;
+}
 
 // Section 8.10.1 - VADD (Vector Add)
 let cx = 0, cx2 = 0 in
@@ -1290,3 +1365,65 @@ defm VCP : RV1m<"vcp", 0x8d, V64, VM>;
 
 // Section 8.16.4 - VEX (Vector Expand)
 defm VEX : RV1m<"vex", 0x9d, V64, VM>;
+
+//-----------------------------------------------------------------------------
+// Section 8.17 - Vector Mask Operation Instructions
+//-----------------------------------------------------------------------------
+
+// Section 8.17.1 - VFMK (Vector Form Mask)
+defm VFMKL : RVMKm<"vfmk.l.", 0xb4, V64, VM>;
+def : MnemonicAlias<"vfmk.l", "vfmk.l.at">;
+
+// Section 8.17.2 - VFMS (Vector Form Mask Single)
+defm VFMKW : RVMKm<"vfmk.w.", 0xb5, V64, VM>;
+let isCodeGenOnly = 1 in defm PVFMKWLO : RVMKm<"vfmk.w.", 0xb5, V64, VM>;
+let cx = 1 in defm PVFMKWUP : RVMKm<"pvfmk.w.up.", 0xb5, V64, VM>;
+def : MnemonicAlias<"vfmk.w", "vfmk.w.at">;
+def : MnemonicAlias<"pvfmk.w.up", "pvfmk.w.up.at">;
+def : MnemonicAlias<"pvfmk.w.lo", "vfmk.w.at">;
+foreach CC = [ "af", "gt", "lt", "ne", "eq", "ge", "le", "at" ] in {
+  def : MnemonicAlias<"pvfmk.w.lo."#CC, "vfmk.w."#CC>;
+}
+
+// Section 8.17.3 - VFMF (Vector Form Mask Floating Point)
+defm VFMKD : RVMKm<"vfmk.d.", 0xb6, V64, VM>;
+let cx2 = 1 in defm PVFMKSLO : RVMKm<"pvfmk.s.lo.", 0xb6, V64, VM>;
+let cx = 1 in {
+  defm PVFMKSUP : RVMKm<"pvfmk.s.up.", 0xb6, V64, VM>;
+  let isCodeGenOnly = 1 in defm VFMKS : RVMKm<"vfmk.s.", 0xb6, V64, VM>;
+}
+def : MnemonicAlias<"vfmk.d", "vfmk.d.at">;
+def : MnemonicAlias<"pvfmk.s.lo", "pvfmk.s.lo.at">;
+def : MnemonicAlias<"pvfmk.s.up", "pvfmk.s.up.at">;
+def : MnemonicAlias<"vfmk.s", "pvfmk.s.up.at">;
+foreach CC = [ "af", "gt", "lt", "ne", "eq", "ge", "le", "at", "num", "nan",
+               "gtnan", "ltnan", "nenan", "eqnan", "genan", "lenan" ] in {
+  def : MnemonicAlias<"vfmk.s."#CC, "pvfmk.s.up."#CC>;
+}
+
+// Section 8.17.4 - ANDM (And VM)
+defm ANDM : RVM2m<"andm", 0x84, VM>;
+
+// Section 8.17.5 - ORM (Or VM)
+defm ORM : RVM2m<"orm", 0x85, VM>;
+
+// Section 8.17.6 - XORM (Exclusive Or VM)
+defm XORM : RVM2m<"xorm", 0x86, VM>;
+
+// Section 8.17.7 - EQVM (Equivalence VM)
+defm EQVM : RVM2m<"eqvm", 0x87, VM>;
+
+// Section 8.17.8 - NNDM (Negate And VM)
+defm NNDM : RVM2m<"nndm", 0x94, VM>;
+
+// Section 8.17.9 - NEGM (Negate VM)
+defm NEGM : RVM1m<"negm", 0x95, VM>;
+
+// Section 8.17.10 - PCVM (Population Count of VM)
+defm PCVM : RVMSm<"pcvm", 0xa4, VM>;
+
+// Section 8.17.11 - LZVM (Leading Zero of VM)
+defm LZVM : RVMSm<"lzvm", 0xa5, VM>;
+
+// Section 8.17.12 - TOVM (Trailing One of VM)
+defm TOVM : RVMSm<"tovm", 0xa6, VM>;

diff  --git a/llvm/test/MC/VE/ANDM.s b/llvm/test/MC/VE/ANDM.s
new file mode 100644
index 000000000000..30c349f69f78
--- /dev/null
+++ b/llvm/test/MC/VE/ANDM.s
@@ -0,0 +1,16 @@
+# 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: andm %vm0, %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84]
+andm %vm0, %vm0, %vm0
+
+# CHECK-INST: andm %vm11, %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x0f,0x01,0x0b,0x00,0x00,0x00,0x84]
+andm %vm11, %vm1, %vm15
+
+# CHECK-INST: andm %vm11, %vm15, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x84]
+andm %vm11, %vm15, %vm0

diff  --git a/llvm/test/MC/VE/EQVM.s b/llvm/test/MC/VE/EQVM.s
new file mode 100644
index 000000000000..e88fc5c551ef
--- /dev/null
+++ b/llvm/test/MC/VE/EQVM.s
@@ -0,0 +1,16 @@
+# 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: eqvm %vm0, %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87]
+eqvm %vm0, %vm0, %vm0
+
+# CHECK-INST: eqvm %vm11, %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x0f,0x01,0x0b,0x00,0x00,0x00,0x87]
+eqvm %vm11, %vm1, %vm15
+
+# CHECK-INST: eqvm %vm11, %vm15, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x87]
+eqvm %vm11, %vm15, %vm0

diff  --git a/llvm/test/MC/VE/LZVM.s b/llvm/test/MC/VE/LZVM.s
new file mode 100644
index 000000000000..d9e1cce4e9e1
--- /dev/null
+++ b/llvm/test/MC/VE/LZVM.s
@@ -0,0 +1,16 @@
+# 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: lzvm %s11, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xa5]
+lzvm %s11, %vm0
+
+# CHECK-INST: lzvm %s11, %vm1
+# CHECK-ENCODING: encoding: [0x00,0x00,0x01,0x00,0x00,0x00,0x0b,0xa5]
+lzvm %s11, %vm1
+
+# CHECK-INST: lzvm %s11, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0xa5]
+lzvm %s11, %vm15

diff  --git a/llvm/test/MC/VE/NEGM.s b/llvm/test/MC/VE/NEGM.s
new file mode 100644
index 000000000000..0af9d3a50817
--- /dev/null
+++ b/llvm/test/MC/VE/NEGM.s
@@ -0,0 +1,16 @@
+# 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: negm %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x95]
+negm %vm0, %vm0
+
+# CHECK-INST: negm %vm11, %vm1
+# CHECK-ENCODING: encoding: [0x00,0x00,0x01,0x0b,0x00,0x00,0x00,0x95]
+negm %vm11, %vm1
+
+# CHECK-INST: negm %vm11, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x95]
+negm %vm11, %vm15

diff  --git a/llvm/test/MC/VE/NNDM.s b/llvm/test/MC/VE/NNDM.s
new file mode 100644
index 000000000000..fdb56188b591
--- /dev/null
+++ b/llvm/test/MC/VE/NNDM.s
@@ -0,0 +1,16 @@
+# 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: nndm %vm0, %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94]
+nndm %vm0, %vm0, %vm0
+
+# CHECK-INST: nndm %vm11, %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x0f,0x01,0x0b,0x00,0x00,0x00,0x94]
+nndm %vm11, %vm1, %vm15
+
+# CHECK-INST: nndm %vm11, %vm15, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x94]
+nndm %vm11, %vm15, %vm0

diff  --git a/llvm/test/MC/VE/ORM.s b/llvm/test/MC/VE/ORM.s
new file mode 100644
index 000000000000..d44e4116a72b
--- /dev/null
+++ b/llvm/test/MC/VE/ORM.s
@@ -0,0 +1,16 @@
+# 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: orm %vm0, %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x85]
+orm %vm0, %vm0, %vm0
+
+# CHECK-INST: orm %vm11, %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x0f,0x01,0x0b,0x00,0x00,0x00,0x85]
+orm %vm11, %vm1, %vm15
+
+# CHECK-INST: orm %vm11, %vm15, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x85]
+orm %vm11, %vm15, %vm0

diff  --git a/llvm/test/MC/VE/PCVM.s b/llvm/test/MC/VE/PCVM.s
new file mode 100644
index 000000000000..17b4bc69f8bd
--- /dev/null
+++ b/llvm/test/MC/VE/PCVM.s
@@ -0,0 +1,16 @@
+# 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: pcvm %s11, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xa4]
+pcvm %s11, %vm0
+
+# CHECK-INST: pcvm %s11, %vm1
+# CHECK-ENCODING: encoding: [0x00,0x00,0x01,0x00,0x00,0x00,0x0b,0xa4]
+pcvm %s11, %vm1
+
+# CHECK-INST: pcvm %s11, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0xa4]
+pcvm %s11, %vm15

diff  --git a/llvm/test/MC/VE/TOVM.s b/llvm/test/MC/VE/TOVM.s
new file mode 100644
index 000000000000..69918f8a062a
--- /dev/null
+++ b/llvm/test/MC/VE/TOVM.s
@@ -0,0 +1,16 @@
+# 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: tovm %s11, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xa6]
+tovm %s11, %vm0
+
+# CHECK-INST: tovm %s11, %vm1
+# CHECK-ENCODING: encoding: [0x00,0x00,0x01,0x00,0x00,0x00,0x0b,0xa6]
+tovm %s11, %vm1
+
+# CHECK-INST: tovm %s11, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0xa6]
+tovm %s11, %vm15

diff  --git a/llvm/test/MC/VE/VFMF.s b/llvm/test/MC/VE/VFMF.s
new file mode 100644
index 000000000000..5f21543eeba0
--- /dev/null
+++ b/llvm/test/MC/VE/VFMF.s
@@ -0,0 +1,276 @@
+# 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: vfmk.d.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0xb6]
+vfmk.d %vm11
+
+# CHECK-INST: vfmk.d.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0xb6]
+vfmk.d.at %vm11
+
+# CHECK-INST: vfmk.d.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x0f,0xb6]
+vfmk.d.af %vm1, %vm15
+
+# CHECK-INST: vfmk.d.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x00,0xb6]
+vfmk.d.gt %vm12, %v22
+
+# CHECK-INST: vfmk.d.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x0f,0xb6]
+vfmk.d.lt %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.d.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x00,0xb6]
+vfmk.d.ne %vm11, %v32
+
+# CHECK-INST: vfmk.d.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x0f,0xb6]
+vfmk.d.eq %vm1, %vix, %vm15
+
+# CHECK-INST: vfmk.d.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x00,0xb6]
+vfmk.d.ge %vm12, %v22
+
+# CHECK-INST: vfmk.d.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x0f,0xb6]
+vfmk.d.le %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.d.num %vm11, %v45
+# CHECK-ENCODING: encoding: [0x00,0x2d,0x07,0x0b,0x00,0x00,0x00,0xb6]
+vfmk.d.num %vm11, %v45
+
+# CHECK-INST: vfmk.d.nan %vm1, %v50, %vm14
+# CHECK-ENCODING: encoding: [0x00,0x32,0x08,0x01,0x00,0x00,0x0e,0xb6]
+vfmk.d.nan %vm1, %v50, %vm14
+
+# CHECK-INST: vfmk.d.gtnan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x09,0x0c,0x00,0x00,0x00,0xb6]
+vfmk.d.gtnan %vm12, %v22
+
+# CHECK-INST: vfmk.d.ltnan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0a,0x0c,0x00,0x00,0x0f,0xb6]
+vfmk.d.ltnan %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.d.nenan %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x0b,0x0b,0x00,0x00,0x00,0xb6]
+vfmk.d.nenan %vm11, %v32
+
+# CHECK-INST: vfmk.d.eqnan %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0c,0x01,0x00,0x00,0x0f,0xb6]
+vfmk.d.eqnan %vm1, %vix, %vm15
+
+# CHECK-INST: vfmk.d.genan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x0d,0x0c,0x00,0x00,0x00,0xb6]
+vfmk.d.genan %vm12, %v22
+
+# CHECK-INST: vfmk.d.lenan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0e,0x0c,0x00,0x00,0x0f,0xb6]
+vfmk.d.lenan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x80,0xb6]
+vfmk.s %vm11
+
+# CHECK-INST: pvfmk.s.up.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x80,0xb6]
+vfmk.s.at %vm11
+
+# CHECK-INST: pvfmk.s.up.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x8f,0xb6]
+vfmk.s.af %vm1, %vm15
+
+# CHECK-INST: pvfmk.s.up.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x80,0xb6]
+vfmk.s.gt %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x8f,0xb6]
+vfmk.s.lt %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x80,0xb6]
+vfmk.s.ne %vm11, %v32
+
+# CHECK-INST: pvfmk.s.up.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x8f,0xb6]
+vfmk.s.eq %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x80,0xb6]
+vfmk.s.ge %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x8f,0xb6]
+vfmk.s.le %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.num %vm11, %v45
+# CHECK-ENCODING: encoding: [0x00,0x2d,0x07,0x0b,0x00,0x00,0x80,0xb6]
+vfmk.s.num %vm11, %v45
+
+# CHECK-INST: pvfmk.s.up.nan %vm1, %v50, %vm14
+# CHECK-ENCODING: encoding: [0x00,0x32,0x08,0x01,0x00,0x00,0x8e,0xb6]
+vfmk.s.nan %vm1, %v50, %vm14
+
+# CHECK-INST: pvfmk.s.up.gtnan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x09,0x0c,0x00,0x00,0x80,0xb6]
+vfmk.s.gtnan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.ltnan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0a,0x0c,0x00,0x00,0x8f,0xb6]
+vfmk.s.ltnan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.nenan %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x0b,0x0b,0x00,0x00,0x80,0xb6]
+vfmk.s.nenan %vm11, %v32
+
+# CHECK-INST: pvfmk.s.up.eqnan %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0c,0x01,0x00,0x00,0x8f,0xb6]
+vfmk.s.eqnan %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.genan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x0d,0x0c,0x00,0x00,0x80,0xb6]
+vfmk.s.genan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.lenan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0e,0x0c,0x00,0x00,0x8f,0xb6]
+vfmk.s.lenan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x80,0xb6]
+pvfmk.s.up %vm11
+
+# CHECK-INST: pvfmk.s.up.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.at %vm11
+
+# CHECK-INST: pvfmk.s.up.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.af %vm1, %vm15
+
+# CHECK-INST: pvfmk.s.up.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.gt %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.lt %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.ne %vm11, %v32
+
+# CHECK-INST: pvfmk.s.up.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.eq %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.ge %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.le %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.num %vm11, %v45
+# CHECK-ENCODING: encoding: [0x00,0x2d,0x07,0x0b,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.num %vm11, %v45
+
+# CHECK-INST: pvfmk.s.up.nan %vm1, %v50, %vm14
+# CHECK-ENCODING: encoding: [0x00,0x32,0x08,0x01,0x00,0x00,0x8e,0xb6]
+pvfmk.s.up.nan %vm1, %v50, %vm14
+
+# CHECK-INST: pvfmk.s.up.gtnan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x09,0x0c,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.gtnan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.ltnan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0a,0x0c,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.ltnan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.nenan %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x0b,0x0b,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.nenan %vm11, %v32
+
+# CHECK-INST: pvfmk.s.up.eqnan %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0c,0x01,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.eqnan %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.up.genan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x0d,0x0c,0x00,0x00,0x80,0xb6]
+pvfmk.s.up.genan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.up.lenan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0e,0x0c,0x00,0x00,0x8f,0xb6]
+pvfmk.s.up.lenan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo %vm11
+
+# CHECK-INST: pvfmk.s.lo.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.at %vm11
+
+# CHECK-INST: pvfmk.s.lo.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.af %vm1, %vm15
+
+# CHECK-INST: pvfmk.s.lo.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.gt %vm12, %v22
+
+# CHECK-INST: pvfmk.s.lo.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.lt %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.ne %vm11, %v32
+
+# CHECK-INST: pvfmk.s.lo.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.eq %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.ge %vm12, %v22
+
+# CHECK-INST: pvfmk.s.lo.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.le %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.num %vm11, %v45
+# CHECK-ENCODING: encoding: [0x00,0x2d,0x07,0x0b,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.num %vm11, %v45
+
+# CHECK-INST: pvfmk.s.lo.nan %vm1, %v50, %vm14
+# CHECK-ENCODING: encoding: [0x00,0x32,0x08,0x01,0x00,0x00,0x4e,0xb6]
+pvfmk.s.lo.nan %vm1, %v50, %vm14
+
+# CHECK-INST: pvfmk.s.lo.gtnan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x09,0x0c,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.gtnan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.lo.ltnan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0a,0x0c,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.ltnan %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.nenan %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x0b,0x0b,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.nenan %vm11, %v32
+
+# CHECK-INST: pvfmk.s.lo.eqnan %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0c,0x01,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.eqnan %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.s.lo.genan %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x0d,0x0c,0x00,0x00,0x40,0xb6]
+pvfmk.s.lo.genan %vm12, %v22
+
+# CHECK-INST: pvfmk.s.lo.lenan %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x0e,0x0c,0x00,0x00,0x4f,0xb6]
+pvfmk.s.lo.lenan %vm12, %vix, %vm15

diff  --git a/llvm/test/MC/VE/VFMK.s b/llvm/test/MC/VE/VFMK.s
new file mode 100644
index 000000000000..c10f321895a3
--- /dev/null
+++ b/llvm/test/MC/VE/VFMK.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: vfmk.l.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0xb4]
+vfmk.l %vm11
+
+# CHECK-INST: vfmk.l.at %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x01,0x00,0x00,0x0f,0xb4]
+vfmk.l.at %vm1, %vm15
+
+# CHECK-INST: vfmk.l.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x0f,0xb4]
+vfmk.l.af %vm1, %vm15
+
+# CHECK-INST: vfmk.l.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x00,0xb4]
+vfmk.l.gt %vm12, %v22
+
+# CHECK-INST: vfmk.l.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x0f,0xb4]
+vfmk.l.lt %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.l.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x00,0xb4]
+vfmk.l.ne %vm11, %v32
+
+# CHECK-INST: vfmk.l.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x0f,0xb4]
+vfmk.l.eq %vm1, %vix, %vm15
+
+# CHECK-INST: vfmk.l.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x00,0xb4]
+vfmk.l.ge %vm12, %v22
+
+# CHECK-INST: vfmk.l.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x0f,0xb4]
+vfmk.l.le %vm12, %vix, %vm15

diff  --git a/llvm/test/MC/VE/VFMS.s b/llvm/test/MC/VE/VFMS.s
new file mode 100644
index 000000000000..801668905ce6
--- /dev/null
+++ b/llvm/test/MC/VE/VFMS.s
@@ -0,0 +1,112 @@
+# 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: vfmk.w.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0xb5]
+vfmk.w %vm11
+
+# CHECK-INST: vfmk.w.at %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x01,0x00,0x00,0x0f,0xb5]
+vfmk.w.at %vm1, %vm15
+
+# CHECK-INST: vfmk.w.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x0f,0xb5]
+vfmk.w.af %vm1, %vm15
+
+# CHECK-INST: vfmk.w.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x00,0xb5]
+vfmk.w.gt %vm12, %v22
+
+# CHECK-INST: vfmk.w.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x0f,0xb5]
+vfmk.w.lt %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.w.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x00,0xb5]
+vfmk.w.ne %vm11, %v32
+
+# CHECK-INST: vfmk.w.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x0f,0xb5]
+vfmk.w.eq %vm1, %vix, %vm15
+
+# CHECK-INST: vfmk.w.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x00,0xb5]
+vfmk.w.ge %vm12, %v22
+
+# CHECK-INST: vfmk.w.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x0f,0xb5]
+vfmk.w.le %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.w.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0xb5]
+pvfmk.w.lo %vm11
+
+# CHECK-INST: vfmk.w.at %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x01,0x00,0x00,0x0f,0xb5]
+pvfmk.w.lo.at %vm1, %vm15
+
+# CHECK-INST: vfmk.w.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x0f,0xb5]
+pvfmk.w.lo.af %vm1, %vm15
+
+# CHECK-INST: vfmk.w.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x00,0xb5]
+pvfmk.w.lo.gt %vm12, %v22
+
+# CHECK-INST: vfmk.w.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x0f,0xb5]
+pvfmk.w.lo.lt %vm12, %vix, %vm15
+
+# CHECK-INST: vfmk.w.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x00,0xb5]
+pvfmk.w.lo.ne %vm11, %v32
+
+# CHECK-INST: vfmk.w.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x0f,0xb5]
+pvfmk.w.lo.eq %vm1, %vix, %vm15
+
+# CHECK-INST: vfmk.w.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x00,0xb5]
+pvfmk.w.lo.ge %vm12, %v22
+
+# CHECK-INST: vfmk.w.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x0f,0xb5]
+pvfmk.w.lo.le %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.w.up.at %vm11
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x80,0xb5]
+pvfmk.w.up %vm11
+
+# CHECK-INST: pvfmk.w.up.at %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x01,0x00,0x00,0x8f,0xb5]
+pvfmk.w.up.at %vm1, %vm15
+
+# CHECK-INST: pvfmk.w.up.af %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x01,0x00,0x00,0x8f,0xb5]
+pvfmk.w.up.af %vm1, %vm15
+
+# CHECK-INST: pvfmk.w.up.gt %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x01,0x0c,0x00,0x00,0x80,0xb5]
+pvfmk.w.up.gt %vm12, %v22
+
+# CHECK-INST: pvfmk.w.up.lt %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x02,0x0c,0x00,0x00,0x8f,0xb5]
+pvfmk.w.up.lt %vm12, %vix, %vm15
+
+# CHECK-INST: pvfmk.w.up.ne %vm11, %v32
+# CHECK-ENCODING: encoding: [0x00,0x20,0x03,0x0b,0x00,0x00,0x80,0xb5]
+pvfmk.w.up.ne %vm11, %v32
+
+# CHECK-INST: pvfmk.w.up.eq %vm1, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x04,0x01,0x00,0x00,0x8f,0xb5]
+pvfmk.w.up.eq %vm1, %vix, %vm15
+
+# CHECK-INST: pvfmk.w.up.ge %vm12, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x05,0x0c,0x00,0x00,0x80,0xb5]
+pvfmk.w.up.ge %vm12, %v22
+
+# CHECK-INST: pvfmk.w.up.le %vm12, %vix, %vm15
+# CHECK-ENCODING: encoding: [0x00,0xff,0x06,0x0c,0x00,0x00,0x8f,0xb5]
+pvfmk.w.up.le %vm12, %vix, %vm15

diff  --git a/llvm/test/MC/VE/XORM.s b/llvm/test/MC/VE/XORM.s
new file mode 100644
index 000000000000..f1e5b81b0f48
--- /dev/null
+++ b/llvm/test/MC/VE/XORM.s
@@ -0,0 +1,16 @@
+# 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: xorm %vm0, %vm0, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x86]
+xorm %vm0, %vm0, %vm0
+
+# CHECK-INST: xorm %vm11, %vm1, %vm15
+# CHECK-ENCODING: encoding: [0x00,0x0f,0x01,0x0b,0x00,0x00,0x00,0x86]
+xorm %vm11, %vm1, %vm15
+
+# CHECK-INST: xorm %vm11, %vm15, %vm0
+# CHECK-ENCODING: encoding: [0x00,0x00,0x0f,0x0b,0x00,0x00,0x00,0x86]
+xorm %vm11, %vm15, %vm0


        


More information about the llvm-commits mailing list