1 /** @file 2 Intrinsic Memory Routines Wrapper Implementation for OpenSSL-based 3 Cryptographic Library. 4 5 Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #include <Base.h> 17 #include <Library/BaseMemoryLib.h> 18 19 /* OpenSSL will use floating point support, and C compiler produces the _fltused 20 symbol by default. Simply define this symbol here to satisfy the linker. */ 21 int _fltused = 1; 22 23 /* Sets buffers to a specified character */ 24 void * memset (void *dest, char ch, unsigned int count) 25 { 26 // 27 // NOTE: Here we use one base implementation for memset, instead of the direct 28 // optimized SetMem() wrapper. Because the IntrinsicLib has to be built 29 // without whole program optimization option, and there will be some 30 // potential register usage errors when calling other optimized codes. 31 // 32 33 // 34 // Declare the local variables that actually move the data elements as 35 // volatile to prevent the optimizer from replacing this function with 36 // the intrinsic memset() 37 // 38 volatile UINT8 *Pointer; 39 40 Pointer = (UINT8 *)dest; 41 while (count-- != 0) { 42 *(Pointer++) = ch; 43 } 44 45 return dest; 46 } 47