From 12b05c719eac7ed289a1d3d2acfb94704326fac1 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 22:24:31 -0400
Subject: [PATCH 1/6] config: Add setting for whether the system is docked or
 not.

---
 src/core/hle/service/am/am.cpp    | 8 ++++++--
 src/core/settings.h               | 3 +++
 src/yuzu/configuration/config.cpp | 8 ++++++++
 src/yuzu_cmd/config.cpp           | 3 +++
 src/yuzu_cmd/default_ini.h        | 4 ++++
 5 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index d9f003ed47..07522e730c 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -12,6 +12,7 @@
 #include "core/hle/service/apm/apm.h"
 #include "core/hle/service/filesystem/filesystem.h"
 #include "core/hle/service/nvflinger/nvflinger.h"
+#include "core/settings.h"
 
 namespace Service {
 namespace AM {
@@ -241,17 +242,20 @@ void ICommonStateGetter::GetCurrentFocusState(Kernel::HLERequestContext& ctx) {
 }
 
 void ICommonStateGetter::GetOperationMode(Kernel::HLERequestContext& ctx) {
+    const bool is_docked{Settings::values.is_docked};
     IPC::ResponseBuilder rb{ctx, 3};
     rb.Push(RESULT_SUCCESS);
-    rb.Push(static_cast<u8>(OperationMode::Handheld));
+    rb.Push(static_cast<u8>(is_docked ? OperationMode::Docked : OperationMode::Handheld));
 
     LOG_WARNING(Service_AM, "(STUBBED) called");
 }
 
 void ICommonStateGetter::GetPerformanceMode(Kernel::HLERequestContext& ctx) {
+    const bool is_docked{Settings::values.is_docked};
     IPC::ResponseBuilder rb{ctx, 3};
     rb.Push(RESULT_SUCCESS);
-    rb.Push(static_cast<u32>(APM::PerformanceMode::Handheld));
+    rb.Push(static_cast<u32>(is_docked ? APM::PerformanceMode::Docked
+                                       : APM::PerformanceMode::Handheld));
 
     LOG_WARNING(Service_AM, "(STUBBED) called");
 }
diff --git a/src/core/settings.h b/src/core/settings.h
index 6f8cd0f032..002d25dbd8 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -111,6 +111,9 @@ enum class CpuCore {
 };
 
 struct Values {
+    // System
+    bool is_docked;
+
     // Controls
     std::array<std::string, NativeButton::NumButtons> buttons;
     std::array<std::string, NativeAnalog::NumAnalogs> analogs;
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 71dc58e5db..5842bebee7 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -94,6 +94,10 @@ void Config::ReadValues() {
     Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
     qt_config->endGroup();
 
+    qt_config->beginGroup("System");
+    Settings::values.is_docked = qt_config->value("is_docked", true).toBool();
+    qt_config->endGroup();
+
     qt_config->beginGroup("Miscellaneous");
     Settings::values.log_filter = qt_config->value("log_filter", "*:Info").toString().toStdString();
     qt_config->endGroup();
@@ -188,6 +192,10 @@ void Config::SaveValues() {
     qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
     qt_config->endGroup();
 
+    qt_config->beginGroup("System");
+    qt_config->setValue("is_docked", Settings::values.is_docked);
+    qt_config->endGroup();
+
     qt_config->beginGroup("Miscellaneous");
     qt_config->setValue("log_filter", QString::fromStdString(Settings::values.log_filter));
     qt_config->endGroup();
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index 342ad3850e..38f76d425b 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -107,6 +107,9 @@ void Config::ReadValues() {
     Settings::values.use_virtual_sd =
         sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true);
 
+    // System
+    Settings::values.is_docked = sdl2_config->GetBoolean("System", "is_docked", true);
+
     // Miscellaneous
     Settings::values.log_filter = sdl2_config->Get("Miscellaneous", "log_filter", "*:Trace");
 
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h
index fe104fb81e..50802104c0 100644
--- a/src/yuzu_cmd/default_ini.h
+++ b/src/yuzu_cmd/default_ini.h
@@ -154,6 +154,10 @@ output_device =
 use_virtual_sd =
 
 [System]
+# Whether the system is docked
+# 1 (default): Yes, 0: No
+is_docked =
+
 # The system region that Citra will use during emulation
 # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan
 region_value =

From c97ff4460c87cc79977d3bd2448ba1cf79fefa1d Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 22:25:13 -0400
Subject: [PATCH 2/6] qt: Add config option for is_docked.

---
 src/yuzu/configuration/configure_general.cpp |  3 +++
 src/yuzu/configuration/configure_general.ui  | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 92fd6ab024..e811610353 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -16,6 +16,7 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)
     this->setConfiguration();
 
     ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn());
+    ui->is_docked->setEnabled(!Core::System::GetInstance().IsPoweredOn());
 }
 
 ConfigureGeneral::~ConfigureGeneral() {}
@@ -24,6 +25,7 @@ void ConfigureGeneral::setConfiguration() {
     ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan);
     ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing);
     ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core));
