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, а значение ноль загружается в rY. Целое значение указывает количество раз, когда транзакция была повторно прервана.
- Функция по умолчанию: int __builtin_tx_nesting_depth (void)
Генерирует
etndмашинный код. Текущая глубина вложенности возвращается в виде целого значения. Для глубины вложенности 0 код не выполняется в рамках транзакции.
- Функция по умолчанию: void __builtin_non_tx_store (uint64_t *, uint64_t)
-
Генерирует
ntstgмашинный код. Второй аргумент записывается в местоположение первого аргумента. Операция записи не будет отменена в случае прерывания транзакции.
Далее: Функции SH по умолчанию, Предыдущее: Функции RX по умолчанию, Наверх: Целевые встроенные функции [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/S_002f390-System-z-Built-in-Functions.html