This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! On Sun, 20 May 2012 22:08:40 +0900, Kaz Kojima <kkojima@rr.iij4u.or.jp> wrote: > > Good point. Thanks! Rewriting such _FPU_GETCW/_FPU_SETCW > > pairs with int variables might be less intrusive. I'll try > > both way. > > And here is a patch with the 2nd way. [...] It turns out there already is a data type defined to be used for this: fpu_control_t. Here is a patch based on Kaz' (and revisiting all SH files that invoke _FPU_GETCW), that completely makes math/test-fenv pass for the SH7785 that I'm testing on. Kaz, Nobuhiro, OK? * sysdeps/sh/sh4/fpu/fraiseexcpt.c (feraiseexcept): Restore fpscr flag fields. * sysdeps/sh/sh4/fpu/fclrexcpt.c (feclearexcept): Use fpu_control_t for the temporary FPU control word. * sysdeps/sh/sh4/fpu/fedisblxcpt.c (fedisableexcept): Likewise. * sysdeps/sh/sh4/fpu/feenablxcpt.c (feenableexcept): Likewise. * sysdeps/sh/sh4/fpu/fegetenv.c (fegetenv): Likewise. * sysdeps/sh/sh4/fpu/fegetexcept.c (fegetexcept): Likewise. * sysdeps/sh/sh4/fpu/fegetround.c (fegetround): Likewise. * sysdeps/sh/sh4/fpu/feholdexcpt.c (feholdexcept): Likewise. * sysdeps/sh/sh4/fpu/fesetenv.c (fesetenv): Likewise. * sysdeps/sh/sh4/fpu/fesetround.c (fesetround): Likewise. * sysdeps/sh/sh4/fpu/feupdateenv.c (feupdateenv): Likewise. * sysdeps/sh/sh4/fpu/fsetexcptflg.c (fesetexceptflag): Likewise. * sysdeps/sh/sh4/fpu/ftestexcept.c (fetestexcept): Likewise. diff --git a/sysdeps/sh/sh4/fpu/fclrexcpt.c b/sysdeps/sh/sh4/fpu/fclrexcpt.c index c2df162..b4b2ead 100644 --- a/sysdeps/sh/sh4/fpu/fclrexcpt.c +++ b/sysdeps/sh/sh4/fpu/fclrexcpt.c @@ -1,5 +1,5 @@ /* Clear given exceptions in current floating-point environment. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998. @@ -23,7 +23,7 @@ int feclearexcept (int excepts) { - int cw; + fpu_control_t cw; /* Mask out unsupported bits/exceptions. */ excepts &= FE_ALL_EXCEPT; diff --git a/sysdeps/sh/sh4/fpu/fedisblxcpt.c b/sysdeps/sh/sh4/fpu/fedisblxcpt.c index 029fcc3..b2938ba 100644 --- a/sysdeps/sh/sh4/fpu/fedisblxcpt.c +++ b/sysdeps/sh/sh4/fpu/fedisblxcpt.c @@ -23,7 +23,7 @@ int fedisableexcept (int excepts) { - unsigned int temp, old_exc; + fpu_control_t temp, old_exc; /* Get the current control register contents. */ _FPU_GETCW (temp); diff --git a/sysdeps/sh/sh4/fpu/feenablxcpt.c b/sysdeps/sh/sh4/fpu/feenablxcpt.c index 93fa749..6d92c12 100644 --- a/sysdeps/sh/sh4/fpu/feenablxcpt.c +++ b/sysdeps/sh/sh4/fpu/feenablxcpt.c @@ -23,7 +23,7 @@ int feenableexcept (int excepts) { - unsigned int temp, old_flag; + fpu_control_t temp, old_flag; /* Get current exceptions. */ _FPU_GETCW (temp); diff --git a/sysdeps/sh/sh4/fpu/fegetenv.c b/sysdeps/sh/sh4/fpu/fegetenv.c index 3103316..ca7de16 100644 --- a/sysdeps/sh/sh4/fpu/fegetenv.c +++ b/sysdeps/sh/sh4/fpu/fegetenv.c @@ -22,7 +22,7 @@ int fegetenv (fenv_t *envp) { - unsigned long int temp; + fpu_control_t temp; _FPU_GETCW (temp); /* When read fpscr, this was initialized. We need to rewrite value of temp. */ diff --git a/sysdeps/sh/sh4/fpu/fegetexcept.c b/sysdeps/sh/sh4/fpu/fegetexcept.c index a849a17..a2faaac 100644 --- a/sysdeps/sh/sh4/fpu/fegetexcept.c +++ b/sysdeps/sh/sh4/fpu/fegetexcept.c @@ -23,7 +23,7 @@ int fegetexcept (void) { - unsigned int temp; + fpu_control_t temp; /* Get current exceptions. */ _FPU_GETCW (temp); diff --git a/sysdeps/sh/sh4/fpu/fegetround.c b/sysdeps/sh/sh4/fpu/fegetround.c index 9108e97..7368383 100644 --- a/sysdeps/sh/sh4/fpu/fegetround.c +++ b/sysdeps/sh/sh4/fpu/fegetround.c @@ -1,5 +1,5 @@ /* Return current rounding direction. - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998. @@ -23,7 +23,7 @@ int fegetround (void) { - int cw; + fpu_control_t cw; /* Get control word. */ _FPU_GETCW (cw); diff --git a/sysdeps/sh/sh4/fpu/feholdexcpt.c b/sysdeps/sh/sh4/fpu/feholdexcpt.c index 2b6b9bd..40a58e1 100644 --- a/sysdeps/sh/sh4/fpu/feholdexcpt.c +++ b/sysdeps/sh/sh4/fpu/feholdexcpt.c @@ -1,6 +1,5 @@ /* Store current floating-point environment and clear exceptions. - Copyright (C) 1997, 1998, 1999, 2000, 2005, 2010 - Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,7 +22,7 @@ int feholdexcept (fenv_t *envp) { - unsigned long int temp; + fpu_control_t temp; /* Store the environment. */ _FPU_GETCW (temp); diff --git a/sysdeps/sh/sh4/fpu/fesetenv.c b/sysdeps/sh/sh4/fpu/fesetenv.c index 34d3461..55fd1f6 100644 --- a/sysdeps/sh/sh4/fpu/fesetenv.c +++ b/sysdeps/sh/sh4/fpu/fesetenv.c @@ -1,5 +1,5 @@ /* Install given floating-point environment. - Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -26,7 +26,7 @@ fesetenv (const fenv_t *envp) _FPU_SETCW (_FPU_DEFAULT); else { - unsigned long int temp = envp->__fpscr; + fpu_control_t temp = envp->__fpscr; _FPU_SETCW (temp); } return 0; diff --git a/sysdeps/sh/sh4/fpu/fesetround.c b/sysdeps/sh/sh4/fpu/fesetround.c index 3269199..4edf9c5 100644 --- a/sysdeps/sh/sh4/fpu/fesetround.c +++ b/sysdeps/sh/sh4/fpu/fesetround.c @@ -23,7 +23,7 @@ int fesetround (int round) { - unsigned int cw; + fpu_control_t cw; if ((round & ~0x3) != 0) /* ROUND is no valid rounding mode. */ diff --git a/sysdeps/sh/sh4/fpu/feupdateenv.c b/sysdeps/sh/sh4/fpu/feupdateenv.c index 96a6979..41fb8a5 100644 --- a/sysdeps/sh/sh4/fpu/feupdateenv.c +++ b/sysdeps/sh/sh4/fpu/feupdateenv.c @@ -23,7 +23,7 @@ int feupdateenv (const fenv_t *envp) { - unsigned int temp; + fpu_control_t temp; _FPU_GETCW (temp); temp = (temp & FE_ALL_EXCEPT); diff --git a/sysdeps/sh/sh4/fpu/fraiseexcpt.c b/sysdeps/sh/sh4/fpu/fraiseexcpt.c index a555b10..729e8bf 100644 --- a/sysdeps/sh/sh4/fpu/fraiseexcpt.c +++ b/sysdeps/sh/sh4/fpu/fraiseexcpt.c @@ -60,6 +60,14 @@ feraiseexcept (int excepts) __asm__ __volatile__ ("fmul %1, %0" : "+d" (d) : "d" (x)); } + { + /* Restore flag fields. */ + fpu_control_t cw; + _FPU_GETCW (cw); + cw |= (excepts & FE_ALL_EXCEPT); + _FPU_SETCW (cw); + } + return 0; } libm_hidden_def (feraiseexcept) diff --git a/sysdeps/sh/sh4/fpu/fsetexcptflg.c b/sysdeps/sh/sh4/fpu/fsetexcptflg.c index 40cd5ea..ffed4b1 100644 --- a/sysdeps/sh/sh4/fpu/fsetexcptflg.c +++ b/sysdeps/sh/sh4/fpu/fsetexcptflg.c @@ -1,5 +1,5 @@ /* Set floating-point environment exception handling. - Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,7 +23,7 @@ int fesetexceptflag (const fexcept_t *flagp, int excepts) { - fexcept_t temp; + fpu_control_t temp; /* Get the current environment. */ _FPU_GETCW (temp); diff --git a/sysdeps/sh/sh4/fpu/ftestexcept.c b/sysdeps/sh/sh4/fpu/ftestexcept.c index c2e1772..c61af4c 100644 --- a/sysdeps/sh/sh4/fpu/ftestexcept.c +++ b/sysdeps/sh/sh4/fpu/ftestexcept.c @@ -1,5 +1,5 @@ /* Test exception in current environment. - Copyright (C) 1997, 1998, 2000, 2010 Free Software Foundation, Inc. + Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,7 +22,7 @@ int fetestexcept (int excepts) { - fexcept_t temp; + fpu_control_t temp; /* Get current exceptions. */ _FPU_GETCW (temp); GrÃÃe, Thomas
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |