aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2021-02-17 19:14:03 +0000
committerMichael Knyszek <mknyszek@google.com>2021-02-26 20:49:57 +0000
commitcda8ee095e487951eab5a53a097e2b8f400f237d (patch)
tree9da97451d1b3aa61df6fce9a121209e01c5061e7
parentd8e33d558e2c5fcd7f9092790780e68adbac0f1b (diff)
downloadgo-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.go13
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.