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.

jeff

Reply via email to