| // Copyright 2014 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 386 || arm || mips || mipsle |
| |
| package runtime |
| |
| import "unsafe" |
| |
| // The number of bits stored in the numeric tag of a taggedPointer |
| const taggedPointerBits = 32 |
| |
| // On 32-bit systems, taggedPointer has a 32-bit pointer and 32-bit count. |
| |
| // taggedPointerPack created a taggedPointer from a pointer and a tag. |
| // Tag bits that don't fit in the result are discarded. |
| func taggedPointerPack(ptr unsafe.Pointer, tag uintptr) taggedPointer { |
| return taggedPointer(uintptr(ptr))<<32 | taggedPointer(tag) |
| } |
| |
| // Pointer returns the pointer from a taggedPointer. |
| func (tp taggedPointer) pointer() unsafe.Pointer { |
| return unsafe.Pointer(uintptr(tp >> 32)) |
| } |
| |
| // Tag returns the tag from a taggedPointer. |
| func (tp taggedPointer) tag() uintptr { |
| return uintptr(tp) |
| } |