/src/simdutf/src/generic/ascii_validation.h
Line | Count | Source |
1 | | namespace simdutf { |
2 | | namespace SIMDUTF_IMPLEMENTATION { |
3 | | namespace { |
4 | | namespace ascii_validation { |
5 | | |
6 | 506 | result generic_validate_ascii_with_errors(const char *input, size_t length) { |
7 | 506 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); |
8 | 506 | size_t count{0}; |
9 | 108k | while (reader.has_full_block()) { |
10 | 108k | simd::simd8x64<uint8_t> in(reader.full_block()); |
11 | 108k | if (!in.is_ascii()) { |
12 | 214 | SIMDUTF_VZEROUPPER(); |
13 | 214 | result res = scalar::ascii::validate_with_errors( |
14 | 214 | reinterpret_cast<const char *>(input + count), length - count); |
15 | 214 | return result(res.error, count + res.count); |
16 | 214 | } |
17 | 108k | reader.advance(); |
18 | | |
19 | 108k | count += 64; |
20 | 108k | } |
21 | 292 | uint8_t block[64]{}; |
22 | 292 | reader.get_remainder(block); |
23 | 292 | simd::simd8x64<uint8_t> in(block); |
24 | 292 | if (!in.is_ascii()) { |
25 | 224 | SIMDUTF_VZEROUPPER(); |
26 | 224 | result res = scalar::ascii::validate_with_errors( |
27 | 224 | reinterpret_cast<const char *>(input + count), length - count); |
28 | 224 | return result(res.error, count + res.count); |
29 | 224 | } else { |
30 | 68 | return result(error_code::SUCCESS, length); |
31 | 68 | } |
32 | 292 | } simdutf.cpp:simdutf::haswell::(anonymous namespace)::ascii_validation::generic_validate_ascii_with_errors(char const*, unsigned long) Line | Count | Source | 6 | 253 | result generic_validate_ascii_with_errors(const char *input, size_t length) { | 7 | 253 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); | 8 | 253 | size_t count{0}; | 9 | 54.3k | while (reader.has_full_block()) { | 10 | 54.2k | simd::simd8x64<uint8_t> in(reader.full_block()); | 11 | 54.2k | if (!in.is_ascii()) { | 12 | 107 | SIMDUTF_VZEROUPPER(); | 13 | 107 | result res = scalar::ascii::validate_with_errors( | 14 | 107 | reinterpret_cast<const char *>(input + count), length - count); | 15 | 107 | return result(res.error, count + res.count); | 16 | 107 | } | 17 | 54.1k | reader.advance(); | 18 | | | 19 | 54.1k | count += 64; | 20 | 54.1k | } | 21 | 146 | uint8_t block[64]{}; | 22 | 146 | reader.get_remainder(block); | 23 | 146 | simd::simd8x64<uint8_t> in(block); | 24 | 146 | if (!in.is_ascii()) { | 25 | 112 | SIMDUTF_VZEROUPPER(); | 26 | 112 | result res = scalar::ascii::validate_with_errors( | 27 | 112 | reinterpret_cast<const char *>(input + count), length - count); | 28 | 112 | return result(res.error, count + res.count); | 29 | 112 | } else { | 30 | 34 | return result(error_code::SUCCESS, length); | 31 | 34 | } | 32 | 146 | } |
simdutf.cpp:simdutf::westmere::(anonymous namespace)::ascii_validation::generic_validate_ascii_with_errors(char const*, unsigned long) Line | Count | Source | 6 | 253 | result generic_validate_ascii_with_errors(const char *input, size_t length) { | 7 | 253 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); | 8 | 253 | size_t count{0}; | 9 | 54.3k | while (reader.has_full_block()) { | 10 | 54.2k | simd::simd8x64<uint8_t> in(reader.full_block()); | 11 | 54.2k | if (!in.is_ascii()) { | 12 | 107 | SIMDUTF_VZEROUPPER(); | 13 | 107 | result res = scalar::ascii::validate_with_errors( | 14 | 107 | reinterpret_cast<const char *>(input + count), length - count); | 15 | 107 | return result(res.error, count + res.count); | 16 | 107 | } | 17 | 54.1k | reader.advance(); | 18 | | | 19 | 54.1k | count += 64; | 20 | 54.1k | } | 21 | 146 | uint8_t block[64]{}; | 22 | 146 | reader.get_remainder(block); | 23 | 146 | simd::simd8x64<uint8_t> in(block); | 24 | 146 | if (!in.is_ascii()) { | 25 | 112 | SIMDUTF_VZEROUPPER(); | 26 | 112 | result res = scalar::ascii::validate_with_errors( | 27 | 112 | reinterpret_cast<const char *>(input + count), length - count); | 28 | 112 | return result(res.error, count + res.count); | 29 | 112 | } else { | 30 | 34 | return result(error_code::SUCCESS, length); | 31 | 34 | } | 32 | 146 | } |
|
33 | | |
34 | 402 | bool generic_validate_ascii(const char *input, size_t length) { |
35 | 402 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); |
36 | 52.9k | while (reader.has_full_block()) { |
37 | 52.7k | simd::simd8x64<uint8_t> in(reader.full_block()); |
38 | 52.7k | if (!in.is_ascii()) { |
39 | 124 | return false; |
40 | 124 | } |
41 | 52.5k | reader.advance(); |
42 | 52.5k | } |
43 | 278 | uint8_t block[64]{}; |
44 | 278 | reader.get_remainder(block); |
45 | 278 | simd::simd8x64<uint8_t> in(block); |
46 | 278 | return in.is_ascii(); |
47 | 402 | } simdutf.cpp:simdutf::haswell::(anonymous namespace)::ascii_validation::generic_validate_ascii(char const*, unsigned long) Line | Count | Source | 34 | 201 | bool generic_validate_ascii(const char *input, size_t length) { | 35 | 201 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); | 36 | 26.4k | while (reader.has_full_block()) { | 37 | 26.3k | simd::simd8x64<uint8_t> in(reader.full_block()); | 38 | 26.3k | if (!in.is_ascii()) { | 39 | 62 | return false; | 40 | 62 | } | 41 | 26.2k | reader.advance(); | 42 | 26.2k | } | 43 | 139 | uint8_t block[64]{}; | 44 | 139 | reader.get_remainder(block); | 45 | 139 | simd::simd8x64<uint8_t> in(block); | 46 | 139 | return in.is_ascii(); | 47 | 201 | } |
simdutf.cpp:simdutf::westmere::(anonymous namespace)::ascii_validation::generic_validate_ascii(char const*, unsigned long) Line | Count | Source | 34 | 201 | bool generic_validate_ascii(const char *input, size_t length) { | 35 | 201 | buf_block_reader<64> reader(reinterpret_cast<const uint8_t *>(input), length); | 36 | 26.4k | while (reader.has_full_block()) { | 37 | 26.3k | simd::simd8x64<uint8_t> in(reader.full_block()); | 38 | 26.3k | if (!in.is_ascii()) { | 39 | 62 | return false; | 40 | 62 | } | 41 | 26.2k | reader.advance(); | 42 | 26.2k | } | 43 | 139 | uint8_t block[64]{}; | 44 | 139 | reader.get_remainder(block); | 45 | 139 | simd::simd8x64<uint8_t> in(block); | 46 | 139 | return in.is_ascii(); | 47 | 201 | } |
|
48 | | |
49 | | } // namespace ascii_validation |
50 | | } // unnamed namespace |
51 | | } // namespace SIMDUTF_IMPLEMENTATION |
52 | | } // namespace simdutf |