mirror of https://github.com/acidanthera/audk.git
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:
parent
de4e6bf963
commit
f1694d2768
|
@ -99,6 +99,10 @@ COMPONENT_TYPE = LIBRARY
|
|||
# x64/EfiSetMem.asm | INTEL
|
||||
# x64/EfiZeroMem.asm | INTEL
|
||||
|
||||
x64/EfiCopyMemRep1.S | GCC
|
||||
x64/EfiSetMemRep4.S | GCC
|
||||
x64/EfiZeroMemRep4.S | GCC
|
||||
|
||||
Math.c
|
||||
|
||||
[includes.common]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue