Spec-Zone.ru › GCC 6

6.59.23 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-6.5.0/gcc/S_002f390-System-z-Built-in-Functions.html

Spec-Zone.ru

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