// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_VM_CPUID_H_
#define RUNTIME_VM_CPUID_H_

#include "vm/globals.h"
#if !defined(TARGET_OS_MACOS)
#include "vm/allocation.h"
#include "vm/cpuinfo.h"

namespace dart {

class CpuId : public AllStatic {
 public:
#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64)
  static void InitOnce();
  static void Cleanup();

  // Caller must free the result of field.
  static const char* field(CpuInfoIndices idx);
#else
  static void InitOnce() {}
  static void Cleanup() {}
  static const char* field(CpuInfoIndices idx) { return NULL; }
#endif

 private:
  // Caller must free the result of id_string and brand_string.
  static const char* id_string();
  static const char* brand_string();

  static bool sse2() { return sse2_; }
  static bool sse41() { return sse41_; }

  static bool sse2_;
  static bool sse41_;
  static const char* id_string_;
  static const char* brand_string_;

  static void GetCpuId(int32_t level, uint32_t info[4]);
};

}  // namespace dart

#endif  // !defined(TARGET_OS_MACOS)
#endif  // RUNTIME_VM_CPUID_H_
