KR101459536B1 - 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치 - Google Patents

사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치 Download PDF

Info

Publication number
KR101459536B1
KR101459536B1 KR1020137002326A KR20137002326A KR101459536B1 KR 101459536 B1 KR101459536 B1 KR 101459536B1 KR 1020137002326 A KR1020137002326 A KR 1020137002326A KR 20137002326 A KR20137002326 A KR 20137002326A KR 101459536 B1 KR101459536 B1 KR 101459536B1
Authority
KR
South Korea
Prior art keywords
instruction
address
indirect branch
target address
indirect
Prior art date
Application number
KR1020137002326A
Other languages
English (en)
Other versions
KR20130033476A (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 KR20130033476A publication Critical patent/KR20130033476A/ko
Application granted granted Critical
Publication of KR101459536B1 publication Critical patent/KR101459536B1/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
    • 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/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/30003Arrangements for executing specific machine 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • 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
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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

Landscapes

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

Abstract

프로세서는 간접 브랜치 주소의 사전 통지를 제공하기 위한 장치 및 방법을 구현한다. 명령에 의해 생성된 타겟 주소는 자동으로 식별된다. 다음 프로그램 주소는 최신 타겟 주소를 이용하는 간접 브랜치 명령이 예측 실행되기 전에 최신 타겟 주소에 기초하여 준비된다. 장치는 간접 브랜치 명령의 최신 간접 주소로서 프로그램에 의해 특정되는 명령 메모리 주소를 홀딩하기 위한 레지스터를 적합하게 사용한다. 또한, 장치는 간접 브랜치 명령을 예측 실행할 때 사용하기 위한 다음 프로그램 주소로서 레지스터로부터 최신 간접 주소를 선택하는 다음 프로그램 주소 선택기를 사용한다.

Description

사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치{METHODS AND APPARATUS FOR CHANGING A SEQUENTIAL FLOW OF A PROGRAM USING ADVANCE NOTICE TECHNIQUES}
본 발명은 일반적으로 프로세서 파이프라인에서 명령들을 프로세싱하기 위한 기법들에 관한 것으로, 보다 상세하게는, 간접 브랜치(branch) 명령에 대한 타겟 주소의 조기 표시를 생성하기 위한 기법들에 관한 것이다.
셀 전화들, 랩탑 컴퓨터들, 개인용 데이터 보조기(PDA)들 등과 같은 많은 휴대용 제품들은 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램을 실행하는 프로세서의 사용을 요구한다. 이러한 제품들에 대한 프로세싱 시스템은 프로세서, 명령들의 소스, 입력 오퍼랜드(operand)들의 소스 및 실행의 결과들을 저장하기 위한 저장 공간을 포함한다. 예를 들어, 명령들 및 입력 오퍼랜드들은, 예를 들어, 명령 캐쉬, 데이터 캐쉬 및 시스템 메모리를 포함하여 멀티-레벨들의 캐쉬들 및 범용 레지스터들로 구성되는 계층적 메모리 구성에 저장될 수 있다.
프로그램들의 실행에서 고성능을 제공하기 위해서, 프로세서는 전형적으로 파이프라인 방식으로 명령들을 실행한다. 또한, 프로세서들은 예측(speculative) 실행을 사용하여 예상된 브랜치 타겟 주소에서 시작하는 명령들을 페치 및 실행할 수 있다. 브랜치가 오예상(mispredict)된 경우, 예측 실행된 명령들은 파이프라인으로부터 플러쉬(flush)되어야 하고, 파이프라인은 정확한 경로 주소에서 재시작되어야 한다. 많은 프로세서 명령 세트들에는, 레지스터의 컨텐츠들로부터 얻어지는 프로그램 목적지 주소로 브랜치하는 명령이 종종 존재한다. 이러한 명령은 일반적으로 간접 브랜치 명령이라 칭해진다. 레지스터의 컨텐츠들에 대한 간접 브랜치 의존도로 인하여, 레지스터가 간접 브랜치 명령이 실행될 때마다 상이한 값을 가질 수 있으므로 브랜치 타겟 주소를 예상하는 것이 통상적으로 어렵다. 오예상된 간접 브랜치를 정정하는 것은 정확한 브랜칭 경로 상에서 명령을 페치 및 실행하기 위해서 간접 브랜치 명령으로 다시 트래킹하는 것을 일반적으로 요구하므로, 이로써 프로세서의 성능은 감소될 수 있다. 또한, 오예상은, 프로세서가 잘못된 브랜칭 경로 상에서 부정확하게 명령들을 예측 페치하였고 명령들의 프로세싱을 시작하여, 사용되지 않는 명령들을 프로세싱하기 위한 전력 및 명령들을 파이프라인으로부터 플러쉬하기 위한 전력 모두의 증가를 야기함을 나타낸다.
본 발명의 몇몇 양상들 중, 본 발명은 프로세서 시스템에서 성능을 향상시키고 전력 요건들을 감소시키기 위해서 명령들을 실행할 때 발생할 수 있는 오예상들의 수를 최소화하는 것이 유리하다는 것을 인지한다. 이러한 목적들을 위해서, 본 발명의 실시예는 프로그램의 순차적 흐름을 변경하기 위한 방법에 적용된다. 상기 방법은 제 1 명령에 의해 식별된 레지스터로부터 프로그램 특정 타겟 주소를 리트리브(retreive)하고, 여기서 레지스터는 명령 세트 아키텍처에서 정의된다. 실행의 예측 흐름은 제 2 명령이 당면된(encountered) 이후 프로그램 특정 타겟 주소로 변경되고, 여기서 제 2 명령은 간접 브랜치 명령으로 동적으로 결정된다.
본 발명의 다른 실시예는 간접 브랜치 주소의 사전 통지를 제공하기 위한 방법을 설명한다. 상기 명령들의 시퀀스는 명령들의 시퀀스의 타겟 주소 변경 명령에 의해 생성된 최신 타겟 주소를 식별하기 위해서 분석된다. 다음 프로그램 주소는 최신 타겟 주소를 이용하는 간접 브랜치 명령이 예측 실행되기 전에 최신 타겟 주소에 기초하여 준비된다.
본 발명의 다른 양상은 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치를 설명한다. 상기 장치는 간접 브랜치 명령의 사전 통지(ADVN) 간접 주소로서 프로그램에 의해 특정된 명령 메모리 주소를 홀딩(hold)하기 위한 레지스터를 사용한다. 또한, 상기 장치는 레지스터를 타겟으로 하는 명령들을 모니터링하며, 모니터링된 명령들에 기초하여, 간접 브랜치 명령에 당면하기 전에, 간접 브랜치 명령을 예측 실행할 때 다음 프로그램 주소로서 사용하기 위해서, 레지스터로부터의 ADVN 간접 주소로서 최신 타겟 주소를 선택하는 다음 프로그램 주소 선택기 회로를 사용한다.
본 발명의 보다 완전한 이해 뿐만 아니라 본 발명의 추가 특징들 및 이점들은 다음의 상세한 설명 및 첨부한 도면들로부터 명백해질 것이다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템의 블록도이다.
도 2는 본 발명에 따라 간접 브랜치 명령들에 대한 브랜치 타겟 주소들을 지원하는 프로세서 컴플렉스의 기능적 블록도이다.
도 3a는 본 발명에 따른 간접 브랜치 타겟 주소 값을 가지는 레지스터를 특정하는 32-비트 사전 통지(ADVN) 명령에 대한 일반적 포맷이다.
도 3b는 본 발명에 따른 간접 브랜치 타겟 주소 값을 가지는 레지스터를 특정하는 16-비트 ADVN 명령에 대한 일반적 포맷이다.
도 4a는 본 발명에 따른 이전의 간접 브랜치 실행들의 이력을 사용하는 간접 브랜치 예상을 위한 방식에 대한 코드 예이다.
도 4b는 본 발명에 따른 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 도 3a의 ADVN 명령을 사용하는 간접 브랜치 사전 통지를 위한 방식에 대한 코드 예이다.
도 5는 본 발명에 따른 예시적인 제 1 간접 브랜치 타겟 주소(BTA) 사전 통지 회로를 도시한다.
도 6은 본 발명에 따른 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 자동 간접-타겟 추론 방법을 사용하는 방식에 대한 코드 예이다.
도 7은 본 발명에 따른 간접 브랜치 명령의 브랜치 타겟 주소에 적합하게 이용되는 제 1 간접 브랜치 사전 통지(ADVN) 프로세스이다.
도 8a는 예시적인 타겟 트래킹 테이블(TTT)을 도시한다.
도 8b는 본 발명에 따른 간접 브랜치 명령의 브랜치 타겟 주소의 사전 통지를 제공하기 위해서 적합하게 이용되는 제 2 간접 브랜치 사전 통지(ADVN) 프로세스이다.
도 9a는 본 발명에 따른 예시적인 제 2 간접 브랜치 타겟 주소(BTA) 사전 통지(ADVN) 회로를 도시한다.
도 9b는 본 발명에 따른 예시적인 제 3 간접 브랜치 타겟 주소(BTA) 사전 통지(ADVN) 회로를 도시한다.
도 10a 및 도 10b는 본 발명에 따른 간접 브랜치 타겟 주소의 사전 통지를 결정하기 위한 소프트웨어 코드 프로파일링 방법을 사용하는 방식에 대한 코드 예이다.
본 발명은 본 발명의 몇몇 실시예들이 도시되는 첨부한 도면들을 참조하여 이제 더 충분하게 설명될 것이다. 그러나, 이러한 발명은 다양한 형태들로 구현될 수 있으며, 본 명세서에 설명되는 실시예들에 제한되는 것으로 해석되어서는 안 된다. 오히려, 이러한 실시예들은 본 개시가 철저하고 완전해지고, 당업자들에게 본 발명의 범위를 충분히 전달하도록 제공된다.
본 발명의 교시들에 따라 동작들을 수행할 때 또는 수행하기 위해서 동작되기 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드"는 처음에, C, C++, JAVA®, Smalltalk, JavaScript®, Visual Basic®, TSQL, Perl과 같은 고급 프로그래밍 언어 또는 다양한 다른 프로그래밍 언어로 기록될 수 있다. 이러한 언어들 중 하나로 기록되는 프로그램은 고급 프로그램 코드를 네이티브(native) 어셈블러 프로그램으로 변환함으로써 타겟 프로세서 아키텍처로 컴파일된다. 또한, 타겟 프로세서 아키텍처에 대한 프로그램들은 네이티브 어셈블러 언어로 직접 기록될 수 있다. 네이티브 어셈블러 프로그램은 기계 레벨 바이너리 명령들의 명령 연상 표현(instruction mnemonic representation)들을 사용한다. 본 명세서에 사용되는 바와 같은 프로그램 코드 또는 컴퓨터 판독가능 매체는 프로세서에 의해 이해가능한 포맷을 가지는 객체 코드와 같은 기계 언어 코드를 지칭한다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템(100)을 도시한다. 예시를 위해서, 도 1은 3개의 원격 유닛들(120, 130, 150) 및 2개의 기지국들(140)을 도시한다. 공통 무선 통신 시스템들이 더욱 많은 원격 유닛들 및 기지국들을 가질 수 있다는 것이 인지될 것이다. 컴포넌트들(125A, 125B, 125C, 125D)로 각각 표현되는 바와 같은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들, 또는 이 둘 다를 포함하는 원격 유닛들(120, 130, 150) 및 기지국들(140)은 아래에 추가로 논의되는 바와 같이 본 발명을 구현하기 위해서 적응되었다. 도 1은 기지국들(140)로부터 원격 유닛들(120, 130, 150)로의 순방향 링크 신호들(180), 및 원격 유닛들(120, 130, 150)로부터 기지국들(140)로의 역방향 링크 신호들(190)을 도시한다.
도 1에서, 원격 유닛(120)은 모바일 전화로서 도시되고, 원격 유닛(130)은 휴대용 컴퓨터로서 도시되며, 원격 유닛(150)은 무선 로컬 루프 시스템에서의 고정 위치 원격 유닛으로서 도시된다. 예로서, 원격 유닛들은 대안적으로, 셀 전화들, 페이저(pager)들, 워키 토키(walkie talkie)들, 핸드헬드 개인용 통신 시스템(PCS) 유닛들, 개인용 데이터 보조기들과 같은 휴대용 데이터 유닛들, 또는 미터 판독 장비와 같은 고정 위치 데이터 유닛들일 수 있다. 도 1은 본 개시의 교시들에 따라 원격 유닛들을 도시하지만, 본 개시는 이러한 예시적으로 도시되는 유닛들에 제한되지 않는다. 본 발명의 실시예들은 간접 브랜치 명령들을 가지는 임의의 프로세서 시스템에서 적합하게 사용될 수 있다.
도 2는 본 발명에 따른 간접 브랜치 명령들에 대한 브랜치 타겟 주소들의 사전 통지를 준비하는 것을 지원하는 프로세서 컴플렉스(200)의 기능적 블록도이다. 프로세서 컴플렉스(200)는 프로세서 파이프라인(202), 범용 레지스터 파일(GPRF)(204), 제어 회로(206), L1 명령 캐쉬(208), L1 데이터 캐쉬(210), 및 메모리 계층(212)을 포함한다. 제어 회로(206)는 명령 페치 스테이지(214)를 포함하는 프로세서 파이프라인(202)을 제어하기 위해서 아래에서 더 상세하게 설명되는 바와 같이 상호작용하는 프로그램 카운터(PC)(215) 및 브랜치 타겟 주소 레지스터(BTAR)(219)를 포함한다. 프로세서 컴플렉스(200)에 접속할 수 있는 주변 디바이스들은 논의의 명료성을 위해서 도시되지 않는다. 프로세서 컴플렉스(200)는, L1 데이터 캐쉬(210)에 저장된 데이터를 이용하며 메모리 계층(212)과 연관된 L1 명령 캐쉬(208)에 저장된 프로그램 코드를 실행하기 위한 도 1의 하드웨어 컴포넌트들(125A-125D)에서 적합하게 사용될 수 있다. 프로세서 파이프라인(202)은 범용 프로세서, 디지털 신호 프로세서(DSP), 애플리케이션 특정 프로세서(ASP) 등에서 동작가능할 수 있다. 프로세싱 컴플렉스(200)의 다양한 컴포넌트들은 주문형 집적 회로(ASIC) 기술, 필드 프로그램가능 게이트 어레이(FPGA) 기술 또는 다른 프로그램가능 로직, 이산 게이트 또는 트랜지스터 로직, 또는 의도된 애플리케이션에 적합한 임의의 다른 이용가능한 기술을 사용하여 구현될 수 있다.
프로세서 파이프라인(202)은 명령 페치 스테이지(214), 디코드 및 사전 통지(ADVN) 스테이지(216), 디스패치 스테이지(218), 판독 레지스터 스테이지(220), 실행 스테이지(222) 및 라이트백(write back) 스테이지(224)인 6개의 주요 스테이지들을 포함한다. 단일 프로세서 파이프라인(202)이 도시되지만, 본 발명의 간접 브랜치 타겟 주소 사전 통지를 가지는 명령들의 프로세싱은 병렬 파이프라인들을 구현하는 수퍼 스칼라(super scalar) 설계들 및 다른 아키텍처들에 적용가능하다. 예를 들어, 높은 클럭 레이트들에 대하여 설계된 수퍼 스칼라 프로세서는 둘 또는 셋 이상의 병렬 파이프라인들을 가질 수 있고, 각각의 파이프라인은 높은 클럭 레이트를 지원하기 위해서 전체 프로세서 파이프라인 심도(depth)를 증가시키는 둘 또는 셋 이상의 파이프라이닝된(pipelined) 스테이지들로 명령 페치 스테이지(214), ADVN 로직 회로(217)를 가지는 디코드 및 ADVN 스테이지(216), 디스패치 스테이지(218), 판독 레지스터 스테이지(220), 실행 스테이지(222) 및 라이트백 스테이지(224)를 분할할 수 있다.
프로세서 파이프라인(202)의 제 1 스테이지에서 시작하여, 프로그램 카운터(PC)(215)와 연관된 명령 페치 스테이지(214)는 추후 스테이지들에 의한 프로세싱하기 위해서 L1 명령 캐쉬(208)로부터 명령들을 페치한다. L1 명령 캐쉬(208)에서 명령 페치가 미스(miss)된 경우(페치될 명령이 L1 명령 캐쉬(208)에 있지 않음을 의미함), 명령은 레벨 2(L2) 캐쉬와 같은 다중 레벨들의 캐쉬 및 메인 메모리를 포함할 수 있는 메모리 계층(212)으로부터 페치된다. 명령들은 다른 소스들, 이를테면, 부트(boot) 판독 전용 메모리(ROM), 하드 드라이브, 광디스크로부터 또는 인터넷과 같은 외부 인터페이스로부터 메모리 계층(212)으로 로딩될 수 있다. 이후, 페치된 명령은 아래에서 더 상세하게 설명되는 바와 같이 간접 브랜치 타겟 주소의 사전 통지를 위한 추가적 능력들을 제공하는 ADVN 로직 회로(217)를 가지는 디코드 및 ADVN 스테이지(216)에서 디코딩된다. 이러한 배치에 제한되지는 않지만, 도 2에 도시되는 바와 같이 제어 회로(206)에 위치될 수 있는 브랜치 타겟 주소 레지스터(BTAR)(219)는 ADVN 로직 회로(217)와 연관된다. 예를 들어, BTAR(219)은 디코드 및 ADVN 스테이지(216) 내에 적합하게 위치될 수 있다.
디스패치 스테이지(218)는 하나 또는 둘 이상의 디코딩된 명령들을 취하며, 이들을 예를 들어, 수퍼스칼라 또는 멀티-스레드 프로세서에서 이용되는 것 같이 하나 또는 둘 이상의 명령 파이프라인들로 디스패치한다. 판독 레지스터 스테이지(220)는 GPRF(204)로부터 데이터 오퍼랜드들을 페치하거나 또는 포워딩 네트워크(226)로부터 데이터 오퍼랜드들을 수신한다. 포워딩 네트워크(226)는 결과 오퍼랜드들이 실행 스테이지들로부터 이용가능하자마자 결과 오퍼랜드들을 공급하기 위해서 GPRF(204) 주위에 신속한 경로를 제공한다. 심지어 포워딩 네트워크에 있어서는, 딥(deep) 실행 파이프라인으로부터의 결과 오퍼랜드들은 셋 또는 넷 이상의 실행 사이클들을 취할 수 있다. 이러한 사이클들 동안, 실행 파이프라인으로부터 결과 오퍼랜드 데이터를 요구하는 판독 레지스터 스테이지(220)에서의 명령은 결과 오퍼랜드가 이용가능할 때까지 대기하여야 한다. 실행 스테이지(222)는 디스패치된 명령을 실행하고, 라이트백 스테이지(224)는 GPRF(204)에 결과를 기록하며, 또한 결과가 이후의 명령에서 사용될 것인 경우 포워딩 네트워크(226)를 통해 판독 레지스터 스테이지(220)에 결과들을 다시 전송할 수 있다. 결과들은 라이트백 스테이지(224)에서 프로그램 순서와 비교하여 순서가 뒤바뀌어 수신될 수 있으므로, 라이트백 스테이지(224)는 GPRF(204)에 결과들을 기록할 때 프로그램 순서를 보존하기 위해서 프로세서 설비들을 사용한다. 간접 브랜치 명령의 타겟 주소의 사전 통지를 제공하기 위한 프로세서 파이프라인(202)의 더 상세한 설명이 상세한 코드 예들과 함께 아래에서 제공된다.
프로세서 컴플렉스(200)는 컴퓨터 판독가능 저장 매체 상에 저장된 프로그램의 제어 하에 명령들을 실행하도록 구성될 수 있다. 예를 들어, 컴퓨터 판독가능 저장 매체는, 예를 들어, 입력/출력 인터페이스(미도시)를 통해 또는 L1 데이터 캐쉬(210) 및 메모리 계층(212)으로부터 획득된 데이터 상에서의 동작을 위해서 프로세서 컴플렉스(200)와 국부적으로 직접 연관될 수 있으며, 이를테면, L1 명령 캐쉬(208)로부터 이용가능할 수 있다. 또한, 프로세서 컴플렉스(200)는 프로그램의 실행에서 L1 데이터 캐쉬(210) 및 메모리 계층(212)으로부터의 데이터에 액세스한다. 컴퓨터 판독가능 저장 매체는 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 플래쉬 메모리, 판독 전용 메모리(ROM), 프로그램가능 판독 전용 메모리(PROM), 삭제가능한 프로그램가능 판독 전용 메모리(EPROM), 전기적으로 삭제가능한 프로그램가능 판독 전용 메모리(EEPROM), 컴팩트 디스크(CD), 디지털 비디오 디스크(DVD), 다른 타입들의 이동식(removable) 디스크들, 또는 임의의 다른 적합한 저장 매체를 포함할 수 있다.
도 3a는 본 발명에 따른 간접 브랜치 타겟 주소 값을 홀딩하는 것으로서 프로그래머 또는 소프트웨어 툴에 의해 식별된 레지스터를 특정하는 32-비트 ADVN 명령(300)에 대한 일반적 포맷이다. ADVN 명령(300)은 식별된 레지스터를 특정하는 향후 간접 브랜치 명령에 앞서, 식별된 레지스터에 저장된 실제 브랜치 타겟 주소를 프로세서 컴플렉스(200)에 통지한다. 아래에서 더 상세하게 설명되는 바와 같이, 사전 통지를 제공함으로써, 프로세서 성능이 향상될 수 있다. ADVN 명령(300)은 명령이 특정된 플래그 또는 플래그들에 기초하여 무조건적으로 실행될 것인지 또는 조건적으로 실행될 것인지를 특정하기 위해서 다수의 명령 세트 아키텍처(ISA)들에 의해 이용되는 바와 같은 조건 코드 필드(304)를 가지는 것으로 도시된다. 오피코드(opcode)(305)는 적어도 하나의 브랜치 타겟 주소 레지스터 필드인 Rm(307)을 가지는 브랜치 ADVN 명령으로서 명령을 식별한다. 명령 특정 필드(306)는 오피코드 확장들 및 다른 명령 특정 인코딩들을 허용한다. 명령에서 특정된 조건 코드 필드에 따라 조건적으로 실행되는 명령들을 가지는 이러한 ISA를 가지는 프로세서들에서, 브랜치 타겟 주소 레지스터인 Rm에 영향을 미치는 마지막 명령의 조건 필드가 일반적으로 ADVN 명령에 대한 조건 필드로서 사용될 것이지만, 이러한 사양에 제한되는 것은 아니다.
본 발명의 교시들은 다양한 명령 포맷들 및 아키텍처 사양에 적용가능하다. 예를 들어, 도 3b는 본 발명에 따라 간접 브랜치 타겟 주소 값을 가지는 레지스터를 특정하는 16-비트 ADVN 명령(350)에 대한 일반적 포맷이다. 오피코드(355), 브랜치 타겟 주소 레지스터 필드인 Rm(357) 및 명령 특정 비트들(356)을 가지는 16 비트 ADVN 명령(350)은 32 비트 ADVN 명령(300)과 유사하다. 또한, 다른 비트 포맷들 및 명령 폭들이 ADVN 명령을 인코딩하기 위해서 이용될 수 있다는 점이 주목된다.
간접 브랜치 타입 명령들의 일반적 형태들은 유용하게 사용되어 프로세서 파이프라인(202)에서 실행될 수 있는데, 예를 들어, 레지스터 Rx(BX) 상에서의 브랜치, PC의 추가, Rx PC의 이동 등을 수행할 수 있다. 본 발명을 설명하기 위해서, 간접 브랜치 명령의 BX Rx 형태는 아래에 추가로 설명되는 바와 같이 코드 시퀀스 예들에서 사용된다.
명령 특정 브랜치 타겟 주소(BTA)를 가지는 브랜치 명령, 명령 특정 오프셋 주소와 기본 주소 레지스터의 합으로서 계산된 BTA를 가지는 브랜치 명령 등과 같은 다른 형태들의 브랜치 명령들이 일반적으로 ISA에서 제공된다는 점이 주목된다. 이러한 브랜치 명령들의 지원에서, 프로세서 파이프라인(202)은, 예를 들어, 이전의 브랜치 명령 실행들의 조건적 실행 상태를 트래킹하는 것 및 이러한 명령들의 추후 실행을 예상할 때 사용하기 위한 이러한 실행 상태를 저장하는 것에 기초하는 브랜치 이력 예상 기법들을 이용할 수 있다. 프로세서 파이프라인(202)은 이러한 브랜치 이력 예상 기법들을 지원할 수 있으며, 간접 브랜치 타겟 주소들의 사전 통지를 제공하기 위해서 ADVN 명령의 사용을 추가적으로 지원할 수 있다. 예를 들어, 프로세서 파이프라인(202)은 ADVN 명령에 당면할 때까지 ― 이후 이는 본 명세서에 설명되는 바와 같이 ADVN 설비들을 사용하여 브랜치 타겟 이력 예상 기법들을 오버라이딩(override)함 ― 브랜치 이력 예상 기법들을 사용할 수 있다.
본 발명의 다른 실시예들에서, 프로세서 파이프라인(202)은 또한 동일한 간접 브랜치의 후속하는 당면들을 위한 ADVN 명령을 무시하기 위해서, ADVN 식별된 타겟 주소가 1회 또는 그 이상 동안 부정확하였을 때 그리고 ADVN 명령을 사용하는 정확성을 모니터링하도록 셋업될 수 있다. 또한, ADVN 명령을 가지는 ISA를 지원하는 프로세서의 특정 구현에 대하여, 프로세서가 당면한 ADVN 명령을 NOP(no operation) 명령으로서 처리하거나 또는 검출된 ADVN 명령을 정의되지 않은 것으로 플래깅(flag)할 수 있다는 점이 주목된다. 또한, ADVN 명령은, 코드의 섹션의 실행 동안 당면한 브랜치들을 트래킹하고 동적 브랜치 이력 예상 회로에 이용가능한 하드웨어 자원들을 초과하는 코드의 섹션들에 대하여 아래에서 설명되는 바와 같이 ADVN 명령을 인에이블하기 위해서 충분한 하드웨어 자원들을 가진 동적 브랜치 이력 예상 회로를 가지는 프로세서 파이프라인에서 NOP으로서 처리될 수 있다. 또한, ADVN 명령은 간접 브랜치 타겟 주소들의 사전 통지를 제공하기 위한 동적 브랜치 이력 예상 회로와 함께 사용될 수 있으며, 여기서 동적 브랜치 이력 예상 회로는 간접 브랜치 타겟 주소들을 예상하기 위한 열악한 결과들을 가진다. 예를 들어, 동적 브랜치 이력 예상 회로로부터 생성된 예상된 브랜치 타겟 주소는 ADVN 명령의 사용을 통해 제공된 타겟 주소에 의해 오버라이딩될 수 있다. 또한, 아래에서 설명되는 바와 같은 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 유리한 자동 간접-타겟 추론 방법들이 제시된다.
도 4a는 ADVN 명령이 본 발명에 따라 당면되지 않은 경우, 간접 브랜치 실행들을 예상하기 위한 일반적 이력 방식을 사용하는 간접 브랜치 예상을 위한 방식에 대한 코드 예(400)이다. 코드 예(400)의 실행은 프로세서 컴플렉스(200)를 참조하여 설명된다. 이러한 예시를 위해서, 명령들 A-D(401-404)는 명령들 A-D(401-404)의 분석에 기초하여 GPRF(204)에서 레지스터 R0에 영향을 미치지 않는 순차적 산술 명령들의 세트일 수 있다. 레지스터 R0은 간접 브랜치 명령 BX R0(406)에 대한 타겟 주소를 가지는 load RO 명령(405)에 의해 로딩된다. 이러한 예를 위해서, 명령들(401-406) 각각은 무조건적으로 실행되도록 특정된다. 또한, 명령 A(401)가 실행 스테이지(222)에서 실행을 완료할 때, load R0 명령(405)이 페치 스테이지(204)에 페치되도록, load R0 명령(405)이 L1 명령 캐쉬(208)에서 이용가능하다는 것이 가정된다. 이후, 간접 브랜치 BX R0 명령(406)은 load R0 명령(405)이 디코드 및 ADVN 스테이지(216)에서 디코딩되는 동안 페치된다. 다음 파이프라인 스테이지에서, load R0 명령(405)은 실행을 위해서 디스패치되도록 준비되고, BX R0 명령(406)은 디코딩된다. 또한, 디코드 및 ADVN 스테이지(216)에서, BX R0 명령(406)이 취해지든 또는 취해지지 않든 이전의 간접 브랜치 실행들의 이력에 기초하여 예상이 이루어지고, 또한 간접 브랜치에 대한 타겟 주소가 예상된다. 이러한 예에 대하여, BX R0 명령(406)은 무조건적으로 "취해지도록" 특정되고, ADVN 로직 회로(217)는 단지 간접 브랜치 타겟 주소를 주소 X로서 예상하는 것이 요구된다. 이러한 예상에 기초하여, 프로세서 파이프라인(202)은 "취해진" 상태를 고려하면 일반적으로 현재 명령 어드레싱으로부터의 방향 수정(redirection)인 주소 X로부터 시작하는 명령들을 예측 페치하는 것을 시작하도록 지시받는다. 또한, 이러한 명령들이 주소 X에서 시작하는 명령들과 연관되지 않는 경우, 프로세서 파이프라인(202)은 간접 브랜치 BX R0 명령(406) 이후 파이프라인에서 임의의 명령을 플러쉬한다. 프로세서 파이프라인(202)은 예상된 주소 X가 정확하게 예상되었는지의 여부가 실행 스테이지에서 결정될 수 있을 때까지 명령들을 계속 페치한다.
명령들을 프로세싱하는 동안, 이를테면, load R0 명령(405)의 실행으로 발생할 수 있는 스톨(stall) 상황들이 당면될 수 있다. load R0 명령(405)의 실행은 L1 데이터 캐쉬(210)에서 히트(hit)가 존재하는 경우 지연 없이 L1 데이터 캐쉬(210)로부터의 값을 리턴할 수 있다. 그러나, load R0 명령(405)의 실행은 L1 데이터 캐쉬(210)에 미스가 존재하는 경우 상당한 수의 사이클들을 취할 수 있다. load 명령은 기본 주소를 공급하기 위해서 GPRF(204)로부터의 레지스터를 사용할 수 있으며, 이후 유효 주소를 생성하기 위해서 실행 스테이지(222)에서 기본 주소에 즉시 값(immediate value)을 부가할 수 있다. 유효 주소는 데이터 경로(232)를 통해 L1 데이터 캐쉬(210)로 전송된다. L1 데이터 캐쉬(210)에서의 미스로 인해, 데이터는 예를 들어, L2 캐쉬 및 메인 메모리를 포함할 수 있는 메모리 계층(212)으로부터 페치되어야 한다. 또한, 데이터는 메인 메모리로부터 데이터의 페치를 초래하여 L2 캐쉬에서 미스될 수 있다. 예를 들어, L1 데이터 캐쉬(210)에서의 미스, 메모리 계층(212) 내의 L2 캐쉬에서의 미스 및 메인 메모리로의 액세스는 데이터를 페치하도록 수백 CPU 사이클들을 요구할 수 있다. L1 데이터 캐쉬 미스 이후 데이터를 페치하기 위해서 소요되는 사이클들 동안, BX R0 명령(406)은 인플라이트 오퍼랜드가 이용가능할 때까지 프로세서 파이프라인(202)에서 스톨된다. 스톨은 실행 스테이지(222)의 시작에서 또는 판독 레지스터 스테이지(220)에서 발생하는 것으로 고려될 수 있다.
다수의 명령 파이프라인들을 가지는 프로세서들에서, load R0 명령(405)의 스톨이 임의의 다른 파이프라인들에서 발생하는 예측 동작들을 스톨하지 않을 수 있다는 점이 주목된다. L1 데이터 캐쉬(210)에서의 미스에 대한 스톨의 길이로 인하여, 많은 명령들이 예측 페치될 수 있고, 이는 간접 브랜치 타겟 주소의 부정확한 예상이 존재하였을 경우 성능 및 전력 사용에 상당히 영향을 미칠 수 있다. 스톨은 도 2의 제어 회로(206)의 일부인 홀드 회로의 사용에 의해 프로세서 파이프라인에서 생성될 수 있다. 홀드 회로는 예를 들어, 파이프라인에서 명령을 스톨하기 위해서 파이프라인 스테이지 레지스터들을 게이팅(gate)하는데 사용될 수 있는 홀드 신호를 생성한다. 도 2의 프로세서 파이프라인(202)에 대하여, 모든 입력들이 이용가능할 것은 아닌 경우, 예를 들어, 판독 레지스터 스테이지에서 홀드 신호가 활성화될 수 있어서 명령의 실행을 완료하는데 필요한 입력들이 도착할 때까지 파이프라인이 홀딩된다. 홀드 신호는 모든 필요한 오퍼랜드들이 이용가능해질 때 해제(release)된다.
미스의 해결 시에, 로드 데이터는 라이트백 스테이지(224)의 일부로서 라이트백 동작으로 경로(240)를 통해 전송된다. 이후, 오퍼랜드는 GPRF(204)에 기록되고, 또한 위에서 설명된 포워딩 네트워크(226)로 전송될 수 있다. 이제, 예측 페치된 명령들이 플러쉬될 필요가 있는지 또는 그렇지 않은지를 결정하기 위해서 R0에 대한 값이 예상된 주소 X와 비교될 수 있다. 브랜치 타겟 주소를 저장하기 위해서 사용되는 레지스터는 간접 브랜치 명령이 실행될 때마다 상이한 값을 가질 수 있으므로, 예측 페치된 명령들이 현재 예상 방식들을 사용하여 플러쉬될 확률이 높다.
도 4b는 본 발명에 따라 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 도 3a의 ADVN 명령을 사용하는 간접 브랜치 사전 통지를 위한 방식에 대한 코드 예(420)이다. 도 4a의 명령들 A-D(401-404)이 브랜치 타겟 주소 레지스터 R0에 영향을 미치지 않는다는 이미 알려진 분석에 기초하여, load R0 명령(405)은 예를 들어, 도 4b의 코드 예에서의 명령 A(421) 이후 배치되도록 명령 시퀀스에서 상향 이동될 수 있다. 또한, 도 3a의 ADVN 명령(300)과 같은 ADVN R0 명령(423)은 간접 BX R0 명령(427)에 대한 브랜치 타겟 주소의 사전 통지를 위한 룩 어헤드 에이드(look ahead aid)로서 load R0 명령(422) 직후 배치된다.
도 4b의 새로운 명령 시퀀스(421-427)가 프로세서 파이프라인(202)을 통해 흐름에 따라, ADVN R0 명령(423)은 load R0 명령(422)이 실행 스테이지에 있을 때 판독 스테이지(220)에 있을 것이고, 명령 D(426)는 페치 스테이지(214)에 있을 것이다. load R0 명령(422)이 L1 데이터 캐쉬(210)에서 히트하는 상황에 대하여, R0의 값은 load R0 실행의 완료로 알려지고, 포워딩 네트워크(226)를 통한 판독 스테이지로의 R0 값 패스트 포워드(fast forward)에 대하여, R0 값은 또한 판독 스테이지(220)의 완료에서 알려지거나 또는 ADVN R0 명령을 위한 실행 스테이지의 시작으로 알려진다. 디코드 및 ADVN 스테이지(216)에 입력되는 간접 브랜치 명령 이전의 R0 값의 결정은 ADVN 로직 회로(217)가 임의의 추가적인 사이클 지연없이 BX R0 명령(427)에 대한 브랜치 타겟 주소로서 결정된 R0 값을 선택하게 한다. BX R0 명령(427)이 파이프라인에서 동적으로 식별된다는 점이 주목된다. 이러한 코드 예에서의 R0와 같은 ADVN 특정 레지스터가 일반적으로 간접 브랜치 특정 타겟 주소 레지스터와 동일한 주소를 홀딩하는 동안, 예외들이 당면될 수 있다. 이러한 주소 예외(address exception)에 대한 일 방식에서, ADVN 특정 레지스터 값은 다음의 당면되는 간접 브랜치 명령 특정 레지스터 값과 비교되지 않으며, 부정확한 타겟 주소가 선택된 경우, 에러는 파이프라인에서 추후 검출되고, 파이프라인을 플러쉬하는 것과 같은 적절한 동작이 취해진다. 상이한 방식에서, ADVN 특정 레지스터 값은 다음의 당면되는 간접 브랜치 명령 특정 레지스터 값과 비교되고, 매치가 발견될 때까지 예측 실행을 위해서 어떠한 변화도 이루어지지 않으며, 이것이 일반적인 경우일 것이다. 매치가 발견되지 않았을 경우, 파이프라인은 ADVN 명령이 당면되지 않았던 것처럼 동작할 것이다.
프로세서 파이프라인(202)에 대하여, load R0 명령 및 ADVN R0 명령은 L1 데이터 캐쉬(210)에서 히트가 존재하는 경우에 대하여 임의의 추가적 지연을 야기하지 않고 명령 B 이후 배치되었을 수 있다는 점이 주목된다. 그러나, L1 데이터 캐쉬에 미스가 존재하였을 경우, 스톨 상황은 시작되었을 것이다. L1 데이터 캐쉬(210)에서의 미스의 이러한 경우에 대하여, load R0 및 ADVN R0 명령들은 가능하다면, 임의의 추가적 지연들을 야기하는 것을 회피하기 위해서 파이프라인 심도에 기초하여 BX R0 명령 전에 적절한 수의 미스 지연 사이클들로 배치되었을 필요가 있을 것이다.
일반적으로, 코드 시퀀스에서의 ADVN 명령들의 배치는 BX 명령 전의 N개의 명령들보다 선호된다. 프로세서 파이프라인의 맥락에서, N은 간접 브랜치 명령을 수신하는 스테이지와 ADVN 특정 브랜치 타겟 주소를 인지하는 스테이지, 이를테면, 명령 페치 스테이지(214)와 실행 스테이지(222) 사이의 스테이지들의 수를 표현한다. 예시적인 프로세서 파이프라인(202)에서, 포워딩 네트워크(226)를 사용하면 N은 2이고, 포워딩 네트워크(226)를 사용하지 않으면 N은 3이다. 예를 들어, 포워딩 네트워크를 사용하는 프로세서 파이프라인들에 대하여, BX 명령이 ADVN 명령 전에 N(2개의 명령들과 동일함)만큼 선행되는 경우, ADVN 타겟 주소 레지스터 Rm 값은 포워딩 네트워크(226)로 인하여 판독 레지스터 스테이지(220)의 완료에서 결정된다. 대안적인 실시예에서, 예를 들어, ADVN 명령 사용을 위한 포워딩 네트워크(226)를 사용하지 않는 프로세서 파이프라인에 대하여, BX 명령이 ADVN 명령 전에 N(3개의 명령들과 동일함)만큼 선행되는 경우, ADVN 타겟 주소 레지스터 Rm 값은 BX 명령이 디코드 및 ADVN 스테이지(216)에 입력될 때 실행 스테이지(222)의 완료에서 결정된다. 또한, 명령들의 수(N)는 예를 들어, 이를테면, 명령 페치 스테이지(214)에서의 지연들, 수퍼 스칼라 프로세서에서 발행되는 최대 K개 명령들을 변경시킬 수 있는 명령 발행 폭, 및 ADVN과 BX 명령들 사이에 오는 인터럽트들로 인한, 상위 파이프라인에서의 스톨들을 포함하는 추가적 인자들에 의존할 수 있다. 일반적으로, ISA는 이러한 인자들의 효과를 최소화하기 위해서 가능한 일찍 ADVN 명령이 스케줄링되는 것을 추천할 수 있다.
도 4b는 단일 ADVN R0 명령으로 도시되는 반면, 다수의 ADVN 명령들은 임의의 간접 브랜치들을 당면하기 전에 예시될 수 있다. 다수의 ADVN 명령들은 FIFO 방식으로 다음의 당면되는 간접 브랜치들에 적용될 수 있는데, 이를테면, 스택 장치의 사용을 통해 획득될 수 있다. 다음의 당면되는 간접 브랜치 명령은 일반적으로, 프로그램 순서에서 다음 간접 브랜치 명령과 동일하다는 점이 주목된다. 이러한 일반적 규칙에 대한 예외들을 야기할 수 있는 코드는 다수의 ADVN 명령들의 사용이 적절한지의 여부를 결정하기 전에 평가될 수 있다.
도 5는 본 발명에 따른 예시적인 제 1 간접 브랜치 타겟 주소(BTA) 사전 통지 회로(500)를 도시한다. 제 1 간접 BTA 사전 통지 회로(500)는 ADVN 실행 회로(504), 브랜치 타겟 주소 레지스터(BTAR) 회로(508), BX 디코드 회로(512), 선택 회로(516) 및 프로그램 카운터(PC) 주소의 생성에 영향을 미치는 입력들에 응답하기 위한 다음 PC 회로(520)를 포함한다. ADVN 실행 회로(504)에서 ADVN Rx 명령의 실행 시에, Rx의 값은 BTAR 회로(508)로 로딩된다. BX 명령이 BX 디코드 회로(512)에서 디코딩될 때 그리고 BTAR이 선택 회로(516)에 의해 선택되는 바와 같이 유효한 경우, BTAR 회로(508)에서의 BTA 값은 다음 PC 회로(520)에 의해 다음 페치 주소로서 사용된다. 또한, BTAR 유효 표시는 BTAR 유효가 잘못된 주소에서의 페칭 명령들과 연관될 것인 활성 절약 전력인 동안 페치를 중단하기 위해서 사용될 수 있다.
도 6은 본 발명에 따라 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 자동 간접-타겟 추론 방법을 사용하는 방식에 대한 코드 예(600)이다. 코드 시퀀스(601-607)에서, 명령들 A(601), B(603), C(604) 및 D(606)는 미리 설명된 바와 같이 동일하며, 따라서 브랜치 타겟 주소 레지스터에 영향을 미치지 않는다. 2개의 명령들 즉, load R0 명령(602) 및 add R0, R7, R8 명령(605)은 이러한 예의 브랜치 타겟 레지스터 R0에 영향을 미친다. 간접 브랜치 명령 BX R0(607)는 도 4a 및 도 4b의 이전의 예들에서 사용되는 바와 같이 동일하다. 코드 예(600)에서, load R0 명령(602) 및 add R0, R7, R8 명령(605) 둘 다가 BTA 레지스터 R0에 영향을 미치는 경우에도, add R0, R7, R8 명령(605)은 BTA 레지스터 R0의 컨텐츠들에 영향을 미치는 마지막 명령이다.
BX R0 명령(607)이 디코드 및 ADVN 스테이지(216)에 입력되는 때의 R0의 최근 값이 ADVN BTA로서 사용되어야 하는지의 여부에 관계없이, 코드 시퀀스(600)의 실행 패턴을 트래킹함으로써, 자동 간접-타겟 추론 방법 회로는 꽤 정확하게 사전 통지를 제공할 수 있다. 일 실시예에서, R0에 기록된 마지막 값은 BX R0 명령이 디코드 및 ADVN 스테이지(216)에 입력될 때 BX R0 명령에 대한 값으로서 사용될 것이다. 이러한 실시예는, 이러한 BX R0 명령과 연관된 코드 시퀀스에 대하여 R0에 기록된 마지막 값이 시간의 높은 비율로 정확한 값이 되도록 추정될 수 있다는 평가에 기초한다.
도 7은 본 발명에 따라 간접 브랜치 명령의 브랜치 타겟 주소의 사전 통지를 제공하도록 적합하게 이용되는 제 1 간접 브랜치 사전 통지(ADVN) 프로세스(700)이다. 제 1 간접 브랜치 ADVN 프로세스(700)는 레지스터 파일 번호에 의해 어드레싱가능하거나 또는 인덱싱되는 마지막 기록자(lastwriter) 테이블을 이용하여서, 32개의 엔트리들 R0 내지 R31을 가지는 레지스터 파일과 연관된 마지막 기록자 테이블이 인덱싱된 값들 0-31에 의해 어드레싱가능하게 한다. 유사하게, 레지스터 파일이 더 적은 엔트리들, 이를테면, 14개의 엔트리들 R0-R13을 가지는 경우, 마지막 기록자 테이블은 인덱싱된 값들 0-13에 의해 어드레싱가능할 것이다. 마지막 기록자 테이블 내의 엔트리들 각각은 명령 주소를 저장한다. 또한, 제 1 간접 브랜치 ADVN 프로세스(700)는, 명령 주소에 의해 액세스되는 엔트리들을 가지며 엔트리당 하나의 유효 비트를 포함하는 브랜치 타겟 주소 레지스터 업데이터 연상 메모리(BTARU)를 이용한다. 제 1 간접 브랜치 ADVN 프로세스(700)에 입력하기 전에, 마지막 기록자 테이블은 0과 같은 무효 명령 주소들로 초기화되는데, 여기서 간접 브랜치 ADVN 코드 시퀀스들에 대한 명령 주소들은 통상적으로 발견되지 않을 것이고, BTARU 엔트리들은 무효 상태로 초기화된다.
제 1 간접 브랜치 ADVN 프로세스(700)는 페치된 명령 스트림(702)으로 시작한다. 결정 블록(704)에서, 간접 브랜치 명령의 타겟 레지스터일 수 있는 임의의 레지스터 Rm을 기록하는 명령이 수신되는지의 여부에 대한 결정이 이루어진다. 예를 들어, 레지스터들 R0-R13을 갖는 14개의 엔트리 레지스터 파일을 가지는 프로세서에서, 레지스터들 R0-R13 중 임의의 것으로 기록하는 명령들이 간접 브랜치 명령의 가능한 타겟 레지스터들로서 파악될 것이다. 간접 브랜치 명령을 가지는 코드의 섹션들의 다수의 패스(pass)들을 모니터링하는 기법들에 대하여, 특정 Rm은 제 1 패스 상에서 간접 브랜치 명령을 식별함으로써 결정될 수 있다. 예를 들어, 동일한 Rm을 특정하는 간접 브랜치를 당면하기 전에 둘 이상의 Rm 변경 명령을 가지는 코드의 시퀀스가 수신된다. 코드의 이러한 시퀀스는 프로세스(700)를 통한 다수의 패스들에 의해 프로세싱된다. 프로세스(700)의 제 1 패스에서, 마지막 Rm 변경 명령의 주소는 인덱싱되는 Rm 주소에서 마지막 기록자 테이블에 저장되어, 간접 브랜치 명령이 당면되기 전에 이전의 Rm 변경 명령의 주소를 오버라이팅한다. BTAR은 간접 브랜치 명령이 당면된 이후까지 제 1 패스 상에서 업데이트되지 않는데, 그 이유는 그것이 마지막 Rm 변경 명령이 수신되었을 때 제 1 패스에서 알려져 있지 않기 때문이다. 당면된 간접 브랜치 명령은 특정된 Rm을 변경하였던 마지막 명령이 특정된 Rm에 저장된 타겟 주소의 사전 통지를 위해서 사용될 유효 명령임을 표시하기 위해서 유효 비트를 어서트(assert)한다. 프로세스(700)를 통한 제 2 패스에서, 마지막 Rm 변경 명령은 BTAR이 업데이트되게 할 것이고, 간접 브랜치 명령이 당면될 때, 이를테면, 디코드 스테이지에서 식별될 때, BTAR은 브랜치 타겟 주소의 사전 통지를 위해서 사용될 수 있다.
블록(704)으로 리턴하여, 수신된 명령이 Rm에 영향을 미치지 않는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 결정 블록(706)으로 진행한다. 결정 블록(706)에서, 수신된 명령이 간접 브랜치 명령, 이를테면, BX Rm 명령인지의 여부에 대한 결정이 이루어진다. 수신된 명령이 간접 브랜치 명령이 아닌 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 진행한다.
결정 블록(704)으로 리턴하여, 수신된 명령이 Rm에 영향을 미치는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록들(708, 710 및 712)을 통하는 제 1 패스의 블록(708)으로 진행한다. 블록(708)에서, Rm에 영향을 미치는 명령의 주소는 마지막 기록자 테이블의 Rm 주소에서 로딩된다. 블록(710)에서, BTARU는 명령 주소에서 유효 비트에 대하여 확인된다. 결정 블록(712)에서, 어서트된 유효 비트가 BTARU 내의 명령 주소 엔트리에서 발견되었는지의 여부에 대한 결정이 이루어진다. 어서트된 유효 비트가 발견되지 않았을 경우, 이를테면, 프로세스 블록들(708, 710, 712)을 통하는 제 1 패스 상에서 발생할 수 있는 경우, 제 1 간접 브랜치 ADVN 프로세스는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 리턴한다.
결정 블록(706)으로 리턴하여, BX Rm 명령과 같은 간접 브랜치 명령이 수신되는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록(714)으로 진행한다. 블록(714)에서, 마지막 기록자 테이블은 주소 Rm에서 유효 명령 주소에 대하여 확인된다. 결정 블록(716)에서, 유효 명령 주소가 Rm 주소에서 발견되는지의 여부에 대한 결정이 이루어진다. 유효 명령 주소가 발견되지 않는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록(718)으로 진행한다. 블록(718)에서, 명령 주소에서의 BTARU 비트 엔트리는 무효하도록 세팅되고, 제 1 간접 브랜치 ADVN 프로세스(700)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 리턴한다.
결정 블록(716)으로 리턴하여, 유효 명령 주소가 발견되는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록(720)으로 진행한다. 계류 중인 업데이트가 존재하는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 계류 중인 업데이트가 해결될 때까지 스톨할 수 있다. 블록(720)에서, 명령 주소에서의 BTARU 비트 엔트리는 유효하도록 세팅되고, 제 1 간접 브랜치 ADVN 프로세스(700)는 결정 블록(722)으로 진행한다. 결정 블록(722)에서, 브랜치 타겟 주소 레지스터(BTAR)가 유효 주소를 가지는지의 여부에 대한 결정이 이루어진다. BTAR가 유효 주소를 가지는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록(724)으로 진행한다. 블록(724)에서, 간접 브랜치 명령 Rm의 사전 통지는 저장된 BTAR 값을 사용하여 제공되고, 제 1 간접 브랜치 ADVN 프로세스(700)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 리턴한다. 결정 블록(722)으로 리턴하여, BTAR이 유효 주소를 가지지 않는 것으로 결정되는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 리턴한다.
결정 블록(704)으로 리턴하여, 수신된 명령이 간접 브랜치 명령의 Rm에 영향을 미치는 경우, 이를테면, 제 1 간접 브랜치 ADVN 프로세스(700)를 통한 제 2 패스 상에서 발생할 수 있는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록들(708, 710, 712)을 통하는 제 2 패스의 블록(708)으로 진행한다. 블록(708)에서, Rm에 영향을 미치는 명령의 주소는 마지막 기록자 테이블의 Rm 주소에서 로딩된다. 블록(710)에서, BTARU는 명령 주소에서의 유효 비트에 대하여 확인된다. 결정 블록(712)에서, 어서트된 유효 비트가 BTARU 내의 명령 주소 엔트리에서 발견되었는지의 여부에 대한 결정이 이루어진다. 어서트된 유효 비트가 발견되지 않았을 경우, 이를테면, 프로세스 블록들(708, 710, 712)을 통하는 제 2 패스 상에서 발생할 수 있는 경우, 제 1 간접 브랜치 ADVN 프로세스(700)는 블록(726)으로 진행한다. 블록(726)에서, 도 2의 BTAR(219)과 같은 브랜치 타겟 주소 레지스터(BTAR)는 Rm에 저장되는 명령을 실행하는 BTAR 업데이터 결과로 업데이트된다. 이후, 제 1 간접 브랜치 ADVN 프로세스(700)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(704)으로 리턴한다.
도 8a 및 도 8b에 도시되는 다른 자동 간접 브랜치 타겟 주소 프로세스는 간접 브랜치 명령이 디코딩 스테이지에 입력되는 때에 프로그램 레지스터에 저장된 최근 값이 브랜치 타겟 주소(BTA)의 사전 통지로서 사용되어야 하는지의 여부를 결정한다. 도 8a는 엔트리 유효 비트(804), 태그 필드(805), 레지스터 Rm 주소(806), 데이터 유효 비트(807), 및 업/다운 카운터 값(808), 및 Rm 데이터 필드(809)를 포함하는 6개의 필드들을 가지는 타겟 트래킹 테이블(TTT) 엔트리(802)를 가지는 예시적인 TTT(800)를 도시한다. TTT(800)는 프로세서 파이프라인(202)의 디코드 및 ADVN 스테이지(216) 및 다른 파이프 스테이지들에 의해 액세스가능한 메모리, 예를 들어, 제어 회로(206)에 저장될 수 있다. 예를 들어, 실행 스테이지(222)와 같은 더 낮은 파이프 스테이지들은 Rm 데이터 필드(809)에 Rm 데이터를 기록한다. 아래에서 더 상세하게 설명되는 바와 같이, 간접 브랜치 명령은, 간접 브랜치 명령이 페치되고 TTT 테이블에서 아직 유효 매칭 태그를 가지지 않을 때 TTT 엔트리를 할당한다. 태그 필드(805)는 완전한 명령 주소 또는 이의 일부일 수 있다. 레지스터 값들에 영향을 미치는 명령들은 Rm 주소(806)에 특정되는 바와 같은 Rm 필드와 매칭하기 위해서 TTT(800)에서의 유효 엔트리들을 확인한다. 매치가 발견되는 경우, 그 Rm에 특정된 주소로의 간접 브랜치 명령은 TTT 테이블(800)에 설정된 엔트리, 이를테면, TTT 엔트리(802)를 가진다.
도 8b는 본 발명에 따른 간접 브랜치 명령의 브랜치 타겟 주소의 사전 통지를 제공하기 위해서 적합하게 이용되는 제 2 간접 브랜치 사전 통지(ADVN) 프로세스(850)이다. 제 2 간접 브랜치 ADVN 프로세스(850)는 페치된 명령 스트림(852)으로부터 시작한다. 결정 블록(854)에서, 간접 브랜치(BX Rm) 명령이 수신되는지의 여부에 대한 결정이 이루어진다. BX Rm 명령이 수신되지 않는 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 결정 블록(856)으로 진행한다. 결정 블록(856)에서, 수신된 명령이 Rm 레지스터에 영향을 미치는지의 여부에 대한 결정이 이루어진다. 여기에서 이루어지는 결정은 수신됨 명령이 BX Rm 명령에 의해 잠재적으로 사용될 수 있는 임의의 레지스터들을 업데이트할 것인지 또는 아닌지에 대한 것이다. 일반적으로, 간접 브랜치 명령에 의해 특정될 수 있는 레지스터 Rm에 영향을 미치는 임의의 명령은 아래에서 더 상세하게 설명되는 바와 같이 확인될 가능한 후보 명령으로서 하드웨어에 의해 기술된다. 수신된 명령이 Rm 레지스터에 영향을 미치지 않는 경우, 제 2 간접 브랜치 ADVN 프로세서(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)으로 진행한다.
결정 블록(856)으로 리턴하여, 수신된 명령이 Rm 레지스터에 영향을 미치는 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 블록(858)으로 진행한다. 블록(858)에서, 수신된 명령이 BX 명령이 필요할 레지스터를 실제로 변경할 것인지의 여부를 알기 위해서 TTT(800)가 유효 엔트리들에 대하여 확인된다. 결정 블록(860)에서, 임의의 매칭 Rm들이 TTT(800)에서 발견되었는지의 여부에 대한 결정이 이루어진다. 적어도 하나의 매칭 Rm도 TTT(800)에서 발견되지 않았을 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)을 리턴한다. 그러나, 적어도 하나의 매칭 Rm이 TTT(800)에서 발견되었을 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 블록(862)으로 진행한다. 블록(862)에서, 엔트리와 연관된 업/다운 카운터가 증분된다. 업/다운 카운터는 그 특정 Rm을 변경할 명령들이 플라이트(flight) 내에 얼마나 많이 있는지를 표시한다. Rm 변경 명령이 실행될 때, 엔트리의 업/다운 카운터 값(808)은 감소되고, 데이터 유효 비트(807)가 세팅되며, 실행의 Rm 데이터 결과가 Rm 데이터 필드(809)에 기록된다는 점이 주목된다. 레지스터 변경 명령들이 순서가 뒤바뀌어 실행되는 경우, 실행 결과들이 프로세서 상태를 변경하도록 표명(commit)될 때, 프로그램 순서에서의 최근 레지스터 변경 명령은 Rm 데이터 필드로의 프로그램 순서의 더 이전의 명령의 기록을 취소하여, 이로써 기록 장애(write hazard) 이후 기록을 회피한다. 비-브랜치 조건적 명령들을 가지는 프로세서 명령 세트 아키텍처(ISA)들에 대하여, 비-브랜치 조건적 명령은 비-실행 상태로 평가하는 조건을 가질 수 있다. 따라서, 엔트리의 업/다운 카운터 값(808)을 평가하기 위해서, 실행되지 않는 것으로 평가하는 비-브랜치 조건적 명령의 타겟 레지스터 Rm은 소스 오퍼랜드로서 판독될 수 있다. 판독되는 Rm 값은 최근 타겟 레지스터 Rm 값을 가진다. 그러면, 매치된 유효 태그를 가지는 Rm을 갖는 비-브랜치 조건적 명령이 실행되지 않는 경우에도, Rm 데이터 필드(809)는 최근 값으로 업데이트될 수 있고, 따라서 업/다운 카운터 값(808)은 감소된다. 이후, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)을 리턴한다.
결정 블록(854)으로 리턴하여, 수신된 명령이 BX Rm 명령인 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 블록(866)으로 진행한다. 블록(866)에서, TTT(800)는 유효 엔트리들에 대하여 확인된다. 결정 블록(868)에서, 매칭 태그가 TTT(800)에서 발견되었는지의 여부에 대한 결정이 이루어진다. 매칭 태그가 발견되지 않았을 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 블록(870)으로 진행한다. 블록(870)에서, 새로운 엔트리가 TTT(800)에 설정되는데, 이는 새로운 엔트리 유효 비트(804)를 유효 표시 값으로 세팅하는 것, BX의 Rm을 Rm 필드(806)에 배치하는 것, 데이터 유효 비트(807)를 클리어(clear)하는 것, 및 새로운 엔트리와 연관된 업/다운 카운터를 클리어하는 것을 포함한다. 이후, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)으로 리턴한다.
결정 블록(868)으로 리턴하여, 매칭 태그가 발견되는 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 결정 블록(872)으로 진행한다. 결정 블록(872)에서, 엔트리의 업/다운 카운터가 0인지의 여부에 대한 결정이 이루어진다. 엔트리의 업/다운 카운터가 0이 아닌 경우, Rm 변경 명령들이 플라이트 내에 여전히 존재하고, 제 2 간접 브랜치 ADVN 프로세스(850)는 단계(874)로 진행한다. 단계(874)에서, BX 명령은 엔트리의 업/다운 카운터가 0으로 감소될 때까지 프로세서 파이프라인에서 스톨된다. 블록(876)에서, Rm 데이터로의 마지막 변경인 TTT 엔트리의 Rm 데이터는 간접 브랜치 BX 명령에 대한 타겟으로서 사용된다. 이후, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)으로 리턴한다.
결정 블록(872)으로 리턴하여, 엔트리의 업/다운 카운터가 0과 동일한 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 결정 블록(878)으로 진행한다. 결정 블록(878)에서, 엔트리의 데이터 유효 비트가 1과 동일한지의 여부에 대한 결정이 이루어진다. 엔트리의 데이터 유효 비트가 1과 동일한 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 블록(876)으로 진행한다. 블록(876)에서, TTT 엔트리의 Rm 데이터는 간접 브랜치 BX 명령에 대한 타겟으로서 사용된다. 이후, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)으로 리턴한다.
결정 블록(878)으로 리턴하여, 엔트리의 데이터 유효 비트가 1과 동일하지 않은 경우, 제 2 간접 브랜치 ADVN 프로세스(850)는 다음의 수신되는 명령을 평가하기 위해서 결정 블록(854)으로 리턴한다. 프로세스(850)에서의 이러한 지점에서, 수신된 Bx 명령에 응답하는 다수의 대안들이 존재한다. 제 1 대안에서, TTT 엔트리의 Rm 데이터는 간접 브랜치 BX 명령에 대한 타겟으로서 사용될 수 있는데, 그 이유는 BX Rm 태그가 유효 엔트리와 매치하고, 업/다운 카운터 값이 0이기 때문이다. 제 2 대안에서, 프로세서 파이프라인(202)은 부정확한 경로를 페치하는 것을 회피하기 위해서 취해지지 않은 경로를 따라 명령들을 페치하는 것에 관한 것이다. Rm 데이터 필드 내의 데이터가 유효하지 않기 때문에, Rm 데이터가 심지어 실행가능한 메모리 또는 액세스하도록 허가된 메모리를 지정하는 것에 대하여 보장되지 않는다. 취해진 경로가 아닌 순차적 경로를 페치하는 것은 액세스되도록 허가된 메모리에 대한 것일 가능성이 크다. 처음 2개의 대안들 중 하나에 대하여 발생할 수 있는 부정확한 시퀀스는 프로세서 파이프라인의 추후 스테이지들에서 발견되어 처리된다. 제 3 대안에서, 프로세서 파이프라인(202)은 페치 동작들을 재설정하기 위해서 전력을 절약하고 BX 정정 시퀀스를 대기하기 위해서 BX 명령 이후 페치하는 것을 중단하는 것에 관한 것이다.
도 9a는 본 발명에 따른 예시적인 제 2 간접 브랜치 타겟 주소(BTA) 사전 통지(ADVN) 회로(900)를 도시한다. BTA ADVN 회로(900)는 도 2의 프로세서 컴플렉스(200)의 프로세서 파이프라인(202) 및 제어 회로(206)와 연관되며, 제 2 간접 브랜치 ADVN 프로세스(850)에 따라 동작한다. 제 2 간접 BTA ADVN 회로(900)는 디코드 회로(902), 검출 회로(904), 사전 통지(ADVN) 회로(906) 및 정정 회로(908)로 구성되는데, 회로들 사이에 기본 제어 신호 경로들이 도시된다. ADVN 회로(906)는 결정 회로(910), 트랙 1 회로(912) 및 최신 BTA 회로(914)를 포함한다. 정정 회로(908)는 트랙 2 회로(920) 및 정확한 파이프 회로(922)를 포함한다.
디코드 회로(902)는 도 2의 명령 페치 스테이지(214)로부터의 인입 명령들을 디코딩한다. 검출 회로(904)는 간접 브랜치 명령에 대하여 또는 Rm 변경 명령에 대하여 디코딩된 명령들을 모니터링한다. 제 1 시간 동안 간접 브랜치 명령을 검출할 시에, ADVN 회로(906)는 새로운 타겟 트래킹 테이블(TTT) 엔트리, 이를테면, 도 8a의 TTT 엔트리(802)를 설정하며, 도 8b의 블록(870)에서 설명되는 바와 같은 검출된 간접 브랜치 명령에 의해 특정되는 브랜치 타겟 주소(BTA) 레지스터를 식별한다. 유효 TTT 엔트리 및 매칭 Rm 값과 연관된 Rm 변경 명령을 검출할 시에, 업/다운 카운터 값(808)은 증분되고, Rm 변경 명령이 실행될 때, 업/다운 카운터 값(808)은 블록(862)에 따라 감소된다. 간접 브랜치 명령의 연속적인 검출 시에, ADVN 회로(906)는 도 8b의 블록들(872-878)에 의해 설명되는 동작들을 따른다. 정정 회로(908)는 부정확한 BTA 사전 통지 상에서 파이프라인을 플러쉬한다.
ADVN 회로(906)에서, 최신 BTA 회로(914)는, 예를 들어, BX R0 명령(607)과 같은 간접 브랜치 명령에 대한 BTA의 사전 통지를 제공하기 위해서, 도 8a의 TTT 엔트리(802)와 같은 TTT 엔트리를 사용한다. ADVN BTA는 예측 실행을 위한 ADVN BTA에서 시작하는 명령들을 페치하기 위해서 프로세서 파이프라인(202)을 방향 수정하는데 사용될 수 있다.
정정 회로(908)에서, 트랙 2 회로(920)는 BX R0 명령(607)의 실행 상태에 대한 프로세서 파이프라인(202)의 실행 스테이지(222)를 모니터링한다. ADVN BTA가 정확하게 제공되었을 경우, 예측 페치된 명령들은 프로세서 파이프라인에서 지속하도록 허용된다. ADVN BTA가 정확하게 제공되지 않았을 경우, 예측 페치된 명령들은 프로세서 파이프라인으로부터 플러쉬되고, 파이프라인은 정확한 명령 시퀀스로 다시 방향 수정된다. 또한, 검출 회로(904)는 부정확한 ADVN 상태를 통지받고, 이러한 상태에 응답하여, 사전 통지를 위한 이러한 특정 간접 브랜치 명령을 식별하는 것을 중단하도록 프로그램화될 수 있다. 또한, ADVN 회로(906)는 부정확한 ADVN 상태를 통지받고, 이러한 상태에 응답하여, 단지 TTT(800)의 특정 엔트리들에 대한 사전 통지를 허용하도록 프로그램화될 수 있다.
도 9b는 본 발명에 따른 예시적인 제 3 간접 브랜치 타겟 주소(BTA) 사전 통지(ADVN) 회로(950)를 도시한다. 제 3 간접 BTA ADVN 회로(950)는 다음 프로그램 카운터(PC) 회로(952), 디코드 회로(954), 실행 회로(956) 및 타겟 트래킹 테이블(TTT) 회로(958)를 포함하며, 디코드 회로(954)로 포워딩되는 명령을 페치하기 위해서 명령 캐쉬, 이를테면, 도 2의 L1 명령 캐쉬(208)를 어드레싱하는 양상들을 도시한다. 제 3 간접 BTA ADVN 회로(950)는 제 2 간접 브랜치 ADVN 프로세스(850)에 따라 동작한다. 예를 들어, 디코드 회로(954)는 BX 명령 또는 Rm 변경 명령과 같은 간접 브랜치를 검출하고, BX 명령 또는 Rm 변경 명령이 검출되어 적절한 정보, 이를테면, BX 명령의 Rm 값을 공급함을 TTT 회로(958)에 통지한다. 또한, TTT 회로(958)는 업/다운 카운터 값(808)을 제공하기 위해서 도 8b의 블록(862)에서 설명되는 바와 같이 증가하거나 또는 감소하는 업/다운 카운터를 포함한다. 실행 회로(956)는 Rm 변경 명령의 실행 시에 Rm 데이터 값 및 감소 표시를 제공한다. 또한, 실행 회로(956)는 사전 통지의 성공 또는 실패의 상태에 의존하여 브랜치 정정 주소를 제공한다. 블록(876)에서 설명되는 바와 같이, TTT 회로(958)에서의 엔트리가 선택되고, 선택된 엔트리의 Rm 데이터 필드는 타겟 주소의 일부로서 다음 PC 회로(952)로 공급된다.
도 10a는 본 발명에 따른 간접 브랜치 타겟 주소의 사전 통지를 결정하기 위한 소프트웨어 코드 프로파일링 방법을 사용하는 방식에 대한 코드 예(1000)이다. 코드 시퀀스(1001-1007)에서, 명령들 A(1001), B(1003), C(1004) 및 D(1005)은 이전에 설명된 바와 동일하고, 따라서 브랜치 타겟 주소 레지스터에 영향을 주지 않는다. 명령(1002)은 Move R0, TargetA 명령(1002)이며, 이는 값을 TargetA로부터 레지스터 R0로 무조건적으로 이동시킨다. 명령(1006)은 조건적 Move R0, TargetB 명령(1006)이며, 이는 시간의 대략 10%를 조건적으로 실행한다. 명령 실행을 결정하기 위해서 사용되는 조건들은 명령 세트 아키텍처에서 전형적으로 특정되는 바와 같은 다양한 산술, 로직 및 다른 기능 명령들의 실행에서 프로세서에 의해 세팅되는 조건 플래그들로부터 전개될 수 있다. 이러한 조건 플래그들은, 또한 프로그램 상태 레지스터의 일부일 수 있는 제어 로직(206)에 위치된 조건 코드(CC) 레지스터 또는 프로그램 판독가능 플래그 레지스터에 저장될 수 있다. 간접 브랜치 명령 BX R0(1007)는 도 4a 및 도 4b의 이전의 예들에서 사용되는 바와 동일하다.
코드 예(1000)에서, 조건적 move R0, targetB 명령(1006)은 그것이 실행되는지 또는 아닌지에 따라 BTA 레지스터 R0에 영향을 미칠 수 있다. 2개의 가능한 상황들은 다음 표에 도시되는 바와 같이 고려된다:

라인

Move R0, TargetA

조건적 Move R0, TargetB

1

실행

NOP

2

실행

실행
코드 시퀀스(1000)에서, 간접 BTA에 영향을 줄 수 있는 마지막 명령은 조건적 move R0, targetB 명령(1006)이고, 이것이 실행되는 경우, move R0, targetA 명령(1002)의 결과인 상기 테이블에서의 라인 2는 실행되는 조건적 move R0, target B 명령(1006)의 결과에 의해 오버라이팅될 것이다. 도 10b의 코드 시퀀스(1050)에 도시되는 바와 같이, 프로파일링 컴파일러와 같은 소프트웨어 코드 프로파일링 툴은, move R0, targetA 명령(1052) 직후 의존하지 않고 실행하기 위해서 제 1 포맷으로 인코딩되는 ADVN R0 명령(1053), 이를테면, 도 3a의 ADVN 명령(300)을 삽입할 수 있다. 제 1 포맷 ADVN R0 명령(1053)이 실행 스테이지에 입력될 때, 그때의 타겟 주소 레지스터 R0의 값은 예측 페칭이 시간의 대략 90%를 정정하게 하도록 허용할 수 있는 BX R0 명령에 대한 간접 주소로서 사용된다.
대안적으로, ADVN R0 명령(1053)은 ADVN R0 명령, 이를테면, Cond move R0, target 명령(1057)을 따르는 조건적 타겟 주소 변경 명령에 따라 자신의 실행을 포즈(pause)하기 위해서 인코딩될 수 있다. 포즈 인코딩된 ADVN R0 명령(1053)이 실행 스테이지에 입력될 때, 그때의 타겟 주소 레지스터 R0의 값은 결정되지 않고, 간접 브랜치 명령이 당면될 때 예측 페칭은 조건적 타겟 주소 변경 명령이 실행될 때까지 포즈된다. 조건적 타겟 주소 변경 명령이 타겟 주소를 수정하는 경우, 업데이트된 간접 브랜치 타겟 주소가 예측 페치를 위해서 사용된다. 타겟 주소 변경 명령이 타겟 주소를 수정하지 않는 경우, R0에 저장된 최근 간접 브랜치 타겟 주소 값이 예측 페치를 위해서 사용된다. ADVN 명령 포맷(300) 내의 조건 코드 필드(304) 또는 다른 비트 필드들이 ADVN 명령의 이러한 동작들을 인코딩하기 위해서 사용될 수 있다는 점이 주목된다. 조건적 move R0, target 명령(1057)의 실행 비율들이 90%가 실행되지 않고 10%가 실행된 경우, 의존하지 않고 실행하기 위해서 ADVN R0 명령(1053)을 인코딩하는 것이 유리할 수 있는데, 그 이유는 이러한 상황의 경우, ADVN R0 명령(1053)이 성능을 유리하게 향상시키기 위해서 간접 브랜치 명령(1058) 전에 프로그램 명령 스트림에 충분히 일찍 배치될 수 있기 때문이다. 대안적으로, 실행 비율들이 상이한 것으로 예상되는 경우, 예를 들어, 50% 대 50%의 경우, ADVN R0 명령을 따르는 조건적 타겟 주소 변경 명령으로부터의 결과를 결정하는 것에 의존하여 ADVN RO 명령의 실행을 포즈하기 위해서 ADVN R0 명령을 인코딩하는 것이 더 유리할 수 있다.
대안적으로, 제 2 간접 BTA ADVN 회로(900)는 레지스터 R0에 영향을 미치는 마지막 명령에 자동으로 응답한다. 예를 들어, 시간의 90%에서, move R0, targetA 명령(1002)의 결과들이 사용되고, 시간의 10%에서, 조건적 move R0, target 명령(1006)의 결과들이 사용된다. 90% 및 10%의 실행 비율들은 예시적이며, 다른 프로세서 동작들에 의해 영향을 받을 수 있다는 점이 주목된다. 부정확한 사전 통지의 경우, 도 9a의 정정 회로(908)는 부정확한 사전 통지에 응답하여 동작할 수 있다.
본 발명이 프로세서 시스템들에서의 사용을 위해서 예시적인 실시예들의 맥락에서 개시되지만, 상기 논의 및 후술하는 청구범위와 일관하는 폭 넓고 다양한 구현들이 당업자들에 의해 사용될 수 있다는 것이 인지될 것이다. 예를 들어, 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한, 제 2 간접 BTA ADVN 회로(900)와 같은 자동 간접-타겟 추론 방법 및 ADVN 명령 방식 둘 다가 함께 사용될 수 있다. ADVN 명령은 프로파일링 컴파일러와 같은 소프트웨어 툴 또는 프로그래머에 의해 코드 시퀀스에서 삽입될 수 있으며, 여기서 이러한 소프트웨어 방식을 사용하여 간접 브랜치 타겟 주소 통지의 고 신뢰도가 획득될 수 있다. 자동 간접-타겟 추론 방법 회로는 ADVN 명령을 가지는 코드 시퀀스를 위한 ADVN 명령의 검출 시에 오버라이팅된다.

