summaryrefslogtreecommitdiffstats
path: root/kernel/tools/testing/selftests/powerpc/pmu/ebb/busy_loop.S
blob: c7e4093f1cd39c7e719124cd8330279670143e90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
/*
 * Copyright 2014, Michael Ellerman, IBM Corp.
 * Licensed under GPLv2.
 */

#include <ppc-asm.h>

	.text

FUNC_START(core_busy_loop)
	stdu	%r1, -168(%r1)
	std	r14, 160(%r1)
	std	r15, 152(%r1)
	std	r16, 144(%r1)
	std	r17, 136(%r1)
	std	r18, 128(%r1)
	std	r19, 120(%r1)
	std	r20, 112(%r1)
	std	r21, 104(%r1)
	std	r22, 96(%r1)
	std	r23, 88(%r1)
	std	r24, 80(%r1)
	std	r25, 72(%r1)
	std	r26, 64(%r1)
	std	r27, 56(%r1)
	std	r28, 48(%r1)
	std	r29, 40(%r1)
	std	r30, 32(%r1)
	std	r31, 24(%r1)

	li	 r3, 0x3030
	std	 r3, -96(%r1)
	li	 r4, 0x4040
	std	 r4, -104(%r1)
	li	 r5, 0x5050
	std	 r5, -112(%r1)
	li	 r6, 0x6060
	std	 r6, -120(%r1)
	li	 r7, 0x7070
	std	 r7, -128(%r1)
	li	 r8, 0x0808
	std	 r8, -136(%r1)
	li	 r9, 0x0909
	std	 r9, -144(%r1)
	li	r10, 0x1010
	std	r10, -152(%r1)
	li	r11, 0x1111
	std	r11, -160(%r1)
	li	r14, 0x1414
	std	r14, -168(%r1)
	li	r15, 0x1515
	std	r15, -176(%r1)
	li	r16, 0x1616
	std	r16, -184(%r1)
	li	r17, 0x1717
	std	r17, -192(%r1)
	li	r18, 0x1818
	std	r18, -200(%r1)
	li	r19, 0x1919
	std	r19, -208(%r1)
	li	r20, 0x2020
	std	r20, -216(%r1)
	li	r21, 0x2121
	std	r21, -224(%r1)
	li	r22, 0x2222
	std	r22, -232(%r1)
	li	r23, 0x2323
	std	r23, -240(%r1)
	li	r24, 0x2424
	std	r24, -248(%r1)
	li	r25, 0x2525
	std	r25, -256(%r1)
	li	r26, 0x2626
	std	r26, -264(%r1)
	li	r27, 0x2727
	std	r27, -272(%r1)
	li	r28, 0x2828
	std	r28, -280(%r1)
	li	r29, 0x2929
	std	r29, -288(%r1)
	li	r30, 0x3030
	li	r31, 0x3131

	li	r3, 0
