Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
TickCounter.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7// Include for __rdtsc
8#if defined(JPH_PLATFORM_WINDOWS)
9 #include <intrin.h>
10#elif defined(JPH_CPU_X86) && defined(JPH_COMPILER_GCC)
11 #include <x86intrin.h>
12#elif defined(JPH_CPU_E2K)
13 #include <x86intrin.h>
14#elif defined(JPH_CPU_LOONGARCH)
15 #include <larchintrin.h>
16#endif
17
19
20#if defined(JPH_PLATFORM_WINDOWS_UWP) || (defined(JPH_PLATFORM_WINDOWS) && defined(JPH_CPU_ARM))
21
23uint64 GetProcessorTickCount(); // Not inline to avoid having to include Windows.h
24
25#else
26
29{
30#if defined(JPH_PLATFORM_BLUE)
31 return JPH_PLATFORM_BLUE_GET_TICKS();
32#elif defined(JPH_CPU_X86)
33 return __rdtsc();
34#elif defined(JPH_CPU_E2K)
35 return __rdtsc();
36#elif defined(JPH_CPU_ARM) && defined(JPH_USE_NEON)
37 uint64 val;
38 asm volatile("mrs %0, cntvct_el0" : "=r" (val));
39 return val;
40#elif defined(JPH_CPU_LOONGARCH)
41 #if JPH_CPU_ADDRESS_BITS == 64
42 __drdtime_t t = __rdtime_d();
43 return t.dvalue;
44 #else
45 __rdtime_t h = __rdtimeh_w();
46 __rdtime_t l = __rdtimel_w();
47 return ((uint64)h.value << 32) + l.value;
48 #endif
49#elif defined(JPH_CPU_ARM) || defined(JPH_CPU_RISCV) || defined(JPH_CPU_WASM) || defined(JPH_CPU_PPC)
50 return 0; // Not supported
51#else
52 #error Undefined
53#endif
54}
55
56#endif // JPH_PLATFORM_WINDOWS_UWP || (JPH_PLATFORM_WINDOWS && JPH_CPU_ARM)
57
std::uint64_t uint64
Definition Core.h:491
#define JPH_NAMESPACE_END
Definition Core.h:419
#define JPH_NAMESPACE_BEGIN
Definition Core.h:413
JPH_NAMESPACE_BEGIN JPH_INLINE uint64 GetProcessorTickCount()
Functionality to get the processors cycle counter.
Definition TickCounter.h:28