...
Run Format

Text file src/sync/atomic/asm_nacl_arm.s

Documentation: sync/atomic

     1	// Copyright 2014 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	#include "textflag.h"
     6	
     7	// NaCl/ARM atomic operations.
     8	// NaCl/ARM explicitly targets ARMv7A.
     9	
    10	TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0
    11		B ·CompareAndSwapUint32(SB)
    12	
    13	TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0
    14		B ·armCompareAndSwapUint32(SB)
    15	
    16	TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0
    17		B ·CompareAndSwapUint32(SB)
    18	
    19	TEXT ·AddInt32(SB),NOSPLIT,$0
    20		B ·AddUint32(SB)
    21	
    22	TEXT ·AddUint32(SB),NOSPLIT,$0
    23		B ·armAddUint32(SB)
    24	
    25	TEXT ·AddUintptr(SB),NOSPLIT,$0
    26		B ·AddUint32(SB)
    27	
    28	TEXT ·SwapInt32(SB),NOSPLIT,$0
    29		B ·SwapUint32(SB)
    30	
    31	TEXT ·SwapUint32(SB),NOSPLIT,$0
    32		B ·armSwapUint32(SB)
    33	
    34	TEXT ·SwapUintptr(SB),NOSPLIT,$0
    35		B ·SwapUint32(SB)
    36	
    37	TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0
    38		B ·CompareAndSwapUint64(SB)
    39	
    40	TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$-4
    41		B ·armCompareAndSwapUint64(SB)
    42	
    43	TEXT ·AddInt64(SB),NOSPLIT,$0
    44		B ·addUint64(SB)
    45	
    46	TEXT ·AddUint64(SB),NOSPLIT,$0
    47		B ·addUint64(SB)
    48	
    49	TEXT ·SwapInt64(SB),NOSPLIT,$0
    50		B ·swapUint64(SB)
    51	
    52	TEXT ·SwapUint64(SB),NOSPLIT,$0
    53		B ·swapUint64(SB)
    54	
    55	TEXT ·LoadInt32(SB),NOSPLIT,$0
    56		B ·LoadUint32(SB)
    57	
    58	TEXT ·LoadUint32(SB),NOSPLIT,$0-8
    59		MOVW addr+0(FP), R1
    60	load32loop:
    61		LDREX (R1), R2		// loads R2
    62		STREX R2, (R1), R0	// stores R2
    63		CMP $0, R0
    64		BNE load32loop
    65		MOVW R2, val+4(FP)
    66		RET
    67	
    68	TEXT ·LoadInt64(SB),NOSPLIT,$0
    69		B ·loadUint64(SB)
    70	
    71	TEXT ·LoadUint64(SB),NOSPLIT,$0
    72		B ·loadUint64(SB)
    73	
    74	TEXT ·LoadUintptr(SB),NOSPLIT,$0
    75		B ·LoadUint32(SB)
    76	
    77	TEXT ·LoadPointer(SB),NOSPLIT,$0
    78		B ·LoadUint32(SB)
    79	
    80	TEXT ·StoreInt32(SB),NOSPLIT,$0
    81		B ·StoreUint32(SB)
    82	
    83	TEXT ·StoreUint32(SB),NOSPLIT,$0-8
    84		MOVW addr+0(FP), R1
    85		MOVW val+4(FP), R2
    86	storeloop:
    87		LDREX (R1), R4		// loads R4
    88		STREX R2, (R1), R0	// stores R2
    89		CMP $0, R0
    90		BNE storeloop
    91		RET
    92	
    93	TEXT ·StoreInt64(SB),NOSPLIT,$0
    94		B ·storeUint64(SB)
    95	
    96	TEXT ·StoreUint64(SB),NOSPLIT,$0
    97		B ·storeUint64(SB)
    98	
    99	TEXT ·StoreUintptr(SB),NOSPLIT,$0
   100		B ·StoreUint32(SB)

View as plain text