1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- {$ASMMODE intel}
- {$define HAVE_DETRANSFORM}
- {
- procedure Tbzip2_decode_stream.detransform;
- var a:cardinal;
- p,q,r:Pcardinal;
- begin
- a:=0;
- p:=@tt^[0];
- q:=p+tt_count;
- while p<>q do
- begin
- r:=@tt^[cftab[p^ and $ff]];
- inc(cftab[p^ and $ff]);
- r^:=r^ or a;
- inc(a,256);
- inc(p);
- end;
- end;
- }
- {const c:cardinal=0;
- procedure mcount;external name 'mcount';}
- procedure Tbzip2_decode_stream.detransform;assembler;
- asm
- { mov edx,offset c
- call mcount}
- xor edx,edx
- lea ebx,[esi+Tbzip2_decode_stream.cftab]
- mov ecx,[esi+Tbzip2_decode_stream.tt_count]
- push esi
- push ebp
- mov esi,[esi+Tbzip2_decode_stream.tt]
- mov edi,esi
- lea ebp,[4*ecx+esi]
- jmp @a2
- @a1:
- movzx eax,byte [esi]
- mov ecx,[ebx+4*eax]
- inc dword [ebx+4*eax]
- or [edi+4*ecx],edx
- add edx,$100
- add esi,4
- @a2:
- cmp esi,ebp
- jne @a1
- pop ebp
- pop esi
- end ['eax','ebx','ecx','edx','edi'];
|