root/src/pkg/runtime/atomic_386.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. runtime·atomicload
  2. runtime·atomicloadp
  3. runtime·xadd64
  4. runtime·xchg64

// 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 "../../cmd/ld/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;
}

/* [<][>][^][v][top][bottom][index][help] */