diff options
author | bxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-07-28 07:28:19 +0000 |
---|---|---|
committer | bxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-07-28 07:28:19 +0000 |
commit | eb227e96bd06a5b0f2f933187a679e7fb3382cd9 (patch) | |
tree | b16e46f494d8d9d8552d8d0e882ad78019934071 /MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S | |
parent | 27169a56e67556796ab0410c8917436dc9aa2abf (diff) | |
download | edk2-platforms-eb227e96bd06a5b0f2f933187a679e7fb3382cd9.tar.xz |
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
Diffstat (limited to 'MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S')
-rw-r--r-- | MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S index 8a893f893a..4e93915caa 100644 --- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S +++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S @@ -21,44 +21,43 @@ # #------------------------------------------------------------------------------ - .686: - #.MODEL flat,C - .xmm: - .code: +.global _InternalMemSetMem #------------------------------------------------------------------------------ # VOID * -# _mem_SetMem ( +# InternalMemSetMem ( # IN VOID *Buffer, # IN UINTN Count, # IN UINT8 Value # ) #------------------------------------------------------------------------------ -.global _InternalMemSetMem _InternalMemSetMem: push %edi + movb 16(%esp), %al + movb %al, %ah + shrdl $16, %eax, %edx + shldl $16, %edx, %eax movl 12(%esp), %ecx # ecx <- Count movl 8(%esp), %edi # edi <- Buffer movl %ecx, %edx + andl $7, %edx shrl $3, %ecx # # of Qwords to set - movb 16(%esp), %al # al <- Value - jz @SetBytes - movb %al, %ah # ax <- Value | (Value << 8) - pushl %ecx - pushl %ecx + jz L1 + addl $0x-10, %esp movq %mm0, (%esp) # save mm0 + movq %mm1, 8(%esp) # save mm1 movd %eax, %mm0 - pshufw $0x0,%mm0,%mm0 -L0: - movntq %mm0, (%edi) + movd %eax, %mm1 + psllq $32, %mm0 + por %mm1, %mm0 # fill mm0 with 8 Value's +L0: + movq %mm0, (%edi) addl $8, %edi - loop L0 - mfence + loopl L0 movq (%esp), %mm0 # restore mm0 - popl %ecx # stack cleanup - popl %ecx -@SetBytes: - andl $7, %edx + movq 8(%esp), %mm1 # restore mm1 + addl $0x10, %esp # stack cleanup +L1: movl %edx, %ecx rep stosb |