Add .S file for GCC tool-chain for EfiCommonLib.
authorqwang12 <qwang12@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 28 Aug 2008 08:21:26 +0000 (08:21 +0000)
committerqwang12 <qwang12@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 28 Aug 2008 08:21:26 +0000 (08:21 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@5748 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/EfiCommonLib_Edk2.inf
edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiCopyMemRep1.S [new file with mode: 0644]
edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiSetMemRep4.S [new file with mode: 0644]
edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiZeroMemRep4.S [new file with mode: 0644]

index 529f492..b8fc29a 100644 (file)
@@ -99,6 +99,10 @@ COMPONENT_TYPE  = LIBRARY
 #  x64/EfiSetMem.asm        | INTEL\r
 #  x64/EfiZeroMem.asm       | INTEL\r
 \r
+  x64/EfiCopyMemRep1.S     | GCC\r
+  x64/EfiSetMemRep4.S       | GCC\r
+  x64/EfiZeroMemRep4.S      | GCC\r
+\r
   Math.c\r
 \r
 [includes.common]\r
diff --git a/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiCopyMemRep1.S b/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiCopyMemRep1.S
new file mode 100644 (file)
index 0000000..79455cf
--- /dev/null
@@ -0,0 +1,66 @@
+#------------------------------------------------------------------------------
+#
+# Copyright (c) 2008, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution.  The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+#   EfiCopyMemRep1.S
+#
+# Abstract:
+#
+#   CopyMem function
+#
+# Notes:
+#
+#------------------------------------------------------------------------------
+#include <EfiBind.h>
+
+    .code: 
+
+.global ASM_PFX(EfiCommonLibCopyMem)
+
+#------------------------------------------------------------------------------
+# VOID
+# EfiCommonLibCopyMem (
+#   OUT     VOID                      *Destination,
+#   IN      VOID                      *Source,
+#   IN      UINTN                     Count
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(EfiCommonLibCopyMem):
+      push   %rsi
+      push   %rdi
+      cmp    %rcx,%rdx
+      je     CopyMemDone
+      cmp    $0x0,%r8
+      je     CopyMemDone
+      mov    %rdx,%rsi
+      mov    %rcx,%rdi
+      lea    -1(%r8,%rsi,1),%r9
+      cmp    %rdi,%rsi
+      jae    CopyBytes
+      cmp    %rdi,%r9
+      jb     CopyBytes
+      mov    %r9,%rsi
+      lea    -1(%r8,%rdi,1),%rdi
+      std    
+
+CopyBytes:
+      mov    %r8,%rcx
+      rep movsb %ds:(%rsi),%es:(%rdi)
+      cld    
+
+CopyMemDone:
+      pop    %rdi
+      pop    %rsi
+      retq   
+
+
+
diff --git a/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiSetMemRep4.S b/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiSetMemRep4.S
new file mode 100644 (file)
index 0000000..a9eb76a
--- /dev/null
@@ -0,0 +1,54 @@
+#------------------------------------------------------------------------------
+#
+# Copyright (c) 2008, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution.  The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+#   EfiSetMemRep4.S
+#
+# Abstract:
+#
+#   SetMem function
+#
+# Notes:
+#
+#------------------------------------------------------------------------------
+#include <EfiBind.h>
+
+    .code: 
+
+.global ASM_PFX(EfiCommonLibCopyMem)
+
+#------------------------------------------------------------------------------
+# VOID
+# EfiCommonLibSetMem (
+#   OUT     VOID                      *Buffer,
+#   IN      UINTN                     Size,
+#   IN      UINT8                     Value
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(EfiCommonLibSetMem):
+      push   %rdi
+      cmp    $0x0,%rdx
+      je     SetDone
+      mov    %rcx,%rdi
+      mov    %r8b,%al
+      mov    %al,%ah
+      shrd   $0x10,%eax,%ecx
+      shld   $0x10,%ecx,%eax
+      mov    %rdx,%rcx
+      shr    $0x2,%rcx
+      rep stos %eax,%es:(%rdi)
+      mov    %rdx,%rcx
+      and    $0x3,%rcx
+      rep stos %al,%es:(%rdi)
+SetDone:
+      pop    %rdi
+      retq   
diff --git a/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiZeroMemRep4.S b/edk2/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/x64/EfiZeroMemRep4.S
new file mode 100644 (file)
index 0000000..11b9b45
--- /dev/null
@@ -0,0 +1,46 @@
+#------------------------------------------------------------------------------
+#
+# Copyright (c) 2008, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution.  The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+#   EfiZeroMemRep4.S
+#
+# Abstract:
+#
+#   ZeroMem function
+#
+# Notes:
+#
+#------------------------------------------------------------------------------
+#include <EfiBind.h>
+
+    .code: 
+
+.global ASM_PFX(EfiCommonLibZeroMem)
+#------------------------------------------------------------------------------
+#  VOID
+#  EfiCommonLibZeroMem (
+#    IN VOID   *Buffer,
+#    IN UINTN  Size
+#    );
+#------------------------------------------------------------------------------
+ASM_PFX(EfiCommonLibZeroMem):
+      push   %rdi
+      xor    %rax,%rax
+      mov    %rcx,%rdi
+      mov    %rdx,%rcx
+      shr    $0x2,%rcx
+      and    $0x3,%rdx
+      rep stos %eax,%es:(%rdi)
+      mov    %rdx,%rcx
+      rep stos %al,%es:(%rdi)
+      pop    %rdi
+      retq   
\ No newline at end of file