Spec-Zone.ru › GCC 12

6.47.3.3 Символы модификатора ограничений

Вот символы модификатора ограничений.

‘=’

Означает, что данный операнд записывается данной инструкцией: предыдущее значение отбрасывается и заменяется новыми данными.

‘+’

Означает, что данный операнд читается и записывается инструкцией.

При корректировке операндов компилятором для удовлетворения ограничений ему необходимо знать, какие операнды читаются инструкцией, а какие записываются. ‘=’ идентифицирует операнд, который только записывается; ‘+’ идентифицирует операнд, который читается и записывается; все остальные операнды предполагаются только читаемыми.

Если вы указываете ‘=’ или ‘+’ в ограничении, поместите его в первый символ строки ограничения.

‘&’

Означает (в определённом варианте), что данный операнд является операндом earlyclobber, который записывается до завершения инструкции с использованием входных операндов. Следовательно, данный операнд не может находиться в регистре, который читается инструкцией, или в качестве части любого адресного пространства памяти.

‘&’ относится только к варианту, в котором он записывается. В ограничениях с несколькими вариантами иногда один вариант требует ‘&’, а другие — нет. См., например, инструкцию ‘movdf’ процессора 68000.

Операнд, который читается инструкцией, может быть связан с операндом earlyclobber, если его единственное использование в качестве входного значения происходит до записи раннего результата. Добавление вариантов такого типа часто позволяет GCC генерировать более эффективный код, когда только некоторые из читаемых операндов могут быть затронуты earlyclobber. См., например, инструкцию ‘mulsi3’ ARM.

Кроме того, если операнд earlyclobber также является операндом чтения/записи, то этот операнд записывается только после его использования.

‘&’ не отменяет необходимости записи ‘=’ или ‘+’. Так как операнды earlyclobber всегда записываются, операнд earlyclobber только для чтения является неправильным и будет отвергнут компилятором.

‘%’

Объявляет инструкцию коммутативной для данного операнда и следующего операнда. Это означает, что компилятор может поменять местами два операнда, если это самый дешёвый способ заставить все операнды соответствовать ограничениям. ‘%’ относится ко всем вариантам и должно появляться в качестве первого символа в ограничении. Только читаемые операнды могут использовать ‘%’.

GCC может обрабатывать только одну коммутативную пару в asm; если вы используете больше, компилятор может завершиться ошибкой. Обратите внимание, что модификатор не требуется, если два варианта строго идентичны; это только потратит время на проходе перегрузки.

Далее: Машинные ограничения, Предыдущее: Многовариантные, Вверх: Ограничения [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Modifiers.html

Spec-Zone.ru

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