X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FREADME-MMX.txt;h=a6c8616b6d2c6b77a897de92552ef3111b20d25b;hb=1292c226458b68a119d3a387a0527f453b2065c2;hp=f3a625e65dc6be78c6969bb0ffbf30424ea524f0;hpb=a2c38ae90db202c50cfd290983189482497b0851;p=oota-llvm.git diff --git a/lib/Target/X86/README-MMX.txt b/lib/Target/X86/README-MMX.txt index f3a625e65dc..a6c8616b6d2 100644 --- a/lib/Target/X86/README-MMX.txt +++ b/lib/Target/X86/README-MMX.txt @@ -40,3 +40,32 @@ _qux: movl %edx, 4(%eax) addl $12, %esp ret $4 + +//===---------------------------------------------------------------------===// + +We generate crappy code for this: + +__m64 t() { + return _mm_cvtsi32_si64(1); +} + +_t: + subl $12, %esp + movl $1, %eax + movd %eax, %mm0 + movq %mm0, (%esp) + movl (%esp), %eax + movl 4(%esp), %edx + addl $12, %esp + ret + +The extra stack traffic is covered in the previous entry. But the other reason +is we are not smart about materializing constants in MMX registers. With -m64 + + movl $1, %eax + movd %eax, %mm0 + movd %mm0, %rax + ret + +We should be using a constantpool load instead: + movq LC0(%rip), %rax