linux/arch/powerpc/lib/feature-fixups-test.S
<<
>>
Prefs
   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
  15        .text
  16
  17#define globl(x)                \
  18        .globl x;       \
  19x:
  20
  21globl(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
  26globl(end_ftr_fixup_test1)
  27
  28globl(ftr_fixup_test1_orig)
  29        or      1,1,1
  30        or      2,2,2
  31        or      3,3,3
  32
  33globl(ftr_fixup_test1_expected)
  34        or      1,1,1
  35        nop
  36        or      3,3,3
  37
  38globl(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
  43globl(end_ftr_fixup_test2)
  44
  45globl(ftr_fixup_test2_orig)
  46        or      1,1,1
  47        or      2,2,2
  48        or      3,3,3
  49
  50globl(ftr_fixup_test2_alt)
  51        or      31,31,31
  52
  53globl(ftr_fixup_test2_expected)
  54        or      1,1,1
  55        or      31,31,31
  56        or      3,3,3
  57
  58globl(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
  63globl(end_ftr_fixup_test3)
  64
  65globl(ftr_fixup_test3_orig)
  66        or      1,1,1
  67        or      2,2,2
  68        or      3,3,3
  69
  70globl(ftr_fixup_test3_alt)
  71        or      31,31,31
  72        or      31,31,31
  73
  74globl(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
  82globl(end_ftr_fixup_test4)
  83
  84globl(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
  92globl(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
 100globl(ftr_fixup_test4_alt)
 101        or      31,31,31
 102        or      31,31,31
 103
 104
 105globl(ftr_fixup_test5)
 106        or      1,1,1
 107BEGIN_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
 115FTR_SECTION_ELSE
 1162:      b       3f
 1173:      or      5,5,5
 118        beq     3b
 119        b       1f
 120        or      6,6,6
 121        b       2b
 1221:      bdnz    3b
 123ALT_FTR_SECTION_END(0, 1)
 124        or      1,1,1
 125
 126globl(end_ftr_fixup_test5)
 127
 128globl(ftr_fixup_test5_expected)
 129        or      1,1,1
 1302:      b       3f
 1313:      or      5,5,5
 132        beq     3b
 133        b       1f
 134        or      6,6,6
 135        b       2b
 1361:      bdnz    3b
 137        or      1,1,1
 138
 139globl(ftr_fixup_test6)
 1401:      or      1,1,1
 141BEGIN_FTR_SECTION
 142        or      5,5,5
 1432:      PPC_LCMPI       r3,0
 144        beq     4f
 145        blt     2b
 146        b       1b
 147        b       4f
 148FTR_SECTION_ELSE
 1492:      or      2,2,2
 150        PPC_LCMPI       r3,1
 151        beq     3f
 152        blt     2b
 153        b       3f
 154        b       1b
 155ALT_FTR_SECTION_END(0, 1)
 1563:      or      1,1,1
 157        or      2,2,2
 1584:      or      3,3,3
 159
 160globl(end_ftr_fixup_test6)
 161
 162globl(ftr_fixup_test6_expected)
 1631:      or      1,1,1
 1642:      or      2,2,2
 165        PPC_LCMPI       r3,1
 166        beq     3f
 167        blt     2b
 168        b       3f
 169        b       1b
 1702:      or      1,1,1
 171        or      2,2,2
 1723:      or      3,3,3
 173
 174
 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 */
 179ftr_fixup_test7:
 180        or      1,1,1
 181BEGIN_FTR_SECTION
 182        or      2,2,2
 183        or      2,2,2
 184        or      2,2,2
 185FTR_SECTION_ELSE
 186        or      3,3,3
 187        or      3,3,3
 188        or      3,3,3
 189        or      3,3,3
 190ALT_FTR_SECTION_END(0, 1)
 191        or      1,1,1
 192#endif
 193
 194#define MAKE_MACRO_TEST(TYPE)                                           \
 195globl(ftr_fixup_test_ ##TYPE##_macros)                                  \
 196        or      1,1,1;                                                  \
 197        /* Basic test, this section should all be nop'ed */             \
 198BEGIN_##TYPE##_SECTION                                                  \
 199        or      2,2,2;                                                  \
 200        or      2,2,2;                                                  \
 201        or      2,2,2;                                                  \
 202END_##TYPE##_SECTION(0, 1)                                              \
 203        or      1,1,1;                                                  \
 204        or      1,1,1;                                                  \
 205        /* Basic test, this section should NOT be nop'ed */             \
 206BEGIN_##TYPE##_SECTION                                                  \
 207        or      2,2,2;                                                  \
 208        or      2,2,2;                                                  \
 209        or      2,2,2;                                                  \
 210END_##TYPE##_SECTION(0, 0)                                              \
 211        or      1,1,1;                                                  \
 212        or      1,1,1;                                                  \
 213        /* Nesting test, inner section should be nop'ed */              \
 214BEGIN_##TYPE##_SECTION                                                  \
 215        or      2,2,2;                                                  \
 216        or      2,2,2;                                                  \
 217BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 218        or      3,3,3;                                                  \
 219        or      3,3,3;                                                  \
 220END_##TYPE##_SECTION_NESTED(0, 1, 80)                                   \
 221        or      2,2,2;                                                  \
 222        or      2,2,2;                                                  \
 223END_##TYPE##_SECTION(0, 0)                                              \
 224        or      1,1,1;                                                  \
 225        or      1,1,1;                                                  \
 226        /* Nesting test, whole section should be nop'ed */              \
 227BEGIN_##TYPE##_SECTION                                                  \
 228        or      2,2,2;                                                  \
 229        or      2,2,2;                                                  \
 230BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 231        or      3,3,3;                                                  \
 232        or      3,3,3;                                                  \
 233END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
 234        or      2,2,2;                                                  \
 235        or      2,2,2;                                                  \
 236END_##TYPE##_SECTION(0, 1)                                              \
 237        or      1,1,1;                                                  \
 238        or      1,1,1;                                                  \
 239        /* Nesting test, none should be nop'ed */                       \
 240BEGIN_##TYPE##_SECTION                                                  \
 241        or      2,2,2;                                                  \
 242        or      2,2,2;                                                  \
 243BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 244        or      3,3,3;                                                  \
 245        or      3,3,3;                                                  \
 246END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
 247        or      2,2,2;                                                  \
 248        or      2,2,2;                                                  \
 249END_##TYPE##_SECTION(0, 0)                                              \
 250        or      1,1,1;                                                  \
 251        or      1,1,1;                                                  \
 252        /* Basic alt section test, default case should be taken */      \
 253BEGIN_##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;                                                  \
 260ALT_##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 */         \
 264BEGIN_##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;                                               \
 272ALT_##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 */    \
 276BEGIN_##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;                                               \
 282ALT_##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 */   \
 287BEGIN_##TYPE##_SECTION                                                  \
 288        or      3,3,3;                                                  \
 289BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 290        or      3,3,3;                                                  \
 291        or      3,3,3;                                                  \
 292END_##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;                                                  \
 297ALT_##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 */    \
 301BEGIN_##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;                                                  \
 307BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 308        or      3,3,3;                                                  \
 309END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
 310        or      5,5,5;                                                  \
 311ALT_##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 */ \
 315BEGIN_##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;                                                  \
 321BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 322        or      3,3,3;                                                  \
 323END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
 324        or      5,5,5;                                                  \
 325ALT_##TYPE##_SECTION_END(0, 1)                                          \
 326        or      1,1,1;                                                  \
 327        or      1,1,1;                                                  \
 328        /* Feature section with nested alt section, default taken */    \
 329BEGIN_##TYPE##_SECTION                                                  \
 330        or      2,2,2;                                                  \
 331BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 332        or      1,1,1;                                                  \
 333##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 334        or      5,5,5;                                                  \
 335ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 336        or      2,2,2;                                                  \
 337END_##TYPE##_SECTION(0, 0)                                              \
 338        or      1,1,1;                                                  \
 339        or      1,1,1;                                                  \
 340        /* Feature section with nested alt section, else taken */       \
 341BEGIN_##TYPE##_SECTION                                                  \
 342        or      2,2,2;                                                  \
 343BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 344        or      1,1,1;                                                  \
 345##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 346        or      5,5,5;                                                  \
 347ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 348        or      2,2,2;                                                  \
 349END_##TYPE##_SECTION(0, 0)                                              \
 350        or      1,1,1;                                                  \
 351        or      1,1,1;                                                  \
 352        /* Feature section with nested alt section, all nop'ed */       \
 353BEGIN_##TYPE##_SECTION                                                  \
 354        or      2,2,2;                                                  \
 355BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 356        or      1,1,1;                                                  \
 357##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 358        or      5,5,5;                                                  \
 359ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 360        or      2,2,2;                                                  \
 361END_##TYPE##_SECTION(0, 1)                                              \
 362        or      1,1,1;                                                  \
 363        or      1,1,1;                                                  \
 364        /* Nested alt sections, default with inner default taken */     \
 365BEGIN_##TYPE##_SECTION                                                  \
 366        or      2,2,2;                                                  \
 367BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 368        or      1,1,1;                                                  \
 369##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 370        or      5,5,5;                                                  \
 371ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 372        or      2,2,2;                                                  \
 373##TYPE##_SECTION_ELSE                                                   \
 374        or      31,31,31;                                               \
 375BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 376        or      5,5,5;                                                  \
 377##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 378        or      1,1,1;                                                  \
 379ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 380        or      31,31,31;                                               \
 381ALT_##TYPE##_SECTION_END(0, 0)                                          \
 382        or      1,1,1;                                                  \
 383        or      1,1,1;                                                  \
 384        /* Nested alt sections, default with inner else taken */        \
 385BEGIN_##TYPE##_SECTION                                                  \
 386        or      2,2,2;                                                  \
 387BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 388        or      1,1,1;                                                  \
 389##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 390        or      5,5,5;                                                  \
 391ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 392        or      2,2,2;                                                  \
 393##TYPE##_SECTION_ELSE                                                   \
 394        or      31,31,31;                                               \
 395BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 396        or      5,5,5;                                                  \
 397##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 398        or      1,1,1;                                                  \
 399ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 400        or      31,31,31;                                               \
 401ALT_##TYPE##_SECTION_END(0, 0)                                          \
 402        or      1,1,1;                                                  \
 403        or      1,1,1;                                                  \
 404        /* Nested alt sections, else with inner default taken */        \
 405BEGIN_##TYPE##_SECTION                                                  \
 406        or      2,2,2;                                                  \
 407BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 408        or      1,1,1;                                                  \
 409##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 410        or      5,5,5;                                                  \
 411ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 412        or      2,2,2;                                                  \
 413##TYPE##_SECTION_ELSE                                                   \
 414        or      31,31,31;                                               \
 415BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 416        or      5,5,5;                                                  \
 417##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 418        or      1,1,1;                                                  \
 419ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 420        or      31,31,31;                                               \
 421ALT_##TYPE##_SECTION_END(0, 1)                                          \
 422        or      1,1,1;                                                  \
 423        or      1,1,1;                                                  \
 424        /* Nested alt sections, else with inner else taken */           \
 425BEGIN_##TYPE##_SECTION                                                  \
 426        or      2,2,2;                                                  \
 427BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 428        or      1,1,1;                                                  \
 429##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 430        or      5,5,5;                                                  \
 431ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 432        or      2,2,2;                                                  \
 433##TYPE##_SECTION_ELSE                                                   \
 434        or      31,31,31;                                               \
 435BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 436        or      5,5,5;                                                  \
 437##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 438        or      1,1,1;                                                  \
 439ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
 440        or      31,31,31;                                               \
 441ALT_##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 */        \
 445BEGIN_##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                                                   \
 451BEGIN_##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;                                                  \
 461ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
 462ALT_##TYPE##_SECTION_END(0, 1)                                          \
 463        or      1,1,1;                                                  \
 464        or      1,1,1;
 465
 466#define MAKE_MACRO_TEST_EXPECTED(TYPE)                                  \
 467globl(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
 741MAKE_MACRO_TEST(FTR);
 742MAKE_MACRO_TEST_EXPECTED(FTR);
 743
 744#ifdef CONFIG_PPC64
 745MAKE_MACRO_TEST(FW_FTR);
 746MAKE_MACRO_TEST_EXPECTED(FW_FTR);
 747#endif
 748
 749globl(lwsync_fixup_test)
 7501:      or      1,1,1
 751        LWSYNC
 752globl(end_lwsync_fixup_test)
 753
 754globl(lwsync_fixup_test_expected_LWSYNC)
 7551:      or      1,1,1
 756        lwsync
 757
 758globl(lwsync_fixup_test_expected_SYNC)
 7591:      or      1,1,1
 760        sync
 761
 762