about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-27 12:21:57 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-27 12:21:57 +0200
commit0d755e610b5a7cf782c261d14687146c90ae4ee3 (patch)
tree13dbc799d99c364b66ceb9889c5cda6d178321c0 /src/tools
parent55ee7fcc33808df63793c7bda384abcdc1c4bf4c (diff)
downloadbox64-0d755e610b5a7cf782c261d14687146c90ae4ee3.tar.gz
box64-0d755e610b5a7cf782c261d14687146c90ae4ee3.zip
More avx infrastructure
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/my_cpuid.c1
-rw-r--r--src/tools/rcfile.c15
2 files changed, 15 insertions, 1 deletions
diff --git a/src/tools/my_cpuid.c b/src/tools/my_cpuid.c
index d36e67d1..68f902e9 100644
--- a/src/tools/my_cpuid.c
+++ b/src/tools/my_cpuid.c
@@ -323,6 +323,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                 R_EAX = 0;
                 R_EBX = 
                         //1<<3 |  // BMI1 
+                        box64_avx2<<5 |  //AVX2
                         //1<<8 | //BMI2
                         1<<29|  // SHA extension
                         0;
diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c
index 4f99daec..2b45dd06 100644
--- a/src/tools/rcfile.c
+++ b/src/tools/rcfile.c
@@ -100,7 +100,7 @@ ENTRYBOOL(BOX64_NOPULSE, box64_nopulse)                 \
 ENTRYBOOL(BOX64_NOGTK, box64_nogtk)                     \
 ENTRYBOOL(BOX64_NOVULKAN, box64_novulkan)               \
 ENTRYBOOL(BOX64_SSE42, box64_sse42)                     \
-ENTRYBOOL(BOX64_AVX, box64_avx)                         \
+ENTRYINT(BOX64_AVX, new_avx, 0, 2, 2)                   \
 ENTRYBOOL(BOX64_FUTEX_WAITV, box64_futex_waitv)         \
 ENTRYSTRING_(BOX64_BASH, bash)                          \
 ENTRYINT(BOX64_JITGDB, jit_gdb, 0, 3, 2)                \
@@ -507,6 +507,7 @@ void ApplyParams(const char* name)
         return;
     int new_cycle_log = cycle_log;
     int new_maxcpu = box64_maxcpu;
+    int new_avx = box64_avx2?2:box64_avx;
     int box64_dynarec_jvm = box64_jvm;
     if(!strcmp(name, old_name)) {
         return;
@@ -555,6 +556,18 @@ void ApplyParams(const char* name)
         cycle_log = new_cycle_log;
         initCycleLog(my_context);
     }
+    if(param->is_new_avx_present) {
+        if(!new_avx) {
+            printf_log(LOG_INFO, "Hidding AVX extension");
+            box64_avx = 0; box64_avx2 = 0;
+        } else if(new_avx==1) {
+            printf_log(LOG_INFO, "Exposing AVX extension");
+            box64_avx = 1; box64_avx2 = 0;
+        } else if(new_avx==2) {
+            printf_log(LOG_INFO, "Exposing AVX/AVX2 extensions");
+            box64_avx = 1; box64_avx2 = 1;
+        }
+    }
     #ifdef DYNAREC
     if(param->is_box64_dynarec_jvm_present && !param->is_box64_jvm_present)
         box64_jvm = box64_dynarec_jvm;