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:
Mark Charney
2017-01-27 13:39:36 -05:00
parent c4d500311c
commit 40de12a930
7 changed files with 20 additions and 10 deletions

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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