dynarmic: Add option to disable CPU JIT optimizations
This commit is contained in:
		
							
								
								
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								externals/dynarmic
									
									
									
									
										vendored
									
									
								
							 Submodule externals/dynarmic updated: 57b987c185...a3cd05577c
									
								
							| @@ -20,6 +20,7 @@ | ||||
| #include "core/hle/kernel/scheduler.h" | ||||
| #include "core/hle/kernel/svc.h" | ||||
| #include "core/memory.h" | ||||
| #include "core/settings.h" | ||||
|  | ||||
| namespace Core { | ||||
|  | ||||
| @@ -144,6 +145,8 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | ||||
|     config.page_table_address_space_bits = address_space_bits; | ||||
|     config.silently_mirror_page_table = false; | ||||
|     config.absolute_offset_page_table = true; | ||||
|     config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | ||||
|     config.only_detect_misalignment_via_page_table_on_page_boundary = true; | ||||
|  | ||||
|     // Multi-process state | ||||
|     config.processor_id = core_index; | ||||
| @@ -159,8 +162,11 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | ||||
|     // Unpredictable instructions | ||||
|     config.define_unpredictable_behaviour = true; | ||||
|  | ||||
|     config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | ||||
|     config.only_detect_misalignment_via_page_table_on_page_boundary = true; | ||||
|     // Optimizations | ||||
|     if (Settings::values.disable_cpu_opt) { | ||||
|         config.enable_optimizations = false; | ||||
|         config.enable_fast_dispatch = false; | ||||
|     } | ||||
|  | ||||
|     return std::make_shared<Dynarmic::A64::Jit>(config); | ||||
| } | ||||
|   | ||||
| @@ -464,6 +464,7 @@ struct Values { | ||||
|     bool dump_nso; | ||||
|     bool reporting_services; | ||||
|     bool quest_flag; | ||||
|     bool disable_cpu_opt; | ||||
|  | ||||
|     // BCAT | ||||
|     std::string bcat_backend; | ||||
|   | ||||
| @@ -532,6 +532,8 @@ void Config::ReadDebuggingValues() { | ||||
|     Settings::values.reporting_services = | ||||
|         ReadSetting(QStringLiteral("reporting_services"), false).toBool(); | ||||
|     Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); | ||||
|     Settings::values.disable_cpu_opt = | ||||
|         ReadSetting(QStringLiteral("disable_cpu_opt"), false).toBool(); | ||||
|  | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| @@ -1001,6 +1003,7 @@ void Config::SaveDebuggingValues() { | ||||
|     WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); | ||||
|     WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); | ||||
|     WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); | ||||
|     WriteSetting(QStringLiteral("disable_cpu_opt"), Settings::values.disable_cpu_opt, false); | ||||
|  | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
|   | ||||
| @@ -36,6 +36,7 @@ void ConfigureDebug::SetConfiguration() { | ||||
|     ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args)); | ||||
|     ui->reporting_services->setChecked(Settings::values.reporting_services); | ||||
|     ui->quest_flag->setChecked(Settings::values.quest_flag); | ||||
|     ui->disable_cpu_opt->setChecked(Settings::values.disable_cpu_opt); | ||||
|     ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | ||||
|     ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug); | ||||
| } | ||||
| @@ -48,6 +49,7 @@ void ConfigureDebug::ApplyConfiguration() { | ||||
|     Settings::values.program_args = ui->homebrew_args_edit->text().toStdString(); | ||||
|     Settings::values.reporting_services = ui->reporting_services->isChecked(); | ||||
|     Settings::values.quest_flag = ui->quest_flag->isChecked(); | ||||
|     Settings::values.disable_cpu_opt = ui->disable_cpu_opt->isChecked(); | ||||
|     Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); | ||||
|     Debugger::ToggleConsole(); | ||||
|     Log::Filter filter; | ||||
|   | ||||
| @@ -215,6 +215,13 @@ | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|       <item> | ||||
|        <widget class="QCheckBox" name="disable_cpu_opt"> | ||||
|         <property name="text"> | ||||
|          <string>Disable CPU JIT optimizations</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|      </layout> | ||||
|     </widget> | ||||
|    </item> | ||||
|   | ||||
| @@ -425,6 +425,8 @@ void Config::ReadValues() { | ||||
|     Settings::values.reporting_services = | ||||
|         sdl2_config->GetBoolean("Debugging", "reporting_services", false); | ||||
|     Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); | ||||
|     Settings::values.disable_cpu_opt = | ||||
|         sdl2_config->GetBoolean("Debugging", "disable_cpu_opt", false); | ||||
|  | ||||
|     const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); | ||||
|     std::stringstream ss(title_list); | ||||
|   | ||||
| @@ -280,6 +280,9 @@ dump_nso=false | ||||
| # Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode | ||||
| # false: Retail/Normal Mode (default), true: Kiosk Mode | ||||
| quest_flag = | ||||
| # Determines whether or not JIT CPU optimizations are enabled | ||||
| # false: Optimizations Enabled, true: Optimizations Disabled | ||||
| disable_cpu_opt = | ||||
|  | ||||
| [WebService] | ||||
| # Whether or not to enable telemetry | ||||
|   | ||||
		Reference in New Issue
	
	Block a user