KR100247899B1 - 플로세서및프로그램번역장치 - Google Patents
플로세서및프로그램번역장치 Download PDFInfo
- Publication number
- KR100247899B1 KR100247899B1 KR1019960015674A KR19960015674A KR100247899B1 KR 100247899 B1 KR100247899 B1 KR 100247899B1 KR 1019960015674 A KR1019960015674 A KR 1019960015674A KR 19960015674 A KR19960015674 A KR 19960015674A KR 100247899 B1 KR100247899 B1 KR 100247899B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- return
- register
- address
- return address
- Prior art date
Links
- 238000001514 detection method Methods 0.000 claims abstract description 31
- 238000012423 maintenance Methods 0.000 abstract description 9
- 238000011084 recovery Methods 0.000 abstract description 3
- 238000006467 substitution reaction Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 129
- 238000004364 calculation method Methods 0.000 description 33
- FXRXQYZZALWWGA-UHFFFAOYSA-N 1,2,4-trichloro-3-(4-chlorophenyl)benzene Chemical compound C1=CC(Cl)=CC=C1C1=C(Cl)C=CC(Cl)=C1Cl FXRXQYZZALWWGA-UHFFFAOYSA-N 0.000 description 25
- 238000012546 transfer Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 13
- 230000008859 change Effects 0.000 description 11
- 230000007704 transition Effects 0.000 description 10
- 238000004458 analytical method Methods 0.000 description 7
- 238000000034 method Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000005206 flow analysis Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 230000004083 survival effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
본 발명은 함수호출명령때의 복귀번지의 유지선을, 연산용으로 레지스터에 의해 대용하는 프로세서와, 그 대용에 적합한 어셈블러프로그램을 생성하는 프로그램번역장치를 제공하는 것을 목적으로한 것이며, 그 구성에 있어서, 프로그램의 번역에 의해서 생성된 어셈블러프로그램으로부터 그 내부에 함수호출명령이 존재하지 않고, 또 그 내부에 복귀번지연산겸용레지스터(56)의 값의 변경이 없는 함수를 검출한다. 검출후, 검출한 함수의 종료부분에 특수복귀명령을 출력한다. 이와같이 해서, 특수복귀명령이 짜넣어진 어셈블러프로그램을 프로세서는 실행하나, 프로세서는 함수호출명령을 실행함에 있어서, 함수의 복귀번지를 스택과 동시에, 복귀번지연산겸용 레지스터(56)에 유지한다. 그리고 특수복귀명령을 인출했을때, 스택을 액세스하지 않고, 복귀번지값전용유지레지스터로부터 복귀번지를 인출하므로서 상태복귀를 행하는 것을 특징으로한 것이다.
Description
제1도는 본 실시예에 있어서의 컴파일러의 구성도.
제2도는 소스프로그램과 소스프로그램에 의거해서 생성한 어셈블러프로그램과의 대응을 표시한 도면.
제3도는 본 실시예에 있어서의 프로세서의 명령사양도면.
제4도는 생성부호변경장치의 구성을 표시한 도면.
제5도는 컴파일러에 의한 출력부호인 어셈블러프로그램을 표시한 도면.
제6도는 강제복귀명령을 포함하는 기계어프로그램이 실행되는 모양을 표시한 도면.
제7도는 프로그램번역장치의 처리과정을 표시한 순서도.
제8도는 프로세서의 구성을 표시한 도면.
제9도는 프로세서가 서브루틴호출을 행하는 모양과, 서브루틴으로부터의 상태복귀를 행하는 모양을 표시한 순서도.
제10도는 종래의 프로세서의 명령사양의 일예를 표시한 도면.
제11도는 종래의 프로세서가 서브루틴호출을 행하는 모양과, 서브루틴으로부터의 상태복귀를 행하는 모양을 표시한 순서도.
제12도는 어셈블러프로그램의 출력부호를 표시한 도면.
〈도면의 주요부분에 대한 부호의 설명〉
34 : 명령레지스터 41 : 데이터레지스타군
42 : 어드레스레지스터군 44 : 스택포인터
51 : ALU 56 : 복귀번지연산겸용레지스터
61 : 프로그램카운터 74 : 피연산자어드레스버퍼
75 : 스토어버퍼 76 : 로드버퍼
101 : 제어부 102 : 함수검출부
103 : 복귀번지연산겸용유지상태검출부
104 : 특수복귀명령출력부
본 발명은 프로세서와, 프로그래밍언어로 기술된 소스프로그램을 당해 프로세서로 바람직한 기계어프로그램으로 번역하는 프로그램번역장치에 관한 것이다.
최근, 결합용도용의 마이크로프로세서를 사용해서, 다종 다양한 필요성에 부응하도록한 정보기기가 활발하게 개발되고 있다. 이와 같은 정보기기의 개발에 있어서는, 하드웨어, 소프트웨어의 양면으로부터 처리의 고속화나 코스트감축의 철저를 도모할 수 있다.
상기 소프트웨어에서는, 정보기기에 요구되는 여러가지의 알고리즘를 내포형의 제어구조로 나타내고 있다. 내포(nest)형의 제어구조란, 메인루틴에 있어서 서브루틴(1)이 내포하게 되어 있고, 또, 그 서브루틴(1)에 서브루틴(2)가 내포하게 되어있는, 서브루틴의 내포형이 조합되어 있는 제어구조를 말한다.
이와 같은 제어구조에 있어서, 서브루틴의 호출시에는 스택에 호출한 쪽으로의 복귀번지가 유지된다. 그리고 서브루틴으로부터의 복귀시에는 스택에 유지된 복귀번지를 프로그램카운터에 전송한다. 여기서 스택에 유지된 복귀번지를 인출하기 위해서는, 스택에의 액세스가 필요하게 된다. 제어구조가 단순하며 앞서설명한 서브루틴호출이 2개 또는 3개의 경우, 이 액세스에 요하는 시간은 무시할 수 있으나, 제어구조가 복잡하며 앞서 설명한 서브루틴호출이 10개, 20개등 다수로 될 경우, 이 액세스를 위한 지연이 두드러지게 된다.
이와 같은 스택에의 액세스에 의한 지연을 해소하기 위하여, 복귀번지유지를 위하여 전용레지스터를 형성한 프로세서가 종래부터 존재하였다(복귀번지유지를 위한 전용레지스터를 복귀번지전용레지스터라고 말한다). 이하 도면을 참조하면서, 복귀번지전용레지스터를 구비한 프로세서에 대해서 설명을 행한다. 또한, 당해 프로세서는, 복귀번지전용레지스터를 구비하기 때문에, 제 10도에 표시한 바와 같은 명령을 해독해서 실행한다.
제 10도는, 종래기술의 프로세서의 명령사양의 일예를 표시한 도면이다. 또한, 본도면에 있어서는 프로세서에 있어서의 스택포인터를 SP라 생략기록하고, 스택에의 참조를 ⓐSP라 생략기록하고 있다. 또 복귀번지전용레지스터는 FR이라 생략기록하고 있다. 이후의 설명에 있어서 특히 예고하지 않는 한은, 이들 기호를 이 의미를 사용한다.
jsr_f:
명령「jsr_f」는 서브루틴호출명령을 행하는 명령이나, 일반적인 서브루틴호출명령과 다른 것은 그 호출시에, 호출한 쪽으로의 복귀번지를 스택에 축적하는 동시에, 그 복귀번지를 복귀번지전용레지스터에 유지하는 점이다. 즉, 서브루틴호출명령을 인출하면, 프로세서는, 스택포인터의 지시치(指示値)를 2감산하고, 서브루틴호출명령의 다음의 명령의 어드레스를 스택포인터에서 지시된 스택에 유지하고, 서브루틴호출명령의 다음 명령의 어드레스를 복귀번지전용레지스터에 유지한다.
rts:
명령「rts」는 복귀명령이다. 이 복귀명령은, 일반적인 프로세서가 구비하는 복귀명령과 마찬가지로, 스택에 축적되어 있는 복귀번지를 프로그램카운터에 전송하고, 스택포인터의 지시치를 2가산해서 서브루틴으로부터 복귀한다.
rtsfr:
rtsfr명령도 rts명령과 마찬가지 복귀명령이나, rts명령이 스택으로부터 복귀번지를 얻는데에 대해, rtsfr명령은 복귀번지전용레지스터로부터 복귀번지를 얻고, 그것을 프로그램카운터에 전송하는 점이 다르다. 또한 이 rtsfr명령과 같이, 레지스터로부터 복귀번지를 얻는 복귀명령을 특수복귀명령이라 부른다.
또한, 이상의 명령외에도 제 10도에는, add명령, mul명령등이 기재되고 있으나, 이들에 대해서는 본원 발명의 주안이 아니므로 여기서의 설명은 생략한다.
이상과 같이, 복귀번지전용레지스터를 가진 프로세서가, 서브루틴에의 이행을 행하는 모양, 그리고, 서브루틴으로부터의 상태복귀를 행하는 모양을, 제 11도, 제 12도를 참조하면서 구체적으로 설명한다.
제 11도는, 종래의 프로세서가 서브루틴호출을 행하는 모양과, 서브루틴으로부터의 상태복귀를 행하는 모양을 표시한 순서도이다. 제 12도는, 어셈블러프로그램의 출력부호를 표시한 도면이다. 도면중의 _main, _f1, _f2등의 _가 붙은 라벨은, 함수의 입구의 라벨이다(또한, C언어등의 프로그래밍언어에서는, 서브루틴은 함수라고 한 개념으로 받아들이고 있으므로, 이후 서브루틴을 함수라고 호칭하기로한다.). 또, 이들 함수중의 모든 처리는, 상기의 명령에 의해서 나타내고 있다. 본 프로그램에 있어서, 특수복귀명령은, 그내부에서 함수호출을 행하지 않는 함수의 말미에 존재하고 있다. 환언하면, 내포형구조의 최상위에 위치하는 함수에 존재하고 있다. 이것은, 스택이 선입후출순으로 복귀번지를 축적해가는데에 대해 복귀번지전용레지스터가 1개의 복귀번지를 유지하는 것만으로 하고 있기 때문이다.
지금, 프로세서에 부여된 프로그램이 제 12도의 상태인 것으로 한다. 본 도면에 있어서, 좌측의 수치, 「0100」, 「0101」…이 프로그램에 있어서의 각 명령의 상대번지를 나타내고 있다. 또 우측의 (ex1), (ex2), (ex3)…이라고한 수치는, 각 명령에 순차적으로 붙여진 번호를 나타내고 있다.
여기서, 프로세서가 가진 프로그램카운터가, (ex1)의 명령이 존재하는 상대번호 0100에 세트된 것으로 한다. 프로세서는, 실행순서(ex1)의 명령을 인출하고 (스텝u2), 실행한다(스텝u3~u5). 실행후, 다음에 인출하는 명령이 존재하는지 여부를 판정해서(스텝u1), 존재하면, 그(ex2)의 명령을 인출하고(스텝u2), 이 명령이 함수호출명령인지를 판정한다(스텝u3). (ex2)의 명령은 「jsr_f1」이며 함수호출명령이므로, 이 (ex2)의 다음의 번지 0102를 복귀번지로해서 스택에 축적한다(스텝u6). 이와 동시에, 복귀번지 0102를 복귀번지전용레지스터에 유지하고, 함수f1을 호출한다(스텝u7). 호출후, 프로세서는, 함수f1내의 (ex6), (ex7)의 명령을 인출해서 실행한다(스텝u1~u5). 제 12도에 있어서 이들의 명령의 뒤에는, (ex8)의 명령「jsr_f2」가 계속되고 있다.
(ex7)의 명령의 실행후, 프로세서는 다음에 인출명령이 존재하는지 여부를 판정해서 (스텝u1), 존재하면, (ex7)에 계속하는 (ex8)의 명령을 인출하고(스텝u2), 이 명령이 함수호출명령인지를 판정한다(스텝u3). (ex8)의 명령은 「jsr_f2」이며 함수호출명령이므로, 이 (ex8)의 다음의 번지 0108을 복귀번지로해서 스택에 축적한다(스텝 u6). 그와 동시에, 복귀번지 0108을 복귀번지전용레지스터에 유지하고, 함수f2로부터 함수f1에의 상태복귀에 대비한 다음에 함수 f2를 호출한다(스텝u7).
프로세서는, 복귀번지 0108의 유지후, 함수f2에 이행하고, 함수f2내의 각 명령의 열(ex10)~(ex12)를 인출하고, 실행한다(스텝u1~u5). 제 12도에 있어서 이들 명령의 뒤에는 특수복귀명령rtsfr가 나란히 하고 있다. (ex12)의 명령의 실행후 (스텝u5), 다음에 인출하는 명령이 존재하는지를 판정하고(스텝u1), (ex13)의 명령을 인출한다(스텝u2). 다음에 함수호출명령인지의 판정을 행하나(스텝u3), 이것은 함수호출명령이 아니므로 계속해서 이 명령이 특수복귀명령rtsfr인지를 판정한다(스텝u4). 이 (ex13)의 명령은 특수복귀명령이므로, 프로세서는 복귀번지전용레지스터로부터 프로그램카운터에 복귀번지0108을 전송하고, 스택의 액세스를 개재하지 않고 함수f1에의 상태복귀를 행한다(스텝u8).
이와 같이 상태복귀를 행하면, 프로세서는, 복귀번지에 있는 상대번지 0108의 복귀명령rts를 인출한다. 복귀명령rts는, 스택을 액세스해서 상태복귀를 행하는 명령이므로, 프로세서는 스택을 액세스해서 복귀번지 0102를 인출하고, 상태복귀를 행한다(스텝u5). 상태복귀후, 스택으로부터 상대번지0103의 복귀번지를 취득해서 (ex3)의 명령을 실행하고, 계속해서(ex4)의 명령을 실행한다(스텝u1~u5). (ex3)에 계속하는 (ex4)의 명령은 함수호출명령「jsr_f3」이므로, 「jsr_f2」의 경우와 마찬가지로, 복귀번지0104를 스택에 축적하고(스텝u6), 또, 복귀번지전용레지스터에 유지해서, 함수f3을 호출한다(스텝u7). 프로세서는, 함수f3중의 (ex14), (ex15)의 명령을 인출하고, 실행해서(스텝u1~u5), 그것에 계속하는(ex16)의 특수복귀명령rtsfr을 인출하고, 복귀번지전용레지스터로부터 복귀번지0104를 프로그램카운터에 전송해서 상태복귀를 행한다(스텝u8).
이상과 같이 복귀번지전용레지스터를 형성한 프로세서는 스택에의 액세스를 개재하지않고 복귀번지전용레지스터를 사용해서 상태복귀를 행하기 때문에, 서브루틴을 호출한 쪽의 메인루틴, 서브루틴의 처리의 재개를 고속으로 행할 수 있다.
그러나 상기 종래기술에 의하면, 서브루틴으로부터의 상태복귀를 고속으로 행할 수 있지만, 프로세서내부에 복귀번지전용레지스터를 실장할 필요가 있기때문에, 회로규모가 증대한다고하는 문제점이 있었다.
본 발명은 상기 문제점에 비추어, 회로규모의 증대를 초래하는 일없이, 서브루틴으로부터의 상태복귀를 고속으로 행할 수 있는 프로세서와, 프로그래밍언어로 기술된 프로그램을 그 프로세서를 대상으로한 기계어프로그램으로 번역하는 프로그램번역장치를 제공하는 일을 목적으로 한다.
상기 목적을 달성하기 위하여 본 발명은, 메모리속의 명령을 순차적으로 인출해서 실행하는 동시에, 특정의 연산명령의 연산결과를 유지하는 전용레지스터를 전용(轉用)해서, 서브루틴의 복귀번지를 유지하는 프로세서로서, 특정명령의 연산결과와, 서브루틴의 복귀번지를 유지하는 전용레지스터와, 인출된 명령이 서브루틴호출명령인 경우에, 당해명령의 다음에 어드레스를 복귀번지로서 스택 및 전용레지스터에 유지하고, 그 서브루틴을 호출하는 호출수단과, 인출된 명령이, 복귀번지를 스택으로부터 복귀시키는 취지를 포함하는 제 1의 서브루틴리턴명령인 경우에, 복귀번지를 스택으로부터 프로그램카운터에 복귀시키는 제 1의 복귀수단과, 인출된 명령이, 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 제 2의 서브루틴리턴명령인 경우에, 복귀번지를 전용레지스터로부터 프로그램카운터에 복귀시키는 제 2의 복귀수단을 구비하는 것을 특징으로 하고 있다.
또, 본 발명의 제 2 발명에 있어서, 전용레지스터는, 승산, 제산, 잉여산중 어느 하나의 연산의 연산결과유지용으로 형성된 레지스터인 것을 특징으로 하고 있다.
또, 본 발명의 제 3발명에 있어서, 전용레지스터는, 프로세서의 연산기의 연산길이이외의 연산의 연산결과유지용으로 형성된 레지스터인 것을 특징으로 하고 있다.
또, 본 발명의 제 4발명에 있어서, 전용레지스터는, 연산결과의 상위 데이터 또는 하위데이터의 어느한쪽의 유지용으로 형성된 레지스터인 것을 특징으로 하고 있다.
또, 본 발명의 제 5발명에 있어서, 기계어프로그램을 생성하고, 생성한 기계어프로그램을 변경하는 프로그램번역장치로서, 생성된 기계어프로그램으로부터 서브루틴호출명령도, 연산결과를 전용레지스터에 유지하는 특정의 연산명령도 포함하지 않는 서브루틴을 검출하는 제 1의 검출수단과, 제 1의 검출수단에 의해서 검출된 서브루틴으로부터, 복귀번지를 스택으로부터 복귀시키는 취지를 포함하는 제 1의 서브루틴리턴명령을 검출하는 제 2의 검출수단과, 제 2의 검출수단에 의해서 검출된 제 1의 서브루틴리턴명령을, 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 제 2의 서브루틴리턴명령으로 변경하는 변경수단을 구비한 것을 특징으로 하고 있다.
또, 본 발명의 제 6발명에 있어서, 특정의 연산명령은, 승산, 제산, 잉여산 중 어느하나인 것을 특징으로 하고 있다.
또, 본 발명의 제 7발명에 있어서, 특정의 연산명령은, 프로세서의 연산기의 연산길이이외의 연산인 것을 특징으로 하고 있다.
본 발명의 제 1발명의 프로세서에 의하면, 프로세서는, 메모리에 기억되고 있는 명령을 순차적으로 인출해서 실행한다. 여기서 인출된 명령이 서브루틴호출 명령일 경우, 호출수단에 의해서 당해 명령의 다음의 어드레스가 복귀번지로서 스택 및 전용레지스터에 유지된다. 그리고 유지후, 호출수단에 의해서 그 서브루틴이 호출된다.
서브루틴이 호출되고, 그 서브루틴내의 명령이 차례차례로 실행된다. 이와 같은 실행을 반복해서, 제 1의 서브루틴리턴명령이 인출된 것으로 한다. 이 제 1의 서브루틴리턴명령은 복귀번지를 스택으로부터 복귀시키는 취지를 포함하고 있으므로 제 1의 복귀수단에 의해서 복귀번지가 스택으로부터 프로그램카운터에 복귀시켜진다.
복귀후, 상기 호출수단에 의해서 다른 서브루틴이 호출되고, 그 서브루틴으로부터 제 2의 서브루틴리턴명령이 인출된 것으로 한다. 이 제 2의 서브루틴리턴명령은 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 명령이므로, 제 2의 복귀수단에 의해서 복귀번지가 전용레지스터로부터 프로그램카운터에 복귀시켜진다.
또, 본 발명의 제 5발명에 있어서, 프로그램번역장치에 의해서 기계어프로그램이 프로그래밍언어로 기술된 프로그램으로부터 생성된다. 그 기계어프로그램으로부터, 서브루틴호출명령도, 연산결과를 전용레지스터에 유지하는 특정의 연산명령도 포함하지 않는 서브루틴이 제 1의 검출수단에 의해서 검출된다.
검출후, 제 1의 검출수단에 의해서 검출된 서브루틴으로부터, 복귀번지를 스택으로부터 복귀시키는 취지를 포함하는 제 1의 서브루틴리턴명령이 제 2의 검출수단에 의해서 검출된다. 검출후, 제 2의 검출수단에 의해서 검출된 제 1의 서브루틴리턴명령이, 변경수단에 의해서 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 제 2의 서브루틴리턴명령으로 변경된다.
이하, 본 발명의 실시예에 대해서, 첨부도면을 참조하면서 상세히 설명한다.
제 1도에 컴파일러의 구성도를 표시한다. 컴파일러는, 제 1도에 표시한 바와 같이, 구문(構文)해석장치(11)과, 최적화장치(12)와, 자원할당장치(13)과, 부호 생성장치(14)로 구성되어 있다.
구문해석장치(11)은, 기억장치(도면생략)에 파일로서 기억되어 있는 소스프로그램의 자구해석, 구문해석 및 의미해석을 행하고, 소스프로그램을 중간프로그램으로 변환한다.
최적화장치(12)는, 최종적으로 생성되는 어셈블러프로그램의 프로그램사이즈 및 처리실행시간을 향상시키는 목적으로 중간프로그램의 최적화를 행한다. 이 최적화작업에는, 기본블록화, 제어플로해석, 데이터플로해석이라는 작업이 포함되어 있다. 여기서 기본블록화란, 처리대상의 프로그램을, 기본블록으로 분할하는 것이다.
이 분할처리를 간단히 설명한다. 먼저 최적화장치(12)는, 중간프로그램의 최초의 중간명령, 무조건 또는 조건점프의 행선의 중간명령, 무조건 또는 조건점프의 직후의 중간명령을 검출하고, 검출한 이들을 리더로 간주한다. 또 최적화장치(12)는, 리더로부터 시작하고, 다음의 리더의 하나 바로앞까지, 또는 프로그램의 최후까지의 일련의 중간명령을 추출한다. 이 추출처리에 의해서 얻게된 명령의 열은 기본블록이라 호칭되고, 이후의 처리단위가 된다.
제어플로해석이란, 각 기본블록간의 제어의 흐름을 해석하는 것이다.
데이터플로해석이란 각 기본블록중, 각각의 변수가 어디서 정의되고, 어디서 참조되고 있는 지에 대해서 해석하는 것이다. 이들의 해석결과를 참조해서 변수의 생존구간의 정보가 얻어진다.
자원할당장치(13)은, 타겟머신의 프로세서의 명령세트에의 적합을 도모하기 위하여, 프로그램속의 변수를 타겟머신의 프로세서가 가지고 있는 레지스터 또는 메모리에 할당한다. 이 자원할당에 즈음하여, 각 변수의 생존구간이 어떻게 서로 중복하고 있는지를 조사하고, 그 서로 중복하는 변수에 각각 다른 레지스터를 할당한다. 또, 자원할당장치(13)은, 각 변수의 네스트레벨이 얼마만큼인지, 또는, 각 변수의 사용빈도가 얼마만큼인지를 조사하고, 조사한 결과에 의거해서, 각 변수에 우선정도를 부여한다. 그리고 이 우선정도가 높은 순으로 레지스터를 할당해간다. 그 결과, 레지스터에 할당되지 않았던 변수는 메모리에 할당한다.
부호생성장치(14)는, 생성부호변경장치를 포함하고, 중간프로그램내의 각중간명령의 기계어명령화를 행하고, 중간프로그램을 타켓머신이 해독가능한 어셈블러프로그램으로 변환한다. 여기서, 소스프로그램과, 어셈블러프로그램과의 대응을 제 2도를 참조하면서 설명한다. 제 2도는, 소스프로그램과 소스프로그램에 의거해서 생성된 어셈블러프로그램과의 대응을 표시한 도면이다. 제 2도(a)에 있어서, main(), f1(), f2(), f3()는 각각 함수를 표시한다. 또,
본도면에 있어서 「main(){}」속의 「f1(1);」는 「인수(引數)를 1로해서 함수f1를 호출한다」라고한 의미의 함수호출의 명령이다. 또 「main(){}」속의 「f3(2);」는, 「인수(引數)를 2로해서 함수 f3을 호출한다」라고한 의미의 함수호출의 명령이다.
소스프로그램과 어셈블러프로그램의 대응에 대해서 제 2도(b)를 참조하면서 설명을 행한다. 본 도면에 있어서 「mov #1, D0」「jsr_f1」「mov #2, D0」에서 부터「rts」까지의 명령은 본도면에 있어서 기호「}」에 의해서 함수main과 대응하고 있다. 이것은, 함수main이, 본도면에 있어서의 「mov #1,DO」~「rts」의 명령으로 구성되는 것을 표시하고 있다.
또 「mov #1, D1」「add D1,D0」에서부터「rts」까지의 명령은 본도면에 있어서 기호「}」에 의해서 함수f1과 대응하고 있다. 이것은 함수f1이, 본도면에 있어서의 「mov #1, D1」~「rts」의 명령으로 구성되어 있는 것을 표시하고 있다.
또 「mov #3, D1」~「mul D0, D1」에서부터 「rts」까지의 명령은 본도면에 있어서 기호「}」에 의해서 함수f2와 대응하고 있다. 이것은, 함수f2가, 본 도면에 있어서의 「mov #3, D1」~「rts」의 명령으로 구성되어 있는 것을 표시하고 있다.
또, 본 도면에 있어서, 소스프로그램의 부호와, 어셈블러프로그램의 부호중 서로 대응하는 것은 그 사이에 「{」를 두고 있다. 즉, 도면중의 함수호출명령「f1(1);」는, 「{」기호에 의해서 「mov #1, D0」「jsr_f1」에 대응하고 있다. 이것은, 소스프로그램에 있어서의 함수호출명령「f1(1)」이라고한 부호로부터는, 「mov #1, D0」라고한 레지스터D0에 즉치(卽値):immediate value)1을 전송한다고한 전송명령과, 「jsr_f1」이라고한 함수호출명령이 생성되는 것을 표시하고 있다.
또 도면중의 함수호출명령 「f3(2);」는,「{」기호에 의해서 「mov #2, D0」「jsr_f3」에 대응하고 있다. 이것은, 소스프로그램에 있어서의 함수호출명령「fe(2);」라고한 부호로부터는, 「mov #2, D0」라고한 레지스터D0에 즉치2를 전송한다고한 전송명령과, 「jsr_f3」이라고한 함수호출명령이 생성되는 것을 표시하고 있다.
또 도면중의 승산명령「b=a*3;」는, 「{」기호에 의해서 「mov #3, D1」「mul D0, D1」에 대응하고 있다. 이것은 소스프로그램에 있어서의 승산명령「b=a*3;」이라고한 부호로부터는, 「mov #3, D1」이라고한 레지스터 D1에 즉치 3을 전송한다고 전송명령과, 「mul D0, D1」이라고한 승산명령이 생성되는 것을 표시하고 있다.
또, 본 도면에 있어서, 레지스터D0, D1은, 모두 16비트길이의 레지스터이다. 또, 본도면에 있어서의 명령「add D1, D0」「mul D0, D1」「add D0, D1」과 같이, 16비트 길이연산의 연산결과를 16비트길이의 레지스터에 유지하고 있는 것을 알 수 있다. 이것은, 본컴파일러가 16피트형의 프로세서를 대상으로 하고, 또 상기의 규격에서는, 기본적으로 연산내용과 연산결과를 동일한 비트길이로 취급하도록 문법이 규정되어 있기 때문이다.
다음에 본 실시예에서의 정보처리장치의 명령사양의 일부를 제 3도를 사용해서 설명한다. 제 3도는, 본실시예에 있어서 대상이되는 16비트형의 프로세서의 명령사양의 일예를 표시한 도면이다. 본 도면을 참조하면서 상기의 프로세서에 대해서의 명령사양을 설명한다. 본 도면에 있어서 Dn, Dm는 범용연산용 레지스터를 표시한다. 또 MR은 승제산의 연산결과의 상위 데이터를 유지하고, 호출한 함수로 부터의 복귀번지를 유지하는 복귀번지연산겸용레지스터를 표시한다. PC는 프로그램카운터의 지시치를 표시하고, _label(label는 임의의 이름)는 라벨명, #imm는 즉 치를 표시한다.
jsr_fl:
이 명령은 함수호출명령이다. 함수호출명령을 인출했을때의 프로세서의 동작은 종래기술에서 설명한 것과 거의 동일하나, 함수호출명령의 다음 명령의 어드레스를, 복귀번지연산겸용레지스터MR에 유지하는 점만이 다르다.
rtsf:특수복귀명령
이 명령은 본 실시예에 있어서의 특수복귀명령이다. 특수복귀명령을 인출했을때의 프로세서의 동작은, 종래기술에서 설명한 것과 거의 동일하나, 복귀번지연산겸용레지스터MR에 유지되어 있는 복귀번지를 프로그램카운터에 전송하는 점이 다르다.
add Dn, Dm:
이 명령은 가산명령이며, 본 명령을 인출하면 프로세서는 Dn과 Dm의 값을 가산하고, 가산결과를 레지스터Dm에 유지한다.
mov Dn, Dm:
이 명령은 전송명령이며, 본 명령을 인출하면, 프로세서는 레지스터Dn으로부터 레지스터Dm에 데이터의 전송을 행한다.
mov #imm, Dm:
이 명령은 즉치를 피연산자로한 전송명령이며, 본명령을 인출하면, 프로세서는 즉치(#imm)를 레지스터Dm에 전송한다.
mul Dn, Dm:
이 명령은 승산명령이며, 본 명령을 인출하면, 레지스터 Dn과 레지스터Dm을 승산하고, 승산결과의 상위데이터를 복귀번지연산겸용레지스터MR에 유지해서, 하위 데이터를 레지스터Dm에 유지한다.
제 4도는, 생성부호변경장치의 구성을 표시한 도면이다.
생성부호변경장치는, 제어부(101)과, 함수검출부(102)와, 복귀번지연산겸용 유지상태검출부(103)과, 특수복귀명령출력부(104)로 구성된다.
제어부(101)은 함수검출부(102), 복귀번지연산겸용유지상태검출부(103), 특수복귀명령출력부(104)를 차례로 기동하도록, 제어를 행한다.
함수검출부(102)는, 프로그램속에서 함수호출명령이 없는 함수를 검출한다.
복귀번지연산겸용유지상태검출부(103)은, 연산결과의 데이터의 상위데이터를 연산용레지스터MR에 유지하는 승산명령, 제산명령, 잉여산명령이나, 연산용레지스터MR에의 전송명령등을 검출하고, 상기 함수검출부(102)가 검출하는 함수중에서, 복귀번지연산겸용레지스터의 값의 변경이 없는 것을 확인한다. 또한 복귀번지연산겸용유지상태검출부(103)이 이와 같은 확인을 행하는 것은 상기한 복귀번지연산겸용레지스터를 복귀번지의 유지선(維持先)으로 하는 것이 가능한지를 판별하기 위해서이다.
특수복귀명령출력부(104)는, 상기 함수검출부가 검출하는 함수의 말미의 복귀명령을 특수복귀명령으로 변경한다.
이상과 같이 구성된 생성부호변경장치가, 부호생성장치(14)에 의해서 생성된 어셈블러프로그램을 변경하는 모양을 제 5도, 제 6도의 프로그램예와, 제 7도의 순서도를 참조하면서 설명한다.
제 5도는, 제 2도(b)에 표시한 어셈블러프로그램이 메모리상에 전개되고, 어셈블러프로그램속의 각 명령이 당해 메모리내의 각각의 어드레스에 유지된 상태를 표시하고 있다.
이 제 5도의 상태에서 함수검출부(102)는 먼저 함수main의 선두위치를 표시한 _main의 라벨을 검출한다(스텝 s1). 검출후, 어셈블러프로그램의 라벨_main이 후에 배치되고 있는 명령, 즉, 함수_main내의 명령을 차례로 탐색해가고, 함수main 내부에 함수호출명령이 존재하는지를 판정한다. main함수속에는 함수호출명령 「jsr_f1, 「jsr_f3」이 있으므로(스텝s2), 이 함수호출명령을 검출하고, 탐색을 거기까지로 멈추고, 이어서 함수f1의 내부에 대해서 탐색을 행한다(스텝s1, s2). 함수검출부(102)는, 함수f1이 점하는 상대번지 0105~0108내의 명령을 탐색하고, 또 함수f1속에 함수호출명령이 존재하는지를 판정한다(스텝s2). 함수f1에는, 「jsr_f2」라고한 함수f2에의 함수호출명령이 있으므로, 탐색을 거기까지로 멈추고, 다음함수f2를 검출한다(스텝s1). 함수검출부(102)는, 함수f2내의 상대번지0109~010c내의 명령을 탐색해서, 함수호출명령이 존재하는지를 판정한다(스텝s2). 이 경우 함수f2속에 함수호출명령이 없으므로, 복귀번지연산겸용유지상태검출부(103)을 기동한다.
복귀번지연산겸용유지상태검출부(103)은, 함수f2내의 상대번지0109~010c내의 명령을 탐색해서, 함수f2의 내부에 있어서 복귀번지연산겸용 레지스터의 값이 변경되는지를 판정한다(스텝s3). 즉 「mul Dn, Dm」등, 복귀번지연산겸용레지스터가 연산결과의 유지선으로 되게하는 연산이 함수f2의 내부에 존재하는지를 판정한다. 이 함수f2에는 「mul D0, D1」이라고한 복귀번지연산겸용레지스터를 연산결과로 하는 명령이 존재하므로 탐색을 여기까지로 채우고, 탐색의 대상을 다음의 함수f3으로 한다.
함수검출부(102)는 함수f3내의 상대번지010d~010f의 명령을 차례로 탐색해가고, 이 함수f3속에 함수호출명령이 존재하는지를 판정한다.
함수f3속에는 「jsr」이라고 하는 오퍼레이션부호를 볼수없고, 함수호출명령이 없으므로(스텝s2), 복귀번지연산겸용유지상태검출부(103)을 기동한다. 복귀번지연산겸용 유지상태검출부(103)은, 함수f3속의 명령을 상대번지010d~010f의 명령을 탐색하고, 함수 f3내에 복귀번지연산겸용레지스터가 연산결과의 유지선으로 되게하는 연산의 명령이 존재하지 않는 것을 확인한다. 함수f3속에는 이와 같은 명령은 존재하지 않으므로, 복귀번지연산겸용유지상태검출부(103)은 특수복귀명령출력부(104)를 기동한다(스텝s4). 기동된 특수복귀명령출력부(104)는, 함수f3의 종료부분(ex16)을 특수복귀명령rtsf(ex16')로 변경한다. 이상의 일련의 처리결과,
제 5도의 어셈블러프로그램은 제 6도의 좌절반에 표시한 상태로 된다.
〈프로세서내부의 상세〉
다음에 본 발명의 일실시예의 프로세서의 내부구성을 도면을 사용해서 설명한다.
제 8도는 본 실시예에 있어서의 프로세서의 구성도이다. 본도면에 표시한 바와 같이, 프로세서는 명령버퍼(도면중에서는, 1B라고 약기하고 있다)(32)와, 선택기(34)와, 명령레지스터(도면중에서는, IR이라고 약기하고 있다)(35)와, 데이터레지스터군(41)과, 어드레스레지스터군(42)와, 선택기(43)과, 스택포인터(44)와, ALU(51)과, 선택기(54),(55)와, 복귀번지연산겸용레지스터(56)과, 시프터(도면중에서는, SFT라고 약기하고 있다)(57)과, 선택기(58)과, 시프터(도면중에서는, SFTMD라고 약기하고 있다)(59)와, 프로그램카운터(61)과, 명령어드레스버퍼(66)(도면중에서는, IAB라고 약기하고 있다.)과, 명령인출버퍼(도면중에서는, IFB라고 약기하고 있다)(73)과, 피연산자어드레스버퍼(도면중에서는, OAB라고 약기하고 있다)(74)와, 스토어버퍼(도면중에서는, STB라고 약기하고 있다)(75)와, 로드버퍼(도면중에서는, LDB라고 약기하고 있다)(76)으로 구성되고, 버스(도면중에서는, ABUS라고 약기하고 있다), 제 1데이터버스(도면중에서는, BIBUS라고 약기하고 있다), 제 2데이터버스(도면중에서는, B2BUS라고 약기하고 있다), LDBUS, 명령버스(도면중에서는, IBUS라고 약기하고 있다)에 의해 동도면과 같이 접속되어 있다.
명령버퍼(이후 IB라고 생략함.)(32)는, 8비트폭이고, 3단의 버퍼이며, 명령의 실행에 앞서서 선행적으로 메모리로부터 인출된 명령이 저장된다. 예를들면 이 IB(32)에는, 먼저 설명한 「jsr_f1」등의 함수호출명령, 「mul D0, D1」의 승산명령의 어느 명령분인가가, 기계어상태로 되어서 저장된다.
선택기(34)는, IB(32)로부터 입력되는 명령과, IBUS로부터 입력되는 명령의 어느것이든 한쪽을 선택한다.
명령레지스터(이후 IR이라고 생략함)(35)는, 선택기(34)로부터 출력되는 명령을 유지한다.
데이터레지스터군(41)은, 주로 데이터를 유지하는 16비트길이의 4개의 레지스터를 가진다.
어드레스레지스터군(42)는, 주로 어드레스를 유지하는 16비트길이의 4개의 레지스터를 가진다.
선택기(43)은, ABUS와 LDB(76)으로부터 선택적으로 데이터레지스터군(41), 어드레스레지스터군(42) 및 스택포인터(44)에 출력한다.
스택포인터(44)는, RAM(78)에 있어서 스택으로서 사용되고 있는 영역의 선두어드레스를 유지한다.
ALU(51)은, 16비트길이의 데이터연산 및 어드레스연산을 행한다.
선택기(54),(55)는, ALU(51)에 입력해야할 피연산자를 선택한다.
복귀번지연산겸용레지스터MR(56)은, 승제산의 연산결과의 상위바이트를 유지하고, 잉여산의 연산결과의 잉여를 유지하는 16비트길이의 레지스터이다. 또 함수의 복귀번지도 유지한다.
또한, 프로세서가 상기한 C언어용의 컴파일러에 의해서 번역된 기계어 프로그램을 대상으로 한 경우, 이 복귀번지연산겸용레지스터(56)의 사용빈도는 극히 낮게 된다. 왜냐하면, 상기 C언어의 일반적인 규격에서는, 기본적으로 「16비트길이 연산의 연산결과는 16비트길이로 하고, 32비트길이연산의 연산결과는 32비트길이로 한다」라고하는 것처럼, 연산내용과 연산결과를 동일한 비트길이로 취급하도록 문법이 규정되어 있고, 또, 상기한 바와 같이 데이터레지스터, 어드레스레지스터, 데이터버스, 어드레스버스가 16비트길이이므로, 컴파일러는 승산의 연산결과를 16비트길이로 반올림하도록, 기계어프로그램을 생성하기 때문이다. 또한 본 실시예에서는, 16비트길이를 전제로해서 설명을 행하나, 이것이 다른 비트길이라도 되는 것은 말할것도 없다.
시프터(이후, SFT라고 약기한다)(57)은, ALU(51)의 출력을 받아서 시프트동작을 한다. 시프트동작을 종료하면, SFT(57)에는, 연산결과의 상위데이터가 들어간 상태로 된다. 또 ALU(51)이 제산을 행할 경우에는, SFT(57)에는 그 연산결과의 나눗셈에서 얻은 답이 들어간 상태로 된다.
선택기(58)은, ABUS상의 데이터와 SFTMD(59)의 데이터의 어느 하나를 선택한다.
시프터(이후, SFTMD라고 약기한다.)(59)는, 선택기(58)의 출력을 받아서 ALU(51)과 함께 시프트동작을 한다. 시프트동작을 종료하면, SFTMD(59)에는, 연산결과의 하위데이터가 들어간 상태로 된다. 또 ALU(51)이 제산을 행할 경우에는, SFT(57)에는 그 연산결과의 잉여가 들어간 상태로 된다.
프로그램카운터(61)은, 사전인출카운터버퍼(도면중에서는, PFCB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(62)와, 선택기(63)과, 프로그램카운터버퍼(도면중에서는, PCB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(64)로 구성된다.
PFCB(62)는, 16비트길이의 레지스터이고, 사전판독해야할 명령의 어드레스를 유지한다.
프로그램카운터버퍼PCB(64)는, 16비트길이의 레지스터이고, 항상 PFCB(62)의 1사이클후의 값을 유지한다.
선택기(63)은, PCB(64)와 PFCB(62)의 어느하나를 선택해서 ABUS또는 B1BUS에 출력한다.
명령어드레스버퍼(도면중에서는, IAB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(66)은, 명령을 인출해야할 어드레스를 어드레스버스에 부여한다.
명령인출버퍼(도면중에서는, IFB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(73), 피연산자어드레스버퍼(도면중에서는, OAB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(74), 스토어버퍼도면중에서는, SB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(75), 로드버퍼(도면중에서는, LB라고 약기하고 있다. 이후, 이 약칭을 사용한다)(76)은, 각각 명령, 피연산자어드레스, 스토어데이터, 로드데이터를 유지하기 위한 버퍼이다.
RAM(78), ROM(79)는, 각각 데이터, 명령을 유지한다.
ABUS는, 스택포인터(44), 데이터레지스터군(41), 어드레스레지스터군(42), SFTMD(59), 선택기(63), 복귀번지연산겸용레지스터(56), LDB(76), ALU(51) 및 SFT(57)의 출력행선과 접속되어 있다. 이와 같은 접속관계에 의해서, 스택포인터(44), 데이터레지스터군(41), 어드레스레지스터군(42)의 값이 ABUS를 개재해서 ALU(51)에 부여되는 것을 알 수 있다. 또 복귀번지연산겸용레지스터(56)의 값, 즉, 상태복귀시의 복귀번지가 ABUS를 개재해서 ALU(51)에 부여되는 것을 알 수 있다. 또, SFT(57) 및 SFTMD(59)의 유지값인 승산결과는, 이 ABUS 및 선택기(43)을 개재해서 복귀번지연산겸용레지스터(56) 및 데이터레지스터군(41)에 부여되는 것을 알 수 있다.
B1BUS는, 선택기(63), 스택포인터(44), 어드레스레지스타군(42)의 출력행선과 접속되어 있고, 선택기(54)의 입력원과 접속되어 있다. 이와 같은 접속관계에 의해서, 선택기(63)은 PFCB(162)이거나 PCB(64)이거나를 선택하고, 선택된 쪽의 값이 B1BUS를 개재해서 ALU(51)에 부여되는 것을 알 수 있다.
B2BUS, IB(32), 복귀번지연산겸용레지스터(56), 데이터레지스터군(41), LDB(76)의 출력행선에 접속되고, 선택기(54), 선택기(55) 및 LDB(76)의 입력원과 접속되어 있다. 이와 같은 접속관계에 의해서, IB(32)에 유지되어 있는 명령의 일부, 예를들면, jsr ⓐ(disp, PC)의 disp 등은 이 B2BUS를 경유해서 ALU(51)에 부여되는 것을 알 수 있다.
이상과 같이 구성된 프로세서가, 제 3도에 표시한 각 명령을 행하는 모양을 설명한다.
〈함수호출(jsr)명령의 실행시의 동작〉
{jsr명령의 제 3도에 표시한 ①의 동작}
스택포인터(44)의 지시치를 개재해서 ALU(51)에 전송하고, SP←SP-2를 계산시켜서, 결과를 ALU(51)로부터 그 위방향의 검은 동그라미, 그 우측의 검은 동그라미, 거기에서 ABUS를 향하는 패스를 경유하고, ABUS로부터 선택기(43)을 경유해서 스택포인터(44)에 전송한다.
{jsr명령의 제 3도의 표시한 ②의 동작}
스택포인터(44)의 지시치를 OAB(74)를 통해서 어드레스버스로 전송하고, 선택기(63)이 PCB(64)를 선택출력하므로서, PCB(64)의 값(INC(65)에 의해서 가산된 다음의 명령의 어드레스)을, ABUS, STB(75)를 경유해서, 메모리(78)속의 스택포인터(44)가 지시하는 번지에 유지한다.
환언하면 복귀번지를 스택에 축적한다.
{jsr명령의 제 3도에 표시한 ③의 동작}
선택기(63)이 PCB(64)의 값을 선택하고, PCB(64)의 값(다음명령의 어드레스)을 그위에 있는 검은동그라미로부터 그 우측의 검은 동그라미를 경유시키고, 선택기(63), ABUS를 경유시켜서, 복귀번지연산겸용 레지스터(56)에 전송한다.
{jsr명령의 제 3도에 표시한 ④의 동작}
선택기(63)이 PFCB(62)를 선택하고, PFCB(62)(PC)의 값이 선택기(63)을 통해서 B1BUS로부터 ALU(51)에 들어간다. IB(32)에 축적되어 있는 프로그램카운터PC와의 상대번지(disp)가 B2BUS를 통해서 ALU(51)에 들어간다. ALU(51)에서 계산된 점프행선의 어드레스(PC+disp)가 ALU(51)로부터 PCB(64)와 IAB(66)에 세트된다. 세트후, IB(32)속의 명령을 모두 말소한다.
〈복귀명령(rts명령)의 실행시의 동작〉
{rts명령의 제 3도에 표시한 ①의 동작}
DEC(80)이 복귀명령(rts명령)을 해독하면 스택포인터(44)의 지시치SP를 ALU(51)을 경유해서 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미를 경유해서 OAB(74)로부터 어드레스버스에 태운다. 이에의해, RAM(78)속의 스택에 유지되어 있는 복귀번지가 RAM(78)쪽의 데이터버스, LDB(76)을 경유해서 ABUS로부터 ALU(51), 선택기경유로 PCB(64)에 전송된다. 또, 그것과 함께 복귀번지가 IAB(66)에 전송된다. 이와 동시에 IB(32)속의 명령을 모두 말소한다.
{rts명령의 제 3도에 표시한 ②의 동작}
다음에 스택포인터(44)에 의한 지시치SP가 ABUS경유로 ALU(51)에 전송되고, SP←SP+2가 계산된다. 계산된 결과는 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미, 거기에서 ABUS를 향하는 버스를 지나, ABUS를 경유해서, 우측방향으로 가고, 그 위쪽의 선택기(43)을 지나고, 스택포인터(44)에 전송된다.
〈특수복귀명령(rts명령)의 동작〉
{rtsf명령의 제 3도에 표시한 ①의 동작}
DEC(80)이 복귀명령(rts명령)을 해독하면, 복귀번지연산겸용레지스터(56)에 저장되어 있는 복귀번지가 ABUS에 타고, ABUS로부터 ALU(51), 선택기경유로 PCB(64)에 전송되는 동시에 복귀번지가 IAB(66)에 전송되고, 처리가 복귀번지로 이동한다. 이와 동시에 IB(32)속의 명령을 모두 말소한다.
{rtsf명령의 제 3도에 표시한 ②의 동작}
다음에 스택포인터(44)를 ABUS경유로 ALU(51)에 전송하고, ALU(51)에 SP+2를 계산시킨다. 계산결과는 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미, 거기에서 ABUS를 향하는 패스를 지나, ABUS를 경유해서 우측방향으로 진행하고, 그 위쪽의 선택기(43)을 지나고, 스택포인터(44)에 전송된다.
〈승산명령(mul명령)의 실행시의 동작〉
DEC(80)이 승산명령(mul명령)을 해독하면, 레지스터Dn(곱수)의 값을 B2BUS에 태우고, ALU(51)에 넣고, 또 레지스터Dm(피곱수)의 값을 B1BUS에 태우고, ALU(51)에 넣는다. ALU(51)은 피곱수와 곱수를 승산하고, 승산한 결과의 하위바이트를 SFTMD(59)에 시프트해서, 상위바이트를 SFT(57)에 저장한다. SFT(57)에 저장된 승산결과의 상위바이트는 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미를 경유해서 ABUS에 타고, 복귀번지연산겸용레지스터(56)에 전송된다. SFT(57)에 저장된 승산결과의 하위바이트는 SFTMD(59)로부터 ABUS를 경유하고, 위쪽의 선택기(43)을 경유해서 레지스터DR에 전송된다.
다음에, 함수호출 및 호출된 함수로부터의 상태복귀를 행하는 모양을 설명한다. 제 9도에, 프로세서의 처리내용을 순서도로 표시한다. 또 제 6도는, 생성부 호변경장치에 의한 변경이 행하여진 프로그램을 표시한 도면이다. 본 도면에 있어서의 좌측의 화살표는, 본프로그램에 있어서 실행순서가 어떻게 변해가는지를 표시하고 있다. 또 우측에 있어서, Stagel, Stage2, Stage3이라고한 문자열이 첨가된 4각형은 스택 및 복귀번지연산겸용레지스터(56)을 모방하고 있으며, 그 속의 수치「0102」,「0104」함수호출실행시에 이들에 유지되는 복귀번지를 나타내고 있다. 이후, 이들 도면을 참조하면서, 상기와 같이 구성된 프로세서가 함수호출, 및 상태 복귀를 행하는 모양을 설명한다.
〈스텝t1~t5의 반복처리〉
{프로그램카운터의 설정 및 명령의 인출}
프로세서가 기동되면, 프로그램의 선두번지가 PCB(64)에 세트된다. 그와 동시에 IBA(66)에 세트된다. IAB(66)에 세트된 프로그램의 선두번지는 어드레스버스에 부여된다.
프로그램카운터(61)내의 프로그램카운터버퍼PCB(64)의 값은, INC(65)를 통과하고, 번지에 따라서 2바이트씩 또는 1바이트가산된다. 가산결과는 재차 PCB(64)에 설정되는 동시에 IAB(66)에 세트된다. 그와동시에 가산되기전의 PCB(64)의 값이 PFCB(62)에 전송된다. 이와 같이, 프로그램카운터버퍼PCB(64)의 값을 INC(65)를 통과시키므로서 프로그램카운터의 지시치PCB가 갱신되어가고, ROM(79)속의 기계어프로그램이 판독입력되어 간다.
프로그램의 실행개시때나 함수호출때등의 분기명령의 실행에 의해서 IB(32)가 빈경우는, 최초의 명령 1바이트가 IBUS로부터 직접 IR(35)에 유지된다. 어드레스버스, 데이터버스는 각각 16비트폭이고, IB(32)는 8비트폭이므로, 프로그램카운터PC의 지시치PCB가 1가산될때마다 1바이트길이의 명령이 IB(32)에 축적되어 간다. 또 프로그램카운터PC의 지시치PCB가 2가산될때마다, 2바이트길이의 명령이 IB(32)에 축적되어 간다(스텝t2). IB(32)에 축적된 명령중, 선두의 것은 IR(35)에 전송된다. IR(35)에 세트된 명령은 또 DEC(80)에 전송되고, 이 전송에 의해서 DEC(80)에 그 명령을 해독시킨다. 한편, IB(32)에 저장된 명령은 선입선출방식으로 차례로 IR(35)에 전송된다.
여기서, 명령이 존재하지 않는 번지가 어드레스버스에 탄경우, 즉, 명령이 존재하지 않는 어드레스의 번지가 PCB(64) 또는 IAB(66)에 세트되었을때, 또는 프로그램의 종료를 표시한 명령을 판독해넣었을때, 이것이, 프로그램의 종단부인 것으로 해서, 처리를 종료한다(스텝t1).
〈스텝t1~t5〉
{명령「mov #1, D1」의 인출 및 실행}
프로그램이 실행되면 프로그램의 선두어드레스 0100이 PCB(64)와 IAB(66)에 세트된다. 세트된 IAB(66)의 값이 0100이 어드레스버스에 전송되므로서, 상대번지 0100의 명령 「mov #1, D1」이 인출된다. 그리고, 인출한 명령이 함수호출명령인지를 판정한다(스텝t3). 상대번지0100의 「mov #1, D0」는 레지스터D0에 즉시 #1을 전송한다는 전송명령이므로, 명령「mov#1, D0」가 복수복귀명령인지를 판정한다(스텝t4). 「mov #1, D1」은, 특수복귀명령은 아니기 때문에, 그 명령을 실행한다「스텝t5」. 실행후, PCB(64)의 값이 가산되어 0101로 되고 다음의 명령, 즉, 상대번지 0101의 함수호출명령「jsr_f1」을 인출한다(스텝t2).
〈스텝t1~t3, t6, t7〉
{상대번지0101의 함수호출명령에 대해서의 동작}「jsr_f1」이 인출되었을때, IB(32)는, 「jsrf1」의 3바이트길이의 기계어부호로 충전되어 있다. 이 IB(32)의 내용은, 1단째로 jsr명령(1바이트)의 오퍼레이션부호가 유지되고, 2단째에 점프번지(또는 PCB(64)로부터의 상대번지(disp(디스플레이멘트)))의 하위 1바이트가 유지되고, 3단째에 점프번지(또는 PCB(64)로부터의 상대번지(disp(디스플레이먼트)))의 상위바이트가 유지된 상태로 되어있다. 이와 같이, IB(32)가 함수호출명령의 기계어부호로 충전되면, IR(35)를 개재해서, DEC(80)에 대해서 jsr명령의 오퍼레이션 부호가 DEC(80)이 전송된다. 전송후, DEC(80)은 IB(32)로부터 전송된 명령이 함수 호출명령인지 여부를 판정한다(스텝t3). 상대번지0101의 명령 「jsr_f1」은 함수호출명령이므로, 스택포인터(44)의 값을 ALU(51)에 전송하고, ALU(51)에 스택포인터(44)의 지시치SP에서부터 SP←SP-2를 계산시켜서, 결과를 스택포인터(44)에 전송시킨다.
계속해서 스택포인터(44)의 지시치SP를 어드레스버스에 태우고, 메모리(78)내의 영역을 지시시킨다. 이 지시된 영역내에 PCB(64)속의 다음명령의 어드레스를 유지한다. 이와같이해서, 복귀번지가 스택에 축적된다(스텝t6).
다음에 PCB(64)의 값(다음 명령의 어드레스)을 복귀번지연산겸용레지스터(56)에 전송하고, 복귀번지연산겸용레지스터(56)에 유지시킨다. 이 결과, 스택 및 복귀번지연산겸용레지스터(56)의 유지상태는 제 6도의 Stagel에 표시한 것으로 된다.
IR(35)에 있는 1바이트길이의 jsr명령이 DEC(80)에 의해서 해독되고 있을때, IB(32)에는 jsr명령의 점프행선의 어드레스 2바이트분이 유지되어 있다. 다음에 이 IB(32)에 유지되어 있는 값과 PC의 값을 사용해서 점프행선의 번지를 계산하고, 점프행선의 번지를 PCB(64)와 IAB(66)에 세트한다. 이와 같이, 점프번지를 세트하므로서 함수호출이 이루어진다. 세트후, IB(32)에 있어서 함수호출명령의 뒤에 나란히 하고 있는 명령이 불필요하게 되므로 이들을 말소한다(스텝t7).
〈스텝t1~t5〉
{함수f1, f2내의 처리}
함수f1에의 이행후, 함수f1에 있어서의 상대번지0105의 「mov #1, D1」, 상대번지0106의 「add D0, D1」을 차례로 인출해서 실행한다(스텝t1~t5). 이들 명령에 계속해서 상대번지 0107의 명령 「jsr_f2」를 인출하고 (스텝t2), 이것이 함수 호출명령인 것으로 판정한다(스텝t3). 이 명령 「jsr_f2」가 함수호출명령이므로, 다음명령의 어드레스, 즉, 상대번지 0108(PC+1=0107+1=0108)을 복귀번지로서 스택에 축적하고(스텝t6), 또, 복귀번지 0108을 복귀번지연산겸용레지스터(56)에 유지한다. 그 결과, 스택 및 복귀번지연산겸용레지스터(56)의 유지상태는 제 6도의 Stage3에 표시한 것으로 된다. 즉, 복귀번지 0108이 스택에 축적되고, 복귀번지연산겸용레지스터(56)의 유지치는, 복귀번지0108에 의해서 치환문자로 된것으로 된다. 복귀번지0108의 유지후, 점프행선의 번지(PC+disp(디스플레이멘트=0002))의 값을 계산하고, 계산결과를 프로그램카운터(61)에 전송한다(스텝t7).
이와 같이 점프행선의 번지(함수f2의 어드레스0109)가 PC에 전송되므로, 함수f2에의 이행이 행하여진다. 이행후, 상대번지0109, 상대번지010a, 010b, 010c…의 명령을 차례로 인출하고, 실행해나간다(스텝t1~t5), 상대번지0109의 명령「mov #3, D1」을 인출하고, 실행한 후, 상대번지 010a의 명령 「mul D0, D1」을 인출하고, DEC(80)에 부여한다. DEC(80)이 승산명령(mul명령)을 해독하면, 레지스터Dn(곱수)의 값을 B2BUS에 태우고, ALU(51)에 넣는다. 또 레지스터Dm(피곱수)의 값을 B1BUS에 태우고, ALU(51)에 넣는다. ALU(51)은 피곱수와 곱수를 승산하고, 승산한 결과의 하위바이트를 SFTMD(59)에 시프트해서, 상위바이트를 SFT(57)에 저장한다. SFT(57)에 저장된 승산결과의 상위바이트는 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미를 경유해서 ABUS에 타고, 복귀번지연산겸용 레지스터(56)에 전송된다. SFT(57)에 저장된 승산결과의 하위바이트는 SFTMD(59)로부터 ABUS를 경유하고, 위쪽의 선택기(43)을 경유해서 레지스터DR에 전송된다. 이와 같이, 승산명령을 행하면, 복귀번지연산겸용레지스터(56)은, 승산결과의 상위바이트를 유지한 상태로 된다. 이 결과, 스택 및 복귀번지연산겸용레지스터(56)의 유지상태는 제 6도의 Stage5에 표시한 것으로 된다. 즉, 복귀번지0108이 스택에 축적되고, 복귀번지연산겸용레지스터(56)의 유지치는, 승산결과에 의해서 치환문자로 된것으로 된다.
계속해서 상대번지 010b의 명령「add D0, D1」을 인출하고, 실행한 후, 상대번지010c의 명령을 인출한다(스텝t1, t2).
〈스텝t1~t3, t4, t8〉
{상대번지 010c의 rts명령의 실행시의 동작}
지금, 스택은 Stage6의 상태이다. 인출된 상대번지010c의 명령은 복귀명령「rts」이므로, 스택포인터(44)의 지시치SP를 ALU(510을 경유시키고, ALU(51)의 아래의 검은동그라미, 그 우측의 검은 동그라미를 경유시켜서 OAB(74)로부터 어드레스버스에 태운다. 이에 의해, RAM(78)속의 스택에 유지되어 있는 복귀번지0108이 RAM(78)쪽의 데이터버스, LDB(76)을 경유해서 ABUS로부터 ALU(51), 선택기 경유로 전송되고, PCB(64)에 유지된다. 그와 함께 복귀번지0108은 IAB(66)에도 전송된다. 이와 같은 전송의 뒤에, IB(32)속의 rts명령의 뒤에 나란히하고 있는 일련의 명령의 열이 불필요하게 되므로, 이들을 말소한다. 또한, 이 전송의 모양은, 제 6도의 Stage6에 있어서, 화살표←에 의해서 도면표시되어 있다.
말소후, 스택포인터(44)에 의한 지시치SP가 ABUS경유로 ALU(51)에 전송되고, SP←SP+2가 계산된다. 계산된 결과는 ALU(51)의 아래의 검은동그라미, 그 우측의 검은동그라미, 거기에서 ABUS를 향하는 패스를 지나, ABUS를 경유해서, 우측방향으로 행하고, 그위쪽의 선택기(43)을 지나, 스택포인터(44)에 전송된다. 이와같이해서 함수f2의 처리로부터 복귀하고, 다음스테이지에서 상대번지 0108의 명령이 판독된다.
〈스텝t1~t5〉
{상대번지0108의 복귀명령「rts」로부터 상대번지010e의 명령 「add D0, D1」까지의 동작}
상대번지0108의 명령은 복귀명령「rts」이므로, 재차 스택을 액세스하고, 스택으로부터 복귀번지0102를 인출해서, 인출한 복귀번지0102를 프로그램카운터(61)에 전송한다(스텝t3, t4, t5)(제 6도의 Stage4).
전송후, 상대번지0102의 명령을 인출하고, 실행한다(스텝t1~t5).
상대번지0102의 명령을 실행한 후, 상대번지0103의 명령을 인출한다. 상대번지0103의 명령은 함수호출명령「jsr_f3」이므로, 다음명령의 어드레스 즉 상대번지 0104를 복귀번지로해서 스택 및 복귀번지연산겸용레지스터(56)에 유지하고(Stage2), 점프행선의 번지(PC+disp)를 계산해서, 함수_f3에의 이행을 행한다(스텝t6, t7). 이 이행에 의해서, 상대번지010d의 명령「mov #1, D1」, 상대번지010e의 명령「add D0, D1」을 인출하고, 차례로 실행해나간다(스텝t1~t5). 계속해서 상대번지010f의 명령을 인출한다.
〈스텝t1~t4, t8〉
{특수복귀명령(rtsf명령)의 동작}
DEC(80)이 상대번지010f의 rtsf명령을 해독하면, 복귀번지연산겸용레지스터(56)에 저장되어 있는 복귀번지0104를 ABUS에 태우고, ABUS로부터 ALU(51), 선택기 경유로 PCB(64)에 전송시킨다. 그와동시에 복귀번지0104를 IAB(66)에 전송시킨다. 이때의 복귀번지연산겸용레지스터(56)의 모양을 제 6도의 Stage7에 표시한다. 즉, 복귀번지연산겸용레지스터(56)의 유지치는, 복귀번지0104에 의해서 치환문자된 것으로 되어있다. 이와같은 전송에 의해서, 서브루틴으로부터 함수main에의 상태복귀가 행하여진다. 이와같은 처리의 후에, IB(32)속의 rtsf명령의 뒤에 나란히하고 있는 일련의 명령의 열이 불필요하게 되므로 이들을 말소한다.
다음에 스택포인터(44)의 지시치SP를 ABUS경유로 ALU(51)에 전송하고, ALU(51)에 SP+2를 계산시킨다. 계산결과는 ALU(51)의 아래의 검은 동그라미, 그 우측의 검은동그라미, 거기에서 ABUS를 향하는 패스를 지나, ABUS를 경유해서 우측 방향으로 행하고, 그 위쪽의 선택기(43)을 지나고, 스택포인터(44)에 전송된다. 이 모양은 제 6도의 Stage7에 있어서, 화살표←에 의해서 도시되어 있다. 즉, 복귀번지연산겸용레지스터(56)으로부터 프로그램카운터PC에의 복귀번지의 전송에 의해서 상태복귀가 이루어지고 있는 것을 알 수 있다.
이상과 같이 본 실시예에 의하면 복귀번지의 유지를 위한 전용레지스터를 형성하지 않아도, 상태복귀를 위한 스택에의 액세스의 회수를 감소시킬 수 있다.
또한, 본 실시예는, 그 요지를 이탈하지 않는 범위에서 변경실시할 수 있다.
본 실시예에서는, 연산결과의 유지와, 복귀번지의 유지를, 승산, 제산, 영여산의 연산결과의 상위데이터유지용의 레지스터(복귀번지연산겸용레지스터)에 담당시켰으나, 다른 레지스터에 담당시키도록 구성해도 된다.
예를들면, 가산, 감산, 시프트연산의 연산결과의 상위데이터의 유지용으로 형성한 레지스터에 담당시켜도 된다.
또, 복귀번지연산겸용레지스터가 아니더라도, 사용빈도가 낮은 것이라면 다른 것을 적용해도 된다. 즉, 프로세서의 연산기의 연산길이 이외의 연산의 연산결과유지용으로 형성된 레지스터를 사용해도 된다. 예를들면, 본 실시예에서는, ALU(51)의 연산길이는 16비트이었으나, 프로세서에는, 이 연산길이이외의 연산, 즉, 연산길이가 16비트의 ALU에 있어서는, 32비트길이, 64비트길이연산의 연산결과유지용으로 레지스터를 형성하고 있는 경우가 있다. 이와 같은 레지스터는 대체로 사용빈도가 낮기때문에, 이들을 사용해도 된다.
또 연산결과의 상위데이터의 유지용이 아니더라도, 연산결과의 하위데이터의 유지용으로 형성된 레지스터에 복귀번지를 유지시키도록 해도 된다.
또, 본 실시예에서는, 복귀번지연산겸용레지스터를 1단으로 하였으나, 이것을 3단, 4단등의 복수단으로 3, 4개이상의 복귀번지를 유지시키도록해도 된다.
이 경우, 복귀번지연산겸용레지스터가 3단이면 3개의 복귀번지를 유지할 수 있고, 복귀번지연산겸용레지스터가 4단이면 4개의 복귀번지를 유지할 수 있다. 그 때문에 생성부호변경장치는, 네스트레벨이, 복귀번지연산겸용 레지스터의 단수이하로 되는 함수를 모두 검출하고, 검출한 함수속의 복귀명령을 특수복귀명령으로 변경한다.
이와 같이, 생성부호변경장치가 변경을 행하므로서, 복수의 복귀번지를 복귀번지연산겸용레지스터에 유지할 수 있다.
또 본실시예에서는, 부호생성장치에 의해서 어셈블러프로그램이 생성된 후에, 복귀명령을 특수복귀명령으로 변경하였으나, 예를들면, 이하의 (a),(b)에 표시한 바와 같이 변경실시를 행하는 것이 가능하다.
(a) 최적화장치는, ON에서 출력가능한 뜻을 표시하고, OFF에서 출력불가능한 뜻을 표시한 표시문자를 중간언어상태의 각함수에 대응시켜서 기억한다. 그리고 중간언어상태의 프로그램으로부터 특수복귀명령의 출력이 가능한 모든 함수를 검출하고, 검출한 함수에 대해서는, 특수복귀명령의 출력이 가능한 뜻을 표시한 표시문자를 ON으로하고, 검출되지 않았던 함수에 대해서는, 당해 표시문자를 OFF로 한다.
이상의 처리를 포함하는 최적화장치의 처리가 종료된 후, 부호생성장치는, 이들 표시문자를 참조하고, 이 표시문자가 ON인 함수에 대해서는, 그 말미가 rtsf명령인 서브루틴을 생성하고, 표시문자가 OFF인 함수에 대해서는, 그 말미가 rts명령인 서브루틴을 생성한다.
(b) 중간언어상태에 있어서, 최적화장치는, 중간언어상태의 함수중에 특수복귀명령의 출력이 가능한 것을 검출하고, 검출된 함수의 말미에 특수복귀명령의 출력가능한 뜻을 표시한 중간언어명령을 기록한다.
그리고, 부호생성장치는, 특수복귀명령의 출력가능한 뜻을 표시한 중간언어 명령이 말미에 존재하는 함수에 대해서는, 그 말미가 rtsf명령인 서브루틴을 생성한다.
특수복귀명령이 출력가능한 뜻을 표시한 중간언어명령이 말미에 존재하지 않는 함수에 대해서는, 그 말미가 rts명령인 서브루틴을 생성한다.
이상 설명한 바와 같이 본 발명의 제 1발명의 프로세서에 의하면, 인출된 명령이 서브루틴호출명령인 경우, 호출수단에 의해서 당해 명령의 다음의 어드레스를 복귀번지로서 스택 및 특정연산의 연산결과의 유지선인 전용레지스터에 유지하고, 제 2의 서브루틴리턴명령이 인출되었을 경우, 제 2의 복귀수단에 의해서 복귀번지가 특정연산의 연산결과의 유지선인 전용레지스터로부터 프로그램카운터에 복귀시켜지므로, 복귀번지의 유지전용레지스터를 형성하지 않아도, 상태복귀를 위한 스택에의 액세스의 회수를 감소시킬 수 있다. 그 때문에, 서브루틴으로부터의 상태복귀의 고속화가 가능한 프로세서를 저코스트로 제조할 수 있다.
또, 본 발명의 제 2발명의 프로세서에 의하면, 전용레지스터가 승산, 제산, 잉여산의 연산결과의 유지용이며, 이들의 연산은 이행선(移行先)의 서브루틴에서의 사용빈도가 낮기때문에, 이들의 연산을 포함하지 않는 서브루틴에서 전용레지스터를 사용한 상태복귀가 가능하게 된다.
따라서, 전용레지스터를 사용한 복귀번지의 유지를 바람직하게 행할 수 있다.
또, 본 발명의 제 3발명의 프로세서에 의하면, 전용레지스터가 프로세서의 연산기의 연산길이이외의 연산의 연산결과유지용으로 형성된 레지스터이며, 이들의 연산은 이행선의 서브루틴에서의 사용빈도가 낮기때문에, 이들의 연산을 포함하지않는 서브루틴에서 전용레지스터를 사용한 상태복귀가 가능하게 된다. 따라서, 전용레지스터를 사용한 복귀번지의 유지를 바람직하게 행할 수 있다.
또, 본 발명의 제 4발명의 프로세서에 의하면, 전용레지스터가 연산결과의 상위데이터 또는 하위데이터의 유지용으로 형성된 레지스터이며, 이와같은 레지스터는, 프로세서가 프로그래밍언어로부터 번역된 기계어프로그램을 대상으로 하는 경우, 이행선의 서브루틴에서의 사용빈도가 극히 낮기 때문에, 보다 많은 서브루틴에서 전용레지스터를 사용한 상태복귀가 가능하게 된다. 따라서, 스택에 대한 액세스회수를 보다 확실하게 적게할 수 있다.
또, 본 발명의 제 5발명의 프로그램번역장치에 의하면, 서브루틴호출명령을 포함하지 않고 또한 특정명령의 연산결과를 전용레지스터에 유지하지 않는 명령을 포함하는 서브루틴의, 제 1의 서브루틴리턴명령을, 제 2의 서브루틴리턴명령으로 변경하므로, 복귀번지를 전용레지스터로부터 인출시키게되는 기계어프로그램을 생성할 수 있다. 그 때문에, 본 프로그램번역장치에 의해서 생성되는 기계어프로그램은, 프로세서에 연산결과를 유지하는 전용레지스터에 복귀번지를 유지시킬 수 있다. 따라서, 본 프로그램번역장치에 의해서 생성되는 기계어프로그램은 복귀번지의 유지와, 연산결과의 유지를 동일한 레지스터로 겸용할 수 있고, 복귀번지의 유지용에만 전용하는 레지스터를 형성하지 않아도, 서브루틴으로부터의 고속복귀가 가능하게 된다.
또, 본 발명의 제 6발명의 프로세서에 의하면, 승산, 제산, 잉여산은, 이행선의 서브루틴에서의 사용빈도가 낮고, 이와 같이 사용빈도가 낮은 서브루틴내의 제 1의 서브루틴호출명령을 제 2의 서브루틴호출명령으로 변경하므로, 변경된 기계어프로그램은, 프로세서에 이들의 연산을 포함하지 않는 서브루틴에서 전용레지스터를 사용한 상태복귀를 행하게 할 수 있다. 따라서, 프로세서에 전용레지스터를 사용한 복귀번지의 유지를 바람직하게 행하게 할 수 있다.
또, 본 발명의 제 7발명의 프로세서에 의하면, 연산기의 연산길이이외의 연산은, 이행선의 서브루틴에서의 사용빈도가 낮고, 이와 같이 사용빈도가 낮은 서브루틴내의 제 1의 서브루틴호출명령을 제 2의 서브루틴호출명령으로 변경하므로, 변경된 기계어프로그램은, 프로세서에 이들의 연산을 포함하지 않는 서브루틴에서 전용레지스터를 사용한 상태복귀를 행하게 할 수 있다. 따라서, 프로세서에 전용레지스터를 사용한 복귀번지의 유지를 바람직하게 행하게 할 수 있다.
Claims (7)
- 메모리속의 명령을 순차적으로 인출해서 실행하는 동시에, 특정의 연산명령의 연산결과를 유지하는 전용레지스터를 전용(轉用)해서, 서브루틴의 복귀번지를 유지하는 프로세서로서, 특정명령의 연산결과와, 서브루틴의 복귀번지를 유지하는 전용레지스터와, 인출된 명령이 서브루틴호출명령인 경우에, 당해명령의 다음의 어드레스를 복귀번지로서 스택 및 전용레지스터에 유지하고, 그 서브루틴을 호출하는 호출수단과, 인출된 명령이, 복귀번지를 스택으로부터 복귀시키는 취지를 포함하는 제 1의 서브루틴리턴명령인 경우에, 복귀번지를 스택으로부터 프로그램카운터에 복귀시키는 제 1의 복귀수단과, 인출된 명령이, 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 제 2의 서브루틴리턴명령인 경우에, 복귀번지를 전용레지스터로부터 프로그램카운터에 복귀시키는 제 2의 복귀수단을 구비하는 것을 특징으로 하는 프로세서.
- 제1항에 있어서, 전용레지스터는, 승산, 제산, 잉여산중 어느 하나의 연산의 연산결과유지용으로 형성된 레지스터인 것을 특징으로 하는 프로세서.
- 제1항에 있어서, 전용레지스터는, 프로세서의 연산기의 연산길이이외의 연산의 연산결과유지용으로 형성된 레지스터인 것을 특징으로 하는 프로세서.
- 제2항 또는 제3항에 있어서, 전용레지스터는, 연산결과의 상위 데이터 또는 하위데이터의 어느한쪽의 유지용으로 형성된 레지스터인 것을 특징으로 하는 프로세서.
- 기계어프로그램을 생성하고, 생성한 기계어프로그램을 변경하는 프로그램번역장치로서, 생성된 기계어프로그램으로부터 서브루틴호출명령도, 연산결과를 전용레지스터에 유지하는 특정의 연산명령도 포함하지 않는 서브루틴을 검출하는 제 1의 검출수단과, 제 1의 검출수단에 의해서 검출된 서브루틴으로부터, 복귀번지를 스택으로부터 복귀시키는 취지를 포함하는 제 1의 서브루틴리턴명령을 검출하는 제 2의 검출수단과, 제 2의 검출수단에 의해서 검출된 제 1의 서브루틴리턴명령을, 복귀번지를 전용레지스터로부터 복귀시키는 취지를 포함하는 제 2의 서브루틴리턴명령으로 변경하는 변경수단을 구비한 것을 특징으로 하는 프로그램번역장치.
- 제5항에 있어서, 특정의 연산명령은, 승산, 제산, 잉여산중 어느하나인 것을 특징으로 하는 프로그램번역장치.
- 제5항에 있어서, 특정의 연산명령은, 프로세서의 연산기의 연산길이이외의 연산인것을 특징으로 하는 프로세서.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7113455A JP2857600B2 (ja) | 1995-05-11 | 1995-05-11 | プロセッサ及びプログラム翻訳装置 |
JP95-113455 | 1995-05-11 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR960042424A KR960042424A (ko) | 1996-12-21 |
KR100247899B1 true KR100247899B1 (ko) | 2000-03-15 |
Family
ID=14612679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019960015674A KR100247899B1 (ko) | 1995-05-11 | 1996-05-11 | 플로세서및프로그램번역장치 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6170998B1 (ko) |
EP (1) | EP0742513B1 (ko) |
JP (1) | JP2857600B2 (ko) |
KR (1) | KR100247899B1 (ko) |
CN (1) | CN1140870C (ko) |
DE (1) | DE69616867T2 (ko) |
TW (1) | TW405095B (ko) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6553426B2 (en) * | 1997-10-06 | 2003-04-22 | Sun Microsystems, Inc. | Method apparatus for implementing multiple return sites |
US6317796B1 (en) | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
FR2779842B1 (fr) * | 1998-06-15 | 2001-07-13 | Schlumberger Ind Sa | Procede de gestion de l'execution d'un programme dans un dispositif a circuit integre |
US6757892B1 (en) * | 1999-06-24 | 2004-06-29 | Sarnoff Corporation | Method for determining an optimal partitioning of data among several memories |
US6567975B1 (en) * | 1999-11-08 | 2003-05-20 | Sun Microsystems, Inc. | Method and apparatus for inserting data prefetch operations using data flow analysis |
US6820193B1 (en) * | 1999-12-17 | 2004-11-16 | Koninklijke Philips Electronics N.V. | Branch instructions with decoupled condition and address |
US6910119B1 (en) * | 2000-06-21 | 2005-06-21 | Intel Corporation | Instruction pipe and stall therefor to accommodate shared access to return stack buffer |
US6857063B2 (en) * | 2001-02-09 | 2005-02-15 | Freescale Semiconductor, Inc. | Data processor and method of operation |
US7546451B1 (en) | 2002-06-19 | 2009-06-09 | Finisar Corporation | Continuously providing instructions to a programmable device |
GB2400198B (en) * | 2003-04-04 | 2006-04-05 | Advanced Risc Mach Ltd | Controlling execution of a block of program instructions within a computer processing system |
KR100658918B1 (ko) * | 2004-03-29 | 2006-12-15 | 주식회사 팬택앤큐리텔 | 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법 |
US7401210B2 (en) | 2005-03-30 | 2008-07-15 | Arm Limited | Selecting subroutine return mechanisms |
CN100559344C (zh) * | 2005-08-23 | 2009-11-11 | 中国科学院计算技术研究所 | 一种支持用规则记录变量访问专用寄存器组的处理方法 |
JP5165969B2 (ja) * | 2007-08-29 | 2013-03-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムのコンパイルのために変数にレジスタを割り付ける技術 |
CN101452395B (zh) * | 2007-11-28 | 2013-04-24 | 无锡江南计算技术研究所 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
US9696975B2 (en) * | 2010-09-03 | 2017-07-04 | International Business Machines Corporation | Allocating register halves independently |
CN102364432B (zh) * | 2011-10-25 | 2013-12-18 | 中国科学院苏州纳米技术与纳米仿生研究所 | 使用双程序计数器计算待处理指令地址的系统 |
CN107870780B (zh) * | 2016-09-28 | 2020-04-28 | 华为技术有限公司 | 数据处理装置和方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02155038A (ja) * | 1988-12-07 | 1990-06-14 | Matsushita Electric Ind Co Ltd | データ処理装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4399507A (en) * | 1981-06-30 | 1983-08-16 | Ibm Corporation | Instruction address stack in the data memory of an instruction-pipelined processor |
JPH0752390B2 (ja) * | 1985-05-07 | 1995-06-05 | 株式会社日立製作所 | 命令処理装置 |
US5193205A (en) * | 1988-03-01 | 1993-03-09 | Mitsubishi Denki Kabushiki Kaisha | Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address |
US5117498A (en) * | 1988-08-19 | 1992-05-26 | Motorola, Inc. | Processer with flexible return from subroutine |
US5222220A (en) * | 1989-11-16 | 1993-06-22 | Mehta Hemang S | Microprocessor stack built-in guards |
US5106467A (en) * | 1990-10-05 | 1992-04-21 | Armco Steel Company, L.P. | Alkaline leaching of galvanized steel scrap |
US5598560A (en) * | 1991-03-07 | 1997-01-28 | Digital Equipment Corporation | Tracking condition codes in translation code for different machine architectures |
DE4211966A1 (de) * | 1992-04-09 | 1993-10-14 | Philips Patentverwaltung | Anordnung zum Abspeichern und Auslesen von Rücksprungdaten |
US5579520A (en) * | 1994-05-13 | 1996-11-26 | Borland International, Inc. | System and methods for optimizing compiled code according to code object participation in program activities |
JPH08212075A (ja) * | 1995-01-31 | 1996-08-20 | Nec Corp | 情報処理装置 |
-
1995
- 1995-05-11 JP JP7113455A patent/JP2857600B2/ja not_active Expired - Lifetime
-
1996
- 1996-01-22 US US08/589,854 patent/US6170998B1/en not_active Expired - Lifetime
- 1996-02-22 EP EP96301195A patent/EP0742513B1/en not_active Expired - Lifetime
- 1996-02-22 DE DE69616867T patent/DE69616867T2/de not_active Expired - Lifetime
- 1996-02-27 TW TW085102245A patent/TW405095B/zh not_active IP Right Cessation
- 1996-03-22 CN CNB961037164A patent/CN1140870C/zh not_active Expired - Lifetime
- 1996-05-11 KR KR1019960015674A patent/KR100247899B1/ko not_active IP Right Cessation
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02155038A (ja) * | 1988-12-07 | 1990-06-14 | Matsushita Electric Ind Co Ltd | データ処理装置 |
Also Published As
Publication number | Publication date |
---|---|
EP0742513A2 (en) | 1996-11-13 |
US6170998B1 (en) | 2001-01-09 |
JP2857600B2 (ja) | 1999-02-17 |
TW405095B (en) | 2000-09-11 |
DE69616867D1 (de) | 2001-12-20 |
EP0742513A3 (en) | 1997-03-19 |
DE69616867T2 (de) | 2002-04-11 |
CN1140870C (zh) | 2004-03-03 |
KR960042424A (ko) | 1996-12-21 |
JPH08305569A (ja) | 1996-11-22 |
EP0742513B1 (en) | 2001-11-14 |
CN1138172A (zh) | 1996-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100247899B1 (ko) | 플로세서및프로그램번역장치 | |
US4466061A (en) | Concurrent processing elements for using dependency free code | |
US4468736A (en) | Mechanism for creating dependency free code for multiple processing elements | |
EP1280056B1 (en) | Generation of debugging information | |
US20030028860A1 (en) | Compiler and debugging device | |
JPH0628036B2 (ja) | シミュレーシヨン方法 | |
JPH0782441B2 (ja) | シミユレーシヨン方法 | |
US6684394B1 (en) | Relocation format for linking with relocation instructions containing operations for combining section data | |
CN101311901B (zh) | 程序重写装置 | |
US6859932B1 (en) | Relocation format for linking | |
US4503492A (en) | Apparatus and methods for deriving addresses of data using painters whose values remain unchanged during an execution of a procedure | |
US4454579A (en) | System for performing call and return operations | |
EP0982655A2 (en) | Data processing unit and method for executing instructions of variable lengths | |
EP0742517A2 (en) | A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions | |
US6687899B1 (en) | Relocation format for linking | |
US6704928B1 (en) | Relocation format for linking | |
US4516203A (en) | Improved apparatus for encaching data whose value does not change during execution of an instruction sequence | |
US4447879A (en) | Improved apparatus for representing the size of an element in a compound data item and deriving addresses and lengths using the element size | |
EP0096574A2 (en) | System and method of renaming data items for dependency free code | |
JPH06337792A (ja) | プログラム変換装置およびプロセッサ | |
Steinbusch | Designing Hardware to Interpret Virtual Machine Instructions | |
US7886133B2 (en) | Information processing apparatus and method for accelerating information processing | |
US4481571A (en) | Digital data processing system with accumulation instructions | |
JP3123905B2 (ja) | プログラム翻訳装置、プログラム翻訳方法及びプロセッサ | |
JPH07168719A (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 | ||
G170 | Re-publication after modification of scope of protection [patent] | ||
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 |