[12/12] Add fesetexcept: sparc

Message ID alpine.DEB.2.20.1608112104010.1591@digraph.polyomino.org.uk
State Committed
Headers

Commit Message

Joseph Myers Aug. 11, 2016, 9:04 p.m. UTC
  This patch adds a SPARC version of fesetexcept.  Untested.

2016-08-11  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/sparc/fpu/fesetexcept.c: New file.
  

Comments

Jose E. Marchesi Aug. 12, 2016, 7:40 a.m. UTC | #1
+int
    +fesetexcept (int excepts)
    +{
    +  fenv_t tmp;
    +
    +  __fenv_stfsr (tmp);
    +  tmp |= excepts & FE_ALL_EXCEPT;
    +  __fenv_ldfsr (tmp);

Aren't these stfsr and ldfsr reversed?

    +
    +  return 0;
    +}
  
Joseph Myers Aug. 12, 2016, 11:14 a.m. UTC | #2
On Fri, 12 Aug 2016, Jose E. Marchesi wrote:

> 
>     +int
>     +fesetexcept (int excepts)
>     +{
>     +  fenv_t tmp;
>     +
>     +  __fenv_stfsr (tmp);
>     +  tmp |= excepts & FE_ALL_EXCEPT;
>     +  __fenv_ldfsr (tmp);
> 
> Aren't these stfsr and ldfsr reversed?

They are in the same order as in fesetexceptflag.  __fenv_stfsr = store 
status register to memory, __fenv_ldfsr = load status register from 
memory.
  
Jose E. Marchesi Aug. 13, 2016, 8:39 a.m. UTC | #3
>     +int
    >     +fesetexcept (int excepts)
    >     +{
    >     +  fenv_t tmp;
    >     +
    >     +  __fenv_stfsr (tmp);
    >     +  tmp |= excepts & FE_ALL_EXCEPT;
    >     +  __fenv_ldfsr (tmp);
    > 
    > Aren't these stfsr and ldfsr reversed?
    
    They are in the same order as in fesetexceptflag.  __fenv_stfsr = store 
    status register to memory, __fenv_ldfsr = load status register from 
    memory.

Ah right, nevermind :)
  

Patch

diff --git a/sysdeps/sparc/fpu/fesetexcept.c b/sysdeps/sparc/fpu/fesetexcept.c
new file mode 100644
index 0000000..ef1c5de
--- /dev/null
+++ b/sysdeps/sparc/fpu/fesetexcept.c
@@ -0,0 +1,31 @@ 
+/* Set given exception flags.  SPARC version.
+   Copyright (C) 2016 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
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetexcept (int excepts)
+{
+  fenv_t tmp;
+
+  __fenv_stfsr (tmp);
+  tmp |= excepts & FE_ALL_EXCEPT;
+  __fenv_ldfsr (tmp);
+
+  return 0;
+}