2
次のように2つの浮動小数点オペランドの比較の比較結果があります。すなわち:私は、比較の結果に基づいて行う必要があることは、以下を実行する必要がNEONパックベクトルの結果をビットマップに比較
がneon_gt_res = vcgtq_f32(temp1, temp2);
if(neon_gt_res[0]) array[0] |= (unsigned char)0x01;
if(neon_gt_res[1]) array[0] |= (unsigned char)0x02;
if(neon_gt_res[2]) array[0] |= (unsigned char)0x04;
if(neon_gt_res[3]) array[0] |= (unsigned char)0x08;
しかし、このように書くことが再び多重比較に相当します。これをネオンCの組み込み関数で最適に書く方法を教えてください。 x86では
、これはarray[0] |= _mm_movemask_ps(cmp_gt_res);
どのようなタイプは、 '配列です[] '?私はそれがバイト配列であると仮定していますが、あなたのCソートの意味です。あなたは '1 2 4 8'のベクトルを求め、比較結果をマスクします。しかし、その結果をNEONレジスタの下位4バイトにパックするにはシャッフルが必要だと思います。私はNEONをよく知っていませんが、おそらくそれを行うことができれば、配列の32ビットの読み込み、パックされたORの実行、および保存が必要になります。 –
array []はunsigned char型です。比較結果はint32x4_t型であるため、そのマスクを使用することはできません。 – Lakshmi
しかし、NEONに比較結果の各要素から1バイトをパックするために使用できるバイトシャッフル命令はありませんか? –