KR19990067823A - 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법 - Google Patents

최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법 Download PDF

Info

Publication number
KR19990067823A
KR19990067823A KR1019990000383A KR19990000383A KR19990067823A KR 19990067823 A KR19990067823 A KR 19990067823A KR 1019990000383 A KR1019990000383 A KR 1019990000383A KR 19990000383 A KR19990000383 A KR 19990000383A KR 19990067823 A KR19990067823 A KR 19990067823A
Authority
KR
South Korea
Prior art keywords
function
register
management table
interruption
use register
Prior art date
Application number
KR1019990000383A
Other languages
English (en)
Other versions
KR100305097B1 (ko
Inventor
후따마따히데하루
Original Assignee
가네꼬 히사시
닛뽕덴끼 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가네꼬 히사시, 닛뽕덴끼 가부시끼가이샤 filed Critical 가네꼬 히사시
Publication of KR19990067823A publication Critical patent/KR19990067823A/ko
Application granted granted Critical
Publication of KR100305097B1 publication Critical patent/KR100305097B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본원의 컴파일러는, 함수별 사용 레지스터 관리 테이블 (50) 과, 소스 프로그램에서 생성된 중간 코드에 기초하여, 함수별로, 사용 레지스터와 호출 함수명을 추출하여 함수별 사용 레지스터 관리 테이블 (50) 에 등록하는 함수별 사용 레지스터 추출부 (60) 와, 인터럽션 함수에 의해 호출되는 호출 함수에 의해 사용되는 레지스터들을 집계하고, 인터럽션 함수의 사용 레지스터로서 함수별 사용 레지스터 관리 테이블 (50) 에 집계된 레지스터들을 새로 등록하는 함수별 사용 레지스터 집계부 (70), 및 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 중간 코드에, 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 출력부 (80) 를 구비한다.

Description

최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법{COMPILER CAPABLE OF REDUCING INTERRUPT HANDLING IN OPTIMIZATION AND ITS OPTIMIZATION METHOD}
본 발명은 소스 프로그램을 오브젝트 프로그램으로 변환하는 컴파일러와, 이 컴파일러에 의한 최적화 방법에 관한 것으로, 특히 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법에 관한 것이다.
그 구성에 인터럽트 처리 기능을 갖는 디바이스를 목표로 하는 컴파일러는, 컴파일시에 상기 인터럽트 처리 기능을 처리하는 것이 필요하다. 일반적으로, 디바이스의 인터럽션 발생시에 분기하는(branching) 루틴, 즉 인터럽션 함수는, 소스 프로그램에 기술되어, 상기 인터럽트 처리 기능을 처리할 수 있도록 디자인된다.
상기 인터럽션 함수는, 소스 프로그램의 실행중에 부정기적으로 분기한다. 분기전에 사용되었던 레지스터의 내용을 보호하기 위하여, 인터럽션 함수의 개시시에 사용될 수도 있는 레지스터의 모든 내용이 저장되어야 하고, 인터럽션 함수의 종료후에, 저장된 레지스터의 내용이 복귀되어야 한다.
상기 종류의 종래 기술로서, 일본 특개평 2-257224 호의 "연계 편집 처리장치" 에 개시된 장치가 있다. 상기 공보에 개시된 연계 편집 처리장치는, 재귀적(recursive) 호출이 없는 경우에, 함수를 호출하는 곳에서(at a function calling party) 사용되는 레지스터 (호출원의 레지스터) 와, 함수가 호출되는 곳에서(at a function called party) 사용되는 레지스터 (호출선의 레지스터) 가 서로 일치하지 않을 때, 레지스터의 저장/복귀를 지시하는 용장 명령을 삭제한다. 이에 의하여, 코드 사이즈의 삭감 및 소스 프로그램의 실행시간을 단축하는 편집처리의 최적화가 이루어진다.
상기 편집처리의 최적화 방법은, 통상의 함수 호출에 있어서, 호출선에서 호출원의 레지스터의 내용을 파괴하지 않기 위하여, 함수 호출 명령전에 호출원의 레지스터의 저장 명령을 출력하고, 함수 호출 명령후에 저장된 레지스터의 복귀 명령을 출력하는 코드를 필요로 한다. 호출 함수 정보와 사용 레지스터 정보를 등록하는 테이블을 구비, 이 테이블을 참조하여, 호출원의 함수의 레지스터의 저장/복귀된 레지스터에서, 호출선에서 사용되지 않는 레지스터의 불필요한 저장/복귀 코드를 삭제한다.
도 7 은 특개평 2-257224 호에 개시된 편집 처리의 최적화 방법과 같은 방식으로 불필요한 레지스터의 저장/복귀 코드를 삭제하는 종래의 컴파일러의 구성예를 나타낸다. 도 7 에 도시된 컴파일러는, 소스 프로그램을 수신하여 자구 해석 (lexical analysis)을 수행하는 입력부 (701) 와, 자구 배열로부터 구문(syntax)을 해석한 후에 구문목(syntactic tree)을 작성하는 구문 해석부 (702) 와, 구문목을 최적화하는 최적화부 (703) 와, 최적화된 구문목에 기초하여 중간 코드 (712) 를 생성하는 코드 생성부 (704) 와, 호출 함수 정보와 사용 레지스터 정보를 등록하는 함수별 사용 레지스터 관리 테이블 (705) 과, 중간 코드 (712) 의 해석후에 함수별 사용 레지스터 관리 테이블 (705) 에 함수마다의 호출 함수명과 사용 레지스터를 등록하는 함수별 사용 레지스터 추출부 (706), 및 호출선에서 사용되지 않는 레지스터의 저장/복귀 코드를 삭제한 어셈블리 프로그램 파일 (713) 을 출력하는 출력부 (708) 를 구비한다.
도 7 을 참조하면, 컴파일러에 있어서, 특개평 2-257224 호에 개시된 종래의 컴파일러 최적화 방법은, 일반적인 컴파일러의 코드 생성부 (704) 뒤에, 함수별 사용 레지스터 관리 테이블 (705) 과, 정보를 상기 테이블에 출력하는 함수별 사용 레지스터 추출부 (706) 를 참조하여, 호출원의 함수의 저장/복귀된 레지스터에서, 호출선에서 사용되지 않는 레지스터의 저장/복귀 코드를 삭제하는 출력부 (708) 를 부가적으로 공급함으로써 달성될 수 있다는 것을 용이하게 이해할 수 있다.
다음으로, 컴파일러의 종래의 최적화 방법은, 도 7 과 소스 프로그램 (711) 의 일례를 나타내는 도 6 을 참조하여 설명된다. 코드 생성부 (704) 에 의해 출력되는 중간 코드에 대응하는 부분을 참조하면, 도 6 에 나타난 소스 프로그램에는, 함수 f6 내에 존재하는 함수 f5 에 대한 호출 함수 앞에, 함수 f6 에 의해 사용되는 레지스터 "g", "h" 의 저장 코드가 있고, 함수 f5 에 대한 호출 함수 뒤에, 함수 f6 에 의해 사용되는 레지스터 "g", "h" 의 복귀 코드가 있다.
입력된 중간 코드 (712) 에 따르면, 함수별 사용 레지스터 추출부 (706) 는 함수 f6 의 정의를 인식하고, 함수 f6 로부터 호출되는 함수명 f5 와, 함수 f6 에 의해 사용되는 레지스터명 "g", "h" 를 함수별 사용 레지스터 관리 테이블 (705) 내에 등록한다. 다음으로, 상기 추출부 (706) 는 함수 f5 의 정의를 인 식하고, 함수 f5 에 의해 사용되는 레지스터명 "f" 를 함수별 사용 레지스터 관리 테이블 (705) 내에 등록한다.
출력부 (708) 는, 함수별 사용 레지스터 관리 테이블 (705) 을 참조하여, 함수 f6 에 의해 사용되는 레지스터 "g", "h" 와, 함수 f5 에 의해 사용되는 레지스터 "f" 사이에 중복되는 어떤 레지스터명도 발견되지 않는 것을 인식한다. 그리고 나서, 함수 f5 에 대한 호출 명령전의 레지스터 "g", "h" 의 저장 코드와, 함수 f5 에 대한 호출 명령후의 레지스터 "g", "h" 의 복귀 코드가 삭제되어, 그에 의하여 어셈블리 프로그램 파일 (713) 을 출력한다.
그러나, 상기 언급된 종래의 컴파일러의 최적화 방법으로는, 인터럽션 함수와 같이, 프로그램의 임의의 어드레스에서 분기하는 함수에 관한 레지스터의 저장/복귀 코드를 삭제할 수 없다.
그 이유는, 호출원의 어떤 함수도 갖지 않는 인터럽션 함수는 디바이스의 인터럽션 발생시에 사용하고 있는 레지스터의 내용을 파괴하지 않기때문에, 호출선의 함수에 상당하는 인터럽션 함수의 선두(head)에 레지스터의 저장 명령을 제공하고, 인터럽션 함수의 종단에 레지스터의 복귀 명령을 제공하는 것이 필요하더라도, 상기 저장/복귀 코드를 삭제하기 위하여는 호출원의 함수의 사용 레지스터 정보가 필요하므로, 불필요하게 저장/복귀된 레지스터가 검출될 수 없기 때문이다.
다시 도 6 및 도 7 을 참조하면, 함수 f6 는 인터럽션 함수이므로, 레지스터의 저장 및 복귀가 함수 f6 의 선두 및 종단에서 각각 수행되고, 부정기적인 인터럽션의 발생시에 사용하고 있는 레지스터는 불명료하다. 따라서, 모든 레지스터는 함수 f6 의 선두에서 저장되고, 그 종단에서 복귀된다.
종래의 출력부 (708) 는, 호출원의 레지스터의 저장/복귀 코드로부터, 함수별 사용 레지스터 관리 테이블 (705) 에서, 호출선의 사용중이 아닌 레지스터의 저장/복귀 코드를 삭제한다. 따라서, 함수 f6 의 선두의 모든 레지스터의 저장 코드와, 함수 f6 의 종단의 모든 레지스터의 복귀 코드가 삭제될 수 없다.
상기 언급된 것처럼, 종래의 컴파일러와 종래의 컴파일러 최적화 방법은, 레지스터의 저장/복귀 코드가, 인터럽션 함수와 같이, 프로그램의 임의의 어드레스에서 분기하는 함수에서 삭제될 수 없다는 결점이 있다.
상기 종래의 결점을 해결하기 위하여, 본 발명의 목적은, 인터럽션 함수의 코드 출력시에 불필요한 레지스터의 저장/복귀 코드를 삭제함으로써 처리 효율의 향상을 실현하는 컴파일러 및 그의 최적화 방법을 제공하는 것이다.
도 1 은 본 발명의 일실시예에 따른 컴파일러의 구성을 나타내는 블록도.
도 2 는 상기 실시예에 따른 동작을 나타내는 순서도.
도 3a 는 상기 실시예에 따른 최적화의 상세한 동작과, 함수별 사용 레지스터 추출부의 동작을 나타내는 순서도.
도 3b 는 상기 실시예에 따른 최적화의 상세한 동작과, 함수별 사용 레지스터 집계부의 동작을 나타내는 순서도.
도 3c 는 상기 실시예에 따른 최적화의 상세한 동작과, 함수별 사용 레지스터 집계부의 사용 레지스터 집계 처리의 동작을 나타내는 순서도.
도 4 는 상기 실시예에 따른 최적화의 상세한 동작과, 출력부의 동작을 나타내는 순서도.
도 5 는 함수별 사용 레지스터 관리 테이블의 내용의 일례를 나타내는 도면.
도 6 은 소스 프로그램의 일례를 나타내는 도면.
도 7 은 종래의 컴파일러의 구성을 나타내는 블록도.
본 발명의 제 1 태양에 의하면, 소스 프로그램을 읽어들여 자구 해석 및 구문 해석을 수행하여, 중간 코드를 생성하고, 함수의 사용 레지스터의 저장/복귀 코드를 부가하여, 어셈블리 프로그램 파일을 생성하는 컴파일러는,
상기 소스 프로그램중의 함수별로, 함수의 사용 레지스터에 관한 정보와 이 함수에 의해 호출되는 호출 함수에 관한 정보를 등록하는 함수별 사용 레지스터 관리 테이블과,
상기 중간 코드의 해석후에, 함수별로, 사용 레지스터와 호출 함수명을 추출하여, 이를 함수별 사용 레지스터 관리 테이블내에 등록하는 함수별 사용 레지스터 추출 수단과,
상기 함수별 사용 레지스터 추출 수단에 의해 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터로서 함수별 사용 레지스터 관리 테이블에 새로 등록하는 함수별 사용 레지스터 집계 수단, 및
상기 함수별 사용 레지스터 집계 수단에 의해 집계된 상기 사용 레지스터들을 갖는 상기 함수별 사용 레지스터 관리 테이블을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 출력 수단을 구비한다.
바람직한 구성예에서, 함수별 사용 레지스터 관리 테이블은, 함수명을 등록하는 함수명 난과, 함수의 사용 레지스터명을 등록하는 사용 레지스터 난, 및 함수에 의해 호출되는 호출 함수명을 등록하는 호출 함수 난을 구비한다.
다른 바람직한 구성예에서, 함수별 사용 레지스터 집계 수단은, 상기 함수별 사용 레지스터 관리 테이블에 등록되어 있는 정보를 함수별로 순차적으로 읽어서, 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하고, 이 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 집계 수단은 함수별 사용 레지스터 관리 테이블로부터 호출 함수를 삭제하고, 함수별 사용 레지스터 관리 테이블로부터 호출 함수의 레지스터 정보를 독출하여, 호출 함수의 사용 레지스터와 호출원의 함수의 사용 레지스터를 병합한다.
다른 바람직한 구성예에서, 함수별 사용 레지스터 집계 수단은, 상기 함수별 사용 레지스터 관리 테이블에 등록되어 있는 정보를 함수별로 순차적으로 읽어서, 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하여, 이 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 집계 수단은 함수별 사용 레지스터 관리 테이블로부터 호출 함수를 삭제하고, 함수별 사용 레지스터 관리 테이블로부터 호출 함수의 레지스터 정보를 독출하여, 상기 함수에 의해 호출되는 호출 함수가 더 존재하는가 여부를 판단하여서, 상기 호출 함수에 의해 호출되는 호출 함수가 더 존재하면, 상기 집계 수단은 상기 호출 함수를 삭제하고 상기 호출 함수에 관한 정보를 읽는 동작을 재귀적으로 반복하며, 그리고 주목된(noticed) 함수에 의해 호출되는 호출 함수가 더 이상 없을 때는, 상기 집계 수단은 상기 주목된 함수의 사용 레지스터와, 상기 주목된 함수의 호출원인 함수의 사용 레지스터를 병합한다.
다른 바람직한 구성예에서, 상기 출력 수단은, 상기 중간 코드중의 인터럽션 함수에 관하여, 인터럽션 함수 본체를 출력하고, 상기 인터럽션 함수 본체의 앞에 상기 인터럽션 함수의 사용 레지스터의 저장 코드를 출력하며, 그리고 상기 인터럽션 함수 본체의 뒤에 상기 인터럽션 함수의 사용 레지스터의 복귀 코드를 출력하며, 한편,
상기 인터럽션 함수 이외의 함수에 관하여, 상기 출력 수단은 함수 본체를 출력한다.
본 발명의 제 2 태양에 따르면, 소스 프로그램을 읽어 자구 해석과 구문 해석을 수행하여, 중간 코드를 생성하며, 그리고 함수의 사용 레지스터의 저장/복귀 코드를 부가하여, 어셈블리 프로그램 파일을 생성하는 컴파일러의 최적화 방법은,
상기 중간 코드의 해석후에, 함수마다, 사용 레지스터와 호출 함수명을 추출하여, 이를 함수별 사용 레지스터 관리 테이블에 등록하는 단계와,
상기 사용 레지스터 등록 단계에 의해 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터로서 함수별 사용 레지스터 관리 테이블에 새로 등록하는 단계, 및
상기 사용 레지스터 집계 단계에 의해 집계된 상기 사용 레지스터들을 갖는 함수별 사용 레지스터 관리 테이블을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 단계를 구비한다.
바람직한 구성예에서, 함수별 사용 레지스터 집계 단계는, 상기 함수별 사용 레지스터 관리 테이블에 등록되어 있는 정보를 함수별로 순차적으로 읽어서, 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계와, 이 함수에 의해 호출되는 호출 함수가 존재할 때, 함수별 사용 레지스터 관리 테이블로부터 호출 함수를 삭제하고, 함수별 사용 레지스터 관리 테이블로부터 호출 함수의 레지스터 정보를 독출하여, 호출 함수의 사용 레지스터와 호출원의 함수의 사용 레지스터를 병합하는 단계를 더 구비한다.
다른 바람직한 구성예에서, 함수별 사용 레지스터 집계 단계는, 상기 함수별 사용 레지스터 관리 테이블에 등록되어 있는 정보를 함수별로 순차적으로 읽어서, 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계와, 이 함수에 의해 호출되는 호출 함수가 존재할 때, 함수별 사용 레지스터 관리 테이블로부터 호출 함수를 삭제하고, 함수별 사용 레지스터 관리 테이블로부터 호출 함수의 레지스터 정보를 독출하여, 상기 함수에 의해 호출되는 호출 함수가 더 존재하는가 여부를 판단하는 단계와, 상기 언급된 호출 함수에 의해 호출되는 호출 함수가 더 존재할 때, 상기 호출 함수를 삭제하고 상기 호출 함수에 관한 정보를 읽는 동작을 재귀적으로 반복하는 단계, 및 주목된 함수로부터 호출되는 호출 함수가 더 이상 없을 때, 상기 주목된 함수의 사용 레지스터와, 상기 주목된 함수의 호출원인 함수의 사용 레지스터를 병합하는 단계를 더 구비한다.
다른 바람직한 구성예에서, 상기 출력 단계는 상기 중간 코드중의 함수가 인터럽션 함수인가의 여부를 판단하는 단계를 구비하며, 그리고
인터럽션 함수에 관하여, 상기 단계는 상기 인터럽션 함수 본체의 앞에 상기 인터럽션 함수의 사용 레지스터의 저장 코드를 출력하는 단계와, 상기 인터럽션 함수 본체를 출력하는 단계, 및 상기 인터럽션 함수 본체의 뒤에 상기 인터럽션 함수의 사용 레지스터의 복귀 코드를 출력하는 단계를 구비한다.
본 발명의 다른 태양에 의하면, 컴퓨터 시스템에서, 소스 프로그램을 읽어 자구 해석과 구문 해석을 수행하여, 중간 코드를 생성하며, 그리고 함수의 사용 레지스터의 저장/복귀 코드를 부가함으로써 어셈블리 프로그램 파일을 생성하는 제어 프로그램을 저장하는 컴퓨터 판독가능 메모리에 있어서, 상기 제어 프로그램은,
상기 중간 코드의 해석후에, 함수별로, 사용 레지스터와 호출 함수명을 추출하여, 이를 함수별 사용 레지스터 관리 테이블에 등록하는 단계와,
상기 사용 레지스터 등록 단계에 의해 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터들로서 함수별 사용 레지스터 관리 테이블에 새로 등록하는 단계, 및
상기 사용 레지스터 집계 단계에 의해 집계된 상기 사용 레지스터들을 갖는 함수별 사용 레지스터 관리 테이블을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 단계를 구비한다.
본 발명의 다른 목적, 특징 및 장점은 하기의 상세한 설명으로부터 명백해질 것이다.
본 발명의 바람직한 실시예에 대하여 첨부 도면들을 참조하여 상세하게 하기에 설명한다. 다음의 설명에서, 다수의 특정 상세들은 본 발명의 완전한 이해를 위하여 제공된다. 그러나, 특정 상세들없이도 본 발명이 실시될 수 있음을 종래 기술에 숙련된 사람들에게는 명백하다. 다른 예에서는, 잘 알려진 구성들은 본 발명의 불필요한 모호함을 방지하기 위하여 상세하게 설명되지 않았다.
도 1 은 본 발명의 일실시예에 따른 컴파일러의 구성을 나타내는 블록도이다. 도 1 을 참조하면, 본 실시예의 컴파일러는, 입력부 (10) 와, 구문 해석부 (20), 최적화부 (30), 코드 생성부 (40), 호출 함수와 사용 레지스터에 관한 정보를 등록하는 함수별 사용 레지스터 관리 테이블 (50) 과, 중간 코드 (112) 의 해석후에 함수별 호출 함수명과 그 사용 레지스터를 함수별 사용 레지스터 관리 테이블 (50) 에 등록하는 함수별 사용 레지스터 추출부 (60) 및 함수별 사용 레지스터 집계부 (70) 와, 어셈블리 프로그램 파일 (113) 을 출력하는 출력부 (80) 를 구비한다. 함수별 사용 레지스터 관리 테이블 (50) 은 함수명을 등록하는 함수명 난 (51) 과, 사용 레지스터명을 등록하는 사용 레지스터 난 (52), 및 호출 함수명을 등록하는 호출 함수 난 (53) 을 구비한다. 도 1 에는 상기 실시예의 특징적 구성만이 나타나 있고, 다른 일반적 구성에 대한 설명은 생략되어 있다.
상기 구성들중에서, 입력부 (10) 와, 구문 해석부 (20), 최적화부 (30), 코드 생성부 (40), 함수별 사용 레지스터 관리 테이블 (50), 및 함수별 사용 레지스터 추출부 (60) 는 각각 도 7 에 도시된 종래의 컴파일러에 있어서 입력부 (701), 구문 해석부 (702), 최적화부 (703), 코드 생성부 (704), 함수별 사용 레지스터 관리 테이블 (705), 및 함수별 사용 레지스터 추출부 (706) 와 동일하다. 더욱 구체적으로는, 입력부 (10) 는 소스 프로그램 (111) 을 수신하여, 자구를 해석하고, 자구 배열을 생성하며, 그리고 그것을 구문 해석부 (20) 로 출력한다. 상기 구문 해석부 (20) 는 상기 입력부 (10) 에 의해 생성된 자구 배열로부터 구문을 해석하여, 구문목을 생성하며, 그리고 그것을 최적화부 (30) 로 출력한다. 상기 최적화부 (30) 는 상기 구문 해석부 (20) 에 의해 생성된 구문목을 최적화하여, 그것을 코드 생성부 (40) 로 출력한다. 상기 코드 생성부 (40) 는 상기 최적화부 (30) 에 의해 최적화된 구문목에 기초하여 중간 코드 (112) 를 생성한다. 함수별 사용 레지스터 추출부 (60) 는 상기 중간 코드 (112) 를 해석하고 호출명, 그의 사용 레지스터명, 및 호출 함수명을 함수별 사용 레지스터 관리 테이블 (50) 내에 등록한다.
함수별 사용 레지스터 집계부 (70) 는 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여 인터럽션 함수에 의해 호출되는 함수에 사용되는 레지스터들을 집계한다. 그들은 함수별 사용 레지스터 관리 테이블 (50) 내로 인터럽션 함수의 사용 레지스터들로서 다시 등록된다. 더욱 구체적으로는, 인터럽션 함수에 의해 호출되는 모든 함수들의 함수별 사용 레지스터 관리 테이블 (50) 의 대응 사용 레지스터 난 (52) 의 레지스터명들과, 상기 함수들에 의해 호출되는 모든 함수들의 함수별 사용 레지스터 관리 테이블 (50) 의 대응 사용 레지스터 난 (52) 의 레지스터명들은, 함께 병합되어, 인터럽션 함수의 함수별 사용 레지스터 관리 테이블 (50) 의 사용 레지스터 난 (52) 에 등록된다.
상기 출력부 (80) 는 호출선에서 사용되지 않는 레지스터의 저장/복귀 코드를 삭제하고, 상기 중간 코드 (112) 와 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 포함하는 어셈블리 프로그램 파일 (113) 을 출력한다.
도 2 는 도 1 에 도시된 실시예의 컴파일러에 의한 동작을 나타내는 순서도이다. 도 2 를 참조하면, 상기 실시예의 컴파일러에서, 입력부 (10) 는 소스 프로그램 (111) 을 수신하여 자구 배열을 생성한다(단계 201). 다음으로, 구문 해석부 (20) 는 상기 생성된 자구 배열을 사용하여 구문 해석을 수행한다(단계 202). 상기 최적화부 (30) 는 구문목을 최적화한다(단계 203). 상기 코드 생성부 (40) 는 상기 최적화된 구문목에 기초하여 중간 코드 (112) 를 생성한다(단계 204). 그 다음으로, 함수별 사용 레지스터 추출부 (60) 와 함수별 사용 레지스터 집계부 (70) 가 상기 중간 코드 (112) 를 해석하여, 함수명, 그의 사용 레지스터명, 및 호출 함수명을 함수별 사용 레지스터 관리 테이블 (50) 내로 등록한다(단계 205 및 206). 상기 출력부 (80) 는 어셈블리 프로그램 파일을 생성하여 이를 출력한다(단계 207).
함수별 사용 레지스터 추출부 (60) 와, 함수별 사용 레지스터 집계부 (70), 및 출력부 (80) 에 의한 단계 205 내지 207 의 동작에 대하여 도 3a 내지 3c 및 도 4 의 순서도들을 참조하여 상세하게 설명한다.
도 3a 를 참조하면, 함수별 사용 레지스터 추출부 (60) 가 중간 코드 (112) 를 읽어, 소스 프로그램 (111) 중의 함수의 정의를 인식할 때, 상기 추출부 (60) 는 함수명 f1 을 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 에 등록한다(단계 301 및 302). 다음으로, 상기 추출부 (60) 는 동일 함수의 레지스터명을 함수별 사용 레지스터 관리 테이블 (50) 의 사용 레지스터 난 (52) 에 등록한다(단계 303). 그리고 나서, 상기 추출부 (60) 는 호출되는 함수의 함수명을 함수별 사용 레지스터 관리 테이블 (50) 의 호출 함수 난 (53) 에 등록한다(단계 304). 현재 동작중인 함수가 파일의 마지막 함수인가의 여부가 판단되어, 그것이 마지막 함수가 아닐 때는, 다음 함수의 정의가 검출되는 반면에, 그것이 마지막 함수인 때에는, 처리가 종료된다(단계 305).
도 3b 를 참조하면, 함수별 사용 레지스터 집계부 (70) 는 처음에는 정보가 함수별 사용 레지스터 관리 테이블 (50) 에 등록되었는가를 판단한다. 만약 정보가 그 안에 등록되어 있다면, 함수명 난 (51) 의 각 함수명이 제 1 라인으로부터 순차적으로 읽혀지고(단계 311 및 312), 각 함수명이 호출 함수 난 (53) 에 등록되었는가의 여부가 판단된다. 상기 집계부 (70) 가 함수명이 등록되었음을 인식할 때, 상기 함수명은 호출 함수 난 (53) 으로부터 삭제되고(단계 313 및 314), 함수별 사용 레지스터 집계 수속이 호출된다(단계 315).
도 3c 를 참조하면, 함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 집계 수속에 있어서, 상기 제 1 라인으로부터 함수명 난 (51) 의 각 함수명을 순차적으로 읽고(단계 321), 각 함수명이 호출 함수 난 (53) 에 등록되었는가의 여부를 판단한다. 상기 집계부 (70) 가 함수명이 호출 함수 난 (53) 에 등록되었음을 인식할 때, 상기 함수명은 호출 함수 난 (53) 에서 삭제되고(단계 322 및 323), 함수별 사용 레지스터 집계 수속이 더욱 진행된다(단계 324). 한편, 상기 집계부 (70) 가 함수명이 호출 함수 난 (53) 에 등록되었다고 인식하지 못하는 경우에는, 함수가 호출선의 함수의 사용 레지스터가 호출되고, 이것은 호출원의 함수의 레지스터와 함께 호출원의 함수의 사용 레지스터 난 (52) 에 등록되고, 함수별 사용 레지스터 집계 수속이 종료된다(단계 325).
도 4 를 참조하면, 출력부 (80) 는 중간 코드 (112) 를 읽어, 소스 프로그램 (111) 의 인터럽션 함수를 검출한다. 함수가 인터럽션 함수라고 판단되면, 출력부 (80) 는 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록되어 있는 레지스터의 저장 코드를 출력한다(단계 401 및 402). 또한, 출력부 (80) 는 함수 본체의 출력 코드를 출력하고(단계 403), 그 후에 저장된 레지스터의 복귀 코드를 출력한다(단계 404). 한편, 함수가 인터럽션 함수가 아닌 경우에는, 출력부 (80) 는 곧바로 함수 본체의 출력 코드를 출력한다. 상기 처리는 파일의 종단까지 반복되고, 파일의 종단이 처리되었을 때 상기 처리가 종료된다(단계 406).
상술한 실시예의 컴파일러는, 워크스테이션, 퍼스널 컴퓨터 등과 같은 컴퓨터 시스템에서, 프로그램에 의해 제어되는 CPU 와, RAM 등과 같은 내부 메모리로 실현될 수 있다. CPU 를 제어하는 컴퓨터 프로그램은, 자기 디스크, 광 디스크, 반도체 메모리, 또는 다른 일반적 저장 매체에 저장되어 제공되고, 상술된 구성요소들의 각 기능은 상기 프로그램을 컴퓨터 시스템의 내부 메모리내로 로드하여 CPU 를 제어함으로써 실현된다.
다음으로, 도 6 에 도시된 소스 프로그램에 대한 처리와 관련하여, 실시예의 동작이 더욱 구체적으로 설명된다.
소스 프로그램 (111) 을 수신하는 입력부 (10) 와, 구문목을 생성하는 구문 해석부 (20) 와, 최적화를 수행하는 최적화부 (30) 와, 중간 코드 (112) 를 생성하는 코드 생성부 (40) (도 2 의 단계 201 내지 204 참조) 의 동작들은, 종래의 컴파일러의 동작들과 동일하므로, 그 설명을 생략한다.
함수별 사용 레지스터 추출부 (60) 의 동작에 대해 도 3a 의 순서도 및 도 6 을 참조하여 설명한다. 함수별 사용 레지스터 추출부 (60) 는 중간 코드 (112) 를 수신하여, 각 함수의 정의를 검출한다. 도 6 에 도시된 소스 프로그램에서 함수 f1 의 정의를 인식하면, 추출부 (60) 는 함수명 f1 을 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 에 등록한다(단계 301 및 302). 그리고 나서, 추출부 (60) 는 함수 f1 의 사용 레지스터명을 특정하는 레지스터명 "a", "b" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 또한 추출부 (60) 는 호출선의 함수명 f2, f3 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 호출 함수 난 (53) 에 등록한다(단계 304).
동일한 함수 f1 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이 아니므로, 상기 동작은 단계 301 로 복귀하고, 추출부 (60) 는 다음 함수의 정의를 검출한다(단계 305). 이때, 다음으로 함수 f2 의 정의가 인식된다.
함수별 사용 레지스터 추출부 (60) 는 함수명 f2 를 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 내에 등록한다(단계 301 및 302). 추출부 (60) 는 함수 f2 의 사용 레지스터를 특정하는 레지스터명 "c" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 또한 추출부 (60) 는 호출선의 함수명 f4 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 호출 함수 난 (53) 에 등록한다(단계 304).
다음으로, 함수 f2 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이 아니므로, 상기 동작은 단계 301 로 복귀하고, 추출부 (60) 는 다음 함수의 정의를 검출한다(단계 305). 이때, 다음으로 함수 f3 의 정의가 인식된다.
상기 추출부 (60) 는 함수명 f3 를 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 내에 등록한다(단계 301 및 302). 추출부 (60) 는 함수 f3 의 사용 레지스터를 특정하는 레지스터명 "d" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 또한 추출부 (60) 는 호출선의 함수명 f5 및 f2 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 호출 함수 난 (53) 에 등록한다(단계 304).
함수 f3 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이 아니므로, 상기 동작은 단계 301 로 복귀하고, 추출부 (60) 는 다음 함수의 정의를 검출한다(단계 305). 이때, 다음으로 함수 f4 의 정의가 인식된다.
함수별 사용 레지스터 추출부 (60) 는 함수명 f4 를 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 내에 등록한다(단계 301 및 302). 추출부 (60) 는 함수 f4 의 사용 레지스터를 특정하는 레지스터명 "e" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 또한 추출부 (60) 는 호출선의 함수명 f3 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 호출 함수 난 (53) 에 등록한다(단계 304).
함수 f4 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이 아니므로, 상기 동작은 단계 301 로 복귀하고, 추출부 (60) 는 다음 함수의정의를 검출한다(단계 305). 이때, 다음으로 함수 f5 의 정의가 인식된다.
상기 추출부 (60) 는 함수명 f5 를 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 내에 등록한다(단계 301 및 302). 추출부 (60) 는 함수 f5 의 사용 레지스터를 특정하는 레지스터명 "f" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 도 6 을 참조하면, 함수 f5 는 어떤 함수도 호출하지 않으므로, 추출부 (60) 는 호출 함수 난 (53) 에 아무것도 등록하지 않는다(단계 304).
다음으로, 함수 f5 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이 아니므로, 상기 동작은 단계 301 로 복귀하고, 추출부 (60) 는 다음 함수의 정의를 검출한다(단계 305). 이때, 다음으로 함수 f6 의 정의가 인식된다.
상기 추출부 (60) 는 함수명 f6 를 함수별 사용 레지스터 관리 테이블 (50) 의 함수명 난 (51) 내에 등록한다(단계 301 및 302). 추출부 (60) 는 함수 f6 의 사용 레지스터를 특정하는 레지스터명 "g", "h" 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 사용 레지스터 난 (52) 에 등록한다(단계 303). 또한 추출부 (60) 는 호출선의 함수명 f5 를 함수별 사용 레지스터 관리 테이블 (50) 의 대응하는 호출 함수 난 (53) 에 등록한다(단계 304).
함수 f6 의 정의가 파일의 종단인가의 여부가 판단된다. 그것이 파일의 종단이므로, 함수별 사용 레지스터 추출부 (60) 의 동작이 종료된다(단계 305). 상술된 바와 같이 생성된 함수별 사용 레지스터 관리 테이블 (50) 이 도 5a 에 나타나 있다.
함수별 사용 레지스터 집계부 (70) 의 동작에 대하여 도 3b 및 3c 의 순서도그리고 도 5a 를 참조하여 설명한다. 함수별 사용 레지스터 집계부 (70) 는, 도 5a 의 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 정보가 등록되었는가의 여부를 판단한다. 정보가 도 5a 에 도시된 것처럼 등록되어 있으므로, 상기 집계부 (70) 는 제 1 스트링, 즉 함수 f1 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 함수명 f2 을 인식하여, 상기 호출 함수 난 (53) 에서 함수명 f2 를 삭제한다(단계 313 및 314). 그리고 나서, 상기 집계부 (70) 는 함수별 사용 레지스터 집계 수속을 호출한다(단계 315).
도 3c 를 참조하면, 함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 집계 수속에 있어서, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f1 에 의해 호출되는 함수명 f2 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 함수명 f4 를 인식하여, 상기 호출 함수 난 (53) 에서 함수명 f4 를 삭제한다(단계 322 및 323). 상기 집계부 (70) 는 함수별 사용 레지스터 집계 수속을 재귀적으로 호출한다(단계 324).
함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f2 에 의해 호출되는 함수명 f4 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 함수명 f3 를 인식하여, 상기 호출 함수 난 (53) 에서 함수명 f3 를 삭제한다(단계 322 및 323). 상기 집계부 (70) 는 함수별 사용 레지스터 집계 수속을 재귀적으로 호출한다(단계 324).
이와 유사하게, 함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f4 에 의해 호출되는 함수명 f3 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 함수명 f5 를 인식하여, 상기 호출 함수 난 (53) 에서 함수명 f5 를 삭제한다(단계 322 및 323). 상기 집계부 (70) 는 함수별 사용 레지스터 집계 수속을 재귀적으로 호출한다(단계 324).
이와 유사하게, 함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f3 에 의해 호출되는 함수명 f5 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 함수명도 인식하지 못하면, 상기 집계부 (70) 는 함수명 f5 의 사용 레지스터 "f" 를 함수 f5 의 호출원인 함수 f3 의 사용 레지스터 난 (52) 의 호출 함수 f3 의 사용 레지스터와 병합한다(단계 322 및 325). 그리고 나서, 함수 f5 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
다음으로, 상기 동작은 함수 f3 에 관한 함수별 사용 레지스터 집계 수속으로 복귀하여, 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 다른 함수명 f2 를 인식하여, 상기 호출 함수 난 (53) 에서 함수명 f2 를 삭제한다(단계 322 및 323). 상기 집계부 (70) 는 재귀적으로 함수별 사용 레지스터 집계 수속을 호출한다(단계 324).
함수별 사용 레지스터 집계부 (70) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f3 에 의해 호출되는 함수명 f2 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 함수명도 인식하지 못하면, 상기 집계부 (70) 는 함수명 f2 의 사용 레지스터 "c" 를 함수 f2 의 호출원인 함수 f3 의 사용 레지스터 난 (52) 의 호출 함수 f3 의 사용 레지스터와 병합한다(단계 322 및 325). 그리고 나서, 함수 f2 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
다음으로, 상기 동작은 함수 f3 에 관한 함수별 사용 레지스터 집계 수속으로 복귀한다. 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 더 이상의 함수명을 인식하지 못할 때, 상기 집계부 (70) 는 함수 f3 의 사용 레지스터 "d" 및 상술된 처리에서 함께 병합되었던 사용 레지스터 "f", "c" 를, 함수 f4 의 사용 레지스터와 함께, 함수 f3 의 호출원인 함수 f4 의 사용 레지스터 난 (52) 에 병합한다(단계 322 및 325). 그리고 나서 함수 f3 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
상기 동작은 함수 f4 에 관한 함수별 사용 레지스터 집계 수속으로 복귀한다. 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 더 이상의 함수명을 인식하지 못할 때, 상기 집계부 (70) 는 상술된 처리에서 함께 병합되었던 사용 레지스터 "d", "f", "c" 및 함수 f4 의 사용 레지스터 "e" 를, 함수 f4 의 호출원인 함수 f2 의 사용 레지스터 난 (52) 에 병합한다(단계 322 및 325). 그리고 나서 함수 f4 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
상기 동작은 함수 f2 에 관한 함수별 사용 레지스터 집계 수속으로 복귀한다. 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 더 이상의 함수명을 인식하지 못할 때, 상기 집계부 (70) 는 상술된 처리에서 함께 병합되었던 사용 레지스터 "e", "d", "f" 및 함수 f2 의 사용 레지스터 "c" 를, 함수 f2 의 호출원인 함수 f1 의 사용 레지스터 난 (52) 에 병합한다(단계 322 및 325). 그리고 나서 함수 f2 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
호출되는 함수들에 관하여 모든 사용 레지스터 집계 수속이 종료되었을 때, 상기 동작은 도 3b 에 도시된 동작으로 복귀하고, 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 다음 함수명 f3 를 인식하여 호출 함수 난 (53) 에서 함수명 f3 를 삭제한다(단계 313 및 314). 그리고 나서, 상기 집계부 (70) 는 함수별 사용 레지스터 집계 수속을 호출한다(단계 315).
함수별 사용 레지스터 집계부 (70) 가 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f1 에 의해 호출되는 함수 f3 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 집계부 (70) 는 함수 f3 의 사용 레지스터 "d", "f", "c" 와 함수 f1 의 사용 레지스터를, 함수 f3 의 호출원인 함수 f1 의 사용 레지스터 난 (52) 에 병합한다(단계 322 및 325). 그리고 나서 함수 f3 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
함수별 사용 레지스터 집계 수속이 종료되었을 때, 상기 동작은 도 3b 의 동작으로 복귀한다. 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313). 그리고 나서, 상기 집계부 (70) 는 다음 스트링, 즉, 함수명 f2 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313). 이와 유사하게, 상기 집계부 (70) 는 다음 스트링, 즉, 함수명 f3 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313). 이와 유사하게, 상기 집계부 (70) 는 다음 스트링, 즉, 함수명 f4 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313). 이와 유사하게, 상기 집계부 (70) 는 다음 스트링, 즉, 함수명 f5 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 어떤 다른 함수명도 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313).
동일한 방식으로, 상기 집계부 (70) 는 다음 스트링, 즉, 함수명 f6 의 스트링을 읽는다(단계 311 및 312). 상기 집계부 (70) 는 호출 함수 난 (53) 에 등록된 함수명 f5 를 인식하여 상기 호출 함수 난 (53) 에서 함수명 f5 를 삭제한다(단계 313 및 314). 호출선의 함수가 존재하므로, 함수별 사용 레지스터 집계 수속이 호출된다(단계 315).
도 3c 를 참조하면, 함수별 사용 레지스터 집계부 (70) 가 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f6 에 의해 호출되는 함수 f5 의 스트링을 읽는다(단계 321). 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 더 이상의 함수명을 인식하지 못할 때, 상기 집계부 (70) 는 함수 f5 의 사용 레지스터 "f" 와 함수 f6 의 사용 레지스터를, 함수 f5 의 호출원인 함수 f6 의 사용 레지스터 난 (52) 에 병합한다(단계 322 및 325). 그리고 나서 함수 f5 에 관한 함수별 사용 레지스터 집계 수속이 종료된다.
함수별 사용 레지스터 집계 수속이 종료되었을 때, 상기 동작은 도 3b 의 동작으로 복귀한다. 상기 집계부 (70) 가 호출 함수 난 (53) 에 등록된 더 이상의 함수명을 인식하지 못할 때, 상기 동작은 단계 311 로 복귀한다(단계 313). 상기 집계부 (70) 가 함수별 사용 레지스터 관리 테이블 (50) 에서 함수 f6 다음에 더 이상의 스트링이 존재하지 않다고 판단할 때, 함수별 사용 레지스터 집계부 (70) 에 의한 모든 처리가 종료된다(단계 311). 상술된 바와 같이 생성된 함수별 사용 레지스터 관리 테이블 (50) 이 도 5b 에 나타나 있다.
출력부 (80) 의 동작에 대하여는 도 4 의 순서도, 도 5b 및 도 6 을 참조하여 설명한다. 출력부 (80) 는 중간 코드 (112) 를 수신하여, 인터럽션 함수를 검출한다. 도 6 에 도시된 소스 프로그램의 함수 f1 이 인터럽션 함수라고 판단되면, 상기 출력부 (80) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수명 f1 의 스트링을 참조하여, 사용 레지스터 난 (52) 에 등록되어 있는 레지스터 "a", "b", "c", "e", "d" 의 저장 코드를 출력한다(단계 401 및 402).
다음으로, 출력부 (80) 는 함수 f1 본체의 코드를 출력한다(단계 403). 그후에, 상기 출력부 (80) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수명 f1 의 스트링을 다시 참조하여, 사용 레지스터 난 (52) 에 등록되어 있는 레지스터 "a", "b", "c", "e", "d", 및 "f" 의 복귀 코드를 출력한다(단계 404).
상기 출력부 (80) 는 함수 f1 이 파일의 종단인지를 판단한다. 그것이 파일의 종단이 아니므로, 상기 출력부 (80) 는 다음 인터럽션 함수를 검출한다(단계 406 및 401). 인터럽션 함수 이외의 함수들에 관하여, 상기 출력부 (80) 는 함수 본체의 코드만을 출력한다(단계 401, 405, 및 406).
도 6 에 도시된 소스 프로그램의 함수 f6 이 인터럽션 함수라고 판단되면, 상기 출력부 (80) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수명 f6 의 스트링을 참조하여, 사용 레지스터 난 (52) 에 등록되어 있는 레지스터 "g", "h", "f" 의 저장 코드를 출력한다(단계 401 및 402).
상기 출력부 (80) 는 함수 f6 본체의 코드를 출력한다(단계 403). 그후에, 상기 출력부 (80) 는, 함수별 사용 레지스터 관리 테이블 (50) 에서 함수명 f6 의 스트링을 다시 참조하여, 사용 레지스터 난 (52) 에 등록되어 있는 레지스터 "g", "h", "f" 의 복귀 코드를 출력한다(단계 404).
상기 출력부 (80) 는 함수 f6 가 파일의 종단인지를 판단한다. 그것이 파일의 종단이므로, 상기 출력부 (80) 에 의한 처리가 종료된다.
본 발명이 예시적 실시예에 관하여 예시되고 설명되었지만, 종래 기술에 숙련된 사람들은, 본 발명의 요지를 벗어남이 없이, 다양한 다른 변형예, 생략, 부가 등이 이루어질수 있다는 것을 이해한다. 따라서, 본 발명은 상기 제시된 특정 실시예에 한정되지 않고, 첨부된 청구범위에 나타난 특징에 관한 동등예들과 그 범주내에 포함되는 가능한 모든 실시예들을 포함한다.
이상 설명한 바와 같이, 본 발명의 컴파일러와 그의 최적화 방법에 의하면, 함수별 사용 레지스터 집계부는, 인터럽션 함수에 의하여 호출되는 함수에 의하여 사용되는 레지스터를 집계하여, 호출원의 인터럽션 함수의 사용 레지스터로서 상기의 함수별 사용 레지스터 관리 테이블에 새로 등록함으로써, 사용 레지스터만을 저장 및 복귀시키는 것이 가능하다. 따라서, 이것은 인터럽션 함수에 의하여 저장 및 복귀되는 레지스터를 최소량으로 하는 것을 가능케 한다. 이에 의하여 인터럽션 함수의 코드 및 사이즈가 감축될 수 있고, 실행 시간이 단축될 수 있어서, 어셈블리 프로그램 파일을 실행시키는데 있어 처리 효율을 향상시킬 수 있다는 점에서 효과가 있다.

Claims (13)

  1. 소스 프로그램을 읽어들여 자구 해석 및 구문 해석을 수행하고, 중간 코드를 생성하고, 함수의 사용 레지스터의 저장/복귀 코드를 부가하여, 어셈블리 프로그램 파일을 생성하는 컴파일러로서,
    상기 소스 프로그램중의 함수별로, 함수의 사용 레지스터에 관한 정보 및 상기 함수에 의해 호출되는 호출 함수에 관한 정보를 등록하는 함수별 사용 레지스터 관리 테이블 (50) 과,
    상기 중간 코드의 해석후에, 함수별로, 사용 레지스터와 호출 함수명을 추출하여, 이를 상기 함수별 사용 레지스터 관리 테이블 (50) 내에 등록하는 함수별 사용 레지스터 추출 수단 (60) 과,
    상기 함수별 사용 레지스터 추출 수단 (60) 에 의해 상기 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터로서 상기 함수별 사용 레지스터 관리 테이블 (50) 에 새로 등록하는 함수별 사용 레지스터 집계 수단 (70), 및
    상기 함수별 사용 레지스터 집계 수단 (70) 에 의해 집계된 상기 사용 레지스터들을 갖는 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여, 어셈블리 프로그램 파일을 생성하여 출력하는 출력 수단 (80) 을 구비하는 것을 특징으로 하는 컴파일러.
  2. 제 1 항에 있어서, 상기 함수별 사용 레지스터 관리 테이블 (50) 은,
    함수명을 등록하는 함수명 난과, 상기 함수의 사용 레지스터명을 등록하는 사용 레지스터 난, 및 상기 함수에 의해 호출되는 호출 함수명을 등록하는 호출 함수 난을 구비하는 것을 특징으로 하는 컴파일러.
  3. 제 1 항에 있어서, 함수별 사용 레지스터 집계 수단 (70) 은,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하며, 그리고
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 집계 수단 (70) 은 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 상기 레지스터 정보를 독출하여, 상기 호출 함수의 상기 사용 레지스터와 상기 호출원의 상기 함수의 사용 레지스터를 병합하는 것을 특징으로 하는 컴파일러.
  4. 제 1 항에 있어서, 상기 함수별 사용 레지스터 집계 수단 (70) 은,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하며;
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 집계 수단 (70) 은 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 상기 레지스터 정보를 독출하고, 상기 함수에 의해 호출되는 호출 함수가 더 존재하는가 여부를 판단하고;
    상기 호출 함수에 의해 출되는 호출 함수가 더 존재하면, 상기 집계 수단 (70) 은 상기 호출 함수를 삭제하고 이 호출 함수에 관한 정보를 읽는 동작을 재귀적으로 반복하며; 그리고
    주목된 함수에 의해 호출되는 호출 함수가 더 이상 없을 때는, 상기 집계 수단 (70) 은 상기 주목된 함수의 사용 레지스터와 상기 주목된 함수의 호출원인 함수의 사용 레지스터를 병합하는 것을 특징으로 하는 컴파일러.
  5. 제 1 항에 있어서,
    상기 출력 수단 (80) 은,
    상기 중간 코드중의 인터럽션 함수에 관하여, 상기 인터럽션 함수 본체를 출력하고, 상기 인터럽션 함수 본체의 앞에 상기 인터럽션 함수의 사용 레지스터의 저장 코드를 출력하며, 그리고 상기 인터럽션 함수 본체의 뒤에 상기 인터럽션 함수의 사용 레지스터의 복귀 코드를 출력하며, 한편,
    상기 인터럽션 함수 이외의 함수에 관하여, 상기 출력 수단 (80) 은 상기 함수 본체를 출력하는 것을 특징으로 하는 컴파일러.
  6. 소스 프로그램을 읽어 자구 해석과 구문 해석을 수행하고, 중간 코드를 생성하고, 함수의 사용 레지스터의 저장/복귀 코드를 부가하여, 어셈블리 프로그램 파일을 생성하는 컴파일러의 최적화 방법으로서,
    상기 중간 코드의 해석후에, 함수별로, 사용 레지스터와 호출 함수명을 추출하여, 이를 상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록하는 단계와,
    상기 사용 레지스터 등록 단계에 의해 상기 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터로서 상기 함수별 사용 레지스터 관리 테이블 (50) 에 새로 등록하는 단계, 및
    상기 사용 레지스터 집계 단계에 의해 집계된 상기 사용 레지스터들을 갖는 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 단계를 구비하는 것을 특징으로 하는 컴파일러의 최적화 방법.
  7. 제 6 항에 있어서,
    상기 함수별 사용 레지스터 집계 단계는,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계, 및
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 레지스터 정보를 독출하여, 상기 호출 함수의 사용 레지스터와 호출원의 상기 함수의 사용 레지스터를 병합하는 단계를 더 구비하는 것을 특징으로 하는 컴파일러의 최적화 방법.
  8. 제 6 항에 있어서,
    상기 함수별 사용 레지스터 집계 단계는,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계와,
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 레지스터 정보를 독출하고, 상기 함수에 의해 호출되는 호출 함수가 더 존재하는가 여부를 판단하는 단계와,
    상기 언급된 호출 함수에 의해 호출되는 호출 함수가 더 존재할 때, 상기 호출 함수를 삭제하고 이 호출 함수에 관한 정보를 읽는 동작을 재귀적으로 반복하는 단계, 및
    주목된 함수로부터 호출되는 호출 함수가 더 이상 없을 때, 상기 주목된 함수의 사용 레지스터와 상기 주목된 함수의 호출원인 함수의 사용 레지스터를 병합하는 단계를 더 구비하는 것을 특징으로 하는 컴파일러의 최적화 방법.
  9. 제 6 항에 있어서,
    상기 출력 단계는,
    상기 중간 코드중의 함수가 인터럽션 함수인가의 여부를 판단하는 단계;
    인터럽션 함수에 관하여,
    상기 인터럽션 함수 본체의 앞에 상기 인터럽션 함수의 사용 레지스터의 저장 코드를 출력하는 단계와,
    상기 인터럽션 함수 본체를 출력하는 단계, 및 상기 인터럽션 함수 본체의 뒤에 상기 인터럽션 함수의 사용 레지스터의 복귀 코드를 출력하는 단계를 구비하는 것을 특징으로 하는 컴파일러의 최적화 방법.
  10. 컴퓨터 시스템에서, 소스 프로그램을 읽어 자구 해석과 구문 해석을 수행하고, 중간 코드를 생성하고, 함수의 사용 레지스터의 저장/복귀 코드를 부가함으로써 어셈블리 프로그램 파일을 생성하는 제어 프로그램을 저장하는 컴퓨터 판독가능 메모리에 있어서, 상기 제어 프로그램은,
    상기 중간 코드의 해석후에, 함수별로, 사용 레지스터와 호출 함수명을 추출하여, 이를 상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록하는 단계와,
    상기 사용 레지스터 등록 단계에 의해 상기 정보가 내부에 등록된 상기 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 인터럽션 함수에 의해 호출되는 함수에 의해 사용되는 레지스터들을 집계하여, 상기 집계된 레지스터들을 상기 인터럽션 함수의 사용 레지스터들로서 상기 함수별 사용 레지스터 관리 테이블 (50) 에 새로 등록하는 단계, 및
    상기 사용 레지스터 집계 단계에 의해 집계된 상기 사용 레지스터들을 갖는 함수별 사용 레지스터 관리 테이블 (50) 을 참조하여, 상기 중간 코드에 상기 인터럽션 함수의 사용 레지스터의 저장/복귀 코드를 부가하여 어셈블리 프로그램 파일을 생성하여 출력하는 단계를 구비하는 것을 특징으로 하는 컴퓨터 판독가능 메모리.
  11. 제 10 항에 있어서,
    상기 제어 프로그램의 상기 함수별 사용 레지스터 집계 단계는,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계, 및
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 레지스터 정보를 독출하여, 상기 호출 함수의 사용 레지스터와 호출원의 상기 함수의 사용 레지스터를 병합하는 단계를 더 구비하는 것을 특징으로 하는 컴퓨터 판독가능 메모리.
  12. 제 10 항에 있어서,
    상기 제어 프로그램의 상기 함수별 사용 레지스터 집계 단계는,
    상기 함수별 사용 레지스터 관리 테이블 (50) 에 등록되어 있는 상기 정보를 함수별로 순차적으로 읽어서, 상기 함수에 의해 호출되는 호출 함수의 존재 여부를 판단하는 단계와,
    상기 함수에 의해 호출되는 호출 함수가 존재할 때, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수를 삭제하고, 상기 함수별 사용 레지스터 관리 테이블 (50) 로부터 상기 호출 함수의 레지스터 정보를 독출하여, 상기 함수에 의해 호출되는 호출 함수가 더 존재하는가 여부를 판단하는 단계와,
    상기 언급된 호출 함수에 의해 호출되는 호출 함수가 더 존재할 때, 상기 호출 함수를 삭제하고 상기 호출 함수에 관한 정보를 읽는 동작을 재귀적으로 반복하는 단계, 및
    주목된 함수로부터 호출되는 호출 함수가 더 이상 없을 때, 상기 주목된 함수의 사용 레지스터와 상기 주목된 함수의 호출원인 함수의 사용 레지스터를 병합하는 단계를 더 구비하는 것을 특징으로 하는 컴퓨터 판독가능 메모리.
  13. 제 10 항에 있어서,
    상기 제어 프로그램의 상기 출력 단계는,
    상기 중간 코드중의 함수가 인터럽션 함수인가의 여부를 판단하는 단계;
    인터럽션 함수에 관하여,
    상기 인터럽션 함수 본체의 앞에 상기 인터럽션 함수의 사용 레지스터의 저장 코드를 출력하는 단계와,
    상기 인터럽션 함수 본체를 출력하는 단계, 및
    상기 인터럽션 함수 본체의 뒤에 상기 인터럽션 함수의 사용 레지스터의 복귀 코드를 출력하는 단계를 구비하는 것을 특징으로 하는 컴퓨터 판독가능 메모리.
