src/cmd/compile/internal/ssa/rewrite.go | 2 +- src/cmd/compile/internal/ssa/rewrite_test.go | 1 + diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index f5d1a7889fb19f6fb4bdbe64f1df4d337bf2f079..9e5ef68b1e9551664405154f268561aa2343ae37 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -1469,7 +1469,7 @@ mask := mergePPC64RShiftMask(m, s, 32) 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 6fe429e85a67f3c509f1cdc5dafdbfdb55027882..64d128b8a4d7cd36e1a0ce93412b85b89fe43f5d 100644 --- a/src/cmd/compile/internal/ssa/rewrite_test.go +++ b/src/cmd/compile/internal/ssa/rewrite_test.go @@ -205,6 +205,7 @@ {0x0F0000FF, 4, false, 0, 0}, {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)