From 8246f28237a56f51e3277116ea1df4dc18aa04db Mon Sep 17 00:00:00 2001 From: Kit Barton Date: Wed, 25 Mar 2015 19:41:41 +0000 Subject: Add Hardware Transactional Memory (HTM) Support This patch adds Hardware Transaction Memory (HTM) support supported by ISA 2.07 (POWER8). The intrinsic support is based on GCC one [1], with both 'PowerPC HTM Low Level Built-in Functions' and 'PowerPC HTM High Level Inline Functions' implemented. Along with builtins a new driver switch is added to enable/disable HTM instruction support (-mhtm) and a header with common definitions (mostly to parse the TFHAR register value). The HTM switch also sets a preprocessor builtin HTM. The HTM usage requires a recently newer kernel with PPC HTM enabled. Tested on powerpc64 and powerpc64le. This is send along a llvm patch to enabled the builtins and option switch. [1] https://gcc.gnu.org/onlinedocs/gcc/PowerPC-Hardware-Transactional-Memory-Built-in-Functions.html Phabricator Review: http://reviews.llvm.org/D8248 llvm-svn: 233205 --- clang/include/clang/Basic/BuiltinsPPC.def | 31 +++++++++++++++++++++++++++++++ clang/include/clang/Driver/Options.td | 2 ++ 2 files changed, 33 insertions(+) (limited to 'clang/include') diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def index d7853bb8142..8cc50db39d6 100644 --- a/clang/include/clang/Basic/BuiltinsPPC.def +++ b/clang/include/clang/Basic/BuiltinsPPC.def @@ -252,6 +252,37 @@ BUILTIN(__builtin_vsx_xsmindp, "ddd", "") BUILTIN(__builtin_vsx_xvdivdp, "V2dV2dV2d", "") BUILTIN(__builtin_vsx_xvdivsp, "V4fV4fV4f", "") +// HTM builtins +BUILTIN(__builtin_tbegin, "UiUIi", "") +BUILTIN(__builtin_tend, "UiUIi", "") + +BUILTIN(__builtin_tabort, "UiUi", "") +BUILTIN(__builtin_tabortdc, "UiUiUiUi", "") +BUILTIN(__builtin_tabortdci, "UiUiUii", "") +BUILTIN(__builtin_tabortwc, "UiUiUiUi", "") +BUILTIN(__builtin_tabortwci, "UiUiUii", "") + +BUILTIN(__builtin_tcheck, "Ui", "") +BUILTIN(__builtin_treclaim, "UiUi", "") +BUILTIN(__builtin_trechkpt, "Ui", "") +BUILTIN(__builtin_tsr, "UiUi", "") + +BUILTIN(__builtin_tendall, "Ui", "") +BUILTIN(__builtin_tresume, "Ui", "") +BUILTIN(__builtin_tsuspend, "Ui", "") + +BUILTIN(__builtin_get_texasr, "LUi", "c") +BUILTIN(__builtin_get_texasru, "LUi", "c") +BUILTIN(__builtin_get_tfhar, "LUi", "c") +BUILTIN(__builtin_get_tfiar, "LUi", "c") + +BUILTIN(__builtin_set_texasr, "vLUi", "c") +BUILTIN(__builtin_set_texasru, "vLUi", "c") +BUILTIN(__builtin_set_tfhar, "vLUi", "c") +BUILTIN(__builtin_set_tfiar, "vLUi", "c") + +BUILTIN(__builtin_ttest, "LUi", "") + // FIXME: Obviously incomplete. #undef BUILTIN diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5a37a647129..ef9df81155a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1263,6 +1263,8 @@ def mpower8_crypto : Flag<["-"], "mcrypto">, Group; def mnopower8_crypto : Flag<["-"], "mno-crypto">, Group; +def mhtm : Flag<["-"], "mhtm">, Group; +def mno_htm : Flag<["-"], "mno-htm">, Group; def mfprnd : Flag<["-"], "mfprnd">, Group; def mno_fprnd : Flag<["-"], "mno-fprnd">, Group; def mcmpb : Flag<["-"], "mcmpb">, Group; -- cgit v1.2.3