add a note
authorChris Lattner <sabre@nondot.org>
Wed, 27 Feb 2008 01:17:20 +0000 (01:17 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 27 Feb 2008 01:17:20 +0000 (01:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47652 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README-X86-64.txt

index bc19986eba43efdbdc768e54270325a15d3bf4e8..bdff56d40bf809d2501e933b95a526e5ce6affc9 100644 (file)
@@ -234,3 +234,30 @@ down by 8 and truncate it. It's not pretty but it works. We need some register
 allocation magic to make the hack go away (e.g. putting additional constraints
 on the result of the movb).
 
+//===---------------------------------------------------------------------===//
+
+This function:
+double a(double b) {return (unsigned)b;} 
+compiles to this code:
+
+_a:
+       subq    $8, %rsp
+       cvttsd2siq      %xmm0, %rax
+       movl    $4294967295, %ecx
+       andq    %rcx, %rax
+       cvtsi2sdq       %rax, %xmm0
+       addq    $8, %rsp
+       ret
+
+note the dead rsp adjustments.  Also, there is surely a better/shorter way 
+to clear the top 32-bits of a 64-bit register than movl+andq.  Testcase here:
+
+unsigned long long c(unsigned long long a) {return a&4294967295; }
+
+_c:
+       movl    $4294967295, %ecx
+       movq    %rdi, %rax
+       andq    %rcx, %rax
+       ret
+
+//===---------------------------------------------------------------------===//