6.59.23 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. Для кода с плавающей запятой рекомендуется использовать вариант*_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-6.5.0/gcc/S_002f390-System-z-Built-in-Functions.html