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

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

Issue 1707703002: Revert of 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
OLDNEW
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/crankshaft/arm64/lithium-codegen-arm64.h" 5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h"
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 environment->HasTaggedValueAt(env_offset + i), 270 environment->HasTaggedValueAt(env_offset + i),
271 environment->HasUint32ValueAt(env_offset + i), 271 environment->HasUint32ValueAt(env_offset + i),
272 object_index_pointer, 272 object_index_pointer,
273 dematerialized_index_pointer); 273 dematerialized_index_pointer);
274 } 274 }
275 return; 275 return;
276 } 276 }
277 277
278 if (op->IsStackSlot()) { 278 if (op->IsStackSlot()) {
279 int index = op->index(); 279 int index = op->index();
280 if (index >= 0) {
281 index += StandardFrameConstants::kFixedFrameSize / kPointerSize;
282 }
280 if (is_tagged) { 283 if (is_tagged) {
281 translation->StoreStackSlot(index); 284 translation->StoreStackSlot(index);
282 } else if (is_uint32) { 285 } else if (is_uint32) {
283 translation->StoreUint32StackSlot(index); 286 translation->StoreUint32StackSlot(index);
284 } else { 287 } else {
285 translation->StoreInt32StackSlot(index); 288 translation->StoreInt32StackSlot(index);
286 } 289 }
287 } else if (op->IsDoubleStackSlot()) { 290 } else if (op->IsDoubleStackSlot()) {
288 int index = op->index(); 291 int index = op->index();
292 if (index >= 0) {
293 index += StandardFrameConstants::kFixedFrameSize / kPointerSize;
294 }
289 translation->StoreDoubleStackSlot(index); 295 translation->StoreDoubleStackSlot(index);
290 } else if (op->IsRegister()) { 296 } else if (op->IsRegister()) {
291 Register reg = ToRegister(op); 297 Register reg = ToRegister(op);
292 if (is_tagged) { 298 if (is_tagged) {
293 translation->StoreRegister(reg); 299 translation->StoreRegister(reg);
294 } else if (is_uint32) { 300 } else if (is_uint32) {
295 translation->StoreUint32Register(reg); 301 translation->StoreUint32Register(reg);
296 } else { 302 } else {
297 translation->StoreInt32Register(reg); 303 translation->StoreInt32Register(reg);
298 } 304 }
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 if (!is_aborted()) status_ = DONE; 857 if (!is_aborted()) status_ = DONE;
852 return !is_aborted(); 858 return !is_aborted();
853 } 859 }
854 860
855 861
856 bool LCodeGen::GenerateSafepointTable() { 862 bool LCodeGen::GenerateSafepointTable() {
857 DCHECK(is_done()); 863 DCHECK(is_done());
858 // We do not know how much data will be emitted for the safepoint table, so 864 // We do not know how much data will be emitted for the safepoint table, so
859 // force emission of the veneer pool. 865 // force emission of the veneer pool.
860 masm()->CheckVeneerPool(true, true); 866 masm()->CheckVeneerPool(true, true);
861 safepoints_.Emit(masm(), GetTotalFrameSlotCount()); 867 safepoints_.Emit(masm(), GetStackSlotCount());
862 return !is_aborted(); 868 return !is_aborted();
863 } 869 }
864 870
865 871
866 void LCodeGen::FinishCode(Handle<Code> code) { 872 void LCodeGen::FinishCode(Handle<Code> code) {
867 DCHECK(is_done()); 873 DCHECK(is_done());
868 code->set_stack_slots(GetStackSlotCount()); 874 code->set_stack_slots(GetStackSlotCount());
869 code->set_safepoint_table_offset(safepoints_.GetCodeOffset()); 875 code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
870 PopulateDeoptimizationData(code); 876 PopulateDeoptimizationData(code);
871 } 877 }
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 return -(index + 1) * kPointerSize; 1148 return -(index + 1) * kPointerSize;
1143 } 1149 }
1144 1150
1145 1151
1146 MemOperand LCodeGen::ToMemOperand(LOperand* op, StackMode stack_mode) const { 1152 MemOperand LCodeGen::ToMemOperand(LOperand* op, StackMode stack_mode) const {
1147 DCHECK(op != NULL); 1153 DCHECK(op != NULL);
1148 DCHECK(!op->IsRegister()); 1154 DCHECK(!op->IsRegister());
1149 DCHECK(!op->IsDoubleRegister()); 1155 DCHECK(!op->IsDoubleRegister());
1150 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); 1156 DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot());
1151 if (NeedsEagerFrame()) { 1157 if (NeedsEagerFrame()) {
1152 int fp_offset = FrameSlotToFPOffset(op->index()); 1158 int fp_offset = StackSlotOffset(op->index());
1153 // Loads and stores have a bigger reach in positive offset than negative. 1159 // Loads and stores have a bigger reach in positive offset than negative.
1154 // We try to access using jssp (positive offset) first, then fall back to 1160 // We try to access using jssp (positive offset) first, then fall back to
1155 // fp (negative offset) if that fails. 1161 // fp (negative offset) if that fails.
1156 // 1162 //
1157 // We can reference a stack slot from jssp only if we know how much we've 1163 // We can reference a stack slot from jssp only if we know how much we've
1158 // put on the stack. We don't know this in the following cases: 1164 // put on the stack. We don't know this in the following cases:
1159 // - stack_mode != kCanUseStackPointer: this is the case when deferred 1165 // - stack_mode != kCanUseStackPointer: this is the case when deferred
1160 // code has saved the registers. 1166 // code has saved the registers.
1161 // - saves_caller_doubles(): some double registers have been pushed, jssp 1167 // - saves_caller_doubles(): some double registers have been pushed, jssp
1162 // references the end of the double registers and not the end of the stack 1168 // references the end of the double registers and not the end of the stack
(...skipping 4571 matching lines...) Expand 10 before | Expand all | Expand 10 after
5734 Handle<ScopeInfo> scope_info = instr->scope_info(); 5740 Handle<ScopeInfo> scope_info = instr->scope_info();
5735 __ Push(scope_info); 5741 __ Push(scope_info);
5736 __ Push(ToRegister(instr->function())); 5742 __ Push(ToRegister(instr->function()));
5737 CallRuntime(Runtime::kPushBlockContext, instr); 5743 CallRuntime(Runtime::kPushBlockContext, instr);
5738 RecordSafepoint(Safepoint::kNoLazyDeopt); 5744 RecordSafepoint(Safepoint::kNoLazyDeopt);
5739 } 5745 }
5740 5746
5741 5747
5742 } // namespace internal 5748 } // namespace internal
5743 } // namespace v8 5749 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.h ('k') | src/crankshaft/ia32/lithium-codegen-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698