diff options
author | 2020-11-07 11:56:40 +0000 | |
---|---|---|
committer | 2020-11-07 11:56:40 +0000 | |
commit | 250365d1ba7d1d2d08b83147fec77890b45476a2 (patch) | |
tree | b5fad64955221d21f9c5630424b6bdf97040bfee | |
parent | Since rework of source IP selection, we can reverse the last changes (diff) | |
download | wireguard-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/Makefile | 6 | ||||
-rw-r--r-- | lib/libm/arch/amd64/s_ilogb.S | 20 | ||||
-rw-r--r-- | lib/libm/arch/amd64/s_ilogbf.S | 20 | ||||
-rw-r--r-- | lib/libm/arch/i387/s_ilogb.S | 23 | ||||
-rw-r--r-- | lib/libm/arch/i387/s_ilogbf.S | 23 |
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) |