]> Cypherpunks.ru repositories - gostls13.git/commitdiff
internal/goexperiment: consolidate experiment-enabled constants
authorAustin Clements <austin@google.com>
Tue, 6 Apr 2021 17:35:48 +0000 (13:35 -0400)
committerAustin Clements <austin@google.com>
Thu, 8 Apr 2021 02:17:18 +0000 (02:17 +0000)
Currently, we have boolean and integral constants for GOEXPERIMENTs in
various places. Consolidate these into automatically generated
constants in the internal/goexperiment package.

Change-Id: I42a49aba2a3b4c722fedea23a613162cd8a67bee
Reviewed-on: https://go-review.googlesource.com/c/go/+/307818
Trust: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
31 files changed:
src/go/build/deps_test.go
src/internal/goexperiment/exp_fieldtrack_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_fieldtrack_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_preemptibleloops_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_preemptibleloops_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabi_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabi_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabiargs_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabiargs_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabidefer_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabidefer_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabig_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabig_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabireflect_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabireflect_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabiwrappers_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_regabiwrappers_on.go [new file with mode: 0644]
src/internal/goexperiment/exp_staticlockranking_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_staticlockranking_on.go [new file with mode: 0644]
src/internal/goexperiment/flags.go
src/internal/goexperiment/mkconsts.go [new file with mode: 0644]
src/reflect/abi.go
src/reflect/regabiargs_off.go [deleted file]
src/reflect/regabiargs_on.go [deleted file]
src/runtime/panic.go
src/runtime/proc.go
src/runtime/regabiargs_off.go [deleted file]
src/runtime/regabiargs_on.go [deleted file]
src/runtime/regabidefer_off.go [deleted file]
src/runtime/regabidefer_on.go [deleted file]
src/runtime/stubs.go

index 63ef2428b14addeea5e3a706ca18212b56e57b9a..a1a4324331c4f7f5698e05f8d4e45943eefc61d7 100644 (file)
@@ -71,7 +71,7 @@ var depsRules = `
        # No dependencies allowed for any of these packages.
        NONE
        < container/list, container/ring,
-         internal/cfg, internal/cpu,
+         internal/cfg, internal/cpu, internal/goexperiment,
          internal/goversion, internal/nettrace,
          unicode/utf8, unicode/utf16, unicode,
          unsafe;
@@ -81,7 +81,7 @@ var depsRules = `
        < internal/abi;
 
        # RUNTIME is the core runtime group of packages, all of them very light-weight.
-       internal/abi, internal/cpu, unsafe
+       internal/abi, internal/cpu, internal/goexperiment, unsafe
        < internal/bytealg
        < internal/itoa
        < internal/unsafeheader
diff --git a/src/internal/goexperiment/exp_fieldtrack_off.go b/src/internal/goexperiment/exp_fieldtrack_off.go
new file mode 100644 (file)
index 0000000..e5e1326
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.fieldtrack
+// +build !goexperiment.fieldtrack
+
+package goexperiment
+
+const FieldTrack = false
+const FieldTrackInt = 0
diff --git a/src/internal/goexperiment/exp_fieldtrack_on.go b/src/internal/goexperiment/exp_fieldtrack_on.go
new file mode 100644 (file)
index 0000000..0d8c447
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.fieldtrack
+// +build goexperiment.fieldtrack
+
+package goexperiment
+
+const FieldTrack = true
+const FieldTrackInt = 1
diff --git a/src/internal/goexperiment/exp_preemptibleloops_off.go b/src/internal/goexperiment/exp_preemptibleloops_off.go
new file mode 100644 (file)
index 0000000..7a26088
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.preemptibleloops
+// +build !goexperiment.preemptibleloops
+
+package goexperiment
+
+const PreemptibleLoops = false
+const PreemptibleLoopsInt = 0
diff --git a/src/internal/goexperiment/exp_preemptibleloops_on.go b/src/internal/goexperiment/exp_preemptibleloops_on.go
new file mode 100644 (file)
index 0000000..a9ca28c
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.preemptibleloops
+// +build goexperiment.preemptibleloops
+
+package goexperiment
+
+const PreemptibleLoops = true
+const PreemptibleLoopsInt = 1
diff --git a/src/internal/goexperiment/exp_regabi_off.go b/src/internal/goexperiment/exp_regabi_off.go
new file mode 100644 (file)
index 0000000..5d88238
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabi
+// +build !goexperiment.regabi
+
+package goexperiment
+
+const Regabi = false
+const RegabiInt = 0
diff --git a/src/internal/goexperiment/exp_regabi_on.go b/src/internal/goexperiment/exp_regabi_on.go
new file mode 100644 (file)
index 0000000..c08d58e
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabi
+// +build goexperiment.regabi
+
+package goexperiment
+
+const Regabi = true
+const RegabiInt = 1
diff --git a/src/internal/goexperiment/exp_regabiargs_off.go b/src/internal/goexperiment/exp_regabiargs_off.go
new file mode 100644 (file)
index 0000000..31a139b
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabiargs
+// +build !goexperiment.regabiargs
+
+package goexperiment
+
+const RegabiArgs = false
+const RegabiArgsInt = 0
diff --git a/src/internal/goexperiment/exp_regabiargs_on.go b/src/internal/goexperiment/exp_regabiargs_on.go
new file mode 100644 (file)
index 0000000..9b26f3c
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabiargs
+// +build goexperiment.regabiargs
+
+package goexperiment
+
+const RegabiArgs = true
+const RegabiArgsInt = 1
diff --git a/src/internal/goexperiment/exp_regabidefer_off.go b/src/internal/goexperiment/exp_regabidefer_off.go
new file mode 100644 (file)
index 0000000..b47c0c2
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabidefer
+// +build !goexperiment.regabidefer
+
+package goexperiment
+
+const RegabiDefer = false
+const RegabiDeferInt = 0
diff --git a/src/internal/goexperiment/exp_regabidefer_on.go b/src/internal/goexperiment/exp_regabidefer_on.go
new file mode 100644 (file)
index 0000000..bbf2f6c
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabidefer
+// +build goexperiment.regabidefer
+
+package goexperiment
+
+const RegabiDefer = true
+const RegabiDeferInt = 1
diff --git a/src/internal/goexperiment/exp_regabig_off.go b/src/internal/goexperiment/exp_regabig_off.go
new file mode 100644 (file)
index 0000000..1b37d45
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabig
+// +build !goexperiment.regabig
+
+package goexperiment
+
+const RegabiG = false
+const RegabiGInt = 0
diff --git a/src/internal/goexperiment/exp_regabig_on.go b/src/internal/goexperiment/exp_regabig_on.go
new file mode 100644 (file)
index 0000000..7e5b162
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabig
+// +build goexperiment.regabig
+
+package goexperiment
+
+const RegabiG = true
+const RegabiGInt = 1
diff --git a/src/internal/goexperiment/exp_regabireflect_off.go b/src/internal/goexperiment/exp_regabireflect_off.go
new file mode 100644 (file)
index 0000000..515f4a5
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabireflect
+// +build !goexperiment.regabireflect
+
+package goexperiment
+
+const RegabiReflect = false
+const RegabiReflectInt = 0
diff --git a/src/internal/goexperiment/exp_regabireflect_on.go b/src/internal/goexperiment/exp_regabireflect_on.go
new file mode 100644 (file)
index 0000000..e8a3e9c
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabireflect
+// +build goexperiment.regabireflect
+
+package goexperiment
+
+const RegabiReflect = true
+const RegabiReflectInt = 1
diff --git a/src/internal/goexperiment/exp_regabiwrappers_off.go b/src/internal/goexperiment/exp_regabiwrappers_off.go
new file mode 100644 (file)
index 0000000..bfa0fa3
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.regabiwrappers
+// +build !goexperiment.regabiwrappers
+
+package goexperiment
+
+const RegabiWrappers = false
+const RegabiWrappersInt = 0
diff --git a/src/internal/goexperiment/exp_regabiwrappers_on.go b/src/internal/goexperiment/exp_regabiwrappers_on.go
new file mode 100644 (file)
index 0000000..11ffffb
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.regabiwrappers
+// +build goexperiment.regabiwrappers
+
+package goexperiment
+
+const RegabiWrappers = true
+const RegabiWrappersInt = 1
diff --git a/src/internal/goexperiment/exp_staticlockranking_off.go b/src/internal/goexperiment/exp_staticlockranking_off.go
new file mode 100644 (file)
index 0000000..3d546c0
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build !goexperiment.staticlockranking
+// +build !goexperiment.staticlockranking
+
+package goexperiment
+
+const StaticLockRanking = false
+const StaticLockRankingInt = 0
diff --git a/src/internal/goexperiment/exp_staticlockranking_on.go b/src/internal/goexperiment/exp_staticlockranking_on.go
new file mode 100644 (file)
index 0000000..78188fb
--- /dev/null
@@ -0,0 +1,9 @@
+// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build goexperiment.staticlockranking
+// +build goexperiment.staticlockranking
+
+package goexperiment
+
+const StaticLockRanking = true
+const StaticLockRankingInt = 1
index 46800b4e0fdff4fdea27f59d359246aa7687c43e..c5e3d2c91ac9c4771de9c18e2767c0a0b350af6e 100644 (file)
 // - Build tag goexperiment.x is set if experiment x (lower case) is
 // enabled.
 //
