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
This commit is contained in:
oliviermartin 2011-09-07 19:09:39 +00:00
parent 6b062a863f
commit 796b0b15e8
3 changed files with 112 additions and 1 deletions

View File

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

View File

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

View File

@ -1,8 +1,8 @@
#/** @file #/** @file
# Base Library implementation. # Base Library implementation.
# #
# Copyright (c) 2009, Apple Inc. All rights reserved.<BR> # Copyright (c) 2009, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2011, ARM Limited. All rights reserved.
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -32,6 +32,8 @@
Arm/llsr.asm | RVCT Arm/llsr.asm | RVCT
Arm/memcpy.asm | RVCT Arm/memcpy.asm | RVCT
Arm/memcpy4.asm | RVCT Arm/memcpy4.asm | RVCT
Arm/memset.asm | RVCT
Arm/memmove.asm | RVCT
Arm/uread.asm | RVCT Arm/uread.asm | RVCT
Arm/uwrite.asm | RVCT Arm/uwrite.asm | RVCT
Arm/lasr.asm | RVCT Arm/lasr.asm | RVCT