]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: simplify zerorange on mips
authorJulian Zhu <jz531210@gmail.com>
Thu, 4 Sep 2025 17:56:26 +0000 (01:56 +0800)
committerGopher Robot <gobot@golang.org>
Mon, 8 Sep 2025 20:32:51 +0000 (13:32 -0700)
Change-Id: I9feffa3906f1e1e9fd54f24113130322411cc9d4
Reviewed-on: https://go-review.googlesource.com/c/go/+/701155
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/compile/internal/mips/ggen.go

index e235ef95676f4794e529c6962425954c697a0ddb..023f4d958e3536f2580fd8f6100182678b5ca848 100644 (file)
@@ -5,41 +5,21 @@
 package mips
 
 import (
-       "cmd/compile/internal/base"
        "cmd/compile/internal/objw"
        "cmd/compile/internal/types"
        "cmd/internal/obj"
        "cmd/internal/obj/mips"
 )
 
-// TODO(mips): implement DUFFZERO
 func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, _ *uint32) *obj.Prog {
-
-       if cnt == 0 {
-               return p
+       if cnt%int64(types.PtrSize) != 0 {
+               panic("zeroed region not aligned")
        }
-       if cnt < int64(4*types.PtrSize) {
-               for i := int64(0); i < cnt; i += int64(types.PtrSize) {
-                       p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGSP, base.Ctxt.Arch.FixedFrameSize+off+i)
-               }
-       } else {
-               //fmt.Printf("zerorange frame:%v, lo: %v, hi:%v \n", frame ,lo, hi)
-               //      ADD     $(FIXED_FRAME+frame+lo-4), SP, r1
-               //      ADD     $cnt, r1, r2
-               // loop:
-               //      MOVW    R0, (Widthptr)r1
-               //      ADD     $Widthptr, r1
-               //      BNE             r1, r2, loop
-               p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, base.Ctxt.Arch.FixedFrameSize+off-4, obj.TYPE_REG, mips.REGRT1, 0)
-               p.Reg = mips.REGSP
-               p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, cnt, obj.TYPE_REG, mips.REGRT2, 0)
-               p.Reg = mips.REGRT1
-               p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGRT1, int64(types.PtrSize))
-               p1 := p
-               p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, int64(types.PtrSize), obj.TYPE_REG, mips.REGRT1, 0)
-               p = pp.Append(p, mips.ABNE, obj.TYPE_REG, mips.REGRT1, 0, obj.TYPE_BRANCH, 0, 0)
-               p.Reg = mips.REGRT2
-               p.To.SetTarget(p1)
+
+       for cnt != 0 {
+               p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGSP, off)
+               cnt -= int64(types.PtrSize)
+               off += int64(types.PtrSize)
        }
 
        return p