Index: src/x64/lithium-codegen-x64.cc |
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
index 6305dc7587db4bfb3cc3afa0fce6435b7e126faf..92688ce4992ed4b7089963b80af0a22babe70cb7 100644 |
--- a/src/x64/lithium-codegen-x64.cc |
+++ b/src/x64/lithium-codegen-x64.cc |
@@ -458,6 +458,11 @@ bool LCodeGen::IsInteger32Constant(LConstantOperand* op) const { |
} |
+bool LCodeGen::IsExternalConstant(LConstantOperand* op) const { |
+ return chunk_->LookupLiteralRepresentation(op).IsExternal(); |
+} |
+ |
+ |
bool LCodeGen::IsDehoistedKeyConstant(LConstantOperand* op) const { |
return op->IsConstantOperand() && |
chunk_->IsDehoistedKey(chunk_->LookupConstant(op)); |
@@ -4218,6 +4223,11 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { |
__ movl(operand, Immediate(value)); |
} |
+ } else if (IsExternalConstant(operand_value)) { |
+ DCHECK(!hinstr->NeedsWriteBarrier()); |
+ ExternalReference ptr = ToExternalReference(operand_value); |
+ __ Move(kScratchRegister, ptr); |
+ __ movp(operand, kScratchRegister); |
} else { |
Handle<Object> handle_value = ToHandle(operand_value); |
DCHECK(!hinstr->NeedsWriteBarrier()); |