mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-08 20:00:17 +02:00
- Do compiler/architecture checks EARLY, don't waste time doing random configuration stuff if the user can't even compile in the first place - MSVC is unsupported, I assume? So add a check to disallow. There's literally no MSVC or MSC_VER checks anywhere, so... - Rather than using the MSVC architecture definitions, use our own `ARCHITECTURE_arm64` et al. Hijacking existing "standard" definitions is a very bad idea. Also makes it more readable in CMake - Change the x86 host check to `x86|amd64`. Some systems still refer to themselves as x86 despite being 64-bit for... reasons, and I saw one a very long time ago that referred to it as amd64. This should basically never come up, nor is it really relevant given that FEX is for arm64... but it kinda annoyed me so whatever. TODOs: - Should we check `CMAKE_SIZEOF_VOID_P (equal) 64`? I don't think anyone is even trying to compile this thing on armv7 or older, but might as well? maybe? - What's the status of *BSD, Solaris, macOS? Technically macOS does support Wine, not sure about the others. Signed-off-by: crueter <crueter@eden-emu.dev>
72 lines
1.4 KiB
C++
72 lines
1.4 KiB
C++
// SPDX-License-Identifier: MIT
|
|
#pragma once
|
|
#ifdef _WIN32
|
|
#include <FEXCore/Utils/LogManager.h>
|
|
#include <winnt.h>
|
|
|
|
namespace FEX::ArchHelpers::Context {
|
|
#ifdef ARCHITECTURE_arm64
|
|
static inline uint64_t GetSp(PCONTEXT Context) {
|
|
return Context->Sp;
|
|
}
|
|
|
|
static inline uint64_t GetPc(PCONTEXT Context) {
|
|
return Context->Pc;
|
|
}
|
|
|
|
static inline void SetSp(PCONTEXT Context, uint64_t val) {
|
|
Context->Sp = val;
|
|
}
|
|
|
|
static inline void SetPc(PCONTEXT Context, uint64_t val) {
|
|
Context->Pc = val;
|
|
}
|
|
|
|
static inline uint64_t GetState(PCONTEXT Context) {
|
|
return Context->X28;
|
|
}
|
|
|
|
static inline void SetState(PCONTEXT Context, uint64_t val) {
|
|
Context->X28 = val;
|
|
}
|
|
|
|
static inline uint64_t* GetArmGPRs(PCONTEXT Context) {
|
|
return Context->X;
|
|
}
|
|
#endif
|
|
|
|
#ifdef ARCHITECTURE_x86_64
|
|
static inline uint64_t GetSp(PCONTEXT Context) {
|
|
return Context->Rsp;
|
|
}
|
|
|
|
static inline uint64_t GetPc(PCONTEXT Context) {
|
|
return Context->Rip;
|
|
}
|
|
|
|
static inline void SetSp(PCONTEXT Context, uint64_t val) {
|
|
Context->Rsp = val;
|
|
}
|
|
|
|
static inline void SetPc(PCONTEXT Context, uint64_t val) {
|
|
Context->Rip = val;
|
|
}
|
|
|
|
static inline uint64_t GetState(PCONTEXT Context) {
|
|
return Context->R14;
|
|
}
|
|
|
|
static inline void SetState(PCONTEXT Context, uint64_t val) {
|
|
Context->R14 = val;
|
|
}
|
|
|
|
static inline uint64_t* GetArmGPRs(PCONTEXT Context) {
|
|
ERROR_AND_DIE_FMT("Not implemented for x86 host");
|
|
}
|
|
|
|
#endif
|
|
|
|
} // namespace FEX::ArchHelpers::Context
|
|
|
|
#endif
|