Skip to content

Commit

Permalink
Use C11 CMPLX* macros in libm tests.
Browse files Browse the repository at this point in the history
libm-test.inc has a macro BUILD_COMPLEX to construct a complex number
with given real and imaginary parts while allowing properly for signed
zeroes, infinities and NaNs (which don't work properly with a simple
real + I * imag, in the absence of compiler support for imaginary
types), using assignment to __real__ and __imag__ parts of the number.
C11 defines CMPLX* macros for this purpose, which GCC 4.7 and above
provide suitable built-in functions for.  This patch redefines
BUILD_COMPLEX in terms of the standard macros.

Tested for x86_64 and x86.

	* math/libm-test.inc (BUILD_COMPLEX): Remove macro.
	* math/test-double.h (BUILD_COMPLEX): New macro.
	* math/test-float.h (BUILD_COMPLEX): Likewise.
	* math/test-ldouble.h (BUILD_COMPLEX): Likewise.
  • Loading branch information
Joseph Myers committed Oct 28, 2015
1 parent 1f4dafa commit 5878dd9
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 6 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
2015-10-28 Joseph Myers <joseph@codesourcery.com>

* math/libm-test.inc (BUILD_COMPLEX): Remove macro.
* math/test-double.h (BUILD_COMPLEX): New macro.
* math/test-float.h (BUILD_COMPLEX): Likewise.
* math/test-ldouble.h (BUILD_COMPLEX): Likewise.

* math/libm-test.inc (min_subnorm_value): Use LDBL_TRUE_MIN,
DBL_TRUE_MIN and FLT_TRUE_MIN instead of __LDBL_DENORM_MIN__,
__DBL_DENORM_MIN__ and __FLT_DENORM_MIN__.
Expand Down
6 changes: 0 additions & 6 deletions math/libm-test.inc
Original file line number Diff line number Diff line change
Expand Up @@ -328,12 +328,6 @@ static FLOAT prev_max_error, prev_real_max_error, prev_imag_max_error;

static FLOAT max_valid_error;

#define BUILD_COMPLEX(real, imag) \
({ __complex__ FLOAT __retval; \
__real__ __retval = (real); \
__imag__ __retval = (imag); \
__retval; })

#define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
(LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
#define MIN_EXP CHOOSE ((LDBL_MIN_EXP-1), (DBL_MIN_EXP-1), (FLT_MIN_EXP-1), \
Expand Down
1 change: 1 addition & 0 deletions math/test-double.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@
#define PRINTF_XEXPR "a"
#define PRINTF_NEXPR "f"
#define TEST_DOUBLE 1
#define BUILD_COMPLEX(real, imag) (CMPLX ((real), (imag)))
1 change: 1 addition & 0 deletions math/test-float.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@
#define PRINTF_XEXPR "a"
#define PRINTF_NEXPR "f"
#define TEST_FLOAT 1
#define BUILD_COMPLEX(real, imag) (CMPLXF ((real), (imag)))
1 change: 1 addition & 0 deletions math/test-ldouble.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@
#define PRINTF_XEXPR "La"
#define PRINTF_NEXPR "Lf"
#define TEST_LDOUBLE 1
#define BUILD_COMPLEX(real, imag) (CMPLXL ((real), (imag)))

0 comments on commit 5878dd9

Please sign in to comment.