Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А почему без SIMD ? Надо, чтобы на 8088 работало ? 
Да, типа того. Ну, и плюс некоторые экзотические сценарии с векторизацией операций со смешением разрядностей. Типа
(byte) x + (byte) y + (int)z. В зависимости от того, с какой ассоциативностью мы выполняем операцию, мы можем попробовать сделать конверсию либо до сложения, либо после. Если до, то всё просто — это, скажем, VPMOVZXBD, после которого выполняем VPADDD. А вот если после, то сначала мы хотим получить 8 частичных сумм для байтов, а уже потом делать VPMOVZXBD и второе сложение.
PD>Именно это делает довольно древняя команда PADDB (еще из MMX)
PD>The PADDB and VPADDB instructions add packed byte integers from the first source operand and second source operand and store the packed integer results in the destination operand. When an individual result is too large to be represented in 8 bits (overflow), the result is wrapped around and the low 8 bits are written to the destination operand (that is, the carry is ignored).
PD>https://www.felixcloutier.com/x86/paddb:paddw:paddd:paddq
Да, точно, про этот вариант я забыл
PD>Кстати, есть intrinsic _m_paddb
PD>https://learn.microsoft.com/en-us/cpp/intrinsics/x86-intrinsics-list?view=msvc-170
К сожалению, в дотнете нету MMX-интринсиков.
Ладно, попробуем зайти с другого конца.