about summary refs log tree commit diff stats
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
parent0850dec01fa66a067e7753f9181fc13c4593a389 (diff)
downloadbox64-66e8828345f4523403a3e3b3c80f82a0aa4d8409.tar.gz
box64-66e8828345f4523403a3e3b3c80f82a0aa4d8409.zip
[ENV] Introduced BOX64_PCLMULQDQ (#3086)
* [ENV] Introduced BOX64_PCLMULQDQ

* review
-rw-r--r--docs/USAGE.md7
-rw-r--r--docs/box64.pod8
-rw-r--r--docs/gen/usage.json18
-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
7 files changed, 40 insertions, 3 deletions
diff --git a/docs/USAGE.md b/docs/USAGE.md
index 4efd7b71..e59c65b5 100644
--- a/docs/USAGE.md
+++ b/docs/USAGE.md
@@ -399,6 +399,13 @@ Path to look for x86_64 binaries.
 
  * XXXX: Add path XXXX to the binary path. 
 
+### BOX64_PCLMULQDQ
+
+Expose PCLMULQDQ capabilities.
+
+ * 0: Do not expose PCLMULQDQ capabilities. 
+ * 1: Expose PCLMULQDQ capabilities. [Default]
+
 ### BOX64_RCFILE
 
 Path to the rc file to load.
diff --git a/docs/box64.pod b/docs/box64.pod
index 42ce1ee5..2b0461fa 100644
--- a/docs/box64.pod
+++ b/docs/box64.pod
@@ -662,6 +662,14 @@ Path to look for x86_64 binaries.
  * XXXX : Add path XXXX to the binary path. 
 
 
+=item B<BOX64_PCLMULQDQ> =I<0|1>
+
+Expose PCLMULQDQ capabilities.
+
+ * 0 : Do not expose PCLMULQDQ capabilities. 
+ * 1 : Expose PCLMULQDQ capabilities. [Default]
+
+
 =item B<BOX64_PREFER_EMULATED> =I<0|1>
 
 Prefer emulated libraries over native ones.
diff --git a/docs/gen/usage.json b/docs/gen/usage.json
index dfd65aea..523fc8f6 100644
--- a/docs/gen/usage.json
+++ b/docs/gen/usage.json
@@ -1437,6 +1437,24 @@
     ]
   },
   {
+    "name": "BOX64_PCLMULQDQ",
+    "description": "Expose PCLMULQDQ capabilities.",
+    "category": "Compatibility",
+    "wine": false,
+    "options": [
+      {
+        "key": "0",
+        "description": "Do not expose PCLMULQDQ capabilities.",
+        "default": false
+      },
+      {
+        "key": "1",
+        "description": "Expose PCLMULQDQ capabilities.",
+        "default": true
+      }
+    ]
+  },
+  {
     "name": "BOX64_PREFER_EMULATED",
     "description": "Prefer emulated libraries over native ones.",
     "category": "Libraries",
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":"",