@@ -15,7 +15,7 @@ namespace arm64 {
1515using namespace simd ;
1616
1717struct json_character_block {
18- static really_inline json_character_block classify (const simd::simd8x64<uint8_t > in);
18+ static really_inline json_character_block classify (const simd::simd8x64<uint8_t >& in);
1919
2020 really_inline uint64_t whitespace () const { return _whitespace; }
2121 really_inline uint64_t op () const { return _op; }
@@ -25,7 +25,7 @@ struct json_character_block {
2525 uint64_t _op;
2626};
2727
28- really_inline json_character_block json_character_block::classify (const simd::simd8x64<uint8_t > in) {
28+ really_inline json_character_block json_character_block::classify (const simd::simd8x64<uint8_t >& in) {
2929 // Functional programming causes trouble with Visual Studio.
3030 // Keeping this version in comments since it is much nicer:
3131 // auto v = in.map<uint8_t>([&](simd8<uint8_t> chunk) {
@@ -38,7 +38,7 @@ really_inline json_character_block json_character_block::classify(const simd::si
3838 const simd8<uint8_t > table1 (16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 12 , 1 , 2 , 9 , 0 , 0 );
3939 const simd8<uint8_t > table2 (8 , 0 , 18 , 4 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 3 , 2 , 1 , 0 , 0 );
4040
41- auto v = simd8x64<uint8_t >(
41+ simd8x64<uint8_t > v (
4242 (in.chunks [0 ] & 0xf ).lookup_16 (table1) & (in.chunks [0 ].shr <4 >()).lookup_16 (table2),
4343 (in.chunks [1 ] & 0xf ).lookup_16 (table1) & (in.chunks [1 ].shr <4 >()).lookup_16 (table2),
4444 (in.chunks [2 ] & 0xf ).lookup_16 (table1) & (in.chunks [2 ].shr <4 >()).lookup_16 (table2),
@@ -79,12 +79,12 @@ really_inline json_character_block json_character_block::classify(const simd::si
7979 return { whitespace, op };
8080}
8181
82- really_inline bool is_ascii (simd8x64<uint8_t > input) {
83- simd8<uint8_t > bits = ( input.chunks [ 0 ] | input. chunks [ 1 ]) | (input. chunks [ 2 ] | input. chunks [ 3 ] );
82+ really_inline bool is_ascii (const simd8x64<uint8_t >& input) {
83+ simd8<uint8_t > bits = input.reduce_or ( );
8484 return bits.max () < 0b10000000u ;
8585}
8686
87- really_inline simd8<bool > must_be_continuation (simd8<uint8_t > prev1, simd8<uint8_t > prev2, simd8<uint8_t > prev3) {
87+ really_inline simd8<bool > must_be_continuation (const simd8<uint8_t > prev1, const simd8<uint8_t > prev2, const simd8<uint8_t > prev3) {
8888 simd8<bool > is_second_byte = prev1 >= uint8_t (0b11000000u );
8989 simd8<bool > is_third_byte = prev2 >= uint8_t (0b11100000u );
9090 simd8<bool > is_fourth_byte = prev3 >= uint8_t (0b11110000u );
@@ -96,7 +96,7 @@ really_inline simd8<bool> must_be_continuation(simd8<uint8_t> prev1, simd8<uint8
9696 return is_second_byte ^ is_third_byte ^ is_fourth_byte;
9797}
9898
99- really_inline simd8<bool > must_be_2_3_continuation (simd8<uint8_t > prev2, simd8<uint8_t > prev3) {
99+ really_inline simd8<bool > must_be_2_3_continuation (const simd8<uint8_t > prev2, const simd8<uint8_t > prev3) {
100100 simd8<bool > is_third_byte = prev2 >= uint8_t (0b11100000u );
101101 simd8<bool > is_fourth_byte = prev3 >= uint8_t (0b11110000u );
102102 return is_third_byte ^ is_fourth_byte;
0 commit comments