diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-24 23:27:18 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-24 23:27:18 +0000 |
commit | f9536db79065ad00efd877b4d80a1dd06938bd0a (patch) | |
tree | 891cf31b2b8c4c8ebc5a7de2d618ec3e1369f57c | |
parent | 5ba4a6eb9f938872bffb6fc2f2a49437fa943135 (diff) | |
download | glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.gz glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.xz glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.zip |
Refactor libm tests.
This patch refactors the libm tests using libm-test.inc to reduce the level of duplicate definitions. New headers are created for the definitions shared by tests for a particular type; by tests of inline functions; by tests of non-inline functions; by scalar tests; and by vector tests. The unused MATHCONST macro is removed. A new macro VEC_LEN is added to the vector headers to allow the macros defining wrappers for vector functions to be defined once, instead of six times each (differing only in vector length) as before. There is still scope for further refactoring, but this seems a useful start. Tested for x86_64. * math/test-double.h: New file. * math/test-float.h: Likewise. * math/test-ldouble.h: Likewise. * math/test-math-inline.h: Likewise. * math/test-math-no-inline.h: Likewise. * math/test-math-scalar.h: Likewise. * math/test-math-vector.h: Likewise. * math/test-vec-loop.h: Remove file. Contents moved into test-math-vector.h. * math/libm-test.inc (MATHCONST): Do not document macro. * math/test-double.c: Include test-double.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-float.c: Include test-float.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-idouble.c: Include test-double.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ifloat.c: Include test-float.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ildoubl.c: Include test-ldouble.h, test-math-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_LDOUBLE): Likewise. (TEST_MATHVEC): Likewise. (TEST_INLINE): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-ldouble.c: Include test-ldouble.h, test-math-no-inline.h and test-math-scalar.h. (FUNC): Remove macro. (FUNC_TEST): Likewise. (FLOAT): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_LDOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. * math/test-double-vlen2.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-double-vlen4.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-double-vlen8.h: Include test-double.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_DOUBLE): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen4.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen8.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * math/test-float-vlen16.h: Include test-float.h, test-math-no-inline.h and test-math-vector.h. (FLOAT): Remove macro. (FUNC): Likewise. (MATHCONST): Likewise. (PRINTF_EXPR): Likewise. (PRINTF_XEXPR): Likewise. (PRINTF_NEXPR): Likewise. (TEST_FLOAT): Likewise. (TEST_MATHVEC): Likewise. (__NO_MATH_INLINES): Likewise. (CNCT): Likewise. (CONCAT): Likewise. (WRAPPER_NAME): Likewise. (WRAPPER_DECL): Likewise. (WRAPPER_DECL_ff): Likewise. (WRAPPER_DECL_fFF): Likewise. (VECTOR_WRAPPER): Likewise. (VECTOR_WRAPPER_ff): Likewise. (VECTOR_WRAPPER_fFF): Likewise. (VEC_LEN): New macro. * sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Do not include test-vec-loop.h. * sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: Likewise.
29 files changed, 492 insertions, 493 deletions
diff --git a/ChangeLog b/ChangeLog index 333b69048c..97fbe48627 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,226 @@ +2015-06-24 Joseph Myers <joseph@codesourcery.com> + + * math/test-double.h: New file. + * math/test-float.h: Likewise. + * math/test-ldouble.h: Likewise. + * math/test-math-inline.h: Likewise. + * math/test-math-no-inline.h: Likewise. + * math/test-math-scalar.h: Likewise. + * math/test-math-vector.h: Likewise. + * math/test-vec-loop.h: Remove file. Contents moved into + test-math-vector.h. + * math/libm-test.inc (MATHCONST): Do not document macro. + * math/test-double.c: Include test-double.h, test-math-no-inline.h + and test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_DOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-float.c: Include test-float.h, test-math-no-inline.h + and test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_FLOAT): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-idouble.c: Include test-double.h, test-math-inline.h + and test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_DOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (TEST_INLINE): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-ifloat.c: Include test-float.h, test-math-inline.h and + test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_FLOAT): Likewise. + (TEST_MATHVEC): Likewise. + (TEST_INLINE): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-ildoubl.c: Include test-ldouble.h, test-math-inline.h + and test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_LDOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (TEST_INLINE): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-ldouble.c: Include test-ldouble.h, + test-math-no-inline.h and test-math-scalar.h. + (FUNC): Remove macro. + (FUNC_TEST): Likewise. + (FLOAT): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_LDOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + * math/test-double-vlen2.h: Include test-double.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_DOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * math/test-double-vlen4.h: Include test-double.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_DOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * math/test-double-vlen8.h: Include test-double.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_DOUBLE): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * math/test-float-vlen4.h: Include test-float.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_FLOAT): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * math/test-float-vlen8.h: Include test-float.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_FLOAT): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * math/test-float-vlen16.h: Include test-float.h, + test-math-no-inline.h and test-math-vector.h. + (FLOAT): Remove macro. + (FUNC): Likewise. + (MATHCONST): Likewise. + (PRINTF_EXPR): Likewise. + (PRINTF_XEXPR): Likewise. + (PRINTF_NEXPR): Likewise. + (TEST_FLOAT): Likewise. + (TEST_MATHVEC): Likewise. + (__NO_MATH_INLINES): Likewise. + (CNCT): Likewise. + (CONCAT): Likewise. + (WRAPPER_NAME): Likewise. + (WRAPPER_DECL): Likewise. + (WRAPPER_DECL_ff): Likewise. + (WRAPPER_DECL_fFF): Likewise. + (VECTOR_WRAPPER): Likewise. + (VECTOR_WRAPPER_ff): Likewise. + (VECTOR_WRAPPER_fFF): Likewise. + (VEC_LEN): New macro. + * sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Do not include + test-vec-loop.h. + * sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: Likewise. + * sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: Likewise. + 2015-06-24 Roland McGrath <roland@hack.frob.com> * sysdeps/nacl/glob.c (getlogin_r): Macro renamed to ... diff --git a/math/libm-test.inc b/math/libm-test.inc index 49871618f0..da8f8caec4 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -24,7 +24,6 @@ Macros: FUNC(function): converts general function name (like cos) to name with correct suffix (e.g. cosl or cosf) - MATHCONST(x): like FUNC but for constants (e.g convert 0.0 to 0.0L) FLOAT: floating point type to test - TEST_MSG: informal message to be displayed CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat): diff --git a/math/test-double-vlen2.h b/math/test-double-vlen2.h index 3f117e510f..47d1fddc57 100644 --- a/math/test-double-vlen2.h +++ b/math/test-double-vlen2.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT double -#define FUNC(function) function +#include "test-double.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing double vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen2 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 2 #define FUNC_TEST(function) function ## _VEC_SUFF - -#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); -#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 2. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 2); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 2); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 2); \ - INIT_VEC_LOOP (my, y, 2); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 2); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 2); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 2); \ - TEST_VEC_LOOP (mr1, 2); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-double-vlen4.h b/math/test-double-vlen4.h index ffaba6916e..59a374c0ae 100644 --- a/math/test-double-vlen4.h +++ b/math/test-double-vlen4.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT double -#define FUNC(function) function +#include "test-double.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing double vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen4 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 4 #define FUNC_TEST(function) function ## _VEC_SUFF - -#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); -#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 4. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 4); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 4); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 4); \ - INIT_VEC_LOOP (my, y, 4); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 4); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 4); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 4); \ - TEST_VEC_LOOP (mr1, 4); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-double-vlen8.h b/math/test-double-vlen8.h index bdfccbb4ff..a780aa6658 100644 --- a/math/test-double-vlen8.h +++ b/math/test-double-vlen8.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT double -#define FUNC(function) function +#include "test-double.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing double vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen8 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 8 #define FUNC_TEST(function) function ## _VEC_SUFF - -#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); -#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 8. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 8); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 8); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 8); \ - INIT_VEC_LOOP (my, y, 8); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 8); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 8); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 8); \ - TEST_VEC_LOOP (mr1, 8); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-double.c b/math/test-double.c index 6c1c11c923..b62e433f17 100644 --- a/math/test-double.c +++ b/math/test-double.c @@ -16,20 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function -#define FUNC_TEST(function) FUNC (function) -#define FLOAT double +#include "test-double.h" +#include "test-math-no-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing double (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 -#define TEST_MATHVEC 0 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-double.h b/math/test-double.h new file mode 100644 index 0000000000..3f2c0082a2 --- /dev/null +++ b/math/test-double.h @@ -0,0 +1,24 @@ +/* Common definitions for libm tests for double. + Copyright (C) 1997-2015 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/>. */ + +#define FUNC(function) function +#define FLOAT double +#define PRINTF_EXPR "e" +#define PRINTF_XEXPR "a" +#define PRINTF_NEXPR "f" +#define TEST_DOUBLE 1 diff --git a/math/test-float-vlen16.h b/math/test-float-vlen16.h index b1890f3740..c9c7770315 100644 --- a/math/test-float-vlen16.h +++ b/math/test-float-vlen16.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT float -#define FUNC(function) function ## f +#include "test-float.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing float vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen16 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 16 #define FUNC_TEST(function) function ## f ## _VEC_SUFF - -#define WRAPPER_DECL(func) extern FLOAT func (FLOAT x); -#define WRAPPER_DECL_ff(func) extern FLOAT func (FLOAT x, FLOAT y); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 16. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 16); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 16); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 16); \ - INIT_VEC_LOOP (my, y, 16); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 16); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 16); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 16); \ - TEST_VEC_LOOP (mr1, 16); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-float-vlen4.h b/math/test-float-vlen4.h index 213ae78e71..463e277d36 100644 --- a/math/test-float-vlen4.h +++ b/math/test-float-vlen4.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT float -#define FUNC(function) function ## f +#include "test-float.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing float vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen4 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 4 #define FUNC_TEST(function) function ## f ## _VEC_SUFF - -#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); -#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 4. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 4); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 4); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 4); \ - INIT_VEC_LOOP (my, y, 4); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 4); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 4); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 4); \ - TEST_VEC_LOOP (mr1, 4); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-float-vlen8.h b/math/test-float-vlen8.h index dd2fb287ad..6dd6a9f5e0 100644 --- a/math/test-float-vlen8.h +++ b/math/test-float-vlen8.h @@ -16,75 +16,17 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FLOAT float -#define FUNC(function) function ## f +#include "test-float.h" +#include "test-math-no-inline.h" +#include "test-math-vector.h" + #define TEST_MSG "testing float vector math (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 -#define TEST_MATHVEC 1 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -#define CNCT(x, y) x ## y -#define CONCAT(a, b) CNCT (a, b) - #define VEC_SUFF _vlen8 -#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) +#define VEC_LEN 8 #define FUNC_TEST(function) function ## f ## _VEC_SUFF - -#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); -#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); -#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); - -// Wrapper from scalar to vector function with vector length 8. -#define VECTOR_WRAPPER(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE); \ -FLOAT scalar_func (FLOAT x) \ -{ \ - int i; \ - VEC_TYPE mx; \ - INIT_VEC_LOOP (mx, x, 8); \ - VEC_TYPE mr = vector_func (mx); \ - TEST_VEC_LOOP (mr, 8); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 2 argument function to vector one. -#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ -extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ -FLOAT scalar_func (FLOAT x, FLOAT y) \ -{ \ - int i; \ - VEC_TYPE mx, my; \ - INIT_VEC_LOOP (mx, x, 8); \ - INIT_VEC_LOOP (my, y, 8); \ - VEC_TYPE mr = vector_func (mx, my); \ - TEST_VEC_LOOP (mr, 8); \ - return ((FLOAT) mr[0]); \ -} - -// Wrapper from scalar 3 argument function to vector one. -#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - VEC_TYPE mx, mr, mr1; \ - INIT_VEC_LOOP (mx, x, 8); \ - vector_func (mx, &mr, &mr1); \ - TEST_VEC_LOOP (mr, 8); \ - TEST_VEC_LOOP (mr1, 8); \ - *r = (FLOAT) mr[0]; \ - *r1 = (FLOAT) mr1[0]; \ - return; \ -} diff --git a/math/test-float.c b/math/test-float.c index 07dc8eacd6..b6a41c0e93 100644 --- a/math/test-float.c +++ b/math/test-float.c @@ -16,20 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function ## f -#define FUNC_TEST(function) FUNC (function) -#define FLOAT float +#include "test-float.h" +#include "test-math-no-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing float (without inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 -#define TEST_MATHVEC 0 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-float.h b/math/test-float.h new file mode 100644 index 0000000000..7b00cb1216 --- /dev/null +++ b/math/test-float.h @@ -0,0 +1,24 @@ +/* Common definitions for libm tests for float. + Copyright (C) 1997-2015 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/>. */ + +#define FUNC(function) function ## f +#define FLOAT float +#define PRINTF_EXPR "e" +#define PRINTF_XEXPR "a" +#define PRINTF_NEXPR "f" +#define TEST_FLOAT 1 diff --git a/math/test-idouble.c b/math/test-idouble.c index bb73f9c7c2..48e6965ba3 100644 --- a/math/test-idouble.c +++ b/math/test-idouble.c @@ -16,21 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function -#define FUNC_TEST(function) FUNC (function) -#define FLOAT double +#include "test-double.h" +#include "test-math-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing double (inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinedouble -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 -#define TEST_MATHVEC 0 -#define TEST_INLINE - -#ifdef __NO_MATH_INLINES -# undef __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-ifloat.c b/math/test-ifloat.c index 74e8e4b1b8..4b1bc405b8 100644 --- a/math/test-ifloat.c +++ b/math/test-ifloat.c @@ -16,21 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function ## f -#define FUNC_TEST(function) FUNC (function) -#define FLOAT float +#include "test-float.h" +#include "test-math-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing float (inline functions)\n" -#define MATHCONST(x) x #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinefloat -#define PRINTF_EXPR "e" -#define PRINTF_XEXPR "a" -#define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 -#define TEST_MATHVEC 0 -#define TEST_INLINE 1 - -#ifdef __NO_MATH_INLINES -# undef __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-ildoubl.c b/math/test-ildoubl.c index f90a9baff0..847d8abfaf 100644 --- a/math/test-ildoubl.c +++ b/math/test-ildoubl.c @@ -16,21 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function##l -#define FUNC_TEST(function) FUNC (function) -#define FLOAT long double +#include "test-ldouble.h" +#include "test-math-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing long double (inline functions)\n" -#define MATHCONST(x) x##L #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinelongdouble -#define PRINTF_EXPR "Le" -#define PRINTF_XEXPR "La" -#define PRINTF_NEXPR "Lf" -#define TEST_INLINE -#define TEST_LDOUBLE 1 -#define TEST_MATHVEC 0 - -#ifdef __NO_MATH_INLINES -# undef __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-ldouble.c b/math/test-ldouble.c index 97effb69e1..6820c5d1fe 100644 --- a/math/test-ldouble.c +++ b/math/test-ldouble.c @@ -16,20 +16,11 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define FUNC(function) function##l -#define FUNC_TEST(function) FUNC (function) -#define FLOAT long double +#include "test-ldouble.h" +#include "test-math-no-inline.h" +#include "test-math-scalar.h" + #define TEST_MSG "testing long double (without inline functions)\n" -#define MATHCONST(x) x##L #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble -#define PRINTF_EXPR "Le" -#define PRINTF_XEXPR "La" -#define PRINTF_NEXPR "Lf" -#define TEST_LDOUBLE 1 -#define TEST_MATHVEC 0 - -#ifndef __NO_MATH_INLINES -# define __NO_MATH_INLINES -#endif #include "libm-test.c" diff --git a/math/test-ldouble.h b/math/test-ldouble.h new file mode 100644 index 0000000000..e42b2bd2f2 --- /dev/null +++ b/math/test-ldouble.h @@ -0,0 +1,24 @@ +/* Common definitions for libm tests for long double. + Copyright (C) 1997-2015 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/>. */ + +#define FUNC(function) function##l +#define FLOAT long double +#define PRINTF_EXPR "Le" +#define PRINTF_XEXPR "La" +#define PRINTF_NEXPR "Lf" +#define TEST_LDOUBLE 1 diff --git a/math/test-vec-loop.h b/math/test-math-inline.h index 66d7692c22..d778cc74d9 100644 --- a/math/test-vec-loop.h +++ b/math/test-math-inline.h @@ -1,5 +1,5 @@ -/* Loop macro used in vector math functions tests. - Copyright (C) 2014-2015 Free Software Foundation, Inc. +/* Common definitions for libm tests for inline functions. + Copyright (C) 1997-2015 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 @@ -16,27 +16,8 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* This macro is used in VECTOR_WRAPPER macros for vector tests. */ -#define TEST_VEC_LOOP(vec, len) \ - do \ - { \ - for (i = 1; i < len; i++) \ - { \ - if ((FLOAT) vec[0] != (FLOAT) vec[i]) \ - { \ - vec[0] = (FLOAT) vec[0] + 0.1; \ - break; \ - } \ - } \ - } \ - while (0) +#define TEST_INLINE -#define INIT_VEC_LOOP(vec, val, len) \ - do \ - { \ - for (i = 0; i < len; i++) \ - { \ - vec[i] = val; \ - } \ - } \ - while (0) +#ifdef __NO_MATH_INLINES +# undef __NO_MATH_INLINES +#endif diff --git a/math/test-math-no-inline.h b/math/test-math-no-inline.h new file mode 100644 index 0000000000..ad765da0ae --- /dev/null +++ b/math/test-math-no-inline.h @@ -0,0 +1,21 @@ +/* Common definitions for libm tests for non-inline functions. + Copyright (C) 1997-2015 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/>. */ + +#ifndef __NO_MATH_INLINES +# define __NO_MATH_INLINES +#endif diff --git a/math/test-math-scalar.h b/math/test-math-scalar.h new file mode 100644 index 0000000000..1e4805aad5 --- /dev/null +++ b/math/test-math-scalar.h @@ -0,0 +1,20 @@ +/* Common definitions for libm tests for scalar functions. + Copyright (C) 1997-2015 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/>. */ + +#define FUNC_TEST(function) FUNC (function) +#define TEST_MATHVEC 0 diff --git a/math/test-math-vector.h b/math/test-math-vector.h new file mode 100644 index 0000000000..1b74841fe4 --- /dev/null +++ b/math/test-math-vector.h @@ -0,0 +1,96 @@ +/* Common definitions for libm tests for vector functions. + Copyright (C) 2014-2015 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/>. */ + +#define TEST_MATHVEC 1 + +#define CNCT(x, y) x ## y +#define CONCAT(a, b) CNCT (a, b) + +#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF) + +/* This macro is used in VECTOR_WRAPPER macros for vector tests. */ +#define TEST_VEC_LOOP(vec, len) \ + do \ + { \ + for (i = 1; i < len; i++) \ + { \ + if ((FLOAT) vec[0] != (FLOAT) vec[i]) \ + { \ + vec[0] = (FLOAT) vec[0] + 0.1; \ + break; \ + } \ + } \ + } \ + while (0) + +#define INIT_VEC_LOOP(vec, val, len) \ + do \ + { \ + for (i = 0; i < len; i++) \ + { \ + vec[i] = val; \ + } \ + } \ + while (0) + +#define WRAPPER_DECL(function) extern FLOAT function (FLOAT); +#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT); +#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *); + +/* Wrapper from scalar to vector function. */ +#define VECTOR_WRAPPER(scalar_func, vector_func) \ +extern VEC_TYPE vector_func (VEC_TYPE); \ +FLOAT scalar_func (FLOAT x) \ +{ \ + int i; \ + VEC_TYPE mx; \ + INIT_VEC_LOOP (mx, x, VEC_LEN); \ + VEC_TYPE mr = vector_func (mx); \ + TEST_VEC_LOOP (mr, VEC_LEN); \ + return ((FLOAT) mr[0]); \ +} + +/* Wrapper from scalar 2 argument function to vector one. */ +#define VECTOR_WRAPPER_ff(scalar_func, vector_func) \ +extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE); \ +FLOAT scalar_func (FLOAT x, FLOAT y) \ +{ \ + int i; \ + VEC_TYPE mx, my; \ + INIT_VEC_LOOP (mx, x, VEC_LEN); \ + INIT_VEC_LOOP (my, y, VEC_LEN); \ + VEC_TYPE mr = vector_func (mx, my); \ + TEST_VEC_LOOP (mr, VEC_LEN); \ + return ((FLOAT) mr[0]); \ +} + +/* Wrapper from scalar 3 argument function to vector one. */ +#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) \ +extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *); \ +void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ +{ \ + int i; \ + VEC_TYPE mx, mr, mr1; \ + INIT_VEC_LOOP (mx, x, VEC_LEN); \ + vector_func (mx, &mr, &mr1); \ + TEST_VEC_LOOP (mr, VEC_LEN); \ + TEST_VEC_LOOP (mr1, VEC_LEN); \ + *r = (FLOAT) mr[0]; \ + *r1 = (FLOAT) mr1[0]; \ + return; \ +} diff --git a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c index 806bd99a5d..4e764f2475 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-double-vlen2.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m128d diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c index a12b897485..bc2fd16c5a 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-double-vlen4.h" -#include "test-vec-loop.h" #include <immintrin.h> #undef VEC_SUFF diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c index 7525af7f90..a711c9e1c3 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-double-vlen4.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m256d diff --git a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c index fcc4fa45a5..942c42b83b 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-double-vlen8.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m512d diff --git a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c index 6cc6008301..bc98e78ff0 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-float-vlen16.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m512 diff --git a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c index ae12a108fc..39254efed4 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-float-vlen4.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m128 diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c index f0c7d4a55a..6bd0d50779 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-float-vlen8.h" -#include "test-vec-loop.h" #include <immintrin.h> #undef VEC_SUFF diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c index 6b267de00c..2fec906de0 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c @@ -17,7 +17,6 @@ <http://www.gnu.org/licenses/>. */ #include "test-float-vlen8.h" -#include "test-vec-loop.h" #include <immintrin.h> #define VEC_TYPE __m256 |