KR100247900B1 - 프로그램변환장치 및 프로세서 - Google Patents

프로그램변환장치 및 프로세서 Download PDF

Info

Publication number
KR100247900B1
KR100247900B1 KR1019960015311A KR19960015311A KR100247900B1 KR 100247900 B1 KR100247900 B1 KR 100247900B1 KR 1019960015311 A KR1019960015311 A KR 1019960015311A KR 19960015311 A KR19960015311 A KR 19960015311A KR 100247900 B1 KR100247900 B1 KR 100247900B1
Authority
KR
South Korea
Prior art keywords
instruction
subroutine
branch
machine language
file
Prior art date
Application number
KR1019960015311A
Other languages
English (en)
Other versions
KR960042340A (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 KR960042340A publication Critical patent/KR960042340A/ko
Application granted granted Critical
Publication of KR100247900B1 publication Critical patent/KR100247900B1/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/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은, 서브루틴을 호출하는 명령과 호출되는 서브루틴이 다른 파일에 배치되어 있는 소스프로그램이라 하더라도, 파이프라인의 흐트러짐을 발생하는 일없이 서브루틴을 호출할 수 있는 실행오브젝트를 생성하는 프로그램변환장치 및 그 실행오브젝트를 실행하는 프로세서를 제공하는 것을 목적으로 하며, 그 구성에 있어서, 소스프로그램이 부여되면, 기계어명령열로 번역하는 동시에, 프로그램중의 서브루틴에 대해서, 각 서브루틴마다 필요하게 되는 스택사이즈와 제외해야 할 레지스터명을 검출해서 기계어명령열과 함께 파일에 기억해둔다. 복수파일에 기억된 기계어명령을 연결할 때에, 번역시에 기억해둔 스택과 레지스터에 관한 정보를 판독한다. 그 정보에 의거해서, 기계어명령열중에서 사용되고 있는 서브루틴으로의 분기명령을, 서브루틴으로의 분기와 레지스터의 제외와 스택의 확보를 일련으로 실행하는 서브루틴콜명령으로 치환하는 것을 특징으로 한 것이다.

Description

프로그램변환장치 및 프로세서
제1도는 본 발명의 제 1실시예에 의한 프로그램변환장치의 구성을 표시한 블럭도.
제2도는 동 실시예에 있어서의 입력파일A101에 기억되어 있는 메인프로그램f()의 소스프로그램의 리스트.
제3도는 동 실시예에 있어서의 입력파일B102에 기억되어 있는 서브루틴g()의 소스프로그램의 리스트.
제4도는 동 실시예에 있어서의 출력파일A106에 기억된 메인프로그램f()의 기계어(機械語)명령의 리스트.
제5도는 동 실시예에 있어서의 출력파일B107에 기억된 서브루틴g()의 기계어명령의 리스트.
제6도는 동 실시예에 있어서의 실행파일(113)에 기억된 실행오브젝트의 리스트.
제7도는 본 발명의 제 2실시예에 의한 프로세서의 구성을 표시한 블록도.
제8도는 동 실시예에 의한 프로세서가 통상의 분기(分岐)명령jsr을 실행할때의 동작을 설명하는 도면.
제9도는 동 실시예에 의한 프로세서가 서브루틴콜명령call을 실행할 때의 동작을 설명하는 도면.
제10도는 종래의 프로세서의 실행에 있어서, 분기장해(hazard)가 발생할 경우의 명령열을 표시하는 도면.
제11도는 제10도에 표시된 명령열을 종래의 프로세서가 실행한 경우의 파이프라인의 흐름을 표시한 도면.
제12도는 제10도에 표시된 명령열에 있어서, 분기선(分岐先)명령이 분기지연슬롯에 놓여졌을 경우의 명령열을 표시한 도면.
제13도는 제12도에 표시된 명령열을 종래의 프로세서가 실행한 경우의 파이프라인의 흐름을 표시한 도면.
〈도면의 주요부분에 대한 부호의 설명〉
103 : 번역부 105a : 스택사이즈추출부
105b : 제외레지스터추출부 108 : 연결부
109 : 분기명령검출부 110 : 파일검색부
111 : 획득부 111a : 스택사이즈획득부
111b : 제외레지스터획득부 112 : 서브루틴콜명령생성부
702a : 서브루틴콜명령디코더 703a : 서브루틴콜실행유닛
본 발명은, 프로그램을 기계어명령열로 번역해서 연결하는 프로그램변환장치 및 프로그램변환장치에 의해서 얻어진 기계어명령열을 실행하는 프로세서에 관하여, 특히 서브루틴에 분기명령의 실행시에 발생하는 파이프라인의 흐트러짐을 피하는 프로그램변환장치 및 프로세서에 관한 것이다.
CPU(이하「프로세서」라 칭한다)에 의한 처리의 고속화의 기본기술의 하나에 파이프라인처리가 있다. 파이프라인처리는, 1개의 명령의 처리과정을 복수의 작은 처리단위(파이프라인스테이지)로 분할하고, 각 스테이지를 동시에 처리를 행함으로써 처리속도를 향상시키는 기술이다. 그런데, 분기명령을 실행하였을 경우에는, 파이프라인 스톨(흐트러짐)이 발생하고, 파이프라인처리의 실효성능이 이상적인 성능을 밑도는 것으로 된다. 이 현상을, 분기장해(hazard)라고 한다.
제 10도는, 분기장해가 발생하는 경우의 명령열을 표시한 도면이다. 제 11도는, 제 10도의 명령열을 실행하였을 경우의 파이프라인의 흐름을 클록사이클마다 표시한 도면이다. 파이프라인은, 3개의 스테이지(IF:명령페치, DEC:명령디코더, EX:실행 및 실효어드레스생성)로 이루어진다.
지금, 명령 1은, 번지 A로부터 시작되는 서브루틴으로의 분기명령으로 한다. 클록 1에 있어서 IF스테이지에 페치된 명령 1은 클록 3에 있어서 EX스테이지에서 실행되므로, 클록4에 있어서 비로소 번지 A의 명령 A가 IF스테이지에 페치된다. 이명령A가 실행되는 것으 클록 6이다.
즉, 이 예에서는, 이미 파이프라인에 도입된 명령 2, 3을 무효화하지 않으면 안되고, 명령1이 실행되고부터 명령A가 실행되기까지에 3클록을 필요로 하고 있다. 제 11도에 있어서, 파이프라인스톨은 회색으로 표시하고 있다.
이와 같은 분기장해를 피하는 종래기술로서, 지연분기라고 호칭되는 방법이 있다(예를 들면, 헤네시&패터슨컴퓨터·아키텍처, 제 265페이지~제 270페이지, 닛케이BP출판센터). 이 지연분기에서는, 컴파일러가 컴파일(compile)시에 명령의 스케쥴링을 행하고, 예를 들면, 분기선의 명령을 분기명령의 후속에 당(當)하는 명령의 위치(분기지연슬롯)에 미리 이동시켜 둔다고 하는 방법이 채용된다.
분기명령이 분기지연슬롯에 놓여졌을 경우의 명령열을 제 12도에 표시한다. 분기선 명령인 명령A,B는, 분기명령인 명령 1의 후속명령으로서 번지 2, 3으로 이동해서 놓여져 있다. 제 13도는, 제 12도에 표시된 명령열을 실행한 경우의 파이프라인의 흐름을 표시하는 도면이다. 이 도면으로부터 알 수 있는 바와 같이, 지연분기의 방법에 의하면 쓸데없는 명령을 페치해 버리는 일이 없어지므로, 제 11도에서 표시된 바와 같은 파이프라인스톨을 발생하지 않는다. 따라서, 제 12도에 표시되는 지연분기에 의한 스케쥴링에 있어서, 분기장해의 문제는 해소되고 있다.
그러나, 지연분기에 의한 방법으로는, 반드시 분기선의 명령을 분기지연슬롯으로 이동할 수 없는 경우가 있고, 항상 분기장해를 해소할 수 있다고는 단정할 수 없는 문제점을 가지고 있다.
구체적으로, 제 10도에 표시된 예에 있어서, 번지A로부터 시작되는 서브루틴을 컴파일러로부터는 인식할 수 없는 경우가 있다. 통상, 컴파일러는, 프로그램이 수납된 파일마다 번역을 행하나, 명령 1을 포함한 프로그램과 명령A,B를 포함한 서브루틴이 다른 파일에 기억되어 있는 경우가 있다. 따라서, 명령 1을 포함한 프로그램을 격납한 파일만이 주어진 경우에는, 컴파일러는, 분기선명령인 명령 A,B를 이동시켜서 분기지연슬롯에 넣는다고 하는 스케쥴링을 행할 수 없다. 그 때문에, 다른 파일에 기억된 명령으로 분기하는 경우에는, 여전히 분기장해가 발생한다고 하는 문제점이 있었다.
이 문제를 피하기 위해서, 다른 파일에 기억된 서브루틴에는 분기하지 않도록 프로그램을 작성해 두거나, 프로그램의 분기할 곳을 미리 조사함으로써 관련되는 서브루틴을 1개의 파일에 기억하는 처리를 행한 후에 번역시킨다고 하는 방법도 생각할 수 있다. 그러나, 이와 같은 방법으로는, 프로그램의 설계시에 있어서 항상 분기선의 서브루틴의 배치를 의식하지 않으면 안되고, 프로그램의 설계나 개발의 작업효율이 저하한다. 또, 번역단위인 파일의 사이즈가 커지기 때문에, 번역에 많은 시간을 요한다.
그래서, 본 발명은 이러한 문제점에 비추어서 이루어진 것이며, 서브루틴을 호출하는 명령과 호출되는 서브루틴이 다른 파일에 배치되어 있는 소스프로그램이라도, 파이프라인의 흐트러짐을 발생하는 일없이 서브루틴을 호출할 수 있는 실행오브젝트를 생성하는 프로그램변환장치 및 그 실행오브젝트를 실행하는 프로세서를 제공하는 것을 목적으로 한다.
상기 목적을 달성하기 위하여, 본 발명의 제 1발명의 프로그램변환장치는, 프로그램을 기계어명령으로 번역하여 파일로서 출력하는 번역장치와, 복수의 상기 파일에 기억된 기계어명령열을 연결하는 연결장치로 이루어지는 프로그램변환장치로서, 상기 번역장치는, 프로그램에 포함되는 서브루틴에 대해서, 각 서브루틴마다 필요하게 되는 스택사이즈를 추출해서 서브루틴의 기계어명령열과 함께 상기 파일에 기억하는 스택사이즈추출수단을 구비하고, 상기 연결장치는, 상기 기계어명령열중에서 서브루틴으로의 분기명령을 검출하는 분기명령검출수단과, 검출된 분기명령이 지정하고 있는 분기선서브루틴을 기억하고 있는 파일을 특정하는 파일검색수단과, 상기 분기선서브루틴에서 필요하게 되는 스택사이즈를 상기 파일검색수단에 의해서 특정된 파일로부터 판독하는 스택사이즈획득수단과, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 기계어 명령으로 치환하는 치환수단을 구비한 것을 특징으로 한다.
본 발명의 제 2발명의 프로그램변환장치는, 본 발명의 제 1발명의 프로그램 변환장치에 있어서, 상기 치환수단은, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환하는 것을 특징으로 한다.
본 발명의 제 3발명의 프로세서는, 기계어명령열을 차례로 하나하나 해석해서 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단되었을 경우에는, 그 서브루틴콜명령에 포함되는 분기선번지로 분기하는 처리와 그 서브루틴콜명령에 포함되는 스택사이즈의 스택을 확보하는 처리를 일련으로 실행하는 수단을 구비한 것을 특징으로 한다.
본 발명의 제 4발명 기재의 프로그램교환장치는, 프로그램을 기계어명령열로 번역하고, 파일로서 출력하는 번역장치와, 복수의 상기 파일에 기억된 기계어명령열을 연결하는 연결장치로 이루어지는 프로그램변환장치로서, 상기 번역장치는, 상기 프로그램에 포함되는 서브루틴에 대해서, 각 서브루틴에서의 처리에 있어서 제외해야할 레지스터명을 추출해서 서브루틴의 기계어명령열과 함께 상기 파일에 기억하는 제외레지스터추출수단을 구비하고, 상기 연결장치는, 상기 기계어명령열중에서 서브루틴으로의 분기명령을 검출하는 분기명령검출수단과, 검출된 분기명령이 지정하고 있는 분기선서브루틴을 기억하고 있는 파일을 특정하는 파일검색수단과, 상기 분기선서브루틴에서의 처리에 있어서 제외해야 할 레지스터명을 상기 파일검색수단에 의해서 특정된 파일로부터 판독하는 제외레지스터획득수단과, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와 상기 제외레지스터획득수단에 의해 판독된 레지스터의 내용을 제외하는 처리를 일련으로 실행하는 것을 내용으로 하는 기계어명령으로 치환되는 치환수단을 구비한 것을 특징으로 한다.
본 발명의 제 5발명의 프로그램변환장치는, 본 발명의 제 4발명 기재의 프로그램변환장치에 있어서, 상기 치환수단은, 상기 분기명령을 상기 분기선서브루틴으로 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환하는 것을 특징으로 한다.
본 발명의 제 6발명의 프로세서는, 기계어명령열을 차례로 하나하나 해석해서 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴명령이라고 판단되었을 경우에는, 그 서브루틴콜명령에 포함되는 분기선번지로 분기하는 처리와 그 서브루틴콜명령에 의해 지정되는 레지스터의 내용을 제외하는 처리를 일련으로 실행하는 수단을 구비한 것을 특징으로 한다.
상기와 같이 구성된 본 발명의 제 1발명의 프로그램변환장치에 의하면, 프로그램이 부여되면, 기계어명령열에 변역되는 동시에, 프로그램중의 서브루틴에 대해서, 각 서브루틴마다 필요하게 되는 스택사이즈가 검출되어, 기계어명령열과 함께 파일에 기억된다.
계속해서, 복수의 파일에 기억된 기계어명령열이 연결될 때에, 기계어명령열중에서 서브루틴으로의 분기명령이 검출된다. 분기명령이 검출되면, 그 분기선 서브루틴을 기억하고 있는 파일이 특정되고, 그 파일로부터 분기선서브루틴에서 필요로 하는 스택사이즈가 스택사이즈획득수단에 의해서 판독된다.
검출된 분기명령은, 분기선 서브루틴에 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 기계어명령으로 치환된다.
본 발명의 제 2발명의 프로그램변환장치에 의하면, 본 발명의 제 1발명의 프로그램변환장치에 있어서, 상기 분기명령은, 상기 분기선서브루틴으로 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환된다.
본 발명의 제 3발명 기재의 프로세서에 의하면, 부여된 기계어명령은, 소정의 서브루틴콜명령인지 어떤지가 판단된다. 소정의 서브루틴콜명령이라고 판단되었을 경우에는, 프로세서는, 그 서브루틴콜명령에 포함되는 분기선번지로 분기하는 처리와 그 서브루틴콜명령에 포함되는 스택사이즈의 스택을 확보하는 처리를 일련으로 실행한다.
본 발명의 제 4발명 기재의 프로그램변환장치에 의하면, 프로그램이 부여되면, 기계어명령열로 번역되는 동시에, 프로그램중의 서브루틴에 대해서, 각 서브루틴에서의 처리에 있어서 제외해야 할 레지스터명이 검출되어 기계어명령열과 함께 파일에 기억된다.
계속해서, 복수의 파일에 수납된 기계어명령열이 연결될 때에, 기계어명령열중에서 서브루틴으로의 분기명령이 검출된다. 분기명령이 검출되면, 그 분기선 서브루틴을 기억하고 있는 파일이 특정되고, 그 파일로부터 분기선서브루틴에서의 처리에 있어서 제외해야 할 레지스터명이 제외레지스터획득수단에 의해서 판독된다.
검출된 분기명령은, 분기선서브루틴으로 분기하는 처리와 상기 제외레지스터획득수단에 의해 판독된 레지스터의 내용을 제외하는 처리를 일련으로 실행하는 것을 내용으로 하는 기계어명령으로 치환된다.
본 발명의 제 5발명의 프로그램변환장치는, 본 발명의 제 4발명의 프로그램변환장치에 있어서, 상기 분기명령은, 상기 분기선서브루틴으로 분기하는 처리와 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리를 일련으로 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환된다.
본 발명의 제 6발명의 프로세서에 의하면, 부여된 기계어명령은, 소정의 서브루틴콜명령인지 어떤지가 판단된다. 소정의 서브루틴콜명령이라고 판단되었을 경우에는, 프로세서는, 그 서브루틴콜명령에 포함되는 분기선번지로 분기하는 처리와 그 서브루틴콜명령에 의해 지정되는 레지스터의 내용을 제외하는 처리를 일련으로 실행한다.
이하, 본 발명의 실시예에 대해서 도면을 사용해서 상세히 설명한다.
[제 1실시예]
제 1도는, 본 발명의 제 1실시예에 의한 프로그램변환장치의 구성을 표시한 블록도이다. 또한, 제 1도에는, 본 장치의 처리의 대상이 되는 입력파일(101),(102), 출력파일(106),(107)처리의 결과 생성되는 실행파일(13)도 동시에 표시하고 있다.
본 장치는, 크게 나누어서 번역부(103)와 연결부(108)로 구성된다.
번역부(103)는, 주로 고급언어로 쓰인 소스프로그램을 기계어명령열로 번역한다. 번역부(103)에는, 소스프로그램이 기억된 입력파일(101),(102)이 부여되고, 처리를 완료한 번역부(103)는, 출력파일(106),(107)로서 출력한다. 여기서, 파일이란, 번역부(103)의 입출력단위가 되는 프로그램이나 기계어명령열의 모임을 말한다. 번역부(103)는, 파일단위로 번역을 행한다. 예를 들면, 1개의 입력파일(101)만이 부여되면, 번역부(103)는, 자동적으로 입력파일A101에 대응하는 이름을 결정하고, 출력파일A106을 출력한다.
번역부(103)는, 또 기계어명령생성부(104)와 추출부(105)로 이루어진다.
기계어명령생성부(104)는, 부여된 소스프로그램을 구분해석등을 행해서 기계어명령열로 변환한다.
추출부(105)는, 또 스택사이즈추출부(105a)와 제외레지스터추출부(105b)로 이루어진다. 스택사이즈추출부(105a)는, 소스프로그램에 존재하는 서브루틴에 대해서, 각 서브루틴에서의 처리를 위해서 필요하게 되는 스택사이즈를 산출하고, 산출한 스택사이즈를 명시하는 의사(疑似)명령을 생성해서 그 서브루틴의 기계어명령열의 최상부에 둔다. 여기서, 스택사이즈란 서브루틴에서의 처리에 의해 사용되는 국소적인 작업영역의 크기를 말한다. 의사명령이란, 여기서 산출한 스택사이즈에 대한 정보를 후술하는 연결부(108)에 인도하기 위한 것이며, 연결부(108)에 의해서 사용된다.
제외레지스터추출부(105b)는, 소스프로그램에 존재하는 서브루틴에 대해서, 각 서브루틴에서의 처리에 앞서서 제외해야 할 레지스터를 검출하고, 검출한 레지스터를 명시하는 의상명령을 생성해서 그 서브루틴의 기계어명령열의 최상부에 둔다. 제외해야 할 레지스터는, 서브루틴중의 처리에 의해서 파괴되는 값을 가진다. 의사명령은, 스택사이즈추출부(105a)가 생성하는 의사명령과 동일종류의 것이며, 제외해야 할 레지스터에 대한 정보를 연결부(108)에 인도하기 위해서 사용된다.
연결부(108)는, 주로 기계어명령열을 연결해서 프로세서를 실행할 수 있는 실행오브젝트를 생성하나, 이때에 번역부(103)에 의해서 생성된 의사명령에 대한 처리도 행한다. 또한, 상기의 연결작업은, 통상의 링커(linker)등이 행하는 처리와 다르지 않으므로, 그 처리를 행하는 구성부분은 도시하고 있지 않다. 연결부(108)에는, 기계어명령열이 기억된 복수의 출력파일(106),(107)이 부여되고, 처리를 종료한 연결부(108)는, 실행파일(113)을 출력한다.
연결부(108)는, 또, 분기명령검출부(109), 파일검색부(110), 획득부(111) 및 서브루틴콜명령생성부(112)로 이루어진다.
분기명령검출부(109)는, 부여된 모든 출력파일중에서 분기명령을 찾아내서, 발견된 분기명령을 파일검색부(110)에 통지한다. 또한, 여기서 말하는 분기명령이란, 서브루틴으로의 분기명령을 말한다.
파일검색부(110)는, 통지된 분기명령에 대해서, 그 분기명령에 의해서 지정되어 있는 분기선의 서브루틴이 존재하는 파일의 이름을 특정하고, 그 파일명을 분기선서브루틴명과 함께 획득부(111)의 스택사이즈획득부(111a) 및 제외레지스터획득부(111b)에 통지한다.
스택사이즈획득부(111a)는, 통지된 파일의 분기선서브루틴의 최상부에 놓여 있는 의사명령을 해석함으로써, 그 서브루틴에서의 처리에 필요하게 되는 스택사이즈를 서브루틴콜명령생성부(112)에 통지한다.
마찬가지로, 제외레지스터획득부(111b)는 통지된 파일의 분기선서브루틴의 최상부에 놓여있는 의사명령을 해석함으로써, 그 서브루틴에서의 처리를 위해서 제외해야 할 레지스터의 종류를 서브루틴콜명령생성부(112)에 통지한다.
서브루틴콜명령생성부(112)는, 획득부(111)로부터 통지된 스택사이즈와 레지스터의 종류에 의거해서, 서브루틴을 호출하는 전용의 서브루틴콜명령을 생성한다. 이 전용의 서브루틴콜명령이란, 프로세서가 분리처리, 스택의 확보 및 레지스터의 값의 제외하고 하는 3가지의 처리를 파이프라인스톨을 발생하는 일없이 일련으로 행하는 기계어명령이란 것이다.
마지막으로, 연결부(108)는, 서브루틴콜명령생성부(112)에 의해서 생성된 서브루틴콜명령을, 그 서브루틴으로 분기하도록 하는 분기명령과 치환하는 동시에, 그 서브루틴안에 배치되어 있던, 스택을 확보하는 기계어명령이나 레지스터를 제외하는 기계어명령을 삭제한 실행오브젝트를 생성하여, 실행파일(113)로서 출력한다.
이상의 연결부(108)에서의 처리는, 분기명령검출부(109)가 검출한 모든 분기명령에 대해서 반복하여 행해진다.
다음에, 이상과 같이 구성된 본 장치의 동작에 대해서, 구체적인 프로그램을 사용해서 설명한다.
입력파일 A101에는, 제 2도에 표시된 메인프로그램f()가 기억되어 있다. 메인프로그램f()는, 서브루틴g()를 2개의 인수(引數)를 수반해서 호출하고 있다.
한편, 입력파일B102에는, 제 3도에 표시된 서브루틴g()가 기억되어 있다. 서브루틴g()는, 부여된 2개의 인수의 합과 차를 산출한다.
제 2도에 표시된 입력파일A101이 부여된 번역부(103)는, 메인프로그램f()를 기계어명령으로 번역하는 동시에, 이 메인프로그램f()에서 필요하게 되는 스택사이즈나 제외해야 할 레지스터의 정보를 추출한 후, 제 4도에 표시되는 출력파일A106을 생성해서 출력한다.
마찬가지로 해서, 제 3도에 표시된 입력파일B102가 부여된 번역부(103)는, 서브루틴g()를 기계어명령으로 번역하는 동시에, 이 서브루틴g()에서 필요하게 되는 스택사이즈나 제외해야 할 레지스터의 정보를 추출한 후, 제 5도에 표시되는 출력파일B107을 생성해서 출력한다. 또한, 여기서 사용되고 있는 기계어명령의 의미는, 이하와 같다.
_f : 그 함수의 레이블을 표시한다.
·STACKSIZE s : 그 함수에 의한 처리에 필요하게 되는 스택사이즈가 s바이트이다.
·REGLIST r1, r2 : 그 함수에 의한 처리에 앞서 제외해야 할 레지스터가 r1, r2이다.
sp : 스택포인터
#xxxx : 즉 값 xxxx를 표시한다.
(sp+xxxx) : sp+xxxx를 어드레스로 하는 메모리의 내용
add src, dst : dst+src의 값을 dst에 전송한다.
sub src, dst : dst-src의 값을 dst에 전송한다.
mov src, dst : src를 dst에 전송한다.
jsr label : sp를 4감소시키고, 다음 명령의 어드레스(되돌아가는 곳)를 (sp)에 전송하고, label로 제어를 이동한다.
rst : (sp)의 값의 명령으로 제어를 이동하고, sp를 4증가시킨다.
여기서, 제 4도에 표시되는 출력파일A106의 리스트의 하부(42)는 기계어명령생성부(104)에 의해서 생성된 것이며, 리스트의 상부(41)는 추출부(105)에 의해서 생성된 것이다.
스택사이즈추출부(105a)는, 이 메인프로그램f()에서 필요하게 되는 스택사이즈는 8바이트라고 판단하고, 의사명령, STACKSIZE8을 생성하고 있다. 이것은, 메인프로그램f()가 2개의 인수 1, 2를 스택에 격납한 후에 서브루틴g()를 호출하고 있으나, 1개의 인수를 격납하는데 4바이트의 스택이 필요하게 되기 때문이다.
또, 제외레지스터추출부(105b)는, 이 메인프로그램f()에 의한 처리에 앞서서 제외해야 할 레지스터는 없으므로, 의사명령, REGLIST만을 생성하고 있다.
마찬가지로, 제 5도에 표시되는 출력파일B107의 리스트의 하부(52)는 기계어명령생성부(104)에 의해서 생성된 것이며, 리스트의 상부(51)는 추출부(105)에 의해서 생성된 것이다.
스택사이즈추출부(105a)는, 이 서브루틴g()에서 필요하게 되는 스택사이즈는 16바이트라고 판단하고, 의사명령. STACKSIZE16을 생성하고 있다. 이것은, 서브루틴g()에 의한 처리에 있어서, 2개의 레지스터의 값을 제외시키는 영역과 2개의 연산결과 a,b를 기억하는 영역의 합계로서, 16바이트의 스택이 필요하게 되기 때문이다.
또, 제외레지스터추출부(105b)는, 이 서브루틴g()에 의한 처리에 앞서서 제외해야 할 레지스터는 r1 및 r2라고 판단하고, 의상명령. REGLIST r1, r2를 생성하고 있다.
계속해서, 번역부(103)에 의해서 생성된 출력파일A106 및 출력파일B107이 연결부(108)에 입력되면, 분기명령검출부(109)는, 이들 파일에 존재하는 분기명령을 검출한다. 제 4도에 표시된 출력파일A106에는, 분기명령jsr_g가 사용되고 있으므로, 이 분기명령이 분기명령검출부(109)에 의해서 검출되어, 파일검색부(110)에 통지된다.
파일검색부(110)는, 부여된 파일(106),(107)을 검색함으로써, 분기선서브루틴_g가 출력파일B107에 의해 정의되어 있는 것을 알고, 그 취지를 스택사이즈획득부(111a) 및 제외레지스터획득부(111b)에 통지한다.
스택사이즈획득부(111a) 및 제외레지스터획득부(111b)는, 통지를 받은 출력파일B107의 서브루틴_g의 최상부(51)에 놓여진 의사명령으로부터, 필요한 스택사이즈(16) 및 제외해야 할 레지스터(r1, r2)를 알고, 그 정보를 서브루틴콜명령생성부(112)에 통지한다.
서브루틴콜명령생성부(112)는 통지된 정보에 의거해서, 서브루틴콜명령call_g, #16, r1, r2를 생성한다. 여기서, 명령 call label, lsz, rn, rm은, sp를 4감소시키고, 다음 명령의 어드레스(되돌아가는곳)를 (sp)에 전송해서 _label로 제어를 이동한 후, 분기장해의 사이클에서 레지스터rn, rm을 각각 (sp-4), (sp-8)로 제외시키고, sp를 lsz감소시키는 처리를 일련으로 행하는 단일 기계어명령을 의미한다. 즉, 서브루틴콜명령call _g, #16, r1, r2는, 이하의 명령을 분기장해를 발생하는 일없이 일련으로 실행하는 것과 같다.
jsr _g
mov r1, (sp-4)
mov r2, (sp-8)
add #-16, sp
마지막으로, 연결부(108)는, 생성된 서브루틴콜명령 call _g, #16, r1, r2를, 서브루틴_g으로 분기하도록 하는 제 4도에 표시된 출력파일A106의 분기명령jsr_g으로 치환하는 동시에, 서브루틴 _g중에 배치되어 있던, 레지스터를 제외하는 기계어명령mov r1, (sp-4), mov r2, (sp-8)이나 스택을 확보하는 기계어명령add#-16, sp를 삭제한 실행오브젝트를 생성하고, 제 6도에 표시되는 실행파일(113)로서 출력한다.
제 6도에 표시된 실행파일(113)의 리스트로부터 아는 바와 같이, 메인프로그램_f로부터 서브루틴_g를 호출하는 명령에는, 서브루틴콜명령call _g, #16, r1, r2가 사용되고, 한편, 서브루틴 _g의 최상부에는, 레지스터를 제외하거나 스택영역을 확보하거나 하는 명령이 삭제되어 있다.
이상의 설명으로부터 명백한 바와 같이, 본 장치에 의하면, 소스프로그램이 기계어명령으로 번역될 때에, 번역부(103)에 의해서 각 서브루틴마다 필요한 스택 사이즈나 제외레지스터에 관한 정보가 의사명령으로서 각 서브루틴의 기계어명령열의 최상부에 부가된다. 계속해서, 연결부(108)는, 각 기계어명령을 연결할 때에, 다른 파일에 존재하는 서브루틴으로의 분기명령이라도, 각 서브루틴의 최상부에 놓여있는 의사명령을 참조함으로써, 서브루틴으로의 분기와 레지스터의 제외와 스택의 확보를 분기스톨을 발생하는 일없이 일련으로 실행할 수 있는 단일의 서브루틴콜명령으로 치환한다. 따라서, 연결부(108)가 생성한 프로그램을 실행하는 프로세서는, 다른 파일에 의해 정의된 서브루틴으로의 분기라도, 분기장해를 발생하는 일없이 고속으로 분기처리를 행할 수 있다.
[제 2실시예]
다음에, 고속으로 분기처리를 행하는 제 2실시예에 의한 프로세서에 대해서 설명한다.
제 7도는, 본 발명의 제 2실시예에 의한 프로세서의 구성을 표시한 블록도이다. 본 프로세서는, 명령버퍼(701), 명령디코더(702), 실행유닛(703), 레지스터(704), 스택포인터(705), 프로그램카운터(706), 연산회로(707), 데이터버퍼(708), 어드레스버퍼(709) 및 내부버스(710)로 구성된다.
데이터버퍼(708) 및 어드레스버퍼(709)는, 각각 외부데이터버스(711) 및 외부어드레스버스(712)와 내부버스(710)와의 데이터의 중계를 행한다. 레지스터(704)는, 연산을 행하기 위한 데이터나 도시되어 있지 않는 주기억의 어드레스를 일시적으로 기억한다. 스택포인터(705)는, 주기억에 형성된 스택영역을 표시하는 어드레스를 기억한다. 프로그램카운터(706)는, 다음에 페치해야 할 주기억의 명령이 놓여있는 어드레스를 기억한다. 연산회로(707)는, 입력된 2개의 데이터를 논리연산하는 회로이다.
명령버퍼(701)는, 페치한 명령을 기억하는 FIFO방식의 명령버퍼이다. 명령버퍼(701)에 집어넣어진 명령은, 순차로 압출되고, 통상적으로는, 가장 오래된 명령이 명령디코더(702)에 보내진다.
명령디코더(702)는, 명령버퍼(701)로부터 보내져온 명령을 하나씩 차례로 디코드하고, 그 결과를 실행유닛(703)에 통지한다. 또한, 명령디코더(702)는, 소정의 모든 명령을 디코드하여, 각각의 소정의 명령에 대한 고유의 정보를 실행유닛(703)에 보내는 기능을 가지나, 특히 서브루틴콜명령을 디코드하는 기능을 가진 부분을 서브루틴콜명령디코더(702a)로서 제 7도에 표시하고 있다.
실행유닛(703)은, 명령디코더(702)로부터의 정보에 따라서, 도시되어 있지 않은 내부제어신호를 통해서 각 구성부(701)~(709)를 제어하거나, 도시되어 있지 않은 외부제어신호와의 입출력을 행한다. 또한, 실행유닛(703)은, 소정의 모든 명령에 대응한 제어를 행하는 기능을 가지나, 특히 서브루틴명령을 실행하는 부분을 서브루틴콜실행유닛(703a)으로서 제 7도에 표시하고 있다.
명령버퍼(701), 명령디코더(702) 및 실행유닛(703)은, 파이프라인을 구성하고, 각각 파이프라인의 IF스테이지, DEC스테이지 및 EX스테이지의 기능을 완수한다.
다음에, 이상과 같이 구성된 본 프로세서의 동작에 대해서 설명한다.
먼저, 본 프로세서가, 통상의 분기명령jsr을 실행할 때의 동작을 설명한다. 제 8도에는, 통상의 분기명령jsr을 포함한 명령열과, 그 명령열을 실행하였을 경우의 파이프라인의 흐름을 표시하고 있다.
클록 1에 있어서 명령버퍼(701)에 집어넣어진 분기명령jsr _g는, 클록 2에 있어서 명령디코더(702)에 의해서 디코드되고, 클록 3에 있어서 실행유닛(703)에 의해서 실행된다.
클록 3에 있어서, 실행유닛(703)은, 프로그램카운터(706)를 분기선의 어드레스 _g로 갱신한다. 따라서, 클록 4에 있어서, 어드레스 _g로 놓여있는 명령 mov r1, (sp-4)가 명령버퍼(701)에 집어넣어진다.
실행유닛(703)은, 명령jsr _g다음에 명령mov r1, (sp-4)를 실행하기 위해서, 그들 명령사이, 즉 분기장해에 존해하는 명령(제 8도에 있어서 회색으로 표시된 부분)의 실행을 무시한다. 따라서, 실행유닛(703)은, 명령jsr _g를 실행한 후에 2클록을 경과한 후에 다음 명령mov r1, (sp-4)를 실행한다.
이상의 동작은, 종래의 프로세서가 상기와 마찬가지의 분기명령을 실행하는 경우의 동작과 달라지는 바는 없다.
다음에, 본 프로세서가, 서브루틴콜명령 call을 실행할 때의 동작을 설명한다. 제 9도에는, 서브루틴명령call을 포함한 명령열과, 그 명령열을 실행하였을 경우의 등가적인 파이프라인의 흐름을 표시하고 있다.
서브루틴콜명령 call _g, #16, r1, r2는 1개의 명령이나, 이 명령을 서브루틴콜명령디코더(702a)가 디코드하고, 서브루틴콜실행유닛(703a)이 실행하면, 본 프로세서는, 이하의 4개의 명령을 일련으로 실행하는 것과 같은 동작을 행한다.
즉, 먼저, jsr _g를 실행하고, 계속해서 분기장해의 사이클에 있어서,
mov r1, (sp-4)
mov r2, (sp-8)
add #-16, sp
를 실행한다.
따라서, 제 9도의 파이프라인의 흐름도는, 실행유닛(703)이 서브루틴콜명령 call _g, #16, r1, r2를 실행하였을 경우의 등가적인 파이프라인의 흐름을 표시하고 있다.
클록 1에 있어서 명령버퍼(701)에 집어넣어진 분기명령jsr _g는, 클록 2에 있어서 명령디코더(702)에 의해서 디코드되고, 클록 3에 있어서 실행유닛(703)에 의해서 실행된다.
클록 3에 있어서, jsr_g를 실행한 실행유닛(703)은, 다음 클록 4에 있어서 명령mov r1, (sp-4)를 실행한다.
제 8도에 표시된 파이프라인의 흐름과 비교해서 명백한 바와 같이, 완전히 동일한 내용의 처리를 행하고 있는데도 불구하고, 제 9도에 있어서의 파이프라인의 흐름에 있어서는, 분기장해는 발생하고 있지 않다. 즉, 본 프로세서가 call _g, #16, r1, r2를 실행하는 경우에는, 분기장해는 해소되고, 제 8도에 표시된 명령열을 실행하는 경우보다는 2클록분만큼 실행시간이 단축된다.
이상, 본 발명에 의한 프로그램변환장치 및 프로세서에 대해서, 실시예에 의거하여 설명했으나, 본 발명은 이들 실시예에 한정되지 않는 것은 물론이다. 즉
① 제 1실시예에 있어서, 서브루틴콜명령생성부(112)는, 단일의 기계어명령 call _g, #16, r1, r2를 생성하였으나, 생성되는 기계어명령은 단일 명령에 한정되는 것은 아니다. 예를 들면,
call _g
mov r1, (sp-4)
mov r2, (sp-8)
add #-16, sp
의 4개의 기계어명령을 생성하는 것이라도 된다. 즉, 명령 call _g는, _g로 제어를 이행시키는 동시에 계속되는 3개의 명령을 분기장해를 발생하는 일없이 일련으로 실행시키는 명령이 된다.
② 제 1실시예에 있어서 생성된 서브루틴콜명령은, 스택의 확보와 레지스터의 제외라는 2가지의 처리를 수반하는 분기명령이였으나, 항상 이들 2가지의 처리를 수반하는 분기명령에 한정되지 않는다. 예를 들면, 레지스터를 제외할 필요가 없는 서브루틴으로의 분기의 경우에는, call _g, #16와 같이, 스택의 확보만을 행하는 분기명령이 생성되는 것이라도 된다.
③ 제 1실시예에 있어서의 기계어명령생성부(104)를, 프로그램을 재배치가능 오브젝트로 변환하는 일반적인 컴파일수단에, 또, 연결부(108)가 가진 링크기능을, 재배치가능 오브젝트를 링크해서 실행오브젝트를 작성하는 일반적인 링크수단으로 치환해도 된다. 이에 의해서, 제 1실시예의 프로그램변환장치에 대응하는 C언어컴파일을 실현할 수 있다.
④ 제 1실시예에 있어서는, 연결부(108)만이 서브루틴콜명령을 생성하고 있으나, 이와 같은 구성에 한정되는 것이 아니다. 예를 들면, 번역부(103)는 연결부(108)가 가지는 구성부(109)~(112)를 부가하여 구비하고 있어도 된다. 이에 의해서, 동일파일내의 서브루틴으로의 분기명령이면, 번역부(103)가 서브루틴콜명령을 생성할 수 있다.
⑤ 제 2실시예에 있어서는, 분기명령jsr에 의한 2클록의 파이프라인스톨을 피할 수 있었으나, 이와 같은 파이프라인스톨에 한정되는 것은 아니다. 예를들면, 서브루틴 _g가 격납되어 있는 ROM의 액세스타임이 크기 때문에, 제 8도의 파이프라인의 흐름에 있어서 3클록분의 파이프라인스톨이 발생하고 있어도, 본 실시예에 의해서 제 9도에 표시된 파이프라인의 흐름과 마찬가지의 결과를 얻을 수 있다는 것은 명백하다. 이 경우에는, 제 8도에 표시된 명령열을 실행하는 경우보다도 3클록분만큼 실행시간이 단축된 것으로 본다. 즉, 본 실시예에 의해서, 분기명령의 실행에 수반한 파이프라인스톨뿐만 아니라, 분기선명령의 페치시의 장해에 따른 파이프라인스톨도 동시에 피할 수 있다.
본 발명의 제 1발명 및 제 2발명의 프로그램변환장치에 의하면, 서브루틴을 호출하는 명령이라고 호칭되는 서브루틴이 동일한 피일뿐만 아니라 다른 파일에 배치되어 있는 소오스프로그램이라 하더라도, 파이프라인의 흐트러짐을 발생하는 일없이 서브루틴을 호출하는 동시에 필요한 스택사이즈를 확보하는 실행오브젝트가 생성된다.
생성된 실행오브젝트는, 본 발명의 제 3발명의 프로세서에 의해서 실행된다.
본 발명의 제 4발명 및 제 5발명의 프로그램변환장치에 의하면, 서브루틴을 호출하는 명령이라고 호칭되는 서브루틴이 동일한 파일뿐만 아니라 다른 파일에 배치되어 있는 소스프로그램이라 하더라도, 파이프라인의 흐트러짐을 발생하는 일없이 서브루틴을 호출하는 동시에 필요한 레지스터값을 제외하는 실행오브젝트가 생성된다.
생성된 실행오브젝트는 본 발명의 제 6발명의 프로세서에 의해서 실행된다.
따라서, 본 발명에 의한 프로그램변환장치 및 프로세서에 의해, 분기명령의 실행이나 분기선명령의 페치시의 장해에 따른 파이프라인의 흐트러짐의 발생을 피하고, 고속으로 분기처리를 행할 수 있다고 하는 효과가 있다.

Claims (9)

  1. 복수의 프로그램을 기계어명령열로 번역하여 상기 프로그램과 같은 수의 파일로서 출력하는 번역장치와, 상기 프로그램과 같은 수의 상기 파일에 기억된 기계어명령열의 전부를 연결하는 연결장치로 이루어지는 프로그램변환장치로서, 상기 번역장치는, 각각의 프로그램에 포함되는 서브루틴에 대해서, 각 서브루틴마다 필요하게 되는 스택사이즈를 추출해서 서브루틴의 기계어명령열과 함께 상기 파일에 기억하는 스택사이즈추출수단을 구비하고, 상기 연결장치는, 상기 기계어명령열중에서 서브루틴으로의 분기명령을 검출하는 분기명령검출수단과, 검출된 분기명령이 지정하고 있는 분기선서브루틴을 기억한 파일을 특정하는 파일검색수단과, 상기 분기선서브루틴에서 필요하게 되는 스택사이즈를 상기 파일검색수단에 의해서 특정된 파일로부터 판독하는 스택사이즈획득수단과, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 해히지는 처리로서 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리와를 실행하는 것을 내용으로 하는 기계어명령으로 치환하는 치환수단을 구비한 것을 특징으로 하는 프로그램변환장치.
  2. 제1항에 있어서, 상기 치환수단은, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행해지는 처리로서 상기 스택사이즈획득수단에 의해 판독된 스택사이즈분의 스택을 확보하는 처리와를 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환하는 것을 특징으로 하는 프로그램변환장치.
  3. 기계어명령열을 해석해서 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단된 경우에는, 그 서브루틴콜명령에 의해 특정되는 분기선번지로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행하는 처리로서 그 서브루틴콜명령에 포함되는 스택사이즈의 스택을 확보하는 처리와를 실행하는 수단을 구비한 것을 특징으로 하는 프로세서.
  4. 프로그램을 기계어명령열로 번역하고, 파일로서 출력하는 번역장치와, 복수의 상기 파일에 기억된 기계어명령열을 연결하는 연결장치로 이루어지는 프로그램변환장치로서, 상기 번역장치는, 상기 프로그램에 포함되는 서브루틴에 대해서, 각 서브루틴에서의 처리에 있어서 제외해야 할 레지스터명을 추출해서 서브루틴의 기계어명령열과 함께 상기 파일에 기억된 제외레지스터의 추출수단을 구비하고, 상기 연결장치는, 상기 기계어명령열중에서 서브루틴으로의 분기명령을 검출하는 분기명령검출수단과, 검출된 분기명령이 지정하고 있는 분기선서브루틴을 기억한 파일을 특정하는 파일검색수단과, 상기 분기선서브루틴에서의 처리에 있어서 제외해야 할 레지스터명을 상기 파일검색수단에 의해서 특정된 파일로부터 판독하는 제외레지스터획득수단과, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행해지는 처리로서 상기 제외레지스터획득수단에 의해 판독된 레지스터의 내용을 제외하는 처리와를 실행하는 것을 내용으로 하는 기계어명령으로 치환하는 치환수단을 구비한 것을 특징으로 하는 프로그램변환장치.
  5. 제4항에 있어서, 상기 치환수단은, 상기 분기명령을, 상기 분기선서브루틴으로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행해지는 처리로서 상기 제외레지스터획득수단에 의해 판독된 레지스터의 내용을 제외하는 처리와를 실행하는 것을 내용으로 하는 단일의 기계어명령으로 치환되는 것을 특징으로 하는 프로그램변환장치.
  6. 기계어 명령열을 해석해서 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단된 경우에는, 그 서브루틴콜명령에 의해 특정되는 분기선번지로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행하는 처리로서 그 서브루틴콜명령에 의해 지정되는 레지스터의 내용을 제외하는 처리와를 실행하는 수단을 구비한 것을 특징으로 하는 프로세서.
  7. 기계어명령열을 해석해서 실행하는 프로세서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단된 경우에는, 그 서브루틴콜명령에 의해 특정되는 분기선번지로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행하는 처리로서 그 서브루틴콜명령에 포함되는 스택사이즈의 스택을 확보하고, 확보한 스택에 그 서브루틴콜명령에 의해 지정되는 레지스터의 내용을 제외하는 처리와를 실행하는 수단을 구비한 것을 특징으로 하는 프로세서.
  8. 제1항에 기재된 프로그램변환장치에 의해 생성된 기계어명령을 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단된 경우에는, 그 서브루틴콜명령에 의해 특정되는 분기선번지로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행하는 처리로서 그 서브루틴콜명령에 포함되는 스택사이즈의 스택을 확보하는 처리와를 실행하는 수단을 구비한 것을 특징으로 하는 프로세서.
  9. 제4항에 기재된 프로그램변환장치에 의해 생성된 기계어명령을 실행하는 프로세서로서, 부여된 기계어명령이 소정의 서브루틴콜명령인지 어떤지를 판단하는 명령디코드수단과, 상기 명령디코드수단에 의해 소정의 서브루틴콜명령이라고 판단된 경우에는, 그 서브루틴콜명령에 의해 특정되는 분기선번지로 분기하는 처리와, 그 처리의 지연슬롯을 이용해서 행하는 처리로서 그 서브루틴콜명령에 의해 지정되는 레지스터의 내용을 제외하는 처리와를 실행하는 수단을 구비한 것을 특징으로 하는 프로세서.
KR1019960015311A 1995-05-10 1996-05-10 프로그램변환장치 및 프로세서 KR100247900B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP95-111701 1995-05-10
JP07111701A JP3130446B2 (ja) 1995-05-10 1995-05-10 プログラム変換装置及びプロセッサ

Publications (2)

Publication Number Publication Date
KR960042340A KR960042340A (ko) 1996-12-21
KR100247900B1 true KR100247900B1 (ko) 2000-03-15

Family

ID=14567971

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960015311A KR100247900B1 (ko) 1995-05-10 1996-05-10 프로그램변환장치 및 프로세서

Country Status (7)

Country Link
US (2) US5758162A (ko)
EP (1) EP0742517B1 (ko)
JP (1) JP3130446B2 (ko)
KR (1) KR100247900B1 (ko)
CN (1) CN1099074C (ko)
DE (1) DE69614183T2 (ko)
TW (1) TW289812B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5790845A (en) * 1995-02-24 1998-08-04 Hitachi, Ltd. System with reservation instruction execution to store branch target address for use upon reaching the branch point
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
US6513156B2 (en) 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6021273A (en) 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6016556A (en) * 1997-07-17 2000-01-18 Tektronix, Inc. System for identifying an acquisition sample corresponding to a source code statement
EP0899653B1 (en) * 1997-08-29 2006-10-04 Matsushita Electric Industrial Co., Ltd. Processor with reduced number of conditional instructions
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6212630B1 (en) 1997-12-10 2001-04-03 Matsushita Electric Industrial Co., Ltd. Microprocessor for overlapping stack frame allocation with saving of subroutine data into stack area
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
WO2001018646A1 (en) * 1999-09-01 2001-03-15 Intel Corporation Branch instruction for multithreaded processor
JP3664473B2 (ja) * 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
JP2004362086A (ja) * 2003-06-03 2004-12-24 Matsushita Electric Ind Co Ltd 情報処理装置および機械語プログラム変換装置
US7788638B2 (en) * 2003-11-21 2010-08-31 Citigroup Global Markets Inc. Method and system for data file processing
EP2106584A1 (en) * 2006-12-11 2009-10-07 Nxp B.V. Pipelined processor and compiler/scheduler for variable number branch delay slots
US8813057B2 (en) * 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619721A (ja) * 1991-02-21 1994-01-28 Oki Electric Ind Co Ltd 機械語翻訳最適化方式

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
US5222220A (en) * 1989-11-16 1993-06-22 Mehta Hemang S Microprocessor stack built-in guards
EP0463965B1 (en) * 1990-06-29 1998-09-09 Digital Equipment Corporation Branch prediction unit for high-performance processor
US5450585A (en) * 1991-05-15 1995-09-12 International Business Machines Corporation Compiler with delayed conditional branching
JPH0744419A (ja) * 1993-08-03 1995-02-14 Nec Ic Microcomput Syst Ltd マイコン開発支援装置
US5375242A (en) 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619721A (ja) * 1991-02-21 1994-01-28 Oki Electric Ind Co Ltd 機械語翻訳最適化方式

Also Published As

Publication number Publication date
US5758162A (en) 1998-05-26
JPH08305581A (ja) 1996-11-22
EP0742517A2 (en) 1996-11-13
TW289812B (ko) 1996-11-01
US5978905A (en) 1999-11-02
CN1138174A (zh) 1996-12-18
DE69614183T2 (de) 2001-11-29
KR960042340A (ko) 1996-12-21
EP0742517B1 (en) 2001-08-01
DE69614183D1 (de) 2001-09-06
CN1099074C (zh) 2003-01-15
EP0742517A3 (en) 1997-05-28
JP3130446B2 (ja) 2001-01-31

Similar Documents

Publication Publication Date Title
KR100247900B1 (ko) 프로그램변환장치 및 프로세서
KR950006619B1 (ko) 번역 코드 실행용의 개선된 에러 기록 방법 및 시스템
US5341482A (en) Method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions
US6931635B2 (en) Program optimization
US7028291B2 (en) Debugging method and debugging device
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
US20070006158A1 (en) Instruction execution device, debugging method, debugging device, and debugging program
JPH0762827B2 (ja) プログラムコードの交差像参照方法
IE920749A1 (en) Automatic flowgraph generation for program analysis and¹translation
JPH11296381A (ja) 仮想マシン及びコンパイラ
US5446849A (en) Electronic computer which executes squash branching
US5119495A (en) Minimizing hardware pipeline breaks using software scheduling techniques during compilation
US5850551A (en) Compiler and processor for processing loops at high speed
CN112182999B (zh) 一种基于mips32指令系统的三级流水线cpu设计方法
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
KR100267434B1 (ko) 제 1 처리 환경내에서 제 1 명령어를 에뮬레이션 환경내에서의제 2 명령어 처리 개시에 응하여 처리하는 방법 및 시스템
CA1304823C (en) Apparatus and method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions
JP3335735B2 (ja) 演算処理装置
JP3716635B2 (ja) 情報処理装置、及びその割込み制御方法
JP3130421B2 (ja) プログラム解析方法および装置
JPH04268928A (ja) エミュレーション装置及び半導体装置
JPS5875256A (ja) 実行命令遂行状態のモニタ方式
JPH02234227A (ja) ミスアライメント処理方式
JP2000305789A (ja) プログラム変換装置及びプロセッサ
JP2005122329A (ja) ソフトウェアのリアルタイム解析方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20131119

Year of fee payment: 15

FPAY Annual fee payment

Payment date: 20141117

Year of fee payment: 16

FPAY Annual fee payment

Payment date: 20151118

Year of fee payment: 17

EXPY Expiration of term