mozglue/build/mips.cpp
author ffxbld <release@mozilla.com>
Mon, 07 May 2018 16:29:07 +0000
changeset 473835 2d95d70298e248161b629ef1d0d57049c0b62d71
parent 332888 6e11636c6aa2193cdf842e6fd00442e0342ce6f3
child 508163 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release

/* 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