KR20090094335A - 서브루틴 호를 인지하기 위한 방법들 및 장치 - Google Patents
서브루틴 호를 인지하기 위한 방법들 및 장치Info
- Publication number
- KR20090094335A KR20090094335A KR1020097013467A KR20097013467A KR20090094335A KR 20090094335 A KR20090094335 A KR 20090094335A KR 1020097013467 A KR1020097013467 A KR 1020097013467A KR 20097013467 A KR20097013467 A KR 20097013467A KR 20090094335 A KR20090094335 A KR 20090094335A
- Authority
- KR
- South Korea
- Prior art keywords
- subroutine call
- program flow
- sequential
- address
- register
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 43
- 238000010586 diagram Methods 0.000 description 9
- 230000000875 corresponding effect Effects 0.000 description 6
- 239000000872 buffer Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004044 response 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/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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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
- 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/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
- Communication Control (AREA)
Abstract
서브루틴 호를 인지하기 위한 장치가 설명된다. 그 장치는 회로를 포함하는데, 그 회로는 레지스터의 컨텐츠를 수신하기 위한 제 1 입력부, 프로그램 플로우에서의 비-순차적인 변화를 수신하기 위한 제 2 입력부, 및 상기 프로그램 플로우에서의 비-순차적인 변화 이후의 다음 순차적인 주소를 수신하기 위한 제 3 입력부를 구비한다. 상기 회로는 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 상기 다음 순차적인 주소와 상기 레지스터의 컨텐츠를 비교하도록 구성된다.
Description
본 발명은 일반적으로 파이프라인 프로세서들(pipelined processors)의 분야에 관한 것으로, 특히, 파이프라인 프로세서의 전력을 감소시키고 활용을 증가시키기 위해서 서브루틴 호를 인지하는 방법에 관한 것이다.
마이크로프로세서들은 매우 다양한 애플리케이션들에서 계산 작업들을 수행한다. 소프트웨어 변화들을 통한 더 빠른 연산 및/또는 증가된 기능을 가능하게 하기 위해서는 향상된 프로세서 성능이 거의 항상 바람직하다. 휴대용 전자 장치들과 같은 많은 삽입식 애플리케이션들(embedded applications)에서는, 전력을 절감하는 것이 프로세서 설계 및 구현에 있어 또한 가장 중요한 목표이다.
많은 최근의 프로세서들은 파이프라인 구조를 이용하는데, 그 파이프라인 구조에서는 전체적인 프로세서 스루풋(throughput)을 증가시키기 위해서 순차적인 명령들이 실행에 있어 겹친다. 파이프라인을 통해 원활한 실행을 유지하는 것이 고성능을 달성하는데 도움을 준다. 가장 최근의 프로세서들은 또한 최근에 액세스된 데이터 및 명령들의 국부적인 복사본들을 저장하는 고속 온-칩 캐시 메모리를 갖는 계층적 메모리(hierarchical memory)를 활용한다.
실세계 프로그램들은 간접 분기 명령들을 포함하는데, 그 간접 분기 명령들의 실제 분기 작용은 그 명령들이 실행 파이프라인에서 실제로 깊게(deep) 평가될 때까지는 알려지지 않는다. 가장 최근의 프로세서들은 일부 형태의 분기 예측을 이용하고, 그럼으로써 간접 분기 명령들의 분기 작용이 파이프라인에서 초기에 예측되는데, 이를테면 페치 또는 디코드 파이프 스테이지 동안에 예측된다. 분기 예측 기술을 활용함으로써, 프로세서는 간접 분기 명령의 목표를 추론적으로(speculatively) 페치하고 파이프라인을 방향변경(redirect)함으로써 그 추론적으로 페치된 명령들의 처리를 개시한다. 실제 분기 목표가 실행 파이프 스테이지와 같은 나중의 파이프 스테이지에서 결정될 때는, 만약 분기가 잘못 예측되었다면, 상기 추론적으로 페치된 명령들은 파이프라인으로부터 플러시(flush)되어야 하고, 새로운 명령들이 정확한 목표 주소로부터 페치되어야 한다. 잘못된 분기 목표 예측에 응하여 명령들을 미리 페치하는 것은 프로세서 성능 및 전력 소모에 악영향을 준다.
간접 분기 명령들의 일예는 서브루틴으로부터 복귀하기 위해 활용되는 분기 명령들을 포함한다. 예컨대, 서브루틴으로부터의 복귀 호는 복귀 주소가 레지스터의 컨텐츠에 의해 정해지는 분기 명령을 포함할 수 있다. 복귀 주소는 서브루틴이 완료된 이후에 페치될 다음 명령을 정의하며, 일반적으로 그 서브루틴이 최초에 호출되었던 분기 명령 이후의 명령이다. 많은 고성능 구조들은 서브루틴 복귀들에서 사용할 특정 범용 레지스터를 지정하는데, 그 특정 범용 레지스터는 링크 레지스터로서 일반적으로 지칭된다.
편의상, 복귀 호는 분기 복귀 명령으로도 지칭될 수 있다. 프로세서 파이프라인이 분기 복귀 명령에 대한 분기 예측을 활용하도록 하기 위해, 종래의 소프트웨어는 복귀 주소를 링크 레지스터에 레코딩하기 위해서 분기 및 링크 명령과 같은 명시적인 서브루틴 호를 포함한다. 많은 고성능 구현들은 분기 및 링크 명령을 처리하는 디코드 스테이지에서 링크 스택 구조를 포함한다. 링크 복귀 값들이 이러한 스택 상에 밀어 넣어지고, 그럼으로써 상응하는 서브루틴들이 복귀할 때 정확한 분기 예측이 가능해 진다. 종래의 링크 스택 구조들은 파이프라인을 통해 흐르는 여러 서브루틴 호들을 지원하고 또한 여러 레벨들의 서브루틴 호들의 네스팅(nesting)을 지원하기 위해서 복귀 주소들의 리스트를 포함한다. 그 결과, 서브루틴 내의 분기 복귀 명령이 디코딩될 때는, 만약 프로세서가 파이프라인을 방향변경해야 한다고 다른 분기 예측 하드웨어가 명령한다면, 목표 주소를 예측하기 위해 분기 예측에서 활용될 링크 스택 구조로부터 복귀 주소가 판독된다. 만약 예측된 결과가 파이프라인을 방향변경할 것을 나타낸다면, 그 파이프라인은 링크 스택 구조로부터 판독되었던 복귀 주소로부터 명령들을 페치하기 시작한다.
그러나, 서브루틴을 호출할 때 종래의 분기 및 링크 명령들을 생성하지 않거나 또는 포함하지 않는 많은 컴파일러들 및 래거시(legacy) 코드가 존재한다. 그러므로, 이러한 상황들에서는, 링크 스택 구조가 절충될 링크 스택 구조의 완전성(integrity)을 유도하기 위해 활용되지 않는다. 예컨대, 링크 스택 구조로부터 복귀 주소의 종래의 포핑(popping)은 제 1 장소에서 복귀 주소의 포핑을 촉구한(stimulated) 복귀 명령에 서로 관련되지 않을 수 있다. 절충된 링크 스택 구조의 한 효과는 복귀 명령들에 대한 증가된 잘못된 예측들을 포함한다. 게다가, 서브루틴 호가 프로그램 세그먼트에서 인지되지 않는 이러한 상황들에서는, 그 문제가 더욱 심각해지는데, 그 이유는 분기 예측 하드웨어가 후속하는 인지가능하지 않은 서브루틴 호들 상에 링크 스택 구조를 파플레이트(populate) 하는데 활용될 수 없기 때문이다. 일예로서, ARM Ltd.의 호환성 프로세서 상에서 실행될 코드 세그먼트를 포함하는 아래의 표를 참조하자:
표 1 : 코드 세그먼트
표 1에서 코드 세그먼트의 프로그램 플로우는 주소 0x00899808에서 시작하여 주소 0x00899814까지 순차적인 순서로 명령들을 처리하는 것을 포함한다. 주소 0x00899814에서, 분기 명령은 처리되는 다음 명령이 서브루틴의 시작인 주소 0x00990000에 위치하도록 프로그램 플로우를 변경한다.
링크 레지스터(즉, LDR LR, 0x00899818)와 분기 명령(즉, BR)을 설정하는 것의 결합은 서브루틴으로의 후속적인 분기를 위해 프로세서를 준비한다. 이 예에서, 호가 이루어지는 실제 서브루틴은 주소 0x00990000에서 시작하여 주소 0x0099000C에서 종료한다. LDR LR, 0x00899818 명령은 주소 0x00899818이 링크 레지스터(LR)에 복사됨으로써 복귀 주소(주소 0x00899818)가 링크 레지스터에 저장되도록 해야 한다는 것을 나타낸다. 서브루틴의 마지막에는, 복귀 주소가 링크 레지스터로부터 검색된다. 더 상세하게는, 그 복귀 주소는 BX LR(분기 복귀 명령)을 실행할 때 검색된다. 서브루틴 호를 의미하는 다른 코드 세그먼트들이 존재하며, 명령들(MOV LR, PC BR[A])의 순차적인 결합과 같이 링크 레지스터를 변경하는 명령들을 포함하는데, 여기서 [A]는 서브루틴의 처음의 주소이다.
도 1은 프로세서의 기능 블록도를 나타낸다.
도 2는 도 1에 도시된 파이프라인을 통한 명령들의 예시적인 흐름을 따르는 타이밍도를 나타낸다.
도 3은 분기 목표 주소 캐시(BTAC)의 예시적인 부분을 나타낸다.
도 4A 및 도 4B(총괄하여 도 4)는 도 1에 도시된 IsCall 로직 회로의 예시적인 실시예를 나타낸다.
도 5는 서브루틴 호를 인지하는 방법을 나타낸 흐름도를 나타낸다.
본 발명은 이러한 레거시 소프트웨어, 서브루틴 호에 상응하는 둘 이상의 명령들을 가진 코드 세그먼트들을 생성하는 컴파일러들, 및 서브루틴을 호출할 때 종래의 분기 및 링크 명령들을 활용하기 위해 재기록 레거시 소프트웨어에 수반되는 비용의 편재성(pervasiveness)을 인지한다. 또한, 본 발명은 분기 복귀 명령 시에 링크 스택 구조를 활용하고 또한 복귀 주소를 효과적으로 예측하기 위해서 서브루틴 호를 의미하는 명령 시퀀스들을 인지하도록 오늘날 개발되어진 마이크로프로세서들에 대한 필요성을 인지한다.
일실시예에 따르면, 서브루틴 호를 인지하는 방법이 제공된다. 그 방법은 프로그램 플로우에서의 비-순차적인 변화를 검출하는 단계, 상기 프로그램 플로우에서의 검출된 비-순차적인 변화 이후의 다음 순차적인 주소를 검색하는 단계, 및 상기 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 레지스터의 컨텐츠와 상기 다음 순차적인 주소를 비교하는 단계를 포함한다.
다른 실시예는 서브루틴 호를 인지하기 위한 장치에 관련된다. 그 장치는 3개의 입력부들을 갖는 회로를 포함한다. 제 1 입력부는 레지스터의 컨텐츠를 수신하도록 구성된다. 제 2 입력부는 프로그램 플로우에서의 비-순차적인 변화를 수신하도록 구성된다. 제 3 입력부는 프로그램 플로우에서의 비-순차적인 변화 이후의 다음 순차적인 주소를 수신하도록 구성된다. 그 회로는 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 상기 다음 순차적인 주소와 상기 레지스터의 컨텐츠를 비교하도록 구성된다.
또 다른 실시예에 따르면, 다른 장치가 설명된다. 그 장치는 명령들을 처리하기 위한 프로세서 파이프라인 및 상기 프로세서 파이프라인에 연결된 회로를 포함한다. 그 회로는 레지스터의 컨텐트, 프로그램 플로우에서의 비-순차적인 변화에 대한 표시, 및 상기 프로그램 플로우에서의 비-순차적인 변화에 대한 표시 이후의 다음 순차적인 주소를 수신하도록 구성된다. 그 회로는 또한 상기 프로그램 플로우에서의 비-순차적인 변화에 대한 표시가 서브루틴 호인지 여부를 결정하기 위해서 링크 레지스터의 컨텐츠와 상기 다음 순차적인 주소를 비교하도록 구성된다.
본 발명의 다른 실시예들이 아래의 상세한 설명으로부터 당업자들에게 쉽게 자명해질 것이고, 본 발명의 여러 실시예들이 예로서 도시되고 설명된다. 알게 될 바와 같이, 본 발명은 다른 상이한 실시예들일 수 있고, 그것의 일부 세부사항들은 본 발명으로부터 모두 벗어나지 않는 여러 다른 양상들에서의 변경일 수 있다. 따라서, 도면들 및 상세한 설명은 본래 예시적인 것으로 간주될뿐 제한적인 것으로 간주되지 않아야 한다.
도 1은 본 발명의 양상들이 이용될 수 있는 프로세서(100)의 기능 블록도를 나타낸다. 프로세서(100)는 최근에 처리된 명령들을 캐싱(cache)하기 위한 명령 캐시(I-캐시)(110), 및 명령이 I-캐시(110)에서 발견되지 않을 때 메모리(138)에 액세스하기 위한 메모리 인터페이스(136)를 구비한다. 메모리(138)는 프로세서(100) 상에 위치되거나 또는 프로세서(100)에 떨어져서 위치될 수 있고, 계층 2(L2) 메모리 컴포넌트를 포함할 수 있다.
프로세서(100)는 또한 명령들을 처리하기 위한 명령 파이프라인(105), 및 간접 분기 명령에 대한 목표 주소를 예측하고, 또한 목표 주소를 처리하기 위해 명령 파이프라인(105)을 방향변경(redirect)할지 여부를 예측하기 위한 분기 예측 회로(132)를 구비한다. 만약 분기 예측 회로(132)가 명령 파이프라인(105)을 방향변경할 것으로 예측한다면, 간접 분기 명령은 "테이큰(taken)으로 예측"되었다고 말해진다. 만약 간접 분기 명령이 "테이큰으로 예측"되었다면, 분기 예측 회로(132)는 간접 분기 명령의 목표 주소를 예측하고, 그 목표 주소에 있는 명령들을 페치하기 시작하기 위해서 명령 파이프라인(105)을 방향변경한다.
프로세서(100)는 제어 로직 회로(122)에 따라 명령 파이프라인(105)에서 명령들을 처리한다. 일부 실시예들에 있어서, 파이프라인(105)은 둘 이상의 병렬 파이프라인을 갖는 수퍼스칼라 설계일 수 있다. 파이프라인(105)은 명령 페치 유닛(IFU) 스테이지(102), 디코드(DCD) 스테이지(106), 명령 큐(IQ) 스테이지(108), 레지스터 액세스(RACC) 스테이지(112), 및 실행 스테이지(EXE)(120)와 같은 여러 파이프 스테이지들을 포함한다. 일부 실시예들에서, 파이프 스테이지는 한번에 하나의 명령을 처리할 수 있다. 다른 실시예에서, 파이프 스테이지는 한번에 둘 이상의 명령들을 동시에 처리할 수 있다. 파이프 스테이지들이 본 발명의 범위를 제한하지 않고 파이프라인(105)에 추가되거나 혹은 제외될 수 있다는 것을 알아야 한다. 프로세서(100)는 또한 레지스터들을 포함하는 범용 레지스터(GPR) 파일(118)을 구비하는데, 그 레지스터들은 마이크로구조 컨벤션(microarchitectural convention)을 통해 파이프 스테이지들(112 및 120)에 의해서 액세스가능하다.
명령 페치 유닛(IFU) 스테이지(102)는 I-캐시(110)에 있는 명령들을 검색하려 시도한다. 만약 명령 주소가 I-캐시(110)에서 발견되지 않는다면, 명령 페치 유닛(IFU) 스테이지(102)는 메모리(138)로부터 상응하는 명령을 검색하기 위해 요청을 개시한다. 디코드 스테이지(106)는 명령을 완전히 디코딩한다. 게다가, 디코드 스테이지에서 수행되는 종래의 기능들 외에도, 디코드 스테이지(106)는 ARM Inc.의 분기 및 링크 명령과 같은 종래의 서브루틴 호 명령들을 인지하고, 링크 스택 구조(134)에 복귀 주소를 기록한다. 링크 스택 구조(134)는 순환 버퍼로서 관리되는 레지스터들의 세트일 수 있다. 복귀 주소는 파이프라인(105)이 서브루틴의 완료 시에 방향변경되도록 하는 명령의 주소이다. 간접 분기 명령을 통해, 디코드 스테이지(106)는 그 분기 명령의 추론적인 목표로부터 파이프라인(105)에 명령들을 페치하기 시작할지 여부를 결정하기 위해서 분기 예측 회로(132)를 인보크(invoke)할 수 있다.
명령 큐 스테이지(108)는 추론적인 페칭이 실행 파이프라인의 스톨들(stalls) 동안에(만일 있다면) 계속되도록 하기 위해서 하나 이상의 명령들을 버퍼링한다. 레지스터 액세스 스테이지(112)는 명령에 의해서 요구될 수 있을 때 범용 레지스터(118)로부터 하나 이상의 피연산자들(operands)을 검색한다. 실행 스테이지(EXE)(120)는 명령들을 실행하기 위해서 산술 로직 유닛 등과 같은 공지된 컴포넌트들을 구비한다. 실행 스테이지(120)로부터 생성되는 결과들은 GPR 파일(118)에 기록된다. 실행 스테이지(120) 동안에는, 디코드 스테이지(106) 동안에 이루어진 분기 예측이 정확한지를 결정하기 위해서 실질적인 분기 분석(actual branch resolution)이 이루어진다. 만약 실질적인 분기 분석이 예측된 목적지와 상이하다면, 분기는 잘못 예측된 것으로 말해진다.
실행 스테이지(120)는 또한 분기 명령이 묵시적인 서브루틴 호에 상응하는지를 결정하기 위해서 IsCall 로직 회로(114)를 인보크한다. 그 IsCall 로직 회로(114)는 DCD(106) 또는 IFU(102)와 같은 초기 파이프 스테이지 동안에 묵시적인 서브루틴 호로서 해석될 분기 명령의 후속적인 실행을 위해서 그 결과를 분기 예측(BP) 회로(132)에 레코딩한다. 일실시예에 있어서, 상기 레코딩된 결과는 BP 회로(132)에 저장되는 플래그이며, 분기 명령과 연관된다. 만약 분기 명령이 묵시적인 서브루틴 호라면, IsCall 로직 회로(114)는 그 분기 명령 다음의 명령의 주소로 링크 스택 구조(134)를 업데이팅한다. IsCall 로직 회로(114)는 도 4의 설명과 관련하여 더욱 상세히 설명될 것이다.
비록 도 1은 실행 스테이지(EXE)(120)가 IsCall 로직 회로(114)에 연결되는 것으로 도시하고 있지만, IsCall 로직 회로(114)는 대안적으로 파이프라인(105)의 초기 스테이지에 연결될 수 있다. 대안적인 실시예에서, 디코딩 스테이지(DCD)(106)는 IsCall 로직 회로(114)에 연결될 수 있다. 이 실시예에서, 디코드 스테이지(DCD)(106)는 일단 BR 명령이 디코딩되었다고 결정하면 IsCall 로직 회로(114)를 인보크한다.
당업자들은 프로세서(100)의 여러 변경들이 가능하다는 것을 알 것이다. 예컨대, 프로세서(100)는 I-캐시(110)를 위해서 제 2-레벨(L2) 캐시를 구비할 수 있다. 또한, 프로세서(100)에 도시된 기능 블록들 중 하나 이상이 특정 실시예로부터 생략될 수 있다. 트랜스레이션 룩어사이드 버퍼(translation lookaside buffer), 데이터 캐시 등과 같이 프로세서(100) 내에 존재할 수 있는 다른 기능 블록들은 본 발명에 대한 설명에 적절하지 않아서 명확성을 위해 생략된다.
도 2는 도 1에 도시된 파이프라인(105)을 통해 명령들의 플로우를 따르는 타이밍도(200)이다. 특히, 타이밍도(200)에서 추적되는 명령들의 플로우는 표 1에 도시된 바와 같은 코드 세그먼트이다. 본 발명을 위해서, "묵시적인 서브루틴 호"란 용어는 결합된 기능이 서브루틴 호를 준비하는 레지스터들을 설정하고 서브루틴을 호출할 둘 이상의 명령들의 결합을 지칭한다. 예컨대, 표 1을 참조하면, 두 개의 명령들, 즉, LDR LR,0x0089908 및 BR 0x0090000은 묵시적인 서부루틴 호를 정의한다. 이러한 경우에, LDR 명령은 그 묵시적인 서브루틴 호의 시작을 정의하고, BR 명령은 그 묵시적인 서브루틴 호의 마지막을 정의한다.
타이밍도(200)의 열들(210A-210E)은 파이프라인(105)의 스테이지들에 상응한다. 행들(1-11)은 순차적인 타이밍 사이클들에 상응한다. 설명을 위해서, 각각의 파이프 스테이지는 사이클마다 하나의 명령을 처리한다. 그러나, 본 발명의 내용들이 다수의 사이클 파이프 스테이지들에 적용될 뿐만 아니라 사이클마다 다수의 명령들을 처리할 수 있는 파이프 스테이지들에도 적용될 수 있다는 점을 당업자는 알아야 한다.
타이밍도(200)의 열(210F)은 간접 분기 명령이 서브루틴 호를 유도하는지 여부를 나타내는 플래그로 불리는 IsCallFlag의 컨텐츠에 상응한다. 열(210G)은 링크 레지스터(LR)의 컨텐츠에 상응한다. 열(210H)은 IsCall 로직 회로(114)의 결과로서 링크 스택 구조(134)와 같은 링크 스택 구조의 컨텐츠에 상응한다.
일반적으로, 명령들은 IFU 스테이지(210A)에 입력되고, 다음 사이클에서 다른 스테이지에 전달된다. 사이클 1에서는, LDR LR, 0x00899818 명령이 IFU 스테이지(210A) 내에 있다. 명령들(ADD, SUB, BR) 및 일반적인 명령(INSTRA)이 IFU 파이프 스테이지(210A)로부터 순차적으로 페칭된다. 사이클 5에서는, 시간 포인트(215)에서, 디코드 스테이지(210B)가 BR 명령을 디코딩하고, 분기 예측 회로(132)와 같은 분기 예측을 인보크한다. 분기 예측은 BR 명령이 받아들여질 것이고 따라서 파이프라인(105)이 서브루틴 명령들(ADD, SUB, MOV, 및 BX)을 순차적으로 페칭하기 위해 방향변경되는 것을 예측한다. 그 서브루틴은 표 1에 제시된 바와 같이 ADD 명령을 통해 시작해서 BX 명령을 통해 종료하는 모든 명령들을 포함한다. 파이프라인(105)을 방향변경하기 이전에, INSTRA는 그것이 분기 예측 이전에 페칭되었기 때문에 파이프라인(105)으로부터 플러시된다. BR 명령에 후속하는 블랭크 사이클(blank cycle)은 파이프라인(105)의 INSTRA 명령이 플러시되지 않은 경우에 그 명령의 위치가 받아들여질 것이라는 것을 나타낸다.
사이클들 1-5로부터, LDR 명령은 파이프 스테이지들(210B-210E)을 통해 전달된다. 사이클 5에서는, 시간 포인트(205)에서, 실행 스테이지(210E)가 복귀 주소(0x00899818)을 링크 레지스터(LR)에 로딩하기 위해 LDR 명령을 실행한다. 시간 포인트(220)에서는, 복귀 주소(RA)(0x00899818)가 링크 레지스터에서 이용가능하다. 그 복귀 주소는 표 1에서 INSTRA를 지칭하는데, 이는 주소(0x00990000)에서 시작하는 서브루틴을 실행하는 것이 종료되었을 때 명령 실행의 플로우가 주소(0x00899818)로 복귀해야 한다는 것을 의미한다.
시간 포인트(225)에서는, 실행 스테이지(210E)가 BR 명령을 실행한다. 실행 스테이지(210E)는 그 BR 명령이 받아들여져야 하는지 여부를 확인한다. 실행 스테이지(210E)는 또한 그 BR 명령이 서브루틴으로의 분기인지 여부를 결정하기 위해서 IsCall 로직 회로(114)를 인보크한다. "서브루틴으로의 분기"란 문구는 서브루틴 호로도 또한 지칭된다. IsCall 로직 회로(114)는 심지어 INSTRA가 파이프라인(105)으로부터 이미 플러시되었더라도 INSTRA의 주소인, BR 명령에 후속하는 다음 주소를 활용한다. 다음 명령의 주소는 링크 레지스터(LR)에 저장된 복귀 주소와 동일하기 때문에, IsCall 로직 회로(114)는 BR 명령과 연관된 IsCallFlag(210F)를 설정하고, 분기 예측 회로(132)의 BR 명령의 주소를 통해 그것을 저장한다. 예시적인 분기 예측 저장 엘리먼트가 도 3과 관련하여 설명될 것이다. 또한, IsCall 로직 회로(114)가 시간 지점(230)에서 링크 상태 구조(210H)에 복귀 주소를 복사한다.
서브루틴의 마지막 명령(BX)이 시간 지점(235)인 사이클 10에서 디코딩된다. 디코드 스테이지(210B)는 BX 명령을 복귀 호로서 인지하고, 따라서 분기 예측 회로(132)는 복귀 주소(BR)를 링크 상태 구조(210H)로부터 포핑함으로써 프로그램 플로우를 예측한다. 디코드 스테이지(210B)는 주소가 복귀 주소(RA)와 동일한 INSTRA로부터 페칭하기 시작하도록 파이프라인(105)을 방향변경한다. 참조 포인트(240)를 참조하자. 또한, 사이클 11에서는, RA가 포핑되었기 때문에(즉, 링크 상태 구조로부터 판독 및 제거되었기 때문에), 링크 상태 구조(210H)는 더 이상 복귀 주소를 포함하지 않는다. 타이밍도(200)에 도시된 바와 같이 도 1의 프로세서를 활용함으로써, 결합된 LDR 및 BR 명령들에 의해 정의되는 묵시적인 서브루틴 호는 링크 상태 구조가 복귀 주소를 저장하도록 허용한다.
BR 명령이 파이프라인(105)에 의해서 처리되는 그 다음 시간에서는, 분기 예측 회로(132)가 BR 명령이 파이프라인(105)에 의해 처리되어진 처음 시간보다 더 일찍 링크 상태를 파플레이트(populate)하기 위해서 거기에 저장된 BR 명령의 주소와 연관된 IsCallFlag를 활용할 수 있다.
클록 사이클 n에서는, 동일한 BR 명령이 IFU 스테이지(210A)에서 파이프라인(105)에 입력된다. 클록 사이클 n+1에서는, INSTRA가 IFU 스테이지(210A)에서 입력되고, BR 명령이 DCD 스테이지(210B)에 의해 디코딩된다. DCD 스테이지(210B) 동안에, 분기 예측 회로(132)는 BR 명령의 주소를 검사하고, 그 주소가 BR 명령이 서브루틴 호라는 것을 나타내는 상응하는 IsCallFlag를 가진다는 것을 확인한다. 그 결과, DCD 스테이지(210B)는 참조번호 245에 도시된 바와 같이 링크 상태 구조(210H)에 다음 주소, 즉, INSTRA에 대한 주소를 밀어 넣는다.
도 3은 분기 목표 주소 캐시(BTAC)(300)의 예시적인 부분이다. BTAC(300)는 분기 예측 회로(132)에 의해 적절히 이용된다. BTAC(300)는 적어도 3개의 열들, 즉, 열들(310A, 310B 및 310N)을 포함한다. 열(310A)은 분기 명령들의 주소들을 포함한다. 열(310B)은 분기 목표 주소들을 포함하는데, 즉, 상응하는 분기 명령이 분기되는 마지막 주소를 포함한다. 열(310N)은 IsCallFlag의 값을 포함한다. 그 IsCallFlag는, 설정될 때, 연관된 분기 명령이 서브루틴 호에 상응하는 것을 나타낸다. 행(305)은 표 1에서의 BR 명령에 상응하는데, 여기서 그것의 주소는 0x00899814이고, 그것의 목표 주소는 ADD 명령에 상응하는 0x00990000이며, 그것의 IsCallFlag가 설정된다.
도 4A 및 도 4B는 IsCall 로직 회로의 여러 실시예들을 나타낸다. 이러한 실시예들은 도 1에 도시된 바와 같은 실행 파이프 스테이지(120) 또는 임의의 파이프 초기 파이프 스테이지에 연결될 수 있다. 도 4A는 도 1에서 적절히 이용될 수 있는 IsCall 로직 회로(400)의 예시적인 실시예이다. IsCall 로직 회로(400)는 비교기(440), 2 포트 OR 게이트(445), 및 2 포트 AND 게이트(450)를 포함한다. 비교기(450)는 두 개의 입력들, 즉, 링크 레지스터(LR)(405)의 값을 포함하는 입력 및 다음 주소(410)를 포함하는 입력을 수신한다. 도 2에 도시된 바와 같이, 다음 주소는 BR 명령 이후에 순차적으로 페칭되는 다음 주소이다. 비교기(440)의 출력은 2 포트 OR 게이트(445)의 한 포트에 연결된다. 다른 포트는 IsCall 로직 회로(400)에 연결된 파이프 스테이지에서의 현재 명령이 분기 및 링크 명령인지 여부를 나타내는 신호(415)에 연결된다. OR 게이트(445)는 선택적이며, 묵시적인 서브루틴들과 동일한 방식으로 분기 및 링크 명령들을 지원하기 위해서 사용된다. OR 게이트(445)의 출력은 2 포트 AND 게이트(425)의 한 포트에 연결된다. 다른 포트는 분기 예측 회로(132)에 의해서 생성되는 isTakenBranch 신호(420)에 연결된다. 분기 예측 회로(132)는 IsCall 로직 회로(400)를 인보크한 BR 명령으로부터 상기 isTakenBranch 신호(420)를 생성한다. 비-추론적인 실시예에 있어서, EXE 스테이지(120)는 대안적으로는 isTakenBranch 신호(420)를 생성할 수 있다. IsCall 로직 회로(400)의 출력(425)이 참(true)일 때, 그 출력(425)은 분기 예측 회로(132)에서 isCallFlag를 설정하고 또한 링크 상태 구조에 복귀 주소를 복사하기 위해서 활용된다. 간접 분기 명령이 서브루틴 호에 상응한다는 것을 나타내기 위해 그리고 만약 그렇다면 다음 주소로 링크 상태 구조를 업데이팅하기 위해 다른 로직 회로들이 IsCall 로직 회로(400)에서 활용될 수 있다는 것을 당업자가 알게 된다.
도 4B는 도 1에서 적절히 이용될 수 있는 IsCall 로직 회로(401)의 제 2 실시예이다. IsCall 로직 회로(401)의 비교기(440) 및 그것의 입력과 출력은 도 4A에 도시된 것들과 동일하다. 비교기(440)의 출력은 AND 게이트(455)에 입력으로서 제공된다. AND 게이트(455)는 또한 isBranch 신호(430)를 입력으로서 수신한다. 그 isBranch 신호(430)는 IsCall 로직 회로(401)에 연결된 파이프 스테이지에 의해서 처리되고 있는 현재 명령이 분기 명령일 때 활성적이다. 동작 시에, 만약 현재 명령이 분기 명령이고 또한 그 분기 명령 이후의 다음 주소가 링크 레지스터에 포함된 주소와 동일하다면, 출력 신호(425)는 분기 예측 회로(132)에서 isCallflag를 그 분기 명령과 연관시키기 위해 활용되고, 링크 상태 구조(134)가 상기 다음 주소를 통해 업데이팅된다. 이러한 제 2 실시예는 분기 및 링크 명령으로 하여금 IsCall 로직 회로(401)의 밖에서 종래 방식으로 처리되도록 허용한다.
도 5는 서브루틴을 인지하는 방법(500)을 나타내는 흐름도이다. 블록(510)에서는, 프로그램 플로우에서의 비-순차적인 변화가 검출된다. 예컨대 분기 명령이 검출된다. 더 상세하게는, 분기 및 링크 명령이 아닌 분기 명령이 검출된다. 이러한 검출은 공지된 디코딩 기술들에 의해서 수행될 수 있다. 블록(515)에서는, 방법(500)이 상기 프로그램 플로우에서의 검출된 비-순차적인 변화가 서브루틴 호로서 이미 표시되었는지 여부를 결정한다. 일예로서, 만약 분기 명령이 파이프라인(105)에 의해 이미 처리되었다면, 곧 처리되는 분기 명령이 서브루틴 호로서 표시되었거나 마킹되었다는 것을 나타내는 isCallFlag가 분기 예측 회로(132)에서 설정될 것이다. 만약 그렇다면, 방법(500)은 이러한 프로그램 플로우에서의 비-순차적인 변화를 앞서 처리하고, 따라서 블록(550)으로 진행한다.
만약 상기 프로그램 플로우에서의 검출된 비-순차적인 변화가 서브루틴 호로서 미리 표시되지 않았다면, 방법(500)은 블록(520)으로 진행한다. 블록(520)에서는, 상기 프로그램 플로우에서의 검출된 비-순차적인 변화 이후의 다음 순차적인 주소가 검색된다. 예컨대, 분기 명령 이후의 다음 주소가 검색된다. 상기 다음 주소는 앞선 파이프 스테이지, IFU 스테이지(102) 내의 다음 프로그램 카운터(PC) 생성 회로 등을 포함하는 여러 수단에 의해서 제공될 수 있다. 블록(530)에서는, 상기 다음 순차적인 주소가 링크 레지스터의 컨텐츠와 비교된다. 도 2와 관련하여 위에서 설명된 바와 같이, 링크 레지스터(LR)에는 서브루틴 호를 예상하는데 있어 복귀 주소가 할당된다. 블록(540)에서는, 상기 프로그램 플로우의 검출된 비-순차적인 변화가 서브루틴 호로서 표시된다. 예컨대, 분기 명령과 연관된 플래그가 분기 예측 회로(132)에서 설정되고 저장될 수 있다. 다음으로, 방법(500)은 블록(550)으로 진행한다.
블록(550)에서는, 링크 레지스터의 컨텐츠가 링크 스택 구조 상에 밀어 넣어진다. 예컨대, 분기 명령이 도 2에 도시된 바와 같이 실행될 때는, 링크 레지스터가 링크 스택 구조에 복사된다. 유사하게, 상기 다음 순차적인 주소가 대안적으로 링크 스택 구조 상에 밀어 넣어 진다. 비록 도시되지는 않았지만, 상기 프로그램 플로우에서의 비-순차적인 변화는 서브루틴으로 하여금 파이프라인에 의해서 처리되도록 야기한다. 블록(560)에서는, 방법(500)이 서브루틴의 종료를 나타내는 복귀 호를 기다린다. 일단 복귀 호가 인지되면, 방법(500)은 블록(570)으로 진행하고, 그 블록(570)에서는 링크 스택 구조로부터의 상기 다음 순차적인 주소가 포핑된다. 블록(570)은 프로세서로 하여금 복귀 호의 주소에 있는 명령들을 처리하기 시작하도록 파이프라인의 처리과정을 방향변경하게 한다.
방법(500)은 프로그램 플로우에서의 다음 비-순차적인 변화를 기다리는 대기 블록(580)으로 진행한다. 일단 상기 프로그램 플로우에서의 다음 비-순차적인 변화가 파이프라인에서 도달하면, 방법(500)은 블록(510)으로 진행하였다가 이어서 블록(515)으로 진행한다. 만약 프로그램 플로우에서의 다음 비-순차적인 변화가 사전에 검출되었다면, 프로그램 플로우에서의 비-순차적인 변화가 미리 나타내질 것이고, 따라서 블록(515)이 블록(550)으로 진행할 것이다.
여기에 기재된 실시예들과 관련하여 설명된 여러 기술적인 로직 블록들, 모듈들, 회로들, 엘리먼트들, 및/또는 컴포넌트들은 범용 프로세서, 디지털 신호 프로세서(DSP), ASIC(application specific integrated circuit), FPGA(field programmable gate array) 또는 다른 프로그램가능 로직 컴포넌트, 이산적인 게이트 또는 트랜지스터 로직, 이산적인 하드웨어 컴포넌트들, 또는 여기에 기재된 기능을 수행하도록 설계된 이들의 임의의 결합을 사용하여 구현되거나 수행될 수 있다. 범용 프로세서는 마이크로프로세서일 수 있지만, 대안적으로는, 상기 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수 있다. 프로세서는 또한 예를 들어 DSP 및 마이크로프로세서의 결합, 다수의 마이크로프로세서들, DSP 코어와 연계하는 하나 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성과 같은 컴퓨팅 컴포넌트들의 결합으로서 구현될 수 있다.
여기에 설명된 실시예들과 관련하여 설명되는 방법들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이들의 결합을 통해 직접 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드디스크, 제거가능 디스크, CD-ROM, 또는 해당 분야에 공지되어 있는 임의의 다른 형태의 저장 매체에 존재할 수 있다. 저장 매체는 프로세서가 그 저장 매체로부터 정보를 판독하고 그 정보를 상기 저장 매체에 기록할 수 있도록 그 프로세서에 연결될 수 있다. 대안적으로, 상기 저장 매체는 프로세서에 통합될 수 있다.
비록 본 발명이 실시예들과 관련하여 설명되지만, 위의 설명 및 아래에 후속하는 청구범위에 부합하는 광범위한 여러 구현들이 당업자들에 의해서 이용될 수 있다는 것이 인지될 것이다.
Claims (20)
- 서브루틴 호(subroutine call)를 인지하는 방법으로서,프로그램 플로우(program flow)에서의 비-순차적인 변화(non-sequential change)를 검출하는 단계;상기 프로그램 플로우에서의 검출되는 비-순차적인 변화 이후의 다음 순차적인 주소를 검색하는 단계; 및상기 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 상기 다음 순차적인 주소를 레지스터의 컨텐츠와 비교하는 단계를 포함하는,서브루틴 호 인지 방법.
- 제 1항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화는 분기(branch) 명령인,서브루틴 호 인지 방법.
- 제 1항에 있어서, 상기 레지스터는 링크 레지스터인,서브루틴 호 인지 방법.
- 제 1항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화 이후의 상기 다음 순차적인 주소를 링크 스택 구조(link stack structure)에 푸시(push)하는 단계를 더 포함하는,서브루틴 호 인지 방법.
- 제 1항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 것을 표시하는 단계를 더 포함하는,서브루틴 호 인지 방법.
- 제 5항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 것을 표시하는 단계는 상기 프로그램 플로우에서의 비-순차적인 변화와 연관된 분기 예측 회로(branch prediction circuit)에 플래그를 저장하는 단계를 포함하는,서브루틴 호 인지 방법.
- 서브루틴 호를 인지하기 위한 프로세서 내의 장치로서,상기 장치는 회로를 포함하고,상기 회로는,레지스터의 컨텐츠를 수신하기 위한 제 1 입력부;프로그램 플로우에서의 비-순차적인 변화를 수신하기 위한 제 2 입력부; 및상기 프로그램 플로우에서의 비-순차적인 변화 이후의 다음 순차적인 주소를 수신하기 위한 제 3 입력부를 구비하고,상기 회로는 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 상기 다음 순차적인 주소와 상기 레지스터의 컨텐츠를 비교하도록 구성되는,서브루틴 호를 인지하기 위한 프로세서 내의 장치.
- 제 7항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화는 분기 명령인,서브루틴 호를 인지하기 위한 프로세서 내의 장치.
- 제 7항에 있어서, 상기 레지스터는 링크 레지스터인,서브루틴 호를 인지하기 위한 프로세서 내의 장치.
- 제 7항에 있어서,링크 스택 구조를 더 포함하고,상기 장치는 상기 프로그램 플로우에서의 비-순차적인 변화 이후의 상기 다음 순차적인 주소를 상기 링크 스택 구조에 푸시하도록 구성되는,서브루틴 호를 인지하기 위한 프로세서 내의 장치.
- 제 7항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 표시를 저장하도록 구성된 분기 예측 회로를 더 포함하는,서브루틴 호를 인지하기 위한 프로세서 내의 장치.
- 서브루틴 호를 인지하기 위한 장치로서,프로그램 플로우에서의 비-순차적인 변화를 검출하기 위한 수단;상기 프로그램 플로우에서의 검출되는 비-순차적인 변화 이후의 다음 순차적인 주소를 검색하기 위한 수단; 및상기 비-순차적인 변화가 서브루틴 호인지 여부를 결정하기 위해서 상기 다음 순차적인 주소를 레지스터의 컨텐츠와 비교하기 위한 수단을 포함하는,서브루틴 호 인지 장치.
- 제 12항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화는 분기 명령인,서브루틴 호 인지 장치.
- 제 12항에 있어서, 상기 레지스터는 링크 레지스터인,서브루틴 호 인지 장치.
- 제 12항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화 이후의 상기 다음 순차적인 주소를 링크 스택 구조에 푸시하기 위한 수단을 더 포함하는,서브루틴 호 인지 장치.
- 제 12항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 것을 표시하기 위한 수단을 더 포함하는,서브루틴 호 인지 장치.
- 제 12항에 있어서, 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 것을 표시하기 위한 수단은 상기 프로그램 플로우에서의 비-순차적인 변화와 연관된 분기 예측 회로에 플래그를 저장하기 위한 수단을 포함하는,서브루틴 호 인지 장치.
- 서브루틴 호를 인지하기 위한 장치로서,명령들을 처리하기 위한 프로세서 파이프라인; 및상기 프로세서 파이프 라인에 연결된 회로를 포함하고,상기 회로는 레지스터의 컨텐츠, 프로그램 플로우에서의 비-순차적인 변화에 대한 표시, 및 상기 프로그램 플로우에서의 비-순차적인 변화에 대한 표시 이후의 다음 순차적인 주소를 수신하도록 구성되고,상기 회로는 상기 프로그램 플로우에서의 비-순차적인 변화에 대한 표시가 서브루틴 호인지 여부를 결정하기 위해서 링크 레지스터의 컨텐츠를 상기 다음 순차적인 주소와 비교하도록 구성되는,서브루틴 호 인지 장치.
- 제 18항에 있어서,링크 스택 구조를 더 포함하고,상기 회로는 상기 링크 레지스터의 컨텐츠를 상기 링크 스택 구조에 푸시하도록 구성되는,서브루틴 호 인지 장치.
- 제 18항에 있어서,분기 예측 회로를 더 포함하고,상기 회로는 상기 프로그램 플로우에서의 비-순차적인 변화가 서브루틴 호라는 표시를 저장하도록 구성되는,서브루틴 호 인지 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/563,943 | 2006-11-28 | ||
US11/563,943 US7444501B2 (en) | 2006-11-28 | 2006-11-28 | Methods and apparatus for recognizing a subroutine call |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20090094335A true KR20090094335A (ko) | 2009-09-04 |
Family
ID=39465182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097013467A KR20090094335A (ko) | 2006-11-28 | 2007-11-27 | 서브루틴 호를 인지하기 위한 방법들 및 장치 |
Country Status (13)
Country | Link |
---|---|
US (1) | US7444501B2 (ko) |
EP (1) | EP2087420B1 (ko) |
JP (1) | JP2010511251A (ko) |
KR (1) | KR20090094335A (ko) |
CN (1) | CN101535951A (ko) |
AT (1) | ATE484795T1 (ko) |
BR (1) | BRPI0719371A2 (ko) |
CA (1) | CA2668584A1 (ko) |
DE (1) | DE602007009861D1 (ko) |
ES (1) | ES2351894T3 (ko) |
MX (1) | MX2009005584A (ko) |
RU (1) | RU2009124438A (ko) |
WO (1) | WO2008067277A2 (ko) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4836903B2 (ja) * | 2007-09-13 | 2011-12-14 | 株式会社東芝 | マイクロプロセッサ制御装置並びにその方法およびプログラム |
US8694760B2 (en) * | 2009-05-19 | 2014-04-08 | Panasonic Corporation | Branch prediction using a leading value of a call stack storing function arguments |
US20140025894A1 (en) * | 2012-07-18 | 2014-01-23 | Electronics And Telecommunications Research Institute | Processor using branch instruction execution cache and method of operating the same |
CN103795738A (zh) * | 2012-10-26 | 2014-05-14 | 苏州工业园区新宏博通讯科技有限公司 | 一种采集终端及应用该采集终端的远程监控系统 |
US10209992B2 (en) * | 2014-04-25 | 2019-02-19 | Avago Technologies International Sales Pte. Limited | System and method for branch prediction using two branch history tables and presetting a global branch history register |
US10908902B2 (en) * | 2016-05-26 | 2021-02-02 | International Business Machines Corporation | Distance based branch prediction and detection of potential call and potential return instructions |
GB2563384B (en) * | 2017-06-07 | 2019-12-25 | Advanced Risc Mach Ltd | Programmable instruction buffering |
US10896030B2 (en) | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
US10620955B2 (en) | 2017-09-19 | 2020-04-14 | International Business Machines Corporation | Predicting a table of contents pointer value responsive to branching to a subroutine |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US11061575B2 (en) | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
CN109960607B (zh) * | 2017-12-22 | 2021-04-20 | 龙芯中科技术股份有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4831517A (en) * | 1986-10-10 | 1989-05-16 | International Business Machines Corporation | Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system |
US6157999A (en) * | 1997-06-03 | 2000-12-05 | Motorola Inc. | Data processing system having a synchronizing link stack and method thereof |
US5974543A (en) * | 1998-01-23 | 1999-10-26 | International Business Machines Corporation | Apparatus and method for performing subroutine call and return operations |
JP3513038B2 (ja) * | 1998-12-10 | 2004-03-31 | 富士通株式会社 | 命令フェッチ制御装置 |
JP3723019B2 (ja) * | 1999-09-29 | 2005-12-07 | 富士通株式会社 | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 |
US6910124B1 (en) * | 2000-05-02 | 2005-06-21 | International Business Machines Corporation | Apparatus and method for recovering a link stack from mis-speculation |
US6973563B1 (en) * | 2002-01-04 | 2005-12-06 | Advanced Micro Devices, Inc. | Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction |
JP2007041837A (ja) * | 2005-08-03 | 2007-02-15 | Nec Electronics Corp | 命令プリフェッチ装置及び命令プリフェッチ方法 |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
-
2006
- 2006-11-28 US US11/563,943 patent/US7444501B2/en not_active Expired - Fee Related
-
2007
- 2007-11-27 JP JP2009539433A patent/JP2010511251A/ja active Pending
- 2007-11-27 BR BRPI0719371-8A patent/BRPI0719371A2/pt not_active Application Discontinuation
- 2007-11-27 CA CA002668584A patent/CA2668584A1/en not_active Abandoned
- 2007-11-27 CN CNA2007800414772A patent/CN101535951A/zh active Pending
- 2007-11-27 DE DE602007009861T patent/DE602007009861D1/de active Active
- 2007-11-27 EP EP07871578A patent/EP2087420B1/en not_active Not-in-force
- 2007-11-27 AT AT07871578T patent/ATE484795T1/de not_active IP Right Cessation
- 2007-11-27 WO PCT/US2007/085574 patent/WO2008067277A2/en active Application Filing
- 2007-11-27 RU RU2009124438/08A patent/RU2009124438A/ru not_active Application Discontinuation
- 2007-11-27 ES ES07871578T patent/ES2351894T3/es active Active
- 2007-11-27 KR KR1020097013467A patent/KR20090094335A/ko not_active Application Discontinuation
- 2007-11-27 MX MX2009005584A patent/MX2009005584A/es not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
WO2008067277A2 (en) | 2008-06-05 |
DE602007009861D1 (de) | 2010-11-25 |
EP2087420A2 (en) | 2009-08-12 |
EP2087420B1 (en) | 2010-10-13 |
CA2668584A1 (en) | 2008-06-05 |
WO2008067277A3 (en) | 2008-09-25 |
RU2009124438A (ru) | 2011-01-10 |
ATE484795T1 (de) | 2010-10-15 |
BRPI0719371A2 (pt) | 2014-02-11 |
MX2009005584A (es) | 2009-06-15 |
US20080126770A1 (en) | 2008-05-29 |
JP2010511251A (ja) | 2010-04-08 |
CN101535951A (zh) | 2009-09-16 |
US7444501B2 (en) | 2008-10-28 |
ES2351894T3 (es) | 2011-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2087420B1 (en) | Methods and apparatus for recognizing a subroutine call | |
US8069336B2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
US8943300B2 (en) | Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information | |
US7278012B2 (en) | Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions | |
US20110320787A1 (en) | Indirect Branch Hint | |
JP5941488B2 (ja) | 条件付きショート前方分岐の計算的に等価な述語付き命令への変換 | |
TWI397816B (zh) | 減少在分支目標位址快取記憶體搜尋的方法與裝置 | |
KR100986375B1 (ko) | 피연산자의 빠른 조건부 선택 | |
JP4134179B2 (ja) | ソフトウエアによる動的予測方法および装置 | |
US20040225866A1 (en) | Branch prediction in a data processing system | |
US20050144427A1 (en) | Processor including branch prediction mechanism for far jump and far call instructions | |
KR20200139759A (ko) | 데이터 항목들을 프리페치하는 장치 및 방법 | |
US7343481B2 (en) | Branch prediction in a data processing system utilizing a cache of previous static predictions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |