mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 03:18:55 +02:00
[arm] remove vtable bounce hack (#3776)
horrible hack anyways, and PKZA shouldn't need it anymore Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3776 Reviewed-by: Maufeat <sahyno1996@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
612a203ab2
commit
148dc7b480
4 changed files with 3 additions and 25 deletions
|
|
@ -287,8 +287,6 @@ struct Values {
|
||||||
true,
|
true,
|
||||||
&use_custom_cpu_ticks};
|
&use_custom_cpu_ticks};
|
||||||
|
|
||||||
SwitchableSetting<bool> vtable_bouncing{linkage, true, "vtable_bouncing", Category::Cpu};
|
|
||||||
|
|
||||||
Setting<bool> cpuopt_page_tables{linkage, true, "cpuopt_page_tables", Category::CpuDebug};
|
Setting<bool> cpuopt_page_tables{linkage, true, "cpuopt_page_tables", Category::CpuDebug};
|
||||||
Setting<bool> cpuopt_block_linking{linkage, true, "cpuopt_block_linking", Category::CpuDebug};
|
Setting<bool> cpuopt_block_linking{linkage, true, "cpuopt_block_linking", Category::CpuDebug};
|
||||||
Setting<bool> cpuopt_return_stack_buffer{linkage, true, "cpuopt_return_stack_buffer",
|
Setting<bool> cpuopt_return_stack_buffer{linkage, true, "cpuopt_return_stack_buffer",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
||||||
|
|
@ -103,26 +103,12 @@ void PhysicalCore::RunThread(Kernel::KThread* thread) {
|
||||||
const bool data_abort = True(hr & Core::HaltReason::DataAbort);
|
const bool data_abort = True(hr & Core::HaltReason::DataAbort);
|
||||||
const bool interrupt = True(hr & Core::HaltReason::BreakLoop);
|
const bool interrupt = True(hr & Core::HaltReason::BreakLoop);
|
||||||
|
|
||||||
bool may_abort = true; // Ignore aborting virtual functions (for debugging)
|
|
||||||
if (prefetch_abort && ::Settings::values.vtable_bouncing) {
|
|
||||||
auto& lock = m_kernel.GlobalSchedulerContext().SchedulerLock();
|
|
||||||
lock.Lock();
|
|
||||||
Kernel::Svc::ThreadContext ctx;
|
|
||||||
interface->GetContext(ctx);
|
|
||||||
LOG_WARNING(Core_ARM, "vtable bouncing {:016X}", ctx.lr);
|
|
||||||
ctx.pc = ctx.lr;
|
|
||||||
ctx.r[0] = 0;
|
|
||||||
interface->SetContext(ctx);
|
|
||||||
lock.Unlock();
|
|
||||||
may_abort = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Since scheduling may occur here, we cannot use any cached
|
// Since scheduling may occur here, we cannot use any cached
|
||||||
// state after returning from calls we make.
|
// state after returning from calls we make.
|
||||||
|
|
||||||
// Notify the debugger and go to sleep if a breakpoint was hit,
|
// Notify the debugger and go to sleep if a breakpoint was hit,
|
||||||
// or if the thread is unable to continue for any reason.
|
// or if the thread is unable to continue for any reason.
|
||||||
if (breakpoint || (prefetch_abort && may_abort)) {
|
if (breakpoint || prefetch_abort) {
|
||||||
if (breakpoint) {
|
if (breakpoint) {
|
||||||
interface->RewindBreakpointInstruction();
|
interface->RewindBreakpointInstruction();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,10 +105,6 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
|
||||||
"cause deadlocks. A range of 77-21000 is recommended."));
|
"cause deadlocks. A range of 77-21000 is recommended."));
|
||||||
INSERT(Settings, cpu_backend, tr("Backend:"), QString());
|
INSERT(Settings, cpu_backend, tr("Backend:"), QString());
|
||||||
|
|
||||||
INSERT(Settings, vtable_bouncing, tr("Virtual Table Bouncing"),
|
|
||||||
tr("Bounces (by emulating a 0-valued return) any functions that triggers a prefetch "
|
|
||||||
"abort"));
|
|
||||||
|
|
||||||
// Cpu Debug
|
// Cpu Debug
|
||||||
|
|
||||||
// Cpu Unsafe
|
// Cpu Unsafe
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,7 @@ void ConfigureCpu::Setup(const ConfigurationShared::Builder& builder) {
|
||||||
} else if (setting->Id() == Settings::values.cpu_backend.Id()) {
|
} else if (setting->Id() == Settings::values.cpu_backend.Id()) {
|
||||||
backend_layout->addWidget(widget);
|
backend_layout->addWidget(widget);
|
||||||
backend_combobox = widget->combobox;
|
backend_combobox = widget->combobox;
|
||||||
} else if (setting->Id() == Settings::values.fast_cpu_time.Id() ||
|
} else if (setting->Id() == Settings::values.fast_cpu_time.Id() || setting->Id() == Settings::values.cpu_ticks.Id()) {
|
||||||
setting->Id() == Settings::values.vtable_bouncing.Id() ||
|
|
||||||
setting->Id() == Settings::values.cpu_ticks.Id()) {
|
|
||||||
ui->general_layout->addWidget(widget);
|
ui->general_layout->addWidget(widget);
|
||||||
} else {
|
} else {
|
||||||
// Presently, all other settings here are unsafe checkboxes
|
// Presently, all other settings here are unsafe checkboxes
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue