MIPS64: Fix 'Fix keyed element access wrt string wrappers'.

Port 01f40e6ad6

BUG=v8:4296
LOG=n

Review URL: https://codereview.chromium.org/1233923002

Cr-Commit-Position: refs/heads/master@{#29624}
This commit is contained in:
balazs.kilvady 2015-07-13 12:42:19 -07:00 committed by Commit bot
parent 25510907c3
commit 24bddcd367

View File

@ -6216,19 +6216,28 @@ 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.
Move(current, object);
ld(current, FieldMemOperand(current, HeapObject::kMapOffset));
ld(current, FieldMemOperand(current, Map::kPrototypeOffset));
Branch(&end, eq, current, Operand(factory->null_value()));
// Loop based on the map going up the prototype chain.
bind(&loop_again);
ld(current, FieldMemOperand(current, HeapObject::kMapOffset));
lbu(scratch1, FieldMemOperand(current, Map::kInstanceTypeOffset));
STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE);
STATIC_ASSERT(JS_PROXY_TYPE < JS_OBJECT_TYPE);
Branch(found, lo, scratch1, Operand(JS_OBJECT_TYPE));
lb(scratch1, FieldMemOperand(current, Map::kBitField2Offset));
DecodeField<Map::ElementsKindBits>(scratch1);
Branch(found, eq, scratch1, Operand(DICTIONARY_ELEMENTS));
ld(current, FieldMemOperand(current, Map::kPrototypeOffset));
Branch(&loop_again, ne, current, Operand(factory->null_value()));
bind(&end);
}