mirror of https://github.com/ARMmbed/mbed-os.git
ARMC5: fix mbed_atomic_impl.h assembly
parent
64575fe586
commit
c799dc3332
|
@ -100,9 +100,10 @@ extern "C" {
|
||||||
// inlining. ARM C 5 is being retired anyway.
|
// inlining. ARM C 5 is being retired anyway.
|
||||||
|
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
|
#pragma diag_suppress 3732
|
||||||
#define DO_MBED_LOCKFREE_EXCHG_ASM(M) \
|
#define DO_MBED_LOCKFREE_EXCHG_ASM(M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
LDREX##M oldValue, [valuePtr] \
|
LDREX##M oldValue, [valuePtr] ; \
|
||||||
STREX##M fail, newValue, [valuePtr] \
|
STREX##M fail, newValue, [valuePtr] \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
@ -133,8 +134,8 @@ extern "C" {
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
#define DO_MBED_LOCKFREE_3OP_ASM(OP, Constants, M) \
|
#define DO_MBED_LOCKFREE_3OP_ASM(OP, Constants, M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
LDREX##M oldValue, [valuePtr] \
|
LDREX##M oldValue, [valuePtr] ; \
|
||||||
OP newValue, oldValue, arg \
|
OP newValue, oldValue, arg ; \
|
||||||
STREX##M fail, newValue, [valuePtr] \
|
STREX##M fail, newValue, [valuePtr] \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
@ -172,9 +173,9 @@ extern "C" {
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
#define DO_MBED_LOCKFREE_2OP_ASM(OP, Constants, M) \
|
#define DO_MBED_LOCKFREE_2OP_ASM(OP, Constants, M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
LDREX##M oldValue, [valuePtr] \
|
LDREX##M oldValue, [valuePtr] ; \
|
||||||
MOV newValue, oldValue \
|
MOV newValue, oldValue ; \
|
||||||
OP newValue, arg \
|
OP newValue, arg ; \
|
||||||
STREX##M fail, newValue, [valuePtr] \
|
STREX##M fail, newValue, [valuePtr] \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
@ -216,8 +217,8 @@ extern "C" {
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
#define DO_MBED_LOCKFREE_CAS_WEAK_ASM(M) \
|
#define DO_MBED_LOCKFREE_CAS_WEAK_ASM(M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
LDREX##M oldValue, [ptr] \
|
LDREX##M oldValue, [ptr] ; \
|
||||||
SUBS fail, oldValue, expectedValue \
|
SUBS fail, oldValue, expectedValue ; \
|
||||||
STREX##M##EQ fail, desiredValue, [ptr] \
|
STREX##M##EQ fail, desiredValue, [ptr] \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
@ -251,10 +252,10 @@ extern "C" {
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
#define DO_MBED_LOCKFREE_CAS_WEAK_ASM(M) \
|
#define DO_MBED_LOCKFREE_CAS_WEAK_ASM(M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
LDREX##M oldValue, [ptr] \
|
LDREX##M oldValue, [ptr] ; \
|
||||||
SUBS fail, oldValue, expectedValue \
|
SUBS fail, oldValue, expectedValue ; \
|
||||||
BNE done \
|
BNE done ; \
|
||||||
STREX##M fail, desiredValue, [ptr] \
|
STREX##M fail, desiredValue, [ptr] ; \
|
||||||
done: \
|
done: \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
@ -298,13 +299,13 @@ done: \
|
||||||
#ifdef __CC_ARM
|
#ifdef __CC_ARM
|
||||||
#define DO_MBED_LOCKFREE_CAS_STRONG_ASM(M) \
|
#define DO_MBED_LOCKFREE_CAS_STRONG_ASM(M) \
|
||||||
__asm { \
|
__asm { \
|
||||||
retry: \
|
retry: ; \
|
||||||
LDREX##M oldValue, [ptr] \
|
LDREX##M oldValue, [ptr] ; \
|
||||||
SUBS fail, oldValue, expectedValue \
|
SUBS fail, oldValue, expectedValue ; \
|
||||||
BNE done \
|
BNE done ; \
|
||||||
STREX##M fail, desiredValue, [ptr] \
|
STREX##M fail, desiredValue, [ptr] ; \
|
||||||
CMP fail, #0 \
|
CMP fail, 0 ; \
|
||||||
BNE retry \
|
BNE retry ; \
|
||||||
done: \
|
done: \
|
||||||
}
|
}
|
||||||
#elif defined __clang__ || defined __GNUC__
|
#elif defined __clang__ || defined __GNUC__
|
||||||
|
|
Loading…
Reference in New Issue