diff options
author | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-07-25 13:10:00 -0500 |
---|---|---|
committer | Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> | 2017-06-12 14:48:53 -0300 |
commit | 45f39d458827e07ab3075bed75f2670581a89f33 (patch) | |
tree | ac092e2911ec5b2fabfd650b51ee4d939ef7e882 /stdlib/tst-strtod.h | |
parent | 9527ae8291dbc6097f4f93c4ccce69b577f8a261 (diff) | |
download | glibc-45f39d458827e07ab3075bed75f2670581a89f33.tar.gz |
float128: Add strtof128, wcstof128, and related functions.
The implementations are contained with sysdeps/ieee754/float128 as
they are only built when _Float128 is enabled within libc/m.
* include/gmp.h (__mpn_construct_float128): New declaration.
* include/stdlib.h: Include bits/floatn.h for _Float128 tests.
(__strtof128_l): New declaration.
(__strtof128_nan): Likewise.
(__wcstof128_nan): Likewise.
(__strtof128_internal): Likewise.
(____strtof128_l_internal): Likewise.
* include/wchar.h: Include bits/floatn.h for _Float128 tests.
(__wcstof128_l): New declaration.
(__wcstof128_internal): Likewise.
* stdlib/Makefile (bug-strtod2): Link libm too.
* stdlib/stdlib.h (strtof128): New declaration.
(strtof128_l): Likewise.
* stdlib/tst-strtod-nan-locale-main.c: Updated to use
tst-strtod.h macros to ensure float128 gets tested too.
* stdlib/tst-strtod-round-skeleton.c (CHOOSE_f128): New macro.
* stdlib/tst-strtod.h: Include bits/floatn.h for _Float128
tests.
(IF_FLOAT128): New macro.
(GEN_TEST_STRTOD): Update to optionally include _Float128 in
the tests.
(STRTOD_TEST_FOREACH): Likewise.
* sysdeps/ieee754/float128/Makefile: Insert new strtof128 and
wcstof128 functions into libc.
* sysdeps/ieee754/float128/Versions: Add exports for the above
new functions.
* sysdeps/ieee754/float128/mpn2float128.c: New file.
* sysdeps/ieee754/float128/strtod_nan_float128.h: New file.
* sysdeps/ieee754/float128/strtof128.c: New file.
* sysdeps/ieee754/float128/strtof128_l.c: New file.
* sysdeps/ieee754/float128/strtof128_nan.c: New file.
* sysdeps/ieee754/float128/wcstof128.c: New file.
* sysdeps/ieee754/float128/wcstof128_l.c: New file.
* sysdeps/ieee754/float128/wcstof128_nan.c: New fike.
* wcsmbs/Makefile: (CFLAGS-wcstof128.c): Append strtox-CFLAGS.
(CFLAGS-wcstof128_l): Likewise.
* wcsmbs/wchar.h: Include bits/floatn.h for _Float128 tests.
(wcstof128): New declaration.
(wcstof128_l): Likewise.
Diffstat (limited to 'stdlib/tst-strtod.h')
-rw-r--r-- | stdlib/tst-strtod.h | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/stdlib/tst-strtod.h b/stdlib/tst-strtod.h index bf5f90138f..e23ac3f8ba 100644 --- a/stdlib/tst-strtod.h +++ b/stdlib/tst-strtod.h @@ -21,11 +21,24 @@ #define FSTRLENMAX 128 +#include <bits/floatn.h> + +#define F128 __f128 () + +/* Test strfromf128 and strtof128 on all platforms that provide them, + whether or not the type _Float128 is ABI-distinct from long double. */ +#if __HAVE_FLOAT128 +# define IF_FLOAT128(x) x +#else +# define IF_FLOAT128(x) +#endif + /* Splat n variants of the same test for the various strtod functions. */ -#define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \ - mfunc ( f, float, strfromf, f, f, ##__VA_ARGS__) \ - mfunc ( d, double, strfromd, , , ##__VA_ARGS__) \ - mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__) +#define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \ + mfunc ( f, float, strfromf, f, f, ##__VA_ARGS__) \ + mfunc ( d, double, strfromd, , , ##__VA_ARGS__) \ + mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__) \ + IF_FLOAT128 (mfunc (f128, _Float128, strfromf128, F128, f128, ##__VA_ARGS__)) /* The arguments to the generated macros are: FSUF - Function suffix FTYPE - float type @@ -36,13 +49,14 @@ -#define STRTOD_TEST_FOREACH(mfunc, ...) \ -({ \ - int result = 0; \ - result |= mfunc ## f (__VA_ARGS__); \ - result |= mfunc ## d (__VA_ARGS__); \ - result |= mfunc ## ld (__VA_ARGS__); \ - result; \ +#define STRTOD_TEST_FOREACH(mfunc, ...) \ +({ \ + int result = 0; \ + result |= mfunc ## f (__VA_ARGS__); \ + result |= mfunc ## d (__VA_ARGS__); \ + result |= mfunc ## ld (__VA_ARGS__); \ + IF_FLOAT128 (result |= mfunc ## f128 (__VA_ARGS__)); \ + result; \ }) |