2669 lines · 71.0 KB · Assembly
RawDownload
/* ---------------------------------------------- *//* 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)

Lines 1–500 of 2669.