본문 바로가기

ir tree

(2)
8. Instruction Selection IR언어는 각각의 tree마다 하나의 연산만을 표현한다.예를들어 다음과 같은 연산의경우MEM(BINOP(PLUS, TEMP(t), CONST(c)))아래의 그림과 같이 tree로 표현할 수 있다. 메로리 접근을 할 때 load/store instruction을 통해서 한다.이때 각각의 명령어는 어떤 레지스터도 접근 가능하다.그리고 레지스터 중에서 r0은 special register로 항상 0을 가진다.각 명령어의 대기 시간은 한 사이클이고 이 한 사이클에 한 명령만 가능하다. 이제 기본적인 연산에 대해서 보면 다음과 같다.ADD rd= rs1 + rs2 이는 기본적인 덧샘을 하는 연산이다.ADDI rd= rs + c 이는 특별히 레지스터에 상수를 더해주는 연산이다.SUB rd= rs1 – rs2 이는 ..
6. Translation to Intermediate Code Intermediate Representation(IR)기계어 연산을 표현할 수 있는 추상적 언어로 소스 언어와 무관하고 컴파일러마다 IR이 다를 수 있다.IR은 필수는 아니지만 호환성을 위해서 있으면 좋다.왜냐하면 IR을 사용하면 언어간에 바꾸기 편하고, 이해하기 쉽고, CPU의 차이를 잘 반영할 수 있기 때문이다. CISC: 1개의 복잡한 일을 다루는 것으로 더 복잡한 코드를 1개의 명령어로 표현 가능하다RISC: 명령어가 단순한 작업일 때 사용하는 것으로 더 많은 명령어가 사용 가능하다. Assembly Languageword는 프로세서가 다룰 수 있는 단위로 일반적으로 레지스터의 크기를 의미한다.여기서 %eax, %ecx, %edx, %ebx, %esi, %edi는 32-bit register를 ..