diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rv64detect.c | 109 |
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 |