From Bonita Montero@Bonita.Montero@gmail.com to comp.lang.c++ on Wed Nov 19 15:02:01 2025
From Newsgroup: comp.lang.c++
size_t xstrlen( char const *s )
{
-a -a char const *begin = s;
-a -a __m512i zero = _mm512_setzero_si512();
-a -a uintptr_t
-a -a -a -a up = (uintptr_t)s,
-a -a -a -a base = up & ~(uintptr_t)63;
-a -a unsigned skip = (unsigned)(up - base);
-a -a s = (char *)base;
-a -a uint64_t matches = _mm512_cmpeq_epi8_mask( _mm512_load_si512( (void
*)s ), zero );
-a -a matches = matches >> skip;
-a -a if( matches )
-a -a -a -a return countr_zero( matches );
-a -a s += 64;
-a -a for( ; ; s += 64 )
-a -a -a -a if( matches = _mm512_cmpeq_epi8_mask( _mm512_load_si512( (void *)s ), zero ); matches )
-a -a -a -a -a -a return s - begin + countr_zero( matches );
}
Everything with AVX-512.
--- Synchronet 3.21a-Linux NewsLink 1.2
Who's Online
Recent Visitors
Widgit
Sun Jan 11 18:29:52 2026
from
New Zealand
via
Telnet
Geek2
Sun Jan 11 14:07:03 2026
from
Euclid, Oh
via
Telnet
Geek2
Sun Jan 11 11:15:24 2026
from
Euclid, Oh
via
Telnet
Crackerchest
Sun Jan 11 08:12:39 2026
from
Usa
via
Telnet