Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/arm-optimized-routines/string/include/benchlib.h
39530 views
1
/*
2
* Benchmark support functions.
3
*
4
* Copyright (c) 2020, Arm Limited.
5
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6
*/
7
8
#include <stdint.h>
9
#include <time.h>
10
11
/* Fast and accurate timer returning nanoseconds. */
12
static inline uint64_t
13
clock_get_ns (void)
14
{
15
struct timespec ts;
16
clock_gettime (CLOCK_MONOTONIC, &ts);
17
return ts.tv_sec * (uint64_t) 1000000000 + ts.tv_nsec;
18
}
19
20
/* Fast 32-bit random number generator. Passing a non-zero seed
21
value resets the internal state. */
22
static inline uint32_t
23
rand32 (uint32_t seed)
24
{
25
static uint64_t state = 0xb707be451df0bb19ULL;
26
if (seed != 0)
27
state = seed;
28
uint32_t res = state >> 32;
29
state = state * 6364136223846793005ULL + 1;
30
return res;
31
}
32
33
/* Macros to run a benchmark BENCH using string function FN. */
34
#define RUN(BENCH, FN) BENCH(#FN, FN)
35
36
#if __aarch64__
37
# define RUNA64(BENCH, FN) BENCH(#FN, FN)
38
#else
39
# define RUNA64(BENCH, FN)
40
#endif
41
42
#if __ARM_FEATURE_SVE
43
# define RUNSVE(BENCH, FN) BENCH(#FN, FN)
44
#else
45
# define RUNSVE(BENCH, FN)
46
#endif
47
48
#if WANT_MOPS
49
# define RUNMOPS(BENCH, FN) BENCH(#FN, FN)
50
#else
51
# define RUNMOPS(BENCH, FN)
52
#endif
53
54
#if __arm__
55
# define RUNA32(BENCH, FN) BENCH(#FN, FN)
56
#else
57
# define RUNA32(BENCH, FN)
58
#endif
59
60
#if __arm__ && __ARM_ARCH >= 6 && __ARM_ARCH_ISA_THUMB == 2
61
# define RUNT32(BENCH, FN) BENCH(#FN, FN)
62
#else
63
# define RUNT32(BENCH, FN)
64
#endif
65
66