48 lines
1.8 KiB
C++
48 lines
1.8 KiB
C++
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
|
|
|
#pragma once
|
|
|
|
#include "guest_common.h"
|
|
|
|
namespace skyline {
|
|
namespace guest {
|
|
constexpr size_t SaveCtxSize = 20 * sizeof(u32); //!< The size of the SaveCtx function in 32-bit ARMv8 instructions
|
|
constexpr size_t LoadCtxSize = 20 * sizeof(u32); //!< The size of the LoadCtx function in 32-bit ARMv8 instructions
|
|
constexpr size_t RescaleClockSize = 16 * sizeof(u32); //!< The size of the RescaleClock function in 32-bit ARMv8 instructions
|
|
#ifdef NDEBUG
|
|
constexpr size_t SvcHandlerSize = 225 * sizeof(u32); //!< The size of the SvcHandler (Release) function in 32-bit ARMv8 instructions
|
|
#else
|
|
constexpr size_t SvcHandlerSize = 400 * sizeof(u32); //!< The size of the SvcHandler (Debug) function in 32-bit ARMv8 instructions
|
|
#endif
|
|
|
|
/**
|
|
* @brief This is the entry point for all guest threads
|
|
* @param address The address of the actual thread entry point
|
|
*/
|
|
void GuestEntry(u64 address);
|
|
|
|
/**
|
|
* @brief This saves the context from CPU registers into TLS
|
|
*/
|
|
extern "C" void SaveCtx(void);
|
|
|
|
/**
|
|
* @brief This loads the context from TLS into CPU registers
|
|
*/
|
|
extern "C" void LoadCtx(void);
|
|
|
|
/**
|
|
* @brief This rescales the clock to Tegra X1 levels and puts the output on stack
|
|
*/
|
|
extern "C" __noreturn void RescaleClock(void);
|
|
|
|
/**
|
|
* @brief This is used to handle all SVC calls
|
|
* @param pc The address of PC when the call was being done
|
|
* @param svc The SVC ID of the SVC being called
|
|
*/
|
|
void SvcHandler(u64 pc, u32 svc);
|
|
}
|
|
}
|