On 11/28/2011 06:01 AM, David Gilbert wrote:
> Hi Rchard,
>   Can you explain the code:
> 
> +  if (mod_f != MEMMODEL_RELAXED)
> +    emit_label (label2);
> +
> +  arm_post_atomic_barrier (mod_s);
> +
> +  if (mod_f == MEMMODEL_RELAXED)
> +    emit_label (label2);
> +}
> 
> in the case of the existing __sync_* will it always end up doing the
> label and the sync as
> Michael's pr 48126 indicated and my patch moved it?

This is a new feature of the user-level interface: one can specify both the 
memory model to be enforced on success and the memory model to be enforced on 
failure:

      bool
      compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 
                              memory_order __f) noexcept
      {
        return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); 
      }

with the constraint that the failure model __f cannot be stronger than success 
model __s.

What the quoted code does is skip any final barrier if and only if the failure 
model is RELAXED.


r~

Reply via email to