(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
torture/
asm-inline.c
       1  /* { dg-do compile } */
       2  /* -O0 does no inlining, and -O3 does it too aggressively for this test:  */
       3  /* { dg-skip-if "" { *-*-* } { "-O0" "-O3" } { "" } }
       4  /* The normal asm is not inlined:  */
       5  /* { dg-final { scan-assembler-times "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w" 2 } } */
       6  /* But the asm inline is inlined:  */
       7  /* { dg-final { scan-assembler-times "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x" 8 } } */
       8  
       9  static void f(void)
      10  {
      11    asm ("w\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\n"
      12         "w\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw");
      13  }
      14  
      15  int f0(void) { f(); return 0; }
      16  int f1(void) { f(); return 1; }
      17  int f2(void) { f(); return 2; }
      18  int f3(void) { f(); return 3; }
      19  
      20  static void fg(void)
      21  {
      22    asm goto("w\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\n"
      23  	   "w\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw\nw" :::: q);
      24    q: ;
      25  }
      26  
      27  int fg0(void) { fg(); return 0; }
      28  int fg1(void) { fg(); return 1; }
      29  int fg2(void) { fg(); return 2; }
      30  int fg3(void) { fg(); return 3; }
      31  
      32  static void g(void)
      33  {
      34    asm inline("x\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\n"
      35  	     "x\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx");
      36  }
      37  
      38  int g0(void) { g(); return 0; }
      39  int g1(void) { g(); return 1; }
      40  int g2(void) { g(); return 2; }
      41  int g3(void) { g(); return 3; }
      42  
      43  static void gg(void)
      44  {
      45    asm inline goto("x\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\n"
      46  		  "x\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx\nx" :::: q);
      47    q: ;
      48  }
      49  
      50  int gg0(void) { gg(); return 0; }
      51  int gg1(void) { gg(); return 1; }
      52  int gg2(void) { gg(); return 2; }
      53  int gg3(void) { gg(); return 3; }