KR20090061644A - 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치 - Google Patents

명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20090061644A
KR20090061644A KR1020097006645A KR20097006645A KR20090061644A KR 20090061644 A KR20090061644 A KR 20090061644A KR 1020097006645 A KR1020097006645 A KR 1020097006645A KR 20097006645 A KR20097006645 A KR 20097006645A KR 20090061644 A KR20090061644 A KR 20090061644A
Authority
KR
South Korea
Prior art keywords
address
subroutine
instruction
command
return
Prior art date
Application number
KR1020097006645A
Other languages
English (en)
Other versions
KR101099203B1 (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 KR20090061644A publication Critical patent/KR20090061644A/ko
Application granted granted Critical
Publication of KR101099203B1 publication Critical patent/KR101099203B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

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)
  • Advance Control (AREA)

Abstract

본 발명은 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하는 장치에 관한 것이다. 본 장치는 명령 어드레스 및 제 2 입력을 수신하도록 구성되는 제 1 입력을 포함한다. 제 2 입력은 서브루틴에 대한 묵시적 서브루틴 호출에 관련된 것으로 명령 어드레스를 기술한 전치디코드 정보를 수신하도록 구성된다. 전치디코드 정보에 응답하여, 본 장치는 또한 리턴 어드레스를 한정한 명령 어드레스에 상수를 가산하도록 구성된 가산기를 포함하며, 따라서 리턴 어드레스가 명시적 서브루틴 자원에 저장되도록 하여 리턴 호출 명령의 다음 브랜치 예측을 용이하게 한다.

Description

명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치{METHODS AND APPARATUS FOR EMULATING THE BRANCH PREDICTION BEHAVIOR OF AN EXPLICIT SUBROUTINE CALL}
본 발명은 일반적으로 파이프라인형 프로세서 분야, 특히 전력을 감소시키고 파이프라인형 프로세서의 이용을 증가시키기 위하여 묵시적 서브루틴 호출에 대하여 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하는 방법에 관한 것이다.
마이크로프로세서들은 다양한 애플리케이션들에서 계산 작업들을 수행한다. 개선된 프로세서 성능은 소프트웨어의 변경을 통해 동작속도를 향상시키고 및/또는 기능을 증가시키고 있다. 휴대용 전자장치들과 같은 많은 임베디드 애플리케이션들에서, 보존 전력은 프로세서 설계 및 구현시 중요한 목표이다.
많은 현대의 프로세서들은 전체 프로세서 스루풋을 증가시키기 위하여 실행시에 순차 명령들이 중첩되는 파이프라인형 아키텍처를 사용한다. 파이프라인을 통해 매끄러운(smooth) 실행을 유지하는 것은 고성능을 달성하는데 있어서 중요하다. 대부분의 현재의 프로세서들은 또한 계층적 메모리를 이용하며, 여기서 고속 온-칩 캐시 메모리들은 최근에 액세스된 데이터 및 명령들의 국부 복사본들을 저장 한다.
실세계 프로그램들은 간접 브랜치 명령들을 포함하며, 이의 실제 브랜칭 동작은 명령이 실제로 실행 파이프라인에서 깊게(deep) 평가될때까지 알려지지 않는다. 대부분의 현대 프로세서들은 임의의 형태의 브랜치 예측을 사용하며, 따라서 간접 브랜치 명령들의 브랜칭 동작은 예컨대 페치 또는 디코드 파이프 스테이지동안 파이프라인에서 초기에 예측된다. 브랜치 예측 기술을 사용하면, 프로세서는 간접 브랜치 명령의 타겟을 추론적으로 페치하며, 추론적으로 페치된 명령들을 처리하는 것을 시작하기 위하여 파이프라인을 재지정(redirect)한다. 실제 브랜치 타겟이 실행 파이프 스테이지와 같은 나중의(later) 파이프 스테이지에서 결정될때, 만일 브랜치가 잘못 예측되면, 추론적으로 페치된 명령들은 파이프라인으로부터 플러시(flush)되어야 하며, 새로운 명령들은 정확한 타겟 어드레스로부터 페치된다. 에러가 있는 브랜치 타겟 예측에 응답하여 명령들을 페치하는 것은 프로세서 성능 및 전력 소비에 악영향을 미친다.
간접 브랜치 명령들의 일례는 서브루틴으로부터 리턴하기 위하여 이용된 브랜치 명령들을 포함한다. 예컨대, 서브루틴으로부터의 리턴 호출(return call)은 리턴 어드레스가 레지스터의 콘텐츠들에 의하여 한정되는 브랜치 명령을 포함할 수 있다. 리턴 어드레스는 서브루틴이 완료된후에 페치될 다음 명령을 한정하고 보통 서브루틴이 원래 호출되는 브랜치 명령 이후의 명령이다. 많은 고성능 아키텍처들은 보통 서브루틴 리턴들에 사용하고 링크 레지스터로서 지칭되는 특정 범용 레지스터를 지정한다.
편리상, 리턴 호출은 또한 브랜치 리턴 명령으로서 지칭될 수 있다. 프로세서 파이프라인이 브랜치 리턴 명령에 대하여 브랜치 예측을 이용하도록 하기 위하여, 종래의 소프트웨어는 링크 레지스터에 리턴 어드레스를 기록하기 위하여 브랜치 및 링크 명령과 같은 명시적 서브루틴 호출을 포함한다. 많은 고성능 구현들은 브랜치 및 링크 명령을 처리하는 디코드 스테이지에서 링크 스택 구조를 포함한다. 링크 리턴 값들은 대응하는 서브루틴들이 리턴될때 브랜치 예측을 정확하게 하기 위하여 상기 스택상에 푸시(push)된다. 종래의 링크 스택 구조들은 파이프라인을 통해 흐르는 다수의 서브루틴 호출들을 지원하고 다수의 레벨들의 서브루틴 호출들의 중첩(nesting)을 지원하기 위하여 리턴 어드레스들의 리스트를 포함한다. 다음으로, 서브루틴내의 브랜치 리턴 명령이 디코딩될때, 리턴 어드레스는 만일 프로세서가 파이프라인을 재지정해야한다는 것을 다른 브랜치 예측 하드웨어가 지시하면 타겟 어드레스를 예측하기 위하여 브랜치 예측시 이용될 링크 스택 구조로부터 판독된다. 만일 예측이 파이프라인을 재지정할 것을 지시하면, 파이프라인은 링크 스택으로부터 판독되는 리턴 어드레스로부터 명령들을 페치하는 것을 시작한다.
그러나, 서브루틴을 호출할때 종래의 브랜치 및 링크 명령들을 통합하지 않고 링크 스택 구조를 이용할 수 없는 레가시 소프트웨어(legacy software)가 존재한다. 예로서, ARM Ltd. 호환가능 프로세서상에서 실행되는 코드 세그먼트를 포함하는 이하의 테이블을 참조하라.
Figure 112009019428557-PCT00001
테이블 1 레가시 코드 세그먼트
MOV LR, PC 및 BR 명령들의 조합은 서브루틴으로의 다음 브랜치를 위한 프로세서를 준비한다. 이러한 예에서, 호출이 만들어지는 실제 서브루틴은 어드레스
Figure 112009019428557-PCT00002
에서 시작한다. MOV LR, PC 명령은 프로그램 카운터(PC)의 콘텐츠들이 링크 레지스터(LR)에 복사되어야 한다는 것을 지시한다. ARM과 같은 일부 명령 아키텍처들에서, 프로그램 카운터는 실제로 현재의 명령 어드레스 + 8 바이트로서 한정된다. 이러한 한정에 있어서, PC의 콘텐츠들을 LR로 이동시키면 리턴 어드레스, 즉 어드레스
Figure 112009019428557-PCT00003
가 링크 레지스터에 저장된다. 리턴 어드레스는 서브루틴의 끝에서 링크 레지스터로부터 검색된다. 특히, 리턴 어드레스는 BX LR, 브랜치 리턴 명령을 실행할때 검색된다.
깊은 파이프라인들을 포함하고 브랜치 예측 기술들을 이용하는 현대의 프로세서들에서, 링크 스택을 사용하지 않고 브랜치 리턴 명령을 디코딩할때 리턴 어드레스를 예측하는 것은 다양한 이유 때문에 문제가 있다. 하나의 이유는 링크 레지스터와 같은 범용 레지스터가 파이프라인의 디코드 스테이지동안 액세스되지 않도 록 하여 브랜치 예측 시간에 링크 레지스터의 "현재" 값을 사용하여 리턴 어드레스의 브랜치 예측을 불가능하게 하는 마이크로구조 컨벤션(convention)을 포함한다. 비록 이러한 마이크로구조 컨벤션이 수정될 수 있을지라도, 오늘날의 깊은 파이프라인들은 링크 레지스터에 포함된 데이터가 예측 목적으로 신뢰 되지 않도록 할 수 있다. 예컨대, 리턴 어드레스에 대하여 예측이 이루어지는 디코드 파이프 스테이지로부터 리턴 어드레스의 실제 분석이 이루어지는 실행 파이프 스테이지까지 브랜치 명령이 흐르는데 걸리는 시간에, 다음 브랜치 명령은 파이프라인에 입력되어 링크 레지스터에 오버라이트(overwrite)될 수 있어서 초기 브랜치 리턴 명령에 대한 리턴 어드레스의 실제 분석이 예측된 리턴 어드레스와 상이하도록 한다. 예측된 값과 실제 분석값간의 이러한 미스매치(mismatch)는 브랜치 타겟 오류 예측(mispredict)으로 지칭된다. 브랜치 오류 예측은 시간 뿐만아니라 전력을 손실시키며, 이들 손실된 시간 및 전력은 부정확하게 예측된 경로 아래에서 추론적 실행을 야기한다.
이러한 레가시 소프트웨어의 보급성과 서브루틴을 호출할때 종래의 브랜치 및 링크 명령들을 이용하기 위하여 레가시 소프트웨어를 기록할때 수반되는 비용을 고려할때, 마이크로프로세서들은 레가시 소프트웨어를 지원하도록 그리고 브랜치 리턴 명령이 디코드 파이프 스테이지에 있을때 리턴 어드레스를 효율적으로 예측하기 위하여 링크 스택 구조를 이용하도록 개발될 필요가 있다.
본 발명은 서브루틴에 대한 묵시적(implicit) 서브루틴 호출을 한정하는 명령들의 패턴을 인지하고, 이러한 인지를 이용하여, 브랜치 예측이 서브루틴의 리턴 어드레스를 예측하도록 명시적(explicit) 서브루틴 호출 자원들을 이용하는 방법들 및 장치들을 발명한다.
일 양상에 따르면, 명시적(explicit) 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트(emulate)하는 방법이 제공된다. 본 방법은 서브루틴(subroutine)으로의 묵시적(implicit) 서브루틴 호출을 지시하는 명령 어드레스를 인지(recognize)하는 단계; 상기 명령 어드레스로부터 리턴(return) 어드레스를 계산하는 단계; 및 명시적(explicit) 서브루틴 자원에 상기 리턴 어드레스를 저장하는 단계를 포함한다.
다른 양상은 장치에 관한 것이다. 본 장치는 명령 어드레스 및 제 2 입력을 수신하도록 구성된 제 1 입력을 포함한다. 제 2입력은 서브루틴으로의 묵시적 서브루틴 호출에 연관된 것으로 상기 명령 어드레스를 기술한 전치디코드 정보를 수신하도록 구성된다. 전치디코드 정보에 응답하여, 본 장치는 또한 리턴 어드레스를 한정하는 상기 명령 어드레스에 오프셋을 가산하도록 구성된 가산기를 포함한다. 가산기는 또한 명시적 서브루틴 자원에 리턴 어드레스를 저장하여 리턴 호출 명령의 다음 브랜치 예측을 용이하게 한다.
또 다른 양상에 따르면, 다른 장치가 제공된다. 본 장치는 제 1 및 제 2 명령 어드레스들 및 연관된 전치디코드 정보를 동시에 수신하도록 구성된 제 1 및 제 2 입력들을 포함한다. 본 장치는 서브루틴으로의 묵시적 서브루틴 호출에 연관된 상기 제 1 또는 제 2 명령 어드레스를 지시하는 상기 전치디코드 정보에 응답하여 제 1 및 제 2 결과치를 한정하는 상기 제 1 및 제 2 명령 어드레스에 오프셋을 가산하도록 구성된 가산기들의 제 1 세트를 포함한다. 본 장치는 또한 상기 제 1 또는 제 2 결과치들중 하나로부터 리턴 어드레스를 선택하는 수단을 포함한다.
본 발명의 다른 실시예들이 이하의 상세한 설명을 참조할때 당업자에게 명백하게 될 것이라는 것이 이해되어야 하며, 본 발명의 다양한 실시예들은 예시적으로 제시된다. 인식되는 바와같이, 본 발명은 다른 실시예들을 가질 수 있으며, 실시예들의 여부 세부사항들은 본 발명으로부터 벗어나지 않고 다양한 다른 관점들에서 수정될 수 있다. 따라서, 도면들 및 상세한 설명은 제한적이 아니라 예시적으로 제시된다.
도 1은 프로세서의 기능 블록도이다.
도 2는 도 1에 기술된 파이프라인을 통한 명령들의 흐름을 따르는 타이밍도이다.
도 3은 단일 명령 디코드 파이프 스테이지의 예시적인 부분을 도시한 도면이다.
도 4는 2개의 명령 디코드 파이프 스테이지의 일부분에 대한 예시적인 제 1 양상을 도시한 도면이다.
도 5는 도 1의 2개의 명령 디코드 파이프 스테이지의 일부분에 대한 예시적인 제 2 양상을 도시한 도면이다.
도 6은 묵시적 서브루틴 호출을 인지할때 명시적 서브루틴의 브랜치 예측 동 작을 에뮬레이트하는 방법을 기술한 흐름도이다.
도 7은 도 6의 블록들(610, 620, 630)의 추가 세부사항들을 도시한 흐름도이다.
도 1은 본 발명의 양상들이 사용될 수 있는 프로세서(100)의 기능 블록도를 도시한다. 프로세서(100)는 최근에 처리된 명령들을 캐싱하는 명령 캐시(I-캐시)(110), 명령이 I-캐시(110)에서 발견되지 않을때 메모리(138)를 액세스하는 메모리 인터페이스(136), 메모리(138)로부터 검색된 명령의 제한된 디코드를 수행하는 전치디코드 논리 회로(128), 및 I-캐시(110)의 미스(miss)에 응답하여 전치디코드 비트들을 포함하는 명령 데이터를 I-캐시(110)에 기록하는 필 버퍼 논리 회로(130)를 포함한다. 전치디코드 비트들은 메모리로부터 검색된 명령과 연관되며, 명령 타입의 지시자와 같은 명령을 기술한 속성값들(attribute)을 포함한다. 메모리(138)는 프로세서(100) 내에 또는 프로세서(100) 외부에 배치될 수 있으며, 계층 2(L2) 메모리 컴포넌트를 포함할 수 있다.
프로세서(100)는 또한 명령들을 처리하는 명령 파이프라인(105) 및 간접 브랜치 명령에 대한 타겟 어드레스를 예측하고 타겟 어드레스를 처리하기 위하여 명령 파이프라인(105)을 재지정해야하는지를 예측하는 브랜치 예측 회로(132)를 포함한다. 만일 브랜치 예측 회로(132)가 명령 파이프라인(105)을 재지정할 것을 예측하면, 간접 브랜치 명령은 "실행 예측(predicted taken)"되었다고 말하여 진다. 만일 간접 브랜치 명령이 "실행 예측"되었으면, 브랜치 예측 회로(132)는 간접 브 랜치 명령의 타겟 어드레스를 예측하고, 타겟 어드레스에서 시작하는 명령들을 페치하는 것을 시작하기 위하여 명령 파이프라인(105)을 재지정한다.
프로세서(100)는 제어 논리 회로(122)에 따라 명령 파이프라인(105)의 명령들을 처리한다. 일부 실시예들에서, 파이프라인(105)은 2개 이상의 병렬 파이프라인들을 가진 수퍼스칼라 설계일 수 있다. 파이프라인(105)은 다양한 파이프 스테이지들, 즉 명령 캐시 룩업(IC) 스테이지(102), 명령 데이터 정렬(IDA) 스테이지(104), 디코드(DCD) 스테이지(106), 명령 큐(IQ) 스테이지(108), 제 1 레지스터 액세스(RACC1) 스테이지(112), 제 2 레지스터 액세스(RACC2) 스테이지(114), 예비 스테이션(RSV) 스테이지(116), 및 4개의 실행 스테이지들(X1-X4)(120A-120D)을 포함한다. 일부 실시예들에서, 파이프 스테이지는 단일 명령을 동시에 처리할 수 있다. 다른 실시예에서, 파이프 스테이지는 2개 이상의 명령들을 동시에 처리할 수 있다. 파이프 스테이지들은 본 발명의 범위를 제한하지 않고 파이프라인(105)에 추가되거나 또는 파이프라인(105)으로부터 제외될 수 있다는 것에 유의해야 한다. 프로세서(100)는 또한 마이크로구조 컨벤션을 통해 파이프스테이지들(112, 114, 120A-120D)에 의하여 액세스가능한 레지스터들을 포함하는 범용 레지스터(GPR) 파일(118)을 포함한다.
명령 캐시 룩업(IC) 스테이지(102)는 I-캐시(110)로부터 명령을 검색하는 것을 시도한다. 명령 데이터 정렬 스테이지(104)는 다수의 명령들 및 다수의 명령들과 연관된 전치디코드 정보를 파싱-아웃한다(parse out). 만일 명령 어드레스가 I-캐시(110)에서 발견되지 않으면, 명령 데이터 정렬 스테이지(104)는 메모리(138) 로부터 대응 명령을 검색하기 위한 요청을 초기화한다. 디코드 스테이지(106)는 명령을 완전하게 디코딩한다. 게다가, 종래의 기능들외에, 디코드 스테이지(106)는 명시적 서브루틴 호출을 인지하고, 링크 스택 구조(134)에 리턴 어드레스를 기록한다. 더욱이, 디코드 스테이지(106)는 또한 레가시 소프트웨어로부터 묵시적(implicit) 서브루틴 호출을 인지하고, 리턴 어드레스를 링크 스택 구조(134)에 저장한다. 링크 스택 구조(134)는 순환 버퍼로서 관리되는 레지스트들의 세트일 수 있다. 리턴 어드레스는 묵시적 서브루틴의 완료시에 파이프라인(105)이 재지정되는 명령의 어드레스이다. 디코드 스테이지(106)의 적절한 양상들의 구조 및 동작은 도 3-5를 참조로하여 이하에서 더 완전하게 기술될 것이다.
명령 큐 스테이지(108)는 실행 파이프라인의 스톨(stall)동안 추론적 페칭이 계속되도록 하기 위하여 하나 이상의 명령들을 버퍼링한다. 제 1 및 제 2 레지스터 액세스 스테이지들(112, 114)은 명령이 필요로 할 수 있는 하나 이상의 피연산자들(operand)을 범용 레지스터(118)로부터 검색한다. 예비 스테이션 스테이지(116)는 기록후 판독 해저드(read-after-write hazard)들동안 대기하는 명령이 분석되도록 한다. 실행 스테이지들은 산술 논리 유닛들과 같은 공지된 컴포넌트들을 포함한다. 실행 스테이지들(120A-120D)은 명령들을 실행한다. 실행 스테이지들로부터 발생된 결과들은 GPR 파일(118)에 기록된다. 실행 스테이지들(120A-120D)동안, 디코드 스테이지(106)동안 이루어진 브랜치 예측이 정확한지를 결정하기 위하여 실제 브랜치 분석이 이루어진다. 만일 실제 브랜치 분석이 예측된 목적지와 다르면, 브랜치는 잘못 예측된 것으로 말하여 진다.
당업자는 프로세서(100)의 다수의 변형들이 가능하다는 것을 인식할 것이다. 예컨대, 프로세서(100)는 I-캐시(110)에 대한 제 2 레벨(L2) 캐시를 포함할 수 있다. 더욱이, 프로세서(100)에 도시된 기능 블록들중 하나 이상은 특정 실시예로부터 생략될 수 있다. 변환 참조 버퍼(translation look-aside buffer), 데이터 캐시 등과 같이 프로세서(100) 내부에 배치될 수 있는 다른 기능 블록들은 본 발명을 설명하는데 적절하지 않아서 명확화를 위하여 생략하였다.
도 2는 도 1에 도시된 파이프라인(105)을 통해 명령들의 흐름을 따르는 타이밍도(200)이다. 특히, 타이밍도(200)에서 추적된 명령들의 흐름은 테이블 1에 기술된 레가시 코드 세그먼트이다. 설명을 위하여, 용어 "묵시적 서브루틴 호출(implicit subroutine call)"은 2개 이상의 명령들의 조합을 지칭하며, 조합된 기능은 서브루틴 호출을 위하여 준비한 레지스터를 세팅하고 서브루틴을 호출하는 것이다. 예컨대, 테이블 1을 참조하면, MOV LR, PC/BR 조합에서 2개의 명령들은 묵시적 서브루틴 호출을 한정한다. 이러한 경우에, MOV LR, PC 명령은 묵시적 서브루틴 호출의 시작부분을 한정하며, BR 명령은 묵시적 서브루틴 호출의 끝 부분을 한정한다.
타이밍도(200)에서 제 1의 11개 행들은 파이프라인(105)의 스테이지들에 대응한다. 열들(210A-210W)은 순차 타이밍 사이클들에 대응한다. 설명을 위하여, 각각의 파이프 스테이지는 사이클당 하나의 명령을 처리한다. 그러나, 본 발명이 사이클당 다수의 명령들을 처리할 수 있는 파이프 스테이지들 및 다수의 사이클 파이프 스테이지들에 적용가능하다는 것이 당업자에 의하여 인식되어야 한다.
타이밍도(200)의 행(211)은 도 3 및 도 4에 기술된 디코드 파이프 스테이지의 양상들의 결과로서 링크 스택 구조(134)와 같은 링크 스택 구조의 콘텐츠들에 대응한다. 타이밍도(200)의 행(213)은 도 5에 기술된 디코드 파이프 스테이지의 양상들의 결과로서 링크 스택 구조의 콘텐츠들에 대응한다. 행(213)은 도 5를 참조로 하여 논의될 것이다. 타이밍도(200)의 행(212)은 링크 레지스터의 콘텐츠들에 대응한다.
일반적으로, 명령들은 IC 스테이지(102)에 입력되며, 다음 사이클에서 다음 스테이지로 전파된다. 도면부호 215에서, MOV LR, PC 명령은 디코드 스테이지(106)에 있다. 이 시점에서, 디코드 스테이지(106)는 MOV LR, PC를 인지하며, 링크 스택 구조에 리턴 어드레스, MOV + 8을 저장한다. 용어와 관련하여, MOV + 8은 MOV 명령의 어드레스에 8의 오프셋을 더하는 것을 지칭한다. 값 8은 링크 스택 구조가 BR 명령후에 순차 명령의 어드레스를 포함하도록 MOV 명령의 4 바이트 및 다음 BR 명령의 4 바이트를 포함한다. 도 3-4와 관련하여 추가로 논의되는 바와같이, 본 발명에 따른 디코드 스테이지는 MOV 명령의 어드레스에 8의 오프셋을 더한다. 도 5를 참조로하여 추가로 논의되는 바와같이, 본 발명에 따른 대안 디코드 스테이지는 BR 명령의 어드레스에 4의 오프셋을 더한다. 표기법들 MOV + 8 및 BR + 4는 어드레스
Figure 112009019428557-PCT00004
, 즉 리턴 어드레스를 지칭한다. 도면부호 220에서, 링크 스택 구조는 MOV + 8인 것으로 그것의 콘텐츠들을 도시한다. BR 명령이 디코드 스테이지(106)에 의하여 처리될때, 브랜치 명령의 타겟, 즉 서브루틴의 시작 부분은 예측되어 다음 사이클에서 파이프라인에 의하여 페치된다. 도면부호 219에서, LDA 명령, 즉 서브루틴의 시작 부분은 IC 스테이지(102)에 의하여 처리된다. 파이프라인(105)이 브랜치 명령의 예측으로 인하여 LDA 명령을 페치하기 위하여 재지정되기 때문에, 어드레스들 BR+4 및 BR+8의 명령들은 파이프라인으로부터 플러시된다. 그 다음에, LDA 명령에 순차적으로 후속하는 명령들은 파이프라인(105)으로 페치된다.
도면부호 225에서, 브랜치 리턴 명령 BX는 디코드 스테이지(106)에 의하여 처리된다. 디코드 스테이지(106)는 리턴 어드레스를 예측하기 위하여 링크 스택 구조의 콘텐츠들을 사용하여 브랜치 예측 회로(132)를 인보크(invoke)한다. 다른 실시예에서, 브랜치 예측 회로(132)는 링크 스택 구조를 판독한다. 둘중 어떤 경우라도, 브랜치 예측 회로(132)는 리턴 어드레스를 예측하기 위하여 링크 스택 구조를 이용하며, 도면부호 230에서 파이프라인은 리턴 어드레스
Figure 112009019428557-PCT00005
에서 명령을 페치하기 위하여 재지정된다. 일단 이용되면, 행 211 및 열 210J의 MOV + 8 엔트리는 링크 스택 구조로부터 제거된다.
묵시적 서브루틴 호출을 위하여 링크 스택을 사용하지 않는 종래의 프로세서들에서, 링크 레지스터(LR) 그 자체의 값은 서브루틴 리턴 명령이 DCD 스테이지에 있고 예측을 시도할때 사이클 210I에서 사용될 시간에서 업데이트되지 않을 수 있다. 도면에 도시된 바와같이, LR은 DCD 스테이지에서 상기 값을 사용하기 위하여 요구된 것보다 4사이클 늦은 사이클(210M) 때까지 업데이트되지 않는다. 도면부호 235에서, 사이클(210M)은 브랜치 리턴 어드레스의 예측 및 페치가 이루어지는 사이클(210I) 다음에 있다. 따라서, 종래의 프로세서들에 있어서, 링크 레지스터에 저 장된 브랜치 리턴 명령에 대한 브랜치 예측은 신뢰할 수 없을 수 있다.
도 3-5는 디코드 파이프 스테이지(106)와 같은 디코드 파이프 스테이지에 관한 본 발명의 대안 양상들을 도시한다. 이들 대안 양상들은 묵시적 서브루틴 호출과 종래의 브랜치 및 링크 명령에 대한 링크 상태 구조에 기록하는 경로들을 처리한다. 다른 경로들, 예컨대 명령 세트의 다른 명령들의 경로들이 디코드 파이프 스테이지에 포함되나, 본 발명의 이러한 양상과 관계가 없으며 따라서 도면들에 도시되지 않는다.
도 3은 단일 명령 디코드 파이프 스테이지의 예시적인 부분(300)이다. 단일 명령 디코드 파이프 스테이지의 부분(300)은 디코드 스테이지(106)에 적절하게 배치될 수 있다. 단일 명령 디코드 파이프 스테이지의 부분(300)은 명령 어드레스(310) 및 명령 어드레스(310)와 연관된 전치디코드 비트들(315)을 포함한다. 명령 어드레스(310)의 크기는 32비트이며, 전치디코드 비트들(315)의 크기는 8비트이다. 본 발명의 양상들이 다양한 크기의 명령 어드레스 또는 전치디코드 비트들 및 그들의 각각의 비트 위치들을 고려한다는 것에 유의해야 한다. 명령 어드레스(310) 및 전치디코드 비트들(315)은 디코드 파이프 스테이지의 부분(300)에 입력되며 동일한 또는 다른 데이터 레지스터들에 위치할 수 있다.
전치디코드 비트들(315)은 명령 어드레스(310)에 대응하는 명령에 관한 정보를 포함하며, 전치디코드 논리 회로(128)에 의하여 결정된다. 전치디코드 비트들(315)은 대응하는 명령이 테이블 1에 리스트된 MOV/BR 조합의 MOV LR, PC 명령와 같은 묵시적 서브루틴 호출의 시작 부분이다. 전치디코드 비트들(315)은 명령 어 드레스(310)가 묵시적 서브루틴 호출 또는 종래의 브랜치 및 링크 명령의 시작 부분을 언급한다는 것을 지시하기 위하여 특정 비트 또는 전치디코드 비트들(315)의 조합을 포함하는 다양한 방식으로 인코딩될 수 있다. 다른 실시예에서, 명령의 동작 코드(opcode)는 명령 세트의 다른 명령들로부터 묵시적 서브루틴 호출과 종래의 브랜치 및 링크 명령을 구별하기 위하여 이용될 수 있다.
디코드 파이프 스테이지의 부분(300)은 가산기/멀티플렉서 조합(330)을 더 포함한다. 가산기/멀티플렉서 조합(300)은 가산기들(325A-325B), 멀티플렉서(320) 및 링크 스택 구조(134)를 포함한다. 가산기(325A)는 명령 어드레스(310)가 종래의 브랜치 및 링크 명령을 언급하는 경우에 명령 어드레스에 상수 4를 가산한다. 가산기(325B)는 명령 어드레스(310)가 묵시적 서브루틴 호출의 시작 부분을 언급하는 경우에 명령 어드레스에 상수 8을 가산한다. 멀티플렉서(320)를 통해, 전치디코드 비트들(315)은 존재하는 경우에 증가된 어드레스 또는 리턴 어드레스가 링크 스택 구조(134)에 기록되는 것을 선택한다. 테이블 1을 참조하면, 8의 오프셋은 리턴 어드레스의 위치가 MOV 명령 후에 8 바이트인 것을 반영하기 위하여 기술된다. 종래의 브랜치 및 링크 명령에서, 리턴 어드레스는 브랜치 및 링크 명령 후에 4바이트이다. 비록 도시되지 않을지라도, 다른 가산기들이 가산되나 묵시적 서브루틴 호출을 구성하는 명령들의 수와 묵시적 서브루틴 호출을 구성하는 각각의 명령의 크기에 따라 도 3-5의 기술된 가산기들을 대체할 수 있다. 도 4는 2개의 명령 디코드 파이프 스테이지의 부분(400)의 예시적인 제 1 양상을 도시한다. 2개의 명령 디코드 파이프 스테이지의 부분(400)은 디코드 스테이지(106)에 적절하 게 배치될 수 있다. 2개의 명령 디코드 파이프 스테이지의 부분(400)은 그들의 각각의 전치디코드 비트들(407A-B)과 동시에 수신된 2개의 명령 어드레스들(410A-410B) 및 가산기/멀티플렉서 조합들(425A-425B)의 2개의 세트를 포함한다. 명령 어드레스들(410A-410B) 및 전치디코드 비트들(407A-B)은 디코드 파이프 스테이지의 부분(400)에 입력되며 동일한 또는 다른 데이터 레지스터들에 위치할 수 있다.
MOV LR, PC 명령에 대한 어드레스와 같은 묵시적 서브루틴 호출의 시작부분은 명령 어드레스(410A) 또는 (410B)에서 발견될 수 있다. 컨벤션에 의하여, 명령 어드레스(410A 또는 DCD0)는 프로그램 순서에서 첫번째이며, 명령 어드레스(410B 또는 DCD1)은 프로그램 순서에서 두번째이다. MOV, LR, PC 명령에 대한 어드레스와 같은 묵시적 서브루틴의 시작 부분을 한정하는 명령에 대한 어드레스가 명령 어드레스(410A)에 위치할때, 가산기/멀티플렉서(425A)의 출력은 유효하며, 이와같이 증가된 어드레스는 링크 스택 구조(134)에 기록된다. 만일 묵시적 서브루틴의 시작 부분에 대한 어드레스가 명령 어드레스(410B)이면, 가산기/멀티플렉서(425B)이 출력은 유효하며, 이와같이 증가된 어드레스 또는 리턴 어드레스는 링크 스택 구조(134)에 기록된다. 묵시적 서브루틴이 인지될때, 도 3 및 도 4에 기술된 디코드 파이프 스테이지의 양상들은 묵시적 서브루틴을 한정하는 시작 명령에서 링크 스택 구조(134)에 기록한다.
도 5는 2개의 명령 디코드 파이프 스테이지의 부분(500)의 예시적인 제 2 양상을 도시한다. 2개의 명령 디코드 파이프 스테이지의 부분(500)은 디코드 스테이 지(106)에 적절하게 배치될 수 있다. 2개의 명령 디코드 파이프 스테이지의 부분(500)은 묵시적 서브루틴 호출을 한정하는 마지막 명령 어드레스를 수신하는 것에 응답하여 링크 스택 구조(134)에 리턴 어드레스를 기록한다. 도 2를 다시 참조하면, 예컨대 링크 상태 구조(213)는 2개의 명령 디코드 파이프 스테이지의 부분(500)에 의하여 도면부호 221에 기록되며, MOV/BR 조합의 브랜치 명령을 디코딩한후 1사이클이다. 결과적으로, 기술된 바와같이, BR+4의 값은 도면부호 221에서 링크 상태 구조(213)에 기록된다.
2개의 명령 디코드 파이프 스테이지의 부분(500)은 각각의 전치디코드 비트들(507A-B)아 동시에 수신된 2개의 명령 어드레스(510A-510B)를 포함한다. 명령 어드레스들(510A-510B)(DCD0, DCD1) 및 그들의 각각의 전치디코드 비트들(507A-B)(PDCD0, PDCD1)은 디코드 파이프 스테이지의 부분(500)에 입력되며, 동일한 또는 다른 데이터 레지스터들에 위치할 수 있다.
디코드 파이프 스테이지의 부분(500)은 선택/인에이블 논리 회로(510), 플래그 세팅 논리 회로(515), 가산기들(525A, 525B) 및 멀티플렉서(520)를 더 포함한다. 플래그 세팅 논리 회로(515)는 플래그(530)를 세팅 및 리셋한다. 플래그(530)는 묵시적 서브루틴 호출의 시작이 어드레스(510A) 또는 어드레스(510B)중 어느 하나에서 인지되었는지의 여부를 추적한다. 플래그(530)는 묵시적 서브루틴 호출의 시작 및 끝을 지시하는 어드레스 둘다가 동시에 수신되는 경우에 이용되지 않는다. MOV LR, PC/BR 조합에 의하여 한정된 묵시적 서브루틴의 경우에, PDCD0 및 PDCD1 비트들을 이용하여 논리 회로(515)를 세팅하는 플래그는 명령 MOV LR, PC의 어드레스가 DCD0(DCD1이 무효일때) 또는 DCD1중 하나 일 수 있는 최종 유효 디코드 슬롯에 위치할때 플래그(530)를 세팅한다.
선택/인에이블 논리 회로(510)는 DCD0 또는 DCD1이 묵시적 서브루틴 호출의 끝의 어드레스를 포함하는지를 결정한다. 만일 묵시적 서브루틴 호출의 끝이 DCD0에 있으면, 가산기(525A)는 묵시적 서브루틴 호출에 대한 리턴 어드레스를 계산하기 위하여 DCD0의 어드레스에 4를 가산한다. 만일 묵시적 서브루틴 호출의 끝이 DCD1에 있으면, 가산기(525B)는 리턴 어드레스를 계산하기 위하여 DCD1의 어드레스에 4를 가산한다. 선택/인에이블 논리 회로(510)는 만일 묵시적 서브루틴 호출의 끝이 DCD0 또는 DCD1에 제공되면 선택 신호(540)를 발생시키며, 만일 그렇다면 링크 스택 구조(134)에 기록될 증가된 명령 어드레스(535A) 또는 (535B)를 선택한다.
링크 스택 구조(134)가 불필요하게 기록되지 않도록 하기 위하여, 선택/인에이블 논리 회로(510)는 브랜치 예측 회로(132)로부터 각각 명령 어드레스들(DCD0, DCD1)에 대응하는 실행 예측된 신호들(550A, 550B)을 입력으로서 수신한다. 만일 묵시적 서브루틴 호출이 데이터 레지스터(505)에서 인지되고 묵시적 서브루틴이 브랜치 예측 회로(132)에 의하여 실행 예측되면, 선택/인에이블 논리 회로(510)는 기록하기 위한 링크 스택 구조(134)를 인에이블하기 위하여 링크 스택 구조(134)에 기록 인에이블 신호(545)를 발생시킨다. 만일 묵시적 서브루틴 호출이 인지되나 비실행 예측되면, 선택/인에이블 논리 회로(510)는 링크 스택 구조(134)에 기록 인에이블을 발생시키지 않는다. 이러한 방식에서, 비실행 예측된 묵시적 서브루틴 호출들은 링크 스택 구조(134)에의 기록을 야기하지 않는다. 비록 본 발명이 묵시적 서브루틴 호출의 인식 및 디코드 스테이지 파이프라인의 링크 스택 구조로의 기록을 기술할지라도 당업자는 전치디코드 비트들이 결정되고 브랜치 예측이 이루어진 프로세서 파이프라인의 일부 스테이지에서 본 발명의 양상들이 실시될 수 있다는 것을 인식할 것이다.
도 6은 묵시적 서브루틴 호출을 인지할때 명시적 서브루틴의 브랜치 예측 동작을 에뮬레이트하는 방법(600)을 기술한 흐름도이다. 블록(610)에서, 서브루틴에 대한 묵시적 서브루틴 호출을 지시하는 명령 어드레스는 프로세서 파이프라인에서 인지된다. 블록(620)에서, 명령 어드레스로부터의 리턴 어드레스가 계산된다. 만일 묵시적 서브루틴 호출이 2개 이상의 명령들을 포함하면, 명령 어드레스에 가산된 오프셋량은 묵시적 서브루틴 호출의 시작 또는 끝에서 인지가 이루어지는지의 여부 및 묵시적 서브루틴 호출을 구성하는 명령들의 크기를 포함하는 다양한 인자들에 의존한다. 블록(630)에서, 리턴 어드레스는 링크 스택 구조(134)와 같은 명시적 서브루틴 자원에 저장된다. 도 3-5에 기술된 바와같이, 블록(610, 620, 630)은 디코드 스테이지(106)동안 수행될 수 있다.
블록(640)에서, 프로세서 파이프라인은 호출된 서브루틴과 연관된 명령들을 처리한다. 예컨대, 도 1을 참조하면, 블록(640)에서, 명령 어드레스들
Figure 112009019428557-PCT00006
이 처리된다. 블록(650)에서, 리턴 어드레스는 테이블의
Figure 112009019428557-PCT00007
와 같이 서브루틴으로부터의 리턴 호출을 지시하는 브랜치 명령에 응답하여 명시적 서브루틴 자원으로부터 판독된다. 부가적으로, 블록(650)에서, 프로세서 파이프라인은 명시적 서브루틴 자원으로부터 판독된 리턴 어드레스로 재지정된다. 리턴 호출 명령이 디코드 스테이지(106)에 있는 동안, 리턴 어드레스는 리턴 어드레스가 종래의 브랜치 및 링크 명령에 의하여 호출된 서브루틴에 대한 리턴 호출에 응답하여 검색될때와 동일한 방식으로 링크 스택 구조(134)로부터 검색된다. 일단 리턴 어드레스가 검색되고 리턴 호출 명령이 실행 예측되면, 리턴 어드레스는 프로세서 파이프라인에 의하여 페치되어 도 2에 도시된 바와같이 리턴 어드레스의 초기 페치를 가능하게 한다.
도 7은 도 6의 블록들(610, 620, 630)의 세부사항을 추가로 도시한 흐름도(700)이다. 블록(710)에서, 명령 어드레스와 연관된 전치디코드 비트가 판독된다. 블록(720)에서, 흐름도(700)는 전치디코드 비트가 묵시적 서브루틴 호출을 지시하는지를 결정한다. 만일 전치디코드 비트들이 묵시적 서브루틴 호출을 지시하면, 블록(730)은 명령 어드레스에 오프셋을 가산한다. 블록(740)에서, 증가된 어드레스는 링크 스택 구조에 저장된다. 블록(750)에서, 파이프라인 프로세스는 종래의 방식으로 명령들을 처리하는 것을 계속한다. 만일 전치디코드 비트들이 묵시적 서브루틴 호출을 지시하지 않으면, 블록(720)은 프로세서 파이프라인이 종래의 방식으로 명령들을 처리하는 것을 계속하는 블록(750)으로 진행한다.
여기에 개시된 실시예들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들 및 회로들은 여기에서 설명되는 기능들을 수행하도록 설계된 범용 프로세서, 디지털 신호 프로세서(DSP), 애플리케이션 특정 집적 회로(ASIC), 필드 프로그래밍가능한 게이트 어레이(FPGA) 또는 다른 프로그래밍가능한 논리 장치, 이산 게이트 또는 트랜지스터 논리장치, 이산 하드웨어 컴포넌트들 또는 이들의 임의의 조합을 통해 구현되거나 또는 수행될 수 있다. 범용 프로세서는 마이크로프로세서일 수 있으며, 대안적으로 범용 프로세서는 임의의 기존의 프로세서, 제어기, 마이크로콘트롤러 또는 상태 머신일 수 있다. 프로세서는 또한 컴퓨팅 장치들의 조합, 예를 들어, DSP 및 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 연결된 하나 이상의 마이크로프로세서들 또는 임의의 다른 이러한 구성으로서 구현될 수 있다.
여기에서 제시되는 실시예들과 관련하여 설명되는 방법은 하드웨어로 직접 구현되거나, 프로세서에 의해 실행되는 소프트웨어 모듈로 구현되거나, 또는 이들의 결합에 의해 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 이동식 디스크, CD-ROM, 또는 기술적으로 공지된 임의의 다른 형태의 저장 매체에 저장될 수 있다. 저장 매체는 컴퓨터 또는 프로세서에 연결될 수 있으며, 그 결과 프로세서는 저장 매체로부터의 정보를 판독하고 저장 매체로 정보를 기록할 수 있다. 대안적으로, 저장 매체는 프로세서로 통합될 수 있다.
본 발명이 실시예들과 관련하여 제시되었을지라도, 전술한 설명과 이하의 청 구범위내에서 다양한 구현들이 당업자에 의하여 사용될 수 있다는 것이 인식되어야 한다.

