Spec-Zone.ru › GCC 11

Next: SH встроенные функции, Previous: RX встроенные функции, Up: Встроенные функции, специфичные для определённых целевых машин [Оглавление][Индекс]

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, а значение 0 загружается в rY. Целочисленный параметр определяет количество повторных абортов транзакции.

Встроенная функция: int __builtin_tx_nesting_depth (void) ¶

Генерирует etnd машинный код. Текущая глубина вложенности возвращается в виде целочисленного значения. Для глубины вложенности 0 код не выполняется как часть транзакции.

Встроенная функция: void __builtin_non_tx_store (uint64_t *, uint64_t) ¶

Генерирует ntstg машинный код. Второй аргумент записывается в местоположение первого аргумента. Операция записи не будет отменена в случае аборта транзакции.

Next: SH встроенные функции, Previous: RX встроенные функции, Up: Встроенные функции, специфичные для определённых целевых машин [Оглавление][Индекс]

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

Spec-Zone.ru

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