Alexis Engelke
01e1587c5c
decode: Move prefix before other opcode extensions
2020-11-09 09:47:36 +01:00
Alexis Engelke
2e7e396325
decode: Remove TABLE_PREFIX_REP and use NFx prefix
2020-11-09 09:47:36 +01:00
Alexis Engelke
69ce124354
encode: Add library for x86-64 encoding
2020-11-09 09:46:38 +01:00
Alexis Engelke
4e95c8d152
instrs: Several operand size and AVX-related fixes
2020-07-05 14:59:24 +02:00
Alexis Engelke
9d7aeb2b61
instrs: Replace LIG attribute with LIG specifier
2020-07-05 14:57:22 +02:00
Alexis Engelke
468eeaa249
parseinstrs: Create a separate class for parsed opcode
2020-07-05 14:57:22 +02:00
Alexis Engelke
9b6caeb2ae
parseinstrs: Write mnemonics to separate file
2020-07-04 14:35:51 +02:00
Alexis Engelke
dc668691d8
instrs: Specify segment register size
2020-07-04 14:25:22 +02:00
Alexis Engelke
0da46cba98
instrs: Add missing VEXLIG for compares
2020-07-04 14:25:20 +02:00
Alexis Engelke
c9333ac2c9
instrs: Enforce memory for VSIB encodings
2020-07-04 14:24:59 +02:00
Alexis Engelke
141680e77c
instrs: Remove MUSTMEM, encode in operands
2020-07-04 14:24:56 +02:00
Alexis Engelke
da4ad137d8
instrs: Remove redundant IMM_8
2020-07-04 08:55:51 +02:00
Alexis Engelke
854082a156
instrs: Remove invalid SIZE_8 markers
2020-07-02 08:39:51 +02:00
Alexis Engelke
7ee9320840
decode: Add second fixed operand size
2020-06-30 22:07:18 +02:00
Alexis Engelke
08490d4503
parseinstrs: Simplify opkind lookup
2020-06-30 21:02:31 +02:00
Alexis Engelke
e7b5982ba9
tests/decode: Add CRC32 and MOVBE test cases
2020-06-27 19:01:26 +02:00
Alexis Engelke
ab27ea6338
tests/decode: Print architecture mode on failure
2020-06-27 19:01:26 +02:00
Alexis Engelke
ceea786c7f
tests/decode: Rewrite in C, speed-up is >100x
2020-06-27 19:01:26 +02:00
Alexis Engelke
9556d34a8a
fadec: Deprecate address parameter of fd_decode
2020-06-27 19:01:26 +02:00
Alexis Engelke
7333453a19
instrs: Update several operand types and sizes
2020-06-27 19:01:26 +02:00
Alexis Engelke
3221a319d3
instrs: Don't use O-encoding hack for FSTSW
2020-06-27 17:33:58 +02:00
Alexis Engelke
1b5461036e
decode: Don't walk escape opcodes in tables
2020-06-27 17:33:58 +02:00
Alexis Engelke
3ad518e22e
decode: Store op types early and compact encoding
...
* The encoding of operand types in the decode table now only requires 9
bits instead of the previous 16 bits.
* Operand types are decoded before the operands itself are stored. This
allows to ignore REX.RB prefixed for specific register types.
2020-06-27 17:33:58 +02:00
Alexis Engelke
5e1bb1871f
decode: Check CR/DR/SEG reg count in ModRM decoder
2020-06-27 17:33:58 +02:00
Alexis Engelke
618d90ed42
instrs: Encode memory size for FPU instructions
2020-06-27 17:33:58 +02:00
Alexis Engelke
bacfecfead
fadec: Allow 64-bit decoding on 32-bit platforms
2020-06-27 17:33:58 +02:00
Alexis Engelke
8445060ad9
fadec: Make memory displacement 64-bit large
...
While for almost all instructions the memory address displacement is
sign-extended 32-bits (like for immediate operands), there is a single
case where this is not true: the FD/TD mov encoding allows for a 64-bit
memory address to be specified.
2020-06-25 21:04:10 +02:00
Alexis Engelke
55197817a7
decode: Remove several unneeded #ifdef's
...
In many cases, the compiler is able to figure out itself whether support
for one decoding mode is disabled.
2020-06-25 21:04:10 +02:00
Alexis Engelke
348d1aec4b
decode: Minor refactoring for better performance
...
This improves decoding performance by ~4%.
2020-06-25 21:04:10 +02:00
Alexis Engelke
bb4b195dbe
instrs/sse,avx: Fix several operand sizes
2020-06-25 21:04:10 +02:00
Alexis Engelke
807d8a817b
decode: Change imm_control to get rid of imm_byte
2020-06-19 14:04:17 +02:00
Alexis Engelke
ab5e0c67c1
decode: Don't fall back to memory encoding with 72-table
2020-06-19 14:04:17 +02:00
Alexis Engelke
f978785df3
parseinstrs: Make TrieEntry always hashable
2020-06-17 18:36:18 +02:00
Alexis Engelke
93a61a0ff1
parseinstrs: Remove mnemonic from instr bitstruct
2020-06-17 17:16:53 +02:00
Alexis Engelke
38f52c98b5
parseinstrs: Store mnemonic enum entry in trie
2020-06-17 17:08:23 +02:00
Alexis Engelke
af5b36a58e
parseinstrs: Don't needlessly convert to bytes
2020-06-17 16:49:27 +02:00
Alexis Engelke
f4b41a7e80
decode: Use uint16_t for trie
2020-06-17 16:44:22 +02:00
Alexis Engelke
1fedc069b6
parseinstrs: Propagate unpacked data for trie
2020-06-17 16:34:27 +02:00
Alexis Engelke
545ec30ad0
decode: Return partial error on incomplete opcode
2020-06-14 14:01:39 +02:00
Alexis Engelke
8716bd1991
format: Handle offset operands properly
2020-06-14 14:01:14 +02:00
Alexis Engelke
9454f5f746
travis: Remove Travis CI
2020-06-14 13:45:03 +02:00
aengelke
d18b6bb3cf
ci: Add CI via GitHub Actions
2020-06-14 13:43:26 +02:00
Alexis Engelke
80ec7ed960
instrs: Fix decoding of XCHG r8, rax
...
Opcode 90 is only a NOP if there is no REX.B.
2020-06-14 13:36:11 +02:00
Alexis Engelke
c3df15e19b
api: Store index register in operand struct
...
Combined with some reordering of the struct fields, this reduces the
size of an FdInstr from 56 bytes to 48 bytes.
2020-06-14 13:36:01 +02:00
Alexis Engelke
7a364fcada
api: Drop unused internal FD_FLAG_REX
2020-05-17 11:14:52 +02:00
Alexis Engelke
da4cbc237f
parseinstr: Use typing.NamedTuple
2020-05-10 14:20:34 +02:00
Alexis Engelke
afc574503f
Decode jump targets as offset if address is NULL
...
Addresses relative to the actual address of the instruction are decoded
as new offset operand, where the RIP has to be added to obtain the real
value. For backwards compatibility, the new behavior is only exposed if
the address of the instruction is specified as zero.
2020-03-07 14:30:07 +01:00
Alexis Engelke
dc286b14f2
Unify instruction mnemonics [API break]
...
It is a longer standing issue that some instructions like ADD, IMUL, and
SHL have multiple mnemonics for different encoding forms. This is a
relict from a time where such information was not stored in the
instruction decoding. This, however, is no longer the case and therefore
the extra mnemonics just increase the number of cases to be handled by
users.
2020-02-20 10:56:17 +01:00
Alexis Engelke
513a913feb
decode: Store CL as register operand for shifts
2020-02-19 16:53:59 +01:00
Alexis Engelke
e65086c76c
parseinstr: Separate fields for operand properties
2020-02-16 18:12:07 +01:00