1/*
2 * Copyright 2014, Michael Ellerman, IBM Corp.
3 * Licensed under GPLv2.
4 */
5
6#include <ppc-asm.h>
7
8	.text
9
10FUNC_START(core_busy_loop)
11	stdu	%r1, -168(%r1)
12	std	r14, 160(%r1)
13	std	r15, 152(%r1)
14	std	r16, 144(%r1)
15	std	r17, 136(%r1)
16	std	r18, 128(%r1)
17	std	r19, 120(%r1)
18	std	r20, 112(%r1)
19	std	r21, 104(%r1)
20	std	r22, 96(%r1)
21	std	r23, 88(%r1)
22	std	r24, 80(%r1)
23	std	r25, 72(%r1)
24	std	r26, 64(%r1)
25	std	r27, 56(%r1)
26	std	r28, 48(%r1)
27	std	r29, 40(%r1)
28	std	r30, 32(%r1)
29	std	r31, 24(%r1)
30
31	li	 r3, 0x3030
32	std	 r3, -96(%r1)
33	li	 r4, 0x4040
34	std	 r4, -104(%r1)
35	li	 r5, 0x5050
36	std	 r5, -112(%r1)
37	li	 r6, 0x6060
38	std	 r6, -120(%r1)
39	li	 r7, 0x7070
40	std	 r7, -128(%r1)
41	li	 r8, 0x0808
42	std	 r8, -136(%r1)
43	li	 r9, 0x0909
44	std	 r9, -144(%r1)
45	li	r10, 0x1010
46	std	r10, -152(%r1)
47	li	r11, 0x1111
48	std	r11, -160(%r1)
49	li	r14, 0x1414
50	std	r14, -168(%r1)
51	li	r15, 0x1515
52	std	r15, -176(%r1)
53	li	r16, 0x1616
54	std	r16, -184(%r1)
55	li	r17, 0x1717
56	std	r17, -192(%r1)
57	li	r18, 0x1818
58	std	r18, -200(%r1)
59	li	r19, 0x1919
60	std	r19, -208(%r1)
61	li	r20, 0x2020
62	std	r20, -216(%r1)
63	li	r21, 0x2121
64	std	r21, -224(%r1)
65	li	r22, 0x2222
66	std	r22, -232(%r1)
67	li	r23, 0x2323
68	std	r23, -240(%r1)
69	li	r24, 0x2424
70	std	r24, -248(%r1)
71	li	r25, 0x2525
72	std	r25, -256(%r1)
73	li	r26, 0x2626
74	std	r26, -264(%r1)
75	li	r27, 0x2727
76	std	r27, -272(%r1)
77	li	r28, 0x2828
78	std	r28, -280(%r1)
79	li	r29, 0x2929
80	std	r29, -288(%r1)
81	li	r30, 0x3030
82	li	r31, 0x3131
83
84	li	r3, 0
850:	addi	r3, r3, 1
86	cmpwi	r3, 100
87	blt	0b
88
89	/* Return 1 (fail) unless we get through all the checks */
90	li	r3, 1
91
92	/* Check none of our registers have been corrupted */
93	cmpwi	r4,  0x4040
94	bne	1f
95	cmpwi	r5,  0x5050
96	bne	1f
97	cmpwi	r6,  0x6060
98	bne	1f
99	cmpwi	r7,  0x7070
100	bne	1f
101	cmpwi	r8,  0x0808
102	bne	1f
103	cmpwi	r9,  0x0909
104	bne	1f
105	cmpwi	r10, 0x1010
106	bne	1f
107	cmpwi	r11, 0x1111
108	bne	1f
109	cmpwi	r14, 0x1414
110	bne	1f
111	cmpwi	r15, 0x1515
112	bne	1f
113	cmpwi	r16, 0x1616
114	bne	1f
115	cmpwi	r17, 0x1717
116	bne	1f
117	cmpwi	r18, 0x1818
118	bne	1f
119	cmpwi	r19, 0x1919
120	bne	1f
121	cmpwi	r20, 0x2020
122	bne	1f
123	cmpwi	r21, 0x2121
124	bne	1f
125	cmpwi	r22, 0x2222
126	bne	1f
127	cmpwi	r23, 0x2323
128	bne	1f
129	cmpwi	r24, 0x2424
130	bne	1f
131	cmpwi	r25, 0x2525
132	bne	1f
133	cmpwi	r26, 0x2626
134	bne	1f
135	cmpwi	r27, 0x2727
136	bne	1f
137	cmpwi	r28, 0x2828
138	bne	1f
139	cmpwi	r29, 0x2929
140	bne	1f
141	cmpwi	r30, 0x3030
142	bne	1f
143	cmpwi	r31, 0x3131
144	bne	1f
145
146	/* Load junk into all our registers before we reload them from the stack. */
147	li	r3,  0xde
148	li	r4,  0xad
149	li	r5,  0xbe
150	li	r6,  0xef
151	li	r7,  0xde
152	li	r8,  0xad
153	li	r9,  0xbe
154	li	r10, 0xef
155	li	r11, 0xde
156	li	r14, 0xad
157	li	r15, 0xbe
158	li	r16, 0xef
159	li	r17, 0xde
160	li	r18, 0xad
161	li	r19, 0xbe
162	li	r20, 0xef
163	li	r21, 0xde
164	li	r22, 0xad
165	li	r23, 0xbe
166	li	r24, 0xef
167	li	r25, 0xde
168	li	r26, 0xad
169	li	r27, 0xbe
170	li	r28, 0xef
171	li	r29, 0xdd
172
173	ld	r3,	-96(%r1)
174	cmpwi	r3,  0x3030
175	bne	1f
176	ld	r4,	-104(%r1)
177	cmpwi	r4,  0x4040
178	bne	1f
179	ld	r5,	-112(%r1)
180	cmpwi	r5,  0x5050
181	bne	1f
182	ld	r6,	-120(%r1)
183	cmpwi	r6,  0x6060
184	bne	1f
185	ld	r7,	-128(%r1)
186	cmpwi	r7,  0x7070
187	bne	1f
188	ld	r8,	-136(%r1)
189	cmpwi	r8,  0x0808
190	bne	1f
191	ld	r9,	-144(%r1)
192	cmpwi	r9,  0x0909
193	bne	1f
194	ld	r10, -152(%r1)
195	cmpwi	r10, 0x1010
196	bne	1f
197	ld	r11, -160(%r1)
198	cmpwi	r11, 0x1111
199	bne	1f
200	ld	r14, -168(%r1)
201	cmpwi	r14, 0x1414
202	bne	1f
203	ld	r15, -176(%r1)
204	cmpwi	r15, 0x1515
205	bne	1f
206	ld	r16, -184(%r1)
207	cmpwi	r16, 0x1616
208	bne	1f
209	ld	r17, -192(%r1)
210	cmpwi	r17, 0x1717
211	bne	1f
212	ld	r18, -200(%r1)
213	cmpwi	r18, 0x1818
214	bne	1f
215	ld	r19, -208(%r1)
216	cmpwi	r19, 0x1919
217	bne	1f
218	ld	r20, -216(%r1)
219	cmpwi	r20, 0x2020
220	bne	1f
221	ld	r21, -224(%r1)
222	cmpwi	r21, 0x2121
223	bne	1f
224	ld	r22, -232(%r1)
225	cmpwi	r22, 0x2222
226	bne	1f
227	ld	r23, -240(%r1)
228	cmpwi	r23, 0x2323
229	bne	1f
230	ld	r24, -248(%r1)
231	cmpwi	r24, 0x2424
232	bne	1f
233	ld	r25, -256(%r1)
234	cmpwi	r25, 0x2525
235	bne	1f
236	ld	r26, -264(%r1)
237	cmpwi	r26, 0x2626
238	bne	1f
239	ld	r27, -272(%r1)
240	cmpwi	r27, 0x2727
241	bne	1f
242	ld	r28, -280(%r1)
243	cmpwi	r28, 0x2828
244	bne	1f
245	ld	r29, -288(%r1)
246	cmpwi	r29, 0x2929
247	bne	1f
248
249	/* Load 0 (success) to return */
250	li	r3, 0
251
2521:	ld	r14, 160(%r1)
253	ld	r15, 152(%r1)
254	ld	r16, 144(%r1)
255	ld	r17, 136(%r1)
256	ld	r18, 128(%r1)
257	ld	r19, 120(%r1)
258	ld	r20, 112(%r1)
259	ld	r21, 104(%r1)
260	ld	r22, 96(%r1)
261	ld	r23, 88(%r1)
262	ld	r24, 80(%r1)
263	ld	r25, 72(%r1)
264	ld	r26, 64(%r1)
265	ld	r27, 56(%r1)
266	ld	r28, 48(%r1)
267	ld	r29, 40(%r1)
268	ld	r30, 32(%r1)
269	ld	r31, 24(%r1)
270	addi	%r1, %r1, 168
271	blr
272