summaryrefslogtreecommitdiff
path: root/math/R/patches/patch-src_main_format.c
diff options
context:
space:
mode:
Diffstat (limited to 'math/R/patches/patch-src_main_format.c')
-rw-r--r--math/R/patches/patch-src_main_format.c71
1 files changed, 0 insertions, 71 deletions
diff --git a/math/R/patches/patch-src_main_format.c b/math/R/patches/patch-src_main_format.c
deleted file mode 100644
index 8d91689b1b3..00000000000
--- a/math/R/patches/patch-src_main_format.c
+++ /dev/null
@@ -1,71 +0,0 @@
-$NetBSD: patch-src_main_format.c,v 1.4 2013/08/13 19:53:30 markd Exp $
-
-NetBSD does not have rintl() or floorl() so use the OpenBSD implementation
-of rintl() in that case. The same case exists for DragonFly.
-
---- src/main/format.c.orig 2013-03-05 23:02:40.000000000 +0000
-+++ src/main/format.c
-@@ -130,6 +130,7 @@ void formatInteger(int *x, R_xlen_t n, i
- # define R_nearbyintl rintl
- # else
- # define R_nearbyintl private_nearbyintl
-+# if !defined(__NetBSD__) && !defined(__DragonFly__)
- LDOUBLE private_nearbyintl(LDOUBLE x)
- {
- LDOUBLE x1;
-@@ -142,6 +143,55 @@ LDOUBLE private_nearbyintl(LDOUBLE x)
- if (x/2.0 == floorl(x/2.0)) return(x); else return(x1);
- }
- }
-+# else
-+#include <machine/ieee.h>
-+
-+#if LDBL_MAX_EXP != 0x4000
-+/* We also require the usual bias, min exp and expsign packing. */
-+#error "Unsupported long double format"
-+#endif
-+
-+#define BIAS (LDBL_MAX_EXP - 1)
-+
-+static const float
-+shift[2] = {
-+#if LDBL_MANT_DIG == 64
-+ 0x1.0p63, -0x1.0p63
-+#elif LDBL_MANT_DIG == 113
-+ 0x1.0p112, -0x1.0p112
-+#else
-+#error "Unsupported long double format"
-+#endif
-+};
-+static const float zero[2] = { 0.0, -0.0 };
-+
-+long double private_nearbyintl(long double x)
-+{
-+ union {
-+ long double e;
-+ struct ieee_ext bits;
-+ } u;
-+ uint32_t expsign;
-+ int ex, sign;
-+ u.e = x;
-+ expsign = (u.bits.ext_sign << 15) | u.bits.ext_exp;
-+ ex = expsign & 0x7fff;
-+
-+ if (ex >= BIAS + LDBL_MANT_DIG - 1) {
-+ if (ex == BIAS + LDBL_MAX_EXP)
-+ return (x + x); /* Inf, NaN, or unsupported format */
-+ return (x); /* finite and already an integer */
-+ }
-+ sign = expsign >> 15;
-+ x += shift[sign];
-+ x -= shift[sign];
-+
-+ if (ex < BIAS && x == 0.0L)
-+ return (zero[sign]);
-+
-+ return (x);
-+}
-+# endif
- # endif
- # else /* no long double */
- # ifdef HAVE_NEARBYINT