Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index 303e5954ccf4e7dda038c67f9c9f6771c7843051..6baea7fd7b640564dd56056f093a9f41dc2a3a6c 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -5091,6 +5091,11 @@ void StoreGlobalViaContextStub::Generate(MacroAssembler* masm) { |
// Load the PropertyCell at the specified slot. |
__ movp(cell_reg, ContextOperand(context_reg, slot_reg)); |
+ // Check that value is not the_hole. |
+ __ movp(cell_value_reg, FieldOperand(cell_reg, PropertyCell::kValueOffset)); |
+ __ CompareRoot(cell_value_reg, Heap::kTheHoleValueRootIndex); |
+ __ j(equal, &slow_case, FLAG_debug_code ? Label::kFar : Label::kNear); |
+ |
// Load PropertyDetails for the cell (actually only the cell_type and kind). |
__ SmiToInteger32(cell_details_reg, |
FieldOperand(cell_reg, PropertyCell::kDetailsOffset)); |
@@ -5120,7 +5125,6 @@ void StoreGlobalViaContextStub::Generate(MacroAssembler* masm) { |
// Check if PropertyCell value matches the new value (relevant for Constant, |
// ConstantType and Undefined cells). |
Label not_same_value; |
- __ movp(cell_value_reg, FieldOperand(cell_reg, PropertyCell::kValueOffset)); |
__ cmpp(cell_value_reg, value_reg); |
__ j(not_equal, ¬_same_value, |
FLAG_debug_code ? Label::kFar : Label::kNear); |