Как сохранить значения в ячейках памяти, состоящих из нескольких несмежных участков, с SSE Intrinsics?

Я очень плохо знаком с SSE и оптимизировал раздел кода с помощью intrinsics. Я доволен самой операцией, но я ищу лучший способ записать результат. Результаты заканчиваются в три _m128i переменные.

То, что я пытаюсь сделать, сохранить определенные байты от значений результата до ячеек памяти, состоящих из нескольких несмежных участков. Я в настоящее время делаю это:

__m128i values0,values1,values2;

/*Do stuff and store the results in values0, values1, and values2*/

y[0]        = (BYTE)_mm_extract_epi16(values0,0);
cb[2]=cb[3] = (BYTE)_mm_extract_epi16(values0,2);
y[3]        = (BYTE)_mm_extract_epi16(values0,4);
cr[4]=cr[5] = (BYTE)_mm_extract_epi16(values0,6);

cb[0]=cb[1] = (BYTE)_mm_extract_epi16(values1,0);
y[1]        = (BYTE)_mm_extract_epi16(values1,2);
cr[2]=cr[3] = (BYTE)_mm_extract_epi16(values1,4);
y[4]        = (BYTE)_mm_extract_epi16(values1,6);

cr[0]=cr[1] = (BYTE)_mm_extract_epi16(values2,0);
y[2]        = (BYTE)_mm_extract_epi16(values2,2);
cb[4]=cb[5] = (BYTE)_mm_extract_epi16(values2,4);
y[5]        = (BYTE)_mm_extract_epi16(values2,6);

Где y, cb, и cr байт (unsigned char) массивы. Это кажется неправильным мне по причинам, которые я не могу определить. У кого-либо есть какие-либо предложения для лучшего пути?

Спасибо!

5
задан Scott 19 October 2010 в 15:10
поделиться