Claims (20)

  1. 명시적(explicit) 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트(emulate)하는 방법으로서,
    서브루틴(subroutine)으로의 묵시적(implicit) 서브루틴 호출을 지시하는 명령 어드레스를 인지(recognize)하는 단계;
    상기 명령 어드레스로부터 리턴(return) 어드레스를 계산하는 단계; 및
    명시적(explicit) 서브루틴 자원에 상기 리턴 어드레스를 저장하는 단계를 포함하는,
    에뮬레이트 방법.
  2. 제 1항에 있어서, 상기 서브루틴으로부터의 리턴 호출을 지시하는 브랜치 명령에 응답하여 상기 명시적 서브루틴 자원으로부터 상기 리턴 어드레스를 판독하는 단계를 더 포함하는, 에뮬레이트 방법.
  3. 제 2항에 있어서, 상기 리턴 어드레스에 프로세서 파이프라인을 재지정(redirect)하는 단계를 더 포함하는, 에뮬레이트 방법.
  4. 제 1항에 있어서, 명령 어드레스를 인지하는 상기 단계는 전치디코드 정보를 한정하기 위하여 상기 명령 어드레스와 연관된 상기 명령을 전치디코딩하는 단계; 및
    전치디코드 정보가 상기 묵시적 서브루틴 호출의 시작부분으로서 상기 명령 어드레스를 지시하는지의 여부를 결정하는 단계를 포함하는, 에뮬레이트 방법.
  5. 제 1항에 있어서, 상기 명령 어드레스로부터 리턴 어드레스를 계산하는 상기 단계는 상기 명령 어드레스에 상수(constant) 오프셋을 가산하는 단계를 포함하는, 에뮬레이트 방법.
  6. 제 1항에 있어서, 상기 명시적 서브루틴 자원은 링크 스택 구조인, 에뮬레이트 방법.
  7. 명령 어드레스를 수신하도록 구성된 제 1 입력;
    서브루틴으로의 묵시적 서브루틴 호출에 연관된 것으로 상기 명령 어드레스를 기술한 전치디코드 정보를 수신하도록 구성된 제 2 입력; 및
    상기 전치디코드 정보에 응답하여 리턴 어드레스를 한정하는 상기 명령 어드레스에 오프셋을 가산하여 상기 리턴 어드레스가 명시적 서브루틴 자원에 저장되도록 구성된 가산기를 포함하는,
    장치.
  8. 제 7항에 있어서, 상기 명시적 서브루틴 자원은 상기 서브루틴으로부터의 리 턴 호출을 지시하는 브랜치 명령에 응답하여 판독되는, 장치.
  9. 제 7항에 있어서, 상기 전치디코드 정보는 상기 묵시적 서브루틴 호출의 시작 부분으로서 상기 명령 어드레스를 기술하는, 장치
  10. 제 7항에 있어서, 상기 전치디코드 정보는 상기 묵시적 서브루틴 호출의 끝 부분으로서 상기 명령 어드레스를 기술하는, 장치.
  11. 제 7항에 있어서, 상기 명시적 서브루틴 자원은 링크 스택 구조인, 장치.
  12. 제 7항에 있어서, 상기 명령 어드레스와 제 2 명령 어드레스를 동시에 수신하는 제 3 입력; 및
    상기 명령 어드레스 또는 제 2 명령 어드레스를 상기 명시적 서브루틴 자원에 라우팅해야 하는지를 결정하도록 구성된 논리장치를 더 포함하는, 장치.
  13. 제 7항에 있어서, 명시적 서브루틴 호출에 응답하여 상기 명령 어드레스에 제 2 상수 오프셋을 가산하도록 구성된 제 2 가산기를 더 포함하는, 장치.
  14. 제 1 및 제 2 명령 어드레스들 및 연관된 전치디코드 정보를 동시에 수신하도록 구성된 제 1 및 제 2 입력들; 및
    서브루틴으로의 묵시적 서브루틴 호출에 연관된 상기 제 1 또는 제 2 명령 어드레스를 지시하는 상기 전치디코드 정보에 응답하여 제 1 및 제 2 결과치를 한정하는 상기 제 1 및 제 2 명령 어드레스에 오프셋을 가산하도록 구성된 가산기들의 제 1 세트; 및
    상기 제 1 또는 제 2 결과치들중 하나로부터 리턴 어드레스를 선택하는 수단을 포함하는, 장치.
  15. 제 14항에 있어서, 명시적 서브루틴 자원에 상기 리턴 어드레스를 기록하는 수단을 더 포함하는, 장치.
  16. 제 14항에 있어서, 상기 제 1 또는 제 2 명령 어드레스가 상기 묵시적 서브루틴 호출에 연관되는지의 여부를 추적하도록 구성된 플래그 세팅 논리회로를 더 포함하는, 장치.
  17. 제 14항에 있어서, 서브루틴으로의 명시적 서브루틴 호출에 연관된 상기 제 1 또는 제 2 명령 어드레스를 지시하는 전치디코드 정보에 응답하여 상기 제 1 및 제 2 명령 어드레스들에 제 2 오프셋을 가산하는 가산기들의 제 2 세트를 더 포함하는, 장치.
  18. 제 17항에 있어서, 상기 상수는 8이며, 상기 제 2 상수는 4인, 장치.
  19. 제 14항에 있어서, 상기 전치디코드 정보는 상기 제 1 또는 제 2 명령 어드레스가 서브루틴으로의 묵시적 서브루틴 호출과 관련되는지의 여부를 지시하기 위하여 비트들의 조합으로서 인코딩되는, 장치.
  20. 제 16항에 있어서, 상기 제 1 또는 제 2 결과들중 하나로부터 상기 리턴 어드레스를 선택하는 상기 수단은 기록을 위하여 상기 명시적 서브루틴 자원을 인에이블하도록 구성된 선택/인에이블 논리회로를 포함하는, 장치.
