Skip to content

Commit 4f7bbc6

Browse files
limeidangopherbot
authored andcommitted
runtime, cmd/compile, cmd/internal/obj: remove duff support for loong64
Change-Id: I44d6452933c8010f7dfbf821a32053f9d1cf151e Reviewed-on: https://go-review.googlesource.com/c/go/+/700096 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Keith Randall <[email protected]> Reviewed-by: sophie zhao <[email protected]> Reviewed-by: abner chenc <[email protected]> Reviewed-by: Michael Pratt <[email protected]> Reviewed-by: Keith Randall <[email protected]> Auto-Submit: Michael Pratt <[email protected]>
1 parent b8cc907 commit 4f7bbc6

File tree

8 files changed

+4
-1062
lines changed

8 files changed

+4
-1062
lines changed

src/cmd/compile/internal/loong64/ssa.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -552,13 +552,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
552552
p.To.Type = obj.TYPE_REG
553553
p.To.Reg = v.Reg()
554554

555-
case ssa.OpLOONG64DUFFZERO:
556-
// runtime.duffzero expects start address in R20
557-
p := s.Prog(obj.ADUFFZERO)
558-
p.To.Type = obj.TYPE_MEM
559-
p.To.Name = obj.NAME_EXTERN
560-
p.To.Sym = ir.Syms.Duffzero
561-
p.To.Offset = v.AuxInt
562555
case ssa.OpLOONG64LoweredZero:
563556
ptrReg := v.Args[0].Reg()
564557
n := v.AuxInt
@@ -652,12 +645,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
652645
zero8(s, ptrReg, off+n-8)
653646
}
654647

655-
case ssa.OpLOONG64DUFFCOPY:
656-
p := s.Prog(obj.ADUFFCOPY)
657-
p.To.Type = obj.TYPE_MEM
658-
p.To.Name = obj.NAME_EXTERN
659-
p.To.Sym = ir.Syms.Duffcopy
660-
p.To.Offset = v.AuxInt
661648
case ssa.OpLOONG64LoweredMove:
662649
dstReg := v.Args[0].Reg()
663650
srcReg := v.Args[1].Reg()

