diff options
author | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-09-07 19:09:39 +0000 |
---|---|---|
committer | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-09-07 19:09:39 +0000 |
commit | 796b0b15e8d3bee61926ef5d3583c35c95aead6f (patch) | |
tree | 722767e4f2c13bed548a348a728907029f17c212 /ArmPkg/Library | |
parent | 6b062a863f5c81a3064fff86c608d1a5eae8bf72 (diff) | |
download | edk2-platforms-796b0b15e8d3bee61926ef5d3583c35c95aead6f.tar.xz |
ArmPkg/CompilerIntrinsicsLib: Add memory intrinsics for RVCT
New intrinsics: __aeabi_memmove, __aeabi_memset, __aeabi_memclr and __aeabi_memclr4
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12293 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Library')
3 files changed, 112 insertions, 1 deletions
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memmove.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memmove.asm new file mode 100755 index 0000000000..d84429ef7f --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memmove.asm @@ -0,0 +1,54 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) 2011, ARM Limited. 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. +// +//------------------------------------------------------------------------------ + + + EXPORT __aeabi_memmove + + AREA Memmove, CODE, READONLY + +; +;VOID +;EFIAPI +;__aeabi_memmove ( +; IN VOID *Destination, +; IN CONST VOID *Source, +; IN UINT32 Size +; ); +; +__aeabi_memmove + CMP r2, #0 + BXEQ r14 + CMP r0, r1 + BXEQ r14 + BHI memmove_backward + BLS memmove_forward + +memmove_forward + LDRB r3, [r1], #1 + STRB r3, [r0], #1 + SUBS r2, r2, #1 + BXEQ r14 + B memmove_forward + +memmove_backward + add r0, r2 + add r1, r2 +memmove_backward_loop + LDRB r3, [r1], #-1 + STRB r3, [r0], #-1 + SUBS r2, r2, #-1 + BXEQ r14 + B memmove_backward_loop + + END diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.asm new file mode 100755 index 0000000000..5c6b808f1e --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.asm @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> +// +// 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. +// +//------------------------------------------------------------------------------ + + + EXPORT __aeabi_memset + EXPORT __aeabi_memclr + EXPORT __aeabi_memclr4 + + AREA Memset, CODE, READONLY + +; +;VOID +;EFIAPI +;__aeabi_memset ( +; IN VOID *Destination, +; IN UINT32 Character, +; IN UINT32 Size +; ); +; +__aeabi_memset + + ; args = 0, pretend = 0, frame = 0 + ; frame_needed = 1, uses_anonymous_args = 0 + stmfd sp!, {r7, lr} + mov ip, #0 + add r7, sp, #0 + mov lr, r0 + b L9 +L10 + and r3, r1, #255 + add ip, ip, #1 + strb r3, [lr], #1 +L9 + cmp ip, r2 + bne L10 + ldmfd sp!, {r7, pc} + +__aeabi_memclr + mov r1, #0 + b __aeabi_memset + +__aeabi_memclr4 + mov r1, #0 + b __aeabi_memset diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf index e4771df928..9b116f8901 100644 --- a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +++ b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf @@ -1,8 +1,8 @@ - #/** @file # Base Library implementation. # # Copyright (c) 2009, Apple Inc. All rights reserved.<BR> +# Copyright (c) 2011, ARM Limited. All rights reserved. # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -32,6 +32,8 @@ Arm/llsr.asm | RVCT Arm/memcpy.asm | RVCT Arm/memcpy4.asm | RVCT + Arm/memset.asm | RVCT + Arm/memmove.asm | RVCT Arm/uread.asm | RVCT Arm/uwrite.asm | RVCT Arm/lasr.asm | RVCT |