github.com/afumu/libc@v0.0.6/musl/src/thread/sh/atomics.s (about)

     1  /* Contract for all versions is same as cas.l r2,r3,@r0
     2   * pr and r1 are also clobbered (by jsr & r1 as temp).
     3   * r0,r2,r4-r15 must be preserved.
     4   * r3 contains result (==r2 iff cas succeeded). */
     5  
     6  	.align 2
     7  .global __sh_cas_gusa
     8  .hidden __sh_cas_gusa
     9  __sh_cas_gusa:
    10  	mov.l r5,@-r15
    11  	mov.l r4,@-r15
    12  	mov r0,r4
    13  	mova 1f,r0
    14  	mov r15,r1
    15  	mov #(0f-1f),r15
    16  0:	mov.l @r4,r5
    17  	cmp/eq r5,r2
    18  	bf 1f
    19  	mov.l r3,@r4
    20  1:	mov r1,r15
    21  	mov r5,r3
    22  	mov r4,r0
    23  	mov.l @r15+,r4
    24  	rts
    25  	 mov.l @r15+,r5
    26  
    27  .global __sh_cas_llsc
    28  .hidden __sh_cas_llsc
    29  __sh_cas_llsc:
    30  	mov r0,r1
    31  	.word 0x00ab /* synco */
    32  0:	.word 0x0163 /* movli.l @r1,r0 */
    33  	cmp/eq r0,r2
    34  	bf 1f
    35  	mov r3,r0
    36  	.word 0x0173 /* movco.l r0,@r1 */
    37  	bf 0b
    38  	mov r2,r0
    39  1:	.word 0x00ab /* synco */
    40  	mov r0,r3
    41  	rts
    42  	 mov r1,r0
    43  
    44  .global __sh_cas_imask
    45  .hidden __sh_cas_imask
    46  __sh_cas_imask:
    47  	mov r0,r1
    48  	stc sr,r0
    49  	mov.l r0,@-r15
    50  	or #0xf0,r0
    51  	ldc r0,sr
    52  	mov.l @r1,r0
    53  	cmp/eq r0,r2
    54  	bf 1f
    55  	mov.l r3,@r1
    56  1:	ldc.l @r15+,sr
    57  	mov r0,r3
    58  	rts
    59  	 mov r1,r0
    60  
    61  .global __sh_cas_cas_l
    62  .hidden __sh_cas_cas_l
    63  __sh_cas_cas_l:
    64  	rts
    65  	 .word 0x2323 /* cas.l r2,r3,@r0 */