diff options
author | Stefan Liebler <stli@linux.ibm.com> | 2019-12-11 15:09:32 +0100 |
---|---|---|
committer | Stefan Liebler <stli@linux.ibm.com> | 2019-12-11 15:12:25 +0100 |
commit | 238adf59db85646ebae47876819bd896dae597bc (patch) | |
tree | bc11e42ee2928d1549b9dfd405fbaee17c9cabfd /sysdeps/s390/fpu/fsetexcptflg.c | |
parent | 7c94d036c17dfd352d11e9bf98e5d84122c1f95e (diff) | |
download | glibc-238adf59db85646ebae47876819bd896dae597bc.tar.gz glibc-238adf59db85646ebae47876819bd896dae597bc.tar.xz glibc-238adf59db85646ebae47876819bd896dae597bc.zip |
S390: Use libc_fe* macros in fe* functions.
This patch updates the s390 specific functions fegetround, fesetround, feholdexcept, fesetenv, feupdateenv, fegetexceptflag, fetestexcept, fesetexceptflag, fetestexceptflag. Now those functions are using the libc_fe* macros if possible. Furthermore fegetexceptflag is now returning the exception from dxc field shifted to the usual exception-flags. Thus a special fetestexceptflag implementation is not needed anymore.
Diffstat (limited to 'sysdeps/s390/fpu/fsetexcptflg.c')
-rw-r--r-- | sysdeps/s390/fpu/fsetexcptflg.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/sysdeps/s390/fpu/fsetexcptflg.c b/sysdeps/s390/fpu/fsetexcptflg.c index b3e4bbf878..0b9517ef59 100644 --- a/sysdeps/s390/fpu/fsetexcptflg.c +++ b/sysdeps/s390/fpu/fsetexcptflg.c @@ -24,29 +24,26 @@ int fesetexceptflag (const fexcept_t *flagp, int excepts) { - fexcept_t temp, newexcepts; + fexcept_t fpc, fpc_new; /* Get the current environment. We have to do this since we cannot separately set the status word. */ - _FPU_GETCW (temp); - /* Install the new exception bits in the Accrued Exception Byte. */ - excepts = excepts & FE_ALL_EXCEPT; - newexcepts = excepts << FPC_FLAGS_SHIFT; - temp &= ~newexcepts; - if ((temp & FPC_NOT_FPU_EXCEPTION) == 0) + _FPU_GETCW (fpc); + + /* Clear the current exception bits. */ + fpc_new = fpc & ~((excepts & FE_ALL_EXCEPT) << FPC_FLAGS_SHIFT); + if ((fpc & FPC_NOT_FPU_EXCEPTION) == 0) /* Bits 6, 7 of dxc-byte are zero, thus bits 0-5 of dxc-byte correspond to the flag-bits. Clear given exceptions in dxc-field. */ - temp &= ~(excepts << FPC_DXC_SHIFT); + fpc_new &= ~((excepts & FE_ALL_EXCEPT) << FPC_DXC_SHIFT); - /* Integrate dxc-byte of flagp into flags. The dxc-byte of flagp contains - either an ieee-exception or 0 (see fegetexceptflag). */ - temp |= (*flagp | ((*flagp >> FPC_DXC_SHIFT) << FPC_FLAGS_SHIFT)) - & newexcepts; + /* Set exceptions from flagp in flags-field. */ + fpc_new |= (*flagp & excepts & FE_ALL_EXCEPT) << FPC_FLAGS_SHIFT; /* Store the new status word (along with the rest of the environment. Possibly new exceptions are set but they won't get executed. */ - _FPU_SETCW (temp); + _FPU_SETCW (fpc_new); /* Success. */ return 0; |