Patchwork powerpc: Fix llround spurious inexact on 32-bit POWER4 [BZ #22697]

login
register
mail settings
Submitter Tulio Magno Quites Machado Filho
Date Jan. 10, 2018, 10:50 p.m.
Message ID <20180110225040.23576-1-tuliom@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/25334/
State Accepted
Headers show

Comments

Tulio Magno Quites Machado Filho - Jan. 10, 2018, 10:50 p.m.
This issue is similar to BZ #19235, where spurious exceptions are
created from adding 0.5 then converting to an integer.
The solution is based on Joseph's fix for BZ #19235.

2018-01-10  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>

	[BZ #22697]
	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S (__llround):
	Do not add 0.5 to integer or out-of-range arguments.
---
 sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S | 5 +++++
 1 file changed, 5 insertions(+)
Rajalakshmi S - Jan. 11, 2018, 3:33 p.m.
On 01/11/2018 04:20 AM, Tulio Magno Quites Machado Filho wrote:
> This issue is similar to BZ #19235, where spurious exceptions are
> created from adding 0.5 then converting to an integer.
> The solution is based on Joseph's fix for BZ #19235.
> 
> 2018-01-10  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
> 
> 	[BZ #22697]
> 	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S (__llround):
> 	Do not add 0.5 to integer or out-of-range arguments.


LGTM

>
Tulio Magno Quites Machado Filho - Jan. 12, 2018, 10:41 p.m.
Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> writes:

> On 01/11/2018 04:20 AM, Tulio Magno Quites Machado Filho wrote:
>> This issue is similar to BZ #19235, where spurious exceptions are
>> created from adding 0.5 then converting to an integer.
>> The solution is based on Joseph's fix for BZ #19235.
>> 
>> 2018-01-10  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
>> 
>> 	[BZ #22697]
>> 	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S (__llround):
>> 	Do not add 0.5 to integer or out-of-range arguments.
>
>
> LGTM

Pushed as af1e6be4ba60.

Thanks!

Patch

diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
index d0b00ac..5ad89a1 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
@@ -71,6 +71,11 @@  ENTRY (__llround)
 	fcmpu	cr1,fp1,fp12	/* x is negative? x < 0.0  */
 	blt-	cr6,.Lretzero	/* 0.5 > x < -0.5 so just return 0.  */
 	bge-	cr7,.Lnobias	/* 2^52 > x < -2^52 just convert with no bias.  */
+	/* Test whether an integer to avoid spurious "inexact".  */
+	fadd	fp3,fp2,fp9
+	fsub	fp3,fp3,fp9
+	fcmpu	cr5,fp2,fp3
+	beq	cr5,.Lnobias
 	fadd	fp3,fp2,fp10	/* |x|+=0.5 bias to prepare to round.  */
 	bge	cr1,.Lconvert	/* x is positive so don't negate x.  */
 	fnabs	fp3,fp3		/* -(|x|+=0.5)  */