(Apply commit
db2eef2 from 'master' branch.)
* src/atomic_ops/sysdeps/gcc/arm.h
(AO_double_compare_and_swap): Specify that LDREXD and STREXD use 2
adjacent registers (thus preventing Clang3.3 from register allocation
failures leading to "registers may not be the same" or
"even register required" GAS errors).
Conflicts:
src/atomic_ops/sysdeps/gcc/arm.h
do {
__asm__ __volatile__("@AO_compare_double_and_swap_double\n"
- " ldrexd %0, [%1]\n" /* get original to r1 & r2 */
+ " ldrexd %0, %H0, [%1]\n" /* get original to r1 & r2 */
: "=&r"(tmp)
: "r"(addr)
: "cc");
if (tmp != old_val)
break;
__asm__ __volatile__(
- " strexd %0, %2, [%3]\n" /* store new one if matched */
+ " strexd %0, %2, %H2, [%3]\n" /* store new one if matched */
: "=&r"(result), "+m"(*addr)
: "r"(new_val), "r"(addr)
: "cc");