2
我想使用_bzhi_u32
內部函數,但如果運行可執行文件的處理器不支持BMI2
指令集,我想恢復爲常規的C實現。如何檢查我的ifunc解析器中是否有BMI2指令?
我使用GCC 4.8.3,我有以下
static inline uint32_t myfunc_bmi(uint32_t in) {
return _bzhi_u32(in, 3); /* as an example */
}
static void * resolve_myfunc(void) {
__builtin_cpu_init();.
if (__builtin_cpu_is("corei7") return myfunc_bmi2;
return myfunc_default;
}
static inline uint32_t myfunc(uint32_t in) __attribute__ ((ifunc "resolve_myfunc")));
我原想用__builtin_cpu_support()
顯式檢查BMI2
但目前看來,你不能檢查與__builtin_cpu_support()
。我目前對corei7
的檢查似乎並不完美,因爲據我瞭解,某些i7 Haswell的移動版本沒有BMI2
(我試過在Windows 7上運行的VirtualBox Linux客戶端,[email protected],並且它提高了SIGILL Illegal Instruction
)。
那麼是否有防故障的方法來檢查BMI2
?
上面'__builtin_cpu_is( 「corei7」)'實際上返回'FALSE'上VirtualBox的Linux客戶。 – ecerulm
[你可以回答你自己的問題](http://stackoverflow.com/questions/32214843/compiler-macro-to-detect-bmi2-instruction-set),而不是留下這個問題沒有答案。 –