aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Alan Gilbert <david.gilbert@linaro.org>2011-10-14 14:38:42 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2011-10-14 14:38:42 +0000
commit3e2a46fe397751855594e35cc6ef15b41794e0d9 (patch)
tree444d8a3bc8f3ca93bba0740fb74f5021cbe3e008
parent80651d8e1cc65f26b5a2760aa965549f2b6f2dbb (diff)
downloadgcc-3e2a46fe397751855594e35cc6ef15b41794e0d9.zip
gcc-3e2a46fe397751855594e35cc6ef15b41794e0d9.tar.gz
gcc-3e2a46fe397751855594e35cc6ef15b41794e0d9.tar.bz2
re PR target/48126 (arm_output_sync_loop: misplaced memory barrier)
gcc/ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org> PR target/48126 * config/arm/arm.c (arm_output_sync_loop): Move label before barrier. From-SVN: r179980
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/arm.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6a141e5..83e5db5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
+ PR target/48126
+ * config/arm/arm.c (arm_output_sync_loop): Move label before barrier.
+
+2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
+
* config/arm/arm.h (TARGET_HAVE_DMB_MCR): MCR Not available in Thumb1.
2011-10-14 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index ad733da..93386f0 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -24217,8 +24217,11 @@ arm_output_sync_loop (emit_f emit,
}
}
- arm_process_output_memory_barrier (emit, NULL);
+ /* Note: label is before barrier so that in cmp failure case we still get
+ a barrier to stop subsequent loads floating upwards past the ldrex
+ PR target/48126. */
arm_output_asm_insn (emit, 1, operands, "%sLSYB%%=:", LOCAL_LABEL_PREFIX);
+ arm_process_output_memory_barrier (emit, NULL);
}
static rtx