]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - arch/m32r/lib/memcpy.S
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[thirdparty/kernel/linux.git] / arch / m32r / lib / memcpy.S
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1da177e4
LT
2/*
3 * linux/arch/m32r/lib/memcpy.S
4 *
5 * Copyright (C) 2001 Hiroyuki Kondo, and Hirokazu Takata
6 * Copyright (C) 2004 Hirokazu Takata
7 *
8 * void *memcopy(void *dst, const void *src, int n);
9 *
10 * dst: r0
11 * src: r1
12 * n : r2
13 */
1da177e4
LT
14
15 .text
1da177e4
LT
16#include <linux/linkage.h>
17#include <asm/assembler.h>
18
19#ifdef CONFIG_ISA_DUAL_ISSUE
20
21 .text
22ENTRY(memcpy)
23memcopy:
24 mv r4, r0 || mv r7, r0
25 or r7, r1 || cmpz r2
26 jc r14 || cmpeq r0, r1 ; return if r2=0
27 jc r14 ; return if r0=r1
28
29 and3 r7, r7, #3
30 bnez r7, byte_copy
31 srl3 r3, r2, #2
32 and3 r2, r2, #3
33 beqz r3, byte_copy
34 addi r4, #-4
35word_copy:
36 ld r7, @r1+ || addi r3, #-1
37 st r7, @+r4 || cmpz r2
38 bnez r3, word_copy
39 addi r4, #4 || jc r14 ; return if r2=0
40#if defined(CONFIG_ISA_M32R2)
41byte_copy:
42 ldb r7, @r1 || addi r1, #1
43 addi r2, #-1 || stb r7, @r4+
44 bnez r2, byte_copy
45#elif defined(CONFIG_ISA_M32R)
46byte_copy:
47 ldb r7, @r1 || addi r1, #1
48 addi r2, #-1 || stb r7, @r4
49 addi r4, #1
50 bnez r2, byte_copy
51#else
52#error unknown isa configuration
53#endif
54end_memcopy:
55 jmp r14
56
57#else /* not CONFIG_ISA_DUAL_ISSUE */
58
59 .text
60ENTRY(memcpy)
61memcopy:
62 mv r4, r0
63 mv r7, r0
64 or r7, r1
65 beq r0, r1, end_memcopy
66 beqz r2, end_memcopy
67
68 and3 r7, r7, #3
69 bnez r7, byte_copy
70 srl3 r3, r2, #2
71 and3 r2, r2, #3
72 beqz r3, byte_copy
73 addi r4, #-4
74word_copy:
75 ld r7, @r1+
76 addi r3, #-1
77 st r7, @+r4
78 bnez r3, word_copy
79 beqz r2, end_memcopy
80 addi r4, #4
81byte_copy:
82 ldb r7, @r1
83 addi r1, #1
84 addi r2, #-1
85 stb r7, @r4
86 addi r4, #1
87 bnez r2, byte_copy
88end_memcopy:
89 jmp r14
90
91#endif /* not CONFIG_ISA_DUAL_ISSUE */
92
93 .end