mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 02:40:08 +00:00
Update.
2002-10-08 Richard Henderson <rth@redhat.com> * soft-fp/op-4.h: Handle carry correctly in __FP_FRAC_ADD_3, __FP_FRAC_ADD_4, __FP_FRAC_SUB_3, __FP_FRAC_SUB_4, __FP_FRAC_DEC_3, __FP_FRAC_DEC_4. * soft-fp/op-common.h: New macros _FP_DIV_MEAT_N_loop. 2002-10-08 Aldy Hernandez <aldyh@redhat.com> * configure.in: Compute completely-soft. * config.make.in: Make completely-soft available to sub-makes. * sysdeps/powerpc/soft-fp/Makefile: Add gcc-single-routines and gcc-double-routines. Add sim-full.c. Add fenv_const and fe_nomask to libm-support. * sysdeps/powerpc/soft-fp/sim-full.c: New file. * sysdeps/powerpc/soft-fp/fraiseexcpt.c: New file. * sysdeps/powerpc/soft-fp/fegetexcept.c: New file. * sysdeps/powerpc/soft-fp/fclrexcpt.c: New file. * sysdeps/powerpc/soft-fp/ftestexcept.c: New file. * sysdeps/powerpc/soft-fp/fgetexcptflg.c: New file. * sysdeps/powerpc/soft-fp/fsetexcptflg.c: New file. * sysdeps/powerpc/soft-fp/fedisblxcpt.c: New file. * sysdeps/powerpc/soft-fp/feenablxcpt.c: New file. * sysdeps/powerpc/soft-fp/fegetenv.c: New file. * sysdeps/powerpc/soft-fp/fesetenv.c: New file. * sysdeps/powerpc/soft-fp/fegetround.c: New file. * sysdeps/powerpc/soft-fp/fesetround.c: New file. * sysdeps/powerpc/soft-fp/feupdateenv.c: New file. * sysdeps/powerpc/soft-fp/feholdexcpt.c: New file. * sysdeps/powerpc/soft-fp/fenv_const.c: New file. * sysdeps/powerpc/soft-fp/libm-test-ulps: New file. * sysdeps/powerpc/soft-fp/Versions: Add libgcc soft-float symbols. Add __sim_disabled_exceptions, __sim_exceptions, __sim_round_mode. * sysdeps/powerpc/soft-float/Dist: Add sim-full.c, fenv_const.c. * sysdeps/powerpc/soft-float/sfp-machine.h: Define FP_HANDLE_EXCEPTIONS. Define FP_ROUNDMODE. Redefine FP_* macros to correspond to the FE_* bit positions. Define FP_DIV_MEAT_S to _FP_DIV_MEAT_1_loop. Define externs for __sim_exceptions, __sim_disabled_exceptions, __sim_round_mode, __simulate_exceptions. * sysdeps/powerpc/fpu/bits/fenv.h: Move file from here... * sysdeps/powerpc/bits/fenv.h: ...to here. 2002-10-06 Jakub Jelinek <jakub@redhat.com> * sysdeps/powerpc/powerpc32/dl-machine.c (__process_machine_rela): Store R_PPC_UADDR32 and R_PPC_UADDR16 one byte at a time. Use __builtin_expect for R_PPC_ADDR24 overflow check. Fix R_PPC_ADDR16, R_PPC_UADDR16 and R_PPC_ADDR14* overflow check, use __builtin_expect.
This commit is contained in:
parent
b51b47f4ec
commit
1a8aaf919d
53
ChangeLog
53
ChangeLog
@ -1,3 +1,56 @@
|
||||
2002-10-08 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* soft-fp/op-4.h: Handle carry correctly in
|
||||
__FP_FRAC_ADD_3, __FP_FRAC_ADD_4, __FP_FRAC_SUB_3,
|
||||
__FP_FRAC_SUB_4, __FP_FRAC_DEC_3, __FP_FRAC_DEC_4.
|
||||
* soft-fp/op-common.h: New macros _FP_DIV_MEAT_N_loop.
|
||||
|
||||
2002-10-08 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* configure.in: Compute completely-soft.
|
||||
* config.make.in: Make completely-soft available to sub-makes.
|
||||
* sysdeps/powerpc/soft-fp/Makefile: Add gcc-single-routines and
|
||||
gcc-double-routines. Add sim-full.c. Add fenv_const and
|
||||
fe_nomask to libm-support.
|
||||
* sysdeps/powerpc/soft-fp/sim-full.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fraiseexcpt.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fegetexcept.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fclrexcpt.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/ftestexcept.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fgetexcptflg.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fsetexcptflg.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fedisblxcpt.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/feenablxcpt.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fegetenv.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fesetenv.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fegetround.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fesetround.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/feupdateenv.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/feholdexcpt.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/fenv_const.c: New file.
|
||||
* sysdeps/powerpc/soft-fp/libm-test-ulps: New file.
|
||||
* sysdeps/powerpc/soft-fp/Versions: Add libgcc soft-float
|
||||
symbols. Add __sim_disabled_exceptions, __sim_exceptions,
|
||||
__sim_round_mode.
|
||||
* sysdeps/powerpc/soft-float/Dist: Add sim-full.c, fenv_const.c.
|
||||
* sysdeps/powerpc/soft-float/sfp-machine.h: Define
|
||||
FP_HANDLE_EXCEPTIONS.
|
||||
Define FP_ROUNDMODE.
|
||||
Redefine FP_* macros to correspond to the FE_* bit positions.
|
||||
Define FP_DIV_MEAT_S to _FP_DIV_MEAT_1_loop.
|
||||
Define externs for __sim_exceptions, __sim_disabled_exceptions,
|
||||
__sim_round_mode, __simulate_exceptions.
|
||||
* sysdeps/powerpc/fpu/bits/fenv.h: Move file from here...
|
||||
* sysdeps/powerpc/bits/fenv.h: ...to here.
|
||||
|
||||
2002-10-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/dl-machine.c (__process_machine_rela):
|
||||
Store R_PPC_UADDR32 and R_PPC_UADDR16 one byte at a time.
|
||||
Use __builtin_expect for R_PPC_ADDR24 overflow check. Fix
|
||||
R_PPC_ADDR16, R_PPC_UADDR16 and R_PPC_ADDR14* overflow check, use
|
||||
__builtin_expect.
|
||||
|
||||
2002-10-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* include/resolv.h (__libc_res_nquery, __libc_res_nsearch,
|
||||
|
@ -65,6 +65,8 @@ have-ksh = @libc_cv_have_ksh@
|
||||
|
||||
sizeof-long-double = @sizeof_long_double@
|
||||
|
||||
completely-soft = @completely_soft@
|
||||
|
||||
# Configuration options.
|
||||
gnu-as = @gnu_as@
|
||||
gnu-ld = @gnu_ld@
|
||||
|
10
configure.in
10
configure.in
@ -304,6 +304,16 @@ if test -z "$enable_hacker_mode"; then
|
||||
esac
|
||||
fi
|
||||
|
||||
# Brain dead PowerPC box with absolutely no FPU.
|
||||
echo $host
|
||||
case "$machine-$host_os" in
|
||||
powerpc*-*soft)
|
||||
with_fp=no
|
||||
completely_soft=yes
|
||||
AC_SUBST(completely_soft)
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl We need to use [ and ] for other purposes for a while now.
|
||||
changequote(,)dnl
|
||||
# Expand the configuration machine name into a subdirectory by architecture
|
||||
|
@ -510,58 +510,84 @@
|
||||
(X##_f[3] = I3, X##_f[2] = I2, X##_f[1] = I1, X##_f[0] = I0)
|
||||
|
||||
#ifndef __FP_FRAC_ADD_3
|
||||
#define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
(r0 = x0 + y0, \
|
||||
r1 = x1 + y1 + (r0 < x0), \
|
||||
r2 = x2 + y2 + (r1 < x1))
|
||||
#define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
do { \
|
||||
int _c1, _c2; \
|
||||
r0 = x0 + y0; \
|
||||
_c1 = r0 < x0; \
|
||||
r1 = x1 + y1; \
|
||||
_c2 = r1 < x1; \
|
||||
r1 += _c1; \
|
||||
_c2 |= r1 < _c1; \
|
||||
r2 = x2 + y2 + _c2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __FP_FRAC_ADD_4
|
||||
#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
(r0 = x0 + y0, \
|
||||
r1 = x1 + y1 + (r0 < x0), \
|
||||
r2 = x2 + y2 + (r1 < x1), \
|
||||
r3 = x3 + y3 + (r2 < x2))
|
||||
#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
do { \
|
||||
int _c1, _c2, _c3; \
|
||||
r0 = x0 + y0; \
|
||||
_c1 = r0 < x0; \
|
||||
r1 = x1 + y1; \
|
||||
_c2 = r1 < x1; \
|
||||
r1 += _c1; \
|
||||
_c2 |= r1 < _c1; \
|
||||
r2 = x2 + y2; \
|
||||
_c3 = r2 < x2; \
|
||||
r2 += _c2; \
|
||||
_c3 |= r2 < _c2; \
|
||||
r3 = x3 + y3 + _c3; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __FP_FRAC_SUB_3
|
||||
#define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
(r0 = x0 - y0, \
|
||||
r1 = x1 - y1 - (r0 > x0), \
|
||||
r2 = x2 - y2 - (r1 > x1))
|
||||
#define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
do { \
|
||||
int _c1, _c2; \
|
||||
r0 = x0 - y0; \
|
||||
_c1 = r0 > x0; \
|
||||
r1 = x1 - y1; \
|
||||
_c2 = r1 > x1; \
|
||||
r1 -= _c1; \
|
||||
_c2 |= r1 > _c1; \
|
||||
r2 = x2 - y2 - _c2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __FP_FRAC_SUB_4
|
||||
#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
(r0 = x0 - y0, \
|
||||
r1 = x1 - y1 - (r0 > x0), \
|
||||
r2 = x2 - y2 - (r1 > x1), \
|
||||
r3 = x3 - y3 - (r2 > x2))
|
||||
#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
do { \
|
||||
int _c1, _c2, _c3; \
|
||||
r0 = x0 - y0; \
|
||||
_c1 = r0 > x0; \
|
||||
r1 = x1 - y1; \
|
||||
_c2 = r1 > x1; \
|
||||
r1 -= _c1; \
|
||||
_c2 |= r1 > _c1; \
|
||||
r2 = x2 - y2; \
|
||||
_c3 = r2 > x2; \
|
||||
r2 -= _c2; \
|
||||
_c3 |= r2 > _c2; \
|
||||
r3 = x3 - y3 - _c3; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __FP_FRAC_DEC_3
|
||||
#define __FP_FRAC_DEC_3(x2,x1,x0,y2,y1,y0) \
|
||||
do { \
|
||||
UWtype _t0, _t1; \
|
||||
_t0 = x0; \
|
||||
x0 -= y0; \
|
||||
_t1 = x1; \
|
||||
x1 -= y1 + (x0 > _t0); \
|
||||
x2 -= y2 + (x1 > _t1); \
|
||||
UWtype _t0, _t1, _t2; \
|
||||
_t0 = x0, _t1 = x1, _t2 = x2; \
|
||||
__FP_FRAC_SUB_3 (x2, x1, x0, _t2, _t1, _t0, y2, y1, y0); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __FP_FRAC_DEC_4
|
||||
#define __FP_FRAC_DEC_4(x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
do { \
|
||||
UWtype _t0, _t1; \
|
||||
_t0 = x0; \
|
||||
x0 -= y0; \
|
||||
_t1 = x1; \
|
||||
x1 -= y1 + (x0 > _t0); \
|
||||
_t0 = x2; \
|
||||
x2 -= y2 + (x1 > _t1); \
|
||||
x3 -= y3 + (x2 > _t0); \
|
||||
UWtype _t0, _t1, _t2, _t3; \
|
||||
_t0 = x0, _t1 = x1, _t2 = x2, _t3 = x3; \
|
||||
__FP_FRAC_SUB_4 (x3,x2,x1,x0,_t3,_t2,_t1,_t0, y3,y2,y1,y0); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
|
@ -766,3 +766,47 @@ do { \
|
||||
q = n / d, r = n % d; \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* A restoring bit-by-bit division primitive. */
|
||||
|
||||
#define _FP_DIV_MEAT_N_loop(fs, wc, R, X, Y) \
|
||||
do { \
|
||||
int count = _FP_WFRACBITS_##fs; \
|
||||
_FP_FRAC_DECL_##wc (u); \
|
||||
_FP_FRAC_DECL_##wc (v); \
|
||||
_FP_FRAC_COPY_##wc (u, X); \
|
||||
_FP_FRAC_COPY_##wc (v, Y); \
|
||||
_FP_FRAC_SET_##wc (R, _FP_ZEROFRAC_##wc); \
|
||||
/* Normalize U and V. */ \
|
||||
_FP_FRAC_SLL_##wc (u, _FP_WFRACXBITS_##fs); \
|
||||
_FP_FRAC_SLL_##wc (v, _FP_WFRACXBITS_##fs); \
|
||||
/* First round. Since the operands are normalized, either the \
|
||||
first or second bit will be set in the fraction. Produce a \
|
||||
normalized result by checking which and adjusting the loop \
|
||||
count and exponent accordingly. */ \
|
||||
if (_FP_FRAC_GE_1 (u, v)) \
|
||||
{ \
|
||||
_FP_FRAC_SUB_##wc (u, u, v); \
|
||||
_FP_FRAC_LOW_##wc (R) |= 1; \
|
||||
count--; \
|
||||
} \
|
||||
else \
|
||||
R##_e--; \
|
||||
/* Subsequent rounds. */ \
|
||||
do { \
|
||||
int msb = (_FP_WS_TYPE) _FP_FRAC_HIGH_##wc (u) < 0; \
|
||||
_FP_FRAC_SLL_##wc (u, 1); \
|
||||
_FP_FRAC_SLL_##wc (R, 1); \
|
||||
if (msb || _FP_FRAC_GE_1 (u, v)) \
|
||||
{ \
|
||||
_FP_FRAC_SUB_##wc (u, u, v); \
|
||||
_FP_FRAC_LOW_##wc (R) |= 1; \
|
||||
} \
|
||||
} while (--count > 0); \
|
||||
/* If there's anything left in U, the result is inexact. */ \
|
||||
_FP_FRAC_LOW_##wc (R) |= !_FP_FRAC_ZEROP_##wc (u); \
|
||||
} while (0)
|
||||
|
||||
#define _FP_DIV_MEAT_1_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 1, R, X, Y)
|
||||
#define _FP_DIV_MEAT_2_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 2, R, X, Y)
|
||||
#define _FP_DIV_MEAT_4_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 4, R, X, Y)
|
||||
|
@ -25,4 +25,6 @@ q_sub.c
|
||||
q_ulltoq.c
|
||||
q_util.c
|
||||
q_utoq.c
|
||||
sim-full.c
|
||||
fenv_const.c
|
||||
sfp-machine.h
|
||||
|
@ -22,6 +22,9 @@
|
||||
# 02111-1307 USA.
|
||||
|
||||
ifeq ($(subdir),soft-fp)
|
||||
ifeq ($(completely-soft),yes)
|
||||
sysdep_routines += $(gcc-single-routines) $(gcc-double-routines) sim-full
|
||||
endif
|
||||
ifeq ($(sizeof-long-double),16)
|
||||
powerpc-quad-routines := q_add q_cmp q_cmpe q_div q_dtoq q_feq q_fge \
|
||||
q_fgt q_fle q_flt q_fne q_itoq q_mul q_neg q_qtod q_qtoi \
|
||||
@ -32,5 +35,8 @@ endif
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),math)
|
||||
ifeq ($(completely-soft),yes)
|
||||
libm-support += fenv_const fe_nomask
|
||||
endif
|
||||
CPPFLAGS += -I../soft-fp/
|
||||
endif
|
||||
|
@ -1,5 +1,15 @@
|
||||
libc {
|
||||
GLIBC_2.2 {
|
||||
__sim_exceptions; __sim_disabled_exceptions; __sim_round_mode;
|
||||
__adddf3; __addsf3; __divdf3; __divsf3; __eqdf2; __eqsf2;
|
||||
__extendsfdf2; __fixdfdi; __fixdfsi; __fixsfdi; __fixsfsi;
|
||||
__fixtfdi; __fixtfsi;
|
||||
__fixunsdfdi; __fixunsdfsi; __fixunssfdi; __fixunssfsi;
|
||||
__floatdidf; __floatdisf; __floatsidf; __floatsisf;
|
||||
__gedf2; __gesf2; __ledf2; __lesf2; __muldf3; __mulsf3;
|
||||
__negdf2; __negsf2; __sqrtdf2; __sqrtsf2; __subdf3;
|
||||
__subsf3; __truncdfsf2; __trunctfsf2;
|
||||
|
||||
_q_add; _q_cmp; _q_cmpe; _q_div; _q_dtoq; _q_feq; _q_fge; _q_fgt;
|
||||
_q_fle; _q_flt; _q_fne; _q_itoq; _q_mul; _q_neg; _q_qtod; _q_qtoi;
|
||||
_q_qtos; _q_qtou; _q_sqrt; _q_stoq; _q_sub;
|
||||
|
37
sysdeps/powerpc/soft-fp/fclrexcpt.c
Normal file
37
sysdeps/powerpc/soft-fp/fclrexcpt.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* Clear floating-point exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
int
|
||||
__feclearexcept (int x)
|
||||
{
|
||||
__sim_exceptions &= ~x;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__feclearexcept, __old_feclearexcept)
|
||||
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
|
33
sysdeps/powerpc/soft-fp/fedisblxcpt.c
Normal file
33
sysdeps/powerpc/soft-fp/fedisblxcpt.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Disable exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fedisableexcept (int x)
|
||||
{
|
||||
int old_exceptions = ~__sim_disabled_exceptions & FE_ALL_EXCEPT;
|
||||
|
||||
__sim_disabled_exceptions |= x;
|
||||
|
||||
return old_exceptions;
|
||||
}
|
33
sysdeps/powerpc/soft-fp/feenablxcpt.c
Normal file
33
sysdeps/powerpc/soft-fp/feenablxcpt.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Enable exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
extern int __sim_disabled_exceptions;
|
||||
|
||||
int
|
||||
feenableexcept (int exceptions)
|
||||
{
|
||||
int old_exceptions = ~__sim_disabled_exceptions & FE_ALL_EXCEPT;
|
||||
|
||||
__sim_disabled_exceptions &= ~exceptions;
|
||||
|
||||
return old_exceptions;
|
||||
}
|
49
sysdeps/powerpc/soft-fp/fegetenv.c
Normal file
49
sysdeps/powerpc/soft-fp/fegetenv.c
Normal file
@ -0,0 +1,49 @@
|
||||
/* Store current floating-point environment (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <bp-sym.h>
|
||||
|
||||
extern int __sim_exceptions;
|
||||
extern int __sim_disabled_exceptions;
|
||||
extern int __sim_round_mode;
|
||||
|
||||
int
|
||||
__fegetenv (fenv_t *envp)
|
||||
{
|
||||
fenv_union_t u;
|
||||
|
||||
u.l[0] = __sim_exceptions;
|
||||
u.l[0] |= __sim_round_mode;
|
||||
u.l[1] = __sim_disabled_exceptions;
|
||||
|
||||
*envp = u.fenv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__fegetenv, __old_fegetenv)
|
||||
compat_symbol (libm, BP_SYM (__old_fegetenv), BP_SYM (fegetenv), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
versioned_symbol (libm, BP_SYM (__fegetenv), BP_SYM (fegetenv), GLIBC_2_2);
|
28
sysdeps/powerpc/soft-fp/fegetexcept.c
Normal file
28
sysdeps/powerpc/soft-fp/fegetexcept.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* Get floating-point exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
int
|
||||
fegetexcept (void)
|
||||
{
|
||||
return (__sim_disabled_exceptions ^ FE_ALL_EXCEPT) & FE_ALL_EXCEPT;
|
||||
}
|
29
sysdeps/powerpc/soft-fp/fegetround.c
Normal file
29
sysdeps/powerpc/soft-fp/fegetround.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* Return current rounding mode (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
#undef fegetround
|
||||
int
|
||||
fegetround (void)
|
||||
{
|
||||
return __sim_round_mode;
|
||||
}
|
43
sysdeps/powerpc/soft-fp/feholdexcpt.c
Normal file
43
sysdeps/powerpc/soft-fp/feholdexcpt.c
Normal file
@ -0,0 +1,43 @@
|
||||
/* Store current floating-point environment and clear exceptions
|
||||
(soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
int
|
||||
feholdexcept (fenv_t *envp)
|
||||
{
|
||||
fenv_union_t u;
|
||||
|
||||
/* Get the current state. */
|
||||
fegetenv (envp);
|
||||
|
||||
u.fenv = *envp;
|
||||
/* Clear everything except the rounding mode. */
|
||||
u.l[0] &= 0x3;
|
||||
|
||||
/* ?? Should we clear the disabled exceptions as well ?? */
|
||||
|
||||
/* Put the new state in effect. */
|
||||
fesetenv (envp);
|
||||
|
||||
return 0;
|
||||
}
|
35
sysdeps/powerpc/soft-fp/fenv_const.c
Normal file
35
sysdeps/powerpc/soft-fp/fenv_const.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* Constants for fenv_bits.h (soft float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* We want to specify the bit pattern of the __fe_*_env constants, so
|
||||
pretend they're really `long long' instead of `double'. */
|
||||
|
||||
/* If the default argument is used we use this value. Disable all
|
||||
signalling exceptions as default. */
|
||||
const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) =
|
||||
0x000000003e000000ULL;
|
||||
|
||||
/* Floating-point environment where none of the exceptions are masked. */
|
||||
const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) =
|
||||
0xfff80000000000f8ULL;
|
||||
|
||||
/* Floating-point environment with the NI bit set. */
|
||||
const unsigned long long __fe_nonieee_env __attribute__ ((aligned (8))) =
|
||||
0xfff8000000000004ULL;
|
48
sysdeps/powerpc/soft-fp/fesetenv.c
Normal file
48
sysdeps/powerpc/soft-fp/fesetenv.c
Normal file
@ -0,0 +1,48 @@
|
||||
/* Set floating point environment (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <bp-sym.h>
|
||||
|
||||
extern int __sim_exceptions attribute_hidden;
|
||||
extern int __sim_disabled_exceptions attribute_hidden;
|
||||
extern int __sim_round_mode attribute_hidden;
|
||||
|
||||
int
|
||||
__fesetenv (const fenv_t *envp)
|
||||
{
|
||||
fenv_union_t u;
|
||||
|
||||
u.fenv = *envp;
|
||||
__sim_exceptions = u.l[0] & FE_ALL_EXCEPT;
|
||||
__sim_round_mode = u.l[0] & 0x3;
|
||||
__sim_disabled_exceptions = u.l[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__fesetenv, __old_fesetenv)
|
||||
compat_symbol (libm, BP_SYM (__old_fesetenv), BP_SYM (fesetenv), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
libm_hidden_ver (__fesetenv, fesetenv)
|
||||
versioned_symbol (libm, BP_SYM (__fesetenv), BP_SYM (fesetenv), GLIBC_2_2);
|
33
sysdeps/powerpc/soft-fp/fesetround.c
Normal file
33
sysdeps/powerpc/soft-fp/fesetround.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Set rounding mode (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
int
|
||||
fesetround (int round)
|
||||
{
|
||||
if ((unsigned int) round > FE_DOWNWARD)
|
||||
return 1;
|
||||
|
||||
__sim_round_mode = round;
|
||||
|
||||
return 0;
|
||||
}
|
50
sysdeps/powerpc/soft-fp/feupdateenv.c
Normal file
50
sysdeps/powerpc/soft-fp/feupdateenv.c
Normal file
@ -0,0 +1,50 @@
|
||||
/* Install given floating-point environment and raise exceptions
|
||||
(soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <bp-sym.h>
|
||||
|
||||
int
|
||||
__feupdateenv (const fenv_t *envp)
|
||||
{
|
||||
fenv_union_t u;
|
||||
int saved_exceptions;
|
||||
|
||||
/* Save currently set exceptions. */
|
||||
saved_exceptions = __sim_exceptions;
|
||||
|
||||
/* Set environment. */
|
||||
fesetenv (envp);
|
||||
|
||||
/* Raise old exceptions. */
|
||||
__sim_exceptions |= saved_exceptions;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__feupdateenv, __old_feupdateenv)
|
||||
compat_symbol (libm, BP_SYM (__old_feupdateenv), BP_SYM (feupdateenv), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
versioned_symbol (libm, BP_SYM (__feupdateenv), BP_SYM (feupdateenv), GLIBC_2_2);
|
38
sysdeps/powerpc/soft-fp/fgetexcptflg.c
Normal file
38
sysdeps/powerpc/soft-fp/fgetexcptflg.c
Normal file
@ -0,0 +1,38 @@
|
||||
/* Store current representation for exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <bp-sym.h>
|
||||
|
||||
__fegetexceptflag (fexcept_t *flagp, int excepts)
|
||||
{
|
||||
*flagp = (fexcept_t) __sim_exceptions;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__fegetexceptflag, __old_fegetexceptflag)
|
||||
compat_symbol (libm, BP_SYM (__old_fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
versioned_symbol (libm, BP_SYM (__fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_2);
|
46
sysdeps/powerpc/soft-fp/fraiseexcpt.c
Normal file
46
sysdeps/powerpc/soft-fp/fraiseexcpt.c
Normal file
@ -0,0 +1,46 @@
|
||||
/* Raise given exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <signal.h>
|
||||
#include <bp-sym.h>
|
||||
|
||||
#undef feraiseexcept
|
||||
int
|
||||
__feraiseexcept (int x)
|
||||
{
|
||||
__sim_exceptions |= x;
|
||||
if (x == 0 || __sim_disabled_exceptions & x)
|
||||
/* Ignore exception. */
|
||||
;
|
||||
else
|
||||
raise (SIGFPE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__feraiseexcept, __old_feraiseexcept)
|
||||
compat_symbol (libm, BP_SYM (__old_feraiseexcept), BP_SYM (feraiseexcept), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
libm_hidden_ver (__feraiseexcept, feraiseexcept)
|
||||
versioned_symbol (libm, BP_SYM (__feraiseexcept), BP_SYM (feraiseexcept), GLIBC_2_2);
|
40
sysdeps/powerpc/soft-fp/fsetexcptflg.c
Normal file
40
sysdeps/powerpc/soft-fp/fsetexcptflg.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Set floating-point environment exception handling (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
#include <bp-sym.h>
|
||||
|
||||
int
|
||||
__fesetexceptflag(const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
/* Ignore exceptions not listed in 'excepts'. */
|
||||
__sim_exceptions = *flagp & excepts;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__fesetexceptflag, __old_fesetexceptflag)
|
||||
compat_symbol (libm, BP_SYM (__old_fesetexceptflag), BP_SYM (fesetexceptflag), GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
versioned_symbol (libm, BP_SYM (__fesetexceptflag), BP_SYM (fesetexceptflag), GLIBC_2_2);
|
28
sysdeps/powerpc/soft-fp/ftestexcept.c
Normal file
28
sysdeps/powerpc/soft-fp/ftestexcept.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* Test floating-point exceptions (soft-float edition).
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
int
|
||||
fetestexcept (int x)
|
||||
{
|
||||
return __sim_exceptions & x;
|
||||
}
|
890
sysdeps/powerpc/soft-fp/libm-test-ulps
Normal file
890
sysdeps/powerpc/soft-fp/libm-test-ulps
Normal file
@ -0,0 +1,890 @@
|
||||
# Begin of automatic generation
|
||||
|
||||
# atan2
|
||||
Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# atanh
|
||||
Test "atanh (0.75) == 0.972955074527656652552676371721589865":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# cacosh
|
||||
Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
|
||||
double: 1
|
||||
float: 7
|
||||
idouble: 1
|
||||
ifloat: 7
|
||||
Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
|
||||
double: 1
|
||||
float: 3
|
||||
idouble: 1
|
||||
ifloat: 3
|
||||
|
||||
# casin
|
||||
Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# casinh
|
||||
Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
|
||||
double: 5
|
||||
float: 1
|
||||
idouble: 5
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
|
||||
double: 3
|
||||
float: 6
|
||||
idouble: 3
|
||||
ifloat: 6
|
||||
Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# catan
|
||||
Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
|
||||
float: 4
|
||||
ifloat: 4
|
||||
|
||||
# catanh
|
||||
Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
|
||||
double: 4
|
||||
idouble: 4
|
||||
Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
|
||||
float: 4
|
||||
ifloat: 4
|
||||
Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
|
||||
float: 6
|
||||
ifloat: 6
|
||||
|
||||
# cbrt
|
||||
Test "cbrt (-27.0) == -3.0":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# ccos
|
||||
Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# ccosh
|
||||
Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# cexp
|
||||
Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# clog
|
||||
Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# clog10
|
||||
Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i":
|
||||
double: 1
|
||||
float: 5
|
||||
idouble: 1
|
||||
ifloat: 5
|
||||
Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# cos
|
||||
Test "cos (M_PI_6l * 2.0) == 0.5":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "cos (M_PI_6l * 4.0) == -0.5":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "cos (pi/2) == 0":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# cpow
|
||||
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
|
||||
double: 1
|
||||
float: 4
|
||||
idouble: 1
|
||||
ifloat: 4
|
||||
Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
|
||||
double: 2
|
||||
float: 3
|
||||
idouble: 2
|
||||
ifloat: 3
|
||||
Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
|
||||
double: 1
|
||||
float: 4
|
||||
idouble: 1
|
||||
ifloat: 4
|
||||
Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
|
||||
double: 2
|
||||
float: 2
|
||||
idouble: 2
|
||||
ifloat: 2
|
||||
|
||||
# csinh
|
||||
Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# csqrt
|
||||
Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# ctan
|
||||
Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# ctanh
|
||||
Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# erf
|
||||
Test "erf (1.25) == 0.922900128256458230136523481197281140":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# erfc
|
||||
Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# exp10
|
||||
Test "exp10 (-1) == 0.1":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "exp10 (3) == 1000":
|
||||
double: 6
|
||||
float: 2
|
||||
idouble: 6
|
||||
ifloat: 2
|
||||
|
||||
# expm1
|
||||
Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "expm1 (1) == M_El - 1.0":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# hypot
|
||||
Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# j0
|
||||
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "j0 (0.75) == 0.864242275166648623555731103820923211":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "j0 (2.0) == 0.223890779141235668051827454649948626":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# j1
|
||||
Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "j1 (2.0) == 0.576724807756873387202448242269137087":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "j1 (8.0) == 0.234636346853914624381276651590454612":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# jn
|
||||
Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
|
||||
double: 4
|
||||
float: 3
|
||||
idouble: 4
|
||||
ifloat: 3
|
||||
Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
|
||||
float: 4
|
||||
ifloat: 4
|
||||
Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
|
||||
double: 3
|
||||
float: 1
|
||||
idouble: 3
|
||||
ifloat: 1
|
||||
Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
# lgamma
|
||||
Test "lgamma (0.7) == 0.26086724653166651439":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "lgamma (1.2) == -0.853740900033158497197e-1":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
# log10
|
||||
Test "log10 (0.75) == -0.124938736608299953132449886193870744":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
Test "log10 (e) == log10(e)":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# log1p
|
||||
Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# sincos
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# tan
|
||||
Test "tan (pi/4) == 1":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# tgamma
|
||||
Test "tgamma (-0.5) == -2 sqrt (pi)":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "tgamma (0.5) == sqrt (pi)":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "tgamma (0.7) == 1.29805533264755778568":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# y0
|
||||
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "y0 (1.5) == 0.382448923797758843955068554978089862":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "y0 (8.0) == 0.223521489387566220527323400498620359":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# y1
|
||||
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "y1 (1.5) == -0.412308626973911295952829820633445323":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "y1 (10.0) == 0.249015424206953883923283474663222803":
|
||||
double: 3
|
||||
float: 1
|
||||
idouble: 3
|
||||
ifloat: 1
|
||||
Test "y1 (2.0) == -0.107032431540937546888370772277476637":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "y1 (8.0) == -0.158060461731247494255555266187483550":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
# yn
|
||||
Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
|
||||
double: 3
|
||||
float: 1
|
||||
idouble: 3
|
||||
ifloat: 1
|
||||
Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
|
||||
double: 2
|
||||
idouble: 2
|
||||
Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
|
||||
double: 1
|
||||
idouble: 1
|
||||
Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# Maximal error of functions:
|
||||
Function: "atan2":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
|
||||
Function: "atanh":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "cacosh":
|
||||
double: 1
|
||||
float: 7
|
||||
idouble: 1
|
||||
ifloat: 7
|
||||
|
||||
Function: Imaginary part of "cacosh":
|
||||
double: 1
|
||||
float: 3
|
||||
idouble: 1
|
||||
ifloat: 3
|
||||
|
||||
Function: Real part of "casin":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "casinh":
|
||||
double: 5
|
||||
float: 1
|
||||
idouble: 5
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "casinh":
|
||||
double: 3
|
||||
float: 6
|
||||
idouble: 3
|
||||
ifloat: 6
|
||||
|
||||
Function: Real part of "catan":
|
||||
float: 4
|
||||
ifloat: 4
|
||||
|
||||
Function: Imaginary part of "catan":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "catanh":
|
||||
double: 4
|
||||
idouble: 4
|
||||
|
||||
Function: Imaginary part of "catanh":
|
||||
float: 6
|
||||
ifloat: 6
|
||||
|
||||
Function: "cbrt":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: Real part of "ccos":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "ccos":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "ccosh":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "ccosh":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "cexp":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "cexp":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "clog":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "clog":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
|
||||
Function: Real part of "clog10":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "clog10":
|
||||
double: 1
|
||||
float: 5
|
||||
idouble: 1
|
||||
ifloat: 5
|
||||
|
||||
Function: "cos":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "cpow":
|
||||
double: 2
|
||||
float: 4
|
||||
idouble: 2
|
||||
ifloat: 4
|
||||
|
||||
Function: Imaginary part of "cpow":
|
||||
double: 2
|
||||
float: 2
|
||||
idouble: 2
|
||||
ifloat: 2
|
||||
|
||||
Function: Real part of "csinh":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "csinh":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "csqrt":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Real part of "ctan":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: Imaginary part of "ctan":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: Real part of "ctanh":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
Function: Imaginary part of "ctanh":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "erf":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: "erfc":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: "exp10":
|
||||
double: 6
|
||||
float: 2
|
||||
idouble: 6
|
||||
ifloat: 2
|
||||
|
||||
Function: "expm1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "hypot":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "j0":
|
||||
double: 2
|
||||
float: 2
|
||||
idouble: 2
|
||||
ifloat: 2
|
||||
|
||||
Function: "j1":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
Function: "jn":
|
||||
double: 4
|
||||
float: 4
|
||||
idouble: 4
|
||||
ifloat: 4
|
||||
|
||||
Function: "lgamma":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
Function: "log10":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
Function: "log1p":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "sincos":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "tan":
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: "tgamma":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "y0":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
|
||||
Function: "y1":
|
||||
double: 3
|
||||
float: 2
|
||||
idouble: 3
|
||||
ifloat: 2
|
||||
|
||||
Function: "yn":
|
||||
double: 3
|
||||
float: 2
|
||||
idouble: 3
|
||||
ifloat: 2
|
||||
|
||||
# end of automatic generation
|
@ -10,7 +10,7 @@
|
||||
#define _FP_MUL_MEAT_Q(R,X,Y) \
|
||||
_FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
|
||||
|
||||
#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y)
|
||||
#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
|
||||
#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
|
||||
#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
|
||||
|
||||
@ -40,9 +40,19 @@
|
||||
R##_c = FP_CLS_NAN; \
|
||||
} while (0)
|
||||
|
||||
/* Exception flags. */
|
||||
#define FP_EX_INVALID (1 << 4)
|
||||
#define FP_EX_OVERFLOW (1 << 3)
|
||||
#define FP_EX_UNDERFLOW (1 << 2)
|
||||
#define FP_EX_DIVZERO (1 << 1)
|
||||
#define FP_EX_INEXACT (1 << 0)
|
||||
/* Exception flags. We use the bit positions of the appropriate bits
|
||||
in the FPSCR, which also correspond to the FE_* bits. This makes
|
||||
everything easier ;-). */
|
||||
#define FP_EX_INVALID (1 << (31 - 2))
|
||||
#define FP_EX_OVERFLOW (1 << (31 - 3))
|
||||
#define FP_EX_UNDERFLOW (1 << (31 - 4))
|
||||
#define FP_EX_DIVZERO (1 << (31 - 5))
|
||||
#define FP_EX_INEXACT (1 << (31 - 6))
|
||||
|
||||
#define FP_HANDLE_EXCEPTIONS __simulate_exceptions (_fex)
|
||||
#define FP_ROUNDMODE __sim_round_mode
|
||||
|
||||
extern int __sim_exceptions attribute_hidden;
|
||||
extern int __sim_disabled_exceptions attribute_hidden;
|
||||
extern int __sim_round_mode attribute_hidden;
|
||||
extern void __simulate_exceptions (int x) attribute_hidden;
|
||||
|
42
sysdeps/powerpc/soft-fp/sim-full.c
Normal file
42
sysdeps/powerpc/soft-fp/sim-full.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* Software floating-point exception handling emulation.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <signal.h>
|
||||
#include "soft-fp.h"
|
||||
#include "soft-supp.h"
|
||||
|
||||
/* Global to store sticky exceptions. */
|
||||
int __sim_exceptions;
|
||||
|
||||
/* By default, no exceptions should trap. */
|
||||
int __sim_disabled_exceptions = 0xffffffff;
|
||||
|
||||
int __sim_round_mode;
|
||||
|
||||
void
|
||||
__simulate_exceptions (int x)
|
||||
{
|
||||
__sim_exceptions |= x;
|
||||
if (x == 0 || __sim_disabled_exceptions & x)
|
||||
/* Ignore exception. */
|
||||
;
|
||||
else
|
||||
raise (SIGFPE);
|
||||
}
|
Loading…
Reference in New Issue
Block a user