about summary refs log tree commit diff stats
path: root/src
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
parent55ee7fcc33808df63793c7bda384abcdc1c4bf4c (diff)
downloadbox64-0d755e610b5a7cf782c261d14687146c90ae4ee3.tar.gz
box64-0d755e610b5a7cf782c261d14687146c90ae4ee3.zip
More avx infrastructure
Diffstat (limited to 'src')
-rw-r--r--src/core.c8
-rw-r--r--src/include/debug.h1
-rw-r--r--src/tools/my_cpuid.c1
-rw-r--r--src/tools/rcfile.c15
-rw-r--r--src/wrapped/wrappedlibc.c2
5 files changed, 24 insertions, 3 deletions
diff --git a/src/core.c b/src/core.c
index 928a056d..6d103995 100644
--- a/src/core.c
+++ b/src/core.c
@@ -150,6 +150,7 @@ int box64_x87_no80bits = 0;
 int box64_sync_rounding = 0;
 int box64_sse42 = 1;
 int box64_avx = 0;
+int box64_avx2 = 0;
 int fix_64bit_inodes = 0;
 int box64_dummy_crashhandler = 1;
 int box64_mapclean = 0;
@@ -996,11 +997,16 @@ void LoadLogEnv()
     p = getenv("BOX64_AVX");
     if(p) {
         if(strlen(p)==1) {
-            if(p[0]>='0' && p[0]<='0'+1)
+            if(p[0]>='0' && p[0]<='0'+2)
                 box64_avx = p[0]-'0';
         }
         if(box64_avx)
             printf_log(LOG_INFO, "Will expose AVX capabilities\n");
+        if(box64_avx==2) {
+            box64_avx=1;
+            box64_avx2 = 1;
+            printf_log(LOG_INFO, "Will expose AVX2 capabilities\n");
+        }
     }
     p = getenv("BOX64_FIX_64BIT_INODES");
     if(p) {
diff --git a/src/include/debug.h b/src/include/debug.h
index 5932f10a..be48b59e 100644
--- a/src/include/debug.h
+++ b/src/include/debug.h
@@ -94,6 +94,7 @@ extern int box64_x87_no80bits;
 extern int box64_sync_rounding;
 extern int box64_sse42;
 extern int box64_avx;
+extern int box64_avx2;
 extern int allow_missing_libs;
 extern int box64_mapclean;
 extern int box64_prefer_wrapped;
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;
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index f9dc8e2f..51d7557f 100644
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -1639,7 +1639,7 @@ void CreateCPUInfoFile(int fd)
         P;
         sprintf(buff, "bogomips\t: %g\n", getBogoMips());
         P;
-        sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fxsr cpuid pclmulqdq cx16 aes movbe pni sse4_1%s%s lzcnt popcnt\n", box64_sse42?" sse4_2":"", box64_avx?" avx":"");
+        sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fxsr cpuid pclmulqdq cx16 aes movbe pni sse4_1%s%s lzcnt popcnt%s\n", box64_sse42?" sse4_2":"", box64_avx?" avx":"", box64_avx2?" avx2":"");
         P;
         sprintf(buff, "address sizes\t: 48 bits physical, 48 bits virtual\n");
         P;