KR101026978B1 - 리턴 스택을 운용하는 방법 및 장치 - Google Patents

리턴 스택을 운용하는 방법 및 장치 Download PDF

Info

Publication number
KR101026978B1
KR101026978B1 KR1020077021357A KR20077021357A KR101026978B1 KR 101026978 B1 KR101026978 B1 KR 101026978B1 KR 1020077021357 A KR1020077021357 A KR 1020077021357A KR 20077021357 A KR20077021357 A KR 20077021357A KR 101026978 B1 KR101026978 B1 KR 101026978B1
Authority
KR
South Korea
Prior art keywords
return
instruction
stack
procedure
address
Prior art date
Application number
KR1020077021357A
Other languages
English (en)
Other versions
KR20070106783A (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 KR20070106783A publication Critical patent/KR20070106783A/ko
Application granted granted Critical
Publication of KR101026978B1 publication Critical patent/KR101026978B1/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
    • 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/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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

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)
  • Pile Receivers (AREA)

Abstract

프로세서는 명령 프리 페치에 대한 절차 리턴 어드레스들을 예측하기 위해 사용된 리턴 스택 회로를 포함하며, 리턴 스택 제어기는 주어진 리턴 명령과 관련된 리턴 레벨의 개수를 결정하고, 리턴 스택으로부터 상기 개수의 리턴 어드레스들을 팝핑한다. 리턴 스택으로부터 다수의 리턴 어드레스들을 팝핑하는 것은 프로세서가 연속하는 절차 콜들의 체인에서 최초의 콜 절차의 리턴 어드레스들을 프리 페치하도록 한다. 일 실시형태에서, 리턴 스택 제어기는 리턴 명령에 삽입된 값으로부터 리턴 레벨의 개수를 판독한다. 보조 컴파일러는 주어진 리턴 명령들에 대한 리턴 레벨 값들을 계산하고 상기 값들을 컴파일 시간에 리턴 명령들에 삽입한다. 다른 실시형태에서, 리턴 스택 회로는 연속 절차 콜들의 체인에서 절차 콜들 (브랜치들) 을 카운트하여 리턴 레벨의 개수를 동적으로 추적한다.
리턴 어드레스, 절차 콜, 프리 페치

Description

