Spec-Zone.ru › GCC 9

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

Spec-Zone.ru

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