1*bdedee5aSBoyan Karatotev//===-- aeabi_memset.S - EABI memset implementation -----------------------===// 2*bdedee5aSBoyan Karatotev// 3*bdedee5aSBoyan Karatotev// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*bdedee5aSBoyan Karatotev// See https://llvm.org/LICENSE.txt for license information. 5*bdedee5aSBoyan Karatotev// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*bdedee5aSBoyan Karatotev// 7*bdedee5aSBoyan Karatotev//===----------------------------------------------------------------------===// 8*bdedee5aSBoyan Karatotev 9*bdedee5aSBoyan Karatotev#include "../assembly.h" 10*bdedee5aSBoyan Karatotev 11*bdedee5aSBoyan Karatotev// void __aeabi_memset(void *dest, size_t n, int c) { memset(dest, c, n); } 12*bdedee5aSBoyan Karatotev// void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0); } 13*bdedee5aSBoyan Karatotev 14*bdedee5aSBoyan Karatotev .syntax unified 15*bdedee5aSBoyan Karatotev .p2align 2 16*bdedee5aSBoyan KaratotevDEFINE_COMPILERRT_FUNCTION(__aeabi_memset) 17*bdedee5aSBoyan Karatotev mov r3, r1 18*bdedee5aSBoyan Karatotev mov r1, r2 19*bdedee5aSBoyan Karatotev mov r2, r3 20*bdedee5aSBoyan Karatotev#ifdef USE_THUMB_1 21*bdedee5aSBoyan Karatotev push {r7, lr} 22*bdedee5aSBoyan Karatotev bl memset 23*bdedee5aSBoyan Karatotev pop {r7, pc} 24*bdedee5aSBoyan Karatotev#else 25*bdedee5aSBoyan Karatotev b memset 26*bdedee5aSBoyan Karatotev#endif 27*bdedee5aSBoyan KaratotevEND_COMPILERRT_FUNCTION(__aeabi_memset) 28*bdedee5aSBoyan Karatotev 29*bdedee5aSBoyan KaratotevDEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset) 30*bdedee5aSBoyan KaratotevDEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset) 31*bdedee5aSBoyan Karatotev 32*bdedee5aSBoyan Karatotev .p2align 2 33*bdedee5aSBoyan KaratotevDEFINE_COMPILERRT_FUNCTION(__aeabi_memclr) 34*bdedee5aSBoyan Karatotev mov r2, r1 35*bdedee5aSBoyan Karatotev movs r1, #0 36*bdedee5aSBoyan Karatotev#ifdef USE_THUMB_1 37*bdedee5aSBoyan Karatotev push {r7, lr} 38*bdedee5aSBoyan Karatotev bl memset 39*bdedee5aSBoyan Karatotev pop {r7, pc} 40*bdedee5aSBoyan Karatotev#else 41*bdedee5aSBoyan Karatotev b memset 42*bdedee5aSBoyan Karatotev#endif 43*bdedee5aSBoyan KaratotevEND_COMPILERRT_FUNCTION(__aeabi_memclr) 44*bdedee5aSBoyan Karatotev 45*bdedee5aSBoyan KaratotevDEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr) 46*bdedee5aSBoyan KaratotevDEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr8, __aeabi_memclr) 47*bdedee5aSBoyan Karatotev 48*bdedee5aSBoyan KaratotevNO_EXEC_STACK_DIRECTIVE 49*bdedee5aSBoyan Karatotev 50