fix broken modf family functions

This commit is contained in:
Rich Felker 2012-03-19 06:22:54 -04:00
parent 1bf4dad327
commit be5b01f855
3 changed files with 66 additions and 27 deletions

View file

@ -1,15 +1,28 @@
.global modf .global modf
.type modf,@function .type modf,@function
modf: modf:
mov 12(%esp),%eax mov 12(%esp),%ecx
fldl 4(%esp) fldl 4(%esp)
fld1 fxam
fld %st(1) fnstsw %ax
1: fprem
fstsw %ax
sahf sahf
jp 1b jnp 1f
fstp %st(1) jc 2f
fsubr %st(1) 1: fld1
fstpl (%eax) fld %st(1)
1: fprem
fnstsw %ax
sahf
jp 1b
fstp %st(1)
fsubr %st(0),%st(1)
fxch %st(1)
fstpl (%ecx)
ret
2: fstpl (%ecx)
mov 4(%ecx),%eax
and $0x80000000,%eax
mov %eax,4(%esp)
flds 4(%esp)
ret ret

View file

@ -1,15 +1,28 @@
.global modff .global modff
.type modff,@function .type modff,@function
modff: modff:
mov 8(%esp),%eax mov 8(%esp),%ecx
flds 4(%esp) flds 4(%esp)
fld1 fxam
fld %st(1) fnstsw %ax
1: fprem
fstsw %ax
sahf sahf
jp 1b jnp 1f
fstp %st(1) jc 2f
fsubr %st(1) 1: fld1
fstps (%eax) fld %st(1)
1: fprem
fnstsw %ax
sahf
jp 1b
fstp %st(1)
fsubr %st(0),%st(1)
fxch %st(1)
fstps (%ecx)
ret
2: fstps (%ecx)
mov (%ecx),%eax
and $0x80000000,%eax
mov %eax,4(%esp)
flds 4(%esp)
ret ret

View file

@ -1,15 +1,28 @@
.global modfl .global modfl
.type modfl,@function .type modfl,@function
modfl: modfl:
mov 16(%esp),%eax mov 16(%esp),%ecx
fldt 4(%esp) fldt 4(%esp)
fld1 fxam
fld %st(1) fnstsw %ax
1: fprem
fstsw %ax
sahf sahf
jp 1b jnp 1f
fstp %st(1) jc 2f
fsubr %st(1) 1: fld1
fstpt (%eax) fld %st(1)
1: fprem
fnstsw %ax
sahf
jp 1b
fstp %st(1)
fsubr %st(0),%st(1)
fxch %st(1)
fstpt (%ecx)
ret
2: fstpt (%ecx)
mov 6(%ecx),%eax
and $0x80000000,%eax
mov %eax,4(%esp)
flds 4(%esp)
ret ret