레지스터가 R0, R1,...,Rn
인 알고리즘을 적용하고 싶습니다.LLVM IR을 통한 x86 레지스터 제어?
이 경우 내가 제어하고자하는 것은 이러한 레지스터가 할당되는 순서입니다.
LLVM IR 레벨에서 레지스터를 제어 할 수 있습니까? 아니면 IR이 이러한 저레벨 세부 사항을 멀리 차폐합니까?
레지스터가 R0, R1,...,Rn
인 알고리즘을 적용하고 싶습니다.LLVM IR을 통한 x86 레지스터 제어?
이 경우 내가 제어하고자하는 것은 이러한 레지스터가 할당되는 순서입니다.
LLVM IR 레벨에서 레지스터를 제어 할 수 있습니까? 아니면 IR이 이러한 저레벨 세부 사항을 멀리 차폐합니까?
최신 버전의 llvm에서 llvm.read_register 및 llvm.write_register를 사용할 수 있습니다. 당신이 좋은 예를 원하는 경우
,과 같이 전역 변수를 만들어보십시오 :
는register void *rsp asm("rsp");
그런 다음 printf와 함께 인쇄 해보십시오. -S -emit - LLVM과 간단한 C 프로그램을 컴파일하고 llvm.read_register이
%4 = call i64 @llvm.read_register.i64(metadata !0)
을 사용 그리고 당신은 메타 데이터 인덱스 0을 볼 수있는 파일의 하단에 볼 수있는 것은 :
!0 = !{!"rsp"}
하지만 'mov rax, rsp' 또는 그 이상으로 변하지 않을까요? '% 4' 레지스터가 저장되는 것을 제어 할 수는 없습니다. –
항상 올바르지는 않지만 옵티 마이저가 아닌 경우에도 문제가 발생합니다. 인라인 어셈블리는 아마도 OP가 원하는 것을 할 수있는 최선의 방법 일 것입니다. – keyboardsmoke
이 인라인 어셈블리를 사용할 수 있습니다. 이는 원하는 것이 아닐 수도 있습니다. IR은이 측면에서 어셈블리 레벨보다 C 레벨입니다. – Joky
인라인 어셈블리에는 어떤 메서드 호출을 사용할 수 있습니까? – Shuzheng
나는 그 질문을 이해하지 못합니까? – Joky