ack/mach/powerpc/libem/cuf8.s

26 lines
600 B
ArmAsm
Raw Normal View History

2007-11-02 18:56:58 +00:00
.sect .text
! Converts a 32-bit unsigned integer into a 64-bit double.
!
! Stack: ( uint -- double )
.define .cuf8
.cuf8:
! Conversion uses the pivot value
! 1 << 52 = 0x4330 0000 0000 0000
!
! From unsigned integer u, we compute
! ((1 << 52) + u) - (1 << 52)
lis r3, 0x4330
stwu r3, -4(sp) ! make space for the double
lfd f0, 0(sp) ! f0 = (1 << 52) + u
li r3, 0x0000
stw r3, 4(sp)
lfd f1, 0(sp) ! f1 = (1 << 52)
fsub f0, f0, f1 ! finish conversion
2007-11-02 18:56:58 +00:00
stfd f0, 0(sp) ! save value again...
blr ! ...and return