2012-04-29 2 views
11

그래서 최근에 어셈블리 기술을 향상시키기 위해 C++에서 장난감 언어를위한 매우 간단한 컴파일러를 작성했습니다. 단일 패스를 실행하고 파싱 단계에서 코드의 일부를 나타내는 여러 개의 문자열 스트림 (즉, section .bss, 다른 하나는 .data.text)을 직접 코드를 내 보냅니다. 그런 다음,이 문자열 스트림은 파일에 기록되며 NASM과 gcc를 사용하여 어셈블 링하고 링크합니다. 나는이 싱글 패스 접근 방식이 끔찍하게 비효율적이라는 것을 알고 있지만, 이것은 코드 생성 단계를 다른 무엇보다 이해하는 데있어 더 많은 연습이었다. 어쨌든, 원시 코드 대신 LLVM IL을 직접 내보내려면 코드를 수정하고 싶습니다. LLVM IL에 대한 입문 레벨 가이드가 있습니까? 아니면 조립 라인에 해당하는 IL 코드를 결정하는 도구입니까? 나는 보았고, 나는 단지 필요한 것보다 더 많은 정보 인 완전한 스펙을 발견했다.컴파일러를 x86 어셈블리에서 LLVM으로 이식하기

+0

일대일 매핑이 없습니다. 바로 가기가 없습니다. –

+0

나는 이것을 깨닫는다, 나는 자료, cmp 및 조건부 점프 등을 예약하는 것과 같은 기본적인 것들을 방출하는 방법에 대한 지침을 찾고있다. – chameco

+0

LLVM 워드 프로세서. 장난감 언어 용 컴파일러를 만드는 과정을 안내하는 (적어도 하나 이상의) 자습서가 있습니다. – Mat

답변

14

LLVM IR 언어 참조는 available here입니다. 튜토리얼이 아닌 자세한 참조 페이지입니다. LLVM IR은 x86 어셈블리보다 고수준이고 일반이기 때문에 컴파일러가 x86을 방출하여 LLVM IR을 방출하는 것을 너무 어렵지 않아야하지만 x86 어셈블리와 LLVM IR간에 직접적인 1 대 1 대응은 없습니다.

공식 LLVM 설명서는 사용자를위한 최고의 출발점 인 detailed tutorial과 함께 제공됩니다. 간단한 고수준 프로그래밍 언어에서 LLVM IR에 이르는 장난감 컴파일러를 만드는 과정을 안내합니다. 이를 통해 LLVM의 주요 개념을 배우게 될 것이며 위에서 언급 한 언어 참조를 효과적으로 사용할 수있게 될 것입니다.

튜토리얼에 문제가 있으면 LLVM 버그 추적기 또는 메일 링리스트에보고하십시오. 이 자습서는 기능을 수행 할 것으로 예상되며보고 된 문제는 해결됩니다.

LLVM IR을 이해하기위한 또 다른 좋은 시작 리소스는 online demo page입니다. 이 도구를 사용하면 C 코드를 LLVM IR 온라인 (아무 것도 설치하지 않고)으로 컴파일 할 수 있으며 LLVM IR에서 기본 프로그래밍 구문을 표현할 수있는 방법을 이해하는 데 매우 중요합니다.

+2

고마워요! 그 데모 페이지를 본 적이 없었습니다. 그게 바로 제가 찾고 있던 페이지입니다. – chameco

+0

@chameco : 데모 페이지는 정말 유용합니다. 개인적으로 종종 Clang이 어떤 종류의 최적화를 수행 할 수 있는지 확인하기 위해 자주 사용합니다. 실제로 사람들이 조명을보고 코드에서 너무 낮은 레벨이되는 것을 피하는 데 도움이됩니다. –

+0

다른 LLVM 타겟을위한 어셈블리 언어를 살펴 보도록하겠습니다. http://ellcc.org/demo –

관련 문제