Я думаю, что нашел проблему:
Аргументы инструкций распаковки находятся в неправильном порядке. Если вы посмотрите на регистры в целом, похоже, что отдельные символы расширяются от нуля до шортов, но на самом деле они заполнены нулями - . Просто поменяйте местами mm0 и другой регистр в каждом случае, и он должен работать.
Кроме того, вам не нужно насыщенное добавление, достаточно обычного PADDW. Максимальное значение, которое вы получите: 0xff + 0xff = 0x01fe, которое не должно быть насыщенным.
Редактировать: Более того, PACKSSWB не совсем делает то, что вы хотите. PACKUSWB - правильная инструкция, насыщение приведет к неверным результатам.
Вот решение (также заменил смены на логические и в некоторых местах использовали разные псевдорегистры):
mm0=pxor(mm0,mm0) =[00,00,00,00,00,00,00,00]
mm1 =[a0,10,ff,18,7f,f0,ff,cc]
mm2 =[c0,20,ff,00,70,26,ff,01]
mm3=punpcklbw(mm1,mm0) =[00a0,0010,00ff,0018]
mm4=punpckhbw(mm1,mm0) =[007f,00f0,00ff,00cc]
mm5=punpcklbw(mm2,mm0) =[00c0,0020,00ff,0000]
mm6=punpckhbw(mm2,mm0) =[0070,0026,00ff,0001]
mm5=paddw(mm3,mm5) =[0160,0030,01fe,0018]
mm6=paddw(mm4,mm6) =[00ef,0116,01fe,00cd]
mm3=psrlwi(mm5,1) =[00b0,0018,00ff,000c]
mm4=psrlwi(mm6,1) =[0077,008b,00ff,0066]
mm1=packuswb(mm3,mm4) =[b0,18,ff,0c,77,8b,ff,66]