1 /** @file
2
3 Provide intrinsics within Oniguruma
4
5 (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
6
7 This program and the accompanying materials are licensed and made available
8 under the terms and conditions of the BSD License that accompanies this
9 distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php.
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
13 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 **/
15
16 #include <Library/BaseMemoryLib.h>
17
18 //
19 // From CryptoPkg/IntrinsicLib
20 //
21
22 /* Copies bytes between buffers */
23 #pragma function(memcpy)
memcpy(void * dest,const void * src,unsigned int count)24 void * memcpy (void *dest, const void *src, unsigned int count)
25 {
26 return CopyMem (dest, src, (UINTN)count);
27 }
28
29 /* Sets buffers to a specified character */
30 #pragma function(memset)
memset(void * dest,char ch,unsigned int count)31 void * memset (void *dest, char ch, unsigned int count)
32 {
33 //
34 // NOTE: Here we use one base implementation for memset, instead of the direct
35 // optimized SetMem() wrapper. Because the IntrinsicLib has to be built
36 // without whole program optimization option, and there will be some
37 // potential register usage errors when calling other optimized codes.
38 //
39
40 //
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 memset()
44 //
45 volatile UINT8 *Pointer;
46
47 Pointer = (UINT8 *)dest;
48 while (count-- != 0) {
49 *(Pointer++) = ch;
50 }
51
52 return dest;
53 }
54