]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.asm
1. Updated function headers for all assembly function
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibMmx / X64 / SetMem32.asm
index d835543767d0613176820be4e3908d9f884122f3..89cf175608386d6d15246be3975fb77901b38825 100644 (file)
 \r
     .code\r
 \r
-InternalMemSetMem32 PROC    USES    rdi\r
-    DB      49h, 0fh, 6eh, 0c0h        ;  movq    mm0, r8       ; mm0 <- Value\r
-    mov     rax, rcx                                            ; rax <- Buffer\r
-    mov     rdi, rax\r
-    mov     rcx, rdx\r
-    shr     rcx, 1                                      \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem32 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT32 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
+InternalMemSetMem32 PROC\r
+    DB      49h, 0fh, 6eh, 0c0h         ; movd mm0, r8 (Value)\r
+    mov     rax, rcx                    ; rax <- Buffer\r
+    xchg    rcx, rdx                    ; rcx <- Count  rdx <- Buffer\r
+    shr     rcx, 1                      ; rcx <- # of qwords to set\r
     jz      @SetDwords\r
-    DB      0fh, 70h, 0C0h, 44h        ;  pshufw  mm0, mm0, 44h\r
+    DB      0fh, 70h, 0C0h, 44h         ; pshufw mm0, mm0, 44h\r
 @@:\r
-    DB      48h, 0fh, 0e7h, 07h        ;  movntq  [rdi], mm0\r
-    add     rdi, 8\r
+    DB      0fh, 0e7h, 02h              ; movntq [rdx], mm0\r
+    lea     rdx, [rdx + 8]              ; use "lea" to avoid flag changes\r
     loop    @B\r
     mfence\r
 @SetDwords:\r
-    test    dl, 1\r
-    jz      @F\r
-    DB      0fh, 7eh, 07h              ;  movd    [rdi], mm0\r
+    jnc     @F\r
+    DB      0fh, 7eh, 02h               ; movd [rdx], mm0\r
 @@:\r
     ret\r
 InternalMemSetMem32 ENDP\r