> 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.
> 
> gcc/testsuite/
> 
>       * gcc.target/i386/indirect-thunk-1.c: New test.
>       * 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-attr-8.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.
> +
> +  /* 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.

Reply via email to