i386: Add TARGET_INDIRECT_BRANCH_REGISTER
For --- struct C { virtual ~C(); virtual void f(); }; void f (C *p) { p->f(); p->f(); } --- -mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: _Z1fP1C: .LFB0: .cfi_startproc pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 movq (%rdi), %rax movq %rdi, %rbx jmp .LIND1 .LIND0: pushq 16(%rax) jmp __x86_indirect_thunk .LIND1: call .LIND0 movq (%rbx), %rax movq %rbx, %rdi popq %rbx .cfi_def_cfa_offset 8 movq 16(%rax), %rax jmp __x86_indirect_thunk_rax .cfi_endproc x86-64 is supposed to have asynchronous unwind tables by default, but there is nothing that reflects the change in the (relative) frame address after .LIND0. That region really has to be moved outside of the .cfi_startproc/.cfi_endproc bracket. This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect branch via register whenever -mindirect-branch= is used. Now, -mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: _Z1fP1C: .LFB0: .cfi_startproc pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 movq (%rdi), %rax movq %rdi, %rbx movq 16(%rax), %rax call __x86_indirect_thunk_rax movq (%rbx), %rax movq %rbx, %rdi popq %rbx .cfi_def_cfa_offset 8 movq 16(%rax), %rax jmp __x86_indirect_thunk_rax .cfi_endproc so that "-mindirect-branch=thunk-extern" is equivalent to "-mindirect-branch=thunk-extern -mindirect-branch-register", which is used by Linux kernel. gcc/ PR target/84039 * config/i386/constraints.md (Bs): Replace ix86_indirect_branch_register with TARGET_INDIRECT_BRANCH_REGISTER. (Bw): Likewise. * config/i386/i386.md (indirect_jump): Likewise. (tablejump): Likewise. (*sibcall_memory): Likewise. (*sibcall_value_memory): Likewise. Peepholes of indirect call and jump via memory: Likewise. (*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER. (*sibcall_value_GOT_32): Likewise. * config/i386/i386.opt: Likewise. * config/i386/predicates.md (indirect_branch_operand): Likewise. (GOT_memory_operand): Likewise. (call_insn_operand): Likewise. (sibcall_insn_operand): Likewise. (GOT32_symbol_operand): Likewise. * config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New. gcc/testsuite/ PR target/84039 * gcc.target/i386/indirect-thunk-1.c: Updated. * 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-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.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-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.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-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.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-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. * gcc.target/i386/ret-thunk-9.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. From-SVN: r258001
This commit is contained in:
parent
94e16982e6
commit
c2c601b2c0
45 changed files with 192 additions and 141 deletions
|
@ -1,3 +1,25 @@
|
|||
2018-02-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/84039
|
||||
* config/i386/constraints.md (Bs): Replace
|
||||
ix86_indirect_branch_register with
|
||||
TARGET_INDIRECT_BRANCH_REGISTER.
|
||||
(Bw): Likewise.
|
||||
* config/i386/i386.md (indirect_jump): Likewise.
|
||||
(tablejump): Likewise.
|
||||
(*sibcall_memory): Likewise.
|
||||
(*sibcall_value_memory): Likewise.
|
||||
Peepholes of indirect call and jump via memory: Likewise.
|
||||
(*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER.
|
||||
(*sibcall_value_GOT_32): Likewise.
|
||||
* config/i386/i386.opt: Likewise.
|
||||
* config/i386/predicates.md (indirect_branch_operand): Likewise.
|
||||
(GOT_memory_operand): Likewise.
|
||||
(call_insn_operand): Likewise.
|
||||
(sibcall_insn_operand): Likewise.
|
||||
(GOT32_symbol_operand): Likewise.
|
||||
* config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New.
|
||||
|
||||
2018-02-26 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR rtl-optimization/83496
|
||||
|
|
|
@ -225,7 +225,7 @@
|
|||
|
||||
(define_constraint "Bs"
|
||||
"@internal Sibcall memory operand."
|
||||
(ior (and (not (match_test "ix86_indirect_branch_register"))
|
||||
(ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "sibcall_memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
|
@ -233,7 +233,7 @@
|
|||
|
||||
(define_constraint "Bw"
|
||||
"@internal Call memory operand."
|
||||
(ior (and (not (match_test "ix86_indirect_branch_register"))
|
||||
(ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
|
|
|
@ -2709,6 +2709,10 @@ extern void debug_dispatch_window (int);
|
|||
#define TARGET_PREFER_AVX256 (TARGET_PREFER_AVX128 \
|
||||
|| prefer_vector_width_type == PVW_AVX256)
|
||||
|
||||
#define TARGET_INDIRECT_BRANCH_REGISTER \
|
||||
(ix86_indirect_branch_register \
|
||||
|| cfun->machine->indirect_branch_type != indirect_branch_keep)
|
||||
|
||||
#define IX86_HLE_ACQUIRE (1 << 16)
|
||||
#define IX86_HLE_RELEASE (1 << 17)
|
||||
|
||||
|
|
|
@ -12311,7 +12311,7 @@
|
|||
[(set (pc) (match_operand 0 "indirect_branch_operand"))]
|
||||
""
|
||||
{
|
||||
if (TARGET_X32 || ix86_indirect_branch_register)
|
||||
if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
|
||||
operands[0] = convert_memory_address (word_mode, operands[0]);
|
||||
cfun->machine->has_local_indirect_jump = true;
|
||||
})
|
||||
|
@ -12365,7 +12365,7 @@
|
|||
OPTAB_DIRECT);
|
||||
}
|
||||
|
||||
if (TARGET_X32 || ix86_indirect_branch_register)
|
||||
if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
|
||||
operands[0] = convert_memory_address (word_mode, operands[0]);
|
||||
cfun->machine->has_local_indirect_jump = true;
|
||||
})
|
||||
|
@ -12595,7 +12595,10 @@
|
|||
(match_operand:SI 0 "register_no_elim_operand" "U")
|
||||
(match_operand:SI 1 "GOT32_symbol_operand"))))
|
||||
(match_operand 2))]
|
||||
"!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)"
|
||||
"!TARGET_MACHO
|
||||
&& !TARGET_64BIT
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (insn)"
|
||||
{
|
||||
rtx fnaddr = gen_rtx_PLUS (SImode, operands[0], operands[1]);
|
||||
fnaddr = gen_const_mem (SImode, fnaddr);
|
||||
|
@ -12614,7 +12617,7 @@
|
|||
[(call (mem:QI (match_operand:W 0 "memory_operand" "m"))
|
||||
(match_operand 1))
|
||||
(unspec [(const_int 0)] UNSPEC_PEEPSIB)]
|
||||
"!TARGET_X32 && !ix86_indirect_branch_register"
|
||||
"!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER"
|
||||
"* return ix86_output_call_insn (insn, operands[0]);"
|
||||
[(set_attr "type" "call")])
|
||||
|
||||
|
@ -12624,7 +12627,7 @@
|
|||
(call (mem:QI (match_dup 0))
|
||||
(match_operand 3))]
|
||||
"!TARGET_X32
|
||||
&& !ix86_indirect_branch_register
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (peep2_next_insn (1))
|
||||
&& !reg_mentioned_p (operands[0],
|
||||
CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
|
||||
|
@ -12639,7 +12642,7 @@
|
|||
(call (mem:QI (match_dup 0))
|
||||
(match_operand 3))]
|
||||
"!TARGET_X32
|
||||
&& !ix86_indirect_branch_register
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (peep2_next_insn (2))
|
||||
&& !reg_mentioned_p (operands[0],
|
||||
CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
|
||||
|
@ -12737,7 +12740,7 @@
|
|||
(match_operand:W 1 "memory_operand"))
|
||||
(set (pc) (match_dup 0))]
|
||||
"!TARGET_X32
|
||||
&& !ix86_indirect_branch_register
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& peep2_reg_dead_p (2, operands[0])"
|
||||
[(set (pc) (match_dup 1))])
|
||||
|
||||
|
@ -12798,7 +12801,10 @@
|
|||
(match_operand:SI 1 "register_no_elim_operand" "U")
|
||||
(match_operand:SI 2 "GOT32_symbol_operand"))))
|
||||
(match_operand 3)))]
|
||||
"!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)"
|
||||
"!TARGET_MACHO
|
||||
&& !TARGET_64BIT
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (insn)"
|
||||
{
|
||||
rtx fnaddr = gen_rtx_PLUS (SImode, operands[1], operands[2]);
|
||||
fnaddr = gen_const_mem (SImode, fnaddr);
|
||||
|
@ -12819,7 +12825,7 @@
|
|||
(call (mem:QI (match_operand:W 1 "memory_operand" "m"))
|
||||
(match_operand 2)))
|
||||
(unspec [(const_int 0)] UNSPEC_PEEPSIB)]
|
||||
"!TARGET_X32 && !ix86_indirect_branch_register"
|
||||
"!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER"
|
||||
"* return ix86_output_call_insn (insn, operands[1]);"
|
||||
[(set_attr "type" "callv")])
|
||||
|
||||
|
@ -12830,7 +12836,7 @@
|
|||
(call (mem:QI (match_dup 0))
|
||||
(match_operand 3)))]
|
||||
"!TARGET_X32
|
||||
&& !ix86_indirect_branch_register
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (peep2_next_insn (1))
|
||||
&& !reg_mentioned_p (operands[0],
|
||||
CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
|
||||
|
@ -12847,7 +12853,7 @@
|
|||
(call (mem:QI (match_dup 0))
|
||||
(match_operand 3)))]
|
||||
"!TARGET_X32
|
||||
&& !ix86_indirect_branch_register
|
||||
&& !TARGET_INDIRECT_BRANCH_REGISTER
|
||||
&& SIBLING_CALL_P (peep2_next_insn (2))
|
||||
&& !reg_mentioned_p (operands[0],
|
||||
CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
|
||||
|
|
|
@ -665,7 +665,7 @@
|
|||
;; Test for a valid operand for indirect branch.
|
||||
(define_predicate "indirect_branch_operand"
|
||||
(ior (match_operand 0 "register_operand")
|
||||
(and (not (match_test "ix86_indirect_branch_register"))
|
||||
(and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand"))))
|
||||
|
||||
|
@ -709,7 +709,7 @@
|
|||
(ior (match_test "constant_call_address_operand
|
||||
(op, mode == VOIDmode ? mode : Pmode)")
|
||||
(match_operand 0 "call_register_no_elim_operand")
|
||||
(and (not (match_test "ix86_indirect_branch_register"))
|
||||
(and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(ior (and (not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
|
@ -720,7 +720,7 @@
|
|||
(ior (match_test "constant_call_address_operand
|
||||
(op, mode == VOIDmode ? mode : Pmode)")
|
||||
(match_operand 0 "register_no_elim_operand")
|
||||
(and (not (match_test "ix86_indirect_branch_register"))
|
||||
(and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(ior (and (not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "sibcall_memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
|
|
|
@ -1,3 +1,46 @@
|
|||
2018-02-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/84039
|
||||
* gcc.target/i386/indirect-thunk-1.c: Updated.
|
||||
* 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-5.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-6.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-bnd-1.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-bnd-4.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-5.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-extern-6.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-5.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
|
||||
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-9.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.
|
||||
|
||||
2018-02-26 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.c-torture/execute/20180226-1.c: New test.
|
||||
|
|
|
@ -11,9 +11,8 @@ male_indirect_jump (long offset)
|
|||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -11,9 +11,8 @@ male_indirect_jump (long offset)
|
|||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { 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 "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
|
|
|
@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { 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 "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
|
|
|
@ -9,8 +9,10 @@ foo (void)
|
|||
bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
|
|
|
@ -10,9 +10,13 @@ foo (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 { target x32 } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
|
|
@ -35,9 +35,8 @@ bar (int i)
|
|||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -14,9 +14,8 @@ male_indirect_jump (long offset)
|
|||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
|||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -14,10 +14,9 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
|
|
@ -13,10 +13,9 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
|
|
|
@ -14,9 +14,8 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -13,9 +13,8 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -36,9 +36,8 @@ bar (int i)
|
|||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -10,9 +10,9 @@ foo (void)
|
|||
dispatch (buf);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "bnd ret" } } */
|
||||
|
|
|
@ -11,10 +11,8 @@ foo (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "bnd ret" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
|
|
|
@ -10,8 +10,9 @@ foo (void)
|
|||
bar (buf);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "bnd ret" } } */
|
||||
|
|
|
@ -11,10 +11,9 @@ foo (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 1 } } */
|
||||
/* { dg-final { scan-assembler "bnd ret" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
|
|
|
@ -11,9 +11,8 @@ male_indirect_jump (long offset)
|
|||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -11,9 +11,8 @@ male_indirect_jump (long offset)
|
|||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -12,9 +12,7 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
|
|
|
@ -9,8 +9,10 @@ foo (void)
|
|||
bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -10,8 +10,8 @@ foo (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
|
|
|
@ -35,9 +35,8 @@ bar (int i)
|
|||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { 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-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
|
|
|
@ -11,7 +11,7 @@ male_indirect_jump (long offset)
|
|||
dispatch(offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -11,7 +11,7 @@ male_indirect_jump (long offset)
|
|||
dispatch[offset](offset);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -12,7 +12,7 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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-times {\tpause} 1 } } */
|
||||
|
|
|
@ -12,7 +12,7 @@ male_indirect_jump (long offset)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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-times {\tpause} 1 } } */
|
||||
|
|
|
@ -9,7 +9,8 @@ foo (void)
|
|||
bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
|
|
|
@ -10,7 +10,8 @@ foo (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
|
||||
/* { 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 } } */
|
||||
|
|
|
@ -35,8 +35,8 @@ bar (int i)
|
|||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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 {\tpause} } } */
|
||||
|
|
|
@ -15,9 +15,6 @@ foo (void)
|
|||
/* { 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 "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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" } } */
|
||||
|
|
|
@ -15,9 +15,6 @@ foo (void)
|
|||
/* { 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 "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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" } } */
|
||||
|
|
|
@ -15,8 +15,6 @@ foo (void)
|
|||
/* { 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 "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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" } } */
|
||||
|
|
|
@ -14,9 +14,8 @@ foo (void)
|
|||
/* { 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 "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { 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" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
|
|
|
@ -16,7 +16,6 @@ foo (void)
|
|||
/* { 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 "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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 "pushq\[ \t\]%rax" } } */
|
||||
|
|
|
@ -16,7 +16,6 @@ foo (void)
|
|||
/* { 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 "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { 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 "pushq\[ \t\]%rax" } } */
|
||||
|
|
|
@ -14,11 +14,8 @@ foo (void)
|
|||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
/* { 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-not "pushq\[ \t\]%rax" } } */
|
||||
|
|
Loading…
Add table
Reference in a new issue