Add .S file for GCC tool-chain for EfiCommonLib.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5748 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12 2008-08-28 08:21:26 +00:00
parent de4e6bf963
commit f1694d2768
4 changed files with 170 additions and 0 deletions

View File

@ -99,6 +99,10 @@ COMPONENT_TYPE = LIBRARY
# x64/EfiSetMem.asm | INTEL # x64/EfiSetMem.asm | INTEL
# x64/EfiZeroMem.asm | INTEL # x64/EfiZeroMem.asm | INTEL
x64/EfiCopyMemRep1.S | GCC
x64/EfiSetMemRep4.S | GCC
x64/EfiZeroMemRep4.S | GCC
Math.c Math.c
[includes.common] [includes.common]

View File

@ -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

View File

@ -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

View File

@ -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