atomics

package module
v0.0.0-...-c2751b7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 6, 2019 License: MIT Imports: 0 Imported by: 0

README

atomics

All the AMD64 atomic instructions, exposed as Go functions: GoDoc

⚠️ PRE-ALPHA ⚠️

Features

  • LOCK {ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,CMPXCHG16B,DEC,INC,NEG,NOT,OR,SBB,SUB,XOR,XADD} and XCHG, for all possible operand sizes
  • XBEGIN, XABORT, XEND and XTEST (Intel TSX RTM transactional memory instructions)

Notes

  • This is currently an AMD64-only package; none of the functions are available if not building for amd64.
  • Some of the functions are hard to use reliably due to the nature of the Go compiler (e.g. those that depend on the contents of the FLAGS register, like AddWithCarry or SubtractWithBorrow); they are included for completeness and because they can be used, if proper care is used.
  • Before using the TSX RTM functions, you must ensure that the processors supports them by using e.g. github.com/intel-go/cpuid:
    if cpuid.HasExtendedFeature(cpuid.RTM) {
        // OK to use XBEGIN/XTEST/XABORT/XEND
    }
    

Development

The atomics instructions are defined in gen.go. gen.go will produce the files atomic_amd64.{go,s} by running:

go generate gen.go

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddAndSwapInt

func AddAndSwapInt(addr *int, a0 int) int

func AddAndSwapInt16

func AddAndSwapInt16(addr *int16, a0 int16) int16

func AddAndSwapInt32

func AddAndSwapInt32(addr *int32, a0 int32) int32

func AddAndSwapInt64

func AddAndSwapInt64(addr *int64, a0 int64) int64

func AddAndSwapInt8

func AddAndSwapInt8(addr *int8, a0 int8) int8

func AddAndSwapUint

func AddAndSwapUint(addr *uint, a0 uint) uint

func AddAndSwapUint16

func AddAndSwapUint16(addr *uint16, a0 uint16) uint16

func AddAndSwapUint32

func AddAndSwapUint32(addr *uint32, a0 uint32) uint32

func AddAndSwapUint64

func AddAndSwapUint64(addr *uint64, a0 uint64) uint64

func AddAndSwapUint8

func AddAndSwapUint8(addr *uint8, a0 uint8) uint8

func AddAndSwapUintptr

func AddAndSwapUintptr(addr *uintptr, a0 uintptr) uintptr

func AddInt

func AddInt(addr *int, a0 int)

func AddInt16

func AddInt16(addr *int16, a0 int16)

func AddInt32

func AddInt32(addr *int32, a0 int32)

func AddInt64

func AddInt64(addr *int64, a0 int64)

func AddInt8

func AddInt8(addr *int8, a0 int8)

func AddUint

func AddUint(addr *uint, a0 uint)

func AddUint16

func AddUint16(addr *uint16, a0 uint16)

func AddUint32

func AddUint32(addr *uint32, a0 uint32)

func AddUint64

func AddUint64(addr *uint64, a0 uint64)

func AddUint8

func AddUint8(addr *uint8, a0 uint8)

func AddUintptr

func AddUintptr(addr *uintptr, a0 uintptr)

func AddWithCarryInt

func AddWithCarryInt(addr *int, a0 int)

func AddWithCarryInt16

func AddWithCarryInt16(addr *int16, a0 int16)

func AddWithCarryInt32

func AddWithCarryInt32(addr *int32, a0 int32)

func AddWithCarryInt64

func AddWithCarryInt64(addr *int64, a0 int64)

func AddWithCarryInt8

func AddWithCarryInt8(addr *int8, a0 int8)

func AddWithCarryUint

func AddWithCarryUint(addr *uint, a0 uint)

func AddWithCarryUint16

func AddWithCarryUint16(addr *uint16, a0 uint16)

func AddWithCarryUint32

func AddWithCarryUint32(addr *uint32, a0 uint32)

func AddWithCarryUint64

func AddWithCarryUint64(addr *uint64, a0 uint64)

func AddWithCarryUint8

func AddWithCarryUint8(addr *uint8, a0 uint8)

func AddWithCarryUintptr

func AddWithCarryUintptr(addr *uintptr, a0 uintptr)

func AndInt

func AndInt(addr *int, a0 int)

func AndInt16

func AndInt16(addr *int16, a0 int16)

