Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: src/crankshaft/x87/lithium-codegen-x87.cc

Issue 1714763002: X87: More simplification and unification of frame handling. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/crankshaft/x87/lithium-codegen-x87.h ('k') | src/crankshaft/x87/lithium-x87.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
6 6
7 #include "src/crankshaft/x87/lithium-codegen-x87.h" 7 #include "src/crankshaft/x87/lithium-codegen-x87.h"
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"
11 #include "src/code-stubs.h" 11 #include "src/code-stubs.h"
12 #include "src/codegen.h" 12 #include "src/codegen.h"
13 #include "src/crankshaft/hydrogen-osr.h" 13 #include "src/crankshaft/hydrogen-osr.h"
14 #include "src/deoptimizer.h" 14 #include "src/deoptimizer.h"
15 #include "src/ic/ic.h" 15 #include "src/ic/ic.h"
16 #include "src/ic/stub-cache.h" 16 #include "src/ic/stub-cache.h"
17 #include "src/profiler/cpu-profiler.h" 17 #include "src/profiler/cpu-profiler.h"
18 #include "src/x87/frames-x87.h" 18 #include "src/x87/frames-x87.h"
19 19
20 namespace v8 { 20 namespace v8 {
21 namespace internal { 21 namespace internal {
22 22
23
24 // When invoking builtins, we need to record the safepoint in the middle of 23 // When invoking builtins, we need to record the safepoint in the middle of
25 // the invoke instruction sequence generated by the macro assembler. 24 // the invoke instruction sequence generated by the macro assembler.
26 class SafepointGenerator final : public CallWrapper { 25 class SafepointGenerator final : public CallWrapper {
27 public: 26 public:
28 SafepointGenerator(LCodeGen* codegen, 27 SafepointGenerator(LCodeGen* codegen,
29 LPointerMap* pointers, 28 LPointerMap* pointers,
30 Safepoint::DeoptMode mode) 29 Safepoint::DeoptMode mode)
31 : codegen_(codegen), 30 : codegen_(codegen),
32 pointers_(pointers), 31 pointers_(pointers),
33 deopt_mode_(mode) {} 32 deopt_mode_(mode) {}
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 return GeneratePrologue() && 67 return GeneratePrologue() &&
69 GenerateBody() && 68 GenerateBody() &&
70 GenerateDeferredCode() && 69 GenerateDeferredCode() &&
71 GenerateJumpTable() && 70 GenerateJumpTable() &&
72 GenerateSafepointTable(); 71 GenerateSafepointTable();
73 } 72 }
74 73
75 74
76 void LCodeGen::FinishCode(Handle<Code> code) { 75 void LCodeGen::FinishCode(Handle<Code> code) {
77 DCHECK(is_done()); 76 DCHECK(is_done());
78 code->set_stack_slots(GetStackSlotCount()); 77 code->set_stack_slots(GetTotalFrameSlotCount());
79 code->set_safepoint_table_offset(safepoints_.GetCodeOffset()); 78 code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
80 PopulateDeoptimizationData(code); 79 PopulateDeoptimizationData(code);
81 if (info()->ShouldEnsureSpaceForLazyDeopt()) { 80 if (info()->ShouldEnsureSpaceForLazyDeopt()) {
82 Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(code); 81 Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(code);
83 } 82 }
84 } 83 }
85 84
86 85
87 #ifdef _MSC_VER 86 #ifdef _MSC_VER
88 void LCodeGen::MakeSureStackPagesMapped(int offset) { 87 void LCodeGen::MakeSureStackPagesMapped(int offset) {
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 DCHECK(is_done()); 478 DCHECK(is_done());
480 if (info()->ShouldEnsureSpaceForLazyDeopt()) { 479 if (info()->ShouldEnsureSpaceForLazyDeopt()) {
481 // For lazy deoptimization we need space to patch a call after every call. 480 // For lazy deoptimization we need space to patch a call after every call.
482 // Ensure there is always space for such patching, even if the code ends 481 // Ensure there is always space for such patching, even if the code ends
483 // in a call. 482 // in a call.
484 int target_offset = masm()->pc_offset() + Deoptimizer::patch_size(); 483 int target_offset = masm()->pc_offset() + Deoptimizer::patch_size();
485 while (masm()->pc_offset() < target_offset) { 484 while (masm()->pc_offset() < target_offset) {
486 masm()->nop(); 485 masm()->nop();
487 } 486 }
488 } 487 }
489 safepoints_.Emit(masm(), GetStackSlotCount()); 488 safepoints_.Emit(masm(), GetTotalFrameSlotCount());
490 return !is_aborted(); 489 return !is_aborted();
491 } 490 }
492 491
493 492
494 Register LCodeGen::ToRegister(int code) const { 493 Register LCodeGen::ToRegister(int code) const {
495 return Register::from_code(code); 494 return Register::from_code(code);
496 } 495 }
497 496
498 497
499 X87Register LCodeGen::ToX87Register(int code) const { 498 X87Register LCodeGen::ToX87Register(int code) const {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 DCHECK(index < 0); 831 DCHECK(index < 0);
833 return -(index + 1) * kPointerSize + kPCOnStackSize; 832 return -(index + 1) * kPointerSize + kPCOnStackSize;
834 } 833 }
835 834
836 835
837 Operand LCodeGen::ToOperand(LOperand* op) const { 836 Operand LCodeGen::ToOperand(LOperand* op) const {
838 if (op->IsRegister()) return Operand(ToRegister(op)); 837 if (op->IsRegister()) return Operand(ToRegister(op));
839 DCHECK(!op->IsDoubleRegister()); 838 DCHECK(!op->IsDoubleRegister());
840 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); 839 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot());
841 if (NeedsEagerFrame()) { 840 if (NeedsEagerFrame()) {
842 return Operand(ebp, StackSlotOffset(op->index())); 841 return Operand(ebp, FrameSlotToFPOffset(op->index()));
843 } else { 842 } else {
844 // Retrieve parameter without eager stack-frame relative to the 843 // Retrieve parameter without eager stack-frame relative to the
845 // stack-pointer. 844 // stack-pointer.
846 return Operand(esp, ArgumentsOffsetWithoutFrame(op->index())); 845 return Operand(esp, ArgumentsOffsetWithoutFrame(op->index()));
847 } 846 }
848 } 847 }
849 848
850 849
851 Operand LCodeGen::HighOperand(LOperand* op) { 850 Operand LCodeGen::HighOperand(LOperand* op) {
852 DCHECK(op->IsDoubleStackSlot()); 851 DCHECK(op->IsDoubleStackSlot());
853 if (NeedsEagerFrame()) { 852 if (NeedsEagerFrame()) {
854 return Operand(ebp, StackSlotOffset(op->index()) + kPointerSize); 853 return Operand(ebp, FrameSlotToFPOffset(op->index()) + kPointerSize);
855 } else { 854 } else {
856 // Retrieve parameter without eager stack-frame relative to the 855 // Retrieve parameter without eager stack-frame relative to the
857 // stack-pointer. 856 // stack-pointer.
858 return Operand( 857 return Operand(
859 esp, ArgumentsOffsetWithoutFrame(op->index()) + kPointerSize); 858 esp, ArgumentsOffsetWithoutFrame(op->index()) + kPointerSize);
860 } 859 }
861 } 860 }
862 861
863 862
864 void LCodeGen::WriteTranslation(LEnvironment* environment, 863 void LCodeGen::WriteTranslation(LEnvironment* environment,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 environment->HasTaggedValueAt(env_offset + i), 916 environment->HasTaggedValueAt(env_offset + i),
918 environment->HasUint32ValueAt(env_offset + i), 917 environment->HasUint32ValueAt(env_offset + i),
919 object_index_pointer, 918 object_index_pointer,
920 dematerialized_index_pointer); 919 dematerialized_index_pointer);
921 } 920 }
922 return; 921 return;
923 } 922 }
924 923
925 if (op->IsStackSlot()) { 924 if (op->IsStackSlot()) {
926 int index = op->index(); 925 int index = op->index();
927 if (index >= 0) {
928 index += StandardFrameConstants::kFixedFrameSize / kPointerSize;
929 }
930 if (is_tagged) { 926 if (is_tagged) {
931 translation->StoreStackSlot(index); 927 translation->StoreStackSlot(index);
932 } else if (is_uint32) { 928 } else if (is_uint32) {
933 translation->StoreUint32StackSlot(index); 929 translation->StoreUint32StackSlot(index);
934 } else { 930 } else {
935 translation->StoreInt32StackSlot(index); 931 translation->StoreInt32StackSlot(index);
936 } 932 }
937 } else if (op->IsDoubleStackSlot()) { 933 } else if (op->IsDoubleStackSlot()) {
938 int index = op->index(); 934 int index = op->index();
939 if (index >= 0) {
940 index += StandardFrameConstants::kFixedFrameSize / kPointerSize;
941 }
942 translation->StoreDoubleStackSlot(index); 935 translation->StoreDoubleStackSlot(index);
943 } else if (op->IsRegister()) { 936 } else if (op->IsRegister()) {
944 Register reg = ToRegister(op); 937 Register reg = ToRegister(op);
945 if (is_tagged) { 938 if (is_tagged) {
946 translation->StoreRegister(reg); 939 translation->StoreRegister(reg);
947 } else if (is_uint32) { 940 } else if (is_uint32) {
948 translation->StoreUint32Register(reg); 941 translation->StoreUint32Register(reg);
949 } else { 942 } else {
950 translation->StoreInt32Register(reg); 943 translation->StoreInt32Register(reg);
951 } 944 }
(...skipping 5007 matching lines...) Expand 10 before | Expand all | Expand 10 after
5959 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), context); 5952 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), context);
5960 } 5953 }
5961 5954
5962 5955
5963 #undef __ 5956 #undef __
5964 5957
5965 } // namespace internal 5958 } // namespace internal
5966 } // namespace v8 5959 } // namespace v8
5967 5960
5968 #endif // V8_TARGET_ARCH_X87 5961 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/crankshaft/x87/lithium-codegen-x87.h ('k') | src/crankshaft/x87/lithium-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698