about summary refs log tree commit diff stats
path: root/src/os/hostext_common.c
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-06-16 20:05:38 +0800
committerGitHub <noreply@github.com>2025-06-16 14:05:38 +0200
commitae0c91dce0671c176321fc72bfa69f1731d4aa2e (patch)
treeb9f65e3e7c2966c74f2bb4a89ae873484bd80ba4 /src/os/hostext_common.c
parentab6deeb319cf4389f0cfd555c8aa922300065ee6 (diff)
downloadbox64-ae0c91dce0671c176321fc72bfa69f1731d4aa2e.tar.gz
box64-ae0c91dce0671c176321fc72bfa69f1731d4aa2e.zip
[WOW64] Refactored host extention detection and added preliminary support for WowBox64 (#2752)
Diffstat (limited to 'src/os/hostext_common.c')
-rw-r--r--src/os/hostext_common.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/os/hostext_common.c b/src/os/hostext_common.c
new file mode 100644
index 00000000..258e1af4
--- /dev/null
+++ b/src/os/hostext_common.c
@@ -0,0 +1,64 @@
+#include "debug.h"
+
+void PrintHostCpuFeatures(void)
+{
+#ifdef ARM64
+    printf_log(LOG_INFO, "Dynarec for ARM64, with extension: ASIMD");
+    if(cpuext.aes)
+        printf_log_prefix(0, LOG_INFO, " AES");
+    if(cpuext.crc32)
+        printf_log_prefix(0, LOG_INFO, " CRC32");
+    if(cpuext.pmull)
+        printf_log_prefix(0, LOG_INFO, " PMULL");
+    if(cpuext.atomics)
+        printf_log_prefix(0, LOG_INFO, " ATOMICS");
+    if(cpuext.sha1)
+        printf_log_prefix(0, LOG_INFO, " SHA1");
+    if(cpuext.sha2)
+        printf_log_prefix(0, LOG_INFO, " SHA2");
+    if(cpuext.uscat)
+        printf_log_prefix(0, LOG_INFO, " USCAT");
+    if(cpuext.flagm)
+        printf_log_prefix(0, LOG_INFO, " FLAGM");
+    if(cpuext.flagm2)
+        printf_log_prefix(0, LOG_INFO, " FLAGM2");
+    if(cpuext.frintts)
+        printf_log_prefix(0, LOG_INFO, " FRINT");
+    if(cpuext.afp)
+        printf_log_prefix(0, LOG_INFO, " AFP");
+    if(cpuext.rndr)
+        printf_log_prefix(0, LOG_INFO, " RNDR");
+    printf_log_prefix(0, LOG_INFO, "\n");
+#elif defined(LA64)
+    printf_log(LOG_INFO, "Dynarec for LoongArch with extension LSX LASX");
+    if (cpuext.lbt)
+        printf_log_prefix(0, LOG_INFO, " LBT_X86");
+    if (cpuext.lam_bh)
+        printf_log_prefix(0, LOG_INFO, " LAM_BH");
+    if (cpuext.lamcas)
+        printf_log_prefix(0, LOG_INFO, " LAMCAS");
+    if (cpuext.scq)
+        printf_log_prefix(0, LOG_INFO, " SCQ");
+    printf_log_prefix(0, LOG_INFO, "\n");
+#elif defined(RV64)
+    printf_log(LOG_INFO, "Dynarec for rv64g");
+    if (cpuext.vector && !cpuext.xtheadvector) printf_log_prefix(0, LOG_INFO, "v");
+    if (cpuext.zba) printf_log_prefix(0, LOG_INFO, "_zba");
+    if (cpuext.zbb) printf_log_prefix(0, LOG_INFO, "_zbb");
+    if (cpuext.zbc) printf_log_prefix(0, LOG_INFO, "_zbc");
+    if (cpuext.zbs) printf_log_prefix(0, LOG_INFO, "_zbs");
+    if (cpuext.vector && !cpuext.xtheadvector) printf_log_prefix(0, LOG_INFO, "_zvl%d", cpuext.vlen * 8);
+    if (cpuext.xtheadba) printf_log_prefix(0, LOG_INFO, "_xtheadba");
+    if (cpuext.xtheadbb) printf_log_prefix(0, LOG_INFO, "_xtheadbb");
+    if (cpuext.xtheadbs) printf_log_prefix(0, LOG_INFO, "_xtheadbs");
+    if (cpuext.xtheadmempair) printf_log_prefix(0, LOG_INFO, "_xtheadmempair");
+    if (cpuext.xtheadcondmov) printf_log_prefix(0, LOG_INFO, "_xtheadcondmov");
+    if (cpuext.xtheadmemidx) printf_log_prefix(0, LOG_INFO, "_xtheadmemidx");
+    // Disable the display since these are only detected but never used.
+    // if(cpuext.xtheadfmemidx) printf_log_prefix(0, LOG_INFO, " xtheadfmemidx");
+    // if(cpuext.xtheadmac) printf_log_prefix(0, LOG_INFO, " xtheadmac");
+    // if(cpuext.xtheadfmv) printf_log_prefix(0, LOG_INFO, " xtheadfmv");
+    if (cpuext.xtheadvector) printf_log_prefix(0, LOG_INFO, "_xthvector");
+    printf_log_prefix(0, LOG_INFO, "\n");
+#endif
+}
\ No newline at end of file