]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile, runtime: remove the siz argument of newproc/deferproc
authorCherry Mui <cherryyz@google.com>
Fri, 4 Jun 2021 22:11:59 +0000 (18:11 -0400)
committerCherry Mui <cherryyz@google.com>
Tue, 8 Jun 2021 20:54:04 +0000 (20:54 +0000)
newproc/deferproc takes a siz argument for the go'd/deferred
function's argument size. Now it is always zero. Remove the
argument.

Change-Id: If1bb8d427e34015ccec0ba10dbccaae96757fa8c
Reviewed-on: https://go-review.googlesource.com/c/go/+/325917
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
14 files changed:
src/cmd/compile/internal/ssagen/ssa.go
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_arm.s
src/runtime/asm_arm64.s
src/runtime/asm_mips64x.s
src/runtime/asm_mipsx.s
src/runtime/asm_ppc64x.s
src/runtime/asm_riscv64.s
src/runtime/asm_s390x.s
src/runtime/asm_wasm.s
src/runtime/debugcall.go
src/runtime/panic.go
src/runtime/proc.go

index 64793468458fcf0f0eed34c5efd828489fdbe6b7..27f0ee685bc67969dca418ff54502ed693d91019 100644 (file)
@@ -4972,14 +4972,11 @@ func (s *state) call(n *ir.CallExpr, k callKind, returnResultAddr bool) *ssa.Val
                argStart := base.Ctxt.FixedFrameSize()
                // Defer/go args.
                if k != callNormal {
-                       // Write argsize and closure (args to newproc/deferproc).
-                       argsize := s.constInt32(types.Types[types.TUINT32], int32(stksize))
-                       ACArgs = append(ACArgs, types.Types[types.TUINT32]) // not argExtra
-                       callArgs = append(callArgs, argsize)
-                       ACArgs = append(ACArgs, types.Types[types.TUINTPTR])
+                       // Write closure (arg to newproc/deferproc).
+                       ACArgs = append(ACArgs, types.Types[types.TUINTPTR]) // not argExtra
                        callArgs = append(callArgs, closure)
-                       stksize += 2 * int64(types.PtrSize)
-                       argStart += 2 * int64(types.PtrSize)
+                       stksize += int64(types.PtrSize)
+                       argStart += int64(types.PtrSize)
                }
 
                // Set receiver (for interface calls).
index ec5ea58028bf0e5ad38b24792bd6d2fdaf1e9a4b..dd2ea458cc59ac18069512cb7c3c7b6af6c403dd 100644 (file)
@@ -244,10 +244,8 @@ ok:
 
        // create a new goroutine to start program
        PUSHL   $runtime·mainPC(SB)    // entry
-       PUSHL   $0      // arg size
        CALL    runtime·newproc(SB)
        POPL    AX
-       POPL    AX
 
        // start this M
        CALL    runtime·mstart(SB)
index 96f0d3fefce0a66022217b252198d5b3c4c828aa..f8f5fc62e6cb551e2db5d7d0bb0b5591e6bb0b7b 100644 (file)
@@ -214,10 +214,8 @@ ok:
        // create a new goroutine to start program
        MOVQ    $runtime·mainPC(SB), AX                // entry
        PUSHQ   AX
-       PUSHQ   $0                      // arg size
        CALL    runtime·newproc(SB)
        POPQ    AX
-       POPQ    AX
 
        // start this M
        CALL    runtime·mstart(SB)
index 872e56aeb49bc4bf97e1de554ef6c937fa9b820f..5c2bc00fe811eb9105a1f5e91937e61c013a3550 100644 (file)
@@ -168,14 +168,13 @@ TEXT runtime·rt0_go(SB),NOSPLIT|NOFRAME|TOPFRAME,$0
        BL      runtime·schedinit(SB)
 
        // create a new goroutine to start program
-       SUB     $12, R13
+       SUB     $8, R13
        MOVW    $runtime·mainPC(SB), R0
-       MOVW    R0, 8(R13)      // arg 2: fn
+       MOVW    R0, 4(R13)      // arg 1: fn
        MOVW    $0, R0
-       MOVW    R0, 4(R13)      // arg 1: siz
        MOVW    R0, 0(R13)      // dummy LR
        BL      runtime·newproc(SB)
-       ADD     $12, R13        // pop args and LR
+       ADD     $8, R13 // pop args and LR
 
        // start this M
        BL      runtime·mstart(SB)
index be4313d35d5b713b33fc8564813ed4aca6858397..e7c5fa32252b9e42bb06bff94b3a769cc43203c4 100644 (file)
@@ -87,14 +87,11 @@ nocgo:
 
        // create a new goroutine to start program
        MOVD    $runtime·mainPC(SB), R0                // entry
-       MOVD    RSP, R7
-       MOVD.W  $0, -8(R7)
-       MOVD.W  R0, -8(R7)
-       MOVD.W  $0, -8(R7)
-       MOVD.W  $0, -8(R7)
-       MOVD    R7, RSP
+       SUB     $16, RSP
+       MOVD    R0, 8(RSP) // arg
+       MOVD    $0, 0(RSP) // dummy LR
        BL      runtime·newproc(SB)
-       ADD     $32, RSP
+       ADD     $16, RSP
 
        // start this M
        BL      runtime·mstart(SB)
index d4d22801055157c1a4079ccce2142b6cfc928ba4..f3ac453d998bbe3139f33ef313948304b45541ed 100644 (file)
@@ -63,12 +63,11 @@ nocgo:
 
        // create a new goroutine to start program
        MOVV    $runtime·mainPC(SB), R1                // entry
-       ADDV    $-24, R29
-       MOVV    R1, 16(R29)
-       MOVV    R0, 8(R29)
+       ADDV    $-16, R29
+       MOVV    R1, 8(R29)
        MOVV    R0, 0(R29)
        JAL     runtime·newproc(SB)
-       ADDV    $24, R29
+       ADDV    $16, R29
 
        // start this M
        JAL     runtime·mstart(SB)
index ea7edf20cf9f84fc21b38f81e66afe001d3a2030..4dc165849e280ffe8c314cd843b52d3cb4482fc0 100644 (file)
@@ -64,12 +64,11 @@ nocgo:
 
        // create a new goroutine to start program
        MOVW    $runtime·mainPC(SB), R1        // entry
-       ADDU    $-12, R29
-       MOVW    R1, 8(R29)
-       MOVW    R0, 4(R29)
+       ADDU    $-8, R29
+       MOVW    R1, 4(R29)
        MOVW    R0, 0(R29)
        JAL     runtime·newproc(SB)
-       ADDU    $12, R29
+       ADDU    $8, R29
 
        // start this M
        JAL     runtime·mstart(SB)
index 942cc14f17d044d8705ca4343a042139c2176204..a789d041e43eaa43b51a7f05bc4367dd9800c167 100644 (file)
@@ -94,9 +94,8 @@ nocgo:
        MOVDU   R0, -8(R1)
        MOVDU   R0, -8(R1)
        MOVDU   R0, -8(R1)
-       MOVDU   R0, -8(R1)
        BL      runtime·newproc(SB)
-       ADD     $(16+FIXED_FRAME), R1
+       ADD     $(8+FIXED_FRAME), R1
 
        // start this M
        BL      runtime·mstart(SB)
index ef7af4e10d8826861804362f3604310ca570a584..69ab88f1d2c47c95147fdf949b4b383b116f6d30 100644 (file)
@@ -57,12 +57,11 @@ nocgo:
 
        // create a new goroutine to start program
        MOV     $runtime·mainPC(SB), T0                // entry
-       ADD     $-24, X2
-       MOV     T0, 16(X2)
-       MOV     ZERO, 8(X2)
+       ADD     $-16, X2
+       MOV     T0, 8(X2)
        MOV     ZERO, 0(X2)
        CALL    runtime·newproc(SB)
-       ADD     $24, X2
+       ADD     $16, X2
 
        // start this M
        CALL    runtime·mstart(SB)
index fb382716303b42a6647b729be116512d1355bedd..534cb6112c61ec2cc57cb9f20917c8e9c076f1c8 100644 (file)
@@ -147,12 +147,11 @@ nocgo:
 
        // create a new goroutine to start program
        MOVD    $runtime·mainPC(SB), R2                // entry
-       SUB     $24, R15
-       MOVD    R2, 16(R15)
-       MOVD    $0, 8(R15)
+       SUB     $16, R15
+       MOVD    R2, 8(R15)
        MOVD    $0, 0(R15)
        BL      runtime·newproc(SB)
-       ADD     $24, R15
+       ADD     $16, R15
 
        // start this M
        BL      runtime·mstart(SB)
index 33c335ba5af91bfde9c613cd164b095e03ea090f..53c271aa708993b70b1b76510411f1080b735835 100644 (file)
@@ -18,8 +18,7 @@ TEXT runtime·rt0_go(SB), NOSPLIT|NOFRAME|TOPFRAME, $0
        CALLNORESUME runtime·args(SB)
        CALLNORESUME runtime·osinit(SB)
        CALLNORESUME runtime·schedinit(SB)
