|
5 | 5 | package mips
|
6 | 6 |
|
7 | 7 | import (
|
8 |
| - "cmd/compile/internal/base" |
9 | 8 | "cmd/compile/internal/objw"
|
10 | 9 | "cmd/compile/internal/types"
|
11 | 10 | "cmd/internal/obj"
|
12 | 11 | "cmd/internal/obj/mips"
|
13 | 12 | )
|
14 | 13 |
|
15 |
| -// TODO(mips): implement DUFFZERO |
16 | 14 | func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, _ *uint32) *obj.Prog {
|
17 |
| - |
18 |
| - if cnt == 0 { |
19 |
| - return p |
| 15 | + if cnt%int64(types.PtrSize) != 0 { |
| 16 | + panic("zeroed region not aligned") |
20 | 17 | }
|
21 |
| - if cnt < int64(4*types.PtrSize) { |
22 |
| - for i := int64(0); i < cnt; i += int64(types.PtrSize) { |
23 |
| - p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGSP, base.Ctxt.Arch.FixedFrameSize+off+i) |
24 |
| - } |
25 |
| - } else { |
26 |
| - //fmt.Printf("zerorange frame:%v, lo: %v, hi:%v \n", frame ,lo, hi) |
27 |
| - // ADD $(FIXED_FRAME+frame+lo-4), SP, r1 |
28 |
| - // ADD $cnt, r1, r2 |
29 |
| - // loop: |
30 |
| - // MOVW R0, (Widthptr)r1 |
31 |
| - // ADD $Widthptr, r1 |
32 |
| - // BNE r1, r2, loop |
33 |
| - p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, base.Ctxt.Arch.FixedFrameSize+off-4, obj.TYPE_REG, mips.REGRT1, 0) |
34 |
| - p.Reg = mips.REGSP |
35 |
| - p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, cnt, obj.TYPE_REG, mips.REGRT2, 0) |
36 |
| - p.Reg = mips.REGRT1 |
37 |
| - p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGRT1, int64(types.PtrSize)) |
38 |
| - p1 := p |
39 |
| - p = pp.Append(p, mips.AADD, obj.TYPE_CONST, 0, int64(types.PtrSize), obj.TYPE_REG, mips.REGRT1, 0) |
40 |
| - p = pp.Append(p, mips.ABNE, obj.TYPE_REG, mips.REGRT1, 0, obj.TYPE_BRANCH, 0, 0) |
41 |
| - p.Reg = mips.REGRT2 |
42 |
| - p.To.SetTarget(p1) |
| 18 | + |
| 19 | + for cnt != 0 { |
| 20 | + p = pp.Append(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGSP, off) |
| 21 | + cnt -= int64(types.PtrSize) |
| 22 | + off += int64(types.PtrSize) |
43 | 23 | }
|
44 | 24 |
|
45 | 25 | return p
|
|
0 commit comments