> Hello.
> 
> The patch is small clean-up of retpoline stuff. I know that H.J. is planning
> to introduce an option driving which retpoline loop filler is selected.
> Hopefully the suggested patch clarifies current default selection of
> the filler.
> 
> Patch survives make check -k -j10 RUNTESTFLAGS="i386.exp".
> 
> Ready to install?
> Thanks,
> Martin
> 
> 
> gcc/ChangeLog:
> 
> 2018-01-18  Martin Liska  <mli...@suse.cz>
> 
>       * config/i386/i386.c (indirect_thunk_name): Document that also
>       lfence is emitted.
>       (output_indirect_thunk): Document why both instructions
>       (pause and lfence) are generated.

OK,
thanks!
Honza
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-01-18  Martin Liska  <mli...@suse.cz>
> 
>       * gcc.target/i386/indirect-thunk-3.c: Remove duplicate options.
>       * gcc.target/i386/indirect-thunk-4.c: Likewise.
>       * gcc.target/i386/indirect-thunk-6.c: Likewise.
>       * gcc.target/i386/indirect-thunk-bnd-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-15.c: Likewise.
>       * gcc.target/i386/ret-thunk-9.c: Likewise.
> ---
>  gcc/config/i386/i386.c                               | 5 ++++-
>  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-6.c     | 2 +-
>  gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.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-12.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-15.c         | 2 +-
>  gcc/testsuite/gcc.target/i386/ret-thunk-9.c          | 2 +-
>  10 files changed, 13 insertions(+), 10 deletions(-)
> 
> 

> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index cb0f4ed5e6a..72d25ae4f72 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -10826,6 +10826,7 @@ indirect_thunk_name (char name[32], unsigned int 
> regno,
>       call    L2
>     L1:
>       pause
> +     lfence
>       jmp     L1
>     L2:
>       mov     %REG, (%sp)
> @@ -10837,6 +10838,7 @@ indirect_thunk_name (char name[32], unsigned int 
> regno,
>       call L2
>    L1:
>       pause
> +     lfence
>       jmp L1
>    L2:
>       lea WORD_SIZE(%sp), %sp
> @@ -10864,7 +10866,8 @@ output_indirect_thunk (bool need_bnd_p, unsigned int 
> regno)
>  
>    ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
>  
> -  /* Pause + lfence.  */
> +  /* AMD and Intel CPUs prefer each a different instruction as loop filler.
> +     Usage of both pause + lfence is compromise solution.  */
>    fprintf (asm_out_file, "\tpause\n\tlfence\n");
>  
>    /* Jump.  */
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c 
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> index 9e24a385387..dab7ac2ef25 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -mindirect-branch=thunk -fno-pic" } */
>  
>  typedef void (*dispatch_t)(long offset);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c 
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> index 127b5d94523..44cc5f52f45 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -mindirect-branch=thunk -fno-pic" } */
>  
>  typedef void (*dispatch_t)(long offset);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c 
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> index e4649283d10..1490f5336ca 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile { target *-*-linux* } } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -fpic -fno-plt -mindirect-branch=thunk" } */
>  
>  extern void bar (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c 
> b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> index 0e19830de4d..a5fc4a23351 100644
> --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk 
> -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */
>  
>  void bar (char *);
>  char buf[10];
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c 
> b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> index e6fea84a4d9..6de9b8c9f4f 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=thunk-inline 
> -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register 
> -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c 
> b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> index e239ec4542f..36598037541 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=thunk-extern 
> -mindirect-branch=thunk -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register 
> -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c 
> b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> index fa3181303c9..5fb1a4de776 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk 
> -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c 
> b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> index 75e45e226b8..2038644aa59 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep 
> -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep 
> -mindirect-branch=keep -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c 
> b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> index d1db41cc128..d34dd4e6dc7 100644
> --- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -mno-indirect-branch-register 
> -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk 
> -fno-pic" } */
> +/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=thunk 
> -mindirect-branch=thunk -fno-pic" } */
>  
>  extern void (*bar) (void);
>  
> 

Reply via email to