Alexis Engelke
f9bba6289e
instrs: Annotate only-mem and only-reg in opcode
2020-11-22 11:34:55 +01:00
Alexis Engelke
bbc3b34f71
decode: Fix VEX + REX + legacy combinations
2020-11-21 15:43:51 +01:00
Alexis Engelke
7f0bd4de8b
decode: Fix combinations of VEX with legacy prefix
2020-11-21 14:59:25 +01:00
Alexis Engelke
318fdc50eb
decode: Replace table walk macro with function
2020-11-17 10:43:08 +01:00
Alexis Engelke
95070908d0
tests/decode: Add more test cases
2020-11-09 09:47:36 +01:00
Alexis Engelke
58464d6fa1
decode: Fix ignoring VEX.B in 32-bit mode
2020-11-09 09:47:36 +01:00
Alexis Engelke
62b0420147
parseinstr: Simplify opcode naming scheme
2020-11-09 09:47:36 +01:00
Alexis Engelke
9df6ac1788
decode: Replace T8+T72 with T16+T8E for R/M value
2020-11-09 09:47:36 +01:00
Alexis Engelke
7d7e72746e
parseinstr: Split escape and opcode
2020-11-09 09:47:36 +01:00
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