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 99e1627942afc28b89d922dd844a38eafbf914d8..269e7afac8e0a0a43e6e770fe454ab95267d53b6 100644 |
--- a/src/x64/regexp-macro-assembler-x64.cc |
+++ b/src/x64/regexp-macro-assembler-x64.cc |
@@ -109,13 +109,13 @@ namespace internal { |
* bool direct_call) |
*/ |
-#define __ ACCESS_MASM(masm_) |
+#define __ ACCESS_MASM((&masm_)) |
RegExpMacroAssemblerX64::RegExpMacroAssemblerX64( |
Mode mode, |
int registers_to_save) |
- : masm_(new MacroAssembler(NULL, kRegExpCodeSize)), |
- no_root_array_scope_(masm_), |
+ : masm_(NULL, kRegExpCodeSize), |
+ no_root_array_scope_(&masm_), |
code_relative_fixup_positions_(4), |
mode_(mode), |
num_registers_(registers_to_save), |
@@ -132,7 +132,6 @@ RegExpMacroAssemblerX64::RegExpMacroAssemblerX64( |
RegExpMacroAssemblerX64::~RegExpMacroAssemblerX64() { |
- delete masm_; |
// Unuse labels in case we throw away the assembler without calling GetCode. |
entry_label_.Unuse(); |
start_label_.Unuse(); |
@@ -428,11 +427,11 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase( |
__ movq(rdx, rbx); |
#endif |
ExternalReference compare = |
- ExternalReference::re_case_insensitive_compare_uc16(masm_->isolate()); |
+ ExternalReference::re_case_insensitive_compare_uc16(masm_.isolate()); |
__ CallCFunction(compare, num_arguments); |
// Restore original values before reacting on result value. |
- __ Move(code_object_pointer(), masm_->CodeObject()); |
+ __ Move(code_object_pointer(), masm_.CodeObject()); |
__ pop(backtrack_stackpointer()); |
#ifndef _WIN64 |
__ pop(rdi); |
@@ -746,7 +745,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
Label stack_ok; |
ExternalReference stack_limit = |
- ExternalReference::address_of_stack_limit(masm_->isolate()); |
+ ExternalReference::address_of_stack_limit(masm_.isolate()); |
__ movq(rcx, rsp); |
__ movq(kScratchRegister, stack_limit); |
__ subq(rcx, Operand(kScratchRegister, 0)); |
@@ -762,7 +761,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
__ jmp(&exit_label_); |
__ bind(&stack_limit_hit); |
- __ Move(code_object_pointer(), masm_->CodeObject()); |
+ __ Move(code_object_pointer(), masm_.CodeObject()); |
CallCheckStackGuardState(); // Preserves no registers beside rbp and rsp. |
__ testq(rax, rax); |
// If returned value is non-zero, we exit with the returned value as result. |
@@ -817,7 +816,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
// Initialize backtrack stack pointer. |
__ movq(backtrack_stackpointer(), Operand(rbp, kStackHighEnd)); |
// Initialize code object pointer. |
- __ Move(code_object_pointer(), masm_->CodeObject()); |
+ __ Move(code_object_pointer(), masm_.CodeObject()); |
// Load previous char as initial value of current-character. |
Label at_start; |
__ cmpb(Operand(rbp, kStartIndex), Immediate(0)); |
@@ -898,7 +897,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
__ j(not_zero, &exit_label_); |
// Restore registers. |
- __ Move(code_object_pointer(), masm_->CodeObject()); |
+ __ Move(code_object_pointer(), masm_.CodeObject()); |
__ pop(rdi); |
__ pop(backtrack_stackpointer()); |
// String might have moved: Reload esi from frame. |
@@ -932,7 +931,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
__ lea(rsi, Operand(rbp, kStackHighEnd)); // Second argument. |
#endif |
ExternalReference grow_stack = |
- ExternalReference::re_grow_stack(masm_->isolate()); |
+ ExternalReference::re_grow_stack(masm_.isolate()); |
__ CallCFunction(grow_stack, num_arguments); |
// If return NULL, we have failed to grow the stack, and |
// must exit with a stack-overflow exception. |
@@ -941,7 +940,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
// Otherwise use return value as new stack pointer. |
__ movq(backtrack_stackpointer(), rax); |
// Restore saved registers and continue. |
- __ Move(code_object_pointer(), masm_->CodeObject()); |
+ __ Move(code_object_pointer(), masm_.CodeObject()); |
#ifndef _WIN64 |
__ pop(rdi); |
__ pop(rsi); |
@@ -960,11 +959,11 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { |
FixupCodeRelativePositions(); |
CodeDesc code_desc; |
- masm_->GetCode(&code_desc); |
+ masm_.GetCode(&code_desc); |
Isolate* isolate = ISOLATE; |
Handle<Code> code = isolate->factory()->NewCode( |
code_desc, Code::ComputeFlags(Code::REGEXP), |
- masm_->CodeObject()); |
+ masm_.CodeObject()); |
PROFILE(isolate, RegExpCodeCreateEvent(*code, *source)); |
return Handle<Object>::cast(code); |
} |
@@ -1134,7 +1133,7 @@ void RegExpMacroAssemblerX64::CallCheckStackGuardState() { |
__ lea(rdi, Operand(rsp, -kPointerSize)); |
#endif |
ExternalReference stack_check = |
- ExternalReference::re_check_stack_guard_state(masm_->isolate()); |
+ ExternalReference::re_check_stack_guard_state(masm_.isolate()); |
__ CallCFunction(stack_check, num_arguments); |
} |
@@ -1299,8 +1298,8 @@ void RegExpMacroAssemblerX64::FixupCodeRelativePositions() { |
// Patch the relative offset to be relative to the Code object pointer |
// instead. |
int patch_position = position - kIntSize; |
- int offset = masm_->long_at(patch_position); |
- masm_->long_at_put(patch_position, |
+ int offset = masm_.long_at(patch_position); |
+ masm_.long_at_put(patch_position, |
offset |
+ position |
+ Code::kHeaderSize |
@@ -1334,7 +1333,7 @@ void RegExpMacroAssemblerX64::CheckPreemption() { |
// Check for preemption. |
Label no_preempt; |
ExternalReference stack_limit = |
- ExternalReference::address_of_stack_limit(masm_->isolate()); |
+ ExternalReference::address_of_stack_limit(masm_.isolate()); |
__ load_rax(stack_limit); |
__ cmpq(rsp, rax); |
__ j(above, &no_preempt); |
@@ -1348,7 +1347,7 @@ void RegExpMacroAssemblerX64::CheckPreemption() { |
void RegExpMacroAssemblerX64::CheckStackLimit() { |
Label no_stack_overflow; |
ExternalReference stack_limit = |
- ExternalReference::address_of_regexp_stack_limit(masm_->isolate()); |
+ ExternalReference::address_of_regexp_stack_limit(masm_.isolate()); |
__ load_rax(stack_limit); |
__ cmpq(backtrack_stackpointer(), rax); |
__ j(above, &no_stack_overflow); |