mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
runtime: migrate internal/atomic to internal/runtime
For #65355 Change-Id: I65dd090fb99de9b231af2112c5ccb0eb635db2be Reviewed-on: https://go-review.googlesource.com/c/go/+/560155 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ibrahim Bazoka <ibrahimbazoka729@gmail.com> Auto-Submit: Emmanuel Odeke <emmanuel@orijtech.com>
This commit is contained in:
parent
b1182f22c0
commit
4c2b1e0feb
@ -587,7 +587,7 @@ var genericOps = []opData{
|
|||||||
{name: "MakeResult", argLength: -1}, // arg0 .. are components of a "Result" (like the result from a Call). The last arg should be memory (like the result from a call).
|
{name: "MakeResult", argLength: -1}, // arg0 .. are components of a "Result" (like the result from a Call). The last arg should be memory (like the result from a call).
|
||||||
|
|
||||||
// Atomic operations used for semantically inlining sync/atomic and
|
// Atomic operations used for semantically inlining sync/atomic and
|
||||||
// runtime/internal/atomic. Atomic loads return a new memory so that
|
// internal/runtime/atomic. Atomic loads return a new memory so that
|
||||||
// the loads are properly ordered with respect to other loads and
|
// the loads are properly ordered with respect to other loads and
|
||||||
// stores.
|
// stores.
|
||||||
{name: "AtomicLoad8", argLength: 2, typ: "(UInt8,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
|
{name: "AtomicLoad8", argLength: 2, typ: "(UInt8,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
|
||||||
@ -650,7 +650,7 @@ var genericOps = []opData{
|
|||||||
// If [boolean Value] [then, else]
|
// If [boolean Value] [then, else]
|
||||||
// First [] [always, never]
|
// First [] [always, never]
|
||||||
// Defer [mem] [nopanic, panic] (control opcode should be OpStaticCall to runtime.deferproc)
|
// Defer [mem] [nopanic, panic] (control opcode should be OpStaticCall to runtime.deferproc)
|
||||||
//JumpTable [integer Value] [succ1,succ2,..]
|
// JumpTable [integer Value] [succ1,succ2,..]
|
||||||
|
|
||||||
var genericBlocks = []blockData{
|
var genericBlocks = []blockData{
|
||||||
{name: "Plain"}, // a single successor
|
{name: "Plain"}, // a single successor
|
||||||
|
@ -2008,7 +2008,7 @@ func (s *state) stmt(n ir.Node) {
|
|||||||
if base.Flag.N == 0 && rtabi.UseInterfaceSwitchCache(Arch.LinkArch.Name) {
|
if base.Flag.N == 0 && rtabi.UseInterfaceSwitchCache(Arch.LinkArch.Name) {
|
||||||
// Note: we can only use the cache if we have the right atomic load instruction.
|
// Note: we can only use the cache if we have the right atomic load instruction.
|
||||||
// Double-check that here.
|
// Double-check that here.
|
||||||
if _, ok := intrinsics[intrinsicKey{Arch.LinkArch.Arch, "runtime/internal/atomic", "Loadp"}]; !ok {
|
if _, ok := intrinsics[intrinsicKey{Arch.LinkArch.Arch, "internal/runtime/atomic", "Loadp"}]; !ok {
|
||||||
s.Fatalf("atomic load not available")
|
s.Fatalf("atomic load not available")
|
||||||
}
|
}
|
||||||
merge = s.f.NewBlock(ssa.BlockPlain)
|
merge = s.f.NewBlock(ssa.BlockPlain)
|
||||||
@ -4286,43 +4286,43 @@ func InitTables() {
|
|||||||
addF("runtime/internal/sys", "PrefetchStreamed", makePrefetchFunc(ssa.OpPrefetchCacheStreamed),
|
addF("runtime/internal/sys", "PrefetchStreamed", makePrefetchFunc(ssa.OpPrefetchCacheStreamed),
|
||||||
sys.AMD64, sys.ARM64, sys.PPC64)
|
sys.AMD64, sys.ARM64, sys.PPC64)
|
||||||
|
|
||||||
/******** runtime/internal/atomic ********/
|
/******** internal/runtime/atomic ********/
|
||||||
addF("runtime/internal/atomic", "Load",
|
addF("internal/runtime/atomic", "Load",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoad32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoad32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Load8",
|
addF("internal/runtime/atomic", "Load8",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoad8, types.NewTuple(types.Types[types.TUINT8], types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoad8, types.NewTuple(types.Types[types.TUINT8], types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT8], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT8], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Load64",
|
addF("internal/runtime/atomic", "Load64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoad64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoad64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT64], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT64], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "LoadAcq",
|
addF("internal/runtime/atomic", "LoadAcq",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoadAcq32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoadAcq32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
||||||
},
|
},
|
||||||
sys.PPC64, sys.S390X)
|
sys.PPC64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "LoadAcq64",
|
addF("internal/runtime/atomic", "LoadAcq64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoadAcq64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoadAcq64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT64], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT64], v)
|
||||||
},
|
},
|
||||||
sys.PPC64)
|
sys.PPC64)
|
||||||
addF("runtime/internal/atomic", "Loadp",
|
addF("internal/runtime/atomic", "Loadp",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue2(ssa.OpAtomicLoadPtr, types.NewTuple(s.f.Config.Types.BytePtr, types.TypeMem), args[0], s.mem())
|
v := s.newValue2(ssa.OpAtomicLoadPtr, types.NewTuple(s.f.Config.Types.BytePtr, types.TypeMem), args[0], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
@ -4330,51 +4330,51 @@ func InitTables() {
|
|||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Store",
|
addF("internal/runtime/atomic", "Store",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Store8",
|
addF("internal/runtime/atomic", "Store8",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore8, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore8, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Store64",
|
addF("internal/runtime/atomic", "Store64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore64, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStore64, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "StorepNoWB",
|
addF("internal/runtime/atomic", "StorepNoWB",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStorePtrNoWB, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStorePtrNoWB, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "StoreRel",
|
addF("internal/runtime/atomic", "StoreRel",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStoreRel32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStoreRel32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.PPC64, sys.S390X)
|
sys.PPC64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "StoreRel64",
|
addF("internal/runtime/atomic", "StoreRel64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicStoreRel64, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicStoreRel64, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.PPC64)
|
sys.PPC64)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Xchg",
|
addF("internal/runtime/atomic", "Xchg",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue3(ssa.OpAtomicExchange32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem())
|
v := s.newValue3(ssa.OpAtomicExchange32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Xchg64",
|
addF("internal/runtime/atomic", "Xchg64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue3(ssa.OpAtomicExchange64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem())
|
v := s.newValue3(ssa.OpAtomicExchange64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
@ -4429,21 +4429,21 @@ func InitTables() {
|
|||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v)
|
s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v)
|
||||||
}
|
}
|
||||||
addF("runtime/internal/atomic", "Xchg",
|
addF("internal/runtime/atomic", "Xchg",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange32, ssa.OpAtomicExchange32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange32, ssa.OpAtomicExchange32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "Xchg64",
|
addF("internal/runtime/atomic", "Xchg64",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange64, ssa.OpAtomicExchange64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange64, ssa.OpAtomicExchange64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Xadd",
|
addF("internal/runtime/atomic", "Xadd",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue3(ssa.OpAtomicAdd32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem())
|
v := s.newValue3(ssa.OpAtomicAdd32, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TUINT32], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Xadd64",
|
addF("internal/runtime/atomic", "Xadd64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue3(ssa.OpAtomicAdd64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem())
|
v := s.newValue3(ssa.OpAtomicAdd64, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
@ -4451,28 +4451,28 @@ func InitTables() {
|
|||||||
},
|
},
|
||||||
sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Xadd",
|
addF("internal/runtime/atomic", "Xadd",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd32, ssa.OpAtomicAdd32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd32, ssa.OpAtomicAdd32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "Xadd64",
|
addF("internal/runtime/atomic", "Xadd64",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd64, ssa.OpAtomicAdd64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd64, ssa.OpAtomicAdd64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Cas",
|
addF("internal/runtime/atomic", "Cas",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue4(ssa.OpAtomicCompareAndSwap32, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
v := s.newValue4(ssa.OpAtomicCompareAndSwap32, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TBOOL], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TBOOL], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Cas64",
|
addF("internal/runtime/atomic", "Cas64",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue4(ssa.OpAtomicCompareAndSwap64, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
v := s.newValue4(ssa.OpAtomicCompareAndSwap64, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
return s.newValue1(ssa.OpSelect0, types.Types[types.TBOOL], v)
|
return s.newValue1(ssa.OpSelect0, types.Types[types.TBOOL], v)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "CasRel",
|
addF("internal/runtime/atomic", "CasRel",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
v := s.newValue4(ssa.OpAtomicCompareAndSwap32, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
v := s.newValue4(ssa.OpAtomicCompareAndSwap32, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem())
|
||||||
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v)
|
||||||
@ -4486,32 +4486,32 @@ func InitTables() {
|
|||||||
s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v)
|
s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v)
|
||||||
}
|
}
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "Cas",
|
addF("internal/runtime/atomic", "Cas",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap32, ssa.OpAtomicCompareAndSwap32Variant, types.TUINT32, types.TBOOL, atomicCasEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap32, ssa.OpAtomicCompareAndSwap32Variant, types.TUINT32, types.TBOOL, atomicCasEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "Cas64",
|
addF("internal/runtime/atomic", "Cas64",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap64, ssa.OpAtomicCompareAndSwap64Variant, types.TUINT64, types.TBOOL, atomicCasEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap64, ssa.OpAtomicCompareAndSwap64Variant, types.TUINT64, types.TBOOL, atomicCasEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "And8",
|
addF("internal/runtime/atomic", "And8",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicAnd8, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicAnd8, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "And",
|
addF("internal/runtime/atomic", "And",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicAnd32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicAnd32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Or8",
|
addF("internal/runtime/atomic", "Or8",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicOr8, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicOr8, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
sys.AMD64, sys.ARM64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Or",
|
addF("internal/runtime/atomic", "Or",
|
||||||
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
@ -4522,65 +4522,65 @@ func InitTables() {
|
|||||||
s.vars[memVar] = s.newValue3(op, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[memVar] = s.newValue3(op, types.TypeMem, args[0], args[1], s.mem())
|
||||||
}
|
}
|
||||||
|
|
||||||
addF("runtime/internal/atomic", "And8",
|
addF("internal/runtime/atomic", "And8",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd8, ssa.OpAtomicAnd8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd8, ssa.OpAtomicAnd8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "And",
|
addF("internal/runtime/atomic", "And",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "Or8",
|
addF("internal/runtime/atomic", "Or8",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr8, ssa.OpAtomicOr8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr8, ssa.OpAtomicOr8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
addF("runtime/internal/atomic", "Or",
|
addF("internal/runtime/atomic", "Or",
|
||||||
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
|
||||||
sys.ARM64)
|
sys.ARM64)
|
||||||
|
|
||||||
// Aliases for atomic load operations
|
// Aliases for atomic load operations
|
||||||
alias("runtime/internal/atomic", "Loadint32", "runtime/internal/atomic", "Load", all...)
|
alias("internal/runtime/atomic", "Loadint32", "internal/runtime/atomic", "Load", all...)
|
||||||
alias("runtime/internal/atomic", "Loadint64", "runtime/internal/atomic", "Load64", all...)
|
alias("internal/runtime/atomic", "Loadint64", "internal/runtime/atomic", "Load64", all...)
|
||||||
alias("runtime/internal/atomic", "Loaduintptr", "runtime/internal/atomic", "Load", p4...)
|
alias("internal/runtime/atomic", "Loaduintptr", "internal/runtime/atomic", "Load", p4...)
|
||||||
alias("runtime/internal/atomic", "Loaduintptr", "runtime/internal/atomic", "Load64", p8...)
|
alias("internal/runtime/atomic", "Loaduintptr", "internal/runtime/atomic", "Load64", p8...)
|
||||||
alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load", p4...)
|
alias("internal/runtime/atomic", "Loaduint", "internal/runtime/atomic", "Load", p4...)
|
||||||
alias("runtime/internal/atomic", "Loaduint", "runtime/internal/atomic", "Load64", p8...)
|
alias("internal/runtime/atomic", "Loaduint", "internal/runtime/atomic", "Load64", p8...)
|
||||||
alias("runtime/internal/atomic", "LoadAcq", "runtime/internal/atomic", "Load", lwatomics...)
|
alias("internal/runtime/atomic", "LoadAcq", "internal/runtime/atomic", "Load", lwatomics...)
|
||||||
alias("runtime/internal/atomic", "LoadAcq64", "runtime/internal/atomic", "Load64", lwatomics...)
|
alias("internal/runtime/atomic", "LoadAcq64", "internal/runtime/atomic", "Load64", lwatomics...)
|
||||||
alias("runtime/internal/atomic", "LoadAcquintptr", "runtime/internal/atomic", "LoadAcq", p4...)
|
alias("internal/runtime/atomic", "LoadAcquintptr", "internal/runtime/atomic", "LoadAcq", p4...)
|
||||||
alias("sync", "runtime_LoadAcquintptr", "runtime/internal/atomic", "LoadAcq", p4...) // linknamed
|
alias("sync", "runtime_LoadAcquintptr", "internal/runtime/atomic", "LoadAcq", p4...) // linknamed
|
||||||
alias("runtime/internal/atomic", "LoadAcquintptr", "runtime/internal/atomic", "LoadAcq64", p8...)
|
alias("internal/runtime/atomic", "LoadAcquintptr", "internal/runtime/atomic", "LoadAcq64", p8...)
|
||||||
alias("sync", "runtime_LoadAcquintptr", "runtime/internal/atomic", "LoadAcq64", p8...) // linknamed
|
alias("sync", "runtime_LoadAcquintptr", "internal/runtime/atomic", "LoadAcq64", p8...) // linknamed
|
||||||
|
|
||||||
// Aliases for atomic store operations
|
// Aliases for atomic store operations
|
||||||
alias("runtime/internal/atomic", "Storeint32", "runtime/internal/atomic", "Store", all...)
|
alias("internal/runtime/atomic", "Storeint32", "internal/runtime/atomic", "Store", all...)
|
||||||
alias("runtime/internal/atomic", "Storeint64", "runtime/internal/atomic", "Store64", all...)
|
alias("internal/runtime/atomic", "Storeint64", "internal/runtime/atomic", "Store64", all...)
|
||||||
alias("runtime/internal/atomic", "Storeuintptr", "runtime/internal/atomic", "Store", p4...)
|
alias("internal/runtime/atomic", "Storeuintptr", "internal/runtime/atomic", "Store", p4...)
|
||||||
alias("runtime/internal/atomic", "Storeuintptr", "runtime/internal/atomic", "Store64", p8...)
|
alias("internal/runtime/atomic", "Storeuintptr", "internal/runtime/atomic", "Store64", p8...)
|
||||||
alias("runtime/internal/atomic", "StoreRel", "runtime/internal/atomic", "Store", lwatomics...)
|
alias("internal/runtime/atomic", "StoreRel", "internal/runtime/atomic", "Store", lwatomics...)
|
||||||
alias("runtime/internal/atomic", "StoreRel64", "runtime/internal/atomic", "Store64", lwatomics...)
|
alias("internal/runtime/atomic", "StoreRel64", "internal/runtime/atomic", "Store64", lwatomics...)
|
||||||
alias("runtime/internal/atomic", "StoreReluintptr", "runtime/internal/atomic", "StoreRel", p4...)
|
alias("internal/runtime/atomic", "StoreReluintptr", "internal/runtime/atomic", "StoreRel", p4...)
|
||||||
alias("sync", "runtime_StoreReluintptr", "runtime/internal/atomic", "StoreRel", p4...) // linknamed
|
alias("sync", "runtime_StoreReluintptr", "internal/runtime/atomic", "StoreRel", p4...) // linknamed
|
||||||
alias("runtime/internal/atomic", "StoreReluintptr", "runtime/internal/atomic", "StoreRel64", p8...)
|
alias("internal/runtime/atomic", "StoreReluintptr", "internal/runtime/atomic", "StoreRel64", p8...)
|
||||||
alias("sync", "runtime_StoreReluintptr", "runtime/internal/atomic", "StoreRel64", p8...) // linknamed
|
alias("sync", "runtime_StoreReluintptr", "internal/runtime/atomic", "StoreRel64", p8...) // linknamed
|
||||||
|
|
||||||
// Aliases for atomic swap operations
|
// Aliases for atomic swap operations
|
||||||
alias("runtime/internal/atomic", "Xchgint32", "runtime/internal/atomic", "Xchg", all...)
|
alias("internal/runtime/atomic", "Xchgint32", "internal/runtime/atomic", "Xchg", all...)
|
||||||
alias("runtime/internal/atomic", "Xchgint64", "runtime/internal/atomic", "Xchg64", all...)
|
alias("internal/runtime/atomic", "Xchgint64", "internal/runtime/atomic", "Xchg64", all...)
|
||||||
alias("runtime/internal/atomic", "Xchguintptr", "runtime/internal/atomic", "Xchg", p4...)
|
alias("internal/runtime/atomic", "Xchguintptr", "internal/runtime/atomic", "Xchg", p4...)
|
||||||
alias("runtime/internal/atomic", "Xchguintptr", "runtime/internal/atomic", "Xchg64", p8...)
|
alias("internal/runtime/atomic", "Xchguintptr", "internal/runtime/atomic", "Xchg64", p8...)
|
||||||
|
|
||||||
// Aliases for atomic add operations
|
// Aliases for atomic add operations
|
||||||
alias("runtime/internal/atomic", "Xaddint32", "runtime/internal/atomic", "Xadd", all...)
|
alias("internal/runtime/atomic", "Xaddint32", "internal/runtime/atomic", "Xadd", all...)
|
||||||
alias("runtime/internal/atomic", "Xaddint64", "runtime/internal/atomic", "Xadd64", all...)
|
alias("internal/runtime/atomic", "Xaddint64", "internal/runtime/atomic", "Xadd64", all...)
|
||||||
alias("runtime/internal/atomic", "Xadduintptr", "runtime/internal/atomic", "Xadd", p4...)
|
alias("internal/runtime/atomic", "Xadduintptr", "internal/runtime/atomic", "Xadd", p4...)
|
||||||
alias("runtime/internal/atomic", "Xadduintptr", "runtime/internal/atomic", "Xadd64", p8...)
|
alias("internal/runtime/atomic", "Xadduintptr", "internal/runtime/atomic", "Xadd64", p8...)
|
||||||
|
|
||||||
// Aliases for atomic CAS operations
|
// Aliases for atomic CAS operations
|
||||||
alias("runtime/internal/atomic", "Casint32", "runtime/internal/atomic", "Cas", all...)
|
alias("internal/runtime/atomic", "Casint32", "internal/runtime/atomic", "Cas", all...)
|
||||||
alias("runtime/internal/atomic", "Casint64", "runtime/internal/atomic", "Cas64", all...)
|
alias("internal/runtime/atomic", "Casint64", "internal/runtime/atomic", "Cas64", all...)
|
||||||
alias("runtime/internal/atomic", "Casuintptr", "runtime/internal/atomic", "Cas", p4...)
|
alias("internal/runtime/atomic", "Casuintptr", "internal/runtime/atomic", "Cas", p4...)
|
||||||
alias("runtime/internal/atomic", "Casuintptr", "runtime/internal/atomic", "Cas64", p8...)
|
alias("internal/runtime/atomic", "Casuintptr", "internal/runtime/atomic", "Cas64", p8...)
|
||||||
alias("runtime/internal/atomic", "Casp1", "runtime/internal/atomic", "Cas", p4...)
|
alias("internal/runtime/atomic", "Casp1", "internal/runtime/atomic", "Cas", p4...)
|
||||||
alias("runtime/internal/atomic", "Casp1", "runtime/internal/atomic", "Cas64", p8...)
|
alias("internal/runtime/atomic", "Casp1", "internal/runtime/atomic", "Cas64", p8...)
|
||||||
alias("runtime/internal/atomic", "CasRel", "runtime/internal/atomic", "Cas", lwatomics...)
|
alias("internal/runtime/atomic", "CasRel", "internal/runtime/atomic", "Cas", lwatomics...)
|
||||||
|
|
||||||
/******** math ********/
|
/******** math ********/
|
||||||
addF("math", "sqrt",
|
addF("math", "sqrt",
|
||||||
@ -5021,42 +5021,42 @@ func InitTables() {
|
|||||||
/******** sync/atomic ********/
|
/******** sync/atomic ********/
|
||||||
|
|
||||||
// Note: these are disabled by flag_race in findIntrinsic below.
|
// Note: these are disabled by flag_race in findIntrinsic below.
|
||||||
alias("sync/atomic", "LoadInt32", "runtime/internal/atomic", "Load", all...)
|
alias("sync/atomic", "LoadInt32", "internal/runtime/atomic", "Load", all...)
|
||||||
alias("sync/atomic", "LoadInt64", "runtime/internal/atomic", "Load64", all...)
|
alias("sync/atomic", "LoadInt64", "internal/runtime/atomic", "Load64", all...)
|
||||||
alias("sync/atomic", "LoadPointer", "runtime/internal/atomic", "Loadp", all...)
|
alias("sync/atomic", "LoadPointer", "internal/runtime/atomic", "Loadp", all...)
|
||||||
alias("sync/atomic", "LoadUint32", "runtime/internal/atomic", "Load", all...)
|
alias("sync/atomic", "LoadUint32", "internal/runtime/atomic", "Load", all...)
|
||||||
alias("sync/atomic", "LoadUint64", "runtime/internal/atomic", "Load64", all...)
|
alias("sync/atomic", "LoadUint64", "internal/runtime/atomic", "Load64", all...)
|
||||||
alias("sync/atomic", "LoadUintptr", "runtime/internal/atomic", "Load", p4...)
|
alias("sync/atomic", "LoadUintptr", "internal/runtime/atomic", "Load", p4...)
|
||||||
alias("sync/atomic", "LoadUintptr", "runtime/internal/atomic", "Load64", p8...)
|
alias("sync/atomic", "LoadUintptr", "internal/runtime/atomic", "Load64", p8...)
|
||||||
|
|
||||||
alias("sync/atomic", "StoreInt32", "runtime/internal/atomic", "Store", all...)
|
alias("sync/atomic", "StoreInt32", "internal/runtime/atomic", "Store", all...)
|
||||||
alias("sync/atomic", "StoreInt64", "runtime/internal/atomic", "Store64", all...)
|
alias("sync/atomic", "StoreInt64", "internal/runtime/atomic", "Store64", all...)
|
||||||
// Note: not StorePointer, that needs a write barrier. Same below for {CompareAnd}Swap.
|
// Note: not StorePointer, that needs a write barrier. Same below for {CompareAnd}Swap.
|
||||||
alias("sync/atomic", "StoreUint32", "runtime/internal/atomic", "Store", all...)
|
alias("sync/atomic", "StoreUint32", "internal/runtime/atomic", "Store", all...)
|
||||||
alias("sync/atomic", "StoreUint64", "runtime/internal/atomic", "Store64", all...)
|
alias("sync/atomic", "StoreUint64", "internal/runtime/atomic", "Store64", all...)
|
||||||
alias("sync/atomic", "StoreUintptr", "runtime/internal/atomic", "Store", p4...)
|
alias("sync/atomic", "StoreUintptr", "internal/runtime/atomic", "Store", p4...)
|
||||||
alias("sync/atomic", "StoreUintptr", "runtime/internal/atomic", "Store64", p8...)
|
alias("sync/atomic", "StoreUintptr", "internal/runtime/atomic", "Store64", p8...)
|
||||||
|
|
||||||
alias("sync/atomic", "SwapInt32", "runtime/internal/atomic", "Xchg", all...)
|
alias("sync/atomic", "SwapInt32", "internal/runtime/atomic", "Xchg", all...)
|
||||||
alias("sync/atomic", "SwapInt64", "runtime/internal/atomic", "Xchg64", all...)
|
alias("sync/atomic", "SwapInt64", "internal/runtime/atomic", "Xchg64", all...)
|
||||||
alias("sync/atomic", "SwapUint32", "runtime/internal/atomic", "Xchg", all...)
|
alias("sync/atomic", "SwapUint32", "internal/runtime/atomic", "Xchg", all...)
|
||||||
alias("sync/atomic", "SwapUint64", "runtime/internal/atomic", "Xchg64", all...)
|
alias("sync/atomic", "SwapUint64", "internal/runtime/atomic", "Xchg64", all...)
|
||||||
alias("sync/atomic", "SwapUintptr", "runtime/internal/atomic", "Xchg", p4...)
|
alias("sync/atomic", "SwapUintptr", "internal/runtime/atomic", "Xchg", p4...)
|
||||||
alias("sync/atomic", "SwapUintptr", "runtime/internal/atomic", "Xchg64", p8...)
|
alias("sync/atomic", "SwapUintptr", "internal/runtime/atomic", "Xchg64", p8...)
|
||||||
|
|
||||||
alias("sync/atomic", "CompareAndSwapInt32", "runtime/internal/atomic", "Cas", all...)
|
alias("sync/atomic", "CompareAndSwapInt32", "internal/runtime/atomic", "Cas", all...)
|
||||||
alias("sync/atomic", "CompareAndSwapInt64", "runtime/internal/atomic", "Cas64", all...)
|
alias("sync/atomic", "CompareAndSwapInt64", "internal/runtime/atomic", "Cas64", all...)
|
||||||
alias("sync/atomic", "CompareAndSwapUint32", "runtime/internal/atomic", "Cas", all...)
|
alias("sync/atomic", "CompareAndSwapUint32", "internal/runtime/atomic", "Cas", all...)
|
||||||
alias("sync/atomic", "CompareAndSwapUint64", "runtime/internal/atomic", "Cas64", all...)
|
alias("sync/atomic", "CompareAndSwapUint64", "internal/runtime/atomic", "Cas64", all...)
|
||||||
alias("sync/atomic", "CompareAndSwapUintptr", "runtime/internal/atomic", "Cas", p4...)
|
alias("sync/atomic", "CompareAndSwapUintptr", "internal/runtime/atomic", "Cas", p4...)
|
||||||
alias("sync/atomic", "CompareAndSwapUintptr", "runtime/internal/atomic", "Cas64", p8...)
|
alias("sync/atomic", "CompareAndSwapUintptr", "internal/runtime/atomic", "Cas64", p8...)
|
||||||
|
|
||||||
alias("sync/atomic", "AddInt32", "runtime/internal/atomic", "Xadd", all...)
|
alias("sync/atomic", "AddInt32", "internal/runtime/atomic", "Xadd", all...)
|
||||||
alias("sync/atomic", "AddInt64", "runtime/internal/atomic", "Xadd64", all...)
|
alias("sync/atomic", "AddInt64", "internal/runtime/atomic", "Xadd64", all...)
|
||||||
alias("sync/atomic", "AddUint32", "runtime/internal/atomic", "Xadd", all...)
|
alias("sync/atomic", "AddUint32", "internal/runtime/atomic", "Xadd", all...)
|
||||||
alias("sync/atomic", "AddUint64", "runtime/internal/atomic", "Xadd64", all...)
|
alias("sync/atomic", "AddUint64", "internal/runtime/atomic", "Xadd64", all...)
|
||||||
alias("sync/atomic", "AddUintptr", "runtime/internal/atomic", "Xadd", p4...)
|
alias("sync/atomic", "AddUintptr", "internal/runtime/atomic", "Xadd", p4...)
|
||||||
alias("sync/atomic", "AddUintptr", "runtime/internal/atomic", "Xadd64", p8...)
|
alias("sync/atomic", "AddUintptr", "internal/runtime/atomic", "Xadd64", p8...)
|
||||||
|
|
||||||
/******** math/big ********/
|
/******** math/big ********/
|
||||||
alias("math/big", "mulWW", "math/bits", "Mul64", p8...)
|
alias("math/big", "mulWW", "math/bits", "Mul64", p8...)
|
||||||
@ -6663,7 +6663,7 @@ func (s *state) dottype1(pos src.XPos, src, dst *types.Type, iface, source, targ
|
|||||||
if base.Flag.N == 0 && rtabi.UseInterfaceSwitchCache(Arch.LinkArch.Name) {
|
if base.Flag.N == 0 && rtabi.UseInterfaceSwitchCache(Arch.LinkArch.Name) {
|
||||||
// Note: we can only use the cache if we have the right atomic load instruction.
|
// Note: we can only use the cache if we have the right atomic load instruction.
|
||||||
// Double-check that here.
|
// Double-check that here.
|
||||||
if _, ok := intrinsics[intrinsicKey{Arch.LinkArch.Arch, "runtime/internal/atomic", "Loadp"}]; !ok {
|
if _, ok := intrinsics[intrinsicKey{Arch.LinkArch.Arch, "internal/runtime/atomic", "Loadp"}]; !ok {
|
||||||
s.Fatalf("atomic load not available")
|
s.Fatalf("atomic load not available")
|
||||||
}
|
}
|
||||||
// Pick right size ops.
|
// Pick right size ops.
|
||||||
|
@ -254,7 +254,7 @@ func TestIntendedInlining(t *testing.T) {
|
|||||||
want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Bswap32")
|
want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Bswap32")
|
||||||
}
|
}
|
||||||
if runtime.GOARCH == "amd64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "mips" || runtime.GOARCH == "mips64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x" {
|
if runtime.GOARCH == "amd64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "mips" || runtime.GOARCH == "mips64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x" {
|
||||||
// runtime/internal/atomic.Loaduintptr is only intrinsified on these platforms.
|
// internal/runtime/atomic.Loaduintptr is only intrinsified on these platforms.
|
||||||
want["runtime"] = append(want["runtime"], "traceAcquire")
|
want["runtime"] = append(want["runtime"], "traceAcquire")
|
||||||
}
|
}
|
||||||
if bits.UintSize == 64 {
|
if bits.UintSize == 64 {
|
||||||
|
@ -199,7 +199,7 @@ func isAtomicStdPkg(p *Pkg) bool {
|
|||||||
if p.Prefix == `""` {
|
if p.Prefix == `""` {
|
||||||
panic("bad package prefix")
|
panic("bad package prefix")
|
||||||
}
|
}
|
||||||
return p.Prefix == "sync/atomic" || p.Prefix == "runtime/internal/atomic"
|
return p.Prefix == "sync/atomic" || p.Prefix == "internal/runtime/atomic"
|
||||||
}
|
}
|
||||||
|
|
||||||
// CalcSize calculates and stores the size, alignment, eq/hash algorithm,
|
// CalcSize calculates and stores the size, alignment, eq/hash algorithm,
|
||||||
|
@ -120,7 +120,7 @@ func IsSyncAtomicAlign64(T Type) bool {
|
|||||||
return obj.Name() == "align64" &&
|
return obj.Name() == "align64" &&
|
||||||
obj.Pkg() != nil &&
|
obj.Pkg() != nil &&
|
||||||
(obj.Pkg().Path() == "sync/atomic" ||
|
(obj.Pkg().Path() == "sync/atomic" ||
|
||||||
obj.Pkg().Path() == "runtime/internal/atomic")
|
obj.Pkg().Path() == "internal/runtime/atomic")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StdSizes) Offsetsof(fields []*Var) []int64 {
|
func (s *StdSizes) Offsetsof(fields []*Var) []int64 {
|
||||||
|
@ -405,7 +405,7 @@ func (f *File) Visit(node ast.Node) ast.Visitor {
|
|||||||
//
|
//
|
||||||
// Note that in the current implementation (Go 1.20) both
|
// Note that in the current implementation (Go 1.20) both
|
||||||
// routines are assembly stubs that forward calls to the
|
// routines are assembly stubs that forward calls to the
|
||||||
// runtime/internal/atomic equivalents, hence the infinite
|
// internal/runtime/atomic equivalents, hence the infinite
|
||||||
// loop scenario is purely theoretical (maybe if in some
|
// loop scenario is purely theoretical (maybe if in some
|
||||||
// future implementation one of these functions might be
|
// future implementation one of these functions might be
|
||||||
// written in Go). See #57445 for more details.
|
// written in Go). See #57445 for more details.
|
||||||
|
@ -3480,11 +3480,11 @@ func SelectCoverPackages(roots []*Package, match []func(*Package) bool, op strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Silently ignore attempts to run coverage on sync/atomic
|
// Silently ignore attempts to run coverage on sync/atomic
|
||||||
// and/or runtime/internal/atomic when using atomic coverage
|
// and/or internal/runtime/atomic when using atomic coverage
|
||||||
// mode. Atomic coverage mode uses sync/atomic, so we can't
|
// mode. Atomic coverage mode uses sync/atomic, so we can't
|
||||||
// also do coverage on it.
|
// also do coverage on it.
|
||||||
if cfg.BuildCoverMode == "atomic" && p.Standard &&
|
if cfg.BuildCoverMode == "atomic" && p.Standard &&
|
||||||
(p.ImportPath == "sync/atomic" || p.ImportPath == "runtime/internal/atomic") {
|
(p.ImportPath == "sync/atomic" || p.ImportPath == "internal/runtime/atomic") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ type PkgSpecial struct {
|
|||||||
var runtimePkgs = []string{
|
var runtimePkgs = []string{
|
||||||
"runtime",
|
"runtime",
|
||||||
|
|
||||||
"runtime/internal/atomic",
|
"internal/runtime/atomic",
|
||||||
"runtime/internal/math",
|
"runtime/internal/math",
|
||||||
"runtime/internal/sys",
|
"runtime/internal/sys",
|
||||||
"internal/runtime/syscall",
|
"internal/runtime/syscall",
|
||||||
|
@ -70,7 +70,7 @@ var depsRules = `
|
|||||||
< internal/unsafeheader
|
< internal/unsafeheader
|
||||||
< runtime/internal/sys
|
< runtime/internal/sys
|
||||||
< internal/runtime/syscall
|
< internal/runtime/syscall
|
||||||
< runtime/internal/atomic
|
< internal/runtime/atomic
|
||||||
< runtime/internal/math
|
< runtime/internal/math
|
||||||
< runtime
|
< runtime
|
||||||
< sync/atomic
|
< sync/atomic
|
||||||
|
@ -122,7 +122,7 @@ func _IsSyncAtomicAlign64(T Type) bool {
|
|||||||
return obj.Name() == "align64" &&
|
return obj.Name() == "align64" &&
|
||||||
obj.Pkg() != nil &&
|
obj.Pkg() != nil &&
|
||||||
(obj.Pkg().Path() == "sync/atomic" ||
|
(obj.Pkg().Path() == "sync/atomic" ||
|
||||||
obj.Pkg().Path() == "runtime/internal/atomic")
|
obj.Pkg().Path() == "internal/runtime/atomic")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StdSizes) Offsetsof(fields []*Var) []int64 {
|
func (s *StdSizes) Offsetsof(fields []*Var) []int64 {
|
||||||
|
@ -24,7 +24,7 @@ package coverage
|
|||||||
// registered list:
|
// registered list:
|
||||||
// slot: 0 path='internal/cpu' hard-coded id: 1
|
// slot: 0 path='internal/cpu' hard-coded id: 1
|
||||||
// slot: 1 path='internal/goarch' hard-coded id: 2
|
// slot: 1 path='internal/goarch' hard-coded id: 2
|
||||||
// slot: 2 path='runtime/internal/atomic' hard-coded id: 3
|
// slot: 2 path='internal/runtime/atomic' hard-coded id: 3
|
||||||
// slot: 3 path='internal/goos'
|
// slot: 3 path='internal/goos'
|
||||||
// slot: 4 path='runtime/internal/sys' hard-coded id: 5
|
// slot: 4 path='runtime/internal/sys' hard-coded id: 5
|
||||||
// slot: 5 path='internal/abi' hard-coded id: 4
|
// slot: 5 path='internal/abi' hard-coded id: 4
|
||||||
@ -47,7 +47,7 @@ package coverage
|
|||||||
var rtPkgs = [...]string{
|
var rtPkgs = [...]string{
|
||||||
"internal/cpu",
|
"internal/cpu",
|
||||||
"internal/goarch",
|
"internal/goarch",
|
||||||
"runtime/internal/atomic",
|
"internal/runtime/atomic",
|
||||||
"internal/goos",
|
"internal/goos",
|
||||||
"internal/chacha8rand",
|
"internal/chacha8rand",
|
||||||
"runtime/internal/sys",
|
"runtime/internal/sys",
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package atomic_test
|
package atomic_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
@ -316,7 +316,7 @@ TEXT ·Anduintptr(SB), NOSPLIT, $0-24
|
|||||||
TEXT ·Oruintptr(SB), NOSPLIT, $0-24
|
TEXT ·Oruintptr(SB), NOSPLIT, $0-24
|
||||||
JMP ·Or64(SB)
|
JMP ·Or64(SB)
|
||||||
|
|
||||||
// uint32 runtime∕internal∕atomic·Load(uint32 volatile* ptr)
|
// uint32 internal∕runtime∕atomic·Load(uint32 volatile* ptr)
|
||||||
TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-12
|
TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-12
|
||||||
MOVV ptr+0(FP), R19
|
MOVV ptr+0(FP), R19
|
||||||
DBAR
|
DBAR
|
||||||
@ -325,7 +325,7 @@ TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-12
|
|||||||
MOVW R19, ret+8(FP)
|
MOVW R19, ret+8(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
// uint8 runtime∕internal∕atomic·Load8(uint8 volatile* ptr)
|
// uint8 internal∕runtime∕atomic·Load8(uint8 volatile* ptr)
|
||||||
TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-9
|
TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-9
|
||||||
MOVV ptr+0(FP), R19
|
MOVV ptr+0(FP), R19
|
||||||
DBAR
|
DBAR
|
||||||
@ -334,7 +334,7 @@ TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-9
|
|||||||
MOVB R19, ret+8(FP)
|
MOVB R19, ret+8(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
// uint64 runtime∕internal∕atomic·Load64(uint64 volatile* ptr)
|
// uint64 internal∕runtime∕atomic·Load64(uint64 volatile* ptr)
|
||||||
TEXT ·Load64(SB),NOSPLIT|NOFRAME,$0-16
|
TEXT ·Load64(SB),NOSPLIT|NOFRAME,$0-16
|
||||||
MOVV ptr+0(FP), R19
|
MOVV ptr+0(FP), R19
|
||||||
DBAR
|
DBAR
|
||||||
@ -343,7 +343,7 @@ TEXT ·Load64(SB),NOSPLIT|NOFRAME,$0-16
|
|||||||
MOVV R19, ret+8(FP)
|
MOVV R19, ret+8(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
// void *runtime∕internal∕atomic·Loadp(void *volatile *ptr)
|
// void *internal∕runtime∕atomic·Loadp(void *volatile *ptr)
|
||||||
TEXT ·Loadp(SB),NOSPLIT|NOFRAME,$0-16
|
TEXT ·Loadp(SB),NOSPLIT|NOFRAME,$0-16
|
||||||
MOVV ptr+0(FP), R19
|
MOVV ptr+0(FP), R19
|
||||||
DBAR
|
DBAR
|
||||||
@ -352,7 +352,7 @@ TEXT ·Loadp(SB),NOSPLIT|NOFRAME,$0-16
|
|||||||
MOVV R19, ret+8(FP)
|
MOVV R19, ret+8(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
// uint32 runtime∕internal∕atomic·LoadAcq(uint32 volatile* ptr)
|
// uint32 internal∕runtime∕atomic·LoadAcq(uint32 volatile* ptr)
|
||||||
TEXT ·LoadAcq(SB),NOSPLIT|NOFRAME,$0-12
|
TEXT ·LoadAcq(SB),NOSPLIT|NOFRAME,$0-12
|
||||||
JMP ·Load(SB)
|
JMP ·Load(SB)
|
||||||
|
|
@ -6,8 +6,8 @@ package atomic_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"runtime"
|
"runtime"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"testing"
|
"testing"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
@ -5,7 +5,7 @@
|
|||||||
package atomic_test
|
package atomic_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
@ -173,7 +173,7 @@ In summary,
|
|||||||
Atomics
|
Atomics
|
||||||
=======
|
=======
|
||||||
|
|
||||||
The runtime uses its own atomics package at `runtime/internal/atomic`.
|
The runtime uses its own atomics package at `internal/runtime/atomic`.
|
||||||
This corresponds to `sync/atomic`, but functions have different names
|
This corresponds to `sync/atomic`, but functions have different names
|
||||||
for historical reasons and there are a few additional functions needed
|
for historical reasons and there are a few additional functions needed
|
||||||
by the runtime.
|
by the runtime.
|
||||||
|
@ -11,11 +11,11 @@ package runtime_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"internal/testenv"
|
"internal/testenv"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
@ -11,7 +11,7 @@ package runtime
|
|||||||
import "unsafe"
|
import "unsafe"
|
||||||
|
|
||||||
// AtomicFields is the set of fields on which we perform 64-bit atomic
|
// AtomicFields is the set of fields on which we perform 64-bit atomic
|
||||||
// operations (all the *64 operations in runtime/internal/atomic).
|
// operations (all the *64 operations in internal/runtime/atomic).
|
||||||
var AtomicFields = []uintptr{
|
var AtomicFields = []uintptr{
|
||||||
unsafe.Offsetof(m{}.procid),
|
unsafe.Offsetof(m{}.procid),
|
||||||
unsafe.Offsetof(p{}.gcFractionalMarkTime),
|
unsafe.Offsetof(p{}.gcFractionalMarkTime),
|
||||||
|
@ -85,7 +85,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/math"
|
"runtime/internal/math"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -6,10 +6,10 @@ package runtime_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"reflect"
|
"reflect"
|
||||||
. "runtime"
|
. "runtime"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ func atomicstorep(ptr unsafe.Pointer, new unsafe.Pointer) {
|
|||||||
// (like StoreNoWB but with the write barrier).
|
// (like StoreNoWB but with the write barrier).
|
||||||
//
|
//
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
//go:linkname atomic_storePointer runtime/internal/atomic.storePointer
|
//go:linkname atomic_storePointer internal/runtime/atomic.storePointer
|
||||||
func atomic_storePointer(ptr *unsafe.Pointer, new unsafe.Pointer) {
|
func atomic_storePointer(ptr *unsafe.Pointer, new unsafe.Pointer) {
|
||||||
atomicstorep(unsafe.Pointer(ptr), new)
|
atomicstorep(unsafe.Pointer(ptr), new)
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ func atomic_storePointer(ptr *unsafe.Pointer, new unsafe.Pointer) {
|
|||||||
// (like CompareAndSwapNoWB but with the write barrier).
|
// (like CompareAndSwapNoWB but with the write barrier).
|
||||||
//
|
//
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
//go:linkname atomic_casPointer runtime/internal/atomic.casPointer
|
//go:linkname atomic_casPointer internal/runtime/atomic.casPointer
|
||||||
func atomic_casPointer(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
|
func atomic_casPointer(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
|
||||||
if writeBarrier.enabled {
|
if writeBarrier.enabled {
|
||||||
atomicwb(ptr, new)
|
atomicwb(ptr, new)
|
||||||
|
@ -19,7 +19,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/math"
|
"runtime/internal/math"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -14,10 +14,10 @@ import (
|
|||||||
"internal/coverage/decodecounter"
|
"internal/coverage/decodecounter"
|
||||||
"internal/coverage/decodemeta"
|
"internal/coverage/decodemeta"
|
||||||
"internal/coverage/pods"
|
"internal/coverage/pods"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"strings"
|
"strings"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"internal/goos"
|
"internal/goos"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ import (
|
|||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"internal/goos"
|
"internal/goos"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/math"
|
"runtime/internal/math"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
@ -56,7 +56,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/math"
|
"runtime/internal/math"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
@ -1498,7 +1498,7 @@ func mapclone2(t *maptype, src *hmap) *hmap {
|
|||||||
dst := makemap(t, src.count, nil)
|
dst := makemap(t, src.count, nil)
|
||||||
dst.hash0 = src.hash0
|
dst.hash0 = src.hash0
|
||||||
dst.nevacuate = 0
|
dst.nevacuate = 0
|
||||||
//flags do not need to be copied here, just like a new map has no flags.
|
// flags do not need to be copied here, just like a new map has no flags.
|
||||||
|
|
||||||
if src.count == 0 {
|
if src.count == 0 {
|
||||||
return dst
|
return dst
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -130,7 +130,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/cpu"
|
"internal/cpu"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "runtime/internal/atomic"
|
import "internal/runtime/atomic"
|
||||||
|
|
||||||
// gcCPULimiter is a mechanism to limit GC CPU utilization in situations
|
// gcCPULimiter is a mechanism to limit GC CPU utilization in situations
|
||||||
// where it might become excessive and inhibit application progress (e.g.
|
// where it might become excessive and inhibit application progress (e.g.
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/cpu"
|
"internal/cpu"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
_ "unsafe" // for go:linkname
|
_ "unsafe" // for go:linkname
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goos"
|
"internal/goos"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -7,10 +7,10 @@ package runtime_test
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"internal/goos"
|
"internal/goos"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
. "runtime"
|
. "runtime"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -27,7 +27,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
"internal/cpu"
|
"internal/cpu"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"internal/goexperiment"
|
"internal/goexperiment"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -11,7 +11,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/cpu"
|
"internal/cpu"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"runtime/internal/sys"
|
"runtime/internal/sys"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"internal/runtime/atomic"
|
||||||
"internal/runtime/syscall"
|
"internal/runtime/syscall"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "runtime/internal/atomic"
|
import "internal/runtime/atomic"
|
||||||
|
|
||||||
var netpollInited atomic.Uint32
|
var netpollInited atomic.Uint32
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
|
"internal/runtime/atomic"
|
||||||
"internal/runtime/syscall"
|
"internal/runtime/syscall"
|
||||||
"runtime/internal/atomic"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -402,9 +402,9 @@ func unminit() {
|
|||||||
func mdestroy(mp *m) {
|
func mdestroy(mp *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#ifdef GOARCH_386
|
// #ifdef GOARCH_386
|
||||||
//#define sa_handler k_sa_handler
|
// #define sa_handler k_sa_handler
|
||||||
//#endif
|
// #endif
|
||||||
|
|
||||||
func sigreturn__sigaction()
|
func sigreturn__sigaction()
|
||||||
func sigtramp() // Called via C ABI
|
func sigtramp() // Called via C ABI
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ package runtime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"internal/abi"
|
"internal/abi"
|
||||||
"internal/goarch"
|
"internal/goarch"
|
||||||
"runtime/internal/atomic"
|
"internal/runtime/atomic"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user