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

package runtime

// taggedPointer is a pointer with a numeric tag.
// The size of the numeric tag is GOARCH-dependent,
// currently at least 16 bits.
// This should only be used with pointers allocated outside the Go heap.
type taggedPointer uint64

// minTagBits is the minimum number of tag bits that we expect.
const minTagBits = 16

// # of bits we can steal from the bottom. We enforce that all pointers
// that we tag are aligned to at least this many bits.
// Currently the long pole in this tent is pollDesc at 280 bytes. Setting
// 9 here rounds those structs up to 512 bytes.
// gcBgMarkWorkerNode is also small, but we don't make many of those
// so it is ok to waste space on them.
const tagAlignBits = 9
const tagAlign = 1 << tagAlignBits