Text file src/internal/runtime/atomic/sys_nonlinux_arm.s

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build !linux
     6  
     7  #include "textflag.h"
     8  
     9  // TODO(minux): this is only valid for ARMv6+
    10  // bool armcas(int32 *val, int32 old, int32 new)
    11  // Atomically:
    12  //	if(*val == old){
    13  //		*val = new;
    14  //		return 1;
    15  //	}else
    16  //		return 0;
    17  TEXT	·Cas(SB),NOSPLIT,$0
    18  	JMP	·armcas(SB)
    19  
    20  // Non-linux OSes support only single processor machines before ARMv7.
    21  // So we don't need memory barriers if goarm < 7. And we fail loud at
    22  // startup (runtime.checkgoarm) if it is a multi-processor but goarm < 7.
    23  
    24  TEXT	·Load(SB),NOSPLIT|NOFRAME,$0-8
    25  	MOVW	addr+0(FP), R0
    26  	MOVW	(R0), R1
    27  
    28  	MOVB	runtime·goarm(SB), R11
    29  	CMP	$7, R11
    30  	BLT	2(PC)
    31  	DMB	MB_ISH
    32  
    33  	MOVW	R1, ret+4(FP)
    34  	RET
    35  
    36  TEXT	·Store(SB),NOSPLIT,$0-8
    37  	MOVW	addr+0(FP), R1
    38  	MOVW	v+4(FP), R2
    39  
    40  	MOVB	runtime·goarm(SB), R8
    41  	CMP	$7, R8
    42  	BLT	2(PC)
    43  	DMB	MB_ISH
    44  
    45  	MOVW	R2, (R1)
    46  
    47  	CMP	$7, R8
    48  	BLT	2(PC)
    49  	DMB	MB_ISH
    50  	RET
    51  
    52  TEXT	·Load8(SB),NOSPLIT|NOFRAME,$0-5
    53  	MOVW	addr+0(FP), R0
    54  	MOVB	(R0), R1
    55  
    56  	MOVB	runtime·goarm(SB), R11
    57  	CMP	$7, R11
    58  	BLT	2(PC)
    59  	DMB	MB_ISH
    60  
    61  	MOVB	R1, ret+4(FP)
    62  	RET
    63  
    64  TEXT	·Store8(SB),NOSPLIT,$0-5
    65  	MOVW	addr+0(FP), R1
    66  	MOVB	v+4(FP), R2
    67  
    68  	MOVB	runtime·goarm(SB), R8
    69  	CMP	$7, R8
    70  	BLT	2(PC)
    71  	DMB	MB_ISH
    72  
    73  	MOVB	R2, (R1)
    74  
    75  	CMP	$7, R8
    76  	BLT	2(PC)
    77  	DMB	MB_ISH
    78  	RET
    79  
    80  

View as plain text