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

Side by Side Diff: src/a64/simulator-a64.h

Issue 177533023: A64: Hardwire the decoder and the simulator (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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/a64/decoder-a64.h ('k') | src/a64/simulator-a64.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 }; 188 };
189 typedef SimRegisterBase<kXRegSizeInBytes> SimRegister; // r0-r31 189 typedef SimRegisterBase<kXRegSizeInBytes> SimRegister; // r0-r31
190 typedef SimRegisterBase<kDRegSizeInBytes> SimFPRegister; // v0-v31 190 typedef SimRegisterBase<kDRegSizeInBytes> SimFPRegister; // v0-v31
191 191
192 192
193 class Simulator : public DecoderVisitor { 193 class Simulator : public DecoderVisitor {
194 public: 194 public:
195 explicit Simulator(Decoder<DispatchingDecoderVisitor>* decoder, 195 explicit Simulator(Decoder<DispatchingDecoderVisitor>* decoder,
196 Isolate* isolate = NULL, 196 Isolate* isolate = NULL,
197 FILE* stream = stderr); 197 FILE* stream = stderr);
198 Simulator();
198 ~Simulator(); 199 ~Simulator();
199 200
200 // System functions. 201 // System functions.
201 202
202 static void Initialize(Isolate* isolate); 203 static void Initialize(Isolate* isolate);
203 204
204 static Simulator* current(v8::internal::Isolate* isolate); 205 static Simulator* current(v8::internal::Isolate* isolate);
205 206
206 class CallArgument; 207 class CallArgument;
207 208
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 Instruction* pc() { return pc_; } 328 Instruction* pc() { return pc_; }
328 329
329 void increment_pc() { 330 void increment_pc() {
330 if (!pc_modified_) { 331 if (!pc_modified_) {
331 pc_ = pc_->NextInstruction(); 332 pc_ = pc_->NextInstruction();
332 } 333 }
333 334
334 pc_modified_ = false; 335 pc_modified_ = false;
335 } 336 }
336 337
338 virtual void Decode(Instruction* instr) {
339 decoder_->Decode(instr);
340 }
341
337 void ExecuteInstruction() { 342 void ExecuteInstruction() {
338 ASSERT(IsAligned(reinterpret_cast<uintptr_t>(pc_), kInstructionSize)); 343 ASSERT(IsAligned(reinterpret_cast<uintptr_t>(pc_), kInstructionSize));
339 CheckBreakNext(); 344 CheckBreakNext();
340 decoder_->Decode(pc_); 345 Decode(pc_);
341 LogProcessorState(); 346 LogProcessorState();
342 increment_pc(); 347 increment_pc();
343 CheckBreakpoints(); 348 CheckBreakpoints();
344 } 349 }
345 350
346 // Declare all Visitor functions. 351 // Declare all Visitor functions.
347 #define DECLARE(A) void Visit##A(Instruction* instr); 352 #define DECLARE(A) void Visit##A(Instruction* instr);
348 VISITOR_LIST(DECLARE) 353 VISITOR_LIST(DECLARE)
349 #undef DECLARE 354 #undef DECLARE
350 355
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 LogSystemRegisters(); 580 LogSystemRegisters();
576 LogRegisters(); 581 LogRegisters();
577 LogFPRegisters(); 582 LogFPRegisters();
578 } 583 }
579 void LogWrite(uint8_t* address, uint64_t value, unsigned num_bytes) { 584 void LogWrite(uint8_t* address, uint64_t value, unsigned num_bytes) {
580 if (log_parameters_ & LOG_WRITE) PrintWrite(address, value, num_bytes); 585 if (log_parameters_ & LOG_WRITE) PrintWrite(address, value, num_bytes);
581 } 586 }
582 587
583 int log_parameters() { return log_parameters_; } 588 int log_parameters() { return log_parameters_; }
584 void set_log_parameters(int new_parameters) { 589 void set_log_parameters(int new_parameters) {
590 log_parameters_ = new_parameters;
591 if (!decoder_) {
592 if (new_parameters & LOG_DISASM) {
593 PrintF("Run --debug-sim to dynamically turn on disassembler\n");
594 }
595 return;
596 }
585 if (new_parameters & LOG_DISASM) { 597 if (new_parameters & LOG_DISASM) {
586 decoder_->InsertVisitorBefore(print_disasm_, this); 598 decoder_->InsertVisitorBefore(print_disasm_, this);
587 } else { 599 } else {
588 decoder_->RemoveVisitor(print_disasm_); 600 decoder_->RemoveVisitor(print_disasm_);
589 } 601 }
590 log_parameters_ = new_parameters;
591 } 602 }
592 603
593 static inline const char* WRegNameForCode(unsigned code, 604 static inline const char* WRegNameForCode(unsigned code,
594 Reg31Mode mode = Reg31IsZeroRegister); 605 Reg31Mode mode = Reg31IsZeroRegister);
595 static inline const char* XRegNameForCode(unsigned code, 606 static inline const char* XRegNameForCode(unsigned code,
596 Reg31Mode mode = Reg31IsZeroRegister); 607 Reg31Mode mode = Reg31IsZeroRegister);
597 static inline const char* SRegNameForCode(unsigned code); 608 static inline const char* SRegNameForCode(unsigned code);
598 static inline const char* DRegNameForCode(unsigned code); 609 static inline const char* DRegNameForCode(unsigned code);
599 static inline const char* VRegNameForCode(unsigned code); 610 static inline const char* VRegNameForCode(unsigned code);
600 static inline int CodeFromName(const char* name); 611 static inline int CodeFromName(const char* name);
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 823
813 // Debugger input. 824 // Debugger input.
814 void set_last_debugger_input(char* input) { 825 void set_last_debugger_input(char* input) {
815 DeleteArray(last_debugger_input_); 826 DeleteArray(last_debugger_input_);
816 last_debugger_input_ = input; 827 last_debugger_input_ = input;
817 } 828 }
818 char* last_debugger_input() { return last_debugger_input_; } 829 char* last_debugger_input() { return last_debugger_input_; }
819 char* last_debugger_input_; 830 char* last_debugger_input_;
820 831
821 private: 832 private:
833 void Init(FILE* stream);
834
822 int log_parameters_; 835 int log_parameters_;
823 Isolate* isolate_; 836 Isolate* isolate_;
824 }; 837 };
825 838
826 839
827 // When running with the simulator transition into simulated execution at this 840 // When running with the simulator transition into simulated execution at this
828 // point. 841 // point.
829 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \ 842 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
830 reinterpret_cast<Object*>(Simulator::current(Isolate::Current())->CallJS( \ 843 reinterpret_cast<Object*>(Simulator::current(Isolate::Current())->CallJS( \
831 FUNCTION_ADDR(entry), \ 844 FUNCTION_ADDR(entry), \
(...skipping 27 matching lines...) Expand all
859 static void UnregisterCTryCatch() { 872 static void UnregisterCTryCatch() {
860 Simulator::current(Isolate::Current())->PopAddress(); 873 Simulator::current(Isolate::Current())->PopAddress();
861 } 874 }
862 }; 875 };
863 876
864 #endif // !defined(USE_SIMULATOR) 877 #endif // !defined(USE_SIMULATOR)
865 878
866 } } // namespace v8::internal 879 } } // namespace v8::internal
867 880
868 #endif // V8_A64_SIMULATOR_A64_H_ 881 #endif // V8_A64_SIMULATOR_A64_H_
OLDNEW
« no previous file with comments | « src/a64/decoder-a64.h ('k') | src/a64/simulator-a64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698