ARM AArch32 локальные метки против скорости именованных меток - PullRequest
0 голосов
/ 05 июня 2019

Я знаю, что локальные метки больше похожи на относительные переходы ПК, и им нужно указать направление поиска, и я знаю, что именованным меткам не нужно указывать направление, а просто прыгать.

Правильно ли я считаю, чтолокальные метки больше похожи на итерацию в памяти, пока метка не нажата, а именованные метки больше похожи на дискретные заранее известные переходы?Если да, делает ли это локальные метки значительно медленнее, чем именованные?

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Ответ основан на комментарии @ Jester

Поскольку сборка выполняется ассемблером, ассемблер выполняет поиск и отмену токена локальных меток.сборка кода.На самом деле ассемблер должен делать это и с именованными метками, он просто обращает внимание на область видимости иначе, чем с локальными метками.

Все, что видит процессор, - это прямые переходы адреса памяти, которые нужно выполнить во время выполнения, так что нет, тамнет разницы в скорости во время выполнения.

0 голосов
/ 06 июня 2019

Локальные метки не имеют разницы в эффективности кода .

См .: Инструкция ARM Branch и Страница ветви Heyrick ; коды операций одинаковы, несмотря ни на что. Локальная метка не изменит расстояние ветвления.

Так почему вы можете их использовать?

Существуют три преимущества местных этикеток.

  1. Им не требуется имя, которое может конфликтовать с другими ярлыками (например, exit_routine:).
  2. Они позволяют макросам содержать «локальные» метки.
  3. Проще может быть лучше.

Сравнение примера old_timers,

1:
   ...
   b 1b

Versus,

my_label_which_is_to_long_and_obscures_intent_of_code_via_verbosity_57:
   ...
   b my_label_which_is_to_long_and_obscures_intent_of_code_via_verbosity_58

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

start_calc:
   ; xxx
   cmp r0, #0
   bmi negative_case
;;; positive code
   ; xxx
   b done_calc
negative_case:
   ; xxx
done_calc:

Здесь ; xxx представляет несколько простых инструкций. Все эти ярлыки не слишком полезны, и комментарий с самого начала о том, почему вы должны обрабатывать негатив / позитив иначе, был бы более полезным для большинства людей.

Типичные рекомендации по пользовательскому интерфейсу дают 4-7 вариантов, поскольку это легко для кратковременной памяти. Я бы не использовал больше локальных меток, чем это подряд, так как это может сбить с толку. Однако я бы сказал, что они могут быть полезны для понимания некоторого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...