diff --git a/src/backend_x64/devirtualize.h b/src/backend_x64/devirtualize.h index 4636884a..111fb435 100644 --- a/src/backend_x64/devirtualize.h +++ b/src/backend_x64/devirtualize.h @@ -37,6 +37,12 @@ ArgCallback DevirtualizeGeneric(mp::class_type_t* this_) { return ArgCallback{&impl::ThunkBuilder::Thunk, reinterpret_cast(this_)}; } +template +ArgCallback DevirtualizeWindows(mp::class_type_t* this_) { + static_assert(sizeof(mfp) == 8); + return ArgCallback{Common::BitCast(mfp), reinterpret_cast(this_)}; +} + template ArgCallback DevirtualizeItanium(mp::class_type_t* this_) { struct MemberFunctionPointer { @@ -61,6 +67,8 @@ ArgCallback DevirtualizeItanium(mp::class_type_t* this_) { #if defined(__APPLE__) || defined(linux) || defined(__linux) || defined(__linux__) #define DEVIRT(this_, mfp) Dynarmic::BackendX64::DevirtualizeItanium(this_) +#elif defined(_WIN32) +#define DEVIRT(this_, mfp) Dynarmic::BackendX64::DevirtualizeWindows(this_) #else #define DEVIRT(this_, mfp) Dynarmic::BackendX64::DevirtualizeGeneric(this_) #endif