1.Fix SetMem64.S to not use SSE3 instruction

2.Make sure NULL-terminator can be appended.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@945 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qhuang8 2006-07-13 04:19:34 +00:00
parent 12e17a0aee
commit d08b357f8a
3 changed files with 61 additions and 65 deletions

View File

@ -11,7 +11,7 @@
# #
# Module Name: # Module Name:
# #
# SetMem64.asm # SetMem64.S
# #
# Abstract: # Abstract:
# #
@ -21,43 +21,39 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
.686:
#.MODEL flat,C
.xmm:
.code:
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# VOID * # VOID *
# _mem_SetMem64 ( # InternalMemSetMem64 (
# IN VOID *Buffer, # IN VOID *Buffer,
# IN UINTN Count, # IN UINTN Count,
# IN UINT64 Value # IN UINT64 Value
# ) # )
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
.global _InternalMemSetMem64 .globl _InternalMemSetMem64
_InternalMemSetMem64: _InternalMemSetMem64:
push %edi movl 4(%esp), %eax
movl 12(%esp), %ecx movl 8(%esp), %ecx
movl 8(%esp), %edi testb $8, %al
testl $8, %edi movl %eax, %edx
movddup 16(%esp), %xmm0 movq 0xc(%esp), %xmm0
jz L0 jz L1
movq %xmm0, (%edi) movq %xmm0, (%edx)
addl $8, %edi addl $8, %edx
decl %ecx decl %ecx
L0: L1:
movl %ecx, %edx
shrl %ecx shrl %ecx
jz @SetQwords jz @SetQwords
L1: movlhps %xmm0, %xmm0
movntdq %xmm0, (%edi) L2:
addl $16, %edi movntdq %xmm0, (%edx)
loop L1 leal 16(%edx), %edx
loop L2
mfence mfence
@SetQwords: @SetQwords:
testb $1, %dl jnc L3
jz L2 movq %xmm0, (%edx)
movq %xmm0, (%edi) L3:
L2:
pop %edi
ret ret

View File

@ -550,7 +550,7 @@ BasePrintLibVSPrint (
// //
// Null terminate the Unicode or ASCII string // Null terminate the Unicode or ASCII string
// //
BasePrintLibFillBuffer (Buffer, EndBuffer, 1, 0, BytesPerOutputCharacter); BasePrintLibFillBuffer (Buffer, EndBuffer + BytesPerOutputCharacter, 1, 0, BytesPerOutputCharacter);
// //
// Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
// Unicode characters if PcdMaximumUnicodeStringLength is not zero. // Unicode characters if PcdMaximumUnicodeStringLength is not zero.

View File

@ -193,7 +193,7 @@ BasePrintLibConvertValueToString (
} }
} }
BasePrintLibFillBuffer (Buffer, EndBuffer, 1, 0, Increment); BasePrintLibFillBuffer (Buffer, EndBuffer + Increment, 1, 0, Increment);
return ((Buffer - OriginalBuffer) / Increment); return ((Buffer - OriginalBuffer) / Increment);
} }