| Index: src/x87/macro-assembler-x87.cc
|
| diff --git a/src/x87/macro-assembler-x87.cc b/src/x87/macro-assembler-x87.cc
|
| index 3dc8b74a8115d4d2e707d5c03acc839a15b03a6f..b819424976d9de962e0a7fd04148af4067122f20 100644
|
| --- a/src/x87/macro-assembler-x87.cc
|
| +++ b/src/x87/macro-assembler-x87.cc
|
| @@ -3055,14 +3055,22 @@ void MacroAssembler::JumpIfDictionaryInPrototypeChain(
|
| DCHECK(!scratch1.is(scratch0));
|
| Factory* factory = isolate()->factory();
|
| Register current = scratch0;
|
| - Label loop_again;
|
| + Label loop_again, end;
|
|
|
| // scratch contained elements pointer.
|
| mov(current, object);
|
| + mov(current, FieldOperand(current, HeapObject::kMapOffset));
|
| + mov(current, FieldOperand(current, Map::kPrototypeOffset));
|
| + cmp(current, Immediate(factory->null_value()));
|
| + j(equal, &end);
|
|
|
| // Loop based on the map going up the prototype chain.
|
| bind(&loop_again);
|
| mov(current, FieldOperand(current, HeapObject::kMapOffset));
|
| + STATIC_ASSERT(JS_PROXY_TYPE < JS_OBJECT_TYPE);
|
| + STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE);
|
| + CmpInstanceType(current, JS_OBJECT_TYPE);
|
| + j(below, found);
|
| mov(scratch1, FieldOperand(current, Map::kBitField2Offset));
|
| DecodeField<Map::ElementsKindBits>(scratch1);
|
| cmp(scratch1, Immediate(DICTIONARY_ELEMENTS));
|
| @@ -3070,6 +3078,8 @@ void MacroAssembler::JumpIfDictionaryInPrototypeChain(
|
| mov(current, FieldOperand(current, Map::kPrototypeOffset));
|
| cmp(current, Immediate(factory->null_value()));
|
| j(not_equal, &loop_again);
|
| +
|
| + bind(&end);
|
| }
|
|
|
|
|
|
|