>-----Original Message----- >From: ffmpeg-devel-boun...@ffmpeg.org [mailto:ffmpeg-devel-boun...@ffmpeg.org] >On Behalf Of >Jiaxun Yang >Sent: Monday, June 8, 2020 11:32 AM >To: ffmpeg-devel@ffmpeg.org >Cc: yinshi...@loongson.cn; Jiaxun Yang >Subject: [FFmpeg-devel] [PATCH v4 3/4] libavutil: Detect MMI and MSA flags for >MIPS > >Add MMI & MSA runtime detection for MIPS. > >Basically there are two code pathes. For systems that >natively support CPUCFG instruction or kernel emulated >that instruction, we'll sense this feature from HWCAP and >report the flags according to values grab from CPUCFG. For >systems that have no CPUCFG (or not export it in HWCAP), >we'll parse /proc/cpuinfo instead. > >Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com> >--- >v2: Implement CPUCFG code path as CPUCFG emulation and HWCAP > have accepted by Linux Kernel upstream. >--- > libavutil/cpu.c | 10 +++ > libavutil/cpu.h | 3 + > libavutil/cpu_internal.h | 2 + > libavutil/mips/Makefile | 2 +- > libavutil/mips/cpu.c | 134 ++++++++++++++++++++++++++++++++++++++ > libavutil/mips/cpu.h | 28 ++++++++ > libavutil/tests/cpu.c | 3 + > tests/checkasm/checkasm.c | 3 + > 8 files changed, 184 insertions(+), 1 deletion(-) > create mode 100644 libavutil/mips/cpu.c > create mode 100644 libavutil/mips/cpu.h > >diff --git a/libavutil/mips/cpu.c b/libavutil/mips/cpu.c >new file mode 100644 >index 0000000000..e9e291a45a >--- /dev/null >+++ b/libavutil/mips/cpu.c >@@ -0,0 +1,134 @@ >+/* >+ * This file is part of FFmpeg. >+ * >+ * FFmpeg is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Lesser General Public >+ * License as published by the Free Software Foundation; either >+ * version 2.1 of the License, or (at your option) any later version. >+ * >+ * FFmpeg is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Lesser General Public License for more details. >+ * >+ * You should have received a copy of the GNU Lesser General Public >+ * License along with FFmpeg; if not, write to the Free Software >+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >USA >+ */ >+ >+#include "libavutil/cpu.h" >+#include "libavutil/cpu_internal.h" >+#include "config.h" >+#if defined __linux__ || defined __ANDROID__ >+#include <stdint.h> >+#include <stdio.h> >+#include <string.h> >+#include <sys/auxv.h> >+#include "asmdefs.h" >+#include "libavutil/avstring.h" >+#endif >+ >+#if defined __linux__ || defined __ANDROID__ >+ >+#define HWCAP_LOONGSON_CPUCFG (1 << 14) >+ >+static int cpucfg_available(void) >+{ >+ return getauxval(AT_HWCAP) & HWCAP_LOONGSON_CPUCFG; >+} >+ >+/* Most toolchains have no CPUCFG support yet */ >+static uint32_t read_cpucfg(uint32_t reg) >+{ >+ uint32_t __res; >+ >+ __asm__ __volatile__( >+ "parse_r __res,%0\n\t" >+ "parse_r reg,%1\n\t" >+ ".insn \n\t" >+ ".word (0xc8080118 | (reg << 21) | (__res << 11))\n\t" >+ :"=r"(__res) >+ :"r"(reg) >+ : >+ ); >+ return __res; >+} >+ >+#define LOONGSON_CFG1 0x1 >+ >+#define LOONGSON_CFG1_MMI (1 << 4) >+#define LOONGSON_CFG1_MSA1 (1 << 5) >+ >+static int cpu_flags_cpucfg(void) >+{ >+ int flags = 0; >+ uint32_t cfg1 = read_cpucfg(LOONGSON_CFG1); >+ >+ if (cfg1 & LOONGSON_CFG1_MMI) >+ flags |= AV_CPU_FLAG_MMI; >+ >+ if (cfg1 & LOONGSON_CFG1_MMI) >+ flags |= AV_CPU_FLAG_MSA;
Should be LOONGSON_CFG1_MSA1. >+ >+ return flags; >+} >+ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".