aboutsummaryrefslogtreecommitdiff
path: root/source/cpu_id.cc
diff options
context:
space:
mode:
authorHao Chen <chenhao@loongson.cn>2020-11-06 14:35:20 +0800
committerlibyuv LUCI CQ <libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-01-20 19:25:38 +0000
commit51de1e16f20bb93468d7c538629b40ece8420b71 (patch)
tree63fd2042b74e810eb92e262f81378c751c7bec26 /source/cpu_id.cc
parent90ffd5cba97a10fd606ded4580b7fbcba070f868 (diff)
downloadlibyuv-51de1e16f20bb93468d7c538629b40ece8420b71.tar.gz
Add supports for loongarch LSX and LASX.
1. Add supports for LSX and LASX. 2. Three optimization functions are added in loongarch/row_lasx.cc file: I422ToARGBRow_LASX,I422ToRGBARow_LASX,I422AlphaToARGBRow_LASX. Bug: libyuv:912, Bug: libyuv:913 Change-Id: I043c2704f99a5215724b5c0b7f97e6bf5f7a199b Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3329189 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Diffstat (limited to 'source/cpu_id.cc')
-rw-r--r--source/cpu_id.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/source/cpu_id.cc b/source/cpu_id.cc
index 25b91012..43953886 100644
--- a/source/cpu_id.cc
+++ b/source/cpu_id.cc
@@ -197,6 +197,31 @@ LIBYUV_API SAFEBUFFERS int MipsCpuCaps(const char* cpuinfo_name) {
return flag;
}
+// TODO(fbarchard): Consider read_loongarch_ir().
+#define LOONGARCH_CFG2 0x2
+#define LOONGARCH_CFG2_LSX (1 << 6)
+#define LOONGARCH_CFG2_LASX (1 << 7)
+
+#if defined(__loongarch__) && defined(__linux__)
+LIBYUV_API SAFEBUFFERS int LoongarchCpuCaps(void) {
+ int flag = 0x0;
+ uint32_t cfg2 = 0;
+
+ __asm__ volatile(
+ "cpucfg %0, %1 \n\t"
+ : "+&r"(cfg2)
+ : "r"(LOONGARCH_CFG2)
+ );
+
+ if (cfg2 & LOONGARCH_CFG2_LSX)
+ flag |= kCpuHasLSX;
+
+ if (cfg2 & LOONGARCH_CFG2_LASX)
+ flag |= kCpuHasLASX;
+ return flag;
+}
+#endif
+
static SAFEBUFFERS int GetCpuFlags(void) {
int cpu_info = 0;
#if !defined(__pnacl__) && !defined(__CLR_VER) && \
@@ -240,6 +265,10 @@ static SAFEBUFFERS int GetCpuFlags(void) {
cpu_info = MipsCpuCaps("/proc/cpuinfo");
cpu_info |= kCpuHasMIPS;
#endif
+#if defined(__loongarch__) && defined(__linux__)
+ cpu_info = LoongarchCpuCaps();
+ cpu_info |= kCpuHasLOONGARCH;
+#endif
#if defined(__arm__) || defined(__aarch64__)
// gcc -mfpu=neon defines __ARM_NEON__
// __ARM_NEON__ generates code that requires Neon. NaCL also requires Neon.