This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, i386, MPX 1/X] Support of Intel MPX ISA
- From: Ilya Enkovich <enkovich dot gnu at gmail dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, Uros Bizjak <ubizjak at gmail dot com>, Jakub Jelinek <jakub at redhat dot com>, Areg Melik-Adamyan <areg dot melikadamyan at gmail dot com>
- Date: Fri, 2 Aug 2013 14:08:27 +0400
- Subject: Re: [PATCH, i386, MPX 1/X] Support of Intel MPX ISA
- References: <CAMbmDYZdrR8t66VtNPFxbz33mMX0M-tMj_Bv=uvrejui_YnVWg at mail dot gmail dot com> <Pine dot LNX dot 4 dot 64 dot 1307242237420 dot 5307 at digraph dot polyomino dot org dot uk> <CAMbmDYbNvPh8MiJkgx29Hc+d_czzLeFuxeG4uDz_AozqX3j1cg at mail dot gmail dot com> <Pine dot LNX dot 4 dot 64 dot 1307251415290 dot 18813 at digraph dot polyomino dot org dot uk> <CAMbmDYamg+jwEY6FiZ_+_DT8nqug58Gi5Nf2PSDZ26Bi17K5=A at mail dot gmail dot com>
Hi All,
I've updated MPX Wiki page
(http://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler).
I added instrumentation description, programming model description,
differences with other checkers, implementation details.
What about the first patch? Should I post next patches in the series?
Thanks,
Ilya
2013/7/29 Ilya Enkovich <enkovich.gnu@gmail.com>:
> Hi,
>
> Here is updated version of the patch. I removed redundant
> mode_for_bound, added comments to BOUND_TYPE and added -mmpx option.
> I also fixed bndmk/bndldx/bndstx constraints to avoid incorrect
> register allocation (created two new constraints for that).
>
> Thanks,
> Ilya
>
> ---
> 2013-07-29 Ilya Enkovich <ilya.enkovich@intel.com>
>
> * mode-classes.def (MODE_BOUND): New.
> * tree.def (BOUND_TYPE): New.
> * genmodes.c (complete_mode): Support MODE_BOUND.
> (BOUND_MODE): New.
> (make_bound_mode): New.
> * machmode.h (BOUND_MODE_P): New.
> * stor-layout.c (int_mode_for_mode): Support MODE_BOUND.
> (layout_type): Support BOUND_TYPE.
> * tree-pretty-print.c (dump_generic_node): Support BOUND_TYPE.
> * tree.c (build_int_cst_wide): Support BOUND_TYPE.
> (type_contains_placeholder_1): Likewise.
> * tree.h (BOUND_TYPE_P): New.
> * varasm.c (output_constant): Support BOUND_TYPE.
> * config/i386/constraints.md (B): New.
> (Ti): New.
> (Tb): New.
> * config/i386/i386-modes.def (BND32): New.
> (BND64): New.
> * config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): New.
> * config/i386/i386.c (isa_opts): Add mmpx.
> (regclass_map): Add bound registers.
> (dbx_register_map): Likewise.
> (dbx64_register_map): Likewise.
> (svr4_dbx_register_map): Likewise.
> (PTA_MPX): New.
> (ix86_option_override_internal) Support MPX ISA.
> (ix86_code_end): Add MPX bnd prefix.
> (output_set_got): Likewise.
> (ix86_output_call_insn): Likewise.
> (get_some_local_dynamic_name): Add '!' (MPX bnd) print prefix support.
> (ix86_print_operand_punct_valid_p): Likewise.
> (ix86_print_operand_address): Support UNSPEC_BNDMK_ADDR and
> UNSPEC_BNDMK_ADDR.
> (ix86_class_likely_spilled_p): Add bound regs support.
> (ix86_hard_regno_mode_ok): Likewise.
> (x86_order_regs_for_local_alloc): Likewise.
> (ix86_bnd_prefixed_insn_p): New.
> * config/i386/i386.h (FIRST_PSEUDO_REGISTER): Fix to new value.
> (FIXED_REGISTERS): Add bound registers.
> (CALL_USED_REGISTERS): Likewise.
> (REG_ALLOC_ORDER): Likewise.
> (HARD_REGNO_NREGS): Likewise.
> (TARGET_MPX): New.
> (VALID_BND_REG_MODE): New.
> (FIRST_BND_REG): New.
> (LAST_BND_REG): New.
> (reg_class): Add BND_REGS.
> (REG_CLASS_NAMES): Likewise.
> (REG_CLASS_CONTENTS): Likewise.
> (BND_REGNO_P): New.
> (ANY_BND_REG_P): New.
> (BNDmode): New.
> (HI_REGISTER_NAMES): Add bound registers.
> * config/i386/i386.md (UNSPEC_BNDMK): New.
> (UNSPEC_BNDMK_ADDR): New.
> (UNSPEC_BNDSTX): New.
> (UNSPEC_BNDLDX): New.
> (UNSPEC_BNDLDX_ADDR): New.
> (UNSPEC_BNDCL): New.
> (UNSPEC_BNDCU): New.
> (UNSPEC_BNDCN): New.
> (UNSPEC_MPX_FENCE): New.
> (BND0_REG): New.
> (BND1_REG): New.
> (type): Add mpxmov, mpxmk, mpxchk, mpxld, mpxst.
> (length_immediate): Likewise.
> (prefix_0f): Likewise.
> (memory): Likewise.
> (prefix_rep): Check for bnd prefix.
> (BND): New.
> (bnd_ptr): New.
> (BNDCHECK): New.
> (bndcheck): New.
> (*jcc_1): Add MPX bnd prefix and fix length.
> (*jcc_2): Likewise.
> (jump): Likewise.
> (simple_return_internal): Likewise.
> (simple_return_pop_internal): Likewise.
> (*indirect_jump): Add MPX bnd prefix.
> (*tablejump_1): Likewise.
> (simple_return_internal_long): Likewise.
> (simple_return_indirect_internal): Likewise.
> (<mode>_mk): New.
> (*<mode>_mk): New.
> (mov<mode>): New.
> (*mov<mode>_internal_mpx): New.
> (<mode>_<bndcheck>): New.
> (*<mode>_<bndcheck>): New.
> (<mode>_ldx): New.
> (*<mode>_ldx): New.
> (<mode>_stx): New.
> (*<mode>_stx): New.
> * config/i386/predicates.md (lea_address_operand) Rename to...
> (address_no_seg_operand): ... this.
> (address_mpx_no_base_operand): New.
> (address_mpx_no_index_operand): New.
> (bnd_mem_operator): New.
> * config/i386/i386.opt (mmpx): New.