KR102161682B1 - 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 - Google Patents

이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 Download PDF

Info

Publication number
KR102161682B1
KR102161682B1 KR1020167013469A KR20167013469A KR102161682B1 KR 102161682 B1 KR102161682 B1 KR 102161682B1 KR 1020167013469 A KR1020167013469 A KR 1020167013469A KR 20167013469 A KR20167013469 A KR 20167013469A KR 102161682 B1 KR102161682 B1 KR 102161682B1
Authority
KR
South Korea
Prior art keywords
flag
mapping table
bit
instructions
flags
Prior art date
Application number
KR1020167013469A
Other languages
English (en)
Other versions
KR20160075639A (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 KR20160075639A publication Critical patent/KR20160075639A/ko
Application granted granted Critical
Publication of KR102161682B1 publication Critical patent/KR102161682B1/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/30094Condition code generation, e.g. Carry, Zero flag
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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, 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, 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, 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags

Abstract

명령어들의 종속성을 제거하기 위해 그룹으로 플래그 이름 바꾸기를 위한 방법들 및 프로세서들이 설명된다. 프로세서 내 디코더 및 실행 유닛들은 각 그룹이 적절할 때 개별적으로 취급되게 하는 그룹들로 플래그들을 이름 바꾸기 하도록 구성될 수 있다. 이 플래그 이름 바꾸기는 명령어들에 관련한 플래그 종속성을 제거한다. 이것은 머지 종속성을 생성하지 않고도 명령어가 원하는 플래그들을 명령어가 정확히 기입하게 한다. 명령어들 내 임베드된 이미디에이트 값들을 핸들링하기 위한 방법들 및 프로세서들이 제공된다. 디코딩 및 실행 유닛들 사이 인터페이스에 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스가 추가된다. 8 혹은 12 비트 이미디에이트에 대해서, 이미디에이트 버스의 상측 4 비트는 인코딩 비트들을 내포한다. 16 비트 이미디에이트에 대해서, 인코딩/제어 버스는 인코딩 비트를 내포한다. 인코딩/제어 버스는 이미디에이트 버스의 상위 4개의 비트를 언제 검토할지 나타낸다.

Description

이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법{PROCESSOR AND METHODS FOR IMMEDIATE HANDLING AND FLAG HANDLING}
관련 출원들에 대한 상호 참조
이 출원은 내용이 본원에 참조로 포함되는 2013년 10월 25일에 출원된 미국 가출원번호 61/895,715의 우선권을 주장한다.
기술분야
개시된 실시예는 일반적으로 전자 회로에 관계된다.
프로세서(예를 들면, 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU) 등)는 더 빠른 처리 속도를 달성하기 위해서 다중 코어 및 파이프라인 아키텍처를 사용한다. 더 빠른 실행 스루풋을 가능하게 하기 위해서, 프로세서 코어의 디코더 및 실행 유닛 내 연산들의 "파이프라인" 실행이 사용된다. 그러나, 프로세서에 대해 더 빠르고 효율적인 스루풋을 위한 계속적인 수요가 있다.
명령어의 종속성을 제거하기 위해 그룹으로 플래그 이름 바꾸기를 하기 위한 방법 및 프로세서의 몇몇 실시예가 본원에 기술된다. 프로세서 내 디코더 및 실행 유닛은 각 그룹이 적절할 때 개별적으로 취급되게 하는 그룹들로 플래그를 이름 바꾸기하게 구성될 수 있다. 이 플래그 이름 바꾸기는 명령어에 관련한 플래그 종속성을 제거한다. 이것은 머지 종속성을 생성하지 않고 명령어가 원하는 플래그를 명령어가 정확히 기입하게 한다.
명령어 내 임베드된 이미디에이트 값(immediate value)을 핸들링하기 위한 방법 및 프로세서의 몇몇 실시예가 본원에 기술된다. 실시예에서, 명령어 내 임베드된 이미디에이트 값을 핸들링하는 것은 프로세서 내 디코딩 및 실행 유닛 사이 인터페이스에 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스를 추가함으로써 달성될 수 있다. 인코딩 공간은 인코딩 정보를 16 비트 이미디에이트 버스에 오버로드함으로써 최소화되고, 이에 따라 디코딩 및 실행 유닛으로부터 정보를 전송하면서 저장 및 라우트 자원을 효율적으로 사용한다. 8 또는 12 비트 이미디에이트의 경우에, 이미디에이트 버스의 상측 4 비트는 인코딩 비트를 내포할 수 있고 인코딩/제어 버스는 ISA 유형을 나타낼 수 있다. 16 비트 이미디에이트의 경우에, 인코딩/제어 버스는 인코딩 비트를 내포한다. 인코딩/제어 버스는 이미디에이트 버스의 상위 4개의 비트를 언제 검토할지와 전체로서 데이터가 언제 사용되어야 할 것인가의 정보를 가질 것이다. 이에 따라, 전체 인코딩 공간은 인터페이스에서 추가의 비트를 필요로 함이 없이 증가된다.
더 상세한 이해는 첨부한 도면과 함께 예로서 주어진, 다음 설명으로부터 이루어지게 될 수 있다:
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적 디바이스의 블록도이다;
도 2는 일부 실시예에 따른 프로세서를 위한 예시적 명령어 파이프라인이다;
도 3은 일부 실시예에 따른 플래그 핸들링을 위한 예시적 블록도이다;
도 4는 데이터 및 플래그 종속성의 예시도이다;
도 5는 도 5에 예에 대한 예시적 실행 패턴이다;
도 6은 단일 엔티티 플래그 조합을 사용할 때 플래그 종속성의 예시도이다;
도 7은 도 7에 예에 대한 예시적 실행 패턴이다;
도 8은 일부 실시예에 따른 진정한 데이터 플래그 종속성의 예시도이다;
도 9는 일부 실시예에 따른 진정한 데이터 플래그 종속성을 사용한 정규 연산의 예이다;
도 10은 일부 실시예에 따른 진정한 데이터 플래그 종속성을 사용한 플러시 연산의 예이다;
도 11은 일부 실시예에 따른 진정한 데이터 플래그 종속성을 사용한 포이즌 발생의 예이다;
도 12는 일부 실시예에 따른 진정한 데이터 플래그 종속성을 사용한 포이즌 연산의 예이다;
도 13a 및 도 13b는 일부 실시예에 따른 이미디에이트 및 콘스탄트(constant)를 가진 명령어의 예이다;
도 14a 및 도 14b는 일부 실시예에 따른 이미디에이트 및 콘스탄트를 가진 또 다른 명령어의 예이다;
도 15는 일부 실시예에 따른 이미디에이트 및 콘스탄트를 가진 명령어의 예이다; 그리고
도 16은 일부 실시예에 따라 이미디에이트 핸들링의 예시적 블록도이다.
간략성을 위해, 집적회로 설계, 캐싱, 메모리 연산, 메모리 제어기, 및 시스템(및 시스템의 개개의 동작 성분)의 다른 기능적 측면에 관계된 종래의 기술은 본원에서 상세히 기술되지 않았다. 또한, 본원에 포함된 여러 도면에 도시된 연결선은 여러 요소 간에 예시적인 기능적 관계 및/또는 물리적 결합을 나타내고자 한 것이다. 많은 대안적 혹은 추가적인 기능적 관계 혹은 물리적 연결은 청구 대상의 실시예에 존재할 수 있음에 유의해야 한다. 또한, 어떤 용어는, 단지 참조 목적으로 다음 설명에서 사용될 수 있고, 이에 따라 제한하려는 것이 아니며, 구조를 지칭하는 용어 "제1", "제2" 및 이외 다른 이러한 수치적 용어는 문맥에 의해 명백히 나타내지 않는한 시퀀스 혹은 순서를 암시하지 않는다.
다음 설명은 함께 "연결" 혹은 "결합"되는 요소들 혹은 노드들 혹은 특징부들을 지칭한다. 본원에서 사용되는 바와 같이, 달리 분명하게 언급되지 않는 한, "연결된"은 한 요소/노드/특징부가 또 다른 요소/노드/특징부에 반드시 기계적으로는 아니고, 직접 결부됨(혹은 직접 통신함)을 의미한다. 마찬가지로, 달리 분명하게 언급되지 않는 한, "결합된"은 한 요소/노드/특징부가 반드시 기계적으로는 아니고, 또 다른 요소/노드/특징부에 직접 혹은 간접적으로 결부됨(혹은 직접 혹은 간접적으로 통신함)을 의미한다. 이에 따라, 도면이 요소들의 한 예시적 배열을 도시할 수 있을지라도, 도시된 청구 대상의 실시예에 추가의 개재 요소, 디바이스, 특징부, 혹은 성분이 있을 수 있다.
적어도 한 예시적 실시예가 다음 설명에서 제시되었으나, 많은 변형이 존재함을 알아야 할 것이다. 또한, 본원에 기술된 예시적 실시예 혹은 실시예들은 청구된 대상의 범위, 적용가능성, 혹은 구성을 어떤 식으로든 제한하려는 것이 아님을 알게 될 것이다. 그보다는, 앞에 상세한 설명은 기술된 실시예 혹은 실시예들을 구현하기 위한 가이드를 당업자에게 제공할 것이다. 다양한 변경이 청구항에 의해 정의된 범위 내에서 요소의 기능 및 배열에서 행해질 수 있음이 이해될 것이다.
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들면, 컴퓨터, 게이밍 디바이스, 휴대 디바이스, 셋탑 박스, 텔레비전, 모바일 전화, 혹은 태블릿 컴퓨터를 포함할 수 있다. 디바이스(100)는 프로세서(102), 메모리(104), 저장소(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 추가의 성분을 포함할 수 있음이 이해된다.
프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일 다이 상에 위치된 CPU 및 GPU, 혹은 하나 이상의 프로세서 코어를 포함할 수 있는데, 각 프로세서 코어는 CPU 혹은 GPU일 수 있다. 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치될 수 있고, 프로세서(102)와는 별도로 위치될 수도 있다. 메모리(104)는 휘발성 혹은 비-휘발성 메모리, 예를 들면, 랜덤 액세스 메모리(RAM), 동적 RAM, 혹은 캐시를 포함할 수 있다.
저장소(106)는 고정된 혹은 착탈가능 저장소, 예를 들면, 하드 디스크 드라이브, 고체 상태 드라이브, 광학 디스크, 혹은 플래시 드라이브를 포함할 수 있다. 입력 디바이스(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 측정 스캐너, 혹은 네트워크 연결(예를 들면, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함할 수 있다. 출력 디바이스(110)는 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 라이트, 안테나, 혹은 네트워크 연결(예를 들면, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함할 수 있다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하며 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신하게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하며 프로세서(102)가 출력을 출력 디바이스(110)에 보내게 한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 성분이며, 디바이스(100)는 입력 드라이버(112) 및 출력 드라이버(114)가 없더라도 동일한 방식으로 동작할 것임에 유의한다.
명령어 세트 아키텍처(ISA)는 프로세서에 의해 디코딩되고 실행될 수 있는 적어도 명령어 세트를 정의한다. 이들에 제한되지 않으나, Intel의 x86 ISA 및 ARM의 표준 ARM ISA, 및 Thumb ISA를 포함하는 다수의 ISA가 존재한다. 본원에 기술된 실시예가 예시적 예로서 ARM 혹은 Thumb ISA를 언급할지라도, 방법 및 장치는 그외 다른 ISA 및 연관된 시스템 및 프로세서 아키텍처에 똑같이 적용될 수 있다.
프로세서는 전형적으로 연산(Op) 코드(OpCode) 혹은 명령어 코드에 의해 식별되는 연산 혹은 명령어를 처리하게 통상적으로 설계된다. 명령어는 수행될 실제 작업을 나타내며 음(implicit)(이를테면 가산) 혹은 양(explicit)(이를테면 제산) 함수 유닛에 피연산자의 발행을 나타낸다. 명령어는 스케쥴러 큐에 의해 옮겨질 수 있다. 피연산자는 명령어에 대한 인수이며 식, 레지스터 혹은 콘스탄트(constant)를 포함할 수 있다.
도 2는 적어도 페치 유닛(205), 디코더 유닛(210) 및 실행 유닛(215)을 포함하는 프로세서를 위한 예시적 명령어 파이프라인(200)을 도시한다. 페치 유닛(205)은 메모리(도시되지 않음)로부터 명령어를 페치하며 명령어를 디코더 유닛(210)에 보낸다. 명령어는, 예를 들면, 32-바이트이거나 16-바이트인 고정 길이의 ARM 명령어일 수 있다. 디코더 유닛(210)은 페치된 명령어의 레지스터, 콘텐츠 및 상황 정보를 디코딩하고 고정 길이 내부 명령어(마이크로-연산 혹은 마이크로명령어(uop))를 하나 이상의 실행 유닛 혹은 실행/스케쥴링 유닛(215)에 디스패치할 수 있다. 실행 유닛(215)은 디코딩된 명령어를 실행한다. 명령어는 일반적으로, uop에 연관된 입력 데이터의 위치를 식별하는 소스(source) 및 uop에 연관된 출력/결과 데이터의 위치를 데이터 레지스터 지정을 사용하여 식별하는 목적지를 갖는다. 각 명령어는 일반적으로 하나, 둘 혹은 그 이상의 uop로 전환, 즉 디코딩될 수 있다. 디코딩 유닛(210) 및 실행 유닛(215)은 예를 들면, 플래그 핸들링 및 이미디에이트 핸들링을 위한 방법 및 장치를 포함할 수 있다.
예를 들어 ARM ISA와 같은 대부분의 ISA는 조건부 명령어 실행을 위해 다양한 플래그를 이용한다. ARM ISA 플래그는 부호 조건을 위한 N, 제로 조건을 위한 Z, 캐리 조건을 위한 C, 오버플로우 조건을 위한 V, 포화 조건을 위한 Q, 및 바이트 특정 캐리 조건인 GE, 비트 3:0을 포함할 수 있다.
전형적으로, 어떤 유형의 ARM 명령어는 플래그의 특정 조합을 발생 혹은 기입한다. 예를 들면, NZ(부호 및 제로) 플래그 조합은 대부분의 AArch32 명령어에 의해 기입될 수 있다, (여기서 AArch32은 32-비트 범용 레지스터, 및 32-비트 프로그램 카운터(PC), 스택 포인터(SP), 및 링크 레지스터(LR)를 사용하고 두 명령어 세트, A32 및 T32의 선택을 제공하는, ARMv8 32-비트 실행 상태이다). 이들은 예를 들면, 이들 두 플래그만을 기입하는 곱셈(MUL) 및 곱셈+가산(MLA)을 포함할 수 있다. 또한, 몇몇 다양한 이동(MOV) 명령어 및 논리 명령어는 이들 두 플래그만을 기입한다. NZC(부호, 제로 및 캐리) 플래그 조합은 AArch32 AND, 좌측 논리 시프트(LSL), 우측 회전 레지스터(ROR), MOV 등과 같은 MOV 및 논리 명령어들의 어떤 특색에 의해 기입된다. NZCV(부호, 제로, 캐리 및 오버플로우) 플래그 조합은 모두가, AArch32 ADD, SUB, 등과 같은 산술 명령어에 의해서 그리고 플래그를 기입하는 모든 AArch64 op에 의해 기입된다. Q 플래그는 신호 포화(SSAT), 포화 가산(QADD), 포화 감산(QSUB) 등과 같은 포화 산술 명령어에 의해서만 기입된다. GE 플래그, (이것은 4개의 플래그의 그룹이다)는 실행 유닛 범용 레지스터에 대해 실행되는 단일 명령 다중 데이터(SIMD) 명령어에 의해 기입되고, ADD16, SUB16 등과 같은 명령어를 포함한다. 64 비트 ARM 명령어(AArch64)에서, 플래그 Q 및 GE는 기입될 수 없고 항시 0이다.
대부분의 ARM 명령어는 플래그를 하나 혹은 두 그룹으로 판독함에 유의한다. 모든 조건 코드는 2 그룹만을 요구한다. 두 예외는 술어 및 플래그 카피이다. 술어에 관련하여, 술어를 위한 조건 코드는 2 그룹만으로부터 생성될 수 있다. 플래그를 기입하는 술어적 명령어에 있어서, 술어가 거짓일 때는 구(old) 플래그 값이 카피되어야 한다. 조건 코드에서 사용되는 플래그와 카피될 필요가 있는 것들 사이에, 이들 명령어는 3개까지의 플래그 소스를 요구할 수 있다. 플래그 카피에 관련하여, 일부 명령어는 모든 플래그를 카피할 수 있다.
AArch64 ISA 명령어는 모든 조건 플래그(NZCV)를 동시에 기입할 수 있을 뿐이고 플래그를 기입하는 서로 상이한 명령어들 간에는 어떠한 추가되는 종속성도 생성되지 않으며, 따라서 단일의 플래그 그룹이 제공될 수 있음에 유의한다.
명령어의 종속성을 제거하기 위해 그룹으로 플래그 이름 바꾸기를 하기 위한 방법 및 프로세서의 실시예가 본원에 기술된다. 종속성의 제거는 수행 및 비순차 스케쥴링을 개선한다. 일반적으로, 프로세서 내 디코더 유닛 및 실행 유닛은 각 그룹이 적절할 때 개별적으로 취급되게 하는 그룹으로 플래그를 이름 바꾸기하게 구성될 수 있다. 이 플래그 이름 바꾸기는 명령어에 관련한 플래그 종속성을 제거한다. 예를 들어, ARM ISA 플래그는 5개의 그룹, 즉, NZ, C, V, Q 및 GE로 이름 바꾸기될 수 있다. 이것은 어떤 32 비트 ARM 명령어(AArch32)이든 머지 종속성을 생성하지 않고 명령어가 원하는 플래그를 정확히 기입하게 한다.
전형적으로, 플래그 핸들링 목적을 위해, N, Z, C, V, Q 및 GE 플래그는 단일의 엔티티 혹은 조합으로서 핸들링된다. 이것은 플래그를 부분적으로 기입하는 명령어들 간에 다수의 머지 종속성을 야기한다. 예를 들어, 플래그 Z만을 기입하는 명령어가 있었다면, 플래그 N은 종속성으로서 캐리될 필요가 있을 것이다(소스로서 사용되며, 변경되지 않고 결과에 카피된다). ARM 및 Thumb32 ISA에 있어서, 효과는 컴파일러가 어느 명령어가 플래그를 생성할 필요가 있는지를(및 이에 따라 가외의 소스 종속성을 얻는다) 판단할 수 있기 때문에 다소 제한된다. Thumbl6 ISA에 있어서, 플래그 목적지는 묵시적이며 따라서 페널티를 제한할 방도가 없다.
도 3은 실시예에 따른 플래그 핸들링을 위한 프로세서(300)의 실시예이다. 프로세서(300)는 정수 디코딩 유닛(305) 및 실행 유닛(310)을 포함한다. 디코더 유닛(305)은 페치 유닛(도시되지 않음)으로부터 명령어(INSTR 1, INSTR 2, INSTR 3 및 INSTR 4)를 수신한다. 각 명령어는 플래그 목적지(플래그 목적지 1, 플래그 목적지 2, 플래그 목적지 3, 및 플래그 목적지 4), 피연산자 A, 피연산자 B, 피연산자 C, 플래그 소스 A 및 플래그 소스 B를 포함할 수 있다, (대부분의 ARM 명령어는 플래그를 하나 혹은 두 그룹으로 판독하며 모든 조건 코드는 2 그룹만을 요구함에 유의한다). 이들 명령어는 디스패치 사이클(350) 동안에 실행 유닛(310)에 적절하게 디스패치된다.
실행 유닛(310)은, 이름 바꾸기 사이클(360) 동안, 자유 플래그 레지스터 번호(FRN)를 목적지 플래그 각각에 할당함으로써, 플래그 목적지 1, 플래그 목적지 2, 플래그 목적지 3, 및 플래그 목적지 4 내 플래그들을 이름 바꾸기하기 위해 이름 바꾸기 회로(315)를 사용하며, 새로이 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블(320)에 기입하여, 현재 기입되는 플래그 그룹만에 영향을 미치고 그외 다른 플래그 그룹은 그대로 유지한다. 예시 목적으로, 플래그 이름 바꾸기는 4개의플래그 그룹, 즉, NZ, C, V, 및 GE를 사용할 수 있다. 그외 다른 플래그 그룹이 사용될 수도 있다. 유사하게 INSTR1, INSTR2, INSTR3 및 INSTR4로부터 플래그 소스 A 및 B 각각은 플래그 그룹에 기초하여 이들의 대응하는 FRN로 이름 바꾸기된다. 명령어 혹은 연산에 연관된 플래그는 플래그 레지스터 파일(325) 내 엔트리로서 추적되는데, 여기서 각각의 엔트리에는 FRN이 할당된다. 실행 유닛(310)은 플래그 판독 사이클(370) 동안 플래그 레지스터 파일(325)로부터 플래그 값을 판독하며, 본원에 기술된 바와 같이 플래그가 개별적 그룹들로 핸들링되기 때문에 진정한 데이터 종속성에 기초하여 명령어를 (실행 사이클(380) 동안), 비순차로 실행한다(330). 실행 유닛(310)은 결과적인 플래그를 다시 플래그 레지스터 파일(325)에 그리고 퇴거 사이클(390) 동안 순차 플래그 매핑 테이블(335)에도 기입한다. 도 3의 동작 측면은 도 9 내지 도 12에 관련하여 여기에 기술된다.
도 3 내지 도 8에 관련하여 예시적 예에서 표 1에 제시된 코드 스니펫(code snippet)을 고려하자.
루프: or rl, r2, r3; r2와 r3 간에 논리 OR, 결과는 r1에 기입된다.
lsl r7, r7, #5; 5 위치만큼 r7의 좌측 논리 시프트, 결과는 r7에 기입된다.
and r6, r2, r8; r2와 r8 간에 논리 AND, 결과는 r6에 기입된다.
adc r5, rl, #2; 캐리 2를 갖고 r1에 가산, 결과는 r5에 기입된다.
or r4, r7, r2; r7와 r2 간에 논리 OR, 결과는 r4에 기입된다.
bls loop; "미만(less)"이라면, 루프의 처음으로 다시 분기한다.
도 4는 소스 레지스터와 목적지 레지스터 간에 진정한 데이터 종속성을 도시한다. 예를 들면, ADC 명령어는 레지스터 r1를 소스 레지스터로서 사용하나 r1 내 값은 OR 명령어의 실행에 종속한다. 도 4는 또한 플래그 종속성을 도시한다. 예를 들어, ADC 명령어는 C 플래그를 소스 플래그로서 갖는다. 그러나, C 플래그는 NZC 플래그 조합을 발생하는 LSL 명령어에 관련하여 무엇이 일어나는지에 종속한다. 그러므로, ADC 명령어는 LSL 명령어의 실행에 종속한다. 결국, ADC 명령어는 종국에 OR 및 LSL 명령어에 종속한다. 결과로서, ADC 명령어는 OR 및 LSL 명령어가 실행될 때까지 기다려야 한다. 이것은 도 5에 도시된 바와 같이 진정한 데이터 종속성에만 기초하여, 최상의 가능한 실행 순서를 갖게 한다. 최상의 경우의 시나리오는 모든 명령어가, 예를 들어 12개의 실행 유닛일 수 있는 최대수의 실행 유닛을 사용하여 한 사이클 내에 완료되는 것임에 유의한다. 최악의 경우의 시나리오는 데이터 및 플래그 종속성 때문에 코드 스니펫을 완료하는데 12 사이클이 걸리는 것이다.
도 6은 플래그가 예를 들면 NZCV와 같이, 단일의 엔티티 플래그 조합으로서 이름 바꾸기되는 예를 도시한다. 레지스터 종속성은 도 4에서와 동일하다. 이 상황에서, NZCV 엔티티의 2 플래그만을 발생 혹은 기입함은 명령어 혹은 연산이 실행할 때, 실행 유닛은 플래그 레지스터로부터 다른 2개의 플래그의 이전 값을 판독하고 이들을 NZCV 결과에 머지해야 한다. 예를 들어, 논리 명령어, OR(#5, # 7, #11) 및 AND(#9)은 NZ 플래그 조합만을 발생한다. 그러므로, 이들 명령어는 CV 플래그 조건을 얻어 NZCV 단일 엔티티를 완료하기 위해 ADC 명령어(#4)가 실행하기를 기다려야 한다. 이들 종속성은 도 7에 도시된 실행 순서를 갖게 한다. 도 5 및 도 7의 비교는 단일 엔티티 플래그 조합이 최적의 솔루션보다 둘 더 많은 사이클 혹은 50% 더 많은 시간을 요구함을 보인다.
도 8은 이름 바꾸기 플래그 관례가 진정한 데이터 종속성을 추종하는 실시예를 도시한다. 이 예에서, 플래그 NZ, C 및 V는 각각 그룹 0, 1 및 2으로서 독립적으로 기입될 수 있다. 플래그를 예를 들면, 3 플래그 그룹(NZ, C, V)으로 이름 바꾸기함으로써, 명령어 각각은 전체 플래그 그룹(혹은 이들 중 다수)을 기입하며, 다른 매핑은 변경되지 않은 채로 있게 할 것이다. 이렇게 하여 임의의 불필요한 종속성을 생성할 필요성이 없다. 이것은 임의의 거짓 종속성을 효과적으로 제거한다.
제로 시프트(SBZ)을 핸들링하기 위한 방법 및 장치가 본원에 기술된다. 전형적으로, 정규 시프트/회전 명령어는 NZC 플래그를 기입하고, V 플래그는 수정되지 않은 채로 있는다. N 플래그는 부호 비트, (결과의 비트 31)를 카피하며, Z 플래그는 결과가 모두 제로라면 셋팅되고, C 플래그는 연산에 의해 시프트된 마지막 비트를 카피한다. 시프트 양이 0인 경우에, C 플래그는 수정되지 않은 채로 있는다. 이 동일 행동은 시프트된 제2 피연산자를 허용하는 많은 명령어에 넘겨질 수 있고, C 플래그가 시프트로부터 발생된다. 전형적인 예는 AND, ORR, BIC 등과 같은 논리 명령어이다. 이들 명령어는 N 및 Z 플래그를 논리 연산의 결과에 기초하여 셋팅하나, 이들은 C 플래그를 선택적 제2-소스 시프트의 결과에 기초하여 셋팅한다. 시프트 양이 비-제로이면, 명령어는 새로운 C 플래그를 생성한다. 시프트 양이 제로이면, 이들 명령어는 구 C 플래그를 보존해야 한다. 반례는 ADD, SUB, 등과 같은 산술 명령어이다. 이들 명령어는 시프트된 제2 피연산자를 허용하나, 이들은 시프트의 결과에 기초하여 C 플래그를 셋팅하지 않는다. C 플래그는 ALU 결과, (계산의 비트 33)에 기초하여 셋팅된다.
AArch32 ISA는 이들 명령어 각각에 대한 다수의 인코딩을 제공한다. 일부 경우에, 시프트 양은 명령어 인코딩에 임베드된 이미디에이트로부터 비롯된다. 그외 다른 경우에, 시프트 양은 레지스터로부터 비롯된다.
시프트 양이 명령어에 명시적으로 인코딩될 때, 디코더 유닛은 이름 바꾸기하기에 앞서 어떤 명령어를 행할 필요가 있는지를 판단할 수 있다. 예를 들어, 시프트 양이 제로라면, 명령어는 명시적 시프트 연산 없이 디코딩하며 명령어는 NZ만을 기입한다. 시프트 양이 1, 2 혹은 3이라면, 명령어는 명시적 시프트 op 없이 디코딩하나, 명령어는 NZC을 기입할 것이다. 실행 유닛은 3까지의 위치만큼 피연산자를 시프트하는 능력을 가지며 또한 이들 경우에 있어서는 C 플래그를 선택할 것이다. 시프트 양이 3보다 크다면, 명령어는 명시적 시프트 연산하여 디코딩한다. 시프트 연산은 목적지으로서 C 플래그를 얻는 한편, 논리 연산, (시프트된 데이터를 사용한다),은 NZ만을 기입한다.
시프트 양이 범용 레지스터(GPR)로부터 얻어질 때, 디코더 유닛은 양이 제로인지 아닌지 여부를 미리 판단할 수 없다. 예를 들어, 명령어 AND r0, r1, r2은 단일의 uop로서 디코딩될 수 있어, NZ만을 기입한다. 또 다른 예에서, 명령어 AND r0, r1, r2 LSL#1은 단일의 uop로서 디코딩될 수 있어, NZ 및 C을 기입한다. 또 다른 예에서, 명령어 AND r0, r1, r2 LSL #5은 이중 uop, (LSL에 이은 AND)로서 디코딩될 수 있다. LSL 명령어는 C 플래그를 기입하는 한편, AND 명령어는 NZ 플래그 조합을 기입한다. 또 다른 예에서, 명령어 AND r0, r1, r2 LSL r3은 이중 uop(LSL에 이은 AND)로서 디코딩될 수 있다. LSL 명령어는 C 플래그를 기입하고, SBZ 행동을 가질 수 있는 한편, AND 명령어는 NZ 플래그 조합을 기입한다.
디코딩 동안 시프트 양이 결정될 수 없을 때의 경우에 있어서, 플래그 포이즈닝 솔루션은 도 3 및 도 9 내지 도 12에 관련하여 이하 본원에 기술된 바와 같이 구현될 수 있다. 도면에서, 비순차 테이블 내 빗금친 박스는 현재 명령어 혹은 연산이 업데이트하는 플래그 그룹을 나타낸다. 그외 모든 다른 플래그 그룹은 그대로 있고 이전 값을 보유한다. 순차 테이블 내 빗금친 박스는 현재 아키텍처 상태에 대해서 유효 플래그 그룹을 나타낸다. 모든 플래그 N, Z, C, V, 및 GE에 대한 최신 값은 이들 유효 그룹만으로부터 도출된다. 순차 테이블 내 빗금치지 않은 박스의 콘텐츠는 관련이 없다. 그룹이 유효한지 여부의 상황은 순차 테이블 내 유효 비트를 사용하여 유지된다.
도 9는 플래그의 정상 혹은 정규 연산의 예의 예시도이다. 이 예에서, 실행시에, 목적지 플래그는 자유 FRN들 중 하나로 이름 바꾸기된다. 이것은 명령어 혹은 연산이 프로그램 순서로 실행되지 않기 때문에 비순차로 행해진다. 비순차 테이블은 소스 플래그 그룹에 의해 인덱스된다. 이것은 소스를 더 얼마 안 된 연산에 할당하는 것을 편리하게 한다. 다음 명령어는, 구 연산에 의해 이전에 기입된 플래그들 중 하나를 소스로 한다면, 자신의 소스 레지스터로서 구 연산의 목적지 레지스터를 얻는다. 예를 들어, ADC 명령어는 C 플래그를 소스로 한다. C 플래그에의 마지막 기입은 LSL 명령어에 의한 것이었고 LSL 명령어의 C 플래그는 레지스터 F8에 매핑되었다. 그러므로, ADC 명령어는 C 플래그의 값을 얻기 위해 레지스터 F8을 소스로 한다. 연산은 순서대로, 즉 오래된 순서로 퇴거한다. 순차 테이블은 퇴거된 연산에 대한 FRN에의 플래그의 매핑을 추적한다. 이 테이블은 목적지 플래그 그룹에 의해 인덱스된다. 예를 들어, ADC 명령어는 NZCV 플래그에 기입한다. 순차 테이블은 F7가 모든 플래그에 대한 값을 갖기 때문에, 레지스터 F7을 유일한 유효 그룹으로서 마크한다. 일단 다음 OR 명령어가 퇴거하면, NZ 플래그는 레지스터 F11에 매핑된다. 그러므로, 레지스터 F7 및 F11은 둘 다 유효하다. 레지스터 F11은 NZ 플래그에 대한 값을 가지며 레지스터 F7은 CV 플래그에 대한 값을 갖는다. BSL 명령어는 ZC 플래그를 소스로 한다. ADC 명령어는 C 플래그에 기입하는 마지막 연산이기 때문에, BSL 명령어는 C 플래그에 대해 레지스터 F7, (ADC의 목적지 FRN)을 소스로 한다. 유사하게, Z 플래그는 OR 명령어의 목적지 FRN인 레지스터 F11로부터 소스로 사용된다.
이제 도 10을 참조하면, 플러시 시, 비순차 테이블이 순차 테이블로부터 복원된다. 플러시 연산은 다수의 이유로 일어날 수 있고 모든 이들 경우에 머신의 추론적 상태는 롤 백되어야 하는데, 즉, 이 경우에 비순차 테이블이어야 한다. 이것은 위에 설명된 바와 같이 연산 퇴거와 유사하게 구현된다. 플러시 연산 예에서, 레지스터 F6 및 F8은 LSL 명령어가 퇴거한 후에 유효하다. NZC 플래그 그룹 매핑이 유효하기 때문에, NZ 및 C 플래그에 대한 비순차 테이블의 매핑은 레지스터 F8에 업데이트된다. NZC 플래그가 NZCV 플래그와 더불어 유효하다는 것은 레지스터 F6, (NZCV에 매핑되는)가 V 플래그만에 대한 값을 가짐을 의미한다.
도 11은 포이즌 플래그 연산을 위한 플래그 연산 및 플러시의 예시도이다. 이 예에서, 제1 LSL 명령어가 SBZ 생성자라면, (즉, 제로 시프트가 수행된다), LSL 명령어 목적지 FRN, F1은 포이즌된 것으로서 마크된다. 비순차 테이블은 실행이 완료되기 전에 업데이트되고 따라서 C 플래그는 레지스터 F1, (현재 포이즌된)에 매핑된다. 이러한 경우에, 아키텍처 예상은 C 플래그가 이의 이전의 FRN - 이 경우엔 F6 - 에 여전히 매핑될 것이라는 것이다. LSL 명령어가 퇴거하였을 때, C 플래그가 포이즌된 것을 알고 있어, LSL 명령어의 목적지 플래그는 NZC에서 NZ로 변경된다. 그러므로, 순차 테이블은 NZ만에 대한 컬럼을 업데이트하고 이것을 유효로서 마크한다. 레지스터 F1은 순차 테이블 내 포이즌 플래그에 항시 매핑된다. 레지스터 F6, (NZCV을 위한) 및 레지스터 F1, (NZ을 위한) 둘 다 유효하기 때문에, C 플래그에 대한 순차 테이블 매핑은 레지스터 F6이고, 이것은 아키텍처상 정확한 매핑이다.
언급된 바와 같이, 대부분의 SBZ 경우에서, 유효 C 플래그는 포이즌된 C 플래그를 소스로 할 기회가 있기 전에 덮어 씌여진다. 이것은 좋은 결과이다. 이 예에서, 바로 다음 명령어, 또한 LSL 명령어는 유효 C 플래그를 기입한다. 제2 LSL 명령어는 제로 시프트 경우가 아니기 때문에, C 플래그는 더 이상 포이즌되지 않는다. 따라서, 제2 LSL 명령어가 퇴거하였을 때, LSL 명령어는 순차 테이블 내 NZC 매핑을 업데이트하고, 또한 순차 테이블로부터 포이즌 플래그를 무효화한다. 그러므로, ADC 명령어가 C 플래그를 소스로 할 때, ADC 명령어는 레지스터 F8을 C 플래그에 대한 소스 레지스터로서 얻고 정상적으로 퇴거한다.
이제 도 12를 참조하면, 제2 LSL 명령어가 SBZ이었다면, ADC 명령어는 포이즌된(본원에 위에 기술된 바와 같이) C 플래그에 대해 레지스터 F8을 소스로 사용하는 것으로 끝나게 될 것이다. 이것은 아키텍처적으로 부정확하다. ADC 명령어는 SBZ LSL 명령어 전에 C 플래그의 매핑을 내포하는 레지스터 F1을 소스로 하였었을 것이다. 그러므로, ADC 명령어는 리싱크하고 플러시를 취할 필요가 있는데, 즉 ADC 명령어는 다시 디스패치되어 재실행될 필요가 있다. 그러므로, ADC 명령어는 다시 디스패치되고 비순차 테이블은 정정될 필요가 있다. 이것은 순차 테이블로부터 비순차 테이블을 구축하기 위해 플러시 회복 메커니즘을 사용함으로써 달성될 수 있다. 일단 플러싱이 완료되면, C 플래그는 이어 레지스터 F1, (제1 LSL 명령어의 목적지)에 정확하게 매핑되고, NZ은 레지스터 F8, (제2 LSL 명령어의 목적지)에 정확하게 매핑된다.
포이즌된 플래그 표시기는 제로 시프트 양을 갖고 시프트/회전 명령어/연산에 의해 생성된 플래그에 대해서만 1에 셋팅된다. 이외 모든 다른 연산은 포이즌된 플래그 표시기를 0으로서 기입한다. 순차 테이블은 또한 유지된 이전 FRN을 자유 FRN 리스트에 반환을 맡는다. 즉, FRN은 이름 바꾸기 회로(315)에 의한 사용을 위해 재순환된다. 예를 들면, 플래그 NZCV을 생성하는 연산이 퇴거하였을 때, NZCV 플래그에 의해 보유된 FRN은 자유 FRN 리스트에 반환되고 퇴거된 연산의 FRN은 퇴거 연산을 위해 새로운 FRN에 업데이트된다. 플러시 복원은 리싱크(340)를 야기하였던 연산 전에 연산의 것으로 비순차 테이블을 복원하기 위해 순차 테이블에 종속한다.
이 메커니즘은 제로 시프트가 드물게 일어나고 시프트에 의해 생성된 플래그는 일반적으로 소스로 사용되지 않는다라는 사실에 종속한다. 따라서, 리싱크할 필요성은 매우 드물게 일어나 수행에 최소한의 영향을 미치게 된다. 또한, "시프트-바이-레지스터" 제2 피연산자를 사용하는 임의의 논리 명령어는 시프트 연산 및 이어 정규 논리 연산으로 디코딩할 수 있다. 시프트 연산은 시프트/회전 명령어로부터 비롯되는 시프트/회전 연산과 동일한 SBZ 행동을 가질 것이다.
또 다른 실시예에서, 포이즈닝 플래그에 대한 대안은 플래그(시프트 양이 레지스터로부터 비롯될 때)를 기입하는 모든 시프트 연산에서 C 플래그를 소스로 하고 이것을 시프트 양이 제로인 것으로 판명된다면 출력 플래그에 MUX하는 것이다. 이것은 새로운 데이터 종속성을 도입하며 이들 경우가 흔하다면 수행을 현저히 감소시킬 수 있다.
일부 실시예에 따라 명령어 내 임베드된 이미디에이트 값을 핸들링하기 위한 방법 및 장치가 본원에 기술된다. ARM 및 Thumb ISA와 같은 일부 ISA에서, 명령어 자체로부터 몇몇 필드에 기초하여 이미디에이트 수정을 필요로 하는 몇몇 명령어가 있다. 이미디에이트 콘스탄트 및 인코딩 둘 다는 명령어로부터 비롯되는 비트 필드이다. 예를 들어, 명령어 ADD Rd, Ra, Imm32에 있어서, Imm32에 대한 값은 명령어 및 인코딩 비트의 8 비트 필드로부터 도출된다. 도 13a은 ARM 명령어(1300)에서 수정된 이미디에이트 콘스탄트의 인코딩의 예를 도시한 것으로 비트 0-7은 이미디에이트 콘스탄트 값(1305)의 16진수 표현이고 비트 8-11은 인코딩 비트(1310)이다. 도 13b은 abcdefgh을 인코딩 비트(1310)에 관계시킬 때 이미디에이트 콘스탄트 값(1305)을 2진수 형태로 도시한다.
도 14a는 Thumb 명령어(1400)에서 수정된 이미디에이트 콘스탄트의 인코딩을 도시한 것으로, 비트 0-7은 이미디에이트 콘스탄트 값(1405)의 16진수 표현이고, 하측 워드에 비트 7 및 12-14 및 상측 워드에 비트 10은 인코딩 비트(1410)이다. 도 14b는 abcdefgh을 인코딩 비트(1410)에 관계시켰을 때 이미디에이트 콘스탄트 값(1405)을 2진수로 도시한다. 어셈블리 신택스에서, 이미디에이트 값은 일반적 방법으로 (디폴트에 의해 10진수) 특정된다.
도 13a, 도 13b, 도 14a 및 도 14b는 ARM ISA에서 지원되는 몇몇 수정을 도시한다. 또한, ADD 혹은 SUB와 같은 명령어를 실행하기 전에 수정을 요구하는, "디코드 비트 마스크", "시프트 레프트", "부호 확장", 및 "제로 확장"과 같은 명령어 내 임베드되는 그외 다른 인코딩들이 있다.
실행 유닛에 보내질 필요가 있는 많은 인코딩들이 있다. 이들을 opcode 공간에서 인코딩하고 이어 이 수정을 실행시에 행하는 것은 어려울 것이다. 또한, 이미디에이트 수정을 행하기 위해 가외의 사이클이 필요하게 될 것이다. 확장이 디코딩 유닛에서 행해진다면, 와이어 수는 실행 유닛 및 디코딩 유닛에 걸쳐 실질적으로 증가할 것이다. 이것은 파워 및 면적 요건을 증가시킬 것이며 또한 한정된 라우트 자원이 있을 땐 타이밍 문제로 이어질 것이다.
실시예에서, 명령어 내 임베드된 이미디에이트 값의 핸들링은 디코딩 유닛과 실행 유닛 사이에 인터페이스에서, 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스(도 15에서 SrcBCtl로서 도시됨)을 추가함으로써 달성될 수 있다. 명령어는 전형적으로, 32 혹은 64 비트로 전환하게 될 이미디에이트 데이터의 8-16 비트를 필요로 한다. 인코딩 공간은 인코딩 정보를 16 비트 이미디에이트 버스에 오버로드함으로써 최소화되고, 이에 따라 디코딩 유닛 및 실행 유닛으로부터 정보를 전송하는 중에 저장 및 라우트 자원을 효율적으로 사용한다.
도 15는 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스를 사용한 이미디에이트 경우의 샘플링을 제공한다. 제1 컬럼은 필요한 수정의 특성을 구체화하며, 제2 컬럼은 4 인코딩 비트이며(SrcBCtl<3:0>이다), 제3 및 제4 컬럼은 16 비트 이미디에이트 버스이다. 도 15에서, 약어는 다음과 같다: LSL - 좌측 논리 시프트(Logical Left Shift)(데이터, <시프트량>); 제로확장(ZeroExtend) - 상위 48/16 비트를 데이터 크기에 기초하여 제로로 만드는 것; 및 부호확장(SignExtend) - 15번째 비트를 데이터 크기에 기초하여 상위 48/16 비트에 카피하는 것. 도 15에 도시한 바와 같이, 이미디에이트는 8, 12 혹은 16 비트를 필요로 할 수 있다. 8 혹은 12 비트 이미디에이트의 경우에, 이미디에이트 버스의 상측 4 비트는 인코딩 비트를 내포할 수 있고 인코딩/제어 버스는 ISA 유형을 나타낼 수 있다. 16 비트 이미디에이트의 경우에, 인코딩/제어 버스는 인코딩 비트를 내포한다. SrcBCtl<3:0>은 이미디에이트 버스의 상위 4개의 비트를 언제 검토할지와 전체로서 데이터가 언제 사용될 것인가의 정보를 가질 것이다. 이에 따라, 전체 인코딩 공간은 인터페이스에서 추가의 비트를 필요로 함이 없이 증가된다.
일반적으로, 프로세서는 적어도 디코딩 유닛 및 실행 유닛을 포함한다. 디코딩 유닛은 페치 유닛으로부터 명령어를 수신한다. 각 명령어는 적어도 피연산자 A, 피연산자 B, 피연산자 C 및 이외 다른 비트를 포함한다. 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스는 명령어 내 임베드된 몇몇 이미디에이트 값을 핸들링하기 위해 디코딩 유닛으로부터 실행 유닛에 추가된다. 실제로, 이미디에이트 버스 및 인코딩/제어 버스는 소모된 최종의 이미디에이트 데이터를 발생하기 위해 데이터 비트를 어떻게 확장할지를 알려준다. 이미디에이트 데이터는 시프트 및 정렬 후에, 즉 수정 및/또는 확장 후에 어레이에 곧바로 저장된다. 예를 들면, 회로는(적어도 16 비트 이미디에이트 버스 및 4 비트 인코딩/제어 버스를 포함하는) 확장된 이미디에이트, 예를 들면 64 비트로 확장된 수정된 이미디에이트가 특정 소스에만 갈 수 있고 반면 uop는 다수의 소스를 참조하게 구성될 수 있다.
도 16은 명령어 내 임베드된 이미디에이트 값을 핸들링하기 위한 실시예의 예시적 블록도이다. 프로세서(1600)는 적어도 정수 디코딩 유닛(1605) 및 실행 유닛(1610)을 포함한다. 디코딩 유닛(1605)은 예를 들면, ARM ISA 명령어(1615) 및/또는 Thumb ISA 명령어(1617)를 수신할 수 있다. 명령어(1615 및 1617)는 디코딩 사이클(1690) 동안 디코딩되고, 제어 비트(1618)는, 본원에서 위에 기술된 바와 같이, 멀티플렉서(1620)에 보내진다. 제어 비트(1618)는 처리되어, 이송 사이클(1694) 동안 이미디에이트 제어 버스(1630)를 사용하여 실행 유닛(1610)에 보내진다. 데이터 비트(1619)는 데이터 처리 사이클(1692) 동안 디스패치되어 처리되고, 수송 사이클(1894) 동안 이미디에이트 데이터 버스(1632)를 사용하여 실행 유닛(1610)에 보내진다.
본원에서 위에 기술된 바와 같이, 이미디에이트의 특성, 즉, 이것이 8, 12 혹은 16 비트 이미디에이트인지 여부에 따라, 적합한 제어 혹은 인코딩 비트(즉, 이미디에이트 Ctrl [3:0] 및/또는 이미디에이트 데이터 [15:12])는 확장 사이클 동안 처리의 특성을 결정할 것이다. 예를 들면, 제어 혹은 인코딩 비트는 Thumb 확장(1650), 시프터(1652), 제로 확장(1654), 부호 확장(1656), 디코드 비트 마스크(1658), 회전자(1660) 및/또는 바이트 카피(1662)를 요구할 수 있다. 이들 연산(1650-1662)의 출력 및 적합한 제어 혹은 인코딩 비트는 멀티플렉서(1670)에 보내지고, 이들은 이어 선택 사이클(1698)동안 이미디에이트 저장소(1680)에 저장된다. 확장 사이클은 가외의 실행 사이클이 아니라 실제 명령어 혹은 연산의 처리와 거의 동시에 및/또는 병렬로 수행된다. 결국, 이미디에이트 콘스탄트 값은 실제 명령어에 의한 사용 및 실행을 위해 이미디에이트 저장소(1680)에서 얻어질 수 있다.
수정된 이미디에이트로부터 캐리 플래그를 핸들링하기 위한 방법 및 장치가 본원에 기술된다. 디코딩 유닛으로부터 디스패치시에 행해지는 이미디에이트의 회전에 기초하여 캐리 플래그를 기입하는 몇몇 명령어가 있다. 이들 대부분은 논리 명령어이다. ARM ISA v7에 있어서는, 이 카테고리에 있는 대략 8개의 명령어, 예를 들면 AND, EOR, TST, TEQ, ORR, MOV, BIC, MVN이 있다. 대부분의 정규 논리 명령어는 캐리 플래그를 업데이트하지 않기 때문에, 이미디에이트 회전에 의해 발생된 캐리 플래그는 단순히 실행 유닛에 보내질 수 있고 실행시에 FRF(플래그 레지스터 파일)에 기입될 수 있다. 수정된 이미디에이트에 의해 발생된 이 캐리 플래그를 저장하기 위한 이미디에이트 저장 내 저장의 가외의 비트는, 회로가 항시 우측 회전하게 구성되고 데이터 크기가 32인 경우엔, 이미디에이트 저장 판독 데이터의 비트 31이 이 특정 uop에 대해 업데이트될 필요가 있는 최종의 캐리 플래그가 될 것임이 보장되기 때문에, 필요하지 않을 수 있다.
이것이 적용되지 않을 수 있는 유일한 경우는 본원에 위에 기술된 바와 같이 제로 시프트 경우이다. 회전 량은 연산 코드로부터 비롯되고 있기 때문에, 제로 시프트는 조기에 검출될 수 있고, C 플래그에 대한 destflag 인에이블을 비활성화하는 것은 FRF에 무엇이 기입되어져 있는가는 중요하지 않고 다음 연산은 이전에 발생되었던 적합한 캐리와 함께 소스가 되도록 수행될 수 있다. 그러나, ARM v8의 경우에, 캐리 플래그를 "0"으로서 업데이트하는 AND 명령어 및 BIC 명령어가 있다. 이러한 경우에 있어서, 두 연산, ANDv8 및 BICV8은 C 플래그를 기입하는 것들 및 이미디에이트의 실제 회전에 의해 발생된 캐리 플래그를 기입하는 ARM v7 내 것들을 서로 구별하기 위해 제공될 수 있다.
일반적으로, 플래그 핸들링을 위한 방법은 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하는 단계; 및 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하는 단계를 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다. 방법은 각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하는 단계를 더 포함할 수 있고, 적어도 한 목적지 플래그에 대응하지 않는 플래그 그룹들은 영향받지 않는다. 방법은 디스패치된 명령어들을 데이터 종속성에 기초하여 비순차로 실행하는 단계를 더 포함할 수 있다. 방법은 비순차 실행으로부터 비롯되는 플래그들을 퇴거 사이클 동안에 순차 플래그 매핑 테이블에 기입하는 단계를 더 포함할 수 있고, 순차 테이블은 퇴거된 디스패치된 명령어들에 플래그들의 매핑을 추적한다. 순차 플래그 매핑 테이블은 특정 플래그 그룹이 유효한지 여부를 유지할 수 있다. 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱스될 수 있다. 순차 플래그 매핑 테이블은 플러시된 비순차 테이블을 복원할 수 있다. 순차 플래그 매핑 테이블은 제로 시프트 조건을 위해 포이즌 비트를 유지할 수 있다. 방법은 제로 시프트가 일어나는 조건으로 포이즌 비트를 셋팅하는 단계; 제2 제로 시프트가 일어나는 조건으로 포이즌 비트를 소모하는 단계: 포이즌 비트가 소모되는 조건으로 비순차 플래그 매핑 테이블을 플러시하는 단계; 및 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하는 단계를 더 포함할 수 있다.
일반적으로, 프로세서는 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하게 구성된 실행 유닛; 및 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하게 구성된 이름 바꾸기 회로를 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다. 프로세서는 비순차 플래그 매핑 테이블을 더 포함할 수 있고, 실행 유닛은 각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하게 더욱 구성되고, 적어도 한 목적지 플래그에 대응하지 않는 플래그 그룹들은 영향받지 않는다. 실행 유닛은 디스패치된 명령어들을 데이터 종속성에 기초하여 비순차로 실행하게 더욱 구성될 수 있다. 프로세서는 순차 플래그 매핑 테이블을 더 포함할 수 있고, 실행 유닛은 비순차 실행으로부터 비롯되는 플래그들을 퇴거 사이클 동안에 순차 플래그 매핑 테이블에 기입하게 더욱 구성되고, 순차 플래그 매핑 테이블은 퇴거된 디스패치된 명령어들에 플래그들의 매핑을 추적한다. 순차 플래그 매핑 테이블은 특정 플래그 그룹이 유효한지 여부를 유지할 수 있다. 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱스될 수 있다. 순차 플래그 매핑 테이블은 플러시된 비순차 테이블을 복원할 수 있다. 순차 플래그 매핑 테이블은 제로 시프트 조건을 위해 포이즌 비트를 유지할 수 있다. 실행 유닛은 제로 시프트가 일어나는 조건으로 포이즌 비트를 셋팅하게, 제2 제로 시프트가 일어나는 조건으로 포이즌 비트를 소모하게, 포이즌 비트가 소모되는 조건으로 비순차 플래그 매핑 테이블을 플러시하게, 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하게 구성될 수 있다. 프로세서는 디코딩 유닛; 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 16 비트 이미디에이트 버스; 및 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 4 비트 제어 버스를 더 포함할 수 있고, 16 비트 이미디에이트 버스 및 4 비트 제어 버스의 조합은 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보를 캐리하게 구성되고, 16 비트 이미디에이트 버스는 이미디에이트 콘스탄트를 캐리하게 구성된다.
프로세서에서 플래그 핸들링을 수행하게 범용 컴퓨터에 의한 실행을 위한 한 세트의 명령어들을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체는 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하기 위한 결정 코드 세그먼트; 및 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하기 위한 이름 바꾸기 코드 세그먼트를 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다. 명령어들은 디바이스의 제조를 위해 사용되는 하드웨어 기술 언어(HDL) 명령어들이다.
일반적으로, 프로세서는 디코딩 유닛; 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 16 비트 이미디에이트 버스; 및 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 4 비트 제어 버스를 더 포함하고, 16 비트 이미디에이트 버스 및 4 비트 제어 버스의 조합은 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보를 캐리하게 구성되고, 16 비트 이미디에이트 버스는 이미디에이트 콘스탄트를 캐리하게 구성된다. 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보는 멀티플렉서를 사용하여 16 비트 이미디에이트 버스와 4 비트 제어 버스의 조합에 압축된다. 16 비트 이미디에이트 버스의 상측 4 비트는 어떤 명령어에 대한 인코딩 정보를 캐리하기 위해 사용될 수 있다. 인코딩 정보는 Thumb 확장, 시프트, 제로 확장, 부호 확장, 디코드 비트 마스크, 회전 및 바이트 카피 연산/확장 중 적어도 하나가 수행됨을 결정한다. 연산/확장 및 인코딩 정보의 출력은 멀티플렉스되고 명령어에 의한 가용성을 위해 이미디에이트 저장소에 저장된다. 연산/확장 동안 발생된 캐리 플래그는 플래그 레지스터 파일에 보내진다.
실시예들
1. 플래그 핸들링을 위한 방법으로서, 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하는 단계를 포함하는, 방법.
2. 실시예 1의 방법으로서, 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하는 단계를 더 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다.
3. 전술한 실시예 중 어느 하나에서의 방법으로서, 각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하는 단계를 더 포함하고, 적어도 한 목적지 플래그에 대응하지 않는 플래그 그룹들은 영향받지 않는다.
4. 전술한 실시예 중 어느 하나에서의 방법으로서, 디스패치된 명령어들을 데이터 종속성에 기초하여 비순차로 실행하는 단계를 더 포함한다.
5. 전술한 실시예 중 어느 하나에서의 방법으로서, 비순차 실행으로부터 비롯되는 플래그들을 퇴거 사이클 동안에 순차 플래그 매핑 테이블에 기입하는 단계를 더 포함하고, 순차 테이블은 퇴거된 디스패치된 명령어들에 플래그들의 매핑을 추적한다.
6. 전술한 실시예 중 어느 하나에서의 방법으로서, 순차 플래그 매핑 테이블은 특정 플래그 그룹이 유효한지 여부를 유지한다.
7. 전술한 실시예 중 어느 하나에서의 방법으로서, 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱스된다.
8. 전술한 실시예 중 어느 하나에서의 방법으로서, 순차 플래그 매핑 테이블은 플러시된 비순차 테이블을 복원한다.
9. 전술한 실시예 중 어느 하나에서의 방법으로서, 순차 플래그 매핑 테이블은 제로 시프트 조건을 위해 포이즌 비트를 유지한다.
10. 전술한 실시예 중 어느 하나에서의 방법으로서, 제로 시프트가 일어나는 조건으로 포이즌 비트를 셋팅하는 단계를 더 포함한다.
11. 전술한 실시예 중 어느 하나에서의 방법으로서, 제2 제로 시프트가 일어나는 조건으로 포이즌 비트를 소모하는 단계를 더 포함한다.
12. 전술한 실시예 중 어느 하나에서의 방법으로서, 포이즌 비트가 소모되는 조건으로 비순차 플래그 매핑 테이블을 플러시하는 단계를 더 포함한다.
13. 전술한 실시예 중 어느 하나에서의 방법으로서, 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하는 단계를 더 포함한다.
14. 프로세서로서, 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하게 구성된 실행 유닛을 포함한다.
15. 실시예 14에서의 프로세서로서, 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하게 구성된 이름 바꾸기 회로를 더 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다.
16. 실시예 14 및 15 중 어느 하나에서의 프로세서로서, 비순차 플래그 매핑 테이블을 더 포함하고, 실행 유닛은 각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하게 더욱 구성되고, 적어도 한 목적지 플래그에 대응하지 않는 플래그 그룹들은 영향받지 않는다.
17. 실시예 14 내지 16 중 어느 하나에서의 프로세서로서, 실행 유닛은 디스패치된 명령어들을 데이터 종속성에 기초하여 비순차로 실행하게 더욱 구성된다.
18. 실시예 14 내지 17 중 어느 하나에서의 프로세서로서, 순차 플래그 매핑 테이블을 더 포함하고, 실행 유닛은 비순차 실행으로부터 비롯되는 플래그들을 퇴거 사이클 동안에 순차 플래그 매핑 테이블에 기입하게 더욱 구성되고, 순차 플래그 매핑 테이블은 퇴거된 디스패치된 명령어들에 플래그들의 매핑을 추적한다.
19. 실시예 14 내지 18 중 어느 하나에서의 프로세서로서, 순차 플래그 매핑 테이블은 특정 플래그 그룹이 유효한지 여부를 유지한다.
20. 실시예 14 내지 19 중 어느 하나에서의 프로세서로서, 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱스된다.
21. 실시예 14 내지 20 중 어느 하나에서의 프로세서로서, 순차 플래그 매핑 테이블은 플러시된 비순차 테이블을 복원한다.
22. 실시예 14 내지 21 중 어느 하나에서의 프로세서로서, 순차 플래그 매핑 테이블은 제로 시프트 조건을 위해 포이즌 비트를 유지한다.
23. 실시예 14 내지 22 중 어느 하나에서의 프로세서로서, 실행 유닛은 제로 시프트가 일어나는 조건으로 포이즌 비트를 셋팅하게 구성된다.
24. 실시예 14 내지 23 중 어느 하나에서의 프로세서로서, 실행 유닛은 제2 제로 시프트가 일어나는 조건으로 포이즌 비트를 소모하게 구성된다.
25. 실시예 14 내지 24 중 어느 하나에서의 프로세서로서, 실행 유닛은 포이즌 비트가 소모되는 조건으로 비순차 플래그 매핑 테이블을 플러시하게 구성된다.
26. 실시예 14 내지 25 중 어느 하나에서의 프로세서로서, 실행 유닛은 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하게 구성된다.
27. 실시예 14 내지 26 중 어느 하나에서의 프로세서로서, 디코딩 유닛을 더 포함한다.
28. 실시예 14 내지 27 중 어느 하나에서의 프로세서로서, 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 16 비트 이미디에이트 버스를 더 포함한다.
29. 실시예 14 내지 28 중 어느 하나에서의 프로세서로서, 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 4 비트 제어 버스를 더 포함한다.
30. 실시예 14 내지 29 중 어느 하나에서의 프로세서로서, 16 비트 이미디에이트 버스는 이미디에이트 콘스탄트 및 16 비트 이미디에이트 버스의 조합을 캐리하게 구성되고, 4 비트 제어 버스는 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보를 캐리하게 구성되고, 16 비트 이미디에이트 버스는 비-16 비트 이미디에이트 콘스탄트들의 경우에 인코딩 정보의 일부를 오버로드를 캐리한다.
31. 프로세서에서 플래그 핸들링을 수행하게 범용 컴퓨터에 의한 실행을 위한 한 세트의 명령어들을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체로서, 디스패치된 명령어들로부터 적어도 한 목적지 플래그를 결정하기 위한 결정 코드 세그먼트를 포함한다.
32. 실시예 31에서의 비-일시적 컴퓨터-판독가능 저장 매체로서, 적어도 한 목적지 플래그에 대응하는 적어도 한 플래그 그룹에 연관된 자유 플래그 레지스터 숫자를 할당함으로써 적어도 한 목적지 플래그를 이름 바꾸기하기 위한 이름 바꾸기 코드 세그먼트를 더 포함하고, 플래그 그룹은 독립적인 플래그에 대응한다.
33. 제20항에 따른 비-일시적 컴퓨터-판독가능 저장 매체로서, 명령어들은 디바이스의 제조를 위해 사용되는 하드웨어 기술 언어(HDL) 명령어들이다.
34. 프로세서는 디코딩 유닛을 포함한다.
35. 실시예 34에서의 프로세서로서, 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 16 비트 이미디에이트 버스를 더 포함한다.
36. 실시예 34 및 35 중 어느 하나에서의 프로세서로서, 디코딩 유닛과 실행 유닛 간에 인터페이스하게 구성된 4 비트 제어 버스를 더 포함한다.
37. 실시예 34 내지 36 중 어느 하나에서의 프로세서로서, 16 비트 이미디에이트 버스 및 4 비트 제어 버스의 조합은 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보를 캐리하게 구성되고, 16 비트 이미디에이트 버스는 이미디에이트 콘스탄트를 캐리하게 구성된다.
38. 실시예 34 내지 37 중 어느 하나에서의 프로세서로서, 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보는 멀티플렉서를 사용하여 16 비트 이미디에이트 버스와 4 비트 제어 버스의 조합에 압축된다.
39. 실시예 34 내지 38 중 어느 하나에서의 프로세서로서, 16 비트 이미디에이트 버스의 상측 4 비트는 어떤 명령어들에 대한 인코딩 정보를 캐리하기 위해 사용될 수 있다.
40. 실시예 34 내지 39 중 어느 하나에서의 프로세서로서, 인코딩 정보는 Thumb 확장, 시프트, 제로 확장, 부호 확장, 디코드 비트 마스크, 회전 및 바이트 카피 연산/확장 중 적어도 하나가 수행되는 것을 결정한다.
41. 실시예 34 내지 40 중 어느 하나에서의 프로세서로서, 연산/확장 및 인코딩 정보의 출력은 멀티플렉스되고 명령어에 의한 가용성을 위해 이미디에이트 저장소에 저장된다.
42. 실시예 34 내지 41 중 어느 하나에서의 프로세서로서, 연산/확장 동안 발생되는 캐리 플래그는 플래그 레지스터 파일에 보내진다.
본원에 개시물에 기초하여 많은 변형이 가능함이 이해될 것이다. 특징 및 요소가 특정 조합들로 위에 기술되었을지라도, 각 특징 혹은 요소는 다른 특징 및 요소 없이 단독으로 혹은 다른 특징 및 요소와 함께 혹은 없이 다양한 조합에서 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서, 혹은 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예로서, 범용 프로세서, 전용 프로세서, 통상의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어에 연관되는 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 응용특정의 집적회로(ASIC), 필드 프로그램가능 게이트 어레이(FPGA) 회로, 임의의 이외 다른 유형의 집적회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 기술 언어(HDL) 명령어, 및 네트리스트(이러한 명령어는 컴퓨터 판독가능 매체에 저장될 수 있다)를 포함하는 다른 중간 데이터의 결과를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 실시예의 측면들을 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 사용될 마스크워크일 수 있다.
본원에 제공된 방법 혹은 흐름도는 범용 컴퓨터 혹은 프로세서에 의한 실행을 위해 비-일시적 컴퓨터-판독가능 저장 매체에 탑재되는 컴퓨터 프로그램, 소프트웨어, 혹은 펌웨어에 구현될 수 있다. 비-일시적 컴퓨터-판독가능 저장 매체의 예는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 자기 매체로서 이를테면 내부 하드 디스크 및 착탈가능 디스크, 자기-광학 매체, 및 광학 매체로서 이를테면 CD-ROM 디스크, 및 디지털 다기능 디스크(DVD)를 포함한다.

Claims (21)

  1. 플래그 핸들링(flag handling)을 위한 방법에 있어서,
    디스패치(dispatch)된 명령어들로부터 적어도 하나의 목적지 플래그를 결정하는 단계와;
    상기 디스패치된 명령어들을 실행하기 전에 상기 디스패치된 명령어들의 소스 레지스터들과 목적지 레지스터들 간의 실제 데이터 의존성들을 결정하는 단계와;
    자유 플래그 레지스터 숫자를 할당함으로써 상기 적어도 하나의 목적지 플래그가 상기 디스패치된 명령어들의 실제 데이터 의존성들을 따르도록 거짓 의존성들을 제거하기 위해 상기 적어도 하나의 목적지 플래그를 이름 바꾸기하는 단계와;
    각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하는 단계와;
    기입 플래그들(write flags)을 순차 플래그 매핑 테이블에 기입하는 단계 - 상기 기입 플래그들은 상기 디스패치된 명령어들의 비순차 실행에 의해 생성되며 - 와; 그리고
    상기 기입 플래그들에 기초하여 플러시 연산을 선택적으로 수행하는 단계를 포함하고,
    상기 플러시 연산은 상기 순차 플래그 매핑 테이블에 기초하여 상기 비순차 플래그 맵핑 테이블을 복원하는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  2. 제1항에 있어서,
    상기 적어도 하나의 목적지 플래그에 대응하지 않는 플래그 그룹들은 각 이름 바꾸기된 플래그의 기입에 영향받지 않는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  3. 제2항에 있어서,
    상기 디스패치된 명령어들의 비순차 실행은 데이터 의존성에 기초하는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  4. 제3항에 있어서,
    상기 기입 플래그들은 퇴거 사이클(retire cycle) 동안에 순차 플래그 매핑 테이블에 기입되는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  5. 제1항에 있어서,
    상기 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱싱되는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  6. 제4항에 있어서,
    제로 시프트가 일어나는 조건에 응답하여 포이즌 비트를 셋팅하는 단계와;
    제2 제로 시프트가 일어나는 조건에 응답하여 상기 포이즌 비트를 소모하는 단계와; 그리고
    상기 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하는 단계를 더 포함하고,
    상기 플러시 연산은, 상기 포이즌 비트가 소모될 때 수행되는 것을 특징으로 하는
    플래그 핸들링을 위한 방법.
  7. 프로세서에 있어서,
    비순차 플래그 매핑 테이블과;
    순차 플래그 매핑 테이블과;
    상기 비순차 플래그 매핑 테이블 및 상기 순차 플래그 매핑 테이블과 통신 가능하게 연결된 실행 유닛과; 그리고
    자유 플래그 레지스터 숫자를 할당함으로써 적어도 하나의 목적지 플래그가 디스패치된 명령어들의 실제 데이터 의존성들을 따르도록 거짓 의존성들을 제거하기 위해 상기 적어도 하나의 목적지 플래그를 이름 바꾸도록 구성된 이름 바꾸기 회로를 포함하고,
    상기 실행 유닛은:
    상기 디스패치된 명령어들로부터 상기 적어도 하나의 목적지 플래그를 결정하고,
    상기 디스패치된 명령어들을 실행하기 전에 상기 디스패치된 명령어들의 소스 레지스터들과 목적지 레지스터들 간의 실제 데이터 의존성들을 결정하고,
    각 이름 바꾸기된 플래그를 상기 비순차 플래그 매핑 테이블에 기입하고,
    기입 플래그들을 순차 플래그 매핑 테이블에 기입하며,
    상기 기입 플래그들은 상기 디스패치된 명령어들의 비순차 실행에 의해 생성되고, 그리고
    상기 기입 플래그들에 기초하여 플러시 연산을 선택적으로 수행하며,
    상기 플러시 연산은 상기 순차 플래그 매핑 테이블에 기초하여 상기 비순차 플래그 맵핑 테이블을 복원하는 것을 특징으로 하는
    프로세서.
  8. 제7항에 있어서,
    상기 적어도 하나의 목적지 플래그에 대응하지 않는 플래그 그룹들은, 상기 실행 유닛이 각 이름 바꾸기된 플래그를 기입할 때 영향받지 않는 것을 특징으로 하는
    프로세서.
  9. 제7항에 있어서,
    상기 디스패치된 명령어들의 비순차 실행은 데이터 의존성에 기초하는 것을 특징으로 하는
    프로세서.
  10. 제8항에 있어서,
    상기 실행 유닛은 상기 비순차 실행으로부터 비롯되는 기입 플래그들을 퇴거 사이클 동안에 상기 순차 플래그 매핑 테이블에 기입하는 것을 특징으로 하는
    프로세서.
  11. 제7항에 있어서,
    상기 비순차 플래그 매핑 테이블은 소스 플래그 그룹들에 의해 인덱싱되는 것을 특징으로 하는
    프로세서.
  12. 제10항에 있어서,
    상기 실행 유닛은, 또한,
    제로 시프트가 일어나는 조건에 응답하여 포이즌 비트를 셋팅하고,
    제2 제로 시프트가 일어나는 조건에 응답하여 상기 포이즌 비트를 소모하고, 그리고
    상기 포이즌 비트의 소모를 초래하였던 명령어를 다시 디스패치하고 재 실행하며,
    상기 플러시 연산은, 상기 포이즌 비트가 소모될 때 수행되는 것을 특징으로 하는
    프로세서.
  13. 제7항에 있어서,
    디코딩 유닛과;
    상기 디코딩 유닛과 상기 실행 유닛 간에 인터페이스하게 구성된 16 비트 이미디에이트 버스(immediate bus)와; 그리고
    상기 디코딩 유닛과 상기 실행 유닛 간에 인터페이스하게 구성된 4 비트 제어 버스를 더 포함하고,
    상기 16 비트 이미디에이트 버스는 이미디에이트 콘스탄트(immediate constant)를 캐리하게 구성되고, 상기 16 비트 이미디에이트 버스 및 상기 4 비트 제어 버스의 조합은 상기 이미디에이트 콘스탄트를 갖는 명령어들에 대한 인코딩 정보를 캐리하게 구성되고, 상기 16 비트 이미디에이트 버스는 비-16 비트 이미디에이트 콘스탄트들의 경우에 상기 인코딩 정보의 일부의 오버로드를 캐리하는 것을 특징으로 하는
    프로세서.
  14. 프로세서에서 플래그 핸들링을 수행하게 범용 컴퓨터에 의한 실행을 위한 명령어들의 세트를 저장하는 비-일시적 컴퓨터-판독가능 저장 매체로서,
    디스패치된 명령어들로부터 적어도 하나의 목적지 플래그를 결정하고 그리고 상기 디스패치된 명령어들을 실행하기 전에 상기 디스패치된 명령어들의 소스 레지스터들과 목적지 레지스터들 간의 실제 데이터 의존성들을 결정하기 위한 결정 코드 세그먼트와;
    자유 플래그 레지스터 숫자를 할당함으로써 적어도 하나의 목적지 플래그가 상기 디스패치된 명령어들의 실제 데이터 의존성들을 따르도록 거짓 의존성들을 제거하기 위해 상기 적어도 하나의 목적지 플래그를 이름 바꾸기하기 위한 이름 바꾸기 코드 세그먼트와;
    각 이름 바꾸기된 플래그를 비순차 플래그 매핑 테이블에 기입하고, 그리고 기입 플래그들을 순차 플래그 매핑 테이블에 기입하는 기입 코드 세그먼트 - 상기 기입 플래그들은 상기 디스패치된 명령어들의 비순차 실행에 의해 생성되며 - 와; 그리고
    플러시 연산이 상기 기입 플래그들에 기초하여 요구되는 것으로 결정될 때 상기 순차 플래그 매핑 테이블에 기초하여 상기 비순차 플래그 맵핑 테이블을 복원하는 플러시 코드 세그먼트를 포함하는 것을 특징으로 하는
    비-일시적 컴퓨터-판독가능 저장 매체.
  15. 제14항에 있어서,
    상기 명령어들은 디바이스를 제조하기 위해 사용되는 하드웨어 기술 언어(HDL) 명령어들인 것을 특징으로 하는
    비-일시적 컴퓨터-판독가능 저장 매체.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
KR1020167013469A 2013-10-25 2014-10-24 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 KR102161682B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361895715P 2013-10-25 2013-10-25
US61/895,715 2013-10-25
PCT/US2014/062180 WO2015061687A1 (en) 2013-10-25 2014-10-24 Processor and methods for immediate handling and flag handling

Publications (2)

Publication Number Publication Date
KR20160075639A KR20160075639A (ko) 2016-06-29
KR102161682B1 true KR102161682B1 (ko) 2020-10-05

Family

ID=52993620

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167013469A KR102161682B1 (ko) 2013-10-25 2014-10-24 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법

Country Status (6)

Country Link
US (1) US20150121041A1 (ko)
EP (1) EP3060979B1 (ko)
JP (1) JP6491655B2 (ko)
KR (1) KR102161682B1 (ko)
CN (1) CN105765522B (ko)
WO (1) WO2015061687A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798593B1 (en) 2016-07-06 2017-10-24 Workday, Inc. Synchronization of code execution
US10761849B2 (en) * 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10713213B2 (en) * 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing
US10481910B2 (en) * 2017-09-29 2019-11-19 Intel Corporation Apparatus and method for shifting quadwords and extracting packed words
CN112114874B (zh) * 2020-08-20 2021-10-15 北京百度网讯科技有限公司 数据处理方法、装置、电子设备和存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6047369A (en) * 1994-02-28 2000-04-04 Intel Corporation Flag renaming and flag masks within register alias table
US5649225A (en) * 1994-06-01 1997-07-15 Advanced Micro Devices, Inc. Resynchronization of a superscalar processor
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5933618A (en) * 1995-10-30 1999-08-03 Advanced Micro Devices, Inc. Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction
US6338132B1 (en) * 1998-12-30 2002-01-08 Intel Corporation System and method for storing immediate data
US20050071518A1 (en) * 2003-09-30 2005-03-31 Intel Corporation Flag value renaming
US7568088B1 (en) * 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US7421529B2 (en) * 2005-10-20 2008-09-02 Qualcomm Incorporated Method and apparatus to clear semaphore reservation for exclusive access to shared memory
US7822948B2 (en) * 2008-01-03 2010-10-26 International Business Machines Corporation Apparatus, system, and method for discontiguous multiple issue of instructions
US8250346B2 (en) * 2009-06-04 2012-08-21 Arm Limited Register renaming of a partially updated data granule
US9088594B2 (en) * 2011-02-07 2015-07-21 International Business Machines Corporation Providing to a parser and processors in a network processor access to an external coprocessor
US8924695B2 (en) * 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
EP2508979B1 (en) * 2011-04-07 2018-10-10 VIA Technologies, Inc. Efficient conditional alu instruction in read-port limited register file microprocessor
US8972701B2 (en) * 2011-12-06 2015-03-03 Arm Limited Setting zero bits in architectural register for storing destination operand of smaller size based on corresponding zero flag attached to renamed physical register
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers

Also Published As

Publication number Publication date
EP3060979A1 (en) 2016-08-31
WO2015061687A1 (en) 2015-04-30
JP2016534430A (ja) 2016-11-04
EP3060979A4 (en) 2017-07-05
CN105765522B (zh) 2020-05-19
EP3060979B1 (en) 2020-08-05
US20150121041A1 (en) 2015-04-30
KR20160075639A (ko) 2016-06-29
JP6491655B2 (ja) 2019-03-27
CN105765522A (zh) 2016-07-13

Similar Documents

Publication Publication Date Title
JP6351682B2 (ja) 装置および方法
KR102161682B1 (ko) 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법
TWI507980B (zh) 最佳化暫存器初始化操作
JP5357181B2 (ja) コンピュータ・システム、その動作方法、及び、コンピュータ・プログラム
US20190012171A1 (en) Read and Write Masks Update Instruction for Vectorization of Recursive Computations Over Independent Data
CN107077321B (zh) 用于执行融合的单个周期递增-比较-跳转的指令和逻辑
US9268572B2 (en) Modify and execute next sequential instruction facility and instructions therefor
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US9459872B2 (en) High-word facility for extending the number of general purpose registers available to instructions
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
US20150227366A1 (en) Processor with granular add immediates capability &amp; methods
US9652234B2 (en) Instruction and logic to control transfer in a partial binary translation system
US20140095828A1 (en) Vector move instruction controlled by read and write masks
US20140189331A1 (en) System of improved loop detection and execution
KR101285072B1 (ko) 실행 관련 명령어
US20090182985A1 (en) Move Facility and Instructions Therefore
US20160378480A1 (en) Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations
US20150106600A1 (en) Execution of condition-based instructions
US9710389B2 (en) Method and apparatus for memory aliasing detection in an out-of-order instruction execution platform
EP1220088A2 (en) Circuit and method for supporting misaligned accesses in the presence of speculative load instructions
KR101635856B1 (ko) 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant