Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 31c3b194cecd5caa86202c0f19bff0b960656547..799a1bbdea8e3aa08f30e6344b85c49655c8ef6d 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -545,6 +545,21 @@ void MacroAssembler::InvokeFunction(Register fun, |
} |
+void MacroAssembler::InvokeFunction(JSFunction* function, |
+ const ParameterCount& actual) { |
+ ASSERT(function->is_compiled()); |
+ |
+ // Get the function and setup the context. |
+ mov(r1, Operand(Handle<JSFunction>(function))); |
+ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); |
+ |
+ // Jump to the cached code (tail call). |
+ Handle<Code> code(function->code()); |
+ ParameterCount expected(function->shared()->formal_parameter_count()); |
+ InvokeCode(code, expected, actual, |
+ RelocInfo::CODE_TARGET, JUMP_FUNCTION); |
+} |
+ |
#ifdef ENABLE_DEBUGGER_SUPPORT |
void MacroAssembler::SaveRegistersToMemory(RegList regs) { |
ASSERT((regs & ~kJSCallerSaved) == 0); |
@@ -1209,6 +1224,16 @@ void MacroAssembler::CallRuntime(Runtime::FunctionId fid, int num_arguments) { |
} |
+void MacroAssembler::CallExternalReference(const ExternalReference& ext, |
+ int num_arguments) { |
+ mov(r0, Operand(num_arguments)); |
+ mov(r1, Operand(ext)); |
+ |
+ CEntryStub stub(1); |
+ CallStub(&stub); |
+} |
+ |
+ |
void MacroAssembler::TailCallRuntime(const ExternalReference& ext, |
int num_arguments, |
int result_size) { |