Spec-Zone.ru › GCC 6

6.44.3.2 Множественные альтернативные ограничения

Иногда одно единственное наставление имеет множество альтернативных наборов возможных операндов. Например, в 68000, инструкция логического «или» может объединить регистр или непосредственное значение в память, или может объединить любой тип операнда в регистр; но она не может объединить одну ячейку памяти в другую.

Эти ограничения представлены как множество альтернатив. Альтернатива может быть описана серией букв для каждого операнда. Общее ограничение для операнда создаётся из букв для этого операнда из первой альтернативы, запятой, букв для этого операнда из второй альтернативы, запятой, и так далее до последней альтернативы. Все операнды для одной инструкции должны иметь одинаковое количество альтернатив.

Итак, первая альтернатива для инструкции логического «или» 68000 могла бы быть записана как "+m" (output) : "ir" (input). Вторая могла бы быть "+r" (output): "irm" (input). Однако, тот факт, что две ячейки памяти не могут быть использованы в одной инструкции, препятствует простому использованию "+rm" (output) : "irm" (input). Используя множественные альтернативы, это может быть записано как "+m,r" (output) : "ir,irm" (input). Это описывает все доступные альтернативы компилятору, позволяя ему выбрать наиболее эффективную для текущих условий.

В шаблоне нет способа определить, какая альтернатива была выбрана. Однако вы, возможно, сможете обернуть свои asm выражения встроенными функциями, такими как __builtin_constant_p, чтобы достичь желаемых результатов.

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

Spec-Zone.ru

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