From: Keith Randall Date: Fri, 6 Jun 2025 04:01:52 +0000 (-0700) Subject: runtime: remove duff support for arm64 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e4291e484cfcef5711f45d08e6d97a505eca9bf4;p=gostls13.git runtime: remove duff support for arm64 Change-Id: Ib290079a77a746a8512cd4638310b24164f6a930 Reviewed-on: https://go-review.googlesource.com/c/go/+/679456 Reviewed-by: Keith Randall Reviewed-by: Jorropo Reviewed-by: Michael Knyszek Auto-Submit: Keith Randall LUCI-TryBot-Result: Go LUCI --- diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 0c9c70aa89..743d09a319 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -892,8 +892,6 @@ var optab = []Optab{ {obj.ANOP, C_LCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, // nop variants, see #40689 {obj.ANOP, C_ZREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, {obj.ANOP, C_VREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, - {obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_SBRA, C_NONE, 5, 4, 0, 0, 0}, // same as AB/ABL - {obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_SBRA, C_NONE, 5, 4, 0, 0, 0}, // same as AB/ABL {obj.APCALIGN, C_LCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, // align code {obj.APCALIGNMAX, C_LCON, C_NONE, C_NONE, C_LCON, C_NONE, 0, 0, 0, 0, 0}, // align code, conditional } @@ -3297,9 +3295,7 @@ func buildop(ctxt *obj.Link) { obj.AFUNCDATA, obj.APCALIGN, obj.APCALIGNMAX, - obj.APCDATA, - obj.ADUFFZERO, - obj.ADUFFCOPY: + obj.APCDATA: break } } @@ -6971,7 +6967,7 @@ func (c *ctxt7) opbra(p *obj.Prog, a obj.As) uint32 { case AB: return 0<<31 | 5<<26 /* imm26 */ - case obj.ADUFFZERO, obj.ADUFFCOPY, ABL: + case ABL: return 1<<31 | 5<<26 } diff --git a/src/cmd/internal/obj/arm64/obj7.go b/src/cmd/internal/obj/arm64/obj7.go index 6cdb72359e..2583e46354 100644 --- a/src/cmd/internal/obj/arm64/obj7.go +++ b/src/cmd/internal/obj/arm64/obj7.go @@ -319,11 +319,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { // Rewrite BR/BL to symbol as TYPE_BRANCH. switch p.As { - case AB, - ABL, - obj.ARET, - obj.ADUFFZERO, - obj.ADUFFCOPY: + case AB, ABL, obj.ARET: if p.To.Sym != nil { p.To.Type = obj.TYPE_BRANCH } @@ -400,39 +396,6 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { // Rewrite p, if necessary, to access global data via the global offset table. func (c *ctxt7) rewriteToUseGot(p *obj.Prog) { - if p.As == obj.ADUFFCOPY || p.As == obj.ADUFFZERO { - // ADUFFxxx $offset - // becomes - // MOVD runtime.duffxxx@GOT, REGTMP - // ADD $offset, REGTMP - // CALL REGTMP - var sym *obj.LSym - if p.As == obj.ADUFFZERO { - sym = c.ctxt.LookupABI("runtime.duffzero", obj.ABIInternal) - } else { - sym = c.ctxt.LookupABI("runtime.duffcopy", obj.ABIInternal) - } - offset := p.To.Offset - p.As = AMOVD - p.From.Type = obj.TYPE_MEM - p.From.Name = obj.NAME_GOTREF - p.From.Sym = sym - p.To.Type = obj.TYPE_REG - p.To.Reg = REGTMP - p.To.Name = obj.NAME_NONE - p.To.Offset = 0 - p.To.Sym = nil - p1 := obj.Appendp(p, c.newprog) - p1.As = AADD - p1.From.Type = obj.TYPE_CONST - p1.From.Offset = offset - p1.To.Type = obj.TYPE_REG - p1.To.Reg = REGTMP - p2 := obj.Appendp(p1, c.newprog) - p2.As = obj.ACALL - p2.To.Type = obj.TYPE_REG - p2.To.Reg = REGTMP - } // We only care about global data: NAME_EXTERN means a global // symbol in the Go sense, and p.Sym.Local is true for a few @@ -543,9 +506,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { case obj.ATEXT: p.Mark |= LEAF - case ABL, - obj.ADUFFZERO, - obj.ADUFFCOPY: + case ABL: c.cursym.Func().Text.Mark &^= LEAF } } @@ -912,110 +873,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { p.From.Type = obj.TYPE_MEM p.From.Reg = REGSP } - - case obj.ADUFFCOPY: - // ADR ret_addr, R27 - // STP (FP, R27), -24(SP) - // SUB 24, SP, FP - // DUFFCOPY - // ret_addr: - // SUB 8, SP, FP - - q1 := p - // copy DUFFCOPY from q1 to q4 - q4 := obj.Appendp(p, c.newprog) - q4.Pos = p.Pos - q4.As = obj.ADUFFCOPY - q4.To = p.To - - q1.As = AADR - q1.From.Type = obj.TYPE_BRANCH - q1.To.Type = obj.TYPE_REG - q1.To.Reg = REG_R27 - - q2 := obj.Appendp(q1, c.newprog) - q2.Pos = p.Pos - q2.As = ASTP - q2.From.Type = obj.TYPE_REGREG - q2.From.Reg = REGFP - q2.From.Offset = int64(REG_R27) - q2.To.Type = obj.TYPE_MEM - q2.To.Reg = REGSP - q2.To.Offset = -24 - - // maintain FP for DUFFCOPY - q3 := obj.Appendp(q2, c.newprog) - q3.Pos = p.Pos - q3.As = ASUB - q3.From.Type = obj.TYPE_CONST - q3.From.Offset = 24 - q3.Reg = REGSP - q3.To.Type = obj.TYPE_REG - q3.To.Reg = REGFP - - q5 := obj.Appendp(q4, c.newprog) - q5.Pos = p.Pos - q5.As = ASUB - q5.From.Type = obj.TYPE_CONST - q5.From.Offset = 8 - q5.Reg = REGSP - q5.To.Type = obj.TYPE_REG - q5.To.Reg = REGFP - q1.From.SetTarget(q5) - p = q5 - - case obj.ADUFFZERO: - // ADR ret_addr, R27 - // STP (FP, R27), -24(SP) - // SUB 24, SP, FP - // DUFFZERO - // ret_addr: - // SUB 8, SP, FP - - q1 := p - // copy DUFFZERO from q1 to q4 - q4 := obj.Appendp(p, c.newprog) - q4.Pos = p.Pos - q4.As = obj.ADUFFZERO - q4.To = p.To - - q1.As = AADR - q1.From.Type = obj.TYPE_BRANCH - q1.To.Type = obj.TYPE_REG - q1.To.Reg = REG_R27 - - q2 := obj.Appendp(q1, c.newprog) - q2.Pos = p.Pos - q2.As = ASTP - q2.From.Type = obj.TYPE_REGREG - q2.From.Reg = REGFP - q2.From.Offset = int64(REG_R27) - q2.To.Type = obj.TYPE_MEM - q2.To.Reg = REGSP - q2.To.Offset = -24 - - // maintain FP for DUFFZERO - q3 := obj.Appendp(q2, c.newprog) - q3.Pos = p.Pos - q3.As = ASUB - q3.From.Type = obj.TYPE_CONST - q3.From.Offset = 24 - q3.Reg = REGSP - q3.To.Type = obj.TYPE_REG - q3.To.Reg = REGFP - - q5 := obj.Appendp(q4, c.newprog) - q5.Pos = p.Pos - q5.As = ASUB - q5.From.Type = obj.TYPE_CONST - q5.From.Offset = 8 - q5.Reg = REGSP - q5.To.Type = obj.TYPE_REG - q5.To.Reg = REGFP - q1.From.SetTarget(q5) - p = q5 } - if p.To.Type == obj.TYPE_REG && p.To.Reg == REGSP && p.Spadj == 0 { f := c.cursym.Func() if f.FuncFlag&abi.FuncFlagSPWrite == 0 { diff --git a/src/runtime/duff_arm64.s b/src/runtime/duff_arm64.s deleted file mode 100644 index 33c4905078..0000000000 --- a/src/runtime/duff_arm64.s +++ /dev/null @@ -1,267 +0,0 @@ -// Code generated by mkduff.go; DO NOT EDIT. -// Run go generate from src/runtime to update. -// See mkduff.go for comments. - -#include "textflag.h" - -TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0 - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP.P (ZR, ZR), 16(R20) - STP (ZR, ZR), (R20) - RET - -TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0 - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - LDP.P 16(R20), (R26, R27) - STP.P (R26, R27), 16(R21) - - RET diff --git a/src/runtime/mkduff.go b/src/runtime/mkduff.go index 86521d6d04..a0ec987307 100644 --- a/src/runtime/mkduff.go +++ b/src/runtime/mkduff.go @@ -35,7 +35,6 @@ func main() { gen("amd64", notags, zeroAMD64, copyAMD64) gen("386", notags, zero386, copy386) gen("arm", notags, zeroARM, copyARM) - gen("arm64", notags, zeroARM64, copyARM64) gen("loong64", notags, zeroLOONG64, copyLOONG64) gen("ppc64x", tagsPPC64x, zeroPPC64x, copyPPC64x) gen("mips64x", tagsMIPS64x, zeroMIPS64x, copyMIPS64x)