Я очень новичок в SSE и оптимизировал часть кода с использованием встроенных функций.Я доволен самой операцией, но я ищу лучший способ написать результат.Результаты заканчиваются в трех _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
) массивы.Это кажется мне неправильным по причинам, которые я не могу определить.У кого-нибудь есть предложения по улучшению?
Спасибо!