]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm
1. Updated function headers for all assembly function
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibMmx / Ia32 / SetMem32.asm
index 7f24fcd74425c0b5b53b907ff596e96d053cb4d6..c2e4869e474568e4d0d4114704978e607c6a9503 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem32 (\r
+;  EFIAPI\r
+;  InternalMemSetMem32 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT32 Value\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
-InternalMemSetMem32 PROC    USES    edi\r
-    mov     edx, [esp + 12]\r
-    mov     edi, [esp + 8]\r
-    mov     ecx, edx\r
-    shr     ecx, 1\r
-    movd    mm0, [esp + 16]\r
-    mov     eax, edi\r
+InternalMemSetMem32 PROC\r
+    mov     eax, [esp + 4]              ; eax <- Buffer as return value\r
+    mov     ecx, [esp + 8]              ; ecx <- Count\r
+    movd    mm0, [esp + 12]             ; mm0 <- Value\r
+    shr     ecx, 1                      ; ecx <- number of qwords to set\r
+    mov     edx, eax                    ; edx <- Buffer\r
     jz      @SetDwords\r
-    pshufw  mm0, mm0, 44h\r
+    movq    mm1, mm0\r
+    psllq   mm1, 32\r
+    por     mm0, mm1\r
 @@:\r
-    movntq  [edi], mm0\r
-    add     edi, 8\r
+    movq    [edx], mm0\r
+    lea     edx, [edx + 8]              ; use "lea" to avoid change in flags\r
     loop    @B\r
-    mfence\r
 @SetDwords:\r
-    test    dl, 1\r
-    jz      @F\r
-    movd    [edi], mm0\r
+    jnc     @F\r
+    movd    [edx], mm0\r
 @@:\r
     ret\r
 InternalMemSetMem32 ENDP\r