38 lines
722 B
ArmAsm
38 lines
722 B
ArmAsm
|
#
|
||
|
! $Source$
|
||
|
! $State$
|
||
|
! $Revision$
|
||
|
|
||
|
#include "powerpc.h"
|
||
|
|
||
|
.sect .text
|
||
|
|
||
|
! Converts a 32-bit integer into a 64-bit double.
|
||
|
!
|
||
|
! Stack: ( int -- double )
|
||
|
|
||
|
.define .cif8
|
||
|
.cif8:
|
||
|
addi sp, sp, -4 ! make space for the double
|
||
|
|
||
|
lwz r3, 4(sp)
|
||
|
xoris r3, r3, 0x8000
|
||
|
stw r3, 4(sp) ! flip sign of integer value
|
||
|
|
||
|
addis r3, r0, 0x4330
|
||
|
stw r3, 0(sp) ! set high word to construct a double
|
||
|
|
||
|
lfd f0, 0(sp) ! load value
|
||
|
|
||
|
la (r3, pivot)
|
||
|
lfd f1, 0(r3) ! load pivot value
|
||
|
fsub f0, f0, f1 ! adjust
|
||
|
|
||
|
stfd f0, 0(sp) ! save value again...
|
||
|
bclr ALWAYS, 0, 0 ! ...and return
|
||
|
|
||
|
.sect .rom
|
||
|
pivot:
|
||
|
.data4 0x43300000
|
||
|
.data4 0x80000000
|