1// See LICENSE for license details.
2
3#ifndef _RISCV_BITS_H
4#define _RISCV_BITS_H
5
6#define likely(x) __builtin_expect((x), 1)
7#define unlikely(x) __builtin_expect((x), 0)
8
9#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b))
10#define ROUNDDOWN(a, b) ((a)/(b)*(b))
11
12#define MAX(a, b) ((a) > (b) ? (a) : (b))
13#define MIN(a, b) ((a) < (b) ? (a) : (b))
14#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi)
15
16#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1)))
17#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))
18
19#define STR(x) XSTR(x)
20#define XSTR(x) #x
21
22#if __riscv_xlen == 64
23# define SLL32    sllw
24# define STORE    sd
25# define LOAD     ld
26# define LWU      lwu
27# define LOG_REGBYTES 3
28#else
29# define SLL32    sll
30# define STORE    sw
31# define LOAD     lw
32# define LWU      lw
33# define LOG_REGBYTES 2
34#endif
35#define REGBYTES (1 << LOG_REGBYTES)
36
37#endif
38