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 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/hydrogen-osr.h" | 10 #include "src/hydrogen-osr.h" |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 // object). | 654 // object). |
655 if (info_->this_has_uses() && | 655 if (info_->this_has_uses() && |
656 info_->strict_mode() == SLOPPY && | 656 info_->strict_mode() == SLOPPY && |
657 !info_->is_native()) { | 657 !info_->is_native()) { |
658 Label ok; | 658 Label ok; |
659 int receiver_offset = info_->scope()->num_parameters() * kXRegSize; | 659 int receiver_offset = info_->scope()->num_parameters() * kXRegSize; |
660 __ Peek(x10, receiver_offset); | 660 __ Peek(x10, receiver_offset); |
661 __ JumpIfNotRoot(x10, Heap::kUndefinedValueRootIndex, &ok); | 661 __ JumpIfNotRoot(x10, Heap::kUndefinedValueRootIndex, &ok); |
662 | 662 |
663 __ Ldr(x10, GlobalObjectMemOperand()); | 663 __ Ldr(x10, GlobalObjectMemOperand()); |
664 __ Ldr(x10, FieldMemOperand(x10, GlobalObject::kGlobalReceiverOffset)); | 664 __ Ldr(x10, FieldMemOperand(x10, GlobalObject::kGlobalProxyOffset)); |
665 __ Poke(x10, receiver_offset); | 665 __ Poke(x10, receiver_offset); |
666 | 666 |
667 __ Bind(&ok); | 667 __ Bind(&ok); |
668 } | 668 } |
669 } | 669 } |
670 | 670 |
671 ASSERT(__ StackPointer().Is(jssp)); | 671 ASSERT(__ StackPointer().Is(jssp)); |
672 info()->set_prologue_offset(masm_->pc_offset()); | 672 info()->set_prologue_offset(masm_->pc_offset()); |
673 if (NeedsEagerFrame()) { | 673 if (NeedsEagerFrame()) { |
674 if (info()->IsStub()) { | 674 if (info()->IsStub()) { |
(...skipping 5267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5942 | 5942 |
5943 // Deoptimize if the receiver is not a JS object. | 5943 // Deoptimize if the receiver is not a JS object. |
5944 DeoptimizeIfSmi(receiver, instr->environment()); | 5944 DeoptimizeIfSmi(receiver, instr->environment()); |
5945 __ CompareObjectType(receiver, result, result, FIRST_SPEC_OBJECT_TYPE); | 5945 __ CompareObjectType(receiver, result, result, FIRST_SPEC_OBJECT_TYPE); |
5946 __ B(ge, ©_receiver); | 5946 __ B(ge, ©_receiver); |
5947 Deoptimize(instr->environment()); | 5947 Deoptimize(instr->environment()); |
5948 | 5948 |
5949 __ Bind(&global_object); | 5949 __ Bind(&global_object); |
5950 __ Ldr(result, FieldMemOperand(function, JSFunction::kContextOffset)); | 5950 __ Ldr(result, FieldMemOperand(function, JSFunction::kContextOffset)); |
5951 __ Ldr(result, ContextMemOperand(result, Context::GLOBAL_OBJECT_INDEX)); | 5951 __ Ldr(result, ContextMemOperand(result, Context::GLOBAL_OBJECT_INDEX)); |
5952 __ Ldr(result, FieldMemOperand(result, GlobalObject::kGlobalReceiverOffset)); | 5952 __ Ldr(result, FieldMemOperand(result, GlobalObject::kGlobalProxyOffset)); |
5953 __ B(&done); | 5953 __ B(&done); |
5954 | 5954 |
5955 __ Bind(©_receiver); | 5955 __ Bind(©_receiver); |
5956 __ Mov(result, receiver); | 5956 __ Mov(result, receiver); |
5957 __ Bind(&done); | 5957 __ Bind(&done); |
5958 } | 5958 } |
5959 | 5959 |
5960 | 5960 |
5961 void LCodeGen::DoDeferredLoadMutableDouble(LLoadFieldByIndex* instr, | 5961 void LCodeGen::DoDeferredLoadMutableDouble(LLoadFieldByIndex* instr, |
5962 Register result, | 5962 Register result, |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6043 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6043 Handle<ScopeInfo> scope_info = instr->scope_info(); |
6044 __ Push(scope_info); | 6044 __ Push(scope_info); |
6045 __ Push(ToRegister(instr->function())); | 6045 __ Push(ToRegister(instr->function())); |
6046 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6046 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
6047 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6047 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6048 } | 6048 } |
6049 | 6049 |
6050 | 6050 |
6051 | 6051 |
6052 } } // namespace v8::internal | 6052 } } // namespace v8::internal |
OLD | NEW |