6.57.24 S/390 System z Встроенные функции
Генерирует
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_STARTED-
tbeginбыл выполнен в рамках обычной обработки. Тело транзакции должно быть выполнено. _HTM_TBEGIN_INDETERMINATE- Транзакция была прервана из-за неопределённого состояния, которое может быть устойчивым.
_HTM_TBEGIN_TRANSIENT- Транзакция прервана из-за временного сбоя. В этом случае транзакция должна быть повторно выполнена.
_HTM_TBEGIN_PERSISTENT- Транзакция прервана из-за постоянного сбоя. Повторное выполнение при тех же обстоятельствах не будет продуктивным.
_HTM_FIRST_USER_ABORT_CODE, определённый вhtmintrin.h, указывает первый код прерывания, который можно использовать для__builtin_tabort. Значения ниже этого порога зарезервированы для использования машиной.
struct __htm_tdb, определённый вhtmintrin.h, описывает структуру блока диагностики транзакции, как указано в руководстве по принципам работы в главе 5-91.
То же, что и
__builtin_tbegin, но без сохранения и восстановления регистров FPR. Использование этого варианта в коде, использующем регистры FPR, оставит регистры FPR в неопределённом состоянии при входе в обработчик прерывания транзакции.
В дополнение к
__builtin_tbeginгенерируется цикл для временных сбоев. Если tbegin возвращает код состояния 2, транзакция будет повторно выполняться столько раз, сколько указано во втором аргументе. Инструкция ассиста процессора используется, чтобы сообщить процессору о количестве сбоев до сих пор.
То же, что и
__builtin_tbegin_retry, но без сохранения и восстановления регистров FPR. Использование этого варианта в коде, использующем регистры FPR, оставит регистры FPR в неопределённом состоянии при входе в обработчик прерывания транзакции.
Генерирует
tbegincмашинную инструкцию, начинающую ограниченную транзакцию аппаратного обеспечения. Второй операнд устанавливается в0xff08.
Генерирует
tendмашинную инструкцию, завершающую транзакцию и делающую изменения видимыми для других потоков. Код состояния, сгенерированный инструкцией tend, возвращается как целое значение.
Генерирует
tabortмашинную инструкцию с указанным кодом прерывания. Коды прерывания от 0 до 255 зарезервированы и приведут к сообщению об ошибке.
Генерирует
ppa rX,rY,1машинную инструкцию. Где целочисленный параметр загружается в rX, а значение ноль загружается в rY. Целочисленный параметр указывает количество раз, когда транзакция неоднократно прерывалась.
Генерирует
etndмашинную инструкцию. Текущая глубина вложенности возвращается как целое значение. При глубине вложенности 0 код не выполняется как часть транзакции.
Генерирует
ntstgмашинную инструкцию. Второй аргумент записывается в местоположение первого аргумента. Операция сохранения не будет отменена в случае прерывания транзакции.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/S_002f390-System-z-Built-in-Functions.html