私はSSE2からNEONのポートで作業しています。ポートは初期段階であり、不正な結果が生じています。不正確な結果の理由の一部は_mm_shuffle_epi32
と私が選択したNEON命令です。置換の_mm_shuffle_epi32をC式に変換しますか?
_mm_shuffle_epi32
のドキュメントは、Microsoftから控えめな側にあります。 Intelのドキュメントが優れていますが、擬似コードのいくつかが何をしているのかはわかりません。
SELECT4(src, control)
{
CASE(control[1:0])
0: tmp[31:0] := src[31:0]
1: tmp[31:0] := src[63:32]
2: tmp[31:0] := src[95:64]
3: tmp[31:0] := src[127:96]
ESAC
RETURN tmp[31:0]
}
dst[31:0] := SELECT4(a[127:0], imm8[1:0])
dst[63:32] := SELECT4(a[127:0], imm8[3:2])
dst[95:64] := SELECT4(a[127:0], imm8[5:4])
dst[127:96] := SELECT4(a[127:0], imm8[7:6])
何が_mm_shuffle_epi32
のものかを想定しています。または、より正確には、即値によって値に適用された順列。私はそれを基本的なCとANDとORとして見る必要があると思います。
考えるとC文などのマクロ:
v2 = _mm_shuffle_epi32(v1, _MM_SHUFFLE(i1,i2,i3,i4));
結果のC式は、それが基本的なC文に繰り出さだときのように何を求めていますか?
よろしくお願いいたします。それは理にかなっています。 – jww
@jww:update:_MM_SHUFFLEと一致する順序でargsを配置します。ここで、マクロ引数はMSBからLSBになります。 '_mm_set'と同じで、' _mm_set'と同じです。 –