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_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 // Restore context register. | 52 // Restore context register. |
53 __ pop(esi); | 53 __ pop(esi); |
54 } | 54 } |
55 __ ret(0); | 55 __ ret(0); |
56 } | 56 } |
57 | 57 |
58 | 58 |
59 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, | 59 void PropertyHandlerCompiler::PushVectorAndSlot(Register vector, |
60 Register slot) { | 60 Register slot) { |
61 MacroAssembler* masm = this->masm(); | 61 MacroAssembler* masm = this->masm(); |
| 62 STATIC_ASSERT(LoadWithVectorDescriptor::kSlot < |
| 63 LoadWithVectorDescriptor::kVector); |
| 64 STATIC_ASSERT(StoreWithVectorDescriptor::kSlot < |
| 65 StoreWithVectorDescriptor::kVector); |
| 66 STATIC_ASSERT(StoreTransitionDescriptor::kSlot < |
| 67 StoreTransitionDescriptor::kVector); |
| 68 __ push(slot); |
62 __ push(vector); | 69 __ push(vector); |
63 __ push(slot); | |
64 } | 70 } |
65 | 71 |
66 | 72 |
67 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { | 73 void PropertyHandlerCompiler::PopVectorAndSlot(Register vector, Register slot) { |
68 MacroAssembler* masm = this->masm(); | 74 MacroAssembler* masm = this->masm(); |
| 75 __ pop(vector); |
69 __ pop(slot); | 76 __ pop(slot); |
70 __ pop(vector); | |
71 } | 77 } |
72 | 78 |
73 | 79 |
74 void PropertyHandlerCompiler::DiscardVectorAndSlot() { | 80 void PropertyHandlerCompiler::DiscardVectorAndSlot() { |
75 MacroAssembler* masm = this->masm(); | 81 MacroAssembler* masm = this->masm(); |
76 // Remove vector and slot. | 82 // Remove vector and slot. |
77 __ add(esp, Immediate(2 * kPointerSize)); | 83 __ add(esp, Immediate(2 * kPointerSize)); |
78 } | 84 } |
79 | 85 |
| 86 void PropertyHandlerCompiler::PushReturnAddress(Register tmp) { |
| 87 MacroAssembler* masm = this->masm(); |
| 88 __ push(tmp); |
| 89 } |
| 90 |
| 91 void PropertyHandlerCompiler::PopReturnAddress(Register tmp) { |
| 92 MacroAssembler* masm = this->masm(); |
| 93 __ pop(tmp); |
| 94 } |
80 | 95 |
81 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( | 96 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( |
82 MacroAssembler* masm, Label* miss_label, Register receiver, | 97 MacroAssembler* masm, Label* miss_label, Register receiver, |
83 Handle<Name> name, Register scratch0, Register scratch1) { | 98 Handle<Name> name, Register scratch0, Register scratch1) { |
84 DCHECK(name->IsUniqueName()); | 99 DCHECK(name->IsUniqueName()); |
85 DCHECK(!receiver.is(scratch0)); | 100 DCHECK(!receiver.is(scratch0)); |
86 Counters* counters = masm->isolate()->counters(); | 101 Counters* counters = masm->isolate()->counters(); |
87 __ IncrementCounter(counters->negative_lookups(), 1); | 102 __ IncrementCounter(counters->negative_lookups(), 1); |
88 __ IncrementCounter(counters->negative_lookups_miss(), 1); | 103 __ IncrementCounter(counters->negative_lookups_miss(), 1); |
89 | 104 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 __ mov(this->name(), Immediate(name)); | 368 __ mov(this->name(), Immediate(name)); |
354 } | 369 } |
355 } | 370 } |
356 | 371 |
357 | 372 |
358 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { | 373 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) { |
359 __ mov(this->name(), Immediate(name)); | 374 __ mov(this->name(), Immediate(name)); |
360 } | 375 } |
361 | 376 |
362 | 377 |
363 void NamedStoreHandlerCompiler::RearrangeVectorAndSlot( | |
364 Register current_map, Register destination_map) { | |
365 DCHECK(destination_map.is(StoreTransitionHelper::MapRegister())); | |
366 DCHECK(current_map.is(StoreTransitionHelper::VectorRegister())); | |
367 ExternalReference virtual_slot = | |
368 ExternalReference::virtual_slot_register(isolate()); | |
369 __ mov(destination_map, current_map); | |
370 __ pop(current_map); | |
371 __ mov(Operand::StaticVariable(virtual_slot), current_map); | |
372 __ pop(current_map); // put vector in place. | |
373 } | |
374 | |
375 | |
376 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, | 378 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition, |
377 Register map_reg, | 379 Register map_reg, |
378 Register scratch, | 380 Register scratch, |
379 Label* miss) { | 381 Label* miss) { |
380 Handle<WeakCell> cell = Map::WeakCellForMap(transition); | 382 Handle<WeakCell> cell = Map::WeakCellForMap(transition); |
381 DCHECK(!map_reg.is(scratch)); | 383 DCHECK(!map_reg.is(scratch)); |
382 __ LoadWeakValue(map_reg, cell, miss); | 384 __ LoadWeakValue(map_reg, cell, miss); |
383 if (transition->CanBeDeprecated()) { | 385 if (transition->CanBeDeprecated()) { |
384 __ mov(scratch, FieldOperand(map_reg, Map::kBitField3Offset)); | 386 __ mov(scratch, FieldOperand(map_reg, Map::kBitField3Offset)); |
385 __ and_(scratch, Immediate(Map::Deprecated::kMask)); | 387 __ and_(scratch, Immediate(Map::Deprecated::kMask)); |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 // Return the generated code. | 713 // Return the generated code. |
712 return GetCode(kind(), name); | 714 return GetCode(kind(), name); |
713 } | 715 } |
714 | 716 |
715 | 717 |
716 #undef __ | 718 #undef __ |
717 } // namespace internal | 719 } // namespace internal |
718 } // namespace v8 | 720 } // namespace v8 |
719 | 721 |
720 #endif // V8_TARGET_ARCH_IA32 | 722 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |