[PATCHv3] ldbl-128ibm-compat: Add tests for IBM long double functions

Message ID 20200218220057.17930-1-murphyp@linux.vnet.ibm.com
State New
Headers show
Series
  • [PATCHv3] ldbl-128ibm-compat: Add tests for IBM long double functions
Related show

Commit Message

Paul E. Murphy Feb. 18, 2020, 10 p.m.
From: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>


Simplify this further.  As correctly pointed out by Joseph, compiler
_Float128 compiler flags should always be present where needed.  Thus,
I can greatly simplify this patch.  It had collected too much cruft from
my constant rebasing.

Likewise, defer the ppc64le makefile changes.  They really shouldn't be
here, and contained harmful rebasing noise.  They have been squashed
into later, more appropriate patches.

Similarly, the hack for gamma is removed.  `make regen-ulps` behaves
as expected and fills the missing entries correctly.  The ULP changes
will be included with the enablement patch.

Tested on x86-64 and ppc64le.

---8<---

This patch creates test-ibm128* tests from the long double function tests.
In order to explicitly test IBM long double functions -mabi=ibmlongdouble is
added to CFLAGS.

Likewise, update the test headers to correct choose ULPs when redirects
are enabled.

Co-Authored-By: Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>
Co-Authored-By: Paul E. Murphy  <murphyp@linux.vnet.ibm.com>
---
 math/Makefile                                 |  7 ++++++-
 math/test-ibm128.h                            | 19 +++++++++++++++++++
 math/test-ldouble.h                           |  7 +++++++
 sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig |  3 +++
 4 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 math/test-ibm128.h
 create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

-- 
2.21.1

Comments

Paul E Murphy Feb. 28, 2020, 3:33 p.m. | #1
Ping.

On 2/18/20 4:00 PM, Paul E. Murphy wrote:
> From: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>

> 

> Simplify this further.  As correctly pointed out by Joseph, compiler

> _Float128 compiler flags should always be present where needed.  Thus,

> I can greatly simplify this patch.  It had collected too much cruft from

> my constant rebasing.

> 

> Likewise, defer the ppc64le makefile changes.  They really shouldn't be

> here, and contained harmful rebasing noise.  They have been squashed

> into later, more appropriate patches.

> 

> Similarly, the hack for gamma is removed.  `make regen-ulps` behaves

> as expected and fills the missing entries correctly.  The ULP changes

> will be included with the enablement patch.

> 

> Tested on x86-64 and ppc64le.

> 

> ---8<---

> 

> This patch creates test-ibm128* tests from the long double function tests.

> In order to explicitly test IBM long double functions -mabi=ibmlongdouble is

> added to CFLAGS.

> 

> Likewise, update the test headers to correct choose ULPs when redirects

> are enabled.

> 

> Co-Authored-By: Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>

> Co-Authored-By: Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

> ---

>   math/Makefile                                 |  7 ++++++-

>   math/test-ibm128.h                            | 19 +++++++++++++++++++

>   math/test-ldouble.h                           |  7 +++++++

>   sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig |  3 +++

>   4 files changed, 35 insertions(+), 1 deletion(-)

>   create mode 100644 math/test-ibm128.h

>   create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

> 

> diff --git a/math/Makefile b/math/Makefile

> index 1d203e7ad5..84a8b94c74 100644

> --- a/math/Makefile

> +++ b/math/Makefile

> @@ -145,10 +145,15 @@ type-float128-yes := float128

>   # _Float64x may be supported, only as an alias type.

>   type-float64x-yes := float64x

> 

> +# IBM long double support in additional to IEEE 128 long double support

> +type-ibm128-suffix := l

> +type-ibm128-yes := ibm128

> +

>   types = $(types-basic) $(type-float128-$(float128-fcts))

>   test-types = $(test-types-basic) $(type-float128-$(float128-fcts)) \

>   	     float32 float64 $(type-float128-$(float128-alias-fcts)) \

> -	     float32x $(type-float64x-$(float64x-alias-fcts))

> +	     float32x $(type-float64x-$(float64x-alias-fcts)) \

> +	     $(type-ibm128-$(ibm128-fcts))

> 

>   # Pairs of types for which narrowing functions should be tested (this

>   # variable has more entries than libm-narrow-types because it includes

> diff --git a/math/test-ibm128.h b/math/test-ibm128.h

> new file mode 100644

> index 0000000000..fce6ef1376

> --- /dev/null

> +++ b/math/test-ibm128.h

> @@ -0,0 +1,19 @@

> +/* Common definitions for libm tests for ibm long double.

> +   Copyright (C) 2020 Free Software Foundation, Inc.

> +   This file is part of the GNU C Library.

> +

> +   The GNU C Library is free software; you can redistribute it and/or

> +   modify it under the terms of the GNU Lesser General Public

> +   License as published by the Free Software Foundation; either

> +   version 2.1 of the License, or (at your option) any later version.

> +

> +   The GNU C Library is distributed in the hope that it will be useful,

> +   but WITHOUT ANY WARRANTY; without even the implied warranty of

> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

> +   Lesser General Public License for more details.

> +

> +   You should have received a copy of the GNU Lesser General Public

> +   License along with the GNU C Library; if not, see

> +   <http://www.gnu.org/licenses/>.  */

> +

> +#include "test-ldouble.h"

> diff --git a/math/test-ldouble.h b/math/test-ldouble.h

> index 17c526bd71..5b72915008 100644

> --- a/math/test-ldouble.h

> +++ b/math/test-ldouble.h

> @@ -27,6 +27,13 @@

>   # define TYPE_STR "double"

>   # define ULP_IDX ULP_DBL

>   # define ULP_I_IDX ULP_I_DBL

> +/* On architectures which redirect long double to _Float128 ABI, we must

> +   choose the float128 ulps.  Similarly, on such architectures, the ABI

> +   used may be dependent on how the compiler was invoked.  */

> +#elif __LONG_DOUBLE_USES_FLOAT128 == 1

> +# define TYPE_STR "float128"

> +# define ULP_IDX ULP_FLT128

> +# define ULP_I_IDX ULP_I_FLT128

>   #else

>   # define TYPE_STR "ldouble"

>   # define ULP_IDX ULP_LDBL

> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

> new file mode 100644

> index 0000000000..997f632319

> --- /dev/null

> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

> @@ -0,0 +1,3 @@

> +# Include this earlier so it can be used earlier in Makefiles,

> +# and sysdep/ makefiles.

> +ibm128-fcts = yes

>
Paul E Murphy March 3, 2020, 8:17 p.m. | #2
I will commit this friday if there are no more requests for improvement.

On 2/28/20 9:33 AM, Paul E Murphy wrote:
> Ping.

> 

> On 2/18/20 4:00 PM, Paul E. Murphy wrote:

>> From: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>

>>

>> Simplify this further.  As correctly pointed out by Joseph, compiler

>> _Float128 compiler flags should always be present where needed.  Thus,

>> I can greatly simplify this patch.  It had collected too much cruft from

>> my constant rebasing.

>>

>> Likewise, defer the ppc64le makefile changes.  They really shouldn't be

>> here, and contained harmful rebasing noise.  They have been squashed

>> into later, more appropriate patches.

>>

>> Similarly, the hack for gamma is removed.  `make regen-ulps` behaves

>> as expected and fills the missing entries correctly.  The ULP changes

>> will be included with the enablement patch.

>>

>> Tested on x86-64 and ppc64le.

>>

>> ---8<---

>>

>> This patch creates test-ibm128* tests from the long double function 

>> tests.

>> In order to explicitly test IBM long double functions 

>> -mabi=ibmlongdouble is

>> added to CFLAGS.

>>

>> Likewise, update the test headers to correct choose ULPs when redirects

>> are enabled.

>>

>> Co-Authored-By: Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>

>> Co-Authored-By: Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

>> ---

>>   math/Makefile                                 |  7 ++++++-

>>   math/test-ibm128.h                            | 19 +++++++++++++++++++

>>   math/test-ldouble.h                           |  7 +++++++

>>   sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig |  3 +++

>>   4 files changed, 35 insertions(+), 1 deletion(-)

>>   create mode 100644 math/test-ibm128.h

>>   create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

>>

>> diff --git a/math/Makefile b/math/Makefile

>> index 1d203e7ad5..84a8b94c74 100644

>> --- a/math/Makefile

>> +++ b/math/Makefile

>> @@ -145,10 +145,15 @@ type-float128-yes := float128

>>   # _Float64x may be supported, only as an alias type.

>>   type-float64x-yes := float64x

>>

>> +# IBM long double support in additional to IEEE 128 long double support

>> +type-ibm128-suffix := l

>> +type-ibm128-yes := ibm128

>> +

>>   types = $(types-basic) $(type-float128-$(float128-fcts))

>>   test-types = $(test-types-basic) $(type-float128-$(float128-fcts)) \

>>            float32 float64 $(type-float128-$(float128-alias-fcts)) \

>> -         float32x $(type-float64x-$(float64x-alias-fcts))

>> +         float32x $(type-float64x-$(float64x-alias-fcts)) \

>> +         $(type-ibm128-$(ibm128-fcts))

>>

>>   # Pairs of types for which narrowing functions should be tested (this

>>   # variable has more entries than libm-narrow-types because it includes

>> diff --git a/math/test-ibm128.h b/math/test-ibm128.h

>> new file mode 100644

>> index 0000000000..fce6ef1376

>> --- /dev/null

>> +++ b/math/test-ibm128.h

>> @@ -0,0 +1,19 @@

>> +/* Common definitions for libm tests for ibm long double.

>> +   Copyright (C) 2020 Free Software Foundation, Inc.

>> +   This file is part of the GNU C Library.

>> +

>> +   The GNU C Library is free software; you can redistribute it and/or

>> +   modify it under the terms of the GNU Lesser General Public

>> +   License as published by the Free Software Foundation; either

>> +   version 2.1 of the License, or (at your option) any later version.

>> +

>> +   The GNU C Library is distributed in the hope that it will be useful,

>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of

>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

>> +   Lesser General Public License for more details.

>> +

>> +   You should have received a copy of the GNU Lesser General Public

>> +   License along with the GNU C Library; if not, see

>> +   <http://www.gnu.org/licenses/>.  */

>> +

>> +#include "test-ldouble.h"

>> diff --git a/math/test-ldouble.h b/math/test-ldouble.h

>> index 17c526bd71..5b72915008 100644

>> --- a/math/test-ldouble.h

>> +++ b/math/test-ldouble.h

>> @@ -27,6 +27,13 @@

>>   # define TYPE_STR "double"

>>   # define ULP_IDX ULP_DBL

>>   # define ULP_I_IDX ULP_I_DBL

>> +/* On architectures which redirect long double to _Float128 ABI, we must

>> +   choose the float128 ulps.  Similarly, on such architectures, the ABI

>> +   used may be dependent on how the compiler was invoked.  */

>> +#elif __LONG_DOUBLE_USES_FLOAT128 == 1

>> +# define TYPE_STR "float128"

>> +# define ULP_IDX ULP_FLT128

>> +# define ULP_I_IDX ULP_I_FLT128

>>   #else

>>   # define TYPE_STR "ldouble"

>>   # define ULP_IDX ULP_LDBL

>> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig 

>> b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

>> new file mode 100644

>> index 0000000000..997f632319

>> --- /dev/null

>> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig

>> @@ -0,0 +1,3 @@

>> +# Include this earlier so it can be used earlier in Makefiles,

>> +# and sysdep/ makefiles.

>> +ibm128-fcts = yes