Claims (23)

  1. 프로그램의 순차적 흐름을 변경하기 위한 방법으로서,
    제 1 명령에 의해 식별된 레지스터로부터 프로그램 특정 타겟 주소를 리트리브(retrieve)하는 단계 ― 상기 레지스터는 명령 세트 아키텍처에서 정의됨 ―;
    제 2 명령이 당면된(encountered) 이후, 실행의 예측(speculative) 흐름을 상기 프로그램 특정 타겟 주소로 변경하는 단계 ― 상기 제 2 명령은 간접 브랜치 명령으로 동적으로 결정됨 ―; 및
    상기 간접 브랜치 명령으로부터 적어도 N개의 프로그램 명령들 이전 코드 시퀀스에 상기 제 1 명령을 삽입하는 단계를 포함하고,
    상기 N개의 프로그램 명령들은, 상기 간접 브랜치 명령을 수신하는 파이프라인 스테이지와 상기 제 1 명령에 의해 식별된 레지스터를 인지하는 파이프라인 스테이지 사이의 파이프라인 스테이지들의 수에 대응하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  2. 제 1 항에 있어서,
    상기 간접 브랜치 명령은, 상기 제 1 명령 이후 다음의 당면되는 간접 브랜치 명령인,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  3. 제 1 항에 있어서,
    상기 간접 브랜치 명령은, 상기 제 1 명령에 의해 식별된 레지스터와 매치하는 타겟 레지스터를 특정하는 다음의 당면되는 간접 브랜치 명령인,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  4. 삭제
  5. 제 1 항에 있어서,
    상기 간접 브랜치 명령을 수신하는 파이프라인 스테이지는 페치(fetch) 스테이지이고, 그리고
    상기 제 1 명령에 의해 식별된 레지스터를 인지하는 파이프라인 스테이지는 실행 스테이지인,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  6. 제 1 항에 있어서,
    대응하는 다수의 간접 브랜치 명령들에 당면하기 전에 다수의 사전 통지(ADVN: advance notice) 명령들을 수신하는 단계 ― 상기 제 1 명령은 ADVN 명령임 ― ; 및
    선입 선출(first-in-first-out) 스택을 이용하여 상기 다수의 ADVN 명령들 및 당면된 대응하는 다수의 간접 브랜치 명령들 사이의 대응성(correspondence)을 트래킹하는 단계를 더 포함하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  7. 제 1 항에 있어서,
    브랜치 타겟 주소 레지스터에 저장된 값이 유효 명령 주소임을 결정하는 단계; 및
    페치할 다음 명령 주소를 식별하기 위해서 상기 간접 브랜치 명령을 디코딩할 때 상기 브랜치 타겟 주소 레지스터로부터 상기 값을 선택하는 단계를 더 포함하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  8. 제 1 항에 있어서,
    브랜치 타겟 주소를 결정하기 위해서 상기 간접 브랜치 명령을 실행하는 단계;
    결정된 브랜치 타겟 주소를 상기 프로그램 특정 타겟 주소와 비교하는 단계; 및
    상기 결정된 브랜치 타겟 주소가 상기 프로그램 특정 타겟 주소와 동일하지 않을 때 프로세서 파이프라인을 플러쉬(flush)하는 단계를 더 포함하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  9. 제 1 항에 있어서,
    상기 제 1 명령이 당면된 이후 브랜치 예상 회로를 오버라이딩(override)하는 단계를 더 포함하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  10. 제 1 항에 있어서,
    코드의 섹션의 실행 동안 당면된 브랜치들을 트래킹하기 위해서 이용되는 하드웨어 자원들을 구비한 브랜치 이력 예상 회로를 가지는 프로세서 파이프라인에서 NOP(no operation)로서 상기 제 1 명령을 처리하는 단계; 및
    상기 브랜치 이력 예상 회로에 이용가능한 상기 하드웨어 자원들을 초과하는 코드의 섹션들에 대한 상기 제 1 명령을 인에이블(enable)하는 단계를 더 포함하는,
    프로그램의 순차적 흐름을 변경하기 위한 방법.
  11. 간접 브랜치 주소의 사전 통지를 제공하기 위한 방법으로서,
    명령들의 시퀀스의 타겟 주소 변경 명령에 의해 생성된 최신 타겟 주소를 식별하기 위해서 상기 명령들의 시퀀스를 분석하는 단계;
    상기 최신 타겟 주소를 이용하는 간접 브랜치 명령이 예측 실행되기 전에 상기 최신 타겟 주소에 기초하여 다음 프로그램 주소를 준비하는 단계; 및
    상기 명령들의 시퀀스에서의 상기 타겟 주소 변경 명령을 상기 간접 브랜치 명령으로부터 적어도 N개의 프로그램 명령들 이전인, 상기 명령들의 시퀀스에서의 위치로 이동시키는 단계를 포함하고,
    N은 상기 간접 브랜치 명령을 수신하는 파이프라인 스테이지와 상기 타겟 주소 변경 명령에 의해 식별된 레지스터를 인지하는 파이프라인 스테이지 사이의 파이프라인 스테이지들의 수에 대응하는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  12. 제 11 항에 있어서,
    코드의 섹션을 통하는 제 1 패스(pass) 상에서 상기 간접 브랜치 명령의 타겟 주소 레지스터를 자동으로 식별하는 단계를 더 포함하고,
    식별된 타겟 주소 레지스터는, 상기 명령에 의해 생성된 상기 최신 타겟 주소를 자동으로 식별하기 위해서 사용되는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  13. 제 11 항에 있어서,
    상기 다음 프로그램 주소는, 상기 간접 브랜치 명령이 디코딩될 때 준비되는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  14. 삭제
  15. 제 11 항에 있어서,
    상기 간접 브랜치 명령을 수신하는 파이프라인 스테이지는 페치 스테이지이고, 그리고
    상기 타겟 주소 변경 명령에 의해 식별된 레지스터를 인지하는 파이프라인 스테이지는 실행 스테이지인,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  16. 제 11 항에 있어서,
    상기 간접 브랜치 명령에 의해 특정된 타겟 주소 레지스터 엔트리에서 상기 최신 타겟 주소를 생성했던 상기 명령의 명령 주소를 제 1 테이블에 로딩하는 단계를 더 포함하는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  17. 제 16 항에 있어서,
    상기 명령 주소에서 유효 비트들의 연상 메모리 내의 어서트(assert)된 유효 비트를 확인하는 단계; 및
    어서트된 유효 비트에 응답하여 브랜치 타겟 주소 레지스터에 상기 제 1 테이블에 의해 식별된 명령을 실행하는 것으로부터 발생하는 값을 로딩하는 단계를 더 포함하는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  18. 제 17 항에 있어서,
    상기 브랜치 타겟 주소 레지스터에 저장된 값을 사용하여 상기 브랜치 타겟 주소를 제공하는 단계를 더 포함하는,
    간접 브랜치 주소의 사전 통지를 제공하기 위한 방법.
  19. 간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치로서,
    프로그램에 의해 특정된 명령 메모리 주소를 간접 브랜치 명령의 사전 통지(ADVN) 간접 주소로서 홀드(hold)하기 위한 레지스터;
    상기 레지스터를 타겟으로 하는 명령들을 모니터링하며, 모니터링된 명령들에 기초하여, 상기 간접 브랜치 명령에 당면하기 전에, 상기 간접 브랜치 명령을 예측 실행할 때 다음 프로그램 주소로서 사용하기 위해서, 최신 타겟 주소를 상기 레지스터로부터의 상기 ADVN 간접 주소로서 선택하는 다음 프로그램 주소 선택기 회로; 및
    상기 간접 브랜치 명령을 수신하는 스테이지와 상기 최신 타겟 주소를 인지하는 스테이지 사이의 N개의 스테이지들을 가지는 프로세서 파이프라인을 포함하고,
    상기 다음 프로그램 주소 선택기 회로는, 상기 간접 브랜치 명령으로부터 적어도 N개의 스테이지들 이전에 상기 ADVN 간접 주소를 선택하는,
    간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치.
  20. 제 19 항에 있어서,
    상기 레지스터에 저장될 브랜치 타겟 주소를 식별하기 위해서 프로그램 명령들을 디코딩하기 위한 디코더를 더 포함하는,
    간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치.
  21. 삭제
  22. 제 19 항에 있어서,
    상기 간접 브랜치 명령을 수신하는 스테이지는 페치 스테이지이고,
    상기 최신 타겟 주소를 인지하는 스테이지는 실행 스테이지인,
    간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치.
  23. 제 19 항에 있어서,
    상기 ADVN 간접 주소는, 상기 간접 브랜치 명령의 브랜치 타겟 주소에 영향을 미치는 현재 실행 사이클 이전에 상기 프로그램의 명령들의 실행 상태를 저장하는 트래킹 테이블에 기초하는,
    간접 브랜치 타겟 주소의 사전 통지를 제공하기 위한 장치.
KR1020137002326A 2010-06-28 2011-06-28 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치 KR101459536B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/824,599 2010-06-28
US12/824,599 US20110320787A1 (en) 2010-06-28 2010-06-28 Indirect Branch Hint
PCT/US2011/042087 WO2012006046A1 (en) 2010-06-28 2011-06-28 Methods and apparatus for changing a sequential flow of a program using advance notice techniques

Publications (2)

Publication Number Publication Date
KR20130033476A KR20130033476A (ko) 2013-04-03
KR101459536B1 true KR101459536B1 (ko) 2014-11-07

Family

ID=44352092

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137002326A KR101459536B1 (ko) 2010-06-28 2011-06-28 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치

Country Status (6)

Country Link
US (1) US20110320787A1 (ko)
EP (1) EP2585908A1 (ko)
JP (4) JP5579930B2 (ko)
KR (1) KR101459536B1 (ko)
CN (1) CN102934075B (ko)
WO (1) WO2012006046A1 (ko)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
WO2013015835A1 (en) 2011-07-22 2013-01-31 Seven Networks, Inc. Mobile application traffic optimization
WO2013147879A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Dynamic branch hints using branches-to-nowhere conditional branch
US20130346727A1 (en) * 2012-06-25 2013-12-26 Qualcomm Incorporated Methods and Apparatus to Extend Software Branch Target Hints
CN103513957B (zh) * 2012-06-27 2017-07-11 上海芯豪微电子有限公司 高性能缓存方法
US9652245B2 (en) 2012-07-16 2017-05-16 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Branch prediction for indirect jumps by hashing current and previous branch instruction addresses
GB201300608D0 (en) * 2013-01-14 2013-02-27 Imagination Tech Ltd Indirect branch prediction
CN103984637A (zh) * 2013-02-07 2014-08-13 上海芯豪微电子有限公司 一种指令处理系统及方法
GB2506462B (en) 2013-03-13 2014-08-13 Imagination Tech Ltd Indirect branch prediction
CN103218205B (zh) * 2013-03-26 2015-09-09 中国科学院声学研究所 一种循环缓冲装置以及循环缓冲方法
CA2926198A1 (en) 2013-11-27 2015-06-04 David HUA Systems and methods for revising permanent rom-based programming
US9286073B2 (en) * 2014-01-07 2016-03-15 Samsung Electronics Co., Ltd. Read-after-write hazard predictor employing confidence and sampling
US10497473B2 (en) 2014-11-19 2019-12-03 Abbott Diabetes Care Inc. Systems, devices, and methods for revising or supplementing ROM-based RF commands
US9830162B2 (en) * 2014-12-15 2017-11-28 Intel Corporation Technologies for indirect branch target security
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US9208066B1 (en) * 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US10169039B2 (en) 2015-04-24 2019-01-01 Optimum Semiconductor Technologies, Inc. Computer processor that implements pre-translation of virtual addresses
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
GB2551548B (en) * 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
US20180081690A1 (en) * 2016-09-21 2018-03-22 Qualcomm Incorporated Performing distributed branch prediction using fused processor cores in processor-based systems
US11150908B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884745B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10884747B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US11150904B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10908911B2 (en) * 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
GB2573119A (en) * 2018-04-24 2019-10-30 Advanced Risc Mach Ltd Maintaining state of speculation
JP7158208B2 (ja) 2018-08-22 2022-10-21 エルジー ディスプレイ カンパニー リミテッド 電気流体ディスプレイ装置及び複合ディスプレイ装置
US10846097B2 (en) * 2018-12-20 2020-11-24 Samsung Electronics Co., Ltd. Mispredict recovery apparatus and method for branch and fetch pipelines
CN110347432B (zh) * 2019-06-17 2021-09-14 海光信息技术股份有限公司 处理器、分支预测器及其数据处理方法、分支预测方法
CN110764823B (zh) * 2019-09-02 2021-11-16 芯创智(北京)微电子有限公司 一种指令流水线的回路控制系统及方法
CN112540794A (zh) * 2019-09-20 2021-03-23 阿里巴巴集团控股有限公司 处理器核、处理器、装置和指令处理方法
CN111008625B (zh) * 2019-12-06 2023-07-18 建信金融科技有限责任公司 一种地址校正方法、装置、设备及存储介质
US11294684B2 (en) 2020-01-31 2022-04-05 Apple Inc. Indirect branch predictor for dynamic indirect branches
US11379240B2 (en) 2020-01-31 2022-07-05 Apple Inc. Indirect branch predictor based on register operands

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080307210A1 (en) 2007-06-07 2008-12-11 Levitan David S System and Method for Optimizing Branch Logic for Handling Hard to Predict Indirect Branches

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04225429A (ja) * 1990-12-26 1992-08-14 Nec Corp データ処理装置
JP3730252B2 (ja) * 1992-03-31 2005-12-21 トランスメタ コーポレイション レジスタ名称変更方法及び名称変更システム
TW455814B (en) * 1998-08-06 2001-09-21 Intel Corp Software directed target address cache and target address register
US6611910B2 (en) * 1998-10-12 2003-08-26 Idea Corporation Method for processing branch operations
US7752423B2 (en) * 2001-06-28 2010-07-06 Intel Corporation Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
WO2003003195A1 (en) * 2001-06-29 2003-01-09 Koninklijke Philips Electronics N.V. Method, apparatus and compiler for predicting indirect branch target addresses
US7065640B2 (en) * 2001-10-11 2006-06-20 International Business Machines Corporation System for implementing a diagnostic or correction boot image over a network connection
US7624254B2 (en) * 2007-01-24 2009-11-24 Qualcomm Incorporated Segmented pipeline flushing for mispredicted branches
US8555040B2 (en) * 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080307210A1 (en) 2007-06-07 2008-12-11 Levitan David S System and Method for Optimizing Branch Logic for Handling Hard to Predict Indirect Branches

Also Published As

Publication number Publication date
US20110320787A1 (en) 2011-12-29
WO2012006046A1 (en) 2012-01-12
JP5579930B2 (ja) 2014-08-27
JP2014194799A (ja) 2014-10-09
JP2014222529A (ja) 2014-11-27
JP2016146207A (ja) 2016-08-12
EP2585908A1 (en) 2013-05-01
CN102934075A (zh) 2013-02-13
JP5917616B2 (ja) 2016-05-18
JP2013533549A (ja) 2013-08-22
CN102934075B (zh) 2015-12-02
KR20130033476A (ko) 2013-04-03

Similar Documents

Publication Publication Date Title
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
EP2864868B1 (en) Methods and apparatus to extend software branch target hints
JP5059623B2 (ja) プロセッサ及び命令プリフェッチ方法
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
US20180107485A1 (en) Energy-focused compiler-assisted branch prediction
US7685410B2 (en) Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
US6263427B1 (en) Branch prediction mechanism
JP2001147807A (ja) 改良された分岐制御命令を利用するためのマイクロプロセッサ、分岐目標命令メモリ、命令ロード制御回路、パイプラインへの命令供給維持方法、分岐制御メモリ、およびプロセッサ
JP5745638B2 (ja) 分岐命令の中に符号化されたバイモーダル分岐予測子
CN115495155B (zh) 一种适用于通用处理器的硬件循环处理装置
US9710269B2 (en) Early conditional selection of an operand
US10235173B2 (en) Program code optimization for reducing branch mispredictions

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
LAPS Lapse due to unpaid annual fee