KR20160078377A - 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들 - Google Patents

부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들 Download PDF

Info

Publication number
KR20160078377A
KR20160078377A KR1020167012859A KR20167012859A KR20160078377A KR 20160078377 A KR20160078377 A KR 20160078377A KR 1020167012859 A KR1020167012859 A KR 1020167012859A KR 20167012859 A KR20167012859 A KR 20167012859A KR 20160078377 A KR20160078377 A KR 20160078377A
Authority
KR
South Korea
Prior art keywords
register
registers
packed
state
physical
Prior art date
Application number
KR1020167012859A
Other languages
English (en)
Other versions
KR102332478B1 (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 KR20160078377A publication Critical patent/KR20160078377A/ko
Application granted granted Critical
Publication of KR102332478B1 publication Critical patent/KR102332478B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/3017Runtime instruction translation, e.g. macros

Landscapes

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

Abstract

패킹된 레지스터들을 액세스하기 위한 방법들, 디바이스들, 및 시스템들이 제공된다. 패킹된 레지스터들의 상태는 추적될 수 있으며 레지스터가 상기 상태에 기초하여 직접 액세스 가능한지 여부가 결정될 수 있다. 레지스터가 직접 액세스 가능하지 않다면, 레지스터가 직접 액세스되도록 허용하는 동작이 수행될 수 있다. 상기 동작은 그것이 직접 액세스 가능하도록 레지스터의 물리적 저장을 재조직하기 위한 적어도 하나의 uop를 주입하는 것을 포함할 수 있다. 상기 동작은 물리 레지스터의 최하위 비트를 갖고 데이터를 정렬시키거나 또는 그 외 데이터 경로와 데이터를 정렬시키는 것을 포함할 수 있다. 상기 동작은 또한 패킹된 레지스터들의 상태를 변경하는 것을 포함할 수 있다.

Description

부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들{PROCESSOR AND METHODS FOR FLOATING POINT REGISTER ALIASING}
관련 출원들에 대한 상호 참조
본 출원은, 그 내용이 여기에서 참조로서 통합되는, 2013년 10월 27일에 출원된 미국 가 특허 출원 번호 제61/896,091호에 대한 이득을 주장한다.
기술분야
본 발명은 일반적으로 전자 회로들에 관한 것이며, 더 구체적으로 마이크로프로세서들 및 마이크로프로세싱의 방법들에 관한 것이다.
많은 컴퓨터 시스템들은 부동 소수점 수들에 대한 동작들을 실행하도록 설계된 하드웨어를 포함한다. 이러한 하드웨어는 부동 소수점 유닛으로서 지칭될 수 있으며 중앙 프로세싱 유닛과 통합될 수 있다. 부동 소수점 유닛(floating point unit; FPU)은 부동 소수점 명령어들을 실행하기 위해 사용될 수 있으며, 부동 소수점 명령어들은 부동 소수점 아키텍처 레지스터들의 세트를 참조할 수 있다.
ARM v7과 같은, 몇몇 명령어 세트 아키텍처들(ISA들)은 그것들이 밀집하여 패킹되도록 부동 소수점 아키텍처 레지스터들을 조직할 수 있다. 예를 들면, 아키텍처 레지스터들은 단일 비트 공간이 단일 쿼드 정도(quad precision)(Q) 레지스터, 두 개의 배 정도(double precision)(D) 레지스터들, 또는 4개의 단 정도(single precision)(S) 레지스터들로서 참조될 수 있도록 하는 방식으로 조직될 수 있다. 도 1a는 이러한 방식으로 조직되는 예시적인 비트 공간을 예시한다. 도 1a의 비트 공간은 예를 들면, 128 비트 공간일 수 있으며, 이것은 단일 128 비트 Q 레지스터, 두 개의 64 비트 D 레지스터들, 및 4개의 32 비트 S 레지스터들을 포함한다.
도 1b는 총 16개의 Q 레지스터들(Q0 내지 Q15), 32개의 D 레지스터들(D0 내지 D31) 및 32개의 S 레지스터들(S0 내지 S31)을 포함하는, 16개의 이러한 비트 공간들의 예시적인 세트를 예시한다. 도 1b의 예에서, 단지 첫 8개의 Q 레지스터들(Q0 내지 Q7)만이 S 레지스터들을 갖고 패킹되지만(총 80개의 아키텍처 레지스터들에 대해), 개념적으로 모든 Q 레지스터들은 S 레지스터들을 갖고 패킹될 수 있다는 것을 주의해야 한다. 주어진 전체 폭 레지스터(전체 폭 레지스터를 포함한) 내에서 패킹된 아키텍처 레지스터들의 그룹은 "쿼드"로서 또는 최대 레지스터의 명칭에 의해 언급될 수 있다.
몇몇 애플리케이션들에서, 이러한 명령어들의 아키텍처 레지스터 피연산자들을 물리 레지스터들에 매핑시키기 위해 부동 소수점 명령어들에 대한 레지스터 재명명(renaming)을 사용하는 것이 바람직할 수 있다. 레지스터 재명명자는 이러한 목적을 위해 구현될 수 있다. 레지스터 재명명은 부동 소수점 명령어들의 실행을 역직렬화하기 위해 사용될 수 있다. 두 개의 명령어들(거짓 의존성이 있는)에 의해 참조된 동일한 아키텍처 레지스터를 상이한 물리 레지스터들에 매핑시킴으로써(즉, 명령어들에 의해 참조된 아키텍처 레지스터들을 "재명명"함으로써), 그 외 동일한 아키텍처 레지스터를 참조함으로써 위험에 맞닥뜨릴 명령어들의 실행이 예를 들면, 동시에 또는 순서 외로 실행될 수 있다.
몇몇 실시예들은 패킹된 레지스터들을 액세스하기 위한 방법을 제공한다. 패킹된 레지스터들의 상태는 저장된다. 명령어가 패킹된 레지스터들의 레지스터를 액세스한다는 조건으로, 레지스터가 상기 상태에 기초하여 직접 액세스 가능한지가 결정된다. 레지스터가 직접 액세스 가능하지 않다는 조건으로 레지스터가 직접 액세스되도록 허용하는 동작이 수행된다.
몇몇 실시예들은 패킹된 레지스터들을 액세스하도록 구성된 디바이스를 제공한다. 회로는 패킹된 레지스터들의 상태를 저장한다. 회로는, 명령어가 패킹된 레지스터들의 레지스터를 액세스한다는 조건으로, 상기 상태에 기초하여 레지스터가 직접 액세스 가능한지를 결정한다. 회로는 레지스터가 직접 액세스 가능하지 않다는 조건으로 레지스터가 직접 액세스되도록 허용하는 동작을 수행한다.
보다 상세한 이해는 첨부한 도면들과 함께 예로서 제공된, 다음의 설명으로부터 이루어질 수 있다.
도 1a는 예시적인 밀집하여 패킹된 아키텍처 레지스터의 블록도이다.
도 1b는 복수의 밀집하여 패킹된 아키텍처 레지스터들을 표현한 블록도이다.
도 2는 하나 이상의 개시된 실시예들이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 3은 명령어들을 디코딩하며 앨리어싱 효과들을 핸들링하기 위한 예시적인 회로를 예시한 블록도이다.
도 4는 명령어들을 디코딩하며 앨리어싱 효과들을 핸들링하기 위한 예시적인 방법을 예시한 흐름도이다.
도 2는 하나 이상의 개시된 실시예들이 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는, 예를 들면, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋-탑 박스, 텔레비전, 이동 전화, 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(100)는 프로세서(102), 메모리(104), 저장 디바이스(106), 하나 이상의 입력 디바이스들(108), 및 하나 이상의 출력 디바이스들(110)을 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 부가적인 구성요소들을 포함할 수 있다는 것이 이해된다.
프로세서(102)는 중앙 프로세싱 유닛(CPU), 그래픽스 프로세싱 유닛(GPU), 동일한 다이(die) 상에 위치된 CPU 및 GPU, 또는 하나 이상의 프로세서 코어들을 포함할 수 있으며, 여기에서 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치될 수 있거나, 또는 프로세서(102)로부터 별도로 위치될 수 있다. 메모리(104)는 휘발성 또는 비-휘발성 메모리, 예를 들면, 랜덤 액세스 메모리(RAM), 동적 RAM, 또는 캐시를 포함할 수 있다. 메모리(104)는 하나 이상의 개별 유닛들로서 구현될 수 있으며 디바이스(100)는 다수의 개별 메모리들(도시되지 않음)을 포함할 수 있다는 것을 주의해야 한다. 예를 들면, 디바이스(100)는 여기에서 추가로 논의되는 바와 같이 CPU 및 GPU 메모리들(도시되지 않음) 양쪽 모두를 포함할 수 있다.
저장 디바이스(106)는 고정 또는 착탈 가능한 저장 장치, 예를 들면, 하드 디스크 드라이브, 고체 상태 드라이브, 광 디스크, 또는 플래시 드라이브를 포함할 수 있다. 입력 디바이스들(108)은 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생물 측정 스캐너, 또는 네트워크 연결(예로서, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)을 포함할 수 있다. 출력 디바이스들(110)은 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 광들, 안테나, 또는 네트워크 연결(예로서, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)을 포함할 수 있다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스들(108)과 통신하며, 프로세서(102)가 입력 디바이스들(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스들(110)과 통신하며, 프로세서(102)가 출력 디바이스들(110)로 출력을 전송하도록 허용한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 구성요소들이며, 디바이스(100)는 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는다면 동일한 방식으로 동작할 것이라는 것을 주의해야 한다.
간결성을 위해, 시스템들(및 시스템들의 개개의 동작 구성요소들)의 집적 회로 설계, 캐싱, 메모리 동작들, 메모리 제어기들 및 다른 기능적 양상들에 관련된 종래의 기술들은 여기에서 상세히 설명되지 않는다. 더욱이, 여기에 포함된 다양한 도면들에 도시된 연결 라인들은 다양한 요소들 사이에서 대표적인 기능적 관계들 및/또는 물리적 결합들을 표현하도록 의도된다. 많은 대안 또는 부가적인 기능적 관계들 또는 물리적 연결들은 주제의 실시예에서 존재할 수 있다는 것이 주의되어야 한다. 또한, 특정한 용어가 또한 단지 참조의 목적을 위해 다음의 설명에서 사용될 수 있으며, 따라서 제한적이도록 의도되지 않고, 용어들("제 1", "제 2") 및 구조들을 나타내는 다른 이러한 수치 용어들은 맥락에 의해 달리 명확하게 표시되지 않는다면 시퀀스 또는 순서를 내포하지 않는다.
다음의 설명은 함께 "연결되거나" 또는 "결합되는" 요소들 또는 노드들 또는 피처들을 나타낸다. 여기에서 사용된 바와 같이, 달리 명확하게 서술되지 않는다면, "연결된"은 하나의 요소/노드/피처가 또 다른 요소/노드/피처에 직접 연결되며(또는 직접 통신하며), 반드시 기계적으로는 아님을 의미한다. 마찬가지로, 달리 명확하게 서술되지 않는다면, "결합된"은 하나의 요소/노드/피처가 또 다른 요소/노드/피처에 직접 또는 간접적으로 연결되며(또는 직접 또는 간접적으로 그것과 통신하며), 반드시 기계적으로는 아님을 의미한다. 따라서, 도면들이 요소들의 하나의 대표적인 배열을 묘사할 수 있지만, 부가적인 매개 요소들, 디바이스들, 피처들, 또는 구성요소들은 묘사된 주제의 실시예에서 존재할 수 있다.
적어도 하나의 대표적인 실시예가 다음의 설명에서 제공되지만, 엄청난 수의 변화들이 존재한다는 것이 이해되어야 한다. 여기에 설명된 대표적인 실시예 또는 실시예들은 임의의 방식으로 청구된 주제의 범위, 적용 가능성, 또는 구성을 제한하도록 의도되지 않는다는 것이 또한 이해될 것이다. 오히려, 앞서 말한 상세한 설명은 설명된 실시예 또는 실시예들을 구현하기 위한 가이드를 이 기술분야의 숙련자들에게 제공할 것이다. 다양한 변화들이 청구항들에 의해 정의된 범위로부터 벗어나지 않고 요소들의 기능 및 배열에서 이루어질 수 있다는 것이 이해될 것이다.
물리 레지스터들에서 도 1a 및 도 1b에 대하여 예시된 것들과 같은, 밀집하여 패킹된 아키텍처 레지스터들을 저장하는 것은 몇몇 프로세서 아키텍처들에서 문제가 있는 앨리어싱 효과들을 야기할 수 있다. 예를 들면, 상이한 크기들의 밀집하여 패킹된 아키텍처 레지스터들이 모두 동일한 크기를 갖는 물리 레지스터들에 매핑될 때, 앨리어싱 효과들은 여기에서 추가로 논의되는 바와 같이, 부가적인 조치들이 매핑을 교정하기 위해 취해지지 않는다면 유효하지 않은 데이터가 기록되거나 또는 판독되는 것을 야기할 수 있다. 더욱이, 프로세서 아키텍처의 마이크로 동작(uop) 스트림은 아키텍처 레지스터들의 모두가 독립적으로 판독 가능하며 기록 가능함을 요구할 수 있다. 예를 들면, S3로의 기록을 따르는 Q0의 판독이 S3로의 기록의 결과들을 포함하는 값을 리턴하는 것이 필요할 수 있다. 프로세서 아키텍처는 또한 임의의 동작의 최하위 비트(LSB)가 데이터 경로의 LSB와 정렬되는 것을 요구할 수 있다. 따라서, S3을 판독하기 위해(도 1a 및 도 1b의 예에서 Q0의 비트 96과 정렬된), 그것이 이미 그렇게 정렬되지 않았다면, 물리 레지스터에 저장된 S3 데이터를 비트 0에 정렬시키는 것이 먼저 필요할 수 있다.
이러한 이슈들을 해결하기 위해, 레지스터 상태는 쿼드가 전체적으로 패킹된 레지스터로서 저장되었는지(즉, 단일 물리 레지스터 내에서 및 순서대로) 또는 그것이 상이한 물리 레지스터들에서 개별적으로(또는 동일한 물리 레지스터에서 순서 외로, 또는 양쪽 모두) 저장되는 두 개의 레지스터들(도 1a 및 도 1b의 예에서 D 또는 64 비트 레지스터들), 4개의 레지스터들(도 1a 및 도 1b의 예에서 S 또는 32 비트 레지스터들) 또는 3개의 레지스터들(예로서, 하나의 D 및 2개의 S 레지스터들)로 분해되었는지를 반영하는 전체 폭 아키텍처 레지스터(즉, 쿼드) 내에 패킹된 모든 레지스터들에 대해 저장될 수 있다.
명령어가 전체 폭 아키텍처 레지스터 또는 그것 내에서 패킹된 아키텍처 레지스터들 중 하나를 액세스하려고 시도할 때, 상태는, 예를 들면, 물리 레지스터 내에 저장된 데이터의 부분을 상이한 비트 위치에서의 새로운 물리 레지스터에 기록함으로써, 원하는 레지스터가 단일 물리 레지스터로부터 직접 액세스될 수 있는지, 데이터가 먼저 상이한 물리 레지스터들로부터 재조립되어야 하는지, 또는 물리 레지스터 내에서의 데이터가 재조직되어야 하는지를 결정하기 위해 검사될 수 있다. 예를 들면, 명령어가 전체 폭 아키텍처 레지스터 또는 그것 내에 패킹된 아키텍처 레지스터들 중 하나를 판독하려고 시도할 때, 상태는, 예를 들면, 물리 레지스터 내에 저장된 데이터의 부분을 상이한 비트 위치에서의 새로운 물리 레지스터에 기록함으로써, 원하는 레지스터가 단일 물리 레지스터로부터 직접 판독될 수 있는지, 데이터가 먼저 상이한 물리 레지스터들로부터 재조립되어야 하는지, 또는 물리 레지스터들 내에서의 데이터가 재조직되어야 하는지를 결정하기 위해 검사될 수 있다. 상태는 또한 다른 유형들의 액세스들, 예를 들면 기록들 등을 위해 검사될 수 있다.
밀집하여 패킹된 레지스터들을 독립적으로 판독하며 기록하는 것이 요구되는 프로세서 아키텍처에서, 보다 큰 대응하는 패킹된 레지스터가 기록된 후 보다 작은 레지스터를 기록하는 것은 단지 보다 큰 패킹된 레지스터에 대해 저장된 데이터의 부분만을 무효화할 수 있다. 따라서 데이터의 나머지를 보존하는 것이 필요할 수 있다. 예를 들면, Q0이 기록되며 그 다음에 S0이 기록되면(새로운 물리 레지스터에 대응하는 새로운 물리 레지스터 명칭(PRN)에 매핑되는), Q0을 저장하는 물리 레지스터 내에서의 S1, S2, 및 S3에 대한 데이터는 여전히 유효하며 보존되어야 하고, 즉 Q0을 저장한 전체 물리 레지스터를 겹쳐 씀으로써 폐기되지 않아야 한다. 패킹된 레지스터들이 어떻게 물리적으로 저장되는지를 반영하는 쿼드 레지스터(Q0)의 상태를 저장함으로써, 패킹된 레지스터들의 각각을 액세스하는 것이 가능한 채로 있다. 이 예에서, 패킹된 레지스터들의 일부는 물리 레지스터들로부터 직접 액세스될 수 있으며 몇몇은 가능하게는 여기에서 추가로 논의된 바와 같이 새로운 물리 레지스터로 그것들을 이동시킴으로써, 물리 레지스터들 내에 저장된 비트들이 재조직됨을 요구할 수 있다.
재명명을 용이하게 하기 위해, 논리 레지스터 명칭(LRN)이 각각의 아키텍처 레지스터에 할당될 수 있다. 매핑은 그 후 그것이 기록되는 물리 레지스터의 LRN 및 PRN 사이에 저장될 수 있다. LRN들 및 PRN들 사이에서의 매핑들을 포함한 표는 레지스터 맵으로서 불리울 수 있다.
새로운 물리 레지스터는 그것이 기록될 때마다 아키텍처 레지스터에 대해 할당될 수 있다(예를 들면, 재명명을 용이하게 하기 위해). 상기 물리 레지스터는 나중에 "회수"될 수 있으며 데이터가 더 이상 유효하지 않을 때 "자유 리스트"로 리턴될 수 있다(즉, 판독을 위해 이용 가능하지 않게 될 수 있으며 새로운 아키텍처 레지스터로의 매핑을 위해 사용될 수 있다).
표 1은 주어진 크기의 주어진 아키텍처 레지스터가, 쿼드를 갖고 앨리어싱되거나 또는 "패킹"된 상이한 아키텍처 레지스터가 이전에 기록된 후 명령어에 의해 판독되거나 또는 기록된다면 발생할 수 있는 예시적인 문제점들을 설명한다. 표 1은 도 2 및 도 3의 Q0을 갖고 패킹된 아키텍처 레지스터들에 대하여 설명된다. 표는 쿼드 내에 패킹된 아키텍처 Q 또는 D 또는 S 레지스터가 상기 쿼드 내에서 패킹된 동일한 또는 상이한 Q 또는 D 또는 S 레지스터가 기록된 후 판독되거나 또는 기록된다면 발생할 수 있는 문제점들을 설명한다.
마지막
기록
현재 동작 이슈?
쿼드로서 쿼드로서 판독 또는 기록 이슈 없음.
하위 더블 판독 이슈 없음. D0에 대한 LRN-PRN 매핑은 유효하며 데이터는 정렬된다.
상위 더블 판독 상위 더블은 이러한 상태로부터 간단히 판독될 수 없다. D1을 위한 LRN-PRN 매핑은 전체 쿼드로의 기록에 의해 유효하지 않게 될 것이며, 전체 쿼드를 위한 PRN에 저장된 데이터는 데이터-경로에 대해 정렬되지 않는다.
하위 더블 기록 하위 더블을 기록하기 전에, upper double에 대한 데이터가 먼저 새로운 PRN에서 보존되어야 한다.
상위 더블 기록 상위 더블은 D1에 대한 LRN-PRN 매핑을 유효하게 함으로써 기록될 수 있지만, 전체 쿼드에 대한 매핑은 이제 단지 하위 더블에 대해서만 유효하다는 것이 주의되어야 한다.
최하위 싱글 판독 이슈 없음. S0에 대한 LRN-PRN 매핑은 유효하며, 데이터가 정렬된다.
상위 싱글들 판독 유효하지 않음. 이들 레지스터들에 대한 매핑은 쿼드 LRN으로의 기록에 의해 유효하지 않게 될 것이며, 쿼드의 PRN에서의 데이터는 데이터 경로에 정렬되지 않는다. 물리 레지스터들 내에서의 비트들의 조작은 상위 싱글들을 판독하기 위해 요구될 것이다.
최하위 싱글들 기록 최하위 싱글들을 기록하기 전에, 다른 싱글들에 대한 데이터가 먼저 보존되어야 한다.
최상위 싱글 기록 S3은 S3에 대한 LRN-PRN 매핑을 유효하게 함으로써 기록될 수 있지만, 전체 쿼드에 대한 PRN은 이제 단지 하위 3개의 싱글들에 대한 유효한 데이터만을 포함한다는 것이 주의되어야 한다.
더블로서 쿼드로서 판독 먼저 전체 쿼드에 대한 데이터를 새로운 PRN으로 재패킹하며 쿼드에 대한 매핑을 유효하게 만들어야 한다.
더블로서 기록 또는 판독 이슈 없음.
하위 싱글 판독 이슈 없음. 하위 싱글에 대한 매핑은 더블과 동일하며, 데이터가 정렬된다.
상위 싱글 판독 먼저 쿼드로부터 상위 싱글에 대한 데이터를 언패킹하도록 요구하며 그것을 데이터 경로에 정렬시키며, 그 후 상위 싱글에 대한 매핑을 유효한 것으로서 주의한다.
쿼드로서 기록 모든 이전 기록들에 대한 데이터를 교체할 것이다. 현재 매핑들 모두에 대한 PRN들을 자유 리스트로 리턴시켜야 한다.
하위 싱글 기록 먼저 상위 싱글에 대한 데이터를 보존해야 하며 레지스터 맵을 통해 그것을 액세스할 수 있음을 보장한다.
상위 싱글 기록 상위 싱글에 대한 매핑은 새로운 PRN을 갖고 유효하게 될 수 있지만, 더블에 대한 매핑은 이제 단지 전체 더블이 아닌, 하위 싱글에 대해서만 유효하다는 것이 주의되어야 한다.
싱글로서 쿼드 또는 더블로서 판독 쿼드/더블은 먼저 모든 그것의 구성 부분들로부터 재패킹되어야 하며 쿼드/더블의 매핑은 쿼드 또는 더블로서 판독되기 위해 유효하다는 것이 주의되어야 한다.
싱글로서 판독 또는 기록 이슈 없음.
쿼드 또는 더블로서 기록 아키텍처에 의존하여, 단지 하나의 PRN이 회수된 uop마다 자유 리스트로 리턴될 수 있다. 따라서, 먼저 쿼드 또는 더블의 다른 부분들에 대한 PRN들을 되찾는 것이 필요할 수 있다.
상기 논의된 바와 같이, 이러한 이슈들을 해결하기 위해, 각각의 쿼드의 레지스터 상태가 저장될 수 있다. 상태를 추적하기 위해, 각각의 쿼드는 다수의 LRN들에 대응할 수 있으며, 이것은 각각 독립적으로 물리 레지스터들에 매핑 가능하다. 독립적으로 매핑 가능한 LRN들의 각각은 패킹된 아키텍처 레지스터들 중 하나 이상을 나타낼 수 있다. 도 1a 및 도 1b의 예에서, 각각의 아키텍처 레지스터는 4개의 LRN들을 가질 수 있다.
제 1 LRN은 전체 Q 레지스터, 하위 D 레지스터(Q 레지스터와 정렬되는), 또는 최하위 S 레지스터(Q 레지스터 및 하위 D 레지스터와 정렬되는)를 나타낼 수 있다. 도 1a의 예에서, 이들 레지스터들은 Q0, D0, 및 S0에 대응하며, 제 1 LRN은 Q0/D0/S0으로서 불리울 수 있다. 제 2 LRN은 단지 제 2 S 레지스터만을 나타낼 수 있다. 도 1a의 예에서, 이것은 S1에 대응하며, 제 2 LRN은 S1로서 불리울 수 있다. 제 3 LRN은 상위 D 레지스터 및 제 3 S 레지스터 양쪽 모두를 나타낼 수 있다. 도 1a의 예에서, 이것들은 정렬되는, D1 및 S2에 대응하며, 제 3 LRN은 D1/S2로서 불리울 수 있다. 제 4 LRN은 단지 제 4 S 레지스터만을 나타낼 수 있다. 도 1a의 예에서, 이것은 S3에 대응하며, 제 4 LRN은 S3으로서 불리울 수 있다.
도 1b의 예시적인 아키텍처 레지스터들(Q0 내지 Q3)(및 그것들의 대응하는 패킹된 D 및 S 레지스터들)에 대한 LRN들의 예시적인 세트가 이하에서 표 2에 도시된다:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0
S1
D1/S2
S3
Q1/D2/S4
S5
D3/S6
S7
Q2/D4/S8
S9
D5/S10
S11
Q3/D6/S12
S13
D7/S14
S15
..
..
..
..
각각의 LRN은 독립적으로 PRN에 매핑될 수 있다. LRN들 대 PRN들의 가능한 매핑을 예시한 예시적인 레지스터 맵이 이하에서 표 3에 도시된다:
Q0 Q1 Q2 Q3 ..

Q0/D0/S0:PRNA
S1:PRNA
D1/S2:PRNA
S3:PRNA

Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB

Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC

Q3/D6/S12:PRND
S13:PRND
D7/S14:PRND
S15:PRND
..
..
..
..
..
LRN-PRN 매핑의 상태는, 그것이 그 외 주어진 LRN을 액세스함으로써 판독된 데이터가 유효할 것임을 특정하지 않을 수 있기 때문에, 상기 논의된 앨리어싱 이슈들을 핸들링하기 위해 추적되어야 한다. 각각의 LRN-PRN 매핑에 대한 상태는 쿼드-단위로 추적될 수 있다(즉, 상태는 앨리어싱되거나 또는 함께 패킹되는 LRN들의 모두와 관련될 수 있다). 쿼드는 다른 레지스터들이 패킹되는 Q 레지스터의 명칭에 의해 불리울 수 있다. 예를 들면, Q0에 대한 상태는 LRN들(Q0/D0/S0, S1, D1/S2, 및 S3) 및 PRN들 사이에서 LRN-PRN 매핑의 상태를 추적할 수 있다. 따라서, Q0이 예를 들면(여기에서 추가로 논의된) 상태(D0/D1)에 있다면, 상태가 이들 아키텍처 레지스터들에 대한 LRN들의 모두와 관련되기 때문에, 상태는 아키텍처 레지스터들(Q0, D0, D1, S0, S1, S2, 또는 S3)로부터의 임의의 판독 또는 그것으로의 기록이 디코딩 동안 이 상태를 고려할 필요가 있을 것임을 표시할 수 있다. 표 4는 LRN-PRN 매핑에 대한 8개의 예시적인 레지스터 상태들을 예시한다.
상태 이름 설명
쿼드 LRN Q00/D00/S00: 쿼드까지 판독들에 대해 유효함
LRN S01: 이 상태에서 유효하지 않음
LRN D01/S02: 이 상태에서 유효하지 않음
LRN S03: 이 상태에서 유효하지 않음
D0/D1 LRN Q00/D00/S00: 더블까지 판독들에 대해 유효함
쿼드로서 유효하지 않음
LRN S01: 이 상태에서 유효하지 않음
LRN D01:S02: 더블 또는 싱글로서 판독들에 대해 유효함
LRN S03: 이 상태에서 유효하지 않음
S0/S1/D1 LRN Q00/D00/S00: 싱글로서 판독들에 대해서만 유효함
LRN S01: 유효함
LRN D01/S02: 더블 또는 싱글로서 판독들에 대해 유효함
LRN S03: 이 상태에서 유효하지 않음
D0/S2/S3 LRN Q00/D00/S00: 더블까지 판독들에 대해 유효함
쿼드로서 유효하지 않음
LRN S01: 이 상태에서 유효하지 않음
LRN D01/S02: 단지 싱글로서만 유효함
LRN S03: 유효함
S0/S1/S2/S3 LRN Q00/D00/S00: 단지 싱글로서만 유효함
LRN S01: 유효함
LRN D01/S02: 단지 싱글로서만 유효함
LRN S03: 유효함
Q/D1 이 상태는 최적화로서 사용될 수 있다. 상태 쿼드에 있으며 D1을 판독하도록 요구한다면, 쿼드의 상위 64 비트들을 새로운 PRN으로 셔플링하며 D01/S02에 대한 LRN을 싱글 또는 더블로서 판독하기 위해 유효하게 만들지만, 또한 원래 LRN(Q00/D00/S00)을 쿼드로서 판독되도록 여전히 유효하게 할 수 있다.
D0/D1U 이 상태는 최적화로서 사용될 수 있다. 상태 쿼드에 있으며 하위 더블을 기록하기를 원한다면, 이 상태는 LRN(Q00/D00/S00) 매핑이 상기 기록으로부터 새로운 PRN을 갖고 더블까지 판독되기 위해 유효한 것으로서 표시되도록 허용할 것이다. D1/S02에 대한 LRN을 전체 쿼드에 대한 원래 PRN으로 향하게 하며, 기록이 회수될 때 상기 PRN을 자유 리스트로 리턴하지 않을 수 있다면, D1에 대한 데이터는 PRN에 있지만, 데이터 경로에 대해 정렬되지 않는다고 알려져 있다. 그것은 D1을 재정렬할 때 임의의 동작이 그것이 판독되도록 요구할 때까지 연기되도록 허용하며, 어떤 부가적인 동작도 D1이 다음에 기록된다면 취해질 필요가 없다. PRN을 복사하기 위한 최고의 방식은 또한 이러한 LRN에 대한 PRN의 쿼드 기록의 원래 기록을 갖는 것이다.
매핑들의 상태에 대해 파악하기 위해, 비트들이 각각의 쿼드에 대해 저장될 수 있다. 이들 비트들은 디코더 유닛(DE) 또는 프로세서의 임의의 다른 적절한 유닛에 의해 추적되고 및/또는 저장될 수 있다. 예를 들면, 3비트들은 8개의 상태들을 추적하기 위해 각각의 쿼드에 대해 DE 내에서의 유닛에 의해 저장되고 추적될 수 있다. 8개의 상태들을 사용한 예에서, 상태는 표 5에 설명된 예시적인 비트 인코딩을 사용하여 추적될 수 있다.
상태 명칭 인코딩
쿼드 001
D0/D1 010
S0/S1/D1 011
D0/S2/S3 100
S0/S1/S2/S3 101
Q/D1 110
D0/D1U 111
표 4 및 표 5에 설명된 상태들은 대표적이라는 것을 주의해야 한다. 예를 들면, 쿼드, D0/D1, 및 S0/S1/S2/S3 상태들은 앨리어싱 이슈들을 처리하기 위해 필수적일 수 있다. 그러나, 다른 상태들, 즉 Q/D1, D0/D1U, D0/S2/S3, 및 S0/S1/D1은 성능 최적화 목적들을 위해 사용될 수 있다(예로서, 물리 레지스터들에서 데이터의 보다 적은 조작들이 이들 부가적인 상태들이 추적된다면 요구될 수 있다). 기법은 예를 들면, 상태들의 수를 증가시킴으로써 또는 상이한 상태들을 사용함으로써, 임의의 수의 최적화들을 위해 추가로 확대될 수 있다는 것이 주의되며 이해될 것이다. 이러한 부가적인 또는 상이한 상태들은 여기에 논의된 원리들로부터 도출 가능한 바와 같이, Q0/D1/S3, Q0/S3, Q0/S1, D0/S1/D1, D0/S1/S2/S3, D0/S1/S2/S3, D0/S1/D1/S3, S0/S1U/D1, D0/S2/S3U, S0/S1U/S2/S3, S0/S1/S2/S3U, S0/S1U/S2/S3U 등을 포함할 수 있다.
데이터 저장 물리 레지스터들이 명령어를 실행할 때 데이터의 유효성을 유지하기 위해 조작되어야 한다고 결정된다면(LRN-PRN 매핑 상태 및 앨리어싱 레지스터들에 대한 액세스의 유형 및 크기에 기초하여), 물리 레지스터들 내에서의 데이터는 부가적인 "수정(fixup)" 마이크로 동작들(uop들)을 명령어에 대한 디코딩된 uop들에 앞선 uop 스트림 또는 버퍼에 주입함으로써 조작될 수 있다(예로서, 물리 레지스터의 부분으로부터 상이한 물리 레지스터의 부분으로 이동될 수 있다). 수정 uop들은 DE 또는 프로세서의 임의의 다른 적절한 구조에 의해 결정되고 및/또는 주입될 수 있다. 몇몇 경우들에서, 여기에서 추가로 논의될 바와 같이 아키텍처 레지스터를 유효하게 판독하거나 또는 기록하기 위해 매핑의 상태를 변경하는 것이 또한 또는 대안적으로 필요할 수 있다.
수정 uop들은 다양한 구성들로 레지스터들을 패킹 및/또는 언패킹하기 위해 명령어에 대한 uop들로 또는 그것에 앞서 주입될 수 있다. 이들 uop들 또는 그것의 조합들은 표 6에 설명된 예시적인 수정 uop들 중 하나 이상을 포함할 수 있다. 이들 uop들에 대한 명칭들은 임의적이라는 것을 주의해야 한다. 물리 레지스터 비트들이 128비트 쿼드에 대해 설명되지만, 다른 비트 폭들이 다른 아키텍처들에 대해 적절하다면 변화를 위한 변화로 사용될 수 있다는 것이 또한 주의된다.
fkregq2d
<소스>
<목적지>
소스 PRN의 상위 비트들(예로서, 127:64)을 취하며 그것들을 목적지 PRN의 하위 비트들(예로서, 63:0)에 위치시키며 목적지 PRN의 상위 레지스터(예로서, 비트들 127:64)를 제로화한다. PRN들을 자유 리스트로 리턴시키지 않는다.
fkregd2s
<소스>
<목적지>
소스 PRN의 비트들(63:32)을 취하며 그것들을 목적지 PRN의 비트들(31:0)에 위치시키고, 목적지 PRN의 상위 레지스터(예로서, 비트들 127:32)를 제로화한다. PRN들을 자유 리스트로 리턴시키지 않는다.
fkregs2d
<소스 1>
<소스 2>
<목적지>
소스 1 PRN의 비트들(31:0)을 취하며 그것들을 목적지 PRN의 비트들(31:0)에 위치시키고, 소스 2 PRN의 비트들(31:0)을 취하며 그것들을 목적지 PRN의 비트들(63:0)에 위치시켜서, 목적지 레지스터의 나머지(예로서, 비트들 127:64)를 제로화한다. 소스 1에 대한 PRN을 자유 리스트로 리턴시킨다.
fkregd2q
<소스 1>
<소스 2>
<목적지>
소스 1 PRN의 비트들(63:0)을 취하며 그것들을 목적지 PRN의 비트들(63:0)에 위치시키고, 소스 2 PRN의 비트들(63:0)을 취하며 그것들을 목적지 PRN의 비트들(127:64)에 위치시킨다. 소스 1에 대한 PRN을 자유 리스트로 리턴시킨다.
fkreclaimprn
<소스>
소스에 대한 PRN을 다시 자유 리스트에 두지만, 그것을 레지스터 맵에서 매핑된 채로 둔다. PRN은 이러한 uop가 자유 리스트 상에 두어지는 PRN으로부터 데이터를 복구할 다른 재패킹 op들(fkregs2d 또는 fkregd2q) 중 하나를 사용하여 원자적으로 회수되어야 한다.
이들 수정 uop들 중 하나 이상을 주입하는 것 및/또는 쿼드의 상태를 변경하는 것이 필요한지를 결정하기 위해, 프로세서의 적절한 부분이 명령어의 피연산자 아키텍처 레지스터들 중에서 및 재명명되는 임의의 다른 명령어들 중에서 임의의 앨리어싱을 검출하고(즉, 그것들이 쿼드를 공유하는지), 임의의 이러한 레지스터들에 대한 상태를 검사하고, 만약에 있다면 어떤 uop들이 상태에 기초하여 이러한 레지스터를 유효하게 판독하거나 또는 기록하기 위해 명령어에 대해 주입되어야 하는지를 결정하며, 만약에 있다면 어떤 상태로 레지스터 상태가 변경되어야 하는지를 결정한다. 이들 결정들은, 이들 결정들이 임의의 적절한 구조에 의해 이루어질 수 있다고 주의되지만, 예를 들면 디코드 유닛 또는 디코드 유닛으로부터의 디코딩된 명령어의 피연산자 레지스터들에 대한 정보를 수신하는 앨리어싱 로직에 의해 이루어질 수 있다.
표 7 내지 표 13은 쿼드의 현재 상태(즉, 아키텍처 레지스터가 패킹되는 쿼드에 대한 LRN-PRN 매핑의 상태)에 기초하여 아키텍처 레지스터로의 판독들 또는 기록들을 위해 필요할 수 있는 예시적인 상태 전이들 및 uop 주입들을 예시한다. 상태 명칭들은 Q0에 대하여 표시되지만, 여기에서 추가로 예시될 바와 같이 변화를 위해 패킹된 아키텍처 레지스터들(Q0 내지 Q15) 변화 중 임의의 것에 관련된다.
현재 상태 및
PRN들
동작 다음 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후 상태
쿼드
A-A-A-A
쿼드/D0/S0
판독
D1 판독 fkregq2d D1, Q0 Q/D1
S1 판독 fkregq2d D1, Q0
fkregd2s S1, D0
Q/D1
S0/S1/D1
S2 판독 fkregq2d D1, Q0 Q/D1
S3 판독 fkregq2d D1, Q0
fkregd2s S3, D1
Q/D1
D0/S2/S3
D1 기록 D0/D1
A-A-B-B
D0 기록 D0/D1U
B-B-A-A
S0 기록 fkregq2d D1, Q0
fkregq2s S1, D0
Q/D1
S0/S1/D1
S1 기록 fkregq2d D1, Q0 Q/D1
S2 기록 fkregq2d D1, Q0
fkregd2s S3, D1
Q/D1
D0/S2/S3
S3 기록 fkregq2d D1, Q0 Q/D1
D1 언패킹 쿼드/D1
A-A-B-B
현재 상태 및
PRN들
동작 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
D0/D1
A-A-B-B
쿼드 판독 fkreclaimprn D1
fkregd2q Q0, D0, D1
(원자 시퀀스)
쿼드
D0 판독
D1 판독
S0 판독
S2 판독
S1 판독 fkregd2s S1, D0 S0/S1/D1
S3 판독 fkregd2s S3, D1 D0/S2/S3
S0 기록 fkregd2s S1, D0 S0/S1/D1
S2 기록 fkregd2s S3, D1 D0/S2/S3
S1 기록 S0/S1/D1
A-C-B-B
S3 기록 D0/S2/S3
A-A-B-C
D0 기록 D0/D1
C-C-B-B
D1 기록 D0/D1
A-A-C-C
쿼드 기록 fkreclaimprn D1
fkregd2q Q0, D0, D1
(원자 시퀀스)
쿼드
S1 언패킹 S0/S1/D1
A-C-B-B
S3 언패킹 D0/S2/S3
A-A-B-C
쿼드 패킹 쿼드/D1
C-C-B-B
현재 상태 및
PRN들
동작 다음 상태
및 PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
D0/D1U
B-B-A-A
쿼드 판독 fkreclaimprn D1
fkregd2qh Q0, D0, D1
(원자 시퀀스)
쿼드
D0 판독
S0 판독
D1 판독 fkregq2d D1, D1 D0/D1
S1 판독 fkregq2d D1, D1
fkregd2s S1, D0
D0/D1
S0/S1/D1
S2 판독 fkregq2d D1, D1 D0/D1
S3 판독 fkregq2d D1, D1
fkregd2s S3, D1
D0/D1
D0/S2/S3
D0 기록 D0/D1U
C-C-A-A
D1 기록 D0/D1
B-B-C-C
S0 기록 fkregq2d D1, D1
fkregd2s S1, D0
D0/D1
S0/S1/D1
S1 기록 fkregq2d D1, D1 D0/D1
S2 기록 fkregq2d D1, D1
fkregd2s S3, D1
D0/D1
D0/S2/S3
S3 기록 fkregq2d D1, D1 D0/D1
현재 상태 및
PRN들
동작 다음 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
S0/S1/D1
C-D-B-B
쿼드 판독 fkreclaimprn S1
fkregs2d D0, S0, S1

fkreclaimprn D1
fkregd2q Q, D0, D1
(원자 시퀀스)
D0/D1

(원자 시퀀스)
쿼드
S0 판독
S1 판독
D1 판독
S2 판독
D0 판독 fkreclaimprn S1
fkregs2d D0, S0, S1
(원자 시퀀스)
D0/D1
S3 판독 fkregd2s S3, D1 S0/S1/S2/S3
S0 기록 S0/S1/D1
E-D-B-B
S1 기록 S0/S1/D1
C-E-B-B
D1 기록 S0/S1/D1
C-D-E-E
쿼드 기록 fkreclaimprn S1
fkregs2d D0, S0, S1

fkreclaimprn D1
fkregd2q Q, D0, D1
(원자 시퀀스)
D0/D1

(원자 시퀀스)
쿼드
D0 기록 fkreclaimprn S1
fkregs2d D0, S0, S1
(원자 시퀀스)
D0/D1
S2 기록 fkregd2s S3, D1 S0/S1/S2/S3
S3 기록 S0/S1/S2/S3
현재 상태 및
PRN들
동작 다음 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
D0/S2/S3
A-A-B-C
쿼드 판독 fkreclaimprn S3
fkregs2d D1, S2, S3

fkreclaimprn D1
fkregd2q Q, D0, D1
(원자 시퀀스)
D0/D1

(원자 시퀀스)
쿼드
D0 판독
S0 판독
S2 판독
S3 판독
D1 판독 fkreclaimprn S3
fkregs2d D1, S2, S3
(원자 시퀀스)
D0/D1
S1 판독 fkregd2s S1, D0 S0/S1/S2/S3
쿼드 기록 fkreclaimprn S3
fkregs2d D1, S2, S3
fkreclaimprn D1
fkregd2q Q0, D0, D1
(원자 시퀀스)
D0/D1
(원자 시퀀스)
쿼드
D1 기록 fkreclaimprn S3
fkregs2d D1, S2, S3
(원자 시퀀스)
D0/D1
D0 기록 D0/S2/S3
D-D-B-C
S2 기록 D0/S2/S3
A-A-D-C
S3 기록 D0/S2/S3
A-A-B-D
S1 기록 S0/S1/S2/S3
A-D-B-C
현재 상태 및
PRN들
동작 다음 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
S0/S1/S2/S3
A-B-C-D
쿼드/D0/D1
판독
fkreclaimprn S3
fkregs2d D1, S2, S3

fkreclaimprn S1
fkregs2d D0, S0, S1

fkreclaimprn D1
fkregd2q Q0, D0, D1
(원자 시퀀스)
S0/S1/D1

(원자 시퀀스)
D0/D1

(원자 시퀀스)
쿼드
D0 판독 fkreclaimprn S1
fkregs2d D0, S0, S1
(원자 시퀀스)
D0/S2/S3
D1 판독 fkreclaimprn S1
fkregs2d D0, S0, S1
(원자 시퀀스)
D0/S2/S3
S0 판독
S1 판독
S2 판독
S3 판독
쿼드 기록 fkreclaimprn S3
fkregs2d D1, S2, S3

fkreclaimprn S1
fkregs2d D0, S0, S1

fkreclaimprn D1
fkregd2q Q0, D0, D1
(원자 시퀀스)
S0/S1/D1

(원자 시퀀스)
D0/D1

(원자 시퀀스)
쿼드
D0 기록 fkreclaimprn S1
fkregs2d D0, S0, S1
(원자 시퀀스)
D0/S2/S3
D1 기록 fkreclaimprn S3
fkregs2d D1, S2, S3
(원자 시퀀스)
S0/S1/D1
S0 기록 S0/S1/S2/D3
E-B-C-D
S1 기록 S0/S1/S2/S3
A-E-C-D
S2 기록 S0/S1/S2/S3
A-B-E-D
S3 기록 S0/S1/S2/S3
A-B-C-E
현재 상태 및
PRN들
동작 다음 상태 및
PRN들
패킹/언패킹
op들
패킹/언패킹 후
상태
쿼드/D1
A-A-B-B
쿼드
판독
D0 판독
D1 판독
S0 판독
S1 판독 fkregd2s S1, D0 S0/S1/D1
S2 판독
S3 판독 fkregd2s S3, D1 D0/S2/S3
쿼드 기록 fkreclaimprn D1
fkregd2q Q, D0, D1
(원자 시퀀스)
쿼드
D0 기록 D0/D1
C-C-B-B
D1 기록 D0/D1
A-A-C-C
S0 기록 fkregd2s S1, D0 S0/S1/D1
S1 기록 S0/S1/D1
A-C-B-B
S2 기록 fkregd2s S3, D1 D0/S2/S3
S3 기록 D0/S2/S3
A-A-B-C
D1 패킹 쿼드
C-C-C-C
S1 언패킹 S0/S1/D1
A-C-B-B
S3 언패킹 D0/S2/S3
A-A-B-C
각각의 쿼드에 대한 상태를 추적하기 위해, 레지스터 상태 표가 유지될 수 있다. 표 14는 아키텍처 레지스터들(Q0 내지 Q3)을 갖고 패킹된 레지스터들의 예시적인 상태를 반영한 레지스터 상태 표를 예시한다.
레지스터 상태
Q0:Q
Q1:Q
Q2:Q
Q3:Q
...
도 3은 상기 설명된 바와 같이 명령어들을 디코딩하며 앨리어싱 효과들을 핸들링하기 위한 예시적인 회로(300)를 예시한 블록도이다. 회로(300)는 명령어 추출 로직(305), 명령어 디코드 유닛들(310, 315, 320), 앨리어싱 및 상태 추적 로직(325), 및 uop 버퍼(330)를 포함한다. 회로(300)는 프로세서(102)(도 2)와 같은 프로세서의 부분일 수 있다. 이들 유닛들은 단지 예들이며, 몇몇 구현들에서 적절한 경우 대체되거나 또는 생략될 수 있다는 것을 주의해야 한다.
추출 로직(305)은 명령어들의 스트림을 수신하고, 스트림으로부터 N개의 명령어들(이 예에서 부동 소수점 명령어들)을 추출하며, 상기 명령어들을 N개의 디코드 유닛들로 로딩한다. 3개의 디코드 유닛들(310, 315, 320)이 도시되지만, 디코드 유닛들 및 추출된 명령어들의 수는 원하는 대로 더 크거나 또는 더 작을 수 있다는 것을 주의해야 한다.
추출 로직(305)은 명령어 인출 유닛(도시되지 않음)으로부터 또는 임의의 다른 적절한 소스로부터 명령어들의 스트림을 수신할 수 있다. 추출 로직(305)은 그 후 추출된 명령어들을 디코드 유닛들(310, 315, 320)로 로딩할 수 있다. 단지 3개의 디코드 유닛들만이 3개의 추출된 명령어들을 디코딩하기 위해 도시되지만, 원칙적으로 임의의 수의 디코드 유닛들이 임의의 수의 추출된 명령어들을 디코딩하기 위해 사용될 수 있다.
디코드 유닛(310)은 명령어(INST1)를 실행을 위한 하나 이상의 uop들로 디코딩하며 디코딩된 uop들을 uop 버퍼(330)로 로딩한다. 몇몇 구현들에서(도시되지 않음), uop 버퍼(330)는 생략될 수 있으며, uop들은 단순히 아래쪽의 실행 유닛(335)으로 디스패칭될 수 있다는 것을 주의해야 한다. 디코드 유닛(310)은 또한 INST1의 피연산자 레지스터들에 대한 정보를 로직(325)으로 송신한다. 디코드 유닛(315)은 명령어(INST2)를 실행을 위한 하나 이상의 uop들로 디코딩하며 디코딩된 uop들을 uop 버퍼(330)로 로딩한다. 디코드 유닛(315)은 또한 INST2의 피연산자 레지스터들에 대한 정보를 로직(325)으로 송신한다. 디코드 유닛(320)은 명령어(INST3)를 실행을 위한 하나 이상의 uop들로 디코딩하며 디코딩된 uop들을 uop 버퍼(330)로 로딩한다. 디코드 유닛(320)은 또한 INST3의 피연산자 레지스터들에 대한 정보를 로직(325)으로 송신한다. 디코드 유닛들(315, 320, 325)은 3개의 명령어들을 동시에 디코딩할 수 있지만, 상기 명령어들은 다른 구현들에서 비-동시적으로 디코딩될 수 있다는 것을 주의해야 한다.
로직(325)은 그것이 유효한지를 결정하기 위해 INST1의 각각의 피연산자 레지스터에 대한 LRN-PRN 매핑의 상태를 검사한다. 상태 매핑이 유효하지 않다면, 로직(325)은 uop들이 주입되어야 하는지를 결정하며 상태 변화가 요구되는지를 결정한다. uop 주입이 필요하다면, 로직(325)은 uop 버퍼(330)에서 INST1에 대한 디코딩된 uop들에 앞서 적절한 수정 uop들을 주입한다. 상기 논의된 바와 같이, 몇몇 구현들에서(도시되지 않음) uop 버퍼(330)는 생략될 수 있으며, uop들은 간단히 INST1에 대한 디코딩된 uop들에 앞서 주입되고 아래쪽의 실행 유닛(335)으로 디스패칭될 수 있다는 것을 주의해야 한다. 상태 변화가 요구된다면, 로직(325)은 쿼드에 대한 매핑의 상태를 업데이트한다. 로직(325)은 또한 INST2 및 INST3에 대한 이들 동일한 태스크들을 수행한다.
INST1, INST2, 및 INST3에 대한 모든 디코딩된 op들이 버퍼(330)로 로딩된 후, 임의의 요구된 수정 op들이 주입되며, 상태는 요구된 대로 업데이트되고, uop 버퍼(330)에서의 uop들의 큐는 실행을 위해 하나 이상의 실행 유닛들(335)로 디스패칭될 수 있다. 상기 언급된 바와 같이, uop 버퍼(도시되지 않음)를 사용하지 않는 구현들에서, uop들은 이미 아래쪽의 실행 유닛(335)으로 디스패칭되었을 수 있다.
도 4는 상기 설명된 바와 같이 명령어들을 디코딩하기 위한 예시적인 방법(400)을 예시한 흐름도이다.
단계(405)에서, 임의의 명령어들이 디코딩하기 위해 이용 가능한지가 결정된다. 명령어들이 디코딩하기 위해 이용 가능하다면, 그것들은 단계(410)에서 uop들로 디코딩된다. 결정은 디코드 유닛들에 의해 이루어질 수 있으며 uop들은 도 3에 대하여 논의된 바와 같이 버퍼링될 수 있다.
단계(415)에서, 명령어들의 피연산자 레지스터들 중 임의의 것이 유효한 LRN-PRN 상태 매핑을 위해 아직 검사되지 않았는지가 결정된다. 그렇다면, 각각의 레지스터의 상태가 단계(420)에서 검사된다. 이들 결정들은 도 3에 대하여 논의된 바와 같은 피연산자 레지스터들에 관한 정보를 수신하는 앨리어싱 로직에 의해 이루어질 수 있다.
몇몇 구현들에서(도시되지 않음) LRN-PRN 상태 매핑이 유효성은 uop들의 디코딩 전에 또는 그것과 동시에 검사될 수 있다는 것을 주의해야 한다.
레지스터 상태가 유효하지 않은 것으로 결정된다면, 단계(425)에서 수정 uop들을 주입하는 것이 필요한지가 결정된다. 이러한 결정은 앨리어싱 로직에 의해 이루어질 수 있다. 수정 uop들을 주입할 필요가 있다면, 그것들은 단계(430)에서 주입된다. 수정 uop들은 명령어들을 위한 디코딩된 uop들에 앞서 uop 큐로 주입될 수 있으며 도 3에 대하여 논의된 바와 같이 버퍼링될 수 있다.
단계(425)에서 uop들을 주입하는 것으로 결정되었는지 여부에 관계없이, 단계(435)에서 LRN-PRN 매핑의 상태를 변경하는 것이 필요한지가 또한 결정된다. 그렇다면, 매핑은 단계(440)에서 업데이트된다. 어느 경우든, 흐름은 단계(415)로 리턴한다.
유효 상태를 검사하기 위한 추가 레지스터들이 없다면, 디코딩되고 주입된 uop들은 단계(445)에서 실행을 위해 디스패칭될 수 있다.
3개의 부동 소수점 명령어들의 다음의 예시적인 병렬 디코딩은 여기에서 논의된 원리들을 예시하며, 도 1 내지 도 4에 대하여 논의된 구조들 및 방법들을 사용하여 실행될 수 있다. 그러나, 많은 수정들 및 정교화들이 가능할 수 있다는 것을 주의해야 한다. 이 예를 위해, 각각의 쿼드에 대한 LRN-PRN 매핑의 초기 상태(즉, 레지스터 상태)가 표 15에 의해 도시된다. 단지 4개의 쿼드들만이 이 예에서 사용되며 따라서 단지 4개의 상태들만이 예시될 것이라는 것을 주의해야 한다.
레지스터 상태
Q0:Q
Q1:Q
Q2:Q
Q3:Q
...
초기 LRN-PRN 매핑(즉, 레지스터 맵)이 표 16에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNA
S1:PRNA
D1/S2:PRNA
S3:PRNA
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRND
S13:PRND
D7:S14:PRND
S15:PRND
..
..
..
..
..
물리 레지스터 파일(PRF)의 초기 콘텐트들이 표 17에 의해 도시된다.

PRNA:
S3 S2 S1 S0
D1 D0
Q0

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2

PRND:
S15 S14 S13 S13
D7 D6
Q3
이 예에서 디코딩될 3개의 예시적인 부동 소수점 명령어들은:
INST1: Add Q0 = Q1 + Q2
INST2: Sub D0 = D1 - D2
INST3: Mul Q3 = Q0 * Q1이다.
이 예에서, 명령어들은 도 3에 도시된 바와 같이 디코드 유닛들(310, 315, 320)에 의해 동시에 디코딩된다. 그러나, 명령어들은 다른 구현들에서 순차적으로 또는 순서 외로 디코딩될 수 있다는 것을 주의해야 한다.
디코드 유닛(310)은 INST1을 디코딩하며 나중 실행을 위해 아래쪽의 버퍼(330)로 INST1에 대한 uop들을 전달한다. 디코드 유닛(310)은 또한 그것의 피연산자들이 레지스터들(Q0, Q1, 및 Q2)임을 표시하는 정보를 로직(325)에 송신한다. 로직(325)은 아키텍처 레지스터들(Q0, Q1, 및 Q2)이 서로 앨리어싱되지 않음을 검출한다. 따라서, 어떤 uop들도 INST1에 대한 uop들에 앞서 주입되도록 요구되지 않으며 레지스터 상태들은 변경될 필요가 없다.
디코드 유닛(315)은 INST2를 디코딩하며 INST1에 대한 uop들 뒤에서 나중 실행을 위해 아래쪽의 버퍼(330)로 INST2에 대한 uop들을 전달한다. 디코드 유닛(315)은 또한 그것의 피연산자들이 레지스터들(D0, D1, 및 D2)임을 표시하는 정보를 로직(325)에 송신한다.
로직(325)은 레지스터(D2)가, 상태(Q)에 있는, Q1과 앨리어싱됨을 검출한다. 로직(325)은 또한 상태(Q)에 있는 Q0과의 D1의 판독 및 D0의 기록의 레지스터 앨리어싱을 검출한다.
D2는 상태(Q)에 있는 Q1으로부터 판독 가능하다. 이것은 D2가 Q1의 하위 더블(lower double)이며, Q1이 상태(Q)에 있을 때 판독을 위해 유효하기 때문이다. 따라서, 로직(325)은 INST2에 대한 uop들에 앞서 임의의 uop들을 주입하지 않으며 이러한 앨리어싱을 위해 레지스터 상태들을 변경하지 않는다.
D1은 Q0이 상태(Q)에 있을 때 판독을 위해 유효하지 않다. 따라서, D1의 판독은 fkregq2d D1, Q0의 주입 및 Q에서 Q0/D1로의 Q0의 상태 전이를 요구한다. 따라서, 로직(325)은 큐에서 INST2에 대한 uop들에 앞서 이러한 uop를 주입하며 상태(Q0/D1)를 반영하기 위해 Q0에 대한 상태 비트들을 업데이트한다. 이것은 D1이 상위 더블(upper double)이며, Q0이 상태(Q)에 있을 때 물리 레지스터들의 LSB와 정렬되지 않기 때문에 행해진다.
주입된 uop(fkregq2d D1, Q1)는 Q0을 저장한 물리 레지스터의 상위 더블(upper double)(즉, 상위 64 비트들 - D1에 대한 데이터)을 취하며 새로운 물리 레지스터의 하위 더블에 이러한 데이터를 기록할 것이다. D1은 이러한 uop가 실행된 후 이러한 새로운 물리 레지스터에 매핑될 것이며, D1에 대한 데이터는 물리 레지스터의 LSB와 정렬될 것이고 따라서 유효하게 판독될 수 있다. 이러한 uop는 PRN을 자유 리스트로 리턴시키지 않을 것이며 원래 데이터는 원래 물리 레지스터들에 남아있을 것이라는 것을 주의해야 한다.
이러한 언패킹 후, Q0의 상태(Q0 내에서 패킹된 모든 아키텍처 레지스터들을 나타내는)는 쿼드 상태에 대해 유효할 판독들이 여전히 유효하지만(즉, 이러한 데이터는 이전과 같이 원래 물리 레지스터에 남아있다) D1의 판독들은 이제, D1이 새로운 물리 레지스터에 매핑되기 때문에, 또한 유효하다는 것을 표시하기 위해 Q/D1으로 변경될 것이다.
D0은 임의의 uop들을 주입하지 않고 Q0이 상태(Q/D1)에 있을 때 기록될 수 있다. 그러나, 기록에 이어서, D0은 새로운 물리 레지스터에 매핑될 것이며 D1은 다른 물리 레지스터에서 유효한 판독들에 대해 이용 가능한 채로 있을 것이다. 그러므로 Q0은 더 이상 직접 판독 가능하지 않을 것이며, 따라서 Q0의 상태는 Q/D1에서 D1/D0으로 업데이트되어야 한다. 따라서, 로직(325)은 상태(D1/D0)를 반영하기 위해 Q0에 대한 상태 비트들을 업데이트한다.
이때 레지스터 상태는 표 18에 의해 반영된다.
레지스터 상태
Q0:D0/D1
Q1:Q
Q2:Q
Q3:Q
...
디코드 유닛(320)은 INST3을 디코딩하며 INST2에 대한 uop들 뒤에서 나중 실행을 위해 아래쪽의 버퍼(330)로 INST3에 대한 uop들을 전달한다. 디코드 유닛(320)은 또한 그것의 피연산자들이 레지스터들(Q3, Q0, 및 Q1)임을 표시하는 정보를 로직(325)에 송신한다. 로직(325)은 레지스터(Q0)가 D0 및 D1과 앨리어싱됨을 검출한다.
Q0은 상태(D0/D1)에 있으며, Q0은 이 상태에서 직접 판독될 수 없다. 이것은 D0 및 D1 레지스터들이 상이한 물리 레지스터들에 매핑되기 때문이다. Q0을 판독하기 위해, 상태는 uop들을 주입함으로써 변경되어야 한다. 따라서, 로직(325)은 INST3에 대한 uop들에 앞서 두 개의 연속 uop들을 주입한다. 제 1 uop(fkreclaimprn D1)는 D1이 다시 매핑되는 물리 레지스터를 자유 리스트 상에 두지만, 그것을 레지스터 맵에 매핑된 채로 둔다. 이것은 제 2 uop에 대한 준비 단계이다. 제 2 uop(fkregd2q Q0, D0, D1)는 Q0에 대한 새로운 물리 레지스터를 할당하고, D0에 매핑된 물리 레지스터로부터의 하위 더블을 새로운 물리 레지스터의 하위 더블에 기록하며, D1에 매핑된 물리 레지스터로부터의 하위 더블을 새로운 레지스터의 상위 더블에 기록한다. 이것은 새로운 레지스터에서 쿼드를 "재조립"하여, 그것을 Q0을 판독하기 위해 유효하게 한다. 따라서, Q0으로 패킹된 레지스터들에 대한 상태는 그 후 Q로 변경된다. 몇몇 구현들에서(도시되지 않음), fkreclaimprn D1 uop는 생략될 수 있으며, 상태는 Q/D1로 변경될 수 있어서, D1에 대한 PRN을 매핑되게 한다는 것을 주의해야 한다. fkreclaimprn uop들은 항상 예를 들면 표 6에 도시된 바와 같이 제 2 수정 uop(여기에서 fkregd2q)를 갖고 원자적으로 실행될 수 있다는 것이 또한 주의된다.
이때 레지스터 상태는 표 19에 의해 반영된다.
레지스터 상태
Q0:Q
Q1:Q
Q2:Q
Q3:Q
...
명령어들을 디코딩하고, uop들을 주입하며, 및/또는 적절하다면 레지스터 상태를 변경한 후, 명령어 uop들의 큐는:
1) add Q0 = Q1 + Q2에 대한 uop들
2) fkregq2d D1, Q0에 대한 uop들
3) Sub D0 = D1 - D2에 대한 uop들
4) fkreclaimprn D1에 대한 uop들
5) fkregd2q Q0, D1에 대한 uop들
6) mul Q3 = Q0 * Q1에 대한 uop들이다.
일단 명령어들이 그에 따라 디코딩되고, 수정 uop들이 주입되며, 상태들이 적절한 경우 업데이트된다면, uop들은 다음과 같이 로직(325)의 레지스터 맵 로직에 의해 프로세싱될 수 있다.
add Q0 = Q1 + Q2에 대한 디코딩된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, Q0을 저장하기 위한 새로운 PRN(PRNE)은 Q0 내에 패킹된 아키텍처 레지스터들에 대한 LRN들(즉, Q0/D0/S0, S1, D1/S2, 및 S3)에 매핑된다. 연산은 또한 매핑을 사용하여 Add PRNE = PRNB + PRNC로 변환된다. 이러한 연산 후 레지스터 맵의 상태는 표 20에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNE
S1:PRNE
D1/S2:PRNE
S3:PRNE
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRND
S13:PRND
D7/S14:PRND
S15:PRND
..
..
..
..
..
fkregq2d D1, Q0에 대한 주입된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, D1을 저장하기 위한 새로운 PRN(PRNF)이 D1 내에 패킹된 아키텍처 레지스터들에 대한 LRN들(즉, D1/S2 및 S3)에 매핑된다. 연산은 또한 매핑을 사용하여 fkregq2d PRNF = PRNE[127:64]로 변환된다. 이러한 연산 후 레지스터 맵의 상태는 표 21에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNA
S1:PRNA
D1/S2:PRNF
S3:PRNF
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRND
S13:PRND
D7/S14:PRND
S15:PRND
..
..
..
..
..
sub D0 = D1 - D2에 대한 디코딩된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, D0을 저장하기 위한 새로운 PRN(PRNG)이 D0 내에 패킹된 아키텍처 레지스터들에 대한 LRN들(즉, Q0/D0/S0 및 S1)에 매핑된다. 연산은 매핑을 사용하여 SUB PRNG = PRNF - PRNC로 변환된다. 이러한 연산 후 레지스터 맵의 상태는 표 22에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNG
S1:PRNG
D1/S2:PRNF
S3:PRNF
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRND
S13:PRND
D7/S14:PRND
S15:PRND
..
..
..
..
..
fkreclaimprn D1에 대한 주입된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, 레지스터 맵에 대한 어떤 변화도 없으며, 연산은 매핑을 사용하여 fkreclaimprn PRNF로 변환된다.
fkregd2q Q0, D1에 대한 주입된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, Q0을 저장하기 위한 새로운 PRN(PRNH)이 Q0 내에 패킹된 아키텍처 레지스터들에 대한 LRN들(즉, Q0/D0/S0, S1, D1/S2, 및 S3)에 매핑된다. 연산은 fkregd2q PRNH[127:0] = PRNF[63:0], PRNG[63:0]으로 변환된다. 이러한 연산 후 레지스터 맵의 상태는 표 23에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNH
S1:PRNH
D1/S2:PRNH
S3:PRNH
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRND
S13:PRND
D7/S14:PRND
S15:PRND
..
..
..
..
..
Mul Q3 = Q0×Q1에 대한 디코딩된 uop 또는 uop들이 레지스터 맵 로직에 의해 프로세싱될 때, Q3을 저장하기 위한 새로운 PRN(PRNI)이 Q3 내에 패킹된 아키텍처 레지스터들에 대한 LRN들(즉, Q3/D6/S12, S13, D7/S14, S15)에 매핑된다. 연산은 매핑을 사용하여 mul PRNI = PRNH×PRNB로 변환된다. 이러한 연산 후 레지스터 맵의 상태는 표 24에 의해 도시된다.
레지스터 맵:
Q0 Q1 Q2 Q3 ..
Q0/D0/S0:PRNH
S1:PRNH
D1/S2:PRNH
S3:PRNH
Q1/D2/S4:PRNB
S5:PRNB
D3/S6:PRNB
S7:PRNB
Q2/D4/S8:PRNC
S9:PRNC
D5/S10:PRNC
S11:PRNC
Q3/D6/S12:PRNI
S13:PRNI
D7/S14:PRNI
S15:PRNI
..
..
..
..
..
uop들의 모두가 레지스터 맵 로직에 의해 프로세싱된 후, 그것들은 실행 유닛(335)(또는 유닛들)에 의해 실행될 수 있으며, 다음과 같이 PRF 파일에 대한 변화들을 야기한다.
a. add PRNE = PRNB + PRNC(add Q0 = Q1 + Q2로부터). 대응하는 op들이 실행된 후 PRF 상태는 표 25에 의해 도시된다.
물리 레지스터 파일:
PRNA: 매핑되지 않음 - 자유 리스트로 리턴됨 - xx

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2

PRND:
S15 S14 S13 S13
D7 D6
Q3

PRNE:
S3 S2 S1 S0
D1 D0
Q0
b. fkregq2d PRNF = PRNE[127:64](fkregq2d D1, Q0로부터). 대응하는 op들이 실행된 후 PRF 상태는 표 26에 의해 도시된다.
물리 레지스터 파일:
PRNA: 매핑되지 않음 - xx

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2

PRND:
S15 S14 S13 S13
D7 D6
Q3

PRNE:
S3 S2 S1 S0
D1 D0
Q0

PRNF:
xx xx S3 S4
xx D1
xx
c. sub PRNG = PRNF - PRNB(sub D0 = D1 - D2로부터). 대응하는 op들이 실행된 후 PRF 상태는 표 27에 의해 도시된다.
물리 레지스터 파일:
PRNA: 매핑되지 않음 - xx

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2

PRND:
S15 S14 S13 S13
D7 D6
Q3
PRNE: 매핑되지 않음 - 자유 리스트로 리턴됨 - xx

PRNF:
xx xx S3 S4
xx D1
xx

PRNG:
xx xx S1 S0
xx D0
xx
d. fkreclaimprn PRNF(fkreclaimprn D1로부터). fkreclaimprn이 회수될 때까지 PRF에 대한 어떤 변화도 없으며, 이때 레지스터는 자유 리스트로 리턴되지만, fkreclaimprn은 다음의 uop를 갖고 회수되어야 한다. 따라서 PRF 효과는 fkreclaimprn을 갖고 원자적인 fkregd2q 후 발생할 것이다.
e. fkregd2q PRNH[127:0] = PRNF[63:0], PRNG[63:0](fkregd2q Q0, D1). 대응하는 op들이 실행된 후 PRF 상태는 표 28에 의해 도시된다.
물리 레지스터 파일:
PRNA: 매핑되지 않음 - xx

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2

