| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 base = data->lazy_deoptimization_entry_code_; | 306 base = data->lazy_deoptimization_entry_code_; |
| 307 } | 307 } |
| 308 if (base == NULL || | 308 if (base == NULL || |
| 309 addr < base->GetStartAddress() || | 309 addr < base->GetStartAddress() || |
| 310 addr >= base->GetStartAddress() + | 310 addr >= base->GetStartAddress() + |
| 311 (kNumberOfEntries * table_entry_size_)) { | 311 (kNumberOfEntries * table_entry_size_)) { |
| 312 return kNotDeoptimizationEntry; | 312 return kNotDeoptimizationEntry; |
| 313 } | 313 } |
| 314 ASSERT_EQ(0, | 314 ASSERT_EQ(0, |
| 315 static_cast<int>(addr - base->GetStartAddress()) % table_entry_size_); | 315 static_cast<int>(addr - base->GetStartAddress()) % table_entry_size_); |
| 316 return (addr - base->GetStartAddress()) / table_entry_size_; | 316 return static_cast<int>(addr - base->GetStartAddress()) / table_entry_size_; |
| 317 } | 317 } |
| 318 | 318 |
| 319 | 319 |
| 320 unsigned Deoptimizer::GetOutputInfo(DeoptimizationOutputData* data, | 320 unsigned Deoptimizer::GetOutputInfo(DeoptimizationOutputData* data, |
| 321 unsigned id, | 321 unsigned id, |
| 322 SharedFunctionInfo* shared) { | 322 SharedFunctionInfo* shared) { |
| 323 // TODO(kasperl): For now, we do a simple linear search for the PC | 323 // TODO(kasperl): For now, we do a simple linear search for the PC |
| 324 // offset associated with the given node id. This should probably be | 324 // offset associated with the given node id. This should probably be |
| 325 // changed to a binary search. | 325 // changed to a binary search. |
| 326 int length = data->DeoptPoints(); | 326 int length = data->DeoptPoints(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 407 } |
| 408 | 408 |
| 409 // Print some helpful diagnostic information. | 409 // Print some helpful diagnostic information. |
| 410 if (FLAG_trace_deopt) { | 410 if (FLAG_trace_deopt) { |
| 411 double ms = static_cast<double>(OS::Ticks() - start) / 1000; | 411 double ms = static_cast<double>(OS::Ticks() - start) / 1000; |
| 412 int index = output_count_ - 1; // Index of the topmost frame. | 412 int index = output_count_ - 1; // Index of the topmost frame. |
| 413 JSFunction* function = output_[index]->GetFunction(); | 413 JSFunction* function = output_[index]->GetFunction(); |
| 414 PrintF("[deoptimizing: end 0x%08" V8PRIxPTR " ", | 414 PrintF("[deoptimizing: end 0x%08" V8PRIxPTR " ", |
| 415 reinterpret_cast<intptr_t>(function)); | 415 reinterpret_cast<intptr_t>(function)); |
| 416 function->PrintName(); | 416 function->PrintName(); |
| 417 PrintF(" => node=%u, pc=0x%08x, state=%s, took %0.3f ms]\n", | 417 PrintF(" => node=%u, pc=0x%08" V8PRIxPTR ", state=%s, took %0.3f ms]\n", |
| 418 node_id, | 418 node_id, |
| 419 output_[index]->GetPc(), | 419 output_[index]->GetPc(), |
| 420 FullCodeGenerator::State2String( | 420 FullCodeGenerator::State2String( |
| 421 static_cast<FullCodeGenerator::State>( | 421 static_cast<FullCodeGenerator::State>( |
| 422 output_[index]->GetState()->value())), | 422 output_[index]->GetState()->value())), |
| 423 ms); | 423 ms); |
| 424 } | 424 } |
| 425 } | 425 } |
| 426 | 426 |
| 427 | 427 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 | 477 |
| 478 switch (opcode) { | 478 switch (opcode) { |
| 479 case Translation::BEGIN: | 479 case Translation::BEGIN: |
| 480 case Translation::FRAME: | 480 case Translation::FRAME: |
| 481 case Translation::DUPLICATE: | 481 case Translation::DUPLICATE: |
| 482 UNREACHABLE(); | 482 UNREACHABLE(); |
| 483 return; | 483 return; |
| 484 | 484 |
| 485 case Translation::REGISTER: { | 485 case Translation::REGISTER: { |
| 486 int input_reg = iterator->Next(); | 486 int input_reg = iterator->Next(); |
| 487 uint32_t input_value = input_->GetRegister(input_reg); | 487 intptr_t input_value = input_->GetRegister(input_reg); |
| 488 if (FLAG_trace_deopt) { | 488 if (FLAG_trace_deopt) { |
| 489 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; %s\n", | 489 PrintF( |
| 490 output_[frame_index]->GetTop() + output_offset, | 490 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" V8PRIxPTR " ; %s\n", |
| 491 output_offset, | 491 output_[frame_index]->GetTop() + output_offset, |
| 492 input_value, | 492 output_offset, |
| 493 converter.NameOfCPURegister(input_reg)); | 493 input_value, |
| 494 converter.NameOfCPURegister(input_reg)); |
| 494 } | 495 } |
| 495 output_[frame_index]->SetFrameSlot(output_offset, input_value); | 496 output_[frame_index]->SetFrameSlot(output_offset, input_value); |
| 496 return; | 497 return; |
| 497 } | 498 } |
| 498 | 499 |
| 499 case Translation::INT32_REGISTER: { | 500 case Translation::INT32_REGISTER: { |
| 500 int input_reg = iterator->Next(); | 501 int input_reg = iterator->Next(); |
| 501 uint32_t value = input_->GetRegister(input_reg); | 502 intptr_t value = input_->GetRegister(input_reg); |
| 502 bool is_smi = Smi::IsValid(value); | 503 bool is_smi = Smi::IsValid(value); |
| 503 unsigned output_index = output_offset / kPointerSize; | 504 unsigned output_index = output_offset / kPointerSize; |
| 504 if (FLAG_trace_deopt) { | 505 if (FLAG_trace_deopt) { |
| 505 PrintF(" 0x%08x: [top + %d] <- %d ; %s (%s)\n", | 506 PrintF( |
| 506 output_[frame_index]->GetTop() + output_offset, | 507 " 0x%08" V8PRIxPTR ": [top + %d] <- %" V8PRIdPTR " ; %s (%s)\n", |
| 507 output_offset, | 508 output_[frame_index]->GetTop() + output_offset, |
| 508 value, | 509 output_offset, |
| 509 converter.NameOfCPURegister(input_reg), | 510 value, |
| 510 is_smi ? "smi" : "heap number"); | 511 converter.NameOfCPURegister(input_reg), |
| 512 is_smi ? "smi" : "heap number"); |
| 511 } | 513 } |
| 512 if (is_smi) { | 514 if (is_smi) { |
| 513 intptr_t tagged_value = | 515 intptr_t tagged_value = |
| 514 reinterpret_cast<intptr_t>(Smi::FromInt(value)); | 516 reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value))); |
| 515 output_[frame_index]->SetFrameSlot(output_offset, tagged_value); | 517 output_[frame_index]->SetFrameSlot(output_offset, tagged_value); |
| 516 } else { | 518 } else { |
| 517 // We save the untagged value on the side and store a GC-safe | 519 // We save the untagged value on the side and store a GC-safe |
| 518 // temporary placeholder in the frame. | 520 // temporary placeholder in the frame. |
| 519 AddInteger32Value(frame_index, output_index, value); | 521 AddInteger32Value(frame_index, |
| 522 output_index, |
| 523 static_cast<int32_t>(value)); |
| 520 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); | 524 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); |
| 521 } | 525 } |
| 522 return; | 526 return; |
| 523 } | 527 } |
| 524 | 528 |
| 525 case Translation::DOUBLE_REGISTER: { | 529 case Translation::DOUBLE_REGISTER: { |
| 526 int input_reg = iterator->Next(); | 530 int input_reg = iterator->Next(); |
| 527 double value = input_->GetDoubleRegister(input_reg); | 531 double value = input_->GetDoubleRegister(input_reg); |
| 528 unsigned output_index = output_offset / kPointerSize; | 532 unsigned output_index = output_offset / kPointerSize; |
| 529 if (FLAG_trace_deopt) { | 533 if (FLAG_trace_deopt) { |
| 530 PrintF(" 0x%08x: [top + %d] <- %e ; %s\n", | 534 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- %e ; %s\n", |
| 531 output_[frame_index]->GetTop() + output_offset, | 535 output_[frame_index]->GetTop() + output_offset, |
| 532 output_offset, | 536 output_offset, |
| 533 value, | 537 value, |
| 534 DoubleRegister::AllocationIndexToString(input_reg)); | 538 DoubleRegister::AllocationIndexToString(input_reg)); |
| 535 } | 539 } |
| 536 // We save the untagged value on the side and store a GC-safe | 540 // We save the untagged value on the side and store a GC-safe |
| 537 // temporary placeholder in the frame. | 541 // temporary placeholder in the frame. |
| 538 AddDoubleValue(frame_index, output_index, value); | 542 AddDoubleValue(frame_index, output_index, value); |
| 539 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); | 543 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); |
| 540 return; | 544 return; |
| 541 } | 545 } |
| 542 | 546 |
| 543 case Translation::STACK_SLOT: { | 547 case Translation::STACK_SLOT: { |
| 544 int input_slot_index = iterator->Next(); | 548 int input_slot_index = iterator->Next(); |
| 545 unsigned input_offset = | 549 unsigned input_offset = |
| 546 input_->GetOffsetFromSlotIndex(this, input_slot_index); | 550 input_->GetOffsetFromSlotIndex(this, input_slot_index); |
| 547 uint32_t input_value = input_->GetFrameSlot(input_offset); | 551 intptr_t input_value = input_->GetFrameSlot(input_offset); |
| 548 if (FLAG_trace_deopt) { | 552 if (FLAG_trace_deopt) { |
| 549 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; [esp + %d]\n", | 553 PrintF(" 0x%08" V8PRIxPTR ": ", |
| 550 output_[frame_index]->GetTop() + output_offset, | 554 output_[frame_index]->GetTop() + output_offset); |
| 555 PrintF("[top + %d] <- 0x%08" V8PRIxPTR " ; [esp + %d]\n", |
| 551 output_offset, | 556 output_offset, |
| 552 input_value, | 557 input_value, |
| 553 input_offset); | 558 input_offset); |
| 554 } | 559 } |
| 555 output_[frame_index]->SetFrameSlot(output_offset, input_value); | 560 output_[frame_index]->SetFrameSlot(output_offset, input_value); |
| 556 return; | 561 return; |
| 557 } | 562 } |
| 558 | 563 |
| 559 case Translation::INT32_STACK_SLOT: { | 564 case Translation::INT32_STACK_SLOT: { |
| 560 int input_slot_index = iterator->Next(); | 565 int input_slot_index = iterator->Next(); |
| 561 unsigned input_offset = | 566 unsigned input_offset = |
| 562 input_->GetOffsetFromSlotIndex(this, input_slot_index); | 567 input_->GetOffsetFromSlotIndex(this, input_slot_index); |
| 563 int32_t value = input_->GetFrameSlot(input_offset); | 568 intptr_t value = input_->GetFrameSlot(input_offset); |
| 564 bool is_smi = Smi::IsValid(value); | 569 bool is_smi = Smi::IsValid(value); |
| 565 unsigned output_index = output_offset / kPointerSize; | 570 unsigned output_index = output_offset / kPointerSize; |
| 566 if (FLAG_trace_deopt) { | 571 if (FLAG_trace_deopt) { |
| 567 PrintF(" 0x%08x: [top + %d] <- %d ; [esp + %d] (%s)\n", | 572 PrintF(" 0x%08" V8PRIxPTR ": ", |
| 568 output_[frame_index]->GetTop() + output_offset, | 573 output_[frame_index]->GetTop() + output_offset); |
| 574 PrintF("[top + %d] <- %" V8PRIdPTR " ; [esp + %d] (%s)\n", |
| 569 output_offset, | 575 output_offset, |
| 570 value, | 576 value, |
| 571 input_offset, | 577 input_offset, |
| 572 is_smi ? "smi" : "heap number"); | 578 is_smi ? "smi" : "heap number"); |
| 573 } | 579 } |
| 574 if (is_smi) { | 580 if (is_smi) { |
| 575 intptr_t tagged_value = | 581 intptr_t tagged_value = |
| 576 reinterpret_cast<intptr_t>(Smi::FromInt(value)); | 582 reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value))); |
| 577 output_[frame_index]->SetFrameSlot(output_offset, tagged_value); | 583 output_[frame_index]->SetFrameSlot(output_offset, tagged_value); |
| 578 } else { | 584 } else { |
| 579 // We save the untagged value on the side and store a GC-safe | 585 // We save the untagged value on the side and store a GC-safe |
| 580 // temporary placeholder in the frame. | 586 // temporary placeholder in the frame. |
| 581 AddInteger32Value(frame_index, output_index, value); | 587 AddInteger32Value(frame_index, |
| 588 output_index, |
| 589 static_cast<int32_t>(value)); |
| 582 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); | 590 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); |
| 583 } | 591 } |
| 584 return; | 592 return; |
| 585 } | 593 } |
| 586 | 594 |
| 587 case Translation::DOUBLE_STACK_SLOT: { | 595 case Translation::DOUBLE_STACK_SLOT: { |
| 588 int input_slot_index = iterator->Next(); | 596 int input_slot_index = iterator->Next(); |
| 589 unsigned input_offset = | 597 unsigned input_offset = |
| 590 input_->GetOffsetFromSlotIndex(this, input_slot_index); | 598 input_->GetOffsetFromSlotIndex(this, input_slot_index); |
| 591 double value = input_->GetDoubleFrameSlot(input_offset); | 599 double value = input_->GetDoubleFrameSlot(input_offset); |
| 592 unsigned output_index = output_offset / kPointerSize; | 600 unsigned output_index = output_offset / kPointerSize; |
| 593 if (FLAG_trace_deopt) { | 601 if (FLAG_trace_deopt) { |
| 594 PrintF(" 0x%08x: [top + %d] <- %e ; [esp + %d]\n", | 602 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- %e ; [esp + %d]\n", |
| 595 output_[frame_index]->GetTop() + output_offset, | 603 output_[frame_index]->GetTop() + output_offset, |
| 596 output_offset, | 604 output_offset, |
| 597 value, | 605 value, |
| 598 input_offset); | 606 input_offset); |
| 599 } | 607 } |
| 600 // We save the untagged value on the side and store a GC-safe | 608 // We save the untagged value on the side and store a GC-safe |
| 601 // temporary placeholder in the frame. | 609 // temporary placeholder in the frame. |
| 602 AddDoubleValue(frame_index, output_index, value); | 610 AddDoubleValue(frame_index, output_index, value); |
| 603 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); | 611 output_[frame_index]->SetFrameSlot(output_offset, kPlaceholder); |
| 604 return; | 612 return; |
| 605 } | 613 } |
| 606 | 614 |
| 607 case Translation::LITERAL: { | 615 case Translation::LITERAL: { |
| 608 Object* literal = ComputeLiteral(iterator->Next()); | 616 Object* literal = ComputeLiteral(iterator->Next()); |
| 609 if (FLAG_trace_deopt) { | 617 if (FLAG_trace_deopt) { |
| 610 PrintF(" 0x%08x: [top + %d] <- ", | 618 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- ", |
| 611 output_[frame_index]->GetTop() + output_offset, | 619 output_[frame_index]->GetTop() + output_offset, |
| 612 output_offset); | 620 output_offset); |
| 613 literal->ShortPrint(); | 621 literal->ShortPrint(); |
| 614 PrintF(" ; literal\n"); | 622 PrintF(" ; literal\n"); |
| 615 } | 623 } |
| 616 intptr_t value = reinterpret_cast<intptr_t>(literal); | 624 intptr_t value = reinterpret_cast<intptr_t>(literal); |
| 617 output_[frame_index]->SetFrameSlot(output_offset, value); | 625 output_[frame_index]->SetFrameSlot(output_offset, value); |
| 618 return; | 626 return; |
| 619 } | 627 } |
| 620 | 628 |
| 621 case Translation::ARGUMENTS_OBJECT: { | 629 case Translation::ARGUMENTS_OBJECT: { |
| 622 // Use the hole value as a sentinel and fill in the arguments object | 630 // Use the hole value as a sentinel and fill in the arguments object |
| 623 // after the deoptimized frame is built. | 631 // after the deoptimized frame is built. |
| 624 ASSERT(frame_index == 0); // Only supported for first frame. | 632 ASSERT(frame_index == 0); // Only supported for first frame. |
| 625 if (FLAG_trace_deopt) { | 633 if (FLAG_trace_deopt) { |
| 626 PrintF(" 0x%08x: [top + %d] <- ", | 634 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- ", |
| 627 output_[frame_index]->GetTop() + output_offset, | 635 output_[frame_index]->GetTop() + output_offset, |
| 628 output_offset); | 636 output_offset); |
| 629 isolate_->heap()->the_hole_value()->ShortPrint(); | 637 isolate_->heap()->the_hole_value()->ShortPrint(); |
| 630 PrintF(" ; arguments object\n"); | 638 PrintF(" ; arguments object\n"); |
| 631 } | 639 } |
| 632 intptr_t value = reinterpret_cast<intptr_t>( | 640 intptr_t value = reinterpret_cast<intptr_t>( |
| 633 isolate_->heap()->the_hole_value()); | 641 isolate_->heap()->the_hole_value()); |
| 634 output_[frame_index]->SetFrameSlot(output_offset, value); | 642 output_[frame_index]->SetFrameSlot(output_offset, value); |
| 635 return; | 643 return; |
| 636 } | 644 } |
| 637 } | 645 } |
| 638 } | 646 } |
| 639 | 647 |
| 640 | 648 |
| 641 bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, | 649 bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, |
| 642 int* input_offset) { | 650 int* input_offset) { |
| 643 disasm::NameConverter converter; | 651 disasm::NameConverter converter; |
| 644 FrameDescription* output = output_[0]; | 652 FrameDescription* output = output_[0]; |
| 645 | 653 |
| 646 // The input values are all part of the unoptimized frame so they | 654 // The input values are all part of the unoptimized frame so they |
| 647 // are all tagged pointers. | 655 // are all tagged pointers. |
| 648 uint32_t input_value = input_->GetFrameSlot(*input_offset); | 656 uintptr_t input_value = input_->GetFrameSlot(*input_offset); |
| 649 Object* input_object = reinterpret_cast<Object*>(input_value); | 657 Object* input_object = reinterpret_cast<Object*>(input_value); |
| 650 | 658 |
| 651 Translation::Opcode opcode = | 659 Translation::Opcode opcode = |
| 652 static_cast<Translation::Opcode>(iterator->Next()); | 660 static_cast<Translation::Opcode>(iterator->Next()); |
| 653 bool duplicate = (opcode == Translation::DUPLICATE); | 661 bool duplicate = (opcode == Translation::DUPLICATE); |
| 654 if (duplicate) { | 662 if (duplicate) { |
| 655 opcode = static_cast<Translation::Opcode>(iterator->Next()); | 663 opcode = static_cast<Translation::Opcode>(iterator->Next()); |
| 656 } | 664 } |
| 657 | 665 |
| 658 switch (opcode) { | 666 switch (opcode) { |
| 659 case Translation::BEGIN: | 667 case Translation::BEGIN: |
| 660 case Translation::FRAME: | 668 case Translation::FRAME: |
| 661 case Translation::DUPLICATE: | 669 case Translation::DUPLICATE: |
| 662 UNREACHABLE(); // Malformed input. | 670 UNREACHABLE(); // Malformed input. |
| 663 return false; | 671 return false; |
| 664 | 672 |
| 665 case Translation::REGISTER: { | 673 case Translation::REGISTER: { |
| 666 int output_reg = iterator->Next(); | 674 int output_reg = iterator->Next(); |
| 667 if (FLAG_trace_osr) { | 675 if (FLAG_trace_osr) { |
| 668 PrintF(" %s <- 0x%08x ; [esp + %d]\n", | 676 PrintF(" %s <- 0x%08" V8PRIxPTR " ; [esp + %d]\n", |
| 669 converter.NameOfCPURegister(output_reg), | 677 converter.NameOfCPURegister(output_reg), |
| 670 input_value, | 678 input_value, |
| 671 *input_offset); | 679 *input_offset); |
| 672 } | 680 } |
| 673 output->SetRegister(output_reg, input_value); | 681 output->SetRegister(output_reg, input_value); |
| 674 break; | 682 break; |
| 675 } | 683 } |
| 676 | 684 |
| 677 case Translation::INT32_REGISTER: { | 685 case Translation::INT32_REGISTER: { |
| 678 // Abort OSR if we don't have a number. | 686 // Abort OSR if we don't have a number. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 } | 723 } |
| 716 output->SetDoubleRegister(output_reg, double_value); | 724 output->SetDoubleRegister(output_reg, double_value); |
| 717 break; | 725 break; |
| 718 } | 726 } |
| 719 | 727 |
| 720 case Translation::STACK_SLOT: { | 728 case Translation::STACK_SLOT: { |
| 721 int output_index = iterator->Next(); | 729 int output_index = iterator->Next(); |
| 722 unsigned output_offset = | 730 unsigned output_offset = |
| 723 output->GetOffsetFromSlotIndex(this, output_index); | 731 output->GetOffsetFromSlotIndex(this, output_index); |
| 724 if (FLAG_trace_osr) { | 732 if (FLAG_trace_osr) { |
| 725 PrintF(" [esp + %d] <- 0x%08x ; [esp + %d]\n", | 733 PrintF(" [esp + %d] <- 0x%08" V8PRIxPTR " ; [esp + %d]\n", |
| 726 output_offset, | 734 output_offset, |
| 727 input_value, | 735 input_value, |
| 728 *input_offset); | 736 *input_offset); |
| 729 } | 737 } |
| 730 output->SetFrameSlot(output_offset, input_value); | 738 output->SetFrameSlot(output_offset, input_value); |
| 731 break; | 739 break; |
| 732 } | 740 } |
| 733 | 741 |
| 734 case Translation::INT32_STACK_SLOT: { | 742 case Translation::INT32_STACK_SLOT: { |
| 735 // Abort OSR if we don't have a number. | 743 // Abort OSR if we don't have a number. |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 964 SetFrameSlot(o, kZapUint32); | 972 SetFrameSlot(o, kZapUint32); |
| 965 } | 973 } |
| 966 } | 974 } |
| 967 | 975 |
| 968 | 976 |
| 969 unsigned FrameDescription::GetOffsetFromSlotIndex(Deoptimizer* deoptimizer, | 977 unsigned FrameDescription::GetOffsetFromSlotIndex(Deoptimizer* deoptimizer, |
| 970 int slot_index) { | 978 int slot_index) { |
| 971 if (slot_index >= 0) { | 979 if (slot_index >= 0) { |
| 972 // Local or spill slots. Skip the fixed part of the frame | 980 // Local or spill slots. Skip the fixed part of the frame |
| 973 // including all arguments. | 981 // including all arguments. |
| 974 unsigned base = | 982 unsigned base = static_cast<unsigned>( |
| 975 GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction()); | 983 GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction())); |
| 976 return base - ((slot_index + 1) * kPointerSize); | 984 return base - ((slot_index + 1) * kPointerSize); |
| 977 } else { | 985 } else { |
| 978 // Incoming parameter. | 986 // Incoming parameter. |
| 979 unsigned base = GetFrameSize() - | 987 unsigned base = static_cast<unsigned>(GetFrameSize() - |
| 980 deoptimizer->ComputeIncomingArgumentSize(GetFunction()); | 988 deoptimizer->ComputeIncomingArgumentSize(GetFunction())); |
| 981 return base - ((slot_index + 1) * kPointerSize); | 989 return base - ((slot_index + 1) * kPointerSize); |
| 982 } | 990 } |
| 983 } | 991 } |
| 984 | 992 |
| 985 | 993 |
| 986 void TranslationBuffer::Add(int32_t value) { | 994 void TranslationBuffer::Add(int32_t value) { |
| 987 // Encode the sign bit in the least significant bit. | 995 // Encode the sign bit in the least significant bit. |
| 988 bool is_negative = (value < 0); | 996 bool is_negative = (value < 0); |
| 989 uint32_t bits = ((is_negative ? -value : value) << 1) | | 997 uint32_t bits = ((is_negative ? -value : value) << 1) | |
| 990 static_cast<int32_t>(is_negative); | 998 static_cast<int32_t>(is_negative); |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 } | 1158 } |
| 1151 | 1159 |
| 1152 | 1160 |
| 1153 DeoptimizingCodeListNode::~DeoptimizingCodeListNode() { | 1161 DeoptimizingCodeListNode::~DeoptimizingCodeListNode() { |
| 1154 GlobalHandles* global_handles = Isolate::Current()->global_handles(); | 1162 GlobalHandles* global_handles = Isolate::Current()->global_handles(); |
| 1155 global_handles->Destroy(reinterpret_cast<Object**>(code_.location())); | 1163 global_handles->Destroy(reinterpret_cast<Object**>(code_.location())); |
| 1156 } | 1164 } |
| 1157 | 1165 |
| 1158 | 1166 |
| 1159 } } // namespace v8::internal | 1167 } } // namespace v8::internal |
| OLD | NEW |