| Index: src/x64/regexp-macro-assembler-x64.cc
|
| diff --git a/src/x64/regexp-macro-assembler-x64.cc b/src/x64/regexp-macro-assembler-x64.cc
|
| index 269e7afac8e0a0a43e6e770fe454ab95267d53b6..a82a7c91f8888347a72eb688503a9b5948f2f87b 100644
|
| --- a/src/x64/regexp-macro-assembler-x64.cc
|
| +++ b/src/x64/regexp-macro-assembler-x64.cc
|
| @@ -402,13 +402,14 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
| #endif
|
| __ push(backtrack_stackpointer());
|
|
|
| - static const int num_arguments = 3;
|
| + static const int num_arguments = 4;
|
| __ PrepareCallCFunction(num_arguments);
|
|
|
| // Put arguments into parameter registers. Parameters are
|
| // Address byte_offset1 - Address captured substring's start.
|
| // Address byte_offset2 - Address of current character position.
|
| // size_t byte_length - length of capture in bytes(!)
|
| + // Isolate* isolate
|
| #ifdef _WIN64
|
| // Compute and set byte_offset1 (start of capture).
|
| __ lea(rcx, Operand(rsi, rdx, times_1, 0));
|
| @@ -416,6 +417,8 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
| __ lea(rdx, Operand(rsi, rdi, times_1, 0));
|
| // Set byte_length.
|
| __ movq(r8, rbx);
|
| + // Isolate.
|
| + __ LoadAddress(r9, ExternalReference::isolate_address());
|
| #else // AMD64 calling convention
|
| // Compute byte_offset2 (current position = rsi+rdi).
|
| __ lea(rax, Operand(rsi, rdi, times_1, 0));
|
| @@ -425,6 +428,8 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
| __ movq(rsi, rax);
|
| // Set byte_length.
|
| __ movq(rdx, rbx);
|
| + // Isolate.
|
| + __ LoadAddress(rcx, ExternalReference::isolate_address());
|
| #endif
|
| ExternalReference compare =
|
| ExternalReference::re_case_insensitive_compare_uc16(masm_.isolate());
|
| @@ -919,16 +924,18 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
| #endif
|
|
|
| // Call GrowStack(backtrack_stackpointer())
|
| - static const int num_arguments = 2;
|
| + static const int num_arguments = 3;
|
| __ PrepareCallCFunction(num_arguments);
|
| #ifdef _WIN64
|
| - // Microsoft passes parameters in rcx, rdx.
|
| + // Microsoft passes parameters in rcx, rdx, r8.
|
| // First argument, backtrack stackpointer, is already in rcx.
|
| __ lea(rdx, Operand(rbp, kStackHighEnd)); // Second argument
|
| + __ LoadAddress(r8, ExternalReference::isolate_address());
|
| #else
|
| - // AMD64 ABI passes parameters in rdi, rsi.
|
| + // AMD64 ABI passes parameters in rdi, rsi, rdx.
|
| __ movq(rdi, backtrack_stackpointer()); // First argument.
|
| __ lea(rsi, Operand(rbp, kStackHighEnd)); // Second argument.
|
| + __ LoadAddress(rdx, ExternalReference::isolate_address());
|
| #endif
|
| ExternalReference grow_stack =
|
| ExternalReference::re_grow_stack(masm_.isolate());
|
|
|