Index: runtime/vm/stub_code_arm64.cc |
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc |
index fb73f8e74ae7c09f96db337bcef8449106a4d635..36847aeb7ed5f5639e4cebf7d7b9b4812fbd8a18 100644 |
--- a/runtime/vm/stub_code_arm64.cc |
+++ b/runtime/vm/stub_code_arm64.cc |
@@ -52,13 +52,13 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
// Save exit frame information to enable stack walking as we are about |
// to transition to Dart VM C++ code. |
- __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R8, R28, Isolate::vm_tag_offset(), kNoPP); |
- __ CompareImmediate(R8, VMTag::kDartTagId, kNoPP); |
+ __ LoadFromOffset(R8, R28, Isolate::vm_tag_offset()); |
+ __ CompareImmediate(R8, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
__ Bind(&ok); |
@@ -66,7 +66,7 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
#endif |
// Mark that the isolate is executing VM code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
// Reserve space for arguments and align frame before entering C++ world. |
// NativeArguments are passed in registers. |
@@ -91,15 +91,15 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
__ add(R2, ZR, Operand(R4, LSL, 3)); |
__ add(R2, FP, Operand(R2)); // Compute argv. |
// Set argv in NativeArguments. |
- __ AddImmediate(R2, R2, exitframe_last_param_slot_from_fp * kWordSize, kNoPP); |
+ __ AddImmediate(R2, R2, exitframe_last_param_slot_from_fp * kWordSize); |
ASSERT(retval_offset == 3 * kWordSize); |
- __ AddImmediate(R3, R2, kWordSize, kNoPP); |
+ __ AddImmediate(R3, R2, kWordSize); |
- __ StoreToOffset(R0, SP, thread_offset, kNoPP); |
- __ StoreToOffset(R1, SP, argc_tag_offset, kNoPP); |
- __ StoreToOffset(R2, SP, argv_offset, kNoPP); |
- __ StoreToOffset(R3, SP, retval_offset, kNoPP); |
+ __ StoreToOffset(R0, SP, thread_offset); |
+ __ StoreToOffset(R1, SP, argc_tag_offset); |
+ __ StoreToOffset(R2, SP, argv_offset); |
+ __ StoreToOffset(R3, SP, retval_offset); |
__ mov(R0, SP); // Pass the pointer to the NativeArguments. |
// We are entering runtime code, so the C stack pointer must be restored from |
@@ -117,11 +117,11 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
// Retval is next to 1st argument. |
// Mark that the isolate is executing Dart code. |
- __ LoadImmediate(R2, VMTag::kDartTagId, kNoPP); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ LoadImmediate(R2, VMTag::kDartTagId); |
+ __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
- __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
__ LeaveStubFrame(); |
__ ret(); |
@@ -152,13 +152,13 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
// Save exit frame information to enable stack walking as we are about |
// to transition to native code. |
- __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset(), kNoPP); |
- __ CompareImmediate(R6, VMTag::kDartTagId, kNoPP); |
+ __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); |
+ __ CompareImmediate(R6, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
__ Bind(&ok); |
@@ -166,7 +166,7 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
#endif |
// Mark that the isolate is executing Native code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
// Reserve space for the native arguments structure passed on the stack (the |
// outgoing pointer parameter to the native arguments structure is passed in |
@@ -190,15 +190,15 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
// Set retval in NativeArgs. |
ASSERT(retval_offset == 3 * kWordSize); |
- __ AddImmediate(R3, FP, 2 * kWordSize, kNoPP); |
+ __ AddImmediate(R3, FP, 2 * kWordSize); |
// Passing the structure by value as in runtime calls would require changing |
// Dart API for native functions. |
// For now, space is reserved on the stack and we pass a pointer to it. |
- __ StoreToOffset(R0, SP, thread_offset, kNoPP); |
- __ StoreToOffset(R1, SP, argc_tag_offset, kNoPP); |
- __ StoreToOffset(R2, SP, argv_offset, kNoPP); |
- __ StoreToOffset(R3, SP, retval_offset, kNoPP); |
+ __ StoreToOffset(R0, SP, thread_offset); |
+ __ StoreToOffset(R1, SP, argc_tag_offset); |
+ __ StoreToOffset(R2, SP, argv_offset); |
+ __ StoreToOffset(R3, SP, retval_offset); |
__ mov(R0, SP); // Pass the pointer to the NativeArguments. |
// We are entering runtime code, so the C stack pointer must be restored from |
@@ -213,10 +213,10 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
uword entry = reinterpret_cast<uword>(NativeEntry::NativeCallWrapper); |
entry = Simulator::RedirectExternalReference( |
entry, Simulator::kNativeCall, NativeEntry::kNumCallWrapperArguments); |
- __ LoadImmediate(R2, entry, kNoPP); |
+ __ LoadImmediate(R2, entry); |
__ blr(R2); |
#else |
- __ BranchLink(&NativeEntry::NativeCallWrapperLabel(), kNoPP); |
+ __ BranchLink(&NativeEntry::NativeCallWrapperLabel()); |
#endif |
// Restore SP and CSP. |
@@ -224,11 +224,11 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
__ mov(CSP, R26); |
// Mark that the isolate is executing Dart code. |
- __ LoadImmediate(R2, VMTag::kDartTagId, kNoPP); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ LoadImmediate(R2, VMTag::kDartTagId); |
+ __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
- __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
__ LeaveStubFrame(); |
__ ret(); |
@@ -254,13 +254,13 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
// Save exit frame information to enable stack walking as we are about |
// to transition to native code. |
- __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset(), kNoPP); |
- __ CompareImmediate(R6, VMTag::kDartTagId, kNoPP); |
+ __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); |
+ __ CompareImmediate(R6, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
__ Bind(&ok); |
@@ -268,7 +268,7 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
#endif |
// Mark that the isolate is executing Native code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
// Reserve space for the native arguments structure passed on the stack (the |
// outgoing pointer parameter to the native arguments structure is passed in |
@@ -292,15 +292,15 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
// Set retval in NativeArgs. |
ASSERT(retval_offset == 3 * kWordSize); |
- __ AddImmediate(R3, FP, 2 * kWordSize, kNoPP); |
+ __ AddImmediate(R3, FP, 2 * kWordSize); |
// Passing the structure by value as in runtime calls would require changing |
// Dart API for native functions. |
// For now, space is reserved on the stack and we pass a pointer to it. |
- __ StoreToOffset(R0, SP, thread_offset, kNoPP); |
- __ StoreToOffset(R1, SP, argc_tag_offset, kNoPP); |
- __ StoreToOffset(R2, SP, argv_offset, kNoPP); |
- __ StoreToOffset(R3, SP, retval_offset, kNoPP); |
+ __ StoreToOffset(R0, SP, thread_offset); |
+ __ StoreToOffset(R1, SP, argc_tag_offset); |
+ __ StoreToOffset(R2, SP, argv_offset); |
+ __ StoreToOffset(R3, SP, retval_offset); |
__ mov(R0, SP); // Pass the pointer to the NativeArguments. |
// We are entering runtime code, so the C stack pointer must be restored from |
@@ -317,11 +317,11 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
__ mov(CSP, R26); |
// Mark that the isolate is executing Dart code. |
- __ LoadImmediate(R2, VMTag::kDartTagId, kNoPP); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset(), kNoPP); |
+ __ LoadImmediate(R2, VMTag::kDartTagId); |
+ __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
- __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
__ LeaveStubFrame(); |
__ ret(); |
@@ -336,7 +336,7 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Setup space on stack for return value and preserve arguments descriptor. |
__ Push(R4); |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ CallRuntime(kPatchStaticCallRuntimeEntry, 0); |
// Get Code object result and restore arguments descriptor array. |
__ Pop(R0); |
@@ -344,8 +344,8 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
// Remove the stub frame. |
__ LeaveStubFrame(); |
// Jump to the dart function. |
- __ LoadFieldFromOffset(R0, R0, Code::instructions_offset(), kNoPP); |
- __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ __ LoadFieldFromOffset(R0, R0, Code::instructions_offset()); |
+ __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R0); |
} |
@@ -359,7 +359,7 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Setup space on stack for return value and preserve arguments descriptor. |
__ Push(R4); |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ CallRuntime(kFixCallersTargetRuntimeEntry, 0); |
// Get Code object result and restore arguments descriptor array. |
__ Pop(R0); |
@@ -367,8 +367,8 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
// Remove the stub frame. |
__ LeaveStubFrame(); |
// Jump to the dart function. |
- __ LoadFieldFromOffset(R0, R0, Code::instructions_offset(), kNoPP); |
- __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ __ LoadFieldFromOffset(R0, R0, Code::instructions_offset()); |
+ __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R0); |
} |
@@ -378,15 +378,15 @@ 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); |
// Get Code object result. |
__ Pop(R0); |
// Remove the stub frame. |
__ LeaveStubFrame(); |
// Jump to the dart function. |
- __ LoadFieldFromOffset(R0, R0, Code::instructions_offset(), kNoPP); |
- __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ __ LoadFieldFromOffset(R0, R0, Code::instructions_offset()); |
+ __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R0); |
} |
@@ -396,17 +396,17 @@ void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
// FP[kParamEndSlotFromFp + 1]: last argument. |
static void PushArgumentsArray(Assembler* assembler) { |
// Allocate array to store arguments of caller. |
- __ LoadObject(R1, Object::null_object(), PP); |
+ __ LoadObject(R1, Object::null_object()); |
// R1: null element type for raw Array. |
// R2: smi-tagged argument count, may be zero. |
const ExternalLabel array_label(StubCode::AllocateArrayEntryPoint()); |
- __ BranchLink(&array_label, PP); |
+ __ BranchLink(&array_label); |
// R0: newly allocated array. |
// R2: smi-tagged argument count, may be zero (was preserved by the stub). |
__ Push(R0); // Array is in R0 and on top of stack. |
__ add(R1, FP, Operand(R2, LSL, 2)); |
- __ AddImmediate(R1, R1, kParamEndSlotFromFp * kWordSize, PP); |
- __ AddImmediate(R3, R0, Array::data_offset() - kHeapObjectTag, PP); |
+ __ AddImmediate(R1, R1, kParamEndSlotFromFp * kWordSize); |
+ __ AddImmediate(R3, R0, Array::data_offset() - kHeapObjectTag); |
// R1: address of first argument on stack. |
// R3: address of first argument in array. |
@@ -415,9 +415,9 @@ static void PushArgumentsArray(Assembler* assembler) { |
__ b(&loop_exit, LE); |
__ Bind(&loop); |
__ ldr(R7, Address(R1)); |
- __ AddImmediate(R1, R1, -kWordSize, PP); |
- __ AddImmediate(R3, R3, kWordSize, PP); |
- __ AddImmediateSetFlags(R2, R2, -Smi::RawValue(1), PP); |
+ __ AddImmediate(R1, R1, -kWordSize); |
+ __ AddImmediate(R3, R3, kWordSize); |
+ __ AddImmediateSetFlags(R2, R2, -Smi::RawValue(1)); |
__ str(R7, Address(R3, -kWordSize)); |
__ b(&loop, GE); |
__ Bind(&loop_exit); |
@@ -487,7 +487,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
if (preserve_result) { |
// Restore result into R1 temporarily. |
- __ LoadFromOffset(R1, FP, saved_result_slot_from_fp * kWordSize, kNoPP); |
+ __ LoadFromOffset(R1, FP, saved_result_slot_from_fp * kWordSize); |
} |
// There is a Dart Frame on the stack. We must restore PP and leave frame. |
@@ -507,7 +507,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
__ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1); |
if (preserve_result) { |
// Restore result into R1. |
- __ LoadFromOffset(R1, FP, kFirstLocalSlotFromFp * kWordSize, kNoPP); |
+ __ LoadFromOffset(R1, FP, kFirstLocalSlotFromFp * kWordSize); |
} |
// Code above cannot cause GC. |
// There is a Dart Frame on the stack. We must restore PP and leave frame. |
@@ -542,7 +542,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
void StubCode::GenerateDeoptimizeLazyStub(Assembler* assembler) { |
// Correct return address to point just after the call that is being |
// deoptimized. |
- __ AddImmediate(LR, LR, -CallPattern::kLengthInBytes, kNoPP); |
+ __ AddImmediate(LR, LR, -CallPattern::kLengthInBytes); |
GenerateDeoptimizationSequence(assembler, true); // Preserve R0. |
} |
@@ -557,15 +557,15 @@ static void GenerateDispatcherCode(Assembler* assembler, |
__ Comment("NoSuchMethodDispatch"); |
// When lazily generated invocation dispatchers are disabled, the |
// miss-handler may return null. |
- __ CompareObject(R0, Object::null_object(), PP); |
+ __ CompareObject(R0, Object::null_object()); |
__ b(call_target_function, NE); |
__ EnterStubFrame(); |
// Load the receiver. |
- __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset()); |
__ add(TMP, FP, Operand(R2, LSL, 2)); // R2 is Smi. |
- __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize, kNoPP); |
- __ PushObject(Object::null_object(), PP); |
+ __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize); |
+ __ PushObject(Object::null_object()); |
__ Push(R6); |
__ Push(R5); |
__ Push(R4); |
@@ -584,9 +584,9 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Load the receiver. |
- __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset()); |
__ add(TMP, FP, Operand(R2, LSL, 2)); // R2 is Smi. |
- __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize, kNoPP); |
+ __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize); |
// Preserve IC data and arguments descriptor. |
__ Push(R5); |
@@ -596,7 +596,7 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
// Push the receiver. |
// Push IC data object. |
// Push arguments descriptor array. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ Push(R6); |
__ Push(R5); |
__ Push(R4); |
@@ -618,8 +618,8 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
} |
// Tail-call to target function. |
- __ LoadFieldFromOffset(R2, R0, Function::instructions_offset(), kNoPP); |
- __ AddImmediate(R2, R2, Instructions::HeaderSize() - kHeapObjectTag, PP); |
+ __ LoadFieldFromOffset(R2, R0, Function::instructions_offset()); |
+ __ AddImmediate(R2, R2, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R2); |
} |
@@ -649,11 +649,11 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// Check for maximum allowed length. |
const intptr_t max_len = |
reinterpret_cast<intptr_t>(Smi::New(Array::kMaxElements)); |
- __ CompareImmediate(R2, max_len, kNoPP); |
+ __ CompareImmediate(R2, max_len); |
__ b(&slow_case, GT); |
const intptr_t cid = kArrayCid; |
- __ MaybeTraceAllocation(kArrayCid, R4, kNoPP, &slow_case, |
+ __ MaybeTraceAllocation(kArrayCid, R4, &slow_case, |
/* inline_isolate = */ false); |
Heap::Space space = Heap::SpaceForAllocation(cid); |
@@ -665,9 +665,9 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// R1: array element type. |
// R2: array length as Smi. |
// R8: heap. |
- __ LoadFromOffset(R0, R8, Heap::TopOffset(space), kNoPP); |
+ __ LoadFromOffset(R0, R8, Heap::TopOffset(space)); |
intptr_t fixed_size = sizeof(RawArray) + kObjectAlignment - 1; |
- __ LoadImmediate(R3, fixed_size, kNoPP); |
+ __ LoadImmediate(R3, fixed_size); |
__ add(R3, R3, Operand(R2, LSL, 2)); // R2 is Smi. |
ASSERT(kSmiTagShift == 1); |
__ andi(R3, R3, Immediate(~(kObjectAlignment - 1))); |
@@ -683,7 +683,7 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// R3: array size. |
// R7: potential next object start. |
// R8: heap. |
- __ LoadFromOffset(TMP, R8, Heap::EndOffset(space), kNoPP); |
+ __ LoadFromOffset(TMP, R8, Heap::EndOffset(space)); |
__ CompareRegisters(R7, TMP); |
__ b(&slow_case, CS); // Branch if unsigned higher or equal. |
@@ -693,9 +693,9 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// R3: array size. |
// R7: potential next object start. |
// R8: heap. |
- __ StoreToOffset(R7, R8, Heap::TopOffset(space), kNoPP); |
+ __ StoreToOffset(R7, R8, Heap::TopOffset(space)); |
__ add(R0, R0, Operand(kHeapObjectTag)); |
- __ UpdateAllocationStatsWithSize(cid, R3, kNoPP, space, |
+ __ UpdateAllocationStatsWithSize(cid, R3, space, |
/* inline_isolate = */ false); |
// R0: new object start as a tagged pointer. |
@@ -706,10 +706,10 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// Store the type argument field. |
__ StoreIntoObjectOffsetNoBarrier( |
- R0, Array::type_arguments_offset(), R1, PP); |
+ R0, Array::type_arguments_offset(), R1); |
// Set the length field. |
- __ StoreIntoObjectOffsetNoBarrier(R0, Array::length_offset(), R2, PP); |
+ __ StoreIntoObjectOffsetNoBarrier(R0, Array::length_offset(), R2); |
// Calculate the size tag. |
// R0: new object start as a tagged pointer. |
@@ -717,32 +717,32 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
// R3: array size. |
// R7: new object end address. |
const intptr_t shift = RawObject::kSizeTagPos - kObjectAlignmentLog2; |
- __ CompareImmediate(R3, RawObject::SizeTag::kMaxSizeTag, kNoPP); |
+ __ CompareImmediate(R3, RawObject::SizeTag::kMaxSizeTag); |
// If no size tag overflow, shift R1 left, else set R1 to zero. |
__ LslImmediate(TMP, R3, shift); |
__ csel(R1, TMP, R1, LS); |
__ csel(R1, ZR, R1, HI); |
// Get the class index and insert it into the tags. |
- __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid), kNoPP); |
+ __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); |
__ orr(R1, R1, Operand(TMP)); |
- __ StoreFieldToOffset(R1, R0, Array::tags_offset(), kNoPP); |
+ __ StoreFieldToOffset(R1, R0, Array::tags_offset()); |
// Initialize all array elements to raw_null. |
// R0: new object start as a tagged pointer. |
// R7: new object end address. |
// R2: array length as Smi. |
- __ AddImmediate(R1, R0, Array::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R1, R0, Array::data_offset() - kHeapObjectTag); |
// R1: iterator which initially points to the start of the variable |
// data area to be initialized. |
- __ LoadObject(TMP, Object::null_object(), PP); |
+ __ LoadObject(TMP, Object::null_object()); |
Label loop, done; |
__ Bind(&loop); |
// TODO(cshapiro): StoreIntoObjectNoBarrier |
__ CompareRegisters(R1, R7); |
__ b(&done, CS); |
__ str(TMP, Address(R1)); // Store if unsigned lower. |
- __ AddImmediate(R1, R1, kWordSize, kNoPP); |
+ __ AddImmediate(R1, R1, kWordSize); |
__ b(&loop); // Loop until R1 == R7. |
__ Bind(&done); |
@@ -759,7 +759,7 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
// Push array length as Smi and element type. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ Push(R2); |
__ Push(R1); |
__ CallRuntime(kAllocateArrayRuntimeEntry, 2); |
@@ -805,7 +805,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(); |
// Set up THR, which caches the current thread in Dart code. |
if (THR != R3) { |
@@ -815,41 +815,41 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
__ LoadIsolate(R5); |
// Save the current VMTag on the stack. |
- __ LoadFromOffset(R4, R5, Isolate::vm_tag_offset(), PP); |
+ __ LoadFromOffset(R4, R5, Isolate::vm_tag_offset()); |
__ Push(R4); |
// Mark that the isolate is executing Dart code. |
- __ LoadImmediate(R6, VMTag::kDartTagId, PP); |
- __ StoreToOffset(R6, R5, Isolate::vm_tag_offset(), PP); |
+ __ LoadImmediate(R6, VMTag::kDartTagId); |
+ __ StoreToOffset(R6, R5, Isolate::vm_tag_offset()); |
// Save top resource and top exit frame info. Use R6 as a temporary register. |
// StackFrameIterator reads the top exit frame info saved in this frame. |
- __ LoadFromOffset(R6, THR, Thread::top_resource_offset(), PP); |
- __ StoreToOffset(ZR, THR, Thread::top_resource_offset(), PP); |
+ __ LoadFromOffset(R6, THR, Thread::top_resource_offset()); |
+ __ StoreToOffset(ZR, THR, Thread::top_resource_offset()); |
__ Push(R6); |
- __ LoadFromOffset(R6, THR, Thread::top_exit_frame_info_offset(), PP); |
- __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset(), PP); |
+ __ LoadFromOffset(R6, THR, Thread::top_exit_frame_info_offset()); |
+ __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
// kExitLinkSlotFromEntryFp must be kept in sync with the code below. |
ASSERT(kExitLinkSlotFromEntryFp == -21); |
__ Push(R6); |
// Load arguments descriptor array into R4, which is passed to Dart code. |
- __ LoadFromOffset(R4, R1, VMHandles::kOffsetOfRawPtrInHandle, PP); |
+ __ LoadFromOffset(R4, R1, VMHandles::kOffsetOfRawPtrInHandle); |
// Load number of arguments into S5. |
- __ LoadFieldFromOffset(R5, R4, ArgumentsDescriptor::count_offset(), PP); |
+ __ LoadFieldFromOffset(R5, R4, ArgumentsDescriptor::count_offset()); |
__ SmiUntag(R5); |
// Compute address of 'arguments array' data area into R2. |
- __ LoadFromOffset(R2, R2, VMHandles::kOffsetOfRawPtrInHandle, PP); |
- __ AddImmediate(R2, R2, Array::data_offset() - kHeapObjectTag, PP); |
+ __ LoadFromOffset(R2, R2, VMHandles::kOffsetOfRawPtrInHandle); |
+ __ AddImmediate(R2, R2, Array::data_offset() - kHeapObjectTag); |
// Set up arguments for the Dart call. |
Label push_arguments; |
Label done_push_arguments; |
__ cmp(R5, Operand(0)); |
__ b(&done_push_arguments, EQ); // check if there are arguments. |
- __ LoadImmediate(R1, 0, PP); |
+ __ LoadImmediate(R1, 0); |
__ Bind(&push_arguments); |
__ ldr(R3, Address(R2)); |
__ Push(R3); |
@@ -864,23 +864,23 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
__ Comment("InvokeDartCodeStub return"); |
// Restore constant pool pointer after return. |
- __ LoadPoolPointer(PP); |
+ __ LoadPoolPointer(); |
// Get rid of arguments pushed on the stack. |
- __ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize, PP); |
+ __ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize); |
__ LoadIsolate(R28); |
// Restore the saved top exit frame info and top resource back into the |
// Isolate structure. Uses R6 as a temporary register for this. |
__ Pop(R6); |
- __ StoreToOffset(R6, THR, Thread::top_exit_frame_info_offset(), PP); |
+ __ StoreToOffset(R6, THR, Thread::top_exit_frame_info_offset()); |
__ Pop(R6); |
- __ StoreToOffset(R6, THR, Thread::top_resource_offset(), PP); |
+ __ StoreToOffset(R6, THR, Thread::top_resource_offset()); |
// Restore the current VMTag from the stack. |
__ Pop(R4); |
- __ StoreToOffset(R4, R28, Isolate::vm_tag_offset(), PP); |
+ __ StoreToOffset(R4, R28, Isolate::vm_tag_offset()); |
// Restore the bottom 64-bits of callee-saved V registers. |
for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) { |
@@ -897,6 +897,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// using it as the stack pointer. |
__ ldr(r, Address(SP, 1 * kWordSize, Address::PostIndex)); |
} |
+ __ set_constant_pool_allowed(false); |
// Restore the frame pointer and C stack pointer and return. |
__ LeaveFrame(); |
@@ -916,7 +917,7 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
// First compute the rounded instance size. |
// R1: number of context variables. |
intptr_t fixed_size = sizeof(RawContext) + kObjectAlignment - 1; |
- __ LoadImmediate(R2, fixed_size, kNoPP); |
+ __ LoadImmediate(R2, fixed_size); |
__ add(R2, R2, Operand(R1, LSL, 3)); |
ASSERT(kSmiTagShift == 1); |
__ andi(R2, R2, Immediate(~(kObjectAlignment - 1))); |
@@ -953,7 +954,7 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
// R5: heap. |
__ str(R3, Address(R5, Heap::TopOffset(space))); |
__ add(R0, R0, Operand(kHeapObjectTag)); |
- __ UpdateAllocationStatsWithSize(cid, R2, kNoPP, space, |
+ __ UpdateAllocationStatsWithSize(cid, R2, space, |
/* inline_isolate = */ false); |
// Calculate the size tag. |
@@ -961,7 +962,7 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
// R1: number of context variables. |
// R2: object size. |
const intptr_t shift = RawObject::kSizeTagPos - kObjectAlignmentLog2; |
- __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag, kNoPP); |
+ __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); |
// If no size tag overflow, shift R2 left, else set R2 to zero. |
__ LslImmediate(TMP, R2, shift); |
__ csel(R2, TMP, R2, LS); |
@@ -969,20 +970,20 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
// Get the class index and insert it into the tags. |
// R2: size and bit tags. |
- __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid), kNoPP); |
+ __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); |
__ orr(R2, R2, Operand(TMP)); |
- __ StoreFieldToOffset(R2, R0, Context::tags_offset(), kNoPP); |
+ __ StoreFieldToOffset(R2, R0, Context::tags_offset()); |
// Setup up number of context variables field. |
// R0: new object. |
// R1: number of context variables as integer value (not object). |
- __ StoreFieldToOffset(R1, R0, Context::num_variables_offset(), kNoPP); |
+ __ StoreFieldToOffset(R1, R0, Context::num_variables_offset()); |
// Setup the parent field. |
// R0: new object. |
// R1: number of context variables. |
- __ LoadObject(R2, Object::null_object(), PP); |
- __ StoreFieldToOffset(R2, R0, Context::parent_offset(), kNoPP); |
+ __ LoadObject(R2, Object::null_object()); |
+ __ StoreFieldToOffset(R2, R0, Context::parent_offset()); |
// Initialize the context variables. |
// R0: new object. |
@@ -990,7 +991,7 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
// R2: raw null. |
Label loop, done; |
__ AddImmediate( |
- R3, R0, Context::variable_offset(0) - kHeapObjectTag, kNoPP); |
+ R3, R0, Context::variable_offset(0) - kHeapObjectTag); |
__ Bind(&loop); |
__ subs(R1, R1, Operand(1)); |
__ b(&done, MI); |
@@ -1009,7 +1010,7 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Setup space on stack for return value. |
__ SmiTag(R1); |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ Push(R1); |
__ CallRuntime(kAllocateContextRuntimeEntry, 1); // Allocate context. |
__ Drop(1); // Pop number of context variables argument. |
@@ -1030,7 +1031,7 @@ void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) { |
Label add_to_buffer; |
// Check whether this object has already been remembered. Skip adding to the |
// store buffer if the object is in the store buffer already. |
- __ LoadFieldFromOffset(TMP, R0, Object::tags_offset(), kNoPP); |
+ __ LoadFieldFromOffset(TMP, R0, Object::tags_offset()); |
__ tsti(TMP, Immediate(1 << RawObject::kRememberedBit)); |
__ b(&add_to_buffer, EQ); |
__ ret(); |
@@ -1042,24 +1043,22 @@ void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) { |
__ Push(R3); |
__ orri(R2, TMP, Immediate(1 << RawObject::kRememberedBit)); |
- __ StoreFieldToOffset(R2, R0, Object::tags_offset(), kNoPP); |
+ __ StoreFieldToOffset(R2, R0, Object::tags_offset()); |
// Load the StoreBuffer block out of the thread. Then load top_ out of the |
// StoreBufferBlock and add the address to the pointers_. |
- __ LoadFromOffset(R1, THR, Thread::store_buffer_block_offset(), kNoPP); |
- __ LoadFromOffset(R2, R1, StoreBufferBlock::top_offset(), |
- kNoPP, kUnsignedWord); |
+ __ LoadFromOffset(R1, THR, Thread::store_buffer_block_offset()); |
+ __ LoadFromOffset(R2, R1, StoreBufferBlock::top_offset(), kUnsignedWord); |
__ add(R3, R1, Operand(R2, LSL, 3)); |
- __ StoreToOffset(R0, R3, StoreBufferBlock::pointers_offset(), kNoPP); |
+ __ StoreToOffset(R0, R3, StoreBufferBlock::pointers_offset()); |
// Increment top_ and check for overflow. |
// R2: top_. |
// R1: StoreBufferBlock. |
Label L; |
__ add(R2, R2, Operand(1)); |
- __ StoreToOffset(R2, R1, StoreBufferBlock::top_offset(), |
- kNoPP, kUnsignedWord); |
- __ CompareImmediate(R2, StoreBufferBlock::kSize, kNoPP); |
+ __ StoreToOffset(R2, R1, StoreBufferBlock::top_offset(), kUnsignedWord); |
+ __ CompareImmediate(R2, StoreBufferBlock::kSize); |
// Restore values. |
__ Pop(R3); |
__ Pop(R2); |
@@ -1110,13 +1109,13 @@ void StubCode::GenerateAllocationStubForClass( |
// R1: instantiated type arguments (if is_cls_parameterized). |
Heap* heap = Isolate::Current()->heap(); |
Heap::Space space = Heap::SpaceForAllocation(cls.id()); |
- __ LoadImmediate(R5, heap->TopAddress(space), kNoPP); |
+ __ LoadImmediate(R5, heap->TopAddress(space)); |
__ ldr(R2, Address(R5)); |
- __ AddImmediate(R3, R2, instance_size, kNoPP); |
+ __ AddImmediate(R3, R2, instance_size); |
// Check if the allocation fits into the remaining space. |
// R2: potential new object start. |
// R3: potential next object start. |
- __ LoadImmediate(TMP, heap->EndAddress(space), kNoPP); |
+ __ LoadImmediate(TMP, heap->EndAddress(space)); |
__ ldr(TMP, Address(TMP)); |
__ CompareRegisters(R3, TMP); |
if (FLAG_use_slow_path) { |
@@ -1125,7 +1124,7 @@ void StubCode::GenerateAllocationStubForClass( |
__ b(&slow_case, CS); // Unsigned higher or equal. |
} |
__ str(R3, Address(R5)); |
- __ UpdateAllocationStats(cls.id(), kNoPP, space); |
+ __ UpdateAllocationStats(cls.id(), space); |
// R2: new object start. |
// R3: next object start. |
@@ -1135,11 +1134,11 @@ void StubCode::GenerateAllocationStubForClass( |
tags = RawObject::SizeTag::update(instance_size, tags); |
ASSERT(cls.id() != kIllegalCid); |
tags = RawObject::ClassIdTag::update(cls.id(), tags); |
- __ LoadImmediate(R0, tags, kNoPP); |
- __ StoreToOffset(R0, R2, Instance::tags_offset(), kNoPP); |
+ __ LoadImmediate(R0, tags); |
+ __ StoreToOffset(R0, R2, Instance::tags_offset()); |
// Initialize the remaining words of the object. |
- __ LoadObject(R0, Object::null_object(), PP); |
+ __ LoadObject(R0, Object::null_object()); |
// R0: raw null. |
// R2: new object start. |
@@ -1152,10 +1151,10 @@ void StubCode::GenerateAllocationStubForClass( |
for (intptr_t current_offset = Instance::NextFieldOffset(); |
current_offset < instance_size; |
current_offset += kWordSize) { |
- __ StoreToOffset(R0, R2, current_offset, kNoPP); |
+ __ StoreToOffset(R0, R2, current_offset); |
} |
} else { |
- __ AddImmediate(R4, R2, Instance::NextFieldOffset(), kNoPP); |
+ __ AddImmediate(R4, R2, Instance::NextFieldOffset()); |
// Loop until the whole object is initialized. |
// R0: raw null. |
// R2: new object. |
@@ -1168,14 +1167,14 @@ void StubCode::GenerateAllocationStubForClass( |
__ CompareRegisters(R4, R3); |
__ b(&done, CS); |
__ str(R0, Address(R4)); |
- __ AddImmediate(R4, R4, kWordSize, kNoPP); |
+ __ AddImmediate(R4, R4, kWordSize); |
__ b(&init_loop); |
__ Bind(&done); |
} |
if (is_cls_parameterized) { |
// R1: new object type arguments. |
// Set the type arguments in the new object. |
- __ StoreToOffset(R1, R2, cls.type_arguments_field_offset(), kNoPP); |
+ __ StoreToOffset(R1, R2, cls.type_arguments_field_offset()); |
} |
// Done allocating and initializing the instance. |
// R2: new object still missing its heap tag. |
@@ -1191,14 +1190,14 @@ void StubCode::GenerateAllocationStubForClass( |
// calling into the runtime. |
__ EnterStubFrame(); // Uses pool pointer to pass cls to runtime. |
// Setup space on stack for return value. |
- __ PushObject(Object::null_object(), PP); |
- __ PushObject(cls, PP); // Push class of object to be allocated. |
+ __ PushObject(Object::null_object()); |
+ __ PushObject(cls); // Push class of object to be allocated. |
if (is_cls_parameterized) { |
// Push type arguments. |
__ Push(R1); |
} else { |
// Push null type arguments. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
} |
__ CallRuntime(kAllocateObjectRuntimeEntry, 2); // Allocate object. |
__ Drop(2); // Pop arguments. |
@@ -1223,14 +1222,14 @@ void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Load the receiver. |
- __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R2, R4, ArgumentsDescriptor::count_offset()); |
__ add(TMP, FP, Operand(R2, LSL, 2)); // R2 is Smi. |
- __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize, kNoPP); |
+ __ LoadFromOffset(R6, TMP, kParamEndSlotFromFp * kWordSize); |
// Push space for the return value. |
// Push the receiver. |
// Push arguments descriptor array. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ Push(R6); |
__ Push(R4); |
@@ -1264,10 +1263,10 @@ void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) { |
__ LeaveStubFrame(); |
} |
__ LoadFieldFromOffset( |
- R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord); |
+ R7, func_reg, Function::usage_counter_offset(), kWord); |
__ add(R7, R7, Operand(1)); |
__ StoreFieldToOffset( |
- R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord); |
+ R7, func_reg, Function::usage_counter_offset(), kWord); |
} |
@@ -1279,12 +1278,12 @@ void StubCode::GenerateUsageCounterIncrement(Assembler* assembler, |
Register func_reg = temp_reg; |
ASSERT(temp_reg == R6); |
__ Comment("Increment function counter"); |
- __ LoadFieldFromOffset(func_reg, ic_reg, ICData::owner_offset(), kNoPP); |
+ __ LoadFieldFromOffset(func_reg, ic_reg, ICData::owner_offset()); |
__ LoadFieldFromOffset( |
- R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord); |
- __ AddImmediate(R7, R7, 1, kNoPP); |
+ R7, func_reg, Function::usage_counter_offset(), kWord); |
+ __ AddImmediate(R7, R7, 1); |
__ StoreFieldToOffset( |
- R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord); |
+ R7, func_reg, Function::usage_counter_offset(), kWord); |
} |
} |
@@ -1321,8 +1320,8 @@ static void EmitFastSmiOp(Assembler* assembler, |
} |
case Token::kEQ: { |
__ CompareRegisters(R0, R1); |
- __ LoadObject(R0, Bool::True(), PP); |
- __ LoadObject(R1, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::True()); |
+ __ LoadObject(R1, Bool::False()); |
__ csel(R0, R1, R0, NE); |
break; |
} |
@@ -1336,19 +1335,19 @@ static void EmitFastSmiOp(Assembler* assembler, |
} |
// R5: IC data object (preserved). |
- __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset()); |
// R6: ic_data_array with check entries: classes and target functions. |
- __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag); |
// R6: points directly to the first ic data array element. |
#if defined(DEBUG) |
// Check that first entry is for Smi/Smi. |
Label error, ok; |
const intptr_t imm_smi_cid = reinterpret_cast<intptr_t>(Smi::New(kSmiCid)); |
__ ldr(R1, Address(R6, 0)); |
- __ CompareImmediate(R1, imm_smi_cid, kNoPP); |
+ __ CompareImmediate(R1, imm_smi_cid); |
__ b(&error, NE); |
__ ldr(R1, Address(R6, kWordSize)); |
- __ CompareImmediate(R1, imm_smi_cid, kNoPP); |
+ __ CompareImmediate(R1, imm_smi_cid); |
__ b(&ok, EQ); |
__ Bind(&error); |
__ Stop("Incorrect IC data"); |
@@ -1357,11 +1356,11 @@ static void EmitFastSmiOp(Assembler* assembler, |
if (FLAG_optimization_counter_threshold >= 0) { |
const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize; |
// Update counter. |
- __ LoadFromOffset(R1, R6, count_offset, kNoPP); |
+ __ LoadFromOffset(R1, R6, count_offset); |
__ adds(R1, R1, Operand(Smi::RawValue(1))); |
- __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP); |
+ __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue)); |
__ csel(R1, R2, R1, VS); // Overflow. |
- __ StoreToOffset(R1, R6, count_offset, kNoPP); |
+ __ StoreToOffset(R1, R6, count_offset); |
} |
__ ret(); |
@@ -1391,10 +1390,10 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
// Check that the IC data array has NumArgsTested() == num_args. |
// 'NumArgsTested' is stored in the least significant bits of 'state_bits'. |
__ LoadFromOffset(R6, R5, ICData::state_bits_offset() - kHeapObjectTag, |
- kNoPP, kUnsignedWord); |
+ kUnsignedWord); |
ASSERT(ICData::NumArgsTestedShift() == 0); // No shift needed. |
__ andi(R6, R6, Immediate(ICData::NumArgsTestedMask())); |
- __ CompareImmediate(R6, num_args, kNoPP); |
+ __ CompareImmediate(R6, num_args); |
__ b(&ok, EQ); |
__ Stop("Incorrect stub for IC data"); |
__ Bind(&ok); |
@@ -1406,7 +1405,7 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ Comment("Check single stepping"); |
__ LoadIsolate(R6); |
__ LoadFromOffset( |
- R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte); |
+ R6, R6, Isolate::single_step_offset(), kUnsignedByte); |
__ CompareRegisters(R6, ZR); |
__ b(&stepping, NE); |
__ Bind(&done_stepping); |
@@ -1435,18 +1434,18 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ Comment("Extract ICData initial values and receiver cid"); |
// Load arguments descriptor into R4. |
- __ LoadFieldFromOffset(R4, R5, ICData::arguments_descriptor_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R4, R5, ICData::arguments_descriptor_offset()); |
// Loop that checks if there is an IC data match. |
Label loop, update, test, found; |
// R5: IC data object (preserved). |
- __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset()); |
// R6: ic_data_array with check entries: classes and target functions. |
- __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag); |
// R6: points directly to the first ic data array element. |
// Get the receiver's class ID (first read number of arguments from |
// arguments descriptor array and then access the receiver from the stack). |
- __ LoadFieldFromOffset(R7, R4, ArgumentsDescriptor::count_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R7, R4, ArgumentsDescriptor::count_offset()); |
__ SmiUntag(R7); // Untag so we can use the LSL 3 addressing mode. |
__ sub(R7, R7, Operand(1)); |
@@ -1464,12 +1463,12 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
for (int i = 0; i < num_args; i++) { |
if (i > 0) { |
// If not the first, load the next argument's class ID. |
- __ AddImmediate(R0, R7, -i, kNoPP); |
+ __ AddImmediate(R0, R7, -i); |
// R0 <- [SP + (R0 << 3)] |
__ ldr(R0, Address(SP, R0, UXTX, Address::Scaled)); |
__ LoadTaggedClassIdMayBeSmi(R0, R0); |
// R0: next argument class ID (smi). |
- __ LoadFromOffset(R1, R6, i * kWordSize, kNoPP); |
+ __ LoadFromOffset(R1, R6, i * kWordSize); |
// R1: next class ID to check (smi). |
} |
__ CompareRegisters(R0, R1); // Class id match? |
@@ -1488,11 +1487,11 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
} |
const intptr_t entry_size = ICData::TestEntryLengthFor(num_args) * kWordSize; |
- __ AddImmediate(R6, R6, entry_size, kNoPP); // Next entry. |
+ __ AddImmediate(R6, R6, entry_size); // Next entry. |
__ ldr(R1, Address(R6)); // Next class ID. |
__ Bind(&test); |
- __ CompareImmediate(R1, Smi::RawValue(kIllegalCid), kNoPP); // Done? |
+ __ CompareImmediate(R1, Smi::RawValue(kIllegalCid)); // Done? |
__ b(&loop, NE); |
__ Comment("IC miss"); |
@@ -1509,10 +1508,10 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
__ Push(R4); // Preserve arguments descriptor array. |
__ Push(R5); // Preserve IC Data. |
// Setup space on stack for the result (target code object). |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
// Push call arguments. |
for (intptr_t i = 0; i < num_args; i++) { |
- __ LoadFromOffset(TMP, R7, -i * kWordSize, kNoPP); |
+ __ LoadFromOffset(TMP, R7, -i * kWordSize); |
__ Push(TMP); |
} |
// Pass IC data object. |
@@ -1538,23 +1537,23 @@ void StubCode::GenerateNArgsCheckInlineCacheStub( |
// R6: pointer to an IC data check group. |
const intptr_t target_offset = ICData::TargetIndexFor(num_args) * kWordSize; |
const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize; |
- __ LoadFromOffset(R0, R6, target_offset, kNoPP); |
+ __ LoadFromOffset(R0, R6, target_offset); |
if (FLAG_optimization_counter_threshold >= 0) { |
// Update counter. |
- __ LoadFromOffset(R1, R6, count_offset, kNoPP); |
+ __ LoadFromOffset(R1, R6, count_offset); |
__ adds(R1, R1, Operand(Smi::RawValue(1))); |
- __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP); |
+ __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue)); |
__ csel(R1, R2, R1, VS); // Overflow. |
- __ StoreToOffset(R1, R6, count_offset, kNoPP); |
+ __ StoreToOffset(R1, R6, count_offset); |
} |
__ Comment("Call target"); |
__ Bind(&call_target_function); |
// R0: target function. |
- __ LoadFieldFromOffset(R2, R0, Function::instructions_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R2, R0, Function::instructions_offset()); |
__ AddImmediate( |
- R2, R2, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ R2, R2, Instructions::HeaderSize() - kHeapObjectTag); |
if (range_collection_mode == kCollectRanges) { |
__ ldr(R1, Address(SP, 0 * kWordSize)); |
if (num_args == 2) { |
@@ -1685,10 +1684,10 @@ void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
// Check that the IC data array has NumArgsTested() == 0. |
// 'NumArgsTested' is stored in the least significant bits of 'state_bits'. |
__ LoadFromOffset(R6, R5, ICData::state_bits_offset() - kHeapObjectTag, |
- kNoPP, kUnsignedWord); |
+ kUnsignedWord); |
ASSERT(ICData::NumArgsTestedShift() == 0); // No shift needed. |
__ andi(R6, R6, Immediate(ICData::NumArgsTestedMask())); |
- __ CompareImmediate(R6, 0, kNoPP); |
+ __ CompareImmediate(R6, 0); |
__ b(&ok, EQ); |
__ Stop("Incorrect IC data for unoptimized static call"); |
__ Bind(&ok); |
@@ -1700,40 +1699,40 @@ void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
if (FLAG_support_debugger) { |
__ LoadIsolate(R6); |
__ LoadFromOffset( |
- R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte); |
- __ CompareImmediate(R6, 0, kNoPP); |
+ R6, R6, Isolate::single_step_offset(), kUnsignedByte); |
+ __ CompareImmediate(R6, 0); |
__ b(&stepping, NE); |
__ Bind(&done_stepping); |
} |
// R5: IC data object (preserved). |
- __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset()); |
// R6: ic_data_array with entries: target functions and count. |
- __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R6, R6, Array::data_offset() - kHeapObjectTag); |
// R6: points directly to the first ic data array element. |
const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize; |
const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize; |
if (FLAG_optimization_counter_threshold >= 0) { |
// Increment count for this call. |
- __ LoadFromOffset(R1, R6, count_offset, kNoPP); |
+ __ LoadFromOffset(R1, R6, count_offset); |
__ adds(R1, R1, Operand(Smi::RawValue(1))); |
- __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP); |
+ __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue)); |
__ csel(R1, R2, R1, VS); // Overflow. |
- __ StoreToOffset(R1, R6, count_offset, kNoPP); |
+ __ StoreToOffset(R1, R6, count_offset); |
} |
// Load arguments descriptor into R4. |
- __ LoadFieldFromOffset(R4, R5, ICData::arguments_descriptor_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R4, R5, ICData::arguments_descriptor_offset()); |
// Get function and call it, if possible. |
- __ LoadFromOffset(R0, R6, target_offset, kNoPP); |
- __ LoadFieldFromOffset(R2, R0, Function::instructions_offset(), kNoPP); |
+ __ LoadFromOffset(R0, R6, target_offset); |
+ __ LoadFieldFromOffset(R2, R0, Function::instructions_offset()); |
// R0: function. |
// R2: target instructons. |
__ AddImmediate( |
- R2, R2, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ R2, R2, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R2); |
if (FLAG_support_debugger) { |
@@ -1780,9 +1779,9 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) { |
__ Pop(R5); // Restore IC Data. |
__ LeaveStubFrame(); |
- __ LoadFieldFromOffset(R2, R0, Function::instructions_offset(), kNoPP); |
+ __ LoadFieldFromOffset(R2, R0, Function::instructions_offset()); |
__ AddImmediate( |
- R2, R2, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ R2, R2, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R2); |
} |
@@ -1791,7 +1790,7 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) { |
void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ Push(R5); |
- __ PushObject(Object::null_object(), PP); // Space for result. |
+ __ PushObject(Object::null_object()); // Space for result. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
__ Pop(R0); |
__ Pop(R5); |
@@ -1802,7 +1801,7 @@ void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- __ PushObject(Object::null_object(), PP); // Space for result. |
+ __ PushObject(Object::null_object()); // Space for result. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
__ Pop(R0); |
__ LeaveStubFrame(); |
@@ -1816,8 +1815,8 @@ void StubCode::GenerateDebugStepCheckStub( |
Label stepping, done_stepping; |
__ LoadIsolate(R1); |
__ LoadFromOffset( |
- R1, R1, Isolate::single_step_offset(), kNoPP, kUnsignedByte); |
- __ CompareImmediate(R1, 0, kNoPP); |
+ R1, R1, Isolate::single_step_offset(), kUnsignedByte); |
+ __ CompareImmediate(R1, 0); |
__ b(&stepping, NE); |
__ Bind(&done_stepping); |
@@ -1841,26 +1840,26 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
ASSERT((1 <= n) && (n <= 3)); |
if (n > 1) { |
// Get instance type arguments. |
- __ LoadClass(R3, R0, kNoPP); |
+ __ LoadClass(R3, R0); |
// Compute instance type arguments into R4. |
Label has_no_type_arguments; |
- __ LoadObject(R4, Object::null_object(), PP); |
+ __ LoadObject(R4, Object::null_object()); |
__ LoadFieldFromOffset(R5, R3, |
- Class::type_arguments_field_offset_in_words_offset(), kNoPP, kWord); |
- __ CompareImmediate(R5, Class::kNoTypeArguments, kNoPP); |
+ Class::type_arguments_field_offset_in_words_offset(), kWord); |
+ __ CompareImmediate(R5, Class::kNoTypeArguments); |
__ b(&has_no_type_arguments, EQ); |
__ add(R5, R0, Operand(R5, LSL, 3)); |
- __ LoadFieldFromOffset(R4, R5, 0, kNoPP); |
+ __ LoadFieldFromOffset(R4, R5, 0); |
__ Bind(&has_no_type_arguments); |
} |
- __ LoadClassId(R3, R0, kNoPP); |
+ __ LoadClassId(R3, R0); |
// R0: instance. |
// R1: instantiator type arguments or NULL. |
// R2: SubtypeTestCache. |
// R3: instance class id. |
// R4: instance type arguments (null if none), used only if n > 1. |
- __ LoadFieldFromOffset(R2, R2, SubtypeTestCache::cache_offset(), kNoPP); |
- __ AddImmediate(R2, R2, Array::data_offset() - kHeapObjectTag, kNoPP); |
+ __ LoadFieldFromOffset(R2, R2, SubtypeTestCache::cache_offset()); |
+ __ AddImmediate(R2, R2, Array::data_offset() - kHeapObjectTag); |
Label loop, found, not_found, next_iteration; |
// R2: entry start. |
@@ -1869,8 +1868,8 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
__ SmiTag(R3); |
__ Bind(&loop); |
__ LoadFromOffset( |
- R5, R2, kWordSize * SubtypeTestCache::kInstanceClassId, kNoPP); |
- __ CompareObject(R5, Object::null_object(), PP); |
+ R5, R2, kWordSize * SubtypeTestCache::kInstanceClassId); |
+ __ CompareObject(R5, Object::null_object()); |
__ b(¬_found, EQ); |
__ CompareRegisters(R5, R3); |
if (n == 1) { |
@@ -1878,29 +1877,29 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
} else { |
__ b(&next_iteration, NE); |
__ LoadFromOffset( |
- R5, R2, kWordSize * SubtypeTestCache::kInstanceTypeArguments, kNoPP); |
+ R5, R2, kWordSize * SubtypeTestCache::kInstanceTypeArguments); |
__ CompareRegisters(R5, R4); |
if (n == 2) { |
__ b(&found, EQ); |
} else { |
__ b(&next_iteration, NE); |
__ LoadFromOffset(R5, R2, |
- kWordSize * SubtypeTestCache::kInstantiatorTypeArguments, kNoPP); |
+ kWordSize * SubtypeTestCache::kInstantiatorTypeArguments); |
__ CompareRegisters(R5, R1); |
__ b(&found, EQ); |
} |
} |
__ Bind(&next_iteration); |
__ AddImmediate( |
- R2, R2, kWordSize * SubtypeTestCache::kTestEntryLength, kNoPP); |
+ R2, R2, kWordSize * SubtypeTestCache::kTestEntryLength); |
__ b(&loop); |
// Fall through to not found. |
__ Bind(¬_found); |
- __ LoadObject(R1, Object::null_object(), PP); |
+ __ LoadObject(R1, Object::null_object()); |
__ ret(); |
__ Bind(&found); |
- __ LoadFromOffset(R1, R2, kWordSize * SubtypeTestCache::kTestResult, kNoPP); |
+ __ LoadFromOffset(R1, R2, kWordSize * SubtypeTestCache::kTestResult); |
__ ret(); |
} |
@@ -1964,10 +1963,10 @@ void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { |
__ mov(THR, R5); |
__ LoadIsolate(R5); |
// Set the tag. |
- __ LoadImmediate(R2, VMTag::kDartTagId, kNoPP); |
- __ StoreToOffset(R2, R5, Isolate::vm_tag_offset(), kNoPP); |
+ __ LoadImmediate(R2, VMTag::kDartTagId); |
+ __ StoreToOffset(R2, R5, Isolate::vm_tag_offset()); |
// Clear top exit frame. |
- __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset(), kNoPP); |
+ __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
__ ret(); // Jump to the exception handler code. |
} |
@@ -1979,14 +1978,14 @@ void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
__ Push(R4); |
// Setup space on stack for the return value. |
- __ PushObject(Object::null_object(), PP); |
+ __ PushObject(Object::null_object()); |
__ Push(R6); |
__ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry, 1); |
__ Pop(R0); // Discard argument. |
__ Pop(R0); // Get Code object |
__ Pop(R4); // Restore argument descriptor. |
- __ LoadFieldFromOffset(R0, R0, Code::instructions_offset(), kNoPP); |
- __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag, PP); |
+ __ LoadFieldFromOffset(R0, R0, Code::instructions_offset()); |
+ __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); |
__ LeaveStubFrame(); |
__ br(R0); |
__ brk(0); |
@@ -2016,35 +2015,35 @@ static void GenerateIdenticalWithNumberCheckStub(Assembler* assembler, |
__ b(&reference_compare, EQ); |
// Value compare for two doubles. |
- __ CompareClassId(left, kDoubleCid, kNoPP); |
+ __ CompareClassId(left, kDoubleCid); |
__ b(&check_mint, NE); |
- __ CompareClassId(right, kDoubleCid, kNoPP); |
+ __ CompareClassId(right, kDoubleCid); |
__ b(&done, NE); |
// Double values bitwise compare. |
- __ LoadFieldFromOffset(left, left, Double::value_offset(), kNoPP); |
- __ LoadFieldFromOffset(right, right, Double::value_offset(), kNoPP); |
+ __ LoadFieldFromOffset(left, left, Double::value_offset()); |
+ __ LoadFieldFromOffset(right, right, Double::value_offset()); |
__ CompareRegisters(left, right); |
__ b(&done); |
__ Bind(&check_mint); |
- __ CompareClassId(left, kMintCid, kNoPP); |
+ __ CompareClassId(left, kMintCid); |
__ b(&check_bigint, NE); |
- __ CompareClassId(right, kMintCid, kNoPP); |
+ __ CompareClassId(right, kMintCid); |
__ b(&done, NE); |
- __ LoadFieldFromOffset(left, left, Mint::value_offset(), kNoPP); |
- __ LoadFieldFromOffset(right, right, Mint::value_offset(), kNoPP); |
+ __ LoadFieldFromOffset(left, left, Mint::value_offset()); |
+ __ LoadFieldFromOffset(right, right, Mint::value_offset()); |
__ b(&done); |
__ Bind(&check_bigint); |
- __ CompareClassId(left, kBigintCid, kNoPP); |
+ __ CompareClassId(left, kBigintCid); |
__ b(&reference_compare, NE); |
- __ CompareClassId(right, kBigintCid, kNoPP); |
+ __ CompareClassId(right, kBigintCid); |
__ b(&done, NE); |
__ EnterStubFrame(); |
__ ReserveAlignedFrameSpace(2 * kWordSize); |
- __ StoreToOffset(left, SP, 0 * kWordSize, kNoPP); |
- __ StoreToOffset(right, SP, 1 * kWordSize, kNoPP); |
+ __ StoreToOffset(left, SP, 0 * kWordSize); |
+ __ StoreToOffset(right, SP, 1 * kWordSize); |
__ CallRuntime(kBigintCompareRuntimeEntry, 2); |
// Result in R0, 0 means equal. |
__ LeaveStubFrame(); |
@@ -2068,17 +2067,16 @@ void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( |
Label stepping, done_stepping; |
if (FLAG_support_debugger) { |
__ LoadIsolate(R1); |
- __ LoadFromOffset( |
- R1, R1, Isolate::single_step_offset(), kNoPP, kUnsignedByte); |
- __ CompareImmediate(R1, 0, kNoPP); |
+ __ LoadFromOffset(R1, R1, Isolate::single_step_offset(), kUnsignedByte); |
+ __ CompareImmediate(R1, 0); |
__ b(&stepping, NE); |
__ Bind(&done_stepping); |
} |
const Register left = R1; |
const Register right = R0; |
- __ LoadFromOffset(left, SP, 1 * kWordSize, kNoPP); |
- __ LoadFromOffset(right, SP, 0 * kWordSize, kNoPP); |
+ __ LoadFromOffset(left, SP, 1 * kWordSize); |
+ __ LoadFromOffset(right, SP, 0 * kWordSize); |
GenerateIdenticalWithNumberCheckStub(assembler, left, right); |
__ ret(); |
@@ -2101,8 +2099,8 @@ void StubCode::GenerateOptimizedIdenticalWithNumberCheckStub( |
Assembler* assembler) { |
const Register left = R1; |
const Register right = R0; |
- __ LoadFromOffset(left, SP, 1 * kWordSize, kNoPP); |
- __ LoadFromOffset(right, SP, 0 * kWordSize, kNoPP); |
+ __ LoadFromOffset(left, SP, 1 * kWordSize); |
+ __ LoadFromOffset(right, SP, 0 * kWordSize); |
GenerateIdenticalWithNumberCheckStub(assembler, left, right); |
__ ret(); |
} |
@@ -2113,8 +2111,8 @@ void StubCode::EmitMegamorphicLookup( |
ASSERT((cache != R0) && (cache != R2)); |
__ LoadTaggedClassIdMayBeSmi(R0, receiver); |
// R0: class ID of the receiver (smi). |
- __ LoadFieldFromOffset(R2, cache, MegamorphicCache::buckets_offset(), PP); |
- __ LoadFieldFromOffset(R1, cache, MegamorphicCache::mask_offset(), PP); |
+ __ LoadFieldFromOffset(R2, cache, MegamorphicCache::buckets_offset()); |
+ __ LoadFieldFromOffset(R1, cache, MegamorphicCache::mask_offset()); |
// R2: cache buckets array. |
// R1: mask. |
__ mov(R3, R0); |
@@ -2129,7 +2127,7 @@ void StubCode::EmitMegamorphicLookup( |
const intptr_t base = Array::data_offset(); |
// R3 is smi tagged, but table entries are 16 bytes, so LSL 3. |
__ add(TMP, R2, Operand(R3, LSL, 3)); |
- __ LoadFieldFromOffset(R4, TMP, base, PP); |
+ __ LoadFieldFromOffset(R4, TMP, base); |
ASSERT(kIllegalCid == 0); |
__ tst(R4, Operand(R4)); |
@@ -2143,11 +2141,11 @@ void StubCode::EmitMegamorphicLookup( |
// illegal class id was found, the target is a cache miss handler that can |
// be invoked as a normal Dart function. |
__ add(TMP, R2, Operand(R3, LSL, 3)); |
- __ LoadFieldFromOffset(R0, TMP, base + kWordSize, PP); |
- __ LoadFieldFromOffset(R1, R0, Function::instructions_offset(), PP); |
+ __ LoadFieldFromOffset(R0, TMP, base + kWordSize); |
+ __ LoadFieldFromOffset(R1, R0, Function::instructions_offset()); |
// TODO(srdjan): Evaluate performance impact of moving the instruction below |
// to the call site, instead of having it here. |
- __ AddImmediate(target, R1, Instructions::HeaderSize() - kHeapObjectTag, PP); |
+ __ AddImmediate(target, R1, Instructions::HeaderSize() - kHeapObjectTag); |
} |