mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-04 08:07:19 -04:00
cpu: detect RDRAND and RDSEED instructions on x86
Change-Id: I2d0094d64ba12f888758aeebdb43aed353ddeeb9 Reviewed-on: https://go-review.googlesource.com/c/160577 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
committed by
Tobias Klauser
parent
aca44879d5
commit
2970a3744d
@@ -29,6 +29,8 @@ var X86 struct {
|
|||||||
HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
|
HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
|
||||||
HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM
|
HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM
|
||||||
HasPOPCNT bool // Hamming weight instruction POPCNT.
|
HasPOPCNT bool // Hamming weight instruction POPCNT.
|
||||||
|
HasRDRAND bool // RDRAND instruction (on-chip random number generator)
|
||||||
|
HasRDSEED bool // RDSEED instruction (on-chip random number generator)
|
||||||
HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64)
|
HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64)
|
||||||
HasSSE3 bool // Streaming SIMD extension 3
|
HasSSE3 bool // Streaming SIMD extension 3
|
||||||
HasSSSE3 bool // Supplemental streaming SIMD extension 3
|
HasSSSE3 bool // Supplemental streaming SIMD extension 3
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ func init() {
|
|||||||
X86.HasPOPCNT = isSet(23, ecx1)
|
X86.HasPOPCNT = isSet(23, ecx1)
|
||||||
X86.HasAES = isSet(25, ecx1)
|
X86.HasAES = isSet(25, ecx1)
|
||||||
X86.HasOSXSAVE = isSet(27, ecx1)
|
X86.HasOSXSAVE = isSet(27, ecx1)
|
||||||
|
X86.HasRDRAND = isSet(30, ecx1)
|
||||||
|
|
||||||
osSupportsAVX := false
|
osSupportsAVX := false
|
||||||
// For XGETBV, OSXSAVE bit is required and sufficient.
|
// For XGETBV, OSXSAVE bit is required and sufficient.
|
||||||
@@ -47,6 +48,7 @@ func init() {
|
|||||||
X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
|
X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
|
||||||
X86.HasBMI2 = isSet(8, ebx7)
|
X86.HasBMI2 = isSet(8, ebx7)
|
||||||
X86.HasERMS = isSet(9, ebx7)
|
X86.HasERMS = isSet(9, ebx7)
|
||||||
|
X86.HasRDSEED = isSet(18, ebx7)
|
||||||
X86.HasADX = isSet(19, ebx7)
|
X86.HasADX = isSet(19, ebx7)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user