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

Side by Side Diff: src/mips64/simulator-mips64.cc

Issue 2010243003: Move hashmap into base/. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 6 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/mips64/simulator-mips64.h ('k') | src/parsing/parser-base.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 <limits.h> 5 #include <limits.h>
6 #include <stdarg.h> 6 #include <stdarg.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <cmath> 8 #include <cmath>
9 9
10 #if V8_TARGET_ARCH_MIPS64 10 #if V8_TARGET_ARCH_MIPS64
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 intptr_t end_page = ((start + size) & ~CachePage::kPageMask); 794 intptr_t end_page = ((start + size) & ~CachePage::kPageMask);
795 return start_page == end_page; 795 return start_page == end_page;
796 } 796 }
797 797
798 798
799 void Simulator::set_last_debugger_input(char* input) { 799 void Simulator::set_last_debugger_input(char* input) {
800 DeleteArray(last_debugger_input_); 800 DeleteArray(last_debugger_input_);
801 last_debugger_input_ = input; 801 last_debugger_input_ = input;
802 } 802 }
803 803
804 804 void Simulator::FlushICache(base::HashMap* i_cache, void* start_addr,
805 void Simulator::FlushICache(v8::internal::HashMap* i_cache,
806 void* start_addr,
807 size_t size) { 805 size_t size) {
808 int64_t start = reinterpret_cast<int64_t>(start_addr); 806 int64_t start = reinterpret_cast<int64_t>(start_addr);
809 int64_t intra_line = (start & CachePage::kLineMask); 807 int64_t intra_line = (start & CachePage::kLineMask);
810 start -= intra_line; 808 start -= intra_line;
811 size += intra_line; 809 size += intra_line;
812 size = ((size - 1) | CachePage::kLineMask) + 1; 810 size = ((size - 1) | CachePage::kLineMask) + 1;
813 int offset = (start & CachePage::kPageMask); 811 int offset = (start & CachePage::kPageMask);
814 while (!AllOnOnePage(start, size - 1)) { 812 while (!AllOnOnePage(start, size - 1)) {
815 int bytes_to_flush = CachePage::kPageSize - offset; 813 int bytes_to_flush = CachePage::kPageSize - offset;
816 FlushOnePage(i_cache, start, bytes_to_flush); 814 FlushOnePage(i_cache, start, bytes_to_flush);
817 start += bytes_to_flush; 815 start += bytes_to_flush;
818 size -= bytes_to_flush; 816 size -= bytes_to_flush;
819 DCHECK_EQ((int64_t)0, start & CachePage::kPageMask); 817 DCHECK_EQ((int64_t)0, start & CachePage::kPageMask);
820 offset = 0; 818 offset = 0;
821 } 819 }
822 if (size != 0) { 820 if (size != 0) {
823 FlushOnePage(i_cache, start, size); 821 FlushOnePage(i_cache, start, size);
824 } 822 }
825 } 823 }
826 824
827 825 CachePage* Simulator::GetCachePage(base::HashMap* i_cache, void* page) {
828 CachePage* Simulator::GetCachePage(v8::internal::HashMap* i_cache, void* page) { 826 base::HashMap::Entry* entry = i_cache->LookupOrInsert(page, ICacheHash(page));
829 v8::internal::HashMap::Entry* entry =
830 i_cache->LookupOrInsert(page, ICacheHash(page));
831 if (entry->value == NULL) { 827 if (entry->value == NULL) {
832 CachePage* new_page = new CachePage(); 828 CachePage* new_page = new CachePage();
833 entry->value = new_page; 829 entry->value = new_page;
834 } 830 }
835 return reinterpret_cast<CachePage*>(entry->value); 831 return reinterpret_cast<CachePage*>(entry->value);
836 } 832 }
837 833
838 834
839 // Flush from start up to and not including start + size. 835 // Flush from start up to and not including start + size.
840 void Simulator::FlushOnePage(v8::internal::HashMap* i_cache, intptr_t start, 836 void Simulator::FlushOnePage(base::HashMap* i_cache, intptr_t start,
841 size_t size) { 837 size_t size) {
842 DCHECK(size <= CachePage::kPageSize); 838 DCHECK(size <= CachePage::kPageSize);
843 DCHECK(AllOnOnePage(start, size - 1)); 839 DCHECK(AllOnOnePage(start, size - 1));
844 DCHECK((start & CachePage::kLineMask) == 0); 840 DCHECK((start & CachePage::kLineMask) == 0);
845 DCHECK((size & CachePage::kLineMask) == 0); 841 DCHECK((size & CachePage::kLineMask) == 0);
846 void* page = reinterpret_cast<void*>(start & (~CachePage::kPageMask)); 842 void* page = reinterpret_cast<void*>(start & (~CachePage::kPageMask));
847 int offset = (start & CachePage::kPageMask); 843 int offset = (start & CachePage::kPageMask);
848 CachePage* cache_page = GetCachePage(i_cache, page); 844 CachePage* cache_page = GetCachePage(i_cache, page);
849 char* valid_bytemap = cache_page->ValidityByte(offset); 845 char* valid_bytemap = cache_page->ValidityByte(offset);
850 memset(valid_bytemap, CachePage::LINE_INVALID, size >> CachePage::kLineShift); 846 memset(valid_bytemap, CachePage::LINE_INVALID, size >> CachePage::kLineShift);
851 } 847 }
852 848
853 849 void Simulator::CheckICache(base::HashMap* i_cache, Instruction* instr) {
854 void Simulator::CheckICache(v8::internal::HashMap* i_cache,
855 Instruction* instr) {
856 int64_t address = reinterpret_cast<int64_t>(instr); 850 int64_t address = reinterpret_cast<int64_t>(instr);
857 void* page = reinterpret_cast<void*>(address & (~CachePage::kPageMask)); 851 void* page = reinterpret_cast<void*>(address & (~CachePage::kPageMask));
858 void* line = reinterpret_cast<void*>(address & (~CachePage::kLineMask)); 852 void* line = reinterpret_cast<void*>(address & (~CachePage::kLineMask));
859 int offset = (address & CachePage::kPageMask); 853 int offset = (address & CachePage::kPageMask);
860 CachePage* cache_page = GetCachePage(i_cache, page); 854 CachePage* cache_page = GetCachePage(i_cache, page);
861 char* cache_valid_byte = cache_page->ValidityByte(offset); 855 char* cache_valid_byte = cache_page->ValidityByte(offset);
862 bool cache_hit = (*cache_valid_byte == CachePage::LINE_VALID); 856 bool cache_hit = (*cache_valid_byte == CachePage::LINE_VALID);
863 char* cached_line = cache_page->CachedData(offset & ~CachePage::kLineMask); 857 char* cached_line = cache_page->CachedData(offset & ~CachePage::kLineMask);
864 if (cache_hit) { 858 if (cache_hit) {
865 // Check that the data in memory matches the contents of the I-cache. 859 // Check that the data in memory matches the contents of the I-cache.
(...skipping 12 matching lines...) Expand all
878 if (isolate->simulator_initialized()) return; 872 if (isolate->simulator_initialized()) return;
879 isolate->set_simulator_initialized(true); 873 isolate->set_simulator_initialized(true);
880 ::v8::internal::ExternalReference::set_redirector(isolate, 874 ::v8::internal::ExternalReference::set_redirector(isolate,
881 &RedirectExternalReference); 875 &RedirectExternalReference);
882 } 876 }
883 877
884 878
885 Simulator::Simulator(Isolate* isolate) : isolate_(isolate) { 879 Simulator::Simulator(Isolate* isolate) : isolate_(isolate) {
886 i_cache_ = isolate_->simulator_i_cache(); 880 i_cache_ = isolate_->simulator_i_cache();
887 if (i_cache_ == NULL) { 881 if (i_cache_ == NULL) {
888 i_cache_ = new v8::internal::HashMap(&ICacheMatch); 882 i_cache_ = new base::HashMap(&ICacheMatch);
889 isolate_->set_simulator_i_cache(i_cache_); 883 isolate_->set_simulator_i_cache(i_cache_);
890 } 884 }
891 Initialize(isolate); 885 Initialize(isolate);
892 // Set up simulator support first. Some of this information is needed to 886 // Set up simulator support first. Some of this information is needed to
893 // setup the architecture state. 887 // setup the architecture state.
894 stack_size_ = FLAG_sim_stack_size * KB; 888 stack_size_ = FLAG_sim_stack_size * KB;
895 stack_ = reinterpret_cast<char*>(malloc(stack_size_)); 889 stack_ = reinterpret_cast<char*>(malloc(stack_size_));
896 pc_modified_ = false; 890 pc_modified_ = false;
897 icount_ = 0; 891 icount_ = 0;
898 break_count_ = 0; 892 break_count_ = 0;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 987
994 private: 988 private:
995 void* external_function_; 989 void* external_function_;
996 uint32_t swi_instruction_; 990 uint32_t swi_instruction_;
997 ExternalReference::Type type_; 991 ExternalReference::Type type_;
998 Redirection* next_; 992 Redirection* next_;
999 }; 993 };
1000 994
1001 995
1002 // static 996 // static
1003 void Simulator::TearDown(HashMap* i_cache, Redirection* first) { 997 void Simulator::TearDown(base::HashMap* i_cache, Redirection* first) {
1004 Redirection::DeleteChain(first); 998 Redirection::DeleteChain(first);
1005 if (i_cache != nullptr) { 999 if (i_cache != nullptr) {
1006 for (HashMap::Entry* entry = i_cache->Start(); entry != nullptr; 1000 for (base::HashMap::Entry* entry = i_cache->Start(); entry != nullptr;
1007 entry = i_cache->Next(entry)) { 1001 entry = i_cache->Next(entry)) {
1008 delete static_cast<CachePage*>(entry->value); 1002 delete static_cast<CachePage*>(entry->value);
1009 } 1003 }
1010 delete i_cache; 1004 delete i_cache;
1011 } 1005 }
1012 } 1006 }
1013 1007
1014 1008
1015 void* Simulator::RedirectExternalReference(Isolate* isolate, 1009 void* Simulator::RedirectExternalReference(Isolate* isolate,
1016 void* external_function, 1010 void* external_function,
(...skipping 3926 matching lines...) Expand 10 before | Expand all | Expand 10 after
4943 } 4937 }
4944 4938
4945 4939
4946 #undef UNSUPPORTED 4940 #undef UNSUPPORTED
4947 } // namespace internal 4941 } // namespace internal
4948 } // namespace v8 4942 } // namespace v8
4949 4943
4950 #endif // USE_SIMULATOR 4944 #endif // USE_SIMULATOR
4951 4945
4952 #endif // V8_TARGET_ARCH_MIPS64 4946 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/simulator-mips64.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698