1
0
mirror of https://github.com/golang/go synced 2024-11-22 14:54:46 -07:00

cmd/internal/obj/loong64: optimize instruction implementation

The plan9 instructions ASLLV and -ASLLV are translated into the same assembly
instructions, so -ASLLV can be removed and replaced with ASLLV in the
corresponding position.

ASRLV and -ASRLV have the same reason as the above two instructions.

Change-Id: I4bd79ca7bb070f7a924a0205ef2f19cf2b9ae2c9
Reviewed-on: https://go-review.googlesource.com/c/go/+/565623
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Qiqi Huang <huangqiqi@loongson.cn>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
This commit is contained in:
limeidan 2024-01-11 15:12:50 +08:00 committed by Gopher Robot
parent 5ca7d4645f
commit b53809d75d

View File

@ -1453,8 +1453,8 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
case 14: // movwu r,r
// NOTE: this case does not use REGTMP. If it ever does,
// remove the NOTUSETMP flag in optab.
o1 = OP_16IRR(c.opirr(-ASLLV), uint32(32)&0x3f, uint32(p.From.Reg), uint32(p.To.Reg))
o2 = OP_16IRR(c.opirr(-ASRLV), uint32(32)&0x3f, uint32(p.To.Reg), uint32(p.To.Reg))
o1 = OP_16IRR(c.opirr(ASLLV), uint32(32)&0x3f, uint32(p.From.Reg), uint32(p.To.Reg))
o2 = OP_16IRR(c.opirr(ASRLV), uint32(32)&0x3f, uint32(p.To.Reg), uint32(p.To.Reg))
case 15: // teq $c r,r
v := c.regoff(&p.From)
@ -2169,17 +2169,13 @@ func (c *ctxt0) opirr(a obj.As) uint32 {
case -AMOVD:
return 0x0ae << 22
case ASLLV,
-ASLLV:
case ASLLV:
return 0x0041 << 16
case ASRLV,
-ASRLV:
case ASRLV:
return 0x0045 << 16
case ASRAV,
-ASRAV:
case ASRAV:
return 0x0049 << 16
case AROTRV,
-AROTRV:
case AROTRV:
return 0x004d << 16
case -ALL:
return 0x020 << 24