KR1020097006645A 2006-08-31 2007-08-31 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치 KR101099203B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/468,835 2006-08-31
US11/468,835 US7478228B2 (en) 2006-08-31 2006-08-31 Apparatus for generating return address predictions for implicit and explicit subroutine calls

Publications (2)

Publication Number Publication Date
KR20090061644A true KR20090061644A (ko) 2009-06-16
KR101099203B1 KR101099203B1 (ko) 2011-12-27

Family

ID=39136931

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097006645A KR101099203B1 (ko) 2006-08-31 2007-08-31 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치

Country Status (11)

Country Link
US (2) US7478228B2 (ko)
EP (2) EP2064622A2 (ko)
JP (2) JP5425627B2 (ko)
KR (1) KR101099203B1 (ko)
CN (1) CN101506773B (ko)
BR (1) BRPI0716010A2 (ko)
CA (1) CA2659384C (ko)
MX (1) MX2009001911A (ko)
RU (1) RU2417407C2 (ko)
TW (1) TWI348642B (ko)
WO (1) WO2008028103A2 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7478228B2 (en) 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US7444501B2 (en) * 2006-11-28 2008-10-28 Qualcomm Incorporated Methods and apparatus for recognizing a subroutine call
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
CN101819523B (zh) * 2009-03-04 2014-04-02 威盛电子股份有限公司 微处理器以及相关指令执行的方法
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
CN103620547B (zh) 2011-01-27 2018-07-10 英特尔公司 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US20130024674A1 (en) 2011-07-20 2013-01-24 International Business Machines Corporation Return address optimisation for a dynamic code translator
WO2013101121A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Managed instruction cache prefetching
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9411590B2 (en) * 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
WO2014151691A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. Method and apparatus for guest return address stack emulation supporting speculation
US9619230B2 (en) * 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US10642903B2 (en) 2014-09-29 2020-05-05 International Business Machines Corporation Tagging and querying system objects
SG11201803358RA (en) * 2015-11-04 2018-05-30 Lintec Corp Curable resin film and first protective film forming sheet
US11099849B2 (en) * 2016-09-01 2021-08-24 Oracle International Corporation Method for reducing fetch cycles for return-type instructions
CN114528025B (zh) * 2022-02-25 2022-11-15 深圳市航顺芯片技术研发有限公司 指令处理方法、装置、微控制器及可读存储介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4604695A (en) * 1983-09-30 1986-08-05 Honeywell Information Systems Inc. Nibble and word addressable memory arrangement
US4777587A (en) * 1985-08-30 1988-10-11 Advanced Micro Devices, Inc. System for processing single-cycle branch instruction in a pipeline having relative, absolute, indirect and trap addresses
KR940008392A (ko) 1992-09-19 1994-04-29 이헌조 밀착형 이미지 센서
US5604877A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
JP3504355B2 (ja) * 1994-12-06 2004-03-08 松下電器産業株式会社 プロセッサ
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6889320B1 (en) * 1999-12-30 2005-05-03 Texas Instruments Incorporated Microprocessor with an instruction immediately next to a branch instruction for adding a constant to a program counter
US7035963B2 (en) 2000-12-27 2006-04-25 Intel Corporation Method for resolving address space conflicts between a virtual machine monitor and a guest operating system
US6823447B2 (en) * 2001-03-01 2004-11-23 International Business Machines Corporation Software hint to improve the branch target prediction accuracy
US7404067B2 (en) * 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US7065694B2 (en) * 2003-09-25 2006-06-20 International Business Machines Corporation Adaptive runtime repairable entry register file
US20050154859A1 (en) * 2004-01-14 2005-07-14 Arm Limited Branch prediction in a data processing apparatus
JP2006040173A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 分岐予測装置および分岐予測方法
US7836290B2 (en) * 2005-11-09 2010-11-16 Oracle America, Inc. Return address stack recovery in a speculative execution computing apparatus
US7478228B2 (en) 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls

