| // 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 |