리턴 스택을 운용하는 방법 및 장치{METHOD AND APPARATUS FOR MANAGING A RETURN STACK}
본 발명은 일반적으로는 마이크로프로세서에 관한 것이고, 특히 절차 콜 (procedure call) 로부터 리턴을 가속하는 마이크로프로세서의 일부 타입들에 의해서 사용된 하드웨어 리턴 스택을 운용하는 것에 관한 것이다.
마이크로프로세서들이 정교한 기술을 필요로 하는, 점점 증가하는 애플리케이션들에서 사용됨에 따라, 마이크로프로세서의 실행 속도를 증가하는 것이 바람직하다. 또한, 제한된 배터리 전원을 갖는 휴대용 전자 디바이스와 같은 임베디드 애플리케이션들에서, 마이크로프로세서의 전력 소모를 줄이는 것이 바람직하다. 하지만, 다양한 입/출력 병목 현상이 마이크로프로세서의 실제 성능에 제한을 가하기 때문에, 단순히 마이크로프로세서의 클록 속도를 증가시키는 것은 시스템 성능에서 목적한 상승을 주지 않을 수도 있다. 예를 들면, 오프-칩 메모리 엑세스들은 온-칩 메모리 엑세스보다 일반적으로 더 느리게 실행되므로, 명령 및 데이터 캐싱 기술을 사용하게 된다. RISC (Reduced Instruction Set Computers ; 축소 명령 세트 컴퓨터) 는 클록 주기마다 하나 이상의 명령들을 발생시키고, 명령 캐시를 종종 사용하여 성능을 향상시킨다. 파이프라인화된 RISC 프로세서들은 클록 주기마다 다수의 명령들을 발생시키고 통상적으로 데이터 및 명령 캐시를 과도하게 사용한다.
명령 캐싱 ("프리 패치 (pre-fetching)") 은 장래의 명령들을 예측하고 그 명령들을 마이크로프로세서가 실행하기 전에 온-칩 명령 캐시로 불러들인다. 프리 패치는, 정확한 명령들이 프리 패치될 때, 더 느린 오프-칩 명령 메모리와 관련되는 상당수의 지연 (delay) 을 제거할 수 있다. 대부분의 명령들은 연속적으로 실행되고, 정확성을 가지고 프리 패치될 수 있다. 조건부 브랜치 명령들은, 통상적으로 파이프라인에서 깊은 것으로 오직 평가되는 브랜치 조건에 의존하여, "브랜치하거나" 또는 하지 않을 수 있다. 이러한 평가를 기다릴 때의 지연을 피하기 위해서, 브랜치 명령의 가동이 파이프라인에서 종종 빠르게 예측되며, 명령들은 예측된 브랜치 목표 어드레스로부터 프리 패치된다. 명령 프리 패치 방법들은 정적 및 동적 명령 프리 패치 양자 모두를 포함한다.
동적 명령 프리 패치는 명령 실행 히스토리에 의존하고, 예를 들면, 가장 최근의 조건부 브랜치 명령들의 주어진 개수에 대한 행해졌거나 행해지지 않은 이전의 예측들의 정확도를 추적하는 것을 포함할 수도 있다. 정적 프리 패치는 일반적으로 실행 히스토리에 의존하지는 않고, 예를 들면, 처음 조건부 브랜치들을 만날 때 사용될 수도 있다. 정적 프리 패치가 성능에 이점을 제공하는 브랜치 명령의 한 가지 타입이 콜된 절차로부터의 리턴 명령이며, 여기에서, 절차의 리턴 어드레스는 예측된 리턴 어드레스에 시작하는 명령들의 프리 페치를 지원하기 위해서 예측된다.
"리턴 스택" 은 절차 콜 리턴 명령에 대한 리턴 어드레스들의 정적 예측을 지원하기 위해서 사용될 수 있다. 통상적인 리턴 스택은 다중-레벨 버퍼를 포함한다. 절차 콜 명령이 예측되거나 인지될 때, 대응하는 리턴 어드레스는 마이크로프로세서의 명령 파이프라인의 실행 스테이지로부터 가져와지고 리턴 스택 상으로 푸싱된다. 반대로, 절차 리턴 명령이 예측되거나 인지될 때, 리턴 스택의 현재의 최상부의 리턴 어드레스는 스택으로부터 팝핑되고 명령 프리 페치에 대하여 예측된 리턴 어드레스로 사용된다.
따라서, 리턴 스택을 운용하는 종래의 방법에서, 절차 콜들을 만날 때, 대응하는 예측된 리턴 어드레스들이 리턴 스택으로 순차적으로 푸싱된다. 반대로, 절차 리턴 명령을 만날 때, 리턴 어드레스들이 스택으로부터 순차적으로 팝핑된다. 이러한 종래의 방법은 다중 레벨 절차 콜들에서 절차 리턴 어드레스들을 부정확하게 예측하며, 여기에서, 체인내의 각각의 이어지는 절차 콜의 리턴 명령이 이전 절차 콜의 리턴 명령을 포인팅한다는 점에서, 연속하는 절차 콜들은, 함께 "체인화" 된다.
가장 바람직하게는, 체인내의 최종 절차의 리턴 명령에 대해서 예측되어야 하는 리턴 어드레스는 체인내의 최초 절차 콜에 대응하는 리턴 어드레스이다. 하지만, 이어지는 절차 콜들이 각각의 주변의 절차 콜의 리턴 어드레스를 리턴 스택 상으로 순차적으로 푸싱하도록 하기 때문에, 최종 절차 콜의 리턴 명령을 위해서 팝핑된 리턴 어드레스는 체인내의 직전의 콜 절차의 리턴 어드레스이다. 프리 페치가 그 어드레스로부터 계속될 때, 패치된 다음 명령은 다른 리턴이 되고, 그 리턴은 다시 리턴 스택을 팝핑할 것이다. 이러한 방식으로 리턴 스택을 순차적으로 팝핑하는 것은 프로세서 성능을 불필요하게 감소시키고 전력을 소모한다.
본 발명은 마이크로프로세서가 다중 레벨 절차 콜에서 최초, 최상 레벨 콜 절차의 리턴 어드레스를 정확히 예측하는 것을 가능하게 하는 방법 및 장치를 포함한다. 그러한 다중 레벨 절차 콜들은, 각각의 이어지는 절차의 리턴 어드레스가 바로 이전 절차의 리턴 명령을 포인팅하면서, 두 개 이상의 연속 절차 콜들의 체인을 포함한다. 최종-푸싱된 리턴 어드레스를 체인의 콜된 최종 절차의 리턴 명령의 타깃으로써 제공하는 대신에, 본 발명의 하나 이상의 실시형태들에 따른 리턴 스택 회로는 순차적으로 콜된 절차들의 체인의 리턴 레벨들의 개수와 동일한 개수의 리턴 어드레스들을 스택으로부터 순차적으로 팝핑한다. 그렇게 할 때, 리턴 스택 회로는, 명령 프리 페치를 위한 타깃으로써 명령 프리 페치 유닛에 제공될 수 있는, 최초 콜 절차의 리턴 어드레스를 회복한다.
따라서, 일 실시형태에서, 본 발명은 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하고, 리턴 스택으로부터 상기 개수의 리턴 어드레스들을 팝핑하는 것에 기초하여 리턴 스택을 운용하는 방법을 포함한다. 최종 팝핑된 어드레스는 명령 프리 페치를 위한 타깃 어드레스로써 명령 프리 페치 유닛에 제공될 수도 있다. 주어진 리턴 명령을 위해서 예측된 리턴 어드레스를 획득하기 위해서 스택으로부터 팝핑된 리턴 어드레스들의 개수는 리턴 명령과 관련된 정적 레벨 표시기 값으로부터 판독될 수 있거나, 또는 프로그램 실행 동안 온더플라이로 결정될 수 있다.
일 실시형태에서, 레벨 표시기는 리턴 명령에 삽입된 필드 또는 태그를 포함할 수도 있으며, 그 값은 컴파일 시간에 결정된다. 따라서, 본 발명은 프로그램 컴파일의 방법을 포함하며, 여기에서, 컴파일러 논리는 리턴 명령과 관련된 리턴 레벨의 개수를 결정하며, 리턴 명령과 관련된 리턴 레벨 표시기를 상기 개수에 대응하는 값으로 설정한다. 리턴 레벨의 개수를 결정하기 위해서, 컴파일러는 절차 콜들의 체인화된 시퀀스에서 절차 콜들의 개수를 카운트할 수도 있다. 일반적으로, 컴파일러는 체인화된 절차 콜들을 탐지하고, 주어진 절차 콜들의 체인의 네스팅 (nesting) 깊이를 추적하고, 그 네스팅 깊이에 따라서 주어진 절차 콜들의 체인에서의 최종 리턴 명령에 대한 리턴 레벨의 개수를 설정하여 리턴 명령과 관련된 리턴 레벨들의 개수를 결정한다.
다른 실시형태에서, 마이크로프로세서에서의 리턴 스택 회로 또는 다른 지원 논리는 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 실행 시간에 동적으로 결정한다. 이러한 구성을 가지면, 컴파일 시간에 리턴 레벨 표시기를 저장할 필요가 없다. 리턴 레벨들의 실행 시간 결정은 컴파일 시간 실시형태에 대해서 사용된 방법들과 유사한 방법에 기초할 수 있다. 예를 들면, 지원 논리는 절차 콜들의 체인화된 시퀀스에서의 절차 콜들의 개수를 카운트하고 상기 카운트에 기초한 최종 콜된 절차의 리턴 명령에 대한 리턴 레벨 값을 설정할 수 있다. 보다 일반적으로, 동적 실행 시간 추적은 체인화된 절차 콜들을 탐지하고, 주어진 절차 콜들의 체인의 네스팅 깊이를 추적하고, 상기 네스팅 깊이에 따라서 주어진 절차 콜들의 체인에서의 최종 리턴 명령에 대한 리턴 레벨들의 개수를 설정하는 것을 포함한다.
도 1 은 마이크로프로세서를 도시하는 블록도이다.
도 2 는 도 1 의 마이크로프로세서에서 사용된 리턴 스택을 도시하는 블록도이다.
도 3 은 연속적으로 체인화된 절차 콜들을 포함하는 다중 레벨 절차 콜을 도시하는 프로그램 명령 흐름도이다.
도 4 는 리턴 스택이 주어진 다중 레벨 절차 콜에서의 리턴 레벨의 개수에 따라서 팝핑되는 프로세스를 도시하는 논리 흐름도이다.
도 5 는 삽입된 리턴 레벨 표시기를 포함하는, 컴파일러-발생된 리턴 명령의 블록도이다.
도 6 은 리턴 스택이 주어진 리턴 명령에 삽입되거나 관련된 레벨 표시기에 의해서 표시된 횟수로 팝핑되는 프로세스를 도시하는 흐름도이다.
도 7 은 다중 레벨 절차 콜들을 탐지하고, 그러한 다중 레벨 절차 콜들 내부의 콜 네스팅 깊이를 추적하고, 상기 추적된 깊이에 기초하여 리턴 레벨들을 설정하는 것에 대한 프로세스를 도시하는 논리 흐름도이다.
도 1 은 프로세서 코어 (12), 명령 프리 페치 유닛 (14), 명령 캐시 (16), 명령 캐시 제어기 (18), 로딩/저장 유닛 (20), 데이터 캐시 (22), 데이터 캐시 제 어기 (24), 및 메인 변환 색인 버퍼 (TLB : tranlation lookaside buffer)(26) 을 포함하는 마이크로프로세서 (10) 을 부분적으로 도시한다. 비-제한적 예로써, 마이크로프로세서 (10) 는 RISC 구조에 기초한 파이프라인화된 프로세서일 수도 있다.
하나 이상의 실시형태에서, 코어 (12) 는 하나 이상의 다중 스테이지 명령 파이프라인들을 포함하는 명령 실행 유닛 (미도시) 을 포함한다. 동작 중에, 코어 (12) 는 프로그램 명령들을 실행하고 대응하는 로딩/저장 데이터 동작들을 수행한다. TLB (26) 는 코어 (12) 로부터 입력들을 받아들이고 출력들을 코어 (12) 로 제공한다. 보다 상세하게는, TLB (26) 는 코어 (12) 를, 각각, 명령 및 데이터 캐시 (16 및 22) 에 인터페이싱시킨다. 명령 및 데이터 캐시들 (16 및 22) 은 빠른, 기판 메모리를 포함하며, 마이크로프로세서 (10) 는 명령 및 데이터 캐시 제어기들 (18 및 24) 에 의하여 명령 및 데이터 프리 페치를 사용하여 캐시들이 다음에 필요한 명령 및 데이터로 채워지도록 하게 한다.
특히, 마이크로프로세서 (10) 의 명령 프리 페치 동작들은 콜된 절차들로부터 리턴들 상의 명령 스트림의 예측들을 포함한다. 절차 리턴의 어드레스들을 예측하는 것은 절차가 완결된 후에 필요하게 될 명령들을 프리 페치하는 것을 마이크로프로세서 (10) 가 시작하도록 가능하게 함으로써 성능을 향상시킨다.
도 2 는 절차 리턴 명령의 타깃 어드레스를 예측하기 위해서 코어 (12) 에 의해서 사용된 리턴 스택 회로 (30) 의 일 실시형태를 도시한다. 도시된 리턴 스택 회로 (30) 는 리턴 스택 (32) 및 관련된 리턴 스택 제어기 (34) 를 포함한다. 임시 저장 레지스터들은 리턴 스택 (32) 을 형성하기 위해서 리턴 스택 제어기 (34) 의 제어 하에서 논리적으로 함께 연결될 수 있다. 다양한 버퍼 배열들이 구현될 수 있지만, 일 실시형태에서, 리턴 스택 (32) 은 후입선출 (last-in-first-out) 메모리 스택으로 구성된다.
코어의 명령 파이프라인 (미도시) 에서의 명령 실행 유닛이 절차 콜을 예측하거나 또는 그렇지 않으면 인지할 때, 리턴 스택 제어기 (34) 는 대응하는 리턴 어드레스를 수신하고 그것을 리턴 스택 (32) 으로 푸싱한다. 따라서 리턴 스택 제어기 (34) 는, 절차 콜들이 예측될 때, 절차 리턴 어드레스들을 한번에 하나씩 순차적으로 리턴 스택 (32) 으로 푸싱한다. 절차 리턴 명령들이 마주치거나 또는 예측될 때, 리턴 스택 제어기 (34) 는 통상적으로 절차 리턴 어드레스들을 팝핑하고, 그 절차 리턴 어드레스들을 명령 프리 페치 유닛 (14) 으로 제공한다.
하지만, 종래의 리턴 스택 운용 방법과 대조적으로, 리턴 스택 제어기 (34) 는 항상 리턴 스택 (32) 으로부터 한번에 오직 하나의 리턴 어드레스를 팝핑하여 명령 프리 페치를 위한 리턴 어드레스를 획득하는 것은 아니다. 실제로, 리턴 스택 제어기 (34) 는 일반적으로 리턴 어드레스들을 순차적으로 리턴 스택 (32) 으로 푸싱하고, 리턴 스택 (32) 으로부터 순차적으로 리턴 어드레스를 팝핑하도록 구성되지만, 상세하게는, 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하고 리턴 스택 (32) 으로부터 상기 개수의 리턴 어드레스들을 팝핑하도록 구성된다. 최종 팝핑된 리턴 어드레스는 그 후 상기 예측된 절차 리턴 어드레스로써 프리 페치 유닛으로 제공된다.
리턴 스택 (32) 으로부터 한번에 하나 이상의 리턴 어드레스들을 팝핑하는 능력은 리턴 스택 제어기 (34) 가 다중 레벨 절차 콜에서 최초, 최상 레벨 콜 절차의 리턴 어드레스를 정확하게 예측하는 것을 허용한다. 그러한 다중 레벨 절차 콜들은, 각각의 연속하는 절차의 리턴 어드레스가 바로 직전의 절차의 리턴 명령을 다시 포인팅하면서, 두개 이상의 연속하는 절차 콜들의 체인을 포함한다.
도 3 은 다중 레벨 절차 콜을 포함하는 많은 절차 콜들을 포함하는, 일련의 프로그램 명령들을 도시한다. 도시된 프로그램 흐름에 따라서, "메인" 프로그램은 "proc1" 로 불리는 절차로의 콜을 포함한다. proc1 절차는 "proc2" 로 불리는 절차로의 콜을 포함한다. proc2 절차는 "proc3" 으로 불리는 절차로의 콜을 포함한다.
따라서, proc1 은 연속하는 절차 콜들의 연결된 체인에서 최초, 최상 레벨 절차를 포함한다. 절차 체인들은 각각의 연속하는 콜된 절차에서 리턴 명령에 대한 리턴 어드레스가 바로 직전 절차의 리턴 명령을 다시 "포인팅 (pointing)" 하는 것으로 특징지어진다. 즉, proc3 의 리턴 명령에 대한 리턴 어드레스는 proc2 의 리턴 명령의 어드레스이며, proc2 의 리턴 명령에 대한 리턴 어드레스는 최초 콜 절차, proc1 후의 다음 명령의 어드레스이다.
도 4 는 도 3 의 프로그램 흐름을 위한 리턴 스택 제어기 (34) 의 동작을 도시한다. 메인 프로그램은 어드레스 "b1" 에서의 절차 proc1 로의 콜 명령을 포함하고, 따라서, 리턴 스택 제어기 (34) 는 리턴 어드레스 b1+1 을 리턴 스택 (32) 으로 푸싱한다 (단계 100). 순서대로, 절차 proc1 은 어드레스 "b2" 에서의 절 차 proc2 로의 콜 명령을 포함하고, 따라서, 리턴 스택 제어기 (34) 는 리턴 어드레스 b2+1 을 리턴 스택 (32) 으로 푸싱한다 (단계 102). 마지막으로, 절차 proc2 는 어드레스 b3 에서의 절차 proc3 으로의 콜 명령을 포함하고, 따라서, 리턴 스택 제어기 (34) 는 리턴 어드레스 b3+1 을 리턴 스택 (32) 으로 푸싱한다 (단계 104). 이러한 푸싱의 연속들은, b3+1 이 리턴 스택 (32) 의 최상으로 유지되게 하는채로, 리턴 스택 (32) 이 리턴 어드레스들 b3+1, b2+1 및 b1+1 을 유지하도록 한다.
proc3 의 리턴 명령에 대해서, 리턴 스택 운용의 종래의 방법은 최상 스택 값, b3+1 을 팝핑하고, 그 값을 명령 프리 페치에 대해서 예측된 리턴 어드레스로써 사용할 것이다. b3+1 은 proc2 의 리턴 명령을 패치하여, 리턴 스택 (32) 이 어드레스 b2+1 을 팝핑하도록 하게 하고, 어드레스 b2+1 은 proc1 의 리턴 명령을 패치하여, 리턴 스택 (32) 이 b1+1 을 팝핑하도록 하게 한다. 이런 연속하는 리턴 스택 팝핑 및 명령 프리 패치는 전력 및 프로세서 실행 시간 모두를 소모시켜서, 부정적으로 성능에 영향을 준다. 연속하는 절차 콜들의 체인화된 특징 때문에, 실제 리턴 어드레스 위치는 최초, 최상 콜 절차, proc1 에서의 b1+1 이다. 따라서, 리턴 스택 제어기 (34) 는 proc3 의 리턴 명령에 대한 정확한, 최상 레벨 리턴 어드레스를 획득하기 위해서 리턴 스택 (32) 로부터 팝핑해야 하는 레벨들의 개수를 결정하여 성능을 최적화시킨다 (단계 106).
리턴 스택 제어기 (34) 는 리턴 스택 (32) 으로부터 상기 개수의 리턴 어드레스들을 팝핑하고, 프리 페치 유닛 (PFU)(14) 에 대한 예측된 리턴 어드레스로써, 최종 팝핑된 리턴 어드레스 (여기에서는, b1+1) 를 사용한다. 이러한 설명은 리턴 어드레스를 리턴 스택 (32) 상으로 푸싱하고 리턴 스택 (32) 으로부터 팝핑하여 동작 기술로 구성되지만, 그러한 동작들은 스택 포인터들을 필요에 따라 논리적으로 움직이는 것에 기초하여, 리턴 스택 (32) 내의 포인팅된 값이 명령 프리 페치를 위해서 사용된 리턴 어드레스를 나타내는 것으로 이해되어야 한다.
도 4 는 체인에서 최종 절차의 리턴 명령을 예측하거나 또는 마주치는 즉시, 리턴 스택 (32) 상에 저장된 중간 리턴 어드레스들을 스킵하고, 연속하는 절차 콜들의 체인에서 최초, 최상 레벨 절차에 대응하는 리턴 어드레스를 제공하는 리턴 스택 제어기의 능력의 비-제한적인 예이다. 보다 일반적으로는, 리턴 스택 제어기 (34) 는 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하고, 대응하는 횟수로 리턴 스택 (32) 을 팝핑하여 명령 프리 페치에 대한 리턴 어드레스를 획득하도록 구성된다.
도 5 는 임의의 주어진 리턴 명령과 관련된 리턴 레벨의 개수를 결정하는 일 체계를 도시하며, 여기에서, 리턴 명령은 그 값이 리턴 레벨의 개수를 표시하는 리턴 레벨 표시기를 포함하거나 관련된다. 따라서, 하나 이상의 실시형태들에서, 마이크로프로세서 (10) 에 의해서 인지되고 사용된 명령 세트는 리턴 조작 코드 ("opcode") 및 조작 코드로 삽입되거나 또는 그렇지 않으면 조작 코드에 연결된 리턴 레벨 표시기 필드 또는 태그를 포함하는 리턴 명령을 포함한다. 따라서, 도 6 에 도시된 바와 같이, 임의의 주어진 리턴 명령과 관련된 리턴 레벨의 개수를 결정하는 것은 명령의 리턴 레벨 필드 또는 태그를 판독하는 것을 포함한다.
리턴 스택 제어기 (34) 는 도 6 의 프로세싱 논리를 구현하도록 구성될 수 있으며, 여기에서, 리턴 스택 제어기 (34) 는 주어진 리턴 명령이 리턴 레벨 표시기를 포함하거나 또는 리턴 레벨 표시기와 관련되었는 지를 결정한다 (단계 120). 포함한다면 (단계 122), 리턴 스택 제어기 (34) 는 시간들의 대응하는 횟수로 리턴 스택 (32) 을 팝핑하여 명령 프리 페치에 대한 리턴 어드레스를 획득한다. 포함하지 않는다면 (단계 122), 리턴 스택 제어기 (34) 는 리턴 스택 (32) 을 시간들의 디폴트 횟수로 팝핑하여 (단계 126) 명령 프리 페치에 대해서 리턴 어드레스를 획득한다. 시간들의 디폴트 개수는, 예를 들면, 1 회가 될 수도 있다.
일 실시형태에서, 프로그램 컴파일러는 모든 리턴 명령에 대해서 리턴 레벨 표시기를 발생시키도록 구성될 수 있고, 리턴 스택 제어기 (34) 는 따라서 모든 리턴 명령에 대한 대응하는 리턴 레벨 표시기 값을 판독하고 그에 따라 리턴 스택 팝핑을 제어하기 위해서 항상 구성될 수 있다. 하지만, 도 6 에 도시된 바와 같이, 프로그램 컴파일러는 오직 리턴 레벨들의 개수가 1 의 디폴트 값을 초과하는 경우 리턴 레벨 표시기를 발생시킬 수도 있다. 즉, 리턴 명령의 제 1 타입은 리턴 레벨 표시기를 포함하지 않으며 리턴 스택 제어기 (34) 는 리턴 명령의 제 1 타입을 리턴 스택 (32) 이 한번 팝핑되어야 한다는 함축된 표시로 인식하도록 구성된다. 리턴 명령의 제 2 타입은 리턴 레벨 표시기를 포함하고 리턴 스택 제어기는 상기 리턴 레벨 표시기의 값을 사용하여 스택 팝핑을 제어하도록 구성된다.
프로그램 컴파일러의 하나 이상의 실시형태들은 도 7 에 도시된 프로세싱 논리에 따라서 리턴 명령들에 대해서 리턴 레벨 표시기를 발생시키도록 구성될 수도 있다. 컴파일러는 두개 이상의 연속하는 절차 콜들이 다중 레벨 절차 콜로써 함께 체인화되는 지를 결정하도록 구성될 수 있다 (단계 130). 컴파일러는 콜된 절차의 리턴 명령이, 예를 들어, 콜 절차의 리턴 명령을 다시 포인팅하는 지를 판단하여 다중 레벨 절차 콜들을 인지할 수 있다.
주어진 절차 콜이 다중 레벨 절차 콜 체인의 일부분이 아니라면, 컴파일러는 콜 레벨 카운터등과 같은, 리턴 레벨 추적 정보를 지울 수 있고 (단계 132), 필요하다면 통상의 컴파일 동작들을 계속할 수 있다. 하지만, 컴파일러가 다중 레벨 절차 콜을 탐지하면, 컴파일러는 다중 레벨 절차 콜의 네스팅 (콜) 깊이를 추적한다. 네스팅 깊이를 추적하는 한가지 방법은 연속적으로 체인화된 절차 콜들을 카운트하는 것을 포함한다 (단계 134). 따라서 컴파일러는 다중 레벨 절차의 콜 깊이를 누적하기 위해서 카운터를 보유할 수도 있다.
체인내의 최종 절차의 리턴 명령을 탐지하자마자 (단계 136), 컴파일러는 추적된 카운트에 기초하여 상기 명령에 대한 리턴 레벨 표시기를 설정한다 (단계 138). 따라서, 상술한 바와 같이, 컴파일러는 누적된 카운트에 기초하여 최종 절차의 리턴 명령에 대한 리턴 레벨 표시기의 값을 설정할 수도 있다. 따라서, 컴파일 시간에 이 값을 설정하는 것은 리턴 스택 제어기 (34) 가, 실행 시간에, 즉, 마이크로프로세서 (10) 가 컴파일된 프로그램 코드로 실행될 때, 다중 레벨 리턴 어드레스 예측을 수행하도록 한다.
도 7 의 프로세싱 논리는 리턴 스택 제어기 (34) 에 의해서, 또는, 마이크로프로세서 (10) 내부의 다른 지지 논리에 의해서 동적, 실행 시간 프로세싱으로 구 현될 수 있음이 이해되어야 한다. 예를 들면, 리턴 스택 제어기 (34) 는 실행 시간 프로세싱 동안에 코어의 명령 실행 유닛 또는 다른 논리와 협력하여, 다중 레벨 절차들을 탐지하고, 그 절차들의 콜 깊이를 추적하고, 최상 레벨 리턴 어드레스를 위한 적절한 리턴 레벨 표시기를 발생시키도록 구성될 수 있다. 따라서, 리턴 스택 제어기 (34) 또는 코어 (12) 내의 다른 회로는, 체인화된 절차 콜들을 인지하고, 체인화된 절차 콜들의 콜 깊이를 추적/카운트하고, 리턴 어드레스 예측을 제어하기 위한 상응하는 리턴 레벨 표시기 값을 발생시키기 위해서 요구되는 필요 논리 및 메모리 회로 소자로 구성될 수 있다.
일반적으로, 리턴 레벨들의 개수는 컴파일 시간 또는 실행 시간에 결정될 수 있다. 두가지 중 한 경우에, 주어진 명령과 관련된 리턴 레벨들의 개수는 체인화된 시퀀스에서 절차 콜들을 카운트하여 결정되어, 체인 내의 최종 절차의 리턴 명령에 대해서 예측된 리턴 어드레스가 체인 내의 바로 직전 절차의 어드레스 보다는 최상, 최초 콜 절차의 리턴 어드레스가 되도록 한다.
임의의 경우에, 마이크로프로세서 (10) 는 절차 콜들의 체인화된 시퀀스에서 최종 절차 콜의 리턴 어드레스를 절차 콜들의 체인화된 시퀀스들에서 최초 절차 콜의 리턴 어드레스로 대체하는 것, 및 명령 프리 페치를 위한 대체된 리턴 어드레스를 제공하는 것에 기초하여 절차 콜들의 체인화된 시퀀스들에 대한 명령 프리 페치를 위한 리턴 어드레스들을 예측하는 방법을 구현한다. 체인화된 절차 콜들은, 주어진 현재 프로그램 절차에 대해서, 다음 프로그램 절차에 대한 콜은 현재 절차의 리턴 명령 이전의 최종 명령이라는 것을 인지하는 것에 의해서 탐지될 수 있다. 이러한 방식으로, 불필요한, 중간의 리턴 명령들이 마이크로프로세서의 명령 파이프라인으로 패치되지 않고 실행되기 때문에, 체인화된 절차 콜들의 실행에서 마이크로프로세서 (10) 의 성능은 최적화된다.
전술한 하나 이상의 실시형태에 대한 설명은 본 발명을 국한시키는 않으며, 수반된 도면들 역시 본 발명을 국한시키지는 않음을 당업자는 이해할 것이다. 대신에, 본 발명은 오직, 다음의 청구항들, 및 그 균등물에 의해서 오직 한정된다.

Claims (25)

  1. 리턴 스택을 운용하는 방법으로서,
    리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계; 및
    상기 리턴 스택으로부터 상기 개수의 리턴 어드레스들을 팝핑하는 단계를 포함하는, 리턴 스택 운용 방법.
  2. 제 1 항에 있어서,
    상기 리턴 스택으로부터 최종 팝핑된 리턴 어드레스를 명령 프리 페치에 대한 예측된 리턴 어드레스로서 명령 프리 페치 (pre-fetch) 유닛으로 제공하는 단계를 더 포함하는, 리턴 스택 운용 방법.
  3. 제 1 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 상기 리턴 명령과 관련된 리턴 레벨 표시기 값을 판독하는 단계를 포함하는, 리턴 스택 운용 방법.
  4. 제 3 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨 표시기 값을 판독하는 단계는 상기 리턴 명령에 삽입된 값을 판독하는 단계를 포함하는, 리턴 스택 운용 방법.
  5. 제 1 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 리턴 명령이 삽입된 리턴 레벨 표시기를 포함하는 지를 결정하고, 포함한다면, 상기 리턴 레벨 표시기를 판독하여 리턴 레벨들의 개수를 결정하고, 포함하지 않는다면, 상기 리턴 스택에 대한 디폴트 리턴 레벨 설정에 기초하여 리턴 레벨 표시기의 개수를 결정하는 단계를 포함하는, 리턴 스택 운용 방법.
  6. 제 5 항에 있어서,
    상기 리턴 스택이, 삽입된 리턴 레벨 표시기들이 없는 리턴 명령들에 대해서 상기 리턴 스택으로부터 하나의 리턴 어드레스를 팝핑하고, 삽입된 리턴 레벨 표시기들을 포함하는 리턴 명령들에 대해서 상기 리턴 스택으로부터 상기 표시된 개수의 리턴 어드레스를 팝핑하도록, 상기 리턴 스택에 대한 상기 디폴트 리턴 레벨 설정을 1 로 설정하는 단계를 더 포함하는, 리턴 스택 운용 방법.
  7. 제 1 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 절차 콜들의 체인화된 시퀀스에서 절차 콜들의 개수를 카운트하는 단계를 포함하는, 리턴 스택 운용 방법.
  8. 제 1 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 체인화된 절차 콜들을 탐지하고, 주어진 절차 콜들의 체인의 네스팅 (nesting) 깊이를 추적하고, 상기 네스팅 깊이에 따라서 상기 주어진 절차 콜들의 체인에서 최종 리턴 명령에 대한 리턴 레벨의 개수를 결정하는 단계를 포함하는, 리턴 스택 운용 방법.
  9. 복수의 리턴 어드레스들을 저장하도록 구성된 리턴 스택; 및
    상기 리턴 스택 상으로 순차적으로 리턴 어드레스를 푸싱하고 상기 리턴 스택으로부터 순차적으로 리턴 어드레스들을 팝핑하도록 구성되며, 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하고 상기 리턴 스택으로부터 상기 개수의 리턴 어드레스들을 팝핑하도록 구성된 리턴 스택 제어기를 포함하는, 리턴 스택 회로.
  10. 제 9 항에 있어서,
    상기 리턴 스택 제어기는 또한, 상기 리턴 스택으로부터 최종 팝핑된 리턴 어드레스를 명령 프리 페치에 대한 예측된 리턴 어드레스로서 명령 프리 페치 유닛으로 제공하도록 구성되는, 리턴 스택 회로.
  11. 제 9 항에 있어서,
    상기 리턴 스택 제어기는, 상기 주어진 리턴 명령과 관련된 리턴 레벨 표시 기 값을 판독하여 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하도록 구성된, 리턴 스택 회로.
  12. 제 11 항에 있어서,
    상기 리턴 스택 제어기는, 상기 주어진 리턴 명령에 삽입된 값을 리턴 레벨 표시기로서 판독하도록 구성된, 리턴 스택 회로.
  13. 제 9 항에 있어서,
    상기 리턴 스택 제어기는, 상기 주어진 리턴 명령이, 삽입된 리턴 레벨 표시기를 포함하는 지를 결정하고, 포함한다면, 상기 리턴 레벨 표시기를 판독하여 리턴 레벨들의 개수를 결정하고, 포함하지 않는다면, 상기 리턴 스택에 대한 디폴트 리턴 레벨 설정에 기초하여 리턴 레벨 표시기들의 개수를 결정하여 상기 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하도록 구성된, 리턴 스택 회로.
  14. 제 13 항에 있어서,
    상기 리턴 스택이, 삽입된 리턴 레벨 표시기들이 없는 리턴 명령들에 대해서 상기 리턴 스택으로부터 하나의 리턴 어드레스를 팝핑하고, 삽입된 리턴 레벨 표시기들을 포함하는 리턴 명령들에 대해서 상기 리턴 스택으로부터 상기 표시된 개수의 리턴 어드레스들을 팝핑하도록, 상기 리턴 스택에 대한 상기 디폴트 리턴 레벨 설정을 1 로 설정하는 것을 더 포함하는, 리턴 스택 회로.
  15. 제 9 항에 있어서,
    상기 리턴 스택 제어기는, 절차 콜들의 체인화된 시퀀스에서 절차 콜들의 개수를 카운트하여 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하도록 구성된, 리턴 스택 회로.
  16. 제 9 항에 있어서,
    상기 리턴 스택 제어기는, 체인화된 절차 콜들을 탐지하고, 주어진 절차 콜들의 체인의 네스팅 깊이를 추적하고, 상기 네스팅 깊이에 따라서 상기 주어진 절차 콜들의 체인에서 최종 리턴 명령에 대한 리턴 레벨들의 개수를 설정하여 상기 주어진 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하도록 구성된, 리턴 스택 회로.
  17. 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계; 및
    상기 리턴 명령과 관련된 리턴 레벨 표시기를 상기 개수에 대응하는 값으로 설정하는 단계를 포함하는, 컴퓨터 프로그램 컴파일 방법.
  18. 제 17 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 절차 콜들의 체인화된 시퀀스에서 절차 콜의 개수를 카운트하는 단계를 포함하는, 컴퓨터 프 로그램 컴파일 방법.
  19. 제 17 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨들의 개수를 결정하는 단계는, 체인화된 절차 콜들을 탐지하고, 주어진 절차 콜들의 체인의 네스팅 깊이를 추적하고, 상기 네스팅 깊이에 따라서 상기 주어진 절차 콜의 체인에서 최종 리턴 명령에 대한 리턴 레벨들의 개수를 설정하는 단계를 포함하는, 컴퓨터 프로그램 컴파일 방법.
  20. 제 17 항에 있어서,
    상기 리턴 명령과 관련된 리턴 레벨 표시기를 상기 개수에 대응하는 값으로 설정하는 단계는, 상기 리턴 명령에 삽입된 값을 설정하는 단계를 포함하는, 컴퓨터 프로그램 컴파일 방법.
  21. 절차 콜들의 체인화된 시퀀스들에 대한 명령 프리 페치에 대한 리턴 어드레스들을 예측하는 방법으로서,
    상기 절차 콜들의 체인화된 시퀀스의 최종 절차 콜의 리턴 어드레스를 상기 절차 콜의 체인화된 시퀀스의 최초 절차 콜의 리턴 어드레스로 대체하는 단계; 및
    명령 프리 페치를 위해 상기 대체된 리턴 어드레스를 제공하는 단계를 포함하는, 리턴 어드레스 예측 방법.
  22. 제 21 항에 있어서,
    주어진 현재 프로그램 절차에 대해서, 다음 프로그램 절차에 대한 콜이 현재 절차의 리턴 명령 이전의 최종 명령이라는 것을 확인하여 절차 콜들의 체인화된 시퀀스들을 탐지하는 단계를 더 포함하는, 리턴 어드레스 예측 방법.
  23. 제 22 항에 있어서,
    프로그램 컴파일 동안 절차 콜들의 체인화된 시퀀스들을 탐지하는 단계를 더 포함하는, 리턴 어드레스 예측 방법.
  24. 제 22 항에 있어서,
    프로그램 실행 동안 절차 콜들의 체인화된 시퀀스들을 탐지하는 단계를 더 포함하는, 리턴 어드레스 예측 방법.
  25. 제 21 항에 있어서,
    상기 절차 콜들의 체인화된 시퀀스의 최종 절차 콜의 리턴 어드레스를, 절차 콜의 상기 체인화된 시퀀스의 최초 절차 콜의 리턴 어드레스로 대체하는 단계는, 절차 콜의 체인화된 시퀀스에서 연속하는 절차 콜들을 위해서 리턴 어드레스들을 리턴 스택 상으로 순차적으로 푸싱하는 단계, 및, 상기 최종 절차 콜에 대한 리턴 명령에 응답하여, 상기 제 1 절차 콜의 리턴 어드레스를 획득하기 위해서 필요한 횟수로 리턴 스택을 팝핑하는 단계를 포함하는, 리턴 어드레스 예측 방법.
