An Efficient Code Expansion from EM to SPARC Code

EM에서 SPARC 코드로 효율적인 코드 확장

  • 오세만 (동국대학교 컴퓨터공학과) ;
  • 윤영식 (동국대학교 컴퓨터공학과)
  • Published : 1997.10.01

Abstract

There are two kinds of backends in ACK:code generator(full-fledged backend) and code expander(fast backend). Code generators generate target code using string pattern matching and code expanders generate target code using macro expansion. ACK translates EM to SPARC code using code expander. The corresponding SPARC code sequences for a EM code are generated and then push-pop optimization is performed. But, there is the problem of maintaining hybrid stack. And code expander is not considered to passes parameters of a procedure call through register windows. The purpose of this paper is to improve SPARC code quality. We suggest a method of SPARC cod generation using EM tree. Our method is divided into two phases:EM tree building phase and code expansion phase. The EM tree building phase creates the EM tree and code expansion phase translates it into SPARC code. EM tree is designed to pass parameters of a procedure call through register windows. To remove hybrid stack, we extract an additional information from EM code. We improved many disadvantages that arise from code expander in ACK.

ACK는 가상 스택 기계에 기반을 둔 EM 중간 코드로부터 레지스터 구조에 기반을 둔 SPARC 기계에 대한 목적 코드를 생성하기 위해서는 코드 확장기(code expander)를 이용하고 있다. 따라서 EM 코드로부터 SPARC 목적 코드를 생성하기 위해 스택 지향 구조로부터 레지스터 지향 구조로 변환하여야 한다. 코드 확장기를 이용한 SPARC 코드 생성 기법은 각 EM 명령어에 대해 SPARC 코드로 확장하는 루틴들로 구성되며 코드 생성기에 비해 코드의 질을 개선하기 위해 푸쉬-팝 최적화 동작을 수행한다. 하지만 코드 확장시에 별도의 자원과 관리를 요구하는 혼합 스택(hybrid stack)을 이용하고 있으며 전단부의 정보 손실로 레지스터 윈도우를 이용한 효율적인 매개변수 전달을 고려하지 않는다. 본 논문에서는 ACK의 전체적인 구조의 변경 없이 목적 기계의 스택과 매개변수 전달을 고려하나 효율적인 SPARC 코드를 생성하기 위해 EM 트리를 이용한 SPARC 코드 확장기를 설계하고 구현하였다. 이를 위해, 순차적인 EM 코드를 입력으로 받아 스택 속성을 반영한 트리로 구성하며 혼합 스택을 제거하기 위해 지역 변수 정보를 별도로 관리하였다. EM 트리의 순회 및 확장 과정에서 목적 코드를 생성할 수 있는 루틴을 통하여 목적 코드를 출력하며 추출된 정보와 노드의 성격에 출력 시기와 목적 코드를 결정한다.

Keywords