我有一些我想运行快速内置CPU指令popcnt的代码(当使用适当的标志(例如,使用__builtin_popcountll或g++ -mpopcnt编译clang++ -march=corei7时,会发生这种情况)),但也能够当cpuid显示不支持HW指令的CPU时回退到代码。当然,要获得我相信编译人员已经正确实施的后备代码(因此,我不必引入C或asm代码来执行我的popcount),我需要一个单独的编译单元,该编译单元无需使用或-mpopcnt标志。将单独编译的代码链接在一起是唯一的方法吗?是否没有编译器内部函数或其他类型的提示或其他内置函数,我不知道该如何使用它来生成后备弹出计数代码? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我不确定,但是插入代码以在popcnt指令和回退实现之间进行选择所需的成本可能会比不总是使用非popcnt实现的性能受到更大的影响。要切换备用实现(在popcnt的站点上进行切换),您至少需要满足以下条件:加载并检查cpuid位(CPUID.01H:ECX.POPCNT [Bit 23])分支选择popcnt或替代实施潜在地保存/恢复替代实现所需的寄存器如果备用实现是基于SSE或AVX,则有可能将数据移至SIMD寄存器我怀疑成本会妨碍您所描述的内在函数的有效实施。 (adsbygoogle = window.adsbygoogle || []).push({});
08-16 23:41