Spec-Zone.ru › GCC 6

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

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

‘=’

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

‘+’

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

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

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

‘&’

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

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

Операнд, который читается инструкцией, может быть связан с операндом earlyclobber, если его единственное использование в качестве входного значения происходит до записи результата 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-6.5.0/gcc/Modifiers.html

Spec-Zone.ru

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