Commit b09f31af authored by Shiyou Yin's avatar Shiyou Yin Committed by Steven Liu

avutil: [LA] use getauxval to do runtime check.

Replace cpucfg with getauxval to avoid crash in case of
some processor capabilities are not supportted by kernel used.
Reviewed-by: 's avatarSteven Liu <liuqi05@kuaishou.com>
parent ac6eec1f
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment