mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-22 00:37:49 +00:00
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:
parent
7b8d4a9eef
commit
ba309d43aa
@ -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
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
Loading…
x
Reference in New Issue
Block a user