diff options
-rw-r--r-- | src/cmd/compile/internal/ssa/rewrite.go | 2 | ||||
-rw-r--r-- | src/cmd/compile/internal/ssa/rewrite_test.go | 1 |
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) |