| /* 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; |
| } |