@@ -8,7 +8,9 @@ ADA_PUSH_DISABLE_ALL_WARNINGS
8
8
ADA_POP_DISABLE_WARNINGS
9
9
10
10
#include < algorithm>
11
- #if ADA_NEON
11
+ #if ADA_SVE
12
+ #include < arm_sve.h>
13
+ #elif ADA_NEON
12
14
#include < arm_neon.h>
13
15
#elif ADA_SSE2
14
16
#include < emmintrin.h>
@@ -44,7 +46,26 @@ constexpr bool to_lower_ascii(char* input, size_t length) noexcept {
44
46
}
45
47
return non_ascii == 0 ;
46
48
}
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
48
69
ada_really_inline bool has_tabs_or_newline (
49
70
std::string_view user_input) noexcept {
50
71
size_t i = 0 ;
0 commit comments