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.cc32
1 files changed, 16 insertions, 16 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 56658819b1..43a6bdf912 100644
--- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc
+++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc
@@ -120,10 +120,14 @@ RegExpMacroAssemblerARM64::RegExpMacroAssemblerARM64(Isolate* isolate,
success_label_(),
backtrack_label_(),
exit_label_() {
+ masm_->set_root_array_available(false);
+
DCHECK_EQ(0, registers_to_save % 2);
// We can cache at most 16 W registers in x0-x7.
STATIC_ASSERT(kNumCachedRegisters <= 16);
STATIC_ASSERT((kNumCachedRegisters % 2) == 0);
+ __ CallTarget();
+
__ B(&entry_label_); // We'll write the entry code later.
__ Bind(&start_label_); // And then continue from here.
}
@@ -212,6 +216,9 @@ void RegExpMacroAssemblerARM64::Bind(Label* label) {
__ Bind(label);
}
+void RegExpMacroAssemblerARM64::BindJumpTarget(Label* label) {
+ __ BindJumpTarget(label);
+}
void RegExpMacroAssemblerARM64::CheckCharacter(uint32_t c, Label* on_equal) {
CompareAndBranchOrBacktrack(current_character(), c, eq, on_equal);
@@ -286,9 +293,8 @@ void RegExpMacroAssemblerARM64::CheckGreedyLoop(Label* on_equal) {
BranchOrBacktrack(eq, on_equal);
}
-
void RegExpMacroAssemblerARM64::CheckNotBackReferenceIgnoreCase(
- int start_reg, bool read_backward, bool unicode, Label* on_no_match) {
+ int start_reg, bool read_backward, Label* on_no_match) {
Label fallthrough;
Register capture_start_offset = w10;
@@ -402,7 +408,7 @@ void RegExpMacroAssemblerARM64::CheckNotBackReferenceIgnoreCase(
// x0: Address byte_offset1 - Address captured substring's start.
// x1: Address byte_offset2 - Address of current character position.
// w2: size_t byte_length - length of capture in bytes(!)
- // x3: Isolate* isolate or 0 if unicode flag
+ // x3: Isolate* isolate.
// Address of start of capture.
__ Add(x0, input_end(), Operand(capture_start_offset, SXTW));
@@ -414,14 +420,7 @@ void RegExpMacroAssemblerARM64::CheckNotBackReferenceIgnoreCase(
__ Sub(x1, x1, Operand(capture_length, SXTW));
}
// Isolate.
-#ifdef V8_INTL_SUPPORT
- if (unicode) {
- __ Mov(x3, Operand(0));
- } else // NOLINT
-#endif // V8_INTL_SUPPORT
- {
- __ Mov(x3, ExternalReference::isolate_address(isolate()));
- }
+ __ Mov(x3, ExternalReference::isolate_address(isolate()));
{
AllowExternalCallThatCantCauseGC scope(masm_);
@@ -737,10 +736,11 @@ Handle<HeapObject> RegExpMacroAssemblerARM64::GetCode(Handle<String> source) {
CPURegList argument_registers(x0, x5, x6, x7);
CPURegList registers_to_retain = kCalleeSaved;
- DCHECK_EQ(11, kCalleeSaved.Count());
+ registers_to_retain.Combine(fp);
registers_to_retain.Combine(lr);
- __ PushCPURegList(registers_to_retain);
+ DCHECK(registers_to_retain.IncludesAliasOf(lr));
+ __ PushCPURegList<TurboAssembler::kSignLR>(registers_to_retain);
__ PushCPURegList(argument_registers);
// Set frame pointer in place.
@@ -1035,7 +1035,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM64::GetCode(Handle<String> source) {
__ Mov(sp, fp);
// Restore registers.
- __ PopCPURegList(registers_to_retain);
+ __ PopCPURegList<TurboAssembler::kAuthLR>(registers_to_retain);
__ Ret();
@@ -1585,14 +1585,14 @@ void RegExpMacroAssemblerARM64::CallIf(Label* to, Condition condition) {
void RegExpMacroAssemblerARM64::RestoreLinkRegister() {
- __ Pop(lr, xzr);
+ __ Pop<TurboAssembler::kAuthLR>(padreg, lr);
__ Add(lr, lr, Operand(masm_->CodeObject()));
}
void RegExpMacroAssemblerARM64::SaveLinkRegister() {
__ Sub(lr, lr, Operand(masm_->CodeObject()));
- __ Push(xzr, lr);
+ __ Push<TurboAssembler::kSignLR>(lr, padreg);
}