KR20010053623A - 명령들의 철회시 물리적인 레지스터들을 선택적으로자유롭게 사용하도록 구성된 프로세서 - Google Patents

명령들의 철회시 물리적인 레지스터들을 선택적으로자유롭게 사용하도록 구성된 프로세서 Download PDF

Info

Publication number
KR20010053623A
KR20010053623A KR1020017001356A KR20017001356A KR20010053623A KR 20010053623 A KR20010053623 A KR 20010053623A KR 1020017001356 A KR1020017001356 A KR 1020017001356A KR 20017001356 A KR20017001356 A KR 20017001356A KR 20010053623 A KR20010053623 A KR 20010053623A
Authority
KR
South Korea
Prior art keywords
register
physical register
physical
register number
reset block
Prior art date
Application number
KR1020017001356A
Other languages
English (en)
Other versions
KR100572040B1 (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 KR20010053623A publication Critical patent/KR20010053623A/ko
Application granted granted Critical
Publication of KR100572040B1 publication Critical patent/KR100572040B1/ko

Links

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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

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

명령들의 철회시 물리적인 레지스터들을 선택적으로 자유롭게 사용하도록 구성된 프로세서{PROCESSOR CONFIGURED TO SELECTIVELY FREE PHYSICAL REGISTERS UPON RETIREMENT OF INSTRUCTIONS}
슈퍼스칼라 프로세서들은 클록 주기당 많은 명령들을 발생 및 실행시킴으로써, 그리고 설계에 모순이 없는 최고의 가능 클록 주파수를 이용함으로써 고성능을 이루고자 한다. 클록 주기당 명령들의 수를 증가시키기 위한 한 방법은 실행의 순서를 벗어나는 것이다. 실행의 순서를 벗어날 때, 명령들은 프로그램 시퀀스(또는 "프로그램 순서")에서 지정된 것과 다른 순서로 실행될 수도 있다. 프로그램 시퀀스 내에서 서로 가까이 있는 특정한 명령들은 그들의 동시 실행을 저지하는 의존성을 가질 수도 있는 반면, 프로그램 시퀀스 내에서의 연속적인 명령들은 이전의 명령들에 대한 의존성을 가지지 않을 수도 있다. 따라서, 순서를 벗어난 실행은 동시에 실행되는 (평균) 명령들의 수를 증가시킴으로써 슈퍼스칼라 프로세서들의 성능을 향상시킬 수도 있다.
불행히도, 순서를 벗어난 실행은 프로세서에 하드웨어를 부가시켜 프로세서를 더 복잡하게 한다. 예를 들어, 프로그램 순서에서 제 1 명령 다음의 제 2 명령은 제 1 명령에 의해 읽혀지는 저장 위치를 갱신할 수도 있다. 다시 말해, 제 2 명령의 목적지 오퍼랜드가 제 1 명령의 소스 오퍼랜드들중 하나가 될 수도 있다. 적절한 프로그램 실행에 있어서, 제 1 명령은 제 2 명령의 실행 전에 소스 오퍼랜드로서 저장 위치에 저장된 값을 수신할 수도 있다. 유사하게, 제 1, 2 명령들이 목적지 오퍼랜드로서 트정한 저장 위치를 갖는 다면, 제 2 명령의 결과는 제 1, 2 명령들을 실행한 후에, (그리고 저장 위치를 갱신하는 제 3 명령을 실행하기 전에) 저장 위치에 저장된 값이어야 한다.
일반적으로, 명령들은 하나 또는 그 이상의 소스 오퍼랜들 및 하나 또는 그 이상의 목적지 오퍼랜드들을 가질 수도 있다. 소스 오퍼랜드들은 (목적지 오퍼랜드들인) 하나 또는 그 이상의 결과들을 발생시키도록 명령 규정에 따라 조종되는 입력 값들이다. 소스 및 목적지 오퍼랜드들은 프로세서 외부의 메모리 우치에 저장된 메모리 오퍼랜드들이 될 수도 있으며, 또는 프로세서 내에 포함된 레지스터 저장 위치들에 저장된 레지스터 오퍼랜드들이 될 수도 있다. 프로세서에 의해 이용되는 명령 세트 구성은 구성 레지스터들의 수를 규정한다. 이들 레지스터들은 명령 세트 구성에 의해 존재하도록 규정되고, 명령들은 소스 및 목적지 오퍼랜드들로서 이 구성 레지스터들을 이용하도록 코드화될 수도 있다. 명령은 명령의 오퍼랜드 필드 내에서 레지스터 번호(또는 레지스터 어드레스)를 통하여 특정한 레지스터를 소스 또는 목적지 오퍼랜드로서 지정한다. 레지스터 번호는 구성 레지스터들 중에서 선택된 레지스터를 유일하게 확인한다. 소스 오퍼랜드는 소스 레지스터 번호에 의해 확인되고, 목적지 오퍼랜드는 목적지 레지스터 번호에 의해 확인된다.
구성 레지스터들에 부가하여, 어떤 프로세서들은 명령을 실행하는 동안 일시적인 결과들을 보유하는 데에 이용될 수도 있는 부가적인 미세구성 레지스터들을 규정한다. 예를 들어, 어떠한 프로세서들은 가장 복잡한 명령들을 처리하는 데에 미세코딩 기술을 이용한다. 미세코드 루틴들은 복잡한 명령들에 응답하여 실행되며, 더 단순한 다수의 명령들을 포함한다. 미세코드 루틴들은 복잡한 명령을 실행하는 동안 일시적인 결과들을 발생시킬 수도 있다. 이들 미세구성된 레지스터들(또는 일시 레지스터들)에는 구성 레지스터들로부터 일시 레지스터들을 유일하게 확인하기 위한 부가적인 레지스터 번호들이 할당된다. 본원에서 구성 레지스터들 및 일시 레지스터들은 논리 레지스터들로 언급된다.
순서를 벗어난 실행을 이용하는 프로세서는 레지스터 오퍼랜드들에 대하여 상기의 위험들을 경험할 수도 있다. 이러한 위험들을 처리하는 방법이 레지스터 이름 재설정(register renaming)이다. 레지스터 이름 재설정에 있어서, 프로세서는 한 세트의 물리 레지스터들을 실행한다. 물리 레지스터들의 수는 프로세서의 명령 세트 구성 및 미세구성에 의해 지정된 논리 레지스터들의 수 보다 많다. 명령들이 이슈될 때, 물리 레지스터들은 명령들의 목적지 레지스터 오퍼랜드들에 할당된다. 할당된 물리 레지스터를 확인하는 물리 레지스터의 번호가 각각의 목적지 오퍼랜드에 부가되며, 그리고 논리 레지스터들에 해당하는 물리 레지스터들의 표시는 프로세서에 의해 유지된다. 소스 오퍼랜드들로서 논리 레지스터들을 갖는 이후의 명령들에는 적절한 소스 오퍼랜드를 읽기 위한 해당하는 물리 레지스터 번호가 부가된다. 각 명령의 목적지 오퍼랜드들을 저장하기 위하여 다른 물리 레지스터드를 할당함으로써, 명령들은 다른 물리적인 저장 위치들이 갱신된 이후에 그들의 목적지 오퍼랜드들을 모든 순서로 자유롭게 갱신할 수도 있다.
불행히도, 목적지 오퍼랜드 명령들에 물리적인 레지스터 번호를 할당하고, 이들 물리적인 레지스터 번호를, 소스 오퍼랜드들로서 목적지 오퍼랜드들을 갖는 이후의 명령들에 제공하는 과정이 복잡하고 느릴 수도 있다. 슈퍼스칼라 프로세서들에 있어서 특정하게 어려운 것은 명령들의 목적지 오퍼랜드들로 물리 레지스터 번호를 할당하고, 이 물리 레지스터 번호를, 이들 명령들과 동시에 레지스터 이름 재설정 하드웨어를 통과하는 이후의 의존성 명령들에 제공하는 것이다. 클록 주기당 다중 명령들의 이름 재설정을 여전히 처리하는, 더 높은 주파수에서 작동할 수도 있는 레지스터 이름 재설정 구조가 바람직하다.
레지스터 이름 재설정은 명령들이 예외 조건들을 경험할 때 어려움을 제시한다. 본원에서 사용되는 예외는, 이후 명령들이 버려지고 명령 페치가 다른 어드레스에서 시작될 것을 요구하는 명령들의 실행에 있어서의 에러를 말한다. 예를 들어, 분기 오예측은 예외 조건이다. 프로세서는 조건적인 분기 명령들 이후의 명령들을 추론적으로 페치, 이슈 및 실행하기 위하여 분기 예측을 수행할 수도 있다. 예측이 부정확하면, 분기 명령 이후의 명령들은 버려지며 분기 명령의 실행에 따라 명령들이 페치된다. 부가적인 예외 조건들은 메모리 오퍼랜드들의 어드레스에 대한 어드레스 변환 에러들, 및 다른 구성 또는 미세구성 에러 조건들을 포함할 수도 있다.
레지스터 이름 재설정은 예외로 인하여 연속적으로 버려지는 명령들에 적용될 수도 있기 때문에, 물리 레지스터들로의 논리 레지스터들의 대응(mapping)은 예외를 경험하는 명령들에 일관된 상태로 복구되어야 한다. 다시 말해, 물리 레지스터들로의 논리 레지스터들의 대응은 (프로그램 순서에서) 예외를 경험하는 명령 이전의 명령들의 실행을 나타내고, 예외를 경험하는 명령들 이후의 명령들의 실행은 나타내지 않아야 한다. 예외에 응답하여 페치된 명령들이 이들이 유용해지자 마자 레지스터 이름 재설정 하드웨어를 통과할 수 있도록, 레지스터 이름 재설정 맵의 복구가 신속한 것이 바람직하다. 만일 새롭게 페치된 명령들이 레지스터 이름 재설정 하드웨어에 도달했을 때 레지스터 이름 재설정 맵의 복구가 여전히 일어나고 있다면, 새롭게 페치된 명령들은 레지스터 맵이 복구될 때 까지 중지되어야 한다. 이에 의해 프로세서의 성능이 저하된다.
또한, 레지스터 이름 재설정 하드웨어는 일반적으로, 해당하는 논리 레지스터가 이후의 명령들에 해당하는 값을 부여받은 후, 특정한 명령의 목적지 오퍼랜드에 이전에 할당된 물리 레지스터들을 재이용하기 위한 메커니즘을 포함한다. 물리 레지스터들을 가능한한 효율적으로 이용하는 것이 바람직하며, 그리고 이후의 상태가 해당하는 논리 레지스터들로 보내진 이후 물리 레지스터들을 자유롭게 사용가능하도록 하는 방법을 제공하는 것이 또한 바람직하다.
본 발명은 프로세서들의 분야에 관한 것으로서, 특히 프로세서들의 레지스터 이름 재설정(renaming) 특성에 관한 것이다.
도 1은 프로세서의 일 실시예의 블록도이다.
도 2는 도 1에 도시된 대응 유닛, 대응 격납부, 및 구조적 이름 재설정 블록의 블록도로서, 도 1에 도시된 프로세서의 일 실시예에 따라 이들 간의 상호연결을 나타낸 도면이다.
도 3은 도 1, 2에 도시된 대응 유닛의 일 실시예의 블록도이다.
도 4는 도 3에 도시된 레지스터 스캔 유닛의 일 실시예의 블록도이다.
도 5는 가상 레지스터 번호들로 이용될 수도 있는 하나의 엔코딩을 나타낸 표이다.
도 6는 도 4에 도시한 스캔 유닛의 일 실시예의 일부에 대한 블록도이다.
도 7은 도 4에 도시된 스캔 유닛의 일 실시예의 다른 부분에 대한 블록도이다.
도 8은 도 3에 도시된 가상/물리 레지스터 대응 유닛의 일 실시예의 블록도이다.
도 9는 도 1, 2에 도시된 대응 격납부의 일 실시예에서 저장된 정보를 나타낸 표이다.
도 10은 논리 레지스터에 대한 예시적인 예측 레지스터 상태를 나타내는 블록도이다.
도 11은 도 1, 2 및 3에 도시된 대응 유닛의 일 실시예에 따른 복구 예측 상태를 나타낸 흐름도이다.
도 12는 도 1에 도시된 프로세서를 포함하는 컴퓨터 시스템의 일 실시예의 블록도이다.
본 발명은 다양한 변경들 및 변형적인 형태들을 가질 수 있기는 하지만, 본원의 도면 및 상세한 설명에서는 단지 본 발명의 특정 실시예들에 대해 설명할 것이다. 그러나, 도면들 및 상세한 설명은 본 발명을 이러한 특정 실시예들에 한정하지 않으며, 본 발명은 첨부된 청구항들에 의해 정의되는 본 발명의 원리 및 범위 내의 모든 변경들, 등가물들 및 변형들을 포함한다는 것을 유념하자.
상기 설명한 문제들은 레지스터 이름 재설정 하드웨어를 이용하는 대응 유닛을 이용하는 프로세서에 의해 대부분 해결된다. 대응 유닛의 다양한 실시예들은 레지스터 이름 재설정 메커니즘의 성능 및 효율성을 증가시키기 위하여 많은 기술들을 이용한다.
일 실시예에서, 대응 유닛은 내부라인(intraline) 의존성을 검출하기 위하여 명령 연산들을 스캐닝함으로써 소스 레지스터들에 가상 레지스터 번호들을 할당하도록 구성된다. 만일 의존성이 검출되지 않는 다면, 현재의 예측 상태를 나타내는 가상 레지스터 번호가 할당된다. 만일 의존성이 검출된다면, 소스 레지스터가 의존하는 이슈 위치를 나타내는 가상 레지스터 번호가 할당된다. 이후, 물리 레지스터 번호들이 가상 레지스터 번호들에 응답하여 소스 레지스터 번호들로 대응된다. 어떠한 실행에서, 물리 레지스터 번호들로의 가상 레지스터 번호들의 할당 및 가상 레지스터 번호들의 대응은 개별적인 파이프라인 단들에서 수행된다. 이로써, 레지스터 이름 재설정 메커니즘은 더 높은 클록 주파수에서 작동가능해진다. 프로세서의 성능은 더 높은 클록 주파수들이 달성할 수 있는 한도까지 증가될 수도 있다.
다른 실시예에서, 대응 유닛은 (예를 들어, 대응 격납부(map silo) 내에) 대응 유닛에 의해 처리되는 명령 연산들의 각 라인에 해당하는 현재의 예측 상태를 저장한다. 현재의 예측 상태는 명령 연산들의 라인에 대하여 레지스터 이름 재설정을 수행하기 전에 각 논리 레지스터에 할당된 물리 레지스터 번호들을 확인한다. 또한, 대응 유닛은, 논리 레지스터들이 갱신되는, 라인 갱신 논리 레지스터들 내에서의 명령 연산들의 표시, 및 명령 연산들에 할당된 물리 레지스터 번호들을 저장한다. 라인을 갖는 명령 연산들에 대한 예외 조건 검출시, 라인에 해당하는 현재의 예측 상태가 대응 격납부로부터 복구된다. 또한, 예외를 경험하는 명령 연산 이전 라인 내의 명령 연산에 해당하는 물리 레지스터 번호들이 현재의 예측 상태로 복구된다. 유익하게는, 현재의 예측 상태는 예외 검출시 신속하게 복구될 수도 있다. 예외에 응답하여 페치된 명령 연산들은 대응 유닛들 내에 도달할 때 이름이 재설정될 수도 있는데, 이는 현재의 예측 상태의 복구가 이미 완료되었기 때문이다. 이로써, 프로세서의 성능이 향상된다.
또 다른 실시예에서, 대응 유닛은 상태 코드 결과 및 정수 결과를 저장하는 데에 동일한 물리 레지스터를 이용함으로써 물리 레지스터의 효율을 향상시킬 수도 있다. 물리 레지스터를 확인하는 물리 레지스터의 번호가 상태 코드 레지스터 및 정수 레지스터에 대하여 기록된다. 물리 레지스터들을 자유롭게 사용가능하게 하여 리네임들로서 재사용될 수 있게 하기 위하여, 대응 유닛은 하나 또는 그 이상의 명령 연산들의 철회에 응답하여 제공되는 한 세트의 논리 레지스터들에 해당하는 엔트리들을 갱신하기 전에 구조적 이름 재설정 블록으로부터 이전의 리네임들을 팝한다. 팝된 물리 레지스터 번호들이 자유롭게 사용가능하게 되기 전에, 팝된 물리 레지스터들의 번호들은 구조적 이름 재설정 블록에 의해 유지되는 갱신된 구성 상태에 대하여 캠된다. 만일 캠 매치가 검출된다면, 팝된 물리 레지스터는 자유롭게 사용가능해 지지 않는다. 유익하게는, 물리 레지스터들이 좀 더 효율적으로 이용될 수도 있으며, 또한 물리 레지스터이 좀 더 정확하게 자유로이 사용가능해질 수 있다. 상태 코드 레지스터 및 정수 레지스터 이름 재설정에 관련하여 물리 레지스터들을 좀 더 효율적으로 이용하는 것에 부가하여, 레지스터들의 자유 사용을 위하여 본 메커니즘을 이용하는 다른 최적화가 가능할 수도 있다. 예를 들어, 레지스터 레지스터간 이동이 소스 물리 레지스터 번호를 목적지 물리 레지스터 번호로서 복사함으로써 이루어질 수도 있다. 본 메커니즘은 상기의 경우에서도 또한 물리 레지스터 번호의 부주의한 자유 사용을 막을 수도 있다.
프로세서 내의 물리 레지스터들을 다루는 방법이 고려된다. 제 1 물리 레지스터는 명령 연산의 목적지 오퍼랜드에 할당된다. 목적지 오퍼랜드는 논리 레지스터를 확인한다. 명령 연산은 철회된다. 명령 연산의 철회에 응답하여, 구조적 이름 재설정 블록은 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호로 갱신된다. 또한, 명령 연산의 철회에 응답하여, 제 2 물리 레지스터 번호가 구조적 이름 재설정 블록으로부터 읽혀진다. 제 2 물리 레지스터 번호는 구조적 이름 재설정 블록 내의 논리 레지스터를 나타내는 것으로부터 제 1 물리 레지스터 번호에 의해 대체된다. 제 2 물리 레지스터 번호의 자유 사용은, 제 2 물리 레지스터 번호가 구조적 이름 재설정 블록 내의 제 2 논리 레지스터를 나타낸다는 결정에 응답하여 저지된다.
메모리 맵과 구조적 이름 재설정 블록을 포함하는 프로세서가 고려된다. 대응 유닛은 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성된다. 또한, 대응 유닛은 물리 레지스터들이 할당에 대하여 자유롭게 사용가능하다는 것을 나타내는 자유사용 목록을 유지하도록 구성된다. 대응 유닛은 이 프리 유닛으로부터 제 1 물리 레지스터를 선택하도록 구성된다. 명령 연산이 철회되고 있다는 표시, 및 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합되어, 구조적 이름 재설정 블록은 명령 연산이 철회되고 있다는 표시에 응답하여, 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 해당하는 이전의 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성된다. 구조적 이름 재설정 블록은 제 1 물리 레지스터 번호를 포착한 다음, 이 제 1 물리 레지스터 번호를 명령 연산이 철회되고 있다는 표시에 응답하여 제 1 논리 레지스터에 해당 하는 것으로서 보유하도록 구성된다. 또한, 구조적 이름 재설정 블록은 제 2 물리 레지스터의 번호가 부가적으로 제 2 논리 레지스터에 해당하는 지를 결정하도록 구성된다. 대응 유닛은 제 2 물리 레지스터가 제 2 논리 레지스터를 나타내는 경우 제 2 물리 레지스터의 번호를 자유사용 목록에 부가하도록 구성된다.
프로세서 내의 물리 레지스터를 다루는 방법이 고려된다. 제 1 물리 레지스터는 명령 연산의 목적지 오퍼랜드에 할당된다. 목적지 오퍼랜드는 논리 레지스터를 확인한다. 명령 연산은 철회된다. 명령 연산에 응답하여, 구조적 이름 재설정 블록은 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호로 갱신된다. 또한, 명령 연산에 응답하여, 제 2 물리 레지스터 번호가 구조적 이름 재설정 블록으로부터 읽혀진다. 제 2 물리 레지스터 번호는 구조적 이름 재설정 블록 내의 논리 레지스터를 나타내는 것으로부터 제 1 물리 레지스터 번호에 의해 대체된다. 제 2 물리 레지스터는 자유롭게 사용가능해진다.
프로세서가 고려된다. 프로세서는 대응 유닛 및 구조적 이름 재설정 블록을 포함한다. 대응 유닛은 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성되며, 그리고 또한 물리 레지스터가 할당에 대하여 자유롭게 사용가능하다는 것을 나타내는 자유사용 목록을 보유하도록 구성된다. 대응 유닛은 자유사용 목록로부터 제 1 물리 레지스터를 선택하도록 구성된다. 명령 연산이 철회되고 있다는 표시 및 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합되어, 구조적 이름 재설정 블록은, 명령 연산이 철회되고 있다는 표시에 응답하여 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 해당하는 이전의 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성된다. 또한, 구조적 이름 재설정 블록은 제 1 물리 레지스터 번호를 포착한 다음, 이 제 1 물리 레지스터 번호를 명령 연산이 철회되고 있다는 표시에 응답하여 제 1 논리 레지스터에 해당하는 것으로서 보유하도록 구성된다.
프로세서 및 I/O 장치를 포함하는 프로세서가 고려된다. 이 프로세서는 대응 유닛 및 구조적 이름 재설정 블록을 포함한다. 대응 유닛은 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성되며, 그리고 또한 물리 레지스터들이 할당에 대하여 자유롭게 사용가능하다는 것을 나타내는 자유사용 목록을 보유하도록 구성된다. 대응 유닛은 자유사용 목록로부터 제 1 물리 레지스터를 선택하도록 구성된다. 명령 연산이 철회되고 있다는 표시 및 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합되어, 구조적 이름 재설정 블록은, 명령 연산이 철회되고 있다는 표시에 응답하여 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 해당하는 이전의 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성된다. 또한, 구조적 이름 재설정 블록은 제 1 물리 레지스터 번호를 포획한 다음, 이 제 1 물리 레지스터 번호를 명령 연산이 철회되고 있다는 표시에 응답하여 제 1 논리 레지스터에 해당하는 것으로서 보유하도록 구성된다. 대응 유닛은 제 2 물리 레지스터 번호를 자유사용 목록에 부가하도록 구성된다. 프로세서에 결합된 I/O 장치는, 컴퓨터 시스템 및 I/O 장치에 결합된 다른 컴퓨터 시스템 간을 통신하도록 구성된다.
본 발명의 다른 목적들 및 장점들은 첨부 도면을 참조하여 설명되는 하기의 상세한 설명으로부터 좀 더 명확해질 것이다.
이제 도 1을 참조하면, 프로세서(10)의 일 실시예의 블록도가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도 1의 실시예에서, 프로세서(10)는 라인 예측기(12), 명령 캐시(I-캐시)(14), 정렬 유닛(16), 분기 히스토리 테이블(18), 간접 어드레스 캐시(20), 복귀 스택(22), 디코드 유닛(24), 예측기 미스 디코드 유닛(26), 미세코드 유닛(26), 대응 유닛(30), 대응 격납부(32), 구조적 이름 재설정 블록(34), 한 쌍의 명령큐들(36A-36B), 한 쌍의 레지스터 파일들(38A-38B), 한쌍의 실행 코어들(40A-40B), 적재/저장 유닛(42), 데이터 캐시(D-캐시)(44), 외부 인터페이스 유닛(46), pc 격납부 및 리다이렉트 유닛(48) 및 명령 TLB(ITB)(50)를 포함한다. 라인 예측기(12)는 ITB(50), 예측기 미스 디코드 유닛(26), 분기 히스토리 테이블(18), 간접 어드레스 캐시(20), 복귀 스택(22), pc 격납부 및 리다이렉트 블록(48), 정렬 유닛(16) 및 I-캐시(14)에 연결된다. I-캐시(14)는 정렬 유닛(16)에 연결된다. 정렬 유닛(16)은 또한 예측기 미스 디코드 유닛(26) 및 디코드 유닛(24)에 연결된다. 디코드 유닛(24)은 또한 미세코드 유닛(28) 및 대응 유닛(30)에 연결된다. 대응 유닛(30)은 대응 격납부(32), 구조적 이름 재설정 블록(34), 명령큐들(36A-36B), 적재/저장 유닛(42), 실행 코어들(40A-40B), 및 pc 격납부 및 리다이렉트 블록(48)에 연결된다. 명령큐들(36A-36B)은 서로 연결되며, 각각의 실행 코어들(40A-40B) 및 레지스터 파일들(38A-38B)에 연결된다. 레지스터 파일들(38A-38B)은 서로 연결되며, 각각의 실행 코어들(40A-40B)에 연결된다. 실행 코어들(40A-40B)은 또한 적재/저장 유닛(42), 데이터 캐시(44) 및 pc 격납부 및 리다이렉트 유닛(48)에 연결된다. 적재/저장 유닛(42)은 pc 격납부 및 리다이렉트 유닛(48), D-캐시(44), 및 외부 인터페이스 유닛(46)에 연결된다. D-캐시(44)는 레지스터 파일들(38)에 연결되고, 외부 인터페이스 유닛(46)은 외부 인터페이스(52)에 연결된다. 본원에서 기호가 수반되는 참조 번호로 언급되는 요소들은 총체적으로 참조 번호 만으로 언급될 것이다. 예를 들어, 명령큐들(36A-36B)은 총체적으로 명령규들(36)로서 언급된다.
도 1의 실시예에서, 프로세서(10)는 가변 바이트 길이의, 복합 명령 세트 계산(CISC) 명령 세트 구조를 이용한다. 예를 들어, 프로세서(10)는 x86 명령 세트 구조(IA-32로서 또한 언급됨)를 이용할 수도 있다. 다른 실시예들은 고정된 길이의명령 세트 구조들 및 한정 명령 세트 계산(RISC) 명령 세트 구조들을 포함하는 다른 명령 세트 구조를 이용할 수도 있다. 도 1에 도시된 특정한 것들은 상기의 구성들에서 생략될 수도 있다.
라인 예측기(12)는 I-캐시(14)에 대한 페치 어드레스들을 발생시키도록 구성되며, 부가적으로 명령 연산들의 라인에 대한 정보를 정렬 유닛(16)에 제공하도록 구성된다. 일반적으로, 라인 예측기(12)는 프로세서(10)에 의해 이전에 추론적으로 페치된 명령 연산들의 라인들, 및 라인의 페치시 선택될 각 라인에 해당하는 하나 또는 그 이상의 다음 페치 어드레스들을 저장한다. 일 실시예에서, 라인 예측기(12)는 각각 명령 연산들의 한 라인을 규정하는 1K 엔트리들을 저장하도록 구성된다. 라인 예측기(12)는, 바람직한 경우, 각각 듀얼 포팅없이 동시에 읽고 갱신하는 것을 허용하는 4개의 256 뱅크들 내로 뱅크될 수도 있다.
라인 예측기(12)는 해당하는 명령 바이트들을 페치하기 위하여 I-캐시(14)에 다음 페치 어드레스를 제공한다. I-캐시(14)는 명령 바이트들을 저장하는 고속의 캐시 메모리이다. 일 실시예에 따르면, I-캐시(14)는, 예를 들어 64개의 바이트 캐시 라인들을 이용하는 256 Kbyte의 4방향 결합 구성을 포함할 수도 있다. 그러나, 모든 I-캐시 구조가 적적할 수도 있다. 또한, 다음 페치 어드레스는 명령 연산들의 행상하는 라인에 대한 정보를 페치할 수 있도록, 라인 예측기(12)의 입력으로 다시 제공된다. 다음 페치 어드레스는 pc 격납부 및 리다이렉트 유닛(48)에 보고된 예외 조건들에 응답하여 ITB(50)에 의해 제공된 어드레스에 의해 무효로 될 수도 있다.
라인 예측기에 의해 제공된 다음 페치 어드레스는 (라인이 비분기 명령 내에서 끝나는 경우) 라인 내의 마지막 명령에 연속하는 어드레스가 될 수도 있다. 변형예로서, 다음 페치 어드레스는 라인을 종료시키는 분기 명령의 목표 어드레스가 될 수도 있다. 또 다른 변형예에서, 라인은 복귀 명령에 의해 종료될 수도 있는데, 이 경우 다음 페치 어드레스는 복귀 스택(22)으로부터 나온다.
페치 어드레스에 응답하여, 라인 예측기(12)는 페치 어드레스에서 시작하는 명령 연산들의 라인에 대한 정보를 정렬 유닛(16)에 제공한다. 정렬 유닛(16)은 I-캐시(14)로부터 페치 어드레스에 해당하는 명령 바이트들을 수신하고, 제공된 명령 연산 정보에 따라 한 세트의 이슈 위치들로의 명령 바이트들을 선택한다. 좀 더 명확하게 설명하면, 라인 예측기(12)는 라인 명령 연산들 내의 각 명령에 대한 시프트량을 제공하고, 라인을 포함하는 명령 연산들의 세트에 명령들의 대응을 제공한다. 명령은 다중 명령 연산들에 해당할 수도 있으며, 이에 따라 그 명령에 해당하는 시프트량은 다중 이슈 위치들로의 명령 바이트들을 선택하는 데에 이용될 수도 있다. 이슈 위치는 라인 내의 각각의 가능한 명령 연산에 대하여 제공된다. 일 실시예에서, 명령 연산들의 라인은 6개까지의 명령들에 해당하는 8개까지의 명령 연산들을 포함할 수도 있다. 일반적으로, 본원에서 이용되는 명령 연산들의 라인은 디코드 유닛(24)에 동시에 이슈되는 한 그룹의 명령 연산들을 말한다. 명령 연산들의 라인은 마이크로프로세서(10)의 파이프라인을 통하여 명령큐들(36)로 유닛으로서 진행한다. 명령큐들(36)에 저장될 때, 개별적인 명령 연산들은 어떠한 순서로라도 실행될 수도 있다.
디코드 유닛(24) 내의 위치 위치들 (및 명령큐들(36)까지의 이후의 파이프라인 단들)은 이들 파이프라인 단들 내에서의 하드웨어에 대한 라인 내에서의 명령 연산들의 프로그램 순서를 정의한다. 정렬 유닛(16)에 의해 이슈 위치에 정렬된 명령 연산은 명령큐들(36A-36B) 내에 저장될 때 까지 그 이슈 위치 내에 머무른다. 따라서, 제 1 이슈 위치는, 제 1 이슈 위치 내의 명령 연산이 프로그램 순서에 있어서 제 2 이슈 위치 내에서 동시에 발생하는 명령 연산 이전이라면, 제 2 이슈 위치 이전인 것으로 설명될 수도 있다. 유사하게, 제 1 이슈 위치는, 제 1 이슈 위치 내의 명령 연산이 프로그램 순서에 있어서 제 2 이슈 위치 내에서 동시발생하는 명령 연산에 연속한다면, 제 2 이슈 위치에 연속하는 것으로 설명될 수도 있다. 이슈 위치들 내의 명령 연산들은 또한 라인 내의 다른 명령 연산들의 이전인 것으로, 또는 연속인 것으로서 설명될 수도 있다.
본원에서 이용되는 바와 같이, 명령 연산(또는 ROP)은 실행 코어들(40A-40B) 내의 실행 유닛이 단일 객체로서 실행되도록 구성된 연산이다. 단순한 명령들은 단일 명령 연산에 해당할 수도 있으며, 좀 더 복잡한 명령들은 다중 명령 연산들에 해당할 수도 있다. 좀 더 복잡한 명령들 중 특정한 것은 미세코드 루틴들로서 미세코드 유닛(28) 내에서 실행될 수도 있다. 또한, 비-CISC 명령 세트들을 이용하는 실시예들은 각 명령에 대하여 단일 명령 연산을 이용할 수도 있다(즉, 명령 및 명령 연산이 상기 실시예들에서 같은 뜻일 수도 있다.). 한 특정 실시예에서, 라인은 6개까지의 명령들에 해당하는 8개까지의 명령 연산들을 포함할 수도 있다. 또한, 이 특정 실시예는 분기 명령이 검출되는 경우 6개 명령들 및/또는 8개 명령 연산들 이하에서 라인을 종료할 수도 있다. 라인에 대한 명령 연산들에 대한 부가적인 한정들은 바람직한 경우에 이용될 수도 있다.
라인 예측기(12)에 의해 발생된 다음 페치 어드레스는 분기 히스토리 테이블(18), 간접 어드레스 캐시(20), 및 복귀 스택(22)으로 루트된다. 분기 히스토리 테이블(18)은 다음 페치 어드레스에 의해 확인된 라인을 종료시킬 수도 있는 조건 분기 명령에 대한 분기 히스토리를 제공한다. 라인 예측기(12)는 라인을 종료시키는 조건 분기 명령이 취해졌는지 또는 취해지지 않은 것으로 예측되어야 하는 지를 결정하기 위하여, 분기 히스토리 테이블(18)에 의해 제공된 예측을 이용할 수도 있다. 일 실시예에서, 라인 예측기(12)는 취해졌는지 또는 취해지지 않았는 지를 선택하는 데에 이용될 분기 예측을 저장할 수도 있으며, 그리고 분기 히스토리 테이블(18)은 라인 예측기 예측을 취소하고 다른 다음 페치 어드레스가 선택되게 하는 좀 더 정확한 예측을 제공하는 데에 이용된다. 간접 어드레스 캐시(20)는 빈번하게 변하는 간접 분기 타겟 어드레스들을 예측하는 데에 이용된다. 라인 예측기(12)는 다음 페치 어드레스로서 이전에 발생된 간접 타겟 어드레스를 저장할 수도 있다. 간접 어드레스 캐시(20)는, 해당하는 라인이 간접 분기 명령에 의해 종료되는 경우, 라인 예측기(12)에 의해 제공된 다음 페치 어드레스를 무효화할 수도 있다. 또한, 명령 연산들의 라인 내의 마지막 명령에 연속하는 어드레스는 라인이 서브루틴 호출 명령에 의해 종료되는 경우 복귀 스택(22) 상에 푸쉬될 수도 있다. 복귀 스택(22)은 그의 꼭대기에 저장된 어드레스를 라인 예측기(12)에, 복귀 명령에 의해 종료된 라인들에 대한 잠정적인 다음 페치 어드레스로서 제공한다.
상기 언급한 블록들에 다음 페치 어드레스 및 명령 연산 정보를 제공하는 것에 부가하여, 라인 예측기(12)는 다음 페치 어드레스 및 명령 연산 정보를 pc 격납부 및 리다이렉트 유닛(48)에 제공하도록 구성된다. pc 격납부 및 리다이렉트 유닛(48)은 페치 어드레스 및 라인 정보를 저장하며, 명령들의 규칙적인 철회 뿐 아니라 예외시 명령 페칭을 리다이렉트하는 역할을 한다. pc 격납부 및 리다이렉트 유닛(48)은 페치 어드레스, 및 프로세서(10) 내에서 아직 처리되지 않은 명령 연산들의 다중 라인들에 해당하는 명령 연산 정보를 저장하는 원형 버퍼를 포함할 수도 있다. 명령들의 라인의 철회시, pc 격납부 및 리다이렉트 유닛(48)은 각각 조건 분기 및 간접 분기의 실행에 따라서 분기 히스토리 테이블(18) 및 간접 어드레스 캐시(20)를 갱신할 수도 있다. 예외 처리시, pc 격납부 및 리다이렉트 유닛(48)은 예외-야기 명령에 연속하는 복귀 스택(22)으로부터의 엔트리들을 자유롭게 사용가능하게 할 수도 있다. 또한, pc 격납부 및 리다이렉트 유닛(48)은 예외-야기 명령의 표시를 대응 유닛(30), 명령큐들(36), 및 적재/저장 유닛(42)으로 루트시켜, 이들 유닛들이 예외-야기 명령에 연속하는 명령들을 취소하고 이에 따라 추론적인 상태를 복구할 수도 있게 한다.
일 실시예에서, pc 격납부 및 리다이렉트 유닛(48)은 시퀀스 번호(R#)를 각각의 명령 연산에 할당하여 프로세서(10) 내에서 아직 처리되지 않은 명령 연산들의 순서를 확인한다 pc 격납부 및 리다이렉트 유닛(48)은 R#을 라인을 갖는 각각의 가능한 명령 연산에 할당할 수도 있다. 만일 라인이 명령 연산들을 그의 최대 수 보다 훨씬 적게 포함한다면, 할당된 일부 R#은 그 라인에 이용되지 않을 것이다. 그러나, pc 격납부 및 리다이렉트 유닛(48)은 다음 R#의 세트를 명령 연산들의 다음 라인에 할당하고, 이에 따라 할당되었지만 사용되지 않은 R#는 명령 연산의 해당 라인이 철수될 때 까지 사용되지 않은 채로 남아있도록 구성된다. 이러한 방식에 있어서, 주어진 라인에 할당된 R#의 일부는 프로세서(10) 내의 라인을 확인하는 데에 이용될 수도 있다. 일 실시예에서, 8개의 ROPs의 최대치가 라인에 할당될 수도 있다. 따라서, 각 라인 내의 첫 번째 ROP가 8의 배수인 R#에 할당될 수도 있다. 이에 따라, 사용되지 않은 R#s은 자동으로 스킵된다.
상기에서는 다음 어드레스들을 예측하고 명령 연산들의 라인에 대한 명령 연산 정보를 제공하는 라인 예측기(12)가 설명되었다. 이러한 연산은 각 페치 어드레스가 라인 예측기(12) 내에서 히트하는 동안 일어난다. 라인 예측기(12) 내에서 미스를 검출하게 되면, 정렬 유닛(16)은 I-캐시(14)로부터의 해당하는 명령 바이트들을 예측기 미스 디코드 유닛(26)으로 루트시킨다. 예측기 미스 디코드 유닛(26)은 놓친 페치 어드레스에 의해 지정된 오프셋에서 시작되는 명령들을 디코드하고 명령 연산의 라인 정보 및 다음 페치 어드레스를 발생시킨다. 예측기 미스 디코드 유닛(26)은 프로세서(10)가 (예를 들어, 명령 연산들의 최대수 및 명령들의 최대수, 분기 명령 위에서 종료되는 등)에 대하여 설계될 때, 명령 연산들의 라인 위에서 모든 한정들을 실시한다. 라인의 디코드를 완료하게 되면, 예측기 미스 디코드 유닛(26)은 정보를 저장을 위하여 라인 예측기(12)에 제공한다. 예측기 미스 디코드 유닛(26)은 디코드되는 명령들을 디스패치하도록 구성될 수도 있다. 변형예로서, 예측기 미스 디코드 유닛(26)은 명령 라인 정보를 디코드한 다음, 이를 저장을 위해 라인 예측기(12)에 제공할 수도 있다. 이후, 잃어버린 페치 어드레스가 라인 예측기(12) 내에서 재시도될 수도 있으며, 히트가 검출될 수도 있다. 또한, 라인 예측기(12) 내의 히트가 검출될 수도 있으며, I-캐시(14) 내에서 미스가 발생할 수도 있다. 해당하는 명령 바이트들은 외부 인터페이스 유닛(46)을 통하여 페치되어 I-캐시(14)에 저장될 수도 있다.
일 실시예에서, 라인 예측기(12) 및 I-캐시(14)는 물리적인 어드레싱을 이용한다. 그러나, 예외 검출시, pc 격납부 및 리다이렉트 유닛(48)은 논리(또는 가상) 어드레스를 공급할 것이다. 따라서, 리다이렉트 어드레스들은 라인 예측기(12)로의 제시를 위하여 ITB(50)에 의해 변환된다. 또한, pc 격납부 및 리다이렉트 유닛(48)은, 가령 상대 분기 타겟 어드레스들과 같은, PC 상대 계산들에서 이용되는 가상의 예측 PC 값을 유지한다. 각 라인에 해당하는 가상의 예측 PC는, 해당하는 물리 어드레스가 라인 예측기(12)에 의해 발생된 물리 페치 어드레스와 매치하는 지를 확인하기 위하여 ITB(50)에 의해 변환된다. 만일 미스 매치가 발생한다면, 라인 예측기(12)는 정확한 물리 어드레스에 의해 갱신되며, 정확한 명령들이 페치된다. pc 격납부 및 리다이렉트 유닛(48)은 또한 보호 경계들을 넘는 페칭 등에 관련된 예외들을 처리한다. pc 격납부 및 리다이렉트 유닛(48)은 또한 가장 최근에 철회된 명령들의 어드레스를 나타내는 철회 PC 값을 유지한다.
상기 설명한 바와 같이, 디코드 유닛(24)은 다수의 이슈 위치들에서 정렬 유닛(16)으로부터 명령 연산들을 수신하도록 구성된다. 디코드 유닛(24)은 (명령 바이트들에 해당하는 명령 연산이 특정한 이슈 위치에서 발생될 것이라는 표시와 함께) 각 이슈 위치에 평행하게 정렬된 명령 바이트들을 디코드한다. 디코드 유닛(24)은 각 명령 연산에 대한 소스 및 목적지 오퍼랜드들을 확인하고, 실행 코어들(40A-40B)에 의해 이용되는 명령 연산 엔코딩을 발생시킨다. 디코드 유닛(24)은 또한 미세코드로 실행되는 명령들에 대하여 미세코드 유닛ㅋ(28)으로부터 미세코드 루틴들을 페치하도록 구성된다.
한 특정 실시예에 따르면, 다음과 같은 명령 연산들이 프로세서(10)에 의해 지원된다: 정수, (멀티미디어를 포함하는) 부동 소수점 덧셈, (멀티미디어를 포함하는) 부동 소수점 곱셈, 분기, 적재, 저장 어드레스 발생 및 저장 데이터. 각 명령 연산은 2개까지의 소스 레지스터 오퍼랜드들 및 한 개의 목적지 레지스터 오퍼랜드를 이용할 수도 있다. 한 특정 실시예에 따르면, 단일 목적지 레지스터 오퍼랜드가 정수 ROPs에 할당되어, 정수 결과 및 조건 코드(또는 플래그들) 갱신을 저장할 수도 있다. 해당하는 논리 레지스터들은 정수 연산의 철회시 해당하는 PR#을 수신할 것이다. 특정한 명령들은 (예를 들어, ESP 및 지정된 목적지 레지스터를 갱신하는) 두 개의 목적지 레지스터들을 갱신하기 위하여 동일한 타입의 두 개의 명령 연산들을 발생시킬 것이다.
디코드된 명령 연산들과 소스 및 목적지 레지스터 번호들이 대응 유닛(30)에 제공된다. 대응 유닛(30)은 물리 레지스터 번호들(PR#s)을 각 명령 연산의 각각의 목적지 레지스터 오퍼랜드 및 소스 레지스터 오퍼랜드에 할당함으로써 레지스터 이름 재설정을 수행하도록 구성된다. 물리 레지스터 번호들은 레지스터 파일들(38A-38B) 내의 레지스터들을 확인한다. 또한, 대응 유닛(30)은 큐 번호(IQ#)를 각 명령 연산에 할당하여, 명령 연산을 저장하기 위해 할당된 명령큐들(36A-36B) 내의 위치를 확인한다. 대응 유닛(30)은 또한, 명령 연산의 소스 오퍼랜드에 할당된 각각의 물리 레지스터 번호를 갱신하는 명령들의 큐 번호들을 제공함으로써 각 명령 연산에 대한 의존성들의 표시를 제공한다. 대응 유닛(30)은 물리 레지스터 번호들, 및 (해당하는 논리 레지스터 번호들 뿐 아니라) 각 명령 연산에 할당된 번호들에 대한 명령에 의해 대응 격납부(32)를 갱신한다. 또한, 대응 격납부(32)는, 명령들의 라인 및 pc 격납부에 대한 명령들의 라인을 확인하는 R# 전에, 논리 레지스터들에 해당하는 예측 상태를 저장하도록 구성될 수도 있다. 상기 설명된 pc 격납부와 유사하게, 대응 격납부(32)는 엔트리들의 원형 버퍼를 포함할 수도 있다. 각 엔트리는 명령 연산들중 한 라인에 해당하는 정보를 저장하도록 구성될 수도 있다.
대응 유닛(30) 및 대응 격납부(32)는 또한 pc 격납부(48)로부터 철회 표시를 수신하도록 구성될 수도 있다. 명령 연산들의 라인 철회시, 대응 격납부(32)는 라인에 할당된 목적지 물리 레지스터 번호들 및 해당하는 논리 레지스터 번호들을 저장을 위하여 구조적 이름 재설정 블록들(34)에 전달한다. 구조적 이름 재설정 블록(34)은, 각 논리 레지스터에 대하여 전송된 레지스터 상태를 나타내는, 각 논리 레지스터에 해당하는 물리 레지스터 번호를 저장한다. 새로운 물리 레지스터 번호로 해당하는 논리 레지스터를 갱신할 때, 구조적 이름 재설정 블록(34)으로부터 교체된 물리 레지스터 번호들은 이후 명령들로의 할당을 위하여 물리 레지스터 번호들의 자유사용 목록로 복귀된다. 일 실시예에서, 물리 레지스터 번호를 자유사용 목록로 복귀시키기 전에, 물리 레지스터 번호들은 구조적 이름 재설정 블록(34) 내에 남아있는 물리 레지스터 번호들과 비교된다. 만일 물리 레지스터 번호가 교체된 후에도 구조적 이름 재설정 블록(34) 내에 여전히 표현된다면, 물리 레지스터 번호는 자유사용 목록에 부가되지 않는다. 이러한 실시예들은 동일한 물리 레지스터 번호가 하나 이상의 명령 결과를 저장하는 데에 이용되는 경우에 이용될 수도 있다. 예를 들어, x86 명령 세트 구조를 이용하는 실시예는 부동 소수점 오퍼랜드들을 저장하기에 충분히 큰 물리 레지스터들을 제공할 수도 있다. 이러한 방식에서는, 모든 물리 레지스터가 모든 타입의 오퍼랜드를 저장하는 데에 이용될 수도 있다. 상기 실시예에서, 프로세서(10)는 정수 결과 및 명령의 조건 코드 결과를 저장하기 위하여 단일의 물리 레지스터를 할당할 수도 있다. 물리 레지스터에 해당하는 조건 코드 결과를 오버라이트하는 명령의 이후의 철회는 동일한 정수 레지스터를 갱신하지 않을 수도 있으며, 이에 따라 물리 레지스터는 새로운 조건 코드 결과 전송시 자유롭게 되지 않을 수도 있다. 유사하게, 물리 레지스터에 해당하는 정수 레지스터를 갱신하는 명령의 이후의 철회는 조건 코드 레지스터를 갱신하지 않을 수도 있으며, 이에 따라 물리 레지스터는 새로운 전정수 결과 전송시 자유롭게 되지 않을 수도 있다.
또한, 대응 유닛(30) 및 대응 격납부(32)는 pc 격납부(48)로부터 예외 명령들을 수신하도록 구성된다. 예외-야기 명령 연산을 포함하는 라인에 연속하는 명령 연산들의 라인들은 대응 격납부(32) 내에서 무효한 것으로 표시된다. 명령 연산들의 이후 라인들에 해당하는 물리 레지스터 번호들은 철회를 위해 해당 라인들을 선택할 때 자유롭게 사용가능해지며 (그리고, 구조적 이름 재설정 블록(34)은 무효화된 목적지 레지스터들에 의해 갱신되지 않는다). 또한, 대응 유닛(30)에 의해 유지되는 예측 레지스터 상태는 예외-야기 명령에 해당하는 예측 레지스터 상태로 복귀된다.
명령 연산들의 라인, 소스 물리 레지스터 번호들, 소스 큐 번호들, 및 목적지 물리 레지스터 번호들은 대응 유닛(30)에 의해 할당된 큐 번호들에 따라 명령큐들(36A-36B)에 저장된다. 일 실시예에 따르면, 명령큐들(36A-36B)은 대칭이며, 모든 명령들을 저장할 수 있다. 또한, 특정한 명령 연산에 대한 의존성들은 어떠한 명령큐에 저장된 다른 명령 연산들에 대하여 발생될 수도 있다. 예를 들어, 대응 유닛(30)은 명령큐들(36A-36B)중 하나에 명령 연산들의 라인을 저장하고, 명령큐들(36A-36B)중 다른 하나에 명령 연산들의 다음 라인을 저장한다. 명령 연산은, 명령 연산이 종속적인 이전의 명령 연산들이 실행되고 레지스터 파일들(38A-38B)을 갱신시키며 (그리고 명령 연산이 실행에 대하여 스케쥴링될 때 까지) 적어도 명령큐들(36A-36B)에 남는다. 일 실시예에서, 명령 연산들은 철회될 때 까지 명령큐들(36A-36B)에 남는다.
실행을 위한 특정한 명령 연산의 스케쥴링시, 명령큐들(36A-36B)은 특정한 명령 연산이 레지스터 파일들(38A-38B)을 갱신하게 될 클록 주기를 결정한다. 실행 코어들(40A-40B) 내의 다른 실행 유닛들은 다른 수의 파이프라인 단들 (및 이에 따라, 다른 레이턴시들)을 이용할 수도 있다. 또한, 특정한 명령들은 다른 것들 보다도 파일프라인 내에서 더 많은 레이턴시를 경험할 수도 있다. 따라서, (클록 주기들의 수 내에서) 특정한 명령 연산에 대한 레이턴시를 측정하는 카운트다운이 발생된다. 명령큐들(36A-36B)은 갱신이 일어날 때 까지 지정된 수의 클록 주기들을 기다인 다음, 특정한 명령 연산에 의존하는 명령이 스케쥴링될 수도 있음을 나타낸다. 각 명령큐들(36A-36B)은 명령큐 내의 명령 연산들에 대한 카우트다운을 유지하며, 카운트다운의 종료시 의존적인 명령 연산들의 스케쥴링을 내부적으로 허용한다. 또한, 명령큐는 카운트다운의 종료시 다른 명령큐에 대한 표시들을 제공한다. 이후, 다른 명령큐는 의존성 명령 연산들을 스케쥴링할 수도 있다. 다른 명령큐에 대한 명령 연산 종료의 이러한 지연된 전송은 레지스터 파일들(38A-38B)이 실행 코어들(40A-40B)중 하나에 의해 제공되는 결과들을 다른 레지스터 파일로 전송할 수 있게 한다. 각각의 레지스터 파일들(38A-38B)은 프로세서(10)에 의해 이용되는 물리 레지스터들의 세트를 구현하며, 실행 코어들(40A-40B)중 하나에 의해 갱신된다. 이후, 갱신들은 다른 레지스터 파일로 전송된다. 명령큐들(36A-36B)은, 일단 그의의존성이 만족스러워졌을 때 (즉, 큐 내에서의 순서에 있어서 순서를 벗어날 때) 명령을 스케쥴링할 수도 있음을 유념하자.
명령큐(30A)로부터 스케쥴링된 명령 연산들은 레지스터 파일(38A)로부터 소스 물리 레지스터 번호들에 따라 소스 오퍼랜드들을 읽으며, 실행을 위하여 실행 코어(40A)에 전달된다. 실행 코어(40A)는 명령 연산을 실행시키며, 레지스터 파일(38A) 내의 목적지에 할당된 물리 레지스터를 갱신한다. 어떠한 명령 연산들은 목적지 레지스터들을 갖지 않으며, 이러한 경우 실행 코어(40A)는 목적지 물리 레지스터를 갱신하지 않는다. 또한, 실행 코어(40A)는 명령 연산의 R# 및 (만일 있다면) 명령 연산에 대한 예외 정보를 pc 격납부 및 리다이렉트 유닛(48)에 보고한다. 명령큐(36B), 레지스터 파일(38B), 및 실행 코어(40B)는 동일한 방식으로 작동한다.
일 실시예에서, 실행 코어(40A) 및 실행 코어(40B)는 대칭적이다. 각각의 실행 코어(40)는, 예를 들어 부동 소수점 덧셈 유닛, 부동 소수점 곱셈 유닛, 두 개의 정수 유닛, 분기 유닛, 적재 어드레스 발생 유닛, 저장 어드레스 발생 유닛, 및 저장 데이터 유닛을 포함할 수도 있다. 실행 유닛들의 다른 구성들이 가능하다.
목적지 레지스터들을 갖지 않는 명령 연산들을 중에는 저장 어드레스 발생, 저장 데이터 연산들, 및 분기 연산들이 있다. 저장 어드레스/저장 데이터 연산들은 결과들을 적재/저장 유닛(42)에 제공한다. 적재/저장 유닛(42)은 메모리 데이터 연산들을 수행하기 위한 D-캐시(44)로의 인터페이스를 제공한다. 실행 코어들(40A-40B)은 명령들의 어드레스 오퍼랜드들을 기초로, 적재 ROPs 및 저장 어드레스 ROPs를 실행시켜 적재 및 저장 어드레스를 각각 발생시킨다. 좀 더 명확하게 설명하면, 적재 어드레스들 및 저장 어드레스들은, (실행 코어들(40A-40B) 및 D-캐시(44) 간의 결합을 직접 경유하여) 실행 코어들(40A-40B)을 실행시켜 발생될 때, D-캐시(44)로 전달된다. D-캐시(44) 내에서 히트하는 적재 어드레스들은 데이터가 D-캐시(44)로부터 레지스터 파일들(38)로 루트되게 한다. 반면에, 히트의 저장 어드레스들은 저장큐 엔트리로 할당된다. 이후, 저장 데이터는 (데이터를 레지스터 파일들(38A-38B)로부터 적재/저장 유닛(42)으로 루트시키는 데에 이용되는) 저장 데이터 명령 연산에 의해 제공된다. 저장 명령의 철회시, 데이터는 D-캐시(44)에 저장된다. 또한, 적재/저장 유닛(42)은, (외부 인터페이스(46)를 통하여) 이후의 캐시 파일들에 대한 D-캐시(44)를 잃어버린 적재/저장 연산들을 적재/저장 어드레스들을 저장하고, 잃어버린 적재/저장 연산들을 재시도하는 적재/저장 버퍼를 포함할 수도 있다. 적재/저장 유닛(42)은 또한 적재/저장 메모리 의존성들을 처리하도록 구성된다.
이제 도 2를 참조하면, 대응 유닛(30), 대응 격납부(32), 및 구조적 이름 재설정 블록(34)의 일 실시예의 블록도가 도시되는데, 이는 프로세서(10)의 일 실시예에 따른 이들 간의 상호 연결을 강조한다. 바람직한 경우, 부가적인, 대용의, 또는 보다 적은 상호연결을 이용하는 다른 실시예들이 또한 가능하며 고려된다.
디코드 유닛(24)은, 대응 유닛(30) 및 대응 격납부(32)에 연결된 ROP 정보 버스(60)에 연결된다. 명령 연산들의 라인(또는 ROPs의 라인)에 관련된 정보는 디코드 유닛(24)에 의해 ROP 정보 버스(60) 위에 제공된다. 라인 내의 각각의 ROP에 대하여, 디코드 유닛(24)은 유효 표시, ROP가 목적지 레지스터를 라이트했는 지의 표시, R#, 논리 목적지 레지스터 번호, 및 논리 소스 레지스터 번호들(2개까지) 중에서 적어도 하나를 제공한다. 대응 유닛(30)은 각각의 ROP에 IQ#를 할당하고, 목적지 레지스터를 라이트하는 각각의 ROP에 PR#를 할당한다. 대응 유닛(30)은 할당된 PR# 및 IQ#를 목적지 PR#IQ# 버스(62)를 통하여 대응 격납부(32)에 제공한다. 또한, 대응 유닛(30)은 현재의 예측 레지스터 상태 버스(64)를 통하여 현재의 예측 레지스터 상태를 대응 격납부(32)에 제공한다. 일반적으로, "예측 레지스터 상태"란 용어는 프로그램 시퀀스의 실행시 (즉, 프로그램 시퀀스에서 특정한 지점 이전에 각 명령의 실행에 연속하여, 그리고 프로그램 시퀀스 내에서 특정한 지점에 연속하는 각 명령의 실행 이전에) 특정한 포인트에서 논리 레지스터들의 상태(즉, 그 내에 저장된 값들)를 확인하는 것을 말한다. 현재의 예측 레지스터 상태는 대응 유닛(30)에 의해 처리되고 있는 ROPs의 라인 이전의 논리 레지스터들에 해당하는 물리 레지스터들의 세트를 확인한다. 즉, 현재의 예측 레지스터 상태는 각 논리 레지스터에 해당하는 물리 레지스터 번호를 저장한다. 또한, 본 실시예에서, 현재의 예측 레지스터 상태는 확인된 물리 레지스터를 갱신하는 명령의 IQ#와, 이 IQ#가 여전히 유효한 지를 (즉, 명령이 아직 철회되지 않았는 지를) 나타내는 유효 비트를 포함한다. 대응 격납부(32)는 ROPs의 라인에 대한 엔트리를 할당하고, 현재의 예측 레지스터 상태와 대응 유닛(30)에 의해 제공된 할당된 PR#s 및 IQ#s를 저장한다. 또한, 대응 격납부(30)는 ROPs가 유효한 지를 포획하는데, 이 ROPs는 논리 레지스터들을 갱신하며, 이 논리 레지스터들은 ROP 정보 버스(60)로부터의 ROPs에 의해 갱신된다. 예시적인 대응 격납부 엔트리는 하기에 도시된다(도 9).
일반적으로, 본원에서 "격납부"란 말은 명령, 명령 연산, 또는 명령 연산들의 라인에 해당하는 정보를 저장하는 구조를 말한다. 격납부는 프로그램 순서에 있어서의 정보를 유지하며, 명령은, 명령이 (예외 조건들의 부재시) 프로그램 순서에서 철회될 때, 격납부의 꼭대기(또는 꼬리)로부터 격납부의 바닥(또는 헤드)으로 논리적으로 이동한다. 본원에서 이용되는 바와 같이, 명령은 (예를 들어, 명령의 목적지에 할당된 물리 레지스터 번호에 의해 구조적으로 구조적 이름 재설정 블록(34)을 갱신하도록 함으로써, 또는 명령에 해당하는 저장 데이터에 의한 D-캐시(44)의 갱신을 허용함으로써) 명령의 결과가 구조적인 상태로 전달될 때 철회된다.
대응 격납부(32)는 철회 유효 라인(66)을 통하여 철회 유효 신호를 수신하고, 그리고 예외 정보 버스(68)를 통하여 예외 유효 표시 및 R#를 수신하도록 연결된다. 철회 유효 라인(66) 및 예외 정보 버스(68)는 pc 격납부(48)에 연결된다. 표명된 철회 유효 신호에 응답하여, 대응 격납부(32)는 철회된 레지스터 정보를 철회 레지스터/PR# 버스(70)를 통하여 격납부의 헤드에 있는 엔트리로부터 구조적 이름 재설정 블록(34)에 제공한다. 좀 더 명확하게 설명하면, 철회 레지스터/PR# 버스(70)는 갱신될 논리 레지스터 번호 및 해당하는 물리 레지스터 번호를 전달할 수도 있다. 본 실시예에서, ROPs의 철회는 완전한 라인에 대하여 동시에 일어난다(즉, pc 격납부(48)는 pc 격납부(48) 및 대응 격납부(32)의 헤드에 있는 라인 내의 각 ROPs가 일단 성공적으로 실행되면, pc 격납부(48)는 철회 신호를 보낸다. 따라서, 본 실시예에서는 가장 오래된 라인에 대한 철회 신호가 이용될 수도 있다. 부분적인 철회에 대한 다른 실시예들이 제공될 수도 있으며, 개별적인 명령 연산을 통하여 저장 장치를 구성할 수도 있는데, 이러한 경우에 있어서의 철회는 명령 연산 등에 의해 일어날 수도 있다.
철회 레지스터/PR# 버스(70)를 통하여 지정된 논리 레지스터들에 해당하는 엔트리들을 갱신하기 전에, 구조적 이름 재설정 블록(34)은 상기 논리 레지스터들에 해당하는 현재의 물리 레지스터 번호들을 읽는다. 즉, 구조적 이름 재설정 블록(34)으로부터 비롯된 물리 레지스터 번호들("이전의 물리 레지스터 번호들")은 구조적 이름 재설정 블록(34)으로부터 팝된다. 구조적 이름 재설정 블록(34)은 대응 유닛(30)에 연결된 이전의 PR# 버스(72)를 통하여 이전의 PR#s를 제공하고, 지정된 논리 레지스터 엔트리들을 철회 레지스터/PR# 버스(70)를 통하여 제공된 PR#에 의해 갱신한다.
일반적으로, 이전의 PR#는 PR#s의 자유사용 목록에 부가되기에 (그리고 연속적인 ROP의 목적지 레지스터로의 할당에) 적절하다. 그러나, 본 실시예에서, 프로세서(10)는 물리적인 레지스터 이용의 효율을 개선하기 위하여 물리적인 레지스터 공유 기술을 이용한다. 예를 들어, 물리적인 레지스터는 정수값 및 조건 코드값(또는 플래그 값)을 저장하도록 할당될 수도 있다. 일부 물리적인 레지스터 저장 장치는 정수값을 저장하며, 다른 것들은 조건 코드값을 저장한다. 따라서, 예를 들어 PR#가 할당되었던 정수 레지스터의 갱신시, 이전의 PR#가 팝될 때, PR#는 여전히 그 내에 저장된 조건 코드들을 나타낼 수도 있다(반대의 경우도 마찬가지이다). 구조적 이름 재설정 블록(34)은 이전의 PR#를 갱신된 구성 상태와 비교하여, 레지스터들이 실질적으로 자유롭게 사용되기에 적절한 지를 결정한다(다른 실시예들이 한 클록 주기 내에서 갱신 및 비교를 달성할 수도 있음에도 불구하고, 이전의 PR# 버스(72)로부터 PR#s를 포획하고 포획된 번호들을 구조적 이름 재설정 블록(34)으로 복귀시키는 레지스터(75)에 의해 도 2에 도시됨). 예를 들어, 구조적 이름 재설정 블록(34)은 논리 레지스터들에 해당하는 PR#s를 저장하기 위한 내용 번지화 메모리(CAM)를 이용한다. 구조적 이름 재설정 블록(34)은 이전의 PR# 버스(72)를 통하여 전달된 각각의 PR#에 해당하는 캠 매치 버스(74)를 통하여 캠 매치 신호를 전달할 수도 있다. 대응 유닛(30)은 해당하는 캠 매치 신호가 표명되지 않은 경우 이전의 PR# 버스(72)를 통하여 지정된 레지스터들을 자유롭게 사용할 수도 있다. 유익하게는, 물리적인 레지스터의 이용이 더 효율적이 될 수도 있으며, 그럼에도 불구하고 물리적인 레지스터들은 자유롭게 사용될 수도 있다. 고려되는 다른 실시예들에서는, 개별적인 물리 레지스터들이 명령 연산에 응답하여 갱신된 각각의 논리 레지스터에 할당될 수도 있다는 것을 유념하자.
이전의 PR#가 구조적 이름 재설정 블록(34)으로부터 팝될 때 자유롭게 사용되지 못하는 경우, 여전히 이전 PR#에 의해 표현되는 논리 레지스터를 갱신시키는 명령의 이후의 철회는 이전 PR#을 자유롭게 사용할 수도 있다는 것을 유념하자. 이후의 철회시, 캠 매치는 검출되지 않을 수도 있다.
본원에서와 같이, 물리 레지스터는 이름 재설정 하드웨어에 의해 처리되고 있는 명령의 목적지 오퍼랜드로의 할당에 대하여 유용해지는 경우에 "자유롭게 사용가능해진다". 본 실시예에서, 물리 레지스터는 물리 레지스터가 할당되는 논리 레지스터를 갱신하는 이후 명령의 철회시 자유롭게 사용가능해 진다. 다른 실시예들은 변형적인 방법들로 레지스터를 자유롭게 사용할 수도 있다.
라인 내의 하나 또는 그 이상의 명령 연산들이 동일한 논리 레지스터를 갱신할 수도 있음을 유념하자. 따라서, 대응 격납부(32) 또는 구조적 이름 재설정 블록(34) 중 하나는 각 논리 레지스터에 대한 가장 오래된 갱신(즉, 프로그램 순서에 있어서 마지막 갱신)을 확인하기 위하여 철회되는 논리 레지스터들을 스캔하는 로직을 포함하며, 그리고 구조적 이름 재설정 블록(34) 내에서의 가장 오래된 갱신에 해당하는 물리 레지스터 번호를 저장한다. 더 새로운 갱신은 상기 설명과 유사하게 자유롭게 사용가능해질 수도 있다(즉, 어떠한 매치도 일어나지 않는 경우 캠되고 자유롭게 사용가능해 진다).
대응 격납부(32)는 물론 pc 격납부(48)로부터 예외 표시를 수신할 수도 있다. pc 격납부(48)는 예외 유효 신호를 표명하고, 예외를 경험하는 명령의 R#를 예외 정보 버스(68)를 통하여 대응 격납부(34)에 제공할 수도 있다. 대응 격납부(32)는 (라인 내의 각 ROP에 대하여 일정한 일부 R#를 이용하여) 예외를 경험하는 명령 연산을 포함하는 ROPs의 라인에 해당하는 격납부 엔트리를 선택한다. 대응 격납부(32)는 예측 레지스터 상태 버스(76)의 복구시, 선택된 엔트리 내에 저장된 현재의 예측 레지스터 상태를 대응 유닛(30)에 제공한다. 대응 유닛(30)은 예측 레지스터 상태를 복구된 상태로 되돌린다. 또한, 대응 격납부(32)는 논리 레지스터 번호들, PR#s, 및 라인 내의, 하지만 예외를 경험하는 ROP 이전의 ROPs의 IQ#s를 제공한다. 대응 유닛(30)은 제공된 PR# 및 IQ#s를 이용하여 복구된 예측 상태를 갱신한다. 유익하게는, 예측 상태는 신속하게 복구된다. 예외 조건에 응답하여 페치된 명령들은 이름 재설정의 신속한 복구로 인해 대응 유닛(30)에 도달할 때 이름이 재설정될 수도 있다.
또한, 예외에 응답하여, 예외를 경험하는 ROP 이후의 ROPs에 할당된 물리 레지스터들이 자유롭게 사용가능해 진다. 대응 격납부(32)는 프리 PR# 버스(78) 상에서 자유롭게 사용가능하게 될 PR#s를 대응 유닛(30)으로 전달한다. 일 실시예에서, 대응 격납부(32)는 PR#s가 클록 주기당 한 라인의 속도로 자유롭게 사용가능하도록 구성될 수도 있다. 또한, 물리적인 레지스터가 할당되었던 ROPs가 철회되지 않았기 때문에, 물리 레지스터들은 캠을 위하여 구조적 이름 재설정 블록(34)으로 전달될 필요가 없다.
이제 도 3을 참조하면, 대응 유닛(30)의 블록도가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도 3의 실시예에서, 대응 유닛(30)은 레지스터 스캔 유닛(80), IQ/PR# 제어 유닛(82), 예측 레지스터 상태(84), 가상/물리 레지스터 대응 유닛(86), 자유사용 목록 제어 유닛(88), 및 자유사용 목록 레지스터(90)를 포함한다. 레지스터 스캔 유닛(80)은 (도 2에 도시된 ROP 정보 버스(60)의 일부인) 버스(60A)를 통하여 디코드 유닛(24)으로부터 소스 및 목적지 레지스터 번호들과 (각각에 대한 유효 표시를) 수신하도록 연결된다. 레지스터 스캔 유닛(80)은 목적지 레지스터 번호들 및 소스 가상 레지스터 번호들을 가상/물리 레지스터 대응 유닛(86)으로 전달하도록 구성된다. IQ#/PR# 제어 유닛(82)은 (도 2에 도시된 ROP 정보 버스(60)의 일부인) 버스(60B)를 통하여 버스에 연결되어, 목적지 레지스터 번호들 및 목적지 레지스터 번호들에 해당하는 유효 표시를 수신한다. 명령큐들(36A-36B)은 꼬리 포인터 버스(92)를 통하여 꼬리 포인터들을 제공하는데, 이는 각 큐 내의 엔트리가 현재 그 큐의 꼬리인 지를 나타낸다. 또한, IQ#/PR# 제어 유닛(82)은 목적지 PR#/IQ# 버스(62)에 접속된다. 가상/물리 레지스터 대응 유닛(86)은 예측 레지스터 상태 버스(76) 및 예측 레지스터 상태(84)에 연결되며, 이 예측 레지스터 상태(84)는 현재의 예측 레지스터 상태 버스(64)에 연결된다. 또한, 가상/물리 레지스터 대응 유닛(86)은 소스 PR#s, 소스 IQ#s, 목적지 PR#s, 및 소스/목적지 PR# 및 IQ# 버스(94)위 라인 내의 각 ROP에 대한 IQ#를 명령큐들(36A-36B)에 제공하도록 연결된다. 자유사용 목록 제어 유닛(88)은 다음 프리 PR# 버스(96) 및 할당된 PR# 버스(99)를 통하여 IQ#/PR# 제어 유닛(82)에 연결되며, 자유사용 목록 레지스터(90)에 연결된다. 또한, 자유사용 목록 제어 유닛(88)은 이전 PR# 버스(72), 캠 매치 버스(74), 및 프리 PR# 버스(78)에 연결된다.
도 3의 실시예에서, 대응 유닛(30)은 두 개의 저장 장치 파이프라인 디자인을 이용하여 레지스터 이름 재설정을 수행한다. 첫 번째 단에서는, 레지스터 스캔 유닛(80)은 각 소스 레지스터에 가상 레지스터 번호들을 할당한다. 동시에, IQ#/PR# 제어 유닛(82)은 (명령큐들(36A-36B)에 의해 제공된 꼬리 포인터들을 기초로 하여) IQ#s를 각 ROP에 할당하고, PR#s를 목적지 레지스터를 갖는 ROPs에 할당한다. 두 번째 단에서는, 가상/물리 레지스터 대응 유닛(86)이 (현재의 예측 상태 및 할당된 PR#s을 기초로 하여) 가상 레지스터 번호들을 물리 레지스터 번호들에 대응하고, IQ#/PR# 제어 유닛(82)에 의해 할당된 물리 레지스터 번호들을 해당하는 ROP의 이슈 위치로 루트시킨다.
레지스터 스캔 유닛(80)에 의해 할당된 가상 레지스터 번호들은 물리 레지스터 번호에 대한 소스를 확인한다. 예를 들어, 본 실시예에서, 소스 레지스터들에 해당하는 물리 레지스터 번호들은 (대응 유닛(30)에 의해 이전에 처리된 ROPs의 라인들에 해당하는 갱신들을 나타내는) 예측 레지스터 상태(84) 또는 (이전 ROP의 목적지 오퍼랜드가 소스 오퍼랜드와 같은 경우, 즉 내부라인 의존성이 존재하는 경우에는) ROPs의 라인 내의 이전 이슈 위치로부터 얻어질 수도 있다. 즉, 소스 레지스터 번호에 해당하는 물리 레지스터 번호는 내부라인 의존성이 검출되지 않는 경우 예측 레지스터 상태(84)에 의해 보유되는 물리 레지스터 번호이다. 레지스터 스캔 유닛(80)은 내부라인 의존성 체킹을 효율적으로 수행한다. 다른 실시예들은 바람직한 경우 소스 오퍼랜드들의 다른 소스들을 제공할 수도 있다.
물리 레지스터 번호 대응으로부터 파이프라인 단들로의, 내부라인 의존성 체킹/목적지 물리 레지스터 할당을 분리함으로써, 각 단은 더 높은 주파수에서 작동할 수도 있게 된다. 따라서, 도 3에 도시된 대응 유닛(30)의 실시예는 소스 물리 레지스터 번호들의 결정과 함께 내부라인 의존성 체킹 및 목적지 물리 레지스터 할당을 수행하는 다른 실시예들 보다 더 높은 주파수에서 작동가능할 수도 있다. 가상 레지스터 번호들을 이용함으로써, 기능들의 분리를 허용하며, 그리고 하기의 도 8에 도시된 바와 같이, 비교적 단순하고 효과적인 소스 물리 레지스터 번호들의 대응을 허용한다.
IQ#/PQ# 제어 유닛(82)은 명령큐들(36A-36B)중 하나의 꼬리 포인터를 시작으로 명령큐 번호들을 할당한다. 다시 말해, 라인 내의 첫 번째 ROP는 IQ#로서 선택된 명령큐의 꼬리 포인터를 수신하고, 나머지 ROPs는 꼬리 포인터로부터 증가하는 순서로 IQ#를 수신한다. IQ#/PQ# 제어 유닛(82)은 라인 내의 각각의 ROPs를 동일한 명령큐들(36A-36B)로 할당하고, ROPs의 다음 라인을 나머지 명령큐들(36A-36B)에 할당한다. IQ#/PQ# 제어 유닛(82)은 할당된 ROPs의 번호의 표시를 ROP 할당 버스(98)를 통하여 명령큐들(36A-36B)에 전달한다. 이로써, 수신 명령큐는 그의 꼬리 포인터를 갱신하여 그 큐에 대한 ROPs의 할당을 나타낼 수도 있다.
IQ#/PQ# 제어 유닛(82)은 그의 자유사용 목록 제어 유닛(88)으로부터 프리 PR#s의 세트를 수신한다. 프리 PR#s의 세트는 명령 연산들의 라인 내의 목적지 레지스터들에 할당된다. 일 실시예에서, 프로세서(10)는 라인 내의 논리 레지스터 갱신들의 수를 4개로 한정한다(즉, 예측기 미스 디코드 유닛(26)이 다섯 번째 논리 레지스터 갱신을 만난다면, 라인은 이전 명령에서 종료된다). 이에 따라, 자유사용 목록 제어 유닛(88)은 자유사용 목록(90)로부터 네 개의 PR#s를 선택하고, 선택된 레지스터들을 다음 프리 RP# 버스(96)를 통하여 제어 유닛(82)으로 전달한다. 제어 유닛(82)은 할당된 PR# 버스(99)를 통하여 실질적으로 할당되었던 PR#s와 응답하며, 그리고 자유사용 목록 제어 유닛(88)은 자유사용 목록로부터 할당된 물리 레지스터들을 삭제한다. 다른 실시예들은, 어떠한 한정도 없는 것(즉, 각 ROP가 갱신될 수도 있다)을 포함하여, 라인 내의 갱신들의 수에 대한 다른 한정들을 이용할 수도 있다.
자유사용 목록 제어 유닛(88)은 물리 레지스터들의 자유화를 조종하고, 이후 명령들로의 할당에 대하여 레지스터들을 선택하도록 구성된다. 자유사용 목록 레지스터(90)는, 예를 들어 각 물리 레지스터에 해당하는 비트를 저장할 수도 있다. 비트가 세트되면, 해당하는 레지스터는 자유롭게 사용가능해 진다. 비트가 제거되면, 해당하는 레지스터는 할당된다(즉, 자유롭게 사용가능해지지 않는다). 자유사용 목록 제어 유닛(88)은 자유사용 목록을 스캔하여 제어 유닛(82)으로 전달하기 위한 레지스터들을 선택한다. 예를들어, 자유사용 목록 제어 유닛(88)은 자유사용 목록 레지스터(90)의 각 끝으로부터 첫 번째 두 개의 프리 레지스터들을 스캔하여 본 실시예에서 제공되는 네 개의 레지스터들을 신속하게 선택할 수 있게 한다. 이러한 스캔들은 각 끝으로부터 두 개를 선택하여 한 연산을 하게 한다(하나는 다른 것 전에 수행되고 할당된 물리 레지스터를 자유사용 목록로부터 제거한다).
자유사용 목록 제어 유닛(88)은 이전의 PR# 버스(72)를 통하여 구조적 이름 재설정 블록(34)으로부터 팝된 이전의 물리 레지스터 번호들을 수신한다. 이후, 각각의 이전 물리 레지스터 번호에 해당하는 캠 매치 신호들이 캠 매치 버스(74)를 통해 수신된다. 해당하는 캠 매치 신호가 디어서트(deassert)되는 각각의 이전 PR#가 자유사용 목록 제어 유닛(88)에 부가된다. 또한, 프리 RR# 버스(78)를 통하여 수신된 물리 레지스터 번호들은 자유사용 목록에 무조건적으로 부가된다.
예측 레지스터 상태(84)는 가상/물리 레지스터 대응 유닛(86)에 제시되는 ROPs의 라인에 해당하는 갱신들 이전에 예측 레지스터 상태를 저장한다. 좀 더 명확하게 설명하면, 예측 레지스터 상태(84)는 각각의 논리 레지스터에 해당하는 물리 레지스터 번호, 및 (본 실시예에서는) 목적지 레지스터로서 할당된 물리 레지스터 번호를 갖는 ROP에 해당하는 명령큐 번호를 저장한다. 각 클록 주기 마다, 예측 레지스터 상태(84)는 현재의 예측 레지스터 상태 버스(64)를 통하여 현재의 예측 레지스터 상태를 대응 격납부(32)에 전달한다. 가상/물리 레지스터 대응 유닛(86)은 PR#의 소스가 예측 레지스터 상태(84)임을 나타내는 가상 레지스터 번호를 갖는 각 소스 레지스터에 대한 예측 레지스터 상태(84)에 의해 표시되는 해당하는 논리 레지스터의 PR# 및 IQ#를 공급한다. 가상 레지스터 번호가 이전 이슈 위치를 나타내는 소스 레지스터들은 제어 유닛(82)에 의해 할당된 해당하는 PR# 및 IQ#를 공급한다. 또한, 가상/물리 레지스터 대응 유닛(86)은 ROPs의 라인에 의해 재정된 논리 목적지 레지스터들 및 제어 유닛(82)에 의해 할당된 목적지 PR#s/IQ#s에 따라서 예측 레지스터 상태(84)를 갱신한다.
가상/물리 레지스터 대응 유닛(86)은 또한, (상기 설명한 바와 같이) 예외 조건에 응답하여 복구 예측 레지스터 상태 버스(76)를 통하여 대응 격납부(32)에 의해 제공되는 복구 예측 레지스터 상태를 수신하도록 구성된다. 가상/물리 레지스터 대응 유닛(86)은 대응 격납부(32)에 의해 제공된 복구 예측 상태에 의해, 레지스터 스캔 유닛(80) 및 IQ#/PR# 제어 유닛(82)으로부터의 입력들에 따라 발생된 다음 예측 레지스터 상태를 무효로할 수도 있다.
본 실시예에, IQ#s는 해당하는 ROP가 의존하는 명령큐 엔트리들을 나타내기 위하여 각각의 소스 오퍼랜드에 대하여 루트된다는 것을 유념하자. 명령큐들(36A-36B)은 의존적인 ROP를 실행을 위하여 스케쥴링하기 전에 해당하는 명령큐 내에서의 ROPs의 완료를 기다린다.
이제 도 4를 참조하면, 레지스터 스캔 유닛(80)의 일 실시예가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도 4의 실시예에서, 레지스터 스캔 유닛(80)은 ROPs의 라인 내의 각 이슈 위치에 해당하는 스캔 유닛을 포함한다. 예를 들어, 본 실시예는 (그 이상 또는 그 이하가 실행될 수도 있기는 하지만) 8개의 이슈 위치들에 대항하는 8개의 스캔 유닛들(100A-100H)을 포함한다. 스캔 유닛들(100A-100H)은 가상의 예측 레지스터 상태를 전달하기 위하여 직렬 체인 내에 연결되며, 동시에 소스및 목적지 레지스터 번호들을 수신한다.
각각의 스캔 유닛들(100A-100H)은 도 3에 도시된 ROP 버스(60A)의 일부에 연결된다. 좀 더 명확하게 설명하면, 각각의 스캔 유닛들(100A-100H)은 해당하는 이슈 위치들 내의 ROP의 소스 및 목적지 번호들을 수신하도록 연결된다. 따라서, 버스(60AA)는 스캔 유닛(100A)에 연결되어, 이슈 위치 0(즉, ROPs의 라인 내에서 프로그램 순서에 있어서 첫 번째 ROP)에 대한 소스 및 목적지 레지스터 번호들을 제공한다. 유사하게, 버스(60AB)는 스캔 유닛(100B)에 연결되어, 이슈 위치 1에 대한 소스 및 목적지 레지스터 번호들을 제공한다. 다른 버스들(60AC-AH)은 도시된 바와 같은 순서의, 남아있는 이슈 위치들에 해당하는 소스 및 목적지 레지스터 번호들을 제공한다. 각각의 스캔 유닛(100A-100H)은 각 소스 레지스터에 대한 소스 가상 레지스터 번호를 제공하도록 구성되며, 이는 이후에 가상/물리 레지스터 대응 유닛(86)에 전달된다.
스캔 유닛(100A)은 가상의 현재 예측 레지스터 상태를 수신하도록 결합된다. 가상의 현재 예측 레지스터 상태는 각각의 논리 레지스터에 해당하는 가상의 레지스터 번호를 포함한다. 가상의 현재 예측 상태 내의 가상의 레지스터 번호들은 PR#(및 IQ#)의 소스가 예측 레지스터 상태(84)임을 나타낸다. x86 명령 세트 구조를 이용하는 다른 실시예에서, 예를 들어, 예측 레지스터 상태(84)는 구성된 정수 레지스터들에 해당하는 8개의 레지스터들과, 조건 코드 비트들의 그룹(이러한 그룹핑은 어떠한 것들이 다양한 명령들에 의해 갱신되는 지에 따라 선택된다. 예를 들어, O비트가 한 그룹으로 선택되고, C 비트는 다른 그룹으로 선택되고, Z, A, P 및 S 비트들은 제 3 그룹으로 선택된다)에 해당하는 3개의 레지스터들과, 구성된 부동 소수점/MMX 레지스터들에 해당하는 8개의 레지스터들고, 여기서 한 레지스터는 부동 소수점 조건 코드 레지스터에 해당하며, 그리고 일시 미세코드 레지스터들에 해당하는 8개의 레지스터들을 포함한다.
스캔 유닛(100A)은 소스 레지스터 번호들을 기초로 하여 가상의 현재 예측 레지스터 상태로부터 소스 가상 레지스터 번호들을 할당한다. 또한, 이슈 위치 0 내의 ROP가 목적지 레지스터를 갱신한다면, 스캔 유닛(100A)은 해당하는 논리 목적지 레지스터에 대한 새로운 가상 레지스터 번호를 삽입함으로써 가상의 현재 예측 상태를 갱신한다. 새로운 가상 레지스터 번호는 해당하는 논리 레지스터에 대한 PR# 및 IQ#의 소스가 이슈 위치 0임을 나타낸다. 초기의 가상 레지스터 번호 대신에 삽입된 새로운 가상의 레지스터 번호를 갖는 갱신된 예측 레지스터 상태가 스캔 유닛(100B)에 전달된다.
스캔 유닛(100B)은 스캔 유닛(100A)으로부터 갱신된 예측 레지스터 상태를 수용하고, 갱신된 예측 레지스터 상태로부터의 가상 레지스터 번호들을 소스 레지스터 번호들에 할당한다. 또한, 스캔 유닛(100B)은, 이슈 위치 1내의 ROP가 논리 레지스터를 갱신하는 경우, 이슈 위치 1을 나타내는 새로운 가상 레지스터 번호들을 스캐 유닛(100A)에 의해 제공되는 갱신된 예측 레지스터 상태에 삽입한다. 스캔 유닛들(100C-100H)은 이전의 스캔 유닛들에 의해 제공된 갱신된 예측 레지스터 상태에 응답하여, 각각의 이슈 위치들 3-8 내의 ROPs의 소스 레지스터들에 대한 가상 레지스터 번호들을 할당하며, 그리고 만일 있는 경우, 목적지 레지스터 번호에 따라서, 갱신된 예측 레지스터 상태를 갱신한다.
따라서, 만일 라인 내의 이전의 ROP가 ROP의 소스 레지스터 번호에 의해 지정된 논리 레지스터를 갱신한다면, 이전 이슈 위치를 나타내는 가상의 레지스터 번호가 할당된다. 그렇지 않으면, 해당하는 논리 레지스터에 대한 현재의 예측 레지스터 상태를 나타내는 가상 레지스터 번호가 할당된다. 다시 말해, 내부라인 의존성 및 (현재의 예측 레지스터 상태를 통한) 명령들의 이전 라인에 대한 의존성이 가상 레지스터 번호들에 의해 표시된다.
스캔 유닛(100H)에 의해 제공된 갱신된 예측 레지스터 상태는 가상의 다음 예측 레지스터 상태이며, 이는 각각의 스캔 유닛들(100A-100H)에 의해 제공된 소스 가상 레지스터 번호들 및 목적지 레지스터 번호들과 함께 가상/물리 레지스터 대응 유닛(86)에 전달된다. 이후, 가상/물리 레지스터 대응 유닛(86)은, 이후의 ROPs의 라인에 대한 예측 레지스터 상태(84)를 갱신하기 위하여, ROPs의 라인에 해당하는 다음 예측 레지스터 상태를 발생시킬 수도 있다.
일 실시예에서, 각각의 스캔 유닛(100A-100F)은 정수, 일시적인, 그리고 조건 코드 레지스터들을 처리하는 정수/일시 스캔 회로, 및 부동 소수점 레지스터들과 부동 소수점 조건 코드 레지스터를 처리하는 부동 소수점 스캔 회로를 포함한다는 것을 유념하자. 따라서, 각 소스 및 목적지 레지스터가 부동 소수점 또는 정수 레지스터인지의 표시가 레지스터 번호와 함께 루트되며, 가상 레지스터 번호가 레지스터에 할당될 것인지, 새로운 레지스터 번호로 대체할 것인 지를 결정하는 데에 이용된다.
이제 도 5를 참조하면, 가상 레지스터 번호들의 예시적인 엔코딩을 나타내는 표(102)가 도시된다. 다른 엔코딩이 또한 가능하며 고려된다. 명확하게 설명하면, 예를 들어, 표(102)에 도시된 최상위 비트(MSB)는 표에 도시된 것으로부터 반전될 수도 있다. 또 다른 엔코딩이 또한 가능하다.
표(102)는 MSB가, 해당하는 PR#/IQ#에 대한 소스가 예측 레지스터 상태(84)에 의해 유지된 현재의 예측 상태인지, 또는 라인 내의 이전 이슈 위치에 할당된 목적지 PR#/IQ#인지를 결정하는 가상 레지스터 번호 엔코딩을 도시한다. 예를 들어, MSB가 제거된다면, 가상 레지스터 번호는 소스가 현재의 예측 상태이며 가상 레지스터 번호의 최하위 비트들(LSBs)이 현재의 예측 상태 내의 논리 레지스터 번호임을 나타낸다. 만일 MSB가 세트된다면, 가상 레지스터 번호는 소스가 이전 이슈 위치임을 나타낸다. 이러한 경우에서의 LSBs는 이전 이슈 위치 번호이다.
표(102)에 도시된 엔코딩을 이용하는 실시예에서, 스캔 유닛(100A)에 제공되는 가상의 현재 예측 상태는 MSB 제거에 의한 엔코딩, 및 LSBs에 제공되는 해당하는 논리 레지스터 번호를 포함한다. 스캔 유닛들(100A-100H)에 의해 갱신된 예측 레지스터 상태에 삽입되는 새로운 가상 레지스터 번호들은 MSB 세트에 의한 엔코딩 및 LSBs에 제공된 삽입 스캔 유닛에 해당하는 이슈 위치 번호를 포함한다.
이제 도 6을 참조하면, 정수/일시 스캔 회로(110)의 일 실시예의 일부가 도시되는데, 이는 각각의 스캔 유닛들(100A-100H)의 일 실시예에서 이용될 수도 있다. 다른 실시예들이 또한 가능하며 고려된다. 도 6의 실시예에서, 해당하는 ROP의 목적지 레지스터 번호는 목적지 버스(112)를 통하여 전달되며, 해당하는 ROP의 제 1 소스(SRC1) 레지스터 번호는 SRC1 버스(114)를 통하여 전달되고, 해당하는 ROP의 제 2 소스(SRC2) 레지스터 번호는 SRC2 버스(116)를 통하여 전달된다. 버스들(112,114 및 116)은 버스(60A)의 일부를 포함한다(예를 들어, 정수/일시 스캔 회로(110)가 스캔 유닛(110A)의 일부이라면, 버스들(112, 114 및 116)은 버스(60AA)의 일부가 된다). 목적지 버스(112)는 다수의 목적지 확인자 유닛들(예를 들어, 도 6에 도시된 유닛들(118A 및 118B))에 연결된다. 각각의 목적지 확인자 유닛들(118A-118B)은 패스/라이트 제어 유닛에 연결된다(예를 들어, 패스/라이트 제어 유닛들(120A 및 120B)이 각각 목적지 확인자 유닛들(118A 및 118B)에 연결된다). 각각의 패스 제어 유닛(120A-120B)은 또한 이전의 스캔 유닛(100A-100H)에 의해 제공된 가상의 레지스터 입력, 및 이후의 스캔 유닛(100A-100H)으로의 가상 레지스터 출력에 연결된다(예를 들어, 패스/라이트 제어 유닛(120A)은 가상의 EAX 입력 버스(122A) 및 가상의 EAX 출력 버스(124A)에 연결되며, 패스/라이트 제어 유닛(120B)은 가상의 EBX 입력 버스(122B) 및 가상의 EBX 출력 버스(124B)에 연결된다). 또한, SRC1 버스(114)는 다수의 SRC1 확인자 유닛들(예를 들어, 도 6에 도시한 SRC1 확인자 유닛들(126A 및 126B))에 연결된다. SRC2 버스(116)는 유사하게 다수의 SRC2 확인자 유닛들(예를 들어, 도 6에 도시한 SRC2 확인자 유닛들(128A 및 128B))에 연결된다. 각각의 SRC1/SRC2 확인자 유닛들(126A-126B)은 도 6에 도시된 해당 스위치(130A-130D)의 인에이블 제어부에 연결된다. 스위치들(130A-130B)은 가상의 EAX 입력 버스(122A)에 연결된 입력들을 갖는 반면, 스위치들(130C-130D)은 가상의 EBX 입력 버스(122B)에 연결된 입력들을 갖는다. 스위치들(130A 및 130C)은 SRC1 가상 레지스터 버스(132A)에 연결되는 반면, 스위치들(130B 및 130D)은 SRC2 가상 레지스터 버스(132B)에 연결된다.
일반적으로, 정수/일시 스캔 회로(110)는 해당하는 이슈 위치 내의 ROP의 정수/일시 소스 레지스터들에 대한 가상 레지스터 번호들을 할당하고, 정수 목적지 레지스터에 대한 새로운 가상 레지스터 번호들을 해당하는 이슈 위치에 삽입한다. 목적지 확인자 유닛, 패스/라이트 제어 유닛, SRC1 확인자 유닛, 및 SRC2 확인자 유닛의 각 세트는 논리 정수, 일시, 또는 조건 코드 레지스터들 중 하나에 대응한다. 예를 들어, 목적지 확인자 유닛(118A), 패스/라이트 제어 유닛(120A), SRC1 확인자 유닛(126A), 및 SRC2 확인자 유닛(128A)는 EAX 레지스터에 대응한다. 유사하게, 목적지 확인지 유닛(118B), 패스/라이트 제어 유닛(120B), SRC1 확인자 유닛(126B), 및 SRC2 확인자 유닛(128B)은 EBX 레지스터에 대응한다. 목적지 확인자 유닛, 패스/라이트 제어 유닛, SRC1 확인자 유닛, 및 SRC2 확인자 유닛(미도시)의 다른 세트들은 논리 정수, 일시, 또는 조건 코드 레지스터들 중 다른 것들에 대응한다. 이후 EAX 레지스터 하드웨어에 대해 설명할 것이다. EBX 레지스터 하드웨어는 EBX 레지스터에 대하여 유사하게 작동하며, 다른 유사한 하드웨어(미도시)는 나머지 레지스터들에 대하여 유사하게 작동한다.
목적지 확인자 유닛(118A)은 목적지 레지스터 버스(112) 상의 목적지 레지스터 번호가 EAX 레지스터를 선택하는 지를 결정한다. 따라서, 목적지 확인자 유닛(118A)은 EAX가 선택되었는 지를 결정하기 위하여 목적지 레지스터 번호를 디코드하는데, 이 디코드는 목적지 레지스터 번호가 유효함을 나타내는 유효 신호와, 목적지 레지스터 번호가 정수/일시/조건 코드 레지스터(즉, 부동 소수점 레지스터가 아님)임을 나타내는 정수 신호에 의해 유효해진다. 만일 목적지 레지스터가 EAX 레지스터이면, 목적지 확인자 유닛(118A)은 패스/라이트 제어 유닛(120A)에, 정수/일시 스캔 회로(110)가 가상의 EAX 출력 버스(124A) 상에서 이용되는 이슈 위치에 해당하는 가상 레지스터 번호를 삽입하도록 신호를 보낸다. 그렇지 않으면, 목적지 확인자 유닛(118A)은 패스/라이트 제어 유닛(120A)에, 가상의 EAX 입력 버스(122A)를 통하여 제공된 가상 레지스터 번호를 가상의 EAX 출력 버스(124A)로 전달하도록 신호를 보낸다.
유사하게, SRC1 확인자 유닛(126A)은, EAX가 선택되는 지를 결정하기 위하여 SRC1 레지스터를 디코드하고, 이 디코드를 SRC1 레지스터 번호가 유효함을 나타내는 유효 신호와, SRC1 레지스터 번호가 정수/일시/조건 코드 레지스터임을 나타내는 정수 신호에 의해 유효화함으로써, SRC1 레지스터 버스(114) 상의 SRC1 레지스터 번호가 EAX 레지스터를 선택하는 지를 결정한다. 만일 EAX가 SRC1으로 선택된다면, SRC1 확인자 유닛(126A)은 스위치(130A)를 구동시켜 가상 EAX 입력 버스(122A)를 통하여 제공된 가상 레지스터 번호를 SRC1 가상 레지스터 버스(132A)로 드라이브한다. SRC2 확인지 유닛(128A)은 SRC1 확인자 유닛(126A)과 유사하지만, SRC2 레지스터 버스(116)를 통하여 제공된 SRC2 레지스터 번호에 대하여 작동하며, 스위치(130B)를 제어하여 SRC2 가상 레지스터 버스(132B)를 드라이브시키거나, 또는 드라이브시키지 않는다.
이러한 방식에 있어서, 갱신된 예측 상태는 (가령 124A-124B와 같은 가상의 출력 버스들을 통하여) 다음 스캔 유닛으로 전달되며, 소스 가상 레지스터 번호들은 (가령 SRC1 가상 레지스터 버스(132A) 및 SRC2 레지스터 번호 버스(132B)와 같은 버스들을 통하여) 할당될 수도 있다. 정수/일시 스캔 회로(110)는 각각의 가상 정수/일시 입력들을 패스/라이트 제어 유닛(120A) (및 다른 패스/라이트 제어 유닛들)로 루트시킴으로써 레지스터 대 레지스터 이동 연산들을 처리하도록 변경될 수도 있다. 부가적인 신호가 현재 이슈 위치에서의 ROP가 레지스터-레지스터 이동임을 나타내는 데에 이용될 수도 있다. SRC1 레지스터 번호 및 이동 신호에 응답하여, SRC1 레지스터 번호에 해당하는 가상 정수/일시 입력은 목적지 레지스터에 해당하는 가상 정수/일시 출력으로 루트된다. 또한, 해당하는 이슈 위치 내의 ROP는 명령큐들(36A-36B)로 전달되는 것이 저지되는데(예를 들어, 그의 유효 비트가 리셋된다), 이는 소스 가상 레지스터 번호를 목적지 가상 레지스터 번호로서 루트시킴으로써 이동이 이루어지기 때문이다. 상기 실시예에서, 자유롭게 사용가능해지기 전에 철회된 물리 레지스터들의 캐밍(camming)은 목적지 PR#의 우연한 초기 자유화를 방해한다.
이제 도 7을 참조하면, 부동 소수점 스캔 회로(140)의 일 실시예의 일부가 도시되는데, 이는 각각의 스캔 유닛들(100A-100H)의 일 실시예에서 이용될 수도 있다. 다른 실시예들이 또한 가능하며 고려된다. 스캔 회로(140)는 정수/일시 스캔 회로(110)와 유사하게 SRC1 레지스터 버스(114) 및 SRC2 레지스터 버스(116)를 수신하고, SRC1 가상 레지스터 버스(132A) 및 SRC2 가상 레지스터 버스(132B)를 통하여 소스 가상 레지스터 번호들을 드라이브시킬 수도 있다. 도 7에 도시된 부분은 가상 stI 입력(x86 명령 세트 구조에서 규정된 st0 내지 st7 레지스터들중 하나, 0<I<7)을 수신하고, 회로(140)가 이용되는 이슈 위치("현재의 이슈 위치")에 가상의 stI 출력을 제공한다. SRC1 레지스터 버스(114)에 연결된 SRC1 확인자 유닛(142A)은 SRC1 레지스터 번호가 stI 레지스터를 선택하고 있는 지를 결정한다(즉, 레지스터 번호는 stI이고, 레지스터는 부동 소수점 레지스터이며, 그리고 SRC1 레지스터는 유효하다). 만일 SRC1 레지스터 번호가 stI 레지스터를 선택한다면, SRC1 확인지 유닛(142A)은 스위치(130E)를 구동시켜 가상 stI 입력 버스(144)를 통하여 제공된 가상 레지스터 번호를 SRC1 가상 레지스터 버스(132A)로 드라이브시킨다. 유사하게, SRC2 레지스터 버스(116)에 연결된 SRC2 확인자 유닛(142B)은 SRC2 레지스터 번호가 stI 레지스터를 선택하는 지를 결정하고, 스위치(130F)를 선택적으로 제어하여 가상 stI 입력 버스(144)를 통하여 제공된 가상 레지스터 번호를 SRC2 가상 레지스터 버스(132B)로 드라이브시킨다.
또한, 도 7에 도시된 부동 소수점 스캔 회로(114)의 일부는 레지스터 stI에 해당하는 출력 가상 레지스터 번호를 가상 stI 출력 버스(146) 상에 제공한다. 다양한 입력 가상 레지스터 번호들은 디코드 유닛(24)에 의해 제공되는 다양한 제어 신호들에 의해 제어되는, 출력 버스(146) 상에서의 출력 가상 레지스터 번호로서 선택가능할 수도 있다. x86 부동 소수점 명령들은 부동 소수점 레지스터 세트를 스택으로서 처리한다. stO은 스택의 꼭대기에 있는 레지스터이고, st1은 꼭대기 다음의 레지스터이다. 어떠한 명령들은 스택을 (현재의 st0 레지스터를 레지스터 st1 등으로 하면서) 푸쉬되거나, (현재의 st1 레지스터를 st0 등으로 하면서) 팝되게 한다. 또한, 스택 레지스터의 꼭대기(st0)와 나머지 레지스터들 중 하나를 바꾸는 교환 명령들이 제공된다.
가상 stI 출력을 선택함으로써, 스위치들(130G-130K) 및 한 세트의 입력 가상 레지스터 버스들(144, 148, 150, 152 및 154)을 이용하여 상기의 많은 상황들을 처리하고자 한다. 만일 현재 이슈 위치 내의 ROP가 부동 소수점 스택 또는 stI 레지스터에 개별적으로 영향을 주지 못한다면, 패스 신호가 (가상 stI 입력 버스(144)와 가상 stI 출력 버스(146) 사이에 연결된) 스위치(130G)에 표명되고, 가상 stI 입력은 가상 stI 출력으로서 제공된다. 반면에, 현재 이슈 위치 내의 ROP가 stI 레지스터를 갱신한다면, 라이트 신호가 (버스(152)와 버스(146) 사이에 연결된) 스위치(130J)에 표명되고, (버스(152)를 통하여 전달된) 현재 이슈 위치에 해당하는 가상 레지스터 번호가 가상 stI 출력 버스(146)에 전달된다. 만일 현재 이슈 위치 내의 ROP가 스택을 푸쉬 또는 팝시킨다면, 해당하는 신호가 (버스(154)와 버스(146) 사이에 연결된) 스위치들(130K) 및 (버스(152)와 버스(146) 사이에 연결된) 스위치들(130I)에 각각 표명된다. 이로써, 현재 이슈 위치에 제공된 갱신된 예측 상태 내의 stI-1 및 stI+1 레지스터들에 해당하는 가상 레지스터 번호들이 제공된다. 최종적으로, 현재 이슈 위치에 두 개 이전의 이슈 위치로부터의 가상 st0 입력이 버스(148)를 통하여 제공된다. 만일 현재의 ROP가 FEXC 명령들의 두 번째 반이라면, EXCH 신호가 스위치(130H)에 표명되며, 현재 이슈 위치의 두 개이 이전의이슈 위치로부터의 st0에 해당하는 가상 레지스터 번호가 가상 stI 출력으로서 선택된다.
FEXC 명령의 첫 번째 반을 처리하기 위하여, st0에 해당하는 부동 소수점 스캔 회로(140)의 부분은 이전의 스캔 유닛으로부터 각각의 가상 stI 입력들을 포함하여, 모든 레지스터를 가상의 st0 출력으로서 임의로 선택할 수도 있음을 유념하자. 또한, 부동 소수점 상태 레지스터의 스택의 꼭대기(TOS) 필드 및 부동 소수점 택 워드는 부동 소수점 조작에 의해 영향을 받는 다는 것을 유념하자. TOS 및 택 워드에 대한 예측 값들은 푸쉬, 팝, 및 교환을 통하여 전파될 수도 있다. TOS 및 택 워드의 현재의 예측 카피는 예측 레지스터 상태(84) 내에 유지될 수도 있다. 또한, 각 이슈 위치에 해당하는 TOS 및 택 워드의 값은 예외 복구를 위해 대응 격납부(32)에 저장될 수도 있으며 (그리고 마지막 값은 예측 레지스터 상태(84)내에 갱신될 수도 있다). 또한, 레지스터 스캔 유닛(80)은 (택 워드에 의해 나타낸 바와 같이) 무효한 레지스터의 이용을 검출하고, 이후의 예외 처리를 위해 레지스터를 이용하여 ROP에 의한 예외를 유념할 수도 있다.
정수/일시 스캔 회로(110) 및 부동 소수점 스캔 회로(140)는 정수 대 부동 소수점 및 부동 소수점 대 정수 이동을 처리할 수도 있다. 만일 ROP의 소스레지스터가 정수인 것으로 표시되면, 정수/일시 스캔 회로(110)는 소스 가상 레지스터 번호를 제공한다. 반면에, ROP의 소스 레지스터가 부동 소수점인 것으로 표시되면, 부동 소수점 스캔 회로(140)는 소스 가상 레지스터 번호를 제공한다. 만일 목적지 레지스터가 부동 소수점으로 표시된다면, 새로운 부동 소수점 가상 레지스터 번호가 부동 소수점 스캔 회로(140)에 의해 갱신된 예측 레지스터 상태에 제공된다. 반면에, 목적지 레지스터가 정수로서 표시된다면, 새로운 정수 가상 레지스터 번호가 정수/일시 스캔 회로9110)에 의해 갱신된 예측 레지스터 상태에 제공된다. 따라서, 부동 소수점과 정수 레지스터간 이동을 갖는 이슈 위치에는 부동 소수점 소스 가상 레지스터 번호가 할당되며, 목적지 레지스터 번호는 정수를 나타낸다. 반면에, 정수와 부동 소수점간 이동을 갖는 이슈 위치에는 정수 소스 가상 레지스터 번호가 할당되며, 목적지 레지스터 번호는 부동 소수점을 나타낸다.
이제 도 8을 참조하면, 가상/물리 레지스터 대응 유닛(86)의 일 실시예의 블록도가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도 8의 실ㅅ이ㅖ에서, 가상/물리 레지스터 대응 유닛(86)은 소스 IQ# mux(160), 다음 예측 IQ# mux(162), 소스 PR# mux(164), 다음 예측 PR# mux(168), 트랩 IQ# mux(170), 및 트랩 PR# mux(172)을 포함한다. 소스 IQ# mux(160)는 예측 레지스터 상태(84)로부터 각 논리 레지스터에 해당하는 현재의 예측 IQ#를 수신하도록, 그리고 IQ#/PR# 제어 유닛(82)에 의해 할당된 목적지 IQ#s를 수신하도록 연결된다. 유사하게, 다음 예측 IQ# mux(162)는 현재의 예측 IQ# 및 목적지 IQ#s를 수신하도록 연결된다. 소스 IQ# mux(160)의 출력은 명령큐들(36A-36B)에 파이프라인되며, 다음 예측 IQ# mux(162)의 출력은 트랩 IQ# mux(170)에 입력으로서 연결된다. 트랩 IQ# mux(170)는 또한 복구 예측 레지스터 상태 버스(76A)(복구될 IQ#s를 전달하는 복구 예측 레지스터 상태 버스(76)의 일부)에 연결된다. 소스 PR# mux(164)는 예측 레지스터 상태(84)로부터 각 논리 레지스터에 해당하는 현재의 예측 PR#를 수신하도록, 그리고 IQ#/PR# 제어 유닛(82)에 의해 할당된 목적지 PR#s를 수신하도록 연결된다. 유사하게, 다음 예측 PR# mux(168)는 현재의 예측 PR#s 및 목적지 PR#s를 수신하도록 연결된다. 소스 PR# mux(164)의 출력은 명령큐들(36A-36B)에 파이프라인된다. 다음 예측 PR# mux(168)의 출력은 트랩 PR# mux(172)에 연결되며, 이는 또한 복구 예측 레지스터 상태 버스(76B)(복구될 PR#s를 전달하는 복구 예측 레지스터 상태 버스(76)의 일부)에 연결된다. 레지스터 스캔 유닛(80)에 의해 할당된 소스 가상 레지스터 번호들은 소스 IQ# mux(160) 및 소스 PR# mux(164)에 선택 제어신호들로서 제공된다. 가상의 다음 예측 상태는 다음 예측 IQ# mux(162) 및 다음 예측 PR# mux(168)에 선택 신호들로서 제공된다. pc 격납부(48)로부터의 트랩 제어신호들은 트랩 IQ# mux(170) 및 트랩 PR# mux(172)에 대한 선택 신호들을 제공한다.
일반적으로, 소스 IQ# mux(160) 및 소스 PR# mux(164)는 레지스터 스캔 유닛(80)에 의해 제공되는 해당하는 소스 가상 레지스터 번호에 응답하여 각 ROP의 각 소스 오퍼랜드에 대한 소스 IQ# 및 PR#를 선택한다. Mux(160)는 예를 들어, 도시된 바와 같이 mux(160)에 대한 입력들을 수신하고, 선택 제어신호로서 해당하는 소스 가상 레지스터 번호를 수신하도록 연결된 mux들의 병렬 세트(각 ROP의 각 소스 레지스터에 각각 하나)로서 구현될 수도 있다. 유사하게, mux(164)는 도시된 바와 같이 mux(164)에 대한 입력들을 수신하고, 선택 제어신호로서 해당하는 소스 가상 레지스터 번호를 수신하도록 연결된 mux들의 병렬 세트(각 ROP의 각 소스 레지스터에 각각 하나)로서 구현될 수도 있다. 만일 소스 가상 레지스터 번호가 현재의 예측 상태가 IQ#/PR#의 소스임을 나타낸다면, 소스 가상 레지스터 번호에 포함된 논리 레지스터 번호는 예측 레지스터 상태(84)에 의해 제공된 IQ# 및 PR#중 하나를 선택하는 데에 이용된다. 반면에, 만일 소스 가상 레지스터 번호가 이전의 이슈 위치를 나타낸다면, 이슈 위치 번호는 제어 유닛(82)에 의해 할당된 목적지 IQ#/PR# 중 하나를 선택하는 데에 이용된다. 제어 유닛(82)은, 예를 들어 각 이슈 위치에 해당하는 목적지 IQ# 및 PR#를 제공할 수도 있다. 반면에, 제어 유닛(82)은 (라인 내의 ROPs의 수보다 적은) 한정된 수의 IQ# 및 PR#를 제공할 수도 있다. 상기 실시예에서는, 목적지 IQ#/PR# 결합중 하나를 선택하기 위하여 소스 가상 레지스터 번호 및 각 ROP에 대한 목적지 레지스터 유효 표시들에 대한 논리가 수행될 수도 있다.
유사하게, 다음 예측 IQ# mux(162) 및 다음 예측 PR# mux(168)는 레지스터 스캔 유닛(80)에 의해 제공되는 해당하는 가상의 다음 예측 상태에 응답하여 각 논리 레지스터에 대한 IQ# 및 PR#를 선택한다. Mux(162)는, 예를 들어 도시된 바와 같이 mux(162)에 대한 입력들을 수신하고 선택 제어신호로서 해당하는 가상 레지스터 번호를 수신하도록 연결된 mux들의 병렬 세트(각 논리 레지스터에 하나)로서 구현될 수도 있다. 유사하게, mux(168)는 도시된 바와 같이 mux(168)에 대한 입력들을 수신하고 선택 제어신호로서 해당하는 가상 레지스터 번호를 수신하도록 연결된 mux들의 병렬 세트(각 논리 레지스터에 하나)로서 구현될 수도 있다. 만일 가상 레지스터 번호가 현재의 예측 상태가 특정한 논리 레지스터의 IQ#/PR#에 대한 소스임을 나타낸다면, 가상 레지스터 번호에 포함된 논리 레지스터 번호는 예측 레지스터 상태(84)에 의해 제공된 IQ# 및 PR# 중 하나를 선택하는 데에 이용된다. 반면에, 만일 가상 레지스터 번호가 이슈 위치를 나타낸다면, 이슈 위치 번호는 제어 유닛(82)에 의해 할당된 목적지 IQ#/PR# 중 하나를 선택하는 데에 이용된다.
도 8에 도시된 바와같은 가상 레지스터 번호들을 기초로 하여 IQ#s 및 PR#s의 선택을 물리적으로 분리시킴으로써 장점을 얻을 수도 있다. 비교적 많은 수의 버스들이 비교적 작은 양의 회로(즉, mux(160, 162, 164 및 168)로 표현되는 mux들)로 루트된다. 따라서, 가상/물리 레지스터 대응 유닛(86)에 의해 점유되는 영역은 예측 레지스터 상태(84) 및 IQ#/PR# 제어 유닛(82)으로부터의 버스에 의해 차지된다. IQ# 및 PR#는 개별적인 값들이기 때문에, 개별적인 mux들의 세트로 값들을 루트시키게 되면 가상/물리 레지스터 대응 유닛(86)에 의해 차지하는 영역을 감소시킨다. 일 실시예에서, IQ# 내의 비트들의 수 및 PR# 내의 비트들의 수는 거의 같다. 따라서, 가상/물리 레지스터 대응 유닛(86)의 한측 상에 IQ# 버스들을 와이어링하고, 가상/물리 레지스터 대응 유닛(86)의 다른측에 PR# 버스들을 와이어링하게 되면, 양측 상의 와이어링 공간이 효율적으로 이용되는 완전한 대칭 배치가 된다. 또한, 명령큐들(36A-36B)은 (언제 현재의 ROPs가 의존하는 ROPs가 완료되고, 이에 따라 ROPs의 현재의 세트중 하나가 스케쥴링될 수도 있는 지를 결정하기 위하여 IQ#s를 수신하는) 스케쥴링 부분 및(PR#s 및 명령 실행에 이용되는 다른 정보를 저장하지만, IQ#s는 저장하지 않는) 명령 저장장치로 물리적으로 분할될 수도 있다. 따라서, 명령큐들(36A-36B)은 IQ# mux들 근처에서는 스케쥴링 부분으로, 그리고 PR# mux들 근처에서는 명령 저장 부분으로 물리적으로 구성될 수도 있어, 영역을 감소시킬 수 있게 된다.
도 8에 도시된 가상/물리 레지스터 대응 유닛(86)은 또한 예외 조건들에 응답하여 예측 레지스터 상태(84)에 대한 다음 예측 레지스터 상태의 대응을 처리한다. 트랩 IQ# mux(170)는 트랩들이 실행시, mux(162)에 의해 제공된 다음 예측 상태를 무효화하기 위하여 대응 격납부(32)로부터의 복구 예측 레지스터 상태에 해당하는 IQ#s를 루트시키는 것으로 인식될 때 이용된다. pc 격납부(48)는 mux(170)에 선택 제어 신호로서 트랩 제어신호를 제공한다. 유사하게, 복구 예측 레지스터 상태 내의 PR#는 트랩 신호에 응답하여 트랩 PR# mux(172)를 통하여 선택될 수도 있다. 다른 실시예들에서는, 예외 조건들로부터 복구하는 다른 방법들이 이용될 수도 있다는 것을 유념하자. 예를 들어, 예외 조건들은 철회에 대하여 처리될 수도 있다.
이제 도 9를 참조하면, 대응 격납부(32) 내의 엔트리(즉, ROPs의 라인에 해당하는 엔트리)에 저장된 정보를 나타낸 표(180)가 도시된다. 다른 실시예들이 또한 가능하며 고려된다.
표(180)에 나타낸 바와 같이, 라인에 해당하는 R#는 R# (라인 부분) 필드에 저장된다. 저장된 R#는 pc 격납부(48)에 의해 ROPs에 할당되는 R#s의 라인 부분이다. 라인 부분은 라인 내의 각 ROP에 대하여 동일하며, R#의 오프셋 부분은 특정한 ROP의 라인 내의 이슈 위치를 확인한다. 따라서, (총괄적으로 라인에 해당하는) 격납부 엔트리는 ROP에 대한 R#의 라인 부분과 저장된 R#를 비교함으로써 예외를 경험하는 ROP와 결합될 수도 있다.
또한, 라인 내의 ROPs이 유효하다는 표시는 대응 격납부 엔트리의 라인 필드 내의 유효 ROPs에 저장된다. 예를 들어, 이 표시는 ROP에 대한 비트가 될 수도 있다. 만일 비트가 세트된다면, 라인 내의 해당하는 ROP가 유효해진다. 만일 비트가 제거된다면, 라인 내의 해당하는 ROP가 무효로 된다. 또한, ROPs가 목적지 논리 레지스터를 갖는 다는 표시가 ROP 레지스터 라이트 필드에 저장된다. 또한, 이 표시는 ROP에 대한 비트가 될 수도 있다. 만일 비트가 세트된다면, 라인 내의 해당하는 ROP는 목적지 레지스터를 갱신한다. 만일 비트가 제거된다면, 라인 내의 해당하는 ROP는 목적지 레지스터를 갱신하지 않을 것이다. ROPs가 목적지 레지스터를 갖는 다는 표시는 할당된 PR#s 및 할당된 IQ#s가 하기에 설명되는 예외의 경우 복구 상태의 일부가 된다는 결정을 하는 데에 이용된다.
목적지 레지스터들을 갖는 ROPs에 할당된 PR#s 및 IQ#s는 각각 엔트리의 할당된 PR# 및 할당된 IQ#에 유지된다. 또한, 각 목적지 레지스터의 논리 레지스터 번호는 논리 레지스터 번호 필드에 저장된다. 논리 레지스터 번호들은 복구 예측 상태 내의 논리 레지스터가 하기에서 설명되는 바와 같이 할당된 PR#s 및 할당된 IQ#s를 수신할 것인 지를 결정하는 데에 이용된다. 또한, 라인의 성공적인 철회시, 논리 레지스터 번호들 및 해당하는 PR#s는 구조적 이름 재설정 블록(34)에 저장을 위하여 전달된다.
라인 내의 ROPs가 조건 코드 레지스터를 갱신한다는 표시는 CC 라이트 필드에 저장된다. 개별적으로 갱신되는 조건 코드의 각 부분은 CC 라이트 필드 내의 비트로 표시될 수도 있으며, 비트들의 세트는 ROP 레지스터 라이트 필드 내에 표시된 각 레지스터 라이트와 결합될 수도 있다. (할당된 PR# 및 IQ# 필드들에 저장된) 해당하는 ROP의 PR# 및 IQ#는 예외 검출시 예측 레지스터 상태 내의 예측 조건 코드 레지스터를 복구하는 데에 이용될 수도 있다. 또한, CC 라이트 필드는, 할당된 PR#s 내의 PR#s가 ROPs의 성공적인 철회시 구성된 조건 코드 상태에 대응함을 표시한다. 상기 설명한 바와 같이, 본 실시예에서, 단일의 물리 레지스터는 정수 레지스터 갱신 및 해당하는 조건 코드 갱신들을 저장하는 데에 이용된다.
대응 격납부 엔트리에 해당하는 ROPs의 라인을 디스패치하기 전에 예측 레지스터 상태(84) 내에 저장되는 현재의 예측 레지스터 상태는 엔트리의 현재 예측 레지스터 상태 필드에 저장된다. 현재의 예측 레지스터 상태는 라인 내에서의 예외의 경우 예측 레지스터 상태(84)를 복구하기 위한 기초 역할을 한다.
궁극적으로, FP TOS 및 각 이슈 위치에 해당하는 유효 비트들은 엔트리의 FP TOS 및 유효 비트 필드 내에 저장된다. FP TOS 및 예외를 경험하는 ROP에 해당하는 유효 비트들은 예외 검출시 예측 FP TOS 및 예측 레지스터 상태(84) 내의 택 워드로 복구된다.
이제 도 10을 참조하면, 예시적인 예측 레지스터 상태 엔트리(182)의 블록도가 도시되는데, 이는 논리 레지스터에 대한 예측 레지스터의 일 실시예에 의해 이용될 수도 있다. 엔트리(182)는 유효 필드(184), IQ# 필드(186), 및 PR# 필드(188)를 포함한다. 유효 필드(184)는 IQ# 필드(186)가 유효한지 아닌 지를 나타낸다. IQ#는 해당하는 ROP가 명령큐들(36A-36B)로부터 완료될 때 까지 유효하다. 따라서, 예측 상태(84)는 실행 코어(40) 및 적재/저장 유닛(42)으로부터 IQ#s가 완료되고 있다는 표시를 수신할 수도 있다. 매치를 검출하게 되면, 예측 상태(84)는 유효 표시를 리셋시킬 수도 있다. 유효 표시는, 예를 들어 세트된 경우에는 유효를, 제거된 경우에는 무효를 나타내는 비트가 될 수도 있다. IQ# 필드(186)는 가장 최근에 갱신된 논리 레지스터인 ROP의 IQ#를 저장하고, PR# 필드(188)는 ROP에 목적지 레지스터로서 할당된 물리 레지스터의 pR#를 저장한다.
이제 도 1을 참조하면, pc 격납부(48)에 의해 신호화된 예외 조건에 응답하여 대응 격납부(32)의 동작을 나타낸 흐름도가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도 11에 도시된 단계들이 이해의 용이를 위해 특정한 순서로 도시되기는 하였지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 대응 격납부(32) 내에서 이용되는 결합 로직 내에서 동시에 수행될 수도 있다.
단계(190)에 도시한 바와 같이, 대응 격납부(32)는 pc 격납부(48)에 의해 제공된 R#를 대응 격납부(32)에 저장된 엔트리들의 R#(라인 부분) 필드에 대하여 캠시킨다. pc 격납부(48)에 의해 제공된 R#는 특정한 ROP를 확인한다. 그러나, 대응 격납부(32)에 대한 체킹의 목적으로, R#의 라인 부분이 캠된다. 제공된 R# 보다 더 최근의 엔트리들(즉, 프로그램 순서에 있어서 예외 이후의 명령들)은 대응 격납부(32) 내에서 삭제된다. 삭제된 엔트리들의 할당된 PR# 필드에 저장된 PR#는 자유롭게 사용가능해 진다. 일 실시예에서, 삭제된 엔트리들의 PR#s는 클록 주기당 한 엔트리의 속도로 다수의 클록 주기들을 통하여 자유롭게 사용가능해 진다. 캠이 매치를 나타내는 격납부 엔트리는 선택된 대응 격납부 엔트리이다.
선택된 대응 격납부 엔트에 저장된 현재의 예측 레지스터 상태(즉, 예외를 경험하는 ROP를 포함하는 ROPs의 라인 이전의 현재의 예측 상태는 현재의 예측 레지스터 상태(84) 내의 예측 상태로 복구된다(단계 192). 또한, 예측 레지스터 상태(84) 내의 FP TOS 및 유효 비트들은 예외를 경험하는 ROP의 이슈 위치에 대하여 선택된 대응 격납부 엔트리에 저장된 값으로 복구된다(단계 194).
선택된 대응 격납부 엔트리 내의 ROP 레지스터 라이트 필드는 예외를 경험하는 ROP 이전의 라이트들에 대하여 마스크된다. 다시 말해, 예외를 경험하는 ROP 이후의 ROP 레지스터 라이트들은 마스크 오프되어, 이들은 마스킹 이후의 라이트들로 보이지 않는다. (마스킹 이후의) 남아있는 라이트들은 각 레지스터에 대한 가장 최근의 라이트를 검출하기 위하여 스캔된다(즉, 남아있는 라이트들중 두 개 또는 그 이상이 동일한 레지스터라면, 좀 더 최근의 라이트가 유지된다). 현재의 예측 상태는 이 결과들에 의해 갱신된다(단계 196). 단계(192) 및 단계(196)는 복구 예측 레지스터 상태를 예측 레지스터 상태(84)로 전송하기 전에 대응 격납부(32)에서 수행될 수도 있음을 유념하자. 변형예로서, 현재의 예측 레지스터 상태는 예측 레지스터 상태(84)로 복구되며, 이후 단계(196)에 의해 갱신된다.
또한, 선택된 대응 격납부 엔트리 내의 ROP 레지스터 라이트 필드(즉, 단계(196)의 마스킹 이전의 초기 값들)는 예외를 경험하는 ROP 이후의 레지스터 라이트들에 대하여 마스크된다. 다시 말해, 예외를 경험하는 ROP 이전의 레지스터 라이트들은 마스크 오프된다. 남아있는 레지스터 라이트들의 PR#s는 삭제된다(단계 198). 도 11에 도시된 흐름도는 유익하게는 예외에 응답하여 예측 상태를 복구하는 신속한 방법을 제공한다.
소스 가상 레지스터 번호 및 가상 소스 레지스터 번호라는 용어는 상기에서 이용되었음을 유념하자. 이들 용어는 동일한 의미를 갖는다. 또한, 상기 설명한 바와 같이, 프로세서(10)에 의해 이용되는 명령 세트 구조에서 지정된 각 명령이 단일 명령 연산을 대응시키는 실시예들은 본원에서 규정된 명령 연산의 의미 내에서 고려된다는 것을 유념하자.
이제 도 12를 참조하면, 버스 브리지(202)를 통하여 다양한 시스템 구성요소들에 결합된 프로세서(10)를 포함하는 컴퓨터 시스템(200)의 일 실시예의 블록도가 도시된다. 다른 실시예들이 또한 가능하며 고려된다. 도시된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통하여 버스 브리지(202)에 결합되며, 그래픽 제어기(208)는 AGP 버스(210)를 통하여 버스 브리지(202)에 결합된다. 궁극적으로, 다수의 PCI 장치들(212A-212B)은 PCI 버스(214)를 통하여 버스 브리지(202)에 결합된다. 제 2 버스 브리지(216)가 또한 제공되어, EISA/ISA 버스(220)를 통하여 하나 또는 그 이상의 EISA 또는 ISA 장치들(218)로의 전기적인 인터페이스를 제공한다. 프로세서(10)는 외부 인터페이스(52)를 통하여 버스 브리지(202)에 결합된다.
버스 브리지(202)는 프로세서(10), 주 메모리(204), 그래픽 제어기(208), 및 PCI 버스(214)에 부착된 장치들 간의 인터페이스를 제공한다. 버스 브리지(202)에 결합된 장치들 중 하나로부터 연산이 수신될 때, 버스 브리지(202)는 연산의 타겟을 확인한다(예를 들어 특정한 장치, 또는 PCI 버스(214)의 경우에는 그 타겟이 PCI 버스(214) 위에 있는 지를 확인한다). 버스 브리지(202)는 연산을 타겟 장치에 루트시킨다. 버스 브리지(202)는 일반적으로 상기 연산을 소스 장치 또는 버스에 의해 이용되는 프로토콜로부터 타겟 장치 또는 버스에 의해 이용되는 프로토콜로 변환한다.
PCI 버스(214)에 대한 ISA/EISA 버스에 인터페이스를 제공하는 것에 부가하여, 제 2 버스 브리지(216)는 또한 바람직한 경우 부가적인 기능을 통합할 수도 있다. 예를 들어, 일 실시예에서, 제 2 버스 브리지(216)는 PCI 버스(214)의 소유권을 조정하기 위한 마스터 PCI 조정기(미도시)를 포함한다. 제 2 버스 브리지(216) 외부의, 또는 이와 통합된 입/출력 제어기(미도시)가 또한 컴퓨터 시스템(200) 내에 포함될 수도 있는데, 이는 바람직한 경우, 키보드 및 마우스(222)와 직렬 및 병렬 포트들의 작동을 지원한다. 다른 실시예들에서는 또한, 프로세서(10)와 버스 브리지(202) 사이의 외부 인터페이스(52)에 외부 캐시 유닛(미도시)이 결합될 수도 있다. 변형예로서, 외부 캐시가 버스 브리지(202)에 결합될 수도 있으며, 외부 캐시에 대한 캐시 제어 로직이 버스 브리지(202) 내에 통합될 수도 있다.
주 메모리(204)는 응용 프로그램이 저장되고 프로세서(10)가 주로 작동하게 되는 메모리이다. 적절한 주 메모리(204)는 DRAM(동적 임의 접근 메모리) 및 바람직하게는 다수의 SDRAM(동기 DRAM) 뱅크들을 포함한다.
PCI 장치들(212A-212B)은, 예를 들어 가령 네트워크 인터페이스 카드들, 비디오 액셀러레이터들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 제어기들, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터들 및 전화 카드들과 같은 다양한 주변 장치들의 예이다. 유사하게, ISA 장치(218)는, 가령 모뎀; 사운드 카드; 및 가령 GPIB 또는 필드 버스 인터페이스 카드들과 같은 다양한 데이터 획득 카드들과 같은 다양한 형태의 주변 장치들의 예이다.
그래픽 제어기(208)는 디스플레이(226) 상에서의 텍스트 및 이미지들의 렌더링을 제어하기 위하여 제공된다. 그래픽 제어기(208)는 주 메모리(204) 내로, 그리고 주 메모리(204)로부터 효과적으로 시프트될 수 있는 3차원 데이터 구조들을 렌더링하는 것으로 종래 기술에 널리 공지되어 있는 전형적인 그래픽 액셀러레이터를 구현할 수도 있다. 따라서, 그래픽 제어기(208)는, 이것이 버스 브리지(202) 내의 타겟 인터페이스로의 접속을 요청 및 수신하여 주 메모리(204)로 접속할 수 있다는 점에서 AGP 버스(210)의 마스터가 될 수도 있다. 전용 그래픽 버스는 주 메모리(204)로부터 데이터를 신속하게 검색할 수 있게 한다. 어떠한 연산들에 대하여, 그래픽 제어기(208)는 또한 AGP 버스(210) 상에서 PCI 프로토콜 트랜잭션을 발생시키도록 구성될 수도 있다. 따라서, 버스 브리지(202)의 AGP 인터페잇는 PCI 프로토콜 타겟 및 이니시에이터 트랜잭션들 뿐 아니라 AGP 프로토콜 트랜잭션 등을 지원하는 기능을 포함할 수도 있다. 디스플레이(226)는 이미지 또는 텍스트가 제시될 수 있는 모든 전자 디스플레이이다. 적절한 디스플레이(226)로는 음극선관("CRT"), 액정표시소자("LCD") 등이 있다.
상기에서 AGP, PCI 및 ISA 또는 EISA 버스들을 예로 들기는 하였지만, 바람직한 모든 버스 구조들로 대체될 수도 있다는 것을 유념하자. 또한, 컴퓨터 시스템(200)은 부가적인 프로세서들(예를 들어, 컴퓨터 시스템(200)의 선택적인 구성요소로서 나타낸 프로세서(10a))를 포함하는 멀티프로세싱 컴퓨터 시스템이 될 수도 있음을 유념하자. 프로세서(10a)는 프로세서(10)와 유사할 수도 있다. 좀 더 명확하게 설명하면, 프로세서(10a)는 프로세서(10)의 동일한 복사본이 될 수도 있다. 프로세서(10a)는 (도 12에 도시된 바와 같이) 프로세서(10)와 외부 인터페이스(52)를 공유할 수도 있으며, 또는 독립적인 버스를 통하여 버스 브리지(202)에 연결될 수도 있다.
상기 설명에 따르면, 프로세서는 레지스터 이름 재설정 기술을 이용하는 것으로 설명되었다. 일 실시예에서, 이름 재설정 기술은 가상 레지스터 번호를 이용하여 단들(stages)로 분배된다. 유익하게는, 이 기술을 이용하여 고주파수 연산이 가능할 수도 있다. 다른 실시예서, 예외들로부터의 신속한 복구는 각각의 ROPs에 해당하는 현재의 예측 상태를 격납하고, 라인 내에 레지스터 라이트들을 노트함으로써 수행된다. 또 다른 실시예에서는, 이름 재설정 레지스터들의 자유화가 수행되어, 동일한 이름 재설정 레지스터가 하나 이상의 논리 레지스터에 대응할 수 있게 한다. 이로써, 물리적인 레지스터가 효율적으로 이용될 수 있게 된다.
당업자들에게 있어 상기 설명을 충분히 이해하게 되면, 다양한 변형들 및 변경들이 가능하다는 것을 알 수 있을 것이다. 하기의 청구범위들은 상기 모든 변형들 및 변경들을 포함한다.

Claims (19)

  1. 프로세서 내의 물리 레지스터들을 다루는 방법으로서,
    제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하는 단계와, 여기서 상기 목적지 오퍼랜드는 논리 레지스터를 확인하며;
    상기 명령 연산을 철회하는 단계와;
    상기 철회에 응답하여 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호로, 구조적 이름 재설정 블록을 갱신하는 단계와;
    상기 철회에 응답하여 상기 구조적 이름 재설정 블록으로부터 제 2 물리 레지스터 번호를 읽는 단계와, 여기서 상기 제 2 물리 레지스터 번호는 상기 제 1 물리 레지스터 번호에 의해 상기 구조적 이름 재설정 블록 내에 상기 논리 레지스터를 나타내는 것으로부터 옮겨지며; 그리고
    상기 제 2 물리 레지스터 번호가 상기 구조적 이름 재설정 블록 내의 제 2 논리 레지스터를 나타낸다는 결정에 응답하여 상기 제 2 물리 레지스터가 자유롭게 사용가능해지는 것을 억제하는 단계를 구비하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서, 상기 제 2 물리 레지스터 번호가 상기 구조적 이름 재설정 블록 내의 상기 제 2 논리 레지스터를 나타내지 않는 다는 결정에 응답하여 상기 제 2 물리 레지스터를 자유롭게 사용가능하도록 하는 단계를 더 구비하는 것을 특징으로 하는 방법.
  3. 제 2 항에 있어서, 상기 제 2 물리 레지스터 번호가 상기 구조적 이름 재설정 블록 내의 상기 제 2 논리 레지스터를 나타낸다는 상기 결정을 수행하기 위하여 상기 갱신 단계 이후에, 상기 구조적 이름 재설정 블록 내에 저장된 상기 물리 레지스터 번호들과 상기 제 2 물리 레지스터 번호를 비교하는 단계를 더 구비하는 것을 특징으로 하는 방법.
  4. 제 3 항에 있어서, 상기 억제 단계는 상기 제 2 물리 레지스터 번호에 대한 적어도 하나의 매치를 검출하는 상기 비교 단계에 응답하여 수행되는 것을 특징으로 하는 방법.
  5. 제 4 항에 있어서, 상기 자유화 단계는 상기 제 2 물리 레지스터 번호에 대한 어떠한 매치도 없음을 검출하는 상기 비교에 응답하여 수행되는 것을 특징으로 하는 방법.
  6. 제 1 항에 있어서, 상기 할당에 응답하여 격납부 내에 상기 제 1 물리 레지스터 번호를 저장하는 단계를 더 구비하는 것을 특징으로 하는 방법.
  7. 제 6 항에 있어서, 상기 철회 단계는 상기 격납부의 헤드에 이르는 상기 제 1 물리 레지스터 번호에 대하여 수행되는 것을 특징으로 하는 방법.
  8. 제 1 항에 있어서,
    상기 제 2 명령 연산의 목적지 레지스터에 할당된 제 3 물리 레지스터를 갖는 제 2 명령 연산을 철회하는 단계와, 여기서 상기 목적지 레지스터는 상기 제 2 논리 레지스터를 포함하며;
    상기 철회에 응답하여 상기 제 3 물리 레지스터에 해당하는 제 3 물리 레지스터 번호에 의해, 상기 구조적 이름 재설정 블록을 갱신하는 단계와;
    상기 철회에 응답하여 상기 구조적 이름 재설정 블록으로부터 제 2 물리 레지스터 번호를 읽는 단계와; 그리고
    상기 제 2 물리 레지스터 번호를 자유롭게 사용가능하도록 하는 단계를 구비하는 것을 특징으로 하는 방법.
  9. 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성된 대응 유닛과, 여기서 상기 대응 유닛은 물리 레지스터들이 할당에 대하여 자유롭게 사용가능함을 나타내는 자유사용 목록을 보유하도록 구성되며, 상기 자유사용 목록로부터 상기 제 1 물리 레지스터를 선택하도록 구성되고;
    상기 명령 연산이 철회되고 있다는 표시와 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합된 구조적 이름 재설정 블록을 구비하며, 여기서 상기 구조적 이름 재설정 블록은 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 이전에 해당하는 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성되고, 상기 구조적 이름 재설정 블록은 상기 제 1 물리 레지스터 번호를 획득하고, 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 제 1 논리 레지스터에 해당하는 상기 제 1 물리 레지스터 번호를 보유하도록 구성되며, 그리고, 상기 구조적 이름 재설정 블록은 상기 제 2 물리 레지스터 번호가 부가적으로 상기 제 2 논리 레지스터에 해당하는 지를 결정하도록 구성되고;
    상기 대응 유닛은 상기 제 2 물리 레지스터가 상기 제 2 논리 레지스터를 나타내는 경우, 상기 제 2 물리 레지스터 번호를 상기 자유사용 목록에 부가하는 것을 억제하도록 구성되는 것을 특징으로 하는 프로세서.
  10. 제 9 항에 있어서, 상기 대응 유닛은 상기 제 2 물리 레지스터가 상기 제 2 논리 레지스터를 나타내지 않을 경우, 상기 물리 레지스터 번호를 상기 자유사용 목록에 부가하도록 구성되는 것을 특징으로 하는 프로세서.
  11. 제 9 항에 있어서, 상기 구조적 이름 재설정 블록은 상기 제 2 물리 레지스터 번호를 상기 제 1 물리 레지스터 번호 획득 이후의 상기 구조적 이름 재설정 블록 내의 상기 물리 레지스터 번호들과 비교함으로써, 상기 제 2 물리 레지스터 번호가 부가적으로 상기 제 2 논리 레지스터에 대응하는 지를 결정하도록 구성되는 것을 특징으로 하는 프로세서.
  12. 제 11 항에 있어서, 상기 구조적 이름 재설정 블록은 내용 접속가능 메모리를 포함하는 것을 특징으로 하는 프로세서.
  13. 제 9 항에 있어서, 상기 대응 유닛에 결합된 격납부를 더 구비하며, 상기 격납부는 상기 대응 유닛에 의한 상기 명령 연산으로의 할당시 상기 제 1 물리 레지스터 번호를 저장하도록 구성되는 것을 특징으로 하는 프로세서.
  14. 제 13 항에 있어서, 상기 격납부는 또한 상기 구조적 이름 재설정 블록에 결합되며, 상기 격납부는 상기 명령 연산의 철회시 상기 제 1 물리 레지스터 번호를 제공하도록 구성되는 것을 특징으로 하는 프로세서.
  15. 프로세서 내의 물리 레지스터들을 다루는 방법으로서,
    제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하는 단계와, 여기서 상기 목적지 오퍼랜드는 논리 레지스터를 확인하며;
    상기 명령 연산을 철회하는 단계와;
    상기 철회에 응답하여 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호로, 구조적 이름 재설정 블록을 갱신하는 단계와;
    상기 철회에 응답하여 상기 구조적 이름 재설정 블록으로부터 제 2 물리 레지스터 번호를 읽는 단계와, 여기서 상기 제 2 물리 레지스터 번호는 상기 제 1 물리 레지스터 번호에 의해 상기 구조적 이름 재설정 블록 내에 상기 논리 레지스터를 나타내는 것으로부터 옮겨지며; 그리고
    제 2 물리 레지스터를 자유롭게 사용가능하도록 하는 단계를 구비하는 것을 특징으로 하는 방법.
  16. 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성된 대응 유닛과, 여기서 상기 대응 유닛은 물리 레지스터들이 할당에 대하여 자유롭게 사용가능함을 나타내는 자유사용 목록을 보유하도록 구성되며, 상기 자유사용 목록로부터 상기 제 1 물리 레지스터를 선택하도록 구성되고; 그리고
    상기 명령 연산이 철회되고 있다는 표시와 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합된 구조적 이름 재설정 블록을 구비하며, 여기서 상기 구조적 이름 재설정 블록은 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 이전에 해당하는 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성되고, 상기 구조적 이름 재설정 블록은 상기 제 1 물리 레지스터 번호를 획득하고, 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 제 1 논리 레지스터에 해당하는 상기 제 1 물리 레지스터 번호를 보유하도록 구성되며;
    상기 대응 유닛은 상기 제 2 물리 레지스터 번호를 상기 자유사용 목록에 부가하도록 구성되는 것을 특징으로 하는 프로세서.
  17. 제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성된 대응 유닛과, 여기서 상기 대응 유닛은 물리 레지스터들이 할당에 대하여 자유롭게 사용가능함을 나타내는 자유사용 목록을 보유하도록 구성되며, 상기 자유사용 목록로부터 상기 제 1 물리 레지스터를 선택하도록 구성되고; 그리고
    상기 명령 연산이 철회되고 있다는 표시와 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합된 구조적 이름 재설정 블록을 구비하며, 여기서 상기 구조적 이름 재설정 블록은 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 이전에 해당하는 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성되고, 상기 구조적 이름 재설정 블록은 상기 제 1 물리 레지스터 번호를 획득하고, 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 제 1 논리 레지스터에 해당하는 상기 제 1 물리 레지스터 번호를 보유하도록 구성되며;
    상기 대응 유닛은 상기 제 2 물리 레지스터 번호를 상기 자유사용 목록에 부가하도록 구성되는 프로세서와; 그리고
    상기 프로세서에 결합된 입/출력(I/O) 장치를 구비하며, 여기서 상기 I/O 장치는 컴퓨터 시스템과, 상기 I/O 장치가 결합된 다른 컴퓨터 시스템 사이를 통신하도록 구성되는 것을 특징으로 하는 상기 컴퓨터 시스템.
  18. 제 17 항에 있어서, 상기 구조적 이름 재설정 블록은 또한 상기 제 2 물리 레지스터 번호가 부가적으로 상기 제 2 논리 레지스터에 대응하는 지를 결정하도록 구성되며, 상기 대응 유닛은 상기 제 2 물리 레지스터가 상기 제 2 논리 레지스터를 나타내는 경우, 상기 제 2 물리 레지스터 번호를 상기 자유사용 목록에 부가하는 것을 억제하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  19. 제 17 항에 있어서,
    제 1 물리 레지스터를 명령 연산의 목적지 오퍼랜드에 할당하도록 구성된 대응 유닛과, 여기서 상기 대응 유닛은 물리 레지스터들이 할당에 대하여 자유롭게 사용가능함을 나타내는 자유사용 목록을 보유하도록 구성되며, 상기 자유사용 목록로부터 상기 제 1 물리 레지스터를 선택하도록 구성되고; 그리고
    상기 명령 연산이 철회되고 있다는 표시와 상기 제 1 물리 레지스터에 해당하는 제 1 물리 레지스터 번호를 수신하도록 결합된 구조적 이름 재설정 블록을 구비하며, 여기서 상기 구조적 이름 재설정 블록은 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 목적지 오퍼랜드에 의해 확인된 제 1 논리 레지스터에 이전에 해당하는 제 2 물리 레지스터를 확인하는 제 2 물리 레지스터 번호를 제공하도록 구성되고, 상기 구조적 이름 재설정 블록은 상기 제 1 물리 레지스터 번호를 획득하고, 상기 명령 연산이 철회되고 있다는 상기 표시에 응답하여 상기 제 1 논리 레지스터에 해당하는 상기 제 1 물리 레지스터 번호를 보유하도록 구성되며;
    상기 대응 유닛은 상기 제 2 물리 레지스터 번호를 상기 자유사용 목록에 부가하도록 구성되는 제 2 프로세서를 더 구비하는 것을 특징으로 하는 컴퓨터 시스템.
KR1020017001356A 1998-07-31 1999-01-18 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서 KR100572040B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/127,094 1998-07-31
US09/127,094 US6230262B1 (en) 1998-07-31 1998-07-31 Processor configured to selectively free physical registers upon retirement of instructions

Publications (2)

Publication Number Publication Date
KR20010053623A true KR20010053623A (ko) 2001-06-25
KR100572040B1 KR100572040B1 (ko) 2006-04-18

Family

ID=22428274

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017001356A KR100572040B1 (ko) 1998-07-31 1999-01-18 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서

Country Status (6)

Country Link
US (1) US6230262B1 (ko)
EP (1) EP1099158B1 (ko)
JP (1) JP3866920B2 (ko)
KR (1) KR100572040B1 (ko)
DE (1) DE69903554T2 (ko)
WO (1) WO2000007097A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6253310B1 (en) * 1998-12-31 2001-06-26 Intel Corporation Delayed deallocation of an arithmetic flags register
US6266763B1 (en) * 1999-01-05 2001-07-24 Advanced Micro Devices, Inc. Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
JP3817436B2 (ja) 2000-09-28 2006-09-06 株式会社東芝 プロセッサおよびリネーミング装置
WO2002054228A1 (en) * 2000-12-06 2002-07-11 University Of Bristol Register renaming
US7043626B1 (en) 2003-10-01 2006-05-09 Advanced Micro Devices, Inc. Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US20080077782A1 (en) * 2006-09-26 2008-03-27 Arm Limited Restoring a register renaming table within a processor following an exception
US20080148022A1 (en) * 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US9052909B2 (en) 2011-12-07 2015-06-09 Arm Limited Recovering from exceptions and timing errors
US8738971B2 (en) 2011-12-07 2014-05-27 Arm Limited Limiting certain processing activities as error rate probability rises
US9075621B2 (en) 2011-12-23 2015-07-07 Arm Limited Error recovery upon reaching oldest instruction marked with error or upon timed expiration by flushing instructions in pipeline pending queue and restarting execution
US8640008B2 (en) 2011-12-23 2014-01-28 Arm Limited Error recovery in a data processing apparatus
GB2496934B (en) * 2012-08-07 2014-06-11 Imagination Tech Ltd Multi-stage register renaming using dependency removal
US20160378480A1 (en) * 2015-06-27 2016-12-29 Pavel G. Matveyev Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations
CN114356420B (zh) * 2021-12-28 2023-02-17 海光信息技术股份有限公司 指令流水线的处理方法及装置、电子装置及存储介质

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AT354159B (de) 1975-02-10 1979-12-27 Siemens Ag Assoziativspeicher mit getrennt assoziierbaren bereichen
US4453212A (en) 1981-07-13 1984-06-05 Burroughs Corporation Extended address generating apparatus and method
US4928223A (en) 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US4807115A (en) 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
DE3751503T2 (de) 1986-03-26 1996-05-09 Hitachi Ltd Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen.
CA1286784C (en) 1986-08-27 1991-07-23 Joseph A. Petolino, Jr. Cache storage queue
US5067069A (en) 1989-02-03 1991-11-19 Digital Equipment Corporation Control of multiple functional units with parallel operation in a microcoded execution unit
US5226126A (en) 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5136697A (en) 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5129067A (en) 1989-06-06 1992-07-07 Advanced Micro Devices, Inc. Multiple instruction decoder for minimizing register port requirements
US5226130A (en) 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5053631A (en) 1990-04-02 1991-10-01 Advanced Micro Devices, Inc. Pipelined floating point processing unit
US5058048A (en) 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
DE69130588T2 (de) 1990-05-29 1999-05-27 Nat Semiconductor Corp Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
US5197132A (en) 1990-06-29 1993-03-23 Digital Equipment Corporation Register mapping system having a log containing sequential listing of registers that were changed in preceding cycles for precise post-branch recovery
US5355457A (en) * 1991-05-21 1994-10-11 Motorola, Inc. Data processor for performing simultaneous instruction retirement and backtracking
GB9112754D0 (en) 1991-06-13 1991-07-31 Int Computers Ltd Data processing apparatus
GB9123271D0 (en) 1991-11-02 1991-12-18 Int Computers Ltd Data processing system
GB2263985B (en) 1992-02-06 1995-06-14 Intel Corp Two stage window multiplexors for deriving variable length instructions from a stream of instructions
SG45269A1 (en) 1992-02-06 1998-01-16 Intel Corp End bit markers for instruction decode
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5784589A (en) 1993-10-18 1998-07-21 Cyrix Corporation Distributed free register tracking for register renaming using an availability tracking register associated with each stage of an execution pipeline
US5630149A (en) 1993-10-18 1997-05-13 Cyrix Corporation Pipelined processor with register renaming hardware to accommodate multiple size registers
DE69429061T2 (de) 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5546554A (en) 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5481693A (en) 1994-07-20 1996-01-02 Exponential Technology, Inc. Shared register architecture for a dual-instruction-set CPU
US5675759A (en) 1995-03-03 1997-10-07 Shebanow; Michael C. Method and apparatus for register management using issue sequence prior physical register and register association validity information
DE69734093D1 (de) 1996-12-31 2005-10-06 Metaflow Technologies Inc System zur Ausführung von Gleitkommaoperationen
JP3452771B2 (ja) * 1997-10-02 2003-09-29 富士通株式会社 命令制御システム及びその方法
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US6119223A (en) * 1998-07-31 2000-09-12 Advanced Micro Devices, Inc. Map unit having rapid misprediction recovery

Also Published As

Publication number Publication date
US6230262B1 (en) 2001-05-08
EP1099158B1 (en) 2002-10-16
EP1099158A1 (en) 2001-05-16
DE69903554T2 (de) 2003-06-18
KR100572040B1 (ko) 2006-04-18
DE69903554D1 (de) 2002-11-21
WO2000007097A1 (en) 2000-02-10
JP3866920B2 (ja) 2007-01-10
JP2002521762A (ja) 2002-07-16

Similar Documents

Publication Publication Date Title
KR100592122B1 (ko) 가상 레지스터 번호들을 이용하여 논리적 레지스터 번호들을 물리적 레지스터 번호들로 맵핑시키도록 구성된 프로세서
US6119223A (en) Map unit having rapid misprediction recovery
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6256721B1 (en) Register renaming in which moves are accomplished by swapping tags
US6505293B1 (en) Register renaming to optimize identical register values
US6122727A (en) Symmetrical instructions queue for high clock frequency scheduling
US6212622B1 (en) Mechanism for load block on store address generation
US6393555B1 (en) Rapid execution of FCMOV following FCOMI by storing comparison result in temporary register in floating point unit
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US6405305B1 (en) Rapid execution of floating point load control word instructions
US6393546B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
KR100572040B1 (ko) 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서
US6425074B1 (en) Method and apparatus for rapid execution of FCOM and FSTSW
US6370637B1 (en) Optimized allocation of multi-pipeline executable and specific pipeline executable instructions to execution pipelines based on criteria
US6175909B1 (en) Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment
US7783692B1 (en) Fast flag generation

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

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee