Skip to content

Commit

Permalink
Added check for AVX on boot
Browse files Browse the repository at this point in the history
  • Loading branch information
hyperbx committed Mar 6, 2025
1 parent da5db2a commit 32b5be6
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
2 changes: 1 addition & 1 deletion UnleashedRecomp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ if (WIN32)
Synchronization
winmm
)
endif()
endif()

target_link_libraries(UnleashedRecomp PRIVATE
fmt::fmt
Expand Down
26 changes: 25 additions & 1 deletion UnleashedRecomp/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <stdafx.h>
#include <cpuid.h>
#include <cpu/guest_thread.h>
#include <gpu/video.h>
#include <kernel/function.h>
Expand Down Expand Up @@ -147,6 +148,29 @@ uint32_t LdrLoadModule(const std::filesystem::path &path)
return entry;
}

__attribute__((constructor(101), target("no-avx,no-avx2"), noinline))
void init()
{
#if defined(__x86_64__) || defined(_M_X64)
uint32_t eax, ebx, ecx, edx;

// Execute CPUID for processor info and feature bits.
__get_cpuid(1, &eax, &ebx, &ecx, &edx);

// Check for AVX support.
if ((ecx & (1 << 28)) == 0)
{
printf("[*] CPU does not support the AVX instruction set.\n");

#if _WIN32
MessageBoxA(nullptr, "Your CPU does not meet the minimum system requirements.", "Unleashed Recompiled", MB_ICONERROR);
#endif

std::_Exit(1);
}
#endif
}

int main(int argc, char *argv[])
{
#ifdef _WIN32
Expand All @@ -156,7 +180,7 @@ int main(int argc, char *argv[])
os::process::CheckConsole();

if (!os::registry::Init())
LOGN_WARNING("OS doesn't support registry");
LOGN_WARNING("OS does not support registry.");

os::logger::Init();

Expand Down

0 comments on commit 32b5be6

Please sign in to comment.