Я хочу написать небольшую процедуру сборки, которая использует временный регистр. Когда я говорю о временном регистре, я имею в виду, что это не входной или выходной регистр в смысле ограничений для блока asm
. Я мог бы просто выбрать любой регистр, а затем включить его в список clobber, но я подумал, что было бы лучше, если бы компилятор мог выбирать. Каков правильный способ справиться с этим? Единственное предложение, которое я нашел в Интернете, - это перечислить его как выходной регистр, а затем фактически не использовать вывод.Временный регистр в встроенном сборочном блоке
ответ
Вы не можете использовать ограничение r
(общий регистр) в списке clobber. И входной регистр считается немодифицированным оператором asm. Лучшее решение - указать temp как выходной регистр, который дает компилятору возможность отбрасывать «результат», а также удалять реестр.
unsigned long tmp; /* register 'word' type. */
__asm__ ("..." : "=r" (tmp), ... : <inputs> : <clobbered>);
Теперь вы можете обратиться к регистру, как временный %0
, в этом примере. При условии, что переменная tmp
никогда не используется, компилятор может отменить результат и продолжить (повторно) использовать регистр.
Хорошо, это звучит хорошо. Компилятор, по-видимому, замечает, что я никогда не пользовался 'tmp' впоследствии. –
@MichaelMcLoughlin - это предполагает, что инструкции, которые используют '% 0', не имеют никаких ограничений на регистры, которые они могут использовать. Некоторые инструкции x86 имеют такие причуды, например, 'q',' Q' [ограничения] (http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Machine-Constraints.html#Machine-Constraints) , –
Просто будьте осторожны, чтобы не дать компилятору впечатление, что единственная точка ассемблера - это вычисление 'tmp', или оно, вероятно, отбросит все это! – SamB
- 1. несоответствие в встроенном блоке
- 2. Нижний колонтитул нижнего колонтитула в блоке/встроенном блоке
- 3. Позвонить веб-службу в встроенном блоке asp.net
- 4. Высота 100% на оправданном встроенном блоке div
- 5. Как использовать специальный регистр в встроенном ассемблере ARM
- 6. Как запросить регистр общего назначения в встроенном заявлении asm?
- 7. Текст в встроенном блоке div, нажав на него
- 8. Изображения значков, которые не отображаются в встроенном блоке
- 9. Удаление пробелов в встроенном блоке с помощью javascript
- 10. Использование размера фона на встроенном блоке в запросах мультимедиа
- 11. Почему div с содержимым перемещается вниз в встроенном блоке?
- 12. Как мне изменить порядок на встроенном блоке в CSS?
- 13. Вертикальное центрирование различного содержимого в фиксированном встроенном блоке
- 14. операция imull на сборочном ia32
- 15. Зачем использовать временный регистр для передачи значения регистру сегмента?
- 16. Язык ассемблера MIPS - временный регистр и сохраненные регистры
- 17. Ошибка компиляции в Сборочном коде для cmpxchg16b
- 18. Удаление поля на встроенном блоке после строк обертывания
- 19. Drupal 7: Использование правил на встроенном блоке webform
- 20. переполнение: скрытое на встроенном блоке добавляет высоту родительского
- 21. проекта во встроенном документе в встроенном массиве
- 22. Получение ошибки шины в сборочном поточном программировании x86
- 23. Дать CSV временный файл, используя временный файл
- 24. Что происходит, когда я даю смещение на «временный регистр» в MIPS
- 25. Присваивание происходит в блоке, в блоке
- 26. Временный удалить в JQuery
- 27. Временный сдвиг в HLS?
- 28. Рендеринг xhtml-совместимых страниц с XSLT не будет корректно отображаться в встроенном блоке javascript
- 29. HTML-абзац новой строки, если нет места в встроенном блоке div
- 30. Как сделать текст в встроенном блоке div полностью независимым от любого текста вне div?
С помощью какого компилятора? На каком процессоре/ОС? –