aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorMeng Zhuo <mengzhuo@iscas.ac.cn>2025-09-03 16:43:54 +0800
committerMeng Zhuo <mengzhuo@iscas.ac.cn>2025-09-09 19:42:25 -0700
commitb9a4a09b0fbb54b533f847c784c807db95f68d3b (patch)
tree2bb408cff83480987328257afb8f91364f486369 /src/cmd/internal/obj
parent4dac9e093ff520af08f0b83f53b4fabac8db5321 (diff)
downloadgo-b9a4a09b0fbb54b533f847c784c807db95f68d3b.tar.xz
runtime: remove duff support for riscv64
Change-Id: I987d9f49fbd2650eef4224f72271bf752c54d39c Reviewed-on: https://go-review.googlesource.com/c/go/+/700538 Reviewed-by: Mark Freeman <markfreeman@google.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Mark Ryan <markdryan@rivosinc.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/riscv/obj.go44
1 files changed, 3 insertions, 41 deletions
diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go
index 44edb8d841..40f143be5c 100644
--- a/src/cmd/internal/obj/riscv/obj.go
+++ b/src/cmd/internal/obj/riscv/obj.go
@@ -37,7 +37,7 @@ func buildop(ctxt *obj.Link) {}
func jalToSym(ctxt *obj.Link, p *obj.Prog, lr int16) {
switch p.As {
- case obj.ACALL, obj.AJMP, obj.ARET, obj.ADUFFZERO, obj.ADUFFCOPY:
+ case obj.ACALL, obj.AJMP, obj.ARET:
default:
ctxt.Diag("unexpected Prog in jalToSym: %v", p)
return
@@ -162,42 +162,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 rewriteToUseGot(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
- if p.As == obj.ADUFFCOPY || p.As == obj.ADUFFZERO {
- // ADUFFxxx $offset
- // becomes
- // MOV runtime.duffxxx@GOT, REG_TMP
- // ADD $offset, REG_TMP
- // CALL REG_TMP
- var sym *obj.LSym
- if p.As == obj.ADUFFCOPY {
- sym = ctxt.LookupABI("runtime.duffcopy", obj.ABIInternal)
- } else {
- sym = ctxt.LookupABI("runtime.duffzero", obj.ABIInternal)
- }
- offset := p.To.Offset
- p.As = AMOV
- 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 = REG_TMP
- p.To.Name = obj.NAME_NONE
- p.To.Offset = 0
- p.To.Sym = nil
-
- p1 := obj.Appendp(p, newprog)
- p1.As = AADD
- p1.From.Type = obj.TYPE_CONST
- p1.From.Offset = offset
- p1.To.Type = obj.TYPE_REG
- p1.To.Reg = REG_TMP
-
- p2 := obj.Appendp(p1, newprog)
- p2.As = obj.ACALL
- p2.To.Type = obj.TYPE_REG
- p2.To.Reg = REG_TMP
- }
-
// 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 internally
// defined symbols.
@@ -407,7 +371,7 @@ func containsCall(sym *obj.LSym) bool {
// CALLs are CALL or JAL(R) with link register LR.
for p := sym.Func().Text; p != nil; p = p.Link {
switch p.As {
- case obj.ACALL, obj.ADUFFZERO, obj.ADUFFCOPY:
+ case obj.ACALL:
return true
case AJAL, AJALR:
if p.From.Type == obj.TYPE_REG && p.From.Reg == REG_LR {
@@ -586,7 +550,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
p.From.Reg = REG_SP
}
- case obj.ACALL, obj.ADUFFZERO, obj.ADUFFCOPY:
+ case obj.ACALL:
switch p.To.Type {
case obj.TYPE_MEM:
jalToSym(ctxt, p, REG_LR)
@@ -2634,8 +2598,6 @@ var instructions = [ALAST & obj.AMask]instructionData{
obj.APCDATA: {enc: pseudoOpEncoding},
obj.ATEXT: {enc: pseudoOpEncoding},
obj.ANOP: {enc: pseudoOpEncoding},
- obj.ADUFFZERO: {enc: pseudoOpEncoding},
- obj.ADUFFCOPY: {enc: pseudoOpEncoding},
obj.APCALIGN: {enc: pseudoOpEncoding},
}