| Index: runtime/vm/stub_code_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/stub_code_ia32.cc (revision 26825)
|
| +++ runtime/vm/stub_code_ia32.cc (working copy)
|
| @@ -107,7 +107,7 @@
|
| void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
|
| __ EnterCallRuntimeFrame(1 * kWordSize);
|
| __ movl(Address(ESP, 0), EAX);
|
| - __ CallRuntime(kPrintStopMessageRuntimeEntry);
|
| + __ CallRuntime(kPrintStopMessageRuntimeEntry, 1);
|
| __ LeaveCallRuntimeFrame();
|
| __ ret();
|
| }
|
| @@ -263,7 +263,7 @@
|
| __ EnterStubFrame();
|
| __ pushl(EDX); // Preserve arguments descriptor array.
|
| __ pushl(raw_null); // Setup space on stack for return value.
|
| - __ CallRuntime(kPatchStaticCallRuntimeEntry);
|
| + __ CallRuntime(kPatchStaticCallRuntimeEntry, 0);
|
| __ popl(EAX); // Get Code object result.
|
| __ popl(EDX); // Restore arguments descriptor array.
|
| // Remove the stub frame as we are about to jump to the dart function.
|
| @@ -286,7 +286,7 @@
|
| __ EnterStubFrame();
|
| __ pushl(EDX); // Preserve arguments descriptor array.
|
| __ pushl(raw_null); // Setup space on stack for return value.
|
| - __ CallRuntime(kFixCallersTargetRuntimeEntry);
|
| + __ CallRuntime(kFixCallersTargetRuntimeEntry, 0);
|
| __ popl(EAX); // Get Code object.
|
| __ popl(EDX); // Restore arguments descriptor array.
|
| __ movl(EAX, FieldAddress(EAX, Code::instructions_offset()));
|
| @@ -357,7 +357,7 @@
|
| __ movl(EDX, EDI); // Smi-tagged arguments array length.
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInstanceFunctionLookupRuntimeEntry);
|
| + __ CallRuntime(kInstanceFunctionLookupRuntimeEntry, 4);
|
|
|
| // Remove arguments.
|
| __ Drop(4);
|
| @@ -422,7 +422,7 @@
|
| __ movl(ECX, ESP); // Preserve saved registers block.
|
| __ ReserveAlignedFrameSpace(1 * kWordSize);
|
| __ movl(Address(ESP, 0), ECX); // Start of register block.
|
| - __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry);
|
| + __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 1);
|
| // Result (EAX) is stack-size (FP - SP) in bytes.
|
|
|
| if (preserve_result) {
|
| @@ -443,7 +443,7 @@
|
| }
|
| __ ReserveAlignedFrameSpace(1 * kWordSize);
|
| __ movl(Address(ESP, 0), EBP); // Pass last FP as parameter on stack.
|
| - __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry);
|
| + __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
|
| if (preserve_result) {
|
| // Restore result into EBX.
|
| __ movl(EBX, Address(EBP, kFirstLocalSlotFromFp * kWordSize));
|
| @@ -459,7 +459,7 @@
|
| __ pushl(EBX); // Preserve result, it will be GC-d here.
|
| }
|
| __ pushl(Immediate(Smi::RawValue(0))); // 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.
|
| __ popl(EBX);
|
| @@ -511,7 +511,7 @@
|
| __ pushl(EAX); // Pass receiver.
|
| __ pushl(ECX); // Pass IC data.
|
| __ pushl(EDX); // Pass arguments descriptor.
|
| - __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry);
|
| + __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry, 3);
|
| // Discard arguments.
|
| __ popl(EAX);
|
| __ popl(EAX);
|
| @@ -662,7 +662,7 @@
|
| __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EDX); // Array length as Smi.
|
| __ pushl(ECX); // Element type.
|
| - __ CallRuntime(kAllocateArrayRuntimeEntry);
|
| + __ CallRuntime(kAllocateArrayRuntimeEntry, 2);
|
| __ popl(EAX); // Pop element type argument.
|
| __ popl(EDX); // Pop array length argument.
|
| __ popl(EAX); // Pop return value from return slot.
|
| @@ -719,7 +719,7 @@
|
|
|
| __ pushl(EDX); // Preserve arguments descriptor array.
|
| __ pushl(ECX); // Preserve read-only function object argument.
|
| - __ CallRuntime(kCompileFunctionRuntimeEntry);
|
| + __ CallRuntime(kCompileFunctionRuntimeEntry, 1);
|
| __ popl(ECX); // Restore read-only function object argument in ECX.
|
| __ popl(EDX); // Restore arguments descriptor array.
|
| // Restore EAX.
|
| @@ -755,7 +755,7 @@
|
| __ movl(EDX, FieldAddress(EDX, ArgumentsDescriptor::count_offset()));
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInvokeNonClosureRuntimeEntry);
|
| + __ CallRuntime(kInvokeNonClosureRuntimeEntry, 2);
|
| // Remove arguments.
|
| __ Drop(2);
|
| __ popl(EAX); // Get result into EAX.
|
| @@ -1004,7 +1004,7 @@
|
| __ pushl(raw_null); // Setup space on stack for return value.
|
| __ SmiTag(EDX);
|
| __ pushl(EDX);
|
| - __ CallRuntime(kAllocateContextRuntimeEntry); // Allocate context.
|
| + __ CallRuntime(kAllocateContextRuntimeEntry, 1); // Allocate context.
|
| __ popl(EAX); // Pop number of context variables argument.
|
| __ popl(EAX); // Pop the new context object.
|
| // EAX: new object
|
| @@ -1075,7 +1075,7 @@
|
| __ EnterCallRuntimeFrame(1 * kWordSize);
|
| __ movl(EAX, FieldAddress(CTX, Context::isolate_offset()));
|
| __ movl(Address(ESP, 0), EAX); // Push the isolate as the only argument.
|
| - __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry);
|
| + __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1);
|
| // Restore callee-saved registers, tear down frame.
|
| __ LeaveCallRuntimeFrame();
|
| __ ret();
|
| @@ -1245,7 +1245,7 @@
|
| __ pushl(raw_null); // Push null type arguments.
|
| __ pushl(Immediate(Smi::RawValue(StubCode::kNoInstantiator)));
|
| }
|
| - __ CallRuntime(kAllocateObjectRuntimeEntry); // Allocate object.
|
| + __ CallRuntime(kAllocateObjectRuntimeEntry, 3); // Allocate object.
|
| __ popl(EAX); // Pop argument (instantiator).
|
| __ popl(EAX); // Pop argument (type arguments of object).
|
| __ popl(EAX); // Pop argument (class of object).
|
| @@ -1379,12 +1379,12 @@
|
| __ pushl(raw_null); // Push null type arguments.
|
| }
|
| if (is_implicit_instance_closure) {
|
| - __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry);
|
| + __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry, 3);
|
| __ popl(EAX); // Pop argument (type arguments of object).
|
| __ popl(EAX); // Pop receiver.
|
| } else {
|
| ASSERT(func.IsNonImplicitClosureFunction());
|
| - __ CallRuntime(kAllocateClosureRuntimeEntry);
|
| + __ CallRuntime(kAllocateClosureRuntimeEntry, 2);
|
| __ popl(EAX); // Pop argument (type arguments of object).
|
| }
|
| __ popl(EAX); // Pop function object.
|
| @@ -1423,7 +1423,7 @@
|
| // EDX: Smi-tagged arguments array length.
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry);
|
| + __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
|
|
|
| // Remove arguments.
|
| __ Drop(4);
|
| @@ -1446,7 +1446,7 @@
|
| __ pushl(ic_reg); // Preserve.
|
| __ pushl(ic_reg); // Argument.
|
| __ pushl(func_reg); // Argument.
|
| - __ CallRuntime(kTraceICCallRuntimeEntry);
|
| + __ CallRuntime(kTraceICCallRuntimeEntry, 2);
|
| __ popl(EAX); // Discard argument;
|
| __ popl(EAX); // Discard argument;
|
| __ popl(ic_reg); // Restore.
|
| @@ -1504,7 +1504,7 @@
|
|
|
| __ EnterStubFrame();
|
| __ pushl(ECX);
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ popl(ECX);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
| @@ -1583,7 +1583,7 @@
|
| __ pushl(EBX);
|
| }
|
| __ pushl(ECX); // Pass IC data object.
|
| - __ CallRuntime(handle_ic_miss);
|
| + __ CallRuntime(handle_ic_miss, num_args + 1);
|
| // Remove the call arguments pushed earlier, including the IC data object.
|
| for (intptr_t i = 0; i < num_args + 1; i++) {
|
| __ popl(EAX);
|
| @@ -1740,7 +1740,7 @@
|
|
|
| __ EnterStubFrame();
|
| __ pushl(ECX);
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ popl(ECX);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
| @@ -1772,7 +1772,7 @@
|
| __ pushl(EDI); // Preserve target function.
|
| __ pushl(ECX); // Preserve IC data object.
|
| __ pushl(EDI); // Pass function.
|
| - __ CallRuntime(kCompileFunctionRuntimeEntry);
|
| + __ CallRuntime(kCompileFunctionRuntimeEntry, 1);
|
| __ popl(EAX); // Discard argument.
|
| __ popl(ECX); // Restore IC data object.
|
| __ popl(EDI); // Restore target function.
|
| @@ -1807,7 +1807,7 @@
|
| const Immediate& raw_null =
|
| Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| __ pushl(raw_null); // Room for result.
|
| - __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
|
| __ popl(EAX); // Address of original stub.
|
| __ popl(EDX); // Restore arguments.
|
| __ popl(ECX);
|
| @@ -1826,7 +1826,7 @@
|
| const Immediate& raw_null =
|
| Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| __ pushl(raw_null); // Room for result.
|
| - __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry, 0);
|
| __ popl(EAX); // Code object.
|
| __ popl(ECX); // Restore ICData.
|
| __ LeaveFrame();
|
| @@ -1850,7 +1850,7 @@
|
| // calling into the runtime.
|
| __ EnterStubFrame();
|
| __ pushl(EAX);
|
| - __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry, 0);
|
| __ popl(EAX);
|
| __ LeaveFrame();
|
|
|
| @@ -1870,7 +1870,7 @@
|
| // calling into the runtime.
|
| __ EnterStubFrame();
|
| __ pushl(ECX);
|
| - __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry, 0);
|
| __ popl(ECX);
|
| __ LeaveFrame();
|
|
|
| @@ -2123,7 +2123,7 @@
|
| __ pushl(EAX); // arg 1
|
| __ PushObject(Symbols::EqualOperator()); // Target's name.
|
| __ pushl(ECX); // ICData
|
| - __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry);
|
| + __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry, 4);
|
| __ Drop(4);
|
| __ LeaveFrame();
|
|
|
| @@ -2141,7 +2141,7 @@
|
| __ pushl(EDX);
|
| __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EDI);
|
| - __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry);
|
| + __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry, 1);
|
| __ popl(EAX); // Discard argument.
|
| __ popl(EAX); // Get Code object
|
| __ popl(EDX); // Restore argument descriptor.
|
| @@ -2211,7 +2211,7 @@
|
| __ ReserveAlignedFrameSpace(2 * kWordSize);
|
| __ movl(Address(ESP, 1 * kWordSize), left);
|
| __ movl(Address(ESP, 0 * kWordSize), right);
|
| - __ CallRuntime(kBigintCompareRuntimeEntry);
|
| + __ CallRuntime(kBigintCompareRuntimeEntry, 2);
|
| // Result in EAX, 0 means equal.
|
| __ LeaveFrame();
|
| __ cmpl(EAX, Immediate(0));
|
| @@ -2238,7 +2238,7 @@
|
| __ j(EQUAL, ¬_stepping, Assembler::kNearJump);
|
|
|
| __ EnterStubFrame();
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
|
|
|
|