多くの SSE 命令では、ソース オペランドを 16 バイト アラインされたメモリ アドレスにすることができます。たとえば、さまざまな (un) pack 命令。PUNCKLBW には次の署名があります。
PUNPCKLBW xmm1, xmm2/m128
現在、これは組み込み関数ではまったく可能ではないようです。_mm_load* 組み込み関数を使用してメモリ内の何かを読み取ることが必須のようです。これは、PUNPCKLBW の組み込みです。
__m128i _mm_unpacklo_epi8 (__m128i a、__m128i b);
(私の知る限り、__m128i 型は常に XMM レジスタを参照します。)
さて、これはなぜですか?メモリを直接アドレス指定することで最適化の可能性が見られるので、かなり悲しいです...