-       MOVD $0, 0(SP)
-       MOVD $runtime·mainPC(SB), 8(SP)
+       MOVD $runtime·mainPC(SB), 0(SP)
        CALLNORESUME runtime·newproc(SB)
        CALL runtime·mstart(SB) // WebAssembly stack will unwind when switching to another goroutine
        UNDEF
index faddf59eed6b405b11709b69012d1148af9845c6..ad66a18c26ce74bd9a1580d6090ae16a3ac72947 100644 (file)
@@ -112,7 +112,7 @@ func debugCallWrap(dispatch uintptr) {
                // closure and start the goroutine with that closure, but the compiler disallows
                // implicit closure allocation in the runtime.
                fn := debugCallWrap1
-               newg := newproc1(*(**funcval)(unsafe.Pointer(&fn)), nil, 0, gp, callerpc)
+               newg := newproc1(*(**funcval)(unsafe.Pointer(&fn)), gp, callerpc)
                args := &debugCallWrapArgs{
                        dispatch: dispatch,
                        callingG: gp,
index 8a296a3c17f9c9fef4b8db093d52adcb03e03dce..46e43382cdf8874ac15b4ef570e4e1a2af8cedde 100644 (file)
@@ -224,21 +224,16 @@ func panicmemAddr(addr uintptr) {
        panic(errorAddressString{msg: "invalid memory address or nil pointer dereference", addr: addr})
 }
 
-// Create a new deferred function fn with siz bytes of arguments.
+// Create a new deferred function fn, which has no arguments and results.
 // The compiler turns a defer statement into a call to this.
 //go:nosplit
-func deferproc(siz int32, fn *funcval) { // arguments of fn follow fn
+func deferproc(fn *funcval) { // TODO: Make deferproc just take a func().
        gp := getg()
        if gp.m.curg != gp {
                // go code on the system stack can't defer
                throw("defer on system stack")
        }
 
-       if siz != 0 {
-               // TODO: Make deferproc just take a func().
-               throw("defer with non-empty frame")
-       }
-
        // the arguments of fn are in a perilous state. The stack map
        // for deferproc does not describe them. So we can't let garbage
        // collection or stack copying trigger until we've copied them out
index be18bbc090c698737944eb547bc33ce7eb8691cb..5d2511b83cff8e500ee5b501e1d479fb8be1fc8b 100644 (file)
@@ -4217,7 +4217,7 @@ func malg(stacksize int32) *g {
        return newg
 }
 
-// Create a new g running fn with siz bytes of arguments.
+// Create a new g running fn.
 // Put it on the queue of g's waiting to run.
 // The compiler turns a go statement into a call to this.
 //
@@ -4232,12 +4232,11 @@ func malg(stacksize int32) *g {
 // be able to adjust them and stack splits won't be able to copy them.
 //
 //go:nosplit
-func newproc(siz int32, fn *funcval) {
-       argp := add(unsafe.Pointer(&fn), sys.PtrSize)
+func newproc(fn *funcval) {
        gp := getg()
        pc := getcallerpc()
        systemstack(func() {
-               newg := newproc1(fn, argp, siz, gp, pc)
+               newg := newproc1(fn, gp, pc)
 
                _p_ := getg().m.p.ptr()
                runqput(_p_, newg, true)
@@ -4248,23 +4247,19 @@ func newproc(siz int32, fn *funcval) {
        })
 }
 
-// Create a new g in state _Grunnable, starting at fn, with narg bytes
-// of arguments starting at argp. callerpc is the address of the go
-// statement that created this. The caller is responsible for adding
-// the new g to the scheduler.
+// Create a new g in state _Grunnable, starting at fn. callerpc is the
+// address of the go statement that created this. The caller is responsible
+// for adding the new g to the scheduler.
 //
 // This must run on the system stack because it's the continuation of
 // newproc, which cannot split the stack.
 //
 //go:systemstack
-func newproc1(fn *funcval, argp unsafe.Pointer, narg int32, callergp *g, callerpc uintptr) *g {
-       if narg != 0 {
-               // TODO: When we commit to GOEXPERIMENT=regabidefer,
-               // rewrite the comments for newproc and newproc1.
-               // newproc will no longer have a funny stack layout or
-               // need to be nosplit.
-               throw("go with non-empty frame")
-       }
+func newproc1(fn *funcval, callergp *g, callerpc uintptr) *g {
+       // TODO: When we commit to GOEXPERIMENT=regabidefer,
+       // rewrite the comments for newproc and newproc1.
+       // newproc will no longer have a funny stack layout or
+       // need to be nosplit.
 
        _g_ := getg()