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 | |
parent | 5ba4a6eb9f938872bffb6fc2f2a49437fa943135 (diff) | |
download | glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.zip glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.gz glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.bz2 |
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')
-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 4987161..da8f8ca 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 3f117e5..47d1fdd 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 ffaba69..59a374c 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 bdfccbb..a780aa6 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 6c1c11c..b62e433 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 0000000..3f2c008 --- /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 b1890f3..c9c7770 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 213ae78..463e277 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 dd2fb28..6dd6a9f 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 07dc8ea..b6a41c0 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 0000000..7b00cb1 --- /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 bb73f9c..48e6965 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 74e8e4b..4b1bc40 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 f90a9ba..847d8ab 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 97effb6..6820c5d 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 0000000..e42b2bd --- /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 66d7692..d778cc7 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 0000000..ad765da --- /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 0000000..1e4805a --- /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 0000000..1b74841 --- /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; \ +} |