Re: Fastcode Pos B&V 5.0
From: Aleksandr Sharahov (alsha-on-mail333.com)
Date: 01/12/05
- Next message: Eric Grange: "Re: Delphi 2005"
- Previous message: Dennis: "Re: Fastcode Pos B&V 5.0"
- In reply to: Dennis: "Re: Fastcode Pos B&V 5.0"
- Next in thread: Dennis: "Re: Fastcode Pos B&V 5.0"
- Reply: Dennis: "Re: Fastcode Pos B&V 5.0"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Wed, 12 Jan 2005 09:59:11 +0300
Hi Dennis,
Here is CompareTextShaAsm3.
It's fastest on my PC.
--
regards
Aleksandr
function CompareTextShaAsm3_a(const S1, S2: string): Integer;
asm
test eax, eax
jz @nil1
test edx, edx
jnz @ptrok
@nil2: mov eax, [eax-4]
ret
@nil1: test edx, edx
jz @nil0
sub eax, [edx-4]
@nil0: ret
@ptrok: push edi
push ebx
xor edi, edi
mov ebx, [eax-4]
mov ecx, ebx
sub ebx, [edx-4]
adc edi, -1
push ebx
and ebx, edi
mov edi, eax
sub ebx, ecx
jge @len
@lenok: sub edi, ebx
sub edx, ebx
@loop: mov eax, [ebx+edi]
mov ecx, [ebx+edx]
cmp eax, ecx
jne @byte0
@same: add ebx, 4
jl @loop
@len: pop eax
pop ebx
pop edi
ret
@loop2: mov eax, [ebx+edi]
mov ecx, [ebx+edx]
cmp eax, ecx
je @same
@byte0: cmp al, cl
je @byte1
and eax, $FF
and ecx, $FF
sub eax, 'a'
sub ecx, 'a'
cmp al, 'z'-'a'
ja @up0a
sub eax, 'a'-'A'
@up0a: cmp cl, 'z'-'a'
ja @up0c
sub ecx, 'a'-'A'
@up0c: sub eax, ecx
jnz @done
mov eax, [ebx+edi]
mov ecx, [ebx+edx]
@byte1: cmp ah, ch
je @byte2
and eax, $FF00
and ecx, $FF00
sub eax, 'a'*256
sub ecx, 'a'*256
cmp ah, 'z'-'a'
ja @up1a
sub eax, ('a'-'A')*256
@up1a: cmp ch, 'z'-'a'
ja @up1c
sub ecx, ('a'-'A')*256
@up1c: sub eax, ecx
jnz @done
mov eax, [ebx+edi]
mov ecx, [ebx+edx]
@byte2: add ebx, 2
jnl @len2
shr eax, 16
shr ecx, 16
cmp al, cl
je @byte3
and eax, $FF
and ecx, $FF
sub eax, 'a'
sub ecx, 'a'
cmp al, 'z'-'a'
ja @up2a
sub eax, 'a'-'A'
@up2a: cmp cl, 'z'-'a'
ja @up2c
sub ecx, 'a'-'A'
@up2c: sub eax, ecx
jnz @done
movzx eax, word ptr [ebx+edi]
movzx ecx, word ptr [ebx+edx]
@byte3: cmp ah, ch
je @byte4
and eax, $FF00
and ecx, $FF00
sub eax, 'a'*256
sub ecx, 'a'*256
cmp ah, 'z'-'a'
ja @up3a
sub eax, ('a'-'A')*256
@up3a: cmp ch, 'z'-'a'
ja @up3c
sub ecx, ('a'-'A')*256
@up3c: sub eax, ecx
jnz @done
@byte4: add ebx, 2
jl @loop2
@len2: pop eax
pop ebx
pop edi
ret
@done: pop ecx
pop ebx
pop edi
end;
- Next message: Eric Grange: "Re: Delphi 2005"
- Previous message: Dennis: "Re: Fastcode Pos B&V 5.0"
- In reply to: Dennis: "Re: Fastcode Pos B&V 5.0"
- Next in thread: Dennis: "Re: Fastcode Pos B&V 5.0"
- Reply: Dennis: "Re: Fastcode Pos B&V 5.0"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|