Spec-Zone.ru › GCC 9

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

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

‘=’

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

‘+’

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

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

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

‘&’

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

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

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

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

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

‘%’

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

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

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

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

Spec-Zone.ru

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