private static void zeroAuto(ref gc.Progs pp, ref gc.Node n) { // Note: this code must not clobber any registers. var sym = n.Sym.Linksym(); var size = n.Type.Size(); var p = pp.Prog(arm.AMOVW); p.From.Type = obj.TYPE_CONST; p.From.Offset = 0L; p.To.Type = obj.TYPE_REG; p.To.Reg = arm.REGTMP; { var i = int64(0L); while (i < size) { p = pp.Prog(arm.AMOVW); p.From.Type = obj.TYPE_REG; p.From.Reg = arm.REGTMP; p.To.Type = obj.TYPE_MEM; p.To.Name = obj.NAME_AUTO; p.To.Reg = arm.REGSP; p.To.Offset = n.Xoffset + i; p.To.Sym = sym; i += 4L; } } }
private static void zeroAuto(ref gc.Progs pp, ref gc.Node n) { // Note: this code must not clobber any registers. var op = x86.AMOVQ; if (gc.Widthptr == 4L) { op = x86.AMOVL; } var sym = n.Sym.Linksym(); var size = n.Type.Size(); { var i = int64(0L); while (i < size) { var p = pp.Prog(op); p.From.Type = obj.TYPE_CONST; p.From.Offset = 0L; p.To.Type = obj.TYPE_MEM; p.To.Name = obj.NAME_AUTO; p.To.Reg = x86.REG_SP; p.To.Offset = n.Xoffset + i; p.To.Sym = sym; i += int64(gc.Widthptr); } } }