KR1020077021357A 2005-02-18 2006-02-17 리턴 스택을 운용하는 방법 및 장치 KR101026978B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/061,975 US7203826B2 (en) 2005-02-18 2005-02-18 Method and apparatus for managing a return stack
US11/061,975 2005-02-18

Publications (2)

Publication Number Publication Date
KR20070106783A KR20070106783A (ko) 2007-11-05
KR101026978B1 true KR101026978B1 (ko) 2011-04-11

Family

ID=36914213

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077021357A KR101026978B1 (ko) 2005-02-18 2006-02-17 리턴 스택을 운용하는 방법 및 장치

Country Status (10)

Country Link
US (1) US7203826B2 (ko)
EP (1) EP1853995B1 (ko)
JP (2) JP2008530712A (ko)
KR (1) KR101026978B1 (ko)
CN (2) CN102707933B (ko)
AT (1) ATE476701T1 (ko)
BR (1) BRPI0608139A2 (ko)
DE (1) DE602006015923D1 (ko)
IL (1) IL185303A0 (ko)
WO (1) WO2006089188A2 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI261197B (en) * 2005-05-20 2006-09-01 Benq Corp Method for finding function call stack in run time for a computer system
US20070061555A1 (en) * 2005-09-15 2007-03-15 St Clair Michael Call return tracking technique
US8578347B1 (en) * 2006-12-28 2013-11-05 The Mathworks, Inc. Determining stack usage of generated code from a model
WO2012027878A1 (zh) * 2010-08-30 2012-03-08 华为技术有限公司 网络处理器的指令处理方法和网络处理器
US10042776B2 (en) * 2012-11-20 2018-08-07 Arm Limited Prefetching based upon return addresses
US20170090927A1 (en) * 2015-09-30 2017-03-30 Paul Caprioli Control transfer instructions indicating intent to call or return
GB2542831B (en) * 2015-09-30 2018-05-30 Imagination Tech Ltd Fetch unit for predicting target for subroutine return instructions
US20210303470A1 (en) * 2020-03-27 2021-09-30 Micron Technology, Inc. Sequential prefetching through a linking array
US11586440B2 (en) * 2021-06-01 2023-02-21 International Business Machines Corporation Link stack based instruction prefetch augmentation

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313634A (en) * 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US6035321A (en) * 1994-06-29 2000-03-07 Acis, Inc. Method for enforcing a hierarchical invocation structure in real time asynchronous software applications
US20040003213A1 (en) * 2002-06-28 2004-01-01 Bockhaus John W. Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60105046A (ja) * 1983-11-11 1985-06-10 Nec Corp アドレススタツク制御方式
JPS63311439A (ja) * 1987-06-12 1988-12-20 Nec Corp コ−ル・リタ−ン方式
JPH01216429A (ja) * 1988-02-24 1989-08-30 Nec Corp マイクロコンピュータ
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
JPH02224026A (ja) * 1988-11-17 1990-09-06 Nec Corp スタック回路
JP3049561B2 (ja) * 1990-05-21 2000-06-05 東洋通信機株式会社 プロダクションシステムとプロダクションシステムの変換装置
US5522072A (en) * 1990-09-04 1996-05-28 At&T Corp. Arrangement for efficiently transferring program execution between subprograms
JPH04317129A (ja) * 1991-04-17 1992-11-09 Nec Ibaraki Ltd マイクロプログラムアドレススタック回路
JPH0728644A (ja) * 1993-07-12 1995-01-31 Seiko Epson Corp データ処理装置
US5706491A (en) * 1994-10-18 1998-01-06 Cyrix Corporation Branch processing unit with a return stack including repair using pointers from different pipe stages
US6035118A (en) * 1997-06-23 2000-03-07 Sun Microsystems, Inc. Mechanism to eliminate the performance penalty of computed jump targets in a pipelined processor
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
JP3513038B2 (ja) * 1998-12-10 2004-03-31 富士通株式会社 命令フェッチ制御装置
US6289444B1 (en) * 1999-06-02 2001-09-11 International Business Machines Corporation Method and apparatus for subroutine call-return prediction
US6560696B1 (en) * 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor
US20040049666A1 (en) * 2002-09-11 2004-03-11 Annavaram Murali M. Method and apparatus for variable pop hardware return address stack
CN1447244A (zh) * 2003-04-03 2003-10-08 杭州中天微系统有限公司 一种设计在cpu里的侦测缓冲区溢出的方法
US7293265B2 (en) * 2003-05-15 2007-11-06 Intel Corporation Methods and apparatus to perform return-address prediction
CN1294468C (zh) * 2004-04-09 2007-01-10 南京大学 一种防止缓冲区溢出攻击的动态堆栈内存管理方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313634A (en) * 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US6035321A (en) * 1994-06-29 2000-03-07 Acis, Inc. Method for enforcing a hierarchical invocation structure in real time asynchronous software applications
US20040003213A1 (en) * 2002-06-28 2004-01-01 Bockhaus John W. Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Return Address Stack Cache", IBM Technical Report 1992.*

