Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2022-12-16 20:28:48 +0300
committerJeff Johnston <jjohnstn@redhat.com>2022-12-16 20:28:48 +0300
commitc04c01524d20611fc14a17d2607e9c50bf5cc83e (patch)
treee9c2886c9d6aba743d1446029aedb8ba24fa56d2 /newlib/libm
parentabf672604bd0d8a2ad9f2ec7cae76ad5905c3092 (diff)
Revert "amdgcn: Add vectorized math routines"
This reverts commit 125e39bfea1a39341a60348c93a65cf4894e0f2a.
Diffstat (limited to 'newlib/libm')
-rw-r--r--newlib/libm/Makefile.inc3
-rw-r--r--newlib/libm/acinclude.m42
-rw-r--r--newlib/libm/machine/amdgcn/Makefile.inc91
-rw-r--r--newlib/libm/machine/amdgcn/amdgcnmach.h484
-rw-r--r--newlib/libm/machine/amdgcn/v64_mathcnst.c23
-rw-r--r--newlib/libm/machine/amdgcn/v64_reent.c10
-rw-r--r--newlib/libm/machine/amdgcn/v64df_acos.c13
-rw-r--r--newlib/libm/machine/amdgcn/v64df_acosh.c67
-rw-r--r--newlib/libm/machine/amdgcn/v64df_asin.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_asine.c106
-rw-r--r--newlib/libm/machine/amdgcn/v64df_asinh.c67
-rw-r--r--newlib/libm/machine/amdgcn/v64df_atan.c14
-rw-r--r--newlib/libm/machine/amdgcn/v64df_atan2.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_atangent.c132
-rw-r--r--newlib/libm/machine/amdgcn/v64df_atanh.c61
-rw-r--r--newlib/libm/machine/amdgcn/v64df_copysign.c29
-rw-r--r--newlib/libm/machine/amdgcn/v64df_cos.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_cosh.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_erf.c171
-rw-r--r--newlib/libm/machine/amdgcn/v64df_exp.c74
-rw-r--r--newlib/libm/machine/amdgcn/v64df_exp2.c18
-rw-r--r--newlib/libm/machine/amdgcn/v64df_finite.c24
-rw-r--r--newlib/libm/machine/amdgcn/v64df_fmod.c185
-rw-r--r--newlib/libm/machine/amdgcn/v64df_gamma.c10
-rw-r--r--newlib/libm/machine/amdgcn/v64df_hypot.c113
-rw-r--r--newlib/libm/machine/amdgcn/v64df_ilogb.c45
-rw-r--r--newlib/libm/machine/amdgcn/v64df_isnan.c27
-rw-r--r--newlib/libm/machine/amdgcn/v64df_ispos.c18
-rw-r--r--newlib/libm/machine/amdgcn/v64df_lgamma.c30
-rw-r--r--newlib/libm/machine/amdgcn/v64df_lgamma_r.c286
-rw-r--r--newlib/libm/machine/amdgcn/v64df_log.c82
-rw-r--r--newlib/libm/machine/amdgcn/v64df_log10.c21
-rw-r--r--newlib/libm/machine/amdgcn/v64df_log2.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_modf.c66
-rw-r--r--newlib/libm/machine/amdgcn/v64df_numtest.c31
-rw-r--r--newlib/libm/machine/amdgcn/v64df_pow.c322
-rw-r--r--newlib/libm/machine/amdgcn/v64df_remainder.c68
-rw-r--r--newlib/libm/machine/amdgcn/v64df_rint.c69
-rw-r--r--newlib/libm/machine/amdgcn/v64df_scalb.c50
-rw-r--r--newlib/libm/machine/amdgcn/v64df_scalbn.c58
-rw-r--r--newlib/libm/machine/amdgcn/v64df_signif.c25
-rw-r--r--newlib/libm/machine/amdgcn/v64df_sin.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_sine.c97
-rw-r--r--newlib/libm/machine/amdgcn/v64df_sineh.c101
-rw-r--r--newlib/libm/machine/amdgcn/v64df_sinh.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64df_sqrt.c75
-rw-r--r--newlib/libm/machine/amdgcn/v64df_tan.c142
-rw-r--r--newlib/libm/machine/amdgcn/v64df_tanh.c63
-rw-r--r--newlib/libm/machine/amdgcn/v64df_tgamma.c28
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_acos.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_acosh.c66
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_asin.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_asine.c98
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_asinh.c68
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_atan.c13
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_atan2.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_atangent.c123
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_atanh.c61
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_copysign.c29
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_cos.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_cosh.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_erf.c172
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_exp.c88
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_exp2.c18
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_finite.c23
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_fmod.c133
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_gamma.c10
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_hypot.c104
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_ilogb.c42
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_isnan.c23
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_ispos.c11
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_lgamma.c30
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_lgamma_r.c286
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_log.c82
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_log10.c14
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_log2.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_modf.c55
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_numtest.c30
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_pow.c292
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_remainder.c71
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_rint.c62
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_scalb.c59
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_scalbn.c78
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_signif.c24
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_sin.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_sine.c93
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_sineh.c98
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_sinh.c12
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_sqrt.c74
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_tan.c138
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_tanh.c63
-rw-r--r--newlib/libm/machine/amdgcn/v64sf_tgamma.c28
92 files changed, 1 insertions, 6239 deletions
diff --git a/newlib/libm/Makefile.inc b/newlib/libm/Makefile.inc
index 9d1469555..7fda120e5 100644
--- a/newlib/libm/Makefile.inc
+++ b/newlib/libm/Makefile.inc
@@ -51,9 +51,6 @@ include %D%/test/Makefile.inc
if HAVE_LIBM_MACHINE_AARCH64
include %D%/machine/aarch64/Makefile.inc
endif
-if HAVE_LIBM_MACHINE_AMDGCN
-include %D%/machine/amdgcn/Makefile.inc
-endif
if HAVE_LIBM_MACHINE_ARM
include %D%/machine/arm/Makefile.inc
endif
diff --git a/newlib/libm/acinclude.m4 b/newlib/libm/acinclude.m4
index f7f9f534f..0be95a3b2 100644
--- a/newlib/libm/acinclude.m4
+++ b/newlib/libm/acinclude.m4
@@ -4,7 +4,7 @@ m4_include([libm/machine/nds32/acinclude.m4])
dnl Define HAVE_LIBM_MACHINE_<machine> automake conditionals.
m4_foreach_w([MACHINE], [
- aarch64 amdgcn arm i386 mips nds32 powerpc pru sparc spu riscv x86_64
+ aarch64 arm i386 mips nds32 powerpc pru sparc spu riscv x86_64
], [dnl
AM_CONDITIONAL([HAVE_LIBM_MACHINE_]m4_toupper(MACHINE), test "${libm_machine_dir}" = "MACHINE")
])
diff --git a/newlib/libm/machine/amdgcn/Makefile.inc b/newlib/libm/machine/amdgcn/Makefile.inc
deleted file mode 100644
index 9d6a18514..000000000
--- a/newlib/libm/machine/amdgcn/Makefile.inc
+++ /dev/null
@@ -1,91 +0,0 @@
-%C%_src = \
- %D%/v64_mathcnst.c \
- %D%/v64_reent.c \
- %D%/v64df_acos.c \
- %D%/v64df_acosh.c \
- %D%/v64df_asin.c \
- %D%/v64df_asine.c \
- %D%/v64df_asinh.c \
- %D%/v64df_atan.c \
- %D%/v64df_atan2.c \
- %D%/v64df_atangent.c \
- %D%/v64df_atanh.c \
- %D%/v64df_copysign.c \
- %D%/v64df_cos.c \
- %D%/v64df_cosh.c \
- %D%/v64df_erf.c \
- %D%/v64df_exp.c \
- %D%/v64df_exp2.c \
- %D%/v64df_finite.c \
- %D%/v64df_fmod.c \
- %D%/v64df_gamma.c \
- %D%/v64df_hypot.c \
- %D%/v64df_ilogb.c \
- %D%/v64df_isnan.c \
- %D%/v64df_ispos.c \
- %D%/v64df_lgamma.c \
- %D%/v64df_lgamma_r.c \
- %D%/v64df_log.c \
- %D%/v64df_log10.c \
- %D%/v64df_log2.c \
- %D%/v64df_modf.c \
- %D%/v64df_numtest.c \
- %D%/v64df_pow.c \
- %D%/v64df_remainder.c \
- %D%/v64df_rint.c \
- %D%/v64df_scalb.c \
- %D%/v64df_scalbn.c \
- %D%/v64df_signif.c \
- %D%/v64df_sin.c \
- %D%/v64df_sine.c \
- %D%/v64df_sineh.c \
- %D%/v64df_sinh.c \
- %D%/v64df_sqrt.c \
- %D%/v64df_tan.c \
- %D%/v64df_tanh.c \
- %D%/v64df_tgamma.c \
- %D%/v64sf_acos.c \
- %D%/v64sf_acosh.c \
- %D%/v64sf_asin.c \
- %D%/v64sf_asine.c \
- %D%/v64sf_asinh.c \
- %D%/v64sf_atan.c \
- %D%/v64sf_atan2.c \
- %D%/v64sf_atangent.c \
- %D%/v64sf_atanh.c \
- %D%/v64sf_copysign.c \
- %D%/v64sf_cos.c \
- %D%/v64sf_cosh.c \
- %D%/v64sf_erf.c \
- %D%/v64sf_exp.c \
- %D%/v64sf_exp2.c \
- %D%/v64sf_finite.c \
- %D%/v64sf_fmod.c \
- %D%/v64sf_gamma.c \
- %D%/v64sf_hypot.c \
- %D%/v64sf_ilogb.c \
- %D%/v64sf_isnan.c \
- %D%/v64sf_ispos.c \
- %D%/v64sf_lgamma.c \
- %D%/v64sf_lgamma_r.c \
- %D%/v64sf_log.c \
- %D%/v64sf_log10.c \
- %D%/v64sf_log2.c \
- %D%/v64sf_modf.c \
- %D%/v64sf_numtest.c \
- %D%/v64sf_pow.c \
- %D%/v64sf_remainder.c \
- %D%/v64sf_rint.c \
- %D%/v64sf_scalb.c \
- %D%/v64sf_scalbn.c \
- %D%/v64sf_signif.c \
- %D%/v64sf_sin.c \
- %D%/v64sf_sine.c \
- %D%/v64sf_sineh.c \
- %D%/v64sf_sinh.c \
- %D%/v64sf_sqrt.c \
- %D%/v64sf_tan.c \
- %D%/v64sf_tanh.c \
- %D%/v64sf_tgamma.c
-
-libm_a_SOURCES += $(%C%_src)
diff --git a/newlib/libm/machine/amdgcn/amdgcnmach.h b/newlib/libm/machine/amdgcn/amdgcnmach.h
deleted file mode 100644
index 4436a9508..000000000
--- a/newlib/libm/machine/amdgcn/amdgcnmach.h
+++ /dev/null
@@ -1,484 +0,0 @@
-/* Optimization at -O2 and above currently result in ICEs when converting
- between vector types. */
-#pragma GCC optimize ("O1")
-
-#include <errno.h>
-#include <sys/types.h>
-#include <machine/ieeefp.h>
-
-typedef float v2sf __attribute__ ((vector_size (8)));
-typedef float v4sf __attribute__ ((vector_size (16)));
-typedef float v8sf __attribute__ ((vector_size (32)));
-typedef float v16sf __attribute__ ((vector_size (64)));
-typedef float v32sf __attribute__ ((vector_size (128)));
-typedef float v64sf __attribute__ ((vector_size (256)));
-
-typedef double v2df __attribute__ ((vector_size (16)));
-typedef double v4df __attribute__ ((vector_size (32)));
-typedef double v8df __attribute__ ((vector_size (64)));
-typedef double v16df __attribute__ ((vector_size (128)));
-typedef double v32df __attribute__ ((vector_size (256)));
-typedef double v64df __attribute__ ((vector_size (512)));
-
-typedef int v2si __attribute__ ((vector_size (8)));
-typedef int v4si __attribute__ ((vector_size (16)));
-typedef int v8si __attribute__ ((vector_size (32)));
-typedef int v16si __attribute__ ((vector_size (64)));
-typedef int v32si __attribute__ ((vector_size (128)));
-typedef int v64si __attribute__ ((vector_size (256)));
-
-typedef unsigned int v64usi __attribute__ ((vector_size (256)));
-
-typedef long v2di __attribute__ ((vector_size (16)));
-typedef long v4di __attribute__ ((vector_size (32)));
-typedef long v8di __attribute__ ((vector_size (64)));
-typedef long v16di __attribute__ ((vector_size (128)));
-typedef long v32di __attribute__ ((vector_size (256)));
-typedef long v64di __attribute__ ((vector_size (512)));
-
-typedef union {
- v2sf t_v2sf;
- v4sf t_v4sf;
- v8sf t_v8sf;
- v16sf t_v16sf;
- v32sf t_v32sf;
- v64sf t_v64sf;
-
- v2df t_v2df;
- v4df t_v4df;
- v8df t_v8df;
- v16df t_v16df;
- v32df t_v32df;
- v64df t_v64df;
-
- v2si t_v2si;
- v4si t_v4si;
- v8si t_v8si;
- v16si t_v16si;
- v32si t_v32si;
- v64si t_v64si;
-
- v64usi t_v64usi;
-
- v2di t_v2di;
- v4di t_v4di;
- v8di t_v8di;
- v16di t_v16di;
- v32di t_v32di;
- v64di t_v64di;
-} vector_union;
-
-/* Cast between vectors with a different number of elements. */
-
-#define RESIZE_VECTOR(to_t, from) \
-({ \
- __auto_type __from = (from); \
- *((to_t *) &__from); \
-})
-
-/* Bit-wise cast vector FROM to type TO_T. */
-
-#define CAST_VECTOR(to_t, from) \
-({ \
- _Static_assert (sizeof (to_t) == sizeof (from)); \
- union { \
- typeof (from) __from; \
- to_t __to; \
- } __tmp; \
- __tmp.__from = (from); \
- __tmp.__to; \
-})
-
-#define EXTRACT_WORDS(hi, lo, x) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64df = (x); \
- hi = __builtin_convertvector (__tmp.t_v64di >> 32, typeof (hi)); \
- lo = __builtin_convertvector (__tmp.t_v64di & 0xffffffff, typeof (lo)); \
-} while (0)
-
-#define INSERT_WORDS(x, hi, lo, cond) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64di = __builtin_convertvector (hi, v64di) << 32 | \
- __builtin_convertvector (lo, v64di) & 0xffffffff; \
- VECTOR_COND_MOVE (x, __tmp.t_v64df, cond); \
-} while (0)
-
-#define GET_HIGH_WORD(x, y, cond) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64df = (y); \
- VECTOR_COND_MOVE (x, __builtin_convertvector (__tmp.t_v64di >> 32, v64si), \
- (cond)); \
-} while (0)
-
-#define GET_LOW_WORD(x, y, cond) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64df = (y); \
- VECTOR_COND_MOVE (x, __builtin_convertvector (__tmp.t_v64di & 0xffffffff, \
- v64si), (cond)); \
-} while (0)
-
-#define SET_HIGH_WORD(x, y, cond) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64df = x; \
- __tmp.t_v64di &= 0xffffffff; \
- __tmp.t_v64di |= __builtin_convertvector (y, v64di) << 32; \
- VECTOR_COND_MOVE (x, __tmp.t_v64df, (cond)); \
-} while (0)
-
-#define SET_LOW_WORD(x, y, cond) \
-do { \
- vector_union __tmp; \
- __tmp.t_v64df = x; \
- __tmp.t_v64di &= 0xffffffff00000000ULL; \
- __tmp.t_v64di |= __builtin_convertvector (y, v64di); \
- VECTOR_COND_MOVE (x, __tmp.t_v64df, (cond)); \
- } while (0)
-
-#define GET_FLOAT_WORD(x, y, cond) \
- VECTOR_COND_MOVE(x, CAST_VECTOR(v64si, (y)), (cond))
-
-#define SET_FLOAT_WORD(x, y, cond) \
- VECTOR_COND_MOVE(x, CAST_VECTOR(v64sf, (y)), (cond))
-
-#define NO_COND __mask
-
-/* Note - __mask is _not_ accounted for in VECTOR_MERGE! */
-#define VECTOR_MERGE(vec1, vec2, cond) \
-({ \
- _Static_assert (__builtin_types_compatible_p (typeof (vec1), typeof (vec2))); \
- union { \
- typeof (vec1) val; \
- v64si t_v64si; \
- v64di t_v64di; \
- } __vec1, __vec2, __res; \
- __vec1.val = (vec1); \
- __vec2.val = (vec2); \
- __builtin_choose_expr ( \
- sizeof (vec1) == sizeof (v64si), \
- ({ \
- v64si __bitmask = __builtin_convertvector ((cond), v64si); \
- __res.t_v64si = (__vec1.t_v64si & __bitmask) \
- | (__vec2.t_v64si & ~__bitmask); \
- }), \
- ({ \
- v64di __bitmask = __builtin_convertvector ((cond), v64di); \
- __res.t_v64di = (__vec1.t_v64di & __bitmask) \
- | (__vec2.t_v64di & ~__bitmask); \
- })); \
- __res.val; \
-})
-
-#define VECTOR_RETURN(retval, cond) \
-do { \
- _Static_assert (__builtin_types_compatible_p (typeof (retval), typeof (__ret))); \
- __auto_type __cond = __builtin_convertvector ((cond), typeof (__mask)); \
- __auto_type __retval = (retval); \
- VECTOR_COND_MOVE (__ret, __retval, __cond); \
- __mask &= ~__cond; \
-} while (0)
-
-#define VECTOR_COND_MOVE(var, val, cond) \
-do { \
- _Static_assert (__builtin_types_compatible_p (typeof (var), typeof (val))); \
- __auto_type __cond = __builtin_convertvector ((cond), typeof (__mask)); \
- var = VECTOR_MERGE ((val), var, __cond & __mask); \
-} while (0)
-
-#define VECTOR_IF(cond, cond_var) \
-{ \
- __auto_type cond_var = (cond); \
- __auto_type __inv_cond = ~cond_var; \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-#define VECTOR_ELSEIF(cond, cond_var) \
- } \
- cond_var = __inv_cond & (cond); \
- __inv_cond &= ~(cond); \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-#define VECTOR_ELSE(cond_var) \
- } \
- cond_var = __inv_cond; \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-#define VECTOR_IF2(cond, cond_var, prev_cond_var) \
-{ \
- __auto_type cond_var = (cond) & __builtin_convertvector (prev_cond_var, typeof (cond)); \
- __auto_type __inv_cond = ~(cond); \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-#define VECTOR_ELSEIF2(cond, cond_var, prev_cond_var) \
- } \
- cond_var = (cond) & __inv_cond & __builtin_convertvector (prev_cond_var, typeof (cond)); \
- __inv_cond &= ~(cond); \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-#define VECTOR_ELSE2(cond_var, prev_cond_var) \
- } \
- cond_var = __inv_cond & __builtin_convertvector (prev_cond_var, typeof (__inv_cond)); \
- if (!ALL_ZEROES_P (cond_var)) \
- {
-
-
-#define VECTOR_ENDIF \
- } \
-}
-
-#define VECTOR_INIT_AUX(x, type) \
-({ \
- typeof (x) __e = (x); \
- type __tmp = { \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e, \
- __e, __e, __e, __e, __e, __e, __e, __e }; \
- __tmp; \
-})
-
-#define VECTOR_INIT(x) \
- (_Generic ((x), int: VECTOR_INIT_AUX ((x), v64si), \
- unsigned: VECTOR_INIT_AUX ((x), v64usi), \
- long: VECTOR_INIT_AUX ((x), v64di), \
- float: VECTOR_INIT_AUX ((x), v64sf), \
- double: VECTOR_INIT_AUX ((x), v64df)))
-
-#define VECTOR_WIDTH(TYPE) (sizeof (TYPE) / (V_SF_SI_P (TYPE) ? 4 : 8))
-
-#define V_SF_SI_P(TYPE) \
- (__builtin_types_compatible_p (TYPE, v2sf) \
- || __builtin_types_compatible_p (TYPE, v4sf) \
- || __builtin_types_compatible_p (TYPE, v8sf) \
- || __builtin_types_compatible_p (TYPE, v16sf) \
- || __builtin_types_compatible_p (TYPE, v32sf) \
- || __builtin_types_compatible_p (TYPE, v64sf) \
- || __builtin_types_compatible_p (TYPE, v2si) \
- || __builtin_types_compatible_p (TYPE, v4si) \
- || __builtin_types_compatible_p (TYPE, v8si) \
- || __builtin_types_compatible_p (TYPE, v16si) \
- || __builtin_types_compatible_p (TYPE, v32si) \
- || __builtin_types_compatible_p (TYPE, v64si))
-
-#define VECTOR_INIT_MASK(TYPE) \
-({ \
- vector_union __mask; \
- __mask.t_v64di = VECTOR_INIT (0L); \
- for (int i = 0; i < VECTOR_WIDTH (TYPE); i++) \
- __mask.t_v64di[i] = -1; \
- __builtin_choose_expr (V_SF_SI_P (TYPE), __mask.t_v64si, __mask.t_v64di); \
-})
-
-#define ALL_ZEROES_P(x) (COND_TO_BITMASK(x) == 0)
-
-#define COND_TO_BITMASK(x) \
-({ \
- long __tmp = 0; \
- __auto_type __x = __builtin_convertvector((x), typeof (__mask)) & __mask; \
- __builtin_choose_expr (sizeof (__mask) == 256, \
- ({ asm ("v_cmp_ne_u32_e64 %0, %1, 0" \
- : "=Sg" (__tmp) \
- : "v" (__x)); }), \
- ({ asm ("v_cmp_ne_u64_e64 %0, %1, 0" \
- : "=Sg" (__tmp) \
- : "v" (__x)); })); \
- __tmp; \
-})
-
-#define VECTOR_WHILE(cond, cond_var, prev_cond_var) \
-{ \
- __auto_type cond_var = prev_cond_var; \
- for (;;) { \
- cond_var &= (cond); \
- if (ALL_ZEROES_P (cond_var)) \
- break;
-
-#define VECTOR_ENDWHILE \
- } \
-}
-
-#define DEF_VS_MATH_FUNC(rettype, name, args...) \
- rettype v64sf##_##name##_aux (args, v64si __mask)
-
-#define DEF_VD_MATH_FUNC(rettype, name, args...) \
- rettype v64df##_##name##_aux (args, v64di __mask)
-
-/* Use this for predicate functions that take a vector of doubles but
- return a vector of ints. */
-#define DEF_VD_MATH_PRED(rettype, name, args...) \
- rettype v64df##_##name##_aux (args, v64si __mask)
-
-#define FUNCTION_INIT(rettype) \
- rettype __ret
-
-#define FUNCTION_RETURN \
- return __ret
-
-#define DEF_VARIANT(FUN, TRET, TARG, COUNT) \
-v##COUNT##TRET \
-v##COUNT##TARG##_##FUN (v##COUNT##TARG __arg) \
-{ \
- __auto_type __upsized_arg = RESIZE_VECTOR (v64##TARG, __arg); \
- __auto_type __mask = VECTOR_INIT_MASK (v##COUNT##TRET); \
- __auto_type __result = v64##TARG##_##FUN##_aux (__upsized_arg, __mask); \
- return RESIZE_VECTOR (v##COUNT##TRET, __result); \
-}
-
-#define DEF_VARIANT2(FUN, TRET, TARG, COUNT) \
-v##COUNT##TRET \
-v##COUNT##TARG##_##FUN (v##COUNT##TARG __arg1, v##COUNT##TARG __arg2) \
-{ \
- __auto_type __upsized_arg1 = RESIZE_VECTOR (v64##TARG, __arg1); \
- __auto_type __upsized_arg2 = RESIZE_VECTOR (v64##TARG, __arg2); \
- __auto_type __mask = VECTOR_INIT_MASK (v##COUNT##TRET); \
- __auto_type __result = v64##TARG##_##FUN##_aux (__upsized_arg1, __upsized_arg2, __mask); \
- return RESIZE_VECTOR (v##COUNT##TRET, __result); \
-}
-
-#define DEF_VARIANTS(FUN, RETTYPE, ARGTYPE) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 2) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 4) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 8) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 16) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 32) \
- DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 64)
-
-#define DEF_VARIANTS2(FUN, RETTYPE, ARGTYPE) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 2) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 4) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 8) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 16) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 32) \
- DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 64)
-
-/* From fdlibm.h */
-
-#ifdef _FLT_LARGEST_EXPONENT_IS_NORMAL
-#define FLT_UWORD_IS_FINITE(x) ((x) == (x))
-#define FLT_UWORD_IS_NAN(x) ((x) != (x))
-#define FLT_UWORD_IS_INFINITE(x) ((x) != (x))
-#define FLT_UWORD_MAX 0x7fffffff
-#define FLT_UWORD_EXP_MAX 0x43010000
-#define FLT_UWORD_LOG_MAX 0x42b2d4fc
-#define FLT_UWORD_LOG_2MAX 0x42b437e0
-#define HUGE ((float)0X1.FFFFFEP128)
-#else
-#define FLT_UWORD_IS_FINITE(x) ((x)<0x7f800000)
-#define FLT_UWORD_IS_NAN(x) ((x)>0x7f800000)
-#define FLT_UWORD_IS_INFINITE(x) ((x)==0x7f800000)
-#define FLT_UWORD_MAX 0x7f7fffffL
-#define FLT_UWORD_EXP_MAX 0x43000000
-#define FLT_UWORD_LOG_MAX 0x42b17217
-#define FLT_UWORD_LOG_2MAX 0x42b2d4fc
-#define HUGE ((float)3.40282346638528860e+38)
-#endif
-#define FLT_UWORD_HALF_MAX (FLT_UWORD_MAX-(1L<<23))
-#define FLT_LARGEST_EXP (FLT_UWORD_MAX>>23)
-
-#ifdef _FLT_NO_DENORMALS
-#define FLT_UWORD_IS_ZERO(x) ((x)<0x00800000)
-#define FLT_UWORD_IS_SUBNORMAL(x) ((x) != (x))
-#define FLT_UWORD_MIN 0x00800000
-#define FLT_UWORD_EXP_MIN 0x42fc0000
-#define FLT_UWORD_LOG_MIN 0x42aeac50
-#define FLT_SMALLEST_EXP 1
-#else
-#define FLT_UWORD_IS_ZERO(x) ((x)==0)
-#define FLT_UWORD_IS_SUBNORMAL(x) ((x)<0x00800000)
-#define FLT_UWORD_MIN 0x00000001
-#define FLT_UWORD_EXP_MIN 0x43160000
-#define FLT_UWORD_LOG_MIN 0x42cff1b5
-#define FLT_SMALLEST_EXP -22
-#endif
-
-/* From zmath.h */
-
-#define NUM 3
-#define NAN 2
-#define INF 1
-
-#define __PI 3.14159265358979323846
-#define __SQRT_HALF 0.70710678118654752440
-#define __PI_OVER_TWO 1.57079632679489661923132
-#define __INV_PI_OVER_TWO_2_24 10680707.430881743590348355907974
-
-typedef const union
-{
- unsigned int l[2];
- double d;
-} udouble;
-
-typedef const union
-{
- unsigned int l;
- float f;
-} ufloat;
-
-extern double BIGX;
-extern double SMALLX;
-
-extern udouble z_infinity;
-extern udouble z_notanum;
-extern double z_rooteps;
-
-extern ufloat z_infinity_f;
-extern ufloat z_notanum_f;
-extern float z_rooteps_f;
-
-/* From math_errf.c */
-
-static v64sf v64sf_math_oflowf (v64si sign)
-{
- errno = ERANGE;
- return VECTOR_MERGE (VECTOR_INIT (-0x1p97f),
- VECTOR_INIT (0x1p97f), sign) * 0x1p97f;
-}
-
-static v64sf v64sf_math_uflowf (v64si sign)
-{
- errno = ERANGE;
- return VECTOR_MERGE (VECTOR_INIT (-0x1p-95f),
- VECTOR_INIT (0x1p-95f), sign) * 0x1p-95f;
-}
-
-/* From math_config.h */
-
-static v64si v64sf_issignalingf_inline (v64sf x)
-{
- v64si __mask = VECTOR_INIT (-1);
- v64si ix;
- GET_FLOAT_WORD (ix, x, NO_COND);
- /* Use IEEE-754 2008 encoding - i.e. exponent bits all 1, MSB of
- significand is 0 for signalling NaN. */
- return ((ix & 0x7f800000) == 0x7f800000) & ((ix & 0x00400000) == 0);
-}
-
-/* Vector extensions to sys/reent.h */
-
-struct v64_reent {
- v64si _v64si_gamma_signgam;
-};
-
-extern struct v64_reent *_v64_reent;
-#define _V64_REENT _v64_reent
-
-#define _REENT_V64SI_SIGNGAM(ptr) ((ptr)->_v64si_gamma_signgam)
-
-/* Vector extensions to math.h */
-
-#define v64si_signgam (*__v64si_signgam())
-extern v64si* __v64si_signgam (void);
-#define __v64si_signgam_r(ptr) _REENT_V64SI_SIGNGAM(ptr)
-
diff --git a/newlib/libm/machine/amdgcn/v64_mathcnst.c b/newlib/libm/machine/amdgcn/v64_mathcnst.c
deleted file mode 100644
index 58cb99b01..000000000
--- a/newlib/libm/machine/amdgcn/v64_mathcnst.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Based on newlib/libm/mathfp/s_mathcnst.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-double BIGX = 7.09782712893383973096e+02;
-double SMALLX = -7.45133219101941108420e+02;
-double z_rooteps = 7.4505859692e-9;
-float z_rooteps_f = 1.7263349182589107e-4;
-
-ufloat z_hugeval_f = { 0x7f800000 };
-ufloat z_infinity_f = { 0x7f800000 };
-ufloat z_notanum_f = { 0x7fd00000 };
-
-#ifdef __IEEE_BIG_ENDIAN
-udouble z_hugeval = { 0x7ff00000, 0 };
-udouble z_infinity = { 0x7ff00000, 0 };
-udouble z_notanum = { 0xeff80000, 0 };
-#else /* __IEEE_LITTLE_ENDIAN */
-udouble z_hugeval = { 0, 0x7ff00000 };
-udouble z_infinity = { 0, 0x7ff00000 };
-udouble z_notanum = { 0, 0x7ff80000 };
-#endif /* __IEEE_LITTLE_ENDIAN */
-
diff --git a/newlib/libm/machine/amdgcn/v64_reent.c b/newlib/libm/machine/amdgcn/v64_reent.c
deleted file mode 100644
index e9c350a8d..000000000
--- a/newlib/libm/machine/amdgcn/v64_reent.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "amdgcnmach.h"
-
-static struct v64_reent __reent;
-struct v64_reent *_v64_reent = &__reent;
-
-v64si*
-__v64si_signgam (void)
-{
- return &_REENT_V64SI_SIGNGAM(_V64_REENT);
-} \ No newline at end of file
diff --git a/newlib/libm/machine/amdgcn/v64df_acos.c b/newlib/libm/machine/amdgcn/v64df_acos.c
deleted file mode 100644
index e96509569..000000000
--- a/newlib/libm/machine/amdgcn/v64df_acos.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Based on newlib/libm/mathfp/s_acos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_asine_aux (v64df x, int acosine, v64di);
-
-DEF_VD_MATH_FUNC (v64df, acos, v64df x)
-{
- return v64df_asine_aux(x, 1, __mask);
-}
-
-DEF_VARIANTS (acos, df, df)
-
diff --git a/newlib/libm/machine/amdgcn/v64df_acosh.c b/newlib/libm/machine/amdgcn/v64df_acosh.c
deleted file mode 100644
index ad7042ba1..000000000
--- a/newlib/libm/machine/amdgcn/v64df_acosh.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/mathfp/e_acosh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_log_aux (v64df, v64di);
-v64df v64df_log1p_aux (v64df, v64di);
-v64df v64df_sqrt_aux (v64df, v64di);
-
-DEF_VD_MATH_FUNC (v64df, acosh, v64df x)
-{
- static const double one = 1.0;
- static const double ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */
-
- FUNCTION_INIT (v64df);
-
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
-
- VECTOR_IF (hx < 0x3ff00000, cond) // x < 1 */
- VECTOR_RETURN ((x-x) / (x-x), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx >=0x41b00000, cond) // x > 2**28 */
- VECTOR_IF2 (hx >=0x7ff00000, cond2, cond) // x is inf of NaN */
- VECTOR_RETURN (x+x, cond2);
- VECTOR_ELSE (cond2)
- /* acosh(huge)=log(2x) */
- VECTOR_RETURN (v64df_log_aux (x, __mask) + ln2, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (((hx - 0x3ff00000) | lx) == 0, cond)
- /* acosh(1) = 0 */
- VECTOR_RETURN (VECTOR_INIT (0.0), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx > 0x40000000, cond) /* 2**28 > x > 2 */
- {
- v64df t = x * x;
- VECTOR_RETURN (v64df_log_aux (2.0*x - one /
- (x + v64df_sqrt_aux (t - one, __mask)),
- __mask),
- cond);
- }
- VECTOR_ELSE (cond) /* 1<x<2 */
- {
- v64df t = x - one;
- VECTOR_RETURN (v64df_log1p_aux (t + v64df_sqrt_aux(2.0*t + t*t, __mask),
- __mask),
- cond);
- }
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (acosh, df, df)
-
diff --git a/newlib/libm/machine/amdgcn/v64df_asin.c b/newlib/libm/machine/amdgcn/v64df_asin.c
deleted file mode 100644
index b1ebe1830..000000000
--- a/newlib/libm/machine/amdgcn/v64df_asin.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_asin.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_asine_aux (v64df x, int acosine, v64di __mask);
-
-DEF_VD_MATH_FUNC (v64df, asin, v64df x)
-{
- return v64df_asine_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (asin, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_asine.c b/newlib/libm/machine/amdgcn/v64df_asine.c
deleted file mode 100644
index 3c40951a6..000000000
--- a/newlib/libm/machine/amdgcn/v64df_asine.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_asine.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_numtest (v64df);
-v64df v64df_sqrt_aux (v64df, v64di);
-
-static const double p[] = { -0.27368494524164255994e+2,
- 0.57208227877891731407e+2,
- -0.39688862997404877339e+2,
- 0.10152522233806463645e+2,
- -0.69674573447350646411 };
-static const double q[] = { -0.16421096714498560795e+3,
- 0.41714430248260412556e+3,
- -0.38186303361750149284e+3,
- 0.15095270841030604719e+3,
- -0.23823859153670238830e+2 };
-static const double a[] = { 0.0, 0.78539816339744830962 };
-static const double b[] = { 1.57079632679489661923, 0.78539816339744830962 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, asine, v64df x, int acosine)
-{
- FUNCTION_INIT (v64df);
-
- v64si branch = VECTOR_INIT (0);
-
- /* Check for special values. */
- v64si i = v64df_numtest (x);
- VECTOR_IF ((i == NAN) | (i == INF), cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_MERGE (x, VECTOR_INIT (z_infinity.d),
- i == NAN),
- cond);
- VECTOR_ENDIF
-
- v64df y = __builtin_gcn_fabsv (x);
- v64df g, res;
-
- VECTOR_IF (y > 0.5, cond)
- VECTOR_COND_MOVE (i, VECTOR_INIT (1 - acosine), cond);
-
- /* Check for range error. */
- VECTOR_IF2 (y > 1.0, cond2, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond2);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (g, (1.0 - y) / 2.0, cond);
- VECTOR_COND_MOVE (y, -2.0 * v64df_sqrt_aux (g, __mask), cond);
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (i, VECTOR_INIT (acosine), cond);
- VECTOR_IF2 (y < z_rooteps, cond2, cond)
- VECTOR_COND_MOVE (res, y, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (g, y * y, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF ((y >= z_rooteps) | __builtin_convertvector(branch, v64di), cond)
- {
- /* Calculate the Taylor series. */
- v64df P = ((((p[4] * g + p[3]) * g + p[2]) * g + p[1]) * g + p[0]) * g;
- v64df Q = ((((g + q[4]) * g + q[3]) * g + q[2]) * g + q[1]) * g + q[0];
- v64df R = P / Q;
-
- VECTOR_COND_MOVE (res, y + y * R, cond);
- }
- VECTOR_ENDIF
-
- v64df a_i = VECTOR_MERGE (VECTOR_INIT (a[1]), VECTOR_INIT (a[0]), i != 0);
-
- /* Calculate asine or acose. */
- if (acosine == 0)
- {
- VECTOR_COND_MOVE (res, (a_i + res) + a_i, NO_COND);
- VECTOR_IF (x < 0.0, cond)
- VECTOR_COND_MOVE (res, -res, cond);
- VECTOR_ENDIF
- }
- else
- {
- v64df b_i = VECTOR_MERGE (VECTOR_INIT(b[1]), VECTOR_INIT(b[0]), i != 0);
-
- VECTOR_IF (x < 0.0, cond)
- VECTOR_COND_MOVE (res, (b_i + res) + b_i, cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (res, (a_i - res) + a_i, cond);
- VECTOR_ENDIF
- }
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_asinh.c b/newlib/libm/machine/amdgcn/v64df_asinh.c
deleted file mode 100644
index 64924b745..000000000
--- a/newlib/libm/machine/amdgcn/v64df_asinh.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/s_asinh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_log_aux (v64df, v64di);
-v64df v64df_log1p_aux (v64df, v64di);
-v64df v64df_sqrt_aux (v64df, v64di);
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, asinh, v64df x)
-{
- static const double one = 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */
- static const double ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */
- static const double huge = 1.00000000000000000000e+300;
-
- FUNCTION_INIT (v64df);
-
- v64df w;
- v64si hx;
- GET_HIGH_WORD (hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF (ix >=0x7ff00000, cond) /* x is inf or NaN */
- VECTOR_RETURN (x + x, cond);
- VECTOR_ENDIF
- VECTOR_IF (ix < 0x3e300000, cond) /* |x|<2**-28 */
- VECTOR_IF2 (__builtin_convertvector(huge+x > one, v64si), cond2, cond) /* return x inexact except 0 */
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (ix > 0x41b00000, cond) /* x > 2**28 */
- VECTOR_COND_MOVE (w, v64df_log_aux (__builtin_gcn_fabsv (x), __mask) + ln2,
- cond);
- VECTOR_ELSEIF (ix > 0x40000000, cond) /* 2**28 > |x| > 2.0 */
- v64df t = __builtin_gcn_fabsv (x);
- VECTOR_COND_MOVE (w, v64df_log_aux (2.0 * t + one / (v64df_sqrt_aux (x*x + one, __mask) + t), __mask),
- cond);
- VECTOR_ELSE (cond) /* 2.0 > |x| > 2**-28 */
- v64df t = x * x;
- VECTOR_COND_MOVE (w, v64df_log1p_aux (__builtin_gcn_fabsv (x) + t / (one + v64df_sqrt_aux (one + t, __mask)), __mask),
- cond);
- VECTOR_ENDIF
-
- VECTOR_IF (hx > 0, cond)
- VECTOR_RETURN (w, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (-w, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (asinh, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_atan.c b/newlib/libm/machine/amdgcn/v64df_atan.c
deleted file mode 100644
index 2bf88cf96..000000000
--- a/newlib/libm/machine/amdgcn/v64df_atan.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Based on newlib/libm/mathfp/s_atan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_atangent_aux (v64df, v64df, v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, atan, v64df x)
-{
- return v64df_atangent_aux (x,
- VECTOR_INIT (0.0),
- VECTOR_INIT (0.0), 0, __mask);
-}
-
-DEF_VARIANTS (atan, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_atan2.c b/newlib/libm/machine/amdgcn/v64df_atan2.c
deleted file mode 100644
index b486748f5..000000000
--- a/newlib/libm/machine/amdgcn/v64df_atan2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_atan2.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_atangent_aux (v64df, v64df, v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, atan2, v64df v, v64df u)
-{
- return (v64df_atangent_aux (VECTOR_INIT (0.0), v, u, 1, __mask));
-}
-
-DEF_VARIANTS2 (atan2, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_atangent.c b/newlib/libm/machine/amdgcn/v64df_atangent.c
deleted file mode 100644
index 33ed558aa..000000000
--- a/newlib/libm/machine/amdgcn/v64df_atangent.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_atangent.c in Newlib. */
-
-#include <float.h>
-#include "amdgcnmach.h"
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_fabsv) \
- && __has_builtin (__builtin_gcn_frexpv_exp)
-
-DEF_VD_MATH_FUNC (v64df, atangent, v64df x, v64df v, v64df u, int arctan2)
-{
- static const double ROOT3 = 1.73205080756887729353;
- static const double a[] = { 0.0, 0.52359877559829887308, 1.57079632679489661923,
- 1.04719755119659774615 };
- static const double q[] = { 0.41066306682575781263e+2,
- 0.86157349597130242515e+2,
- 0.59578436142597344465e+2,
- 0.15024001160028576121e+2 };
- static const double p[] = { -0.13688768894191926929e+2,
- -0.20505855195861651981e+2,
- -0.84946240351320683534e+1,
- -0.83758299368150059274 };
- static const float z_rooteps = 7.4505859692e-9;
-
- FUNCTION_INIT (v64df);
-
- v64df zero = VECTOR_INIT (0.0);
- v64df pi = VECTOR_INIT (__PI);
- v64df pi_over_two = VECTOR_INIT (__PI_OVER_TWO);
- v64df res;
- v64si branch = VECTOR_INIT (0);
-
- /* Preparation for calculating arctan2. */
- if (arctan2)
- {
- VECTOR_IF (u == 0.0, cond)
- VECTOR_IF2 (v == 0.0, cond2, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (0.0), cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, pi_over_two, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (~branch, cond)
- /* Get the exponent values of the inputs. */
- v64si expv = __builtin_gcn_frexpv_exp (v);
- v64si expu = __builtin_gcn_frexpv_exp (u);
-
- /* See if a divide will overflow. */
- v64si e = expv - expu;
-
- VECTOR_IF2 (e > DBL_MAX_EXP, cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, pi_over_two, cond2);
- VECTOR_ENDIF
-
- /* Also check for underflow. */
- VECTOR_IF2 (e < DBL_MIN_EXP, cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, zero, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- }
-
- VECTOR_IF (~branch, cond)
- v64df f;
- v64si N = VECTOR_INIT (0);
-
- if (arctan2)
- f = __builtin_gcn_fabsv (v / u);
- else
- f = __builtin_gcn_fabsv (x);
-
- VECTOR_IF2 (__builtin_convertvector(f > 1.0, v64si), cond2, cond)
- VECTOR_COND_MOVE (f, 1.0 / f, cond2);
- VECTOR_COND_MOVE (N, VECTOR_INIT (2), cond2);
- VECTOR_ENDIF
-
- VECTOR_IF2 (__builtin_convertvector(f > (2.0 - ROOT3), v64si), cond2, cond)
- double A = ROOT3 - 1.0;
- VECTOR_COND_MOVE (f, (((A * f - 0.5) - 0.5) + f) / (ROOT3 + f),
- cond2);
- N += cond2 & 1;
- VECTOR_ENDIF
-
- /* Check for values that are too small. */
- VECTOR_IF2 (__builtin_convertvector((-z_rooteps < f) & (f < z_rooteps), v64si), cond2, cond)
- VECTOR_COND_MOVE (res, f, cond2);
-
- /* Calculate the Taylor series. */
- VECTOR_ELSE2 (cond2, cond)
- v64df g = f * f;
- v64df P = (((p[3] * g + p[2]) * g + p[1]) * g + p[0]) * g;
- v64df Q = (((g + q[3]) * g + q[2]) * g + q[1]) * g + q[0];
- v64df R = P / Q;
-
- VECTOR_COND_MOVE (res, f + f * R, cond2);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, cond & (N > 1));
-
- res += VECTOR_MERGE (VECTOR_INIT (a[1]), zero, cond & (N == 1));
- res += VECTOR_MERGE (VECTOR_INIT (a[2]), zero, cond & (N == 2));
- res += VECTOR_MERGE (VECTOR_INIT (a[3]), zero, cond & (N == 3));
- VECTOR_ENDIF
-
- if (arctan2)
- {
- /*if (u < 0.0)*/
- VECTOR_COND_MOVE (res, pi - res, u < 0.0);
- /*if (v < 0.0)*/
- VECTOR_COND_MOVE (res, -res, v < 0.0);
- }
- /*else if (x < 0.0) */
- else
- VECTOR_COND_MOVE (res, -res, x < 0.0);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_atanh.c b/newlib/libm/machine/amdgcn/v64df_atanh.c
deleted file mode 100644
index 3890a63b8..000000000
--- a/newlib/libm/machine/amdgcn/v64df_atanh.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/mathfp/e_atanh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_log1p_aux (v64df, v64di);
-
-DEF_VD_MATH_FUNC (v64df, atanh, v64df x)
-{
- static const double zero = 0.0;
- static const double one = 1.0, huge = 1e300;
-
- FUNCTION_INIT (v64df);
-
- v64df t;
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF ((ix | ((lx | (-lx)) >> 31)) > 0x3ff00000, cond) // |x|>1
- VECTOR_RETURN ((x - x)/(x - x), cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix == 0x3ff00000, cond)
- VECTOR_RETURN (x / zero, cond);
- VECTOR_ENDIF
-
- VECTOR_IF ((ix < 0x3e300000) & __builtin_convertvector((huge + x) > zero, v64si), cond) // x<2**-28
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- SET_HIGH_WORD (x, ix, NO_COND);
-
- VECTOR_IF (ix < 0x3fe00000, cond) // x < 0.5 */
- v64df t2 = x + x;
- VECTOR_COND_MOVE (t, 0.5 * v64df_log1p_aux (t2 + t2 * x / (one - x), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (t, 0.5 * v64df_log1p_aux ((x + x) / (one - x), __mask), cond);
- VECTOR_ENDIF
-
- VECTOR_IF (hx >= 0, cond)
- VECTOR_RETURN (t, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (-t, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (atanh, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_copysign.c b/newlib/libm/machine/amdgcn/v64df_copysign.c
deleted file mode 100644
index 4c7587ee2..000000000
--- a/newlib/libm/machine/amdgcn/v64df_copysign.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_copysign.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VD_MATH_FUNC (v64df, copysign, v64df x, v64df y)
-{
- FUNCTION_INIT (v64df);
-
- v64si hx, hy;
- GET_HIGH_WORD(hx, x, NO_COND);
- GET_HIGH_WORD(hy, y, NO_COND);
- SET_HIGH_WORD(x, (hx & 0x7fffffff) | (hy & 0x80000000), NO_COND);
- VECTOR_RETURN (x, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (copysign, df, df) \ No newline at end of file
diff --git a/newlib/libm/machine/amdgcn/v64df_cos.c b/newlib/libm/machine/amdgcn/v64df_cos.c
deleted file mode 100644
index 0c8c1634f..000000000
--- a/newlib/libm/machine/amdgcn/v64df_cos.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_cos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_sine_aux (v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, cos, v64df x)
-{
- return v64df_sine_aux (x, 1, __mask);
-}
-
-DEF_VARIANTS (cos, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_cosh.c b/newlib/libm/machine/amdgcn/v64df_cosh.c
deleted file mode 100644
index a75e1ae42..000000000
--- a/newlib/libm/machine/amdgcn/v64df_cosh.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_cosh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_sineh_aux (v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, cosh, v64df x)
-{
- return v64df_sineh_aux (x, 1, __mask);
-}
-
-DEF_VARIANTS (cosh, df, df) \ No newline at end of file
diff --git a/newlib/libm/machine/amdgcn/v64df_erf.c b/newlib/libm/machine/amdgcn/v64df_erf.c
deleted file mode 100644
index f7bced683..000000000
--- a/newlib/libm/machine/amdgcn/v64df_erf.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/s_erf.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_exp_aux (v64df, v64di);
-
-static const double
-tiny = 1e-300,
-half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-two = 2.00000000000000000000e+00, /* 0x40000000, 0x00000000 */
-/* c = (float)0.84506291151 */
-erx = 8.45062911510467529297e-01, /* 0x3FEB0AC1, 0x60000000 */
-/*
- * Coefficients for approximation to erf on [0,0.84375]
- */
-efx = 1.28379167095512586316e-01, /* 0x3FC06EBA, 0x8214DB69 */
-efx8= 1.02703333676410069053e+00, /* 0x3FF06EBA, 0x8214DB69 */
-pp0 = 1.28379167095512558561e-01, /* 0x3FC06EBA, 0x8214DB68 */
-pp1 = -3.25042107247001499370e-01, /* 0xBFD4CD7D, 0x691CB913 */
-pp2 = -2.84817495755985104766e-02, /* 0xBF9D2A51, 0xDBD7194F */
-pp3 = -5.77027029648944159157e-03, /* 0xBF77A291, 0x236668E4 */
-pp4 = -2.37630166566501626084e-05, /* 0xBEF8EAD6, 0x120016AC */
-qq1 = 3.97917223959155352819e-01, /* 0x3FD97779, 0xCDDADC09 */
-qq2 = 6.50222499887672944485e-02, /* 0x3FB0A54C, 0x5536CEBA */
-qq3 = 5.08130628187576562776e-03, /* 0x3F74D022, 0xC4D36B0F */
-qq4 = 1.32494738004321644526e-04, /* 0x3F215DC9, 0x221C1A10 */
-qq5 = -3.96022827877536812320e-06, /* 0xBED09C43, 0x42A26120 */
-/*
- * Coefficients for approximation to erf in [0.84375,1.25]
- */
-pa0 = -2.36211856075265944077e-03, /* 0xBF6359B8, 0xBEF77538 */
-pa1 = 4.14856118683748331666e-01, /* 0x3FDA8D00, 0xAD92B34D */
-pa2 = -3.72207876035701323847e-01, /* 0xBFD7D240, 0xFBB8C3F1 */
-pa3 = 3.18346619901161753674e-01, /* 0x3FD45FCA, 0x805120E4 */
-pa4 = -1.10894694282396677476e-01, /* 0xBFBC6398, 0x3D3E28EC */
-pa5 = 3.54783043256182359371e-02, /* 0x3FA22A36, 0x599795EB */
-pa6 = -2.16637559486879084300e-03, /* 0xBF61BF38, 0x0A96073F */
-qa1 = 1.06420880400844228286e-01, /* 0x3FBB3E66, 0x18EEE323 */
-qa2 = 5.40397917702171048937e-01, /* 0x3FE14AF0, 0x92EB6F33 */
-qa3 = 7.18286544141962662868e-02, /* 0x3FB2635C, 0xD99FE9A7 */
-qa4 = 1.26171219808761642112e-01, /* 0x3FC02660, 0xE763351F */
-qa5 = 1.36370839120290507362e-02, /* 0x3F8BEDC2, 0x6B51DD1C */
-qa6 = 1.19844998467991074170e-02, /* 0x3F888B54, 0x5735151D */
-/*
- * Coefficients for approximation to erfc in [1.25,1/0.35]
- */
-ra0 = -9.86494403484714822705e-03, /* 0xBF843412, 0x600D6435 */
-ra1 = -6.93858572707181764372e-01, /* 0xBFE63416, 0xE4BA7360 */
-ra2 = -1.05586262253232909814e+01, /* 0xC0251E04, 0x41B0E726 */
-ra3 = -6.23753324503260060396e+01, /* 0xC04F300A, 0xE4CBA38D */
-ra4 = -1.62396669462573470355e+02, /* 0xC0644CB1, 0x84282266 */
-ra5 = -1.84605092906711035994e+02, /* 0xC067135C, 0xEBCCABB2 */
-ra6 = -8.12874355063065934246e+01, /* 0xC0545265, 0x57E4D2F2 */
-ra7 = -9.81432934416914548592e+00, /* 0xC023A0EF, 0xC69AC25C */
-sa1 = 1.96512716674392571292e+01, /* 0x4033A6B9, 0xBD707687 */
-sa2 = 1.37657754143519042600e+02, /* 0x4061350C, 0x526AE721 */
-sa3 = 4.34565877475229228821e+02, /* 0x407B290D, 0xD58A1A71 */
-sa4 = 6.45387271733267880336e+02, /* 0x40842B19, 0x21EC2868 */
-sa5 = 4.29008140027567833386e+02, /* 0x407AD021, 0x57700314 */
-sa6 = 1.08635005541779435134e+02, /* 0x405B28A3, 0xEE48AE2C */
-sa7 = 6.57024977031928170135e+00, /* 0x401A47EF, 0x8E484A93 */
-sa8 = -6.04244152148580987438e-02, /* 0xBFAEEFF2, 0xEE749A62 */
-/*
- * Coefficients for approximation to erfc in [1/.35,28]
- */
-rb0 = -9.86494292470009928597e-03, /* 0xBF843412, 0x39E86F4A */
-rb1 = -7.99283237680523006574e-01, /* 0xBFE993BA, 0x70C285DE */
-rb2 = -1.77579549177547519889e+01, /* 0xC031C209, 0x555F995A */
-rb3 = -1.60636384855821916062e+02, /* 0xC064145D, 0x43C5ED98 */
-rb4 = -6.37566443368389627722e+02, /* 0xC083EC88, 0x1375F228 */
-rb5 = -1.02509513161107724954e+03, /* 0xC0900461, 0x6A2E5992 */
-rb6 = -4.83519191608651397019e+02, /* 0xC07E384E, 0x9BDC383F */
-sb1 = 3.03380607434824582924e+01, /* 0x403E568B, 0x261D5190 */
-sb2 = 3.25792512996573918826e+02, /* 0x40745CAE, 0x221B9F0A */
-sb3 = 1.53672958608443695994e+03, /* 0x409802EB, 0x189D5118 */
-sb4 = 3.19985821950859553908e+03, /* 0x40A8FFB7, 0x688C246A */
-sb5 = 2.55305040643316442583e+03, /* 0x40A3F219, 0xCEDF3BE6 */
-sb6 = 4.74528541206955367215e+02, /* 0x407DA874, 0xE79FE763 */
-sb7 = -2.24409524465858183362e+01; /* 0xC03670E2, 0x42712D62 */
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, erf, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- v64si hx;
- GET_HIGH_WORD (hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF (ix >= 0x7ff00000, cond) /* erf(nan)=nan */
- v64si i = (hx >> 31) << 1;
- /* erf(+-inf)=+-1 */
- VECTOR_RETURN (__builtin_convertvector (1 - i, v64df) + one / x, cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix < 0x3feb0000, cond) /* |x|<0.84375 */
- VECTOR_IF2 (ix < 0x3e300000, cond2, cond) /* |x|<2**-28 */
- VECTOR_IF2 (ix < 0x00800000, cond3, cond2) /* avoid underflow */
- VECTOR_RETURN (0.125*(8.0*x + efx8*x), cond3);
- VECTOR_ENDIF
- VECTOR_RETURN (x + efx*x, cond2);
- VECTOR_ENDIF
-
- v64df z = x*x;
- v64df r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- v64df s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- v64df y = r/s;
-
- VECTOR_RETURN (x + x*y, cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix < 0x3ff40000, cond) /* 0.84375 <= |x| < 1.25 */
- v64df s = __builtin_gcn_fabsv (x) - one;
- v64df P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- v64df Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- VECTOR_IF2 (hx >= 0, cond2, cond)
- VECTOR_RETURN (erx + P/Q, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (-erx - P/Q, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (ix >= 0x40180000, cond) /* inf>|x|>=6 */
- VECTOR_IF2 (hx >= 0, cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (1.0 - tiny), cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (tiny - 1.0), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- x = __builtin_gcn_fabsv(x);
- v64df s = 1.0 / (x*x);
- v64df R, S;
- VECTOR_IF (ix < 0x4006DB6E, cond) /* |x| < 1/0.35 */
- VECTOR_COND_MOVE (R, ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7)))))), cond);
- VECTOR_COND_MOVE (S, one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8))))))), cond);
- VECTOR_ELSE (cond) /* |x| >= 1/0.35 */
- VECTOR_COND_MOVE (R, rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6))))), cond);
- VECTOR_COND_MOVE (S, one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7)))))), cond);
- VECTOR_ENDIF
-
- v64df z;
- SET_LOW_WORD (z, VECTOR_INIT(0), NO_COND);
- v64df r = v64df_exp_aux (-z*z - 0.5625, __mask)
- * v64df_exp_aux ((z-x)*(z+x) + R/S, __mask);
- VECTOR_RETURN (one - r/x, hx >= 0);
- VECTOR_RETURN (r/x - one, hx < 0);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (erf, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_exp.c b/newlib/libm/machine/amdgcn/v64df_exp.c
deleted file mode 100644
index f6bca1223..000000000
--- a/newlib/libm/machine/amdgcn/v64df_exp.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_exp.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_ispos (v64df);
-v64si v64df_numtest (v64df);
-
-static const double INV_LN2 = 1.4426950408889634074;
-static const double LN2 = 0.6931471805599453094172321;
-static const double p[] = { 0.25, 0.75753180159422776666e-2,
- 0.31555192765684646356e-4 };
-static const double q[] = { 0.5, 0.56817302698551221787e-1,
- 0.63121894374398504557e-3,
- 0.75104028399870046114e-6 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_ldexpv)
-
-DEF_VD_MATH_FUNC (v64df, exp, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- v64si num_type = v64df_numtest (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity.d),
- VECTOR_INIT (0.0),
- v64df_ispos (x)),
- cond);
- VECTOR_ELSEIF (num_type == 0, cond)
- VECTOR_RETURN (VECTOR_INIT (1.0), cond);
- VECTOR_ENDIF
-
- /* Check for out of bounds. */
- VECTOR_IF ((x > BIGX) | (x < SMALLX), cond)
- errno = ERANGE;
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- /* Check for a value too small to calculate. */
- VECTOR_RETURN (VECTOR_INIT (1.0),
- (-z_rooteps_f < x) & (x < z_rooteps_f));
-
- /* Calculate the exponent. */
- v64si Nneg = __builtin_convertvector (x * INV_LN2 - 0.5, v64si);
- v64si Npos = __builtin_convertvector (x * INV_LN2 + 0.5, v64si);
- v64si N = VECTOR_MERGE (Nneg, Npos, x < 0.0);
-
- /* Construct the mantissa. */
- v64df g = x - __builtin_convertvector (N, v64df) * LN2;
- v64df z = g * g;
- v64df P = g * ((p[2] * z + p[1]) * z + p[0]);
- v64df Q = ((q[3] * z + q[2]) * z + q[1]) * z + q[0];
- v64df R = 0.5 + P / (Q - P);
-
- /* Return the floating point value. */
- N++;
- VECTOR_RETURN (__builtin_gcn_ldexpv (R, N), NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (exp, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_exp2.c b/newlib/libm/machine/amdgcn/v64df_exp2.c
deleted file mode 100644
index 9a76fe1c0..000000000
--- a/newlib/libm/machine/amdgcn/v64df_exp2.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * is freely granted, provided that this notice is preserved.
- */
-
-/* Based on newlib/libm/mathfp/s_exp2.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_pow_aux (v64df, v64df, v64di);
-
-DEF_VD_MATH_FUNC (v64df, exp2, v64df x)
-{
- return v64df_pow_aux (VECTOR_INIT (2.0), x, __mask);
-}
-
-DEF_VARIANTS (exp2, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_finite.c b/newlib/libm/machine/amdgcn/v64df_finite.c
deleted file mode 100644
index 41e188b02..000000000
--- a/newlib/libm/machine/amdgcn/v64df_finite.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_finite.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VD_MATH_PRED (v64si, finite, v64df x)
-{
- FUNCTION_INIT (v64si);
- v64si hx;
- GET_HIGH_WORD (hx, x, NO_COND);
- return (((hx & 0x7fffffff) - 0x7ff00000) >> 31) != 0;
-}
-
-DEF_VARIANTS (finite, si, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_fmod.c b/newlib/libm/machine/amdgcn/v64df_fmod.c
deleted file mode 100644
index e583062cf..000000000
--- a/newlib/libm/machine/amdgcn/v64df_fmod.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/s_fmod.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VD_MATH_FUNC (v64df, fmod, v64df x, v64df y)
-{
- FUNCTION_INIT(v64df);
-
- v64si hx, hy, hz;
- v64usi lx, ly, lz;
- EXTRACT_WORDS (hx, lx, x);
- EXTRACT_WORDS (hy, ly, y);
- v64si sx = hx & 0x80000000; /* sign of x */
- hx ^=sx; /* |x| */
- hy &= 0x7fffffff; /* |y| */
-
- v64df zeroes = VECTOR_MERGE (VECTOR_INIT (-0.0),
- VECTOR_INIT (0.0),
- sx != 0);
-
- /* purge off exception values */
- VECTOR_IF (((hy | ly) == 0) | (hx >= 0x7ff00000)
- | ((hy | ((ly | -ly) >> 31)) > 0x7ff00000), cond) // y=0, or x not finite or y is NaN
- VECTOR_RETURN ((x * y) / (x * y), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx <= hy, cond) // |x|<|y| return x
- VECTOR_IF2 ((hx < hy) | (lx < ly), cond2, cond)
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_IF2 (lx == ly, cond2, cond)
- VECTOR_RETURN (zeroes, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* determine ix = ilogb(x) */
- v64si ix;
- VECTOR_IF (hx < 0x00100000, cond) // subnormal x
- VECTOR_IF2 (hx == 0, cond2, cond)
- ix = VECTOR_INIT (-1043);
- for (v64si i = __builtin_convertvector (lx, v64si);
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0));
- VECTOR_ELSE2 (cond2, cond)
- ix = VECTOR_INIT (-1022);
- for (v64si i = __builtin_convertvector (hx << 11, v64si);
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0));
- VECTOR_ENDIF
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (ix, (hx >> 20) - 1023, cond);
- VECTOR_ENDIF
-
- /* determine iy = ilogb(y) */
- v64si iy;
- VECTOR_IF (hy < 0x00100000, cond) // subnormal y
- VECTOR_IF2 (hy == 0, cond2, cond)
- iy = VECTOR_INIT (-1043);
- for (v64si i = __builtin_convertvector (ly, v64si);
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (iy, iy - 1, cond2 & (i > 0));
- VECTOR_ELSE2 (cond2, cond)
- iy = VECTOR_INIT (-1022);
- for (v64si i = __builtin_convertvector (hy << 11, v64si);
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (iy, iy - 1, cond2 & (i > 0));
- VECTOR_ENDIF
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (iy, (hy >> 20) - 1023, cond);
- VECTOR_ENDIF
-
-
-/* set up {hx,lx}, {hy,ly} and align y to x */
- VECTOR_IF (ix >= -1022, cond)
- VECTOR_COND_MOVE (hx, 0x00100000 | (0x000fffff & hx), cond);
- VECTOR_ELSE (cond) // subnormal x, shift x to normal
- {
- v64si n = -1022 - ix;
- VECTOR_IF2 (n <= 31, cond2, cond)
- VECTOR_COND_MOVE (hx, (hx << n) | (lx >> (32 - n)), cond2);
- VECTOR_COND_MOVE (lx, lx << n, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (hx, __builtin_convertvector (lx << (n - 32), v64si), cond2);
- VECTOR_COND_MOVE (lx, VECTOR_INIT (0U), cond2);
- VECTOR_ENDIF
- }
- VECTOR_ENDIF
- VECTOR_IF (iy >= -1022, cond)
- VECTOR_COND_MOVE (hy, 0x00100000 | (0x000fffff & hy), cond);
- VECTOR_ELSE (cond) // subnormal y, shift y to normal
- {
- v64si n = -1022 - iy;
- VECTOR_IF2 (n <= 31, cond2, cond)
- VECTOR_COND_MOVE (hy, (hy << n) | (ly >> (32 - n)), cond2);
- VECTOR_COND_MOVE (ly, ly << n, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (hy, __builtin_convertvector (ly << (n - 32), v64si), cond2);
- VECTOR_COND_MOVE (ly, VECTOR_INIT (0U), cond2);
- VECTOR_ENDIF
- }
- VECTOR_ENDIF
-
-/* fix point fmod */
- v64si n = ix - iy;
- v64si cond = n != 0;
-
- while (!ALL_ZEROES_P (cond))
- {
- hz = hx - hy;
- lz = lx - ly;
- VECTOR_IF2 (lx < ly, cond2, cond)
- VECTOR_COND_MOVE (hz, hz - 1, cond2);
- VECTOR_ENDIF
- VECTOR_IF2 (hz < 0, cond2, cond)
- VECTOR_COND_MOVE (hx, hx + hx + (__builtin_convertvector(lx, v64usi) >> 31), cond2);
- VECTOR_COND_MOVE (lx, lx + lx, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_IF2 ((hz | lz) == 0, cond3, cond2) // return sign(x)*0
- VECTOR_RETURN (zeroes, cond3);
- VECTOR_ENDIF
- VECTOR_COND_MOVE (hx, hz + hz + (__builtin_convertvector(lz, v64usi) >> 31), cond2);
- VECTOR_COND_MOVE (lx, lz + lz, cond2);
- VECTOR_ENDIF
-
- n += cond; // Active lanes should be -1
- cond &= (n != 0);
- }
-
- hz = hx - hy;
- lz = lx - ly;
- VECTOR_COND_MOVE (hz, hz - 1, lx < ly);
- VECTOR_IF (hz >= 0, cond)
- VECTOR_COND_MOVE (hx, hz, cond);
- VECTOR_COND_MOVE (lx, lz, cond);
- VECTOR_ENDIF
-
- /* convert back to floating value and restore the sign */
- VECTOR_RETURN (zeroes, (hx | lx) == 0); // return sign(x)*0
- cond = hx < 0x00100000;
- while (!ALL_ZEROES_P (cond)) // normalize x
- {
- VECTOR_COND_MOVE (hx, hx + hx + (lx >> 31), cond);
- VECTOR_COND_MOVE (lx, lx + lx, cond);
- iy += cond; // Active lanes should be -1
-
- cond &= (hx < 0x00100000);
- }
- VECTOR_IF (iy >= -1022, cond) // normalize output
- VECTOR_COND_MOVE (hx, (hx - 0x00100000) | ((iy + 1023) << 20), cond);
- INSERT_WORDS (x, hx | sx, lx, cond);
- VECTOR_ELSE (cond) // subnormal output */
- n = -1022 - iy;
- VECTOR_IF2 (n <= 20, cond2, cond)
- VECTOR_COND_MOVE (lx, (lx >> n) | (hx << (32 - n)), cond2);
- VECTOR_COND_MOVE (hx, hx >> n, cond2);
- VECTOR_ELSEIF2 (n <= 31, cond2, cond)
- VECTOR_COND_MOVE (lx, __builtin_convertvector ((hx << (32 - n)) | (lx >> n), v64usi), cond2);
- VECTOR_COND_MOVE (hx, sx, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (lx, __builtin_convertvector (hx >> (n - 32), v64usi), cond2);
- VECTOR_COND_MOVE (hx, sx, cond2);
- VECTOR_ENDIF
- INSERT_WORDS (x, hx | sx, lx, cond);
- x *= VECTOR_INIT (1.0); /* create necessary signal */
- VECTOR_ENDIF
-
- VECTOR_RETURN (x, NO_COND); /* exact output */
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (fmod, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_gamma.c b/newlib/libm/machine/amdgcn/v64df_gamma.c
deleted file mode 100644
index 73f27a70c..000000000
--- a/newlib/libm/machine/amdgcn/v64df_gamma.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "amdgcnmach.h"
-
-v64df v64df_lgamma_aux (v64df x, v64di __mask);
-
-DEF_VD_MATH_FUNC (v64df, gamma, v64df x)
-{
- return v64df_lgamma_aux(x, __mask);
-}
-
-DEF_VARIANTS (gamma, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_hypot.c b/newlib/libm/machine/amdgcn/v64df_hypot.c
deleted file mode 100644
index 6cc9fe6ee..000000000
--- a/newlib/libm/machine/amdgcn/v64df_hypot.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/e_hypot.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_sqrt_aux (v64df, v64di);
-
-DEF_VD_MATH_FUNC (v64df, hypot, v64df x, v64df y)
-{
- FUNCTION_INIT (v64df);
-
- v64df a = x;
- v64df b = y;
-
- v64si ha;
- GET_HIGH_WORD (ha, x, NO_COND);
- ha &= 0x7fffffffL;
- v64si hb;
- GET_HIGH_WORD (hb, y, NO_COND);
- hb &= 0x7fffffffL;
-
- VECTOR_IF (hb > ha, cond)
- VECTOR_COND_MOVE (a, y, cond);
- VECTOR_COND_MOVE (b, x, cond);
- v64si j = ha;
- VECTOR_COND_MOVE (ha, hb, cond);
- VECTOR_COND_MOVE (hb, j, cond);
- VECTOR_ENDIF
- SET_HIGH_WORD (a, ha, NO_COND); /* a <- |a| */
- SET_HIGH_WORD (b, hb, NO_COND); /* b <- |b| */
- VECTOR_IF((ha - hb) > 0x3c00000L, cond) // x/y > 2**60 */
- VECTOR_RETURN (a + b, cond);
- VECTOR_ENDIF
-
- v64si k = VECTOR_INIT (0);
-
- VECTOR_IF (ha > 0x5f300000L, cond) /* a>2**500 */
- VECTOR_IF2 (ha >= 0x7ff00000L, cond2, cond) /* Inf or NaN */
- v64df w = a + b; // for sNaN */
- v64si low;
- GET_LOW_WORD (low, a, cond2);
- VECTOR_COND_MOVE (w, a, cond2 & (((ha & 0xfffff) | low) == 0));
- GET_LOW_WORD (low, b, cond2);
- VECTOR_COND_MOVE (w, b, cond2 & (((hb & 0xfffff) | low) == 0));
- VECTOR_RETURN (w, cond);
- VECTOR_ENDIF
- /* scale a and b by 2**-600 */
- VECTOR_COND_MOVE (ha, ha - 0x25800000, cond);
- VECTOR_COND_MOVE (hb, hb - 0x25800000, cond);
- VECTOR_COND_MOVE (k, k + 600, cond);
- SET_HIGH_WORD (a, ha, cond);
- SET_HIGH_WORD (b, hb, cond);
- VECTOR_ENDIF
- VECTOR_IF (hb < 0x20b00000, cond) /* b < 2**-500 */
- VECTOR_IF2 (hb <= 0x000fffff, cond2, cond) /* subnormal b or 0 */
- v64si low;
- GET_LOW_WORD (low, b, cond);
- VECTOR_RETURN (a, cond2 & ((hb | low) == 0));
- /* t1=2^1022 */
- v64df t1 = VECTOR_INIT (0.0);
- SET_HIGH_WORD (t1, VECTOR_INIT (0x7fd00000), cond2);
- VECTOR_COND_MOVE (b, b * t1, cond2);
- VECTOR_COND_MOVE (a, a * t1, cond2);
- VECTOR_COND_MOVE (k, k - 1022, cond2);
- VECTOR_ELSE2 (cond2, cond) /* scale a and b by 2^600 */
- VECTOR_COND_MOVE (ha, ha + 0x25800000, cond2); /* a *= 2^600 */
- VECTOR_COND_MOVE (hb, hb + 0x25800000, cond2); /* b *= 2^600 */
- VECTOR_COND_MOVE (k, k - 600, cond2);
- SET_HIGH_WORD (a, ha, cond2);
- SET_HIGH_WORD (b, hb, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- /* medium size a and b */
- v64df w = a - b;
- VECTOR_IF (w > b, cond)
- v64df t1 = VECTOR_INIT (0.0);
- SET_HIGH_WORD (t1, ha, cond);
- v64df t2 = a - t1;
- VECTOR_COND_MOVE (w, v64df_sqrt_aux (t1*t1 - (b*(-b) - t2 * (a + t1)), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (a, a+a, cond);
- v64df y1 = VECTOR_INIT (0.0);
- SET_HIGH_WORD (y1, hb, cond);
- v64df y2 = b - y1;
- v64df t1;
- SET_HIGH_WORD (t1, ha + 0x00100000, cond);
- v64df t2 = a - t1;
- VECTOR_COND_MOVE (w, v64df_sqrt_aux (t1*y1 - (w*(-w) - (t1*y2 + t2*b)), __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (k != 0, cond)
- v64si high;
- v64df t1 = VECTOR_INIT (1.0);
- GET_HIGH_WORD (high, t1, cond);
- SET_HIGH_WORD (t1, high + (k << 20), cond);
- VECTOR_RETURN (t1 * w, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (w, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (hypot, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_ilogb.c b/newlib/libm/machine/amdgcn/v64df_ilogb.c
deleted file mode 100644
index ea51bf105..000000000
--- a/newlib/libm/machine/amdgcn/v64df_ilogb.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_ilogb.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VD_MATH_PRED (v64si, ilogb, v64df x)
-{
- FUNCTION_INIT(v64si);
- v64si hx, lx, ix;
- EXTRACT_WORDS (hx, lx, x);
- hx &= 0x7fffffff;
- VECTOR_IF (hx < 0x00100000, cond)
- VECTOR_RETURN (VECTOR_INIT (-__INT_MAX__), cond & ((hx | lx) == 0)); // FP_ILOGB0
- VECTOR_IF2 (hx == 0, cond2, cond)
- ix = VECTOR_INIT (-1043);
- for (v64si i = lx;
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0));
- VECTOR_ELSE2 (cond2, cond)
- ix = VECTOR_INIT (-1022);
- for (v64si i = (hx << 11);
- !ALL_ZEROES_P (cond2 & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0));
- VECTOR_ENDIF
- VECTOR_RETURN (ix, cond);
- VECTOR_ENDIF
- VECTOR_RETURN ((hx >> 20) - 1023, hx < 0x7ff00000);
- VECTOR_RETURN (VECTOR_INIT (__INT_MAX__), NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (ilogb, si, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_isnan.c b/newlib/libm/machine/amdgcn/v64df_isnan.c
deleted file mode 100644
index cf0020220..000000000
--- a/newlib/libm/machine/amdgcn/v64df_isnan.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_isnan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VD_MATH_PRED (v64si, isnan, v64df x)
-{
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
- hx &= 0x7fffffff;
- hx |= (lx | (-lx)) >> 31;
- hx = 0x7ff00000 - hx;
-
- return (hx >> 31) != 0;
-}
-
-DEF_VARIANTS (isnan, si, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_ispos.c b/newlib/libm/machine/amdgcn/v64df_ispos.c
deleted file mode 100644
index ee691be41..000000000
--- a/newlib/libm/machine/amdgcn/v64df_ispos.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Based on newlib/libm/mathfp/s_ispos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si
-v64df_ispos (v64df x)
-{
- // Explicitly create mask for internal function.
- v64si __mask = VECTOR_INIT (-1);
- FUNCTION_INIT (v64si);
-
- v64si hx;
- GET_HIGH_WORD (hx, x, NO_COND);
-
- VECTOR_RETURN ((hx & 0x80000000) == 0, NO_COND);
-
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64df_lgamma.c b/newlib/libm/machine/amdgcn/v64df_lgamma.c
deleted file mode 100644
index 4c982dff7..000000000
--- a/newlib/libm/machine/amdgcn/v64df_lgamma.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/w_lgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_finite_aux (v64df x, v64di __mask);
-v64df v64df_lgamma_r_aux (v64df x, v64si *signgamp, v64di __mask);
-
-DEF_VD_MATH_FUNC (v64df, lgamma, v64df x)
-{
- v64df y = v64df_lgamma_r_aux(x, &(_REENT_V64SI_SIGNGAM(_V64_REENT)), __mask);
- if (ALL_ZEROES_P(v64df_finite_aux(y, __mask)) & !ALL_ZEROES_P(v64df_finite_aux(x, __mask))) {
- /* lgamma(finite) overflow */
- errno = ERANGE;
- }
- return y;
-}
-
-DEF_VARIANTS (lgamma, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_lgamma_r.c b/newlib/libm/machine/amdgcn/v64df_lgamma_r.c
deleted file mode 100644
index a9a9a31b7..000000000
--- a/newlib/libm/machine/amdgcn/v64df_lgamma_r.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/er_lgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const double two52= 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
-half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */
-a0 = 7.72156649015328655494e-02, /* 0x3FB3C467, 0xE37DB0C8 */
-a1 = 3.22467033424113591611e-01, /* 0x3FD4A34C, 0xC4A60FAD */
-a2 = 6.73523010531292681824e-02, /* 0x3FB13E00, 0x1A5562A7 */
-a3 = 2.05808084325167332806e-02, /* 0x3F951322, 0xAC92547B */
-a4 = 7.38555086081402883957e-03, /* 0x3F7E404F, 0xB68FEFE8 */
-a5 = 2.89051383673415629091e-03, /* 0x3F67ADD8, 0xCCB7926B */
-a6 = 1.19270763183362067845e-03, /* 0x3F538A94, 0x116F3F5D */
-a7 = 5.10069792153511336608e-04, /* 0x3F40B6C6, 0x89B99C00 */
-a8 = 2.20862790713908385557e-04, /* 0x3F2CF2EC, 0xED10E54D */
-a9 = 1.08011567247583939954e-04, /* 0x3F1C5088, 0x987DFB07 */
-a10 = 2.52144565451257326939e-05, /* 0x3EFA7074, 0x428CFA52 */
-a11 = 4.48640949618915160150e-05, /* 0x3F07858E, 0x90A45837 */
-tc = 1.46163214496836224576e+00, /* 0x3FF762D8, 0x6356BE3F */
-tf = -1.21486290535849611461e-01, /* 0xBFBF19B9, 0xBCC38A42 */
-/* tt = -(tail of tf) */
-tt = -3.63867699703950536541e-18, /* 0xBC50C7CA, 0xA48A971F */
-t0 = 4.83836122723810047042e-01, /* 0x3FDEF72B, 0xC8EE38A2 */
-t1 = -1.47587722994593911752e-01, /* 0xBFC2E427, 0x8DC6C509 */
-t2 = 6.46249402391333854778e-02, /* 0x3FB08B42, 0x94D5419B */
-t3 = -3.27885410759859649565e-02, /* 0xBFA0C9A8, 0xDF35B713 */
-t4 = 1.79706750811820387126e-02, /* 0x3F9266E7, 0x970AF9EC */
-t5 = -1.03142241298341437450e-02, /* 0xBF851F9F, 0xBA91EC6A */
-t6 = 6.10053870246291332635e-03, /* 0x3F78FCE0, 0xE370E344 */
-t7 = -3.68452016781138256760e-03, /* 0xBF6E2EFF, 0xB3E914D7 */
-t8 = 2.25964780900612472250e-03, /* 0x3F6282D3, 0x2E15C915 */
-t9 = -1.40346469989232843813e-03, /* 0xBF56FE8E, 0xBF2D1AF1 */
-t10 = 8.81081882437654011382e-04, /* 0x3F4CDF0C, 0xEF61A8E9 */
-t11 = -5.38595305356740546715e-04, /* 0xBF41A610, 0x9C73E0EC */
-t12 = 3.15632070903625950361e-04, /* 0x3F34AF6D, 0x6C0EBBF7 */
-t13 = -3.12754168375120860518e-04, /* 0xBF347F24, 0xECC38C38 */
-t14 = 3.35529192635519073543e-04, /* 0x3F35FD3E, 0xE8C2D3F4 */
-u0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */
-u1 = 6.32827064025093366517e-01, /* 0x3FE4401E, 0x8B005DFF */
-u2 = 1.45492250137234768737e+00, /* 0x3FF7475C, 0xD119BD6F */
-u3 = 9.77717527963372745603e-01, /* 0x3FEF4976, 0x44EA8450 */
-u4 = 2.28963728064692451092e-01, /* 0x3FCD4EAE, 0xF6010924 */
-u5 = 1.33810918536787660377e-02, /* 0x3F8B678B, 0xBF2BAB09 */
-v1 = 2.45597793713041134822e+00, /* 0x4003A5D7, 0xC2BD619C */
-v2 = 2.12848976379893395361e+00, /* 0x40010725, 0xA42B18F5 */
-v3 = 7.69285150456672783825e-01, /* 0x3FE89DFB, 0xE45050AF */
-v4 = 1.04222645593369134254e-01, /* 0x3FBAAE55, 0xD6537C88 */
-v5 = 3.21709242282423911810e-03, /* 0x3F6A5ABB, 0x57D0CF61 */
-s0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */
-s1 = 2.14982415960608852501e-01, /* 0x3FCB848B, 0x36E20878 */
-s2 = 3.25778796408930981787e-01, /* 0x3FD4D98F, 0x4F139F59 */
-s3 = 1.46350472652464452805e-01, /* 0x3FC2BB9C, 0xBEE5F2F7 */
-s4 = 2.66422703033638609560e-02, /* 0x3F9B481C, 0x7E939961 */
-s5 = 1.84028451407337715652e-03, /* 0x3F5E26B6, 0x7368F239 */
-s6 = 3.19475326584100867617e-05, /* 0x3F00BFEC, 0xDD17E945 */
-r1 = 1.39200533467621045958e+00, /* 0x3FF645A7, 0x62C4AB74 */
-r2 = 7.21935547567138069525e-01, /* 0x3FE71A18, 0x93D3DCDC */
-r3 = 1.71933865632803078993e-01, /* 0x3FC601ED, 0xCCFBDF27 */
-r4 = 1.86459191715652901344e-02, /* 0x3F9317EA, 0x742ED475 */
-r5 = 7.77942496381893596434e-04, /* 0x3F497DDA, 0xCA41A95B */
-r6 = 7.32668430744625636189e-06, /* 0x3EDEBAF7, 0xA5B38140 */
-w0 = 4.18938533204672725052e-01, /* 0x3FDACFE3, 0x90C97D69 */
-w1 = 8.33333333333329678849e-02, /* 0x3FB55555, 0x5555553B */
-w2 = -2.77777777728775536470e-03, /* 0xBF66C16C, 0x16B02E5C */
-w3 = 7.93650558643019558500e-04, /* 0x3F4A019F, 0x98CF38B6 */
-w4 = -5.95187557450339963135e-04, /* 0xBF4380CB, 0x8C0FE741 */
-w5 = 8.36339918996282139126e-04, /* 0x3F4B67BA, 0x4CDAD5D1 */
-w6 = -1.63092934096575273989e-03; /* 0xBF5AB89D, 0x0B9E43E4 */
-
-static const double zero= 0.00000000000000000000e+00;
-
-v64df v64df_cos_aux (v64df x, v64di __mask);
-v64df v64df_log_aux (v64df x, v64di __mask);
-v64df v64df_sin_aux (v64df x, v64di __mask);
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_floorv) \
- && __has_builtin (__builtin_gcn_fabsv)
-
-static v64df
-v64df_sin_pi (v64df x)
-{
- // Explicitly create mask for internal function.
- v64di __mask = VECTOR_INIT (-1L);
- FUNCTION_INIT (v64df);
-
- v64df y, z;
- v64si n, ix;
-
- GET_HIGH_WORD (ix, x, NO_COND);
- ix &= 0x7fffffff;
-
- VECTOR_IF (ix < 0x3fd00000, cond)
- VECTOR_RETURN (v64df_sin_aux (pi * x, __mask), cond);
- VECTOR_ENDIF
- y = -x; /* x is assume negative */
-
- /*
- * argument reduction, make sure inexact flag not raised if input
- * is an integer
- */
- z = __builtin_gcn_floorv (y);
- VECTOR_IF (z != y, cond)
- /* inexact anyway */
- VECTOR_COND_MOVE(y, y * 0.5, cond);
- VECTOR_COND_MOVE(y, 2.0 * (y - __builtin_gcn_floorv (y)), cond); /* y = |x| mod 2.0 */
- VECTOR_COND_MOVE(n, __builtin_convertvector(y * 4.0, v64si), cond);
- VECTOR_ELSE (cond)
- VECTOR_IF2 (__builtin_convertvector(ix >= 0x43400000, v64di), cond2, cond)
- VECTOR_COND_MOVE(y, VECTOR_INIT(zero), cond2);
- VECTOR_COND_MOVE(n, VECTOR_INIT(0), cond2); /* y must be even */
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE(z, y + two52 /* exact */, cond2 & __builtin_convertvector(ix < 0x43300000, v64di));
- GET_LOW_WORD (n, z, cond2);
- VECTOR_COND_MOVE(n, n & 1, cond2);
- VECTOR_COND_MOVE(y, __builtin_convertvector(n, v64df), cond2);
- VECTOR_COND_MOVE(n, n << 2, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (n == 0, cond)
- VECTOR_COND_MOVE(y, v64df_sin_aux (pi * y, __mask), cond);
- VECTOR_ELSEIF (n == 1 | n == 2, cond)
- VECTOR_COND_MOVE(y, v64df_cos_aux (pi * (0.5 - y), __mask), cond);
- VECTOR_ELSEIF (n == 3 | n == 4, cond)
- VECTOR_COND_MOVE(y, v64df_sin_aux (pi * (VECTOR_INIT(one) - y), __mask), cond);
- VECTOR_ELSEIF (n == 5 | n == 6, cond)
- VECTOR_COND_MOVE(y, -v64df_cos_aux (pi * (y - 1.5), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE(y, v64df_sin_aux (pi * (y - 2.0), __mask), cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN(-y, NO_COND);
- FUNCTION_RETURN;
-}
-
-DEF_VD_MATH_FUNC (v64df, lgamma_r, v64df x, v64si *signgamp)
-{
- FUNCTION_INIT (v64df);
-
- v64df t,y,z,nadj = VECTOR_INIT(0.0),p,p1,p2,p3,q,r,w;
- v64si i,hx,lx,ix;
-
- EXTRACT_WORDS(hx,lx,x);
-
- /* purge off +-inf, NaN, +-0, and negative arguments */
- *signgamp = VECTOR_INIT(1);
- ix = hx&0x7fffffff;
- VECTOR_IF(ix>=0x7ff00000, cond)
- VECTOR_RETURN (x*x, cond);
- VECTOR_ENDIF
- VECTOR_IF((ix|lx)==0, cond)
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (hx<0));
- VECTOR_RETURN(one/(x-x), cond);
- VECTOR_ENDIF
- VECTOR_IF (ix < 0x3b900000, cond) /* |x|<2**-70, return -log(|x|) */
- VECTOR_IF2(hx<0, cond2, cond)
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond);
- VECTOR_RETURN (-v64df_log_aux(-x, __mask), cond2);
- VECTOR_ELSE2(cond2, cond)
- VECTOR_RETURN (-v64df_log_aux(x, __mask), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (hx < 0, cond)
- VECTOR_IF2(ix>=0x43300000, cond2, cond) /* |x|>=2**52, must be -integer */
- VECTOR_RETURN(one/(x-x), cond2); /* -integer */
- VECTOR_ENDIF
- VECTOR_COND_MOVE (t, v64df_sin_pi (x), cond);
- VECTOR_IF2(__builtin_convertvector(t==zero, v64si), cond2, cond)
- VECTOR_RETURN(one/(x-x), cond2); /* -integer */
- VECTOR_ENDIF
- VECTOR_COND_MOVE(nadj, v64df_log_aux(VECTOR_INIT(pi)/__builtin_gcn_fabsv(t*x), __mask), cond);
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & __builtin_convertvector(t < zero, v64si));
- VECTOR_COND_MOVE(x, -x, cond);
- VECTOR_ENDIF
-
- /* purge off 1 and 2 */
- VECTOR_IF((((ix-0x3ff00000)|lx)==0)|(((ix-0x40000000)|lx)==0), cond)
- VECTOR_COND_MOVE(r, VECTOR_INIT(0.0), cond);
- /* for x < 2.0 */
- VECTOR_ELSEIF(ix<0x40000000, cond)
- VECTOR_IF2(ix<=0x3feccccc, cond2, cond)
- /* lgamma(x) = lgamma(x+1)-log(x) */
- r = -v64df_log_aux(x, __mask);
- VECTOR_IF2(ix>=0x3FE76944, cond3, cond2)
- VECTOR_COND_MOVE(y, one-x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3);
- VECTOR_ELSEIF2(ix>=0x3FCDA661, cond3, cond2)
- VECTOR_COND_MOVE(y, x-(tc-one), cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3);
- VECTOR_ELSE2(cond3, cond2)
- VECTOR_COND_MOVE(y, x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3);
- VECTOR_ENDIF
- VECTOR_ELSE2(cond2, cond)
- VECTOR_COND_MOVE(r, VECTOR_INIT(zero), cond2);
- VECTOR_IF2(ix>=0x3FFBB4C3, cond3, cond2) /* [1.7316,2] */
- VECTOR_COND_MOVE(y, VECTOR_INIT(2.0)-x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3);
- VECTOR_ELSEIF2(ix>=0x3FF3B4C4, cond3, cond2) /* [1.23,1.73] */
- VECTOR_COND_MOVE(y, x-tc, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3);
- VECTOR_ELSE2(cond3, cond2)
- VECTOR_COND_MOVE(y, x-one, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF2(i==0, cond2, cond)
- VECTOR_COND_MOVE(z, y*y, cond2);
- VECTOR_COND_MOVE(p1, a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))), cond2);
- VECTOR_COND_MOVE(p2, z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))), cond2);
- VECTOR_COND_MOVE(p, y*p1+p2, cond2);
- VECTOR_COND_MOVE(r, r + (p-0.5*y), cond2);
- VECTOR_ELSEIF2(i==1, cond2, cond)
- VECTOR_COND_MOVE(z, y*y, cond2);
- VECTOR_COND_MOVE(w, z*y, cond2);
- VECTOR_COND_MOVE(p1, t0+w*(t3+w*(t6+w*(t9 +w*t12))), cond2); /* parallel comp */
- VECTOR_COND_MOVE(p2, t1+w*(t4+w*(t7+w*(t10+w*t13))), cond2);
- VECTOR_COND_MOVE(p3, t2+w*(t5+w*(t8+w*(t11+w*t14))), cond2);
- VECTOR_COND_MOVE(p, z*p1-(tt-w*(p2+y*p3)), cond2);
- VECTOR_COND_MOVE(r, r + (tf + p), cond2);
- VECTOR_ELSEIF2(i==2, cond2, cond)
- VECTOR_COND_MOVE(p1, y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))), cond2);
- VECTOR_COND_MOVE(p2, one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))), cond2);
- VECTOR_COND_MOVE(r, r + (-0.5*y + p1/p2), cond2);
- VECTOR_ENDIF
- VECTOR_ELSEIF(ix<0x40200000, cond)
- /* x < 8.0 */
- VECTOR_COND_MOVE(i, __builtin_convertvector(x, v64si), cond);
- VECTOR_COND_MOVE(t, VECTOR_INIT(zero), cond);
- VECTOR_COND_MOVE(y, x-__builtin_convertvector(i, v64df), cond);
- VECTOR_COND_MOVE(p, y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))), cond);
- VECTOR_COND_MOVE(q, one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))), cond);
- VECTOR_COND_MOVE(r, half*y+p/q, cond);
- VECTOR_COND_MOVE(z, VECTOR_INIT(one), cond); /* lgamma(1+s) = log(s) + lgamma(s) */
- VECTOR_IF2(i==7, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+6.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i==7 | i==6, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+5.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=5, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+4.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=4, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+3.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=3, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+2.0), cond2);
- VECTOR_COND_MOVE(r, r + v64df_log_aux(z, __mask), cond2);
- VECTOR_ENDIF
- /* 8.0 <= x < 2**58 */
- VECTOR_ELSEIF(ix < 0x43900000, cond)
- VECTOR_COND_MOVE(t, v64df_log_aux(x, __mask), cond);
- VECTOR_COND_MOVE(z, one/x, cond);
- VECTOR_COND_MOVE(y, z*z, cond);
- VECTOR_COND_MOVE(w, w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))), cond);
- VECTOR_COND_MOVE(r, (x-half)*(t-one)+w, cond);
- VECTOR_ELSE(cond)
- /* 2**58 <= x <= inf */
- VECTOR_COND_MOVE(r, x*(v64df_log_aux(x, __mask)-one), cond);
- VECTOR_ENDIF
- VECTOR_IF(hx<0, cond)
- VECTOR_COND_MOVE(r, nadj - r, cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN(r, NO_COND);
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_log.c b/newlib/libm/machine/amdgcn/v64df_log.c
deleted file mode 100644
index 8ed8dec90..000000000
--- a/newlib/libm/machine/amdgcn/v64df_log.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_logarithm.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_finite (v64df);
-v64si v64df_isnan (v64df);
-
-static const double a[] = { -0.64124943423745581147e+02,
- 0.16383943563021534222e+02,
- -0.78956112887481257267 };
-static const double b[] = { -0.76949932108494879777e+03,
- 0.31203222091924532844e+03,
- -0.35667977739034646171e+02 };
-static const double C1 = 22713.0 / 32768.0;
-static const double C2 = 1.428606820309417232e-06;
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_frexpv_mant) \
- && __has_builtin (__builtin_gcn_frexpv_exp) \
-
-DEF_VD_MATH_FUNC (v64df, log, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- /* Check for domain/range errors here. */
- VECTOR_IF (x == 0.0, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (-z_infinity.d), cond);
- VECTOR_ELSEIF (x < 0.0, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond);
- VECTOR_ELSEIF (__builtin_convertvector (~v64df_finite (x), v64di), cond)
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_notanum.d),
- VECTOR_INIT (z_infinity.d),
- v64df_isnan (x)),
- cond);
- VECTOR_ENDIF
-
- /* Get the exponent and mantissa where x = f * 2^N. */
- v64df f = __builtin_gcn_frexpv_mant (x);
- v64si N = __builtin_gcn_frexpv_exp (x);
-
- v64df z = f - 0.5;
-
- VECTOR_IF (f > __SQRT_HALF, cond)
- VECTOR_COND_MOVE (z, (z - 0.5) / (f * 0.5 + 0.5), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (N, N - 1, cond);
- VECTOR_COND_MOVE (z, z / (z * 0.5 + 0.5), cond);
- VECTOR_ENDIF
-
- v64df w = z * z;
-
- /* Use Newton's method with 4 terms. */
- z += z * w * ((a[2] * w + a[1]) * w + a[0]) / (((w + b[2]) * w + b[1]) * w + b[0]);
-
- v64df Nf = __builtin_convertvector (N, v64df);
- VECTOR_COND_MOVE (z, (Nf * C2 + z) + Nf * C1, N != 0);
-
- VECTOR_RETURN (z, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (log, df, df)
-
-DEF_VD_MATH_FUNC (v64df, log1p, v64df x)
-{
- /* TODO: Implement algorithm with better precision. */
- return v64df_log_aux (1 + x, __mask);
-}
-
-DEF_VARIANTS (log1p, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_log10.c b/newlib/libm/machine/amdgcn/v64df_log10.c
deleted file mode 100644
index a3a8921a6..000000000
--- a/newlib/libm/machine/amdgcn/v64df_log10.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_algorithm.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_log_aux (v64df, v64di);
-
-static const double C3 = 0.43429448190325182765;
-
-DEF_VD_MATH_FUNC (v64df, log10, v64df x)
-{
- return v64df_log_aux (x, __mask) * C3;
-}
-
-DEF_VARIANTS (log10, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_log2.c b/newlib/libm/machine/amdgcn/v64df_log2.c
deleted file mode 100644
index bb968a62b..000000000
--- a/newlib/libm/machine/amdgcn/v64df_log2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "amdgcnmach.h"
-
-v64df v64df_log_aux (v64df, v64di);
-
-static const double C3 = 1.4426950408889634073599246810019;
-
-DEF_VD_MATH_FUNC (v64df, log2, v64df x)
-{
- return v64df_log_aux (x, __mask) * C3;
-}
-
-DEF_VARIANTS (log2, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_modf.c b/newlib/libm/machine/amdgcn/v64df_modf.c
deleted file mode 100644
index 1c14c790c..000000000
--- a/newlib/libm/machine/amdgcn/v64df_modf.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_modf.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_numtest (v64df);
-
-DEF_VD_MATH_FUNC (v64df, modf, v64df x, v64df *iptr)
-{
- FUNCTION_INIT (v64df);
- v64df ret_i;
-
- v64si i0, i1;
- EXTRACT_WORDS(i0, i1, x);
- v64si j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; /* exponent of x */
- v64df zero;
- v64si i;
- INSERT_WORDS (zero, i0 & 0x80000000, VECTOR_INIT (0), NO_COND);
-
- VECTOR_IF (j0 < 20, cond) /* integer part in x*/
- VECTOR_IF2 (j0 < 0, cond2, cond) /* |x|<1 */
- VECTOR_COND_MOVE (ret_i, zero, cond2);
- VECTOR_RETURN (x, cond2);
- VECTOR_ELSE2 (cond2, cond)
- i = (0x000fffff) >> j0;
-
- VECTOR_IF2 (((i0 & i) | i1) == 0, cond3, cond2) /* x is integral */
- VECTOR_COND_MOVE (ret_i, x, cond3);
- VECTOR_RETURN (zero, cond3);
- VECTOR_ELSE2 (cond3, cond2)
- INSERT_WORDS (ret_i, i0 & ~i, VECTOR_INIT (0), cond3);
- VECTOR_RETURN (x - ret_i, cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_ELSEIF (j0 > 51, cond) /* no fraction part */
- VECTOR_COND_MOVE (ret_i, x, cond);
- VECTOR_IF2 (v64df_numtest (x) == NAN, cond2, cond)
- VECTOR_COND_MOVE (ret_i, x + x, cond2);
- VECTOR_RETURN (ret_i, cond2); /* x is NaN, return NaN */
- VECTOR_ENDIF
- VECTOR_RETURN (zero, cond); /* return +- 0 */
- VECTOR_ELSE (cond)
- i = 0xffffffff >> (j0 - 20);
- VECTOR_IF2 ((i1 & i) == 0, cond2, cond)
- VECTOR_COND_MOVE (ret_i, x, cond2);
- INSERT_WORDS (x, i0 & 0x80000000, VECTOR_INIT (0), cond2);
- VECTOR_RETURN (x, cond2);
- VECTOR_ELSE2 (cond2, cond)
- INSERT_WORDS (ret_i, i0, i1 & ~i, cond2);
- VECTOR_RETURN (x - ret_i, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- *iptr = ret_i;
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64df_numtest.c b/newlib/libm/machine/amdgcn/v64df_numtest.c
deleted file mode 100644
index 00a5a2243..000000000
--- a/newlib/libm/machine/amdgcn/v64df_numtest.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Based on newlib/libm/mathfp/s_numtest.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si
-v64df_numtest (v64df x)
-{
- // Explicitly create mask for internal function.
- v64si __mask = VECTOR_INIT (-1);
- FUNCTION_INIT (v64si);
-
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
- v64si exp = (hx & 0x7ff00000) >> 20;
-
- /* Check for a zero input. */
- VECTOR_RETURN (VECTOR_INIT (0), x == 0.0);
-
- /* Check for not a number or infinity. */
- VECTOR_IF (exp == 0x7ff, cond)
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (NAN),
- VECTOR_INIT (INF),
- ((hx & 0xf0000) != 0) | (lx != 0)),
- cond);
- /* Otherwise it's a finite value. */
- VECTOR_ELSE (cond)
- VECTOR_RETURN (VECTOR_INIT (NUM), cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64df_pow.c b/newlib/libm/machine/amdgcn/v64df_pow.c
deleted file mode 100644
index 19d5e6b05..000000000
--- a/newlib/libm/machine/amdgcn/v64df_pow.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/math/e_pow.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const double
-bp[] = {1.0, 1.5,},
-dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */
-dp_l[] = { 0.0, 1.35003920212974897128e-08,}, /* 0x3E4CFDEB, 0x43CFD006 */
-zero = 0.0,
-one = 1.0,
-two = 2.0,
-two53 = 9007199254740992.0, /* 0x43400000, 0x00000000 */
- /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */
-L1 = 5.99999999999994648725e-01, /* 0x3FE33333, 0x33333303 */
-L2 = 4.28571428578550184252e-01, /* 0x3FDB6DB6, 0xDB6FABFF */
-L3 = 3.33333329818377432918e-01, /* 0x3FD55555, 0x518F264D */
-L4 = 2.72728123808534006489e-01, /* 0x3FD17460, 0xA91D4101 */
-L5 = 2.30660745775561754067e-01, /* 0x3FCD864A, 0x93C9DB65 */
-L6 = 2.06975017800338417784e-01, /* 0x3FCA7E28, 0x4A454EEF */
-P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
-P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
-P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
-P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
-P5 = 4.13813679705723846039e-08, /* 0x3E663769, 0x72BEA4D0 */
-lg2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */
-lg2_h = 6.93147182464599609375e-01, /* 0x3FE62E43, 0x00000000 */
-lg2_l = -1.90465429995776804525e-09, /* 0xBE205C61, 0x0CA86C39 */
-ovt = 8.0085662595372944372e-0017, /* -(1024-log2(ovfl+.5ulp)) */
-cp = 9.61796693925975554329e-01, /* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */
-cp_h = 9.61796700954437255859e-01, /* 0x3FEEC709, 0xE0000000 =(float)cp */
-cp_l = -7.02846165095275826516e-09, /* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/
-ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */
-ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
-ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
-
-v64df v64df_sqrt_aux (v64df, v64di);
-v64df v64df_scalbn_aux (v64df, v64si, v64di);
-
-static v64df v64df_math_oflow (v64di sign)
-{
- errno = ERANGE;
- return VECTOR_MERGE (VECTOR_INIT (-0x1p769),
- VECTOR_INIT (0x1p769), sign) * 0x1p769;
-}
-
-static v64df v64df_math_uflow (v64di sign)
-{
- errno = ERANGE;
- return VECTOR_MERGE (VECTOR_INIT (-0x1p-767),
- VECTOR_INIT (0x1p-767), sign) * 0x1p-767;
-}
-
-static v64si v64df_issignaling_inline (v64df x)
-{
- v64si __mask = VECTOR_INIT (-1);
- v64si ix;
- GET_HIGH_WORD (ix, x, NO_COND);
- /* Use IEEE-754 2008 encoding - i.e. exponent bits all 1, MSB of
- significand is 0 for signalling NaN. */
- return ((ix & 0x7ff00000) == 0x7ff00000) & ((ix & 0x00080000) == 0);
-}
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, pow, v64df x, v64df y)
-{
- FUNCTION_INIT (v64df);
-
- v64si hx, hy, lx, ly;
- EXTRACT_WORDS(hx,lx,x);
- EXTRACT_WORDS(hy,ly,y);
- v64si ix = hx&0x7fffffff;
- v64si iy = hy&0x7fffffff;
-
- /* y==zero: x**0 = 1 unless x is snan */
- VECTOR_IF ((iy|ly)==0, cond)
- VECTOR_RETURN (x + y, cond & v64df_issignaling_inline(x));
- VECTOR_RETURN (VECTOR_INIT (1.0), cond);
- VECTOR_ENDIF
-
- /* x|y==NaN return NaN unless x==1 then return 1 */
- VECTOR_IF ((ix > 0x7ff00000) | ((ix==0x7ff00000)&(lx!=0))
- | (iy > 0x7ff00000) | ((iy==0x7ff00000)&(ly!=0)), cond)
- VECTOR_RETURN (VECTOR_INIT (1.0), cond & ((hx-0x3ff00000)|lx)==0
- & ~v64df_issignaling_inline(y));
- VECTOR_RETURN (x + y, cond);
- VECTOR_ENDIF
-
- /* determine if y is an odd int when x < 0
- * yisint = 0 ... y is not an integer
- * yisint = 1 ... y is an odd int
- * yisint = 2 ... y is an even int
- */
- v64si yisint = VECTOR_INIT (0);
-
- VECTOR_IF (hx < 0, cond)
- VECTOR_IF2(iy>=0x43400000, cond2, cond)
- VECTOR_COND_MOVE (yisint, VECTOR_INIT (2), cond2); /* even integer y */
- VECTOR_ELSEIF2 (iy>=0x3ff00000, cond2, cond)
- v64si k = (iy>>20)-0x3ff; /* exponent */
- VECTOR_IF2 (k>20, cond3, cond2)
- v64si j = ly>>(52-k);
- VECTOR_COND_MOVE (yisint, 2-(j&1), cond3 & (j<<(52-k))==ly);
- VECTOR_ELSEIF2 (ly==0, cond3, cond2)
- v64si j = iy>>(20-k);
- VECTOR_COND_MOVE (yisint, 2-(j&1), cond3 & (j<<(20-k))==iy);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* special value of y */
- VECTOR_IF (ly==0, cond)
- VECTOR_IF2 (iy==0x7ff00000, cond2, cond) /* y is +-inf */
- VECTOR_IF2 (((ix-0x3ff00000)|lx)==0, cond3, cond2)
- VECTOR_RETURN (VECTOR_INIT (1.0), cond3); /* +-1**+-inf = 1 */
- VECTOR_ELSEIF2 (ix >= 0x3ff00000, cond3, cond2) /* (|x|>1)**+-inf = inf,0 */
- VECTOR_RETURN (y, cond3 & hy>=0);
- VECTOR_RETURN (VECTOR_INIT (0.0), cond3);
- VECTOR_ELSE2 (cond3, cond2) /* (|x|<1)**-,+inf = inf,0 */
- VECTOR_RETURN (-y, cond3 & hy<0);
- VECTOR_RETURN (VECTOR_INIT (0.0), cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF2 (iy==0x3ff00000, cond2, cond) /* y is +-1 */
- VECTOR_RETURN (VECTOR_INIT (1.0) / x, cond2 & hy<0);
- VECTOR_RETURN (x, cond2);
- VECTOR_ENDIF
- VECTOR_RETURN (x*x, cond & hy==0x40000000); /* y is 2 */
- /* y is 0.5 */
- /* x >= +0 */
- VECTOR_RETURN (v64df_sqrt_aux (x, __mask), cond & (hy==0x3fe00000) & (hx>=0));
- VECTOR_ENDIF
-
- v64df ax = __builtin_gcn_fabsv(x);
- /* special value of x */
- VECTOR_IF (lx==0, cond)
- VECTOR_IF2 ((ix==0x7ff00000)|(ix==0)|(ix==0x3ff00000), cond2, cond)
- v64df z = ax; /*x is +-0,+-inf,+-1*/
- VECTOR_COND_MOVE (z, VECTOR_INIT (1.0) / z, cond2 & (hy<0)); /* z = (1/|x|) */
- VECTOR_IF2 (hx<0, cond3, cond2)
- VECTOR_IF2 (((ix-0x3ff00000)|yisint)==0, cond4, cond3)
- VECTOR_COND_MOVE (z, (z-z)/(z-z), cond4); /* (-1)**non-int is NaN */
- VECTOR_ELSEIF2 (yisint==1, cond4, cond3)
- VECTOR_COND_MOVE (z, -z, cond4); /* (x<0)**odd = -(|x|**odd) */
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_RETURN (z, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* (x<0)**(non-int) is NaN */
- VECTOR_RETURN ((x-x)/(x-x), ((((hx >> 31) & 1) - 1)|yisint)==0);
-
- v64df t1, t2;
-
- /* |y| is huge */
- VECTOR_IF(iy>0x41e00000, cond) /* if |y| > 2**31 */
- VECTOR_IF2 (iy>0x43f00000, cond2, cond) /* if |y| > 2**64, must o/uflow */
- VECTOR_IF2 (ix<=0x3fefffff, cond3, cond2)
- VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond3 & (hy<0));
- VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond3);
- VECTOR_ENDIF
- VECTOR_IF2 (ix>=0x3ff00000, cond3, cond2)
- VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond3 & (hy>0));
- VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- /* over/underflow if x is not close to one */
- VECTOR_IF2 (ix<0x3fefffff, cond2, cond)
- VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond2 & (hy<0));
- VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond2);
- VECTOR_ENDIF
- VECTOR_IF2 (ix>0x3ff00000, cond2, cond)
- VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond2 & (hy>0));
- VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond2);
- VECTOR_ENDIF
- /* now |1-x| is tiny <= 2**-20, suffice to compute
- log(x) by x-x^2/2+x^3/3-x^4/4 */
- v64df t = ax-1; /* t has 20 trailing zeros */
- v64df w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
- v64df u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
- v64df v = t*ivln2_l-w*ivln2;
- VECTOR_COND_MOVE (t1, u+v, cond);
- SET_LOW_WORD (t1, VECTOR_INIT (0), cond);
- VECTOR_COND_MOVE (t2, v-(t1-u), cond);
- VECTOR_ELSE (cond)
- v64si n = VECTOR_INIT (0);
- /* take care subnormal number */
- VECTOR_IF2 (ix<0x00100000, cond2, cond)
- VECTOR_COND_MOVE (ax, ax * two53, cond2);
- VECTOR_COND_MOVE (n, n - 53, cond2);
- GET_HIGH_WORD (ix, ax, cond2);
- VECTOR_ENDIF
- n += ((ix)>>20)-0x3ff;
- v64si j = ix&0x000fffff;
- /* determine interval */
- ix = j|0x3ff00000; /* normalize ix */
- v64si k;
- VECTOR_IF2 (j<=0x3988E, cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2); /* |x|<sqrt(3/2) */
- VECTOR_ELSEIF2 (j<0xBB67A, cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (1), cond2); /* |x|<sqrt(3) */
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2);
- VECTOR_COND_MOVE (n, n + 1, cond2);
- VECTOR_COND_MOVE (ix, ix - 0x00100000, cond2);
- VECTOR_ENDIF
- SET_HIGH_WORD (ax, ix, cond);
-
- /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
- v64df bp_k = VECTOR_MERGE (VECTOR_INIT (bp[1]), VECTOR_INIT (bp[0]), k == 1);
- v64df u = ax-bp_k; /* bp[0]=1.0, bp[1]=1.5 */
- v64df v = 1.0/(ax+bp_k);
- v64df s = u*v;
- v64df s_h = s;
- SET_LOW_WORD (s_h, VECTOR_INIT (0), cond);
- /* t_h=ax+bp[k] High */
- v64df t_h = VECTOR_INIT (0.0);
- SET_HIGH_WORD (t_h,((ix>>1)|0x20000000)+0x00080000+(k<<18), cond);
- v64df t_l = ax - (t_h-bp_k);
- v64df s_l = v*((u-s_h*t_h)-s_h*t_l);
- /* compute log(ax) */
- v64df s2 = s*s;
- v64df r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
- r += s_l*(s_h+s);
- s2 = s_h*s_h;
- t_h = 3.0+s2+r;
- SET_LOW_WORD (t_h, VECTOR_INIT (0), cond);
- t_l = r-((t_h-3.0)-s2);
- /* u+v = s*(1+...) */
- u = s_h*t_h;
- v = s_l*t_h+t_l*s;
- /* 2/(3log2)*(s+...) */
- v64df p_h = u+v;
- SET_LOW_WORD (p_h, VECTOR_INIT (0), cond);
- v64df p_l = v-(p_h-u);
- v64df z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
- v64df dp_l_k = VECTOR_MERGE (VECTOR_INIT (dp_l[1]), VECTOR_INIT (dp_l[0]), k == 1);
- v64df z_l = cp_l*p_h+p_l*cp+dp_l_k;
- /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
- v64df t = __builtin_convertvector (n, v64df);
- v64df dp_h_k = VECTOR_MERGE (VECTOR_INIT (dp_h[1]), VECTOR_INIT (dp_h[0]), k == 1);
- VECTOR_COND_MOVE (t1, ((z_h+z_l)+dp_h_k)+t, cond);
- SET_LOW_WORD (t1, VECTOR_INIT (0), cond);
- VECTOR_COND_MOVE (t2, z_l-(((t1-t)-dp_h_k)-z_h), cond);
- VECTOR_ENDIF
-
- v64df s = VECTOR_INIT (1.0); /* s (sign of result -ve**odd) = -1 else = 1 */
- VECTOR_COND_MOVE (s, VECTOR_INIT (-1.0), /* (-ve)**(odd int) */
- ((hx>>31) != 0)&(yisint == 1));
-
- /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
- v64df y1 = y;
- SET_LOW_WORD (y1, VECTOR_INIT (0), NO_COND);
- v64df p_l = (y-y1)*t1+y*t2;
- v64df p_h = y1*t1;
- v64df z = p_l+p_h;
- v64si i, j;
- EXTRACT_WORDS(j, i, z);
- VECTOR_IF (j>=0x40900000, cond) /* z >= 1024 */
- /* if z > 1024 */
- v64di cond_di = __builtin_convertvector (cond, v64di);
- VECTOR_RETURN (v64df_math_oflow(s<0), cond & (((j-0x40900000)|i)!=0)); /* overflow */
- VECTOR_RETURN (v64df_math_oflow(s<0), cond_di & (p_l+ovt>z-p_h)); /* overflow */
- VECTOR_ELSEIF ((j&0x7fffffff)>=0x4090cc00, cond) /* z <= -1075 */
- /* z < -1075 */
- v64di cond_di = __builtin_convertvector (cond, v64di);
- VECTOR_RETURN (v64df_math_uflow(s<0), cond & (((j-0xc090cc00)|i)!=0)); /* underflow */
- VECTOR_RETURN (v64df_math_uflow(s<0), cond_di & (p_l<=z-p_h)); /* underflow */
- VECTOR_ENDIF
-
- /*
- * compute 2**(p_h+p_l)
- */
- i = j&0x7fffffff;
- v64si k = (i>>20)-0x3ff;
- v64si n = VECTOR_INIT (0);
- VECTOR_IF (i>0x3fe00000, cond) /* if |z| > 0.5, set n = [z+0.5] */
- VECTOR_COND_MOVE (n, j+(0x00100000>>(k+1)), cond);
- k = ((n&0x7fffffff)>>20)-0x3ff; /* new k for n */
- v64df t = VECTOR_INIT (0.0);
- SET_HIGH_WORD(t, n&~(0x000fffff>>k), cond);
- VECTOR_COND_MOVE (n, ((n&0x000fffff)|0x00100000)>>(20-k), cond);
- VECTOR_COND_MOVE (n, -n, cond & (j<0));
- VECTOR_COND_MOVE (p_h, p_h - t, cond);
- VECTOR_ENDIF
- v64df t = p_l+p_h;
- SET_LOW_WORD(t, VECTOR_INIT (0), NO_COND);
- v64df u = t*lg2_h;
- v64df v = (p_l-(t-p_h))*lg2+t*lg2_l;
- z = u+v;
- v64df w = v-(z-u);
- t = z*z;
- t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
- v64df r = (z*t1)/(t1-two)-(w+z*w);
- z = VECTOR_INIT (1.0)-(r-z);
- GET_HIGH_WORD(j,z, NO_COND);
- j += (n<<20);
- VECTOR_IF ((j>>20)<=0, cond)
- VECTOR_COND_MOVE (z, v64df_scalbn_aux (z, n, __mask), cond); /* subnormal output */
- VECTOR_ELSE (cond)
- SET_HIGH_WORD(z,j, cond);
- VECTOR_ENDIF
- VECTOR_RETURN (s*z, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (pow, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_remainder.c b/newlib/libm/machine/amdgcn/v64df_remainder.c
deleted file mode 100644
index a524107c7..000000000
--- a/newlib/libm/machine/amdgcn/v64df_remainder.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/e_remainder.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_fmod_aux (v64df, v64df, v64di);
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, remainder, v64df x, v64df p)
-{
- FUNCTION_INIT (v64df);
-
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
- v64si hp, lp;
- EXTRACT_WORDS (hp, lp, p);
- v64si sx = hx & 0x80000000;
- hp &= 0x7fffffff;
- hx &= 0x7fffffff;
-
- /* purge off exception values */
- VECTOR_RETURN ((x * p) / (x * p), ((hp | lp) == 0) | ((hx >= 0x7ff00000)
- | /* x not finite */
- ((hp >= 0x7ff00000) & /* p is NaN */
- (((hp - 0x7ff00000) | lp) != 0))));
-
- VECTOR_COND_MOVE (x, v64df_fmod_aux (x, p+p, __mask), hp <= 0x7fdfffff); // now x < 2p
-
- VECTOR_RETURN (0.0 * x, ((hx-hp)|(lx-lp))==0);
-
- x = __builtin_gcn_fabsv (x);
- p = __builtin_gcn_fabsv (p);
-
- VECTOR_IF (hp < 0x00200000, cond)
- VECTOR_IF2 (x + x > p, cond2, __builtin_convertvector(cond, v64di))
- VECTOR_COND_MOVE (x, x - p, cond2);
- VECTOR_COND_MOVE (x, x - p, cond2 & (x + x >= p));
- VECTOR_ENDIF
- VECTOR_ELSE (cond)
- v64df p_half = 0.5 * p;
- VECTOR_IF2 (x > p_half, cond2, __builtin_convertvector(cond, v64di))
- VECTOR_COND_MOVE (x, x - p, cond2);
- VECTOR_COND_MOVE (x, x - p, cond2 & (x >= p_half));
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- GET_HIGH_WORD (hx, x, NO_COND);
- SET_HIGH_WORD (x, hx ^ sx, NO_COND);
-
- VECTOR_RETURN (x, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (remainder, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_rint.c b/newlib/libm/machine/amdgcn/v64df_rint.c
deleted file mode 100644
index 561c9a2ac..000000000
--- a/newlib/libm/machine/amdgcn/v64df_rint.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_rint.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const double TWO52[2] = {
- 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
- -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
-};
-
-DEF_VD_MATH_FUNC (v64df, rint, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- v64si i0, i1;
- EXTRACT_WORDS (i0, i1, x);
- v64si sx = (i0 >> 31) & 1;
- v64df two52 = VECTOR_MERGE (VECTOR_INIT (TWO52[1]), VECTOR_INIT (TWO52[0]), sx != 0);
- v64si j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
- v64si i;
- VECTOR_IF (j0 < 20, cond)
- VECTOR_IF2 (j0 < 0, cond2, cond)
- VECTOR_RETURN (x, cond2 & (((i0 & 0x7fffffff) | i1) == 0));
- VECTOR_COND_MOVE (i1, i1 | (i0 & 0x0fffff), cond2);
- VECTOR_COND_MOVE (i0, i0 & 0xfffe0000, cond2);
- VECTOR_COND_MOVE (i0, i0 | (((i1 | -i1) >> 12) & 0x80000), cond2);
- SET_HIGH_WORD (x, i0, cond2);
- v64df w = two52 + x;
- v64df t = w - two52;
- GET_HIGH_WORD (i0, t, cond2);
- SET_HIGH_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2);
- VECTOR_RETURN (t, cond2);
- VECTOR_ELSE2 (cond2, cond)
- i = (0x000fffff) >> j0;
- VECTOR_RETURN (x, cond2 & (((i0 & i) | i1) == 0)); /* x is integral */
- i >>= 1;
- VECTOR_IF2 (((i0 & i) | i1) != 0, cond3, cond2)
- VECTOR_COND_MOVE (i1, CAST_VECTOR(v64si, VECTOR_INIT (0x80000000)), cond3 & (j0 == 19));
- VECTOR_COND_MOVE (i1, VECTOR_INIT (0), cond3 & (j0 != 19));
- VECTOR_COND_MOVE (i0, (i0 & (~i)) | ((0x40000) >> j0), cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_ELSEIF (j0 > 51, cond)
- VECTOR_RETURN (x + x, cond & (j0 == 0x400));
- VECTOR_RETURN (x, cond);
- VECTOR_ELSE (cond)
- i = CAST_VECTOR (v64si, VECTOR_INIT (0xffffffff) >> (j0 - 20));
- VECTOR_RETURN (x, cond & ((i1 & i) == 0));
- i >>= 1;
- VECTOR_COND_MOVE (i1, (i1 & (~i)) | (0x40000000 >> (j0 - 20)), cond & ((i1 & i) != 0));
- VECTOR_ENDIF
- INSERT_WORDS (x, i0, i1, NO_COND);
- v64df w = two52 + x;
- VECTOR_RETURN (w - two52, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (rint, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_scalb.c b/newlib/libm/machine/amdgcn/v64df_scalb.c
deleted file mode 100644
index 794045d4e..000000000
--- a/newlib/libm/machine/amdgcn/v64df_scalb.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/e_scalb.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_isnan (v64df);
-v64si v64df_finite (v64df);
-v64df v64df_rint_aux (v64df, v64di);
-v64df v64df_scalbn_aux (v64df, v64si, v64di);
-
-DEF_VD_MATH_FUNC (v64df, scalb, v64df x, v64df fn)
-{
- FUNCTION_INIT (v64df);
-
- VECTOR_IF (v64df_isnan(x) | v64df_isnan(fn), cond)
- VECTOR_RETURN (x * fn, cond);
- VECTOR_ENDIF
- VECTOR_IF (~v64df_finite (fn), cond)
- VECTOR_IF2 (fn > 0.0, cond2, cond)
- VECTOR_RETURN (x * fn, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (x / (-fn), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (v64df_rint_aux (fn, __mask) != fn, cond)
- VECTOR_RETURN ((fn-fn)/(fn-fn), cond);
- VECTOR_ENDIF
- VECTOR_IF (fn > 65000.0, cond)
- VECTOR_RETURN (v64df_scalbn_aux (x, VECTOR_INIT (65000), __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (-fn > 65000.0, cond)
- VECTOR_RETURN (v64df_scalbn_aux (x, VECTOR_INIT (-65000), __mask), cond);
- VECTOR_ENDIF
- VECTOR_RETURN (v64df_scalbn_aux (x, __builtin_convertvector (fn, v64si), __mask),
- NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (scalb, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_scalbn.c b/newlib/libm/machine/amdgcn/v64df_scalbn.c
deleted file mode 100644
index 64dba67af..000000000
--- a/newlib/libm/machine/amdgcn/v64df_scalbn.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/s_scalbn.c in Newlib. */
-
-#include "amdgcnmach.h"
-#include <limits.h>
-#include <float.h>
-
-static const double
-two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
-huge = 1.0e+300,
-tiny = 1.0e-300;
-
-v64df v64df_copysign_aux (v64df, v64df, v64di);
-
-DEF_VD_MATH_FUNC (v64df, scalbn, v64df x, v64si n)
-{
- FUNCTION_INIT (v64df);
-
- const v64df huge_v = VECTOR_INIT ((double) huge);
- const v64df tiny_v = VECTOR_INIT ((double) tiny);
-
- v64si hx, lx;
- EXTRACT_WORDS (hx, lx, x);
- v64si k =(hx&0x7ff00000)>>20; /* extract exponent */
- VECTOR_IF (k == 0, cond) /* 0 or subnormal x */
- VECTOR_RETURN (x, cond & ((lx|(hx&0x7fffffff))==0)); /* +- 0 */
- VECTOR_COND_MOVE (x, x * two54, cond);
- GET_HIGH_WORD (hx, x, cond);
- VECTOR_COND_MOVE (k, ((hx&0x7ff00000)>>20) - 54, cond);
- VECTOR_RETURN (tiny*x, cond & (n < -50000)); /*underflow*/
- VECTOR_ENDIF
- VECTOR_RETURN (x+x, k == 0x7ff); /* NaN or Inf */
- /* in case integer overflow in n+k */
- VECTOR_RETURN (huge_v * v64df_copysign_aux (huge_v, x, __mask), n > 50000);
- k = k + n;
- VECTOR_RETURN (huge_v * v64df_copysign_aux (huge_v, x, __mask), k > 0x7fe);
- VECTOR_IF (k > 0, cond) /* normal result */
- SET_HIGH_WORD (x, (hx&0x800fffff)|(k<<20), cond);
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_RETURN (tiny_v * v64df_copysign_aux (tiny_v, x, __mask), k <= -54); /*underflow*/
- k += 54; /* subnormal result */
- SET_HIGH_WORD (x, (hx&0x800fffff)|(k<<20), NO_COND);
- VECTOR_RETURN (x * twom54, NO_COND);
-
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64df_signif.c b/newlib/libm/machine/amdgcn/v64df_signif.c
deleted file mode 100644
index b28c8a68d..000000000
--- a/newlib/libm/machine/amdgcn/v64df_signif.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/s_signif.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_scalb_aux (v64df x, v64df fn, v64di);
-v64si v64df_ilogb_aux (v64df x, v64si);
-
-DEF_VD_MATH_FUNC (v64df, significand, v64df x)
-{
- v64si si_mask = __builtin_convertvector (__mask, v64si);
- return v64df_scalb_aux (x, -__builtin_convertvector (v64df_ilogb_aux (x, si_mask), v64df), __mask);
-}
-
-DEF_VARIANTS (significand, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_sin.c b/newlib/libm/machine/amdgcn/v64df_sin.c
deleted file mode 100644
index 3bd7f9a42..000000000
--- a/newlib/libm/machine/amdgcn/v64df_sin.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_sin.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_sine_aux (v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, sin, v64df x)
-{
- return v64df_sine_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (sin, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_sine.c b/newlib/libm/machine/amdgcn/v64df_sine.c
deleted file mode 100644
index 0879bc246..000000000
--- a/newlib/libm/machine/amdgcn/v64df_sine.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_sine.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_numtest (v64df x);
-
-static const double HALF_PI = 1.57079632679489661923;
-static const double ONE_OVER_PI = 0.31830988618379067154;
-static const double r[] = { -0.16666666666666665052,
- 0.83333333333331650314e-02,
- -0.19841269841201840457e-03,
- 0.27557319210152756119e-05,
- -0.25052106798274584544e-07,
- 0.16058936490371589114e-09,
- -0.76429178068910467734e-12,
- 0.27204790957888846175e-14 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC(v64df, sine, v64df x, int cosine)
-{
- const double YMAX = 210828714.0;
-
- FUNCTION_INIT (v64df);
-
- v64si num_type = v64df_numtest (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond);
- VECTOR_ENDIF
-
- /* Use sin and cos properties to ease computations. */
- v64di sgn;
- v64df y;
-
- if (cosine)
- {
- sgn = VECTOR_INIT (0L);
- y = __builtin_gcn_fabsv (x) + HALF_PI;
- }
- else
- {
- sgn = x < 0.0;
- y = VECTOR_MERGE (-x, x, x < 0.0);
- }
-
- /* Check for values of y that will overflow here. */
- VECTOR_IF (y > YMAX, cond)
- errno = ERANGE;
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- /* Calculate the exponent. */
- v64si Nneg = __builtin_convertvector (y * ONE_OVER_PI - 0.5, v64si);
- v64si Npos = __builtin_convertvector (y * ONE_OVER_PI + 0.5, v64si);
- v64si N = VECTOR_MERGE (Nneg, Npos, y < 0.0);
- v64df XN = __builtin_convertvector (N, v64df);
-
- VECTOR_COND_MOVE (sgn, ~sgn, (N & 1) != 0);
-
- if (cosine)
- XN -= 0.5;
-
- y = __builtin_gcn_fabsv (x) - XN * __PI;
-
- v64df res;
-
- VECTOR_IF ((-z_rooteps < y) & (y < z_rooteps), cond)
- VECTOR_COND_MOVE (res, y, cond);
- VECTOR_ELSE (cond)
- v64df g = y * y;
-
- /* Calculate the Taylor series. */
- v64df R = (((((((r[6] * g + r[5]) * g + r[4]) * g + r[3]) * g + r[2]) * g + r[1]) * g + r[0]) * g);
-
- /* Finally, compute the result. */
- VECTOR_COND_MOVE (res, y + y * R, cond);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, sgn);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_sineh.c b/newlib/libm/machine/amdgcn/v64df_sineh.c
deleted file mode 100644
index 007a14938..000000000
--- a/newlib/libm/machine/amdgcn/v64df_sineh.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/s_sineh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_exp_aux (v64df, v64di);
-v64si v64df_numtest (v64df);
-v64si v64df_ispos (v64df);
-
-static const double q[] = { -0.21108770058106271242e+7,
- 0.36162723109421836460e+5,
- -0.27773523119650701667e+3 };
-static const double p[] = { -0.35181283430177117881e+6,
- -0.11563521196851768270e+5,
- -0.16375798202630751372e+3,
- -0.78966127417357099479 };
-static const double LNV = 0.6931610107421875000;
-static const double INV_V2 = 0.24999308500451499336;
-static const double V_OVER2_MINUS1 = 0.13830277879601902638e-4;
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, sineh, v64df x, int cosineh)
-{
- const double WBAR = 18.55;
-
- FUNCTION_INIT (v64df);
-
- v64si sgn = VECTOR_INIT (0);
- v64di v_cosineh = VECTOR_INIT (cosineh ? -1L : 0L);
-
- /* Check for special values. */
- v64si num_type = v64df_numtest (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity.d),
- VECTOR_INIT (-z_infinity.d),
- v64df_ispos (x)),
- cond);
- VECTOR_ENDIF
-
- v64df y = __builtin_gcn_fabsv (x);
-
- if (!cosineh)
- VECTOR_COND_MOVE (sgn, VECTOR_INIT (-1), x < 0.0);
-
- v64df res;
-
- VECTOR_IF (((y > 1.0) & ~v_cosineh) | v_cosineh, cond)
- VECTOR_IF2 (y > BIGX, cond2, cond)
- v64df w = y - LNV;
-
- /* Check for w > maximum here. */
- VECTOR_IF2 (w > BIGX, cond3, cond2)
- errno = ERANGE;
- VECTOR_RETURN (x, cond3);
- VECTOR_ENDIF
-
- v64df z = v64df_exp_aux (w, __mask);
-
- VECTOR_COND_MOVE (res, z * (V_OVER2_MINUS1 + 1.0),
- cond2 & (w > WBAR));
- VECTOR_ELSE2 (cond2, cond)
- v64df z = v64df_exp_aux (y, __mask);
- if (cosineh)
- VECTOR_COND_MOVE (res, (z + 1 / z) * 0.5, cond2);
- else
- VECTOR_COND_MOVE (res, (z - 1 / z) * 0.5, cond2);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, sgn);
- VECTOR_ELSE (cond)
- /* Check for y being too small. */
- VECTOR_IF2 (y < z_rooteps, cond2, cond);
- VECTOR_COND_MOVE (res, x, cond2);
- VECTOR_ELSE2 (cond2, cond)
- /* Calculate the Taylor series. */
- v64df f = x * x;
- v64df Q = ((f + q[2]) * f + q[1]) * f + q[0];
- v64df P = ((p[3] * f + p[2]) * f + p[1]) * f + p[0];
- v64df R = f * (P / Q);
-
- VECTOR_COND_MOVE (res, x + x * R, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_sinh.c b/newlib/libm/machine/amdgcn/v64df_sinh.c
deleted file mode 100644
index 280f76d41..000000000
--- a/newlib/libm/machine/amdgcn/v64df_sinh.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/s_sinh.c. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_sineh_aux (v64df, int, v64di);
-
-DEF_VD_MATH_FUNC (v64df, sinh, v64df x)
-{
- return v64df_sineh_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (sinh, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64df_sqrt.c b/newlib/libm/machine/amdgcn/v64df_sqrt.c
deleted file mode 100644
index 004823f92..000000000
--- a/newlib/libm/machine/amdgcn/v64df_sqrt.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- *****************************************************************/
-
-/* Based on newlib/libm/mathfp/s_sqrt.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64df_numtest (v64df);
-v64si v64df_ispos (v64df);
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_frexpv_mant) \
- && __has_builtin (__builtin_gcn_frexpv_exp) \
- && __has_builtin (__builtin_gcn_ldexpv)
-
-DEF_VD_MATH_FUNC (v64df, sqrt, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- /* Check for special values. */
- v64si num_type = v64df_numtest (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- VECTOR_IF2 (v64df_ispos (x), cond2, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond2);
- VECTOR_ELSE2 (cond2,cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (z_infinity.d), cond);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* Initial checks are performed here. */
- VECTOR_IF (x == 0.0, cond)
- VECTOR_RETURN (VECTOR_INIT (0.0), cond);
- VECTOR_ENDIF
- VECTOR_IF (x < 0.0, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond);
- VECTOR_ENDIF
-
- /* Find the exponent and mantissa for the form x = f * 2^exp. */
- v64df f = __builtin_gcn_frexpv_mant (x);
- v64si exp = __builtin_gcn_frexpv_exp (x);
- v64si odd = (exp & 1) != 0;
-
- /* Get the initial approximation. */
- v64df y = 0.41731 + 0.59016 * f;
-
- f *= 0.5f;
- /* Calculate the remaining iterations. */
- y = y * 0.5f + f / y;
- y = y * 0.5f + f / y;
- y = y * 0.5f + f / y;
-
- /* Calculate the final value. */
- VECTOR_COND_MOVE (y, y * __SQRT_HALF, odd);
- VECTOR_COND_MOVE (exp, exp + 1, odd);
- exp >>= 1;
- y = __builtin_gcn_ldexpv (y, exp);
-
- VECTOR_RETURN (y, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (sqrt, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_tan.c b/newlib/libm/machine/amdgcn/v64df_tan.c
deleted file mode 100644
index 075375ae0..000000000
--- a/newlib/libm/machine/amdgcn/v64df_tan.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/math/kf_tan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const double
-pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */
-pio4lo= 3.06161699786838301793e-17, /* 0x3C81A626, 0x33145C07 */
-T[] = {
- 3.33333333333334091986e-01, /* 0x3FD55555, 0x55555563 */
- 1.33333333333201242699e-01, /* 0x3FC11111, 0x1110FE7A */
- 5.39682539762260521377e-02, /* 0x3FABA1BA, 0x1BB341FE */
- 2.18694882948595424599e-02, /* 0x3F9664F4, 0x8406D637 */
- 8.86323982359930005737e-03, /* 0x3F8226E3, 0xE96E8493 */
- 3.59207910759131235356e-03, /* 0x3F6D6D22, 0xC9560328 */
- 1.45620945432529025516e-03, /* 0x3F57DBC8, 0xFEE08315 */
- 5.88041240820264096874e-04, /* 0x3F4344D8, 0xF2F26501 */
- 2.46463134818469906812e-04, /* 0x3F3026F7, 0x1A8D1068 */
- 7.81794442939557092300e-05, /* 0x3F147E88, 0xA03792A6 */
- 7.14072491382608190305e-05, /* 0x3F12B80F, 0x32F0A7E9 */
- -1.85586374855275456654e-05, /* 0xBEF375CB, 0xDB605373 */
- 2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */
-};
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-static v64df
-v64df_kernel_tan (v64df x, v64df y, v64si iy, v64di __mask)
-{
- FUNCTION_INIT (v64df);
-
- v64si hx;
- GET_HIGH_WORD(hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff; /* high word of |x| */
-
- VECTOR_IF (ix < 0x3e300000, cond) /* x < 2**-28 */
- VECTOR_IF2(__builtin_convertvector (x, v64si)==0, cond2, cond) /* generate inexact */
- v64si low;
- GET_LOW_WORD (low, x, cond2);
- VECTOR_RETURN (1.0 / __builtin_gcn_fabsv (x), ((ix|low)|(iy+1))==0);
- VECTOR_RETURN (x, cond2 & (iy == 1));
- v64df z, w;
- z = w = x + y;
- SET_LOW_WORD (z, VECTOR_INIT (0.0), cond2);
- v64df v = y - (z - x);
- v64df t, a;
- t = a = -1.0 / w;
- SET_LOW_WORD(t, VECTOR_INIT (0.0), cond2);
- v64df s = 1.0 + t * z;
- VECTOR_RETURN ( t + a * (s + t * v), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF(ix>=0x3FE59428, cond) /* |x|>=0.6744 */
- VECTOR_COND_MOVE (x, -x, cond & (hx < 0));
- VECTOR_COND_MOVE (y, -y, cond & (hx < 0));
- v64df z = pio4-x;
- v64df w = pio4lo-y;
- VECTOR_COND_MOVE (x, z+w, cond);
- VECTOR_COND_MOVE (y, VECTOR_INIT (0.0), cond);
- VECTOR_ENDIF
- v64df z = x*x;
- v64df w = z*z;
- /* Break x^5*(T[1]+x^2*T[2]+...) into
- * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
- * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
- */
- v64df r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11]))));
- v64df v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12])))));
- v64df s = z*x;
- r = y + z*(s*(r+v)+y);
- r += T[0]*s;
- w = x+r;
- VECTOR_IF(ix>=0x3FE59428, cond)
- v = __builtin_convertvector (iy, v64df);
- VECTOR_RETURN (__builtin_convertvector (1-((hx>>30)&2), v64df)
- * (v-2.0*(x-(w*w/(w+v)-r))), cond);
- VECTOR_ENDIF
- VECTOR_RETURN (w, iy == 1);
- /* if allow error up to 2 ulp,
- simply return -1.0/(x+r) here */
- /* compute -1.0/(x+r) accurately */
- z = w;
- SET_LOW_WORD (z, VECTOR_INIT (0), NO_COND);
- v = r - (z - x); /* z+v = r+x */
- v64df a, t;
- t = a = -1.0/w; /* a = -1.0/w */
- SET_LOW_WORD(t, VECTOR_INIT (0), NO_COND);
- s = 1.0+t*z;
- VECTOR_RETURN (t+a*(s+t*v), NO_COND);
-
- FUNCTION_RETURN;
-}
-
-static v64si
-v64df_rem_pio2 (v64df x, v64df *y)
-{
- v64df r = x * __INV_PI_OVER_TWO_2_24;
- v64si n = (__builtin_convertvector (r, v64si) + 0x800000) >> 24;
- x = x - __builtin_convertvector (n, v64df) * __PI_OVER_TWO;
-
- y[0] = x;
- y[1] = x - y[0];
- return n;
-}
-
-DEF_VD_MATH_FUNC (v64df, tan, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- v64si ix;
- GET_HIGH_WORD (ix, x, NO_COND);
-
- /* |x| ~< pi/4 */
- ix &= 0x7fffffff;
- VECTOR_RETURN (v64df_kernel_tan (x, VECTOR_INIT (0.0), VECTOR_INIT (1), __mask),
- ix <= 0x3fe921fb);
-
- /* tan(Inf or NaN) is NaN */
- VECTOR_RETURN (x-x, ix >= 0x7ff00000); /* NaN */
-
- /* argument reduction needed */
- v64df y[2];
- v64si n = v64df_rem_pio2 (x,y);
- VECTOR_RETURN (v64df_kernel_tan (y[0], y[1], 1-((n&1)<<1), __mask), // 1 -- n even
- NO_COND); // -1 -- n odd
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (tan, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_tanh.c b/newlib/libm/machine/amdgcn/v64df_tanh.c
deleted file mode 100644
index 9b90f989b..000000000
--- a/newlib/libm/machine/amdgcn/v64df_tanh.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- *****************************************************************/
-
-/* Based on newlib/libm/mathfp/s_tanh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_exp_aux (v64df, v64di);
-
-static const double LN3_OVER2 = 0.54930614433405484570;
-static const double p[] = { -0.16134119023996228053e+4,
- -0.99225929672236083313e+2,
- -0.96437492777225469787 };
-static const double q[] = { 0.48402357071988688686e+4,
- 0.22337720718962312926e+4,
- 0.11274474380534949335e+3 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv)
-
-DEF_VD_MATH_FUNC (v64df, tanh, v64df x)
-{
- FUNCTION_INIT (v64df);
-
- v64df f = __builtin_gcn_fabsv (x);
- v64df res;
-
- /* Check if the input is too big. */
- VECTOR_IF (f > BIGX, cond)
- VECTOR_COND_MOVE (res, VECTOR_INIT (1.0), cond);
-
- VECTOR_ELSEIF (f > LN3_OVER2, cond)
- VECTOR_COND_MOVE (res, 1.0 - 2.0 / (v64df_exp_aux (2 * f, __mask) + 1.0),
- cond);
-
- /* Check if the input is too small. */
- VECTOR_ELSEIF (f < z_rooteps, cond)
- VECTOR_COND_MOVE (res, f, cond);
-
- /* Calculate the Taylor series. */
- VECTOR_ELSE (cond)
- v64df g = f * f;
-
- v64df P = (p[2] * g + p[1]) * g + p[0];
- v64df Q = ((g + q[2]) * g + q[1]) * g + q[0];
- v64df R = g * (P / Q);
-
- VECTOR_COND_MOVE (res, f + f * R, cond);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, x < 0.0);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (tanh, df, df)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64df_tgamma.c b/newlib/libm/machine/amdgcn/v64df_tgamma.c
deleted file mode 100644
index 3fd04931b..000000000
--- a/newlib/libm/machine/amdgcn/v64df_tgamma.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/e_tgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64df v64df_exp_aux (v64df x, v64di __mask);
-v64df v64df_lgamma_r_aux (v64df x, v64si *signgamp, v64di __mask);
-
-DEF_VD_MATH_FUNC (v64df, tgamma, v64df x)
-{
- v64si signgam_local;
- v64df y = v64df_exp_aux(v64df_lgamma_r_aux(x, &signgam_local, __mask), __mask);
- VECTOR_COND_MOVE(y, -y, signgam_local < 0);
- return y;
-}
-
-DEF_VARIANTS (tgamma, df, df)
diff --git a/newlib/libm/machine/amdgcn/v64sf_acos.c b/newlib/libm/machine/amdgcn/v64sf_acos.c
deleted file mode 100644
index 216df0ac9..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_acos.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_acos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_asinef_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, acosf, v64sf x)
-{
- return v64sf_asinef_aux(x, 1, __mask);
-}
-
-DEF_VARIANTS (acosf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_acosh.c b/newlib/libm/machine/amdgcn/v64sf_acosh.c
deleted file mode 100644
index e2a8cbd3e..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_acosh.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/mathfp/ef_acosh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_logf_aux (v64sf, v64si);
-v64sf v64sf_log1pf_aux (v64sf, v64si);
-v64sf v64sf_sqrtf_aux (v64sf, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, acoshf, v64sf x)
-{
- static const float one = 1.0;
- static const float ln2 = 6.9314718246e-01; /* 0x3f317218 */
-
- FUNCTION_INIT (v64sf);
-
- v64si hx;
- GET_FLOAT_WORD (hx, x, NO_COND);
-
- VECTOR_IF (hx < 0x3f800000, cond) // x < 1 */
- VECTOR_RETURN ((x-x) / (x-x), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx >=0x4d800000, cond) // x > 2**28 */
- VECTOR_IF2 (hx >=0x7f800000, cond2, cond) // x is inf of NaN */
- VECTOR_RETURN (x+x, cond2);
- VECTOR_ELSE (cond2)
- /* acosh(huge)=log(2x) */
- VECTOR_RETURN (v64sf_logf_aux (x, __mask) + ln2, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (hx == 0x3f800000, cond)
- /* acosh(1) = 0 */
- VECTOR_RETURN (VECTOR_INIT (0.0f), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx > 0x40000000, cond) /* 2**28 > x > 2 */
- {
- v64sf t = x * x;
- VECTOR_RETURN (v64sf_logf_aux (2.0f*x - 1.0f /
- (x + v64sf_sqrtf_aux (t - 1.0f, __mask)),
- __mask),
- cond);
- }
- VECTOR_ELSE (cond) /* 1<x<2 */
- {
- v64sf t = x - 1.0f;
- VECTOR_RETURN (v64sf_log1pf_aux (t + v64sf_sqrtf_aux(2.0*t + t*t, __mask),
- __mask),
- cond);
- }
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (acoshf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_asin.c b/newlib/libm/machine/amdgcn/v64sf_asin.c
deleted file mode 100644
index f81a9866a..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_asin.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_asin.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_asinef_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, asinf, v64sf x)
-{
- return v64sf_asinef_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (asinf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_asine.c b/newlib/libm/machine/amdgcn/v64sf_asine.c
deleted file mode 100644
index 07bb4c432..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_asine.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_asine.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_numtestf (v64sf);
-v64sf v64sf_sqrtf (v64sf);
-
-static const float p[] = { 0.933935835, -0.504400557 };
-static const float q[] = { 0.560363004e+1, -0.554846723e+1 };
-static const float a[] = { 0.0, 0.785398163 };
-static const float b[] = { 1.570796326, 0.785398163 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, asinef, v64sf x, int acosine)
-{
- FUNCTION_INIT (v64sf);
-
- v64si branch = VECTOR_INIT (0);
-
- /* Check for special values. */
- v64si i = v64sf_numtestf (x);
- VECTOR_IF ((i == NAN) | (i == INF), cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_MERGE (x, VECTOR_INIT (z_infinity_f.f),
- i == NAN),
- cond);
- VECTOR_ENDIF
-
- v64sf y = __builtin_gcn_fabsvf (x);
- v64sf g, res;
-
- VECTOR_IF (y > 0.5f, cond)
- VECTOR_COND_MOVE (i, VECTOR_INIT (1 - acosine), cond);
-
- /* Check for range error. */
- VECTOR_IF2 (y > 1.0f, cond2, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond2);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (g, (1.0f - y) / 2.0f, cond);
- VECTOR_COND_MOVE (y, -2.0f * v64sf_sqrtf (g), cond);
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (i, VECTOR_INIT (acosine), cond);
- VECTOR_IF2 (y < z_rooteps_f, cond2, cond)
- VECTOR_COND_MOVE (res, y, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (g, y * y, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF ((y >= z_rooteps_f) | branch, cond)
- {
- /* Calculate the Taylor series. */
- v64sf P = (p[1] * g + p[0]) * g;
- v64sf Q = (g + q[1]) * g + q[0];
- v64sf R = P / Q;
-
- VECTOR_COND_MOVE (res, y + y * R, cond);
- }
- VECTOR_ENDIF
-
- v64sf a_i = VECTOR_MERGE (VECTOR_INIT (a[1]), VECTOR_INIT (a[0]), i != 0);
-
- /* Calculate asine or acose. */
- if (acosine == 0)
- {
- VECTOR_COND_MOVE (res, (a_i + res) + a_i, NO_COND);
- VECTOR_IF (x < 0.0f, cond)
- VECTOR_COND_MOVE (res, -res, cond);
- VECTOR_ENDIF
- }
- else
- {
- v64sf b_i = VECTOR_MERGE (VECTOR_INIT(b[1]), VECTOR_INIT(b[0]), i != 0);
-
- VECTOR_IF (x < 0.0f, cond)
- VECTOR_COND_MOVE (res, (b_i + res) + b_i, cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (res, (a_i - res) + a_i, cond);
- VECTOR_ENDIF
- }
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_asinh.c b/newlib/libm/machine/amdgcn/v64sf_asinh.c
deleted file mode 100644
index 781d20638..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_asinh.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/sf_asinh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_logf_aux (v64sf, v64si);
-v64sf v64sf_log1pf_aux (v64sf, v64si);
-v64sf v64sf_sqrtf_aux (v64sf, v64si);
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, asinhf, v64sf x)
-{
- static const float one = 1.0000000000e+00; /* 0x3F800000 */
- static const float ln2 = 6.9314718246e-01; /* 0x3f317218 */
- static const float huge = 1.0000000000e+30;
-
- FUNCTION_INIT (v64sf);
-
- v64sf w;
- v64si hx;
- GET_FLOAT_WORD (hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF (ix >=0x7f800000, cond) /* x is inf or NaN */
- VECTOR_RETURN (x + x, cond);
- VECTOR_ENDIF
- VECTOR_IF (ix < 0x31800000, cond) /* |x|<2**-28 */
- VECTOR_IF2 (huge+x > one, cond2, cond) /* return x inexact except 0 */
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (ix > 0x4d800000, cond) /* x > 2**28 */
- VECTOR_COND_MOVE (w, v64sf_logf_aux (__builtin_gcn_fabsvf (x), __mask) +
- ln2,
- cond);
- VECTOR_ELSEIF (ix > 0x40000000, cond) /* 2**28 > |x| > 2.0 */
- v64sf t = __builtin_gcn_fabsvf (x);
- VECTOR_COND_MOVE (w, v64sf_logf_aux (2.0f * t + 1.0f / (v64sf_sqrtf_aux (x*x + 1.0f, __mask) + t), __mask),
- cond);
- VECTOR_ELSE (cond) /* 2.0 > |x| > 2**-28 */
- v64sf t = x * x;
- VECTOR_COND_MOVE (w, v64sf_log1pf_aux (__builtin_gcn_fabsvf (x) + t / (1.0f + v64sf_sqrtf_aux (1.0f + t, __mask)), __mask),
- cond);
- VECTOR_ENDIF
-
- VECTOR_IF (hx > 0, cond)
- VECTOR_RETURN (w, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (-w, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (asinhf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_atan.c b/newlib/libm/machine/amdgcn/v64sf_atan.c
deleted file mode 100644
index e38d0c4f9..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_atan.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_atan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_atangentf_aux (v64sf, v64sf, v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, atanf, v64sf x)
-{
- return (v64sf_atangentf_aux (x, VECTOR_INIT (0.0f), VECTOR_INIT (0.0f),
- 0, __mask));
-}
-
-DEF_VARIANTS (atanf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_atan2.c b/newlib/libm/machine/amdgcn/v64sf_atan2.c
deleted file mode 100644
index 1718dfa96..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_atan2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_atan2.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_atangentf_aux (v64sf, v64sf, v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, atan2f, v64sf v, v64sf u)
-{
- return v64sf_atangentf_aux (VECTOR_INIT (0.0f), v, u, 1, __mask);
-}
-
-DEF_VARIANTS2 (atan2f, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_atangent.c b/newlib/libm/machine/amdgcn/v64sf_atangent.c
deleted file mode 100644
index f99e844f6..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_atangent.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_atangent.c in Newlib. */
-
-#include <float.h>
-#include "amdgcnmach.h"
-
-static const float ROOT3 = 1.732050807;
-static const float a[] = { 0.0, 0.523598775, 1.570796326,
- 1.047197551 };
-static const float q[] = { 0.1412500740e+1 };
-static const float p[] = { -0.4708325141, -0.5090958253e-1 };
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_frexpvf_exp) \
- && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, atangentf, v64sf x, v64sf v, v64sf u, int arctan2)
-{
- FUNCTION_INIT (v64sf);
-
- v64sf zero = VECTOR_INIT (0.0f);
- v64sf res;
- v64si branch = VECTOR_INIT (0);
-
- /* Preparation for calculating arctan2. */
- if (arctan2)
- {
- VECTOR_IF (u == 0.0f, cond)
- VECTOR_IF2 (v == 0.0f, cond2, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (0.0f), cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, VECTOR_INIT ((float) __PI_OVER_TWO), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (~branch, cond)
- /* Get the exponent values of the inputs. */
- v64si expv = __builtin_gcn_frexpvf_exp (v);
- v64si expu = __builtin_gcn_frexpvf_exp (u);
-
- /* See if a divide will overflow. */
- v64si e = expv - expu;
-
- VECTOR_IF2 (e > FLT_MAX_EXP, cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, VECTOR_INIT ((float) __PI_OVER_TWO), cond2);
- VECTOR_ENDIF
-
- /* Also check for underflow. */
- VECTOR_IF2 (e < FLT_MIN_EXP, cond2, cond)
- VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2);
- VECTOR_COND_MOVE (res, zero, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- }
-
- VECTOR_IF (~branch, cond)
- v64sf f;
- v64si N = VECTOR_INIT (0);
-
- if (arctan2)
- f = __builtin_gcn_fabsvf (v / u);
- else
- f = __builtin_gcn_fabsvf (x);
-
- VECTOR_IF2 (f > 1.0f, cond2, cond)
- VECTOR_COND_MOVE (f, 1.0f / f, cond2);
- VECTOR_COND_MOVE (N, VECTOR_INIT (2), cond2);
- VECTOR_ENDIF
-
- VECTOR_IF2 (f > (2.0f - ROOT3), cond2, cond)
- float A = ROOT3 - 1.0f;
- VECTOR_COND_MOVE (f, (((A * f - 0.5f) - 0.5f) + f) / (ROOT3 + f),
- cond2);
- N += cond2 & 1;
- VECTOR_ENDIF
-
- /* Check for values that are too small. */
- VECTOR_IF2 ((-z_rooteps_f < f) & (f < z_rooteps_f), cond2, cond)
- VECTOR_COND_MOVE (res, f, cond2);
-
- /* Calculate the Taylor series. */
- VECTOR_ELSE2 (cond2, cond)
- v64sf g = f * f;
- v64sf P = (p[1] * g + p[0]) * g;
- v64sf Q = g + q[0];
- v64sf R = P / Q;
-
- VECTOR_COND_MOVE (res, f + f * R, cond2);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, cond & (N > 1));
-
- res += VECTOR_MERGE (VECTOR_INIT (a[1]), zero, cond & (N == 1));
- res += VECTOR_MERGE (VECTOR_INIT (a[2]), zero, cond & (N == 2));
- res += VECTOR_MERGE (VECTOR_INIT (a[3]), zero, cond & (N == 3));
- VECTOR_ENDIF
-
- if (arctan2)
- {
- /*if (u < 0.0)*/
- VECTOR_COND_MOVE (res, (float) __PI - res, u < 0.0f);
- /*if (v < 0.0)*/
- VECTOR_COND_MOVE (res, -res, v < 0.0f);
- }
- /*else if (x < 0.0) */
- else
- VECTOR_COND_MOVE (res, -res, x < 0.0f);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_atanh.c b/newlib/libm/machine/amdgcn/v64sf_atanh.c
deleted file mode 100644
index f728bb217..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_atanh.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/mathfp/ef_atanh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_log1pf_aux (v64sf, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, atanhf, v64sf x)
-{
- static const float zero = 0.0;
- static const float one = 1.0, huge = 1e30;
-
- FUNCTION_INIT (v64sf);
-
- v64sf t;
- v64si hx;
- GET_FLOAT_WORD (hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF (ix > 0x3f800000, cond) // |x|>1
- VECTOR_RETURN ((x - x)/(x - x), cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix == 0x3f800000, cond)
- VECTOR_RETURN (x / zero, cond);
- VECTOR_ENDIF
-
- VECTOR_IF ((ix < 0x31800000) & ((huge + x) > zero), cond) // x<2**-28
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- SET_FLOAT_WORD (x, ix, NO_COND);
-
- VECTOR_IF (ix < 0x3f000000, cond) // x < 0.5 */
- v64sf t2 = x + x;
- VECTOR_COND_MOVE (t, 0.5f * v64sf_log1pf_aux (t2 + t2 * x / (one - x), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (t, 0.5f * v64sf_log1pf_aux ((x + x) / (one - x), __mask), cond);
- VECTOR_ENDIF
-
- VECTOR_IF (hx >= 0, cond)
- VECTOR_RETURN (t, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (-t, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (atanhf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_copysign.c b/newlib/libm/machine/amdgcn/v64sf_copysign.c
deleted file mode 100644
index 83fca440d..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_copysign.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_copysign.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VS_MATH_FUNC (v64sf, copysignf, v64sf x, v64sf y)
-{
- FUNCTION_INIT (v64sf);
-
- v64si ix, iy;
- GET_FLOAT_WORD (ix, x, NO_COND);
- GET_FLOAT_WORD (iy, y, NO_COND);
- SET_FLOAT_WORD (x, (ix & 0x7fffffff) | (iy & 0x80000000), NO_COND);
- VECTOR_RETURN (x, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (copysignf, sf, sf) \ No newline at end of file
diff --git a/newlib/libm/machine/amdgcn/v64sf_cos.c b/newlib/libm/machine/amdgcn/v64sf_cos.c
deleted file mode 100644
index d675a5c52..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_cos.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_cos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_sinef_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, cosf, v64sf x)
-{
- return v64sf_sinef_aux (x, 1, __mask);
-}
-
-DEF_VARIANTS (cosf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_cosh.c b/newlib/libm/machine/amdgcn/v64sf_cosh.c
deleted file mode 100644
index 9167d9e31..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_cosh.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_cosh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_sinehf_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, coshf, v64sf x)
-{
- return v64sf_sinehf_aux (x, 1, __mask);
-}
-
-DEF_VARIANTS (coshf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_erf.c b/newlib/libm/machine/amdgcn/v64sf_erf.c
deleted file mode 100644
index d044f57f5..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_erf.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/sf_erf.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_expf_aux (v64sf, v64si);
-
-static const float
-tiny = 1e-30,
-half= 5.0000000000e-01, /* 0x3F000000 */
-one = 1.0000000000e+00, /* 0x3F800000 */
-two = 2.0000000000e+00, /* 0x40000000 */
- /* c = (subfloat)0.84506291151 */
-erx = 8.4506291151e-01, /* 0x3f58560b */
-/*
- * Coefficients for approximation to erf on [0,0.84375]
- */
-efx = 1.2837916613e-01, /* 0x3e0375d4 */
-efx8= 1.0270333290e+00, /* 0x3f8375d4 */
-pp0 = 1.2837916613e-01, /* 0x3e0375d4 */
-pp1 = -3.2504209876e-01, /* 0xbea66beb */
-pp2 = -2.8481749818e-02, /* 0xbce9528f */
-pp3 = -5.7702702470e-03, /* 0xbbbd1489 */
-pp4 = -2.3763017452e-05, /* 0xb7c756b1 */
-qq1 = 3.9791721106e-01, /* 0x3ecbbbce */
-qq2 = 6.5022252500e-02, /* 0x3d852a63 */
-qq3 = 5.0813062117e-03, /* 0x3ba68116 */
-qq4 = 1.3249473704e-04, /* 0x390aee49 */
-qq5 = -3.9602282413e-06, /* 0xb684e21a */
-/*
- * Coefficients for approximation to erf in [0.84375,1.25]
- */
-pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */
-pa1 = 4.1485610604e-01, /* 0x3ed46805 */
-pa2 = -3.7220788002e-01, /* 0xbebe9208 */
-pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */
-pa4 = -1.1089469492e-01, /* 0xbde31cc2 */
-pa5 = 3.5478305072e-02, /* 0x3d1151b3 */
-pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */
-qa1 = 1.0642088205e-01, /* 0x3dd9f331 */
-qa2 = 5.4039794207e-01, /* 0x3f0a5785 */
-qa3 = 7.1828655899e-02, /* 0x3d931ae7 */
-qa4 = 1.2617121637e-01, /* 0x3e013307 */
-qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */
-qa6 = 1.1984500103e-02, /* 0x3c445aa3 */
-/*
- * Coefficients for approximation to erfc in [1.25,1/0.35]
- */
-ra0 = -9.8649440333e-03, /* 0xbc21a093 */
-ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */
-ra2 = -1.0558626175e+01, /* 0xc128f022 */
-ra3 = -6.2375331879e+01, /* 0xc2798057 */
-ra4 = -1.6239666748e+02, /* 0xc322658c */
-ra5 = -1.8460508728e+02, /* 0xc3389ae7 */
-ra6 = -8.1287437439e+01, /* 0xc2a2932b */
-ra7 = -9.8143291473e+00, /* 0xc11d077e */
-sa1 = 1.9651271820e+01, /* 0x419d35ce */
-sa2 = 1.3765776062e+02, /* 0x4309a863 */
-sa3 = 4.3456588745e+02, /* 0x43d9486f */
-sa4 = 6.4538726807e+02, /* 0x442158c9 */
-sa5 = 4.2900814819e+02, /* 0x43d6810b */
-sa6 = 1.0863500214e+02, /* 0x42d9451f */
-sa7 = 6.5702495575e+00, /* 0x40d23f7c */
-sa8 = -6.0424413532e-02, /* 0xbd777f97 */
-/*
- * Coefficients for approximation to erfc in [1/.35,28]
- */
-rb0 = -9.8649431020e-03, /* 0xbc21a092 */
-rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */
-rb2 = -1.7757955551e+01, /* 0xc18e104b */
-rb3 = -1.6063638306e+02, /* 0xc320a2ea */
-rb4 = -6.3756646729e+02, /* 0xc41f6441 */
-rb5 = -1.0250950928e+03, /* 0xc480230b */
-rb6 = -4.8351919556e+02, /* 0xc3f1c275 */
-sb1 = 3.0338060379e+01, /* 0x41f2b459 */
-sb2 = 3.2579251099e+02, /* 0x43a2e571 */
-sb3 = 1.5367296143e+03, /* 0x44c01759 */
-sb4 = 3.1998581543e+03, /* 0x4547fdbb */
-sb5 = 2.5530502930e+03, /* 0x451f90ce */
-sb6 = 4.7452853394e+02, /* 0x43ed43a7 */
-sb7 = -2.2440952301e+01; /* 0xc1b38712 */
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, erff, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- v64si hx;
- GET_FLOAT_WORD (hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff;
-
- VECTOR_IF (ix >= 0x7f800000, cond) /* erf(nan)=nan */
- v64si i = (hx >> 31) << 1;
- /* erf(+-inf)=+-1 */
- VECTOR_RETURN (__builtin_convertvector (1 - i, v64sf) + 1.0f / x, cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix < 0x3f580000, cond) /* |x|<0.84375 */
- VECTOR_IF2 (ix < 0x31800000, cond2, cond) /* |x|<2**-28 */
- VECTOR_IF2 (ix < 0x04000000, cond3, cond2) /* avoid underflow */
- VECTOR_RETURN (0.125f*(8.0f*x + efx8*x), cond3);
- VECTOR_ENDIF
- VECTOR_RETURN (x + efx*x, cond2);
- VECTOR_ENDIF
-
- v64sf z = x*x;
- v64sf r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- v64sf s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- v64sf y = r/s;
-
- VECTOR_RETURN (x + x*y, cond);
- VECTOR_ENDIF
-
- VECTOR_IF (ix < 0x3fa00000, cond) /* 0.84375 <= |x| < 1.25 */
- v64sf s = __builtin_gcn_fabsvf (x) - 1.0f;
- v64sf P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- v64sf Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- VECTOR_IF2 (hx >= 0, cond2, cond)
- VECTOR_RETURN (erx + P/Q, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (-erx - P/Q, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (ix >= 0x40c00000, cond) /* inf>|x|>=6 */
- VECTOR_IF2 (hx >= 0, cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (1.0f - tiny), cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (tiny - 1.0f), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- x = __builtin_gcn_fabsvf(x);
- v64sf s = 1.0f / (x*x);
- v64sf R, S;
- VECTOR_IF (ix < 0x4036DB6E, cond) /* |x| < 1/0.35 */
- VECTOR_COND_MOVE (R, ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7)))))), cond);
- VECTOR_COND_MOVE (S, one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8))))))), cond);
- VECTOR_ELSE (cond) /* |x| >= 1/0.35 */
- VECTOR_COND_MOVE (R, rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6))))), cond);
- VECTOR_COND_MOVE (S, one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7)))))), cond);
- VECTOR_ENDIF
-
- GET_FLOAT_WORD (ix, x, NO_COND);
- v64sf z;
- SET_FLOAT_WORD (z, ix & 0xfffff000, NO_COND);
- v64sf r = v64sf_expf_aux (-z*z - 0.5625f, __mask)
- * v64sf_expf_aux ((z-x)*(z+x) + R/S, __mask);
- VECTOR_RETURN (one - r/x, hx >= 0);
- VECTOR_RETURN (r/x - one, hx < 0);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (erff, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_exp.c b/newlib/libm/machine/amdgcn/v64sf_exp.c
deleted file mode 100644
index 1bb16051e..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_exp.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/math/ef_exp.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const float
-huge = 1.0e+30,
-twom100 = 7.8886090522e-31, /* 2**-100=0x0d800000 */
-ln2HI[2] ={ 6.9313812256e-01, /* 0x3f317180 */
- -6.9313812256e-01,}, /* 0xbf317180 */
-ln2LO[2] ={ 9.0580006145e-06, /* 0x3717f7d1 */
- -9.0580006145e-06,}, /* 0xb717f7d1 */
-invln2 = 1.4426950216e+00, /* 0x3fb8aa3b */
-P1 = 1.6666667163e-01, /* 0x3e2aaaab */
-P2 = -2.7777778450e-03, /* 0xbb360b61 */
-P3 = 6.6137559770e-05, /* 0x388ab355 */
-P4 = -1.6533901999e-06, /* 0xb5ddea0e */
-P5 = 4.1381369442e-08; /* 0x3331bb4c */
-
-DEF_VS_MATH_FUNC (v64sf, expf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- v64si k = VECTOR_INIT (0);
- v64si sx;
- GET_FLOAT_WORD(sx, x, NO_COND);
- v64si xsb = (sx>>31)&1; /* sign bit of x */
- v64si hx = sx & 0x7fffffff; /* high word of |x| */
-
- /* filter out non-finite argument */
- VECTOR_RETURN (x+x, FLT_UWORD_IS_NAN(hx)); /* NaN */
- VECTOR_RETURN (x, FLT_UWORD_IS_INFINITE(hx) & (xsb == 0));
- VECTOR_RETURN (VECTOR_INIT (0.0f), FLT_UWORD_IS_INFINITE (hx)); /* exp(+-inf)={inf,0} */
- VECTOR_RETURN (v64sf_math_oflowf (VECTOR_INIT (0)), sx > FLT_UWORD_LOG_MAX); /* overflow */
- VECTOR_RETURN (v64sf_math_uflowf (VECTOR_INIT (0)), (sx < 0) & (hx > FLT_UWORD_LOG_MIN)); /* underflow */
-
- /* argument reduction */
- v64sf hi, lo;
- VECTOR_IF (hx > 0x3eb17218, cond) /* if |x| > 0.5 ln2 */
- VECTOR_IF2 (hx < 0x3F851592, cond2, cond) /* and |x| < 1.5 ln2 */
- VECTOR_COND_MOVE (hi, x-ln2HI[0], cond2 & (xsb == 0));
- VECTOR_COND_MOVE (hi, x-ln2HI[1], cond2 & (xsb == 1));
- VECTOR_COND_MOVE (lo, VECTOR_INIT (ln2LO[0]), cond2 & (xsb == 0));
- VECTOR_COND_MOVE (lo, VECTOR_INIT (ln2LO[1]), cond2 & (xsb == 1));
- VECTOR_COND_MOVE (k, 1-xsb-xsb, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (k, __builtin_convertvector (invln2*x + 0.5f, v64si), cond2 & (xsb == 0));
- VECTOR_COND_MOVE (k, __builtin_convertvector (invln2*x - 0.5f, v64si), cond2 & (xsb == 1));
- v64sf t = __builtin_convertvector (k, v64sf);
- VECTOR_COND_MOVE (hi, x - t*ln2HI[0], cond2); /* t*ln2HI is exact here */
- VECTOR_COND_MOVE (lo, t*ln2LO[0], cond2);
- VECTOR_ENDIF
- VECTOR_COND_MOVE (x, hi - lo, cond);
- VECTOR_ELSEIF (hx < 0x34000000, cond) /* when |x|<2**-23 */
- VECTOR_RETURN (1.0f+x, cond & (huge+x > 1.0f)); /* trigger inexact */
- VECTOR_ENDIF
-
- /* x is now in primary range */
- v64sf t = x*x;
- v64sf c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
- VECTOR_RETURN (1.0f - ((x*c)/(c-2.0f)-x), k==0);
- v64sf y = 1.0f - ((lo-(x*c)/(2.0f-c))-hi);
- VECTOR_IF (k >= -125, cond)
- v64si hy;
- GET_FLOAT_WORD(hy, y, cond);
- SET_FLOAT_WORD(y,hy+(k<<23), cond); /* add k to y's exponent */
- VECTOR_RETURN (y, cond);
- VECTOR_ELSE (cond)
- v64si hy;
- GET_FLOAT_WORD(hy, y, cond);
- SET_FLOAT_WORD(y, hy+((k+100)<<23), cond); /* add k to y's exponent */
- VECTOR_RETURN (y*twom100, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (expf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_exp2.c b/newlib/libm/machine/amdgcn/v64sf_exp2.c
deleted file mode 100644
index aa5fefd79..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_exp2.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * is freely granted, provided that this notice is preserved.
- */
-
-/* Based on newlib/libm/mathfp/sf_exp2.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_powf_aux (v64sf, v64sf, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, exp2f, v64sf x)
-{
- return v64sf_powf_aux (VECTOR_INIT (2.0f), x, __mask);
-}
-
-DEF_VARIANTS (exp2f, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_finite.c b/newlib/libm/machine/amdgcn/v64sf_finite.c
deleted file mode 100644
index b1efd5b6e..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_finite.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/v64sf_finite.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VS_MATH_FUNC (v64si, finitef, v64sf x)
-{
- v64si ix = CAST_VECTOR (v64si, x);
- ix &= 0x7fffffff;
- return FLT_UWORD_IS_FINITE(ix);
-}
-
-DEF_VARIANTS (finitef, si, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_fmod.c b/newlib/libm/machine/amdgcn/v64sf_fmod.c
deleted file mode 100644
index ccbd0db76..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_fmod.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/sf_fmod.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VS_MATH_FUNC (v64sf, fmodf, v64sf x, v64sf y)
-{
- FUNCTION_INIT(v64sf);
-
- v64si hx, hy, hz;
- GET_FLOAT_WORD (hx, x, NO_COND);
- GET_FLOAT_WORD (hy, y, NO_COND);
- v64si sx = hx & 0x80000000; /* sign of x */
- hx ^=sx; /* |x| */
- hy &= 0x7fffffff; /* |y| */
-
- v64sf zeroes = VECTOR_MERGE (VECTOR_INIT (-0.0f),
- VECTOR_INIT (0.0f),
- sx != 0);
-
- /* purge off exception values */
- VECTOR_IF ((hy == 0) | (hx >= 0x7f800000)
- | (hy > 0x7f800000), cond) // y=0, or x not finite or y is NaN
- VECTOR_RETURN ((x * y) / (x * y), cond);
- VECTOR_ENDIF
- VECTOR_IF (hx < hy, cond) // |x|<|y| return x
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_IF (hx == hy, cond)
- VECTOR_RETURN (zeroes, hx == hy); // |x|=|y| return x*0
- VECTOR_ENDIF
-
- /* determine ix = ilogb(x) */
- v64si ix;
- VECTOR_IF (hx < 0x00800000, cond) // subnormal x
- ix = VECTOR_INIT (-126);
- for (v64si i = (hx << 8);
- !ALL_ZEROES_P (cond & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond & (i > 0));
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (ix, (hx >> 23) - 127, cond);
- VECTOR_ENDIF
-
- /* determine iy = ilogb(y) */
- v64si iy;
- VECTOR_IF (hy < 0x00800000, cond) // subnormal y
- iy = VECTOR_INIT (-126);
- for (v64si i = (hy << 8); !ALL_ZEROES_P (cond & (i >= 0)); i <<= 1)
- VECTOR_COND_MOVE (iy, iy - 1, cond & (i >= 0));
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (iy, (hy >> 23) - 127, cond);
- VECTOR_ENDIF
-
-/* set up {hx,lx}, {hy,ly} and align y to x */
- VECTOR_IF (ix >= -126, cond)
- VECTOR_COND_MOVE (hx, 0x00800000 | (0x007fffff & hx), cond);
- VECTOR_ELSE (cond) // subnormal x, shift x to normal
- {
- v64si n = -126 - ix;
- VECTOR_COND_MOVE (hx, hx << n, cond);
- }
- VECTOR_ENDIF
- VECTOR_IF (iy >= -126, cond)
- VECTOR_COND_MOVE (hy, 0x00800000 | (0x007fffff & hy), cond);
- VECTOR_ELSE (cond) // subnormal y, shift y to normal
- {
- v64si n = -126 - iy;
- VECTOR_COND_MOVE (hy, hy << n, cond);
- }
- VECTOR_ENDIF
-
-/* fix point fmod */
- v64si n = ix - iy;
- v64si cond = n != 0;
-
- while (!ALL_ZEROES_P (cond))
- {
- hz = hx - hy;
- VECTOR_IF2 (hz < 0, cond2, cond)
- VECTOR_COND_MOVE (hx, hx + hx, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_IF2 (hz == 0, cond3, cond2) // return sign(x)*0
- VECTOR_RETURN (zeroes, cond3);
- VECTOR_ELSE2 (cond3, cond2)
- VECTOR_COND_MOVE (hx, hz + hz, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- n += cond; // Active lanes should be -1
- cond &= (n != 0);
- }
-
- hz = hx - hy;
- VECTOR_COND_MOVE (hx, hz, hz >= 0);
-
- /* convert back to floating value and restore the sign */
- VECTOR_RETURN (zeroes, hx == 0); // return sign(x)*0
-
- cond = hx < 0x00800000;
- while (!ALL_ZEROES_P (cond)) // normalize x
- {
- VECTOR_COND_MOVE (hx, hx + hx, cond);
- iy += cond; // Active lanes should be -1
-
- cond &= (hx < 0x00800000);
- }
- VECTOR_IF (iy >= -126, cond) // normalize output
- VECTOR_COND_MOVE (hx, (hx - 0x00800000) | ((iy + 127) << 23), cond);
- SET_FLOAT_WORD (x, hx | sx, cond);
- VECTOR_ELSE (cond) // subnormal output */
- n = -126 - iy;
- hx >>= n;
- SET_FLOAT_WORD (x, hx | sx, cond);
- x *= VECTOR_INIT (1.0f); /* create necessary signal */
- VECTOR_ENDIF
-
- VECTOR_RETURN (x, NO_COND); /* exact output */
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (fmodf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_gamma.c b/newlib/libm/machine/amdgcn/v64sf_gamma.c
deleted file mode 100644
index 93f917278..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_gamma.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "amdgcnmach.h"
-
-v64sf v64sf_lgammaf_aux (v64sf x, v64si __mask);
-
-DEF_VS_MATH_FUNC (v64sf, gammaf, v64sf x)
-{
- return v64sf_lgammaf_aux(x, __mask);
-}
-
-DEF_VARIANTS (gammaf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_hypot.c b/newlib/libm/machine/amdgcn/v64sf_hypot.c
deleted file mode 100644
index 20062cdf5..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_hypot.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/ef_hypot.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_sqrtf_aux (v64sf, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, hypotf, v64sf x, v64sf y)
-{
- FUNCTION_INIT (v64sf);
-
- v64sf a = x;
- v64sf b = y;
-
- v64si ha;
- GET_FLOAT_WORD (ha, x, NO_COND);
- ha &= 0x7fffffffL;
- v64si hb;
- GET_FLOAT_WORD (hb, y, NO_COND);
- hb &= 0x7fffffffL;
-
- VECTOR_IF (hb > ha, cond)
- v64si j = ha;
- VECTOR_COND_MOVE (ha, hb, cond);
- VECTOR_COND_MOVE (hb, j, cond);
- VECTOR_ENDIF
- SET_FLOAT_WORD (a, ha, NO_COND); /* a <- |a| */
- SET_FLOAT_WORD (b, hb, NO_COND); /* b <- |b| */
- VECTOR_IF((ha - hb) > 0xf000000L, cond) // x/y > 2**30 */
- VECTOR_RETURN (a + b, cond);
- VECTOR_ENDIF
-
- v64si k = VECTOR_INIT (0);
-
- VECTOR_IF (ha > 0x58800000L, cond) /* a>2**50 */
- VECTOR_IF2 (ha >= 0x7f800000L, cond2, cond) /* Inf or NaN */
- v64sf w = a + b; // for sNaN */
- VECTOR_COND_MOVE (w, a, cond2 & (ha == 0x7f800000));
- VECTOR_COND_MOVE (w, b, cond2 & (hb == 0x7f800000));
- VECTOR_RETURN (w, cond);
- VECTOR_ENDIF
- /* scale a and b by 2**-60 */
- VECTOR_COND_MOVE (ha, ha - 0x5d800000, cond);
- VECTOR_COND_MOVE (hb, hb - 0x5d800000, cond);
- VECTOR_COND_MOVE (k, k + 60, cond);
- SET_FLOAT_WORD (a, ha, cond);
- SET_FLOAT_WORD (b, hb, cond);
- VECTOR_ENDIF
- VECTOR_IF (hb < 0x26800000, cond) /* b < 2**-50 */
- VECTOR_IF2 (hb <= 0x007fffff, cond2, cond) /* subnormal b or 0 */
- VECTOR_RETURN (a, cond2 & (hb == 0));
- /* t1=2^126 */
- v64sf t1;
- SET_FLOAT_WORD (t1, VECTOR_INIT (0x3f000000), cond2);
- VECTOR_COND_MOVE (b, b * t1, cond2);
- VECTOR_COND_MOVE (a, a * t1, cond2);
- VECTOR_COND_MOVE (k, k - 126, cond2);
- VECTOR_ELSE2 (cond2, cond) /* scale a and b by 2^60 */
- VECTOR_COND_MOVE (ha, ha + 0x5d800000, cond2); /* a *= 2^60 */
- VECTOR_COND_MOVE (hb, hb + 0x5d800000, cond2); /* b *= 2^60 */
- VECTOR_COND_MOVE (k, k - 60, cond2);
- SET_FLOAT_WORD (a, ha, cond2);
- SET_FLOAT_WORD (b, hb, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- /* medium size a and b */
- v64sf w = a - b;
- VECTOR_IF (w > b, cond)
- v64sf t1;
- SET_FLOAT_WORD (t1, ha & 0xfffff000, cond);
- v64sf t2 = a - t1;
- VECTOR_COND_MOVE (w, v64sf_sqrtf_aux (t1*t1 - (b*(-b) - t2 * (a + t1)), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (a, a+a, cond);
- v64sf y1;
- SET_FLOAT_WORD (y1, hb & 0xfffff000, cond);
- v64sf y2 = b - y1;
- v64sf t1;
- SET_FLOAT_WORD (t1, ha + 0x00800000, cond);
- v64sf t2 = a - t1;
- VECTOR_COND_MOVE (w, v64sf_sqrtf_aux (t1*y1 - (w*(-w) - (t1*y2 + t2*b)), __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (k != 0, cond)
- v64sf t1;
- SET_FLOAT_WORD (t1, 0x3f800000 + (k << 23), cond);
- VECTOR_RETURN (t1 * w, cond);
- VECTOR_ELSE (cond)
- VECTOR_RETURN (w, cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (hypotf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_ilogb.c b/newlib/libm/machine/amdgcn/v64sf_ilogb.c
deleted file mode 100644
index fb5ef76e4..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_ilogb.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_ilogb.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VS_MATH_FUNC (v64si, ilogbf, v64sf x)
-{
- FUNCTION_INIT(v64si);
-
- v64si hx, ix;
- GET_FLOAT_WORD (hx, x, NO_COND);
- hx &= 0x7fffffff;
- VECTOR_IF (FLT_UWORD_IS_ZERO (hx), cond)
- VECTOR_RETURN (VECTOR_INIT (-__INT_MAX__), cond); // FP_ILOGB0
- VECTOR_ENDIF
- VECTOR_IF (FLT_UWORD_IS_SUBNORMAL (hx), cond)
- ix = VECTOR_INIT (-126);
- for (v64si i = (hx << 8);
- !ALL_ZEROES_P (cond & (i > 0));
- i <<= 1)
- VECTOR_COND_MOVE (ix, ix - 1, cond & (i > 0));
- VECTOR_RETURN (ix, cond);
- VECTOR_ELSEIF (~FLT_UWORD_IS_FINITE (hx), cond)
- VECTOR_RETURN (VECTOR_INIT (__INT_MAX__), cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN ((hx >> 23) - 127, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (ilogbf, si, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_isnan.c b/newlib/libm/machine/amdgcn/v64sf_isnan.c
deleted file mode 100644
index d18d985a3..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_isnan.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_isnan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-DEF_VS_MATH_FUNC (v64si, isnanf, v64sf x)
-{
- v64si ix = CAST_VECTOR (v64si, x);
- ix &= 0x7fffffff;
- return FLT_UWORD_IS_NAN (ix);
-}
-
-DEF_VARIANTS (isnanf, si, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_ispos.c b/newlib/libm/machine/amdgcn/v64sf_ispos.c
deleted file mode 100644
index d790a76a5..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_ispos.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_ispos.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si
-v64sf_isposf (v64sf x)
-{
- v64si wx = CAST_VECTOR (v64si, x);
-
- return (wx & 0x80000000) == 0;
-}
diff --git a/newlib/libm/machine/amdgcn/v64sf_lgamma.c b/newlib/libm/machine/amdgcn/v64sf_lgamma.c
deleted file mode 100644
index 8028626c6..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_lgamma.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/wf_lgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_finitef_aux (v64sf x, v64si __mask);
-v64sf v64sf_lgammaf_r_aux (v64sf x, v64si *signgamp, v64si __mask);
-
-DEF_VS_MATH_FUNC (v64sf, lgammaf, v64sf x)
-{
- v64sf y = v64sf_lgammaf_r_aux(x, &(_REENT_V64SI_SIGNGAM(_V64_REENT)), __mask);
- if (ALL_ZEROES_P(v64sf_finitef_aux(y, __mask)) & !ALL_ZEROES_P(v64sf_finitef_aux(x, __mask))) {
- /* lgamma(finite) overflow */
- errno = ERANGE;
- }
- return y;
-}
-
-DEF_VARIANTS (lgammaf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c b/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c
deleted file mode 100644
index 928823599..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/erf_lgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const float two23= 8.3886080000e+06, /* 0x4b000000 */
-half= 5.0000000000e-01, /* 0x3f000000 */
-one = 1.0000000000e+00, /* 0x3f800000 */
-pi = 3.1415927410e+00, /* 0x40490fdb */
-a0 = 7.7215664089e-02, /* 0x3d9e233f */
-a1 = 3.2246702909e-01, /* 0x3ea51a66 */
-a2 = 6.7352302372e-02, /* 0x3d89f001 */
-a3 = 2.0580807701e-02, /* 0x3ca89915 */
-a4 = 7.3855509982e-03, /* 0x3bf2027e */
-a5 = 2.8905137442e-03, /* 0x3b3d6ec6 */
-a6 = 1.1927076848e-03, /* 0x3a9c54a1 */
-a7 = 5.1006977446e-04, /* 0x3a05b634 */
-a8 = 2.2086278477e-04, /* 0x39679767 */
-a9 = 1.0801156895e-04, /* 0x38e28445 */
-a10 = 2.5214456400e-05, /* 0x37d383a2 */
-a11 = 4.4864096708e-05, /* 0x383c2c75 */
-tc = 1.4616321325e+00, /* 0x3fbb16c3 */
-tf = -1.2148628384e-01, /* 0xbdf8cdcd */
-/* tt = -(tail of tf) */
-tt = 6.6971006518e-09, /* 0x31e61c52 */
-t0 = 4.8383611441e-01, /* 0x3ef7b95e */
-t1 = -1.4758771658e-01, /* 0xbe17213c */
-t2 = 6.4624942839e-02, /* 0x3d845a15 */
-t3 = -3.2788541168e-02, /* 0xbd064d47 */
-t4 = 1.7970675603e-02, /* 0x3c93373d */
-t5 = -1.0314224288e-02, /* 0xbc28fcfe */
-t6 = 6.1005386524e-03, /* 0x3bc7e707 */
-t7 = -3.6845202558e-03, /* 0xbb7177fe */
-t8 = 2.2596477065e-03, /* 0x3b141699 */
-t9 = -1.4034647029e-03, /* 0xbab7f476 */
-t10 = 8.8108185446e-04, /* 0x3a66f867 */
-t11 = -5.3859531181e-04, /* 0xba0d3085 */
-t12 = 3.1563205994e-04, /* 0x39a57b6b */
-t13 = -3.1275415677e-04, /* 0xb9a3f927 */
-t14 = 3.3552918467e-04, /* 0x39afe9f7 */
-u0 = -7.7215664089e-02, /* 0xbd9e233f */
-u1 = 6.3282704353e-01, /* 0x3f2200f4 */
-u2 = 1.4549225569e+00, /* 0x3fba3ae7 */
-u3 = 9.7771751881e-01, /* 0x3f7a4bb2 */
-u4 = 2.2896373272e-01, /* 0x3e6a7578 */
-u5 = 1.3381091878e-02, /* 0x3c5b3c5e */
-v1 = 2.4559779167e+00, /* 0x401d2ebe */
-v2 = 2.1284897327e+00, /* 0x4008392d */
-v3 = 7.6928514242e-01, /* 0x3f44efdf */
-v4 = 1.0422264785e-01, /* 0x3dd572af */
-v5 = 3.2170924824e-03, /* 0x3b52d5db */
-s0 = -7.7215664089e-02, /* 0xbd9e233f */
-s1 = 2.1498242021e-01, /* 0x3e5c245a */
-s2 = 3.2577878237e-01, /* 0x3ea6cc7a */
-s3 = 1.4635047317e-01, /* 0x3e15dce6 */
-s4 = 2.6642270386e-02, /* 0x3cda40e4 */
-s5 = 1.8402845599e-03, /* 0x3af135b4 */
-s6 = 3.1947532989e-05, /* 0x3805ff67 */
-r1 = 1.3920053244e+00, /* 0x3fb22d3b */
-r2 = 7.2193557024e-01, /* 0x3f38d0c5 */
-r3 = 1.7193385959e-01, /* 0x3e300f6e */
-r4 = 1.8645919859e-02, /* 0x3c98bf54 */
-r5 = 7.7794247773e-04, /* 0x3a4beed6 */
-r6 = 7.3266842264e-06, /* 0x36f5d7bd */
-w0 = 4.1893854737e-01, /* 0x3ed67f1d */
-w1 = 8.3333335817e-02, /* 0x3daaaaab */
-w2 = -2.7777778450e-03, /* 0xbb360b61 */
-w3 = 7.9365057172e-04, /* 0x3a500cfd */
-w4 = -5.9518753551e-04, /* 0xba1c065c */
-w5 = 8.3633989561e-04, /* 0x3a5b3dd2 */
-w6 = -1.6309292987e-03; /* 0xbad5c4e8 */
-static const float zero= 0.0000000000e+00;
-
-v64sf v64sf_cosf_aux (v64sf x, v64si __mask);
-v64sf v64sf_logf_aux (v64sf x, v64si __mask);
-v64sf v64sf_sinf_aux (v64sf x, v64si __mask);
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_floorvf) \
- && __has_builtin (__builtin_gcn_fabsvf)
-
-static v64sf
-v64sf_sin_pif (v64sf x)
-{
- // Explicitly create mask for internal function.
- v64si __mask = VECTOR_INIT (-1);
- FUNCTION_INIT (v64sf);
-
- v64sf y, z;
- v64si n, ix;
-
- GET_FLOAT_WORD (ix, x, NO_COND);
- ix &= 0x7fffffff;
-
- VECTOR_IF (ix < 0x3e800000, cond)
- VECTOR_RETURN (v64sf_sinf_aux (pi * x, __mask), cond);
- VECTOR_ENDIF
- y = -x; /* x is assume negative */
-
- /*
- * argument reduction, make sure inexact flag not raised if input
- * is an integer
- */
- z = __builtin_gcn_floorvf (y);
- VECTOR_IF (z != y, cond)
- /* inexact anyway */
- VECTOR_COND_MOVE(y, y * 0.5F, cond);
- VECTOR_COND_MOVE(y, 2.0F * (y - __builtin_gcn_floorvf (y)), cond); /* y = |x| mod 2.0 */
- VECTOR_COND_MOVE(n, __builtin_convertvector(y * 4.0F, v64si), cond);
- VECTOR_ELSE (cond)
- VECTOR_IF2 (ix >= 0x4b800000, cond2, cond)
- VECTOR_COND_MOVE(y, VECTOR_INIT(zero), cond2);
- VECTOR_COND_MOVE(n, VECTOR_INIT(0), cond2); /* y must be even */
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE(z, y + two23 /* exact */, cond2 & (ix < 0x4b000000));
- GET_FLOAT_WORD (n, z, cond2);
- VECTOR_COND_MOVE(n, n & 1, cond2);
- VECTOR_COND_MOVE(y, __builtin_convertvector(n, v64sf), cond2);
- VECTOR_COND_MOVE(n, n << 2, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF (n == 0, cond)
- VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * y, __mask), cond);
- VECTOR_ELSEIF (n == 1 | n == 2, cond)
- VECTOR_COND_MOVE(y, v64sf_cosf_aux (pi * (0.5F - y), __mask), cond);
- VECTOR_ELSEIF (n == 3 | n == 4, cond)
- VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * (VECTOR_INIT(one) - y), __mask), cond);
- VECTOR_ELSEIF (n == 5 | n == 6, cond)
- VECTOR_COND_MOVE(y, -v64sf_cosf_aux (pi * (y - 1.5F), __mask), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * (y - 2.0F), __mask), cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN(-y, NO_COND);
- FUNCTION_RETURN;
-}
-
-DEF_VS_MATH_FUNC (v64sf, lgammaf_r, v64sf x, v64si *signgamp)
-{
- FUNCTION_INIT (v64sf);
-
- v64sf t,y,z,nadj = VECTOR_INIT(0.0F),p,p1,p2,p3,q,r,w;
- v64si i,hx,ix;
-
- GET_FLOAT_WORD(hx,x,NO_COND);
-
- /* purge off +-inf, NaN, +-0, and negative arguments */
- *signgamp = VECTOR_INIT(1);
- ix = hx&0x7fffffff;
- VECTOR_IF(ix>=0x7f800000, cond)
- VECTOR_RETURN (x*x, cond);
- VECTOR_ENDIF
- VECTOR_IF(ix==0, cond)
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (hx<0));
- VECTOR_RETURN(one/(x-x), cond);
- VECTOR_ENDIF
- VECTOR_IF (ix < 0x30800000, cond) /* |x|<2**-30, return -log(|x|) */
- VECTOR_IF2(hx<0, cond2, cond)
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond);
- VECTOR_RETURN (-v64sf_logf_aux(-x, __mask), cond2);
- VECTOR_ELSE2(cond2, cond)
- VECTOR_RETURN (-v64sf_logf_aux(x, __mask), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (hx < 0, cond)
- VECTOR_IF2(ix>=0x4b000000, cond2, cond) /* |x|>=2**23, must be -integer */
- VECTOR_RETURN(one/(x-x), cond2);
- VECTOR_ENDIF
- VECTOR_COND_MOVE (t, v64sf_sin_pif (x), cond);
- VECTOR_IF2(t==zero, cond2, cond)
- /* tgamma wants NaN instead of INFINITY */
- VECTOR_RETURN(one/(x-x), cond2); /* -integer */
- VECTOR_ENDIF
- VECTOR_COND_MOVE(nadj, v64sf_logf_aux(VECTOR_INIT(pi)/__builtin_gcn_fabsvf(t*x), __mask), cond);
- VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (t < zero));
- VECTOR_COND_MOVE(x, -x, cond);
- VECTOR_ENDIF
-
- /* purge off 1 and 2 */
- VECTOR_IF(ix==0x3f800000|ix==0x40000000, cond)
- VECTOR_COND_MOVE(r, VECTOR_INIT(0.0F), cond);
- /* for x < 2.0 */
- VECTOR_ELSEIF(ix<0x40000000, cond)
- VECTOR_IF2(ix<=0x3f666666, cond2, cond)
- /* lgamma(x) = lgamma(x+1)-log(x) */
- r = -v64sf_logf_aux(x, __mask);
- VECTOR_IF2(ix>=0x3f3b4a20, cond3, cond2)
- VECTOR_COND_MOVE(y, one-x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3);
- VECTOR_ELSEIF2(ix>=0x3e6d3308, cond3, cond2)
- VECTOR_COND_MOVE(y, x-(tc-one), cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3);
- VECTOR_ELSE2(cond3, cond2)
- VECTOR_COND_MOVE(y, x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3);
- VECTOR_ENDIF
- VECTOR_ELSE2(cond2, cond)
- VECTOR_COND_MOVE(r, VECTOR_INIT(zero), cond2);
- VECTOR_IF2(ix>=0x3fdda618, cond3, cond2) /* [1.7316,2] */
- VECTOR_COND_MOVE(y, VECTOR_INIT(2.0F)-x, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3);
- VECTOR_ELSEIF2(ix>=0x3F9da620, cond3, cond2) /* [1.23,1.73] */
- VECTOR_COND_MOVE(y, x-tc, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3);
- VECTOR_ELSE2(cond3, cond2)
- VECTOR_COND_MOVE(y, x-one, cond3);
- VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_IF2(i==0, cond2, cond)
- VECTOR_COND_MOVE(z, y*y, cond2);
- VECTOR_COND_MOVE(p1, a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))), cond2);
- VECTOR_COND_MOVE(p2, z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))), cond2);
- VECTOR_COND_MOVE(p, y*p1+p2, cond2);
- VECTOR_COND_MOVE(r, r + (p-(float)0.5*y), cond2);
- VECTOR_ELSEIF2(i==1, cond2, cond)
- VECTOR_COND_MOVE(z, y*y, cond2);
- VECTOR_COND_MOVE(w, z*y, cond2);
- VECTOR_COND_MOVE(p1, t0+w*(t3+w*(t6+w*(t9 +w*t12))), cond2); /* parallel comp */
- VECTOR_COND_MOVE(p2, t1+w*(t4+w*(t7+w*(t10+w*t13))), cond2);
- VECTOR_COND_MOVE(p3, t2+w*(t5+w*(t8+w*(t11+w*t14))), cond2);
- VECTOR_COND_MOVE(p, z*p1-(tt-w*(p2+y*p3)), cond2);
- VECTOR_COND_MOVE(r, r + (tf + p), cond2);
- VECTOR_ELSEIF2(i==2, cond2, cond)
- VECTOR_COND_MOVE(p1, y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))), cond2);
- VECTOR_COND_MOVE(p2, one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))), cond2);
- VECTOR_COND_MOVE(r, r + (-(float)0.5*y + p1/p2), cond2);
- VECTOR_ENDIF
- VECTOR_ELSEIF(ix<0x41000000, cond)
- /* x < 8.0 */
- VECTOR_COND_MOVE(i, __builtin_convertvector(x, v64si), cond);
- VECTOR_COND_MOVE(t, VECTOR_INIT(zero), cond);
- VECTOR_COND_MOVE(y, x-__builtin_convertvector(i, v64sf), cond);
- VECTOR_COND_MOVE(p, y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))), cond);
- VECTOR_COND_MOVE(q, one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))), cond);
- VECTOR_COND_MOVE(r, half*y+p/q, cond);
- VECTOR_COND_MOVE(z, VECTOR_INIT(one), cond); /* lgamma(1+s) = log(s) + lgamma(s) */
- VECTOR_IF2(i==7, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+(float)6.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i==7 | i==6, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+(float)5.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=5, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+(float)4.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=4, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+(float)3.0), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(i<=7 & i>=3, cond2, cond)
- VECTOR_COND_MOVE(z, z * (y+(float)2.0), cond2);
- VECTOR_COND_MOVE(r, r + v64sf_logf_aux(z, __mask), cond2);
- VECTOR_ENDIF
- /* 8.0 <= x < 2**58 */
- VECTOR_ELSEIF(ix < 0x5c800000, cond)
- VECTOR_COND_MOVE(t, v64sf_logf_aux(x, __mask), cond);
- VECTOR_COND_MOVE(z, one/x, cond);
- VECTOR_COND_MOVE(y, z*z, cond);
- VECTOR_COND_MOVE(w, w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))), cond);
- VECTOR_COND_MOVE(r, (x-half)*(t-one)+w, cond);
- VECTOR_ELSE(cond)
- /* 2**58 <= x <= inf */
- VECTOR_COND_MOVE(r, x*(v64sf_logf_aux(x, __mask)-one), cond);
- VECTOR_ENDIF
- VECTOR_IF(hx<0, cond)
- VECTOR_COND_MOVE(r, nadj - r, cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN(r, NO_COND);
- FUNCTION_RETURN;
-}
-
-#endif \ No newline at end of file
diff --git a/newlib/libm/machine/amdgcn/v64sf_log.c b/newlib/libm/machine/amdgcn/v64sf_log.c
deleted file mode 100644
index 141491318..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_log.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_logarithm.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_finitef_aux (v64sf, v64si);
-v64si v64sf_isnanf_aux (v64sf, v64si);
-
-static const float a[] = { -0.64124943423745581147e+02,
- 0.16383943563021534222e+02,
- -0.78956112887481257267 };
-static const float b[] = { -0.76949932108494879777e+03,
- 0.31203222091924532844e+03,
- -0.35667977739034646171e+02 };
-static const float C1 = 0.693145752;
-static const float C2 = 1.428606820e-06;
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_frexpvf_mant) \
- && __has_builtin (__builtin_gcn_frexpvf_exp)
-
-DEF_VS_MATH_FUNC (v64sf, logf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- /* Check for domain/range errors here. */
- VECTOR_IF (x == 0.0f, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (-z_infinity_f.f), cond);
- VECTOR_ELSEIF (x < 0.0f, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond);
- VECTOR_ELSEIF (~v64sf_finitef_aux (x, __mask), cond)
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_notanum_f.f),
- VECTOR_INIT (z_infinity_f.f),
- v64sf_isnanf_aux (x, __mask)),
- cond);
- VECTOR_ENDIF
-
- /* Get the exponent and mantissa where x = f * 2^N. */
- v64sf f = __builtin_gcn_frexpvf_mant (x);
- v64si N = __builtin_gcn_frexpvf_exp (x);
-
- v64sf z = f - 0.5f;
-
- VECTOR_IF (f > (float) __SQRT_HALF, cond)
- VECTOR_COND_MOVE (z, (z - 0.5f) / (f * 0.5f + 0.5f), cond);
- VECTOR_ELSE (cond)
- VECTOR_COND_MOVE (N, N - 1, cond);
- VECTOR_COND_MOVE (z, z / (z * 0.5f + 0.5f), cond);
- VECTOR_ENDIF
-
- v64sf w = z * z;
-
- /* Use Newton's method with 4 terms. */
- z += z * w * ((a[2] * w + a[1]) * w + a[0]) / (((w + b[2]) * w + b[1]) * w + b[0]);
-
- v64sf Nf = __builtin_convertvector(N, v64sf);
- VECTOR_COND_MOVE (z, (Nf * C2 + z) + Nf * C1, N != 0);
-
- VECTOR_RETURN (z, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (logf, sf, sf)
-
-DEF_VS_MATH_FUNC (v64sf, log1pf, v64sf x)
-{
- /* TODO: Implement algorithm with better precision. */
- return v64sf_logf_aux (1 + x, __mask);
-}
-
-DEF_VARIANTS (log1pf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_log10.c b/newlib/libm/machine/amdgcn/v64sf_log10.c
deleted file mode 100644
index 12571b1c6..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_log10.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_log10.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_logf_aux (v64sf, v64si);
-
-static const float C3 = 0.4342944819;
-
-DEF_VS_MATH_FUNC (v64sf, log10f, v64sf x)
-{
- return v64sf_logf_aux (x, __mask) * C3;
-}
-
-DEF_VARIANTS (log10f, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_log2.c b/newlib/libm/machine/amdgcn/v64sf_log2.c
deleted file mode 100644
index 74c9c4eb8..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_log2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "amdgcnmach.h"
-
-v64sf v64sf_logf_aux (v64sf, v64si);
-
-static const float C3 = 1.4426950408889634073599246810019;
-
-DEF_VS_MATH_FUNC (v64sf, log2f, v64sf x)
-{
- return v64sf_logf_aux (x, __mask) * C3;
-}
-
-DEF_VARIANTS (log2f, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_modf.c b/newlib/libm/machine/amdgcn/v64sf_modf.c
deleted file mode 100644
index ed56ef3be..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_modf.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_modf.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_numtestf (v64sf);
-
-DEF_VS_MATH_FUNC (v64sf, modff, v64sf x, v64sf *iptr)
-{
- FUNCTION_INIT (v64sf);
- v64sf ret_i;
-
- v64si i0;
- GET_FLOAT_WORD (i0, x, NO_COND);
- v64si j0 = ((i0 >> 23) & 0xff) - 0x7f; /* exponent of x */
- v64sf zero;
- SET_FLOAT_WORD (zero, i0 & 0x80000000,NO_COND);
-
- VECTOR_IF (j0 < 23, cond) /* integer part in x*/
- VECTOR_IF2 (j0 < 0, cond2, cond) /* |x|<1 */
- VECTOR_COND_MOVE (ret_i, zero, cond2);
- VECTOR_RETURN (x, cond2);
- VECTOR_ELSE2 (cond2, cond)
- v64si i = (0x007fffff) >> j0;
-
- VECTOR_IF2 ((i0 & i) == 0, cond3, cond2) /* x is integral */
- VECTOR_COND_MOVE (ret_i, x, cond3);
- VECTOR_RETURN (zero, cond3);
- VECTOR_ELSE2 (cond3, cond2)
- SET_FLOAT_WORD (ret_i, i0 & ~i, cond3);
- VECTOR_RETURN (x - ret_i, cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_ELSE (cond) /* no fraction part */
- VECTOR_COND_MOVE (ret_i, x, cond);
- VECTOR_IF2 (v64sf_numtestf (x) == NAN, cond2, cond)
- VECTOR_COND_MOVE (ret_i, x + x, cond2);
- VECTOR_RETURN (ret_i, cond2); /* x is NaN, return NaN */
- VECTOR_ENDIF
- VECTOR_RETURN (zero, cond); /* return +- 0 */
- VECTOR_ENDIF
-
- *iptr = ret_i;
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64sf_numtest.c b/newlib/libm/machine/amdgcn/v64sf_numtest.c
deleted file mode 100644
index 2dc670d7b..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_numtest.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_numtest.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si
-v64sf_numtestf (v64sf x)
-{
- // Explicitly create mask for internal function.
- v64si __mask = VECTOR_INIT (-1);
- FUNCTION_INIT (v64si);
-
- v64si wx;
- GET_FLOAT_WORD (wx, x, NO_COND);
- v64si exp = (wx & 0x7f800000) >> 23;
-
- /* Check for a zero input. */
- VECTOR_RETURN (VECTOR_INIT (0), x == 0.0);
-
- /* Check for not a number or infinity. */
- VECTOR_IF (exp == 0xff, cond)
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (NAN), VECTOR_INIT (INF),
- wx & 0x7fffff),
- cond);
- /* Otherwise it's a finite value. */
- VECTOR_ELSE (cond)
- VECTOR_RETURN (VECTOR_INIT (NUM), cond);
- VECTOR_ENDIF
-
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64sf_pow.c b/newlib/libm/machine/amdgcn/v64sf_pow.c
deleted file mode 100644
index 2a404a9e5..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_pow.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/math/ef_pow.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const float
-bp[] = {1.0, 1.5,},
-dp_h[] = { 0.0, 5.84960938e-01,}, /* 0x3f15c000 */
-dp_l[] = { 0.0, 1.56322085e-06,}, /* 0x35d1cfdc */
-zero = 0.0,
-one = 1.0,
-two = 2.0,
-two24 = 16777216.0, /* 0x4b800000 */
- /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */
-L1 = 6.0000002384e-01, /* 0x3f19999a */
-L2 = 4.2857143283e-01, /* 0x3edb6db7 */
-L3 = 3.3333334327e-01, /* 0x3eaaaaab */
-L4 = 2.7272811532e-01, /* 0x3e8ba305 */
-L5 = 2.3066075146e-01, /* 0x3e6c3255 */
-L6 = 2.0697501302e-01, /* 0x3e53f142 */
-P1 = 1.6666667163e-01, /* 0x3e2aaaab */
-P2 = -2.7777778450e-03, /* 0xbb360b61 */
-P3 = 6.6137559770e-05, /* 0x388ab355 */
-P4 = -1.6533901999e-06, /* 0xb5ddea0e */
-P5 = 4.1381369442e-08, /* 0x3331bb4c */
-lg2 = 6.9314718246e-01, /* 0x3f317218 */
-lg2_h = 6.93145752e-01, /* 0x3f317200 */
-lg2_l = 1.42860654e-06, /* 0x35bfbe8c */
-ovt = 4.2995665694e-08, /* -(128-log2(ovfl+.5ulp)) */
-cp = 9.6179670095e-01, /* 0x3f76384f =2/(3ln2) */
-cp_h = 9.6179199219e-01, /* 0x3f763800 =head of cp */
-cp_l = 4.7017383622e-06, /* 0x369dc3a0 =tail of cp_h */
-ivln2 = 1.4426950216e+00, /* 0x3fb8aa3b =1/ln2 */
-ivln2_h = 1.4426879883e+00, /* 0x3fb8aa00 =16b 1/ln2*/
-ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/
-
-v64sf v64sf_sqrtf_aux (v64sf, v64si);
-v64sf v64sf_scalbnf_aux (v64sf, v64si, v64si);
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, powf, v64sf x, v64sf y)
-{
- FUNCTION_INIT (v64sf);
-
- v64si hx, hy;
- GET_FLOAT_WORD (hx,x, NO_COND);
- GET_FLOAT_WORD (hy,y, NO_COND);
- v64si ix = hx&0x7fffffff;
- v64si iy = hy&0x7fffffff;
-
- /* y==zero: x**0 = 1 */
- VECTOR_IF (FLT_UWORD_IS_ZERO(iy), cond)
- VECTOR_RETURN (x + y, cond & v64sf_issignalingf_inline(x));
- VECTOR_RETURN (VECTOR_INIT (1.0f), cond);
- VECTOR_ENDIF
-
- /* x|y==NaN return NaN unless x==1 then return 1 */
- VECTOR_IF (FLT_UWORD_IS_NAN(ix) | FLT_UWORD_IS_NAN(iy), cond)
- VECTOR_IF2 (hx==0x3f800000 & ~v64sf_issignalingf_inline(y), cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (1.0f), cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (x + y, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* determine if y is an odd int when x < 0
- * yisint = 0 ... y is not an integer
- * yisint = 1 ... y is an odd int
- * yisint = 2 ... y is an even int
- */
- v64si yisint = VECTOR_INIT (0);
-
- VECTOR_IF (hx < 0, cond)
- VECTOR_IF2 (iy >= 0x4b800000, cond2, cond)
- VECTOR_COND_MOVE (yisint, VECTOR_INIT (2), cond2); /* even integer y */
- VECTOR_ELSEIF2 (iy >= 0x3f800000, cond2, cond)
- v64si k = (iy>>23)-0x7f; /* exponent */
- v64si j = iy>>(23-k);
- VECTOR_COND_MOVE (yisint, 2-(j&1), cond2 & (j<<(23-k))==iy);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* special value of y */
- VECTOR_IF (FLT_UWORD_IS_INFINITE(iy), cond) /* y is +-inf */
- VECTOR_IF2 (ix==0x3f800000, cond2, cond)
- VECTOR_RETURN (VECTOR_INIT (1.0f), cond2); /* +-1**+-inf = 1 */
- VECTOR_ELSEIF2 (ix > 0x3f800000, cond2, cond) /* (|x|>1)**+-inf = inf,0 */
- VECTOR_RETURN (y, cond2 & (hy >= 0));
- VECTOR_RETURN (VECTOR_INIT (0.0f), cond2);
- VECTOR_ELSE2 (cond2, cond) /* (|x|<1)**-,+inf = inf,0 */
- VECTOR_RETURN (-y, cond2 & (hy<0));
- VECTOR_RETURN (VECTOR_INIT (0.0f), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (iy==0x3f800000, cond) /* y is +-1 */
- VECTOR_RETURN (VECTOR_INIT (1.0f) / x, cond & (hy<0));
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- VECTOR_RETURN (x*x, hy==0x40000000); /* y is 2 */
- /* y is 0.5 */
- /* x >= +0 */
- VECTOR_RETURN (v64sf_sqrtf_aux (x, __mask), (hy==0x3f000000) & (hx >= 0));
-
- v64sf ax = __builtin_gcn_fabsvf(x);
- /* special value of x */
- VECTOR_IF (FLT_UWORD_IS_INFINITE(ix)|FLT_UWORD_IS_ZERO(ix)|ix==0x3f800000, cond)
- v64sf z = ax; /*x is +-0,+-inf,+-1*/
- VECTOR_COND_MOVE (z, VECTOR_INIT (1.0f) / z, cond & (hy < 0)); /* z = (1/|x|) */
- VECTOR_IF2 (hx<0, cond2, cond)
- VECTOR_IF2 (((ix-0x3f800000)|yisint)==0, cond3, cond2)
- /* (-1)**non-int is NaN */
- VECTOR_COND_MOVE (z, (z-z)/(z-z), cond3);
- VECTOR_ELSEIF2 (yisint==1, cond3, cond2)
- /* (x<0)**odd = -(|x|**odd) */
- VECTOR_COND_MOVE (z, -z, cond3);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_RETURN (z, cond);
- VECTOR_ENDIF
-
- /* (x<0)**(non-int) is NaN */
- VECTOR_RETURN ((x-x)/(x-x), ((((hx >> 31) & 1) - 1)|yisint)==0);
-
- v64sf t1, t2;
-
- /* |y| is huge */
- VECTOR_IF (iy>0x4d000000, cond) /* if |y| > 2**27 */
- /* over/underflow if x is not close to one */
- VECTOR_IF2(ix<0x3f7ffff4, cond2, cond)
- VECTOR_RETURN (v64sf_math_oflowf(VECTOR_INIT (0)), cond2 & (hy < 0));
- VECTOR_RETURN (v64sf_math_uflowf(VECTOR_INIT (0)), cond2);
- VECTOR_ENDIF
- VECTOR_IF2(ix>0x3f800007, cond2, cond)
- VECTOR_RETURN (v64sf_math_oflowf(VECTOR_INIT (0)), cond2 & (hy > 0));
- VECTOR_RETURN (v64sf_math_uflowf(VECTOR_INIT (0)), cond2);
- VECTOR_ENDIF
- /* now |1-x| is tiny <= 2**-20, suffice to compute
- log(x) by x-x^2/2+x^3/3-x^4/4 */
- v64sf t = ax-1; /* t has 20 trailing zeros */
- v64sf w = (t*t)*(0.5f-t*(0.333333333333f-t*0.25f));
- v64sf u = ivln2_h*t; /* ivln2_h has 16 sig. bits */
- v64sf v = t*ivln2_l-w*ivln2;
- VECTOR_COND_MOVE (t1, u+v, cond);
- v64si is;
- GET_FLOAT_WORD(is,t1, cond);
- SET_FLOAT_WORD(t1,is&0xfffff000, cond);
- VECTOR_COND_MOVE (t2, v-(t1-u), cond);
- VECTOR_RETURN (VECTOR_INIT (0.123456f), cond);
- VECTOR_ELSE (cond)
- v64si n = VECTOR_INIT (0);
- /* take care subnormal number */
- VECTOR_IF2 (FLT_UWORD_IS_SUBNORMAL(ix), cond2, cond)
- VECTOR_COND_MOVE (ax, ax * two24, cond);
- VECTOR_COND_MOVE (n, n - 24, cond2);
- GET_FLOAT_WORD(ix,ax, cond2);
- VECTOR_ENDIF
- n += (ix>>23)-0x7f;
- v64si j = ix&0x007fffff;
- /* determine interval */
- v64si ix = j|0x3f800000; /* normalize ix */
- v64si k;
- VECTOR_IF2 (j<=0x1cc471, cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2); /* |x|<sqrt(3/2) */
- VECTOR_ELSEIF2 (j<0x5db3d7, cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (1), cond2); /* |x|<sqrt(3) */
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2);
- VECTOR_COND_MOVE (n, n + 1, cond2);
- VECTOR_COND_MOVE (ix, ix - 0x00800000, cond2);
- VECTOR_ENDIF
- SET_FLOAT_WORD(ax,ix, cond);
-
- /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
- /* bp[0]=1.0, bp[1]=1.5 */
- v64sf bp_k = VECTOR_MERGE (VECTOR_INIT (bp[1]), VECTOR_INIT (bp[0]), k == 1);
- v64sf u = ax-bp_k;
- v64sf v = 1.0f/(ax+bp_k);
- v64sf s = u*v;
- v64sf s_h = s;
- v64si is;
- GET_FLOAT_WORD(is,s_h, cond);
- SET_FLOAT_WORD(s_h,is&0xfffff000, cond);
- /* t_h=ax+bp[k] High */
- v64sf t_h;
- SET_FLOAT_WORD(t_h,((ix>>1)|0x20000000)+0x0040000+(k<<21), cond);
- v64sf t_l = ax - (t_h-bp_k);
- v64sf s_l = v*((u-s_h*t_h)-s_h*t_l);
- /* compute log(ax) */
- v64sf s2 = s*s;
- v64sf r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
- r += s_l*(s_h+s);
- s2 = s_h*s_h;
- t_h = __builtin_convertvector(3.0f+s2+r, v64sf);
- GET_FLOAT_WORD(is,t_h, cond);
- SET_FLOAT_WORD(t_h,is&0xfffff000, cond);
- t_l = r-((t_h-3.0f)-s2);
- /* u+v = s*(1+...) */
- u = s_h*t_h;
- v = s_l*t_h+t_l*s;
- /* 2/(3log2)*(s+...) */
- v64sf p_h = u+v;
- GET_FLOAT_WORD(is,p_h, cond);
- SET_FLOAT_WORD(p_h,is&0xfffff000, cond);
- v64sf p_l = v-(p_h-u);
- v64sf z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
- v64sf dp_l_k = VECTOR_MERGE (VECTOR_INIT (dp_l[1]), VECTOR_INIT (dp_l[0]), k == 1);
- v64sf z_l = cp_l*p_h+p_l*cp+dp_l_k;
- /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
- v64sf t = __builtin_convertvector (n, v64sf);
- v64sf dp_h_k = VECTOR_MERGE (VECTOR_INIT (dp_h[1]), VECTOR_INIT (dp_h[0]), k == 1);
- VECTOR_COND_MOVE (t1, (((z_h+z_l)+dp_h_k)+t), cond);
- GET_FLOAT_WORD(is,t1, cond);
- SET_FLOAT_WORD(t1,is&0xfffff000, cond);
- VECTOR_COND_MOVE (t2, z_l-(((t1-t)-dp_h_k)-z_h), cond);
- VECTOR_ENDIF
-
- v64sf s = VECTOR_INIT (1.0f); /* s (sign of result -ve**odd) = -1 else = 1 */
- VECTOR_COND_MOVE (s, VECTOR_INIT (-1.0f), /* (-ve)**(odd int) */
- ((hx>>31) != 0)&(yisint == 1));
-
- /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
- v64si is;
- GET_FLOAT_WORD(is,y, NO_COND);
- v64sf y1;
- SET_FLOAT_WORD(y1,is&0xfffff000, NO_COND);
- v64sf p_l = (y-y1)*t1+y*t2;
- v64sf p_h = y1*t1;
- v64sf z = p_l+p_h;
- v64si j;
- GET_FLOAT_WORD(j,z, NO_COND);
- v64si i = j&0x7fffffff;
- VECTOR_IF (j>0, cond)
- VECTOR_RETURN (v64sf_math_oflowf(s<0), cond & i>FLT_UWORD_EXP_MAX); /* overflow */
- VECTOR_RETURN (v64sf_math_oflowf(s<0), cond & (i==FLT_UWORD_EXP_MAX)
- & (p_l+ovt>z-p_h)); /* overflow */
- VECTOR_ELSE (cond)
- VECTOR_RETURN (v64sf_math_uflowf(s<0), cond & (i>FLT_UWORD_EXP_MIN)); /* underflow */
- VECTOR_RETURN (v64sf_math_uflowf(s<0), cond & (i==FLT_UWORD_EXP_MIN)
- & (p_l<=z-p_h)); /* underflow */
- VECTOR_ENDIF
- /*
- * compute 2**(p_h+p_l)
- */
- v64si k = (i>>23)-0x7f;
- v64si n = VECTOR_INIT (0);
- VECTOR_IF (i>0x3f000000, cond) /* if |z| > 0.5, set n = [z+0.5] */
- VECTOR_COND_MOVE (n, j+(0x00800000>>(k+1)), cond);
- k = ((n&0x7fffffff)>>23)-0x7f; /* new k for n */
- v64sf t;
- SET_FLOAT_WORD(t,n&~(0x007fffff>>k), cond);
- VECTOR_COND_MOVE (n, ((n&0x007fffff)|0x00800000)>>(23-k), cond);
- VECTOR_COND_MOVE (n, -n, cond & (j<0));
- VECTOR_COND_MOVE (p_h, p_h - t, cond);
- VECTOR_ENDIF
- v64sf t = p_l+p_h;
- GET_FLOAT_WORD(is,t, NO_COND);
- SET_FLOAT_WORD(t,is&0xfffff000, NO_COND);
- v64sf u = t*lg2_h;
- v64sf v = (p_l-(t-p_h))*lg2+t*lg2_l;
- z = u+v;
- v64sf w = v-(z-u);
- t = z*z;
- t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
- v64sf r = (z*t1)/(t1-2.0f)-(w+z*w);
- z = VECTOR_INIT (1.0f)-(r-z);
- GET_FLOAT_WORD(j,z, NO_COND);
- j += (n<<23);
- VECTOR_IF ((j>>23)<=0, cond)
- VECTOR_COND_MOVE (z, v64sf_scalbnf_aux(z, n, __mask), cond); /* subnormal output */
- VECTOR_ELSE (cond)
- SET_FLOAT_WORD(z, j, cond);
- VECTOR_ENDIF
- VECTOR_RETURN (s*z, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (powf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_remainder.c b/newlib/libm/machine/amdgcn/v64sf_remainder.c
deleted file mode 100644
index bed40e527..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_remainder.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/ef_remainder.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_fmodf_aux (v64sf, v64sf, v64si);
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, remainderf, v64sf x, v64sf p)
-{
- FUNCTION_INIT (v64sf);
-
- v64si hx;
- GET_FLOAT_WORD (hx, x, NO_COND);
- v64si hp;
- GET_FLOAT_WORD (hp, p, NO_COND);
- v64si sx = hx & 0x80000000;
- hp &= 0x7fffffff;
- hx &= 0x7fffffff;
-
- /* purge off exception values */
- /*if(hp==0) // p = 0 */
- /*if((hx>=0x7f800000)|| // x not finite
- ((hp>0x7f800000))) // p is NaN */
- VECTOR_RETURN ((x*p) / (x*p),
- (hp == 0) | (hx >= 0x7f800000) | (hp > 0x7f800000));
-
- /* if (hp<=0x7effffff) // now x < 2p */
- VECTOR_COND_MOVE (x, v64sf_fmodf_aux (x, p+p, __mask), hp <= 0x7effffff);
-
- /*if ((hx-hp)==0) */
- VECTOR_RETURN (0.0f * x, (hx-hp) == 0);
-
- x = __builtin_gcn_fabsvf (x);
- p = __builtin_gcn_fabsvf (p);
-
- VECTOR_IF (hp < 0x01000000, cond)
- VECTOR_IF2 (x + x > p, cond2, cond)
- VECTOR_COND_MOVE (x, x - p, cond2);
- VECTOR_COND_MOVE (x, x - p, cond2 & (x + x >= p));
- VECTOR_ENDIF
- VECTOR_ELSE (cond)
- v64sf p_half = 0.5f * p;
- VECTOR_IF2 (x > p_half, cond2, cond)
- VECTOR_COND_MOVE (x, x - p, cond2);
- VECTOR_COND_MOVE (x, x - p, cond2 & (x >= p_half));
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- GET_FLOAT_WORD (hx, x, NO_COND);
- SET_FLOAT_WORD (x, hx ^ sx, NO_COND);
-
- VECTOR_RETURN (x, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (remainderf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_rint.c b/newlib/libm/machine/amdgcn/v64sf_rint.c
deleted file mode 100644
index 8ebad4bea..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_rint.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_rint.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const float TWO23[2] = {
- 8.3886080000e+06, /* 0x4b000000 */
- -8.3886080000e+06, /* 0xcb000000 */
-};
-
-DEF_VS_MATH_FUNC (v64sf, rintf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- v64si i0;
- GET_FLOAT_WORD (i0, x, NO_COND);
- v64si sx = (i0 >> 31) & 1;
- v64sf two23 = VECTOR_MERGE (TWO23[1] + x, TWO23[0] + x, sx != 0);
- v64si ix = (i0 & 0x7fffffff);
- v64si j0 = (ix >> 23) - 0x7f;
- VECTOR_IF (j0 < 23, cond)
- VECTOR_RETURN (x, cond & FLT_UWORD_IS_ZERO (ix));
- VECTOR_IF2 (j0 < 0, cond2, cond)
- v64si i1 = (i0 & 0x07fffff);
- VECTOR_COND_MOVE (i0, i0 & 0xfff00000, cond2);
- VECTOR_COND_MOVE (i0, i0 | (((i1 | -i1) >> 9) & 0x400000), cond2);
- SET_FLOAT_WORD (x, i0, cond2);
- v64sf w = two23 + x;
- v64sf t = w - two23;
- GET_FLOAT_WORD (i0, t, cond2);
- SET_FLOAT_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2);
- VECTOR_RETURN (t, cond2);
- VECTOR_ELSE2 (cond2, cond)
- v64si i = (0x007fffff) >> j0;
- VECTOR_RETURN (x, cond2 & ((i0 & i) == 0)); /* x is integral */
- i >>= 1;
- VECTOR_COND_MOVE (i0, (i0 & (~i)) | (0x200000 >> j0),
- cond2 & ((i0 & i) != 0));
- VECTOR_ENDIF
- VECTOR_ELSE (cond)
- VECTOR_RETURN (x + x, cond & ~FLT_UWORD_IS_FINITE (ix)); /* inf or NaN */
- VECTOR_RETURN (x, cond); /* x is integral */
- VECTOR_ENDIF
-
- SET_FLOAT_WORD (x, i0, NO_COND);
- v64sf w = two23 + x;
- VECTOR_RETURN (w - two23, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (rintf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_scalb.c b/newlib/libm/machine/amdgcn/v64sf_scalb.c
deleted file mode 100644
index a2350c044..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_scalb.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/ef_scalb.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_isnanf (v64sf);
-v64si v64sf_finitef (v64sf);
-v64sf v64sf_rintf_aux (v64sf, v64si);
-v64sf v64sf_scalbnf_aux (v64sf, v64si, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, scalbf, v64sf x, v64sf fn)
-{
- FUNCTION_INIT (v64sf);
-
- VECTOR_IF (v64sf_isnanf(x) | v64sf_isnanf(fn), cond)
- VECTOR_RETURN (x * fn, cond);
- VECTOR_ENDIF
- VECTOR_IF (~v64sf_finitef (fn), cond)
- VECTOR_IF2 (fn > 0.0f, cond2, cond)
- VECTOR_RETURN (x * fn, cond2);
- VECTOR_ELSE2 (cond2, cond)
- VECTOR_RETURN (x / (-fn), cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (v64sf_rintf_aux (fn, __mask) != fn, cond)
- VECTOR_RETURN ((fn-fn)/(fn-fn), cond);
- VECTOR_ENDIF
-#if INT_MAX > 65000
- VECTOR_IF (fn > 65000.0f, cond)
- VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (65000), __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (-fn > 65000.0f, cond)
- VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (-65000), __mask), cond);
- VECTOR_ENDIF
-#else
- VECTOR_IF (fn > 32000.0f, cond)
- VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (32000), __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (-fn > 32000.0f, cond)
- VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (-32000), __mask), cond);
- VECTOR_ENDIF
-#endif
- VECTOR_RETURN (v64sf_scalbnf_aux (x, __builtin_convertvector (fn, v64si), __mask),
- NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS2 (scalbf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_scalbn.c b/newlib/libm/machine/amdgcn/v64sf_scalbn.c
deleted file mode 100644
index d53e0a0f6..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_scalbn.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/common/sf_scalbn.c in Newlib. */
-
-#include "amdgcnmach.h"
-#include <limits.h>
-#include <float.h>
-
-#if INT_MAX > 50000
-#define OVERFLOW_INT 50000
-#else
-#define OVERFLOW_INT 30000
-#endif
-
-static const float
-two25 = 3.355443200e+07, /* 0x4c000000 */
-twom25 = 2.9802322388e-08, /* 0x33000000 */
-huge = 1.0e+30,
-tiny = 1.0e-30;
-
-v64sf v64sf_copysignf_aux (v64sf, v64sf, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, scalbnf, v64sf x, v64si n)
-{
- FUNCTION_INIT (v64sf);
-
- const v64sf huge_v = VECTOR_INIT ((float) huge);
- const v64sf tiny_v = VECTOR_INIT ((float) tiny);
-
- v64si ix;
- GET_FLOAT_WORD (ix, x, NO_COND);
- v64si hx = ix & 0x7fffffff;
- v64si k = hx >> 23; /* extract exponent */
- VECTOR_IF (FLT_UWORD_IS_ZERO(hx), cond)
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_IF (~FLT_UWORD_IS_FINITE(hx), cond) /* NaN or Inf */
- VECTOR_RETURN (x + x, cond);
- VECTOR_ENDIF
- VECTOR_IF (FLT_UWORD_IS_SUBNORMAL (hx), cond);
- VECTOR_COND_MOVE (x, x * two25, cond);
- GET_FLOAT_WORD (ix, x, cond);
- VECTOR_COND_MOVE (k, ((ix & 0x7f800000) >> 23) - 25, cond);
- VECTOR_IF2 (n < -50000, cond2, cond) /*underflow*/
- VECTOR_RETURN (tiny * x, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF (n > OVERFLOW_INT, cond) // in case integer overflow in n+k
- VECTOR_RETURN (huge_v * v64sf_copysignf_aux (huge_v, x, __mask), cond);
- VECTOR_ENDIF
- k = k + n;
- VECTOR_IF (k > FLT_LARGEST_EXP, cond) /* overflow */
- VECTOR_RETURN (huge_v * v64sf_copysignf_aux (huge_v, x, __mask), cond);
- VECTOR_ENDIF
- VECTOR_IF (k > 0, cond) /* normal result */
- SET_FLOAT_WORD (x, (ix & 0x807fffff) | (k << 23), cond);
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
- VECTOR_IF (k < FLT_SMALLEST_EXP, cond) /*underflow*/
- VECTOR_RETURN (tiny_v * v64sf_copysignf_aux (tiny_v, x, __mask),
- k < FLT_SMALLEST_EXP);
- VECTOR_ENDIF
-
- k += 25; /* subnormal result */
- SET_FLOAT_WORD (x, (ix & 0x807fffff) | (k << 23), NO_COND);
- VECTOR_RETURN (x * twom25, NO_COND);
-
- FUNCTION_RETURN;
-}
diff --git a/newlib/libm/machine/amdgcn/v64sf_signif.c b/newlib/libm/machine/amdgcn/v64sf_signif.c
deleted file mode 100644
index aa1a56a3f..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_signif.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/mathfp/sf_signif.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_scalbf_aux (v64sf x, v64sf fn, v64si);
-v64si v64sf_ilogbf_aux (v64sf x, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, significandf, v64sf x)
-{
- return v64sf_scalbf_aux (x, -__builtin_convertvector (v64sf_ilogbf_aux (x, __mask), v64sf), __mask);
-}
-
-DEF_VARIANTS (significandf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_sin.c b/newlib/libm/machine/amdgcn/v64sf_sin.c
deleted file mode 100644
index 35e6381e7..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_sin.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_sin.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_sinef_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, sinf, v64sf x)
-{
- return v64sf_sinef_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (sinf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_sine.c b/newlib/libm/machine/amdgcn/v64sf_sine.c
deleted file mode 100644
index e818763f6..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_sine.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_sine.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_numtestf (v64sf);
-
-static const float HALF_PI = 1.570796326;
-static const float ONE_OVER_PI = 0.318309886;
-static const float r[] = { -0.1666665668,
- 0.8333025139e-02,
- -0.1980741872e-03,
- 0.2601903036e-5 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, sinef, v64sf x, int cosine)
-{
- const float YMAX = 210828714.0;
-
- FUNCTION_INIT (v64sf);
-
- v64si num_type = v64sf_numtestf (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond);
- VECTOR_ENDIF
-
- /* Use sin and cos properties to ease computations. */
- v64si sgn;
- v64sf y;
-
- if (cosine)
- {
- sgn = VECTOR_INIT (0);
- y = __builtin_gcn_fabsvf (x) + HALF_PI;
- }
- else
- {
- sgn = x < 0.0f;
- y = VECTOR_MERGE (-x, x, x < 0.0f);
- }
-
- /* Check for values of y that will overflow here. */
- VECTOR_IF (y > YMAX, cond)
- errno = ERANGE;
- VECTOR_RETURN (x, cond);
- VECTOR_ENDIF
-
- /* Calculate the exponent. */
- v64si Nneg = __builtin_convertvector (y * ONE_OVER_PI - 0.5f, v64si);
- v64si Npos = __builtin_convertvector (y * ONE_OVER_PI + 0.5f, v64si);
- v64si N = VECTOR_MERGE (Nneg, Npos, y < 0.0f);
- v64sf XN = __builtin_convertvector (N, v64sf);
-
- VECTOR_COND_MOVE (sgn, ~sgn, (N & 1) != 0);
-
- if (cosine)
- XN -= 0.5;
-
- y = __builtin_gcn_fabsvf (x) - XN * (float) __PI;
-
- v64sf res;
-
- VECTOR_IF ((-z_rooteps_f < y) & (y < z_rooteps_f), cond)
- VECTOR_COND_MOVE (res, y, cond);
- VECTOR_ELSE (cond)
- v64sf g = y * y;
-
- /* Calculate the Taylor series. */
- v64sf R = (((r[3] * g + r[2]) * g + r[1]) * g + r[0]) * g;
-
- /* Finally, compute the result. */
- VECTOR_COND_MOVE (res, y + y * R, cond);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, sgn);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_sineh.c b/newlib/libm/machine/amdgcn/v64sf_sineh.c
deleted file mode 100644
index 3f656867f..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_sineh.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- ******************************************************************/
-
-/* Based in newlib/libm/mathfp/sf_sineh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_expf_aux (v64sf, v64si);
-v64si v64sf_numtestf (v64sf);
-v64si v64sf_isposf (v64sf);
-
-static const float q[] = { -0.428277109e+2 };
-static const float p[] = { -0.713793159e+1,
- -0.190333399 };
-static const float LNV = 0.6931610107;
-static const float INV_V2 = 0.2499930850;
-static const float V_OVER2_MINUS1 = 0.1383027787e-4;
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, sinehf, v64sf x, int cosineh)
-{
- const float WBAR = 18.55;
-
- FUNCTION_INIT (v64sf);
-
- v64si sgn = VECTOR_INIT (0);
- v64si v_cosineh = VECTOR_INIT (cosineh ? -1 : 0);
-
- /* Check for special values. */
- v64si num_type = v64sf_numtestf (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity_f.f),
- VECTOR_INIT (-z_infinity_f.f),
- v64sf_isposf (x)),
- cond);
- VECTOR_ENDIF
-
- v64sf y = __builtin_gcn_fabsvf (x);
-
- if (!cosineh)
- VECTOR_COND_MOVE (sgn, VECTOR_INIT (-1), x < 0.0f);
-
- v64sf res;
-
- VECTOR_IF (((y > 1.0f) & ~v_cosineh) | v_cosineh, cond)
- VECTOR_IF2 (y > (float) BIGX, cond2, cond)
- v64sf w = y - LNV;
-
- /* Check for w > maximum here. */
- VECTOR_IF2 (w > (float) BIGX, cond3, cond2)
- errno = ERANGE;
- VECTOR_RETURN (x, cond3);
- VECTOR_ENDIF
-
- v64sf z = v64sf_expf_aux (w, __mask);
-
- VECTOR_COND_MOVE (res, z * (V_OVER2_MINUS1 + 1.0f),
- cond2 & (w > WBAR));
- VECTOR_ELSE2 (cond2, cond)
- v64sf z = v64sf_expf_aux (y, __mask);
- if (cosineh) {
- VECTOR_COND_MOVE (res, (z + 1 / z) * 0.5f, cond2);
- } else {
- VECTOR_COND_MOVE (res, (z - 1 / z) * 0.5f, cond2);
- }
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, sgn);
- VECTOR_ELSE (cond)
- /* Check for y being too small. */
- VECTOR_IF2 (y < z_rooteps_f, cond2, cond);
- VECTOR_COND_MOVE (res, x, cond2);
- VECTOR_ELSE2 (cond2, cond)
- /* Calculate the Taylor series. */
- v64sf f = x * x;
- v64sf Q = f + q[0];
- v64sf P = p[1] * f + p[0];
- v64sf R = f * (P / Q);
-
- VECTOR_COND_MOVE (res, x + x * R, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_sinh.c b/newlib/libm/machine/amdgcn/v64sf_sinh.c
deleted file mode 100644
index ac779ac1c..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_sinh.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Based on newlib/libm/mathfp/sf_sinh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_sinehf_aux (v64sf, int, v64si);
-
-DEF_VS_MATH_FUNC (v64sf, sinhf, v64sf x)
-{
- return v64sf_sinehf_aux (x, 0, __mask);
-}
-
-DEF_VARIANTS (sinhf, sf, sf)
diff --git a/newlib/libm/machine/amdgcn/v64sf_sqrt.c b/newlib/libm/machine/amdgcn/v64sf_sqrt.c
deleted file mode 100644
index b979a4078..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_sqrt.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- *****************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_sqrt.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64si v64sf_numtestf (v64sf);
-v64si v64sf_isposf (v64sf);
-
-#if defined (__has_builtin) \
- && __has_builtin (__builtin_gcn_frexpvf_mant) \
- && __has_builtin (__builtin_gcn_frexpvf_exp) \
- && __has_builtin (__builtin_gcn_ldexpvf)
-
-DEF_VS_MATH_FUNC (v64sf, sqrtf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- /* Check for special values. */
- v64si num_type = v64sf_numtestf (x);
- VECTOR_IF (num_type == NAN, cond)
- errno = EDOM;
- VECTOR_RETURN (x, cond);
- VECTOR_ELSEIF (num_type == INF, cond)
- VECTOR_IF2 (v64sf_isposf (x), cond2, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond2);
- VECTOR_ELSE2 (cond2,cond)
- errno = ERANGE;
- VECTOR_RETURN (VECTOR_INIT (z_infinity_f.f), cond);
- VECTOR_ENDIF
- VECTOR_ENDIF
-
- /* Initial checks are performed here. */
- VECTOR_IF (x == 0.0f, cond)
- VECTOR_RETURN (VECTOR_INIT (0.0f), cond);
- VECTOR_ENDIF
- VECTOR_IF (x < 0.0f, cond)
- errno = EDOM;
- VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond);
- VECTOR_ENDIF
-
- /* Find the exponent and mantissa for the form x = f * 2^exp. */
- v64sf f = __builtin_gcn_frexpvf_mant (x);
- v64si exp = __builtin_gcn_frexpvf_exp (x);
- v64si odd = (exp & 1) != 0;
-
- /* Get the initial approximation. */
- v64sf y = 0.41731f + 0.59016f * f;
-
- f *= 0.5f;
- /* Calculate the remaining iterations. */
- y = y * 0.5f + f / y;
- y = y * 0.5f + f / y;
-
- /* Calculate the final value. */
- VECTOR_COND_MOVE (y, y * (float) __SQRT_HALF, odd);
- VECTOR_COND_MOVE (exp, exp + 1, odd);
- exp >>= 1;
- y = __builtin_gcn_ldexpvf (y, exp);
-
- VECTOR_RETURN (y, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (sqrtf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_tan.c b/newlib/libm/machine/amdgcn/v64sf_tan.c
deleted file mode 100644
index 9f8bac1e4..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_tan.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* Based on newlib/libm/math/kf_tan.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-static const float
-one = 1.0000000000e+00, /* 0x3f800000 */
-pio4 = 7.8539812565e-01, /* 0x3f490fda */
-pio4lo= 3.7748947079e-08, /* 0x33222168 */
-T[] = {
- 3.3333334327e-01, /* 0x3eaaaaab */
- 1.3333334029e-01, /* 0x3e088889 */
- 5.3968254477e-02, /* 0x3d5d0dd1 */
- 2.1869488060e-02, /* 0x3cb327a4 */
- 8.8632395491e-03, /* 0x3c11371f */
- 3.5920790397e-03, /* 0x3b6b6916 */
- 1.4562094584e-03, /* 0x3abede48 */
- 5.8804126456e-04, /* 0x3a1a26c8 */
- 2.4646313977e-04, /* 0x398137b9 */
- 7.8179444245e-05, /* 0x38a3f445 */
- 7.1407252108e-05, /* 0x3895c07a */
- -1.8558637748e-05, /* 0xb79bae5f */
- 2.5907305826e-05, /* 0x37d95384 */
-};
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-static v64sf
-v64sf_kernel_tanf (v64sf x, v64sf y, v64si iy, v64si __mask)
-{
- FUNCTION_INIT (v64sf);
-
- v64si hx;
- GET_FLOAT_WORD(hx, x, NO_COND);
- v64si ix = hx & 0x7fffffff; /* high word of |x| */
-
- VECTOR_IF(ix<0x31800000, cond) /* x < 2**-28 */
- VECTOR_IF2(__builtin_convertvector (x, v64si)==0, cond2, cond) /* generate inexact */
- VECTOR_RETURN (1.0f / __builtin_gcn_fabsvf (x), (ix|(iy+1))==0);
- VECTOR_RETURN (x, cond2 & (iy == 1));
- VECTOR_RETURN (-1.0f / x, cond2);
- VECTOR_ENDIF
- VECTOR_ENDIF
- VECTOR_IF(ix>=0x3f2ca140, cond) /* |x|>=0.6744 */
- VECTOR_COND_MOVE (x, -x, cond & (hx < 0));
- VECTOR_COND_MOVE (y, -y, cond & (hx < 0));
- v64sf z = pio4-x;
- v64sf w = pio4lo-y;
- VECTOR_COND_MOVE (x, z+w, cond);
- VECTOR_COND_MOVE (y, VECTOR_INIT (0.0f), cond);
- VECTOR_ENDIF
- v64sf z = x*x;
- v64sf w = z*z;
- /* Break x^5*(T[1]+x^2*T[2]+...) into
- * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
- * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
- */
- v64sf r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11]))));
- v64sf v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12])))));
- v64sf s = z*x;
- r = y + z*(s*(r+v)+y);
- r += T[0]*s;
- w = x+r;
- VECTOR_IF(ix>=0x3f2ca140, cond)
- v = __builtin_convertvector (iy, v64sf);
- VECTOR_RETURN (__builtin_convertvector (1-((hx>>30)&2), v64sf)
- * (v-2.0f*(x-(w*w/(w+v)-r))), cond);
- VECTOR_ENDIF
- VECTOR_RETURN (w, iy == 1);
- /* if allow error up to 2 ulp,
- simply return -1.0/(x+r) here */
- /* compute -1.0/(x+r) accurately */
- z = w;
- v64si i;
- GET_FLOAT_WORD(i,z, NO_COND);
- SET_FLOAT_WORD(z,i&0xfffff000, NO_COND);
- v = r - (z - x); /* z+v = r+x */
- v64sf a, t;
- t = a = -1.0f/w; /* a = -1.0/w */
- GET_FLOAT_WORD(i,t, NO_COND);
- SET_FLOAT_WORD(t,i&0xfffff000, NO_COND);
- s = 1.0f+t*z;
- VECTOR_RETURN (t+a*(s+t*v), NO_COND);
-
- FUNCTION_RETURN;
-}
-
-static v64si
-v64sf_rem_pio2f (v64sf x, v64sf *y)
-{
- /* Work in double-precision for better accuracy. */
- v64df dx = __builtin_convertvector (x, v64df);
- v64df r = dx * __INV_PI_OVER_TWO_2_24;
- v64si n = (__builtin_convertvector (r, v64si) + 0x800000) >> 24;
- dx = dx - __builtin_convertvector (n, v64df) * __PI_OVER_TWO;
-
- y[0] = __builtin_convertvector (dx, v64sf);
- y[1] = __builtin_convertvector (dx, v64sf) - y[0];
- return n;
-}
-
-DEF_VS_MATH_FUNC (v64sf, tanf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- v64si ix;
- GET_FLOAT_WORD (ix, x, NO_COND);
-
- /* |x| ~< pi/4 */
- ix &= 0x7fffffff;
- VECTOR_RETURN (v64sf_kernel_tanf (x, VECTOR_INIT (0.0f), VECTOR_INIT (1), __mask),
- ix <= 0x3f490fda);
-
- /* tan(Inf or NaN) is NaN */
- VECTOR_RETURN (x-x, ~FLT_UWORD_IS_FINITE(ix)); /* NaN */
-
- /* argument reduction needed */
- v64sf y[2];
- v64si n = v64sf_rem_pio2f (x,y);
- VECTOR_RETURN (v64sf_kernel_tanf (y[0], y[1], 1-((n&1)<<1), __mask), // 1 -- n even
- NO_COND); // -1 -- n odd
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (tanf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_tanh.c b/newlib/libm/machine/amdgcn/v64sf_tanh.c
deleted file mode 100644
index 904c6ebac..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_tanh.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************
- * The following routines are coded directly from the algorithms
- * and coefficients given in "Software Manual for the Elementary
- * Functions" by William J. Cody, Jr. and William Waite, Prentice
- * Hall, 1980.
- *****************************************************************/
-
-/* Based on newlib/libm/mathfp/sf_tanh.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_expf_aux (v64sf, v64si);
-
-static const float LN3_OVER2 = 0.54930614433405484570;
-static const float p[] = { -0.16134119023996228053e+4,
- -0.99225929672236083313e+2,
- -0.96437492777225469787 };
-static const float q[] = { 0.48402357071988688686e+4,
- 0.22337720718962312926e+4,
- 0.11274474380534949335e+3 };
-
-#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf)
-
-DEF_VS_MATH_FUNC (v64sf, tanhf, v64sf x)
-{
- FUNCTION_INIT (v64sf);
-
- v64sf f = __builtin_gcn_fabsvf (x);
- v64sf res;
-
- /* Check if the input is too big. */
- VECTOR_IF (f > (float) BIGX, cond)
- VECTOR_COND_MOVE (res, VECTOR_INIT (1.0f), cond);
-
- VECTOR_ELSEIF (f > LN3_OVER2, cond)
- VECTOR_COND_MOVE (res, 1.0f - 2.0f / (v64sf_expf_aux (2.0f * f, __mask) + 1.0f),
- cond);
-
- /* Check if the input is too small. */
- VECTOR_ELSEIF (f < z_rooteps_f, cond)
- VECTOR_COND_MOVE (res, f, cond);
-
- /* Calculate the Taylor series. */
- VECTOR_ELSE (cond)
- v64sf g = f * f;
-
- v64sf P = (p[2] * g + p[1]) * g + p[0];
- v64sf Q = ((g + q[2]) * g + q[1]) * g + q[0];
- v64sf R = g * (P / Q);
-
- VECTOR_COND_MOVE (res, f + f * R, cond);
- VECTOR_ENDIF
-
- VECTOR_COND_MOVE (res, -res, x < 0.0f);
-
- VECTOR_RETURN (res, NO_COND);
-
- FUNCTION_RETURN;
-}
-
-DEF_VARIANTS (tanhf, sf, sf)
-
-#endif
diff --git a/newlib/libm/machine/amdgcn/v64sf_tgamma.c b/newlib/libm/machine/amdgcn/v64sf_tgamma.c
deleted file mode 100644
index 7eae92fcc..000000000
--- a/newlib/libm/machine/amdgcn/v64sf_tgamma.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- *
- */
-
-/* Based on newlib/libm/math/ef_tgamma.c in Newlib. */
-
-#include "amdgcnmach.h"
-
-v64sf v64sf_expf_aux (v64sf x, v64si __mask);
-v64sf v64sf_lgammaf_r_aux (v64sf x, v64si *signgamp, v64si __mask);
-
-DEF_VS_MATH_FUNC (v64sf, tgammaf, v64sf x)
-{
- v64si signgam_local;
- v64sf y = v64sf_expf_aux(v64sf_lgammaf_r_aux(x, &signgam_local, __mask), __mask);
- VECTOR_COND_MOVE(y, -y, signgam_local < 0);
- return y;
-}
-
-DEF_VARIANTS (tgammaf, sf, sf)