| 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));
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |