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()) { |