Index: runtime/vm/stub_code_x64.cc |
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc |
index ba8caa245c809c787e331a319157988b8130dfb0..16cee8121fe03f636a1a608d6f59e18b5abb1b09 100644 |
--- a/runtime/vm/stub_code_x64.cc |
+++ b/runtime/vm/stub_code_x64.cc |
@@ -276,7 +276,7 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(R10); // Preserve arguments descriptor array. |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ CallRuntime(kPatchStaticCallRuntimeEntry, 0); |
__ popq(RAX); // Get Code object result. |
__ popq(R10); // Restore arguments descriptor array. |
@@ -296,7 +296,7 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ pushq(R10); // Preserve arguments descriptor array. |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ CallRuntime(kFixCallersTargetRuntimeEntry, 0); |
__ popq(RAX); // Get Code object. |
__ popq(R10); // Restore arguments descriptor array. |
@@ -313,7 +313,7 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ CallRuntime(kFixAllocationStubTargetRuntimeEntry, 0); |
__ popq(RAX); // Get Code object. |
__ movq(RAX, FieldAddress(RAX, Code::instructions_offset())); |
@@ -328,7 +328,7 @@ void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
// R10: smi-tagged argument count, may be zero. |
// RBP[kParamEndSlotFromFp + 1]: last argument. |
static void PushArgumentsArray(Assembler* assembler) { |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
// Allocate array to store arguments of caller. |
__ movq(RBX, R12); // Null element type for raw Array. |
const ExternalLabel array_label(StubCode::AllocateArrayEntryPoint()); |
@@ -547,7 +547,7 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
__ pushq(R10); |
// Space for the result of the runtime call. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ pushq(RAX); // Receiver. |
__ pushq(RBX); // IC data. |
__ pushq(R10); // Arguments descriptor. |
@@ -580,9 +580,6 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
// NOTE: R10 cannot be clobbered here as the caller relies on it being saved. |
// The newly allocated object is returned in RAX. |
void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
- // Must load pool pointer before being able to patch. |
- Register new_pp = R13; |
- __ LoadPoolPointer(new_pp); |
Label slow_case; |
// Compute the size to be allocated, it is based on the array length |
// and is computed as: |
@@ -674,7 +671,7 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// RCX: new object end address. |
// RDI: iterator which initially points to the start of the variable |
// data area to be initialized. |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
__ leaq(RDI, FieldAddress(RAX, sizeof(RawArray))); |
Label done; |
Label init_loop; |
@@ -700,7 +697,7 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// calling into the runtime. |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ pushq(R10); // Array length as Smi. |
__ pushq(RBX); // Element type. |
__ CallRuntime(kAllocateArrayRuntimeEntry, 2); |
@@ -744,7 +741,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// We now load the pool pointer(PP) as we are about to invoke dart code and we |
// could potentially invoke some intrinsic functions which need the PP to be |
// set up. |
- __ LoadPoolPointer(PP); |
+ __ LoadPoolPointer(); |
// If any additional (or fewer) values are pushed, the offsets in |
// kExitLinkSlotFromEntryFp will need to be changed. |
@@ -838,6 +835,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// Restore C++ ABI callee-saved registers. |
__ PopRegisters(CallingConventions::kCalleeSaveCpuRegisters, |
CallingConventions::kCalleeSaveXmmRegisters); |
+ __ set_constant_pool_allowed(false); |
// Restore the frame pointer. |
__ LeaveFrame(); |
@@ -852,7 +850,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// Output: |
// RAX: new allocated RawContext object. |
void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
if (FLAG_inline_alloc) { |
Label slow_case; |
// First compute the rounded instance size. |
@@ -1065,7 +1063,7 @@ void StubCode::GenerateAllocationStubForClass( |
const int kInlineInstanceSize = 12; // In words. |
const intptr_t instance_size = cls.instance_size(); |
ASSERT(instance_size > 0); |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
if (is_cls_parameterized) { |
__ movq(RDX, Address(RSP, kObjectTypeArgumentsOffset)); |
// RDX: instantiated type arguments. |
@@ -1161,7 +1159,7 @@ void StubCode::GenerateAllocationStubForClass( |
// Create a stub frame. |
__ EnterStubFrame(); // Uses PP to access class object. |
__ pushq(R12); // Setup space on stack for return value. |
- __ PushObject(cls, PP); // Push class of object to be allocated. |
+ __ PushObject(cls); // Push class of object to be allocated. |
if (is_cls_parameterized) { |
__ pushq(RDX); // Push type arguments of object to be allocated. |
} else { |
@@ -1194,7 +1192,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(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
__ pushq(R12); // Setup space on stack for result from noSuchMethod. |
__ pushq(RAX); // Receiver. |
__ pushq(R10); // Arguments descriptor array. |
@@ -1281,10 +1279,10 @@ static void EmitFastSmiOp(Assembler* assembler, |
Label done, is_true; |
__ cmpq(RAX, RCX); |
__ j(EQUAL, &is_true, Assembler::kNearJump); |
- __ LoadObject(RAX, Bool::False(), PP); |
+ __ LoadObject(RAX, Bool::False()); |
__ jmp(&done, Assembler::kNearJump); |
__ Bind(&is_true); |
- __ LoadObject(RAX, Bool::True(), PP); |
+ __ LoadObject(RAX, Bool::True()); |
__ Bind(&done); |
break; |
} |
@@ -1452,7 +1450,7 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ j(NOT_EQUAL, &loop, Assembler::kNearJump); |
__ Comment("IC miss"); |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, 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())); |
@@ -1770,7 +1768,7 @@ void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
__ pushq(RBX); |
// Room for result. Debugger stub returns address of the |
// unpatched runtime stub. |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
__ pushq(R12); // Room for result. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
__ popq(RAX); // Address of original. |
@@ -1785,7 +1783,7 @@ void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Room for result. Debugger stub returns address of the |
// unpatched runtime stub. |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
__ pushq(R12); // Room for result. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
__ popq(RAX); // Address of original. |
@@ -1825,9 +1823,9 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
const intptr_t kInstanceOffsetInBytes = 2 * kWordSize; |
const intptr_t kCacheOffsetInBytes = 3 * kWordSize; |
__ movq(RAX, Address(RSP, kInstanceOffsetInBytes)); |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
if (n > 1) { |
- __ LoadClass(R10, RAX, kNoRegister); |
+ __ LoadClass(R10, RAX); |
// Compute instance type arguments into R13. |
Label has_no_type_arguments; |
__ movq(R13, R12); |
@@ -1976,7 +1974,7 @@ void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { |
// R10: argument descriptor (preserved). |
void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- __ LoadObject(R12, Object::null_object(), PP); |
+ __ LoadObject(R12, Object::null_object()); |
__ pushq(R10); |
__ pushq(R12); // Setup space on stack for return value. |
__ pushq(RDI); |
@@ -2122,7 +2120,7 @@ void StubCode::EmitMegamorphicLookup( |
__ jmp(&loop); |
__ Bind(&update); |
- __ AddImmediate(RCX, Immediate(Smi::RawValue(1)), PP); |
+ __ AddImmediate(RCX, Immediate(Smi::RawValue(1))); |
__ Bind(&loop); |
__ andq(RCX, RBX); |
const intptr_t base = Array::data_offset(); |
@@ -2145,7 +2143,7 @@ void StubCode::EmitMegamorphicLookup( |
// TODO(srdjan): Evaluate performance impact of moving the instruction below |
// to the call site, instead of having it here. |
__ AddImmediate( |
- target, Immediate(Instructions::HeaderSize() - kHeapObjectTag), PP); |
+ target, Immediate(Instructions::HeaderSize() - kHeapObjectTag)); |
} |