1

2 つのレジスタの上位ワードと下位ワードを別のレジスタにインターリーブする単一のSSE 命令はありますか? 例えば:

r[63-0]   = a[64-127]
r[64-127] = b[63-0]
4

1 に答える 1

7

いいえ、2 つのソースと個別の宛先を持つ SSE シャッフルは存在しないためです。rただし、が と同じ場合は、 を使用して実行できaますshufpd。の値を保持する必要がある場合a:

movapd r, a
shufpd r, b, 1

最近の µarches では、これmovapdは解放されて rename[*] で処理されるため、実行コアの観点からは、これは事実上「単一の命令」です。

AVX が利用可能な場合は、使用できますvshufpd

[*] この名前変更機能を飽和状態にすることができます。その場合、追加の reg-reg 移動は通常のポート 0|1|5 操作のように動作します。幸いなことに、実際のコードではほとんどの場合、これらのポートの 1 つにバブルがいくつかあるため、移動は依然として「無料」である傾向があります。

于 2013-07-10T18:00:16.177 に答える