42 lines
785 B
C
42 lines
785 B
C
#ifndef BH_BENCH_H
|
|
#define BH_BENCH_H
|
|
|
|
|
|
typedef struct BH_Bench BH_Bench;
|
|
typedef void (*BH_BenchCallback)(BH_Bench *);
|
|
|
|
|
|
#define BH_BENCH_TEST(name) \
|
|
static void bench##name(BH_Bench *state)
|
|
|
|
|
|
#define BH_BENCH_ADD(name) \
|
|
BH_BenchAdd(#name, bench##name)
|
|
|
|
|
|
void BH_BenchAdd(const char *name,
|
|
BH_BenchCallback cb);
|
|
|
|
|
|
int BH_BenchIter(BH_Bench *state);
|
|
|
|
|
|
int BH_BenchRun(void);
|
|
|
|
|
|
#if defined(__GNUC__) || defined(__clang__)
|
|
#define BH_BenchDoNotOptimize(arg) \
|
|
do { \
|
|
__asm__ __volatile__("" : : "r"(*((char volatile*) &arg)) : "memory"); \
|
|
} while (0)
|
|
#else
|
|
#define BH_BenchDoNotOptimize(arg) \
|
|
do { \
|
|
volatile void* _ptr = (void*)&(arg); \
|
|
(void)_ptr; \
|
|
} while (0)
|
|
#endif
|
|
|
|
|
|
#endif /* BH_BENCH_H */
|