public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Add string functions and libm tests for _Float128
@ 2017-06-07 21:36 Gabriel F. T. Gomes
  2017-06-07 21:36 ` [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual Gabriel F. T. Gomes
  2017-06-07 21:36 ` [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions Gabriel F. T. Gomes
  0 siblings, 2 replies; 8+ messages in thread
From: Gabriel F. T. Gomes @ 2017-06-07 21:36 UTC (permalink / raw)
  To: libc-alpha

I added a "Changes since v2" to each patch in this series.

Gabriel F. T. Gomes (1):
  float128: Add strfromf128, strtof128, and wcstof128 to the manual

Paul E. Murphy (1):
  float128: Add strtof128, wcstof128, and related functions.

 include/gmp.h                                  |  4 ++
 include/stdlib.h                               | 29 ++++++++++++++
 include/wchar.h                                | 13 +++++++
 manual/arith.texi                              | 45 ++++++++++++++++++---
 manual/math.texi                               | 11 ++++++
 stdlib/Makefile                                |  1 +
 stdlib/stdlib.h                                | 14 +++++++
 stdlib/tst-strtod-nan-locale-main.c            | 36 ++++++++---------
 stdlib/tst-strtod-round-skeleton.c             |  1 +
 stdlib/tst-strtod.h                            | 42 ++++++++++++++------
 sysdeps/ieee754/float128/Makefile              |  5 +++
 sysdeps/ieee754/float128/Versions              | 10 +++++
 sysdeps/ieee754/float128/mpn2float128.c        | 54 ++++++++++++++++++++++++++
 sysdeps/ieee754/float128/strtod_nan_float128.h | 33 ++++++++++++++++
 sysdeps/ieee754/float128/strtof128.c           | 34 ++++++++++++++++
 sysdeps/ieee754/float128/strtof128_l.c         | 43 ++++++++++++++++++++
 sysdeps/ieee754/float128/strtof128_nan.c       | 28 +++++++++++++
 sysdeps/ieee754/float128/wcstof128.c           | 30 ++++++++++++++
 sysdeps/ieee754/float128/wcstof128_l.c         | 30 ++++++++++++++
 sysdeps/ieee754/float128/wcstof128_nan.c       | 24 ++++++++++++
 wcsmbs/Makefile                                |  2 +
 wcsmbs/wchar.h                                 | 15 +++++++
 22 files changed, 470 insertions(+), 34 deletions(-)
 create mode 100644 sysdeps/ieee754/float128/mpn2float128.c
 create mode 100644 sysdeps/ieee754/float128/strtod_nan_float128.h
 create mode 100644 sysdeps/ieee754/float128/strtof128.c
 create mode 100644 sysdeps/ieee754/float128/strtof128_l.c
 create mode 100644 sysdeps/ieee754/float128/strtof128_nan.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128_l.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128_nan.c

-- 
2.4.11

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual
  2017-06-07 21:36 [PATCH v3 0/2] Add string functions and libm tests for _Float128 Gabriel F. T. Gomes
@ 2017-06-07 21:36 ` Gabriel F. T. Gomes
  2017-06-07 23:28   ` Joseph Myers
  2017-06-08 11:42   ` Rical Jasan
  2017-06-07 21:36 ` [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions Gabriel F. T. Gomes
  1 sibling, 2 replies; 8+ messages in thread
From: Gabriel F. T. Gomes @ 2017-06-07 21:36 UTC (permalink / raw)
  To: libc-alpha

Changes since v2:

  - Fix typos and grammatical errors.
  - Move @var{N} into the @code{} blocks
  - Remove @var{N} from the function names and return types in the
    @deftypefun and @deftypefunx blocks, because @var{N} causes errors in
    'make html' and 'make info' (make 'pdf' was working fine).

Changes since v1:

  - Added _FloatN and _FloatNx to the section that discusses C
    floating-point types in the section Mathematics.
  - Reworded the descriptions of strfromf128 etc. into descriptions of
    strfromfN etc., to ease the changes needed in the manual when more
    types from TS 18661-3 get added to glibc.

-- 8< --
2016-11-14  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>

	* manual/math.texi (Mathematics): Add description for _FloatN and
	_FloatNx types and mentions that they are not support in glibc for
	any architecture, so far.
	* manual/arith.texi (wcstof, wcstold): Replace the mention to
	stdlib.h with wchar.h.
	(Parsing of Floats): Add descriptions for strtofN and wcstofN.
	(Printing of Floats): Add description for strfromfN.
---
 manual/arith.texi | 45 ++++++++++++++++++++++++++++++++++++++++-----
 manual/math.texi  | 11 +++++++++++
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/manual/arith.texi b/manual/arith.texi
index dec12a0..1f13769 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -2990,23 +2990,45 @@ double} is a separate type).
 These functions have been GNU extensions and are new to @w{ISO C99}.
 @end deftypefun
 
+@comment stdlib.h
+@comment ISO/IEC TS 18661-3
+@deftypefun _FloatN strtofN (const char *@var{string}, char **@var{tailptr})
+@deftypefunx _FloatNx strtofN (const char *@var{string}, char **@var{tailptr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+These functions are like @code{strtod}, except for the return type.
+
+They were introduced in @w{ISO/IEC TS 18661-3} and are available on machines
+that support the related types, as described in @ref{Mathematics}.
+@end deftypefun
+
 @comment wchar.h
 @comment ISO
 @deftypefun double wcstod (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr})
-@comment stdlib.h
+@comment wchar.h
 @comment ISO
 @deftypefunx float wcstof (const wchar_t *@var{string}, wchar_t **@var{tailptr})
-@comment stdlib.h
+@comment wchar.h
 @comment ISO
 @deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr})
+@comment wchar.h
+@deftypefunx _FloatN wcstofN (const wchar_t *@var{string}, wchar_t **@var{tailptr})
+@deftypefunx _FloatNx wcstofNx (const wchar_t *@var{string}, wchar_t **@var{tailptr})
 @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
-The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are
-equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and
-@code{strtold} functions but it handles wide character string.
+The @code{wcstod}, @code{wcstof}, @code{wcstol}, @code{wcstof@var{N}},
+and @code{wcstof@var{N}x} functions are equivalent in nearly all aspect
+to the @code{strtod}, @code{strtof}, @code{strtold},
+@code{strtof@var{N}}, and @code{strtof@var{N}x} functions but they
+handle wide character strings.
 
 The @code{wcstod} function was introduced in @w{Amendment 1} of @w{ISO
 C90}.  The @code{wcstof} and @code{wcstold} functions were introduced in
 @w{ISO C99}.
+
+The @code{wcstof@var{N}} and @code{wcstof@var{N}x} functions are not in
+any standard, but are added to provide completeness for the
+non-deprecated interface of wide character string to floating-point
+conversion function.  They are only available on machines that support
+the related types as described in @ref{Mathematics}.
 @end deftypefun
 
 @comment stdlib.h
@@ -3064,6 +3086,19 @@ has been completely written if and only if the returned value is less than
 These functions were introduced by ISO/IEC TS 18661-1.
 @end deftypefun
 
+@comment stdlib.h
+@comment ISO/IEC TS 18661-3
+@deftypefun int strfromfN (char *restrict @var{string}, size_t @var{size}, const char *restrict @var{format}, _Float@var{N} @var{value})
+@deftypefunx int strfromfNx (char *restrict @var{string}, size_t @var{size}, const char *restrict @var{format}, _Float@var{N}x @var{value})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@comment this function depends on __printf_fp and __printf_fphex, which are
+@comment AS-unsafe (ascuheap) and AC-unsafe (acsmem).
+These functions are like @code{strfromd}, except for the type of @var{value}.
+
+They were introduced in @w{ISO/IEC TS 18661-3} and are available on machines
+that support the related types, as described in @ref{Mathematics}.
+@end deftypefun
+
 @node System V Number Conversion
 @section Old-fashioned System V number-to-string functions
 
diff --git a/manual/math.texi b/manual/math.texi
index 69a0ace..a335917 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -53,6 +53,17 @@ usually wise to pick the narrowest type that can accommodate your data.
 Not all machines have a distinct @code{long double} type; it may be the
 same as @code{double}.
 
+On some machines, @theglibc{} also provides @code{_Float@var{N}} and
+@code{_Float@var{N}x} types.  These types are defined in @w{ISO/IEC
+18661-3}, which extends @w{ISO C} and defines floating-point types that
+are not machine-dependent.  When such a type, e.g.  @code{_Float128}, is
+supported by @theglibc{}, extra variants for most of the mathematical
+functions provided for @code{double}, @code{float}, and @code{long
+double} are also provided for the supported type.
+
+Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
+types is not provided for any machine.
+
 @menu
 * Mathematical Constants::      Precise numeric values for often-used
                                  constants.
