1 /*
2  * Copyright (C) 2016-2017 Andes Technology, Inc.
3  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
4  */
5 
6 /* Set floating-point environment exception handling.
7    Copyright (C) 1997-2013 Free Software Foundation, Inc.
8 
9    The GNU C Library is free software; you can redistribute it and/or
10    modify it under the terms of the GNU Lesser General Public
11    License as published by the Free Software Foundation; either
12    version 2.1 of the License, or (at your option) any later version.
13 
14    The GNU C Library is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17    Lesser General Public License for more details.
18 
19    You should have received a copy of the GNU Lesser General Public
20    License along with the GNU C Library.  If not, see
21    <http://www.gnu.org/licenses/>.  */
22 
23 #include <fenv.h>
24 #include <fpu_control.h>
25 
26 int
fesetexceptflag(const fexcept_t * flagp,int excepts)27 fesetexceptflag (const fexcept_t *flagp, int excepts)
28 {
29 #ifdef __NDS32_ABI_2FP_PLUS__
30 	fexcept_t temp;
31 
32 	/* Get the current environment.  */
33 	_FPU_GETCW (temp);
34 
35 	/* Set the desired exception mask.  */
36 	temp &= ~(excepts & FE_ALL_EXCEPT);
37 	temp |= (*flagp & excepts & FE_ALL_EXCEPT);
38 
39 	/* Save state back to the FPU.  */
40 	_FPU_SETCW (temp);
41 
42 	/* Success.  */
43 	return 0;
44 #else
45 	/* Unsupported, so fail unless nothing needs to be done.  */
46 	return (excepts != 0);
47 #endif
48 }
49