__insn_seqb() 和 __insn_ctz 是什么意思?

what does the __insn_seqb() and __insn_ctz mean?

我正在阅读 Linux/arch/tile/lib/strlen_32.c 以了解 strlen_32 的成就。但是我遇到了两个叫__insn_seqb__insn_ctzmacro,我不知道是什么意思。函数strlen_32如下:

size_t strlen(const char*s)
{
    const uintptr_t s_int = (uintptr_t)s;
    const uint32_t *p = (const uint32_t*)(s_int&-4);
    uint32_t v = *p | ((1<<(s_int<<3))-1);
    uint32_t bits;
    while((bits=__insn_seqb(v,0))==0)
         v = *++p;
    return ((const char*)p)+(__insn_ctz(bits)>>3)-s;
 }

我在Google上搜索了一下,只找到了另外一个宏定义: #define CFZ(x) __insn_ctz(x)string_endian.h glib-ports string-endian.h 谁能告诉我这两个宏的明确定义在哪里或者真正的含义和用法?

它们似乎是 Tilera processors 的指令内在函数。

我猜 __insn_ctz 是一条 "count trailing zeroes" 指令。

__insn_seqb 似乎在测试 4 字节字中的 0 字节。

Tilera 指令显然是 somewhat similar to MIPS