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:
parent
25510907c3
commit
24bddcd367
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user