+Added checking for nil on most functions.

This commit is contained in:
michael 1999-04-09 07:58:41 +00:00
parent 66bb181cf5
commit 7e68180e14

View File

@ -21,6 +21,8 @@ function strcopy(dest,source : pchar) : pchar;assembler;
asm asm
cld cld
movl source,%edi movl source,%edi
orl %edi,%edi
jz .LStrCopyNil
movl $0xffffffff,%ecx movl $0xffffffff,%ecx
xorb %al,%al xorb %al,%al
repne repne
@ -36,6 +38,7 @@ asm
andl $3,%ecx andl $3,%ecx
rep rep
movsb movsb
.LStrCopyNil:
movl dest,%eax movl dest,%eax
end; end;
@ -90,26 +93,33 @@ end ['EAX','ECX','ESI','EDI'];
function strlen(p : pchar) : longint;assembler; function strlen(p : pchar) : longint;assembler;
asm asm
cld cld
movl p,%edi
movl $0xffffffff,%ecx
xorl %eax,%eax xorl %eax,%eax
movl p,%edi
orl %edi,%edi
jz .LNil
movl $0xffffffff,%ecx
repne repne
scasb scasb
movl $0xfffffffe,%eax movl $0xfffffffe,%eax
subl %ecx,%eax subl %ecx,%eax
.LNil:
end ['EDI','ECX','EAX']; end ['EDI','ECX','EAX'];
function strend(p : pchar) : pchar;assembler; function strend(p : pchar) : pchar;assembler;
asm asm
cld cld
xorl %eax,%eax
movl p,%edi movl p,%edi
orl %edi,%edi
jz .LStrEndNil
movl $0xffffffff,%ecx movl $0xffffffff,%ecx
xorl %eax,%eax xorl %eax,%eax
repne repne
scasb scasb
movl %edi,%eax movl %edi,%eax
decl %eax decl %eax
.LStrEndNil:
end ['EDI','ECX','EAX']; end ['EDI','ECX','EAX'];
@ -231,10 +241,12 @@ end ['EAX','ECX','ESI','EDI'];
function strscan(p : pchar;c : char) : pchar;assembler; function strscan(p : pchar;c : char) : pchar;assembler;
asm asm
xorl %eax,%eax
movl p,%edi movl p,%edi
orl %edi,%edi
jz .LSTRSCAN
movl $0xffffffff,%ecx movl $0xffffffff,%ecx
cld cld
xorb %al,%al
repne repne
scasb scasb
not %ecx not %ecx
@ -252,7 +264,10 @@ end;
function strrscan(p : pchar;c : char) : pchar;assembler; function strrscan(p : pchar;c : char) : pchar;assembler;
asm asm
xorl %eax,%eax
movl p,%edi movl p,%edi
orl %edi,%edi
jz .LSTRRSCAN
movl $0xffffffff,%ecx movl $0xffffffff,%ecx
cld cld
xorb %al,%al xorb %al,%al
@ -278,6 +293,8 @@ end;
function strupper(p : pchar) : pchar;assembler; function strupper(p : pchar) : pchar;assembler;
asm asm
movl p,%esi movl p,%esi
orl %esi,%esi
jz .LStrUpperNil
movl %esi,%edi movl %esi,%edi
.LSTRUPPER1: .LSTRUPPER1:
lodsb lodsb
@ -290,6 +307,7 @@ asm
stosb stosb
orb %al,%al orb %al,%al
jnz .LSTRUPPER1 jnz .LSTRUPPER1
.LStrUpperNil:
movl p,%eax movl p,%eax
end; end;
@ -297,6 +315,8 @@ end;
function strlower(p : pchar) : pchar;assembler; function strlower(p : pchar) : pchar;assembler;
asm asm
movl p,%esi movl p,%esi
orl %esi,%esi
jz .LStrLowerNil
movl %esi,%edi movl %esi,%edi
.LSTRLOWER1: .LSTRLOWER1:
lodsb lodsb
@ -309,12 +329,16 @@ asm
stosb stosb
orb %al,%al orb %al,%al
jnz .LSTRLOWER1 jnz .LSTRLOWER1
.LStrLowerNil:
movl p,%eax movl p,%eax
end; end;
{ {
$Log$ $Log$
Revision 1.3 1999-03-30 16:58:49 peter Revision 1.4 1999-04-09 07:58:41 michael
+Added checking for nil on most functions.
Revision 1.3 1999/03/30 16:58:49 peter
* use assembler and remove all rets * use assembler and remove all rets
Revision 1.2 1999/02/25 10:07:01 michael Revision 1.2 1999/02/25 10:07:01 michael