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] |