Syscalls: Clean up registry macros

This commit is contained in:
Tony Wasserka committed 2022-07-28 11:22:38 +02:00
1 parent ff9f702e52
commit 431e1629b0
3 files changed
+31 -77

No files matched your search

+10 -25
View File
@@ -537,34 +537,19 @@ static bool HasSyscallError(const void* Result) {
// Registers syscall for both 32bit and 64bit
#define REGISTER_SYSCALL_IMPL(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, FEX::HLE::x64::SYSCALL_x64_##name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
FEX::HLE::x32::RegisterSyscall(Handler, FEX::HLE::x32::SYSCALL_x86_##name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_INTERNAL(name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, lambda)
// Registers syscall for both 32bit and 64bit
#define REGISTER_SYSCALL_IMPL_PASS(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, FEX::HLE::x64::SYSCALL_x64_##name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
FEX::HLE::x32::RegisterSyscall(Handler, FEX::HLE::x32::SYSCALL_x86_##name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_INTERNAL(name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, lambda)
#define REGISTER_SYSCALL_IMPL_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, FEX::HLE::x64::SYSCALL_x64_##name, ~0, flags, #name, lambda); \
FEX::HLE::x32::RegisterSyscall(Handler, FEX::HLE::x32::SYSCALL_x86_##name, ~0, flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_INTERNAL(name, ~0, flags, lambda)
#define REGISTER_SYSCALL_IMPL_PASS_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, FEX::HLE::x64::SYSCALL_x64_##name, SYSCALL_DEF(name), flags, #name, lambda); \
FEX::HLE::x32::RegisterSyscall(Handler, FEX::HLE::x32::SYSCALL_x86_##name, SYSCALL_DEF(name), flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_INTERNAL(name, SYSCALL_DEF(name), flags, lambda)
#define REGISTER_SYSCALL_IMPL_INTERNAL(name, number, flags, lambda) \
do { \
FEX::HLE::x64::RegisterSyscall(Handler, FEX::HLE::x64::SYSCALL_x64_##name, (number), (flags), #name, (lambda)); \
FEX::HLE::x32::RegisterSyscall(Handler, FEX::HLE::x32::SYSCALL_x86_##name, (number), (flags), #name, (lambda)); \
} while (false)
+12 -32
View File
@@ -96,7 +96,7 @@ void RegisterSyscall(SyscallHandler *Handler, int SyscallNumber, int32_t HostSys
reinterpret_cast<void*>(fn), sizeof...(Args));
}
//LambdaTraits extracts the function singature of a lambda from operator()
//LambdaTraits extracts the function signature of a lambda from operator()
template<typename FPtr>
struct LambdaTraits;
@@ -119,44 +119,24 @@ void RegisterSyscall(SyscallHandler *_Handler, int num, int32_t HostSyscallNumbe
// Registers syscall for 32bit only
#define REGISTER_SYSCALL_IMPL_X32(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, lambda)
// Registers syscall for 32bit only
#define REGISTER_SYSCALL_IMPL_X32_PASS(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, lambda)
#define REGISTER_SYSCALL_IMPL_X32_PASS_MANUAL(name, hostname, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, SYSCALL_DEF(hostname), FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, SYSCALL_DEF(hostname), FEXCore::IR::SyscallFlags::DEFAULT, lambda)
#define REGISTER_SYSCALL_IMPL_X32_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, ~0, flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, ~0, flags, lambda)
#define REGISTER_SYSCALL_IMPL_X32_PASS_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, SYSCALL_DEF(name), flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, SYSCALL_DEF(name), flags, lambda)
#define REGISTER_SYSCALL_IMPL_X32_PASS_MANUAL_FLAGS(name, hostname, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, SYSCALL_DEF(hostname), flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, SYSCALL_DEF(hostname), flags, lambda)
#define REGISTER_SYSCALL_IMPL_X32_INTERNAL(name, number, flags, lambda) \
do { \
FEX::HLE::x32::RegisterSyscall(Handler, x32::SYSCALL_x86_##name, number, flags, #name, lambda); \
} while (false)
+9 -20
View File
@@ -118,29 +118,18 @@ void RegisterSyscall(SyscallHandler *_Handler, int num, int32_t HostSyscallNumbe
// Registers syscall for 64bit only
#define REGISTER_SYSCALL_IMPL_X64(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, x64::SYSCALL_x64_##name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X64_INTERNAL(name, ~0, FEXCore::IR::SyscallFlags::DEFAULT, lambda)
#define REGISTER_SYSCALL_IMPL_X64_PASS(name, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, x64::SYSCALL_x64_##name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X64_INTERNAL(name, SYSCALL_DEF(name), FEXCore::IR::SyscallFlags::DEFAULT, lambda)
#define REGISTER_SYSCALL_IMPL_X64_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, x64::SYSCALL_x64_##name, ~0, flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X64_INTERNAL(name, ~0, flags, lambda)
#define REGISTER_SYSCALL_IMPL_X64_PASS_FLAGS(name, flags, lambda) \
struct impl_##name { \
impl_##name(FEX::HLE::SyscallHandler *Handler) \
{ \
FEX::HLE::x64::RegisterSyscall(Handler, x64::SYSCALL_x64_##name, SYSCALL_DEF(name), flags, #name, lambda); \
} } impl_##name(Handler)
REGISTER_SYSCALL_IMPL_X64_INTERNAL(name, SYSCALL_DEF(name), flags, lambda)
#define REGISTER_SYSCALL_IMPL_X64_INTERNAL(name, number, flags, lambda) \
do { \
FEX::HLE::x64::RegisterSyscall(Handler, x64::SYSCALL_x64_##name, (number), (flags), #name, (lambda)); \
} while (false)