Also Published As

Publication number Publication date
WO2006089188A3 (en) 2007-01-04
EP1853995B1 (en) 2010-08-04
CN101156135A (zh) 2008-04-02
EP1853995A2 (en) 2007-11-14
US20060190711A1 (en) 2006-08-24
US7203826B2 (en) 2007-04-10
KR20070106783A (ko) 2007-11-05
JP2008530712A (ja) 2008-08-07
JP5579694B2 (ja) 2014-08-27
IL185303A0 (en) 2008-02-09
BRPI0608139A2 (pt) 2009-11-17
ATE476701T1 (de) 2010-08-15
WO2006089188A2 (en) 2006-08-24
CN102707933A (zh) 2012-10-03
JP2012123810A (ja) 2012-06-28
CN102707933B (zh) 2017-03-01
DE602006015923D1 (de) 2010-09-16

Similar Documents

Publication Publication Date Title
KR101026978B1 (ko) 리턴 스택을 운용하는 방법 및 장치
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
KR101074621B1 (ko) 프로액티브 브랜치 타겟 어드레스 캐시 관리를 위한 방법들 및 장치
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
JP3805339B2 (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
US20110320787A1 (en) Indirect Branch Hint
US6263427B1 (en) Branch prediction mechanism
US8943300B2 (en) Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
JP2008532142A5 (ko)
JP2011100466A5 (ko)
US20130346727A1 (en) Methods and Apparatus to Extend Software Branch Target Hints
JPH0628184A (ja) ブランチ予測方法及びブランチプロセッサ
US8250344B2 (en) Methods and apparatus for dynamic prediction by software
TWI397816B (zh) 減少在分支目標位址快取記憶體搜尋的方法與裝置

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150227

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20151230

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161229

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20171228

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee