Commit | Line | Data |
---|---|---|
362e7701 ME |
1 | /* |
2 | * Copyright 2008 Michael Ellerman, IBM Corporation. | |
3 | * | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or | |
6 | * modify it under the terms of the GNU General Public License | |
7 | * as published by the Free Software Foundation; either version | |
8 | * 2 of the License, or (at your option) any later version. | |
9 | */ | |
10 | ||
11 | #include <asm/feature-fixups.h> | |
12 | #include <asm/ppc_asm.h> | |
2d1b2027 | 13 | #include <asm/synch.h> |
362e7701 ME |
14 | |
15 | .text | |
16 | ||
17 | #define globl(x) \ | |
18 | .globl x; \ | |
19 | x: | |
20 | ||
21 | globl(ftr_fixup_test1) | |
22 | or 1,1,1 | |
23 | or 2,2,2 /* fixup will nop out this instruction */ | |
24 | or 3,3,3 | |
25 | ||
26 | globl(end_ftr_fixup_test1) | |
27 | ||
28 | globl(ftr_fixup_test1_orig) | |
29 | or 1,1,1 | |
30 | or 2,2,2 | |
31 | or 3,3,3 | |
32 | ||
33 | globl(ftr_fixup_test1_expected) | |
34 | or 1,1,1 | |
35 | nop | |
36 | or 3,3,3 | |
37 | ||
38 | globl(ftr_fixup_test2) | |
39 | or 1,1,1 | |
40 | or 2,2,2 /* fixup will replace this with ftr_fixup_test2_alt */ | |
41 | or 3,3,3 | |
42 | ||
43 | globl(end_ftr_fixup_test2) | |
44 | ||
45 | globl(ftr_fixup_test2_orig) | |
46 | or 1,1,1 | |
47 | or 2,2,2 | |
48 | or 3,3,3 | |
49 | ||
50 | globl(ftr_fixup_test2_alt) | |
51 | or 31,31,31 | |
52 | ||
53 | globl(ftr_fixup_test2_expected) | |
54 | or 1,1,1 | |
55 | or 31,31,31 | |
56 | or 3,3,3 | |
57 | ||
58 | globl(ftr_fixup_test3) | |
59 | or 1,1,1 | |
60 | or 2,2,2 /* fixup will fail to replace this */ | |
61 | or 3,3,3 | |
62 | ||
63 | globl(end_ftr_fixup_test3) | |
64 | ||
65 | globl(ftr_fixup_test3_orig) | |
66 | or 1,1,1 | |
67 | or 2,2,2 | |
68 | or 3,3,3 | |
69 | ||
70 | globl(ftr_fixup_test3_alt) | |
71 | or 31,31,31 | |
72 | or 31,31,31 | |
73 | ||
74 | globl(ftr_fixup_test4) | |
75 | or 1,1,1 | |
76 | or 2,2,2 | |
77 | or 2,2,2 | |
78 | or 2,2,2 | |
79 | or 2,2,2 | |
80 | or 3,3,3 | |
81 | ||
82 | globl(end_ftr_fixup_test4) | |
83 | ||
84 | globl(ftr_fixup_test4_expected) | |
85 | or 1,1,1 | |
86 | or 31,31,31 | |
87 | or 31,31,31 | |
88 | nop | |
89 | nop | |
90 | or 3,3,3 | |
91 | ||
92 | globl(ftr_fixup_test4_orig) | |
93 | or 1,1,1 | |
94 | or 2,2,2 | |
95 | or 2,2,2 | |
96 | or 2,2,2 | |
97 | or 2,2,2 | |
98 | or 3,3,3 | |
99 | ||
100 | globl(ftr_fixup_test4_alt) | |
101 | or 31,31,31 | |
102 | or 31,31,31 | |
103 | ||
104 | ||
105 | globl(ftr_fixup_test5) | |
106 | or 1,1,1 | |
107 | BEGIN_FTR_SECTION | |
108 | or 2,2,2 | |
109 | or 2,2,2 | |
110 | or 2,2,2 | |
111 | or 2,2,2 | |
112 | or 2,2,2 | |
113 | or 2,2,2 | |
114 | or 2,2,2 | |
115 | FTR_SECTION_ELSE | |
116 | 2: b 3f | |
117 | 3: or 5,5,5 | |
118 | beq 3b | |
119 | b 1f | |
120 | or 6,6,6 | |
121 | b 2b | |
122 | 1: bdnz 3b | |
123 | ALT_FTR_SECTION_END(0, 1) | |
124 | or 1,1,1 | |
125 | ||
126 | globl(end_ftr_fixup_test5) | |
127 | ||
128 | globl(ftr_fixup_test5_expected) | |
129 | or 1,1,1 | |
130 | 2: b 3f | |
131 | 3: or 5,5,5 | |
132 | beq 3b | |
133 | b 1f | |
134 | or 6,6,6 | |
135 | b 2b | |
136 | 1: bdnz 3b | |
137 | or 1,1,1 | |
138 | ||
139 | globl(ftr_fixup_test6) | |
140 | 1: or 1,1,1 | |
141 | BEGIN_FTR_SECTION | |
142 | or 5,5,5 | |
5888da18 | 143 | 2: PPC_LCMPI r3,0 |
362e7701 ME |
144 | beq 4f |
145 | blt 2b | |
146 | b 1b | |
147 | b 4f | |
148 | FTR_SECTION_ELSE | |
149 | 2: or 2,2,2 | |
5888da18 | 150 | PPC_LCMPI r3,1 |
362e7701 ME |
151 | beq 3f |
152 | blt 2b | |
153 | b 3f | |
154 | b 1b | |
155 | ALT_FTR_SECTION_END(0, 1) | |
156 | 3: or 1,1,1 | |
157 | or 2,2,2 | |
158 | 4: or 3,3,3 | |
159 | ||
160 | globl(end_ftr_fixup_test6) | |
161 | ||
162 | globl(ftr_fixup_test6_expected) | |
163 | 1: or 1,1,1 | |
164 | 2: or 2,2,2 | |
5888da18 | 165 | PPC_LCMPI r3,1 |
362e7701 ME |
166 | beq 3f |
167 | blt 2b | |
168 | b 3f | |
169 | b 1b | |
170 | 2: or 1,1,1 | |
171 | or 2,2,2 | |
172 | 3: or 3,3,3 | |
173 | ||
174 | ||
c0337288 ME |
175 | #if 0 |
176 | /* Test that if we have a larger else case the assembler spots it and | |
177 | * reports an error. #if 0'ed so as not to break the build normally. | |
178 | */ | |
179 | ftr_fixup_test7: | |
180 | or 1,1,1 | |
181 | BEGIN_FTR_SECTION | |
182 | or 2,2,2 | |
183 | or 2,2,2 | |
184 | or 2,2,2 | |
185 | FTR_SECTION_ELSE | |
186 | or 3,3,3 | |
187 | or 3,3,3 | |
188 | or 3,3,3 | |
189 | or 3,3,3 | |
190 | ALT_FTR_SECTION_END(0, 1) | |
191 | or 1,1,1 | |
192 | #endif | |
193 | ||
362e7701 ME |
194 | #define MAKE_MACRO_TEST(TYPE) \ |
195 | globl(ftr_fixup_test_ ##TYPE##_macros) \ | |
196 | or 1,1,1; \ | |
197 | /* Basic test, this section should all be nop'ed */ \ | |
198 | BEGIN_##TYPE##_SECTION \ | |
199 | or 2,2,2; \ | |
200 | or 2,2,2; \ | |
201 | or 2,2,2; \ | |
202 | END_##TYPE##_SECTION(0, 1) \ | |
203 | or 1,1,1; \ | |
204 | or 1,1,1; \ | |
205 | /* Basic test, this section should NOT be nop'ed */ \ | |
206 | BEGIN_##TYPE##_SECTION \ | |
207 | or 2,2,2; \ | |
208 | or 2,2,2; \ | |
209 | or 2,2,2; \ | |
210 | END_##TYPE##_SECTION(0, 0) \ | |
211 | or 1,1,1; \ | |
212 | or 1,1,1; \ | |
213 | /* Nesting test, inner section should be nop'ed */ \ | |
214 | BEGIN_##TYPE##_SECTION \ | |
215 | or 2,2,2; \ | |
216 | or 2,2,2; \ | |
217 | BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
218 | or 3,3,3; \ | |
219 | or 3,3,3; \ | |
220 | END_##TYPE##_SECTION_NESTED(0, 1, 80) \ | |
221 | or 2,2,2; \ | |
222 | or 2,2,2; \ | |
223 | END_##TYPE##_SECTION(0, 0) \ | |
224 | or 1,1,1; \ | |
225 | or 1,1,1; \ | |
226 | /* Nesting test, whole section should be nop'ed */ \ | |
227 | BEGIN_##TYPE##_SECTION \ | |
228 | or 2,2,2; \ | |
229 | or 2,2,2; \ | |
230 | BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
231 | or 3,3,3; \ | |
232 | or 3,3,3; \ | |
233 | END_##TYPE##_SECTION_NESTED(0, 0, 80) \ | |
234 | or 2,2,2; \ | |
235 | or 2,2,2; \ | |
236 | END_##TYPE##_SECTION(0, 1) \ | |
237 | or 1,1,1; \ | |
238 | or 1,1,1; \ | |
239 | /* Nesting test, none should be nop'ed */ \ | |
240 | BEGIN_##TYPE##_SECTION \ | |
241 | or 2,2,2; \ | |
242 | or 2,2,2; \ | |
243 | BEGIN_##TYPE##_SECTION_NESTED(80) \ | |
244 | or 3,3,3; \ | |
245 | or 3,3,3; \ | |
246 | END_##TYPE##_SECTION_NESTED(0, 0, 80) \ | |
247 | or 2,2,2; \ | |
248 | or 2,2,2; \ | |
249 | END_##TYPE##_SECTION(0, 0) \ | |
250 | or 1,1,1; \ | |
251 | or 1,1,1; \ | |
252 | /* Basic alt section test, default case should be taken */ \ | |
253 | BEGIN_##TYPE##_SECTION \ | |
254 | or 3,3,3; \ | |
255 | or 3,3,3; \ | |
256 | or 3,3,3; \ | |
257 | ##TYPE##_SECTION_ELSE \ | |
258 | or 5,5,5; \ | |
259 | or 5,5,5; \ | |
260 | ALT_##TYPE##_SECTION_END(0, 0) \ | |
261 | or 1,1,1; \ | |
262 | or 1,1,1; \ | |
263 | /* Basic alt section test, else case should be taken */ \ | |
264 | BEGIN_##TYPE##_SECTION \ | |
265 | or 3,3,3; \ | |
266 | or 3,3,3; \ | |
267 | or 3,3,3; \ | |
268 | ##TYPE##_SECTION_ELSE \ | |
269 | or 31,31,31; \ | |
270 | or 31,31,31; \ | |
271 | or 31,31,31; \ | |
272 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
273 | or 1,1,1; \ | |
274 | or 1,1,1; \ | |
275 | /* Alt with smaller else case, should be padded with nops */ \ | |
276 | BEGIN_##TYPE##_SECTION \ | |
277 | or 3,3,3; \ | |
278 | or 3,3,3; \ | |
279 | or 3,3,3; \ | |
280 | ##TYPE##_SECTION_ELSE \ | |
281 | or 31,31,31; \ | |
282 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
283 | or 1,1,1; \ | |
284 | or 1,1,1; \ | |
285 | /* Alt section with nested section in default case */ \ | |
286 | /* Default case should be taken, with nop'ed inner section */ \ | |
287 | BEGIN_##TYPE##_SECTION \ | |
288 | or 3,3,3; \ | |
289 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
290 | or 3,3,3; \ | |
291 | or 3,3,3; \ | |
292 | END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
293 | or 3,3,3; \ | |
294 | ##TYPE##_SECTION_ELSE \ | |
295 | or 2,2,2; \ | |
296 | or 2,2,2; \ | |
297 | ALT_##TYPE##_SECTION_END(0, 0) \ | |
298 | or 1,1,1; \ | |
299 | or 1,1,1; \ | |
300 | /* Alt section with nested section in else, default taken */ \ | |
301 | BEGIN_##TYPE##_SECTION \ | |
302 | or 3,3,3; \ | |
303 | or 3,3,3; \ | |
304 | or 3,3,3; \ | |
305 | ##TYPE##_SECTION_ELSE \ | |
306 | or 5,5,5; \ | |
307 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
308 | or 3,3,3; \ | |
309 | END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
310 | or 5,5,5; \ | |
311 | ALT_##TYPE##_SECTION_END(0, 0) \ | |
312 | or 1,1,1; \ | |
313 | or 1,1,1; \ | |
314 | /* Alt section with nested section in else, else taken & nop */ \ | |
315 | BEGIN_##TYPE##_SECTION \ | |
316 | or 3,3,3; \ | |
317 | or 3,3,3; \ | |
318 | or 3,3,3; \ | |
319 | ##TYPE##_SECTION_ELSE \ | |
320 | or 5,5,5; \ | |
321 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
322 | or 3,3,3; \ | |
323 | END_##TYPE##_SECTION_NESTED(0, 1, 95) \ | |
324 | or 5,5,5; \ | |
325 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
326 | or 1,1,1; \ | |
327 | or 1,1,1; \ | |
328 | /* Feature section with nested alt section, default taken */ \ | |
329 | BEGIN_##TYPE##_SECTION \ | |
330 | or 2,2,2; \ | |
331 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
332 | or 1,1,1; \ | |
333 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
334 | or 5,5,5; \ | |
335 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
336 | or 2,2,2; \ | |
337 | END_##TYPE##_SECTION(0, 0) \ | |
338 | or 1,1,1; \ | |
339 | or 1,1,1; \ | |
340 | /* Feature section with nested alt section, else taken */ \ | |
341 | BEGIN_##TYPE##_SECTION \ | |
342 | or 2,2,2; \ | |
343 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
344 | or 1,1,1; \ | |
345 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
346 | or 5,5,5; \ | |
347 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
348 | or 2,2,2; \ | |
349 | END_##TYPE##_SECTION(0, 0) \ | |
350 | or 1,1,1; \ | |
351 | or 1,1,1; \ | |
352 | /* Feature section with nested alt section, all nop'ed */ \ | |
353 | BEGIN_##TYPE##_SECTION \ | |
354 | or 2,2,2; \ | |
355 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
356 | or 1,1,1; \ | |
357 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
358 | or 5,5,5; \ | |
359 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
360 | or 2,2,2; \ | |
361 | END_##TYPE##_SECTION(0, 1) \ | |
362 | or 1,1,1; \ | |
363 | or 1,1,1; \ | |
364 | /* Nested alt sections, default with inner default taken */ \ | |
365 | BEGIN_##TYPE##_SECTION \ | |
366 | or 2,2,2; \ | |
367 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
368 | or 1,1,1; \ | |
369 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
370 | or 5,5,5; \ | |
371 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) \ | |
372 | or 2,2,2; \ | |
373 | ##TYPE##_SECTION_ELSE \ | |
374 | or 31,31,31; \ | |
375 | BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
376 | or 5,5,5; \ | |
377 | ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
378 | or 1,1,1; \ | |
379 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
380 | or 31,31,31; \ | |
381 | ALT_##TYPE##_SECTION_END(0, 0) \ | |
382 | or 1,1,1; \ | |
383 | or 1,1,1; \ | |
384 | /* Nested alt sections, default with inner else taken */ \ | |
385 | BEGIN_##TYPE##_SECTION \ | |
386 | or 2,2,2; \ | |
387 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
388 | or 1,1,1; \ | |
389 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
390 | or 5,5,5; \ | |
391 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
392 | or 2,2,2; \ | |
393 | ##TYPE##_SECTION_ELSE \ | |
394 | or 31,31,31; \ | |
395 | BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
396 | or 5,5,5; \ | |
397 | ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
398 | or 1,1,1; \ | |
399 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
400 | or 31,31,31; \ | |
401 | ALT_##TYPE##_SECTION_END(0, 0) \ | |
402 | or 1,1,1; \ | |
403 | or 1,1,1; \ | |
404 | /* Nested alt sections, else with inner default taken */ \ | |
405 | BEGIN_##TYPE##_SECTION \ | |
406 | or 2,2,2; \ | |
407 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
408 | or 1,1,1; \ | |
409 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
410 | or 5,5,5; \ | |
411 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
412 | or 2,2,2; \ | |
413 | ##TYPE##_SECTION_ELSE \ | |
414 | or 31,31,31; \ | |
415 | BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
416 | or 5,5,5; \ | |
417 | ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
418 | or 1,1,1; \ | |
419 | ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) \ | |
420 | or 31,31,31; \ | |
421 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
422 | or 1,1,1; \ | |
423 | or 1,1,1; \ | |
424 | /* Nested alt sections, else with inner else taken */ \ | |
425 | BEGIN_##TYPE##_SECTION \ | |
426 | or 2,2,2; \ | |
427 | BEGIN_##TYPE##_SECTION_NESTED(95) \ | |
428 | or 1,1,1; \ | |
429 | ##TYPE##_SECTION_ELSE_NESTED(95) \ | |
430 | or 5,5,5; \ | |
431 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) \ | |
432 | or 2,2,2; \ | |
433 | ##TYPE##_SECTION_ELSE \ | |
434 | or 31,31,31; \ | |
435 | BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
436 | or 5,5,5; \ | |
437 | ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
438 | or 1,1,1; \ | |
439 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) \ | |
440 | or 31,31,31; \ | |
441 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
442 | or 1,1,1; \ | |
443 | or 1,1,1; \ | |
444 | /* Nested alt sections, else can have large else case */ \ | |
445 | BEGIN_##TYPE##_SECTION \ | |
446 | or 2,2,2; \ | |
447 | or 2,2,2; \ | |
448 | or 2,2,2; \ | |
449 | or 2,2,2; \ | |
450 | ##TYPE##_SECTION_ELSE \ | |
451 | BEGIN_##TYPE##_SECTION_NESTED(94) \ | |
452 | or 5,5,5; \ | |
453 | or 5,5,5; \ | |
454 | or 5,5,5; \ | |
455 | or 5,5,5; \ | |
456 | ##TYPE##_SECTION_ELSE_NESTED(94) \ | |
457 | or 1,1,1; \ | |
458 | or 1,1,1; \ | |
459 | or 1,1,1; \ | |
460 | or 1,1,1; \ | |
461 | ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) \ | |
462 | ALT_##TYPE##_SECTION_END(0, 1) \ | |
463 | or 1,1,1; \ | |
464 | or 1,1,1; | |
465 | ||
466 | #define MAKE_MACRO_TEST_EXPECTED(TYPE) \ | |
467 | globl(ftr_fixup_test_ ##TYPE##_macros_expected) \ | |
468 | or 1,1,1; \ | |
469 | /* Basic test, this section should all be nop'ed */ \ | |
470 | /* BEGIN_##TYPE##_SECTION */ \ | |
471 | nop; \ | |
472 | nop; \ | |
473 | nop; \ | |
474 | /* END_##TYPE##_SECTION(0, 1) */ \ | |
475 | or 1,1,1; \ | |
476 | or 1,1,1; \ | |
477 | /* Basic test, this section should NOT be nop'ed */ \ | |
478 | /* BEGIN_##TYPE##_SECTION */ \ | |
479 | or 2,2,2; \ | |
480 | or 2,2,2; \ | |
481 | or 2,2,2; \ | |
482 | /* END_##TYPE##_SECTION(0, 0) */ \ | |
483 | or 1,1,1; \ | |
484 | or 1,1,1; \ | |
485 | /* Nesting test, inner section should be nop'ed */ \ | |
486 | /* BEGIN_##TYPE##_SECTION */ \ | |
487 | or 2,2,2; \ | |
488 | or 2,2,2; \ | |
489 | /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
490 | nop; \ | |
491 | nop; \ | |
492 | /* END_##TYPE##_SECTION_NESTED(0, 1, 80) */ \ | |
493 | or 2,2,2; \ | |
494 | or 2,2,2; \ | |
495 | /* END_##TYPE##_SECTION(0, 0) */ \ | |
496 | or 1,1,1; \ | |
497 | or 1,1,1; \ | |
498 | /* Nesting test, whole section should be nop'ed */ \ | |
499 | /* NB. inner section is not nop'ed, but then entire outer is */ \ | |
500 | /* BEGIN_##TYPE##_SECTION */ \ | |
501 | nop; \ | |
502 | nop; \ | |
503 | /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
504 | nop; \ | |
505 | nop; \ | |
506 | /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \ | |
507 | nop; \ | |
508 | nop; \ | |
509 | /* END_##TYPE##_SECTION(0, 1) */ \ | |
510 | or 1,1,1; \ | |
511 | or 1,1,1; \ | |
512 | /* Nesting test, none should be nop'ed */ \ | |
513 | /* BEGIN_##TYPE##_SECTION */ \ | |
514 | or 2,2,2; \ | |
515 | or 2,2,2; \ | |
516 | /* BEGIN_##TYPE##_SECTION_NESTED(80) */ \ | |
517 | or 3,3,3; \ | |
518 | or 3,3,3; \ | |
519 | /* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \ | |
520 | or 2,2,2; \ | |
521 | or 2,2,2; \ | |
522 | /* END_##TYPE##_SECTION(0, 0) */ \ | |
523 | or 1,1,1; \ | |
524 | or 1,1,1; \ | |
525 | /* Basic alt section test, default case should be taken */ \ | |
526 | /* BEGIN_##TYPE##_SECTION */ \ | |
527 | or 3,3,3; \ | |
528 | or 3,3,3; \ | |
529 | or 3,3,3; \ | |
530 | /* ##TYPE##_SECTION_ELSE */ \ | |
531 | /* or 5,5,5; */ \ | |
532 | /* or 5,5,5; */ \ | |
533 | /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
534 | or 1,1,1; \ | |
535 | or 1,1,1; \ | |
536 | /* Basic alt section test, else case should be taken */ \ | |
537 | /* BEGIN_##TYPE##_SECTION */ \ | |
538 | /* or 3,3,3; */ \ | |
539 | /* or 3,3,3; */ \ | |
540 | /* or 3,3,3; */ \ | |
541 | /* ##TYPE##_SECTION_ELSE */ \ | |
542 | or 31,31,31; \ | |
543 | or 31,31,31; \ | |
544 | or 31,31,31; \ | |
545 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
546 | or 1,1,1; \ | |
547 | or 1,1,1; \ | |
548 | /* Alt with smaller else case, should be padded with nops */ \ | |
549 | /* BEGIN_##TYPE##_SECTION */ \ | |
550 | /* or 3,3,3; */ \ | |
551 | /* or 3,3,3; */ \ | |
552 | /* or 3,3,3; */ \ | |
553 | /* ##TYPE##_SECTION_ELSE */ \ | |
554 | or 31,31,31; \ | |
555 | nop; \ | |
556 | nop; \ | |
557 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
558 | or 1,1,1; \ | |
559 | or 1,1,1; \ | |
560 | /* Alt section with nested section in default case */ \ | |
561 | /* Default case should be taken, with nop'ed inner section */ \ | |
562 | /* BEGIN_##TYPE##_SECTION */ \ | |
563 | or 3,3,3; \ | |
564 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
565 | nop; \ | |
566 | nop; \ | |
567 | /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
568 | or 3,3,3; \ | |
569 | /* ##TYPE##_SECTION_ELSE */ \ | |
570 | /* or 2,2,2; */ \ | |
571 | /* or 2,2,2; */ \ | |
572 | /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
573 | or 1,1,1; \ | |
574 | or 1,1,1; \ | |
575 | /* Alt section with nested section in else, default taken */ \ | |
576 | /* BEGIN_##TYPE##_SECTION */ \ | |
577 | or 3,3,3; \ | |
578 | or 3,3,3; \ | |
579 | or 3,3,3; \ | |
580 | /* ##TYPE##_SECTION_ELSE */ \ | |
581 | /* or 5,5,5; */ \ | |
582 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
583 | /* or 3,3,3; */ \ | |
584 | /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
585 | /* or 5,5,5; */ \ | |
586 | /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
587 | or 1,1,1; \ | |
588 | or 1,1,1; \ | |
589 | /* Alt section with nested section in else, else taken & nop */ \ | |
590 | /* BEGIN_##TYPE##_SECTION */ \ | |
591 | /* or 3,3,3; */ \ | |
592 | /* or 3,3,3; */ \ | |
593 | /* or 3,3,3; */ \ | |
594 | /* ##TYPE##_SECTION_ELSE */ \ | |
595 | or 5,5,5; \ | |
596 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
597 | nop; \ | |
598 | /* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \ | |
599 | or 5,5,5; \ | |
600 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
601 | or 1,1,1; \ | |
602 | or 1,1,1; \ | |
603 | /* Feature section with nested alt section, default taken */ \ | |
604 | /* BEGIN_##TYPE##_SECTION */ \ | |
605 | or 2,2,2; \ | |
606 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
607 | or 1,1,1; \ | |
608 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
609 | /* or 5,5,5; */ \ | |
610 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
611 | or 2,2,2; \ | |
612 | /* END_##TYPE##_SECTION(0, 0) */ \ | |
613 | or 1,1,1; \ | |
614 | or 1,1,1; \ | |
615 | /* Feature section with nested alt section, else taken */ \ | |
616 | /* BEGIN_##TYPE##_SECTION */ \ | |
617 | or 2,2,2; \ | |
618 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
619 | /* or 1,1,1; */ \ | |
620 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
621 | or 5,5,5; \ | |
622 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
623 | or 2,2,2; \ | |
624 | /* END_##TYPE##_SECTION(0, 0) */ \ | |
625 | or 1,1,1; \ | |
626 | or 1,1,1; \ | |
627 | /* Feature section with nested alt section, all nop'ed */ \ | |
628 | /* BEGIN_##TYPE##_SECTION */ \ | |
629 | nop; \ | |
630 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
631 | nop; \ | |
632 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
633 | /* or 5,5,5; */ \ | |
634 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
635 | nop; \ | |
636 | /* END_##TYPE##_SECTION(0, 1) */ \ | |
637 | or 1,1,1; \ | |
638 | or 1,1,1; \ | |
639 | /* Nested alt sections, default with inner default taken */ \ | |
640 | /* BEGIN_##TYPE##_SECTION */ \ | |
641 | or 2,2,2; \ | |
642 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
643 | or 1,1,1; \ | |
644 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
645 | /* or 5,5,5; */ \ | |
646 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \ | |
647 | or 2,2,2; \ | |
648 | /* ##TYPE##_SECTION_ELSE */ \ | |
649 | /* or 31,31,31; */ \ | |
650 | /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
651 | /* or 5,5,5; */ \ | |
652 | /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
653 | /* or 1,1,1; */ \ | |
654 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
655 | /* or 31,31,31; */ \ | |
656 | /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
657 | or 1,1,1; \ | |
658 | or 1,1,1; \ | |
659 | /* Nested alt sections, default with inner else taken */ \ | |
660 | /* BEGIN_##TYPE##_SECTION */ \ | |
661 | or 2,2,2; \ | |
662 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
663 | /* or 1,1,1; */ \ | |
664 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
665 | or 5,5,5; \ | |
666 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
667 | or 2,2,2; \ | |
668 | /* ##TYPE##_SECTION_ELSE */ \ | |
669 | /* or 31,31,31; */ \ | |
670 | /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
671 | /* or 5,5,5; */ \ | |
672 | /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
673 | /* or 1,1,1; */ \ | |
674 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
675 | /* or 31,31,31; */ \ | |
676 | /* ALT_##TYPE##_SECTION_END(0, 0) */ \ | |
677 | or 1,1,1; \ | |
678 | or 1,1,1; \ | |
679 | /* Nested alt sections, else with inner default taken */ \ | |
680 | /* BEGIN_##TYPE##_SECTION */ \ | |
681 | /* or 2,2,2; */ \ | |
682 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
683 | /* or 1,1,1; */ \ | |
684 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
685 | /* or 5,5,5; */ \ | |
686 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
687 | /* or 2,2,2; */ \ | |
688 | /* ##TYPE##_SECTION_ELSE */ \ | |
689 | or 31,31,31; \ | |
690 | /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
691 | or 5,5,5; \ | |
692 | /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
693 | /* or 1,1,1; */ \ | |
694 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \ | |
695 | or 31,31,31; \ | |
696 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
697 | or 1,1,1; \ | |
698 | or 1,1,1; \ | |
699 | /* Nested alt sections, else with inner else taken */ \ | |
700 | /* BEGIN_##TYPE##_SECTION */ \ | |
701 | /* or 2,2,2; */ \ | |
702 | /* BEGIN_##TYPE##_SECTION_NESTED(95) */ \ | |
703 | /* or 1,1,1; */ \ | |
704 | /* ##TYPE##_SECTION_ELSE_NESTED(95) */ \ | |
705 | /* or 5,5,5; */ \ | |
706 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \ | |
707 | /* or 2,2,2; */ \ | |
708 | /* ##TYPE##_SECTION_ELSE */ \ | |
709 | or 31,31,31; \ | |
710 | /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
711 | /* or 5,5,5; */ \ | |
712 | /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
713 | or 1,1,1; \ | |
714 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \ | |
715 | or 31,31,31; \ | |
716 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
717 | or 1,1,1; \ | |
718 | or 1,1,1; \ | |
719 | /* Nested alt sections, else can have large else case */ \ | |
720 | /* BEGIN_##TYPE##_SECTION */ \ | |
721 | /* or 2,2,2; */ \ | |
722 | /* or 2,2,2; */ \ | |
723 | /* or 2,2,2; */ \ | |
724 | /* or 2,2,2; */ \ | |
725 | /* ##TYPE##_SECTION_ELSE */ \ | |
726 | /* BEGIN_##TYPE##_SECTION_NESTED(94) */ \ | |
727 | /* or 5,5,5; */ \ | |
728 | /* or 5,5,5; */ \ | |
729 | /* or 5,5,5; */ \ | |
730 | /* or 5,5,5; */ \ | |
731 | /* ##TYPE##_SECTION_ELSE_NESTED(94) */ \ | |
732 | or 1,1,1; \ | |
733 | or 1,1,1; \ | |
734 | or 1,1,1; \ | |
735 | or 1,1,1; \ | |
736 | /* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \ | |
737 | /* ALT_##TYPE##_SECTION_END(0, 1) */ \ | |
738 | or 1,1,1; \ | |
739 | or 1,1,1; | |
740 | ||
741 | MAKE_MACRO_TEST(FTR); | |
742 | MAKE_MACRO_TEST_EXPECTED(FTR); | |
743 | ||
744 | #ifdef CONFIG_PPC64 | |
745 | MAKE_MACRO_TEST(FW_FTR); | |
746 | MAKE_MACRO_TEST_EXPECTED(FW_FTR); | |
747 | #endif | |
2d1b2027 KG |
748 | |
749 | globl(lwsync_fixup_test) | |
750 | 1: or 1,1,1 | |
751 | LWSYNC | |
752 | globl(end_lwsync_fixup_test) | |
753 | ||
754 | globl(lwsync_fixup_test_expected_LWSYNC) | |
755 | 1: or 1,1,1 | |
756 | lwsync | |
757 | ||
758 | globl(lwsync_fixup_test_expected_SYNC) | |
759 | 1: or 1,1,1 | |
760 | sync | |
761 |