Встроенные функции соответствуют относительно непосредственно фактическим инструкциям, но компиляторы не обязаны выпускать соответствующие инструкции.Оптимизация загрузки, сопровождаемой операцией (даже если она записана во встроенной форме) в форму памяти операции, является обычной оптимизацией, выполняемой всеми респектабельными компиляторами, когда это выгодно.
TLDR: записать загрузку иоперация в intrinsics, и пусть компилятор ее оптимизирует.
Edit: тривиальный пример:
#include <emmintrin.h>
__m128i foo(__m128i *addr) {
__m128i a = _mm_load_si128(addr);
__m128i b = _mm_load_si128(addr + 1);
return _mm_unpacklo_epi8(a, b);
}
Компиляция с gcc -Os -fomit-frame-pointer
дает:
_foo:
movdqa (%rdi), %xmm0
punpcklbw 16(%rdi), %xmm0
retq
Видите?Оптимизатор разберутся.