Patchwork softfloat: export float32_nan and float32_infinity.

login
register
mail settings
Submitter Christophe LYON
Date Feb. 14, 2011, 4:47 p.m.
Message ID <4D595CB8.4020901@st.com>
Download mbox | patch
Permalink /patch/83137/
State New
Headers show

Comments

Christophe LYON - Feb. 14, 2011, 4:47 p.m.
These two special values are needed to implement some helper functions, which return these values in some cases.

Signed-off-by: Christophe Lyon <christophe.lyon@st.com>
---
 fpu/softfloat-specialize.h |    9 +++++++++
 fpu/softfloat.h            |    2 ++
 2 files changed, 11 insertions(+), 0 deletions(-)
Peter Maydell - Feb. 16, 2011, 11:53 a.m.
On 14 February 2011 16:47, Christophe Lyon <christophe.lyon@st.com> wrote:
>
> These two special values are needed to implement some helper functions, which return these values in some cases.

I assume this is for vrecpe, right? I think it would be better
to post this as part of that patchset; it's easier to see the
rationale for adding the functions when you also have the
code that's using them.

>  /*----------------------------------------------------------------------------
> +| Returns the default NaN.
> +*----------------------------------------------------------------------------*/
> +
> +float32 float32_nan(void)
> +{
> +    return float32_default_nan;
> +}

Maybe we should just expose float32_default_nan in
softfloat.h somehow; that would match float32_zero,
float32_one, etc (ie it would not be a function).

> +#define float32_infinity make_float32(0x7f800000)

No objection to this one.

-- PMM
Christophe LYON - Feb. 16, 2011, 1:02 p.m.
On 16.02.2011 12:53, Peter Maydell wrote:
> On 14 February 2011 16:47, Christophe Lyon <christophe.lyon@st.com> wrote:
>>
>> These two special values are needed to implement some helper functions, which return these values in some cases.
> 
> I assume this is for vrecpe, right? I think it would be better
> to post this as part of that patchset; it's easier to see the
> rationale for adding the functions when you also have the
> code that's using them.

Indeed. I'll post the bigger patch.

>>  /*----------------------------------------------------------------------------
>> +| Returns the default NaN.
>> +*----------------------------------------------------------------------------*/
>> +
>> +float32 float32_nan(void)
>> +{
>> +    return float32_default_nan;
>> +}
> 
> Maybe we should just expose float32_default_nan in
> softfloat.h somehow; that would match float32_zero,
> float32_one, etc (ie it would not be a function).
> 
It was my initial intention, but it implies adding a #if defined(TARGET_XXX) block in softfloat.h, and I feared this was not desirable.

Thanks.

Patch

diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index 2d025bf..d5d8c63 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -201,6 +201,15 @@  int float32_is_signaling_nan( float32 a_ )
 }
 
 /*----------------------------------------------------------------------------
+| Returns the default NaN.
+*----------------------------------------------------------------------------*/
+
+float32 float32_nan(void)
+{
+    return float32_default_nan;
+}
+
+/*----------------------------------------------------------------------------
 | Returns a quiet NaN if the single-precision floating point value `a' is a
 | signaling NaN; otherwise returns `a'.
 *----------------------------------------------------------------------------*/
diff --git a/fpu/softfloat.h b/fpu/softfloat.h
index e57ee1e..610f245 100644
--- a/fpu/softfloat.h
+++ b/fpu/softfloat.h
@@ -319,6 +319,7 @@  int float32_compare_quiet( float32, float32 STATUS_PARAM );
 int float32_is_quiet_nan( float32 );
 int float32_is_signaling_nan( float32 );
 float32 float32_maybe_silence_nan( float32 );
+float32 float32_nan(void);
 float32 float32_scalbn( float32, int STATUS_PARAM );
 
 INLINE float32 float32_abs(float32 a)
@@ -365,6 +366,7 @@  INLINE int float32_is_zero_or_denormal(float32 a)
 #define float32_zero make_float32(0)
 #define float32_one make_float32(0x3f800000)
 #define float32_ln2 make_float32(0x3f317218)
+#define float32_infinity make_float32(0x7f800000)
 
 /*----------------------------------------------------------------------------
 | Software IEC/IEEE double-precision conversion routines.