@@ -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,24 +60,78 @@ case "${CPU}" in
57
60
58
61
riscv64)
59
62
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]
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]
72
68
)
73
- if test "x$rvv" = "xyes"; then
74
- CFLAGS+=" -march=rv64gcv"
75
- CCASFLAGS+=" -march=rv64gcv"
69
+ if test "x$hwprobe_h" = "xyes"; then
70
+ AC_MSG_CHECKING ( [ ZBC support] )
71
+ AC_COMPILE_IFELSE (
72
+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
73
+ int a = RISCV_HWPROBE_EXT_ZBC;
74
+ __asm__ volatile(
75
+ ".option arch, +zbc\n"
76
+ "clmul zero, zero, zero\n"
77
+ "clmulh zero, zero, zero\n"
78
+ );
79
+ ] ) ] ,
80
+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 1] , [ Enable ZBC instructions] )
81
+ AM_CONDITIONAL([ HAVE_ZBC] , [ true] ) zbc=yes] ,
82
+ [ AC_DEFINE ( [ HAVE_ZBC] , [ 0] , [ Disable ZBC instructions] )
83
+ AM_CONDITIONAL([ HAVE_ZBC] , [ false] ) zbc=no]
84
+ )
85
+ AC_MSG_RESULT ( [ $zbc] )
86
+ AC_MSG_CHECKING ( [ ZVBC support] )
87
+ AC_COMPILE_IFELSE (
88
+ [ AC_LANG_PROGRAM ( [ #include <asm/hwprobe.h>] , [
89
+ int a = RISCV_HWPROBE_EXT_ZVBC;
90
+ __asm__ volatile(
91
+ ".option arch, +v, +zvbc\n"
92
+ "vsetivli zero, 2, e64, m1, ta, ma\n"
93
+ "vclmul.vv v0, v0, v0\n"
94
+ "vclmulh.vv v0, v0, v0\n"
95
+ );
96
+ ] ) ] ,
97
+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 1] , [ Enable ZVBC instructions] )
98
+ AM_CONDITIONAL([ HAVE_ZVBC] , [ true] ) zvbc=yes] ,
99
+ [ AC_DEFINE ( [ HAVE_ZVBC] , [ 0] , [ Disable ZVBC instructions] )
100
+ AM_CONDITIONAL([ HAVE_ZVBC] , [ false] ) zvbc=no]
101
+ )
102
+ AC_MSG_RESULT ( [ $zvbc] )
76
103
fi
104
+ AC_MSG_CHECKING ( [ RVV support] )
105
+ AS_IF ( [ test "x$zvbc" = "xno"] ,
106
+ [
107
+ AC_COMPILE_IFELSE (
108
+ [ AC_LANG_PROGRAM ( [ ] , [
109
+ __asm__ volatile(
110
+ ".option arch, +v\n"
111
+ "vsetivli zero, 0, e8, m1, ta, ma\n"
112
+ );
113
+ ] ) ] ,
114
+ [ AC_DEFINE ( [ HAVE_RVV] , [ 1] , [ Enable RVV instructions] )
115
+ AM_CONDITIONAL([ HAVE_RVV] , [ true] ) rvv=yes] ,
116
+ [ AC_DEFINE ( [ HAVE_RVV] , [ 0] , [ Disable RVV instructions] )
117
+ AM_CONDITIONAL([ HAVE_RVV] , [ false] ) rvv=no]
118
+ )
119
+ ] ,
120
+ [ AC_DEFINE ( [ HAVE_RVV] , [ 1] , [ Enable RVV instructions] )
121
+ AM_CONDITIONAL([ HAVE_RVV] , [ true] ) rvv=yes]
122
+ )
77
123
AC_MSG_RESULT ( [ $rvv] )
124
+ AS_IF ( [ test "x$zvbc" = "xyes" && test "x$zbc" = "xyes"] ,
125
+ [
126
+ CFLAGS="$CFLAGS -march=rv64gcv_zbc_zvbc"
127
+ CCASFLAGS="$CCASFLAGS -march=rv64gcv_zbc_zvbc"
128
+ ] ,
129
+ [ test "x$rvv" = "xyes"] ,
130
+ [
131
+ CFLAGS="$CFLAGS -march=rv64gcv"
132
+ CCASFLAGS="$CCASFLAGS -march=rv64gcv"
133
+ ]
134
+ )
78
135
;;
79
136
80
137
*)
@@ -239,4 +296,4 @@ AC_MSG_RESULT([
239
296
ldflags: ${LDFLAGS}
240
297
241
298
debug: ${enable_debug}
242
- ] )
299
+ ] )
0 commit comments