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

Side by Side Diff: src/assembler.cc

Issue 10837037: Age code to allow reclaiming old unexecuted functions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Cleanup code Created 8 years, 3 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/assembler.h ('k') | src/builtins.h » ('j') | src/compiler.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 // Signed right shift is arithmetic shift. Tested in test-utils.cc. 306 // Signed right shift is arithmetic shift. Tested in test-utils.cc.
307 data_delta = data_delta >> kBitsPerByte; 307 data_delta = data_delta >> kBitsPerByte;
308 } 308 }
309 } 309 }
310 310
311 311
312 void RelocInfoWriter::Write(const RelocInfo* rinfo) { 312 void RelocInfoWriter::Write(const RelocInfo* rinfo) {
313 #ifdef DEBUG 313 #ifdef DEBUG
314 byte* begin_pos = pos_; 314 byte* begin_pos = pos_;
315 #endif 315 #endif
316 ASSERT(rinfo->rmode() < RelocInfo::NUMBER_OF_MODES);
316 ASSERT(rinfo->pc() - last_pc_ >= 0); 317 ASSERT(rinfo->pc() - last_pc_ >= 0);
317 ASSERT(RelocInfo::LAST_STANDARD_NONCOMPACT_ENUM - RelocInfo::LAST_COMPACT_ENUM 318 ASSERT(RelocInfo::LAST_STANDARD_NONCOMPACT_ENUM - RelocInfo::LAST_COMPACT_ENUM
318 <= kMaxStandardNonCompactModes); 319 <= kMaxStandardNonCompactModes);
319 // Use unsigned delta-encoding for pc. 320 // Use unsigned delta-encoding for pc.
320 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_); 321 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_);
321 RelocInfo::Mode rmode = rinfo->rmode(); 322 RelocInfo::Mode rmode = rinfo->rmode();
322 323
323 // The two most common modes are given small tags, and usually fit in a byte. 324 // The two most common modes are given small tags, and usually fit in a byte.
324 if (rmode == RelocInfo::EMBEDDED_OBJECT) { 325 if (rmode == RelocInfo::EMBEDDED_OBJECT) {
325 WriteTaggedPC(pc_delta, kEmbeddedObjectTag); 326 WriteTaggedPC(pc_delta, kEmbeddedObjectTag);
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 return; 564 return;
564 } 565 }
565 Advance(kIntSize); 566 Advance(kIntSize);
566 } else { 567 } else {
567 AdvanceReadPC(); 568 AdvanceReadPC();
568 int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM; 569 int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM;
569 if (SetMode(static_cast<RelocInfo::Mode>(rmode))) return; 570 if (SetMode(static_cast<RelocInfo::Mode>(rmode))) return;
570 } 571 }
571 } 572 }
572 } 573 }
574 if (code_age_sequence_ != NULL) {
575 rinfo_.pc_ = code_age_sequence_;
576 code_age_sequence_ = NULL;
577 rinfo_.data_ = 0;
578 if (SetMode(RelocInfo::CODE_AGE_SEQUENCE)) {
579 return;
580 }
581 }
573 done_ = true; 582 done_ = true;
574 } 583 }
575 584
576 585
577 RelocIterator::RelocIterator(Code* code, int mode_mask) { 586 RelocIterator::RelocIterator(Code* code, int mode_mask) {
578 rinfo_.host_ = code; 587 rinfo_.host_ = code;
579 rinfo_.pc_ = code->instruction_start(); 588 rinfo_.pc_ = code->instruction_start();
580 rinfo_.data_ = 0; 589 rinfo_.data_ = 0;
581 // Relocation info is read backwards. 590 // Relocation info is read backwards.
582 pos_ = code->relocation_start() + code->relocation_size(); 591 pos_ = code->relocation_start() + code->relocation_size();
583 end_ = code->relocation_start(); 592 end_ = code->relocation_start();
584 done_ = false; 593 done_ = false;
585 mode_mask_ = mode_mask; 594 mode_mask_ = mode_mask;
586 last_id_ = 0; 595 last_id_ = 0;
587 last_position_ = 0; 596 last_position_ = 0;
597 code_age_sequence_ = code->FindCodeAgeSequence();
588 if (mode_mask_ == 0) pos_ = end_; 598 if (mode_mask_ == 0) pos_ = end_;
589 next(); 599 next();
590 } 600 }
591 601
592 602
593 RelocIterator::RelocIterator(const CodeDesc& desc, int mode_mask) { 603 RelocIterator::RelocIterator(const CodeDesc& desc, int mode_mask) {
594 rinfo_.pc_ = desc.buffer; 604 rinfo_.pc_ = desc.buffer;
595 rinfo_.data_ = 0; 605 rinfo_.data_ = 0;
596 // Relocation info is read backwards. 606 // Relocation info is read backwards.
597 pos_ = desc.buffer + desc.buffer_size; 607 pos_ = desc.buffer + desc.buffer_size;
598 end_ = pos_ - desc.reloc_size; 608 end_ = pos_ - desc.reloc_size;
599 done_ = false; 609 done_ = false;
600 mode_mask_ = mode_mask; 610 mode_mask_ = mode_mask;
601 last_id_ = 0; 611 last_id_ = 0;
602 last_position_ = 0; 612 last_position_ = 0;
613 code_age_sequence_ = NULL;
603 if (mode_mask_ == 0) pos_ = end_; 614 if (mode_mask_ == 0) pos_ = end_;
604 next(); 615 next();
605 } 616 }
606 617
607 618
608 // ----------------------------------------------------------------------------- 619 // -----------------------------------------------------------------------------
609 // Implementation of RelocInfo 620 // Implementation of RelocInfo
610 621
611 622
612 #ifdef ENABLE_DISASSEMBLER 623 #ifdef ENABLE_DISASSEMBLER
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 return "external reference"; 656 return "external reference";
646 case RelocInfo::INTERNAL_REFERENCE: 657 case RelocInfo::INTERNAL_REFERENCE:
647 return "internal reference"; 658 return "internal reference";
648 case RelocInfo::CONST_POOL: 659 case RelocInfo::CONST_POOL:
649 return "constant pool"; 660 return "constant pool";
650 case RelocInfo::DEBUG_BREAK_SLOT: 661 case RelocInfo::DEBUG_BREAK_SLOT:
651 #ifndef ENABLE_DEBUGGER_SUPPORT 662 #ifndef ENABLE_DEBUGGER_SUPPORT
652 UNREACHABLE(); 663 UNREACHABLE();
653 #endif 664 #endif
654 return "debug break slot"; 665 return "debug break slot";
666 case RelocInfo::CODE_AGE_SEQUENCE:
667 return "code_age_sequence";
655 case RelocInfo::NUMBER_OF_MODES: 668 case RelocInfo::NUMBER_OF_MODES:
656 UNREACHABLE(); 669 UNREACHABLE();
657 return "number_of_modes"; 670 return "number_of_modes";
658 } 671 }
659 return "unknown relocation type"; 672 return "unknown relocation type";
660 } 673 }
661 674
662 675
663 void RelocInfo::Print(FILE* out) { 676 void RelocInfo::Print(FILE* out) {
664 PrintF(out, "%p %s", pc_, RelocModeName(rmode_)); 677 PrintF(out, "%p %s", pc_, RelocModeName(rmode_));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 case STATEMENT_POSITION: 745 case STATEMENT_POSITION:
733 case EXTERNAL_REFERENCE: 746 case EXTERNAL_REFERENCE:
734 case INTERNAL_REFERENCE: 747 case INTERNAL_REFERENCE:
735 case CONST_POOL: 748 case CONST_POOL:
736 case DEBUG_BREAK_SLOT: 749 case DEBUG_BREAK_SLOT:
737 case NONE: 750 case NONE:
738 break; 751 break;
739 case NUMBER_OF_MODES: 752 case NUMBER_OF_MODES:
740 UNREACHABLE(); 753 UNREACHABLE();
741 break; 754 break;
755 case CODE_AGE_SEQUENCE:
756 Code* stub = code_age_stub();
757 ASSERT(stub == NULL || stub->IsCode());
758 break;
742 } 759 }
743 } 760 }
744 #endif // DEBUG 761 #endif // DEBUG
745 762
746 763
747 // ----------------------------------------------------------------------------- 764 // -----------------------------------------------------------------------------
748 // Implementation of ExternalReference 765 // Implementation of ExternalReference
749 766
750 void ExternalReference::SetUp() { 767 void ExternalReference::SetUp() {
751 double_constants.min_int = kMinInt; 768 double_constants.min_int = kMinInt;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 return ExternalReference(Redirect(isolate, FUNCTION_ADDR(V8::Random))); 884 return ExternalReference(Redirect(isolate, FUNCTION_ADDR(V8::Random)));
868 } 885 }
869 886
870 887
871 ExternalReference ExternalReference::get_date_field_function( 888 ExternalReference ExternalReference::get_date_field_function(
872 Isolate* isolate) { 889 Isolate* isolate) {
873 return ExternalReference(Redirect(isolate, FUNCTION_ADDR(JSDate::GetField))); 890 return ExternalReference(Redirect(isolate, FUNCTION_ADDR(JSDate::GetField)));
874 } 891 }
875 892
876 893
894 ExternalReference ExternalReference::get_make_code_young_function(
895 Isolate* isolate) {
896 return ExternalReference(Redirect(
897 isolate, FUNCTION_ADDR(Code::MakeCodeAgeSequenceYoung)));
898 }
899
900
877 ExternalReference ExternalReference::date_cache_stamp(Isolate* isolate) { 901 ExternalReference ExternalReference::date_cache_stamp(Isolate* isolate) {
878 return ExternalReference(isolate->date_cache()->stamp_address()); 902 return ExternalReference(isolate->date_cache()->stamp_address());
879 } 903 }
880 904
881 905
882 ExternalReference ExternalReference::transcendental_cache_array_address( 906 ExternalReference ExternalReference::transcendental_cache_array_address(
883 Isolate* isolate) { 907 Isolate* isolate) {
884 return ExternalReference( 908 return ExternalReference(
885 isolate->transcendental_cache()->cache_array_address()); 909 isolate->transcendental_cache()->cache_array_address());
886 } 910 }
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 assembler_->RecordRelocInfo(RelocInfo::POSITION, state_.current_position); 1390 assembler_->RecordRelocInfo(RelocInfo::POSITION, state_.current_position);
1367 state_.written_position = state_.current_position; 1391 state_.written_position = state_.current_position;
1368 written = true; 1392 written = true;
1369 } 1393 }
1370 1394
1371 // Return whether something was written. 1395 // Return whether something was written.
1372 return written; 1396 return written;
1373 } 1397 }
1374 1398
1375 } } // namespace v8::internal 1399 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/assembler.h ('k') | src/builtins.h » ('j') | src/compiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698