On Sun, Jan 13, 2013 at 11:12 PM, Andi Kleen <[email protected]> wrote:
>> >> +(define_insn "atomic_store<mode>_1"
>> >> + [(set (match_operand:ATOMIC 0 "memory_operand" "=m")
>> >> + (unspec:ATOMIC [(match_operand:ATOMIC 1 "<nonmemory_operand>"
>> >> "<r><i>")
>> >> + (match_operand:SI 2 "const_int_operand")]
>> >> + UNSPEC_MOVA))]
>> >> + ""
>> >> + "%K2mov{<imodesuffix>}\t{%1, %0|%0, %1}")
>> >
>> > Is that the updated pattern you wanted? It looks similar to mine.
>>
>> Yes the attached patch actually implements all proposed fixes.
>
> Ok great. Can you just commit it then? It looks good to me.
No problem, but what about this part:
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 2b615a1..c283869 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5556,6 +5556,8 @@ expand_builtin_atomic_clear (tree exp)
return const0_rtx;
}
+ /* need target hook there to check for not hle acquire */
+
if (HAVE_atomic_clear)
{
emit_insn (gen_atomic_clear (mem, model));
Middle-end support should be implemented before target support is
committed. So, please figure out how to emit correct error on
unsupported models and get middle-end patch reviewed first. We do get
"Error: instruction `mov' after `xacquire' not allowed" assembler
error with "xacquire movb $0,mem" asm, though.
Uros.