Skip to content

Commit

Permalink
[X86][MC] Fix the bug of -output-asm-variant=1 for intel syntax
Browse files Browse the repository at this point in the history
Before this patch

```
$ echo "leal    (,%r15), %eax" | llvm-mc --show-encoding --output-asm-variant=1

        lea     eax, [r15]                      # encoding: [0x42,0x8d,0x04,0x3d,0x00,0x00,0x00,0x00]

$ echo "lea     eax, [r15]" | llvm-mc --show-encoding -x86-asm-syntax=intel --output-asm-variant=1

        lea     eax, [r15]                      # encoding: [0x41,0x8d,0x07]
```

MC printed the register r15 as a base in intel syntax even when it's an index.
Then we got a different encoding by using the assembly from the output of the
first command.

I believe the behavior is too weird to be called a feature.

After this patch, we get

```
$ echo "leal    (,%r15), %eax" | llvm-mc --show-encoding --output-asm-variant=1

        lea     eax, [1*r15]                    # encoding: [0x42,0x8d,0x04,0x3d,0x00,0x00,0x00,0x00]
```

Reviewed By: RKSimon, pengfei, MaskRay

Differential Revision: https://reviews.llvm.org/D144183
  • Loading branch information
KanRobert committed Feb 17, 2023
1 parent 7495a2e commit df277ec
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
2 changes: 1 addition & 1 deletion llvm/lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.cpp
Expand Up @@ -398,7 +398,7 @@ void X86IntelInstPrinter::printMemReference(const MCInst *MI, unsigned Op,

if (IndexReg.getReg()) {
if (NeedPlus) O << " + ";
if (ScaleVal != 1)
if (ScaleVal != 1 || !BaseReg.getReg())
O << ScaleVal << '*';
printOperand(MI, Op+X86::AddrIndexReg, O);
NeedPlus = true;
Expand Down
7 changes: 7 additions & 0 deletions llvm/test/MC/Disassembler/X86/intel-syntax.txt
Expand Up @@ -171,4 +171,11 @@
# CHECK: lea rcx, [rsp + 4]
0x48 0x8d 0x4c 0x24 0x04

# CHECK: lea rcx, [1*rax]
0x48 0x8d 0x0c 0x05 0x00 0x00 0x00 0x00

# CHECK: lea rcx, [1*rax + 4]
0x48 0x8d 0x0c 0x05 0x04 0x00 0x00 0x00

# CHECK: lea rcx, [2*rax]
0x48 0x8d 0x0c 0x45 0x00 0x00 0x00 0x00

0 comments on commit df277ec

Please sign in to comment.