-- 
2.4.11

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions.
  2017-06-07 21:36 [PATCH v3 0/2] Add string functions and libm tests for _Float128 Gabriel F. T. Gomes
  2017-06-07 21:36 ` [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual Gabriel F. T. Gomes
@ 2017-06-07 21:36 ` Gabriel F. T. Gomes
  2017-06-07 23:22   ` Joseph Myers
  1 sibling, 1 reply; 8+ messages in thread
From: Gabriel F. T. Gomes @ 2017-06-07 21:36 UTC (permalink / raw)
  To: libc-alpha

From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>

Changes since v2:

  - Fixed the condition for defining F128 (no dependency on compiler version).
  - Fixed the condition for defining CHAR (no dependency on __HAVE_FLOAT128).
  - Removed the unnecessary indirections in the macros _GEN and _DO.
  - Fixed the condition for declaring wcstof128 (__USE_GNU, not TS 18661-3).

Changes since v1:

  - Removed NEWS entry to the commit that actually enables strtof128.
  - Removed the check for __STDC_WANT_IEC_60559_TYPES_EXT__ from blocks of code
    that are inside __USE_GNU conditional.
  - Moved the declaration of wcstof128 closer to wcstod, wcstof, and wcstold.
  - Redefined F128 in the tests to use the existing workaround for old.
    compilers (i.e.: __f128 ()).
  - Added descriptive comment before the copyright, as needed.

-- 8< --
The implementations are contained with sysdeps/ieee754/float128 as
they are only built when _Float128 is enabled within libc/m.

2017-05-23  Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

	* 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.
	(_GEN_f128): New macro.
	(_DO_f128): Likewise.
	(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.
---
 include/gmp.h                                  |  4 ++
 include/stdlib.h                               | 29 ++++++++++++++
 include/wchar.h                                | 13 +++++++
 stdlib/Makefile                                |  1 +
 stdlib/stdlib.h                                | 14 +++++++
 stdlib/tst-strtod-nan-locale-main.c            | 36 ++++++++---------
 stdlib/tst-strtod-round-skeleton.c             |  1 +
 stdlib/tst-strtod.h                            | 42 ++++++++++++++------
 sysdeps/ieee754/float128/Makefile              |  5 +++
 sysdeps/ieee754/float128/Versions              | 10 +++++
 sysdeps/ieee754/float128/mpn2float128.c        | 54 ++++++++++++++++++++++++++
 sysdeps/ieee754/float128/strtod_nan_float128.h | 33 ++++++++++++++++
 sysdeps/ieee754/float128/strtof128.c           | 34 ++++++++++++++++
 sysdeps/ieee754/float128/strtof128_l.c         | 43 ++++++++++++++++++++
 sysdeps/ieee754/float128/strtof128_nan.c       | 28 +++++++++++++
 sysdeps/ieee754/float128/wcstof128.c           | 30 ++++++++++++++
 sysdeps/ieee754/float128/wcstof128_l.c         | 30 ++++++++++++++
 sysdeps/ieee754/float128/wcstof128_nan.c       | 24 ++++++++++++
 wcsmbs/Makefile                                |  2 +
 wcsmbs/wchar.h                                 | 15 +++++++
 20 files changed, 419 insertions(+), 29 deletions(-)
 create mode 100644 sysdeps/ieee754/float128/mpn2float128.c
 create mode 100644 sysdeps/ieee754/float128/strtod_nan_float128.h
 create mode 100644 sysdeps/ieee754/float128/strtof128.c
 create mode 100644 sysdeps/ieee754/float128/strtof128_l.c
 create mode 100644 sysdeps/ieee754/float128/strtof128_nan.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128_l.c
 create mode 100644 sysdeps/ieee754/float128/wcstof128_nan.c

diff --git a/include/gmp.h b/include/gmp.h
index e6f635e..3590acf 100644
--- a/include/gmp.h
+++ b/include/gmp.h
@@ -31,5 +31,9 @@ extern double __mpn_construct_double (mp_srcptr frac_ptr, int expt,
 extern long double __mpn_construct_long_double (mp_srcptr frac_ptr, int expt,
 						int sign);
 
+#if __HAVE_DISTINCT_FLOAT128
+extern _Float128 __mpn_construct_float128 (mp_srcptr frac_ptr, int expt,
+					   int sign);
+#endif
 
 #endif
diff --git a/include/stdlib.h b/include/stdlib.h
index 5847445..cae9f2c 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -219,6 +219,35 @@ libc_hidden_proto (__wcstof_nan)
 libc_hidden_proto (__wcstod_nan)
 libc_hidden_proto (__wcstold_nan)
 
+/* Enable _FloatN bits as needed.  */
+#include <bits/floatn.h>
+
+#if __HAVE_DISTINCT_FLOAT128
+extern __typeof (strtof128_l) __strtof128_l;
+
+libc_hidden_proto (__strtof128_l)
+libc_hidden_proto (strtof128)
+
+extern _Float128 __strtof128_nan (const char *, char **, char)
+     internal_function;
+extern _Float128 __wcstof128_nan (const wchar_t *, wchar_t **, wchar_t)
+     internal_function;
+
+libc_hidden_proto (__strtof128_nan)
+libc_hidden_proto (__wcstof128_nan)
+
+extern _Float128 __strtof128_internal (const char *__restrict __nptr,
+				       char **__restrict __endptr,
+				       int __group);
+libc_hidden_proto (__strtof128_internal)
+
+extern _Float128 ____strtof128_l_internal (const char *__restrict __nptr,
+					   char **__restrict __endptr,
+					   int __group, __locale_t __loc);
+
+libc_hidden_proto (____strtof128_l_internal)
+#endif
+
 extern char *__ecvt (double __value, int __ndigit, int *__restrict __decpt,
 		     int *__restrict __sign);
 extern char *__fcvt (double __value, int __ndigit, int *__restrict __decpt,
diff --git a/include/wchar.h b/include/wchar.h
index a773d56..55de9be 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -4,6 +4,8 @@
 # ifndef _ISOMAC
 # ifdef _WCHAR_H
 
+#include <bits/floatn.h>
+
 extern __typeof (wcscasecmp_l) __wcscasecmp_l;
 extern __typeof (wcsncasecmp_l) __wcsncasecmp_l;
 extern __typeof (wcscoll_l) __wcscoll_l;
@@ -70,6 +72,17 @@ libc_hidden_proto (wcstoll)
 libc_hidden_proto (wcstoul)
 libc_hidden_proto (wcstoull)
 
+#if __HAVE_DISTINCT_FLOAT128
+extern __typeof (wcstof128_l) __wcstof128_l;
+libc_hidden_proto (__wcstof128_l)
+extern _Float128 __wcstof128_internal (const wchar_t *__restrict __nptr,
+				       wchar_t **__restrict __endptr,
+				       int __group) __THROW;
+
+libc_hidden_proto (__wcstof128_internal)
+libc_hidden_proto (wcstof128)
+#endif
+
 libc_hidden_proto (__wcscasecmp_l)
 libc_hidden_proto (__wcsncasecmp_l)
 
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 9b0acce..0314d59 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -198,6 +198,7 @@ $(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps)
 libof-tst-putenvmod = extramodules
 
 $(objpfx)bug-getcontext: $(libm)
+$(objpfx)bug-strtod2: $(libm)
 $(objpfx)tst-strtod-round: $(libm)
 $(objpfx)tst-tininess: $(libm)
 $(objpfx)tst-strtod-underflow: $(libm)
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 0a693c2..6f1e70e 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -128,6 +128,13 @@ extern long double strtold (const char *__restrict __nptr,
      __THROW __nonnull ((1));
 #endif
 
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+/* Likewise for the '_Float128' format  */
+extern _Float128 strtof128 (const char *__restrict __nptr,
+		      char **__restrict __endptr)
+     __THROW __nonnull ((1));
+#endif
+
 /* Convert a string to a long integer.  */
 extern long int strtol (const char *__restrict __nptr,
 			char **__restrict __endptr, int __base)
@@ -236,6 +243,13 @@ extern long double strtold_l (const char *__restrict __nptr,
 			      char **__restrict __endptr,
 			      __locale_t __loc)
      __THROW __nonnull ((1, 3));
+
+# if __HAVE_FLOAT128
+extern _Float128 strtof128_l (const char *__restrict __nptr,
+			      char **__restrict __endptr,
+			      __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+# endif
 #endif /* GNU */
 
 
diff --git a/stdlib/tst-strtod-nan-locale-main.c b/stdlib/tst-strtod-nan-locale-main.c
index 8044dad..8222174 100644
--- a/stdlib/tst-strtod-nan-locale-main.c
+++ b/stdlib/tst-strtod-nan-locale-main.c
@@ -23,6 +23,8 @@
 #include <stdlib.h>
 #include <wchar.h>
 
+#include <stdlib/tst-strtod.h>
+
 #define STR_(X) #X
 #define STR(X) STR_(X)
 #define FNPFXS STR (FNPFX)
@@ -30,20 +32,22 @@
 #define CONCAT(X, Y) CONCAT_ (X, Y)
 #define FNX(FN) CONCAT (FNPFX, FN)
 
-#define TEST(LOC, STR, FN, TYPE)					\
-  do									\
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)			\
+static int								\
+test_strto ## FSUF (const char * loc, CHAR * s)				\
+{									\
+  CHAR *ep;								\
+  FTYPE val = FNX (FSUF) (s, &ep);					\
+  if (isnan (val) && *ep == 0)						\
+    printf ("PASS: %s: " FNPFXS #FSUF " (" SFMT ")\n", loc, s);		\
+  else									\
     {									\
-      CHAR *ep;								\
-      TYPE val = FNX (FN) (STR, &ep);					\
-      if (isnan (val) && *ep == 0)					\
-	printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
-      else								\
-	{								\
-	  printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR);	\
-	  result = 1;							\
-	}								\
+      printf ("FAIL: %s: " FNPFXS #FSUF " (" SFMT ")\n", loc, s);	\
+      return 1;							        \
     }									\
-  while (0)
+  return 0;								\
+}
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
 
 static int
 test_one_locale (const char *loc)
@@ -64,13 +68,9 @@ test_one_locale (const char *loc)
       s[4] = L_('A') + i - 10;
       s[5] = L_(')');
       s[6] = 0;
-      TEST (loc, s, f, float);
-      TEST (loc, s, d, double);
-      TEST (loc, s, ld, long double);
+      result |= STRTOD_TEST_FOREACH (test_strto, loc, s);
       s[4] = L_('a') + i - 10;
-      TEST (loc, s, f, float);
-      TEST (loc, s, d, double);
-      TEST (loc, s, ld, long double);
+      result |= STRTOD_TEST_FOREACH (test_strto, loc, s);
     }
   return result;
 }
diff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c
index 73603e6..1a9f663 100644
--- a/stdlib/tst-strtod-round-skeleton.c
+++ b/stdlib/tst-strtod-round-skeleton.c
@@ -93,6 +93,7 @@
 /* Add type specific choosing macros below.  */
 #define CHOOSE_f(f,...) f
 #define CHOOSE_d(f,d,...) d
+#define CHOOSE_f128(f,d,ld64i,ld64m,ld106,ld113,...) ld113
 /* long double is special, and handled above.  */
 
 /* Selector for expected result field of a given type.  */
diff --git a/stdlib/tst-strtod.h b/stdlib/tst-strtod.h
index bf5f901..67a6e7c 100644
--- a/stdlib/tst-strtod.h
+++ b/stdlib/tst-strtod.h
@@ -21,11 +21,30 @@
 
 #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 _GEN_f128(mfunc,...) mfunc (__VA_ARGS__)
+# define _DO_f128(mfunc,...) (mfunc ## f128) (__VA_ARGS__)
+#else
+# define _GEN_f128(...)
+# define _DO_f128(...) 0
+#endif
+
+#ifndef CHAR
+# define CHAR char
+#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__)		    \
+  _GEN_f128 (mfunc, f128, _Float128, strfromf128, F128, f128, ##__VA_ARGS__)
 /* The arguments to the generated macros are:
    FSUF - Function suffix
    FTYPE - float type
@@ -36,13 +55,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__);		\
+   result |= _DO_f128 (mfunc, ##__VA_ARGS__);	\
+   result;					\
 })
 
 
diff --git a/sysdeps/ieee754/float128/Makefile b/sysdeps/ieee754/float128/Makefile
index c07586c..166e630 100644
--- a/sysdeps/ieee754/float128/Makefile
+++ b/sysdeps/ieee754/float128/Makefile
@@ -1,3 +1,8 @@
 ifeq ($(subdir),stdlib)
 routines += float1282mpn strfromf128
+routines += strtof128 strtof128_l strtof128_nan mpn2float128
+endif
+
+ifeq ($(subdir),wcsmbs)
+routines += wcstof128_l wcstof128 wcstof128_nan
 endif
diff --git a/sysdeps/ieee754/float128/Versions b/sysdeps/ieee754/float128/Versions
index caf2064..ef9df2d 100644
--- a/sysdeps/ieee754/float128/Versions
+++ b/sysdeps/ieee754/float128/Versions
@@ -4,7 +4,17 @@
 %endif
 libc {
   FLOAT128_VERSION {
+    __strtof128_internal;
+    __wcstof128_internal;
     strfromf128;
+    strtof128;
+    strtof128_l;
+    wcstof128;
+    wcstof128_l;
+  }
+  GLIBC_PRIVATE {
+    # For __nanf128.
+    __strtof128_nan;
   }
 }
 libm {
diff --git a/sysdeps/ieee754/float128/mpn2float128.c b/sysdeps/ieee754/float128/mpn2float128.c
new file mode 100644
index 0000000..12f703a
--- /dev/null
+++ b/sysdeps/ieee754/float128/mpn2float128.c
@@ -0,0 +1,54 @@
+/* Convert a number in multi-precision format to _Float128.
+   Copyright (C) 2017 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/>.  */
+
+#include "gmp.h"
+#include "gmp-impl.h"
+#include <float.h>
+#include <math.h>
+
+#include "ieee754_float128.h"
+
+/* Convert a multi-precision integer of the needed number of bits (113 for
+   binary128) and an integral power of two to a `_Float128' in IEEE854
+   quad-precision format.  */
+
+_Float128
+__mpn_construct_float128 (mp_srcptr frac_ptr, int expt, int sign)
+{
+  union ieee854_float128 u;
+
+  u.ieee.negative = sign;
+  u.ieee.exponent = expt + IEEE854_FLOAT128_BIAS;
+#if BITS_PER_MP_LIMB == 32
+  u.ieee.mantissa3 = frac_ptr[0];
+  u.ieee.mantissa2 = frac_ptr[1];
+  u.ieee.mantissa1 = frac_ptr[2];
+  u.ieee.mantissa0 = frac_ptr[3] & (((mp_limb_t) 1
+				     << (FLT128_MANT_DIG - 96)) - 1);
+#elif BITS_PER_MP_LIMB == 64
+  u.ieee.mantissa3 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1);
+  u.ieee.mantissa2 = frac_ptr[0] >> 32;
+  u.ieee.mantissa1 = frac_ptr[1] & (((mp_limb_t) 1 << 32) - 1);
+  u.ieee.mantissa0 = (frac_ptr[1] >> 32) & (((mp_limb_t) 1
+					     << (FLT128_MANT_DIG - 96)) - 1);
+#else
+  #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+  return u.d;
+}
diff --git a/sysdeps/ieee754/float128/strtod_nan_float128.h b/sysdeps/ieee754/float128/strtod_nan_float128.h
new file mode 100644
index 0000000..79329fb
--- /dev/null
+++ b/sysdeps/ieee754/float128/strtod_nan_float128.h
@@ -0,0 +1,33 @@
+/* Convert string for NaN payload to corresponding NaN.  For _Float128.
+   Copyright (C) 2017 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 FLOAT		_Float128
+#define SET_MANTISSA(flt, mant)				\
+  do							\
+    {							\
+      union ieee854_float128 u;				\
+      u.d = (flt);					\
+      u.ieee_nan.mantissa0 = 0;				\
+      u.ieee_nan.mantissa1 = 0;				\
+      u.ieee_nan.mantissa2 = (mant) >> 32;		\
+      u.ieee_nan.mantissa3 = (mant);			\
+      if ((u.ieee.mantissa0 | u.ieee.mantissa1		\
+	   | u.ieee.mantissa2 | u.ieee.mantissa3) != 0)	\
+	(flt) = u.d;					\
+    }							\
+  while (0)
diff --git a/sysdeps/ieee754/float128/strtof128.c b/sysdeps/ieee754/float128/strtof128.c
new file mode 100644
index 0000000..63cc80d
--- /dev/null
+++ b/sysdeps/ieee754/float128/strtof128.c
@@ -0,0 +1,34 @@
+/* strtof128 wrapper of strtof128_l.
+   Copyright (C) 2017 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/>.  */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+   These macros tell it to produce the `_Float128' version, `strtof128'.  */
+
+#define FLOAT		_Float128
+#define FLT		FLT128
+#ifdef USE_WIDE_CHAR
+# define STRTOF		wcstof128
+# define STRTOF_L	__wcstof128_l
+#else
+# define STRTOF		strtof128
+# define STRTOF_L	__strtof128_l
+#endif
+
+#include <float128_private.h>
+
+#include <stdlib/strtod.c>
diff --git a/sysdeps/ieee754/float128/strtof128_l.c b/sysdeps/ieee754/float128/strtof128_l.c
new file mode 100644
index 0000000..0f768a3
--- /dev/null
+++ b/sysdeps/ieee754/float128/strtof128_l.c
@@ -0,0 +1,43 @@
+/* Convert string representing a number to a _Float128 value, with locale.
+   Copyright (C) 2017 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/>.  */
+
+#include <xlocale.h>
+
+/* Bring in potential typedef for _Float128 early for declaration below.  */
+#include <bits/floatn.h>
+
+extern _Float128 ____strtof128_l_internal (const char *, char **,
+					   int, __locale_t);
+
+#define	FLOAT		_Float128
+#define	FLT		FLT128
+#ifdef USE_WIDE_CHAR
+# define STRTOF		wcstof128_l
+# define __STRTOF	__wcstof128_l
+# define STRTOF_NAN	__wcstof128_nan
+#else
+# define STRTOF		strtof128_l
+# define __STRTOF	__strtof128_l
+# define STRTOF_NAN	__strtof128_nan
+#endif
+#define	MPN2FLOAT	__mpn_construct_float128
+#define	FLOAT_HUGE_VAL	__builtin_huge_valf128 ()
+
+#include <float128_private.h>
+
+#include <stdlib/strtod_l.c>
diff --git a/sysdeps/ieee754/float128/strtof128_nan.c b/sysdeps/ieee754/float128/strtof128_nan.c
new file mode 100644
index 0000000..b9d79e3
--- /dev/null
+++ b/sysdeps/ieee754/float128/strtof128_nan.c
@@ -0,0 +1,28 @@
+/* Convert string for NaN payload to corresponding NaN.  Narrow
+   strings, __float128.
+   Copyright (C) 2017 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/>.  */
+
+#include <math.h>
+
+#include <float128_private.h>
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_float128.h>
+
+#define STRTOD_NAN __strtof128_nan
+#include <stdlib/strtod_nan_main.c>
diff --git a/sysdeps/ieee754/float128/wcstof128.c b/sysdeps/ieee754/float128/wcstof128.c
new file mode 100644
index 0000000..c5a17ba
--- /dev/null
+++ b/sysdeps/ieee754/float128/wcstof128.c
@@ -0,0 +1,30 @@
+/* wcstof128 wrapper of wcstof128_l.
+   Copyright (C) 2017 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/>.  */
+
+#include <stddef.h>
+#include <xlocale.h>
+
+#define	USE_WIDE_CHAR	1
+
+/* Bring in _Float128 typedef if needed.  */
+#include <bits/floatn.h>
+
+extern _Float128 ____wcstof128_l_internal (const wchar_t *, wchar_t **, int,
+					   __locale_t);
+
+#include "strtof128.c"
diff --git a/sysdeps/ieee754/float128/wcstof128_l.c b/sysdeps/ieee754/float128/wcstof128_l.c
new file mode 100644
index 0000000..670b6af
--- /dev/null
+++ b/sysdeps/ieee754/float128/wcstof128_l.c
@@ -0,0 +1,30 @@
+/* Convert string representing a number to integer value, using given locale.
+   Copyright (C) 2017 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/>.  */
+
+#include <stddef.h>
+#include <xlocale.h>
+
+
+#define	USE_WIDE_CHAR	1
+
+#include <bits/floatn.h>
+
+extern _Float128 ____wcstof128_l_internal (const wchar_t *, wchar_t **, int,
+					   __locale_t);
+
+#include "strtof128_l.c"
diff --git a/sysdeps/ieee754/float128/wcstof128_nan.c b/sysdeps/ieee754/float128/wcstof128_nan.c
new file mode 100644
index 0000000..abad881
--- /dev/null
+++ b/sysdeps/ieee754/float128/wcstof128_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN.  Wide strings,
+   _Float128.
+   Copyright (C) 2017 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/>.  */
+
+#include <stdlib/strtod_nan_wide.h>
+#include <float128_private.h>
+#include <strtod_nan_float128.h>
+#define STRTOD_NAN __wcstof128_nan
+#include <stdlib/strtod_nan_main.c>
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile
index d6b214b..84cf986 100644
--- a/wcsmbs/Makefile
+++ b/wcsmbs/Makefile
@@ -81,6 +81,7 @@ CFLAGS-wcstoll.c = $(strtox-CFLAGS)
 CFLAGS-wcstoull.c = $(strtox-CFLAGS)
 CFLAGS-wcstod.c = $(strtox-CFLAGS)
 CFLAGS-wcstold.c = $(strtox-CFLAGS)