PRND:
S15 S14 S13 S13
D7 D6
Q3
PRNE: 매핑되지 않음 - xx
PRNF: 매핑되지 않음 - 자유 리스트로 리턴됨 - xx
PRNG: 매핑되지 않음 - 자유 리스트로 리턴됨 - xx

PRNH:
S3 S2 S1 S0
D1 D0
Q0
f. mul PRNI = PRNH × PRNB(mul Q3 = Q0 × Q1로부터). 대응하는 op들이 실행된 후 PRF 상태는 표 29에 의해 도시된다.
물리 레지스터 파일:
PRNA: 매핑되지 않음 - xx

PRNB:
S7 S6 S5 S4
D3 D2
Q1

PRNC:
S11 S10 S9 S8
D5 D4
Q2
PRND: 매핑되지 않음 - 자유 리스트로 리턴됨 - xx
PRNE: 매핑되지 않음 - xx
PRNF: 매핑되지 않음 - xx
PRNG: 매핑되지 않음 - xx

PRNH:
S3 S2 S1 S0
D1 D0
Q0

PRNI:
S15 S14 S13 S13
D7 D6
Q3
몇몇 구현들에서, 특정한 레지스터의 패킹은 명령어들의 디코딩을 최적화하기 위해 시간에 걸쳐 추적될 수 있다. 이러한 추적은 프로세서의 앨리어싱 및 상태 추적 로직 또는 또 다른 적절한 부분에서 행해질 수 있으며, 재패킹 uop들을 주입하기 위한 요구를 최소화하기 위해 사용될 수 있다. 예를 들면, 명령어들의 스트림이 상기 레지스터의 대다수의 사용과 상충되는 방식으로 특정한 레지스터를 액세스하는 작은 수의 명령어들을 포함한다면, 프로세서는 그것이 상기 작은 수의 명령어들을 디코딩하는 방식을 변경할 수 있다. 보다 구체적으로, 명령어들의 스트림이 레지스터가 보통 액세스되는 크기와 상충되는 레지스터 크기를 사용하여 특정한 패킹된 레지스터를 액세스하는 작은 수의 명령어들을 포함한다면, 프로세서는 상충되는 크기들을 가진 이들 명령어들이 디코딩되는 방식을 변경할 수 있다.
이러한 충돌들은 ISA의 구조의 결과로서 발생할 수 있다. 예를 들면, 단지 하나의 사이징된 로드 또는 저장 명령어(예로서, 64 비트들)만을 포함하는 ISA에서, 다른 명령어들은 상이한 크기(예로서, 128 비트들)로서 이들 로드들 또는 저장들의 결과들을 이용할 수 있다. 이러한 충돌들은 또한 유사한 거동을 야기하는 특정한 코딩 스타일로 인해 발생할 수 있다. 예를 들면, 특정한 프로그램은, ISA가 이러한 방식으로 제한되지 않는 경우에서조차, 하나의 크기 또는 크기들의 세트로 데이터를 로드하거나 또는 저장하며 상이한 크기 또는 크기들의 세트로서 저장된 데이터에 대해 동작할 수 있다.
이러한 경우들을 처리하기 위해, 레지스터들의 패킹의 이력이 추적될 수 있다. 몇몇 구현들에서, 하나 이상의 카운터들이 액세스들의 크기를 추적하기 위해 각각의 레지스터에 대해 유지될 수 있다. 포화 카운터가 이러한 목적들을 위해 사용될 수 있다. 예를 들면, 포화 카운터는 예를 들면, Q0으로의 액세스들을 위해 유지될 수 있으며, 여기에서 이러한 카운터는 각각의 쿼드-사이징 액세스에 대해 증가되며 각각의 더블-사이징 액세스에 대해 감소된다. 임계 포인트가 결정될 수 있으며, 그 결과 프로세서는 Q0이 쿼드로서 또는 더블로서 보다 빈번하게 액세스되는지에 의존하여 2개의 64 비트 로드들 uop들 또는 1개의 128-비트 로드 uop를 주입할 것이다. 다른 이력 추적 전략들이 가능하다는 것을 주의해야 한다.
예를 들면, 수정 uop 주입들의 이력은 또한 또는 대안적으로 추적될 수 있으며, 프로세서는 명령어를 상이하게 디코딩하는 것이 보다 양호한 성능을 산출할 수 있는 상황들을 검출하기 위해 이러한 이력 정보를 사용할 수 있다. 몇몇 구현들에서, 디코딩되는 명령어의 어드레스는 해싱 알고리즘을 사용하여 분석될 수 있으며 이러한 이력들은 각각의 레지스터에 대한 메모리에 저장될 수 있다. 예시하기 위해, Q0(예로서, 128 비트들)이 먼저 이등분하여 로딩되며(예로서, 먼저 D0을 로딩하고 그 후 D1을 로딩한다) 나중에 쿼드 레지스터(예로서, 128비트들)로서 액세스된다면, uop들은 로딩 이전에 Q0을 먼저 언패킹하기 위해 주입될 수 있으며, uop가 또한 액세스 이전에 Q0을 재패킹하기 위해 주입될 수 있다. 그러나, 명령어들의 특정한 스트림이 주로 쿼드 레지스터(예로서, 128비트들)로서 Q0을 액세스하며 주로 이등분하여 레지스터를 로딩한다면(예로서, 먼저 D0을 로딩하고 그 후 D1을 로딩한다), 프로세서는 시간에 걸쳐 명령어 스트림에 대한 uop들의 주입을 추적함으로써 이를 검출할 수 있다. 일단 이러한 거동이 검출되면(예로서, 예를 들면 상기 설명된 바와 같이, 이력, 포화 카운터를 사용하여, 또는 전략적으로), 2개의 64비트 로드들을 수행하기 위해 uop들을 연속 D 레지스터들에 전송하는 대신에, 프로세서는 단지 1개의 128-비트 로드 uop를 전체 쿼드 레지스터에 발행할 수 있어서, 로딩 전에 Q0을 언패킹하며 사용 이전에 로딩 후 Q0을 재패킹하기 위한 요구를 제거한다. 이러한 검출은 로딩 및 저장을 위해 요구된 uop들의 최종적인 수를 감소시킴으로써 성능을 개선하는 이점을 가질 수 있다. 이러한 추적의 다양한 다른 치환들이 이 기술분야의 숙련자들에게 명백할 것이다.
다음의 예시적인 최적화들은 레지스터 매핑의 기능으로서 수행될 수 있다. 상기 논의된 바와 같이, 몇몇 아키텍처들에서 단지 하나의 고정 지원된 로드 크기가 있을 수 있다. 예를 들면, 예시적인 벡터 로드 명령어(VLD*)에 대한 유일한 지원된 로드 크기는 64비트들일 수 있다. 이러한 경우에, 128-비트 산술을 수행하는 임의의 명령어는 반드시 2개의 64-비트 청크들에서 이전에 로딩된 데이터를 사용할 것이다.
이 경우에, 로드의 길이 및 시작 목적지 레지스터 번호와 함께 목적지 레지스터의 현재 매핑은 더블 또는 쿼드로서 데이터를 로딩할지를 결정하기 위해 프로세서에 의해 사용될 수 있다. 명령어가 짝수의 레지스터들을 로딩한다면, 제 1 레지스터는 짝수 레지스터 번호이며, 현재 맵은 목적지들이 이전에 쿼드들로서 사용되었음을 도시하며, 데이터는 쿼드들로서 로딩될 수 있다. 명령어가 홀수의 레지스터들을 로딩하고, 홀수로 된 레지스터로 시작하거나, 또는 현재 매핑이 레지스터의 이전 사용이 쿼드가 아니었음을 도시한다면, 데이터는 더블들로서 로딩될 수 있다.
유사한 최적화들이 명령어들을 저장하기 위해 적용 가능할 수 있다. 짝수 또는 홀수의 레지스터들이 저장되는지, 및 저장이 짝수 또는 홀수 레지스터로 시작하는지에 관계없이, 현재 매핑에 의존하여 더블들 또는 쿼드들로서 소스를 저장하는 것이 가능할 수 있다.
일반적으로, 데이터를 길게 하는 명령어들(즉, 소스 레지스터들 중 하나 이상보다 긴 아키텍처 레지스터로의 기록)은 이러한 최적화에 영향을 받기 쉬울 수 있다. 이러한 명령어의 예는 더블 레지스터들로서 특정된 소스들 중 하나 또는 양쪽 모두, 및 쿼드 레지스터로서 특정된 목적지를 가질 수 있다. 이들 명령어들이 uop들로 디코딩되는 방식 때문에, 그것들이 현재 쿼드들로서 패킹된다면 및 디코더가 시퀀스에서 uop들을 변환할 수 있다면 소스들을 언패킹하지 않고 이러한 명령어들을 실행하는 것이 가능할 수 있다.
예를 들면, 명령어(VADDL.S8 <Qd>, <Dn>, <Dm>)는 Dn 및 Dm에서 데이터를 길게 하는 두 개의 셔플 uop들 및 add를 수행하기 위한 제 3 uop로 분해될 수 있다. 셔플 uop는, 예를 들면 상위 또는 하위 비트들(64 비트들)로부터, 명령어의 레지스터를 길게 할 수 있다. 특정 예에서, fkpmovsxbw <목적지> <소스>는 소스의 비트들(63:0)에서 패킹된 데이터를 길게 하기 위해 사용될 수 있는 반면, fkpmovsxbwh <목적지> <소스>는 소스의 비트들(127:64)에서 패킹된 데이터를 길게 하기 위해 사용될 수 있다. 예를 들면, 명령어 소스가 비트들(127:64) 쿼드로서 현재 패킹되는 홀수 D 레지스터인 경우에, fkpmovsxbwh uop는 fkpmovsxb2 대신에 사용될 수 있으며, 레지스터는 주입된 uop들을 갖고 언패킹될 필요가 없을 수 있다. 첫 두 개의 셔플 op들이 레지스터가 홀수인지 또는 짝수인지 및 레지스터가 쿼드 또는 더블로서 패킹되는지에 기초하여 변환된다면, uop들은 다음과 같을 수 있다(레지스터들이 싱글들로서 패킹되지 않는다고 가정한다면).
1) (Dn이 짝수이거나 또는 더블로서 패킹된다면), (fkpmovsxbw FT0, Dn) 그렇게 않다면 (fkpmovsxbwh FT0, Qx) 여기에서 x = (n-1)/2.
2) (Dm이 짝수이거나 또는 더블로서 패킹된다면), (fkpmovsxbw FT1, Dm), 그렇지 않다면 (fkpmovsxbwh FT1, Qy) 여기에서 y = (m-1)/2.
3) fkpaddw Qd, FT0, FT1
소스들 중 단지 하나만이 더블이지만, 다른 것이 쿼드이며 목적지가 쿼드인 명령어들을 확장하기 위해서도 이것이 마찬가지이다. 이 경우에, 상기 언급된 op 변환은 소스 더블에 대해 수행될 수 있다.
다양한 실시예들이 부동 소수점 유닛 및 부동 소수점 레지스터들에 대해 설명되었지만, 이들 개념들은 또한 앨리어싱 효과들이 발생할 수 있는 다른 프로세싱 유닛들 및 패킹된 레지스터들에 적용될 수 있다는 것을 주의해야 한다. 예를 들면, 여기에서 설명된 개념들은 ISA가 도 1a 및 도 1b에 예시된 것과 유사한 밀집하여 패킹된 구성에서의 부동 소수점 레지스터들이 아닌 레지스터들을 조직하는 경우 적용할 수 있다.
여기에 제공된 방법들 또는 흐름도들은 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비-일시적 컴퓨터-판독 가능한 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어에서 구현될 수 있다. 비-일시적 컴퓨터-판독 가능한 저장 미디어의 예들은 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스들, 내부 하드 디스크들 및 착탈 가능한 디스크들과 같은 자기 미디어, 자기-광학 미디어, 및 CD-ROM 디스크들, 및 디지털 다목적 디스크들(DVD들)과 같은 광 미디어를 포함한다.
실시예들:
1. 물리 메모리에 저장된 패킹된 레지스터들을 액세스하기 위한 방법에 있어서, 상기 패킹된 레지스터들의 상태를 저장하는 단계; 명령어가 상기 패킹된 레지스터들의 레지스터를 액세스한다는 조건으로, 상기 레지스터가 상기 패킹된 레지스터들의 상태에 기초하여 직접 액세스 가능한지를 결정하는 단계; 및 상기 레지스터가 직접 액세스 가능하지 않다는 조건으로, 상기 레지스터가 직접 액세스되도록 허용하는 동작을 수행하는 단계를 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
2. 실시예 1에 있어서, 상기 동작은 적어도 하나의 uop를 주입하는 것 또는 상기 상태를 변경하는 것을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
3. 실시예 1 또는 실시예 2에 있어서, 상기 동작은 상기 상태를 변경하는 것을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
4. 실시예 1 내지 실시예 3 중 어느 하나의 실시예에 있어서, 상기 동작은 상기 레지스터의 최하위 비트(LSB)를 물리 레지스터의 LSB와 정렬시키는 것을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
5. 실시예 1 내지 실시예 4 중 어느 하나의 실시예에 있어서, 상기 액세스는 판독 동작 또는 기록 동작을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
6. 실시예 1 내지 실시예 5 중 어느 하나의 실시예에 있어서, 상기 액세스는 기록 동작을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
7. 실시예 1 내지 실시예 6 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들의 비트들은 상기 물리 메모리의 적어도 하나의 물리 레지스터에 저장되는, 패킹된 레지스터들을 액세스하기 위한 방법.
8. 실시예 1 내지 실시예 7 중 어느 하나의 실시예에 있어서, 상기 물리 메모리는 물리 레지스터 파일을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
9. 실시예 1 내지 실시예 8 중 어느 하나의 실시예에 있어서, 이력을 생성하기 위해 상기 동작 및 후속 동작들, 또는 상기 레지스터의 패킹 및 상기 레지스터의 후속 패킹을 추적하는 단계, 및 상기 이력에 기초하여 장래 동작들이 요구되는지 또는 어떤 장래 동작들이 요구되는지를 결정하는 단계를 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
10. 실시예 1 내지 실시예 9 중 어느 하나의 실시예에 있어서, 상기 동작은 상기 액세스 이전에 제 2 물리 레지스터에 상기 패킹된 레지스터들의 비트들의 적어도 일 부분을 저장하는 적어도 하나의 uop를 주입하는 것을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
11. 실시예 1 내지 실시예 10 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 주입된 적어도 하나의 uop의 실행에 이어서 상기 제 2 물리 레지스터에서 직접 액세스 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
12. 실시예 1 내지 실시예 11 중 어느 하나의 실시예에 있어서, 상기 레지스터의 최하위 비트(LSB)는 상기 주입된 적어도 하나의 uop의 실행에 이어서 상기 제 2 물리 레지스터의 LSB와 정렬되는, 패킹된 레지스터들을 액세스하기 위한 방법.
13. 실시예 1 내지 실시예 12 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 패킹된 레지스터들이 단일 물리 레지스터 내에 또는 하나 이상의 물리 레지스터 내에 저장되는지를 표시하는, 패킹된 레지스터들을 액세스하기 위한 방법.
14. 실시예 1 내지 실시예 13 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 저장된 패킹된 레지스터들이 적어도 하나의 물리 레지스터 내에서 배열되는 순서를 표시하는, 패킹된 레지스터들을 액세스하기 위한 방법.
15. 실시예 1 내지 실시예 14 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 각각 물리 레지스터에 매핑되는, 패킹된 레지스터들을 액세스하기 위한 방법.
16. 실시예 1 내지 실시예 15 중 어느 하나의 실시예에 있어서, 복수의 논리 레지스터 명칭들(LRN)은 각각 상기 패킹된 레지스터들 중 하나 이상과 연관되며, 각각의 LRN은 물리 레지스터와 연관된 물리 레지스터 명칭(PRN)에 매핑되는, 패킹된 레지스터들을 액세스하기 위한 방법.
17. 실시예 1 내지 실시예 16 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 패킹된 레지스터들의 각각의 LRN 대 PRN 매핑의 유효성을 반영하는, 패킹된 레지스터들을 액세스하기 위한 방법.
18. 실시예 1 내지 실시예 17 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 레지스터의 최하위 비트(LSB)가 물리 레지스터의 LSB와 정렬된다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
19. 실시예 1 내지 실시예 18 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 레지스터가 상기 비트들을 액세스하기 전에 물리 메모리에 저장된 레지스터의 비트들을 이동시키지 않고 상기 명령어에 의해 액세스될 수 있다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
20. 실시예 1 내지 실시예 19 중 어느 하나의 실시예에 있어서, 상기 레지스터는 부동 소수점 레지스터인, 패킹된 레지스터들을 액세스하기 위한 방법.
21. 실시예 1 내지 실시예 20 중 어느 하나의 실시예에 있어서, 상기 명령어는 부동 소수점 명령어인, 패킹된 레지스터들을 액세스하기 위한 방법.
22. 실시예 1 내지 실시예 21 중 어느 하나의 실시예에 있어서, 상기 주입된 적어도 하나의 uop는 상기 주입된 적어도 하나의 uop가 디코딩된 적어도 하나의 uop 전에 실행되도록 상기 명령어에 대한 적어도 하나의 디코딩된 uop에 앞서 주입되는, 패킹된 레지스터들을 액세스하기 위한 방법.
23. 실시예 1 내지 실시예 22 중 어느 하나의 실시예에 있어서, 상기 주입된 적어도 하나의 uop는 두 개의 uop들을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
24. 실시예 1 내지 실시예 23 중 어느 하나의 실시예에 있어서, 상기 두 개의 uop들은 원자적으로 실행하도록 구성되는, 패킹된 레지스터들을 액세스하기 위한 방법.
25. 실시예 1 내지 실시예 24 중 어느 하나의 실시예에 있어서, 상기 두 개의 uop들 중 양쪽 모두는 상기 상태가 업데이트되기 전에 실행하도록 구성되는, 패킹된 레지스터들을 액세스하기 위한 방법.
26. 실시예 1 내지 실시예 25 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 하나의 쿼드 정도 레지스터, 두 개의 배 정도 레지스터들, 및 4개의 단 정도 레지스터들을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
27. 실시예 1 내지 실시예 26 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들 중 하나로의 기록에 이어서, 그것이 패킹되는 패킹된 레지스터들 중 보다 큰 것이 판독 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
28. 실시예 1 내지 실시예 27 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 아키텍처 레지스터들인, 패킹된 레지스터들을 액세스하기 위한 방법.
29. 물리 메모리에 저장된 패킹된 레지스터들을 액세스하도록 구성된 디바이스에 있어서, 상기 패킹된 레지스터들의 상태를 저장하는 회로; 명령어가 상기 패킹된 레지스터들의 레지스터를 액세스하는 조건으로, 상기 상태에 기초하여 상기 레지스터가 직접 액세스 가능한지를 결정하는 회로; 및 상기 레지스터가 직접 액세스 가능하지 않다는 조건으로, 상기 레지스터가 직접 액세스되도록 허용하는 동작을 수행하는 회로를 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
30. 실시예 29에 있어서, 상기 동작은 적어도 하나의 uop를 주입하는 것을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
31. 실시예 29 또는 실시예 30에 있어서, 상기 동작은 상기 상태를 변경하는 것을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
32. 실시예 29 내지 실시예 31 중 어느 하나의 실시예에 있어서, 상기 동작은 상기 레지스터의 최하위 비트(LSB)를 물리 레지스터의 LSB와 정렬시키는 것을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
33. 실시예 29 내지 실시예 32 중 어느 하나의 실시예에 있어서, 상기 액세스는 판독 동작인, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
34. 실시예 29 내지 실시예 33 중 어느 하나의 실시예에 있어서, 상기 액세스는 기록 동작인, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
35. 실시예 29 내지 실시예 34 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들의 비트들은 상기 물리 메모리의 적어도 하나의 물리 레지스터에 저장되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
36. 실시예 29 내지 실시예 35 중 어느 하나의 실시예에 있어서, 상기 물리 메모리는 물리 레지스터 파일을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
37. 실시예 29 내지 실시예 36 중 어느 하나의 실시예에 있어서, 이력을 생성하기 위해, 상기 동작 및 후속 동작들, 또는 상기 레지스터의 패킹 및 상기 레지스터의 후속 패킹을 추적하는 회로; 및 상기 이력에 기초하여 추가 동작들이 요구되는지 또는 어떤 추가 동작들이 요구되는지를 결정하는 회로를 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
38. 실시예 29 내지 실시예 37 중 어느 하나의 실시예에 있어서, 상기 액세스 이전에 제 2 물리 레지스터에 상기 패킹된 레지스터들의 비트들의 적어도 일 부분을 저장하는 적어도 하나의 uop를 주입하는 회로를 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
39. 실시예 29 내지 실시예 38 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 주입된 적어도 하나의 uop의 실행에 이어 상기 제 2 물리 레지스터에서 직접 액세스 가능한, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
40. 실시예 29 내지 실시예 39 중 어느 하나의 실시예에 있어서, 상기 레지스터의 최하위 비트(LSB)는 상기 주입된 적어도 하나의 uop의 실행에 이어 상기 제 2 물리 레지스터의 LSB와 정렬되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
41. 실시예 29 내지 실시예 40 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 패킹된 레지스터들이 단일 물리 레지스터 내에 또는 하나 이상의 물리 레지스터 내에 저장되는지를 표시하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
42. 실시예 29 내지 실시예 41 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 저장된 패킹된 레지스터들이 적어도 하나의 물리 레지스터 내에 배열되는 순서를 표시하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
43. 실시예 29 내지 실시예 42 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 각각 물리 레지스터에 매핑되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
44. 실시예 29 내지 실시예 43 중 어느 하나의 실시예에 있어서, 복수의 논리 레지스터 명칭들(LRN)은 각각 상기 패킹된 레지스터들 중 하나 이상과 연관되며, 각각의 LRN은 물리 레지스터와 연관된 물리 레지스터 명칭(PRN)에 매핑되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
45. 실시예 29 내지 실시예 44 중 어느 하나의 실시예에 있어서, 상기 상태는 상기 패킹된 레지스터들의 각각의 LRN 대 PRN 매핑의 유효성을 반영하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
46. 실시예 29 내지 실시예 45 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 레지스터의 최하위 비트(LSB)가 물리 레지스터의 LSB와 정렬된다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
47. 실시예 29 내지 실시예 46 중 어느 하나의 실시예에 있어서, 상기 레지스터는 상기 레지스터가 상기 비트들을 액세스하기 전에 물리 메모리에 저장된 상기 레지스터의 비트들을 이동시키지 않고 상기 명령어에 의해 액세스될 수 있다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
48. 실시예 29 내지 실시예 47 중 어느 하나의 실시예에 있어서, 상기 레지스터는 부동 소수점 레지스터인, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
49. 실시예 29 내지 실시예 48 중 어느 하나의 실시예에 있어서, 상기 명령어는 부동 소수점 명령어인, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
50. 실시예 29 내지 실시예 49 중 어느 하나의 실시예에 있어서, 상기 주입된 적어도 하나의 uop는 상기 주입된 적어도 하나의 uop가 상기 디코딩된 적어도 하나의 uop 전에 실행되도록 상기 명령어에 대한 적어도 하나의 디코딩된 uop에 앞서 주입되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
51. 실시예 29 내지 실시예 50 중 어느 하나의 실시예에 있어서, 상기 주입된 적어도 하나의 uop는 두 개의 uop들을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
52. 실시예 29 내지 실시예 51 중 어느 하나의 실시예에 있어서, 상기 두 개의 uop들은 원자적으로 실행하도록 구성되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
53. 실시예 29 내지 실시예 52 중 어느 하나의 실시예에 있어서, 상기 두 개의 uop들 중 양쪽 모두는 상기 상태가 업데이트되기 전에 실행하도록 구성되는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
54. 실시예 29 내지 실시예 53 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 하나의 쿼드 정도 레지스터, 두 개의 배 정도 레지스터들, 및 4개의 단 정도 레지스터들을 포함하는, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
55. 실시예 29 내지 실시예 54 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들 중 하나로의 기록에 이어, 그것이 패킹되는 상기 패킹된 레지스터들 중 보다 큰 것이 판독 가능한, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.
56. 실시예 29 내지 실시예 55 중 어느 하나의 실시예에 있어서, 상기 패킹된 레지스터들은 아키텍처 레지스터들인, 패킹된 레지스터들을 액세스하도록 구성된 디바이스.

