Does _mm_stream_load_si128 (movntdqa) modify the memory its argument points to?

Viewed 172

_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?

1 Answers

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*);
Related