This is the mail archive of the
mailing list for the GCC project.
- From: Tobias Burnus <burnus at net-b dot de>
- To: gcc <gcc at gcc dot gnu dot org>
- Date: Wed, 09 Jul 2014 08:17:35 +0200
- Subject: Using BUILT_IN_ATOMIC_...
- Authentication-results: sourceware.org; auth=none
I am trying to use BUILT_IN_ATOMIC_..., but it does not quite work. I am
calling them as:
tmp = builtin_decl_explicit (BUILT_IN_ATOMIC_LOAD_4);
tmp = build_call_expr_loc (input_location, tmp, 2, atom.expr, ...
That gives the following dump:
__atomic_store_n (&i, 5, 0);
__atomic_store_n (&i, (integer(kind=4)) *k, 0);
j = (integer(kind=4)) __atomic_load_4 (&i, 0);
__atomic_add_fetch (&i, 5, 0);
The "__atomic_load_4" works, but the "__atomic_store_n" and
"__atomic_add_fetch" lead to link-time errors:
fo4o.f90:(.text+0x44): undefined reference to `__atomic_store_n'
fo4o.f90:(.text+0x73): undefined reference to `__atomic_add_fetch'
The issue with `__atomic_store_n', I can solve by replacing it by, e.g.,
BUILT_IN_ATOMIC_STORE_4. However, how does one properly use
__atomic_add_fetch alias BUILT_IN_ATOMIC_ADD_FETCH_N, given that there
is no _4 version of it?
Additionally, if one wants to fetch the old value (e.g. with
__atomic_add_fetch), how does one properly use the function result? The
problem is that TREE_TYPE() doesn't automatically match the type of the
first argument. Ignoring the type issue in the front end and simply
calling MODIFY_EXPR will lead to a gimplify.c ICE.