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_ARM | 9 #if V8_TARGET_ARCH_ARM |
10 | 10 |
(...skipping 2274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2285 } | 2285 } |
2286 | 2286 |
2287 | 2287 |
2288 void MacroAssembler::LoadWeakValue(Register value, Handle<WeakCell> cell, | 2288 void MacroAssembler::LoadWeakValue(Register value, Handle<WeakCell> cell, |
2289 Label* miss) { | 2289 Label* miss) { |
2290 GetWeakValue(value, cell); | 2290 GetWeakValue(value, cell); |
2291 JumpIfSmi(value, miss); | 2291 JumpIfSmi(value, miss); |
2292 } | 2292 } |
2293 | 2293 |
2294 | 2294 |
| 2295 void MacroAssembler::GetMapConstructor(Register result, Register map, |
| 2296 Register temp, Register temp2) { |
| 2297 Label done, loop; |
| 2298 ldr(result, FieldMemOperand(map, Map::kConstructorOrBackPointerOffset)); |
| 2299 bind(&loop); |
| 2300 JumpIfSmi(result, &done); |
| 2301 CompareObjectType(result, temp, temp2, MAP_TYPE); |
| 2302 b(ne, &done); |
| 2303 ldr(result, FieldMemOperand(result, Map::kConstructorOrBackPointerOffset)); |
| 2304 b(&loop); |
| 2305 bind(&done); |
| 2306 } |
| 2307 |
| 2308 |
2295 void MacroAssembler::TryGetFunctionPrototype(Register function, | 2309 void MacroAssembler::TryGetFunctionPrototype(Register function, |
2296 Register result, | 2310 Register result, |
2297 Register scratch, | 2311 Register scratch, |
2298 Label* miss, | 2312 Label* miss, |
2299 bool miss_on_bound_function) { | 2313 bool miss_on_bound_function) { |
2300 Label non_instance; | 2314 Label non_instance; |
2301 if (miss_on_bound_function) { | 2315 if (miss_on_bound_function) { |
2302 // Check that the receiver isn't a smi. | 2316 // Check that the receiver isn't a smi. |
2303 JumpIfSmi(function, miss); | 2317 JumpIfSmi(function, miss); |
2304 | 2318 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2338 | 2352 |
2339 // Get the prototype from the initial map. | 2353 // Get the prototype from the initial map. |
2340 ldr(result, FieldMemOperand(result, Map::kPrototypeOffset)); | 2354 ldr(result, FieldMemOperand(result, Map::kPrototypeOffset)); |
2341 | 2355 |
2342 if (miss_on_bound_function) { | 2356 if (miss_on_bound_function) { |
2343 jmp(&done); | 2357 jmp(&done); |
2344 | 2358 |
2345 // Non-instance prototype: Fetch prototype from constructor field | 2359 // Non-instance prototype: Fetch prototype from constructor field |
2346 // in initial map. | 2360 // in initial map. |
2347 bind(&non_instance); | 2361 bind(&non_instance); |
2348 ldr(result, FieldMemOperand(result, Map::kConstructorOffset)); | 2362 GetMapConstructor(result, result, scratch, ip); |
2349 } | 2363 } |
2350 | 2364 |
2351 // All done. | 2365 // All done. |
2352 bind(&done); | 2366 bind(&done); |
2353 } | 2367 } |
2354 | 2368 |
2355 | 2369 |
2356 void MacroAssembler::CallStub(CodeStub* stub, | 2370 void MacroAssembler::CallStub(CodeStub* stub, |
2357 TypeFeedbackId ast_id, | 2371 TypeFeedbackId ast_id, |
2358 Condition cond) { | 2372 Condition cond) { |
(...skipping 1616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3975 } | 3989 } |
3976 } | 3990 } |
3977 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); | 3991 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); |
3978 add(result, result, Operand(dividend, LSR, 31)); | 3992 add(result, result, Operand(dividend, LSR, 31)); |
3979 } | 3993 } |
3980 | 3994 |
3981 } // namespace internal | 3995 } // namespace internal |
3982 } // namespace v8 | 3996 } // namespace v8 |
3983 | 3997 |
3984 #endif // V8_TARGET_ARCH_ARM | 3998 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |