diff --git a/lib/Target/X86/README-MMX.txt b/lib/Target/X86/README-MMX.txt index f3a625e65dc..57c7c3f48c8 100644 --- a/lib/Target/X86/README-MMX.txt +++ b/lib/Target/X86/README-MMX.txt @@ -40,3 +40,30 @@ _qux: movl %edx, 4(%eax) addl $12, %esp ret $4 + +//===---------------------------------------------------------------------===// + +int main() { + __m64 A[1] = { _mm_cvtsi32_si64(1) }; + __m64 B[1] = { _mm_cvtsi32_si64(10) }; + __m64 sum = _mm_cvtsi32_si64(0); + + sum = __builtin_ia32_paddq(__builtin_ia32_paddq(A[0], B[0]), sum); + + printf("Sum = %d\n", _mm_cvtsi64_si32(sum)); + return 0; +} + +Generates: + + movl $11, %eax +### movd %eax, %mm0 +### movq %mm0, 8(%esp) +### movl 8(%esp), %eax + movl %eax, 4(%esp) + movl $_str, (%esp) + call L_printf$stub + xorl %eax, %eax + addl $28, %esp + +These instructions are unnecessary.