add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47652 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-02-27 01:17:20 +00:00
parent 7b8d4a9eef
commit ba309d43aa

View 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
//===---------------------------------------------------------------------===//