+// - For each experiment x (in camel case), this package contains a
+// boolean constant x and an integer constant xInt.
+//
 // - In runtime assembly, the macro GOEXPERIMENT_x is defined if
 // experiment x (lower case) is enabled.
 //
-// - TODO(austin): More to come.
-//
 // In the toolchain, the set of experiments enabled for the current
 // build should be accessed via objabi.Experiment.
 //
 // go doc internal/experiment.Flags.
 package goexperiment
 
+//go:generate go run mkconsts.go
+
 // Flags is the set of experiments that can be enabled or disabled in
 // the current toolchain.
 //
 // When specified in the GOEXPERIMENT environment variable or as build
 // tags, experiments use the strings.ToLower of their field name.
+//
+// If you change this struct definition, run "go generate".
 type Flags struct {
        FieldTrack        bool
        PreemptibleLoops  bool
diff --git a/src/internal/goexperiment/mkconsts.go b/src/internal/goexperiment/mkconsts.go
new file mode 100644 (file)
index 0000000..204ca9d
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build ignore
+// +build ignore
+
+// mkconsts generates const definition files for each GOEXPERIMENT.
+package main
+
+import (
+       "bytes"
+       "fmt"
+       "internal/goexperiment"
+       "log"
+       "os"
+       "reflect"
+       "strings"
+)
+
+func main() {
+       // Delete existing experiment constant files.
+       ents, err := os.ReadDir(".")
+       if err != nil {
+               log.Fatal(err)
+       }
+       for _, ent := range ents {
+               name := ent.Name()
+               if !strings.HasPrefix(name, "exp_") {
+                       continue
+               }
+               // Check that this is definitely a generated file.
+               data, err := os.ReadFile(name)
+               if err != nil {
+                       log.Fatalf("reading %s: %v", name, err)
+               }
+               if !bytes.Contains(data, []byte("Code generated by mkconsts")) {
+                       log.Fatalf("%s: expected generated file", name)
+               }
+               if err := os.Remove(name); err != nil {
+                       log.Fatal(err)
+               }
+       }
+
+       // Generate new experiment constant files.
+       rt := reflect.TypeOf(&goexperiment.Flags{}).Elem()
+       for i := 0; i < rt.NumField(); i++ {
+               f := rt.Field(i).Name
+               buildTag := "goexperiment." + strings.ToLower(f)
+               for _, val := range []bool{false, true} {
+                       name := fmt.Sprintf("exp_%s_%s.go", strings.ToLower(f), pick(val, "off", "on"))
+                       data := fmt.Sprintf(`// Code generated by mkconsts.go. DO NOT EDIT.
+
+//go:build %s%s
+// +build %s%s
+
+package goexperiment
+
+const %s = %v
+const %sInt = %s
+`, pick(val, "!", ""), buildTag, pick(val, "!", ""), buildTag, f, val, f, pick(val, "0", "1"))
+                       if err := os.WriteFile(name, []byte(data), 0666); err != nil {
+                               log.Fatalf("writing %s: %v", name, err)
+                       }
+               }
+       }
+}
+
+func pick(v bool, f, t string) string {
+       if v {
+               return t
+       }
+       return f
+}
index 6a422d06d1e2459f608551049cc3c9247a35fdba..caa770fcb0f3d2a5d45b36fa5a8000668000c338 100644 (file)
@@ -6,6 +6,7 @@ package reflect
 
 import (
        "internal/abi"
+       "internal/goexperiment"
        "unsafe"
 )
 
@@ -28,9 +29,9 @@ import (
 // commented out there should be the actual values once
 // we're ready to use the register ABI everywhere.
 var (
-       intArgRegs   = abi.IntArgRegs * experimentRegabiArgs
-       floatArgRegs = abi.FloatArgRegs * experimentRegabiArgs
-       floatRegSize = uintptr(abi.EffectiveFloatRegSize * experimentRegabiArgs)
+       intArgRegs   = abi.IntArgRegs * goexperiment.RegabiArgsInt
+       floatArgRegs = abi.FloatArgRegs * goexperiment.RegabiArgsInt
+       floatRegSize = uintptr(abi.EffectiveFloatRegSize * goexperiment.RegabiArgsInt)
 )
 
 // abiStep represents an ABI "instruction." Each instruction
diff --git a/src/reflect/regabiargs_off.go b/src/reflect/regabiargs_off.go
deleted file mode 100644 (file)
index 655e955..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !goexperiment.regabiargs
-// +build !goexperiment.regabiargs
-
-package reflect
-
-const experimentRegabiArgs = 0
diff --git a/src/reflect/regabiargs_on.go b/src/reflect/regabiargs_on.go
deleted file mode 100644 (file)
index 0f33b22..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.regabiargs
-// +build goexperiment.regabiargs
-
-package reflect
-
-const experimentRegabiArgs = 1
index d33441a0d81334fdac6ae352b6291449149bc811..c437553012ec406239569633755a18dce9beaa25 100644 (file)
@@ -6,6 +6,7 @@ package runtime
 
 import (
        "internal/abi"
+       "internal/goexperiment"
        "runtime/internal/atomic"
        "runtime/internal/sys"
        "unsafe"
@@ -228,7 +229,7 @@ func deferproc(siz int32, fn *funcval) { // arguments of fn follow fn
                throw("defer on system stack")
        }
 
-       if experimentRegabiDefer && siz != 0 {
+       if goexperiment.RegabiDefer && siz != 0 {
                // TODO: Make deferproc just take a func().
                throw("defer with non-empty frame")
        }
@@ -285,7 +286,7 @@ func deferprocStack(d *_defer) {
                // go code on the system stack can't defer
                throw("defer on system stack")
        }
-       if experimentRegabiDefer && d.siz != 0 {
+       if goexperiment.RegabiDefer && d.siz != 0 {
                throw("defer with non-empty frame")
        }
        // siz and fn are already set.
@@ -387,8 +388,8 @@ func deferArgs(d *_defer) unsafe.Pointer {
 // that experiment, we should change the type of d.fn.
 //go:nosplit
 func deferFunc(d *_defer) func() {
-       if !experimentRegabiDefer {
-               throw("requires experimentRegabiDefer")
+       if !goexperiment.RegabiDefer {
+               throw("requires GOEXPERIMENT=regabidefer")
        }
        var fn func()
        *(**funcval)(unsafe.Pointer(&fn)) = d.fn
@@ -648,7 +649,7 @@ func Goexit() {
                                addOneOpenDeferFrame(gp, 0, nil)
                        }
                } else {
-                       if experimentRegabiDefer {
+                       if goexperiment.RegabiDefer {
                                // Save the pc/sp in deferCallSave(), so we can "recover" back to this
                                // loop if necessary.
                                deferCallSave(&p, deferFunc(d))
@@ -850,7 +851,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
                argWidth, fd = readvarintUnsafe(fd)
                closureOffset, fd = readvarintUnsafe(fd)
                nArgs, fd = readvarintUnsafe(fd)
-               if experimentRegabiDefer && argWidth != 0 {
+               if goexperiment.RegabiDefer && argWidth != 0 {
                        throw("defer with non-empty frame")
                }
                if deferBits&(1<<i) == 0 {
@@ -878,7 +879,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
                deferBits = deferBits &^ (1 << i)
                *(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset))) = deferBits
                p := d._panic
-               if experimentRegabiDefer {
+               if goexperiment.RegabiDefer {
                        deferCallSave(p, deferFunc(d))
                } else {
                        reflectcallSave(p, unsafe.Pointer(closure), deferArgs, argWidth)
@@ -906,8 +907,8 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
 // This is marked as a wrapper by the compiler so it doesn't appear in
 // tracebacks.
 func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
-       if experimentRegabiDefer {
-               throw("not allowed with experimentRegabiDefer")
+       if goexperiment.RegabiDefer {
+               throw("not allowed with GOEXPERIMENT=regabidefer")
        }
        if p != nil {
                p.argp = unsafe.Pointer(getargp(0))
@@ -932,8 +933,8 @@ func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
 // This is marked as a wrapper by the compiler so it doesn't appear in
 // tracebacks.
 func deferCallSave(p *_panic, fn func()) {
-       if !experimentRegabiDefer {
-               throw("only allowed with experimentRegabiDefer")
+       if !goexperiment.RegabiDefer {
+               throw("only allowed with GOEXPERIMENT=regabidefer")
        }
        if p != nil {
                p.argp = unsafe.Pointer(getargp(0))
@@ -1035,7 +1036,7 @@ func gopanic(e interface{}) {
                } else {
                        p.argp = unsafe.Pointer(getargp(0))
 
-                       if experimentRegabiDefer {
+                       if goexperiment.RegabiDefer {
                                fn := deferFunc(d)
                                fn()
                        } else {
index 583ed73d848ce55affce4e3080031389b47cac7d..35a3f9ca199a6b07e3d23c728c44d4d8149ff441 100644 (file)
@@ -6,6 +6,7 @@ package runtime
 
 import (
        "internal/cpu"
+       "internal/goexperiment"
        "runtime/internal/atomic"
        "runtime/internal/sys"
        "unsafe"
@@ -4021,8 +4022,8 @@ func malg(stacksize int32) *g {
 //
 //go:nosplit
 func newproc(siz int32, fn *funcval) {
-       if experimentRegabiDefer && siz != 0 {
-               // TODO: When we commit to experimentRegabiDefer,
+       if goexperiment.RegabiDefer && siz != 0 {
+               // TODO: When we commit to GOEXPERIMENT=regabidefer,
                // rewrite newproc's comment, since it will no longer
                // have a funny stack layout or need to be nosplit.
                throw("go with non-empty frame")
diff --git a/src/runtime/regabiargs_off.go b/src/runtime/regabiargs_off.go
deleted file mode 100644 (file)
index 49d7bcc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !goexperiment.regabiargs
-// +build !goexperiment.regabiargs
-
-package runtime
-
-const experimentRegabiArgs = 0
diff --git a/src/runtime/regabiargs_on.go b/src/runtime/regabiargs_on.go
deleted file mode 100644 (file)
index 935d3ec..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.regabiargs
-// +build goexperiment.regabiargs
-
-package runtime
-
-const experimentRegabiArgs = 1
diff --git a/src/runtime/regabidefer_off.go b/src/runtime/regabidefer_off.go
deleted file mode 100644 (file)
index 72e3cf9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !goexperiment.regabidefer
-// +build !goexperiment.regabidefer
-
-package runtime
-
-const experimentRegabiDefer = false
diff --git a/src/runtime/regabidefer_on.go b/src/runtime/regabidefer_on.go
deleted file mode 100644 (file)
index 281694b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build goexperiment.regabidefer
-// +build goexperiment.regabidefer
-
-package runtime
-
-const experimentRegabiDefer = true
index e2d4f0da3b679288fd1d2d2a99beef48dacbd58f..f11ec539df0bf0f1a4e66d456070e3b7c3ba5c5e 100644 (file)
@@ -6,6 +6,7 @@ package runtime
 
 import (
        "internal/abi"
+       "internal/goexperiment"
        "unsafe"
 )
 
@@ -423,4 +424,4 @@ func sigpanic0()
 // everywhere.
 //
 // Protected by finlock.
-var intArgRegs = abi.IntArgRegs * experimentRegabiArgs
+var intArgRegs = abi.IntArgRegs * goexperiment.RegabiArgsInt