6.62.35 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_STARTED
tbeginбыл выполнен как часть обычной обработки. Тело транзакции должно быть выполнено.
- Макрос: _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, а значение 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-14.2.0/gcc/S_002f390-System-z-Built_002din-Functions.html