1. Updated function headers for all assembly function
authorbxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 28 Jul 2006 07:28:19 +0000 (07:28 +0000)
committerbxing <bxing@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 28 Jul 2006 07:28:19 +0000 (07:28 +0000)
2. Optimized register usage in SetMemXX functions in all lib instances
3. Fixed a logical error in CopyMem for all lib instances

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1139 6f19259b-4bc3-4df7-8a09-765794883524

106 files changed:
MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.msa
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.asm
MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.asm
MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.asm
MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.asm
MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.asm
MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.asm
MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.asm
MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.asm
MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.asm
MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.asm
MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.asm
MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.asm [new file with mode: 0644]
MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.asm
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S
MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.asm
MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibRepStr/x64/CompareMem.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/CopyMem.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem16.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem32.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem64.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem8.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem16.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem32.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem64.asm
MdePkg/Library/BaseMemoryLibRepStr/x64/ZeroMem.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm
MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibSse2/x64/CompareMem.asm
MdePkg/Library/BaseMemoryLibSse2/x64/CopyMem.asm
MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem16.asm
MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem32.asm
MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem64.asm
MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem8.asm
MdePkg/Library/BaseMemoryLibSse2/x64/SetMem.asm
MdePkg/Library/BaseMemoryLibSse2/x64/SetMem16.asm
MdePkg/Library/BaseMemoryLibSse2/x64/SetMem32.asm
MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm
MdePkg/Library/BaseMemoryLibSse2/x64/ZeroMem.asm
MdePkg/Library/DxeMemoryLib/ZeroMemWrapper.c
MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c

index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 978a362..78eae20 100644 (file)
@@ -89,6 +89,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <Filename SupArchList="X64">X64/ScanMem16.asm</Filename>\r
     <Filename SupArchList="X64">X64/ScanMem32.asm</Filename>\r
     <Filename SupArchList="X64">X64/ScanMem64.asm</Filename>\r
+    <Filename SupArchList="X64">X64/ZeroMem.asm</Filename>\r
   </SourceFiles>\r
   <PackageDependencies>\r
     <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
index c7e0b8a..7901b82 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemCompareMem
+
+#------------------------------------------------------------------------------
+# INTN
+# EFIAPI
+# InternalMemCompareMem (
+#   IN      CONST VOID                *DestinationBuffer,
+#   IN      CONST VOID                *SourceBuffer,
+#   IN      UINTN                     Length
+#   );
+#------------------------------------------------------------------------------
 _InternalMemCompareMem:
     push    %esi
     push    %edi
@@ -45,5 +51,3 @@ _InternalMemCompareMem:
     pop     %edi
     pop     %esi
     ret
-
-
index 3cf6fe7..1d0e7fa 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    esi edi\r
     mov     esi, [esp + 12]\r
     mov     edi, [esp + 16]\r
