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