blob: 9969d28d7e7e174d630243109ad79532b3ed8c1c [file] [log] [blame] [edit]
// Copyright (c) 2022, 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.
#ifndef RUNTIME_VM_SIMULATOR_X64_H_
#define RUNTIME_VM_SIMULATOR_X64_H_
#ifndef RUNTIME_VM_SIMULATOR_H_
#error Do not include simulator_x64.h directly; use simulator.h.
#endif
#include "vm/constants.h"
#include "vm/random.h"
namespace dart {
class Thread;
class Simulator {
public:
static constexpr uword kSimulatorStackUnderflowSize = 64;
Simulator();
~Simulator();
static Simulator* Current();
int64_t Call(int64_t entry,
int64_t parameter0,
int64_t parameter1,
int64_t parameter2,
int64_t parameter3,
bool fp_return = false,
bool fp_args = false);
// Runtime and native call support.
enum CallKind {
kRuntimeCall,
kLeafRuntimeCall,
kLeafFloatRuntimeCall,
kNativeCallWrapper
};
static uword RedirectExternalReference(uword function,
CallKind call_kind,
int argument_count);
static uword FunctionForRedirect(uword redirect);
void JumpToFrame(uword pc, uword sp, uword fp, Thread* thread);
uint64_t get_register(Register rs) const { return 0; }
uint64_t get_pc() const { return 0; }
uint64_t get_sp() const { return 0; }
uint64_t get_fp() const { return 0; }
uint64_t get_lr() const { return 0; }
// High address.
uword stack_base() const { return 0; }
// Limit for StackOverflowError.
uword overflow_stack_limit() const { return 0; }
// Low address.
uword stack_limit() const { return 0; }
// Accessor to the instruction counter.
uint64_t get_icount() const { return 0; }
// Call on program start.
static void Init();
private:
DISALLOW_COPY_AND_ASSIGN(Simulator);
};
} // namespace dart
#endif // RUNTIME_VM_SIMULATOR_X64_H_