| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index 2d0720a77d208716b300c8a4346295bb3571a403..52d42f6ca87b47ab6ec7cbf59f47a7fcbe201d5d 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -46,7 +46,6 @@ namespace internal {
|
| MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size)
|
| : Assembler(arg_isolate, buffer, size),
|
| generating_stub_(false),
|
| - allow_stub_calls_(true),
|
| has_frame_(false) {
|
| if (isolate() != NULL) {
|
| // TODO(titzer): should we just use a null handle here instead?
|
| @@ -1107,10 +1106,8 @@ void MacroAssembler::EnterExitFramePrologue() {
|
| push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot.
|
|
|
| // Save the frame pointer and the context in top.
|
| - ExternalReference c_entry_fp_address(Isolate::kCEntryFPAddress,
|
| - isolate());
|
| - ExternalReference context_address(Isolate::kContextAddress,
|
| - isolate());
|
| + ExternalReference c_entry_fp_address(Isolate::kCEntryFPAddress, isolate());
|
| + ExternalReference context_address(Isolate::kContextAddress, isolate());
|
| mov(Operand::StaticVariable(c_entry_fp_address), ebp);
|
| mov(Operand::StaticVariable(context_address), esi);
|
| }
|
| @@ -2190,8 +2187,6 @@ void MacroAssembler::CallStub(CodeStub* stub, TypeFeedbackId ast_id) {
|
|
|
|
|
| void MacroAssembler::TailCallStub(CodeStub* stub) {
|
| - ASSERT(allow_stub_calls_ ||
|
| - stub->CompilingCallsToThisStubIsGCSafe(isolate()));
|
| jmp(stub->GetCode(isolate()), RelocInfo::CODE_TARGET);
|
| }
|
|
|
| @@ -2203,8 +2198,7 @@ void MacroAssembler::StubReturn(int argc) {
|
|
|
|
|
| bool MacroAssembler::AllowThisStubCall(CodeStub* stub) {
|
| - if (!has_frame_ && stub->SometimesSetsUpAFrame()) return false;
|
| - return allow_stub_calls_ || stub->CompilingCallsToThisStubIsGCSafe(isolate());
|
| + return has_frame_ || !stub->SometimesSetsUpAFrame();
|
| }
|
|
|
|
|
| @@ -2636,7 +2630,7 @@ void MacroAssembler::InvokeFunction(Register fun,
|
| }
|
|
|
|
|
| -void MacroAssembler::InvokeFunction(Handle<JSFunction> function,
|
| +void MacroAssembler::InvokeFunction(Register fun,
|
| const ParameterCount& expected,
|
| const ParameterCount& actual,
|
| InvokeFlag flag,
|
| @@ -2645,18 +2639,25 @@ void MacroAssembler::InvokeFunction(Handle<JSFunction> function,
|
| // You can't call a function without a valid frame.
|
| ASSERT(flag == JUMP_FUNCTION || has_frame());
|
|
|
| - // Get the function and setup the context.
|
| - LoadHeapObject(edi, function);
|
| + ASSERT(fun.is(edi));
|
| mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
|
|
|
| - // We call indirectly through the code field in the function to
|
| - // allow recompilation to take effect without changing any of the
|
| - // call sites.
|
| InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
|
| expected, actual, flag, call_wrapper, call_kind);
|
| }
|
|
|
|
|
| +void MacroAssembler::InvokeFunction(Handle<JSFunction> function,
|
| + const ParameterCount& expected,
|
| + const ParameterCount& actual,
|
| + InvokeFlag flag,
|
| + const CallWrapper& call_wrapper,
|
| + CallKind call_kind) {
|
| + LoadHeapObject(edi, function);
|
| + InvokeFunction(edi, expected, actual, flag, call_wrapper, call_kind);
|
| +}
|
| +
|
| +
|
| void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
|
| InvokeFlag flag,
|
| const CallWrapper& call_wrapper) {
|
|
|