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

View File

@ -550,7 +550,7 @@ BasePrintLibVSPrint (
//
// 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
// 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);
}