Claims (20)

  1. 물리 메모리에 저장된 패킹된(packed) 레지스터들을 액세스하기 위한 방법에 있어서,
    상기 패킹된 레지스터들의 상태를 저장하는 단계;
    명령어가 상기 패킹된 레지스터들의 레지스터의 액세스를 포함한다는 것을 조건으로, 상기 패킹된 레지스터들의 상태에 기초하여 상기 레지스터가 직접 액세스 가능한지를 결정하는 단계; 및
    상기 레지스터가 직접 액세스 가능하지 않다는 것을 조건으로, 상기 레지스터가 직접 액세스되도록 허용하는 동작을 수행하는 단계를 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  2. 제1항에 있어서,
    상기 동작은 적어도 하나의 uop를 주입하는 것, 상기 상태를 변경하는 것, 또는 상기 레지스터의 최하위 비트(least significant bit; LSB)를 물리 레지스터의 LSB와 정렬시키는 것 중 적어도 하나를 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  3. 제1항에 있어서,
    상기 액세스는 판독 동작 또는 기록 동작을 포함하며, 상기 동작은 상기 레지스터가 직접 판독되거나 또는 기록되도록 허용하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  4. 제1항에 있어서,
    상기 패킹된 레지스터들의 비트들은 물리 레지스터 파일의 적어도 하나의 물리 레지스터에 저장되는, 패킹된 레지스터들을 액세스하기 위한 방법.
  5. 제1항에 있어서,
    이력을 생성하기 위해, 상기 동작 및 적어도 하나의 후속 동작, 상기 레지스터의 패킹 및 상기 레지스터의 적어도 하나의 후속 패킹, 또는 상기 레지스터의 상태 및 적어도 하나의 후속 상태 중 적어도 하나를 추적하는 단계, 및
    상기 이력에 기초하여 장래 동작이 요구되는지 또는 어떤 장래 동작이 요구되는지를 결정하는 단계를 더 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  6. 제4항에 있어서,
    상기 동작은 상기 액세스 이전에 제 2 물리 레지스터에 상기 패킹된 레지스터들의 비트들의 적어도 일 부분을 저장하는 적어도 하나의 uop를 주입하는 것을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  7. 제1항에 있어서,
    상기 상태는 상기 패킹된 레지스터들이 단일 물리 레지스터 내에 저장되는지, 상기 패킹된 레지스터들이 2 이상의 물리 레지스터 내에 저장되는지, 또는 상기 저장된 패킹된 레지스터들이 적어도 하나의 물리 레지스터 내에 배열되는 순서 중 적어도 하나를 표시하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  8. 제1항에 있어서,
    상기 패킹된 레지스터들은 각각 물리 레지스터에 매핑되는, 패킹된 레지스터들을 액세스하기 위한 방법.
  9. 제1항에 있어서,
    복수의 논리 레지스터 명칭(logical register name; LRN)들은 각각 상기 패킹된 레지스터들 중 하나 이상과 연관되며, 각각의 LRN은 물리 레지스터와 연관된 물리 레지스터 명칭(physical register name; PRN)에 매핑되는, 패킹된 레지스터들을 액세스하기 위한 방법.
  10. 제9항에 있어서,
    상기 상태는 상기 패킹된 레지스터들의 각각의 LRN 대 PRN 매핑의 유효성을 반영하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  11. 제1항에 있어서,
    상기 레지스터는 상기 레지스터의 최하위 비트(LSB)가 물리 레지스터의 LSB와 정렬된다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
  12. 제1항에 있어서,
    상기 레지스터는 상기 레지스터가 상기 비트들을 액세스하기 전에 물리 메모리에 저장된 상기 레지스터의 비트들을 이동시키지 않고 상기 명령어에 의해 액세스될 수 있다면 직접 액세스 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
  13. 제2항에 있어서,
    상기 주입된 적어도 하나의 uop는 상기 주입된 적어도 하나의 uop가 디코딩된 적어도 하나의 uop 전에 실행되도록 상기 명령어의 상기 적어도 하나의 디코딩된 uop에 앞서 주입되는, 패킹된 레지스터들을 액세스하기 위한 방법.
  14. 제1항에 있어서,
    상기 패킹된 레지스터들은 하나의 쿼드 정도(quad precision) 레지스터, 두 개의 배 정도(double precision) 레지스터들, 및 4개의 단 정도(single precision) 레지스터들을 포함하는, 패킹된 레지스터들을 액세스하기 위한 방법.
  15. 제1항에 있어서,
    상기 패킹된 레지스터들 중 하나로의 기록에 이어, 그것이 패킹되는 상기 패킹된 레지스터들 중 보다 큰 것이 판독 가능한, 패킹된 레지스터들을 액세스하기 위한 방법.
  16. 제1항에 있어서,
    상기 패킹된 레지스터들은 아키텍처 레지스터들인, 패킹된 레지스터들을 액세스하기 위한 방법.
  17. 물리 메모리에 저장된 패킹된 레지스터들을 액세스하기 위한 디바이스에 있어서,
    상기 패킹된 레지스터들의 상태를 저장하는 회로;
    명령어가 상기 패킹된 레지스터들의 레지스터를 액세스한다는 것을 조건으로, 상기 상태에 기초하여 상기 레지스터가 직접 액세스 가능한지를 결정하는 회로; 및
    상기 레지스터가 직접 액세스 가능하지 않다는 것을 조건으로, 상기 레지스터가 직접 액세스되도록 허용하는 동작을 수행하는 회로를 포함하는, 패킹된 레지스터들을 액세스하기 위한 디바이스.
  18. 제17항에 있어서,
    상기 동작은 적어도 하나의 uop를 주입하는 것, 상기 상태를 변경하는 것, 상기 레지스터의 최하위 비트(LSB)를 물리 레지스터의 LSB와 정렬시키는 것 중 적어도 하나를 포함하는, 패킹된 레지스터들을 액세스하기 위한 디바이스.
  19. 제17항에 있어서,
    이력을 생성하기 위해, 상기 동작 및 적어도 하나의 후속 동작, 상기 레지스터의 패킹 및 상기 레지스터의 적어도 하나의 후속 패킹, 또는 상기 레지스터의 상태 및 적어도 하나의 후속 상태 중 적어도 하나를 추적하는 회로; 및
    상기 이력에 기초하여 장래 동작이 요구되는지 또는 어떤 장래 동작이 요구되는지를 결정하는 회로를 더 포함하는, 패킹된 레지스터들을 액세스하기 위한 디바이스.
  20. 제17항에 있어서,
    상기 상태는 상기 패킹된 레지스터들이 단일 물리 레지스터 내에 저장되는지, 상기 패킹된 레지스터들이 2 이상의 물리 레지스터 내에 저장되는지, 또는 상기 저장된 패킹된 레지스터들이 적어도 하나의 물리 레지스터 내에 배열되는 순서 중 적어도 하나를 표시하는, 패킹된 레지스터들을 액세스하기 위한 디바이스.
