hc
2023-02-18 84d1d1bed0120e0921c876885ca9006fb9ddf42e
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