ОПТИМИЗАЦИЯ
6.3. Использование инструкций MMX
Если вкратце (а по-другому и не выйдет) с помощью MMX можно довольно неплохо разогнать некоторые медленные операции - например, сделать RGB-освещение. Или текстурирование с билинейной фильтрацией. Здесь я только продемонстрирую эти два примера; всяческие дальнейшие применения - на откуп читателю.
Пример внутреннего цикла с освещением через инструкции MMX: mov eax,u ; 24:8 fixedpoint mov ebx,v ; 24:8 fixedpoint mov ecx,length xor edx,edx mov esi,texture mov edi,outputbuffer movq mm1,light ; RGB-освещенность, qword ; (4 штуки 0:9 fixedpoint) movq mm2,delta_light ; изменение освещенности inner: mov dl,ah ; dl = (u >> 8) add eax,du ; u += du mov dh,bh ; dh = (v >> 8) add ebx,dv ; v += dv movd mm0,[esi+4*edx] ; грузим пиксел punpcklbw mm0,mm0 ; распаковываем пиксел psrlw mm0,1 ; для того, чтобы были ; беззнаковые числа pmulhw mm0,mm1 ; умножаем RGB на RGB-освещенность add edi,4 dec ecx packuswb mm0,mm0 ; пакуем пиксел обратно paddw mm1,mm2 ; light += delta_light movd [edi-4],mm0 jnz inner
Этот цикл дает после некоторой дальнейшей оптимизации 7 тактов на пиксел - зато с текстурированием и полноценным RGB-освещением.