37 lines
704 B
ArmAsm
37 lines
704 B
ArmAsm
|
! fpu_rndint() - round integer Author: Erik van der Kouwe
|
||
|
! 17 Dec 2009
|
||
|
.sect .text
|
||
|
.define _fpu_rndint
|
||
|
.define _fpu_remainder
|
||
|
|
||
|
! void fpu_rndint(double *value)
|
||
|
_fpu_rndint:
|
||
|
! move the value onto the floating point stack
|
||
|
mov eax, 4(esp)
|
||
|
fldd (eax)
|
||
|
|
||
|
! round it (beware of precision exception!)
|
||
|
frndint
|
||
|
|
||
|
! store the result
|
||
|
fstpd (eax)
|
||
|
ret
|
||
|
|
||
|
! void fpu_remainder(double *x, double y)
|
||
|
_fpu_remainder:
|
||
|
! move the values onto the floating point stack
|
||
|
fldd 8(esp)
|
||
|
mov edx, 4(esp)
|
||
|
fldd (edx)
|
||
|
|
||
|
! compute remainder, multiple iterations may be needed
|
||
|
1: fprem1
|
||
|
.data1 0xdf, 0xe0 ! fnstsw ax
|
||
|
sahf
|
||
|
jp 1b
|
||
|
|
||
|
! store the result and pop the divisor
|
||
|
fstpd (edx)
|
||
|
fstp st
|
||
|
ret
|