1  /* { dg-do compile { target *-*-linux* } } */
       2  /* { dg-options "-O2 -mgeneral-regs-only -mno-cld -mno-iamcu -mpush-args -mno-accumulate-outgoing-args" } */
       3  
       4  extern void bar (int) __attribute__ ((no_caller_saved_registers));
       5  
       6  void
       7   __attribute__ ((interrupt))
       8  fn1 (void *frame)
       9  {
      10    bar (3);
      11  }
      12  
      13  void
      14   __attribute__ ((interrupt))
      15  fn2 (void *frame)
      16  {
      17    bar (3);
      18  }
      19  
      20  /* { dg-final { scan-assembler-not "movups\[\\t .\]*%(x|y|z)mm\[0-9\]+" } } */
      21  /* { dg-final { scan-assembler-not "(push|pop)(l|q)\[\\t \]*%(r|e)(a|b|c|d)x" { target nonpic } } } */
      22  /* { dg-final { scan-assembler-not "(push|pop)l\[\\t \]*%edi" { target ia32 } } } */
      23  /* { dg-final { scan-assembler-not "(push|pop)(l|q)\[\\t \]*%(r|e)si" } } */
      24  /* { dg-final { scan-assembler-not "(push|pop)q\[\\t \]*%r\[8-9\]+" { target { ! ia32 } } } } */
      25  /* { dg-final { scan-assembler-not "(push|pop)q\[\\t \]*%r1\[0-5\]+" { target { ! ia32 } } } } */
      26  /* { dg-final { scan-assembler-times "pushl\[\\t \]*%ebp" 2 { target ia32 } } } */
      27  /* { dg-final { scan-assembler-times "leave" 2 { target ia32 } } } */
      28  /* { dg-final { scan-assembler-times "pushq\[\\t \]*%rdi" 2 { target { ! ia32 } } } } */
      29  /* { dg-final { scan-assembler-times "popq\[\\t \]*%rdi" 2 { target { ! ia32 } } } } */
      30  /* { dg-final { scan-assembler-times "iret" 2 { target ia32 } } } */
      31  /* { dg-final { scan-assembler-times "iretq" 2 { target { ! ia32 } } } } */
      32  /* { dg-final { scan-assembler-times "\tcld" 2 } } */