OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/stub-cache.h" | 10 #include "src/stub-cache.h" |
(...skipping 3085 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3096 // instanceof stub. | 3096 // instanceof stub. |
3097 __ Ldr(map, FieldMemOperand(object, HeapObject::kMapOffset)); | 3097 __ Ldr(map, FieldMemOperand(object, HeapObject::kMapOffset)); |
3098 { | 3098 { |
3099 // Below we use Factory::the_hole_value() on purpose instead of loading from | 3099 // Below we use Factory::the_hole_value() on purpose instead of loading from |
3100 // the root array to force relocation and later be able to patch with a | 3100 // the root array to force relocation and later be able to patch with a |
3101 // custom value. | 3101 // custom value. |
3102 InstructionAccurateScope scope(masm(), 5); | 3102 InstructionAccurateScope scope(masm(), 5); |
3103 __ bind(&map_check); | 3103 __ bind(&map_check); |
3104 // Will be patched with the cached map. | 3104 // Will be patched with the cached map. |
3105 Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value()); | 3105 Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value()); |
3106 __ LoadRelocated(scratch, Operand(Handle<Object>(cell))); | 3106 __ ldr(scratch, Immediate(Handle<Object>(cell))); |
3107 __ ldr(scratch, FieldMemOperand(scratch, PropertyCell::kValueOffset)); | 3107 __ ldr(scratch, FieldMemOperand(scratch, PropertyCell::kValueOffset)); |
3108 __ cmp(map, scratch); | 3108 __ cmp(map, scratch); |
3109 __ b(&cache_miss, ne); | 3109 __ b(&cache_miss, ne); |
3110 // The address of this instruction is computed relative to the map check | 3110 // The address of this instruction is computed relative to the map check |
3111 // above, so check the size of the code generated. | 3111 // above, so check the size of the code generated. |
3112 ASSERT(masm()->InstructionsGeneratedSince(&map_check) == 4); | 3112 ASSERT(masm()->InstructionsGeneratedSince(&map_check) == 4); |
3113 // Will be patched with the cached result. | 3113 // Will be patched with the cached result. |
3114 __ LoadRelocated(result, Operand(factory()->the_hole_value())); | 3114 __ ldr(result, Immediate(factory()->the_hole_value())); |
3115 } | 3115 } |
3116 __ B(&done); | 3116 __ B(&done); |
3117 | 3117 |
3118 // The inlined call site cache did not match. | 3118 // The inlined call site cache did not match. |
3119 // Check null and string before calling the deferred code. | 3119 // Check null and string before calling the deferred code. |
3120 __ Bind(&cache_miss); | 3120 __ Bind(&cache_miss); |
3121 // Compute the address of the map check. It must not be clobbered until the | 3121 // Compute the address of the map check. It must not be clobbered until the |
3122 // InstanceOfStub has used it. | 3122 // InstanceOfStub has used it. |
3123 __ Adr(map_check_site, &map_check); | 3123 __ Adr(map_check_site, &map_check); |
3124 // Null is not instance of anything. | 3124 // Null is not instance of anything. |
(...skipping 2923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6048 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6048 Handle<ScopeInfo> scope_info = instr->scope_info(); |
6049 __ Push(scope_info); | 6049 __ Push(scope_info); |
6050 __ Push(ToRegister(instr->function())); | 6050 __ Push(ToRegister(instr->function())); |
6051 CallRuntime(Runtime::kHiddenPushBlockContext, 2, instr); | 6051 CallRuntime(Runtime::kHiddenPushBlockContext, 2, instr); |
6052 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6052 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6053 } | 6053 } |
6054 | 6054 |
6055 | 6055 |
6056 | 6056 |
6057 } } // namespace v8::internal | 6057 } } // namespace v8::internal |
OLD | NEW |