[2/8] float128: Add _Float128 make bits to libm.

Message ID 1478716859-3246-3-git-send-email-gftg@linux.vnet.ibm.com
State Superseded
Delegated to: Joseph Myers
Headers

Commit Message

Gabriel F T Gomes Nov. 9, 2016, 6:40 p.m. UTC
  From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>

This adds the appropriate common bits for a platform to
enable float128 and expose ABI.

2016-10-21  Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

	* math/Makefile:
	(type-float128-suffix): New variable
	(type-float128-routines): Likewise
	(type-float128-yes): Likewise
	(types): Append float128 if supported

	* sysdeps/ieee754/float128/Makeconfig: New file.
	* sysdeps/ieee754/float128/Versions: New file.
---
 math/Makefile                       |   6 ++
 sysdeps/ieee754/float128/Makeconfig |   3 +
 sysdeps/ieee754/float128/Versions   | 133 ++++++++++++++++++++++++++++++++++++
 3 files changed, 142 insertions(+)
 create mode 100644 sysdeps/ieee754/float128/Makeconfig
 create mode 100644 sysdeps/ieee754/float128/Versions
  

Comments

Tulio Magno Quites Machado Filho Dec. 9, 2016, 9:22 p.m. UTC | #1
"Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com> writes:

> From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>
>
> This adds the appropriate common bits for a platform to
> enable float128 and expose ABI.

Joseph, I'd like to clarify one thing:
In a previous thread you mentioned that you'd review one patch of a
patchset after fixing/committing the previous patch.

In this patchset, you replied directly to patch #3, without making comments to
patch #1 and #2.  Does that mean they look good for you?
  
Joseph Myers Dec. 12, 2016, 10:48 p.m. UTC | #2
On Fri, 9 Dec 2016, Tulio Magno Quites Machado Filho wrote:

> "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com> writes:
> 
> > From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>
> >
> > This adds the appropriate common bits for a platform to
> > enable float128 and expose ABI.
> 
> Joseph, I'd like to clarify one thing:
> In a previous thread you mentioned that you'd review one patch of a
> patchset after fixing/committing the previous patch.
> 
> In this patchset, you replied directly to patch #3, without making comments to
> patch #1 and #2.  Does that mean they look good for you?

No.  There can be cases where dependencies among patches in a series, and 
the likelihood of issues with one patch requiring changes to subsequent 
patches, can mean that latter patches are more reviewable once earlier 
patches have passed their final review.  And it may well end up that this 
series is like that.  But for the series posted on 9 Nov I didn't do that.  
Instead, I did an initial general pass over the whole patch series to 
identify the most obvious issues - with all patches rather than just the 
first ones, so all patches can be updated accordingly for the next 
iteration of the series.

I did comment on patch 2 - in my general comments on patch 0, relating to 
having the correct, consistent API/ABI exposed for the new types through 
the whole patch series, which affect patch 2 as well as other patches.

https://sourceware.org/ml/libc-alpha/2016-11/msg00361.html
https://sourceware.org/ml/libc-alpha/2016-11/msg00370.html

(Note also the point there that when it comes to such things involving 
long lists of functions for the new type - in the cases where it's 
unavoidable to have such long lists, as opposed to the cases where 
existing lists for existing types can be macroized - one can have more 
confidence in the completeness of the list if the patch series as a whole 
has passed testing with existing libm tests enabled for the new type, so 
showing through the testsuite that all the expected functions are indeed 
exported for that type.)
  

Patch

diff --git a/math/Makefile b/math/Makefile
index f400d7b..37e7ea0 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -108,6 +108,11 @@  type-double-routines := branred doasin dosincos halfulp mpa mpatan2	\
 type-float-suffix := f
 type-float-routines := k_rem_pio2f
 
+# _Float128 support
+type-float128-suffix := f128
+type-float128-routines := t_sincosf128 k_sincosf128
+type-float128-yes := float128
+types += $(type-float128-$(float128-fcts))
 
 # Apply suffix to each type in arg 1
 type-foreach = $(foreach t,$(types),$(subst F,$(type-$(t)-suffix),$(1)))
@@ -374,6 +379,7 @@  endif
 CFLAGS-s_modf.c += -fsignaling-nans
 CFLAGS-s_modff.c += -fsignaling-nans
 CFLAGS-s_modfl.c += -fsignaling-nans
+CFLAGS-s_modff128.c += -fsignaling-nans
 
 # The -lieee library is actually an object file.
 # The module just defines the _LIB_VERSION_ variable.
diff --git a/sysdeps/ieee754/float128/Makeconfig b/sysdeps/ieee754/float128/Makeconfig
new file mode 100644
index 0000000..6c385d2
--- /dev/null
+++ b/sysdeps/ieee754/float128/Makeconfig
@@ -0,0 +1,3 @@ 
+# Include this earlier so it can be used earlier in Makefiles,
+# and sysdep/ makefiles.
+float128-fcts = yes
diff --git a/sysdeps/ieee754/float128/Versions b/sysdeps/ieee754/float128/Versions
new file mode 100644
index 0000000..cee823b
--- /dev/null
+++ b/sysdeps/ieee754/float128/Versions
@@ -0,0 +1,133 @@ 
+%include <float128-abi.h>
+%ifndef FLOAT128_VERSION
+% error "float128-abi.h must define FLOAT128_VERSION"
+%endif
+libm {
+  FLOAT128_VERSION {
+    acosf128;
+    acoshf128;
+    asinf128;
+    asinhf128;
+    atan2f128;
+    atanf128;
+    atanhf128;
+    copysignf128;
+    cosf128;
+    coshf128;
+    erff128;
+    erfcf128;
+    exp2f128;
+    expf128;
+    expm1f128;
+    fabsf128;
+    fdimf128;
+    floorf128;
+    fmaf128;
+    fmaxf128;
+    fminf128;
+    fmodf128;
+    frexpf128;
+    getpayloadf128;
+    hypotf128;
+    ilogbf128;
+    ldexpf128;
+    lgammaf128;
+    llrintf128;
+    llroundf128;
+    log10f128;
+    log1pf128;
+    log2f128;
+    logf128;
+    logbf128;
+    lrintf128;
+    lroundf128;
+    modff128;
+    nanf128;
+    nearbyintf128;
+    nextafterf128;
+    nextdownf128;
+    nextupf128;
+    powf128;
+    remainderf128;
+    remquof128;
+    rintf128;
+    roundf128;
+    scalblnf128;
+    scalbnf128;
+    sinf128;
+    sinhf128;
+    sqrtf128;
+    tanf128;
+    tanhf128;
+    tgammaf128;
+    totalorderf128;
+    totalordermagf128;
+    truncf128;
+    exp10f128;
+    j0f128;
+    j1f128;
+    jnf128;
+    lgammaf128_r;
+    sincosf128;
+    y0f128;
+    y1f128;
+    ynf128;
+    __finitef128;
+    __fpclassifyf128;
+    __isinff128;
+    __isnanf128;
+    __issignalingf128;
+    __signbitf128;
+    cabsf128;
+    cacosf128;
+    cacoshf128;
+    cargf128;
+    casinf128;
+    casinhf128;
+    catanf128;
+    catanhf128;
+    cbrtf128;
+    ccosf128;
+    ccoshf128;
+    ceilf128;
+    cexpf128;
+    cimagf128;
+    clogf128;
+    conjf128;
+    cprojf128;
+    crealf128;
+    csinf128;
+    csinhf128;
+    csqrtf128;
+    ctanf128;
+    ctanhf128;
+    cpowf128;
+    clog10f128;
+    __acosf128_finite;
+    __acoshf128_finite;
+    __asinf128_finite;
+    __atan2f128_finite;
+    __atanhf128_finite;
+    __coshf128_finite;
+    __exp2f128_finite;
+    __expf128_finite;
+    __fmodf128_finite;
+    __hypotf128_finite;
+    __lgammaf128_r_finite;
+    __log10f128_finite;
+    __log2f128_finite;
+    __logf128_finite;
+    __powf128_finite;
+    __remainderf128_finite;
+    __sinhf128_finite;
+    __sqrtf128_finite;
+    __gammaf128_r_finite;
+    __exp10f128_finite;
+    __j0f128_finite;
+    __j1f128_finite;
+    __jnf128_finite;
+    __y0f128_finite;
+    __y1f128_finite;
+    __ynf128_finite;
+  }
+}