Also Published As

Publication number Publication date
JP5722396B2 (ja) 2015-05-20
JP2014002769A (ja) 2014-01-09
CN101506773A (zh) 2009-08-12
JP2010501963A (ja) 2010-01-21
BRPI0716010A2 (pt) 2013-07-30
EP2482183A1 (en) 2012-08-01
TW200820072A (en) 2008-05-01
CA2659384C (en) 2012-07-31
US20080059780A1 (en) 2008-03-06
WO2008028103A2 (en) 2008-03-06
US20080288753A1 (en) 2008-11-20
JP5425627B2 (ja) 2014-02-26
RU2417407C2 (ru) 2011-04-27
KR101099203B1 (ko) 2011-12-27
US7478228B2 (en) 2009-01-13
RU2009111591A (ru) 2010-10-10
CN101506773B (zh) 2012-04-25
US8943300B2 (en) 2015-01-27
MX2009001911A (es) 2009-03-09
CA2659384A1 (en) 2008-03-06
EP2064622A2 (en) 2009-06-03
WO2008028103A3 (en) 2008-05-29
TWI348642B (en) 2011-09-11

Similar Documents

Publication Publication Date Title
KR101099203B1 (ko) 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치
JP4763727B2 (ja) 分岐予測ミスを訂正するシステムおよび方法
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
JP2008530713A5 (ko)
JP2011100466A5 (ko)
JP2008532142A5 (ko)
JP5231403B2 (ja) スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
JP2007515715A (ja) 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US20100287358A1 (en) Branch Prediction Path Instruction
KR100986375B1 (ko) 피연산자의 빠른 조건부 선택
US7627740B2 (en) Methods and apparatus for dynamic prediction by software
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers

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: 20141128

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150930

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161125

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee