[llvm-dev] X86 disassembler fails to handle 0x66 prefix?

Jun Koi via llvm-dev llvm-dev at lists.llvm.org
Sun May 7 00:40:34 PDT 2017


On Sun, May 7, 2017 at 3:22 PM, Jun Koi <junkoi2004 at gmail.com> wrote:
> Hello,
>
> I have seen this bug for quite a while, and even in the latest code it
> is still there: that is X86 disassembler does not handle 0x66 prefix
> properly, if it is put behind 0xF3 prefix.
>
> The below commands should return the same output, but not.
>
> $ echo "0xf3 0x66 0xa5"|./build/bin/llvm-mc --disassemble
> -triple=x86_64 -output-asm-variant=1
> .text
> rep
> movsw word ptr es:[rdi], word ptr [rsi]
>
> $ echo "0x66 0xf3 0xa6"|./build/bin/llvm-mc --disassemble
> -triple=x86_64 -output-asm-variant=1
> .text
> cmpsb byte ptr [rsi], byte ptr es:[rdi]
>
>
> You can see just by exchanging the order of 0xf3 & 0x66, we get
> different result. F3 in this case is not really a prefix for REP I
> think.

Just to clarify, the correct output for both cases would be: "rep
movsw word ptr es:[rdi], word ptr [rsi]"


Thanks.


More information about the llvm-dev mailing list