Index: runtime/vm/stub_code_x64.cc |
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc |
index 0c01d6882497e926e3602eee32ba206aad002fb5..c5fa17a831fed0ee18b656d031eeb267781e4736 100644 |
--- a/runtime/vm/stub_code_x64.cc |
+++ b/runtime/vm/stub_code_x64.cc |
@@ -261,7 +261,7 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(R10); // Preserve arguments descriptor array. |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object()); |
+ __ pushq(Immediate(0)); |
__ CallRuntime(kPatchStaticCallRuntimeEntry, 0); |
__ popq(CODE_REG); // Get Code object result. |
__ popq(R10); // Restore arguments descriptor array. |
@@ -284,7 +284,7 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(R10); // Preserve arguments descriptor array. |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object()); |
+ __ pushq(Immediate(0)); |
__ CallRuntime(kFixCallersTargetRuntimeEntry, 0); |
__ popq(CODE_REG); // Get Code object. |
__ popq(R10); // Restore arguments descriptor array. |
@@ -304,7 +304,7 @@ void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
__ movq(CODE_REG, Address(THR, Thread::fix_allocation_stub_code_offset())); |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object()); |
+ __ pushq(Immediate(0)); |
__ CallRuntime(kFixAllocationStubTargetRuntimeEntry, 0); |
__ popq(CODE_REG); // Get Code object. |
__ movq(RAX, FieldAddress(CODE_REG, Code::entry_point_offset())); |
@@ -505,7 +505,7 @@ static void GenerateDispatcherCode(Assembler* assembler, |
__ movq(RDI, FieldAddress(R10, ArgumentsDescriptor::count_offset())); |
__ movq(RAX, Address( |
RBP, RDI, TIMES_HALF_WORD_SIZE, kParamEndSlotFromFp * kWordSize)); |
- __ PushObject(Object::null_object()); // Setup space on stack for result. |
+ __ pushq(Immediate(0)); // Setup space on stack for result. |
__ pushq(RAX); // Receiver. |
__ pushq(RBX); // ICData/MegamorphicCache. |
__ pushq(R10); // Arguments descriptor array. |
@@ -535,7 +535,7 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
__ pushq(R10); |
// Space for the result of the runtime call. |
- __ PushObject(Object::null_object()); |
+ __ pushq(Immediate(0)); |
__ pushq(RAX); // Receiver. |
__ pushq(RBX); // IC data. |
__ pushq(R10); // Arguments descriptor. |
@@ -682,7 +682,7 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// calling into the runtime. |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object()); |
+ __ pushq(Immediate(0)); |
__ pushq(R10); // Array length as Smi. |
__ pushq(RBX); // Element type. |
__ CallRuntime(kAllocateArrayRuntimeEntry, 2); |
@@ -1168,8 +1168,7 @@ void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) { |
__ movq(R13, FieldAddress(R10, ArgumentsDescriptor::count_offset())); |
__ movq(RAX, Address(RBP, R13, TIMES_4, kParamEndSlotFromFp * kWordSize)); |
- __ LoadObject(R12, Object::null_object()); |
- __ pushq(R12); // Setup space on stack for result from noSuchMethod. |
+ __ pushq(Immediate(0)); // Result slot. |
__ pushq(RAX); // Receiver. |
__ pushq(R10); // Arguments descriptor array. |
@@ -1400,7 +1399,6 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ j(NOT_EQUAL, &loop, Assembler::kNearJump); |
__ Comment("IC miss"); |
- __ LoadObject(R13, Object::null_object()); |
// Compute address of arguments (first read number of arguments from |
// arguments descriptor array and then compute address on the stack). |
__ movq(RAX, FieldAddress(R10, ArgumentsDescriptor::count_offset())); |
@@ -1408,7 +1406,7 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ EnterStubFrame(); |
__ pushq(R10); // Preserve arguments descriptor array. |
__ pushq(RBX); // Preserve IC data object. |
- __ pushq(R13); // Setup space on stack for result (target code object). |
+ __ pushq(Immediate(0)); // Result slot. |
// Push call arguments. |
for (intptr_t i = 0; i < num_args; i++) { |
__ movq(RCX, Address(RAX, -kWordSize * i)); |
@@ -1667,14 +1665,10 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) { |
// TOS(0): return address (Dart code). |
void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- // Preserve IC data. |
- __ pushq(RBX); |
- // Room for result. Debugger stub returns address of the |
- // unpatched runtime stub. |
- __ LoadObject(R12, Object::null_object()); |
- __ pushq(R12); // Room for result. |
+ __ pushq(RBX); // Preserve IC data. |
+ __ pushq(Immediate(0)); // Result slot. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
- __ popq(CODE_REG); // Address of original. |
+ __ popq(CODE_REG); // Original stub. |
__ popq(RBX); // Restore IC data. |
__ LeaveStubFrame(); |
@@ -1686,12 +1680,9 @@ void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
// TOS(0): return address (Dart code). |
void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- // Room for result. Debugger stub returns address of the |
- // unpatched runtime stub. |
- __ LoadObject(R12, Object::null_object()); |
- __ pushq(R12); // Room for result. |
+ __ pushq(Immediate(0)); // Result slot. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
- __ popq(CODE_REG); // Address of original. |
+ __ popq(CODE_REG); // Original stub. |
__ LeaveStubFrame(); |
__ movq(RAX, FieldAddress(CODE_REG, Code::entry_point_offset())); |
@@ -1883,10 +1874,9 @@ void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { |
// R10: argument descriptor (preserved). |
void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- __ LoadObject(R12, Object::null_object()); |
- __ pushq(R10); |
- __ pushq(R12); // Setup space on stack for return value. |
- __ pushq(RDI); |
+ __ pushq(R10); // Preserve args descriptor. |
+ __ pushq(Immediate(0)); // Result slot. |
+ __ pushq(RDI); // Arg0: function to optimize |
__ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry, 1); |
__ popq(RAX); // Disard argument. |
__ popq(CODE_REG); // Get Code object. |
@@ -2175,9 +2165,9 @@ void StubCode::GenerateUnlinkedCallStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(RDI); // Preserve receiver. |
- __ PushObject(Object::null_object()); // Result. |
- __ pushq(RDI); // Arg0: Receiver |
- __ pushq(RBX); // Arg1: UnlinkedCall |
+ __ pushq(Immediate(0)); // Result slot. |
+ __ pushq(RDI); // Arg0: Receiver |
+ __ pushq(RBX); // Arg1: UnlinkedCall |
__ CallRuntime(kUnlinkedCallRuntimeEntry, 2); |
__ popq(RBX); |
__ popq(RBX); |
@@ -2216,8 +2206,8 @@ void StubCode::GenerateSingleTargetCallStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(RDI); // Preserve receiver. |
- __ PushObject(Object::null_object()); // Result. |
- __ pushq(RDI); // Arg0: Receiver |
+ __ pushq(Immediate(0)); // Result slot. |
+ __ pushq(RDI); // Arg0: Receiver |
__ CallRuntime(kSingleTargetMissRuntimeEntry, 1); |
__ popq(RBX); |
__ popq(RBX); // result = IC |
@@ -2237,8 +2227,8 @@ void StubCode::GenerateMonomorphicMissStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(RDI); // Preserve receiver. |
- __ PushObject(Object::null_object()); // Result. |
- __ pushq(RDI); // Arg0: Receiver |
+ __ pushq(Immediate(0)); // Result slot. |
+ __ pushq(RDI); // Arg0: Receiver |
__ CallRuntime(kMonomorphicMissRuntimeEntry, 1); |
__ popq(RBX); |
__ popq(RBX); // result = IC |