+CFLAGS-wcstof128.c = $(strtox-CFLAGS)
 CFLAGS-wcstof.c = $(strtox-CFLAGS)
 CFLAGS-wcstol_l.c = $(strtox-CFLAGS)
 CFLAGS-wcstoul_l.c = $(strtox-CFLAGS)
@@ -88,6 +89,7 @@ CFLAGS-wcstoll_l.c = $(strtox-CFLAGS)
 CFLAGS-wcstoull_l.c = $(strtox-CFLAGS)
 CFLAGS-wcstod_l.c = $(strtox-CFLAGS)
 CFLAGS-wcstold_l.c = $(strtox-CFLAGS)
+CFLAGS-wcstof128_l.c = $(strtox-CFLAGS)
 CFLAGS-wcstof_l.c = $(strtox-CFLAGS)
 CPPFLAGS-tst-wchar-h.c = -D_FORTIFY_SOURCE=2
 
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index 79be9fc..5be993d 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -28,6 +28,9 @@
 # include <bits/libc-header-start.h>
 #endif
 
+/* Gather machine dependent type support.  */
+#include <bits/floatn.h>
+
 #ifdef _WCHAR_H
 /* Get FILE definition.  */
 # define __need___FILE
@@ -426,6 +429,12 @@ extern long double wcstold (const wchar_t *__restrict __nptr,
 			    wchar_t **__restrict __endptr) __THROW;
 #endif /* C99 */
 