0:	addi	r3, r3, 1
	cmpwi	r3, 100
	blt	0b

	/* Return 1 (fail) unless we get through all the checks */
	li	r3, 1

	/* Check none of our registers have been corrupted */
	cmpwi	r4,  0x4040
	bne	1f
	cmpwi	r5,  0x5050
	bne	1f
	cmpwi	r6,  0x6060
	bne	1f
	cmpwi	r7,  0x7070
	bne	1f
	cmpwi	r8,  0x0808
	bne	1f
	cmpwi	r9,  0x0909
	bne	1f
	cmpwi	r10, 0x1010
	bne	1f
	cmpwi	r11, 0x1111
	bne	1f
	cmpwi	r14, 0x1414
	bne	1f
	cmpwi	r15, 0x1515
	bne	1f
	cmpwi	r16, 0x1616
	bne	1f
	cmpwi	r17, 0x1717
	bne	1f
	cmpwi	r18, 0x1818
	bne	1f
	cmpwi	r19, 0x1919
	bne	1f
	cmpwi	r20, 0x2020
	bne	1f
	cmpwi	r21, 0x2121
	bne	1f
	cmpwi	r22, 0x2222
	bne	1f
	cmpwi	r23, 0x2323
	bne	1f
	cmpwi	r24, 0x2424
	bne	1f
	cmpwi	r25, 0x2525
	bne	1f
	cmpwi	r26, 0x2626
	bne	1f
	cmpwi	r27, 0x2727
	bne	1f
	cmpwi	r28, 0x2828
	bne	1f
	cmpwi	r29, 0x2929
	bne	1f
	cmpwi	r30, 0x3030
	bne	1f
	cmpwi	r31, 0x3131
	bne	1f

	/* Load junk into all our registers before we reload them from the stack. */
	li	r3,  0xde
	li	r4,  0xad
	li	r5,  0xbe
	li	r6,  0xef
	li	r7,  0xde
	li	r8,  0xad
	li	r9,  0xbe
	li	r10, 0xef
	li	r11, 0xde
	li	r14, 0xad
	li	r15, 0xbe
	li	r16, 0xef
	li	r17, 0xde
	li	r18, 0xad
	li	r19, 0xbe
	li	r20, 0xef
	li	r21, 0xde
	li	r22, 0xad
	li	r23, 0xbe
	li	r24, 0xef
	li	r25, 0xde
	li	r26, 0xad
	li	r27, 0xbe
	li	r28, 0xef
	li	r29, 0xdd

	ld	r3,	-96(%r1)
	cmpwi	r3,  0x3030
	bne	1f
	ld	r4,	-104(%r1)
	cmpwi	r4,  0x4040
	bne	1f
	ld	r5,	-112(%r1)
	cmpwi	r5,  0x5050
	bne	1f
	ld	r6,	-120(%r1)
	cmpwi	r6,  0x6060
	bne	1f
	ld	r7,	-128(%r1)
	cmpwi	r7,  0x7070
	bne	1f
	ld	r8,	-136(%r1)
	cmpwi	r8,  0x0808
	bne	1f
	ld	r9,	-144(%r1)
	cmpwi	r9,  0x0909
	bne	1f
	ld	r10, -152(%r1)
	cmpwi	r10, 0x1010
	bne	1f
	ld	r11, -160(%r1)
	cmpwi	r11, 0x1111
	bne	1f
	ld	r14, -168(%r1)
	cmpwi	r14, 0x1414
	bne	1f
	ld	r15, -176(%r1)
	cmpwi	r15, 0x1515
	bne	1f
	ld	r16, -184(%r1)
	cmpwi	r16, 0x1616
	bne	1f
	ld	r17, -192(%r1)
	cmpwi	r17, 0x1717
	bne	1f
	ld	r18, -200(%r1)
	cmpwi	r18, 0x1818
	bne	1f
	ld	r19, -208(%r1)
	cmpwi	r19, 0x1919
	bne	1f
	ld	r20, -216(%r1)
	cmpwi	r20, 0x2020
	bne	1f
	ld	r21, -224(%r1)
	cmpwi	r21, 0x2121
	bne	1f
	ld	r22, -232(%r1)
	cmpwi	r22, 0x2222
	bne	1f
	ld	r23, -240(%r1)
	cmpwi	r23, 0x2323
	bne	1f
	ld	r24, -248(%r1)
	cmpwi	r24, 0x2424
	bne	1f
	ld	r25, -256(%r1)
	cmpwi	r25, 0x2525
	bne	1f
	ld	r26, -264(%r1)
	cmpwi	r26, 0x2626
	bne	1f
	ld	r27, -272(%r1)
	cmpwi	r27, 0x2727
	bne	1f
	ld	r28, -280(%r1)
	cmpwi	r28, 0x2828
	bne	1f
	ld	r29, -288(%r1)
	cmpwi	r29, 0x2929
	bne	1f

	/* Load 0 (success) to return */
	li	r3, 0

1:	ld	r14, 160(%r1)
	ld	r15, 152(%r1)
	ld	r16, 144(%r1)
	ld	r17, 136(%r1)
	ld	r18, 128(%r1)
	ld	r19, 120(%r1)
	ld	r20, 112(%r1)
	ld	r21, 104(%r1)
	ld	r22, 96(%r1)
	ld	r23, 88(%r1)
	ld	r24, 80(%r1)
	ld	r25, 72(%r1)
	ld	r26, 64(%r1)
	ld	r27, 56(%r1)
	ld	r28, 48(%r1)
	ld	r29, 40(%r1)
	ld	r30, 32(%r1)
	ld	r31, 24(%r1)
	addi	%r1, %r1, 168
	blr