Chromium Code Reviews| Index: runtime/vm/intermediate_language_arm64.cc |
| diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc |
| index 87101a0f242f75da176a09d6e387d1c540596928..03eb39ce41a98e1ea759bc8dc60cb52df10618fb 100644 |
| --- a/runtime/vm/intermediate_language_arm64.cc |
| +++ b/runtime/vm/intermediate_language_arm64.cc |
| @@ -931,7 +931,8 @@ LocationSummary* LoadClassIdInstr::MakeLocationSummary(Zone* zone, |
| void LoadClassIdInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| const Register object = locs()->in(0).reg(); |
| const Register result = locs()->out(0).reg(); |
| - static const intptr_t kSmiCidSource = kSmiCid << RawObject::kClassIdTagPos; |
| + static const intptr_t kSmiCidSource = |
| + static_cast<intptr_t>(kSmiCid) << RawObject::kClassIdTagPos; |
| __ LoadImmediate(TMP, reinterpret_cast<int64_t>(&kSmiCidSource) + 1, PP); |
| __ tsti(object, Immediate(kSmiTagMask)); |
| @@ -1434,6 +1435,7 @@ LocationSummary* GuardFieldClassInstr::MakeLocationSummary(Zone* zone, |
| void GuardFieldClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + ASSERT(sizeof(classid_t) == 4); |
|
siva
2015/06/12 22:08:11
kInt32Size
|
| const intptr_t value_cid = value()->Type()->ToCid(); |
| const intptr_t field_cid = field().guarded_cid(); |
| const intptr_t nullability = field().is_nullable() ? kNullCid : kIllegalCid; |
| @@ -1470,24 +1472,24 @@ void GuardFieldClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ LoadObject(field_reg, Field::ZoneHandle(field().raw()), PP); |
| FieldAddress field_cid_operand( |
| - field_reg, Field::guarded_cid_offset(), kUnsignedHalfword); |
| + field_reg, Field::guarded_cid_offset(), kUnsignedWord); |
| FieldAddress field_nullability_operand( |
| - field_reg, Field::is_nullable_offset(), kUnsignedHalfword); |
| + field_reg, Field::is_nullable_offset(), kUnsignedWord); |
| if (value_cid == kDynamicCid) { |
| LoadValueCid(compiler, value_cid_reg, value_reg); |
| Label skip_length_check; |
| - __ ldr(TMP, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(TMP, field_cid_operand, kUnsignedWord); |
| __ CompareRegisters(value_cid_reg, TMP); |
| __ b(&ok, EQ); |
| - __ ldr(TMP, field_nullability_operand, kUnsignedHalfword); |
| + __ ldr(TMP, field_nullability_operand, kUnsignedWord); |
| __ CompareRegisters(value_cid_reg, TMP); |
| } else if (value_cid == kNullCid) { |
| - __ ldr(value_cid_reg, field_nullability_operand, kUnsignedHalfword); |
| + __ ldr(value_cid_reg, field_nullability_operand, kUnsignedWord); |
| __ CompareImmediate(value_cid_reg, value_cid, PP); |
| } else { |
| Label skip_length_check; |
| - __ ldr(value_cid_reg, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(value_cid_reg, field_cid_operand, kUnsignedWord); |
| __ CompareImmediate(value_cid_reg, value_cid, PP); |
| } |
| __ b(&ok, EQ); |
| @@ -1501,17 +1503,17 @@ void GuardFieldClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| if (!field().needs_length_check()) { |
| // Uninitialized field can be handled inline. Check if the |
| // field is still unitialized. |
| - __ ldr(TMP, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(TMP, field_cid_operand, kUnsignedWord); |
| __ CompareImmediate(TMP, kIllegalCid, PP); |
| __ b(fail, NE); |
| if (value_cid == kDynamicCid) { |
| - __ str(value_cid_reg, field_cid_operand, kUnsignedHalfword); |
| - __ str(value_cid_reg, field_nullability_operand, kUnsignedHalfword); |
| + __ str(value_cid_reg, field_cid_operand, kUnsignedWord); |
| + __ str(value_cid_reg, field_nullability_operand, kUnsignedWord); |
| } else { |
| __ LoadImmediate(TMP, value_cid, PP); |
| - __ str(TMP, field_cid_operand, kUnsignedHalfword); |
| - __ str(TMP, field_nullability_operand, kUnsignedHalfword); |
| + __ str(TMP, field_cid_operand, kUnsignedWord); |
| + __ str(TMP, field_nullability_operand, kUnsignedWord); |
| } |
| if (deopt == NULL) { |
| @@ -1525,7 +1527,7 @@ void GuardFieldClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ Bind(fail); |
| __ LoadFieldFromOffset( |
| - TMP, field_reg, Field::guarded_cid_offset(), PP, kUnsignedHalfword); |
| + TMP, field_reg, Field::guarded_cid_offset(), PP, kUnsignedWord); |
| __ CompareImmediate(TMP, kDynamicCid, PP); |
| __ b(&ok, EQ); |
| @@ -1774,6 +1776,7 @@ LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary(Zone* zone, |
| void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + ASSERT(sizeof(classid_t) == 4); |
| Label skip_store; |
| const Register instance_reg = locs()->in(0).reg(); |
| @@ -1845,7 +1848,7 @@ void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ LoadObject(temp, Field::ZoneHandle(field().raw()), PP); |
| __ LoadFieldFromOffset(temp2, temp, Field::is_nullable_offset(), PP, |
| - kUnsignedHalfword); |
| + kUnsignedWord); |
| __ CompareImmediate(temp2, kNullCid, PP); |
| __ b(&store_pointer, EQ); |
| @@ -1856,17 +1859,17 @@ void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ b(&store_pointer, EQ); |
| __ LoadFieldFromOffset(temp2, temp, Field::guarded_cid_offset(), PP, |
| - kUnsignedHalfword); |
| + kUnsignedWord); |
| __ CompareImmediate(temp2, kDoubleCid, PP); |
| __ b(&store_double, EQ); |
| __ LoadFieldFromOffset(temp2, temp, Field::guarded_cid_offset(), PP, |
| - kUnsignedHalfword); |
| + kUnsignedWord); |
| __ CompareImmediate(temp2, kFloat32x4Cid, PP); |
| __ b(&store_float32x4, EQ); |
| __ LoadFieldFromOffset(temp2, temp, Field::guarded_cid_offset(), PP, |
| - kUnsignedHalfword); |
| + kUnsignedWord); |
| __ CompareImmediate(temp2, kFloat64x2Cid, PP); |
| __ b(&store_float64x2, EQ); |
| @@ -2165,6 +2168,7 @@ LocationSummary* LoadFieldInstr::MakeLocationSummary(Zone* zone, |
| void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + ASSERT(sizeof(classid_t) == 4); |
| const Register instance_reg = locs()->in(0).reg(); |
| if (IsUnboxedLoad() && compiler->is_optimizing()) { |
| const VRegister result = locs()->out(0).fpu_reg(); |
| @@ -2201,23 +2205,23 @@ void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ LoadObject(result_reg, Field::ZoneHandle(field()->raw()), PP); |
| FieldAddress field_cid_operand( |
| - result_reg, Field::guarded_cid_offset(), kUnsignedHalfword); |
| + result_reg, Field::guarded_cid_offset(), kUnsignedWord); |
| FieldAddress field_nullability_operand( |
| - result_reg, Field::is_nullable_offset(), kUnsignedHalfword); |
| + result_reg, Field::is_nullable_offset(), kUnsignedWord); |
| - __ ldr(temp, field_nullability_operand, kUnsignedHalfword); |
| + __ ldr(temp, field_nullability_operand, kUnsignedWord); |
| __ CompareImmediate(temp, kNullCid, PP); |
| __ b(&load_pointer, EQ); |
| - __ ldr(temp, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(temp, field_cid_operand, kUnsignedWord); |
| __ CompareImmediate(temp, kDoubleCid, PP); |
| __ b(&load_double, EQ); |
| - __ ldr(temp, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(temp, field_cid_operand, kUnsignedWord); |
| __ CompareImmediate(temp, kFloat32x4Cid, PP); |
| __ b(&load_float32x4, EQ); |
| - __ ldr(temp, field_cid_operand, kUnsignedHalfword); |
| + __ ldr(temp, field_cid_operand, kUnsignedWord); |
| __ CompareImmediate(temp, kFloat64x2Cid, PP); |
| __ b(&load_float64x2, EQ); |