This is the mail archive of the
mailing list for the GCC project.
Re: [patch] Atomic alignment override.
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Andrew MacLeod <amacleod at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, Jeff Law <law at redhat dot com>, "Joseph S. Myers" <joseph at codesourcery dot com>, Hans-Peter Nilsson <hp at bitrange dot com>
- Date: Fri, 22 Nov 2013 12:21:32 +0100
- Subject: Re: [patch] Atomic alignment override.
- Authentication-results: sourceware.org; auth=none
- References: <528E8D43 dot 2050101 at redhat dot com>
On Thu, Nov 21, 2013 at 11:46 PM, Andrew MacLeod <email@example.com> wrote:
> I'd like to check in this code from the C11 branch so that it is present in
> Its adds a target hook which can be used to override the default alignment
> of an atomic type when used with C11's _Atomic qualifier. There are a couple
> of ports which have stricter alignment requirements for an atomic operation
> than the natural alignment of the integral type. Today they are just
> broken with no real facility to repair it.
> If this hook is not utilized by a port, the code is transparent and should
> therefore be harmless in the code base. It will enable the ports that care
> to experiment with changing alignment and see if their current problems can
> be resolved for C11.... and then we can look to push that into C++11 atomic
> templates somehow. It will also allow them to flush out any remaining
> problems that show up with the fundamental base code which enables it that
> went in as part of C11.
> Bootstraps on x86-64 and currently running regression tests. Assuming
> everything passes, OK for mainline?
> I wont actually check it in until HP reports back that it actually is useful
> to him, I just want to submit it before stage 1 ends :-).
Looks good to me, but
! #define SET_ATOMIC_TYPE_NODE(TYPE, MODE, DEFAULT) \
! (TYPE) = build_atomic_base (DEFAULT, targetm.atomic_align_for_mode (MODE));
! SET_ATOMIC_TYPE_NODE (atomicQI_type_node, QImode, unsigned_intQI_type_node);
! SET_ATOMIC_TYPE_NODE (atomicHI_type_node, HImode, unsigned_intHI_type_node);
! SET_ATOMIC_TYPE_NODE (atomicSI_type_node, SImode, unsigned_intSI_type_node);
! SET_ATOMIC_TYPE_NODE (atomicDI_type_node, DImode, unsigned_intDI_type_node);
! SET_ATOMIC_TYPE_NODE (atomicTI_type_node, TImode, unsigned_intTI_type_node);
if you have to use a macro please #undef it after the last use.
Also if you need to use a macro then make it
atomicQI_type_node = BUILD_ATOMIC_TYPE (QI);