>>
Paul E Murphy March 6, 2020, 7:37 p.m. | #3
And committed.

On 3/3/20 2:17 PM, Paul E Murphy wrote:
> I will commit this friday if there are no more requests for improvement.

> 

> On 2/28/20 9:33 AM, Paul E Murphy wrote:

>> Ping.

>>

>> On 2/18/20 4:00 PM, Paul E. Murphy wrote:

>>> From: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>

>>>

>>> Simplify this further.  As correctly pointed out by Joseph, compiler

>>> _Float128 compiler flags should always be present where needed.  Thus,

>>> I can greatly simplify this patch.  It had collected too much cruft from

>>> my constant rebasing.

>>>

>>> Likewise, defer the ppc64le makefile changes.  They really shouldn't be

>>> here, and contained harmful rebasing noise.  They have been squashed

>>> into later, more appropriate patches.

>>>

>>> Similarly, the hack for gamma is removed.  `make regen-ulps` behaves

>>> as expected and fills the missing entries correctly.  The ULP changes

>>> will be included with the enablement patch.

>>>

>>> Tested on x86-64 and ppc64le.

>>>

>>> ---8<---

>>>

>>> This patch creates test-ibm128* tests from the long double function 

>>> tests.

>>> In order to explicitly test IBM long double functions 

>>> -mabi=ibmlongdouble is

>>> added to CFLAGS.

>>>

>>> Likewise, update the test headers to correct choose ULPs when redirects

>>> are enabled.

>>>

>>> Co-Authored-By: Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>

>>> Co-Authored-By: Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

Patch

diff --git a/math/Makefile b/math/Makefile
index 1d203e7ad5..84a8b94c74 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -145,10 +145,15 @@  type-float128-yes := float128
 # _Float64x may be supported, only as an alias type.
 type-float64x-yes := float64x
 
+# IBM long double support in additional to IEEE 128 long double support
+type-ibm128-suffix := l
+type-ibm128-yes := ibm128
+
 types = $(types-basic) $(type-float128-$(float128-fcts))
 test-types = $(test-types-basic) $(type-float128-$(float128-fcts)) \
 	     float32 float64 $(type-float128-$(float128-alias-fcts)) \
-	     float32x $(type-float64x-$(float64x-alias-fcts))
+	     float32x $(type-float64x-$(float64x-alias-fcts)) \
+	     $(type-ibm128-$(ibm128-fcts))
 
 # Pairs of types for which narrowing functions should be tested (this
 # variable has more entries than libm-narrow-types because it includes
diff --git a/math/test-ibm128.h b/math/test-ibm128.h
new file mode 100644
index 0000000000..fce6ef1376
--- /dev/null
+++ b/math/test-ibm128.h
@@ -0,0 +1,19 @@ 
+/* Common definitions for libm tests for ibm long double.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "test-ldouble.h"
diff --git a/math/test-ldouble.h b/math/test-ldouble.h
index 17c526bd71..5b72915008 100644
--- a/math/test-ldouble.h
+++ b/math/test-ldouble.h
@@ -27,6 +27,13 @@ 
 # define TYPE_STR "double"
 # define ULP_IDX ULP_DBL
 # define ULP_I_IDX ULP_I_DBL
+/* On architectures which redirect long double to _Float128 ABI, we must
+   choose the float128 ulps.  Similarly, on such architectures, the ABI
+   used may be dependent on how the compiler was invoked.  */
+#elif __LONG_DOUBLE_USES_FLOAT128 == 1
+# define TYPE_STR "float128"
+# define ULP_IDX ULP_FLT128
+# define ULP_I_IDX ULP_I_FLT128
 #else
 # define TYPE_STR "ldouble"
 # define ULP_IDX ULP_LDBL
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig
new file mode 100644
index 0000000000..997f632319
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makeconfig
@@ -0,0 +1,3 @@ 
+# Include this earlier so it can be used earlier in Makefiles,
+# and sysdep/ makefiles.
+ibm128-fcts = yes