2

適切に構築された C/C++ コードを使用すると、組み込み関数を使用せずに効率的な SIMD アセンブラーを独自に生成するように gcc にヒントを与えることができます (例: https://locklessinc.com/articles/vectorize/ )。

movemask 操作 ( PMOVMSKB / *_movemask_epi8 ファミリ) で同様の効果を達成しようとしていますが、これまでのところ成功していません。

私が考えることができる最も単純なコード:

#include <cstdint>

alignas(128) int8_t arr[32];

uint32_t foo()
{
    uint32_t rv = 0;

    for (int it = 0; it < 32; ++it)
    {
        rv |= (arr[it] < 0) << it;
    }

    return rv;
}

ムーブ マスク命令を利用できないアセンブリにつながる: https://godbolt.org/z/3XimYc

組み込み関数を明示的に使用せずに gcc でそれを行う方法があるかどうか、誰か考えがありますか?

MD ファイルと関連する gcc の実装はまだ調べていません ( https://github.com/gcc-mirror/gcc/tree/master/gcc/config/i386 )。

4

0 に答える 0