summaryrefslogtreecommitdiff
path: root/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc
diff options
context:
space:
mode:
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.cc7
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: