Spec-Zone.ru › GCC 8

6.45.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-8.5.0/gcc/Modifiers.html

Spec-Zone.ru

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