OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #if V8_TARGET_ARCH_MIPS64 | 9 #if V8_TARGET_ARCH_MIPS64 |
10 | 10 |
(...skipping 6198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6209 | 6209 |
6210 | 6210 |
6211 void MacroAssembler::JumpIfDictionaryInPrototypeChain( | 6211 void MacroAssembler::JumpIfDictionaryInPrototypeChain( |
6212 Register object, | 6212 Register object, |
6213 Register scratch0, | 6213 Register scratch0, |
6214 Register scratch1, | 6214 Register scratch1, |
6215 Label* found) { | 6215 Label* found) { |
6216 DCHECK(!scratch1.is(scratch0)); | 6216 DCHECK(!scratch1.is(scratch0)); |
6217 Factory* factory = isolate()->factory(); | 6217 Factory* factory = isolate()->factory(); |
6218 Register current = scratch0; | 6218 Register current = scratch0; |
6219 Label loop_again; | 6219 Label loop_again, end; |
6220 | 6220 |
6221 // Scratch contained elements pointer. | 6221 // Scratch contained elements pointer. |
6222 Move(current, object); | 6222 Move(current, object); |
| 6223 ld(current, FieldMemOperand(current, HeapObject::kMapOffset)); |
| 6224 ld(current, FieldMemOperand(current, Map::kPrototypeOffset)); |
| 6225 Branch(&end, eq, current, Operand(factory->null_value())); |
6223 | 6226 |
6224 // Loop based on the map going up the prototype chain. | 6227 // Loop based on the map going up the prototype chain. |
6225 bind(&loop_again); | 6228 bind(&loop_again); |
6226 ld(current, FieldMemOperand(current, HeapObject::kMapOffset)); | 6229 ld(current, FieldMemOperand(current, HeapObject::kMapOffset)); |
| 6230 lbu(scratch1, FieldMemOperand(current, Map::kInstanceTypeOffset)); |
| 6231 STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE); |
| 6232 STATIC_ASSERT(JS_PROXY_TYPE < JS_OBJECT_TYPE); |
| 6233 Branch(found, lo, scratch1, Operand(JS_OBJECT_TYPE)); |
6227 lb(scratch1, FieldMemOperand(current, Map::kBitField2Offset)); | 6234 lb(scratch1, FieldMemOperand(current, Map::kBitField2Offset)); |
6228 DecodeField<Map::ElementsKindBits>(scratch1); | 6235 DecodeField<Map::ElementsKindBits>(scratch1); |
6229 Branch(found, eq, scratch1, Operand(DICTIONARY_ELEMENTS)); | 6236 Branch(found, eq, scratch1, Operand(DICTIONARY_ELEMENTS)); |
6230 ld(current, FieldMemOperand(current, Map::kPrototypeOffset)); | 6237 ld(current, FieldMemOperand(current, Map::kPrototypeOffset)); |
6231 Branch(&loop_again, ne, current, Operand(factory->null_value())); | 6238 Branch(&loop_again, ne, current, Operand(factory->null_value())); |
| 6239 |
| 6240 bind(&end); |
6232 } | 6241 } |
6233 | 6242 |
6234 | 6243 |
6235 bool AreAliased(Register reg1, | 6244 bool AreAliased(Register reg1, |
6236 Register reg2, | 6245 Register reg2, |
6237 Register reg3, | 6246 Register reg3, |
6238 Register reg4, | 6247 Register reg4, |
6239 Register reg5, | 6248 Register reg5, |
6240 Register reg6, | 6249 Register reg6, |
6241 Register reg7, | 6250 Register reg7, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6336 if (mag.shift > 0) sra(result, result, mag.shift); | 6345 if (mag.shift > 0) sra(result, result, mag.shift); |
6337 srl(at, dividend, 31); | 6346 srl(at, dividend, 31); |
6338 Addu(result, result, Operand(at)); | 6347 Addu(result, result, Operand(at)); |
6339 } | 6348 } |
6340 | 6349 |
6341 | 6350 |
6342 } // namespace internal | 6351 } // namespace internal |
6343 } // namespace v8 | 6352 } // namespace v8 |
6344 | 6353 |
6345 #endif // V8_TARGET_ARCH_MIPS64 | 6354 #endif // V8_TARGET_ARCH_MIPS64 |
OLD | NEW |