[PATCH] D80539: [X86] Report error for invalid register number.

LuoYuanke via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 26 01:35:10 PDT 2020


LuoYuanke created this revision.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.

Change-Id: I2587106ada854a95098698f0d3b1c7d8e5f665f8


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D80539

Files:
  llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp


Index: llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
===================================================================
--- llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -1018,6 +1018,8 @@
     RegEnc = getX86RegEncoding(MI, CurOp++);
     VEX_B = ~(RegEnc >> 3) & 1;
     VEX_X = ~(RegEnc >> 4) & 1;
+    if (Encoding == X86II::VEX && !VEX_X)
+      report_fatal_error("R/M register number exceed 16 in VEX encoding!");
 
     if (EVEX_b) {
       if (HasEVEX_RC) {
@@ -1056,6 +1058,8 @@
     RegEnc = getX86RegEncoding(MI, CurOp++);
     VEX_B = ~(RegEnc >> 3) & 1;
     VEX_X = ~(RegEnc >> 4) & 1;
+    if (Encoding == X86II::VEX && !VEX_X)
+      report_fatal_error("R/M register number exceed 16 in VEX encoding!");
     break;
   }
   case X86II::MRMDestReg: {
@@ -1066,6 +1070,8 @@
     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
     VEX_B = ~(RegEnc >> 3) & 1;
     VEX_X = ~(RegEnc >> 4) & 1;
+    if (Encoding == X86II::VEX && !VEX_X)
+      report_fatal_error("R/M register number exceed 16 in VEX encoding!");
 
     if (HasEVEX_K)
       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
@@ -1104,10 +1110,19 @@
     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
     VEX_B = ~(RegEnc >> 3) & 1;
     VEX_X = ~(RegEnc >> 4) & 1;
+    if (Encoding == X86II::VEX && !VEX_X)
+      report_fatal_error("R/M register number exceed 16 in VEX encoding!");
     break;
   }
   }
 
+  if (Encoding == X86II::VEX) {
+    if (!EVEX_R2)
+      report_fatal_error("R/M.reg register number exceed 16 in VEX encoding!");
+    if (!EVEX_V2)
+      report_fatal_error("V register number exceed 16 in VEX encoding!");
+  }
+
   if (Encoding == X86II::VEX || Encoding == X86II::XOP) {
     // VEX opcode prefix can have 2 or 3 bytes
     //


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80539.266116.patch
Type: text/x-patch
Size: 1818 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200526/63026dd6/attachment.bin>


More information about the llvm-commits mailing list