2022-05-14 22:45:05 -04:00
|
|
|
// Code generated from _gen/allocators.go using 'go generate'; DO NOT EDIT.
|
2022-10-18 16:07:36 -07:00
|
|
|
|
|
|
|
|
package ssa
|
|
|
|
|
|
|
|
|
|
import (
|
2023-01-09 14:29:49 -08:00
|
|
|
"internal/unsafeheader"
|
2022-10-18 16:07:36 -07:00
|
|
|
"math/bits"
|
|
|
|
|
"sync"
|
2023-01-09 14:29:49 -08:00
|
|
|
"unsafe"
|
2022-10-18 16:07:36 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var poolFreeValueSlice [27]sync.Pool
|
|
|
|
|
|
|
|
|
|
func (c *Cache) allocValueSlice(n int) []*Value {
|
|
|
|
|
var s []*Value
|
|
|
|
|
n2 := n
|
|
|
|
|
if n2 < 32 {
|
|
|
|
|
n2 = 32
|
|
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(n2 - 1))
|
|
|
|
|
v := poolFreeValueSlice[b-5].Get()
|
|
|
|
|
if v == nil {
|
|
|
|
|
s = make([]*Value, 1<<b)
|
|
|
|
|
} else {
|
|
|
|
|
sp := v.(*[]*Value)
|
|
|
|
|
s = *sp
|
|
|
|
|
*sp = nil
|
|
|
|
|
c.hdrValueSlice = append(c.hdrValueSlice, sp)
|
|
|
|
|
}
|
|
|
|
|
s = s[:n]
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeValueSlice(s []*Value) {
|
|
|
|
|
for i := range s {
|
|
|
|
|
s[i] = nil
|
|
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(cap(s)) - 1)
|
|
|
|
|
var sp *[]*Value
|
|
|
|
|
if len(c.hdrValueSlice) == 0 {
|
|
|
|
|
sp = new([]*Value)
|
|
|
|
|
} else {
|
|
|
|
|
sp = c.hdrValueSlice[len(c.hdrValueSlice)-1]
|
|
|
|
|
c.hdrValueSlice[len(c.hdrValueSlice)-1] = nil
|
|
|
|
|
c.hdrValueSlice = c.hdrValueSlice[:len(c.hdrValueSlice)-1]
|
|
|
|
|
}
|
|
|
|
|
*sp = s
|
|
|
|
|
poolFreeValueSlice[b-5].Put(sp)
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-18 08:01:27 -07:00
|
|
|
var poolFreeLimitSlice [27]sync.Pool
|
2022-10-18 16:07:36 -07:00
|
|
|
|
2024-05-18 08:01:27 -07:00
|
|
|
func (c *Cache) allocLimitSlice(n int) []limit {
|
|
|
|
|
var s []limit
|
2022-10-18 16:07:36 -07:00
|
|
|
n2 := n
|
2024-05-18 08:01:27 -07:00
|
|
|
if n2 < 8 {
|
|
|
|
|
n2 = 8
|
2022-10-18 16:07:36 -07:00
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(n2 - 1))
|
2024-05-18 08:01:27 -07:00
|
|
|
v := poolFreeLimitSlice[b-3].Get()
|
2022-10-18 16:07:36 -07:00
|
|
|
if v == nil {
|
2024-05-18 08:01:27 -07:00
|
|
|
s = make([]limit, 1<<b)
|
2022-10-18 16:07:36 -07:00
|
|
|
} else {
|
2024-05-18 08:01:27 -07:00
|
|
|
sp := v.(*[]limit)
|
2022-10-18 16:07:36 -07:00
|
|
|
s = *sp
|
|
|
|
|
*sp = nil
|
2024-05-18 08:01:27 -07:00
|
|
|
c.hdrLimitSlice = append(c.hdrLimitSlice, sp)
|
2022-10-18 16:07:36 -07:00
|
|
|
}
|
|
|
|
|
s = s[:n]
|
|
|
|
|
return s
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
func (c *Cache) freeLimitSlice(s []limit) {
|
2022-10-18 16:07:36 -07:00
|
|
|
for i := range s {
|
2024-05-18 08:01:27 -07:00
|
|
|
s[i] = limit{}
|
2022-10-18 16:07:36 -07:00
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(cap(s)) - 1)
|
2024-05-18 08:01:27 -07:00
|
|
|
var sp *[]limit
|
|
|
|
|
if len(c.hdrLimitSlice) == 0 {
|
|
|
|
|
sp = new([]limit)
|
2022-10-18 16:07:36 -07:00
|
|
|
} else {
|
2024-05-18 08:01:27 -07:00
|
|
|
sp = c.hdrLimitSlice[len(c.hdrLimitSlice)-1]
|
|
|
|
|
c.hdrLimitSlice[len(c.hdrLimitSlice)-1] = nil
|
|
|
|
|
c.hdrLimitSlice = c.hdrLimitSlice[:len(c.hdrLimitSlice)-1]
|
2022-10-18 16:07:36 -07:00
|
|
|
}
|
|
|
|
|
*sp = s
|
2024-05-18 08:01:27 -07:00
|
|
|
poolFreeLimitSlice[b-3].Put(sp)
|
2022-10-18 16:07:36 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var poolFreeSparseSet [27]sync.Pool
|
|
|
|
|
|
|
|
|
|
func (c *Cache) allocSparseSet(n int) *sparseSet {
|
|
|
|
|
var s *sparseSet
|
|
|
|
|
n2 := n
|
|
|
|
|
if n2 < 32 {
|
|
|
|
|
n2 = 32
|
|
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(n2 - 1))
|
|
|
|
|
v := poolFreeSparseSet[b-5].Get()
|
|
|
|
|
if v == nil {
|
|
|
|
|
s = newSparseSet(1 << b)
|
|
|
|
|
} else {
|
|
|
|
|
s = v.(*sparseSet)
|
|
|
|
|
}
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeSparseSet(s *sparseSet) {
|
|
|
|
|
s.clear()
|
|
|
|
|
b := bits.Len(uint(s.cap()) - 1)
|
|
|
|
|
poolFreeSparseSet[b-5].Put(s)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var poolFreeSparseMap [27]sync.Pool
|
|
|
|
|
|
|
|
|
|
func (c *Cache) allocSparseMap(n int) *sparseMap {
|
|
|
|
|
var s *sparseMap
|
|
|
|
|
n2 := n
|
|
|
|
|
if n2 < 32 {
|
|
|
|
|
n2 = 32
|
|
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(n2 - 1))
|
|
|
|
|
v := poolFreeSparseMap[b-5].Get()
|
|
|
|
|
if v == nil {
|
|
|
|
|
s = newSparseMap(1 << b)
|
|
|
|
|
} else {
|
|
|
|
|
s = v.(*sparseMap)
|
|
|
|
|
}
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeSparseMap(s *sparseMap) {
|
|
|
|
|
s.clear()
|
|
|
|
|
b := bits.Len(uint(s.cap()) - 1)
|
|
|
|
|
poolFreeSparseMap[b-5].Put(s)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var poolFreeSparseMapPos [27]sync.Pool
|
|
|
|
|
|
|
|
|
|
func (c *Cache) allocSparseMapPos(n int) *sparseMapPos {
|
|
|
|
|
var s *sparseMapPos
|
|
|
|
|
n2 := n
|
|
|
|
|
if n2 < 32 {
|
|
|
|
|
n2 = 32
|
|
|
|
|
}
|
|
|
|
|
b := bits.Len(uint(n2 - 1))
|
|
|
|
|
v := poolFreeSparseMapPos[b-5].Get()
|
|
|
|
|
if v == nil {
|
|
|
|
|
s = newSparseMapPos(1 << b)
|
|
|
|
|
} else {
|
|
|
|
|
s = v.(*sparseMapPos)
|
|
|
|
|
}
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeSparseMapPos(s *sparseMapPos) {
|
|
|
|
|
s.clear()
|
|
|
|
|
b := bits.Len(uint(s.cap()) - 1)
|
|
|
|
|
poolFreeSparseMapPos[b-5].Put(s)
|
|
|
|
|
}
|
2023-01-09 14:29:49 -08:00
|
|
|
func (c *Cache) allocBlockSlice(n int) []*Block {
|
|
|
|
|
var base *Value
|
|
|
|
|
var derived *Block
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := c.allocValueSlice(int((uintptr(n) + scale - 1) / scale))
|
|
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]*Block)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeBlockSlice(s []*Block) {
|
|
|
|
|
var base *Value
|
|
|
|
|
var derived *Block
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
|
|
|
|
c.freeValueSlice(*(*[]*Value)(unsafe.Pointer(&b)))
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
func (c *Cache) allocInt64(n int) []int64 {
|
|
|
|
|
var base limit
|
|
|
|
|
var derived int64
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
|
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]int64)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeInt64(s []int64) {
|
|
|
|
|
var base limit
|
|
|
|
|
var derived int64
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
|
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
|
|
|
|
}
|
2023-01-09 14:29:49 -08:00
|
|
|
func (c *Cache) allocIntSlice(n int) []int {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
2024-05-18 08:01:27 -07:00
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
2023-01-09 14:29:49 -08:00
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]int)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeIntSlice(s []int) {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
2023-01-09 14:29:49 -08:00
|
|
|
}
|
|
|
|
|
func (c *Cache) allocInt32Slice(n int) []int32 {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int32
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
2024-05-18 08:01:27 -07:00
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
2023-01-09 14:29:49 -08:00
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]int32)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeInt32Slice(s []int32) {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int32
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
2023-01-09 14:29:49 -08:00
|
|
|
}
|
|
|
|
|
func (c *Cache) allocInt8Slice(n int) []int8 {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int8
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
2024-05-18 08:01:27 -07:00
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
2023-01-09 14:29:49 -08:00
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]int8)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeInt8Slice(s []int8) {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived int8
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
2023-01-09 14:29:49 -08:00
|
|
|
}
|
|
|
|
|
func (c *Cache) allocBoolSlice(n int) []bool {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived bool
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
2024-05-18 08:01:27 -07:00
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
2023-01-09 14:29:49 -08:00
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]bool)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeBoolSlice(s []bool) {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived bool
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
2023-01-09 14:29:49 -08:00
|
|
|
}
|
|
|
|
|
func (c *Cache) allocIDSlice(n int) []ID {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived ID
|
|
|
|
|
if unsafe.Sizeof(base)%unsafe.Sizeof(derived) != 0 {
|
|
|
|
|
panic("bad")
|
|
|
|
|
}
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
2024-05-18 08:01:27 -07:00
|
|
|
b := c.allocLimitSlice(int((uintptr(n) + scale - 1) / scale))
|
2023-01-09 14:29:49 -08:00
|
|
|
s := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&b[0]),
|
|
|
|
|
Len: n,
|
|
|
|
|
Cap: cap(b) * int(scale),
|
|
|
|
|
}
|
|
|
|
|
return *(*[]ID)(unsafe.Pointer(&s))
|
|
|
|
|
}
|
|
|
|
|
func (c *Cache) freeIDSlice(s []ID) {
|
2024-05-18 08:01:27 -07:00
|
|
|
var base limit
|
2023-01-09 14:29:49 -08:00
|
|
|
var derived ID
|
|
|
|
|
scale := unsafe.Sizeof(base) / unsafe.Sizeof(derived)
|
|
|
|
|
b := unsafeheader.Slice{
|
|
|
|
|
Data: unsafe.Pointer(&s[0]),
|
|
|
|
|
Len: int((uintptr(len(s)) + scale - 1) / scale),
|
|
|
|
|
Cap: int((uintptr(cap(s)) + scale - 1) / scale),
|
|
|
|
|
}
|
2024-05-18 08:01:27 -07:00
|
|
|
c.freeLimitSlice(*(*[]limit)(unsafe.Pointer(&b)))
|
2023-01-09 14:29:49 -08:00
|
|
|
}
|