Files
tinycc/lib/atomic.S
2025-07-19 00:30:12 +02:00

2670 lines
71 KiB
ArmAsm

/* ---------------------------------------------- */
/* This file is extracted from `gcc` v15.1.0 `libatomic.a`. */
/* This file is generated by https://github.com/kbkpbot/gen_atomic.git */
/* This file is generated at 2025-06-24 21:37. */
/* This file implements for i386/x86_64/arm/aarch64/riscv:
* __atomic_load_[1,2,4,8]
* __atomic_store_[1,2,4,8]
* __atomic_compare_exchange_[1,2,4,8]
* __atomic_test_and_set_[1,2,4,8]
* atomic_thread_fence
* atomic_signal_fence
* atomic_flag_test_and_set
* atomic_flag_test_and_set_explicit
* atomic_flag_clear
* atomic_flag_clear_explicit
*/
/* SPDX-License-Identifier: GPL-3.0-or-later WITH GCC-exception-3.1
* Copyright (C) 2012-2025 Free Software Foundation, Inc.
*/
#ifdef __leading_underscore
# define _(s) _##s
#else
# define _(s) s
#endif
/* ---------------------------------------------- */
#if defined __i386__
#define endbr32
.text
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
endbr32
mov 0x4(%esp),%eax
movzbl (%eax),%eax
ret
.size _(__atomic_load_1), .-_(__atomic_load_1)
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
endbr32
mov 0x4(%esp),%eax
movzwl (%eax),%eax
ret
.size _(__atomic_load_2), .-_(__atomic_load_2)
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
endbr32
mov 0x4(%esp),%eax
mov (%eax),%eax
ret
.size _(__atomic_load_4), .-_(__atomic_load_4)
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
endbr32
sub $0xc,%esp
mov 0x10(%esp),%eax
fildll (%eax)
fistpll (%esp)
mov (%esp),%eax
mov 0x4(%esp),%edx
add $0xc,%esp
ret
.size _(__atomic_load_8), .-_(__atomic_load_8)
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
endbr32
mov 0x4(%esp),%edx
mov 0x8(%esp),%eax
xchg %al,(%edx)
ret
.size _(__atomic_store_1), .-_(__atomic_store_1)
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
endbr32
mov 0x4(%esp),%edx
mov 0x8(%esp),%eax
xchg %ax,(%edx)
ret
.size _(__atomic_store_2), .-_(__atomic_store_2)
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
endbr32
mov 0x4(%esp),%edx
mov 0x8(%esp),%eax
xchg %eax,(%edx)
ret
.size _(__atomic_store_4), .-_(__atomic_store_4)
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
endbr32
push %ebx
sub $0x8,%esp
mov 0x18(%esp),%ebx
mov 0x14(%esp),%ecx
mov %ecx,(%esp)
mov %ebx,0x4(%esp)
fildll (%esp)
mov 0x10(%esp),%eax
fistpll (%eax)
lock orl $0x0,(%esp)
add $0x8,%esp
pop %ebx
ret
.size _(__atomic_store_8), .-_(__atomic_store_8)
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
endbr32
push %ebx
mov 0xc(%esp),%ecx
mov 0x8(%esp),%edx
movzbl 0x10(%esp),%ebx
movzbl (%ecx),%eax
lock cmpxchg %bl,(%edx)
sete %dl
je .L___atomic_compare_exchange_1_020
mov %al,(%ecx)
.L___atomic_compare_exchange_1_020:
mov %edx,%eax
pop %ebx
ret
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
endbr32
push %ebx
mov 0xc(%esp),%ecx
mov 0x8(%esp),%edx
movzwl 0x10(%esp),%ebx
movzwl (%ecx),%eax
lock cmpxchg %bx,(%edx)
sete %dl
je .L___atomic_compare_exchange_2_022
mov %ax,(%ecx)
.L___atomic_compare_exchange_2_022:
mov %edx,%eax
pop %ebx
ret
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
endbr32
push %ebx
mov 0xc(%esp),%ecx
mov 0x8(%esp),%edx
mov 0x10(%esp),%ebx
mov (%ecx),%eax
lock cmpxchg %ebx,(%edx)
sete %dl
je .L___atomic_compare_exchange_4_01e
mov %eax,(%ecx)
.L___atomic_compare_exchange_4_01e:
mov %edx,%eax
pop %ebx
ret
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
endbr32
push %edi
push %esi
push %ebx
mov 0x14(%esp),%esi
mov 0x1c(%esp),%ecx
mov 0x10(%esp),%edi
mov (%esi),%eax
mov 0x4(%esi),%edx
mov 0x18(%esp),%ebx
lock cmpxchg8b (%edi)
sete %cl
je .L___atomic_compare_exchange_8_02a
mov %eax,(%esi)
mov %edx,0x4(%esi)
.L___atomic_compare_exchange_8_02a:
pop %ebx
mov %ecx,%eax
pop %esi
pop %edi
ret
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
endbr32
lock orl $0x0,(%esp)
ret
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
endbr32
ret
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
endbr32
mov 0x4(%esp),%edx
mov $0x1,%eax
xchg %al,(%edx)
ret
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
endbr32
mov 0x4(%esp),%edx
xor %eax,%eax
xchg %al,(%edx)
ret
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
endbr32
mov 0x4(%esp),%edx
xor %eax,%eax
xchg %al,(%edx)
ret
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif //__i386__
/* ---------------------------------------------- */
#if defined __x86_64__ && !defined _WIN32
#define endbr64
.text
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
endbr64
movzbl (%rdi),%eax
ret
.size _(__atomic_load_1), .-_(__atomic_load_1)
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
endbr64
movzwl (%rdi),%eax
ret
.size _(__atomic_load_2), .-_(__atomic_load_2)
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
endbr64
mov (%rdi),%eax
ret
.size _(__atomic_load_4), .-_(__atomic_load_4)
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
endbr64
mov (%rdi),%rax
ret
.size _(__atomic_load_8), .-_(__atomic_load_8)
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
endbr64
xchg %sil,(%rdi)
ret
.size _(__atomic_store_1), .-_(__atomic_store_1)
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
endbr64
xchg %si,(%rdi)
ret
.size _(__atomic_store_2), .-_(__atomic_store_2)
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
endbr64
xchg %esi,(%rdi)
ret
.size _(__atomic_store_4), .-_(__atomic_store_4)
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
endbr64
xchg %rsi,(%rdi)
ret
.size _(__atomic_store_8), .-_(__atomic_store_8)
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
endbr64
movzbl (%rsi),%eax
lock cmpxchg %dl,(%rdi)
sete %dl
je .L___atomic_compare_exchange_1_012
mov %al,(%rsi)
.L___atomic_compare_exchange_1_012:
mov %edx,%eax
ret
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
endbr64
movzwl (%rsi),%eax
lock cmpxchg %dx,(%rdi)
sete %dl
je .L___atomic_compare_exchange_2_014
mov %ax,(%rsi)
.L___atomic_compare_exchange_2_014:
mov %edx,%eax
ret
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
endbr64
mov (%rsi),%eax
lock cmpxchg %edx,(%rdi)
sete %dl
je .L___atomic_compare_exchange_4_011
mov %eax,(%rsi)
.L___atomic_compare_exchange_4_011:
mov %edx,%eax
ret
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
endbr64
mov (%rsi),%rax
lock cmpxchg %rdx,(%rdi)
sete %dl
je .L___atomic_compare_exchange_8_014
mov %rax,(%rsi)
.L___atomic_compare_exchange_8_014:
mov %edx,%eax
ret
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
endbr64
lock orq $0x0,(%rsp)
ret
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
endbr64
ret
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
endbr64
mov $0x1,%eax
xchg %al,(%rdi)
ret
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
endbr64
xor %eax,%eax
xchg %al,(%rdi)
ret
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
endbr64
xor %eax,%eax
xchg %al,(%rdi)
ret
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif //__x86_64__ && !_WIN32
/* ---------------------------------------------- */
#if defined __x86_64__ && defined _WIN32
.text
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
movzbl (%rcx),%eax
ret
.size _(__atomic_load_1), .-_(__atomic_load_1)
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
movzwl (%rcx),%eax
ret
.size _(__atomic_load_2), .-_(__atomic_load_2)
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
mov (%rcx),%eax
ret
.size _(__atomic_load_4), .-_(__atomic_load_4)
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
mov (%rcx),%rax
ret
.size _(__atomic_load_8), .-_(__atomic_load_8)
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
xchg %dl,(%rcx)
ret
.size _(__atomic_store_1), .-_(__atomic_store_1)
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
xchg %dx,(%rcx)
ret
.size _(__atomic_store_2), .-_(__atomic_store_2)
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
xchg %edx,(%rcx)
ret
.size _(__atomic_store_4), .-_(__atomic_store_4)
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
xchg %rdx,(%rcx)
ret
.size _(__atomic_store_8), .-_(__atomic_store_8)
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
movzbl (%rdx),%eax
lock cmpxchg %r8b,(%rcx)
sete %cl
je .L___atomic_compare_exchange_1_00f
mov %al,(%rdx)
.L___atomic_compare_exchange_1_00f:
mov %ecx,%eax
ret
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
movzwl (%rdx),%eax
lock cmpxchg %r8w,(%rcx)
sete %cl
je .L___atomic_compare_exchange_2_011
mov %ax,(%rdx)
.L___atomic_compare_exchange_2_011:
mov %ecx,%eax
ret
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
mov (%rdx),%eax
lock cmpxchg %r8d,(%rcx)
sete %cl
je .L___atomic_compare_exchange_4_00e
mov %eax,(%rdx)
.L___atomic_compare_exchange_4_00e:
mov %ecx,%eax
ret
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
mov (%rdx),%rax
lock cmpxchg %r8,(%rcx)
sete %cl
je .L___atomic_compare_exchange_8_010
mov %rax,(%rdx)
.L___atomic_compare_exchange_8_010:
mov %ecx,%eax
ret
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
lock orq $0x0,(%rsp)
ret
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
ret
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
mov $0x1,%eax
xchg %al,(%rcx)
ret
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
xor %eax,%eax
xchg %al,(%rcx)
ret
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
xor %eax,%eax
xchg %al,(%rcx)
ret
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif //__x86_64__ && _WIN32
/* ---------------------------------------------- */
#if defined __arm__
.text
#ifndef __TINYC__
.arch armv6k
.syntax unified
#endif
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
#ifdef __TINYC__
.int 0xe3510000
.int 0x1a000002
.int 0xe5d00000
.int 0xe6ef0070
.int 0xe12fff1e
.int 0xee070fba
.int 0xe5d00000
.int 0xee070fba
.int 0xe6ef0070
.int 0xe12fff1e
#else
cmp r1, #0
bne .L___atomic_load_1_014
ldrb r0, [r0]
uxtb r0, r0
bx lr
.L___atomic_load_1_014:
mcr p15, #0, r0, c7, c10, #5
ldrb r0, [r0]
mcr p15, #0, r0, c7, c10, #5
uxtb r0, r0
bx lr
.size _(__atomic_load_1), .-_(__atomic_load_1)
#endif
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
#ifdef __TINYC__
.int 0xe3510000
.int 0x1a000002
.int 0xe1d000b0
.int 0xe6ff0070
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1d000b0
.int 0xee070fba
.int 0xe6ff0070
.int 0xe12fff1e
#else
cmp r1, #0
bne .L___atomic_load_2_03c
ldrh r0, [r0]
uxth r0, r0
bx lr
.L___atomic_load_2_03c:
mcr p15, #0, r0, c7, c10, #5
ldrh r0, [r0]
mcr p15, #0, r0, c7, c10, #5
uxth r0, r0
bx lr
.size _(__atomic_load_2), .-_(__atomic_load_2)
#endif
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
#ifdef __TINYC__
.int 0xe3510000
.int 0x1a000001
.int 0xe5900000
.int 0xe12fff1e
.int 0xee070fba
.int 0xe5900000
.int 0xee070fba
.int 0xe12fff1e
#else
cmp r1, #0
bne .L___atomic_load_4_060
ldr r0, [r0]
bx lr
.L___atomic_load_4_060:
mcr p15, #0, r0, c7, c10, #5
ldr r0, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_load_4), .-_(__atomic_load_4)
#endif
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
#ifdef __TINYC__
.int 0xe3510000
.int 0x1a000001
.int 0xe1b00f9f
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1b00f9f
.int 0xee070fba
.int 0xe12fff1e
#else
cmp r1, #0
bne .L___atomic_load_8_080
ldrexd r0, [r0]
bx lr
.L___atomic_load_8_080:
mcr p15, #0, r0, c7, c10, #5
ldrexd r0, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_load_8), .-_(__atomic_load_8)
#endif
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
#ifdef __TINYC__
.int 0xe3520000
.int 0x1a000001
.int 0xe5c01000
.int 0xe12fff1e
.int 0xee070fba
.int 0xe5c01000
.int 0xee070fba
.int 0xe12fff1e
#else
cmp r2, #0
bne .L___atomic_store_1_0a0
strb r1, [r0]
bx lr
.L___atomic_store_1_0a0:
mcr p15, #0, r0, c7, c10, #5
strb r1, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_store_1), .-_(__atomic_store_1)
#endif
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
#ifdef __TINYC__
.int 0xe3520000
.int 0x1a000001
.int 0xe1c010b0
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1c010b0
.int 0xee070fba
.int 0xe12fff1e
#else
cmp r2, #0
bne .L___atomic_store_2_0c0
strh r1, [r0]
bx lr
.L___atomic_store_2_0c0:
mcr p15, #0, r0, c7, c10, #5
strh r1, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_store_2), .-_(__atomic_store_2)
#endif
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
#ifdef __TINYC__
.int 0xe3520000
.int 0x1a000001
.int 0xe5801000
.int 0xe12fff1e
.int 0xee070fba
.int 0xe5801000
.int 0xee070fba
.int 0xe12fff1e
#else
cmp r2, #0
bne .L___atomic_store_4_0e0
str r1, [r0]
bx lr
.L___atomic_store_4_0e0:
mcr p15, #0, r0, c7, c10, #5
str r1, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_store_4), .-_(__atomic_store_4)
#endif
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
#ifdef __TINYC__
.int 0xe92d0030
.int 0xe1a04002
.int 0xe59d1008
.int 0xe1a05003
.int 0xe3510000
.int 0x1a000005
.int 0xe1b02f9f
.int 0xe1a01f94
.int 0xe3510000
.int 0x1afffffb
.int 0xe8bd0030
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1b02f9f
.int 0xe1a01f94
.int 0xe3510000
.int 0x1afffffb
.int 0xee070fba
.int 0xe8bd0030
.int 0xe12fff1e
#else
push {r4, r5}
mov r4, r2
ldr r1, [sp, #8]
mov r5, r3
cmp r1, #0
bne .L___atomic_store_8_120
.L___atomic_store_8_108:
ldrexd r2, [r0]
strexd r1, r4, [r0]
cmp r1, #0
bne .L___atomic_store_8_108
pop {r4, r5}
bx lr
.L___atomic_store_8_120:
mcr p15, #0, r0, c7, c10, #5
.L___atomic_store_8_124:
ldrexd r2, [r0]
strexd r1, r4, [r0]
cmp r1, #0
bne .L___atomic_store_8_124
mcr p15, #0, r0, c7, c10, #5
pop {r4, r5}
bx lr
.size _(__atomic_store_8), .-_(__atomic_store_8)
#endif
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
#ifdef __TINYC__
.int 0xe52de004
.int 0xe3530000
.int 0x1a00000a
.int 0xe5d13000
.int 0xe1d0cf9f
.int 0xe15c0003
.int 0x1a000002
.int 0xe1c0ef92
.int 0xe35e0000
.int 0x1afffff9
.int 0x03a00001
.int 0x13a00000
.int 0x15c1c000
.int 0xe49df004
.int 0xe5d13000
.int 0xee070fba
.int 0xe1d0cf9f
.int 0xe15c0003
.int 0x1afffff6
.int 0xe1c0ef92
.int 0xe35e0000
.int 0x1afffff9
.int 0xee070fba
.int 0xeafffff1
#else
push {lr} @ (str lr, [sp, #-4]!)
cmp r3, #0
bne .L___atomic_compare_exchange_1_178
ldrb r3, [r1]
.L___atomic_compare_exchange_1_150:
ldrexb ip, [r0]
cmp ip, r3
bne .L___atomic_compare_exchange_1_168
strexb lr, r2, [r0]
cmp lr, #0
bne .L___atomic_compare_exchange_1_150
.L___atomic_compare_exchange_1_168:
moveq r0, #1
movne r0, #0
strbne ip, [r1]
pop {pc} @ (ldr pc, [sp], #4)
.L___atomic_compare_exchange_1_178:
ldrb r3, [r1]
mcr p15, #0, r0, c7, c10, #5
.L___atomic_compare_exchange_1_180:
ldrexb ip, [r0]
cmp ip, r3
bne .L___atomic_compare_exchange_1_168
strexb lr, r2, [r0]
cmp lr, #0
bne .L___atomic_compare_exchange_1_180
mcr p15, #0, r0, c7, c10, #5
b .L___atomic_compare_exchange_1_168
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
#endif
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
#ifdef __TINYC__
.int 0xe52de004
.int 0xe3530000
.int 0x1a00000a
.int 0xe1d130b0
.int 0xe1f0cf9f
.int 0xe15c0003
.int 0x1a000002
.int 0xe1e0ef92
.int 0xe35e0000
.int 0x1afffff9
.int 0x03a00001
.int 0x13a00000
.int 0x11c1c0b0
.int 0xe49df004
.int 0xe1d130b0
.int 0xee070fba
.int 0xe1f0cf9f
.int 0xe15c0003
.int 0x1afffff6
.int 0xe1e0ef92
.int 0xe35e0000
.int 0x1afffff9
.int 0xee070fba
.int 0xeafffff1
#else
push {lr} @ (str lr, [sp, #-4]!)
cmp r3, #0
bne .L___atomic_compare_exchange_2_1d8
ldrh r3, [r1]
.L___atomic_compare_exchange_2_1b0:
ldrexh ip, [r0]
cmp ip, r3
bne .L___atomic_compare_exchange_2_1c8
strexh lr, r2, [r0]
cmp lr, #0
bne .L___atomic_compare_exchange_2_1b0
.L___atomic_compare_exchange_2_1c8:
moveq r0, #1
movne r0, #0
strhne ip, [r1]
pop {pc} @ (ldr pc, [sp], #4)
.L___atomic_compare_exchange_2_1d8:
ldrh r3, [r1]
mcr p15, #0, r0, c7, c10, #5
.L___atomic_compare_exchange_2_1e0:
ldrexh ip, [r0]
cmp ip, r3
bne .L___atomic_compare_exchange_2_1c8
strexh lr, r2, [r0]
cmp lr, #0
bne .L___atomic_compare_exchange_2_1e0
mcr p15, #0, r0, c7, c10, #5
b .L___atomic_compare_exchange_2_1c8
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
#endif
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
#ifdef __TINYC__
.int 0xe52d4004
.int 0xe3530000
.int 0x1a00000b
.int 0xe5913000
.int 0xe1904f9f
.int 0xe1540003
.int 0x1a000002
.int 0xe180cf92
.int 0xe35c0000
.int 0x1afffff9
.int 0x03a00001
.int 0x13a00000
.int 0x15814000
.int 0xe49d4004
.int 0xe12fff1e
.int 0xe5913000
.int 0xee070fba
.int 0xe1904f9f
.int 0xe1540003
.int 0x1afffff5
.int 0xe180cf92
.int 0xe35c0000
.int 0x1afffff9
.int 0xee070fba
.int 0xeafffff0
#else
push {r4} @ (str r4, [sp, #-4]!)
cmp r3, #0
bne .L___atomic_compare_exchange_4_23c
ldr r3, [r1]
.L___atomic_compare_exchange_4_210:
ldrex r4, [r0]
cmp r4, r3
bne .L___atomic_compare_exchange_4_228
strex ip, r2, [r0]
cmp ip, #0
bne .L___atomic_compare_exchange_4_210
.L___atomic_compare_exchange_4_228:
moveq r0, #1
movne r0, #0
strne r4, [r1]
pop {r4} @ (ldr r4, [sp], #4)
bx lr
.L___atomic_compare_exchange_4_23c:
ldr r3, [r1]
mcr p15, #0, r0, c7, c10, #5
.L___atomic_compare_exchange_4_244:
ldrex r4, [r0]
cmp r4, r3
bne .L___atomic_compare_exchange_4_228
strex ip, r2, [r0]
cmp ip, #0
bne .L___atomic_compare_exchange_4_244
mcr p15, #0, r0, c7, c10, #5
b .L___atomic_compare_exchange_4_228
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
#endif
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
#ifdef __TINYC__
.int 0xe92d00f0
.int 0xe1a05003
.int 0xe59d3010
.int 0xe1a04002
.int 0xe3530000
.int 0x1a00000c
.int 0xe1c120d0
.int 0xe1b06f9f
.int 0xe1570003
.int 0x01560002
.int 0x1a000002
.int 0xe1a0cf94
.int 0xe35c0000
.int 0x1afffff8
.int 0x03a00001
.int 0x13a00000
.int 0x11c160f0
.int 0xe8bd00f0
.int 0xe12fff1e
.int 0xe1c120d0
.int 0xee070fba
.int 0xe1b06f9f
.int 0xe1570003
.int 0x01560002
.int 0x1afffff4
.int 0xe1a0cf94
.int 0xe35c0000
.int 0x1afffff8
.int 0xee070fba
.int 0xeaffffef
#else
push {r4, r5, r6, r7}
mov r5, r3
ldr r3, [sp, #16]
mov r4, r2
cmp r3, #0
bne .L___atomic_compare_exchange_8_2b0
ldrd r2, [r1]
.L___atomic_compare_exchange_8_280:
ldrexd r6, [r0]
cmp r7, r3
cmpeq r6, r2
bne .L___atomic_compare_exchange_8_29c
strexd ip, r4, [r0]
cmp ip, #0
bne .L___atomic_compare_exchange_8_280
.L___atomic_compare_exchange_8_29c:
moveq r0, #1
movne r0, #0
strdne r6, [r1]
pop {r4, r5, r6, r7}
bx lr
.L___atomic_compare_exchange_8_2b0:
ldrd r2, [r1]
mcr p15, #0, r0, c7, c10, #5
.L___atomic_compare_exchange_8_2b8:
ldrexd r6, [r0]
cmp r7, r3
cmpeq r6, r2
bne .L___atomic_compare_exchange_8_29c
strexd ip, r4, [r0]
cmp ip, #0
bne .L___atomic_compare_exchange_8_2b8
mcr p15, #0, r0, c7, c10, #5
b .L___atomic_compare_exchange_8_29c
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
#endif
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xe3510000
.int 0x1a000005
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
cmp r1, #0
bne .L___atomic_test_and_set_1_300
.L___atomic_test_and_set_1_2e8:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_1_2e8
uxtb r0, r3
bx lr
.L___atomic_test_and_set_1_300:
mcr p15, #0, r0, c7, c10, #5
.L___atomic_test_and_set_1_304:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_1_304
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
#endif
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xe3510000
.int 0x1a000005
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
cmp r1, #0
bne .L___atomic_test_and_set_2_344
.L___atomic_test_and_set_2_32c:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_2_32c
uxtb r0, r3
bx lr
.L___atomic_test_and_set_2_344:
mcr p15, #0, r0, c7, c10, #5
.L___atomic_test_and_set_2_348:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_2_348
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
#endif
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xe3510000
.int 0x1a000005
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
cmp r1, #0
bne .L___atomic_test_and_set_4_388
.L___atomic_test_and_set_4_370:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_4_370
uxtb r0, r3
bx lr
.L___atomic_test_and_set_4_388:
mcr p15, #0, r0, c7, c10, #5
.L___atomic_test_and_set_4_38c:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_4_38c
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
#endif
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xe3510000
.int 0x1a000005
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xe12fff1e
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
cmp r1, #0
bne .L___atomic_test_and_set_8_3cc
.L___atomic_test_and_set_8_3b4:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_8_3b4
uxtb r0, r3
bx lr
.L___atomic_test_and_set_8_3cc:
mcr p15, #0, r0, c7, c10, #5
.L___atomic_test_and_set_8_3d0:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L___atomic_test_and_set_8_3d0
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
#endif
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
#ifdef __TINYC__
.int 0xee070fba
.int 0xe12fff1e
#else
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
#endif
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
#ifdef __TINYC__
.int 0xe12fff1e
#else
bx lr
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
#endif
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
mcr p15, #0, r0, c7, c10, #5
.L_atomic_flag_test_and_set_400:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L_atomic_flag_test_and_set_400
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
#endif
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
#ifdef __TINYC__
.int 0xe3a02001
.int 0xee070fba
.int 0xe1d03f9f
.int 0xe1c01f92
.int 0xe3510000
.int 0x1afffffb
.int 0xe6ef0073
.int 0xee070fba
.int 0xe12fff1e
#else
mov r2, #1
mcr p15, #0, r0, c7, c10, #5
.L_atomic_flag_test_and_set_explicit_424:
ldrexb r3, [r0]
strexb r1, r2, [r0]
cmp r1, #0
bne .L_atomic_flag_test_and_set_explicit_424
uxtb r0, r3
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
#endif
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
#ifdef __TINYC__
.int 0xe3b03000
.int 0xee070fba
.int 0xe5c03000
.int 0xee070fba
.int 0xe12fff1e
#else
movs r3, #0
mcr p15, #0, r0, c7, c10, #5
strb r3, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
#endif
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
#ifdef __TINYC__
.int 0xe3b03000
.int 0xee070fba
.int 0xe5c03000
.int 0xee070fba
.int 0xe12fff1e
#else
movs r3, #0
mcr p15, #0, r0, c7, c10, #5
strb r3, [r0]
mcr p15, #0, r0, c7, c10, #5
bx lr
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif
#endif //__arm__
/* ---------------------------------------------- */
#if defined __aarch64__
.text
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
#ifdef __TINYC__
.int 0x35000081
.int 0x39400000
.int 0x12001c00
.int 0xd65f03c0
.int 0x08dffc00
.int 0x12001c00
.int 0xd65f03c0
#else
cbnz w1, .L___atomic_load_1_010
ldrb w0, [x0]
and w0, w0, #0xff
ret
.L___atomic_load_1_010:
ldarb w0, [x0]
and w0, w0, #0xff
ret
.size _(__atomic_load_1), .-_(__atomic_load_1)
#endif
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
#ifdef __TINYC__
.int 0x35000081
.int 0x79400000
.int 0x12003c00
.int 0xd65f03c0
.int 0x48dffc00
.int 0x12003c00
.int 0xd65f03c0
#else
cbnz w1, .L___atomic_load_2_010
ldrh w0, [x0]
and w0, w0, #0xffff
ret
.L___atomic_load_2_010:
ldarh w0, [x0]
and w0, w0, #0xffff
ret
.size _(__atomic_load_2), .-_(__atomic_load_2)
#endif
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
#ifdef __TINYC__
.int 0x35000061
.int 0xb9400000
.int 0xd65f03c0
.int 0x88dffc00
.int 0xd65f03c0
#else
cbnz w1, .L___atomic_load_4_00c
ldr w0, [x0]
ret
.L___atomic_load_4_00c:
ldar w0, [x0]
ret
.size _(__atomic_load_4), .-_(__atomic_load_4)
#endif
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
#ifdef __TINYC__
.int 0x35000061
.int 0xf9400000
.int 0xd65f03c0
.int 0xc8dffc00
.int 0xd65f03c0
#else
cbnz w1, .L___atomic_load_8_00c
ldr x0, [x0]
ret
.L___atomic_load_8_00c:
ldar x0, [x0]
ret
.size _(__atomic_load_8), .-_(__atomic_load_8)
#endif
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
#ifdef __TINYC__
.int 0x12001c21
.int 0x35000062
.int 0x39000001
.int 0xd65f03c0
.int 0x089ffc01
.int 0xd65f03c0
#else
and w1, w1, #0xff
cbnz w2, .L___atomic_store_1_010
strb w1, [x0]
ret
.L___atomic_store_1_010:
stlrb w1, [x0]
ret
.size _(__atomic_store_1), .-_(__atomic_store_1)
#endif
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
#ifdef __TINYC__
.int 0x12003c21
.int 0x35000062
.int 0x79000001
.int 0xd65f03c0
.int 0x489ffc01
.int 0xd65f03c0
#else
and w1, w1, #0xffff
cbnz w2, .L___atomic_store_2_010
strh w1, [x0]
ret
.L___atomic_store_2_010:
stlrh w1, [x0]
ret
.size _(__atomic_store_2), .-_(__atomic_store_2)
#endif
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
#ifdef __TINYC__
.int 0x35000062
.int 0xb9000001
.int 0xd65f03c0
.int 0x889ffc01
.int 0xd65f03c0
#else
cbnz w2, .L___atomic_store_4_00c
str w1, [x0]
ret
.L___atomic_store_4_00c:
stlr w1, [x0]
ret
.size _(__atomic_store_4), .-_(__atomic_store_4)
#endif
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
#ifdef __TINYC__
.int 0x35000062
.int 0xf9000001
.int 0xd65f03c0
.int 0xc89ffc01
.int 0xd65f03c0
#else
cbnz w2, .L___atomic_store_8_00c
str x1, [x0]
ret
.L___atomic_store_8_00c:
stlr x1, [x0]
ret
.size _(__atomic_store_8), .-_(__atomic_store_8)
#endif
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
#ifdef __TINYC__
.int 0x12001c42
.int 0x35000143
.int 0x39400023
.int 0x085f7c04
.int 0x6b23009f
.int 0x54000061
.int 0x08057c02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54000141
.int 0xd65f03c0
.int 0x39400023
.int 0x085ffc04
.int 0x6b23009f
.int 0x54000061
.int 0x0805fc02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54ffff00
.int 0x39000024
.int 0xd65f03c0
#else
and w2, w2, #0xff
cbnz w3, .L___atomic_compare_exchange_1_02c
ldrb w3, [x1]
.L___atomic_compare_exchange_1_00c:
ldxrb w4, [x0]
cmp w4, w3, uxtb
b.ne .L___atomic_compare_exchange_1_020
stxrb w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_1_00c
.L___atomic_compare_exchange_1_020:
cset w0, eq // eq = none
b.ne .L___atomic_compare_exchange_1_04c
.L___atomic_compare_exchange_1_028:
ret
.L___atomic_compare_exchange_1_02c:
ldrb w3, [x1]
.L___atomic_compare_exchange_1_030:
ldaxrb w4, [x0]
cmp w4, w3, uxtb
b.ne .L___atomic_compare_exchange_1_044
stlxrb w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_1_030
.L___atomic_compare_exchange_1_044:
cset w0, eq // eq = none
b.eq .L___atomic_compare_exchange_1_028
.L___atomic_compare_exchange_1_04c:
strb w4, [x1]
ret
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
#endif
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
#ifdef __TINYC__
.int 0x12003c42
.int 0x35000143
.int 0x79400023
.int 0x485f7c04
.int 0x6b23209f
.int 0x54000061
.int 0x48057c02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54000141
.int 0xd65f03c0
.int 0x79400023
.int 0x485ffc04
.int 0x6b23209f
.int 0x54000061
.int 0x4805fc02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54ffff00
.int 0x79000024
.int 0xd65f03c0
#else
and w2, w2, #0xffff
cbnz w3, .L___atomic_compare_exchange_2_02c
ldrh w3, [x1]
.L___atomic_compare_exchange_2_00c:
ldxrh w4, [x0]
cmp w4, w3, uxth
b.ne .L___atomic_compare_exchange_2_020
stxrh w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_2_00c
.L___atomic_compare_exchange_2_020:
cset w0, eq // eq = none
b.ne .L___atomic_compare_exchange_2_04c
.L___atomic_compare_exchange_2_028:
ret
.L___atomic_compare_exchange_2_02c:
ldrh w3, [x1]
.L___atomic_compare_exchange_2_030:
ldaxrh w4, [x0]
cmp w4, w3, uxth
b.ne .L___atomic_compare_exchange_2_044
stlxrh w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_2_030
.L___atomic_compare_exchange_2_044:
cset w0, eq // eq = none
b.eq .L___atomic_compare_exchange_2_028
.L___atomic_compare_exchange_2_04c:
strh w4, [x1]
ret
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
#endif
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
#ifdef __TINYC__
.int 0x35000143
.int 0xb9400023
.int 0x885f7c04
.int 0x6b03009f
.int 0x54000061
.int 0x88057c02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54000141
.int 0xd65f03c0
.int 0xb9400023
.int 0x885ffc04
.int 0x6b03009f
.int 0x54000061
.int 0x8805fc02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54ffff00
.int 0xb9000024
.int 0xd65f03c0
#else
cbnz w3, .L___atomic_compare_exchange_4_028
ldr w3, [x1]
.L___atomic_compare_exchange_4_008:
ldxr w4, [x0]
cmp w4, w3
b.ne .L___atomic_compare_exchange_4_01c
stxr w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_4_008
.L___atomic_compare_exchange_4_01c:
cset w0, eq // eq = none
b.ne .L___atomic_compare_exchange_4_048
.L___atomic_compare_exchange_4_024:
ret
.L___atomic_compare_exchange_4_028:
ldr w3, [x1]
.L___atomic_compare_exchange_4_02c:
ldaxr w4, [x0]
cmp w4, w3
b.ne .L___atomic_compare_exchange_4_040
stlxr w5, w2, [x0]
cbnz w5, .L___atomic_compare_exchange_4_02c
.L___atomic_compare_exchange_4_040:
cset w0, eq // eq = none
b.eq .L___atomic_compare_exchange_4_024
.L___atomic_compare_exchange_4_048:
str w4, [x1]
ret
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
#endif
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
#ifdef __TINYC__
.int 0x35000143
.int 0xf9400023
.int 0xc85f7c04
.int 0xeb03009f
.int 0x54000061
.int 0xc8057c02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54000141
.int 0xd65f03c0
.int 0xf9400023
.int 0xc85ffc04
.int 0xeb03009f
.int 0x54000061
.int 0xc805fc02
.int 0x35ffff85
.int 0x1a9f17e0
.int 0x54ffff00
.int 0xf9000024
.int 0xd65f03c0
#else
cbnz w3, .L___atomic_compare_exchange_8_028
ldr x3, [x1]
.L___atomic_compare_exchange_8_008:
ldxr x4, [x0]
cmp x4, x3
b.ne .L___atomic_compare_exchange_8_01c
stxr w5, x2, [x0]
cbnz w5, .L___atomic_compare_exchange_8_008
.L___atomic_compare_exchange_8_01c:
cset w0, eq // eq = none
b.ne .L___atomic_compare_exchange_8_048
.L___atomic_compare_exchange_8_024:
ret
.L___atomic_compare_exchange_8_028:
ldr x3, [x1]
.L___atomic_compare_exchange_8_02c:
ldaxr x4, [x0]
cmp x4, x3
b.ne .L___atomic_compare_exchange_8_040
stlxr w5, x2, [x0]
cbnz w5, .L___atomic_compare_exchange_8_02c
.L___atomic_compare_exchange_8_040:
cset w0, eq // eq = none
b.eq .L___atomic_compare_exchange_8_024
.L___atomic_compare_exchange_8_048:
str x4, [x1]
ret
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
#endif
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
#ifdef __TINYC__
.int 0x52800022
.int 0x350000c1
.int 0x085f7c01
.int 0x08037c02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
.int 0x085ffc01
.int 0x0803fc02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
#else
mov w2, #0x1 // #1
cbnz w1, .L___atomic_test_and_set_1_01c
.L___atomic_test_and_set_1_008:
ldxrb w1, [x0]
stxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_1_008
and w0, w1, #0xff
ret
.L___atomic_test_and_set_1_01c:
ldaxrb w1, [x0]
stlxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_1_01c
and w0, w1, #0xff
ret
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
#endif
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
#ifdef __TINYC__
.int 0x52800022
.int 0x350000c1
.int 0x085f7c01
.int 0x08037c02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
.int 0x085ffc01
.int 0x0803fc02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
#else
mov w2, #0x1 // #1
cbnz w1, .L___atomic_test_and_set_2_01c
.L___atomic_test_and_set_2_008:
ldxrb w1, [x0]
stxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_2_008
and w0, w1, #0xff
ret
.L___atomic_test_and_set_2_01c:
ldaxrb w1, [x0]
stlxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_2_01c
and w0, w1, #0xff
ret
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
#endif
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
#ifdef __TINYC__
.int 0x52800022
.int 0x350000c1
.int 0x085f7c01
.int 0x08037c02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
.int 0x085ffc01
.int 0x0803fc02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
#else
mov w2, #0x1 // #1
cbnz w1, .L___atomic_test_and_set_4_01c
.L___atomic_test_and_set_4_008:
ldxrb w1, [x0]
stxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_4_008
and w0, w1, #0xff
ret
.L___atomic_test_and_set_4_01c:
ldaxrb w1, [x0]
stlxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_4_01c
and w0, w1, #0xff
ret
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
#endif
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
#ifdef __TINYC__
.int 0x52800022
.int 0x350000c1
.int 0x085f7c01
.int 0x08037c02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
.int 0x085ffc01
.int 0x0803fc02
.int 0x35ffffc3
.int 0x12001c20
.int 0xd65f03c0
#else
mov w2, #0x1 // #1
cbnz w1, .L___atomic_test_and_set_8_01c
.L___atomic_test_and_set_8_008:
ldxrb w1, [x0]
stxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_8_008
and w0, w1, #0xff
ret
.L___atomic_test_and_set_8_01c:
ldaxrb w1, [x0]
stlxrb w3, w2, [x0]
cbnz w3, .L___atomic_test_and_set_8_01c
and w0, w1, #0xff
ret
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
#endif
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
#ifdef __TINYC__
.int 0xd5033bbf
.int 0xd65f03c0
#else
dmb ish
ret
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
#endif
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
#ifdef __TINYC__
.int 0xd65f03c0
#else
ret
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
#endif
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
#ifdef __TINYC__
.int 0xaa0003e1
.int 0x52800022
.int 0x085ffc20
.int 0x0803fc22
.int 0x35ffffc3
.int 0xd65f03c0
#else
mov x1, x0
mov w2, #0x1 // #1
.L_atomic_flag_test_and_set_008:
ldaxrb w0, [x1]
stlxrb w3, w2, [x1]
cbnz w3, .L_atomic_flag_test_and_set_008
ret
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
#endif
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
#ifdef __TINYC__
.int 0xaa0003e1
.int 0x52800022
.int 0x085ffc20
.int 0x0803fc22
.int 0x35ffffc3
.int 0xd65f03c0
#else
mov x1, x0
mov w2, #0x1 // #1
.L_atomic_flag_test_and_set_explicit_020:
ldaxrb w0, [x1]
stlxrb w3, w2, [x1]
cbnz w3, .L_atomic_flag_test_and_set_explicit_020
ret
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
#endif
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
#ifdef __TINYC__
.int 0x089ffc1f
.int 0xd65f03c0
#else
stlrb wzr, [x0]
ret
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
#endif
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
#ifdef __TINYC__
.int 0x089ffc1f
.int 0xd65f03c0
#else
stlrb wzr, [x0]
ret
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif
#endif //__aarch64__
/* ---------------------------------------------- */
#if defined __riscv
.text
.global _(__atomic_load_1)
.type _(__atomic_load_1), %function
_(__atomic_load_1):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00054503
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
lbu a0,0(a0)
fence rw,rw
ret
.size _(__atomic_load_1), .-_(__atomic_load_1)
#endif
.global _(__atomic_load_2)
.type _(__atomic_load_2), %function
_(__atomic_load_2):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00055503
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
lhu a0,0(a0)
fence rw,rw
ret
.size _(__atomic_load_2), .-_(__atomic_load_2)
#endif
.global _(__atomic_load_4)
.type _(__atomic_load_4), %function
_(__atomic_load_4):
#ifdef __TINYC__
.int 0x0330000f
.short 0x4108
.int 0x0230000f
.short 0x2501
.short 0x8082
#else
fence rw,rw
lw a0,0(a0)
fence r,rw
sext.w a0,a0
ret
.size _(__atomic_load_4), .-_(__atomic_load_4)
#endif
.global _(__atomic_load_8)
.type _(__atomic_load_8), %function
_(__atomic_load_8):
#ifdef __TINYC__
.int 0x0330000f
.short 0x6108
.int 0x0230000f
.short 0x8082
#else
fence rw,rw
ld a0,0(a0)
fence r,rw
ret
.size _(__atomic_load_8), .-_(__atomic_load_8)
#endif
.global _(__atomic_store_1)
.type _(__atomic_store_1), %function
_(__atomic_store_1):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00b50023
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
sb a1,0(a0)
fence rw,rw
ret
.size _(__atomic_store_1), .-_(__atomic_store_1)
#endif
.global _(__atomic_store_2)
.type _(__atomic_store_2), %function
_(__atomic_store_2):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00b51023
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
sh a1,0(a0)
fence rw,rw
ret
.size _(__atomic_store_2), .-_(__atomic_store_2)
#endif
.global _(__atomic_store_4)
.type _(__atomic_store_4), %function
_(__atomic_store_4):
#ifdef __TINYC__
.int 0x0310000f
.short 0xc10c
.int 0x0330000f
.short 0x8082
#else
fence rw,w
sw a1,0(a0)
fence rw,rw
ret
.size _(__atomic_store_4), .-_(__atomic_store_4)
#endif
.global _(__atomic_store_8)
.type _(__atomic_store_8), %function
_(__atomic_store_8):
#ifdef __TINYC__
.int 0x0310000f
.short 0xe10c
.int 0x0330000f
.short 0x8082
#else
fence rw,w
sd a1,0(a0)
fence rw,rw
ret
.size _(__atomic_store_8), .-_(__atomic_store_8)
#endif
.global _(__atomic_compare_exchange_1)
.type _(__atomic_compare_exchange_1), %function
_(__atomic_compare_exchange_1):
#ifdef __TINYC__
.int 0x0005c683
.int 0x00357793
.int 0x0037979b
.int 0x0ff00713
.int 0x00f7173b
.int 0x00f698bb
.int 0x00f6163b
.short 0x9971
.int 0xfff74313
.int 0x00e8f8b3
.short 0x8e79
.int 0x1605282f
.int 0x00e87e33
.int 0x011e1a63
.int 0x00687e33
.int 0x00ce6e33
.int 0x1bc52e2f
.int 0xfe0e14e3
.int 0x40f8583b
.int 0x0188179b
.int 0x0186969b
.int 0x4187d79b
.int 0x4186d69b
.short 0x9f95
.int 0x0017b513
.short 0xc399
.int 0x01058023
.short 0x8905
.short 0x8082
#else
lbu a3,0(a1)
andi a5,a0,3
slliw a5,a5,0x3
li a4,255
sllw a4,a4,a5
sllw a7,a3,a5
sllw a2,a2,a5
andi a0,a0,-4
not t1,a4
and a7,a7,a4
and a2,a2,a4
.L___atomic_compare_exchange_1_028:
lr.w.aqrl a6,(a0)
and t3,a6,a4
bne t3,a7, .L___atomic_compare_exchange_1_044
and t3,a6,t1
or t3,t3,a2
sc.w.rl t3,t3,(a0)
bnez t3, .L___atomic_compare_exchange_1_028
.L___atomic_compare_exchange_1_044:
sraw a6,a6,a5
slliw a5,a6,0x18
slliw a3,a3,0x18
sraiw a5,a5,0x18
sraiw a3,a3,0x18
subw a5,a5,a3
seqz a0,a5
beqz a5, .L___atomic_compare_exchange_1_064
sb a6,0(a1)
.L___atomic_compare_exchange_1_064:
andi a0,a0,1
ret
.size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
#endif
.global _(__atomic_compare_exchange_2)
.type _(__atomic_compare_exchange_2), %function
_(__atomic_compare_exchange_2):
#ifdef __TINYC__
.int 0x0005d683
.int 0x00357713
.short 0x67c1
.int 0x0037171b
.short 0x37fd
.int 0x00e797bb
.int 0x00e698bb
.int 0x00e6163b
.short 0x9971
.int 0xfff7c313
.int 0x00f8f8b3
.short 0x8e7d
.int 0x1605282f
.int 0x00f87e33
.int 0x011e1a63
.int 0x00687e33
.int 0x00ce6e33
.int 0x1bc52e2f
.int 0xfe0e14e3
.int 0x40e8583b
.int 0x0108179b
.int 0x0106969b
.int 0x4107d79b
.int 0x4106d69b
.short 0x9f95
.int 0x0017b513
.short 0xc399
.int 0x01059023
.short 0x8905
.short 0x8082
#else
lhu a3,0(a1)
andi a4,a0,3
lui a5,0x10
slliw a4,a4,0x3
addiw a5,a5,-1 # ffff <.LASF16+0xfec8>
sllw a5,a5,a4
sllw a7,a3,a4
sllw a2,a2,a4
andi a0,a0,-4
not t1,a5
and a7,a7,a5
and a2,a2,a5
.L___atomic_compare_exchange_2_028:
lr.w.aqrl a6,(a0)
and t3,a6,a5
bne t3,a7, .L___atomic_compare_exchange_2_044
and t3,a6,t1
or t3,t3,a2
sc.w.rl t3,t3,(a0)
bnez t3, .L___atomic_compare_exchange_2_028
.L___atomic_compare_exchange_2_044:
sraw a6,a6,a4
slliw a5,a6,0x10
slliw a3,a3,0x10
sraiw a5,a5,0x10
sraiw a3,a3,0x10
subw a5,a5,a3
seqz a0,a5
beqz a5, .L___atomic_compare_exchange_2_064
sh a6,0(a1)
.L___atomic_compare_exchange_2_064:
andi a0,a0,1
ret
.size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
#endif
.global _(__atomic_compare_exchange_4)
.type _(__atomic_compare_exchange_4), %function
_(__atomic_compare_exchange_4):
#ifdef __TINYC__
.short 0x419c
.int 0x1605272f
.int 0x00f71563
.int 0x1ac526af
.short 0xfaf5
.int 0x40f707bb
.int 0x0017b513
.short 0xc391
.short 0xc198
.short 0x8905
.short 0x8082
#else
lw a5,0(a1)
.L___atomic_compare_exchange_4_002:
lr.w.aqrl a4,(a0)
bne a4,a5, .L___atomic_compare_exchange_4_010
sc.w.rl a3,a2,(a0)
bnez a3, .L___atomic_compare_exchange_4_002
.L___atomic_compare_exchange_4_010:
subw a5,a4,a5
seqz a0,a5
beqz a5, .L___atomic_compare_exchange_4_01c
sw a4,0(a1)
.L___atomic_compare_exchange_4_01c:
andi a0,a0,1
ret
.size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
#endif
.global _(__atomic_compare_exchange_8)
.type _(__atomic_compare_exchange_8), %function
_(__atomic_compare_exchange_8):
#ifdef __TINYC__
.short 0x619c
.int 0x1605372f
.int 0x00f71563
.int 0x1ac536af
.short 0xfaf5
.int 0x40f707b3
.int 0x0017b513
.short 0xc391
.short 0xe198
.short 0x8905
.short 0x8082
#else
ld a5,0(a1)
.L___atomic_compare_exchange_8_002:
lr.d.aqrl a4,(a0)
bne a4,a5, .L___atomic_compare_exchange_8_010
sc.d.rl a3,a2,(a0)
bnez a3, .L___atomic_compare_exchange_8_002
.L___atomic_compare_exchange_8_010:
sub a5,a4,a5
seqz a0,a5
beqz a5, .L___atomic_compare_exchange_8_01c
sd a4,0(a1)
.L___atomic_compare_exchange_8_01c:
andi a0,a0,1
ret
.size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
#endif
.global _(__atomic_test_and_set_1)
.type _(__atomic_test_and_set_1), %function
_(__atomic_test_and_set_1):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
#endif
.global _(__atomic_test_and_set_2)
.type _(__atomic_test_and_set_2), %function
_(__atomic_test_and_set_2):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
#endif
.global _(__atomic_test_and_set_4)
.type _(__atomic_test_and_set_4), %function
_(__atomic_test_and_set_4):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
#endif
.global _(__atomic_test_and_set_8)
.type _(__atomic_test_and_set_8), %function
_(__atomic_test_and_set_8):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
#endif
.global _(atomic_thread_fence)
.type _(atomic_thread_fence), %function
_(atomic_thread_fence):
#ifdef __TINYC__
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
ret
.size _(atomic_thread_fence), .-_(atomic_thread_fence)
#endif
.global _(atomic_signal_fence)
.type _(atomic_signal_fence), %function
_(atomic_signal_fence):
#ifdef __TINYC__
.short 0x8082
#else
ret
.size _(atomic_signal_fence), .-_(atomic_signal_fence)
#endif
.global _(atomic_flag_test_and_set)
.type _(atomic_flag_test_and_set), %function
_(atomic_flag_test_and_set):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
#endif
.global _(atomic_flag_test_and_set_explicit)
.type _(atomic_flag_test_and_set_explicit), %function
_(atomic_flag_test_and_set_explicit):
#ifdef __TINYC__
.int 0x00357793
.int 0x0037979b
.short 0x4685
.short 0x9971
.int 0x00f696bb
.int 0x46d5272f
.int 0x00f7553b
.int 0x0ff57513
.short 0x8082
#else
andi a5,a0,3
slliw a5,a5,0x3
li a3,1
andi a0,a0,-4
sllw a3,a3,a5
amoor.w.aqrl a4,a3,(a0)
srlw a0,a4,a5
zext.b a0,a0
ret
.size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
#endif
.global _(atomic_flag_clear)
.type _(atomic_flag_clear), %function
_(atomic_flag_clear):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00050023
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
sb zero,0(a0)
fence rw,rw
ret
.size _(atomic_flag_clear), .-_(atomic_flag_clear)
#endif
.global _(atomic_flag_clear_explicit)
.type _(atomic_flag_clear_explicit), %function
_(atomic_flag_clear_explicit):
#ifdef __TINYC__
.int 0x0330000f
.int 0x00050023
.int 0x0330000f
.short 0x8082
#else
fence rw,rw
sb zero,0(a0)
fence rw,rw
ret
.size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
#endif
#endif //__riscv