From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18341 invoked by alias); 27 Mar 2007 15:53:42 -0000 Received: (qmail 18322 invoked by uid 22791); 27 Mar 2007 15:53:41 -0000 X-Spam-Check-By: sourceware.org Received: from e31.co.us.ibm.com (HELO e31.co.us.ibm.com) (32.97.110.149) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 27 Mar 2007 16:53:36 +0100 Received: from westrelay02.boulder.ibm.com (westrelay02.boulder.ibm.com [9.17.195.11]) by e31.co.us.ibm.com (8.13.8/8.13.8) with ESMTP id l2RFrYod029393 for ; Tue, 27 Mar 2007 11:53:34 -0400 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by westrelay02.boulder.ibm.com (8.13.8/8.13.8/NCO v8.3) with ESMTP id l2RFrYQK070402 for ; Tue, 27 Mar 2007 09:53:34 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l2RFrYdr010488 for ; Tue, 27 Mar 2007 09:53:34 -0600 Received: from [9.10.86.122] (spokane1.rchland.ibm.com [9.10.86.122]) by d03av02.boulder.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id l2RFrXN4010448; Tue, 27 Mar 2007 09:53:33 -0600 Message-ID: <460941B8.2050501@us.ibm.com> Date: Tue, 27 Mar 2007 15:53:00 -0000 From: Steven Munroe User-Agent: Mozilla/5.0 (X11; U; Linux ppc64; en-US; rv:1.8.0.9) Gecko/20060906 SUSE/1.8_seamonkey_1.0.7-1.1 SeaMonkey/1.0.7 MIME-Version: 1.0 To: Glibc hackers CC: Jakub Jelinek , Ulrich Drepper , Peter Eberlein Subject: [PATCH] PPC fenv fixes. References: <20070322145345.GZ1826@sunsite.mff.cuni.cz> <4602FCE5.7060203@us.ibm.com> In-Reply-To: <4602FCE5.7060203@us.ibm.com> Content-Type: multipart/mixed; boundary="------------080303060108030101030503" Mailing-List: contact libc-hacker-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sourceware.org X-SW-Source: 2007-03/txt/msg00039.txt.bz2 This is a multi-part message in MIME format. --------------080303060108030101030503 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 1949 Steven Munroe wrote: > Jakub Jelinek wrote: > >> Hi! >> >> feholdexcept is supposed to clear the sticky exception bits: >> "The feholdexcept function saves the current floating-point environment in the object >> pointed to by envp, clears the floating-point status flags, and then installs a non-stop >> (continue on floating-point exceptions) mode, if available, for all floating-point >> exceptions." >> and >> "A floating-point status flag is a system variable whose value is set >> (but never cleared) when a floating-point exception is raised, which occurs as a side effect >> of exceptional floating-point arithmetic to provide auxiliary information." >> >> Several feholdexcept implementations didn't handle this right. >> Also, e.g. feupdateenv was a stub on x86_64 eventhough it is IMHO easily >> implementable and other arches had bugs in it too (e.g. ia64 would rise >> wrong exceptions and always return a failure). >> I added a new testcase for feholdexcept/feupdateenv (hopefully I haven't >> misinterpreted the standard) and I believe other arches (ppc*, s390*, ...) >> will need some care too. >> >> > > powerpc32 and powerpc64 both show two failures with the new test-fenv: > > Test: feholdexcept_tests FE_DIVBYZERO|FE_INVALID test > Fail: Exception "DIVBYZERO" is not set > Pass: Exception "INVALID" is set > Pass: Exception "INEXACT" is not set > Pass: Exception "UNDERFLOW" is not set > Pass: Exception "OVERFLOW" is not set > > and > > Test: feholdexcept_tests FE_INEXACT|FE_INVALID test > Pass: Exception "DIVBYZERO" is not set > Fail: Exception "INVALID" is not set > Pass: Exception "INEXACT" is set > Pass: Exception "UNDERFLOW" is not set > Pass: Exception "OVERFLOW" is not set > > We will look into this. > feupdateenv was not merging pending and current exceptions correctly and caused 2 failures with the new feholdexcept tests. The attached patch fixes feupdateenv for ppc32/ppc64. --------------080303060108030101030503 Content-Type: text/plain; name="ppc-feupdateenv-20070327.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ppc-feupdateenv-20070327.txt" Content-length: 1283 2007-03-26 Steven Munroe * sysdeps/powerpc/fpu/feupdateenv.c: Change mask to merge exceptions from env. diff -urN libc25-cvstip-20070320/sysdeps/powerpc/fpu/feupdateenv.c libc25/sysdeps/powerpc/fpu/feupdateenv.c --- libc25-cvstip-20070320/sysdeps/powerpc/fpu/feupdateenv.c 2001-07-05 23:56:02.000000000 -0500 +++ libc25/sysdeps/powerpc/fpu/feupdateenv.c 2007-03-27 09:13:54.875363776 -0500 @@ -1,5 +1,5 @@ /* Install given floating-point environment and raise exceptions. - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. + Copyright (C) 1997,99,2000,01,07 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -30,8 +30,10 @@ new.fenv = *envp; old.fenv = fegetenv_register (); - /* Copy the set exceptions from `old' to `new'. */ - new.l[1] = (new.l[1] & 0xE00000FF) | (old.l[1] & 0x1FFFFF00); + /* Restore rounding mode and exception enable from *envp and merge + exceptions. Leave fraction rounded/inexact and FP result/CC bits + unchanged. */ + new.l[1] = (old.l[1] & 0x1FFFFF00) | (new.l[1] & 0x1FF80FFF); /* Atomically enable and raise (if appropriate) exceptions set in `new'. */ fesetenv_register (new.fenv); --------------080303060108030101030503--