diff options
author | David S. Miller <davem@davemloft.net> | 2012-05-27 21:02:14 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-27 21:11:42 -0700 |
commit | d66ef399f5a9e1656fe8e435a8fa655cf271b676 (patch) | |
tree | fa8fa1a3d009ccbac649f4587ede51c4e2d0b871 /sysdeps/sparc/sparc64/soft-fp/sfp-machine.h | |
parent | 04fb54b50745587b5bfb7baff66ac9f69ac92db9 (diff) | |
download | glibc-d66ef399f5a9e1656fe8e435a8fa655cf271b676.tar glibc-d66ef399f5a9e1656fe8e435a8fa655cf271b676.tar.gz glibc-d66ef399f5a9e1656fe8e435a8fa655cf271b676.tar.bz2 glibc-d66ef399f5a9e1656fe8e435a8fa655cf271b676.zip |
Fix underflow reporting and tie up loose ends in sparc soft-fp.
* sysdeps/sparc/sparc32/soft-fp/q_util.c (___Q_numbers): Delete.
(___Q_zero): New.
(__Q_simulate_exceptions): Return void. Change to simulate
exceptions by writing into the %fsr.
* sysdeps/sparc/sparc64/soft-fp/qp_util.c
(__Qp_handle_exceptions): Likewise.
(numbers): Delete.
* sysdeps/sparc/sparc64/soft-fp/Versions: Remove entry for
__Qp_handle_exceptions.
* sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libc.abilist: Remove
__Qp_handle_exceptions.
* sysdeps/sparc/sparc32/soft-fp/sfp-machine.h (_FP_DECL_EX): Mark
as unused and give dummy FP_RND_NEAREST initializer.
(FP_INHIBIT_RESULTS): Define.
(___Q_simulate_exceptions): Update declaration.
(FP_HANDLE_EXCEPTIONS): Use ___Q_zero and tidy inline asm
formatting.
* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h (_FP_DECL_EX): Mark
as unused and give dummy FP_RND_NEAREST initializer.
(__Qp_handle_exceptions): Update declaration.
(FP_HANDLE_EXCEPTIONS, QP_NO_EXCEPTIONS): Tidy inline asm
formatting.
Diffstat (limited to 'sysdeps/sparc/sparc64/soft-fp/sfp-machine.h')
-rw-r--r-- | sysdeps/sparc/sparc64/soft-fp/sfp-machine.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h b/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h index 7ec804da51..36f92d64fb 100644 --- a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h +++ b/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h @@ -92,7 +92,8 @@ do { \ #define FP_EX_DIVZERO (1 << 1) #define FP_EX_INEXACT (1 << 0) -#define _FP_DECL_EX fpu_control_t _fcw +#define _FP_DECL_EX \ + fpu_control_t _fcw __attribute__ ((unused)) = (FP_RND_NEAREST << 30) #define FP_INIT_ROUNDMODE \ do { \ @@ -102,7 +103,7 @@ do { \ #define FP_INHIBIT_RESULTS ((_fcw >> 23) & _fex) /* Simulate exceptions using double arithmetics. */ -extern double __Qp_handle_exceptions(int exc); +extern void __Qp_handle_exceptions(int exc); #define FP_HANDLE_EXCEPTIONS \ do { \ @@ -111,10 +112,9 @@ do { \ /* This is the common case, so we do it inline. \ * We need to clear cexc bits if any. \ */ \ - __asm__ __volatile__("\n" \ -" fzero %%f62\n" \ -" faddd %%f62, %%f62, %%f62\n" \ -" " : : : "f62"); \ + __asm__ __volatile__("fzero %%f62\n\t" \ + "faddd %%f62, %%f62, %%f62" \ + : : : "f62"); \ } \ else \ { \ @@ -136,8 +136,8 @@ do { \ } while (0) #define QP_NO_EXCEPTIONS \ - __asm ("fzero %%f62\n" \ -" faddd %%f62, %%f62, %%f62" : : : "f62") + __asm ("fzero %%f62\n\t" \ + "faddd %%f62, %%f62, %%f62" : : : "f62") #define QP_CLOBBER "memory", "f52", "f54", "f56", "f58", "f60", "f62" #define QP_CLOBBER_CC QP_CLOBBER , "cc" |