]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm
ArmPkg/ArmDisassemblerLib: fix check for MSR instruction
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / Ia32 / SetMem64.asm
index 1ddc7ea191b9d0d8744b42a5a6f1e03393c75d9e..d6f52a0239d9cd50c323169325ba37498aac6c54 100644 (file)
@@ -1,10 +1,10 @@
 ;------------------------------------------------------------------------------\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