| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
| 9 #include "src/hydrogen-osr.h" | 9 #include "src/hydrogen-osr.h" |
| 10 #include "src/ic/ic.h" | 10 #include "src/ic/ic.h" |
| (...skipping 2860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2871 DCHECK(ToRegister(instr->context()).is(cp)); | 2871 DCHECK(ToRegister(instr->context()).is(cp)); |
| 2872 DCHECK(ToRegister(instr->global_object()) | 2872 DCHECK(ToRegister(instr->global_object()) |
| 2873 .is(LoadDescriptor::ReceiverRegister())); | 2873 .is(LoadDescriptor::ReceiverRegister())); |
| 2874 DCHECK(ToRegister(instr->result()).is(v0)); | 2874 DCHECK(ToRegister(instr->result()).is(v0)); |
| 2875 | 2875 |
| 2876 __ li(LoadDescriptor::NameRegister(), Operand(instr->name())); | 2876 __ li(LoadDescriptor::NameRegister(), Operand(instr->name())); |
| 2877 if (FLAG_vector_ics) { | 2877 if (FLAG_vector_ics) { |
| 2878 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); | 2878 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); |
| 2879 } | 2879 } |
| 2880 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; | 2880 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; |
| 2881 Handle<Code> ic = CodeFactory::LoadIC(isolate(), mode).code(); | 2881 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode).code(); |
| 2882 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 2882 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 2883 } | 2883 } |
| 2884 | 2884 |
| 2885 | 2885 |
| 2886 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { | 2886 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { |
| 2887 Register value = ToRegister(instr->value()); | 2887 Register value = ToRegister(instr->value()); |
| 2888 Register cell = scratch0(); | 2888 Register cell = scratch0(); |
| 2889 | 2889 |
| 2890 // Load the cell. | 2890 // Load the cell. |
| 2891 __ li(cell, Operand(instr->hydrogen()->cell().handle())); | 2891 __ li(cell, Operand(instr->hydrogen()->cell().handle())); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3012 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { | 3012 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { |
| 3013 DCHECK(ToRegister(instr->context()).is(cp)); | 3013 DCHECK(ToRegister(instr->context()).is(cp)); |
| 3014 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); | 3014 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); |
| 3015 DCHECK(ToRegister(instr->result()).is(v0)); | 3015 DCHECK(ToRegister(instr->result()).is(v0)); |
| 3016 | 3016 |
| 3017 // Name is always in a2. | 3017 // Name is always in a2. |
| 3018 __ li(LoadDescriptor::NameRegister(), Operand(instr->name())); | 3018 __ li(LoadDescriptor::NameRegister(), Operand(instr->name())); |
| 3019 if (FLAG_vector_ics) { | 3019 if (FLAG_vector_ics) { |
| 3020 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr); | 3020 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr); |
| 3021 } | 3021 } |
| 3022 Handle<Code> ic = CodeFactory::LoadIC(isolate(), NOT_CONTEXTUAL).code(); | 3022 Handle<Code> ic = |
| 3023 CodeFactory::LoadICInOptimizedCode(isolate(), NOT_CONTEXTUAL).code(); |
| 3023 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 3024 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 3024 } | 3025 } |
| 3025 | 3026 |
| 3026 | 3027 |
| 3027 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { | 3028 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { |
| 3028 Register scratch = scratch0(); | 3029 Register scratch = scratch0(); |
| 3029 Register function = ToRegister(instr->function()); | 3030 Register function = ToRegister(instr->function()); |
| 3030 Register result = ToRegister(instr->result()); | 3031 Register result = ToRegister(instr->result()); |
| 3031 | 3032 |
| 3032 // Get the prototype or initial map from the function. | 3033 // Get the prototype or initial map from the function. |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3361 | 3362 |
| 3362 void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) { | 3363 void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) { |
| 3363 DCHECK(ToRegister(instr->context()).is(cp)); | 3364 DCHECK(ToRegister(instr->context()).is(cp)); |
| 3364 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); | 3365 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); |
| 3365 DCHECK(ToRegister(instr->key()).is(LoadDescriptor::NameRegister())); | 3366 DCHECK(ToRegister(instr->key()).is(LoadDescriptor::NameRegister())); |
| 3366 | 3367 |
| 3367 if (FLAG_vector_ics) { | 3368 if (FLAG_vector_ics) { |
| 3368 EmitVectorLoadICRegisters<LLoadKeyedGeneric>(instr); | 3369 EmitVectorLoadICRegisters<LLoadKeyedGeneric>(instr); |
| 3369 } | 3370 } |
| 3370 | 3371 |
| 3371 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code(); | 3372 Handle<Code> ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate()).code(); |
| 3372 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 3373 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
| 3373 } | 3374 } |
| 3374 | 3375 |
| 3375 | 3376 |
| 3376 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { | 3377 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { |
| 3377 Register scratch = scratch0(); | 3378 Register scratch = scratch0(); |
| 3378 Register temp = scratch1(); | 3379 Register temp = scratch1(); |
| 3379 Register result = ToRegister(instr->result()); | 3380 Register result = ToRegister(instr->result()); |
| 3380 | 3381 |
| 3381 if (instr->hydrogen()->from_inlined()) { | 3382 if (instr->hydrogen()->from_inlined()) { |
| (...skipping 2573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5955 __ li(at, scope_info); | 5956 __ li(at, scope_info); |
| 5956 __ Push(at, ToRegister(instr->function())); | 5957 __ Push(at, ToRegister(instr->function())); |
| 5957 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5958 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 5958 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5959 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 5959 } | 5960 } |
| 5960 | 5961 |
| 5961 | 5962 |
| 5962 #undef __ | 5963 #undef __ |
| 5963 | 5964 |
| 5964 } } // namespace v8::internal | 5965 } } // namespace v8::internal |
| OLD | NEW |