package cpu
const cacheLineSize = 64
func init() {
Initialized = true
maxID , _ , _ , _ := cpuid (0 , 0 )
if maxID < 1 {
return
}
_ , _ , ecx1 , edx1 := cpuid (1 , 0 )
X86 .HasSSE2 = isSet (26 , edx1 )
X86 .HasSSE3 = isSet (0 , ecx1 )
X86 .HasPCLMULQDQ = isSet (1 , ecx1 )
X86 .HasSSSE3 = isSet (9 , ecx1 )
X86 .HasFMA = isSet (12 , ecx1 )
X86 .HasSSE41 = isSet (19 , ecx1 )
X86 .HasSSE42 = isSet (20 , ecx1 )
X86 .HasPOPCNT = isSet (23 , ecx1 )
X86 .HasAES = isSet (25 , ecx1 )
X86 .HasOSXSAVE = isSet (27 , ecx1 )
X86 .HasRDRAND = isSet (30 , ecx1 )
osSupportsAVX := false
if X86 .HasOSXSAVE {
eax , _ := xgetbv ()
osSupportsAVX = isSet (1 , eax ) && isSet (2 , eax )
}
X86 .HasAVX = isSet (28 , ecx1 ) && osSupportsAVX
if maxID < 7 {
return
}
_ , ebx7 , _ , _ := cpuid (7 , 0 )
X86 .HasBMI1 = isSet (3 , ebx7 )
X86 .HasAVX2 = isSet (5 , ebx7 ) && osSupportsAVX
X86 .HasBMI2 = isSet (8 , ebx7 )
X86 .HasERMS = isSet (9 , ebx7 )
X86 .HasRDSEED = isSet (18 , ebx7 )
X86 .HasADX = isSet (19 , ebx7 )
}
func isSet(bitpos uint , value uint32 ) bool {
return value &(1 <<bitpos ) != 0
}
The pages are generated with Golds v0.1.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project and developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .