| Index: runtime/vm/intermediate_language_arm.cc
|
| diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
|
| index 1c24cd05a4c7e898304b979b85273d7995afebdb..45ec0271a6238b4586599f4380890875895891d0 100644
|
| --- a/runtime/vm/intermediate_language_arm.cc
|
| +++ b/runtime/vm/intermediate_language_arm.cc
|
| @@ -24,6 +24,7 @@
|
|
|
| namespace dart {
|
|
|
| +DECLARE_FLAG(bool, allow_absolute_addresses);
|
| DECLARE_FLAG(bool, emit_edge_counters);
|
| DECLARE_FLAG(int, optimization_counter_threshold);
|
| DECLARE_FLAG(bool, use_osr);
|
| @@ -1703,8 +1704,7 @@ void GuardFieldClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| if (field_cid != kSmiCid) {
|
| __ CompareImmediate(value_cid_reg, kNullCid);
|
| } else {
|
| - __ CompareImmediate(value_reg,
|
| - reinterpret_cast<intptr_t>(Object::null()));
|
| + __ CompareObject(value_reg, Object::null_object());
|
| }
|
| }
|
| __ b(fail, NE);
|
| @@ -2034,8 +2034,7 @@ static void EnsureMutableBox(FlowGraphCompiler* compiler,
|
| Register temp) {
|
| Label done;
|
| __ ldr(box_reg, FieldAddress(instance_reg, offset));
|
| - __ CompareImmediate(box_reg,
|
| - reinterpret_cast<intptr_t>(Object::null()));
|
| + __ CompareObject(box_reg, Object::null_object());
|
| __ b(&done, NE);
|
|
|
| BoxAllocationSlowPath::Allocate(
|
| @@ -2352,7 +2351,7 @@ static void InlineArrayAllocation(FlowGraphCompiler* compiler,
|
| // R6: null
|
| if (num_elements > 0) {
|
| const intptr_t array_size = instance_size - sizeof(RawArray);
|
| - __ LoadImmediate(R6, reinterpret_cast<intptr_t>(Object::null()));
|
| + __ LoadObject(R6, Object::null_object());
|
| if (num_elements >= 2) {
|
| __ mov(R7, Operand(R6));
|
| } else {
|
| @@ -2621,7 +2620,7 @@ void InstantiateTypeArgumentsInstr::EmitNativeCode(
|
| Label type_arguments_instantiated;
|
| const intptr_t len = type_arguments().Length();
|
| if (type_arguments().IsRawInstantiatedRaw(len)) {
|
| - __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null()));
|
| + __ LoadObject(IP, Object::null_object());
|
| __ cmp(instantiator_reg, Operand(IP));
|
| __ b(&type_arguments_instantiated, EQ);
|
| }
|
| @@ -2886,6 +2885,7 @@ class CheckStackOverflowSlowPath : public SlowPathCode {
|
| const Register value = instruction_->locs()->temp(0).reg();
|
| __ Comment("CheckStackOverflowSlowPathOsr");
|
| __ Bind(osr_entry_label());
|
| + ASSERT(FLAG_allow_absolute_addresses);
|
| __ LoadImmediate(IP, flags_address);
|
| __ LoadImmediate(value, Isolate::kOsrRequest);
|
| __ str(value, Address(IP));
|
| @@ -2930,7 +2930,7 @@ void CheckStackOverflowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| CheckStackOverflowSlowPath* slow_path = new CheckStackOverflowSlowPath(this);
|
| compiler->AddSlowPathCode(slow_path);
|
|
|
| - if (compiler->is_optimizing()) {
|
| + if (compiler->is_optimizing() && FLAG_allow_absolute_addresses) {
|
| __ LoadImmediate(IP, Isolate::Current()->stack_limit_address());
|
| __ ldr(IP, Address(IP));
|
| } else {
|
| @@ -3757,7 +3757,7 @@ void UnboxInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
|
|
| if ((value()->Type()->ToNullableCid() == box_cid) &&
|
| value()->Type()->is_nullable()) {
|
| - __ CompareImmediate(box, reinterpret_cast<intptr_t>(Object::null()));
|
| + __ CompareObject(box, Object::null_object());
|
| __ b(deopt, EQ);
|
| } else {
|
| __ tst(box, Operand(kSmiTagMask));
|
| @@ -5916,8 +5916,7 @@ void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| ICData::kDeoptCheckClass,
|
| licm_hoisted_ ? ICData::kHoisted : 0);
|
| if (IsNullCheck()) {
|
| - __ CompareImmediate(locs()->in(0).reg(),
|
| - reinterpret_cast<intptr_t>(Object::null()));
|
| + __ CompareObject(locs()->in(0).reg(), Object::null_object());
|
| ASSERT(DeoptIfNull() || DeoptIfNotNull());
|
| Condition cond = DeoptIfNull() ? EQ : NE;
|
| __ b(deopt, cond);
|
|
|