Index: runtime/vm/stub_code_arm.cc |
=================================================================== |
--- runtime/vm/stub_code_arm.cc (revision 26825) |
+++ runtime/vm/stub_code_arm.cc (working copy) |
@@ -113,7 +113,7 @@ |
void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) { |
__ EnterCallRuntimeFrame(0); |
// Call the runtime leaf function. R0 already contains the parameter. |
- __ CallRuntime(kPrintStopMessageRuntimeEntry); |
+ __ CallRuntime(kPrintStopMessageRuntimeEntry, 1); |
__ LeaveCallRuntimeFrame(); |
__ Ret(); |
} |
@@ -291,7 +291,7 @@ |
// Setup space on stack for return value and preserve arguments descriptor. |
__ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
__ PushList((1 << R0) | (1 << R4)); |
- __ CallRuntime(kPatchStaticCallRuntimeEntry); |
+ __ CallRuntime(kPatchStaticCallRuntimeEntry, 0); |
// Get Code object result and restore arguments descriptor array. |
__ PopList((1 << R0) | (1 << R4)); |
// Remove the stub frame. |
@@ -313,7 +313,7 @@ |
// Setup space on stack for return value and preserve arguments descriptor. |
__ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
__ PushList((1 << R0) | (1 << R4)); |
- __ CallRuntime(kFixCallersTargetRuntimeEntry); |
+ __ CallRuntime(kFixCallersTargetRuntimeEntry, 0); |
// Get Code object result and restore arguments descriptor array. |
__ PopList((1 << R0) | (1 << R4)); |
// Remove the stub frame. |
@@ -377,7 +377,7 @@ |
// R2: Smi-tagged arguments array length. |
PushArgumentsArray(assembler); |
- __ CallRuntime(kInstanceFunctionLookupRuntimeEntry); |
+ __ CallRuntime(kInstanceFunctionLookupRuntimeEntry, 4); |
// Remove arguments. |
__ Drop(4); |
@@ -447,7 +447,7 @@ |
__ mov(R0, ShifterOperand(SP)); // Pass address of saved registers block. |
__ ReserveAlignedFrameSpace(0); |
- __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry); |
+ __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 1); |
// Result (R0) is stack-size (FP - SP) in bytes. |
if (preserve_result) { |
@@ -468,7 +468,7 @@ |
__ Push(R1); // Preserve result as first local. |
} |
__ ReserveAlignedFrameSpace(0); |
- __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry); // Pass last FP in R0. |
+ __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1); // Pass last FP in R0. |
if (preserve_result) { |
// Restore result into R1. |
__ ldr(R1, Address(FP, kFirstLocalSlotFromFp * kWordSize)); |
@@ -484,7 +484,7 @@ |
__ Push(R1); // Preserve result, it will be GC-d here. |
} |
__ PushObject(Smi::ZoneHandle()); // Space for the result. |
- __ CallRuntime(kDeoptimizeMaterializeRuntimeEntry); |
+ __ CallRuntime(kDeoptimizeMaterializeRuntimeEntry, 0); |
// Result tells stub how many bytes to remove from the expression stack |
// of the bottom-most frame. They were used as materialization arguments. |
__ Pop(R1); |
@@ -528,7 +528,7 @@ |
// Push arguments descriptor array. |
__ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null())); |
__ PushList((1 << R4) | (1 << R5) | (1 << R6) | (1 << IP)); |
- __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry); |
+ __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry, 3); |
// Remove arguments. |
__ Drop(3); |
__ Pop(R0); // Get result into R0. |
@@ -667,7 +667,7 @@ |
// Setup space on stack for return value. |
// Push array length as Smi and element type. |
__ PushList((1 << R1) | (1 << R2) | (1 << IP)); |
- __ CallRuntime(kAllocateArrayRuntimeEntry); |
+ __ CallRuntime(kAllocateArrayRuntimeEntry, 2); |
// Pop arguments; result is popped in IP. |
__ PopList((1 << R1) | (1 << R2) | (1 << IP)); // R2 is restored. |
__ mov(R0, ShifterOperand(IP)); |
@@ -724,7 +724,7 @@ |
// Preserve arguments descriptor array and read-only function object argument. |
__ PushList((1 << R2) | (1 << R4)); |
- __ CallRuntime(kCompileFunctionRuntimeEntry); |
+ __ CallRuntime(kCompileFunctionRuntimeEntry, 1); |
// Restore arguments descriptor array and read-only function object argument. |
__ PopList((1 << R2) | (1 << R4)); |
// Restore R0. |
@@ -759,7 +759,7 @@ |
__ ldr(R2, FieldAddress(R4, ArgumentsDescriptor::count_offset())); |
PushArgumentsArray(assembler); |
- __ CallRuntime(kInvokeNonClosureRuntimeEntry); |
+ __ CallRuntime(kInvokeNonClosureRuntimeEntry, 2); |
// Remove arguments. |
__ Drop(2); |
__ Pop(R0); // Get result into R0. |
@@ -982,7 +982,7 @@ |
__ LoadImmediate(R2, reinterpret_cast<intptr_t>(Object::null())); |
__ SmiTag(R1); |
__ PushList((1 << R1) | (1 << R2)); |
- __ CallRuntime(kAllocateContextRuntimeEntry); // Allocate context. |
+ __ CallRuntime(kAllocateContextRuntimeEntry, 1); // Allocate context. |
__ Drop(1); // Pop number of context variables argument. |
__ Pop(R0); // Pop the new context object. |
// R0: new object |
@@ -1047,7 +1047,7 @@ |
__ EnterCallRuntimeFrame(0 * kWordSize); |
__ ldr(R0, FieldAddress(CTX, Context::isolate_offset())); |
- __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry); |
+ __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1); |
// Restore callee-saved registers, tear down frame. |
__ LeaveCallRuntimeFrame(); |
__ Ret(); |
@@ -1212,7 +1212,7 @@ |
__ LoadImmediate(R1, Smi::RawValue(StubCode::kNoInstantiator)); |
__ PushList((1 << R1) | (1 << R2)); |
} |
- __ CallRuntime(kAllocateObjectRuntimeEntry); // Allocate object. |
+ __ CallRuntime(kAllocateObjectRuntimeEntry, 3); // Allocate object. |
__ Drop(3); // Pop arguments. |
__ Pop(R0); // Pop result (newly allocated object). |
// R0: new object |
@@ -1345,11 +1345,11 @@ |
__ Push(R0); // Push type arguments of closure to be allocated or null. |
if (is_implicit_instance_closure) { |
- __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry); |
+ __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry, 3); |
__ Drop(2); // Pop arguments (type arguments of object and receiver). |
} else { |
ASSERT(func.IsNonImplicitClosureFunction()); |
- __ CallRuntime(kAllocateClosureRuntimeEntry); |
+ __ CallRuntime(kAllocateClosureRuntimeEntry, 2); |
__ Drop(1); // Pop argument (type arguments of object). |
} |
__ Drop(1); // Pop function object. |
@@ -1387,7 +1387,7 @@ |
// R2: Smi-tagged arguments array length. |
PushArgumentsArray(assembler); |
- __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry); |
+ __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4); |
// Remove arguments. |
__ Drop(4); |
__ Pop(R0); // Get result into R0. |
@@ -1408,7 +1408,7 @@ |
__ PushList((1 << R5) | (1 << R6)); // Preserve. |
__ Push(ic_reg); // Argument. |
__ Push(func_reg); // Argument. |
- __ CallRuntime(kTraceICCallRuntimeEntry); |
+ __ CallRuntime(kTraceICCallRuntimeEntry, 2); |
__ Drop(2); // Discard argument; |
__ PopList((1 << R5) | (1 << R6)); // Restore. |
__ LeaveStubFrame(); |
@@ -1467,7 +1467,7 @@ |
__ b(¬_stepping, EQ); |
__ EnterStubFrame(); |
__ Push(R5); // Preserve IC data. |
- __ CallRuntime(kSingleStepHandlerRuntimeEntry); |
+ __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0); |
__ Pop(R5); |
__ LeaveStubFrame(); |
__ Bind(¬_stepping); |
@@ -1552,7 +1552,7 @@ |
} |
// Pass IC data object. |
__ Push(R5); |
- __ CallRuntime(handle_ic_miss); |
+ __ CallRuntime(handle_ic_miss, num_args + 1); |
// Remove the call arguments pushed earlier, including the IC data object. |
__ Drop(num_args + 1); |
// Pop returned code object into R0 (null if not found). |
@@ -1693,7 +1693,7 @@ |
__ b(¬_stepping, EQ); |
__ EnterStubFrame(); |
__ Push(R5); // Preserve IC data. |
- __ CallRuntime(kSingleStepHandlerRuntimeEntry); |
+ __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0); |
__ Pop(R5); |
__ LeaveStubFrame(); |
__ Bind(¬_stepping); |
@@ -1728,7 +1728,7 @@ |
// Preserve target function and IC data object. |
__ PushList((1 << R1) | (1 << R5)); |
__ Push(R1); // Pass function. |
- __ CallRuntime(kCompileFunctionRuntimeEntry); |
+ __ CallRuntime(kCompileFunctionRuntimeEntry, 1); |
__ Drop(1); // Discard argument. |
__ PopList((1 << R1) | (1 << R5)); // Restore function and IC data. |
__ LeaveStubFrame(); |
@@ -1766,7 +1766,7 @@ |
__ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
// Preserve arguments descriptor and make room for result. |
__ PushList((1 << R0) | (1 << R5)); |
- __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry); |
+ __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry, 0); |
// Pop code object result and restore arguments descriptor. |
__ PopList((1 << R0) | (1 << R5)); |
__ LeaveStubFrame(); |
@@ -1787,7 +1787,7 @@ |
// calling into the runtime. |
__ EnterStubFrame(); |
__ Push(R0); |
- __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry); |
+ __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry, 0); |
__ Pop(R0); |
__ LeaveStubFrame(); |
@@ -1805,7 +1805,7 @@ |
// calling into the runtime. |
__ EnterStubFrame(); |
__ Push(R5); |
- __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry); |
+ __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry, 0); |
__ Pop(R5); |
__ LeaveStubFrame(); |
@@ -2032,7 +2032,7 @@ |
__ PushList((1 << R0) | (1 << R1)); |
__ PushObject(Symbols::EqualOperator()); // Target's name. |
__ Push(R5); // ICData |
- __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry); // Clobbers R4, R5. |
+ __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry, 4); // Clobbers R4, R5. |
__ Drop(2); |
__ PopList((1 << R0) | (1 << R1)); |
__ b(&compute_result); |
@@ -2048,7 +2048,7 @@ |
__ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null())); |
__ Push(IP); // Setup space on stack for return value. |
__ Push(R6); |
- __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry); |
+ __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry, 1); |
__ Pop(R0); // Discard argument. |
__ Pop(R0); // Get Code object |
__ Pop(R4); // Restore argument descriptor. |
@@ -2122,7 +2122,7 @@ |
__ EnterStubFrame(0); |
__ ReserveAlignedFrameSpace(2 * kWordSize); |
__ stm(IA, SP, (1 << R0) | (1 << R1)); |
- __ CallRuntime(kBigintCompareRuntimeEntry); |
+ __ CallRuntime(kBigintCompareRuntimeEntry, 2); |
// Result in R0, 0 means equal. |
__ LeaveStubFrame(); |
__ cmp(R0, ShifterOperand(0)); |
@@ -2148,7 +2148,7 @@ |
__ CompareImmediate(R1, 0); |
__ b(¬_stepping, EQ); |
__ EnterStubFrame(); |
- __ CallRuntime(kSingleStepHandlerRuntimeEntry); |
+ __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0); |
__ LeaveStubFrame(); |
__ Bind(¬_stepping); |