From db8f40e294c3ab4a8079619da71b6e41dea8044a Mon Sep 17 00:00:00 2001 From: bxing Date: Wed, 12 Jul 2006 09:23:28 +0000 Subject: 1. Added '#pragma pack' directive in BaseLib.h for the structure IA32_DESCRIPTOR 2. Updated SetMem64.asm's to remove any SSE3 instructions. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@901 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm | 14 +++++------ MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm | 28 +++++++++++----------- MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm | 28 ++++++++++------------ 3 files changed, 34 insertions(+), 36 deletions(-) (limited to 'MdePkg/Library') diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm index b607608505..310f418d0c 100644 --- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm +++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm @@ -34,14 +34,14 @@ ; IN UINT64 Value ; ) ;------------------------------------------------------------------------------ -InternalMemSetMem64 PROC USES edi - movq mm0, [esp + 16] - mov ecx, [esp + 12] - mov edi, [esp + 8] - mov eax, edi +InternalMemSetMem64 PROC + mov eax, [esp + 4] + mov ecx, [esp + 8] + movq mm0, [esp + 12] + mov edx, eax @@: - movntq [edi], mm0 - add edi, 8 + movntq [edx], mm0 + add edx, 8 loop @B mfence ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm index 1ddc7ea191..c5d75c6f2b 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm @@ -28,34 +28,34 @@ ;------------------------------------------------------------------------------ ; VOID * -; _mem_SetMem64 ( +; InternalMemSetMem64 ( ; IN VOID *Buffer, ; IN UINTN Count, ; IN UINT64 Value ; ) ;------------------------------------------------------------------------------ -InternalMemSetMem64 PROC USES edi - mov ecx, [esp + 12] - mov edi, [esp + 8] - test edi, 8 - DB 0f2h, 0fh, 12h, 44h, 24h, 16 ; movddup xmm0, [esp + 16] +InternalMemSetMem64 PROC + mov eax, [esp + 4] + mov ecx, [esp + 8] + test al, 8 + mov edx, eax + movq xmm0, [esp + 12] jz @F - movq [edi], xmm0 - add edi, 8 + movq [edx], xmm0 + add edx, 8 dec ecx @@: - mov edx, ecx shr ecx, 1 jz @SetQwords + movlhps xmm0, xmm0 @@: - movntdq [edi], xmm0 - add edi, 16 + movntdq [edx], xmm0 + lea edx, [edx + 16] loop @B mfence @SetQwords: - test dl, 1 - jz @F - movq [edi], xmm0 + jnc @F + movq [edx], xmm0 @@: ret InternalMemSetMem64 ENDP diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm index 8b33386ad0..ef94c562b5 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm @@ -25,35 +25,33 @@ ;------------------------------------------------------------------------------ ; VOID * -; _mem_SetMem64 ( +; InternalMemSetMem64 ( ; IN VOID *Buffer, ; IN UINTN Count, -; IN UINT8 Value +; IN UINT64 Value ; ) ;------------------------------------------------------------------------------ -InternalMemSetMem64 PROC USES rdi - mov rdi, rcx - mov r9, rcx - test cl, 8 +InternalMemSetMem64 PROC + mov rax, rcx + test dl, 8 + xchg rcx, rdx jz @F - mov [rdi], r8 - add rdi, 8 - dec rdx + mov [rdx], r8 + add rdx, 8 + dec rcx @@: - mov rcx, rdx shr rcx, 1 jz @SetQwords movd xmm0, r8 movlhps xmm0, xmm0 @@: - movntdq [rdi], xmm0 - add rdi, 16 + movntdq [rdx], xmm0 + lea rdx, [rdx + 16] loop @B mfence @SetQwords: - test dl, 1 - jz @F - mov [rdi], r8 + jnc @F + mov [rdx], r8 @@: ret InternalMemSetMem64 ENDP -- cgit v1.2.3