]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/loong64: optimize the code logic of jump instructions
authorlimeidan <limeidan@loongson.cn>
Wed, 17 Jan 2024 09:49:37 +0000 (17:49 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Thu, 1 Aug 2024 00:51:41 +0000 (00:51 +0000)
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
Reviewed-by: Qiqi Huang <huangqiqi@loongson.cn>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Meidan Li <limeidan@loongson.cn>
src/cmd/internal/obj/loong64/asm.go

index 2f2caa8b6d1de47a7e05ed869c58baefd0e8868d..1e4dd111f15dc87d2e91e4b73407ee8cd67f4a9a 100644 (file)
@@ -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,