22 #if defined __linux__ || defined __ANDROID__ 31 #if defined __linux__ || defined __ANDROID__ 33 #define HWCAP_LOONGSON_CPUCFG (1 << 14) 35 static int cpucfg_available(
void)
37 return getauxval(AT_HWCAP) & HWCAP_LOONGSON_CPUCFG;
41 static uint32_t read_cpucfg(uint32_t reg)
46 "parse_r __res,%0\n\t" 49 ".word (0xc8080118 | (reg << 21) | (__res << 11))\n\t" 57 #define LOONGSON_CFG1 0x1 59 #define LOONGSON_CFG1_MMI (1 << 4) 60 #define LOONGSON_CFG1_MSA1 (1 << 5) 62 static int cpu_flags_cpucfg(
void)
65 uint32_t cfg1 = read_cpucfg(LOONGSON_CFG1);
67 if (cfg1 & LOONGSON_CFG1_MMI)
70 if (cfg1 & LOONGSON_CFG1_MSA1)
76 static int cpu_flags_cpuinfo(
void)
78 FILE *
f = fopen(
"/proc/cpuinfo",
"r");
85 while (fgets(buf,
sizeof(buf), f)) {
88 if (strstr(buf,
"Loongson-3 "))
93 if (strstr(buf,
" loongson-mmi"))
95 if (strstr(buf,
" msa"))
108 #if defined __linux__ || defined __ANDROID__ 109 if (cpucfg_available())
110 return cpu_flags_cpucfg();
112 return cpu_flags_cpuinfo();
MIPS assembly defines from sys/asm.h but rewritten for use with C inline assembly (rather than from w...
size_t ff_get_cpu_max_align_mips(void)
int ff_get_cpu_flags_mips(void)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
#define flags(name, subs,...)
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
__asm__(".macro parse_r var r\n\t""\\var = -1\n\t"_IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31)".iflt \\var\n\t"".error \"Unable to parse register name \\r\"\n\t"".endif\n\t"".endm")