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

           Summary: MC has movq and movd wrong
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


Binutils doesn't care about the difference between movd and movq, in that
these:

  movq %rdi,%xmm0
  movd %rdi,%xmm0

both assemble to "66 48 0f 6e c7". However, MC rejects the former and accepts
the latter. It's great that it's distinguishing between the two ...

... but it's got it backwards. According to
http://support.amd.com/us/Processor_TechDocs/26568.pdf (book #26568—Rev.
3.12—May 2011) movd is for moving between XMM and 32-bit while movq is for
moving between XMM and 64-bit:

"Mnemonic Opcode Description
MOVD xmm, reg32/mem32 66 (W0) 0F 6E /r Move a 32-bit value from reg32/mem32 to
xmm.
MOVQ xmm, reg64/mem64 66 (W1) 0F 6E /r Move a 64-bit value from reg64/mem64 to
xmm.
MOVD reg32/mem32, xmm 66 (W0) 0F 7E /r Move a 32-bit value from xmm to
reg32/mem32
MOVQ reg64/mem64, xmm 66 (W1) 0F 7E /r Move a 64-bit value from xmm to
reg64/mem64."

%rdi is 64-bit and thusly should really be a movq, not a movd. This is breaking
current versions of OpenSSL.

-- 
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to