| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
This is used from llvm tblgen and the X86Disassembler - the only common
library (apart from TableGen, which probably doesn't make sense to have
as a dependency from a release tool (rather than a use-while-building-llvm
tool) of LLVM)
llvm-svn: 328393
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This patch makes the decoder understand old AMD 3DNow!
instructions that have never been properly supported in the X86
disassembler, despite being supported in other subsystems. Hopefully
this should make the X86 decoder more complete with respect to binaries
containing legacy code.
Reviewers: craig.topper
Reviewed By: craig.topper
Subscribers: llvm-commits, maksfb, bruno
Differential Revision: https://reviews.llvm.org/D43311
llvm-svn: 325295
|
|
|
|
|
|
| |
Fixes PR31955.
llvm-svn: 316308
|
|
|
|
|
|
|
|
|
|
|
|
| |
the SIB index register as an XMM/YMM/ZMM register.
This introduces a new operand type to encode the whether the index register should be XMM/YMM/ZMM. And new code to fixup the results created by readSIB.
This has the nice effect of removing a bunch of code that hard coded the name of every GATHER and SCATTER instruction to map the index type.
This fixes PR32807.
llvm-svn: 316273
|
|
|
|
|
|
| |
the size information from the ENCODING field. NFCI
llvm-svn: 292096
|
|
|
|
|
|
|
|
|
| |
with. NFCI
We were frequently checking for a list of types and the different types
conveyed no real information. So lump them together explicitly.
llvm-svn: 292095
|
|
|
|
|
|
|
|
| |
different encoding than regular addressing modes.
This part first teaches it not to check error if EVEX.V2 is used by a VSIB instruction.
llvm-svn: 292093
|
|
|
|
| |
llvm-svn: 261494
|
|
|
|
| |
llvm-svn: 261311
|
|
|
|
|
|
| |
Added encoding tests.
llvm-svn: 239403
|
|
|
|
| |
llvm-svn: 231055
|
|
|
|
|
|
| |
compare instructions.
llvm-svn: 227302
|
|
|
|
|
|
| |
This makes the assembler check their size and removes a hack from the disassembler to avoid sign extending the immediate.
llvm-svn: 226645
|
|
|
|
| |
llvm-svn: 225343
|
|
|
|
|
|
| |
is REX.W and AdSize prefix are both present.
llvm-svn: 225099
|
|
|
|
|
|
| |
modes with all 4 combinations of OpSize and AdSize prefixes being present or not.
llvm-svn: 225036
|
|
|
|
|
|
|
|
|
|
| |
Add header guards to files that were missing guards. Remove #endif comments
as they don't seem common in LLVM (we can easily add them back if we decide
they're useful)
Changes made by clang-tidy with minor tweaks.
llvm-svn: 215558
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This controls the number of operands in the disassembler's x86OperandSets
table. The entries describe how the operand is encoded and its type.
Not to surprisingly 5 operands is insufficient for AVX512. Consider
VALIGNDrrik in the next patch. These are its operand specifiers:
{ /* 328 */
{ ENCODING_DUP, TYPE_DUP1 },
{ ENCODING_REG, TYPE_XMM512 },
{ ENCODING_WRITEMASK, TYPE_VK8 },
{ ENCODING_VVVV, TYPE_XMM512 },
{ ENCODING_RM_CD64, TYPE_XMM512 },
{ ENCODING_IB, TYPE_IMM8 },
},
llvm-svn: 214889
|
|
|
|
|
|
|
|
|
|
|
|
| |
Enabling HasAVX512{DQ,BW,VL} predicates.
Adding VK2, VK4, VK32, VK64 masked register classes.
Adding new types (v64i8, v32i16) to VR512.
Extending calling conventions for new types (v64i8, v32i16)
Patch by Zinovy Nis <zinovy.y.nis@intel.com>
Reviewed by Elena Demikhovsky <elena.demikhovsky@intel.com>
llvm-svn: 213545
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are two parts here. First is to modify tablegen to adjust the encoding
type ENCODING_RM with the scaling factor.
The second is to use the new encoding types to compute the correct
displacement in the decoder.
Fixes <rdar://problem/17608489>
llvm-svn: 213281
|
|
|
|
|
|
|
|
|
|
| |
X86_MAX_OPERANDS is changed to unsigned.
Also, add range-based for loops for affected loops. This in turn
needed an ArrayRef instead of a pointer-to-array in
InternalInstruction.
llvm-svn: 207413
|
|
|
|
| |
llvm-svn: 206722
|
|
|
|
|
|
| |
and ContextDecision in different source files (depending on #define magic).
llvm-svn: 206720
|
|
|
|
|
|
| |
different source files.
llvm-svn: 206719
|
|
|
|
|
|
|
|
|
|
| |
reason to expose a global symbol 'decodeInstruction' nor to pollute the global
scope with a bunch of external linkage entities (some of which conflict with
others elsewhere in LLVM).
This is just the initial transition to C++; more cleanups to follow.
llvm-svn: 206717
|
|
|
|
|
|
| |
0xa6/0xa7, and adding MRM_C0/MRM_E0 forms. Removes 376K from the disassembler tables.
llvm-svn: 201641
|
|
|
|
| |
llvm-svn: 199804
|
|
|
|
| |
llvm-svn: 199803
|
|
|
|
|
|
|
|
|
|
| |
The addition of IC_OPSIZE_ADSIZE in r198759 wasn't quite complete. It
also turns out to have been unnecessary. The disassembler handles the
AdSize prefix for itself, and doesn't care about the difference between
(e.g.) MOV8ao8 and MOB8ao8_16 definitions. So just let them coexist and
don't worry about it.
llvm-svn: 199654
|
|
|
|
|
|
|
|
|
|
| |
It seems there is no separate instruction class for having AdSize *and*
OpSize bits set, which is required in order to disambiguate between all
these instructions. So add that to the disassembler.
Hm, perhaps we do need an AdSize16 bit after all?
llvm-svn: 198759
|
|
|
|
|
|
| |
used. Removes ~11.5K from static tables.
llvm-svn: 198284
|
|
|
|
|
|
| |
really more like OrRegFrm so we don't need a difference since we can just mask bits.
llvm-svn: 198278
|
|
|
|
|
|
| |
instructions. These instructions can be handled by MRMXr instead.
llvm-svn: 198276
|
|
|
|
|
|
| |
realized we had no FP disassembler test cases.
llvm-svn: 198265
|
|
|
|
|
|
| |
can be handled by MRMXr instead.
llvm-svn: 198238
|
|
|
|
| |
llvm-svn: 198013
|
|
|
|
|
|
|
|
|
| |
Added scalar compare VCMPSS, VCMPSD.
Implemented LowerSELECT for scalar FP operations.
I replaced FSETCCss, FSETCCsd with one node type FSETCCs.
Node extract_vector_elt(v16i1/v8i1, idx) returns an element of type i1.
llvm-svn: 197384
|
|
|
|
|
|
| |
added EVEX_KZ to tablegen
llvm-svn: 193959
|
|
|
|
| |
llvm-svn: 191874
|
|
|
|
|
|
|
|
|
|
|
| |
Add VEX_LIG to scalar FMA4 instructions.
Use VEX_LIG in some of the inheriting checks in disassembler table generator.
Make use of VEX_L_W, VEX_L_W_XS, VEX_L_W_XD contexts.
Don't let VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE inherit from their non-L forms unless VEX_LIG is set.
Let VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE inherit from all of their non-L or non-W cases.
Increase ranking on VEX_L_W, VEX_L_W_XS, VEX_L_W_XD, VEX_L_W_OPSIZE so they get chosen over non-L/non-W forms.
llvm-svn: 191649
|
|
|
|
|
|
|
| |
Added 512-bit operands printing.
Added instruction formats for KNL instructions.
llvm-svn: 187324
|
|
|
|
|
|
| |
byte represent 8 instructions and the reg modRM byte represents up to 64 instructions. Reduces modRM table from 43k entreis to 25k entries. Based on a patch from Manman Ren.
llvm-svn: 163774
|
|
|
|
|
|
| |
used to store the operand types and encodings. Store only the unique combinations in a separate table and store indices in the instruction table. Saves about 32K of static data.
llvm-svn: 161101
|
|
|
|
| |
llvm-svn: 161026
|
|
|
|
| |
llvm-svn: 153935
|
|
|
|
|
|
| |
Shaves 150k off the size of X86DisassemblerDecoder.o
llvm-svn: 151995
|
|
|
|
|
|
| |
Kay Tiong Khoo.
llvm-svn: 151510
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
| |
llvm-svn: 150167
|
|
|
|
| |
llvm-svn: 143895
|