diff options
| author | kali kaneko (leap communications) <kali@leap.se> | 2021-04-14 16:54:42 +0200 | 
|---|---|---|
| committer | kali kaneko (leap communications) <kali@leap.se> | 2021-04-14 16:54:42 +0200 | 
| commit | 67a0eb7111d3f89e4a0cb21e43aefe6d87d37e04 (patch) | |
| tree | c9b18e0da6e06ac165a485ee957b7850adb12e86 /vendor/golang.org/x/sys/cpu | |
| parent | 2e8f2a2e8e83fd89f956cdde886d5d9d808132da (diff) | |
[pkg] go mod vendor to build debian/ubuntu packages
Diffstat (limited to 'vendor/golang.org/x/sys/cpu')
30 files changed, 1244 insertions, 0 deletions
| diff --git a/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s b/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s new file mode 100644 index 0000000..06f84b8 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s @@ -0,0 +1,17 @@ +// Copyright 2018 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go +// + +TEXT ·syscall6(SB),NOSPLIT,$0-88 +	JMP	syscall·syscall6(SB) + +TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 +	JMP	syscall·rawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go new file mode 100644 index 0000000..ed8da8d --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/byteorder.go @@ -0,0 +1,60 @@ +// Copyright 2019 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. + +package cpu + +import ( +	"runtime" +) + +// byteOrder is a subset of encoding/binary.ByteOrder. +type byteOrder interface { +	Uint32([]byte) uint32 +	Uint64([]byte) uint64 +} + +type littleEndian struct{} +type bigEndian struct{} + +func (littleEndian) Uint32(b []byte) uint32 { +	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 +	return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func (littleEndian) Uint64(b []byte) uint64 { +	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 +	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | +		uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +func (bigEndian) Uint32(b []byte) uint32 { +	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 +	return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 +} + +func (bigEndian) Uint64(b []byte) uint64 { +	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 +	return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | +		uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + +// hostByteOrder returns binary.LittleEndian on little-endian machines and +// binary.BigEndian on big-endian machines. +func hostByteOrder() byteOrder { +	switch runtime.GOARCH { +	case "386", "amd64", "amd64p32", +		"arm", "arm64", +		"mipsle", "mips64le", "mips64p32le", +		"ppc64le", +		"riscv", "riscv64": +		return littleEndian{} +	case "armbe", "arm64be", +		"mips", "mips64", "mips64p32", +		"ppc", "ppc64", +		"s390", "s390x", +		"sparc", "sparc64": +		return bigEndian{} +	} +	panic("unknown architecture") +} diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go new file mode 100644 index 0000000..b4e6ecb --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -0,0 +1,162 @@ +// Copyright 2018 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. + +// Package cpu implements processor feature detection for +// various CPU architectures. +package cpu + +// Initialized reports whether the CPU features were initialized. +// +// For some GOOS/GOARCH combinations initialization of the CPU features depends +// on reading an operating specific file, e.g. /proc/self/auxv on linux/arm +// Initialized will report false if reading the file fails. +var Initialized bool + +// CacheLinePad is used to pad structs to avoid false sharing. +type CacheLinePad struct{ _ [cacheLineSize]byte } + +// X86 contains the supported CPU features of the +// current X86/AMD64 platform. If the current platform +// is not X86/AMD64 then all feature flags are false. +// +// X86 is padded to avoid false sharing. Further the HasAVX +// and HasAVX2 are only set if the OS supports XMM and YMM +// registers in addition to the CPUID feature bit being set. +var X86 struct { +	_            CacheLinePad +	HasAES       bool // AES hardware implementation (AES NI) +	HasADX       bool // Multi-precision add-carry instruction extensions +	HasAVX       bool // Advanced vector extension +	HasAVX2      bool // Advanced vector extension 2 +	HasBMI1      bool // Bit manipulation instruction set 1 +	HasBMI2      bool // Bit manipulation instruction set 2 +	HasERMS      bool // Enhanced REP for MOVSB and STOSB +	HasFMA       bool // Fused-multiply-add instructions +	HasOSXSAVE   bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. +	HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM +	HasPOPCNT    bool // Hamming weight instruction POPCNT. +	HasRDRAND    bool // RDRAND instruction (on-chip random number generator) +	HasRDSEED    bool // RDSEED instruction (on-chip random number generator) +	HasSSE2      bool // Streaming SIMD extension 2 (always available on amd64) +	HasSSE3      bool // Streaming SIMD extension 3 +	HasSSSE3     bool // Supplemental streaming SIMD extension 3 +	HasSSE41     bool // Streaming SIMD extension 4 and 4.1 +	HasSSE42     bool // Streaming SIMD extension 4 and 4.2 +	_            CacheLinePad +} + +// ARM64 contains the supported CPU features of the +// current ARMv8(aarch64) platform. If the current platform +// is not arm64 then all feature flags are false. +var ARM64 struct { +	_           CacheLinePad +	HasFP       bool // Floating-point instruction set (always available) +	HasASIMD    bool // Advanced SIMD (always available) +	HasEVTSTRM  bool // Event stream support +	HasAES      bool // AES hardware implementation +	HasPMULL    bool // Polynomial multiplication instruction set +	HasSHA1     bool // SHA1 hardware implementation +	HasSHA2     bool // SHA2 hardware implementation +	HasCRC32    bool // CRC32 hardware implementation +	HasATOMICS  bool // Atomic memory operation instruction set +	HasFPHP     bool // Half precision floating-point instruction set +	HasASIMDHP  bool // Advanced SIMD half precision instruction set +	HasCPUID    bool // CPUID identification scheme registers +	HasASIMDRDM bool // Rounding double multiply add/subtract instruction set +	HasJSCVT    bool // Javascript conversion from floating-point to integer +	HasFCMA     bool // Floating-point multiplication and addition of complex numbers +	HasLRCPC    bool // Release Consistent processor consistent support +	HasDCPOP    bool // Persistent memory support +	HasSHA3     bool // SHA3 hardware implementation +	HasSM3      bool // SM3 hardware implementation +	HasSM4      bool // SM4 hardware implementation +	HasASIMDDP  bool // Advanced SIMD double precision instruction set +	HasSHA512   bool // SHA512 hardware implementation +	HasSVE      bool // Scalable Vector Extensions +	HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 +	_           CacheLinePad +} + +// ARM contains the supported CPU features of the current ARM (32-bit) platform. +// All feature flags are false if: +//   1. the current platform is not arm, or +//   2. the current operating system is not Linux. +var ARM struct { +	_           CacheLinePad +	HasSWP      bool // SWP instruction support +	HasHALF     bool // Half-word load and store support +	HasTHUMB    bool // ARM Thumb instruction set +	Has26BIT    bool // Address space limited to 26-bits +	HasFASTMUL  bool // 32-bit operand, 64-bit result multiplication support +	HasFPA      bool // Floating point arithmetic support +	HasVFP      bool // Vector floating point support +	HasEDSP     bool // DSP Extensions support +	HasJAVA     bool // Java instruction set +	HasIWMMXT   bool // Intel Wireless MMX technology support +	HasCRUNCH   bool // MaverickCrunch context switching and handling +	HasTHUMBEE  bool // Thumb EE instruction set +	HasNEON     bool // NEON instruction set +	HasVFPv3    bool // Vector floating point version 3 support +	HasVFPv3D16 bool // Vector floating point version 3 D8-D15 +	HasTLS      bool // Thread local storage support +	HasVFPv4    bool // Vector floating point version 4 support +	HasIDIVA    bool // Integer divide instruction support in ARM mode +	HasIDIVT    bool // Integer divide instruction support in Thumb mode +	HasVFPD32   bool // Vector floating point version 3 D15-D31 +	HasLPAE     bool // Large Physical Address Extensions +	HasEVTSTRM  bool // Event stream support +	HasAES      bool // AES hardware implementation +	HasPMULL    bool // Polynomial multiplication instruction set +	HasSHA1     bool // SHA1 hardware implementation +	HasSHA2     bool // SHA2 hardware implementation +	HasCRC32    bool // CRC32 hardware implementation +	_           CacheLinePad +} + +// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms. +// If the current platform is not ppc64/ppc64le then all feature flags are false. +// +// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00, +// since there are no optional categories. There are some exceptions that also +// require kernel support to work (DARN, SCV), so there are feature bits for +// those as well. The minimum processor requirement is POWER8 (ISA 2.07). +// The struct is padded to avoid false sharing. +var PPC64 struct { +	_        CacheLinePad +	HasDARN  bool // Hardware random number generator (requires kernel enablement) +	HasSCV   bool // Syscall vectored (requires kernel enablement) +	IsPOWER8 bool // ISA v2.07 (POWER8) +	IsPOWER9 bool // ISA v3.00 (POWER9) +	_        CacheLinePad +} + +// S390X contains the supported CPU features of the current IBM Z +// (s390x) platform. If the current platform is not IBM Z then all +// feature flags are false. +// +// S390X is padded to avoid false sharing. Further HasVX is only set +// if the OS supports vector registers in addition to the STFLE +// feature bit being set. +var S390X struct { +	_         CacheLinePad +	HasZARCH  bool // z/Architecture mode is active [mandatory] +	HasSTFLE  bool // store facility list extended +	HasLDISP  bool // long (20-bit) displacements +	HasEIMM   bool // 32-bit immediates +	HasDFP    bool // decimal floating point +	HasETF3EH bool // ETF-3 enhanced +	HasMSA    bool // message security assist (CPACF) +	HasAES    bool // KM-AES{128,192,256} functions +	HasAESCBC bool // KMC-AES{128,192,256} functions +	HasAESCTR bool // KMCTR-AES{128,192,256} functions +	HasAESGCM bool // KMA-GCM-AES{128,192,256} functions +	HasGHASH  bool // KIMD-GHASH function +	HasSHA1   bool // K{I,L}MD-SHA-1 functions +	HasSHA256 bool // K{I,L}MD-SHA-256 functions +	HasSHA512 bool // K{I,L}MD-SHA-512 functions +	HasSHA3   bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions +	HasVX     bool // vector facility +	HasVXE    bool // vector-enhancements facility 1 +	_         CacheLinePad +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_aix_ppc64.go b/vendor/golang.org/x/sys/cpu/cpu_aix_ppc64.go new file mode 100644 index 0000000..be60272 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_aix_ppc64.go @@ -0,0 +1,34 @@ +// Copyright 2019 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. + +// +build aix,ppc64 + +package cpu + +const cacheLineSize = 128 + +const ( +	// getsystemcfg constants +	_SC_IMPL     = 2 +	_IMPL_POWER8 = 0x10000 +	_IMPL_POWER9 = 0x20000 +) + +func init() { +	impl := getsystemcfg(_SC_IMPL) +	if impl&_IMPL_POWER8 != 0 { +		PPC64.IsPOWER8 = true +	} +	if impl&_IMPL_POWER9 != 0 { +		PPC64.IsPOWER9 = true +	} + +	Initialized = true +} + +func getsystemcfg(label int) (n uint64) { +	r0, _ := callgetsystemcfg(label) +	n = uint64(r0) +	return +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm.go b/vendor/golang.org/x/sys/cpu/cpu_arm.go new file mode 100644 index 0000000..981af68 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm.go @@ -0,0 +1,40 @@ +// Copyright 2018 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. + +package cpu + +const cacheLineSize = 32 + +// HWCAP/HWCAP2 bits. +// These are specific to Linux. +const ( +	hwcap_SWP       = 1 << 0 +	hwcap_HALF      = 1 << 1 +	hwcap_THUMB     = 1 << 2 +	hwcap_26BIT     = 1 << 3 +	hwcap_FAST_MULT = 1 << 4 +	hwcap_FPA       = 1 << 5 +	hwcap_VFP       = 1 << 6 +	hwcap_EDSP      = 1 << 7 +	hwcap_JAVA      = 1 << 8 +	hwcap_IWMMXT    = 1 << 9 +	hwcap_CRUNCH    = 1 << 10 +	hwcap_THUMBEE   = 1 << 11 +	hwcap_NEON      = 1 << 12 +	hwcap_VFPv3     = 1 << 13 +	hwcap_VFPv3D16  = 1 << 14 +	hwcap_TLS       = 1 << 15 +	hwcap_VFPv4     = 1 << 16 +	hwcap_IDIVA     = 1 << 17 +	hwcap_IDIVT     = 1 << 18 +	hwcap_VFPD32    = 1 << 19 +	hwcap_LPAE      = 1 << 20 +	hwcap_EVTSTRM   = 1 << 21 + +	hwcap2_AES   = 1 << 0 +	hwcap2_PMULL = 1 << 1 +	hwcap2_SHA1  = 1 << 2 +	hwcap2_SHA2  = 1 << 3 +	hwcap2_CRC32 = 1 << 4 +) diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go new file mode 100644 index 0000000..9c87677 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -0,0 +1,138 @@ +// Copyright 2019 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. + +package cpu + +import "runtime" + +const cacheLineSize = 64 + +func init() { +	switch runtime.GOOS { +	case "android", "darwin": +		// Android and iOS don't seem to allow reading these registers. +		// Fake the minimal features expected by +		// TestARM64minimalFeatures. +		ARM64.HasASIMD = true +		ARM64.HasFP = true +	case "linux": +		doinit() +	default: +		readARM64Registers() +	} +} + +func readARM64Registers() { +	Initialized = true + +	// ID_AA64ISAR0_EL1 +	isar0 := getisar0() + +	switch extractBits(isar0, 4, 7) { +	case 1: +		ARM64.HasAES = true +	case 2: +		ARM64.HasAES = true +		ARM64.HasPMULL = true +	} + +	switch extractBits(isar0, 8, 11) { +	case 1: +		ARM64.HasSHA1 = true +	} + +	switch extractBits(isar0, 12, 15) { +	case 1: +		ARM64.HasSHA2 = true +	case 2: +		ARM64.HasSHA2 = true +		ARM64.HasSHA512 = true +	} + +	switch extractBits(isar0, 16, 19) { +	case 1: +		ARM64.HasCRC32 = true +	} + +	switch extractBits(isar0, 20, 23) { +	case 2: +		ARM64.HasATOMICS = true +	} + +	switch extractBits(isar0, 28, 31) { +	case 1: +		ARM64.HasASIMDRDM = true +	} + +	switch extractBits(isar0, 32, 35) { +	case 1: +		ARM64.HasSHA3 = true +	} + +	switch extractBits(isar0, 36, 39) { +	case 1: +		ARM64.HasSM3 = true +	} + +	switch extractBits(isar0, 40, 43) { +	case 1: +		ARM64.HasSM4 = true +	} + +	switch extractBits(isar0, 44, 47) { +	case 1: +		ARM64.HasASIMDDP = true +	} + +	// ID_AA64ISAR1_EL1 +	isar1 := getisar1() + +	switch extractBits(isar1, 0, 3) { +	case 1: +		ARM64.HasDCPOP = true +	} + +	switch extractBits(isar1, 12, 15) { +	case 1: +		ARM64.HasJSCVT = true +	} + +	switch extractBits(isar1, 16, 19) { +	case 1: +		ARM64.HasFCMA = true +	} + +	switch extractBits(isar1, 20, 23) { +	case 1: +		ARM64.HasLRCPC = true +	} + +	// ID_AA64PFR0_EL1 +	pfr0 := getpfr0() + +	switch extractBits(pfr0, 16, 19) { +	case 0: +		ARM64.HasFP = true +	case 1: +		ARM64.HasFP = true +		ARM64.HasFPHP = true +	} + +	switch extractBits(pfr0, 20, 23) { +	case 0: +		ARM64.HasASIMD = true +	case 1: +		ARM64.HasASIMD = true +		ARM64.HasASIMDHP = true +	} + +	switch extractBits(pfr0, 32, 35) { +	case 1: +		ARM64.HasSVE = true +	} +} + +func extractBits(data uint64, start, end uint) uint { +	return (uint)(data>>start) & ((1 << (end - start + 1)) - 1) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_arm64.s new file mode 100644 index 0000000..a54436e --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.s @@ -0,0 +1,31 @@ +// Copyright 2019 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. + +// +build !gccgo + +#include "textflag.h" + +// func getisar0() uint64 +TEXT ·getisar0(SB),NOSPLIT,$0-8 +	// get Instruction Set Attributes 0 into x0 +	// mrs x0, ID_AA64ISAR0_EL1 = d5380600 +	WORD	$0xd5380600 +	MOVD	R0, ret+0(FP) +	RET + +// func getisar1() uint64 +TEXT ·getisar1(SB),NOSPLIT,$0-8 +	// get Instruction Set Attributes 1 into x0 +	// mrs x0, ID_AA64ISAR1_EL1 = d5380620 +	WORD	$0xd5380620 +	MOVD	R0, ret+0(FP) +	RET + +// func getpfr0() uint64 +TEXT ·getpfr0(SB),NOSPLIT,$0-8 +	// get Processor Feature Register 0 into x0 +	// mrs x0, ID_AA64PFR0_EL1 = d5380400 +	WORD	$0xd5380400 +	MOVD	R0, ret+0(FP) +	RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go new file mode 100644 index 0000000..7b88e86 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go @@ -0,0 +1,11 @@ +// Copyright 2019 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. + +// +build !gccgo + +package cpu + +func getisar0() uint64 +func getisar1() uint64 +func getpfr0() uint64 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go new file mode 100644 index 0000000..568bcd0 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go @@ -0,0 +1,21 @@ +// Copyright 2019 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. + +// +build !gccgo + +package cpu + +// haveAsmFunctions reports whether the other functions in this file can +// be safely called. +func haveAsmFunctions() bool { return true } + +// The following feature detection functions are defined in cpu_s390x.s. +// They are likely to be expensive to call so the results should be cached. +func stfle() facilityList +func kmQuery() queryResult +func kmcQuery() queryResult +func kmctrQuery() queryResult +func kmaQuery() queryResult +func kimdQuery() queryResult +func klmdQuery() queryResult diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go new file mode 100644 index 0000000..f7cb469 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go @@ -0,0 +1,16 @@ +// Copyright 2018 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. + +// +build 386 amd64 amd64p32 +// +build !gccgo + +package cpu + +// cpuid is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) + +// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler +// and in cpu_gccgo.c for gccgo. +func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go new file mode 100644 index 0000000..53ca8d6 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go @@ -0,0 +1,11 @@ +// Copyright 2019 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. + +// +build gccgo + +package cpu + +func getisar0() uint64 { return 0 } +func getisar1() uint64 { return 0 } +func getpfr0() uint64  { return 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go new file mode 100644 index 0000000..aa986f7 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go @@ -0,0 +1,22 @@ +// Copyright 2019 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. + +// +build gccgo + +package cpu + +// haveAsmFunctions reports whether the other functions in this file can +// be safely called. +func haveAsmFunctions() bool { return false } + +// TODO(mundaym): the following feature detection functions are currently +// stubs. See https://golang.org/cl/162887 for how to fix this. +// They are likely to be expensive to call so the results should be cached. +func stfle() facilityList     { panic("not implemented for gccgo") } +func kmQuery() queryResult    { panic("not implemented for gccgo") } +func kmcQuery() queryResult   { panic("not implemented for gccgo") } +func kmctrQuery() queryResult { panic("not implemented for gccgo") } +func kmaQuery() queryResult   { panic("not implemented for gccgo") } +func kimdQuery() queryResult  { panic("not implemented for gccgo") } +func klmdQuery() queryResult  { panic("not implemented for gccgo") } diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c new file mode 100644 index 0000000..e363c7d --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c @@ -0,0 +1,43 @@ +// Copyright 2018 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. + +// +build 386 amd64 amd64p32 +// +build gccgo + +#include <cpuid.h> +#include <stdint.h> + +// Need to wrap __get_cpuid_count because it's declared as static. +int +gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf, +                   uint32_t *eax, uint32_t *ebx, +                   uint32_t *ecx, uint32_t *edx) +{ +	return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx); +} + +// xgetbv reads the contents of an XCR (Extended Control Register) +// specified in the ECX register into registers EDX:EAX. +// Currently, the only supported value for XCR is 0. +// +// TODO: Replace with a better alternative: +// +//     #include <xsaveintrin.h> +// +//     #pragma GCC target("xsave") +// +//     void gccgoXgetbv(uint32_t *eax, uint32_t *edx) { +//       unsigned long long x = _xgetbv(0); +//       *eax = x & 0xffffffff; +//       *edx = (x >> 32) & 0xffffffff; +//     } +// +// Note that _xgetbv is defined starting with GCC 8. +void +gccgoXgetbv(uint32_t *eax, uint32_t *edx) +{ +	__asm("  xorl %%ecx, %%ecx\n" +	      "  xgetbv" +	    : "=a"(*eax), "=d"(*edx)); +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go new file mode 100644 index 0000000..ba49b91 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go @@ -0,0 +1,26 @@ +// Copyright 2018 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. + +// +build 386 amd64 amd64p32 +// +build gccgo + +package cpu + +//extern gccgoGetCpuidCount +func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32) + +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) { +	var a, b, c, d uint32 +	gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d) +	return a, b, c, d +} + +//extern gccgoXgetbv +func gccgoXgetbv(eax, edx *uint32) + +func xgetbv() (eax, edx uint32) { +	var a, d uint32 +	gccgoXgetbv(&a, &d) +	return a, d +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux.go b/vendor/golang.org/x/sys/cpu/cpu_linux.go new file mode 100644 index 0000000..fe13918 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux.go @@ -0,0 +1,15 @@ +// Copyright 2018 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. + +// +build !386,!amd64,!amd64p32,!arm64 + +package cpu + +func init() { +	if err := readHWCAP(); err != nil { +		return +	} +	doinit() +	Initialized = true +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go new file mode 100644 index 0000000..2057006 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go @@ -0,0 +1,39 @@ +// Copyright 2019 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. + +package cpu + +func doinit() { +	ARM.HasSWP = isSet(hwCap, hwcap_SWP) +	ARM.HasHALF = isSet(hwCap, hwcap_HALF) +	ARM.HasTHUMB = isSet(hwCap, hwcap_THUMB) +	ARM.Has26BIT = isSet(hwCap, hwcap_26BIT) +	ARM.HasFASTMUL = isSet(hwCap, hwcap_FAST_MULT) +	ARM.HasFPA = isSet(hwCap, hwcap_FPA) +	ARM.HasVFP = isSet(hwCap, hwcap_VFP) +	ARM.HasEDSP = isSet(hwCap, hwcap_EDSP) +	ARM.HasJAVA = isSet(hwCap, hwcap_JAVA) +	ARM.HasIWMMXT = isSet(hwCap, hwcap_IWMMXT) +	ARM.HasCRUNCH = isSet(hwCap, hwcap_CRUNCH) +	ARM.HasTHUMBEE = isSet(hwCap, hwcap_THUMBEE) +	ARM.HasNEON = isSet(hwCap, hwcap_NEON) +	ARM.HasVFPv3 = isSet(hwCap, hwcap_VFPv3) +	ARM.HasVFPv3D16 = isSet(hwCap, hwcap_VFPv3D16) +	ARM.HasTLS = isSet(hwCap, hwcap_TLS) +	ARM.HasVFPv4 = isSet(hwCap, hwcap_VFPv4) +	ARM.HasIDIVA = isSet(hwCap, hwcap_IDIVA) +	ARM.HasIDIVT = isSet(hwCap, hwcap_IDIVT) +	ARM.HasVFPD32 = isSet(hwCap, hwcap_VFPD32) +	ARM.HasLPAE = isSet(hwCap, hwcap_LPAE) +	ARM.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) +	ARM.HasAES = isSet(hwCap2, hwcap2_AES) +	ARM.HasPMULL = isSet(hwCap2, hwcap2_PMULL) +	ARM.HasSHA1 = isSet(hwCap2, hwcap2_SHA1) +	ARM.HasSHA2 = isSet(hwCap2, hwcap2_SHA2) +	ARM.HasCRC32 = isSet(hwCap2, hwcap2_CRC32) +} + +func isSet(hwc uint, value uint) bool { +	return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go new file mode 100644 index 0000000..79a38a0 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -0,0 +1,71 @@ +// Copyright 2018 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. + +package cpu + +// HWCAP/HWCAP2 bits. These are exposed by Linux. +const ( +	hwcap_FP       = 1 << 0 +	hwcap_ASIMD    = 1 << 1 +	hwcap_EVTSTRM  = 1 << 2 +	hwcap_AES      = 1 << 3 +	hwcap_PMULL    = 1 << 4 +	hwcap_SHA1     = 1 << 5 +	hwcap_SHA2     = 1 << 6 +	hwcap_CRC32    = 1 << 7 +	hwcap_ATOMICS  = 1 << 8 +	hwcap_FPHP     = 1 << 9 +	hwcap_ASIMDHP  = 1 << 10 +	hwcap_CPUID    = 1 << 11 +	hwcap_ASIMDRDM = 1 << 12 +	hwcap_JSCVT    = 1 << 13 +	hwcap_FCMA     = 1 << 14 +	hwcap_LRCPC    = 1 << 15 +	hwcap_DCPOP    = 1 << 16 +	hwcap_SHA3     = 1 << 17 +	hwcap_SM3      = 1 << 18 +	hwcap_SM4      = 1 << 19 +	hwcap_ASIMDDP  = 1 << 20 +	hwcap_SHA512   = 1 << 21 +	hwcap_SVE      = 1 << 22 +	hwcap_ASIMDFHM = 1 << 23 +) + +func doinit() { +	if err := readHWCAP(); err != nil { +		// failed to read /proc/self/auxv, try reading registers directly +		readARM64Registers() +		return +	} + +	// HWCAP feature bits +	ARM64.HasFP = isSet(hwCap, hwcap_FP) +	ARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD) +	ARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM) +	ARM64.HasAES = isSet(hwCap, hwcap_AES) +	ARM64.HasPMULL = isSet(hwCap, hwcap_PMULL) +	ARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1) +	ARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2) +	ARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32) +	ARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS) +	ARM64.HasFPHP = isSet(hwCap, hwcap_FPHP) +	ARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP) +	ARM64.HasCPUID = isSet(hwCap, hwcap_CPUID) +	ARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM) +	ARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT) +	ARM64.HasFCMA = isSet(hwCap, hwcap_FCMA) +	ARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC) +	ARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP) +	ARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3) +	ARM64.HasSM3 = isSet(hwCap, hwcap_SM3) +	ARM64.HasSM4 = isSet(hwCap, hwcap_SM4) +	ARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP) +	ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) +	ARM64.HasSVE = isSet(hwCap, hwcap_SVE) +	ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) +} + +func isSet(hwc uint, value uint) bool { +	return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go new file mode 100644 index 0000000..f65134f --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go @@ -0,0 +1,9 @@ +// Copyright 2019 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. + +// +build linux,!arm,!arm64,!ppc64,!ppc64le,!s390x + +package cpu + +func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go new file mode 100644 index 0000000..6c8d975 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go @@ -0,0 +1,33 @@ +// Copyright 2018 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. + +// +build linux +// +build ppc64 ppc64le + +package cpu + +const cacheLineSize = 128 + +// HWCAP/HWCAP2 bits. These are exposed by the kernel. +const ( +	// ISA Level +	_PPC_FEATURE2_ARCH_2_07 = 0x80000000 +	_PPC_FEATURE2_ARCH_3_00 = 0x00800000 + +	// CPU features +	_PPC_FEATURE2_DARN = 0x00200000 +	_PPC_FEATURE2_SCV  = 0x00100000 +) + +func doinit() { +	// HWCAP2 feature bits +	PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07) +	PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00) +	PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN) +	PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV) +} + +func isSet(hwc uint, value uint) bool { +	return hwc&value != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go new file mode 100644 index 0000000..d579eae --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go @@ -0,0 +1,161 @@ +// Copyright 2019 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. + +package cpu + +const cacheLineSize = 256 + +const ( +	// bit mask values from /usr/include/bits/hwcap.h +	hwcap_ZARCH  = 2 +	hwcap_STFLE  = 4 +	hwcap_MSA    = 8 +	hwcap_LDISP  = 16 +	hwcap_EIMM   = 32 +	hwcap_DFP    = 64 +	hwcap_ETF3EH = 256 +	hwcap_VX     = 2048 +	hwcap_VXE    = 8192 +) + +// bitIsSet reports whether the bit at index is set. The bit index +// is in big endian order, so bit index 0 is the leftmost bit. +func bitIsSet(bits []uint64, index uint) bool { +	return bits[index/64]&((1<<63)>>(index%64)) != 0 +} + +// function is the code for the named cryptographic function. +type function uint8 + +const ( +	// KM{,A,C,CTR} function codes +	aes128 function = 18 // AES-128 +	aes192 function = 19 // AES-192 +	aes256 function = 20 // AES-256 + +	// K{I,L}MD function codes +	sha1     function = 1  // SHA-1 +	sha256   function = 2  // SHA-256 +	sha512   function = 3  // SHA-512 +	sha3_224 function = 32 // SHA3-224 +	sha3_256 function = 33 // SHA3-256 +	sha3_384 function = 34 // SHA3-384 +	sha3_512 function = 35 // SHA3-512 +	shake128 function = 36 // SHAKE-128 +	shake256 function = 37 // SHAKE-256 + +	// KLMD function codes +	ghash function = 65 // GHASH +) + +// queryResult contains the result of a Query function +// call. Bits are numbered in big endian order so the +// leftmost bit (the MSB) is at index 0. +type queryResult struct { +	bits [2]uint64 +} + +// Has reports whether the given functions are present. +func (q *queryResult) Has(fns ...function) bool { +	if len(fns) == 0 { +		panic("no function codes provided") +	} +	for _, f := range fns { +		if !bitIsSet(q.bits[:], uint(f)) { +			return false +		} +	} +	return true +} + +// facility is a bit index for the named facility. +type facility uint8 + +const ( +	// cryptography facilities +	msa4 facility = 77  // message-security-assist extension 4 +	msa8 facility = 146 // message-security-assist extension 8 +) + +// facilityList contains the result of an STFLE call. +// Bits are numbered in big endian order so the +// leftmost bit (the MSB) is at index 0. +type facilityList struct { +	bits [4]uint64 +} + +// Has reports whether the given facilities are present. +func (s *facilityList) Has(fs ...facility) bool { +	if len(fs) == 0 { +		panic("no facility bits provided") +	} +	for _, f := range fs { +		if !bitIsSet(s.bits[:], uint(f)) { +			return false +		} +	} +	return true +} + +func doinit() { +	// test HWCAP bit vector +	has := func(featureMask uint) bool { +		return hwCap&featureMask == featureMask +	} + +	// mandatory +	S390X.HasZARCH = has(hwcap_ZARCH) + +	// optional +	S390X.HasSTFLE = has(hwcap_STFLE) +	S390X.HasLDISP = has(hwcap_LDISP) +	S390X.HasEIMM = has(hwcap_EIMM) +	S390X.HasETF3EH = has(hwcap_ETF3EH) +	S390X.HasDFP = has(hwcap_DFP) +	S390X.HasMSA = has(hwcap_MSA) +	S390X.HasVX = has(hwcap_VX) +	if S390X.HasVX { +		S390X.HasVXE = has(hwcap_VXE) +	} + +	// We need implementations of stfle, km and so on +	// to detect cryptographic features. +	if !haveAsmFunctions() { +		return +	} + +	// optional cryptographic functions +	if S390X.HasMSA { +		aes := []function{aes128, aes192, aes256} + +		// cipher message +		km, kmc := kmQuery(), kmcQuery() +		S390X.HasAES = km.Has(aes...) +		S390X.HasAESCBC = kmc.Has(aes...) +		if S390X.HasSTFLE { +			facilities := stfle() +			if facilities.Has(msa4) { +				kmctr := kmctrQuery() +				S390X.HasAESCTR = kmctr.Has(aes...) +			} +			if facilities.Has(msa8) { +				kma := kmaQuery() +				S390X.HasAESGCM = kma.Has(aes...) +			} +		} + +		// compute message digest +		kimd := kimdQuery() // intermediate (no padding) +		klmd := klmdQuery() // last (padding) +		S390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1) +		S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256) +		S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512) +		S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist +		sha3 := []function{ +			sha3_224, sha3_256, sha3_384, sha3_512, +			shake128, shake256, +		} +		S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...) +	} +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go new file mode 100644 index 0000000..6165f12 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go @@ -0,0 +1,9 @@ +// Copyright 2018 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. + +// +build mips64 mips64le + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go new file mode 100644 index 0000000..1269eee --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go @@ -0,0 +1,9 @@ +// Copyright 2018 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. + +// +build mips mipsle + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go new file mode 100644 index 0000000..3ffc4af --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -0,0 +1,9 @@ +// Copyright 2019 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. + +// +build !linux,arm64 + +package cpu + +func doinit() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go new file mode 100644 index 0000000..efe2b7a --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -0,0 +1,9 @@ +// Copyright 2019 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. + +// +build riscv64 + +package cpu + +const cacheLineSize = 32 diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.s b/vendor/golang.org/x/sys/cpu/cpu_s390x.s new file mode 100644 index 0000000..e5037d9 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_s390x.s @@ -0,0 +1,57 @@ +// Copyright 2019 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. + +// +build !gccgo + +#include "textflag.h" + +// func stfle() facilityList +TEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32 +	MOVD $ret+0(FP), R1 +	MOVD $3, R0          // last doubleword index to store +	XC   $32, (R1), (R1) // clear 4 doublewords (32 bytes) +	WORD $0xb2b01000     // store facility list extended (STFLE) +	RET + +// func kmQuery() queryResult +TEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KM-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xB92E0024    // cipher message (KM) +	RET + +// func kmcQuery() queryResult +TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KMC-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xB92F0024    // cipher message with chaining (KMC) +	RET + +// func kmctrQuery() queryResult +TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KMCTR-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xB92D4024    // cipher message with counter (KMCTR) +	RET + +// func kmaQuery() queryResult +TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KMA-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xb9296024    // cipher message with authentication (KMA) +	RET + +// func kimdQuery() queryResult +TEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KIMD-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xB93E0024    // compute intermediate message digest (KIMD) +	RET + +// func klmdQuery() queryResult +TEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16 +	MOVD $0, R0         // set function code to 0 (KLMD-Query) +	MOVD $ret+0(FP), R1 // address of 16-byte return value +	WORD $0xB93F0024    // compute last message digest (KLMD) +	RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_wasm.go b/vendor/golang.org/x/sys/cpu/cpu_wasm.go new file mode 100644 index 0000000..8681e87 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_wasm.go @@ -0,0 +1,13 @@ +// Copyright 2019 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. + +// +build wasm + +package cpu + +// We're compiling the cpu package for an unknown (software-abstracted) CPU. +// Make CacheLinePad an empty struct and hope that the usual struct alignment +// rules are good enough. + +const cacheLineSize = 0 diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go new file mode 100644 index 0000000..d70d317 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -0,0 +1,59 @@ +// Copyright 2018 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. + +// +build 386 amd64 amd64p32 + +package cpu + +const cacheLineSize = 64 + +func init() { +	Initialized = true + +	maxID, _, _, _ := cpuid(0, 0) + +	if maxID < 1 { +		return +	} + +	_, _, ecx1, edx1 := cpuid(1, 0) +	X86.HasSSE2 = isSet(26, edx1) + +	X86.HasSSE3 = isSet(0, ecx1) +	X86.HasPCLMULQDQ = isSet(1, ecx1) +	X86.HasSSSE3 = isSet(9, ecx1) +	X86.HasFMA = isSet(12, ecx1) +	X86.HasSSE41 = isSet(19, ecx1) +	X86.HasSSE42 = isSet(20, ecx1) +	X86.HasPOPCNT = isSet(23, ecx1) +	X86.HasAES = isSet(25, ecx1) +	X86.HasOSXSAVE = isSet(27, ecx1) +	X86.HasRDRAND = isSet(30, ecx1) + +	osSupportsAVX := false +	// For XGETBV, OSXSAVE bit is required and sufficient. +	if X86.HasOSXSAVE { +		eax, _ := xgetbv() +		// Check if XMM and YMM registers have OS support. +		osSupportsAVX = isSet(1, eax) && isSet(2, eax) +	} + +	X86.HasAVX = isSet(28, ecx1) && osSupportsAVX + +	if maxID < 7 { +		return +	} + +	_, ebx7, _, _ := cpuid(7, 0) +	X86.HasBMI1 = isSet(3, ebx7) +	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX +	X86.HasBMI2 = isSet(8, ebx7) +	X86.HasERMS = isSet(9, ebx7) +	X86.HasRDSEED = isSet(18, ebx7) +	X86.HasADX = isSet(19, ebx7) +} + +func isSet(bitpos uint, value uint32) bool { +	return value&(1<<bitpos) != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_x86.s new file mode 100644 index 0000000..47f0841 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.s @@ -0,0 +1,27 @@ +// Copyright 2018 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. + +// +build 386 amd64 amd64p32 +// +build !gccgo + +#include "textflag.h" + +// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) +TEXT ·cpuid(SB), NOSPLIT, $0-24 +	MOVL eaxArg+0(FP), AX +	MOVL ecxArg+4(FP), CX +	CPUID +	MOVL AX, eax+8(FP) +	MOVL BX, ebx+12(FP) +	MOVL CX, ecx+16(FP) +	MOVL DX, edx+20(FP) +	RET + +// func xgetbv() (eax, edx uint32) +TEXT ·xgetbv(SB),NOSPLIT,$0-8 +	MOVL $0, CX +	XGETBV +	MOVL AX, eax+0(FP) +	MOVL DX, edx+4(FP) +	RET diff --git a/vendor/golang.org/x/sys/cpu/hwcap_linux.go b/vendor/golang.org/x/sys/cpu/hwcap_linux.go new file mode 100644 index 0000000..f3baa37 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/hwcap_linux.go @@ -0,0 +1,56 @@ +// Copyright 2019 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. + +package cpu + +import ( +	"io/ioutil" +) + +const ( +	_AT_HWCAP  = 16 +	_AT_HWCAP2 = 26 + +	procAuxv = "/proc/self/auxv" + +	uintSize = int(32 << (^uint(0) >> 63)) +) + +// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2 +// These are initialized in cpu_$GOARCH.go +// and should not be changed after they are initialized. +var hwCap uint +var hwCap2 uint + +func readHWCAP() error { +	buf, err := ioutil.ReadFile(procAuxv) +	if err != nil { +		// e.g. on android /proc/self/auxv is not accessible, so silently +		// ignore the error and leave Initialized = false. On some +		// architectures (e.g. arm64) doinit() implements a fallback +		// readout and will set Initialized = true again. +		return err +	} +	bo := hostByteOrder() +	for len(buf) >= 2*(uintSize/8) { +		var tag, val uint +		switch uintSize { +		case 32: +			tag = uint(bo.Uint32(buf[0:])) +			val = uint(bo.Uint32(buf[4:])) +			buf = buf[8:] +		case 64: +			tag = uint(bo.Uint64(buf[0:])) +			val = uint(bo.Uint64(buf[8:])) +			buf = buf[16:] +		} +		switch tag { +		case _AT_HWCAP: +			hwCap = val +		case _AT_HWCAP2: +			hwCap2 = val +		} +	} +	return nil +} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go new file mode 100644 index 0000000..78fe25e --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go @@ -0,0 +1,36 @@ +// Copyright 2019 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. + +// Minimal copy of x/sys/unix so the cpu package can make a +// system call on AIX without depending on x/sys/unix. +// (See golang.org/issue/32102) + +// +build aix,ppc64 +// +build !gccgo + +package cpu + +import ( +	"syscall" +	"unsafe" +) + +//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" + +//go:linkname libc_getsystemcfg libc_getsystemcfg + +type syscallFunc uintptr + +var libc_getsystemcfg syscallFunc + +type errno = syscall.Errno + +// Implemented in runtime/syscall_aix.go. +func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) +func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno) + +func callgetsystemcfg(label int) (r1 uintptr, e1 errno) { +	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) +	return +} | 