KR1020167012859A 2013-10-27 2014-10-24 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들 KR102332478B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361896091P 2013-10-27 2013-10-27
US61/896,091 2013-10-27
PCT/US2014/062195 WO2015061697A1 (en) 2013-10-27 2014-10-24 Processor and methods for floating point register aliasing

Publications (2)

Publication Number Publication Date
KR20160078377A true KR20160078377A (ko) 2016-07-04
KR102332478B1 KR102332478B1 (ko) 2021-11-30

Family

ID=52993625

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167012859A KR102332478B1 (ko) 2013-10-27 2014-10-24 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들

Country Status (6)

Country Link
US (1) US20150121040A1 (ko)
EP (1) EP3060978B1 (ko)
JP (1) JP6511462B2 (ko)
KR (1) KR102332478B1 (ko)
CN (1) CN105993000B (ko)
WO (1) WO2015061697A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US10949202B2 (en) 2016-04-14 2021-03-16 International Business Machines Corporation Identifying and tracking frequently accessed registers in a processor
US10007590B2 (en) 2016-04-14 2018-06-26 International Business Machines Corporation Identifying and tracking frequently accessed registers in a processor
CN107291425B (zh) * 2017-06-23 2020-11-24 上海兆芯集成电路有限公司 合并解决重命名尺寸问题的部分写入结果的系统和方法
JP7176204B2 (ja) * 2018-03-12 2022-11-22 オムロン株式会社 演算ユニット、および制御装置
JP7032647B2 (ja) * 2018-04-17 2022-03-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11327757B2 (en) * 2020-05-04 2022-05-10 International Business Machines Corporation Processor providing intelligent management of values buffered in overlaid architected and non-architected register files
US11366774B2 (en) * 2020-09-24 2022-06-21 Adesto Technologies Corporation Memory latency reduction in XIP mode

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004145898A (ja) * 1995-12-19 2004-05-20 Intel Corp 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
US20040268092A1 (en) * 2003-06-30 2004-12-30 Zeev Sperber Elimination of potential renaming stalls due to use of partial registers
US20110208918A1 (en) * 2009-12-26 2011-08-25 Shlomo Raikin Move elimination and next page prefetcher
US20120059998A1 (en) * 2010-09-03 2012-03-08 Nimrod Alexandron Bit mask extract and pack for boundary crossing data
US20120110305A1 (en) * 2010-11-03 2012-05-03 Wei-Han Lien Register Renamer that Handles Multiple Register Sizes Aliased to the Same Storage Locations

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
ATE489674T1 (de) * 1999-09-08 2010-12-15 Hajime Seki Registerumbenennungssystem
US6633970B1 (en) * 1999-12-28 2003-10-14 Intel Corporation Processor with registers storing committed/speculative data and a RAT state history recovery mechanism with retire pointer
EP1217513A3 (en) * 2000-12-23 2003-08-13 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
US7428631B2 (en) * 2003-07-31 2008-09-23 Intel Corporation Apparatus and method using different size rename registers for partial-bit and bulk-bit writes
US20050102494A1 (en) * 2003-11-12 2005-05-12 Grochowski Edward T. Method and apparatus for register stack implementation using micro-operations
TWI273485B (en) * 2004-02-04 2007-02-11 Via Tech Inc Pipeline microprocessor, apparatus, and method for generating early status flags
CN100524208C (zh) * 2006-10-26 2009-08-05 中国科学院计算技术研究所 对状态寄存器进行重命名的方法和使用该方法的处理器
US8694758B2 (en) * 2007-12-27 2014-04-08 Intel Corporation Mixing instructions with different register sizes
US8069339B2 (en) * 2009-05-20 2011-11-29 Via Technologies, Inc. Microprocessor with microinstruction-specifiable non-architectural condition code flag register
US8578136B2 (en) * 2010-06-15 2013-11-05 Arm Limited Apparatus and method for mapping architectural registers to physical registers
US9626190B2 (en) * 2010-10-07 2017-04-18 Advanced Micro Devices, Inc. Method and apparatus for floating point register caching
EP2624126B1 (en) * 2011-04-07 2016-11-02 VIA Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9063747B2 (en) * 2011-04-28 2015-06-23 Freescale Semiconductor, Inc. Microprocessor systems and methods for a combined register file and checkpoint repair register
CN102184290B (zh) * 2011-05-06 2013-02-06 天津大学 嵌入式微处理器的周期精确和位精确系统级模型构建方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004145898A (ja) * 1995-12-19 2004-05-20 Intel Corp 単一のレジスタ・ファイルを使用して浮動小数点命令およびパック・データ命令を実行する方法および装置
US20040268092A1 (en) * 2003-06-30 2004-12-30 Zeev Sperber Elimination of potential renaming stalls due to use of partial registers
US20110208918A1 (en) * 2009-12-26 2011-08-25 Shlomo Raikin Move elimination and next page prefetcher
US20120059998A1 (en) * 2010-09-03 2012-03-08 Nimrod Alexandron Bit mask extract and pack for boundary crossing data
US20120110305A1 (en) * 2010-11-03 2012-05-03 Wei-Han Lien Register Renamer that Handles Multiple Register Sizes Aliased to the Same Storage Locations

