riscv_bits.h 915 B

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