File: mips.cpp

package info (click to toggle)
firefox 148.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,719,656 kB
  • sloc: cpp: 7,618,171; javascript: 6,701,506; ansic: 3,781,787; python: 1,418,364; xml: 638,647; asm: 438,962; java: 186,285; sh: 62,885; makefile: 19,010; objc: 13,092; perl: 12,763; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (41 lines) | stat: -rw-r--r-- 1,089 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* 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 <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