Are arrays guaranteed to be affected by a "memory" clobber?

Andrew Haley aph@redhat.com
Fri Jun 12 08:37:00 GMT 2015


On 11/06/15 22:38, Sebastian wrote:
> On Thu, 11 Jun 2015 12:21:23 +0100
> Andrew Haley <aph@redhat.com> wrote:
> 
>> I'd use a full memory barrier.  __sync_synchronize() 
> Isn't __sync_synchronize() the same as a memory clobber + hardware barrier?

It's a compiler barrier and a hardware barrier.  If you processor has
no hardware barriers, then it's just a compiler barrier.  It does the
right thing either way.

>> this guarantees that no memory operations will not
>> be moved  across the barrier.

> Still the open question: Is access to array elements (or
> dereferencing a pointer) always considered a "memory operation",

Yes.

> unlike the variable access in the example in [2]?

Eh?  The vriable access is a memory operation in [2].  It is
surrounded by the cli/sei, as required.  We cannot guarantee that
non-memory operations will not be reordered with memory barriers,
though.

>> or one of the __atomic fences.
> As far as I can see, you can only use them on integers or pointers,
> but not on arrays.

This makes no sense.  A fence is a fence.  It is not attached to any memory
location.  No memory access can move across it.

> So you think it would be enough to do the pointer manipulations
> atomically, and then the array accesses which depend on these
> pointers should be ok? That's what I'm thinking, too, but what I'm
> not sure about...

This makes no sense either.

Andrew.



More information about the Gcc-help mailing list