WIP: Save agent roles integration work before CHORUS rebrand
- Agent roles and coordination features - Chat API integration testing - New configuration and workspace management 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		
							
								
								
									
										24
									
								
								vendor/github.com/klauspost/cpuid/v2/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/klauspost/cpuid/v2/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # Compiled Object files, Static and Dynamic libs (Shared Objects) | ||||
| *.o | ||||
| *.a | ||||
| *.so | ||||
|  | ||||
| # Folders | ||||
| _obj | ||||
| _test | ||||
|  | ||||
| # Architecture specific extensions/prefixes | ||||
| *.[568vq] | ||||
| [568vq].out | ||||
|  | ||||
| *.cgo1.go | ||||
| *.cgo2.c | ||||
| _cgo_defun.c | ||||
| _cgo_gotypes.go | ||||
| _cgo_export.* | ||||
|  | ||||
| _testmain.go | ||||
|  | ||||
| *.exe | ||||
| *.test | ||||
| *.prof | ||||
							
								
								
									
										74
									
								
								vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								vendor/github.com/klauspost/cpuid/v2/.goreleaser.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| # This is an example goreleaser.yaml file with some sane defaults. | ||||
| # Make sure to check the documentation at http://goreleaser.com | ||||
|  | ||||
| builds: | ||||
|   - | ||||
|     id: "cpuid" | ||||
|     binary: cpuid | ||||
|     main: ./cmd/cpuid/main.go | ||||
|     env: | ||||
|       - CGO_ENABLED=0 | ||||
|     flags: | ||||
|       - -ldflags=-s -w | ||||
|     goos: | ||||
|       - aix | ||||
|       - linux | ||||
|       - freebsd | ||||
|       - netbsd | ||||
|       - windows | ||||
|       - darwin | ||||
|     goarch: | ||||
|       - 386 | ||||
|       - amd64 | ||||
|       - arm64 | ||||
|     goarm: | ||||
|       - 7 | ||||
|  | ||||
| archives: | ||||
|   - | ||||
|     id: cpuid | ||||
|     name_template: "cpuid-{{ .Os }}_{{ .Arch }}_{{ .Version }}" | ||||
|     replacements: | ||||
|       aix: AIX | ||||
|       darwin: OSX | ||||
|       linux: Linux | ||||
|       windows: Windows | ||||
|       386: i386 | ||||
|       amd64: x86_64 | ||||
|       freebsd: FreeBSD | ||||
|       netbsd: NetBSD | ||||
|     format_overrides: | ||||
|       - goos: windows | ||||
|         format: zip | ||||
|     files: | ||||
|       - LICENSE | ||||
| checksum: | ||||
|   name_template: 'checksums.txt' | ||||
| snapshot: | ||||
|   name_template: "{{ .Tag }}-next" | ||||
| changelog: | ||||
|   sort: asc | ||||
|   filters: | ||||
|     exclude: | ||||
|     - '^doc:' | ||||
|     - '^docs:' | ||||
|     - '^test:' | ||||
|     - '^tests:' | ||||
|     - '^Update\sREADME.md' | ||||
|  | ||||
| nfpms: | ||||
|   - | ||||
|     file_name_template: "cpuid_package_{{ .Version }}_{{ .Os }}_{{ .Arch }}" | ||||
|     vendor: Klaus Post | ||||
|     homepage: https://github.com/klauspost/cpuid | ||||
|     maintainer: Klaus Post <klauspost@gmail.com> | ||||
|     description: CPUID Tool | ||||
|     license: BSD 3-Clause | ||||
|     formats: | ||||
|       - deb | ||||
|       - rpm | ||||
|     replacements: | ||||
|       darwin: Darwin | ||||
|       linux: Linux | ||||
|       freebsd: FreeBSD | ||||
|       amd64: x86_64 | ||||
							
								
								
									
										35
									
								
								vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/klauspost/cpuid/v2/CONTRIBUTING.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| Developer Certificate of Origin | ||||
| Version 1.1 | ||||
|  | ||||
| Copyright (C) 2015- Klaus Post & Contributors. | ||||
| Email: klauspost@gmail.com | ||||
|  | ||||
| Everyone is permitted to copy and distribute verbatim copies of this | ||||
| license document, but changing it is not allowed. | ||||
|  | ||||
|  | ||||
| Developer's Certificate of Origin 1.1 | ||||
|  | ||||
| By making a contribution to this project, I certify that: | ||||
|  | ||||
| (a) The contribution was created in whole or in part by me and I | ||||
|     have the right to submit it under the open source license | ||||
|     indicated in the file; or | ||||
|  | ||||
| (b) The contribution is based upon previous work that, to the best | ||||
|     of my knowledge, is covered under an appropriate open source | ||||
|     license and I have the right under that license to submit that | ||||
|     work with modifications, whether created in whole or in part | ||||
|     by me, under the same open source license (unless I am | ||||
|     permitted to submit under a different license), as indicated | ||||
|     in the file; or | ||||
|  | ||||
| (c) The contribution was provided directly to me by some other | ||||
|     person who certified (a), (b) or (c) and I have not modified | ||||
|     it. | ||||
|  | ||||
| (d) I understand and agree that this project and the contribution | ||||
|     are public and that a record of the contribution (including all | ||||
|     personal information I submit with it, including my sign-off) is | ||||
|     maintained indefinitely and may be redistributed consistent with | ||||
|     this project or the open source license(s) involved. | ||||
							
								
								
									
										22
									
								
								vendor/github.com/klauspost/cpuid/v2/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/klauspost/cpuid/v2/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2015 Klaus Post | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
|  | ||||
							
								
								
									
										493
									
								
								vendor/github.com/klauspost/cpuid/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										493
									
								
								vendor/github.com/klauspost/cpuid/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,493 @@ | ||||
| # cpuid | ||||
| Package cpuid provides information about the CPU running the current program. | ||||
|  | ||||
| CPU features are detected on startup, and kept for fast access through the life of the application. | ||||
| Currently x86 / x64 (AMD64/i386) and ARM (ARM64) is supported, and no external C (cgo) code is used, which should make the library very easy to use. | ||||
|  | ||||
| You can access the CPU information by accessing the shared CPU variable of the cpuid library. | ||||
|  | ||||
| Package home: https://github.com/klauspost/cpuid | ||||
|  | ||||
| [](https://pkg.go.dev/github.com/klauspost/cpuid/v2) | ||||
| [![Build Status][3]][4] | ||||
|  | ||||
| [3]: https://travis-ci.org/klauspost/cpuid.svg?branch=master | ||||
| [4]: https://travis-ci.org/klauspost/cpuid | ||||
|  | ||||
| ## installing | ||||
|  | ||||
| `go get -u github.com/klauspost/cpuid/v2` using modules. | ||||
| Drop `v2` for others. | ||||
|  | ||||
| Installing binary: | ||||
|  | ||||
| `go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest` | ||||
|  | ||||
| Or download binaries from release page: https://github.com/klauspost/cpuid/releases | ||||
|  | ||||
| ### Homebrew | ||||
|  | ||||
| For macOS/Linux users, you can install via [brew](https://brew.sh/) | ||||
|  | ||||
| ```sh | ||||
| $ brew install cpuid | ||||
| ``` | ||||
|  | ||||
| ## example | ||||
|  | ||||
| ```Go | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
|  | ||||
| 	. "github.com/klauspost/cpuid/v2" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	// Print basic CPU information: | ||||
| 	fmt.Println("Name:", CPU.BrandName) | ||||
| 	fmt.Println("PhysicalCores:", CPU.PhysicalCores) | ||||
| 	fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore) | ||||
| 	fmt.Println("LogicalCores:", CPU.LogicalCores) | ||||
| 	fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID) | ||||
| 	fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ",")) | ||||
| 	fmt.Println("Cacheline bytes:", CPU.CacheLine) | ||||
| 	fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes") | ||||
| 	fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes") | ||||
| 	fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes") | ||||
| 	fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes") | ||||
| 	fmt.Println("Frequency", CPU.Hz, "hz") | ||||
|  | ||||
| 	// Test if we have these specific features: | ||||
| 	if CPU.Supports(SSE, SSE2) { | ||||
| 		fmt.Println("We have Streaming SIMD 2 Extensions") | ||||
| 	} | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Sample output: | ||||
| ``` | ||||
| >go run main.go | ||||
| Name: AMD Ryzen 9 3950X 16-Core Processor | ||||
| PhysicalCores: 16 | ||||
| ThreadsPerCore: 2 | ||||
| LogicalCores: 32 | ||||
| Family 23 Model: 113 Vendor ID: AMD | ||||
| Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CMOV,CX16,F16C,FMA3,HTT,HYPERVISOR,LZCNT,MMX,MMXEXT,NX,POPCNT,RDRAND,RDSEED,RDTSCP,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3 | ||||
| Cacheline bytes: 64 | ||||
| L1 Data Cache: 32768 bytes | ||||
| L1 Instruction Cache: 32768 bytes | ||||
| L2 Cache: 524288 bytes | ||||
| L3 Cache: 16777216 bytes | ||||
| Frequency 0 hz | ||||
| We have Streaming SIMD 2 Extensions | ||||
| ``` | ||||
|  | ||||
| # usage | ||||
|  | ||||
| The `cpuid.CPU` provides access to CPU features. Use `cpuid.CPU.Supports()` to check for CPU features. | ||||
| A faster `cpuid.CPU.Has()` is provided which will usually be inlined by the gc compiler.   | ||||
|  | ||||
| To test a larger number of features, they can be combined using `f := CombineFeatures(CMOV, CMPXCHG8, X87, FXSR, MMX, SYSCALL, SSE, SSE2)`, etc. | ||||
| This can be using with `cpuid.CPU.HasAll(f)` to quickly test if all features are supported. | ||||
|  | ||||
| Note that for some cpu/os combinations some features will not be detected. | ||||
| `amd64` has rather good support and should work reliably on all platforms. | ||||
|  | ||||
| Note that hypervisors may not pass through all CPU features through to the guest OS, | ||||
| so even if your host supports a feature it may not be visible on guests. | ||||
|  | ||||
| ## arm64 feature detection | ||||
|  | ||||
| Not all operating systems provide ARM features directly  | ||||
| and there is no safe way to do so for the rest. | ||||
|  | ||||
| Currently `arm64/linux` and `arm64/freebsd` should be quite reliable.  | ||||
| `arm64/darwin` adds features expected from the M1 processor, but a lot remains undetected. | ||||
|  | ||||
| A `DetectARM()` can be used if you are able to control your deployment, | ||||
| it will detect CPU features, but may crash if the OS doesn't intercept the calls. | ||||
| A `-cpu.arm` flag for detecting unsafe ARM features can be added. See below. | ||||
|   | ||||
| Note that currently only features are detected on ARM,  | ||||
| no additional information is currently available.  | ||||
|  | ||||
| ## flags | ||||
|  | ||||
| It is possible to add flags that affects cpu detection. | ||||
|  | ||||
| For this the `Flags()` command is provided. | ||||
|  | ||||
| This must be called *before* `flag.Parse()` AND after the flags have been parsed `Detect()` must be called. | ||||
|  | ||||
| This means that any detection used in `init()` functions will not contain these flags. | ||||
|  | ||||
| Example: | ||||
|  | ||||
| ```Go | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/klauspost/cpuid/v2" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	cpuid.Flags() | ||||
| 	flag.Parse() | ||||
| 	cpuid.Detect() | ||||
|  | ||||
| 	// Test if we have these specific features: | ||||
| 	if cpuid.CPU.Supports(cpuid.SSE, cpuid.SSE2) { | ||||
| 		fmt.Println("We have Streaming SIMD 2 Extensions") | ||||
| 	} | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## commandline | ||||
|  | ||||
| Download as binary from: https://github.com/klauspost/cpuid/releases | ||||
|  | ||||
| Install from source: | ||||
|  | ||||
| `go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest` | ||||
|  | ||||
| ### Example | ||||
|  | ||||
| ``` | ||||
| λ cpuid | ||||
| Name: AMD Ryzen 9 3950X 16-Core Processor | ||||
| Vendor String: AuthenticAMD | ||||
| Vendor ID: AMD | ||||
| PhysicalCores: 16 | ||||
| Threads Per Core: 2 | ||||
| Logical Cores: 32 | ||||
| CPU Family 23 Model: 113 | ||||
| Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE | ||||
| Microarchitecture level: 3 | ||||
| Cacheline bytes: 64 | ||||
| L1 Instruction Cache: 32768 bytes | ||||
| L1 Data Cache: 32768 bytes | ||||
| L2 Cache: 524288 bytes | ||||
| L3 Cache: 16777216 bytes | ||||
|  | ||||
| ``` | ||||
| ### JSON Output: | ||||
|  | ||||
| ``` | ||||
| λ cpuid --json | ||||
| { | ||||
|   "BrandName": "AMD Ryzen 9 3950X 16-Core Processor", | ||||
|   "VendorID": 2, | ||||
|   "VendorString": "AuthenticAMD", | ||||
|   "PhysicalCores": 16, | ||||
|   "ThreadsPerCore": 2, | ||||
|   "LogicalCores": 32, | ||||
|   "Family": 23, | ||||
|   "Model": 113, | ||||
|   "CacheLine": 64, | ||||
|   "Hz": 0, | ||||
|   "BoostFreq": 0, | ||||
|   "Cache": { | ||||
|     "L1I": 32768, | ||||
|     "L1D": 32768, | ||||
|     "L2": 524288, | ||||
|     "L3": 16777216 | ||||
|   }, | ||||
|   "SGX": { | ||||
|     "Available": false, | ||||
|     "LaunchControl": false, | ||||
|     "SGX1Supported": false, | ||||
|     "SGX2Supported": false, | ||||
|     "MaxEnclaveSizeNot64": 0, | ||||
|     "MaxEnclaveSize64": 0, | ||||
|     "EPCSections": null | ||||
|   }, | ||||
|   "Features": [ | ||||
|     "ADX", | ||||
|     "AESNI", | ||||
|     "AVX", | ||||
|     "AVX2", | ||||
|     "BMI1", | ||||
|     "BMI2", | ||||
|     "CLMUL", | ||||
|     "CLZERO", | ||||
|     "CMOV", | ||||
|     "CMPXCHG8", | ||||
|     "CPBOOST", | ||||
|     "CX16", | ||||
|     "F16C", | ||||
|     "FMA3", | ||||
|     "FXSR", | ||||
|     "FXSROPT", | ||||
|     "HTT", | ||||
|     "HYPERVISOR", | ||||
|     "LAHF", | ||||
|     "LZCNT", | ||||
|     "MCAOVERFLOW", | ||||
|     "MMX", | ||||
|     "MMXEXT", | ||||
|     "MOVBE", | ||||
|     "NX", | ||||
|     "OSXSAVE", | ||||
|     "POPCNT", | ||||
|     "RDRAND", | ||||
|     "RDSEED", | ||||
|     "RDTSCP", | ||||
|     "SCE", | ||||
|     "SHA", | ||||
|     "SSE", | ||||
|     "SSE2", | ||||
|     "SSE3", | ||||
|     "SSE4", | ||||
|     "SSE42", | ||||
|     "SSE4A", | ||||
|     "SSSE3", | ||||
|     "SUCCOR", | ||||
|     "X87", | ||||
|     "XSAVE" | ||||
|   ], | ||||
|   "X64Level": 3 | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### Check CPU microarch level | ||||
|  | ||||
| ``` | ||||
| λ cpuid --check-level=3 | ||||
| 2022/03/18 17:04:40 AMD Ryzen 9 3950X 16-Core Processor | ||||
| 2022/03/18 17:04:40 Microarchitecture level 3 is supported. Max level is 3. | ||||
| Exit Code 0 | ||||
|  | ||||
| λ cpuid --check-level=4 | ||||
| 2022/03/18 17:06:18 AMD Ryzen 9 3950X 16-Core Processor | ||||
| 2022/03/18 17:06:18 Microarchitecture level 4 not supported. Max level is 3. | ||||
| Exit Code 1 | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ## Available flags | ||||
|  | ||||
| ### x86 & amd64  | ||||
|  | ||||
| | Feature Flag       | Description                                                                                                                                                                        | | ||||
| |--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ||||
| | ADX                | Intel ADX (Multi-Precision Add-Carry Instruction Extensions)                                                                                                                       | | ||||
| | AESNI              | Advanced Encryption Standard New Instructions                                                                                                                                      | | ||||
| | AMD3DNOW           | AMD 3DNOW                                                                                                                                                                          | | ||||
| | AMD3DNOWEXT        | AMD 3DNowExt                                                                                                                                                                       | | ||||
| | AMXBF16            | Tile computational operations on BFLOAT16 numbers                                                                                                                                  | | ||||
| | AMXINT8            | Tile computational operations on 8-bit integers                                                                                                                                    | | ||||
| | AMXFP16            | Tile computational operations on FP16 numbers                                                                                                                                      | | ||||
| | AMXTILE            | Tile architecture                                                                                                                                                                  | | ||||
| | AVX                | AVX functions                                                                                                                                                                      | | ||||
| | AVX2               | AVX2 functions                                                                                                                                                                     | | ||||
| | AVX512BF16         | AVX-512 BFLOAT16 Instructions                                                                                                                                                      | | ||||
| | AVX512BITALG       | AVX-512 Bit Algorithms                                                                                                                                                             | | ||||
| | AVX512BW           | AVX-512 Byte and Word Instructions                                                                                                                                                 | | ||||
| | AVX512CD           | AVX-512 Conflict Detection Instructions                                                                                                                                            | | ||||
| | AVX512DQ           | AVX-512 Doubleword and Quadword Instructions                                                                                                                                       | | ||||
| | AVX512ER           | AVX-512 Exponential and Reciprocal Instructions                                                                                                                                    | | ||||
| | AVX512F            | AVX-512 Foundation                                                                                                                                                                 | | ||||
| | AVX512FP16         | AVX-512 FP16 Instructions                                                                                                                                                          | | ||||
| | AVX512IFMA         | AVX-512 Integer Fused Multiply-Add Instructions                                                                                                                                    | | ||||
| | AVX512PF           | AVX-512 Prefetch Instructions                                                                                                                                                      | | ||||
| | AVX512VBMI         | AVX-512 Vector Bit Manipulation Instructions                                                                                                                                       | | ||||
| | AVX512VBMI2        | AVX-512 Vector Bit Manipulation Instructions, Version 2                                                                                                                            | | ||||
| | AVX512VL           | AVX-512 Vector Length Extensions                                                                                                                                                   | | ||||
| | AVX512VNNI         | AVX-512 Vector Neural Network Instructions                                                                                                                                         | | ||||
| | AVX512VP2INTERSECT | AVX-512 Intersect for D/Q                                                                                                                                                          | | ||||
| | AVX512VPOPCNTDQ    | AVX-512 Vector Population Count Doubleword and Quadword                                                                                                                            | | ||||
| | AVXIFMA            | AVX-IFMA instructions                                                                                                                                                              | | ||||
| | AVXNECONVERT       | AVX-NE-CONVERT instructions                                                                                                                                                        | | ||||
| | AVXSLOW            | Indicates the CPU performs 2 128 bit operations instead of one                                                                                                                     | | ||||
| | AVXVNNI            | AVX (VEX encoded) VNNI neural network instructions                                                                                                                                 | | ||||
| | AVXVNNIINT8        | AVX-VNNI-INT8 instructions                                                                                                                                                         | | ||||
| | BHI_CTRL           | Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598                                                                    | | ||||
| | BMI1               | Bit Manipulation Instruction Set 1                                                                                                                                                 | | ||||
| | BMI2               | Bit Manipulation Instruction Set 2                                                                                                                                                 | | ||||
| | CETIBT             | Intel CET Indirect Branch Tracking                                                                                                                                                 | | ||||
| | CETSS              | Intel CET Shadow Stack                                                                                                                                                             | | ||||
| | CLDEMOTE           | Cache Line Demote                                                                                                                                                                  | | ||||
| | CLMUL              | Carry-less Multiplication                                                                                                                                                          | | ||||
| | CLZERO             | CLZERO instruction supported                                                                                                                                                       | | ||||
| | CMOV               | i686 CMOV                                                                                                                                                                          | | ||||
| | CMPCCXADD          | CMPCCXADD instructions                                                                                                                                                             | | ||||
| | CMPSB_SCADBS_SHORT | Fast short CMPSB and SCASB                                                                                                                                                         | | ||||
| | CMPXCHG8           | CMPXCHG8 instruction                                                                                                                                                               | | ||||
| | CPBOOST            | Core Performance Boost                                                                                                                                                             | | ||||
| | CPPC               | AMD: Collaborative Processor Performance Control                                                                                                                                   | | ||||
| | CX16               | CMPXCHG16B Instruction                                                                                                                                                             | | ||||
| | EFER_LMSLE_UNS     | AMD: =Core::X86::Msr::EFER[LMSLE] is not supported, and MBZ                                                                                                                        | | ||||
| | ENQCMD             | Enqueue Command                                                                                                                                                                    | | ||||
| | ERMS               | Enhanced REP MOVSB/STOSB                                                                                                                                                           | | ||||
| | F16C               | Half-precision floating-point conversion                                                                                                                                           | | ||||
| | FLUSH_L1D          | Flush L1D cache                                                                                                                                                                    | | ||||
| | FMA3               | Intel FMA 3. Does not imply AVX.                                                                                                                                                   | | ||||
| | FMA4               | Bulldozer FMA4 functions                                                                                                                                                           | | ||||
| | FP128              | AMD: When set, the internal FP/SIMD execution datapath is 128-bits wide                                                                                                            | | ||||
| | FP256              | AMD: When set, the internal FP/SIMD execution datapath is 256-bits wide                                                                                                            | | ||||
| | FSRM               | Fast Short Rep Mov                                                                                                                                                                 | | ||||
| | FXSR               | FXSAVE, FXRESTOR instructions, CR4 bit 9                                                                                                                                           | | ||||
| | FXSROPT            | FXSAVE/FXRSTOR optimizations                                                                                                                                                       | | ||||
| | GFNI               | Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage.                                                                                  | | ||||
| | HLE                | Hardware Lock Elision                                                                                                                                                              | | ||||
| | HRESET             | If set CPU supports history reset and the IA32_HRESET_ENABLE MSR                                                                                                                   | | ||||
| | HTT                | Hyperthreading (enabled)                                                                                                                                                           | | ||||
| | HWA                | Hardware assert supported. Indicates support for MSRC001_10                                                                                                                        | | ||||
| | HYBRID_CPU         | This part has CPUs of more than one type.                                                                                                                                          | | ||||
| | HYPERVISOR         | This bit has been reserved by Intel & AMD for use by hypervisors                                                                                                                   | | ||||
| | IA32_ARCH_CAP      | IA32_ARCH_CAPABILITIES MSR (Intel)                                                                                                                                                 | | ||||
| | IA32_CORE_CAP      | IA32_CORE_CAPABILITIES MSR                                                                                                                                                         | | ||||
| | IBPB               | Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB)                                                                                         | | ||||
| | IBRS               | AMD: Indirect Branch Restricted Speculation                                                                                                                                        | | ||||
| | IBRS_PREFERRED     | AMD: IBRS is preferred over software solution                                                                                                                                      | | ||||
| | IBRS_PROVIDES_SMP  | AMD: IBRS provides Same Mode Protection                                                                                                                                            | | ||||
| | IBS                | Instruction Based Sampling (AMD)                                                                                                                                                   | | ||||
| | IBSBRNTRGT         | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSFETCHSAM        | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSFFV             | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSOPCNT           | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSOPCNTEXT        | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSOPSAM           | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSRDWROPCNT       | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBSRIPINVALIDCHK   | Instruction Based Sampling Feature (AMD)                                                                                                                                           | | ||||
| | IBS_FETCH_CTLX     | AMD: IBS fetch control extended MSR supported                                                                                                                                      | | ||||
| | IBS_OPDATA4        | AMD: IBS op data 4 MSR supported                                                                                                                                                   | | ||||
| | IBS_OPFUSE         | AMD: Indicates support for IbsOpFuse                                                                                                                                               | | ||||
| | IBS_PREVENTHOST    | Disallowing IBS use by the host supported                                                                                                                                          | | ||||
| | IBS_ZEN4           | Fetch and Op IBS support IBS extensions added with Zen4                                                                                                                            | | ||||
| | IDPRED_CTRL        | IPRED_DIS                                                                                                                                                                          | | ||||
| | INT_WBINVD         | WBINVD/WBNOINVD are interruptible.                                                                                                                                                 | | ||||
| | INVLPGB            | NVLPGB and TLBSYNC instruction supported                                                                                                                                           | | ||||
| | LAHF               | LAHF/SAHF in long mode                                                                                                                                                             | | ||||
| | LAM                | If set, CPU supports Linear Address Masking                                                                                                                                        | | ||||
| | LBRVIRT            | LBR virtualization                                                                                                                                                                 | | ||||
| | LZCNT              | LZCNT instruction                                                                                                                                                                  | | ||||
| | MCAOVERFLOW        | MCA overflow recovery support.                                                                                                                                                     | | ||||
| | MCDT_NO            | Processor do not exhibit MXCSR Configuration Dependent Timing behavior and do not need to mitigate it.                                                                             | | ||||
| | MCOMMIT            | MCOMMIT instruction supported                                                                                                                                                      | | ||||
| | MD_CLEAR           | VERW clears CPU buffers                                                                                                                                                            | | ||||
| | MMX                | standard MMX                                                                                                                                                                       | | ||||
| | MMXEXT             | SSE integer functions or AMD MMX ext                                                                                                                                               | | ||||
| | MOVBE              | MOVBE instruction (big-endian)                                                                                                                                                     | | ||||
| | MOVDIR64B          | Move 64 Bytes as Direct Store                                                                                                                                                      | | ||||
| | MOVDIRI            | Move Doubleword as Direct Store                                                                                                                                                    | | ||||
| | MOVSB_ZL           | Fast Zero-Length MOVSB                                                                                                                                                             | | ||||
| | MPX                | Intel MPX (Memory Protection Extensions)                                                                                                                                           | | ||||
| | MOVU               | MOVU SSE instructions are more efficient and should be preferred to SSE	MOVL/MOVH. MOVUPS is more efficient than MOVLPS/MOVHPS. MOVUPD is more efficient than MOVLPD/MOVHPD       | | ||||
| | MSRIRC             | Instruction Retired Counter MSR available                                                                                                                                          | | ||||
| | MSRLIST            | Read/Write List of Model Specific Registers                                                                                                                                        | | ||||
| | MSR_PAGEFLUSH      | Page Flush MSR available                                                                                                                                                           | | ||||
| | NRIPS              | Indicates support for NRIP save on VMEXIT                                                                                                                                          | | ||||
| | NX                 | NX (No-Execute) bit                                                                                                                                                                | | ||||
| | OSXSAVE            | XSAVE enabled by OS                                                                                                                                                                | | ||||
| | PCONFIG            | PCONFIG for Intel Multi-Key Total Memory Encryption                                                                                                                                | | ||||
| | POPCNT             | POPCNT instruction                                                                                                                                                                 | | ||||
| | PPIN               | AMD: Protected Processor Inventory Number support. Indicates that Protected Processor Inventory Number (PPIN) capability can be enabled                                            | | ||||
| | PREFETCHI          | PREFETCHIT0/1 instructions                                                                                                                                                         | | ||||
| | PSFD               | Predictive Store Forward Disable                                                                                                                                                   | | ||||
| | RDPRU              | RDPRU instruction supported                                                                                                                                                        | | ||||
| | RDRAND             | RDRAND instruction is available                                                                                                                                                    | | ||||
| | RDSEED             | RDSEED instruction is available                                                                                                                                                    | | ||||
| | RDTSCP             | RDTSCP Instruction                                                                                                                                                                 | | ||||
| | RRSBA_CTRL         | Restricted RSB Alternate                                                                                                                                                           | | ||||
| | RTM                | Restricted Transactional Memory                                                                                                                                                    | | ||||
| | RTM_ALWAYS_ABORT   | Indicates that the loaded microcode is forcing RTM abort.                                                                                                                          | | ||||
| | SERIALIZE          | Serialize Instruction Execution                                                                                                                                                    | | ||||
| | SEV                | AMD Secure Encrypted Virtualization supported                                                                                                                                      | | ||||
| | SEV_64BIT          | AMD SEV guest execution only allowed from a 64-bit host                                                                                                                            | | ||||
| | SEV_ALTERNATIVE    | AMD SEV Alternate Injection supported                                                                                                                                              | | ||||
| | SEV_DEBUGSWAP      | Full debug state swap supported for SEV-ES guests                                                                                                                                  | | ||||
| | SEV_ES             | AMD SEV Encrypted State supported                                                                                                                                                  | | ||||
| | SEV_RESTRICTED     | AMD SEV Restricted Injection supported                                                                                                                                             | | ||||
| | SEV_SNP            | AMD SEV Secure Nested Paging supported                                                                                                                                             | | ||||
| | SGX                | Software Guard Extensions                                                                                                                                                          | | ||||
| | SGXLC              | Software Guard Extensions Launch Control                                                                                                                                           | | ||||
| | SHA                | Intel SHA Extensions                                                                                                                                                               | | ||||
| | SME                | AMD Secure Memory Encryption supported                                                                                                                                             | | ||||
| | SME_COHERENT       | AMD Hardware cache coherency across encryption domains enforced                                                                                                                    | | ||||
| | SPEC_CTRL_SSBD     | Speculative Store Bypass Disable                                                                                                                                                   | | ||||
| | SRBDS_CTRL         | SRBDS mitigation MSR available                                                                                                                                                     | | ||||
| | SSE                | SSE functions                                                                                                                                                                      | | ||||
| | SSE2               | P4 SSE functions                                                                                                                                                                   | | ||||
| | SSE3               | Prescott SSE3 functions                                                                                                                                                            | | ||||
| | SSE4               | Penryn SSE4.1 functions                                                                                                                                                            | | ||||
| | SSE42              | Nehalem SSE4.2 functions                                                                                                                                                           | | ||||
| | SSE4A              | AMD Barcelona microarchitecture SSE4a instructions                                                                                                                                 | | ||||
| | SSSE3              | Conroe SSSE3 functions                                                                                                                                                             | | ||||
| | STIBP              | Single Thread Indirect Branch Predictors                                                                                                                                           | | ||||
| | STIBP_ALWAYSON     | AMD: Single Thread Indirect Branch Prediction Mode has Enhanced Performance and may be left Always On                                                                              | | ||||
| | STOSB_SHORT        | Fast short STOSB                                                                                                                                                                   | | ||||
| | SUCCOR             | Software uncorrectable error containment and recovery capability.                                                                                                                  | | ||||
| | SVM                | AMD Secure Virtual Machine                                                                                                                                                         | | ||||
| | SVMDA              | Indicates support for the SVM decode assists.                                                                                                                                      | | ||||
| | SVMFBASID          | SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control | | ||||
| | SVML               | AMD SVM lock. Indicates support for SVM-Lock.                                                                                                                                      | | ||||
| | SVMNP              | AMD SVM nested paging                                                                                                                                                              | | ||||
| | SVMPF              | SVM pause intercept filter. Indicates support for the pause intercept filter                                                                                                       | | ||||
| | SVMPFT             | SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold                                                                                           | | ||||
| | SYSCALL            | System-Call Extension (SCE): SYSCALL and SYSRET instructions.                                                                                                                      | | ||||
| | SYSEE              | SYSENTER and SYSEXIT instructions                                                                                                                                                  | | ||||
| | TBM                | AMD Trailing Bit Manipulation                                                                                                                                                      | | ||||
| | TDX_GUEST          | Intel Trust Domain Extensions Guest                                                                                                                                                | | ||||
| | TLB_FLUSH_NESTED   | AMD: Flushing includes all the nested translations for guest translations                                                                                                          | | ||||
| | TME                | Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE.                         | | ||||
| | TOPEXT             | TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX.                                                         | | ||||
| | TSCRATEMSR         | MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104                                                                                                       | | ||||
| | TSXLDTRK           | Intel TSX Suspend Load Address Tracking                                                                                                                                            | | ||||
| | VAES               | Vector AES. AVX(512) versions requires additional checks.                                                                                                                          | | ||||
| | VMCBCLEAN          | VMCB clean bits. Indicates support for VMCB clean bits.                                                                                                                            | | ||||
| | VMPL               | AMD VM Permission Levels supported                                                                                                                                                 | | ||||
| | VMSA_REGPROT       | AMD VMSA Register Protection supported                                                                                                                                             | | ||||
| | VMX                | Virtual Machine Extensions                                                                                                                                                         | | ||||
| | VPCLMULQDQ         | Carry-Less Multiplication Quadword. Requires AVX for 3 register versions.                                                                                                          | | ||||
| | VTE                | AMD Virtual Transparent Encryption supported                                                                                                                                       | | ||||
| | WAITPKG            | TPAUSE, UMONITOR, UMWAIT                                                                                                                                                           | | ||||
| | WBNOINVD           | Write Back and Do Not Invalidate Cache                                                                                                                                             | | ||||
| | WRMSRNS            | Non-Serializing Write to Model Specific Register                                                                                                                                   | | ||||
| | X87                | FPU                                                                                                                                                                                | | ||||
| | XGETBV1            | Supports XGETBV with ECX = 1                                                                                                                                                       | | ||||
| | XOP                | Bulldozer XOP functions                                                                                                                                                            | | ||||
| | XSAVE              | XSAVE, XRESTOR, XSETBV, XGETBV                                                                                                                                                     | | ||||
| | XSAVEC             | Supports XSAVEC and the compacted form of XRSTOR.                                                                                                                                  | | ||||
| | XSAVEOPT           | XSAVEOPT available                                                                                                                                                                 | | ||||
| | XSAVES             | Supports XSAVES/XRSTORS and IA32_XSS                                                                                                                                               | | ||||
|  | ||||
| # ARM features: | ||||
|  | ||||
| | Feature Flag | Description                                                      | | ||||
| |--------------|------------------------------------------------------------------| | ||||
| | AESARM       | AES instructions                                                 | | ||||
| | ARMCPUID     | Some CPU ID registers readable at user-level                     | | ||||
| | ASIMD        | Advanced SIMD                                                    | | ||||
| | ASIMDDP      | SIMD Dot Product                                                 | | ||||
| | ASIMDHP      | Advanced SIMD half-precision floating point                      | | ||||
| | ASIMDRDM     | Rounding Double Multiply Accumulate/Subtract (SQRDMLAH/SQRDMLSH) | | ||||
| | ATOMICS      | Large System Extensions (LSE)                                    | | ||||
| | CRC32        | CRC32/CRC32C instructions                                        | | ||||
| | DCPOP        | Data cache clean to Point of Persistence (DC CVAP)               | | ||||
| | EVTSTRM      | Generic timer                                                    | | ||||
| | FCMA         | Floatin point complex number addition and multiplication         | | ||||
| | FP           | Single-precision and double-precision floating point             | | ||||
| | FPHP         | Half-precision floating point                                    | | ||||
| | GPA          | Generic Pointer Authentication                                   | | ||||
| | JSCVT        | Javascript-style double->int convert (FJCVTZS)                   | | ||||
| | LRCPC        | Weaker release consistency (LDAPR, etc)                          | | ||||
| | PMULL        | Polynomial Multiply instructions (PMULL/PMULL2)                  | | ||||
| | SHA1         | SHA-1 instructions (SHA1C, etc)                                  | | ||||
| | SHA2         | SHA-2 instructions (SHA256H, etc)                                | | ||||
| | SHA3         | SHA-3 instructions (EOR3, RAXI, XAR, BCAX)                       | | ||||
| | SHA512       | SHA512 instructions                                              | | ||||
| | SM3          | SM3 instructions                                                 | | ||||
| | SM4          | SM4 instructions                                                 | | ||||
| | SVE          | Scalable Vector Extension                                        | | ||||
|  | ||||
| # license | ||||
|  | ||||
| This code is published under an MIT license. See LICENSE file for more information. | ||||
							
								
								
									
										1427
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1427
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										47
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //+build 386,!gccgo,!noasm,!appengine | ||||
|  | ||||
| // func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmCpuid(SB), 7, $0 | ||||
| 	XORL CX, CX | ||||
| 	MOVL op+0(FP), AX | ||||
| 	CPUID | ||||
| 	MOVL AX, eax+4(FP) | ||||
| 	MOVL BX, ebx+8(FP) | ||||
| 	MOVL CX, ecx+12(FP) | ||||
| 	MOVL DX, edx+16(FP) | ||||
| 	RET | ||||
|  | ||||
| // func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmCpuidex(SB), 7, $0 | ||||
| 	MOVL op+0(FP), AX | ||||
| 	MOVL op2+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(index uint32) (eax, edx uint32) | ||||
| TEXT ·asmXgetbv(SB), 7, $0 | ||||
| 	MOVL index+0(FP), CX | ||||
| 	BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV | ||||
| 	MOVL AX, eax+4(FP) | ||||
| 	MOVL DX, edx+8(FP) | ||||
| 	RET | ||||
|  | ||||
| // func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmRdtscpAsm(SB), 7, $0 | ||||
| 	BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP | ||||
| 	MOVL AX, eax+0(FP) | ||||
| 	MOVL BX, ebx+4(FP) | ||||
| 	MOVL CX, ecx+8(FP) | ||||
| 	MOVL DX, edx+12(FP) | ||||
| 	RET | ||||
|  | ||||
| // func asmDarwinHasAVX512() bool | ||||
| TEXT ·asmDarwinHasAVX512(SB), 7, $0 | ||||
| 	MOVL $0, eax+0(FP) | ||||
| 	RET | ||||
							
								
								
									
										72
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //+build amd64,!gccgo,!noasm,!appengine | ||||
|  | ||||
| // func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmCpuid(SB), 7, $0 | ||||
| 	XORQ CX, CX | ||||
| 	MOVL op+0(FP), AX | ||||
| 	CPUID | ||||
| 	MOVL AX, eax+8(FP) | ||||
| 	MOVL BX, ebx+12(FP) | ||||
| 	MOVL CX, ecx+16(FP) | ||||
| 	MOVL DX, edx+20(FP) | ||||
| 	RET | ||||
|  | ||||
| // func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmCpuidex(SB), 7, $0 | ||||
| 	MOVL op+0(FP), AX | ||||
| 	MOVL op2+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 asmXgetbv(index uint32) (eax, edx uint32) | ||||
| TEXT ·asmXgetbv(SB), 7, $0 | ||||
| 	MOVL index+0(FP), CX | ||||
| 	BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV | ||||
| 	MOVL AX, eax+8(FP) | ||||
| 	MOVL DX, edx+12(FP) | ||||
| 	RET | ||||
|  | ||||
| // func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) | ||||
| TEXT ·asmRdtscpAsm(SB), 7, $0 | ||||
| 	BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP | ||||
| 	MOVL AX, eax+0(FP) | ||||
| 	MOVL BX, ebx+4(FP) | ||||
| 	MOVL CX, ecx+8(FP) | ||||
| 	MOVL DX, edx+12(FP) | ||||
| 	RET | ||||
|  | ||||
| // From https://go-review.googlesource.com/c/sys/+/285572/ | ||||
| // func asmDarwinHasAVX512() bool | ||||
| TEXT ·asmDarwinHasAVX512(SB), 7, $0-1 | ||||
| 	MOVB $0, ret+0(FP) // default to false | ||||
|  | ||||
| #ifdef GOOS_darwin // return if not darwin | ||||
| #ifdef GOARCH_amd64 // return if not amd64 | ||||
| // These values from: | ||||
| // https://github.com/apple/darwin-xnu/blob/xnu-4570.1.46/osfmk/i386/cpu_capabilities.h | ||||
| #define commpage64_base_address         0x00007fffffe00000 | ||||
| #define commpage64_cpu_capabilities64   (commpage64_base_address+0x010) | ||||
| #define commpage64_version              (commpage64_base_address+0x01E) | ||||
| #define hasAVX512F                      0x0000004000000000 | ||||
| 	MOVQ $commpage64_version, BX | ||||
| 	MOVW (BX), AX | ||||
| 	CMPW AX, $13                            // versions < 13 do not support AVX512 | ||||
| 	JL   no_avx512 | ||||
| 	MOVQ $commpage64_cpu_capabilities64, BX | ||||
| 	MOVQ (BX), AX | ||||
| 	MOVQ $hasAVX512F, CX | ||||
| 	ANDQ CX, AX | ||||
| 	JZ   no_avx512 | ||||
| 	MOVB $1, ret+0(FP) | ||||
|  | ||||
| no_avx512: | ||||
| #endif | ||||
| #endif | ||||
| 	RET | ||||
|  | ||||
							
								
								
									
										26
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/klauspost/cpuid/v2/cpuid_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //+build arm64,!gccgo,!noasm,!appengine | ||||
|  | ||||
| // See https://www.kernel.org/doc/Documentation/arm64/cpu-feature-registers.txt | ||||
|  | ||||
| // func getMidr | ||||
| TEXT ·getMidr(SB), 7, $0 | ||||
| 	WORD $0xd5380000    // mrs x0, midr_el1         /* Main ID Register */ | ||||
| 	MOVD R0, midr+0(FP) | ||||
| 	RET | ||||
|  | ||||
| // func getProcFeatures | ||||
| TEXT ·getProcFeatures(SB), 7, $0 | ||||
| 	WORD $0xd5380400            // mrs x0, id_aa64pfr0_el1  /* Processor Feature Register 0 */ | ||||
| 	MOVD R0, procFeatures+0(FP) | ||||
| 	RET | ||||
|  | ||||
| // func getInstAttributes | ||||
| TEXT ·getInstAttributes(SB), 7, $0 | ||||
| 	WORD $0xd5380600            // mrs x0, id_aa64isar0_el1 /* Instruction Set Attribute Register 0 */ | ||||
| 	WORD $0xd5380621            // mrs x1, id_aa64isar1_el1 /* Instruction Set Attribute Register 1 */ | ||||
| 	MOVD R0, instAttrReg0+0(FP) | ||||
| 	MOVD R1, instAttrReg1+8(FP) | ||||
| 	RET | ||||
|  | ||||
							
								
								
									
										247
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,247 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build arm64 && !gccgo && !noasm && !appengine | ||||
| // +build arm64,!gccgo,!noasm,!appengine | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import "runtime" | ||||
|  | ||||
| func getMidr() (midr uint64) | ||||
| func getProcFeatures() (procFeatures uint64) | ||||
| func getInstAttributes() (instAttrReg0, instAttrReg1 uint64) | ||||
|  | ||||
| func initCPU() { | ||||
| 	cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| 	cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| 	xgetbv = func(uint32) (a, b uint32) { return 0, 0 } | ||||
| 	rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| } | ||||
|  | ||||
| func addInfo(c *CPUInfo, safe bool) { | ||||
| 	// Seems to be safe to assume on ARM64 | ||||
| 	c.CacheLine = 64 | ||||
| 	detectOS(c) | ||||
|  | ||||
| 	// ARM64 disabled since it may crash if interrupt is not intercepted by OS. | ||||
| 	if safe && !c.Supports(ARMCPUID) && runtime.GOOS != "freebsd" { | ||||
| 		return | ||||
| 	} | ||||
| 	midr := getMidr() | ||||
|  | ||||
| 	// MIDR_EL1 - Main ID Register | ||||
| 	// https://developer.arm.com/docs/ddi0595/h/aarch64-system-registers/midr_el1 | ||||
| 	//  x--------------------------------------------------x | ||||
| 	//  | Name                         |  bits   | visible | | ||||
| 	//  |--------------------------------------------------| | ||||
| 	//  | Implementer                  | [31-24] |    y    | | ||||
| 	//  |--------------------------------------------------| | ||||
| 	//  | Variant                      | [23-20] |    y    | | ||||
| 	//  |--------------------------------------------------| | ||||
| 	//  | Architecture                 | [19-16] |    y    | | ||||
| 	//  |--------------------------------------------------| | ||||
| 	//  | PartNum                      | [15-4]  |    y    | | ||||
| 	//  |--------------------------------------------------| | ||||
| 	//  | Revision                     | [3-0]   |    y    | | ||||
| 	//  x--------------------------------------------------x | ||||
|  | ||||
| 	switch (midr >> 24) & 0xff { | ||||
| 	case 0xC0: | ||||
| 		c.VendorString = "Ampere Computing" | ||||
| 		c.VendorID = Ampere | ||||
| 	case 0x41: | ||||
| 		c.VendorString = "Arm Limited" | ||||
| 		c.VendorID = ARM | ||||
| 	case 0x42: | ||||
| 		c.VendorString = "Broadcom Corporation" | ||||
| 		c.VendorID = Broadcom | ||||
| 	case 0x43: | ||||
| 		c.VendorString = "Cavium Inc" | ||||
| 		c.VendorID = Cavium | ||||
| 	case 0x44: | ||||
| 		c.VendorString = "Digital Equipment Corporation" | ||||
| 		c.VendorID = DEC | ||||
| 	case 0x46: | ||||
| 		c.VendorString = "Fujitsu Ltd" | ||||
| 		c.VendorID = Fujitsu | ||||
| 	case 0x49: | ||||
| 		c.VendorString = "Infineon Technologies AG" | ||||
| 		c.VendorID = Infineon | ||||
| 	case 0x4D: | ||||
| 		c.VendorString = "Motorola or Freescale Semiconductor Inc" | ||||
| 		c.VendorID = Motorola | ||||
| 	case 0x4E: | ||||
| 		c.VendorString = "NVIDIA Corporation" | ||||
| 		c.VendorID = NVIDIA | ||||
| 	case 0x50: | ||||
| 		c.VendorString = "Applied Micro Circuits Corporation" | ||||
| 		c.VendorID = AMCC | ||||
| 	case 0x51: | ||||
| 		c.VendorString = "Qualcomm Inc" | ||||
| 		c.VendorID = Qualcomm | ||||
| 	case 0x56: | ||||
| 		c.VendorString = "Marvell International Ltd" | ||||
| 		c.VendorID = Marvell | ||||
| 	case 0x69: | ||||
| 		c.VendorString = "Intel Corporation" | ||||
| 		c.VendorID = Intel | ||||
| 	} | ||||
|  | ||||
| 	// Lower 4 bits: Architecture | ||||
| 	// Architecture	Meaning | ||||
| 	// 0b0001		Armv4. | ||||
| 	// 0b0010		Armv4T. | ||||
| 	// 0b0011		Armv5 (obsolete). | ||||
| 	// 0b0100		Armv5T. | ||||
| 	// 0b0101		Armv5TE. | ||||
| 	// 0b0110		Armv5TEJ. | ||||
| 	// 0b0111		Armv6. | ||||
| 	// 0b1111		Architectural features are individually identified in the ID_* registers, see 'ID registers'. | ||||
| 	// Upper 4 bit: Variant | ||||
| 	// An IMPLEMENTATION DEFINED variant number. | ||||
| 	// Typically, this field is used to distinguish between different product variants, or major revisions of a product. | ||||
| 	c.Family = int(midr>>16) & 0xff | ||||
|  | ||||
| 	// PartNum, bits [15:4] | ||||
| 	// An IMPLEMENTATION DEFINED primary part number for the device. | ||||
| 	// On processors implemented by Arm, if the top four bits of the primary | ||||
| 	// part number are 0x0 or 0x7, the variant and architecture are encoded differently. | ||||
| 	// Revision, bits [3:0] | ||||
| 	// An IMPLEMENTATION DEFINED revision number for the device. | ||||
| 	c.Model = int(midr) & 0xffff | ||||
|  | ||||
| 	procFeatures := getProcFeatures() | ||||
|  | ||||
| 	// ID_AA64PFR0_EL1 - Processor Feature Register 0 | ||||
| 	// x--------------------------------------------------x | ||||
| 	// | Name                         |  bits   | visible | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | DIT                          | [51-48] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SVE                          | [35-32] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | GIC                          | [27-24] |    n    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | AdvSIMD                      | [23-20] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | FP                           | [19-16] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | EL3                          | [15-12] |    n    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | EL2                          | [11-8]  |    n    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | EL1                          | [7-4]   |    n    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | EL0                          | [3-0]   |    n    | | ||||
| 	// x--------------------------------------------------x | ||||
|  | ||||
| 	var f flagSet | ||||
| 	// if procFeatures&(0xf<<48) != 0 { | ||||
| 	// 	fmt.Println("DIT") | ||||
| 	// } | ||||
| 	f.setIf(procFeatures&(0xf<<32) != 0, SVE) | ||||
| 	if procFeatures&(0xf<<20) != 15<<20 { | ||||
| 		f.set(ASIMD) | ||||
| 		// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64pfr0_el1 | ||||
| 		// 0b0001 --> As for 0b0000, and also includes support for half-precision floating-point arithmetic. | ||||
| 		f.setIf(procFeatures&(0xf<<20) == 1<<20, FPHP, ASIMDHP) | ||||
| 	} | ||||
| 	f.setIf(procFeatures&(0xf<<16) != 0, FP) | ||||
|  | ||||
| 	instAttrReg0, instAttrReg1 := getInstAttributes() | ||||
|  | ||||
| 	// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 | ||||
| 	// | ||||
| 	// ID_AA64ISAR0_EL1 - Instruction Set Attribute Register 0 | ||||
| 	// x--------------------------------------------------x | ||||
| 	// | Name                         |  bits   | visible | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | TS                           | [55-52] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | FHM                          | [51-48] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | DP                           | [47-44] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SM4                          | [43-40] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SM3                          | [39-36] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SHA3                         | [35-32] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | RDM                          | [31-28] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | ATOMICS                      | [23-20] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | CRC32                        | [19-16] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SHA2                         | [15-12] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | SHA1                         | [11-8]  |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | AES                          | [7-4]   |    y    | | ||||
| 	// x--------------------------------------------------x | ||||
|  | ||||
| 	// if instAttrReg0&(0xf<<52) != 0 { | ||||
| 	// 	fmt.Println("TS") | ||||
| 	// } | ||||
| 	// if instAttrReg0&(0xf<<48) != 0 { | ||||
| 	// 	fmt.Println("FHM") | ||||
| 	// } | ||||
| 	f.setIf(instAttrReg0&(0xf<<44) != 0, ASIMDDP) | ||||
| 	f.setIf(instAttrReg0&(0xf<<40) != 0, SM4) | ||||
| 	f.setIf(instAttrReg0&(0xf<<36) != 0, SM3) | ||||
| 	f.setIf(instAttrReg0&(0xf<<32) != 0, SHA3) | ||||
| 	f.setIf(instAttrReg0&(0xf<<28) != 0, ASIMDRDM) | ||||
| 	f.setIf(instAttrReg0&(0xf<<20) != 0, ATOMICS) | ||||
| 	f.setIf(instAttrReg0&(0xf<<16) != 0, CRC32) | ||||
| 	f.setIf(instAttrReg0&(0xf<<12) != 0, SHA2) | ||||
| 	// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 | ||||
| 	// 0b0010 --> As 0b0001, plus SHA512H, SHA512H2, SHA512SU0, and SHA512SU1 instructions implemented. | ||||
| 	f.setIf(instAttrReg0&(0xf<<12) == 2<<12, SHA512) | ||||
| 	f.setIf(instAttrReg0&(0xf<<8) != 0, SHA1) | ||||
| 	f.setIf(instAttrReg0&(0xf<<4) != 0, AESARM) | ||||
| 	// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1 | ||||
| 	// 0b0010 --> As for 0b0001, plus PMULL/PMULL2 instructions operating on 64-bit data quantities. | ||||
| 	f.setIf(instAttrReg0&(0xf<<4) == 2<<4, PMULL) | ||||
|  | ||||
| 	// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar1_el1 | ||||
| 	// | ||||
| 	// ID_AA64ISAR1_EL1 - Instruction set attribute register 1 | ||||
| 	// x--------------------------------------------------x | ||||
| 	// | Name                         |  bits   | visible | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | GPI                          | [31-28] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | GPA                          | [27-24] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | LRCPC                        | [23-20] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | FCMA                         | [19-16] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | JSCVT                        | [15-12] |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | API                          | [11-8]  |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | APA                          | [7-4]   |    y    | | ||||
| 	// |--------------------------------------------------| | ||||
| 	// | DPB                          | [3-0]   |    y    | | ||||
| 	// x--------------------------------------------------x | ||||
|  | ||||
| 	// if instAttrReg1&(0xf<<28) != 0 { | ||||
| 	// 	fmt.Println("GPI") | ||||
| 	// } | ||||
| 	f.setIf(instAttrReg1&(0xf<<28) != 24, GPA) | ||||
| 	f.setIf(instAttrReg1&(0xf<<20) != 0, LRCPC) | ||||
| 	f.setIf(instAttrReg1&(0xf<<16) != 0, FCMA) | ||||
| 	f.setIf(instAttrReg1&(0xf<<12) != 0, JSCVT) | ||||
| 	// if instAttrReg1&(0xf<<8) != 0 { | ||||
| 	// 	fmt.Println("API") | ||||
| 	// } | ||||
| 	// if instAttrReg1&(0xf<<4) != 0 { | ||||
| 	// 	fmt.Println("APA") | ||||
| 	// } | ||||
| 	f.setIf(instAttrReg1&(0xf<<0) != 0, DCPOP) | ||||
|  | ||||
| 	// Store | ||||
| 	c.featureSet.or(f) | ||||
| } | ||||
							
								
								
									
										15
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_ref.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_ref.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build (!amd64 && !386 && !arm64) || gccgo || noasm || appengine | ||||
| // +build !amd64,!386,!arm64 gccgo noasm appengine | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| func initCPU() { | ||||
| 	cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| 	cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| 	xgetbv = func(uint32) (a, b uint32) { return 0, 0 } | ||||
| 	rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 } | ||||
| } | ||||
|  | ||||
| func addInfo(info *CPUInfo, safe bool) {} | ||||
							
								
								
									
										36
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/github.com/klauspost/cpuid/v2/detect_x86.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine) | ||||
| // +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32) | ||||
| func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) | ||||
| func asmXgetbv(index uint32) (eax, edx uint32) | ||||
| func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) | ||||
| func asmDarwinHasAVX512() bool | ||||
|  | ||||
| func initCPU() { | ||||
| 	cpuid = asmCpuid | ||||
| 	cpuidex = asmCpuidex | ||||
| 	xgetbv = asmXgetbv | ||||
| 	rdtscpAsm = asmRdtscpAsm | ||||
| 	darwinHasAVX512 = asmDarwinHasAVX512 | ||||
| } | ||||
|  | ||||
| func addInfo(c *CPUInfo, safe bool) { | ||||
| 	c.maxFunc = maxFunctionID() | ||||
| 	c.maxExFunc = maxExtendedFunction() | ||||
| 	c.BrandName = brandName() | ||||
| 	c.CacheLine = cacheLine() | ||||
| 	c.Family, c.Model, c.Stepping = familyModel() | ||||
| 	c.featureSet = support() | ||||
| 	c.SGX = hasSGX(c.featureSet.inSet(SGX), c.featureSet.inSet(SGXLC)) | ||||
| 	c.ThreadsPerCore = threadsPerCore() | ||||
| 	c.LogicalCores = logicalCores() | ||||
| 	c.PhysicalCores = physicalCores() | ||||
| 	c.VendorID, c.VendorString = vendorID() | ||||
| 	c.cacheSize() | ||||
| 	c.frequencies() | ||||
| } | ||||
							
								
								
									
										272
									
								
								vendor/github.com/klauspost/cpuid/v2/featureid_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								vendor/github.com/klauspost/cpuid/v2/featureid_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,272 @@ | ||||
| // Code generated by "stringer -type=FeatureID,Vendor"; DO NOT EDIT. | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import "strconv" | ||||
|  | ||||
| func _() { | ||||
| 	// An "invalid array index" compiler error signifies that the constant values have changed. | ||||
| 	// Re-run the stringer command to generate them again. | ||||
| 	var x [1]struct{} | ||||
| 	_ = x[ADX-1] | ||||
| 	_ = x[AESNI-2] | ||||
| 	_ = x[AMD3DNOW-3] | ||||
| 	_ = x[AMD3DNOWEXT-4] | ||||
| 	_ = x[AMXBF16-5] | ||||
| 	_ = x[AMXFP16-6] | ||||
| 	_ = x[AMXINT8-7] | ||||
| 	_ = x[AMXTILE-8] | ||||
| 	_ = x[AVX-9] | ||||
| 	_ = x[AVX2-10] | ||||
| 	_ = x[AVX512BF16-11] | ||||
| 	_ = x[AVX512BITALG-12] | ||||
| 	_ = x[AVX512BW-13] | ||||
| 	_ = x[AVX512CD-14] | ||||
| 	_ = x[AVX512DQ-15] | ||||
| 	_ = x[AVX512ER-16] | ||||
| 	_ = x[AVX512F-17] | ||||
| 	_ = x[AVX512FP16-18] | ||||
| 	_ = x[AVX512IFMA-19] | ||||
| 	_ = x[AVX512PF-20] | ||||
| 	_ = x[AVX512VBMI-21] | ||||
| 	_ = x[AVX512VBMI2-22] | ||||
| 	_ = x[AVX512VL-23] | ||||
| 	_ = x[AVX512VNNI-24] | ||||
| 	_ = x[AVX512VP2INTERSECT-25] | ||||
| 	_ = x[AVX512VPOPCNTDQ-26] | ||||
| 	_ = x[AVXIFMA-27] | ||||
| 	_ = x[AVXNECONVERT-28] | ||||
| 	_ = x[AVXSLOW-29] | ||||
| 	_ = x[AVXVNNI-30] | ||||
| 	_ = x[AVXVNNIINT8-31] | ||||
| 	_ = x[BHI_CTRL-32] | ||||
| 	_ = x[BMI1-33] | ||||
| 	_ = x[BMI2-34] | ||||
| 	_ = x[CETIBT-35] | ||||
| 	_ = x[CETSS-36] | ||||
| 	_ = x[CLDEMOTE-37] | ||||
| 	_ = x[CLMUL-38] | ||||
| 	_ = x[CLZERO-39] | ||||
| 	_ = x[CMOV-40] | ||||
| 	_ = x[CMPCCXADD-41] | ||||
| 	_ = x[CMPSB_SCADBS_SHORT-42] | ||||
| 	_ = x[CMPXCHG8-43] | ||||
| 	_ = x[CPBOOST-44] | ||||
| 	_ = x[CPPC-45] | ||||
| 	_ = x[CX16-46] | ||||
| 	_ = x[EFER_LMSLE_UNS-47] | ||||
| 	_ = x[ENQCMD-48] | ||||
| 	_ = x[ERMS-49] | ||||
| 	_ = x[F16C-50] | ||||
| 	_ = x[FLUSH_L1D-51] | ||||
| 	_ = x[FMA3-52] | ||||
| 	_ = x[FMA4-53] | ||||
| 	_ = x[FP128-54] | ||||
| 	_ = x[FP256-55] | ||||
| 	_ = x[FSRM-56] | ||||
| 	_ = x[FXSR-57] | ||||
| 	_ = x[FXSROPT-58] | ||||
| 	_ = x[GFNI-59] | ||||
| 	_ = x[HLE-60] | ||||
| 	_ = x[HRESET-61] | ||||
| 	_ = x[HTT-62] | ||||
| 	_ = x[HWA-63] | ||||
| 	_ = x[HYBRID_CPU-64] | ||||
| 	_ = x[HYPERVISOR-65] | ||||
| 	_ = x[IA32_ARCH_CAP-66] | ||||
| 	_ = x[IA32_CORE_CAP-67] | ||||
| 	_ = x[IBPB-68] | ||||
| 	_ = x[IBRS-69] | ||||
| 	_ = x[IBRS_PREFERRED-70] | ||||
| 	_ = x[IBRS_PROVIDES_SMP-71] | ||||
| 	_ = x[IBS-72] | ||||
| 	_ = x[IBSBRNTRGT-73] | ||||
| 	_ = x[IBSFETCHSAM-74] | ||||
| 	_ = x[IBSFFV-75] | ||||
| 	_ = x[IBSOPCNT-76] | ||||
| 	_ = x[IBSOPCNTEXT-77] | ||||
| 	_ = x[IBSOPSAM-78] | ||||
| 	_ = x[IBSRDWROPCNT-79] | ||||
| 	_ = x[IBSRIPINVALIDCHK-80] | ||||
| 	_ = x[IBS_FETCH_CTLX-81] | ||||
| 	_ = x[IBS_OPDATA4-82] | ||||
| 	_ = x[IBS_OPFUSE-83] | ||||
| 	_ = x[IBS_PREVENTHOST-84] | ||||
| 	_ = x[IBS_ZEN4-85] | ||||
| 	_ = x[IDPRED_CTRL-86] | ||||
| 	_ = x[INT_WBINVD-87] | ||||
| 	_ = x[INVLPGB-88] | ||||
| 	_ = x[LAHF-89] | ||||
| 	_ = x[LAM-90] | ||||
| 	_ = x[LBRVIRT-91] | ||||
| 	_ = x[LZCNT-92] | ||||
| 	_ = x[MCAOVERFLOW-93] | ||||
| 	_ = x[MCDT_NO-94] | ||||
| 	_ = x[MCOMMIT-95] | ||||
| 	_ = x[MD_CLEAR-96] | ||||
| 	_ = x[MMX-97] | ||||
| 	_ = x[MMXEXT-98] | ||||
| 	_ = x[MOVBE-99] | ||||
| 	_ = x[MOVDIR64B-100] | ||||
| 	_ = x[MOVDIRI-101] | ||||
| 	_ = x[MOVSB_ZL-102] | ||||
| 	_ = x[MOVU-103] | ||||
| 	_ = x[MPX-104] | ||||
| 	_ = x[MSRIRC-105] | ||||
| 	_ = x[MSRLIST-106] | ||||
| 	_ = x[MSR_PAGEFLUSH-107] | ||||
| 	_ = x[NRIPS-108] | ||||
| 	_ = x[NX-109] | ||||
| 	_ = x[OSXSAVE-110] | ||||
| 	_ = x[PCONFIG-111] | ||||
| 	_ = x[POPCNT-112] | ||||
| 	_ = x[PPIN-113] | ||||
| 	_ = x[PREFETCHI-114] | ||||
| 	_ = x[PSFD-115] | ||||
| 	_ = x[RDPRU-116] | ||||
| 	_ = x[RDRAND-117] | ||||
| 	_ = x[RDSEED-118] | ||||
| 	_ = x[RDTSCP-119] | ||||
| 	_ = x[RRSBA_CTRL-120] | ||||
| 	_ = x[RTM-121] | ||||
| 	_ = x[RTM_ALWAYS_ABORT-122] | ||||
| 	_ = x[SERIALIZE-123] | ||||
| 	_ = x[SEV-124] | ||||
| 	_ = x[SEV_64BIT-125] | ||||
| 	_ = x[SEV_ALTERNATIVE-126] | ||||
| 	_ = x[SEV_DEBUGSWAP-127] | ||||
| 	_ = x[SEV_ES-128] | ||||
| 	_ = x[SEV_RESTRICTED-129] | ||||
| 	_ = x[SEV_SNP-130] | ||||
| 	_ = x[SGX-131] | ||||
| 	_ = x[SGXLC-132] | ||||
| 	_ = x[SHA-133] | ||||
| 	_ = x[SME-134] | ||||
| 	_ = x[SME_COHERENT-135] | ||||
| 	_ = x[SPEC_CTRL_SSBD-136] | ||||
| 	_ = x[SRBDS_CTRL-137] | ||||
| 	_ = x[SSE-138] | ||||
| 	_ = x[SSE2-139] | ||||
| 	_ = x[SSE3-140] | ||||
| 	_ = x[SSE4-141] | ||||
| 	_ = x[SSE42-142] | ||||
| 	_ = x[SSE4A-143] | ||||
| 	_ = x[SSSE3-144] | ||||
| 	_ = x[STIBP-145] | ||||
| 	_ = x[STIBP_ALWAYSON-146] | ||||
| 	_ = x[STOSB_SHORT-147] | ||||
| 	_ = x[SUCCOR-148] | ||||
| 	_ = x[SVM-149] | ||||
| 	_ = x[SVMDA-150] | ||||
| 	_ = x[SVMFBASID-151] | ||||
| 	_ = x[SVML-152] | ||||
| 	_ = x[SVMNP-153] | ||||
| 	_ = x[SVMPF-154] | ||||
| 	_ = x[SVMPFT-155] | ||||
| 	_ = x[SYSCALL-156] | ||||
| 	_ = x[SYSEE-157] | ||||
| 	_ = x[TBM-158] | ||||
| 	_ = x[TDX_GUEST-159] | ||||
| 	_ = x[TLB_FLUSH_NESTED-160] | ||||
| 	_ = x[TME-161] | ||||
| 	_ = x[TOPEXT-162] | ||||
| 	_ = x[TSCRATEMSR-163] | ||||
| 	_ = x[TSXLDTRK-164] | ||||
| 	_ = x[VAES-165] | ||||
| 	_ = x[VMCBCLEAN-166] | ||||
| 	_ = x[VMPL-167] | ||||
| 	_ = x[VMSA_REGPROT-168] | ||||
| 	_ = x[VMX-169] | ||||
| 	_ = x[VPCLMULQDQ-170] | ||||
| 	_ = x[VTE-171] | ||||
| 	_ = x[WAITPKG-172] | ||||
| 	_ = x[WBNOINVD-173] | ||||
| 	_ = x[WRMSRNS-174] | ||||
| 	_ = x[X87-175] | ||||
| 	_ = x[XGETBV1-176] | ||||
| 	_ = x[XOP-177] | ||||
| 	_ = x[XSAVE-178] | ||||
| 	_ = x[XSAVEC-179] | ||||
| 	_ = x[XSAVEOPT-180] | ||||
| 	_ = x[XSAVES-181] | ||||
| 	_ = x[AESARM-182] | ||||
| 	_ = x[ARMCPUID-183] | ||||
| 	_ = x[ASIMD-184] | ||||
| 	_ = x[ASIMDDP-185] | ||||
| 	_ = x[ASIMDHP-186] | ||||
| 	_ = x[ASIMDRDM-187] | ||||
| 	_ = x[ATOMICS-188] | ||||
| 	_ = x[CRC32-189] | ||||
| 	_ = x[DCPOP-190] | ||||
| 	_ = x[EVTSTRM-191] | ||||
| 	_ = x[FCMA-192] | ||||
| 	_ = x[FP-193] | ||||
| 	_ = x[FPHP-194] | ||||
| 	_ = x[GPA-195] | ||||
| 	_ = x[JSCVT-196] | ||||
| 	_ = x[LRCPC-197] | ||||
| 	_ = x[PMULL-198] | ||||
| 	_ = x[SHA1-199] | ||||
| 	_ = x[SHA2-200] | ||||
| 	_ = x[SHA3-201] | ||||
| 	_ = x[SHA512-202] | ||||
| 	_ = x[SM3-203] | ||||
| 	_ = x[SM4-204] | ||||
| 	_ = x[SVE-205] | ||||
| 	_ = x[lastID-206] | ||||
| 	_ = x[firstID-0] | ||||
| } | ||||
|  | ||||
| const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" | ||||
|  | ||||
| var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 62, 65, 69, 79, 91, 99, 107, 115, 123, 130, 140, 150, 158, 168, 179, 187, 197, 215, 230, 237, 249, 256, 263, 274, 282, 286, 290, 296, 301, 309, 314, 320, 324, 333, 351, 359, 366, 370, 374, 388, 394, 398, 402, 411, 415, 419, 424, 429, 433, 437, 444, 448, 451, 457, 460, 463, 473, 483, 496, 509, 513, 517, 531, 548, 551, 561, 572, 578, 586, 597, 605, 617, 633, 647, 658, 668, 683, 691, 702, 712, 719, 723, 726, 733, 738, 749, 756, 763, 771, 774, 780, 785, 794, 801, 809, 813, 816, 822, 829, 842, 847, 849, 856, 863, 869, 873, 882, 886, 891, 897, 903, 909, 919, 922, 938, 947, 950, 959, 974, 987, 993, 1007, 1014, 1017, 1022, 1025, 1028, 1040, 1054, 1064, 1067, 1071, 1075, 1079, 1084, 1089, 1094, 1099, 1113, 1124, 1130, 1133, 1138, 1147, 1151, 1156, 1161, 1167, 1174, 1179, 1182, 1191, 1207, 1210, 1216, 1226, 1234, 1238, 1247, 1251, 1263, 1266, 1276, 1279, 1286, 1294, 1301, 1304, 1311, 1314, 1319, 1325, 1333, 1339, 1345, 1353, 1358, 1365, 1372, 1380, 1387, 1392, 1397, 1404, 1408, 1410, 1414, 1417, 1422, 1427, 1432, 1436, 1440, 1444, 1450, 1453, 1456, 1459, 1465} | ||||
|  | ||||
| func (i FeatureID) String() string { | ||||
| 	if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { | ||||
| 		return "FeatureID(" + strconv.FormatInt(int64(i), 10) + ")" | ||||
| 	} | ||||
| 	return _FeatureID_name[_FeatureID_index[i]:_FeatureID_index[i+1]] | ||||
| } | ||||
| func _() { | ||||
| 	// An "invalid array index" compiler error signifies that the constant values have changed. | ||||
| 	// Re-run the stringer command to generate them again. | ||||
| 	var x [1]struct{} | ||||
| 	_ = x[VendorUnknown-0] | ||||
| 	_ = x[Intel-1] | ||||
| 	_ = x[AMD-2] | ||||
| 	_ = x[VIA-3] | ||||
| 	_ = x[Transmeta-4] | ||||
| 	_ = x[NSC-5] | ||||
| 	_ = x[KVM-6] | ||||
| 	_ = x[MSVM-7] | ||||
| 	_ = x[VMware-8] | ||||
| 	_ = x[XenHVM-9] | ||||
| 	_ = x[Bhyve-10] | ||||
| 	_ = x[Hygon-11] | ||||
| 	_ = x[SiS-12] | ||||
| 	_ = x[RDC-13] | ||||
| 	_ = x[Ampere-14] | ||||
| 	_ = x[ARM-15] | ||||
| 	_ = x[Broadcom-16] | ||||
| 	_ = x[Cavium-17] | ||||
| 	_ = x[DEC-18] | ||||
| 	_ = x[Fujitsu-19] | ||||
| 	_ = x[Infineon-20] | ||||
| 	_ = x[Motorola-21] | ||||
| 	_ = x[NVIDIA-22] | ||||
| 	_ = x[AMCC-23] | ||||
| 	_ = x[Qualcomm-24] | ||||
| 	_ = x[Marvell-25] | ||||
| 	_ = x[lastVendor-26] | ||||
| } | ||||
|  | ||||
| const _Vendor_name = "VendorUnknownIntelAMDVIATransmetaNSCKVMMSVMVMwareXenHVMBhyveHygonSiSRDCAmpereARMBroadcomCaviumDECFujitsuInfineonMotorolaNVIDIAAMCCQualcommMarvelllastVendor" | ||||
|  | ||||
| var _Vendor_index = [...]uint8{0, 13, 18, 21, 24, 33, 36, 39, 43, 49, 55, 60, 65, 68, 71, 77, 80, 88, 94, 97, 104, 112, 120, 126, 130, 138, 145, 155} | ||||
|  | ||||
| func (i Vendor) String() string { | ||||
| 	if i < 0 || i >= Vendor(len(_Vendor_index)-1) { | ||||
| 		return "Vendor(" + strconv.FormatInt(int64(i), 10) + ")" | ||||
| 	} | ||||
| 	return _Vendor_name[_Vendor_index[i]:_Vendor_index[i+1]] | ||||
| } | ||||
							
								
								
									
										121
									
								
								vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| // Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import ( | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| func detectOS(c *CPUInfo) bool { | ||||
