{ }: 1294: : Thumb 'swp r6, r4, [r3]'
, ?
: , swp . , thumb2 ARM. Cortex swp ldrex/strex.
, , ?
gcc __ARM_ARCH_7__; -mcpu=cortex-a8, -mtune=cortex-a8 -march=armv7-a , , Qt.
. qatomic_arm.h . ARM ( ), qatomic_armv5.h 1 125. - qatomic_armv7.h, qatomic_armv6.h. ldrex/strex, , gcc.
-fast. , OP , ; , .
-armfpa . ./configure -embedded arm --help . configure, , NEON, , , CPU ( NEON armv5, configure).
, , swp ldrex/strex , swp - . . -xplatform qws/linux-am335x-g++, -mcpu , , -D__ARM_ARCH_7__. arm-gcc -mcpu=cortex-a8 -dM -E - < /dev/null, , __ARM_ARCH_7__. , moc , -D__ARM_ARCH_7_.
-mthumb . , -mcpu=cortex-a8 -mthumb , /. -mthumb . -Os. - gcc. -, ++, "C" ; . , , . , , Qt .
1: qatomic_armv5.h , gcc binutils , .
asm volatile("swpb %0,%2,[%3]"
: "=&r"(ret), "=m" (*ptr)
: "r"(newval), "r"(ptr)
: "cc", "memory");
, . , ..
asm volatile("swpb %0,%1,[%2]"
: "=r"(ret)
: "0"(newval), "r"(ptr)
: "memory");
gcc binutils. Qt ; , ret newval, .
[x] swp. , %0 , %3. , %0 %1 , %2 .