From: Michael Anthony Knyszek Date: Wed, 17 Feb 2021 19:14:03 +0000 (+0000) Subject: reflect: fix register ABI spill space calculation X-Git-Tag: go1.17beta1~1346 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=cda8ee095e;p=gostls13.git 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 TryBot-Result: Go Bot Reviewed-by: Cherry Zhang Trust: Michael Knyszek --- 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.