Add a note.
authorEvan Cheng <evan.cheng@apple.com>
Sun, 22 Feb 2009 08:13:45 +0000 (08:13 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 22 Feb 2009 08:13:45 +0000 (08:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65275 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README-MMX.txt

index 7ad623e40d51dca4e4712383d23e6f4c6e8391be..a6c8616b6d2c6b77a897de92552ef3111b20d25b 100644 (file)
@@ -41,3 +41,31 @@ _qux:
         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