Spec-Zone.ru › GCC 14

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

Spec-Zone.ru

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