Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index 6bd45fe2f2353633032609927c205d0e483fa763..8db5f00fbffc9ad801d389ec6e2c32c8cf958051 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -1658,6 +1658,11 @@ void LCodeGen::DoConstantD(LConstantD* instr) { |
} |
+void LCodeGen::DoConstantE(LConstantE* instr) { |
+ __ li(ToRegister(instr->result()), Operand(instr->value())); |
+} |
+ |
+ |
void LCodeGen::DoConstantT(LConstantT* instr) { |
Handle<Object> value = instr->value(); |
AllowDeferredHandleDereference smi_check; |
@@ -2878,6 +2883,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()); |
+ __ lw(result, MemOperand(object, offset)); |
+ return; |
+ } |
+ |
if (instr->hydrogen()->representation().IsDouble()) { |
DoubleRegister result = ToDoubleRegister(instr->result()); |
__ ldc1(result, FieldMemOperand(object, offset)); |
@@ -4115,6 +4127,12 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { |
HObjectAccess access = instr->hydrogen()->access(); |
int offset = access.offset(); |
+ if (access.IsExternalMemory()) { |
+ Register value = ToRegister(instr->value()); |
+ __ sw(value, MemOperand(object, offset)); |
+ return; |
+ } |
+ |
Handle<Map> transition = instr->transition(); |
if (FLAG_track_heap_object_fields && representation.IsHeapObject()) { |