mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
alpha: Fix exception raising from soft-fp
Use the SSI_IEEE_RAISE_EXCEPTION function as from feraiseexcept, instead of __ieee_get+set_fp_status. Always raise the FP exceptions from float-to-integer conversion.
This commit is contained in:
parent
d3f364d3c7
commit
27bb6dc0db
@ -1,5 +1,14 @@
|
||||
2014-08-05 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* sysdeps/alpha/soft-fp/ots_cvtxq.c (_OtsCvtXQ): Always raise
|
||||
exceptions.
|
||||
* sysdeps/alpha/soft-fp/Makefile [soft-fp] (sysdep_routines):
|
||||
Add fraiseexcpt.
|
||||
* sysdeps/alpha/soft-fp/sfp-machine.h (FP_HANDLE_EXCEPTIONS):
|
||||
Use __feraiseexcept.
|
||||
* sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S (feraiseexcept):
|
||||
Protect libm symbols with IS_IN_libm.
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Remove file.
|
||||
|
||||
2014-08-04 Bernard Ogden <bernie.ogden@linaro.org>
|
||||
|
@ -2,7 +2,8 @@
|
||||
|
||||
ifeq ($(subdir),soft-fp)
|
||||
sysdep_routines += ots_add ots_sub ots_mul ots_div ots_cmp ots_cmpe \
|
||||
ots_cvtxq ots_cvtqx ots_cvtqux ots_cvttx ots_cvtxt ots_nintxq
|
||||
ots_cvtxq ots_cvtqx ots_cvtqux ots_cvttx ots_cvtxt ots_nintxq \
|
||||
fraiseexcpt
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),math)
|
||||
|
@ -35,9 +35,7 @@ _OtsCvtXQ (long al, long ah, long _round)
|
||||
FP_INIT_ROUNDMODE;
|
||||
FP_UNPACK_RAW_Q(A, a);
|
||||
FP_TO_INT_Q(r, A, 64, s);
|
||||
|
||||
if (s > 0 && (_fex &= FP_EX_INVALID))
|
||||
FP_HANDLE_EXCEPTIONS;
|
||||
FP_HANDLE_EXCEPTIONS;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -86,13 +86,13 @@ do { \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* We copy the libm function into libc for soft-fp. */
|
||||
extern int __feraiseexcept (int __excepts) attribute_hidden;
|
||||
|
||||
#define FP_HANDLE_EXCEPTIONS \
|
||||
do { \
|
||||
if (__builtin_expect (_fex, 0)) \
|
||||
{ \
|
||||
unsigned long t = __ieee_get_fp_control (); \
|
||||
__ieee_set_fp_control (t | _fex); \
|
||||
} \
|
||||
__feraiseexcept (_fex); \
|
||||
} while (0)
|
||||
|
||||
#define FP_TRAPPING_EXCEPTIONS \
|
||||
|
@ -46,11 +46,12 @@ ENTRY(__feraiseexcept)
|
||||
END(__feraiseexcept)
|
||||
cfi_endproc
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
#ifdef IS_IN_libm
|
||||
# include <shlib-compat.h>
|
||||
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__feraiseexcept, __old_feraiseexcept)
|
||||
compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
# endif
|
||||
libm_hidden_ver (__feraiseexcept, feraiseexcept)
|
||||
versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user