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