@@ -119,7 +119,8 @@ static struct {
119119 {NPY_CPU_FEATURE_ASIMDHP , "ASIMDHP" },
120120 {NPY_CPU_FEATURE_ASIMDDP , "ASIMDDP" },
121121 {NPY_CPU_FEATURE_ASIMDFHM , "ASIMDFHM" },
122- {NPY_CPU_FEATURE_SVE , "SVE" }};
122+ {NPY_CPU_FEATURE_SVE , "SVE" },
123+ {NPY_CPU_FEATURE_RVV , "RVV" }};
123124
124125
125126NPY_VISIBILITY_HIDDEN PyObject *
@@ -813,6 +814,28 @@ npy__cpu_init_features(void)
813814#endif
814815}
815816
817+ /************** RISC-V 64 ***************/
818+
819+ #elif defined(__riscv) && __riscv_xlen == 64
820+
821+ #include <sys/auxv.h>
822+
823+ #ifndef HWCAP_RVV
824+ // https://github.com/torvalds/linux/blob/v6.8/arch/riscv/include/uapi/asm/hwcap.h#L24
825+ #define COMPAT_HWCAP_ISA_V (1 << ('V' - 'A'))
826+ #endif
827+
828+ static void
829+ npy__cpu_init_features (void )
830+ {
831+ memset (npy__cpu_have , 0 , sizeof (npy__cpu_have [0 ]) * NPY_CPU_FEATURE_MAX );
832+
833+ unsigned int hwcap = getauxval (AT_HWCAP );
834+ if (hwcap & COMPAT_HWCAP_ISA_V ) {
835+ npy__cpu_have [NPY_CPU_FEATURE_RVV ] = 1 ;
836+ }
837+ }
838+
816839/*********** Unsupported ARCH ***********/
817840#else
818841static void
0 commit comments