2011-06-06 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Mon, 6 Jun 2011 20:28:43 +0000 (20:28 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 25 Jul 2011 12:03:27 +0000 (16:03 +0400)
* src/atomic_ops/sysdeps/gcc/arm.h (AO_THUMB_GO_ARM,
AO_THUMB_RESTORE_MODE): Use single-digit labels (to workaround
a bug in GCC v4.2.1 which reports "garbage following instruction"
otherwise).
* src/atomic_ops/sysdeps/gcc/arm.h (AO_compare_and_swap): Use "IT"
instruction only for Thumb-2 mode.

ChangeLog
src/atomic_ops/sysdeps/gcc/arm.h

index 6dcaf65..e13d570 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,15 @@
 2011-06-06  Ivan Maidanski  <ivmai@mail.ru>
 
        * src/atomic_ops/sysdeps/gcc/arm.h (AO_THUMB_GO_ARM,
+       AO_THUMB_RESTORE_MODE): Use single-digit labels (to workaround
+       a bug in GCC v4.2.1 which reports "garbage following instruction"
+       otherwise).
+       * src/atomic_ops/sysdeps/gcc/arm.h (AO_compare_and_swap): Use "IT"
+       instruction only for Thumb-2 mode.
+
+2011-06-06  Ivan Maidanski  <ivmai@mail.ru>
+
+       * src/atomic_ops/sysdeps/gcc/arm.h (AO_THUMB_GO_ARM,
        AO_THUMB_RESTORE_MODE, AO_THUMB_SWITCH_CLOBBERS): Define as empty
        for Thumb-2 mode.
        * src/atomic_ops/sysdeps/gcc/arm.h (AO_store, AO_test_and_set,
index fbf0717..2d27920 100644 (file)
   /* instructions, so we temporarily switch to ARM mode and go back     */
   /* afterwards (clobbering "r3" register).                             */
 # define AO_THUMB_GO_ARM \
-           "       adr     r3, 101f\n" \
+           "       adr     r3, 4f\n" \
            "       bx      r3\n" \
            "      .align\n" \
            "      .arm\n" \
-           "101:\n"
+           "4:\n"
 # define AO_THUMB_RESTORE_MODE \
-           "       adr     r3, 102f + 1\n" \
+           "       adr     r3, 5f + 1\n" \
            "       bx      r3\n" \
            "       .thumb\n" \
-           "102:\n"
+           "5:\n"
 # define AO_THUMB_SWITCH_CLOBBERS "r3",
 #else
 # define AO_THUMB_GO_ARM /* empty */
@@ -179,7 +179,7 @@ AO_fetch_and_add(volatile AO_t *p, AO_t incr)
     "       bne     1b\n"
     AO_THUMB_RESTORE_MODE
     : "=&r"(result), "=&r"(flag), "=&r"(tmp), "+m"(*p) /* 0..3 */
-    : "r"(incr), "r"(p)                                                             /* 4..5 */
+    : "r"(incr), "r"(p)                                /* 4..5 */
     : AO_THUMB_SWITCH_CLOBBERS "cc");
   return result;
 }
@@ -241,8 +241,8 @@ AO_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val)
     "1:     mov     %0, #2\n"           /* store a flag */
     "       ldrex   %1, [%3]\n"         /* get original */
     "       teq     %1, %4\n"           /* see if match */
-#   ifdef __thumb__
-      "       it      eq\n"             /* for Thumb-2, in fact */
+#   ifdef __thumb2__
+      "       it      eq\n"
 #   endif
     "       strexeq %0, %5, [%3]\n"     /* store new one if matched */
     "       teq     %0, #1\n"