/* From gcc svn, /branches/gcc-5-branch/gcc/testsuite/gcc.target/i386/pr66838.c */
/* Copyrighted and distributed under the same terms as gcc */

void abort (void);

char global;

__attribute__((sysv_abi, noinline, noclone))
void sysv_abi_func(char const *desc, void *local)
{
  register int esi asm ("esi");
  register int edi asm ("edi");
  
  if (local != &global)
    abort ();

  /* Clobber some of the extra SYSV ABI registers.  */
  asm volatile ("movl\t%2, %0\n\tmovl\t%2, %1"
		: "=r" (esi), "=r" (edi)
		: "i" (0xdeadbeef));
}

__attribute__((ms_abi, noinline, noclone))
void ms_abi_func ()
{
  sysv_abi_func ("1st call", &global);
  sysv_abi_func ("2nd call", &global);
  sysv_abi_func ("3rd call", &global);
}

int
main(void)
{
  ms_abi_func();
  return 0;
}
