Skip to content

Commit 8806866

Browse files
committed
Add RISC-V vector spec v1.0 support
1 parent 7188a4c commit 8806866

30 files changed

+751
-8
lines changed

Makefile.am

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ GENERIC_SIMD256_LIBS = dft/simd/generic-simd256/libdft_generic_simd256_codelets.
104104
rdft/simd/generic-simd256/librdft_generic_simd256_codelets.la
105105
endif
106106

107+
if HAVE_RVV
108+
RVV_LIBS = dft/simd/rvv128/libdft_rvv128_codelets.la \
109+
rdft/simd/rvv128/librdft_rvv128_codelets.la \
110+
dft/simd/rvv256/libdft_rvv256_codelets.la \
111+
rdft/simd/rvv256/librdft_rvv256_codelets.la \
112+
dft/simd/rvv512/libdft_rvv512_codelets.la \
113+
rdft/simd/rvv512/librdft_rvv512_codelets.la \
114+
dft/simd/rvv1024/libdft_rvv1024_codelets.la \
115+
rdft/simd/rvv1024/librdft_rvv1024_codelets.la
116+
endif
117+
107118
if THREADS
108119
if COMBINED_THREADS
109120
COMBINED_THREADLIBS=threads/libfftw3@PREC_SUFFIX@_threads.la
@@ -127,7 +138,7 @@ libfftw3@PREC_SUFFIX@_la_LIBADD = \
127138
$(SIMD_LIBS) $(SSE2_LIBS) $(AVX_LIBS) $(AVX_128_FMA_LIBS) \
128139
$(AVX2_LIBS) $(ALTIVEC_LIBS) \
129140
$(VSX_LIBS) $(NEON_LIBS) $(KCVI_LIBS) $(AVX512_LIBS) \
130-
$(GENERIC_SIMD128_LIBS) $(GENERIC_SIMD256_LIBS) \
141+
$(GENERIC_SIMD128_LIBS) $(GENERIC_SIMD256_LIBS) $(RVV_LIBS) \
131142
$(COMBINED_THREADLIBS)
132143

133144
if QUAD

api/version.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,8 @@ const char X(version)[] = PACKAGE "-" PACKAGE_VERSION
8585
"-generic_simd256"
8686
#endif
8787

88+
#if defined(HAVE_R5V)
89+
"-rvv"
90+
#endif
91+
8892
;

cmake.config.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,9 @@
202202
/* Define to enable ARM NEON optimizations. */
203203
/* #undef HAVE_NEON */
204204

205+
/* Define to enable RISC-V Vector optimizations. */
206+
/* #undef HAVE_RVV */
207+
205208
/* Define if OpenMP is enabled */
206209
#cmakedefine HAVE_OPENMP
207210

configure.ac

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,12 @@ if test "$have_generic_simd256" = "yes"; then
235235
fi
236236
AM_CONDITIONAL(HAVE_GENERIC_SIMD256, test "$have_generic_simd256" = "yes")
237237

238+
AC_ARG_ENABLE(rvv, [AC_HELP_STRING([--enable-rvv],[enable RISC-V V optimizations])], have_rvv=$enableval, have_rvv=no)
239+
if test "$have_rvv" = "yes"; then
240+
AC_DEFINE(HAVE_RVV,1,[Define to enable RISC-V V optimizations.])
241+
fi
242+
AM_CONDITIONAL(HAVE_RVV, test "$have_rvv" = "yes")
243+
238244

