6.59.26 S/390 System z Встроенные функции
- Встроенная функция: int __builtin_tbegin (void*)
Генерирует инструкцию
tbeginмашины, начинающую нелимитированную аппаратную транзакцию. Если параметр не NULL, область памяти используется для хранения буфера диагностики транзакции и будет передана в качестве первого операнда функцииtbegin. Этот буфер может быть определен с помощью структурыstruct __htm_tdbC, определённой вhtmintrin.h, и должен располагаться на границе двойного слова. Второй операнд tbegin устанавливается в значение0xff0c. Это позволяет сохранять/восстанавливать все регистры общего назначения (GPR) и отключает аборты для манипуляций с плавающей запятой (FPR) и регистрами доступа (AR) внутри тела транзакции. Код условия, установленный инструкцией tbegin, возвращается в виде целочисленного значения. Инструкция tbegin по определению перезаписывает содержимое всех регистров FPR. Компилятор сгенерирует код, который сохраняет и восстанавливает регистры FPR. Для кода с плавающей запятой (soft-float) рекомендуется использовать вариант*_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-8.5.0/gcc/S_002f390-System-z-Built-in-Functions.html