@@ -38,6 +38,10 @@ AM_CONDITIONAL([CPU_PPC64LE], [test "$CPU" = "ppc64le"])
3838AM_CONDITIONAL([ CPU_RISCV64] , [ test "$CPU" = "riscv64"] )
3939AM_CONDITIONAL([ CPU_UNDEFINED] , [ test "x$CPU" = "x"] )
4040AM_CONDITIONAL([ HAVE_RVV] , [ false] )
41+ AM_CONDITIONAL([ HAVE_ZBC] , [ false] )
42+ AM_CONDITIONAL([ HAVE_ZBB] , [ false] )
43+ AM_CONDITIONAL([ HAVE_ZVBC] , [ false] )
44+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ false] )
4145
4246# Check for programs
4347AC_PROG_CC_STDC
@@ -57,24 +61,93 @@ case "${CPU}" in
5761
5862 riscv64)
5963
60- AC_MSG_CHECKING ( [ checking RVV support] )
61- AC_COMPILE_IFELSE (
62- [ AC_LANG_PROGRAM ( [ ] , [
63- __asm__ volatile(
64- ".option arch, +v\n"
65- "vsetivli zero, 0, e8, m1, ta, ma\n"
66- );
67- ] ) ] ,
68- [ AC_DEFINE ( [ HAVE_RVV] , [ 1] , [ Enable RVV instructions] )
69- AM_CONDITIONAL([ HAVE_RVV] , [ true] ) rvv=yes] ,
70- [ AC_DEFINE ( [ HAVE_RVV] , [ 0] , [ Disable RVV instructions] )
71- AM_CONDITIONAL([ HAVE_RVV] , [ false] ) rvv=no]
64+ AC_CHECK_HEADER ( [ asm/hwprobe.h] ,
65+ [ AC_DEFINE ( [ HAVE_HWPROBE_H] , [ 1] , [ Define if asm/hwprobe.h exists] )
66+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ true] ) hwprobe_h=yes] ,
67+ [ AC_DEFINE ( [ HAVE_HWPROBE_H] , [ 0] , [ Define if asm/hwprobe.h not exists] )
68+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ false] ) hwprobe_h=no]
7269 )
73- if test "x$rvv" = "xyes"; then
74- CFLAGS+=" -march=rv64gcv"
75- CCASFLAGS+=" -march=rv64gcv"
70+ if test "x$hwprobe_h" = "xyes"; then
71+ AC_MSG_CHECKING ( [ ZBC support] )
72+ AC_COMPILE_IFELSE (
73+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
74+ int a = RISCV_HWPROBE_EXT_ZBC;
75+ __asm__ volatile(
76+ ".option arch, +zbc\n"
77+ "clmul zero, zero, zero\n"
78+ "clmulh zero, zero, zero\n"
79+ );
80+ ] ) ] ,
81+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 1] , [ Enable ZBC instructions] )
82+ AM_CONDITIONAL([ HAVE_ZBC] , [ true] ) zbc=yes] ,
83+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 0] , [ Disable ZBC instructions] )
84+ AM_CONDITIONAL([ HAVE_ZBC] , [ false] ) zbc=no]
85+ )
86+ AC_MSG_RESULT ( [ $zbc] )
87+ AC_MSG_CHECKING ( [ ZBB support] )
88+ AC_COMPILE_IFELSE (
89+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
90+ int a = RISCV_HWPROBE_EXT_ZBC;
91+ __asm__ volatile(
92+ ".option arch, +zbb\n"
93+ "rev8 zero, zero\n"
94+ );
95+ ] ) ] ,
96+ [ AC_DEFINE ( [ HAVE_ZBB] , [ 1] , [ Enable ZBB instructions] )
97+ AM_CONDITIONAL([ HAVE_ZBB] , [ true] ) zbb=yes] ,
98+ [ AC_DEFINE ( [ HAVE_ZBB] , [ 0] , [ Disable ZBB instructions] )
99+ AM_CONDITIONAL([ HAVE_ZBB] , [ false] ) zbb=no]
100+ )
101+ AC_MSG_RESULT ( [ $zbb] )
102+ AC_MSG_CHECKING ( [ ZVBC support] )
103+ AC_COMPILE_IFELSE (
104+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
105+ int a = RISCV_HWPROBE_EXT_ZVBC;
106+ __asm__ volatile(
107+ ".option arch, +v, +zvbc\n"
108+ "vsetivli zero, 2, e64, m1, ta, ma\n"
109+ "vclmul.vv v0, v0, v0\n"
110+ "vclmulh.vv v0, v0, v0\n"
111+ );
112+ ] ) ] ,
113+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 1] , [ Enable ZVBC instructions] )
114+ AM_CONDITIONAL([ HAVE_ZVBC] , [ true] ) zvbc=yes] ,
115+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 0] , [ Disable ZVBC instructions] )
116+ AM_CONDITIONAL([ HAVE_ZVBC] , [ false] ) zvbc=no]
117+ )
118+ AC_MSG_RESULT ( [ $zvbc] )
76119 fi
120+ AC_MSG_CHECKING ( [ RVV support] )
121+ AS_IF ( [ test "x$zvbc" = "xno"] ,
122+ [
123+ AC_COMPILE_IFELSE (
124+ [ AC_LANG_PROGRAM ( [ ] , [
125+ __asm__ volatile(
126+ ".option arch, +v\n"
127+ "vsetivli zero, 0, e8, m1, ta, ma\n"
128+ );
129+ ] ) ] ,
130+ [ AC_DEFINE ( [ HAVE_RVV] , [ 1] , [ Enable RVV instructions] )
131+ AM_CONDITIONAL([ HAVE_RVV] , [ true] ) rvv=yes] ,
132+ [ AC_DEFINE ( [ HAVE_RVV] , [ 0] , [ Disable RVV instructions] )
133+ AM_CONDITIONAL([ HAVE_RVV] , [ false] ) rvv=no]
134+ )
135+ ] ,
136+ [ AC_DEFINE ( [ HAVE_RVV] , [ 1] , [ Enable RVV instructions] )
137+ AM_CONDITIONAL([ HAVE_RVV] , [ true] ) rvv=yes]
138+ )
77139 AC_MSG_RESULT ( [ $rvv] )
140+ AS_IF ( [ test "x$zvbc" = "xyes" && test "x$zbc" = "xyes" && test "x$zbb" = "xyes"] ,
141+ [
142+ CFLAGS="$CFLAGS -march=rv64gcv_zbc_zbb_zvbc"
143+ CCASFLAGS="$CCASFLAGS -march=rv64gcv_zbc_zbb_zvbc"
144+ ] ,
145+ [ test "x$rvv" = "xyes"] ,
146+ [
147+ CFLAGS="$CFLAGS -march=rv64gcv"
148+ CCASFLAGS="$CCASFLAGS -march=rv64gcv"
149+ ]
150+ )
78151 ;;
79152
80153 *)
0 commit comments