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#define MAKE_MACRO_TEST(TYPE)                                           \
 176globl(ftr_fixup_test_ ##TYPE##_macros)                                  \
 177        or      1,1,1;                                                  \
 178        /* Basic test, this section should all be nop'ed */             \
 179BEGIN_##TYPE##_SECTION                                                  \
 180        or      2,2,2;                                                  \
 181        or      2,2,2;                                                  \
 182        or      2,2,2;                                                  \
 183END_##TYPE##_SECTION(0, 1)                                              \
 184        or      1,1,1;                                                  \
 185        or      1,1,1;                                                  \
 186        /* Basic test, this section should NOT be nop'ed */             \
 187BEGIN_##TYPE##_SECTION                                                  \
 188        or      2,2,2;                                                  \
 189        or      2,2,2;                                                  \
 190        or      2,2,2;                                                  \
 191END_##TYPE##_SECTION(0, 0)                                              \
 192        or      1,1,1;                                                  \
 193        or      1,1,1;                                                  \
 194        /* Nesting test, inner section should be nop'ed */              \
 195BEGIN_##TYPE##_SECTION                                                  \
 196        or      2,2,2;                                                  \
 197        or      2,2,2;                                                  \
 198BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 199        or      3,3,3;                                                  \
 200        or      3,3,3;                                                  \
 201END_##TYPE##_SECTION_NESTED(0, 1, 80)                                   \
 202        or      2,2,2;                                                  \
 203        or      2,2,2;                                                  \
 204END_##TYPE##_SECTION(0, 0)                                              \
 205        or      1,1,1;                                                  \
 206        or      1,1,1;                                                  \
 207        /* Nesting test, whole section should be nop'ed */              \
 208BEGIN_##TYPE##_SECTION                                                  \
 209        or      2,2,2;                                                  \
 210        or      2,2,2;                                                  \
 211BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 212        or      3,3,3;                                                  \
 213        or      3,3,3;                                                  \
 214END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
 215        or      2,2,2;                                                  \
 216        or      2,2,2;                                                  \
 217END_##TYPE##_SECTION(0, 1)                                              \
 218        or      1,1,1;                                                  \
 219        or      1,1,1;                                                  \
 220        /* Nesting test, none should be nop'ed */                       \
 221BEGIN_##TYPE##_SECTION                                                  \
 222        or      2,2,2;                                                  \
 223        or      2,2,2;                                                  \
 224BEGIN_##TYPE##_SECTION_NESTED(80)                                       \
 225        or      3,3,3;                                                  \
 226        or      3,3,3;                                                  \
 227END_##TYPE##_SECTION_NESTED(0, 0, 80)                                   \
 228        or      2,2,2;                                                  \
 229        or      2,2,2;                                                  \
 230END_##TYPE##_SECTION(0, 0)                                              \
 231        or      1,1,1;                                                  \
 232        or      1,1,1;                                                  \
 233        /* Basic alt section test, default case should be taken */      \
 234BEGIN_##TYPE##_SECTION                                                  \
 235        or      3,3,3;                                                  \
 236        or      3,3,3;                                                  \
 237        or      3,3,3;                                                  \
 238##TYPE##_SECTION_ELSE                                                   \
 239        or      5,5,5;                                                  \
 240        or      5,5,5;                                                  \
 241ALT_##TYPE##_SECTION_END(0, 0)                                          \
 242        or      1,1,1;                                                  \
 243        or      1,1,1;                                                  \
 244        /* Basic alt section test, else case should be taken */         \
 245BEGIN_##TYPE##_SECTION                                                  \
 246        or      3,3,3;                                                  \
 247        or      3,3,3;                                                  \
 248        or      3,3,3;                                                  \
 249##TYPE##_SECTION_ELSE                                                   \
 250        or      31,31,31;                                               \
 251        or      31,31,31;                                               \
 252        or      31,31,31;                                               \
 253ALT_##TYPE##_SECTION_END(0, 1)                                          \
 254        or      1,1,1;                                                  \
 255        or      1,1,1;                                                  \
 256        /* Alt with smaller else case, should be padded with nops */    \
 257BEGIN_##TYPE##_SECTION                                                  \
 258        or      3,3,3;                                                  \
 259        or      3,3,3;                                                  \
 260        or      3,3,3;                                                  \
 261##TYPE##_SECTION_ELSE                                                   \
 262        or      31,31,31;                                               \
 263ALT_##TYPE##_SECTION_END(0, 1)                                          \
 264        or      1,1,1;                                                  \
 265        or      1,1,1;                                                  \
 266        /* Alt section with nested section in default case */           \
 267        /* Default case should be taken, with nop'ed inner section */   \
 268BEGIN_##TYPE##_SECTION                                                  \
 269        or      3,3,3;                                                  \
 270BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 271        or      3,3,3;                                                  \
 272        or      3,3,3;                                                  \
 273END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
 274        or      3,3,3;                                                  \
 275##TYPE##_SECTION_ELSE                                                   \
 276        or      2,2,2;                                                  \
 277        or      2,2,2;                                                  \
 278ALT_##TYPE##_SECTION_END(0, 0)                                          \
 279        or      1,1,1;                                                  \
 280        or      1,1,1;                                                  \
 281        /* Alt section with nested section in else, default taken */    \
 282BEGIN_##TYPE##_SECTION                                                  \
 283        or      3,3,3;                                                  \
 284        or      3,3,3;                                                  \
 285        or      3,3,3;                                                  \
 286##TYPE##_SECTION_ELSE                                                   \
 287        or      5,5,5;                                                  \
 288BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 289        or      3,3,3;                                                  \
 290END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
 291        or      5,5,5;                                                  \
 292ALT_##TYPE##_SECTION_END(0, 0)                                          \
 293        or      1,1,1;                                                  \
 294        or      1,1,1;                                                  \
 295        /* Alt section with nested section in else, else taken & nop */ \
 296BEGIN_##TYPE##_SECTION                                                  \
 297        or      3,3,3;                                                  \
 298        or      3,3,3;                                                  \
 299        or      3,3,3;                                                  \
 300##TYPE##_SECTION_ELSE                                                   \
 301        or      5,5,5;                                                  \
 302BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 303        or      3,3,3;                                                  \
 304END_##TYPE##_SECTION_NESTED(0, 1, 95)                                   \
 305        or      5,5,5;                                                  \
 306ALT_##TYPE##_SECTION_END(0, 1)                                          \
 307        or      1,1,1;                                                  \
 308        or      1,1,1;                                                  \
 309        /* Feature section with nested alt section, default taken */    \
 310BEGIN_##TYPE##_SECTION                                                  \
 311        or      2,2,2;                                                  \
 312BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 313        or      1,1,1;                                                  \
 314##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 315        or      5,5,5;                                                  \
 316ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 317        or      2,2,2;                                                  \
 318END_##TYPE##_SECTION(0, 0)                                              \
 319        or      1,1,1;                                                  \
 320        or      1,1,1;                                                  \
 321        /* Feature section with nested alt section, else taken */       \
 322BEGIN_##TYPE##_SECTION                                                  \
 323        or      2,2,2;                                                  \
 324BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 325        or      1,1,1;                                                  \
 326##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 327        or      5,5,5;                                                  \
 328ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 329        or      2,2,2;                                                  \
 330END_##TYPE##_SECTION(0, 0)                                              \
 331        or      1,1,1;                                                  \
 332        or      1,1,1;                                                  \
 333        /* Feature section with nested alt section, all nop'ed */       \
 334BEGIN_##TYPE##_SECTION                                                  \
 335        or      2,2,2;                                                  \
 336BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 337        or      1,1,1;                                                  \
 338##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 339        or      5,5,5;                                                  \
 340ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 341        or      2,2,2;                                                  \
 342END_##TYPE##_SECTION(0, 1)                                              \
 343        or      1,1,1;                                                  \
 344        or      1,1,1;                                                  \
 345        /* Nested alt sections, default with inner default taken */     \
 346BEGIN_##TYPE##_SECTION                                                  \
 347        or      2,2,2;                                                  \
 348BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 349        or      1,1,1;                                                  \
 350##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 351        or      5,5,5;                                                  \
 352ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95)                               \
 353        or      2,2,2;                                                  \
 354##TYPE##_SECTION_ELSE                                                   \
 355        or      31,31,31;                                               \
 356BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 357        or      5,5,5;                                                  \
 358##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 359        or      1,1,1;                                                  \
 360ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 361        or      31,31,31;                                               \
 362ALT_##TYPE##_SECTION_END(0, 0)                                          \
 363        or      1,1,1;                                                  \
 364        or      1,1,1;                                                  \
 365        /* Nested alt sections, default with inner else 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, 1, 95)                               \
 373        or      2,2,2;                                                  \
 374##TYPE##_SECTION_ELSE                                                   \
 375        or      31,31,31;                                               \
 376BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 377        or      5,5,5;                                                  \
 378##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 379        or      1,1,1;                                                  \
 380ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 381        or      31,31,31;                                               \
 382ALT_##TYPE##_SECTION_END(0, 0)                                          \
 383        or      1,1,1;                                                  \
 384        or      1,1,1;                                                  \
 385        /* Nested alt sections, else with inner default taken */        \
 386BEGIN_##TYPE##_SECTION                                                  \
 387        or      2,2,2;                                                  \
 388BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 389        or      1,1,1;                                                  \
 390##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 391        or      5,5,5;                                                  \
 392ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 393        or      2,2,2;                                                  \
 394##TYPE##_SECTION_ELSE                                                   \
 395        or      31,31,31;                                               \
 396BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 397        or      5,5,5;                                                  \
 398##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 399        or      1,1,1;                                                  \
 400ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94)                               \
 401        or      31,31,31;                                               \
 402ALT_##TYPE##_SECTION_END(0, 1)                                          \
 403        or      1,1,1;                                                  \
 404        or      1,1,1;                                                  \
 405        /* Nested alt sections, else with inner else taken */           \
 406BEGIN_##TYPE##_SECTION                                                  \
 407        or      2,2,2;                                                  \
 408BEGIN_##TYPE##_SECTION_NESTED(95)                                       \
 409        or      1,1,1;                                                  \
 410##TYPE##_SECTION_ELSE_NESTED(95)                                        \
 411        or      5,5,5;                                                  \
 412ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95)                               \
 413        or      2,2,2;                                                  \
 414##TYPE##_SECTION_ELSE                                                   \
 415        or      31,31,31;                                               \
 416BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 417        or      5,5,5;                                                  \
 418##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 419        or      1,1,1;                                                  \
 420ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
 421        or      31,31,31;                                               \
 422ALT_##TYPE##_SECTION_END(0, 1)                                          \
 423        or      1,1,1;                                                  \
 424        or      1,1,1;                                                  \
 425        /* Nested alt sections, else can have large else case */        \
 426BEGIN_##TYPE##_SECTION                                                  \
 427        or      2,2,2;                                                  \
 428        or      2,2,2;                                                  \
 429        or      2,2,2;                                                  \
 430        or      2,2,2;                                                  \
 431##TYPE##_SECTION_ELSE                                                   \
 432BEGIN_##TYPE##_SECTION_NESTED(94)                                       \
 433        or      5,5,5;                                                  \
 434        or      5,5,5;                                                  \
 435        or      5,5,5;                                                  \
 436        or      5,5,5;                                                  \
 437##TYPE##_SECTION_ELSE_NESTED(94)                                        \
 438        or      1,1,1;                                                  \
 439        or      1,1,1;                                                  \
 440        or      1,1,1;                                                  \
 441        or      1,1,1;                                                  \
 442ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94)                               \
 443ALT_##TYPE##_SECTION_END(0, 1)                                          \
 444        or      1,1,1;                                                  \
 445        or      1,1,1;
 446
 447#define MAKE_MACRO_TEST_EXPECTED(TYPE)                                  \
 448globl(ftr_fixup_test_ ##TYPE##_macros_expected)                         \
 449        or      1,1,1;                                                  \
 450        /* Basic test, this section should all be nop'ed */             \
 451/* BEGIN_##TYPE##_SECTION */                                            \
 452        nop;                                                            \
 453        nop;                                                            \
 454        nop;                                                            \
 455/* END_##TYPE##_SECTION(0, 1) */                                        \
 456        or      1,1,1;                                                  \
 457        or      1,1,1;                                                  \
 458        /* Basic test, this section should NOT be nop'ed */             \
 459/* BEGIN_##TYPE##_SECTION */                                            \
 460        or      2,2,2;                                                  \
 461        or      2,2,2;                                                  \
 462        or      2,2,2;                                                  \
 463/* END_##TYPE##_SECTION(0, 0) */                                        \
 464        or      1,1,1;                                                  \
 465        or      1,1,1;                                                  \
 466        /* Nesting test, inner section should be nop'ed */              \
 467/* BEGIN_##TYPE##_SECTION */                                            \
 468        or      2,2,2;                                                  \
 469        or      2,2,2;                                                  \
 470/* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
 471        nop;                                                            \
 472        nop;                                                            \
 473/* END_##TYPE##_SECTION_NESTED(0, 1, 80) */                             \
 474        or      2,2,2;                                                  \
 475        or      2,2,2;                                                  \
 476/* END_##TYPE##_SECTION(0, 0) */                                        \
 477        or      1,1,1;                                                  \
 478        or      1,1,1;                                                  \
 479        /* Nesting test, whole section should be nop'ed */              \
 480        /* NB. inner section is not nop'ed, but then entire outer is */ \
 481/* BEGIN_##TYPE##_SECTION */                                            \
 482        nop;                                                            \
 483        nop;                                                            \
 484/* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
 485        nop;                                                            \
 486        nop;                                                            \
 487/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */                             \
 488        nop;                                                            \
 489        nop;                                                            \
 490/* END_##TYPE##_SECTION(0, 1) */                                        \
 491        or      1,1,1;                                                  \
 492        or      1,1,1;                                                  \
 493        /* Nesting test, none should be nop'ed */                       \
 494/* BEGIN_##TYPE##_SECTION */                                            \
 495        or      2,2,2;                                                  \
 496        or      2,2,2;                                                  \
 497/* BEGIN_##TYPE##_SECTION_NESTED(80) */                                 \
 498        or      3,3,3;                                                  \
 499        or      3,3,3;                                                  \
 500/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */                             \
 501        or      2,2,2;                                                  \
 502        or      2,2,2;                                                  \
 503/* END_##TYPE##_SECTION(0, 0) */                                        \
 504        or      1,1,1;                                                  \
 505        or      1,1,1;                                                  \
 506        /* Basic alt section test, default case should be taken */      \
 507/* BEGIN_##TYPE##_SECTION */                                            \
 508        or      3,3,3;                                                  \
 509        or      3,3,3;                                                  \
 510        or      3,3,3;                                                  \
 511/* ##TYPE##_SECTION_ELSE */                                             \
 512        /* or   5,5,5; */                                               \
 513        /* or   5,5,5; */                                               \
 514/* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
 515        or      1,1,1;                                                  \
 516        or      1,1,1;                                                  \
 517        /* Basic alt section test, else case should be taken */         \
 518/* BEGIN_##TYPE##_SECTION */                                            \
 519        /* or   3,3,3; */                                               \
 520        /* or   3,3,3; */                                               \
 521        /* or   3,3,3; */                                               \
 522/* ##TYPE##_SECTION_ELSE */                                             \
 523        or      31,31,31;                                               \
 524        or      31,31,31;                                               \
 525        or      31,31,31;                                               \
 526/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 527        or      1,1,1;                                                  \
 528        or      1,1,1;                                                  \
 529        /* Alt with smaller else case, should be padded with nops */    \
 530/* BEGIN_##TYPE##_SECTION */                                            \
 531        /* or   3,3,3; */                                               \
 532        /* or   3,3,3; */                                               \
 533        /* or   3,3,3; */                                               \
 534/* ##TYPE##_SECTION_ELSE */                                             \
 535        or      31,31,31;                                               \
 536        nop;                                                            \
 537        nop;                                                            \
 538/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 539        or      1,1,1;                                                  \
 540        or      1,1,1;                                                  \
 541        /* Alt section with nested section in default case */           \
 542        /* Default case should be taken, with nop'ed inner section */   \
 543/* BEGIN_##TYPE##_SECTION */                                            \
 544        or      3,3,3;                                                  \
 545/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 546        nop;                                                            \
 547        nop;                                                            \
 548/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
 549        or      3,3,3;                                                  \
 550/* ##TYPE##_SECTION_ELSE */                                             \
 551        /* or   2,2,2; */                                               \
 552        /* or   2,2,2; */                                               \
 553/* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
 554        or      1,1,1;                                                  \
 555        or      1,1,1;                                                  \
 556        /* Alt section with nested section in else, default taken */    \
 557/* BEGIN_##TYPE##_SECTION */                                            \
 558        or      3,3,3;                                                  \
 559        or      3,3,3;                                                  \
 560        or      3,3,3;                                                  \
 561/* ##TYPE##_SECTION_ELSE */                                             \
 562        /* or   5,5,5; */                                               \
 563/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 564        /* or   3,3,3; */                                               \
 565/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
 566        /* or   5,5,5; */                                               \
 567/* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
 568        or      1,1,1;                                                  \
 569        or      1,1,1;                                                  \
 570        /* Alt section with nested section in else, else taken & nop */ \
 571/* BEGIN_##TYPE##_SECTION */                                            \
 572        /* or   3,3,3; */                                               \
 573        /* or   3,3,3; */                                               \
 574        /* or   3,3,3; */                                               \
 575/* ##TYPE##_SECTION_ELSE */                                             \
 576        or      5,5,5;                                                  \
 577/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 578        nop;                                                            \
 579/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */                             \
 580        or      5,5,5;                                                  \
 581/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 582        or      1,1,1;                                                  \
 583        or      1,1,1;                                                  \
 584        /* Feature section with nested alt section, default taken */    \
 585/* BEGIN_##TYPE##_SECTION */                                            \
 586        or      2,2,2;                                                  \
 587/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 588        or      1,1,1;                                                  \
 589/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 590        /* or   5,5,5; */                                               \
 591/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
 592        or      2,2,2;                                                  \
 593/* END_##TYPE##_SECTION(0, 0) */                                        \
 594        or      1,1,1;                                                  \
 595        or      1,1,1;                                                  \
 596        /* Feature section with nested alt section, else taken */       \
 597/* BEGIN_##TYPE##_SECTION */                                            \
 598        or      2,2,2;                                                  \
 599/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 600        /* or   1,1,1; */                                               \
 601/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 602        or      5,5,5;                                                  \
 603/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
 604        or      2,2,2;                                                  \
 605/* END_##TYPE##_SECTION(0, 0) */                                        \
 606        or      1,1,1;                                                  \
 607        or      1,1,1;                                                  \
 608        /* Feature section with nested alt section, all nop'ed */       \
 609/* BEGIN_##TYPE##_SECTION */                                            \
 610        nop;                                                            \
 611/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 612        nop;                                                            \
 613/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 614        /* or   5,5,5; */                                               \
 615/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
 616        nop;                                                            \
 617/* END_##TYPE##_SECTION(0, 1) */                                        \
 618        or      1,1,1;                                                  \
 619        or      1,1,1;                                                  \
 620        /* Nested alt sections, default with inner default taken */     \
 621/* BEGIN_##TYPE##_SECTION */                                            \
 622        or      2,2,2;                                                  \
 623/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 624        or      1,1,1;                                                  \
 625/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 626        /* or   5,5,5; */                                               \
 627/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */                         \
 628        or      2,2,2;                                                  \
 629/* ##TYPE##_SECTION_ELSE */                                             \
 630        /* or   31,31,31; */                                            \
 631/* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
 632        /* or   5,5,5; */                                               \
 633/* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
 634        /* or   1,1,1; */                                               \
 635/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
 636        /* or   31,31,31; */                                            \
 637/* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
 638        or      1,1,1;                                                  \
 639        or      1,1,1;                                                  \
 640        /* Nested alt sections, default with inner else 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, 1, 95) */                         \
 648        or      2,2,2;                                                  \
 649/* ##TYPE##_SECTION_ELSE */                                             \
 650        /* or   31,31,31; */                                            \
 651/* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
 652        /* or   5,5,5; */                                               \
 653/* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
 654        /* or   1,1,1; */                                               \
 655/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
 656        /* or   31,31,31; */                                            \
 657/* ALT_##TYPE##_SECTION_END(0, 0) */                                    \
 658        or      1,1,1;                                                  \
 659        or      1,1,1;                                                  \
 660        /* Nested alt sections, else with inner default taken */        \
 661/* BEGIN_##TYPE##_SECTION */                                            \
 662        /* or   2,2,2; */                                               \
 663/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 664        /* or   1,1,1; */                                               \
 665/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 666        /* or   5,5,5; */                                               \
 667/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
 668        /* or   2,2,2; */                                               \
 669/* ##TYPE##_SECTION_ELSE */                                             \
 670        or      31,31,31;                                               \
 671/* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
 672        or      5,5,5;                                                  \
 673/* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
 674        /* or   1,1,1; */                                               \
 675/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */                         \
 676        or      31,31,31;                                               \
 677/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 678        or      1,1,1;                                                  \
 679        or      1,1,1;                                                  \
 680        /* Nested alt sections, else with inner else taken */           \
 681/* BEGIN_##TYPE##_SECTION */                                            \
 682        /* or   2,2,2; */                                               \
 683/* BEGIN_##TYPE##_SECTION_NESTED(95) */                                 \
 684        /* or   1,1,1; */                                               \
 685/* ##TYPE##_SECTION_ELSE_NESTED(95) */                                  \
 686        /* or   5,5,5; */                                               \
 687/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */                         \
 688        /* or   2,2,2; */                                               \
 689/* ##TYPE##_SECTION_ELSE */                                             \
 690        or      31,31,31;                                               \
 691/* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
 692        /* or   5,5,5; */                                               \
 693/* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
 694        or      1,1,1;                                                  \
 695/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */                         \
 696        or      31,31,31;                                               \
 697/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 698        or      1,1,1;                                                  \
 699        or      1,1,1;                                                  \
 700        /* Nested alt sections, else can have large else case */        \
 701/* BEGIN_##TYPE##_SECTION */                                            \
 702        /* or   2,2,2; */                                               \
 703        /* or   2,2,2; */                                               \
 704        /* or   2,2,2; */                                               \
 705        /* or   2,2,2; */                                               \
 706/* ##TYPE##_SECTION_ELSE */                                             \
 707/* BEGIN_##TYPE##_SECTION_NESTED(94) */                                 \
 708        /* or   5,5,5; */                                               \
 709        /* or   5,5,5; */                                               \
 710        /* or   5,5,5; */                                               \
 711        /* or   5,5,5; */                                               \
 712/* ##TYPE##_SECTION_ELSE_NESTED(94) */                                  \
 713        or      1,1,1;                                                  \
 714        or      1,1,1;                                                  \
 715        or      1,1,1;                                                  \
 716        or      1,1,1;                                                  \
 717/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */                         \
 718/* ALT_##TYPE##_SECTION_END(0, 1) */                                    \
 719        or      1,1,1;                                                  \
 720        or      1,1,1;
 721
 722MAKE_MACRO_TEST(FTR);
 723MAKE_MACRO_TEST_EXPECTED(FTR);
 724
 725#ifdef CONFIG_PPC64
 726MAKE_MACRO_TEST(FW_FTR);
 727MAKE_MACRO_TEST_EXPECTED(FW_FTR);
 728#endif
 729
 730globl(lwsync_fixup_test)
 7311:      or      1,1,1
 732        LWSYNC
 733globl(end_lwsync_fixup_test)
 734
 735globl(lwsync_fixup_test_expected_LWSYNC)
 7361:      or      1,1,1
 737        lwsync
 738
 739globl(lwsync_fixup_test_expected_SYNC)
 7401:      or      1,1,1
 741        sync
 742
 743