about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rv64detect.c109
1 files changed, 55 insertions, 54 deletions
diff --git a/src/rv64detect.c b/src/rv64detect.c
index e1b3b40a..9c7a37cf 100644
--- a/src/rv64detect.c
+++ b/src/rv64detect.c
@@ -69,60 +69,61 @@ void RV64_Detect_Function()
     rv64_zbs = Check(my_block);
 
     // THead vendor extensions
-
-    // Test XTheadBa with TH_ADDSL
-    block = (uint32_t*)my_block;
-    TH_ADDSL(A0, A0, A1, 1);
-    BR(xRA);
-    rv64_xtheadba = Check(my_block);
-
-    // Test XTheadBb with TH_SRRI
-    block = (uint32_t*)my_block;
-    TH_SRRI(A0, A1, 1);
-    BR(xRA);
-    rv64_xtheadbb = Check(my_block);
-
-    // Test XTheadBs with TH_TST
-    block = (uint32_t*)my_block;
-    TH_TST(A0, A1, 1);
-    BR(xRA);
-    rv64_xtheadbs = Check(my_block);
-
-    // Test XTheadCondMov with TH_MVEQZ
-    block = (uint32_t*)my_block;
-    TH_MVEQZ(A0, A0, A1);
-    BR(xRA);
-    rv64_xtheadcondmov = Check(my_block);
-
-    // Test XTheadMemIdx with TH_LBIA
-    block = (uint32_t*)my_block;
-    TH_LBIA(A0, A2, 1, 1);
-    BR(xRA);
-    rv64_xtheadmemidx = Check(my_block);
-
-    // Test XTheadMemPair with TH_LDD
-    block = (uint32_t*)my_block;
-    TH_LDD(A0, A1, A2, 0);
-    BR(xRA);
-    rv64_xtheadmempair = Check(my_block);
-
-    // Test XTheadFMemIdx with TH_FLRD
-    block = (uint32_t*)my_block;
-    TH_FLRD(A0, A2, xZR, 0);
-    BR(xRA);
-    rv64_xtheadfmemidx = Check(my_block);
-
-    // Test XTheadMac with TH_MULA
-    block = (uint32_t*)my_block;
-    TH_MULA(A0, A0, A1);
-    BR(xRA);
-    rv64_xtheadmac = Check(my_block);
-
-    // Test XTheadFmv with TH_FMV_X_HW
-    block = (uint32_t*)my_block;
-    TH_FMV_X_HW(A0, A1);
-    BR(xRA);
-    rv64_xtheadfmv = Check(my_block);
+    if (!rv64_zba) {
+        // Test XTheadBa with TH_ADDSL
+        block = (uint32_t*)my_block;
+        TH_ADDSL(A0, A0, A1, 1);
+        BR(xRA);
+        rv64_xtheadba = Check(my_block);
+
+        // Test XTheadBb with TH_SRRI
+        block = (uint32_t*)my_block;
+        TH_SRRI(A0, A1, 1);
+        BR(xRA);
+        rv64_xtheadbb = Check(my_block);
+
+        // Test XTheadBs with TH_TST
+        block = (uint32_t*)my_block;
+        TH_TST(A0, A1, 1);
+        BR(xRA);
+        rv64_xtheadbs = Check(my_block);
+
+        // Test XTheadCondMov with TH_MVEQZ
+        block = (uint32_t*)my_block;
+        TH_MVEQZ(A0, A0, A1);
+        BR(xRA);
+        rv64_xtheadcondmov = Check(my_block);
+
+        // Test XTheadMemIdx with TH_LBIA
+        block = (uint32_t*)my_block;
+        TH_LBIA(A0, A2, 1, 1);
+        BR(xRA);
+        rv64_xtheadmemidx = Check(my_block);
+
+        // Test XTheadMemPair with TH_LDD
+        block = (uint32_t*)my_block;
+        TH_LDD(A0, A1, A2, 0);
+        BR(xRA);
+        rv64_xtheadmempair = Check(my_block);
+
+        // Test XTheadFMemIdx with TH_FLRD
+        block = (uint32_t*)my_block;
+        TH_FLRD(A0, A2, xZR, 0);
+        BR(xRA);
+        rv64_xtheadfmemidx = Check(my_block);
+
+        // Test XTheadMac with TH_MULA
+        block = (uint32_t*)my_block;
+        TH_MULA(A0, A0, A1);
+        BR(xRA);
+        rv64_xtheadmac = Check(my_block);
+
+        // Test XTheadFmv with TH_FMV_X_HW
+        block = (uint32_t*)my_block;
+        TH_FMV_X_HW(A0, A1);
+        BR(xRA);
+        rv64_xtheadfmv = Check(my_block);
+    }
 
     // Finish
     // Free the memory my_block