GNU Linux-libre 5.4.274-gnu1
[releases.git] / arch / c6x / lib / memcpy_64plus.S
1 ; SPDX-License-Identifier: GPL-2.0-only
2 ;  Port on Texas Instruments TMS320C6x architecture
3 ;
4 ;  Copyright (C) 2006, 2009, 2010 Texas Instruments Incorporated
5 ;  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com)
6 ;
7
8 #include <linux/linkage.h>
9
10         .text
11
12 ENTRY(memcpy)
13         AND     .L1     0x1,A6,A0
14  ||     AND     .S1     0x2,A6,A1
15  ||     AND     .L2X    0x4,A6,B0
16  ||     MV      .D1     A4,A3
17  ||     MVC     .S2     ILC,B2
18
19    [A0] LDB     .D2T1   *B4++,A5
20    [A1] LDB     .D2T1   *B4++,A7
21    [A1] LDB     .D2T1   *B4++,A8
22    [B0] LDNW    .D2T1   *B4++,A9
23  ||     SHRU    .S2X    A6,0x3,B1
24   [!B1] BNOP    .S2     B3,1
25
26    [A0] STB     .D1T1   A5,*A3++
27  ||[B1] MVC     .S2     B1,ILC
28    [A1] STB     .D1T1   A7,*A3++
29    [A1] STB     .D1T1   A8,*A3++
30    [B0] STNW    .D1T1   A9,*A3++        ; return when len < 8
31
32         SPLOOP  2
33
34         LDNDW   .D2T1   *B4++,A9:A8
35         NOP     3
36
37         NOP
38         SPKERNEL        0,0
39  ||     STNDW   .D1T1   A9:A8,*A3++
40
41         BNOP    .S2     B3,4
42         MVC     .S2     B2,ILC
43 ENDPROC(memcpy)