diff options
author | Michael Anthony Knyszek <mknyszek@google.com> | 2021-02-17 19:14:03 +0000 |
---|---|---|
committer | Michael Knyszek <mknyszek@google.com> | 2021-02-26 20:49:57 +0000 |
commit | cda8ee095e487951eab5a53a097e2b8f400f237d (patch) | |
tree | 9da97451d1b3aa61df6fce9a121209e01c5061e7 | |
parent | d8e33d558e2c5fcd7f9092790780e68adbac0f1b (diff) | |
download | go-cda8ee095e487951eab5a53a097e2b8f400f237d.tar.gz go-cda8ee095e487951eab5a53a097e2b8f400f237d.zip |
reflect: fix register ABI spill space calculation
Currently this does things the old way by computing the number of
registers, but we're going to be using their ABI0 layout for the spill
space for now.
Change-Id: Ibcef1ee48fd834af7cbdaabe704bcabe066ed358
Reviewed-on: https://go-review.googlesource.com/c/go/+/293011
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
-rw-r--r-- | src/reflect/abi.go | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/reflect/abi.go b/src/reflect/abi.go index 88af212717..20f41d96b5 100644 --- a/src/reflect/abi.go +++ b/src/reflect/abi.go @@ -334,8 +334,7 @@ func newAbiDesc(t *funcType, rcvr *rtype) abiDesc { // // TODO(mknyszek): Remove this when we no longer have // caller reserved spill space. - spillInt := uintptr(0) - spillFloat := uintptr(0) + spill := uintptr(0) // Compute gc program & stack bitmap for stack arguments stackPtrs := new(bitVector) @@ -351,21 +350,19 @@ func newAbiDesc(t *funcType, rcvr *rtype) abiDesc { stackPtrs.append(0) } } else { - spillInt += ptrSize + spill += ptrSize } } for _, arg := range t.in() { - i, f := in.iregs, in.fregs stkStep := in.addArg(arg) if stkStep != nil { addTypeBits(stackPtrs, stkStep.stkOff, arg) } else { - i, f = in.iregs-i, in.fregs-f - spillInt += uintptr(i) * ptrSize - spillFloat += uintptr(f) * abi.EffectiveFloatRegSize + spill = align(spill, uintptr(arg.align)) + spill += arg.size } } - spill := align(spillInt+spillFloat, ptrSize) + spill = align(spill, ptrSize) // From the input parameters alone, we now know // the stackCallArgsSize and retOffset. |