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

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

Issue 1457223005: Remove a bunch of Isolate::Current() callsites from simulators (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 1 month 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/mips/simulator-mips.h ('k') | src/mips64/simulator-mips64.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_MIPS 10 #if V8_TARGET_ARCH_MIPS
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 } 582 }
583 } 583 }
584 end = cur + words; 584 end = cur + words;
585 } 585 }
586 586
587 while (cur < end) { 587 while (cur < end) {
588 PrintF(" 0x%08x: 0x%08x %10d", 588 PrintF(" 0x%08x: 0x%08x %10d",
589 reinterpret_cast<intptr_t>(cur), *cur, *cur); 589 reinterpret_cast<intptr_t>(cur), *cur, *cur);
590 HeapObject* obj = reinterpret_cast<HeapObject*>(*cur); 590 HeapObject* obj = reinterpret_cast<HeapObject*>(*cur);
591 int value = *cur; 591 int value = *cur;
592 Heap* current_heap = v8::internal::Isolate::Current()->heap(); 592 Heap* current_heap = sim_->isolate_->heap();
593 if (((value & 1) == 0) || current_heap->Contains(obj)) { 593 if (((value & 1) == 0) || current_heap->Contains(obj)) {
594 PrintF(" ("); 594 PrintF(" (");
595 if ((value & 1) == 0) { 595 if ((value & 1) == 0) {
596 PrintF("smi %d", value / 2); 596 PrintF("smi %d", value / 2);
597 } else { 597 } else {
598 obj->ShortPrint(); 598 obj->ShortPrint();
599 } 599 }
600 PrintF(")"); 600 PrintF(")");
601 } 601 }
602 PrintF("\n"); 602 PrintF("\n");
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 988
989 // When the generated code calls an external reference we need to catch that in 989 // When the generated code calls an external reference we need to catch that in
990 // the simulator. The external reference will be a function compiled for the 990 // the simulator. The external reference will be a function compiled for the
991 // host architecture. We need to call that function instead of trying to 991 // host architecture. We need to call that function instead of trying to
992 // execute it with the simulator. We do that by redirecting the external 992 // execute it with the simulator. We do that by redirecting the external
993 // reference to a swi (software-interrupt) instruction that is handled by 993 // reference to a swi (software-interrupt) instruction that is handled by
994 // the simulator. We write the original destination of the jump just at a known 994 // the simulator. We write the original destination of the jump just at a known
995 // offset from the swi instruction so the simulator knows what to call. 995 // offset from the swi instruction so the simulator knows what to call.
996 class Redirection { 996 class Redirection {
997 public: 997 public:
998 Redirection(void* external_function, ExternalReference::Type type) 998 Redirection(Isolate* isolate, void* external_function,
999 ExternalReference::Type type)
999 : external_function_(external_function), 1000 : external_function_(external_function),
1000 swi_instruction_(rtCallRedirInstr), 1001 swi_instruction_(rtCallRedirInstr),
1001 type_(type), 1002 type_(type),
1002 next_(NULL) { 1003 next_(NULL) {
1003 Isolate* isolate = Isolate::Current();
1004 next_ = isolate->simulator_redirection(); 1004 next_ = isolate->simulator_redirection();
1005 Simulator::current(isolate)-> 1005 Simulator::current(isolate)->
1006 FlushICache(isolate->simulator_i_cache(), 1006 FlushICache(isolate->simulator_i_cache(),
1007 reinterpret_cast<void*>(&swi_instruction_), 1007 reinterpret_cast<void*>(&swi_instruction_),
1008 Instruction::kInstrSize); 1008 Instruction::kInstrSize);
1009 isolate->set_simulator_redirection(this); 1009 isolate->set_simulator_redirection(this);
1010 } 1010 }
1011 1011
1012 void* address_of_swi_instruction() { 1012 void* address_of_swi_instruction() {
1013 return reinterpret_cast<void*>(&swi_instruction_); 1013 return reinterpret_cast<void*>(&swi_instruction_);
1014 } 1014 }
1015 1015
1016 void* external_function() { return external_function_; } 1016 void* external_function() { return external_function_; }
1017 ExternalReference::Type type() { return type_; } 1017 ExternalReference::Type type() { return type_; }
1018 1018
1019 static Redirection* Get(void* external_function, 1019 static Redirection* Get(Isolate* isolate, void* external_function,
1020 ExternalReference::Type type) { 1020 ExternalReference::Type type) {
1021 Isolate* isolate = Isolate::Current();
1022 Redirection* current = isolate->simulator_redirection(); 1021 Redirection* current = isolate->simulator_redirection();
1023 for (; current != NULL; current = current->next_) { 1022 for (; current != NULL; current = current->next_) {
1024 if (current->external_function_ == external_function) return current; 1023 if (current->external_function_ == external_function) return current;
1025 } 1024 }
1026 return new Redirection(external_function, type); 1025 return new Redirection(isolate, external_function, type);
1027 } 1026 }
1028 1027
1029 static Redirection* FromSwiInstruction(Instruction* swi_instruction) { 1028 static Redirection* FromSwiInstruction(Instruction* swi_instruction) {
1030 char* addr_of_swi = reinterpret_cast<char*>(swi_instruction); 1029 char* addr_of_swi = reinterpret_cast<char*>(swi_instruction);
1031 char* addr_of_redirection = 1030 char* addr_of_redirection =
1032 addr_of_swi - offsetof(Redirection, swi_instruction_); 1031 addr_of_swi - offsetof(Redirection, swi_instruction_);
1033 return reinterpret_cast<Redirection*>(addr_of_redirection); 1032 return reinterpret_cast<Redirection*>(addr_of_redirection);
1034 } 1033 }
1035 1034
1036 static void* ReverseRedirection(int32_t reg) { 1035 static void* ReverseRedirection(int32_t reg) {
(...skipping 24 matching lines...) Expand all
1061 if (i_cache != nullptr) { 1060 if (i_cache != nullptr) {
1062 for (HashMap::Entry* entry = i_cache->Start(); entry != nullptr; 1061 for (HashMap::Entry* entry = i_cache->Start(); entry != nullptr;
1063 entry = i_cache->Next(entry)) { 1062 entry = i_cache->Next(entry)) {
1064 delete static_cast<CachePage*>(entry->value); 1063 delete static_cast<CachePage*>(entry->value);
1065 } 1064 }
1066 delete i_cache; 1065 delete i_cache;
1067 } 1066 }
1068 } 1067 }
1069 1068
1070 1069
1071 void* Simulator::RedirectExternalReference(void* external_function, 1070 void* Simulator::RedirectExternalReference(Isolate* isolate,
1071 void* external_function,
1072 ExternalReference::Type type) { 1072 ExternalReference::Type type) {
1073 Redirection* redirection = Redirection::Get(external_function, type); 1073 Redirection* redirection = Redirection::Get(isolate, external_function, type);
1074 return redirection->address_of_swi_instruction(); 1074 return redirection->address_of_swi_instruction();
1075 } 1075 }
1076 1076
1077 1077
1078 // Get the active Simulator for the current thread. 1078 // Get the active Simulator for the current thread.
1079 Simulator* Simulator::current(Isolate* isolate) { 1079 Simulator* Simulator::current(Isolate* isolate) {
1080 v8::internal::Isolate::PerIsolateThreadData* isolate_data = 1080 v8::internal::Isolate::PerIsolateThreadData* isolate_data =
1081 isolate->FindOrAllocatePerThreadDataForThisThread(); 1081 isolate->FindOrAllocatePerThreadDataForThisThread();
1082 DCHECK(isolate_data != NULL); 1082 DCHECK(isolate_data != NULL);
1083 DCHECK(isolate_data != NULL); 1083 DCHECK(isolate_data != NULL);
(...skipping 3347 matching lines...) Expand 10 before | Expand all | Expand 10 after
4431 4431
4432 4432
4433 #undef UNSUPPORTED 4433 #undef UNSUPPORTED
4434 4434
4435 } // namespace internal 4435 } // namespace internal
4436 } // namespace v8 4436 } // namespace v8
4437 4437
4438 #endif // USE_SIMULATOR 4438 #endif // USE_SIMULATOR
4439 4439
4440 #endif // V8_TARGET_ARCH_MIPS 4440 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/mips/simulator-mips.h ('k') | src/mips64/simulator-mips64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698