This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000, libitm] Enable Hardware Transactional Memory (HTM) support on Power


On Mon, Jul 1, 2013 at 11:12 PM, Peter Bergner <bergner@vnet.ibm.com> wrote:
> On May 10th, the Power Architecture Advisory Council announced the public
> availability of Power ISA 2.07.
>
>   https://www.power.org/documentation/power-isa-version-2-07/
>
> This patch adds support for Hardware Transactional Memory (HTM) builtins
> as well as a header file that implements a set of builtin like functions
> that provides compatibility with the IBM XL compiler on both Power and
> S390.
>
> The GCC builtins are used to implement the HTM fast path support within libitm.
> All libitm test cases succeed with this patch applied.
>
> This patch bootstraps and regtests with no regressions on powerpc64-linux
> (running the testsuite in both 32-bit and 64-bit modes).
>
> Is this ok for trunk?
>
> Peter
>
>
> libitm/
>         * acinclude.m4 (LIBITM_CHECK_AS_HTM): New.
>         * configure.ac: Use it.
>         (AC_CHECK_HEADERS): Check for sys/auxv.h.
>         (AC_CHECK_FUNCS): Check for getauxval.
>         * config.h.in, configure: Rebuild.
>         * configure.tgt (target_cpu): Add -mhtm to XCFLAGS.
>         * config/powerpc/target.h: Include sys/auxv.h and htmintrin.h.
>         (USE_HTM_FASTPATH): Define.
>         (_TBEGIN_STARTED, _TBEGIN_INDETERMINATE, _TBEGIN_PERSISTENT,
>         _HTM_RETRIES) New macros.
>         (htm_abort, htm_abort_should_retry, htm_available, htm_begin, htm_init,
>         htm_begin_success, htm_commit, htm_transaction_active): New functions.
>
> gcc/
>         * config.gcc (powerpc*-*-*): Install htmintrin.h and htmxlintrin.h.
>         * config/rs6000/t-rs6000 (MD_INCLUDES): Add htm.md.
>         * config/rs6000/rs6000.opt: Add -mhtm option.
>         * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add OPTION_MASK_HTM.
>         (ISA_2_7_MASKS_SERVER): Add OPTION_MASK_HTM.
>         * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
>         __HTM__ if the HTM instructions are available.
>         * config/rs6000/predicates.md (u3bit_cint_operand, u10bit_cint_operand,
>         htm_spr_reg_operand): New define_predicates.
>         * config/rs6000/rs6000.md (define_attr "type"): Add htm.
>         (TFHAR_REGNO, TFIAR_REGNO, TEXASR_REGNO): New define_constants.
>         Include htm.md.
>         * config/rs6000/rs6000-builtin.def (BU_HTM_0, BU_HTM_1, BU_HTM_2,
>         BU_HTM_3, BU_HTM_SPR0, BU_HTM_SPR1): Add support macros for defining
>         HTM builtin functions.
>         * config/rs6000/rs6000.c (RS6000_BUILTIN_H): New macro.
>         (rs6000_reg_names, alt_reg_names): Add HTM SPR register names.
>         (rs6000_init_hard_regno_mode_ok): Add support for HTM instructions.
>         (rs6000_builtin_mask_calculate): Likewise.
>         (rs6000_option_override_internal): Likewise.
>         (bdesc_htm): Add new HTM builtin support.
>         (htm_spr_num): New function.
>         (htm_spr_regno): Likewise.
>         (rs6000_htm_spr_icode): Likewise.
>         (htm_expand_builtin): Likewise.
>         (htm_init_builtins): Likewise.
>         (rs6000_expand_builtin): Add support for HTM builtin functions.
>         (rs6000_init_builtins): Likewise.
>         (rs6000_invalid_builtin, rs6000_opt_mask): Add support for -mhtm option.
>         * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add support for -mhtm.
>         (TARGET_HTM, MASK_HTM): Define macros.
>         (FIRST_PSEUDO_REGISTER): Adjust for new HTM SPR registers.
>         (FIXED_REGISTERS): Likewise.
>         (CALL_USED_REGISTERS): Likewise.
>         (CALL_REALLY_USED_REGISTERS): Likewise.
>         (REG_ALLOC_ORDER): Likewise.
>         (enum reg_class): Likewise.
>         (REG_CLASS_NAMES): Likewise.
>         (REG_CLASS_CONTENTS): Likewise.
>         (REGISTER_NAMES): Likewise.
>         (ADDITIONAL_REGISTER_NAMES): Likewise.
>         (RS6000_BTC_SPR, RS6000_BTC_VOID, RS6000_BTC_32BIT, RS6000_BTC_64BIT,
>         RS6000_BTC_MISC_MASK, RS6000_BTM_HTM): New macros.
>         (RS6000_BTM_COMMON): Add RS6000_BTM_HTM.
>         * config/rs6000/htm.md: New file.
>         * config/rs6000/htmintrin.h: New file.
>         * config/rs6000/htmxlintrin.h: New file.
>
> gcc/testsuite/
>         * lib/target-supports.exp (check_effective_target_powerpc_htm_ok): New
>         function to test if HTM is available.
>         * gcc.target/powerpc/htm-xl-intrin-1.c: New test.
>         * gcc.target/powerpc/htm-builtin-1.c: New test.

The rs6000 parts generally are okay.

The expanders in htm.md should not include constraint letters.

htm_mfpr / htm_mtspr seem half generalized, but I guess the
specialized interaction with the HTM SPR regnos requires that it be
specialized.

Thanks, David

P.S. For large patches, it is better to include the ChangeLog in the
body and attach the patch itself.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]