10 #ifndef __RISCV_BITMANIP_H
11 #define __RISCV_BITMANIP_H
15 #if defined(__cplusplus)
19 #if defined(__riscv_zbb)
22 return __builtin_riscv_orc_b_32(__x);
25 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
27 return __builtin_riscv_clz_32(__x);
30 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
32 return __builtin_riscv_ctz_32(__x);
35 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
37 return __builtin_popcount(__x);
40 #if __riscv_xlen == 64
43 return __builtin_riscv_orc_b_64(__x);
46 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
48 return __builtin_riscv_clz_64(__x);
51 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
53 return __builtin_riscv_ctz_64(__x);
56 static __inline__
unsigned __attribute__((__always_inline__, __nodebug__))
58 return __builtin_popcountll(__x);
63 #if defined(__riscv_zbb) || defined(__riscv_zbkb)
66 return __builtin_bswap32(__x);
71 return __builtin_rotateleft32(__x,
__y);
76 return __builtin_rotateright32(__x,
__y);
79 #if __riscv_xlen == 64
82 return __builtin_bswap64(__x);
87 return __builtin_rotateleft64(__x,
__y);
92 return __builtin_rotateright64(__x,
__y);
97 #if defined(__riscv_zbkb)
100 return __builtin_riscv_brev8_32(__x);
103 #if __riscv_xlen == 64
106 return __builtin_riscv_brev8_64(__x);
110 #if __riscv_xlen == 32
113 return __builtin_riscv_unzip_32(__x);
118 return __builtin_riscv_zip_32(__x);
123 #if defined(__riscv_zbc)
124 #if __riscv_xlen == 32
127 return __builtin_riscv_clmulr_32(__x,
__y);
131 #if __riscv_xlen == 64
134 return __builtin_riscv_clmulr_64(__x,
__y);
139 #if defined(__riscv_zbkc) || defined(__riscv_zbc)
142 return __builtin_riscv_clmul_32(__x,
__y);
145 #if __riscv_xlen == 32
148 return __builtin_riscv_clmulh_32(__x,
__y);
152 #if __riscv_xlen == 64
155 return __builtin_riscv_clmul_64(__x,
__y);
160 return __builtin_riscv_clmulh_64(__x,
__y);
165 #if defined(__riscv_zbkx)
166 #if __riscv_xlen == 32
169 return __builtin_riscv_xperm4_32(__x,
__y);
174 return __builtin_riscv_xperm8_32(__x,
__y);
178 #if __riscv_xlen == 64
181 return __builtin_riscv_xperm4_64(__x,
__y);
186 return __builtin_riscv_xperm8_64(__x,
__y);
191 #if defined(__cplusplus)
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
static __inline__ uint32_t uint32_t __y