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

Reply via email to