Оптимизация используемых регистров при использовании встроенной сборки ARM в GCC - PullRequest
5 голосов
/ 04 января 2012

Я хочу написать встроенную сборку ARM в моем C-коде. Для этого кода мне нужно использовать регистр или два больше, чем просто объявленные как входы и выходы для функции. Я знаю, как использовать список clobber, чтобы сообщить GCC, что я буду использовать некоторые дополнительные регистры для своих вычислений.

Тем не менее, я уверен, что GCC обладает свободой перетасовывать, какие регистры используются для чего и при оптимизации. То есть я чувствую, что плохая идея использовать фиксированный регистр для моих вычислений.

Каков наилучший способ использовать дополнительный регистр, который не является ни вводом, ни выводом моей встроенной сборки, без использования фиксированного регистра?

P.S. Я думал, что использование фиктивной выходной переменной может помочь, но я не уверен, какие странные другие эффекты будут иметь ...

1 Ответ

5 голосов
/ 04 января 2012

Хорошо, я нашел источник, который поддерживает идею использования фиктивных выходов вместо жестких регистров:

4.8 Временные регистры: Люди также иногда ошибочно используют клобберы для временных регистров.Правильный способ - создать фиктивный выход и использовать «= r» или «= & r» в зависимости от допустимого перекрытия с входами.GCC выделяет регистр для фиктивного значения.Разница в том, что GCC может выбрать удобный регистр, поэтому он обладает большей гибкостью.

со страницы 20 this pdf.

Для всех, кто заинтересованподробнее о встроенной сборке с GCC этот веб-сайт оказался очень поучительным.

...