Spec-Zone.ru › GCC 10

Далее: Встроенные функции SH, Предыдущее: Встроенные функции RX, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Содержание][Индекс]

6.60.29 Встроенные функции 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, транзакция будет повторно выполнена столько раз, сколько указано во втором аргументе. Для информирования процессора об ошибках используется инструкция processor assist.

Встроенная функция: 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 машинную инструкцию. Второй аргумент записывается в местоположение первого аргумента. Операция сохранения не будет отменена в случае аборта транзакции.

Далее: Встроенные функции SH, Предыдущее: Встроенные функции RX, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/S_002f390-System-z-Built-in-Functions.html

Spec-Zone.ru

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