On Fri, Sep 13, 2013 at 12:18 PM, Ilya Enkovich <enkovich....@gmail.com> wrote: > 2013/9/11 Uros Bizjak <ubiz...@gmail.com>: >> On Tue, Sep 10, 2013 at 1:38 PM, Ilya Enkovich <enkovich....@gmail.com> >> wrote: >>> Ping^4 >>> >>> Could please someone look at this patch? It is mostly i386 target >>> specific and is basic for further MPX based features. >>> >>> Thanks, >>> Ilya >>> >>> 2013/9/2 Ilya Enkovich <enkovich....@gmail.com>: >>>> Ping^3 >>>> >>>> Attached is the same patch but against the current trunk. >>>> >>>> 2013/8/26 Ilya Enkovich <enkovich....@gmail.com>: >>>>> Ping >>>>> >>>>> 2013/8/19 Ilya Enkovich <enkovich....@gmail.com>: >>>>>> Ping >>>>>> >>>>>> 2013/8/12 Ilya Enkovich <enkovich....@gmail.com>: >>>>>>> 2013/8/10 Joseph S. Myers <jos...@codesourcery.com>: >>>>>>>> On Mon, 29 Jul 2013, Ilya Enkovich wrote: >>>>>>>> >>>>>>>>> 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). >>>>>>>> >>>>>>>> I think the -mmpx option should be documented in invoke.texi, and the >>>>>>>> new >>>>>>>> machine modes / mode class should be documented in rtl.texi where other >>>>>>>> machine modes / mode classes are documented. Beyond that, I have no >>>>>>>> comments on this patch revision. >>>>>>>> >>>>>>>> -- >>>>>>>> Joseph S. Myers >>>>>>>> jos...@codesourcery.com >>>>>>> >>>>>>> Thanks! Here is a new revision with -mmpx and new machine modes / >>>>>>> class documented. >>>>>>> Is it good to install to trunk? >>>>>>> >>>>>>> Thanks, >>>>>>> Ilya >>>>>>> --- >>>>>>> 2013-08-12 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. >>>>>>> * doc/invoke.texi: Add documentation for the flags -mmpx, >>>>>>> -mno-mpx. >>>>>>> * doc/rtl.texi (BND32mode): New. >>>>>>> (BND64mode): New. >>>>>>> (MODE_BOUND): New. >> > > Hi Uros, > > Thanks a lot for the review! > >> The x86 part looks mostly OK (I have a couple of comments bellow), but >> please first get target-independent changes reviewed and committed. > > Do you mean I should move bound type and mode declaration into a separate > patch?
Yes, target-independent part (middle end) has to go through the separate review to check if this part is OK. The target-dependent part uses the infrastructure from the middle end, so it can go into the code base only after target-independent parts are committed. Uros.