From 2ecccfc97ac9e755f6b67fa0bac785148c7b8256 Mon Sep 17 00:00:00 2001 From: Kaz Kojima Date: Thu, 5 Apr 2012 11:57:03 +0900 Subject: [PATCH] Set SH fpcsr register which read again. --- ChangeLog | 6 ++++++ sysdeps/sh/sh4/fpu/fegetenv.c | 6 +++++- sysdeps/sh/sh4/fpu/ftestexcept.c | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 092756e6f7..9c9947984f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-04-05 Nobuhiro Iwamatsu + + * sysdeps/sh/sh4/fpu/fegetenv.c (fegetenv): Set fpscr register which + read again. + * sysdeps/sh/sh4/fpu/ftestexcept.c: Likewise. + 2012-04-05 Nobuhiro Iwamatsu * sysdeps/sh/sh4/fpu/fraiseexcpt.c (feraiseexcept): Produce diff --git a/sysdeps/sh/sh4/fpu/fegetenv.c b/sysdeps/sh/sh4/fpu/fegetenv.c index 68687dc2d1..3103316e34 100644 --- a/sysdeps/sh/sh4/fpu/fegetenv.c +++ b/sysdeps/sh/sh4/fpu/fegetenv.c @@ -1,5 +1,5 @@ /* Store current floating-point environment. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 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 @@ -24,6 +24,10 @@ fegetenv (fenv_t *envp) { unsigned long int temp; _FPU_GETCW (temp); + /* When read fpscr, this was initialized. + We need to rewrite value of temp. */ + _FPU_SETCW (temp); + envp->__fpscr = temp; return 0; diff --git a/sysdeps/sh/sh4/fpu/ftestexcept.c b/sysdeps/sh/sh4/fpu/ftestexcept.c index 9e0bfc5c27..c2e1772a91 100644 --- a/sysdeps/sh/sh4/fpu/ftestexcept.c +++ b/sysdeps/sh/sh4/fpu/ftestexcept.c @@ -26,6 +26,9 @@ fetestexcept (int excepts) /* Get current exceptions. */ _FPU_GETCW (temp); + /* When read fpscr, this was initialized. + We need to rewrite value of temp. */ + _FPU_SETCW (temp); return temp & excepts & FE_ALL_EXCEPT; }