]>
git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseMemoryLib/Ebc/CopyMem.c
3 Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
23 #include "BaseMemoryLibInternal.h"
26 Copy Length bytes from Source to Destination.
28 @param Destination Target of copy
29 @param Source Place to copy from
30 @param Length Number of bytes to copy
38 OUT VOID
*Destination
,
39 IN CONST VOID
*Source
,
44 // Declare the local variables that actually move the data elements as
45 // volatile to prevent the optimizer from replacing this function with
46 // the intrinsic memcpy()
48 volatile UINT8
*Destination8
;
51 if (Source
> Destination
) {
52 Destination8
= (UINT8
*)Destination
;
53 Source8
= (CONST UINT8
*)Source
;
54 while (Length
-- != 0) {
55 *(Destination8
++) = *(Source8
++);
57 } else if (Source
< Destination
) {
58 Destination8
= (UINT8
*)Destination
+ Length
;
59 Source8
= (CONST UINT8
*)Source
+ Length
;
60 while (Length
-- != 0) {
61 *(--Destination8
) = *(--Source8
);