Source file src/internal/runtime/gc/scan/scan_amd64.go

     1  // Copyright 2025 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     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  // -- AVX512 --
    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  //go:noescape
    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