xref: /rk3399_ARM-atf/lib/compiler-rt/builtins/arm/aeabi_memset.S (revision 23af5965e967d12f337229cde707811f8ae2d893)
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