Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-19629
Bel
2003-03-25 10:11
2003.04.07
Чем отличаются классы и интерфейсы?


9-19399
seemann
2002-11-01 23:05
2003.04.07
Одевание спрайтов


3-19490
АлеКо
2003-03-18 09:10
2003.04.07
Работа с dbf (clipper)


14-19847
Tundra
2003-03-21 08:57
2003.04.07
CRC - обработка файлов


6-19742
BLooDMaN
2003-02-13 12:10
2003.04.07
Запуск из программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский