Source file src/pkg/cmd/compile/internal/mips/ggen.go
1
2
3
4
5 package mips
6
7 import (
8 "cmd/compile/internal/gc"
9 "cmd/internal/obj"
10 "cmd/internal/obj/mips"
11 )
12
13
14 func zerorange(pp *gc.Progs, p *obj.Prog, off, cnt int64, _ *uint32) *obj.Prog {
15
16 if cnt == 0 {
17 return p
18 }
19 if cnt < int64(4*gc.Widthptr) {
20 for i := int64(0); i < cnt; i += int64(gc.Widthptr) {
21 p = pp.Appendpp(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGSP, gc.Ctxt.FixedFrameSize()+off+i)
22 }
23 } else {
24
25
26
27
28
29
30
31 p = pp.Appendpp(p, mips.AADD, obj.TYPE_CONST, 0, gc.Ctxt.FixedFrameSize()+off-4, obj.TYPE_REG, mips.REGRT1, 0)
32 p.Reg = mips.REGSP
33 p = pp.Appendpp(p, mips.AADD, obj.TYPE_CONST, 0, cnt, obj.TYPE_REG, mips.REGRT2, 0)
34 p.Reg = mips.REGRT1
35 p = pp.Appendpp(p, mips.AMOVW, obj.TYPE_REG, mips.REGZERO, 0, obj.TYPE_MEM, mips.REGRT1, int64(gc.Widthptr))
36 p1 := p
37 p = pp.Appendpp(p, mips.AADD, obj.TYPE_CONST, 0, int64(gc.Widthptr), obj.TYPE_REG, mips.REGRT1, 0)
38 p = pp.Appendpp(p, mips.ABNE, obj.TYPE_REG, mips.REGRT1, 0, obj.TYPE_BRANCH, 0, 0)
39 p.Reg = mips.REGRT2
40 gc.Patch(p, p1)
41 }
42
43 return p
44 }
45
46 func zeroAuto(pp *gc.Progs, n *gc.Node) {
47
48 sym := n.Sym.Linksym()
49 size := n.Type.Size()
50 for i := int64(0); i < size; i += 4 {
51 p := pp.Prog(mips.AMOVW)
52 p.From.Type = obj.TYPE_REG
53 p.From.Reg = mips.REGZERO
54 p.To.Type = obj.TYPE_MEM
55 p.To.Name = obj.NAME_AUTO
56 p.To.Reg = mips.REGSP
57 p.To.Offset = n.Xoffset + i
58 p.To.Sym = sym
59 }
60 }
61
62 func ginsnop(pp *gc.Progs) *obj.Prog {
63 p := pp.Prog(mips.ANOR)
64 p.From.Type = obj.TYPE_REG
65 p.From.Reg = mips.REG_R0
66 p.To.Type = obj.TYPE_REG
67 p.To.Reg = mips.REG_R0
68 return p
69 }
70
View as plain text