我正在阅读Linux/arch/tile/lib/strlen_32.c
来了解strlen_32
的成就。但是我遇到了两个名为 __insn_seqb
和 __insn_ctz
的宏,我不知道其含义。函数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上搜索了它们,但只找到了另一个宏定义: string_endian.h 中的#define CFZ(x) __insn_ctz(x) glib-ports string-endian.h 谁能告诉我这两个宏的明确定义或者真正的含义和用法在哪里?
最佳答案
它们似乎是 Tilera processors 的指令内在函数.
我猜想 __insn_ctz
是一条“计数尾随零”指令。
__insn_seqb
似乎正在测试 4 字节字内的 0 字节。
Tilera 指令显然是 somewhat similar to MIPS .
关于c - __insn_seqb() 和 __insn_ctz 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33990233/