+    ui->is_docked->setChecked(Settings::values.is_docked);
 }
 
 void ConfigureGeneral::applyConfiguration() {
@@ -31,5 +33,6 @@ void ConfigureGeneral::applyConfiguration() {
     UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
     Settings::values.cpu_core =
         static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex());
+    Settings::values.is_docked = ui->is_docked->isChecked();
     Settings::Apply();
 }
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui
index 573c4cb0e0..35d3b26ad9 100644
--- a/src/yuzu/configuration/configure_general.ui
+++ b/src/yuzu/configuration/configure_general.ui
@@ -70,6 +70,26 @@
          </layout>
        </widget>
      </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox_4">
+       <property name="title">
+        <string>Emulation</string>
+       </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_8">
+          <item>
+            <layout class="QVBoxLayout" name="verticalLayout_6">
+              <item>
+                <widget class="QCheckBox" name="is_docked">
+                  <property name="text">
+                    <string>Enable docked mode</string>
+                  </property>
+                </widget>
+              </item>
+            </layout>
+          </item>
+        </layout>
+      </widget>
+     </item>
      <item>
       <widget class="QGroupBox" name="groupBox_3">
        <property name="title">

From f1423fcbc1f9a912a43cd31ba4b36733a2858713 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 22:29:15 -0400
Subject: [PATCH 3/6] configure_general: Cleanup naming.

---
 src/yuzu/configuration/configure_general.ui | 28 ++++++++++-----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui
index 35d3b26ad9..b0684f0c11 100644
--- a/src/yuzu/configuration/configure_general.ui
+++ b/src/yuzu/configuration/configure_general.ui
@@ -13,17 +13,17 @@
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout">
+  <layout class="QHBoxLayout" name="HorizontalLayout">
    <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
+    <layout class="QVBoxLayout" name="VerticalLayout">
      <item>
-      <widget class="QGroupBox" name="groupBox">
+      <widget class="QGroupBox" name="GeneralGroupBox">
        <property name="title">
         <string>General</string>
        </property>
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <layout class="QHBoxLayout" name="GeneralHorizontalLayout">
         <item>
-         <layout class="QVBoxLayout" name="verticalLayout_2">
+         <layout class="QVBoxLayout" name="GeneralVerticalLayout">
           <item>
            <widget class="QCheckBox" name="toggle_deepscan">
             <property name="text">
@@ -44,13 +44,13 @@
       </widget>
      </item>
      <item>
-       <widget class="QGroupBox" name="groupBox_2">
+       <widget class="QGroupBox" name="CpuCoreGroupBox">
          <property name="title">
            <string>CPU Core</string>
          </property>
-         <layout class="QHBoxLayout" name="horizontalLayout_7">
+         <layout class="QHBoxLayout" name="CpuCoreHorizontalLayout">
            <item>
