const ( // CpuFeatureSSE3 is the flag to query CpuFeatureFlags.Has for SSEv3 capabilities CpuFeatureSSE3 = uint64(1) // CpuFeatureSSE4_1 is the flag to query CpuFeatureFlags.Has for SSEv4.1 capabilities CpuFeatureSSE4_1 = uint64(1) << 19 // CpuFeatureSSE4_2 is the flag to query CpuFeatureFlags.Has for SSEv4.2 capabilities CpuFeatureSSE4_2 = uint64(1) << 20 )
const ( // CpuExtraFeatureABM is the flag to query CpuFeatureFlags.HasExtra for Advanced Bit Manipulation capabilities (e.g. LZCNT) CpuExtraFeatureABM = uint64(1) << 5 )
const ( // FakeEpochNanos is midnight UTC 2022-01-01 and exposed for testing FakeEpochNanos = 1640995200000 * ms )
FakeNanosleep implements sys.Nanosleep by returning without sleeping.
var FakeNanosleep = sys.Nanosleep(func(int64) {})
FakeOsyield implements sys.Osyield by returning without yielding.
var FakeOsyield = sys.Osyield(func() {})
IsAtLeastGo120 checks features added in 1.20. We can remove this when Go 1.22 is out.
var IsAtLeastGo120 = isAtLeastGo120(runtime.Version())
func CompilerSupported() bool
CompilerSupported is exported for tests and includes constraints here and also the assembler.
func MmapCodeSegment(size int) ([]byte, error)
MmapCodeSegment copies the code into the executable region and returns the byte slice of the region.
See https://man7.org/linux/man-pages/man2/mmap.2.html for mmap API and flags.
func MprotectRX(b []byte) (err error)
MprotectRX is like syscall.Mprotect with RX permission, defined locally so that freebsd compiles.
func MunmapCodeSegment(code []byte) error
MunmapCodeSegment unmaps the given memory region.
func Nanosleep(ns int64)
Nanosleep implements sys.Nanosleep with time.Sleep.
func Nanotime() int64
Nanotime implements sys.Nanotime with runtime.nanotime() if CGO is available and time.Since if not.
func NewFakeNanotime() sys.Nanotime
NewFakeNanotime implements sys.Nanotime that increases by 1ms each reading. See /RATIONALE.md
func NewFakeRandSource() io.Reader
NewFakeRandSource returns a deterministic source of random values.
func NewFakeWalltime() sys.Walltime
NewFakeWalltime implements sys.Walltime with FakeEpochNanos that increases by 1ms each reading. See /RATIONALE.md
func RemapCodeSegment(code []byte, size int) ([]byte, error)
RemapCodeSegment reallocates the memory mapping of an existing code segment to increase its size. The previous code mapping is unmapped and must not be reused after the function returns.
This is similar to mremap(2) on linux, and emulated on platforms which do not have this syscall.
See https://man7.org/linux/man-pages/man2/mremap.2.html
func ToPosixPath(in string) string
ToPosixPath returns the input, as only windows might return backslashes.
func Walltime() (sec int64, nsec int32)
Walltime implements sys.Walltime with time.Now.
Note: This is only notably less efficient than it could be is reading runtime.walltime(). time.Now defensively reads nanotime also, just in case time.Since is used. This doubles the performance impact. However, wall time is likely to be read less frequently than Nanotime. Also, doubling the cost matters less on fast platforms that can return both in <=100ns.
CpuFeatureFlags exposes methods for querying CPU capabilities
type CpuFeatureFlags interface { // Has returns true when the specified flag (represented as uint64) is supported Has(cpuFeature uint64) bool // HasExtra returns true when the specified extraFlag (represented as uint64) is supported HasExtra(cpuFeature uint64) bool }
CpuFeatures exposes the capabilities for this CPU, queried via the Has, HasExtra methods
var CpuFeatures CpuFeatureFlags = loadCpuFeatureFlags()