45 lines
695 B
ArmAsm
45 lines
695 B
ArmAsm
|
#
|
||
|
! $Source$
|
||
|
! $State$
|
||
|
! $Revision$
|
||
|
|
||
|
#include "powerpc.h"
|
||
|
|
||
|
.sect .text
|
||
|
|
||
|
! Converts a 64-bit double into a 32-bit unsigned integer.
|
||
|
!
|
||
|
! Stack: ( double -- uint )
|
||
|
|
||
|
.define .cfu8
|
||
|
.cfu8:
|
||
|
la(r3, .fd_00000000)
|
||
|
lfd f0, 0(r3) ! f0 = 0.0
|
||
|
|
||
|
lfd f1, 0(sp) ! value to be converted
|
||
|
|
||
|
la(r3, .fd_FFFFFFFF)
|
||
|
lfd f3, 0(r3) ! f3 = 0xFFFFFFFF
|
||
|
|
||
|
la(r3, .fd_80000000)
|
||
|
lfd f4, 0(r3) ! f4 = 0x80000000
|
||
|
|
||
|
fsel f2, f1, f1, f0
|
||
|
fsub f5, f3, f1
|
||
|
fsel f2, f5, f2, f3
|
||
|
fsub f5, f2, f4
|
||
|
fcmpu cr0, f2, f4
|
||
|
fsel f2, f5, f5, f2
|
||
|
fctiwz f2, f2
|
||
|
|
||
|
stfd f2, 0(sp)
|
||
|
addi sp, sp, 4
|
||
|
|
||
|
bclr IFTRUE, LT, 0
|
||
|
|
||
|
lwz r3, 0(sp)
|
||
|
xoris r3, r3, 0x8000
|
||
|
stw r3, 0(sp)
|
||
|
|
||
|
bclr ALWAYS, 0, 0
|