-             <layout class="QVBoxLayout" name="verticalLayout_5">
+             <layout class="QVBoxLayout" name="CpuCoreVerticalLayout">
                <item>
                  <widget class="QComboBox" name="cpu_core_combobox">
                   <item>
@@ -71,13 +71,13 @@
        </widget>
      </item>
      <item>
-      <widget class="QGroupBox" name="groupBox_4">
+      <widget class="QGroupBox" name="EmulationGroupBox">
        <property name="title">
         <string>Emulation</string>
        </property>
-        <layout class="QHBoxLayout" name="horizontalLayout_8">
+        <layout class="QHBoxLayout" name="EmulationHorizontalLayout">
           <item>
-            <layout class="QVBoxLayout" name="verticalLayout_6">
+            <layout class="QVBoxLayout" name="EmulationVerticalLayout">
               <item>
                 <widget class="QCheckBox" name="is_docked">
                   <property name="text">
@@ -91,13 +91,13 @@
       </widget>
      </item>
      <item>
-      <widget class="QGroupBox" name="groupBox_3">
+      <widget class="QGroupBox" name="HotKeysGroupBox">
        <property name="title">
         <string>Hotkeys</string>
        </property>
-       <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <layout class="QHBoxLayout" name="HotKeysHorizontalLayout">
         <item>
-         <layout class="QVBoxLayout" name="verticalLayout_4">
+         <layout class="QVBoxLayout" name="HotKeysVerticalLayout">
           <item>
            <widget class="GHotkeysDialog" name="widget" native="true"/>
           </item>

From 5ecf152c8ee1bb6f8f050d16dda56c1b115e0ff3 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 22:59:18 -0400
Subject: [PATCH 4/6] config: Rename is_docked to use_docked_mode to be
 consistent with other config bools.

---
 src/core/hle/service/am/am.cpp               | 10 +++++-----
 src/core/settings.h                          |  2 +-
 src/yuzu/configuration/config.cpp            |  4 ++--
 src/yuzu/configuration/configure_general.cpp |  6 +++---
 src/yuzu/configuration/configure_general.ui  |  2 +-
 src/yuzu_cmd/config.cpp                      |  2 +-
 src/yuzu_cmd/default_ini.h                   |  2 +-
 7 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 07522e730c..bab338205b 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -242,20 +242,20 @@ void ICommonStateGetter::GetCurrentFocusState(Kernel::HLERequestContext& ctx) {
 }
 
 void ICommonStateGetter::GetOperationMode(Kernel::HLERequestContext& ctx) {
-    const bool is_docked{Settings::values.is_docked};
+    const bool use_docked_mode{Settings::values.use_docked_mode};
     IPC::ResponseBuilder rb{ctx, 3};
     rb.Push(RESULT_SUCCESS);
-    rb.Push(static_cast<u8>(is_docked ? OperationMode::Docked : OperationMode::Handheld));
+    rb.Push(static_cast<u8>(use_docked_mode ? OperationMode::Docked : OperationMode::Handheld));
 
     LOG_WARNING(Service_AM, "(STUBBED) called");
 }
 
 void ICommonStateGetter::GetPerformanceMode(Kernel::HLERequestContext& ctx) {
-    const bool is_docked{Settings::values.is_docked};
+    const bool use_docked_mode{Settings::values.use_docked_mode};
     IPC::ResponseBuilder rb{ctx, 3};
     rb.Push(RESULT_SUCCESS);
-    rb.Push(static_cast<u32>(is_docked ? APM::PerformanceMode::Docked
-                                       : APM::PerformanceMode::Handheld));
+    rb.Push(static_cast<u32>(use_docked_mode ? APM::PerformanceMode::Docked
+                                             : APM::PerformanceMode::Handheld));
 
     LOG_WARNING(Service_AM, "(STUBBED) called");
 }
