NeKernel dev
Loading...
Searching...
No Matches
HWChronometer.h
Go to the documentation of this file.
1/* ========================================
2
3Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
10
11namespace Kernel {
12struct HWChronoTraits;
13
14template <typename ChronoTraits = HWChronoTraits>
16
18struct HWChronoTraits final {
19 private:
21#ifdef __NE_AMD64__
22 UInt64 a = 0, d = 0;
23
24 asm volatile("rdtsc" : "=a"(a), "=d"(d));
25
26 return (d << 32) | a;
27#elif defined(__NE_ARM64__)
28 UInt64 result;
29
30 asm volatile("mrs %0, cntvct_el1" : "=r"(result));
31
32 return result;
33#else
34#error !!! no backend defined !!!
35#endif
36 }
37
39};
40
42template <typename ChronoTraits>
44 public:
45 HWChrono() = default;
46 virtual ~HWChrono() override = default;
47
49
50 public:
51 Void Start() override { fStart = ChronoTraits::TickImpl_(); }
52
53 Void Stop() override { fStop = ChronoTraits::TickImpl_(); }
54
55 Void Reset() override {
56 fStart = 0;
57 fStop = 0;
58 }
59
60 UInt64 GetElapsedTime() const override { return fStop - fStart; }
61
62 private:
65};
66} // namespace Kernel
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define STATIC
hardware chronometer implementation using a trait to extract the data.
Definition HWChronometer.h:43
UInt64 fStop
Definition HWChronometer.h:64
virtual ~HWChrono() override=default
UInt64 GetElapsedTime() const override
Definition HWChronometer.h:60
UInt64 fStart
Definition HWChronometer.h:63
Void Reset() override
Definition HWChronometer.h:55
Void Start() override
Definition HWChronometer.h:51
Void Stop() override
Definition HWChronometer.h:53
Definition HWChronometer.h:15
UPS inline definitions.
Definition Device.h:12
void Void
Definition Config.h:87
__UINT64_TYPE__ UInt64
Definition Config.h:48
BenchKit chrono logic for x64/ARM64.
Definition HWChronometer.h:18
STATIC UInt64 TickImpl_(void)
Definition HWChronometer.h:20