KR101048178B1 - 링크 스택 회로를 정정하는 방법 및 장치 - Google Patents

링크 스택 회로를 정정하는 방법 및 장치 Download PDF

Info

Publication number
KR101048178B1
KR101048178B1 KR1020087023641A KR20087023641A KR101048178B1 KR 101048178 B1 KR101048178 B1 KR 101048178B1 KR 1020087023641 A KR1020087023641 A KR 1020087023641A KR 20087023641 A KR20087023641 A KR 20087023641A KR 101048178 B1 KR101048178 B1 KR 101048178B1
Authority
KR
South Korea
Prior art keywords
link stack
return address
address value
procedure
procedure return
Prior art date
Application number
KR1020087023641A
Other languages
English (en)
Other versions
KR20080102251A (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 KR20080102251A publication Critical patent/KR20080102251A/ko
Application granted granted Critical
Publication of KR101048178B1 publication Critical patent/KR101048178B1/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
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/30054Unconditional 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/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
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect 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/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
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

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

Abstract

프로세서에 있는 링크 스택은 프로시저 리턴 어드레스 오류예측 에러에 응답하여 정정된다. 일 예에서, 프로세서에서 사용하기 위한 링크 스택은, 상기 링크 스택으로부터 검색된 프로시저 리턴 어드레스 값에 있는 에러를 검출하고, 상기 에러 검출에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵함으로써 정정된다. 하나 이상의 실시예들에 있어서, 링크 스택 회로는 링크 스택 및 링크 스택 포인터를 포함한다. 상기 링크 스택은 복수의 프로세서 리턴 어드레스 값들을 저장하도록 구성된다. 상기 링크 스택 포인터는 상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된다.

Description

링크 스택 회로를 정정하는 방법 및 장치{METHOD AND APPARATUS FOR REPAIRING A LINK STACK}
본 발명은 일반적으로는 프로세서들에 관한 것이며, 구체적으로는 프로세서에서 링크 스택 리턴 에러들을 정정하는 것에 관한 것이다.
일반적인 프로세서들은 성능을 개선하기 위해 명령 프리페치(prefetching) 및 불확실한(speculative) 명령 실행을 사용한다. 불확실한 명령 페칭은 명령 파이프라인에서 초기에 브랜치 명령들의 방향 및 타겟 어드레스를 예측하기 위한 기술들을 사용하는 브랜치 예측 메커니즘들에 의해 인에이블된다. 상기 브랜치 명령들의 출력(outcome)을 예측함으로써, 프로세서 자원들은 상기 브랜치 결정들이 상기 명령 파이프라인의 더 아래방향으로 결정될 때까지 휴지시키는 것(혹은 단순히 미리 결정된 경로 아래쪽으로 페치(fetch)하는 것) 대신 명령들을 불확실하게 페치할 수 있다. 그 결과, 브랜치들이 올바르게 예측된다면 프로세서 성능은 개선될 수 있다.
프로시저 호출들 및 리턴(return)들에 관한 브랜치 명령들에 대해, 일반적인 프로세서들은 예측된 리턴 어드레스 값들을 저장하기 위해 링크 스택을 유지한다. 저장된 리턴 어드레스 값들은, 호출된 프로시저가 프로그램 제어를 포기(relinquish)한 후 페치될 다음 명령의 메모리 위치에 대응한다. 따라서, 프로세서가 브랜치 명령을 예측할 때, 일반적인 프로세서는 리턴 어드레스 값을 링크 스택으로 저장하거나 "푸시(push)"하여 프로시저 호출을 초래하고, 따라서, 상기 프로세서는 상기 호출된 프로시저가 리턴되는 경우 예측된 리턴 명령 스트림을 페치하기 시작할 수 있다. 프로세서가 프로시저 호출로부터 리턴을 검출하고 상기 리턴이 취해질 것을 예측하는 경우, 상기 프로세서는 상기 링크 스택으로부터의 검색을 위해 현재 대기된 상기 리턴 어드레스 값을 검색하거나 "팝핑(pop)"한다. 상기 팝핑된 리턴 어드레스 값과 연관된 명령은, 이제 상기 프로세서에 의해 메모리로부터 페치된다. 따라서, 링크 스택이 메커니즘에 제공되며, 이 메커니즘에 의해 프로시저 리턴들에 후속할 것으로 예측된 명령들은, 상기 프로시저 리턴 자체가 링크 스택에 저장된 상기 리턴 어드레스 값들을 사용하여 실행되기 전에 프로세서에 의해 불확실하게 페치될 수 있다.
그러나, 브랜치들이 항상 올바르게 예측되는 것은 아니다. 브랜치 예측오류가 발생하는 경우, 상기 프로세서는 상당한 성능 패널티(penalty)를 초래할 수 있다. 일반적으로, 브랜치 명령들은 예측된 브랜치가 명령 파이프라인의 단부에 가까운 결정과 매치하는지의 여부를 결정한다. 만약 브랜치가 올바르게 예측된다면, 명령 페치는 예측된 경로로 계속 내려간다(down). 그러나, 브랜치가 오류예측된다면, 불확실하게(speculatively) 페치된 명령들 및 이들의 결과가 상기 프로세서 파이프라인으로부터 플러쉬(flush)되고 명령 페치는 올바른 어드레스를 사용하여 리디렉션된다(redirect).
프로시저 리턴 명령들은 많은 방식으로 잘못 예측될 수 있다. 예를 들어, 링크 스택 오버플로우(overflow)는 리턴 어드레스 값들이 상기 스택에서 푸시되어 나가도록(pushed off) 한다. 따라서, 하나 이상의 유효 어드레스 값들이 상기 스택으로부터 유실되고, 따라서, 상기 관련된 프로시저 리턴이 상기 링크 스택으로부터 그 값을 팝핑하려고 시도하는 경우 예측 오류를 야기한다. 또한 조건부 프로시저 리턴들은 브랜치 방향을 잘못 예측할 수 있다. 추가적으로 프로시저 리턴들이 소프트웨어에 의해 고의로 스킵될 수 있다. 즉, 프로시저가 또다른 프로시저, 즉 내포된(nested) 프로시저 호출들을 호출할 수 있다. 특정 내포된 프로시저는, 그것을 호출한 상기 프로시저로 역으로 링크하는 것이 아니라 제어가 상기 프로시저로 리턴되는 경우 실행할 추가적인 명령들을 가지지 않을 수 있다. 따라서, 소프트웨어가 이러한 프로시저 리턴들을 스킵하고, 리턴될 때 실행할 실질적인 명령들을 가지는 프로시저들에게만 직접적으로 링크될 수 있으며, 따라서, 상기 코드의 성능을 개선할 수 있다. 이러한 최적화된 코드가 프로세서에 의해 실행되는 경우, 하나 이상의 내포된 프로시저가 스킵될 수 있다. 그러나 일반적인 하드웨어 링크 스택들은 상기 링크 스택에 저장된 어드레스 값들을 리턴하지 않는다. 따라서, 예측된 리턴 어드레스 값은, 프로시저 리턴이 중간 브랜치 및 링크 명령 없는 스킵된 프로시저 리턴 명령에 따라 상기 링크 명령을 팝핑하는 경우 일반적인 하드웨어 링크 스택을 사용하여 오류 예측될 것이다. 상기 팝핑된 값은 후속하는 리턴이 아닌 상기 스킵된 리턴과 연관되었다.
잘못 예측된 프로시저 리턴들을 정정하기 위한 일반적인 기술들은 몇몇 프로세서 사이클들을 소모한다. 예를 들어, 하드웨어 링크 스택으로부터 팝핑된 리턴 어드레스 값이 상기 결정된 어드레스와 매치하지 않는 경우, 정정 시퀀스가 상기 프로세서에 의해 수행된다. 오류예측 정정은 통상적으로, 파이프라인으로부터 불확실하게 페치된 명령들을 내보내는 것과 정정 명령 스트림을 페치하는 것을 수반한다. 그러나, 상기 하드웨어 링크 스택은 스킵된 리턴들에 대해 정정되지 않는다. 따라서, 팝핑된 다음 하드웨어 링크 스택 엔트리는 상기 정정 엔트리로부터 떨어진 적어도 하나의 위치(스킵된 리턴들의 수)에 항상 있다. 그 결과, 스킵된 리턴 전에 설정된 링크 스택 엔트리들과 연관된 후속적인 프로시저 리턴들은 추가적인 오류예측들을 야기할 것이다. 따라서, 일반적인 프로세서는 이들 오류들 가각에 대한 정정 시퀀스를 수행해야만 한다. 올바르지 않은 리턴 주소가 상기 하드웨어 링크 스택으로부터 팝핑될때마다 브랜치 정정 시퀀스를 수행하는 것은 프로세서 성능을 감소시키고, 예를 들어, 반한 어드레스 오류 예측 에러가 검출될 때마다 정정된 어드레스에서 명령들을 페치하기 위해 열 개 이상의 프로세서 사이클들을 소모함으로써 전력 소비를 증가시킨다.
본 명세서에서 교시된 방법들 및 장치에 따라 프로세서에 잇는 링크 스택이 프로시저 리턴 어드레스 오류예측 에러에 대한 응답으로 정정된다. 하나 이상이 실시예들에 있어서, 링크 스택 회로는 링크 스택 및 링크 스택 포인터를 포함한다. 상기 링크 스택은 복수의 프로시저 리턴 어드레스 값들을 저장하도록 구성된다. 상기 링크 스택 포인터는, 상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에서 검출된 에러에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된다.
그러므로, 적어도 하나의 실시예에 있어서, 프로세서에서 사용하기 위한 링크 스택은 상기 링크 스택으로부터 검출된 프로시저 리턴 어드레스 값에서 에러를 검출하고, 상기 에러를 검출하는데 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스를 스킵함으로써 정정된다. 일 예로, 검색에 대해 현재 대기된(queued) 상기 프로시저 리턴 어드레스 값을 스킵(skipping)하는 단계는 상기 에러를 검출하는데 응답하여 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 링크 스택 포인터(pointer)를 수정하는 것을 포함한다. 상기 링크 스택 포인터는 상기 에러를 야기한 상기 프로시저 리턴 어드레스 값에 대응하는 링크 스택 포인터 인덱스를 저장하고, 또한 상기 에러를 검출하는데 응답하여 두 링크 스택 엔트리 위치들만큼 오프셋된 상기 저장된 링크 스택 포인터 인덱스와 현재 링크 스택 포인터 인덱스를 교체함으로써 수정될 수 있다. 또다른 실시예에서, 검색에 대해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하는 단계는 상기 에러를 야기한 상기 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 링크 스택으로부터 팝핑(popping)하는 것, 및 상기 팝핑된 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레그 값으로부터 팝핑하는 것을 포함한다.
상기 장치들 및 방법들에 대응하여, 상보적인 프로세서는 링크 스택 및 명령 페치(fetch) 로직을 포함한다. 상기 링크 스택은 상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에서 검출된 에러에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된다. 상기 명령 페치 로직은 상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에서 검출된 에러에 응답하여 상기 링크 스택으로부터 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된다. 일 실시예에 있어서, 상기 링크 스택은 순환 버퍼를 포함한다. 상기 명령 페치 로직은 검색을 위해 대기된 프로시저 리턴 어드레스 값을 스킵하도록 링크 스택 포인터를 수정함으로써 순환 버퍼로부터의 검출을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된다. 또다른 실시예에서, 상기 링크 스택은 푸시-팝(push-pop) 버퍼를 포함한다. 상기 명령 페치 로직은 상기 에러를 야기한 상기 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 푸시-팝 버퍼로부터 팝핑하고, 상기 팝핑된 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 푸시-팝 버퍼로부터 팝핑함으로써, 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 구성된다.
물론, 본 발명은 상기 특징들에 제한되지 않는다. 본 발명이 속한 분야에서 통상의 지식을 가진 자라면, 후속하는 상세한 설명을 읽고, 첨부되는 도면들을 볼 때, 추가적인 특징들을 인지할 것이다.
도 1은 정정이능한 링크 스택을 포함하는 프로세서의 일 실시예를 예시하는 블록도.
도 2는 프로세서에 포함된 링크 스택을 정정하기 위한 프로그램 로직의 실시 예를 예시하는 논리 흐름도.
도 3은 프로세서에 포함된 링크 스택을 정정하기 위한 프로그램 로직의 또다른 실시예를 예시하는 논리 흐름도.
도 4는 프로세서에 포함된 링크 스택을 정정하기 위한 프로그램 로직의 또다른 실시예를 예시하는 논리 흐름도.
도 5는 정정 가능한 링크 스택을 사용하여 링크된 일련의 내포된 프로시저 리턴을 예시하는 프로그램 명령 흐름도.
도 6은 정정 가능한 링크 스택을 사용하여 도 5에서 예시된 상기 내포된 프로시저 리턴들의 링크해제(de-linking)를 예시하는 프로그램 명령 흐름도.
도 1은 예측된 리턴 어드레스 값들, 다시 말해, 프로시저 리턴에 후속한다고 예측되거나 기대된 명령이 저장되는 메모리 위치를 지정하거나 표시하는 어드레스 값을 저장하기 위한 링크 스택(12)을 포함하는 프로세서(10)의 실시예를 예시하한다. 상기 프로세서(10)는 컴퓨터 시스템(미도시) 예를 들어, 서버, 데스크톱 컴퓨터, 혹은 이동식 컴퓨터, 모바일 폰, PDA(개인용 휴대 정보 단말기) 등과 같은 이동 디바이스 내에 있는 중앙 혹은 메인 프로세싱 유닛으로서 역할을 한다. 상기 프로세서(10)는, 상기 프로세서(10)로 하여금 가능하게는 브랜치 예측 및 불확실한 명령 페칭을 포함하는, 특정 동작들을 취하게 하는 명령들의 컬렉션을 실행한다. 상기 링크 스택(12)은, 아래에서 더 상세히 설명되는 바와 같이, 많은 경우들에 있어서, 상기 링크 스택(12)으로부터의 검색을 위해 현재 큐잉(queue)된 리턴 어드레스 값을 스킵함으로써 리턴 어드레스 예측오류 에러에 응답하여 정정(repair)될 수 있다.
상기 프로세서(10)는 추가적으로, 명령 유닛(14), 복수의 실행 유닛들(16), 완료 유닛(18), 버스 인터페이스 유닛(20) 명령 및 데이터 캐시(22,24), 및 범용 레지스터들(40) 및 스택 포인터 레지스터들(42)을 포함하는 복수의 시스템 레지스터들(26)을 포함한다. 상기 명령 유닛(14)은 명령 흐름의 중앙 제어를 상기 실행 유닛들(16)로 제공한다. 하나 이상의 로드/저장 유닛들(미도시)을 포함할 수 있는 상기 실행 유닛들(16), 플로팅 포인트 유닛들(미도시), 및 정수 유닛들(미도시)는 동시에 복수의 명령들을 수행할 수 있다. 따라서, 상기 프로세서(10)는 수퍼스칼라(superscalar) 그리고/또는 수퍼파이프라인화(superpipelined)될 수 있다. 추가적으로, 하나 이상의 상기 실행 유닛들(16)은 예측된 브랜치들을 확정할 수 있다. 상기 완료 유닛(18)은 실행을 통해 디스페치로부터의 명령들을 트래킹한다. 상기 버스 인터페이스 유닛(20)은 전달 데이터, 어드레스들 및 상기 프로세서(10)로 및 상기 프로세서(10)로부터의 제어신호들을 메커니즘에 제공한다. 상기 명령 및 데이터 캐시(22,24)는 상기 시스템 레지스터들(26) 및 상기 실행 유닛들(16)로 하여금 명령들 및 데이터를 빨리 액세스할 수 있게 한다. 추가적으로 데이터는 상기 데이터 캐시(24)와 상기 시스템 레지스터들(26) 사이에서 상기 실행 유닛들(16), 예를 들어 로드/저장 유닛(미도시)를 통해 이동할 수 있다.
더 상세하게, 상기 명령 유닛(14)은 명령 페치 로직(28), 브랜치 예측 유닛(BPU)(30), 명령 큐(32), 명령 분배(dispatch) 로직(34) 및 브랜치 정보 큐(36)를 포함한다. 상기 링크 스택(12) 및 링크 스택 포인터(38)는 상기 명령 유닛(14)에 포함되거나 혹은 이와 연관된다. 상기 명령 페치 로직(28)은 상기 명령 캐시(22)로부터 명령들을 검색하고, 이 명령들을 디코딩하고, 상기 디코딩된 명령들을 상기 명령 큐(32)로 로딩한다. 상기 명령 분배 로직(34)은 대기된 명령들을 적절한 실행 유닛들(16)로 분배한다. 검출되는 브랜치의 타입에 따라, 상기 BPU(30)는 다양한 브랜치 예측 메커니즘들, 예를 들어 브랜치 타겟 어드레스들 혹은 특정 브랜치가 취해졌는지의 여부의 예측을 실행한다. 추가적으로, 상기 BPU(30)는 상기 BPU에 의해 위치된 브랜치 명령들에 관한 정보를 포함하는 브랜치 정보 큐(36)를 포함한다. 예를 들어, 상기 브랜치 정보 큐(36)는 특정 브랜치가 무조건적으로 취해졌는지에 대한 표시, 상기 예측된 타겟 어드레스, 상기 예측된 브랜치 방향등을 포함할 수 있다. 상기 브랜치 정보 큐(36)는 브랜치가 올바르게 예측되었는지의 여부, 혹은 그렇지 않다면, 명령 페치를 어디서 시작할지 그리고 브랜치 이력(history) 테이블(미도시)을 어떻게 업데이트 할 것인지를 결정하기 위해 상기 프로세서(10)에 의해 사용될 수 있다. 예를 들어, 상기 프로세서(10)는 브랜치가 올바르게 예측되었는지의 여부를 결정하기 위해 상기 브랜치 정보 큐(36)에 저장된 예측된 결과들과 하나 이상의 상기 실행 유닛들(16)에 의해 결정된 실제 결과들을 비교한다.
상기 명령 페치 로직(28)이, 본 명세서에서 "브랜치 및 링크 명령"으로 지칭되는, 프로시저 호출에 대한 브랜치 명령을 검색하는 경우, 상기 명령 페치 로직(28)은 상기 브랜치 및 링크 명령들에 후속하는 상기 시퀀스 명령의 어드레스를 상기 링크 스택(12)으로 푸시한다. 다음 시퀀스 명령 어드레스는 일반적으로, 프로시저 리턴 명령에 대한 리턴 어드레스로서 사용된다. 명령 페치 로직(28)에 의해 취해진 브랜치 및 링크 명령이 검출되고 예측될 때마다, 대응하는 리턴 어드레스값이 상기 링크 스택(12)으로 푸시된다. 따라서, 상기 링크 스택(12)은 일련의 체인화된 혹은 링크된 프로세서들과 연관된 예측된 리턴 어드레스값들의 체인을 포함한다. 만약 상기 링크 스택(12)이 순환(circular) 버퍼로서 구현된다면, 상기 명령 페치 로직(28) 역시, 가장 최근에 상기 링크 스택(12)으로 푸시된 리턴 어드레스 값에 대응하는 상기 링크 스택(12)에 있는 엔트리를 지정하는 인덱스 값으로 상기 링크 스택 포인터(38)를 업데이트한다. 따라서, 상기 링크 스택 포인터(38)는 검색을 위해 현재 대기된 링크 스택 엔트리를 지정한다. 일 예에서, 상기 링크 스택 포인터(38)는 상기 링크 스택(12)으로 푸시되는 새로운 어드레스 값에 응답하여 하나의 링크 스택 엔트리 위치의 등가만큼 포인터 인덱스를 증분시킴으로써 업데이트된다.
상기 명령 페치 로직(28)이, 본 명세서에서 "링크 명령에 대한 브랜치"로서 지칭되는, 프로시저 리턴에 관한 브랜치 명령을 검색하는 경우, 상기 명령 페치 로직(28)은 상기 링크 스택(12)으로부터의 검색을 위해 현재 대기된 상기 리턴 어드레스 값을 팝핑한다. 특히, 상기 링크 스택 포인터(38)에 의해 현재 표시되는 상기 리턴 어드레스 값은 상기 링크 스택(12)으로부터 팝핑되고, 예측된 리턴 어드레스에 위치된 명령은 상기 팝핑된 어드레스 값에 의해 표시된 메모리 위치로부터 페치된다. 예를 들어, 미리 예측된 리턴 어드레스에서 위치된 상기 명령은 상기 명령 캐시(22), 혹은 상기 팝핑된 리턴 어드레스 값에 대응하는 외부 메모리에 있는 에 있는 위치로부터 페치된다. 어드레스 값이 상기 링크 스택(12)으로부터 팝핑된 후, 상기 링크 스택 포인터(38)에 있는 포인터 인덱스는 상기 링크 스택(12)에 대기된 다음 리턴 어드레스 값을 지정하기 위해 감소한다.
링크 스택 포인터(38)는 상기 명령 유닛(14)에 포함되거나 혹은 이와 연관될 수 있다. 링크 스택 포인터(38)에 포함된 현재 포인터 인덱스는, 예를 들어, 상기 BPU(30)에 의해 브랜치 정보 큐(36)에, 링크 스택(12)으로부터 대응하는 리턴 어드레스 값을 팝핑하는 것과 연관하여 저장된다. 저장된 포인터 인덱스들은, 아래에서 상세하게 설명될 바와 같이, 리턴 어드레스 오류예측 에러가 발생한 이후 상기 링크 스택(12)을 정정하기 위해 후속적으로 사용된다. 일 예에서, 저장된 포인터 인덱스는 상기 브랜치 명령으로써 상기 파이프라인을 통해 이동한다. 또다른 예에서, 현재 포인터 인덱스는, 명령 정보, 예를 들어 예측된 브랜치 명령 혹은 상기 명령에 대한 관련 정보에 따라 브랜치 정보 큐(36)에 포인터 인덱스를 저장함으로써 대응하는 예측된 브랜치 명령과 연관된다.
또다른 실시예에서, 링크 스택(12)은, 저장된 리턴 어드레스 값들이, 새로운 어드레스값이 상기 링크 스택(12)으로 푸시되는 경우 각각 한 스폿씩 다운 시크트되고 어드레스 값이 상기 링크 스택으로부터 팝핑되는 경우 한 스폿씩 업 시프트되는 트루(true) 푸시-팝 버퍼(미도시)로서 구현된다. 따라서, 어떠한 링크 스택 포인터(38)도 요구되지 않는다. 대신, 리턴 어드레스 값들이 링크 명령들에 대한 브랜치에 응답하여 상기 링크 스택(12)으로 단순히 푸시되고, 링크 명령들에 대한 브랜치에 응답하여 상기 링크 스택(12)으로부터 팝핑된다.
상기 프로세서(10)가 리턴 어드레스 오류예측 에러를 검출하는 경우, 도 2의 단계(100)에서 예시된 바와 같이, 상기 프로세서(10)가 정정 시퀀스를 수행한다. 상기 프로세서(10)는 소프트웨어에 의해 스킵된 프로시저 리턴 및 스택 오버프로우와 같은 리턴 어드레서 예측 오류 에러들을 검출할 수 있다. 예측 오류 정정은 통상적으로, 상기 파이프라인으로부터 불확실하게 페치된 명령들을 내보내고 상기 올바른 명령 스트림을 페치하는 것을 수반한다. 리턴 어드레스 오류예측 에러를 검출하는 프로세서(10)에 응답하여, 상기 명령 페치 로직(28)은, 도 2의 단계(102)에 의해 예시된 바와 같이, 상기 링크 스택으로 하여금 검색을 위해 현재 대기중인 상기 리턴 어드레스 값을 스킵하게 함으로써 상기 링크 스택(12)을 정정한다. 소프트웨어가 프로시저 리턴을 스킵하는 경우에 있어서, 만약 상기 링크 스택(12)으로부터의 검색을 위해 현재 큐잉된 상기 리턴 어드레스 값이 스킵되지 않는다면, 리턴 어드레스 예측 오류 에러는, 어떠한 중간 브랜치 및 링크 명령들도 값이 상기 링크 스택으로 푸시되지 않게 하는 경우 어드레스가 상기 링크 스택(12)으로부터 팝핑된 다음에 자동으로 발생할 것이다. 상기 링크 스택(12)으로부터 검색을 위해 현재 큐잉된 어드레스 값이 스킵된 프로시저 리턴 명령에 대응하기 때문에 에러가 발생한다. 따라서, 하드웨어 링크 스택(12)으로부터의 검색을 위해 현재 대기된 어드레스 값을 스킵하는 것은 어드레스 예측 오류가 상기 소프트웨어의 프로시저 호출 및 리턴들의 체인으로 상기 링크 스택을 재-동기화(re-syncronizing)함으로써 다음 링크 스택 팝핑동안 일어날 가능성을 감소시킨다.
도 3은 상기 링크 스택(12)이 검색을 위해 현재 대기된 리턴 어드레스 값을 스킵하도록 하기 위한 프로그램 로직의 일 실시예를 도시하며, 여기서 상기 링크 스택(12)는 순환 버퍼를 포함한다. 리턴 어드레스 값이 상기 링크 스택(12)로부터 팝핑될 때마다, 상기 팝핑된 어드레스 값과 연관된 상기 링크 스택 포인터 인덱스(38)는 이전에 설명된 바와 같이(단계(104)) 저장된다. 따라서, 팝핑된 리턴 어드레스 값들과 연관된 링크 스택 포인터 인덱스들은 필요하다면 상기 링크 스택을 정정하기 위해 사용가능하다. 리턴 어드레스 오류예측 에러를 검출하는 상기 프로세서(10)에 응답하여, 상기 오류예측된 리턴 어드레스와 연관된 저장된 포인터는 상기 링크 스택(12)으로 하여금 검색을 위해 현재 큐잉된 상기 리턴 어드레스 값을 스킵하도록 함으로써 상기 링크 스택(12)을 정정하기 위해 상기 명령 페치 로직(28)에 의해 사용된다. 특히, 상기 명령 페치 로직(28)은 링크 스택 포인터(38)에 포함된 상기 현재 포인터 인덱스를 상기 두 링크 스택 엔트리 위치들만큼 오프셋된 상기 저장된 포인터 인덱스와 교체한다(단계(106)). 일 실시예에서, 상기 명령 페치 로직(28)은 두 링크 스택 엔트리 위치들만큼 상기 저장된 링크 스택 포인터 인덱스를 감소할 수 있는산술 로직 유닛(미도시) 혹은 가산기 회로(미도시)와 같은 로직 회로를 포함하거나 이 로직 회로에 액세스한다. 그 결과, 상기 오류예측 에러를 야기한 상기 어드레스 값으로부터 떨어진 두 엔트리 위치들에 저장된 상기 리턴 어드레스 값은 이제 상기 링크 스택(12)로부터의 검색을 위해 현재 대기되고, 이에 의해 후속하는 프로시저 리턴 어드레스 오류예측 에러의 가능성을 감소시킨다.
도 4는 상기 링크 스택(12)으로 하여금 검색을 위해 현재 대기된 리턴 어드레스 값을 스킵하도록 하는 프로그램 로직이 또다른 실시예를 예시하며, 여기서 상기 링크 스택(12)은 푸시-팝 버퍼를 포함한다. 오류예측된 리턴 어드레스값을 검출하는 상기 프로세서(10)에 응답하여, 상기 명령 페치 로직(28)은 상기 링크 스택(12)으로 하여금 현재 대기된 링크 스택 엔트리, 즉 상기 에러를 야기한 리턴 어드레스 값 바로 다음에 대기된 엔트리를 팝핑하도록 함으로써(단계 108) 상기 링크 스택(12)을 정정한다. 이후, 상기 명령 페치 로직(28)은 상기 링크 스택(12)으로 하여금, 바로 연속하는 리턴 어드레스 값을 팝핑하도록 한다. 따라서, 상기 링크 스택(12)은 두 연속적인 팝핑들을 수행하고, 따라서, 상기 오류예측된 어드레스 값 바로 다음에 검색을 위해 대기된 리턴 어드레스 값을 스킵한다. 상기 특정 링크 스택 구현과는 무관하게, 브랜치 정정 시퀀스 중 적어도 하나의 반목은 상기 링크 스택으로 하여금 오류예측된 어드레스 값 바로 다음의 검색을 위해 대기된 리턴 어드레스 값을 스킵하도록 함으로써 회피된다.
도 5는 몇몇 체인화된 혹은 링크된 리턴 어드레스 값들이 상기 링크 스택(12)으로 푸시되도록 하고 따라서 상기 링크 스택 포인터(38)가 업데이트되도록 하는 일련의 예시적인 프로그램 명령들을 포함한다. 예시적인 프로그램 흐름에 따라, 프로시저 A는 브랜치 및 링크 명령을 이용하여 프로시저 B를 호출한다(bl proc_b). 마찬가지로, 프로시저 B는 프로시저 C를 호출하고(bl proc_c), 프로시저 C는 프로시저 D를 호출하고(bl proc_d) 프로시저 D는 프로시저 E를 호출한다(bl proc_e). 종합하면, 프로시저 A에 내포되고 체인된 4 개의 프로시저 호출들이 존재한다. 따라서, 취해지도록 알려지거나 예측된 브랜치 및 링크 명령이 검출될 때마다, 대응하는 리턴 어드레스 값이 상기 링크 스택(12)으로 푸시되어 리턴 어드레스 예측, 예를 들어 addr_a, addr_b 등을 인에이블한다. 상기 링크 스택(12)으로 푸시된 각 리턴 어드레스는, 호출된 프로시저가 프로그램 제어, 예를 들어, return_a, return_b를 포기한 후 페치될 다음 명령의 메모리 위치에 대응하는 메모리 어드레스를 식별한다. 상기 링크 스택 포인터(38)는 각각의 예측되거나 알려진 취해진 브랜치 및 링크 명령에 응답하여 업데이트되고, 따라서 가장 최근에 푸시된 스택 어레이가 상기 링크 스택 포인터(38)에 의해 표시된다. 따라서, 프로시저 리턴 명령들의 체인과 연관된 일련의 어드레스들이 상기 링크 스택 포인터(38)를 사용하는 프로그램 순서로 상기 링크 스택(12)에 설정된다.
이러한 특정 예에 있어서, 프로시저 D가 프로시저 E를 호출한 이후, 프로시저 D는 링크 명령에 대한 브랜치에 대해서를 제외하고 실행을 위한 어떠한 명령들도 포함하지 않으며, 여기서, return_d는 링크 명령으로의 브랜치를 나타낸다. 링크 명령에 대한 브랜치는 프로시저 C에 대한 프로그램 제어를 단순히 복구한다. 따라서, 프로시저 E에 있는 최적화된 소프트웨어 코드는 링크 명령으로의 이러한 브랜치를 스킵할 수 있고(return_d), 프로시저 C에 대한 명령을 직접 리턴한다(return_c). 따라서, 프로시저 E와 연관된 링크 명령에 대한 브랜치가 결정되는 경우, 프로그램 제어는 프로시저 D가 아닌 프로시저 C로 직접 리턴하며, 프로시저 D와 연관된 프로시저 리턴 명령으로 하여금 프로시저 E에 있는 최적화된 코드에 의해 스킵되도록 할 것이다. 그러나, 상기 링크 스택(12)은 프로시저 리턴이 스킵되었음을 알지 못한다. 그 결과, 링크 스택(12)은, 다음 리턴과 연관된 어드레스(addr_c) 대신 상기 스킵된 리턴과 연관된 어드레스(addr_d)를 전달하며, 여기서 상기 소프트웨어는 상기 프로그램 명령을 리디렉션한다. 따라서, 리턴 어드레스 오류예측 에러는, 링크 스택 포인터(38)가 프로시저 D와 연관된 상기 리턴 어드레스 값이 상기 링크 스택(12)으로부터 팝핑되고 불확실하게 페치되도록 하는 경우 발생할 것이다.
도 6은 도 5에 예시된 예시적인 프로그램 명령들에 따라 링크 스택(12)으로 미리 푸시된 리턴 어드레스 값들이 상기 링크 스택(12)으로부터 팝핑되도록 하여, 오류예측 에러를 야기하는 일련의 예시적인 프로그램 명령들을 예시한다. 도 6에 있어서, 최적화된 코드에 의해 결정된 바와 같은 상기 실제 프로그램 경로는 실선들로 표시되는 반면, 상기 링크 스택(12)과 연관하여 상기 링크 스택 포인터(38)에 의해 예측된 바와 같은 리턴 경로는 점선들로 표시된다. 상기 브랜치가 프로시저 E의 단부에서 링크 명령을 만나면, 상기 링크 스택 포인터(38)는 프로시저 D(addr_D)와 연관된 리턴 어드레스 값을 지정한다. 따라서, addr_d는 상기 링크 스택(12)으로부터 팝핑되고 대응하는 명령(return_d)이 페치된다. 그러나, 프로시저 D와 연관된 상기 어드레스 값(addr_d)을 사용하는 것은 어드레스 오류예측 에러를 야기하는데 왜냐하면 상기 실제 어드레스는 프로시저 E에 있는 상기 최적화된 코드에 의해 지시된 바와 같이 프로시저 C와 연관된 리턴 어드레스 값(addr_c)이기 때문이다.
상기 어드레스 오류예측에 응답하여, 정정 시퀀스가 앞서 설명된 바와 같이 상기 프로세서(10)에 의해 수행된다. 종래 프로세서에 포함된 종래 링크 스택이 어드레스 오류예측에 응답하여 정정되지 않는 것이 이해된다. 따라서, 리턴 어드레스 값이 초기 어드레스 오류예측이 발생한 이후 종래 링크 스택으로부터 팝핑될때마다 정정 시퀀스가 수행된다. 즉, 종래 링크 스택이 어드레스 오류예측 에러들에 응답하여 수정되기 때문에 초기 어드레스 오류예측이 발생한 이후 엔트리가 상기 종래 링크 스택으로부터 후속적으로 팝핑될 때마다, 종래 링크 스택 포인터가 상기 잘못된 리턴 어드레스를 지정할 것이다. 따라서, 초기 어드레스 오류예측 이후, 종래 링크 스택으로부터 후속적으로 팝핑된 각 리턴 어드레스 값들은 상기 종래 프로세서로 하여금 정정 시퀀스를 실행하도록 하는데, 왜냐하면 상기 종래 링크 스택 포인터가 올바른 엔트리로부터 떨어진 적어도 하나의 링크 스택 엔트리를 지정하기 때문이다.
도 6으로 돌아가면, 상기 명령 페치 로직(28)은 상기 리턴 어드레스 오류예측 에러를 가지는 링크 명령으로의 브랜치와 연관된 상기 저장된 링크 스택 포인터 인덱스를 검색한다. 이후, 상기 명령 페치 로직(28)은 링크 스택 포인터(38)에 포함된 현재 링크 스택 포인터 인덱스를 두 링크 스택 엔트리 위치들에 의해 오프셋된 상기 저장된 링크 스택 포인터와 교체함으로써 상기 링크 스택(12)을 정정한다. 따라서, 프로시저 C가 결국 프로시저 B에 대한 제어를 리턴하는 경우, 상기 링크 스택 포인터(38)는 프로시저 C와 연관된 리턴 어드레스 값(addr_c)을 지정하지 않고, 대신 프로시저 B와 연관된 리턴 어드레스 값(addr_b)을 지정할 것이다. 따라서, 도 6에 예시된 예에서, 후속적인 리턴 어드레스 오류 예측 에러들이 방지된다.
상기 변경들 및 응용예들의 범위들을 숙지하면, 본 발명이 이전 설명에 한정되지 않으며 또한 첨부 도면들에 의해서도 제한되지 않는다는 점이 이해되어야 한 다. 대신, 본 발명은 후속하는 청구항들 및 이들의 법적 등가물들에 의해서만 한정된다.

Claims (20)

  1. 프로세서에서 사용하기 위해 링크 스택(stack)을 정정(repair)하는 방법으로서,
    상기 링크 스택으로부터 검색된 프로시저 리턴(procedure return) 어드레스 값에서 에러를 검출하는 단계; 및
    상기 에러를 검출하는 것에 응답하여 상기 링크 스택으로부터의 검색(retrieval)을 위해 현재 대기된(queued) 프로시저 리턴 어드레스 값을 스킵(skipping)하는 단계를 포함하고,
    상기 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하는 단계는 상기 에러를 검출하는 것에 응답하여 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 링크 스택 포인터(pointer)를 수정하는 단계를 포함하고,
    검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 상기 링크 스택 포인터를 수정하는 단계는
    상기 에러를 야기한 상기 프로시저 리턴 어드레스 값에 대응하는 링크 스택 포인터 인덱스를 저장(save)하는 단계; 및
    상기 에러를 검출하는 것에 응답하여 두 링크 스택 엔트리 위치들만큼 오프셋된 상기 저장된 링크 스택 포인터 인덱스로 현재 링크 스택 포인터 인덱스를 교체하는 단계를 포함하는,
    링크 스택을 정정하는 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 링크 스택 포인터 인덱스를 저장하는 단계는 상기 에러를 야기한 상기 프로시저 리턴 어드레스 값을 상기 링크 스택으로부터 팝핑(popping)하는 것과 연관하여 상기 링크 스택 포인터 인덱스를 저장하는 단계를 포함하는,
    링크 스택을 정정하는 방법.
  5. 제1항에 있어서,
    상기 저장된 링크 스택 포인터 인덱스를 상기 저장된 링크 스택 포인터 인덱스에 대응하는 브랜치 명령 정보와 연관시키는 단계를 추가적으로 포함하는,
    링크 스택을 정정하는 방법.
  6. 제1항에 있어서,
    상기 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하는 단계는
    상기 에러를 야기한 상기 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 링크 스택으로부터 팝핑(popping)하는 단계; 및
    상기 팝핑된 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 링크 스택으로부터 팝핑하는 단계를 포함하는,
    링크 스택을 정정하는 방법.
  7. 제1항에 있어서,
    상기 링크 스택으로부터 검색된 상기 프로시저 리턴 어드레스 값에서 에러를 검출하는 단계는 링크 스택 오버플로우 혹은 스킵된 프로그램 리턴을 검출하는 단계를 포함하는,
    링크 스택을 정정하는 방법.
  8. 프로세서로서,
    복수의 프로시저 리턴 어드레스 값들을 저장하도록 구성된 링크 스택; 및
    상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에서 검출된 에러에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된 명령 페치(fetch) 로직을 포함하고,
    상기 명령 페치 로직은 상기 검출된 에러에 응답하여 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 링크 스택 포인터를 수정함으로써 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 구성되고,
    상기 명령 페치 로직은, 상기 에러를 야기한 상기 프로시저 리턴 어드레스 값에 대응하는 링크 스택 포인터 인덱스를 저장하고, 상기 에러를 검출하는 것에 응답하여 두 링크 스택 엔트리 위치들만큼 오프셋된 상기 저장된 스택 포인터 인덱스로 현재 링크 스택 포인터 인덱스를 교체함으로써, 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 상기 링크 스택 포인터를 수정하도록 구성되는,
    프로세서.
  9. 제8항에 있어서,
    상기 링크 스택은 순환(circular) 버퍼를 포함하는,
    프로세서.
  10. 삭제
  11. 삭제
  12. 제8항에 있어서,
    상기 저장된 링크 스택 포인터 인덱스에 대응하는 명령 정보를 저장하고, 상기 저장된 링크 스택 포인터 인덱스와 상기 저장된 명령 정보를 연관시키도록 구성된 큐(queue)를 추가적으로 포함하는,
    프로세서.
  13. 제8항에 있어서,
    상기 링크 스택은 푸시-팝(push-pop) 버퍼를 포함하는,
    프로세서.
  14. 제13항에 있어서,
    상기 명령 페치 로직은, 상기 에러를 야기한 상기 프로시저 리턴 어드레스값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 푸시-팝 버퍼로부터 팝핑하고, 상기 팝핑된 프로시저 리턴 어드레스 값 바로 다음에 대기된 프로시저 리턴 어드레스 값을 상기 푸시-팝 버퍼로부터 팝핑함으로써, 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 구성되는,
    프로세서.
  15. 제8항에 있어서, 상기 검출된 에러는 링크 스택 오버플로우(overflow) 혹은 스킵된 프로그램 리턴을 포함하는,
    프로세서.
  16. 프로세서에서 사용하기 위한 링크 스택 회로로서,
    복수의 프로시저 리턴 어드레스 값들을 저장하도록 구성된 링크 스택; 및
    상기 링크 스택으로부터 이전에 검색된 프로시저 리턴 어드레스 값에서 검출된 에러에 응답하여 상기 링크 스택으로부터의 검색을 위해 현재 대기된 프로시저 리턴 어드레스 값을 스킵하도록 구성된 링크 스택 포인터를 포함하고,
    상기 링크 스택 포인터는, 상기 검출된 에러에 응답하여 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값 바로 다음에 저장된 프로시저 리턴 어드레스 값에 대응하는 상기 링크 스택의 엔트리를 지정(pointing)함으로써 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값을 스킵하도록 구성되고,
    상기 링크 스택 포인터는, 상기 검출된 에러에 응답하여 두 링크 스택 엔트리 위치들만큼 오프셋된 저장된 링크 스택 포인터 인덱스로 현재 링크 스택 포인터 인덱스를 교체함으로써 검색을 위해 현재 대기된 상기 프로시저 리턴 어드레스 값 바로 다음에 저장된 상기 프로시저 리턴 어드레스 값에 대응하는 상기 링크 스택의 상기 엔트리를 지정하도록 구성되는,
    링크 스택 회로.
  17. 제16항에 있어서,
    상기 링크 스택은 순환 버퍼를 포함하는
    링크 스택 회로.
  18. 삭제
  19. 삭제
  20. 제16항에 있어서,
    상기 검출된 에러는 링크 스택 오버플로우 혹은 스캡된 프로그램 리턴을 포함하는,
    링크 스택 회로.
KR1020087023641A 2006-02-27 2007-02-27 링크 스택 회로를 정정하는 방법 및 장치 KR101048178B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/363,072 2006-02-27
US11/363,072 US20070204142A1 (en) 2006-02-27 2006-02-27 Method and apparatus for repairing a link stack
PCT/US2007/062904 WO2007101214A1 (en) 2006-02-27 2007-02-27 Method and apparatus for repairing a link stack

Publications (2)

Publication Number Publication Date
KR20080102251A KR20080102251A (ko) 2008-11-24
KR101048178B1 true KR101048178B1 (ko) 2011-07-08

Family

ID=38234334

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087023641A KR101048178B1 (ko) 2006-02-27 2007-02-27 링크 스택 회로를 정정하는 방법 및 장치

Country Status (6)

Country Link
US (1) US20070204142A1 (ko)
EP (1) EP1999576A1 (ko)
JP (1) JP2009528637A (ko)
KR (1) KR101048178B1 (ko)
CN (1) CN101390046B (ko)
WO (1) WO2007101214A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8438372B2 (en) 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US7971044B2 (en) * 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8943299B2 (en) 2010-06-17 2015-01-27 International Business Machines Corporation Operating a stack of information in an information handling system
WO2012161059A1 (en) * 2011-05-20 2012-11-29 Semiconductor Energy Laboratory Co., Ltd. Semiconductor device and method for driving the same
CN104246727B (zh) * 2012-04-23 2017-08-04 飞思卡尔半导体公司 数据处理系统以及用于操作数据处理系统的方法
GB2516999B (en) * 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
KR101716865B1 (ko) * 2016-04-29 2017-03-15 고려대학교 산학협력단 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법
US10268413B2 (en) * 2017-01-27 2019-04-23 Samsung Electronics Co., Ltd. Overflow region memory management
US20240036864A1 (en) * 2022-08-01 2024-02-01 Qualcomm Incorporated Apparatus employing wrap tracking for addressing data overflow

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
US20060157999A1 (en) * 2005-01-15 2006-07-20 West Jeffrey C Compact lightweight handle for gripping and transporting hot cooking devices

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5649225A (en) * 1994-06-01 1997-07-15 Advanced Micro Devices, Inc. Resynchronization of a superscalar processor
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US7178010B2 (en) * 2003-01-16 2007-02-13 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack
US7237098B2 (en) * 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
US20060157999A1 (en) * 2005-01-15 2006-07-20 West Jeffrey C Compact lightweight handle for gripping and transporting hot cooking devices

Also Published As

Publication number Publication date
US20070204142A1 (en) 2007-08-30
CN101390046A (zh) 2009-03-18
KR20080102251A (ko) 2008-11-24
EP1999576A1 (en) 2008-12-10
WO2007101214A1 (en) 2007-09-07
JP2009528637A (ja) 2009-08-06
CN101390046B (zh) 2012-05-02

Similar Documents

Publication Publication Date Title
KR101048178B1 (ko) 링크 스택 회로를 정정하는 방법 및 장치
EP1513062B1 (en) Apparatus, method and computer data signal for selectively overriding return stack prediction in response to detection of non-standard return sequence
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
US6189091B1 (en) Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection
JP3565504B2 (ja) プロセッサにおける分岐予測方法及びプロセッサ
US5606682A (en) Data processor with branch target address cache and subroutine return address cache and method of operation
JP4027620B2 (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
US5935238A (en) Selection from multiple fetch addresses generated concurrently including predicted and actual target by control-flow instructions in current and previous instruction bundles
JP5579694B2 (ja) 復帰スタックを管理する方法および装置
US5964869A (en) Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US20040225866A1 (en) Branch prediction in a data processing system
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
US6738897B1 (en) Incorporating local branch history when predicting multiple conditional branch outcomes
US7472264B2 (en) Predicting a jump target based on a program counter and state information for a process
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
WO2019202287A1 (en) An apparatus and method for prefetching data items
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
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: 20140627

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee