mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-03 07:00:27 +08:00
x86 - fix pr82920
The various thunks output codes have inconsisten output mechanisms. The patch factors out some common code that writes out the jumps and uses the regular output scheme that accounts for __USER_LABEL_PREFIX__. The testsuite changes are largely mechanical compensation for the revised output (and the fact that Darwin doesn't use non-PIC by default). gcc/ 2019-05-12 Iain Sandoe <iain@sandoe.co.uk> PR target/82920 * config/i386/i386.c (ix86_output_jmp_thunk_or_indirect): New. (ix86_output_indirect_branch_via_reg): Use output mechanism accounting for __USER_LABEL_PREFIX__. (ix86_output_indirect_branch_via_push): Likewise. (ix86_output_function_return): Likewise. (ix86_output_indirect_function_return): Likewise. gcc/testsuite/ 2019-05-12 Iain Sandoe <iain@sandoe.co.uk> Dominique d'Humieres <dominiq@gcc.gnu.org> PR target/82920 * gcc.target/i386/indirect-thunk-1.c: Adjust scan-asms for Darwin, do not use -fno-pic on Darwin. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. * gcc.target/i386/indirect-thunk-register-1.c: Likewise. * gcc.target/i386/indirect-thunk-register-2.c: Likewise. * gcc.target/i386/indirect-thunk-register-3.c: Likewise. * gcc.target/i386/indirect-thunk-register-4.c: Likewise. * gcc.target/i386/ret-thunk-1.c: Likewise. * gcc.target/i386/ret-thunk-10.c: Likewise. * gcc.target/i386/ret-thunk-11.c: Likewise. * gcc.target/i386/ret-thunk-12.c: Likewise. * gcc.target/i386/ret-thunk-13.c: Likewise. * gcc.target/i386/ret-thunk-14.c: Likewise. * gcc.target/i386/ret-thunk-15.c: Likewise. * gcc.target/i386/ret-thunk-16.c: Likewise. * gcc.target/i386/ret-thunk-2.c: Likewise. * gcc.target/i386/ret-thunk-22.c: Likewise. * gcc.target/i386/ret-thunk-23.c: Likewise. * gcc.target/i386/ret-thunk-24.c: Likewise. * gcc.target/i386/ret-thunk-3.c: Likewise. * gcc.target/i386/ret-thunk-4.c: Likewise. * gcc.target/i386/ret-thunk-5.c: Likewise. * gcc.target/i386/ret-thunk-6.c: Likewise. * gcc.target/i386/ret-thunk-7.c: Likewise. * gcc.target/i386/ret-thunk-8.c: Likewise. * gcc.target/i386/ret-thunk-9.c: Likewise. Co-Authored-By: Dominique d'Humieres <dominiq@gcc.gnu.org> From-SVN: r271110
This commit is contained in:
parent
75df257b38
commit
0f8768f734
@ -1,3 +1,13 @@
|
||||
2019-05-12 Iain Sandoe <iain@sandoe.co.uk>
|
||||
|
||||
PR target/82920
|
||||
* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect): New.
|
||||
(ix86_output_indirect_branch_via_reg): Use output mechanism
|
||||
accounting for __USER_LABEL_PREFIX__.
|
||||
(ix86_output_indirect_branch_via_push): Likewise.
|
||||
(ix86_output_function_return): Likewise.
|
||||
(ix86_output_indirect_function_return): Likewise.
|
||||
|
||||
2019-05-12 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* doc/md.texi: Document use of code attributes in rtx patterns.
|
||||
|
@ -15130,6 +15130,20 @@ ix86_nopic_noplt_attribute_p (rtx call_op)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Helper to output the jmp/call. */
|
||||
static void
|
||||
ix86_output_jmp_thunk_or_indirect (const char *thunk_name, const int regno)
|
||||
{
|
||||
if (thunk_name != NULL)
|
||||
{
|
||||
fprintf (asm_out_file, "\tjmp\t");
|
||||
assemble_name (asm_out_file, thunk_name);
|
||||
putc ('\n', asm_out_file);
|
||||
}
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
}
|
||||
|
||||
/* Output indirect branch via a call and return thunk. CALL_OP is a
|
||||
register which contains the branch target. XASM is the assembly
|
||||
template for CALL_OP. Branch is a tail call if SIBCALL_P is true.
|
||||
@ -15168,17 +15182,14 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p)
|
||||
thunk_name = NULL;
|
||||
|
||||
if (sibcall_p)
|
||||
{
|
||||
if (thunk_name != NULL)
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
}
|
||||
ix86_output_jmp_thunk_or_indirect (thunk_name, regno);
|
||||
else
|
||||
{
|
||||
if (thunk_name != NULL)
|
||||
{
|
||||
fprintf (asm_out_file, "\tcall\t%s\n", thunk_name);
|
||||
fprintf (asm_out_file, "\tcall\t");
|
||||
assemble_name (asm_out_file, thunk_name);
|
||||
putc ('\n', asm_out_file);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -15199,10 +15210,7 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p)
|
||||
|
||||
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
|
||||
|
||||
if (thunk_name != NULL)
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
ix86_output_jmp_thunk_or_indirect (thunk_name, regno);
|
||||
|
||||
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
|
||||
|
||||
@ -15259,10 +15267,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm,
|
||||
if (sibcall_p)
|
||||
{
|
||||
output_asm_insn (push_buf, &call_op);
|
||||
if (thunk_name != NULL)
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
ix86_output_jmp_thunk_or_indirect (thunk_name, regno);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -15318,10 +15323,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm,
|
||||
|
||||
output_asm_insn (push_buf, &call_op);
|
||||
|
||||
if (thunk_name != NULL)
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
ix86_output_jmp_thunk_or_indirect (thunk_name, regno);
|
||||
|
||||
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
|
||||
|
||||
@ -15420,7 +15422,9 @@ ix86_output_function_return (bool long_p)
|
||||
indirect_thunk_name (thunk_name, INVALID_REGNUM, need_prefix,
|
||||
true);
|
||||
indirect_return_needed |= need_thunk;
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
fprintf (asm_out_file, "\tjmp\t");
|
||||
assemble_name (asm_out_file, thunk_name);
|
||||
putc ('\n', asm_out_file);
|
||||
}
|
||||
else
|
||||
output_indirect_thunk (INVALID_REGNUM);
|
||||
@ -15460,7 +15464,9 @@ ix86_output_indirect_function_return (rtx ret_op)
|
||||
indirect_return_via_cx = true;
|
||||
indirect_thunks_used |= 1 << CX_REG;
|
||||
}
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
fprintf (asm_out_file, "\tjmp\t");
|
||||
assemble_name (asm_out_file, thunk_name);
|
||||
putc ('\n', asm_out_file);
|
||||
}
|
||||
else
|
||||
output_indirect_thunk (regno);
|
||||
|
@ -1,3 +1,55 @@
|
||||
2019-05-12 Iain Sandoe <iain@sandoe.co.uk>
|
||||
Dominique d'Humieres <dominiq@gcc.gnu.org>
|
||||
|
||||
PR target/82920
|
||||
* gcc.target/i386/indirect-thunk-1.c: Adjust scan-asms for Darwin,
|
||||
do not use -fno-pic on Darwin.
|
||||
* gcc.target/i386/indirect-thunk-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-4.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-7.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-attr-8.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-register-1.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-register-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-register-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-register-4.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-1.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-10.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-11.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-12.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-13.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-14.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-15.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-16.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-2.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-22.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-23.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-24.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-3.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-4.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-5.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-6.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-7.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-8.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-9.c: Likewise.
|
||||
|
||||
2019-05-11 Iain Sandoe <iain@sandoe.co.uk>
|
||||
|
||||
PR testsuite/81058
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk" } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,9 +12,11 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,9 +12,11 @@ male_indirect_jump (long offset)
|
||||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,9 +13,11 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,9 +13,11 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic -fjump-tables" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fjump-tables" } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
void func0 (void);
|
||||
void func1 (void);
|
||||
@ -36,8 +37,10 @@ bar (int i)
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {leaq[ \t]*L[0-9]+\(%rip\)} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {addl[ \t]*L[0-9]+-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -14,9 +15,11 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,9 +13,11 @@ male_indirect_jump (long offset)
|
||||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -14,9 +15,11 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -13,9 +14,11 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -14,8 +15,10 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -13,8 +14,10 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
void func0 (void);
|
||||
void func1 (void);
|
||||
@ -37,7 +38,9 @@ bar (int i)
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk(_nt|)_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {leaq[ \t]*L[0-9]+\(%rip\)} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {addl[ \t]*L[0-9]+-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk(_nt|)_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
void func0 (void);
|
||||
void func1 (void);
|
||||
@ -36,7 +37,7 @@ bar (int i)
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,8 +12,10 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.âLIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,8 +12,10 @@ male_indirect_jump (long offset)
|
||||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,8 +13,10 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,7 +13,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic -fjump-tables" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fjump-tables" } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
void func0 (void);
|
||||
void func1 (void);
|
||||
@ -36,7 +37,7 @@ bar (int i)
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk(_nt|)_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk(_nt|)_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.?LIND" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,10 +12,12 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,10 +12,12 @@ male_indirect_jump (long offset)
|
||||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,10 +13,12 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -12,10 +13,12 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic -fjump-tables" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fjump-tables" } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
void func0 (void);
|
||||
void func1 (void);
|
||||
@ -37,8 +38,8 @@ bar (int i)
|
||||
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register -fno-pic" } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,11 +12,11 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk\n" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk\n" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register -fno-pic" } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,10 +12,10 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register -fno-pic" } */
|
||||
/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
typedef void (*dispatch_t)(long offset);
|
||||
|
||||
@ -11,9 +12,9 @@ male_indirect_jump (long offset)
|
||||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(pause|pause|nop)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mindirect-branch=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*func_p) (void);
|
||||
|
||||
|
@ -6,8 +6,8 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -10,11 +11,11 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "_?__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -10,11 +11,11 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "_?__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -10,11 +11,11 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "_?__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
extern int foo (void) __attribute__ ((function_return("thunk")));
|
||||
@ -11,11 +12,11 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 3 } } */
|
||||
/* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 3 } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -13,9 +14,11 @@ foo (void)
|
||||
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -11,11 +12,13 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern -fno-pic" } */
|
||||
/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -11,8 +12,8 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -6,8 +6,8 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
|
@ -6,10 +6,12 @@ struct s { _Complex unsigned short x; };
|
||||
struct s gs = { 100 + 200i };
|
||||
struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk_ecx" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*___x86.get_pc_thunk.cx} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*___x86_return_thunk} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -6,10 +6,12 @@ struct s { _Complex unsigned short x; };
|
||||
struct s gs = { 100 + 200i };
|
||||
struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk_ecx" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*___x86.get_pc_thunk.cx} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*___x86_return_thunk} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {\tpause} } } */
|
||||
/* { dg-final { scan-assembler-not {\tlfence} } } */
|
||||
|
@ -6,10 +6,12 @@ struct s { _Complex unsigned short x; };
|
||||
struct s gs = { 100 + 200i };
|
||||
struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk_ecx" { target { ! *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*___x86.get_pc_thunk.cx} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*___x86_return_thunk} { target { *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -6,7 +6,7 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -6,7 +6,7 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -8,8 +8,8 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
@ -7,8 +7,8 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
|
@ -7,7 +7,7 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -8,7 +8,7 @@ foo (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */
|
||||
/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk " } */
|
||||
/* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
@ -10,12 +11,14 @@ foo (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "__x86_return_thunk:" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler {jmp[ \t]+\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler {call[ \t]+\.?LIND} } } */
|
||||
/* { dg-final { scan-assembler "_?__x86_return_thunk:" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
Loading…
x
Reference in New Issue
Block a user