libgcc/
* 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. From-SVN: r197806
This commit is contained in:
parent
1d42c1ec47
commit
b6b9af2f11
2 changed files with 38 additions and 31 deletions
|
@ -1,3 +1,10 @@
|
|||
2013-04-10 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
* 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-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR other/55274
|
||||
|
|
|
@ -97,19 +97,19 @@ FETCH_AND_OP_WORD (nand, ~, &)
|
|||
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 (and, , &)
|
|||
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 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
|
|||
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 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
|
|||
} \
|
||||
}
|
||||
|
||||
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 @@ __sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
|
|||
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 @@ __sync_lock_test_and_set_4 (int *ptr, int val)
|
|||
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 \
|
||||
|
|
Loading…
Add table
Reference in a new issue