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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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 978a3628a60b90721e8b4861e7363b176a25be30..78eae20544ac4437a2e26131d5e02247fe4fc3c2 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 c7e0b8a2a19305df9798aae4f6c82d0204125c7a..7901b82a4490e25cea4dcdd8288604f347a7e2d2 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 3cf6fe7f732bf8b3bbc30a8849212d877f5466bb..1d0e7fad3978badad720a7beef77a03eb861469b 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 fff8bde5ea9d60eb04a3ea16701e0857ec65cf43..d644b34675856a9845eb1542a977b5751a24ce83 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 b709a809d5ff7b812beff7318ca16043a89752fc..1b8b3c5dcdbf4c3b0754ff1aa86706ff454b0c6a 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 e23799e77386bc56e4b946d7deffd1c4289246d7..1e8306457311d53e23e1e149f25fc64aaf0a49b6 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 7071942ede08ecc9d7fa81e5be3e3136e8500e72..57fab61b775bf69a6e752c600ee4df67f7dfe02f 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 6b4a919ddee260b6cb5e7d2901c95ab74ba49415..b7b93d9c0c7cc8c39a35581843a8515953d565e7 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 e6aaf02bc37264aa5bb531efa9d0ad4092f5a8ee..6ac857ce163abb5e2cf3aadc49d8865d8bdfb383 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 00f6d74436b77952116ed4204f2a0abc436ffbc6..6bbb18a3346d4cb859835138c5da00d57715b83e 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 f9725a4a5d65414f49952e4bc3053cdf7264188c..ca54f13738b2f7b4c1be26760b40bc70c54e755d 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 57640378b42650fcec0917952eaa3a0c2ef44f8a..fe678fac2648f22230c20cfeb5113b67ae6cc0c8 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 6ae1900189dd96a9b33272add4c10a4caf4090e4..a3f65b64fac29b0de29ac05f54cf645127457737 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 8a893f893ab0025ac5dd1f6d1dda7375c8c7869f..4e93915caa0a2322edcc08b12418bb65eccd44b0 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 f2c55f1296408ca40f94172472b3e092f3d06841..c9c48ecf9d3a6fc2620d43630a6171db5304a4a2 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 bcbd49e4422820ef2b63356334e1987f61c7ef7b..9898d28f98ecda115f5461791ecaa286a5910a1c 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 f9dc533fd8dceae8fdc51af100c3a4bcb57aa8eb..e93422665822a306a9482a4261937f9f7896fbe9 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 27fd6174bdfc340be407ac97868f186ee6d1753a..8281652ad9200bb55feef7f1ffa0c9bd7692781a 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 7f24fcd74425c0b5b53b907ff596e96d053cb4d6..c2e4869e474568e4d0d4114704978e607c6a9503 100644 (file)
 \r
     .686\r
     .model  flat,C\r
-    .xmm\r
+    .mmx\r
     .code\r
 \r
 ;------------------------------------------------------------------------------\r
 ;  VOID *\r
-;  _mem_SetMem32 (\r
+;  EFIAPI\r
+;  InternalMemSetMem32 (\r
 ;    IN VOID   *Buffer,\r
 ;    IN UINTN  Count,\r
 ;    IN UINT32 Value\r
-;    )\r
+;    );\r
 ;------------------------------------------------------------------------------\r
-InternalMemSetMem32 PROC    USES    edi\r
-    mov     edx, [esp + 12]\r
-    mov     edi, [esp + 8]\r
-    mov     ecx, edx\r
-    shr     ecx, 1\r
-    movd    mm0, [esp + 16]\r
-    mov     eax, edi\r
+InternalMemSetMem32 PROC\r
+    mov     eax, [esp + 4]              ; eax <- Buffer as return value\r
+    mov     ecx, [esp + 8]              ; ecx <- Count\r
+    movd    mm0, [esp + 12]             ; mm0 <- Value\r
+    shr     ecx, 1                      ; ecx <- number of qwords to set\r
+    mov     edx, eax                    ; edx <- Buffer\r
     jz      @SetDwords\r
-    pshufw  mm0, mm0, 44h\r
+    movq    mm1, mm0\r
+    psllq   mm1, 32\r
+    por     mm0, mm1\r
 @@:\r
-    movntq  [edi], mm0\r
-    add     edi, 8\r
+    movq    [edx], mm0\r
+    lea     edx, [edx + 8]              ; use "lea" to avoid change in flags\r
     loop    @B\r
-    mfence\r
 @SetDwords:\r
-    test    dl, 1\r
-    jz      @F\r
-    movd    [edi], mm0\r
+    jnc     @F\r
+    movd    [edx], mm0\r
 @@:\r
     ret\r
 InternalMemSetMem32 ENDP\r
index 9699581606ea98beea122e6b6ed5383765dce1c4..5eef027e57889dc82737b82e703e22ec3edb4656 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 310f418d0c3e7dd0cc9e9cc89abecd4038c40b51..027483ba3ffc30609a96e38ae0d721129763c2ff 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 0bb19c7da2990fb733781c717d7d01dab98691b4..f51ce8f98ed0504139e2f4e9345cecd02b9a26d5 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 31ef1205250fc31a10409c8d45332b52bcf92430..a75480bd40acba48bafe3dce9edcc4273aae4987 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 b8e289bb27cf1c8d13275dea9153efb1a331a26f..554bc07c642c42adf1bcfcdd8f59e9b73d8d928c 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 801cf92750aee136041032719d38fcf64ae64039..b57192edbe3bf9cf7e6783b9c8cb5dfb74478585 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 6af88fae5ba485162a22a3eebb7aae0ef633e6ba..a2538c2cca8f11103c9d94ab59ef4ca81ff5046c 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 f9c9feb00e145a02e017821df5da274d57002448..e0523d854703a476b55bb447bc88f1628f150e71 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 2f286c9e2f5b8c1306338790530392fa4678892c..0e7e9c782f8fd3238a767108bda534d1191527d0 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 4027ece76832b6defbd5fd469498725db67aa1aa..879273f960ef3f4201f2226a65559076d24ffe42 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 9688c3d65bb30cea4f3a53733af223b6c86705c3..923beef6c18486f11e025e0a6d82b60459b8e78d 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 a95020876c98fe12a86645cc5e6f6d4658c8aaee..01b72c55d56b177c34e17a44971cac36260b414a 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 d835543767d0613176820be4e3908d9f884122f3..89cf175608386d6d15246be3975fb77901b38825 100644 (file)
 \r
     .code\r
 \r
-InternalMemSetMem32 PROC    USES    rdi\r
-    DB      49h, 0fh, 6eh, 0c0h        ;  movq    mm0, r8       ; mm0 <- Value\r
-    mov     rax, rcx                                            ; rax <- Buffer\r
-    mov     rdi, rax\r
-    mov     rcx, rdx\r
-    shr     rcx, 1                                      \r
+;------------------------------------------------------------------------------\r
+;  VOID *\r
+;  InternalMemSetMem32 (\r
+;    IN VOID   *Buffer,\r
+;    IN UINTN  Count,\r
+;    IN UINT32 Value\r
+;    )\r
+;------------------------------------------------------------------------------\r
+InternalMemSetMem32 PROC\r
+    DB      49h, 0fh, 6eh, 0c0h         ; movd mm0, r8 (Value)\r
+    mov     rax, rcx                    ; rax <- Buffer\r
+    xchg    rcx, rdx                    ; rcx <- Count  rdx <- Buffer\r
+    shr     rcx, 1                      ; rcx <- # of qwords to set\r
     jz      @SetDwords\r
-    DB      0fh, 70h, 0C0h, 44h        ;  pshufw  mm0, mm0, 44h\r
+    DB      0fh, 70h, 0C0h, 44h         ; pshufw mm0, mm0, 44h\r
 @@:\r
-    DB      48h, 0fh, 0e7h, 07h        ;  movntq  [rdi], mm0\r
-    add     rdi, 8\r
+    DB      0fh, 0e7h, 02h              ; movntq [rdx], mm0\r
+    lea     rdx, [rdx + 8]              ; use "lea" to avoid flag changes\r
     loop    @B\r
     mfence\r
 @SetDwords:\r
-    test    dl, 1\r
-    jz      @F\r
-    DB      0fh, 7eh, 07h              ;  movd    [rdi], mm0\r
+    jnc     @F\r
+    DB      0fh, 7eh, 02h               ; movd [rdx], mm0\r
 @@:\r
     ret\r
 InternalMemSetMem32 ENDP\r
index 5780647445eedb4f2252b931ecc4d108143f7c0e..454d6234bff62fd561a0bc65734225dfd9a16d31 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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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 b48b8f0f1c2441625fd4e6dd598ddc55f560126e..7901b82a4490e25cea4dcdd8288604f347a7e2d2 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 3cf6fe7f732bf8b3bbc30a8849212d877f5466bb..1d0e7fad3978badad720a7beef77a03eb861469b 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 e80a00deb4bf7de1df0c6f9aae5bf6c1fd48c3a9..42695b28c4cf23d16a6fcecb7d8f4bfc503489bf 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 7b3e5eafee5c95b1c83b3a06d096411eaa2a90fc..86677ef614ba9bca9c981274489aa4ab10f6f373 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 ec1095a5fb71305f54e735c65ee32b44769c2f73..1e8306457311d53e23e1e149f25fc64aaf0a49b6 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 7071942ede08ecc9d7fa81e5be3e3136e8500e72..57fab61b775bf69a6e752c600ee4df67f7dfe02f 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 b51b4fecdf43994350f2fbfb52fef8110258860a..b7b93d9c0c7cc8c39a35581843a8515953d565e7 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 e6aaf02bc37264aa5bb531efa9d0ad4092f5a8ee..6ac857ce163abb5e2cf3aadc49d8865d8bdfb383 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 49e9e07cf75e2823f3ff974e61971f22c29bb655..6bbb18a3346d4cb859835138c5da00d57715b83e 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 f9725a4a5d65414f49952e4bc3053cdf7264188c..ca54f13738b2f7b4c1be26760b40bc70c54e755d 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 da40c149e961a4acbc3ce17f58f2c4682ef1f506..fe678fac2648f22230c20cfeb5113b67ae6cc0c8 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 6ae1900189dd96a9b33272add4c10a4caf4090e4..a3f65b64fac29b0de29ac05f54cf645127457737 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 1e5958731722b572d8b806df84132554245f1c3b..9dbfa284c0451e3212bc8ebe22ea5c8359f2bb7e 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 495dd3f4baba6d1e5074572f3efd60c85db559dd..98b1ed84c271b854070a193da404c53773a84de2 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 3871c5c183533a566e0afb20502d6e1f267dbd98..23860092af7ec0b58d5f768ace26c4cd68b96661 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 483e26e2b6978cd573a0916e62cbda028e171dab..7f4a8955f946eb6135e4dbf77cc122cb4f40a7e0 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 d7dd928c85ee38011aefee8bf5f894ac98373573..c11214f6d6715d8d1bf94fe57703e5fcbaca12c6 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 18b77ce183e244885f2301ab97bdcb00e99a0ceb..5876f4a7418dc68ee357c63376727f4851dd1082 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 5172c306b1a738b797d0ce0860c9918fcb978fd9..c76bbae020b40ec66edeb6196dea4cb13f57fc1f 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 4679a384c603f2900731d6e0a27da1601455a08a..687c18f312c5bc34878da034491305ac7b46e843 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 c3165bdc7e8ad29b0f09faa919a56980fb44694f..7a01471ebba1c4b9cab721ac2dd2d57a4cf038df 100644 (file)
 #
 #------------------------------------------------------------------------------
 
-    .386: 
-    .code: 
-
 .global _InternalMemZeroMem
+
+#------------------------------------------------------------------------------
+#  VOID *
+#  InternalMemZeroMem (
+#    IN VOID   *Buffer,
+#    IN UINTN  Count
+#    );
+#------------------------------------------------------------------------------
 _InternalMemZeroMem:
     push    %edi
     xorl    %eax,%eax
index f892250d16d0650fa019161b2744a40ac3fbdb55..b3b8b5d1f1ae36ec8d9bb37a759d33d2531ce46c 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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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 b8e289bb27cf1c8d13275dea9153efb1a331a26f..554bc07c642c42adf1bcfcdd8f59e9b73d8d928c 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 43630715cb58e0b46d77bbf4b50c8cf009b9e52c..a2e04056fdf0be542dbe47926465122f1903084a 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 6af88fae5ba485162a22a3eebb7aae0ef633e6ba..a2538c2cca8f11103c9d94ab59ef4ca81ff5046c 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 f9c9feb00e145a02e017821df5da274d57002448..e0523d854703a476b55bb447bc88f1628f150e71 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 2f286c9e2f5b8c1306338790530392fa4678892c..0e7e9c782f8fd3238a767108bda534d1191527d0 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 4027ece76832b6defbd5fd469498725db67aa1aa..879273f960ef3f4201f2226a65559076d24ffe42 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 b9108c750e9ecc52349a114400e34f703d9b14a9..5306520169f1ff6a3f08ee0b39db5c1207f70d69 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 3a9fd47fc330db68b525f0c82a171816e83ec253..fce9ed7ed5d733c2f86dc4445131875b6306e286 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 2020d190657e72aa116780f2d08d05c88a159d01..ce9e54da85b1e70e59259e187a7af6827b5f0ad1 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 70ca4fb75a41bb2ebe59744ea83426497faf6d15..97884a36fe56dd56adce0fd020637319cc8fd7ac 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 c18a2e27c1bfed8a497e4e218a0350322d6048ed..c01af8e6e40053290fe752a8da151d4606e8c0b2 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 428bb6a51b454beeea93c628247b35168439beb0..7901b82a4490e25cea4dcdd8288604f347a7e2d2 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 3cf6fe7f732bf8b3bbc30a8849212d877f5466bb..1d0e7fad3978badad720a7beef77a03eb861469b 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 deb98603390795a37923712439c78910407d7cea..9ef928605131a154d5d43968790eadd237ab32f8 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 6127cc2188db843462ce15d009149d38a1cd79c8..77fb786d985ccc064d0534479ce223712c1ab581 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 c433a28b722f3a5e3009755b82623eaad6f6d55a..1e8306457311d53e23e1e149f25fc64aaf0a49b6 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 7071942ede08ecc9d7fa81e5be3e3136e8500e72..57fab61b775bf69a6e752c600ee4df67f7dfe02f 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 1de283c788ab14f3c277e44af4f3b2e53f8f9d75..b7b93d9c0c7cc8c39a35581843a8515953d565e7 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 e6aaf02bc37264aa5bb531efa9d0ad4092f5a8ee..6ac857ce163abb5e2cf3aadc49d8865d8bdfb383 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 00f6d74436b77952116ed4204f2a0abc436ffbc6..6bbb18a3346d4cb859835138c5da00d57715b83e 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 f9725a4a5d65414f49952e4bc3053cdf7264188c..ca54f13738b2f7b4c1be26760b40bc70c54e755d 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 57640378b42650fcec0917952eaa3a0c2ef44f8a..fe678fac2648f22230c20cfeb5113b67ae6cc0c8 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 6ae1900189dd96a9b33272add4c10a4caf4090e4..a3f65b64fac29b0de29ac05f54cf645127457737 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 e778cd8b865f8af158f660d0115588ce4d7450df..d73ebfb71052cbc33a74a233a17929fcb5bf0e47 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 62b10cff0a6ccc1cfcd51d62c845053606f5c3b9..a4de29c5212e4b91a30de08b4ee698a6706eb83a 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 27110b32d3752ab7d518c0655885234bd3ff9ab7..21e3935b994b5734afb54907ea29a0c582066096 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 3fabb00d31481e3ed22d3a5388bafce3dbcf3070..a709899fe257cfa18408d17a94d7406cf68bfc1a 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 a1a6317115b44d13196785c382531abf3252d7cf..b6823ad125fcc298dec8af16093cf9dadd3733f2 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 a7f1f0e127fc9d5ac6865a246c78cbca4d52b4ad..99954a5e4b4d33fb9d8a4f140abd70912535f998 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 fa60007f5ae09d6f24edc48641f3e8e0195a6a87..1f9e2f63a37d8f506ef777f48e077614e7988019 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 c5d75c6f2b7ed1a11218f52cd97f514bb73b0438..69406707a615dc471365542435fc9700b03a571b 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 f927f9128fdd72fa173bb278ac384ab4bb9af8fe..f57276091fd41acfa1336274ea355f01fb649e4a 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 b532382e2ea68f809c8640c4fecd60d5d959e51f..3792c8887976e2d47822089ab1397fe3ad8bd625 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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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 b8e289bb27cf1c8d13275dea9153efb1a331a26f..554bc07c642c42adf1bcfcdd8f59e9b73d8d928c 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 955cd25f3651ba07009fe25e7e1aefb12bf71202..03ffe0c00fbd75c878013c6f5ee8053abaea1a39 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 6af88fae5ba485162a22a3eebb7aae0ef633e6ba..a2538c2cca8f11103c9d94ab59ef4ca81ff5046c 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 f9c9feb00e145a02e017821df5da274d57002448..e0523d854703a476b55bb447bc88f1628f150e71 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 2f286c9e2f5b8c1306338790530392fa4678892c..0e7e9c782f8fd3238a767108bda534d1191527d0 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 4027ece76832b6defbd5fd469498725db67aa1aa..879273f960ef3f4201f2226a65559076d24ffe42 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 2aba207ab97f8fbe0894a58ab472b3daa6ce2a09..25cfcf0d1264d1cd39a5876967f0bff07eed978f 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 a2f4d0e53856886d0508b645b6894cd173bbe7db..77b8cf43aaef54c2e6aef60462e51f3b8e795920 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 24207ec6995c0439be437729a7ca36f03e75cec7..eba29bb88d0552f344d283e0595692f947ef000c 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 ef94c562b5d017f053cd46e5676c8de59d835651..a26b9412d477df42f7c8f9a23ffb0d8fcd0f7998 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 6d0f99ba94526a101a9ea727572edf040be1996a..7eebd3a8efe41a59e158800198d0384e3133d674 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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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 08247681c539d6a6fd660892b6141bd99361a4d0..e2ffb5c3c2d3f83a6c63db2cc45a1921471f264a 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