On 16 May 13:39, Jeff Law wrote: > On 04/16/14 05:35, Ilya Enkovich wrote: > >Hi, > > > >This patch introduces Intel MPX bound registers and instructions. It was > >approved earlier for 4.9 and had no significant changes since then. I'll > >assume patch is OK if no objections arise. > > > >Patch was bootstrapped and tested for linux-x86_64. > > > >Thanks, > >Ilya > >-- > >gcc/ > > > >2014-04-16 Ilya Enkovich <ilya.enkov...@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. > Are parts of this patch missing? > > The ChangeLog references several changes in the machine independent > parts of GCC, but I don't see them. I can recall what they look > like, but for sanity's sake, I think this patch needs to be > reposted. It's likely OK, but let's do the right thing.
It seems to be a very old ChangeLog version. Thanks for noticing this. Here is an updated one. No changes in the patch. Ilya -- gcc/ 2014-05-19 Ilya Enkovich <ilya.enkov...@intel.com> * config/i386/constraints.md (B): New. (Ti): New. (Tb): New. * config/i386/i386-c.c (ix86_target_macros_internal): Add __MPX__. * config/i386/i386-modes.def (BND32): New. (BND64): New. * config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): New. * config/i386/i386.c (regclass_map): Add bound registers. (dbx_register_map): Likewise. (dbx64_register_map): Likewise. (svr4_dbx_register_map): Likewise. (isa_opts): Add -mmpx. (PTA_MPX): New. (ix86_option_override_internal): Support MPX ISA. (ix86_conditional_register_usage): Support bound registers. (ix86_code_end): Add MPX bnd prefix. (output_set_got): Likewise. (print_reg): Avoid prefixes for bound registers. (ix86_print_operand): Add '!' (MPX bnd) print prefix support. (ix86_print_operand_punct_valid_p): Likewise. (ix86_print_operand_address): Support UNSPEC_BNDMK_ADDR and UNSPEC_BNDLDX_ADDR. (ix86_output_call_insn): Add MPX bnd prefix to branch instructions. (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 (TARGET_MPX): New. (TARGET_MPX_P): New. (FIRST_PSEUDO_REGISTER): Fix to new value. (FIXED_REGISTERS): Add bound registers. (CALL_USED_REGISTERS): Likewise. (REG_ALLOC_ORDER): Likewise. (HARD_REGNO_NREGS): Likewise. (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): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (prefix_rep): Check for bnd prefix. (prefix_0f): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (length_nobnd): New. (length): Use length_nobnd when specified. (memory): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (BND): New. (bnd_ptr): New. (BNDCHECK): New. (bndcheck): New. (*jcc_1): Add MPX bnd prefix. (*jcc_2): Likewise. (jump): Likewise. (*indirect_jump): Likewise. (*tablejump_1): Likewise. (simple_return_internal): Likewise. (simple_return_internal_long): Likewise. (simple_return_pop_internal): 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 (address_mpx_no_base_operand): New. (address_mpx_no_index_operand): New. (bnd_mem_operator): New. * config/i386/i386.opt (mmpx): New. * doc/rtl.texi (BND32mode): New. (BND64mode): New. * doc/invoke.texi (-mmpx): New. (-mno-mpx): New. > > jeff >