]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: make Afunclit the default/only behavior for Naddr
authorMatthew Dempsky <mdempsky@google.com>
Thu, 29 Sep 2016 22:43:10 +0000 (15:43 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 29 Sep 2016 23:13:18 +0000 (23:13 +0000)
Naddr used to translate PFUNC Nodes into references to the function
literal wrapper, and then Afunclit could be used to rewrite it to
reference the function text itself. But now everywhere we use Naddr on
PFUNC Nodes, we immediately call Afunclit anyway. So just merge
Afunclit's behavior into Naddr.

Passes toolstash/buildall.

Change-Id: If2ca6d7f314c1a0711df9b8209aace16ba4b8bc0
Reviewed-on: https://go-review.googlesource.com/30073
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/arm/ggen.go
src/cmd/compile/internal/arm64/ggen.go
src/cmd/compile/internal/gc/gsubr.go
src/cmd/compile/internal/gc/pgen.go
src/cmd/compile/internal/mips64/ggen.go
src/cmd/compile/internal/ppc64/ggen.go

index 07278d15bdeb99555054964fdeb531e7c86f025c..6dce0a4e80678e0b9b6ea2de5847bea25c9ed045 100644 (file)
@@ -74,9 +74,7 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64, r0 *uint32) *obj.Pr
                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)
index 05ba855440c90cef84241b9991d7104964ec03f3..16813b642ab4bcb5922ec529f03e39d10c0c29d4 100644 (file)
@@ -81,9 +81,7 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64) *obj.Prog {
                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)
index cd9c7e974e157bb6abea7e018f66950d0f5d2c8c..10e94754bea8e8c3854c7178d3f6deb7bbfba722 100644 (file)
@@ -52,13 +52,6 @@ func Prog(as obj.As) *obj.Prog {
        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
@@ -210,7 +203,7 @@ func Naddr(a *obj.Addr, n *Node) {
                default:
                        Fatalf("naddr: ONAME class %v %d\n", n.Sym, n.Class)
 
-               case PEXTERN:
+               case PEXTERN, PFUNC:
                        a.Name = obj.NAME_EXTERN
 
                case PAUTO:
@@ -218,11 +211,6 @@ func Naddr(a *obj.Addr, n *Node) {
 
                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)
index a43ec32176d6c7e012d61369ac5ba0ab27b026c8..c7530ab7f22a101daf641c722b4662a7f5f4ad5d 100644 (file)
@@ -383,7 +383,6 @@ func compile(fn *Node) {
                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
index d1b5a118dce689be1f42a12c233a77d49e35aa6b..06f347488563d623d22ec50c05079fa704e25e3a 100644 (file)
@@ -74,9 +74,7 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64) *obj.Prog {
                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
index 9e51c28735ddbd08eae3668bd941afb3bf9109f4..b3ce96856721949f14e25151ba3631654c5000ff 100644 (file)
@@ -71,9 +71,7 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64) *obj.Prog {
                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)