From 01ab9a016afe7239ed7b43cdd820103ec91aba09 Mon Sep 17 00:00:00 2001 From: limeidan Date: Wed, 17 Jan 2024 17:49:37 +0800 Subject: [PATCH] cmd/internal/obj/loong64: optimize the code logic of jump instructions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If p.To.Sym is nil, that means we can get the target offset from p.To.Target().pc - c.pc,only when p.To.Sym is not nil, we need relocation to get the true address of target symbol. Change-Id: Ied52f675c6aa6e8fb8d972b7699f5cadd1ecb268 Reviewed-on: https://go-review.googlesource.com/c/go/+/565627 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: sophie zhao Reviewed-by: Qiqi Huang Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Reviewed-by: Meidan Li --- src/cmd/internal/obj/loong64/asm.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 2f2caa8b6d..1e4dd111f1 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1401,19 +1401,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { v = int32(p.To.Target().Pc-p.Pc) >> 2 } o1 = OP_B_BL(c.opirr(p.As), uint32(v)) - if p.To.Sym == nil { - if p.As == AJMP { - break - } - p.To.Sym = c.cursym.Func().Text.From.Sym - p.To.Offset = p.To.Target().Pc + if p.To.Sym != nil { + rel := obj.Addrel(c.cursym) + rel.Off = int32(c.pc) + rel.Siz = 4 + rel.Sym = p.To.Sym + rel.Add = p.To.Offset + rel.Type = objabi.R_CALLLOONG64 } - rel := obj.Addrel(c.cursym) - rel.Off = int32(c.pc) - rel.Siz = 4 - rel.Sym = p.To.Sym - rel.Add = p.To.Offset - rel.Type = objabi.R_CALLLOONG64 case 12: // movbs r,r // NOTE: this case does not use REGTMP. If it ever does, -- 2.48.1