6.43.5 Переменные в указанных регистрах
GNU C позволяет поместить несколько глобальных переменных в указанные аппаратные регистры. Также можно указать регистр, в котором должна быть размещена обычная переменная-регистр.
- Глобальные переменные-регистры резервируют регистры на протяжении всего выполнения программы. Это может быть полезно в программах, таких как интерпретаторы языков программирования, имеющих несколько глобальных переменных, к которым часто обращаются.
- Локальные переменные-регистры в определённых регистрах не резервируют регистры, за исключением момента, когда они используются в качестве входных или выходных операндов в инструкции
asmи сама инструкцияasmне удаляется. Анализ потока данных компилятора способен определить, где указанные регистры содержат текущие значения и где они доступны для других применений. Записи в локальные переменные-регистры могут быть удалены, если они, согласно анализу потока данных, являются «мёртвыми». Ссылки на локальные переменные-регистры могут быть удалены, перемещены или упрощены.Иногда такие локальные переменные удобны для работы со расширенным функционалом
asm(см. Расширенный язык ассемблера), если требуется записать один выход ассемблерной инструкции непосредственно в определённый регистр. (Это работает, если регистр, который вы указываете, соответствует ограничениям, заданным для этого операнда в %%%CODE_BLOCK_3%%).
| • Глобальные переменные-регистры: | ||
| • Локальные переменные-регистры: |
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Explicit-Reg-Vars.html