func AndInt32

func AndInt32(addr *int32, a0 int32)

func AndInt64

func AndInt64(addr *int64, a0 int64)

func AndInt8

func AndInt8(addr *int8, a0 int8)

func AndUint

func AndUint(addr *uint, a0 uint)

func AndUint16

func AndUint16(addr *uint16, a0 uint16)

func AndUint32

func AndUint32(addr *uint32, a0 uint32)

func AndUint64

func AndUint64(addr *uint64, a0 uint64)

func AndUint8

func AndUint8(addr *uint8, a0 uint8)

func AndUintptr

func AndUintptr(addr *uintptr, a0 uintptr)

func BitTestAndComplementInt

func BitTestAndComplementInt(addr *int, a0 int) int

func BitTestAndComplementInt16

func BitTestAndComplementInt16(addr *int16, a0 int16) int16

func BitTestAndComplementInt32

func BitTestAndComplementInt32(addr *int32, a0 int32) int32

func BitTestAndComplementInt64

func BitTestAndComplementInt64(addr *int64, a0 int64) int64

func BitTestAndComplementUint

func BitTestAndComplementUint(addr *uint, a0 uint) uint

func BitTestAndComplementUint16

func BitTestAndComplementUint16(addr *uint16, a0 uint16) uint16

func BitTestAndComplementUint32

func BitTestAndComplementUint32(addr *uint32, a0 uint32) uint32

func BitTestAndComplementUint64

func BitTestAndComplementUint64(addr *uint64, a0 uint64) uint64

func BitTestAndComplementUintptr

func BitTestAndComplementUintptr(addr *uintptr, a0 uintptr) uintptr

func BitTestAndResetInt

func BitTestAndResetInt(addr *int, a0 int) int

func BitTestAndResetInt16

func BitTestAndResetInt16(addr *int16, a0 int16) int16

func BitTestAndResetInt32

func BitTestAndResetInt32(addr *int32, a0 int32) int32

func BitTestAndResetInt64

func BitTestAndResetInt64(addr *int64, a0 int64) int64

func BitTestAndResetUint

func BitTestAndResetUint(addr *uint, a0 uint) uint

func BitTestAndResetUint16

func BitTestAndResetUint16(addr *uint16, a0 uint16) uint16

func BitTestAndResetUint32

func BitTestAndResetUint32(addr *uint32, a0 uint32) uint32

func BitTestAndResetUint64

func BitTestAndResetUint64(addr *uint64, a0 uint64) uint64

func BitTestAndResetUintptr

func BitTestAndResetUintptr(addr *uintptr, a0 uintptr) uintptr

func BitTestAndSetInt

func BitTestAndSetInt(addr *int, a0 int) int

func BitTestAndSetInt16

func BitTestAndSetInt16(addr *int16, a0 int16) int16

func BitTestAndSetInt32

func BitTestAndSetInt32(addr *int32, a0 int32) int32

func BitTestAndSetInt64

func BitTestAndSetInt64(addr *int64, a0 int64) int64

func BitTestAndSetUint

func BitTestAndSetUint(addr *uint, a0 uint) uint

func BitTestAndSetUint16

func BitTestAndSetUint16(addr *uint16, a0 uint16) uint16

func BitTestAndSetUint32

func BitTestAndSetUint32(addr *uint32, a0 uint32) uint32

func BitTestAndSetUint64

func BitTestAndSetUint64(addr *uint64, a0 uint64) uint64

func BitTestAndSetUintptr

func BitTestAndSetUintptr(addr *uintptr, a0 uintptr) uintptr

func CompareAndSwap2xInt

func CompareAndSwap2xInt(addr *int, a0 int, a1 int, a2 int, a3 int) (int, int)

func CompareAndSwap2xInt64

func CompareAndSwap2xInt64(addr *int64, a0 int64, a1 int64, a2 int64, a3 int64) (int64, int64)

func CompareAndSwap2xUint

func CompareAndSwap2xUint(addr *uint, a0 uint, a1 uint, a2 uint, a3 uint) (uint, uint)

func CompareAndSwap2xUint64

func CompareAndSwap2xUint64(addr *uint64, a0 uint64, a1 uint64, a2 uint64, a3 uint64) (uint64, uint64)

func CompareAndSwap2xUintptr