src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -360,24 +360,6 @@ func init() {
360360
{name: "CALLclosure", argLength: -1, reg: regInfo{inputs: []regMask{gpsp, buildReg("R29"), 0}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call function via closure. arg0=codeptr, arg1=closure, last arg=mem, auxint=argsize, returns mem
361361
{name: "CALLinter", argLength: -1, reg: regInfo{inputs: []regMask{gp}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call fn by pointer. arg0=codeptr, last arg=mem, auxint=argsize, returns mem
362362

363-
// duffzero
364-
// arg0 = address of memory to zero
365-
// arg1 = mem
366-
// auxint = offset into duffzero code to start executing
367-
// returns mem
368-
// R20 aka loong64.REGRT1 changed as side effect
369-
{
370-
name: "DUFFZERO",
371-
aux: "Int64",
372-
argLength: 2,
373-
reg: regInfo{
374-
inputs: []regMask{buildReg("R20")},
375-
clobbers: buildReg("R20 R1"),
376-
},
377-
typ: "Mem",
378-
faultOnNilArg0: true,
379-
},
380-
381363
// medium zeroing
382364
// arg0 = address of memory to zero
383365
// arg1 = mem
@@ -393,25 +375,6 @@ func init() {
393375
faultOnNilArg0: true,
394376
},
395377

396-
// duffcopy
397-
// arg0 = address of dst memory (in R21, changed as side effect)
398-
// arg1 = address of src memory (in R20, changed as side effect)
399-
// arg2 = mem
400-
// auxint = offset into duffcopy code to start executing
401-
// returns mem
402-
{
403-
name: "DUFFCOPY",
404-
aux: "Int64",
405-
argLength: 3,
406-
reg: regInfo{
407-
inputs: []regMask{buildReg("R21"), buildReg("R20")},
408-
clobbers: buildReg("R20 R21 R1"),
409-
},
410-
typ: "Mem",
411-
faultOnNilArg0: true,
412-
faultOnNilArg1: true,
413-
},
414-
415378
// large zeroing
416379
// arg0 = address of memory to zero
417380
// arg1 = mem

src/cmd/compile/internal/ssa/opGen.go

Lines changed: 0 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/cmd/internal/obj/loong64/a.out.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,6 @@ const (
225225
REGZERO = REG_R0 // set to zero
226226
REGLINK = REG_R1
227227
REGSP = REG_R3
228-
REGRT1 = REG_R20 // reserved for runtime, duffzero and duffcopy
229-
REGRT2 = REG_R21 // reserved for runtime, duffcopy
230228
REGCTXT = REG_R29 // context for closures
231229
REGG = REG_R22 // G in loong64
232230
REGTMP = REG_R30 // used by the assembler

src/cmd/internal/obj/loong64/asm.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,6 @@ var optab = []Optab{
440440
{obj.ANOP, C_DCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, // nop variants, see #40689
441441
{obj.ANOP, C_REG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0},
442442
{obj.ANOP, C_FREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0},
443-
{obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP
444-
{obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP
445443
}
446444

447445
var atomicInst = map[obj.As]uint32{
@@ -1526,9 +1524,7 @@ func buildop(ctxt *obj.Link) {
15261524
obj.ATEXT,
15271525
obj.AFUNCDATA,
15281526
obj.APCALIGN,
1529-
obj.APCDATA,
1530-
obj.ADUFFZERO,
1531-
obj.ADUFFCOPY:
1527+
obj.APCDATA:
15321528
break
15331529

15341530
case ARDTIMELW:
@@ -4040,9 +4036,7 @@ func (c *ctxt0) opirr(a obj.As) uint32 {
40404036

40414037
case AJMP:
40424038
return 0x14 << 26
4043-
case AJAL,
4044-
obj.ADUFFZERO,
4045-
obj.ADUFFCOPY:
4039+
case AJAL:
40464040
return 0x15 << 26
40474041

40484042
case AJIRL:

src/cmd/internal/obj/loong64/obj.go

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@ import (
1717
func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
1818
// Rewrite JMP/JAL to symbol as TYPE_BRANCH.
1919
switch p.As {
20-
case AJMP,
21-
AJAL,
22-
ARET,
23-
obj.ADUFFZERO,
24-
obj.ADUFFCOPY:
20+
case AJMP, AJAL, ARET:
2521
if p.To.Sym != nil {
2622
p.To.Type = obj.TYPE_BRANCH
2723
}
@@ -93,40 +89,6 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
9389
}
9490

9591
func rewriteToUseGot(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
96-
// ADUFFxxx $offset
97-
// becomes
98-
// MOVV runtime.duffxxx@GOT, REGTMP
99-
// ADD $offset, REGTMP
100-
// JAL REGTMP
101-
if p.As == obj.ADUFFCOPY || p.As == obj.ADUFFZERO {
102-
var sym *obj.LSym
103-
if p.As == obj.ADUFFZERO {
104-
sym = ctxt.LookupABI("runtime.duffzero", obj.ABIInternal)
105-
} else {
106-
sym = ctxt.LookupABI("runtime.duffcopy", obj.ABIInternal)
107-
}
108-
offset := p.To.Offset
109-
p.As = AMOVV
110-
p.From.Type = obj.TYPE_MEM
111-
p.From.Sym = sym
112-
p.From.Name = obj.NAME_GOTREF
113-
p.To.Type = obj.TYPE_REG
114-
p.To.Reg = REGTMP
115-
p.To.Name = obj.NAME_NONE
116-
p.To.Offset = 0
117-
p.To.Sym = nil
118-
p1 := obj.Appendp(p, newprog)
119-
p1.As = AADDV
120-
p1.From.Type = obj.TYPE_CONST
121-
p1.From.Offset = offset
122-
p1.To.Type = obj.TYPE_REG
123-
p1.To.Reg = REGTMP
124-
p2 := obj.Appendp(p1, newprog)
125-
p2.As = AJAL
126-
p2.To.Type = obj.TYPE_MEM
127-
p2.To.Reg = REGTMP
128-
}
129-
13092
// We only care about global data: NAME_EXTERN means a global
13193
// symbol in the Go sense, and p.Sym.Local is true for a few
13294
// internally defined symbols.
@@ -256,9 +218,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
256218
}
257219
}
258220

259-
case AJAL,
260-
obj.ADUFFZERO,
261-
obj.ADUFFCOPY:
221+
case AJAL:
262222
c.cursym.Func().Text.Mark &^= LEAF
263223
fallthrough
264224

0 commit comments

Comments
 (0)