/* atomic access routines */
+/* There should be possible to generate more optimized code
+ if %0 changed to %U0 and "r" to "rn", but GCC nor assembler
+ wants to switch to aa:8 or aaaa:16 instruction version */
+
#define __CONST_DATA_XOP_BIT(__nr,__pb,__aln) \
case __nr: \
- __asm__ __volatile__ ( __aln " %1,@%2 /*mybit 1*/\n" : \
- "=m" (*__pb) : "i" (__nr), "r" (__pb)); \
+ __asm__ __volatile__ ( __aln " %1,%0 /*mybit 1*/\n" : \
+ "+m" (*__pb) : "i" (__nr), "r" (__pb)); \
break;
#define __xop_bit(nr,v,__aln) \
__CONST_DATA_XOP_BIT(7,__pb,__aln); \
} \
else \
- __asm__ __volatile__ ( __aln " %w1,@%2 /*mybit 2*/\n" : \
- "=m" (*__pb) : "r" (__nr), "r" (__pb)); \
+ __asm__ __volatile__ ( __aln " %w1,%0 /*mybit 2*/\n" : \
+ "+m" (*__pb) : "r" (__nr), "r" (__pb)); \
})
#define set_bit(nr,v) (__xop_bit((nr),(v),"bset"))