Chromium Code Reviews| Index: src/mips/macro-assembler-mips.cc |
| diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
| index 36671fd43b699235625960ce3c8c4a5e1e3d35cb..3dc0ce7f0fe52b901bb6a483e7e5a3df70474064 100644 |
| --- a/src/mips/macro-assembler-mips.cc |
| +++ b/src/mips/macro-assembler-mips.cc |
| @@ -5985,19 +5985,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); |
| + lw(current, FieldMemOperand(current, HeapObject::kMapOffset)); |
| + lw(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); |
| lw(current, FieldMemOperand(current, HeapObject::kMapOffset)); |
| + lbu(scratch1, FieldMemOperand(current, Map::kInstanceTypeOffset)); |
| + DCHECK(JS_VALUE_TYPE < JS_OBJECT_TYPE); |
| + DCHECK(JS_PROXY_TYPE < JS_OBJECT_TYPE); |
| + Branch(found, lt, scratch1, Operand(JS_OBJECT_TYPE)); |
|
Jakob Kummerow
2015/07/13 15:00:58
s/lt/lo/ for unsigned comparison
|
| lb(scratch1, FieldMemOperand(current, Map::kBitField2Offset)); |
| DecodeField<Map::ElementsKindBits>(scratch1); |
| Branch(found, eq, scratch1, Operand(DICTIONARY_ELEMENTS)); |
| lw(current, FieldMemOperand(current, Map::kPrototypeOffset)); |
| Branch(&loop_again, ne, current, Operand(factory->null_value())); |
| + |
| + bind(&end); |
| } |