KR101738212B1 - 명령어 에뮬레이션 프로세서, 방법, 및 시스템 - Google Patents

명령어 에뮬레이션 프로세서, 방법, 및 시스템 Download PDF

Info

Publication number
KR101738212B1
KR101738212B1 KR1020140031294A KR20140031294A KR101738212B1 KR 101738212 B1 KR101738212 B1 KR 101738212B1 KR 1020140031294 A KR1020140031294 A KR 1020140031294A KR 20140031294 A KR20140031294 A KR 20140031294A KR 101738212 B1 KR101738212 B1 KR 101738212B1
Authority
KR
South Korea
Prior art keywords
instruction
logic
processor
emulation mode
instructions
Prior art date
Application number
KR1020140031294A
Other languages
English (en)
Other versions
KR20140113607A (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 KR20140113607A publication Critical patent/KR20140113607A/ko
Application granted granted Critical
Publication of KR101738212B1 publication Critical patent/KR101738212B1/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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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
    • 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
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode 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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Abstract

일 양태의 프로세서는 제1 명령어를 수신하고 또한 제1 명령어가 에뮬레이팅될 것으로 판정하는 디코드 로직을 포함한다. 또한, 프로세서는 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직을 포함한다. 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 명령어로부터 디코딩된 하나 이상의 제어 신호들을 처리한다. 이 명령어는 제1 명령어를 에뮬레이팅하는 데 이용되는 하나 이상의 명령어들의 세트 중 하나이다. 하나 이상의 제어 신호들은 에뮬레이션 모드에 있지 않은 경우보다 에뮬레이션 모드에 있는 경우에 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직에 의해 상이하게 프로세싱된다. 또한, 그 외 장치가 방법들 및 시스템과 함께 개시된다.

Description

명령어 에뮬레이션 프로세서, 방법, 및 시스템{INSTRUCTION EMULATION PROCESSORS, METHODS, AND SYSTEMS}
본 명세서에 기술된 실시예들은 일반적으로 프로세서에 관한 것이다. 특히, 본 명세서에 기술된 실시예들은 일반적으로 프로세서에서의 명령어 에뮬레이션에 관한 것이다.
프로세서는 일반적으로 ISA(instruction set architectures)를 갖는다. ISA는 일반적으로 프로그래밍에 관련되는 프로세서의 아키텍처의 일부를 나타낸다. ISA는 일반적으로 프로세서의 네이티브 명령어, 아키텍처 레지스터, 데이터 유형, 어드레싱 모드 등을 포함한다. ISA의 하나의 부분은 명령어 세트이다. 명령어 세트는 일반적으로 실행을 위해 프로세서에 제공되는 ISA 레벨 명령어 또는 매크로명령어를 포함한다. 명령어 세트의 명령어를 처리하기 위해 실행 로직 및 다른 파이프라인 로직이 포함된다. 종종, 이러한 실행 및 다른 파이프라인 로직의 양이 상당히 많을 수 있다. 일반적으로, 명령어 세트 내의 명령어가 더 많고, 명령어 세트 내의 명령어가 더 복잡하고 및/또는 더 전문화된 것일수록, 이러한 로직의 양이 더 많다. 이러한 하드웨어는 프로세서의 제조 비용, 크기, 및/또는 전력 소비를 증가시키는 경향이 있을 수 있다.
본 발명은, 본 발명의 실시예들을 도시하기 위해 사용되는 첨부 도면 및 아래의 설명을 참조하면 가장 잘 이해될 수 있다. 도면에서:
도 1은 컴퓨터 시스템의 일 실시예의 블록도이다.
도 2는 프로세서의 명령어를 에뮬레이트하는 방법의 일 실시예의 블록 흐름도이다.
도 3은 하나 이상의 명령어들의 세트와 명령어를 에뮬레이트하는 로직의 일 실시예를 도시하는 블록도이다.
도 4는, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우와는 상이하게 프로세서가 예외 조건을 핸들링하는 것을 허용하는 로직의 일 실시예를 도시하는 블록도이다.
도 5는, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우와는 상이하게 프로세서가 리소스(들) 및/또는 정보에 접근하는 것을 허용하는 로직의 일 실시예를 도시하는 블록도이다.
도 6은 프로세서에 의해 및/또는 프로세서에서 수행되는 방법의 일 실시예의 블록 흐름도이다.
도 7은 주어진 연산 코드가 상이한 의미를 갖는 것을 허용하는 로직의 일 실시예를 도시하는 블록도이다.
도 8은 운영 체제 모듈에 의해 수행될 수 있는 방법의 일 실시예의 블록 흐름도이다.
도 9는 하나 이상의 함수의 세트, 서브루틴, 또는 그들을 사용할 소프트웨어에 적합한 주어진 연산 코드의 의미를 갖는 소프트웨어 라이브러리의 다른 부분을 선택하도록 동작가능한 선택 모듈을 포함하는 프로그램 로더 모듈의 일 실시예의 블록도이다.
도 10a는 본 발명의 실시예들에 따른 예시적인 인 오더 파이프라인(in-order pipeline)과 예시적인 레지스터 리네이밍 아웃 오브 오더 발행/실행 파이프라인(register renaming, out-of-order issue/execution pipeline) 둘 다를 도시하는 블록도이다.
도 10b는 본 발명의 실시예들에 따른 프로세서에 포함될 예시적인 실시예의 인 오더 아키텍처 코어와 예시적인 레지스터 리네이밍 아웃 오브 오더 발행/실행 아키텍처 코어 둘 다를 도시하는 블록도이다.
도 11a는, 본 발명의 실시예들에 따른, 온-다이 인터커넥트 네트워크로의 접속과 함께 레벨 2(L2) 캐시의 로컬 서브세트를 가진, 단일 프로세서 코어의 블록도이다.
도 11b는 본 발명의 실시예들에 따른 도 11a의 프로세서 코어의 일부의 확대도이다.
도 12는, 본 발명의 실시예들에 따른, 둘 이상의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 13은 본 발명의 하나의 실시예에 따른 시스템의 블록도를 도시한다.
도 14는 본 발명의 일 실시예에 따른 더 구체적인 제1 예시적인 시스템의 블록도를 도시한다.
도 15는 본 발명의 일 실시예에 따른 더 구체적인 제2 예시적인 시스템의 블록도를 도시한다.
도 16은 본 발명의 일 실시예에 따른 SoC의 블록도를 도시한다.
도 17은, 본 발명의 실시예들에 따른, 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
본 명세서에는, 명령어 에뮬레이션 프로세서, 방법, 및 시스템이 개시된다. 아래의 설명에서, 다수의 특정 세부 사항(예컨대, 특정 에뮬레이션 모드 인식 로직, 예외 조건을 핸들링하기 위한 접근법, 특권 리소스 및 정보의 유형, 로직 구현, 마이크로아키텍처 세부 사항, 연산들의 시퀀스, 로직 분할/통합 세부 사항, 하드웨어/소프트웨어 분할 세부 사항, 프로세서 구성, 시스템 컴포넌트들의 유형 및 상호관계 등)이 설명된다. 그러나, 본 발명의 실시예들은 이러한 특정 세부 사항 없이도 실행될 수 있다는 것이 이해된다. 다른 예들에서, 본 설명의 이해를 모호하게 하지 않기 위해 잘 알려진 회로, 구조 및 기술은 자세하게 도시되지 않았다.
도 1은 컴퓨터 시스템(100)의 일 실시예의 블록도이다. 다양한 실시예에서, 컴퓨터 시스템은 데스크톱 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 넷북, 스마트폰, 개인 휴대 정보 단말기, 휴대 전화, 서버, 네트워크 디바이스(예컨대, 라우터 또는 스위치), MID(Mobile Internet device), 미디어 플레이어, 스마트 텔레비전, 셋톱 박스, 비디오 게임 제어기, 또는 다른 유형의 전자 디바이스를 나타낼 수 있다.
컴퓨터 시스템은 프로세서(101)의 일 실시예를 포함한다. 일부 실시예에서, 프로세서는 범용 프로세서일 수 있다. 예를 들어, 프로세서는 일반적으로 CPU(central processing unit)로서 사용되는 유형의 범용 프로세서일 수 있다. 다른 실시예에서, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서의 예로는, 단지 몇 가지 예를 들자면, 코프로세서, 그래픽 프로세서, 통신 프로세서, 네트워크 프로세서, 암호화 프로세서, 내장형 프로세서, 및 DSP(digital signal processors)를 포함하되, 이로 제한되는 것은 아니다. 프로세서는 다양한 CISC(complex instruction set computing) 프로세서, 다양한 RISC(reduced instruction set computing) 프로세서, 다양한 VLIW(very long instruction word) 프로세서, 이들의 다양한 하이브리드, 또는 전체적으로 다른 유형의 프로세서일 수 있다.
컴퓨터 시스템은 또한 결합 메커니즘(109)에 의해 프로세서(101)와 결합되는 메모리(110)의 일 실시예를 포함한다. 프로세서와 메모리를 결합하기 위한 것으로서, 당해 기술 분야에서 알려진 종래의 임의의 결합 메커니즘이 적합하다. 그러한 메커니즘의 예로는, 이로 제한되는 것은 아니지만, 인터커넥트, 버스, 허브, 메모리 제어기, 칩셋, 칩셋 컴포넌트 등 및 이들의 조합을 포함한다. 메모리는 동일한 또는 상이한 유형의 하나 이상의 메모리 디바이스들을 포함할 수 있다. 본 실시예들에 적합한 것으로, 일반적으로 사용되는 메모리 유형 중 하나는 DRAM(dynamic random access memory)이지만, 대안적으로, 다른 유형들의 메모리(예컨대, 플래시 메모리)가 사용될 수도 있다.
메모리(110) 안에는 소프트웨어(111)가 저장될 수 있다. 소프트웨어는, 예를 들어, 하나 이상의 OS(operating systems) 및 하나 이상의 애플리케이션을 포함할 수 있다. 연산 동안, 소프트웨어의 일부는 프로세서에 로드될 수도 있고 프로세서에서 실행될 수도 있다. 도시된 바와 같이, 프로세서는 프로세서의 명령어 세트인 ISA 명령어들(102)를 수신할 수 있다. 예를 들어, 명령어 페치 유닛이 ISA 명령어들을 페치할 수 있다. ISA 명령어들은 매크로명령어, 어셈블리 언어 명령어, 기계-레벨 명령어, 또는 디코딩 및 실행되도록 프로세서에 제공되는 다른 명령어를 나타낼 수 있다. 도시된 바와 같이, 일부 실시예에서, ISA 명령어들은 에뮬레이트되지 않은 명령어들(non-emulated instructions; 103)과, 하나 이상의 유형의 에뮬레이트된 명령어들(104) 둘 다를 포함할 수 있다.
프로세서는 디코드 로직(105)을 포함한다. 디코드 로직은 디코드 유닛 또는 디코더로도 지칭될 수 있다. 디코드 로직은 ISA 명령어들(102)을 수신할 수 있다. 에뮬레이트되지 않은 명령어들(103)의 경우에, 디코드 로직은 비교적 상위 레벨의 명령어들을 디코딩하고, 하나 이상의 비교적 하위 레벨의 마이크로명령어들, 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 또는 ISA 명령어들에서 파생된 다른 비교적 하위 레벨의 명령어들이나 제어 신호들을 출력할 수 있다. 도시에서, 이들은 디코딩된 명령어들(106)로 표시된다. 디코더로부터 출력된 디코딩된 명령어들은, 디코더에 입력된 상위 레벨의 ISA 명령어들을 반영, 표현, 및/또는 그로부터 도출될 수 있고, 하나 이상의 하위 레벨(예컨대, 회로-레벨 또는 하드웨어-레벨) 연산들을 통해 ISA 명령어들을 구현할 수 있다. 디코더는, 이로 제한되는 것은 아니지만, 마이크로코드 ROM(read only memories), 룩-업 테이블, 하드웨어 구현, PLA(programmable logic arrays)들, 및 당해 분야에 공지된 디코더를 구현하는 데 사용되는 다른 메커니즘을 포함하는 다양한 상이한 메커니즘을 사용하여 구현될 수 있다.
포스트-디코드 명령어 프로세서 로직(107)은 디코드 로직과 결합된다. 포스트-디코드 명령어 프로세서 로직은 프로세서의 명령어 프로세싱 파이프라인의 포스트-디코드 부를 나타낼 수 있다. 포스트-디코드 명령어 프로세서 로직은 디코딩된 명령어들(106)을 수신 및 처리할 수 있다. 일반적으로, 포스트-디코드 명령어 프로세서 로직은 레지스터 판독 및/또는 메모리 판독 로직, 실행 로직, 레지스터 및/또는 메모리 라이트 백 로직, 및 예외 핸들러 로직을 포함할 수 있지만, 본 발명의 범위는 그러한 로직으로 제한되지 않고, 로직은 하나의 아키텍처에서 또 다른 아키텍처까지 다양할 수 있다. 일부 실시예에서, 예를 들어, 아웃 오브 오더 프로세서 파이프라인의 경우에, 포스트-디코드 명령어 프로세서 로직은, 예를 들어, 할당 로직(allocation logic), 리네이밍 로직(renaming logic), 스케줄링 로직, 리타이어 또는 커밋 로직(retire or commit logic) 등과 같은 다른 로직을 선택적으로 포함할 수 있다.
프로세서는 또한 구조적으로 가시적(architecturally-visible)이거나 아키텍처 레지스터들(108)의 하나 이상의 세트를 포함한다. 구조적으로 가시적인 레지스터는 피연산자(operands)를 식별하기 위해 ISA 명령어들(102)에 의해 지정되는 소프트웨어 및/또는 프로그래머 및/또는 레지스터에 가시적인 레지스터를 나타낸다. 이러한 아키텍처 레지스터들은 주어진 마이크로아키텍처 내의 비-구조적(non-architectural) 또는 구조적으로 가시적이지 않은(non-architecturally visible) 다른 레지스터(예컨대, 명령어에 의해 사용된 일시 레지스터, 재정렬 버퍼, 리타이어먼트 레지스터 등)에 대조된다. 아키텍처 레지스터들은 일반적으로 데이터를 저장하도록 동작가능한 온-다이 프로세서 저장 위치를 나타낸다. 이러한 디코딩된 명령어들은 본 명세서에서 종종 단순히 레지스터로 지칭된다. 예로서, 디코딩된 명령어들은 범용 레지스터 세트, 패킹된 데이터 레지스터 세트, 부동 소수점 레지스터 세트, 정수 레지스터 세트, 또는 이들의 일부 조합을 포함할 수 있다. 디코딩된 명령어들은 잘 알려진 기술들을 사용하여 상이한 마이크로아키텍처에서 상이한 방식으로 구현될 수 있고, 임의의 특정한 유형의 회로로 제한되지 않는다. 적합한 유형의 아키텍처 레지스터들의 예로는, 이로 제한되는 것은 아니지만, 전용 물리 레지스터, 레지스터 리네이밍을 사용하는 동적으로 할당된 물리 레지스터, 및 이들의 조합을 포함한다.
포스트-디코드 명령어 프로세서 로직(107)은 레지스터들(108)과 결합된다. 포스트-디코드 명령어 프로세서 로직은 레지스터로부터 데이터를 수신할 수 있고, 레지스터에 데이터를 기록 또는 저장할 수 있다. 예를 들어, 레지스터 판독 로직은 명령어의 소스 피연산자로서 지시된 레지스터로부터 데이터를 판독할 수 있고 및/또는 라이트 백 로직은 명령어의 데스티네이션 피연산자로서 지시된 레지스터에 결과를 기록 또는 저장할 수 있다. 포스트-디코드 명령어 프로세서 로직은 또한 메모리(110)와 결합되고, 메모리로부터 데이터를 수신할 수 있고, 메모리에 데이터를 저장할 수 있다. 예를 들어, 메모리 판독 로직은 명령어에 의해 지시된 메모리 위치로부터 데이터를 판독할 수 있고 및/또는 메모리 라이트 백 로직은 명령어에 의해 지시된 메모리 위치에 데이터를 기록할 수 있다.
도 1을 다시 참조하면, 에뮬레이트된 명령어들(104)은 또한 디코드 로직(105)에 제공될 수 있다. 에뮬레이트되지 않은 명령어들(103)과는 대조적으로, 에뮬레이트된 명령어들(104)은 디코드 로직에 의해 완전히 디코딩되어 대응하는 디코딩된 명령어들(106)로서 포스트-디코드 명령어 프로세서 로직(107)에 제공될 수 없다. 오히려, 일부 실시예에서, 에뮬레이트된 명령어(들)(104)를 에뮬레이트하기 위해 에뮬레이션 로직(115)이 제공될 수 있다. 당해 기술 분야에서, 그러한 에뮬레이션에 대해, 예를 들어, 명령어 변환, 이진 변환, 코드 모핑, 명령어 해석 등과 같은 다양한 상이한 용어가 주어진다. 본 명세서에서 에뮬레이션이라는 용어는 산업에서 사용되는 이러한 다양한 상이한 용어들을 포괄하도록 광범위하게 사용된다.
도시된 바와 같이, 일부 실시예에서, 에뮬레이션 로직(115)은 부분적으로 온-다이 에뮬레이션 로직(117)과 부분적으로 오프-다이 에뮬레이션 로직(113) 사이에서 분할될 수 있지만, 이것이 반드시 요구되는 것은 아니다. 다른 실시예에서, 에뮬레이션 로직(115)의 전부가 선택적으로 온-다이(on-die)일 수 있고 또는 다수가 선택적으로 오프-다이(off-die)일 수 있지만, 일반적으로 적어도 일부 온-다이 에뮬레이션 로직(예컨대, 에뮬레이션 모드(118), 파이프라인 내의 일부 에뮬레이션 모드 인식 명령어 프로세서 로직(120) 등)이 존재할 것이다. 온-다이 에뮬레이션 로직은 프로세서와 다이 상에(on-die) 고정, 상주, 또는 지속된다. 일반적으로, 온-다이 에뮬레이션 로직은, 프로세서가 파워오프될 때, 부팅 이전에, 및/또는 제조 완료 시에도 프로세서와 다이 상에 존재한다. 적합한 온-다이 에뮬레이션 로직의 예로는, 이로 제한되는 것은 아니지만, 하드웨어(예컨대, 집적 회로, 트랜지스터 등), 펌웨어(예컨대, 온-다이 ROM, EPROM, 플래시 메모리, 또는 다른 영구적이거나 비휘발성 메모리와 거기에 저장된 비휘발성 명령어), 또는 이들의 조합을 포함한다.
오프-다이 에뮬레이션 로직(113)은 메모리(110)에 포함될 수 있다. 오프-다이 에뮬레이션 로직은 온-다이 에뮬레이션 로직과 결합되거나 그렇지 않으면 통신할 수 있다. 일부 실시예에서, 오프-다이 에뮬레이션 로직은 메모리의 보호 영역 또는 부분(112)에 포함될 수 있다. 일부 실시예에서, 보호 부분은 프로세서에서 실행하는 소프트웨어(111)를 위해서가 아니라 프로세서의 펌웨어 로직 및/또는 온-다이 하드웨어에 의해 단독으로 사용하기 위해 예비 할당(reserve)될 수 있다. 예를 들어, 일부 실시예에서, 온-다이 에뮬레이션 로직(117), 에뮬레이션 모드 인식 명령어 프로세서 로직(120), 및/또는 잠재적으로 다른 온-다이 프로세서 로직은, 오프-다이 에뮬레이션 로직(113)에 액세스하고 사용하는 것이 가능할 수 있지만, 프로세서에서 실행하는 소프트웨어(111)(예컨대, 운영 체제나 애플리케이션)는 오프-다이 에뮬레이션 로직(113)에 액세스하거나 사용하지 못할 수 있다. 일부 실시예에서, 오프-다이 에뮬레이션 로직은, 애플리케이션, 운영 체제, 가상 기계 관리자(하나 있는 경우), 및/또는 I/O 디바이스들에 의해 및/또는 그들에 대해 비가시적인 액세스 및 수정으로부터 보호될 수 있다. 이것은 보안을 개선하는 데에 도움이 될 수 있다.
디코드 로직은 에뮬레이트된 명령어들(104)을 검출 또는 인식하는 로직(119)을 포함한다. 예를 들어, 디코더는 피연산자에 근거하여 에뮬레이트된 명령어들을 검출할 수 있다. 일부 실시예에서, 에뮬레이트된 명령어들을 검출하면, 디코더는 에뮬레이션 로직(115)에 에뮬레이션 모드 신호(116)(예컨대, 에뮬레이션 트랩 신호)를 제공할 수 있다. 도시된 바와 같이, 에뮬레이션 로직은 에뮬레이션 모드(118)를 가질 수 있다. 예로서, 에뮬레이션 모드는 프로세서(예컨대, 로직(105, 107) 등)가 에뮬레이션 모드인지 아닌지를 표시하기 위해 프로세서의 제어 또는 구성 레지스터에 하나 이상의 비트 또는 제어를 포함할 수 있다. 일부 실시예에서, 에뮬레이트된 명령어들(104)이 에뮬레이트될 것임을 나타내는 디코더로부터의 에뮬레이션 모드 신호(116)의 수신시, 에뮬레이션 모드(118)에 들어갈 수 있다.
일부 실시예에서, 디코드 로직(105)은 또한 에뮬레이트되는 명령어와 연관된 다른 정보를 에뮬레이션 로직(115)에 제공할 수 있다. 이러한 정보의 예로는 잠재적으로, 이로 제한되는 것은 아니지만, 피연산자 식별자들(예컨대, 소스 또는 데스티네이션 레지스터 어드레스 또는 메모리 위치), 메모리 어드레싱 모드, 이미디어트(immediates), 실행 속도에 대한 상수 및/또는 에뮬레이트된 명령어들(104)로부터 및/또는 그와 연관된 다른 정보를 포함한다. 예로서, 에뮬레이션 시스템이 에뮬레이트된 명령어들(104)을 에뮬레이트하는 것을 허용하기 위해 에뮬레이션 시스템에 유용한, 에뮬레이트된 명령어들로부터의 임의의 정보 및/또는 에뮬레이트된 명령어들와 연관된 임의의 정보가 잠재적으로 제공될 수 있다.
일부 실시예에서, 에뮬레이션 로직(115)은 각각의 상이한 유형의 에뮬레이트된 명령어들(104)을 에뮬레이트하기 위해 상이한 세트의 하나 이상의 명령어(114)를 포함할 수 있다. 예를 들어, 제1 세트의 하나 이상의 명령어(114)는 제1 피연산자를 갖는 제1 명령어(104)를 에뮬레이트하기 위해 제공될 수 있고, 상이한 제2 세트의 하나 이상의 명령어(114)는 상이한 제2 피연산자를 갖는 상이한 제2 명령어(104)를 에뮬레이트하기 위해 제공될 수 있다. 일부 실시예에서, 각각의 세트는 적어도 세 개의 명령어를 포함할 수 있다. 도시된 실시예에서, 하나 이상의 명령어의 세트(114)는 오프-다이 에뮬레이션 로직(113)에 포함되지만, 이것이 필수적인 것은 아니다. 다른 실시예에서, 명령어(114)는 다이 상에(예컨대, 온-다이 에뮬레이션 로직(117)의 영구적인 또는 비휘발성 메모리 내에) 제공될 수 있다. 또 다른 실시예에서, 명령어(114)의 일부는 다이 상에(예컨대, 온-다이 에뮬레이션 로직 내에) 제공될 수 있고, 일부는 다이 밖에(예컨대, 오프-다이 에뮬레이션 로직 내에) 제공될 수 있다.
일부 실시예에서, 에뮬레이트된 명령어들(104)을 에뮬레이트하는데 사용된 하나 이상의 명령어(114)의 세트의 명령어 각각은 에뮬레이션 로직(115)으로부터 페치되거나 그렇지 않으면 그로부터 검색되어, 디코드 로직(105)에 제공될 수 있다. 일부 실시예에서, 에뮬레이트된 명령어들(104)을 에뮬레이트하는 데 사용되는 하나 이상의 명령어(114)의 세트의 명령어 각각은 에뮬레이트된 명령어들(104)과 동일한 명령어 세트일 수 있다. 디코드 로직(105)은 하나 이상의 명령어(114)의 세트의 각각의 명령어를 대응하는 디코딩된 명령어들(106)로 디코딩하기 위해 동작가능할 수 있다. 디코딩된 명령어들은 포스트-디코드 명령어 프로세서 로직(107)에 제공될 수 있다.
포스트-디코드 명령어 프로세서 로직은 에뮬레이션 모드 인식 명령어 프로세서 로직(120)의 일 실시예를 포함한다. 도시된 바와 같이, 에뮬레이션 모드 인식 명령어 프로세서 로직은 에뮬레이션 모드(118)와 결합되거나 그렇지 않으면 그를 인식할 수 있다. 일부 실시예에서, 에뮬레이션 모드 인식 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우와는 상이하게 프로세서가 명령어(114)의 디코딩된 버전의 적어도 일부를 적어도 일부 방식으로 처리하도록 동작가능할 수 있다. 처리가 상이할 수 있는 다양한 상이한 방식들이 존재한다. 일부 실시예에서, 고장 또는 오류 핸들링은, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우에 비교될 때 상이하게 수행될 수 있다. 다른 실시예에서, 예를 들어, 보안, 특권, 또는 그렇지 않으면 액세스 제어된 리소스 및/또는 정보와 같은 소정의 유형의 리소스 및/또는 정보로의 액세스는, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우와는 상이하게 핸들링될 수 있다. 예를 들어, 리소스 및/또는 정보로의 액세스는 에뮬레이션 모드에 있을 때 허용되지만 에뮬레이션 모드에 있지 않을 때는 허용되지 않을 수 있다.
에뮬레이션 모드에 있을 때, 포스트-디코드 명령어 프로세서 로직은 저장 위치(121)에 액세스할 수 있다. 도시된 실시예에서, 저장 위치(121)는 온-다이 에뮬레이션 로직(117)의 일부이다. 대안적으로, 저장 위치는 오프-다이 에뮬레이션 로직에, 또는 부분적으로는 온-다이 에뮬레이션 로직에 그리고 부분적으로 오프-다이 에뮬레이션 로직에 포함될 수 있다. 저장 위치는 명령어(114)의 세트의 실행과 연관된 임시 변수, 중간 결과, 및/또는 실행 상태를 저장하는 데 사용될 수 있다. 이는, 에뮬레이트된 명령어들(104)을 갖는 오리지널 프로그램의 실행 상태를 세이브할 필요성을 피하는데 도움이 되고 및/또는 그러한 실행 상태(예컨대, 아키텍처 레지스터들(108)의 콘텐츠)가 명령어들(114)의 세트의 처리에 의해 손상되는 것을 방지하는데 도움이 될 수 있다. 일부 실시예에서, 저장 위치(121)는 디코딩된 명령어들을 에뮬레이트할 수 있지만, 이것이 필수적인 것은 아니다. 일부 실시예에서, 저장 위치(121)의 콘텐츠는 애플리케이션, 운영 체제, 가상 기계 관리자, I/O 디바이스, 인터럽트 등에 의한 액세스로부터 보호될 수 있고 및/또는 그로부터 분리될 수 있고 및/또는 그에 독립적일 수 있다. 명령어(114)의 세트가 완료되면, 프로세서의 아키텍처 상태는 업데이트될 수 있다(예컨대, 결과는 저장 위치(121)로부터 레지스터들(108)로 저장될 수 있다). 이는 낮은 대기 시간 액세스로 수행될 수 있다. 일반적으로, 이는, 에뮬레이트된 명령어들(104)이 실제로 직접 실행되는 경우에 일어난 프로세서의 동작 및/또는 발생한 아키텍처 상태에 있어서의 변화를 근사화하거나, 모방하거나, 유사하게 하거나 그렇지 않으면 에뮬레이트하는데 사용될 수 있다.
설명이 모호해 지는 것을 피하기 위해, 비교적 단순한 프로세서(101)가 도시되고 설명된다. 다른 실시예에서, 프로세서는 다른 잘 알려진 컴포넌트를 선택적으로 포함할 수 있다. 프로세서 내의 컴포넌트들의 그야말로 다수의 상이한 조합 및 구성이 존재하고, 실시예들은 임의의 특정한 조합 또는 구성으로 제한되지 않는다. 프로세서는 집적 회로 또는 하나 이상의 반도체 다이나 칩의 세트(예컨대, 단일 다이나 칩, 또는 둘 이상의 다이나 칩을 포함하는 패키지)를 나타낼 수 있다. 일부 실시예에서, 프로세서는 SoC(system-on-chip ) 및/또는 CMP(chip multi-processor)를 나타낼 수 있다.
일부 프로세서는 비교적 복잡한 연산들을 사용한다. 예를 들어, 단지 단일 메모리 액세스 대신, 일부 명령어는 다수의 메모리 액세스를 수행한다. 예로는, 메모리로부터 데이터 요소들의 벡터를 수집하는 벡터 수집 명령어(vector gather instruction)가 있다. 또 다른 예로서, 데이터 요소들의 단일 쌍, 또는 두 개의 패킹된 데이터 내의 대응하는 데이터 요소들의 쌍들을 비교하는 대신, 소정의 명령어는 많은 데이터 요소 비교를 수행할 수 있다. 예로는 벡터 충돌 명령어 및 문자열 처리 명령어가 있다. 하나의 접근법은 그러한 복잡한 연산들을 하드웨어로 완전히 구현하는 것이다. 그러나, 종종 필요한 하드웨어의 양이 상당한 경향이 있을 수 있어, 이는 제조 비용, 다이 크기, 및 전력 소비를 증가시키는 경향이 있을 수 있다. 또 다른 접근법은 그러한 복잡한 연산들을 적어도 부분적으로 마이크로코드로 구현하는 것이다. 마이크로코드의 사용은 그러한 복잡한 연산을 구현하는데 필요한 하드웨어의 양을 줄이는데 도움이 될 수 있고 및/또는 소정의 기존 하드웨어가 재사용되는 것을 허용하는데 도움이 될 수 있다. 그러나, 일부 프로세서는 마이크로코드를 사용하지 않는다(예컨대, 명령어 세트의 임의의 명령어를 구현하는 데 마이크로코드를 사용하지 않음).
일부 실시예에서, 비교적 더 복잡한 명령어는 하나 이상의 비교적 더 단순한 명령어들의 세트로 에뮬레이트될 수 있다. 더 복잡한 및 더 단순한 이라는 용어는 서로에 대해 상대적인 용어로서 절대적인 용어가 아니다. 바람직하게, 이는 잠재적으로, 더 복잡한 명령어를 구현하는데 필요한 하드웨어의 양을 줄이는데 도움이 될 수 있고 및/또는 더 복잡한 명령어를 에뮬레이트하는데 사용된 하나 이상의 명령어에 의해 사용되는 기존 하드웨어의 재사용을 허용하는데 도움이 될 수 있다. 비록, 프로세서는, 일부 실시예에서, 마이크로코드를 사용하도록 구성되지 않을 수 있고 및/또는 더 복잡한 명령어를 구현하기 위해 마이크로코드를 사용하도록 구성되지 않을 수도 있지만, 일부 실시예에서, 하나 이상의 더 단순한 명령어에 의한 더 복잡한 명령어의 에뮬레이션이 사용되어 더 복잡한 명령어의 마이크로코드형 구현(microcode-like implementation)을 제공할 수 있다.
도 2는 프로세서에서 명령어를 에뮬레이트하는 방법(230)의 일 실시예의 블록 흐름도이다. 일부 실시예에서, 도 2의 연산 및/또는 방법은 도 1의 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 도 1의 프로세서에 대해 본 명세서에서 설명된 컴포넌트, 특징, 및 특정한 선택적 세부 사항은 또한 도 2의 연산 및/또는 방법에도 선택적으로 적용된다. 대안적으로, 도 2의 연산 및/또는 방법은 유사하거나 또는 완전히 상이한 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 또한, 도 1의 프로세서는 도 2와 유사하거나 상이한 연산 및/또는 방법을 수행할 수 있다.
블록 231에서, 이 방법은 제1 명령어를 수신하는 단계를 포함한다. 일부 실시예에서, 제1 명령어는 디코더에서 수신될 수 있다. 블록 232에서, 이 방법은 제1 명령어를 에뮬레이트할지를 결정하는 단계를 포함한다. 일부 실시예에서, 디코더는, 제1 명령어의 연산코드가 에뮬레이트될 명령어에 대한 하나 이상의 연산 코드의 세트 중에 있다는 결정에 의해 제1 명령어를 에뮬레이트하도록 결정할 수 있다. 블록 233에서, 방법은 제1 명령어를 에뮬레이트하는데 사용될 하나 이상의 명령어의 세트를 수신하는 단계를 포함한다. 일부 실시예에서, 명령어(들)의 세트는 온-다이 에뮬레이션 로직, 또는 오프-다이 에뮬레이션 로직, 또는 이들의 조합으로부터 디코더에서 수신될 수 있다. 일부 실시예에서, 그 세트의 명령어(들) 각각은 제1 명령어와 동일한 명령어 세트의 것일 수 있다. 블록 234에서, 이 방법은, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우와는 상이하게 세트의 명령어로부터 도출된 하나 이상의 제어 신호들을 처리하는 단계를 포함한다.
이는 상이한 실시예에서 상이한 방식으로 수행될 수 있다. 일부 실시예에서, 세트의 명령어의 처리 동안 접하는 예외 조건은 상이하게 핸들링될 수 있다. 일부 실시예에서, 세트의 명령어의 처리는 에뮬레이션 모드 내에서 수행되지 않을 때 동일한 명령어(즉, 동일한 연산 코드를 갖는 명령어)에 사용할 수 없는 리소스들 및/또는 정보로의 액세스를 허용할 수 있다.
도 3은 하나 이상의 명령어들(예컨대, 더 단순한 명령어)(314)의 세트로 명령어(예컨대, 복잡한 명령어)(304)를 에뮬레이트하는 로직(301)의 일 실시예를 도시하는 블록도이다. 일부 실시예에서, 도 3의 로직은 도 1의 프로세서 및/또는 컴퓨터 시스템에 포함될 수 있다. 대안적으로, 도 3의 로직은 유사하거나 상이한 프로세서 또는 컴퓨터 시스템에 포함될 수 있다. 또한, 도 1의 프로세서 및/또는 컴퓨터 시스템은 도 3과 유사하거나 상이한 로직을 포함할 수 있다.
에뮬레이트될 명령어(예컨대, 복잡한 명령어)(304)가 디코드 로직(305)에 제공될 수 있다. 디코드 로직은 명령어(304)를 검출하는, 예를 들어, 명령어(304)의 연산 코드가 에뮬레이트될 명령어의 연산 코드의 세트 중에 있다는 것을 검출하는 로직(319)을 포함할 수 있다. 도시되 바와 같이, 일부 실시예에서, 프로세서는 마이크로코드(330)를 갖지 않을 수도 있다. 디코드 로직은 로직(315)을 에뮬레이션하는 에뮬레이션 모드 신호(316)를 제공할 수 있다. 다양한 실시예에서, 에뮬레이션 로직(315)은 온-다이 로직, 오프-다이 로직, 또는 온-다이 및 오프-다이 로직 둘 다를 포함할 수 있다. 에뮬레이션 로직은 에뮬레이션 모드 신호에 응답하여 에뮬레이션 모드(318)에 들어갈 수 있다.
에뮬레이션 로직은 또한 (예컨대, 더 복잡한) 명령어(304)를 에뮬레이트하는데 사용될 수 있는 하나 이상의 더 단순한 (예컨대, 단순한) 명령어(314)의 세트를 포함한다. 일부 실시예에서, 하나 이상의 명령어(314)는 명령어(304)와 동일한 명령어 세트의 것일 수 있다. 일부 실시예에서, 하나 이상의 명령어(314)는 에뮬레이션 모드에 있지 않을 경우에 디코딩 및 실행된 다른 명령어와 동일할 수 있다. (예컨대, 복잡한) 명령어(304)를 에뮬레이트하기 위해, 하나 이상의 (예컨대, 단순한) 명령어(314) 각각이 디코드 로직에 제공될 수 있다. 디코드 로직은 명령어(314) 각각을 하나 이상의 디코딩된 명령어들(306)로서 디코딩할 수 있다.
포스트-디코딩 명령어 프로세서 로직(307)은 명령어(314)에 대응하는 디코딩된 명령어들(306)을 수신할 수 있다. 포스트-디코드 명령어 프로세서 로직은 에뮬레이션 모드 인식 로직(320)의 일 실시예를 포함할 수 있다. 도시된 바와 같이, 일부 실시예에서, 에뮬레이션 모드 인식 로직은 에뮬레이션 모드(318)와 결합될 수 있거나, 그렇지 않으면 그를 인식할 수 있다. 일부 실시예에서, 에뮬레이션 모드 인식 로직은, 프로세서가 에뮬레이션 모드(318)에 있을 경우에는, 프로세서가 에뮬레이션 모드에 있지 않을 경우와는 상이하게 명령어(314)에 대응하는 디코딩된 명령어들(306)을 처리하도록 동작가능할 수 있다. 일부 실시예에서, 고장 또는 에러 핸들링은, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우에 비교될 때 상이하게 수행될 수 있다. 예를 들어, 로직(320)은 도 4에 대해 아래 논의된 선택적인 양태들을 사용할 수 있다. 다른 실시예들에서, 소정의 리소스 및/또는 정보에 대한 액세스는 에뮬레이션 모드에 있을 경우에는 선택적으로 제공될 수 있지만, 프로세서가 에뮬레이션 모드에 있지 않을 경우에는 그렇지 않다. 예를 들어, 로직(320)은 도 5에 대해 아래 논의된 선택적인 양태들을 사용할 수 있다.
바람직하게, 일부 실시예에서, 더 복잡한 명령어는 단순한 명령어/동작의 세트에 의해 구현될 수 있다. 바람직하게, 이는 잠재적으로, 더 복잡한 명령어를 구현하는데 필요한 하드웨어의 양을 줄이는데 도움이 될 수 있고 및/또는 더 복잡한 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들에 의해 사용되는 기존 하드웨어의 재사용을 허용하는데 도움이 될 수 있다. 비로, 프로세서는, 일부 실시예에서, 마이크로코드를 사용하도록 구성되지 않을 수도 있고 및/또는 더 복잡한 명령어를 구현하기 위해 마이크로코드를 사용하도록 구성되지 않을 수도 있지만, 일부 실시예에서, 하나 이상의 단순한 명령어에 의한 더 복잡한 명령어의 에뮬레이션은 더 복잡한 명령어의 마이크로코드형 구현을 제공하기 위해 사용될 수 있다. 일부 실시예에서, 단순한 명령어/연산은 심지어 더 복잡한 명령어와 동일한 명령 세트의 것일 일 수 있다.
단순한 명령어에 의한 더 복잡한 명령어의 이러한 에뮬레이션은 명령어를 에뮬레이트하는 가능한 이유에 대한 단지 하나의 예이다. 다른 실시예에서, 에뮬레이트된 명령어들은 비교적 덜 빈번하게 사용되는 (예컨대, 드물게) 것일 수 있고, 비교적 더 빈번하게 사용되는 하나 이상의 명령어로 에뮬레이트될 수 있다. 바람직하게, 이것은 잠재적으로, 드물게 사용되는 명령어를 구현하는데 필요한 하드웨어의 양을 줄이는데 도움이 될 수 있고 및/또는 드물게 사용되는 명령어를 에뮬레이트하는데 사용된 하나 이상의 명령어에 의해 사용되는 기존 하드웨어의 재사용을 허용하는데 도움이 될 수 있다. 또 다른 실시예에서, 에뮬레이트된 명령어들은 오래된(older) 및/또는 구식인(outdated) 명령어일 수 있고 및/또는 더 이상 사용되지 않을(deprecated) 프로세스에 있는 것일 수 있고, 및 하나 이상의 다른 명령어로 에뮬레이트될 수 있다. 바람직하게, 에뮬레이션은 더 이상 사용되지 않을 명령어가 여전히 실행되는 것을 허용하여, 이로써, 소프트웨어에 대한 하위 호환성을 제공하는 것을 도울 수 있는 한편, 동시에 잠재적으로, 더 이상 사용되지 않을 명령어를 구현하는데 필요한 하드웨어의 양을 줄이는데 도움이 되고 및/또는 더 이상 사용하지 않을 명령어를 에뮬레이트하는데 사용된 하나 이상의 명령어에 의해 사용되는 기존 하드웨어의 재사용을 허용하는데 도움이 된다. 본 명세서에 개시된 에뮬레이션의 또 다른 사용은 당업자에게 명백할 것이고, 본 개시의 이득을 가질 것이다.
도 4는, 에뮬레이션 모드에 있을 경우에는, 에뮬레이션 모드에 있지 않을 경우에 비교해 볼 때, 프로세서가 상이하게 예외 조건을 핸들링하는 것을 허용하는 로직(401)의 일 실시예를 도시하는 블록도이다. 일부 실시예에서, 도 4의 로직은 프로세서 및/또는 도 1의 컴퓨터 시스템 및/또는 도 3의 로직에 포함될 수 있다. 대안적으로, 도 4의 로직은 유사하거나 상이한 프로세서 또는 컴퓨터 시스템에 포함될 수 있다. 또한, 도 1의 프로세서 및/또는 컴퓨터 시스템 및/또는 도 3의 로직은 도 4와 유사하거나 상이한 로직을 포함할 수 있다.
프로세서가 에뮬레이션 모드(418)에 있지 않을 때, 주어진 명령어(예를 들어, 주어진 연산 코드를 갖는 명령어)의 제1 인스턴스(403-1)가 디코드 로직(405)에 제공된다. 프로세서가 에뮬레이션 모드(418)에 있을 때, 동일한 주어진 명령어(예를 들어, 동일한 주어진 연산 코드를 갖는 다른 명령어)의 제2 인스턴스(403-2)가 디코드 로직에 제공된다. 주어진 명령어의 제2 인스턴스(403-2)는 디코더가 에뮬레이트된 명령어들을 수신하는 것에 응답하여 에뮬레이트된 명령어들을 에뮬레이트하는 데 사용되는 하나 이상의 명령어들(414)의 세트로부터 제공될 수 있다. 명령어들의 세트는 다이 상에, 다이 밖에 또는 일부는 다이 상에 그리고 일부는 다이 밖에 있을 수 있는 에뮬레이션 로직(415) 내에 포함될 수 있다. 에뮬레이션 로직(515)은 에뮬레이션 로직에 대해 본 명세서의 다른 곳에서 설명되는 임의의 옵션인 특성을 가질 수 있다. 디코드 로직은 주어진 명령어의 제1 인스턴스(403-1) 및 제2 인스턴스(403-2) 각각에 대한 하나 이상의 디코딩된 명령어들의 (예를 들어, 동일 세트)를 제공할 수 있다.
포스트-디코드 명령어 프로세서 로직(407)은 디코딩된 명령어(들)(406)를 수신할 수 있다. 포스트-디코드 명령어 프로세서 로직은 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)을 포함한다. 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 예외 조건들을 에뮬레이션 모드 인식 방식으로 핸들링/처리하도록 동작할 수 있다. 본 명세서에서 사용될 때, 용어 "예외 조건"은 명령어들을 처리하는 동안 발생할 수 있는 다양한 상이한 타입의 예외 조건들을 광범위하게 지칭한다. 그러한 예외 조건들의 예들은 예외, 인터럽트, 장애, 트랩 등을 포함하지만 이에 한정되지 않는다. 예외, 인터럽트, 장애 및 트랩이라는 용어들은 종종 기술들에서 상이한 방식들로 사용된다. 용어 "예외"는 아마도 더 일반적으로는 특권 위반, 특권 예외, 페이지 장애, 메모리 보호 장애, 0으로 나누기, 불법 연산 코드의 실행 시도 및 다른 그러한 예외 조건들에 응답하는 핸들러 루틴으로의 자동 생성된 제어 전달을 지칭하는 데 사용된다.
일부 실시예들에서, 프로세서가 에뮬레이션 모드(418)에서 동작하고 있지 않을 때, 주어진 명령어의 제1 인스턴스(403-1)가 처리되고 있을 때, 특권 위반, 특권 예외, 페이지 장애, 메모리 보호 장애, 0으로 나누기, 불법 연산 코드의 실행 시도 또는 다른 예외 조건이 발생하는 경우, 프로세서는 예외 조건의 실질적으로 전통적인 핸들링을 수행할 수 있다. 예를 들어, 일부 실시예들에서는, 예외 조건이 직접 취해질 수 있어서(440), 제어가 예외 조건 핸들러 루틴(441)으로 전달된다. 일반적으로, 예외 조건 핸들러 루틴은 운영 체제, 가상 기계 모니터 또는 다른 특권 소프트웨어의 일부일 수 있다. 그러한 핸들러 루틴들의 예들은 페이지 장애 핸들러, 에러 핸들러, 인터럽트 핸들러 등을 포함하지만 이에 한정되지 않는다.
이와 달리, 프로세서가 에뮬레이션 모드(418)에서 동작하고 있을 때, 주어진 명령어의 제2 인스턴스(403-2)가 처리되고 있을 때, 특권 위반, 특권 예외, 페이지 장애, 메모리 보호 장애, 0으로 나누기, 불법 연산 코드의 실행 시도 또는 다른 예외 조건이 발생하는 경우, 프로세서는 예외 조건의 실질적으로 비전통적인 핸들링을 수행할 수 있다. 예를 들어, 일부 실시예들에서는, 예외 조건이 직접 취해지지 않을 수 있다. 일부 실시예들에서, 로직(420)은 예외 조건으로부터 발생하는 예외 조건 핸들러 루틴으로의 자동 제어 전달을 억제하기 위한 메커니즘을 포함할 수 있다. 제어가 에뮬레이션 프로그램으로부터 예외 조건 핸들러 루틴(441)으로 직접 전달되지 않을 수 있다. 오히려, 일부 실시예들에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)은 예외 조건 핸들러(441)로의 제어 전달을 일시적으로 억제하고, 예외 조건을 간접적으로 보고할 수 있다(442). 일부 실시예들에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)은 하나 이상의 에뮬레이션 통신 레지스터(들)(443)를 통해 예외 조건을 간접 보고할 수 있다. 하나 이상의 통신 레지스터들은 에뮬레이션 로직과 오리지널 명령어를 에뮬레이트하고 있는 프로그램 사이에서 정보를 통신하는 데 사용될 수 있다.
일부 실시예들에서, 에뮬레이션 모드(418)에 있을 때 예외 조건이 발생하는 것에 응답하여, 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)은 예외 조건의 지시를 예외 조건 또는 에러 상태 플래그(들), 필드 또는 레지스터(444)에 저장할 수 있다. 예를 들어, 단일 비트 또는 플래그가 예외 조건이 발생하였다는 것을 지시하기 위해 제1 값을 가질 수 있거나(예를 들어, 이진수 1로 설정될 수 있거나), 예외 조건이 발생하지 않았다는 것을 지시하기 위해 제2 값을 가질 수 있다(예를 들어, 이진수 0으로 소거될 수 있다). 일부 실시예들에서, 에뮬레이션 모드(418)에 있을 때 예외 조건이 발생하는 것에 응답하여, 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)은 예외 조건에 대한 에러 코드를 에러 코드 필드 또는 레지스터(445)에 저장할 수 있다. 에러 코드는 에러에 대한 추가적인 정보, 예를 들어 에러의 타입 및 옵션으로서 예외 조건의 특징의 통신을 돕기 위한 추가적인 상세들을 제공할 수 있다. 대안으로서, 통신 레지스터들을 사용하는 대신에, 정보는 다른 방식으로 시그널링 또는 제공될 수 있다(예를 들어, 메모리에 저장되거나, 전기 신호를 통해 보고되거나, 기타 등등일 수 있다).
일부 실시예들에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직(420)은 에뮬레이트되는 명령어(즉, 제2 인스턴스(403-2)가 디코드 로직(405)으로 전송되게 한 명령어)의 주소(예를 들어, 명령어 포인터)의 지시도 제공할 수 있다. 예를 들어, 일부 실시예들에서, 에뮬레이트되는 명령어의 주소(446)는 스택(447)의 정상에 저장될 수 있다. 주어진 명령어를 에뮬레이트하는 데 사용되고 있는 명령어들 중 하나 대신에 에뮬레이트되고 있는 그 주어진 명령어의 주소를 스택에 저장하는 것은 예외 핸들러로부터의 복귀가 에뮬레이트되는 명령어를 에뮬레이트하는 데 사용되고 있는 명령어들 중 하나 대신에 에뮬레이트되는 명령어로 복귀하게 할 수 있다. 대신에, 예외 핸들러로부터의 복귀가 그 명령어를 에뮬레이트하는 데 사용되고 있는 명령어들 중 하나에 대한 것인 경우, 이것은 잠재적으로 문제를 유발할 수 있다. 예를 들어, 소프트웨어(예로서, 애플리케이션, 운영 체제 등)는 그 주어진 명령어를 에뮬레이트하는 데 사용되고 있는 명령어들을 알지 못할 수 있으며, 관련 주소를 인식하지 못할 수 있다. 운영 체제는 제어 흐름이 알려지지 않은, 불법적인, 위험한 또는 허가되지 않은 위치로 전달되고 있음을 인식할 수 있고, 잠재적으로 전달을 방지하려고 시도할 수 있다.
일부 실시예들에서, 명령어들(414)의 세트는 에러 상태(444) 및/또는 에러 코드(445)를 모니터링할 수 있다. 예를 들어, 일부 실시예들에서, 명령어들(414)은 에뮬레이션 통신 레지스터들(443)로부터 에러 상태(444) 및 에러 코드(445)를 판독하여, 예외 조건을 알고 예외 조건을 학습할 수 있다. 일부 실시예들에서, 에러 상태(444)가 예외 조건을 지시할 때, 명령어들(414)의 세트는 예외 조건을 취할 수 있다(449). 예를 들어, 명령어들(414) 중 하나 이상을 실행하여, 에러 상태를 검사하고, 에러가 지시되는 경우에 제어를 예외 조건 핸들러로 전달할 수 있다. 일부 실시예들에서, 이것은 명령어들(414)의 세트가 제어를 예외 조건 핸들러(441)로 전달하는 것을 포함할 수 있다. 일부 실시예들에서, 예외 조건에 대한 정보(예로서, 에러 코드(445))가 예외 조건 핸들러(441)에 제공될 수 있다. 일부 실시예들에서, 에뮬레이트된 명령어 주소(446)가 또한 예외 조건 핸들러(441)에 제공될 수 있고/있거나, 적어도 스택의 정상에 유지될 수 있다. 에뮬레이트된 명령어 주소(446)는 예외 조건 핸들러(441)에 의해 예외 조건의 핸들링으로부터의 복귀시에 사용될 수 있다. 유리하게도, 에뮬레이트되는 명령어의 주소를 스택에 저장함으로써, 운영 체제 또는 다른 에러 핸들러 루틴은 그 명령어가 에러를 유발한 에뮬레이트된 명령어들인 것으로 간주할 수 있다.
일부 실시예들에서, 에뮬레이션 로직은 명령어에서의 메모리 액세스가 올바르게 작동할지를 또는 발생할 수 있는 예외 조건의 타입을 테스트 및 보고하기 위한 로직을 포함할 수 있다. 예를 들어, 에뮬레이트된 액세스 권리를 이용하여 메모리 주소를 테스트하여 메모리 주소가 유효한지(예로서, 페이지가 존재하는지) 그리고 프로그램이 그 메모리 위치를 판독 및/또는 변경하기에 충분한 액세스 권리를 갖는지를 파악하기 위한 특수 명령어가 포함될 수 있다. 임의의 테스트들이 실패하는 경우, 에뮬레이션 로직은 에뮬레이트되는 명령어가 제어를 예외 핸들러로 직접 전달한 것처럼 제어를 반환 주소를 갖는 적당한 인터럽트 핸들러로 전달할 수 있다. 다른 예로서, 상태 기계가 메모리 동작이 유효한지를 지시하는 조건부 메모리 트랜잭션을 수행할 수 있다. 이것은 예외가 발생하지 않을 것으로 가정하여 메모리 동작이 언제 수행될 수 있는지를 결정하는 데 사용될 수 있다. 이것은 또한 명령어 스트림 또는 명령어 정보의 스트링의 얼마나 많은 바이트가 예외 없이 안전하게 판독될 수 있는지를 결정하는 데 사용될 수 있다. 예를 들어, 이것은 명령어 길이가 판독될 수 있는지의 여부 또는 명령어 길이의 일부가 페이지 장애를 유발할지를 테스트 및 결정하는 데 사용될 수 있다. 에뮬레이션 로직은 다수의 페이지에 걸치는 명령어들을 처리하고/하거나 페이지가 메모리 내에 있지 않을 때 이를 처리하기 위한 로직을 포함할 수 있다.
일부 실시예들에서, 에뮬레이션 로직은 에뮬레이션의 실행이 중지되고 나중에 중간 포인트에서 재개될 수 있도록 중간 실행 인터럽트 상태를 제공하기 위한 로직을 포함할 수 있다. 이것은 긴 지속 기간들 또는 실행 시간들을 포함하는 명령어들을 에뮬레이트할 때 특히 유리할 수 있다. 일부 실시예들에서, 소정 타입의 명령어들(예를 들어, 스트링 이동 명령어들, 수집 명령어들 및 긴 동작들을 갖는 다른 명령어들)을 에뮬레이트하는 데 사용되는 명령어들의 세트는 현재 진행 레벨을 반영하기 위해 명령어를 에뮬레이트하고 있는 소프트웨어의 실행 상태를 갱신할 수 있다. 예를 들어, 동작이 중간 포인트에서 인터럽트될 수 있고, 에뮬레이션에 사용되는 명령어들의 세트는 예외 조건 핸들러에 의해 저장된 기계 상태 내에(예를 들어, 프로세서 상태 레지스터 내에) 플래그 또는 상태 비트를 설정할 수 있으며, 따라서 복귀시에 에뮬레이션 코드는 플래그 또는 상태 비트를 테스트하여 중간 상태로부터 실행을 재개하는 것으로 결정할 수 있다. 플래그 또는 상태 비트는 인터럽트된 실행을 지시할 수 있다. 이와 같이, 예외 조건이 핸들링된 후에, 예외 조건 핸들러로부터 복귀할 때, 프로그램은 그가 중단했던 중간 진행 레벨에서 실행을 재개할 수 있다. 일부 예들에서, 명령어(예를 들어, 스트링 이동 명령어)는 중간 동작 상태를 반영하기 위해 레지스터들을 변경할 수 있으며, 따라서 인터럽트 후에 중간 상태로부터 실행이 재개될 수 있다.
도 5는 프로세서가 에뮬레이션 모드에 있을 때와 에뮬레이션 모드에 있지 않을 때 서로 다르게 자원(들) 및/또는 정보에 액세스하는 것을 가능하게 하기 위한 로직(501)의 일 실시예를 나타내는 블록도이다. 일부 실시예들에서, 도 5의 로직은 도 1의 프로세서 및/또는 컴퓨터 시스템 및/또는 도 3의 로직 내에 포함될 수 있다. 대안으로서, 도 5의 로직은 유사하거나 상이한 프로세서 또는 컴퓨터 시스템 내에 포함될 수 있다. 더욱이, 도 1의 프로세서 및/또는 컴퓨터 시스템 및/또는 도 3의 로직은 도 5의 로직과 유사하거나 상이한 로직을 포함할 수 있다.
프로세서가 에뮬레이션 모드(518)에 있지 않을 때, 주어진 명령어(예를 들어, 주어진 연산 코드를 갖는 명령어)의 제1 인스턴스(503-1)가 디코드 로직(505)에 제공된다. 프로세서가 에뮬레이션 모드(518)에 있을 때, 동일한 주어진 명령어(예를 들어, 동일한 주어진 연산 코드를 갖는 다른 명령어)의 제2 인스턴스(503-2)가 디코드 로직에 제공된다. 주어진 명령어의 제2 인스턴스(503-2)는 디코더가 에뮬레이트된 명령어들을 수신하는 것에 응답하여 에뮬레이트된 명령어들을 에뮬레이트하는 데 사용되는 하나 이상의 명령어들(514)의 세트로부터 제공될 수 있다. 명령어들의 세트는 다이 상에, 다이 밖에 또는 일부는 다이 상에 그리고 일부는 다이 밖에 있을 수 있는 에뮬레이션 로직(515) 내에 포함될 수 있다. 에뮬레이션 로직(515)은 에뮬레이션 로직에 대해 본 명세서의 다른 곳에서 설명되는 임의의 옵션인 특성을 가질 수 있다.
포스트-디코드 명령어 프로세서 로직(507)은 제2 인스턴스(503-2)에 대응하는 디코딩된 명령어(들)(506)를 수신할 수 있다. 포스트-디코드 명령어 프로세서 로직은 에뮬레이션 모드 인식 액세스 제어 로직(520)을 포함한다. 에뮬레이션 모드 인식 액세스 제어 로직은 하나 이상의 자원들 및/또는 정보(550)에 대한 액세스를 에뮬레이션 모드 인식 방식으로 제어하도록 동작할 수 있다. 일부 실시예들에서, 프로세서가 에뮬레이션 모드에서 동작하지 않을 때, 포스트-디코드 명령어 프로세서 로직(507)은 자원(들) 및/또는 정보(550)에 대한 실질적으로 전통적인 액세스를 이용하여 주어진 명령어의 제1 인스턴스(503-1)를 처리할 수 있다. 도시된 바와 같이, 일부 실시예들에서는, 에뮬레이션 모드에 있지 않을 때 주어진 명령어의 제1 인스턴스(503-1)를 처리할 때 자원(들) 및/또는 정보(550)에 대한 액세스가 방지될 수 있다(551). 에뮬레이션 모드에 있지 않을 때 자원(들) 및/또는 정보에 대한 액세스를 방지하는 것은, 예를 들어 정보 및/또는 자원(들)의 안전을 보호하는 것과 같은 임의의 다양한 가능한 이유로 적절할 수 있는데, 그 이유는 주어진 명령어가 일반적으로 그러한 자원(들) 및/또는 정보에 액세스할 필요가 없고, 당신들은 단지 필요에 따라 또는 다른 이유들로 자원(들) 및/또는 정보를 제공하기를 원하기 때문이다.
이와 달리, 일부 실시예들에서, 에뮬레이션 모드(518)에서 동작할 때, 주어진 명령어의 제2 인스턴스(503-2)가 처리되고 있을 때, 포스트-디코드 명령어 프로세서 로직은 (예를 들어, 비에뮬레이션 모드에 있을 때와 다른 방식으로) 자원(들) 및/또는 정보(550)에 대한 실질적으로 비전통적인 액세스를 사용할 수 있다. 예를 들어, 도시된 실시예에 도시된 바와 같이, 에뮬레이션 모드(518)에 있을 때 주어진 명령어의 제2 인스턴스(503-2)를 처리할 때 자원(들) 및/또는 정보(550)에 대한 액세스가 허가될 수 있다(552). 예를 들어, 에뮬레이션 모드(518)는 로직(507) 및/또는 로직(520)으로 하여금 에뮬레이션 모드에 있을 때 그 주어진 명령어에 대한 정보 및/또는 자원(들)에 선택적으로 액세스하는 것을 허가하는 특수 하드웨어 상태를 갖게 할 수 있다. 예를 들어, 에뮬레이션 모드에 있을 때 상태 기계가 정보에 선택적으로 액세스하는 것을 가능하게 하기 위해 하나 이상의 액세스 특권 비트들이 제공 및 구성될 수 있다.
다양한 상이한 타입의 정보 및/또는 자원(들)(550)이 고려된다. 적절한 자원(들) 및/또는 정보의 예들은 보안 관련 자원(들) 및/또는 정보(예로서, 보안 로직), 암호화 및/또는 해독 관련 자원(들) 및/또는 정보(예로서, 암호화 로직 및/또는 해독 로직), 난수 생성기 자원(들) 및/또는 정보(예를 들어, 난수 생성기 로직), 운영 체제 및/또는 가상 기계 모니터에 대응하는 특권 또는 링 레벨들을 위해 예약된 자원(들) 및/또는 정보 등을 포함하지만 이에 한정되지 않는다.
적절한 자원(들) 및/또는 정보의 다른 예는 포스트-디코드 명령어 프로세서 로직(507)을 갖는 물리 프로세서 또는 논리 프로세서와 다른 물리 프로세서 또는 논리 프로세서(예로서, 코어, 하드웨어 스레드, 스레드 컨텍스트 등) 내의 자원(들) 및/또는 정보를 포함하지만 이에 한정되지 않는다. 상이한 물리 또는 논리 프로세서들은 동일 또는 상이한 소켓들 내에 위치할 수 있다. 예를 들어, 에뮬레이션 모드에 있을 때, 에뮬레이션 모드 인식 제어 로직(520)은 에뮬레이션 모드에 있지 않을 때 포스트-디코드 명령어 프로세서 로직(507)에 의해 이용 가능하지 않을 다른 소켓 내의 다른 코어의 정보 및/또는 자원(들)에 액세스할 수 있다(예를 들어, 코어의 상태를 조회할 수 있다).
이롭게도, 에뮬레이션 모드 인식 액세스 제어 로직(520)은 명령어들(514)의 적어도 일부로 하여금 에뮬레이션 모드에 있지 않을 때 명령어 세트의 동일 명령어들에 의해 통상적으로 이용 가능하지 않을 소정의 자원(들) 및/또는 정보에 대한 액세스를 에뮬레이션 모드에 있을 때 선택적으로 갖게 하는 것을 도울 수 있다. 보안이 계속 유지될 수 있는데, 그 이유는 에뮬레이션 로직이 다이(die) 상에 그리고/또는 메모리의 보호된 부분에 위치할 수 있기 때문이다.
일부 실시예들에서, 일부 실행 레벨들, 예를 들어 보안 실행 상태들은 그러한 에뮬레이션을 이용하여 이들 자원(들) 및/또는 정보에 액세스하는 것이 금지될 수 있다. 예를 들어, 모든 실행 상태들이 에뮬레이트된 연산 코드들을 사용하도록 허가되지 않을 수 있다. 그러한 인터럽트들 또는 하위 레벨 실행이 허가되는 경우에 특수 보안 실행 상태들은 확실히 안전하지 않을 수 있다. 대신에, 그러한 실행 레벨들 또는 보안 실행 상태들이 유사한 액세스를 필요로 하는 경우, 이들은 대신에 에뮬레이션 소프트웨어에 의해 이용 가능한 하드웨어 프리미티브들을 사용함으로써 그것을 구현할 수 있다.
일부 실시예들에서, 명령어 에뮬레이션은 명령어의 주어진 연산 코드에 대한 상이한 의미들을 제공하는 것을 돕는 데 사용될 수 있다. 명령어 세트의 매크로 명령어들, 기계 언어 명령어들 및 다른 명령어들은 종종 연산 코드(즉, opcode)를 포함한다. 연산 코드는 일반적으로 특정 명령어 및/또는 명령어에 응답하여 수행될 연산을 지정하는 데 사용되는 명령어의 일부를 나타낸다. 예를 들어, 패킹된 곱셈 명령어의 연산 코드는 패킹된 덧셈 명령어의 연산 코드와 다를 수 있다. 일반적으로, 연산 코드는 물리적이 아닌 경우에 논리적으로 함께 그룹화되는 하나 이상의 필드 내의 여러 비트를 포함한다. 종종, 원하는 수의 명령어들/연산들을 허가하면서 연산 코드들을 비교적 짧게 또는 가능한 한 짧게 유지하려고 노력하는 것이 바람직하다. 비교적 긴 연산 코드들은 디코더의 크기 및/또는 복잡성을 증가시키는 경향이 있으며, 일반적으로 명령어들을 더 길게 하는 경향도 있다. 연산 코드 내의 고정된 수의 비트들에 대해, 일반적으로 고정된 수의 상이한 명령어들/연산들만이 식별될 수 있다. 예를 들어 탈출 코드 등을 이용함으로써 연산 코드로부터 최대한 획득하려고 시도하기 위한 트릭들이 이 분야에 공지되어 있다. 그러나, 연산 코드를 이용하여 고유하게 식별될 수 있는 명령어들의 수는 일반적으로 종종 바람직한 것보다 더 제한된다. 일반적으로, 궁극적으로 소정 포인트에서의 이용가능한 연산 코드들의 소진 없이 프로세서의 연산 코드 공간에 새로운 명령어들이 계속 추가될 수 없다.
작업 부하들은 시간이 지남에 따라 변한다. 유사하게, 원하는 명령어들 및 원하는 명령어 기능들도 시간이 지남에 따라 변한다. 새로운 명령어 기능들은 일반적으로 진행 방식으로 프로세서들에 추가된다. 유사하게, 일부 명령어들/연산들은 시간이 지남에 따라 비교적 덜 유용해지고/지거나, 덜 자주 사용되고/되거나, 덜 중요해진다. 일부 예들에서, 명령어들/연산들이 충분히 제한된 유용성 또는 중요성을 가질 때, 이들은 폐기 예정(deprecation)될 수 있다. 폐기 예정은 이 분야에서 일반적으로 사용되는 용어로서, 컴포넌트, 특징, 특성 또는 실시가 폐기 또는 대체되는 중이고/이거나 장래에 이용 가능하지 않거나 지원되지 않을 수 있으므로 일반적으로 종종 회피되어야 한다는 것을 지시하기 위해 그에 적용되는 상태를 지칭한다.
일반적으로, 그러한 명령어들/연산들은 임시적인 역호환성의 제공을 돕기 위해(예를 들어, 기존 또는 레거시 코드가 계속 실행되는 것을 가능하게 하기 위해) 바로 제거되는 대신에 폐기 예정될 수 있다. 이것은 코드가 대체 명령어들/연산들을 따를 수 있는 시간을 제공할 수 있고/있거나, 기존 또는 레거시 코드가 단계적으로 제거될 수 있는 시간을 제공할 수 있다. 종종, 명령어 세트로부터 명령어들/연산들을 폐기 예정하는 것은 오래된 프로그램들을 충분히 제거할 시간을 제공하기 위해 수십 년은 아니더라도 예를 들어 수년 정도의 긴 시간을 필요로 한다. 통상적으로, 폐기 예정된 명령어/연산의 연산 코드의 값은 일반적으로 그러한 긴 기간이 지날 때까지 상이한 명령어/연산을 위해 재획득 및 재사용되지 못할 수 있다. 이와 달리, 레거시 소프트웨어가 실행된 경우, 연산 코드 값을 갖는 명령어들은 프로세서로 하여금 잘못된 결과를 유발할 수 있는 의도된 폐기 예정된 연산이 아니라 대체 연산을 수행하게 할 수 있다.
일부 실시예들에서, 명령어 에뮬레이션은 명령어의 주어진 연산 코드에 대한 상이한 의미들의 제공을 돕는 데 사용될 수 있다. 일부 실시예들에서, 명령어의 주어진 연산 코드는 상이한 의미들로 해석될 수 있다. 일부 실시예들에서는, 주어진 연산 코드에 대해 다수의 연산 코드 정의가 지원될 수 있다. 예를 들어, 주어진 연산 코드는 명령어를 갖는 소프트웨어 프로그램이 의도하는 의미로 해석될 수 있다. 예를 들어, 일부 실시예들에서, 더 오래된 또는 레거시 소프트웨어 프로그램은 주어진 연산 코드를 갖는 명령어들이 더 오래된, 레거시 또는 폐기 예정되는 의미를 가진다고 표시시할 수 있고, 더 새로운 소프트웨어 프로그램은 주어진 연산 코드를 갖는 명령어들이 더 새로운 의미를 가진다고 표시할 수 있다. 일부 실시예들에서, 더 오래된 또는 폐기 예정되는 의미는 에뮬레이트될 수 있는 반면, 더 새로운 의미는 제어 신호들로 디코딩되고, 프로세서 파이프라인 상에서 직접 실행될 수 있다. 이롭게도, 일부 실시예들에서, 이것은 성능 개선을 돕기 위해 상이한 의미를 갖는 더 새로운 프로그램들에 대해서도 폐기 예정된 연산 코드가 사용되는 것을 허가하면서 더 오래된 프로그램들이 폐기 예정된 연산 코드를 이용하여 계속 실행되는 것을 허가하는 역호환성을 여전히 제공하면서 폐기 예정된 연산 코드들의 더 이른 재획득 및 재사용을 허가하는 것을 도울 수 있다.
도 6은 프로세서에 의해 그리고/또는 프로세서에서 수행되는 방법(660)의 일 실시예의 블록 흐름도이다. 일부 실시예들에서, 도 6의 동작들 및/또는 방법은 도 1의 프로세서 및/또는 도 3 또는 도 7의 로직에 의해 그리고/또는 그 안에서 수행될 수 있다. 프로세서 및 로직에 대해 본 명세서에서 설명되는 컴포넌트들, 특징들 및 특정 옵션 상세들은 옵션으로서 도 6의 동작들 및/또는 방법에도 적용된다. 대안으로서, 도 6의 동작들 및/또는 방법은 유사한 또는 완전히 상이한 프로세서 또는 로직에 의해 그리고/또는 그 안에서 수행될 수 있다. 더욱이, 도 1의 프로세서 및/또는 도 3 또는 도 7의 로직은 도 6의 그것들과 유사한 또는 상이한 동작들 및/또는 방법들을 수행할 수 있다.
이 방법은 블록 661에서 주어진 연산 코드를 갖는 제1 명령어를 수신하는 단계를 포함한다. 일부 실시예들에서, 제1 명령어는 디코더에서 수신될 수 있다. 블록 662에서, 주어진 연산 코드가 제1 의미 또는 제2 의미를 갖는지를 결정할 수 있다. 일부 실시예들에서, 제1 의미는 제1 연산 코드 정의일 수 있으며, 제2 의미는 제2의 상이한 연산 코드 정의일 수 있다. 아래에 더 설명되는 바와 같이, 일부 실시예들에서, 이것은 디코더가 주어진 연산 코드가 제1 의미 또는 제2 의미를 갖는지의 표시를 예를 들어 플래그, 상태 레지스터 또는 다른 온-다이(on-die) 저장 위치에서 판독 또는 검사하는 것을 포함할 수 있다. 아래에 더 설명되는 바와 같이, 일부 실시예들에서, 소프트웨어(예를 들어, 운영 체제 모듈의 프로그램 로더 모듈)는 프로세서에 의해 실행될 소프트웨어를 로딩할 때 표시를 플래그, 상태 레지스터 또는 다른 온-다이 저장 위치에 저장할 수 있다. 예를 들어, 소프트웨어는 소프트웨어가 주어진 연산 코드가 제1 의미 또는 제2 의미를 갖는 것으로 예상할지 또는 지정할지를 표시하기 위한 메타데이터(예로서, 객체 모듈 포맷)를 포함할 수 있다.
도 6을 다시 참조하면, 블록 662에서 주어진 연산 코드가 제1 의미를 갖는 것으로 결정되면, 이 방법은 블록 663으로 진행할 수 있다. 블록 663에서, 제1 명령어는 하나 이상의 마이크로 명령어들, 마이크로 연산들, 또는 다른 하위 레벨 명령어들 또는 제어 신호들로 디코딩될 수 있다. 일부 실시예들에서, 디코더는 이러한 명령어(들) 또는 제어 신호(들)를 포스트-디코드 명령어 프로세서 로직(예로서, 실행 유닛 등)으로 출력할 수 있다. 포스트-디코드 명령어 프로세서 로직은 통상적으로 에뮬레이션이 대신 사용되는 경우보다 훨씬 빠르게 이들 명령어를 처리할 수 있다. 일부 실시예들에서, 제1 의미는 폐기 예정되지 않은 연산 코드 의미들, 비교적 더 새로운 연산 코드 의미들, 비교적 더 자주 사용되는 연산 코드 의미들, 성능에 더 강하게 영향을 주는 연산 코드 의미들 등을 위해 사용될 수 있다.
이와 달리, 블록 662에서 주어진 연산 코드가 제2 의미를 갖는 것으로 결정되면, 이 방법은 블록 664로 진행할 수 있다. 블록 664에서, 제1 명령어의 에뮬레이션이 유도될 수 있다. 예를 들어, 디코더는 에뮬레이션 트랩을 제공하거나, 에뮬레이션 모드를 에뮬레이션 로직에 시그널링할 수 있다. 이어서, 제2 의미를 갖는 연산 코드를 구비한 제1 명령어를 에뮬레이트하는 데 사용될 에뮬레이션 로직의 하나 이상의 명령어들의 세트가 디코더에 제공되고, 에뮬레이션 모드에서 처리될 수 있다. 이것은 실질적으로 본 명세서의 다른 곳에서 설명되는 바와 같이 행해질 수 있다. 일부 실시예들에서, 제2 의미는 폐기 예정된 연산 코드 의미들, 폐기 예정중이거나 폐기 예정되려고 하는 연산 코드 의미들, 비교적 덜 자주 사용되는 연산 코드 의미들, 성능에 덜 강하게 영향을 주는 연산 코드 의미들 등을 위해 사용될 수 있다.
도 7은 주어진 연산 코드가 상이한 의미들을 갖는 것을 가능하게 하기 위한 로직(701)의 일 실시예를 나타내는 블록도이다. 일부 실시예들에서, 도 7의 로직은 도 1의 프로세서 및/또는 컴퓨터 시스템 및/또는 도 3의 로직 내에 포함될 수 있다. 대안으로서, 도 7의 로직은 유사한 또는 상이한 프로세서 또는 컴퓨터 시스템 내에 포함될 수 있다. 더욱이, 도 1의 프로세서 및/또는 컴퓨터 시스템 및/또는 도 3의 로직은 도 7의 그것과 유사한 또는 상이한 로직을 포함할 수 있다.
메모리(710)는 제1 소프트웨어 모듈(711-1), 제2 소프트웨어 모듈(711-2), 및 프로그램 로더 모듈(770)을 갖는 운영 체제 모듈(797)을 포함한다. 일부 실시예들에서, 제1 소프트웨어 모듈은 주어진 연산 코드에 대한 제1 의미를 사용하기 위한 표시(772)를 포함하며, 제2 소프트웨어 모듈은 주어진 연산 코드에 대한 제2의 상이한 의미를 사용하기 위한 표시(773)를 포함한다. 예를 들어, 제1 및 제2 소프트웨어 모듈들 각각은 이러한 표시들(772, 773)을 포함하는 객체 모듈 포맷, 다른 메타데이터 또는 하나 이상의 데이터 구조들을 포함할 수 있다. 프로그램 로더 모듈은 프로세서 상에서의 실행을 위해 제1 소프트웨어 모듈 및 제2 소프트웨어 모듈을 로딩하도록 동작할 수 있다. 도시된 바와 같이, 일부 실시예들에서, 프로그램 로더 모듈은 특정 소프트웨어 모듈에 의해 표시되는 주어진 연산 코드의 의미를 프로세서 상에 프로세서 상태로서 로딩하기 위한 모듈(771)을 포함할 수 있다. 일부 실시예들에서, 모듈(771)은 제1 소프트웨어 모듈을 로딩할 때 표시(772)를 또는 제2 소프트웨어 모듈을 로딩할 때 표시(773)를 온-다이 저장 위치(774)에, 주어진 연산 코드에 대해 제1 또는 제2 의미를 사용할지에 대한 표시(775)로서 로딩하도록 동작할 수 있다. 온-다이 저장 위치는 디코더(705)에 결합되거나 그에 의해 액세스될 수 있다.
일부 실시예들에서, 예를 들어 오래된 소프트웨어 모듈의 경우, 소프트웨어 모듈은 주어진 연산 코드에 대한 주어진 의미를 사용하기 위한 명백한 표시를 갖지 않을 수 있다. 예를 들어, 소프트웨어는 더 새로운 의미의 존재 전에 작성되었을 수 있다. 일부 실시예들에서, 모듈(771) 및/또는 프로그램 로더(770)는 소프트웨어 모듈이 주어진 연산 코드의 제1 또는 제2 의미를 사용하는 것을 필요로 하는지를 추정하도록 동작할 수 있다. 예를 들어, 이것은 프로그램에 내장된 특징 리스트, 프로그램의 포맷, 프로그램의 나이 또는 프로그램의 생성 연도, 또는 메타데이터 내의 그리고/또는 소프트웨어 모듈 내의 다른 그러한 정보로부터 추정될 수 있다. 예를 들어, 제2 소프트웨어 모듈(711-2)이 주어진 연산 코드의 제1 의미의 도입/정의 전에 생성된 오래된 소프트웨어인 경우, 프로그램 로더 모듈 및/또는 운영 체제 모듈은 제2 소프트웨어 모듈이 주어진 연산 코드에 대해 제1 의미가 아니라 제2 의미를 사용하는 것을 필요로 하는 것으로 추정하도록 동작할 수 있다. 모듈(771)은 소프트웨어를 스위칭 또는 교체할 때 저장 영역 내의 표시(775)를 스위칭 또는 교체하도록 동작할 수 있다.
추가적인 예로서, 주어진 연산 코드를 갖는 명령어의 제1 인스턴스(703-1)가 제1 소프트웨어 모듈(711-1)로부터 디코더(705)로 제공되는 것을 고려한다. 제1 소프트웨어 모듈은 모듈(771)이 저장 위치(774)에 유지할 수 있는 주어진 연산 코드에 대한 제1 의미를 사용하기 위한 표시(772)를 포함한다. 디코더는 주어진 연산 코드에 대해 제1 또는 제2 의미를 사용할지의 표시(775)를 검사하기 위해 저장 위치(774)에 결합된 검사 로직(776)을 포함한다. 검사 로직은 저장 위치에 액세스하거나 판독하고, 제1 소프트웨어 모듈로부터의 명령어의 제1 인스턴스를 처리할 때 주어진 연산 코드에 대해 제1 의미가 사용되는 것으로 결정할 수 있다. 일부 실시예들에서, 저장 위치(774)는 상이한 연산 코드에 각각 대응하는 다수의 표시를 저장하기 위한 다수의 상이한 저장 위치를 포함할 수 있다. 이에 응답하여, 디코더의 디코드 로직(777)은 주어진 연산 코드의 제1 의미를 가정하여 명령어를 디코딩할 수 있다. 하나 이상의 디코딩된 명령어들(706) 또는 하나 이상의 다른 제어 신호들이 디코더로부터 이들을 처리할 수 있는 포스트-디코드 명령어 프로세서 로직(707)으로 제공될 수 있다.
동일한 주어진 연산 코드를 갖는 명령어의 제2 인스턴스(703-2)가 제2 소프트웨어 모듈(711-2)로부터 디코더(705)로 제공될 수 있다. 제2 소프트웨어 모듈은 모듈(771)이 저장 위치(774)에 유지할 수 있는 주어진 연산 코드에 대한 제2 의미를 사용하기 위한 표시(773)를 포함한다. 검사 로직(776)은 표시(775)를 검사하고, 제2 소프트웨어 모듈로부터의 명령어의 제2 인스턴스를 처리할 때 주어진 코드에 대해 제2 의미가 사용되는 것으로 결정할 수 있다. 이에 응답하여, 에뮬레이션 유도 로직(778)은 명령어의 제2 인스턴스(703-2)의 에뮬레이션을 유도할 수 있다. 예를 들어, 에뮬레이션 유도 로직은 에뮬레이션 트랩을 수행하거나, 에뮬레이션 모드(718)를 시그널링할 수 있다. 제2 의미를 갖는 주어진 연산 코드를 구비한 명령어의 제2 인스턴스를 에뮬레이트하는 데 사용되는 하나 이상의 명령어들(714)의 세트가 에뮬레이션 로직(715)으로부터 디코더로 제공될 수 있다. 에뮬레이션 로직은 다이 상에, 다이 밖에 또는 일부는 다이 상에 그리고 일부는 다이 밖에 위치할 수 있다. 에뮬레이션 로직(715)은 에뮬레이션 로직에 대해 본 명세서의 다른 곳에서 설명되는 임의의 옵션인 특성들을 가질 수 있다.
일부 실시예들에서, 명령어(들)(714)는 주어진 연산 코드를 갖는 명령어와 동일한 명령어 세트일 수 있다. 일부 실시예들에서, 디코더는 이들 명령어 각각을 디코딩하고, 이들을 디코딩된 명령어들(706) 또는 다른 제어 신호들로서 포스트-디코드 명령어 프로세서 로직에 제공할 수 있다. 일부 실시예들에서, 포스트-디코드 명령어 프로세서 로직은 본 명세서의 다른 곳에서 설명되는 것(예를 들어, 도 1 또는 3-5 중 임의의 도면의 그것)과 유사하거나 동일할 수 있는 에뮬레이션 모드 인식 명령어 프로세서 로직(720)을 포함할 수 있다. 도시된 바와 같이, 일부 실시예들에서, 에뮬레이션 모드 인식 명령어 프로세서 로직은 에뮬레이션 모드(718)와 결합되거나 그를 인식할 수 있다. 더욱이, 에뮬레이션 모드 인식 명령어 프로세서 로직은 에뮬레이션 로직의 저장 위치들(721)과 결합될 수 있고 그들로부터 데이터를 판독하고 기록할 수 있다.
일부 실시예들에서, 저장 위치(774) 내의 표시(775)에 기초하여 프로세서 특징 식별 레지스터(795)를 갱신하기 위한 로직(796)이 포함될 수 있다. 적절한 프로세서 특징 식별 레지스터의 일례는 CPU 식별(CPUID)을 위해 사용되는 것이다. 로직(796)은 저장 위치(774) 및 프로세서 특징 식별 레지스터(795)에 결합될 수 있다. 프로세서 특징 식별 레지스터는 프로세서의 명령어의 프로세서 특징 식별 명령어(예로서, CPUID 명령어)에 의해 판독될 수 있다. 소프트웨어는 프로세서 특징 식별 명령어를 실행함으로써 프로세서 특징 식별 레지스터로부터 연산 코드의 의미의 표시를 판독할 수 있다.
일부 실시예들에서, 프리빌리지 레벨 및/또는 링 레벨 로직(794)은 디코더(705)에 연결될 수 있고, 디코더가 특권 레벨 및/또는 링 레벨에 기초하여 연산 코드의 주어진 의미를 이용하도록 강제하거나 그렇지 않은 경우 이용하도록 야기할 수 있다. 예컨대, 이것은 제1 의미가 더 새로운 의미이고, 제2 의미는 퇴화될 의미인 경우의 실시예들에서 유용할 수 있다. 운영 시스템들은 전형적으로 사용자 애플리케이션들의 것과는 상이한 특정 특권 레벨 및/또는 링 레벨에서 동작한다. 또한, 운영 시스템은 전형적으로 주어진 연산 코드의 더 오래된 의미가 아닌 주어진 연산 코드의 더 새로운 의미를 이용하는데, 그 이유는 이들이 일반적으로 빈번하게 업데이트되기 때문이다. 이러한 경우에, 특권 레벨 및/또는 링 레벨 로직(794)은 디코더가 운영 시스템의 레벨에 대응하는 특권 레벨 또는 링 레벨에 있는 경우 주어진 연산 코드의 더 새로운 의미를 이용하도록 할 수 있다.
설명을 간단하게 하기 위해, 연산 코드의 2개의 상이한 의미들이 전형적으로 여기에서 개시된다. 그러나, 다른 실시예들은 주어진 연산 코드에 대한 3개 이상의 상이한 의미들을 이용할 수 있다는 것을 알 수 있다. 일례로서, 저장 위치(774)는 복수의 이러한 상이한 의미들 중 어느 것이 주어진 연산 코드에 대해 이용되는지를 표시하기 위한 2개 이상의 비트들을 포함할 수 있다. 마찬가지로, 프로세서 특징 식별 레지스터는 주어진 연산 코드에 대한 복수의 이러한 의미들을 반영할 수 있다.
도 8은 운영 시스템 모듈에 의해 수행될 수 있는 방법(880)의 실시예의 블록 순서도이다. 일부 실시예에서, 방법은 프로그램 로더 모듈에 의해 수행될 수 있다.
방법은 주어진 연산 코드를 갖는 제1 명령어가 블록(881)에서 소프트웨어 프로그램으로부터 프로세서에 의해 실행될 때 제1 의미 대신에 제2 의미를 갖는 것을 결정하는 것을 포함한다. 이것은 상이한 실시예들에서 상이한 방식으로 수행될 수 있다. 일부 실시예들에서, 소프트웨어 프로그램은 주어진 연산 코드에 대한 주어진 의미를 이용하기 위한 표시를 명백하게 특정할 수 있다. 예컨대, 운영 시스템 모듈은 소프트웨어 프로그램의 메타데이터를 검사할 수 있다. 예컨대, 어느 의미가 이용될지를 표시하는 오브젝트 모듈 포맷내에 플래그가 존재할 수 있다. 다른 실시예들에서, 예컨대 레거시 소프트웨어의 경우에, 소프트웨어 프로그램은 어느 의미가 이용되는지의 표시를 명백하게 특정하지 않을 수 있다. 일부 실시예들에서, 운영 시스템 모듈은 어느 의미가 이용될지를 추론하기 위한 로직을 포함할 수 있다. 이것은 다양한 상이한 방식으로 수행될 수 있다. 일부 실시예들에서, 이것은 소프트웨어 프로그램의 특징 리스트를 검사하는 것을 포함할 수 있다. 일부 경우에, 특징 리스트는 어느 명령어의 수정이 예상되는지를 특정할 수 있다. 일부 실시예들에서, 이것은 소프트웨어 프로그램의 생성 날짜를 검사하는 것을 포함할 수 있다. 특정 날짜 보다 오래된 생성 날짜, 예컨대, 더 새로운 대체적 의미의 명령어 날짜는 소프트웨어 프로그램이 더 오래된 퇴화된 의미를 이용한다는 표시로서 추론될 수 있다. 일부 실시예들에서, 이것은 소프트웨어 프로그램의 포맷을 검사는 것을 포함할 수 있다. 예컨대, 특정 레벨 이전의 일부 수정 프로그램 포맷들은 더 오래되고 또는 퇴화된 의미를 추론하는데 이용될 수 있다. 일부 실시예들에서, 이것은 특정 의미를 이용하는 것으로 알려진 소프트웨어 프로그램들의 명시적 리스트(예컨대, 예외 리스트)를 검사하는 것을 포함할 수 있다. 일례로서, 이 리스트는 이력 정보에 기초하여 업데이트될 수 있다(예컨대, 하나의 의미로부터 에러가 나타나면, 다른 의미가 리스트에 부가될 수 있다). 이것은 단지 일례이다. 의미를 추론하는 다른 방식들도 또한 고려될 수 있다.
방법은 또한 주어진 연산 코드를 갖는 제1 명령어가 블록(882)에서 프로세서의 상태에서 제1 의미 대신에 제2 의미를 갖는 표시를 저장하는 것을 포함한다. 예컨대, 운영 시스템 모듈은 여기서 다른 곳에 기술된 바와 같이, 디코더와 연결된 저장 위치내의 비트를 수정할 수 있다.
도 9는 하나 이상의 기능들의 세트, 서브루틴들, 또는 이들을 이용하게 되는 소프트웨어에 적합한 주어진 연산 코드의 의미를 갖는 소프트웨어 라이브러리(983)의 다른 부분들을 선택하도록 동작가능한 선택 모듈(985)을 포함하는 프로그램 로더 모듈(970)의 일례의 블록도이다. 소프트웨어 라이브러리는 일반적으로 다양한 소프트웨어 모듈이 이용할 수 있는 소프트웨어의 집합을 나타내거나, 서브루틴들, 기능들, 클래스들, 프로시져들, 스크립트들, 구성 데이터등의 형태인 이전에 존재하는 소프트웨어를 포함할 수 있다. 소프트웨어 모듈들은 다양한 기능들을 포함하는 라이브러리의 이러한 다양한 부분들을 이용할 수 있다. 일례로서, 소프트웨어 모듈은 수학적 소프트웨어 라이브러리 또는 다양한 수학적 기능 또는 서브루틴들을 갖는 이들을 부분들을 포함할 수 있다.
도시된 바와 같이, 일부 실시예들에서, 라이브러리는 주어진 연산 코드의 제1 의미를 이용하는 제1 세트의 라이브러리 기능들, 서브루틴들, 또는 다른 부분들을 포함할 수 있다. 라이브러리는 또한 주어진 연산 코드의 제2의 상이한 의미를 이용하는 제2 세트의 라이브러리 기능들, 서브루틴들, 또는 다른 부분들을 포함할 수 있다. 선택적으로, 연산 코드의 3개 이상의 의미가 존재하면, 마찬가지로 3개 이상의 상이한 의미들의 각각에 대한 라이브러리의 상이한 부분들이 존재할 수 있다. 일부 경우에, 상이한 의미들을 이용하는 부분들은 상이한 코드의 조각들이 될 수 있다. 다른 경우에, 부분들은 동일한 코드의 상이한 부분들이 될 수 있고, 브랜치 또는 다른 조건부 이동이 적절하게 제1 의미 또는 제2 의미를 사용하는 부분 중 어느 하나로 이동하는데 이용될 수 있다.
설명을 위해 다시 참조하면, 프로그램 로더 모듈(970)은, 주어진 연산 코드의 제1 의미를 이용하는 제1 소프트웨어 모듈(911-1), 및 주어진 연산 코드의 제2 의미를 이용하는 제2 소프트웨어 모듈(911-2) 양자 모두에 대한 라이브러리의 부분들을 로딩할 수 있다. 프로그램 로더 모듈은 하나 이상의 기능들의 세트, 서브루틴들, 또는 이들을 이용하게 되는 소프트웨어에 적합한 주어진 연산 코드의 의미를 갖는 소프트웨어 라이브러리의 다른 부분들을 선택하도록 동작가능한 선택 모듈(985)을 포함한다. 예컨대, 선택 모듈은 이들을 사용하게 되는 소프트웨어와 동일한 주어진 연산 코드의 의미를 갖는 라이브러리의 부분들을 선택할 수 있다. 예컨대, 설명에서 도시된 바와 같이, 선택 모듈은 제1 소프트웨어 모듈(911-1)에 대한 제1 세트(984-1)를 선태할 수 있는데, 그 이유는 그것이 주어진 연산 코드의 제1 의미를 이용하기 때문이다. 마찬가지로, 선택 모듈은 제2 소프트웨어 모듈(911-2)에 대한 제2 세트(984-2)를 선태할 수 있는데, 그 이유는 그것이 주어진 연산 코드의 제2 의미를 이용하기 때문이다. 하나의 특정 실시예에서, 제1 소프트웨어(911-1)가 오래된 소프트웨어이고, 주어진 연산 코드의 제1 의미가 퇴화된 의미인 경우에, 선택 모듈은, 주어진 연산 코드에 대한 퇴화된 의미와 동일한 것을 이용하는 제1 세트의 라이브러리 부분(984)을 선택하도록 동작가능하다. 따라서, 선택 모듈은, 라이브러리의 그 부분을 이용하게 되는 소프트웨어와 부합하거나 또는 동일한 주어진 연산 코드의 의미를 이용하는 라이브러리의 부분을 선택할 수 있다.
예시적인 코어 아키텍처들 , 프로세서들 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 방식들로, 상이한 목적들을 위해 그리고 상이한 프로세서들에서 구현될 수 있다. 예컨대, 이러한 코어들의 구현들은 1) 범용 컴퓨팅용의 범용 인 오더 코어(in-order core); 2) 범용 컴퓨팅용의 고성능의 범용 아웃 오브 오더 코어(out-of-order core); 3) 주로 그래픽들 및/또는 과학적 (스루풋) 컴퓨팅용의 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은 1) 범용 컴퓨팅용의 하나 이상의 범용 인 오더 코어들 및/또는 범용 컴퓨팅용의 하나 이상의 범용 아웃 오브 오더 코어들을 포함하는 CPU; 및 2) 주로 그래픽들 및/또는 과학적 (스루풋)용의 하나 이상의 특수 목적 코어들을 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은 1) CPU로부터 분리된 칩 상의 코프로세서; 2) CPU와 동일한 패키지에서의 개별 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우, 이 코프로세서는 집적된 그래픽들 및/또는 과학적 (스루풋) 로직과 같은 특수 목적 로직 또는 특수 목적 코어들로 종종 지칭된다.); 및 4) 동일한 다이 상에 (애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 종종 지칭되는) 전술한 CPU, 전술한 코프로세서 및 추가의 기능을 포함할 수 있는 시스템 온 칩을 포함할 수 있는 상이한 컴퓨터 시스템 아키텍처들에 이르게 한다. 다음으로 예시적인 코어 아키텍처들을 설명하며, 예시적인 프로세서들 및 컴퓨터 아키텍처들의 설명들이 이어진다.
예시적인 코어 아키텍처들
인 오더 및 아웃 오브 오더 코어 블록도
도 10a는 본 발명의 실시예들에 따른, 아웃 오브 오더 이슈/실행 파이프라인으로 리네이밍된 예시적인 레지스터 및 예시적인 인 오더 파이프라인 모두를 도시하는 블록도이다. 도 10b는 본 발명의 실시예들에 따른, 프로세서에 포함될 아웃 오브 오더 이슈/실행 아키텍처 코어로 리네이밍된 예시적인 레지스터 및 인 오더 아키텍처 코어의 예시적인 실시예 모두를 도시하는 블록도이다. 도 10a, 도 10b에서의 실선 박스들은 인 오더 파이프라인 및 인 오더 코어를 나타내는 반면에, 파선 박스들의 선택적 추가는 아웃 오브 오더 이슈/실행 파이프라인 및 코어로 리네이밍된 레지스터를 나타내고 있다. 인 오더 측면이 아웃 오브 오더 측면의 서브 세트인 것을 고려하여, 아웃 오브 오더 측면에 대해 설명한다.
도 10a에서, 프로세서 파이프라인(1000)은 페치 스테이지(1002), 길이 디코드 스테이지(1004), 디코드 스테이지(1006), 할당 스테이지(1008), 리네이밍 스테이지(1010), 스케쥴링(디스패치 또는 이슈로도 알려짐) 스테이지(1012), 레지스터 판독/메모리 판독 스테이지(1014), 실행 스테이지(1016), 라이트 백(write back)/메모리 기입 스테이지(1018), 예외 처리 스테이지(1022) 및 커미트 스테이지(1024)를 포함한다.
도 10b는 실행 엔진 유닛(1050)에 결합되는 전단(front end) 유닛(1030)을 포함하는 프로세서 코어(1090)를 보여주고 있으며, 전단 유닛(1030)과 실행 엔진 유닛(1050) 모두는 메모리 유닛(1070)에 결합된다. 코어(1090)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어 또는 하이브리드 혹은 대체 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(1090)는 예를 들어 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
전단 유닛(1030)은 명령어 캐시 유닛(1034)에 결합되는 브랜치 예측 유닛(1032)을 포함할 수 있고, 명령어 캐시 유닛(1034)은 명령어 TLB(1036)에 결합되고, 명령어 TLB(1036)는 명령어 페치 유닛(1038)에 결합되며, 명령어 페치 유닛(1038)은 디코드 유닛(1040)에 결합된다. 디코드 유닛(1040)(또는 디코더)는 명령어들을 디코딩할 수 있고, 출력으로서 하나 이상의 마이크로-동작들, 마이크로-코드 엔트리 포인트들, 마이크로 명령어들, 다른 명령어들, 또는 다른 제어 신호들을 생성할 수 있고, 이들은 오리지널 명령어로부터 디코딩되거나, 그렇지 않은 경우 오리지널 명령어들을 반영하거나, 또는 오리지널 명령어들로부터 도출될 수 있다. 디코드 유닛(1040)은 다양하고 상이한 메커니즘들을 이용하여 구현될 수 있다. 적합한 메커니즘의 예들은, 룩업 테이블들, 하드웨어 구현들, PLA(programmable logic array)들, 마이크로코드 ROM들 등을 포함할 수 있지만, 이에 한정되는 것은 아니다. 일 실시예에서, 코어(1090)는 마이크로코드 ROM 또는 특정 매크로 명령어들을 위한 마이크로코드를 저장하는 다른 매체(예컨대, 디코드 유닛(1040)내에서 또는 그렇지 않은 경우 전단 유닛(1030)내에서)를 포함한다. 디코드 유닛(1040)은 실행 엔진 유닛(1050)내의 리네이밍/할당기 유닛(1052)에 결합된다.
실행 엔진 유닛(1050)은 리타이어먼트 유닛(1054) 및 하나 이상의 스케쥴러 유닛(들)(1056)의 세트에 결합된 리네임/할당기 유닛(1052)을 포함한다. 스케쥴러 유닛(들)(1056)은 리저베이션 국들, 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케쥴러들을 나타낸다. 스케쥴러 유닛(들)(1056)은 물리 레지스터 파일(들) 유닛(들)(1058)에 결합된다. 각각의 물리 레지스터 파일(들) 유닛(들)(1058)은 하나 이상의 물리 레지스터 파일들, 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 스테이터스(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장하는 상이한 것들을 나타낸다. 일 실시예에서, 물리 레지스터 파일(들) 유닛(1058)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리 레지스터 파일(들) 유닛(들)(1058)은 리타이어먼트 유닛(1054)에 의해 오버랩되어 레지스터 리네이밍 및 아웃 오브 오더 실행이 구현되는 다양한 방식을 도시한다(예컨대, 리오더 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용; 장래 파일(들), 히스토리 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 이용; 레지스터 맵 및 레지스터들의 풀을 이용; 등). 리타이어먼트 유닛(1054) 및 물리 레지스터 파일(들) 유닛(들)(1058)은 실행 클러스터(들)(1060)에 결합된다. 실행 클러스터(들)(1060)은 하나 이상의 실행 유닛들(1062)의 세트 및 하나 이상의 메모리 액세스 유닛들(1064)의 세트를 포함한다. 실행 유닛들(1062)은 다양한 동작들(예컨대, 시프트, 가산, 감산, 승산)을 다양한 타입의 데이터(예컨대, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 수행할 수 있다. 일부 실시예들은 특정 기능 또는 기능들의 세트에 전용인 다수의 실행 유닛들을 포함할 수 있고, 다른 실시예들은 단지 하나의 실행 유닛 또는 모두가 모든 기능들을 수행하는 복수의 실행 유닛들을 포함할 수 있다. 스케쥴러 유닛(들)(1056), 물리 레지스터 파일(들) 유닛(들)(1058), 및 실행 클러스터(들)(1060)은 아마도 복수로 도시되는데, 그 이유는 일부 실시예들은 일부 타입의 데이터/동작들에 대해 별개의 파이프라인들을 생성하기 때문이다(예컨대, 그 각각이 그 자신의 스케쥴러 유닛, 물리 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프 라인, 및 별개의 메모리 액세스 파이프라인의 경우, 일부 실시예들은 이러한 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(1064)을 갖는 것으로 구현된다). 별개의 파이프라인들이 이용되는 곳에서, 이러한 파이프라인들의 하나 이상은 아웃 오브 오더 이슈/실행이 되고, 나머지는 인 오더일 수 있다.
메모리 액세스 유닛들(1164)의 세트는 레벨 2(L2) 캐시 유닛(1076)에 결합된 데이터 캐시 유닛(1074)에 결합된 데이터 TLB 유닛(1072)을 포함하는 메모리 유닛(1070)에 결합되어 있다. 일 예시적 실시예에서, 메모리 액세스 유닛들(1064)은 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(1070) 내의 데이터 TLB 유닛(1072)에 결합되어 있다. 명령어 캐시 유닛(1034)은 또한 메모리 유닛(1070) 내의 레벨 2(L2) 캐시 유닛(1076)에 결합되어 있다. L2 캐시 유닛(1076)은 캐시의 하나 이상의 다른 레벨들에 그리고 결국에는 메인 메모리에 결합되어 있다.
예시로서, 예시적 레지스터 리네이밍, 아웃-오브-오더 이슈/실행 코어 아키텍처는 다음과 같이 파이프라인(1000)을 구현할 수 있다: 1) 명령어 페치(1038)는 페치 및 길이 디코딩 스테이지(1002 및 1004)를 수행하고; 2) 디코드 유닛(1040)은 디코드 스테이지(1006)를 수행하고; 3) 리네임/할당기 유닛(1052)은 할당 스테이지(1008) 및 리네이밍 스테이지(1010)를 수행하고; 4) 스케줄러 유닛(들)(1056)은 스케줄 스테이지(1012)를 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(1058) 및 메모리 유닛(1070)은 레지스터 판독/메모리 판독 스테이지(1014)를 수행하고; 실행 클러스터(1060)는 실행 스테이지(1016)를 수행하고; 6) 메모리 유닛(1070) 및 물리적 레지스터 파일(들) 유닛(들)(1058)은 라이트 백/메모리 기입 스테이지(1018)를 수행하고; 7) 다수의 유닛들은 예외 처리 스테이지(1022)에 포함될 수 있고; 8) 리타이어먼트 유닛(1054) 및 물리적 레지스터 파일(들) 유닛(들)(1058)은 커미트 스테이지(1024)를 수행한다.
코어(1090)는 본문에 기술된 명령어(들)를 포함하는 하나 이상의 명령어 세트들(예컨대, (더 새로운 버전으로 추가된 일부 확장들을 포함하는) x86 명령어 세트; 캘리포니아 Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아 Sunnyvale의 ARM Holdings의 (NEON과 같은 선택적 추가 확장들을 포함하는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(1090)는 패킹된 데이터 명령어 세트 확장(예컨대, AVX1, AVX2)을 지원하기 위한 로직을 포함하고, 그에 따라 다수의 멀티미티어 애플리케이션들에 의해 사용된 연산들이 패킹된 데이터를 이용하여 수행될 수 있게 한다.
코어가 멀티스레딩(multithreading)(연산들 또는 스레드들의 둘 이상의 병렬 세트를 실행함)을 지원할 수 있고, 시간 분할 멀티스레딩, 동시 멀티스레딩(단일 물리적 코어는 물리적 코어가 동시에 멀티스레딩하는 각각의 스레드들에 대한 로직 코어를 제공함), 또는 이들의 조합(예컨대, Intel® Hyperthreading 기술과 같은 시간 분할 페칭 및 디코딩 및 동시 멀티스레딩)을 포함한 다양한 방법으로 지원할 수 있다는 것을 이해해야 한다.
레지스터 리네이밍은 아웃-오브-오더 실행의 문맥에서 기술되고 있는 반면에, 레지스터 리네이밍은 인-오더 아키텍처에서 사용될 수 있다는 것을 이해해야 한다. 예시된 프로세서의 실시예는 또한 별도의 명령어 및 데이터 캐시 유닛들(1034/1074) 및 공유된 L2 캐시 유닛(1076)을 포함하는 반면에, 대안적인 실시예들은 예를 들어, 레벨 1(L1) 내부 캐시 또는 다중 레벨의 내부 캐시와 같은, 명령어들 및 데이터를 위한 단일 내부 캐시를 포함할 수 있다. 일부 실시예들에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서 외부에 있을 수 있다.
특정 예시적 인 -오더 코어 아키텍처
도 11a 내지 도 11b는 코어가 칩 내의 여러 개의 로직 블록들(동일한 타입 및/또는 상이한 타입의 다른 코어들을 포함함) 중 하나일 특정 예시적 인-오더 코어 아키텍처의 블록도를 도시한다. 애플리케이션에 따라, 로직 블록들은 고대역폭 인터커넥트 네트워크(예컨대, 링 네트워크)를 통해 일부 고정 기능 로직, 메모리 I/O 인터페이스, 및 다른 필요한 I/O 로직과 통신한다.
본 발명의 실시예에 따라, 도 11a는 온-다이 인터커넥트 네트워크(1102)로의 접속 및 레벨 2(L2) 캐시(1104)의 로컬 서브셋을 따르는, 단일 프로세서 코어의 블록도이다. 일 실시예에서, 명령어 디코더(1100)는 패킹된 데이터 명령어 세트 확장을 포함한 x86 명령어 세트를 지원한다. L1 캐시(1106)는 캐시 메모리로의 로우-레이턴시 액세스들이 스칼라 및 벡터 유닛들이 되도록 한다. (설계를 단순화하기 위한) 일 실시예에서, 스칼라 유닛(1108) 및 벡터 유닛(1110)은 별도의 레지스터 세트들(각각, 스칼라 레지스터(1112) 및 벡터 레지스터(1114))를 이용하고, 이들 사이에 전달된 데이터는 메모리에 기입되고, 그 후에 레벨 1(L1) 캐시(1106)로부터 다시 판독되는 반면에, 본 발명의 대안적 실시예들은 상이한 접근(예컨대, 단일 레지스터 세트를 이용하거나 또는 기입 및 다시 판독하는 것 없이 데이터가 두 개의 레지스터 파일들 사이에 전달되도록 하는 통신 경로를 포함함)을 이용할 수 있다.
L2 캐시의 로컬 서브셋(1104)은 프로세서 코어 당 하나씩 개별 로컬 서브셋들로 분할된 글로벌 L2 캐시의 부분이다. 각각의 프로세서 코어는 L2 캐시의 자신의 로컬 서브셋(1104)으로의 다이렉트 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 L2 캐시 서브셋(1104)에 저장되고, 자신의 로컬 L2 캐시 서브셋들에 액세스하고 있는 다른 프로세서 코어들과 병렬로 신속히 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 자신의 L2 캐시 서브셋(1104)에 저장되고, 필요하다면 다른 서브셋들로부터 플러싱된다. 링 네트워크는 공유된 데이터에 대한 일관성을 보장한다. 링 네트워크는 프로세서 코어들, L2 캐시들, 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 하기 위해 양방향성이다. 각각의 링 데이터 경로는 방향별로 1012 비트 폭이다.
도 11b는 본 발명의 실시예들에 따른 도 11a에서 프로세서 코어 부분의 확대도이다. 도 11b는 L1 캐시(1104)의 L1 데이터 캐시(1106A) 부분뿐만 아니라, 벡터 유닛(1110) 및 벡터 레지스터들(1114)에 대한 더 상세부분을 포함한다. 특히, 벡터 유닛(1110)은 16 폭 벡터 프로세싱 유닛(vector processing unit; VPU)(16 폭 ALU(1128) 참조)이고, VPU는 정수, 단정도 부동, 및 배정도 부동 명령어들 중 하나 이상을 실행한다. VPU는 스위즐 유닛(1120)을 포함한 레지스터 입력의 스위즐링, 수치 변환 유닛들(1122A 및 1122B)을 포함한 수치 변환, 및 메모리 입력 상의 복제 유닛(1124)을 포함한 복제를 지원한다. 기입 마스크 레지스터(1126)는 결과적 벡터 기입 프리디케이팅을 허용한다.
통합형 메모리 제어기 및 그래픽들을 포함한 프로세서
본 발명의 실시예들에 따라, 도 12는 두 개 이상의 코어를 가질 수 있고, 통합형 메모리 제어기를 가질 수 있고, 집적된 그래픽들을 가질 수 있는 프로세서(1200)의 블록도이다. 도 12의 실선 박스들은 단일 코어(1202A), 시스템 에이전트(1210), 한 세트의 하나 이상의 버스 제어기 유닛들(1216)을 포함하는 프로세서(1200)를 도시하는 반면에, 점선 박스들의 선택적 추가는 다중 코어들(1202A 내지 1202N), 시스템 에이전트 유닛(1210) 내의 한 세트의 하나 이상의 통합형 메모리 제어기 유닛(들)(1214), 및 특수 목적 로직(1208)을 갖는 대안적인 프로세서(1200)를 도시한다.
따라서, 프로세서(1200)의 상이한 구현들은, 1) 집적 그래픽들 및/또는 과학적(처리량) 로직(하나 이상의 코어들을 포함할 수 있음)들인 특수 목적 로직(1208), 및 하나 이상의 범용 코어들(예컨대, 범용 인-오더 코어들, 범용 아웃-오브-오더 코어들, 이들 둘의 조합)인 코어들(1202A-N)을 갖는 CPU, 2) 주로 그래픽들 및/또는 과학적 (처리량)을 위해 의도된 다수의 특수 목적 코어들인 코어들(1202A-N)을 갖는 코프로세서, 및 3) 다수의 범용 인-오더 코어들인 코어들(1202A-N)을 갖는 코프로세서를 포함할 수 있다. 따라서, 프로세서(1200)는, 예컨대, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(범용 그래픽 처리 유닛), 고-처리량 MIC(many integrated core) 코프로세서(30개 이상의 코어들을 포함함), 임베디드 프로세서 등과 같은 특수 목적 프로세서, 코프로세서 또는 범용 프로세서가 될 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1200)는 예컨대, BiCMOS, CMOS 또는 NMOS와 같은 임의의 다수의 프로세스 기술을 이용하는 하나 이상의 기판들의 일부가 되거나, 및/또는 이들 하나 이상의 기판상에 구현될 수 있다.
메모리 계층은 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(1206)의 세트, 및 통합 메모리 제어기 유닛들(1214)의 세트에 연결된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(1206)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4)와 같은 하나 이상의 중간 레벨 캐시들, 또는 다른 레벨의 캐시, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 인터커넥트 유닛(1212)은 집적 그래픽 로직(1208), 공유 캐시 유닛들(1206)의 세트, 및 시스템 에이전트 유닛(1210)/통합 메모리 제어기 유닛(들)(1214)를 상호접속하는 반면, 대안적인 실시예는 이러한 유닛들을 상호접속 하기 위한 임의의 수의 공지된 기술을 이용할 수 있다. 일 실시예에서, 코히어런시는 하나 이상의 캐시 유닛들(1206)과 코어들(1202-A-N) 사이에서 유지된다.
일부 실시예들에서, 하나 이상의 코어들(1202A-N)은 멀티쓰레딩을 할 수 있다. 시스템 에이전트(1210)는 그들의 컴포넌트 코디네이팅 및 동작 코어들(1202A-N)을 포함한다. 시스템 에이전트 유닛(1210)은 예컨대, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1202A-N) 및 집적 그래픽 로직(1208)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트들이 될 수 있고 또는 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속된 디스플레이들을 구동하기 위한 것이다.
코어들(1202A-N)은 아키텍처 명령어 세트의 측면에서 같은 종류이거나 다른 종류일 수 있고, 즉, 2개 이상의 코어들(1202A-N)은 동일한 명령어 세트를 실행할 수 있고, 다른 것들은 그 명령어 세트의 서브세트만을 실행할 수 있거나, 다른 명령어 세트를 실행할 수 있다.
예시적인 컴퓨터 아키텍처
도 13-16은 예시적인 컴퓨터 아키텍처의 블록도이다. 랩탑, 데스크탑, 핸드헬드 PC, PDA, 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치들, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋-탑 박스, 마이크로 컨트롤러, 셀 폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스에 대한 기술 분야에 알려진 다른 시스템 설계 및 구성들도 또한 적합하다. 일반적으로, 여기 개시된 바와 같이 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 거대한 다양한 시스템 또는 전자 디바이스들도 적합하다.
도 13을 참조하면, 본 발명의 일 실시예에 따른 시스템(1300)의 블록도가 도시된다. 시스템(1300)은 컨트롤러 허브(1320)에 연결된 하나 이상의 프로세서들(1310, 1315)을 포함할 수 있다. 일 실시예에서, 컨트롤러 허브(1320)는 그래픽 메모리 컨트롤러 허브(graphics memory controller hub; GMCH)(1390) 및 입력/출력 허브(Input/Output Hub; IOH)(1350)(별도의 칩들 상에 있을 수 있음)를 포함할 수 있다; GMCH(1390)는 메모리(1340) 및 코프로세서(1345)에 연결되는 그래픽 제어기들 및 메모리를 포함한다; IOH(1350)는 입력/출력(I/O) 디바이스들(1360)을 GMCH(1390)에 연결한다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 양쪽 모두는 (여기에서 설명된) 프로세서 내에 통합되고, 메모리(1340) 및 코프로세서(1345)는 프로세서(1310)에 직접 연결되고, IOH(1350)과 함께 하나의 칩에서 컨트롤러 허브(1320)에 직접 연결된다.
추가적인 프로세서들(1315)의 선택적 특성은 점선으로 도 13에서 도시된다. 각각의 프로세서(1310, 1315)는 여기에서 설명된 처리 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1200)의 일부 버전일 수 있다.
메모리(1340)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 2개의 결합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(1320)는 FSB(frontside bus)와 같은 멀티드롭 버스(multi-drop bus), QPI(QuickPath Interconnect)와 같은 포인트 대 포인트 인터페이스(point-to-point interface), 또는 유사한 연결(1395)을 통해 프로세서(들)(1310, 1315)와 통신한다.
일 실시예에서, 코프로세서(1345)는, 예를 들어 하이-스루풋(throughput) MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(1320)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처 특성, 마이크로아키텍처 특성, 열적 특성, 전력 소비 특성 등을 포함하는 이점의 다양한 척도의 관점에서, 물리적 리소스들(1310, 1315) 간에 다양한 차이가 존재할 수 있다.
일 실시예에서, 프로세서(1310)는 범용 타입의 데이터 프로세싱 동작을 제어하는 명령어들을 실행한다. 이들 명령어들 내에는 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(1310)는 이들 코프로세서 명령어들을 그 부착된 코프로세서(1345)에 의해 실행되어야 할 타입인 것으로 인식한다. 따라서, 프로세서(1310)는 코프로세서 버스 또는 그 외 인터커넥트 상에서 이들 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서(1345)에 발행한다. 코프로세서(들)(1345)는 수신된 코프로세서 명령어들을 받아 실행한다.
이제 도 14를 참조하면, 본 발명의 일 실시예에 따른 보다 구체적인 제1 예시적 시스템(1400)의 블록도가 도시되어 있다. 도 14에 도시된 바와 같이, 멀티프로세서 시스템(1400)은 포인트 투 포인트 인터커넥트 시스템이며, 또한 포인트 투 포인트 인터커넥트(1450)를 통해 결합된 제1 프로세서(1470)와 제2 프로세서(1480)를 포함한다. 프로세서들(1470 및 1480)의 각각은 프로세서(1200)의 특정 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1470 및 1480)은 각각 프로세서들(1310 및 1315)인 반면, 코프로세서(1438)는 코프로세서(1345)이다. 다른 실시예에서, 프로세서들(1470 및 1480)은 각각 프로세서(1310) 및 코프로세서(1345)이다.
통합 메모리 제어기(IMC) 유닛들(1472 및 1482)을 각각 포함하는 프로세서들(1470 및 1480)이 도시되어 있다. 또한, 프로세서(1470)는 자신의 버스 제어기 유닛들의 일부로서 포인트 투 포인트(P-P) 인터페이스들(1476 및 1478)을 포함하며, 마찬가지로, 제2 프로세서(1480)는 P-P 인터페이스들(1486 및 1488)을 포함한다. 프로세서들(1470, 1480) 각각은 포인트 투 포인트 인터페이스 회로들(1476, 1494, 1486, 1498)을 이용하여 개별 P-P 인터페이스들(1452, 1454)을 통해 칩셋(1490)과 정보를 교환할 수 있다. 칩셋(1490)은 고성능 인터페이스(1439)를 통해 코프로세서(1438)와 정보를 선택적으로 교환할 수 있다. 일 실시예에서, 코프로세서(1438)는, 예를 들어 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시 안됨)는 어느 하나의 프로세서 내에 포함되거나 또는 양자 모두의 프로세서들의 외부에 존재할 수 있지만, P-P 인터커넥트를 통해 프로세서들과 접속되어 있기 때문에, 어느 하나의 프로세서 또는 양자 모두의 프로세서의 로컬 캐시 정보는 프로세서가 저 전력 모드로 들어가면 공유 캐시에 저장될 수 있다.
칩셋(1490)은 인터페이스(1496)를 통해 제1 버스(1416)에 결합될 수 있다. 본 발명의 범위가 제한적이지는 않지만, 일 실시예에서, 제1 버스(1416)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스 또는 다른 제3 세대 I/O 인터커넥트 버스와 같은 버스일 수 있다.
도 14에 도시된 바와 같이, 제1 버스(1416)에는 제1 버스(1416)를 제2 버스(1420)와 결합시키는 버스 브릿지(1418)와 함께 다양한 I/O 디바이스들(1414)이 결합될 수 있다. 일 실시예에서, 코프로세서들, 하이-스루풋 MIC 프로세서들, GPGPU들, 가속기들(예를 들어, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서와 같은 하나 이상의 추가적인 프로세서(들)(1415)가 제1 버스(1416)에 결합된다. 일 실시예에서, 제2 버스(1420)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 제2 버스(1420)에는, 예를 들어 키보드 및/또는 마우스(1422), 통신 디바이스들(1427), 및 저장 유닛(1428), 예를 들어 디스크 드라이브 또는 명령어들/코드 및 데이터(1430)를 포함할 수 있는 다른 대용량 저장 장치 등을 포함하여 다양한 디바이스들이 결합될 수 있다. 또한, 오디오 I/O(1424)는 제2 버스(1420)에 결합될 수 있다. 다른 아키텍처도 가능하다는 것을 주목한다. 예를 들어, 도 14의 포인트 대 포인트 아키텍처 대신, 시스템은 멀티 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 15를 참조하면, 본 발명의 일 실시예에 따른 보다 구체적이고 예시적인 제2 시스템(1500)이 도시된다. 도 14 및 도 15에서 동일한 엘리먼트들에 대해서는 동일한 참조번호가 붙으며, 도 15가 불명확해지는 것을 피하기 위해, 도 15로부터 도 14의 일부 양태를 생략하였다.
도 15는 프로세서들(1470, 1480)이 각각 통합 메모리 및 I/O 제어 로직("CL")(1472, 1482)을 포함할 수 있다는 것을 도시한다. 따라서, CL(1472, 1482)은 통합 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 15는 메모리들(1432, 1434)이 CL(1472, 1482)에 연결될 뿐만 아니라, I/O 디바이스들(1514)이 제어 로직(1472, 1482)에 연결되는 것을 나타낸다. 레거시 I/O 디바이스들(1515)은 칩셋(1490)에 연결된다.
이제 도 16을 참조하면, 본 발명의 일 실시예에 따른 SoC(1600)의 블록도가 도시된다. 도 12의 유사 엘리먼트들은 유사 참조 번호를 갖는다. 또한, 파선 박스들은 더 진보한 SoC들의 선택적인 구성들이다. 도 16에서, 인터커넥트 유닛(들)(1602)은, 하나 이상의 코어들(202A-N)의 세트 및 공유된 캐시 유닛(들)(1206)을 포함하는 애플리케이션 프로세서(1610); 시스템 에이전트 유닛(1210); 버스 제어기 유닛(들)(1216); 통합 메모리 제어기 유닛(들)(1214); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1620) 또는 그들의 세트; SRAM 유닛(1630); DMA 유닛(1632); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(1640)에 연결된다. 일 실시예에서, 코프로세서(들)(1620)은, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이-스루풋 MIC 프로세서, 내장형 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메카니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 그러한 실행 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 스토리지 시스템(휘발성 및 비휘발성 메모리 및/또는 스토리지 엘리먼트들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 14에 도시된 코드(1430)와 같은 프로그램 코드는 본 명세서에 기술된 기능들을 수행하고 출력 정보를 생성하라는 명령어들을 입력하도록 적용될 수 있다. 출력 정보는 하나 이상의 출력 디바이스들에 공지의 방식으로 적용될 수 있다. 본 출원을 위해, 프로세싱 시스템은 예를 들어, DSP(digital signal processor), 마이크로제어기, ASIC(application specific integrated circuit) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고레벨의 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 또한, 프로그램 코드는, 필요하다면, 어셈블리 또는 기계 언어로 구현될 수 있다. 실제로, 본 명세서에 기술된 메카니즘들은 임의의 특별한 프로그램밍 언어로 범위가 한정되는 것은 아니다. 어떠한 경우라도, 언어는 컴파일러형(compiled) 또는 해석형(interpreted) 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 경우 머신으로 하여금 본 명세서에 기술된 기술들을 수행하기 위한 로직을 제작하게 하는 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체에 저장된 리프리젠테이션 명령어(representative instruction)들에 의해 구현될 수 있다. "IP 코어들"로 알려져 있는 그러한 리프리젠테이션들은, 로직 또는 프로세서를 실제로 제조하는 제조 머신들 내에 로딩하기 위해, 유형의 머신 판독가능 매체 상에 저장되고 다양한 고객들 또는 제조 공장들에 공급될 수 있다.
그러한 머신 판독가능한 저장 매체는, 하드 디스크들과, 플로피 디스크들, 광학 디스크들, CD-ROM들, CD-RW들 및 광자기 디스크들을 포함하는 임의의 다른 유형의 디스크와, ROM들, DRAM들 및 SRAM들과 같은 RAM들, EPROM들, 플래시 메모리들, EEPROM들, PCM, 자기 또는 광학 카드들, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는 머신 또는 디바이스에 의해 제조 또는 형성된 아티클들의 비일시적인 유형의 구성들을 포함할 수 있으며, 이에 한정되지 아니한다.
따라서, 본 발명의 실시예들은, 명령어들을 포함하거나 또는 설계 데이터, 예컨대 본 명세서에 기술된 구조, 회로, 장치, 프로세서 및/또는 시스템의 특징들을 정의하는 HDL(Hardware Description Language)을 포함하는 비-일시적인, 유형의 머신-판독 가능 매체를 더 포함한다. 이러한 실시예들은 프로그램 제품으로서 지칭될 수도 있다.
(이진 변환, 코드 모핑 등을 포함하는) 에뮬레이션
일부의 경우에, 명령어 변환기는 소스 명령어 세트로부터의 명령어를 타겟 명령어 세트로 변환하는 데 이용될 수 있다. 예를 들어, 명령어 변환기는 명령어를, 코어에 의해 처리될 하나 이상의 다른 명령어들로 (예컨대, 정적 이진 변환, 동적 컴파일링을 포함하는 동적 이진 변환을 이용하여) 변환(translate), 모핑(morph), 에뮬레이팅, 또는 그 외의 변환(convert)을 행할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서, 오프 프로세서, 또는 파트 온-파트 오프 프로세서 상에 존재할 수 있다.
도 17은 본 발명의 실시예들에 따른, 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 이용을 비교한 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수도 있다. 도 17은 고 레벨 언어(1702)의 프로그램이 x86 컴파일러(1704)를 이용하여 컴파일링되어, 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서에 의해 기본적으로 실행될 수 있는 x86 이진 코드(1706)를 생성하는 것을 보여준다. 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 얻기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 실재부(substantial portion) 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되도록 타겟팅된 애플리케이션들 또는 그 외 소프트웨어의 오브젝트 코드 버전을 호환가능하게 실행하거나 또는 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1704)는, 추가적인 링크 프로세싱(linkage processing)을 갖든 갖지 않든 간에 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서 상에서 실행될 수 있는 x86 이진 코드(1706)(예컨대, 오브젝트 코드)를 생성하도록 동작 가능한 컴파일러를 나타낸다. 마찬가지로, 도 17은 고 레벨 언어(1702)의 프로그램이 대안적인 명령어 세트 컴파일러(1708)를 이용하여 컴파일링되어, 적어도 하나의 x86 명령어 세트 코어(1714)를 갖지 않는 프로세서(예컨대, Sunnyvale, CA의 MIPS 테크놀로지의 MIPS 명령어 세트를 실행하는 및/또는 Sunnyvale, CA의 ARM 홀딩스의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안적인 명령어 세트의 이진 코드(1710)를 생성하는 것을 보여준다. 명령어 변환기(1712)는 x86 이진 코드(1706)를, x86 명령어 세트 코어(1714)를 갖지 않는 프로세서에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 이용된다. 이렇게 변환된 코드는 대안적인 명령어 세트 이진 코드(1710)와는 동일하지 않을 것인데, 그 이유는 이것을 가능하게 하는 명령어 변환기를 제작하는 것이 어렵기 때문이다; 그러나, 변환된 코드는 일반적인 동작을 완수할 것이며, 대안적인 명령어 세트로부터 명령어들을 구성할 것이다. 따라서, 명령어 변환기(1712)는 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 그 외 전자 디바이스로 하여금 x86 이진 코드(1706)를 실행 가능하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
다른 실시예들에서, 라이브러리 자신은 소프트웨어 모듈에 적합한 라이브러리 부분들의 세트를 선택하는 로직을 포함할 수 있다. 예를 들어, 라이브러리는 프로세서 특징 상태 레지스터를 판독하여, 소프트웨어 모듈이 주어진 오피 코드(opcode)에 대해 어떤 의미를 갖는지를 판정하고, 그 후 그 부분을 선택하고 제공할 수 있다.
도 1, 도 4, 및 도 5 중 어느 하나에 대해 기술된 컴포넌트들, 특징들, 및 세부 사항들은 도 2 및 도 3 중 어떤 도면에도 선택적으로 이용될 수 있다. 또한, 임의의 장치에 대해 본 명세서에 기술된 컴포넌트들, 특징들, 및 세부 사항들은 본 명세서에 기술된 방법들 중 어느 것에도 선택적으로 이용될 수 있으며, 또한 실시예들에서, 그러한 장치에 의해, 그리고/또는 그러한 장치와 함께 수행될 수도 있다.
예시적인 실시예들
이하의 예들은 추가적인 실시예에 속한다. 본 예들의 특정 사항들은 하나 이상의 실시예들 중 어느 실시예에서나 이용될 수 있다.
예 1은, 제1 명령어를 수신하며 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직을 포함하는 프로세서이다. 프로세서는 또한, 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직을 포함한다. 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중에서 한 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리한다.
예 2는 예 1의 프로세서를 포함하며, 선택적으로 예 2에서, 제1 명령어는, 제1 명령어가 수행되야 할 보다 많은 동작을 수반한다는 점에서, 세트의 각각의 명령어보다 복잡하다.
예 3은 예 1-2 중 어느 한 프로세서를 포함하며, 선택적으로 예 3에서, 프로세서는 명령어 세트 중에서 임의의 명령어들을 구현하기 위한 마이크로코드를 사용하지 않는다.
예 4는 예 1-3 중 어느 한 프로세서를 포함하며, 선택적으로 예 4에서, 하나 이상의 명령어들의 세트 중 각각의 명령어는 제1 명령어와 동일한 명령어 세트를 갖는다.
예 5는 예 1-4 중 어느 한 프로세서를 포함하며, 선택적으로 예 5에서, 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 하나 이상의 제어 신호들을 처리하는 동안 일어날 예외 조건을 에뮬레이션 로직에 보고하기 위한 에뮬레이션 모드 인식 예외 조건 핸들러 로직을 포함한다.
예 6은 예 1-5 중 어느 한 프로세스를 포함하며, 선택적으로 예 6에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 제1 명령어의 어드레스를 스택에 저장한다.
예 7은 예 1-6 중 어느 한 프로세서를 포함하며, 선택적으로 예 7에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 예외 조건의 표시 및 예외 조건에 대한 에러 코드를 에뮬레이션 로직에 결합된 하나 이상의 레지스터에 저장한다.
예 8은 예 1-7 중 어느 한 프로세서를 포함하며, 선택적으로 예 8에서, 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 예외 조건에 응답하여 예외 조건 핸들러에 제어를 직접 전달하는 것을 방지하기 위한 것이며, 에뮬레이션 로직의 하나 이상의 명령어들은 예외 조건 핸들러에 제어를 전달하기 위한 것이다.
예 9는 예 1-8 중 어느 한 프로세서를 포함하며, 선택적으로 예 9에서, 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 하나 이상의 제어 신호에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 제어하기 위한 에뮬레이션 모드 인식 액세스 제어 로직을 포함한다.
예 10은 예 1-9 중 어느 한 프로세서를 포함하며, 선택적으로 예 10에서, 에뮬레이션 모드 인식 액세스 제어 로직은, 에뮬레이션 모드에 있을 경우에 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하며, 에뮬레이션 모드에 있지 않을 경우에 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지한다.
예 11은 예 1-10 중 어느 한 프로세서를 포함하며, 선택적으로 예 11에서, 리소스 및 정보 중 적어도 하나는, 보안 로직, 보안 정보, 암호화 로직, 암호해제 로직, 난수 발생기 로직, 운영 체제가 액세스하고자 예약한 로직, 운영 체제가 액세스하고자 예약한 메모리의 부분, 및 운영 체제가 액세스하고자 예약한 정보 중 적어도 하나를 포함한다.
예 12는 예 1-11 중 어느 한 프로세서를 포함하며, 선택적으로 예 12에서, 리소스 및 정보 중 적어도 하나는 다른 로직 프로세서 및 다른 물리 프로세서 중 하나에서의 리소스 및 정보 중 적어도 하나를 포함한다.
예 13은 예 1-12 중 어느 한 프로세서를 포함하며, 선택적으로 예 13에서, 하나 이상의 명령어들의 세트는 적어도 3개의 명령어들을 포함한다.
예 14는 제1 명령어를 수신하는 단계와, 제1 명령어를 에뮬레이트하도록 결정하는 단계를 포함하는 프로세서에서의 방법이다. 방법은 또한, 제1 명령어를 에뮬레이트하는데 사용될 하나 이상의 명령어들의 세트를 수신하는 단계를 포함한다. 방법은 또한 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 세트의 명령어로부터 도출된 하나 이상의 제어 신호를 처리하는 단계를 포함한다.
예 15는 예 14의 방법을 포함하며, 선택적으로 예 15에서, 제1 명령어를 수신하는 단계는 하나 이상의 명령어들의 세트 중 각각의 명령어보다 복잡한 제1 명령어를 수신하는 단계를 포함한다.
예 16은 예 14-15 중 어느 한 방법을 포함하며, 선택적으로 예 16에서, 하나 이상의 명령어들의 세트를 수신하는 단계는 제1 명령어와 동일한 명령어 세트 중 각각의 명령어인 하나 이상의 명령어들을 수신하는 단계를 포함한다.
예 17은 예 14-16 중 어느 한 방법을 포함하며, 선택적으로 예 17에서, 처리하는 단계는, 하나 이상의 제어 신호를 처리하는 동안 일어나는 예외 조건을 에뮬레이션 로직에 보고하는 단계를 포함한다. 또한, 선택적으로 에뮬레이션 로직의 하나 이상의 명령어들을 실행하여 예외 조건 핸들러에 제어를 전달한다.
예 18은 예 14-17 중 어느 한 방법을 포함하며, 선택적으로 예 18에서, 보고하는 단계는, 예외 조건의 표시를 하나 이상의 레지스터들에 저장하는 단계를 포함한다. 또한, 선택적으로 제1 명령어의 어드레스를 스택에 저장한다.
예 19는 예 14-18 중 어느 한 방법을 포함하며, 선택적으로 예 19에서, 처리하는 단계는, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 하나 이상의 제어 신호에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 제어하는 단계를 포함한다.
예 20은 예 14-19 중 어느 한 방법을 포함하며, 선택적으로 예 20에서, 상이하게 액세스를 제어하는 단계는, 에뮬레이션 모드에 있을 경우에 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하는 단계를 포함한다. 또한, 선택적으로, 에뮬레이션 모드에 있지 않을 경우에 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지한다.
예 21은 인터커넥트와 인터커넥트에 결합된 프로세서를 포함하는, 명령어를 처리하기 위한 시스템이다. 프로세서는 제1 명령어를 수신하며, 제1 명령어가 에뮬레이트 되는지를 결정하기 위한 디코드 로직을 포함한다. 프로세서는 또한 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직을 포함한다. 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중에서 한 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리한다. 시스템은 또한 인터커넥트에 결합된 DRAM을 포함한다.
예 22는 예 21의 시스템을 포함하며, 선택적으로 예 22에서, 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 하나 이상의 제어 신호를 처리하는 동안 일어날 예외 조건을 에뮬레이션 로직에 보고하기 위한 에뮬레이션 모드 인식 예외 조건 핸들러 로직을 포함한다.
예 1은 주어진 오피코드(opcode)를 갖는 제1 명령어를 수신하기 위한 디코더를 포함하는 프로세서이다. 디코더는 주어진 오피코드가 제1 의미 또는 제2 의미를 갖는지 체크하기 위한 체크 로직을 포함한다. 디코더는 또한 제1 명령어를 디코딩하기 위한 디코드 로직을 포함하며, 주어진 오피코드가 제1 의미를 갖는 경우 하나 이상의 대응하는 제어 신호를 출력한다. 디코더는 또한 주어진 오피코드가 제2 의미를 갖는 경우 제1 명령어의 에뮬레이션을 유도하기 위한 에뮬레이션 유도 로직을 포함한다.
예 2는 예 1의 프로세서를 포함하며, 선택적으로 예 2에서, 제2 의미는 제1 의미보다 오래된 것이다.
예 3은 예 1-2 중 어느 한 프로세서를 포함하며, 선택적으로 예 3에서, 제2 의미는 디프리케이트(deprecate)되는 중인 오피코드 정의를 포함한다.
예 4는 예 1-3 중 어느 한 프로세서를 포함하며, 선택적으로 예 4에서는 주어진 오피코드가 제1 의미 또는 제2 의미를 갖는지를 나타내는 표시(indication)를 저장하기 위해 디코더에 결합된 저장 위치를 더 포함한다. 체크 로직은 표시를 결정하기 위해 저장 위치를 체크한다.
예 5는 예 1-4 중 어느 한 프로세서를 포함하며, 선택적으로 예 5에서, 저장 위치는 프로그램 로더 모듈에 액세스가능하여, 프로그램 로더 모듈이 표시를 저장 위치에 저장하는 것을 허용한다.
예 6은 예 1-5 중 어느 한 프로세서를 포함하며, 선택적으로 예 6에서는 표시를 저장 위치에서 프로세서 특징 레지스터에 저장하기 위해 저장 위치에 결합된 로직을 더 포함하며, 프로세서 특징 레지스터는 제1 명령어의 명령어 세트 중 프로세서 특징 식별 명령어에 의해 판독가능하다.
예 7은 예 1-6 중 어느 한 프로세서를 포함하며, 선택적으로 예 7에서는 복수의 표시를 저장하기 위해 디코더에 결합된 복수의 저장 위치를 더 포함하며, 각각의 표시는 복수의 오피코드 중 상이한 오피코드에 대응하며, 각각의 표시는 각각의 오피코드가 제1 의미 또는 제2 의미를 갖는지를 표시한다.
예 8은 예 1-7 중 어느 한 프로세서를 포함하며, 선택적으로 예 8에서, 에뮬레이션을 유도하기 위한 로직은 에뮬레이션 모드를 설정하기 위한 로직을 포함한다.
예 9는 예 1-8 중 어느 한 프로세서를 포함하며, 선택적으로 예 9에서는 디코더에 결합된 에뮬레이션 로직을 더 포함하며, 에뮬레이션 로직은 에뮬레이션을 유도하는 에뮬레이션 유도 로직에 응답하여 하나 이상의 명령어의 세트를 디코더에 제공하여 주어진 오피코드가 제2 의미를 갖는 경우 제1 명령어를 에뮬레이트한다.
예 10은 예 1-9 중 어느 한 프로세서를 포함하며, 선택적으로 예 10에서, 각각의 명령어 세트는 제1 명령어와 동일한 명령어 세트를 가진다.
예 11은 예 1-10 중 어느 한 프로세서를 포함하며, 선택적으로 예 11에서, 프로세서는 명령어 세트 중 임의의 명령어를 구현하기 위한 마이크로코드를 사용하지 않는다.
예 12는 예 1-11 중 어느 한 프로세서를 포함하며, 선택적으로 예 12에서는 특권(privilege) 레벨 로직 및 링 레벨 로직 중 하나가 운영 체제 모드를 나타내는 경우 디코더에게 주어진 오프코드에 대해 디프리케이트된 의미 대신에 새로운 의미를 사용하게 강제하는 로직을 더 포함한다.
예 13은 주어진 오피코드를 갖는 제1 명령어를 수신하는 단계와, 주어진 오피코드가 제1 의미 대신에 제2 의미를 갖는지 결정하는 단계를 포함하는, 프로세서에서의 방법이다. 방법은 또한 주어진 오피코드가 제2 의미를 갖는다고 결정한 것에 응답하여 제1 명령어를 에뮬레이트하도록 결정하는 단계를 포함한다.
예 14는 예 13의 방법을 포함하며, 선택적으로 예 14에서, 결정하는 단계는 주어진 오피코드가 제1 의미보다 오래된 제2 의미를 갖는다고 결정하는 단계를 포함하며, 제2 의미는 디프리케이트되는 중이다.
예 15는 예 13-14 중 어느 한 방법을 포함하며, 선택적으로 예 15에서, 결정하는 단계는 주어진 오피코드가 제2 의미를 가진다는 표시를 저장 위치로부터 판독하는 단계를 포함한다.
예 16은 예 13-15 중 어느 한 방법을 포함하며, 선택적으로 예 16에서는 주어진 오피코드가 제2 의미를 갖는다는 표시를, 프로세서의 명령어 세트 중 프로세서 특징 식별 명령어에 의해 판독가능한 프로세서 특징 레지스터에 저장하는 단계를 포함한다.
예 17은 예 13-16 중 어느 한 방법을 포함하며, 선택적으로 예 17에서는 주어진 오피코드가 제2 의미를 갖는 경우 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트를 디코딩하는 단계를 포함하는, 제1 명령어를 에뮬레이트하는 단계를 더 포함한다.
예 18은 예 13-17 중 어느 한 방법을 포함하며, 선택적으로 예 18에서, 명령어들의 세트를 디코딩하는 단계는 제1 명령어와 동일한 명령어 세트인 하나 이상의 명령어들을 디코딩하는 단계를 포함한다.
예 19는 예 13-18 중 어느 한 방법을 포함하며, 선택적으로 예 19에서, 프로세서는 명령어 세트 중 임의의 명령어를 구현하기 위한 마이크로코드를 사용하지 않음을 수행한다.
예 20은 머신에 의해 실행되는 경우 머신에 의해 다음의 동작들을 수행하게 하기 위한 명령어를 저장한 비일시적 머신 판독가능한 저장 매체를 포함하는 제조물이다. 동작들은, 소프트웨어 모듈의 메타데이터를 검사함으로써 소트트웨어 모듈로부터 프로세서에 의해 실행되는 경우 주어진 오피코드를 가진 제1 명령어가 제1 의미 대신에 제2 의미를 가진다고 결정하는 동작을 포함한다. 동작들은 또한 주어진 오피코드를 갖는 제1 명령어가 프로세서의 상태에서 제2 의미를 갖는다는 표시를 저장하는 동작을 포함한다.
예 21은 예 20의 제조물을 포함하며, 선택적으로 예 21에서, 머신 판독가능한 저장 매체는, 머신에 의해 실행되는 경우, 주어진 오피코드의 제1 의미를 이용하는 소프트웨어 라이브러리의 다른 부분 대신에 주어진 오피코드의 제2 의미를 이용하는 소프트웨어 라이브러리의 일부를 선택하는 동작과, 소프트웨어 라이브러리의 선택된 부분을 소프트웨어 모듈에 제공하는 동작을 포함하는 동작들을 머신이 수행하게 하는 명령어를 더 저장하며, 제2 의미는 디프리케이트된 의미이다.
예 22는 예 20-21 중 어느 한 제조물을 포함하며, 선택적으로 예 22에서, 머신 판독가능한 저장 매체는, 머신에 의해 실행되는 경우, 주어진 오피코드가 소프트웨어 모듈의 나이에 기초해서 제2 의미를 갖는다고 결정하는 동작을 포함하는 동작들을 머신이 수행하게 하는 명령어를 더 저장한다.
예 23은 예 20-22 중 어느 한 제조물을 포함하며, 선택적으로 예 23에서, 머신 판독가능한 저장 매체는, 머신에 의해 실행되는 경우, 오브젝트 모듈 포맷에서 플래그를 검사하는 동작과 표시를 플래그에 저장하는 동작을 포함하는 동작들을 머신이 수행하게 하는 명령어를 프로세서의 레지스터에 더 저장한다.
예 24는 인터커넥트와 인터커넥트에 결합된 프로세서를 포함하는, 명령어를 처리하기 위한 시스템이다. 프로세서는 주어진 오피코드를 갖는 제1 명령어를 수신한다. 프로세서는 주어진 오피코드가 제1 의미 또는 제2 의미를 갖는지 체크하기 위한 체크 로직을 포함한다. 프로세서는 제1 명령어를 디코딩하며, 주어진 오피코드가 제1 의미를 갖는 경우 하나 이상의 대응하는 제어 신호를 출력하기 위한 디코드 로직을 포함한다. 프로세서는 주어진 오피코드가 제2 의미를 갖는 경우 제1 명령어의 에뮬레이션을 유도하기 위한 에뮬레이션 유도 로직을 포함한다. 시스템은 또한 인터커넥트에 결합된 DRAM을 포함한다.
예 25는 예 24의 시스템을 포함하며, 선택적으로 예 25에서는 제1 명령어와 동일한 명령어 세트 중 하나 이상의 명령어들의 세트를 디코더에 제공하여 주어진 오피코드가 제2 의미를 갖는 경우 제1 명령어를 에뮬레이트하기 위한 에뮬레이션 로직을 더 포함한다.
예 26은 예 13-19 중 어느 한 방법을 수행하는 장치를 포함한다.
예 27은 예 13-19 중 어느 한 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
예 28은 본 명세서에서 실질적으로 기술된 바와 같이, 방법을 수행하기 위한 장치를 포함한다.
예 29는 본 명세서에서 기술된 바와 같이, 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
발명의 상세한 설명과 청구항들에서, "결합된(coupled)" 및 "연결된(connected)"이라는 용어가 그에 대한 파생어들과 함께 사용되었을 수 있다. 이러한 용어들이 서로에 대한 동의어가 아니라는 것이 이해되어야 한다. 오히려, 특정 실시예에서, "연결된"은 두 개 이상의 요소들이 서로에 대해 직접적인 물리적 또는 전기적 접촉 상태라는 것을 나타내는 데에 사용될 수 있다. "결합된"은 두 개 이상의 요소들이 직접적인 물리적 또는 전기적 접촉 상태인 것을 의미할 수 있다. 그러나, "결합된"은 두 개 이상의 요소들이 서로에 대해 직접적인 접촉 상태는 아니지만, 서로에 대해 협력(co-operate) 또는 상호작용하는 상태인 것도 의미할 수 있다. 예를 들어, 제1 컴포넌트와 제2 컴포넌트는 개재 컴포넌트를 통해서 서로 결합될 수 있다. 도면들에서 양방향 화살표들은 양방향 접속부들과 결합부들을 도시하는 데에 사용된다.
발명의 상세한 설명 및 청구항들에서 "로직"이라는 용어가 사용되었을 수 있다. 본 명세서에서 사용된 바와 같이, 로직은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합을 포함할 수 있다. 로직의 예는 집적회로, 주문형 반도체, 아날로그 회로, 디지털 회로, 프로그래밍된 로직 장치, 명령어들을 포함하는 메모리 장치 등을 포함한다. 일부 실시예들에서, 하드웨어 로직은 가능한 그 외의 회로 구성 요소들과 함께 트랜지스터들 및/또는 게이트들을 포함할 수 있다.
용어 "및/또는"이 사용되었을 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "및/또는"은 하나 또는 그 외 또는 모두(예컨대, A 및/또는 B는 A 또는 B 또는 A와 B 모두를 의미함)를 의미할 수 있다.
위의 발명의 상세한 설명에서, 설명을 위한 목적으로, 본 발명의 실시예들의 완벽한 이해를 제공하기 위해 수 개의 특정한 상세들이 제시되었다. 그러나, 당업자에게는 하나 이상의 그 외의 실시예들이 일부 이러한 구체적인 상세들 없이도 실행될 수 있다는 것이 이해될 것이다. 기술된 특정 실시예들은 본 발명을 제한하기 위함이 아닌, 예시적인 실시예들을 통해 설명하기 위해 제공된다. 본 발명의 범위는 구체적인 예들이 아닌, 청구항들에 의해서만 결정된다. 그 외의 예들에서는, 발명의 상세한 설명에 대한 이해를 방해하는 것을 방지하기 위해 공지된 회로들, 구조들, 장치들, 및 동작들은 블록도의 형태로 또는 상세 없이 도시되었다.
적합하다고 고려되는 경우, 참조 번호들 또는 참조번호들의 말단부는 다르게 명시되거나 또는 명백하게 다른 것이 아닌 이상, 유사한 또는 동일한 특징들을 선택적으로 가질 수 있는, 대응하는 또는 유사한 요소들을 나타내기 위해 도면들 사이에서 반복되었다. 복수의 구성요소들이 기술된 일부 경우들에서는 이러한 복수의 구성요소들이 하나의 구성요소로 통합될 수 있다. 단일 구성요소가 기술된 그 외의 경우에는, 이러한 단일 구성요소는 복수의 구성요소들로 분리될 수 있다.
다양한 동작들 및 방법들이 기술되었다. 일부 방법들은 플로우 다이어그램들에서 상대적으로 기본적인 형태로 기술되었으나, 동작들은 선택적으로 방법들에 추가될 수 있고, 및/또는 방법들로부터 제거될 수 있다. 또한, 플로우 다이어그램들이 예시적인 실시예들에 따른, 동작들의 특정 순서를 도시하지만, 이러한 특정 순서는 예시적이다. 대안적인 실시예들은 선택적으로, 동작들을 상이한 순서로 수행하거나, 특정 동작들을 조합하거나, 특정 동작들을 반복할 수 있다.
일부 실시예들은 머신-판독가능한 매체를 포함하는 제조물(예컨대, 컴퓨터 프로그램 제품)을 포함한다. 매체는 머신에 의해 판독가능한 형태의 정보를 제공, 예컨대 저장하는 매커니즘을 포함할 수 있다. 머신-판독가능한 매체는 머신에 의해 실행되는 경우에, 머신으로 하여금 본 명세서에 개시된 동작들, 방법들, 또는 기법들 중 하나 이상을 수행하도록 동작하는 것이 가능한 명령어 또는 일련의 명령어들을 제공하거나 또는 저장하고 있을 수 있다. 적합한 머신들의 예는 프로세서, 명령어 프로세싱 장치, 디지털 로직 회로, 집적 회로 등을 포함하나, 이것에 국한되지는 않는다. 또한, 적합한 머신들의 그 외의 예들은 이러한 프로세서, 명령어 프로세싱 장치, 디지털 로직 회로, 또는 집적회로를 통합하는 컴퓨팅 장치 및 그 외의 전자 장치를 포함한다. 이러한 컴퓨팅 장치 및 전자 장치의 예는 데스크탑 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 넷북, 스마트폰, 셀룰러 폰, 서버, 네트워크 장치(예컨대, 라우터 및 스위치), MID(Mobile Internet Device), 미디어 플레이어, 스마트 텔레비전, 넷탑, 셋톱 박스, 및 비디오 게임 제어기를 포함하나 이것에 국한되지는 않는다.
일부 실시예들에서, 머신-판독가능한 매체는 유형의 및/또는 비일시적인 머신-판독가능한 저장 매체를 포함할 수 있다. 예를 들어, 유형의 및/또는 비일시적인 머신-판독가능한 저장 매체는 플로피 디스켓, 광 저장 매체, 광 디스크, 광 데이터 스토리지 장치, CD-ROM, 자기 디스크, 광자기 디스크, ROM(read only memory), PROM(programmable ROM), EPROM(erasable-and-programmable ROM), EEPROM(electrically-erasable-and-programmable ROM), RAM(random access memory), SRAM(static-RAM), DRAM(dynamic-RAM), 플래시 메모리, 상 변환 메모리(phase-change memory), 상 변환 데이터 스토리지 물질, 비휘발성 메모리, 비일시적 메모리, 비일시적 데이터 스토리지 장치 등을 포함할 수 있다. 비일시적 머신-판독가능한 저장 매체는 일시적으로 전파되는 신호로 구성되지 않는다.
본 명세서에 걸친, "일 실시예", "실시예", "하나 이상의 실시예들"에 대한 참조는, 예컨대 특정한 특징이 본 발명의 실행에 포함될 수 있다는 것을 의미한다는 것이 이해될 것이다. 유사하게, 발명의 상세한 설명에서, 다양한 특징들은 본 명세를 간소화하고 본 발명의 다양한 양태들의 이해를 돕기 위한 목적으로 때때로 단일의 실시예, 도면, 또는 이들에 대한 설명으로 같이 그룹화된다는 것이 이해될 것이다. 그러나, 이와 같은 개시 방식은 본 발명이 각 청구항에 명확히 인용된 것 이상의 특징을 요구하려는 의도를 반영하는 것으로 해석되지 않아야 한다. 그보다는, 이하의 청구항들이 나타내는 바와 같이, 본 발명의 양태들은 개시된 단일 실시예의 모든 특징들보다 적게 포함되어 있을 수 있다. 따라서, 발명의 상세한 설명에 후속하는 청구항들은 본 발명의 상세한 설명에 명확히 포함되며, 각 청구항은 개별적인 본 발명의 실시예로서 그 자체를 대표한다.

Claims (32)

  1. 명령어 에뮬레이션을 위한 프로세서로서,
    제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직과,
    상기 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드(emulation mode aware post-decode) 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어를 에뮬레이트하는데 사용되는 상기 제1 명령어와 동일한 명령어 세트 중 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고, 상기 제1 명령어는 상기 하나 이상의 명령어들의 세트의 각각의 명령어보다 수행되는 동작들을 더 많이 수반한다는 점에서 상기 제1 명령어는 상기 하나 이상의 명령어들의 세트의 각각의 명령어보다 복잡한, 프로세서.
  2. 삭제
  3. 제1항에 있어서,
    상기 프로세서는 상기 명령어 세트 중에서 임의의 명령어들을 구현하기 위한 마이크로코드를 사용하지 않는, 프로세서.
  4. 삭제
  5. 제1항 및 제3항 중 어느 한 항에 있어서,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 상기 하나 이상의 제어 신호를 처리하는 동안 일어나는 예외 조건을 에뮬레이션 로직에 보고하기 위한 에뮬레이션 모드 인식 예외 조건 핸들러 로직(emulation mode aware exceptional condition handler logic)을 포함하는, 프로세서.
  6. 제5항에 있어서,
    상기 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 상기 제1 명령어의 어드레스를 스택에 저장하기 위한 것인, 프로세서.
  7. 제5항에 있어서,
    상기 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 상기 예외 조건의 표시(indication) 및 상기 예외 조건에 대한 에러 코드를 상기 에뮬레이션 로직에 결합된 하나 이상의 레지스터에 저장하기 위한 것인, 프로세서.
  8. 제5항에 있어서,
    상기 에뮬레이션 모드 인식 예외 조건 핸들러 로직은 상기 예외 조건에 응답하여 예외 조건 핸들러에 제어를 직접 전달하는 것을 방지하기 위한 것이며, 상기 에뮬레이션 로직의 하나 이상의 명령어들은 상기 예외 조건 핸들러에 제어를 전달하기 위한 것인, 프로세서.
  9. 제1항 및 제3항 중 어느 한 항에 있어서,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 상기 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 하나 이상의 제어 신호에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 제어하기 위한 에뮬레이션 모드 인식 액세스 제어 로직을 포함하는, 프로세서.
  10. 제9항에 있어서,
    상기 에뮬레이션 모드 인식 액세스 제어 로직은, 상기 에뮬레이션 모드에 있을 경우 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하며, 상기 에뮬레이션 모드에 있지 않을 경우 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지하기 위한 것인, 프로세서.
  11. 제10항에 있어서,
    상기 리소스 및 정보 중 적어도 하나는, 보안 로직, 보안 정보, 암호화 로직, 암호해제 로직, 난수 발생기 로직, 운영 체제가 액세스하고자 예약한 로직, 운영 체제가 액세스하고자 예약한 메모리의 부분, 및 운영 체제가 액세스하고자 예약한 정보 중 적어도 하나를 포함하는, 프로세서.
  12. 제10항에 있어서,
    상기 리소스 및 정보 중 적어도 하나는 다른 로직 프로세서 및 다른 물리 프로세서 중 하나에서의 리소스 및 정보 중 적어도 하나를 포함하는, 프로세서.
  13. 제1항 및 제3항 중 어느 한 항에 있어서,
    상기 하나 이상의 명령어들의 세트는 적어도 3개의 명령어들을 포함하는, 프로세서.
  14. 프로세서에서의 방법으로서,
    제1 명령어를 수신하는 단계와,
    상기 제1 명령어를 에뮬레이트하도록 결정하는 단계와,
    상기 제1 명령어와 동일한 명령어 세트 중 상기 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트를 수신하는 단계와,
    에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 세트의 명령어로부터 도출된 하나 이상의 제어 신호를 처리하는 단계
    를 포함하고, 상기 제1 명령어를 수신하는 단계는 하나 이상의 명령어들의 세트 중 각각의 명령어보다 복잡한 제1 명령어를 수신하는 단계를 포함하는, 방법.
  15. 삭제
  16. 삭제
  17. 제14항에 있어서,
    상기 처리하는 단계는,
    상기 하나 이상의 제어 신호를 처리하는 동안에 일어나는 예외 조건을 에뮬레이션 로직에 보고하는 단계와,
    상기 에뮬레이션 로직의 하나 이상의 명령어들을 실행하여 예외 조건 핸들러에 제어를 전달하는 단계를 포함하는, 방법.
  18. 제17항에 있어서,
    상기 보고하는 단계는,
    상기 예외 조건의 표시를 하나 이상의 레지스터들에 저장하는 단계와,
    상기 제1 명령어의 어드레스를 스택에 저장하는 단계를 포함하는, 방법.
  19. 제14항에 있어서,
    상기 처리하는 단계는, 상기 에뮬레이션 모드에 있을 경우에는 상기 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 하나 이상의 제어 신호에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 제어하는 단계를 포함하는, 방법.
  20. 제19항에 있어서,
    상이하게 액세스를 제어하는 단계는,
    상기 에뮬레이션 모드에 있을 경우에 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하는 단계와,
    상기 에뮬레이션 모드에 있지 않을 경우에 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지하는 단계를 포함하는, 방법.
  21. 명령어를 처리하기 위한 시스템으로서,
    인터커넥트와,
    상기 인터커넥트에 결합된 프로세서와,
    상기 인터커넥트에 결합된 DRAM(dynamic random access memory)
    을 포함하며, 상기 프로세서는,
    제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직과,
    상기 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 상기 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어와 동일한 명령어 세트 중 상기 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고, 상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 상기 하나 이상의 제어 신호를 처리하는 동안에 일어나는 예외 조건을 에뮬레이션 로직에 보고하기 위한 에뮬레이션 모드 인식 예외 조건 핸들러 로직을 포함하는, 시스템.
  22. 삭제
  23. 제14항 및 제17항 내지 제20항 중 어느 한 항에 기재된 방법을 수행하기 위한, 명령어 에뮬레이션을 위한 장치.
  24. 제14항 및 제17항 내지 제20항 중 어느 한 항에 기재된 방법을 수행하기 위한 수단을 포함하는, 명령어 에뮬레이션을 위한 장치.
  25. 제1항 및 제3항 중 어느 한 항에 기재된 프로세서와 상기 프로세서에 결합된 DRAM을 포함하는, 명령어 에뮬레이션을 위한 시스템.
  26. 제1항 및 제3항 중 어느 한 항에 있어서,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 하나 이상의 제어 신호와 연관된 예외 조건을 핸들링하고, 상기 하나 이상의 제어 신호가 그로부터 디코딩된 상기 명령어의 주소 대신에 상기 제1 명령어의 주소를 스택 상에 저장하기 위한 것인, 프로세서.
  27. 제1 명령어를 에뮬레이트하기 위한 프로세서로서,
    상기 제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직과,
    상기 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 상기 하나 이상의 제어 신호를 처리하는 동안에 일어나는 예외 조건을 에뮬레이션 로직에 보고하기 위한 에뮬레이션 모드 인식 예외 조건 핸들러 로직을 포함하고, 상기 에뮬레이션 로직은 예외 조건 핸들러에 제어를 전달하기 위한 것인, 프로세서.
  28. 제27항에 있어서,
    상기 하나 이상의 명령어들의 세트는 상기 제1 명령어와 동일한 명령어 세트에 속하는, 프로세서.
  29. 명령어들을 에뮬레이트할 수 있는 프로세서로서,
    제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직과,
    상기 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 상기 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 하나 이상의 제어 신호에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 제어하기 위한 에뮬레이션 모드 인식 액세스 제어 로직을 포함하며,
    상기 에뮬레이션 모드 인식 액세스 제어 로직은, 상기 에뮬레이션 모드에 있을 경우 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하며, 상기 에뮬레이션 모드에 있지 않을 경우 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지하기 위한 것인, 프로세서.
  30. 제29항에 있어서,
    상기 하나 이상의 명령어들의 세트는 상기 제1 명령어와 동일한 명령어 세트에 속하는, 프로세서.
  31. 명령어 에뮬레이션을 위한 프로세서로서,
    상기 제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 유닛 - 상기 프로세서는 상기 제1 명령어를 구현하기 위한 마이크로코드를 사용하지 않음 - ; 및
    상기 디코드 유닛에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어를 에뮬레이트하는데 사용되고 상기 제1 명령어와 동일한 명령어 세트에 속하는 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고, 상기 제1 명령어는 수행되는 동작들을 더 많이 수반한다는 점에서 상기 제1 명령어는 상기 세트의 각각의 명령어보다 복잡하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은 상기 에뮬레이션 모드에 있을 경우 상기 하나 이상의 제어 신호들에 의한 리소스 및 정보 중 적어도 하나에 대한 액세스를 허용하며, 상기 에뮬레이션 모드에 있지 않을 경우 상기 하나 이상의 제어 신호들에 의한 상기 리소스 및 정보 중 적어도 하나에 대한 액세스를 방지하도록 동작하고, 상기 리소스 및 정보 중 적어도 하나는 보안 로직, 보안 정보, 암호화 로직, 암호해제 로직 및 난수 발생기 로직 중 적어도 하나를 포함하는, 프로세서.
  32. 명령어 에뮬레이션을 위한 프로세서로서,
    제1 명령어를 수신하며, 상기 제1 명령어가 에뮬레이트되는지를 결정하기 위한 디코드 로직 - 상기 프로세서는 상기 제1 명령어를 구현하기 위한 마이크로코드를 사용하지 않음 - ; 및
    상기 디코드 로직에 결합된 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직
    을 포함하며,
    상기 에뮬레이션 모드 인식 포스트-디코드 명령어 프로세서 로직은, 에뮬레이션 모드에 있을 경우에는 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 제1 명령어를 에뮬레이트하는데 사용되는 하나 이상의 명령어들의 세트 중 하나의 명령어로부터 디코딩된 하나 이상의 제어 신호를 처리하고, 상기 제1 명령어는 수행되는 동작들을 더 많이 수반한다는 점에서 상기 제1 명령어는 상기 세트의 각각의 명령어보다 복잡하며, 상기 에뮬레이션 모드에 있을 경우에는 상기 에뮬레이션 모드에 있지 않을 경우와는 상이하게, 상기 하나 이상의 제어 신호와 연관된 예외 조건을 핸들링하고, 상기 하나 이상의 제어 신호가 그로부터 디코딩된 상기 명령어의 주소 대신에 상기 제1 명령어의 주소를 스택 상에 저장하기 위한 것인, 프로세서.
KR1020140031294A 2013-03-16 2014-03-17 명령어 에뮬레이션 프로세서, 방법, 및 시스템 KR101738212B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/844,881 2013-03-16
US13/844,881 US9703562B2 (en) 2013-03-16 2013-03-16 Instruction emulation processors, methods, and systems

Publications (2)

Publication Number Publication Date
KR20140113607A KR20140113607A (ko) 2014-09-24
KR101738212B1 true KR101738212B1 (ko) 2017-05-19

Family

ID=50634651

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140031294A KR101738212B1 (ko) 2013-03-16 2014-03-17 명령어 에뮬레이션 프로세서, 방법, 및 시스템

Country Status (6)

Country Link
US (1) US9703562B2 (ko)
JP (1) JP5984865B2 (ko)
KR (1) KR101738212B1 (ko)
CN (1) CN104050012B (ko)
DE (1) DE102014003690A1 (ko)
GB (1) GB2514882B (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8281109B2 (en) * 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US10496461B2 (en) * 2011-06-15 2019-12-03 Arm Finance Overseas Limited Apparatus and method for hardware initiation of emulated instructions
US10295996B2 (en) * 2014-10-08 2019-05-21 Mitsubishi Electric Corporation Test device for monitoring control device
US9685219B2 (en) 2015-05-13 2017-06-20 Samsung Electronics Co., Ltd. Semiconductor memory device for deconcentrating refresh commands and system including the same
US9841997B2 (en) * 2015-06-25 2017-12-12 Intel Corporation Method and apparatus for execution mode selection
US9830132B2 (en) * 2015-09-14 2017-11-28 Box, Inc. Incremental user interface deployment and deprecation
US9892024B2 (en) 2015-11-02 2018-02-13 Sony Interactive Entertainment America Llc Backward compatibility testing of software in a mode that disrupts timing
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10255068B2 (en) 2017-03-03 2019-04-09 International Business Machines Corporation Dynamically selecting a memory boundary to be used in performing operations
US10620956B2 (en) * 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US10564965B2 (en) * 2017-03-03 2020-02-18 International Business Machines Corporation Compare string processing via inline decode-based micro-operations expansion
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character
US11669328B2 (en) 2020-12-29 2023-06-06 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for converting instructions
US11803383B2 (en) 2020-12-29 2023-10-31 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11604643B2 (en) * 2020-12-29 2023-03-14 Shanghai Zhaoxin Semiconductor Co., Ltd. System for executing new instructions and method for executing new instructions
US11803381B2 (en) 2020-12-29 2023-10-31 Shanghai Zhaoxin Semiconductor Co., Ltd. Instruction simulation device and method thereof
US11914997B2 (en) 2020-12-29 2024-02-27 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11803387B2 (en) 2020-12-29 2023-10-31 Shanghai Zhaoxin Semiconductor Co., Ltd. System for executing new instructions and method for executing new instructions
US11789736B2 (en) 2020-12-29 2023-10-17 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11625247B2 (en) 2020-12-29 2023-04-11 Shanghai Zhaoxin Semiconductor Co., Ltd. System for executing new instructions and method for executing new instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
US6356997B1 (en) * 1999-10-01 2002-03-12 Hitachi, Ltd. Emulating branch instruction of different instruction set in a mixed instruction stream in a dual mode system

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62165670A (ja) 1986-01-17 1987-07-22 Canon Inc プロセスカートリッジ及び画像形成装置
JP3191263B2 (ja) 1989-12-07 2001-07-23 富士通株式会社 最適オブジェクト選択実行処理装置
JPH04199331A (ja) 1990-11-29 1992-07-20 Hitachi Ltd マイクロコンピュータ
US6496922B1 (en) 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US5632028A (en) 1995-03-03 1997-05-20 Hal Computer Systems, Inc. Hardware support for fast software emulation of unimplemented instructions
DE69613586T2 (de) 1995-10-06 2002-04-25 Advanced Micro Devices Inc Befehlsdekoder mit emulation durch indirektspezifizierer
EP0991994A4 (en) 1997-06-25 2001-11-28 Transmeta Corp IMPROVED MICROPROCESSOR
US6289300B1 (en) * 1998-02-06 2001-09-11 Analog Devices, Inc. Integrated circuit with embedded emulator and emulation system for use with such an integrated circuit
JP3943277B2 (ja) * 1999-03-23 2007-07-11 セイコーエプソン株式会社 マイクロコンピュータ及び電子機器
JP2000322269A (ja) 1999-05-10 2000-11-24 Nec Software Hokuriku Ltd エミュレーションシステム
US6820190B1 (en) 2000-02-02 2004-11-16 Hewlett-Packard Development Company, L.P. Method and computer system for decomposing macroinstructions into microinstructions and forcing the parallel issue of at least two microinstructions
US6745322B1 (en) * 2000-02-18 2004-06-01 Hewlett-Packard Development Company, Lp. Apparatus and method for conditionally flushing a pipeline upon a failure of a test condition
JP3652956B2 (ja) 2000-04-25 2005-05-25 北陸日本電気ソフトウェア株式会社 エミュレーション装置
GB2367651B (en) 2000-10-05 2004-12-29 Advanced Risc Mach Ltd Hardware instruction translation within a processor pipeline
KR20020028814A (ko) 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
US7100023B2 (en) 2001-08-23 2006-08-29 Sony Computer Entertainment Inc. System and method for processing complex computer instructions
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8423976B2 (en) 2003-03-13 2013-04-16 Northrop Grumman Corporation Extreme pipeline and optimized reordering technology
JP2007536634A (ja) 2004-05-04 2007-12-13 フィッシャー−ローズマウント・システムズ・インコーポレーテッド プロセス制御システムのためのサービス指向型アーキテクチャ
JP3938580B2 (ja) 2004-12-21 2007-06-27 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法、半導体装置、コンピュータプログラム
US8146106B2 (en) 2007-12-31 2012-03-27 Intel Corporation On-demand emulation via user-level exception handling
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
JP5081034B2 (ja) 2008-03-28 2012-11-21 東レ株式会社 強化繊維成形体の製造装置および製造方法
US8195923B2 (en) 2009-04-07 2012-06-05 Oracle America, Inc. Methods and mechanisms to support multiple features for a number of opcodes
EP2433200B1 (en) 2009-05-21 2020-02-26 Salesforce.Com, Inc. System, method and computer program product for versioning components of an application
US8775153B2 (en) * 2009-12-23 2014-07-08 Intel Corporation Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment
US9495183B2 (en) 2011-05-16 2016-11-15 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US20140281398A1 (en) 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
US6356997B1 (en) * 1999-10-01 2002-03-12 Hitachi, Ltd. Emulating branch instruction of different instruction set in a mixed instruction stream in a dual mode system

Also Published As

Publication number Publication date
KR20140113607A (ko) 2014-09-24
GB2514882A (en) 2014-12-10
GB201404410D0 (en) 2014-04-30
GB2514882B (en) 2017-07-12
JP5984865B2 (ja) 2016-09-06
CN104050012B (zh) 2017-11-28
US20140281399A1 (en) 2014-09-18
US9703562B2 (en) 2017-07-11
DE102014003690A1 (de) 2014-09-18
JP2014194770A (ja) 2014-10-09
CN104050012A (zh) 2014-09-17

Similar Documents

Publication Publication Date Title
KR101738212B1 (ko) 명령어 에뮬레이션 프로세서, 방법, 및 시스템
KR101793318B1 (ko) 명령어 에뮬레이션 프로세서, 방법 및 시스템
CN111124498A (zh) 用于推测执行侧信道缓解的装置和方法
US9239801B2 (en) Systems and methods for preventing unauthorized stack pivoting
US7831813B2 (en) Uses of known good code for implementing processor architectural modifications
KR102262176B1 (ko) 예외로부터 리턴할 때 마스크 불가능 인터럽트의 조기 인에이블링의 회피
US8612729B2 (en) Known good code for on-chip device management
US9207940B2 (en) Robust and high performance instructions for system call
US20150134932A1 (en) Structure access processors, methods, systems, and instructions
KR20150139931A (ko) 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들
US10949207B2 (en) Processor core supporting a heterogeneous system instruction set architecture
WO2019133172A1 (en) Processor, method, and system for reducing latency in accessing remote registers
US9965280B2 (en) Instruction and logic for processor trace information for control flow integrity
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
US20220413860A1 (en) System, Apparatus And Methods For Minimum Serialization In Response To Non-Serializing Register Write Instruction
US20220413859A1 (en) System, apparatus and methods for performant read and write of processor state information responsive to list instructions

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal