Spec-Zone.ru › GCC 12

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_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, а значение ноль загружается в 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API