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 /math/test-double-vlen2.h | |
parent | 5ba4a6eb9f938872bffb6fc2f2a49437fa943135 (diff) | |
download | glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.gz glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.bz2 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.
Diffstat (limited to 'math/test-double-vlen2.h')
-rw-r--r-- | math/test-double-vlen2.h | 68 |
1 files changed, 5 insertions, 63 deletions
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; \ -} |