Patchwork [3/3] ARM 64 bit atomic operations

login
register
mail settings
Submitter David Gilbert
Date July 1, 2011, 3:57 p.m.
Message ID <20110701155710.GD5242@davesworkthinkpad>
Download mbox | patch
Permalink /patch/102926/
State New
Headers show

Comments

David Gilbert - July 1, 2011, 3:57 p.m.
As per pr/48126 Michael Edwards spotted that in the case where
the compare fails in the cmpxchg, the barrier at the end wasn't taken
theoretically allowing a following load to float up above the load
value compared.
Ramana Radhakrishnan - July 12, 2011, 3 p.m.
On 1 July 2011 16:57, Dr. David Alan Gilbert <david.gilbert@linaro.org> wrote:
>
> As per pr/48126 Michael Edwards spotted that in the case where
> the compare fails in the cmpxchg, the barrier at the end wasn't taken
> theoretically allowing a following load to float up above the load
> value compared.

Please resubmit with a proper changelog entry. Can you add a comment
in the code to explain that this is to prevent speculative loads
before the barrier ?

cheers
Ramana

>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index 057f9ba..39057d2 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -23531,8 +23626,8 @@ arm_output_sync_loop (emit_f emit,
>        }
>     }
>
> -  arm_process_output_memory_barrier (emit, NULL);
>   arm_output_asm_insn (emit, 1, operands, "%sLSYB%%=:", LOCAL_LABEL_PREFIX);
> +  arm_process_output_memory_barrier (emit, NULL);
>  }
>
>  static rtx
>

Patch

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 057f9ba..39057d2 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -23531,8 +23626,8 @@  arm_output_sync_loop (emit_f emit,
 	}
     }
 
-  arm_process_output_memory_barrier (emit, NULL);
   arm_output_asm_insn (emit, 1, operands, "%sLSYB%%=:", LOCAL_LABEL_PREFIX);
+  arm_process_output_memory_barrier (emit, NULL);
 }
 
 static rtx