| Index: runtime/vm/stub_code_x64.cc
|
| ===================================================================
|
| --- runtime/vm/stub_code_x64.cc (revision 26825)
|
| +++ runtime/vm/stub_code_x64.cc (working copy)
|
| @@ -109,7 +109,7 @@
|
| void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
|
| __ EnterCallRuntimeFrame(0);
|
| // Call the runtime leaf function. RDI already contains the parameter.
|
| - __ CallRuntime(kPrintStopMessageRuntimeEntry);
|
| + __ CallRuntime(kPrintStopMessageRuntimeEntry, 1);
|
| __ LeaveCallRuntimeFrame();
|
| __ ret();
|
| }
|
| @@ -260,7 +260,7 @@
|
| __ EnterStubFrame();
|
| __ pushq(R10); // Preserve arguments descriptor array.
|
| __ pushq(raw_null); // Setup space on stack for return value.
|
| - __ CallRuntime(kPatchStaticCallRuntimeEntry);
|
| + __ CallRuntime(kPatchStaticCallRuntimeEntry, 0);
|
| __ popq(RAX); // Get Code object result.
|
| __ popq(R10); // Restore arguments descriptor array.
|
| // Remove the stub frame as we are about to jump to the dart function.
|
| @@ -281,7 +281,7 @@
|
| __ EnterStubFrame();
|
| __ pushq(R10); // Preserve arguments descriptor array.
|
| __ pushq(raw_null); // Setup space on stack for return value.
|
| - __ CallRuntime(kFixCallersTargetRuntimeEntry);
|
| + __ CallRuntime(kFixCallersTargetRuntimeEntry, 0);
|
| __ popq(RAX); // Get Code object.
|
| __ popq(R10); // Restore arguments descriptor array.
|
| __ movq(RAX, FieldAddress(RAX, Code::instructions_offset()));
|
| @@ -350,7 +350,7 @@
|
| __ movq(R10, R13); // Smi-tagged arguments array length.
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInstanceFunctionLookupRuntimeEntry);
|
| + __ CallRuntime(kInstanceFunctionLookupRuntimeEntry, 4);
|
|
|
| // Remove arguments.
|
| __ Drop(4);
|
| @@ -414,7 +414,7 @@
|
|
|
| __ movq(RDI, RSP); // Pass address of saved registers block.
|
| __ ReserveAlignedFrameSpace(0);
|
| - __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry);
|
| + __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 1);
|
| // Result (RAX) is stack-size (FP - SP) in bytes.
|
|
|
| if (preserve_result) {
|
| @@ -435,7 +435,7 @@
|
| }
|
| __ ReserveAlignedFrameSpace(0);
|
| __ movq(RDI, RBP); // Pass last FP as parameter in RDI.
|
| - __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry);
|
| + __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
|
| if (preserve_result) {
|
| // Restore result into RBX.
|
| __ movq(RBX, Address(RBP, kFirstLocalSlotFromFp * kWordSize));
|
| @@ -451,7 +451,7 @@
|
| __ pushq(RBX); // Preserve result, it will be GC-d here.
|
| }
|
| __ pushq(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.
|
| __ popq(RBX);
|
| @@ -503,7 +503,7 @@
|
| __ pushq(RAX); // Receiver.
|
| __ pushq(RBX); // IC data.
|
| __ pushq(R10); // Arguments descriptor.
|
| - __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry);
|
| + __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry, 3);
|
| // Discard arguments.
|
| __ popq(RAX);
|
| __ popq(RAX);
|
| @@ -648,7 +648,7 @@
|
| __ pushq(raw_null); // Setup space on stack for return value.
|
| __ pushq(R10); // Array length as Smi.
|
| __ pushq(RBX); // Element type.
|
| - __ CallRuntime(kAllocateArrayRuntimeEntry);
|
| + __ CallRuntime(kAllocateArrayRuntimeEntry, 2);
|
| __ popq(RAX); // Pop element type argument.
|
| __ popq(R10); // Pop array length argument.
|
| __ popq(RAX); // Pop return value from return slot.
|
| @@ -704,7 +704,7 @@
|
|
|
| __ pushq(R10); // Preserve arguments descriptor array.
|
| __ pushq(RBX); // Preserve read-only function object argument.
|
| - __ CallRuntime(kCompileFunctionRuntimeEntry);
|
| + __ CallRuntime(kCompileFunctionRuntimeEntry, 1);
|
| __ popq(RBX); // Restore read-only function object argument in RBX.
|
| __ popq(R10); // Restore arguments descriptor array.
|
| // Restore RAX.
|
| @@ -740,7 +740,7 @@
|
| __ movq(R10, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInvokeNonClosureRuntimeEntry);
|
| + __ CallRuntime(kInvokeNonClosureRuntimeEntry, 2);
|
|
|
| // Remove arguments.
|
| __ Drop(2);
|
| @@ -991,7 +991,7 @@
|
| __ pushq(raw_null); // Setup space on stack for the return value.
|
| __ SmiTag(R10);
|
| __ pushq(R10); // Push number of context variables.
|
| - __ CallRuntime(kAllocateContextRuntimeEntry); // Allocate context.
|
| + __ CallRuntime(kAllocateContextRuntimeEntry, 1); // Allocate context.
|
| __ popq(RAX); // Pop number of context variables argument.
|
| __ popq(RAX); // Pop the new context object.
|
| // RAX: new object
|
| @@ -1057,7 +1057,7 @@
|
| // Setup frame, push callee-saved registers.
|
| __ EnterCallRuntimeFrame(0);
|
| __ movq(RDI, FieldAddress(CTX, Context::isolate_offset()));
|
| - __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry);
|
| + __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1);
|
| __ LeaveCallRuntimeFrame();
|
| __ ret();
|
| }
|
| @@ -1227,7 +1227,7 @@
|
| __ pushq(raw_null); // Push null type arguments.
|
| __ pushq(Immediate(Smi::RawValue(StubCode::kNoInstantiator)));
|
| }
|
| - __ CallRuntime(kAllocateObjectRuntimeEntry); // Allocate object.
|
| + __ CallRuntime(kAllocateObjectRuntimeEntry, 3); // Allocate object.
|
| __ popq(RAX); // Pop argument (instantiator).
|
| __ popq(RAX); // Pop argument (type arguments of object).
|
| __ popq(RAX); // Pop argument (class of object).
|
| @@ -1363,12 +1363,12 @@
|
| __ pushq(raw_null); // Push null type arguments.
|
| }
|
| if (is_implicit_instance_closure) {
|
| - __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry);
|
| + __ CallRuntime(kAllocateImplicitInstanceClosureRuntimeEntry, 3);
|
| __ popq(RAX); // Pop type arguments.
|
| __ popq(RAX); // Pop receiver.
|
| } else {
|
| ASSERT(func.IsNonImplicitClosureFunction());
|
| - __ CallRuntime(kAllocateClosureRuntimeEntry);
|
| + __ CallRuntime(kAllocateClosureRuntimeEntry, 2);
|
| __ popq(RAX); // Pop type arguments.
|
| }
|
| __ popq(RAX); // Pop the function object.
|
| @@ -1405,7 +1405,7 @@
|
| __ movq(R10, R13); // Smi-tagged arguments array length.
|
| PushArgumentsArray(assembler);
|
|
|
| - __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry);
|
| + __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
|
|
|
| // Remove arguments.
|
| __ Drop(4);
|
| @@ -1428,7 +1428,7 @@
|
| __ pushq(ic_reg); // Preserve.
|
| __ pushq(ic_reg); // Argument.
|
| __ pushq(func_reg); // Argument.
|
| - __ CallRuntime(kTraceICCallRuntimeEntry);
|
| + __ CallRuntime(kTraceICCallRuntimeEntry, 2);
|
| __ popq(RAX); // Discard argument;
|
| __ popq(RAX); // Discard argument;
|
| __ popq(ic_reg); // Restore.
|
| @@ -1485,7 +1485,7 @@
|
| __ j(EQUAL, ¬_stepping, Assembler::kNearJump);
|
| __ EnterStubFrame();
|
| __ pushq(RBX);
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ popq(RBX);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
| @@ -1561,7 +1561,7 @@
|
| __ pushq(RCX);
|
| }
|
| __ pushq(RBX); // 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++) {
|
| __ popq(RAX);
|
| @@ -1716,7 +1716,7 @@
|
| __ j(EQUAL, ¬_stepping, Assembler::kNearJump);
|
| __ EnterStubFrame();
|
| __ pushq(RBX); // Preserve IC data object.
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ popq(RBX);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
| @@ -1750,7 +1750,7 @@
|
| __ pushq(R13); // Preserve target function.
|
| __ pushq(RBX); // Preserve IC data object.
|
| __ pushq(R13); // Pass function.
|
| - __ CallRuntime(kCompileFunctionRuntimeEntry);
|
| + __ CallRuntime(kCompileFunctionRuntimeEntry, 1);
|
| __ popq(RAX); // Discard argument.
|
| __ popq(RBX); // Restore IC data object.
|
| __ popq(R13); // Restore target function.
|
| @@ -1786,7 +1786,7 @@
|
| const Immediate& raw_null =
|
| Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| __ pushq(raw_null); // Room for result.
|
| - __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
|
| __ popq(RAX); // Address of original.
|
| __ popq(R10); // Restore arguments.
|
| __ popq(RBX);
|
| @@ -1803,7 +1803,7 @@
|
| __ EnterStubFrame();
|
| __ pushq(RBX); // Preserve IC data for unoptimized call.
|
| __ pushq(raw_null); // Room for result.
|
| - __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry, 0);
|
| __ popq(RAX); // Code object.
|
| __ popq(RBX); // Restore IC data.
|
| __ LeaveFrame();
|
| @@ -1822,7 +1822,7 @@
|
| void StubCode::GenerateBreakpointReturnStub(Assembler* assembler) {
|
| __ EnterStubFrame();
|
| __ pushq(RAX);
|
| - __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry, 0);
|
| __ popq(RAX);
|
| __ LeaveFrame();
|
|
|
| @@ -1837,7 +1837,7 @@
|
| void StubCode::GenerateBreakpointDynamicStub(Assembler* assembler) {
|
| __ EnterStubFrame();
|
| __ pushq(RBX);
|
| - __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry);
|
| + __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry, 0);
|
| __ popq(RBX);
|
| __ LeaveFrame();
|
|
|
| @@ -2089,7 +2089,7 @@
|
| __ pushq(RAX); // arg 1
|
| __ PushObject(Symbols::EqualOperator()); // Target's name.
|
| __ pushq(RBX); // ICData
|
| - __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry);
|
| + __ CallRuntime(kUpdateICDataTwoArgsRuntimeEntry, 4);
|
| __ Drop(4);
|
| __ LeaveFrame();
|
|
|
| @@ -2106,7 +2106,7 @@
|
| __ pushq(R10);
|
| __ pushq(raw_null); // Setup space on stack for return value.
|
| __ pushq(RDI);
|
| - __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry);
|
| + __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry, 1);
|
| __ popq(RAX); // Disard argument.
|
| __ popq(RAX); // Get Code object.
|
| __ popq(R10); // Restore argument descriptor.
|
| @@ -2171,7 +2171,7 @@
|
| __ ReserveAlignedFrameSpace(0);
|
| __ movq(RDI, left);
|
| __ movq(RSI, right);
|
| - __ CallRuntime(kBigintCompareRuntimeEntry);
|
| + __ CallRuntime(kBigintCompareRuntimeEntry, 2);
|
| // Result in RAX, 0 means equal.
|
| __ LeaveFrame();
|
| __ cmpq(RAX, Immediate(0));
|
| @@ -2197,7 +2197,7 @@
|
| __ cmpq(RAX, Immediate(0));
|
| __ j(EQUAL, ¬_stepping, Assembler::kNearJump);
|
| __ EnterStubFrame();
|
| - __ CallRuntime(kSingleStepHandlerRuntimeEntry);
|
| + __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
|
| __ LeaveFrame();
|
| __ Bind(¬_stepping);
|
|
|
|
|