__insn_seqb()和__insn_ctz是什么意思?

时间:2015-11-30 01:31:58

标签: c linux-kernel macros glibc

我正在阅读@Resource private Operator airtel; @Resource private Operator idea; 以了解Linux/arch/tile/lib/strlen_32.c的成就。但是我遇到了两个名为strlen_32macro的{​​{1}},其中我不知道其含义。函数__insn_seqb如下:

__insn_ctz

我在Google上搜索过它们,但只发现了另一个宏定义: strlen_32 glib-ports string-endian.h中的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; } 有人能告诉我清晰的定义在哪里或者这两个宏的真正含义和用法吗?

1 个答案:

答案 0 :(得分:3)

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

我猜测__insn_ctz是一个“计数尾随零”指令。

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

Tilera指令显然是somewhat similar to MIPS