summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/citra/config.cpp3
-rw-r--r--src/citra/default_ini.h6
-rw-r--r--src/citra_qt/configuration/config.cpp5
-rw-r--r--src/citra_qt/configuration/configure_general.cpp7
-rw-r--r--src/citra_qt/configuration/configure_general.ui13
-rw-r--r--src/core/core.cpp12
-rw-r--r--src/core/settings.h7
-rw-r--r--src/core/telemetry_session.cpp3
8 files changed, 40 insertions, 16 deletions
diff --git a/src/citra/config.cpp b/src/citra/config.cpp
index 432bf2ced..e44931abd 100644
--- a/src/citra/config.cpp
+++ b/src/citra/config.cpp
@@ -82,7 +82,8 @@ void Config::ReadValues() {
sdl2_config->Get("Controls", "touch_device", "engine:emu_window");
// Core
- Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true);
+ Settings::values.cpu_core =
+ static_cast<Settings::CpuCore>(sdl2_config->GetInteger("Core", "cpu_core", 1));
// Renderer
Settings::values.use_hw_renderer = sdl2_config->GetBoolean("Renderer", "use_hw_renderer", true);
diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h
index 783c4a835..b4914d29f 100644
--- a/src/citra/default_ini.h
+++ b/src/citra/default_ini.h
@@ -67,9 +67,9 @@ motion_device=
touch_device=
[Core]
-# Whether to use the Just-In-Time (JIT) compiler for CPU emulation
-# 0: Interpreter (slow), 1 (default): JIT (fast)
-use_cpu_jit =
+# Which CPU core to use for CPU emulation
+# 0: Unicorn (slow), 1 (default): Dynarmic (faster)
+cpu_core =
[Renderer]
# Whether to use software or hardware rendering.
diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp
index c268e0068..68d565c39 100644
--- a/src/citra_qt/configuration/config.cpp
+++ b/src/citra_qt/configuration/config.cpp
@@ -67,7 +67,8 @@ void Config::ReadValues() {
qt_config->endGroup();
qt_config->beginGroup("Core");
- Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool();
+ Settings::values.cpu_core =
+ static_cast<Settings::CpuCore>(qt_config->value("cpu_core", 1).toInt());
qt_config->endGroup();
qt_config->beginGroup("Renderer");
@@ -207,7 +208,7 @@ void Config::SaveValues() {
qt_config->endGroup();
qt_config->beginGroup("Core");
- qt_config->setValue("use_cpu_jit", Settings::values.use_cpu_jit);
+ qt_config->setValue("cpu_core", static_cast<int>(Settings::values.cpu_core));
qt_config->endGroup();
qt_config->beginGroup("Renderer");
diff --git a/src/citra_qt/configuration/configure_general.cpp b/src/citra_qt/configuration/configure_general.cpp
index 939379717..0de27aa8b 100644
--- a/src/citra_qt/configuration/configure_general.cpp
+++ b/src/citra_qt/configuration/configure_general.cpp
@@ -19,7 +19,7 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)
this->setConfiguration();
- ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn());
+ ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn());
}
ConfigureGeneral::~ConfigureGeneral() {}
@@ -27,12 +27,12 @@ ConfigureGeneral::~ConfigureGeneral() {}
void ConfigureGeneral::setConfiguration() {
ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan);
ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing);
- ui->toggle_cpu_jit->setChecked(Settings::values.use_cpu_jit);
// The first item is "auto-select" with actual value -1, so plus one here will do the trick
ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1);
ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme));
+ ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core));
}
void ConfigureGeneral::applyConfiguration() {
@@ -41,6 +41,7 @@ void ConfigureGeneral::applyConfiguration() {
UISettings::values.theme =
ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString();
Settings::values.region_value = ui->region_combobox->currentIndex() - 1;
- Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked();
+ Settings::values.cpu_core =
+ static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex());
Settings::Apply();
}
diff --git a/src/citra_qt/configuration/configure_general.ui b/src/citra_qt/configuration/configure_general.ui
index eedf2cbb0..e88c37936 100644
--- a/src/citra_qt/configuration/configure_general.ui
+++ b/src/citra_qt/configuration/configure_general.ui
@@ -46,16 +46,23 @@
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
- <string>Performance</string>
+ <string>CPU Core</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
- <widget class="QCheckBox" name="toggle_cpu_jit">
+ <widget class="QComboBox" name="cpu_core_combobox">
+ <item>
<property name="text">
- <string>Enable CPU JIT</string>
+ <string>Unicorn</string>
</property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dynarmic</string>
+ </property>
+ </item>
</widget>
</item>
</layout>
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 0240f946b..e5f299f26 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -140,8 +140,16 @@ void System::Reschedule() {
System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
LOG_DEBUG(HW_Memory, "initialized OK");
- // TODO: Configuration option
- cpu_core = std::make_unique<ARM_Dynarmic>();
+ switch (Settings::values.cpu_core) {
+ case Settings::CpuCore::Unicorn:
+ cpu_core = std::make_unique<ARM_Unicorn>();
+ break;
+ case Settings::CpuCore::Dynarmic:
+ default:
+ cpu_core = std::make_unique<ARM_Dynarmic>();
+ break;
+ }
+
telemetry_session = std::make_unique<Core::TelemetrySession>();
CoreTiming::Init();
diff --git a/src/core/settings.h b/src/core/settings.h
index 912b2c885..ebf072cff 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -72,6 +72,11 @@ static const std::array<const char*, NumAnalogs> mapping = {{
}};
} // namespace NativeAnalog
+enum class CpuCore {
+ Unicorn,
+ Dynarmic,
+};
+
struct Values {
// CheckNew3DS
bool is_new_3ds;
@@ -83,7 +88,7 @@ struct Values {
std::string touch_device;
// Core
- bool use_cpu_jit;
+ CpuCore cpu_core;
// Data Storage
bool use_virtual_sd;
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index ca517ff44..f9725b590 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -156,7 +156,8 @@ TelemetrySession::TelemetrySession() {
// Log user configuration information
AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching",
Settings::values.enable_audio_stretching);
- AddField(Telemetry::FieldType::UserConfig, "Core_UseCpuJit", Settings::values.use_cpu_jit);
+ AddField(Telemetry::FieldType::UserConfig, "Core_CpuCore",
+ static_cast<int>(Settings::values.cpu_core));
AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor",
Settings::values.resolution_factor);
AddField(Telemetry::FieldType::UserConfig, "Renderer_ToggleFramelimit",