/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include "xenia/cpu/backend/x64/x64_function.h" #include "xenia/cpu/backend/x64/x64_backend.h" #include "xenia/cpu/processor.h" #include "xenia/cpu/thread_state.h" namespace xe { namespace cpu { namespace backend { namespace x64 { X64Function::X64Function(Module* module, uint32_t address) : GuestFunction(module, address) {} X64Function::~X64Function() { // machine_code_ is freed by code cache. } void X64Function::Setup(uint8_t* machine_code, size_t machine_code_length) { machine_code_ = machine_code; machine_code_length_ = machine_code_length; } bool X64Function::CallImpl(ThreadState* thread_state, uint32_t return_address) { auto backend = reinterpret_cast(thread_state->processor()->backend()); auto thunk = backend->host_to_guest_thunk(); thunk(machine_code_, thread_state->context(), reinterpret_cast(uintptr_t(return_address))); return true; } } // namespace x64 } // namespace backend } // namespace cpu } // namespace xe