| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index f852f3de712c45112b351d424c9078e2a1cab2c6..776b55edc3a9a99a26a38e0c1f67f0248ebf350a 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -3054,11 +3054,16 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
|
| }
|
|
|
| Register result = ToRegister(instr->result());
|
| + Register source = object;
|
| if (!access.IsInobject()) {
|
| - __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset));
|
| - object = result;
|
| + if (instr->object_properties()) {
|
| + source = ToRegister(instr->object_properties());
|
| + } else {
|
| + __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset));
|
| + source = result;
|
| + }
|
| }
|
| - MemOperand operand = FieldMemOperand(object, offset);
|
| + MemOperand operand = FieldMemOperand(source, offset);
|
| __ Load(result, operand, access.representation());
|
| }
|
|
|
| @@ -4110,7 +4115,13 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
|
| instr->hydrogen()->PointersToHereCheckForValue());
|
| }
|
| } else {
|
| - __ ldr(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset));
|
| + Register destination;
|
| + if (instr->object_properties()) {
|
| + destination = ToRegister(instr->object_properties());
|
| + } else {
|
| + __ ldr(scratch, FieldMemOperand(object, JSObject::kPropertiesOffset));
|
| + destination = scratch;
|
| + }
|
| MemOperand operand = FieldMemOperand(scratch, offset);
|
| __ Store(value, operand, representation);
|
| if (instr->hydrogen()->NeedsWriteBarrier()) {
|
|
|