diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-05-21 21:35:48 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-21 15:35:48 +0200 |
| commit | 28b101aaf7fcb2136ce530d37849156a3ede2996 (patch) | |
| tree | 1e1e013120adc0ce9983ddcfa728de6b923adfcb | |
| parent | 24d1250e66996cddd4c813af55e7add860fa0e1b (diff) | |
| download | box64-28b101aaf7fcb2136ce530d37849156a3ede2996.tar.gz box64-28b101aaf7fcb2136ce530d37849156a3ede2996.zip | |
[RV64] Made Zba and Xthead* detection mutually exclusive (#1514)
| -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 |