diff options
Diffstat (limited to 'math')
-rw-r--r-- | math/libm-test.inc | 1 | ||||
-rw-r--r-- | math/test-double-vlen2.h | 68 | ||||
-rw-r--r-- | math/test-double-vlen4.h | 68 | ||||
-rw-r--r-- | math/test-double-vlen8.h | 68 | ||||
-rw-r--r-- | math/test-double.c | 17 | ||||
-rw-r--r-- | math/test-double.h | 24 | ||||
-rw-r--r-- | math/test-float-vlen16.h | 68 | ||||
-rw-r--r-- | math/test-float-vlen4.h | 68 | ||||
-rw-r--r-- | math/test-float-vlen8.h | 68 | ||||
-rw-r--r-- | math/test-float.c | 17 | ||||
-rw-r--r-- | math/test-float.h | 24 | ||||
-rw-r--r-- | math/test-idouble.c | 18 | ||||
-rw-r--r-- | math/test-ifloat.c | 18 | ||||
-rw-r--r-- | math/test-ildoubl.c | 18 | ||||
-rw-r--r-- | math/test-ldouble.c | 17 | ||||
-rw-r--r-- | math/test-ldouble.h | 24 | ||||
-rw-r--r-- | math/test-math-inline.h (renamed from math/test-vec-loop.h) | 31 | ||||
-rw-r--r-- | math/test-math-no-inline.h | 21 | ||||
-rw-r--r-- | math/test-math-scalar.h | 20 | ||||
-rw-r--r-- | math/test-math-vector.h | 96 |
20 files changed, 269 insertions, 485 deletions
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; \ +} |