Я на этой странице встроенного руководства Intel.
Мой sse опыт довольно хрупкий.
Хорошо, у меня есть массив — действительно длинный — целых чисел с именем «источник».
Пример :
Я хочу изменить некоторые из его значений, если они соответствуют определенному значению.
int source[] = {4,5,9,8}
int mask[] = {4,4,4,4}
int replacer[] = {3,3,3,3}
Таким образом, окончательный исходный код должен выглядеть как {3,5,9,8}.
Я хотел бы добиться этого с помощью SSE ‹ 4.
Ближайшая инструкция, которая мне попалась, это _mm_cmpeq_epi32
:
FOR j := 0 to 3
i := j*32 dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
ENDFOR
Теперь я хотел бы заменить исходный массив моим значением или ничего не делать иначе:
FOR j := 0 to 3
i := j*32 dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? my_mask_value_here : source_value_untouched
ENDFOR
Есть ли отдаленное достижение того, что я пытаюсь? Не могу понять даже при объединении разных инструкций..
Спасибо