lavu/riscv: add ff_rv_vlen_least()

This inline function checks that the vector length is at least a given
value. With this, most run-time VLEN checks can be optimised away.
This commit is contained in:
Rémi Denis-Courmont 2024-05-10 19:37:01 +03:00
parent 38e7b0ecf8
commit 247c5b2b97
1 changed files with 21 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#define AVUTIL_RISCV_CPU_H #define AVUTIL_RISCV_CPU_H
#include "config.h" #include "config.h"
#include <stdbool.h>
#include <stddef.h> #include <stddef.h>
#include "libavutil/cpu.h" #include "libavutil/cpu.h"
@ -42,4 +43,24 @@ static inline size_t ff_get_rv_vlenb(void)
return vlenb; return vlenb;
} }
#endif #endif
/**
* Checks that the vector bit-size is at least the given value.
* This is potentially undefined behaviour if vectors are not implemented.
*/
static inline bool ff_rv_vlen_least(unsigned int bits)
{
#ifdef __riscv_v_min_vlen
if (bits <= __riscv_min_vlen)
return true;
#else
/*
* Vector lengths smaller than 128 bits are only possible in embedded cases
* and cannot be run-time detected, so we can assume 128 bits at least.
*/
if (bits <= 128)
return true;
#endif
return bits <= (8 * ff_get_rv_vlenb());
}
#endif #endif