Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 057ca1ef2bae528deba94161f7478d26203a4d8c..929d04de13aa693065ad37067d8645266eed2300 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -1822,6 +1822,11 @@ void LCodeGen::DoConstantD(LConstantD* instr) { |
} |
+void LCodeGen::DoConstantE(LConstantE* instr) { |
+ __ mov(ToRegister(instr->result()), Operand(instr->value())); |
+} |
+ |
+ |
void LCodeGen::DoConstantT(LConstantT* instr) { |
Handle<Object> value = instr->value(); |
AllowDeferredHandleDereference smi_check; |
@@ -3002,6 +3007,13 @@ void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { |
HObjectAccess access = instr->hydrogen()->access(); |
int offset = access.offset(); |
Register object = ToRegister(instr->object()); |
+ |
+ if (access.IsExternalMemory()) { |
+ Register result = ToRegister(instr->result()); |
+ __ ldr(result, MemOperand(object, offset)); |
+ return; |
+ } |
+ |
if (instr->hydrogen()->representation().IsDouble()) { |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
__ vldr(result, FieldMemOperand(object, offset)); |
@@ -4181,10 +4193,15 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { |
Register object = ToRegister(instr->object()); |
Register scratch = scratch0(); |
- |
HObjectAccess access = instr->hydrogen()->access(); |
int offset = access.offset(); |
+ if (access.IsExternalMemory()) { |
+ Register value = ToRegister(instr->value()); |
+ __ str(value, MemOperand(object, offset)); |
+ return; |
+ } |
+ |
Handle<Map> transition = instr->transition(); |
if (FLAG_track_heap_object_fields && representation.IsHeapObject()) { |