Andi Kleen <a...@firstfloor.org> writes:

Ping^2!

> Andi Kleen <a...@firstfloor.org> writes:
>
> Ping!
>
>> From: Andi Kleen <a...@linux.intel.com>
>>
>> xbegin/xend/xabort were missing memory barriers. This can
>> lead to memory operations being moved out of transactions, which would
>> cause unexpected races.
>>
>> Always generate implicit memory barriers for these intrinsics.
>>
>> The compat header versions always generated memory barriers,
>> so this also improves compatibility.
>>
>> Passes test suite. Ok for release branches?
>>
>> gcc/:
>>
>> 2014-10-28  Andi Kleen  <a...@linux.intel.com>
>>
>>      PR target/63672
>>      * config/i386/i386.c (ix86_expand_builtin): Generate memory
>>      barrier after abort.
>>      * config/i386/i386.md (xbegin): Add memory barrier.
>>      (xend): Rename to ...
>>      (xend_1): New. Generate memory barrier and emit xend.
>> ---
>>  gcc/config/i386/i386.c  |  1 +
>>  gcc/config/i386/i386.md | 18 +++++++++++++++++-
>>  2 files changed, 18 insertions(+), 1 deletion(-)
>>
>> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
>> index ec3e056..ec0df40 100644
>> --- a/gcc/config/i386/i386.c
>> +++ b/gcc/config/i386/i386.c
>> @@ -36413,6 +36413,7 @@ addcarryx:
>>        return const0_rtx;
>>      }
>>        emit_insn (gen_xabort (op0));
>> +      emit_insn (gen_memory_blockage ());
>>        return 0;
>>  
>>      default:
>> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
>> index 7ba07c3..3544e60 100644
>> --- a/gcc/config/i386/i386.md
>> +++ b/gcc/config/i386/i386.md
>> @@ -18530,6 +18530,9 @@
>>  
>>    emit_move_insn (operands[0], ax_reg);
>>  
>> +  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
>> +  MEM_VOLATILE_P (operands[0]) = 1;
>> +
>>    DONE;
>>  })
>>  
>> @@ -18546,13 +18549,26 @@
>>    [(set_attr "type" "other")
>>     (set_attr "length" "6")])
>>  
>> -(define_insn "xend"
>> +(define_insn "xend_1"
>>    [(unspec_volatile [(const_int 0)] UNSPECV_XEND)]
>>    "TARGET_RTM"
>>    "xend"
>>    [(set_attr "type" "other")
>>     (set_attr "length" "3")])
>>  
>> +(define_expand "xend"
>> +  [(set (match_dup 0)
>> +    (unspec:BLK [(const_int 0)] UNSPECV_XEND))] /* or match_dup 0 ? */
>> +  "TARGET_RTM"
>> +{
>> +  emit_insn (gen_xend_1 ());
>> +
>> +  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
>> +  MEM_VOLATILE_P (operands[0]) = 1;
>> +
>> +  DONE;
>> +})
>> +
>>  (define_insn "xabort"
>>    [(unspec_volatile [(match_operand:SI 0 "const_0_to_255_operand" "n")]
>>                  UNSPECV_XABORT)]

-- 
a...@linux.intel.com -- Speaking for myself only

Reply via email to