Copy-and-Patch: 작동 원리
본 문서는 clang 컴파일러의 기능을 활용한 스텐실(stencil) 생성 및 패치 기법을 설명합니다.
주요 기능으로는 preserve_none 호출 규약을 이용해 레지스터에 인자를 강제 배치하고, tail call 최적화를 통해 스택 프레임 없이 함수 연결을 가능하게 하며, 동적 재배치(relocation) 정보를 활용해 JIT 컴파일 시 코드 내 상수나 주소를 효율적으로 패치하는 방법을 제시합니다.
이 기법은 스텐실 함수의 정확한 명령어 시퀀스 생성과 최적화된 코드 연결, 그리고 32비트 및 64비트 재배치 처리를 통해 고성능 JIT 컴파일러 구현에 실용적입니다.