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