KR100513358B1 - Risc형명령세트및슈퍼스칼라마이크로프로세서 - Google Patents

Risc형명령세트및슈퍼스칼라마이크로프로세서 Download PDF

Info

Publication number
KR100513358B1
KR100513358B1 KR1019980702570A KR19980702570A KR100513358B1 KR 100513358 B1 KR100513358 B1 KR 100513358B1 KR 1019980702570 A KR1019980702570 A KR 1019980702570A KR 19980702570 A KR19980702570 A KR 19980702570A KR 100513358 B1 KR100513358 B1 KR 100513358B1
Authority
KR
South Korea
Prior art keywords
instruction
bit
register
field
address
Prior art date
Application number
KR1019980702570A
Other languages
English (en)
Other versions
KR19990064091A (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 KR19990064091A publication Critical patent/KR19990064091A/ko
Application granted granted Critical
Publication of KR100513358B1 publication Critical patent/KR100513358B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/74Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/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/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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Landscapes

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

Abstract

내부의 RISC형 명령 구조가, 복수의 오퍼레이션(Op) 형식에 대한 사용 목적이 정의된 복수의 비트 필드를 포함한 고정된 비트 길이 템플릿을 제공한다. 레지스터 레지스터간 오퍼레이션을 지정하는 형식중 하나는, 1개의 명령형 비트 필드, 2개의 소스-오퍼랜드 비트 필드, 및 1개의 목적지-오퍼랜드 비트 필드를 포함한다. 또 하나의 형식은, 적재-저장 오퍼레이션의 형식으로, 명령형 비트 필드, 각각 적재-저장 오퍼레이션을 위한 소스 레지스터의 식별자 또는 목적지 레지스터의 식별자, 및 어드레스의 세그먼트, 베이스, 인덱스 파라미터를 지정하는 비트 필드를 포함한다.

Description

RISC86 명령 세트 및 슈퍼 스칼라 마이크로 프로세서
본 발명은 프로세서에 관한 것으로, 특히 x86 명령을 RISC형 코어상에서 실행되는 RISC형 오퍼레이션으로 변환하는 프로세서에 관한 것이다.
P6클래스 x86 프로세서와 같은 고성능 마이크로 프로세서는 기능들에 있어 공통적인 특징이 있다. 이러한 공통적 기능들에는, 슈퍼스칼라 아키텍쳐 및 슈퍼스칼라 처리 능력, 클럭 사이클당 복수의 x86 명령의 디코딩, 및 복수의 x86 명령의 RISC형 오퍼레이션으로의 변환 등이 있다. RISC형 오퍼레이션은 디코딩으로부터 분리된 RISC형 코어에 대해 시퀀스를 벗어나 (out-of-order) 실행된다. 이러한 고성능 마이크로 프로세서는 명령의 실행 시퀀스를 재배열(reordering)함과 아울러 메모리 레퍼런스들의 시퀀스를 바꾸는 많은 명령 윈도우를 지원하고 있다.
CISC형 명령의 RISC형 명령으로의 변환에는, 통상 많은 유사형의 명령, 예를 들면 다양한 종류의 ADD 명령을 하나 또는 그 이상의 일반적 명령(generic instruction)으로 매핑하는 것이 포함된다. 더욱이, 어느 특정 명령의 다수의 어드레싱 모드는 메모리를 액세스하는 적재 및 저장 오퍼레이션과 함께 레지스터-레지스터간 오퍼레이션으로 변환된다. 실행을 위해 CISC형 명령을 RISC형 명령으로 변환하는 마이크로 프로세서의 성능은, 단일 CISC형 명령으로부터 생성되는 RISC형 오퍼레이션의 수에 크게 좌우된다.
디코드 속도를 포함한 고성능 슈퍼스칼라 마이크로 프로세서의 성능은 또한 클럭 사이클에서 디코드되는 x86 명령의 수를 포함한 디코드 성능, 분기 예측 능력 및 분기 예측 처리에도 크게 좌우된다. 고성능 슈퍼스칼라 마이크로 프로세서에 있어서의 명령 디코더들은, x86 명령이 하드웨어 논리 변환에 의해 디코드되는 하나이상의 디코드 경로와 1개의 x86 명령에 대응하는 RISC 오퍼레이션 시퀀스를 페치하기 위해서 ROM 메모리를 이용하는 별도의 디코드 경로를 가진다. 일반적으로, 하드웨어 논리에 의해 변환되는 x86 명령은 단순한 x86 명령이다. 보다 복잡한 x86 명령의 디코드를 위해서는 룩업 ROM이 이용된다.
x86 명령의 디코드를 위해서 룩업 ROM을 이용하는데 있어서의 한 문제점은, 마이크로 프로그램 제어 기억 장치에의 액세스 과정이 명령들의 하드와이어 변환보다 원래 느리며 효율이 낮다는 점이다. 룩업 ROM을 통한 x86 명령의 디코딩에서 야기되는 또 하나의 문제는 x86 프로세서에 대해서 표준인 수 많은 서로 다른 CISC형 명령이다. 수 많은 명령이 실행되기 때문에, 이들 명령을 RISC 오퍼레이션으로 변환하기 위해서는 프로세서 칩상에 큰 ROM 회로가 요구된다. 실행되는 명령의 수가 증가할 수록, ROM에 포인터를 파생시켜, 그 파생된 포인터들을 ROM에 적용해야 하기 때문에 회로의 복잡성이 가중된다. 이와 같이 회로의 복잡성의 가중은 명령의 디코드 속도를 저하시키는 오버헤드의 증가와 직접 관련된다. 큰 룩업 ROM은 프로세서 집적회로의 사이즈 증대를 초래하며, 그 결과 회로 제조 시의 제품 양품율이 저하되어 제조 비용을 증대시킨다.
다수의 CISC형 명령으로부터 적은 수의 RISC형 오퍼레이션으로의 변환을 용이하게 하는 내부 명령 형식이 필요로 되고 있다. 또한 필요로 되는 것은 CISC형 명령을 최소의 수의 RISC형 오퍼레이션으로 변환하는 것을 용이하게 하는 내부 명령 형식이다. 더욱 필요로 되는 것은, 룩업 ROM을 통한 변환과 비교하여 보다 많은 수의 공통 CISC형 명령을 하드와이어 논리를 이용하여 변환할 수 있도록 하는 내부 명령 형식이다.
[발명의 개요]
본 발명에 의하면, 내부 RISC형 명령 구조가 복수의 오퍼레이션(Op) 형식(format)을 위한 복수의 사용 목적이 정의된 비트 필드를 포함한 고정된 비트 길이 템플릿을 제공한다. 한 형식은 1개의 명령형 비트 필드, 2개의 소스-오퍼랜드 비트 필드, 및 레지스터-레지스터간 오퍼레이션을 지정하는 1개의 목적지-오퍼랜드 비트 필드가 포함된다. 다른 형식은 적재-저장 오퍼레이션의 형식으로서, 이 형식은 명령형 비트 필드, 각각의 적재 또는 저장 오퍼레이션을 위한 소스 레지스터 및 목적지 레지스터의 지정자, 및 어드레스의 세그먼트, 베이스, 및 인덱스 파라미터를 지정하여 인덱스 스케일 팩터(자리수 이동자) 및 변위를 지정하는 비트 필드를 포함한다.
본 발명의 제1 실시예에 의하면, RISC형 내부 명령 세트가 슈퍼스칼라 프로세서의 RISC형 코어상에서 실행된다. RISC형 내부 명령 세트는 CISC형 외부 명령 세트의 명령으로부터 변환된다. 이 명령 세트는, 고정 비트 길이 구조로 배치된 복수의 명령 코드를 포함한다. 이 구조는 복수의 사용 목적이 정의된 비트 필드로 분할된다. 이 명령 코드는 복수의 사용 목적이 정의된 비트 필드의 복수의 오퍼레이션(Op) 형식을 가진다. 하나의 Op형식은 제 1 레지스터 Op 형식이며, 이 형식은 제 1 레지스터 Op형식 코드로서의 명령 코드를 지정하는 형식 비트 필드, 레지스터 명령의 타입을 지정하는 타입 비트 필드, 제1 소스 오퍼랜드를 지정하는 제1 소스 오퍼랜드 비트 필드, 제2 소스 오퍼랜드를 지정하는 제2 소스 오퍼랜드 비트 필드, 목적지 오퍼랜드를 지정하는 목적지 비트 필드, 및 오퍼랜드 바이트 사이즈를 지정하는 오퍼랜드 사이즈 비트 필드를 갖는다. 제2 Op형식은 적재-저장 Op형식이며, 이 형식은 적재-저장 Op형식으로서의 명령 코드를 지정하는 형식 비트 필드, 적재-저장 명령의 타입을 지정하는 타입 비트 필드, 적재-저장 오퍼레이션의 목적지-소스를 지정하는 데이터 비트 필드, 인덱스 스케일 팩터를 지정하는 인덱스 스케일 팩터 비트 필드, 세그먼트 레지스터를 지정하는 세그먼트 비트 필드, 적재-저장 베이스 어드레스를 지정하는 베이스 비트 필드, 적재-저장 변위를 지정하는 변위 비트 필드, 적재-저장 어드레스 인덱스를 지정하는 인덱스 비트 필드를 갖는다. 명령 코드의 여러가지 비트 필드는 상기 Op 형식으로 치환되며, 이 치환된 비트 필드는 프로세서 문맥에 따라 결정된다.
여기에서 설명하는 명령 세트 및 명령 세트 형식에 의해 많은 이점을 얻을 수 있다. 큰 이점중의 하나는 여기에서 설명하는 명령 세트가 RISC 오퍼레이션의 고정된 길이 및 형식을 가짐으로써 규칙성(regularity)이 높다는 점이다. 이와 비교하여, 종래의 x86 명령은 완전히 서로 다른 명령 길이 및 형식을 가짐으로써 규칙성이 현저히 낮다. 규칙적인 구조는 회로의 복잡성이나 사이즈를 크게 줄일 수 있어 실제로 효율이 높아진다. 다른 이점은, 디코더에 의한 오퍼레이션의 효율적인 매핑을 위한 확장 기능이 포함되어 있다는 점이다. 이 확장 기능은, x86 명령의 직접적인 디코드 및 에뮬레이션, 또는 매핑을 지원한다. 또 다른 이점은, 여기에서 설명하는 명령 세트가 x86 명령들에서는 공통인 다수의 변형들(variations)에 대한 오퍼레이션 구조를 재사용하고 있기 때문에, 작은 ROM 메모리 사이즈로 구현된다는 점이다. 이 명령 세트를 이용함으로써 CISC 기능의 인코딩과 함께 룩업 ROM의 사이즈를 작게 할 수가 있으며, 이에 의해 프로세서 집적회로의 사이즈를 작게하여 제조 코스트를 절감 할 수 있는 이점을 얻을 수 있다.
신규성이 있는 본 발명의 특징은, 첨부한 특허 청구의 범위에 특별히 기재되어 있다. 그러나, 본 발명 자체, 즉 그 구조 및 동작 방법에 대해서는 하기의 실시예의 상세한 설명을 첨부 도면과 함께 참조함으로써 보다 잘 이해할 수 있을 것이다.
제 1도는 본 발명의 1 실시예에 의한 컴퓨터 시스템을 보인 블럭도이다.
제 2도는 제 1도에 보인 컴퓨터 시스템에 사용되는 프로세서의 일 실시예를 보인 블럭도이다.
제 3도는 제 2도에 보인 프로세서의 실시예에 있어서의 파이프라인 프로세스를 보인 타이밍도이다.
제 4도는 제 2도에 보인 프로세서에 대해 사용되는 명령 디코더의 일 실시예를 보인 개략적인 블럭도이다.
제 5도는 제 4도에 보인 명령 디코더의 에뮬레이션 코드 시퀀서 및 에뮬레이션코드 메모리의 구조를 보인 개략적인 블럭도이다.
제 6A도 내지 제 6E도는 제 4도에 보인 명령 디코더에 의해 생성되는 복수의 오퍼레이션(Op) 형식을 보인 도면이다.
제 7도는 제 5도에 보인 에뮬레이션 코드 메모리에 사용되는 OpSeq 필드 형식을 보인 도면이다.
제 8도는 명령 치환 프로세스의 일례를 보인 도면이다
제 9도는 스케쥴러의 하나의 실시예를 보인 개략적인 블럭도이다.
제 10도는 본 발명의 실시예에 의한 RISC86 명령 세트를 실행하는 명령 디코더를 가지는 프로세서가 합체된 퍼스널 컴퓨터의 블럭도이다.
제 1도에, 퍼스널 컴퓨터를 포함한 여러가지 어플리케이션에 이용되는 컴퓨터 시스템(100)이 나타나 있다. 컴퓨터 시스템(100)은 본 발명의 실시예에 의한 프로세서(120)을 포함한 컴퓨터 메인보드(110)를 구비한다. 프로세서(120)는 복잡한 명령 세트를 실행하는 모놀리식 집적 회로로서, 프로세서(120)는 CISC형 프로세서로 칭한다. CISC형 명령 세트의 예로는, 잘 알려져 있는 8086 프로세서 패밀리에서 실행되는 x86 명령 세트가 있다. 프로세서(120)는 레벨 2(L2) 캐쉬(122), 메모리 제어기(124) 및 로컬 버스 제어기(126) 및 (128)에 연결된다. 메모리 제어기(124)는 메인 메모리(130)에 연결되며, 메모리 제어기(124)는 프로세서(120)와 메인 메모리(130)사이의 인터페이스를 형성한다. 로컬 버스 제어기(126) 및 (128)은 PCI 버스(132) 및 ISA 버스(134)를 포함하는 버스에 연결되어, 로컬 버스 제어기(126) 및 (128)은 PCI 버스(132)와 ISA 버스(134)간의 인터페이스를 형성한다.
제 2도는, 프로세서(120)의 일 실시예의 블럭도를 나타낸다. 프로세서(120)의 코어는 RISC 슈퍼스칼라 프로세싱 엔진이다. 통상의 x86 명령은 명령 디코드 하드웨어에 의해 내부 RISC86 명령 세트에서의 오퍼레이션으로 변환된다. 다른 x86 명령, 예외 처리, 및 다른 여러 가지 부가적인 기능들이 온-칩 ROM에 저장된 RISC86 오퍼레이션 시퀀스로서 실행된다. 프로세서(120)는 시스템 인터페이스(210) 및 L2캐쉬 제어 논리(212)를 포함하는 인터페이스를 가진다. 시스템 인터페이스(210)는 프로세서(120)를 컴퓨터 시스템(100)의 다른 블록에 연결한다. 프로세서(120)는 메인 메모리(130), 및 로컬 버스(132) 및 (134)상의 디바이스를 포함한 컴퓨터 시스템(100)의 어드레스 공간에 시스템 인터페이스(210)을 통해 판독 및 기록을 행한다. L2캐쉬 제어 논리(212)는 L2캐쉬(122)와 같은 외부 캐쉬와 프로세서(120)간의 인터페이스를 형성한다. 구체적으로 말하면, L2캐쉬 제어 논리(212)는 L2캐쉬(122)를 프로세서(120)의 명령 캐쉬(214) 및 데이터 캐쉬(216)에 인터페이스한다. 명령 캐쉬(214) 및 데이터 캐쉬(216)는 L2캐쉬(122)를 통해 컴퓨터 시스템(100)의 어드레스 공간에 연결되는 레벨 1 (L1)캐쉬이다.
메인 메모리(130)로부터의 명령은 선행적 실행(anticipated execution)을 위해 프리디코더(270)을 거쳐 명령 캐쉬(214)에 적재된다. 프리디코더(270)는 프리디코드 비트(predecode bit)를 발생하며, 이 프리디코드 비트는 명령 비트와 함께 명령 캐쉬(214)에 저장된다. 예컨대 3 비트인 프리디코드 비트는 관련 명령 바이트(8-비트)와 함께 페치되어 다수의 명령의 디코드를 용이하게 하여, 디코드 시간을 줄이는데 사용된다. 명령 바이트는 4개의 8바이트 데이터의 버스트 전송으로서 한번에 32바이트씩 명령 캐쉬(214)에 적재된다. 프리디코더(270)의 논리는 캐쉬 라인에서 4회 사용하기 위해서 8회 반복되어, 모두 8개의 명령 바이트에 대한 프리디코드 비트는 명령 캐쉬(214)에 기록되기 직전에 동시에 계산된다. 1 바이트 상에서의 프리디코드 오퍼레이션은, 통상 1바이트, 2바이트, 또는 3바이트의 정보에 근거하며, 프리디코드 정보는 8바이트 그룹보다 길게 확장할 수 있다. 따라서, 2개의 8바이트 그룹에 오버랩하는 프리디코드 정보의 경우에, 하나의 8바이트 그룹의 뒤의 2 바이트가 그 다음의 8바이트 그룹과 함께 처리를 위해 세이브된다.
명령 캐쉬(214)에 있는 명령은 매크로 명령이라 칭해지는 CISC 명령이다. 명령 디코더(220)은 명령 캐쉬(214)로부터의 CISC 명령을 실행 엔진(222)에서 실행하기 위해 RISC 아키텍쳐 명령 세트의 오퍼레이션으로 변환한다. 명령 캐쉬(214)로부터의 하나의 매크로 명령은 실행 엔진 222용의 하나 또는 복수의 오퍼레이션으로 디코드된다.
명령 디코더(220)는 명령 캐쉬(214) 및 명령 페치 제어 회로(218)(제 4도 참조)에의 인터페이스 연결을 가진다. 명령 디코더(220)은 대부분의 매크로 명령을 디코드하기 위한 매크로 명령 디코더(230), CISC 명령과 같은 명령의 서브세트를 디코드하기 위한 에뮬레이션 ROM(232)을 가지는 명령 에뮬레이션 회로(231), 분기 예측 및 분기 처리를 행하기 위한 분기 유닛(234)을 구비한다. 매크로 명령은 그 매크로 명령이 변환되는 오퍼레이션의 일반적인 형태에 따라 분류된다. 이 오퍼레이션의 일반적인 형태는, 레지스터 오퍼레이션(RegOps), 적재-저장 오퍼레이션(LdStOps), 즉시 적재 오퍼레이션(LIMMOps), 특수 오퍼레이션(SpecOps), 및 부동 소수점 오퍼레이션(FpOps)이다.
실행 엔진(222)은 스케쥴러(260) 및 적재 유닛(240), 저장 유닛(242), 제1 레지스터 유닛(244), 제2 레지스터 유닛(246), 부동 소수점 유닛(248), 및 멀티미디어 유닛(250)을 포함한 6개의 실행 유닛들을 가진다. 스케쥴러(260)는 오퍼레이션을 적당한 실행 유닛에 분배하며, 실행 유닛들은 동시에 병렬로 동작한다. 각 실행 유닛은 특정 타입의 오퍼레이션을 실행한다. 특히, 적재 유닛(240) 및 저장 유닛(242)은 적재/저장 오퍼레이션(LdStOp)의 실행 동안, 데이터 캐쉬(216)(L1데이터 캐쉬), L2캐쉬(122), 및 메인 메모리(130)에의 데이터의 적재(판독) 또는 데이터의 저장(기록)을 실시한다. 저장 큐 행렬(262)은 저장 유닛(242)으로부터 데이터를 일시적으로 저장하여, 저장 유닛(242) 및 적재 유닛(240)이 데이터 캐쉬(216)에의 액세스에 대해 충돌을 일으킴이 없이 동시에 병렬로 동작할 수 있게 된다. 레지스터 유닛(244) 및 (246)은 레지스터 파일(290)에의 액세스를 위한 레지스터 오퍼레이션(RegOps)을 실행한다. 부동 소수점 유닛(248)은 부동 소수점 오퍼레이션(FpOps)을 실행한다. 멀티미디어 유닛(250)은 멀티미디어 어플리케이션용의 산술 오퍼레이션을 실행한다.
스케쥴러(260)는 복수의, 예를 들면 24개의 엔트리로 분할된다. 각 엔트리는 저장 및 논리를 포함하고 있다. 이 24개의 엔트리는 각각 4개 엔트리로부터의 6개의 그룹으로 그룹화 되며, 각 그룹은 Op쿼드라고 칭해진다. 엔트리의 저장소에 저장된 정보는 실행이 오퍼레이션, 즉 그 실행이 대기 상태에 있는 오퍼레이션인지 혹은 실행이 종료된 오퍼레이션인지를 기술한다. 스케쥴러는 그 엔트리를 모니터하여, 이 엔트리로부터의 정보를 그 정보가 지정하는 실행 유닛에 할당한다.
제 3도는 프로세서(120)의 5 및 6개 스테이지의 기본적인 파이프라인 처리의 타이밍을 나타낸다. 명령 디코더(220)은 1개의 클럭 사이클에서 2개의 명령을 디코드한다. 제1 스테이지(310)에서, 명령 페치 제어 회로(218)은 CISC 명령을 명령 캐쉬(214)내로 페치한다. 스테이지(110)에서, CISC 명령을 프리디코드함으로써, 후속의 디코드 시간이 짧아진다. 제2 스테이지(320)에서, 명령 디코더(220)은 명령 캐쉬(214)로부터의 명령을 디코드하여, Op쿼드를 스케쥴러(260)에 적재한다. 제3 스테이지(330)에서, 스케쥴러(260)는 엔트리를 스캔하여 실행 유닛의 각각의 타입에 대한 오퍼레이션을 실행할 수 있는 경우 대응하는 실행 유닛(240-252)에 오퍼레이션을 발행한다. 스테이지(330)에서, 발행된 오퍼레이션에 대한 오퍼랜드는 제4 스테이지(340)에서 실행 유닛에 전송된다. 레지스터 오퍼레이션 RegOp의 경우, 오퍼레이션은 스테이지(350)에 해당하는 다음 클럭 사이클에서 대체로 종료하지만, 적재-저장 오퍼레이션 LdStOps의 실행에는 어드레스 계산(352), 데이터 액세스, 및 계산 결과의 전송(362)을 위해서 보다 많은 시간이 필요하다.
분기 오퍼레이션의 경우, 명령 디코더(220)가 분기 오퍼레이션의 처음의 디코드시에 분기 예측(324)을 실행한다. 분기 유닛(252)은, 후속 스테이지(364)에서 분기를 위한 조건을 평가하여, 분기 예측(324)이 올바른지 여부를 판정한다. 2 레벨의 분기 예측 알고리즘이 조건 분기의 방향을 예측하며, 스테이지(310)에서의 CISC 명령의 페치 및 스테이지(320)에서의 CISC 명령의 디코드가 예측된 분기 방향으로 진행된다. 스케쥴러(260)는, 분기 평가에 필요한 모든 조건 코드가 유효화될 때를 결정하고, 분기 유닛(252)으로 하여금 분기 명령을 평가하게 한다. 분기 예측이 올바르지 않은 경우에, 실행되지 말아야 하는 스케쥴러 260에서의 오퍼레이션들은 플러쉬되고, 디코더(220)가 분기 후 올바른 어드레스로부터의 새로운 Op쿼드의 적재를 개시한다. 올바른 분기에 대한 명령이 페치되면 시간적 패널티를 입게 된다. 명령 디코더(220)은 이전에 저장되고 예측된 어드레스를 읽거나 혹은 병렬 가산기 세트를 이용하여 어드레스를 계산한다. 이전에 예측된 어드레스가 저장되어 있는 경우, 그 예측된 어드레스는 스테이지(326)에서 페치되고, 그 예측된 어드레스에 있는 명령은 스테이지(328)에서 가산기를 위해 지체없이 페치된다. 그렇지 않은 경우에는, 병렬 가산기가 상기 예측된 어드레스를 계산한다.
분기 평가 스테이지(364)에서, 분기 유닛(252)은 예측된 분기의 방향이 올바른지 여부를 판정한다. 예측된 분기의 방향이 올바른 경우에는, 페치, 디코드, 및 명령 실행 단계가 인터럽트없이 속행된다. 예측이 올바르지 않은 경우에, 스케쥴러(260)는 플러쉬되고, 명령 디코더(220)가 그 분기에 후속하는 올바른 프로그램 카운터로부터 매크로 명령에 대한 디코드를 개시한다.
제 4도는 메인 메모리(130)에 연결된 명령 준비 회로(400)의 실시예를 나타내는 개략적인 블럭도를 보인 것이다. 이 명령 준비 회로(400)는 프리디코더(270)를 거쳐 메인 메모리(130)에 연결된 명령 캐쉬(214)를 구비하고 있다. 명령 디코더(220)는 3개의 대안적인 소스, 즉 명령 캐쉬(214), 분기 타겟 버퍼(BTB)(456), 및 명령 버퍼(406)에 연결되어 이들로부터 명령 바이트 및 프리디코드 비트를 받는다. 명령 바이트 및 프리디코드 비트는 복수의 로테이터(rotator)(430, 432, 434)를 통해, 명령 레지스터(450, 452, 454)를 거쳐 명령 디코더(220)에 공급된다. 매크로 명령 디코더(230)는 명령 캐쉬(214) 및 명령 페치 제어 회로(218)에 연결되어 명령 바이트 및 관련 프리디코드 정보를 수신한다.
매크로 명령 디코더(230)는 페치된 명령 바이트를 명령 페치 제어 회로(218)에 연결된 명령 버퍼(408)에 버퍼링한다. 명령 버퍼(408)는 16바이트 버퍼인바, 이는 최대 16바이트 또는 정렬된 4개의 워드를 받아들여 이를 버퍼링하고, 명령 캐쉬(214)로부터 명령 버퍼(408)가 비어 있는 공간의 사이즈에 의해 허용되는 량의 데이터를 적재한다. 명령 버퍼(408)는 디코드되는 다음 명령 바이트를 홀드하고, 오래된(old) 바이트가 매크로 명령 디코더(230)에 의해 처리될때 계속해서 새로운 명령 바이트를 재적재한다. 명령 캐쉬(214) 및 명령 버퍼(408)에 저장된 명령들은, 메모리 비트(8) 및 프리디코드 비트(5) 둘 다를 포함한 "확장" 바이트로 동일한 정렬로 홀드된다. 프리디코드 비트는 매크로 명령 디코더(230)가 한개의 클럭 사이클에서 복수의 명령을 디코드하는 것을 돕는다.
디코드 프로그램 카운터(PC)(420, 422, 또는 424)를 이용하여 어드레스된 명령 바이트는 명령 버퍼(408)로부터 매크로 명령 디코더(230)에 전송된다. 명령 버퍼(408)는 매크로 명령 디코더(230)의 디코더들에 의해 바이트 단위로 억세스 된다. 그러나, 각 디코드 사이클에서, 명령 버퍼(408)는 명령 버퍼(408)에 있는 바이트들중 어느 것이 유효한 지 및 명령 버퍼(408)로부터의 새로운 바이트와 함께 재적재될 것인지를 추적하기 위해 워드 단위로 관리된다. 명령 바이트가 유효한지 여부의 표시는 명령 바이트가 디코드될 때 유지된다. 무효의 명령 바이트인 경우, 매크로 명령 디코더(230)에 연결된 디코더 무효화 논리(도시하지 않음)가 "바이트 무효" 신호를 세트한다. 현재 페치 프로그램 카운터(426)의 업데이트 제어는, 명령 버퍼(408)의 명령 바이트의 검증 및 명령 디코더(220)에 의한 명령 바이트의 사용과 거의 동기화된다.
매크로 명령 디코더(230)는 페치 사이클의 마지막 시점에서 명령 페치 제어 회로(218)로부터 페치된 최대 16바이트, 또는 4개의 정렬된 명령 바이트의 워드를 받아들인다. 명령 캐쉬(214)로부터의 명령 바이트가 적재되어 16바이트 명령 버퍼(408)에 적재된다. 명령 버퍼(408)는 명령 바이트 및 명령 바이트 각각과 관련된 프리디코드 정보를 이 명령 바이트가 페치되거나 디코드될때 혹은 페치 및 디코드 될때 버퍼링된다. 명령 버퍼(408)는 명령 버퍼(408)가 비어 있는 공간에 들어갈 수 있는 만큼의 명령 바이트를 받아, 디코드될 다음 명령 바이트를 홀드함과 아울러 이전의 명령 바이트가 매크로 명령 디코더(230)내의 개별 디코더에 전송 되었을 때 새로운 명령 바이트와 함께 계속해서 재적재한다. 명령 프리디코더(270)는 명령 바이트가 명령 캐쉬(214)에 전송 되었을 때, 프리디코드 정보 비트에 명령 바이트를 더한다. 따라서, 명령 캐쉬(214)에 저장 및 전송되는 명령 바이트는 확장 바이트로 칭해진다. 각 확장 바이트는 8개의 메모리 비트에 5개의 프리디코드 비트를 가진다. 이 5개의 프리디코드 비트는 명령길이를 인코딩하는 3개의 비트와, 명령 길이가 D-비트 의존인지 여부를 나타내는 1개의 D-비트와, 그리고 명령 코드가 modr/m 필드를 포함하고 있는지 여부를 나타내는 HasModRM 비트를 가진다. 상기 13개의 비트는 명령 버퍼(408)에 저장되고 그리고 매크로 명령 디코더(230)에 보내진다. 명령 버퍼(408)는 5개의 프리디코드 비트 세트 각각을 6개의 프리디코드 비트로 확장한다. 프리디코드 비트는 디코더로 하여금 한 클럭 사이클에서 다수의 명령의 디코드를 고속으로 실시할 수 있게 한다.
명령 버퍼(408)는 명령 캐쉬(214)에 저장된 메모리상에서 정렬된 워드 단위로 명령 캐쉬(214)의 저장소로부터 명령 바이트를 받으며, 따라서 명령들이 워드 단위의 세분성으로 적재 및 치환된다. 따라서, 명령 버퍼(408)의 바이트 로케이션 0은 메모리에서 어드레스 0(mod16)으로 어드레싱 되는 바이트를 항상 홀드한다.
명령 바이트는 바이트 단위의 세분성을 가지고 명령 버퍼 408로부터 매크로 명령 디코더(230)에 전송된다. 각 디코드 사이클에서, 관련 암묵 워드 유효 비트를 비롯한 명령 버퍼(408)내의 16개의 확장된 명령 바이트가 매크로 명령 디코더(230) 내의 복수의 디코더에 전송된다. 명령 버퍼(408)를 통한 명령 캐쉬(214)로부터 매크로 명령 디코더(230)로의 명령 버퍼의 전송 방법은 명령이 시퀀스적으로 디코드되는 한, 각 디코드 사이클마다 반복된다. 예를 들면, 분기 오퍼레이션을 실행함에 의해 제어 전송이 발생하는 경우에, 명령 버퍼(408)는 플러쉬되고 상기 방법이 재개된다.
현재 디코드 프로그램 카운터는 명령 버퍼(408)가 16바이트의 용량을 가지지만, 한 워드의 4개의 모든 바이트가 사용되는 4바이트 워드 단위로 관리된다는 점에서 임의 바이트 정렬을 갖는다. 상기 워드의 모두 4개의 바이트는, 사용된 후 제거되어 명령 버퍼(408)에 있는 새로운 4개의 바이트를 갖는 워드로 치환될 수 있다. 1개의 명령은 1 내지 11바이트의 길이를 갖고 그리고 다수의 바이트가 디코드 됨으로써, 명령 버퍼(408)에서의 명령 정렬이 임의로 된다. 명령 바이트가 명령 버퍼(408)로부터 매크로 명령 디코더(230)에 전송되었을 때, 명령 버퍼(408)는 명령 캐쉬(214)로부터 재적재된다.
명령 바이트는 명령 버퍼(408)에 매크로 명령 디코더(230)에 대한 연속적인 명령 바이트의 공급을 위해 적절한 순차적인 바이트의 정렬이 아닌, 메모리 정렬을 갖는 명령 버퍼(408)에 저장된다. 따라서, 바이트 로테이터 세트(430, 432, 434)가 명령 버퍼(408)와 매크로 명령 디코더(230)의 각 디코더와의 사이에 배치된다. 4개의 명령 디코더, 즉 3개의 숏 디코더(SDec0 410, SDec1 412, 또는 SDec2 414)와 1개의 결합 롱 벡터링(vectoring) 디코더(418)는 바이트 로테이터(430, 432, 434)를 공유한다. 특히, 숏 디코더(SDec0 410) 및 결합 롱 벡터링 디코더(418)는 바이트 로테이터(430)를 공유한다. 숏 디코더(SDec1 412)는 바이트 로테이터(432)와 관계하고, 숏 디코더(SDec2 414)는 바이트 로테이터(434)와 관계한다.
복수의 파이프라인 레지스터, 구체적으로는 명령 레지스터(450, 452, 454)는 바이트 로테이터(430, 432, 434)와 명령 디코더(220) 사이에 배치되어 명령 바이트, 프리디코드 비트, 및 다른 정보를 일시적으로 홀드하며, 이에 의해 디코드 타이밍 사이클을 단축한다. 명령 레지스터(405, 452, 454)에 홀드되는 다른 정보에는 명령의 디코딩을 돕는 여러가지 정보가 포함되어 있는 바, 이 정보에는 프리픽스(예를 들면 0 F) 상태, 즉시 사이즈(immediate size)(8-비트 또는 32-비트), 변위 및 롱 디코드가능 길이 지정이 있다.
3개의 로테이터 및 3개의 숏 디코더를 이용하는 회로가 예시되고 있지만, 다른 실시예에서는, 다른 수의 회로 소자들이 이용될 수 있다. 예를 들면, 1개의 회로에 2개의 로테이터와 2개의 숏 디코더를 포함할 수 도 있다.
명령은 명령 정렬이 아닌 메모리 정렬 형태로 명령 캐쉬(214), 분기 타겟 버퍼(BTB)(456), 및 명령 버퍼(408)에 저장되며, 이에 따라서 제1 명령 바이트의 위치는 알려지지 않게된다. 바이트 로테이터(430, 432, 434)가 명령의 제1 바이트를 찾게 된다.
매크로 명령 디코더(230) 역시, 여러가지 다양한 명령의 디코드 및 예외 디코드 오퍼레이션을 수행하는 바, 이 중에는 디코드 오퍼레이션의 유효화 및 서로 다른 타입의 디코드 오퍼레이션 사이에서의 선택이 포함된다. 디코드 오퍼레이션 동안 실행되는 기능들에는, 프리픽스 바이트 처리와, 명령의 에뮬레이션을 위한 에뮬레이션 코드 ROM(232)에의 벡터링(벡터 어드레싱)을 위한 지원과, 분기 유닛(234) 오퍼레이션과 그리고 분기 유닛의 인터페이싱 및 리턴 어드레스 예측을 위한 자원이 포함된다. 명령 바이트 및 관련 정보에 근거하여, 매크로 명령 디코더(230)은 Op쿼드에 대응하는 4개의 오퍼레이션의 그룹의 오퍼레이션 정보를 발생한다. 매크로 명령 디코더(230) 역시, 명령 벡터링 제어 정보 및 에뮬레이션 코드 제어 정보를 발생한다. 매크로 명령 디코더(230)은 또한, 스케쥴러(260) 및 에뮬레이션 ROM(232)의 출력 연결부를 구비하여 Op쿼드 정보, 명령 벡터링 제어 정보, 및 에뮬레이션 코드 제어 정보를 출력한다. 매크로 명령 디코더(230)은 스케쥴러(260)가 Op쿼드를 받을 수가 없거나 또는 에뮬레이션 코드 ROM(232)으로부터 Op쿼드를 받고 있을 때, 명령을 디코드하지 않는다.
매크로 명령 디코더(230)은 5개의 개별 디코더를 갖는 바, 여기에는 3개의 "숏" 디코더 (SDec0410, SDec1 412, SDec2 414)가 포함되며 이들은 전체적으로 x86 명령 세트의 단순한 명령의 서브세트에서 정의되는 최대 3개의 "숏" 디코드 오퍼레이션의 명령을 디코드하는 역할을 한다. 일반적으로, 단순한 명령은 3개의 오퍼레이션보다 적은 수의 오퍼레이션으로 변환되는 명령이다. 숏 디코더(SDec0 410, SDec1 412, SDec2 414)는 각각 통상 1 또는 2개의 오퍼레이션을 발생하지만, 제로(0) 오퍼레이션들은 프리픽스 디코드와 같은 특정 경우에서만 발생된다. 따라서, 이들 3개의 숏 디코드 오퍼레이션의 경우는, 1개의 디코드 싸이클에서 2 내지 6개의 오퍼레이션이 생성된다. 이들 3개의 숏 디코더로부터의 상기 2 내지 6개의 오퍼레이션은 이후 오퍼레이션 패킹 논리(438)에 의해 1개의 Op쿼드에 패킹되는 바, 이는 6개의 오퍼레이션중 최대 4개가 유효하기 때문이다. 구체적으로, 3개의 숏 디코더(SDec0 410, SDec1 412, SDec2 414)는 각각 2개의 오퍼레이션에 대한 디코드를 시도하여 잠재적으로 6개의 오퍼레이션을 발생하게 된다. 한 번에 발생되는 오퍼레이션은 4개 뿐이므로, 5개 이상의 오퍼레이션이 생성되었을 경우에는 숏 디코더(SDec2 414)로부터의 오퍼레이션은 무효로 된다. 5개의 디코더는 또한, 1개의 "롱"디코더(416) 및 1개의 "벡터링" 디코더(418)를 포함한다. 롱 디코더(416)는 명령 또는 보다 복잡한 어드레스 모드 형식을 갖는 명령들의 형태를 디코드하며, 따라서 2개 이상의 오퍼레이션이 생성되어 숏 디코드 처리는 사용할 수 없게 된다. 벡터링 디코더(418)는 숏 디코더(SDec0 410, SDec1 412, SDec2 414), 혹은 롱 디코더(416)에서는 처리할 수 없는 명령을 취급한다. 벡터링 디코더(418)은 실제로 명령을 디코드하지는 않지만, 명령의 에뮬레이션을 위해서 에뮬레이션 ROM(232)가 있는 위치에 벡터링한다. 매크로 명령 디코더(230)에 의해 검출되는 여러가지 예외 조건도, 벡터링 디코드 오퍼레이션의 특별한 형태로서 취급된다. 롱 디코더(416) 및 벡터링 디코더(418) 각각은, 동작시 완전한 (full) Op쿼드를 발생한다. 숏 디코더(SDec0 410, SDec1 412, SDec2 414)에 의해 생성된 1개의 Op쿼드는 롱 디코더(416) 및 벡터링 디코더(418)에 의해 생성된 Op쿼드와 같은 형식을 갖는다. 숏 디코더 및 롱 디코더의 Op쿼드는 OpSeq 필드를 포함하지 않는다. 매크로 명령 디코더(230)은 숏 디코더(SDec0 410, SDec1 412, SDec2 414)로부터 생성된 0p쿼드나 혹은 롱 디코더(416) 또는 벡터링 디코더(418)에 의해 생성된 Op쿼드를 매크로 명령 디코더(230)이 각 디코드 사이클 동안 생성한 Op쿼드로서 선택한다. 숏 디코더 오퍼레이션, 롱 디코더 오퍼레이션 및 벡터링 디코더 오퍼레이션은 각각 개별적으로 병렬로 기능을 행하지만, 단지 하나의 디코더의 결과가 한번에 사용된다.
숏 디코더(SDec0 410, SDec1 412, SDec2 414) 각각은, 제 1바이트가 오퍼레이션 코드(opcode) 바이트이며, 명령이 숏 디코드 명령이라는 가정하에서 최대 7개의 명령 바이트를 디코드한다. 2개의 오퍼레이션(Ops)이 대응하는 유효 비트와 함께 생성된다. 유효 어드레스 사이즈, 유효 데이터 사이즈, 현재 x86 표준 B-비트 및 임의의 오버라이드(override) 오퍼랜드 세그먼트 레지스터에 대한 적당한 값들이 이들 파라미터에 의존하는 오퍼레이션의 생성을 위해서 공급된다. 디코드될 다음의 "순차적" 명령의 논리 어드레스는, CALL 명령에 대한 오퍼레이션의 생성에 사용하기 위해서 공급된다. 주목할 사항으로, 워드가 인용마크에 배치되는데 이는 순차적 어드레스가 통상 지정하는 현재 명령 직전의 명령을 지정하고 있지만 이 "순차적" 어드레스는 어드레스된 위치에 설정될 수 있음을 나타내기 위해서이다. 현재 분기 예측은 조건 전송 제어 명령에 대한 오퍼레이션의 생성에 사용하기 위해서 공급된다. 숏 디코드는, 전송 제어 명령(예를 들면 Jcc, LOOP, JMP, CALL), 무조건 전송 제어 명령(예를 들면 JMP, CALL), CALL 명령, 프리픽스 바이트, "cc-dep" RegOp (여기서 dep는 의존(dependent)의 약자임), 및 명령길이 어드레스 또는 데이터 사이즈 의존인지 여부를 나타내는 표시를 포함하는 제어 신호를 생성한다. 통상 1 또는 2개의 오퍼레이션이 유효하지만 프리픽스 바이트 및 JMP 디코드 군은 유효한 Op를 생성하지 않는다. 무효 오퍼레이션은 Op쿼드를 패딩(padding)하기 위한 유효 NOOP 오퍼레이션으로서 나타난다.
제1 숏 디코더(410)는 명령 바이트의 디코드 이상의 것에 근거하여 오퍼레이션을 발생한다. 제1 숏 디코더(410)는 또한, 디코드 사이클 동안 디코드된 프리픽스 바이트의 존재를 판단한다. 프리픽스 바이트들 중에는, 0 F, 어드레스 사이즈 오버라이드, 오퍼랜드 사이즈 오버라이드, 6 세그먼트 오버라이드 바이트, REP/REPE, REPNE 및 LOCK 바이트가 포함된다. 각 프리픽스 바이트는, 정의된 방식으로 후속의 명령 디코드에 영향을 준다. 프리픽스 바이트의 카운트 및 후속의 프리픽스 바이트의 카운트는 디코딩시에 누산되어 제1 숏 디코더(SDec0 410) 및 롱 디코더(416)에 공급된다. 후속의 프리픽스 바이트 카운트는, 디코딩되는 명령이 너무 길지 않은지를 체크하는데 사용된다. 프리픽스 바이트 카운트 정보는 또한, 명령마다 특정한 예외 조건의 타입들의 존재를 체크하는 것을 비롯한 후속 디코드 사이클의 제어를 위해서도 사용된다. 프리픽스 카운트는, 다음 명령의 프리픽스 및 opcode 바이트를 디코드할 준비 스테이지에 있어, 각각의 성공적인 비프리픽스 디코드 사이클의 종료시에 리세트 또는 초기화된다. 프리픽스 카운트는 매크로 명령 디코더(230)가 분기 조건 및 명령 포인터 기록(WRIP) 오퍼레이션의 디코드 시에도 재차 초기화된다.
프리픽스 바이트는, 1바이트의 숏 디코드 명령과 같게 제1 숏 디코더(410)에 의해 처리된다. 1회의 디코드 사이클에서 1개의 프리픽스 바이트가 디코드되는 바, 이는 프리픽스 바이트의 디코드 이후 모든 숏 디코드를 무효화 하는 조건에서 이루어진다. 유효 어드레스 사이즈, 데이터 사이즈, 오퍼랜드 세그먼트 레지스터 값, 및 현재 B-비트가 제1 숏 디코더(410)에 공급되지만, 이전 opcode와 함께 디코드를 행할 수 있다.
어드레스 사이즈 프리픽스는, 생성된 오퍼레이션이 유효 어드레스 사이즈에 의존하는 명령의 디코딩, 및 modr/m 명령의 명령 길이 및 어드레스 모드의 디코딩 쌍방을 위해 후속 명령의 디코드에 영향을 준다. 디폴트 어드레스 사이즈는, 현재 지정된 D-비트에 의해 특정되는 바, 이 D-비트는 1 또는 2이상의 어드레스 사이즈 프리픽스의 발생에 의해 효과적으로 전환(toggle)할 수 있다.
오퍼랜드 사이즈 프리픽스 역시, 생성된 오퍼레이션이 유효 데이터 사이즈에 의존하는 명령의 디코딩 및 명령 길이의 디코드딩 쌍방을 위해 후속 명령의 디코드에 영향을 준다. 디폴트 오퍼랜드 사이즈는, 현재 특정된 x86 표준 D-비트에 의해 특정되는 바, 이 D-비트는 1 또는 2이상의 오퍼랜드 사이즈 프리픽스의 발생에 의해 효과적으로 전환할 수 있다.
세그먼트 오버라이드 프리픽스는 적재/저장 오퍼레이션(LdStOps)의 발생이 명령의 유효 오퍼랜드 세그먼트에 의존하고 있는 경우에만 후속 명령의 디코드에 영향을 준다. 디폴트 세그먼트는 관련된 일반적인 어드레스 모드에 따라 DS나 SS가 되며, 최종 세그먼트 오버라이드 프리픽스에 의해 지정된 세그먼트로 대체된다.
REP/REPE 및 REPNE 프리픽스는, 후속 명령의 디코드에 영향을 주지 않는다. 이 명령이 에뮬레이션 코드 ROM(232)가 아닌 매크로 명령 디코더(230)에 의해 디코드되는 경우, 임의의 이전 REP 프리픽스는 무시된다. 그러나, 명령이 벡터링 되는 경우, 벡터 어드레스의 발생은 일부 경우에서 수정된다. 구체적으로, 스트링 명령 또는 특정의 인접 opcode가 벡터링 되면, 1 또는 2이상의 REP 프리픽스의 발생의 표시, 및 최종 REP 프리픽스의 지정이 벡터 어드레스에 포함되게 된다. 다른 모든 명령에 대해서, 벡터 어드레스는 수정되지 않고 REP 프리픽스는 무시된다.
LOCK 프리픽스는 프리픽스 바이트의 디코딩을 제외한 모든 숏 디코딩 및 롱 디코딩을 금지하며, 후속 명령이 벡터링되게 한다. 이 후속 명령의 벡터 디코드 사이클이 발생했을 때, 이 후속 명령이 프리픽스가 아닌 한, 상기 opcode 바이트는 체크되어 명령이 "로크 가능한" 명령의 서브 세트내에 놓이도록 한다. 이 명령이 로크 가능하지 않은 경우에는, 예외 조건이 인식되며 벡터링 디코더(418)에 의해 생성된 벡터 어드레스가 예외 엔트리 포인트 어드레스로 대체된다.
제2 및 제3 숏 디코더(412 및 414)에 의해 디코드된 명령은, 프리픽스 바이트를 갖지 아니하여, 숏 디코더(412 및 414)는 어드레스 사이즈, 데이터 사이즈, 및 오퍼랜드 세그먼트 레지스터 값에 대한 고정된 디폴트 값을 추정한다.
일반적으로, 3개의 숏 디코더는 4개 이하의 오퍼레이션을 생성하는 바, 이는 3개의 연속한 숏 디코드가 항상 수행되지는 않고, 명령이 단지 1개의 오퍼레이션에서 숏 디코드되기 때문이다. 그러나, 만일 4개 이상의 유효 오퍼레이션이 생성되는 드문 경우에, 오퍼레이션 패킹 논리(438)는 제3 숏 디코더(414)의 동작을 멈추거나 무효화하여, 단지 2개의 명령만이 성공적으로 디코드되고 그리고 Op쿼드내에 패킹을 위해서 최대 4개의 오퍼레이션이 생성되게 된다.
제1 숏 디코더(410)가 디코드를 성공적으로 실시할 수 없는 경우, 제2 및 제 3 숏 디코더(412, 414)의 동작은 무효로 된다. 제2 숏 디코더(412)가 성공적인 디코드를 실시할 수 없는 경우, 제3 숏 디코더(414)의 기능이 무효화된다. 제1 숏 디코더(410)가 무효인 경우에서도, 디코드 사이클은 롱 또는 벡터링 디코드 사이클이 된다. 일반적으로, 매크로 명령 디코더(230)가 1 또는 2이상의 숏 디코드를 시도하며, 만일 이러한 숏 디코더가 성공적으로 행해지지 않은 경우에는 1개의 롱 디코드를 시도한다. 이 롱 디코드가 성공적으로 행해지지 않은 경우에는, 매크로 명령 디코더(230)가 벡터링 디코드를 실행한다. 복수의 조건들이 숏 디코더(410, 412, 414)가 무효로 되게한다. 명령 opcode 또는 modr/m 명령의 어드레스 모드가 정의된 숏 디코드 또는 "단순한" 명령의 서브세트내에 있지 않은 경우에는, 숏 디코드는 대부분 무효화된다. 이 조건은 일반적으로 숏 디코드 명령을 2개 이하의 오퍼레이션을 생성하는 오퍼레이션으로 한정한다. 숏 디코드는 또한, 디코드되는 명령을 위한 명령 버퍼(408)에 저장된 바이트들중 그 어느 것도 유효하지 않은 경우에 무효화된다. 또한, "cc-dep" 오퍼레이션, 즉 상태 플래그에 의존하는 오퍼레이션은 제1 숏 디코더(410)에 의해서만 발생되어 이들 오퍼레이션 앞에는 ".cc", "RegOps"가 오지 않게 한다. 숏 디코드는 바로 이전의 숏 디코드가 전송 제어 명령의 디코드이었을 때, 취해진 방향에 관계없이 제2의 2개의 연속하는 숏 디코드를 위해서 무효화된다. 숏 디코드는 제1 숏 디코드가 프리픽스 바이트의 디코드이었을 경우, 제 2의 2개의 연속하는 숏 디코드를 위해서 무효화된다. 일반적으로, 프리픽스 코드 또는 전송 제어 코드는 1개의 사이클에서 추가의 디코드 처리를 실시하는 것을 금지한다.
더욱이, 16개 이하의 명령 바이트가 매크로 명령 디코더(230)에 의해 사용되지 않는바, 이는 명령 버퍼 408이 한 번에 16바이트 밖에 홀드할 수 없기 때문이다. 또한, 최대 4개의 오퍼레이션이 1개의 Op쿼드에 패킹된다. 이러한 제약은, 제3 숏 디코더(414)에만 영향을 주는 바, 이는 숏 디코드된 명령 각각의 길이는 최대 7 바이트이며, 4를 넘는 오퍼레이션이 제3 숏 디코더(414)에서만 생성되기 때문이다.
관련 제약 조건에서, 만일 현재 D-비트 값이 16-비트 어드레스 및 데이터 사이즈 디폴트를 지정하는 경우, 어드레스 및/또는 데이터에 의존하는 길이를 가지는 명령만이, 제1 숏 디코더(410)에 의해 처리될 수 있는 바, 이는 프리디코드 정보가 정확하지 않을 수 있을 가능성이 있기 때문이다. 또한, 다수의 명령 디코드를 행할 수 없을 때, 제1 숏 디코더만이 명령 및 프리픽스 바이트의 디코드를 성공적으로 실시할 수 있도록 허용된다.
매크로 명령 디코더(230)의 숏 디코더 타당성 검사 논리(도시하지 않음)에 의해 타당성 검사가 제어되며, 숏 디코더(410, 412, 414)의 동작과는 독립적으로 이루어진다. 그러나, 숏 디코더(410, 412, 414) 각각은 디코드되는 오퍼레이션의 수에 따라 0, 1 또는 2개의 유효 비트를 세트한다. 이들 유효 비트, 즉 3개의 숏 디코더(410, 412, 414)에 대해서 총 6개의 비트는 오퍼레이션 패킹 논리(438)에 의해 어느 오퍼레이션이 Op쿼드에 패킹될 지를 판단하여, 무효 오퍼레이션을 NOOP 오퍼레이션으로서 나타내도록 하는데 이용된다. 이 오퍼레이션 패킹 논리(438)는, 숏 디코더 타당성 검사 정보가 없어도 동작하는 바, 이는 유효 숏 디코드 및 관련 오퍼레이션 앞에 다른 유효 숏 디코드 및 관련 오퍼레이션이 선행되기 때문이다.
숏 디코더(410, 412, 414)는 또한, 여러가지 특별한 opcode 또는 modr/m 어드레스 모드 디코드를 나타내는 복수의 신호를 발생한다. 이들 신호는 어떤 형태의 명령이 명령 디코더(220)에 의해 현재 디코드되고 있는지 여부를 나타낸다. 이들 신호는 숏 디코드 타당성 검사 논리가 숏 디코드 타당성 상태를 처리하는데 사용된다.
명령 버퍼(401)에 정렬되어 있지 않은 형태로 저장되어 있는 명령 바이트는, 바이트 로테이터(430, 432, 434)에 의해 명령 바이트가 디코더(410 내지 418)에 전송될 때 정렬된다. 제1 숏 디코더(SDec0 410), 롱 디코더(416) 및 벡터링 디코더(418)은 제1 바이트 로테이터(430)을 공유한다. 제2 및 제3 숏 디코더 (SDec1 412, SDec2 414)는 각각 제2 바이트 로테이터(432)와 제 3 바이트 로테이터(434)를 사용한다. 각 디코드 사이클 동안, 3개의 숏 디코더(SDec0 410, SDec1 412, SDec2 414)는 3개의 독립적으로 동작하는 병렬 설치된 바이트 로테이터(430, 432, 434)를 이용하여 가장 효율적으로 숏 디코드 오퍼레이션에 대한 디코드 처리를 시도한다. 비록 명령 버퍼(408)의 적절한 바이트의 바이트 로테이터(430, 432, 434)에 의한 숏 디코더 (SDec0 410, SDec1 412, SDec2 414)에의 다중화는 개념적으로는 선행 명령 디코드 오퍼레이션에 의존하고 있지만, 명령 길이 예측 논리(436)는 프리디코드 비트를 사용하여 디코더가 병렬로 동작할 수 있도록 한다.
롱 디코더(416) 및 벡터링 디코더(418)는 서로 연동하여 11개의 명령 바이트의 2개의 병렬 디코드를 실행하여, 제1 바이트를 opcode 바이트로서 사용함과 아울러, 롱 명령 디코더 Op쿼드 또는 벡터링 디코드 Op쿼드를 생성한다. 롱 디코더(416) 및 벡터링 디코더(418)에 의해 분석된 정보에는, 유효 어드레스 사이즈, 유효 데이터 사이즈, 현재 B-비트 및 DF비트, 임의의 오버라이드 오퍼랜드 세그먼트레지스터, 디코드될 다음의 "후속" 타겟 명령의 논리 어드레스가 포함된다. 롱 디코더(416) 및 벡터링 디코더(418)는 modr/m 어드레스 모드 및 임의의 세그먼트 오버라이드에 의해 정의된 디폴트에 근거하여 디코드 신호를 발생하는 바, 이 디코드 신호에는, 선행 프리픽스 비트가 배제된 명령 길이, 명령이 롱 디코드 서브세트내에 있는지 여부의 지정, RET 명령, 및 유효 오퍼랜드 세그먼트 레지스터등이 있다.
숏 디코더(SDec0 410, SDec1 412, SDec2 414)중 어느 것도 숏 명령을 성공적으로 디코드할 수 없는 디코드 사이클에서, 매크로 명령 디코더(230)은 롱 디코더(416)를 이용하여 롱 디코드 실행을 시도한다. 롱 디코드를 실행할 수 없는 경우, 벡터링 디코드가 실행된다. 일부 실시예에서, 롱 디코더(416) 및 벡터링 디코더(418)는 개념적으로 별개의 독립적인 디코더인 바, 이는 롱 디코더(416) 및 벡터링 디코더(418)가 숏 디코더(410, 412, 414)와 별개의 독립적인 것과 같다. 그러나, 물리적으로, 롱 디코더(416)와 벡터링 디코더(418)는 많은 논리 회로를 공유하며, 유사한 Op쿼드를 출력한다. 롱 디코더(416)에 의해 디코드되는 명령은, 명령 길이가 7바이트보다 크거나 또는 어드레스가 변위를 취급하기 위한 제3 오퍼레이션의 생성에 필요한 큰 변위를 가지고 있기 때문에 명령이 숏 디코더에 의해 디코드 될 수 없는 그러한 어드레스 모드 제약을 제외하고는 통상적으로 명령의 숏 디코드 서브세트안에 포함된다. 롱 디코더(416)는 또한, 숏 디코드 서브세트에 있지는 않지만 하드웨어에 의한 디코드를 보상할 만큼의 충분한 공통성을 가지고 있는 추가의 modr/m명령을 디코드한다. 롱 디코더(416)에 의해 사용 또는 디코드하기 위한 명령 바이트는 제1 바이트 로테이터(430)에 의해 명령 버퍼(408)로부터 공급되는 바, 이 로테이터(430)는 명령 멀티플렉서로서 제1 숏 디코더(SDec0 410)에 명령 바이트를 공급한다. 그러나, 제1 숏 디코더(SDec0 410)는 7개의 바이트만을 받는 반면, 롱 디코더(416)는 프리픽스 바이트를 제외한 modr/m 명령의 최대 길이에 대응하는 11개의 연속 명령 바이트를 받을 수가 있다. 따라서, 제1 바이트 로테이터(430)는, 11바이트의 폭을 가지고 있지만, 처음의 7바이트는 제1 숏 디코더(SDec0 410)에 연결된다. 롱 디코더(416)는, 한번에 1개의 명령 밖에 디코드하지 않으며, 명령 버퍼(408)내의 관련 프리디코드 정보는 사용되지 않고, 통상 무효이다.
제1 바이트 로테이터(430)의 제1 바이트는, opcode 바이트로서 완전하게 디코드되며, modr./m 명령의 경우 제2 명령 바이트 및 경우에 따라서는 제3 명령 바이트도, modr/m 바이트 및 sib 바이트로서 각각 완전하게 디코드된다. 0 F프리픽스는 opcode 바이트의 디코딩 시에 존재하는 것으로 여겨진다. 이 0 F프리픽스 바이트는, 모든 숏 디코드 명령이 비-OF(non-OF) 또는 "1 바이트" opcode이기 때문에 모든 숏 디코딩을 금지한다. 모든 프리픽스 바이트는 "1-바이트" opcode 공간내에 위치하고 있기 때문에, OF 프리픽스의 디코드딩은 다음 디코드 사이클이 2-바이트 opcode 명령, 예를 들면 롱 디코드 또는 벡터링 디코드 명령이 되게한다. modr/m 및 sib 바이트의 디코딩에 근거하여 오퍼레이션을 발생하는 것 이외에도, 제1 바이트 로테이터(430)는 또한 여러가지 프로그램 카운터에 의해 사용되는 명령 길이를 판정하는 바, 이 판정은 이 명령이 롱 디코더를 금지 또는 무효화하기 위한 modr/m 명령인지 여부의 판정, 및 이 명령이 opcode의 롱 디코드 서브세트내의 명령인지 여부의 판정이다. 롱 디코더(416)는 항상 4개의 오퍼레이션을 생성하며, 숏 디코더(410, 412, 414)와 같이, OpSeq 필드를 배제한 에뮬레이션 코드형 Op쿼드의 형태로 오퍼레이션을 제공한다. 롱 디코더(416)는 비교적 단순한 modr/m 명령만을 취급한다. 롱 디코드 Op쿼드는, 제3 오퍼레이션이 적재 오퍼레이션(LdOp)인지 아니면 저장 오퍼레이션(StOp)인지 및 제4 오퍼레이션이 RegOp인지 아니면 NOOP 인지에서만 단지 차이가 나는 2개의 가능한 형식을 가진다. 제1 롱 디코드 Op쿼드는 이하와 같은 형식을 가진다.
제 2 롱 디코드 Op 쿼드는 이하와 같은 형식을 가진다.
@( <gam> ) 어드레스 모드 지정은, 명령의 modr/m 및/또는 sib 바이트에 의해 지정되는 것, 예를 들면@(AX+BX*4+LD)에 대응하는 어드레스 연산을 나타낸다. <imm32> 및 <disp32> 값은 디코드된 명령이 이러한 값을 포함할 때 즉시 (immediate) 및 변위(displacement) 명령 바이트를 포함하는 4개의 바이트 값이다.
제1 숏 디코더(410)와 마찬가지로, 롱 디코더(416)는 이전의 디코드 사이클 동안 숏 디코더에 의해 디코드된 프리픽스 바이트의 존재를 감안하여 오퍼레이션을 생성한다. 유효 어드레스 사이즈, 데이터 사이즈, 오퍼랜드 세그먼트 레지스터 값, 및 현재 B-비트가 롱 디코더(416)에 공급되어 오퍼레이션을 생성하는데 이용된다. 롱 디코더(416)에 의해 생성된 최종 오퍼레이션에는 간접 사이즈 또는 세그먼트 레지스터 지정자들이 전혀 포함되지 않는다.
성공적일 수도 있는 롱 디코드를 금지시키거나 무효화시킬 수 있는 조건이 일부 있다. 이러한 조건중 하나는 명령 opcode가 명령의 롱 디코드 서브세트에 포함되지 않은 경우이다. 또 하나의 조건은 디코드된 명령에 대한 명령 버퍼(408)의 바이트 모두가 유효하지 않은 것이 있는 경우이다.
벡터링 디코더(418)는 숏 디코더나 롱 디코더(416)에 의해 디코드되지 않는 명령을 취급한다. 벡터링 디코드는 숏 디코딩도 롱 디코딩도 불가능하여, 충분한 유효 바이트를 사용할 수 없는 경우의 디폴트 처리이다. 통상, 벡터링 디코더(418)에 의해 처리되는 명령은 숏 디코드 또는 롱 디코드 서브세트 어느 것에도 포함되지 않으며 디코딩이 불가능하거나, 예외 조건의 검출과 같은 다른 조건에 의해서도 발생한다. 통상의 오퍼레이션 동안, 비-숏(non short) 명령 및 비-롱(non-long) 명령만이 벡터링된다. 그러나, 모든 명령이 벡터링될 수도 있다. 정의되어 있지 않은 opcode들은 항상 벡터링된다. 프리픽스 바이트만이 항상 디코드된다. 프리픽스 바이트는 숏 디코더(410, 412, 414)에 의해 항상 디코드된다.
디코드 사이클 동안 예외 조건이 검출되는 경우에, 벡터링 디코드가 강제(force)되어 상기 디코드된 명령의 명령 바이트의 유효성과는 관계없이 다른 어떤 형태의 디코드를 오버라이드 한다. 검출된 예외 조건이 벡터링 디코드 사이클을 강제할 때, 생성된 Op쿼드는 정의되지 않고, 스케쥴러(260)에 대해서 제공되는 Op쿼드 유효 비트가 강제적으로 제로(0)로 된다. 이 Op쿼드 유효 비트는 스케쥴러(260)에 적재되는 오퍼레이션이 없음을 스케쥴러(260)에 통보한다. 이 결과, 예외 벡터링 디코드 사이클 동안 스케쥴러(260)에 Op쿼드가 적재되지 않는다.
벡터링 디코드를 금지하거나 무효화하는 조건은 극히 일부이다. 이러한 조건 중의 하나는 명령 버퍼(408)에 있는 모든 바이트가 유효하지 않은 경우이다.
명령이 벡터링 되었을 때, 제어가 에뮬레이션 코드 엔트리 포인트로 옮겨진다. 에뮬레이션 코드 엔트리 포인트는 내부 에뮬레이션 코드 ROM(232) 혹은 외부 에뮬레이션 코드 RAM(236)에 놓인다. 엔트리 포인트 어드레스로부터 시작되는 에뮬레이션 코드는 명령을 에뮬레이트하거나 혹은 적당한 예외 처리를 초기화한다.
벡터링 디코드 사이클은 매크로 명령 디코더(230)의 디코드 사이클로서 간주될 수 가 있다. 벡터링 디코드의 경우, 매크로 명령 디코더(230)는, 벡터링 쿼드를 생성하는 한편, 에뮬레이션 코드 어드레스를 생성하여 이를 에뮬레이션 코드 ROM(232)에 넣는다. 초기의 벡터링 디코드 사이클 후에, 매크로 명령 디코더(230)는, 명령이 에뮬레이션 코드 ROM(232) 또는 에뮬레이션 코드 RAM(236)에 의해 생성되고 있는 동안, 에뮬레이션으로부터의 리턴 (ERET) OpSeq이 이루어질 때까지 인액티브(inactive)상태로 유지된다. 이 ERET OpSeq 동작은 다시 매크로 명령 디코더(230)의 디코딩으로 진행된다. 초기의 벡터링 디코드 사이클 후의 디코드 사이클 동안, 매크로 명령 디코더(230)는 인액티브 상태로 되고 다음의 "순차적" 명령의 디코드를 계속 시도하지만, 매크로 명령 디코더가 ERET가 발생할 때까지 반복적으로 무효화되는 디코드 사이클을 가지며 따라서 다음의 "순차적" 명령을 디코드하기 위해 디폴트로서 대기한다.
벡터링 디코더(418)에 의해 이용되거나 디코드될 명령 바이트는 제1 바이트 로테이터(430)에 의해 명령 버퍼(408)에 공급되는 바, 이 제1 바이트 로테이터(430)는 제1 숏 디코더(SDec0 410) 및 롱 디코더(416)에 명령 바이트를 공급하는 명령 멀티플렉서이다. 벡터링 디코더(418)는 최대 11개의 연속적인 명령 바이트를 받지만, 이 11개의 명령 바이트는 프리픽스 바이트를 제외한 modr/m명령의 최대 길이와 일치한다. 따라서, 제1 바이트 로테이터(430)의 전체 11 바이트의 폭이 롱 디코더(416) 및 벡터링 디코더(418) 모두에 분배된다. 명령 버퍼(408)내의 프리디코드 정보는 벡터링 디코더(418)에 의해 사용되지 않는다.
롱 디코더(416)의 경우에, 제1 바이트 로테이터(430)의 제1 바이트가 opcode 바이트로서 완전하게 디코드되며, modr/m 명령의 경우, 제2 명령 바이트 및 경우에 따라서는 제3 명령 바이트가 각각 modr/m 및 sib 바이트로서 완전하게 디코드된다. 벡터링 디코더(418)는 이전 디코드 사이클 동안 숏 디코더에 의해 디코드된 프리픽스 바이트의 존재를 감안하여 오퍼레이션을 발생한다. opcode 바이트의 디코딩에서, 0 F프리픽스의 존재가 고려된다. modr/m 및 sib 바이트의 디코딩에 근거하여 오퍼레이션을 생성하는 것 이외에도, 제1 바이트 로테이터(430)는 여러가지 프로그램 카운터에 의해 사용되는 명령 길이를 판정하는 바, 이 판정은 이 명령이 롱 디코더를 금지 또는 무효화하기 위한 modr/m 명령인지 여부의 판정, 및 이 명령이 opcode의 롱 디코드 서브세트내에 있는 명령인지 여부의 판정이다. 만일 상기 판정이 부정적인 경우, 벡터링 디코딩이 개시된다. 유효 어드레스 사이즈, 데이터 사이즈, 및 오퍼랜드 세그먼트 레지스터 값이 벡터링 디코더(413)에 공급되어 오퍼레이션을 생성하는데 사용된다. 벡터링 디코더(418)에 의해 생성된 최종 오퍼레이션에는 간접 사이즈 또는 세그먼트 레지스터 지정자가 포함되지 않는다.
벡터링 디코드 사이클 동안, 벡터링 디코더(418)는 벡터링 Op쿼드를 생성하고, 에뮬레이션 코드 엔트리 카운트 또는 벡터 어드레스를 생성하며, 에뮬레이션 환경을 초기화한다. 벡터링 Op쿼드는 에뮬레이션 환경 스크래치 레지스터를 초기화하기 위하여 여러가지 정보를 건네주도록 지정되어 있다.
에뮬레이션 코드 엔트리 포인트 또는 벡터 어드레스의 값은, 예를 들면 opcode 및 modr/m바이트와 같은 제1 및 제2 명령 바이트와 아울러 OF 프리픽스, REP 프리픽스등의 존재와 같은 다른 정보의 디코드에 근거한다. 예외 조건에 의해야기된 벡터링의 경우에, 엔트리 포인트 또는 벡터 어드레스는 단순한 인코딩된 예외 지정자에 근거한다.
환경 의존성 해결을 위해서 에뮬레이션 환경이 저장된다. 모든 숏 디코더(410, 412, 414)와 롱 디코더(416)는 오퍼레이션이 생성되어 이 오퍼레이션이 간접 사이즈 또는 레지스터 지정자를 포함하지 않을 때에 환경 의존성, 예를 들면 유효 어드레스 및 데이터 사이즈 의존성을 바로 해결한다. 그러나, 에뮬레이션 코드 오퍼레이션은 에뮬레이트되는 명령의 특정 인스턴스에 대해 그러한 유효 어드레스 및 데이터 사이즈 값을 참조한다. 이 에뮬레이션 환경은, 벡터링 되는 특정의 명령에 관한 추가 정보를 저장하는데 사용된다. 이 정보에는 범용 레지스터 번호, 유효 어드레스 및 데이터 사이즈, 유효 오퍼랜드 세그먼트 레지스터 번호, 프리픽스 바이트 카운트, 및 LOCK 프리픽스의 존재의 기록 등이 있다. 에뮬레이션 환경은 또한, modr/m reg와 modr/m rgm 필드를 Reg 및 Regm 레지스터에 적재한다. 에뮬레이션 환경은 성공적인 벡터링 디코드 사이클의 종료시에 초기화되어, 에뮬레이션 코드에 의한 명령의 에뮬레이션 동안 ERET 코드가 발생할 때까지 초기상태로 유지된다.
벡터링 디코더(418)는 4개의 형식중 하나로 Op쿼드의 4개의 오퍼레이션을 생성한다. 4개의 형식 모두는 3개의 LIMM 오퍼레이션을 포함한다. 4개의 형식은 LIMM 오퍼레이션에 있어서의 즉시 값에서만 그리고 제3 오퍼레이션이 LEA 오퍼레이션인지 아니면 NOOP 오퍼레이션인지 하는 점만이 차이가 난다.
제1 벡터링 디코드 Op쿼드는 이하와 같은 형식을 가진다.
제2 벡터링 디코드 Op쿼드는 이하와 같은 형식을 가진다.
제3 벡터링 디코드 Op쿼드는 이하와 같은 형식을 가진다.
제4 벡터링 디코드 Op쿼드는 이하와 같은 형식을 가진다.
벡터링 Op쿼드의 제1의 2개의 형식은 대부분의 opcode에 적용된다. 제1 형식은 메모리 참조 modr/m명령을 위해서 사용되며, 이 메모리 참조 modr/m명령에 대해서 LEA 오퍼레이션이 사용되어 범용 어드레스 모드의 유효 오퍼랜드 어드레스가 계산되어 스크래치 레지스터에 넣어진다. 제2 형식은 비(non)-modr/m 및 레지스터 참조 modr/m 명령을 위해서 사용된다. 제2 형식을 갖는 명령의 경우, 어드레스를 계산할 필요는 없지만, <imm32> 및 <disp32> 값은 opcode 바이트 후의 명령 바이트를 포함할 때 유용한 상태로 남게된다. 벡터링 Op쿼드의 제3 형식은 모든 스트링 명령및 몇개의 근처에 있는 비-modr/m 명령을 위해서 사용된다. 벡터링 Op쿼드의 제4 형식은 가까이 있는 RFT 명령에 대한 특수한 벡터링 및 에뮬레이션을 위한 요건들을 지원한다.
매크로 명령 디코더(230)는 4개의 프로그램 카운터, 즉 3개의 디코드 프로그램 카운터(420, 422, 424)와 1개의 설치 프로그램 카운터(426)로 구성된다. 명령 PC(420)라 불리는 제1 디코드 프로그램 카운터는, 디코드되는 현재 명령의 프리픽스 바이트 또는 (현재 디코드되고 있는 명령이 없는 경우) 디코드될 다음의 명령의 프리픽스 바이트를 포함하는 제1 바이트의 논리 어드레스이다. 디코드 오퍼레이션이 다수의 명령 디코드인 경우, 명령 PC(420)는 디코드될 다수의 명령의 제1 명령을 지정한다. 명령 PC(420)는 명령의 아키텍춰럴 어드레스(architectural address)에 일치하며, 예외 처리를 위한 명령 폴트(fault) (용어 폴트는 "오류" 라고도 칭함) 프로그램 카운터를 생성하는데 이용된다. 명령 PC(420)는 스케쥴러(260)에 대응하는 Op쿼드를 건네주며, 오퍼레이션 커미트(commit) 유닛(OCU)( 제9도의 970 참조)이 예외 처리중에 세이브될 명령 폴트 프로그램 카운터를 생성하는데 이용된다. Op쿼드가 매크로 명령 디코더(230)에 의해 생성되었을 때, 현재 명령 PC(420) 값이 이 Op쿼드에 태깅되어 이 Op쿼드와 함께 Op쿼드 엔트리를 스케쥴러(260)에 적재한다. 논리 디코드 PC(422)라 불리는 제2 디코드 프로그램 카운터는 디코드될 다음의 명령 바이트의 논리 어드레스이며, opcode 바이트 또는 프리픽스 바이트를 어드레싱한다. 논리 디코드 PC(422) 및 선형 디코드 PC(424)는 같은 명령 바이트를 지정한다. 선형 디코드 PC(424)는 제1 바이트 로테이터(430)에 현재 존재하는 명령 바이트의 어드레스를 지정한다.
매크로 명령 디코더(230)에서의 여러가지 디코더들은, 프리픽스가 대체로 1 바이트 명령으로서 취급되도록 프리픽스 바이트 또는 전체 명령에서 프리픽스를 뺀 것을 디코딩하거나 소비하는 것에 근거하여 기능한다. 따라서, 명령과 프리픽스 바이트 디코드 사이의 어드레스 경계는, 명령 경계 그 자체보다 유용성이 높다. 결과적으로, 각 디코드 사이클의 시작에서, 디코드될 다음의 명령 바이트는 반드시 명령의 진정한 시작일 필요는 없게 된다.
디코드 사이클의 시작에서, 논리 디코드 PC(422) 및 선형 디코드 PC(424)는 다음에 디코드될 명령(명령 또는 프리픽스)의 논리 어드레스 및 선형 어드레스를 포함한다. 선형 디코드 PC(424)는 명령 버퍼(408)에 액세스하기 위한 디코드 처리 동안 이용되는 주된 프로그램 카운터 값이다. 선형 디코드 PC(424)는 그 사이클의 디코드의 개시점을 나타내며, 구체적으로는 명령 버퍼(408)로부터 제1 숏 디코더(410) 및 롱 디코더(416) 및 벡터링 디코더(418)에 바이트를 공급하는 바이트 로테이터를 제어한다. 선형 디코드 PC(424)는 또한, 임의의 추가적인 숏 디코드 명령 또는 프리픽스 바이트의 명령 어드레스를 결정하기 위한 기준점이 되는바, 따라서 바이트 로테이터가 제2 숏 디코더(412) 및 제3 숏 디코더(414)에 공급할 제어 신호를 발생한다.
선형 디코드 PC(424)는 또한 프리픽스 바이트가 디코드 되기전, 새로운 명령의 제1 디코드 사이클 동안 브레이크포인트(breakpoint) 매칭을 체크함과 아울러 성공적인 명령 디코드 사이클 동안 매크로 명령 디코더(230)에 의한 코드 세그먼트의 오버런의 존재를 체크하는 동작을 행한다.
논리 디코드 PC(422)는 CALL 명령을 포함하는 프로그램 카운터 관련(counter-related) 전송 제어 명령을 위해서 이용된다. 논리 디코드 PC(422)는 PC 상대적(PC-relative) 제어 명령의 변위 값과 합산되어 분기 타겟 어드레스를 계산하도록 분기 유닛(234)에 공급된다. 논리 디코드 PC(422)는 또한, 명령의 에뮬레이션 코드의 에뮬레이션을 지원한다. 논리 디코드 PC(422)는 범용의 벡터링 Op쿼드에 의해 임시 레지스터에 저장된 코드의 에뮬레이션에 사용할 수 있다. 예를 들면, 논리 디코드 PC(422)는 CALL 명령이 스택에 밀어넣는 리턴 어드레스를 공급하는데 이용된다.
논리 디코드 PC(428)가 다음의 순차적 논리 디코드 프로그램 카운터 값으로 설정되며, 논리 디코드 PC(422)보다 뛰어난 기능적 유용성을 갖는다. 논리 디코드 PC(428)는, 매크로 명령 디코더(230)에 의해 디코드되는 CALL 명령을 위한 리턴 어드레스를 직접 공급한다. 논리 디코드 PC(428)는 또한, 벡터링 Op 쿼드내의 오퍼레이션들 중 하나를 거쳐 벡터링 디코드 사이클 동안에 에뮬레이션 코드 논리에 건네진다.
디코드 사이클동안, 선형 디코드 PC(424)는 디코드될 다음 명령 바이트를 지정한다. 선형 디코드 PC(424)의 4개의 최하위 비트는 명령 버퍼(408)내의 제1 명령 바이트를 지정하며, 그럼으로써 명령 캐쉬(214)에 있어서의 제1 및 후속 명령 바이트를 정렬하는데 필요한 바이트 로테이션의 사이즈를 직접 나타내게 된다. 제1 바이트 로테이터(430)는 명령 멀티플렉서이며, 구체적으로는 선형 디코드 PC(424)의 크기만큼 오프셋(offset) 되는 명령 버퍼(408)내의 바이트를 액세스하기 위한 16:1바이트 멀티플렉서이다. 제1 바이트 로테이터(430)는 제1 숏 디코더(SDec0 410)용의 7바이트의 폭을 갖고, 롱 디코더(416) 및 벡터링 디코더(418)용의 11바이트의 폭을 가진다. 제1 숏 디코더(SDec0 410), 롱 디코더(416), 및 벡터링 디코더(418)에 있어서의 공통의 논리가 제1 명령용의 제1 명령 길이 값 Ilen0를 갖는다다. 제2 및 제3 바이트 로테이터(432, 434)는 7바이트의 폭의 명령 멀티플렉서이며, 구체적으로는 16 : 1 바이트의 멀티플렉서이다. 제2 바이트 로테이터(432)는 선형 디코드 PC(424)의 사이즈와 제1 명령길이 Ilen0(modulo 16)의 합산분만큼 오프셋되는 명령 버퍼(408)내의 바이트를 액세스한다. 제2 숏 디코더(SDec0 412)에 있어서의 논리는 제2 명령용의 제2 명령 길이 값 Ilen1를 생성한다. 제3 바이트 로테이터(434)는 선형 디코드 PC(424)의 사이즈 및 제1 및 제2 명령길이 Ilen0 및 Ilen1 합산분만큼 오프셋되는 명령 버퍼(408)내의 바이트를 액세스한다. 바이트 로테이터(430, 432, 434)는 명령 바이트를 다중화하지만 프리디코드 비트는 다중화하지 않는다. 바이트 로테이터(430, 432, 434)는 프리디코드 정보를 이용하여 제어되는데, 여기서 제1 opcode바이트와 관련되는 프리디코드 비트 혹은 제1 명령의 제1바이트가 제2 로테이터(432)를 직접 제어한다. 제2 명령의 제1바이트는 제3 로테이터(434)을 직접 제어한다. 프리디코드 코드 각각은 명령 길이를 암시하지만 다음 로테이터에 제공되는 것은 포인터이다. 이 포인터는 현재 명령에서의 프로그램 카운터의 4개의 최하위 비트에 길이를 더한 것을 이용해 유도되어 다음 명령의 프로그램 카운터를 얻을 수 있다.
매크로 명령 디코더(230)의 모든 프로그램 카운터(420, 422, 424, 428)는 명령 및 예외 처리 동안 초기화된다. 복수의 신호원이 이 초기화를 활성화시킨다. 첫번째로, PC 상대적 전송 제어 명령이 디코드되어 예측이 취해졌을 분기 유닛(234)이 타겟 분기 어드레스를 공급한다. 두번째로, 리턴 어드레스 스택(도시하지 않음)이, 가까이에 있는 RET 명령이 디코드되었을 때 예측 리턴 타겟 어드레스를 공급한다. 세번째로, 스케쥴러(260)가, 매크로 명령 디코더(230)가 프로세서(120)내의 다른 회로와 함께 예측 미스된 분기 조건(BRCOND) 오퍼레이션 때문에 스케쥴러(260)에 의해 재시작되었을 때 정확한 다른 분기 어드레스를 생성한다. 네번째로, 레지스터 유닛(244) (즉, 주된 RegOp 실행 유닛)이, WRIP RegOp가 실행되었을 때 새로운 디코드 어드레스를 공급한다. WRIP RegOp 실행에 의해 에뮬레이션 코드가 명시적으로 명령의 디코드를 전송하는 것이 가능해진다. 이 모든 4개의 경우에서, 3개의 디코드 프로그램 카운터(420, 422, 424)를 동시에 재초기화하기 위해서 논리 어드레스가 공급되어 이용된다. 선형 디코드 PC(424)의 경우, 공급된 논리 어드레스를 현재의 코드 세그먼트 베이스 어드레스에 더해 선형 디코드 PC(424)에 적재하기 위한 대응 선형 어드레스를 생성함으로써 선형 어드레스 값이 공급된다. 논리 어드레스는 현재 명령 PC(420) 및 논리 디코드 PC(422)에 적재된다. 다음 재초기화까지의 각 디코드 사이클 동안, 매크로 명령 디코더(230)는, 명령 바이트가 매크로 명령 디코더(230)의 각 디코더에 의해 성공적으로 디코드 및 이용되었을 때, 현재 명령 PC(420), 논리 디코드 PC(422), 및 선형 디코드 PC(424)를 순차적으로 및 동기적으로 갱신한다.
명령 길이 Ilen0 및 Ilen1의 생성은 직렬로 행해진다. 병렬 오퍼레이션을 에뮬레이션하여 직렬 처리를 보다 빠르게 하기 위해 명령 길이 룩어헤드 논리(436)가 명령 버퍼(408)의 각 명령 바이트의 길이를 특정하는 4개의 프리디코드 비트를 이용하여 명령 길이 Ilen0 및 Ilen1를 신속히 판정한다. 명령 버퍼(408)의 제1 명령 바이트(제1 명령 바이트는 제1 숏 디코더(SDec0 410)에 대해서 다중화된다)의 opcode 바이트에 관련된 프리디코드 비트는, 명령 버퍼(408)의 제2 명령 바이트의 opcode 바이트의 바이트 인덱스를 직접 지정한다. 명령 버퍼(408)의 제2 명령 바이트(제2 명령 바이트는 제2 숏 디코더(SDec1 412)에 대해서 다중화된다)의 opcode 바이트에 관련된 프리디코드 비트는, 명령 버퍼(408)의 제3 명령 바이트의 opcode 바이트의 바이트 인덱스를 직접 지정한다. 명령 길이 룩어헤드 논리(436)는, 명령 버퍼(408)의 제2 및 제3 명령 바이트의 opcode 바이트의 바이트 인덱스를 생성하기 위한 2개의 4-비트 폭의 16 : 1 멀티플렉서를 구비하고 있다.
명령 룩어헤드 논리(436) 역시, 프리디코드 비트 세트의 유효성을 판정하기 위한 논리를 구비하고 있다. 프리디코드 비트는, 관련 명령 바이트가 유효 숏 디코드 명령의 시작 바이트일 때 유효하다, 구체적으로는, 명령 룩어헤드 논리(436)는 명령 버퍼(408)의 소정 바이트에 대한 프리디코드 비트가 동일 바이트를 지정하고 있는지 여부, 즉 이 바이트에서 시작하는 명령에 대해 제로(0)의 명령 길이를 의미하는지 여부를 판정한다.
만일 판정이 긍정적이면, 이 바이트는 숏 디코드 명령의 시작이 아니며, 이 숏 디코드는 더 이상 가능하지 않게 된다. 만일 상기 판정이 부정적이면, 적재 디코드 오퍼레이션이 가능하고, 프리디코드 비트는 다음 명령의 개시점을 지정한다.
메인 메모리(130)와 명령 캐쉬(214) 사이에 연결된 프리디코더(270)는 8개의 논리 유닛을 갖는바, 이들 각각의 논리 유닛은 그것에 관련된 명령 바이트를 검증함은 물론 경우에 따라서는 상기 관련 명령 및 이에 후속하는 1 또는 2개의 명령 바이트를 검증한다. 제1 명령 바이트가 opcode 바이트로서 디코드되며,(opcode 바이트가 modr/m opcode인 경우) 제2 및 제3 명령 바이트가 modr/m 및 sib 바이트로서 디코드된다. 이러한 3개의 바이트에 근거하여, 명령 길이가 판정됨과 아울러 그 명령이 숏 명령으로 분류되는지 여부가 판정된다. 명령 길이에 16개의 논리 유닛에 관련하는 논리 유닛의 위치에 대응하는 4-비트의 일정한 값이 더해져, 명령 길이 룩어헤드 논리(436)에 의해 사용되는 바이트 인덱스가 결정된다. 이 바이트 인덱스는 명령이 숏 명령의 기준내에 드는 경우에는 프리디코드 비트의 값으로 설정된다. 명령 바이트가 숏 명령 기준을 충족하지 않는 경우에, 프리디코드 비트는 명령길이 0을 나타낼 때까지 인크리먼트(increment) 됨이 없이, 16개의 논리 유닛의 위치에 대응하는 4-비트의 고정된 값으로 설정된다. 명령길이 0은 이 명령이 숏 명령이 아님을 나타낸다. 프리디코드 비트는 4-비트로부터 3-비트로 잘라질 수 있는데, 이것은 숏 디코드 명령이 7바이트 미만의 길이여서, 최상위 비트가 3개의 프리디코드 비트 및 관련된 고정 바이트 어드레스로부터 용이하게 복원되기 때문이다. 3개에서 4개로의 프리디코드 비트의 확장은, 명령 캐쉬(214)의 16개의 명령 바이트에 대응하는 16개의 논리 유닛을 가지는 프리디코드 확장 논리(440)에 의해 실행된다. 프리디코드 확장 논리(440)의 16개의 논리 유닛은, 명령 바이트가 명령 캐쉬(214)로 부터 명령 버퍼(408)에 표기될 때 프리디코드 비트에 대해서 개별적으로 및 동시적으로 동작한다.
프리디코드되어 명령 캐쉬(214)에 적재되는 32개의 명령 바이트 중 마지막 2개는, 프리디코더(270)에 의한 검사를 위해 단지 1 또는 2개의 바이트만을 갖는다. modr/m opcode의 경우, 전체 명령 길이를 결정할 수가 없다. 따라서, 프리디코더(270)에 있어서의 바이트 14 및 15에 대한 논리 유닛은 바이트 0~13에 대한 논리 유닛으로부터 변경된다. 명령 바이트 15의 경우, 프리디코더(270)의 논리 유닛이 모든 modr/m opcode 및 비-숏 디코드 명령에 대해서 명령길이 0을 설정한다. 명령 바이트 14의 경우, 비-숏 명령뿐만 아니라 modr/m opcode에 대해서 유효 명령길이 0이 강제되어 sib 바이트의 검사에 필요한 어드레스 모드가 부여됨으로써 확실하게 명령길이를 결정할 수 있게 된다.
각 디코드 사이클동안, 매크로 명령 디코더(230)는 명령 브레이크포인트, 마스크 불가능한 보류 인터럽트(pending nonmaskable interupt)(NMI), 보류 인터럽트(INTR), 코드 세그먼트 오버런, 명령 페치 페이지 폴트, 16 바이트 보다 큰 명령 길이, LOCK 프리픽스를 갖춘 로크 불가능한 명령, 부동 소수점 사용 불가능 조건, 및 보류 부동 소수점 폴트 조건을 비롯한 여러가지 예외 조건들의 체크를 실시한다. 일부 조건들은 성공적인 디코드 사이클 동안에만 평가되며, 다른 조건들은 사이클 동안 임의의 디코드 동작과는 관계 없이 평가된다. 액티브 예외 조건이 검출되었을 때, 숏, 롱, 및 벡터링 디코드 사이클을 포함하는 모든 명령 디코드 사이클이 금지되어 예외 검출후의 디코드 사이클에서 "예외" 벡터링 디코드가 강제된다. 예외 조건의 인식은, 예를 들면 숏 및 롱 혹은 벡터링 디코더 Op쿼드가 아닌, 에뮬레이션 코드 Op쿼드가 스케쥴러(260)에 의해 받아들여졌을 때, 매크로 명령 디코더(230)의 동작 정지에 의해서만 오버라이드 또는 금지된다. 실제로, 어떤 예외 조건의 인식 및 처리는 ERET Opseq가 제어를 매크로 명령 디코더(230)에 리턴할 때까지 지연된다.
예외 벡터링을 강제하는 디코드 사이클 동안, 특수 에뮬레이션 코드 벡터 어드레스가 통상의 명령 벡터 어드레스 대신에 생성된다. 롱 디코더(416) 및 벡터링 디코더(418)에 의해 생성되는 벡터링 Op쿼드는 정의되지 않는다. 예외 벡터 어드레스는, 인식 및 처리되는 특정의 예외 조건을 지정하기 위한 하위 비트를 제외하고 는 고정 값이다. 다수의 예외 조건이 동시에 검출되었을 경우에, 이 예외들은 우선 순위에 따라 시퀀스가 정해져 우선 순위가 가장 높은 예외가 인식된다.
명령 브레이크포인트 예외(즉, 우선 순위가 가장 높은 예외 조건)는 선형 디코드 PC(424)가 프리픽스를 포함하는 명령의 제1 바이트를 지정하고, 선형 디코드 PC(424)가 명령 브레이크포인트로서 인에이블 되는 브레이크포인트 어드레스와 일치하고, 명령 브레이크포인트 마스크 플래그들 중 그 어느 것도 클리어 되지 않을때 인식된다. 하나의 마스크 플래그(RF)는 특히 명령 브레이크 포인트의 인식을 마스크 한다. 또 하나의 마스크 플래그(BNTF)는, 일시적으로 NMI 요청 및 명령 브레이크 포인트를 마스크한다.
보류 NMI 예외(즉, 뒤로부터 2번째 우선 순위의 예외)는, NMI 요청이 보류되고 NMI 마스크 플래그들 중 어느 것도 클리어 되지 않는 경우에 인식된다. 하나의 마스크(NF)는 특별히, 마스크 불가능한 인터럽트를 마스크한다. 또 하나의 마스크 플래그(BNTF)는, NMI 요청 및 명령 브레이크포인트를 일시적으로 마스크한다.
보류 INTR 예외(즉, 우선순위에서 보류 NMI 예외 다음의 예외)는, INTR 요청이 보류되고 인터럽트 플래그(IF) 및 일시적인 인터럽트 플래그(ITF)가 클리어되었을 때에 인식된다.
코드 세그먼트 오버런 예외(즉, 우선순위에서 보류 INTR 예외 다음의 예외)는, 매크로 명령 디코더(230)이 현재 코드 세그먼트의 한계를 넘어 명령세트를 성공적으로 잘 디코드하려고 하는 경우에 인식된다.
명령 페치 페이지 폴트 예외는(우선순위에서 코드 세그먼트 오버런 예외 바로 다음의 예외), 다른 명령 또는 프리픽스 바이트의 디코드가 가능해져 명령 변환 룩어사이드버퍼(ITB)가 현재 명령 페칭 시에 페이지 폴트가 발생했음을 신호하기 전 매크로 명령 디코더(230)가 명령 버퍼(408)로부터 추가의 유효 명령 바이트를 요구할 때 인식된다. 명령 페치 제어 회로(218)의 폴트 조건은 반복적으로 시도될 수 있어 페이지 폴트가 매크로 명령 디코더(230)에 의해 인식되어 후속의 예외 처리가 정지되며, 새로운 어드레스로의 명령 페칭이 재차 지령될 때까지 페이지 폴트를 연속하여 보고하게 된다. ITB로부터의 폴트 보고는, 명령 캐쉬(214)로부터 명령이 적재 되는 것과 같은 타이밍을 가져, 후속 디코드 사이클에서 등록된다. ITB는 연속적인 명령 페치 시도에서의 폴트를 나타내는 신호를 송출할 필요가 없게되며, 매크로 명령 디코더(230)은 페칭이 새로운 명령 어드레스에 전송 될 때까지 이 폴트 지시를 홀드한다. 페이지 폴트의 인식 시에, 추가의 폴트 정보가 특수 레지스터 필드에 적재 된다.
16 바이트 예외보다 긴 명령길이는, 명령 페치 페이지 폴트 예외 다음의 우선 순위를 가져, 매크로 명령 디코더(230)이 15바이트보다 긴 프리픽스 바이트를 포함한 전체 길이를 가지는 지정된 명령을 성공적으로 디코드하려고 하는 경우애 인식된다. 실제의 명령이 디코드되고 디코드시의 명령의 나머지의 길이가 계산되기 전에 프리픽스 바이트의 수를 카운트 함으로써 16 바이트보다 긴 명령 길이의 예외가 검출된다. 프리픽스 바이트와 나머지의 명령 길이와의 합산이 16 바이트보다 큰 경우에는 에러가 인식된다.
LOCK 프리픽스 예외를 갖춘 로크 불가능한 명령 예외는, 명령 길이 예외 다음의 우선 순위를 가져, 매크로 명령 디코더(230)가 LOCK 프리픽스를 가지는 명령을 성공적으로 디코드하려고 할 때 인식된다. 이 경우, 명령은 LOCK 가능한 명령의 서브세트에 포함되지 않는다. 로크 불가능한 LOCK 명령 예외는, 0 F프리픽스의 존재 및 opcode 바이트의 디코드에 근거해 검출된다. 로크 불가능한 LOCK 명령 예외는 LOCK 프리픽스가 숏 디코드 및 롱 디코드를 금지하기 때문에, 벡터링 디코드 사이클 동안에만 발생한다.
다음의 최하위 우선순위를 갖는 부동 소수점 이용 불가능한 예외는 매크로 명령 디코더(230)가 WAIT 명령, 또는 프로세서 제어 ESC가 아닌 ESC 명령을 성공적으로 디코드하려고 하는 경우에 인식되어, 부동 소수점 에러의 보고가 보류된다. 매크로 명령 디코더(230)는 OF 프리픽스의 존재와 아울러 opcode 및 modr/m 바이트의 디코드에 근거해 부동 소수점 이용 불가능 예외의 검출을 실시한다.
각 디코드 사이클 동안, 매크로 명령 디코더(230)는 하나 또는 복수의 명령에 대한 어떠한 형태의 명령 디코딩 수행을 시도한다. 전형적으로, 매크로 명령 디코더(230)은 하나 또는 복수의 숏 디코드, 1개의 롱 디코드, 또는 명령 벡터링 디코드의 실행을 계속한다. 때때로, 액티브 예외 조건의 검출, 명령 버퍼(408)에 유효 바이트가 충분한 수 만큼 없는 경우, 또는 매크로 명령 디코더(230)가 외부적인 이유로 인해 동작하지 않는 경우를 포함한 3개 타입의 조건에 대해서 어떠한 디코드도 성공적이지 않게 된다.
액티브 예외 조건이 검출될 때, 모든 형태의 명령 디코드는 금지되고 예외 조건의 검출 후의 제2 디코드 사이클 동안 예외 벡터링 디코드 사이클이 강제되어 무효 Op쿼드가 생성된다.
명령 버퍼(408)내의 유효 바이트의 수가 불충분한 경우, 유효 바이트가 명령 버퍼(408)에 홀드되어 있지 않거나 혹은 적어도 제1 opcode가 유효하며, 디코더들 중 하나가 명령을 디코드하지만 이 디코드된 명령 길이는 명령 버퍼(408)에서의 현재로서는 이용 불가능한 추가의 유효 바이트를 요구한다.
외부적인 이유로 인해 매크로 명령 디코더(230)가 동작을 계속할 수 없는 경우는, 스케쥴러(260)는 디코드 사이클 동안 추가의 Op쿼드를 받아들이는 것이 불가능하거나 또는 스케쥴러(260)가 현재 에뮬레이션 Op쿼드를 받아드리고 있는 상황이 되어, 매크로 명령 디코더(230)은 디코딩으로의 리턴을 대기하는 인액티브 상태에 있게 된다.
후자의 2 가지 경우에, 매크로 명령 디코더(230)의 디코드 상태는 진행이 금지되어, 매크로 명령 디코더(230)는 단지 다음의 디코드 사이클에서 동일한 디코드를 반복한다. 매크로 명령 디코더(230)의 금지의 제어는 각 디코더에 대응하는 신호와 더불어 디코드 유효 신호들을 발생하는 것에 의해 행해진다. 각 디코더에 대해서, 이 디코더가 디코드를 성공적으로 실행할 수 있는지 여부를 결정하기 위해 디코더 유효 신호들에 결합될 수 있는 여러가지 이유가 있다. 모든 디코더에 대한 디코더 유효 신호들을 모니터하고 이들을 조합해서 실행되어야 할 디코드 사이클의 타입을 판정한다. 디코드 사이클의 타입은, 디코드를 실행하는 특정의 디코더를 지정한다. 선택된 디코드 사이클의 타입이 올바른지 여부를 판정하기 위해서 외부의 요인도 평가된다. 선택된 디코드 사이클의 타입을 나타내는 신호는 대안적인 다음의 디코드 PC 값과 같은 그러한 서로 다른 디코더에 의해 생성되는 매크로 디코더(230)에 대한 여러가지 신호중에서 선택됨과 아울러, 숏 디코더, 롱 디코더(416) 및 벡터링 디코더(418)에 의해 생성되는 Op쿼드로부터 스케쥴러(260)에 공급되는 입력 Op쿼드를 선택하는 Op쿼드 멀티플렉서(444)를 제어하기 위해서 또한 공급된다.
벡터링 디코더 사이클의 경우에, 매크로 명령 디코더(230)는 또한 내부 에뮬레이션 코드 ROM(232) 또는 외부 에뮬레이션 코드 RAM(236)의 엔트리 포인트에 벡터링을 개시하는 신호를 생성한다.
이 후, 매크로 명령 디코더(230)은 에뮬레이션 코드의 페칭 및 이 코드를 스케쥴러(260)내로 적재하는 액티브 시간을 모니터한다.
명령 디코더(220)는 분기 예측을 수행하여 오퍼레이션들이 투기적으로 실행되도록하기 위한 분기 유닛(도시하지 않음)을 포함하고 있다. 시퀀스를 벗어난 프로세서의 성능은, 분기가 신속하고 정확하게 처리되어 파이프라인-드레인(pipeline-draing) 예측 미스가 회피되도록 한다. 프로세서(120)는 2 레벨의 분기 예측 알고리즘을 구비하는 바, 이에 대한 자세한 내용은 발명의 명칭이 "CONFIGURABLE BRANCH PREDICTION FOR APROCESSOR PERFORMING SPECULATIVE EXECUTION" 인 미국 특허 제5,454,117호(Puziol 등에게 1995년 9월 26일에 허여), 발명의 명칭이 "TWO-LEVEL BRANCH PREDICTION CACHE"인 미국 특허 제 5,327,547호(Stiles등에게 1994년 7월 5일에 허여), 발명의 명칭이 "TWO-LEVEL BRANCH PREDICTION CACHE"인 미국 특허 제 5,163,140호(Stiles등에게 1992년 11월 10일에 허여) 및 발명의 명칭이 "INTEGRATED SINGLE SURUCTURE BRANCH PREDICTION CACHE"인 미국 특허 제5,093,778호(Favor 등에게 1993년 3월 3일에 허여)에 기재되어 있다. 프로세서(120)는 8,192-엔트리의 분기 이력 버퍼(BHT)(도시하지 않음)를 구비하고 있으며, 이 분기 이력 버퍼는 글로벌 분기 이력의 9 비트를 프로그램 카운터의 4-비트에 결합함으로써 인덱싱된다. 각 BHT 엔트리는 2개의 이력 비트를 포함한다. BHT는 듀얼 포토 RAM으로서, 판독/룩업 액세스 및 기록/갱신 액세스 모두를 허용한다. BHT의 룩업 및 갱신은, 이들이 클럭 사이클의 서로 반대되는 절반의 단계에서 각각 발생하기 때문에 충돌하지 않는다. BHT의 다수의 엔트리는 BHT가 단지 조건부 분기의 방향을 예측하기 때문에 적당한 집적회로상의 영역에 공급되어, 16개 엔트리 리턴 어드레스 스택(도시하지 않음)을 제외하고는 엔트리가 태깅되거나 혹은 예측되지 않게된다. 따라서, BHT에의 액세스는, BHT가 BHT에 있는 엔트리에 액세스하도록 인덱싱되고 이 액세스 된 엔트리가 분기 명령이 되는 것으로 추정되는 캐쉬형 구조로의 직접 매핑과 유사하게 된다. 리턴 이외의 분기들에 대해서, 타겟 어드레스는 디코드 사이클 동안에 계산된다. 분기 명령의 위치를 알 수 있기 전에 모든 가능한 타겟 어드레스를 계산하는 복수의 병렬 가산기 (도시하지 않음)를 이용함으로써, 타겟 어드레스는 충분히 빠른 속도로 계산된다. 디코드 사이클의 마지막까지, 분기 유닛 (234)은 만약 있다면 어느 타겟 어드레스가 유효한지 여부를 판정한다.
분기가 예측되었을 경우, 타겟 어드레스는 바로 알려지지만 타겟 구조가 다음 사이클에서 페치되므로 1 싸이클 분기 패널티가 발생한다. 이 분기 패널티는, 분기 타겟 버퍼(BTB)(456)를 이용하여 회피된다. BTB(456)는 16개의 엔트리를 포함하며, 각 엔트리는 16개의 명령 바이트 및 관련 프리디코드 비트를 가진다. BTB(456)는 분기 어드레스에 의해 인덱싱되고 디코드 사이클 동안 액세스된다. BHT가 분기를 예측했을 때 BTB(456)의 캐쉬 히트에 대해서, BTB(456)로부터의 정보는 명령 디코더(220)에 보내져 분기 패널티가 제거된다. 각 디코드 사이클 동안에, 선형 디코드 PC(424)가 직접 맵핑 방식으로 BTB(456)를 어드레스하는데 이용된다. 디코드 사이클이 끝나기 전에 실현되는 BTB 엔트리에 대한 히트가 이루어진 경우, PC-상대적 조건 전송 제어 명령이 숏 디코더에 의해 디코드되고, 제어 전송은 예측되며, 다음과 같은 2개의 액션이 발생한다. 첫번째 액션으로서, 명령 캐쉬(214)에 지령된 개시 타겟 선형 페치 어드레스가 실제의 타겟 어드레스로부터, BTB 엔트리에 포함되는 유효 타겟 바이트의 후속의 명령 바이트를 지정하는 값으로 변경될 수 있다. 이렇게 변경된 페치 어드레스는 BTB 엔트리에 포함할 수 있어 BTB 엔트리로 부터 직접 액세스된다. 두번째 액션으로서, 엔트리로부터의 명령 바이트 및 프리디 코드 정보가 디코드 사이클의 마지막에 명령 버퍼(408)에 적재된다. 만일 PC-상대적 조건 전송 제어 명령이 숏 디코더에 의해 디코드되어 제어 전송이 예측되나 미스가 발생하면, 새로운 BTB 엔트리가 타겟 명령 페치의 결과와 함께 생성된다. 구체적으로, 타겟 명령 바이트의 명령 캐쉬(214)로부터 명령 버퍼(408)에의 처음의 적재가 성공하는 것과 동시에, 같은 정보가 선택된 BTB 엔트리에 적재되어 이전의 내용을 대체한다. 이것이 일어나지 않는 경우, 타겟 페치 및 명령 버퍼(408)의 적재는 통상 대로 행해진다.
각 엔트리는 태그 부분 및 데이터 부분을 가진다. 데이터 부분은 메모리 바이트 및 3개의 관련 프리디코드 비트를 포함한 16개의 확장 명령 바이트를 홀드한다. 메모리 바이트의 정렬은, 대응 명령 버퍼(408)의 위치에 대응하여 메모리내에서 정렬된다. BTB 엔트리의 태그 부분은 캐쉬된 타겟을 가지는 전송 제어 명령과 관련된 32-비트 선형 디코드 PC(424), 비트 [4 : 1] , 엔트리 유효 비트, 및 30 비트의 변경된 초기 타겟 선형 명령 페치 어드레스를 포함한 30 비트의 태그를 홀드한다. 명시적인 명령 워드 유효 비트가 이용되지 않는 데, 이것은 진정한 타겟 어드레스와 변경된 타겟 어드레스와의 사이의 거리가 BTB(456)내에 있어서의 유효 명령 워드의 수 및 표시를 직접 나타내기 때문이다.
BTB(456)의 목적은, 루프 및 내포(nested)루프가 실행되는 기간 동안 작은 사이즈로부터 중간 정도의 사이즈까지의 루프내에서 분기 타겟을 캡춰하는 것이다. 이 목적에 따라, 가능성이 최소인 불일치가 검출되었을 경우에, BTB 전체가 무효화 및 플러쉬된다. BTB(456)는 명령 캐쉬(214)의 미스, 어떤 형태의 명령 캐쉬(214)의 무효화, ITB 미스, 또는 임의의 형태의 ITB 무효화가 생겼을 때에 무효화되고 플러쉬된다. 이력안에 없거나 또는 공간적 국소 참조성이 없는 분기 타겟은 효과적으로 캐쉬되지 않는다. 일반적으로, BTB(456)는 몇 안 되는 수의 엔트리만을 포함하고 있으므로 복잡함이 저감되며, 이상적인 분기 타겟 캐쉬 능력이 달성된다.
PC-상대적 분기 타겟 어드레스의 계산 논리는, 타겟 어드레스의 계산을 실시한다. 분기 타겟 어드레스 계산 논리는, 숏 디코더(SDec0 410, SDec1 414, 또는 SDec2 416)에 의해 디코드되는 PC-상대적 전송 제어 명령만을 위해서 이용된다. 구체적으로, 분기 타겟 어드레스 계산 논리는, 숏 디코드 분기 명령을 위해 이용되며, 이러한 명령에는 Jcc disp8, LOOP disp8, JMP disp8, JMP disp16/32, 및 CALLL disp16/32가 포함된다. 각 숏 디코더(SDec0 410, SDec1 412, SDec2 414)는 논리 또는 선형의 분기 타겟 어드레스 계산 논리(도시하지 않음)를 갖추고 있다. 논리 및 선형 분기 타겟 어드레스 계산 논리의 3개 세트 모두는 병렬로 동작하며, 숏 디코더(410, 412, 414)는 오퍼레이션이 PC-상대적 숏 디코드 분기 명령인지 여부를 판정한다. 논리 및 선형 분기 타겟 어드레스 계산 논리는, 분기의 논리 프로그램 카운터, 분기 명령의 길이, 및 분기 명령의 부호 확장 변위 및 합산 값의 상위 16-비트의 조건 마스크를 계산 사이즈에 따라 합산하여 논리 타겟 어드레스를 생성한다. 논리 및 선형 분기 타겟 어드레스 계산 논리는 논리 타겟 어드레스와 현재 코드 세그먼트 베이스 어드레스를 합산하여 선형 타겟 어드레스를 생성한다. 무조건 분기 또는 예측 분기를 했을 경우에는, 디코드된 숏 디코드 분기 명령에 대응하는 계산된 어드레스가 논리 디코드 PC(422) 및 선형 디코드 PC(424)를 재차 초기화하는데 이용된다. 분기가 예측되지 않은 경우, 논리 어드레스가 관련 숏 디코드 분기 명령(BRCOND Op)과 함께 스케쥴러(260) Op쿼드 엔트리에 저장된다. 논리 타겟 어드레스는 현재 코드 세그먼트 한계 값과 비교되어 한계 위반을 모니터한다.
논리 및 선형 분기 타겟 어드레스 계산 논리가 한계 값 위반, 즉 분기가 예측되었는지 여부를 검출했을 경우, 한계 위반을 나타내는 공간적 태그 비트가 분기 명령으로부터 생성된 오퍼레이션을 홀드하는 스케쥴러(260)의 Op쿼드 엔트리로 설정된다. 이어서, 스케쥴러(260)의 오퍼레이션 커미트 유닛(OCU)(970)이 이 Op쿼드를 커미트하려고 할 때, 이 Op쿼드는 폴트를 포함하는 것으로 처리되어 중단된다. 매크로 명령 디코더(230)는 에뮬레이션 코드 ROM(232)의 폴트 처리기에 벡터링을 개시하는 신호를 발생한다. 이 폴트 처리기는 숏 디코더 및 롱 디코더에 의한 디코드를 일시적으로 중지하여, 폴트된 Op쿼드와 관련된 위반 명령의 폴트 PC 어드레스로 점프한다. 최종적으로, 분기 명령은 재차 디코드되고 명령 에뮬레이션 코드에 벡터링된다. 분기가 실제로 행해졌을 경우, 에뮬레이션 코드는 한계 위반을 인식하여 이를 적당하게 처리한다.
프로세서(120)는 에뮬레이션 코드 ROM(232)의 특정 폴트 처리기에 벡터링함으로써 폴트 조건에 응답한다. 폴트 처리기는 RISC86 명령 세트의 범위내에서 정의된 오퍼레이션을 포함하며, 이 오퍼레이션은 폴트의 근원을 판정하는 루틴, 폴트에 대한 적절한 응답, 적당한 응답을 개시하는 단계를 실행하는 오퍼레이션이다. 적절한 경우들에서의 대안으로서, 프로세서(120)는 "적재 대체 폴트 처리기(load alternate fault handler)"명령이라고 칭해지는 명령을 포함하며, 이것은 특별한 폴트 응답을 개시한다. 적재 대체 폴트 처리기 명령은 다른 모든 명령의 방식으로 명령 디코더(220)의 파이프라인을 통하지만, 임의의 후속 예외 조건이 다른 벡터 명령 ROM 엔트리 포인트를 호출하게 한다. 적재 대체 폴트 처리기는 현재 매크로 명령의 실행이 종료했을 때 동작을 정지한다. 적재 대체 폴트 처리기는 폴트의 경우에만 특수 폴트 처리를 허용하며, 따라서 폴트가 발생하는 경우 특수한 셋업 작업을 회피할 수 있는 장점을 갖는다.
상기 대체 폴트 처리기의 이점의 한 예가, 예를 들면 반복된 이동 스트링 명령(REP MOVs)과 관련하여 나타난다. 다수의 반복을 빠르게 실행할 수 있도록, 오퍼레이션의 시퀀스를 재배열할 수 있는 능력은 중요하다. 오퍼레이션의 시퀀스는 일반적으로 제1의 포인터로 지정된 어드레스에의 적재, 제2의 포인터로 지정된 어드레스에의 저장, 및 만일 적재 및 저장이 성공적으로 이루어진 경우에, 제1 및 제2 포인터를 인크리먼트 및 카운터의 디크리먼트를 포함한다. 더욱 효율적으로 하기 위해서, 포인터의 인크리먼트와 카운터의 디크리먼트는, 저장 오퍼레이션이 종료하기 전에 행해진다. 그러나, 폴트 또는 예외가 오퍼레이션의 시퀀스 중에 발생했을 경우, 이 시퀀스가 중단되어 카운터 및 포인터가 잘못된 상태로 된다. 예를 들면, 아키텍쳐럴 X86 SI, DI, 및 CX 레지스터는 올바른 값을 갖지 않는 상태가 된다. 이 대체 폴트 처리기는, 시퀀스에 앞서, 반복적인 이동 폴트 후 클린업(cleanup)처리를 수행하는 대체 폴트 처리기를 특정함으로써 이용된다. 이 시퀀스는 포인터 또는 카운터를 추적하기 위한 중간 명령의 오버헤드 없이 진행된다. 에러가 생기지 않는 경우, 대체 폴트 처리기는 효력 없이 동작을 정지한다. 그러나, 에러가 생겼을 경우, 대체 폴트 처리기가 호출된다. 이 대체 폴트 처리기는 오퍼레이션의 특정 시퀀스에 대해서 지정되고 이에따라 크린업을 수행하며, 디폴트의 폴트 처리기로 점프한다. 이것에 의한 장점은, 고도로 효율적인 코드가, 발생된 에러를 해소할 때까지 대체 폴트 처리기를 방해함이 없이 속도 성능을 향상시킬 수 있다는 점이다.
분기 이력 테이블(BHT)은 과거에 경험한 조건부 전송 제어 명령에 관한 정보 최근의 이력 정보, 특히 분기 방향 정보를 저장한다. 분기가 반복되었을 때, 그 분기에 관한 저장된 정보가 분석되어 분기의 현재 방향이 예측된다. 이어서, 저장된 정보는 분기에 의해 취해진 방향에 근거하여 갱신된다. 이 저장된 정보는 최근 경험한 특정의 분기의 방향, 특정 분기의 최근의 방향의 이력, 및 다른 분기의 최근의 방향의 이력에 근거하여 갱신된다. 이 저장된 정보는 복수의 2-비트 상태 머신 세트에 근거함과 아울러, 마지막 9개의 분기 실행의 방향 이력에 근거한다. 특정의 새롭게 경험한 분기 명령의 어드레스를 이용하여, 복수의 2-비트 상태 머신 세트로부터 1개가 선택된다. 마지막 9개의 분기 실행의 방향 이력을 이용하여, 상기 선택된 상태 머신 세트에서의 특정 2-비트 상태 머신이 선택된다. 각 상태 머신은 이 특정의 상태 머신에 액세스 한 최근의 몇차례의 분기에 의해 취해진 방향을 카운트하기 위한 2-비트 포화 카운터(two-bit saturating counter)이다. 일반적으로, 특정의 상태 머신은 동일한 정적 분기에 의해 액세스됨은 물론, 다른 분기가 동일한 상태 머신에 액세스 할 수 도 있다. 보다 큰 상태 머신 값은 이 분기가 보다 많이 발생하는 것을 나타낸다. 보다 작은 상태 머신의 값은 이 분기가 일어나기 어려움을 나타낸다. 상태 머신의 선택 시에, 이 상태 머신이 액세스된다.
현재의 전체 카운트가 "보다 큰" 경우, 분기 예측이 행해진다. 현재의 전체 카운트가 "보다 작은" 경우, 분기 예측은 행해지지 않는다. 가장 최근의 9개의 분기 실행의 방향 이력은, 9-비트 시프트 레지스터에 홀드되며, 이 레지스터는 분기 명령이 성공적으로 디코드될 때 마다 클럭 및 쉬프트된다.
방금 예측된 즉시 분기 방향은 시프트 레지스터에 쉬프트되는 최신 방향의 이력 값이다. 이력 비트 값 1은 분기가 취해졌음을 나타낸다. 이력 비트 값 0은 분기를 취해지지 않았음을 나타낸다.
디코드 사이클 동안, 선형 디코드 PC(424)는 BHT 테이블 룩업을 수행하는데 이용된다. PC-상대적 분기 명령이 디코드되었을 경우, 그 액세스된 상태 머신이 분기 방향을 즉시 예측하지만, 후속하여 페치 및 디코드된 실제 명령은 매크로 명령 디코더(230)에 의해 디코드 사이클의 마지막에 결정된다. 이어서, 조건 분기명령의 디코드에 의해 발생된 분기 조건(BRCOND) 오퍼레이션은 스케쥴러(260)의 논리에 의해 분해되어 이 시점에서 상태 머신이 갱신된다. 분기가 실제로 행해졌을 경우에, 상태 머신은 최대 값(3)에 이르지 않은 한 디크리먼트된다. 이 분기가 실제로 행해지지 않는 경우, 상태 머신은 그 값이 이미 최소치 0으로 되어 있지 않는한 인크리먼트된다. 따라서, 상태 머신 값 0 및 1은 분기를 하지 않는 예측의 강약을 나타낸다. 상태 머신 값 2 및 3은 각각 분기를 했을 경우의 분기의 중간 및 강한 예측을 나타낸다. BT 엔트리의 갱신을 지원할 수 있도록, BHT를 액세스하기 위한 방향 이력 비트 및 분기 어드레스의 사본 및 상태 머신 값의 사본이 분기 조건(BRCOND) 오퍼레이션과 함께 스케쥴러(260)에게 건네진다. 1개의 BRCOND의 최대 값이 Op쿼드에 포함되어 있기 때문에, BHT 지원 정보가 스케쥴러(260)에 공급되는 Op쿼드에 태깅된다. BHT가 캐쉬 구조에서 전형적인 엔트리 태그(디코드된 조건 분기와 관련된 선형 디코드 PC(424)의 어드레스)를 포함하지 않는 것은 회로 사이즈 및 복잡성을 작게하는 장점을 가져온다. BHT가 수 많은 엔트리를 가져 경합 하는 비율이 낮은 것도 장점을 갖는다.
스케쥴러(260)에 세이브되는 정보, Op쿼드 및 관련 BRCOND 오퍼레이션은 4개의 분기 어드레스 비트, 9개의 현재 이력 비트, 및 즉시 액세스되는 2개의 상태 머신 비트를 포함하는 15-비트의 폭을 가지며, 이것의 상위 비트는 또한 즉시 분기를 위한 예측 방향을 나타낸다. 첫번째 13-비트는 필요 시 BHT에 재차 액세스하여, 상태 머신 값을 갱신하는데 사용된다. 마지막 2-비트는 변경되어 새로운 상태 머신 값을 생성한다.
분기가 예측 미스된 경우, 9-비트 분기 이력 시프트 레지스터의 이력 값들이 설정이 분기가 행해진 실제 방향을 반영하도록 수정된다. 더욱이, 시프트 레지스터가 예측 미스된 분기에 대응할 때까지 "쉬프트 백(shift back)"가 되고, 이어서 실제 분기 방향 및 예측된 분기 방향에 근거하여 갱신된다.
리턴 어드레스 스택(RAS)(도시하지 않음)은, 리턴(RET) 전송 제어 명령을 위한 타겟 어드레스 캐쉬이다. RAS는 단일의 3-비트 포인터를 이용하는 순환 버퍼로서 관리되는 8 엔트리 32-비트폭의 단일 포토형 RAM (eight entry, 32-bit wide, single-ported RAM)이다. 각 사이클 동안, 한개의 액세스, 즉 RET 디코드를 위한 판독 액세스 혹은 CALL 디코드를 위한 기록 액세스가 실행된다. RAS는 RET 리턴 어드레스를 캐쉬하고, 타겟 어드레스를 간접적으로 지정하는 리턴 어드레스를 예측하는 바, 이는 타겟 어드레스의 직접적인 지정을 포함하는 다른 전송 제어 명령들과는 대조를 이룬다. RAS는 특정의 RET 명령이 종종 명령의 서로 다른 실행사이에서 타겟 어드레스를 변경하기 때문에 장점적으로 사용된다. RAS는 CALL 명령에 의해 세이브되는 - 즉, 스택에 푸쉬되는 - 리턴 어드레스를 모니터하여 각 RET 명령의 실행동안 타겟 어드레스를 발견 및 예측한다. 대응 CALL 및 RET 명령은, 다른 CALL 및 RET 명령 쌍에 관하여 후입선출(LIFO) 시퀀스로 쌍을 이루어 동적으로 발생한다.
CALL 명령이 성공적으로 디코드될 때마다, CALL 명령의 논리적인 리턴 어드레스는 LIFO 스택으로서 관리되는 순환 버퍼에 세이브(푸쉬)된다. RET 명령이 성공적으로 디코드될 때 마다, RAS의 탑(top)에 있는 리턴 어드레스 값은 RET에 대한 예측 타겟 어드레스로서 이용되고 그 값은 RAS로부터 팝(pop)된다. CALL 및 RET가 내포된(nested) 쌍으로 항상 발생하지 않고 오직 가까운 CALL 및 RET 만이 지원되고 먼 CALL와 RET는 지원되지 않음으로 해서 예측 미스가 발생한다 하더라도 RAS는 높은 예측 비율을 달성하며, 예측 미스는 RAS의 유한한 깊이 때문에 발생한다. 조건 분기 예측 미스가 발생했을 때, RAS는 스택 포인터의 탑을 이전의 조건으로 설정함으로써 예측 미스 이전의 상태를 재저장하려 시도하는데, 이는 CALL 및 RET 명령이 투기적으로 디코드되어 이것에 의해 스택 포인터의 탑이 변경되었을 수도 있기 때문이다. 예측 미스가 발생하기 전의 원래의 포인터가 재저장된다. 예측 미스 후의 재저장은 스케쥴러(260)에 의해 지원된다. 스케쥴러(260) Op쿼드 각각은 그 Op쿼드가 발생된 디코드 사이클 동안 그 시점의 초기의 스택 포인터의 탑 값으로 태깅된다. 조건 분기 명령에 대해서 생성된 BRCOND Op가 해석되어 예측 미스인 것으로 밝혀지는 경우, 스케쥴러 Op쿼드에 태깅된 스택 포인터의 탑은, 스케쥴러(260)에 의해 생성되는 재시작 사이클동안 RAS에 공급된다. RAS는 현재의 스택의 탑 값을 스케쥴러 Op쿼드 스택 포인터의 탑의 태그로 대체한다.
제 5 도는 명령 디코더 에뮬레이션 회로(231)의 개략 블럭도로서, 이 회로(231)는 명령 레지스터(512), 엔트리 포인트 회로(514), 에뮬레이션 코드 시퀀서(510), 에뮬레이션 코드 메모리(520) 및 Op치환 회로(522)를 포함하고 있다. 명령 디코더 에뮬레이션 회로(500)는 명령 디코더(220) 내부의 회로이다. 명령 디코더 에뮬레이션 회로(231)는 명령 페치 제어 회로(218), BTB(456), 또는 명령 캐쉬(214)에 연결된 명령 버퍼로부터 명령 바이트 및 이에 관련된 프리디코드 정보를 받는다. 명령 버퍼(408)는 명령 레지스터(512)에 연결되어 이 레지스터에 x86 명령을 공급한다. 명령 레지스터(512)는 에뮬레이션 코드 ROM 엔트리 포인트를 공급하는 엔트리 포인트 회로(514)에 연결된다. 엔트리 포인트 회로(514)는, x86 명령을 수신하며, 이 x86 명령 opcode로부터 엔트리 포인트 어드레스, 즉 에뮬레이션코드 메모리(520)을 지정하는 개시 어드레스를 발생한다. 이러한 방식으로, 에뮬레이션 코드 메모리(520)의 명령의 어드레스는 x86 명령의 opcode로부터 합성된다. 이 어드레스는 x86 명령 바이트, 특히 x86 명령의 제1바이트 및 제2바이트, 그리고 메모리 바이트, 프리픽스 REP 및 REPE, 보호 모드 비트 및 유효 데이터 사이즈 비트 DSz와 같은 정보에 근거하여 파생된다. 일반적으로, 긴밀한 관계가 있는 x86 명령들은, 유사하게 엔코드된 비트 필드를 가진다. 예를 들면, 명령 타입을 나타내는 비트 필드는 관련 x86 명령들 사이에서 동일하여, 에뮬레이션코드 메모리(520)의 1개의 엔트리가 몇개의 x86 명령에 대응한다. 엔트리 포인트들은, x86 명령을 읽고, 엔트리 포인트 어드레스의 비트를 특정의 x86 명령 비트 필드의 간에 근거해 할당함으로써 합성된다. 명령 레지스터(512)는 에뮬레이션 코드 시퀀서(510)에 연결되고 이 시퀀서(510)는 또한 에뮬레이션코드 메모리(520)에 연결된다. 에뮬레이션 코드 시퀀서(510)는 이 엔트리 포인트를 에뮬레이션 코드 메모리(520)에 공급하고, 에뮬레이션 코드 메모리(520)로부터 시퀀싱 정보를 받는다. 에뮬레이션 코드 시퀀서(510)는, 명령의 시퀀싱을 제어하거나 혹은 새로운 시퀀스가 개시될 때 엔트리 포인트를 에뮬레이션 코드 메모리(520)에 공급한다. 에뮬레이션 코드 메모리(520)에 인코딩된 오퍼레이션(Ops)은, 에뮬레이션 코드 메모리(520)에 의해 Op쿼드 또는 Op유닛으로서 Op치환 회로에 출력된다. 이 Ops는 RISC형 x86오퍼레이션을 위한 템플릿에 해당한다. 이 템플릿은 코드들이 선택적으로 치환되는 복수의 필드를 포함한다. 에뮬레이션 코드 메모리(520)는 Op치환 회로(522)에 연결되어, 이 Op치환 회로(522)는 여러가지 Op필드가 선택적으로 치환된 Ops를 공급한다. 기능적으로, 엔트리 포인트 회로(514)는 엔트리 포인트를 계산하여, 이를 에뮬레이션 코드 ROM(232) 또는 에뮬레이션 코드 RAM(236)에 공급한다. 에뮬레이션 코드 ROM(232)에 있어서의 시퀀스는, 명령의 기능성을 결정한다.
에뮬레이션코드 메모리(520)는 온-칩 에뮬레이션 코드 ROM(232) 및 외부 에뮬레이션 코드 RAM(236)을 구비한다. 에뮬레이션 코드 메모리(520)는 프로세서(120)가 어떻게 기능하고, x86 명령이 어떻게 실행되는지를 정의하도록 지령하는 인코딩된 오퍼레이션을 포함한다. 에뮬레이션 코드 ROM(232) 및 RAM(236) 둘다는, 복수의 오퍼레이션(Op) 명령 인코딩들을 포함하며, 이 인코딩들은 ROM(232) 및 RAM(236)에서 동일한 Op코딩 형식을 갖는다. 예를 들면, 하나의 실시예에서, 에뮬레이션 코드 ROM(232)는, 4K 64-비트 워드 수용 용량을 가진다. Op코딩 형식은 통상 예를 들면 30~40 비트로 정의된 형식이다. 하나의 실시예에서, 제6A도 내지 제6E도에 보인 바와 같은 38-비트 형식이 정의된다. 에뮬레이션 공간내의 에뮬레이션 코드 ROM(232) 베이스 어드레스 로케이션은 고정된다. 외부 에뮬레이션 코드 RAM(236)는 캐쉬 가능한 메모리내의 표준적인 메모리 어드레스 공간에 상주한다. 에뮬레이션 공간내의 에뮬레이션 코드 RAM(236) 베이스 어드레스 로케이션은 고정된다. 32-비트 에뮬레이션 코드 RAM(236) 어드레스는 최상위 15-비트 [31 : 17]를 공급하는 에뮬레이션 코드 RAM(236)의 고정 베이스 어드레스, 및 베이스 어드레스 비트에 연결된 14-비트 [16 : 3]을 공급하는 Op 어드레스에 의해 형성된다. 에뮬레이션 코드 RAM(236) 어드레스의 2개의 최하위 비트 [1 : 0] 은 0으로 설정된다. 에뮬레이션 코드 RAM(236)의 14-비트 Op 어드레스는, 에뮬레이션 코드 ROM(232)의 Op 어드레스와 같다. 오퍼레이션(Ops)은, 예를 들면 38-비트의 Op코딩 형식으로, 외부 에뮬레이션 코드 RAM(236)에 64-비트 워드로 저장된다. 64-비트 워드의 Op코딩 형식 비트의 과잉인 비트들은, 제어 전송(OpSeq) 정보를 저장하기 위해서 이용된다. 외부 에뮬레이션 코드 RAM(236)은 통상 테스트 또는 디버그를 위해서 이용되어, 에뮬레이션 코드 ROM(232)에 인코딩된 명령을 수정(patching)함과 아울러, 시스템 관리 모드(SMM)와 같은 그러한 특수 기능을 수행하는 것을 가능하게 한다. 예를 들면, 에뮬레이션 코드 ROM(232)의 명령이 올바르게 기능하고 있지 않는 것이 발견되는 경우, 외부 에뮬레이션 코드 RAM(236)은 에뮬레이션 코드 ROM(232)의 부적절하게 기능하는 고정된 코드를 바꾸기 위해서 일시적 혹은 영구적으로 액세스된다. 외부 에뮬레이션 코드 RAM(236)에의 액세스는 다음의 2개의 기법중 하나를 이용하여 행해진다. 제1 기법에서, 에뮬레이션코드 메모리(520)의 요소의 OpSeq 필드에 있는 1-비트 필드가, 명령을 페치하기 위한 다음의 어드레스가 외부 에뮬레이션 코드 RAM(236)에 위치함을 나타낸다. 이 제1 기술에서, 온-칩 에뮬레이션 코드 ROM(232)가 외부 에뮬레이션 코드 RAM(236)의 실행을 개시한다. 제2 기술에서, 에뮬레이션 코드 RAM(236)에 있는 엔트리 포인트에 벡터링하기 위해 벡터 어드레스가 공급될 뿐이다.
명령 캐쉬(214), 명령 페치 제어 회로(218), 및 명령 디코더(220)는, 3개의 명령 페치 및 디코드 모드로 기능한다. 제1 모드에서는, 명령 디코더(220)가 온-칩 에뮬레이션 코드 ROM(232)으로부터 에뮬레이션 코드 Op쿼드를 페치한다. 각 Op쿼드는 4개의 오퍼레이션(Ops) 및 제어 전송 정보(OpSeq)를 가지고 있어, 페치 및 디코드 기능의 다음의 사이클을 결정한다. 제2 모드에서는, 명령 페치 제어 회로(218)가 온-칩 L1명령 캐쉬(214)의 일부인 명령 캐쉬(214)의 x86 매크로 명령 바이트의 페칭을 제어한다. x86 매크로 명령은 매크로 명령 디코더(230)에 의해 디코드되는 바, 이 매크로 명령 디코더(230)는 4개의 오퍼레이션(Ops)을 발생한다. 4개의 Ops 및 OpSeq 필드는 완전한(full) Op쿼드를 형성한다. 명령 디코더(220)는 분기 유닛(234) 및 매크로 명령 디코더(230)의 벡터링 기능성을 이용하여 임의의 코딩된 제어 전송을 수행한다. 제3 모드에서는, 명령 페치 제어 회로(218)가 명령 캐쉬(214)로부터의 Op코딩 형식의 에뮬레이션 코드를 포함한 64-비트 워드를 사이클당 1개의 64-비트 워드 속도로 페칭하는 것을 제어한다. 각 64-비트 워드는 1개의 오퍼레이션(Op)에 대응한다. 다른 실시예에서는, 사이클당 복수의 64-비트 워드가 액세스될 수 있다. 4개의 64-비트 워드가 액세스 되는 실시예에서는, 에뮬레이션 코드 RAM(236)가 온-칩 에뮬레이션 코드 ROM(232)의 경우와 같은 방식으로 완전한 Op쿼드를 공급하여, 매우 효율적인 완전하게 재프로그램 가능한 프로세서가 달성되게된다. 완전하게 재프로그램 가능한 프로세서는 매우 다른 기능의 프로세서들의 소프트한 구현을 가능케 할 수 있다고 하는 이점을 가진다. 예를 들면, x86 프로세서 및 PowerPC(상표명)를 1개의 하드웨어상에서 실현할 수 있다.
제1 및 제3 오퍼레이팅 모드에서는, 제어 전송 정보가 Op쿼드의 오퍼레이션 시퀀싱(Opseq) 필드내에 형식화(format)된다. 무조건 제어 전송(예를 들면, 분기(BR) 및 에뮬레이션으로부터의 리턴(ERET) 오퍼레이션)은 Opseq 제어 전송 정보를 이용하여 완전하게 제어된다. 조건 전송(예를 들면, 조건 분기(BRcc))은 Opseq 필드와 분기 조건(BRCOND) 오퍼레이션의 조합을 이용하여 제어된다. OpSeq 필드의 형식이 제7도에 나타나 있다. 16-비트의 OpSeq 필드(700)는, 2-비트의 시퀀싱 액션(ACT) 필드 (710), 1-비트의 외부 emcode 필드(712), 및 13-비트의 오퍼레이션(Op)어드레스 필드(714)를 가진다. ACT 필드(710)에 있어서의 4개의 시퀀싱 액션은 이하와 같이 인코딩된다.
OpSeq의 시퀀싱 액션이 무조건인지 조건부인지 여부는, Op쿼드내의 어디에 분기 조건(BRCOND) Op가 존재하는지 여부에 따라 정해진다. Op쿼드내의 BRCOND Op는, 테스트되는 조건 및 대체 에뮬레이션 코드 타겟 어드레스를 지정한다. 명시적인 정적 분기 방향 예측 비트는 존재하지 않는다. 대신에, 예측 액션 및 다음의 어드레스는 항상 OpSeq 필드(700)에 의해 지정되며, "예측되지 않은(not predicted)" 다음의 어드레스는, 항상 BRCOND Op에 의해 지정된다. BRCOND Op는 항상 무조건 호출을 포함하는 BSR 시퀀싱 액션과 짝(pair)지어진다. 무조건 및 조건부의 "예측이 취해진(predicted-taken)" 호출의 경우에, BRCOND Op는 세이브될 리턴 어드레스를 지정한다.
외부 emcode 필드(712)는, 실행되는 에뮬레이션 코드가 외부 에뮬레이션 코드 RAM(236)에 존재하는 경우에 1로 설정된다. 외부 emcode 필드(712)는, 실행되는 에뮬레이션 코드가 내부 에뮬레이션 코드 ROM(232)에 존재하는 경우에 0으로 설정된다. Op어드레스 필드(714)는, 비-엔트리(non-entry) 포인트 Op쿼드내의 타겟 Op의 어드레스를 나타낸다.
Opseq 제어 전송 정보는, Op쿼드 또는 64-비트 메모리 워드가 페치되어 "동시 디코드(instantaneously decoded)"될 때, 무조건 제어 전송을 제어한다. 디코드되는 다음 명령의 지정은 Opseq 필드에 의해서만 제어된다. Opseq 필드는 3개의 대안적인 액션중 하나를 지정한다. 첫째, Opseq 필드는 지정된 14-비트의 단일 오퍼레이션 워드 어드레스에서 에뮬레이션 코드 ROM(232)로부터의 에뮬레이션 코드를 페치하도록 하여, 따라서 에뮬레이션 코드 ROM(232)Op 쿼드가 페치된다. 둘째, Opseq 필드는, 지정된 14-비트의 단일 오퍼레이션 워드 어드레스에서 에뮬레이션 코드 RAM(236)로부터의 에뮬레이션 코드를 페치하도록 하여, 따라서 에뮬레이션 코드 RAM(232) 64-비트 메모리워드가 페치된다. 셋째, Opseq 필드는 에뮬레이션으로 부터의 리턴(ERET) 지시를 포함하는 바, 이는 명령 디코더(230)로 하여금 x86 마이크로 명령 디코딩으로 리턴하도록 한다.
에뮬레이션 코드 ROM(232)로부터 페치된 에뮬레이션 코드는, 정렬된 Op쿼드의 형태로 페치된다. Op쿼드내의 중간 로케이션에의 분기는, Op쿼드내의 선행 오퍼레이션이 그 선행 오퍼레이션 대신에 NOOP를 페치 함으로써 무효인 것으로 처리되도록 한다.
64-비트 메모리워드를 에뮬레이션 코드 RAM(236)로부터 페치하기 위한 바이트 메모리 어드레스는, 지정된 14-비트 오퍼레이션 어드레스를 0으로 설정된 3개의 최하위 비트를 결합함으로써 생성되며, 그럼으로써 정렬된 8-비트 어드레스가 생성된다. 64-비트 메모리워드를 페치하기 위한 바이트 메모리 어드레스는 8-비트의 정렬된 어드레스이며, 따라서 메모리 Op디코딩 및 페치/디코드의 진행이 일관적이고 단순화되게 한다.
Opseq 제어 전송 정보는 또한 조건부 제어 전송을 위해서 디코드되는 즉시 다음 명령(immediate next instruction)의 표시를 제어한다. 분기 조건(BRCOND) 오퍼레이션은, 테스트되고 평가되는 조건 코드를 지정하며, 대안적인 14-비트 에뮬레이션 코드 페치 및 디코드 어드레스를 지정한다. 따라서, 조건부 제어 전송을 위한 Opseq 제어 전송 정보는 조건 분기의 예측 경로를 효과적으로 지정한다. BRCOND 어드레스는 통상 14-비트 타겟 Op워드 어드레스이거나, 다음의 "순차적" 오퍼레이션(Op)의 14-비트 Op워드 어드레스이다. 보다 일반적으로, BRCOND 어드레스는 완전히 일반적인 2-웨이 조건 분기를 지정할 수 있다. 조건부 ERET 오퍼레이션은, ERET 오퍼레이션을 지정하도록 Opseq 필드를 설정하여, 조건부 ERET가 예측되도록 하는 식으로 실행된다. 만일 ERET 오퍼레이션이 이후에 예측 미스인 것으로 밝혀지면, ERET에 의해 지령된 x86 매크로 명령 스트림은 중단되고 BRCOND 오퍼레이션에 의해 지정된 순차적 매크로 명령 스트림이 재시작된다.
BRCOND 오퍼레이션은 미발행 상태로 스케쥴러(260)에 적재된다. BRCOND 오퍼레이션은 스케쥴러(260)의 분기 분석 유닛에 의해 순차적으로 평가된다. 분기가 적절히 예측되었을 경우에 이 분기는 완료된 것으로 표시된다. 그렇지 않은 경우에, BRCOND 상태는 미발행 상태로 되며 Op커미트 유닛에 의해 검출될 때 분기 중단 신호를 트리거한다.
에뮬레이션 코드 메모리(520)는, 단일-레벨(내포구성이 없음) 서브루틴의 기능성을 지원하고 있는바, 여기서 Opseq 필드는 에뮬레이션 코드의 페칭을 위한 대안들을 지정하도록 설정된다. 이 대안들은, Op쿼드 또는 메모리 Op내의 BRCOND Op의 즉시 필드로부터의 14-비트 Op워드 어드레스가 서브루틴 리턴 어드레스 레지스터에 적재되는 점을 제외하고는 전형적인 2-웨이 조건부 분기로서 구성된다. 이 서브루틴 리턴 어드레스 레지스터는 14-비트 Op워드 어드레스 및 단일 비트를 저장하며, 이 단일 비트는 상기 리턴 어드레스가 에뮬레이션 코드 ROM(232)에 존재하는지 혹은 RAM(236)에 존재하는지를 나타낸다. 이 BRCOND Op에 의해 지정된 조건 코드는 참(TRUE)을 포함하는 대안이 될 수 있어, 무조건 및 (예측이 취해지는)조건부 서브 루틴 둘다가 지정되게 된다. 그러나, BRCOND Op는 서브루틴 리턴 어드레스 레지스터 내에 정의되지 않은 값을 적재하는 것이 회피되도록 지정되어야만 한다.
모든 에뮬레이션 코드 서브루틴 지원 및 리턴 어드레스 레지스터 관리는 파이프라인 앞의 에뮬레이션 코드 시퀀서(510)에 의해 실행된다. 따라서, 리턴 어드레스 레지스터 적재 및 사용은 표준 디코더의 타이밍과 완전하게 동기화되어 지연이 생기지 않게 된다.
2-웨이 에뮬레이션 코드 분기
에뮬레이션 코드 ROM(232)은 복수의 오퍼레이션(Ops) 시퀀스용 저장소이다. 오퍼레이션 시퀀스는 정의된 엔트리 포인트에서 시작되는바, 이는 에뮬레이션 코드 ROM(232)내에 하드 코딩(hardcoding)되어 오퍼레이션 시퀀스를 종료시키는 에뮬레이션 코드(ERET) Opseq 지령으로부터 리턴으로 확장한다. 한 시퀀스에 있어서의 오퍼레이션의 수는 통상 여러가지 다른 기능을 실행하기 위해서 적절한 수로 바꿀 수 있다. 일부 단순한 x86 명령은, 에뮬레이션 코드 ROM(232)에 1개의 Op엔트리 밖에 갖지 않지만, 이들 명령은 Op쿼드의 세분성(granularity)을 가지고 페치된다. 더욱 복잡한 x86 명령들은 많은 컴포턴트 오퍼레이션(component operation)을 사용한다. 에뮬레이션 코드 ROM(232)의 저장소는, 고정된 ROM 어드레스 공간에 프로그램 된 복수의 Op쿼드로서 구성된다. 각 Op쿼드는 4개의 RISC Op필드 및 1개의 Opseq 필드를 가진다. 이 오퍼레이션 시퀀스는 통상 Op쿼드내에 정렬되지 않으며, 따라서 에뮬레이션 코드 ROM(232) 내의 산재된 로케이션들에 분기시키기 위한 기술의 부재시, 에뮬레이션 코드 ROM(232) 내의 많은 ROM 유닛들이 사용 불가능하여 집적회로 공간을 쓸데없이 낭비하게 된다. 더욱이, 에뮬레이션 코드 ROM(732)에서의 명령의 엔트리 포인트 어드레스가 x86 명령의 opcode로부터 합성되기 때문에, 엔트리 포인트 어드레스가 종종 ROM 어드레스 공간 전체에 간격을 두어 고정된 위치에 산재되게 되어, ROM내의 사용되지 않는 부분들이 늘어나게 된다. 엔트리 포인트를 통한 액세스가 행해지지 못하는 ROM내의 위치들은 다른 용도로 쓰일 수 있지만, 순차적인 액세스를 허용하기에 편리하지 못하다는 결점이 있다. Opseq 필드는 이러한 산재된 로케이션에의 분기를 위한 기술을 제공함으로써 메모리 공간의 낭비를 제거하게 된다.
Op쿼드의 4개의 RISC Op필드 각각은, 단순한 RISC형 오퍼레이션을 저장한다. Opseq 필드는 에뮬레이션 코드 시퀀서(510)에 통신되어, 에뮬레이션 코드 시퀀서(510)로 하여금 에뮬레이션 코드 ROM(232)내의 다음의 위치로 분기하도록 한다. 에뮬레이션 코드 ROM(232)에서의 4개의 RISC Op필드 각각은, 조건부 또는 무조건의 분기 오퍼레이션을 저장함으로써 타겟 어드레스를 지정하며, 따라서 복수의 분기가 단일 Op쿼드로 인코딩되게 된다. 명령 에뮬레이션 회로(231)의 다른 실시예에서, Op쿼드는 Opseq 필드와 함께 Op의 시퀀스를 정하는 1개의 분기 오퍼레이션만을 가지도록 제한된다. 4개의 RISC Op 필드 중 하나에서의 조건부 분기 Op와 Op쿼드에서의 Opseq 필드를 조합함으로써, 2개의 가능한 타겟 또는 다음의 어드레스를 갖는 Op쿼드가 생성된다.
복수의 타겟 어드레스를 가지는 Op쿼드의 경우, 에뮬레이션 코드 시퀀서(510)는 하드 코딩된 예측 타겟 어드레스를 선택함으로써 오퍼레이션의 시퀀스를 정한다. 따라서, 조건 분기를 포함한 Op쿼드의 경우, 에뮬레이션 코드 시퀀서(510)가 조건 분기에 대해 하드 코딩된 Opseq 타겟 어드레스를 우선적으로 선택한다. 무조건 분기는, 프로세서(120)의 분기 예측 기능에 근거하여 후속 처리되어 2-웨이 에뮬레이션 코드 분기의 수행에 의해 추가의 분기 처리 오버헤드가 발생하지 않게 된다.
에뮬레이션 마이크로코드는, Op쿼드의 첫 번째 3개의 위치중 하나에 BRCOND Op가 배치되도록 기록된다. 따라서, Op쿼드 내의 BRCOND Op에 후속되는 Ops는, 분기가 최종적으로 취해지는지 여부에 근거하기보다는 예측된 방향에 근거하여 실행된다. 분기가 최종적으로 정확히 예측된 것으로 밝혀진 경우에, Op쿼드의 모든 Ops 및 후속의 Op쿼드의 모든 Ops는 스케쥴러(260)에 커미트된다. 만일 이 분기가 최종적으로 예측 미스된 것으로 밝혀진 경우에, BRCOND Op에 후속되는 모든 Ops 및 모든 후속 Op쿼드가 중단된다. 에뮬레이션 코드는 분기 조건, 타겟 어드레스, "순차적" 어드레스, 및 분기 조건의 예측을 포함한 형태로 공급된다.
대부분의 명령에 대해서, Opseq 필드만이 다음의 페치 어드레스, 즉 벡터 어드레스 또는 ERET 리턴 어드레스를 공급한다. 이것은 제어용 하드웨어를 단순화 하여, 조건 분기 또는 분기 예측의 분석 없이 오퍼레이션의 페칭을 제어할 수 있는 고속의 단순한 제어 논리를 공급한다는 점에서 장점이 있다. 조건 분기명령의 경우에 Opseq 필드가 예측 분기 어드레스를 공급하고, 쿼드에서의 BRCOND 오퍼레이션이 평가되어야 할 조건 코드를 지정함과 아울러 예측 미스의 경우에 대안적인 페치 어드레스를 지정한다. 에뮬레이션 코드 처리는, 일부의 제약을 갖는 프로그램에 의해 명령 제어 시퀀스가 선택되는 비순차적인 Op쿼드 페칭의 유연성을 얻을 수 있는 장점이 있다. 따라서, Opseq 필드는 에뮬레이션 코드 ROM(232)의 사용되지 않는 로케이션에 효율적으로 Op시퀀스를 적용시키는데 이용될 수 있는 장점을 갖는다. 이 에뮬레이션 코드 처리는 또한, 조건 분기의 경우는 물론 호출 명령 뒤의 명령으로 리턴하도록 제약되기 보다는 후속하여 임의의 로케이션으로 리턴되게 되는 서브루틴 호출의 경우에도 선택적인 2-웨이 분기의 유연성을 갖는다. 타겟 어드레스로 분기하는 Opseq 필드의 이와 같이 이용은 시간적 또는 사이클 패널티를 일으킴이 없이 무조건 분기를 달성할 수 있는 이점을 갖는다.
에뮬레이션 환경 치환
에뮬레이션 코드 시퀀서(510)는 여러가지 에뮬레이션 환경 치환을 제어하여, 에뮬레이션 코드 ROM(232)에서의 오퍼레이션 엔트리의 수보다 많게 엔코딩 오퍼레이션의 수를 확장시킬 수가 있다. 에뮬레이션 코드 시퀀서(510)는, Op필드의 특정의(전형적으로는 전용의) 인코딩들을 분석하여, 언제 치환을 행하고 어느 치환이 수행될지를 판정하는 논리 회로를 구비하고 있다. 대부분 인코딩들은 직접적으로 필드의 값을 지정한다. 다른 인코딩들은 에뮬레이션 환경 치환을 거쳐 간접적으로 필드의 값을 지정한다. 에뮬레이션 모드 치환을 이용함으로써, CISC 기능성의 인코딩을 달성할 수 있을 뿐만 아니라 에뮬레이션 코드 ROM(232)의 사이즈를 실질적으로 작게할 수 있음으로써, 프로세서의 집적회로의 사이즈 및 제조 코스트를 절감할 수 있는 이점을 얻을 수 있다. 레지스터 필드 및 몇개의 사이즈 필드를 포함하는 Op필드는 레지스터를 직접 지정하거나 또는 AX 또는 T1과 같은 간접 레지스터 지정자를 지정한다. 마찬가지로, 필드는 직접 레지스터 지정자인 RegM을 선택 할 수 있다. Op치환 논리는, 간접 레지스터 지정자에 대한 코딩을 분석해, 레지스터 코딩을 정의함과 아울러 이 레지스터 코딩을 현재 레지스터로 치환한다. 상기 사이즈 필드는 1바이트, 2바이트, 또는 4바이트를 선택하거나 혹은 D사이즈를 선택하여, 현재의 유효 데이터 사이즈가 원래의 인코딩을 대신하게 된다. HReg와 같은 기호는 T2에 대한 인코딩을 나타내는 기호인 HReg T2와 같은 특수 인코딩을 나타낸다. 이러한 기호에는 HReg, HDSz, HASz, HSegDescr, HSpecOpType등이 있다.
이하의 의사-RTL 코드는 에뮬레이션 환경 치환 오퍼레이션을 기술한 것이다.
에뮬레이션 코드 시퀀서(510)는, 에뮬레이션 코드 ROM(232)에서의 다음의 엔트리 포인트에 시퀀싱하여, 4개의 오퍼레이션(Ops) 및 한 개의 Opseq 필드를 포함하는 Op쿼드를 생성한다. Op쿼드에서의 4개의 오퍼레이션 각각에 대해, 여러가지 치환이 만들어지는바, 치환의 타입은 5개의 범용 오퍼레이션 타입 중 특수 오퍼레이션 타입에 따라 달라진다. 5개의 오퍼레이션 타입에는 레지스터 오퍼레이션(RegOps), 적재-저장 오퍼레이션(LdStOps), 적재 즉시 오퍼레이션(LIMMOps), 특수 오퍼레이션(SpecOps), 및 부동 소수점 오퍼레이션(FpOps)이 포함된다. 5개의 오퍼레이션 타입에 대한 Op형식들이 제 6A도 내지 제 6E도에 보여져 있다.
에뮬레이션 코드 ROM(232)에 의해 생성되는 Ops는 본래 총체적(generic)인 것이다. 특히, 이 Ops는 x86 명령과 정확하게 일치하지는 않는다. 그 대신에, 에뮬레이션 코드 ROM(232)으로부터의 Ops는 x86 명령의 구조를 형성한다. Op템플릿 내의 여러가지 비트 필드들은 에뮬레이션 코드 시퀀서 (510)에 의해 실행되는 치환 기능을 이용하여 치환된다. 간단하게 설명하면, 이 치환 기능은 Op의 몇개의 비트를 다른 선택된 비트로 치환한다.
x86 명령은 전형적으로 modr/m 바이트가 후속되는 opcode를 포함한다. modr/m바이트는 이 명령에서 사용될 인덱싱 타입 또는 레지스터 번호를 나타낸다. modr/m바이트는 2-비트(MSB) 모드 필드, 3-비트(중간) reg 필드, 및 3-비트(LSB) r/m필드를 포함한 3개의 필드를 가진다. 이 모드 필드는 r/m필드와 결합되어, 8개의 레지스터 및 24개의 인덱싱 모드를 나타내는 32개의 가능한 값을 형성한다. reg 필드는, 레지스터 번호 또는 opcode 정보의 3개 이상의 비트를 지정한다. r/m필드는 레지스터를 오퍼랜드의 로케이션으로서 지정하거나 혹은 레지스터들과 인덱싱 모드들을 정의하기위해 상기 모드 필드와 함께 이용된다.
제6A도는 RegOp 형식의 여러가지 필드를 나타내는 레지스터 오퍼레이션(RegOp) 필드 인코딩 그래픽을 보인 것이다. RegOp 필드(610)에 있어서, 상위 비트(36 및 37)이 클리어 되어, 오퍼레이션을 RegOp로서 나타낸다. RegOp 필드(610)는 로케이션 [35 : 30] 에 6-비트 오퍼레이션 타입(TYPE) 필드(612), 비트 로케이션 [29 : 26] 에 4-비트 확장(EXT) 필드(614), 비트 로케이션 [25] 에 RU1-only(R1) 비트 (616), 비트 로케이션 [24 : 22] 에 3-비트 오퍼레이션/데이터 사이즈(DSz) 필드(618), 비트 로케이션 [21 : 17] 에 5-비트 목적지(DEST) 범용 레지스터 필드(620), 및 비트 로케이션 [16 : 12] 에 5-비트 소스 1(SRC1) 범용 레지스터 필드(622)를 가진다. RegOp 필드(610)는 또한 비트 로케이션 [9] 에 단일 비트 세트 상태(SS) 필드(624), 비트 로케이션 [8] 에 단일-비트 즉시 소스 2(I) 필드(626), 비트 로케이션 [7 : 0] 에 소스 2 오퍼랜드(IMM8/SRC2) 필드(628)용의 8-비트 즉시 데이터 또는 범용 레지스터를 가진다. RegOp 인코딩의 TYPE 필드(612)는 이하와 같은 것을 포함한다.
몇개의 RegOP 인코딩, 특히 xx01x 인코딩들은, 조건 코드 의존성을 지정한다. 로테이트 및 시프트 OPs는 다른 statmod 비트가 어써트(assert) 되는 점을 제외하고는 기능적으로 등가이다.
확장 필드(EXT)(614)가 TYPE 필드(612)의 비트<0>과 함께 MOVcc 오퍼레이션이 5-비트 조건 코드를 지정하는데 있어 사용된다. 확장 필드(EXT)(614)는 또한, RDxxx/WRxxx 오퍼레이션이 4-비트의 특수 레지스터 번호를 지정하는데 사용된다. 세트 상태(SS) 필드(624)는, EXT 필드(614)와 함께 오퍼레이션에 의해 영향을 받는 상태 플래그를 지정하는데 사용된다. 세트 상태(SS) 필드(6240가 1로 설정되어 Op가 플래그를 변경시킴을 표시하게되는 Ops의 경우에, 확장 필드(EXT)(614)는 상기 Op에 의해 변경되는 플래그들의 그룹들을 나타내는 4개의 상태 변경 비트를 지정한다. RDSEG Ops의 경우에, EXT 필드(614)는 4-비트 세그먼트(셀렉터) 레지스터를 지정한다. WRFLG 조건부 Op의 경우에, 특수 레지스터 인코딩은 SS필드가 설정되어 있는 경우를 위해 원하는 StatMod 값과 매칭한다. 세트 상태(SS) 필드(624) 및 EXT 필드(614)는 RegOp 필드이다.
조건 코드들이, 5개의 비트로 인코드되고 5-비트 조건 코드 필드의 비트<0>은 조건 또는 이의 상보적인 조건이 참(true) 또는 어써션을 위해 테스트되어야 할지 여부를 지정한다. 예를 들면 CC<0>이 1인 경우는 이 조건은 반전된다. 5-비트 조건 코드 CC필드의 비트<4 : 1>는 평가되어야 할 조건을 이하와 같이 지정한다.
비트 cc [0] 은, 조건 또는 이 조건의 상보가 참인지 여부를 지정한다.
정의로서, 부호 "~" 는 논리 NOT 오퍼레이션을 나타내고, ". " 는 논리AND 오퍼레이션을 나타내며, "+"은 논리OR 오퍼레이션을 나타내고, "^" 은 논리 XOR 오퍼레이션을 나타낸다. OF, SF, ZF, AF, PF, 및 CF는 표준 x86 상태 비트이다. EZF 및 ECF는 각각 에뮬레이션 0 플래그 및 에뮬레이션 캐리 플래그인바, 이들은 아키텍쳐럴 0 플래그 ZF 및 캐리 플래그 CF가 변경되지 않을 때 x86 명령을 실행하는 시퀀스에서 에뮬레이션 코드에 의해 사용된다. IP, DTF, SSTF는 각각, 인터럽트가 보류중임을 표시하는 신호, 디버그 트랩 플래그를 표시하는 신호, 및 단일 스텝의 트랩 플래그를 표시하는 신호이다.
분기 조건을 표시하는 신호인 STRZ 및 MSTRC는 논리적으로 동일하고, 이동 스트링 명령 MOVS와 같은 x86 명령들을 실행하는데 이용된다. 이들 x86 명령들에 대해, 에뮬레이션 코드는 레지스터에 인덱스를 저장하며, BRCOND로 끝나는 루프를 생성한다. 각 루프의 반복에 의해, 데이터의 블록이 이동되어 인덱스가 감소된다. 분기 예측은 초기에, BRCOND가 루프의 시점으로 분기하는 것을 예측한다. 조건 MSTRC는 분기 평가 논리가, 상기 인텍스가 x86 명령의 마지막 부근의 소정의 지점에 가까워졌을 때를 명령 디코더에 신호함을 표시한다. 그 후, 디코더는 스케쥴러에 적재되는 BRCOND를 위한 분기 예측을 변경시킨다. 따라서, 분기 예측 미스 및 관련 중단이 루프의 종료시 회피될 수 있게된다. 이러한 식으로, 프로세서의 효율이 개선된다.
EXT 필드(614)는, x86 플래그 및 2개의 에뮬레이션 플래그에 대응하는 4개의 플래그를 포함하는 조건 플래그들을 갱신하는데 사용된다. 이 8개의 플래그는 플래그의 그룹마다 하나의 상태 변경 비트를 이용하여 4개의 그룹으로 분할된다. EXT 필드(614)는 사실상 TYPE 필드(612) 사양(specification)으로부터 독립된 여러가지 조건 코드 플래그의 갱신을 정의하며 기능적으로 관련성이 있는 플래그들이 집단적으로 제어 및 갱신된다. 관련 플래그들을 그룹으로 갱신함으로써, 제어 논리를 보존할 수 있는 이점을 갖게된다. EXT 필드(614)는 특수 명령에 대해서 갱신될 플래그들을 결정하는 비트 세트를 정의한다. 독립적인 TYPE 필드(612) 및 세트 상태(SS) 필드(624)를 이용하여, 명령 타입으로부터 조건 코드 처리를 분리시킴으로써, 프래그들을 갱신하지않는 몇 개의 명령들이 정의될 수 있게 된다. 따라서, 조건 플래그의 갱신이 불필요한 이러한 환경하에서, 플래그의 갱신을 디스에이블링하여, 불필요한 이전의 플래그 값에 대한 의존성을 없앨 수 있는 장점을 얻을 수 있다.
RU1-only 필드(616)는, 제1 레지스터 유닛(244)에는 발행되지만은 제2 레지스터 유닛(246)에 대해서는 발행되지 않는 Ops를 나타내며, 따라서 R1필드(616)는 실행 유닛 사양을 하드 엔코딩하기 위한 비트가 된다. 따라서, RU1-only 필드(616)는, 특수 실행 유닛만이 그 유닛상에서 실행 가능함을 표시하는바, 이는 일반적으로 이 특수 실행 유닛만이 그 유닛상에서만 구현되는 기능을 합체하고 있기 때문이다. 세트 상태(SS) 필드(624)는 EXT 필드(614)의 설정에 따라 플래그들을 변경한다. I필드(626)는, 소스 2 오퍼랜드가 즉시 레지스터인지 혹은 범용 레지스터인지를 지정한다. IMM8/SRC2 필드(628)는, I필드(626)가 0인 경우, 5-비트 범용 레지스터를 지정한다. IMM8/SRC2 필드(628)는, I필드(626)가 1인 경우, DSz 필드 사이즈에 의해 지정된 오퍼레이션의 사이즈로 확장되는 부호가 붙은 즉시 값(signed immediate value)을 지정한다.
레지스터 오퍼레이션(RegOp) 치환의 경우에, Op쿼드로부터의 오퍼레이션(Op)은 레지스터 오퍼레이션(RegOp)이다. 명령 레지스터(512)는 벡터링 디코더(418)에 의해 디코드되는 명령 바이트를 홀드한다. 벡터링 명령 디코드 동안, 벡터링 디코더(418)는 명령 레지스터(512)의 내용에 근거하여 초기 벡터링 쿼드 및 엔트리 포인터 어드레스를 발생한다. 동시에, 벡터링 디코더(418)는 명령 레지스터(512)의 필드 및 다른 정보에 근거한 여러가지 정보로부터 에뮬레이션 환경 변수(에뮬레이션 환경 레지스터(516)로도 칭함)를 초기화한다. 에뮬레이션 환경 레지스터(516)로 부터의 정보는 치환 오퍼레이션을 실행하는 Op치환 논리에 공급된다.
RegOp 치환의 경우는, 여러가지 치환이 6A도에 보인 RegOp 형식(610)의 필드에 대해서 행해진다. RegOp 오퍼레이션의 목적지(DEST)(620) 및 소스 1(SRC1)(622) 필드의 경우는, 5-비트의 레지스터 인코딩이 직접 레지스터 지정자(0-15), 또는 간접 레지스터 지정자(Reg 및 RegM)를 이용해 레지스터를 지정한다. 직접 레지스터 지정자는 16개의 레지스터중 하나를 직접 지정한다. 간접 지정자 Reg 및 RegM는, 에뮬레이션 환경 레지스터(516)로부터의 현재 레지스터 수(0~15)에 의해 Op디코드 시간에 치환된다. 명령 디코더(230)가 명령을 디코드하여 에뮬레이션 코드 ROM(232)에서의 에뮬레이션 코드 시퀀스에 벡터링하고, 그리고 이 명령 및 다른 정보로부터 여러가지 필드를 갖는 에뮬레이션 환경 레지스터(516)를 초기화할 경우에 치환이 행해진다. 에뮬레이션 코드 시퀀스의 오퍼레이션 동안, 이 시퀀스에서의 Ops는 간접 레지스터 필드 및 사이즈 데이터 필드와 같은 여러가지 필드를 포함하는 바, 이 필드들은 에뮬레이션 환경 레지스터(516)의 현재값에 근거하여 치환된다. Op치환 논리는, 필드에 대한 인코딩이 치환된 필드를 나타내고 있는지 여부를 판정한다. 필드에 대한 인코딩은 다른 필드가 치환됨을 나타낼 수도 있다. 예를 들면, dest(620) 및 src1(622) 필드에서의 간접 지정자 Reg 및 RegM의 코딩은 DSz 필드(618)가 또한 치환됨을 나타낸다.
DSz 필드(618)에 관해서는, x86 명령 세트의 명령들은 프로세서(120)의 현재의 디폴트 조건에 따라 8-비트, 16-비트, 또는 32-비트 데이터로 동작한다. DSz 필드(618)는, 1바이트, 2바이트, 또는 3바이트의 데이터 사이즈를 나타내는 3개의 비트를 가지고 있다. 데이터 사이즈의 치환을 지정하는 명령의 경우, 간접 사이즈 지정자는 A사이즈, D사이즈, 또는 S사이즈를 지정한다. 데이터 사이즈 치환은, B-비트 및 D-비트에 의해 결정된다. B-비트는 현재 스택-세그먼트 레지스터(SS)에 의해 지정된다. D-비트는 코드 세그먼트 레지스터(CS)에 의해 지정된다. 간접 사이즈 지정자의 경우는, S사이즈가 B-비트에 의해 결정된다. 유효 어드레스(A) 사이즈 및 유효 데이터(D) 사이즈는 D-비트에 의해 결정되며, 어드레스 또는 데이터 사이즈 오버라이트(over-write) 프리픽스에 의해 오버라이드할 수가 있어 에뮬레이션 환경 레지스터(516)에 홀드된다. 일반적으로, A사이즈, D사이즈, 및 S사이즈의 간접 지정자들은 절대 인코딩(absolute encoding)에 의해 2바이트 또는 4바이트로 치환된다. 예를 들면, D사이즈가 선택되는 경우에, 데이터 사이즈는 에뮬레이션 환경 레지스터(516)에서의 비트로 지정된 유효 데이터 사이즈에 근거해 2바이트 또는 4바이트로 분해된다. 마찬가지로, 간접 사이즈 지정자가 A사이즈를 인코딩하는 경우에, 유효 데이터 사이즈는 에뮬레이션 환경 레지스터(516)의 비트에 의해 2바이트 또는 4바이트로 지정된다. 간접 지정자는 S사이즈를 선택하는 경우, B-비트는 2바이트가 치환될지 또는 4바이트가 치환될지를 결정한다.
Imm8/Src2 필드(628)의 치환은, 소스 2(src2) 오퍼랜드가 즉시 값이 아닌 간접 레지스터 지정자인 경우에게만 실행된다. Op치환 논리는, 즉시(I) 필드(626)에 대한 인코딩이 I필드 비트(626)를 액세스함으로써 Imm8/Src2 필드(628)에서의 치환을 나타내고 있는지를 판정함과 아울러, 간접 레지스터 지정자가 선택된 경우, 레지스터의 범용 레지스터 지정을 RegOp 형식(610)의 Imm8/Src2 필드(628)로 치환함으로써 Imm8/Src2 필드(628)에서의 치환을 나타내고 있는지를 판정한다. 메모리-인덱스 어드레싱 형식을 이용하는 레지스터에 저장된 src2 오퍼랜드의 경우에, 치환은 행해지지 않으며 RegOp 형식(610)의 Imm8/Src2 필드(628)에 인덱스값이 적재된다. RegOp 형식(610)은 Src1 펄드 (622), Imm8/Src2 필드(628), 및 dest 필드(620)를 포함한 RISC형의 3개의(2개의 소스 및 1개의 목적지) 오퍼랜드 형식이다. 표준 x86 형식은 2-오퍼랜드 형식이다. I필드(626)는, 소스 2 오퍼랜드가 즉시 값 레지스터 혹은 범용 레지스터의 형식을 취할 수 있는 유연성을 갖게하는 장점을 갖는다.
RegOp 필드(610)는 부호가 있는(signed) 곱셈(MUL1S), 부호가 없는(unsigned)곱셈(MUL1U), 상위 데이터의 곱셈(MULEH) 및 하위 데이터의 곱셈(MULEL) Ops를 포함하는 특정의 Ops의 그룹을 정의한다. 이러한 Ops는 곱셈 및 비 적재 오퍼레이션의 일부를 실행하여, 복수의 이러한 특정의 곱셈 Ops로부터 곱셈 명령이 형성되게 된다. 나눗셈(division) 오퍼레이션은 마찬가지로, 복수의 특정의 단순한 나눗셈 Ops를 조합함으로써 실행되는바, 예컨대 나눗셈에서 2-비트 반복을 수행한다. 이러한 나눗셈은 1 및 2개의 비트 나눗셈(DIV1), 단계 나눗셈(DIV2), 나눗셈 비적재 나머지(DIVER) 및 나눗셈 비적재 몫(DIVEQ)을 포함한다.
WRIP Op는 퇴거시 실행 어드레스를 변경하기 위해 x86 프로그램 카운터(PC)에 기록을 행하여 원하는 어드레스에서 명령의 페칭을 시작한다. WRIP Op는, 명령 길이의 디코딩이 곤란 또는 불가능하게 되어 논리가 복잡하게 되는 것을 회피하도록, 인크리먼트된 논리가 올바르게 명령길이를 디코드할 수 없는 여러가지 명령의 경우에 특히 유용하다. 이 명령은 또한 명령 페치 오퍼레이션의 시리얼화 및 분기의 에뮬레이트에 대해서도 유익하다. 논리가 명령길이를 올바르지않게 디코드하도록 하고, 이 올바르지않게 디코드 된 명령 길이가 무시되도록 WRIP Op를 이용하여 프로그램 카운터를 설정할 수 있게 함으로써 효율이 오르게 된다.
체크 셀렉터(CHKS) Op는, x86 명령 세트 세그먼트 디스크립터 및 셀렉터를 다루는데 사용된다. CHKS Op는, 널(null) 셀렉터의 체크 오퍼레이션 및 디스크립터 테이블내로의 어드레스 오프셋 발생 오퍼레이션을 비롯한 세그먼트 레지스터 적재 프로세스를 개시한다.
몇 개의 기록 디스크립터 Ops(WRDH, WRDL, WRDR)가 컴퓨팅 기술 분야 특히 종래의 x86 오퍼레이션과 관련하여 잘 알려져 있는 리얼모드(WRDR) 및 보호 모드(WRDH/WRDL) 세그먼트 레지스터의 적재를 실행하도록 정의된다. 기록 데스크립터 리얼(WRDR) Op는 리얼모드 방식으로 세그먼트 레지스터를 적재한다. 기록 디스크립터 보호모드 하이 및 로우(WRDH/WRDL) Ops는, 보호 모드에서의 오퍼레이션 체크의 시퀀스를 수행한다. 종래의 x86 아키텍쳐에서, 명령 코드 및 데이터 세그먼트, 및 I/O 어드레스 스페이스에 대한 태스크의 액세스가 전형적으로 상태 머신으로서 동작하는 프로세서 하드웨어에 의해 자동으로 체크된다. 여기에서 설명하는 프로세서에서는, 종래의 보호 모드의 체크가 하드웨어 원시의 에뮬레이션 코드 시퀀스로서 오퍼레이션의 시퀀스를 대신하여 실행된다.
제6B도는 적재-저장 오퍼레이션(LdStOp) 필드 인코딩 그래픽의 도시한 것으로서 LdStOp 형식의 여러가지 필드가 나타나 있다. LdStOp 필드(630)에서는, 상위 비트(36 및 37)이 각각 1 및 0으로 설정되어 상기 오퍼레이션을 LdStOp로서 나타낸다. LdStOp 필드(630)은 또한 비트 로케이션 [35 : 32] 에서 4-비트 오퍼레이션 타입(TYPE) 필드(632), 및 비트 로케이션 [31 : 30] 에서 2-비트 인덱스 스케일 팩터(ISF) 필드(634)를 가지며, 이것은 1 x, 2 x, 4 x 및 8을 지정한다. LdStOp 필드(630)은 비트 로케이션 [29 : 26] 에서 4-비트의 세그먼트 레지스터(SEG) 필드(636), 및 비트 로케이션 [25 : 24] 에서 2-비트의 어드레스 계산 사이즈(ASz) 필드(638)을 가지며, 이는 A사이즈, S사이즈, D사이즈 및 4개의 바이트간의 선택을 지정한다. 유효 데이터 및 어드레스 사이즈는 RegOp 치환과 같이 LdStOps를 대신하여 치환된다. LdStOp 필드(630)은 비트 로케이션 [23 : 22] 에서 2-비트 데이터 사이즈(DSz) 필드(640)를 갖고 비트 로케이션 [21 : 17] 에서 5-비트의 데이터 소스/목적지(DATA) 범용 레지스터 필드(642)를 가지며, 비트 로케이션 [16] 에서 단일 비트 큰 변위(LD) 비트(644)를 갖는 바, 상기 DSz는 정수용의 사이즈(1, 2, 4 및 D사이즈 바이트) 및 부동 소수점용의 사이즈(2, 4, 및 8바이트)를 지정하고, 상기 LD비트는 선행 Op로부터 Disp8 변위를 이용하여 큰 변위를 지정한다. LD-비트(644)는 Ops가 단지 38-비트의 폭, 즉 32-비트의 변위 전체를 오퍼레이션내로 지정하기에는 불충분한 명령 형식이기 때문에 유용하다. 8-비트로 인코딩된 변위만이 단일의 LdStOp 필드(630)용으로 가능하다. LD-비트(644)는 어써트 되었을 때 바로 선행하는 Op가 32-비트 변위 전체를 공급함을 표시한다. LdStOp 필드(630)는 비트 로케이션 [15 : 12] 에서 4-비트 베이스(BASE)의 범용 레지스터 필드(646)를 가진다. LdStOp 필드(630)는, 비트 로케이션 [11 : 4] 에서 8-비트 부호가 있는 변위(DISP8) 필드(684), 및 비트 로케이션 [3 : 0] 에서 4-비트 인텍스(INDEX) 범용 레지스터(649)를 가진다. LdStOp 인코딩의 TYPE 필드(632)는 이하와 같다.
적재/저장 오퍼레이션(LdStOp) 치환의 경우, 먼저 에뮬레이션 코드 시퀀서(510)는 LOCK 프리픽스가 에뮬레이션 환경의 셋업 동안에 확인되는지 여부를 판정한다. 만일 지정된 LdStOp 오퍼레이션이 저장 체크를 가지는 적재 정수(LDST)이며 LOCK 프리픽스가 확인되었을 경우, 에뮬레이션 코드 시퀀서(510)는 LDSTopcode 대신에 저장 체크를 가지는 적재 정수의 로크된(locked)(LDSTL) opcode를 이용한다.
LdStOp 치환의 경우, 여러가지 치환이 제6B도에 보인 LdStOp 형식(630)의 필드에 대해 이루어진다. LdStOp 오퍼레이션의 데이터 레지스터(DataReg) 필드(642)의 경우는, 5-비트 레지스터 인코딩이 직접 레지스터 지정자(0~15) 또는 간접 레지스터 지정자(Reg 및 RegM)를 이용해 레지스터를 지정한다. 직접 레지스터 지정자는 16개의 레지스터중 하나를 직접 지정한다. 간접 레지스터 지정자(Reg 및 RegM)는 Op디코드 시간에 에뮬레이션 환경 레지스터(516)로부터의 현재 레지스터 수(0~15)로 치환된다. 명령 디코더가 명령을 디코드하고, 에뮬레이션 코드 ROM(232)에서의 에뮬레이션 코드 시퀀스를 벡터링하여, 에뮬레이션 환경 레지스터(516)를 상기 명령 및 다른 정보로부터의 여러가지 필드와 함께 초기화함으로써 치환이 발생한다. 에뮬레이션 코드 시퀀스의 오퍼레이션 동안, 시퀀스내의 Ops는 예컨대 간접 레지스터 지정자 필드, 및 사이즈 데이터 필드와 같은 복수의 필드를 갖는 바, 이것들은 에뮬레이션 환경 레지스터(516)의 현재값에 근거해 치환된다. Op치환 논리는, 1개의 필드에 대한 인코딩이 치환된 필드를 지정하는지 여부를 판정한다. 하나의 필드에 대한 인코딩이 다른 필드들이 치환됨을 표시할 수도 있다. 상기 특정의 치환은 데이터 레지스터(DataReg)(642)가 레지스터 어드레싱 또는 메모리-인덱스 어드레싱을 이용하여 어드레스되는지 여부에 의존하여 결정된다. 만일 레지스터 어드레싱 형식이 지정되는 경우에, LdStOp 형식(630)의 DataReg 필드(642)는 간접 지정자 Reg에 의해 결정된다. 만일 메모리-인덱스 어드레싱이 지정되는 경우에는, LdStOp형식(630)의 DataReg 필드(642)는 간접 지정자 RegM에 의해 정해진다.
ASz 필드(638)및 DSz 필드(640)에 관하여, x86 명령 세트 명령들은 프로세서(120)의 현재의 디폴트 조건에 따라 8-비트, 16-비트, 또는 32-비트 데이터에 대해서 동작한다. ASz 필드(638) 및 DSz 필드(640)는 각각, 1바이트, 2바이트, 또는 3바이트의 데이터 사이즈를 나타내는 2개의 비트를 가진다. 데이터 사이즈의 치환을 지정하는 명령의 경우는, 간접 사이즈 지정자가 A사이즈, D사이즈, 또는 S사이즈를 지정한다. 데이터 사이즈 치환은 B-비트 및 D-비트에 의해 정해진다. B-비트는 현재 스택 세그먼트 레지스터(SS)에 의해 지정된다. D-비트는 코드 세그먼트 레지스터(CS)에 의해 지정된다. 간접 사이즈 지정자의 경우는, S사이즈가 B-비트에 의해 정해진다. 유효 어드레스(A) 사이즈 및 유효 데이터(D) 사이즈는, D-비트에 의해 정해져 어드레스 또는 데이터 사이즈 오버라이트 프리픽스에 의해 오버라이드되며, 에뮬레이션 환경 레지스터(516)에 홀드된다. 일반적으로, A사이즈, D사이즈, 및 S사이즈의 간접 지정자는 절대 인코딩에 의해 2바이트 또는 4바이트로 치환 또는 대체될 수 있다. 예를 들면, D사이즈가 선택되었을 경우, 데이터 사이즈는 에뮬레이션 환경 레지스터(516)에서의 비트에 의해 지정된 유효 데이터 사이즈에 근거하여 2바이트 또는 4바이트로 변환(resolve)된다. 마찬가지로, 간접 사이즈 지정자가 A사이즈를 인코딩하는 경우, 유효 어드레스 사이즈는 2바이트 또는 4바이트가 되도록 에뮬레이션 환경 레지스터(516)에서의 비트에 의해 지정된다. 간접 사이즈 지정자가 S사이즈를 선택했을 경우, B-비트는 2바이트 또는 4바이트가 치환되는지를 판정한다.
4-비트 세그먼트 레지스터 필드(636)가 치환되어야할지 여부를 판정하기 위해 LdStOp 오퍼레이션이 체크된다. 에뮬레이션 환경이 설정 되었을 때, 세그먼트 오버라이드 프리픽스가 모니터된다. 세그먼트 오버라이드 프리픽스는, LdStOp의 생성이 명령의 실행 오퍼랜드 세그먼트에 의존할 때 후속 명령의 디코드에 영향을 준다. 디폴트 세그먼트는 관련 범용 어드레스 모드에 따라 DS 혹은 SS이되며, 최종 세그먼트 오버라이드 프리픽스에 의해 지정된 세그먼트에 의해 대체된다. 세그먼트 레지스터 어드레스 공간은 종래의 x86 사양으로부터 4-비트로 확장되어, 추가의 특수 세그먼트 레지스터들이 지원될 수 있게 한다. 세그먼트 레지스터는 다음과 같이 인코드 된다.
Op디코드 시간에 있어, 에뮬레이션 코드 시퀀서(510)는 "OS"세그먼트 레지스터를 에뮬레이션 환경으로부터의 현재의 3 비트 세그먼트 레지스터 수로 대체한다. 따라서, 세그먼트 레지스터가 특수 세그먼트 레지스터에서 대안적으로 하드 코딩되거나 세그먼트 OS로 설정되는바, 이 세그먼트 OS는 현재의 유효 데이터 세그먼트 레지스터를 지정하지만, 세그먼트 오버라이드로 오버라이드 될 수 있다.
에뮬레이션 메모리 세그먼트 레지스터(MS)는 에뮬레이션 환경에서 사용하기 위한 특수 에뮬레이션 메모리의 액세스를 지정한다. 디스크립터 테이블 SegReg TS는 글로벌 디스크립터 테이블(GDT) 또는 로컬 디스크립터 테이블(LDT)의 액세스를 지정한다.
제6C도는, 적재 즉시 오퍼레이션(LIMMOP) 필드 인코딩 그래픽을 도시한 것으로서, LIMMOP 형식의 여러가지 필드를 나타내고 있다. LIMMOP 필드(650)에 대해, 상위 비트(36 및 37)는 모두 1로 설정되어 상기 오퍼레이션을 LIMMOP로서 나타낸다. LIMMOP 필드(650)는 또한 비트 로케이션 [35 : 20] 에서 16-비트의 즉시 하이 부분(immediate high part)(ImmHi)(652), 비트 로케이션 [19 : 16] 에서 5-비트의 목적지(DEST) 범용 레지스터 필드(654), 비트 로케이션 [15 : 0] 의 위치에 16-비트의 즉시 하위 부분(ImmLo)(656)을 가진다. ImmHi(652) 및 ImmLo(656)는 서로 결합하여, DEST 필드(654)에 의해 지정된 레지스터내로 적재되는 32-비트 값을 지정한다.
제 6D도는 SpecOp 형식의 여러가지 필드를 나타내는 특수 오퍼레이션(SpecOp) 필드 인코딩 그래픽을 보인 것이다. SpecOp 필드(660)에 대해, 상위 비트(35 내지 37)은 각각 101로 설정되며, 상기 오퍼레이션을 SpecOp로서 나타낸다. SpecOp 필드(660)는 비트 로케이션 [34 : 31] 에서 4-비트의 오퍼레이션 타입(TYPE) 필드(662), 비트 로케이션 [30 : 26] 에서 5-비트의 조건 코드(CC) 필드(664), 및 비트 로케이션 [30 : 26] 에서 2-비트의 데이터 사이즈(DSz) 필드(666)(이것은 1, 4, 및 D사이즈 바이트의 사이즈를 지정한다)를 가지고 있다. SpecOp 필드(660)는 비트 로케이션 [21 : 17] 에서 5-비트의 목적지 범용 레지스터(DEST) 필드(668), 비트 로케이션 [16 : 0] 에서 17-비트의 즉시 정수(Imm17) 필드(670)를 가진다. Imm17 필드 (670)은 17-비트의 부호가 있는 즉시 값 또는 14-비트 Op어드레스를 홀드한다. CC필드(664)는 BRCOND Ops에 의해서만 사용된다. DSz 필드(666) 및 DEST 필드(668)는 LDKxx Ops에 의해서만 사용된다. 표준 NOP Op는 "LIMM t0, <undefined>" 로 정의된다. SpecOp 인코딩의 TYPE 필드(662)는 이하와 같은 코드를 포함한다.
특수 오퍼레이션(SpecOp) 치환의 경우에, SpecOp가 체크되어 목적지 범용 레지스터(DestReg)가 레지스터 어드레싱 또는 메모리-인덱스 어드레싱을 이용하여 어드레싱 되는지 여부를 판정한다. 만일 레지스터 어드레싱 형식이 지정되는 경우, 에뮬레이션 코드 시퀀서(510)는 Reg 레지스터로부터의 제6D도에 보인 SpecOp 형식(660)의 DestReg 필드(668)로 이미 저장된 modr/m reg를 치환한다. 만일 메모리-인덱스 어드레싱 형식이 지정되었을 경우, 에뮬레이션 코드 시퀀서(510)는 Regm 레지스터로부터의 이전에 저장된 modr/m regm를 SpecOp 형식의 DestReg 필드(668)로 치환한다. DestReg 필드(668)는 오퍼레이션 LDK 또는 LDKD의 목적지인 5-비트 레지스터의 수를 홀드한다.
SpecOp는 또한 데이터 사이즈(DSz) 필드(666)가 치환되어야할 것인지 여부 판정하기 위해 체크된다. DSz 필드에 대한 치환 값은 에뮬레이션 환경이 오퍼랜드 사이즈 오버라이드에 의해 오버라이드된 현재 세그먼트 디폴트 정보에 따라 정의되었을 때, 에뮬레이션 코드 시퀀서(510)에 의해 Op 처리 이전에 결정된다. DSz 필드(666)는 1바이트, 4바이트, 또는 적재 정수 오퍼레이션 LDK 및 LDKD에 대한 다른 정의된 D사이즈로 설정된다. 에뮬레이션 코드 시퀀서(510)는 지정된 치환 값을 SpecOp 형식(666)의 DSz 필드(666)로 대체한다.
SpecOp가 적재 정수, 즉 데이터(LDKD) 오퍼레이션인 경우, 에뮬레이션 코드 시퀀서(510)는 데이터 사이즈(DSz) 필드(666)에 의해 지정된 현재 유효 데이터 사이즈에 근거해 17-비트 즉시(Imm17) 필드(670)의 데이터를 조정 또는 스케일링 한다. 17-비트 즉시(Imm17) 필드(670)는, 17-비트의 정수, 17-비트의 부호가 있는 즉시, 또는 14-비트의 Op어드레스를 포함한다.
레지스터 어드레스 공간 및 에뮬레이션 인터페이스
프로세서(120)는 종래의 x86 레지스터 어드레스 공간에 비해 확장된 레지스터 어드레스 공간을 구현한다. 프로세서(120) 레지스터 어드레스 공간은 5개의 비트로 어드레싱되어, 25, 즉 32개의 레지스터가 정의될 수 있다. 8개의 레지스터는 x86 아키텍쳐럴 레지스터에 대응한다. 16개의 추가의 임시 레지스터가 추가된다. 데이터 사이즈(DSz) 필드는 직접 또는 간접적으로 오퍼레이션의 데이터 사이즈를 지정한다. 단일-바이트의 오퍼레이션에 대해, 레지스터 인코딩 필드에 의해 지정된 레지스터는 동일 레지스터 인코딩 필드에 의해 지정된 2바이트 또는 4바이트의 레지스터와는 다르다. 오퍼레이션의 데이터 사이즈는 오퍼레이션 RegOps, SpeOps, 및 LdStOps의 데이터 필드(642)에 대해서 1바이트(1B)가 되거나 2/4바이트(2B/4B)가 된다. 이 데이터 사이즈는 LdStOps의 인덱스(649) 필드 및 베이스(646) 필드에 대해서 항상 2/4바이트(2B/4B)이다.
프로세서(120) 레지스터 필드 인코딩은 이하와 같다.
기호 "t0" 및 "_" 은 기록될 수 있지만 읽어 들일 때 항상 0으로 리턴하는 레지스터에 대해서는 항상 동의어이다. "_" 은 오퍼랜드 또는 결과 값이 "무시(don't care)"되는 경우의 문맥에서 사용된다.
24개의 범용 레지스터가 공급된다. 처음 8개의 레지스터는 x86 범용 레지스터 (AX~DI)에 대응한다. 나머지의 16개의 레지스터는, CISC 명령을 실행하는 다수의 오퍼레이션 시퀀스에서 이용되는 임시 레지스터 또는 스크래치(scratch) 레지스터이다. 5-비트 레지스터 번호를 이용하는 오퍼레이션은 32개의 레지스터를 액세스하며, 정수 레지스터용으로 사용되지 않는 나머지 레지스터 번호는 에뮬레이션 환경 변수 치환용의 플레이스홀더(placeholder) 또는 멀티미디어 레지스터로서 사용된다.
x86 정수 레지스터 세트는 절반의 레지스터(AX, CX, DX, 및 BX)의 하위의 2 바이트중 어느 것의 바이트 오퍼레이션에 대한 어드레싱을 지원한다. 레지스터 사이즈 사양에 근거하여, x86 명령내의 3-비트 레지스터 번호는 상위/하위 바이트 레지스터 또는 word/dword 레지스터로서 해석된다. 동작의 관점에서, 이 사이즈는 오퍼레이션의 ASz 또는 DSz 필드에 의해서 지정된다 (LdStOps의 베이스 인덱스 레지스터에 대한 ASz 및 data/dest, src1, 및 src2 레지스터에 대한 DSz). 스크래치 정수 레지스터 세트는 절반의 레지스터(t1~t4 및 t8~t11)의 하위 2바이트의 유사한 어드레싱을 지원한다.
중간 데이터 임시 레지스터는, 값의 차이 또는 최소-끝 자리수 (little-endian significance)의 시퀀스로 t8로부터 시작하여 사용된다. "reg" 및 "regm" 레지스터 번호는, Op디코드 시간에, Reg/RegM를 "00 xxx"로 치환함으로써 에뮬레이션 환경으로부터의 현재 3비트 레지스터 번호에 의해 대체된다. 이 3-비트는 상기 처음 8개의 레지스터(AX~DI)중에서 1개의 래지스터를 지정한다.
Op형식의 조직 및 확장된 레지스터 어드레스 공간은 프로세서(120)의 유연한 내부 마이크로 아키텍쳐럴 상태를 정의한다. x86 아키텍쳐럴 상태는 프로세서(120)의 마이크로 아키텍쳐럴 상태의 서브세트이다. 상기 확장 레지스터 어드레스 공간은 x86 레지스터 어드레스 공간에 비해 확장된 수의 임시 레지스터를 갖추고 있다. 24개의 레지스터가 프로세서(120)의 확장 레지스터 어드레스 공간에 의해 제공되어 레지스터중 8개만이 x86 아키텍쳐럴 레지스터에 대응하고, 16개의 추가적인 임시 레지스터가 제공된다. 마찬가지로, 프로세서(120)는 확장된 수의 플래그 레지스터를 갖추고 있으며, 이들 중 몇개만이 x86 상태 플래그에 대응한다.
예를 들어, 프로세서(120)의 일 실시예에서, 에뮬레이션 캐리 플래그가 통상적인 캐리 플래그에 부가적으로 정의되며 에뮬레이션 환경과 관계한다. 따라서, 캐리 플래그를 설정하고 프로세서(120)의 지속적인 아키텍쳐럴 상태를 변화시키는 통상적인 add 명령이 정의된다. 에뮬레이션 캐리 플래그는 설정하지만은 통상적인 캐리 플래그는 설정하지않는 에뮬레이션 add 오퍼레이션이 정의된다. 여러가지 명령들이 에뮬레이션 캐리 플래그에 근거하여 분기하도록 정의되지만은, 기타 명령들은 통상적인 캐리 플래그에 근거하여 분기한다. 따라서, 프로세서(120)는 통상적인 마이크로 아키텍쳐럴 상태 및 에뮬레이션 마이크로 아키택쳐럴 상태 모두에서 동시에 동작한다. 에뮬레이션 환경에 있어서의 이와같은 동작은 프로세서(120)로 하여금 에뮬레이션 마이크로시퀀스를 실행할 수 있게 함과 아울러 가시적인 마이크로 아키텍쳐럴 상태를 변화시키지 않게 할 수가 있다.
제8도에서, 특정의 실시예에 의한 치환 기법이 설명된다. x86 명령 세트의 ADD 레지스터 명령은 modr/m바이트가 뒤따르는 opcode로서 인코딩 된다. ADD 명령의 8-비트 opcode 필드는 상기 명령이 레지스터 명령인 modr/m바이트의 사양과 함께 특정 ROM 엔트리 포인트를 유도하는데 이용되는 바, 이 엔트리 포인트는 에뮬레이션 코드 ROM(232)으로 하여금 ADD RegM- Reg 오퍼레이션을 위한 Op를 생성하게 한다. 명령 레지스터(512)에서의 reg 및 regm 필드는 reg가 AX로 되고 regm가 BX로 됨을 지정한다. reg 및 regm 필드는, 명령 레지스터(512)로부터 Op치환 회로 (522)에 공급되어 이에 의해 치환이 달성된다. 에뮬레이션 코드 ROM(232)은 한정된 수의 Ops만을 위한 템플릿을 포함하며, Op치환 회로(522)는 이 템플릿을 채워 다수의 서로 다른 Ops를 다양하게 생성한다.
리스트된 프로세서(120)의 레지스터 필드 인코딩을 참조하여, 레지스터 AX는 reg 코드 00000에 의해 하드-지정(hard-specified)된다. 대안적으로, 4개의 가능한 reg 인코딩들, 즉 110xx가 레지스터의 치환을 지정한다. 이 치환은 에뮬레이트된 특정의 명령, 및 현재의 에뮬레이션 환경을 포함하는 프로세서(120)의 현재 상태에 근거한다. 일반적으로, 오퍼레이션의 치환 및 실행은 (1) Reg에 대한 인코딩을 dest 필드(620)로, (2) Reg에 대한 인코딩을 src1 필드 (622)로, (3) RegM에 대한 인코딩을 Imm8/Sec2 필드(628)로, (4) 제로(0)를 즉시(I) 필드(626)로, 및 (5) 데이터 사이즈에 의해 지정된 1, 2, 또는 4바이트를 DSz 필드(618)로 치환함으로써 행해진다.
제9도에 스케쥴러(260)의 일 실시예가 나타나 있다. 스케쥴러(260)은 최대 24개의 오퍼레이션과 관계하는 24개의 엔트리를 가진다. 각 엔트리는 스케쥴링 저장소(scheduling reservoir) (940) 및 엔트리에 관계하는 논리(931~936) 부분에 저장 요소 (플립 플롭)세트를 가진다. 이 저장 요소는 실행과정에서 실행을 대기하고 있거나 또는 실행이 완료된 오퍼레이션(Op)에 관한 정보를 포함한다. 대부분의 저장 요소는 명령 디코더(220)가 스케쥴러 저장소(940)에 새로운 오퍼레이션을 적재할 때 적재/초기화된다. 일부 저장 요소에는 예컨대 오퍼레이션이 실행을 끝냈을때 적재가 이루어지거나 후에 재적재가 이루어진다. 오퍼레이션이 스케쥴링 저장소(940)에 적재되었을 때로부터 오퍼레이션이 스케쥴러(260)로부터 퇴거될 때까지의 값을 홀드하는 저장 필드를 여기에서는 "정적 필드"라 칭한다. 새로운 값이 재적재될 수 있는 필드는 여기에서는 "동적 필드"라 칭한다.
개별적으로 볼때, 저장 요소 엔트리는 인에이블 상태의 플립 플롭이라 간주될 수 도 있다. 조합하여 볼때, 스케쥴러(260)에 관하여 복수의 저장 요소들은 4개의 엔트리 폭 및 6행(Op쿼드 엔트리) 깊이인 시프트 레지스터이다. 동적 필드에 관계하는 저장 요소들은 데이터 소스 또는 선행 저장 요소로부터 적재된다. 데이터는 저장 요소에 적재되어, 동시에 그리고 독립적으로 다른 저장 요소에 쉬프트 된다.
스케쥴러(260)는 레지스터 유닛(244) 및 (246), 적재 유닛(240), 및 저장 유닛(242)에 의해 생성된 RU, LU, 및 SU 파이프라인을 제어한다. 각 RU 파이프라인은 발행 스테이지, 오퍼랜드 페치 스테이지 또는 스테이지 0, 및 스테이지 1로 칭해지는 3개의 스테이지를 가진다. LU 및 SU 파이프라인은 발행 스테이지, 오퍼랜드 페치 스테이지(또는 스테이지 0), 스테이지 1, 및 스테이지 2로 칭해지는 4개의 스테이지를 가진다. 위에서 설명한 바와 같이, 상태 필드는 관련 오퍼레이션의 현재의 파이프라인 스테이지를 나타내거나, 혹은 오퍼레이션이 이 파이프라인을 종료했음을 나타내기위해 "1들의 쉬프트/증가 필드(shifting/increasing field of ones)"인 코딩을 이용하는 5개 상태를 나타낸다.
정적 필드는 다음과 같이 정의되며, 모든 값은 액티브 하이이다.
Type [2 : 0] 은 오퍼레이션의 타입, 특히 발행 선택에 대한 오퍼레이션 타입을 지정한다. 예를 들면, LdOps는 LU만의 발행에 대해서 선택된다. Type [2 : 0] 은 이하와 같이 3개의 비트로 디코드된다.
000 특수 오퍼레이션이 실제로 실행되지 않음
010=LU 적재 유닛에 의해 실행되는 LdOp
10x=SU 저장 유닛에 의해 실행되는 LdOp
101=ST 메모리를 참조하거나 또는 적어도 폴트 가능한
(faultable) 어드레스(즉, LEA 오퍼레이션이 아닌)를 생성하는 StOp
11x=RU RUX 또는 경우에 따라서는 RUY에 의해 실행되는 RegOp
110=RUX RUX에 의해서만 실행 가능한 RegOp
111=RUY RUX 또는 RUY에 의해 실행 가능한 RegOpLD
LD_Imm 만일 LdStOp 이면, 이 오퍼레이션은 (이 엔트리내에서 유지되는 작은(8-비트)의 변위에 비해) 큰 변위를 이용한다. 만일 이 오퍼레이션이 RegOp인 경우, 즉시 값은 Src2 오퍼랜드이다.
Src1Reg [4 : 0] 소스 1 오퍼랜드 레지스터 번호
Src2Reg [4 : 0] 소스 2 오퍼랜드 레지스터 번호
DestReg [4 : 0] 목적지 레지스터 번호
SrcStReg [4 : 0] Store 데이터를 위한 소스 레지스터 번호
Src1BM [1 : 0] , Src2BM [1 : 0] , 및 Src12BM [2] 는 오퍼레이션의 실행을 위해서 유효해야만 하는 Src1Reg 및 Src2Reg의 바이트를 나타내는 바이트 마크이다. Bits [2] , [1] , 및 [0] 은 각각 Reg [31 : 16] , Reg [15 : 8] , 및 Reg [7 : 0] 에 대응한다. Src12BM [2] 는, Src1Reg 및 Src2Reg의 모두에게 적용된다.
SrcStBM [2 : 0] 바이트는, Store Data 레지스터를 지정하기 위해 Stop에 의해 사용되는 경우, StOp의 실행 및 실행의 완료를 위해 필요한 DestReg의 바이트를 나타내는 바이트 마크이다. 이 비트의 대응(correspondence)은 Src1BM [1 : 0] 의 경우와 같다.
OpInfo [12 : 0] 는 이 오퍼레이션이 실행 가능한지 여부에 따라 실행 유닛 또는 오퍼레이션 특정 유닛(OCU)(970)에 의해서만 사용되는 추가 정보이다. 만일 가능하지 않은 경우, 스케쥴러는 이 정보를 사용하지 않는다. OpInfo는 Op가 RegOp, LdStOp, 및 SpecOp중 어느 것이냐에 따라 3개의 가능한 필드 정의의 연합(union)이다.
RegOp에 대해서,
Type [5 : 0] 오리지날 Op Type 필드의 사본
Ext [3 : 0] 오리지날 0p Ext 필드의 사본
R1 오리지날 Op R1필드의 사본
DataSz [1 : 0] 이 오퍼레이션에 대한 유효 데이터 사이즈(1,2,4바이트)
LdStOp에 대해서,
Type [3 : 0] 오리지날 Op Type 필드의 사본
ISF [1 :0] 오리지날 Op ISF 필드의 사본
Seg [3 : 0] 오리지날 Op Seg 필드의 사본
DataSz [1 : 0] 메모리 전송을 위한 유효 데이터 사이즈
AddrSz 어드레스 계산을 위한 유효 어드레스 사이즈(32/16-비트)
SpecOp에 대해서,
Type [3 : 0] 오리지날 Op Type 필드의 사본
CC [4 : 0] 오리지날 Op cc필드의 사본.
동적 필드는 이하와 같이 정의되고 모든 값은 액티브 하이이다:
State [3 : 0] 은 오퍼레이션의 현재의 실행 상태를 나타내는 것이다(S3, S2, S1, S0는 State [3 : 0] 에 대한 대안적인 신호의 명칭이다). 5개의 가능한 상태가 4-비트인 1들의 시프팅 필드에 의해 인코딩된다.
0000 발행되지 않음
0001 스테이지 0
0011 스테이지 1
0111 스테이지 2
1111 완료
중간 상태는 Op의 현재 실행 스테이지에 대응한다. 이 비트는 오퍼레이션이 빨리 발행되거나 또는 스테이지를 벗어나 진행할 때 갱신된다(효과적으로 쉬프트 된다). 주목 : 몇개의 오퍼레이션(예를 들면 LDK)은 초기 상태 1111로 스케쥴러에 적재되며 따라서 이미 "완료"된다. State [3 : 0] 은 또한, 중단 사이클 동안에 1111로 설정된다.
Execl 만일 이 오퍼레이션이 RegOp인 경우, (RUY가 아닌)RUX가 오퍼레이션을 실행한다. Exec1는, 이 오퍼레이션이 성공적으로 발행되었을 때에 적재된다.
if(SOEnbl) Execl = "Issue OPi to RUX"
DestBM [2 : 0] Op가 변경을 행하는 DestReg의 바이트를 지정하는 바이트 마크. 비트(2, 1, 0)는 각각 DestReg [31 : 16] , Reg [15 : 8] , 및 Reg [7 : 0] 에 대응한다. DestBM는 중단 사이클동안 클리어 된다.
if(SC_Abort)DestBM=3'b0
DestVal [31 : 0] DestVal는 DestReg에 커미트될 Op의 실행으로부터의 레지스터 결과 값이다. DestBM는 Op의 실행 후, 어떤 바이트가 유효한 지를 나타낸다. DestVal는 Op가 Op의 타입에 따라 실행 스테이지 1 또는 2를 완료했을 때에 적재된다. LDK와 같은 실행되지 않는 0ps의 경우, DestVal는 적절한 레지스터 값으로 초기화된다. DestVal는 대안적으로 (각각) RegOps 및 LdStOps에 대한 큰 즉시 값 및 변위 값을 홀드함과 아울러 BRCOND Op에 관련된 대안의 (순차적인 또는 타겟의) 분기 PC값을 홀드한다.
StatMod [3 : 0] Op가 상태 비트의 어느 그룹을 변경하는지를 나타내는 상태 그룹 마크이다. 비트(3, 2, 1, 0)는 각각 {EZF, ECF} , OF, {SF, ZF, AF, PF} 및 CF에 대응한다. StatMod는 비-RegOps에 대해서 항상 0이며, 중단 사이클동안에 클리어된다.
if(Excel ∼S3 S1 RUX_NoStatMod + SC_Abort)
Statmod = 4'b0
StatVal [7 : 0] Statval은 이 Op의 실행으로부터의 상태 결과값이며 EFlags에 커미트된다. StatMod는 Op실행 후의 유효 비트를 나타낸다. StatVal는 모든 비-RegOps에 대해 StatMod의 제로(0)값으로 반영되는 것처럼 ResOps에 대해서만 의미가 있다. StatVal는 RegOp가 실행 스테이지 1을 완료했을 때 적재된다.
if(∼S3 S1)StatVal =
(Excel)? RUX_StatRes:RUY_StatRes
Oprndmatch_XXsrcY 여기서 "XX"는 LU, SU, RUX 또는 RUY 이며, "Y"는 1 또는 2이다.
추가의 저장 요소들이 2개의 논리 스테이지 사이에 패스되는 천이 정보를 저장하는데 이용된다. 이것은 보다 글로벌한 유의성(global significance)을 갖는 정보와는 다르다. 저장 요소들은 상기한 것과 물리적으로는 같으며, 단지 완료를 위해 리스트된다. 추가의 저장 요소들이 각 처리 파이프라인의 발행 스테이지로부터 스테이지 0으로 정보를 패스하거나 혹은 경우에 따라서는 SU의 스테이지 1로부터 스테이지 2로 정보를 패스하기 때문에, 저장 요소 값들은 XXAdv0(또는 SUAdv2) 글로벌 신호에 의해 제어된다.
DBN [3 : 0] LdStOp에 대한 4개의 Bn(n=0~3)데이터 브레이크포인트 상태. 이 필드는 처음에 모두 제로(0)로 되며, 그 후 이 위치에서의 LdStOp가 실행을 행할 때, 적절한 유닛으로부터의 브레이크포인트 비트가 나중의 트래핑을 위해서 기록된다.
스케쥴러 Op쿼드 엔트리 정의
24개의 엔트리가 일단(탑(top))에 적재된 새로운 오퍼레이션과 함께 FIFO 방식으로 관리되고, 타단(보텀(bottom))에 쉬프트 다운되어 스케쥴링 저장소(940)의 보텀으로부터 퇴거되거나 또는 하역(unload)된다. 제어를 단순화 하기 위해, 스케쥴러(260)는 Op쿼드 방식으로 저장소(940)를 관리한다. 오퍼레이션들은 4개의 그룹으로 적재되고, 쉬프트되며, 저장소(940)로부터 퇴거된다. 이는, 디코더(220)에서의 emcode ROM 및 MacDec의 모두에 의해 Op쿼드의 형식으로 오퍼레이션을 페칭 및 생성을 일치(match)시킨다.
스케쥴링 저장소(940)는 Op쿼드를 포함하는 6개의 엔트리 시프트 레지스터로서 간주될 수 있다. 각 Op쿼드 엔트리는 4개의 엔트리와, 그리고 Op쿼드 전체와 관계하는 추가의 정보를 포함한다. 다음은 추가의 Op쿼드 필드들을 열거한 것으로서 각 필드의 기능에 대한 설명을 간단히 제공한다. 모든 값은 액티브 하이로 정의된다. 필드 대부분은 정적 필드이다. 동적 필드에 대한 설명은 데이터를 발생하는 논리의 의사-RTL 정의를 포함함과 아울러 이들 필드를 홀드하는 저장 요소의 인에이블 입력을 포함한다.
Emcode : emcode ROM으로부터의 emcode Op쿼드인지 혹은 MacDec에 의해 발생된 emcode Op쿼드인지를 나타낸다.
Eret : emcode Op쿼드이며, ERET(emcode ROM로부터의 리턴)를 포함함을 나타낸다.
FaultPC [31 : 0] Op쿼드 엔트리에서의 오퍼레이션들과 관계하는 논리적 매크로명령(mI) 폴트 프로그램 카운터 값이다. 오퍼레이션들중 임의의 오퍼레이션에서 폴트 예외를 처리할 때 오퍼레이션 커미트 유닛(OCU)(970)에 의해 사용된다.
BPTInfo [14 : 0] Op쿼드가 생성되었을 때로부터의 분기 예측 테이블-관련 정보. 이 필드는 BRCOND 오퍼레이션을 포함하는 MacDec에 의해 생성된 Op쿼드에 대해서만 정의된다.
RASPtr [2 : 0] Op쿼드가 생성되었을 때의 리턴 어드레스 스택의 스택 탑(TOS). 이 필드는 BRCOND 오퍼레이션을 포함하는 MacDec에 의해 생성된 Op쿼드에 대해서만 정의된다.
LimViol Op쿼드는 코드 세그먼트 한계 위반이 타겟 어드레스상에서 검출되었을 경우에 대한 전송 제어 명령의 디코드임을 나타낸다. 대부분의 Op쿼드에 대해 이 필드는 정적이다. 제1 레지스터 Op쿼드 엔트리에 대해 이 필드는 이하의 의사-RTL 설명으로 요약되는 바와같이 적재될 수 있다.
OpQV Op쿼드 엔트리가 유효 Op쿼드를 포함하고 그리고 엔트리의 쉬프트를 제어하는 논리에 의해 사용되는지를 나타낸다. "무효" Op쿼드 엔트리용의 엔트리들이 여전히 정의되어야만하고 그리고 중단된 엔트리와 동일한 상태를 유지해야만 한다.
0p1I, Op2I, Op3I 이 Op쿼드(1, 2, 또는 3)로 표현되는 매크로 명령(mI)의 수의 카운트. 퇴거 명령의 카운트를 유지하는데 이용된다.
Ilen0, Ilen1 Op 쿼드로 표현되는 제1 및 (만일 존재한다면) 제2의 매크로 명령의 바이트 길이. 폴트가 발생된 명령 어드레스를 결정하는데 이용된다.
Smc1stAddr, Smc1stPg, Smc2ndAddr, Smc2ndPg Op쿼드에서의 오퍼레이션들에 의해 커버되는 제1 및 (만일 Op쿼드내에 1 페이지를 넘는 명령이 존재하는 경우) 제2 어드레스. 자기-변경 코드를 검출하는데 이용된다.
OpDec 정의
명령 디코더(220)는 Op치환 회로(522)를 포함하며, 이 Op치환 회로는 명령 디코더(220)의 매크로 명령 디코더(230) 및 에뮬레이션 코드 ROM(232)를 스케쥴러(260)에 연결한다. Op치환 회로(522)는 RISC 명령을 스케쥴러 저장소(940)의 탑 (즉, Op쿼드 엔트리 0)에 적재된 필드 값으로 확장한다. Op쿼드를 생성하기 위해서, Op치환 회로(522)는 다른 필드에 근거하여 RISC 명령으로부터의 몇개의 필드를 변경하고, 기존의 것으로부터 새로운 필드를 유도해내고, 몇개의 필드를 물리적으로 다른 필드로 치환하며, 몇개의 필드를 변경하지 않은 상태로 패스한다. 이것을 필요로하는 emcode 오퍼레이션의 필드에 대한 환경 가변 치환과 그리고 중앙(middle)으로 점프된 emcode op쿼드내의 오퍼레이션의 무효화(nulling) 둘다 모두 논리적으로 선행하는 OpDec(즉 EmDec)에서 실행된다.
다음의 의사-RTL 식은, 입력되는 RISC 명령의 필드로부터 스케쥴러 엔트리의 각 필드의 생성을 설명한다. 표기 xxxOp.yyy는 실제 명령의 타입과는 관계없이, 명령 타입 xxxOp에 대해서 정의된 필드 yyy를 나타낸다. 예를 들면, RegOp.Src1는 RegOp의 Src1 필드와 동일한 위치에 있는 명령의 비트를 나타낸다. 제6A도 내지 제6E도는 RegOp, LdStOp, LIMMOp, SpecOp, 및 FpOp에 대한 필드 정의의 예이다.
다음의 의사-RTL 코드는 단일의 특정 오퍼레이션이 아닌, Op쿼드와 관련된 각 Op쿼드 엔트리 필드의 생성에 대해 설명한 것이다.
발행 선택
사이클의 처음의 모든 엔트리의 State [3 ; 0] 필드에 근거하는 각 사이클마다, 스케쥴러(260)는 대응 처리 파이프라인 LU, SU, RUX, 및 RUY내로 발행될 LdOp, StOp, 및 2개의 RegOps를 선택한다. 스케쥴러(260)는 스케쥴링 저장소(940)에서 가장 오래된 오퍼레이션으로부터 가장 새로운 오퍼레이션으로 "차례로(in order)" 조회되는 (각 엔트리내의) State 및 Type 필드에 근거하여, 발행을 위한 오퍼레이션을 선택한다. 발행 선택은 레지스터, 상태 및/또는 (각 오퍼레이션이 비교적 오래된 오퍼레이션에 대해 가질 수 있는) 메모리 의존성은 고려하지 않는다.
스케쥴러(260)는 4개의 처리 파이프라인 각각에 대해 동시에 그리고 독립적으로 발행 선택을 실행한다. 이 4개의 파이프라인에 대한 선택 알고리즘은 유사하다. 소정 타입의 다음 미발행 오퍼레이션(그의 Status 필드로 표시됨)이 선택된다. 다시말해서, 적재 유닛(240)에 대해서 다음 미발행 LdOp가 선택되고, 저장 유닛(242)에 대해서 다음 미발행 StOp가 선택되며, 그리고 다음 2개의 미발행 RegOps가 레지스터 유닛 X와 레지스터 유닛 Y에 대해 발행된다 (첫번째 것은 RUX에 그리고 두번째 것은 RUY에 대해 발행된다). 개념적으로, RUY에 대한 발행 선택은 RUX에 의존하지만, RUX에 대한 발행 선택과 병렬로 실행된다. 이후에 더 설명하는 바와같이, 몇개의 RegOps는 RUX 에 대해서만 발행 가능하며, RUY에 대한 발행을 위해 선택되는 오퍼레이션은 RUY에 대해 발행 가능한 다음 RegOp이다.
각 스케쥴러 엔트리는 4개의 비트(즉, 신호) "Issuable to xxx"를 생성하는 바, 이는 오퍼레이션이 파이프라인 xxx에 대한 발행 선택에 대해 현재 적합한지 여부를 나타내며, 여기서 xxx는 LU, SU, RUX 또는 RUY이다.
"Issuable to xxx"="State=Unissued" & "Executable by xxx"
"Issuable to xxx" 신호들은 엔트리의 State 및 Type 비트로부터 생성된다. 구체적으로, 실행 파이프라인 LU/SU/RUX/RUY에 대해 State=Unissued=-SO 이고 "Executable by xxx" = LU/SU/RUX/RUY이다. 파이프라인 xxx에 대한 선택 프로세스는 비트 "Issuable to xxx" 세트를 가지는 엔트리들에 대해 가장 오래된 스케쥴러 엔트리로부터 가장 새로운 스케쥴러 엔트리까지 스캔한다. 파이프라인 LU, SU, 및 RUX에 관하여, 비트 세트를 갖는 것으로 밝혀진 제 1 오퍼레이션은 발행을 위해 선택된 오퍼레이션이다. 파이프라인 RUY에 대한 발행 선택은, 파이프라인 RUX에 대해 선택된 오퍼레이션 이후 상기 제 1 오퍼레이션을 선택한다.
스케쥴러에 적재된 직후의 발행 선택을 위한 오퍼레이션들이 적합하다. 즉 임의의 오퍼레이션이 스케쥴러내에 존재하는 그의 제 1 사이클동안에 발행 될 수 있다. 이러한 경우에, Type 비트 및 비트 SO만이 사이클의 초기에 유효하기만 하면된다. 엔트리내의 다른 모든 필드는 발행 선택 단계 동안 만큼 늦게(즉, 절반 싸이클 늦게) 생성될 수 있어, 처리 파이프라인의 다음 단계동안 스케쥴러 엔트리내에서 유효하기만 하면된다.
만일 발행을 위해 선택된 오퍼레이션이 스테이지 0으로 진행되지 않는 경우, 이 오퍼레이션은 성공적으로 발행되지 않았던 것으로 된다. 다음 클럭 사이클 동안, 이 오퍼레이션의 State 필드는 그 오퍼레이션이 미발행인 것으로 나타냄과 아울러, 이 오퍼레이션이 발행을 위해 경합하고 있어 다시 선택될 가능성이 있음을 나타내게 된다.
본 발명의 하나의 실시예에서, 스케쥴러(260)는 엔트리의 논리 회로로부터 형성된 스캔 체인을 이용하여 그 오퍼레이션들을 스캔한다. 각 스캔 체인은 고속 가산기에서 이용되는 것과 같은 그러한 캐리 체인과 유사하다. 적재 유닛, 저장 유닛, 또는 레지스터 유닛 X에 대해서 발행되는 오퍼레이션들에 대한 스캔의 경우에, 가장 오래된 엔트리에 대한 엔트리에의 캐리 비트 Cin 입력이 설정되어 엔트리들중 하나의 논리가 스캔 비트를 제거(kill)할 때까지 스캔 체인을 통해 전파된다. 만일 엔트리가 스캔되는 타입의 오퍼레이션(즉 Issuable to xxx)에 대응하는 경우, 이 엔트리는 상기 캐리 비트를 제거한다. 레지스터 유닛 Y에 대해서 발행되는 오퍼레이션의 스캔을 위해서, 레지스터 유닛 X에 대해서 발행되는 오퍼레이션에 관계하는 엔트리에 의해 캐리 비트가 생성되며, 이 캐리 비트는 레지스터 유닛 Y에 대해서 발행 될 수 있는 오퍼레이션에 관계하는 엔트리에 의해 제거될 때까지 전파된다.
변위 전송
오퍼랜드 전송 단계 동안, 스케쥴러(260)는 이 유닛에 대한 레지스터 오퍼랜드에 부가하여, LU 및 SU 처리 파이프라인에 대한 변위 오퍼랜드를 페칭 및 전송한다. 이 LU 및 SU 각각은 2개의 레지스터 오퍼랜드 및 1개의 변위 오퍼랜드를 갖춘 3개의 입력 오퍼랜드 버스(952)를 가지고 있다. 변위 오퍼랜드는 32-비트량이지만, 몇개의 바이트는 정의되지 않을 수도 있다. 실행 유닛은 수정 오퍼레이션 동안에는 정의되어 있지 않은 변위 바이트를 사용하지 않는다.
스케쥴러(260)는 오퍼레이션 레지스터 결과 값과 유사한 방식으로 변위를 취급한다. 이 변위는 엔트리의 32-비트 DestVal 필드내에서 사용될 때까지 저장되며, LU/SU 스테이지 1의 오퍼랜드 전송 단계동안 적절한 때에 변위 버스(950)에 보내진다. 변위들은 항상 스케쥴러(260)내에서 즉시 값이 되어, 레지스터 파일(264)로 부터의 전송 변위 값이 발생하지 않게 된다. 필드 DestVal은 또한 LdStOp의 일부 StOps 및 LdOps 로부터의 결과 값에 대해서도 이용되며 이들 2개는 서로 충돌하지 않는다. 이들이 충돌하지 않는 이유는 결과 값이 (스테이지 0 후 까지가 아닌)변위 값의 사용 후까지 스케쥴러 엔트리에 적재되지 않기 때문이다.
오퍼레이션내에서 지정되는 작은(8-비트) 변위는 큰(16/32-비트) 변위와는 다른 형태로 취급된다. Op치환 회로(522)는 작은 변위를 관련 LdStOp를 홀드하는 엔트리의 DestVal 필드에 적재하기전 상기 작은 변위를 확장한다. 큰 변위는, 이 변위를 이용하는 LdStOp 직전의 엔트리의 DestVal 필드에 저장되고 있는 것으로 추정된다. 일반적으로, 선행 엔트리는 "LIMM t0,[disp]" 오퍼레이션을 홀드한다.
각 사이클 동안 변위 버스(950)에 보내기 위한 DestVal 값의 선택은 스케쥴러 엔트리의 스캔을 필요로하지 않는다. 대신에, 각 엔트리는 그의 State 및 Type 필드로부터, DestVal 필드 값을 적당한 변위 버스(950)에 어써트하도록 자신의 드라이버 또는 선행 엔트리의 드라이버를 인에이블할 것인지를 결정한다. 다음의 식은 각 엔트리내에서의 변위 버스 드라이버의 인에이블링을 요약한 것이다.
값 "thisOp" 및 "nextOp"는 물리적 엔트리 - 이 엔트리로부터 최소항 문자 LU, S1, S0, 및 LD가 나온다 - 를 특정한다. 또한, 스케쥴러(260)내의 제1의/가장 새로운 엔트리(the first/youngerst entry)의 경우, NextOp 최소항은 0이다.
즉시 전송
실행 엔진(222)에 대한 RISC 명령의 예시적인 형식에 따르면, 즉시 값들은 단지 RegOps의 src2 오퍼랜드뿐이다. 스케쥴러(260)는 변위와 유사한 방식으로 즉시 값을 취급하되, 레지스터 오퍼랜드 전송 메커니즘의 일부로서 취급한다. 변위 값과 마찬가지로, 즉시 값은 엔트리의 DestVal 필드에 저장된다. 그러나, 레지스터 오퍼랜드와 마찬가지로, 즉시 값은 레지스터 오퍼랜드 버스(952)(구체적으로는 RUXsrc2 및 RUYsrc2 오퍼랜드 버스)를 통해 전송된다.
예시한 RISC 명령 세트는 RegOps에서의 작은(8-비트) 즉시 값만을 사용하며, 이 즉시 값을 RegOp를 홀드하는 엔트리의 필드 DestVal에 저장한다. Src2 오퍼랜드 즉시 값은, 레지스터 값 대신에, 스테이지 0의 오퍼랜드 전송 단계 동안 각각의 레지스터 실행 유닛에 전송된다. 레지스터 값 소스(즉, 스케쥴러 엔트리 또는 레지스터 파일)의 선택은 금지되며, 해당 엔트리가 그의 DestVal 필드를 적당한 src2 오퍼랜드 버스(952)에 직접 보낸다.
임의의 RUX/RUYsrc2 오퍼랜드 선택의 금지는, 오퍼랜드가 페칭되는 RegOp를 홀드하는 엔트리에 의해 통상 어써트될 수 있는 발생 신호의 차단을 통해 오퍼랜드 선택 단계 동안에 실행된다. 이것은 RUXsrc2 및 RUYsrc2에 대하여 개별적으로 및 독립적으로 행해지며, RUX/Ysrc2 스캔 체인에 의한 임의의 엔트리의 선택, 및 디폴트 오퍼랜드 소스로서의 레지스터 파일의 선택을 방지한다. 이전의 오퍼랜드 선택 스캔 체인의 식은 금지를 나타낸다.
각 사이클 동안 RUXsrc2 및 RUYsrc2 오퍼랜드 버스에 보낼 "즉시" DestVal 값의 선택은 스케쥴러 엔트리를 스캔하는 것을 필요로 하지 않는다. 대신에, 각 엔트리는 단지 그의 State 및 관련 비트에 근거하여 적당한 오퍼랜드 버스에 그의 DestVal 필드를 보내도록 그의 드라이버들을 인에이블한다. 통상의 레지스터 값 전송을 위해 이용되는 동일한 드라이버가 존재하는 바, 즉시 오퍼랜드의 취급을 위한 각 인에이블 식에 추가의 항(term)만이 존재한다. 다음은 각 엔트리내의 개별 버스드라이버들을 인에이블하는 개별식으로서 이들 항을 요약한 것이다.
엔트리가 오퍼랜드 버스(952)에 즉시 값을 보냈을 때, 이 엔트리는 또한 관련 오퍼랜드 상태 버스(954)에도 보낸다. 통상의 오퍼랜드용과 동일한 버스 드라이버 및 드라이버 입력 값들이 즉시 값 용으로 사용되는 바, 각 인에이블 식에는 단지 추가의 항 (상기와 동일한 추가의 항)만이 존재한다. 다음은 개별의 버스 드라이버를 인에이블하는 개별식으로서 이들 항을 요약한 것이다.
데이터 오퍼랜드 페칭
StOps는, 3개의 레지스터 소스 오퍼랜드를 갖되 레지스터 목적지는 갖지 않는 바, 이것은 다른 오퍼레이션들이 최대 2개의 소스 오퍼랜드 및 1개의 목적지를 가져야만 하는 것과는 대조적인 것이다. StOp에 대한 제 3의 소스 오퍼랜드는 저장될 데이터를 제공하며, 본 명세서에서는 종종 데이터 오퍼랜드라 칭한다. 이 데이터 오퍼랜드는 실행을 개시하는데는 필요하지 않지만, StOp 완료를 위해서는 필요하다. StOp 데이터 오퍼랜드 값의 페칭은, 다른 소스 오퍼랜드의 페칭과 유사한 방식으로 실행되지만, SU 스테이지 2와 동기화된다. "통상의" 오퍼랜드 페칭 프로세스가 오퍼레이션 처리의 스테이지 0 및 발행 스테이지 동안 발생하는데 반해, 데이터 오퍼랜드 페칭 프로세스는, SU 스테이지 1 및 2 동안 발생한다. 스케쥴러(260)는 SU 스테이지 2 동안에 아직 이용가능하지 않은 데이터 오퍼랜드를 검출하고, 스테이지 2에서 관련 StOp를 홀드한다.
이 데이터 오퍼랜드 페칭 프로세스는 다음의 2개의 주된 차이점을 제외하고는 상기 발행 및 오퍼랜드 페칭 스테이지와 대체로 동일하다. 첫번째 차이는, SU 스테이지 1에서의 StOp에 대한 오퍼랜드 선택 단계가 발행 선택 단계를 대체하고 그리고 복수의 후보중에서의 선택을 하기 위한 스케쥴러 엔트리에 대한 스캔을 실시하지 않는 점이다. 그 대신에, SU 스테이지 1에서 StOp와 관련된 엔트리가 State 및 Type 필드로부터 스스로 확인을 행한다. 두 번째 차이점은, 데이터 오퍼랜드를 위한 방송 단계동안, StOp의 OpInfo 필드를 (재차) 읽을 필요가 없다는 점이다. 그 대신에, 저장 유닛(242)이 StOp가 발행되었을 때 읽혀진 OpInfo 값을 유지하고, 후속 단계동안 그 OpInfo 필드를 사용한다. SU 발행 스테이지 동안에 읽혀진 OpInfo 값은 SU 파이프라인의 스테이지 0, 1, 및 2를 통해서 오퍼레이션에 전해진다.
다음의 식은 데이터 오퍼랜드 페칭을 위해서 생성되는 신호를 기술한 것이다.
SU 스테이지 1 : 오퍼레이션 선택 단계
"select for data operand fetch" = SU~S2 S1
SU 스테이지 1 : 데이터 오퍼랜드 방송 단계
상기 일치(match) 신호는 이후에 각 엔트리내의 파이프라인 레지스터 비트로 래치된다.
SU 스테이지 2 : 데이터 오퍼랜드 선택 단계
그룹-레벨 스캔식들은 다른 오퍼랜드 선택 스캔 체인용의 것과 같다.
SusrcStchain.CINi SUsrcStchain.Ki
SU 스테이지 2 : 오퍼랜드 전송 단계
각 스케쥴러 엔트리내의 드라이버에 대한 인에이블:
버스(555)를 통해 전송되는 데이터 오퍼랜드 Oprnd SUsrcSt는 저장 유닛(242)의 입력에서 파이프라인 레지스터에 캡춰된다. 이 단계 동안, 제어 논리(도시하지 않음)는 읽혀진 오퍼랜드 상태 값을 사용한다.
REGOP 범핑
"통상적으로", 소정의 프로세싱 실행 유닛에 발행된 오퍼레이션은 그 파이프 라인에 발행된 다른 오퍼레이션에 관하여 정해진 시퀀스에 따라 파이프라인 아래로 진행된다. 예를 들면, 스테이지 0에서 오퍼레이션이 홀드업(hold up)될 때, 이 파이프에 발행하기 위해서 동시에 선택되는 오퍼레이션도 홀드업되는 바, 이는 처리 파이프라인내에서 이들 두개의 오퍼레이션들이 서로 추월할 수가 없기 때문이다. 스케쥴러(260)는 보통, 시퀀스에 따른 발행 선택 및 처리에 근거하여 처리 파이프 라인을 관리한다.
하나의 예외가 있게된다. RegOp의 하나 이상의 사용 불가능한 오퍼랜드 값으로 인해 어떤 레지스터 유닛의 스테이지 0에서 RegOP가 홀드업될 때, 이 RegOp는 처리 파이프로부터 범프 아웃 되어 미발행 상태로 되돌아간다. 이것은 RegOp의 State 필드를 b0000으로 되돌리게 된다. RegOp가 RU스테이지 0으로부터 범프 아웃 되었을 때, 그 레지스터 유닛에 발행을 위해 선택된 후속의 RegOp는 스테이지 0내로 진행되어, 범프된 RegOp를 즉시 대체한다. 동시에, 이 범프된 RegOp는 레지스터 유닛에의 재발행을 위해 바로 적합하게 된다(이 경우 레지스터 유닛은 같은 레지스터 유닛일 필요는 없다.).
범핑 처리는 모든 RegOps에 대해서 적용 가능하고, 다음의 제약을 받는다. 첫째로, RUX-only RegOp(RUX 스테이지 0)는, RUX-only RegOp가 RUX에 대한 발행을 위해서 현재 선택되고 있는 경우에는 범프될 수 없다. 그 이유는, 범핑은 RUX-only RegOps이 서로에 관해 순서적으로 실행된다는 보장을 위반할 수 있기 때문이다. 두 번째로, RegOp는 1 사이클을 넘어 정체(stall)될 경우에게만 범프되어야만 하는바, 그렇지 않은 경우에는 RegOp를 스테이지 1로의 진행을 대기하면서 스테이지 0에 머무르도록 하는것이 좋다. 엔트리들의 S1 State 비트를 나타내는 상기 식은 RegOp 범핑을 구현한다. 추가로, 글로벌 제어 논리(도시하지 않음)가 글로벌 범프 신호(BumpRUX 및 BumpRUY)를 발생하는 바, 이는, RUXad v 0및 RUYAd v 0 신호가 어써트되게 한다.
상태 플래그 처리
상태 플래그들, 즉 x86 아키텍쳐의 플래그 및 마이크로 아키텍쳐의 플래그의 처리 및 사용에는 3개의 기능-즉, cc-dep RegOps에 대한 상태 플래그 오퍼랜드 값의 페칭, BRCOND 오퍼레이션의 분석을 위한 상태 플래그 값의 페칭, 및 선행하는 BRCOND 오퍼레이션과 중단 불가능한 RegOps의 동기화-가 수반된다. 레지스터 오퍼랜드 및 LdOp-StOp 순서화(ordering)를 위한 논리(도시하지 않음)와는 달리, 상태 플래그 기능들을 지원하는 논리(도시하지 않음)는 스케쥴러 엔트리 전체에 산포(spread)되지 않는다. 관련 오퍼레이션을 위한 상태 플래그의 처리는 상태 플래그에 액세스 하는 오퍼레이션들이 일부 Op쿼드 엔트리들내에 있는 동안에만 발생한다. cc-dep RegOps는 상태 오퍼랜드 페칭이 발생하는 사이클 동안(즉, RUX 스테이지 0 동안) Op쿼드 엔트리 3, 즉 스케쥴링 저장소(940)내의 중앙 Op쿼드 엔트리내에 있어야만 한다. BRCOND 오퍼레이션과 중단 불가능한 RegOps는 각각 분기 유닛(252)에 의한 분해와 RUX 스테이지 0동안에 Op쿼드 엔트리 4내에 있어야만 한다.
cc-dep 및 중단 불가능한 RegOps는, 이들이 각각 Op쿼드 엔트리 3 및 4에 쉬프트 다운되어 있지 않은 경우에는 RUX 스테이지 0에 대해 홀드업 된다. 반대로, 스케쥴러 Op쿼드의 쉬프트는, 그러한 오퍼레이션들이 RUX 스테이지 1로 성공적으로 진행할수 있게 될 때까지 금지된다. 이러한 제약들은, 논리(535)를 보다 단순 및 소형화될 수 있게 된다. 예를 들면, cc-dep RegOps 및 BRCOND 오퍼레이션들을 위한 적당한 상태 플래그 값의 페칭은, 하부의 3개의 스케쥴러 Op쿼드 엔트리에 대해서 발생할 뿐이며, 오퍼레이션의 4개의 StatMod 비트에 대응하는 상태 플래그의 4개의 그룹을 각각에 대해 독립적으로 수행될수 있게 된다. 논리는 cc-dep RegOp 상태 오퍼랜드 페칭과 BRCOND 오퍼레이션 분석을 위해 공유 또는 활용할 수가 있으며, 중단 불가능한 RegOps과 BRCOND 오퍼레이션들의 사이의 동기화가 간단해지게 된다.
또한, RegOp 실행 유닛으로부터 RUX 실행 유닛에 들어가는 cc-의존 RegOp로 상태 플래그 값을 직접 건네주는 것은 지원되지 않는다. 이 결과, ". cc" RegOp의 실행과 후속 "cc-dep" RegOp와의 실행 사이의 1 사이클 대기 시간을 최소로 할수 있다. 이 대기 시간의 통계적인 성능의 충격(impact)은 최소화 되는바, 이는 "cc-dep" RegOps가 연속적인 순서로 발생하지 않기 때문이다. 더욱, 연속적인 cc의존 RegOps를 제거하기 위한 emcode 및 MacDec 순서화 오퍼레이션에 의해, 모든 충격이 제거 될 수 있다.
논리의 단순화 및 소형화를 더욱 도울 수 있도록, "cc-dep" RegOps, BRCOND 오퍼레이션 및 중단 불가능한 RegOps가 Op쿼드내에서 서로 상대적으로 발생 할 수 있는 곳에 다수의 제약이 높인다. 이들은 통상 emcode 코딩 롤내로 변환되지만, 경우에 따라서는, 1 사이클에 있어서의 다수의 mI의 MacDec 디코딩을 제약한다. 특히, 제약들은 다음과 같다.
(1) BRCOND 오퍼레이션 뒤에는, ". cc" RegOps가 없다.
(2) ". cc" RegOps의 뒤에는, "cc-dep" RegOps가 없다.
(3) BRCOND Op를 가지는 쿼드에서 중단 불가능한 RegOps는 없다.
(4) 1개의 Op쿼드내에서 "cc-dep" RegOp는 1개뿐이다.
(5) 1개의 Op쿼드내에서 BRCOND 오퍼레이션은 1개뿐이다.
(6) 1개의 Op쿼드내에서 중단 불가능한 RegOp는 1개뿐이다.
CC-의존 REGOPS에의 스테이터스 전송
각 사이클동안, Op쿼드 엔트리 3 내의 4개의 오퍼레이션들은, 이들 중 어느 것이 "cc-dep" RegOp인지를 판정하기 위해 검사된다. 만일 1개가 그런 경우, 어떤 그룹의 상태 플래그들이 필요한지를 결정하기 위해, RegOp의 특정의 타입이 디코드되고, 그리고 Status V비트가 체크되어 이러한 그룹의 모두가 실제로 유효한지가 결정된다. 동시에, Status [7 : 0] 는 그대로 RUX 실행 유닛에게 건네진다.
모든 필요한 플래그의 그룹이 동시에 유효한 경우, 적어도 상태 오퍼랜드 페칭이 관계하고 있는 한, RegOp는 RUX 스테이지 1내로 진행할 수 있게 된다. 그러나, RegOp가 스테이지 1로 즉시 진행하지 않는 경우, Op쿼드 엔트리(3 내지 6)의 쉬프트가 금지된다. 필요한 플래그 그룹중 어느것이 동시에 유효하지 않은 경우, RegOp는 RUX 스테이지 1로의 진행이 홀드업되어, 스케쥴러 Op쿼드 엔트리 3 내지 6의 쉬프트가 금지된다.
만일 Op쿼드 엔트리 3 내지 6에 미실행의 "cc-dep" RegOp는 없지만 RUX 스테이지 0에 "cc-dep" RegOp가 존재하는 경우, 이 RegOp는 스테이지 0에서 무조건 홀드업된다. 만일 Op쿼드 엔트리 3의 "cc-dep" RegOp이 아직 실행되어 있지 않지만, RUX 스테이지 0에 "cc-dep" RegOp가 없거나 혹은 Op쿼드 엔트리 4 내지 6에 미실행의 "cc-dep" RegOp가 존재하는 경우, Op쿼드 엔트리 3 내지 6의 쉬프트가 금지된다.
실행되는 오퍼레이션이 상태 플래그를 변경하지 않음을 나타내는 RUX 유닛으로부터의 추가의 입력(RUX NoStatMod)이 존재한다. "NoStatMod"라 칭해지는 사이클-지연 버젼은 여러가지 상황에 유용하다. 이하의 식은 이 논리를 기술한 것이다.
BRCOND 오퍼레이션 분석
각 사이클동안, BRCOND 오퍼레이션에 대해 Op쿼드 엔트리 4가 체크된다. 만일 1개가 발견되었을 경우, 그 엔트리의 조건 코드(cc) 필드가 디코드되어 32개의 조건 값의 조합중 하나 및 관련 유효 비트가 선택된다. 그 값 및 선택된 조건의 유효성은, 이후 스케쥴러가 쿼드 엔트리 4 내지 6을 쉬프트하지 못하게 하고 그리고/또는 필요한 경우 파이프라인 재시작 신호(pipeline restart singals))를 어써트하기 위해서 이용된다.
BRCOND 오퍼레이션이 예측 미스되고(따라서 파이프라인의 재시작이 필요한 것으로 밝혀진) 경우, BRCOND 오퍼레이션이 MacDec인지 또는 emcode 오퍼레이션인지의 여부, 및 그것이 내부 emcode에 유래하는지 혹은 외부 emcode에 유래하는지 여부에 기초하여 재시작 신호가 어써트 된다. 추가로, 적당한 x86 매크로 명령 또는 emcode 벡터 어드레스 및 관련 리턴 어드레스 스택 TOS 값이 생성된다.
중단 불가능한 RegOps와 선행 BRCOND 오퍼레이션 사이의 동기화를 처리하는 논리의 이점(하기에 설명됨)을 위해, 예측 미스된 BRCOND 오퍼레이션의 발생의 기록이, 미해결(outstanding) 상태로 남아 있는 동안(즉, 중단 사이클이 발생할 때까지) 유지된다. 더욱이, 미해결의 예측 미스된 BRCOND 오퍼레이션의 존재는 중단 사이클이 발생할 때까지 ("재시작된" MacDec로부터의) "새로운" Op쿼드의 적재를 홀드업 하는데 사용된다.
만일 BRCOND 오퍼레이션이 정확히 예측된 경우, 취해지는 유일한 동작은 BRCOND 오퍼레이션이 완료된 것을 나타내기 위해 BRCOND 오퍼레이션의 State 비트 S3를 세팅하는 것이다.
다음의 식은 이러한 논리 모두를 기술한다. 이하의 "DTF" 및 "SSTF" 신호가 참조되며, 이들 신호는 브레이크포이트와 단일-단계 트랩(single-step trap)을 각각 나타내는 신호이다. "MDD"라 칭해지는 신호가 또한 존재하는 바, 이것은 한 번에 1회를 넘어 스케쥴러에 매크로 명령이 삽입되는 것을 방지하기 위한 디버그용으로 이용될 수 있는 다중 디코드 디스에이블을 위한 신호이다.
성공적으로 분해되는 BRCOND 오퍼레이션은, Op쿼드 엔트리 4에 1 사이클 이상 존재하는데 이는, Op쿼드 엔트리 5 및 6은 쉬프트 하지 못하고 따라서 Op쿼드 엔트리 4가 쉬프트 다운하는 것을 방지하기 때문이다. 이 시간 동안 Sc Resolve=1이고, 버스 (557)의 신호들 중 하나 BrVec2XXX가(제 1 싸이클에 대한) 전체시간 동안 어써트된 상태로 남아있게 된다. 이는 명령 디코더(220)가, 신호 BrVec2XXX가 디어써트 될 때까지 각 사이클의 시작을 유지 하기때문에 문제 없이 행해진다. 벡터 어드레스와 같은 다른 모든 관계 신호는, 이 시간 전체에 걸쳐서 적당한 값을 유지한다.
중단 불가능 RegOp 동기화
각 사이클동안, 중단 불가능 RegOp에 대해 Op쿼드 엔트리 4가 체크된다. 만일 1개가 발견되는 경우, 스케쥴러(260)가 어떤 선행의 예측 미스된 BRCOND 오퍼레이션의 존재를 체크한다. emcode 코딩의 제약 때문에, 선행 BRCOND 오퍼레이션은 하위의 Op쿼드 엔트리에 있어야만 하며, 따라서 모두 해석되어야만 한다. 더욱이, 동시에 해석되는 BRCOND 오퍼레이션은 중단 불가능 RegOp의 뒤에 놓이게 되어 따라서 무관계하다.
만일 이러한 예측 미스된 BRCOND 오퍼레이션이 존재하지 않는 경우, RegOp는 RUX 스테이지 1로 진행될 수 있게된다. RegOp가 곧바로 스테이지 1로 진행되지 않는 경우에도 여전히 Op쿼드 엔트리 4로부터 쉬프트 아웃 될 수가 있다.
만일 Op쿼드 엔트리 4 또는 5가 미실행의 중단 불가능 RegOp를 포함하지는 않지만, RUX 스테이지 0에 중단 불가능 RegOp가 존재하는 경우, 이 중단 불가능 RegOp는 스테이지 0에서 무조건 홀드업되어, Op쿼드 엔트리 4에 이르게 된다. 만일 아직 실행되어 있지 않은 중단 불가능 RegOp가 Op쿼드 엔트리 4에 존재하지만, RUX 스테이지 0에 중단 불가능 RegOp가 존재하지 않거나 혹은 미실행의 중단 불가능 RegOp가 Op쿼드 엔트리 5에 존재하는 경우, Op쿼드 엔트리 4 및 5의 쉬프트가 금지된다.
다음의 식은 이러한 논리를 기술한 것이다.
슈퍼스칼라 프로세서(120)는 다양한 시스템 구성에 합체될 수 있는바, 이러한 시스템 구성에는, 예를 들면 스텐드얼론형의 네트워크 연결된 퍼스널 컴퓨터 시스템, 워크스테이션 시스템, 멀티미디어 시스템, 네트워크 서버 시스템, 멀티 프로세서 시스템, 매입형 시스템, 통합형 전화 시스템, 비디오 회의 시스템등이 있다. 제10도는, 슈퍼스칼라 프로세서(120)와 같은 RISC86 명령 세트를 실행하는 명령 디코더를 가지는 프로세서를 위해서 적절한 시스템 구성 세트를 예시한 것이다. 특히, 제10도는 적절한 버스 구성, 메모리 계층 및 캐쉬 구성, I/O 인터페이스, 제어기, 디바이스, 및 주변장치와 함께 RISC86 명령을 실행하는 명령 디코더를 구비한 슈퍼스칼라 프로세서의 적절한 조합을 도시하고 있다.
본 발명에 대해 여러가지 실시예를 채택하여 설명했지만, 이러한 실시예는 예시적인 것이며, 본 발명의 범위가 이들로만 한정되는 것이 아님을 이해할 수 있을 것이다. 여기에 개시한 실시예의 여러가지 변경, 추가, 및 개량이 가능하다. 더욱이, 실시 예에서 하드웨어로서 실현된 구조 및 기능성은, 다른 실시예에서는 소프트웨어, 펌 웨어, 또는 마이크로코드로서 실현 될 수 있다. 예를 들면, 본 명세서에서는, 3개의 로테이터(430, 432, 434), 3개의 명령레지스터(450, 452, 454), 및 3개의 숏 디코더 (SDec0 410, SDec1 412, SDec2 414)를 포함하는 숏 디코드 경로를 가지는 매크로 명령 디코더가 개시되고 있지만, 다른 실시예에서는, 다른 수의 숏 디코더 경로가 채용될 수 있다. 2개의 디코드 경로를 채용한 디코더가 매우 적절하다. 이러한 실시예 및 다른 실시 예의 변경, 수정, 추가, 및 개량은 청구의 범위에 기재된 바와 같이 본 발명의 범위내에 드는 것이다.

Claims (27)

  1. CISC형 명령들(214)의 소스와, 복수의 RISC형 명령들을 병렬로 실행하는 RISC형 프로세서 코어를 포함하는 슈퍼 스칼라 마이크로 프로세서(120)에 있어서,
    상기 CISC형 명령들의 소스를 상기 RISC형 프로세서 코어에 결합하며, CISC형 명령들을 비트 길이가 서로 균일한 복수의 명령 코드들을 구비하는 RISC형 명령세트의 오퍼레이션으로 변환하는 디코더(220)를 포함하며,
    상기 복수의 명령 코드 각각은 사용 목적이 정의된 복수의 비트 필드들로 분할되고, 이 명령 코드들은 복수의 명령 클래스들로 분류되며,
    상기 복수의 명령 클래스중 하나의 명령 클래스에 있는 각 코드에는, 상기 하나의 명령 코드가 복수의 명령 버전들에 맵핑되게끔 간접 지정자를 사용하여 맵핑되는 하나의 비트 필드를 포함하는 서로 일관된 정의를 갖는 사용 목적이 정의된 비트 필드들이 구비되는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  2. 제 1 항에 있어서,
    상기 명령 클래스는 레지스터 오퍼레이션(RegOp) 클래스를 포함하며,
    상기 RegOp 클래스는 연산 오퍼레이션, 시프트 오퍼레이션 및 이동 오퍼레이션을 포함함과 아울러, 사용 목적이 정의된 비트 필드들 - 이 필드들은 오퍼레이션 타입 필드와; 제 1 소스 오퍼랜드, 제 2 소스 오퍼랜드 및 임의의 목적지 오퍼랜드를 표시하는 3개의 오퍼랜드 비트 필드; 및 오퍼랜드의 데이터 사이즈를 표시하는 비트 필드를 포함한다 - 을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  3. 제 2 항에 있어서,
    상기 RegOp 클래스는 하나 이상의 상태 플래그를 변경하는 오퍼레이션 및 사용 목적이 정의된 비트 필드들을 더 포함하며,
    상기 사용 목적이 정의된 비트 필드들은 상기 오퍼레이션에 의해 변경되는 하나 이상의 상태 플래그를 지정하는 확장 비트 필드와, 그리고 상기 오퍼레이션이 상기 확장 비트 필드에 따라 상기 상태 플래그들을 변경케하는 설정 상태 비트 필드를 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  4. 제 2 항에 있어서,
    상기 RegOp 클래스는 특정 레지스터 판독 및 기록 오퍼레이션을 포함함과 아울러, 사용 목적이 정의된 비트 필드들을 구비하며,
    상기 사용 목적이 정의된 비트 필드들은 확장 비트 필드를 포함하는데, 상기 확장 비트 필드는 조건적 이동 명령에 대한 조건 코드를 지정함과 아울러, 상기 특정 레지스터 판독 및 기록 오퍼레이션에 의해 판독 및 기록될 특정 레지스터를 지정하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  5. 제 2 항에 있어서,
    상기 RegOp 클래스는, 오퍼레이션을 실행하는 실행 유닛을 지시하는 실행 유닛 비트 필드를 포함하는 사용 목적이 정의된 비트 필드를 더 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  6. 제 2 항에 있어서,
    상기 RegOp 클래스는, 프로세서 실행을 지령하기위해 프로그램 카운터에 기록을 행하는 오퍼레이션을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  7. 제 2 항에 있어서,
    상기 RegOp 클래스는 액세스 허용에 대해 메모리 세그먼트 선택기를 검사하는 것과 액세스 허용 시 상기 선택기를 적재하는 것을 동시에 행하는 선택기 검사 오퍼레이션을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  8. 제 2 항에 있어서,
    상기 RegOp 클래스는,
    리얼 모드 방식으로 세그먼트 레지스터를 적재하는 기록 디스크립터 리얼(WRDR : Write Descriptor Real) 오퍼레이션과;
    기록 디스크립터 보호 모드 하이(WRDH : Write Descriptor Protected Mode High) 오퍼레이션과; 그리고
    기록 디스크립터 보호 모드 로우(WRDL : Write Descriptor Protected Mode Low) 오퍼레이션을 포함하며,
    상기 기록 디스크립터 보호 모드 하이 오퍼레이션 및 상기 기록 디스크립터 보호 모드 로우 오퍼레이션은 데이터 세그먼트 및 I/O 어드레스 공간을 검사하기위한 검사 오퍼레이션들의 시퀀스를 하드웨어 원시의 에뮬레이션 코드 시퀀스로서 수행하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  9. 제 1항에 있어서,
    상기 간접 지정자는 오퍼레이팅 레지스터, 데이터 사이즈 및 어드레스 사이즈를 포함하는 명령 파라메터들을 지정하는 것을 특징으로하는 슈퍼 스칼라 레지스터.
  10. 제 1 항에 있어서,
    상기 명령 클래스들은 적재 및 저장 오퍼레이션(LdStOP) 클래스를 포함하는데, 이 적재-저장 오퍼레이션은 적재-저장 오퍼레이션들을 포함함과 아울러, 사용 목적이 정의된 비트 필드들 - 이 필드들은 오퍼레이션 타입 필드와, 메모리의 적재-저장 어드레스를 지정하는 복수의 비트 필드와, 메모리의 상기 적재-저장 어드레스로부터 데이터를 소싱 및 수신하는 데이터 소스-목적지 레지스터를 표시하는 비트 필드와, 그리고 상기 소스-목적지 데이터의 데이터 사이즈를 표시하는 비트 필드를 포함한다 - 를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  11. 제 10 항에 있어서,
    상기 LdStOp 클래스에서 메모리의 적재-저장 어드레스를 표시하는 복수의 비트 필드는,
    상기 적재-저장 어드레스의 메모리 세그먼트를 표시하는 세그먼트 레지스터와;
    상기 적재-저장 메모리 어드레스의 베이스를 표시하는 베이스 레지스터와;
    메모리 인덱스를 표시하는 인덱스 레지스터와; 그리고
    인덱스 스케일 팩터를 표시하는 인덱스 스케일 팩터 비트 필드를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  12. 제 11항에 있어서,
    상기 LdStOp 클래스는, TLB 어드레스를 무효화하는 오퍼레이션을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  13. 제 1 항에 있어서,
    상기 명령 클래스들은 적재 오퍼레이션(LdOP) 클래스를 포함하는데, 이 LdOP 클래스는 적재 오퍼레이션들을 포함함과 아울러, 사용 목적이 정의된 비트 필드들 - 이 필드들은 오퍼레이션 타입 필드와, 메모리의 소스 어드레스를 지정하는 복수의 비트 필드와, 메모리의 상기 소스 어드레스로부터 데이터를 수신하는 목적지 레지스터를 지정하는 비트 필드와, 그리고 상기 소스-목적지 데이터의 데이터 사이즈를 표시하는 비트 필드를 포함함 - 을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  14. 제 1 항에 있어서,
    상기 명령 클래스들은 저장 오퍼레이션(StOP) 클래스를 포함하는데, 이 StOP 클래스는 저장 오퍼레이션들을 포함함과 아울러, 사용 목적이 정의된 비트 필드들 - 이 필드들은 오퍼레이션 타입 필드와, 메모리의 저장 어드레스를 지정하는 복수의 비트 필드와, 상기 저장 레지스터로부터 데이터를 소싱하는 데이터 소스 레지스터를 지정하는 비트 필드, 및 상기 소스-목적지 데이터의 데이터 사이즈를 지정하는 비트 필드를 포함한다 - 을 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  15. 제 1 항에 있어서,
    상기 명령 세트는 사용 목적이 정의된 비트 필드들을 갖는 적재 즉시 오퍼레이션 클래스(LIMMOp)를 더 포함하며,
    상기 사용 목적이 정의된 비트 필드들은 즉시 데이터 값을 표시하는 즉시 데이터 하이 (ImmHi) 비트 필드 및 즉시 데이터 로우 (ImmLo) 비트 필드와; 그리고
    메모리의 상기 적재 저장 어드레스로부터 데이터를 수신하는 데이터 목적지 레지스터를 지정하는 비트 필드를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  16. 제 1 항에 있어서,
    상기 명령 세트는 특수 오퍼레이션 클래스(SpecOp)를 더 포함하며, 상기 SpecOp 클래스는 조건 분기 오퍼레이션, 설정 디폴트 오류 처리기 어드레스 오퍼레이션, 설정 치환 오류 처리기 어드레스 오퍼레이션 및 무조건 오류 오퍼레이션을 포함함과 아울러 사용 목적이 정의된 비트 필드들 - 이 필드들은 조건 코드를 지정하는 비트 필드와 그리고 사인된 즉시 데이터 값을 지정하는 데이터 즉시 비트 필드를 포함한다 - 을 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  17. 제 16 항에 있어서,
    상기 SpecOp는 적재 상수 오퍼레이션을 더 포함하고,
    상기 사용 목적이 정의된 비트 필드는 데이터 목적지 레지스터를 지정하는 비트 필드와 그리고 상수 데이터의 데이터 사이즈를 지정하는 비트 필드를 더 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  18. 제 1 항에 있어서,
    오퍼레이션의 상기 사용 목적이 정의된 비트 필드는, 프로세서(120)의 에뮬레이션 환경에 의해 결정되는 값으로 표시되는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  19. 제 1항에 있어서,
    상기 복수의 명령 코드들은 고정된 비트 길이의 구조로 배열되고;
    상기 구조는 복수의 사용 목적이 정의된 비트 필드들로 분할되며; 그리고
    상기 명령 코드들은 상기 복수의 비트 필드들의 복수의 오퍼레이션 (Op) 형식을 구비하며,
    여기서, 상기 형식들은,
    상기 명령 코드를 제 1 레지스터 Op 형식 코드로서 지정하는 형식 비트 필드와, 명령 타입을 지정하는 타입 비트 필드와, 제 1 소스 오퍼랜드를 식별하는 제 1 소스 오퍼랜드 비트 필드와, 제 2 소스 오퍼랜드를 식별하는 제 2 소스 오퍼랜드 비트 필드와, 목적지 오퍼랜드를 지정하는 목적지 비트 필드와, 그리고 오퍼랜드 바이트 사이즈를 지정하는 오퍼랜드 사이즈 비트 필드를 구비하는 제 1 레지스터 Op 형식과; 그리고
    상기 명령 코드를 적재-저장 Op 형식 코드로서 지정하는 형식 비트 필드와, 적재-저장 명령 타입을 지정하는 타입 비트 필드와, 적재-저장 오퍼레이션의 목적지-소스를 식별하는 데이터 비트 필드와, 인덱스 스케일 팩터를 표시하는 인덱스 스케일 팩터 비트 필드와, 세그먼트 레지스터를 지정하는 세그먼트 비트 필드와, 적재-저장 베이스 어드레스를 지정하는 베이스 비트 필드와, 적재-저장 어드레스 변위를 지정하는 변위 비트 필드와, 그리고 적재-저장 어드레스 인덱스를 지정하는 인덱스 비트 필드를 구비하는 적재-저장 Op 형식을 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로 프로세서.
  20. 제 19 항에 있어서,
    상기 제 1 레지스터 Op 형식은 조건 코드를 지정하는 확장 비트 필드를 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로 프로세서.
  21. 제 19 항에 있어서,
    상기 사용 목적이 정의된 비트 필드들중 적어도 하나는 프로세서(120) 콘텍스트에 따라 결정되는 것을 특징으로 하는 슈퍼스칼라 마이크로 프로세서.
  22. 제 1 항에 있어서,
    상기 명령 클래스들은 레지스터 오퍼레이션 (RegOp) 클래스와 그리고 적재-저장 오퍼레이션(LdStOp) 클래스를 포함하며,
    상기 RegOp 클래스는 연산 오퍼레이션들, 시프트 오퍼레이션들 및 이동 오퍼레이션들을 포함함과 아울러, 오퍼레이션 타입 필드와; 제 1 소스 오퍼랜드, 제 2 소스 오퍼랜드, 및 목적지 오퍼랜드를 표시하는 3개의 오퍼랜드 비트 필드와; 그리고 상기 오퍼랜드들의 데이터 사이즈를 표시하는 비트 필드를 포함하는 사용 목적이 정의된 비트 필드들을 구비하며; 그리고
    상기 LdStOp 클래스는 적재 및 저장 오퍼레이션들을 포함함과 아울러, 상기 정의된 비트 필드들 - 이 필드들은 오퍼레이션 타입 필드와, 메모리의 적재-저장 어드레스를 지정하는 복수의 비트 필드와, 메모리의 상기 적재-저장 어드레스로부터 데이터를 소싱-수신하는 데이터 소스-목적지 레지스터를 표시하는 비트 필드와, 그리고 상기 소스-목적지 데이터의 데이터 사이즈를 표시하는 비트 필드를 포함한다 - 를 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  23. 제 22항에 있어서,
    상기 RegOp 클래스는 하나 이상의 상태 플래그를 변경하는 오퍼레이션을 포함함과 아울러, 사용 목적이 정의된 비트 필드들 - 이 비트 필드들은 상기 오퍼레이션에 의해 변경되는 하나 이상의 상태 플래그를 지정하는 확장 비트 필드와, 그리고 상기 오퍼레이션이 상기 확장 비트 필드에 따라서 상기 상태 플래그를 수정케하는 하는 설정 상태 비트 필드를 포함한다 - 을 더 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 마이크로프로세서.
  24. 제 22 항에 있어서,
    상기 명령 세트는 사용 목적이 정의된 비트 필드들을 갖는 적재 즉시 오퍼레이션 클래스(LIMMOp)를 더 포함하며,
    상기 사용 목적이 정의된 비트 필드들은 즉시 데이터 값을 표시하는 즉시 데이터 하이 (ImmHi) 비트 필드 및 즉시 데이터 로우 (ImmLo) 비트 필드와; 그리고
    상기 즉시 데이터 값을 수신하는 데이터 목적지 레지스터를 표시하는 비트 필드를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마아크로 프로세서.
  25. 제 22항에 있어서,
    상기 명령 세트는 특수 오퍼레이션 (SpecOp) 클래스를 더 포함하며, 상기 SpecOp는 조건 분기 오퍼레이션, 설정 디폴트 오류 처리기 어드레스 오퍼레이션, 설정 치환 오류 처리기 어드레스 오퍼레이션 및 무조건 오류 오퍼레이션을 포함함과 아울러 사용 목적이 정의된 비트 필드들 - 이 필드들은 조건 코드를 표시하는 비트 필드와 그리고 사인된 즉시 데이터 값을 표시하는 데이터 즉시 비트 필드를 포함한다 - 을 구비하는 것을 특징으로 하는 슈퍼 스칼라 마이크로 프로세서.
  26. 제 1항에 있어서,
    상기 디코더는 에뮬레이션 ROM 및 상기 에뮬레이션 ROM에 연결되는 에뮬레이션 시퀀서를 포함하고, 선택된 에뮬레이션 환경에 따라 복합 CISC 명령들을 디코드하고,
    상기 간접 지정자들은 상기 선택된 에뮬레이션 환경에 근거하여 초기화되는 것을 특징으로 하는 슈퍼스칼라 마이크로 프로세서.
  27. 데이터 및 명령들을 저장하는 메모리 서브 시스템(122, 124, 130)과; 그리고
    동작시 상기 메모리 서브시스템에 저장된 상기 데이터 및 명령들을 엑세스하도록 연결되는, 전술한 항들중 어느 항에 기재된 바와 같은 슈퍼스칼라 마이크로프로세서(120)를 포함하여 구성된 것을 특징으로 하는 컴퓨터 시스템(100).
KR1019980702570A 1995-10-06 1996-10-04 Risc형명령세트및슈퍼스칼라마이크로프로세서 KR100513358B1 (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US506995P 1995-10-06 1995-10-06
US502195P 1995-10-10 1995-10-10
US59215196A 1996-01-26 1996-01-26
US08/649,983 US5926642A (en) 1995-10-06 1996-05-16 RISC86 instruction set
US649,983 1996-05-16
US592,151 1996-05-16
US60/005,069 1996-05-16
US60/005,021 1996-05-16
PCT/US1996/015422 WO1997013194A1 (en) 1995-10-06 1996-10-04 Risc86 instruction set

Publications (2)

Publication Number Publication Date
KR19990064091A KR19990064091A (ko) 1999-07-26
KR100513358B1 true KR100513358B1 (ko) 2006-02-01

Family

ID=27485438

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980702570A KR100513358B1 (ko) 1995-10-06 1996-10-04 Risc형명령세트및슈퍼스칼라마이크로프로세서

Country Status (7)

Country Link
US (2) US5926642A (ko)
EP (1) EP0853780B1 (ko)
JP (1) JP3714962B2 (ko)
KR (1) KR100513358B1 (ko)
AU (1) AU7246596A (ko)
DE (1) DE69629383T2 (ko)
WO (1) WO1997013194A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8204587B2 (en) 2006-11-20 2012-06-19 Aram Huvis Co., Ltd. Apparatus for iontophoresis

Families Citing this family (122)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5828875A (en) * 1997-05-29 1998-10-27 Telefonaktiebolaget Lm Ericsson Unroll of instructions in a micro-controller
US6016544A (en) * 1997-06-09 2000-01-18 Ip First Llc Apparatus and method for tracking changes in address size and for different size retranslate second instruction with an indicator from address size
US6289437B1 (en) * 1997-08-27 2001-09-11 International Business Machines Corporation Data processing system and method for implementing an efficient out-of-order issue mechanism
US6757746B2 (en) 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6434620B1 (en) 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US8782199B2 (en) 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
JP3614646B2 (ja) * 1998-03-12 2005-01-26 富士通株式会社 マイクロプロセッサ、演算処理実行方法及び記憶媒体
DE19826826A1 (de) * 1998-06-16 1999-07-15 Siemens Ag Verfahren zum Decodieren und Ausführen von Befehlen in einem RISC-Prozessor
US6292845B1 (en) * 1998-08-26 2001-09-18 Infineon Technologies North America Corp. Processing unit having independent execution units for parallel execution of instructions of different category with instructions having specific bits indicating instruction size and category respectively
US6195747B1 (en) * 1998-09-28 2001-02-27 Mentor Arc Inc. System and method for reducing data traffic between a processor and a system controller in a data processing system
US6212631B1 (en) * 1999-01-15 2001-04-03 Dell Usa, L.P. Method and apparatus for automatic L2 cache ECC configuration in a computer system
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding
US6990658B1 (en) * 1999-10-13 2006-01-24 Transmeta Corporation Method for translating instructions in a speculative microprocessor featuring committing state
US6904515B1 (en) * 1999-11-09 2005-06-07 Ati International Srl Multi-instruction set flag preservation apparatus and method
US6539470B1 (en) 1999-11-16 2003-03-25 Advanced Micro Devices, Inc. Instruction decode unit producing instruction operand information in the order in which the operands are identified, and systems including same
US6564315B1 (en) * 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6542984B1 (en) * 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6591343B1 (en) * 2000-02-22 2003-07-08 Ip-First, Llc Predecode in parallel with TLB compare
US6526463B1 (en) * 2000-04-14 2003-02-25 Koninklijke Philips Electronics N.V. Dynamically selectable stack frame size for processor interrupts
US6735689B1 (en) * 2000-05-01 2004-05-11 Raza Microelectronics, Inc. Method and system for reducing taken branch penalty
US6791564B1 (en) 2000-05-05 2004-09-14 Ipfirst, Llc Mechanism for clipping RGB value during integer transfer
US7069420B1 (en) * 2000-09-28 2006-06-27 Intel Corporation Decode and dispatch of multi-issue and multiple width instructions
US8019901B2 (en) 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
US7873814B1 (en) * 2000-12-22 2011-01-18 Lsi Corporation Microcode based hardware translator to support a multitude of processors
US6915416B2 (en) * 2000-12-28 2005-07-05 Texas Instruments Incorporated Apparatus and method for microcontroller debugging
US7181484B2 (en) 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7162621B2 (en) * 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7861071B2 (en) * 2001-06-11 2010-12-28 Broadcom Corporation Conditional branch instruction capable of testing a plurality of indicators in a predicate register
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
US7017032B2 (en) * 2001-06-11 2006-03-21 Broadcom Corporation Setting execution conditions
US7383421B2 (en) * 2002-12-05 2008-06-03 Brightscale, Inc. Cellular engine for a data processing system
US7389315B1 (en) * 2002-02-28 2008-06-17 Network Appliance, Inc. System and method for byte swapping file access data structures
US7260217B1 (en) * 2002-03-01 2007-08-21 Cavium Networks, Inc. Speculative execution for data ciphering operations
US7543087B2 (en) 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
US20040139299A1 (en) * 2003-01-14 2004-07-15 International Business Machines Corporation Operand forwarding in a superscalar processor
US7103754B2 (en) * 2003-03-28 2006-09-05 International Business Machines Corporation Computer instructions for having extended signed displacement fields for finding instruction operands
US7171653B2 (en) * 2003-06-03 2007-01-30 Hewlett-Packard Development Company, L.P. Systems and methods for providing communication between a debugger and a hardware simulator
US7185167B2 (en) * 2003-06-06 2007-02-27 Microsoft Corporation Heap allocation
GB2402763B (en) * 2003-06-13 2006-03-01 Advanced Risc Mach Ltd Data access program instruction encoding
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7996671B2 (en) * 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
DE102004025419A1 (de) * 2004-05-24 2005-12-22 Infineon Technologies Ag Controller und Verfahren zum Verarbeiten von Befehlen
DE102004025418A1 (de) * 2004-05-24 2005-12-22 Infineon Technologies Ag Controller mit einer Decodiereinrichtung
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
US20060174089A1 (en) * 2005-02-01 2006-08-03 International Business Machines Corporation Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
JP4841861B2 (ja) * 2005-05-06 2011-12-21 ルネサスエレクトロニクス株式会社 演算処理装置及びデータ転送処理の実行方法
US20060282821A1 (en) * 2005-06-10 2006-12-14 Renno Erik K Efficient subprogram return in microprocessors
US7451293B2 (en) * 2005-10-21 2008-11-11 Brightscale Inc. Array of Boolean logic controlled processing elements with concurrent I/O processing and instruction sequencing
US7711990B1 (en) * 2005-12-13 2010-05-04 Nvidia Corporation Apparatus and method for debugging a graphics processing unit in response to a debug instruction
KR20080094005A (ko) * 2006-01-10 2008-10-22 브라이트스케일, 인크. 병렬 프로세싱 시스템에서 멀티미디어 데이터의 서브블록들을 프로세싱하기 위한 방법 및 장치
JP4778359B2 (ja) * 2006-05-17 2011-09-21 エヌイーシーコンピュータテクノ株式会社 エミュレーション方法及びコンピュータシステム
WO2008027567A2 (en) * 2006-09-01 2008-03-06 Brightscale, Inc. Integral parallel machine
US20080244238A1 (en) * 2006-09-01 2008-10-02 Bogdan Mitu Stream processing accelerator
US20080059763A1 (en) * 2006-09-01 2008-03-06 Lazar Bivolarski System and method for fine-grain instruction parallelism for increased efficiency of processing compressed multimedia data
US20080059467A1 (en) * 2006-09-05 2008-03-06 Lazar Bivolarski Near full motion search algorithm
US7620797B2 (en) * 2006-11-01 2009-11-17 Apple Inc. Instructions for efficiently accessing unaligned vectors
US7624251B2 (en) * 2006-11-01 2009-11-24 Apple Inc. Instructions for efficiently accessing unaligned partial vectors
US8412981B2 (en) * 2006-12-29 2013-04-02 Intel Corporation Core sparing on multi-core platforms
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US7734873B2 (en) 2007-05-29 2010-06-08 Advanced Micro Devices, Inc. Caching of microcode emulation memory
US7761672B2 (en) * 2007-06-28 2010-07-20 Advanced Micro Devices, Inc. Data movement and initialization aggregation
US20090013124A1 (en) * 2007-07-03 2009-01-08 Dsp Group Limited Rom code patch method
US20090182985A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Move Facility and Instructions Therefore
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
US9213665B2 (en) 2008-10-28 2015-12-15 Freescale Semiconductor, Inc. Data processor for processing a decorated storage notify
US8627471B2 (en) 2008-10-28 2014-01-07 Freescale Semiconductor, Inc. Permissions checking for data processing instructions
US9911008B2 (en) 2010-05-25 2018-03-06 Via Technologies, Inc. Microprocessor with on-the-fly switching of decryption keys
US9892283B2 (en) 2010-05-25 2018-02-13 Via Technologies, Inc. Decryption of encrypted instructions using keys selected on basis of instruction fetch address
CN102221989B (zh) * 2010-05-25 2014-07-16 威盛电子股份有限公司 微处理器以及相关的操作方法、以及加密、解密方法
US9798898B2 (en) 2010-05-25 2017-10-24 Via Technologies, Inc. Microprocessor with secure execution mode and store key instructions
US8645714B2 (en) * 2010-05-25 2014-02-04 Via Technologies, Inc. Branch target address cache for predicting instruction decryption keys in a microprocessor that fetches and decrypts encrypted instructions
US9967092B2 (en) 2010-05-25 2018-05-08 Via Technologies, Inc. Key expansion logic using decryption key primitives
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9317288B2 (en) * 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US20120260073A1 (en) * 2011-04-07 2012-10-11 Via Technologies, Inc. Emulation of execution mode banked registers
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9176733B2 (en) * 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9280492B2 (en) * 2013-12-28 2016-03-08 Intel Corporation System and method for a load instruction with code conversion having access permissions to indicate failure of load content from registers
US9547494B2 (en) * 2014-05-30 2017-01-17 International Business Machines Corporation Absolute address branching in a fixed-width reduced instruction set computing architecture
US9563427B2 (en) * 2014-05-30 2017-02-07 International Business Machines Corporation Relative offset branching in a fixed-width reduced instruction set computing architecture
CN105993003B (zh) * 2014-07-21 2019-04-09 上海兆芯集成电路有限公司 转译后备缓冲器、操作转译后备缓冲器的方法以及处理器
US10127137B2 (en) * 2015-06-03 2018-11-13 Fengwei Zhang Methods and systems for increased debugging transparency
US10222989B1 (en) * 2015-06-25 2019-03-05 Crossbar, Inc. Multiple-bank memory device with status feedback for subsets of memory banks
US9921763B1 (en) 2015-06-25 2018-03-20 Crossbar, Inc. Multi-bank non-volatile memory apparatus with high-speed bus
US10141034B1 (en) 2015-06-25 2018-11-27 Crossbar, Inc. Memory apparatus with non-volatile two-terminal memory and expanded, high-speed bus
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US9870305B2 (en) * 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10303498B2 (en) 2015-10-01 2019-05-28 Microsoft Technology Licensing, Llc Performance optimizations for emulators
US10255068B2 (en) 2017-03-03 2019-04-09 International Business Machines Corporation Dynamically selecting a memory boundary to be used in performing operations
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US10620956B2 (en) 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10564965B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Compare string processing via inline decode-based micro-operations expansion
US10521207B2 (en) * 2018-05-30 2019-12-31 International Business Machines Corporation Compiler optimization for indirect array access operations
US10795679B2 (en) * 2018-06-07 2020-10-06 Red Hat, Inc. Memory access instructions that include permission values for additional protection
US10884751B2 (en) 2018-07-13 2021-01-05 Advanced Micro Devices, Inc. Method and apparatus for virtualizing the micro-op cache
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11042422B1 (en) 2020-08-31 2021-06-22 Microsoft Technology Licensing, Llc Hybrid binaries supporting code stream folding
US11977890B2 (en) * 2021-12-30 2024-05-07 Advanced Micro Devices, Inc. Stateful microcode branching

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4641262A (en) * 1983-03-07 1987-02-03 International Business Machines Corporation Personal computer attachment for host system display station
US4868765A (en) * 1986-01-02 1989-09-19 Texas Instruments Incorporated Porthole window system for computer displays
US4932048A (en) * 1986-04-15 1990-06-05 Canon Kabushiki Kaisha Data communication apparatus with voice communication control
US4941089A (en) * 1986-12-12 1990-07-10 Datapoint Corporation Input/output network for computer system
US5101341A (en) * 1988-08-25 1992-03-31 Edgcore Technology, Inc. Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO
US5131086A (en) * 1988-08-25 1992-07-14 Edgcore Technology, Inc. Method and system for executing pipelined three operand construct
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5113515A (en) * 1989-02-03 1992-05-12 Digital Equipment Corporation Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer
US5018146A (en) * 1989-06-22 1991-05-21 Ge Fanuc Automatinon North America, Inc. Apparatus and method for determining if a particular plug-in card is appropriate for use with an electronic processor
EP0415366B1 (en) * 1989-08-28 1997-06-11 Nec Corporation Microprocessor having predecoder unit and main decoder unit operating in pipeline processing manner
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5201056A (en) * 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
CA2037708C (en) * 1990-05-04 1998-01-20 Richard J. Eickemeyer General purpose compound apparatus for instruction-level parallel processors
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
WO1992006426A1 (en) * 1990-10-09 1992-04-16 Nexgen Microsystems Method and apparatus for parallel decoding of instructions with branch prediction look-up
JPH04156613A (ja) * 1990-10-20 1992-05-29 Fujitsu Ltd 命令バッファ装置
US5222244A (en) * 1990-12-20 1993-06-22 Intel Corporation Method of modifying a microinstruction with operands specified by an instruction held in an alias register
US5301342A (en) * 1990-12-20 1994-04-05 Intel Corporation Parallel processing computer for solving dense systems of linear equations by factoring rows, columns, and diagonal, inverting the diagonal, forward eliminating, and back substituting
EP0498654B1 (en) * 1991-02-08 2000-05-10 Fujitsu Limited Cache memory processing instruction data and data processor including the same
US5287490A (en) * 1991-03-07 1994-02-15 Digital Equipment Corporation Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths
DE69231762T2 (de) * 1991-07-08 2001-07-26 Seiko Epson Corp Risc-prozessor mit dehnbarer architektur
US5412466A (en) 1991-07-26 1995-05-02 Toa Medical Electronics Co., Ltd. Apparatus for forming flattened sample flow for analyzing particles
US5333277A (en) * 1992-01-10 1994-07-26 Exportech Trading Company Data buss interface and expansion system
SG45269A1 (en) * 1992-02-06 1998-01-16 Intel Corp End bit markers for instruction decode
GB2263985B (en) * 1992-02-06 1995-06-14 Intel Corp Two stage window multiplexors for deriving variable length instructions from a stream of instructions
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5394524A (en) * 1992-08-07 1995-02-28 International Business Machines Corporation Method and apparatus for processing two graphics data streams in parallel
US5412766A (en) * 1992-10-21 1995-05-02 International Business Machines Corporation Data processing method and apparatus for converting color image data to non-linear palette
US5440619A (en) * 1993-08-11 1995-08-08 Zoom Telephonics, Inc. Voice, data and facsimile modem with modified ringback answering
EP0651320B1 (en) * 1993-10-29 2001-05-23 Advanced Micro Devices, Inc. Superscalar instruction decoder
US5504689A (en) * 1993-12-16 1996-04-02 Dell Usa, L.P. Apparatus and method for testing computer bus characteristics
US5495419A (en) * 1994-04-19 1996-02-27 Lsi Logic Corporation Integrated circuit physical design automation system utilizing optimization process decomposition and parallel processing
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
DE69506623T2 (de) * 1994-06-03 1999-07-22 Motorola Inc Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
US5638525A (en) * 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions
US5758141A (en) * 1995-02-10 1998-05-26 International Business Machines Corporation Method and system for selective support of non-architected instructions within a superscaler processor system utilizing a special access bit within a machine state register
US5758114A (en) * 1995-04-12 1998-05-26 Advanced Micro Devices, Inc. High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor
US5619665A (en) * 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture
US5646676A (en) * 1995-05-30 1997-07-08 International Business Machines Corporation Scalable interactive multimedia server system for providing on demand data

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8204587B2 (en) 2006-11-20 2012-06-19 Aram Huvis Co., Ltd. Apparatus for iontophoresis

Also Published As

Publication number Publication date
WO1997013194A1 (en) 1997-04-10
EP0853780A1 (en) 1998-07-22
AU7246596A (en) 1997-04-28
US5926642A (en) 1999-07-20
DE69629383D1 (de) 2003-09-11
US6336178B1 (en) 2002-01-01
JP3714962B2 (ja) 2005-11-09
KR19990064091A (ko) 1999-07-26
EP0853780B1 (en) 2003-08-06
JPH11510289A (ja) 1999-09-07
DE69629383T2 (de) 2004-06-09

Similar Documents

Publication Publication Date Title
KR100513358B1 (ko) Risc형명령세트및슈퍼스칼라마이크로프로세서
EP0853789B1 (en) Flexible implementation of a system management mode (smm) in a processor
US5909567A (en) Apparatus and method for native mode processing in a RISC-based CISC processor
US5794063A (en) Instruction decoder including emulation using indirect specifiers
US5598546A (en) Dual-architecture super-scalar pipeline
EP0870228B1 (en) Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US9043583B2 (en) Load/move and duplicate instructions for a processor
US5649145A (en) Data processor processing a jump instruction
US5193167A (en) Ensuring data integrity by locked-load and conditional-store operations in a multiprocessor system
US6393549B1 (en) Instruction alignment unit for routing variable byte-length instructions
US6684323B2 (en) Virtual condition codes
EP0463975A2 (en) Byte-compare operation for high-performance processor
EP0463978A2 (en) Granularity hint for translation buffer in high performance processor
CN107832083B (zh) 具有条件指令的微处理器及其处理方法
EP0465322A2 (en) In-register data manipulation in reduced instruction set processor
EP0463973A2 (en) Branch prediction in high performance processor
EP0463977A2 (en) Branching in a pipelined processor
EP0853781A1 (en) Instruction buffer organization method and system
EP0465328A2 (en) Branch elimination in a reduced instruction set processor
EP0853783B1 (en) Instruction decoder including two-way emulation code branching
US9817642B2 (en) Apparatus and method for efficient call/return emulation using a dual return stack buffer
EP0853782B1 (en) Instruction decoder including emulation using indirect specifiers
EP0853786B1 (en) Out-of-order processing with operation bumping to reduce pipeline delay
EP0853787B1 (en) Scan chain for rapidly identifying first or second objects of selected types in a sequential list
McMahan et al. 6/spl times/86: the Cyrix solution to executing/spl times/86 binaries on a high performance microprocessor

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20100729

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee