mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 20:09:27 +02:00
+ added an i8086 asm optimized implementation of fpc_pchar_length
git-svn-id: trunk@32113 -
This commit is contained in:
parent
35ff024f03
commit
3d2919acae
@ -432,6 +432,38 @@ end;
|
|||||||
{$endif FPC_SYSTEM_HAS_COMPAREDWORD}
|
{$endif FPC_SYSTEM_HAS_COMPAREDWORD}
|
||||||
|
|
||||||
|
|
||||||
|
{$ifndef FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||||
|
{$define FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||||
|
function fpc_pchar_length(p:pchar):sizeint;assembler;nostackframe;[public,alias:'FPC_PCHAR_LENGTH']; compilerproc;
|
||||||
|
asm
|
||||||
|
mov bx, sp
|
||||||
|
{$ifdef FPC_X86_DATA_NEAR}
|
||||||
|
mov ax, ss:[bx + 2 + extra_param_offset] // p
|
||||||
|
test ax, ax
|
||||||
|
jz @@Done
|
||||||
|
xchg ax, di
|
||||||
|
mov ax, ds
|
||||||
|
mov es, ax
|
||||||
|
{$else FPC_X86_DATA_NEAR}
|
||||||
|
les di, ss:[bx + 2 + extra_param_offset] // p
|
||||||
|
mov ax, es
|
||||||
|
or ax, di
|
||||||
|
jz @@Done
|
||||||
|
{$endif FPC_X86_DATA_NEAR}
|
||||||
|
mov cx, 0FFFFh
|
||||||
|
xor ax, ax
|
||||||
|
{$ifdef FPC_ENABLED_CLD}
|
||||||
|
cld
|
||||||
|
{$endif FPC_ENABLED_CLD}
|
||||||
|
repne scasb
|
||||||
|
dec ax
|
||||||
|
dec ax
|
||||||
|
sub ax, cx
|
||||||
|
@@Done:
|
||||||
|
end;
|
||||||
|
{$endif FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||||
|
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_SPTR}
|
{$define FPC_SYSTEM_HAS_SPTR}
|
||||||
Function Sptr : Pointer;assembler;nostackframe;
|
Function Sptr : Pointer;assembler;nostackframe;
|
||||||
asm
|
asm
|
||||||
|
Loading…
Reference in New Issue
Block a user