Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/lib/copypage_64.S
26439 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* Copyright (C) 2008 Mark Nelson, IBM Corp.
4
*/
5
#include <linux/export.h>
6
#include <asm/page.h>
7
#include <asm/processor.h>
8
#include <asm/ppc_asm.h>
9
#include <asm/asm-offsets.h>
10
#include <asm/feature-fixups.h>
11
12
_GLOBAL_TOC(copy_page)
13
BEGIN_FTR_SECTION
14
lis r5,PAGE_SIZE@h
15
FTR_SECTION_ELSE
16
#ifdef CONFIG_PPC_BOOK3S_64
17
b copypage_power7
18
#endif
19
ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
20
ori r5,r5,PAGE_SIZE@l
21
#ifdef CONFIG_PPC_KERNEL_PCREL
22
/*
23
* Hack for toolchain - prefixed instructions cause label difference to
24
* be non-constant even if 8 byte alignment is known, so they can not
25
* be put in FTR sections.
26
*/
27
LOAD_REG_ADDR(r10, ppc64_caches)
28
BEGIN_FTR_SECTION
29
#else
30
BEGIN_FTR_SECTION
31
LOAD_REG_ADDR(r10, ppc64_caches)
32
#endif
33
lwz r11,DCACHEL1LOGBLOCKSIZE(r10) /* log2 of cache block size */
34
lwz r12,DCACHEL1BLOCKSIZE(r10) /* get cache block size */
35
li r9,0
36
srd r8,r5,r11
37
38
mtctr r8
39
.Lsetup:
40
dcbt r9,r4
41
dcbz r9,r3
42
add r9,r9,r12
43
bdnz .Lsetup
44
END_FTR_SECTION_IFSET(CPU_FTR_CP_USE_DCBTZ)
45
addi r3,r3,-8
46
srdi r8,r5,7 /* page is copied in 128 byte strides */
47
addi r8,r8,-1 /* one stride copied outside loop */
48
49
mtctr r8
50
51
ld r5,0(r4)
52
ld r6,8(r4)
53
ld r7,16(r4)
54
ldu r8,24(r4)
55
1: std r5,8(r3)
56
std r6,16(r3)
57
ld r9,8(r4)
58
ld r10,16(r4)
59
std r7,24(r3)
60
std r8,32(r3)
61
ld r11,24(r4)
62
ld r12,32(r4)
63
std r9,40(r3)
64
std r10,48(r3)
65
ld r5,40(r4)
66
ld r6,48(r4)
67
std r11,56(r3)
68
std r12,64(r3)
69
ld r7,56(r4)
70
ld r8,64(r4)
71
std r5,72(r3)
72
std r6,80(r3)
73
ld r9,72(r4)
74
ld r10,80(r4)
75
std r7,88(r3)
76
std r8,96(r3)
77
ld r11,88(r4)
78
ld r12,96(r4)
79
std r9,104(r3)
80
std r10,112(r3)
81
ld r5,104(r4)
82
ld r6,112(r4)
83
std r11,120(r3)
84
stdu r12,128(r3)
85
ld r7,120(r4)
86
ldu r8,128(r4)
87
bdnz 1b
88
89
std r5,8(r3)
90
std r6,16(r3)
91
ld r9,8(r4)
92
ld r10,16(r4)
93
std r7,24(r3)
94
std r8,32(r3)
95
ld r11,24(r4)
96
ld r12,32(r4)
97
std r9,40(r3)
98
std r10,48(r3)
99
ld r5,40(r4)
100
ld r6,48(r4)
101
std r11,56(r3)
102
std r12,64(r3)
103
ld r7,56(r4)
104
ld r8,64(r4)
105
std r5,72(r3)
106
std r6,80(r3)
107
ld r9,72(r4)
108
ld r10,80(r4)
109
std r7,88(r3)
110
std r8,96(r3)
111
ld r11,88(r4)
112
ld r12,96(r4)
113
std r9,104(r3)
114
std r10,112(r3)
115
std r11,120(r3)
116
std r12,128(r3)
117
blr
118
EXPORT_SYMBOL(copy_page)
119
120