about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2025-10-22 20:41:30 +0800
committerGitHub <noreply@github.com>2025-10-22 14:41:30 +0200
commit66e8828345f4523403a3e3b3c80f82a0aa4d8409 (patch)
tree8c2816c492d8d045c91ceb9cf23fecb4776b16c3 /src
parent0850dec01fa66a067e7753f9181fc13c4593a389 (diff)
downloadbox64-66e8828345f4523403a3e3b3c80f82a0aa4d8409.tar.gz
box64-66e8828345f4523403a3e3b3c80f82a0aa4d8409.zip
[ENV] Introduced BOX64_PCLMULQDQ (#3086)
* [ENV] Introduced BOX64_PCLMULQDQ

* review
Diffstat (limited to 'src')
-rw-r--r--src/include/env.h1
-rw-r--r--src/os/my_cpuid_common.c4
-rw-r--r--src/tools/env.c1
-rw-r--r--src/wrapped/wrappedlibc.c4
4 files changed, 7 insertions, 3 deletions
diff --git a/src/include/env.h b/src/include/env.h
index ac3be9a4..7c5dbcea 100644
--- a/src/include/env.h
+++ b/src/include/env.h
@@ -103,6 +103,7 @@ extern char* ftrace_name;
     BOOLEAN(BOX64_NOSIGILL, nosigill, 0, 0)                                   \
     BOOLEAN(BOX64_NOVULKAN, novulkan, 0, 0)                                   \
     STRING(BOX64_PATH, path, 0)                                               \
+    BOOLEAN(BOX64_PCLMULQDQ, pclmulqdq, 1, 0)                                 \
     BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0, 0)                     \
     BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0, 0)                       \
     STRING(BOX64_RCFILE, envfile, 0)                                          \
diff --git a/src/os/my_cpuid_common.c b/src/os/my_cpuid_common.c
index 3df5aa03..fa96bb54 100644
--- a/src/os/my_cpuid_common.c
+++ b/src/os/my_cpuid_common.c
@@ -105,7 +105,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                     | (BOX64ENV(cputype)?0:1)<<28     // HT / Multi-core
                     ;
             R_ECX =   1<<0      // SSE3
-                    | 1<<1      // PCLMULQDQ
+                    | BOX64ENV(pclmulqdq)<<1      // PCLMULQDQ
                     | (BOX64ENV(cputype)?0:1)<<2      // DS 64bits
                     | 1<<3      // Monitor/MWait (priviledge instructions)
                     | (BOX64ENV(cputype)?0:1)<<5      // VMX  //is that usefull
@@ -210,7 +210,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                         0;
                 R_RCX =
                         BOX64ENV(avx)<<9   | //VAES
-                        BOX64ENV(avx2)<<10 | //VPCLMULQDQ.
+                        (BOX64ENV(avx2)&&BOX64ENV(pclmulqdq))<<10 | //VPCLMULQDQ.
                         1<<22 | // RDPID
                         0;
                 R_RDX = 0;
diff --git a/src/tools/env.c b/src/tools/env.c
index 4e41ed74..9df07500 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -883,6 +883,7 @@ typedef struct DynaCacheHeader_s {
     DS_GO(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1)\
     DS_GO(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 2)            \
     DS_GO(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 2)                \
+    DS_GO(BOX64_PCLMULQDQ, pclmulqdq, 1)                                \
     DS_GO(BOX64_SHAEXT, shaext, 1)                                      \
     DS_GO(BOX64_SSE42, sse42, 1)                                        \
     DS_GO(BOX64_AVX, avx, 2)                                            \
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 51e255e7..bf7120ac 100644
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -1790,8 +1790,10 @@ 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 "\
+        sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fxsr cpuid"\
+                      "%s cx16 aes movbe pni "\
                       "sse4_1%s%s%s lzcnt popcnt%s%s%s%s%s%s%s%s%s\n",
+                      BOX64ENV(pclmulqdq)?" pclmulqdq":"",
                       BOX64ENV(sse42)?" sse4_2":"", BOX64ENV(avx)?" avx":"", BOX64ENV(shaext)?"sha_ni":"",
                       BOX64ENV(avx)?" bmi1":"", BOX64ENV(avx2)?" avx2":"", BOX64ENV(avx)?" bmi2":"",
                       BOX64ENV(avx2)?" vaes":"", BOX64ENV(avx2)?" fma":"",