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 "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "code-stubs.h" | 9 #include "code-stubs.h" |
10 #include "codegen.h" | 10 #include "codegen.h" |
(...skipping 3029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3040 | 3040 |
3041 __ LoadInstanceDescriptors(r1, r4); | 3041 __ LoadInstanceDescriptors(r1, r4); |
3042 // r4: descriptor array. | 3042 // r4: descriptor array. |
3043 // r3: valid entries in the descriptor array. | 3043 // r3: valid entries in the descriptor array. |
3044 __ mov(ip, Operand(DescriptorArray::kDescriptorSize)); | 3044 __ mov(ip, Operand(DescriptorArray::kDescriptorSize)); |
3045 __ mul(r3, r3, ip); | 3045 __ mul(r3, r3, ip); |
3046 // Calculate location of the first key name. | 3046 // Calculate location of the first key name. |
3047 __ add(r4, r4, Operand(DescriptorArray::kFirstOffset - kHeapObjectTag)); | 3047 __ add(r4, r4, Operand(DescriptorArray::kFirstOffset - kHeapObjectTag)); |
3048 // Calculate the end of the descriptor array. | 3048 // Calculate the end of the descriptor array. |
3049 __ mov(r2, r4); | 3049 __ mov(r2, r4); |
3050 __ add(r2, r2, Operand::PointerOffsetFromSmiKey(r3)); | 3050 __ add(r2, r2, Operand(r3, LSL, kPointerSizeLog2)); |
3051 | 3051 |
3052 // Loop through all the keys in the descriptor array. If one of these is the | 3052 // Loop through all the keys in the descriptor array. If one of these is the |
3053 // string "valueOf" the result is false. | 3053 // string "valueOf" the result is false. |
3054 // The use of ip to store the valueOf string assumes that it is not otherwise | 3054 // The use of ip to store the valueOf string assumes that it is not otherwise |
3055 // used in the loop below. | 3055 // used in the loop below. |
3056 __ mov(ip, Operand(isolate()->factory()->value_of_string())); | 3056 __ mov(ip, Operand(isolate()->factory()->value_of_string())); |
3057 __ jmp(&entry); | 3057 __ jmp(&entry); |
3058 __ bind(&loop); | 3058 __ bind(&loop); |
3059 __ ldr(r3, MemOperand(r4, 0)); | 3059 __ ldr(r3, MemOperand(r4, 0)); |
3060 __ cmp(r3, ip); | 3060 __ cmp(r3, ip); |
(...skipping 1781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4842 | 4842 |
4843 ASSERT(interrupt_address == | 4843 ASSERT(interrupt_address == |
4844 isolate->builtins()->OsrAfterStackCheck()->entry()); | 4844 isolate->builtins()->OsrAfterStackCheck()->entry()); |
4845 return OSR_AFTER_STACK_CHECK; | 4845 return OSR_AFTER_STACK_CHECK; |
4846 } | 4846 } |
4847 | 4847 |
4848 | 4848 |
4849 } } // namespace v8::internal | 4849 } } // namespace v8::internal |
4850 | 4850 |
4851 #endif // V8_TARGET_ARCH_ARM | 4851 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |