i386: Adjust -fzero-call-used-regs to always use XOR [PR101891]
Currently on i386, -fzero-call-used-regs uses a pattern of: XOR regA,regA MOV regA,regB MOV regA,regC ... RET However, this introduces both a register ordering dependency (e.g. the CPU cannot clear regB without clearing regA first), and while greatly reduces available ROP gadgets, it does technically leave a set of "MOV" ROP gadgets at the end of functions (e.g. "MOV regA,regC; RET"). This patch will switch to always use XOR on i386: XOR regA,regA XOR regB,regB XOR regC,regC ... RET gcc/ChangeLog: PR target/101891 * config/i386/i386.cc (zero_call_used_regno_mode): use V2SImode as a generic MMX mode instead of V4HImode. (zero_all_mm_registers): Use SET to zero instead of MOV for zeroing scratch registers. (ix86_zero_call_used_regs): Likewise. gcc/testsuite/ChangeLog: * gcc.target/i386/zero-scratch-regs-1.c: Add -fno-stack-protector -fno-PIC. * gcc.target/i386/zero-scratch-regs-10.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-13.c: Add -msse. * gcc.target/i386/zero-scratch-regs-14.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-15.c: Add -fno-stack-protector -fno-PIC. * gcc.target/i386/zero-scratch-regs-16.c: Likewise. * gcc.target/i386/zero-scratch-regs-17.c: Likewise. * gcc.target/i386/zero-scratch-regs-18.c: Add -fno-stack-protector -fno-PIC, adjust mov to xor. * gcc.target/i386/zero-scratch-regs-19.c: Add -fno-stack-protector -fno-PIC. * gcc.target/i386/zero-scratch-regs-2.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-20.c: Add -msse. * gcc.target/i386/zero-scratch-regs-21.c: Add -fno-stack-protector -fno-PIC, Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-22.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-23.c: Likewise. * gcc.target/i386/zero-scratch-regs-26.c: Likewise. * gcc.target/i386/zero-scratch-regs-27.c: Likewise. * gcc.target/i386/zero-scratch-regs-28.c: Likewise. * gcc.target/i386/zero-scratch-regs-3.c: Add -fno-stack-protector. * gcc.target/i386/zero-scratch-regs-31.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-4.c: Add -fno-stack-protector -fno-PIC. * gcc.target/i386/zero-scratch-regs-5.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-6.c: Add -fno-stack-protector. * gcc.target/i386/zero-scratch-regs-7.c: Likewise. * gcc.target/i386/zero-scratch-regs-8.c: Adjust mov to xor. * gcc.target/i386/zero-scratch-regs-9.c: Add -fno-stack-protector.
This commit is contained in:
parent
a742a5db60
commit
0b86943aca
26 changed files with 180 additions and 192 deletions
|
@ -3706,7 +3706,7 @@ zero_call_used_regno_mode (const unsigned int regno)
|
|||
else if (MASK_REGNO_P (regno))
|
||||
return HImode;
|
||||
else if (MMX_REGNO_P (regno))
|
||||
return V4HImode;
|
||||
return V2SImode;
|
||||
else
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
@ -3826,19 +3826,12 @@ zero_all_mm_registers (HARD_REG_SET need_zeroed_hardregs,
|
|||
if (!need_zero_all_mm)
|
||||
return false;
|
||||
|
||||
rtx zero_mmx = NULL_RTX;
|
||||
machine_mode mode = V4HImode;
|
||||
machine_mode mode = V2SImode;
|
||||
for (unsigned int regno = FIRST_MMX_REG; regno <= LAST_MMX_REG; regno++)
|
||||
if (regno != ret_mmx_regno)
|
||||
{
|
||||
rtx reg = gen_rtx_REG (mode, regno);
|
||||
if (zero_mmx == NULL_RTX)
|
||||
{
|
||||
zero_mmx = reg;
|
||||
emit_insn (gen_rtx_SET (reg, CONST0_RTX (mode)));
|
||||
}
|
||||
else
|
||||
emit_move_insn (reg, zero_mmx);
|
||||
emit_insn (gen_rtx_SET (reg, CONST0_RTX (mode)));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -3908,11 +3901,6 @@ ix86_zero_call_used_regs (HARD_REG_SET need_zeroed_hardregs)
|
|||
|
||||
/* Now, generate instructions to zero all the other registers. */
|
||||
|
||||
rtx zero_gpr = NULL_RTX;
|
||||
rtx zero_vector = NULL_RTX;
|
||||
rtx zero_mask = NULL_RTX;
|
||||
rtx zero_mmx = NULL_RTX;
|
||||
|
||||
for (unsigned int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
|
||||
{
|
||||
if (!TEST_HARD_REG_BIT (need_zeroed_hardregs, regno))
|
||||
|
@ -3923,59 +3911,34 @@ ix86_zero_call_used_regs (HARD_REG_SET need_zeroed_hardregs)
|
|||
|
||||
SET_HARD_REG_BIT (zeroed_hardregs, regno);
|
||||
|
||||
rtx reg, tmp, zero_rtx;
|
||||
machine_mode mode = zero_call_used_regno_mode (regno);
|
||||
|
||||
reg = gen_rtx_REG (mode, regno);
|
||||
zero_rtx = CONST0_RTX (mode);
|
||||
rtx reg = gen_rtx_REG (mode, regno);
|
||||
rtx tmp = gen_rtx_SET (reg, CONST0_RTX (mode));
|
||||
|
||||
if (mode == SImode)
|
||||
if (zero_gpr == NULL_RTX)
|
||||
{
|
||||
zero_gpr = reg;
|
||||
tmp = gen_rtx_SET (reg, zero_rtx);
|
||||
if (!TARGET_USE_MOV0 || optimize_insn_for_size_p ())
|
||||
{
|
||||
rtx clob = gen_rtx_CLOBBER (VOIDmode,
|
||||
gen_rtx_REG (CCmode,
|
||||
FLAGS_REG));
|
||||
tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2,
|
||||
tmp,
|
||||
clob));
|
||||
}
|
||||
emit_insn (tmp);
|
||||
}
|
||||
else
|
||||
emit_move_insn (reg, zero_gpr);
|
||||
else if (mode == V4SFmode)
|
||||
if (zero_vector == NULL_RTX)
|
||||
{
|
||||
zero_vector = reg;
|
||||
tmp = gen_rtx_SET (reg, zero_rtx);
|
||||
emit_insn (tmp);
|
||||
}
|
||||
else
|
||||
emit_move_insn (reg, zero_vector);
|
||||
else if (mode == HImode)
|
||||
if (zero_mask == NULL_RTX)
|
||||
{
|
||||
zero_mask = reg;
|
||||
tmp = gen_rtx_SET (reg, zero_rtx);
|
||||
emit_insn (tmp);
|
||||
}
|
||||
else
|
||||
emit_move_insn (reg, zero_mask);
|
||||
else if (mode == V4HImode)
|
||||
if (zero_mmx == NULL_RTX)
|
||||
{
|
||||
zero_mmx = reg;
|
||||
tmp = gen_rtx_SET (reg, zero_rtx);
|
||||
emit_insn (tmp);
|
||||
}
|
||||
else
|
||||
emit_move_insn (reg, zero_mmx);
|
||||
else
|
||||
gcc_unreachable ();
|
||||
switch (mode)
|
||||
{
|
||||
case E_SImode:
|
||||
if (!TARGET_USE_MOV0 || optimize_insn_for_size_p ())
|
||||
{
|
||||
rtx clob = gen_rtx_CLOBBER (VOIDmode,
|
||||
gen_rtx_REG (CCmode,
|
||||
FLAGS_REG));
|
||||
tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2,
|
||||
tmp,
|
||||
clob));
|
||||
}
|
||||
/* FALLTHRU. */
|
||||
|
||||
case E_V4SFmode:
|
||||
case E_HImode:
|
||||
case E_V2SImode:
|
||||
emit_insn (tmp);
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
return zeroed_hardregs;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
void
|
||||
foo (void)
|
||||
|
|
|
@ -11,11 +11,11 @@ foo (int x)
|
|||
|
||||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[\t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all -march=corei7" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all -march=corei7 -msse" } */
|
||||
|
||||
void
|
||||
foo (void)
|
||||
|
@ -7,15 +7,28 @@ foo (void)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm0, %xmm0" } } */
|
||||
/* { dg-final { scan-assembler-times "movaps\[ \t\]+%xmm0, %xmm\[0-9\]+" 7 { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "movaps\[ \t\]+%xmm0, %xmm\[0-9\]+" 15 { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm0, %xmm0" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm1, %xmm1" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm2, %xmm2" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm3, %xmm3" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm4, %xmm4" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm5, %xmm5" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm6, %xmm6" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm7, %xmm7" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm8, %xmm8" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm9, %xmm9" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm10, %xmm10" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm11, %xmm11" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm12, %xmm12" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm13, %xmm13" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm14, %xmm14" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm15, %xmm15" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -9,11 +9,11 @@ foo (void)
|
|||
/* { dg-final { scan-assembler-times "vzeroall" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
extern void foo (void) __attribute__ ((zero_call_used_regs("used")));
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
extern void foo (void) __attribute__ ((zero_call_used_regs("skip")));
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -fno-stack-protector" } */
|
||||
|
||||
int
|
||||
foo (int x)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -march=corei7" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -march=corei7 -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
float
|
||||
foo (float z, float y, float x)
|
||||
|
@ -9,5 +9,5 @@ foo (float z, float y, float x)
|
|||
|
||||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm1, %xmm1" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm1, %xmm2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm2, %xmm2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "xorl\[ \t\]+%" } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -march=corei7" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used -march=corei7 -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
float
|
||||
foo (float z, float y, float x)
|
||||
|
|
|
@ -9,11 +9,11 @@ foo (void)
|
|||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all -march=corei7" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all -march=corei7 -msse" } */
|
||||
|
||||
float
|
||||
foo (float z, float y, float x)
|
||||
|
@ -8,16 +8,28 @@ foo (float z, float y, float x)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm0, %xmm0" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm1, %xmm1" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "movaps\[ \t\]+%xmm0, %xmm\[0-9\]+" 7 { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "movaps\[ \t\]+%xmm1, %xmm\[0-9\]+" 14 { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm0, %xmm0" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm1, %xmm1" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm2, %xmm2" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm3, %xmm3" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm4, %xmm4" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm5, %xmm5" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm6, %xmm6" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm7, %xmm7" { target { ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm8, %xmm8" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm9, %xmm9" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm10, %xmm10" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm11, %xmm11" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm12, %xmm12" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm13, %xmm13" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm14, %xmm14" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm15, %xmm15" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -march=corei7" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -march=corei7 -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
__attribute__ ((zero_call_used_regs("used")))
|
||||
float
|
||||
|
@ -10,5 +10,5 @@ foo (float z, float y, float x)
|
|||
|
||||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm1, %xmm1" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm1, %xmm2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm2, %xmm2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "xorl\[ \t\]+%" } } */
|
||||
|
|
|
@ -11,11 +11,11 @@ foo (void)
|
|||
/* { dg-final { scan-assembler-times "fstp\[ \t\]+%st\\(0\\)" 8 } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -11,19 +11,19 @@ foo (void)
|
|||
/* { dg-final { scan-assembler-times "fstp\[ \t\]+%st\\(0\\)" 8 } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k0, %k0, %k0" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k1" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k3" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k4" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k5" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k6" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kmovw\[ \t\]+%k0, %k7" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k1, %k1, %k1" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k2, %k2, %k2" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k3, %k3, %k3" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k4, %k4, %k4" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k5, %k5, %k5" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k6, %k6, %k6" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "kxorw\[ \t\]+%k7, %k7, %k7" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -8,16 +8,16 @@ foo (int x)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%xmm0, %xmm0" } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm1" } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm2" } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm3" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm4" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm5" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm6" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movaps\[ \t\]+%xmm0, %xmm7" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm0, %xmm0" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm1, %xmm1" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm2, %xmm2" } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm3, %xmm3" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm4, %xmm4" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm5, %xmm5" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm6, %xmm6" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "\[a-z\]*xor\[a-z\]*\[ \t\]+%xmm7, %xmm7" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -8,8 +8,8 @@ foo (int x)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -10,9 +10,9 @@ __v2si ret_mmx (void)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm1, %mm1" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm2" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm3" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm4" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm5" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm6" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm7" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm2, %mm2" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm3, %mm3" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm4, %mm4" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm5, %mm5" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm6, %mm6" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm7, %mm7" } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -fno-stack-protector" } */
|
||||
|
||||
void
|
||||
foo (void)
|
||||
|
|
|
@ -10,5 +10,5 @@ __v2si ret_mmx (void)
|
|||
}
|
||||
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm1, %mm1" } } */
|
||||
/* { dg-final { scan-assembler "movq\[ \t\]+%mm1, %mm2" } } */
|
||||
/* { dg-final { scan-assembler-not "movq\[ \t\]+%mm1, %mm\[34567\]" } } */
|
||||
/* { dg-final { scan-assembler "pxor\[ \t\]+%mm2, %mm2" } } */
|
||||
/* { dg-final { scan-assembler-not "pxor\[ \t\]+%mm\[34567\], %mm\[34567\]" } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -fno-stack-protector -fno-PIC" } */
|
||||
|
||||
extern void foo (void) __attribute__ ((zero_call_used_regs("used-gpr")));
|
||||
|
||||
|
|
|
@ -10,11 +10,11 @@ foo (void)
|
|||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%eax, %eax" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%eax, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all-gpr" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=all-gpr -fno-stack-protector" } */
|
||||
|
||||
extern void foo (void) __attribute__ ((zero_call_used_regs("skip")));
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used-gpr" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=used-gpr -fno-stack-protector" } */
|
||||
|
||||
int
|
||||
foo (int x)
|
||||
|
|
|
@ -10,10 +10,10 @@ foo (int x)
|
|||
/* { dg-final { scan-assembler-not "vzeroall" } } */
|
||||
/* { dg-final { scan-assembler-not "%xmm" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edx, %edx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "movl\[ \t\]+%edx, %r11d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%ecx, %ecx" } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%esi, %esi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%edi, %edi" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r8d, %r8d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r9d, %r9d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r10d, %r10d" { target { ! ia32 } } } } */
|
||||
/* { dg-final { scan-assembler "xorl\[ \t\]+%r11d, %r11d" { target { ! ia32 } } } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip" } */
|
||||
/* { dg-options "-O2 -fzero-call-used-regs=skip -fno-stack-protector" } */
|
||||
|
||||
extern int foo (int) __attribute__ ((zero_call_used_regs("used-gpr")));
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue