summaryrefslogtreecommitdiff
path: root/yuvbench/kbench.h
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-02-25 22:10:57 -0600
committerHunter Kvalevog <hunter@kvog.sh>2026-02-26 19:55:58 -0600
commitae050f664a1f197bba2306271c7f5f8c2c2304f9 (patch)
treec3d7337f239fd5ade350f727eeb8aefc5ede0984 /yuvbench/kbench.h
parent89926aaf654f9edd79f58eb4e39d826f9690c456 (diff)
yuvbench
Diffstat (limited to 'yuvbench/kbench.h')
-rw-r--r--yuvbench/kbench.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/yuvbench/kbench.h b/yuvbench/kbench.h
new file mode 100644
index 0000000..c5d4149
--- /dev/null
+++ b/yuvbench/kbench.h
@@ -0,0 +1,42 @@
+#ifndef _KBENCH_H_
+#define _KBENCH_H_
+
+#include <stdint.h>
+
+uintptr_t KBenchTS(void);
+uintptr_t KBenchElapsedCounts(uintptr_t t0, uintptr_t t1);
+double KBenchElapsedTime(uintptr_t t0, uintptr_t t1);
+
+#ifdef KBENCH_IMPLEMENTATION
+
+uintptr_t KBenchTS(void)
+{
+ uintptr_t result = 0;
+ // macos+aarch64+clang: use CNTVCT_EL0
+#if defined(__APPLE__) && defined(__clang__) && defined(__aarch64__)
+ __asm__ volatile("mrs %0, CNTVCT_EL0" : "=r"(result) :: "memory");
+#endif
+ return result;
+}
+
+uintptr_t KBenchElapsedCounts(uintptr_t t0, uintptr_t t1)
+{
+ // @@
+ return t1 - t0;
+}
+
+double KBenchElapsedTime(uintptr_t t0, uintptr_t t1)
+{
+ uintptr_t elapsed = KBenchElapsedCounts(t0, t1);
+ double val = 0.0f;
+ // macos+aarch64+clang: divide by CNTFRQ_EL0
+#if defined(__APPLE__) && defined(__clang__) && defined(__aarch64__)
+ uintptr_t cntfreq_el0 = 0;
+ __asm__ volatile("mrs %0, CNTFRQ_EL0" : "=r"(cntfreq_el0) :: "memory");
+ val = (double)elapsed / (double)cntfreq_el0;
+#endif
+ return val;
+}
+
+#endif // KBENCH_IMPLEMENTATION
+#endif // _KBENCH_H_