1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #
- ! $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
|