Tail Call
func0 --> func1 --> func2 --> func3 순서로 함수가 호출되는 경우,
func0에서 분기할 때만 'BL' 명령어를 쓰고,
그 뒤에 호출되는 함수 셋에서 'B' 명령어를 쓰면,
LR(Link Register)은 func0 의 분기 지점을 여전히 가리키고 있게된다.
이 때, func2에서 func3 호출 뒤 'BX LR' 명령으로 바로 func0로 리턴할 수 있다.
매번 새로 호출된 함수에서 'BL' 명령으로 LR을 갱신시키지 않으면 Tail Call의 효과를 누릴 수 있다.
LR가 가리키는 복귀 주소인 func0로 즉시 리턴되기 때문에 효율적이다.
'한국으로 > ARM' 카테고리의 다른 글
MMU (0) | 2018.07.29 |
---|---|
Cortex-A9 Coprocessor (0) | 2018.07.29 |
Interrupt Controller (0) | 2018.07.29 |
ARM Mode(모드) and Exception(예외) (0) | 2018.07.24 |
정수 승격과 형변환 문제 (0) | 2018.07.22 |
다중 메모리 이동: LDM, STM (0) | 2018.07.22 |
AAPCS와 레지스터 테이블 (0) | 2018.07.21 |
ARM의 특수 용도 레지스터 (0) | 2018.07.21 |