fix return value of ungetc when argument is outside unsigned char range
[musl.git] / src / fenv / s390x / fenv.c
blobfd4e60c5eb31f572d034bd8e2bda1693088c4266
1 #include <fenv.h>
2 #include <features.h>
4 static inline unsigned get_fpc(void)
6 unsigned fpc;
7 __asm__ __volatile__("efpc %0" : "=r"(fpc));
8 return fpc;
11 static inline void set_fpc(unsigned fpc)
13 __asm__ __volatile__("sfpc %0" :: "r"(fpc));
16 int feclearexcept(int mask)
18 mask &= FE_ALL_EXCEPT;
19 set_fpc(get_fpc() & ~mask);
20 return 0;
23 int feraiseexcept(int mask)
25 mask &= FE_ALL_EXCEPT;
26 set_fpc(get_fpc() | mask);
27 return 0;
30 int fetestexcept(int mask)
32 return get_fpc() & mask & FE_ALL_EXCEPT;
35 int fegetround(void)
37 return get_fpc() & 3;
40 hidden int __fesetround(int r)
42 set_fpc(get_fpc() & ~3L | r);
43 return 0;
46 int fegetenv(fenv_t *envp)
48 *envp = get_fpc();
49 return 0;
52 int fesetenv(const fenv_t *envp)
54 set_fpc(envp != FE_DFL_ENV ? *envp : 0);
55 return 0;