6.60.30 Встроенные функции S/390 System z ¶
-
Встроенная функция:
int__builtin_tbegin(void*)¶ Генерирует
tbeginмашинный код, начинающий не-ограниченную аппаратную транзакцию. Если параметр не NULL, область памяти используется для хранения буфера диагностики транзакции и будет передана в качестве первого операндаtbegin. Этот буфер может быть определён с помощьюstruct __htm_tdbструктуры C, определённой вhtmintrin.h, и должен располагаться на границе двойного слова. Второй операнд tbegin установлен в0xff0c. Это позволяет сохранять/восстанавливать все GPR и отключает аборты для манипуляций с FPR и AR внутри тела транзакции. Код состояния, установленный инструкцией tbegin, возвращается в виде целочисленного значения. Инструкция tbegin по определению перезаписывает содержимое всех FPR. Компилятор сгенерирует код, который сохраняет и восстанавливает FPR. Для кода с плавающей точкой рекомендуется использовать*_nofloatвариант. Для предотвращения записи TDB необходимо передать постоянное нулевое значение в качестве параметра. Передача нулевого значения через переменную недостаточно. Хотя изменения регистров доступа внутри транзакции не вызовут её аборта, их непосредственное изменение не поддерживается. Регистры доступа не сохраняются при входе в транзакцию. Они будут иметь неопределённое состояние при достижении кода аборта.
Макросы для возможных кодов возврата tbegin определены в файле заголовка htmintrin.h:
_HTM_TBEGIN_STARTEDtbeginвыполнена как часть нормальной обработки. Тело транзакции должно быть выполнено._HTM_TBEGIN_INDETERMINATEТранзакция была прервана из-за неопределённого состояния, которое может быть постоянным.
_HTM_TBEGIN_TRANSIENTТранзакция прервана из-за временного сбоя. В этом случае транзакция должна быть повторно выполнена.
_HTM_TBEGIN_PERSISTENTТранзакция прервана из-за постоянного сбоя. Повторное выполнение в тех же условиях не будет эффективным.
- Макрос: _HTM_FIRST_USER_ABORT_CODE ¶
_HTM_FIRST_USER_ABORT_CODEопределённый вhtmintrin.h, указывает первый код аборта, который можно использовать для__builtin_tabort. Значения ниже этого порога зарезервированы для использования машиной.
- Тип данных: struct __htm_tdb ¶
struct __htm_tdbопределённый вhtmintrin.h, описывает структуру блока диагностики транзакции, как указано в главе 5-91 Руководства по принципам работы.
-
Встроенная функция:
int__builtin_tbegin_nofloat(void*)¶ То же, что и
__builtin_tbegin, но без сохранения и восстановления FPR. Использование этого варианта в коде, использующем FPR, оставит FPR в неопределённом состоянии при входе в обработчик абортов транзакции.
-
Встроенная функция:
int__builtin_tbegin_retry(void*, int)¶ В дополнение к
__builtin_tbeginгенерируется цикл для временных ошибок. Если tbegin возвращает код состояния 2, транзакция будет повторно выполнена столько раз, сколько указано во втором аргументе. Для указания процессору числа неудачных попыток используется инструкция процессорной помощи.
-
Встроенная функция:
int__builtin_tbegin_retry_nofloat(void*, int)¶ То же, что и
__builtin_tbegin_retry, но без сохранения и восстановления FPR. Использование этого варианта в коде, использующем FPR, оставит FPR в неопределённом состоянии при входе в обработчик абортов транзакции.
-
Встроенная функция:
void__builtin_tbeginc(void)¶ Генерирует
tbegincмашинный код, начинающий ограниченную аппаратную транзакцию. Второй операнд установлен в0xff08.
-
Встроенная функция:
int__builtin_tend(void)¶ Генерирует
tendмашинный код, завершающий транзакцию и делающий изменения видимыми для других потоков. Код состояния, сгенерированный tend, возвращается в виде целочисленного значения.
-
Встроенная функция:
void__builtin_tabort(int)¶ Генерирует
tabortмашинный код со специфицированным кодом аборта. Коды аборта от 0 до 255 зарезервированы и приведут к сообщению об ошибке.
-
Встроенная функция:
void__builtin_tx_assist(int)¶ Генерирует
ppa rX,rY,1машинный код. Где целочисленный параметр загружается в rX, а значение 0 загружается в rY. Целочисленный параметр определяет количество повторных абортов транзакции.
-
Встроенная функция:
int__builtin_tx_nesting_depth(void)¶ Генерирует
etndмашинный код. Текущая глубина вложенности возвращается в виде целочисленного значения. Для глубины вложенности 0 код не выполняется как часть транзакции.
-
Встроенная функция:
void__builtin_non_tx_store(uint64_t *, uint64_t)¶ -
Генерирует
ntstgмашинный код. Второй аргумент записывается в местоположение первого аргумента. Операция записи не будет отменена в случае аборта транзакции.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/S_002f390-System-z-Built-in-Functions.html