| Index: src/x64/full-codegen-x64.cc
|
| diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc
|
| index d5a220f9e3a2c626e68ef12edee60eea05a53e85..e2bdef7d452d0950c8e2b362960fa59101fb2070 100644
|
| --- a/src/x64/full-codegen-x64.cc
|
| +++ b/src/x64/full-codegen-x64.cc
|
| @@ -896,9 +896,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
|
| // check for an enum cache. Leave the map in rbx for the subsequent
|
| // prototype load.
|
| __ movq(rbx, FieldOperand(rcx, HeapObject::kMapOffset));
|
| - __ movq(rdx, FieldOperand(rbx, Map::kInstanceDescriptorsOffset));
|
| - __ cmpq(rdx, empty_descriptor_array_value);
|
| - __ j(equal, &call_runtime);
|
| + __ movq(rdx, FieldOperand(rbx, Map::kInstanceDescriptorsOrBitField3Offset));
|
| + __ JumpIfSmi(rdx, &call_runtime);
|
|
|
| // Check that there is an enum cache in the non-empty instance
|
| // descriptors (rdx). This is the case if the next enumeration
|
| @@ -941,7 +940,7 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
|
|
|
| // We got a map in register rax. Get the enumeration cache from it.
|
| __ bind(&use_cache);
|
| - __ movq(rcx, FieldOperand(rax, Map::kInstanceDescriptorsOffset));
|
| + __ LoadInstanceDescriptors(rax, rcx);
|
| __ movq(rcx, FieldOperand(rcx, DescriptorArray::kEnumerationIndexOffset));
|
| __ movq(rdx, FieldOperand(rcx, DescriptorArray::kEnumCacheBridgeCacheOffset));
|
|
|
| @@ -2442,7 +2441,7 @@ void FullCodeGenerator::EmitIsStringWrapperSafeForDefaultValueOf(
|
| // Look for valueOf symbol in the descriptor array, and indicate false if
|
| // found. The type is not checked, so if it is a transition it is a false
|
| // negative.
|
| - __ movq(rbx, FieldOperand(rbx, Map::kInstanceDescriptorsOffset));
|
| + __ LoadInstanceDescriptors(rbx, rbx);
|
| __ movq(rcx, FieldOperand(rbx, FixedArray::kLengthOffset));
|
| // rbx: descriptor array
|
| // rcx: length of descriptor array
|
|
|