summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2020-11-07 11:56:40 +0000
committerkettenis <kettenis@openbsd.org>2020-11-07 11:56:40 +0000
commit250365d1ba7d1d2d08b83147fec77890b45476a2 (patch)
treeb5fad64955221d21f9c5630424b6bdf97040bfee
parentSince rework of source IP selection, we can reverse the last changes (diff)
downloadwireguard-openbsd-250365d1ba7d1d2d08b83147fec77890b45476a2.tar.xz
wireguard-openbsd-250365d1ba7d1d2d08b83147fec77890b45476a2.zip
Fix ilogb(3) implementation. The results have to match FP_ILOGB0 and
FP_ILOGBNAN which isn't the case for the amd64 and i386 assembly versions. Drop these in favour of C implementations. Als reimplement ilogbl(3) by providing separate ld80 and ld128 implementations that replace the existing implementation which may hit an infinite loop when built for quad-precision long double. ok patrick@, gkoehler@
-rw-r--r--lib/libm/Makefile6
-rw-r--r--lib/libm/arch/amd64/s_ilogb.S20
-rw-r--r--lib/libm/arch/amd64/s_ilogbf.S20
-rw-r--r--lib/libm/arch/i387/s_ilogb.S23
-rw-r--r--lib/libm/arch/i387/s_ilogbf.S23
5 files changed, 3 insertions, 89 deletions
diff --git a/lib/libm/Makefile b/lib/libm/Makefile
index ff94ecf79cf..b5c34b38115 100644
--- a/lib/libm/Makefile
+++ b/lib/libm/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.120 2020/06/28 08:22:57 kettenis Exp $
+# $OpenBSD: Makefile,v 1.121 2020/11/07 11:56:40 kettenis Exp $
# $NetBSD: Makefile,v 1.28 1995/11/20 22:06:19 jtc Exp $
#
# @(#)Makefile 5.1beta 93/09/24
@@ -23,7 +23,7 @@ ARCH_SRCS = e_acos.S e_asin.S e_atan2.S e_exp.S e_fmod.S e_log.S e_log10.S \
invtrig.c \
s_atan.S s_atanf.S s_ceil.S s_ceilf.S s_copysign.S s_copysignf.S \
s_cos.S s_cosf.S s_floor.S s_floorf.S \
- s_ilogb.S s_ilogbf.S s_log1p.S s_log1pf.S s_logb.S s_logbf.S \
+ s_log1p.S s_log1pf.S s_logb.S s_logbf.S \
s_llrint.S s_llrintf.S s_lrint.S s_lrintf.S s_rint.S s_rintf.S\
s_scalbnf.S s_significand.S s_significandf.S \
s_sin.S s_sinf.S s_tan.S s_tanf.S
@@ -36,7 +36,7 @@ ARCH_SRCS = e_acos.S e_asin.S e_atan2.S e_exp.S e_fmod.S e_log.S e_log10.S \
invtrig.c \
s_atan.S s_atanf.S s_ceil.S s_ceilf.S s_copysign.S s_copysignf.S \
s_cos.S s_cosf.S s_floor.S s_floorf.S \
- s_ilogb.S s_ilogbf.S s_log1p.S s_log1pf.S s_logb.S s_logbf.S \
+ s_log1p.S s_log1pf.S s_logb.S s_logbf.S \
s_llrint.S s_llrintf.S s_lrint.S s_lrintf.S \
s_rint.S s_rintf.S s_scalbnf.S s_significand.S \
s_significandf.S s_sin.S s_sinf.S s_tan.S s_tanf.S
diff --git a/lib/libm/arch/amd64/s_ilogb.S b/lib/libm/arch/amd64/s_ilogb.S
deleted file mode 100644
index 6ef0d469575..00000000000
--- a/lib/libm/arch/amd64/s_ilogb.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/* $OpenBSD: s_ilogb.S,v 1.5 2018/07/03 22:43:34 mortimer Exp $ */
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include "abi.h"
-
-ENTRY(ilogb)
- RETGUARD_SETUP(ilogb, r11)
- movsd %xmm0,-8(%rsp)
- fldl -8(%rsp)
- fxtract
- fstp %st
- fistpl -8(%rsp)
- movl -8(%rsp),%eax
- RETGUARD_CHECK(ilogb, r11)
- ret
-END_STD(ilogb)
diff --git a/lib/libm/arch/amd64/s_ilogbf.S b/lib/libm/arch/amd64/s_ilogbf.S
deleted file mode 100644
index 29bf3af13bc..00000000000
--- a/lib/libm/arch/amd64/s_ilogbf.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/* $OpenBSD: s_ilogbf.S,v 1.5 2018/07/03 22:43:34 mortimer Exp $ */
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include "abi.h"
-
-ENTRY(ilogbf)
- RETGUARD_SETUP(ilogbf, r11)
- movss %xmm0,-4(%rsp)
- flds -4(%rsp)
- fxtract
- fstp %st
- fistpl -4(%rsp)
- movl -4(%rsp),%eax
- RETGUARD_CHECK(ilogbf, r11)
- ret
-END_STD(ilogbf)
diff --git a/lib/libm/arch/i387/s_ilogb.S b/lib/libm/arch/i387/s_ilogb.S
deleted file mode 100644
index 7400ebc2b84..00000000000
--- a/lib/libm/arch/i387/s_ilogb.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/* $OpenBSD: s_ilogb.S,v 1.6 2016/09/12 19:47:02 guenther Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include "DEFS.h"
-
-ENTRY(ilogb)
- pushl %ebp
- movl %esp,%ebp
- subl $4,%esp
-
- fldl 8(%ebp)
- fxtract
- fstp %st
-
- fistpl -4(%ebp)
- movl -4(%ebp),%eax
-
- leave
- ret
-END_STD(ilogb)
diff --git a/lib/libm/arch/i387/s_ilogbf.S b/lib/libm/arch/i387/s_ilogbf.S
deleted file mode 100644
index c7fd4606ad6..00000000000
--- a/lib/libm/arch/i387/s_ilogbf.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/* $OpenBSD: s_ilogbf.S,v 1.6 2016/09/12 19:47:02 guenther Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include "DEFS.h"
-
-ENTRY(ilogbf)
- pushl %ebp
- movl %esp,%ebp
- subl $4,%esp
-
- flds 8(%ebp)
- fxtract
- fstp %st
-
- fistpl -4(%ebp)
- movl -4(%ebp),%eax
-
- leave
- ret
-END_STD(ilogbf)