[llvm] [X86] Ignore REX prefixes not immediately before opcode (PR #117299)

Phoebe Wang via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 22 00:00:55 PST 2024


================
@@ -770,3 +770,8 @@
 
 # CHECK: prefetchit1 (%rip)
 0x0f,0x18,0x35,0x00,0x00,0x00,0x00
+
+# Check that we correctly ignore a REX prefix that is not immediately before
+# the opcode.
+# CHECK: orw $25659, %ax
----------------
phoebewang wrote:

Doesn't 0x4c immediately precede the opcode 0x64 in this case? Here is XED output:

```
xed -64 -de 664c640d3b64
664C640D3B64
ICLASS:     OR
CATEGORY:   LOGICAL
EXTENSION:  BASE
IFORM:      OR_OrAX_IMMz
ISA_SET:    I86
ATTRIBUTES: SCALABLE
SHORT:      or ax, 0x643b
Encodable! 66640D3B64
Discrepenacy after re-encoding. dec_len= 6 [664C640D3B64] enc_olen= 5 [66640D3B64] for instruction: OR OR_OrAX_IMMz EASZ:3, EOSZ:1, ILD_SEG:100, IMM0:0x643b, IMM0SIGNED, IMM_WIDTH:16, LZCNT, MAX_BYTES:6, MODE:2, NOMINAL_OPCODE:13, NPREFIXES:3, NREXES:1, NSEG_PREFIXES:1, OSZ, OUTREG:AX, P4, POS_IMM:4, POS_NOMINAL_OPCODE:3, PREFIX66, REG0:AX, REG1:RFLAGS, SEG_OVD:4, SMODE:2, SRM:5, TZCNT
0               REG0/RW/V/IMPLICIT/NT_LOOKUP_FN/ORAX
1               IMM0/R/Z/EXPLICIT/IMM_CONST/1
2               REG1/W/INVALID/SUPPRESSED/NT_LOOKUP_FN/RFLAGS
YDIS: or ax, 0x643b
vs Encode  request: OR EASZ:3, EOSZ:1, ILD_SEG:100, IMM0:0x643b, IMM0SIGNED, IMM_WIDTH:16, LZCNT, MAX_BYTES:6, MODE:2, NOMINAL_OPCODE:13, NPREFIXES:3, NREXES:1, NSEG_PREFIXES:1, OSZ, OUTREG:AX, P4, POS_IMM:4, POS_NOMINAL_OPCODE:3, PREFIX66, REG0:AX, REG1:RFLAGS, SEG_OVD:4, SMODE:2, SRM:5, TZCNT
OPERAND ORDER: REG0 IMM0
```

https://github.com/llvm/llvm-project/pull/117299


More information about the llvm-commits mailing list