htmintrin.h revision 6bdbd720989797e8a53237ef3ef213c4114f869
16bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*===---- htmintrin.h - Standard header for PowerPC HTM ---------------===*\ 26bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 36bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * Permission is hereby granted, free of charge, to any person obtaining a copy 46bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * of this software and associated documentation files (the "Software"), to deal 56bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * in the Software without restriction, including without limitation the rights 66bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 76bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * copies of the Software, and to permit persons to whom the Software is 86bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * furnished to do so, subject to the following conditions: 96bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * The above copyright notice and this permission notice shall be included in 116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * all copies or substantial portions of the Software. 126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * THE SOFTWARE. 206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*===----------------------------------------------------------------------===*/ 226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifndef __HTMINTRIN_H 246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __HTMINTRIN_H 256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifndef __HTM__ 276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#error "HTM instruction set not enabled" 286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __powerpc__ 316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#include <stdint.h> 336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickertypedef uint64_t texasr_t; 356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickertypedef uint32_t texasru_t; 366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickertypedef uint32_t texasrl_t; 376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickertypedef uintptr_t tfiar_t; 386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickertypedef uintptr_t tfhar_t; 396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_STATE(CR0) ((CR0 >> 1) & 0x3) 416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_NONTRANSACTIONAL 0x0 426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_SUSPENDED 0x1 436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_TRANSACTIONAL 0x2 446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \ 466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker (((TEXASR) >> (63-(BITNUM))) & ((1<<(SIZE))-1)) 476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \ 486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker (((TEXASR) >> (31-(BITNUM))) & ((1<<(SIZE))-1)) 496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_FAILURE_CODE(TEXASR) \ 516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 7, 8) 526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_FAILURE_CODE(TEXASRU) \ 536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 8) 546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_FAILURE_PERSISTENT(TEXASR) \ 566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 7, 1) 576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_FAILURE_PERSISTENT(TEXASRU) \ 586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 1) 596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_DISALLOWED(TEXASR) \ 616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 8, 1) 626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_DISALLOWED(TEXASRU) \ 636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 8, 1) 646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_NESTING_OVERFLOW(TEXASR) \ 666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 9, 1) 676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_NESTING_OVERFLOW(TEXASRU) \ 686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 9, 1) 696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_FOOTPRINT_OVERFLOW(TEXASR) \ 716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 10, 1) 726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_FOOTPRINT_OVERFLOW(TEXASRU) \ 736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 10, 1) 746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_SELF_INDUCED_CONFLICT(TEXASR) \ 766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 11, 1) 776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_SELF_INDUCED_CONFLICT(TEXASRU) \ 786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 11, 1) 796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_NON_TRANSACTIONAL_CONFLICT(TEXASR) \ 816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 12, 1) 826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_NON_TRANSACTIONAL_CONFLICT(TEXASRU) \ 836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 12, 1) 846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_TRANSACTION_CONFLICT(TEXASR) \ 866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 13, 1) 876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_TRANSACTION_CONFLICT(TEXASRU) \ 886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 13, 1) 896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_TRANSLATION_INVALIDATION_CONFLICT(TEXASR) \ 916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 14, 1) 926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_TRANSLATION_INVALIDATION_CONFLICT(TEXASRU) \ 936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 14, 1) 946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_IMPLEMENTAION_SPECIFIC(TEXASR) \ 966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 15, 1) 976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_IMPLEMENTAION_SPECIFIC(TEXASRU) \ 986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 15, 1) 996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_INSTRUCTION_FETCH_CONFLICT(TEXASR) \ 1016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 16, 1) 1026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_INSTRUCTION_FETCH_CONFLICT(TEXASRU) \ 1036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 16, 1) 1046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_ABORT(TEXASR) \ 1066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 31, 1) 1076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASRU_ABORT(TEXASRU) \ 1086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASRU_EXTRACT_BITS(TEXASRU, 31, 1) 1096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_SUSPENDED(TEXASR) \ 1126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 32, 1) 1136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_PRIVILEGE(TEXASR) \ 1156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 35, 2) 1166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_FAILURE_SUMMARY(TEXASR) \ 1186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 36, 1) 1196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_TFIAR_EXACT(TEXASR) \ 1216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 37, 1) 1226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_ROT(TEXASR) \ 1246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 38, 1) 1256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _TEXASR_TRANSACTION_LEVEL(TEXASR) \ 1276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker _TEXASR_EXTRACT_BITS(TEXASR, 63, 12) 1286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* __powerpc */ 1306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __s390__ 1326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* Condition codes generated by tbegin */ 1346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_TBEGIN_STARTED 0 1356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_TBEGIN_INDETERMINATE 1 1366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_TBEGIN_TRANSIENT 2 1376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_TBEGIN_PERSISTENT 3 1386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* The abort codes below this threshold are reserved for machine use. */ 1406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _HTM_FIRST_USER_ABORT_CODE 256 1416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* The transaction diagnostic block is it is defined in the Principles 1436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker of Operation chapter 5-91. */ 1446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstruct __htm_tdb { 1466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char format; /* 0 */ 1476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char flags; 1486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char reserved1[4]; 1496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned short nesting_depth; 1506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long abort_code; /* 8 */ 1516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long conflict_token; /* 16 */ 1526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long atia; /* 24 */ 1536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char eaid; /* 32 */ 1546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char dxc; 1556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char reserved2[2]; 1566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned int program_int_id; 1576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long exception_id; /* 40 */ 1586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long bea; /* 48 */ 1596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char reserved3[72]; /* 56 */ 1606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long long gprs[16]; /* 128 */ 1616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} __attribute__((__packed__, __aligned__ (8))); 1626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* Helper intrinsics to retry tbegin in case of transient failure. */ 1656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline int __attribute__((__always_inline__, __nodebug__)) 1676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__builtin_tbegin_retry_null (int __retry) 1686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker{ 1696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker int cc, i = 0; 1706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker while ((cc = __builtin_tbegin(0)) == _HTM_TBEGIN_TRANSIENT 1726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker && i++ < __retry) 1736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tx_assist(i); 1746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return cc; 1766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 1776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline int __attribute__((__always_inline__, __nodebug__)) 1796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__builtin_tbegin_retry_tdb (void *__tdb, int __retry) 1806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker{ 1816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker int cc, i = 0; 1826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker while ((cc = __builtin_tbegin(__tdb)) == _HTM_TBEGIN_TRANSIENT 1846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker && i++ < __retry) 1856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tx_assist(i); 1866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return cc; 1886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 1896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __builtin_tbegin_retry(tdb, retry) \ 1916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker (__builtin_constant_p(tdb == 0) && tdb == 0 ? \ 1926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tbegin_retry_null(retry) : \ 1936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tbegin_retry_tdb(tdb, retry)) 1946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 1956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline int __attribute__((__always_inline__, __nodebug__)) 1966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__builtin_tbegin_retry_nofloat_null (int __retry) 1976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker{ 1986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker int cc, i = 0; 1996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker while ((cc = __builtin_tbegin_nofloat(0)) == _HTM_TBEGIN_TRANSIENT 2016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker && i++ < __retry) 2026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tx_assist(i); 2036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return cc; 2056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 2066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline int __attribute__((__always_inline__, __nodebug__)) 2086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__builtin_tbegin_retry_nofloat_tdb (void *__tdb, int __retry) 2096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker{ 2106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker int cc, i = 0; 2116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker while ((cc = __builtin_tbegin_nofloat(__tdb)) == _HTM_TBEGIN_TRANSIENT 2136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker && i++ < __retry) 2146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tx_assist(i); 2156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return cc; 2176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 2186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __builtin_tbegin_retry_nofloat(tdb, retry) \ 2206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker (__builtin_constant_p(tdb == 0) && tdb == 0 ? \ 2216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tbegin_retry_nofloat_null(retry) : \ 2226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __builtin_tbegin_retry_nofloat_tdb(tdb, retry)) 2236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* __s390__ */ 2256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 2266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* __HTMINTRIN_H */ 227