使用c程序:
int main(int argc , char** argv)
{
return __builtin_popcountll(0xf0f0f0f0f0f0f0f0);
}
和编译器行(gcc 4.4 - Intel Xeon L3426):
gcc -msse4.2 poptest.c -o poptest
我没有得到内置的 popcnt 指令,而是编译器生成一个查找表并以这种方式计算 popcount。生成的二进制文件超过 8000 个字节。 (哎哟!)
非常感谢您的帮助。
你必须告诉 GCC 为支持的架构生成代码
popcnt 指令:
gcc -march=corei7 popcnt.c
或者只启用对 popcnt 的支持:
gcc -mpopcnt popcnt.c
在您的示例中,将参数编程为__builtin_popcountll
是一个
常量,因此编译器可能会在编译时进行计算
时间并且永远不会发出 popcnt 指令。即使没有,GCC 也会这样做
要求优化程序。
所以尝试向它传递一些它在编译时无法知道的东西:
int main (int argc, char** argv)
{
return __builtin_popcountll ((long long) argv);
}
$ gcc -march=corei7 -O popcnt.c && objdump -d a.out | grep '<main>' -A 2
0000000000400454 <main>:
400454: f3 48 0f b8 c6 popcnt %rsi,%rax
400459: c3 retq
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)