p = gc.Appendpp(p, arm.AADD, obj.TYPE_CONST, 0, 4+frame+lo, obj.TYPE_REG, arm.REG_R1, 0)
p.Reg = arm.REGSP
p = gc.Appendpp(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0)
- f := gc.Sysfunc("duffzero")
- gc.Naddr(&p.To, f)
- gc.Afunclit(&p.To, f)
+ gc.Naddr(&p.To, gc.Sysfunc("duffzero"))
p.To.Offset = 4 * (128 - cnt/int64(gc.Widthptr))
} else {
p = gc.Appendpp(p, arm.AADD, obj.TYPE_CONST, 0, 4+frame+lo, obj.TYPE_REG, arm.REG_R1, 0)
p = gc.Appendpp(p, arm64.AADD, obj.TYPE_CONST, 0, 8+frame+lo-8, obj.TYPE_REG, arm64.REGRT1, 0)
p.Reg = arm64.REGRT1
p = gc.Appendpp(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0)
- f := gc.Sysfunc("duffzero")
- gc.Naddr(&p.To, f)
- gc.Afunclit(&p.To, f)
+ gc.Naddr(&p.To, gc.Sysfunc("duffzero"))
p.To.Offset = 4 * (128 - cnt/int64(gc.Widthptr))
} else {
p = gc.Appendpp(p, arm64.AMOVD, obj.TYPE_CONST, 0, 8+frame+lo-8, obj.TYPE_REG, arm64.REGTMP, 0)
return p
}
-func Afunclit(a *obj.Addr, n *Node) {
- if a.Type == obj.TYPE_ADDR && a.Name == obj.NAME_EXTERN {
- a.Type = obj.TYPE_MEM
- a.Sym = Linksym(n.Sym)
- }
-}
-
func Clearp(p *obj.Prog) {
obj.Nopout(p)
p.As = obj.AEND
default:
Fatalf("naddr: ONAME class %v %d\n", n.Sym, n.Class)
- case PEXTERN:
+ case PEXTERN, PFUNC:
a.Name = obj.NAME_EXTERN
case PAUTO:
case PPARAM, PPARAMOUT:
a.Name = obj.NAME_PARAM
-
- case PFUNC:
- a.Name = obj.NAME_EXTERN
- a.Type = obj.TYPE_ADDR
- s = funcsym(s)
}
a.Sym = Linksym(s)
nam = nil
}
ptxt := Gins(obj.ATEXT, nam, &nod1)
- Afunclit(&ptxt.From, Curfn.Func.Nname)
ptxt.From3 = new(obj.Addr)
if fn.Func.Dupok {
ptxt.From3.Offset |= obj.DUPOK
p = gc.Appendpp(p, mips.AADDV, obj.TYPE_CONST, 0, 8+frame+lo-8, obj.TYPE_REG, mips.REGRT1, 0)
p.Reg = mips.REGSP
p = gc.Appendpp(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0)
- f := gc.Sysfunc("duffzero")
- gc.Naddr(&p.To, f)
- gc.Afunclit(&p.To, f)
+ gc.Naddr(&p.To, gc.Sysfunc("duffzero"))
p.To.Offset = 8 * (128 - cnt/int64(gc.Widthptr))
} else {
// ADDV $(8+frame+lo-8), SP, r1
p = gc.Appendpp(p, ppc64.AADD, obj.TYPE_CONST, 0, gc.Ctxt.FixedFrameSize()+frame+lo-8, obj.TYPE_REG, ppc64.REGRT1, 0)
p.Reg = ppc64.REGSP
p = gc.Appendpp(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0)
- f := gc.Sysfunc("duffzero")
- gc.Naddr(&p.To, f)
- gc.Afunclit(&p.To, f)
+ gc.Naddr(&p.To, gc.Sysfunc("duffzero"))
p.To.Offset = 4 * (128 - cnt/int64(gc.Widthptr))
} else {
p = gc.Appendpp(p, ppc64.AMOVD, obj.TYPE_CONST, 0, gc.Ctxt.FixedFrameSize()+frame+lo-8, obj.TYPE_REG, ppc64.REGTMP, 0)