diff mbox series

i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO

Message ID 20180115164525.GA21295@gmail.com
State New
Headers show
Series i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO | expand

Commit Message

H.J. Lu Jan. 15, 2018, 4:45 p.m. UTC
ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
generate the __x86_return_thunk label, instead of the set directive.
Update testcase to remove the __x86_return_thunk label check.  Since
-fno-pic is ignored on Darwin, update testcases to sscan or "push"
only on Linux.

Tested with a cross compiler to x86_64-apple-darwin10.4.0.  OK for
trunk?

H.J.
---
gcc/

	PR target/83839
	* config/i386/i386.c (output_indirect_thunk_function): Use
	ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
	for  __x86.return_thunk.

gcc/testsuite/

	PR target/83839
	* gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on
	Linux.
	* 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-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-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-register-1.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-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-9.c: Don't check the
	__x86_return_thunk label.
	Scan for "push" only for Linux.
---
 gcc/config/i386/i386.c                                  | 3 ++-
 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c        | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c        | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c        | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c        | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c        | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c   | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c    | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c    | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 2 +-
 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-10.c            | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-11.c            | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-13.c            | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-14.c            | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-15.c            | 2 +-
 gcc/testsuite/gcc.target/i386/ret-thunk-9.c             | 3 +--
 31 files changed, 32 insertions(+), 32 deletions(-)

Comments

Jan Hubicka Jan. 15, 2018, 6 p.m. UTC | #1
> Hi Jan,
> 
> Can you review this patch?  This blocks the GCC 7 backport.
> 
> Thanks.
> 
> H.J.
> 
> 
> ---------- Forwarded message ----------
> From: H.J. Lu <hjl.tools@gmail.com>
> Date: Mon, Jan 15, 2018 at 8:45 AM
> Subject: [PATCH] i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO
> To: gcc-patches@gcc.gnu.org
> Cc: Uros Bizjak <ubizjak@gmail.com>
> 
> 
> ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
> generate the __x86_return_thunk label, instead of the set directive.
> Update testcase to remove the __x86_return_thunk label check.  Since
> -fno-pic is ignored on Darwin, update testcases to sscan or "push"
> only on Linux.
> 
> Tested with a cross compiler to x86_64-apple-darwin10.4.0.  OK for
> trunk?
> 
> H.J.
> ---
> gcc/
> 
>         PR target/83839
>         * config/i386/i386.c (output_indirect_thunk_function): Use
>         ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
>         for  __x86.return_thunk.

Hmm, we really ought to merge it with the way normal thunks are output from
middle-end next stage1.

OK
Honza
> 
> gcc/testsuite/
> 
>         PR target/83839
>         * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on
>         Linux.
>         * 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-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-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-register-1.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-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-9.c: Don't check the
>         __x86_return_thunk label.
>         Scan for "push" only for Linux.
> ---
>  gcc/config/i386/i386.c                                  | 3 ++-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-1.c        | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-2.c        | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-3.c        | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-4.c        | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-7.c        | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c   | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c    | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c    | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-10.c            | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-11.c            | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-13.c            | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-14.c            | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-15.c            | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-9.c             | 3 +--
>  31 files changed, 32 insertions(+), 32 deletions(-)
> 
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 5e4f845a1bd..bfb31db8752 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -10970,7 +10970,6 @@ output_indirect_thunk_function (bool
> need_bnd_p, int regno)
>        char alias[32];
> 
>        indirect_thunk_name (alias, regno, need_bnd_p, true);
> -      ASM_OUTPUT_DEF (asm_out_file, alias, name);
>  #if TARGET_MACHO
>        if (TARGET_MACHO)
>         {
> @@ -10979,8 +10978,10 @@ output_indirect_thunk_function (bool
> need_bnd_p, int regno)
>           fputs ("\n\t.private_extern\t", asm_out_file);
>           assemble_name (asm_out_file, alias);
>           putc ('\n', asm_out_file);
> +         ASM_OUTPUT_LABEL (asm_out_file, alias);
>         }
>  #else
> +      ASM_OUTPUT_DEF (asm_out_file, alias, name);
>        if (USE_HIDDEN_LINKONCE)
>         {
>           fputs ("\t.globl\t", asm_out_file);
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
> index 9eb9b273ade..60d09881a99 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch(offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
> index c63795e4127..aac75163794 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch[offset](offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> index 82973cda771..9e24a385387 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> index a5f3d1cbed8..127b5d94523 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
> index ebfb8aab937..17c2d0faf88 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
> @@ -35,7 +35,7 @@ bar (int i)
>      }
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%"
> { target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
> index a08022db8e4..9194ccf3cbc 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
> @@ -14,7 +14,7 @@ male_indirect_jump (long offset)
>    dispatch(offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
> index b257c695ad1..e51f261a612 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    dispatch[offset](offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
> index dfb1370d23d..4aeec1833cd 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
> @@ -14,7 +14,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-linux* } } } } */
>  /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
>  /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
>  /* { dg-final { scan-assembler {\tpause} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
> index a6e3f6f9f2b..ac0e5999f63 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
> @@ -13,7 +13,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-linux* } } } } */
>  /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
>  /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
>  /* { dg-final { scan-assembler {\tpause} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
> index 4bb1c5f9220..573cf1ef09e 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
> @@ -14,7 +14,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
> index 4e33a638862..b2b37fc6e2e 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
> @@ -13,7 +13,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
> index 427ba3ddbb4..4a43e199931 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
> @@ -36,7 +36,7 @@ bar (int i)
>      }
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%"
> { target { ! x32 } } } } */
> +/* { 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-not {\t(lfence|pause)} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
> index dc7143414fb..ac84ab623fa 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
> @@ -10,7 +10,7 @@ foo (void)
>    dispatch (buf);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
> index 737c60946f6..ce655e8be1c 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
> @@ -11,7 +11,7 @@ foo (void)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
> index 5c20a35ecec..579441f250e 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch(offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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-not {\t(lfence|pause)} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
> index b2fb6e1bcd2..c92e6f2b02d 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch[offset](offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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-not {\t(lfence|pause)} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
> index 9c84547cd7c..d9964c25bbd 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
> index 457849564bb..d4dca4dc5fe 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { 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 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
> index d4747ea0764..aece9383697 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
> @@ -35,7 +35,7 @@ bar (int i)
>      }
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%"
> { target { ! x32 } } } } */
> +/* { 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-not {\t(lfence|pause)} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
> index 536abfa74e4..3aba5e8c81f 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch(offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-linux* } } } } */
>  /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
>  /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
>  /* { dg-final { scan-assembler {\tpause} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
> index bd2b6246aa1..0f0181d6672 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
> @@ -11,7 +11,7 @@ male_indirect_jump (long offset)
>    dispatch[offset](offset);
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-linux* } } } } */
>  /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
>  /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
>  /* { dg-final { scan-assembler {\tpause} } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
> index 9885eebbcff..2eef6f35a75 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-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 } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
> index 7b3983949d2..e825a10f14c 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
> @@ -12,7 +12,7 @@ male_indirect_jump (long offset)
>    return 0;
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { ! x32 } } } } */
> +/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" {
> target { { ! x32 } && *-*-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 } } */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
> index cc592f89aba..c67066cf197 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
> @@ -35,7 +35,7 @@ bar (int i)
>      }
>  }
> 
> -/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%"
> { target { ! x32 } } } } */
> +/* { 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 "jmp\[ \t\]*\.LIND" } } */
>  /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> index b4f9d48065d..e6fea84a4d9 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> @@ -15,7 +15,7 @@ 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 } } } } */
> +/* { 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 } }  } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> index 0312577a043..e239ec4542f 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> @@ -15,7 +15,7 @@ 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 } } } } */
> +/* { 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 } }  } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
> index 7a08e71c76b..fd5b41fdd3f 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
> @@ -14,7 +14,7 @@ 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 } } } } */
> +/* { 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" } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
> index dacf0c769fc..d606373ead1 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
> @@ -16,7 +16,7 @@ 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 } } } } */
> +/* { 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 } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> index cf06a5f35c7..75e45e226b8 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> @@ -16,7 +16,7 @@ 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 } } } } */
> +/* { 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 } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> index 6da5ab97081..d1db41cc128 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> @@ -11,13 +11,12 @@ foo (void)
>  }
> 
>  /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
> -/* { dg-final { scan-assembler-not "__x86_return_thunk:" } } */
>  /* { 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 } } } } */
> +/* { 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 } } } } */
> --
> 2.14.3
> 
> 
> 
> -- 
> H.J.
H.J. Lu Jan. 15, 2018, 6:22 p.m. UTC | #2
On Mon, Jan 15, 2018 at 10:00 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> Hi Jan,
>>
>> Can you review this patch?  This blocks the GCC 7 backport.
>>
>> Thanks.
>>
>> H.J.
>>
>>
>> ---------- Forwarded message ----------
>> From: H.J. Lu <hjl.tools@gmail.com>
>> Date: Mon, Jan 15, 2018 at 8:45 AM
>> Subject: [PATCH] i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO
>> To: gcc-patches@gcc.gnu.org
>> Cc: Uros Bizjak <ubizjak@gmail.com>
>>
>>
>> ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
>> generate the __x86_return_thunk label, instead of the set directive.
>> Update testcase to remove the __x86_return_thunk label check.  Since
>> -fno-pic is ignored on Darwin, update testcases to sscan or "push"
>> only on Linux.
>>
>> Tested with a cross compiler to x86_64-apple-darwin10.4.0.  OK for
>> trunk?
>>
>> H.J.
>> ---
>> gcc/
>>
>>         PR target/83839
>>         * config/i386/i386.c (output_indirect_thunk_function): Use
>>         ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
>>         for  __x86.return_thunk.
>
> Hmm, we really ought to merge it with the way normal thunks are output from
> middle-end next stage1.
>
> OK
> Honza

