aboutsummaryrefslogtreecommitdiff
path: root/src/libui_sdl/DlgEmuSettings.cpp
diff options
context:
space:
mode:
authorRSDuck <rsduck@users.noreply.github.com>2019-10-03 01:10:59 +0200
committerRSDuck <rsduck@users.noreply.github.com>2020-04-26 13:05:03 +0200
commita687be9879e5cab4ea5d8646c8cf47c214b18856 (patch)
treeb6ebff986ec77445df3196035669235f4c77c762 /src/libui_sdl/DlgEmuSettings.cpp
parent5338c28f408382263077b24bce5d5ab62bdf7024 (diff)
new block cache and much more...
- more reliable code invalidation detection - blocks aren't stopped at any branch, but are being followed if possible to get larger blocks - idle loop recognition - optimised literal loads, load/store cycle counting and loads/stores from constant addresses
Diffstat (limited to 'src/libui_sdl/DlgEmuSettings.cpp')
-rw-r--r--src/libui_sdl/DlgEmuSettings.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/libui_sdl/DlgEmuSettings.cpp b/src/libui_sdl/DlgEmuSettings.cpp
index 09ea8eb..45e8e0c 100644
--- a/src/libui_sdl/DlgEmuSettings.cpp
+++ b/src/libui_sdl/DlgEmuSettings.cpp
@@ -42,6 +42,7 @@ uiCheckbox* cbDirectBoot;
#ifdef JIT_ENABLED
uiCheckbox* cbJITEnabled;
uiEntry* enJITMaxBlockSize;
+uiCheckbox* cbJITBranchOptimisations;
#endif
int OnCloseWindow(uiWindow* window, void* blarg)
@@ -64,13 +65,15 @@ void OnOk(uiButton* btn, void* blarg)
bool enableJit = uiCheckboxChecked(cbJITEnabled);
char* maxBlockSizeStr = uiEntryText(enJITMaxBlockSize);
long blockSize = strtol(maxBlockSizeStr, NULL, 10);
+ bool branchOptimisations = uiCheckboxChecked(cbJITBranchOptimisations);
uiFreeText(maxBlockSizeStr);
if (blockSize < 1)
blockSize = 1;
if (blockSize > 32)
blockSize = 32;
- if (enableJit != Config::JIT_Enable || blockSize != Config::JIT_MaxBlockSize)
+ if (enableJit != Config::JIT_Enable || blockSize != Config::JIT_MaxBlockSize ||
+ branchOptimisations != Config::JIT_BrancheOptimisations)
{
if (RunningSomething &&
!uiMsgBoxConfirm(win, "Reset emulator",
@@ -79,6 +82,7 @@ void OnOk(uiButton* btn, void* blarg)
Config::JIT_Enable = enableJit;
Config::JIT_MaxBlockSize = blockSize;
+ Config::JIT_BrancheOptimisations = uiCheckboxChecked(cbJITBranchOptimisations);
restart = true;
}
@@ -101,9 +105,15 @@ void OnOk(uiButton* btn, void* blarg)
void OnJITStateChanged(uiCheckbox* cb, void* blarg)
{
if (uiCheckboxChecked(cb))
+ {
uiControlEnable(uiControl(enJITMaxBlockSize));
+ uiControlEnable(uiControl(cbJITBranchOptimisations));
+ }
else
+ {
uiControlDisable(uiControl(enJITMaxBlockSize));
+ uiControlDisable(uiControl(cbJITBranchOptimisations));
+ }
}
#endif
@@ -159,6 +169,14 @@ void Open()
enJITMaxBlockSize = uiNewEntry();
uiBoxAppend(row, uiControl(enJITMaxBlockSize), 0);
}
+
+ {
+ uiBox* row = uiNewHorizontalBox();
+ uiBoxAppend(in_ctrl, uiControl(row), 0);
+
+ cbJITBranchOptimisations = uiNewCheckbox("Branch optimisations (breaks in rare cases games!)");
+ uiBoxAppend(row, uiControl(cbJITBranchOptimisations), 0);
+ }
}
#endif
@@ -194,6 +212,8 @@ void Open()
uiEntrySetText(enJITMaxBlockSize, maxBlockSizeStr);
}
OnJITStateChanged(cbJITEnabled, NULL);
+
+ uiCheckboxSetChecked(cbJITBranchOptimisations, Config::JIT_BrancheOptimisations);
#endif
uiControlShow(uiControl(win));