diff options
Diffstat (limited to 'libitm/config/s390/target.h')
-rw-r--r-- | libitm/config/s390/target.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/libitm/config/s390/target.h b/libitm/config/s390/target.h index a102e1e3d3d..580606f0270 100644 --- a/libitm/config/s390/target.h +++ b/libitm/config/s390/target.h @@ -22,6 +22,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ + +#include <htmintrin.h> + +/* Number of retries for transient failures. */ +#define _HTM_ITM_RETRIES 10 + namespace GTM HIDDEN { #define HW_CACHELINE_SIZE 256 @@ -52,4 +58,57 @@ cpu_relax (void) __asm volatile ("" : : : "memory"); } +#ifdef __HTM__ +#define USE_HTM_FASTPATH + +static inline bool +htm_available () +{ + return true; +} + +static inline uint32_t +htm_init () +{ + return htm_available () ? _HTM_ITM_RETRIES : 0; +} + +static inline uint32_t +htm_begin () +{ + return __builtin_tbegin_nofloat (NULL); +} + +static inline bool +htm_begin_success (uint32_t begin_ret) +{ + return begin_ret == _HTM_TBEGIN_STARTED; +} + +static inline void +htm_commit () +{ + __builtin_tend (); +} + +static inline void +htm_abort () +{ + __builtin_tabort (_HTM_FIRST_USER_ABORT_CODE); +} + +static inline bool +htm_abort_should_retry (uint32_t begin_ret) +{ + return begin_ret == _HTM_TBEGIN_TRANSIENT; +} + +static inline bool +htm_transaction_active () +{ + return __builtin_tx_nesting_depth() != 0; +} + +#endif + } // namespace GTM |