| 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 4c6a84d6ef242bdd7429896c1a9d165a0ef2be8c..c5ed68415c8a5e33a2ed10f4ee1a794160a01a12 100644
|
| --- a/src/x64/regexp-macro-assembler-x64.cc
|
| +++ b/src/x64/regexp-macro-assembler-x64.cc
|
| @@ -39,6 +39,8 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +#ifdef V8_NATIVE_REGEXP
|
| +
|
| /*
|
| * This assembler uses the following register assignment convention
|
| * - rdx : currently loaded character(s) as ASCII or UC16. Must be loaded using
|
| @@ -350,8 +352,9 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
| // Set byte_length.
|
| __ movq(rdx, rbx);
|
| #endif
|
| - Address function_address = FUNCTION_ADDR(&CaseInsensitiveCompareUC16);
|
| - CallCFunction(function_address, num_arguments);
|
| + ExternalReference compare =
|
| + ExternalReference::re_case_insensitive_compare_uc16();
|
| + CallCFunction(compare, num_arguments);
|
|
|
| // Restore original values before reacting on result value.
|
| __ Move(code_object_pointer(), masm_->CodeObject());
|
| @@ -808,11 +811,12 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
| // First argument, backtrack stackpointer, is already in rcx.
|
| __ lea(rdx, Operand(rbp, kStackHighEnd)); // Second argument
|
| #else
|
| - // AMD64 ABI passes paremeters in rdi, rsi.
|
| + // AMD64 ABI passes parameters in rdi, rsi.
|
| __ movq(rdi, backtrack_stackpointer()); // First argument.
|
| __ lea(rsi, Operand(rbp, kStackHighEnd)); // Second argument.
|
| #endif
|
| - CallCFunction(FUNCTION_ADDR(&GrowStack), num_arguments);
|
| + ExternalReference grow_stack = ExternalReference::re_grow_stack();
|
| + CallCFunction(grow_stack, num_arguments);
|
| // If return NULL, we have failed to grow the stack, and
|
| // must exit with a stack-overflow exception.
|
| __ testq(rax, rax);
|
| @@ -997,7 +1001,9 @@ void RegExpMacroAssemblerX64::CallCheckStackGuardState() {
|
| // return address).
|
| __ lea(rdi, Operand(rsp, -kPointerSize));
|
| #endif
|
| - CallCFunction(FUNCTION_ADDR(&CheckStackGuardState), num_arguments);
|
| + ExternalReference stack_check =
|
| + ExternalReference::re_check_stack_guard_state();
|
| + CallCFunction(stack_check, num_arguments);
|
| }
|
|
|
|
|
| @@ -1080,23 +1086,6 @@ int RegExpMacroAssemblerX64::CheckStackGuardState(Address* return_address,
|
| }
|
|
|
|
|
| -Address RegExpMacroAssemblerX64::GrowStack(Address stack_pointer,
|
| - Address* stack_base) {
|
| - size_t size = RegExpStack::stack_capacity();
|
| - Address old_stack_base = RegExpStack::stack_base();
|
| - ASSERT(old_stack_base == *stack_base);
|
| - ASSERT(stack_pointer <= old_stack_base);
|
| - ASSERT(static_cast<size_t>(old_stack_base - stack_pointer) <= size);
|
| - Address new_stack_base = RegExpStack::EnsureCapacity(size * 2);
|
| - if (new_stack_base == NULL) {
|
| - return NULL;
|
| - }
|
| - *stack_base = new_stack_base;
|
| - intptr_t stack_content_size = old_stack_base - stack_pointer;
|
| - return new_stack_base - stack_content_size;
|
| -}
|
| -
|
| -
|
| Operand RegExpMacroAssemblerX64::register_location(int register_index) {
|
| ASSERT(register_index < (1<<30));
|
| if (num_registers_ <= register_index) {
|
| @@ -1256,12 +1245,12 @@ void RegExpMacroAssemblerX64::FrameAlign(int num_arguments) {
|
| }
|
|
|
|
|
| -void RegExpMacroAssemblerX64::CallCFunction(Address function_address,
|
| +void RegExpMacroAssemblerX64::CallCFunction(ExternalReference function,
|
| int num_arguments) {
|
| // Don't compile regexps with serialization enabled. The addresses of the C++
|
| // function being called isn't relocatable.
|
| ASSERT(!Serializer::enabled());
|
| - __ movq(rax, reinterpret_cast<intptr_t>(function_address), RelocInfo::NONE);
|
| + __ movq(rax, function);
|
| __ call(rax);
|
| ASSERT(OS::ActivationFrameAlignment() != 0);
|
| #ifdef _WIN64
|
| @@ -1297,5 +1286,12 @@ void RegExpMacroAssemblerX64::LoadCurrentCharacterUnchecked(int cp_offset,
|
| }
|
|
|
|
|
| +void RegExpCEntryStub::Generate(MacroAssembler* masm_) {
|
| + __ int3(); // Unused on x64.
|
| +}
|
| +
|
| #undef __
|
| +
|
| +#endif // V8_NATIVE_REGEXP
|
| +
|
| }} // namespace v8::internal
|
|
|