ref: ba2bfcf2ebb41d8c50c6c567a27cc193d8a19d3f
dir: /vpx_ports/mips_cpudetect.c/
/* * Copyright (c) 2020 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include <stdio.h> #include <string.h> #include "./vpx_config.h" #include "vpx_ports/mips.h" #if CONFIG_RUNTIME_CPU_DETECT #if defined(__mips__) && defined(__linux__) int mips_cpu_caps(void) { char cpuinfo_line[512]; int flag = 0x0; FILE *f = fopen("/proc/cpuinfo", "r"); if (!f) { // Assume nothing if /proc/cpuinfo is unavailable. // This will occur for Chrome sandbox for Pepper or Render process. return 0; } while (fgets(cpuinfo_line, sizeof(cpuinfo_line) - 1, f)) { if (memcmp(cpuinfo_line, "cpu model", 9) == 0) { // Workaround early kernel without mmi in ASEs line. if (strstr(cpuinfo_line, "Loongson-3")) { flag |= HAS_MMI; } else if (strstr(cpuinfo_line, "Loongson-2K")) { flag |= HAS_MMI | HAS_MSA; } } if (memcmp(cpuinfo_line, "ASEs implemented", 16) == 0) { if (strstr(cpuinfo_line, "loongson-mmi") && strstr(cpuinfo_line, "loongson-ext")) { flag |= HAS_MMI; } if (strstr(cpuinfo_line, "msa")) { flag |= HAS_MSA; } // ASEs is the last line, so we can break here. break; } } fclose(f); return flag; } #else /* end __mips__ && __linux__ */ #error \ "--enable-runtime-cpu-detect selected, but no CPU detection method " \ "available for your platform. Reconfigure with --disable-runtime-cpu-detect." #endif #else /* end CONFIG_RUNTIME_CPU_DETECT */ int mips_cpu_caps(void) { return 0; } #endif