Mail Archives: djgpp-workers/2003/09/30/10:19:41
--part1_1a5.19d80d7e.2caaeac4_boundary
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
In a message dated 9/29/2003 2:14:47 PM Eastern Standard Time,
peuha AT cc DOT helsinki DOT fi writes:
> >modf(+-x, iptr) returns a result with the same sign as x.
> >modf(+-Inf , iptr) returns +-0 and stores +-Inf in the object pointed to by
> >iptr.
> >modf(NaN, iptr) stores a NaN in the object pointed to by iptr (and returns
> a
> >NaN).
> [snip]
> >My interpretation is that the result returned for +-Inf should have the
> same
> >sign, i.e.: +0 for +Inf, -0 for -Inf.
>
> My previous patch would also return +0 for negative finite integers and
> NaNs. This should do better (but it's completely untested):
>
> Index: modfl.S
> ===================================================================
> RCS file: /cvs/djgpp/djgpp/src/libc/ansi/math/modfl.S,v
> retrieving revision 1.1
> diff -c -r1.1 modfl.S
> *** modfl.S 25 Nov 1994 19:59:40 -0000 1.1
> --- modfl.S 29 Sep 2003 10:08:25 -0000
> ***************
> *** 17,22 ****
> --- 17,40 ----
> fldcw -2(%ebp)
> fld %st(0)
> fstpt (%eax)
> + fucom %st(1)
> + fnstsw -2(%ebp)
> + movw -2(%ebp),%dx
> + andb $0x44,%dh
> + xorb $0x40,%dh
> + jnz 0f
> + fxam
> + fnstsw -2(%ebp)
> + fstp %st(0)
> + fstp %st(0)
> + fldz
> + movw -2(%ebp),%dx
> + andb $0x02,%dh
> + jz 1f
> + fchs
> + jmp 1f
> + 0:
> fsubrp %st,%st(1)
> + 1:
> leave
> ret
>
>
Here is the code as patched. It causes a SIGSEGV signal and General
Protection Fault when executed.
KB Williams
--part1_1a5.19d80d7e.2caaeac4_boundary
Content-Type: text/html; charset="US-ASCII"
Content-Transfer-Encoding: quoted-printable
<HTML><FONT FACE=3Darial,helvetica><FONT SIZE=3D3 FAMILY=3D"SERIF" FACE=3D"=
Georgia" LANG=3D"0">In a message dated 9/29/2003 2:14:47 PM Eastern Standard=
Time, peuha AT cc DOT helsinki DOT fi writes:<BR>
<BR>
<BLOCKQUOTE TYPE=3DCITE style=3D"BORDER-LEFT: #0000ff 2px solid; MARGIN-LEFT=
: 5px; MARGIN-RIGHT: 0px; PADDING-LEFT: 5px"></FONT><FONT COLOR=3D"#000000"=
style=3D"BACKGROUND-COLOR: #ffffff" SIZE=3D2 FAMILY=3D"SANSSERIF" FACE=3D"A=
rial" LANG=3D"0">>modf(+-x, iptr) returns a result with the same sign as=20=
x.<BR>
>modf(+-Inf , iptr) returns +-0 and stores +-Inf in the object pointed to=
by<BR>
>iptr.<BR>
>modf(NaN, iptr) stores a NaN in the object pointed to by iptr (and retur=
ns a<BR>
>NaN).<BR>
[snip]<BR>
>My interpretation is that the result returned for +-Inf should have the=20=
same<BR>
>sign, i.e.: +0 for +Inf, -0 for -Inf.<BR>
<BR>
My previous patch would also return +0 for negative finite integers and<BR>
NaNs. This should do better (but it's completely untested):<BR>
<BR>
Index: modfl.S<BR>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<BR>
RCS file: /cvs/djgpp/djgpp/src/libc/ansi/math/modfl.S,v<BR>
retrieving revision 1.1<BR>
diff -c -r1.1 modfl.S<BR>
*** modfl.S 25 Nov 1994 19:59:40 -0000 1.1<BR>
--- modfl.S 29 Sep 2003 10:08:25 -0000<BR>
***************<BR>
*** 17,22 ****<BR>
--- 17,40 ----<BR>
fldcw -2(%ebp)<BR>
fld %st(0)<BR>
fstpt (%eax)<BR>
+ fucom %st(1)<BR>
+ fnstsw -2(%ebp)<BR>
+ movw -2(%ebp),%dx<BR>
+ andb $0x44,%dh<BR>
+ xorb $0x40,%dh<BR>
+ jnz 0f<BR>
+ fxam<BR>
+ fnstsw -2(%ebp)<BR>
+ fstp %st(0)<BR>
+ fstp %st(0)<BR>
+ fldz<BR>
+ movw -2(%ebp),%dx<BR>
+ andb $0x02,%dh<BR>
+ jz 1f<BR>
+ fchs<BR>
+ jmp 1f<BR>
+ 0:<BR>
fsubrp %st,%st(1)<BR>
+ 1:<BR>
leave<BR>
ret<BR>
<BR>
</BLOCKQUOTE><BR>
</FONT><FONT COLOR=3D"#000000" style=3D"BACKGROUND-COLOR: #ffffff" SIZE=3D3=
FAMILY=3D"SERIF" FACE=3D"Georgia" LANG=3D"0"><BR>
Here is the code as patched. It causes a SIGSEGV signal and General Pr=
otection Fault when executed.<BR>
<BR>
<BR>
KB Williams</FONT></HTML>
--part1_1a5.19d80d7e.2caaeac4_boundary--
- Raw text -