1#if SIMDJSON_IMPLEMENTATION_ARM64 || SIMDJSON_IMPLEMENTATION_ICELAKE || SIMDJSON_IMPLEMENTATION_HASWELL || SIMDJSON_IMPLEMENTATION_WESTMERE || SIMDJSON_IMPLEMENTATION_PPC64
2
3#include <cstdint>
4
5namespace simdjson { // table modified and copied from
6namespace internal { // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetTable
7SIMDJSON_DLLIMPORTEXPORT const unsigned char BitsSetTable256mul2[256] = {
8 0, 2, 2, 4, 2, 4, 4, 6, 2, 4, 4, 6, 4, 6, 6, 8, 2, 4, 4,
9 6, 4, 6, 6, 8, 4, 6, 6, 8, 6, 8, 8, 10, 2, 4, 4, 6, 4, 6,
10 6, 8, 4, 6, 6, 8, 6, 8, 8, 10, 4, 6, 6, 8, 6, 8, 8, 10, 6,
11 8, 8, 10, 8, 10, 10, 12, 2, 4, 4, 6, 4, 6, 6, 8, 4, 6, 6, 8,
12 6, 8, 8, 10, 4, 6, 6, 8, 6, 8, 8, 10, 6, 8, 8, 10, 8, 10, 10,
13 12, 4, 6, 6, 8, 6, 8, 8, 10, 6, 8, 8, 10, 8, 10, 10, 12, 6, 8,
14 8, 10, 8, 10, 10, 12, 8, 10, 10, 12, 10, 12, 12, 14, 2, 4, 4, 6, 4,
15 6, 6, 8, 4, 6, 6, 8, 6, 8, 8, 10, 4, 6, 6, 8, 6, 8, 8, 10,
16 6, 8, 8, 10, 8, 10, 10, 12, 4, 6, 6, 8, 6, 8, 8, 10, 6, 8, 8,
17 10, 8, 10, 10, 12, 6, 8, 8, 10, 8, 10, 10, 12, 8, 10, 10, 12, 10, 12,
18 12, 14, 4, 6, 6, 8, 6, 8, 8, 10, 6, 8, 8, 10, 8, 10, 10, 12, 6,
19 8, 8, 10, 8, 10, 10, 12, 8, 10, 10, 12, 10, 12, 12, 14, 6, 8, 8, 10,
20 8, 10, 10, 12, 8, 10, 10, 12, 10, 12, 12, 14, 8, 10, 10, 12, 10, 12, 12,
21 14, 10, 12, 12, 14, 12, 14, 14, 16};
22
23SIMDJSON_DLLIMPORTEXPORT const uint8_t pshufb_combine_table[272] = {
24 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
25 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x08,
26 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0x00, 0x01, 0x02, 0x03,
27 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff,
28 0x00, 0x01, 0x02, 0x03, 0x04, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
29 0x0f, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b,
30 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x08,
31 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
32 0x00, 0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff,
33 0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
34 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x09, 0x0a, 0x0b,
35 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
36};
37
38// 256 * 8 bytes = 2kB, easily fits in cache.
39SIMDJSON_DLLIMPORTEXPORT const uint64_t thintable_epi8[256] = {
40 0x0706050403020100, 0x0007060504030201, 0x0007060504030200,
41 0x0000070605040302, 0x0007060504030100, 0x0000070605040301,
42 0x0000070605040300, 0x0000000706050403, 0x0007060504020100,
43 0x0000070605040201, 0x0000070605040200, 0x0000000706050402,
44 0x0000070605040100, 0x0000000706050401, 0x0000000706050400,
45 0x0000000007060504, 0x0007060503020100, 0x0000070605030201,
46 0x0000070605030200, 0x0000000706050302, 0x0000070605030100,
47 0x0000000706050301, 0x0000000706050300, 0x0000000007060503,
48 0x0000070605020100, 0x0000000706050201, 0x0000000706050200,
49 0x0000000007060502, 0x0000000706050100, 0x0000000007060501,
50 0x0000000007060500, 0x0000000000070605, 0x0007060403020100,
51 0x0000070604030201, 0x0000070604030200, 0x0000000706040302,
52 0x0000070604030100, 0x0000000706040301, 0x0000000706040300,
53 0x0000000007060403, 0x0000070604020100, 0x0000000706040201,
54 0x0000000706040200, 0x0000000007060402, 0x0000000706040100,
55 0x0000000007060401, 0x0000000007060400, 0x0000000000070604,
56 0x0000070603020100, 0x0000000706030201, 0x0000000706030200,
57 0x0000000007060302, 0x0000000706030100, 0x0000000007060301,
58 0x0000000007060300, 0x0000000000070603, 0x0000000706020100,
59 0x0000000007060201, 0x0000000007060200, 0x0000000000070602,
60 0x0000000007060100, 0x0000000000070601, 0x0000000000070600,
61 0x0000000000000706, 0x0007050403020100, 0x0000070504030201,
62 0x0000070504030200, 0x0000000705040302, 0x0000070504030100,
63 0x0000000705040301, 0x0000000705040300, 0x0000000007050403,
64 0x0000070504020100, 0x0000000705040201, 0x0000000705040200,
65 0x0000000007050402, 0x0000000705040100, 0x0000000007050401,
66 0x0000000007050400, 0x0000000000070504, 0x0000070503020100,
67 0x0000000705030201, 0x0000000705030200, 0x0000000007050302,
68 0x0000000705030100, 0x0000000007050301, 0x0000000007050300,
69 0x0000000000070503, 0x0000000705020100, 0x0000000007050201,
70 0x0000000007050200, 0x0000000000070502, 0x0000000007050100,
71 0x0000000000070501, 0x0000000000070500, 0x0000000000000705,
72 0x0000070403020100, 0x0000000704030201, 0x0000000704030200,
73 0x0000000007040302, 0x0000000704030100, 0x0000000007040301,
74 0x0000000007040300, 0x0000000000070403, 0x0000000704020100,
75 0x0000000007040201, 0x0000000007040200, 0x0000000000070402,
76 0x0000000007040100, 0x0000000000070401, 0x0000000000070400,
77 0x0000000000000704, 0x0000000703020100, 0x0000000007030201,
78 0x0000000007030200, 0x0000000000070302, 0x0000000007030100,
79 0x0000000000070301, 0x0000000000070300, 0x0000000000000703,
80 0x0000000007020100, 0x0000000000070201, 0x0000000000070200,
81 0x0000000000000702, 0x0000000000070100, 0x0000000000000701,
82 0x0000000000000700, 0x0000000000000007, 0x0006050403020100,
83 0x0000060504030201, 0x0000060504030200, 0x0000000605040302,
84 0x0000060504030100, 0x0000000605040301, 0x0000000605040300,
85 0x0000000006050403, 0x0000060504020100, 0x0000000605040201,
86 0x0000000605040200, 0x0000000006050402, 0x0000000605040100,
87 0x0000000006050401, 0x0000000006050400, 0x0000000000060504,
88 0x0000060503020100, 0x0000000605030201, 0x0000000605030200,
89 0x0000000006050302, 0x0000000605030100, 0x0000000006050301,
90 0x0000000006050300, 0x0000000000060503, 0x0000000605020100,
91 0x0000000006050201, 0x0000000006050200, 0x0000000000060502,
92 0x0000000006050100, 0x0000000000060501, 0x0000000000060500,
93 0x0000000000000605, 0x0000060403020100, 0x0000000604030201,
94 0x0000000604030200, 0x0000000006040302, 0x0000000604030100,
95 0x0000000006040301, 0x0000000006040300, 0x0000000000060403,
96 0x0000000604020100, 0x0000000006040201, 0x0000000006040200,
97 0x0000000000060402, 0x0000000006040100, 0x0000000000060401,
98 0x0000000000060400, 0x0000000000000604, 0x0000000603020100,
99 0x0000000006030201, 0x0000000006030200, 0x0000000000060302,
100 0x0000000006030100, 0x0000000000060301, 0x0000000000060300,
101 0x0000000000000603, 0x0000000006020100, 0x0000000000060201,
102 0x0000000000060200, 0x0000000000000602, 0x0000000000060100,
103 0x0000000000000601, 0x0000000000000600, 0x0000000000000006,
104 0x0000050403020100, 0x0000000504030201, 0x0000000504030200,
105 0x0000000005040302, 0x0000000504030100, 0x0000000005040301,
106 0x0000000005040300, 0x0000000000050403, 0x0000000504020100,
107 0x0000000005040201, 0x0000000005040200, 0x0000000000050402,
108 0x0000000005040100, 0x0000000000050401, 0x0000000000050400,
109 0x0000000000000504, 0x0000000503020100, 0x0000000005030201,
110 0x0000000005030200, 0x0000000000050302, 0x0000000005030100,
111 0x0000000000050301, 0x0000000000050300, 0x0000000000000503,
112 0x0000000005020100, 0x0000000000050201, 0x0000000000050200,
113 0x0000000000000502, 0x0000000000050100, 0x0000000000000501,
114 0x0000000000000500, 0x0000000000000005, 0x0000000403020100,
115 0x0000000004030201, 0x0000000004030200, 0x0000000000040302,
116 0x0000000004030100, 0x0000000000040301, 0x0000000000040300,
117 0x0000000000000403, 0x0000000004020100, 0x0000000000040201,
118 0x0000000000040200, 0x0000000000000402, 0x0000000000040100,
119 0x0000000000000401, 0x0000000000000400, 0x0000000000000004,
120 0x0000000003020100, 0x0000000000030201, 0x0000000000030200,
121 0x0000000000000302, 0x0000000000030100, 0x0000000000000301,
122 0x0000000000000300, 0x0000000000000003, 0x0000000000020100,
123 0x0000000000000201, 0x0000000000000200, 0x0000000000000002,
124 0x0000000000000100, 0x0000000000000001, 0x0000000000000000,
125 0x0000000000000000,
126}; //static uint64_t thintable_epi8[256]
127
128} // namespace internal
129} // namespace simdjson
130
131#endif // SIMDJSON_IMPLEMENTATION_ARM64 || SIMDJSON_IMPLEMENTATION_ICELAKE || SIMDJSON_IMPLEMENTATION_HASWELL || SIMDJSON_IMPLEMENTATION_WESTMERE || SIMDJSON_IMPLEMENTATION_PPC64
132