/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* compile-time and runtime tests for whether to use MIPS-specific extensions */ #include "mips.h" #include <stdio.h> #include <stdlib.h> #include <string.h> enum{ MIPS_FLAG_LOONGSON3 = 1, }; static unsigned get_mips_cpu_flags(void) { unsigned flags = 0; FILE *fin; fin = fopen("/proc/cpuinfo","r"); if (fin != nullptr) { char buf[1024]; memset(buf, 0, sizeof(buf)); fread(buf, sizeof(char), sizeof(buf) - 1, fin); fclose(fin); if (strstr(buf, "Loongson-3")) flags |= MIPS_FLAG_LOONGSON3; } return flags; } static bool check_loongson3(void) { // Cache a local copy so we only have to read /proc/cpuinfo once. static unsigned mips_cpu_flags = get_mips_cpu_flags(); return (mips_cpu_flags & MIPS_FLAG_LOONGSON3) != 0; } namespace mozilla { namespace mips_private { bool isLoongson3 = check_loongson3(); } // namespace mips_private } // namespace mozilla