Регистрация ссылок
Регистр связи (сокращенно LR) — это регистр , в котором хранится адрес, к которому необходимо вернуться после завершения вызова подпрограммы . Это более эффективно, чем более традиционная схема хранения адресов возврата в стеке вызовов , иногда называемом машинным стеком. Регистр связи не требует записи и чтения памяти, содержащей стек, что может сэкономить значительный процент времени выполнения при повторных вызовах небольших подпрограмм.
Архитектура IBM POWER и ее преемники PowerPC и Power ISA имеют специальный регистр связи, в который инструкции вызова подпрограмм помещают обратный адрес. В некоторых других наборах команд, таких как архитектуры ARM , SPARC и OpenRISC , инструкции вызова подпрограмм помещают адрес возврата в определенный регистр общего назначения , так что этот регистр обозначается архитектурой набора команд как регистр связи. В некоторых других, таких как PA-RISC , RISC-V , IBM System/360 и его преемниках, включая z/Architecture , инструкция вызова подпрограммы может сохранять адрес возврата в любом регистре общего назначения; по соглашению обычно выбирается конкретный регистр для использования в качестве регистра связи.
В архитектуре ARMv7 в качестве регистра связи используется регистр общего назначения R14. [1] [2] OpenRISC использует регистр r9, [3] и SPARC использует «выходной регистр 7» или o7 . [4]
Некоторые архитектуры имеют два регистра связи: стандартный «регистр связи ветвления» для большинства вызовов подпрограмм и специальный «регистр связи прерываний» для прерываний. Одним из них является ARCv2 ( процессоры ARC, использующие версию 2 архитектуры ARCompact), в котором используются регистры общего назначения r29 для регистра связи прерываний и r31 для регистра связи ветвления. [5] [6] Ссылки на «реестр ссылок» на таких платформах будут относиться к реестру ссылок филиалов.
Более ранние процессоры ARC на базе архитектур ARCompact и ARCtangent имели три регистра связи: два регистра связи прерываний (ILINK) и один регистр связи ветвления (BLINK). [5] [7] [8] [9] Двумя регистрами связи прерываний были ILINK1 (для маскируемых прерываний уровня 1 (низкий приоритет)) и ILINK2 (для маскируемых прерываний уровня 2 (средний приоритет)). В этих архитектурах r29 использовался как регистр канала прерывания уровня 1, r30 как регистр канала прерывания уровня 2 и r31 как регистр канала ветвления. ILINK1 и ILINK2 не были доступны в пользовательском режиме на процессорах ARC 700. [7]
Использование регистра связи, независимо от того, является ли он специализированным регистром или регистром общего назначения, позволяет быстрее вызывать конечные подпрограммы . Когда подпрограмма не является конечной, передача адреса возврата в регистр все равно может привести к созданию более эффективного кода для thunks , например, для подпрограммы, единственной целью которой является вызов другой подпрограммы с каким-либо образом переставленными аргументами. Другие подпрограммы могут извлечь выгоду из использования регистра связи, поскольку он может быть сохранен в пакете с другими регистрами, используемыми вызываемой стороной — например, подпрограмма ARM помещает регистры 4–7 вместе с регистром связи LR с помощью одной инструкции.
STMDB SP!, {R4-R7, LR}
конвейерная обработка всех необходимых операций записи в память.
Ссылки
[ редактировать ]- ^ «Справочное руководство по архитектуре ARMv7-M» . РУКА . Проверено 24 августа 2022 г.
- ^ «Справочное руководство по архитектуре ARMv7-A и ARMv7-R; Arm Holdings» . Arm.com . Проверено 24 августа 2022 г.
- ^ «Использование как, раздел 9.33.1.2 (Зависимые функции OPENRISC/имена регистров)» . Проверено 25 августа 2022 г.
- ^ «Дополнение к приложениям RTEMS SPARC» (PDF) . Май 2000 г. Архивировано из оригинала (PDF) 8 января 2019 г. . Проверено 19 апреля 2013 г.
- ^ Jump up to: а б «Использование as, раздел 9.3.2.2 (зависимые от ARC функции/синтаксис/имена регистров)» . Проверено 25 августа 2022 г.
- ^ «Дополнение ABI к ARC Synopsys DesignWare ARCv2 System V» (PDF) . Архивировано (PDF) из оригинала 25 августа 2022 года . Проверено 25 августа 2022 г.
- ^ Jump up to: а б «Справочник программиста по архитектуре набора команд ARCompact» (PDF) . Апрель 2008 г. Архивировано (PDF) из оригинала 9 июня 2022 г. Проверено 25 августа 2022 г.
- ^ «Справочник программиста ARCtangent-A4» (PDF) . Август 2002 г. Архивировано (PDF) из оригинала 8 марта 2022 г. Проверено 25 августа 2022 г.
- ^ «Лаутербах» . Архивировано из оригинала 1 мая 2016 года . Проверено 25 августа 2022 г.