// strLen: walk pointer until null byte.  Exercises the [dp],Y byte-read
// path plus the conditional loop exit.  Touches the same DPF0 setup
// pattern as strcpy/memcmp but with only ONE pointer per iter.
//
// The pragma prevents clang from recognising this as a builtin strlen
// and rewriting it as a call to libc (which our benches don't link).
__attribute__((no_builtin("strlen")))
unsigned short strLen(const char *s) {
    const char *p = s;
    while (*p) {
        p++;
    }
    return (unsigned short)(p - s);
}
