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

Jun Koi via llvm-dev llvm-dev at lists.llvm.org
Sun May 7 05:48:57 PDT 2017


On Sun, May 7, 2017 at 4:25 PM, Flamedoge <code.kchoi at gmail.com> wrote:
>> F3 in this case is not really a prefix for REP I think.
>
> http://x86.renejeschke.de/html/file_module_x86_id_279.html
>
> Intel arch. manual shows REP uses F3 and F2 as starting prefixes.
>

Are you sure? I could not find anywhere in the above link stating that.

Anyway, on the real hardware it does not matter where F2/F3 stays,
which makes everything even more confused.

Thanks.



> Kevin
>
> On Sun, May 7, 2017 at 12:40 AM, Jun Koi via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>>
>> 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.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>


More information about the llvm-dev mailing list