diff --git a/src/core/settings.h b/src/core/settings.h
index 002d25dbd8..eaef472362 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -112,7 +112,7 @@ enum class CpuCore {
 
 struct Values {
     // System
-    bool is_docked;
+    bool use_docked_mode;
 
     // Controls
     std::array<std::string, NativeButton::NumButtons> buttons;
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 5842bebee7..70035f3883 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -95,7 +95,7 @@ void Config::ReadValues() {
     qt_config->endGroup();
 
     qt_config->beginGroup("System");
-    Settings::values.is_docked = qt_config->value("is_docked", true).toBool();
+    Settings::values.use_docked_mode = qt_config->value("use_docked_mode", true).toBool();
     qt_config->endGroup();
 
     qt_config->beginGroup("Miscellaneous");
@@ -193,7 +193,7 @@ void Config::SaveValues() {
     qt_config->endGroup();
 
     qt_config->beginGroup("System");
-    qt_config->setValue("is_docked", Settings::values.is_docked);
+    qt_config->setValue("use_docked_mode", Settings::values.use_docked_mode);
     qt_config->endGroup();
 
     qt_config->beginGroup("Miscellaneous");
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index e811610353..3ddb2f4b1a 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -16,7 +16,7 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)
     this->setConfiguration();
 
     ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn());
-    ui->is_docked->setEnabled(!Core::System::GetInstance().IsPoweredOn());
+    ui->use_docked_mode->setEnabled(!Core::System::GetInstance().IsPoweredOn());
 }
 
 ConfigureGeneral::~ConfigureGeneral() {}
@@ -25,7 +25,7 @@ void ConfigureGeneral::setConfiguration() {
     ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan);
     ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing);
     ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core));
-    ui->is_docked->setChecked(Settings::values.is_docked);
+    ui->use_docked_mode->setChecked(Settings::values.use_docked_mode);
 }
 
 void ConfigureGeneral::applyConfiguration() {
@@ -33,6 +33,6 @@ void ConfigureGeneral::applyConfiguration() {
     UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
     Settings::values.cpu_core =
         static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex());
-    Settings::values.is_docked = ui->is_docked->isChecked();
+    Settings::values.use_docked_mode = ui->use_docked_mode->isChecked();
     Settings::Apply();
 }
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui
index b0684f0c11..717b1b4749 100644
--- a/src/yuzu/configuration/configure_general.ui
+++ b/src/yuzu/configuration/configure_general.ui
@@ -79,7 +79,7 @@
           <item>
             <layout class="QVBoxLayout" name="EmulationVerticalLayout">
               <item>
-                <widget class="QCheckBox" name="is_docked">
+                <widget class="QCheckBox" name="use_docked_mode">
                   <property name="text">
                     <string>Enable docked mode</string>
                   </property>
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index 38f76d425b..b09e9fc0b6 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -108,7 +108,7 @@ void Config::ReadValues() {
         sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true);
 
     // System
-    Settings::values.is_docked = sdl2_config->GetBoolean("System", "is_docked", true);
+    Settings::values.use_docked_mode = sdl2_config->GetBoolean("System", "use_docked_mode", true);
 
     // Miscellaneous
     Settings::values.log_filter = sdl2_config->Get("Miscellaneous", "log_filter", "*:Trace");
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h
index 50802104c0..c42aba6a4c 100644
--- a/src/yuzu_cmd/default_ini.h
+++ b/src/yuzu_cmd/default_ini.h
@@ -156,7 +156,7 @@ use_virtual_sd =
 [System]
 # Whether the system is docked
 # 1 (default): Yes, 0: No
-is_docked =
+use_docked_mode =
 
 # The system region that Citra will use during emulation
 # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan

From 94f4009c3be4c7f69eda8af1cb0139dccd5bffa5 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 23:01:40 -0400
Subject: [PATCH 5/6] config: Use simplified checkbox (from Citra) for CPU JIT.

---
 src/core/core.cpp                            | 10 ++---
 src/core/settings.h                          |  2 +-
 src/core/telemetry_session.cpp               |  5 ++-
 src/yuzu/configuration/config.cpp            |  5 +--
 src/yuzu/configuration/configure_general.cpp |  7 ++--
 src/yuzu/configuration/configure_general.ui  | 41 ++++++++------------
 src/yuzu_cmd/config.cpp                      |  3 +-
 src/yuzu_cmd/default_ini.h                   |  6 +--
 8 files changed, 33 insertions(+), 46 deletions(-)

diff --git a/src/core/core.cpp b/src/core/core.cpp
index d55621de86..11654d4da7 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -148,19 +148,15 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
 
     current_process = Kernel::Process::Create("main");
 
-    switch (Settings::values.cpu_core) {
-    case Settings::CpuCore::Unicorn:
-        cpu_core = std::make_shared<ARM_Unicorn>();
-        break;
-    case Settings::CpuCore::Dynarmic:
-    default:
+    if (Settings::values.use_cpu_jit) {
 #ifdef ARCHITECTURE_x86_64
         cpu_core = std::make_shared<ARM_Dynarmic>();
 #else
         cpu_core = std::make_shared<ARM_Unicorn>();
         LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
 #endif
-        break;
+    } else {
+        cpu_core = std::make_shared<ARM_Unicorn>();
     }
 
     gpu_core = std::make_unique<Tegra::GPU>();
diff --git a/src/core/settings.h b/src/core/settings.h
index eaef472362..fc2b8dae4a 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -121,7 +121,7 @@ struct Values {
     std::string touch_device;
 
     // Core
-    CpuCore cpu_core;
+    bool use_cpu_jit;
 
     // Data Storage
     bool use_virtual_sd;
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index bea05a09b0..b3ffcd443b 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -154,12 +154,13 @@ TelemetrySession::TelemetrySession() {
 #endif
 
     // Log user configuration information
-    AddField(Telemetry::FieldType::UserConfig, "Core_CpuCore",
-             static_cast<int>(Settings::values.cpu_core));
+    AddField(Telemetry::FieldType::UserConfig, "Core_UseCpuJit", Settings::values.use_cpu_jit);
     AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor",
              Settings::values.resolution_factor);
     AddField(Telemetry::FieldType::UserConfig, "Renderer_ToggleFramelimit",
              Settings::values.toggle_framelimit);
+    AddField(Telemetry::FieldType::UserConfig, "System_UseDockedMode",
+             Settings::values.use_docked_mode);
 }
 
 TelemetrySession::~TelemetrySession() {
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 70035f3883..4b4216eecc 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -77,8 +77,7 @@ void Config::ReadValues() {
     qt_config->endGroup();
 
     qt_config->beginGroup("Core");
-    Settings::values.cpu_core =
-        static_cast<Settings::CpuCore>(qt_config->value("cpu_core", 1).toInt());
+    Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool();
     qt_config->endGroup();
 
     qt_config->beginGroup("Renderer");
@@ -175,7 +174,7 @@ void Config::SaveValues() {
     qt_config->endGroup();
 
     qt_config->beginGroup("Core");
-    qt_config->setValue("cpu_core", static_cast<int>(Settings::values.cpu_core));
+    qt_config->setValue("use_cpu_jit", Settings::values.use_cpu_jit);
     qt_config->endGroup();
 
     qt_config->beginGroup("Renderer");
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 3ddb2f4b1a..616a67f9fb 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -15,7 +15,7 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)
 
     this->setConfiguration();
 
-    ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn());
+    ui->use_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn());
     ui->use_docked_mode->setEnabled(!Core::System::GetInstance().IsPoweredOn());
 }
 
@@ -24,15 +24,14 @@ ConfigureGeneral::~ConfigureGeneral() {}
 void ConfigureGeneral::setConfiguration() {
     ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan);
     ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing);
