| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #include "vm/globals.h" |
| #if defined(TARGET_ARCH_MIPS) |
| |
| // Only build the simulator if not compiling for real MIPS hardware. |
| #if !defined(HOST_ARCH_MIPS) |
| |
| #include "vm/simulator.h" |
| |
| #include "vm/assembler.h" |
| #include "vm/constants_mips.h" |
| #include "vm/disassembler.h" |
| |
| namespace dart { |
| |
| Simulator::Simulator() { |
| // Setup simulator support first. Some of this information is needed to |
| // setup the architecture state. |
| // We allocate the stack here, the size is computed as the sum of |
| // the size specified by the user and the buffer space needed for |
| // handling stack overflow exceptions. To be safe in potential |
| // stack underflows we also add some underflow buffer space. |
| stack_ = new char[(Isolate::GetSpecifiedStackSize() + |
| Isolate::kStackSizeBuffer + |
| kSimulatorStackUnderflowSize)]; |
| } |
| |
| |
| Simulator::~Simulator() { |
| Isolate* isolate = Isolate::Current(); |
| if (isolate != NULL) { |
| isolate->set_simulator(NULL); |
| } |
| } |
| |
| |
| // Get the active Simulator for the current isolate. |
| Simulator* Simulator::Current() { |
| Simulator* simulator = Isolate::Current()->simulator(); |
| if (simulator == NULL) { |
| simulator = new Simulator(); |
| Isolate::Current()->set_simulator(simulator); |
| } |
| return simulator; |
| } |
| |
| |
| // Sets the register in the architecture state. It will also deal with updating |
| // Simulator internal state for special registers such as PC. |
| void Simulator::set_register(Register reg, int32_t value) { |
| UNIMPLEMENTED(); |
| } |
| |
| |
| // Get the register from the architecture state. This function does handle |
| // the special case of accessing the PC register. |
| int32_t Simulator::get_register(Register reg) const { |
| UNIMPLEMENTED(); |
| return 0; |
| } |
| |
| |
| // Returns the top of the stack area to enable checking for stack pointer |
| // validity. |
| uword Simulator::StackTop() const { |
| // To be safe in potential stack underflows we leave some buffer above and |
| // set the stack top. |
| return reinterpret_cast<uword>(stack_) + |
| (Isolate::GetSpecifiedStackSize() + Isolate::kStackSizeBuffer); |
| } |
| |
| |
| void Simulator::InitOnce() { |
| } |
| |
| |
| int64_t Simulator::Call(int32_t entry, |
| int32_t parameter0, |
| int32_t parameter1, |
| int32_t parameter2, |
| int32_t parameter3, |
| int32_t parameter4) { |
| UNIMPLEMENTED(); |
| return 0LL; |
| } |
| |
| } // namespace dart |
| |
| #endif // !defined(HOST_ARCH_MIPS) |
| |
| #endif // defined TARGET_ARCH_MIPS |