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
272
273
274
275
276
277
278
|
/esw/san2/premjha2/fapi2_lite/ekb/chips/p9/procedures/utils/stopreg/p9_core_save_restore_routines.o: file format elf64-powerpc
Disassembly of section .selfRestore:
0000000000000000 <_start>:
...
0000000000000100 <_sreset_hndlr>:
100: 7e a0 00 a6 mfmsr r21
104: 62 b5 10 00 ori r21,r21,4096
108: 7a b7 57 e3 rldicl. r23,r21,42,63
10c: 41 82 00 2c beq 138 <hv_core_init>
0000000000000110 <uv_core_check>:
110: 3a 20 00 01 li r17,1
114: 7e 1f 7a a6 mfspr r16,511
118: 7a 08 0f e1 rldicl. r8,r16,1,63
11c: 41 82 00 14 beq 130 <uv_init_error>
120: 3a 20 00 02 li r17,2
124: 7a 08 07 a0 clrldi r8,r16,62
128: 2c 08 00 02 cmpwi r8,2
12c: 41 82 00 20 beq 14c <uv_core_init>
0000000000000130 <uv_init_error>:
130: 7e 39 8b 78 mr r25,r17
134: 00 00 02 00 attn
0000000000000138 <hv_core_init>:
138: 7e 99 4a a6 mfspr r20,313
13c: 3a 34 20 00 addi r17,r20,8192
140: 7e 3a 03 a6 mtsrr0 r17
144: 7e bb 03 a6 mtsrr1 r21
148: 4c 00 00 24 rfid
000000000000014c <uv_core_init>:
14c: 7e 99 7a a6 mfspr r20,505
150: 39 14 20 00 addi r8,r20,8192
154: 7d 1a 7b a6 mtspr 506,r8
158: 7e bb 7b a6 mtspr 507,r21
15c: 4c 00 02 64 .long 0x4c000264
...
200: 00 00 02 00 attn
...
300: 00 00 02 00 attn
...
380: 00 00 02 00 attn
...
400: 00 00 02 00 attn
...
480: 00 00 02 00 attn
...
500: 00 00 02 00 attn
...
600: 00 00 02 00 attn
...
700: 00 00 02 00 attn
...
800: 00 00 02 00 attn
...
900: 00 00 02 00 attn
...
980: 00 00 02 00 attn
...
a00: 00 00 02 00 attn
...
b00: 00 00 02 00 attn
...
c00: 00 00 02 00 attn
...
d00: 00 00 02 00 attn
...
e00: 00 00 02 00 attn
...
e20: 00 00 02 00 attn
...
e40: 00 00 02 00 attn
...
e60: 00 00 02 00 attn
...
e80: 00 00 02 00 attn
...
ea0: 00 00 02 00 attn
...
ec0: 00 00 02 00 attn
...
ee0: 00 00 02 00 attn
...
f00: 00 00 02 00 attn
...
f20: 00 00 02 00 attn
...
f40: 00 00 02 00 attn
...
f60: 00 00 02 00 attn
...
f80: 00 00 02 00 attn
...
1200: 7d 59 4b a6 mtspr 313,r10
0000000000001204 <save_restore_done>:
1204: 7c 00 03 e4 slbia
1208: 4c 00 02 e4 .long 0x4c0002e4
120c: 00 00 02 00 attn
...
1280: 7d 59 4b a6 mtspr 313,r10
1284: 7d 39 7b a6 mtspr 505,r9
1288: 7c 00 03 e4 slbia
128c: 4c 00 02 e4 .long 0x4c0002e4
1290: 00 00 02 00 attn
...
0000000000002000 <thread_launcher_start>:
2000: 7c 5f fa a6 mfspr r2,1023
2004: 39 00 01 e0 li r8,480
2008: 7d 14 43 a6 mtspr 276,r8
200c: 7c 95 42 a6 mfspr r4,277
2010: 78 84 07 e1 clrldi. r4,r4,63
2014: 41 82 00 1c beq 2030 <core_is_not_fused>
0000000000002018 <core_is_fused>:
2018: 78 45 ef e2 rldicl r5,r2,61,63
201c: 78 a5 0f a4 rldicr r5,r5,1,62
2020: 78 48 07 e0 clrldi r8,r2,63
2024: 7c a5 42 14 add r5,r5,r8
2028: 78 46 ff a2 rldicl r6,r2,63,62
202c: 48 00 00 0c b 2038 <thread_restore>
0000000000002030 <core_is_not_fused>:
2030: 78 45 f7 a2 rldicl r5,r2,62,62
2034: 78 46 07 a0 clrldi r6,r2,62
0000000000002038 <thread_restore>:
2038: 78 48 e7 62 rldicl r8,r2,60,61
203c: 79 08 17 64 rldicr r8,r8,2,61
2040: 7c a5 42 14 add r5,r5,r8
2044: 78 a7 64 e4 rldicr r7,r5,12,51
2048: 38 e7 24 00 addi r7,r7,9216
204c: 7c e7 a2 14 add r7,r7,r20
0000000000002050 <calculate_thread_save_addr>:
2050: 78 ce 45 e4 rldicr r14,r6,8,55
2054: 7d ce 3a 14 add r14,r14,r7
2058: 39 ce 08 00 addi r14,r14,2048
000000000000205c <calculate_core_self_save_addr>:
205c: 7c ef 3b 78 mr r15,r7
2060: 39 ef 0e 00 addi r15,r15,3584
0000000000002064 <calculate_self_restore_address>:
2064: 7c ed 3b 78 mr r13,r7
2068: 78 c8 4d a4 rldicr r8,r6,9,54
206c: 7d ad 42 14 add r13,r13,r8
2070: 39 87 0c 00 addi r12,r7,3072
2074: 7c a8 2b 78 mr r8,r5
2078: 71 08 00 01 andi. r8,r8,1
207c: 28 08 00 00 cmplwi r8,0
2080: 41 82 00 0c beq 208c <set_scratch_reg0>
0000000000002084 <set_scratch_reg1>:
2084: 7d 14 43 a6 mtspr 276,r8
2088: 48 00 00 08 b 2090 <read_scratch_reg>
000000000000208c <set_scratch_reg0>:
208c: 7c 14 43 a6 mtspr 276,r0
0000000000002090 <read_scratch_reg>:
2090: 7e 55 42 a6 mfspr r18,277
2094: 72 48 00 01 andi. r8,r18,1
2098: 2c 08 00 00 cmpwi r8,0
209c: 40 82 00 e4 bne 2180 <find_self_save>
00000000000020a0 <thread_restore_base>:
20a0: 39 00 01 e0 li r8,480
20a4: 7d 14 43 a6 mtspr 276,r8
20a8: 7d a8 03 a6 mtlr r13
20ac: 4e 80 00 21 blrl
00000000000020b0 <thread_restore_return>:
20b0: 2c 06 00 00 cmpwi r6,0
20b4: 40 82 00 1c bne 20d0 <restore_done>
00000000000020b8 <wait_until_single_thread>:
20b8: 7d 15 42 a6 mfspr r8,277
20bc: 79 08 e7 22 rldicl r8,r8,60,60
20c0: 2c 08 00 07 cmpwi r8,7
20c4: 40 82 ff f4 bne 20b8 <wait_until_single_thread>
20c8: 7d 88 03 a6 mtlr r12
20cc: 4e 80 00 21 blrl
00000000000020d0 <restore_done>:
20d0: 39 00 ff fe li r8,-2
20d4: 7e b5 40 39 and. r21,r21,r8
20d8: 28 17 00 00 cmplwi r23,0
20dc: 41 82 00 64 beq 2140 <initiate_hv_compatibility_mode>
20e0: 7a 51 e7 e3 rldicl. r17,r18,60,63
20e4: 41 82 00 7c beq 2160 <initiate_urmor_restore>
00000000000020e8 <initiate_runtime_hv_wakeup>:
20e8: 39 00 00 00 li r8,0
20ec: 7e 3b 02 a6 mfsrr1 r17
20f0: 79 11 b2 6c rldimi r17,r8,22,41
20f4: 7e 3b 03 a6 mtsrr1 r17
20f8: 7e 3b 4a a6 mfspr r17,315
20fc: 79 11 b2 6c rldimi r17,r8,22,41
2100: 7e 3b 4b a6 mtspr 315,r17
2104: 7e 1f 7a a6 mfspr r16,511
2108: 79 10 f8 0e rldimi r16,r8,63,0
210c: 79 15 b2 6c rldimi r21,r8,22,41
2110: 39 14 12 00 addi r8,r20,4608
2114: 28 06 00 00 cmplwi r6,0
2118: 41 82 00 08 beq 2120 <update_usrrx>
211c: 39 08 00 04 addi r8,r8,4
0000000000002120 <update_usrrx>:
2120: 7d 1a 7b a6 mtspr 506,r8
2124: 7e bb 7b a6 mtspr 507,r21
2128: 2c 06 00 00 cmpwi r6,0
212c: 40 82 00 08 bne 2134 <exit_to_thread_stop>
2130: 7e 1f 7b a6 mtspr 511,r16
0000000000002134 <exit_to_thread_stop>:
2134: 4c 00 01 2c isync
2138: 4c 00 02 64 .long 0x4c000264
213c: 00 00 02 00 attn
0000000000002140 <initiate_hv_compatibility_mode>:
2140: 39 14 12 00 addi r8,r20,4608
2144: 28 06 00 00 cmplwi r6,0
2148: 41 82 00 08 beq 2150 <update_srrx>
214c: 39 08 00 04 addi r8,r8,4
0000000000002150 <update_srrx>:
2150: 7d 1a 03 a6 mtsrr0 r8
2154: 7e bb 03 a6 mtsrr1 r21
2158: 4c 00 00 24 rfid
215c: 00 00 02 00 attn
0000000000002160 <initiate_urmor_restore>:
2160: 39 14 12 80 addi r8,r20,4736
2164: 28 06 00 00 cmplwi r6,0
2168: 41 82 00 08 beq 2170 <update_uv_exit>
216c: 39 08 00 08 addi r8,r8,8
0000000000002170 <update_uv_exit>:
2170: 7d 1a 7b a6 mtspr 506,r8
2174: 7e bb 7b a6 mtspr 507,r21
2178: 4c 00 02 64 .long 0x4c000264
217c: 00 00 02 00 attn
0000000000002180 <find_self_save>:
2180: 3b ed 00 08 addi r31,r13,8
2184: 7d c8 03 a6 mtlr r14
2188: 4e 80 00 21 blrl
218c: 2c 06 00 00 cmpwi r6,0
2190: 40 82 f0 74 bne 1204 <save_restore_done>
0000000000002194 <save_core_spr>:
2194: 3b ec 00 08 addi r31,r12,8
2198: 7d e8 03 a6 mtlr r15
219c: 4e 80 00 21 blrl
21a0: 4b ff f0 64 b 1204 <save_restore_done>
...
2300: 38 00 00 00 li r0,0
2304: 64 00 60 00 oris r0,r0,24576
2308: 90 1f ff fc stw r0,-4(r31)
230c: 78 20 84 20 rldicl r0,r1,16,48
2310: 64 00 64 00 oris r0,r0,25600
2314: b4 1f 00 02 sthu r0,2(r31)
2318: 78 20 04 22 rldicl r0,r1,32,48
231c: b4 1f 00 04 sthu r0,4(r31)
2320: 78 20 84 22 rldicl r0,r1,48,48
2324: b4 1f 00 08 sthu r0,8(r31)
2328: 78 20 04 20 clrldi r0,r1,48
232c: b4 1f 00 04 sthu r0,4(r31)
2330: 3b ff 00 0e addi r31,r31,14
2334: 4e 80 00 20 blr
|