-    ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core));
+    ui->use_cpu_jit->setChecked(Settings::values.use_cpu_jit);
     ui->use_docked_mode->setChecked(Settings::values.use_docked_mode);
 }
 
 void ConfigureGeneral::applyConfiguration() {
     UISettings::values.gamedir_deepscan = ui->toggle_deepscan->isChecked();
     UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
-    Settings::values.cpu_core =
-        static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex());
+    Settings::values.use_cpu_jit = ui->use_cpu_jit->isChecked();
     Settings::values.use_docked_mode = ui->use_docked_mode->isChecked();
     Settings::Apply();
 }
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui
index 717b1b4749..5ff68f0799 100644
--- a/src/yuzu/configuration/configure_general.ui
+++ b/src/yuzu/configuration/configure_general.ui
@@ -44,31 +44,24 @@
       </widget>
      </item>
      <item>
-       <widget class="QGroupBox" name="CpuCoreGroupBox">
-         <property name="title">
-           <string>CPU Core</string>
-         </property>
-         <layout class="QHBoxLayout" name="CpuCoreHorizontalLayout">
-           <item>
-             <layout class="QVBoxLayout" name="CpuCoreVerticalLayout">
-               <item>
-                 <widget class="QComboBox" name="cpu_core_combobox">
-                  <item>
-                   <property name="text">
-                    <string>Unicorn</string>
-                   </property>
-                  </item>
-                  <item>
-                   <property name="text">
-                    <string>Dynarmic</string>
-                   </property>
-                  </item>
-                 </widget>
-               </item>
-             </layout>
-           </item>
+      <widget class="QGroupBox" name="PerformanceGroupBox">
+       <property name="title">
+        <string>Performance</string>
+       </property>
+       <layout class="QHBoxLayout" name="PerformanceHorizontalLayout">
+        <item>
+         <layout class="QVBoxLayout" name="PerformanceVerticalLayout">
+          <item>
+           <widget class="QCheckBox" name="use_cpu_jit">
+            <property name="text">
+             <string>Enable CPU JIT</string>
+            </property>
+           </widget>
+          </item>
          </layout>
-       </widget>
+        </item>
+       </layout>
+      </widget>
      </item>
      <item>
       <widget class="QGroupBox" name="EmulationGroupBox">
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index b09e9fc0b6..8b479bc6d5 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -90,8 +90,7 @@ void Config::ReadValues() {
         sdl2_config->Get("Controls", "touch_device", "engine:emu_window");
 
     // Core
-    Settings::values.cpu_core =
-        static_cast<Settings::CpuCore>(sdl2_config->GetInteger("Core", "cpu_core", 1));
+    Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true);
 
     // Renderer
     Settings::values.resolution_factor =
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h
index c42aba6a4c..cf157bf272 100644
--- a/src/yuzu_cmd/default_ini.h
+++ b/src/yuzu_cmd/default_ini.h
@@ -76,9 +76,9 @@ motion_device=
 touch_device=
 
 [Core]
-# Which CPU core to use for CPU emulation
-# 0: Unicorn (slow), 1 (default): Dynarmic (faster)
-cpu_core =
+# Whether to use the Just-In-Time (JIT) compiler for CPU emulation
+# 0: Interpreter (slow), 1 (default): JIT (fast)
+use_cpu_jit =
 
 [Renderer]
 # Whether to use software or hardware rendering.

From 212a6ab937b05014784187782219a60600573503 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Mon, 26 Mar 2018 23:14:44 -0400
Subject: [PATCH 6/6] settings: Remove unused CpuCore class.

---
 src/core/settings.h | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/core/settings.h b/src/core/settings.h
index fc2b8dae4a..2c94caab7c 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -105,11 +105,6 @@ static const std::array<const char*, NumAnalogs> mapping = {{
 }};
 } // namespace NativeAnalog
 
-enum class CpuCore {
-    Unicorn,
-    Dynarmic,
-};
-
 struct Values {
     // System
     bool use_docked_mode;