mirror of
https://github.com/RPCSX/xed.git
synced 2026-01-31 01:05:17 +01:00
Make NOP0F1F the preferred fat NOP for the encoder.
* Slightly hacky to mention the uname NOP0F1F, but it is similar to
putting the "enc" decorator on the pattern. If we have to fiddle
with more priorites, we can think about a better mechanism.
Change-Id: I8c72e573183cb52e869c770852328f27e00f8b03
(cherry picked from commit 431b365cc9a1736b316f814376410b1577050849)
This commit is contained in:
@@ -2208,7 +2208,11 @@ class encoder_configuration_t(object):
|
||||
# FIXME do something with the operand/conditions and patterns/actions
|
||||
iform = iform_t(iclass, conditions, actions, modal_patterns, uname)
|
||||
|
||||
if 'VEXVALID=2' in ipattern: # EVEX
|
||||
if uname == 'NOP0F1F':
|
||||
# We have many fat NOPS, 0F1F is the preferred one so we
|
||||
# give it a higher priority in the iform sorting.
|
||||
iform.priority = 0
|
||||
elif 'VEXVALID=2' in ipattern: # EVEX
|
||||
# FIXME: 2016-01-28: MJC: hack. 1st check patterns w/ ROUNDC/SAE.
|
||||
# (See other instance of BCRC=1 in this file)
|
||||
if 'BCRC=1' in ipattern:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#XED version: [v10.0-19-gc7c1777]
|
||||
#XED version: [7.57.0-13-gb3b1319]
|
||||
488B05411D1100
|
||||
MOV MOV_GPRv_MEMv DISP_WIDTH:32, EASZ:3, EOSZ:3, HAS_MODRM:1, LZCNT, MAX_BYTES:7, MEM0:ptr [RIP+0x111d41], MODE:2, MODRM, MODRM_BYTE:5, NEED_MEMDISP:32, NOMINAL_OPCODE:139, NPREFIXES:1, NREXES:1, OUTREG:RAX, P4, POS_DISP:3, POS_MODRM:2, POS_NOMINAL_OPCODE:1, REG0:RAX, REX, REXW, RM:5, SMODE:2, SRM:3, TZCNT, USING_DEFAULT_SEGMENT0
|
||||
0 REG0/W/V/EXPLICIT/NT_LOOKUP_FN/GPRV_R
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Initializing XED tables...
|
||||
Done initialing XED tables.
|
||||
#XED version: [v10.0-19-gc7c1777]
|
||||
#XED version: [7.57.0-13-gb3b1319]
|
||||
0FA0
|
||||
PUSH PUSH_FS EASZ:2, EOSZ:2, LZCNT, MAP:1, MAX_BYTES:2, MEM0:ptr SS[ESP], MODE:1, NOMINAL_OPCODE:160, OUTREG:SS, P4, POS_NOMINAL_OPCODE:1, REG0:FS, REG1:STACKPUSH, SMODE:1, TZCNT, USING_DEFAULT_SEGMENT0
|
||||
0 REG0/R/W/IMPLICIT/REG/FS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Initializing XED tables...
|
||||
Done initialing XED tables.
|
||||
#XED version: [v10.0-19-gc7c1777]
|
||||
#XED version: [7.57.0-13-gb3b1319]
|
||||
0FA0
|
||||
PUSH PUSH_FS DF64, EASZ:3, EOSZ:3, LZCNT, MAP:1, MAX_BYTES:2, MEM0:ptr [RSP], MODE:2, NOMINAL_OPCODE:160, P4, POS_NOMINAL_OPCODE:1, REG0:FS, REG1:STACKPUSH, SMODE:2, TZCNT, USING_DEFAULT_SEGMENT0
|
||||
0 REG0/R/W/IMPLICIT/REG/FS
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
0F1AFF
|
||||
ICLASS: NOP CATEGORY: WIDENOP EXTENSION: BASE IFORM: NOP_GPRv_GPRv_0F1A ISA_SET: PPRO
|
||||
SHORT: nop edi, edi
|
||||
Encodable! 0F1AFF
|
||||
Identical re-encoding
|
||||
Encodable! 0F1FFF
|
||||
Discrepenacy after re-encoding. dec_len= 3 [0F1AFF] enc_olen= 3 [0F1FFF] for instruction: NOP NOP_GPRv_GPRv_0F1A EASZ:3, EOSZ:2, HAS_MODRM:1, LZCNT, MAP:1, MAX_BYTES:3, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:26, OUTREG:EDI, P4, POS_MODRM:2, POS_NOMINAL_OPCODE:1, REG:7, REG0:EDI, REG1:EDI, RM:7, SMODE:2, SRM:2, TZCNT
|
||||
0 REG0/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_B
|
||||
1 REG1/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_R
|
||||
YDIS: nop edi, edi
|
||||
vs Encode request: NOP EASZ:3, EOSZ:2, HAS_MODRM:1, LZCNT, MAP:1, MAX_BYTES:3, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:26, OUTREG:EDI, P4, POS_MODRM:2, POS_NOMINAL_OPCODE:1, REG:7, REG0:EDI, REG1:EDI, RM:7, SMODE:2, SRM:2, TZCNT
|
||||
OPERAND ORDER: REG0 REG1
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
0F1BFF
|
||||
ICLASS: NOP CATEGORY: WIDENOP EXTENSION: BASE IFORM: NOP_GPRv_GPRv_0F1B ISA_SET: PPRO
|
||||
SHORT: nop edi, edi
|
||||
Encodable! 0F1AFF
|
||||
Discrepenacy after re-encoding. dec_len= 3 [0F1BFF] enc_olen= 3 [0F1AFF] for instruction: NOP NOP_GPRv_GPRv_0F1B EASZ:3, EOSZ:2, HAS_MODRM:1, LZCNT, MAP:1, MAX_BYTES:3, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:27, OUTREG:EDI, P4, POS_MODRM:2, POS_NOMINAL_OPCODE:1, REG:7, REG0:EDI, REG1:EDI, RM:7, SMODE:2, SRM:3, TZCNT
|
||||
Encodable! 0F1FFF
|
||||
Discrepenacy after re-encoding. dec_len= 3 [0F1BFF] enc_olen= 3 [0F1FFF] for instruction: NOP NOP_GPRv_GPRv_0F1B EASZ:3, EOSZ:2, HAS_MODRM:1, LZCNT, MAP:1, MAX_BYTES:3, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:27, OUTREG:EDI, P4, POS_MODRM:2, POS_NOMINAL_OPCODE:1, REG:7, REG0:EDI, REG1:EDI, RM:7, SMODE:2, SRM:3, TZCNT
|
||||
0 REG0/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_B
|
||||
1 REG1/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_R
|
||||
YDIS: nop edi, edi
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
F30F1BFF
|
||||
ICLASS: NOP CATEGORY: WIDENOP EXTENSION: BASE IFORM: NOP_GPRv_GPRv_0F1B ISA_SET: PPRO
|
||||
SHORT: nop edi, edi
|
||||
Encodable! F30F1AFF
|
||||
Discrepenacy after re-encoding. dec_len= 4 [F30F1BFF] enc_olen= 4 [F30F1AFF] for instruction: NOP NOP_GPRv_GPRv_0F1B EASZ:3, EOSZ:2, FIRST_F2F3:3, HAS_MODRM:1, ILD_F3, LAST_F2F3:3, LZCNT, MAP:1, MAX_BYTES:4, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:27, NPREFIXES:1, OUTREG:EDI, P4, POS_MODRM:3, POS_NOMINAL_OPCODE:2, REG:7, REG0:EDI, REG1:EDI, REP:3, RM:7, SMODE:2, SRM:3, TZCNT
|
||||
Encodable! F30F1FFF
|
||||
Discrepenacy after re-encoding. dec_len= 4 [F30F1BFF] enc_olen= 4 [F30F1FFF] for instruction: NOP NOP_GPRv_GPRv_0F1B EASZ:3, EOSZ:2, FIRST_F2F3:3, HAS_MODRM:1, ILD_F3, LAST_F2F3:3, LZCNT, MAP:1, MAX_BYTES:4, MOD:3, MODE:2, MODRM_BYTE:255, NOMINAL_OPCODE:27, NPREFIXES:1, OUTREG:EDI, P4, POS_MODRM:3, POS_NOMINAL_OPCODE:2, REG:7, REG0:EDI, REG1:EDI, REP:3, RM:7, SMODE:2, SRM:3, TZCNT
|
||||
0 REG0/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_B
|
||||
1 REG1/R/V/EXPLICIT/NT_LOOKUP_FN/GPRV_R
|
||||
YDIS: nop edi, edi
|
||||
|
||||
Reference in New Issue
Block a user