+/* Likewise for `_Float128' when support is enabled.  */
+#if __HAVE_FLOAT128 && defined __USE_GNU
+extern _Float128 wcstof128 (const wchar_t *__restrict __nptr,
+			    wchar_t **__restrict __endptr) __THROW;
+#endif
+
 
 /* Convert initial portion of wide string NPTR to `long int'
    representation.  */
@@ -518,6 +527,12 @@ extern float wcstof_l (const wchar_t *__restrict __nptr,
 extern long double wcstold_l (const wchar_t *__restrict __nptr,
 			      wchar_t **__restrict __endptr,
 			      __locale_t __loc) __THROW;
+
+# if __HAVE_FLOAT128
+extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
+			      wchar_t **__restrict __endptr,
+			      __locale_t __loc) __THROW;
+# endif
 #endif	/* use GNU */
 
 
-- 
2.4.11

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions.
  2017-06-07 21:36 ` [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions Gabriel F. T. Gomes
@ 2017-06-07 23:22   ` Joseph Myers
  0 siblings, 0 replies; 8+ messages in thread
From: Joseph Myers @ 2017-06-07 23:22 UTC (permalink / raw)
  To: Gabriel F. T. Gomes; +Cc: libc-alpha

On Wed, 7 Jun 2017, Gabriel F. T. Gomes wrote:

