diff options
Diffstat (limited to 'deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc')
-rw-r--r-- | deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc index 9e00063487..62a055e2a2 100644 --- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc +++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc @@ -170,8 +170,11 @@ void RegExpMacroAssemblerARM64::AdvanceRegister(int reg, int by) { } case CACHED_MSW: { Register to_advance = GetCachedRegister(reg); - __ Add(to_advance, to_advance, - static_cast<int64_t>(by) << kWRegSizeInBits); + // Sign-extend to int64, shift as uint64, cast back to int64. + __ Add( + to_advance, to_advance, + static_cast<int64_t>(static_cast<uint64_t>(static_cast<int64_t>(by)) + << kWRegSizeInBits)); break; } default: |