@@ -176,37 +176,149 @@ endif()
176176# RISC-V
177177if (ARCH_ID STREQUAL "riscv64" )
178178 list (APPEND randomx_sources
179+ src/aes_hash_rv64_vector.cpp
180+ src/aes_hash_rv64_zvkned.cpp
179181 src/jit_compiler_rv64_static.S
180- src/jit_compiler_rv64.cpp)
182+ src/jit_compiler_rv64.cpp
183+ src/jit_compiler_rv64_vector.cpp
184+ src/jit_compiler_rv64_vector_static.S
185+ src/cpu_rv64.S)
186+
181187 # cheat because cmake and ccache hate each other
182188 set_property (SOURCE src/jit_compiler_rv64_static.S PROPERTY LANGUAGE C )
183- set_property (SOURCE src/jit_compiler_rv64_static.S PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.asm )
189+ set_property (SOURCE src/jit_compiler_rv64_vector_static.S PROPERTY LANGUAGE C )
190+ set_property (SOURCE src/cpu_rv64.S PROPERTY LANGUAGE C )
184191
185192 # default build uses the RV64GC baseline
186193 set (RVARCH "rv64gc" )
187194
188195 # for native builds, enable Zba and Zbb if supported by the CPU
189196 if (ARCH STREQUAL "native" )
190197 enable_language (ASM )
198+
199+ try_run (RANDOMX_VECTOR_RUN_FAIL
200+ RANDOMX_VECTOR_COMPILE_OK
201+ ${CMAKE_CURRENT_BINARY_DIR} /
202+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_vector.s
203+ COMPILE_DEFINITIONS "-march=rv64gcv" )
204+
205+ if (RANDOMX_VECTOR_COMPILE_OK AND NOT RANDOMX_VECTOR_RUN_FAIL)
206+ set (RVARCH_V ON )
207+ message (STATUS "RISC-V vector extension detected" )
208+ else ()
209+ set (RVARCH_V OFF )
210+ endif ()
211+
212+ try_run (RANDOMX_ZICBOP_RUN_FAIL
213+ RANDOMX_ZICBOP_COMPILE_OK
214+ ${CMAKE_CURRENT_BINARY_DIR} /
215+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zicbop.s
216+ COMPILE_DEFINITIONS "-march=rv64gc_zicbop" )
217+
218+ if (RANDOMX_ZICBOP_COMPILE_OK AND NOT RANDOMX_ZICBOP_RUN_FAIL)
219+ set (RVARCH_ZICBOP ON )
220+ message (STATUS "RISC-V zicbop extension detected" )
221+ else ()
222+ set (RVARCH_ZICBOP OFF )
223+ endif ()
224+
191225 try_run (RANDOMX_ZBA_RUN_FAIL
192226 RANDOMX_ZBA_COMPILE_OK
193227 ${CMAKE_CURRENT_BINARY_DIR} /
194228 ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zba.s
195229 COMPILE_DEFINITIONS "-march=rv64gc_zba" )
230+
196231 if (RANDOMX_ZBA_COMPILE_OK AND NOT RANDOMX_ZBA_RUN_FAIL)
197- set (RVARCH "${RVARCH} _zba" )
232+ set (RVARCH_ZBA ON )
233+ message (STATUS "RISC-V zba extension detected" )
234+ else ()
235+ set (RVARCH_ZBA OFF )
198236 endif ()
237+
199238 try_run (RANDOMX_ZBB_RUN_FAIL
200239 RANDOMX_ZBB_COMPILE_OK
201240 ${CMAKE_CURRENT_BINARY_DIR} /
202241 ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zbb.s
203242 COMPILE_DEFINITIONS "-march=rv64gc_zbb" )
243+
204244 if (RANDOMX_ZBB_COMPILE_OK AND NOT RANDOMX_ZBB_RUN_FAIL)
205- set (RVARCH "${RVARCH} _zbb" )
245+ set (RVARCH_ZBB ON )
246+ message (STATUS "RISC-V zbb extension detected" )
247+ else ()
248+ set (RVARCH_ZBB OFF )
249+ endif ()
250+
251+ try_run (RANDOMX_ZVKB_RUN_FAIL
252+ RANDOMX_ZVKB_COMPILE_OK
253+ ${CMAKE_CURRENT_BINARY_DIR} /
254+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zvkb.s
255+ COMPILE_DEFINITIONS "-march=rv64gcv_zvkb" )
256+
257+ if (RANDOMX_ZVKB_COMPILE_OK AND NOT RANDOMX_ZVKB_RUN_FAIL)
258+ set (RVARCH_ZVKB ON )
259+ message (STATUS "RISC-V zvkb extension detected" )
260+ else ()
261+ set (RVARCH_ZVKB OFF )
262+ endif ()
263+
264+ try_run (RANDOMX_ZVKNED_RUN_FAIL
265+ RANDOMX_ZVKNED_COMPILE_OK
266+ ${CMAKE_CURRENT_BINARY_DIR} /
267+ ${CMAKE_CURRENT_SOURCE_DIR} /src/tests/riscv64_zvkned.s
268+ COMPILE_DEFINITIONS "-march=rv64gcv_zvkned" )
269+
270+ if (RANDOMX_ZVKNED_COMPILE_OK AND NOT RANDOMX_ZVKNED_RUN_FAIL)
271+ set (RVARCH_ZVKNED ON )
272+ message (STATUS "RISC-V zvkned extension detected" )
273+ else ()
274+ set (RVARCH_ZVKNED OFF )
275+ endif ()
276+
277+ # for native builds, enable Zba and Zbb if supported by the CPU
278+ if (ARCH STREQUAL "native" )
279+ if (RVARCH_V)
280+ set (RVARCH "${RVARCH} v" )
281+ endif ()
282+ if (RVARCH_ZICBOP)
283+ set (RVARCH "${RVARCH} _zicbop" )
284+ endif ()
285+ if (RVARCH_ZBA)
286+ set (RVARCH "${RVARCH} _zba" )
287+ endif ()
288+ if (RVARCH_ZBB)
289+ set (RVARCH "${RVARCH} _zbb" )
290+ endif ()
291+ if (RVARCH_ZVKB)
292+ set (RVARCH "${RVARCH} _zvkb" )
293+ endif ()
294+ if (RVARCH_ZVKNED)
295+ set (RVARCH "${RVARCH} _zvkned" )
296+ endif ()
206297 endif ()
207298 endif ()
208299
209300 add_flag ("-march=${RVARCH} " )
301+
302+ set (RV64_VECTOR_FILE_ARCH "rv64gcv" )
303+
304+ if (ARCH STREQUAL "native" )
305+ if (RVARCH_ZICBOP)
306+ set (RV64_VECTOR_FILE_ARCH "${RV64_VECTOR_FILE_ARCH} _zicbop" )
307+ endif ()
308+ if (RVARCH_ZBA)
309+ set (RV64_VECTOR_FILE_ARCH "${RV64_VECTOR_FILE_ARCH} _zba" )
310+ endif ()
311+ if (RVARCH_ZBB)
312+ set (RV64_VECTOR_FILE_ARCH "${RV64_VECTOR_FILE_ARCH} _zbb" )
313+ endif ()
314+ if (RVARCH_ZVKB)
315+ set (RV64_VECTOR_FILE_ARCH "${RV64_VECTOR_FILE_ARCH} _zvkb" )
316+ endif ()
317+ endif ()
318+
319+ set_source_files_properties (src/jit_compiler_rv64_vector_static.S PROPERTIES COMPILE_FLAGS "-march=${RV64_VECTOR_FILE_ARCH} " )
320+ set_source_files_properties (src/aes_hash_rv64_vector.cpp PROPERTIES COMPILE_FLAGS "-O3 -march=${RV64_VECTOR_FILE_ARCH} " )
321+ set_source_files_properties (src/aes_hash_rv64_zvkned.cpp PROPERTIES COMPILE_FLAGS "-O3 -march=${RV64_VECTOR_FILE_ARCH} _zvkned" )
210322endif ()
211323
212324set (RANDOMX_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR} /src" CACHE STRING "RandomX Include path" )
0 commit comments