@@ -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,26 @@ constexpr bool to_lower_ascii(char* input, size_t length) noexcept {
4446 }
4547 return non_ascii == 0 ;
4648}
47- #if ADA_NEON
49+ #if ADA_SVE
50+ ada_really_inline bool has_tabs_or_newline (
51+ std::string_view user_input) noexcept {
52+ const svuint8_t mask1 = svdup_n_u8 (' \r ' );
53+ const svuint8_t mask2 = svdup_n_u8 (' \n ' );
54+ const svuint8_t mask3 = svdup_n_u8 (' \t ' );
55+ svbool_t running = svdup_n_b8 (false );
56+ const size_t lanes = svcntb ();
57+ for (size_t i = 0 ; i < user_input.size (); i += lanes) {
58+ const svbool_t mask = svwhilelt_b8_u64 (i, user_input.size ());
59+ svuint8_t word = svld1_u8 (mask, (const uint8_t *)user_input.data () + i);
60+ running = svorr_b_z (mask,
61+ svorr_b_z (mask, running,
62+ svorr_b_z (mask, svcmpeq_u8 (mask, word, mask1),
63+ svcmpeq_u8 (mask, word, mask2))),
64+ svcmpeq_u8 (mask, word, mask3));
65+ }
66+ return svptest_any (running);
67+ }
68+ #elif ADA_NEON
4869ada_really_inline bool has_tabs_or_newline (
4970 std::string_view user_input) noexcept {
5071 size_t i = 0 ;
0 commit comments