]>
git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/BaseMemoryLibVstm/CopyMem.c
2 Implementation of the InternalMemCopyMem routine. This function is broken
3 out into its own source file so that it can be excluded from a build for a
4 particular platform easily if an optimized version is desired.
6 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 #include "MemLibInternals.h"
23 Copy Length bytes from Source to Destination.
25 @param DestinationBuffer Target of copy
26 @param SourceBuffer Place to copy from
27 @param Length Number of bytes to copy
35 OUT VOID
*DestinationBuffer
,
36 IN CONST VOID
*SourceBuffer
,
41 // Declare the local variables that actually move the data elements as
42 // volatile to prevent the optimizer from replacing this function with
43 // the intrinsic memcpy()
45 volatile UINT8
*Destination8
;
48 if (SourceBuffer
> DestinationBuffer
) {
49 Destination8
= (UINT8
*)DestinationBuffer
;
50 Source8
= (CONST UINT8
*)SourceBuffer
;
51 while (Length
-- != 0) {
52 *(Destination8
++) = *(Source8
++);
54 } else if (SourceBuffer
< DestinationBuffer
) {
55 Destination8
= (UINT8
*)DestinationBuffer
+ Length
;
56 Source8
= (CONST UINT8
*)SourceBuffer
+ Length
;
57 while (Length
-- != 0) {
58 *(--Destination8
) = *(--Source8
);
61 return DestinationBuffer
;