C ++: список Clobber ASM
-
28-09-2019 - |
Вопрос
В G ++ списки Clobber для ASM можно указать, например:
asm ("somecode" : : "r1", "r2", "r3");
Это означает, что кодовые изменения ASM регистрируются R1, R2, R3.
Теперь мои измененные регистры зависят от параметра шаблона n
(то asm
Блок находится внутри шаблона функции), а регистрирует R1, ..., RN будет изменен. Как я могу выразить это?
Решение
Сколько разных созвездей регистрации вы столкнулись? Если не слишком много, вы могли бы предоставить конкретную реализацию для каждого. (Специализация шаблона)
Потому что я захожу, что нет возможности создавать «шаблонные заявления».
Другие советы
Вы можете установить весь реестр, который вы можете использовать в списке Clobber, поэтому компилятор не использует их для хранения значения переменной; Я знаю, что это немного медленнее, но если вам не нужна очень высокая оптимизация, она будет работать.