diff --git a/Source/Tests/LinuxSyscalls/Syscalls.h b/Source/Tests/LinuxSyscalls/Syscalls.h index 1de963742..ac30d36be 100644 --- a/Source/Tests/LinuxSyscalls/Syscalls.h +++ b/Source/Tests/LinuxSyscalls/Syscalls.h @@ -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) diff --git a/Source/Tests/LinuxSyscalls/x32/Syscalls.h b/Source/Tests/LinuxSyscalls/x32/Syscalls.h index 757f57a23..c17222819 100644 --- a/Source/Tests/LinuxSyscalls/x32/Syscalls.h +++ b/Source/Tests/LinuxSyscalls/x32/Syscalls.h @@ -96,7 +96,7 @@ void RegisterSyscall(SyscallHandler *Handler, int SyscallNumber, int32_t HostSys reinterpret_cast(fn), sizeof...(Args)); } -//LambdaTraits extracts the function singature of a lambda from operator() +//LambdaTraits extracts the function signature of a lambda from operator() template 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) diff --git a/Source/Tests/LinuxSyscalls/x64/Syscalls.h b/Source/Tests/LinuxSyscalls/x64/Syscalls.h index 1088c1a6c..4092e73d9 100644 --- a/Source/Tests/LinuxSyscalls/x64/Syscalls.h +++ b/Source/Tests/LinuxSyscalls/x64/Syscalls.h @@ -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)