History

Update arm and windows atomic functions

I edited the arm thumb code so it works on armv6k. I used the minga64w libatomic.a for windows.

herman ten brugge committed 1 year ago

Commit 854d6c51 parent 0c123631 file · +694 −480Browse files

Unified · Split

lib/atomic.S+694−480
@@ -297,7 +297,7 @@ _(atomic_flag_clear_explicit): · 296 unmodified lines
297#endif //__i386__297#endif //__i386__
298 298
299/* ---------------------------------------------- */299/* ---------------------------------------------- */
300#if defined __x86_64__300#if defined __x86_64__ && !defined TCC_TARGET_PE
301 .text301 .text
302 .align 2302 .align 2
303 303
@@ -508,37 +508,233 @@ _(atomic_flag_clear_explicit): · 204 unmodified lines
508 ret508 ret
509 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)509 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
510 510
511#endif //__x86_64__511#endif //__x86_64__ && !TCC_TARGET_PE
512
513/* ---------------------------------------------- */
514#if defined __x86_64__ && defined TCC_TARGET_PE
515 .text
516 .align 2
517
518 .global _(__atomic_load_1)
519 .type _(__atomic_load_1), %function
520_(__atomic_load_1):
521 movzbl (%rcx),%eax
522 ret
523 .size _(__atomic_load_1), .-_(__atomic_load_1)
524
525 .global _(__atomic_load_2)
526 .type _(__atomic_load_2), %function
527_(__atomic_load_2):
528 movzwl (%rcx),%eax
529 ret
530 .size _(__atomic_load_2), .-_(__atomic_load_2)
531
532 .global _(__atomic_load_4)
533 .type _(__atomic_load_4), %function
534_(__atomic_load_4):
535 mov (%rcx),%eax
536 ret
537 .size _(__atomic_load_4), .-_(__atomic_load_4)
538
539 .global _(__atomic_load_8)
540 .type _(__atomic_load_8), %function
541_(__atomic_load_8):
542 mov (%rcx),%rax
543 ret
544 .size _(__atomic_load_8), .-_(__atomic_load_8)
545
546 .global _(__atomic_store_1)
547 .type _(__atomic_store_1), %function
548_(__atomic_store_1):
549 xchg %dl,(%rcx)
550 ret
551 .size _(__atomic_store_1), .-_(__atomic_store_1)
552
553 .global _(__atomic_store_2)
554 .type _(__atomic_store_2), %function
555_(__atomic_store_2):
556 xchg %dx,(%rcx)
557 ret
558 .size _(__atomic_store_2), .-_(__atomic_store_2)
559
560 .global _(__atomic_store_4)
561 .type _(__atomic_store_4), %function
562_(__atomic_store_4):
563 xchg %edx,(%rcx)
564 ret
565 .size _(__atomic_store_4), .-_(__atomic_store_4)
566
567 .global _(__atomic_store_8)
568 .type _(__atomic_store_8), %function
569_(__atomic_store_8):
570 xchg %rdx,(%rcx)
571 ret
572 .size _(__atomic_store_8), .-_(__atomic_store_8)
573
574 .global _(__atomic_compare_exchange_1)
575 .type _(__atomic_compare_exchange_1), %function
576_(__atomic_compare_exchange_1):
577 movzbl (%rdx),%eax
578 lock cmpxchg %r8b,(%rcx)
579 sete %cl
580 je .L___atomic_compare_exchange_1_00f
581 mov %al,(%rdx)
582.L___atomic_compare_exchange_1_00f:
583 mov %ecx,%eax
584 ret
585 .size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
586
587 .global _(__atomic_compare_exchange_2)
588 .type _(__atomic_compare_exchange_2), %function
589_(__atomic_compare_exchange_2):
590 movzwl (%rdx),%eax
591 lock cmpxchg %r8w,(%rcx)
592 sete %cl
593 je .L___atomic_compare_exchange_2_011
594 mov %ax,(%rdx)
595.L___atomic_compare_exchange_2_011:
596 mov %ecx,%eax
597 ret
598 .size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
599
600 .global _(__atomic_compare_exchange_4)
601 .type _(__atomic_compare_exchange_4), %function
602_(__atomic_compare_exchange_4):
603 mov (%rdx),%eax
604 lock cmpxchg %r8d,(%rcx)
605 sete %cl
606 je .L___atomic_compare_exchange_4_00e
607 mov %eax,(%rdx)
608.L___atomic_compare_exchange_4_00e:
609 mov %ecx,%eax
610 ret
611 .size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
612
613 .global _(__atomic_compare_exchange_8)
614 .type _(__atomic_compare_exchange_8), %function
615_(__atomic_compare_exchange_8):
616 mov (%rdx),%rax
617 lock cmpxchg %r8,(%rcx)
618 sete %cl
619 je .L___atomic_compare_exchange_8_010
620 mov %rax,(%rdx)
621.L___atomic_compare_exchange_8_010:
622 mov %ecx,%eax
623 ret
624 .size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
625
626 .global _(__atomic_test_and_set_1)
627 .type _(__atomic_test_and_set_1), %function
628_(__atomic_test_and_set_1):
629 mov $0x1,%eax
630 xchg %al,(%rcx)
631 ret
632 .size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
633
634 .global _(__atomic_test_and_set_2)
635 .type _(__atomic_test_and_set_2), %function
636_(__atomic_test_and_set_2):
637 mov $0x1,%eax
638 xchg %al,(%rcx)
639 ret
640 .size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
641
642 .global _(__atomic_test_and_set_4)
643 .type _(__atomic_test_and_set_4), %function
644_(__atomic_test_and_set_4):
645 mov $0x1,%eax
646 xchg %al,(%rcx)
647 ret
648 .size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
649
650 .global _(__atomic_test_and_set_8)
651 .type _(__atomic_test_and_set_8), %function
652_(__atomic_test_and_set_8):
653 mov $0x1,%eax
654 xchg %al,(%rcx)
655 ret
656 .size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
657
658 .global _(atomic_thread_fence)
659 .type _(atomic_thread_fence), %function
660_(atomic_thread_fence):
661 lock orq $0x0,(%rsp)
662 ret
663 .size _(atomic_thread_fence), .-_(atomic_thread_fence)
664
665 .global _(atomic_signal_fence)
666 .type _(atomic_signal_fence), %function
667_(atomic_signal_fence):
668 ret
669 .size _(atomic_signal_fence), .-_(atomic_signal_fence)
670
671 .global _(atomic_flag_test_and_set)
672 .type _(atomic_flag_test_and_set), %function
673_(atomic_flag_test_and_set):
674 mov $0x1,%eax
675 xchg %al,(%rcx)
676 ret
677 .size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
678
679 .global _(atomic_flag_test_and_set_explicit)
680 .type _(atomic_flag_test_and_set_explicit), %function
681_(atomic_flag_test_and_set_explicit):
682 mov $0x1,%eax
683 xchg %al,(%rcx)
684 ret
685 .size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
686
687 .global _(atomic_flag_clear)
688 .type _(atomic_flag_clear), %function
689_(atomic_flag_clear):
690 xor %eax,%eax
691 xchg %al,(%rcx)
692 ret
693 .size _(atomic_flag_clear), .-_(atomic_flag_clear)
694
695 .global _(atomic_flag_clear_explicit)
696 .type _(atomic_flag_clear_explicit), %function
697_(atomic_flag_clear_explicit):
698 xor %eax,%eax
699 xchg %al,(%rcx)
700 ret
701 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
702
703#endif //__x86_64__ && TCC_TARGET_PE
512 704
513/* ---------------------------------------------- */705/* ---------------------------------------------- */
514#if defined __arm__706#if defined __arm__
515 .text707 .text
516 .align 2708 .align 2
517 .thumb709#ifndef __TINYC__
710 .arch armv6k
518 .syntax unified711 .syntax unified
712#endif
519 713
520 .global _(__atomic_load_1)714 .global _(__atomic_load_1)
521 .type _(__atomic_load_1), %function715 .type _(__atomic_load_1), %function
522_(__atomic_load_1):716_(__atomic_load_1):
523#ifdef __TINYC__717#ifdef __TINYC__
524 .short 0xb911718 .int 0xe3510000
525 .short 0x7800719 .int 0x1a000002
526 .short 0xb2c0720 .int 0xe5d00000
527 .short 0x4770721 .int 0xe6ef0070
528 .short 0xf3bf722 .int 0xe12fff1e
529 .short 0x7800723 .int 0xee070fba
530 .short 0xf3bf724 .int 0xe5d00000
531 .short 0xb2c0725 .int 0xee070fba
532 .short 0x4770726 .int 0xe6ef0070
533#else727 .int 0xe12fff1e
534 cbnz r1, .L___atomic_load_1_008728#else
535 ldrb r0, [r0, #0]729 cmp r1, #0
730 bne .L___atomic_load_1_014
731 ldrb r0, [r0]
536 uxtb r0, r0732 uxtb r0, r0
537 bx lr733 bx lr
538.L___atomic_load_1_008:734.L___atomic_load_1_014:
539 dmb ish735 mcr p15, #0, r0, c7, c10, #5
540 ldrb r0, [r0, #0]736 ldrb r0, [r0]
541 dmb ish737 mcr p15, #0, r0, c7, c10, #5
542 uxtb r0, r0738 uxtb r0, r0
543 bx lr739 bx lr
544 .size _(__atomic_load_1), .-_(__atomic_load_1)740 .size _(__atomic_load_1), .-_(__atomic_load_1)
@@ -548,24 +744,26 @@ _(__atomic_load_1): · 3 unmodified lines
548 .type _(__atomic_load_2), %function744 .type _(__atomic_load_2), %function
549_(__atomic_load_2):745_(__atomic_load_2):
550#ifdef __TINYC__746#ifdef __TINYC__
551 .short 0xb911747 .int 0xe3510000
552 .short 0x8800748 .int 0x1a000002
553 .short 0xb280749 .int 0xe1d000b0
554 .short 0x4770750 .int 0xe6ff0070
555 .short 0xf3bf751 .int 0xe12fff1e
556 .short 0x8800752 .int 0xee070fba
557 .short 0xf3bf753 .int 0xe1d000b0
558 .short 0xb280754 .int 0xee070fba
559 .short 0x4770755 .int 0xe6ff0070
560#else756 .int 0xe12fff1e
561 cbnz r1, .L___atomic_load_2_008757#else
562 ldrh r0, [r0, #0]758 cmp r1, #0
759 bne .L___atomic_load_2_03c
760 ldrh r0, [r0]
563 uxth r0, r0761 uxth r0, r0
564 bx lr762 bx lr
565.L___atomic_load_2_008:763.L___atomic_load_2_03c:
566 dmb ish764 mcr p15, #0, r0, c7, c10, #5
567 ldrh r0, [r0, #0]765 ldrh r0, [r0]
568 dmb ish766 mcr p15, #0, r0, c7, c10, #5
569 uxth r0, r0767 uxth r0, r0
570 bx lr768 bx lr
571 .size _(__atomic_load_2), .-_(__atomic_load_2)769 .size _(__atomic_load_2), .-_(__atomic_load_2)
@@ -575,21 +773,23 @@ _(__atomic_load_2): · 3 unmodified lines
575 .type _(__atomic_load_4), %function773 .type _(__atomic_load_4), %function
576_(__atomic_load_4):774_(__atomic_load_4):
577#ifdef __TINYC__775#ifdef __TINYC__
578 .short 0xb909776 .int 0xe3510000
579 .short 0x6800777 .int 0x1a000001
580 .short 0x4770778 .int 0xe5900000
581 .short 0xf3bf779 .int 0xe12fff1e
582 .short 0x6800780 .int 0xee070fba
583 .short 0xf3bf781 .int 0xe5900000
584 .short 0x4770782 .int 0xee070fba
783 .int 0xe12fff1e
585#else784#else
586 cbnz r1, .L___atomic_load_4_006785 cmp r1, #0
587 ldr r0, [r0, #0]786 bne .L___atomic_load_4_060
787 ldr r0, [r0]
588 bx lr788 bx lr
589.L___atomic_load_4_006:789.L___atomic_load_4_060:
590 dmb ish790 mcr p15, #0, r0, c7, c10, #5
591 ldr r0, [r0, #0]791 ldr r0, [r0]
592 dmb ish792 mcr p15, #0, r0, c7, c10, #5
593 bx lr793 bx lr
594 .size _(__atomic_load_4), .-_(__atomic_load_4)794 .size _(__atomic_load_4), .-_(__atomic_load_4)
595 795
@@ -598,21 +798,23 @@ _(__atomic_load_4): · 2 unmodified lines
598 .type _(__atomic_load_8), %function798 .type _(__atomic_load_8), %function
599_(__atomic_load_8):799_(__atomic_load_8):
600#ifdef __TINYC__800#ifdef __TINYC__
601 .short 0xb911801 .int 0xe3510000
602 .short 0xe8d0802 .int 0x1a000001
603 .short 0x4770803 .int 0xe1b00f9f
604 .short 0xf3bf804 .int 0xe12fff1e
605 .short 0xe8d0805 .int 0xee070fba
606 .short 0xf3bf806 .int 0xe1b00f9f
607 .short 0x4770807 .int 0xee070fba
808 .int 0xe12fff1e
608#else809#else
609 cbnz r1, .L___atomic_load_8_008810 cmp r1, #0
610 ldrexd r0, r1, [r0]811 bne .L___atomic_load_8_080
812 ldrexd r0, [r0]
611 bx lr813 bx lr
612.L___atomic_load_8_008:814.L___atomic_load_8_080:
613 dmb ish815 mcr p15, #0, r0, c7, c10, #5
614 ldrexd r0, r1, [r0]816 ldrexd r0, [r0]
615 dmb ish817 mcr p15, #0, r0, c7, c10, #5
616 bx lr818 bx lr
617 .size _(__atomic_load_8), .-_(__atomic_load_8)819 .size _(__atomic_load_8), .-_(__atomic_load_8)
618 820
@@ -621,21 +823,23 @@ _(__atomic_load_8): · 2 unmodified lines
621 .type _(__atomic_store_1), %function823 .type _(__atomic_store_1), %function
622_(__atomic_store_1):824_(__atomic_store_1):
623#ifdef __TINYC__825#ifdef __TINYC__
624 .short 0xb90a826 .int 0xe3520000
625 .short 0x7001827 .int 0x1a000001
626 .short 0x4770828 .int 0xe5c01000
627 .short 0xf3bf829 .int 0xe12fff1e
628 .short 0x7001830 .int 0xee070fba
629 .short 0xf3bf831 .int 0xe5c01000
630 .short 0x4770832 .int 0xee070fba
631#else833 .int 0xe12fff1e
632 cbnz r2, .L___atomic_store_1_006834#else
633 strb r1, [r0, #0]835 cmp r2, #0
836 bne .L___atomic_store_1_0a0
837 strb r1, [r0]
634 bx lr838 bx lr
635.L___atomic_store_1_006:839.L___atomic_store_1_0a0:
636 dmb ish840 mcr p15, #0, r0, c7, c10, #5
637 strb r1, [r0, #0]841 strb r1, [r0]
638 dmb ish842 mcr p15, #0, r0, c7, c10, #5
639 bx lr843 bx lr
640 .size _(__atomic_store_1), .-_(__atomic_store_1)844 .size _(__atomic_store_1), .-_(__atomic_store_1)
641 845
@@ -644,21 +848,23 @@ _(__atomic_store_1): · 2 unmodified lines
644 .type _(__atomic_store_2), %function848 .type _(__atomic_store_2), %function
645_(__atomic_store_2):849_(__atomic_store_2):
646#ifdef __TINYC__850#ifdef __TINYC__
647 .short 0xb90a851 .int 0xe3520000
648 .short 0x8001852 .int 0x1a000001
649 .short 0x4770853 .int 0xe1c010b0
650 .short 0xf3bf854 .int 0xe12fff1e
651 .short 0x8001855 .int 0xee070fba
652 .short 0xf3bf856 .int 0xe1c010b0
653 .short 0x4770857 .int 0xee070fba
654#else858 .int 0xe12fff1e
655 cbnz r2, .L___atomic_store_2_006859#else
656 strh r1, [r0, #0]860 cmp r2, #0
861 bne .L___atomic_store_2_0c0
862 strh r1, [r0]
657 bx lr863 bx lr
658.L___atomic_store_2_006:864.L___atomic_store_2_0c0:
659 dmb ish865 mcr p15, #0, r0, c7, c10, #5
660 strh r1, [r0, #0]866 strh r1, [r0]
661 dmb ish867 mcr p15, #0, r0, c7, c10, #5
662 bx lr868 bx lr
663 .size _(__atomic_store_2), .-_(__atomic_store_2)869 .size _(__atomic_store_2), .-_(__atomic_store_2)
664 870
@@ -667,21 +873,23 @@ _(__atomic_store_2): · 2 unmodified lines
667 .type _(__atomic_store_4), %function873 .type _(__atomic_store_4), %function
668_(__atomic_store_4):874_(__atomic_store_4):
669#ifdef __TINYC__875#ifdef __TINYC__
670 .short 0xb90a876 .int 0xe3520000
671 .short 0x6001877 .int 0x1a000001
672 .short 0x4770878 .int 0xe5801000
673 .short 0xf3bf879 .int 0xe12fff1e
674 .short 0x6001880 .int 0xee070fba
675 .short 0xf3bf881 .int 0xe5801000
676 .short 0x4770882 .int 0xee070fba
677#else883 .int 0xe12fff1e
678 cbnz r2, .L___atomic_store_4_006884#else
679 str r1, [r0, #0]885 cmp r2, #0
886 bne .L___atomic_store_4_0e0
887 str r1, [r0]
680 bx lr888 bx lr
681.L___atomic_store_4_006:889.L___atomic_store_4_0e0:
682 dmb ish890 mcr p15, #0, r0, c7, c10, #5
683 str r1, [r0, #0]891 str r1, [r0]
684 dmb ish892 mcr p15, #0, r0, c7, c10, #5
685 bx lr893 bx lr
686 .size _(__atomic_store_4), .-_(__atomic_store_4)894 .size _(__atomic_store_4), .-_(__atomic_store_4)
687 895
@@ -690,46 +898,48 @@ _(__atomic_store_4): · 2 unmodified lines
690 .type _(__atomic_store_8), %function898 .type _(__atomic_store_8), %function
691_(__atomic_store_8):899_(__atomic_store_8):
692#ifdef __TINYC__900#ifdef __TINYC__
693 .short 0xb430901 .int 0xe92d0030
694 .short 0x4614902 .int 0xe1a04002
695 .short 0x9902903 .int 0xe59d1008
696 .short 0x461d904 .int 0xe1a05003
697 .short 0xb939905 .int 0xe3510000
698 .short 0xe8d0906 .int 0x1a000005
699 .short 0xe8c0907 .int 0xe1b02f9f
700 .short 0x2900908 .int 0xe1a01f94
701 .short 0xd1f9909 .int 0xe3510000
702 .short 0xbc30910 .int 0x1afffffb
703 .short 0x4770911 .int 0xe8bd0030
704 .short 0xf3bf912 .int 0xe12fff1e
705 .short 0xe8d0913 .int 0xee070fba
706 .short 0xe8c0914 .int 0xe1b02f9f
707 .short 0x2900915 .int 0xe1a01f94
708 .short 0xd1f9916 .int 0xe3510000
709 .short 0xf3bf917 .int 0x1afffffb
710 .short 0xbc30918 .int 0xee070fba
711 .short 0x4770919 .int 0xe8bd0030
920 .int 0xe12fff1e
712#else921#else
713 push {r4, r5}922 push {r4, r5}
714 mov r4, r2923 mov r4, r2
715 ldr r1, [sp, #8]924 ldr r1, [sp, #8]
716 mov r5, r3925 mov r5, r3
717 cbnz r1, .L___atomic_store_8_01a
718.L___atomic_store_8_00a:
719 ldrexd r2, r3, [r0]
720 strexd r1, r4, r5, [r0]
721 cmp r1, #0926 cmp r1, #0
722 bne.n .L___atomic_store_8_00a927 bne .L___atomic_store_8_120
928.L___atomic_store_8_108:
929 ldrexd r2, [r0]
930 strexd r1, r4, [r0]
931 cmp r1, #0
932 bne .L___atomic_store_8_108
723 pop {r4, r5}933 pop {r4, r5}
724 bx lr934 bx lr
725.L___atomic_store_8_01a:935.L___atomic_store_8_120:
726 dmb ish936 mcr p15, #0, r0, c7, c10, #5
727.L___atomic_store_8_01e:937.L___atomic_store_8_124:
728 ldrexd r2, r3, [r0]938 ldrexd r2, [r0]
729 strexd r1, r4, r5, [r0]939 strexd r1, r4, [r0]
730 cmp r1, #0940 cmp r1, #0
731 bne.n .L___atomic_store_8_01e941 bne .L___atomic_store_8_124
732 dmb ish942 mcr p15, #0, r0, c7, c10, #5
733 pop {r4, r5}943 pop {r4, r5}
734 bx lr944 bx lr
735 .size _(__atomic_store_8), .-_(__atomic_store_8)945 .size _(__atomic_store_8), .-_(__atomic_store_8)
@@ -739,59 +949,59 @@ _(__atomic_store_8): · 3 unmodified lines
739 .type _(__atomic_compare_exchange_1), %function949 .type _(__atomic_compare_exchange_1), %function
740_(__atomic_compare_exchange_1):950_(__atomic_compare_exchange_1):
741#ifdef __TINYC__951#ifdef __TINYC__
742 .short 0xb500952 .int 0xe52de004
743 .short 0xb983953 .int 0xe3530000
744 .short 0x780b954 .int 0x1a00000a
745 .short 0xe8d0955 .int 0xe5d13000
746 .short 0x459c956 .int 0xe1d0cf9f
747 .short 0xd104957 .int 0xe15c0003
748 .short 0xe8c0958 .int 0x1a000002
749 .short 0xf1be959 .int 0xe1c0ef92
750 .short 0xd1f6960 .int 0xe35e0000
751 .short 0xbf0e961 .int 0x1afffff9
752 .short 0x2001962 .int 0x03a00001
753 .short 0x2000963 .int 0x13a00000
754 .short 0xf881964 .int 0x15c1c000
755 .short 0xf85d965 .int 0xe49df004
756 .short 0x780b966 .int 0xe5d13000
757 .short 0xf3bf967 .int 0xee070fba
758 .short 0xe8d0968 .int 0xe1d0cf9f
759 .short 0x459c969 .int 0xe15c0003
760 .short 0xd1f1970 .int 0x1afffff6
761 .short 0xe8c0971 .int 0xe1c0ef92
762 .short 0xf1be972 .int 0xe35e0000
763 .short 0xd1f6973 .int 0x1afffff9
764 .short 0xf3bf974 .int 0xee070fba
765 .short 0xe7e9975 .int 0xeafffff1
766#else976#else
767 push {lr}977 push {lr} @ (str lr, [sp, #-4]!)
768 cbnz r3, .L___atomic_compare_exchange_1_026978 cmp r3, #0
769 ldrb r3, [r1, #0]979 bne .L___atomic_compare_exchange_1_178
770.L___atomic_compare_exchange_1_006:980 ldrb r3, [r1]
981.L___atomic_compare_exchange_1_150:
771 ldrexb ip, [r0]982 ldrexb ip, [r0]
772 cmp ip, r3983 cmp ip, r3
773 bne.n .L___atomic_compare_exchange_1_018984 bne .L___atomic_compare_exchange_1_168
774 strexb lr, r2, [r0]985 strexb lr, r2, [r0]
775 cmp.w lr, #0986 cmp lr, #0
776 bne.n .L___atomic_compare_exchange_1_006987 bne .L___atomic_compare_exchange_1_150
777.L___atomic_compare_exchange_1_018:988.L___atomic_compare_exchange_1_168:
778 itee eq
779 moveq r0, #1989 moveq r0, #1
780 movne r0, #0990 movne r0, #0
781 strbne.w ip, [r1]991 strbne ip, [r1]
782 ldr.w pc, [sp], #4992 pop {pc} @ (ldr pc, [sp], #4)
783.L___atomic_compare_exchange_1_026:993.L___atomic_compare_exchange_1_178:
784 ldrb r3, [r1, #0]994 ldrb r3, [r1]
785 dmb ish995 mcr p15, #0, r0, c7, c10, #5
786.L___atomic_compare_exchange_1_02c:996.L___atomic_compare_exchange_1_180:
787 ldrexb ip, [r0]997 ldrexb ip, [r0]
788 cmp ip, r3998 cmp ip, r3
789 bne.n .L___atomic_compare_exchange_1_018999 bne .L___atomic_compare_exchange_1_168
790 strexb lr, r2, [r0]1000 strexb lr, r2, [r0]
791 cmp.w lr, #01001 cmp lr, #0
792 bne.n .L___atomic_compare_exchange_1_02c1002 bne .L___atomic_compare_exchange_1_180
793 dmb ish1003 mcr p15, #0, r0, c7, c10, #5
794 b.n .L___atomic_compare_exchange_1_0181004 b .L___atomic_compare_exchange_1_168
795 .size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)1005 .size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
796 1006
797#endif1007#endif
@@ -799,59 +1009,59 @@ _(__atomic_compare_exchange_1): · 1 unmodified line
799 .type _(__atomic_compare_exchange_2), %function1009 .type _(__atomic_compare_exchange_2), %function
800_(__atomic_compare_exchange_2):1010_(__atomic_compare_exchange_2):
801#ifdef __TINYC__1011#ifdef __TINYC__
802 .short 0xb5001012 .int 0xe52de004
803 .short 0xb9831013 .int 0xe3530000
804 .short 0x880b1014 .int 0x1a00000a
805 .short 0xe8d01015 .int 0xe1d130b0
806 .short 0x459c1016 .int 0xe1f0cf9f
807 .short 0xd1041017 .int 0xe15c0003
808 .short 0xe8c01018 .int 0x1a000002
809 .short 0xf1be1019 .int 0xe1e0ef92
810 .short 0xd1f61020 .int 0xe35e0000
811 .short 0xbf0e1021 .int 0x1afffff9
812 .short 0x20011022 .int 0x03a00001
813 .short 0x20001023 .int 0x13a00000
814 .short 0xf8a11024 .int 0x11c1c0b0
815 .short 0xf85d1025 .int 0xe49df004
816 .short 0x880b1026 .int 0xe1d130b0
817 .short 0xf3bf1027 .int 0xee070fba
818 .short 0xe8d01028 .int 0xe1f0cf9f
819 .short 0x459c1029 .int 0xe15c0003
820 .short 0xd1f11030 .int 0x1afffff6
821 .short 0xe8c01031 .int 0xe1e0ef92
822 .short 0xf1be1032 .int 0xe35e0000
823 .short 0xd1f61033 .int 0x1afffff9
824 .short 0xf3bf1034 .int 0xee070fba
825 .short 0xe7e91035 .int 0xeafffff1
826#else1036#else
827 push {lr}1037 push {lr} @ (str lr, [sp, #-4]!)
828 cbnz r3, .L___atomic_compare_exchange_2_0261038 cmp r3, #0
829 ldrh r3, [r1, #0]1039 bne .L___atomic_compare_exchange_2_1d8
830.L___atomic_compare_exchange_2_006:1040 ldrh r3, [r1]
1041.L___atomic_compare_exchange_2_1b0:
831 ldrexh ip, [r0]1042 ldrexh ip, [r0]
832 cmp ip, r31043 cmp ip, r3
833 bne.n .L___atomic_compare_exchange_2_0181044 bne .L___atomic_compare_exchange_2_1c8
834 strexh lr, r2, [r0]1045 strexh lr, r2, [r0]
835 cmp.w lr, #01046 cmp lr, #0
836 bne.n .L___atomic_compare_exchange_2_0061047 bne .L___atomic_compare_exchange_2_1b0
837.L___atomic_compare_exchange_2_018:1048.L___atomic_compare_exchange_2_1c8:
838 itee eq
839 moveq r0, #11049 moveq r0, #1
840 movne r0, #01050 movne r0, #0
841 strhne.w ip, [r1]1051 strhne ip, [r1]
842 ldr.w pc, [sp], #41052 pop {pc} @ (ldr pc, [sp], #4)
843.L___atomic_compare_exchange_2_026:1053.L___atomic_compare_exchange_2_1d8:
844 ldrh r3, [r1, #0]1054 ldrh r3, [r1]
845 dmb ish1055 mcr p15, #0, r0, c7, c10, #5
846.L___atomic_compare_exchange_2_02c:1056.L___atomic_compare_exchange_2_1e0:
847 ldrexh ip, [r0]1057 ldrexh ip, [r0]
848 cmp ip, r31058 cmp ip, r3
849 bne.n .L___atomic_compare_exchange_2_0181059 bne .L___atomic_compare_exchange_2_1c8
850 strexh lr, r2, [r0]1060 strexh lr, r2, [r0]
851 cmp.w lr, #01061 cmp lr, #0
852 bne.n .L___atomic_compare_exchange_2_02c1062 bne .L___atomic_compare_exchange_2_1e0
853 dmb ish1063 mcr p15, #0, r0, c7, c10, #5
854 b.n .L___atomic_compare_exchange_2_0181064 b .L___atomic_compare_exchange_2_1c8
855 .size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)1065 .size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
856 1066
857#endif1067#endif
@@ -859,61 +1069,61 @@ _(__atomic_compare_exchange_2): · 1 unmodified line
859 .type _(__atomic_compare_exchange_4), %function1069 .type _(__atomic_compare_exchange_4), %function
860_(__atomic_compare_exchange_4):1070_(__atomic_compare_exchange_4):
861#ifdef __TINYC__1071#ifdef __TINYC__
862 .short 0xb4101072 .int 0xe52d4004
863 .short 0xb9831073 .int 0xe3530000
864 .short 0x680b1074 .int 0x1a00000b
865 .short 0xe8501075 .int 0xe5913000
866 .short 0x429c1076 .int 0xe1904f9f
867 .short 0xd1041077 .int 0xe1540003
868 .short 0xe8401078 .int 0x1a000002
869 .short 0xf1bc1079 .int 0xe180cf92
870 .short 0xd1f61080 .int 0xe35c0000
871 .short 0xbf0e1081 .int 0x1afffff9
872 .short 0x20011082 .int 0x03a00001
873 .short 0x20001083 .int 0x13a00000
874 .short 0x600c1084 .int 0x15814000
875 .short 0xf85d1085 .int 0xe49d4004
876 .short 0x47701086 .int 0xe12fff1e
877 .short 0x680b1087 .int 0xe5913000
878 .short 0xf3bf1088 .int 0xee070fba
879 .short 0xe8501089 .int 0xe1904f9f
880 .short 0x429c1090 .int 0xe1540003
881 .short 0xd1f11091 .int 0x1afffff5
882 .short 0xe8401092 .int 0xe180cf92
883 .short 0xf1bc1093 .int 0xe35c0000
884 .short 0xd1f61094 .int 0x1afffff9
885 .short 0xf3bf1095 .int 0xee070fba
886 .short 0xe7e91096 .int 0xeafffff0
887#else1097#else
888 push {r4}1098 push {r4} @ (str r4, [sp, #-4]!)
889 cbnz r3, .L___atomic_compare_exchange_4_0261099 cmp r3, #0
890 ldr r3, [r1, #0]1100 bne .L___atomic_compare_exchange_4_23c
891.L___atomic_compare_exchange_4_006:1101 ldr r3, [r1]
1102.L___atomic_compare_exchange_4_210:
892 ldrex r4, [r0]1103 ldrex r4, [r0]
893 cmp r4, r31104 cmp r4, r3
894 bne.n .L___atomic_compare_exchange_4_0181105 bne .L___atomic_compare_exchange_4_228
895 strex ip, r2, [r0]1106 strex ip, r2, [r0]
896 cmp.w ip, #01107 cmp ip, #0
897 bne.n .L___atomic_compare_exchange_4_0061108 bne .L___atomic_compare_exchange_4_210
898.L___atomic_compare_exchange_4_018:1109.L___atomic_compare_exchange_4_228:
899 itee eq
900 moveq r0, #11110 moveq r0, #1
901 movne r0, #01111 movne r0, #0
902 strne r4, [r1, #0]1112 strne r4, [r1]
903 ldr.w r4, [sp], #41113 pop {r4} @ (ldr r4, [sp], #4)
904 bx lr1114 bx lr
905.L___atomic_compare_exchange_4_026:1115.L___atomic_compare_exchange_4_23c:
906 ldr r3, [r1, #0]1116 ldr r3, [r1]
907 dmb ish1117 mcr p15, #0, r0, c7, c10, #5
908.L___atomic_compare_exchange_4_02c:1118.L___atomic_compare_exchange_4_244:
909 ldrex r4, [r0]1119 ldrex r4, [r0]
910 cmp r4, r31120 cmp r4, r3
911 bne.n .L___atomic_compare_exchange_4_0181121 bne .L___atomic_compare_exchange_4_228
912 strex ip, r2, [r0]1122 strex ip, r2, [r0]
913 cmp.w ip, #01123 cmp ip, #0
914 bne.n .L___atomic_compare_exchange_4_02c1124 bne .L___atomic_compare_exchange_4_244
915 dmb ish1125 mcr p15, #0, r0, c7, c10, #5
916 b.n .L___atomic_compare_exchange_4_0181126 b .L___atomic_compare_exchange_4_228
917 .size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)1127 .size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
918 1128
919#endif1129#endif
@@ -921,75 +1131,71 @@ _(__atomic_compare_exchange_4): · 1 unmodified line
921 .type _(__atomic_compare_exchange_8), %function1131 .type _(__atomic_compare_exchange_8), %function
922_(__atomic_compare_exchange_8):1132_(__atomic_compare_exchange_8):
923#ifdef __TINYC__1133#ifdef __TINYC__
924 .short 0xb4f01134 .int 0xe92d00f0
925 .short 0x461d1135 .int 0xe1a05003
926 .short 0x9b041136 .int 0xe59d3010
927 .short 0x46141137 .int 0xe1a04002
928 .short 0xb99b1138 .int 0xe3530000
929 .short 0xe9d11139 .int 0x1a00000c
930 .short 0xe8d01140 .int 0xe1c120d0
931 .short 0x429f1141 .int 0xe1b06f9f
932 .short 0xbf081142 .int 0xe1570003
933 .short 0x42961143 .int 0x01560002
934 .short 0xd1041144 .int 0x1a000002
935 .short 0xe8c01145 .int 0xe1a0cf94
936 .short 0xf1bc1146 .int 0xe35c0000
937 .short 0xd1f41147 .int 0x1afffff8
938 .short 0xbf0e1148 .int 0x03a00001
939 .short 0x20011149 .int 0x13a00000
940 .short 0x20001150 .int 0x11c160f0
941 .short 0xe9c11151 .int 0xe8bd00f0
942 .short 0xbcf01152 .int 0xe12fff1e
943 .short 0x47701153 .int 0xe1c120d0
944 .short 0xe9d11154 .int 0xee070fba
945 .short 0xf3bf1155 .int 0xe1b06f9f
946 .short 0xe8d01156 .int 0xe1570003
947 .short 0x429f1157 .int 0x01560002
948 .short 0xbf081158 .int 0x1afffff4
949 .short 0x42961159 .int 0xe1a0cf94
950 .short 0xd1ee1160 .int 0xe35c0000
951 .short 0xe8c01161 .int 0x1afffff8
952 .short 0xf1bc1162 .int 0xee070fba
953 .short 0xd1f41163 .int 0xeaffffef
954 .short 0xf3bf
955 .short 0xe7e6
956#else1164#else
957 push {r4, r5, r6, r7}1165 push {r4, r5, r6, r7}
958 mov r5, r31166 mov r5, r3
959 ldr r3, [sp, #16]1167 ldr r3, [sp, #16]
960 mov r4, r21168 mov r4, r2
961 cbnz r3, .L___atomic_compare_exchange_8_0321169 cmp r3, #0
962 ldrd r2, r3, [r1]1170 bne .L___atomic_compare_exchange_8_2b0
963.L___atomic_compare_exchange_8_00e:1171 ldrd r2, [r1]
964 ldrexd r6, r7, [r0]1172.L___atomic_compare_exchange_8_280:
1173 ldrexd r6, [r0]
965 cmp r7, r31174 cmp r7, r3
966 it eq
967 cmpeq r6, r21175 cmpeq r6, r2
968 bne.n .L___atomic_compare_exchange_8_0241176 bne .L___atomic_compare_exchange_8_29c
969 strexd ip, r4, r5, [r0]1177 strexd ip, r4, [r0]
970 cmp.w ip, #01178 cmp ip, #0
971 bne.n .L___atomic_compare_exchange_8_00e1179 bne .L___atomic_compare_exchange_8_280
972.L___atomic_compare_exchange_8_024:1180.L___atomic_compare_exchange_8_29c:
973 itee eq
974 moveq r0, #11181 moveq r0, #1
975 movne r0, #01182 movne r0, #0
976 strdne r6, r7, [r1]1183 strdne r6, [r1]
977 pop {r4, r5, r6, r7}1184 pop {r4, r5, r6, r7}
978 bx lr1185 bx lr
979.L___atomic_compare_exchange_8_032:1186.L___atomic_compare_exchange_8_2b0:
980 ldrd r2, r3, [r1]1187 ldrd r2, [r1]
981 dmb ish1188 mcr p15, #0, r0, c7, c10, #5
982.L___atomic_compare_exchange_8_03a:1189.L___atomic_compare_exchange_8_2b8:
983 ldrexd r6, r7, [r0]1190 ldrexd r6, [r0]
984 cmp r7, r31191 cmp r7, r3
985 it eq
986 cmpeq r6, r21192 cmpeq r6, r2
987 bne.n .L___atomic_compare_exchange_8_0241193 bne .L___atomic_compare_exchange_8_29c
988 strexd ip, r4, r5, [r0]1194 strexd ip, r4, [r0]
989 cmp.w ip, #01195 cmp ip, #0
990 bne.n .L___atomic_compare_exchange_8_03a1196 bne .L___atomic_compare_exchange_8_2b8
991 dmb ish1197 mcr p15, #0, r0, c7, c10, #5
992 b.n .L___atomic_compare_exchange_8_0241198 b .L___atomic_compare_exchange_8_29c
993 .size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)1199 .size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
994 1200
995#endif1201#endif
@@ -997,41 +1203,43 @@ _(__atomic_compare_exchange_8): · 1 unmodified line
997 .type _(__atomic_test_and_set_1), %function1203 .type _(__atomic_test_and_set_1), %function
998_(__atomic_test_and_set_1):1204_(__atomic_test_and_set_1):
999#ifdef __TINYC__1205#ifdef __TINYC__
1000 .short 0xf04f1206 .int 0xe3a02001
1001 .short 0xb9391207 .int 0xe3510000
1002 .short 0xe8d01208 .int 0x1a000005
1003 .short 0xe8c01209 .int 0xe1d03f9f
1004 .short 0x29001210 .int 0xe1c01f92
1005 .short 0xd1f91211 .int 0xe3510000
1006 .short 0xb2d81212 .int 0x1afffffb
1007 .short 0x47701213 .int 0xe6ef0073
1008 .short 0xf3bf1214 .int 0xe12fff1e
1009 .short 0xe8d01215 .int 0xee070fba
1010 .short 0xe8c01216 .int 0xe1d03f9f
1011 .short 0x29001217 .int 0xe1c01f92
1012 .short 0xd1f91218 .int 0xe3510000
1013 .short 0xb2d81219 .int 0x1afffffb
1014 .short 0xf3bf1220 .int 0xe6ef0073
1015 .short 0x47701221 .int 0xee070fba
1016#else1222 .int 0xe12fff1e
1017 mov.w r2, #11223#else
1018 cbnz r1, .L___atomic_test_and_set_1_0161224 mov r2, #1
1019.L___atomic_test_and_set_1_006:1225 cmp r1, #0
1226 bne .L___atomic_test_and_set_1_300
1227.L___atomic_test_and_set_1_2e8:
1020 ldrexb r3, [r0]1228 ldrexb r3, [r0]
1021 strexb r1, r2, [r0]1229 strexb r1, r2, [r0]
1022 cmp r1, #01230 cmp r1, #0
1023 bne.n .L___atomic_test_and_set_1_0061231 bne .L___atomic_test_and_set_1_2e8
1024 uxtb r0, r31232 uxtb r0, r3
1025 bx lr1233 bx lr
1026.L___atomic_test_and_set_1_016:1234.L___atomic_test_and_set_1_300:
1027 dmb ish1235 mcr p15, #0, r0, c7, c10, #5
1028.L___atomic_test_and_set_1_01a:1236.L___atomic_test_and_set_1_304:
1029 ldrexb r3, [r0]1237 ldrexb r3, [r0]
1030 strexb r1, r2, [r0]1238 strexb r1, r2, [r0]
1031 cmp r1, #01239 cmp r1, #0
1032 bne.n .L___atomic_test_and_set_1_01a1240 bne .L___atomic_test_and_set_1_304
1033 uxtb r0, r31241 uxtb r0, r3
1034 dmb ish1242 mcr p15, #0, r0, c7, c10, #5
1035 bx lr1243 bx lr
1036 .size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)1244 .size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
1037 1245
@@ -1040,41 +1248,43 @@ _(__atomic_test_and_set_1): · 2 unmodified lines
1040 .type _(__atomic_test_and_set_2), %function1248 .type _(__atomic_test_and_set_2), %function
1041_(__atomic_test_and_set_2):1249_(__atomic_test_and_set_2):
1042#ifdef __TINYC__1250#ifdef __TINYC__
1043 .short 0xf04f1251 .int 0xe3a02001
1044 .short 0xb9391252 .int 0xe3510000
1045 .short 0xe8d01253 .int 0x1a000005
1046 .short 0xe8c01254 .int 0xe1d03f9f
1047 .short 0x29001255 .int 0xe1c01f92
1048 .short 0xd1f91256 .int 0xe3510000
1049 .short 0xb2d81257 .int 0x1afffffb
1050 .short 0x47701258 .int 0xe6ef0073
1051 .short 0xf3bf1259 .int 0xe12fff1e
1052 .short 0xe8d01260 .int 0xee070fba
1053 .short 0xe8c01261 .int 0xe1d03f9f
1054 .short 0x29001262 .int 0xe1c01f92
1055 .short 0xd1f91263 .int 0xe3510000
1056 .short 0xb2d81264 .int 0x1afffffb
1057 .short 0xf3bf1265 .int 0xe6ef0073
1058 .short 0x47701266 .int 0xee070fba
1059#else1267 .int 0xe12fff1e
1060 mov.w r2, #11268#else
1061 cbnz r1, .L___atomic_test_and_set_2_0161269 mov r2, #1
1062.L___atomic_test_and_set_2_006:1270 cmp r1, #0
1271 bne .L___atomic_test_and_set_2_344
1272.L___atomic_test_and_set_2_32c:
1063 ldrexb r3, [r0]1273 ldrexb r3, [r0]
1064 strexb r1, r2, [r0]1274 strexb r1, r2, [r0]
1065 cmp r1, #01275 cmp r1, #0
1066 bne.n .L___atomic_test_and_set_2_0061276 bne .L___atomic_test_and_set_2_32c
1067 uxtb r0, r31277 uxtb r0, r3
1068 bx lr1278 bx lr
1069.L___atomic_test_and_set_2_016:1279.L___atomic_test_and_set_2_344:
1070 dmb ish1280 mcr p15, #0, r0, c7, c10, #5
1071.L___atomic_test_and_set_2_01a:1281.L___atomic_test_and_set_2_348:
1072 ldrexb r3, [r0]1282 ldrexb r3, [r0]
1073 strexb r1, r2, [r0]1283 strexb r1, r2, [r0]
1074 cmp r1, #01284 cmp r1, #0
1075 bne.n .L___atomic_test_and_set_2_01a1285 bne .L___atomic_test_and_set_2_348
1076 uxtb r0, r31286 uxtb r0, r3
1077 dmb ish1287 mcr p15, #0, r0, c7, c10, #5
1078 bx lr1288 bx lr
1079 .size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)1289 .size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
1080 1290
@@ -1083,41 +1293,43 @@ _(__atomic_test_and_set_2): · 2 unmodified lines
1083 .type _(__atomic_test_and_set_4), %function1293 .type _(__atomic_test_and_set_4), %function
1084_(__atomic_test_and_set_4):1294_(__atomic_test_and_set_4):
1085#ifdef __TINYC__1295#ifdef __TINYC__
1086 .short 0xf04f1296 .int 0xe3a02001
1087 .short 0xb9391297 .int 0xe3510000
1088 .short 0xe8d01298 .int 0x1a000005
1089 .short 0xe8c01299 .int 0xe1d03f9f
1090 .short 0x29001300 .int 0xe1c01f92
1091 .short 0xd1f91301 .int 0xe3510000
1092 .short 0xb2d81302 .int 0x1afffffb
1093 .short 0x47701303 .int 0xe6ef0073
1094 .short 0xf3bf1304 .int 0xe12fff1e
1095 .short 0xe8d01305 .int 0xee070fba
1096 .short 0xe8c01306 .int 0xe1d03f9f
1097 .short 0x29001307 .int 0xe1c01f92
1098 .short 0xd1f91308 .int 0xe3510000
1099 .short 0xb2d81309 .int 0x1afffffb
1100 .short 0xf3bf1310 .int 0xe6ef0073
1101 .short 0x47701311 .int 0xee070fba
1102#else1312 .int 0xe12fff1e
1103 mov.w r2, #11313#else
1104 cbnz r1, .L___atomic_test_and_set_4_0161314 mov r2, #1
1105.L___atomic_test_and_set_4_006:1315 cmp r1, #0
1316 bne .L___atomic_test_and_set_4_388
1317.L___atomic_test_and_set_4_370:
1106 ldrexb r3, [r0]1318 ldrexb r3, [r0]
1107 strexb r1, r2, [r0]1319 strexb r1, r2, [r0]
1108 cmp r1, #01320 cmp r1, #0
1109 bne.n .L___atomic_test_and_set_4_0061321 bne .L___atomic_test_and_set_4_370
1110 uxtb r0, r31322 uxtb r0, r3
1111 bx lr1323 bx lr
1112.L___atomic_test_and_set_4_016:1324.L___atomic_test_and_set_4_388:
1113 dmb ish1325 mcr p15, #0, r0, c7, c10, #5
1114.L___atomic_test_and_set_4_01a:1326.L___atomic_test_and_set_4_38c:
1115 ldrexb r3, [r0]1327 ldrexb r3, [r0]
1116 strexb r1, r2, [r0]1328 strexb r1, r2, [r0]
1117 cmp r1, #01329 cmp r1, #0
1118 bne.n .L___atomic_test_and_set_4_01a1330 bne .L___atomic_test_and_set_4_38c
1119 uxtb r0, r31331 uxtb r0, r3
1120 dmb ish1332 mcr p15, #0, r0, c7, c10, #5
1121 bx lr1333 bx lr
1122 .size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)1334 .size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
1123 1335
@@ -1126,41 +1338,43 @@ _(__atomic_test_and_set_4): · 2 unmodified lines
1126 .type _(__atomic_test_and_set_8), %function1338 .type _(__atomic_test_and_set_8), %function
1127_(__atomic_test_and_set_8):1339_(__atomic_test_and_set_8):
1128#ifdef __TINYC__1340#ifdef __TINYC__
1129 .short 0xf04f1341 .int 0xe3a02001
1130 .short 0xb9391342 .int 0xe3510000
1131 .short 0xe8d01343 .int 0x1a000005
1132 .short 0xe8c01344 .int 0xe1d03f9f
1133 .short 0x29001345 .int 0xe1c01f92
1134 .short 0xd1f91346 .int 0xe3510000
1135 .short 0xb2d81347 .int 0x1afffffb
1136 .short 0x47701348 .int 0xe6ef0073
1137 .short 0xf3bf1349 .int 0xe12fff1e
1138 .short 0xe8d01350 .int 0xee070fba
1139 .short 0xe8c01351 .int 0xe1d03f9f
1140 .short 0x29001352 .int 0xe1c01f92
1141 .short 0xd1f91353 .int 0xe3510000
1142 .short 0xb2d81354 .int 0x1afffffb
1143 .short 0xf3bf1355 .int 0xe6ef0073
1144 .short 0x47701356 .int 0xee070fba
1145#else1357 .int 0xe12fff1e
1146 mov.w r2, #11358#else
1147 cbnz r1, .L___atomic_test_and_set_8_0161359 mov r2, #1
1148.L___atomic_test_and_set_8_006:1360 cmp r1, #0
1361 bne .L___atomic_test_and_set_8_3cc
1362.L___atomic_test_and_set_8_3b4:
1149 ldrexb r3, [r0]1363 ldrexb r3, [r0]
1150 strexb r1, r2, [r0]1364 strexb r1, r2, [r0]
1151 cmp r1, #01365 cmp r1, #0
1152 bne.n .L___atomic_test_and_set_8_0061366 bne .L___atomic_test_and_set_8_3b4
1153 uxtb r0, r31367 uxtb r0, r3
1154 bx lr1368 bx lr
1155.L___atomic_test_and_set_8_016:1369.L___atomic_test_and_set_8_3cc:
1156 dmb ish1370 mcr p15, #0, r0, c7, c10, #5
1157.L___atomic_test_and_set_8_01a:1371.L___atomic_test_and_set_8_3d0:
1158 ldrexb r3, [r0]1372 ldrexb r3, [r0]
1159 strexb r1, r2, [r0]1373 strexb r1, r2, [r0]
1160 cmp r1, #01374 cmp r1, #0
1161 bne.n .L___atomic_test_and_set_8_01a1375 bne .L___atomic_test_and_set_8_3d0
1162 uxtb r0, r31376 uxtb r0, r3
1163 dmb ish1377 mcr p15, #0, r0, c7, c10, #5
1164 bx lr1378 bx lr
1165 .size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)1379 .size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
1166 1380
@@ -1169,10 +1383,10 @@ _(__atomic_test_and_set_8): · 2 unmodified lines
1169 .type _(atomic_thread_fence), %function1383 .type _(atomic_thread_fence), %function
1170_(atomic_thread_fence):1384_(atomic_thread_fence):
1171#ifdef __TINYC__1385#ifdef __TINYC__
1172 .short 0xf3bf1386 .int 0xee070fba
1173 .short 0x47701387 .int 0xe12fff1e
1174#else1388#else
1175 dmb ish1389 mcr p15, #0, r0, c7, c10, #5
1176 bx lr1390 bx lr
1177 .size _(atomic_thread_fence), .-_(atomic_thread_fence)1391 .size _(atomic_thread_fence), .-_(atomic_thread_fence)
1178 1392
@@ -1181,7 +1395,7 @@ _(atomic_thread_fence): · 2 unmodified lines
1181 .type _(atomic_signal_fence), %function1395 .type _(atomic_signal_fence), %function
1182_(atomic_signal_fence):1396_(atomic_signal_fence):
1183#ifdef __TINYC__1397#ifdef __TINYC__
1184 .short 0x47701398 .int 0xe12fff1e
1185#else1399#else
1186 bx lr1400 bx lr
1187 .size _(atomic_signal_fence), .-_(atomic_signal_fence)1401 .size _(atomic_signal_fence), .-_(atomic_signal_fence)
@@ -1191,25 +1405,25 @@ _(atomic_signal_fence): · 3 unmodified lines
1191 .type _(atomic_flag_test_and_set), %function1405 .type _(atomic_flag_test_and_set), %function
1192_(atomic_flag_test_and_set):1406_(atomic_flag_test_and_set):
1193#ifdef __TINYC__1407#ifdef __TINYC__
1194 .short 0xf04f1408 .int 0xe3a02001
1195 .short 0xf3bf1409 .int 0xee070fba
1196 .short 0xe8d01410 .int 0xe1d03f9f
1197 .short 0xe8c01411 .int 0xe1c01f92
1198 .short 0x29001412 .int 0xe3510000
1199 .short 0xd1f91413 .int 0x1afffffb
1200 .short 0xb2d81414 .int 0xe6ef0073
1201 .short 0xf3bf1415 .int 0xee070fba
1202 .short 0x47701416 .int 0xe12fff1e
1203#else1417#else
1204 mov.w r2, #11418 mov r2, #1
1205 dmb ish1419 mcr p15, #0, r0, c7, c10, #5
1206.L_atomic_flag_test_and_set_008:1420.L_atomic_flag_test_and_set_400:
1207 ldrexb r3, [r0]1421 ldrexb r3, [r0]
1208 strexb r1, r2, [r0]1422 strexb r1, r2, [r0]
1209 cmp r1, #01423 cmp r1, #0
1210 bne.n .L_atomic_flag_test_and_set_0081424 bne .L_atomic_flag_test_and_set_400
1211 uxtb r0, r31425 uxtb r0, r3
1212 dmb ish1426 mcr p15, #0, r0, c7, c10, #5
1213 bx lr1427 bx lr
1214 .size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)1428 .size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
1215 1429
@@ -1218,25 +1432,25 @@ _(atomic_flag_test_and_set): · 2 unmodified lines
1218 .type _(atomic_flag_test_and_set_explicit), %function1432 .type _(atomic_flag_test_and_set_explicit), %function
1219_(atomic_flag_test_and_set_explicit):1433_(atomic_flag_test_and_set_explicit):
1220#ifdef __TINYC__1434#ifdef __TINYC__
1221 .short 0xf04f1435 .int 0xe3a02001
1222 .short 0xf3bf1436 .int 0xee070fba
1223 .short 0xe8d01437 .int 0xe1d03f9f
1224 .short 0xe8c01438 .int 0xe1c01f92
1225 .short 0x29001439 .int 0xe3510000
1226 .short 0xd1f91440 .int 0x1afffffb
1227 .short 0xb2d81441 .int 0xe6ef0073
1228 .short 0xf3bf1442 .int 0xee070fba
1229 .short 0x47701443 .int 0xe12fff1e
1230#else1444#else
1231 mov.w r2, #11445 mov r2, #1
1232 dmb ish1446 mcr p15, #0, r0, c7, c10, #5
1233.L_atomic_flag_test_and_set_explicit_024:1447.L_atomic_flag_test_and_set_explicit_424:
1234 ldrexb r3, [r0]1448 ldrexb r3, [r0]
1235 strexb r1, r2, [r0]1449 strexb r1, r2, [r0]
1236 cmp r1, #01450 cmp r1, #0
1237 bne.n .L_atomic_flag_test_and_set_explicit_0241451 bne .L_atomic_flag_test_and_set_explicit_424
1238 uxtb r0, r31452 uxtb r0, r3
1239 dmb ish1453 mcr p15, #0, r0, c7, c10, #5
1240 bx lr1454 bx lr
1241 .size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)1455 .size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
1242 1456
@@ -1245,16 +1459,16 @@ _(atomic_flag_test_and_set_explicit): · 2 unmodified lines
1245 .type _(atomic_flag_clear), %function1459 .type _(atomic_flag_clear), %function
1246_(atomic_flag_clear):1460_(atomic_flag_clear):
1247#ifdef __TINYC__1461#ifdef __TINYC__
1248 .short 0x23001462 .int 0xe3b03000
1249 .short 0xf3bf1463 .int 0xee070fba
1250 .short 0x70031464 .int 0xe5c03000
1251 .short 0xf3bf1465 .int 0xee070fba
1252 .short 0x47701466 .int 0xe12fff1e
1253#else1467#else
1254 movs r3, #01468 movs r3, #0
1255 dmb ish1469 mcr p15, #0, r0, c7, c10, #5
1256 strb r3, [r0, #0]1470 strb r3, [r0]
1257 dmb ish1471 mcr p15, #0, r0, c7, c10, #5
1258 bx lr1472 bx lr
1259 .size _(atomic_flag_clear), .-_(atomic_flag_clear)1473 .size _(atomic_flag_clear), .-_(atomic_flag_clear)
1260 1474
@@ -1263,16 +1477,16 @@ _(atomic_flag_clear): · 2 unmodified lines
1263 .type _(atomic_flag_clear_explicit), %function1477 .type _(atomic_flag_clear_explicit), %function
1264_(atomic_flag_clear_explicit):1478_(atomic_flag_clear_explicit):
1265#ifdef __TINYC__1479#ifdef __TINYC__
1266 .short 0x23001480 .int 0xe3b03000
1267 .short 0xf3bf1481 .int 0xee070fba
1268 .short 0x70031482 .int 0xe5c03000
1269 .short 0xf3bf1483 .int 0xee070fba
1270 .short 0x47701484 .int 0xe12fff1e
1271#else1485#else
1272 movs r3, #01486 movs r3, #0
1273 dmb ish1487 mcr p15, #0, r0, c7, c10, #5
1274 strb r3, [r0, #0]1488 strb r3, [r0]
1275 dmb ish1489 mcr p15, #0, r0, c7, c10, #5
1276 bx lr1490 bx lr
1277 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)1491 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
1278 1492

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t