[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