簡體   English   中英

用gcc生成BZHI指令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM