Форум: "Потрепаться";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизОптимизатор и векторизатор Найти похожие ветки
← →
REA (2003-03-21 15:30) [0]Не находил ли многоуважаемый all оптимизатор кода для Delphi? Не находил ли векторизатора MMX или др. наборов инструкций?
← →
NetBreaker666 (2003-03-21 17:50) [1]
А не пытался ли многоуважаемый REA делать это сам:
(Правда это для TMT паскаля пару лет назад писал.)
Unit MMXColor;
Interface
Type MMXColor32=DWord;
Procedure MMXC_Add(Var X:DWord;Deltax:Dword);// X=X+Y
Function MMXC_Plus(X,Y:DWord):Dword; //=X+Y
Procedure MMXC_Sub(Var X:DWord;Deltax:Dword);// X=X-Y
Function MMXC_Minus(X,Y:DWord):Dword; //=X-Y
Procedure MMXC_Average1(var X:DWord;Y:DWord); //X=(X+Y)/2
Function MMXC_Average(X,Y:DWord):DWord; //=(X+Y)/2
{Procedure MMXC_PutTransparent1Add(Var X:DWord;Y:DWord;U,T:Word);
//X=(X*U)/T+(Y*(T-U))/T ; T>>U}
Implementation
{$MMX+}
Procedure MMXC_Add(Var X:DWord;Deltax:Dword);
Assembler;
Asm
mov ebx,X
MOVD MM1,[ebx]
MOVD MM2,Deltax
PADDUSB MM1,MM2
MOVD [ebx],MM1
EMMS
End;
Function MMXC_Plus(X,Y:Dword):DWord;
Assembler;
Asm
movd MM1,X
movd MM2,Y
PADDUSB MM1,MM2
movd eax,MM1
EMMS
End;
Procedure MMXC_Sub(Var X:DWord;Deltax:Dword);
Assembler;
Asm
mov ebx,X
MOVD MM1,[ebx]
MOVD MM2,Deltax
PSUBUSB MM1,MM2
MOVD [ebx],MM1
EMMS
End;
Function MMXC_Minus(X,Y:Dword):DWord;
Assembler;
Asm
movd MM1,X
movd MM2,Y
PSUBUSB MM1,MM2
movd eax,MM1
EMMS
End;
Procedure MMXC_Average1(var X:DWord;Y:DWord);
Assembler;
Asm
mov ebx,X
movd mm1,[ebx]
movd mm2,Y
PAVGUSB mm1,mm2
movd [ebx],mm1
EMMS
End;
Function MMXC_Average(X,Y:DWord):DWord;
Assembler;
Asm
movd mm1,X
movd mm2,y
PAVGUSB mm1,mm2
movd eax,mm1
EMMS
End;
{Procedure MMXC_PutTransparent1Add(Var X:DWord;Y:DWord;U,T:Word);
Assembler;
//X=(X*U+Y*(T-U))/T
var TU:Word;
T4,U4,TU4:Array[0..3] of Word;
Asm
mov ax,T
mov bx,U
mov T4.Word[0],ax
mov T4.Word[2],ax
mov T4.Word[4],ax
mov T4.Word[6],ax
sub ax,bx
mov TU,ax //TU=T-U
mov TU4.Word[0],ax
mov TU4.Word[2],ax
mov TU4.Word[4],ax
mov TU4.Word[6],ax
mov U4.Word[0],bx
mov U4.Word[2],bx
mov U4.Word[4],bx
mov U4.Word[6],bx
mov ebx,x
xor eax,eax
movd mm0,eax //MMX0=0
movd mm1,[ebx]
PUNPCKLBW mm1,mm0 // P Unpack Low Bytes to Words
movd mm2,Y
PUNPCKLBW mm2,mm0 // ___
// mm3=T,T,T,T
// mm4=U,U,U,U
// mm5=TU,TU,TU,TU
movq mm3,T4
movq mm4,U4
movq mm5,TU4
PMULLW mm1,mm4
PMULLW mm2,mm5
PDIVW mm1,mm2
End; }
End.
← →
NetBreaker666 (2003-03-21 17:52) [2]Да и зачем ? Есть же Intel C++ compiler, все критические моменты всеравно надо на сях писать... а лучше на асме.
Ой.... последняя процедура не доделана... забыл тогда наверное :(
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c