From: Michael Hudson-Doyle Date: Mon, 5 Oct 2015 03:07:59 +0000 (+1300) Subject: cmd/compile: do not let regopt use REGTMP on ppc64 X-Git-Tag: go1.6beta1~913 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0357c38adfd5d368390d82a2ab5b32748e4bb549;p=gostls13.git cmd/compile: do not let regopt use REGTMP on ppc64 ppc64 codegen assumes that it is OK to stomp on r31 at any time, but it is not excluded from the set of registers that regopt is allowed to use. Fixes #12597 Change-Id: I29c7655e32abd22f3c21d88427b73e4fca055233 Reviewed-on: https://go-review.googlesource.com/15245 Reviewed-by: Minux Ma --- diff --git a/src/cmd/compile/internal/ppc64/reg.go b/src/cmd/compile/internal/ppc64/reg.go index fa1cb71975..a3018362f6 100644 --- a/src/cmd/compile/internal/ppc64/reg.go +++ b/src/cmd/compile/internal/ppc64/reg.go @@ -111,7 +111,7 @@ func regnames(n *int) []string { func excludedregs() uint64 { // Exclude registers with fixed functions - regbits := uint64(1<<0 | RtoB(ppc64.REGSP) | RtoB(ppc64.REGG) | RtoB(ppc64.REGTLS)) + regbits := uint64(1<<0 | RtoB(ppc64.REGSP) | RtoB(ppc64.REGG) | RtoB(ppc64.REGTLS) | RtoB(ppc64.REGTMP)) // Also exclude floating point registers with fixed constants regbits |= RtoB(ppc64.REG_F27) | RtoB(ppc64.REG_F28) | RtoB(ppc64.REG_F29) | RtoB(ppc64.REG_F30) | RtoB(ppc64.REG_F31)