On 2018.01.14 at 11:46 +0100, Jan Hubicka wrote:
> > gcc/
> >
> >     * config/i386/i386-opts.h (indirect_branch): New.
> >     * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise.
> >     * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone
> >     with local indirect jump when converting indirect call and jump.
> >     (ix86_set_indirect_branch_type): New.
> >     (ix86_set_current_function): Call ix86_set_indirect_branch_type.
> >     (indirectlabelno): New.
> >     (indirect_thunk_needed): Likewise.
> >     (indirect_thunk_bnd_needed): Likewise.
> >     (indirect_thunks_used): Likewise.
> >     (indirect_thunks_bnd_used): Likewise.
> >     (INDIRECT_LABEL): Likewise.
> >     (indirect_thunk_name): Likewise.
> >     (output_indirect_thunk): Likewise.
> >     (output_indirect_thunk_function): Likewise.
> >     (ix86_output_indirect_branch): Likewise.
> >     (ix86_output_indirect_jmp): Likewise.
> >     (ix86_code_end): Call output_indirect_thunk_function if needed.
> >     (ix86_output_call_insn): Call ix86_output_indirect_branch if
> >     needed.
> >     (ix86_handle_fndecl_attribute): Handle indirect_branch.
> >     (ix86_attribute_table): Add indirect_branch.
> >     * config/i386/i386.h (machine_function): Add indirect_branch_type
> >     and has_local_indirect_jump.
> >     * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump
> >     to true.
> >     (tablejump): Likewise.
> >     (*indirect_jump): Use ix86_output_indirect_jmp.
> >     (*tablejump_1): Likewise.
> >     (simple_return_indirect_internal): Likewise.
> >     * config/i386/i386.opt (mindirect-branch=): New option.
> >     (indirect_branch): New.
> >     (keep): Likewise.
> >     (thunk): Likewise.
> >     (thunk-inline): Likewise.
> >     (thunk-extern): Likewise.
> >     * doc/extend.texi: Document indirect_branch function attribute.
> >     * doc/invoke.texi: Document -mindirect-branch= option.
> > +
> > +  /* Pause .  */
> > +  fprintf (asm_out_file, "\tpause\n");
>
> OK, but please prepare incremental patches to choose between pause and lefence
> as needed for AMD CPUs and check for large code model.

Why not use both? That would make everybody happy, no?

 pause
 lfence
 jmp

-- 
Markus

Reply via email to