int result; \
\
__asm__ __volatile__( \
- "1: l32i %[tmp], %[addr], 0\n" \
+ "1: l32i %[tmp], %[mem]\n" \
" wsr %[tmp], scompare1\n" \
" " #op " %[result], %[tmp], %[i]\n" \
- " s32c1i %[result], %[addr], 0\n" \
+ " s32c1i %[result], %[mem]\n" \
" bne %[result], %[tmp], 1b\n" \
- : [result] "=&a" (result), [tmp] "=&a" (tmp) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (result), [tmp] "=&a" (tmp), \
+ [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "memory" \
); \
} \
int result; \
\
__asm__ __volatile__( \
- "1: l32i %[tmp], %[addr], 0\n" \
+ "1: l32i %[tmp], %[mem]\n" \
" wsr %[tmp], scompare1\n" \
" " #op " %[result], %[tmp], %[i]\n" \
- " s32c1i %[result], %[addr], 0\n" \
+ " s32c1i %[result], %[mem]\n" \
" bne %[result], %[tmp], 1b\n" \
" " #op " %[result], %[result], %[i]\n" \
- : [result] "=&a" (result), [tmp] "=&a" (tmp) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (result), [tmp] "=&a" (tmp), \
+ [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "memory" \
); \
\
int result; \
\
__asm__ __volatile__( \
- "1: l32i %[tmp], %[addr], 0\n" \
+ "1: l32i %[tmp], %[mem]\n" \
" wsr %[tmp], scompare1\n" \
" " #op " %[result], %[tmp], %[i]\n" \
- " s32c1i %[result], %[addr], 0\n" \
+ " s32c1i %[result], %[mem]\n" \
" bne %[result], %[tmp], 1b\n" \
- : [result] "=&a" (result), [tmp] "=&a" (tmp) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (result), [tmp] "=&a" (tmp), \
+ [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "memory" \
); \
\
\
__asm__ __volatile__( \
" rsil a15, "__stringify(TOPLEVEL)"\n" \
- " l32i %[result], %[addr], 0\n" \
+ " l32i %[result], %[mem]\n" \
" " #op " %[result], %[result], %[i]\n" \
- " s32i %[result], %[addr], 0\n" \
+ " s32i %[result], %[mem]\n" \
" wsr a15, ps\n" \
" rsync\n" \
- : [result] "=&a" (vval) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (vval), [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "a15", "memory" \
); \
} \
\
__asm__ __volatile__( \
" rsil a15,"__stringify(TOPLEVEL)"\n" \
- " l32i %[result], %[addr], 0\n" \
+ " l32i %[result], %[mem]\n" \
" " #op " %[result], %[result], %[i]\n" \
- " s32i %[result], %[addr], 0\n" \
+ " s32i %[result], %[mem]\n" \
" wsr a15, ps\n" \
" rsync\n" \
- : [result] "=&a" (vval) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (vval), [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "a15", "memory" \
); \
\
\
__asm__ __volatile__( \
" rsil a15,"__stringify(TOPLEVEL)"\n" \
- " l32i %[result], %[addr], 0\n" \
+ " l32i %[result], %[mem]\n" \
" " #op " %[tmp], %[result], %[i]\n" \
- " s32i %[tmp], %[addr], 0\n" \
+ " s32i %[tmp], %[mem]\n" \
" wsr a15, ps\n" \
" rsync\n" \
- : [result] "=&a" (vval), [tmp] "=&a" (tmp) \
- : [i] "a" (i), [addr] "a" (v) \
+ : [result] "=&a" (vval), [tmp] "=&a" (tmp), \
+ [mem] "+m" (*v) \
+ : [i] "a" (i) \
: "a15", "memory" \
); \
\