On Sat, Nov 1, 2014 at 8:20 AM, Joseph S. Myers <jos...@codesourcery.com> wrote: > This patch implements support for TARGET_ATOMIC_ASSIGN_EXPAND_FENV for > powerpc*-*-linux* soft-float and e500, provided GCC is configured for > glibc 2.19 or later on the target. > > New functions __atomic_feholdexcept, __atomic_feclearexcept and > __atomic_feupdateenv were added (to libc) in that glibc version (for > powerpc soft-float / e500 only) in order to support this part of C11. > For soft-float, libc functions are needed because the floating-point > exception state is in TLS variables in libc that aren't directly > accessible outside of glibc. For e500, they are also needed because > of the prctl syscalls involved in controlling trapping for exceptions > and informing the kernel when certain exception flags have been > cleared. The actual implementation in GCC is a straightforward matter > of calling those functions. > > Tested with no regressions for cross to powerpc-linux-gnu > (soft-float); the c11-atomic-exec-5.c results go from FAIL to PASS. > OK to commit? > > 2014-11-01 Joseph Myers <jos...@codesourcery.com> > > * configure.ac (TARGET_GLIBC_MAJOR, TARGET_GLIBC_MINOR): Define > macros. > * configure, config.h.in: Regenerate. > * config/rs6000/linux.h [TARGET_GLIBC_MAJOR > 2 || > (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19)] > (RS6000_GLIBC_ATOMIC_FENV): New macro. > * config/rs6000/linux64.h [TARGET_GLIBC_MAJOR > 2 || > (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19)] > (RS6000_GLIBC_ATOMIC_FENV): New macro. > * config/rs6000/rs6000.c (atomic_hold_decl, atomic_clear_decl) > (atomic_update_decl): New static variables. > (rs6000_atomic_assign_expand_fenv) [RS6000_GLIBC_ATOMIC_FENV]: > Generate calls to __atomic_feholdexcept, __atomic_feclearexcept > and __atomic_feupdateenv for soft-float and no-FPRs.
Okay. Thanks, David