Skip to content

Commit 77643dc

Browse files
committed
cmd/compile: simplify zerorange on riscv64
Drop large zeroing cases, part of removing duff support. Change-Id: Ia2936f649901886f3eb1d7ba1f90e3bf40ea2dee Reviewed-on: https://go-review.googlesource.com/c/go/+/697615 Reviewed-by: Keith Randall <[email protected]> Reviewed-by: Julian Zhu <[email protected]> Reviewed-by: Mark Ryan <[email protected]> Reviewed-by: Keith Randall <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Mark Freeman <[email protected]> Reviewed-by: Joel Sing <[email protected]>
1 parent e6605a1 commit 77643dc

File tree

1 file changed

+7
-35
lines changed
  • src/cmd/compile/internal/riscv64

1 file changed

+7
-35
lines changed

src/cmd/compile/internal/riscv64/ggen.go

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,26 @@ package riscv64
66

77
import (
88
"cmd/compile/internal/base"
9-
"cmd/compile/internal/ir"
109
"cmd/compile/internal/objw"
1110
"cmd/compile/internal/types"
1211
"cmd/internal/obj"
1312
"cmd/internal/obj/riscv"
1413
)
1514

1615
func zeroRange(pp *objw.Progs, p *obj.Prog, off, cnt int64, _ *uint32) *obj.Prog {
17-
if cnt == 0 {
18-
return p
16+
17+
if cnt%int64(types.PtrSize) != 0 {
18+
panic("zeroed region not aligned")
1919
}
2020

2121
// Adjust the frame to account for LR.
2222
off += base.Ctxt.Arch.FixedFrameSize
2323

24-
if cnt < int64(4*types.PtrSize) {
25-
for i := int64(0); i < cnt; i += int64(types.PtrSize) {
26-
p = pp.Append(p, riscv.AMOV, obj.TYPE_REG, riscv.REG_ZERO, 0, obj.TYPE_MEM, riscv.REG_SP, off+i)
27-
}
28-
return p
29-
}
30-
31-
if cnt <= int64(128*types.PtrSize) {
32-
p = pp.Append(p, riscv.AADDI, obj.TYPE_CONST, 0, off, obj.TYPE_REG, riscv.REG_X25, 0)
33-
p.Reg = riscv.REG_SP
34-
p = pp.Append(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0)
35-
p.To.Name = obj.NAME_EXTERN
36-
p.To.Sym = ir.Syms.Duffzero
37-
p.To.Offset = 8 * (128 - cnt/int64(types.PtrSize))
38-
return p
24+
for cnt != 0 {
25+
p = pp.Append(p, riscv.AMOV, obj.TYPE_REG, riscv.REG_ZERO, 0, obj.TYPE_MEM, riscv.REG_SP, off)
26+
cnt -= int64(types.PtrSize)
27+
off += int64(types.PtrSize)
3928
}
4029

41-
// Loop, zeroing pointer width bytes at a time.
42-
// ADD $(off), SP, T0
43-
// ADD $(cnt), T0, T1
44-
// loop:
45-
// MOV ZERO, (T0)
46-
// ADD $Widthptr, T0
47-
// BNE T0, T1, loop
48-
p = pp.Append(p, riscv.AADD, obj.TYPE_CONST, 0, off, obj.TYPE_REG, riscv.REG_T0, 0)
49-
p.Reg = riscv.REG_SP
50-
p = pp.Append(p, riscv.AADD, obj.TYPE_CONST, 0, cnt, obj.TYPE_REG, riscv.REG_T1, 0)
51-
p.Reg = riscv.REG_T0
52-
p = pp.Append(p, riscv.AMOV, obj.TYPE_REG, riscv.REG_ZERO, 0, obj.TYPE_MEM, riscv.REG_T0, 0)
53-
loop := p
54-
p = pp.Append(p, riscv.AADD, obj.TYPE_CONST, 0, int64(types.PtrSize), obj.TYPE_REG, riscv.REG_T0, 0)
55-
p = pp.Append(p, riscv.ABNE, obj.TYPE_REG, riscv.REG_T0, 0, obj.TYPE_BRANCH, 0, 0)
56-
p.Reg = riscv.REG_T1
57-
p.To.SetTarget(loop)
5830
return p
5931
}

0 commit comments

Comments
 (0)