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