aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>2025-05-19 17:02:48 +0800
committerabner chenc <chenguoqi@loongson.cn>2025-05-20 20:24:09 -0700
commitd37a1bdd48458e48de13cdc320c8ddf9b021e356 (patch)
treed357d9b2df8dc154e208d92ec0f91fda02d673ea /src/cmd
parent74304cda29381fd5ba07a4090b701f8a670896c6 (diff)
downloadgo-d37a1bdd48458e48de13cdc320c8ddf9b021e356.tar.xz
cmd/compile: fix the implementation of NORconst on loong64
In the loong64 instruction set, there is no NORI instruction, so the immediate value in NORconst need to be stored in register and then use the three-register NOR instruction. Change-Id: I5ef697450619317218cb3ef47fc07e238bdc2139 Reviewed-on: https://go-review.googlesource.com/c/go/+/673836 Reviewed-by: abner chenc <chenguoqi@loongson.cn> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/loong64/ssa.go18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go
index d60aef165c..03d7a1082a 100644
--- a/src/cmd/compile/internal/loong64/ssa.go
+++ b/src/cmd/compile/internal/loong64/ssa.go
@@ -276,7 +276,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
ssa.OpLOONG64ANDconst,
ssa.OpLOONG64ORconst,
ssa.OpLOONG64XORconst,
- ssa.OpLOONG64NORconst,
ssa.OpLOONG64SLLconst,
ssa.OpLOONG64SLLVconst,
ssa.OpLOONG64SRLconst,
@@ -293,6 +292,23 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
p.Reg = v.Args[0].Reg()
p.To.Type = obj.TYPE_REG
p.To.Reg = v.Reg()
+
+ case ssa.OpLOONG64NORconst:
+ // MOVV $const, Rtmp
+ // NOR Rtmp, Rarg0, Rout
+ p := s.Prog(loong64.AMOVV)
+ p.From.Type = obj.TYPE_CONST
+ p.From.Offset = v.AuxInt
+ p.To.Type = obj.TYPE_REG
+ p.To.Reg = loong64.REGTMP
+
+ p2 := s.Prog(v.Op.Asm())
+ p2.From.Type = obj.TYPE_REG
+ p2.From.Reg = loong64.REGTMP
+ p2.Reg = v.Args[0].Reg()
+ p2.To.Type = obj.TYPE_REG
+ p2.To.Reg = v.Reg()
+
case ssa.OpLOONG64MOVVconst:
r := v.Reg()
p := s.Prog(v.Op.Asm())