[英]generate BZHI instruction with gcc
我試圖讓gcc
生成bzhi
指令 ,BMI2的一部分, 不使用內在函數,以便創建一個可移植的代碼。
鑒於bzhi
的結果,我預計這個目標是相對容易獲得的。 以下SO答案提供了一個代碼示例,簡化如下:
unsigned bzhi32(unsigned value, int nbBits)
{
return value & ((1u << nbBits) - 1);
}
clang
使用它生成bzhi
指令沒有問題,而到目前為止我還沒有找到任何類似的gcc
結果: https : //godbolt.org/g/jYrh8F
我想知道這是否可行。 至少要求此功能,但不確定它是否已完成。 如果是,可能在代碼片段中只有一些微妙的問題,例如類型或屬性,可以修復以使用gcc
成功完成此轉換。
編輯 :按照@chux的建議添加u
作為常量。 它略微改變了gcc
的結果,盡管它仍然是一個沒有bzhi
的4指令函數。
自2018年1月起,gcc中未實現此優化(有功能請求 )。 您可以使用內在函數獲取指令:
#include <x86intrin.h>
unsigned bzhi32(unsigned value, int nbBits) {
return _bzhi_u32(value, nbBits);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.