xref: /freebsd/contrib/arm-optimized-routines/string/include/benchlib.h (revision ec0ea6efa1ad229d75c394c1a9b9cac33af2b1d3)
1 /*
2  * Benchmark support functions.
3  *
4  * Copyright (c) 2020, Arm Limited.
5  * SPDX-License-Identifier: MIT
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 
34