mirror of
https://github.com/golang/go
synced 2025-06-15 17:41:45 +00:00
runtime: mark arenaIdx.l1 and arenaIdx.l2 methods as nosplit
Mark the "l1" and "l2" methods on "arenaIdx" with //go:nosplit, since these methods are called from a nosplit context (for example, from "spanOf"). Fixes #56044. Updates #21314. Change-Id: I48c7aa756b59a13162c89ef21066f83371ae50f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/441859 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
@ -576,6 +576,12 @@ func arenaBase(i arenaIdx) uintptr {
|
|||||||
|
|
||||||
type arenaIdx uint
|
type arenaIdx uint
|
||||||
|
|
||||||
|
// l1 returns the "l1" portion of an arenaIdx.
|
||||||
|
//
|
||||||
|
// Marked nosplit because it's called by spanOf and other nosplit
|
||||||
|
// functions.
|
||||||
|
//
|
||||||
|
//go:nosplit
|
||||||
func (i arenaIdx) l1() uint {
|
func (i arenaIdx) l1() uint {
|
||||||
if arenaL1Bits == 0 {
|
if arenaL1Bits == 0 {
|
||||||
// Let the compiler optimize this away if there's no
|
// Let the compiler optimize this away if there's no
|
||||||
@ -586,6 +592,12 @@ func (i arenaIdx) l1() uint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// l2 returns the "l2" portion of an arenaIdx.
|
||||||
|
//
|
||||||
|
// Marked nosplit because it's called by spanOf and other nosplit funcs.
|
||||||
|
// functions.
|
||||||
|
//
|
||||||
|
//go:nosplit
|
||||||
func (i arenaIdx) l2() uint {
|
func (i arenaIdx) l2() uint {
|
||||||
if arenaL1Bits == 0 {
|
if arenaL1Bits == 0 {
|
||||||
return uint(i)
|
return uint(i)
|
||||||
|
Reference in New Issue
Block a user