From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1791) id 44C463858D32; Tue, 2 Apr 2024 16:01:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 44C463858D32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1712073710; bh=p2HOjuQE/kXQNzYc9Q6H/1ck2fknXJ7fd5M/Kk17wdA=; h=From:To:Subject:Date:From; b=PdqQwFlgsFwWZtii7tEXhOc9Emy3t7wH0dDGfAUNJpKsPSoba3i5LRKgIzTE7Hyw5 ujnV5Xx50ixyNh57E3cMD0kyLOYAebCggtAo+qA99yGwX5QyTqeEHeOkDYK9gF8K71 p6drHb75fp2SlxoMjRy8Igy/eLEknkryEKiznPC8= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Adhemerval Zanella To: glibc-cvs@sourceware.org Subject: [glibc/azanella/clang] x86_64: Provide __sfp_handle_exceptions if compiler does not X-Act-Checkin: glibc X-Git-Author: Adhemerval Zanella X-Git-Refname: refs/heads/azanella/clang X-Git-Oldrev: 458f3c5df44d24f60e0bffe2c5368a42f2496bc6 X-Git-Newrev: a8ac0d97708e82dad8af9aed86d4a631487cc37f Message-Id: <20240402160150.44C463858D32@sourceware.org> Date: Tue, 2 Apr 2024 16:01:47 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a8ac0d97708e82dad8af9aed86d4a631487cc37f commit a8ac0d97708e82dad8af9aed86d4a631487cc37f Author: Adhemerval Zanella Date: Wed Feb 21 10:44:47 2024 -0300 x86_64: Provide __sfp_handle_exceptions if compiler does not Diff: --- config.h.in | 3 +++ sysdeps/x86/fpu/sfp-machine.h | 20 +++++++++++++++++++- sysdeps/x86_64/configure | 31 +++++++++++++++++++++++++++++++ sysdeps/x86_64/configure.ac | 20 ++++++++++++++++++++ 4 files changed, 73 insertions(+), 1 deletion(-) diff --git a/config.h.in b/config.h.in index cf4212f5eb..98236e11ce 100644 --- a/config.h.in +++ b/config.h.in @@ -295,4 +295,7 @@ /* Define if -mmovbe is enabled by default on x86. */ #undef HAVE_X86_MOVBE +/* Define whether compiler runtime library provides __sfp_handle_exceptions. */ +#undef HAVE_X86_64_SFP_HANDLE_EXCEPTIONS + #endif diff --git a/sysdeps/x86/fpu/sfp-machine.h b/sysdeps/x86/fpu/sfp-machine.h index dd23c797bd..c2aa2b6901 100644 --- a/sysdeps/x86/fpu/sfp-machine.h +++ b/sysdeps/x86/fpu/sfp-machine.h @@ -217,8 +217,26 @@ typedef unsigned int UTItype __attribute__ ((mode (TI))); (FP_EX_INVALID | FP_EX_DENORM | FP_EX_DIVZERO | FP_EX_OVERFLOW \ | FP_EX_UNDERFLOW | FP_EX_INEXACT) +#ifdef HAVE_X86_64_SFP_HANDLE_EXCEPTIONS void __sfp_handle_exceptions (int); - +#else +#include +static inline void __sfp_handle_exceptions (int _fex) +{ + if (_fex & FP_EX_INVALID) + feraiseexcept (FE_INVALID); + if (_fex & FP_EX_DENORM) + feraiseexcept (__FE_DENORM); + if (_fex & FP_EX_DIVZERO) + feraiseexcept (FE_DIVBYZERO); + if (_fex & FP_EX_OVERFLOW) + feraiseexcept (FE_OVERFLOW); + if (_fex & FP_EX_UNDERFLOW) + feraiseexcept (FE_UNDERFLOW); + if (_fex & FP_EX_INEXACT) + feraiseexcept (FE_INEXACT); +} +#endif #define FP_HANDLE_EXCEPTIONS \ do { \ if (__builtin_expect (_fex, 0)) \ diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure index 48cc2989a8..5741a172df 100755 --- a/sysdeps/x86_64/configure +++ b/sysdeps/x86_64/configure @@ -186,6 +186,37 @@ printf "%s\n" "$libc_cv_x86_have_amx_tile" >&6; } config_vars="$config_vars have-mamx-tile = $libc_cv_x86_have_amx_tile" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler standard library provides __sfp_handle_exceptions" >&5 +printf %s "checking whether compiler standard library provides __sfp_handle_exceptions... " >&6; } +if test ${libc_cv_sfp_handle_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + libc_cv_sfp_handle_exceptions=yes + else + libc_cv_sfp_handle_exceptions=no + fi + rm -rf conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sfp_handle_exceptions" >&5 +printf "%s\n" "$libc_cv_sfp_handle_exceptions" >&6; } +if test x"$libc_cv_sfp_handle_exceptions" == xyes; then + printf "%s\n" "#define HAVE_X86_64_SFP_HANDLE_EXCEPTIONS 1" >>confdefs.h + +fi + test -n "$critic_missing" && as_fn_error $? " *** $critic_missing" "$LINENO" 5 diff --git a/sysdeps/x86_64/configure.ac b/sysdeps/x86_64/configure.ac index e4770a366e..e7821c3640 100644 --- a/sysdeps/x86_64/configure.ac +++ b/sysdeps/x86_64/configure.ac @@ -85,5 +85,25 @@ EOF rm -rf conftest*]) LIBC_CONFIG_VAR([have-mamx-tile], [$libc_cv_x86_have_amx_tile]) +dnl Check if compiler standard library provides __sfp_handle_exceptions, used on +dnl float128 implementation. +AC_CACHE_CHECK(whether compiler standard library provides __sfp_handle_exceptions, + libc_cv_sfp_handle_exceptions, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD); then + libc_cv_sfp_handle_exceptions=yes + else + libc_cv_sfp_handle_exceptions=no + fi + rm -rf conftest*]) +if test x"$libc_cv_sfp_handle_exceptions" == xyes; then + AC_DEFINE(HAVE_X86_64_SFP_HANDLE_EXCEPTIONS) +fi + test -n "$critic_missing" && AC_MSG_ERROR([ *** $critic_missing])