simdjson 4.4.0
Ridiculously Fast JSON
Loading...
Searching...
No Matches
bitmask.h
1#ifndef SIMDJSON_RVV_VLS_BITMASK_H
2#define SIMDJSON_RVV_VLS_BITMASK_H
3
4#ifndef SIMDJSON_CONDITIONAL_INCLUDE
5#include "simdjson/rvv-vls/base.h"
6#include "simdjson/rvv-vls/intrinsics.h"
7#endif // SIMDJSON_CONDITIONAL_INCLUDE
8
9namespace simdjson {
10namespace rvv_vls {
11namespace {
12
13//
14// Perform a "cumulative bitwise xor," flipping bits each time a 1 is encountered.
15//
16// For example, prefix_xor(00100100) == 00011100
17//
18simdjson_inline uint64_t prefix_xor(uint64_t bitmask) {
19#if __riscv_zbc
20 return __riscv_clmul_64(bitmask, ~(uint64_t)0);
21#elif __riscv_zvbc
22 return __riscv_vmv_x(__riscv_vclmul(__riscv_vmv_s_x_u64m1(bitmask, 1), ~(uint64_t)0, 1));
23#else
24 bitmask ^= bitmask << 1;
25 bitmask ^= bitmask << 2;
26 bitmask ^= bitmask << 4;
27 bitmask ^= bitmask << 8;
28 bitmask ^= bitmask << 16;
29 bitmask ^= bitmask << 32;
30#endif
31 return bitmask;
32}
33
34} // unnamed namespace
35} // namespace rvv_vls
36} // namespace simdjson
37
38#endif // SIMDJSON_RVV_VLS_BITMASK_H
39
The top level simdjson namespace, containing everything the library provides.
Definition base.h:8