;------------------------------------------------------------------------------\r
;\r
-; Copyright (c) 2006, Intel Corporation\r
-; All rights reserved. This program and the accompanying materials\r
+; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
+; This program and the accompanying materials\r
; are licensed and made available under the terms and conditions of the BSD License\r
; which accompanies this distribution. The full text of the license may be found at\r
-; http://opensource.org/licenses/bsd-license.php\r
+; http://opensource.org/licenses/bsd-license.php.\r
;\r
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
;------------------------------------------------------------------------------\r
; VOID *\r
-; _mem_SetMem64 (\r
+; EFIAPI\r
+; InternalMemSetMem64 (\r
; IN VOID *Buffer,\r
; IN UINTN Count,\r
; IN UINT64 Value\r
; )\r
;------------------------------------------------------------------------------\r
-InternalMemSetMem64 PROC USES edi\r
- mov ecx, [esp + 12]\r
- mov edi, [esp + 8]\r
- test edi, 8\r
- DB 0f2h, 0fh, 12h, 44h, 24h, 16 ; movddup xmm0, [esp + 16]\r
+InternalMemSetMem64 PROC\r
+ mov eax, [esp + 4] ; eax <- Buffer\r
+ mov ecx, [esp + 8] ; ecx <- Count\r
+ test al, 8\r
+ mov edx, eax\r
+ movq xmm0, qword ptr [esp + 12]\r
jz @F\r
- movq [edi], xmm0\r
- add edi, 8\r
+ movq qword ptr [edx], xmm0\r
+ add edx, 8\r
dec ecx\r
@@:\r
- mov edx, ecx\r
shr ecx, 1\r
jz @SetQwords\r
+ movlhps xmm0, xmm0\r
@@:\r
- movntdq [edi], xmm0\r
- add edi, 16\r
+ movntdq [edx], xmm0\r
+ lea edx, [edx + 16]\r
loop @B\r
mfence\r
@SetQwords:\r
- test dl, 1\r
- jz @F\r
- movq [edi], xmm0\r
+ jnc @F\r
+ movq qword ptr [edx], xmm0\r
@@:\r
ret\r
InternalMemSetMem64 ENDP\r