Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openlibm for openSUSE:Factory checked in at 2022-12-24 14:52:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openlibm (Old)
and /work/SRC/openSUSE:Factory/.openlibm.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openlibm"
Sat Dec 24 14:52:24 2022 rev:12 rq:1045139 version:0.8.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/openlibm/openlibm.changes 2021-10-04 18:41:46.642234169 +0200
+++ /work/SRC/openSUSE:Factory/.openlibm.new.1563/openlibm.changes 2022-12-24 14:55:14.492664335 +0100
@@ -1,0 +2,9 @@
+Thu Dec 22 14:13:19 UTC 2022 - Andrea Manzini
+
+- Update to 0.8.1:
+ * Fix sqrt function on i387
+ * Fix incorrect results in `hypotl` near underflow
+ * Export `fenv` functions on all platforms
+- add linker flags to prevent executable stack
+
+-------------------------------------------------------------------
Old:
----
openlibm-0.7.1.tar.gz
New:
----
openlibm-0.8.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openlibm.spec ++++++
--- /var/tmp/diff_new_pack.EgPr4O/_old 2022-12-24 14:55:14.864666506 +0100
+++ /var/tmp/diff_new_pack.EgPr4O/_new 2022-12-24 14:55:14.876666576 +0100
@@ -1,7 +1,7 @@
#
# spec file for package openlibm
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,10 +16,10 @@
#
-%define so_ver 3
+%define so_ver 4
%define libname lib%{name}%{so_ver}
Name: openlibm
-Version: 0.7.1
+Version: 0.8.1
Release: 0
Summary: Standalone C mathematical library
License: BSD-2-Clause AND MIT
@@ -68,6 +68,7 @@
%make_build \
FFLAGS="%{optflags}" \
CFLAGS="%{optflags}" \
+ LDFLAGS="-Wl,-z,noexecstack" \
%ifarch armv6hl
MARCH="armv6" \
%endif
++++++ openlibm-0.7.1.tar.gz -> openlibm-0.8.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/.github/workflows/ci.yml new/openlibm-0.8.1/.github/workflows/ci.yml
--- old/openlibm-0.7.1/.github/workflows/ci.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/.github/workflows/ci.yml 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,44 @@
+name: CI
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - master
+ tags: '*'
+jobs:
+ test-unix:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make
+ - run: make test
+ windows:
+ runs-on: windows-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { sys: mingw64, env: x86_64 }
+ - { sys: mingw32, env: i686 }
+ - { sys: ucrt64, env: ucrt-x86_64 } # Experimental!
+ - { sys: clang64, env: clang-x86_64 } # Experimental!
+ defaults:
+ run:
+ shell: msys2 {0}
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up the desired MSYS2 environment
+ uses: msys2/setup-msys2@v2
+ with:
+ msystem: ${{matrix.sys}}
+ install: base-devel mingw-w64-${{matrix.env}}-toolchain
+ - run: make
+ - run: make test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/Make.inc new/openlibm-0.8.1/Make.inc
--- old/openlibm-0.7.1/Make.inc 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/Make.inc 2022-01-20 00:43:52.000000000 +0100
@@ -6,45 +6,44 @@
OS := $(shell uname)
# Do not forget to bump SOMINOR when changing VERSION,
# and SOMAJOR when breaking ABI in a backward-incompatible way
-VERSION = 0.7.0
-SOMAJOR = 3
+VERSION = 0.8.0
+SOMAJOR = 4
SOMINOR = 0
DESTDIR =
-prefix = /usr/local
-bindir = $(prefix)/bin
-libdir = $(prefix)/lib
-includedir = $(prefix)/include
+prefix ?= /usr/local
+bindir ?= $(prefix)/bin
+libdir ?= $(prefix)/lib
+includedir ?= $(prefix)/include
ifeq ($(OS), FreeBSD)
-pkgconfigdir = $(prefix)/libdata/pkgconfig
+pkgconfigdir ?= $(prefix)/libdata/pkgconfig
else
-pkgconfigdir = $(libdir)/pkgconfig
+pkgconfigdir ?= $(libdir)/pkgconfig
endif
-USEGCC = 1
-USECLANG = 0
+USEGCC ?= 1
+USECLANG ?= 0
ifneq (,$(findstring $(OS),Darwin FreeBSD OpenBSD))
-USEGCC = 0
-USECLANG = 1
+USEGCC ?= 0
+USECLANG ?= 1
endif
-AR = $(TOOLPREFIX)ar
-
ifeq ($(ARCH),wasm32)
-CC = clang-8
-USEGCC = 0
-CFLAGS_add += -fno-builtin -fno-strict-aliasing
+USECLANG = 1
+TOOLPREFIX = llvm-
endif
+AR ?= $(TOOLPREFIX)ar
+
ifeq ($(USECLANG),1)
-USEGCC = 0
+USEGCC ?= 0
CC = clang
CFLAGS_add += -fno-builtin -fno-strict-aliasing
endif
ifeq ($(USEGCC),1)
-CC = $(TOOLPREFIX)gcc
+CC ?= $(TOOLPREFIX)gcc
CFLAGS_add += -fno-gnu89-inline -fno-builtin
endif
@@ -55,6 +54,9 @@
endif
# OS-specific stuff
+ifeq ($(ARCH),arm64)
+override ARCH := aarch64
+endif
ifeq ($(findstring arm,$(ARCH)),arm)
override ARCH := arm
MARCH ?= armv7-a
@@ -79,6 +81,9 @@
ifeq ($(findstring mips,$(ARCH)),mips)
override ARCH := mips
endif
+ifeq ($(findstring riscv64,$(ARCH)),riscv64)
+override ARCH := riscv64
+endif
# If CFLAGS does not contain a -O optimization flag, default to -O3
ifeq ($(findstring -O,$(CFLAGS)),)
@@ -92,8 +97,7 @@
#keep these if statements separate
ifeq ($(OS), WINNT)
SHLIB_EXT = dll
-SONAME_FLAG = -soname
-CFLAGS_add += -nodefaultlibs
+SONAME_FLAG =
shlibdir = $(bindir)
else
ifeq ($(OS), Darwin)
@@ -144,6 +148,16 @@
endif
endif
+ifneq ($(filter $(ARCH),i387 amd64),)
+# Determines whether `long double` is the same as `double` on this arch.
+# linux x86_64, for instance, `long double` is 80 bits wide, whereas on macOS aarch64,
+# `long double` is the same as `double`.
+LONG_DOUBLE_NOT_DOUBLE := 1
+else ifeq ($(ARCH), aarch64)
+ifeq ($(filter $(OS),Darwin WINNT),)
+LONG_DOUBLE_NOT_DOUBLE := 1
+endif
+endif
%.c.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_add) -c $< -o $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/Makefile new/openlibm-0.8.1/Makefile
--- old/openlibm-0.7.1/Makefile 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/Makefile 2022-01-20 00:43:52.000000000 +0100
@@ -2,6 +2,7 @@
include ./Make.inc
SUBDIRS = src $(ARCH) bsdsrc
+ifeq ($(LONG_DOUBLE_NOT_DOUBLE),1)
# Add ld80 directory on x86 and x64
ifneq ($(filter $(ARCH),i387 amd64),)
SUBDIRS += ld80
@@ -11,6 +12,7 @@
else
endif
endif
+endif
define INC_template
TEST=test
@@ -44,6 +46,7 @@
OLM_MAJOR_MINOR_SHLIB_EXT := $(SHLIB_EXT).$(SOMAJOR).$(SOMINOR)
OLM_MAJOR_SHLIB_EXT := $(SHLIB_EXT).$(SOMAJOR)
endif
+LDFLAGS_add += -Wl,$(SONAME_FLAG),libopenlibm.$(OLM_MAJOR_SHLIB_EXT)
endif
.PHONY: all check test clean distclean \
@@ -65,7 +68,7 @@
$(AR) -rcs libopenlibm.a $(OBJS)
libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT): $(OBJS)
- $(CC) -shared $(OBJS) $(LDFLAGS) $(LDFLAGS_add) -Wl,$(SONAME_FLAG),libopenlibm.$(OLM_MAJOR_SHLIB_EXT) -o $@
+ $(CC) -shared $(OBJS) $(LDFLAGS) $(LDFLAGS_add) -o $@
ifneq ($(OS),WINNT)
ln -sf $@ libopenlibm.$(OLM_MAJOR_SHLIB_EXT)
ln -sf $@ libopenlibm.$(SHLIB_EXT)
@@ -78,7 +81,7 @@
$(MAKE) -C test test-float
clean:
- rm -f aarch64/*.o amd64/*.o arm/*.o bsdsrc/*.o i387/*.o ld80/*.o ld128/*.o src/*.o powerpc/*.o mips/*.o s390/*.o
+ rm -f aarch64/*.o amd64/*.o arm/*.o bsdsrc/*.o i387/*.o ld80/*.o ld128/*.o src/*.o powerpc/*.o mips/*.o s390/*.o riscv64/*.o
rm -f libopenlibm.a libopenlibm.*$(SHLIB_EXT)*
$(MAKE) -C test clean
@@ -93,7 +96,13 @@
install-shared: libopenlibm.$(OLM_MAJOR_MINOR_SHLIB_EXT)
mkdir -p $(DESTDIR)$(shlibdir)
+ifeq ($(OS), WINNT)
+ mkdir -p $(DESTDIR)$(libdir)
+ cp -RpP -f libopenlibm.*$(SHLIB_EXT) $(DESTDIR)$(shlibdir)/
+ cp -RpP -f libopenlibm.*$(SHLIB_EXT).a $(DESTDIR)$(libdir)/
+else
cp -RpP -f libopenlibm.*$(SHLIB_EXT)* $(DESTDIR)$(shlibdir)/
+endif
install-pkgconfig: openlibm.pc
mkdir -p $(DESTDIR)$(pkgconfigdir)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/README.md new/openlibm-0.8.1/README.md
--- old/openlibm-0.7.1/README.md 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/README.md 2022-01-20 00:43:52.000000000 +0100
@@ -18,7 +18,7 @@
OpenLibm builds on Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, and
DragonFly BSD. It builds with both GCC and clang. Although largely
tested and widely used on the x86 and x86-64 architectures, OpenLibm
-also supports arm, aarch64, ppc64le, mips, wasm32, and s390(x).
+also supports arm, aarch64, ppc64le, mips, wasm32, riscv, and s390(x).
## Build instructions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/aarch64/fenv.c new/openlibm-0.8.1/aarch64/fenv.c
--- old/openlibm-0.7.1/aarch64/fenv.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/aarch64/fenv.c 2022-01-20 00:43:52.000000000 +0100
@@ -26,7 +26,6 @@
* $FreeBSD: src/lib/msun/arm/fenv.c,v 1.3 2011/10/16 05:37:56 das Exp $
*/
-#define __fenv_static
#include
#ifdef __GNUC_GNU_INLINE__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/amd64/Make.files new/openlibm-0.8.1/amd64/Make.files
--- old/openlibm-0.7.1/amd64/Make.files 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/amd64/Make.files 2022-01-20 00:43:52.000000000 +0100
@@ -3,4 +3,5 @@
s_llrint.S s_llrintf.S s_llrintl.S \
s_logbl.S s_lrint.S s_lrintf.S s_lrintl.S \
s_remquo.S s_remquof.S s_remquol.S \
- s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S
+ s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S \
+ e_fmod.S e_fmodf.S e_fmodl.S
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/amd64/e_fmod.S new/openlibm-0.8.1/amd64/e_fmod.S
--- old/openlibm-0.7.1/amd64/e_fmod.S 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/amd64/e_fmod.S 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 1993,94 Winning Strategies, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Winning Strategies, Inc.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Based on the i387 version written by:
+ * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
+ */
+
+#include
+
+ENTRY(fmod)
+ movsd %xmm0,-8(%rsp)
+ movsd %xmm1,-16(%rsp)
+ fldl -16(%rsp)
+ fldl -8(%rsp)
+1: fprem
+ fstsw %ax
+ testw $0x400,%ax
+ jne 1b
+ fstpl -8(%rsp)
+ movsd -8(%rsp),%xmm0
+ fstp %st
+ ret
+END(fmod)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/amd64/e_fmodf.S new/openlibm-0.8.1/amd64/e_fmodf.S
--- old/openlibm-0.7.1/amd64/e_fmodf.S 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/amd64/e_fmodf.S 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,21 @@
+/*
+ * Based on the i387 version written by J.T. Conklin .
+ * Public domain.
+ */
+
+#include
+
+ENTRY(fmodf)
+ movss %xmm0,-4(%rsp)
+ movss %xmm1,-8(%rsp)
+ flds -8(%rsp)
+ flds -4(%rsp)
+1: fprem
+ fstsw %ax
+ testw $0x400,%ax
+ jne 1b
+ fstps -4(%rsp)
+ movss -4(%rsp),%xmm0
+ fstp %st
+ ret
+END(fmodf)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/amd64/e_fmodl.S new/openlibm-0.8.1/amd64/e_fmodl.S
--- old/openlibm-0.7.1/amd64/e_fmodl.S 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/amd64/e_fmodl.S 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 1993,94 Winning Strategies, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Winning Strategies, Inc.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Based on the i387 version written by:
+ * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
+ */
+
+#include
+
+ENTRY(fmodl)
+ fldt 24(%rsp)
+ fldt 8(%rsp)
+1: fprem
+ fstsw %ax
+ testw $0x400,%ax
+ jne 1b
+ fstp %st(1)
+ ret
+END(fmodl)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/amd64/fenv.c new/openlibm-0.8.1/amd64/fenv.c
--- old/openlibm-0.7.1/amd64/fenv.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/amd64/fenv.c 2022-01-20 00:43:52.000000000 +0100
@@ -29,7 +29,7 @@
#include "bsd_fpu.h"
#include "math_private.h"
-#ifndef OPENLIBM_USE_HOST_FENV_H
+#ifdef _WIN32
#define __fenv_static OLM_DLLEXPORT
#endif
#include
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/bsdsrc/b_tgamma.c new/openlibm-0.8.1/bsdsrc/b_tgamma.c
--- old/openlibm-0.7.1/bsdsrc/b_tgamma.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/bsdsrc/b_tgamma.c 2022-01-20 00:43:52.000000000 +0100
@@ -38,6 +38,7 @@
* acknowledged.
*/
+#include
#include
#include "mathimpl.h"
@@ -312,3 +313,7 @@
if (sgn < 0) y = -y;
return (M_PI / (y*z));
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(tgamma, tgammal);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/i387/e_sqrt.S new/openlibm-0.8.1/i387/e_sqrt.S
--- old/openlibm-0.7.1/i387/e_sqrt.S 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/i387/e_sqrt.S 2022-01-20 00:43:52.000000000 +0100
@@ -8,12 +8,29 @@
//__FBSDID("$FreeBSD: src/lib/msun/i387/e_sqrt.S,v 1.10 2011/01/07 16:13:12 kib Exp $")
ENTRY(sqrt)
- fldl 4(%esp)
+ pushl %ebp
+ movl %esp,%ebp
+ subl $8,%esp
+
+ fstcw -4(%ebp) /* store fpu control word */
+ movw -4(%ebp),%dx
+ andw $0xfeff,%dx /* Set precision field to 64 bits (53 bit mantissa).
+ We assume it's set to 0b11 (extended precision),
+ so zeroing out the low bit of the precision field,
+ will correctly set the precision */
+ movw %dx,-8(%ebp)
+ fldcw -8(%ebp) /* load modfied control word */
+
+ fldl 8(%ebp)
fsqrt
+
+ fldcw -4(%ebp) /* restore original control word */
+
+ leave
ret
END(sqrt)
-
+
/* Enable stack protection */
#if defined(__ELF__)
.section .note.GNU-stack,"",%progbits
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/include/openlibm_fenv.h new/openlibm-0.8.1/include/openlibm_fenv.h
--- old/openlibm-0.7.1/include/openlibm_fenv.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/include/openlibm_fenv.h 2022-01-20 00:43:52.000000000 +0100
@@ -14,6 +14,8 @@
#include
#elif defined(__s390__)
#include
+#elif defined(__riscv)
+#include
#else
#error "Unsupported platform"
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/include/openlibm_fenv_i387.h new/openlibm-0.8.1/include/openlibm_fenv_i387.h
--- old/openlibm-0.7.1/include/openlibm_fenv_i387.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/include/openlibm_fenv_i387.h 2022-01-20 00:43:52.000000000 +0100
@@ -29,6 +29,7 @@
#ifndef _FENV_H_
#define _FENV_H_
+#include "openlibm_defs.h"
#include "cdefs-compat.h"
#include "types-compat.h"
@@ -88,8 +89,8 @@
/* After testing for SSE support once, we cache the result in __has_sse. */
enum __sse_support { __SSE_YES, __SSE_NO, __SSE_UNK };
-extern enum __sse_support __has_sse;
-int __test_sse(void);
+OLM_DLLEXPORT extern enum __sse_support __has_sse;
+OLM_DLLEXPORT int __test_sse(void);
#ifdef __SSE__
#define __HAS_SSE() 1
#else
@@ -98,7 +99,7 @@
#endif
/* Default floating-point environment */
-extern const fenv_t __fe_dfl_env;
+OLM_DLLEXPORT extern const fenv_t __fe_dfl_env;
#define FE_DFL_ENV (&__fe_dfl_env)
#define __fldcw(__cw) __asm __volatile("fldcw %0" : : "m" (__cw))
@@ -150,8 +151,8 @@
return (0);
}
-int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
-int feraiseexcept(int __excepts);
+OLM_DLLEXPORT int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+OLM_DLLEXPORT int feraiseexcept(int __excepts);
__fenv_static inline int
fetestexcept(int __excepts)
@@ -206,8 +207,8 @@
return (0);
}
-int fegetenv(fenv_t *__envp);
-int feholdexcept(fenv_t *__envp);
+OLM_DLLEXPORT int fegetenv(fenv_t *__envp);
+OLM_DLLEXPORT int feholdexcept(fenv_t *__envp);
__fenv_static inline int
fesetenv(const fenv_t *__envp)
@@ -231,12 +232,12 @@
return (0);
}
-int feupdateenv(const fenv_t *__envp);
+OLM_DLLEXPORT int feupdateenv(const fenv_t *__envp);
#if __BSD_VISIBLE
-int feenableexcept(int __mask);
-int fedisableexcept(int __mask);
+OLM_DLLEXPORT int feenableexcept(int __mask);
+OLM_DLLEXPORT int fedisableexcept(int __mask);
/* We currently provide no external definition of fegetexcept(). */
static inline int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/include/openlibm_fenv_riscv.h new/openlibm-0.8.1/include/openlibm_fenv_riscv.h
--- old/openlibm-0.7.1/include/openlibm_fenv_riscv.h 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/include/openlibm_fenv_riscv.h 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,261 @@
+/*-
+ * Copyright (c) 2004-2005 David Schultz
+ * Copyright (c) 2015-2016 Ruslan Bukin
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/lib/msun/riscv/fenv.h 332792 2018-04-19 20:36:15Z brooks $
+ */
+
+#ifndef _FENV_H_
+#define _FENV_H_
+
+#include
+#include "cdefs-compat.h"
+
+#ifndef __fenv_static
+#define __fenv_static static
+#endif
+
+typedef __uint64_t fenv_t;
+typedef __uint64_t fexcept_t;
+
+/* Exception flags */
+#define FE_INVALID 0x0010
+#define FE_DIVBYZERO 0x0008
+#define FE_OVERFLOW 0x0004
+#define FE_UNDERFLOW 0x0002
+#define FE_INEXACT 0x0001
+#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
+ FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+
+/*
+ * RISC-V Rounding modes
+ */
+#define _ROUND_SHIFT 5
+#define FE_TONEAREST (0x00 << _ROUND_SHIFT)
+#define FE_TOWARDZERO (0x01 << _ROUND_SHIFT)
+#define FE_DOWNWARD (0x02 << _ROUND_SHIFT)
+#define FE_UPWARD (0x03 << _ROUND_SHIFT)
+#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
+ FE_UPWARD | FE_TOWARDZERO)
+
+__BEGIN_DECLS
+
+/* Default floating-point environment */
+extern const fenv_t __fe_dfl_env;
+#define FE_DFL_ENV (&__fe_dfl_env)
+
+#if !defined(__riscv_float_abi_soft) && !defined(__riscv_float_abi_double)
+#if defined(__riscv_float_abi_single)
+#error single precision floating point ABI not supported
+#else
+#error compiler did not set soft/hard float macros
+#endif
+#endif
+
+#ifndef __riscv_float_abi_soft
+#define __rfs(__fcsr) __asm __volatile("csrr %0, fcsr" : "=r" (__fcsr))
+#define __wfs(__fcsr) __asm __volatile("csrw fcsr, %0" :: "r" (__fcsr))
+#endif
+
+#ifdef __riscv_float_abi_soft
+int feclearexcept(int __excepts);
+int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+int feraiseexcept(int __excepts);
+int fetestexcept(int __excepts);
+int fegetround(void);
+int fesetround(int __round);
+int fegetenv(fenv_t *__envp);
+int feholdexcept(fenv_t *__envp);
+int fesetenv(const fenv_t *__envp);
+int feupdateenv(const fenv_t *__envp);
+#else
+__fenv_static inline int
+feclearexcept(int __excepts)
+{
+
+ __asm __volatile("csrc fflags, %0" :: "r"(__excepts));
+
+ return (0);
+}
+
+__fenv_static inline int
+fegetexceptflag(fexcept_t *__flagp, int __excepts)
+{
+ fexcept_t __fcsr;
+
+ __rfs(__fcsr);
+ *__flagp = __fcsr & __excepts;
+
+ return (0);
+}
+
+__fenv_static inline int
+fesetexceptflag(const fexcept_t *__flagp, int __excepts)
+{
+ fexcept_t __fcsr;
+
+ __fcsr = *__flagp;
+ __asm __volatile("csrc fflags, %0" :: "r"(__excepts));
+ __asm __volatile("csrs fflags, %0" :: "r"(__fcsr & __excepts));
+
+ return (0);
+}
+
+__fenv_static inline int
+feraiseexcept(int __excepts)
+{
+
+ __asm __volatile("csrs fflags, %0" :: "r"(__excepts));
+
+ return (0);
+}
+
+__fenv_static inline int
+fetestexcept(int __excepts)
+{
+ fexcept_t __fcsr;
+
+ __rfs(__fcsr);
+
+ return (__fcsr & __excepts);
+}
+
+__fenv_static inline int
+fegetround(void)
+{
+ fexcept_t __fcsr;
+
+ __rfs(__fcsr);
+
+ return (__fcsr & _ROUND_MASK);
+}
+
+__fenv_static inline int
+fesetround(int __round)
+{
+ fexcept_t __fcsr;
+
+ if (__round & ~_ROUND_MASK)
+ return (-1);
+
+ __rfs(__fcsr);
+ __fcsr &= ~_ROUND_MASK;
+ __fcsr |= __round;
+ __wfs(__fcsr);
+
+ return (0);
+}
+
+__fenv_static inline int
+fegetenv(fenv_t *__envp)
+{
+
+ __rfs(*__envp);
+
+ return (0);
+}
+
+__fenv_static inline int
+feholdexcept(fenv_t *__envp)
+{
+
+ /* No exception traps. */
+
+ return (-1);
+}
+
+__fenv_static inline int
+fesetenv(const fenv_t *__envp)
+{
+
+ __wfs(*__envp);
+
+ return (0);
+}
+
+__fenv_static inline int
+feupdateenv(const fenv_t *__envp)
+{
+ fexcept_t __fcsr;
+
+ __rfs(__fcsr);
+ __wfs(*__envp);
+ feraiseexcept(__fcsr & FE_ALL_EXCEPT);
+
+ return (0);
+}
+#endif /* !__riscv_float_abi_soft */
+
+#if __BSD_VISIBLE
+
+/* We currently provide no external definitions of the functions below. */
+
+#ifdef __riscv_float_abi_soft
+int feenableexcept(int __mask);
+int fedisableexcept(int __mask);
+int fegetexcept(void);
+#else
+static inline int
+feenableexcept(int __mask)
+{
+
+ /* No exception traps. */
+
+ return (-1);
+}
+
+static inline int
+fedisableexcept(int __mask)
+{
+
+ /* No exception traps. */
+
+ return (0);
+}
+
+static inline int
+fegetexcept(void)
+{
+
+ /* No exception traps. */
+
+ return (0);
+}
+#endif /* !__riscv_float_abi_soft */
+
+#endif /* __BSD_VISIBLE */
+
+__END_DECLS
+
+#endif /* !_FENV_H_ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/include/openlibm_math.h new/openlibm-0.8.1/include/openlibm_math.h
--- old/openlibm-0.7.1/include/openlibm_math.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/include/openlibm_math.h 2022-01-20 00:43:52.000000000 +0100
@@ -174,7 +174,7 @@
#define MAXFLOAT ((float)3.40282346638528860e+38)
#ifndef OPENLIBM_ONLY_THREAD_SAFE
-extern int signgam;
+OLM_DLLEXPORT extern int signgam;
#endif
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */
@@ -304,6 +304,7 @@
* BSD math library entry points
*/
#if __BSD_VISIBLE
+OLM_DLLEXPORT int isinff(float) __pure2;
OLM_DLLEXPORT int isnanf(float) __pure2;
/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/powerpc/fenv.c new/openlibm-0.8.1/powerpc/fenv.c
--- old/openlibm-0.7.1/powerpc/fenv.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/powerpc/fenv.c 2022-01-20 00:43:52.000000000 +0100
@@ -26,7 +26,6 @@
* $FreeBSD$
*/
-#define __fenv_static
#include
#ifdef __GNUC_GNU_INLINE__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/riscv64/Make.files new/openlibm-0.8.1/riscv64/Make.files
--- old/openlibm-0.7.1/riscv64/Make.files 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/riscv64/Make.files 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1 @@
+$(CUR_SRCS) = fenv.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/riscv64/fenv.c new/openlibm-0.8.1/riscv64/fenv.c
--- old/openlibm-0.7.1/riscv64/fenv.c 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/riscv64/fenv.c 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2004 David Schultz
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/lib/msun/riscv/fenv.c 332792 2018-04-19 20:36:15Z brooks $
+ */
+
+#define __fenv_static
+#include "fenv.h"
+
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
+/*
+ * Hopefully the system ID byte is immutable, so it's valid to use
+ * this as a default environment.
+ */
+const fenv_t __fe_dfl_env = 0;
+
+#ifdef __riscv_float_abi_soft
+#define __set_env(env, flags, mask, rnd) env = ((flags) | (rnd) << 5)
+#define __env_flags(env) ((env) & FE_ALL_EXCEPT)
+#define __env_mask(env) (0) /* No exception traps. */
+#define __env_round(env) (((env) >> 5) & _ROUND_MASK)
+#include "fenv-softfloat.h"
+#endif
+
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+extern inline int feraiseexcept(int __excepts);
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+extern inline int fegetenv(fenv_t *__envp);
+extern inline int feholdexcept(fenv_t *__envp);
+extern inline int fesetenv(const fenv_t *__envp);
+extern inline int feupdateenv(const fenv_t *__envp);
+extern inline int feenableexcept(int __mask);
+extern inline int fedisableexcept(int __mask);
+extern inline int fegetexcept(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/Make.files new/openlibm-0.8.1/src/Make.files
--- old/openlibm-0.7.1/src/Make.files 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/Make.files 2022-01-20 00:43:52.000000000 +0100
@@ -44,7 +44,7 @@
endif
# Add in long double functions for x86, x64 and aarch64
-ifneq ($(filter $(ARCH),i387 amd64 aarch64),)
+ifeq ($(LONG_DOUBLE_NOT_DOUBLE),1)
# C99 long double functions
$(CUR_SRCS) += s_copysignl.c s_fabsl.c s_llrintl.c s_lrintl.c s_modfl.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/aarch64_fpmath.h new/openlibm-0.8.1/src/aarch64_fpmath.h
--- old/openlibm-0.7.1/src/aarch64_fpmath.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/aarch64_fpmath.h 2022-01-20 00:43:52.000000000 +0100
@@ -27,18 +27,20 @@
* $FreeBSD: head/lib/libc/aarch64/_fpmath.h 281197 2015-04-07 09:52:14Z andrew $
*/
+#include
+
union IEEEl2bits {
long double e;
struct {
- unsigned long manl :64;
- unsigned long manh :48;
+ uint64_t manl :64;
+ uint64_t manh :48;
unsigned int exp :15;
unsigned int sign :1;
} bits;
/* TODO andrew: Check the packing here */
struct {
- unsigned long manl :64;
- unsigned long manh :48;
+ uint64_t manl :64;
+ uint64_t manh :48;
unsigned int expsign :16;
} xbits;
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/cdefs-compat.h new/openlibm-0.8.1/src/cdefs-compat.h
--- old/openlibm-0.7.1/src/cdefs-compat.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/cdefs-compat.h 2022-01-20 00:43:52.000000000 +0100
@@ -59,14 +59,19 @@
#endif /* __warn_references */
#endif /* __STDC__ */
#elif defined(__clang__) /* CLANG */
+#if defined(_WIN32) && defined(_X86_)
+#define openlibm_asm_symbol_prefix "_"
+#else
+#define openlibm_asm_symbol_prefix ""
+#endif
#ifdef __STDC__
#define openlibm_weak_reference(sym,alias) \
- __asm__(".weak_reference " #alias); \
- __asm__(".set " #alias ", " #sym)
+ __asm__(".weak_reference " openlibm_asm_symbol_prefix #alias); \
+ __asm__(".set " openlibm_asm_symbol_prefix #alias ", " openlibm_asm_symbol_prefix #sym)
#else
#define openlibm_weak_reference(sym,alias) \
- __asm__(".weak_reference alias");\
- __asm__(".set alias, sym")
+ __asm__(".weak_reference openlibm_asm_symbol_prefix/**/alias");\
+ __asm__(".set openlibm_asm_symbol_prefix/**/alias, openlibm_asm_symbol_prefix/**/sym")
#endif
#else /* !__ELF__ */
#ifdef __STDC__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_acosh.c new/openlibm-0.8.1/src/e_acosh.c
--- old/openlibm-0.7.1/src/e_acosh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_acosh.c 2022-01-20 00:43:52.000000000 +0100
@@ -29,6 +29,7 @@
* acosh(NaN) is NaN without signal.
*/
+#include
#include
#include "math_private.h"
@@ -61,3 +62,7 @@
return log1p(t+sqrt(2.0*t+t*t));
}
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(acosh, acoshl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_atanh.c new/openlibm-0.8.1/src/e_atanh.c
--- old/openlibm-0.7.1/src/e_atanh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_atanh.c 2022-01-20 00:43:52.000000000 +0100
@@ -33,6 +33,7 @@
*
*/
+#include
#include
#include "math_private.h"
@@ -61,3 +62,7 @@
t = 0.5*log1p((x+x)/(one-x));
if(hx>=0) return t; else return -t;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(atanh, atanhl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_cosh.c new/openlibm-0.8.1/src/e_cosh.c
--- old/openlibm-0.7.1/src/e_cosh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_cosh.c 2022-01-20 00:43:52.000000000 +0100
@@ -35,6 +35,7 @@
* only cosh(0)=1 is exact for finite x.
*/
+#include
#include
#include "math_private.h"
@@ -78,3 +79,7 @@
/* |x| > overflowthresold, cosh(x) overflow */
return huge*huge;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(cosh, coshl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_exp.c new/openlibm-0.8.1/src/e_exp.c
--- old/openlibm-0.7.1/src/e_exp.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_exp.c 2022-01-20 00:43:52.000000000 +0100
@@ -165,3 +165,7 @@
return y*twopk*twom1000;
}
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(exp, expl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_hypotl.c new/openlibm-0.8.1/src/e_hypotl.c
--- old/openlibm-0.7.1/src/e_hypotl.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_hypotl.c 2022-01-20 00:43:52.000000000 +0100
@@ -82,7 +82,7 @@
man_t manh, manl;
GET_LDBL_MAN(manh,manl,b);
if((manh|manl)==0) return a;
- t1=0;
+ t1=1;
SET_HIGH_WORD(t1,ESW(MAX_EXP-2)); /* t1=2^(MAX_EXP-2) */
b *= t1;
a *= t1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_log.c new/openlibm-0.8.1/src/e_log.c
--- old/openlibm-0.7.1/src/e_log.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_log.c 2022-01-20 00:43:52.000000000 +0100
@@ -65,6 +65,7 @@
* to produce the hexadecimal values shown.
*/
+#include
#include
#include "math_private.h"
@@ -139,3 +140,7 @@
return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f);
}
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(log, logl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_log10.c new/openlibm-0.8.1/src/e_log10.c
--- old/openlibm-0.7.1/src/e_log10.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_log10.c 2022-01-20 00:43:52.000000000 +0100
@@ -22,6 +22,7 @@
* in not-quite-routine extra precision.
*/
+#include
#include
#include "math_private.h"
@@ -86,3 +87,7 @@
return val_lo + val_hi;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(log10, log10l);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_log2.c new/openlibm-0.8.1/src/e_log2.c
--- old/openlibm-0.7.1/src/e_log2.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_log2.c 2022-01-20 00:43:52.000000000 +0100
@@ -24,6 +24,7 @@
* in not-quite-routine extra precision.
*/
+#include
#include
#include "math_private.h"
@@ -109,3 +110,7 @@
return val_lo + val_hi;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(log2, log2l);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_pow.c new/openlibm-0.8.1/src/e_pow.c
--- old/openlibm-0.7.1/src/e_pow.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_pow.c 2022-01-20 00:43:52.000000000 +0100
@@ -57,6 +57,7 @@
* to produce the hexadecimal values shown.
*/
+#include
#include
#include "math_private.h"
@@ -310,3 +311,7 @@
else SET_HIGH_WORD(z,j);
return s*z;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(pow, powl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_powf.c new/openlibm-0.8.1/src/e_powf.c
--- old/openlibm-0.7.1/src/e_powf.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_powf.c 2022-01-20 00:43:52.000000000 +0100
@@ -25,6 +25,9 @@
dp_h[] = { 0.0, 5.84960938e-01,}, /* 0x3f15c000 */
dp_l[] = { 0.0, 1.56322085e-06,}, /* 0x35d1cfdc */
zero = 0.0,
+half = 0.5,
+qrtr = 0.25,
+thrd = 3.33333343e-01, /* 0x3eaaaaab */
one = 1.0,
two = 2.0,
two24 = 16777216.0, /* 0x4b800000 */
@@ -74,7 +77,7 @@
/* y!=zero: result is NaN if either arg is NaN */
if(ix > 0x7f800000 ||
iy > 0x7f800000)
- return (x+0.0F)+(y+0.0F);
+ return nan_mix(x, y);
/* determine if y is an odd int when x < 0
* yisint = 0 ... y is not an integer
@@ -103,15 +106,10 @@
if(iy==0x3f800000) { /* y is +-1 */
if(hy<0) return one/x; else return x;
}
- if(hy==0x40000000) return x*x; /* y is 2 */
- if(hy==0x40400000) return x*x*x; /* y is 3 */
- if(hy==0x40800000) { /* y is 4 */
- u = x*x;
- return u*u;
- }
- if(hy==0x3f000000) { /* y is 0.5 */
+ if(hy==0x40000000) return x*x; /* y is 2 */
+ if(hy==0x3f000000) { /* y is 0.5 */
if(hx>=0) /* x >= +0 */
- return __ieee754_sqrtf(x);
+ return __ieee754_sqrtf(x);
}
ax = fabsf(x);
@@ -139,12 +137,12 @@
/* |y| is huge */
if(iy>0x4d000000) { /* if |y| > 2**27 */
/* over/underflow if x is not close to one */
- if(ix<0x3f7ffff8) return (hy<0)? sn*huge*huge:sn*tiny*tiny;
+ if(ix<0x3f7ffff6) return (hy<0)? sn*huge*huge:sn*tiny*tiny;
if(ix>0x3f800007) return (hy>0)? sn*huge*huge:sn*tiny*tiny;
/* now |1-x| is tiny <= 2**-20, suffice to compute
log(x) by x-x^2/2+x^3/3-x^4/4 */
t = ax-1; /* t has 20 trailing zeros */
- w = (t*t)*((float)0.5-t*((float)0.333333333333-t*(float)0.25));
+ w = (t*t)*(half-t*(thrd-t*qrtr));
u = ivln2_h*t; /* ivln2_h has 16 sig. bits */
v = t*ivln2_l-w*ivln2;
t1 = u+v;
@@ -183,10 +181,10 @@
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 = (float)3.0+s2+r;
+ t_h = 3+s2+r;
GET_FLOAT_WORD(is,t_h);
SET_FLOAT_WORD(t_h,is&0xfffff000);
- t_l = r-((t_h-(float)3.0)-s2);
+ t_l = r-((t_h-3)-s2);
/* u+v = s*(1+...) */
u = s_h*t_h;
v = s_l*t_h+t_l*s;
@@ -198,7 +196,7 @@
z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
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 */
- t = (float)n;
+ t = n;
t1 = (((z_h+z_l)+dp_h[k])+t);
GET_FLOAT_WORD(is,t1);
SET_FLOAT_WORD(t1,is&0xfffff000);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/e_sinh.c new/openlibm-0.8.1/src/e_sinh.c
--- old/openlibm-0.7.1/src/e_sinh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/e_sinh.c 2022-01-20 00:43:52.000000000 +0100
@@ -32,6 +32,7 @@
* only sinh(0)=0 is exact for finite x.
*/
+#include
#include
#include "math_private.h"
@@ -72,3 +73,7 @@
/* |x| > overflowthresold, sinh(x) overflow */
return x*shuge;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(sinh, sinhl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/fpmath.h new/openlibm-0.8.1/src/fpmath.h
--- old/openlibm-0.7.1/src/fpmath.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/fpmath.h 2022-01-20 00:43:52.000000000 +0100
@@ -43,6 +43,8 @@
#include "mips_fpmath.h"
#elif defined(__s390__)
#include "s390_fpmath.h"
+#elif defined(__riscv)
+#include "riscv_fpmath.h"
#endif
/* Definitions provided directly by GCC and Clang. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/math_private.h new/openlibm-0.8.1/src/math_private.h
--- old/openlibm-0.7.1/src/math_private.h 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/math_private.h 2022-01-20 00:43:52.000000000 +0100
@@ -203,10 +203,9 @@
} while (0)
-//VBS
+#ifndef __FreeBSD__
#define STRICT_ASSIGN(type, lval, rval) ((lval) = (rval))
-
-/* VBS
+#else
#ifdef FLT_EVAL_METHOD
// Attempt to get strict C99 semantics for assignment with non-C99 compilers.
#if FLT_EVAL_METHOD == 0 || __GNUC__ == 0
@@ -215,7 +214,7 @@
#define STRICT_ASSIGN(type, lval, rval) do { \
volatile type __lval; \
\
- if (sizeof(type) >= sizeof(double)) \
+ if (sizeof(type) >= sizeof(long double)) \
(lval) = (rval); \
else { \
__lval = (rval); \
@@ -224,13 +223,31 @@
} while (0)
#endif
#endif
-*/
+#endif
/*
* Common routine to process the arguments to nan(), nanf(), and nanl().
*/
void __scan_nan(u_int32_t *__words, int __num_words, const char *__s);
+/*
+ * Mix 1 or 2 NaNs. First add 0 to each arg. This normally just turns
+ * signaling NaNs into quiet NaNs by setting a quiet bit. We do this
+ * because we want to never return a signaling NaN, and also because we
+ * don't want the quiet bit to affect the result. Then mix the converted
+ * args using addition. The result is typically the arg whose mantissa
+ * bits (considered as in integer) are largest.
+ *
+ * Technical complications: the result in bits might depend on the precision
+ * and/or on compiler optimizations, especially when different register sets
+ * are used for different precisions. Try to make the result not depend on
+ * at least the precision by always doing the main mixing step in long double
+ * precision. Try to reduce dependencies on optimizations by adding the
+ * the 0's in different precisions (unless everything is in long double
+ * precision).
+ */
+#define nan_mix(x, y) (((x) + 0.0L) + ((y) + 0))
+
#ifdef __GNUCLIKE_ASM
/* Asm versions of some functions. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/riscv_fpmath.h new/openlibm-0.8.1/src/riscv_fpmath.h
--- old/openlibm-0.7.1/src/riscv_fpmath.h 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/src/riscv_fpmath.h 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2002, 2003 David Schultz
+ * Copyright (c) 2014 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/lib/libc/riscv/_fpmath.h 362788 2020-06-29 19:30:35Z mhorne $
+ */
+
+union IEEEl2bits {
+ long double e;
+ struct {
+ unsigned long manl :64;
+ unsigned long manh :48;
+ unsigned int exp :15;
+ unsigned int sign :1;
+ } bits;
+ struct {
+ unsigned long manl :64;
+ unsigned long manh :48;
+ unsigned int expsign :16;
+ } xbits;
+};
+
+#define LDBL_NBIT 0
+#define LDBL_IMPLICIT_NBIT
+#define mask_nbit_l(u) ((void)0)
+
+#define LDBL_MANH_SIZE 48
+#define LDBL_MANL_SIZE 64
+
+#define LDBL_TO_ARRAY32(u, a) do { \
+ (a)[0] = (uint32_t)(u).bits.manl; \
+ (a)[1] = (uint32_t)((u).bits.manl >> 32); \
+ (a)[2] = (uint32_t)(u).bits.manh; \
+ (a)[3] = (uint32_t)((u).bits.manh >> 32); \
+} while(0)
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_asinh.c new/openlibm-0.8.1/src/s_asinh.c
--- old/openlibm-0.7.1/src/s_asinh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_asinh.c 2022-01-20 00:43:52.000000000 +0100
@@ -24,6 +24,7 @@
* := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2)))
*/
+#include
#include
#include "math_private.h"
@@ -55,3 +56,7 @@
}
if(hx>0) return w; else return -w;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(asinh, asinhl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_cabs.c new/openlibm-0.8.1/src/s_cabs.c
--- old/openlibm-0.7.1/src/s_cabs.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_cabs.c 2022-01-20 00:43:52.000000000 +0100
@@ -19,6 +19,8 @@
#include
#include
+#include "math_private.h"
+
double
cabs(double complex z)
{
@@ -26,5 +28,5 @@
}
#if LDBL_MANT_DIG == DBL_MANT_DIG
-__strong_alias(cabsl, cabs);
+openlibm_strong_reference(cabs, cabsl);
#endif /* LDBL_MANT_DIG == DBL_MANT_DIG */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_ccos.c new/openlibm-0.8.1/src/s_ccos.c
--- old/openlibm-0.7.1/src/s_ccos.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_ccos.c 2022-01-20 00:43:52.000000000 +0100
@@ -53,6 +53,8 @@
#include
#include
+#include "math_private.h"
+
/* calculate cosh and sinh */
static void
@@ -85,5 +87,5 @@
}
#if LDBL_MANT_DIG == DBL_MANT_DIG
-__strong_alias(ccosl, ccos);
+openlibm_strong_reference(ccos, ccosl);
#endif /* LDBL_MANT_DIG == DBL_MANT_DIG */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_csin.c new/openlibm-0.8.1/src/s_csin.c
--- old/openlibm-0.7.1/src/s_csin.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_csin.c 2022-01-20 00:43:52.000000000 +0100
@@ -55,6 +55,8 @@
#include
#include
+#include "math_private.h"
+
/* calculate cosh and sinh */
static void
@@ -87,5 +89,5 @@
}
#if LDBL_MANT_DIG == DBL_MANT_DIG
-__strong_alias(csinl, csin);
+openlibm_strong_reference(csin, csinl);
#endif /* LDBL_MANT_DIG == DBL_MANT_DIG */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_ctan.c new/openlibm-0.8.1/src/s_ctan.c
--- old/openlibm-0.7.1/src/s_ctan.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_ctan.c 2022-01-20 00:43:52.000000000 +0100
@@ -60,6 +60,8 @@
#include
#include
+#include "math_private.h"
+
#define MACHEP 1.1e-16
#define MAXNUM 1.0e308
@@ -153,5 +155,5 @@
}
#if LDBL_MANT_DIG == DBL_MANT_DIG
-__strong_alias(ctanl, ctan);
+openlibm_strong_reference(ctan, ctanl);
#endif /* LDBL_MANT_DIG == DBL_MANT_DIG */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_erf.c new/openlibm-0.8.1/src/s_erf.c
--- old/openlibm-0.7.1/src/s_erf.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_erf.c 2022-01-20 00:43:52.000000000 +0100
@@ -107,6 +107,7 @@
* erfc/erf(NaN) is NaN
*/
+#include
#include
#include "math_private.h"
@@ -299,3 +300,8 @@
if(hx>0) return tiny*tiny; else return two-tiny;
}
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(erf, erfl);
+openlibm_weak_reference(erfc, erfcl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_expm1.c new/openlibm-0.8.1/src/s_expm1.c
--- old/openlibm-0.7.1/src/s_expm1.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_expm1.c 2022-01-20 00:43:52.000000000 +0100
@@ -215,3 +215,7 @@
}
return y;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(expm1, expm1l);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_log1p.c new/openlibm-0.8.1/src/s_log1p.c
--- old/openlibm-0.7.1/src/s_log1p.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_log1p.c 2022-01-20 00:43:52.000000000 +0100
@@ -173,3 +173,7 @@
if(k==0) return f-(hfsq-s*(hfsq+R)); else
return k*ln2_hi-((hfsq-(s*(hfsq+R)+(k*ln2_lo+c)))-f);
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(log1p, log1pl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/src/s_tanh.c new/openlibm-0.8.1/src/s_tanh.c
--- old/openlibm-0.7.1/src/s_tanh.c 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/src/s_tanh.c 2022-01-20 00:43:52.000000000 +0100
@@ -37,6 +37,7 @@
* only tanh(0)=0 is exact for finite argument.
*/
+#include
#include
#include "math_private.h"
@@ -76,3 +77,7 @@
}
return (jx>=0)? z: -z;
}
+
+#if (LDBL_MANT_DIG == 53)
+openlibm_weak_reference(tanh, tanhl);
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/test/Makefile new/openlibm-0.8.1/test/Makefile
--- old/openlibm-0.7.1/test/Makefile 2020-09-02 18:33:04.000000000 +0200
+++ new/openlibm-0.8.1/test/Makefile 2022-01-20 00:43:52.000000000 +0100
@@ -7,6 +7,8 @@
ifneq ($(OS),Darwin)
OPENLIBM_LIB += -Wl,-rpath=$(OPENLIBM_HOME)
endif
+else # WINNT
+CFLAGS_add += -DIMPORT_EXPORTS
endif
all: test-double test-float # test-double-system test-float-system
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openlibm-0.7.1/test/test-211.c new/openlibm-0.8.1/test/test-211.c
--- old/openlibm-0.7.1/test/test-211.c 1970-01-01 01:00:00.000000000 +0100
+++ new/openlibm-0.8.1/test/test-211.c 2022-01-20 00:43:52.000000000 +0100
@@ -0,0 +1,12 @@
+#include
+#include
+#include
+
+int
+main()
+{
+ float x = 0xd.65874p-4f;
+ float y = 4.0f;
+ float z = powf (x, y);
+ assert(z==0x1.f74424p-2);
+}