링크 레지스터

Link register

링크 레지스터(link register, 줄여서 LR)는 서브루틴 호출이 완료될 때 반환할 주소를 저장하는 레지스터입니다.이것은 반환 주소를 때때로 기계 스택이라고 불리는 콜 스택에 저장하는 보다 전통적인 방식보다 더 효율적입니다.링크 레지스터는 스택이 포함된 메모리의 쓰기와 읽기를 필요로 하지 않으므로 작은 서브루틴의 반복 호출로 실행 시간을 상당히 절약할 수 있습니다.

IBM POWER 아키텍처PowerPCPower ISA 후속 제품에는 서브루틴 호출 명령이 리턴 주소를 입력하는 특수 목적 링크 레지스터가 있습니다.ARM 아키텍처, SPARCOpenRISC와 같은 일부 다른 명령어 세트에서는 서브루틴 호출 명령어가 반환 주소를 특정 범용 레지스터에 입력하여 명령어 세트 아키텍처가 레지스터를 링크 레지스터로 지정합니다.PA-RISC, RISC-VIBM 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}필요한 모든 메모리 쓰기 파이프라인.

참고문헌

  1. ^ "ARMv7-M Architecture Reference Manual". ARM. Retrieved 24 August 2022.
  2. ^ "ARMv7-A and ARMv7-R Architecture Reference Manual; Arm Holdings". arm.com. Retrieved 24 August 2022.
  3. ^ "Using as, section 9.33.1.2 (OPENRISC Dependent Features/Register Names)". Retrieved 25 August 2022.
  4. ^ "RTEMS SPARC Applications Supplement" (PDF). May 2000. Archived from the original (PDF) on 8 January 2019. Retrieved 2013-04-19.
  5. ^ a b "Using as, section 9.3.2.2 (ARC Dependent Features/Syntax/Register Names)". Retrieved 25 August 2022.
  6. ^ "ARC Synopsys DesignWare ARCv2 System V ABI Supplement" (PDF). Archived (PDF) from the original on 25 August 2022. Retrieved 25 August 2022.
  7. ^ 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.
  8. ^ "ARCtangent-A4 Programmer's Reference" (PDF). August 2002. Archived (PDF) from the original on 8 March 2022. Retrieved 25 August 2022.
  9. ^ "Lauterbach". Archived from the original on 1 May 2016. Retrieved 25 August 2022.