Subject: pkg/34616: TME sun3 emulator incorrectly emulates FNEG M68K instruction
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <sigmfsk@aol.com>
List: pkgsrc-bugs
Date: 09/25/2006 21:20:01
>Number:         34616
>Category:       pkg
>Synopsis:       TME sun3 emulator incorrectly emulates FNEG M68K instruction
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 25 21:20:00 +0000 2006
>Originator:     Arthur Townsend
>Release:        3.0
>Organization:
>Environment:
3.0 for i386
>Description:
TME calcultes the FNEG of VAL by calculating (0 - VAL), which normally works, but fails when VAL is 0.0.  On a real Sun3, the FNEG of 0.0 is -0.0.  This can be seen by running the gcc-3.3.3 testsuite gcc.dg/mzero3.c.
>How-To-Repeat:
gcc mzero3.c
./a.out
>Fix:
change TME's method of calculating FNEG from (0 - VAL) to (-1.0 * VAL).

change ieee754-ops-auto.sh, line 252, from:
partial-neg | unknown-neg) op0=0 ; op_builtin='-'; op1=src0 ;;
to
partial-neg | unknown-neg) op0=-1.0 ; op_builtin='*'; op1=src ;;

then do a make/make install to rebuild ieee754-ops-auto.c