| 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_ARM | 5 #if V8_TARGET_ARCH_ARM |
| 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" |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 // Restore context register. | 104 // Restore context register. |
| 105 __ pop(cp); | 105 __ pop(cp); |
| 106 } | 106 } |
| 107 __ Ret(); | 107 __ Ret(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 | 110 |
| 111 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, | 111 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, |
| 112 Register slot) { | 112 Register slot) { |
| 113 MacroAssembler* masm = this->masm(); | 113 MacroAssembler* masm = this->masm(); |
| 114 STATIC_ASSERT(LoadWithVectorDescriptor::kSlot < |
| 115 LoadWithVectorDescriptor::kVector); |
| 116 STATIC_ASSERT(StoreWithVectorDescriptor::kSlot < |
| 117 StoreWithVectorDescriptor::kVector); |
| 118 STATIC_ASSERT(StoreTransitionDescriptor::kSlot < |
| 119 StoreTransitionDescriptor::kVector); |
| 120 __ push(slot); |
| 114 __ push(vector); | 121 __ push(vector); |
| 115 __ push(slot); | |
| 116 } | 122 } |
| 117 | 123 |
| 118 | 124 |
| 119 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { | 125 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { |
| 120 MacroAssembler* masm = this->masm(); | 126 MacroAssembler* masm = this->masm(); |
| 127 __ pop(vector); |
| 121 __ pop(slot); | 128 __ pop(slot); |
| 122 __ pop(vector); | |
| 123 } | 129 } |
| 124 | 130 |
| 125 | 131 |
| 126 void PropertyHandlerCompiler::DiscardVectorAndSlot() { | 132 void PropertyHandlerCompiler::DiscardVectorAndSlot() { |
| 127 MacroAssembler* masm = this->masm(); | 133 MacroAssembler* masm = this->masm(); |
| 128 // Remove vector and slot. | 134 // Remove vector and slot. |
| 129 __ add(sp, sp, Operand(2 * kPointerSize)); | 135 __ add(sp, sp, Operand(2 * kPointerSize)); |
| 130 } | 136 } |
| 131 | 137 |
| 138 void PropertyHandlerCompiler::PushReturnAddress(Register tmp) { UNREACHABLE(); } |
| 139 |
| 140 void PropertyHandlerCompiler::PopReturnAddress(Register tmp) { UNREACHABLE(); } |
| 132 | 141 |
| 133 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( | 142 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( |
| 134 MacroAssembler* masm, Label* miss_label, Register receiver, | 143 MacroAssembler* masm, Label* miss_label, Register receiver, |
| 135 Handle<Name> name, Register scratch0, Register scratch1) { | 144 Handle<Name> name, Register scratch0, Register scratch1) { |
| 136 DCHECK(name->IsUniqueName()); | 145 DCHECK(name->IsUniqueName()); |
| 137 DCHECK(!receiver.is(scratch0)); | 146 DCHECK(!receiver.is(scratch0)); |
| 138 Counters* counters = masm->isolate()->counters(); | 147 Counters* counters = masm->isolate()->counters(); |
| 139 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); | 148 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); |
| 140 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); | 149 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); |
| 141 | 150 |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 __ mov(this->name(), Operand(name)); | 368 __ mov(this->name(), Operand(name)); |
| 360 } | 369 } |
| 361 } | 370 } |
| 362 | 371 |
| 363 | 372 |
| 364 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { | 373 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { |
| 365 __ mov(this->name(), Operand(name)); | 374 __ mov(this->name(), Operand(name)); |
| 366 } | 375 } |
| 367 | 376 |
| 368 | 377 |
| 369 void NamedStoreHandlerCompiler::RearrangeVectorAndSlot( | |
| 370 Register current_map, Register destination_map) { | |
| 371 DCHECK(false); // Not implemented. | |
| 372 } | |
| 373 | |
| 374 | |
| 375 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, | 378 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, |
| 376 Register map_reg, | 379 Register map_reg, |
| 377 Register scratch, | 380 Register scratch, |
| 378 Label* miss) { | 381 Label* miss) { |
| 379 Handle<WeakCell> cell = Map::WeakCellForMap(transition); | 382 Handle<WeakCell> cell = Map::WeakCellForMap(transition); |
| 380 DCHECK(!map_reg.is(scratch)); | 383 DCHECK(!map_reg.is(scratch)); |
| 381 __ LoadWeakValue(map_reg, cell, miss); | 384 __ LoadWeakValue(map_reg, cell, miss); |
| 382 if (transition->CanBeDeprecated()) { | 385 if (transition->CanBeDeprecated()) { |
| 383 __ ldr(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset)); | 386 __ ldr(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset)); |
| 384 __ tst(scratch, Operand(Map::Deprecated::kMask)); | 387 __ tst(scratch, Operand(Map::Deprecated::kMask)); |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 // Return the generated code. | 700 // Return the generated code. |
| 698 return GetCode(kind(), name); | 701 return GetCode(kind(), name); |
| 699 } | 702 } |
| 700 | 703 |
| 701 | 704 |
| 702 #undef __ | 705 #undef __ |
| 703 } // namespace internal | 706 } // namespace internal |
| 704 } // namespace v8 | 707 } // namespace v8 |
| 705 | 708 |
| 706 #endif // V8_TARGET_ARCH_ARM | 709 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |