Index: libgcc/ChangeLog =================================================================== --- libgcc/ChangeLog (.../tags/gcc_4_7_3_release) (revision 197943) +++ libgcc/ChangeLog (.../branches/gcc-4_7-branch) (revision 197943) @@ -1,3 +1,10 @@ +2013-04-11 Julian Brown + + * config/arm/linux-atomic.c (SUBWORD_SYNC_OP, SUBWORD_VAL_CAS) + (SUBWORD_TEST_AND_SET): Use signed char/short types instead of + unsigned char/unsigned short. + (__sync_val_compare_and_swap_{1,2}): Handle signed argument. + 2013-04-11 Release Manager * GCC 4.7.3 released. Index: libgcc/config/arm/linux-atomic.c =================================================================== --- libgcc/config/arm/linux-atomic.c (.../tags/gcc_4_7_3_release) (revision 197943) +++ libgcc/config/arm/linux-atomic.c (.../branches/gcc-4_7-branch) (revision 197943) @@ -97,19 +97,19 @@ return (RETURN & mask) >> shift; \ } -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, , +, 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 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) +SUBWORD_SYNC_OP (add, , +, signed char, 1, oldval) +SUBWORD_SYNC_OP (sub, , -, signed char, 1, oldval) +SUBWORD_SYNC_OP (or, , |, signed char, 1, oldval) +SUBWORD_SYNC_OP (and, , &, signed char, 1, oldval) +SUBWORD_SYNC_OP (xor, , ^, signed char, 1, oldval) +SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, oldval) #define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \ int HIDDEN \ @@ -132,19 +132,19 @@ OP_AND_FETCH_WORD (xor, , ^) OP_AND_FETCH_WORD (nand, ~, &) -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, , +, 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 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) +SUBWORD_SYNC_OP (add, , +, signed char, 1, newval) +SUBWORD_SYNC_OP (sub, , -, signed char, 1, newval) +SUBWORD_SYNC_OP (or, , |, signed char, 1, newval) +SUBWORD_SYNC_OP (and, , &, signed char, 1, newval) +SUBWORD_SYNC_OP (xor, , ^, signed char, 1, newval) +SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, newval) int HIDDEN __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval) @@ -181,7 +181,7 @@ actual_oldval = *wordptr; \ \ if (__builtin_expect (((actual_oldval & mask) >> shift) != \ - (unsigned int) oldval, 0)) \ + ((unsigned int) oldval & MASK_##WIDTH), 0)) \ return (actual_oldval & mask) >> shift; \ \ actual_newval = (actual_oldval & ~mask) \ @@ -195,8 +195,8 @@ } \ } -SUBWORD_VAL_CAS (unsigned short, 2) -SUBWORD_VAL_CAS (unsigned char, 1) +SUBWORD_VAL_CAS (short, 2) +SUBWORD_VAL_CAS (signed char, 1) typedef unsigned char bool; @@ -217,8 +217,8 @@ return (oldval == actual_oldval); \ } -SUBWORD_BOOL_CAS (unsigned short, 2) -SUBWORD_BOOL_CAS (unsigned char, 1) +SUBWORD_BOOL_CAS (short, 2) +SUBWORD_BOOL_CAS (signed char, 1) void HIDDEN __sync_synchronize (void) @@ -260,8 +260,8 @@ return (oldval & mask) >> shift; \ } -SUBWORD_TEST_AND_SET (unsigned short, 2) -SUBWORD_TEST_AND_SET (unsigned char, 1) +SUBWORD_TEST_AND_SET (short, 2) +SUBWORD_TEST_AND_SET (signed char, 1) #define SYNC_LOCK_RELEASE(TYPE, WIDTH) \ void HIDDEN \ Index: gcc/DATESTAMP =================================================================== --- gcc/DATESTAMP (.../tags/gcc_4_7_3_release) (revision 197943) +++ gcc/DATESTAMP (.../branches/gcc-4_7-branch) (revision 197943) @@ -1 +1 @@ -20130411 +20130413