1 /* 2 * Copyright (c) 2020-2022, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #include "crt_impl_private.h" 9 memset(void * s,int c,size_t n)10void *memset(void *s, int c, size_t n) 11 { 12 union composite_addr_t p_mem; 13 uint32_t pattern_word; 14 15 p_mem.p_byte = (uint8_t *)s; 16 pattern_word = (((uint32_t)c) << 24) | (((uint32_t)c) << 16) | 17 (((uint32_t)c) << 8) | ((uint32_t)c); 18 19 while (n && ADDR_WORD_UNALIGNED(p_mem.uint_addr)) { 20 *p_mem.p_byte++ = (uint8_t)c; 21 n--; 22 } 23 24 while (n >= sizeof(uint32_t)) { 25 *p_mem.p_word++ = pattern_word; 26 n -= sizeof(uint32_t); 27 } 28 29 while (n--) { 30 *p_mem.p_byte++ = (uint8_t)c; 31 } 32 33 return s; 34 } 35