// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "runtime.h" #include "textflag.h" #pragma textflag NOSPLIT uint32 runtime·atomicload(uint32 volatile* addr) { return *addr; } #pragma textflag NOSPLIT void* runtime·atomicloadp(void* volatile* addr) { return *addr; } #pragma textflag NOSPLIT uint64 runtime·xadd64(uint64 volatile* addr, int64 v) { uint64 old; do old = *addr; while(!runtime·cas64(addr, old, old+v)); return old+v; } #pragma textflag NOSPLIT uint64 runtime·xchg64(uint64 volatile* addr, uint64 v) { uint64 old; do old = *addr; while(!runtime·cas64(addr, old, v)); return old; }