Перейти к содержанию
    

ARM ассемблер, вызов внешней функции.

Во всех ассемблерных исходниках, которые мне встречались, вызов внешней функции делался так:

    LDR     R1, =os_context_switch_hook
    BLX     R1

Но недавно я наткнулся на сайт, где прочитал, что это делается проще:

    bl      os_context_switch_hook

Первый вариант компилится во что-то вроде:

    ldr    r1, [pc, #76]
    blx    r1
...
    .word    0x080024a5

, а второй вариант - в

    bl    80024a5

.

Второй вариант короче, быстрее, и не сбивает конвейер. (С ним переключатель контекста scmRTOS выполняется за 60 тактов вместо 70-ти).

Внимание, вопрос: почему везде используется первый вариант?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внимание, вопрос: почему везде используется первый вариант?
1) Наследие всяких tdmi. Функция может быть как ARM, так и THUMB и при переходе надо переключать режим, что и делает BLX.

2) "Дальнобойность" BL ограничена (например, может не хватить для прыжка флеш->ОЗУ), в то время как BLX перекрывает все адресное пространство.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так и думал, что по привычке.

Что касаемо дальнобойности, то, имхо, её потеря стоит такого выигрыша в быстродействии (60 тактов вместо 70-ти).

(Тем более, что GCC всё равно лепит свои дурацкие veneer-ы при вызове RAM-функций, так что BL ROM_TO_RAM нам пока не грозит:) )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил на примере 1-Eventflag. Старый вариант обеспечивает передачу управления за 2.7мкс, новый - за 2.55. Итого выигрыш = 5.5%, очень недурно:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...