add R-V V build check

Signed-off-by: sunyuechi <sunyuechi@iscas.ac.cn>
This commit is contained in:
sunyuechi
2025-02-27 12:19:09 +08:00
committed by Pablo de Lara
parent 027be4beb9
commit c0bd84c20e
4 changed files with 44 additions and 11 deletions

View File

@@ -39,16 +39,7 @@ AM_CONDITIONAL([CPU_AARCH64], [test "$CPU" = "aarch64"])
AM_CONDITIONAL([CPU_PPC64LE], [test "$CPU" = "ppc64le"])
AM_CONDITIONAL([CPU_RISCV64], [test "$CPU" = "riscv64"])
AM_CONDITIONAL([CPU_UNDEFINED], [test "x$CPU" = "x"])
if test "$CPU" = "x86_64"; then
is_x86=yes
else
if test "$CPU" = "x86_32"; then
is_x86=yes
else
is_x86=no
fi
fi
AM_CONDITIONAL([HAVE_RVV], [false])
# Check for programs
AC_PROG_CC_STDC
@@ -59,6 +50,40 @@ AC_PREFIX_DEFAULT([/usr])
AC_PROG_SED
AC_PROG_MKDIR_P
case "${CPU}" in
x86_64)
is_x86=yes
;;
x86_32)
is_x86=yes
;;
riscv64)
AC_MSG_CHECKING([checking RVV support])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [
__asm__ volatile(
".option arch, +v\n"
"vsetivli zero, 0, e8, m1, ta, ma\n"
);
])],
[AC_DEFINE([HAVE_RVV], [1], [Enable RVV instructions])
AM_CONDITIONAL([HAVE_RVV], [true]) rvv=yes],
[AM_CONDITIONAL([HAVE_RVV], [false]) rvv=no]
)
AC_MSG_RESULT([$rvv])
;;
*)
is_x86=no
esac
# Options
AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),

View File

@@ -26,6 +26,7 @@
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**********************************************************************/
#if HAVE_RVV
.option arch, +v
.global adler32_rvv
.type adler32_rvv, %function
@@ -74,3 +75,4 @@ adler32_rvv:
add a0, t2, t3 // a0 = A + B
ret
#endif

View File

@@ -29,7 +29,11 @@
#include "riscv64_multibinary.h"
mbin_interface isal_adler32
#if HAVE_RVV
mbin_interface isal_adler32
#else
mbin_interface_base isal_adler32, adler32_base
#endif
mbin_interface_base gen_icf_map_lh1, gen_icf_map_h1_base
mbin_interface_base decode_huffman_code_block_stateless, decode_huffman_code_block_stateless_base

View File

@@ -30,9 +30,11 @@
DEFINE_INTERFACE_DISPATCHER(isal_adler32)
{
#if HAVE_RVV
const unsigned long hwcap = getauxval(AT_HWCAP);
if (hwcap & HWCAP_RV('V'))
return PROVIDER_INFO(adler32_rvv);
else
#endif
return PROVIDER_BASIC(adler32);
}