diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
index e0e0254..b254b9f 100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -4323,7 +4323,17 @@ void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) {
     __ movss(operand, xmm0);
   } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
     CpuFeatureScope scope(masm(), SSE2);
-    __ movdbl(operand, ToDoubleRegister(instr->value()));
+    XMMRegister xmm = ToDoubleRegister(instr->value());
+    Label have_value;
+
+    __ ucomisd(xmm, xmm);
+    __ j(parity_odd, &have_value);  // NaN.
+
+    ExternalReference canonical_nan_reference =
+        ExternalReference::address_of_canonical_non_hole_nan();
+    __ movdbl(xmm, Operand::StaticVariable(canonical_nan_reference));
+    __ bind(&have_value);
+    __ movdbl(operand, xmm);
   } else {
     Register value = ToRegister(instr->value());
     switch (elements_kind) {
