[LLVMbugs] [Bug 11008] New: [x86 disassembler] AVX instructions in i386 mode mishandling vvvv field

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Sep 25 14:24:22 PDT 2011


http://llvm.org/bugs/show_bug.cgi?id=11008

           Summary: [x86 disassembler] AVX instructions in i386 mode
                    mishandling vvvv field
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: X86
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: kkhoo at perfwizard.com
                CC: llvmbugs at cs.uiuc.edu


>From the "Intel® 64 and IA-32 Architectures Software Developer’s Manual
Volume 2 (2A & 2B): Instruction Set Reference, A-Z", p. 2-21:

"In 32-bit mode the VEX first byte C4 and C5 alias onto the LES and LDS
instructions. To maintain compatibility with existing programs the VEX 2nd
byte, bits [7:6] must be 11b. To achieve this, the VEX payload bits are
selected to place only inverted, 64-bit valid fields (extended register
selectors) in these upper bits.

The 2-byte VEX Byte 1, bits [6:3] and the 3-byte VEX, Byte 2, bits [6:3] encode
a field (shorthand VEX.vvvv) that for instructions with 2 or more source
registers and an XMM or YMM or memory destination encodes the first source
register specifier stored in inverted (1’s complement) form."

Testing with r140430, there are no problems disassembling this instruction in
x86_64 mode:
$ echo '0xc5 0xf8 0x12 0x00'| ./llvm-mc -disassemble -triple="x86_64" 
    vmovlps    (%rax), %xmm0, %xmm0

Change the vvvv field to alter the register source operand:
$ echo '0xc5 0xf0 0x12 0x00'| ./llvm-mc -disassemble -triple="x86_64" 
    vmovlps    (%rax), %xmm1, %xmm0

In i386 mode, things work with the vvvv field set to 1111b:
$ echo '0xc5 0xf8 0x12 0x00'| ./llvm-mc -disassemble -triple="i386"
    vmovlps    (%eax), %xmm0, %xmm0

But if you try to change the vvvv field:
$ echo '0xc5 0xf0 0x12 0x00'| ./llvm-mc -disassemble -triple="i386"
<stdin>:1:1: warning: invalid instruction encoding
0xc5 0xf0 0x12 0x00
^
    adcb    (%eax), %al

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list