index fff8bde..d644b34 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemCopyMem
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_CopyMem (
+#  EFIAPI
+#  InternalMemCopyMem (
 #    IN VOID   *Destination,
 #    IN VOID   *Source,
 #    IN UINTN  Count
-#    )
+#    );
 #------------------------------------------------------------------------------
-.global _InternalMemCopyMem
 _InternalMemCopyMem:
     push    %esi
     push    %edi
     movl    16(%esp), %esi              # esi <- Source
     movl    12(%esp), %edi              # edi <- Destination
     movl    20(%esp), %edx              # edx <- Count
-    leal    -1(%edi,%edx,), %eax        # eax <- End of Destination
+    leal    -1(%esi,%edx,), %eax        # eax <- End of Source
     cmpl    %edi, %esi
     jae     L0
-    cmpl    %esi, %eax                  # Overlapped?
+    cmpl    %edi, %eax                  # Overlapped?
     jae     @CopyBackward               # Copy backward if overlapped
-L0: 
+L0:
     xorl    %ecx, %ecx
     subl    %esi, %ecx
     andl    $7, %ecx                    # ecx + esi aligns on 8-byte boundary
@@ -56,7 +53,7 @@ L0:
     subl    %ecx, %edx                  # edx <- remaining bytes to copy
     rep
     movsb
-L1: 
+L1:
     movl    %edx, %ecx
     andl    $7, %edx
     shrl    $3, %ecx                    # ecx <- # of Qwords to copy
@@ -64,22 +61,21 @@ L1:
     pushl   %eax
     pushl   %eax
     movq    %mm0, (%esp)                # save mm0
-L2: 
+L2:
     movq    (%esi), %mm0
-    movntq  %mm0, (%edi)
+    movq    %mm0, (%edi)
     addl    $8, %esi
     addl    $8, %edi
     loop    L2
-    mfence
     movq    (%esp), %mm0                # restore mm0
     popl    %ecx                        # stack cleanup
     popl    %ecx                        # stack cleanup
     jmp     @CopyBytes
-@CopyBackward: 
-    movl    %eax, %edi                  # edi <- Last byte in Destination
-    leal    -1(%esi,%edx,), %esi        # esi <- Last byte in Source
+@CopyBackward:
+    movl    %eax, %esi                  # esi <- Last byte in Source
+    leal    -1(%edi,%edx,), %edi        # edi <- Last byte in Destination
     std
-@CopyBytes: 
+@CopyBytes:
     movl    %edx, %ecx
     rep
     movsb
index b709a80..1b8b3c5 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_CopyMem (\r
+;  EFIAPI\r
+;  InternalMemCopyMem (\r
 ;    IN VOID   *Destination,\r
 ;    IN VOID   *Source,\r
 ;    IN UINTN  Count\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    esi edi\r
     mov     esi, [esp + 16]             ; esi <- Source\r
     mov     edi, [esp + 12]             ; edi <- Destination\r
     mov     edx, [esp + 20]             ; edx <- Count\r
-    lea     eax, [edi + edx - 1]        ; eax <- End of Destination\r
+    lea     eax, [esi + edx - 1]        ; eax <- End of Source\r
     cmp     esi, edi\r
     jae     @F\r
-    cmp     eax, esi                    ; Overlapped?\r
+    cmp     eax, edi                    ; Overlapped?\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
-@@:\r
-    xor     ecx, ecx\r
-    sub     ecx, esi\r
-    and     ecx, 7                      ; ecx + esi aligns on 8-byte boundary\r
-    jz      @F\r
-    cmp     ecx, edx\r
-    cmova   ecx, edx\r
-    sub     edx, ecx                    ; edx <- remaining bytes to copy\r
-    rep     movsb\r
 @@:\r
     mov     ecx, edx\r
     and     edx, 7\r
@@ -62,18 +54,17 @@ InternalMemCopyMem  PROC    USES    esi edi
     movq    [esp], mm0                  ; save mm0\r
 @@:\r
     movq    mm0, [esi]\r
-    movntq  [edi], mm0\r
+    movq    [edi], mm0\r
     add     esi, 8\r
     add     edi, 8\r
     loop    @B\r
-    mfence\r
     movq    mm0, [esp]                  ; restore mm0\r
     pop     ecx                         ; stack cleanup\r
     pop     ecx                         ; stack cleanup\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     edi, eax                    ; edi <- Last byte in Destination\r
-    lea     esi, [esi + edx - 1]        ; esi <- Last byte in Source\r
+    mov     esi, eax                    ; esi <- Last byte in Source\r
+    lea     edi, [edi + edx - 1]        ; edi <- Last byte in Destination\r
     std\r
 @CopyBytes:\r
     mov     ecx, edx\r
index e23799e..1e83064 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem16
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem16 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT16                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem16:
     push    %edi
     movl    12(%esp), %ecx
@@ -42,5 +48,3 @@ _InternalMemScanMem16:
     cmovnz  %ecx, %eax
     pop     %edi
     ret
-
-
index 7071942..57fab61 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 6b4a919..b7b93d9 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem32
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem32 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT32                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem32:
     push    %edi
     movl    12(%esp), %ecx
index e6aaf02..6ac857c 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 00f6d74..6bbb18a 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem64
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem64 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT64                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem64:
     push    %edi
     movl    12(%esp), %ecx
     movl    16(%esp), %eax
     movl    20(%esp), %edx
     movl    8(%esp), %edi
-L0: 
+L0:
     cmpl    (%edi), %eax
     leal    8(%edi), %edi
     loopne  L0
@@ -46,7 +52,7 @@ L0:
     cmpl    -4(%edi), %edx
     jecxz   L1
     jne     L0
-L1: 
+L1:
     leal    -8(%edi), %eax
     cmovne  %ecx, %eax
     pop     %edi
index f9725a4..ca54f13 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     eax, [esp + 16]\r
index 5764037..fe678fa 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem8
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem8 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT8                     Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem8:
     push    %edi
     movl    12(%esp), %ecx
index 6ae1900..a3f65b6 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 8a893f8..4e93915 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem (
+#  InternalMemSetMem (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT8  Value
 #    )
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem
 _InternalMemSetMem:
     push    %edi
+    movb    16(%esp), %al
+    movb    %al, %ah
+    shrdl   $16, %eax, %edx
+    shldl   $16, %edx, %eax
     movl    12(%esp), %ecx              # ecx <- Count
     movl    8(%esp), %edi               # edi <- Buffer
     movl    %ecx, %edx
+    andl    $7, %edx
     shrl    $3, %ecx                    # # of Qwords to set
-    movb    16(%esp), %al               # al <- Value
-    jz      @SetBytes
-    movb    %al, %ah                    # ax <- Value | (Value << 8)
-    pushl   %ecx
-    pushl   %ecx
+    jz      L1
+    addl    $0x-10, %esp
     movq    %mm0, (%esp)                # save mm0
+    movq    %mm1, 8(%esp)               # save mm1
     movd    %eax, %mm0
-    pshufw  $0x0,%mm0,%mm0
-L0: 
-    movntq  %mm0, (%edi)
+    movd    %eax, %mm1
+    psllq   $32, %mm0
+    por     %mm1, %mm0                  # fill mm0 with 8 Value's
+L0:
+    movq    %mm0, (%edi)
     addl    $8, %edi
-    loop    L0
-    mfence
+    loopl   L0
     movq    (%esp), %mm0                # restore mm0
-    popl    %ecx                        # stack cleanup
-    popl    %ecx
-@SetBytes: 
-    andl    $7, %edx
+    movq    8(%esp), %mm1               # restore mm1
+    addl    $0x10, %esp                 # stack cleanup
+L1:
     movl    %edx, %ecx
     rep
     stosb
index f2c55f1..c9c48ec 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem (\r
+;  EFIAPI\r
+;  InternalMemSetMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT8  Value\r
 ;    )\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem   PROC    USES    edi\r
+    mov     al, [esp + 16]\r
+    mov     ah, al\r
+    shrd    edx, eax, 16\r
+    shld    eax, edx, 16\r
     mov     ecx, [esp + 12]             ; ecx <- Count\r
     mov     edi, [esp + 8]              ; edi <- Buffer\r
     mov     edx, ecx\r
+    and     edx, 7\r
     shr     ecx, 3                      ; # of Qwords to set\r
-    mov     al, [esp + 16]              ; al <- Value\r
     jz      @SetBytes\r
-    mov     ah, al                      ; ax <- Value | (Value << 8)\r
-    push    ecx\r
-    push    ecx\r
+    add     esp, -10h\r
     movq    [esp], mm0                  ; save mm0\r
+    movq    [esp + 8], mm1              ; save mm1\r
     movd    mm0, eax\r
-    pshufw  mm0, mm0, 0                 ; fill mm0 with 8 Value's\r
+    movd    mm1, eax\r
+    psllq   mm0, 32\r
+    por     mm0, mm1                    ; fill mm0 with 8 Value's\r
 @@:\r
-    movntq  [edi], mm0\r
+    movq    [edi], mm0\r
     add     edi, 8\r
     loop    @B\r
-    mfence\r
     movq    mm0, [esp]                  ; restore mm0\r
-    pop     ecx                         ; stack cleanup\r
-    pop     ecx\r
+    movq    mm1, [esp + 8]              ; restore mm1\r
+    add     esp, 10h                    ; stack cleanup\r
 @SetBytes:\r
-    and     edx, 7\r
     mov     ecx, edx\r
     rep     stosb\r
     mov     eax, [esp + 8]              ; eax <- Buffer as return value\r
index bcbd49e..9898d28 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem16
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem16 (
+#  InternalMemSetMem16 (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT16 Value
 #    )
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem16
 _InternalMemSetMem16:
     push    %edi
+    movl    16(%esp), %eax
+    shrdl   $16, %eax, %edx
+    shldl   $16, %edx, %eax
     movl    12(%esp), %edx
     movl    8(%esp), %edi
     movl    %edx, %ecx
     andl    $3, %edx
     shrl    $2, %ecx
-    movl    16(%esp), %eax
-    jz      @SetWords
+    jz      L1
     movd    %eax, %mm0
-    pshufw  $0, %mm0, %mm0
-L0: 
-    movntq  %mm0, (%edi)
+    movd    %eax, %mm1
+    psllq   $32, %mm0
+    por     %mm1, %mm0
+L0:
+    movq    %mm0, (%edi)
     addl    $8, %edi
-    loop    L0
-    mfence
-@SetWords: 
+    loopl   L0
+L1:
     movl    %edx, %ecx
     rep
     stosw
index f9dc533..e934226 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem16 (\r
+;  EFIAPI\r
+;  InternalMemSetMem16 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT16 Value\r
 ;    )\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem16 PROC    USES    edi\r
+    mov     eax, [esp + 16]\r
+    shrd    edx, eax, 16\r
+    shld    eax, edx, 16\r
     mov     edx, [esp + 12]\r
     mov     edi, [esp + 8]\r
     mov     ecx, edx\r
     and     edx, 3\r
     shr     ecx, 2\r
-    mov     eax, [esp + 16]\r
     jz      @SetWords\r
     movd    mm0, eax\r
-    pshufw  mm0, mm0, 0\r
+    movd    mm1, eax\r
+    psllq   mm0, 32\r
+    por     mm0, mm1\r
 @@:\r
-    movntq  [edi], mm0\r
+    movq    [edi], mm0\r
     add     edi, 8\r
     loop    @B\r
-    mfence\r
 @SetWords:\r
     mov     ecx, edx\r
     rep     stosw\r
index 27fd617..8281652 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem32
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem32 (
+#  InternalMemSetMem32 (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT32 Value
 #    )
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem32
 _InternalMemSetMem32:
-    push    %edi
-    movl    12(%esp), %edx
-    movl    8(%esp), %edi
-    movl    %edx, %ecx
+    movl    4(%esp), %eax
+    movl    8(%esp), %ecx
+    movd    12(%esp), %mm0
     shrl    %ecx
-    movd    16(%esp), %mm0
-    movl    %edi, %eax
-    jz      @SetDwords
-    pshufw  $0x44, %mm0, %mm0
-L0: 
-    movntq  %mm0, (%edi)
-    addl    $8, %edi
-    loopl   L0
-    mfence
-@SetDwords: 
-    testb   $1, %dl
+    movl    %eax, %edx
     jz      L1
-    movd    %mm0, (%edi)
-L1: 
-    pop     %edi
+    movq    %mm0, %mm1
+    psllq   $32, %mm1
+    por     %mm1, %mm0
+L0:
+    movq    %mm0, (%edx)
+    lea     8(%edx), %edx
+    loopl   L0
+L1:
+    jnc     L2
+    movd    %mm0, (%edx)
+L2:
     ret
index 7f24fcd..c2e4869 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
index 9699581..5eef027 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem64
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem64 (
+#  InternalMemSetMem64 (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT64 Value
 #    )
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem64
 _InternalMemSetMem64:
-    push    %edi
-    movq    16(%esp), %mm0
-    movl    12(%esp), %ecx
-    movl    8(%esp), %edi
-    movl    %edi, %eax
-L0: 
-    movntq  %mm0, (%edi)
-    addl    $8, %edi
+    movl    4(%esp), %eax
+    movl    8(%esp), %ecx
+    movq    12(%esp), %mm0
+    movl    %eax, %edx
+L0:
+    movq    %mm0, (%edx)
+    lea     8(%edx), %edx
     loopl   L0
-    mfence
-    pop     %edi
     ret
index 310f418..027483b 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem64 (\r
+;  EFIAPI\r
+;  InternalMemSetMem64 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT64 Value\r
@@ -40,10 +41,9 @@ InternalMemSetMem64 PROC
     movq    mm0, [esp + 12]\r
     mov     edx, eax\r
 @@:\r
-    movntq  [edx], mm0\r
+    movq    [edx], mm0\r
     add     edx, 8\r
     loop    @B\r
-    mfence\r
     ret\r
 InternalMemSetMem64 ENDP\r
 \r
index 0bb19c7..f51ce8f 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemZeroMem
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_ZeroMem (
+#  EFIAPI
+#  InternalMemZeroMem (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count
-#    )
+#    );
 #------------------------------------------------------------------------------
-.global _InternalMemZeroMem
 _InternalMemZeroMem:
     push    %edi
     movl    8(%esp), %edi
@@ -42,12 +39,11 @@ _InternalMemZeroMem:
     shrl    $3, %ecx
     jz      @ZeroBytes
     pxor    %mm0, %mm0
-L0: 
-    movntq  %mm0, (%edi)
+L0:
+    movq    %mm0, (%edi)
     addl    $8, %edi
     loop    L0
-    mfence
-@ZeroBytes: 
+@ZeroBytes:
     andl    $7, %edx
     xorl    %eax, %eax
     movl    %edx, %ecx
index 31ef120..a75480b 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_ZeroMem (\r
+;  InternalMemZeroMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemZeroMem  PROC    USES    edi\r
     mov     edi, [esp + 8]\r
@@ -41,10 +41,9 @@ InternalMemZeroMem  PROC    USES    edi
     jz      @ZeroBytes\r
     pxor    mm0, mm0\r
 @@:\r
-    movntq  [edi], mm0\r
+    movq    [edi], mm0\r
     add     edi, 8\r
     loop    @B\r
-    mfence\r
 @ZeroBytes:\r
     and     edx, 7\r
     xor     eax, eax\r
index b8e289b..554bc07 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    rsi rdi\r
     mov     rsi, rcx\r
     mov     rdi, rdx\r
index 801cf92..b57192e 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; VOID *\r
+; EFIAPI\r
+; InternalMemCopyMem (\r
+;   OUT     VOID                      *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    rsi rdi\r
     mov     rsi, rdx                    ; rsi <- Source\r
     mov     rdi, rcx                    ; rdi <- Destination\r
-    lea     r9, [rdi + r8 - 1]          ; r9 <- End of Destination\r
+    lea     r9, [rsi + r8 - 1]          ; r9 <- End of Source\r
     cmp     rsi, rdi\r
     mov     rax, rdi                    ; rax <- Destination as return value\r
     jae     @F\r
-    cmp     r9, rsi\r
+    cmp     r9, rdi\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
-@@:\r
-    xor     rcx, rcx\r
-    sub     rcx, rsi\r
-    and     rcx, 7                      ; rcx + rsi aligns on 8-byte boundary\r
-    jz      @F\r
-    cmp     rcx, r8\r
-    cmova   rcx, r8\r
-    sub     r8, rcx                     ; r8 <- remaining bytes to copy\r
-    rep     movsb\r
 @@:\r
     mov     rcx, r8\r
     and     r8, 7\r
     shr     rcx, 3                      ; rcx <- # of Qwords to copy\r
     jz      @CopyBytes\r
-    DB      49h, 0fh, 7eh, 0c2h         ; movq    r10,  mm0    ; save mm0\r
+    DB      49h, 0fh, 7eh, 0c2h         ; movd r10, mm0 (Save mm0 in r10)\r
 @@:\r
-    DB      48h, 0fh, 6fh, 06h          ; movq    mm0, [rsi]\r
-    DB      48h, 0fh, 0e7h, 07h         ; movntq  [rdi], mm0\r
+    DB      0fh, 6fh, 06h               ; movd mm0, [rsi]\r
+    DB      0fh, 0e7h, 07h              ; movntq [rdi], mm0\r
     add     rsi, 8\r
     add     rdi, 8\r
     loop    @B\r
     mfence\r
-    DB      49h, 0fh, 6eh, 0c2h          ; movq    mm0, r10    ; restore mm0\r
+    DB      49h, 0fh, 6eh, 0c2h         ; movd mm0, r10 (Restore mm0)\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     rdi, r9                     ; rdi <- End of Destination\r
-    lea     rsi, [rsi + r8 - 1]         ; rsi <- End of Source\r
+    mov     rsi, r9                     ; rsi <- End of Source\r
+    lea     rdi, [rdi + r8 - 1]         ; rdi <- End of Destination\r
     std                                 ; set direction flag\r
 @CopyBytes:\r
     mov     rcx, r8\r
index 6af88fa..a2538c2 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index f9c9feb..e0523d8 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 2f286c9..0e7e9c7 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 4027ece..879273f 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rcx, rdx\r
index 9688c3d..923beef 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; VOID *\r
+; EFIAPI\r
+; InternalMemSetMem (\r
+;   OUT     VOID                      *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem   PROC    USES    rdi\r
     mov     rax, r8\r
     mov     ah, al\r
-    DB      48h, 0fh, 6eh, 0c0h        ;  movq    mm0, rax\r
+    DB      48h, 0fh, 6eh, 0c0h         ; movd mm0, rax\r
     mov     r8, rcx\r
-    mov     rdi, r8\r
+    mov     rdi, r8                     ; rdi <- Buffer\r
     mov     rcx, rdx\r
+    and     edx, 7\r
     shr     rcx, 3\r
     jz      @SetBytes\r
-    DB      0fh, 70h, 0C0h, 00h        ;  pshufw  mm0, mm0, 0h\r
-@@: \r
-    DB      48h, 0fh, 0e7h, 07h        ;  movntq  [rdi], mm0\r
+    DB      0fh, 70h, 0C0h, 00h         ; pshufw mm0, mm0, 0h\r
+@@:\r
+    DB      0fh, 0e7h, 07h              ; movntq [rdi], mm0\r
     add     rdi, 8\r
     loop    @B\r
     mfence\r
 @SetBytes:\r
-    and     rdx, 7\r
-    mov     rcx, rdx\r
+    mov     ecx, edx\r
     rep     stosb\r
     mov     rax, r8\r
     ret\r
index a950208..01b72c5 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; VOID *\r
+; EFIAPI\r
+; InternalMemSetMem16 (\r
+;   OUT     VOID                      *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem16 PROC    USES    rdi\r
     mov     rax, r8\r
-    DB      48h, 0fh, 6eh, 0c0h        ;  movq    mm0, rax\r
+    DB      48h, 0fh, 6eh, 0c0h         ; movd mm0, rax\r
     mov     r8, rcx\r
     mov     rdi, r8\r
     mov     rcx, rdx\r
-    and     rdx, 3\r
+    and     edx, 3\r
     shr     rcx, 2\r
     jz      @SetWords\r
-    DB      0fh, 70h, 0C0h, 00h        ;  pshufw  mm0, mm0, 0h\r
-@@: \r
-    DB      48h, 0fh, 0e7h, 07h        ;  movntq  [rdi], mm0\r
+    DB      0fh, 70h, 0C0h, 00h         ; pshufw mm0, mm0, 0h\r
+@@:\r
+    DB      0fh, 0e7h, 07h              ; movntq [rdi], mm0\r
     add     rdi, 8\r
     loop    @B\r
     mfence\r
 @SetWords:\r
-    mov     rcx, rdx\r
+    mov     ecx, edx\r
     rep     stosw\r
     mov     rax, r8\r
     ret\r
index d835543..89cf175 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
index 5780647..454d623 100644 (file)
 \r
     .code\r
 \r
-InternalMemSetMem64 PROC    USES    rdi\r
-    DB      49h, 0fh, 6eh, 0c0h;  movq    mm0, r8       ; mm0 <- Value\r
-    mov     rax, rcx                                    ; rax <- Buffer\r
-    xchg    rcx, rdx                                    ; rcx <- Count\r
-    mov     rdi, rax\r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem64 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT64 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
+InternalMemSetMem64 PROC\r
+    DB      49h, 0fh, 6eh, 0c0h         ; movd mm0, r8 (Value)\r
+    mov     rax, rcx                    ; rax <- Buffer\r
+    xchg    rcx, rdx                    ; rcx <- Count\r
 @@:\r
-    DB      48h, 0fh, 0e7h, 07h;  movntq  [rdi], mm0\r
-    add     rdi, 8\r
+    DB      0fh, 0e7h, 02h              ; movntq  [rdx], mm0\r
+    add     rdx, 8\r
     loop    @B\r
     mfence\r
     ret\r
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.asm b/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.asm
new file mode 100644 (file)
index 0000000..e9035a3
--- /dev/null
@@ -0,0 +1,54 @@
+;------------------------------------------------------------------------------\r
+;\r
+; Copyright (c) 2006, Intel Corporation\r
+; All rights reserved. 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
+;\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
+; Module Name:\r
+;\r
+;   ZeroMem.asm\r
+;\r
+; Abstract:\r
+;\r
+;   ZeroMem function\r
+;\r
+; Notes:\r
+;\r
+;------------------------------------------------------------------------------\r
+\r
+    .code\r
+\r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemZeroMem (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count\r
+;    );\r
+;------------------------------------------------------------------------------\r
+InternalMemZeroMem  PROC    USES    rdi\r
+    mov     rdi, rcx\r
+    mov     rcx, rdx\r
+    mov     r8, rdi\r
+    and     edx, 7\r
+    shr     rcx, 3\r
+    jz      @ZeroBytes\r
+    DB      0fh, 0efh, 0c0h             ; pxor mm0, mm0\r
+@@:\r
+    DB      0fh, 0e7h, 7                ; movntq [rdi], mm0\r
+    add     rdi, 8\r
+    loop    @B\r
+    DB      0fh, 0aeh, 0f0h             ; mfence\r
+@ZeroBytes:\r
+    xor     eax, eax\r
+    mov     ecx, edx\r
+    rep     stosb\r
+    mov     rax, r8\r
+    ret\r
+InternalMemZeroMem  ENDP\r
+\r
+    END\r
index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r
index b48b8f0..7901b82 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    .code: 
-
 .global _InternalMemCompareMem
+
+#------------------------------------------------------------------------------
+# INTN
+# EFIAPI
+# InternalMemCompareMem (
+#   IN      CONST VOID                *DestinationBuffer,
+#   IN      CONST VOID                *SourceBuffer,
+#   IN      UINTN                     Length
+#   );
+#------------------------------------------------------------------------------
 _InternalMemCompareMem:
     push    %esi
     push    %edi
-    movl    12(%esp),%esi
-    movl    16(%esp),%edi
-    movl    20(%esp),%ecx
+    movl    12(%esp), %esi
+    movl    16(%esp), %edi
+    movl    20(%esp), %ecx
     repe    cmpsb
     movzbl  -1(%esi), %eax
     movzbl  -1(%edi), %edx
-    subl    %edx,%eax
+    subl    %edx, %eax
     pop     %edi
     pop     %esi
     ret
index 3cf6fe7..1d0e7fa 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    esi edi\r
     mov     esi, [esp + 12]\r
     mov     edi, [esp + 16]\r
index e80a00d..42695b2 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
-
 .global _InternalMemCopyMem
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  EFIAPI
+#  InternalMemCopyMem (
+#    IN VOID   *Destination,
+#    IN VOID   *Source,
+#    IN UINTN  Count
+#    );
+#------------------------------------------------------------------------------
 _InternalMemCopyMem:
     push    %esi
     push    %edi
-    movl    16(%esp),%esi               # esi <- Source
-    movl    12(%esp),%edi               # edi <- Destination
-    movl    20(%esp),%edx               # edx <- Count
-    leal    -1(%edi,%edx),%eax          # eax <- End of Destination
-    cmpl    %edi,%esi
+    movl    16(%esp), %esi              # esi <- Source
+    movl    12(%esp), %edi              # edi <- Destination
+    movl    20(%esp), %edx              # edx <- Count
+    leal    -1(%esi, %edx), %eax        # eax <- End of Source
+    cmpl    %edi, %esi
     jae     L0
-    cmpl    %esi,%eax
+    cmpl    %edi, %eax
     jae     @CopyBackward               # Copy backward if overlapped
-L0: 
-    movl    %edx,%ecx
-    andl    $3,%edx
-    shrl    $2,%ecx
+L0:
+    movl    %edx, %ecx
+    andl    $3, %edx
+    shrl    $2, %ecx
     rep
     movsl                               # Copy as many Dwords as possible
     jmp     @CopyBytes
-@CopyBackward: 
-    movl    %eax,%edi                   # edi <- End of Destination
-    leal    -1(%esi,%edx),%esi          # esi <- End of Source
+@CopyBackward:
+    movl    %eax, %esi                  # esi <- End of Source
+    leal    -1(%edi, %edx), %edi        # edi <- End of Destination
     std
-@CopyBytes: 
-    movl    %edx,%ecx
+@CopyBytes:
+    movl    %edx, %ecx
     rep
     movsb                               # Copy bytes backward
     cld
-    movl    12(%esp),%eax               # eax <- Destination as return value
+    movl    12(%esp), %eax              # eax <- Destination as return value
     pop     %edi
     pop     %esi
     ret
index 7b3e5ea..86677ef 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemCopyMem (\r
+;    IN VOID   *Destination,\r
+;    IN VOID   *Source,\r
+;    IN UINTN  Count\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    esi edi\r
     mov     esi, [esp + 16]             ; esi <- Source\r
     mov     edi, [esp + 12]             ; edi <- Destination\r
     mov     edx, [esp + 20]             ; edx <- Count\r
-    lea     eax, [edi + edx - 1]        ; eax <- End of Destination\r
+    lea     eax, [esi + edx - 1]        ; eax <- End of Source\r
     cmp     esi, edi\r
     jae     @F\r
-    cmp     eax, esi\r
+    cmp     eax, edi\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
 @@:\r
     mov     ecx, edx\r
@@ -41,8 +49,8 @@ InternalMemCopyMem  PROC    USES    esi edi
     rep     movsd                       ; Copy as many Dwords as possible\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     edi, eax                    ; edi <- End of Destination\r
-    lea     esi, [esi + edx - 1]        ; esi <- End of Source\r
+    mov     esi, eax                    ; esi <- End of Source\r
+    lea     edi, [edi + edx - 1]        ; edi <- End of Destination\r
     std\r
 @CopyBytes:\r
     mov     ecx, edx\r
index ec1095a..1e83064 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    .code: 
-
 .global _InternalMemScanMem16
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem16 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT16                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem16:
     push    %edi
-    movl    12(%esp),%ecx
-    movl    8(%esp),%edi
-    movl    16(%esp),%eax
+    movl    12(%esp), %ecx
+    movl    8(%esp), %edi
+    movl    16(%esp), %eax
     repne   scasw
-    leal    -2(%edi),%eax
+    leal    -2(%edi), %eax
     cmovnz  %ecx, %eax
     pop     %edi
     ret
index 7071942..57fab61 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index b51b4fe..b7b93d9 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    .code: 
-
 .global _InternalMemScanMem32
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem32 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT32                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem32:
     push    %edi
-    movl    12(%esp),%ecx
-    movl    8(%esp),%edi
-    movl    16(%esp),%eax
+    movl    12(%esp), %ecx
+    movl    8(%esp), %edi
+    movl    16(%esp), %eax
     repne   scasl
-    leal    -4(%edi),%eax
+    leal    -4(%edi), %eax
     cmovnz  %ecx, %eax
     pop     %edi
     ret
index e6aaf02..6ac857c 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 49e9e07..6bbb18a 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    .code: 
-
 .global _InternalMemScanMem64
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem64 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT64                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem64:
     push    %edi
-    movl    12(%esp),%ecx
-    movl    16(%esp),%eax
-    movl    20(%esp),%edx
-    movl    8(%esp),%edi
+    movl    12(%esp), %ecx
+    movl    16(%esp), %eax
+    movl    20(%esp), %edx
+    movl    8(%esp), %edi
 L0:
-    cmpl    (%edi),%eax
-    leal    8(%edi),%edi
+    cmpl    (%edi), %eax
+    leal    8(%edi), %edi
     loopne  L0
     jne     L1
-    cmpl    -4(%edi),%edx
+    cmpl    -4(%edi), %edx
     jecxz   L1
     jne     L0
 L1:
-    leal    -8(%edi),%eax
+    leal    -8(%edi), %eax
     cmovne  %ecx, %eax
     pop     %edi
     ret
-
index f9725a4..ca54f13 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     eax, [esp + 16]\r
index da40c14..fe678fa 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    .code: 
-
 .global _InternalMemScanMem8
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem8 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT8                     Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem8:
     push    %edi
-    movl    12(%esp),%ecx
-    movl    8(%esp),%edi
-    movb    16(%esp),%al
+    movl    12(%esp), %ecx
+    movl    8(%esp), %edi
+    movb    16(%esp), %al
     repne   scasb
-    leal    -1(%edi),%eax
+    leal    -1(%edi), %eax
     cmovnz  %ecx, %eax
     pop     %edi
     ret
index 6ae1900..a3f65b6 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 1e59587..9dbfa28 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
+    .386:
+    .code:
 
 .global _InternalMemSetMem
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemSetMem (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count,
+#    IN UINT8  Value
+#    )
+#------------------------------------------------------------------------------
 _InternalMemSetMem:
     push    %edi
     movl    16(%esp),%eax
index 495dd3f..98b1ed8 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT8  Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem   PROC    USES    edi\r
     mov     eax, [esp + 16]\r
     mov     edi, [esp + 8]\r
index 3871c5c..2386009 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
-
 .global _InternalMemSetMem16
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemSetMem16 (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count,
+#    IN UINT16 Value
+#    )
+#------------------------------------------------------------------------------
 _InternalMemSetMem16:
     push    %edi
-    movl    16(%esp),%eax
-    movl    8(%esp),%edi
-    movl    12(%esp),%ecx
+    movl    16(%esp), %eax
+    movl    8(%esp), %edi
+    movl    12(%esp), %ecx
     rep
     stosw
-    movl    8(%esp),%eax
+    movl    8(%esp), %eax
     pop     %edi
     ret
index 483e26e..7f4a895 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem16 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT16 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem16 PROC    USES    edi\r
     mov     eax, [esp + 16]\r
     mov     edi, [esp + 8]\r
index d7dd928..c11214f 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
-
 .global _InternalMemSetMem32
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemSetMem32 (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count,
+#    IN UINT32 Value
+#    )
+#------------------------------------------------------------------------------
 _InternalMemSetMem32:
     push    %edi
     movl    16(%esp),%eax
index 18b77ce..5876f4a 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem32 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT32 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem32 PROC    USES    edi\r
     mov     eax, [esp + 16]\r
     mov     edi, [esp + 8]\r
index 5172c30..c76bbae 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemSetMem64
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemSetMem64 (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count,
+#    IN UINT64 Value
+#    )
+#------------------------------------------------------------------------------
 _InternalMemSetMem64:
     push    %edi
     movl    12(%esp), %ecx
     movl    16(%esp), %eax
     movl    20(%esp), %edx
     movl    8(%esp), %edi
-L0: 
-    mov     %eax,-8(%edi,%ecx,8)
-    mov     %edx,-4(%edi,%ecx,8)
+L0:
+    mov     %eax, -8(%edi, %ecx, 8)
+    mov     %edx, -4(%edi, %ecx, 8)
     loop    L0
     movl    %edi, %eax
     pop     %edi
index 4679a38..687c18f 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\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     eax, [esp + 16]\r
index c3165bd..7a01471 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
-
 .global _InternalMemZeroMem
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemZeroMem (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count
+#    );
+#------------------------------------------------------------------------------
 _InternalMemZeroMem:
     push    %edi
     xorl    %eax,%eax
index f892250..b3b8b5d 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemZeroMem (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count\r
+;    );\r
+;------------------------------------------------------------------------------\r
 InternalMemZeroMem  PROC    USES    edi\r
     xor     eax, eax\r
     mov     edi, [esp + 8]\r
index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r
index b8e289b..554bc07 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    rsi rdi\r
     mov     rsi, rcx\r
     mov     rdi, rdx\r
index 4363071..a2e0405 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  EFIAPI\r
+;  InternalMemCopyMem (\r
+;    IN VOID   *Destination,\r
+;    IN VOID   *Source,\r
+;    IN UINTN  Count\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    rsi rdi\r
     mov     rsi, rdx                    ; rsi <- Source\r
     mov     rdi, rcx                    ; rdi <- Destination\r
-    lea     r9, [rdi + r8 - 1]          ; r9 <- End of Destination\r
+    lea     r9, [rsi + r8 - 1]          ; r9 <- End of Source\r
     cmp     rsi, rdi\r
     mov     rax, rdi                    ; rax <- Destination as return value\r
     jae     @F\r
@@ -39,8 +48,8 @@ InternalMemCopyMem  PROC    USES    rsi rdi
     rep     movsq                       ; Copy as many Qwords as possible\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     rdi, r9                     ; rdi <- End of Destination\r
-    lea     rsi, [rsi + r8 - 1]         ; esi <- End of Source\r
+    mov     rsi, r9                     ; rsi <- End of Source\r
+    lea     rdi, [rdi + r8 - 1]         ; esi <- End of Destination\r
     std                                 ; set direction flag\r
 @CopyBytes:\r
     mov     rcx, r8\r
index 6af88fa..a2538c2 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index f9c9feb..e0523d8 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 2f286c9..0e7e9c7 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 4027ece..879273f 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rcx, rdx\r
index b9108c7..5306520 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  EFIAPI\r
+;  InternalMemSetMem (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT8  Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem   PROC    USES    rdi\r
     mov     rax, r8\r
     mov     rdi, rcx\r
index 3a9fd47..fce9ed7 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  EFIAPI\r
+;  InternalMemSetMem16 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT16 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem16 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 2020d19..ce9e54d 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  EFIAPI\r
+;  InternalMemSetMem32 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT32 Value\r
+;    );\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem32 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 70ca4fb..97884a3 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem64 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT64 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
 InternalMemSetMem64 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index c18a2e2..c01af8e 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemZeroMem (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count\r
+;    );\r
+;------------------------------------------------------------------------------\r
 InternalMemZeroMem  PROC    USES    rdi\r
     push    rcx\r
     xor     rax, rax\r
index 428bb6a..7901b82 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemCompareMem
+
+#------------------------------------------------------------------------------
+# INTN
+# EFIAPI
+# InternalMemCompareMem (
+#   IN      CONST VOID                *DestinationBuffer,
+#   IN      CONST VOID                *SourceBuffer,
+#   IN      UINTN                     Length
+#   );
+#------------------------------------------------------------------------------
 _InternalMemCompareMem:
     push    %esi
     push    %edi
index 3cf6fe7..1d0e7fa 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    esi edi\r
     mov     esi, [esp + 12]\r
     mov     edi, [esp + 16]\r
index deb9860..9ef9286 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemCopyMem
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_CopyMem (
+#  EFIAPI
+#  InternalMemCopyMem (
 #    IN VOID   *Destination,
 #    IN VOID   *Source,
 #    IN UINTN  Count
-#    )
+#    );
 #------------------------------------------------------------------------------
-.global _InternalMemCopyMem
 _InternalMemCopyMem:
     push    %esi
     push    %edi
     movl    16(%esp), %esi              # esi <- Source
     movl    12(%esp), %edi              # edi <- Destination
     movl    20(%esp), %edx              # edx <- Count
-    leal    -1(%edi,%edx,), %eax        # eax <- End of Destination
+    leal    -1(%esi,%edx,), %eax        # eax <- End of Source
     cmpl    %edi, %esi
     jae     L0
-    cmpl    %esi, %eax                  # Overlapped?
+    cmpl    %edi, %eax                  # Overlapped?
     jae     @CopyBackward               # Copy backward if overlapped
-L0: 
+L0:
     xorl    %ecx, %ecx
     subl    %edi, %ecx
     andl    $15, %ecx                   # ecx + edi aligns on 16-byte boundary
@@ -56,16 +53,16 @@ L0:
     subl    %ecx, %edx                  # edx <- remaining bytes to copy
     rep
     movsb
-L1: 
+L1:
     movl    %edx, %ecx
     andl    $15, %edx
     shrl    $4, %ecx                    # ecx <- # of DQwords to copy
     jz      @CopyBytes
     addl    $-16, %esp
     movdqu  %xmm0, (%esp)
-L2: 
+L2:
     movdqu  (%esi), %xmm0
-    movntdq %xmm0, (%edi) 
+    movntdq %xmm0, (%edi)
     addl    $16, %esi
     addl    $16, %edi
     loop    L2
@@ -73,11 +70,11 @@ L2:
     movdqu  (%esp),%xmm0
     addl    $16, %esp                   # stack cleanup
     jmp     @CopyBytes
-@CopyBackward: 
-    movl    %eax, %edi                  # edi <- Last byte in Destination
-    leal    -1(%esi,%edx,), %esi        # esi <- Last byte in Source
+@CopyBackward:
+    movl    %eax, %esi                  # esi <- Last byte in Source
+    leal    -1(%edi,%edx,), %edi        # edi <- Last byte in Destination
     std
-@CopyBytes: 
+@CopyBytes:
     movl    %edx, %ecx
     rep
     movsb
index 6127cc2..77fb786 100644 (file)
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_CopyMem (\r
+;  InternalMemCopyMem (\r
 ;    IN VOID   *Destination,\r
 ;    IN VOID   *Source,\r
 ;    IN UINTN  Count\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    esi edi\r
     mov     esi, [esp + 16]             ; esi <- Source\r
     mov     edi, [esp + 12]             ; edi <- Destination\r
     mov     edx, [esp + 20]             ; edx <- Count\r
-    lea     eax, [edi + edx - 1]        ; eax <- End of Destination\r
+    lea     eax, [esi + edx - 1]        ; eax <- End of Source\r
     cmp     esi, edi\r
     jae     @F\r
-    cmp     eax, esi                    ; Overlapped?\r
+    cmp     eax, edi                    ; Overlapped?\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
 @@:\r
     xor     ecx, ecx\r
@@ -70,8 +70,8 @@ InternalMemCopyMem  PROC    USES    esi edi
     add     esp, 16                     ; stack cleanup\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     edi, eax                    ; edi <- Last byte in Destination\r
-    lea     esi, [esi + edx - 1]        ; esi <- Last byte in Source\r
+    mov     esi, eax                    ; esi <- Last byte in Source\r
+    lea     edi, [edi + edx - 1]        ; edi <- Last byte in Destination\r
     std\r
 @CopyBytes:\r
     mov     ecx, edx\r
index c433a28..1e83064 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem16
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem16 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT16                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem16:
     push    %edi
     movl    12(%esp), %ecx
index 7071942..57fab61 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 1de283c..b7b93d9 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem32
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem32 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT32                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem32:
     push    %edi
     movl    12(%esp), %ecx
     movl    8(%esp), %edi
     movl    16(%esp), %eax
-    repnz   scasl
+    repne   scasl
     leal    -4(%edi), %eax
     cmovnz  %ecx, %eax
     pop     %edi
index e6aaf02..6ac857c 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index 00f6d74..6bbb18a 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem64
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem64 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT64                    Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem64:
     push    %edi
     movl    12(%esp), %ecx
     movl    16(%esp), %eax
     movl    20(%esp), %edx
     movl    8(%esp), %edi
-L0: 
+L0:
     cmpl    (%edi), %eax
     leal    8(%edi), %edi
     loopne  L0
@@ -46,7 +52,7 @@ L0:
     cmpl    -4(%edi), %edx
     jecxz   L1
     jne     L0
-L1: 
+L1:
     leal    -8(%edi), %eax
     cmovne  %ecx, %eax
     pop     %edi
index f9725a4..ca54f13 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     eax, [esp + 16]\r
index 5764037..fe678fa 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .code: 
-
 .global _InternalMemScanMem8
+
+#------------------------------------------------------------------------------
+# CONST VOID *
+# EFIAPI
+# InternalMemScanMem8 (
+#   IN      CONST VOID                *Buffer,
+#   IN      UINTN                     Length,
+#   IN      UINT8                     Value
+#   );
+#------------------------------------------------------------------------------
 _InternalMemScanMem8:
     push    %edi
     movl    12(%esp), %ecx
index 6ae1900..a3f65b6 100644 (file)
     .model  flat,C\r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    edi\r
     mov     ecx, [esp + 12]\r
     mov     edi, [esp + 8]\r
index e778cd8..d73ebfb 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
+    .686:
     #.MODEL flat,C
-    .xmm: 
-    .code: 
+    .xmm:
+    .code:
 
 #------------------------------------------------------------------------------
 #  VOID *
@@ -32,7 +32,7 @@
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT8  Value
-#    )
+#    );
 #------------------------------------------------------------------------------
 .global _InternalMemSetMem
 _InternalMemSetMem:
@@ -49,7 +49,7 @@ _InternalMemSetMem:
     subl    %ecx, %edx
     rep
     stosb
-L0: 
+L0:
     movl    %edx, %ecx
     andl    $15, %edx
     shrl    $4, %ecx                    # ecx <- # of DQwords to set
@@ -60,14 +60,14 @@ L0:
     movd    %eax, %xmm0
     pshuflw $0, %xmm0, %xmm0
     movlhps %xmm0, %xmm0
-L1: 
+L1:
     movntdq %xmm0, (%edi)
     addl    $16, %edi
     loop   L1
     mfence
     movdqu  (%esp), %xmm0
     addl    $16, %esp                   # stack cleanup
-@SetBytes: 
+@SetBytes:
     movl    %edx, %ecx
     rep
     stosb
index 62b10cf..a4de29c 100644 (file)
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem (\r
+;  EFIAPI\r
+;  InternalMemSetMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT8  Value\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem   PROC    USES    edi\r
     mov     edx, [esp + 12]             ; edx <- Count\r
index 27110b3..21e3935 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem16
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem16 (
+#  EFIAPI
+#  InternalMemSetMem16 (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT16 Value
 #    )
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem16
 _InternalMemSetMem16:
     push    %edi
     movl    12(%esp), %edx
@@ -50,7 +47,7 @@ _InternalMemSetMem16:
     subl    %ecx, %edx
     rep
     stosw
-L0: 
+L0:
     movl    %edx, %ecx
     andl    $7, %edx
     shrl    $3, %ecx
@@ -63,7 +60,7 @@ L1:
     addl    $16, %edi
     loop    L1
     mfence
-@SetWords: 
+@SetWords:
     movl    %edx, %ecx
     rep
     stosw
index 3fabb00..a709899 100644 (file)
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem16 (\r
+;  EFIAPI\r
+;  InternalMemSetMem16 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT16 Value\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem16 PROC    USES    edi\r
     mov     edx, [esp + 12]\r
index a1a6317..b6823ad 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemSetMem32
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_SetMem32 (
+#  EFIAPI
+#  InternalMemSetMem32 (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count,
 #    IN UINT32 Value
-#    )
+#    );
 #------------------------------------------------------------------------------
-.global _InternalMemSetMem32
 _InternalMemSetMem32:
     push    %edi
     movl    12(%esp), %edx
@@ -50,19 +47,19 @@ _InternalMemSetMem32:
     subl    %ecx, %edx
     rep
     stosl
-L0: 
+L0:
     movl    %edx, %ecx
     andl    $3, %edx
     shrl    $2, %ecx
     jz      @SetDwords
     movd    %eax, %xmm0
     pshufd  $0, %xmm0, %xmm0
-L1: 
+L1:
     movntdq %xmm0, (%edi)
     addl    $16, %edi
     loop    L1
     mfence
-@SetDwords: 
+@SetDwords:
     movl    %edx, %ecx
     rep
     stosl
index a7f1f0e..99954a5 100644 (file)
 \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
index fa60007..1f9e2f6 100644 (file)
 #\r
 #------------------------------------------------------------------------------\r
 \r
+.globl _InternalMemSetMem64\r
+\r
 #------------------------------------------------------------------------------\r
 #  VOID *\r
+#  EFIAPI\r
 #  InternalMemSetMem64 (\r
 #    IN VOID   *Buffer,\r
 #    IN UINTN  Count,\r
 #    IN UINT64 Value\r
-#    )\r
+#    );\r
 #------------------------------------------------------------------------------\r
-.globl _InternalMemSetMem64\r
 _InternalMemSetMem64:\r
     movl    4(%esp), %eax\r
     movl    8(%esp), %ecx\r
@@ -40,20 +42,17 @@ _InternalMemSetMem64:
     movq    %xmm0, (%edx)\r
     addl    $8, %edx\r
     decl    %ecx\r
-L1: \r
+L1:\r
     shrl    %ecx\r
     jz      @SetQwords\r
     movlhps %xmm0, %xmm0\r
-L2: \r
+L2:\r
     movntdq %xmm0, (%edx)\r
     leal    16(%edx), %edx\r
     loop    L2\r
     mfence\r
-@SetQwords: \r
+@SetQwords:\r
     jnc     L3\r
     movq    %xmm0, (%edx)\r
-L3: \r
+L3:\r
     ret\r
-\r
-\r
-\r
index c5d75c6..6940670 100644 (file)
@@ -28,6 +28,7 @@
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
+;  EFIAPI\r
 ;  InternalMemSetMem64 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
@@ -35,8 +36,8 @@
 ;    )\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem64 PROC\r
-    mov     eax, [esp + 4]\r
-    mov     ecx, [esp + 8]\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, [esp + 12]\r
index f927f91..f572760 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .686: 
-    #.MODEL flat,C
-    .xmm: 
-    .code: 
+.global _InternalMemZeroMem
 
 #------------------------------------------------------------------------------
 #  VOID *
-#  _mem_ZeroMem (
+#  EFIAPI
+#  InternalMemZeroMem (
 #    IN VOID   *Buffer,
 #    IN UINTN  Count
-#    )
+#    );
 #------------------------------------------------------------------------------
-.global _InternalMemZeroMem
 _InternalMemZeroMem:
     push    %edi
     movl    8(%esp), %edi
@@ -48,18 +45,18 @@ _InternalMemZeroMem:
     subl    %ecx, %edx
     rep
     stosb
-L0: 
+L0:
     movl    %edx, %ecx
     andl    $15, %edx
     shrl    $4, %ecx
     jz      @ZeroBytes
     pxor    %xmm0, %xmm0
-L1: 
+L1:
     movntdq %xmm0, (%edi)
     addl    $16, %edi
     loop    L1
     mfence
-@ZeroBytes: 
+@ZeroBytes:
     movl    %edx, %ecx
     rep
     stosb
index b532382..3792c88 100644 (file)
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_ZeroMem (\r
+;  EFIAPI\r
+;  InternalMemZeroMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemZeroMem  PROC    USES    edi\r
     mov     edi, [esp + 8]\r
index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r
index b8e289b..554bc07 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; INTN\r
+; EFIAPI\r
+; InternalMemCompareMem (\r
+;   IN      CONST VOID                *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCompareMem   PROC    USES    rsi rdi\r
     mov     rsi, rcx\r
     mov     rdi, rdx\r
index 955cd25..03ffe0c 100644 (file)
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_CopyMem (\r
+;  EFIAPI\r
+;  InternalMemCopyMem (\r
 ;    IN VOID   *Destination,\r
 ;    IN VOID   *Source,\r
 ;    IN UINTN  Count\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    rsi rdi\r
     mov     rsi, rdx                    ; rsi <- Source\r
     mov     rdi, rcx                    ; rdi <- Destination\r
-    lea     r9, [rdi + r8 - 1]          ; r9 <- Last byte of Destination\r
+    lea     r9, [rsi + r8 - 1]          ; r9 <- Last byte of Source\r
     cmp     rsi, rdi\r
     mov     rax, rdi                    ; rax <- Destination as return value\r
     jae     @F                          ; Copy forward if Source > Destination\r
-    cmp     r9, rsi                     ; Overlapped?\r
+    cmp     r9, rdi                     ; Overlapped?\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
 @@:\r
     xor     rcx, rcx\r
@@ -65,8 +66,8 @@ InternalMemCopyMem  PROC    USES    rsi rdi
     movdqa  xmm0, [rsp + 18h]           ; restore xmm0\r
     jmp     @CopyBytes                  ; copy remaining bytes\r
 @CopyBackward:\r
-    mov     rdi, r9                     ; rdi <- Last byte of Destination\r
-    lea     rsi, [rsi + r8 - 1]         ; rsi <- Last byte of Source\r
+    mov     rsi, r9                     ; rsi <- Last byte of Source\r
+    lea     rdi, [rdi + r8 - 1]         ; rdi <- Last byte of Destination\r
     std\r
 @CopyBytes:\r
     mov     rcx, r8\r
index 6af88fa..a2538c2 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem16 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT16                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem16    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index f9c9feb..e0523d8 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem32 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT32                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem32    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 2f286c9..0e7e9c7 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem64 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT64                    Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem64    PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rax, r8\r
index 4027ece..879273f 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; CONST VOID *\r
+; EFIAPI\r
+; InternalMemScanMem8 (\r
+;   IN      CONST VOID                *Buffer,\r
+;   IN      UINTN                     Length,\r
+;   IN      UINT8                     Value\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemScanMem8 PROC    USES    rdi\r
     mov     rdi, rcx\r
     mov     rcx, rdx\r
index 2aba207..25cfcf0 100644 (file)
@@ -25,7 +25,7 @@
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem (\r
+;  InternalMemSetMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT8  Value\r
index a2f4d0e..77b8cf4 100644 (file)
@@ -25,7 +25,7 @@
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem16 (\r
+;  InternalMemSetMem16 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT16 Value\r
index 24207ec..eba29bb 100644 (file)
@@ -25,7 +25,7 @@
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem32 (\r
+;  InternalMemSetMem32 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT8  Value\r
index ef94c56..a26b941 100644 (file)
 ;    )\r
 ;------------------------------------------------------------------------------\r
 InternalMemSetMem64 PROC\r
-    mov     rax, rcx\r
+    mov     rax, rcx                    ; rax <- Buffer\r
+    xchg    rcx, rdx                    ; rcx <- Count & rdx <- Buffer\r
     test    dl, 8\r
-    xchg    rcx, rdx\r
+    movd    xmm0, r8\r
     jz      @F\r
     mov     [rdx], r8\r
     add     rdx, 8\r
@@ -42,7 +43,6 @@ InternalMemSetMem64 PROC
 @@:\r
     shr     rcx, 1\r
     jz      @SetQwords\r
-    movd    xmm0, r8\r
     movlhps xmm0, xmm0\r
 @@:\r
     movntdq [rdx], xmm0\r
index 6d0f99b..7eebd3a 100644 (file)
@@ -25,7 +25,7 @@
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_ZeroMem (\r
+;  InternalMemZeroMem (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count\r
 ;    )\r
index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 0824768..e2ffb5c 100644 (file)
@@ -30,7 +30,7 @@
 \r
   This function fills Length bytes of Buffer with zeros, and returns Buffer.\r
   If Length > 0 and Buffer is NULL, then ASSERT().\r
-  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT(). \r
+  If Length is greater than (MAX_ADDRESS \96 Buffer + 1), then ASSERT().\r
 \r
   @param  Buffer      Pointer to the target buffer to fill with zeros.\r
   @param  Length      Number of bytes in Buffer to fill with zeros.\r
@@ -47,5 +47,5 @@ ZeroMem (
 {\r
   ASSERT (!(Buffer == NULL && Length > 0));\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
-  return InternalMemSetMem (Buffer, Length, 0);\r
+  return InternalMemZeroMem (Buffer, Length);\r
 }\r