diff options
author | Dave Cheney <dave@cheney.net> | 2015-08-12 07:55:01 +1000 |
---|---|---|
committer | Dave Cheney <dave@cheney.net> | 2015-08-12 20:31:26 +0000 |
commit | cda1fc0071140c5eb8f71b8eef0da0a39c69b641 (patch) | |
tree | c239110cd0e1200a512b17d321754f7b6f9613db | |
parent | 58035ec8ee68b288d9a0680919e2f4e4a9f28824 (diff) | |
download | go-cda1fc0071140c5eb8f71b8eef0da0a39c69b641.tar.gz go-cda1fc0071140c5eb8f71b8eef0da0a39c69b641.zip |
cmd/compile/internal/ppc64: disable DUFFZERO
Update #12108
If DUFFZERO is used within a tail call method it will overwrite the
link register.
Change-Id: I6abd2fde0f0ad909ccd55eb119b992673a74f0e2
Reviewed-on: https://go-review.googlesource.com/13570
Reviewed-by: Russ Cox <rsc@golang.org>
-rw-r--r-- | src/cmd/compile/internal/ppc64/ggen.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/ppc64/ggen.go b/src/cmd/compile/internal/ppc64/ggen.go index 1b936b8a5f..5b282eb2f2 100644 --- a/src/cmd/compile/internal/ppc64/ggen.go +++ b/src/cmd/compile/internal/ppc64/ggen.go @@ -71,7 +71,10 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64) *obj.Prog { for i := int64(0); i < cnt; i += int64(gc.Widthptr) { p = appendpp(p, ppc64.AMOVD, obj.TYPE_REG, ppc64.REGZERO, 0, obj.TYPE_MEM, ppc64.REGSP, 8+frame+lo+i) } - } else if cnt <= int64(128*gc.Widthptr) { + // TODO(dfc): https://golang.org/issue/12108 + // If DUFFZERO is used inside a tail call (see genwrapper) it will + // overwrite the link register. + } else if false && cnt <= int64(128*gc.Widthptr) { p = appendpp(p, ppc64.AADD, obj.TYPE_CONST, 0, 8+frame+lo-8, obj.TYPE_REG, ppc64.REGRT1, 0) p.Reg = ppc64.REGSP p = appendpp(p, obj.ADUFFZERO, obj.TYPE_NONE, 0, 0, obj.TYPE_MEM, 0, 0) @@ -442,7 +445,10 @@ func clearfat(nl *gc.Node) { // The loop leaves R3 on the last zeroed dword boff = 8 - } else if q >= 4 { + // TODO(dfc): https://golang.org/issue/12108 + // If DUFFZERO is used inside a tail call (see genwrapper) it will + // overwrite the link register. + } else if false && q >= 4 { p := gins(ppc64.ASUB, nil, &dst) p.From.Type = obj.TYPE_CONST p.From.Offset = 8 |