Skip to content

Commit a4882e1

Browse files
authored
[libcpu/aarch64]修改atomic实现
1 parent 635e16a commit a4882e1

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

Diff for: libcpu/aarch64/common/atomic_aarch64.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ rt_atomic_t rt_hw_atomic_flag_test_and_set(volatile rt_atomic_t *ptr)
9090
rt_atomic_t rt_hw_atomic_compare_exchange_strong(volatile rt_atomic_t *ptr, rt_atomic_t *old, rt_atomic_t new)
9191
{
9292
rt_atomic_t tmp, oldval;
93-
9493
__asm__ volatile (
9594
" prfm pstl1strm, %2\n"
9695
"1: ldxr %0, %2\n"
@@ -99,10 +98,15 @@ rt_atomic_t rt_hw_atomic_compare_exchange_strong(volatile rt_atomic_t *ptr, rt_a
9998
" stlxr %w1, %4, %2\n"
10099
" cbnz %w1, 1b\n"
101100
" dmb ish\n"
102-
"2:"
101+
" mov %w1, #1\n"
102+
" b 3f\n"
103+
"2: str %0, [%5]\n"
104+
" mov %w1, #0\n"
105+
"3:"
103106
: "=&r" (oldval), "=&r" (tmp), "+Q" (*ptr)
104-
: "Kr" (*old), "r" (new)
107+
: "Kr" (*old), "r" (new), "r" (old)
105108
: "memory");
106109

107-
return oldval == *old;
110+
return tmp;
108111
}
112+

0 commit comments

Comments
 (0)