]> Git Repo - linux.git/blame - arch/powerpc/lib/mem_64.S
Merge tag 'drm-next-2018-06-15' of git://anongit.freedesktop.org/drm/drm
[linux.git] / arch / powerpc / lib / mem_64.S
CommitLineData
70d64cea
PM
1/*
2 * String handling functions for PowerPC.
3 *
4 * Copyright (C) 1996 Paul Mackerras.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11#include <asm/processor.h>
12#include <asm/errno.h>
13#include <asm/ppc_asm.h>
9445aa1a 14#include <asm/export.h>
70d64cea 15
694fc88c
NR
16_GLOBAL(__memset16)
17 rlwimi r4,r4,16,0,15
18 /* fall through */
19
20_GLOBAL(__memset32)
21 rldimi r4,r4,32,0
22 /* fall through */
23
24_GLOBAL(__memset64)
25 neg r0,r3
26 andi. r0,r0,7
27 cmplw cr1,r5,r0
28 b .Lms
29EXPORT_SYMBOL(__memset16)
30EXPORT_SYMBOL(__memset32)
31EXPORT_SYMBOL(__memset64)
32
70d64cea
PM
33_GLOBAL(memset)
34 neg r0,r3
35 rlwimi r4,r4,8,16,23
36 andi. r0,r0,7 /* # bytes to be 8-byte aligned */
37 rlwimi r4,r4,16,0,15
38 cmplw cr1,r5,r0 /* do we get that far? */
39 rldimi r4,r4,32,0
694fc88c 40.Lms: PPC_MTOCRF(1,r0)
70d64cea
PM
41 mr r6,r3
42 blt cr1,8f
43 beq+ 3f /* if already 8-byte aligned */
44 subf r5,r0,r5
45 bf 31,1f
46 stb r4,0(r6)
47 addi r6,r6,1
481: bf 30,2f
49 sth r4,0(r6)
50 addi r6,r6,2
512: bf 29,3f
52 stw r4,0(r6)
53 addi r6,r6,4
543: srdi. r0,r5,6
55 clrldi r5,r5,58
56 mtctr r0
57 beq 5f
12ab11a2 58 .balign 16
70d64cea
PM
594: std r4,0(r6)
60 std r4,8(r6)
61 std r4,16(r6)
62 std r4,24(r6)
63 std r4,32(r6)
64 std r4,40(r6)
65 std r4,48(r6)
66 std r4,56(r6)
67 addi r6,r6,64
68 bdnz 4b
695: srwi. r0,r5,3
70 clrlwi r5,r5,29
694caf02 71 PPC_MTOCRF(1,r0)
70d64cea
PM
72 beq 8f
73 bf 29,6f
74 std r4,0(r6)
75 std r4,8(r6)
76 std r4,16(r6)
77 std r4,24(r6)
78 addi r6,r6,32
796: bf 30,7f
80 std r4,0(r6)
81 std r4,8(r6)
82 addi r6,r6,16
837: bf 31,8f
84 std r4,0(r6)
85 addi r6,r6,8
868: cmpwi r5,0
694caf02 87 PPC_MTOCRF(1,r5)
70d64cea
PM
88 beqlr+
89 bf 29,9f
90 stw r4,0(r6)
91 addi r6,r6,4
929: bf 30,10f
93 sth r4,0(r6)
94 addi r6,r6,2
9510: bflr 31
96 stb r4,0(r6)
97 blr
9445aa1a 98EXPORT_SYMBOL(memset)
70d64cea 99
6f5405bc 100_GLOBAL_TOC(memmove)
70d64cea 101 cmplw 0,r3,r4
b1576fec
AB
102 bgt backwards_memcpy
103 b memcpy
70d64cea
PM
104
105_GLOBAL(backwards_memcpy)
106 rlwinm. r7,r5,32-3,3,31 /* r0 = r5 >> 3 */
107 add r6,r3,r5
108 add r4,r4,r5
109 beq 2f
110 andi. r0,r6,3
111 mtctr r7
112 bne 5f
12ab11a2 113 .balign 16
70d64cea
PM
1141: lwz r7,-4(r4)
115 lwzu r8,-8(r4)
116 stw r7,-4(r6)
117 stwu r8,-8(r6)
118 bdnz 1b
119 andi. r5,r5,7
1202: cmplwi 0,r5,4
121 blt 3f
122 lwzu r0,-4(r4)
123 subi r5,r5,4
124 stwu r0,-4(r6)
1253: cmpwi 0,r5,0
126 beqlr
127 mtctr r5
1284: lbzu r0,-1(r4)
129 stbu r0,-1(r6)
130 bdnz 4b
131 blr
1325: mtctr r0
1336: lbzu r7,-1(r4)
134 stbu r7,-1(r6)
135 bdnz 6b
136 subf r5,r0,r5
137 rlwinm. r7,r5,32-3,3,31
138 beq 2b
139 mtctr r7
140 b 1b
9445aa1a 141EXPORT_SYMBOL(memmove)
This page took 0.780567 seconds and 4 git commands to generate.