By ramana for Marcus Shawcroft.
authorramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Aug 2010 09:31:14 +0000 (09:31 +0000)
committerramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Aug 2010 09:31:14 +0000 (09:31 +0000)
2010-08-07  Marcus Shawcroft  <marcus.shawcroft@arm.com>

* config/arm/linux-atomic.c (SUBWORD_VAL_CAS): Instantiate with
'unsigned short' and 'unsigned char' instead of 'short' and 'char'.
(SUBWORD_BOOL_CAS): Likewise.
(SUBWORD_SYNC_OP): Likewise.
(SUBWORD_TEST_AND_SET): Likewise.
(FETCH_AND_OP_WORD): Parenthesise INF_OP
(SUBWORD_SYNC_OP): Likewise.
(OP_AND_FETCH_WORD): Likewise.

        * lib/target-supports.exp (check_effective_target_sync_int_long):
        Add arm*-*-linux-gnueabi.
        (check_effective_target_sync_char_short): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162977 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/linux-atomic.c
gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 96970ba..53f24f1 100644 (file)
@@ -1,3 +1,14 @@
+2010-08-07  Marcus Shawcroft  <marcus.shawcroft@arm.com>
+
+       * config/arm/linux-atomic.c (SUBWORD_VAL_CAS): Instantiate with
+       'unsigned short' and 'unsigned char' instead of 'short' and 'char'.
+       (SUBWORD_BOOL_CAS): Likewise.
+       (SUBWORD_SYNC_OP): Likewise.
+       (SUBWORD_TEST_AND_SET): Likewise.
+       (FETCH_AND_OP_WORD): Parenthesise INF_OP
+       (SUBWORD_SYNC_OP): Likewise.
+       (OP_AND_FETCH_WORD): Likewise.
+
 2010-08-07  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
         * config/arm/cortex-a9.md: Rewrite VFP Pipeline description.
index 20ad296..685f16b 100644 (file)
@@ -56,7 +56,7 @@ typedef void (__kernel_dmb_t) (void);
                                                                        \
     do {                                                               \
       tmp = *ptr;                                                      \
-      failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr);    \
+      failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr);  \
     } while (failure != 0);                                            \
                                                                        \
     return tmp;                                                                \
@@ -88,8 +88,8 @@ FETCH_AND_OP_WORD (nand, ~, &)
                                                                        \
     do {                                                               \
       oldval = *wordptr;                                               \
-      newval = ((PFX_OP ((oldval & mask) >> shift)                     \
-                 INF_OP (unsigned int) val) << shift) & mask;          \
+      newval = ((PFX_OP (((oldval & mask) >> shift)                    \
+                        INF_OP (unsigned int) val)) << shift) & mask;  \
       newval |= oldval & ~mask;                                                \
       failure = __kernel_cmpxchg (oldval, newval, wordptr);            \
     } while (failure != 0);                                            \
@@ -97,19 +97,19 @@ FETCH_AND_OP_WORD (nand, ~, &)
     return (RETURN & mask) >> shift;                                   \
   }
 
-SUBWORD_SYNC_OP (add,   , +, short, 2, oldval)
-SUBWORD_SYNC_OP (sub,   , -, short, 2, oldval)
-SUBWORD_SYNC_OP (or,    , |, short, 2, oldval)
-SUBWORD_SYNC_OP (and,   , &, short, 2, oldval)
-SUBWORD_SYNC_OP (xor,   , ^, short, 2, oldval)
-SUBWORD_SYNC_OP (nand, ~, &, short, 2, oldval)
+SUBWORD_SYNC_OP (add,   , +, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (sub,   , -, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (or,    , |, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (and,   , &, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (xor,   , ^, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval)
 
-SUBWORD_SYNC_OP (add,   , +, char, 1, oldval)
-SUBWORD_SYNC_OP (sub,   , -, char, 1, oldval)
-SUBWORD_SYNC_OP (or,    , |, char, 1, oldval)
-SUBWORD_SYNC_OP (and,   , &, char, 1, oldval)
-SUBWORD_SYNC_OP (xor,   , ^, char, 1, oldval)
-SUBWORD_SYNC_OP (nand, ~, &, char, 1, oldval)
+SUBWORD_SYNC_OP (add,   , +, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (sub,   , -, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (or,    , |, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (and,   , &, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (xor,   , ^, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
 
 #define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP)                          \
   int HIDDEN                                                           \
@@ -119,10 +119,10 @@ SUBWORD_SYNC_OP (nand, ~, &, char, 1, oldval)
                                                                        \
     do {                                                               \
       tmp = *ptr;                                                      \
-      failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr);    \
+      failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr);  \
     } while (failure != 0);                                            \
                                                                        \
-    return PFX_OP tmp INF_OP val;                                      \
+    return PFX_OP (tmp INF_OP val);                                    \
   }
 
 OP_AND_FETCH_WORD (add,   , +)
@@ -132,19 +132,19 @@ OP_AND_FETCH_WORD (and,   , &)
 OP_AND_FETCH_WORD (xor,   , ^)
 OP_AND_FETCH_WORD (nand, ~, &)
 
-SUBWORD_SYNC_OP (add,   , +, short, 2, newval)
-SUBWORD_SYNC_OP (sub,   , -, short, 2, newval)
-SUBWORD_SYNC_OP (or,    , |, short, 2, newval)
-SUBWORD_SYNC_OP (and,   , &, short, 2, newval)
-SUBWORD_SYNC_OP (xor,   , ^, short, 2, newval)
-SUBWORD_SYNC_OP (nand, ~, &, short, 2, newval)
+SUBWORD_SYNC_OP (add,   , +, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (sub,   , -, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (or,    , |, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (and,   , &, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (xor,   , ^, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval)
 
-SUBWORD_SYNC_OP (add,   , +, char, 1, newval)
-SUBWORD_SYNC_OP (sub,   , -, char, 1, newval)
-SUBWORD_SYNC_OP (or,    , |, char, 1, newval)
-SUBWORD_SYNC_OP (and,   , &, char, 1, newval)
-SUBWORD_SYNC_OP (xor,   , ^, char, 1, newval)
-SUBWORD_SYNC_OP (nand, ~, &, char, 1, newval)
+SUBWORD_SYNC_OP (add,   , +, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (sub,   , -, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (or,    , |, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (and,   , &, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (xor,   , ^, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval)
 
 int HIDDEN
 __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
@@ -194,8 +194,8 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
       }                                                                        \
   }
 
-SUBWORD_VAL_CAS (short, 2)
-SUBWORD_VAL_CAS (char,  1)
+SUBWORD_VAL_CAS (unsigned short, 2)
+SUBWORD_VAL_CAS (unsigned char,  1)
 
 typedef unsigned char bool;
 
@@ -216,8 +216,8 @@ __sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
     return (oldval == actual_oldval);                                  \
   }
 
-SUBWORD_BOOL_CAS (short, 2)
-SUBWORD_BOOL_CAS (char,  1)
+SUBWORD_BOOL_CAS (unsigned short, 2)
+SUBWORD_BOOL_CAS (unsigned char,  1)
 
 void HIDDEN
 __sync_synchronize (void)
@@ -259,8 +259,8 @@ __sync_lock_test_and_set_4 (int *ptr, int val)
     return (oldval & mask) >> shift;                                   \
   }
 
-SUBWORD_TEST_AND_SET (short, 2)
-SUBWORD_TEST_AND_SET (char,  1)
+SUBWORD_TEST_AND_SET (unsigned short, 2)
+SUBWORD_TEST_AND_SET (unsigned char,  1)
 
 #define SYNC_LOCK_RELEASE(TYPE, WIDTH)                                 \
   void HIDDEN                                                          \
index e39d045..6d58091 100644 (file)
@@ -1,3 +1,9 @@
+2010-08-07  Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+        * lib/target-supports.exp: (check_effective_target_sync_int_long):
+        Add arm*-*-linux-gnueabi.
+        (check_effective_target_sync_char_short): Likewise.
+
 2010-08-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/45159
index b312344..0db6b44 100644 (file)
@@ -3000,6 +3000,7 @@ proc check_effective_target_sync_int_long { } {
             || [istarget i?86-*-*]
             || [istarget x86_64-*-*]
             || [istarget alpha*-*-*] 
+            || [istarget arm*-*-linux-gnueabi] 
             || [istarget bfin*-*linux*]
             || [istarget s390*-*-*] 
             || [istarget powerpc*-*-*]
@@ -3029,6 +3030,7 @@ proc check_effective_target_sync_char_short { } {
             || [istarget i?86-*-*]
             || [istarget x86_64-*-*]
             || [istarget alpha*-*-*] 
+            || [istarget arm*-*-linux-gnueabi] 
             || [istarget s390*-*-*] 
             || [istarget powerpc*-*-*]
             || [istarget sparc64-*-*]