[FFmpeg-devel] [PATCH] avutil: [LA] use getauxval to do runtime check.
Shiyou Yin
yinshiyou-hf at loongson.cn
Tue Feb 14 14:25:56 EET 2023
Replace cpucfg with getauxval to avoid crash in case of
some processor capabilities are not supportted by kernel used.
---
libavutil/loongarch/cpu.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/libavutil/loongarch/cpu.c b/libavutil/loongarch/cpu.c
index e4b240bc44..cad8504fde 100644
--- a/libavutil/loongarch/cpu.c
+++ b/libavutil/loongarch/cpu.c
@@ -21,26 +21,18 @@
#include <stdint.h>
#include "cpu.h"
+#include <sys/auxv.h>
-#define LOONGARCH_CFG2 0x2
-#define LOONGARCH_CFG2_LSX (1 << 6)
-#define LOONGARCH_CFG2_LASX (1 << 7)
-
-static int cpu_flags_cpucfg(void)
+#define LA_HWCAP_LSX (1<<4)
+#define LA_HWCAP_LASX (1<<5)
+static int cpu_flags_getauxval(void)
{
int flags = 0;
- uint32_t cfg2 = 0;
-
- __asm__ volatile(
- "cpucfg %0, %1 \n\t"
- : "+&r"(cfg2)
- : "r"(LOONGARCH_CFG2)
- );
+ int flag = (int)getauxval(AT_HWCAP);
- if (cfg2 & LOONGARCH_CFG2_LSX)
+ if (flag & LA_HWCAP_LSX)
flags |= AV_CPU_FLAG_LSX;
-
- if (cfg2 & LOONGARCH_CFG2_LASX)
+ if (flag & LA_HWCAP_LASX)
flags |= AV_CPU_FLAG_LASX;
return flags;
@@ -49,7 +41,7 @@ static int cpu_flags_cpucfg(void)
int ff_get_cpu_flags_loongarch(void)
{
#if defined __linux__
- return cpu_flags_cpucfg();
+ return cpu_flags_getauxval();
#else
/* Assume no SIMD ASE supported */
return 0;
--
2.20.1
More information about the ffmpeg-devel
mailing list