|
@@ -65,6 +65,14 @@ do { \
|
|
do { \
|
|
do { \
|
|
compiletime_assert_atomic_type(*p); \
|
|
compiletime_assert_atomic_type(*p); \
|
|
switch (sizeof(*p)) { \
|
|
switch (sizeof(*p)) { \
|
|
|
|
+ case 1: \
|
|
|
|
+ asm volatile ("stlrb %w1, %0" \
|
|
|
|
+ : "=Q" (*p) : "r" (v) : "memory"); \
|
|
|
|
+ break; \
|
|
|
|
+ case 2: \
|
|
|
|
+ asm volatile ("stlrh %w1, %0" \
|
|
|
|
+ : "=Q" (*p) : "r" (v) : "memory"); \
|
|
|
|
+ break; \
|
|
case 4: \
|
|
case 4: \
|
|
asm volatile ("stlr %w1, %0" \
|
|
asm volatile ("stlr %w1, %0" \
|
|
: "=Q" (*p) : "r" (v) : "memory"); \
|
|
: "=Q" (*p) : "r" (v) : "memory"); \
|
|
@@ -81,6 +89,14 @@ do { \
|
|
typeof(*p) ___p1; \
|
|
typeof(*p) ___p1; \
|
|
compiletime_assert_atomic_type(*p); \
|
|
compiletime_assert_atomic_type(*p); \
|
|
switch (sizeof(*p)) { \
|
|
switch (sizeof(*p)) { \
|
|
|
|
+ case 1: \
|
|
|
|
+ asm volatile ("ldarb %w0, %1" \
|
|
|
|
+ : "=r" (___p1) : "Q" (*p) : "memory"); \
|
|
|
|
+ break; \
|
|
|
|
+ case 2: \
|
|
|
|
+ asm volatile ("ldarh %w0, %1" \
|
|
|
|
+ : "=r" (___p1) : "Q" (*p) : "memory"); \
|
|
|
|
+ break; \
|
|
case 4: \
|
|
case 4: \
|
|
asm volatile ("ldar %w0, %1" \
|
|
asm volatile ("ldar %w0, %1" \
|
|
: "=r" (___p1) : "Q" (*p) : "memory"); \
|
|
: "=r" (___p1) : "Q" (*p) : "memory"); \
|