gclayout.mx raw
1 package gclayout
2
3 import "unsafe"
4
5 // Internal constants for gc layout
6 // See runtime/gc_precise.go
7
8 type Layout uintptr
9
10 const (
11 // 16-bit int => bits = 4
12 // 32-bit int => bits = 5
13 // 64-bit int => bits = 6
14 sizeBits = 4 + unsafe.Sizeof(uintptr(0))/4
15
16 sizeShift = sizeBits + 1
17
18 NoPtrs = Layout(uintptr(0b0<<sizeShift) | uintptr(0b1<<1) | uintptr(1))
19 Pointer = Layout(uintptr(0b1<<sizeShift) | uintptr(0b1<<1) | uintptr(1))
20 Bytes = Layout(uintptr(0b01<<sizeShift) | uintptr(0b10<<1) | uintptr(1))
21 Slice = Layout(uintptr(0b001<<sizeShift) | uintptr(0b11<<1) | uintptr(1))
22 )
23
24 func (l Layout) AsPtr() unsafe.Pointer { return unsafe.Pointer(l) }
25