func CompareAndSwap2xUintptr(addr *uintptr, a0 uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (uintptr, uintptr)

func CompareAndSwapInt

func CompareAndSwapInt(addr *int, a0 int, a1 int) int

func CompareAndSwapInt16

func CompareAndSwapInt16(addr *int16, a0 int16, a1 int16) int16

func CompareAndSwapInt32

func CompareAndSwapInt32(addr *int32, a0 int32, a1 int32) int32

func CompareAndSwapInt64

func CompareAndSwapInt64(addr *int64, a0 int64, a1 int64) int64

func CompareAndSwapInt8

func CompareAndSwapInt8(addr *int8, a0 int8, a1 int8) int8

func CompareAndSwapUint

func CompareAndSwapUint(addr *uint, a0 uint, a1 uint) uint

func CompareAndSwapUint16

func CompareAndSwapUint16(addr *uint16, a0 uint16, a1 uint16) uint16

func CompareAndSwapUint32

func CompareAndSwapUint32(addr *uint32, a0 uint32, a1 uint32) uint32

func CompareAndSwapUint64

func CompareAndSwapUint64(addr *uint64, a0 uint64, a1 uint64) uint64

func CompareAndSwapUint8

func CompareAndSwapUint8(addr *uint8, a0 uint8, a1 uint8) uint8

func CompareAndSwapUintptr

func CompareAndSwapUintptr(addr *uintptr, a0 uintptr, a1 uintptr) uintptr

func DecrementAndCheckZeroInt

func DecrementAndCheckZeroInt(addr *int) int

func DecrementAndCheckZeroInt16

func DecrementAndCheckZeroInt16(addr *int16) int16

func DecrementAndCheckZeroInt32

func DecrementAndCheckZeroInt32(addr *int32) int32

func DecrementAndCheckZeroInt64

func DecrementAndCheckZeroInt64(addr *int64) int64

func DecrementAndCheckZeroInt8

func DecrementAndCheckZeroInt8(addr *int8) int8

func DecrementAndCheckZeroUint

func DecrementAndCheckZeroUint(addr *uint) uint

func DecrementAndCheckZeroUint16

func DecrementAndCheckZeroUint16(addr *uint16) uint16

func DecrementAndCheckZeroUint32

func DecrementAndCheckZeroUint32(addr *uint32) uint32

func DecrementAndCheckZeroUint64

func DecrementAndCheckZeroUint64(addr *uint64) uint64

func DecrementAndCheckZeroUint8

func DecrementAndCheckZeroUint8(addr *uint8) uint8

func DecrementAndCheckZeroUintptr

func DecrementAndCheckZeroUintptr(addr *uintptr) uintptr

func DecrementInt

func DecrementInt(addr *int)

func DecrementInt16

func DecrementInt16(addr *int16)

func DecrementInt32

func DecrementInt32(addr *int32)

func DecrementInt64

func DecrementInt64(addr *int64)

func DecrementInt8

func DecrementInt8(addr *int8)

func DecrementUint

func DecrementUint(addr *uint)

func DecrementUint16

func DecrementUint16(addr *uint16)

func DecrementUint32

func DecrementUint32(addr *uint32)

func DecrementUint64

func DecrementUint64(addr *uint64)

func DecrementUint8

func DecrementUint8(addr *uint8)

func DecrementUintptr

func DecrementUintptr(addr *uintptr)

func Flags

func Flags() uint8

func IncrementAndCheckZeroInt

func IncrementAndCheckZeroInt(addr *int) int

func IncrementAndCheckZeroInt16

func IncrementAndCheckZeroInt16(addr *int16) int16

func IncrementAndCheckZeroInt32

func IncrementAndCheckZeroInt32(addr *int32) int32

func IncrementAndCheckZeroInt64

func IncrementAndCheckZeroInt64(addr *int64) int64

func IncrementAndCheckZeroInt8

func IncrementAndCheckZeroInt8(addr *int8) int8

func IncrementAndCheckZeroUint

func IncrementAndCheckZeroUint(addr *uint) uint

func IncrementAndCheckZeroUint16

func IncrementAndCheckZeroUint16(addr *uint16) uint16

func IncrementAndCheckZeroUint32

func IncrementAndCheckZeroUint32(addr *uint32) uint32

func IncrementAndCheckZeroUint64

func IncrementAndCheckZeroUint64(addr *uint64) uint64

func IncrementAndCheckZeroUint8

func IncrementAndCheckZeroUint8(addr *uint8) uint8

func IncrementAndCheckZeroUintptr

func IncrementAndCheckZeroUintptr(addr *uintptr) uintptr

func IncrementInt

func IncrementInt(addr *int)

func IncrementInt16

func IncrementInt16(addr *int16)

func IncrementInt32

func IncrementInt32(addr *int32)

func IncrementInt64

func IncrementInt64(addr *int64)

func IncrementInt8

func IncrementInt8(addr *int8)

func IncrementUint

func IncrementUint(addr *uint)

func IncrementUint16

func IncrementUint16(addr *uint16)

func IncrementUint32

func IncrementUint32(addr *uint32)

func IncrementUint64

func IncrementUint64(addr *uint64)

func IncrementUint8

func IncrementUint8(addr *uint8)

func IncrementUintptr

func IncrementUintptr(addr *uintptr)

func NegateInt

func NegateInt(addr *int)

func NegateInt16

func NegateInt16(addr *int16)

func NegateInt32

func NegateInt32(addr *int32)

func NegateInt64

func NegateInt64(addr *int64)

func NegateInt8

func NegateInt8(addr *int8)

func NegateUint

func NegateUint(addr *uint)

func NegateUint16

func NegateUint16(addr *uint16)

func NegateUint32

func NegateUint32(addr *uint32)

func NegateUint64

func NegateUint64(addr *uint64)

func NegateUint8

func NegateUint8(addr *uint8)

func NegateUintptr

func NegateUintptr(addr *uintptr)

func NotInt

func NotInt(addr *int)

func NotInt16

func NotInt16(addr *int16)

func NotInt32

func NotInt32(addr *int32)

func NotInt64

func NotInt64(addr *int64)

func NotInt8

func NotInt8(addr *int8)

func NotUint

func NotUint(addr *uint)

func NotUint16

func NotUint16(addr *uint16)

func NotUint32

func NotUint32(addr *uint32)

func NotUint64

func NotUint64(addr *uint64)

func NotUint8

func NotUint8(addr *uint8)

func NotUintptr

func NotUintptr(addr *uintptr)

func OrInt

func OrInt(addr *int, a0 int)

func OrInt16

func OrInt16(addr *int16, a0 int16)

func OrInt32

func OrInt32(addr *int32, a0 int32)

func OrInt64

func OrInt64(addr *int64, a0 int64)

func OrInt8

func OrInt8(addr *int8, a0 int8)

func OrUint

func OrUint(addr *uint, a0 uint)

func OrUint16

func OrUint16(addr *uint16, a0 uint16)

func OrUint32

func OrUint32(addr *uint32, a0 uint32)

func OrUint64

func OrUint64(addr *uint64, a0 uint64)

func OrUint8

func OrUint8(addr *uint8, a0 uint8)

func OrUintptr

func OrUintptr(addr *uintptr, a0 uintptr)

func SubtractInt

func SubtractInt(addr *int, a0 int)

func SubtractInt16

func SubtractInt16(addr *int16, a0 int16)

func SubtractInt32

func SubtractInt32(addr *int32, a0 int32)

func SubtractInt64

func SubtractInt64(addr *int64, a0 int64)

func SubtractInt8

func SubtractInt8(addr *int8, a0 int8)

func SubtractUint

func SubtractUint(addr *uint, a0 uint)

func SubtractUint16

func SubtractUint16(addr *uint16, a0 uint16)

func SubtractUint32

func SubtractUint32(addr *uint32, a0 uint32)

func SubtractUint64

func SubtractUint64(addr *uint64, a0 uint64)

func SubtractUint8

func SubtractUint8(addr *uint8, a0 uint8)

func SubtractUintptr

func SubtractUintptr(addr *uintptr, a0 uintptr)

func SubtractWithBorrowInt

func SubtractWithBorrowInt(addr *int, a0 int)

func SubtractWithBorrowInt16

func SubtractWithBorrowInt16(addr *int16, a0 int16)

func SubtractWithBorrowInt32

func SubtractWithBorrowInt32(addr *int32, a0 int32)

func SubtractWithBorrowInt64

func SubtractWithBorrowInt64(addr *int64, a0 int64)

func SubtractWithBorrowInt8

func SubtractWithBorrowInt8(addr *int8, a0 int8)

func SubtractWithBorrowUint

func SubtractWithBorrowUint(addr *uint, a0 uint)

func SubtractWithBorrowUint16

func SubtractWithBorrowUint16(addr *uint16, a0 uint16)

func SubtractWithBorrowUint32

func SubtractWithBorrowUint32(addr *uint32, a0 uint32)

func SubtractWithBorrowUint64

func SubtractWithBorrowUint64(addr *uint64, a0 uint64)

func SubtractWithBorrowUint8

func SubtractWithBorrowUint8(addr *uint8, a0 uint8)

func SubtractWithBorrowUintptr

func SubtractWithBorrowUintptr(addr *uintptr, a0 uintptr)

func SwapInt

func SwapInt(addr *int, a0 int) int

func SwapInt16

func SwapInt16(addr *int16, a0 int16) int16

func SwapInt32

func SwapInt32(addr *int32, a0 int32) int32

func SwapInt64

func SwapInt64(addr *int64, a0 int64) int64

func SwapInt8

func SwapInt8(addr *int8, a0 int8) int8

func SwapUint

func SwapUint(addr *uint, a0 uint) uint

func SwapUint16

func SwapUint16(addr *uint16, a0 uint16) uint16

func SwapUint32

func SwapUint32(addr *uint32, a0 uint32) uint32

func SwapUint64

func SwapUint64(addr *uint64, a0 uint64) uint64

func SwapUint8

func SwapUint8(addr *uint8, a0 uint8) uint8

func SwapUintptr

func SwapUintptr(addr *uintptr, a0 uintptr) uintptr

func XABORT

func XABORT(reason uint8)

XABORT aborts the current TSX RTM transaction, if any. The provided reason will be available in the return value of XBEGIN. If no transaction is executing, it is a no-op. The processor must support TSX or a panic will occur.

func XBEGIN

func XBEGIN() uint32

XBEGIN starts a TSX RTM transaction. The processor must support TSX or a panic will occur.

func XEND

func XEND()

XEND commits a TSX RTM transaction. A transaction must be open. The processor must support TSX or a panic will occur.

func XTEST

func XTEST() bool

XTEST returns true if we are currently inside a TSX RTM transaction. The processor must support TSX or a panic will occur.

func XorAndCheckZeroInt

func XorAndCheckZeroInt(addr *int, a0 int) int

func XorAndCheckZeroInt16

func XorAndCheckZeroInt16(addr *int16, a0 int16) int16

func XorAndCheckZeroInt32

func XorAndCheckZeroInt32(addr *int32, a0 int32) int32

func XorAndCheckZeroInt64

func XorAndCheckZeroInt64(addr *int64, a0 int64) int64

func XorAndCheckZeroInt8

func XorAndCheckZeroInt8(addr *int8, a0 int8) int8

func XorAndCheckZeroUint

func XorAndCheckZeroUint(addr *uint, a0 uint) uint

func XorAndCheckZeroUint16

func XorAndCheckZeroUint16(addr *uint16, a0 uint16) uint16

func XorAndCheckZeroUint32

func XorAndCheckZeroUint32(addr *uint32, a0 uint32) uint32

func XorAndCheckZeroUint64

func XorAndCheckZeroUint64(addr *uint64, a0 uint64) uint64

func XorAndCheckZeroUint8

func XorAndCheckZeroUint8(addr *uint8, a0 uint8) uint8

func XorAndCheckZeroUintptr

func XorAndCheckZeroUintptr(addr *uintptr, a0 uintptr) uintptr

func XorInt

func XorInt(addr *int, a0 int)

func XorInt16

func XorInt16(addr *int16, a0 int16)

func XorInt32

func XorInt32(addr *int32, a0 int32)

func XorInt64

func XorInt64(addr *int64, a0 int64)

func XorInt8

func XorInt8(addr *int8, a0 int8)

func XorUint

func XorUint(addr *uint, a0 uint)

func XorUint16

func XorUint16(addr *uint16, a0 uint16)

func XorUint32

func XorUint32(addr *uint32, a0 uint32)

func XorUint64

func XorUint64(addr *uint64, a0 uint64)

func XorUint8

func XorUint8(addr *uint8, a0 uint8)

func XorUintptr

func XorUintptr(addr *uintptr, a0 uintptr)

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL