1
2
3
4
5 package scan
6
7 import (
8 "internal/cpu"
9 "internal/runtime/gc"
10 "unsafe"
11 )
12
13 func ScanSpanPacked(mem unsafe.Pointer, bufp *uintptr, objMarks *gc.ObjMask, sizeClass uintptr, ptrMask *gc.PtrMask) (count int32) {
14 if CanAVX512() {
15 return ScanSpanPackedAVX512(mem, bufp, objMarks, sizeClass, ptrMask)
16 }
17 panic("not implemented")
18 }
19
20 func HasFastScanSpanPacked() bool {
21 return avx512ScanPackedReqsMet
22 }
23
24
25
26 func CanAVX512() bool {
27 return avx512ScanPackedReqsMet
28 }
29
30 func ScanSpanPackedAVX512(mem unsafe.Pointer, bufp *uintptr, objMarks *gc.ObjMask, sizeClass uintptr, ptrMask *gc.PtrMask) (count int32) {
31 return FilterNil(bufp, scanSpanPackedAVX512(mem, bufp, objMarks, sizeClass, ptrMask))
32 }
33
34
35 func scanSpanPackedAVX512(mem unsafe.Pointer, bufp *uintptr, objMarks *gc.ObjMask, sizeClass uintptr, ptrMask *gc.PtrMask) (count int32)
36
37 var avx512ScanPackedReqsMet = cpu.X86.HasAVX512VL &&
38 cpu.X86.HasAVX512BW &&
39 cpu.X86.HasGFNI &&
40 cpu.X86.HasAVX512BITALG &&
41 cpu.X86.HasAVX512VBMI
42
View as plain text