aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul E. Murphy <murp@ibm.com>2021-04-15 13:41:01 -0500
committerCarlos Amedee <carlos@golang.org>2021-05-04 15:18:16 +0000
commit7e709791c22409826cb267fced81f210f6aaaf09 (patch)
treecec405d03287b3a7e89b6202acf6525278a944f2
parentea0537f2fc66d1f2616c24dcbf08da197cb8205d (diff)
downloadgo-7e709791c22409826cb267fced81f210f6aaaf09.tar.gz
go-7e709791c22409826cb267fced81f210f6aaaf09.zip
[release-branch.go1.16] cmd/compile: fix ANDI/SRWI merge on ppc64
The shift amount should be masked to avoid rotation values beyond the numer of bits. In this case, if the shift amount is 0, it should rotate 0, not 32. Fixes #45636 Change-Id: I1e764497a39d0ec128e29af42352b70c70b2ecc5 Reviewed-on: https://go-review.googlesource.com/c/go/+/310569 Run-TryBot: Paul Murphy <murp@ibm.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Carlos Eduardo Seo <carlos.seo@linaro.org> Trust: Carlos Eduardo Seo <carlos.seo@linaro.org> (cherry picked from commit c8fb0ec5a005289e9dd890b746e543b38bbd9528) Reviewed-on: https://go-review.googlesource.com/c/go/+/311378 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Trust: Lynn Boger <laboger@linux.vnet.ibm.com>
-rw-r--r--src/cmd/compile/internal/ssa/rewrite.go2
-rw-r--r--src/cmd/compile/internal/ssa/rewrite_test.go1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go
index f5d1a7889f..9e5ef68b1e 100644
--- a/src/cmd/compile/internal/ssa/rewrite.go
+++ b/src/cmd/compile/internal/ssa/rewrite.go
@@ -1469,7 +1469,7 @@ func mergePPC64AndSrwi(m, s int64) int64 {
if !isPPC64WordRotateMask(mask) {
return 0
}
- return encodePPC64RotateMask(32-s, mask, 32)
+ return encodePPC64RotateMask((32-s)&31, mask, 32)
}
// Test if a shift right feeding into a CLRLSLDI can be merged into RLWINM.
diff --git a/src/cmd/compile/internal/ssa/rewrite_test.go b/src/cmd/compile/internal/ssa/rewrite_test.go
index 6fe429e85a..64d128b8a4 100644
--- a/src/cmd/compile/internal/ssa/rewrite_test.go
+++ b/src/cmd/compile/internal/ssa/rewrite_test.go
@@ -205,6 +205,7 @@ func TestMergePPC64AndSrwi(t *testing.T) {
{0x00000000, 4, false, 0, 0},
{0xF0000000, 4, false, 0, 0},
{0xF0000000, 32, false, 0, 0},
+ {0xFFFFFFFF, 0, true, 0, 0xFFFFFFFF},
}
for i, v := range tests {
result := mergePPC64AndSrwi(v.and, v.srw)