Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

Оптимизатор и векторизатор   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
14-19856
Polevi
2003-03-21 11:27
2003.04.07
Форум тормозит, господа хостеры, сделайте что нибудь


3-19481
dtm
2003-03-18 10:51
2003.04.07
Создание Yaffil Embedded - приложения


1-19640
zaratustra
2003-03-25 15:18
2003.04.07
Печать в текстовом режиме в Delphi


1-19637
Жорик
2003-03-25 12:44
2003.04.07
Помогите побороть глюк Делфей 6 и 7-го....


3-19431
ArtemB
2003-03-18 12:43
2003.04.07
Работа с базами