KR1019990000383A 1998-01-12 1999-01-11 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법 KR100305097B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP98-003760 1998-01-12
JP00376098A JP3278603B2 (ja) 1998-01-12 1998-01-12 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体

Publications (2)

Publication Number Publication Date
KR19990067823A true KR19990067823A (ko) 1999-08-25
KR100305097B1 KR100305097B1 (ko) 2001-09-26

Family

ID=11566144

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990000383A KR100305097B1 (ko) 1998-01-12 1999-01-11 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법

Country Status (4)

Country Link
US (1) US6282705B1 (ko)
EP (1) EP0929034A3 (ko)
JP (1) JP3278603B2 (ko)
KR (1) KR100305097B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020070809A (ko) * 2001-03-02 2002-09-11 인터내셔널 비지네스 머신즈 코포레이션 포스트-링크 코드 최적화

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE522988C2 (sv) * 2000-05-16 2004-03-23 Eurocity Software Ab Förfarande, datorprogramprodukt och datorprogramelement för realtidsöversättning av användargränssnitt i en godtycklig applikation
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US20070067756A1 (en) * 2005-09-20 2007-03-22 Trinity Millennium Group, Inc. System and method for enterprise software portfolio modernization
JP2007304926A (ja) * 2006-05-12 2007-11-22 Matsushita Electric Ind Co Ltd 情報処理方法および命令生成方法
US8615736B2 (en) * 2006-12-08 2013-12-24 Oracle America, Inc. Module facility for JAVASCRIPT language
US8832672B2 (en) 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
US9767004B2 (en) * 2014-06-16 2017-09-19 Symantec Corporation Dynamic call tracking method based on CPU interrupt instructions to improve disassembly quality of indirect calls

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5182811A (en) * 1987-10-02 1993-01-26 Mitsubishi Denki Kabushiki Kaisha Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt
JPH02257224A (ja) 1989-03-29 1990-10-18 Nec Corp 連係編集処理装置
JP2591212B2 (ja) 1990-01-24 1997-03-19 松下電器産業株式会社 高速割込み処理装置
EP0621535B1 (en) * 1993-04-23 2000-03-15 Advanced Micro Devices, Inc. Interrupt handling
JPH0877021A (ja) * 1994-09-01 1996-03-22 Fujitsu Ltd 割込処理装置および方法
JPH0962512A (ja) 1995-08-23 1997-03-07 Toshiba Corp 低級言語から高級言語への記述言語変換機能を有するプログラム変換装置及び方法
JPH09134292A (ja) 1995-11-10 1997-05-20 Hitachi Ltd 割り込み制御方法
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6085278A (en) * 1998-06-02 2000-07-04 Adaptec, Inc. Communications interface adapter for a computer system including posting of system interrupt status
US6205508B1 (en) * 1999-02-16 2001-03-20 Advanced Micro Devices, Inc. Method for distributing interrupts in a multi-processor system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020070809A (ko) * 2001-03-02 2002-09-11 인터내셔널 비지네스 머신즈 코포레이션 포스트-링크 코드 최적화

Also Published As

Publication number Publication date
JP3278603B2 (ja) 2002-04-30
JPH11203144A (ja) 1999-07-30
US6282705B1 (en) 2001-08-28
EP0929034A3 (en) 2003-04-23
EP0929034A2 (en) 1999-07-14
KR100305097B1 (ko) 2001-09-26

Similar Documents

Publication Publication Date Title
US8156471B2 (en) Multi-language execution method
US5606697A (en) Compiler system for language processing program
US7353503B2 (en) Efficient dead code elimination
US6934940B2 (en) Source code transformation-temporary object reduction
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
JPH07141201A (ja) 2パスコンパイラのための改良された方法
KR100305097B1 (ko) 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법
US7500229B2 (en) Program converting method and storage medium
CN112114817B (zh) 基于cobol语言的数据字典字段信息获取方法及装置
JP4768984B2 (ja) コンパイル方法、コンパイルプログラムおよびコンパイル装置
JP2004259007A (ja) コンパイラ装置、コンパイラプログラム、及び記録媒体
US20050125783A1 (en) Program optimization with intermediate code
KR20080045545A (ko) 조건부 영역을 전처리하는 방법
JP3003459B2 (ja) プログラム作成支援装置
JP2000242504A (ja) コンパイラ装置
JPH05197561A (ja) コンパイル方式
JP3279706B2 (ja) オンライン・コンパイル方式
JP3278584B2 (ja) コンピュータプログラム生成装置及び方法
JP2001125793A (ja) コンパイラシステム及びコンパイル方法並びに記録媒体
JP3018783B2 (ja) コンパイル方式
JP2003050700A (ja) プログラム変換方法
JPH05324344A (ja) 関数呼出し時の引数処理最適化方法
JPH08263300A (ja) インライン展開方式
JP2001034482A (ja) コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体
JPH05313909A (ja) 中間コードインライン展開機能を有するコンパイラシステム

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee