@@ -38,6 +38,9 @@ AM_CONDITIONAL([CPU_PPC64LE], [test "$CPU" = "ppc64le"])
38
38
AM_CONDITIONAL([ CPU_RISCV64] , [ test "$CPU" = "riscv64"] )
39
39
AM_CONDITIONAL([ CPU_UNDEFINED] , [ test "x$CPU" = "x"] )
40
40
AM_CONDITIONAL([ HAVE_RVV] , [ false] )
41
+ AM_CONDITIONAL([ HAVE_ZBC] , [ false] )
42
+ AM_CONDITIONAL([ HAVE_ZVBC] , [ false] )
43
+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ false] )
41
44
42
45
# Check for programs
43
46
AC_PROG_CC_STDC
@@ -57,7 +60,13 @@ case "${CPU}" in
57
60
58
61
riscv64)
59
62
60
- AC_MSG_CHECKING ( [ checking RVV support] )
63
+ AC_CHECK_HEADER ( [ asm/hwprobe.h] ,
64
+ [ AC_DEFINE ( [ HAVE_HWPROBE_H] , [ 1] , [ Define if asm/hwprobe.h exists] )
65
+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ true] ) hwprobe_h=yes] ,
66
+ [ AC_DEFINE ( [ HAVE_HWPROBE_H] , [ 0] , [ Define if asm/hwprobe.h not exists] )
67
+ AM_CONDITIONAL([ HAVE_HWPROBE_H] , [ false] ) hwprobe_h=no]
68
+ )
69
+ AC_MSG_CHECKING ( [ RVV support] )
61
70
AC_COMPILE_IFELSE (
62
71
[ AC_LANG_PROGRAM ( [ ] , [
63
72
__asm__ volatile(
@@ -70,11 +79,53 @@ case "${CPU}" in
70
79
[ AC_DEFINE ( [ HAVE_RVV] , [ 0] , [ Disable RVV instructions] )
71
80
AM_CONDITIONAL([ HAVE_RVV] , [ false] ) rvv=no]
72
81
)
82
+ AC_MSG_RESULT ( [ $rvv] )
83
+ if test "x$hwprobe_h" = "xyes"; then
84
+ AC_MSG_CHECKING ( [ ZBC support] )
85
+ AC_COMPILE_IFELSE (
86
+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
87
+ int a = RISCV_HWPROBE_EXT_ZBC;
88
+ __asm__ volatile(
89
+ ".option arch, +zbc\n"
90
+ "clmul zero, zero, zero\n"
91
+ "clmulh zero, zero, zero\n"
92
+ );
93
+ ] ) ] ,
94
+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 1] , [ Enable ZBC instructions] )
95
+ AM_CONDITIONAL([ HAVE_ZBC] , [ true] ) zbc=yes] ,
96
+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 0] , [ Disable ZBC instructions] )
97
+ AM_CONDITIONAL([ HAVE_ZBC] , [ false] ) zbc=no]
98
+ )
99
+ AC_MSG_RESULT ( [ $zbc] )
100
+ AC_MSG_CHECKING ( [ ZVBC support] )
101
+ AC_COMPILE_IFELSE (
102
+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
103
+ int a = RISCV_HWPROBE_EXT_ZVBC;
104
+ __asm__ volatile(
105
+ ".option arch, +v, +zvbc\n"
106
+ "vsetivli zero, 2, e64, m1, ta, ma\n"
107
+ "vmv.s.x v0, zero\n"
108
+ "vclmul.vv v0, v0, v0\n"
109
+ "vclmulh.vv v0, v0, v0\n"
110
+ );
111
+ ] ) ] ,
112
+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 1] , [ Enable ZVBC instructions] )
113
+ AM_CONDITIONAL([ HAVE_ZVBC] , [ true] ) zvbc=yes] ,
114
+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 0] , [ Disable ZVBC instructions] )
115
+ AM_CONDITIONAL([ HAVE_ZVBC] , [ false] ) zvbc=no]
116
+ )
117
+ AC_MSG_RESULT ( [ $zvbc] )
118
+ fi
73
119
if test "x$rvv" = "xyes"; then
74
- CFLAGS+=" -march=rv64gcv"
75
- CCASFLAGS+=" -march=rv64gcv"
120
+ rvv_arch="rv64gcv"
121
+ AS_IF ( [ test "x$hwprobe_h" = "xyes"] ,
122
+ [ AS_IF ( [ test "x$zbc" = "xyes" && test "x$zvbc" = "xyes"] ,
123
+ [ rvv_arch="rv64gcv_zbc_zvbc"]
124
+ ) ]
125
+ )
126
+ CFLAGS+=" -march=$rvv_arch"
127
+ CCASFLAGS+=" -march=$rvv_arch"
76
128
fi
77
- AC_MSG_RESULT ( [ $rvv] )
78
129
;;
79
130
80
131
*)
@@ -239,4 +290,4 @@ AC_MSG_RESULT([
239
290
ldflags: ${LDFLAGS}
240
291
241
292
debug: ${enable_debug}
242
- ] )
293
+ ] )
0 commit comments