_mm_stream_load_si128
is declared as
__m128i _mm_stream_load_si128 (__m128i * mem_addr)
while _mm_load_si128
is declared as
__m128i _mm_load_si128 (__m128i const* mem_addr)
Does the former modify the contents of what mem_addr
points to? If not, what's the motivation for the non-const declaration?
I think it is declared this way for no reason. See _mm256_stream_load_si256
and _mm512_stream_load_si512
that are the same for wider operand, they take const
argument.
Also in <smmintrin.h>
that comes with Visual Studio 2015 it is const
:
/*
* Load double quadword using non-temporal aligned hint
*/
extern __m128i _mm_stream_load_si128(const __m128i*);