diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-27 12:21:57 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-27 12:21:57 +0200 |
| commit | 0d755e610b5a7cf782c261d14687146c90ae4ee3 (patch) | |
| tree | 13dbc799d99c364b66ceb9889c5cda6d178321c0 /src | |
| parent | 55ee7fcc33808df63793c7bda384abcdc1c4bf4c (diff) | |
| download | box64-0d755e610b5a7cf782c261d14687146c90ae4ee3.tar.gz box64-0d755e610b5a7cf782c261d14687146c90ae4ee3.zip | |
More avx infrastructure
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.c | 8 | ||||
| -rw-r--r-- | src/include/debug.h | 1 | ||||
| -rw-r--r-- | src/tools/my_cpuid.c | 1 | ||||
| -rw-r--r-- | src/tools/rcfile.c | 15 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 2 |
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; |