I checked it in and opened:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83868

Thanks.
diff mbox series

Patch

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 5e4f845a1bd..bfb31db8752 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10970,7 +10970,6 @@  output_indirect_thunk_function (bool need_bnd_p, int regno)
       char alias[32];
 
       indirect_thunk_name (alias, regno, need_bnd_p, true);
-      ASM_OUTPUT_DEF (asm_out_file, alias, name);
 #if TARGET_MACHO
       if (TARGET_MACHO)
 	{
@@ -10979,8 +10978,10 @@  output_indirect_thunk_function (bool need_bnd_p, int regno)
 	  fputs ("\n\t.private_extern\t", asm_out_file);
 	  assemble_name (asm_out_file, alias);
 	  putc ('\n', asm_out_file);
+	  ASM_OUTPUT_LABEL (asm_out_file, alias);
 	}
 #else
+      ASM_OUTPUT_DEF (asm_out_file, alias, name);
       if (USE_HIDDEN_LINKONCE)
 	{
 	  fputs ("\t.globl\t", asm_out_file);
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
index 9eb9b273ade..60d09881a99 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch(offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
index c63795e4127..aac75163794 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch[offset](offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
index 82973cda771..9e24a385387 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
index a5f3d1cbed8..127b5d94523 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
index ebfb8aab937..17c2d0faf88 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
@@ -35,7 +35,7 @@  bar (int i)
     }
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
index a08022db8e4..9194ccf3cbc 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
@@ -14,7 +14,7 @@  male_indirect_jump (long offset)
   dispatch(offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
index b257c695ad1..e51f261a612 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   dispatch[offset](offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
index dfb1370d23d..4aeec1833cd 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
@@ -14,7 +14,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
 /* { dg-final { scan-assembler {\tpause} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
index a6e3f6f9f2b..ac0e5999f63 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
@@ -13,7 +13,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
 /* { dg-final { scan-assembler {\tpause} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
index 4bb1c5f9220..573cf1ef09e 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
@@ -14,7 +14,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
index 4e33a638862..b2b37fc6e2e 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
@@ -13,7 +13,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
index 427ba3ddbb4..4a43e199931 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
@@ -36,7 +36,7 @@  bar (int i)
     }
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */
+/* { 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-not {\t(lfence|pause)} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
index dc7143414fb..ac84ab623fa 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
@@ -10,7 +10,7 @@  foo (void)
   dispatch (buf);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
index 737c60946f6..ce655e8be1c 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
@@ -11,7 +11,7 @@  foo (void)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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" } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
index 5c20a35ecec..579441f250e 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch(offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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-not {\t(lfence|pause)} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
index b2fb6e1bcd2..c92e6f2b02d 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch[offset](offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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-not {\t(lfence|pause)} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
index 9c84547cd7c..d9964c25bbd 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
index 457849564bb..d4dca4dc5fe 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { 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 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
index d4747ea0764..aece9383697 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
@@ -35,7 +35,7 @@  bar (int i)
     }
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */
+/* { 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-not {\t(lfence|pause)} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
index 536abfa74e4..3aba5e8c81f 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch(offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
 /* { dg-final { scan-assembler {\tpause} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
index bd2b6246aa1..0f0181d6672 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
@@ -11,7 +11,7 @@  male_indirect_jump (long offset)
   dispatch[offset](offset);
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
 /* { dg-final { scan-assembler {\tpause} } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
index 9885eebbcff..2eef6f35a75 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-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 } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
index 7b3983949d2..e825a10f14c 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
@@ -12,7 +12,7 @@  male_indirect_jump (long offset)
   return 0;
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-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 } } */
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
index cc592f89aba..c67066cf197 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
@@ -35,7 +35,7 @@  bar (int i)
     }
 }
 
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */
+/* { 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 "jmp\[ \t\]*\.LIND" } } */
 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
index b4f9d48065d..e6fea84a4d9 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
@@ -15,7 +15,7 @@  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 } } } } */
+/* { 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 } }  } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
index 0312577a043..e239ec4542f 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
@@ -15,7 +15,7 @@  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 } } } } */
+/* { 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 } }  } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
index 7a08e71c76b..fd5b41fdd3f 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
@@ -14,7 +14,7 @@  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 } } } } */
+/* { 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" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
index dacf0c769fc..d606373ead1 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
@@ -16,7 +16,7 @@  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 } } } } */
+/* { 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 } } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
index cf06a5f35c7..75e45e226b8 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
@@ -16,7 +16,7 @@  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 } } } } */
+/* { 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 } } } */
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
index 6da5ab97081..d1db41cc128 100644
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
@@ -11,13 +11,12 @@  foo (void)
 }
 
 /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
-/* { dg-final { scan-assembler-not "__x86_return_thunk:" } } */
 /* { 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 } } } } */
+/* { 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 } } } } */