On 11/29/2011 08:09 AM, Richard Henderson wrote:
>> +static inline bool
>> +likely_compare_exchange (int *ptr, int *expected, int val, bool weak,
>> +                     enum memmodel succ, enum memmodel fail)
>>  {
>> +  return __builtin_expect (__atomic_compare_exchange_n (ptr, expected, val,
>> +                                                    weak, succ, fail), 1);
>>  }
> 
> Please move this to libgomp.h just below the memmodel definition, as
> a macro so that it's not tied to int.  It seems likely that we'll
> want this elsewhere in libgomp as we convert things.

... although it does occur to me that it would be more useful to adjust 
gcc/predict.c so that we get this by default.  Then we don't have to contort 
loops like

> +  while (1)
> +    if (likely_compare_exchange (sem, &count, ((count + SEM_INC) & 
> ~SEM_WAIT),
> +                              false, MEMMODEL_RELEASE, MEMMODEL_RELAXED))
> +      break;

this.  This is surely more natural as

  while (!__atomic_compare_exchange_n (sem, &count, ...))
    continue;


r~

Reply via email to