| 	if runtime.GOOS != "ios" { | ||||
| 		tryToFillCPUInfoFomSysctl(c) | ||||
| 	} | ||||
| 	// There are no hw.optional sysctl values for the below features on Mac OS 11.0 | ||||
| 	// to detect their supported state dynamically. Assume the CPU features that | ||||
| 	// Apple Silicon M1 supports to be available as a minimal set of features | ||||
| 	// to all Go programs running on darwin/arm64. | ||||
| 	// TODO: Add more if we know them. | ||||
| 	c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2) | ||||
|  | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func sysctlGetBool(name string) bool { | ||||
| 	value, err := unix.SysctlUint32(name) | ||||
| 	if err != nil { | ||||
| 		return false | ||||
| 	} | ||||
| 	return value != 0 | ||||
| } | ||||
|  | ||||
| func sysctlGetString(name string) string { | ||||
| 	value, err := unix.Sysctl(name) | ||||
| 	if err != nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return value | ||||
| } | ||||
|  | ||||
| func sysctlGetInt(unknown int, names ...string) int { | ||||
| 	for _, name := range names { | ||||
| 		value, err := unix.SysctlUint32(name) | ||||
| 		if err != nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		if value != 0 { | ||||
| 			return int(value) | ||||
| 		} | ||||
| 	} | ||||
| 	return unknown | ||||
| } | ||||
|  | ||||
| func sysctlGetInt64(unknown int, names ...string) int { | ||||
| 	for _, name := range names { | ||||
| 		value64, err := unix.SysctlUint64(name) | ||||
| 		if err != nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		if int(value64) != unknown { | ||||
| 			return int(value64) | ||||
| 		} | ||||
| 	} | ||||
| 	return unknown | ||||
| } | ||||
|  | ||||
| func setFeature(c *CPUInfo, name string, feature FeatureID) { | ||||
| 	c.featureSet.setIf(sysctlGetBool(name), feature) | ||||
| } | ||||
| func tryToFillCPUInfoFomSysctl(c *CPUInfo) { | ||||
| 	c.BrandName = sysctlGetString("machdep.cpu.brand_string") | ||||
|  | ||||
| 	if len(c.BrandName) != 0 { | ||||
| 		c.VendorString = strings.Fields(c.BrandName)[0] | ||||
| 	} | ||||
|  | ||||
| 	c.PhysicalCores = sysctlGetInt(runtime.NumCPU(), "hw.physicalcpu") | ||||
| 	c.ThreadsPerCore = sysctlGetInt(1, "machdep.cpu.thread_count", "kern.num_threads") / | ||||
| 		sysctlGetInt(1, "hw.physicalcpu") | ||||
| 	c.LogicalCores = sysctlGetInt(runtime.NumCPU(), "machdep.cpu.core_count") | ||||
| 	c.Family = sysctlGetInt(0, "machdep.cpu.family", "hw.cpufamily") | ||||
| 	c.Model = sysctlGetInt(0, "machdep.cpu.model") | ||||
| 	c.CacheLine = sysctlGetInt64(0, "hw.cachelinesize") | ||||
| 	c.Cache.L1I = sysctlGetInt64(-1, "hw.l1icachesize") | ||||
| 	c.Cache.L1D = sysctlGetInt64(-1, "hw.l1dcachesize") | ||||
| 	c.Cache.L2 = sysctlGetInt64(-1, "hw.l2cachesize") | ||||
| 	c.Cache.L3 = sysctlGetInt64(-1, "hw.l3cachesize") | ||||
|  | ||||
| 	// from https://developer.arm.com/downloads/-/exploration-tools/feature-names-for-a-profile | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_AES", AESARM) | ||||
| 	setFeature(c, "hw.optional.AdvSIMD", ASIMD) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_DotProd", ASIMDDP) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_RDM", ASIMDRDM) | ||||
| 	setFeature(c, "hw.optional.FEAT_CRC32", CRC32) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_DPB", DCPOP) | ||||
| 	// setFeature(c, "", EVTSTRM) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_FCMA", FCMA) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_FP", FP) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_JSCVT", JSCVT) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_LRCPC", LRCPC) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_PMULL", PMULL) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_SHA1", SHA1) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_SHA256", SHA2) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_SHA3", SHA3) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_SHA512", SHA512) | ||||
| 	// setFeature(c, "", SM3) | ||||
| 	// setFeature(c, "", SM4) | ||||
| 	setFeature(c, "hw.optional.arm.FEAT_SVE", SVE) | ||||
|  | ||||
| 	// from empirical observation | ||||
| 	setFeature(c, "hw.optional.AdvSIMD_HPFPCvt", ASIMDHP) | ||||
| 	setFeature(c, "hw.optional.armv8_1_atomics", ATOMICS) | ||||
| 	setFeature(c, "hw.optional.floatingpoint", FP) | ||||
| 	setFeature(c, "hw.optional.armv8_2_sha3", SHA3) | ||||
| 	setFeature(c, "hw.optional.armv8_2_sha512", SHA512) | ||||
| 	setFeature(c, "hw.optional.armv8_3_compnum", FCMA) | ||||
| 	setFeature(c, "hw.optional.armv8_crc32", CRC32) | ||||
| } | ||||
							
								
								
									
										130
									
								
								vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								vendor/github.com/klauspost/cpuid/v2/os_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | ||||
| // Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| // 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 located | ||||
| // here https://github.com/golang/sys/blob/master/LICENSE | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"io/ioutil" | ||||
| 	"runtime" | ||||
| ) | ||||
|  | ||||
| // HWCAP bits. | ||||
| 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 detectOS(c *CPUInfo) bool { | ||||
| 	// For now assuming no hyperthreading is reasonable. | ||||
| 	c.LogicalCores = runtime.NumCPU() | ||||
| 	c.PhysicalCores = c.LogicalCores | ||||
| 	c.ThreadsPerCore = 1 | ||||
| 	if hwcap == 0 { | ||||
| 		// We did not get values from the runtime. | ||||
| 		// Try reading /proc/self/auxv | ||||
|  | ||||
| 		// From https://github.com/golang/sys | ||||
| 		const ( | ||||
| 			_AT_HWCAP  = 16 | ||||
| 			_AT_HWCAP2 = 26 | ||||
|  | ||||
| 			uintSize = int(32 << (^uint(0) >> 63)) | ||||
| 		) | ||||
|  | ||||
| 		buf, err := ioutil.ReadFile("/proc/self/auxv") | ||||
| 		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 false | ||||
| 		} | ||||
| 		bo := binary.LittleEndian | ||||
| 		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: | ||||
| 				// Not used | ||||
| 			} | ||||
| 		} | ||||
| 		if hwcap == 0 { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// HWCap was populated by the runtime from the auxiliary vector. | ||||
| 	// Use HWCap information since reading aarch64 system registers | ||||
| 	// is not supported in user space on older linux kernels. | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_AES), AESARM) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_ASIMD), ASIMD) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDDP), ASIMDDP) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDHP), ASIMDHP) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_ASIMDRDM), ASIMDRDM) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_CPUID), ARMCPUID) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_CRC32), CRC32) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_DCPOP), DCPOP) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_EVTSTRM), EVTSTRM) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_FCMA), FCMA) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_FP), FP) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_FPHP), FPHP) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_JSCVT), JSCVT) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_LRCPC), LRCPC) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_PMULL), PMULL) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SHA1), SHA1) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SHA2), SHA2) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SHA3), SHA3) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SHA512), SHA512) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SM3), SM3) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SM4), SM4) | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_SVE), SVE) | ||||
|  | ||||
| 	// The Samsung S9+ kernel reports support for atomics, but not all cores | ||||
| 	// actually support them, resulting in SIGILL. See issue #28431. | ||||
| 	// TODO(elias.naur): Only disable the optimization on bad chipsets on android. | ||||
| 	c.featureSet.setIf(isSet(hwcap, hwcap_ATOMICS) && runtime.GOOS != "android", ATOMICS) | ||||
|  | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func isSet(hwc uint, value uint) bool { | ||||
| 	return hwc&value != 0 | ||||
| } | ||||
							
								
								
									
										16
									
								
								vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build arm64 && !linux && !darwin | ||||
| // +build arm64,!linux,!darwin | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import "runtime" | ||||
|  | ||||
| func detectOS(c *CPUInfo) bool { | ||||
| 	c.PhysicalCores = runtime.NumCPU() | ||||
| 	// For now assuming 1 thread per core... | ||||
| 	c.ThreadsPerCore = 1 | ||||
| 	c.LogicalCores = c.PhysicalCores | ||||
| 	return false | ||||
| } | ||||
							
								
								
									
										8
									
								
								vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build nounsafe | ||||
| // +build nounsafe | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| var hwcap uint | ||||
							
								
								
									
										11
									
								
								vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. | ||||
|  | ||||
| //go:build !nounsafe | ||||
| // +build !nounsafe | ||||
|  | ||||
| package cpuid | ||||
|  | ||||
| import _ "unsafe" // needed for go:linkname | ||||
|  | ||||
| //go:linkname hwcap internal/cpu.HWCap | ||||
| var hwcap uint | ||||
							
								
								
									
										15
									
								
								vendor/github.com/klauspost/cpuid/v2/test-architectures.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/klauspost/cpuid/v2/test-architectures.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
| go tool dist list | while IFS=/ read os arch; do | ||||
|     echo "Checking $os/$arch..." | ||||
|     echo " normal" | ||||
|     GOARCH=$arch GOOS=$os go build -o /dev/null . | ||||
|     echo " noasm" | ||||
|     GOARCH=$arch GOOS=$os go build -tags noasm -o /dev/null . | ||||
|     echo " appengine" | ||||
|     GOARCH=$arch GOOS=$os go build -tags appengine -o /dev/null . | ||||
|     echo " noasm,appengine" | ||||
|     GOARCH=$arch GOOS=$os go build -tags 'appengine noasm' -o /dev/null . | ||||
| done | ||||
		Reference in New Issue
	
	Block a user
	 anthonyrawlins
					anthonyrawlins