title: Get uint64_t out of __m128 intrinsic?
body: <p>I can use <code>_mm_set_epi64</code> to store two <code>uint64_t</code>s into a <code>__m128</code> intrinsic. But hunting around, I see various ways to get the values back out: There's <code>reinterpret_cast</code> (and it's evil twin C-style casts), it's sibling <code>union { __m128; uint64[2]; };</code> and <code>memcpy</code>, there's accessing fields of <code>__m128</code>. There's <code>__m128i _mm_load_si128(__m128i *p);</code>, but I'm not seeing a <code>_mm_get_*</code> function. Am I missing something? If there's a <code>_mm_set_epi64</code> then there must be a non-cast way to get the <code>uint64_t</code>s back out, right? (Otherwise why would they bother providing <code>_mm_set_epi64</code>?)</p>
  <p>I see <a href="https://stackoverflow.com/questions/12624466/get-member-of-m128-by-index">Get member of __m128 by index?</a> but the &quot;correct answer&quot; has a broken link and implies there's a <code>load</code> function, but all the <code>load</code>s I see map <code>__m128</code> to <code>__m128</code>. Shouldn't there be a <code>void _mm_get_epi64(__m128, uint64_t* outbuf)</code>?</p>