6.60.29 Встроенные функции 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, транзакция будет повторно выполнена столько раз, сколько указано во втором аргументе. Для информирования процессора об ошибках используется инструкция processor assist.
-
Встроенная функция:
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-10.5.0/gcc/S_002f390-System-z-Built-in-Functions.html