brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 7e872b5 Raw
52 lines · plain
1//===-- xray_powerpc64.inc --------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of XRay, a dynamic runtime instrumentation system.10//11//===----------------------------------------------------------------------===//12 13#include <cstdint>14#include <mutex>15#ifdef __linux__16#include <sys/platform/ppc.h>17#elif defined(__FreeBSD__)18#include <sys/types.h>19#include <sys/sysctl.h>20 21#define __ppc_get_timebase __builtin_ppc_get_timebase22 23uint64_t __ppc_get_timebase_freq (void)24{25  uint64_t tb_freq = 0;26  size_t length = sizeof(tb_freq);27  sysctlbyname("kern.timecounter.tc.timebase.frequency", &tb_freq, &length, nullptr, 0);28  return tb_freq;29}30#endif31 32#include "xray_defs.h"33 34namespace __xray {35 36ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {37  CPU = 0;38  return __ppc_get_timebase();39}40 41inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {42  static std::mutex M;43  std::lock_guard<std::mutex> Guard(M);44  return __ppc_get_timebase_freq();45}46 47inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {48  return true;49}50 51} // namespace __xray52