summaryrefslogtreecommitdiff
path: root/system/utils/build/mips.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'system/utils/build/mips.cpp')
-rw-r--r--system/utils/build/mips.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/system/utils/build/mips.cpp b/system/utils/build/mips.cpp
new file mode 100644
index 000000000..6a015db8a
--- /dev/null
+++ b/system/utils/build/mips.cpp
@@ -0,0 +1,47 @@
+/* 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