mirror of https://github.com/golang/go.git
cmd/internal/obj/loong64: optimize the code logic of jump instructions
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>
This commit is contained in:
parent
864513dda9
commit
01ab9a016a
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue