Look at the arm and aarch64 implementations of these functions in glibc.
/Marcus
Sent from my iPhone
On 30 Jan 2014, at 06:34, Kugan kugan.vivekanandarajah@linaro.org wrote:
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