// 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(DART_HOST_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 Init();
  static void Cleanup();

  // Caller must free the result of field.
  static const char* field(CpuInfoIndices idx);
#else
  static void Init() {}
  static void Cleanup() {}
  static const char* field(CpuInfoIndices idx) { return nullptr; }
#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 popcnt() { return popcnt_; }
  static bool abm() { return abm_; }

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

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

}  // namespace dart

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