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

Side by Side Diff: src/crankshaft/ia32/lithium-ia32.cc

Issue 1702593002: More simplification and unification of frame handling (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix arm64 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/ia32/lithium-codegen-ia32.cc ('k') | src/crankshaft/lithium.h » ('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 #include "src/crankshaft/ia32/lithium-ia32.h" 5 #include "src/crankshaft/ia32/lithium-ia32.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #if V8_TARGET_ARCH_IA32 9 #if V8_TARGET_ARCH_IA32
10 10
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 length()->PrintTo(stream); 337 length()->PrintTo(stream);
338 338
339 stream->Add(" index "); 339 stream->Add(" index ");
340 index()->PrintTo(stream); 340 index()->PrintTo(stream);
341 } 341 }
342 342
343 343
344 int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) { 344 int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) {
345 // Skip a slot if for a double-width slot. 345 // Skip a slot if for a double-width slot.
346 if (kind == DOUBLE_REGISTERS) { 346 if (kind == DOUBLE_REGISTERS) {
347 spill_slot_count_++; 347 current_frame_slots_++;
348 spill_slot_count_ |= 1; 348 current_frame_slots_ |= 1;
349 num_double_slots_++; 349 num_double_slots_++;
350 } 350 }
351 return spill_slot_count_++; 351 return current_frame_slots_++;
352 } 352 }
353 353
354 354
355 LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) { 355 LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
356 int index = GetNextSpillIndex(kind); 356 int index = GetNextSpillIndex(kind);
357 if (kind == DOUBLE_REGISTERS) { 357 if (kind == DOUBLE_REGISTERS) {
358 return LDoubleStackSlot::Create(index, zone()); 358 return LDoubleStackSlot::Create(index, zone());
359 } else { 359 } else {
360 DCHECK(kind == GENERAL_REGISTERS); 360 DCHECK(kind == GENERAL_REGISTERS);
361 return LStackSlot::Create(index, zone()); 361 return LStackSlot::Create(index, zone());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 LPlatformChunk* LChunkBuilder::Build() { 431 LPlatformChunk* LChunkBuilder::Build() {
432 DCHECK(is_unused()); 432 DCHECK(is_unused());
433 chunk_ = new(zone()) LPlatformChunk(info(), graph()); 433 chunk_ = new(zone()) LPlatformChunk(info(), graph());
434 LPhase phase("L_Building chunk", chunk_); 434 LPhase phase("L_Building chunk", chunk_);
435 status_ = BUILDING; 435 status_ = BUILDING;
436 436
437 // Reserve the first spill slot for the state of dynamic alignment. 437 // Reserve the first spill slot for the state of dynamic alignment.
438 if (info()->IsOptimizing()) { 438 if (info()->IsOptimizing()) {
439 int alignment_state_index = chunk_->GetNextSpillIndex(GENERAL_REGISTERS); 439 int alignment_state_index = chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
440 DCHECK_EQ(alignment_state_index, 0); 440 DCHECK_EQ(alignment_state_index, 4);
441 USE(alignment_state_index); 441 USE(alignment_state_index);
442 } 442 }
443 443
444 // If compiling for OSR, reserve space for the unoptimized frame, 444 // If compiling for OSR, reserve space for the unoptimized frame,
445 // which will be subsumed into this frame. 445 // which will be subsumed into this frame.
446 if (graph()->has_osr()) { 446 if (graph()->has_osr()) {
447 for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { 447 for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) {
448 chunk_->GetNextSpillIndex(GENERAL_REGISTERS); 448 chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
449 } 449 }
450 } 450 }
(...skipping 2054 matching lines...) Expand 10 before | Expand all | Expand 10 after
2505 spill_index = env_index - instr->environment()->first_local_index(); 2505 spill_index = env_index - instr->environment()->first_local_index();
2506 if (spill_index > LUnallocated::kMaxFixedSlotIndex) { 2506 if (spill_index > LUnallocated::kMaxFixedSlotIndex) {
2507 Retry(kNotEnoughSpillSlotsForOsr); 2507 Retry(kNotEnoughSpillSlotsForOsr);
2508 spill_index = 0; 2508 spill_index = 0;
2509 } 2509 }
2510 if (spill_index == 0) { 2510 if (spill_index == 0) {
2511 // The dynamic frame alignment state overwrites the first local. 2511 // The dynamic frame alignment state overwrites the first local.
2512 // The first local is saved at the end of the unoptimized frame. 2512 // The first local is saved at the end of the unoptimized frame.
2513 spill_index = graph()->osr()->UnoptimizedFrameSlots(); 2513 spill_index = graph()->osr()->UnoptimizedFrameSlots();
2514 } 2514 }
2515 spill_index += StandardFrameConstants::kFixedSlotCount;
2515 } 2516 }
2516 return DefineAsSpilled(new(zone()) LUnknownOSRValue, spill_index); 2517 return DefineAsSpilled(new(zone()) LUnknownOSRValue, spill_index);
2517 } 2518 }
2518 2519
2519 2520
2520 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) { 2521 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) {
2521 LOperand* context = UseFixed(instr->context(), esi); 2522 LOperand* context = UseFixed(instr->context(), esi);
2522 LCallStub* result = new(zone()) LCallStub(context); 2523 LCallStub* result = new(zone()) LCallStub(context);
2523 return MarkAsCall(DefineFixed(result, eax), instr); 2524 return MarkAsCall(DefineFixed(result, eax), instr);
2524 } 2525 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2680 LAllocateBlockContext* result = 2681 LAllocateBlockContext* result =
2681 new(zone()) LAllocateBlockContext(context, function); 2682 new(zone()) LAllocateBlockContext(context, function);
2682 return MarkAsCall(DefineFixed(result, esi), instr); 2683 return MarkAsCall(DefineFixed(result, esi), instr);
2683 } 2684 }
2684 2685
2685 2686
2686 } // namespace internal 2687 } // namespace internal
2687 } // namespace v8 2688 } // namespace v8
2688 2689
2689 #endif // V8_TARGET_ARCH_IA32 2690 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/crankshaft/ia32/lithium-codegen-ia32.cc ('k') | src/crankshaft/lithium.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698