I'm writing code using the C intrinsics for Intel's AVX instructions. If I have a packed double vector (a __m256d
), what would be the most efficient way (i.e. the least number of operations) to store each of them to a different place in memory (i.e. I need to fan them out to different locations such that they are no longer packed)? Pseudocode:
__m256d *src;
double *dst;
int dst_dist;
dst[0] = src[0];
dst[dst_dist] = src[1];
dst[2 * dst_dist] = src[2];
dst[3 * dst_dist] = src[3];
Using SSE, I could do this with __m128
types using the _mm_storel_pi
and _mm_storeh_pi
intrinsics. I've not been able to find anything similar for AVX that allows me to store the individual 64-bit pieces to memory. Does one exist?
__m256d
.__m256
is 8 floats. – Norbert P.__m256d
; I'm actually using floats. The doubles that I want to extract and store are actually complex numbers (two floats, or the size of one double). – Jason R