Соглашения о вызовах функции ARMv7

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

Для получения дальнейшей информации о соглашениях о вызовах для среды ARMv6, см. Соглашения о вызовах Функции ARMv6.

Вызовы функции

Этот раздел детализирует процесс вызова подпрограммы и передающих параметров к ней, и как возвращаемые значения подпрограмм к их вызывающим сторонам. Следующие разделы выделяют незначительные различия между ARMv6 и средами ARMv7.

Прожурналы и эпилоги

Версия Ползунка, доступного в ARMv7, способна к сохранению и восстановлению содержания регистров VFP. Кроме того, блок ARMv7 использует объединенный набор мнемоники; поэтому, тот же ассемблерный код может использоваться для генерации или ARM или машинного кода Ползунка.

Перечисление 1 показывает пример Пролога, сохраняющего много ключевых регистров, включая несколько регистров VFP. Это также выделяет 36 байтов для локального хранения.

  Пролог перечисления 1 В качестве примера к ARM или Ползунку 2 (ARMv7)

push     {r4-r7, lr}           // save LR, R7, R4-R6
add      r7, sp, #12           // adjust R7 to point to saved R7
push     {r8, r10, r11}        // save remaining GPRs (R8, R10, R11)
vstmdb   sp!, {d8-d15}         // save VFP/Advanced SIMD registers D8
                               //  (aka S16-S31, Q4-Q7)
sub      sp, sp, #36           // allocate space for local storage

Перечисление 2 показывает эпилог в качестве примера, восстанавливающий регистры, сохраненные предыдущим Прологом.

  Эпилог перечисления 2 В качестве примера для ARM или Ползунка 2 (ARMv7)

add      sp, sp, #36           // deallocate space for local storage
vldmia   sp!, {d8-d15}         // restore VFP/Advanced SIMD registers
pop      {r8, r10, r11}        // restore R8-R11
pop      {r4-r7, pc}           // restore R4-R6, saved R7, return to saved LR

Сохранение регистра

Сохранение регистра на архитектуре ARMv7 совпадает с этим для архитектуры ARMv6, за исключением изменений и дополнений, отмеченных в Таблице 1.

  Процессор Table 1 Additional регистрируется в архитектуре ARMv7

Ввести

Имя

Сохраненный

Примечания

Регистр VFP

D0-D7

Нет

Также известный как Q0-Q3 на ARMv7. Эти регистры доступны от режима Thumb на ARMv7.

D8-D15

Да

Также известный как Q4-Q7 на ARMv7. Эти регистры доступны от режима Thumb на ARMv7.

D16-D31

Нет

Только доступный в ARMv7. Также известный как Q8-Q15.

Для получения информации обо всех других регистрах посмотрите Таблицу 2.