Spec-Zone.ru › GCC 7

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

Spec-Zone.ru

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