| 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 #if V8_TARGET_ARCH_X64 | 7 #if V8_TARGET_ARCH_X64 |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 2867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2878 DCHECK(ToRegister(instr->context()).is(rsi)); | 2878 DCHECK(ToRegister(instr->context()).is(rsi)); |
| 2879 DCHECK(ToRegister(instr->global_object()) | 2879 DCHECK(ToRegister(instr->global_object()) |
| 2880 .is(LoadDescriptor::ReceiverRegister())); | 2880 .is(LoadDescriptor::ReceiverRegister())); |
| 2881 DCHECK(ToRegister(instr->result()).is(rax)); | 2881 DCHECK(ToRegister(instr->result()).is(rax)); |
| 2882 | 2882 |
| 2883 __ Move(LoadDescriptor::NameRegister(), instr->name()); | 2883 __ Move(LoadDescriptor::NameRegister(), instr->name()); |
| 2884 if (FLAG_vector_ics) { | 2884 if (FLAG_vector_ics) { |
| 2885 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); | 2885 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); |
| 2886 } | 2886 } |
| 2887 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; | 2887 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; |
| 2888 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode).code(); | 2888 Handle<Code> ic = |
| 2889 CodeFactory::LoadICInOptimizedCode(isolate(), mode, UNINITIALIZED).code(); |
| 2889 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 2890 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 2890 } | 2891 } |
| 2891 | 2892 |
| 2892 | 2893 |
| 2893 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { | 2894 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { |
| 2894 Register value = ToRegister(instr->value()); | 2895 Register value = ToRegister(instr->value()); |
| 2895 Handle<Cell> cell_handle = instr->hydrogen()->cell().handle(); | 2896 Handle<Cell> cell_handle = instr->hydrogen()->cell().handle(); |
| 2896 | 2897 |
| 2897 // If the cell we are storing to contains the hole it could have | 2898 // If the cell we are storing to contains the hole it could have |
| 2898 // been deleted from the property dictionary. In that case, we need | 2899 // been deleted from the property dictionary. In that case, we need |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3021 | 3022 |
| 3022 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { | 3023 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { |
| 3023 DCHECK(ToRegister(instr->context()).is(rsi)); | 3024 DCHECK(ToRegister(instr->context()).is(rsi)); |
| 3024 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); | 3025 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); |
| 3025 DCHECK(ToRegister(instr->result()).is(rax)); | 3026 DCHECK(ToRegister(instr->result()).is(rax)); |
| 3026 | 3027 |
| 3027 __ Move(LoadDescriptor::NameRegister(), instr->name()); | 3028 __ Move(LoadDescriptor::NameRegister(), instr->name()); |
| 3028 if (FLAG_vector_ics) { | 3029 if (FLAG_vector_ics) { |
| 3029 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr); | 3030 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr); |
| 3030 } | 3031 } |
| 3031 Handle<Code> ic = | 3032 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode( |
| 3032 CodeFactory::LoadICInOptimizedCode(isolate(), NOT_CONTEXTUAL).code(); | 3033 isolate(), NOT_CONTEXTUAL, |
| 3034 instr->hydrogen()->initialization_state()).code(); |
| 3033 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 3035 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 3034 } | 3036 } |
| 3035 | 3037 |
| 3036 | 3038 |
| 3037 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { | 3039 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { |
| 3038 Register function = ToRegister(instr->function()); | 3040 Register function = ToRegister(instr->function()); |
| 3039 Register result = ToRegister(instr->result()); | 3041 Register result = ToRegister(instr->result()); |
| 3040 | 3042 |
| 3041 // Get the prototype or initial map from the function. | 3043 // Get the prototype or initial map from the function. |
| 3042 __ movp(result, | 3044 __ movp(result, |
| (...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4262 } | 4264 } |
| 4263 } | 4265 } |
| 4264 | 4266 |
| 4265 | 4267 |
| 4266 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { | 4268 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { |
| 4267 DCHECK(ToRegister(instr->context()).is(rsi)); | 4269 DCHECK(ToRegister(instr->context()).is(rsi)); |
| 4268 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); | 4270 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); |
| 4269 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); | 4271 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); |
| 4270 | 4272 |
| 4271 __ Move(StoreDescriptor::NameRegister(), instr->hydrogen()->name()); | 4273 __ Move(StoreDescriptor::NameRegister(), instr->hydrogen()->name()); |
| 4272 Handle<Code> ic = StoreIC::initialize_stub(isolate(), instr->language_mode()); | 4274 Handle<Code> ic = |
| 4275 StoreIC::initialize_stub(isolate(), instr->language_mode(), |
| 4276 instr->hydrogen()->initialization_state()); |
| 4273 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 4277 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 4274 } | 4278 } |
| 4275 | 4279 |
| 4276 | 4280 |
| 4277 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { | 4281 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
| 4278 Representation representation = instr->hydrogen()->length()->representation(); | 4282 Representation representation = instr->hydrogen()->length()->representation(); |
| 4279 DCHECK(representation.Equals(instr->hydrogen()->index()->representation())); | 4283 DCHECK(representation.Equals(instr->hydrogen()->index()->representation())); |
| 4280 DCHECK(representation.IsSmiOrInteger32()); | 4284 DCHECK(representation.IsSmiOrInteger32()); |
| 4281 | 4285 |
| 4282 Condition cc = instr->hydrogen()->allow_equality() ? below : below_equal; | 4286 Condition cc = instr->hydrogen()->allow_equality() ? below : below_equal; |
| (...skipping 1647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5930 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5934 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 5931 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5935 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 5932 } | 5936 } |
| 5933 | 5937 |
| 5934 | 5938 |
| 5935 #undef __ | 5939 #undef __ |
| 5936 | 5940 |
| 5937 } } // namespace v8::internal | 5941 } } // namespace v8::internal |
| 5938 | 5942 |
| 5939 #endif // V8_TARGET_ARCH_X64 | 5943 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |