cmd/compile: enable reg args and add duffcopy support on ppc64x

This adds support for duffcopy on ppc64x and updates the
ssa/config.go file to enable register args and recognize
the duffDevice is available on ppc64x.

Change-Id: Ifc472cc9cc19c9a80e468fb52078c75f7dd44d36
Reviewed-on: https://go-review.googlesource.com/c/go/+/351490
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
Lynn Boger 2021-09-22 09:37:12 -05:00
parent abbfec2829
commit 24c2ee7b65
4 changed files with 399 additions and 140 deletions

View File

@ -239,11 +239,10 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
c.registers = registersPPC64[:]
c.gpRegMask = gpRegMaskPPC64
c.fpRegMask = fpRegMaskPPC64
//c.intParamRegs = paramIntRegPPC64
//c.floatParamRegs = paramFloatRegPPC64
c.intParamRegs = paramIntRegPPC64
c.floatParamRegs = paramFloatRegPPC64
c.FPReg = framepointerRegPPC64
c.LinkReg = linkRegPPC64
c.noDuffDevice = true // TODO: Resolve PPC64 DuffDevice (has zero, but not copy)
c.hasGReg = true
case "mips64":
c.BigEndian = true

View File

@ -242,8 +242,8 @@ const (
REGSB = REG_R2
REGRET = REG_R3
REGARG = -1 /* -1 disables passing the first argument in register */
REGRT1 = REG_R3 /* reserved for runtime, duffzero and duffcopy */
REGRT2 = REG_R4 /* reserved for runtime, duffcopy */
REGRT1 = REG_R20 /* reserved for runtime, duffzero and duffcopy */
REGRT2 = REG_R21 /* reserved for runtime, duffcopy */
REGMIN = REG_R7 /* register variables allocated from here to REGMAX */
REGCTXT = REG_R11 /* context for closures */
REGTLS = REG_R13 /* C ABI TLS base pointer */

View File

@ -7,136 +7,392 @@
#include "textflag.h"
TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
MOVDU R0, 8(R3)
TEXT runtime·duffzero<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
MOVDU R0, 8(R20)
RET
TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0
UNDEF
TEXT runtime·duffcopy<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
MOVDU 8(R20), R5
MOVDU R5, 8(R21)
RET

View File

@ -188,17 +188,21 @@ func zeroPPC64x(w io.Writer) {
// R0: always zero
// R3 (aka REGRT1): ptr to memory to be zeroed - 8
// On return, R3 points to the last zeroed dword.
fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0")
fmt.Fprintln(w, "TEXT runtime·duffzero<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0")
for i := 0; i < 128; i++ {
fmt.Fprintln(w, "\tMOVDU\tR0, 8(R3)")
fmt.Fprintln(w, "\tMOVDU\tR0, 8(R20)")
}
fmt.Fprintln(w, "\tRET")
}
func copyPPC64x(w io.Writer) {
// duffcopy is not used on PPC64.
fmt.Fprintln(w, "TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0")
fmt.Fprintln(w, "\tUNDEF")
fmt.Fprintln(w, "TEXT runtime·duffcopy<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0")
for i := 0; i < 128; i++ {
fmt.Fprintln(w, "\tMOVDU\t8(R20), R5")
fmt.Fprintln(w, "\tMOVDU\tR5, 8(R21)")
}
fmt.Fprintln(w, "\tRET")
}
func tagsMIPS64x(w io.Writer) {