[PATCH v3] RISC-V: add multiarch RVV support for memcpy using FMV IFUNC

daichengrong daichengrong@iscas.ac.cn
Tue Jan 21 09:20:35 GMT 2025


2025/1/21 7:56:52, Darius Rad :
> On Mon, Jan 20, 2025 at 11:26:47AM +0800, daichengrong@iscas.ac.cn wrote:
>> From: daichengrong <daichengrong@iscas.ac.cn>
>>
>> This patch introduces vector support for memcpy with IFUNC.
>> The implementation select the RVV optimized memcpy version via hwprobe on kernel with RVV enabled.
>>
> [...]
>
>> diff --git a/sysdeps/unix/sysv/linux/riscv/multiarch/memcpy.c b/sysdeps/unix/sysv/linux/riscv/multiarch/memcpy.c
>> index 8544f5402a..105c837101 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/multiarch/memcpy.c
>> +++ b/sysdeps/unix/sysv/linux/riscv/multiarch/memcpy.c
>> @@ -32,11 +32,16 @@ extern __typeof (__redirect_memcpy) __libc_memcpy;
>>   
>>   extern __typeof (__redirect_memcpy) __memcpy_generic attribute_hidden;
>>   extern __typeof (__redirect_memcpy) __memcpy_noalignment attribute_hidden;
>> +extern __typeof (__redirect_memcpy) __memcpy_vector attribute_hidden;
>>   
>>   static inline __typeof (__redirect_memcpy) *
>>   select_memcpy_ifunc (uint64_t dl_hwcap, __riscv_hwprobe_t hwprobe_func)
>>   {
>>     unsigned long long int v;
>> +  if (__riscv_hwprobe_one (hwprobe_func, RISCV_HWPROBE_KEY_IMA_EXT_0, &v) == 0
>> +      && (v & RISCV_HWPROBE_IMA_V) == RISCV_HWPROBE_IMA_V)
>> +    return __memcpy_vector;
>> +
> Availability of vector should probably be determined with dl_hwcap, rather
> than hwprobe_func, since vector may not be enabled (by prctl).
Thanks! The system user can choose whether to enable RVV support in task.
>
>>     if (__riscv_hwprobe_one (hwprobe_func, RISCV_HWPROBE_KEY_CPUPERF_0, &v) == 0
>>         && (v & RISCV_HWPROBE_MISALIGNED_MASK) == RISCV_HWPROBE_MISALIGNED_FAST)
>>       return __memcpy_noalignment;



More information about the Libc-alpha mailing list