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

Side by Side Diff: src/deoptimizer.cc

Issue 6532091: Merge bleeding_edge revision (5922, 5934] to isolates branch.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: '' Created 9 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 | Annotate | Revision Log
« no previous file with comments | « src/deoptimizer.h ('k') | src/flag-definitions.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 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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/deoptimizer.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698