I had a look at the missing target hook TARGET_ATOMIC_ASSIGN_EXPAND_FENV
to fix the C11 memory model testcase in regressions in trunk.

I looked at the x86 implementation of this target hooks and x86 has
instructions (FNSTENV,FLDENV,FNSTSW,FNCLEX) for feholdexcept,
feclearexcept and feupdateenv. Does ARM has something similar? Any
pointers/links I can refer to.

Please see the gcc internal documentation for the target hook below.

— Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *hold, tree
*clear, tree *update)

    ISO C11 requires atomic compound assignments that may raise
floating-point exceptions to raise exceptions corresponding to the
arithmetic operation whose result was successfully stored in a
compare-and-exchange sequence. This requires code equivalent to calls to
feholdexcept, feclearexcept and feupdateenv to be generated at
appropriate points in the compare-and-exchange sequence. This hook
should set *hold to an expression equivalent to the call to
feholdexcept, *clear to an expression equivalent to the call to
feclearexcept and *update to an expression equivalent to the call to
feupdateenv. The three expressions are NULL_TREE on entry to the hook
and may be left as NULL_TREE if no code is required in a particular
place. The default implementation leaves all three expressions as
NULL_TREE. The __atomic_feraiseexcept function from libatomic may be of
use as part of the code generated in *update.


Thanks,
Kugan

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to