@@ -8,7 +8,9 @@ ADA_PUSH_DISABLE_ALL_WARNINGS
88ADA_POP_DISABLE_WARNINGS
99
1010#include < algorithm>
11- #if ADA_NEON
11+ #if ADA_SVE
12+ #include < arm_sve.h>
13+ #elif ADA_NEON
1214#include < arm_neon.h>
1315#elif ADA_SSE2
1416#include < emmintrin.h>
@@ -44,7 +46,27 @@ constexpr bool to_lower_ascii(char* input, size_t length) noexcept {
4446 }
4547 return non_ascii == 0 ;
4648}
47- #if ADA_NEON
49+ #endif
50+ #if ADA_SVE
51+ ada_really_inline bool has_tabs_or_newline (
52+ std::string_view user_input) noexcept {
53+ const svuint8_t mask1 = svdup_n_u8 (' \r ' );
54+ const svuint8_t mask2 = svdup_n_u8 (' \n ' );
55+ const svuint8_t mask3 = svdup_n_u8 (' \t ' );
56+ svbool_t running = svdup_n_b8 (false );
57+ const size_t lanes = svcntb ();
58+ for (size_t i = 0 ; i < user_input.size (); i += lanes) {
59+ const svbool_t mask = svwhilelt_b8_u64 (i, user_input.size ());
60+ svuint8_t word = svld1_u8 (mask, (const uint8_t *)user_input.data () + i);
61+ running = svorr_b_z (mask,
62+ svorr_b_z (mask, running,
63+ svorr_b_z (mask, svcmpeq_u8 (mask, word, mask1),
64+ svcmpeq_u8 (mask, word, mask2))),
65+ svcmpeq_u8 (mask, word, mask3));
66+ }
67+ return svptest_any (running);
68+ }
69+ #elif ADA_NEON
4870ada_really_inline bool has_tabs_or_newline (
4971 std::string_view user_input) noexcept {
5072 size_t i = 0 ;
0 commit comments