On 21/06/2016 17:57, Richard Henderson wrote:
>>>
>>> || (prefixes & PREFIX_LOCK)) {
>>> goto illegal_op;
>>> }
>>> + tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC);
>>> break;
>>> case 0xe8 ... 0xef: /* lfence */
>>> + tcg_gen_mb(TCG_MO_LD_LD | TCG_BAR_SC);
>>> + break;
>>
>> These are unnecessary. On the other hand, _each and every load_ must be
>> followed by a LD_LD | LD_ST barrier, and each and every store must be
>> preceded by a LD_ST | ST_ST barrier.
>
> They're not unnecessary if we (1) add those barriers for normal loads
> and stores and (2) omit them from the non-temporal loads and stores.
When does TCG generate non-temporal loads and stores?
Paolo