Skip to content

Commit e4291e4

Browse files
randall77gopherbot
authored andcommitted
runtime: remove duff support for arm64
Change-Id: Ib290079a77a746a8512cd4638310b24164f6a930 Reviewed-on: https://go-review.googlesource.com/c/go/+/679456 Reviewed-by: Keith Randall <[email protected]> Reviewed-by: Jorropo <[email protected]> Reviewed-by: Michael Knyszek <[email protected]> Auto-Submit: Keith Randall <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 15d6dbc commit e4291e4

File tree

4 files changed

+4
-418
lines changed

4 files changed

+4
-418
lines changed

src/cmd/internal/obj/arm64/asm7.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -892,8 +892,6 @@ var optab = []Optab{
892892
{obj.ANOP, C_LCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, // nop variants, see #40689
893893
{obj.ANOP, C_ZREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
894894
{obj.ANOP, C_VREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0},
895-
{obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_SBRA, C_NONE, 5, 4, 0, 0, 0}, // same as AB/ABL
896-
{obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_SBRA, C_NONE, 5, 4, 0, 0, 0}, // same as AB/ABL
897895
{obj.APCALIGN, C_LCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0, 0}, // align code
898896
{obj.APCALIGNMAX, C_LCON, C_NONE, C_NONE, C_LCON, C_NONE, 0, 0, 0, 0, 0}, // align code, conditional
899897
}
@@ -3297,9 +3295,7 @@ func buildop(ctxt *obj.Link) {
32973295
obj.AFUNCDATA,
32983296
obj.APCALIGN,
32993297
obj.APCALIGNMAX,
3300-
obj.APCDATA,
3301-
obj.ADUFFZERO,
3302-
obj.ADUFFCOPY:
3298+
obj.APCDATA:
33033299
break
33043300
}
33053301
}
@@ -6971,7 +6967,7 @@ func (c *ctxt7) opbra(p *obj.Prog, a obj.As) uint32 {
69716967
case AB:
69726968
return 0<<31 | 5<<26 /* imm26 */
69736969

6974-
case obj.ADUFFZERO, obj.ADUFFCOPY, ABL:
6970+
case ABL:
69756971
return 1<<31 | 5<<26
69766972
}
69776973

src/cmd/internal/obj/arm64/obj7.go

Lines changed: 2 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
319319

320320
// Rewrite BR/BL to symbol as TYPE_BRANCH.
321321
switch p.As {
322-
case AB,
323-
ABL,
324-
obj.ARET,
325-
obj.ADUFFZERO,
326-
obj.ADUFFCOPY:
322+
case AB, ABL, obj.ARET:
327323
if p.To.Sym != nil {
328324
p.To.Type = obj.TYPE_BRANCH
329325
}
@@ -400,39 +396,6 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
400396

401397
// Rewrite p, if necessary, to access global data via the global offset table.
402398
func (c *ctxt7) rewriteToUseGot(p *obj.Prog) {
403-
if p.As == obj.ADUFFCOPY || p.As == obj.ADUFFZERO {
404-
// ADUFFxxx $offset
405-
// becomes
406-
// MOVD runtime.duffxxx@GOT, REGTMP
407-
// ADD $offset, REGTMP
408-
// CALL REGTMP
409-
var sym *obj.LSym
410-
if p.As == obj.ADUFFZERO {
411-
sym = c.ctxt.LookupABI("runtime.duffzero", obj.ABIInternal)
412-
} else {
413-
sym = c.ctxt.LookupABI("runtime.duffcopy", obj.ABIInternal)
414-
}
415-
offset := p.To.Offset
416-
p.As = AMOVD
417-
p.From.Type = obj.TYPE_MEM
418-
p.From.Name = obj.NAME_GOTREF
419-
p.From.Sym = sym
420-
p.To.Type = obj.TYPE_REG
421-
p.To.Reg = REGTMP
422-
p.To.Name = obj.NAME_NONE
423-
p.To.Offset = 0
424-
p.To.Sym = nil
425-
p1 := obj.Appendp(p, c.newprog)
426-
p1.As = AADD
427-
p1.From.Type = obj.TYPE_CONST
428-
p1.From.Offset = offset
429-
p1.To.Type = obj.TYPE_REG
430-
p1.To.Reg = REGTMP
431-
p2 := obj.Appendp(p1, c.newprog)
432-
p2.As = obj.ACALL
433-
p2.To.Type = obj.TYPE_REG
434-
p2.To.Reg = REGTMP
435-
}
436399

437400
// We only care about global data: NAME_EXTERN means a global
438401
// 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) {
543506
case obj.ATEXT:
544507
p.Mark |= LEAF
545508

546-
case ABL,
547-
obj.ADUFFZERO,
548-
obj.ADUFFCOPY:
509+
case ABL:
549510
c.cursym.Func().Text.Mark &^= LEAF
550511
}
551512
}
@@ -912,110 +873,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
912873
p.From.Type = obj.TYPE_MEM
913874
p.From.Reg = REGSP
914875
}
915-
916-
case obj.ADUFFCOPY:
917-
// ADR ret_addr, R27
918-
// STP (FP, R27), -24(SP)
919-
// SUB 24, SP, FP
920-
// DUFFCOPY
921-
// ret_addr:
922-
// SUB 8, SP, FP
923-
924-
q1 := p
925-
// copy DUFFCOPY from q1 to q4
926-
q4 := obj.Appendp(p, c.newprog)
927-
q4.Pos = p.Pos
928-
q4.As = obj.ADUFFCOPY
929-
q4.To = p.To
930-
931-
q1.As = AADR
932-
q1.From.Type = obj.TYPE_BRANCH
933-
q1.To.Type = obj.TYPE_REG
934-
q1.To.Reg = REG_R27
935-
936-
q2 := obj.Appendp(q1, c.newprog)
937-
q2.Pos = p.Pos
938-
q2.As = ASTP
939-
q2.From.Type = obj.TYPE_REGREG
940-
q2.From.Reg = REGFP
941-
q2.From.Offset = int64(REG_R27)
942-
q2.To.Type = obj.TYPE_MEM
943-
q2.To.Reg = REGSP
944-
q2.To.Offset = -24
945-
946-
// maintain FP for DUFFCOPY
947-
q3 := obj.Appendp(q2, c.newprog)
948-
q3.Pos = p.Pos
949-
q3.As = ASUB
950-
q3.From.Type = obj.TYPE_CONST
951-
q3.From.Offset = 24
952-
q3.Reg = REGSP
953-
q3.To.Type = obj.TYPE_REG
954-
q3.To.Reg = REGFP
955-
956-
q5 := obj.Appendp(q4, c.newprog)
957-
q5.Pos = p.Pos
958-
q5.As = ASUB
959-
q5.From.Type = obj.TYPE_CONST
960-
q5.From.Offset = 8
961-
q5.Reg = REGSP
962-
q5.To.Type = obj.TYPE_REG
963-
q5.To.Reg = REGFP
964-
q1.From.SetTarget(q5)
965-
p = q5
966-
967-
case obj.ADUFFZERO:
968-
// ADR ret_addr, R27
969-
// STP (FP, R27), -24(SP)
970-
// SUB 24, SP, FP
971-
// DUFFZERO
972-
// ret_addr:
973-
// SUB 8, SP, FP
974-
975-
q1 := p
976-
// copy DUFFZERO from q1 to q4
977-
q4 := obj.Appendp(p, c.newprog)
978-
q4.Pos = p.Pos
979-
q4.As = obj.ADUFFZERO
980-
q4.To = p.To
981-
982-
q1.As = AADR
983-
q1.From.Type = obj.TYPE_BRANCH
984-
q1.To.Type = obj.TYPE_REG
985-
q1.To.Reg = REG_R27
986-
987-
q2 := obj.Appendp(q1, c.newprog)
988-
q2.Pos = p.Pos
989-
q2.As = ASTP
990-
q2.From.Type = obj.TYPE_REGREG
991-
q2.From.Reg = REGFP
992-
q2.From.Offset = int64(REG_R27)
993-
q2.To.Type = obj.TYPE_MEM
994-
q2.To.Reg = REGSP
995-
q2.To.Offset = -24
996-
997-
// maintain FP for DUFFZERO
998-
q3 := obj.Appendp(q2, c.newprog)
999-
q3.Pos = p.Pos
1000-
q3.As = ASUB
1001-
q3.From.Type = obj.TYPE_CONST
1002-
q3.From.Offset = 24
1003-
q3.Reg = REGSP
1004-
q3.To.Type = obj.TYPE_REG
1005-
q3.To.Reg = REGFP
1006-
1007-
q5 := obj.Appendp(q4, c.newprog)
1008-
q5.Pos = p.Pos
1009-
q5.As = ASUB
1010-
q5.From.Type = obj.TYPE_CONST
1011-
q5.From.Offset = 8
1012-
q5.Reg = REGSP
1013-
q5.To.Type = obj.TYPE_REG
1014-
q5.To.Reg = REGFP
1015-
q1.From.SetTarget(q5)
1016-
p = q5
1017876
}
1018-
1019877
if p.To.Type == obj.TYPE_REG && p.To.Reg == REGSP && p.Spadj == 0 {
1020878
f := c.cursym.Func()
1021879
if f.FuncFlag&abi.FuncFlagSPWrite == 0 {

0 commit comments

Comments
 (0)