링크 레지스터
Link register이 기사는 검증을 위해 추가적인 인용이 필요합니다. 찾기 – (2013년 4월) (이 를 제거하는 및 |
링크 레지스터(link register, 줄여서 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(ARCompact 아키텍처 버전 2를 사용하는 ARC 프로세서)는 인터럽트 링크 레지스터를 위해 범용 레지스터 r29를 사용하고 분기 링크 레지스터를 위해 r31을 사용합니다.[5][6]이러한 플랫폼에서 "링크 레지스터"에 대한 참조는 분기 링크 레지스터를 참조하는 것입니다.
ARCompact와 ARCtangent 아키텍처에 기반을 둔 이전의 ARC 프로세서는 두 개의 인터럽트 링크 레지스터(ILINK)와 하나의 분기 링크 레지스터(BLINK)의 세 개의 링크 레지스터를 가지고 있었습니다.[5][7][8][9]두 개의 인터럽트 링크 레지스터는 ILINK1(레벨 1(낮은 우선 순위) 마스킹 가능 인터럽트의 경우) 및 ILINK2(레벨 2(중간 우선 순위) 마스킹 가능 인터럽트의 경우)였습니다.이러한 아키텍처에서 r29는 레벨 1 인터럽트 링크 레지스터, r30은 레벨 2 인터럽트 링크 레지스터, r31은 분기 링크 레지스터로 사용되었습니다.ARC 700 프로세서의 사용자 모드에서는 ILINK1과 ILINK2에 접근할 수 없었습니다.[7]
링크 레지스터는 전용 레지스터든 범용 레지스터든 상관없이 사용하기 때문에 서브루틴에서 더 빠른 호출이 가능합니다.서브루틴이 리프가 아닌 경우, 레지스터에 리턴 어드레스를 전달하면 여전히 Thanks에 대해 더 효율적인 코드를 생성할 수 있습니다. 예를 들어, 인수가 재배열된 다른 서브루틴을 호출하는 것이 유일한 목적인 서브루틴에 대해 말입니다.링크 레지스터는 호출자가 사용하는 다른 레지스터와 일괄적으로 저장할 수 있으므로 다른 서브루틴은 링크 레지스터와 함께 4-7개의 레지스터를 단일 명령으로 푸시할 수 있으므로 다른 서브루틴은 링크 레지스터와 함께 4-7개의 레지스터를 푸시합니다.STMDB SP!, {R4-R7, LR}
필요한 모든 메모리 쓰기 파이프라인.
참고문헌
- ^ "ARMv7-M Architecture Reference Manual". ARM. Retrieved 24 August 2022.
- ^ "ARMv7-A and ARMv7-R Architecture Reference Manual; Arm Holdings". arm.com. Retrieved 24 August 2022.
- ^ "Using as, section 9.33.1.2 (OPENRISC Dependent Features/Register Names)". Retrieved 25 August 2022.
- ^ "RTEMS SPARC Applications Supplement" (PDF). May 2000. Archived from the original (PDF) on 8 January 2019. Retrieved 2013-04-19.
- ^ a b "Using as, section 9.3.2.2 (ARC Dependent Features/Syntax/Register Names)". Retrieved 25 August 2022.
- ^ "ARC Synopsys DesignWare ARCv2 System V ABI Supplement" (PDF). Archived (PDF) from the original on 25 August 2022. Retrieved 25 August 2022.
- ^ a b "ARCompact Instruction Set Architecture Programmer's Reference" (PDF). April 2008. Archived (PDF) from the original on 9 June 2022. Retrieved 25 August 2022.
- ^ "ARCtangent-A4 Programmer's Reference" (PDF). August 2002. Archived (PDF) from the original on 8 March 2022. Retrieved 25 August 2022.
- ^ "Lauterbach". Archived from the original on 1 May 2016. Retrieved 25 August 2022.