]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - arch/score/include/asm/asmmacro.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[thirdparty/kernel/linux.git] / arch / score / include / asm / asmmacro.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
6bc9a396
CL
2#ifndef _ASM_SCORE_ASMMACRO_H
3#define _ASM_SCORE_ASMMACRO_H
4
5#include <asm/asm-offsets.h>
6
7#ifdef __ASSEMBLY__
8
9.macro SAVE_ALL
10 mfcr r30, cr0
11 mv r31, r0
12 nop
13 /* if UMs == 1, change stack. */
14 slli.c r30, r30, 28
15 bpl 1f
16 la r31, kernelsp
17 lw r31, [r31]
181:
19 mv r30, r0
20 addri r0, r31, -PT_SIZE
21
22 sw r30, [r0, PT_R0]
23 .set r1
24 sw r1, [r0, PT_R1]
25 .set nor1
26 sw r2, [r0, PT_R2]
27 sw r3, [r0, PT_R3]
28 sw r4, [r0, PT_R4]
29 sw r5, [r0, PT_R5]
30 sw r6, [r0, PT_R6]
31 sw r7, [r0, PT_R7]
32
33 sw r8, [r0, PT_R8]
34 sw r9, [r0, PT_R9]
35 sw r10, [r0, PT_R10]
36 sw r11, [r0, PT_R11]
37 sw r12, [r0, PT_R12]
38 sw r13, [r0, PT_R13]
39 sw r14, [r0, PT_R14]
40 sw r15, [r0, PT_R15]
41
42 sw r16, [r0, PT_R16]
43 sw r17, [r0, PT_R17]
44 sw r18, [r0, PT_R18]
45 sw r19, [r0, PT_R19]
46 sw r20, [r0, PT_R20]
47 sw r21, [r0, PT_R21]
48 sw r22, [r0, PT_R22]
49 sw r23, [r0, PT_R23]
50
51 sw r24, [r0, PT_R24]
52 sw r25, [r0, PT_R25]
53 sw r25, [r0, PT_R25]
54 sw r26, [r0, PT_R26]
55 sw r27, [r0, PT_R27]
56
57 sw r28, [r0, PT_R28]
58 sw r29, [r0, PT_R29]
59 orri r28, r0, 0x1fff
60 li r31, 0x00001fff
61 xor r28, r28, r31
62
63 mfcehl r30, r31
64 sw r30, [r0, PT_CEH]
65 sw r31, [r0, PT_CEL]
66
67 mfcr r31, cr0
68 sw r31, [r0, PT_PSR]
69
70 mfcr r31, cr1
71 sw r31, [r0, PT_CONDITION]
72
73 mfcr r31, cr2
74 sw r31, [r0, PT_ECR]
75
76 mfcr r31, cr5
77 srli r31, r31, 1
78 slli r31, r31, 1
79 sw r31, [r0, PT_EPC]
80.endm
81
82.macro RESTORE_ALL_AND_RET
83 mfcr r30, cr0
84 srli r30, r30, 1
85 slli r30, r30, 1
86 mtcr r30, cr0
87 nop
88 nop
89 nop
90 nop
91 nop
92
93 .set r1
94 ldis r1, 0x00ff
95 and r30, r30, r1
96 not r1, r1
97 lw r31, [r0, PT_PSR]
98 and r31, r31, r1
99 .set nor1
100 or r31, r31, r30
101 mtcr r31, cr0
102 nop
103 nop
104 nop
105 nop
106 nop
107
108 lw r30, [r0, PT_CONDITION]
109 mtcr r30, cr1
110 nop
111 nop
112 nop
113 nop
114 nop
115
116 lw r30, [r0, PT_CEH]
117 lw r31, [r0, PT_CEL]
118 mtcehl r30, r31
119
120 .set r1
121 lw r1, [r0, PT_R1]
122 .set nor1
123 lw r2, [r0, PT_R2]
124 lw r3, [r0, PT_R3]
125 lw r4, [r0, PT_R4]
126 lw r5, [r0, PT_R5]
127 lw r6, [r0, PT_R6]
128 lw r7, [r0, PT_R7]
129
130 lw r8, [r0, PT_R8]
131 lw r9, [r0, PT_R9]
132 lw r10, [r0, PT_R10]
133 lw r11, [r0, PT_R11]
134 lw r12, [r0, PT_R12]
135 lw r13, [r0, PT_R13]
136 lw r14, [r0, PT_R14]
137 lw r15, [r0, PT_R15]
138
139 lw r16, [r0, PT_R16]
140 lw r17, [r0, PT_R17]
141 lw r18, [r0, PT_R18]
142 lw r19, [r0, PT_R19]
143 lw r20, [r0, PT_R20]
144 lw r21, [r0, PT_R21]
145 lw r22, [r0, PT_R22]
146 lw r23, [r0, PT_R23]
147
148 lw r24, [r0, PT_R24]
149 lw r25, [r0, PT_R25]
150 lw r26, [r0, PT_R26]
151 lw r27, [r0, PT_R27]
152 lw r28, [r0, PT_R28]
153 lw r29, [r0, PT_R29]
154
155 lw r30, [r0, PT_EPC]
156 lw r0, [r0, PT_R0]
157 mtcr r30, cr5
158 rte
159.endm
160
161#endif /* __ASSEMBLY__ */
162#endif /* _ASM_SCORE_ASMMACRO_H */