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
297297 #endif //__i386__
298298
299299 /* ---------------------------------------------- */
300−#if defined __x86_64__
300+#if defined __x86_64__ && !defined TCC_TARGET_PE
301301 .text
302302 .align 2
303303
@@ -508,37 +508,233 @@ _(atomic_flag_clear_explicit): · 204 unmodified lines
508508 ret
509509 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
510510
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
512704
513705 /* ---------------------------------------------- */
514706 #if defined __arm__
515707 .text
516708 .align 2
517− .thumb
709+#ifndef __TINYC__
710+ .arch armv6k
518711 .syntax unified
712+#endif
519713
520714 .global _(__atomic_load_1)
521715 .type _(__atomic_load_1), %function
522716 _(__atomic_load_1):
523717 #ifdef __TINYC__
524− .short 0xb911
525− .short 0x7800
526− .short 0xb2c0
527− .short 0x4770
528− .short 0xf3bf
529− .short 0x7800
530− .short 0xf3bf
531− .short 0xb2c0
532− .short 0x4770
533−#else
534− cbnz r1, .L___atomic_load_1_008
535− ldrb r0, [r0, #0]
718+ .int 0xe3510000
719+ .int 0x1a000002
720+ .int 0xe5d00000
721+ .int 0xe6ef0070
722+ .int 0xe12fff1e
723+ .int 0xee070fba
724+ .int 0xe5d00000
725+ .int 0xee070fba
726+ .int 0xe6ef0070
727+ .int 0xe12fff1e
728+#else
729+ cmp r1, #0
730+ bne .L___atomic_load_1_014
731+ ldrb r0, [r0]
536732 uxtb r0, r0
537733 bx lr
538−.L___atomic_load_1_008:
539− dmb ish
540− ldrb r0, [r0, #0]
541− dmb ish
734+.L___atomic_load_1_014:
735+ mcr p15, #0, r0, c7, c10, #5
736+ ldrb r0, [r0]
737+ mcr p15, #0, r0, c7, c10, #5
542738 uxtb r0, r0
543739 bx lr
544740 .size _(__atomic_load_1), .-_(__atomic_load_1)
@@ -548,24 +744,26 @@ _(__atomic_load_1): · 3 unmodified lines
548744 .type _(__atomic_load_2), %function
549745 _(__atomic_load_2):
550746 #ifdef __TINYC__
551− .short 0xb911
552− .short 0x8800
553− .short 0xb280
554− .short 0x4770
555− .short 0xf3bf
556− .short 0x8800
557− .short 0xf3bf
558− .short 0xb280
559− .short 0x4770
560−#else
561− cbnz r1, .L___atomic_load_2_008
562− ldrh r0, [r0, #0]
747+ .int 0xe3510000
748+ .int 0x1a000002
749+ .int 0xe1d000b0
750+ .int 0xe6ff0070
751+ .int 0xe12fff1e
752+ .int 0xee070fba
753+ .int 0xe1d000b0
754+ .int 0xee070fba
755+ .int 0xe6ff0070
756+ .int 0xe12fff1e
757+#else
758+ cmp r1, #0
759+ bne .L___atomic_load_2_03c
760+ ldrh r0, [r0]
563761 uxth r0, r0
564762 bx lr
565−.L___atomic_load_2_008:
566− dmb ish
567− ldrh r0, [r0, #0]
568− dmb ish
763+.L___atomic_load_2_03c:
764+ mcr p15, #0, r0, c7, c10, #5
765+ ldrh r0, [r0]
766+ mcr p15, #0, r0, c7, c10, #5
569767 uxth r0, r0
570768 bx lr
571769 .size _(__atomic_load_2), .-_(__atomic_load_2)
@@ -575,21 +773,23 @@ _(__atomic_load_2): · 3 unmodified lines
575773 .type _(__atomic_load_4), %function
576774 _(__atomic_load_4):
577775 #ifdef __TINYC__
578− .short 0xb909
579− .short 0x6800
580− .short 0x4770
581− .short 0xf3bf
582− .short 0x6800
583− .short 0xf3bf
584− .short 0x4770
776+ .int 0xe3510000
777+ .int 0x1a000001
778+ .int 0xe5900000
779+ .int 0xe12fff1e
780+ .int 0xee070fba
781+ .int 0xe5900000
782+ .int 0xee070fba
783+ .int 0xe12fff1e
585784 #else
586− cbnz r1, .L___atomic_load_4_006
587− ldr r0, [r0, #0]
785+ cmp r1, #0
786+ bne .L___atomic_load_4_060
787+ ldr r0, [r0]
588788 bx lr
589−.L___atomic_load_4_006:
590− dmb ish
591− ldr r0, [r0, #0]
592− dmb ish
789+.L___atomic_load_4_060:
790+ mcr p15, #0, r0, c7, c10, #5
791+ ldr r0, [r0]
792+ mcr p15, #0, r0, c7, c10, #5
593793 bx lr
594794 .size _(__atomic_load_4), .-_(__atomic_load_4)
595795
@@ -598,21 +798,23 @@ _(__atomic_load_4): · 2 unmodified lines
598798 .type _(__atomic_load_8), %function
599799 _(__atomic_load_8):
600800 #ifdef __TINYC__
601− .short 0xb911
602− .short 0xe8d0
603− .short 0x4770
604− .short 0xf3bf
605− .short 0xe8d0
606− .short 0xf3bf
607− .short 0x4770
801+ .int 0xe3510000
802+ .int 0x1a000001
803+ .int 0xe1b00f9f
804+ .int 0xe12fff1e
805+ .int 0xee070fba
806+ .int 0xe1b00f9f
807+ .int 0xee070fba
808+ .int 0xe12fff1e
608809 #else
609− cbnz r1, .L___atomic_load_8_008
610− ldrexd r0, r1, [r0]
810+ cmp r1, #0
811+ bne .L___atomic_load_8_080
812+ ldrexd r0, [r0]
611813 bx lr
612−.L___atomic_load_8_008:
613− dmb ish
614− ldrexd r0, r1, [r0]
615− dmb ish
814+.L___atomic_load_8_080:
815+ mcr p15, #0, r0, c7, c10, #5
816+ ldrexd r0, [r0]
817+ mcr p15, #0, r0, c7, c10, #5
616818 bx lr
617819 .size _(__atomic_load_8), .-_(__atomic_load_8)
618820
@@ -621,21 +823,23 @@ _(__atomic_load_8): · 2 unmodified lines
621823 .type _(__atomic_store_1), %function
622824 _(__atomic_store_1):
623825 #ifdef __TINYC__
624− .short 0xb90a
625− .short 0x7001
626− .short 0x4770
627− .short 0xf3bf
628− .short 0x7001
629− .short 0xf3bf
630− .short 0x4770
631−#else
632− cbnz r2, .L___atomic_store_1_006
633− strb r1, [r0, #0]
826+ .int 0xe3520000
827+ .int 0x1a000001
828+ .int 0xe5c01000
829+ .int 0xe12fff1e
830+ .int 0xee070fba
831+ .int 0xe5c01000
832+ .int 0xee070fba
833+ .int 0xe12fff1e
834+#else
835+ cmp r2, #0
836+ bne .L___atomic_store_1_0a0
837+ strb r1, [r0]
634838 bx lr
635−.L___atomic_store_1_006:
636− dmb ish
637− strb r1, [r0, #0]
638− dmb ish
839+.L___atomic_store_1_0a0:
840+ mcr p15, #0, r0, c7, c10, #5
841+ strb r1, [r0]
842+ mcr p15, #0, r0, c7, c10, #5
639843 bx lr
640844 .size _(__atomic_store_1), .-_(__atomic_store_1)
641845
@@ -644,21 +848,23 @@ _(__atomic_store_1): · 2 unmodified lines
644848 .type _(__atomic_store_2), %function
645849 _(__atomic_store_2):
646850 #ifdef __TINYC__
647− .short 0xb90a
648− .short 0x8001
649− .short 0x4770
650− .short 0xf3bf
651− .short 0x8001
652− .short 0xf3bf
653− .short 0x4770
654−#else
655− cbnz r2, .L___atomic_store_2_006
656− strh r1, [r0, #0]
851+ .int 0xe3520000
852+ .int 0x1a000001
853+ .int 0xe1c010b0
854+ .int 0xe12fff1e
855+ .int 0xee070fba
856+ .int 0xe1c010b0
857+ .int 0xee070fba
858+ .int 0xe12fff1e
859+#else
860+ cmp r2, #0
861+ bne .L___atomic_store_2_0c0
862+ strh r1, [r0]
657863 bx lr
658−.L___atomic_store_2_006:
659− dmb ish
660− strh r1, [r0, #0]
661− dmb ish
864+.L___atomic_store_2_0c0:
865+ mcr p15, #0, r0, c7, c10, #5
866+ strh r1, [r0]
867+ mcr p15, #0, r0, c7, c10, #5
662868 bx lr
663869 .size _(__atomic_store_2), .-_(__atomic_store_2)
664870
@@ -667,21 +873,23 @@ _(__atomic_store_2): · 2 unmodified lines
667873 .type _(__atomic_store_4), %function
668874 _(__atomic_store_4):
669875 #ifdef __TINYC__
670− .short 0xb90a
671− .short 0x6001
672− .short 0x4770
673− .short 0xf3bf
674− .short 0x6001
675− .short 0xf3bf
676− .short 0x4770
677−#else
678− cbnz r2, .L___atomic_store_4_006
679− str r1, [r0, #0]
876+ .int 0xe3520000
877+ .int 0x1a000001
878+ .int 0xe5801000
879+ .int 0xe12fff1e
880+ .int 0xee070fba
881+ .int 0xe5801000
882+ .int 0xee070fba
883+ .int 0xe12fff1e
884+#else
885+ cmp r2, #0
886+ bne .L___atomic_store_4_0e0
887+ str r1, [r0]
680888 bx lr
681−.L___atomic_store_4_006:
682− dmb ish
683− str r1, [r0, #0]
684− dmb ish
889+.L___atomic_store_4_0e0:
890+ mcr p15, #0, r0, c7, c10, #5
891+ str r1, [r0]
892+ mcr p15, #0, r0, c7, c10, #5
685893 bx lr
686894 .size _(__atomic_store_4), .-_(__atomic_store_4)
687895
@@ -690,46 +898,48 @@ _(__atomic_store_4): · 2 unmodified lines
690898 .type _(__atomic_store_8), %function
691899 _(__atomic_store_8):
692900 #ifdef __TINYC__
693− .short 0xb430
694− .short 0x4614
695− .short 0x9902
696− .short 0x461d
697− .short 0xb939
698− .short 0xe8d0
699− .short 0xe8c0
700− .short 0x2900
701− .short 0xd1f9
702− .short 0xbc30
703− .short 0x4770
704− .short 0xf3bf
705− .short 0xe8d0
706− .short 0xe8c0
707− .short 0x2900
708− .short 0xd1f9
709− .short 0xf3bf
710− .short 0xbc30
711− .short 0x4770
901+ .int 0xe92d0030
902+ .int 0xe1a04002
903+ .int 0xe59d1008
904+ .int 0xe1a05003
905+ .int 0xe3510000
906+ .int 0x1a000005
907+ .int 0xe1b02f9f
908+ .int 0xe1a01f94
909+ .int 0xe3510000
910+ .int 0x1afffffb
911+ .int 0xe8bd0030
912+ .int 0xe12fff1e
913+ .int 0xee070fba
914+ .int 0xe1b02f9f
915+ .int 0xe1a01f94
916+ .int 0xe3510000
917+ .int 0x1afffffb
918+ .int 0xee070fba
919+ .int 0xe8bd0030
920+ .int 0xe12fff1e
712921 #else
713922 push {r4, r5}
714923 mov r4, r2
715924 ldr r1, [sp, #8]
716925 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]
721926 cmp r1, #0
722− bne.n .L___atomic_store_8_00a
927+ 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
723933 pop {r4, r5}
724934 bx lr
725−.L___atomic_store_8_01a:
726− dmb ish
727−.L___atomic_store_8_01e:
728− ldrexd r2, r3, [r0]
729− strexd r1, r4, r5, [r0]
935+.L___atomic_store_8_120:
936+ mcr p15, #0, r0, c7, c10, #5
937+.L___atomic_store_8_124:
938+ ldrexd r2, [r0]
939+ strexd r1, r4, [r0]
730940 cmp r1, #0
731− bne.n .L___atomic_store_8_01e
732− dmb ish
941+ bne .L___atomic_store_8_124
942+ mcr p15, #0, r0, c7, c10, #5
733943 pop {r4, r5}
734944 bx lr
735945 .size _(__atomic_store_8), .-_(__atomic_store_8)
@@ -739,59 +949,59 @@ _(__atomic_store_8): · 3 unmodified lines
739949 .type _(__atomic_compare_exchange_1), %function
740950 _(__atomic_compare_exchange_1):
741951 #ifdef __TINYC__
742− .short 0xb500
743− .short 0xb983
744− .short 0x780b
745− .short 0xe8d0
746− .short 0x459c
747− .short 0xd104
748− .short 0xe8c0
749− .short 0xf1be
750− .short 0xd1f6
751− .short 0xbf0e
752− .short 0x2001
753− .short 0x2000
754− .short 0xf881
755− .short 0xf85d
756− .short 0x780b
757− .short 0xf3bf
758− .short 0xe8d0
759− .short 0x459c
760− .short 0xd1f1
761− .short 0xe8c0
762− .short 0xf1be
763− .short 0xd1f6
764− .short 0xf3bf
765− .short 0xe7e9
766−#else
767− push {lr}
768− cbnz r3, .L___atomic_compare_exchange_1_026
769− ldrb r3, [r1, #0]
770−.L___atomic_compare_exchange_1_006:
952+ .int 0xe52de004
953+ .int 0xe3530000
954+ .int 0x1a00000a
955+ .int 0xe5d13000
956+ .int 0xe1d0cf9f
957+ .int 0xe15c0003
958+ .int 0x1a000002
959+ .int 0xe1c0ef92
960+ .int 0xe35e0000
961+ .int 0x1afffff9
962+ .int 0x03a00001
963+ .int 0x13a00000
964+ .int 0x15c1c000
965+ .int 0xe49df004
966+ .int 0xe5d13000
967+ .int 0xee070fba
968+ .int 0xe1d0cf9f
969+ .int 0xe15c0003
970+ .int 0x1afffff6
971+ .int 0xe1c0ef92
972+ .int 0xe35e0000
973+ .int 0x1afffff9
974+ .int 0xee070fba
975+ .int 0xeafffff1
976+#else
977+ push {lr} @ (str lr, [sp, #-4]!)
978+ cmp r3, #0
979+ bne .L___atomic_compare_exchange_1_178
980+ ldrb r3, [r1]
981+.L___atomic_compare_exchange_1_150:
771982 ldrexb ip, [r0]
772983 cmp ip, r3
773− bne.n .L___atomic_compare_exchange_1_018
984+ bne .L___atomic_compare_exchange_1_168
774985 strexb lr, r2, [r0]
775− cmp.w lr, #0
776− bne.n .L___atomic_compare_exchange_1_006
777−.L___atomic_compare_exchange_1_018:
778− itee eq
986+ cmp lr, #0
987+ bne .L___atomic_compare_exchange_1_150
988+.L___atomic_compare_exchange_1_168:
779989 moveq r0, #1
780990 movne r0, #0
781− strbne.w ip, [r1]
782− ldr.w pc, [sp], #4
783−.L___atomic_compare_exchange_1_026:
784− ldrb r3, [r1, #0]
785− dmb ish
786−.L___atomic_compare_exchange_1_02c:
991+ strbne ip, [r1]
992+ pop {pc} @ (ldr pc, [sp], #4)
993+.L___atomic_compare_exchange_1_178:
994+ ldrb r3, [r1]
995+ mcr p15, #0, r0, c7, c10, #5
996+.L___atomic_compare_exchange_1_180:
787997 ldrexb ip, [r0]
788998 cmp ip, r3
789− bne.n .L___atomic_compare_exchange_1_018
999+ bne .L___atomic_compare_exchange_1_168
7901000 strexb lr, r2, [r0]
791− cmp.w lr, #0
792− bne.n .L___atomic_compare_exchange_1_02c
793− dmb ish
794− b.n .L___atomic_compare_exchange_1_018
1001+ cmp lr, #0
1002+ bne .L___atomic_compare_exchange_1_180
1003+ mcr p15, #0, r0, c7, c10, #5
1004+ b .L___atomic_compare_exchange_1_168
7951005 .size _(__atomic_compare_exchange_1), .-_(__atomic_compare_exchange_1)
7961006
7971007 #endif
@@ -799,59 +1009,59 @@ _(__atomic_compare_exchange_1): · 1 unmodified line
7991009 .type _(__atomic_compare_exchange_2), %function
8001010 _(__atomic_compare_exchange_2):
8011011 #ifdef __TINYC__
802− .short 0xb500
803− .short 0xb983
804− .short 0x880b
805− .short 0xe8d0
806− .short 0x459c
807− .short 0xd104
808− .short 0xe8c0
809− .short 0xf1be
810− .short 0xd1f6
811− .short 0xbf0e
812− .short 0x2001
813− .short 0x2000
814− .short 0xf8a1
815− .short 0xf85d
816− .short 0x880b
817− .short 0xf3bf
818− .short 0xe8d0
819− .short 0x459c
820− .short 0xd1f1
821− .short 0xe8c0
822− .short 0xf1be
823− .short 0xd1f6
824− .short 0xf3bf
825− .short 0xe7e9
826−#else
827− push {lr}
828− cbnz r3, .L___atomic_compare_exchange_2_026
829− ldrh r3, [r1, #0]
830−.L___atomic_compare_exchange_2_006:
1012+ .int 0xe52de004
1013+ .int 0xe3530000
1014+ .int 0x1a00000a
1015+ .int 0xe1d130b0
1016+ .int 0xe1f0cf9f
1017+ .int 0xe15c0003
1018+ .int 0x1a000002
1019+ .int 0xe1e0ef92
1020+ .int 0xe35e0000
1021+ .int 0x1afffff9
1022+ .int 0x03a00001
1023+ .int 0x13a00000
1024+ .int 0x11c1c0b0
1025+ .int 0xe49df004
1026+ .int 0xe1d130b0
1027+ .int 0xee070fba
1028+ .int 0xe1f0cf9f
1029+ .int 0xe15c0003
1030+ .int 0x1afffff6
1031+ .int 0xe1e0ef92
1032+ .int 0xe35e0000
1033+ .int 0x1afffff9
1034+ .int 0xee070fba
1035+ .int 0xeafffff1
1036+#else
1037+ push {lr} @ (str lr, [sp, #-4]!)
1038+ cmp r3, #0
1039+ bne .L___atomic_compare_exchange_2_1d8
1040+ ldrh r3, [r1]
1041+.L___atomic_compare_exchange_2_1b0:
8311042 ldrexh ip, [r0]
8321043 cmp ip, r3
833− bne.n .L___atomic_compare_exchange_2_018
1044+ bne .L___atomic_compare_exchange_2_1c8
8341045 strexh lr, r2, [r0]
835− cmp.w lr, #0
836− bne.n .L___atomic_compare_exchange_2_006
837−.L___atomic_compare_exchange_2_018:
838− itee eq
1046+ cmp lr, #0
1047+ bne .L___atomic_compare_exchange_2_1b0
1048+.L___atomic_compare_exchange_2_1c8:
8391049 moveq r0, #1
8401050 movne r0, #0
841− strhne.w ip, [r1]
842− ldr.w pc, [sp], #4
843−.L___atomic_compare_exchange_2_026:
844− ldrh r3, [r1, #0]
845− dmb ish
846−.L___atomic_compare_exchange_2_02c:
1051+ strhne ip, [r1]
1052+ pop {pc} @ (ldr pc, [sp], #4)
1053+.L___atomic_compare_exchange_2_1d8:
1054+ ldrh r3, [r1]
1055+ mcr p15, #0, r0, c7, c10, #5
1056+.L___atomic_compare_exchange_2_1e0:
8471057 ldrexh ip, [r0]
8481058 cmp ip, r3
849− bne.n .L___atomic_compare_exchange_2_018
1059+ bne .L___atomic_compare_exchange_2_1c8
8501060 strexh lr, r2, [r0]
851− cmp.w lr, #0
852− bne.n .L___atomic_compare_exchange_2_02c
853− dmb ish
854− b.n .L___atomic_compare_exchange_2_018
1061+ cmp lr, #0
1062+ bne .L___atomic_compare_exchange_2_1e0
1063+ mcr p15, #0, r0, c7, c10, #5
1064+ b .L___atomic_compare_exchange_2_1c8
8551065 .size _(__atomic_compare_exchange_2), .-_(__atomic_compare_exchange_2)
8561066
8571067 #endif
@@ -859,61 +1069,61 @@ _(__atomic_compare_exchange_2): · 1 unmodified line
8591069 .type _(__atomic_compare_exchange_4), %function
8601070 _(__atomic_compare_exchange_4):
8611071 #ifdef __TINYC__
862− .short 0xb410
863− .short 0xb983
864− .short 0x680b
865− .short 0xe850
866− .short 0x429c
867− .short 0xd104
868− .short 0xe840
869− .short 0xf1bc
870− .short 0xd1f6
871− .short 0xbf0e
872− .short 0x2001
873− .short 0x2000
874− .short 0x600c
875− .short 0xf85d
876− .short 0x4770
877− .short 0x680b
878− .short 0xf3bf
879− .short 0xe850
880− .short 0x429c
881− .short 0xd1f1
882− .short 0xe840
883− .short 0xf1bc
884− .short 0xd1f6
885− .short 0xf3bf
886− .short 0xe7e9
887−#else
888− push {r4}
889− cbnz r3, .L___atomic_compare_exchange_4_026
890− ldr r3, [r1, #0]
891−.L___atomic_compare_exchange_4_006:
1072+ .int 0xe52d4004
1073+ .int 0xe3530000
1074+ .int 0x1a00000b
1075+ .int 0xe5913000
1076+ .int 0xe1904f9f
1077+ .int 0xe1540003
1078+ .int 0x1a000002
1079+ .int 0xe180cf92
1080+ .int 0xe35c0000
1081+ .int 0x1afffff9
1082+ .int 0x03a00001
1083+ .int 0x13a00000
1084+ .int 0x15814000
1085+ .int 0xe49d4004
1086+ .int 0xe12fff1e
1087+ .int 0xe5913000
1088+ .int 0xee070fba
1089+ .int 0xe1904f9f
1090+ .int 0xe1540003
1091+ .int 0x1afffff5
1092+ .int 0xe180cf92
1093+ .int 0xe35c0000
1094+ .int 0x1afffff9
1095+ .int 0xee070fba
1096+ .int 0xeafffff0
1097+#else
1098+ push {r4} @ (str r4, [sp, #-4]!)
1099+ cmp r3, #0
1100+ bne .L___atomic_compare_exchange_4_23c
1101+ ldr r3, [r1]
1102+.L___atomic_compare_exchange_4_210:
8921103 ldrex r4, [r0]
8931104 cmp r4, r3
894− bne.n .L___atomic_compare_exchange_4_018
1105+ bne .L___atomic_compare_exchange_4_228
8951106 strex ip, r2, [r0]
896− cmp.w ip, #0
897− bne.n .L___atomic_compare_exchange_4_006
898−.L___atomic_compare_exchange_4_018:
899− itee eq
1107+ cmp ip, #0
1108+ bne .L___atomic_compare_exchange_4_210
1109+.L___atomic_compare_exchange_4_228:
9001110 moveq r0, #1
9011111 movne r0, #0
902− strne r4, [r1, #0]
903− ldr.w r4, [sp], #4
1112+ strne r4, [r1]
1113+ pop {r4} @ (ldr r4, [sp], #4)
9041114 bx lr
905−.L___atomic_compare_exchange_4_026:
906− ldr r3, [r1, #0]
907− dmb ish
908−.L___atomic_compare_exchange_4_02c:
1115+.L___atomic_compare_exchange_4_23c:
1116+ ldr r3, [r1]
1117+ mcr p15, #0, r0, c7, c10, #5
1118+.L___atomic_compare_exchange_4_244:
9091119 ldrex r4, [r0]
9101120 cmp r4, r3
911− bne.n .L___atomic_compare_exchange_4_018
1121+ bne .L___atomic_compare_exchange_4_228
9121122 strex ip, r2, [r0]
913− cmp.w ip, #0
914− bne.n .L___atomic_compare_exchange_4_02c
915− dmb ish
916− b.n .L___atomic_compare_exchange_4_018
1123+ cmp ip, #0
1124+ bne .L___atomic_compare_exchange_4_244
1125+ mcr p15, #0, r0, c7, c10, #5
1126+ b .L___atomic_compare_exchange_4_228
9171127 .size _(__atomic_compare_exchange_4), .-_(__atomic_compare_exchange_4)
9181128
9191129 #endif
@@ -921,75 +1131,71 @@ _(__atomic_compare_exchange_4): · 1 unmodified line
9211131 .type _(__atomic_compare_exchange_8), %function
9221132 _(__atomic_compare_exchange_8):
9231133 #ifdef __TINYC__
924− .short 0xb4f0
925− .short 0x461d
926− .short 0x9b04
927− .short 0x4614
928− .short 0xb99b
929− .short 0xe9d1
930− .short 0xe8d0
931− .short 0x429f
932− .short 0xbf08
933− .short 0x4296
934− .short 0xd104
935− .short 0xe8c0
936− .short 0xf1bc
937− .short 0xd1f4
938− .short 0xbf0e
939− .short 0x2001
940− .short 0x2000
941− .short 0xe9c1
942− .short 0xbcf0
943− .short 0x4770
944− .short 0xe9d1
945− .short 0xf3bf
946− .short 0xe8d0
947− .short 0x429f
948− .short 0xbf08
949− .short 0x4296
950− .short 0xd1ee
951− .short 0xe8c0
952− .short 0xf1bc
953− .short 0xd1f4
954− .short 0xf3bf
955− .short 0xe7e6
1134+ .int 0xe92d00f0
1135+ .int 0xe1a05003
1136+ .int 0xe59d3010
1137+ .int 0xe1a04002
1138+ .int 0xe3530000
1139+ .int 0x1a00000c
1140+ .int 0xe1c120d0
1141+ .int 0xe1b06f9f
1142+ .int 0xe1570003
1143+ .int 0x01560002
1144+ .int 0x1a000002
1145+ .int 0xe1a0cf94
1146+ .int 0xe35c0000
1147+ .int 0x1afffff8
1148+ .int 0x03a00001
1149+ .int 0x13a00000
1150+ .int 0x11c160f0
1151+ .int 0xe8bd00f0
1152+ .int 0xe12fff1e
1153+ .int 0xe1c120d0
1154+ .int 0xee070fba
1155+ .int 0xe1b06f9f
1156+ .int 0xe1570003
1157+ .int 0x01560002
1158+ .int 0x1afffff4
1159+ .int 0xe1a0cf94
1160+ .int 0xe35c0000
1161+ .int 0x1afffff8
1162+ .int 0xee070fba
1163+ .int 0xeaffffef
9561164 #else
9571165 push {r4, r5, r6, r7}
9581166 mov r5, r3
9591167 ldr r3, [sp, #16]
9601168 mov r4, r2
961− cbnz r3, .L___atomic_compare_exchange_8_032
962− ldrd r2, r3, [r1]
963−.L___atomic_compare_exchange_8_00e:
964− ldrexd r6, r7, [r0]
1169+ cmp r3, #0
1170+ bne .L___atomic_compare_exchange_8_2b0
1171+ ldrd r2, [r1]
1172+.L___atomic_compare_exchange_8_280:
1173+ ldrexd r6, [r0]
9651174 cmp r7, r3
966− it eq
9671175 cmpeq r6, r2
968− bne.n .L___atomic_compare_exchange_8_024
969− strexd ip, r4, r5, [r0]
970− cmp.w ip, #0
971− bne.n .L___atomic_compare_exchange_8_00e
972−.L___atomic_compare_exchange_8_024:
973− itee eq
1176+ bne .L___atomic_compare_exchange_8_29c
1177+ strexd ip, r4, [r0]
1178+ cmp ip, #0
1179+ bne .L___atomic_compare_exchange_8_280
1180+.L___atomic_compare_exchange_8_29c:
9741181 moveq r0, #1
9751182 movne r0, #0
976− strdne r6, r7, [r1]
1183+ strdne r6, [r1]
9771184 pop {r4, r5, r6, r7}
9781185 bx lr
979−.L___atomic_compare_exchange_8_032:
980− ldrd r2, r3, [r1]
981− dmb ish
982−.L___atomic_compare_exchange_8_03a:
983− ldrexd r6, r7, [r0]
1186+.L___atomic_compare_exchange_8_2b0:
1187+ ldrd r2, [r1]
1188+ mcr p15, #0, r0, c7, c10, #5
1189+.L___atomic_compare_exchange_8_2b8:
1190+ ldrexd r6, [r0]
9841191 cmp r7, r3
985− it eq
9861192 cmpeq r6, r2
987− bne.n .L___atomic_compare_exchange_8_024
988− strexd ip, r4, r5, [r0]
989− cmp.w ip, #0
990− bne.n .L___atomic_compare_exchange_8_03a
991− dmb ish
992− b.n .L___atomic_compare_exchange_8_024
1193+ bne .L___atomic_compare_exchange_8_29c
1194+ strexd ip, r4, [r0]
1195+ cmp ip, #0
1196+ bne .L___atomic_compare_exchange_8_2b8
1197+ mcr p15, #0, r0, c7, c10, #5
1198+ b .L___atomic_compare_exchange_8_29c
9931199 .size _(__atomic_compare_exchange_8), .-_(__atomic_compare_exchange_8)
9941200
9951201 #endif
@@ -997,41 +1203,43 @@ _(__atomic_compare_exchange_8): · 1 unmodified line
9971203 .type _(__atomic_test_and_set_1), %function
9981204 _(__atomic_test_and_set_1):
9991205 #ifdef __TINYC__
1000− .short 0xf04f
1001− .short 0xb939
1002− .short 0xe8d0
1003− .short 0xe8c0
1004− .short 0x2900
1005− .short 0xd1f9
1006− .short 0xb2d8
1007− .short 0x4770
1008− .short 0xf3bf
1009− .short 0xe8d0
1010− .short 0xe8c0
1011− .short 0x2900
1012− .short 0xd1f9
1013− .short 0xb2d8
1014− .short 0xf3bf
1015− .short 0x4770
1016−#else
1017− mov.w r2, #1
1018− cbnz r1, .L___atomic_test_and_set_1_016
1019−.L___atomic_test_and_set_1_006:
1206+ .int 0xe3a02001
1207+ .int 0xe3510000
1208+ .int 0x1a000005
1209+ .int 0xe1d03f9f
1210+ .int 0xe1c01f92
1211+ .int 0xe3510000
1212+ .int 0x1afffffb
1213+ .int 0xe6ef0073
1214+ .int 0xe12fff1e
1215+ .int 0xee070fba
1216+ .int 0xe1d03f9f
1217+ .int 0xe1c01f92
1218+ .int 0xe3510000
1219+ .int 0x1afffffb
1220+ .int 0xe6ef0073
1221+ .int 0xee070fba
1222+ .int 0xe12fff1e
1223+#else
1224+ mov r2, #1
1225+ cmp r1, #0
1226+ bne .L___atomic_test_and_set_1_300
1227+.L___atomic_test_and_set_1_2e8:
10201228 ldrexb r3, [r0]
10211229 strexb r1, r2, [r0]
10221230 cmp r1, #0
1023− bne.n .L___atomic_test_and_set_1_006
1231+ bne .L___atomic_test_and_set_1_2e8
10241232 uxtb r0, r3
10251233 bx lr
1026−.L___atomic_test_and_set_1_016:
1027− dmb ish
1028−.L___atomic_test_and_set_1_01a:
1234+.L___atomic_test_and_set_1_300:
1235+ mcr p15, #0, r0, c7, c10, #5
1236+.L___atomic_test_and_set_1_304:
10291237 ldrexb r3, [r0]
10301238 strexb r1, r2, [r0]
10311239 cmp r1, #0
1032− bne.n .L___atomic_test_and_set_1_01a
1240+ bne .L___atomic_test_and_set_1_304
10331241 uxtb r0, r3
1034− dmb ish
1242+ mcr p15, #0, r0, c7, c10, #5
10351243 bx lr
10361244 .size _(__atomic_test_and_set_1), .-_(__atomic_test_and_set_1)
10371245
@@ -1040,41 +1248,43 @@ _(__atomic_test_and_set_1): · 2 unmodified lines
10401248 .type _(__atomic_test_and_set_2), %function
10411249 _(__atomic_test_and_set_2):
10421250 #ifdef __TINYC__
1043− .short 0xf04f
1044− .short 0xb939
1045− .short 0xe8d0
1046− .short 0xe8c0
1047− .short 0x2900
1048− .short 0xd1f9
1049− .short 0xb2d8
1050− .short 0x4770
1051− .short 0xf3bf
1052− .short 0xe8d0
1053− .short 0xe8c0
1054− .short 0x2900
1055− .short 0xd1f9
1056− .short 0xb2d8
1057− .short 0xf3bf
1058− .short 0x4770
1059−#else
1060− mov.w r2, #1
1061− cbnz r1, .L___atomic_test_and_set_2_016
1062−.L___atomic_test_and_set_2_006:
1251+ .int 0xe3a02001
1252+ .int 0xe3510000
1253+ .int 0x1a000005
1254+ .int 0xe1d03f9f
1255+ .int 0xe1c01f92
1256+ .int 0xe3510000
1257+ .int 0x1afffffb
1258+ .int 0xe6ef0073
1259+ .int 0xe12fff1e
1260+ .int 0xee070fba
1261+ .int 0xe1d03f9f
1262+ .int 0xe1c01f92
1263+ .int 0xe3510000
1264+ .int 0x1afffffb
1265+ .int 0xe6ef0073
1266+ .int 0xee070fba
1267+ .int 0xe12fff1e
1268+#else
1269+ mov r2, #1
1270+ cmp r1, #0
1271+ bne .L___atomic_test_and_set_2_344
1272+.L___atomic_test_and_set_2_32c:
10631273 ldrexb r3, [r0]
10641274 strexb r1, r2, [r0]
10651275 cmp r1, #0
1066− bne.n .L___atomic_test_and_set_2_006
1276+ bne .L___atomic_test_and_set_2_32c
10671277 uxtb r0, r3
10681278 bx lr
1069−.L___atomic_test_and_set_2_016:
1070− dmb ish
1071−.L___atomic_test_and_set_2_01a:
1279+.L___atomic_test_and_set_2_344:
1280+ mcr p15, #0, r0, c7, c10, #5
1281+.L___atomic_test_and_set_2_348:
10721282 ldrexb r3, [r0]
10731283 strexb r1, r2, [r0]
10741284 cmp r1, #0
1075− bne.n .L___atomic_test_and_set_2_01a
1285+ bne .L___atomic_test_and_set_2_348
10761286 uxtb r0, r3
1077− dmb ish
1287+ mcr p15, #0, r0, c7, c10, #5
10781288 bx lr
10791289 .size _(__atomic_test_and_set_2), .-_(__atomic_test_and_set_2)
10801290
@@ -1083,41 +1293,43 @@ _(__atomic_test_and_set_2): · 2 unmodified lines
10831293 .type _(__atomic_test_and_set_4), %function
10841294 _(__atomic_test_and_set_4):
10851295 #ifdef __TINYC__
1086− .short 0xf04f
1087− .short 0xb939
1088− .short 0xe8d0
1089− .short 0xe8c0
1090− .short 0x2900
1091− .short 0xd1f9
1092− .short 0xb2d8
1093− .short 0x4770
1094− .short 0xf3bf
1095− .short 0xe8d0
1096− .short 0xe8c0
1097− .short 0x2900
1098− .short 0xd1f9
1099− .short 0xb2d8
1100− .short 0xf3bf
1101− .short 0x4770
1102−#else
1103− mov.w r2, #1
1104− cbnz r1, .L___atomic_test_and_set_4_016
1105−.L___atomic_test_and_set_4_006:
1296+ .int 0xe3a02001
1297+ .int 0xe3510000
1298+ .int 0x1a000005
1299+ .int 0xe1d03f9f
1300+ .int 0xe1c01f92
1301+ .int 0xe3510000
1302+ .int 0x1afffffb
1303+ .int 0xe6ef0073
1304+ .int 0xe12fff1e
1305+ .int 0xee070fba
1306+ .int 0xe1d03f9f
1307+ .int 0xe1c01f92
1308+ .int 0xe3510000
1309+ .int 0x1afffffb
1310+ .int 0xe6ef0073
1311+ .int 0xee070fba
1312+ .int 0xe12fff1e
1313+#else
1314+ mov r2, #1
1315+ cmp r1, #0
1316+ bne .L___atomic_test_and_set_4_388
1317+.L___atomic_test_and_set_4_370:
11061318 ldrexb r3, [r0]
11071319 strexb r1, r2, [r0]
11081320 cmp r1, #0
1109− bne.n .L___atomic_test_and_set_4_006
1321+ bne .L___atomic_test_and_set_4_370
11101322 uxtb r0, r3
11111323 bx lr
1112−.L___atomic_test_and_set_4_016:
1113− dmb ish
1114−.L___atomic_test_and_set_4_01a:
1324+.L___atomic_test_and_set_4_388:
1325+ mcr p15, #0, r0, c7, c10, #5
1326+.L___atomic_test_and_set_4_38c:
11151327 ldrexb r3, [r0]
11161328 strexb r1, r2, [r0]
11171329 cmp r1, #0
1118− bne.n .L___atomic_test_and_set_4_01a
1330+ bne .L___atomic_test_and_set_4_38c
11191331 uxtb r0, r3
1120− dmb ish
1332+ mcr p15, #0, r0, c7, c10, #5
11211333 bx lr
11221334 .size _(__atomic_test_and_set_4), .-_(__atomic_test_and_set_4)
11231335
@@ -1126,41 +1338,43 @@ _(__atomic_test_and_set_4): · 2 unmodified lines
11261338 .type _(__atomic_test_and_set_8), %function
11271339 _(__atomic_test_and_set_8):
11281340 #ifdef __TINYC__
1129− .short 0xf04f
1130− .short 0xb939
1131− .short 0xe8d0
1132− .short 0xe8c0
1133− .short 0x2900
1134− .short 0xd1f9
1135− .short 0xb2d8
1136− .short 0x4770
1137− .short 0xf3bf
1138− .short 0xe8d0
1139− .short 0xe8c0
1140− .short 0x2900
1141− .short 0xd1f9
1142− .short 0xb2d8
1143− .short 0xf3bf
1144− .short 0x4770
1145−#else
1146− mov.w r2, #1
1147− cbnz r1, .L___atomic_test_and_set_8_016
1148−.L___atomic_test_and_set_8_006:
1341+ .int 0xe3a02001
1342+ .int 0xe3510000
1343+ .int 0x1a000005
1344+ .int 0xe1d03f9f
1345+ .int 0xe1c01f92
1346+ .int 0xe3510000
1347+ .int 0x1afffffb
1348+ .int 0xe6ef0073
1349+ .int 0xe12fff1e
1350+ .int 0xee070fba
1351+ .int 0xe1d03f9f
1352+ .int 0xe1c01f92
1353+ .int 0xe3510000
1354+ .int 0x1afffffb
1355+ .int 0xe6ef0073
1356+ .int 0xee070fba
1357+ .int 0xe12fff1e
1358+#else
1359+ mov r2, #1
1360+ cmp r1, #0
1361+ bne .L___atomic_test_and_set_8_3cc
1362+.L___atomic_test_and_set_8_3b4:
11491363 ldrexb r3, [r0]
11501364 strexb r1, r2, [r0]
11511365 cmp r1, #0
1152− bne.n .L___atomic_test_and_set_8_006
1366+ bne .L___atomic_test_and_set_8_3b4
11531367 uxtb r0, r3
11541368 bx lr
1155−.L___atomic_test_and_set_8_016:
1156− dmb ish
1157−.L___atomic_test_and_set_8_01a:
1369+.L___atomic_test_and_set_8_3cc:
1370+ mcr p15, #0, r0, c7, c10, #5
1371+.L___atomic_test_and_set_8_3d0:
11581372 ldrexb r3, [r0]
11591373 strexb r1, r2, [r0]
11601374 cmp r1, #0
1161− bne.n .L___atomic_test_and_set_8_01a
1375+ bne .L___atomic_test_and_set_8_3d0
11621376 uxtb r0, r3
1163− dmb ish
1377+ mcr p15, #0, r0, c7, c10, #5
11641378 bx lr
11651379 .size _(__atomic_test_and_set_8), .-_(__atomic_test_and_set_8)
11661380
@@ -1169,10 +1383,10 @@ _(__atomic_test_and_set_8): · 2 unmodified lines
11691383 .type _(atomic_thread_fence), %function
11701384 _(atomic_thread_fence):
11711385 #ifdef __TINYC__
1172− .short 0xf3bf
1173− .short 0x4770
1386+ .int 0xee070fba
1387+ .int 0xe12fff1e
11741388 #else
1175− dmb ish
1389+ mcr p15, #0, r0, c7, c10, #5
11761390 bx lr
11771391 .size _(atomic_thread_fence), .-_(atomic_thread_fence)
11781392
@@ -1181,7 +1395,7 @@ _(atomic_thread_fence): · 2 unmodified lines
11811395 .type _(atomic_signal_fence), %function
11821396 _(atomic_signal_fence):
11831397 #ifdef __TINYC__
1184− .short 0x4770
1398+ .int 0xe12fff1e
11851399 #else
11861400 bx lr
11871401 .size _(atomic_signal_fence), .-_(atomic_signal_fence)
@@ -1191,25 +1405,25 @@ _(atomic_signal_fence): · 3 unmodified lines
11911405 .type _(atomic_flag_test_and_set), %function
11921406 _(atomic_flag_test_and_set):
11931407 #ifdef __TINYC__
1194− .short 0xf04f
1195− .short 0xf3bf
1196− .short 0xe8d0
1197− .short 0xe8c0
1198− .short 0x2900
1199− .short 0xd1f9
1200− .short 0xb2d8
1201− .short 0xf3bf
1202− .short 0x4770
1203−#else
1204− mov.w r2, #1
1205− dmb ish
1206−.L_atomic_flag_test_and_set_008:
1408+ .int 0xe3a02001
1409+ .int 0xee070fba
1410+ .int 0xe1d03f9f
1411+ .int 0xe1c01f92
1412+ .int 0xe3510000
1413+ .int 0x1afffffb
1414+ .int 0xe6ef0073
1415+ .int 0xee070fba
1416+ .int 0xe12fff1e
1417+#else
1418+ mov r2, #1
1419+ mcr p15, #0, r0, c7, c10, #5
1420+.L_atomic_flag_test_and_set_400:
12071421 ldrexb r3, [r0]
12081422 strexb r1, r2, [r0]
12091423 cmp r1, #0
1210− bne.n .L_atomic_flag_test_and_set_008
1424+ bne .L_atomic_flag_test_and_set_400
12111425 uxtb r0, r3
1212− dmb ish
1426+ mcr p15, #0, r0, c7, c10, #5
12131427 bx lr
12141428 .size _(atomic_flag_test_and_set), .-_(atomic_flag_test_and_set)
12151429
@@ -1218,25 +1432,25 @@ _(atomic_flag_test_and_set): · 2 unmodified lines
12181432 .type _(atomic_flag_test_and_set_explicit), %function
12191433 _(atomic_flag_test_and_set_explicit):
12201434 #ifdef __TINYC__
1221− .short 0xf04f
1222− .short 0xf3bf
1223− .short 0xe8d0
1224− .short 0xe8c0
1225− .short 0x2900
1226− .short 0xd1f9
1227− .short 0xb2d8
1228− .short 0xf3bf
1229− .short 0x4770
1230−#else
1231− mov.w r2, #1
1232− dmb ish
1233−.L_atomic_flag_test_and_set_explicit_024:
1435+ .int 0xe3a02001
1436+ .int 0xee070fba
1437+ .int 0xe1d03f9f
1438+ .int 0xe1c01f92
1439+ .int 0xe3510000
1440+ .int 0x1afffffb
1441+ .int 0xe6ef0073
1442+ .int 0xee070fba
1443+ .int 0xe12fff1e
1444+#else
1445+ mov r2, #1
1446+ mcr p15, #0, r0, c7, c10, #5
1447+.L_atomic_flag_test_and_set_explicit_424:
12341448 ldrexb r3, [r0]
12351449 strexb r1, r2, [r0]
12361450 cmp r1, #0
1237− bne.n .L_atomic_flag_test_and_set_explicit_024
1451+ bne .L_atomic_flag_test_and_set_explicit_424
12381452 uxtb r0, r3
1239− dmb ish
1453+ mcr p15, #0, r0, c7, c10, #5
12401454 bx lr
12411455 .size _(atomic_flag_test_and_set_explicit), .-_(atomic_flag_test_and_set_explicit)
12421456
@@ -1245,16 +1459,16 @@ _(atomic_flag_test_and_set_explicit): · 2 unmodified lines
12451459 .type _(atomic_flag_clear), %function
12461460 _(atomic_flag_clear):
12471461 #ifdef __TINYC__
1248− .short 0x2300
1249− .short 0xf3bf
1250− .short 0x7003
1251− .short 0xf3bf
1252− .short 0x4770
1462+ .int 0xe3b03000
1463+ .int 0xee070fba
1464+ .int 0xe5c03000
1465+ .int 0xee070fba
1466+ .int 0xe12fff1e
12531467 #else
12541468 movs r3, #0
1255− dmb ish
1256− strb r3, [r0, #0]
1257− dmb ish
1469+ mcr p15, #0, r0, c7, c10, #5
1470+ strb r3, [r0]
1471+ mcr p15, #0, r0, c7, c10, #5
12581472 bx lr
12591473 .size _(atomic_flag_clear), .-_(atomic_flag_clear)
12601474
@@ -1263,16 +1477,16 @@ _(atomic_flag_clear): · 2 unmodified lines
12631477 .type _(atomic_flag_clear_explicit), %function
12641478 _(atomic_flag_clear_explicit):
12651479 #ifdef __TINYC__
1266− .short 0x2300
1267− .short 0xf3bf
1268− .short 0x7003
1269− .short 0xf3bf
1270− .short 0x4770
1480+ .int 0xe3b03000
1481+ .int 0xee070fba
1482+ .int 0xe5c03000
1483+ .int 0xee070fba
1484+ .int 0xe12fff1e
12711485 #else
12721486 movs r3, #0
1273− dmb ish
1274− strb r3, [r0, #0]
1275− dmb ish
1487+ mcr p15, #0, r0, c7, c10, #5
1488+ strb r3, [r0]
1489+ mcr p15, #0, r0, c7, c10, #5
12761490 bx lr
12771491 .size _(atomic_flag_clear_explicit), .-_(atomic_flag_clear_explicit)
12781492

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