summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-10-22 17:22:29 +0000
committerCraig Topper <craig.topper@intel.com>2017-10-22 17:22:29 +0000
commitdac20263a154f984f39c0cae7c5fa9ae3e0ba601 (patch)
tree44e2573a86ad6b1adb246589f9ba53251dd27cf8
parent24226504a7d18cb626e41f27c8154c95aa2bf08a (diff)
downloadbcm5719-llvm-dac20263a154f984f39c0cae7c5fa9ae3e0ba601.tar.gz
bcm5719-llvm-dac20263a154f984f39c0cae7c5fa9ae3e0ba601.zip
[X86] More correctly support LIG and WIG for EVEX instructions in the disassembler tables.
This is similar to how we generate the VEX tables. More fixes are still needed for the instructions that use EVEX.b (broadcast and embedded rounding). llvm-svn: 316294
-rw-r--r--llvm/utils/TableGen/X86DisassemblerTables.cpp242
1 files changed, 168 insertions, 74 deletions
diff --git a/llvm/utils/TableGen/X86DisassemblerTables.cpp b/llvm/utils/TableGen/X86DisassemblerTables.cpp
index d4ba4f7cd8f..8c69dfb01a2 100644
--- a/llvm/utils/TableGen/X86DisassemblerTables.cpp
+++ b/llvm/utils/TableGen/X86DisassemblerTables.cpp
@@ -171,180 +171,274 @@ static inline bool inheritsFrom(InstructionContext child,
case IC_VEX_L_W_OPSIZE:
return false;
case IC_EVEX:
- return inheritsFrom(child, IC_EVEX_W) ||
- inheritsFrom(child, IC_EVEX_L_W);
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2));
case IC_EVEX_XS:
- return inheritsFrom(child, IC_EVEX_W_XS) ||
- inheritsFrom(child, IC_EVEX_L_W_XS);
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XS)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XS)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XS));
case IC_EVEX_XD:
- return inheritsFrom(child, IC_EVEX_W_XD) ||
- inheritsFrom(child, IC_EVEX_L_W_XD);
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XD)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XD)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XD));
case IC_EVEX_OPSIZE:
- return inheritsFrom(child, IC_EVEX_W_OPSIZE) ||
- inheritsFrom(child, IC_EVEX_L_W_OPSIZE);
- case IC_EVEX_B:
- return false;
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_OPSIZE)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_OPSIZE)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_OPSIZE));
+ case IC_EVEX_K:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_K)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_K)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_K));
+ case IC_EVEX_XS_K:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS_K)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS_K)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XS_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XS_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XS_K));
+ case IC_EVEX_XD_K:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD_K)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD_K)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XD_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XD_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XD_K));
+ case IC_EVEX_OPSIZE_K:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_K)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_K)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_OPSIZE_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_OPSIZE_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_OPSIZE_K));
+ case IC_EVEX_KZ:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_KZ)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_KZ)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_KZ));
+ case IC_EVEX_XS_KZ:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS_KZ)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS_KZ)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XS_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XS_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XS_KZ));
+ case IC_EVEX_XD_KZ:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD_KZ)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD_KZ)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_XD_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_XD_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_XD_KZ));
+ case IC_EVEX_OPSIZE_KZ:
+ return (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_KZ)) ||
+ (VEX_LIG && VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_KZ)) ||
+ (VEX_WIG && inheritsFrom(child, IC_EVEX_W_OPSIZE_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L_OPSIZE_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_OPSIZE_KZ));
case IC_EVEX_W:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W));
case IC_EVEX_W_XS:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XS)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XS));
case IC_EVEX_W_XD:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XD)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XD));
case IC_EVEX_W_OPSIZE:
- return false;
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE));
+ case IC_EVEX_W_K:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_K));
+ case IC_EVEX_W_XS_K:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XS_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XS_K));
+ case IC_EVEX_W_XD_K:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XD_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XD_K));
+ case IC_EVEX_W_OPSIZE_K:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_K)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_K));
+ case IC_EVEX_W_KZ:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_KZ));
+ case IC_EVEX_W_XS_KZ:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XS_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XS_KZ));
+ case IC_EVEX_W_XD_KZ:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_XD_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_XD_KZ));
+ case IC_EVEX_W_OPSIZE_KZ:
+ return (VEX_LIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_KZ)) ||
+ (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_KZ));
case IC_EVEX_L:
- case IC_EVEX_L_K_B:
- case IC_EVEX_L_KZ_B:
- case IC_EVEX_L_B:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W);
case IC_EVEX_L_XS:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS);
case IC_EVEX_L_XD:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD);
case IC_EVEX_L_OPSIZE:
- return false;
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE);
+ case IC_EVEX_L_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_K);
+ case IC_EVEX_L_XS_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS_K);
+ case IC_EVEX_L_XD_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD_K);
+ case IC_EVEX_L_OPSIZE_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_K);
+ case IC_EVEX_L_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_KZ);
+ case IC_EVEX_L_XS_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XS_KZ);
+ case IC_EVEX_L_XD_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_XD_KZ);
+ case IC_EVEX_L_OPSIZE_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L_W_OPSIZE_KZ);
case IC_EVEX_L_W:
case IC_EVEX_L_W_XS:
case IC_EVEX_L_W_XD:
case IC_EVEX_L_W_OPSIZE:
return false;
+ case IC_EVEX_L_W_K:
+ case IC_EVEX_L_W_XS_K:
+ case IC_EVEX_L_W_XD_K:
+ case IC_EVEX_L_W_OPSIZE_K:
+ return false;
+ case IC_EVEX_L_W_KZ:
+ case IC_EVEX_L_W_XS_KZ:
+ case IC_EVEX_L_W_XD_KZ:
+ case IC_EVEX_L_W_OPSIZE_KZ:
+ return false;
case IC_EVEX_L2:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W);
case IC_EVEX_L2_XS:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS);
case IC_EVEX_L2_XD:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD);
case IC_EVEX_L2_OPSIZE:
- return false;
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE);
+ case IC_EVEX_L2_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_K);
+ case IC_EVEX_L2_XS_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS_K);
+ case IC_EVEX_L2_XD_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD_K);
+ case IC_EVEX_L2_OPSIZE_K:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_K);
+ case IC_EVEX_L2_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_KZ);
+ case IC_EVEX_L2_XS_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XS_KZ);
+ case IC_EVEX_L2_XD_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_XD_KZ);
+ case IC_EVEX_L2_OPSIZE_KZ:
+ return VEX_WIG && inheritsFrom(child, IC_EVEX_L2_W_OPSIZE_KZ);
case IC_EVEX_L2_W:
case IC_EVEX_L2_W_XS:
case IC_EVEX_L2_W_XD:
case IC_EVEX_L2_W_OPSIZE:
return false;
- case IC_EVEX_K:
- return inheritsFrom(child, IC_EVEX_W_K) ||
- inheritsFrom(child, IC_EVEX_L_W_K);
- case IC_EVEX_XS_K:
+ case IC_EVEX_L2_W_K:
+ case IC_EVEX_L2_W_XS_K:
+ case IC_EVEX_L2_W_XD_K:
+ case IC_EVEX_L2_W_OPSIZE_K:
+ return false;
+ case IC_EVEX_L2_W_KZ:
+ case IC_EVEX_L2_W_XS_KZ:
+ case IC_EVEX_L2_W_XD_KZ:
+ case IC_EVEX_L2_W_OPSIZE_KZ:
+ return false;
+ case IC_EVEX_B:
+ return false;
+ case IC_EVEX_L_K_B:
+ case IC_EVEX_L_KZ_B:
+ case IC_EVEX_L_B:
+ return false;
case IC_EVEX_XS_K_B:
case IC_EVEX_XS_KZ_B:
- return inheritsFrom(child, IC_EVEX_W_XS_K) ||
- inheritsFrom(child, IC_EVEX_L_W_XS_K);
- case IC_EVEX_XD_K:
+ return false;
case IC_EVEX_XD_K_B:
case IC_EVEX_XD_KZ_B:
- return inheritsFrom(child, IC_EVEX_W_XD_K) ||
- inheritsFrom(child, IC_EVEX_L_W_XD_K);
+ return false;
case IC_EVEX_XS_B:
case IC_EVEX_XD_B:
case IC_EVEX_K_B:
- case IC_EVEX_KZ:
return false;
- case IC_EVEX_XS_KZ:
- return inheritsFrom(child, IC_EVEX_W_XS_KZ) ||
- inheritsFrom(child, IC_EVEX_L_W_XS_KZ);
- case IC_EVEX_XD_KZ:
- return inheritsFrom(child, IC_EVEX_W_XD_KZ) ||
- inheritsFrom(child, IC_EVEX_L_W_XD_KZ);
case IC_EVEX_KZ_B:
- case IC_EVEX_OPSIZE_K:
case IC_EVEX_OPSIZE_B:
case IC_EVEX_OPSIZE_K_B:
- case IC_EVEX_OPSIZE_KZ:
case IC_EVEX_OPSIZE_KZ_B:
return false;
- case IC_EVEX_W_K:
case IC_EVEX_W_B:
case IC_EVEX_W_K_B:
case IC_EVEX_W_KZ_B:
- case IC_EVEX_W_XS_K:
- case IC_EVEX_W_XD_K:
- case IC_EVEX_W_OPSIZE_K:
case IC_EVEX_W_OPSIZE_B:
case IC_EVEX_W_OPSIZE_K_B:
return false;
- case IC_EVEX_L_K:
- case IC_EVEX_L_XS_K:
- case IC_EVEX_L_XD_K:
case IC_EVEX_L_XD_B:
case IC_EVEX_L_XD_K_B:
- case IC_EVEX_L_OPSIZE_K:
case IC_EVEX_L_OPSIZE_B:
case IC_EVEX_L_OPSIZE_K_B:
return false;
- case IC_EVEX_W_KZ:
- case IC_EVEX_W_XS_KZ:
- case IC_EVEX_W_XD_KZ:
case IC_EVEX_W_XS_B:
case IC_EVEX_W_XD_B:
case IC_EVEX_W_XS_K_B:
case IC_EVEX_W_XD_K_B:
case IC_EVEX_W_XS_KZ_B:
case IC_EVEX_W_XD_KZ_B:
- case IC_EVEX_W_OPSIZE_KZ:
case IC_EVEX_W_OPSIZE_KZ_B:
return false;
- case IC_EVEX_L_KZ:
- case IC_EVEX_L_XS_KZ:
case IC_EVEX_L_XS_B:
case IC_EVEX_L_XS_K_B:
case IC_EVEX_L_XS_KZ_B:
- case IC_EVEX_L_XD_KZ:
case IC_EVEX_L_XD_KZ_B:
- case IC_EVEX_L_OPSIZE_KZ:
case IC_EVEX_L_OPSIZE_KZ_B:
return false;
- case IC_EVEX_L_W_K:
case IC_EVEX_L_W_B:
case IC_EVEX_L_W_K_B:
- case IC_EVEX_L_W_XS_K:
case IC_EVEX_L_W_XS_B:
case IC_EVEX_L_W_XS_K_B:
- case IC_EVEX_L_W_XS_KZ:
case IC_EVEX_L_W_XS_KZ_B:
- case IC_EVEX_L_W_OPSIZE_K:
case IC_EVEX_L_W_OPSIZE_B:
case IC_EVEX_L_W_OPSIZE_K_B:
- case IC_EVEX_L_W_KZ:
case IC_EVEX_L_W_KZ_B:
- case IC_EVEX_L_W_XD_K:
case IC_EVEX_L_W_XD_B:
case IC_EVEX_L_W_XD_K_B:
- case IC_EVEX_L_W_XD_KZ:
case IC_EVEX_L_W_XD_KZ_B:
- case IC_EVEX_L_W_OPSIZE_KZ:
case IC_EVEX_L_W_OPSIZE_KZ_B:
return false;
- case IC_EVEX_L2_K:
case IC_EVEX_L2_B:
case IC_EVEX_L2_K_B:
case IC_EVEX_L2_KZ_B:
- case IC_EVEX_L2_XS_K:
case IC_EVEX_L2_XS_K_B:
case IC_EVEX_L2_XS_B:
case IC_EVEX_L2_XD_B:
- case IC_EVEX_L2_XD_K:
case IC_EVEX_L2_XD_K_B:
- case IC_EVEX_L2_OPSIZE_K:
case IC_EVEX_L2_OPSIZE_B:
case IC_EVEX_L2_OPSIZE_K_B:
- case IC_EVEX_L2_KZ:
- case IC_EVEX_L2_XS_KZ:
case IC_EVEX_L2_XS_KZ_B:
- case IC_EVEX_L2_XD_KZ:
case IC_EVEX_L2_XD_KZ_B:
- case IC_EVEX_L2_OPSIZE_KZ:
case IC_EVEX_L2_OPSIZE_KZ_B:
return false;
- case IC_EVEX_L2_W_K:
case IC_EVEX_L2_W_B:
case IC_EVEX_L2_W_K_B:
case IC_EVEX_L2_W_KZ_B:
- case IC_EVEX_L2_W_XS_K:
case IC_EVEX_L2_W_XS_B:
case IC_EVEX_L2_W_XS_K_B:
- case IC_EVEX_L2_W_XD_K:
case IC_EVEX_L2_W_XD_B:
- case IC_EVEX_L2_W_OPSIZE_K:
case IC_EVEX_L2_W_OPSIZE_B:
case IC_EVEX_L2_W_OPSIZE_K_B:
- case IC_EVEX_L2_W_KZ:
- case IC_EVEX_L2_W_XS_KZ:
case IC_EVEX_L2_W_XS_KZ_B:
- case IC_EVEX_L2_W_XD_KZ:
case IC_EVEX_L2_W_XD_K_B:
case IC_EVEX_L2_W_XD_KZ_B:
- case IC_EVEX_L2_W_OPSIZE_KZ:
case IC_EVEX_L2_W_OPSIZE_KZ_B:
return false;
default:
OpenPOWER on IntegriCloud