> 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
Yes, according to my understanding we want both pause and lefence by default (it is expensive anyway) + command line option to control which one to use? Probably thus the first patch should default to both. Honza > > -- > Markus