mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-08 07:51:28 +12:00
Initial Linux Aarch64 support
* Update asmjit dependency (aarch64 branch) * Disable USE_DISCORD_RPC by default * Dump some JIT objects in rpcs3 cache dir * Add SIGILL handler for all platforms * Fix resetting zeroing denormals in thread pool * Refactor most v128:: utils into global gv_** functions * Refactor PPU interpreter (incomplete), remove "precise" * - Instruction specializations with multiple accuracy flags * - Adjust calling convention for speed * - Removed precise/fast setting, replaced with static * - Started refactoring interpreters for building at runtime JIT * (I got tired of poor compiler optimizations) * - Expose some accuracy settings (SAT, NJ, VNAN, FPCC) * - Add exec_bytes PPU thread variable (akin to cycle count) * PPU LLVM: fix VCTUXS+VCTSXS instruction NaN results * SPU interpreter: remove "precise" for now (extremely non-portable) * - As with PPU, settings changed to static/dynamic for interpreters. * - Precise options will be implemented later * Fix termination after fatal error dialog
This commit is contained in:
parent
d6aa834b5f
commit
580bd2b25e
89 changed files with 20360 additions and 5612 deletions
|
@ -42,6 +42,7 @@ DYNAMIC_IMPORT("ntdll.dll", NtSetTimerResolution, NTSTATUS(ULONG DesiredResoluti
|
|||
#include <spawn.h>
|
||||
#include <sys/wait.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
|
@ -49,7 +50,7 @@ DYNAMIC_IMPORT("ntdll.dll", NtSetTimerResolution, NTSTATUS(ULONG DesiredResoluti
|
|||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(BLOCKS) // BLOCKS is required for dispatch_sync, but GCC-11 does not support it
|
||||
#if defined(__APPLE__)
|
||||
#include <dispatch/dispatch.h>
|
||||
#endif
|
||||
|
||||
|
@ -96,7 +97,7 @@ LOG_CHANNEL(q_debug, "QDEBUG");
|
|||
fmt::append(buf, "\nThread id = %s.", std::this_thread::get_id());
|
||||
}
|
||||
|
||||
const std::string_view text = buf.empty() ? _text : buf;
|
||||
std::string_view text = buf.empty() ? _text : buf;
|
||||
|
||||
if (s_headless)
|
||||
{
|
||||
|
@ -124,18 +125,16 @@ LOG_CHANNEL(q_debug, "QDEBUG");
|
|||
std::cerr << fmt::format("RPCS3: %s\n", text);
|
||||
}
|
||||
|
||||
auto show_report = [](std::string_view text)
|
||||
static auto show_report = [](std::string_view text)
|
||||
{
|
||||
fatal_error_dialog dlg(text);
|
||||
dlg.exec();
|
||||
};
|
||||
|
||||
#if defined(__APPLE__) && defined(BLOCKS) // BLOCKS is required for dispatch_sync, but GCC-11 does not support it
|
||||
// Cocoa access is not allowed outside of the main thread
|
||||
// Prevents crash dialogs from freezing the program
|
||||
#if defined(__APPLE__)
|
||||
if (!pthread_main_np())
|
||||
{
|
||||
dispatch_sync(dispatch_get_main_queue(), ^ { show_report(text); });
|
||||
dispatch_sync_f(dispatch_get_main_queue(), &text, [](void* text){ show_report(*static_cast<std::string_view*>(text)); });
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
@ -143,9 +142,12 @@ LOG_CHANNEL(q_debug, "QDEBUG");
|
|||
// If Qt is already initialized, spawn a new RPCS3 process with an --error argument
|
||||
if (local)
|
||||
{
|
||||
// Since we only show an error, we can hope for a graceful exit
|
||||
show_report(text);
|
||||
std::exit(0);
|
||||
#ifdef _WIN32
|
||||
ExitProcess(0);
|
||||
#else
|
||||
kill(getpid(), SIGKILL);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue