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