blob: e1574a2903afcc9691079de560f0760c8a591723 [file] [log] [blame]
/* Test to generate output reload in asm goto on x86_64. */
/* { dg-do compile { target lra } } */
/* { dg-skip-if "no O0" { { i?86-*-* x86_64-*-* } && { ! ia32 } } { "-O0" } { "" } } */
#if defined __x86_64__
#define ASM(s) asm (s)
#else
#define ASM(s)
#endif
int
foo (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8,
int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16)
{
register int v0 ASM ("rax") = a3;
register int v1 ASM ("rbx") = a4;
register int v2 ASM ("rcx") = a5;
register int v3 ASM ("rdx") = a6;
register int v4 ASM ("rsi") = a7;
register int v5 ASM ("rdi") = a8;
register int v6 ASM ("r8") = a9;
register int v7 ASM ("r9") = a10;
register int v8 ASM ("r10") = a11;
register int v9 ASM ("r11") = a12;
register int v10 ASM ("r12") = a13;
register int v11 ASM ("r13") = a14;
register int v12 ASM ("r14") = a15;
register int v13 ASM ("r15") = a16;
int x;
v0 += a0;
v1 += a1;
v2 += a2;
v0 |= a0;
v1 |= a1;
v2 |= a2;
v0 ^= a0;
v1 ^= a1;
v2 ^= a2;
v0 &= a0;
v1 &= a1;
v2 &= a2;
asm goto ("": "=r" (x) : : : lab);
a1 ^= a0;
a2 = a1;
a0 |= a2;
a0 |= x;
lab:
v0 += x + a0 + a1 + a2;
v1 -= a0 - a1 - a2;
v2 |= a0 | a1 | a2;
v3 |= a0 & a1 & a2;
v4 ^= a0 ^ a1 ^ a2;
return v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10 + v11 + v12 + v13 + a0 + a1 + a2;
}