about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-06-13 10:22:33 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-06-13 10:22:33 +0200
commit58c0bce4cf549dab1440bc60315f8b30407ca0f1 (patch)
tree201a1ea7589448c75696fefa584c83cecd48436f /src/tools
parent3a82dc6aad852c9e655e04b801ec67d17e8441c6 (diff)
downloadbox64-58c0bce4cf549dab1440bc60315f8b30407ca0f1.tar.gz
box64-58c0bce4cf549dab1440bc60315f8b30407ca0f1.zip
More work on RDTSC emulation
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/my_cpuid.c7
-rw-r--r--src/tools/rcfile.c4
2 files changed, 11 insertions, 0 deletions
diff --git a/src/tools/my_cpuid.c b/src/tools/my_cpuid.c
index 06d810aa..00859cc8 100644
--- a/src/tools/my_cpuid.c
+++ b/src/tools/my_cpuid.c
@@ -468,3 +468,10 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
             R_EDX = 0;
     }   
 }
+
+uint32_t helper_getcpu(x64emu_t* emu) {
+    uint32_t cpu, node;
+    if(!getcpu(&cpu, &node))
+        return (node&0xff)<<12 | (cpu&0xff);
+    return 0;
+}
\ No newline at end of file
diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c
index 2b45dd06..cd1316f4 100644
--- a/src/tools/rcfile.c
+++ b/src/tools/rcfile.c
@@ -99,6 +99,7 @@ ENTRYBOOL(BOX64_CRASHHANDLER, box64_dummy_crashhandler) \
 ENTRYBOOL(BOX64_NOPULSE, box64_nopulse)                 \
 ENTRYBOOL(BOX64_NOGTK, box64_nogtk)                     \
 ENTRYBOOL(BOX64_NOVULKAN, box64_novulkan)               \
+ENTRYBOOL(BOX64_RDTSC_1GHZ, box64_rdtsc_1ghz)           \
 ENTRYBOOL(BOX64_SSE42, box64_sse42)                     \
 ENTRYINT(BOX64_AVX, new_avx, 0, 2, 2)                   \
 ENTRYBOOL(BOX64_FUTEX_WAITV, box64_futex_waitv)         \
@@ -489,6 +490,7 @@ extern char* ftrace_name;
 void openFTrace(const char* newtrace);
 void addNewEnvVar(const char* s);
 void AddNewLibs(const char* libs);
+void computeRDTSC();
 #ifdef DYNAREC
 void GatherDynarecExtensions();
 #endif
@@ -568,6 +570,8 @@ void ApplyParams(const char* name)
             box64_avx = 1; box64_avx2 = 1;
         }
     }
+    if(param->is_box64_rdtsc_1ghz_present)
+        computeRDTSC();
     #ifdef DYNAREC
     if(param->is_box64_dynarec_jvm_present && !param->is_box64_jvm_present)
         box64_jvm = box64_dynarec_jvm;