+// See LICENSE for license details.
+
#ifndef __UTIL_H
#define __UTIL_H
extern void setStats(int enable);
#endif
+#include <stdint.h>
+
extern int have_vec;
#define static_assert(cond) switch(0) { case 0: case !!(long)(cond): ; }
__sync_synchronize();
}
+static uint64_t lfsr(uint64_t x)
+{
+ uint64_t bit = (x ^ (x >> 1)) & 1;
+ return (x >> 1) | (bit << 62);
+}
+
#ifdef __riscv
#include "encoding.h"
#endif
#define stringify_1(s) #s
#define stringify(s) stringify_1(s)
#define stats(code, iter) do { \
- unsigned long _c = -rdcycle(), _i = -rdinstret(); \
+ unsigned long _c = -read_csr(mcycle), _i = -read_csr(minstret); \
code; \
- _c += rdcycle(), _i += rdinstret(); \
+ _c += read_csr(mcycle), _i += read_csr(minstret); \
if (cid == 0) \
printf("\n%s: %ld cycles, %ld.%ld cycles/iter, %ld.%ld CPI\n", \
stringify(code), _c, _c/iter, 10*_c/iter%10, _c/_i, 10*_c/_i%10); \