|
@@ -253,7 +253,10 @@ extern uint32_t __cmpxchg_32(uint32_t *v, uint32_t test, uint32_t new);
|
|
__typeof__(*(ptr)) __xg_new = (new); \
|
|
__typeof__(*(ptr)) __xg_new = (new); \
|
|
\
|
|
\
|
|
switch (sizeof(__xg_orig)) { \
|
|
switch (sizeof(__xg_orig)) { \
|
|
- case 4: __xg_orig = __cmpxchg_32(__xg_ptr, __xg_test, __xg_new); break; \
|
|
|
|
|
|
+ case 4: __xg_orig = (__force __typeof__(*ptr)) \
|
|
|
|
+ __cmpxchg_32((__force uint32_t *)__xg_ptr, \
|
|
|
|
+ (__force uint32_t)__xg_test, \
|
|
|
|
+ (__force uint32_t)__xg_new); break; \
|
|
default: \
|
|
default: \
|
|
__xg_orig = 0; \
|
|
__xg_orig = 0; \
|
|
asm volatile("break"); \
|
|
asm volatile("break"); \
|