Also Published As

Publication number Publication date
EP3060978A1 (en) 2016-08-31
JP6511462B2 (ja) 2019-05-15
KR102332478B1 (ko) 2021-11-30
CN105993000B (zh) 2021-05-07
EP3060978B1 (en) 2021-08-11
WO2015061697A1 (en) 2015-04-30
EP3060978A4 (en) 2017-06-28
JP2017502434A (ja) 2017-01-19
CN105993000A (zh) 2016-10-05
US20150121040A1 (en) 2015-04-30

Similar Documents

Publication Publication Date Title
KR20160078377A (ko) 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들
US20210026634A1 (en) Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register
TWI463332B (zh) 在單一指令多資料之資料處理器中提供擴充尋址模式
KR101502682B1 (ko) 레지스터 초기화 연산들을 최적화하기
US20180189066A1 (en) Processor
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
KR20190049743A (ko) 메모리 위반 예측
US9361242B2 (en) Return stack buffer having multiple address slots per stack entry
US7721066B2 (en) Efficient encoding for detecting load dependency on store with misalignment
TW200527283A (en) Renaming for register with multiple bit fields
US20140025927A1 (en) Reducing register read ports for register pairs
KR20160031503A (ko) 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치
CN115640047B (zh) 指令操作方法及装置、电子装置及存储介质
KR102161682B1 (ko) 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법
JP2023526788A (ja) マスターシャドウ物理レジスタファイルを利用するための方法及びシステム
KR20190107691A (ko) 레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현
US20170046160A1 (en) Efficient handling of register files
US20190138308A1 (en) Unaligned memory accesses
US9323532B2 (en) Predicting register pairs
KR20210074276A (ko) 정확한 인터럽트 그리고/또는 덮어 쓰기 기능을 갖는 벡터 명령어
US9298459B2 (en) Managing register pairing
US20220100501A1 (en) Compressing Micro-Operations in Scheduler Entries in a Processor
US20120143885A1 (en) Hybrid sources preready determination
KR20220086590A (ko) 스레드 저장에 대한 섀도우 래치 구성 레지스터 파일의 섀도우 래치

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