1317021Sdim//===-- xray_powerpc64.inc --------------------------------------*- C++ -*-===//
2317021Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6317021Sdim//
7317021Sdim//===----------------------------------------------------------------------===//
8317021Sdim//
9317021Sdim// This file is a part of XRay, a dynamic runtime instrumentation system.
10317021Sdim//
11317021Sdim//===----------------------------------------------------------------------===//
12317021Sdim
13317021Sdim#include <cstdint>
14317021Sdim#include <mutex>
15317021Sdim#include <sys/platform/ppc.h>
16317021Sdim
17317021Sdim#include "xray_defs.h"
18317021Sdim
19317021Sdimnamespace __xray {
20317021Sdim
21317021SdimALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
22317021Sdim  CPU = 0;
23317021Sdim  return __ppc_get_timebase();
24317021Sdim}
25317021Sdim
26317021Sdiminline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
27317021Sdim  static std::mutex M;
28317021Sdim  std::lock_guard<std::mutex> Guard(M);
29317021Sdim  return __ppc_get_timebase_freq();
30317021Sdim}
31317021Sdim
32317021Sdiminline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
33317021Sdim  return true;
34317021Sdim}
35317021Sdim
36317021Sdim} // namespace __xray
37