| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 arguments()->PrintTo(stream); | 379 arguments()->PrintTo(stream); |
| 380 | 380 |
| 381 stream->Add(" length "); | 381 stream->Add(" length "); |
| 382 length()->PrintTo(stream); | 382 length()->PrintTo(stream); |
| 383 | 383 |
| 384 stream->Add(" index "); | 384 stream->Add(" index "); |
| 385 index()->PrintTo(stream); | 385 index()->PrintTo(stream); |
| 386 } | 386 } |
| 387 | 387 |
| 388 | 388 |
| 389 int LPlatformChunk::GetNextSpillIndex(bool is_double) { | 389 int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) { |
| 390 // Skip a slot if for a double-width slot. | 390 // Skip a slot if for a double-width slot. |
| 391 if (is_double) { | 391 if (kind == DOUBLE_REGISTERS) { |
| 392 spill_slot_count_++; | 392 spill_slot_count_++; |
| 393 spill_slot_count_ |= 1; | 393 spill_slot_count_ |= 1; |
| 394 num_double_slots_++; | 394 num_double_slots_++; |
| 395 } | 395 } |
| 396 return spill_slot_count_++; | 396 return spill_slot_count_++; |
| 397 } | 397 } |
| 398 | 398 |
| 399 | 399 |
| 400 LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { | 400 LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) { |
| 401 int index = GetNextSpillIndex(is_double); | 401 int index = GetNextSpillIndex(kind); |
| 402 if (is_double) { | 402 if (kind == DOUBLE_REGISTERS) { |
| 403 return LDoubleStackSlot::Create(index, zone()); | 403 return LDoubleStackSlot::Create(index, zone()); |
| 404 } else { | 404 } else { |
| 405 ASSERT(kind == GENERAL_REGISTERS); |
| 405 return LStackSlot::Create(index, zone()); | 406 return LStackSlot::Create(index, zone()); |
| 406 } | 407 } |
| 407 } | 408 } |
| 408 | 409 |
| 409 | 410 |
| 410 void LStoreNamedField::PrintDataTo(StringStream* stream) { | 411 void LStoreNamedField::PrintDataTo(StringStream* stream) { |
| 411 object()->PrintTo(stream); | 412 object()->PrintTo(stream); |
| 412 hydrogen()->access().PrintTo(stream); | 413 hydrogen()->access().PrintTo(stream); |
| 413 stream->Add(" <- "); | 414 stream->Add(" <- "); |
| 414 value()->PrintTo(stream); | 415 value()->PrintTo(stream); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 | 473 |
| 473 | 474 |
| 474 LPlatformChunk* LChunkBuilder::Build() { | 475 LPlatformChunk* LChunkBuilder::Build() { |
| 475 ASSERT(is_unused()); | 476 ASSERT(is_unused()); |
| 476 chunk_ = new(zone()) LPlatformChunk(info(), graph()); | 477 chunk_ = new(zone()) LPlatformChunk(info(), graph()); |
| 477 LPhase phase("L_Building chunk", chunk_); | 478 LPhase phase("L_Building chunk", chunk_); |
| 478 status_ = BUILDING; | 479 status_ = BUILDING; |
| 479 | 480 |
| 480 // Reserve the first spill slot for the state of dynamic alignment. | 481 // Reserve the first spill slot for the state of dynamic alignment. |
| 481 if (info()->IsOptimizing()) { | 482 if (info()->IsOptimizing()) { |
| 482 int alignment_state_index = chunk_->GetNextSpillIndex(false); | 483 int alignment_state_index = chunk_->GetNextSpillIndex(GENERAL_REGISTERS); |
| 483 ASSERT_EQ(alignment_state_index, 0); | 484 ASSERT_EQ(alignment_state_index, 0); |
| 484 USE(alignment_state_index); | 485 USE(alignment_state_index); |
| 485 } | 486 } |
| 486 | 487 |
| 487 // If compiling for OSR, reserve space for the unoptimized frame, | 488 // If compiling for OSR, reserve space for the unoptimized frame, |
| 488 // which will be subsumed into this frame. | 489 // which will be subsumed into this frame. |
| 489 if (graph()->has_osr()) { | 490 if (graph()->has_osr()) { |
| 490 for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { | 491 for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { |
| 491 chunk_->GetNextSpillIndex(false); | 492 chunk_->GetNextSpillIndex(GENERAL_REGISTERS); |
| 492 } | 493 } |
| 493 } | 494 } |
| 494 | 495 |
| 495 const ZoneList<HBasicBlock*>* blocks = graph()->blocks(); | 496 const ZoneList<HBasicBlock*>* blocks = graph()->blocks(); |
| 496 for (int i = 0; i < blocks->length(); i++) { | 497 for (int i = 0; i < blocks->length(); i++) { |
| 497 HBasicBlock* next = NULL; | 498 HBasicBlock* next = NULL; |
| 498 if (i < blocks->length() - 1) next = blocks->at(i + 1); | 499 if (i < blocks->length() - 1) next = blocks->at(i + 1); |
| 499 DoBasicBlock(blocks->at(i), next); | 500 DoBasicBlock(blocks->at(i), next); |
| 500 if (is_aborted()) return NULL; | 501 if (is_aborted()) return NULL; |
| 501 } | 502 } |
| (...skipping 2217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2719 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { | 2720 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { |
| 2720 LOperand* object = UseRegister(instr->object()); | 2721 LOperand* object = UseRegister(instr->object()); |
| 2721 LOperand* index = UseTempRegister(instr->index()); | 2722 LOperand* index = UseTempRegister(instr->index()); |
| 2722 return DefineSameAsFirst(new(zone()) LLoadFieldByIndex(object, index)); | 2723 return DefineSameAsFirst(new(zone()) LLoadFieldByIndex(object, index)); |
| 2723 } | 2724 } |
| 2724 | 2725 |
| 2725 | 2726 |
| 2726 } } // namespace v8::internal | 2727 } } // namespace v8::internal |
| 2727 | 2728 |
| 2728 #endif // V8_TARGET_ARCH_IA32 | 2729 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |