OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/ic/handler-compiler.h" | 7 #include "src/ic/handler-compiler.h" |
8 | 8 |
9 #include "src/api-arguments.h" | 9 #include "src/api-arguments.h" |
10 #include "src/field-type.h" | 10 #include "src/field-type.h" |
11 #include "src/ic/call-optimization.h" | 11 #include "src/ic/call-optimization.h" |
12 #include "src/ic/ic.h" | 12 #include "src/ic/ic.h" |
13 #include "src/isolate-inl.h" | 13 #include "src/isolate-inl.h" |
14 | 14 |
15 namespace v8 { | 15 namespace v8 { |
16 namespace internal { | 16 namespace internal { |
17 | 17 |
18 #define __ ACCESS_MASM(masm) | 18 #define __ ACCESS_MASM(masm) |
19 | 19 |
20 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, | 20 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, |
21 Register slot) { | 21 Register slot) { |
22 MacroAssembler* masm = this->masm(); | 22 MacroAssembler* masm = this->masm(); |
| 23 STATIC_ASSERT(LoadWithVectorDescriptor::kSlot < |
| 24 LoadWithVectorDescriptor::kVector); |
| 25 STATIC_ASSERT(StoreWithVectorDescriptor::kSlot < |
| 26 StoreWithVectorDescriptor::kVector); |
| 27 STATIC_ASSERT(StoreTransitionDescriptor::kSlot < |
| 28 StoreTransitionDescriptor::kVector); |
| 29 __ Push(slot); |
23 __ Push(vector); | 30 __ Push(vector); |
24 __ Push(slot); | |
25 } | 31 } |
26 | 32 |
27 | 33 |
28 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { | 34 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { |
29 MacroAssembler* masm = this->masm(); | 35 MacroAssembler* masm = this->masm(); |
| 36 __ Pop(vector); |
30 __ Pop(slot); | 37 __ Pop(slot); |
31 __ Pop(vector); | |
32 } | 38 } |
33 | 39 |
34 | 40 |
35 void PropertyHandlerCompiler::DiscardVectorAndSlot() { | 41 void PropertyHandlerCompiler::DiscardVectorAndSlot() { |
36 MacroAssembler* masm = this->masm(); | 42 MacroAssembler* masm = this->masm(); |
37 // Remove vector and slot. | 43 // Remove vector and slot. |
38 __ Drop(2); | 44 __ Drop(2); |
39 } | 45 } |
40 | 46 |
| 47 void PropertyHandlerCompiler::PushReturnAddress(Register tmp) { UNREACHABLE(); } |
| 48 |
| 49 void PropertyHandlerCompiler::PopReturnAddress(Register tmp) { UNREACHABLE(); } |
41 | 50 |
42 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( | 51 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( |
43 MacroAssembler* masm, Label* miss_label, Register receiver, | 52 MacroAssembler* masm, Label* miss_label, Register receiver, |
44 Handle<Name> name, Register scratch0, Register scratch1) { | 53 Handle<Name> name, Register scratch0, Register scratch1) { |
45 DCHECK(!AreAliased(receiver, scratch0, scratch1)); | 54 DCHECK(!AreAliased(receiver, scratch0, scratch1)); |
46 DCHECK(name->IsUniqueName()); | 55 DCHECK(name->IsUniqueName()); |
47 Counters* counters = masm->isolate()->counters(); | 56 Counters* counters = masm->isolate()->counters(); |
48 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); | 57 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); |
49 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); | 58 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); |
50 | 59 |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 __ Mov(this->name(), Operand(name)); | 400 __ Mov(this->name(), Operand(name)); |
392 } | 401 } |
393 } | 402 } |
394 | 403 |
395 | 404 |
396 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { | 405 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { |
397 __ Mov(this->name(), Operand(name)); | 406 __ Mov(this->name(), Operand(name)); |
398 } | 407 } |
399 | 408 |
400 | 409 |
401 void NamedStoreHandlerCompiler::RearrangeVectorAndSlot( | |
402 Register current_map, Register destination_map) { | |
403 DCHECK(false); // Not implemented. | |
404 } | |
405 | |
406 | |
407 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, | 410 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, |
408 Register map_reg, | 411 Register map_reg, |
409 Register scratch, | 412 Register scratch, |
410 Label* miss) { | 413 Label* miss) { |
411 Handle<WeakCell> cell = Map::WeakCellForMap(transition); | 414 Handle<WeakCell> cell = Map::WeakCellForMap(transition); |
412 DCHECK(!map_reg.is(scratch)); | 415 DCHECK(!map_reg.is(scratch)); |
413 __ LoadWeakValue(map_reg, cell, miss); | 416 __ LoadWeakValue(map_reg, cell, miss); |
414 if (transition->CanBeDeprecated()) { | 417 if (transition->CanBeDeprecated()) { |
415 __ Ldrsw(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset)); | 418 __ Ldrsw(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset)); |
416 __ TestAndBranchIfAnySet(scratch, Map::Deprecated::kMask, miss); | 419 __ TestAndBranchIfAnySet(scratch, Map::Deprecated::kMask, miss); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 // Return the generated code. | 698 // Return the generated code. |
696 return GetCode(kind(), name); | 699 return GetCode(kind(), name); |
697 } | 700 } |
698 | 701 |
699 | 702 |
700 #undef __ | 703 #undef __ |
701 } // namespace internal | 704 } // namespace internal |
702 } // namespace v8 | 705 } // namespace v8 |
703 | 706 |
704 #endif // V8_TARGET_ARCH_IA32 | 707 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |