]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/compiler-rt/lib/builtins/hexagon/memcpy_likely_aligned.S
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / compiler-rt / lib / builtins / hexagon / memcpy_likely_aligned.S
1 //===------------------------- memcopy routines ---------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10
11         .macro FUNCTION_BEGIN name
12         .text
13         .p2align 5
14         .globl \name
15         .type  \name, @function
16 \name:
17         .endm
18
19         .macro FUNCTION_END name
20         .size  \name, . - \name
21         .endm
22
23 FUNCTION_BEGIN __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes
24         {
25                 p0 = bitsclr(r1,#7)
26                 p0 = bitsclr(r0,#7)
27                 if (p0.new) r5:4 = memd(r1)
28                 r3 = #-3
29         }
30         {
31                 if (!p0) jump .Lmemcpy_call
32                 if (p0) memd(r0++#8) = r5:4
33                 if (p0) r5:4 = memd(r1+#8)
34                 r3 += lsr(r2,#3)
35         }
36         {
37                 memd(r0++#8) = r5:4
38                 r5:4 = memd(r1+#16)
39                 r1 = add(r1,#24)
40                 loop0(1f,r3)
41         }
42         .falign
43 1:
44         {
45                 memd(r0++#8) = r5:4
46                 r5:4 = memd(r1++#8)
47         }:endloop0
48         {
49                 memd(r0) = r5:4
50                 r0 -= add(r2,#-8)
51                 jumpr r31
52         }
53 FUNCTION_END __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes
54
55 .Lmemcpy_call:
56 #ifdef __PIC__
57         jump memcpy@PLT
58 #else
59         jump memcpy
60 #endif
61
62   .globl __qdsp_memcpy_likely_aligned_min32bytes_mult8bytes
63   .set   __qdsp_memcpy_likely_aligned_min32bytes_mult8bytes, \
64          __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes