// Copyright 2025 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.

//go:build !goexperiment.greenteagc

package runtime

import 

func ( *mspan) ( uintptr) markBits {
	,  := .gcmarkBits.bitp()
	return markBits{, , }
}

func ( *mspan) () markBits {
	return markBits{&.gcmarkBits.x, uint8(1), 0}
}

func tryDeferToSpanScan( uintptr,  *gcWork) bool {
	return false
}

func ( *mspan) () {
}

func ( *mspan) ( *gcBits) {
	throw("unimplemented")
}

func gcUsesSpanInlineMarkBits( uintptr) bool {
	return false
}

func ( *mspan) () *spanInlineMarkBits {
	return nil
}

func ( *mspan) ( uintptr) markBits {
	throw("unimplemented")
	return markBits{}
}

type spanInlineMarkBits struct {
}

func ( *spanInlineMarkBits) () bool {
	return false
}

type spanQueue struct {
	_ uint32 // To match alignment padding requirements for atomically-accessed variables in workType.
}

func ( *spanQueue) () bool {
	return true
}

func ( *spanQueue) () int {
	return 0
}

type localSpanQueue struct {
}

func ( *localSpanQueue) () bool {
	return false
}

func ( *localSpanQueue) () bool {
	return true
}

type objptr uintptr

func ( *gcWork) ( bool) objptr {
	return 0
}

func scanSpan( objptr,  *gcWork) {
	throw("unimplemented")
}

type sizeClassScanStats struct {
	sparseObjsScanned uint64
}

func dumpScanStats() {
	var  uint64
	for ,  := range memstats.lastScanStats {
		 += .sparseObjsScanned
	}
	print("scan: total ", , " objs\n")
	for ,  := range memstats.lastScanStats {
		if  == (sizeClassScanStats{}) {
			continue
		}
		if  == 0 {
			print("scan: class L ")
		} else {
			print("scan: class ", gc.SizeClassToSize[], "B ")
		}
		print(.sparseObjsScanned, " objs\n")
	}
}

func ( *gcWork) ( *[gc.NumSizeClasses]sizeClassScanStats) {
	for  := range .stats {
		[].sparseObjsScanned += .stats[].sparseObjsScanned
	}
	clear(.stats[:])
}