239245
dnl FIXME:
240246
dnl AC_ARG_ENABLE(mips-ps, [AC_HELP_STRING([--enable-mips-ps],[enable MIPS pair-single optimizations])], have_mips_ps=$enableval, have_mips_ps=no)
@@ -770,6 +776,10 @@ AC_CONFIG_FILES([
770776
dft/simd/neon/Makefile
771777
dft/simd/generic-simd128/Makefile
772778
dft/simd/generic-simd256/Makefile
779+
dft/simd/rvv128/Makefile
780+
dft/simd/rvv256/Makefile
781+
dft/simd/rvv512/Makefile
782+
dft/simd/rvv1024/Makefile
773783
774784
rdft/Makefile
775785
rdft/scalar/Makefile
@@ -790,6 +800,10 @@ AC_CONFIG_FILES([
790800
rdft/simd/neon/Makefile
791801
rdft/simd/generic-simd128/Makefile
792802
rdft/simd/generic-simd256/Makefile
803+
rdft/simd/rvv128/Makefile
804+
rdft/simd/rvv256/Makefile
805+
rdft/simd/rvv512/Makefile
806+
rdft/simd/rvv1024/Makefile
793807
794808
reodft/Makefile
795809

dft/codelet-dft.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,9 @@ extern const solvtab X(solvtab_dft_vsx);
108108
extern const solvtab X(solvtab_dft_neon);
109109
extern const solvtab X(solvtab_dft_generic_simd128);
110110
extern const solvtab X(solvtab_dft_generic_simd256);
111+
extern const solvtab X(solvtab_dft_rvv128);
112+
extern const solvtab X(solvtab_dft_rvv256);
113+
extern const solvtab X(solvtab_dft_rvv512);
114+
extern const solvtab X(solvtab_dft_rvv1024);
111115

112116
#endif /* __DFT_CODELET_H__ */

dft/conf.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,15 @@ void X(dft_conf_standard)(planner *p)
8585
#if HAVE_GENERIC_SIMD256
8686
X(solvtab_exec)(X(solvtab_dft_generic_simd256), p);
8787
#endif
88+
89+
#if HAVE_RVV
90+
if (X(have_simd_rvv)(128))
91+
X(solvtab_exec)(X(solvtab_dft_rvv128), p);
92+
if (X(have_simd_rvv)(256))
93+
X(solvtab_exec)(X(solvtab_dft_rvv256), p);
94+
if (X(have_simd_rvv)(512))
95+
X(solvtab_exec)(X(solvtab_dft_rvv512), p);
96+
if (X(have_simd_rvv)(1024))
97+
X(solvtab_exec)(X(solvtab_dft_rvv1024), p);
98+
#endif
8899
}

dft/simd/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
AM_CPPFLAGS = -I $(top_srcdir)
2-
SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon generic-simd128 generic-simd256
2+
SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon generic-simd128 generic-simd256 rvv128 rvv256 rvv512 rvv1024
33
EXTRA_DIST = n1b.h n1f.h n2b.h n2f.h n2s.h q1b.h q1f.h t1b.h t1bu.h \
44
t1f.h t1fu.h t2b.h t2f.h t3b.h t3f.h ts.h codlist.mk simd.mk

dft/simd/rvv1024/Makefile.am

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SIMD_HEADER=simd-support/simd-rvv1024.h
2+
3+
include $(top_srcdir)/dft/simd/codlist.mk
4+
include $(top_srcdir)/dft/simd/simd.mk
5+
6+
if HAVE_RVV
7+
8+
BUILT_SOURCES = $(EXTRA_DIST)
9+
noinst_LTLIBRARIES = libdft_rvv1024_codelets.la
10+
libdft_rvv1024_codelets_la_SOURCES = $(BUILT_SOURCES)
11+
12+
endif

dft/simd/rvv128/Makefile.am

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SIMD_HEADER=simd-support/simd-rvv128.h
2+
3+
include $(top_srcdir)/dft/simd/codlist.mk
4+
include $(top_srcdir)/dft/simd/simd.mk
5+
6+
if HAVE_RVV
7+
8+
BUILT_SOURCES = $(EXTRA_DIST)
9+
noinst_LTLIBRARIES = libdft_rvv128_codelets.la
10+
libdft_rvv128_codelets_la_SOURCES = $(BUILT_SOURCES)
11+
12+
endif

dft/simd/rvv256/Makefile.am

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SIMD_HEADER=simd-support/simd-rvv256.h
2+
3+
include $(top_srcdir)/dft/simd/codlist.mk
4+
include $(top_srcdir)/dft/simd/simd.mk
5+
6+
if HAVE_RVV
7+
8+
BUILT_SOURCES = $(EXTRA_DIST)
9+
noinst_LTLIBRARIES = libdft_rvv256_codelets.la
10+
libdft_rvv256_codelets_la_SOURCES = $(BUILT_SOURCES)
11+
12+
endif

0 commit comments

Comments
 (0)