> From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>
> 
> Changes since v2:
> 
>   - Fixed the condition for defining F128 (no dependency on compiler version).
>   - Fixed the condition for defining CHAR (no dependency on __HAVE_FLOAT128).

I still don't see why this patch should be defining CHAR at all.  
tst-strtod.h makes no use of the macro CHAR.  In cases where there is a 
test skeleton (.c file) that uses CHAR, and is itself used for both wide 
and narrow strings, I'd expect each of the wide-string and narrow-string 
tests using that skeleton to define CHAR themselves.  And that should have 
nothing to do with float128.

> +/* 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 _GEN_f128(mfunc,...) mfunc (__VA_ARGS__)
> +# define _DO_f128(mfunc,...) (mfunc ## f128) (__VA_ARGS__)
> +#else
> +# define _GEN_f128(...)
> +# define _DO_f128(...) 0
> +#endif

That's still more macros than I'd expect.  You should only need one macro, 
not two, if the macro is put around a call to mfunc in the GEN case and 
around a (result |= mfunc ## f128 (__VA_ARGS);) statement in the 
STRTOD_TEST_FOREACH case.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual
  2017-06-07 21:36 ` [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual Gabriel F. T. Gomes
@ 2017-06-07 23:28   ` Joseph Myers
  2017-06-08 11:42   ` Rical Jasan
  1 sibling, 0 replies; 8+ messages in thread
From: Joseph Myers @ 2017-06-07 23:28 UTC (permalink / raw)
  To: Gabriel F. T. Gomes; +Cc: libc-alpha

On Wed, 7 Jun 2017, Gabriel F. T. Gomes wrote:

>   - Remove @var{N} from the function names and return types in the
>     @deftypefun and @deftypefunx blocks, because @var{N} causes errors in
>     'make html' and 'make info' (make 'pdf' was working fine).

The patch is OK, fixed as noted, provided this issue is reported to 
upstream Texinfo (after all, at some point we'd like to use @var{N} 
properly in the names and types once the minimum Texinfo version for glibc 
is high enough to ensure a fix).

> +@comment stdlib.h
> +@comment ISO/IEC TS 18661-3
> +@deftypefun _FloatN strtofN (const char *@var{string}, char **@var{tailptr})
> +@deftypefunx _FloatNx strtofN (const char *@var{string}, char **@var{tailptr})

The second one should be strtofNx.

Of course a subsequent patch before the float128 support is actually 
enabled will need to document all the libm interfaces, both functions and 
macros, for the new type.  (That is, where the corresponding interfaces 
for existing types are documented, documentation needs adding for the new 
type; this is not a requirement to document things where the float / 
double / long double interfaces aren't documented either.)

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual
  2017-06-07 21:36 ` [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual Gabriel F. T. Gomes
  2017-06-07 23:28   ` Joseph Myers
@ 2017-06-08 11:42   ` Rical Jasan
  2017-06-08 16:54     ` Joseph Myers
  2017-06-09 16:55     ` Gabriel F. T. Gomes
  1 sibling, 2 replies; 8+ messages in thread
From: Rical Jasan @ 2017-06-08 11:42 UTC (permalink / raw)
  To: Gabriel F. T. Gomes, libc-alpha

On 06/07/2017 02:35 PM, Gabriel F. T. Gomes wrote:
> diff --git a/manual/arith.texi b/manual/arith.texi
> index dec12a0..1f13769 100644
> --- a/manual/arith.texi
> +++ b/manual/arith.texi
> @@ -2990,23 +2990,45 @@ double} is a separate type).
>  These functions have been GNU extensions and are new to @w{ISO C99}.
>  @end deftypefun
>  
> +@comment stdlib.h
> +@comment ISO/IEC TS 18661-3
> +@deftypefun _FloatN strtofN (const char *@var{string}, char **@var{tailptr})
> +@deftypefunx _FloatNx strtofN (const char *@var{string}, char **@var{tailptr})

Both @defs should have @comments.

The second @def should be strtofNx.

> +@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}

See thoughts on safety comments below.

> +These functions are like @code{strtod}, except for the return type.
> +
> +They were introduced in @w{ISO/IEC TS 18661-3} and are available on machines
> +that support the related types, as described in @ref{Mathematics}.

"that support the related types; @pxref{Mathematics}."

@ref should almost never be used, because it doesn't render correctly
across all the documentation types.

> +@end deftypefun
> +
>  @comment wchar.h
>  @comment ISO
>  @deftypefun double wcstod (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr})
> -@comment stdlib.h
> +@comment wchar.h
>  @comment ISO
>  @deftypefunx float wcstof (const wchar_t *@var{string}, wchar_t **@var{tailptr})
> -@comment stdlib.h
> +@comment wchar.h
>  @comment ISO
>  @deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr})

Thanks for fixing.

> +@comment wchar.h
> +@deftypefunx _FloatN wcstofN (const wchar_t *@var{string}, wchar_t **@var{tailptr})

Needs a standard.  "@comment GNU" should be correct if this is a GNU
extension.

> +@deftypefunx _FloatNx wcstofNx (const wchar_t *@var{string}, wchar_t **@var{tailptr})

This should have its own header and standard @comments.

>  @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}

See thoughts on safety comments below.

> -The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are
> -equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and
> -@code{strtold} functions but it handles wide character string.
> +The @code{wcstod}, @code{wcstof}, @code{wcstol}, @code{wcstof@var{N}},
> +and @code{wcstof@var{N}x} functions are equivalent in nearly all aspect

aspects (while you're at it)

> +to the @code{strtod}, @code{strtof}, @code{strtold},
> +@code{strtof@var{N}}, and @code{strtof@var{N}x} functions but they

I would put a comma after "functions", since there's a natural pause.

> +handle wide character strings.
>  
>  The @code{wcstod} function was introduced in @w{Amendment 1} of @w{ISO
>  C90}.  The @code{wcstof} and @code{wcstold} functions were introduced in
>  @w{ISO C99}.
> +
> +The @code{wcstof@var{N}} and @code{wcstof@var{N}x} functions are not in
> +any standard, but are added to provide completeness for the
> +non-deprecated interface of wide character string to floating-point
> +conversion function.  They are only available on machines that support

functions

> +the related types as described in @ref{Mathematics}.

@pxref

>  @end deftypefun
>  
>  @comment stdlib.h
> @@ -3064,6 +3086,19 @@ has been completely written if and only if the returned value is less than
>  These functions were introduced by ISO/IEC TS 18661-1.
>  @end deftypefun
>  
> +@comment stdlib.h
> +@comment ISO/IEC TS 18661-3
> +@deftypefun int strfromfN (char *restrict @var{string}, size_t @var{size}, const char *restrict @var{format}, _Float@var{N} @var{value})
> +@deftypefunx int strfromfNx (char *restrict @var{string}, size_t @var{size}, const char *restrict @var{format}, _Float@var{N}x @var{value})

@comments for both @defs.

> +@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
> +@comment this function depends on __printf_fp and __printf_fphex, which are
> +@comment AS-unsafe (ascuheap) and AC-unsafe (acsmem).

Not that it matters, but @c tends to be used for these comments.  In
light of the @errno and @standards work I've been doing, I wonder if
that's a historical habit due to external processes utilizing @comments
for various purposes...  but I like the shorter syntax anyway.

It looks like the strfrom's were a rare exception, which I'm guessing
was the template (unseen here, directly above).

At any rate, "this function depends" should be "these functions depend",
if the @safety annotation is true for both of them.  Some of the safety
commentary gets pretty detailed too, so this might be improved by being
more explicit about which function depends on what and where the safety
issues lie; i.e., something like: "strfromfN depends on __printf_fp and
strfromfNx depends on __printf_fphex, both of which are AS-unsafe
(ascuheap) and AC-unsafe (acsmem)."  (I don't actually know if that's
right, just inferring.)

Looking at other safety comments in this file, the locale safety seems
to be an interesting issue ("unsafe-but-ruled-safe").  Maybe a reference
in the comment to more detailed comments would be good ("see safety
comments for strtod", or whatever's appropriate).  This would apply to
the other added functions in this patch too.

> +These functions are like @code{strfromd}, except for the type of @var{value}.

@code{value}, since you're referring to the variable.

> +
> +They were introduced in @w{ISO/IEC TS 18661-3} and are available on machines
> +that support the related types, as described in @ref{Mathematics}.

@pxref

> +@end deftypefun
> +
>  @node System V Number Conversion
>  @section Old-fashioned System V number-to-string functions
>  
> diff --git a/manual/math.texi b/manual/math.texi
> index 69a0ace..a335917 100644
> --- a/manual/math.texi
> +++ b/manual/math.texi
> @@ -53,6 +53,17 @@ usually wise to pick the narrowest type that can accommodate your data.
>  Not all machines have a distinct @code{long double} type; it may be the
>  same as @code{double}.
>  
> +On some machines, @theglibc{} also provides @code{_Float@var{N}} and
> +@code{_Float@var{N}x} types.  These types are defined in @w{ISO/IEC
> +18661-3}, which extends @w{ISO C} and defines floating-point types that

Inconsistent standard name.  "ISO/IEC TS 18661-3" is used everywhere
else (in this patch).

> +are not machine-dependent.  When such a type, e.g.  @code{_Float128}, is

I always put a comma after "e.g.", though that might be a regional
preference.  It looks like the formatting sees it as the end of a
sentence, however (two spaces), and that might impact the rendering.
What about: "When a type such as @code{_Float128} is..."

> +supported by @theglibc{}, extra variants for most of the mathematical
> +functions provided for @code{double}, @code{float}, and @code{long
> +double} are also provided for the supported type.
> +
> +Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
> +types is not provided for any machine.

This is dated already, and it's not even out-of-date.  Can anybody think
of a decent way to keep it up-to-date?  "@c FIXME SOMEDAY" (perhaps with
a liberal dose of exclamation points)?  I'm torn, because actually
dating it (putting the year in there or something) is still prone to the
same problem, but could help readers in 20 years recognize it as
possibly no longer true.

I'd also like to draw attention to the very first line of this patch,
which uses "new" and "ISO C99" in the same breath.

It seems important to say this, though, somehow.  Is there somewhere we
can document support for these types on various machines (or already do,
perhaps for types in general)?  We could then reference it, and it might
be easier for the group mind to remember to keep that current.

> +
>  @menu
>  * Mathematical Constants::      Precise numeric values for often-used
>                                   constants.

Rical

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual
  2017-06-08 11:42   ` Rical Jasan
@ 2017-06-08 16:54     ` Joseph Myers
  2017-06-09 16:55     ` Gabriel F. T. Gomes
  1 sibling, 0 replies; 8+ messages in thread
From: Joseph Myers @ 2017-06-08 16:54 UTC (permalink / raw)
  To: Rical Jasan; +Cc: Gabriel F. T. Gomes, libc-alpha

On Thu, 8 Jun 2017, Rical Jasan wrote:

> > +Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
> > +types is not provided for any machine.
> 
> This is dated already, and it's not even out-of-date.  Can anybody think
> of a decent way to keep it up-to-date?  "@c FIXME SOMEDAY" (perhaps with
> a liberal dose of exclamation points)?  I'm torn, because actually
> dating it (putting the year in there or something) is still prone to the
> same problem, but could help readers in 20 years recognize it as
> possibly no longer true.

The point is that each patch enabling the support for a new architecture 
(or a new type on an existing architecture) would update that section (as 
well as the NEWS file) - no other sections should need to duplicate that 
information.  That's Gabriel's patches for powerpc64le, which I expect to 
follow up by enabling the support for x86_64 and x86 (and probably with 
such a patch for ia64, though with compile-only testing).  And later I 
expect to implement support for _FloatN / _FloatNx where they are 
ABI-aliases of existing types (for all applicable architectures at the 
same time for each such type).  (I think the only other vaguely plausible 
case of support for such types in glibc would be _Float16 support, but I'm 
not aware of any work on that.)

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual
  2017-06-08 11:42   ` Rical Jasan
  2017-06-08 16:54     ` Joseph Myers
@ 2017-06-09 16:55     ` Gabriel F. T. Gomes
  1 sibling, 0 replies; 8+ messages in thread
From: Gabriel F. T. Gomes @ 2017-06-09 16:55 UTC (permalink / raw)
  To: Rical Jasan; +Cc: libc-alpha

On Thu, 8 Jun 2017 04:42:29 -0700
Rical Jasan <ricaljasan@pacific.net> wrote:

> Not that it matters, but @c tends to be used for these comments.  In
> light of the @errno and @standards work I've been doing, I wonder if
> that's a historical habit due to external processes utilizing @comments
> for various purposes...  but I like the shorter syntax anyway.
> 
> It looks like the strfrom's were a rare exception, which I'm guessing
> was the template (unseen here, directly above).

I tried to keep the existing style, which seems to be the use of
@comment, throughout the file.

> At any rate, "this function depends" should be "these functions depend",
> if the @safety annotation is true for both of them.  Some of the safety
> commentary gets pretty detailed too, so this might be improved by being
> more explicit about which function depends on what and where the safety
> issues lie; i.e., something like: "strfromfN depends on __printf_fp and
> strfromfNx depends on __printf_fphex, both of which are AS-unsafe
> (ascuheap) and AC-unsafe (acsmem)."  (I don't actually know if that's
> right, just inferring.)

I rewrote this phrase so that it is more clear that all strfrom*
functions depend on both __printf_fp and __printf_fphex.  That's what I
meant.  Could you check if the new wording is more clear, please?


I addressed all the comments in this thread and sent a new version of this
patch.  I am also learning how to contact the texinfo community, so that I
can comment about the use of @var{} in @deftypefun.  Thank you!

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-06-09 16:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-07 21:36 [PATCH v3 0/2] Add string functions and libm tests for _Float128 Gabriel F. T. Gomes
2017-06-07 21:36 ` [PATCH v3 2/2] float128: Add strfromf128, strtof128, and wcstof128 to the manual Gabriel F. T. Gomes
2017-06-07 23:28   ` Joseph Myers
2017-06-08 11:42   ` Rical Jasan
2017-06-08 16:54     ` Joseph Myers
2017-06-09 16:55     ` Gabriel F. T. Gomes
2017-06-07 21:36 ` [PATCH v3 1/2] float128: Add strtof128, wcstof128, and related functions Gabriel F. T. Gomes
2017-06-07 23:22   ` Joseph Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).