2011-03-15 5 views
1

저는 Windows에서 LLVM으로 놀고 있습니다. 예제 프로그램을 작성하여 조금 더 이해하려고 노력하고 있습니다. 현재, 나는 HowToUseJIT를보고있다. 내가 64 비트를 돌릴 때 엔 정말 미친 코드 인 것 같은 진입 점이 있다는 것을 알았습니다. rsi, rdi 및 xmm6-xmm15를 스택에 저장합니다. rax와 rcx를 설정합니다. 마지막으로 호출 체인에서 다음 함수를 호출하기 전에 이전에 저장된 모든 값을 복원합니다.왜 64 비트 Windows에서 LLVM JIT 생성 엔트리 포인트가 어색합니까?

여기에는 정당한 이유가 있을까요? 아니면 Windows x64의 LLVM이 주요한시기에 준비가되지 않았다고 제안합니까?

편집 : 이것은 LLVM 2.8입니다. 방금 현재 2.9 분기에있는 내용을 다운로드했으며 동일한 동작을 나타내지 않습니다.

답변

2

에 따라 다릅니다. 모든 레지스터 저장은 Win64 ABI로 인해 호출 수신자가 저장되어 있으므로 올바르게 저장/복원되어야합니다.

noop로드/저장이 제거되지 않는 이유는 JIT에 기본적으로 사용되는 빠른 명령 선택기 때문일 수 있습니다. 정말 빠른 속도로 이진 코드를 얻을 수는 있지만 품질을 희생합니다.

정상적인 codegen으로 전환하여 문제가 존재하는지 확인하십시오.

관련 문제