您的位置:首页 > 编程语言 > Delphi

(转)DELPHI求乱序数组最小值快速算法(Delphi MMX优化算法应用之三)

2009-11-04 09:41 411 查看
type

PMyList = ^TMylist;

TMylist = array of word;

function GetMinValue(List: PMyList):Word; stdcall;

var

ForCount, ListCount,i: Dword;

MAXVaule: int64;

List0Address: Dword;

begin

Result := $7FFF;

ListCount := High(List^) + 1;

if (ListCount < 16) or ((ListCount mod 16)<>0) then

begin

for I := 0 to ListCount - 1 do

begin

if List^[i] < Result then Result := List^[i];

end;

end else

begin

MAXVaule := $7FFF7FFF7FFF7FFF;

List0Address := Dword(@List^[0]);

ForCount := ListCount div 16; //4*MMX

asm

push eax

push ecx

push esi

mov esi, List0Address //开始地址

mov ecx, ForCount //长度

MOVQ MM0,MAXVaule

mov eax,0

@CmpLoop:

prefetchnta [esi + eax + 1024] // fetch ahead by 1024 bytes

movq mm1, qword [esi+eax]

movq mm2, qword [esi+eax+8]

movq mm3, qword [esi+eax+16]

movq mm4, qword [esi+eax+24]

PMINSW MM0,MM1

PMINSW MM0,MM2

PMINSW MM0,MM3

PMINSW MM0,MM4

add eax,32

sub ecx, 1

jnz @CmpLoop

MOVQ MM1,MM0

PSRLQ MM1,$20 //右移

PMINSW MM0,MM1

MOVQ MM1,MM0

PSRLQ MM1,$10 //右移

PMINSW MM0,MM1

Movd eax,mm0

Mov Result,AX

Sfence

Emms

pop esi

pop ecx

pop eax

end;

end;

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