1. Updated function headers for all assembly function

2. Optimized register usage in SetMemXX functions in all lib instances
3. Fixed a logical error in CopyMem for all lib instances


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1139 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
bxing
2006-07-28 07:28:19 +00:00
parent 27169a56e6
commit eb227e96bd
106 changed files with 1006 additions and 457 deletions

View File

@@ -21,38 +21,45 @@
#
#------------------------------------------------------------------------------
.386:
.code:
.global _InternalMemCopyMem
#------------------------------------------------------------------------------
# VOID *
# EFIAPI
# InternalMemCopyMem (
# IN VOID *Destination,
# IN VOID *Source,
# IN UINTN Count
# );
#------------------------------------------------------------------------------
_InternalMemCopyMem:
push %esi
push %edi
movl 16(%esp),%esi # esi <- Source
movl 12(%esp),%edi # edi <- Destination
movl 20(%esp),%edx # edx <- Count
leal -1(%edi,%edx),%eax # eax <- End of Destination
cmpl %edi,%esi
movl 16(%esp), %esi # esi <- Source
movl 12(%esp), %edi # edi <- Destination
movl 20(%esp), %edx # edx <- Count
leal -1(%esi, %edx), %eax # eax <- End of Source
cmpl %edi, %esi
jae L0
cmpl %esi,%eax
cmpl %edi, %eax
jae @CopyBackward # Copy backward if overlapped
L0:
movl %edx,%ecx
andl $3,%edx
shrl $2,%ecx
L0:
movl %edx, %ecx
andl $3, %edx
shrl $2, %ecx
rep
movsl # Copy as many Dwords as possible
jmp @CopyBytes
@CopyBackward:
movl %eax,%edi # edi <- End of Destination
leal -1(%esi,%edx),%esi # esi <- End of Source
@CopyBackward:
movl %eax, %esi # esi <- End of Source
leal -1(%edi, %edx), %edi # edi <- End of Destination
std
@CopyBytes:
movl %edx,%ecx
@CopyBytes:
movl %edx, %ecx
rep
movsb # Copy bytes backward
cld
movl 12(%esp),%eax # eax <- Destination as return value
movl 12(%esp), %eax # eax <- Destination as return value
pop %edi
pop %esi
ret