KR100343530B1 - 씨아이에스씨-알아이에스씨명령어번역정렬및디코딩 - Google Patents

씨아이에스씨-알아이에스씨명령어번역정렬및디코딩 Download PDF

Info

Publication number
KR100343530B1
KR100343530B1 KR1019940703361A KR19940703361A KR100343530B1 KR 100343530 B1 KR100343530 B1 KR 100343530B1 KR 1019940703361 A KR1019940703361 A KR 1019940703361A KR 19940703361 A KR19940703361 A KR 19940703361A KR 100343530 B1 KR100343530 B1 KR 100343530B1
Authority
KR
South Korea
Prior art keywords
instruction
bytes
byte
latch
shifter
Prior art date
Application number
KR1019940703361A
Other languages
English (en)
Other versions
KR950701100A (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 트랜스메타 코포레이션
Priority to KR10-2001-7005744A priority Critical patent/KR100371929B1/ko
Publication of KR950701100A publication Critical patent/KR950701100A/ko
Application granted granted Critical
Publication of KR100343530B1 publication Critical patent/KR100343530B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/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/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • 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/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/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
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y10/00Nanotechnology for information processing, storage or transmission, e.g. quantum computing or single electron logic

Landscapes

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

Abstract

가변 수의 명령어 바이트로 각각 세분되게 되는 복합 명령어 스트림으로부터 복합 가변길이 컴퓨터 명령어를 추출하고, 복합 명령어 중 독립적인 명령어의 명령어 바이트를 정렬하기 위한 시스템 및 방법이 기재되어 있다. 이 시스템은 복합 명령어 스트림의 일부를 수신하고, 추출 시프터를 사용하여 제1 명령어 바이트로 시작하는 명령어 바이트의 제1 셋트를 추출한다. 다음에, 명령어 바이트 셋트는 정렬 래치로 전달되며, 여기서 정렬되어 차기 명령어 검출기로 출력된다. 차기 명령어 검출기는 상기 명령어 바이트 셋트에 근거하여 제1 명령어의 종료점을 결정한다. 추출 시프터는 명령이 바이트의 차기 셋트를 추출하여 정렬 시프터로 제공하기 위해 이용되며, 정렬 시프터는 차기 명령어를 정렬하여 출력한다. 복합 명령어 스트림내의 잔여 명령어 바이트에 대해 상기 과정이 반복된다. 격리된 복합 명령어는 RISC 프로세서 코어에 의해 처리되는 나노-명령어로 디코드된다.

Description

씨아이에스씨-알아이에스씨 명령어 번역 정렬 및 디코딩{CISC-RISC INSTRUCTION TRANSLATION ALIGNMENT AND DECODING}
관련출원에 대한 참조
다음은 함께 계류중인 출원들임:
1992년 6월 12일자로 출원된 발명의 명칭이 "A ROM With RAM and Cyclic Redundancy Check Circuit"인 미합중국 특허원 제07/802,816호(대리인 참조 번호 SP024), 1992년 8월 1일자 출원된 발명의 명칭이 "High Performance RISC Microprocessor Architecture"인 미합중국 특허원 제07/817,810호(대리인 참조번호 SPO15, 및 1992년 8월 1일자로 출원된 발명의 명칭이 'Extensible RISC Microprocessor Architecture"인 미합중국 특허원 제07/817,809호(대리인 참조번호 SP021).
상기 출원의 명세는 본원에 참조로서 포함되어 있다.
가변 길이 명령어를 사용하는 모든 복합 명령어 셋트 컴퓨터(CISC 컴퓨터)는 명령어 스트림에서 마주치게 되는 각 명령어의 길이를 결정하는 문제에 직면하게 된다. 명령어들은 연속된 바이트의 데이터로서 메모리에 패킹(packed)되며, 그래서 한 명령어의 어드레스가 주어지면, 제1 명령어의 길이를 알고 있는 경우에 다음 명령어의 개시 어드레스를 결정하는 것이 가능해진다.
종래의 프로세서에 있어서, 이와 같은 길이 결정 과정은 각 명령어의 실질적인 실행과 같이 한 명령어 스트림의 처리에서 다른 단계와 비교하여 뚜렷한 성능 영향을 주지 않는다. 결과적으로, 아주 간단한 회로가 통상적으로 이용된다는 것이다. 한편, 슈퍼스칼라 제한 명령어 셋트 컴퓨터(RISC 컴퓨터)는 훨씬 높은 속도로 명령어를 처리할 수 있는데, 다수의 명령어의 병렬 실행에 뒤떨어지지 않도록 하기 위해 명령어가 보다 빠르게 메모리로부터 추출될 필요가 있다, 명령어가 메모리부터 추출될 수 있는 속도에 의해 부과되는 이와 같은 제한 요소는 플라인 병목현상(Flynn Bottleneck)으로서 언급된다.
각 명령어의 길이를 결정하고 그 명령어를 명령어 스트림으로부터 추출하는 작업(task)은 명령어 정렬 유니트(Instruction Align Unit:IAU)로 불리는 기능 유니트에 의해 수행된다. 이 블록은 명령어 길이를 결정하기 위한 디코더 로직과 그 명령어 데이터를 디코더 로직과 정렬시키기 위한 시프터(shifter)를 포함해야 한다.
인텔 80386 마이크로프로세서에 있어서, 명령어의 제1 바이트는 전체 명령어 길이에 대해 많은 함축적 의미(implication)를 가질 수 있으며, 최종 길이를 알기전에 추가 바이트가 검사될 것을 필요로 할 수도 있다. 더욱이, 추가 바이트는 다른 추가 바이트를 지정할 수도 있다. 그러므로, 프로세스가 고유적으로 순차적이기 때문에 X86 명령어의 길이를 빠르게 결정하기가 매우 어렵다.
i846 프로그래머 참조 가이드에 제공된 정보를 기반으로 하여, i486에 존재하는 정렬 유니트에 관해 몇 가지 결론이 내려질 수 있다. i846의 IAU는 명령어의 처음 수 개의 바이트만을 조사하도록 설계된다. 이들 바이트가 길이를 완전히 지정(specify)하지 않는 경우에, 이들 초기 바이트는 추출되고 프로세스는 잔여 바이트에 대해 반복된다. 이와 같은 프로세스의 반복은 완전한 사이클을 필요로 하며, 따라서 최악의 경우에 명령어가 완전히 정렬되기 위해 수 개의 사이클이 걸릴 수도 있다.
i486 IAU에 대해 추가 사이클을 필요로 하는 상황은 프리픽스되고(prefixed) 에스케이프된(escaped)(2바이트) 오피코드(opcodes)의 존재를 포함한다. 이들은 모두 i486 프로그램에서는 공통적이다. 또한, 복합 명령어는 변위(displacement) 및 즉시(immediate) 데이터를 포함할 수 있다. i486은 이 데이터를 추출하기 위한 추가적인 시간을 필요로 한다.
도1에는 CISC 프로세서 명령어를 위한 포맷의 일례가 도시되어 있다. 이 예는 가변길이 i486 CISC 명령어의 가능한 바이트(potential bytes)를 묘사하고 있다. 명령어들은 바이트 경계에 맞춰 메모리에 저장된다. 한 명령어의 최소 길이는 1 바이트이고, 프리픽스를 포함하여 한 명령어의 최대 길이는 15 바이트이다. 명령어의 총 길이는 프리픽스 오피코드, ModR/M 및 SIB 바이트에 의해 결정된다.
본 발명의 분야는 일반적으로 슈퍼스칼라(superscalar) RISC 마이크로프로세서에 관한 것으로서, 특히 본 발명은 복합 명령어가 RISC- 반 하드웨어에서 실행될 수 있도록 허용하기 위한 CISC-RISC 마이크로프로세서 명령어 정렬(alignment) 유니트 및 디코드 유니트에 관한 것이다.
본 발명은 첨부도면을 참조하면 더욱 양호하게 이해될 것이다.
도1은 종래의 CISC 명령어의 데이터 구조 포맷을 도시하는 도면.
도2는 본 발명의 명령어 프리펫지 버퍼의 블록도.
도3은 본 발명의 명령어 정렬 유니트의 블록도.
도4는 본 발명의 IAU의 명령어 추출 및 정렬 절차의 흐름도.
도5는 도3의 블록도 및 도4의 흐름도와 관련된 간략화된 타이밍도.
도6은 본 발명의 STACK의 블륵도.
도7a는 본 발명의 차기 명령어 디코더(Next Instruction Decoder:NID)의 블록도.
도7b는 본 발명의 잔여 차기 명령어 디코더(Remaining Next Instruction Decoder:RNID)의 블록도.
도8은 본 발명의 즉시 데이터 및 변위 디코더(Immediate Data and Displacement Decoder:IDDD)의 블록도.
도9는 본발명의 프리픽스 디코더(Prefix Decoder:PD)의 블록도.
도10은 본 발명의 프리픽스 넘버(PRFX_NO) 디코더(PReFix Number decoder)의 블록도.
도11은 본 발명의 나노-명령어 버킷의 블록도.
도12는 본 발명의 명령어 디코드 유니트(IDU)의 블록도.
도13a 내지 도13c는 본 발명의 명령어 비트 맵을 도시한 도면.
도14는 본 발명의 IDDD의 명령어 디코더부의 한 예의 블록도.
도15는 도14에 도시된 명령어 디코더의 디코더 셋트의 블록 및 논리 회로도.
도16a 내지 도16c는 본 발명의 디코드 FIFO의 개념적인 블록도.
도17은 본 발명의 나노-명령어 필드 포맷의 예를 도시한 도면.
발명의 요약
본 발명은 Intel 80x86 마이크로프로세서나 또는 다른 CISC 프로세서와 같은 복합 명령어 셋트 컴퓨터(CISC)를 에뮬레이트하도록 설계된 슈퍼스칼라 제한 명령어 셋트 컴퓨터(RISC) 프로세서를 가진 마이크로프로세서의 서브시스템 및 방법에 관한 것이다.
본 발명의 CISC-RISC 번역 연산은 기본적으로 2단계를 포함한다. 먼저 CISC 명령어가 명령어 스트림으로부터 추출되어야 하고, 다음에 RISC 프로세서에 의해 처리될 수 있는 나노(nano)-명령어를 발생하기 위해 디코드되어야 한다. 이들 단계는 명령어 정렬 유니트(IAU) 및 명령어 디코드 유니트(IDU)에 의해 각각 수행된다.
IAU는 명령어 데이터에 대한 가장 오래된(oldest) 23 바이트를 조사함으로써 명령어 스트림으로부터 개개의 CISC 명령어를 추출하는 기능을 한다. IAU는 명령어 FIFO의 하부 라인(bottom line) 내의 한 바이트에서 시작하여 8개의 연속한 바이트를 추출한다.
각각의 클럭 위상 동안에, IAU는 현재 명령어의 길이를 결정하고, 스트림내의 그 다음 순차 명령어를 남겨두고 현재 명령어를 시프트하도록 2개의 시프터를 제어하기 위해 이 정보를 이용한다. 그러므로, IAU는 한 사이클 당 2개의 명령어의 피크 속도로 각 클럭 위상 동안에 정렬된 명령어를 출력한다. 이와 같은 최선의 경우의 성능에 대한 예외는 다음의 섹션 2.0 및 2.1에서 논의하게 된다.
CISC 명령어가 메모리로부터 추출된 이후에, IDU는 이들 정렬된 명령어를 나노-명령어로 불리는 등가의 RISC 명령어 시퀸스로 변환한다. IDU는 각각의 정렬된 명령어를 것이 IAU에 의해 출력될 때 조사하여, 여러 가지 요소, 예를 들면 요구되는 나노-명령어의 수 및 형태, 데이터 오퍼랜드(operand)의 크기 및 정렬된 명령어를 완료하기(complete) 위해 메모리 억세스가 요구되는가의 여부 등을 결정하기 위해 디코드 한다. 간단한 명령어들은 디코더 하드웨어에 의해 직접 나노-명령어로 번역되지만, 보다 복잡한 CISC 명령어들은 마이크로코드 루틴으로 불리는 특수 명령어 셋트 내의 서브루틴에 의해 에뮬레이트 되고, 그 다음에 나노-명령어로 디코드 된다. 이 정보는 완전한 사이클 동안에 2개의 명령어에 대해 수집되고, 다음에 소스 명령어에 대응하는 나노-명령어를 포함하는 명령어 버킷(bucket)을 형성하기 위해 함께 조합된다. 이 버킷은 다음에 RISC 프로세서에 의한 실행을 위해 명령어 실행 유니트(ieu)로 전달된다. 이러한 나노-명령어 버킷의 실행은 본 발명의 범위밖의 것이다.
본 발명의 상기 및 다른 특징 및 장점은 첨부 도면에 도시된 바와 같은 본 발명의 양호한 실시예에 대한 다음의 상세한 설명으로부터 명백해질 것이다.
목 록
양호한 실시예의 상세한 설명
1.0 명령어 펫치 유니트
2.0 명령어 정렬 유니트 개요
2.1 명령어 정렬 유니트 블록도
3.0 명령어 디코드 유니트 개요
3.1 마이크로코드 디스패치 로직
3.2 메일박스
3.3 나노-명령어 포맷
3.4 특수 명령어
3.5 명령어 디코드 유니트 블록도
4.0 디코드된 명령어 FIFO
양호한 실시예의 상세한 설명
이 섹션에서 논의되는 기본 개념중 일부에 대한 보다 상세한 설명은 다수의
참조문헌에서 볼 수 있는데, 그 예로서, 마이크 존슨의 "Superscalar Microprocessor Design"(Prentice-Hall, Inc., Englewood Cliffs, New Jersey, 1991); 존 엘. 헤니시 등의 "Computer Architecture - A Quantitative Approach"(Morgan Kaufmann Publishers, Inc., San Mateo, California, 1990) ; 및i486 Microprocessor programmer's Reference Manual and i486 Microprocessor Hardware Reference Manual(Order Nos. 240486 and 240552, Intel Corporation, Santa Clara, California, 1990) 등이 있다. 이들 공보의 명세는 본원에 참조로서포함되어 있다.
1.0 명령어 펫치 유니트
본 발명의 명령어 펫치 유니트(Instruction Fetch Unit:IFU)는 명령어 메모리 또는 명령어 캐쉬 등에 저장된 명령어 스트림으로부터 명령어 바이트를 펫치하여, 그 명령어 바이트를 실행을 위해 디코더부에 제공하기 위해 이용된다. 그러므로, 명령어 정렬 유니트에 의해 정렬될 명령어는 IFU에 의해 공급된다. 도2는 IFU 내의 3개의 명령어 프리펫치 버퍼(200), 즉, 주 명령어 버퍼(MBUF)(204)와, 에뮬레이션 명령어 버퍼(EBUF)(202) 및 목표(target) 명령어 버퍼(TBUF(206)의 블록도를 도시하고 있다. 프리펫치 명령어 버퍼는 한 사이클에서 명령어 캐쉬로부터 128 비트(16 바이트)의 명령어 스트림을 로드할 수 있다. 이 데이터는 IAU에 의한 이용을 위해 3개의 버퍼중 한 버퍼에 홀드된다.
정상적인 프로그램 실행 동안에, MBUF(202)는 IAU에 명령어 바이트를 공급하기 위해 이용된다. 조건부 제어 흐름(즉, 조건부 분기 명령)에 마주치면, 분기(branch) 목표 어드레스에 대응하는 명령어가 TBUF(206)에 저장되고, 실행은 MBUF(202)로부터 계속된다. 일단 분기 결정이 해결되면, TBUF(206)는 만일 분기가 이루어지지 않으면 폐기되고, 분기가 이루어지면 MBUF로 이동된다. 어느 경우에도 실행은 MUBF로부터 계속되게 된다.
EBUF(204)는 약간 다른 방식으로 동작한다. 에뮬레이션 모드에 들어가면, 에뮬레이션 명령어에 기인하든지 또는 예외(exception)에 기인하든지 간에, 명령어 펫칭 및 실행은 모두 EBUF(204)로 이동한다(에뮬레이션 모드 및 예외 처리에 대해서는 다음에 상세하게 후술된다). 프로세서가 에물레이션 모드에 있는 한, 실행은 EBUF(204)로부터 계속된다. 에뮬레이션 루틴이 종료되면, 실행은 MBUF(202)에 남아 있는 명령에 데이터로부터 계속된다. 이것은 에뮬레이션 루틴을 실행한 후 주 명령어 데이터를 재펫치할 필요성을 없애준다.
2.0 명령어 정렬 유니트 개요
본 발명과 조합하여 명령어 정렬 유니트 서브시스템은 슈퍼스칼라 프로세서의 월등한 사이클 당 명령어 처리량을 이용함으로써 일반적인 경우의 처리를 빠르게 만드는 RISC 전략을 이용한다.
본 발명과 관련하여, 용어 "정렬(align)"은 명령어의 바이트를 후속의 디코딩을 위해 명령어 스트림내의 인접 바이트와 구별될 수 있도록 위치시키는 것을 의미한다. IAU는 현재 명령어의 바이트 수를 판단함으로써 현재 명령어의 종료점을 차기 명령어의 개시점과 구별한다. 다음에, IAU는 IDU에 제공되는 최하위 바이트가 현재 명령어의 제1 바이트가 되도록 현재 명령어를 정렬한다. IDU에 제공되는 바와 같이 다른 바이트 순서도 역시 가능하다.
본 발명의 IAU 서브시스템은 모든 클럭 속도에서 한 사이클 당 2개의 속도로 대부분의 일반적인 명령어를 정렬할 수 있으며, 클럭 속도가 감소된 상태에서도 이와 동일한 속도로 대부분의 다른 명령어를 정렬시킬 수 있는 능력을 제공한다 프리픽스를 포함하는 명령어는 정렬을 위해 추가적인 반 사이클을 필요로 한다. 즉시 데이터 및 변위 필스는 병렬로 추출되며, 그러므로 여분의 시간을 필요로 하지 않는다.
부가적으로, IAU의 최악 경우의 정렬 시간은 한 명령에 대해 단지 2.0 사이클인데, 이것은 통상적인 CISC 프로세서에서 많은 일반적인 명령어를 정렬하는데 필요한 시간 보다 적다. 최악의 경우는, 명령어가 하나 또는 그 이상의 프리픽스를 갖고 있고(정렬에 총 반 사이클), 명령어가 길이 결정을 위해 하나의 완전한 사이클을 필요로 하는 셋트로부터 나오고, 명령어(프리픽스를 포함하지 않은)의 길이가 8 바이트보다 클 때(여분의 반 사이클을 필요로 함)(따라서 총 2개의 완전한 사이클을 필요로 함) 발생한다.
이와 같은 성능은 몇 가지 아키텍취 특징을 통해 실현된다. 먼저, IAU는 정렬 회로내에 교류 위상 래치 및 멀티플렉서를 이용함으로써 클럭의 각 위상 동안에 완전한 정렬 동작을 수행하도록 설계된다. 두 번째로, 디코드 로직은 각 명령어의 길이를 결정하기 위해 고려되어야 하는 비트의 수에 근거하여 CISC 명령어를 2개의 카테고리로 분할한다. 즉, 작은 비트수에 의해 지정되는 길이를 가진 명령어는 단일 위상(반 사이클)에서 정렬되고, 다른 명령어는 통상적으로 추가적인 클럭 위상을 필요로 한다. 마지막으로, IAU는 단일 시프트로 명령어 스트림으로부터 8바이트 까지 추출하여, 긴 명령어(i486에 대해 15 바이트까지)가 적은 수의 시프트 연산으로 정렬되도록 허용하고 대부분의 명령어가 단일 시프트로 정렬되도록 허용한다.
CISC 명령어를 빠르고 정확하게 디코드하기 위해 다음의 작업이 IAU에 의해 수행 된다.
프리픽스 바이트의 존재 및 길이 검출;
오피코드, ModR/M 및 SIB(scale, index, base) 바이트 분리;
명령어의 길이(차기 명령어의 위치를 나타냄) 검출; 및
다음 정보를 명령어 디코드 유니트(IDU)로 전송:
- 오피코드, 8 비트 + 3개의 선택적 확장 비트. 2 바이트 오피코드에 있어서, 제1 바이트는 항상 OF 헥스(hex)이고, 그러므로 제2 바이트가 오피코드로서 전송됨;
- ModR/M 바이트, SIB 바이트, 변위 및 즉시 데이터 ; 및
- 프리픽스의 수 및 형태에 관련된 정보.
오피코드 바이트는 그 명령어에 의해 수행되는 연산을 지정한다. Mod R/M 바이트는 그 명령어가 메모리내의 오퍼랜드를 참조하는 경우에 이용될 어드레스 형태를 지정한다. Mod R/M 바이트는 또한 어드레스 형태를 완전하게 지정하는데 필요로 될 수도 있는 제2 어드레스 지정 바이트인 SIB(scale, index, base) 바이트를 나타 낼 수 있다.
2.1 명령어 정렬 유니트 블록도
도3에는 IAU의 블록도가 도시되어 있다. 이 도면은 2가지 부분; 즉, 주 디스패치(main dispatch)(302)(점선 박스로 표시됨)와 프리디코더(predecoder)(304)(점선 박스로 표시됨)로 나누어진다. 명령어 시프팅 및 추출은 주 디스패치(302)에서 이루어지며, 길이 결정 및 디스패치 제어는 프리디코더(304)에 의해 처리된다.
주 디스패치(30B)는 수 개의 시프터, 래치 및 멀터플렉서를 포함한다. 추출 시프터(306)는 IFU로부터 바이트로 배열된 명령어 데이터를 수신한다. 2개의 버스(303으로 도시됨), IFIob_Bus[127:0] 및 IFIob_Bus[55:0]는 IFU의 명령어 데이터 출력을 나타낸다. IFU는 선행 버퍼 요구(ADVance BUFfer REQuest:ADVBUFREQ) 라인(308)상에서의 IAU로부터의 요구에 응답하여 상기 명령어 정보를 갱신한다. ADVBUFREQ 신호의 발생에 대해서는 후술되게 된다. 현재 명령어에 대응하는 8바이트의 데이터는 추출 시프터로부터 출력되어 버스(307)상에서 정렬 시프터(310)로 전송된다. 정렬 시프터는 총 16바이트의 명령어 데이터를 홀드하며, 한 위상(phase) 당 8 바이트까지 시프트 할 수 있다. 이 정렬 시프터는 그것을 시프트 함으로써 프리픽스가 검출되는 경우에 그 명령어로부터 프리픽스를 분리시키기 위해 이용된다. 정렬 시프터는 또한 명링어를 그 저차(lower order) 바이트에 정렬시키고, 그것이 정렬된 후 전체 명령어를 시프트하기 위해 이용된다.
상기 8바이트는 또한 버스(309)를 통해, 현재 명령어로부터 즉시 데이터를 추출하는 즉시 데이터 시프터(IMMediate Data SHIFTER:IMM SHIFTER)(312)로 전송되고, 또한 현재 명령어로부터 변위 데이터를 추출하는 변위 시프터(DISPlacement SHIFTER:DISP SHIFTER)(314)에도 전송된다. 이들 두 시프터로 가는 데이터는 정렬된 명령어와 동기를 유지하기 위해 1/2사이클 지연소자(316)에 의해 지연이 이루어진다.
정령 시프터(310)는 버스(311)상의 차기 정렬(next aligned) 명령어를 2개의 정렬(ALIGL-IR) 래치(318 또는 320)로 출력한다. 이들 래치는 시스템 클럭의 반대 위상들에 대해 동작하여, 한 사이클 당 2개의 명령어가 래치될 수 있도록 허용한다. 정렬 래치(318,320)는 2개의 출력 버스(321)상에 정렬된 명령어 바이트를 출력한다. 이들 래치중 하나가 새로운 값(value)을 수신하고 있는 위상 동안에, 다른래치의 출력(현재 정렬 명령어임)이 멀티플렉서(MUX)(322)에 의해 선택된다. MUX(322)는 정렬 명령어 버스(323) 상에 현재 정렬 명령어를 출력한다. 이 출력(323)은 IAU의 1차 출력이다. 이 출력은 현재 명령어의 길이를 결정하기 위해 프리디코더(304)에 의해 이용되며, 차기 명령어가 추출되는 데이터로서 정렬 시프터(310)로 피드백된다. 현재 정렬된 명령어는 버스(325), 스택(Stack) 및 다른 버스(336)를 통해 정렬 시프터(310)로 피드백된다. 상기 버스(336)는 또한 현재 정렬된 명령어 정보를 1/2사이클 데이터 지연소자(316)로 전송한다.
그러므로, IMM 시프터(312) 및 DISP 시프터(314)는 각각 즉시 데이터 및 변위 데이터를 시프트할 수 있는데, 그 이유는 이들이 시프트를 위해 총 16 바이트를 필요로 하기 때문이다. 1/2사이클 데이터 지연소자(316)는 버스 상에서 시프터로 명령어 바이트를 출력한다. IMM 시프터(312)는 즉시 데이터(IMMEDIATE DATA) 버스(340)상에서 현재 명령어에 대응하는 즉시 데이터를 출력한다. DISP 시프터(314)는 변위 데이터 버스(341)상에서 현재 명령어에 대응하는 변위 데이터를 출력한다.
프리디코더(304)는 3개의 디코더 블록, 즉, 차기 명령어 검출기(Next Instruction Detector:NID)(324), 즉시 데이터 및 변위 검출기(IDDD)(326) 및 프리픽스 검출기(Prefix Detector:PD)(328)를 포함한다. NID와 PD는 정렬 시프터 및 추출 시프터를 제어하며, IDDD는 IMM 시프터(312)와 DISP 시프터(314)를 제어한다.
PD(328)는 명령어내의 프리픽스 바이트의 존재를 검출하도록 설계되어 있다. 이것은 존재하는 프리픽스의 수를 판단하고, 그 다음의 반 사이클에서 명령어 스트림으로부터의 프리픽스의 추출을 위해, 라인(331), MUX(330) 및 라인(333)을 통해 정렬 시프터(310)와 카운터 시프터(308)로 시프트 제어 신호를 제공한다. 또한, PD(328)는 프리픽스 자체를 디코드하고, 이 프리픽스 정보를 출력 라인(329)상에서 IDU로 제공한다.
PD(328)의 기본 아키텍춰는 4개의 동일한 프리픽스 검출 유니트(4개까지의 프리픽스를 검출하기 위한 것임), 프리픽스 자체를 디코드하기 위한 제2 로직 블록으로 이루어진다. CISC 포멧은 프리픽스가 발생할 수 있는 순서를 정의하지만, 그러나 본 발명은 첫 번째 4개 바이트 위치 각각에서 모든 프리픽스의 존재에 대해 검사한다. 더욱이, 프리픽스의 존재를 검출하는 기능과 프리픽스를 디코팅하는 기능은 디코더에 대한 속도 요건이 감소되는 장점을 취하기 위해 분리된다. PD(328)의 아키텍춰에 대한 보다 상세한 설명은 다음에 후술되게 된다.
IDDD(326)는 각 명령어로부터 즉시 데이터 및 변위 데이터를 추출하도록 설계된다. IDDD(326)는 이들 두 필드가 존재하든지 또는 존재하지 않든지 간에 항상 두 필드 모두를 추출하기 위해 시도한다. 상기 IDDD(326)는 한 쌍의 라인(344,346)상에서 각각 IMM 시프터(312)와 DISP 시프터(314)를 제어한다. IDU는 정렬된 명령어를 처리하기 위해 반 사이클을 필요로 하는데, 그러나 즉시 데이터 및 변위 데이터에 대한 이용은 없다. 그러므로, 즉시 데이터 및 변위 데이터는 시프트의 양을 계산하기 위해 IDDD(326)에 더 많은 시간을 허용하도록 1/2사이클 데이터 지연소자(316)에 의해 지연되게 되며, 그 이유는 동일한 위상에서 디코드 및 시프트하는 NID(324)와는 달리, 후속 위상 동안에 시프트가 발생하기 때문이다.
NID(324)는 프리디코더의 핵심이다. 이 NID(324)는 프리픽스가 제거된 후 각 명령어의 길이를 결정한다. NID(324)는 제어 라인, MUX(330) 및 라인(333)을 통해 정렬 시프터(310)와 카운터 시프터(308)를 제어한다. 이 NID는 2개의 서브-블럭, 즉 서브셋트 차기 명령어 검출기(SNID)(702)와 잔여 차기 명령어 검출기 (RNID)(704)를 포함하는데, 이것에 대해서는 도7a도 및 도7b를 참조하여 논의되게 된다.
SNID(702)는 그 명칭이 의미하는 바와 같이, CISC 명령어 셋트의 서브셋트의 길이를 결정한다. 서브셋트내의 명령어는 SNID에 의해 한 사이클 당 2개의 속도로 정렬될 수 있다.
RIND(704)는 모든 잔여 명령어의 길이를 결정하고, 추가적인 반 사이클을 필요로 하며, 따라서 총 디코드 시간은 완전한 한 사이클이 된다. 명령어가 서브셋트 내에 있는지의 여부에 대한 판단은 SNID에 의해 이루어지며, 이 신호는 SNID 또는 RNID의 출력을 선택하기 위해 NID내에서 이용된다.
새로운 명령어가 정렬될 때, 이 명령어는 초기에 서브셋트내에 존재하고, 그러므로 SNID의 출력이 선택되는 것으로 가정한다. 만일 SNID가 RNID에 의해 명령어가 처리되어야 하는 것으로 판단하면(동일한 반 사이클 동안에), 신호가 표명되고(asserted), IAU는 그것을 다른 반 사이를 동안 홀드하도록 현재 명령어를 루프시킨다. 상기 제2의 반 사이클 동안에, RNID 출력이 선택되고 명령어는 적절하게 정렬된다.
이와 같은 NID의 아키텍춰는 몇 가지 장점을 갖고 있다. 이미 전술한 한가지장점은 사이클 시간이 충분히 긴 경우에 단일의 반 사이클 동안에 SNID와 RNID 사이의 선택이 이루어질 수 있으며, 단일 위상(8바이트 보다 긴 명령어 및 프리픽스를 추출하기 위한 시간은 포함하지 않음)에서 모든 명령어가 정렬될 수 있도록 한다는 것이다. 이것은 추가적인 하드웨어 없이 낮은 사이클 속도에서 사이클 당 성능의 증가를 제공한다.
두 번째 장점은 선택 신호가 정렬 취소 신호(alignment cancel signal)로서 사용될 수 있다는 것인데, 그 이유는 IAU로 하여금 SNID 시프트 출력을 무시하고 추가의 반 사이클 동안 현재 명령어를 홀드하도록 하기 때문이다. SNID는 소정의 명령어 조합 또는 길이를 예측(predict)하고 이들 예측이 틀리는 경우에 취소 신호를 발생하도록 설계될 수 있다. 이것은 단일의 반 사이클에서 복수의 명령어를 정렬시키는 데 이용될 수 있는데, 이것은 예를 들어, 성능을 더욱 증가시키게 된다.
LAU는 또한 카운터 시프터(332)를 포함한다. 카운터 시프터(332)는 라인(335)을 통해 추출 시프터(306)에 대한 시프트의 양을 결정하고, ADVBUFREQ 라인(308)을 이용하여 IFU로부터 추가적인 CISC 명령어 바이트를 요구하는데 이용된다. 상기 카운터 시프터(332)의 기능은 다음의 IAU의 연산 흐름도 및 타이밍도를 검토함으로써 잘 이해될 것이다.
도4는 본 발명의 IAU에 의해 수행되는 명령어 바이트 추출 및 정렬의 일반적인 흐름도이다. 새로운 데이터가 IFU의 MBUF(204)의 최저(lowest) 라인(205)(BUCKET_#0로 불림)에 들어오면, 추출 시프터(306)는 단계(402)에 도시된 바와 같이 제1 명령어로 시작하여 8바이트를 추출한다. 이들 8개의 명령어 바이트는 단계(404)에 도시된 바와 같이 정렬 시프터(310)를 바이패스하고, 정렬 래치(318,320)를 따라 통과된다. 다음에, IAU는 단계(406)에 도시된 바와 같이 정렬 래치에서 정렬된 명령어를 홀드하면서 차기 클럭 위상을 대기한다.
차기 클럭 위상 동안에, IAU는 정렬된 명령어를 IDU, 스택(334), IDDD(326), NID(324), PD(328) 및 1/2사이클의 데이터 지연소자(316)로 출력한다. 다음에, 즉시 데이터 및 변위 정보가 버스(340, 342)상에서 IDU로 각각 출력된다. 이 데이터는 이전의 위상 동안에 정렬된 명령어에 대응한다(그것이 존재했던 경우). 이들 연산은 도4의 단계(408)에 일반적으로 도시되어 있다.
다음에, 프리픽스가 존재하는지 판단하기 위해 IAU에 의해 조건부 명령문(Statement)(409)에 들어간다. 이러한 판단은 PD(프리픽스 디코더)(328)에 의해 이루어진다. 조건부 명령문(409)을 나오는 화살표 "예"로 표시된 바와 같이, 만일 PD에 의해 하나 또는 그 이상의 프리픽스가 검출되면, 프로세스는 단계(410)로 진행하여, 여기서 IAU는 MUX(330)로 PD의 출력을 선택한다. 다음에, 디코드된 프리픽스 정보는 단계(41B)에 도시된 바와 같이, 차기 위상 동안에 래치되어, 대응하는 정렬 명령어와 함께 IDU로 보내지게 된다. 조건부 명령문(409)으로부터 나오는 화살표 "아니오"로 표시된 바와 같이, 만일 검출된 프리픽스 명령어 바이트가 없으면, 단계(414)에 도시된 바와 같이, NID(324)의 출력이 MUX(330)를 이용하여 선택된다.
단계(412) 또는 단계(414)가 완료되면, 카운터 시프터(332)의 현재 출력은 블록(416)에 도시된 바와 같이, 다음의 8바이트의 명령어 데이터를 정렬시프터(310)와 1/2사이클 지연소자(316)에 제공하도록 추출 시프터(306)를 제어하기 위해 이용된다. 다음에, IAU는 SHIFT_A로 불리는 변수로서 MUX(330)의 출력을 이용하며, 이 변수는 차기 명령어를 정렬하도록 정렬 시프터(310)를 제어하기 위해 이용된다. SHIFT_A는 차기 위상 동안에 이용하기 위한 시프트의 양을 계산하기 위해 현재 추출 시프터의 시프트 량(BUF_COUNT로 불림)에 가산된다. 이 가산은 단계(418)에 도시된 바와 같이 카운터 시프터(308)에서 수행된다.
IAU에 의해 수행되는 다음 연산 단계는 단계(420)에 도시된 바와 같이, 정릴 래치에서 정렬 시프터의 출력을 래치하는 것이다. 다음에는, 단계(422)에 도시된 바와 같이, IDDD(326)에서의 즉시 데이터 및 변위 데이터의 위치가 계산되고, 이 시프트 량은 1/2사이클만큼 지연된다. 다음에 IAU는 단계(424)에 도시된 바와 같이, IMM 시프터(322) 및 DISP 시프터(314)로 현재 들어가는 데이터를 시프트하기 위해 이전의 반 사이클 동안에 계산된 시프트 량을 이용한다. 마지막으로, 프로세스는 차기 클럭 위상을 대기하기 위해 단계(406)에서의 시작 단계를 반복한다. 명령어 스트림내의 잔여 명령어 바이트에 대해 단계(408) 내지 단계(434)가 반복된다.
도5는 도3의 IAU와 관련된 타이밍도이다. 도5의 상부에는 2재의 명령어 버킷이 도시되어 있다. BUCKET #0와 BUCKET #1로 명명된 이들 명령어 버킷은 IFU에 의해(도시되지 않은 명령어 메모리부터) 도3의 IAU에 제공되는 16개의 명령어 바이트를 각각 포함한다. 명령어 정렬은 항상 버킷 #0(즉, 하부 버킷)으로부터 우측에서부터 행해진다. 본 예에서 버킷 #0과 버킷 #1은 IUF의 MBUF(204)의 하부 2개의 버킷이다. 다른 구성도 또한 가능하다.
상기 예에서, IAU로 보내지는 첫 번째 3개의 명령어는 각각 5바이트, 3바이트, 11바이트의 길이를 가진 OPO, OPI, OP2이다 명령어 OP2의 첫 번째 8바이트만이 버킷 #0에 합치된다는 것을 주목하자. 잔여 3바이트는 버킷 #1의 개시점에 포함된다. 상기 예를 간단하게 하기 위해, 이들 3개의 명령어는 프리픽스 바이트를 갖고 있지 않은 것으로 가정하자. 만일 프리픽스가 검출되는 경우에는 명령어의 정렬을 위한 추가적인 위상이 필요로 된다.
명령어는 버킷의 어떤 위치에서도 시작 될 수 있다. 명령어는 그 버킷내의 소정의 명령어에서 시작하여 하부 버킷(bottom bucket)으로부터 한번에 8바이트까지 추출된다. IAU는 본 예의 OP2와 같이 제2 버킷으로 확장되는 명령어를 수용하기 위해 2개의 버킷을 조사한다.
상기 타이명도에서 선(trace) "1"은 2개의 시스템 클럭 중 한 클럭 CLK0이다. 본 예에서, 상기 시스템 클럭은 6 나노초의 반 사이클을 갖는다. 다른 시스템 클럭 CLK1과 비교하여 반대 위상을 가진 CLK0는 76에서 상승하고 T0에서 하강하는데, T0는 CLK1의 상승 엣지이고 T6는 CLK0의 상승 엣지이다. 논의의 도움을 위해 도5의 3개의 주 클럭 위상은 "1", "2", "3"으로 명명되었다.
타이명도의 선 "2"와 "3"은 입력 버스 IFI1B 및 IFI08상의 명령어 데이터를 나타낸다. 502로 도시된 바와 같이, 1의 개시점에서 새로운 버킷 #0가 버스 IFI08 상에서 이용가능하게 된다. 짧은 시간 이후에, OPO에서 시작되는 첫 번째 8바이트(B#;7-0)가 504에서 추출 시프터(306)에 의해 추출된다. 버킷 #0의 바이트7-0은 유효한 것으로 도시되었다. 추출 시프터의 타이밍은 선 "4"에 도시되어 있다.
명령어 스트림의 CISC-RISC 디코팅이 시작되면, 카운터 시프터(332)는 버킷 #0으로부터 첫 번째 8바이트를 추출하도록 추출 시프터(306)를 제어한다. 카운터 시프터는 명령어의 정렬이 진행됨에 따라 버킷의 다른 바이트를 시프트 및 추출하도록 추출 시프터에 신호한다. 버킷 #0에 명령어 바이트가 고갈되면, 버킷 #1의 내용이 버킷 #0으로 시프트되고, 버킷 #1은 명령어 스트림으로부터 다시 채워진다. 8 바이트의 초기 추출 이후에, 추출 시프터는 명령어 길이, 프리픽스 길이 및 이전의 시프트 정본에 근거하여 라인(335)상에서 카운터 시프터의 제어하에 바이트를 추출 및 시프트 한다.
그러나, 본 예에서 카운터 시프터는 제1 명령어를 정렬시키기 위해 제로 시프트하도록 추출 시프터에 신호한다. 그러므로, 추출 시프터는 제1 명령어의 첫 번째 8바이트를 정렬 시프터(310)로의 시프트-이웃을 수행한다. 정렬 시프터에서의 신호의 타이밍은 상기 타이밍도의 선 "5"로 도시되어 있다. 이들 8바이트는 참조 번호 506으로 도시된 시간 주기에서 위상 "1" 동안에 정렬 시프터에서 유효하게 된다.
버킷 #0의 첫 번째 8바에트는 정렬 시프터를 바이폐스하고, 2개의 정렬(ALIGN-IR) 래치(318,320)에 저장된다(도5의 선 "6"과 "7"에 도시된 바와 같음). 정렬 래치는 클럭 신호 CLK0와 CLK1의 타이밍에 근거하여, 교대로 명령어 바이트를 수신한다. 정렬 래치(ALIGN_IR0)(318)는 클럭 신호 CLK0 래치이며, 이것은클럭 신호 CLK0이 하이인 동안에 래치된다는 것을 의미한다. 정렬 래치 (ALIGN_IR1)(320)는 클럭 신호 CLK1 래치이며, 이것은 클럭 신호 CLKl이 하이일 때 래치를 수행한다. 첫 번째 8바이트는 선 "1"의 끝을 향해서 참조번호 508로 도시된 바와 같이 제1 클럭 신호 CLK0 위상의 종료점 이전에 정렬 래치(ALIGN_IR0)에서 유효하게 된다.
MUX(332)는 이전의 위상 동안에 래치를 수행하고 있었던 래치를 선택한다. 그러므로, 본 예에서 MUX(322)는 제2 전 위상 "2" 동안에 OP0의 첫 번째 8바이트를 출력한다.
다음에, OP0의 첫 번째 8바이트는 NID(324)와 스택(STACK)(334)으로 진행한다. NID(324)는 제1 명령어가 5바이트 길이라는 것을 검출하고 이 정보를 다시 라인(325), MUX(330), 라인(333)을 통해 정렬 시프터와 카운터 시프터로 전송한다. 이와 동시에, 첫 번째 8바이트는 스택을 통해 진행되어, 전술한 바와 같이 정렬 시프터로 피드백된다. 그러므로, 정렬 시프터는 추출 시프터로부터 명령어 바이트를 수신하고, 그 자체는 간접적으로 수신하다. 그 이유는 정렬 시프터가 사이클 당 최대 8바이트를 시프트하기 위해 16바이트의 입력을 필요로 하기 때문이다. 정렬 시프터가 우측으로 X개의 바이트를 시프트할 때, 최하위 X개의 바이트는 버리고, 그 다음 8바이트의 데이터를 래치(318,320)로 전달한다. 이 경우에, 스택(334)은 바이트 0-7을 정렬 시프터(310)로 제공한다.
정렬 시프터 주위의 바이패스(366)는 추출 시프터가 명령어 스트림으로부터 제1 명령어를 추출하는 초기 경우에 사용된다. 정렬 시프터는 초기 경우에는 시프트할 필요가 없는데, 그 이유는 프리픽스 바이트를 배제하고 제1 명령어가 정렬되기 때문이다.
타이밍도의 위상 "2" 동안에, 추출 시프터는 버킷#0의 8바이트, 즉 바이트 15-8의 시프터-아웃을 수행한다. 이에 대해서는 도5의 510을 참조하자. 이들 바이트는 정렬 시프터로 보내지며, 따라서 함께 동작할 총 16개의 연속한 바이트를 가지고 있게 된다. 이 정렬 시프터는 위상 "2"동안에 래치(318,320)의 유효 출력과 추출 시프터의 출력을 조사한다.
위상 "2"의 종료점에 근접하여, 정렬 시프터는 NID로부터의 신호에 근거하여 버킷#0의 바이트 12-5를 그 출력으로 시프트하며, 이것은 정렬 시프터가 우측으로 5바이트를 시프트하는 것을 나타내며, 그에 따라 명령어 OP0에 대응하는 5개의 최하위 바이트를 버리게 된다. 타이밍도에서 선 "8"에서의 시프트 5바이트 신호(512)를 참조하자. 다음에, 잔여 명령어 데이터의 8바이트인 바이트 12-5가 정렬 시프터를 통해 흐르게 된다. 바이트 5는 다음 명령어 OP1의 첫 번째 바이트라는 것을 주목하자.
다음에, 카운터 시프터(332)는 추출 시프터(306)로 8바이트를 시프트 하게 되는데, 그 이유는 이제 정렬 래치로부터 첫 번째 8바이트가 이용 가능하게 되고, 따라서 다음 바이트가 필요로 되기 때문이다. 위상 "3"에서 시작하여, 카운터 시프터는 이전의 위상 동안에 정렬 시프터(310)에 의해 스프트-아웃이 수행된 바이트 수만큼 시프트의 양을 증가시키도록 추출 시프터에 신호한다. 그러므로, 카운터 시프터는 이전의 추출 시프터의 시프트량을 저장하고 그 값에 정렬 시프터의 시프트량을 가산하기 위한 로직을 포함해야 한다.
정렬 카운터에 대한 새로운 값이 있을 때마다, 카운터 시프터는 그 양을 그전의 시프트 량에 가산한다. 본 예에서는, 위상 "2" 동안에 8바이트를 시프트하였다. 그러므로, 위상 "3"에서는 추출 시프터로 하여금 8+5, 즉 13바이트를 시프트하도록 해야한다. 추출 시프터에 의해 출력되는 바이트는 바이트 20-13이다. 정렬 래치는 위상 "3" 동안에 바이트 12-5를 출력하게 되고, 그러므로 바이트 20-5가 정렬 시프터에서 이용 가능하게 된다는 것을 주목하자.
위상 "3" 동안에, 추출 시프터는 바이트 20-13을 출력하게 된다. 그러나, 버킷 #0는 단지 바이트 15-0만을 포함하고 있으며, 그러므로 버킷 #1로부터 바이트 20-16이 취해져야 한다. 타이밍도에 514로 도시된 바와 같이, 버킷 #1은 위상 "3"의 개시점에서 유효하게 된다. 다음에, 추출 시프터는 516에 도시된 바와 같이, 버킷 #1의 바이트 4-0과 버킷 #0의 바이트 15-13을 시프트한다. 만일 이때 버킷 #1이 유효하게 되지 않았으면, IAU는 그것이 유효하게 될 때까지 대기하게 된다.
전술한 바와 같이, 시프트 5바이트 신호는 위상 "2" 동안에 NID에 의해 발생되었다. 이 신호에 근거하여, 버킷#0의 바이트 12-5는 518에 도시된 바와 같이 정렬 시프터에 의해 시프트-아웃되고, 그 직후에 520에 도시된 바와 같이 정렬 래치(ALIGN_IR1)로 래치된다.
바이트 12-5는 위상 "3"의 개시점에서 MUX(322)에 의해 스택(334) 및 NID(324)로 보내진다. 스택은 366에 도시된 바와 같이, 다시 정렬 시프터로 바이트 12-5를 공급하고, NID는 참조번호 522에서 선 "9"에 도시된 바와 같이, 위상 "3"의후반부(later half) 동안에 OP1의 길이가 3바이트가 되는 것으로 판단하고 시프트 3바이트 신호를 출력한다. 정렬 시프터는 3바이트(15-8)를 시프트하고, 이 양은 카운터 시프터에 가산된다,
다음에는 전술한 프로세스가 반복된다. 한 명령어가 버킷#0을 지나 진행하면(즉, 버킷#0가 완전히 사용되면), 버킷#1이 버킷#0가 되게 되고, 새로운 버킷#1이 나중에 유효하게 된다.
타이밍도에서 선 "10"은 명령어 스트림으로부터 바이트를 추출하기 위한 타이밍을 도시한 것이다. BUF_COUNT_#0 블럭은 저장된 추출 시프트 량을 나타낸다. 각 위상 동안에, 정렬된 시프트 량은 BUF_COUNT_#0에 가산되고, 그 결과는 다음 위상 동안의 추출 시프트 량이 되게 된다(카운터 시프트로 명령된 블럭 참조).
타이밍도에서 선 "11"은 명령어 정렬 타이밍을 도시한 것이다. IR 래치 #0와 IR 래치 #1으로 명명된 블럭은 대응하는 정렬 래치내의 명령어가 유효하게 되는 동안의 시간을 나타낸다. MUX1으로 명명된 작은 블럭은 MUX(322)가 유효 정렬 래치를 선택하기 시작할 때의 시간을 나타낸다. MUX2로 명명된 작은 블럭은 MUX(330)가 NID(324)에 의해 결정되는 시프트 량을 선택하기 시작할 때의 시간을 나타낸다. 마지막으로, ALIGN_SHIFT로 명명된 블록은 정렬 시프터가 명령어를 출력하기 시작하는 때의 시간을 나타낸다.
프리픽스는 명령어가 정렬되는 기술과 동일한 기술을 이용하여 추출되게 되지만, 그러나 NID(324)의 출력이 아니라 PD(328)의 출력이 MUX(330)에 의해 선택된다.
도6에는 스택(STACK)(334)일부의 블럭도가 도시되어 있다. 스택은 병렬로 배열된 64개의 1-비트 스택을 포함한다. 각각의 1-비트 스택(600)은 2개의 래치(602,604)와 3-입력 멀티플렉서(MUX)(606)를 포함하고 있다. 정렬된 명령어는 IN으로 명령된 버스(607)상에서 이들 래치와 MUX(606)로 입력된다. 이들 2개의 래치의 로딩은 한 클럭 위상에서 독자적으로 수행될 수 있다. 또한, MUX(606)는 한 래치의 출력을 선택하거나 또는 IN 데이터를 OUT으로 명명된 출력(610)으로 직접 바이패스시키기 위해 3개의 MUX 제어 라인(608)을 갖고 있다.
IAU는 주기적으로 다른 명령어 스트림으로 이동할 수도 있다. 스택은 IAU로 하여금 MUX(322)로부터 8바이트 명령어 데이터의 2개 셋트를 저장하도록 허용한다. 이 특성은 일반적으로 CISC 명령어 에뮬레이션 동안에 이용된다. IAU가 복합 CISC 명령어의 에뮬레이션을 위한 마이크로코드 루틴을 처리하기 위해 분기해야 하는 경우에, 일반 CISC 명령어의 에뮬레이션이 완료되면 IAU의 상태는 저장되어 재개시될 수 있다.
1/2사이클 데이터 지연소자(316)는 즉시 데이터 및 변위 정보를 지연시키기 위해 이용된다. 시프터 앞에 IAU에 지연소자를 배치하는 것은 동일한 반 사이클에서 명령어 길이 및 시프트의 결정하는 것이 아니라 다음의 위상 동안에 시프트하기 위해 즉시 데이터 및 변위 로직을 파이프라이닝하기 위한 것이다. 이들 연산은 그 사이클을 넘어 연장될 수 있으며, 그러므로 타이밍 요건을 보다 쉽게 그 로직에 적합하도록 만든다. IDDD 블럭(326)은 명령어로부터 즉시 데이터 및 변위 데이터를 추출하도록 IMM 시프터(312)와 DISP 시프터(314)를 제어한다. 예를 들어, 만일 명령어의 첫 번째 3바이트가 오피코드(opcode)이고 그 다음에 4바이트의 변위 데이터와 4바이트의 즉시 데이터가 뒤따르는 경우에, 시프터는 적절한 바이트를 시프트-아웃하도록 인에이블되게 된다.
시프터(312,314)는 33비트 출력의 저차 비트(low order bits)에 적절하게 정렬되는 즉시 데이터 및 변위 데이터와 함께, 실제 데이터 크기가 8비트, 16비트, 또는 32비트이든지 간에 항상 32비트를 출력한다. IDU는 즉시 및 변위 데이터가 유효한지를 판단하고, 만일 그렇다면 얼마나 많은 데이터가 유효한지를 판단한다.
프리픽스, 즉시 데이터, 변위 데이터의 길이 및 명령어의 실제 길이의 판단은 정렬되어 디코드되는 실제 CISC 명령어의 함수이다. 이 정보는 CISC 명령어 셋트 자제, 제조자의 사용자 매뉴얼 또는 다른 일반적인 참고자료를 연구함으로써 이 기술에 숙련된 사람에 의해 얻어 질 수 있다. 이 기술에 숙련된 사람은 이것을 어떻게 수행할 것인지, 또한 전술한 IAU 서브시스템과 후술되는 IDU 서브시스템을 구현하기 위해 이 정보가 어떻게 랜덤 로직으로 변환되는지, 또한 데이터 흐름을 제어하기 위해 사용되는 제어 로직 및 신호를 어떻게 발생할 것인지를 쉽게 인식할 것이다.
더욱이, 일단 이러한 랜덤 로직이 생성되면, 상업적으로 이용가능한 엔지니어링 소프트웨어 애플리케이션(예, 캘리포니아, 산호세 소재의 Cadence Design Systens, Inc에 의해 제조된 Verilog)이 그 로직을 검증하기 위해 이용될 수 있으며, 제어 신호 및 관련 랜덤 로직의 타이밍 및 발생을 정의하는데 도움을 줄 수 있다. 기능 블럭 및 제어 로직의 구현을 최적화하도록 게이트 및 셀 레이아웃을 생성하기 위해 다른 상업적으로 이용가능한 엔지니어링 소프트웨어 애플리케이션도 이용 가능하다.
i486 명령어 셋트는 한 명령어에서 함께 이용될 때 정의된 순서를 가진 11개의 프리픽스를 지원한다. 포맷은 4개의 프리픽스까지 단일 명령어를 포함될 수 있는 것으로 정의한다. 따라서, 본 발명의 프리픽스 디코더(328)는 4개의 동일한 프리픽스 검출 회로를 포함한다. 각각의 회로는 11개의 프리픽스 코드 중 소정의 코드를 탐색한다. 프리픽스 검출기로 전달된 첫 번째 4바이트가 평가되고(evaluated), 4개의 프리픽스 검출 회로의 출력은 존재하는 프리픽스의 총 수를 결정하기 위해 조합된다. 그 결과는 MUX(330)를 통해 전달되는 시프트 량으로서 이용된다.
도7에는 NID의 블럭도가 도시되어 있다. NID에 대한 다음의 논의는 i486 명령어의 정렬에 특정하여 이루어진다. 다른 CISC 명령어의 정렬은 다른 NID 아키텍춰를 사용하게 된다. 그러므로 후술되는 기술은 이 기술에 숙련된 사람에게 가이드로서 작용하며, 본 발명의 범위를 제한하는 것으로 고려되지 않아야 한다.
명령어의 길이를 결정하기 위해서는 오직 4바이트만이 요구된다(전술한 바와 같이, 4바이트는 2개의 오피코드 바이트, 선택적 NodR/M 바이트 및 SIB 바이트를 포함한다).
도7a는 MUD(322)로부터 수신되는 명령어의 첫 번째 4바이트를 나타내는 4바이트(32비트) 버스(701)를 도시하고 있다. 첫 번째 2바이트는 버스(703)상에서 SNID(702)로 보내진다. 이 SNID는 첫 번째 2바이트에 근거하여 정의에 의해 식별가능한 명령어의 제1 서브셋트의 길이를 판단한다. SNID는 반 사이클에서 명령어의 서브셋트의 길이를 판단할 수 있다. 이 서브셋트 명령어의 길이는 버스(705)상에서 SNID에 의해 출력된다. 이 버스의 폭은 SNID에 의해 검출되는 명령어 바이트의 최대수와 대응할 수 있다.
SNID는 또한 ModR/M 바이트가 명령어에 존재하는지를 표시하기 위해 1비트 MOD 검출(MOD_DET) 출력 라인(707)을 갖고 있다, 또한, SNID는 서브셋트내에 명령어가 존재하지 않는다는 것을 제어 로직에 신호하기 위해 1비트 NID 대기 라인(NID_WAIT)(709)을 갖고 있다(RNID 출력을 대신 이용함). 그리므로, IAU는 NID_WAIT가 참(true)인 경우에 RNID가 명령어를 디코드하도록 반 사이클을 대기해야 한다.
SNID에 의해 디코드된 명령어의 서브셋트는 256개의 명령어의 16x16 karnaugh 맵에 근거하여 최대 5게이트 지연을 가진 최소 1,2,3 입력 게이트(NAND, NOR, 인버터)를 이용하여 반 사이클에서 더코드될 수 있는 그런 CISC 명령어이다. 이런 방식으로 대부분 1바이트 오피코드 명령어를 포함하는 맵의 블럭이 구현될 수 있다. 잔여 명령어는 더 긴 게이트 지연을 가진 로직 어레이를 이용하여 RNID에 의해 디코드된다.
RNID(704)는 버스(701)상에서 첫 번째 4바이트를 수신한다. 이 RNID는 디코드를 위해 한 위상 이상을 필요로 하는 잔여 명령어에 대한 길이 판단 디코딩을 수행한다. RNID는 SNID의 출력과 비슷한 출력을 갖고 있다.
RNID는 명령어 길이를 검출하고 그 결과를 버스(711)상으로 출력한다. 1-비트 OVER8 출력(712)은 명령어의 길이가 8바이트 이상이라는 것을 나타낸다. RNID는 또한 명령어가 ModR/M 바이트를 포함하고 있는지를 나타내는 1-비트 MOD_DET 출력(714)을 갖고 있다.
SNID나 또는 RNID에 의해 디코드된 길이는 MUD(706)에 의해 선택된다. 현재 명링어에 대한 선택 디코더(SELDECIR)로 불리는 MUX(705)에 대한 제어 라인(708)은 1 내지 11 바이트가 되는 실제 길이를 얻기 위해 2개의 디코더 사이에서 MUX(706)를 스위치한다, 예를 들어, 11바이트 길이의 명령어는 RNID로 하여금 OVER8 신호를 출력하도록 하고, 또한 버스(711)상에서 3을 출력하도록 한다. 명령어 길이(In)은 버스(716)상에서 MUX(330)로 보내지고, 정렬 시프터(310)와 카운터 시프터(332)에 의해 이용된다. 상부 MUX(706)에 의해 출력된 8비트는 정릴 시프터 및 카운터 시프터에 대한 시프트 제어 신호(또는 인에이블 신호)로서 사용된다.
ModR/M 바이트도 역시 비슷한 방식으로 선택된다. SELDECIR 신호(708)는 ModR/M 바이트가 존재하는지를 표시하기 위해 적절한 MOD 라인을 선택하도록 제2 MUX(710)를 제어한다. MOD 라인 출력(718)은 IDDD에 의해 이용된다.
SELDECIR 신호(708)는 NID_WAIT 신호(709)에 근거하여 발생된다. SNID의 출력은 제1 클럭 위상동안에 선택되는데, 그 이유는 그 결과가 완전하게 되기 때문이다. 만일 NID_WAIT 신호(709)가 명령어가 디코드되지 않았다는 것을 표시하면, MUX(706,710)는 다음 클럭 위상의 개시점에서 이용 가능하게 되는 RNID의 출력(711)을 선택하도록 스위치된다.
RNID(704)는 기본적으로 2개의 병렬 디코더를 포함하고 있는데, 한 디코더는1바이트 오피코드가 있는 것처럼 명령어를 디코드하고, 다른 디코더는 2바이트 오피코드가 있는 것처럼 명령어를 디코드한다. 에스케이프 검출(ESC_DET) 입력 신호는 오피코드의 길이가 1바이트인지 또는 2바이트인지를 나타낸다. 예를 들어, i486 명령어 셋트에서, 모두 2바이트 오피코드에서 제1 바이트(ESCAPE 바이트로 불림)는 명령어가 2바이트 오피코드를 갖고 있다는 것을 나타내는 값 OF 헥스(hex)를 갖는다. RNID는 ESC_DET 신호에 근거하여 유효 명령어 길이를 출력한다. 이 신호는 제1 오피코드 바이트가 2바이트 오피크드라는 것을 나타내는 ESCAPE(OF hex)라는 것을 표시하고, 따라서 제3 바이트 디코더를 인에이블시킨다. ESX_DET 신호를 발생하기 위한 디코팅 로직은 이 기술에 숙련된 사람에게 명백할 것이다.
도7b에는 RNID의 블럭도가 도시되어 있다. 이 RNID는 제1 오피코드 바이트를 디코드하는 RNID_10P 디코더(2)와, 제2 오피코드 바이트를 디코드하는 RNID_20P 디코더(754)와, 존재하는 오피코드 바이트의 수에 의해 결정되는 2개 위치 중 하나의 ModR/M 바이트를 디코드하는 2개의 동일한 RNID_MOD 디크더(756,758) 및 RNID_SUM 합산기(760)를 포함하고 있다. 4개의 RNID 디코더(752-758)의 출력을 기반으로 하여, RNID_SUM 합산기(760)는 버스(762)상에서 명령어의 총 길이를 출력한다. RNID_SUM 합산기(760)는 또한 명령어의 길이가 8바이트 이상인지 여부를 나타내기 취해 OVER8로 명명된 추가의 출력 라인(754)을 갖고 있다.
명령어의 제1 오피코드 바이트와 ModR/M 바이트의 3비트(확장 비트로 불리는 비트[5:3])는 버스(766)상에서 RNID_10P(752)로 입력된다. DATA_SZ로 불리는 RNID_10P로의 다른 입력 라인(786))은 명령어의 오퍼랜드 크기가 16비트인지 또는32비트인지를 나타낸다. 디폴트 데이터 크기를 무시하고 프리픽스가 존재하는지 여부와 사용된 메모리 보호 방식에 근거하여 데이터 크기가 결정된다. RNID_10P는 명령어가 1바이트 오피코드를 갖고 있는 것으로 추정하고, 그 정보와 3개의 확장 비트에 근거하여 RNID_10P는 명령어 길이를 판단하기 위한 시도를 한다.
RNID_MOD 디코더(754)는 버스(770)상에서 입력되는 명령어의 ModR/M 바이트를 디코드한다. RNID_MOD 더코더는 어드레스 크기가 16비트인지 또는 32비트인지를 나타내는 ADD_SZ로 명명된 추가의 입력 버스(772)를 갖고 있다. 어드레스 크기는 데이터 크기와 무관하다.
ESC_DET 신호(774)는 또한 블록 (760)에도 입력된다. ESC_DET 신호가 예를 들어 논리 "하이"이면, RNID_SUM 블럭은 오피코드가 실제적으로 제2 바이트에 있다는 것을 알게된다.
RNID_20P 디코더(754)는 오피코드가 2바이트라는 것을 추정하며, 그러므로 오피코드의 제2 바이트를 디코드한다(버스 776 참조), RNID_20P 디코더는 또한 데이터 크기를 식별하는 입력(768)을 갖고 있다.
디코터는 자체적으로 오피코드의 길이, 즉 1바이트이지 2바이트인지를 알지 못하고, ModR/M 바이트가 항상 오피코드를 뒤따르기 때문에, 제2 RNID_MOD 디코더(758)는 그것이 존재한다는 것을 가정하여 2바이트 오피코드 다음에 오는 바이트를 디코드하기 위해 이용된다(버스 778 참조), 2개의 RNID_MOD 디코더는 동일 하지만, 명령어 스트림내의 서로 다른 바이트를 디코드한다.
다시, ESC_DET 신호(774)에 근거하여, RNID_SUM(760)는 적절한 오피코드 및ModR/R 바이트 디코더의 출력을 선택하고, 버스(762)상에서 명령어의 길이를 출력 한다. OVER8로 명명된 출력(764)은 명령어가 8바이트 이상인지 여부를 나타낸다. 만일 명령어의 길이가 8바이트가 이상이라면, IR_NO[7:0] 버스(762)는 8이상의 명령어 바이트 수를 표시한다.
RNID_10P 디코더(752)는 9비트 넓이의 출력 버스(780)를 갖고 있다. 한 라인은 명령어가 1바이트 길이인지를 표시한다. 제2 라인은 명령어가 1바이트 길이이고 ModR/M 바이트가 존재하며, 그러므로 ModR/M 디코더로부터의 정보가 명령어의 길이 판단과정에 포함되어야 한다는 것을 표시한다. 이와 유사하게, 버스(780)의 잔여 출력 라인은 그 다음의 바이트수: 2, 2/MOD, 3, 3/D, 4, 5, 및 5/D를 표시한다. 만일 명령어가 4-바이트 길이라면, ModR/M 바이트가 존재할 수 없는데, 이것은 i486 명령어 셋트에서 고유적인 것이다. 그러나, 본 발명은 어떤 특정 CISC 명령어 셋트에 제한된 방식으로 이루어지지 않는다. 이 기술에 숙련된 사람은 본 발명의 특징을 어떤 CISC 명령어 셋트도 정렬 및 디코드하기 위해 적용할 수 있을 것이다.
RNID_20P 디코더(754)는 6비트 넓이의 출력 버스(782)를 갖고 있다. 한 라인은 명령어가 1바이트 길이인지를 표시한다. 제2 라인은 명령어가 1바이트 길이이고 명령어의 길이 판단과정에 포함되어야 하는 ModR/M 바이트를 포함하고 있다는 것을 표시한다. 이와 유사하게, 버스(782)의 잔여 출력 라인은 2, 2/MOD, 3, 및 5/MOD가 존재한다는 것을 표시한다. 오피코드가 2바이트를 길이인 경우에 i486 명령어 셋트에 의해 지원되는 다른 가능한 명령어 길이는 없다.
2개의 RNID_MOD 디코더(756,758)의 출력(784,786)은 ModR/M 바이트에 의해지정될 수 있는 5개의 가능한 추가적인 길이를 RNID_SUM(760)에 표시한다. 각각의 RNID_MOD 디코더는 5비트 넓이의 출력 버스를 갖고 있다. 5개의 추가적인 가능한 길이는 1,2,3,5,6 바이트이다. ModR/M 바이트 자체는 총 길이 판단과정에 포함된다. 잔여 바이트는 즉시 데이터 또는 변위 데이터를 포함한다.
도8은 IDDD(326)의 블럭도를 도시하고 있다. 이 IDDD는 IMM 시프터(312) 및 DISP 시프터(314)에 대한 시프트 량을 결정한다. 이 시프트 량은 명령어의 ModR/M 바이트에 의해 결정된다.
i486 명령어 셋트는 2개의 특수 명령어, 즉 enter_detect 및 jump_call_detect 명령어를 포함한다. 그러므로, IDDD는 이들 명령어의 디코딩을 처리하기 위해 즉시 특수 검출기(Immediate Special Detector:ISD) 불리는 블록(802)을 갖고 있다. ISD로의 입력(803)은 명령어의 제1 바이트이다. 2개의 출력 라인 EN_DET와 JMP_CL_DET(820,822)은 대응하는 명령어 중 하나가 검출되었는지 여부를 표시한다.
MOD_DEC 디코더(804,806)는 동일한 것이며, 즉시 데이터 및 변위 데이터를 디코드한다. ADD_SZ(772)에 근거하여, 디코더(804)는 1바이트 오피코드로 추정하여 ModR/M 바이트를 조사하고, 디코더(806)는 2바이트로 추정하여 ModR/M 바이트를 조사한다. MOD_DEC(804,806)으로의 명령어 바이트 입력은 각각 라인 805와 807이다. 이들 리코더는 명령어 스트림내의 변위 위치와 즉시 데이터 위치를 판단한다. 2개의 7_라인 출력(824,826)은 변위 및 즉시 데이터가 시작되는 위치를 표시하며, 변위는 위치2나 위치3에서 시작될 수 있으며, 즉시 데이터는 위치2, 위치3, 위치4,위치6, 또는 위치7에서 시작될 수 있다.
MOD_DET 라인(707,714)도 또한 선택(SELECT) 블럭(812)으로의 입력 라인이다. 선택 블록은(812)은EN_DET 및 JUM_CL_DET 신호, MOD_DET 및 MOD_DEC 결과, 및 ADD_SZ를 조합하여, 그 결과를 4개의 버스(832-838)상에 출력한다. 변위1(DISP_1) 버스(832)는 1바이트 오피코드로 추정하여 변위 시프트 결과를 출력한다. 변위2(DISP_2) 버스(834)는 2 바이트 오피코드로 추정하여 변위 시프트 결과를 출력한다. 즉시 1 및 2(IMM_1, 1MM_2) 버스(836, 838)는 각각 1 바이트 오피코드 및 2바이트 오피코드로 추정하여 즉시 데이터 시프트 정보를 출력한다.
MOD_SEL/DLY로 명명된 마지막 블럭(814)은 실질적으로 적절한 시프트 량을 선택하고 이들 결과를 반 사이클 지연시킨다. MOD_SEL/DLY(816)에 의해 수행되는 반 사이클 지연은 도3에 도시된 지연(316)을 나타낸다. 전술한 ESC_DET 신호(774)는 시프트 선택을 수행하기 위해 MOD_SEL/DLY 블럭에 의해 이용된다. 그 결과는 반 사이클 지연 이후에 클럭 신호 CLK0와 CLK1에 의해 MOD_SEL/DLY(814)로부터 클럭킹 된다.
즉시 데이터 시프트 제어 신호와 변위 시프트 제어 신호는 각각 SHIFT_D[3:0] 버스(840)와 SHIFT_I[7:0] 버스(842)를 통해 DISP 시프터와 IMM 시프터로 보내진다. 즉시 및 변위 데이터의 CISC 명령어 내의 가능한 위치의 수는 시프트의 양을 지정하는데 필요한 비트 수를 정의한다.
도9에는 프리픽스 검출기(328)의 블럭도가 도시되어 있다. 이 프리픽스 검출기(328)는 프리픽스 수 디코더(PRFX_NO)(902), 4개의 프리픽스 검출기디코더(PRFX_DEC)(904-910), 및 프리픽스 디코더(PRFX_SEL)(912)를 포함하고 있다.
i486 명령어 셋트는 예를 들어, 11개의 가능한 프리픽스를 포함한다. 한 명령어 당 총 4개의 프리픽스가 포함될 수 있는데, 그 이유는 수 개의 무효 프리픽스 조합이 존재하기 때문이다. 4개의 프리픽스의 순서도 역시 명령어 셋트에 의해 정의된다. 그러나, 프리픽스 검출기는 진정한(legitimate) 프리픽스 순열만을 검출하기보다는 오히려, 명령어 중 첫 번째 4바이트 각각을 디코드하기 위해 4개의 프리픽스 검출기(904-910)를 이용한다. 명령어 중 첫 번째 4바이트는 버스(901)상에서 프리픽스 검출기로 입력된다. 각각의 검출기(904-910)는 12비트 넓이의 출력 버스(905,907,909,911)를 각각 갖고 있다. 12개의 출력은 적어도 어느 것이 실제적으로 디코드되면 어떤 프리픽스가 존재하는지를 표시한다. 12번째 프리픽스는 UNLOCK로 불리며, 이것은 i486 LOCK 프리픽스의 기능적 보수(functional complement)이며, 에뮬레이션 모드 동안에 루틴을 마이크로코딩하는데에만 이용가능하다.
프리픽스 디코더를 인에이블/디스에이블하기 위해 정렬 실행(ALIGN_RUN) 제어 신호(920)가 포함될 수도 있으며, 이 신호는 프리픽스 모두를 마스크-아웃(mask-0ut )하기 위해 이용될 수 있다. 프리픽스 정보를 래치 및 홀드하기 위해 홀드 프리픽스(HOLD_PRFX) 제어 신호(922)가 이용된다. 일반적으로, 프리픽스 검출기(328)가 존재하는 프리픽스가 있다는 것을 표시하는 경우에 명령어의 정렬을 위해서는, 제어 로직이 프리픽스 정보를 래치해야 한다. 다음에, 이 프리픽스 정보는 프리픽스의 시프트-아웃을 위해 정렬 시프트(310)에 의해 이용된다. 그다음 사이클에서, IAU는 명령어의 길이를 판단하고, 그것을 정렬하고, 그 결과를 IDU로 전달한다.
PRFX_NO 디코더(902)는 오피코드의 첫 번째 4바이트를 디코딩함으로써 얼마나 많은 프리픽스가 어디에 존재하는가를 표시한다. 도10에는 PRFX_NO 디코더(902)의 논리 회로도가 도시되어 있다. PRFX_NO 디코더는 4개의 동일한 디코더(1002-1008)와 일련의 논리 게이트(1010)를 포함하고 있다. 4개의 디코더(1002-1008)는 첫 번째 4바이트(1010-1013) 중 하나를 조사하고, 프리픽스가 존재하는지를 판단한다. 오피코드 바이트 다음에 프리픽스 바이트가 뒤따르는 것이 가능하기 때문에, 제1 오피코드 바이트 이전에 프리픽스의 총수를 나타내는 결과를 출력하기 위해 논리 게이트(1010)가 이용되며, 그 이유는 오피코드 다음에 오는 프리픽스는 다음 명령어의 오피코드에만 적용되기 때문이다.
프리픽스의 총수는 제1 바이트(위치)가 프리픽스이고 제2 위치에는 프리픽스가 없는 경우에는 1이다. 다른 예로서, 만일 첫 번째 3개 위치에 프리픽스가 없다면, 제4 위치에서의 프리픽스는 문제가 되지 않는다. 하부 NAND(1014) 게이트로부터 출력된 논리 하이(HIGH)(1)는 4개의 프리픽스가 있다는 것을 표시하며, 두 번째로 마지막 NAND 게이트(1015)로부터 출력된 논리 HIGH는 3개의 프리픽스가 있다는 것을 나타내며, 이러한 방식으로 계속된다. 4개의 NAND 게이트 출력은 제1 오피코드 바이트에 선행하는 유효 프리픽스의 총수, 즉 프리픽스 검출기(3f2)의 시프트량 출력을 표시하기 위해 PREFIX_NO 버스(1018)를 형성하도록 조합된다.
PRFX_NO 디코더(902)는 또한 프리픽스 존재(PRFX_P) 출력 버스(1020)(4비트넓이임)를 포함하고 있다. 4개의 PRFX_P 출력 라인(1020-1023)은 다른 위치의 출력과 관계없이 주어진 위치에서의 프리픽스의 존재 여부를 표시한다. PRFX-P 출력은 4개의 디코더(1002-1008) 출력에 직접 이어진다.
PRFX-NO 디코더 결과(도10과 관련하여 논의됨)와 PRFX_DEC 검출기(904-910)로부터의 정보는 PRFX-SEL 디코더(912)에 의해 조합된다. 프리픽스 정보는 프리픽스 신호가 존재하는지의 여부와 어느 프리픽스가 존재하는지를 표시하는 하나의 13-비트 출력 버스(924)를 형성하기 위해 조합된다.
3.0 명령어 디코드 유니트 개요
모든 명령어는 IAU로부터 명령어 디코드 유니트(IDU)로 전달되며, RISC 명령어로 직접 번역된다. IEU에 의해 실행될 모든 명령어는 먼저 IDU에 의해 처리된다. IDU는 각각의 명령어가 에뮬레이트된 명령어인지 또는 기본(basic) 멍령어인지를 판단한다. 만일 에뮬에이트된 것이면, 전부 기본 명령어로 이루어진 마이크로코드 에뮬레이션 루틴이 처리된다. 만일 명령어가 기본적인 것이면, 하드웨어에 의해 1대4 나노-명령어로 직접 번역되어 IEU로 전송된다. 이것은 원래의 CISC 또는 마이크로코드 명령어가 아니라, IEU가 실제적으로 실행하는 나노-명령어이다.
명령어의 분할(partitioning)은 두 가지 중요한 장점을 갖는데, 단순한 연산만의 지원을 필요로 하기 때문에 하드웨어가 소규모로 유지된다는 것과, 쉽게 변경 될 수 있는 복합적인 마이크로코드 루틴에서 발생할 가능성이 더 많기 때문에 버그(bug)가 덜 문제가 된다는 것이다.
본 발명과 관련하여 IDU의 마이크로코드 루틴 지원 하드웨어는 그것을 고유하게 만드는 몇 가지 특징을 갖고 있다. 통상적으로, 마이크로코드 명령어는 프로세서에 존재하는 여러 가지 데이터 경로에 대한 제어 비트로 이루어지며, 인코팅은 거의 없다. 이와 대조적으로, 본 발명의 마이크로코드는 특수 복합 명령어 셋트를 에뮬레이트하도록 설계된 비교적 고급(high level)의 기계어이다. 통상적인 마이크로코드는 프로세서의 기능 유니트로 직접 라우팅되는 반면에, 본 발명의 마이크로코드는 목표 CISC(예, 80×86) 명령어에 대해 사용되는 것과 동일한 디코더 로직에 의해 처리된다. 이것은 통상적인 마이크로코드에 의해 실현되는 것보다 훨씬 양호한 코드-밀도를 본 발명의 마이크로코드에 제공하고, 목표 CISC 명령어 셋트와 유사성으로 인해 마이크로코드의 개발을 용이하게 만든다. 더욱이, 본 발명은 마이크로코드 수정을 위한 하드웨어 지원을 제공하며, 온-칩 ROM-기반 마이크로코드의 일부 또는 전부가 소프트웨어 제어하에 외부 RAM-기반 마이크로코드로 대치될 수 있다(1991년 12월 6일자로 출원된 발명의 명칭이 "A ROM With RAM Cell and Cyclic Redundancy Check Circuit"인 미합중국 특허원 제07/802,816호 참조(대리인 참조번호 SP024). 그 명세서는 본원에 참조로써 포함됨).
마이크로코드 루틴 언어는 복합적인 에뮬레이트된 명령어 모두에 의해 요구되는 기능과 예외 처리와 관련된 여러 가지 제어 및 유지 기능을 수행하기 위해 RISC 코어에 의해 실행될 수 있는 명령어 셋트가 되도록 설계된다. 비록 에뮬레이트된 명령어는 통상적으로 에뮬레이트 되지 않은(기본) 명령어 보다 성능에 덜 민감하고 예외(마이크로코드 루틴에 의해 처리됨)가 드물게 발생하지만, 두 가지 모두 효율적으로 처리되는 전체 시스템 처리량에 대해서는 여전히 임계적이다. 이 목적은 마이크로코드 루틴에 대한 여러 가지 형태의 하드웨어 지원을 이용해 실현된다. 본 발명은 마이크로코드에 대한 4가지 하드웨어 지원 영역; 즉 디스패치 로직, 메일박스, 나노-명령어 포맷, 및 특수 명령어를 포함한다.
마이크로코드 디스패치 로직은 목표 CISC 명령어 스트림으로부터 마이크로코드 루틴으로, 다시 목표 명령어 스트림으로 프로그램 제어의 효율적인 이동을 제어 한다. 이것은 적은 양의 하드웨어로 처리되며, RISC 코어의 명령어 실행 유니트(IEU)에 투명한 방식으로 처리된다(IEU는 RISC 명령어를 실행한다. 전술한 "RISC 코어"는 IEU와 동일한 의미를 나타낸다. IEU의 세부사항은 본 발명의 실시를 위해 본 기술에 숙련된 사람에게 필수적인 것은 아니다. 본 발명의 특징은 일반적으로 RISC 프로세서에 적용될 수 있다).
메일박스(mailboxes)는 명령어 디코드 하드웨어로부터 마이크로코드 루틴으로 체계적인 방식으로 정보를 전달하기 위해 사용되는 레지스터 시스템이다. 이것은 하드웨어가 명령어 오퍼랜드 및 유사 데이터를 마이크로코드 루틴으로 전달할 수 있도록 허용하며, 그래서 명령어로부터 이러한 데이터를 추출하는 작업을 덜게 된다.
나노-명령어 포맷은 IDU로부터 IEU로 전달되는 정보를 나타낸다. 이 포맷은 소스 CISC 명령어로부터 효율적으로 추출될 수 있도록 선택되었지만, 여전히 종속성 검사 및 기능 유니트 제어를 위해 적절한 정보를 IEU에 제공한다.
마지막으로, 특수 명령어는 RISC 하드웨어의 완전한 제어를 허용하고 하드웨어에서의 고유한 에뮬레이션 작업을 지원하도록 제공된 추가 명령어 셋트이며,CISC 명령어 셋트에 특정한 것이다.
3.1 마이크로코드 디스패치 로직
마이크로코드에 디스패칭하는데 있어서 제1 단계는 마이크로코드 루틴의 어드레스를 판단하는 것이다. 이 단계는 두 가지 중요한 요건을 갖고 있는데, 각각의 마이크로코드 루틴이 고유의 개시 어드레스를 가져야 한다는 것과, 이들 어드레스가 빠르게 발생되어야 한다는 것이다. 이것은 처리되어야 하는 적은 수의 케이스(cases)는 하드웨어로 하여금 어드레스를 상수로서 저장하고 단지 그 사이에서 선택하도록 허용하기 때문에, 예외 처리 루틴에 대해 실현하기가 매우 용이하다. 그러나, 에뮬레이트된 명령어에 대한 어드레스를 판단하는 것은 더욱 어려운데, 그 이유는 모든 어드레스의 저장을 실행가능하게 하기에는 너무 많기 때문이다.
마이크로코드 디스패치 로직은 명령어의 디스패치 어드레스를 직접 그 오피코드에 의거함으로써 요건을 충족시킨다. 예를 들어, 1-바이트 오피코드는 OH로부터 1FFFH까지의 어드레스 공간으로 맵핑되는데, 여기서 16비트 디스패치 어드레스의 상부 3개 비트는 제로가 되어야 한다. 이들 마이크로 코드 엔트리 포인트(entry-point)는 64 바이트 이격되는데, 이것은 각각의 엔트리 포인트 어드레스의 5개의 최하위 비트가 제로가 될 것을 필요로 한다. 이것은 7비트를 결정되지 않은 상태로 남겨두며, 이들 비트는 7개의 오피코드 비트로부터 직접 취해질 수 있다. 이런 방식으로 어드레스를 발생하는 것은 이 기술에 숙련된 사람에게 명백한 바와 같이 아주 적은 로직을 필요로 한다. 예를 들어, 오피코드로부터 적절한 비트를 선택하기 위해 멀티플렉서가 단독으로 사용될 수 있다.
일단 마이크로코드 루틴에 대한 디스패치 어드레스가 결정되면, 마이크로코드가 메모리로부터 인출(fetch)되어야 한다. 통상적으로, 마이크로코드는 온-칩 ROM에 내재하지만, 반드시 그러한 것은 아니다. 위에서 참조된 미국 출원 제07/802,816호에 상세하게 기재되어 있는 바와 같이, 각각의 엔트리 포인트는 ROM 루틴이 올바른지의 여부를 나타내는 ROM-무효 비트와 관련된다. 이 비트는 ROM 억세스와 병행하여 인출되며, 종래의 캐쉬-히트 인디케이터(cache-hit indicator)와 비슷하게 작용한다. 만일 이 비트가 ROM 엔트리가 유효하다고 표시하면, 마이크로코드 루틴은 ROM으로부터 인출되어 정상적으로 실행을 지속한다. 그러나, 만일 이 비트가 ROM이 무효하다고 표시하면, 마이크로코드는 RAM 등과 같은 외부 메모리로부터 인출된다.
온-칩 마이크로코드 루틴 어드레싱은 IDU 자체에 의해 처리된다. IDU는 마이크로코드 ROM에의 억세스를 위해 16 비트 어드레스를 발생한다. 만일 어드레스되는 ROM 엔트리에 대응하는 ROM-무효 비트가 마이크로코드가 무효하다고 표시하면, 주 메모리에서 오프-칩에 있는 마이크로코드의 어드레스가 계산된다. U-베이스(U_Base) 레지스터는 주 메모리에 있는 외부 마이크로코드의 상부 16 어드레스 비트(개시 어드레스로 불림)를 홀드한다. IDU에 의해 디코드된 16 비트 어드레스는 주 메모리에 존재하는 외부 마이크로코드에 억세스하기 위해 U-베이스 레지스터에서 상부 16 비트와 연쇄된다(concatenated). 만일 주 메모리에 있는 외부 마이크로코드의 위치가 변경되면, U-베이스 레지스터의 내용도 새로운 주 메모리 위치를 반영하도록 수정될 수 있다.
이러한 특징은 모든 마이크로코드가 외부 메모리 억세스의 성능 감소를 받지 않게 하면서, 소정의 루틴을 외부 메모리 내의 대체 루틴으로 대치시킴으로써 마이크로코드 갱신이 수행될 수 있도록 허용한다. 또한, 이것은 RISC 칩의 면적 요건을 감소시키거나 마이크로코드 개발에 도움을 주기 위해, RISC 칩으로부터 모든 ROM을 제거하고 전체 마이크로코드를 외부 메모리에 위치시키는 것을 가능하게 한다.
디스패치 로직은 또한 그 작업에 종료될 때, 마이크로코드 루틴이 주 명령어 스트림으로부터 복귀하도록 하기 위한 수단을 제공할 책임이 있다. 이것을 처리하기 위해, 별도의 프로그램 카운터(PC) 및 명령어 버퍼가 유지된다. 정상적인 연산 동안에, 주 PC는 외부 메모리내의 각 CISC 명령어의 어드레스를 결정한다. 이들 명령어를 포함하는 메모리 부분은 IFU에 의해 인출되어 MBUF에 저장된다.
에뮬레이트된 명령어 또는 예외(exception)가 검출되면, 현재 명령어의 PC 값 및 길이가 임시 버퍼에 저장되고, 마이크로코드 디스패치 어드레스가 전술한 바와 같이 계산되고, 명령어는 이 어드레스로부터 EBUF로 인출된다. 마이크로코드는 마이크로코드 "복귀(return)" 명령어가 검출될 때까지 EBUF로부터 실행되며, 이때 보존된 PC 값이 다시 로드되고 실행은 MBUF로부터 지속된다. MBUF 및 모든 다른 관련 레지스터는 마이크로코드 루틴에 대한 제어의 이동 중에 보존되기 때문에, 다시 CISC 프로그램으로의 이동이 매우 빠르게 일어난다.
명령어 에뮬레이션 루틴과 예외 처리 루틴 사이의 차이를 지원하기 위해 마이크로코드 루틴에 의해 사용되는 2개의 복귀 명령어가 있다. 예외 처리를 위한 목적으로 마이크로코드 루틴에 들어가면, 그 루틴이 종료된 후에 프로세서는 그것이 인터럽트 되었던 정확한 상태로 복귀해야 한다. 그러나, 명령어를 에뮬레이트할 목적으로 마이크로코드 루틴에 들어가면, 그 루틴은 에뮬레이트된 명령어 다음에 오는 명령어로의 복귀를 원한다. 에뮬레이션 루틴은 두 번째에 실행되게 된다. 이들 2가지 기능은 2개의 복귀 명령어, 즉areteret을 이용하여 처리된다. aret 명령어는 마이크로코드에 들어갔을 때의 상태로 프로세서를 복귀시키고,eret명령어는 주 PC가 갱신되도록 하고, 목표 스트림내의 다음 명령어로 제어를 복귀시키게 된다.
3.2 메일박스
복합 CISC 명령어의 기능을 성공적으로 수행하기 위한 에뮬레이션 루틴에 있어서, 마이크로코드가 에뮬레이트된 명령어에 의해 참조되는 오퍼랜드에 편리하게 억세스할 필요가 있다. 본 발명에 있어서, 이것은 4개의 메일박스 레지스터의 이용을 통해 수행된다. 이들 레지스터는 그 용도에 있어서만은 유일하며, 이들은 마이크로코드에 이용가능한 정수 레지스터 파일 내의 16개의 임시 레지스터로 된 셋트 중에서 첫 번째 4개의 레지스터가 되도록 정의된다. 오퍼랜드 또는 원래의 명령어로부터의 다른 정보를 필요로 하는 각각의 에뮬레이션 루틴은 그 루틴으로 들어갈 때 메일박스 레지스터중 하나 또는 그 이상의 레지스터에 저장된 이들 값을 찾을 것을 기대할 수 있다. IDU가 에뮬레이트된 명령어를 검출하면, 그것은 마이크로코드 루틴 자체의 실행이 시작되기 전에 마이크로코드가 기대하는 값을 레지스터에 로드하기 위해 IEU에 의해 이용되는 명령어를 발생한다.
예를 들어, 오퍼랜드로서 일반적인 레지스터 중 하나를 지정하는 로드 머신 상태 워드 명령어(Load machine Status Word instruction:1msw)의 에뮬레이션을 고려하자. 에뮬레이트될 특정 명령어가1msw as이고, 이것은 "ax" 레지스터로부터 16비트 상태 워드를 로드한다고 가정하자. 그러면, 명령어에서 실제적으로 지정된 레지스터에 관계없이 동일한 마이크로코드 루틴이 사용되고, 그래서 이 명령어에 대해 메일박스 #0가 마이크로코드 엔트리 이전에 상태 워드로 로드된다. IDU가 이 명령어를 검출하면, 그것은 "ax" 레지스터로부터의 상태 워드를 메일박스 #0로 정의 되는 "uO" 레지스터로 이동시키기 위해 IEU에 대해mov uO, ax명령어를 발생하게 된다. 이mov명령어가 IEU로 보내진 이후에, 마이크로코드 루틴이 인출되어 전송 되게 된다. 그러므로, 마이크로코드는 에뮬레이트된 명령어가1msw uO이었던 것처럼 기록될 수 있으며, 이것은 원래의 CISC 명령어에서 지정될 수 있는 모든 가능한 오퍼랜드를 정확하게 처리하게 된다.
3.3. 나노-명령어 포맷
전술한 바와 같이, CISC 명령어는 IDU에 의해 나노-명령어로 디코드되며, 이들 명령어는 IEU로서 언급되는 RISC 프로세서 코어에 의해 처리된다. 나노-명령어는 "버킷(bucket)"으로 불리는 4개 그룹으로 IDU로부터 IEU로 전달된다. 도11에는 단일 버킷이 도시되어 있다. 각각의 버킷은 2개의 패킷과 전체 버킷에 관한 일반 정보로 이루어진다. 패킷 #0은 순서적으로 실행되는 3개의 나노-명령어, 즉 LOAD 명령어(1102), ALU-타입 명령어(1104), STORE 명령어(1106)를 항상 포함하고 있다. 패킷 #1은 단일의 ALU-타입 명령어(1108)로 이루어진다.
IEU는 한 사이클 당 1의 피크 속도로 IDU로부터 버킷을 수용 할 수 있다. IDU는 한 사이클 당 2의 피크 속도로 기본 명령어를 처리한다. 대부분의 기본 명령어는 단일 패킷으로 번역되기 때문에, 2개의 기본 명령어가 통상적으로 한 버킷에 위치되어 IEU로 함께 전달 될 수 있다. 이런 속도에 대한 1차적인 제한조건은 기본 명령어가 다음의 버킷의 요건에 부합해야 한다는 것이다.
즉, 2개의 기본 명령어 중 오직 하나만이 메모리 오퍼랜드를 참조할 수 있다(버킷 당 오직 하나의 로드/저장 연산이 있다)는 것과, 두 명령어 모두 단일의 ALU-타입 연산으로 이루어져야 한다(2개의 ALU-타입 연산을 요하는 명령어에 반대 됨)는 것이다.
만일 이들 두 명령어 또는 한 명령어가 위반되면, 버킷은 기본 명령어 중 오직 한 명령어에 대응하는 나노-명령어와 함께 IEU로 보내지며, 잔여 명령어는 나중의 버킷에서 전송된다. 이들 요건은 IEU의 성능, 즉 IEU가 2개의 ALU와 하나의 Load/store 유니트를 갖고 있다는 것을 밀접하게 반영한 것이며, 그래서 실제적으로는 성능상의 제한은 나타내지 않는다. 이런 형태의 IEU의 일례는 1992년 1월 8일자로 출원된 발명의 명칭이 "고성능 RISC 마이크로프로세서 아키텍춰"인 미합중국 특허원 제07/817,810호(대리인 참조번호 SP015/1397.0280001)와, 1992년 1월 8일자로 출원된 발명의 명칭이 "확장가능 RISC 마이크로프로세서 아키텍춰"인 미합중국 특허원 제07/817,809호(대리인 참조번호 SP021/1397.0300001)에 기재되어 있으며, 이들 출원의 명세는 본원에 참조로써 포함되어 있다.
3.4 특수 명령어
일반 목적 명령어를 이용하여 수행하기에 어렵거나 또는 비효율적인 마이크로코드 루틴에 의해 수행되어야 하는 많은 기능이 존재한다. 더욱이, 종래의 CISC 프로세서에 비교하여 본 RISC 프로세서의 확장된 아키텍춰로 인해, 소정의 기능들은 유용하지만, 이와 같은 기능은 CISC 프로세서에 대해서는 의미가 없게 되며, 그래서 CISC 명령어의 어떤 조합을 이용해서도 수행될 수 없다. 이와 함께, 이러한 상황은 "특수 명령어"의 생성을 유도했다.
특수 명령어의 제1 카테고리의 일례로서,extract-desc-base명령어가 있다. 이 명령어는 마이크로코드 일반-목적 레지스터 중 2개의 레지스터로부터 여러 가지 비트-필드를 추출하고, 그것을 함께 연쇄시키고, 그 결과를 마이크로코드에 의한 이용을 위해 제3 일반 레지스터에 위치시킨다. 이 명령어의 이점 없이 동일한 연산을 수행하기 위해서는, 마이크로코드가 몇 가지 마스킹 및 시프트 연산을 수행해야 하며 임시 값을 홀드하기 위해 추가의 레지스터의 이용을 필요로 한다. 특수 명령어는 어떤 스크래치 레지스터의 이용도 없이 단일 사이클 동안에 동일한 기능이 한 명령어에 의해 수행될 수 있도록 한다.
특수 명령어의 제2 카데고리의 두 가지 예가 이미 제공되어 있는데, 마이크로코드 루틴을 종료하기 위해 사용되는 2개의 복귀 명령어,areteret이다. 이들 명령어는 마이크로코드 환경에서만 의미가 있으며, 그러므로 CISC 아키텍춰에서는 등가의 명령어 또는 명령어 시퀸스를 갖고 있지 않다. 이 경우에, 특수 명령어는 성능상의 이유가 아닌 올바른 기능을 위해 필요로 되었다.
특수 명령어는 오직 마이크로코드 루틴에만 이용가능하고 에뮬레이트된 명령어는 목표 CISC 명령어 스트림에서만 만나게 펄 수 있기 때문에, 에뮬레에트된 명령어의 오피코드는 특수 명령어에 대한 마이크로코드 모드에서 재사용된다. 그러므로, 목표 CISC 명령어 스트림에서 이들 오피코드 중 하나를 만나게 될 때, 이것은 단지 그 명령어에 대한 마이크로코드 에뮬레이션 루틴이 실행되어야 한다는 것을 나타낸다. 그러나, 동일한 오피코드를 마이크로코드 명령어 스트림에서 만나게 되면, 이것은 특수 명령어의 하나로서 완전히 다른 기능을 갖는다. 이러한 오피코드 재사용을 지원하기 위해. IDU는 현재 프로세서 상태를 계속해서 추적하고, 명령어를 적절하게 디코드한다. 이와 같은 오피코드의 재사용은 IEU에 대해 투명하다.
IDU는 각각의 CISC 명령어(예를 들어 i486 명령어 셋트중의 명령어)를 디코드하고, 각각의 명령어를 몇 개의 RISC 프로세서 나노-명령어로 번역한다. 전술한 바와 같이, 각각의 CISC 명령어는 그 복잡성 및 기능성에 의존하여 0 내지 4개의 나노-명령어로 번역된다. IDU는 최상의 경우에 사이클 당 2개의 CISE 명령어를 디코드하고 번역한다. IDU의 기본 기능은 다음과 같이 요약될 수 있으며, 다음의 작용을 한다.
* 반 사이클 당 하나의 CISC 명령어를 디코드하고;
* 제1 위상에서 제1 CISC 명령어를 디코드하고;
* 제2 위상을 통해 제1 CIS C명령어의 디코드된 결과를 유효로서 홀드하고;
* 제2 위상에서 제2 CISC 명령어를 디코드하고;
* 제3 위상에서 가능하다면 2개의 명령어의 출력을 조합하고;
* 한 사이클 당 4개의 나노-명령어를 포함하는 하나의 버킷을 출력한다.
3.5 명령어 디코드 유니트 블럭도
도12에는 IDU의 블럭도가 도시되어 있다. IAU로부터의 정렬된 명령어는 32비트 넓이([31:0] 또는 4바이트)의 버스(1201)장에서 IDU에 도달한다. 이들 정렬된 명령어는 명령어 디코더(1202)에 의해 수신된다. IDU(1202)는 CISC-RISC 변환을 수행하기 위해 정렬된 명령어 중 단지 첫 번째 4바이트만을 조사한다.
명령어 디코더(1202)는 한 클럭 위상(반 사이클)에서 동작한다. 정렬된 명령어는 디코더를 통해 진행하고, 나가는 디코드된 정보는 멀티플렉스되어 버스(1203)를 통해 반 사이클 지연 래치(1204)로 공급된다. 그러므로, 디코드된 정보는 1위상 파이프라인 지연과 동등한 지연을 받는다.
반 사이클 지연 후에, 디코드된 정보는 사용된 실제 레지스터 코드를 판단하기 위해 버스(1205)를 통해 MUX(1206)로 보내진다. 이 디코팅 단계에서, 디코드된 정보는 나노-명령어 포맷으로 배열된다. 다음에 나노-명령어는 래치된다. 한 사이클 당 2개의 완전한 나노-명령어 버킷이 래치된다. 2개의 나노-명령어 버킷의 래치 과정은 각각 제1 및 제2 IR 버킷(1208, 1210)에 의해 도시되어 있다.
IDU는 이들 버킷(1208,1210)을 단일 버킷(1212)으로의 조립을 시도한다. 이러한 조립은 한 셋트의 제어 게이트(1214)에 의해 수행된다. IDU는 먼저 각 나노-명령어의 타입(TYPE)을 조사하고, 그 타입이 조합될 수 있는 타입인지를 판단한다. 2개의 래치된 명령어의 로드(LD) 연산은 단일 버킷(1212)의 LD 위치(1216)에 위치 될 수 있으며, 래치된 명령어의 저장(ST) 연산은 단일 버킷의 ST 위치(1218)에 위치될 수 있고, A0 연산은 A0 위치(1212)에 위치될 수 있고, A0 또는 Al 연산은 Al위치(1222)에 위치될 수 있다는 것을 주목하자.
IDU는 명령어를 전체로서 치리한다. 만일 IDU가 2개의 명령어를 단일 버킷으로 패킹할 수 없다면, 하나의 완전한 명령어를 뒤에 남겨두게 된다. 예를 들어, 만일 제1 IR 래치가 오직 A0 연산만을 갖고 있고, 제2 IR 래치가 모두 4개의 연산을 포함하고 있다면, IFU는 제2 IR 래치로부터 A1 연산을 취하지 않고 그것을 A0 연산과 합병하게(merge) 된다. A0 연산은 그 자체에 의해 보내지게 되고 제2 IR 래치의 일련의 연산은 제1 IR 래치로 전달되어 제2 IR 래치가 재로드되는 다음 위상에서 보내지게 된다. 다시 말해, 제1 IR 래치에 저장된 연산은 항상 보내지게 되고, 제2 IR 래치에 저장된 연산은 가능하다면 제1 IR 래치 연산과 조합되게 된다. IDU와 IAU의 이전의 파이프라인 단계는 제1 및 제2 IR이 조합될 수 없는 경우에 대기해야 한다. 다음의 상황은 IDU가 제1 및 제2 IR 래치 연산을 조합하도록 허용한다:
1. 모두 오직 A0만을 이용하거나, 또는
2. 하나는 A0 만을 이용하고 다른 것은 A0, LD 및 ST만을 이용하는 경우.
조합(combination) 로직은 전술한 기능성 및 기본 로직 설계 관례(practice)에 근거하여, 제1 및 제2 IR 래치의 내용을 합병하기 위해 제어 게이트에 대한 필요한 제어 신호를 발생하도록 이 기술분야에 숙련된 사람에 의해 쉽게 설계될 수 있다.
IDU가 에뮬레이션을 요하는 명령어 서브셋트에 속한 명령어를 식별하면, 에뮬레이션 모드에 들어간다. 일단 에뮬레이션 모드에 들어가면, 에뮬레이션 모드 제어 신호(EMUL-MODE)가 IDU의 디코더로 보내진다. CISC 명령어의 직접 디코팅은 정지되고, 식별된 명령어에 대응하는 마이크로코드 루틴이 디코딩을 위해 IDU로 보내진다.
서브셋트 명령어의 에뮬레이션을 위한 마이크로코드 루틴이 종료되면, IDU 디코더는 다른 CISC 명령어를 디코팅하기 위해 기본 모드로 복귀한다. 근본적으로, 기본 CISC 명령어 및 마이크로코드 명령어는 IDU에 의해 동일한 방식으로 처리된다. 단지 오피코드의 해석(interpretation)만이 변경되게 된다.
도13a 내지 도13c에는 1바이트 및 2바이트 오피코드 명령어 모두에 대한 디폴트(기본) 모드의 카르노 맵(Karnaugh map)이 도시되어 있다. 이 카르노 맵의 좌측 및 상부의 수치는 오피코드 비트를 나타낸다. 예를 들어, hex OF로서 코팅된 1-바이트 오피코드는 "2바이트 escape" 멍령어인 제1 로우(row) 및 제11 칼럼(column)에 대응한다. 제13a-c의 카르노 맵에서 회색 음영이 그려진 명령어 박스는 기본 명령어를 나타내고, 흰색 박스는 에뮬레이트되어야 하는 명령어를 나타낸다.
도14에는 IDU의 명령어 디코더(1202)의 블럭도가 도시되어 있다. 이 명령어 디코더(1202)는 CISC 명령어 및 마이크로코드 루틴을 디코드하기 위해 사용되는 다수의 디코더를 포함한다. 타입 발생기(TYPE-GEN) 디코더(1402)는 ALIGN-IR 버스 상에서 제1 완전 정렬 명령어를 수신하고, 명령어의 타입 필드를 식별하기 위해 한번에 하나씩 명령어를 디코드한다. 식별된 타입 필드는 IDU와 관련하여 전술한 나노-명령어 연산에 대응한다. 타입은 하나의 버킷에서 각 연산(Load, ALU0, Store, ALU1)을 나타내는 4비트 필드로 표시된다. 타입 발생기 디코더(1402)는 4개의 연산중 어느 것이 명령어 실행에 필요로 되는지를 지정한다. 수신된 명령어에 따라, CISC 명령어를 충족시키기 위해 1 내지 4의 연산 중 어느 연산도 필요로 될 수 있다.
예를 들어, 한 레지스터의 내용을 다른 레지스터의 내용과 합산하는 add 연산은 단지 하나의 ALU 나노-명령어 연산만를 필요로 한다. 이와 달리, 레지스터의 내용은 메모리 위치와 가산할 필요가 있는 명령어는 Load, ALU 연산 및 Store 연산, 즉 총 3개의 나노-명령어 연산을 필요로 하게 된다. (여기서, 데이터는 메모리로부터 판독되어, 레지스터에 가산되고, 다시 메모리에 저장되어야 한다.) 더욱 복잡한 CISC 명령어는 4개의 나노-명령어를 모두 필요로 할 수도 있다.
TYPE-GEN 디코더(1402)는 3개의 TYPE 디코더를 포함한다. 제1 디코더 TYPE1은 명령어가 ModR/M 바이트가 뒤따르는 1-바이트 오피코드를 갖고 있다고 추정하고 그 추정에 근거하여 TYPE을 계산한다. 제 2 리코더 TYPE2는 명령어가 2-바이트 오피코드를 갖고 있다고 추정한다. 제1 바이트는 에스케이프(ESCAPE) 바이트이고, 그 뒤에 오피코드인 제2 바이트가 뒤따르고, 제3 바이트는 ModR/M 바이트이다. 제3 디코더 TYPEF 명령어가 부동 소수점(floating point) 명령어라고 추정하고 그 추정에 근거하여 명령어를 디코드한다,
TYPE-GEN 디코더는 3개의 4비트 넓이 TYPE 명령어 출력 버스(TYPE1, TYPE2, TYPEF)를 갖고 있다. 각각의 비트는 버킷 내의 4개의 나노-명령어 연산 중 하나에 대응한다. 특정 TYPE 필드는 CISC 명령어를 실행하기 위해 어떤 나노-명령어 연산이 필요로 되는지를 지정한다. 예를 들어, 만일 4비트가 모두 논리 "하이"이면,CISC 명령어는 Load, Store 및 2개의 ALU 연산을 필요로 한다.
1, 2 및 F로 명령된 부분을 포함하는 도14의 잔여 디코더는 1바이트 오피코드, 2바이트 오피코드 및 부동 소수점 명령어를 각각 추정하여 디코드한다. 무효 결과는 선택되지 않는다. 멀티플렉서는 올바른 디코더의 출력을 선택한다.
2개의 ALU 연산(ALU0 및 ALU1)은 11비트 길이의 오피코드 필드를 각각 갖고 있다. 이들 11비트는 오피코드의 8비트와 인접 ModR/M 바이트로부터의 3개의 오피코드 확장 비트를 포함한다. IDU에 의해 처리되는 대부분의 CISC 명령어에 있어서, 오피코드 비트는 나노-명령어 연산으로 직접 카피된다. 그러나, 몇 개의 CISC 명령어는 오피코드 대체(substitution)를 필요로 할 수도 있으며, 여기서 IDU 유니트는 명령어 실행 유니트(IEU)로 CISC 오피코드를 단지 필터링하지 못한다. 이것은 이 기술에 숙련된 사람에게는 명백하며, 그 이유는 IEU의 기능 유니트의 타입 및 수효가 특정 CISC 명령어 내에서 오피코드 대체가 요구되는지의 여부를 규정하게 되기 때문이다.
IEU가 ALU 연산을 처리하기 위해서는, 측정 ALU 연산을 처리하기 위해 어느 기능 유니트가 필요로 되는가와 관련된 정보를 수신해야 한다. 그러므로, IDU는 디코더 F_OUNIT1, F_OUNIT2 및 F_OUNITF를 포함하는 기능적 제로 유니트(F_OUNIT) 디코더(1410)를 포함한다. 이들 디코더의 출력은 A0 ALU 연산을 처리하기 위해 어느 기능 유니트가 필요로 되는지를 나타내는 멀티-바이트 필드이다. A1 ALU 연산에 대한 기능 유니트 디코딩은 동일하지만, 독립적인 디코더 F_1UNIT(1412)에 의해 처리 된다.
대부분의 CISC 명령어는 오피코드에 의해 암시되는 레지스터를 이용하여 연산을 실행한다. 예를 들어, 대부분의 명령어는 AX 레지스터가 누산기로서 사용될 것이라는 것을 암시한다. 그러므로, CISC 명령어의 오피코드에 근거하여 레지스터 인덱스를 발생하기 위해 상수 발생기(CST-GEN) 디코더(1414)가 포함된다. 상수 발생기 디코더는 특정 오피코드에 근거하여 어느 레지스터가 암시되는지를 지정한다. 나노-명령에 대한 올바른 발신지 및 수신지 레지스터 인덱스를 발생하기 위한 멀티플렉싱에 대해서는 도15와 함께 후술하게 된다.
CST_GEN 디코더에는 추가의 2비트 제어 신호, TempCount(TC)가 입력된다. 이 TC 제어 신호는 IEU에 의한 더미 레지스터로서의 이용을 통해 순환될 수 있는 4개의 임시 레지스터를 나타내는 2비트 카운터이다. 임시(또는 더미) 레지스터는 암시된 레지스터에 부가하여 CST_GEN 레지스터에 의해 전달될 수 있는 다른 레지스터 값을 나타낸다. 상수 발생기 디코더는 하나의 연산 당 2개의 레지스터를 가진 2개의 ALU 연산이 존재하기 때문에 4개의 상수 필드를 전달한다. 각각의 상수 레지스터 버스는 20비트 넓이이며, 각각의 상수는 총 5비트가 되며, 따라서 IEU에서 32개의 레지스터 중 하나의 선택을 허용한다.
이제, 블록(1416)에 일반적으로 도시된 선택 발생기(SEL-GEN) 디코더에 대해 논의되게 된다. SEL-GEN 디코더는 플래그 요구 수정(Flag Need Modify)(FG-NM) 디코더(1418)를 포함한다. FG-NM 디코더는 1-바이트 오피코드, 2-바이트 오피코드 및 부동 소수점 명령어에 대한 디코팅을 수행한다. 예를 들어, i486 명령어 셋트에는 총 6개의 플래그가 존재된다. 이들 플래그는 몇 개의 명령어의 실행이 시작되기 전에 유효하게 되어야 하며, 이때 플래그는 몇 개의 명령어에 의해 수정될 수도 있다. FG-NM 디코더는 하나의 플래그 당 2개의 신호를 출력하는데, 한 비트는 그 명령어의 실행을 위해 플래그가 필요로 되는지를 표시하고, 다른 비트는 그 명령어가 실제적으로 플래그를 수정하는지의 여부를 표시한다.
ALU0 및 ALU1 연산과 관련된 레지스터 무효화(Register Invalidation) 정보는 도면에 1420과 1422로 각각 도시된 INVD1 및 INVD2 디코더에 의해 디코드된다. 이들 INVD1 및 INVD2 디코더도 역시 SEL-GEN 디코더(1416)의 일부가 된다. INVD1 및 INVD2 디코더는 IEU에 대한 제어 신호를 발생한다. 이들 신호는 ALU 레지스터가 사용되어야 하는지의 여부를 표시한다. 각각의 ALU 연산에 의해 3개의 가능한 레지스터 인덱스가 지정될 수 있다. 한 레지스터는 발신지 및/또는 수신지 레지스터로서 사용될 수 있으며, 나머지 2개는 소스 레지스터를 지정하는 것에 제한된다. 연산에 의해 어느 레지스터가 필요로 되는지를 지정하기 위해 4비트 필드가 이용된다.
SEL_GEN 디코더(1416)는 CISC 명령어에 대해 어떤 레지즈터 필드가 필요로 되는지를 표시하는 FLD-CNT 디코더(1424)를 더 포함하고 있다. 이 FLD-CNT 디코더는 2개의 필드 중 어느 것이 발신지 레지스터가 되고 어느 것이 수신지 레지스터가 되는지를 지정한다.
블럭(1426)에는 나노-명령어 발생기(NIR_GEN) 디코더가 도시되어 있다. 데이터 크기(DATA-SZ) 및 어드레스 크기(ADDR-SZ) 입력 제어 신호는 시스템이 동작하고 있는 디폴트에 대응한다. 최종 어드레스 및 오퍼랜드 크기를 디코드하기 위해서는,디폴트 모드를 알아야 하고, 프리픽스의 존재(IAU와 관련하여 전술됨)를 알아야 한다. NIR-GEN 디코더에는 또한 EMUL-MODE 제어 신호가 입력되는데, 이것은 또한 다른 디코더에 의해서도 이용된다.
에스케이프 검출(ESC-DET) 입력 제어 신호는 명령어가 2바이트 오피코드를 갖고 있는지를 표시하기 위해 NIR-GEN 디코더에 공급된다. 또한 에뮬레이션 명령어가 검출될 때 메일박스 레지스터의 로딩을 발생하기 위해 선택 오피코드 확장(SIL-OP-EXT) 입력 제어 신호가 이용된다.
부동소수점 레지스터(FP_REG) 입력 제어 신호는 번역된 부동소수점 레지스터 인덱스를 IDU로 전달한다. 예를 들어, i486의 부동소수점 포맷은 부동소수점 수를 위한 8개의 레지스터를 갖고 있으며, 이들 레지스터는 스택과 유사하게 억세스된다. 이들 레지스터의 억세스는 스택 억세스 방식을 이용하여 수행되며, 레지스터 0은 스택의 상부(top)가 되고, 레지스터 1이 그 다음 상부 레지스터가 되는 방식이다. 이러한 레지스터 스택은 고정된 인덱스를 가진 8개의 선형 레지스터를 이용하여 에뮬레이트된다. 입력 명령어가 레지스터 0을 지정하면, 변역 블럭(도시 안됨)은 공지된 방식으로 스택 관계 레지스터 인덱스를 선형 레지스터에 대한 레지스터 인덱스로 번역한다. 이것은 IDU로 하여금 스택의 상부에 어떤 레지스터가 있는지를 추적하도록 허용한다.
시스템이 에뮬레이션 모드로 분기하면, IDU는 에뮬레이트되는 명령어에 관한 정보를 세이브한다. IDU는 수신지의 레지스터 인덱스(EM_RDEST), 발신지(EM_RDEST2) 및 베이스 인덱스 정보(EM_ESIDX) 뿐만 아니라, 명령어의 데이터 크기(EM_DSIZE) 및 어드레스 크기(EM_ASIZE)도 세이브한다. 이와 같이 세이브된 정보는 명령어를 적절하게 에뮬레이트하기 위해 마이크로코드 루틴에 의해 이용된다.add명령어의 에뮬레시이션을 예로 들면, 마이크로코드 루틴은 에뮬레이션을 위한 어드레스 크기를 알게 되도록add명령어의 어드레스 크기를 판단하기 위해 EM-ASIZE를 검사할 수 있다.
NIR_GEN 디코더(1426)는 크기(SIZE) 디코더(1428)를 포함하고 있다. 이 SIZE 디코더에 의해 발생되는 필드(즉, SIZE1, SIZE2, SIZEF)는 명령어의 어드레스 크기, 오퍼랜드 크기 및 즉시 데이터 크기를 표시한다. 각각의 명령에 대해 16 또는 32비트의 어드레스 크기와, 8,16 또는 32비트의 오퍼랜드 크기 및 8,16 또는 32비트의 즉시 데이터 필드가 추출된다.
다른 NIR_GEN 디코더는 로드 정보(LD_INF) 디코더(1430)로 불린다. 이 LD-INF 디코더는 로드 및 저장 연산에 대응하는 정보를 디코드한다. 로드 정보는 효과적인 어드레스 계산에 이용된다. 로드 정보 필드(LD_INF1, LD-INF2, LD_INFF)는 CISC 명령어에 의해 어떤 어드레싱 모드가 이용되고 있는지 지정하기 위해 이용될 수 있는데, 그 이유는 CISC 명령어 셋트가 통상적으로 많은 상이한 어드레싱 모드를 지원하기 때문이다.
i486 기본 어드레싱 모드는 어드레스를 결정하기 위해 함께 가산되는 세그먼트 필드와 오프셋을 포함한다. 인덱스 레지스터뿐만 아니라 인덱스 레지스터에 대한 스케일(scale)도 지정될 수 있으며(예를 들어, 인덱스 레지스터가 어레이내의 구성요소(element)인 경우), 이 구성요소는 1,2,4 또는 8-바이트 길이로 지정될 수있고, 그러므로 인덱스 레지스터는 어드레스 결정을 위해 가산되기 전에 계수 1,2,4 또는 8에 의해 스케일링될 수 있다. 베이스 및 인덱스로 역시 LD_INF 필드에 의해 지정될 수 있다.
나노-명령어 오피코드(NIR-OPC) 디코더(1432)는 A1 연산을 위한 오피코드(패킷1)를 전송한다. 디코드된 필드(NIR-OPC1, NIR-ORC2, NIR-OPCF)는 제1 명령어 바이트(8비트)와 제2 바이트로부터의 3개의 확장 비트를 포함한다.
보조(MIScellaneous ) 오피코드(MISC_OPC) 디코드(1434)는 명령어가 부동소수점 명령어인지, 또한 로드 명령어가 실제적으로 존재하는지를 표시한다. MISC_OPC 디코더에 의해 발생되는 필드는 부동 데이터의 변환이 펄요한지를 나타내게 된다. 이 정보는 명령어의 포맷에 관계없이 쉽게 추출되기 때문에, 이 디코더에 있어서 멀티플렉싱은 필요하지 않다.
패킷 0의 A0 연산을 위한 오피코드는 OP_CODE 디코더(1436)에 의해 지정된다. A0 오피코드는 통상적으로 i486 입력 오피코드로부터 직접 카피되지만, 몇몇 명령어에 있어서는 오피코드가 대체 오피코드로 대치된다(전술한 바와 같이, NIR-GEN 디코더에 의해 발생되는 신호의 기능성은 디코드되는 CISC 명령어 셋트에 특정한 것이며, 그러므로 CISC 명령어 셋트 및 본 발명의 나노-명령어 포맷의 검토에 의해 이 기술에 숙련된 사람에게는 명백해지게 된다.
EXT_CODE 디코더(1440)는 ModR/M 바이트로부터의 3 비트 오피코드 확장자를 추출한다. IN_ORDER 디코더(1442)는 명령어가 "순서적으로(in order)" 실행되어야 하는지를 판단하기 위해 명령어를 디코드한다. 이것은 이전의 모든 명령어가 실행될 때까지는 이 명령어에 대해 아무런 처리도 하지 않도록 IEU에 지시한다. 일반 상기 명령어의 실행이 완료되면, 후속 명령어의 실행이 개시된다.
제어 흐름 점프 크기(Control of Flow Jump Size) 디코더(1444)는 어드레스를 지정하는 점프에 대한 변위 크기를 표시한다. CF_JV_SIZE로 명령된 상기 필드는 점프에 대한 어드레스의 크기를 지정한다. 이것은 CISC 명령어 셋트에 의해 사용되는 어드레싱 방법의 형태에 특정한 것이다.
DEC_MOEST로 명명된 1비트 디코더(1446)는 명령어의 수신지(destination)가 메모리 어드레스인지의 여부를 표시한다. 마지막으로, 명령어 디코더는 레지스터 코드(인덱스)를 선택하기 위해 3개의 레지스터 코드(RC) 디코더(1438)를 포함한다. i486 명령어 포맷은 명령어내의 여러 위치에 있는 레지스터 필드의 인덱스를 인코드한다. 이들 필드의 인덱스는 RC 디코더에 의해 추출된다. ModR/M 바이트는 또한 오피코드 자체에 의해 지정되는 바와 같은 수신지/발신지(Source)로서 이용되는 2개의 레지스터 인덱스를 갖고 있다. 레지스터 코드 디코더(1438)는 3개의 RC 필드 RC1, RC2, RC3를 발생한다. RC1과 RC2는 프로세서가 에뮬레이션 모드에 있지 않고 그 명령어가 부동소수점 명령어가 아닌 경우에 ModR/M 바이트로부터 다음과 같이 추출된다. 즉, RC1=ModR/M 바이트의 비트[2:0]; RC2=ModR/M바이트의 비트 [5:3]; RC3=오피코드의 비트[2:0]. 기본(에뮬레이션 모드가 아닌) 모드에서 부동소수점 명령어에 대해, RC1, RC2, RC3는 다음과 같이 할당된다.
RC1:ST(0)=스택의 상부(top);
RC2:ST(1)=스택상의 제2 항목(item)=스택의 상부에서 두 번째;
RC3:ST(i)=스택으로부터 I번째 항목, 여기서 i는 오피코드에서 지정된다.
에뮬레이션 모드에서, RC1, RC2, RC3는 다음과 같이 할당된다.
RC1:바이트 3의 비트[4:0];
RC2:바이트 2의 비트[1:0] 및 바이트 3의 비트[7:5];
RC3:바이트 2의 비트[6:1];
도15는 CST_GEN, NIR_GEN 및 SEL_GEN 디코더(1414,1438,1424)에 대한 블럭 및 논리 게이트 회로도를 도시하고 있다. 도15는 나노-명령어 연산 A0 및 A1에 대한 발신지/수신지 레지스터 인덱스와 로드 명령어에 대한 수신지 레지스터 인덱스를 발생하기 위해 1바이트 오피코드, 2바이트 오피코드 및 부동소수점 디코드 결과가 어떻게 선택, 지연, 조합되는지의 일례라는 것을 이해해야 한다.
선택, 지연 및 멀티플렉싱의 방법론은 명령어 디코더(1202)에 의해 발생되는 모든 신호에 대해 적용되지만, 독럽적인 1바이트 오피코드, 2바이트 오피코드 및 부동소수점 결과를 발생하지 않는 그런 신호의 예외가 존재한다. 더욱이, 상기 예에 의해 발생되는 결과는 응용예에 따라 특정한 것이며, 다시 말하면, 이것은 i486 명령어를 본 발명의 나노-명령어 포맷으로 디코딩하는데 적용된다. 그러나, 이들 실시예를 통해 논의되는 원리는 일반적으로 어떠한 CISC-RISC 명령어 정렬 및 디코딩에도 적용될 수 있다.
전술한 바와 같이, CST_GEN 디코더(1414)는 4개의 상수 5비트 레지스터 필드(총 20비트)를 각각 포함하는 3개의 출력 CST1, CST2 및 CSTF를 발생한다. 상기 SEL_GEN 디코더는 다른 선택 MUX(1512)에서의 멀티플렉서의 선택을 위한 레지스터 필드 제어 신호(FLD1, FLD2, FLD3)를 발생한다. CST1, CST2 또는 CSTF 결과와 FLD1, FLD2 및 FLDF 결과의 선택에 대해서는 멀티플렉서 블럭(1502)에 일반적으로 예시되어 있다. 3비트 MUX 선택 라인(1504)은 명령어가 1바이트 오퍼코드 또는 2바이트 오피코드를 갖고 있는지, 또는 부동소수점 명령어인지에 따라 결과를 선택하기 위해 이용된다.
1/2 사이클 파이프라인 지연 래치(1504)는 멀티플렉서(1502)에 의해 선택된 결과와 3개의 레지스터 제어 필드 RC1, RC2, RC3를 지연시키기 위해 이용된다. 1/2 파이프라인 지연 래치(1504)로의 각각의 입력은 한 쌍의 반대로 클럭킹되는 래치(1508) 보내진다. 이 래치의 내용은 멀티플렉서(1510)에 의해 선택된다. 이와 같은 구성은 IAU와 관련하여 전술한 1/2 사이클 지연소자(315)와 유사하다.
블럭(1512)에는 다른 멀티플렉싱 스테이지가 도시되어 있다. 멀티플렉서(1502)에 의해 선택된 상수 레지스터 필드는 도면부호 1514에 일반적으로 도시된 바와 같이, regc1 내지 regc4로 각각 명령된 4개의 분리된 필드로서 멀티플렉서(1512)로 입력된다. 또한, 블럭(1512)으로의 입력으로서, 오피코드 및 ModR/M 바이트로부터의 추출 레지스터 필드 RC1 RC2, RC3가 도시되어 있다. 상기 regc 필드 및 RC 필드는 도면 부호 1516에 도시된 연산 A0를 위한 발신지 및 수선지 레지스터 인덱스 aO_rd 및 sO-rs와, 도면부호 1518에 도시된 연산 A1을 위한 발신지 및 수신지 레지스터 인덱스 a1-rd 및 a1-rs를 발생하기 위해, FLD 제어 신호(1520)의 제어하에 블럭(1512)에서 논리회로에 의해 조합된다. 이 블럭(1512)에서는 또한 로드 명령어에 대한 수신지 레지스터 인덱스인 인덱스 1d-rd가 선택된다.
4.0 디코드된 명령어 FIFO
도16a에는 본 발명과 관련된 디코드 FIFO(DFIFO)의 블럭도가 도시되어 있다. 이 DFIFO는 4개의 나노-명령어와 2개의 즉시 데이터 필드 및 하나의 변위 필드를 각각 포함하는 4개의 완전한 버킷을 홀드한다. 각각의 버킷 DFIFO내의 파이프라인 레지스터의 한 레벨에 대응한다. 이들 버킷은 IEU가 새로운 버킷을 요구하는 각각의 사이클 동안에 IDU에서 발생되어 DFIFO로 보내진다. 버킷내의 나노-명령어는 패킷 0와 패킷1로 불리는 2개의 그룹으로 분할된다. 패킷0는 1,2,3 나노-명령어에 대응하는 Load, ALU 및/또는 Store 연산으로 이루어질 수 있다. 패킷 1은 한 나노-명령어에 대응하는 ALU 연산이 될 수 있다. 이러한 분할의 결과로서, 버킷은 단지 2개의 ALU 연산만을 포함할 수 있으며, 그중 하나만이 메모리를 참조할 수도 있다. 만일 후속 명령어가 모두 메모리 오퍼랜드를 요구하는 경우에, 이들 명령어는 분리 된 버킷에 위치되어야 한다.
도16b로부터 알 수 있는 바와 같이, 전체적으로 각 패킷 및 버킷과 관련된 적정한 양의 일반 정보가 존재한다. 이 정보는 일반 정보 FIFO에 저장된다. 디폴트에 의해, 한 버킷내의 4개의 나노-명령어가 NIR0로부터 NIR3까지 순서적으로 실행 된다. 버킷 일반 정보 비트 중 한 비트는 NIR3가 IIR0 내지 NIR2 이전에 실행되어야 한다는 것을 표시하도록 셋트될 수 있다. 이와 같은 특성은 후속 명령어를 단일 버킷으로 조합하는 것을 보다 용이하게 만드는데, 그 이유는 이들의 순서가 버킷 요건에 적합하게 하기 위한 능력에 더 이상 영향을 주지 않기 때문이다.
도16c는 버킷 0-4에 대한 즉시 데이터 및 변위 FIFO를 도시하고 있다. 여기서, IMM0는 패킷 0에 대응하는 즉시 데이터를 나타내고, IMM1은 패킷1에 대응하는 즉시 데이터를 나타낸다. DISP는 패킷0에 대응하는 변위를 나타낸다. 패킷1은 DISP 정보를 이용하지 않는데, 그 이유는 DISP 필드가 단지 어드레스 계산의 일부로서만 이용되기 때문이다.
전술한 3가지 형태의 나노-명령어의 특정예가 도17에 도시되어 있다. 또한, 필드 설명 및 정의는 부록 A, 1-10 페이지에 기재되어 있다. 이들 테이블은 각 버킷의 내용에 관한 상세한 정보를 제공한다.
위에서 본 발명의 여러 가지 실시예가 기술되었지만, 이것은 단지 예로써 제공된 것이며 제한 의도가 아닌 것으로 이해되어야 한다. 본 발명의 사상 및 범위는 전술한 실시예에 의해 제한되지 않으며, 오직 다음의 청구범위 및 그 등가의 것에 따라 정의되어야 한다.

Claims (28)

  1. 가변 수의 명령어 바이트로 각각 세분되는 복합 명령어들의 스트림으로부터 복합의 가변 길이 컴퓨터 명령어를 추출하여 정렬시키기 위한 시스템에 있어서,
    (a) 상기 복합 명령어 스트림을 수신하기 위한 제1 수단,
    (b) 상기 제1 수단에 응답하여, 상기 복합 명령어 스트림으로부터 명령어 바이트 셋트를 추출하기 위한 제2 수단;
    (c) 상기 제2 수단에 응답하여, 상기 복합 명령어 중 제1 명령어에 대응하는 명령어 바이트의 수를 판단하기 위한 제3 수단;
    (d) 상기 제3 수단에 응답하여, 상기 명령어 바이트의 상기 대응하는 수에 근거하여 상기 복합 명령어 중 상기 제1 명령어를 정렬시키기 위한 제4 수단 - 상기 제4 수단은 정렬 시프트 제어 신호에 근거하여 상기 복합 명령어들을 정렬시키기 위한 정렬 시프터를 포함함 - ;
    (e) 적어도 하나의 정렬 래치 - 여기서, 상기 정렬 시프터는 상기 정렬된 복합 명령어 바이트를 상기 적어도 하나의 정렬 래치로 출력함 - ; 및
    (f) 상기 적어도 하나의 정렬 래치를 위한 상기 정렬된 복합 명령어 바이트를 수신하고, 상기 정렬된 복합 명령어 바이트의 개시점에 포함된 프리픽스 바이트의 수를 판단하기 위한 프리픽스 검출기
    를 포함하고,
    상기 정렬 시프트 제어 신호는 상기 프리픽스 검출기에 의해 판단된 상기 프리픽스 바이트의 수를 포항하고, 또한 상기 정렬 시프트 제어 신호는 프리픽스 바이트의 대응하는 수를 시프트-아웃하기 위해 상기 정렬 시프터에 의해 수신되는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  2. 제1항에 있어서,
    상기 제2 수단은,
    추출 시프트 제어 신호에 근거하여 상기 복합 명령어 스트림으로부터 명령어 바이트를 추출하기 위한 추출 시프터를 포함하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  3. 제1항에 있어서,
    상기 제3 수단은,
    상기 정렬 래치로부터 상기 정렬된 복합 명령어를 수신하고, 상기 정렬된 복합 명령어 바이트에 근거하여 상기 복합 명령어 내의 명령어 바이트의 수를 판단하여 출력하기 위한 차기 명령어 검출기를 포함하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  4. 제3항에 있어서,
    상기 정렬 시프트 제어 신호는 상기 차기 명령어 검출기에 의해 판단된 이전 복합 명령어 내의 명령어 바이트의 수를 포함하고 있으며, 상기 정렬 시프터는 상기 명령어 바이트 수를 시프트하여 차기 복합 명령어에 대응하는 다른 명령어 바이트를 정렬시키고, 다음에 상기 정렬 시프터는 상기 차기 복합 명령어에 대응하는 상기 다른 명령어 바이트를 상기 적어도 하나의 정렬 래치로 출력하는
    복합 가변길이 컴퓨터 명령적 추출 및 정렬 시스템.
  5. 제1항에 있어서,
    상기 적어도 하나의 정렬 래치로부터 상기 정렬된 복합 명령어 바이트를 수신하고, 상기 추출된 명령어 바이트 내의 즉시 데이터 및 변위 데이터의 위치를 판단하기 위한 제6 수단
    을 더 포함하는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  6. 제5항에 있어서,
    상기 제6 수단은,
    (a) 상기 정렬된 복합 명령어 바이트에 대응하는 즉시 데이터를 정렬시키기 위한 즉시 데이터 시프터; 및
    (b) 상기 정렬된 복합 명령어 바이트에 대응하는 변위 데이터를 정렬시키기 위한 변위 데이터 시프터를 더 포함하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  7. 제6항에 있어서,
    상기 즉시 데이터 시프터 및 상기 변위 데이터 시프터는 상기 정렬된 즉시 데이터 및 상기 정렬된 변위 데이터를 명령어 디코더 유니트로 직접 출력하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  8. 제1항에 있어서,
    상기 제1 수단은 버스를 포함하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  9. 제8항에 있어서,
    상기 버스는 버퍼 장치로부터 복합 명령어 스트림을 수신하는
    복합 가변길이 컴퓨터 명령어 추출 및 정렬 시스템.
  10. 가변 수의 명령어 바이트로 각각 세분되는 복합 명령어들의 스트림으로부터 복합 가변 길이 컴퓨터 명령어를 추출하고, 상기 복합 명령어 중 개별적인 명령어들의 명령어 바이트를 정렬시키기 위한 방법에 있어서,
    (1) 상기 복합 명령어 스트림의 일부를 수신하는 단계;
    (2) 추출 시프터를 이용하여, 제1 명령어 바이트로 시작하는 명령어 바이트들의 제1 셋트를 추출하는 단계;
    (3) 상기 명령어 바이트 셋트를 정렬 래치로 전달하는 단계;
    (4) 상기 래치로부터 상기 정렬된 명령어 바이트를 차기 명령어 검출기로 출력하는 단계;
    (5) 상기 차기 명령어 검출기를 이용하여 상기 명령어 바이트 셋트에 근거하여 제1명령어의 종료점을 판단하는 단계;
    (6) 명령어 바이트들의 차기 셋트를 추출하여 정렬 시프터로 제공하도록 상기 추출 시프터를 제어하는 단계;
    (7) 상기 차기 명령어를 정렬하여 출력하도록 상기 정렬 시프터를 제어하는 단계;
    (8) 상기 정렬 래치에서 상기 정렬 시프터의 출력을 래치하는 단계;
    (9) 상기 정렬 래치로부터 상기 정렬된 명령어 바이트를 명령어 디코드 유니트로 출력하는 단계;
    (10) 상기 정렬된 명령어 바이트를 로드, 저장 및 산술/논리 연산의 그룹을 포함하는 하나 또는 그 이상의 나노-명령어 연산으로 디코딩하는 단계; 및
    (11) 복합 명령어 스트림 내의 잔여 명령어 바이트에 대해 상기 단계 4-10을 반복하는 단계
    를 포함하는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 방법.
  11. 제10항에 있어서,
    상기 하나 또는 그 이상의 나노-명령어 연산을 미리 정해진 로드, 저장 및 산술/논리 연산 필드를 포함하는 명령어 버킷으로 위치시키는 단계;
    상기 명령어 버킷을 제1 명령어 래치에 저장하고, 만일 상기 제1 명령어 래치가 비어있지 않으면 제2 명령어 래치에 저장하는 단계; 및
    상기 명령어 버킷 필드의 조합을 관리하는 예정된 일련의 규칙에 근거하여, 상기 제1 및 제2 명령어 래치의 내용을 최종 명령어 버킷으로 조합하는 단계를 더 포함하는 복합 가면길이 컴퓨터 명령어 추출 및 정렬 방법.
  12. 제10항에 있어서,
    상기 래치로부터 상기 정렬된 명령어 바이트를 프리픽스 디코더를 출력하는 단계; 및
    프리픽스 정보를 제공하기 위해 하나 또는 그 이상의 프리픽스 바이트가 존재하는지의 여부를 판단하고,
    만일 존재하면
    (i) 상기 프리픽스 정보를 래치하고,
    만일 존재하지 않으면;
    (ii) 상기 차기 명령어 검출기의 출력을 선택하는 단계
    를 더 포함하는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 방법.
  13. 제12항에 있어서,
    상기 세부단계(i)는 대응하는 정렬된 명령어를 가진 상기 래치 프리픽스 정보를 출력하는 단계
    를 더 포함하는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 방법.
  14. 제11항에 있어서,
    상기 최종 명령어 버킷을 나노-명령어 디코더로 출력하는 단계
    를 더 포함하는 복합 가변길이 컴퓨터 명령어 추출 및 정렬 방법.
  15. 가변 수의 명령어 바이트를 가진 복합 컴퓨터 명령어를 제한 명령어 셋트 컴퓨터 상에서의 처리를 위해 나노-명령어 연산으로 디코딩하기 위한 시스템에 있어서,
    (a) 정렬된 복합 명령어를 수신하기 위한 제1 수단;
    (b) 상기 제1 수단으로부터 상기 정렬된 복합 명령어를 수신하고, 상기 정렬 된 복합 명령어를 로드, 저장 및 산술/논리 연산의 그룹을 포함하는 하나 또는 그 이상의 나노-명령어 연산으로 디코딩하기 위한 제2 수단;
    (c) 상기 제2 수단에 응답하여, 상기 하나 또는 그 이상의 나노-명령어 연산을 미리 정해진 로드, 저장 및 산술/논리 연산 필드를 포함하는 명령어 버킷으로 위치시키기 위한 제3 수단;
    (d) 상기 제3 수단에 응답하여, 상기 명령어 버킷을 제1 명령어 래치 또는 만일 상기 제1 명령어 래치가 비어있지 않으면 제2 명령어 래치에 저장하기 위한 제4 수단; 및
    (e) 상기 제4 수단에 응답하여, 상기 제1 및 제2 명령어 래치의 내용을 상기 명령어 버킷 필드를 관리하는 예정된 일련의 규칙에 근거하여 최종 명령어 버킷으로 조합하기 위한 제5 수단
    을 포함하는 복합 컴퓨터 명령어 디코딩 시스템.
  16. 제15항에 있어서,
    상기 명령어 버킷 및 최종 버킷은 각각 제1 및 제2 명령어 패킷을 포함하는 복합 컴퓨터 명령어 디코딩 시스템.
  17. 제16항에 있어서,
    상기 제1 명령어 패킷은 3개의 나노-명령어 연산 필드를 포함하는
    복합 컴퓨터 명령어 리코딩 시스템.
  18. 제16항에 있어서,
    상기 제2 명령어 패킷은 하나의 나노-명령어 연산 필드를 포함하는
    복합 컴퓨터 명령어 디코팅 시스템.
  19. 제17항에 있어서,
    상기 제1 명령어 패킷의 상기 3개의 나노-명령어 연산 필드는 로드 나노-명령어 연산 필드, 저장 나노-명령어 연산 필드 및 산술/논리 나노-명령어 연산 필드를 포함하는
    복합 컴퓨터 명령어 디코딩 시스템.
  20. 제16항에 있어서,
    상기 제2 명령어 패킷의 상기 하나의 나노-명령어 연산 필드는 산술/논리 나노-명령어 연산 필드를 포함하는
    복합 컴퓨터 명령어 디코딩 시스템.
  21. 제15항에 있어서,
    상기 제1 및 2 버킷의 조합은 다음 조건, 즉,
    (i) 상기 제1 및 제2 명령어 래치가 모두 하나의 산술/논리 연산만을 래치하는 경우; 및
    (ii) 상기 제1 및 제2 명령어 래치 중 하나는 하나의 산술/논리 연산만을 저장하고, 다른 래치는 하나의 로드 연산, 하나의 저장 연산 및 하나의 산술/논리 연산만을 저장하는 경우
    중에서 하나의 조건이 존재하는 경우에 발생하는
    복합 컴퓨터 명령어 디코딩 시스템.
  22. 제15항에 있어서,
    상기 제3 수단은 멀티플렉서를 포함하는
    복합 컴퓨터 명령어 디코딩 시스템.
  23. 제15항에 있어서,
    상기 제4 수단은 제어 게이트 셋트를 포함하는
    복합 컴퓨터 명령어 디코딩 시스템.
  24. 가변 수의 명령어 바이트를 가진 복합 컴퓨터 명령어를 제한 명령어 셋트 컴퓨터 상에서의 처리를 위해 나노-명령어 연산으로 디코딩하기 위한 방법에 있어서,
    (1) 정렬된 복합 명령어를 수신하는 단계;
    (2) 상기 정렬된 복합 명령어를 로드, 저장 및 산술/논리 연산의 그룹을 포함하는 하나 또는 그 이상의 나노-명령어 연산으로 디코딩하는 단계;
    (3) 상기 하나 또는 그 이상의 나노-명령어 연산을 미리 정해진 로드, 저장 및 산술/논리 연산 필드를 포함하는 명령어 버킷으로 위치시키는 단계;
    (4) 상기 명령어 버킷을 제1 명령어 래치, 또는 상기 제1 명령어 래치가 비어있지 않은 경우에는 제2 명령어 래치에 저장하는 단계; 및
    (5) 상기 제1 및 제2 명령어 래치의 내용을 상기 명령어 버킷 필드의 조합을 관리하는 예정된 일련의 규칙에 근거하여 최종 명령어 버킷으로 조합하는 단계
    를 포함하는 복합 컴퓨터 명령어 디코딩 방법.
  25. 제24항에 있어서,
    상기 조합 단계는 상기 제1 및 제2 명령어 래치의 상기 내용을 상기 최종 명령어 버킷 내의 제1 및 제2 명령어 패킷으로 저장하는 단계를 더 포함하는
    복합 컴퓨터 명령어 디코딩 방법.
  26. 제25항에 있어서,
    상기 조합 단계는 또한 상기 제1 및 제2 명령어 래치의 상기 내용을 상기 제1 명령어 패킷 내의 3개의 나노-명령어 연산 필드에 저장하는 단계를 더 포함하는
    복합 컴퓨터 명령어 디코딩 방법.
  27. 제26항에 있어서,
    상기 더 포함하는 저장 단계는 상기 제1 및 제2 명령어 래치의 상기 내용을 상기 제2 명령어 패킷내의 하나의 나노-명령어 연산 필드에 저장하는 단계를 포함하는
    복합 컴퓨터 명령어 디코딩 방법.
  28. 제24항에 있어서,
    상기 조합 단계는,
    (j) 상기 제1 및 제2 명령어 래치가 모두 오직 하나의 산술/논리 연산만을 래치하는지; 또는
    (ii) 상기 제1 및 제2 명령어 래치 중 하나는 오직 하나의 산술/논리 연산을 저장하고, 다른 래치는 하나의 로드 연산, 하나의 저장 연산 및 하나의 산술/논리연산만을 래치하는지 여부를 판단함으로써,
    상기 제1 및 제2 버킷의 조합을 수행하는
    복합 컴퓨터 명령어 디코딩 방법.
KR1019940703361A 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨명령어번역정렬및디코딩 KR100343530B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-2001-7005744A KR100371929B1 (ko) 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨 명령어 번역 정렬 및 디코딩

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US07/857,599 US5438668A (en) 1992-03-31 1992-03-31 System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US07/857599 1992-03-31
PCT/JP1993/000417 WO1993020507A2 (en) 1992-03-31 1993-03-30 Cisc to risc instruction translation alignment and decoding

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-7005744A Division KR100371929B1 (ko) 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨 명령어 번역 정렬 및 디코딩

Publications (2)

Publication Number Publication Date
KR950701100A KR950701100A (ko) 1995-02-20
KR100343530B1 true KR100343530B1 (ko) 2002-11-27

Family

ID=25326342

Family Applications (2)

Application Number Title Priority Date Filing Date
KR10-2001-7005744A KR100371929B1 (ko) 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨 명령어 번역 정렬 및 디코딩
KR1019940703361A KR100343530B1 (ko) 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨명령어번역정렬및디코딩

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR10-2001-7005744A KR100371929B1 (ko) 1992-03-31 1993-03-30 씨아이에스씨-알아이에스씨 명령어 번역 정렬 및 디코딩

Country Status (6)

Country Link
US (8) US5438668A (ko)
EP (2) EP1028370B1 (ko)
JP (3) JP3547052B2 (ko)
KR (2) KR100371929B1 (ko)
DE (2) DE69329644T2 (ko)
WO (1) WO1993020507A2 (ko)

Families Citing this family (243)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781753A (en) * 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5768575A (en) * 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
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
US5628021A (en) * 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
US5463748A (en) * 1993-06-30 1995-10-31 Intel Corporation Instruction buffer for aligning instruction sets using boundary detection
JP3248992B2 (ja) * 1993-07-13 2002-01-21 富士通株式会社 マルチプロセッサ
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5903772A (en) * 1993-10-29 1999-05-11 Advanced Micro Devices, Inc. Plural operand buses of intermediate widths coupling to narrower width integer and wider width floating point superscalar processing core
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
EP0651320B1 (en) 1993-10-29 2001-05-23 Advanced Micro Devices, Inc. Superscalar instruction decoder
EP0651324B1 (en) * 1993-10-29 2006-03-22 Advanced Micro Devices, Inc. Speculative instruction queue for variable byte length instructions
JPH07239780A (ja) * 1994-01-06 1995-09-12 Motohiro Kurisu 1クロック可変長命令実行処理型命令読み込み電子計 算機
US5884057A (en) * 1994-01-11 1999-03-16 Exponential Technology, Inc. Temporal re-alignment of a floating point pipeline to an integer pipeline for emulation of a load-operate architecture on a load/store processor
US5600806A (en) * 1994-03-01 1997-02-04 Intel Corporation Method and apparatus for aligning an instruction boundary in variable length macroinstructions with an instruction buffer
JP3212213B2 (ja) * 1994-03-16 2001-09-25 株式会社日立製作所 データ処理装置
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
DE69423206T2 (de) * 1994-04-28 2000-09-07 Hewlett Packard Co Rechnervorrichtung mit Mitteln zum Erzwingen der Ausführung von Befehlen in regelmässiger Folge
US5559975A (en) * 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
JP2982618B2 (ja) * 1994-06-28 1999-11-29 日本電気株式会社 メモリ選択回路
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
US5619663A (en) * 1994-09-16 1997-04-08 Philips Electronics North America Corp. Computer instruction prefetch system
US6496922B1 (en) * 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US5640526A (en) * 1994-12-21 1997-06-17 International Business Machines Corporation Superscaler instruction pipeline having boundary indentification logic for variable length instructions
US6006324A (en) * 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US5832249A (en) * 1995-01-25 1998-11-03 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US5737550A (en) * 1995-03-28 1998-04-07 Advanced Micro Devices, Inc. Cache memory to processor bus interface and method thereof
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5822558A (en) * 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor
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
US5991869A (en) * 1995-04-12 1999-11-23 Advanced Micro Devices, Inc. Superscalar microprocessor including a high speed instruction alignment unit
US5815736A (en) * 1995-05-26 1998-09-29 National Semiconductor Corporation Area and time efficient extraction circuit
US6237074B1 (en) * 1995-05-26 2001-05-22 National Semiconductor Corp. Tagged prefetch and instruction decoder for variable length instruction set and method of operation
JP3451595B2 (ja) * 1995-06-07 2003-09-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US5680578A (en) * 1995-06-07 1997-10-21 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify expanded functionality and a computer system employing same
US5768574A (en) * 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Microprocessor using an instruction field to expand the condition flags and a computer system employing the microprocessor
US5822778A (en) * 1995-06-07 1998-10-13 Advanced Micro Devices, Inc. Microprocessor and method of using a segment override prefix instruction field to expand the register file
US5875315A (en) * 1995-06-07 1999-02-23 Advanced Micro Devices, Inc. Parallel and scalable instruction scanning unit
US5867701A (en) * 1995-06-12 1999-02-02 Intel Corporation System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow
WO1997005546A1 (en) * 1995-08-01 1997-02-13 Bull Hn Information Systems Inc. Method for emulating program instructions
US5678032A (en) * 1995-09-06 1997-10-14 Bull Hn Information Systems Inc. Method of optimizing the execution of program instuctions by an emulator using a plurality of execution units
US5781789A (en) * 1995-08-31 1998-07-14 Advanced Micro Devices, Inc. Superscaler microprocessor employing a parallel mask decoder
US5794063A (en) * 1996-01-26 1998-08-11 Advanced Micro Devices, Inc. Instruction decoder including emulation using indirect specifiers
US5920713A (en) * 1995-10-06 1999-07-06 Advanced Micro Devices, Inc. Instruction decoder including two-way emulation code branching
EP0853779B1 (en) * 1995-10-06 2003-08-13 Advanced Micro Devices, Inc. Instruction predecode and multiple instruction decode
US6093213A (en) * 1995-10-06 2000-07-25 Advanced Micro Devices, Inc. Flexible implementation of a system management mode (SMM) in a processor
US5926642A (en) * 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5809273A (en) * 1996-01-26 1998-09-15 Advanced Micro Devices, Inc. Instruction predecode and multiple instruction decode
US5819056A (en) * 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5768553A (en) * 1995-10-30 1998-06-16 Advanced Micro Devices, Inc. Microprocessor using an instruction field to define DSP instructions
US5796974A (en) * 1995-11-07 1998-08-18 Advanced Micro Devices, Inc. Microcode patching apparatus and method
US5790825A (en) * 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
US5778246A (en) * 1995-12-27 1998-07-07 Intel Corporation Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline
US5740392A (en) * 1995-12-27 1998-04-14 Intel Corporation Method and apparatus for fast decoding of 00H and OFH mapped instructions
US5710914A (en) * 1995-12-29 1998-01-20 Atmel Corporation Digital signal processing method and system implementing pipelined read and write operations
US5819080A (en) * 1996-01-02 1998-10-06 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor
US5826089A (en) * 1996-01-04 1998-10-20 Advanced Micro Devices, Inc. Instruction translation unit configured to translate from a first instruction set to a second instruction set
KR100513138B1 (ko) * 1996-01-24 2005-09-07 선 마이크로시스템즈 인코퍼레이티드 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템
JP3634379B2 (ja) * 1996-01-24 2005-03-30 サン・マイクロシステムズ・インコーポレイテッド スタックキャッシングのための方法及び装置
US6105124A (en) * 1996-01-26 2000-08-15 Intel Corporation Method and apparatus for merging binary translated basic blocks of instructions
US5790821A (en) 1996-03-08 1998-08-04 Advanced Micro Devices, Inc. Control bit vector storage for storing control vectors corresponding to instruction operations in a microprocessor
US5867681A (en) * 1996-05-23 1999-02-02 Lsi Logic Corporation Microprocessor having register dependent immediate decompression
US5822560A (en) * 1996-05-23 1998-10-13 Advanced Micro Devices, Inc. Apparatus for efficient instruction execution via variable issue and variable control vectors per issue
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
US5896519A (en) * 1996-06-10 1999-04-20 Lsi Logic Corporation Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions
WO1998002798A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A superscalar microprocesser including a high speed instruction alignment unit
US5958061A (en) * 1996-07-24 1999-09-28 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6199152B1 (en) 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US5926832A (en) * 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
US5890009A (en) * 1996-12-12 1999-03-30 International Business Machines Corporation VLIW architecture and method for expanding a parcel
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US5918031A (en) * 1996-12-18 1999-06-29 Intel Corporation Computer utilizing special micro-operations for encoding of multiple variant code flows
US5923862A (en) * 1997-01-28 1999-07-13 Samsung Electronics Co., Ltd. Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions
US5909567A (en) * 1997-02-28 1999-06-01 Advanced Micro Devices, Inc. Apparatus and method for native mode processing in a RISC-based CISC processor
US5852727A (en) * 1997-03-10 1998-12-22 Advanced Micro Devices, Inc. Instruction scanning unit for locating instructions via parallel scanning of start and end byte information
US6047368A (en) * 1997-03-31 2000-04-04 Sun Microsystems, Inc. Processor architecture including grouping circuit
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US6009511A (en) * 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
US5940602A (en) * 1997-06-11 1999-08-17 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations
US5933626A (en) * 1997-06-12 1999-08-03 Advanced Micro Devices, Inc. Apparatus and method for tracing microprocessor instructions
US5930491A (en) * 1997-06-18 1999-07-27 International Business Machines Corporation Identification of related instructions resulting from external to internal translation by use of common ID field for each group
US5978901A (en) * 1997-08-21 1999-11-02 Advanced Micro Devices, Inc. Floating point and multimedia unit with data type reclassification capability
US6230259B1 (en) 1997-10-31 2001-05-08 Advanced Micro Devices, Inc. Transparent extended state save
US6438679B1 (en) 1997-11-03 2002-08-20 Brecis Communications Multiple ISA support by a processor using primitive operations
US6178482B1 (en) 1997-11-03 2001-01-23 Brecis Communications Virtual register sets
US6216218B1 (en) 1997-11-03 2001-04-10 Donald L. Sollars Processor having a datapath and control logic constituted with basis execution blocks
US6067601A (en) * 1997-11-03 2000-05-23 Brecis Communications Cache memory based instruction execution
US5940626A (en) * 1997-11-03 1999-08-17 Teragen Corporation Processor having an instruction set architecture implemented with hierarchically organized primitive operations
US6016539A (en) * 1997-11-03 2000-01-18 Teragen Corporation Datapath control logic for processors having instruction set architectures implemented with hierarchically organized primitive operations
US5923894A (en) * 1997-11-03 1999-07-13 Teragen Corporation Adaptable input/output pin control
US6157996A (en) * 1997-11-13 2000-12-05 Advanced Micro Devices, Inc. Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space
US6021484A (en) * 1997-11-14 2000-02-01 Samsung Electronics Co., Ltd. Dual instruction set architecture
US6167506A (en) 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6134649A (en) * 1997-11-17 2000-10-17 Advanced Micro Devices, Inc. Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction
US6134650A (en) * 1997-12-12 2000-10-17 Advanced Micro Devices, Inc. Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
US6061775A (en) * 1997-12-12 2000-05-09 Advanced Micro Devices, Inc. Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types
US6039765A (en) * 1997-12-15 2000-03-21 Motorola, Inc. Computer instruction which generates multiple results of different data types to improve software emulation
US6012138A (en) * 1997-12-19 2000-01-04 Lsi Logic Corporation Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US6044460A (en) * 1998-01-16 2000-03-28 Lsi Logic Corporation System and method for PC-relative address generation in a microprocessor with a pipeline architecture
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
CN1279435C (zh) * 1998-03-18 2006-10-11 高通股份有限公司 数字信号处理器
US6425070B1 (en) * 1998-03-18 2002-07-23 Qualcomm, Inc. Variable length instruction decoder
US6014735A (en) * 1998-03-31 2000-01-11 Intel Corporation Instruction set extension using prefixes
US6061786A (en) * 1998-04-23 2000-05-09 Advanced Micro Devices, Inc. Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction
US6141745A (en) * 1998-04-30 2000-10-31 Advanced Micro Devices, Inc. Functional bit identifying a prefix byte via a particular state regardless of type of instruction
US6175908B1 (en) 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6253309B1 (en) 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6460116B1 (en) 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6275927B2 (en) * 1998-09-21 2001-08-14 Advanced Micro Devices. Compressing variable-length instruction prefix bytes
US6240506B1 (en) 1998-10-02 2001-05-29 Advanced Micro Devices, Inc. Expanding instructions with variable-length operands to a fixed length
US6339822B1 (en) 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
US6260134B1 (en) * 1998-11-02 2001-07-10 Advanced Micro Devices, Inc. Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8121828B2 (en) * 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6978462B1 (en) 1999-01-28 2005-12-20 Ati International Srl Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US7013456B1 (en) 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
US7275246B1 (en) 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6763452B1 (en) 1999-01-28 2004-07-13 Ati International Srl Modifying program execution based on profiling
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US6453407B1 (en) * 1999-02-10 2002-09-17 Infineon Technologies Ag Configurable long instruction word architecture and instruction set
US6581154B1 (en) * 1999-02-17 2003-06-17 Intel Corporation Expanding microcode associated with full and partial width macroinstructions
EP1050799A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics S.A. Execution of a computer program
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
WO2001012755A1 (en) 1999-08-19 2001-02-22 Manufacturing And Technology Conversion International, Inc. System integration of a steam reformer and fuel cell
US7213129B1 (en) * 1999-08-30 2007-05-01 Intel Corporation Method and system for a two stage pipelined instruction decode and alignment using previous instruction length
US7254806B1 (en) 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
US6460132B1 (en) 1999-08-31 2002-10-01 Advanced Micro Devices, Inc. Massively parallel instruction predecoding
US6405303B1 (en) 1999-08-31 2002-06-11 Advanced Micro Devices, Inc. Massively parallel decoding and execution of variable-length instructions
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
EP1242874A1 (en) * 1999-12-31 2002-09-25 Intel Corporation External microcode
US6934832B1 (en) 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
US6654872B1 (en) * 2000-01-27 2003-11-25 Ati International Srl Variable length instruction alignment device and method
US6542862B1 (en) * 2000-02-18 2003-04-01 Hewlett-Packard Development Company, L.P. Determining register dependency in multiple architecture systems
US7584234B2 (en) * 2002-05-23 2009-09-01 Qsigma, Inc. Method and apparatus for narrow to very wide instruction generation for arithmetic circuitry
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
US6877084B1 (en) 2000-08-09 2005-04-05 Advanced Micro Devices, Inc. Central processing unit (CPU) accessing an extended register set in an extended register mode
US6981132B2 (en) 2000-08-09 2005-12-27 Advanced Micro Devices, Inc. Uniform register addressing using prefix byte
US6633969B1 (en) 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
SE0003398D0 (sv) * 2000-09-22 2000-09-22 Ericsson Telefon Ab L M Optimization of a pipelined processor system
EP1197847A3 (en) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US7149878B1 (en) 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
US6738792B1 (en) 2001-03-09 2004-05-18 Advanced Micro Devices, Inc. Parallel mask generator
JP4542722B2 (ja) * 2001-04-25 2010-09-15 富士通株式会社 命令処理方法
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7107584B2 (en) * 2001-10-23 2006-09-12 Microsoft Corporation Data alignment between native and non-native shared data structures
US7092869B2 (en) * 2001-11-14 2006-08-15 Ronald Hilton Memory address prediction under emulation
US20030093775A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Processing of self-modifying code under emulation
US7493470B1 (en) 2001-12-07 2009-02-17 Arc International, Plc Processor apparatus and methods optimized for control applications
US7278137B1 (en) 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
EP1470476A4 (en) * 2002-01-31 2007-05-30 Arc Int CONFIGURABLE DATA PROCESSOR WITH MULTI-LENGTH INSTRUCTION KIT ARCHITECTURE
US7785340B2 (en) * 2002-02-04 2010-08-31 Boston Scientific Scimed, Inc. Bonding sleeve for medical device
US6977162B2 (en) * 2002-03-01 2005-12-20 Ravgen, Inc. Rapid analysis of variations in a genome
US6957321B2 (en) 2002-06-19 2005-10-18 Intel Corporation Instruction set extension using operand bearing NOP instructions
EP1387252B1 (en) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Instruction prefix to indicate system commands
EP1387256B1 (en) * 2002-07-31 2018-11-21 Texas Instruments Incorporated Program counter adjustment based on the detection of an instruction prefix
US7349934B2 (en) * 2002-12-20 2008-03-25 Texas Instruments Incorporated Processor system and method with combined data left and right shift operation
US7444471B1 (en) 2002-12-30 2008-10-28 Transmeta Corporation Method and system for using external storage to amortize CPU cycle utilization
EP1447742A1 (en) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US20040193845A1 (en) * 2003-03-24 2004-09-30 Sun Microsystems, Inc. Stall technique to facilitate atomicity in processor execution of helper set
US7219218B2 (en) * 2003-03-31 2007-05-15 Sun Microsystems, Inc. Vector technique for addressing helper instruction groups associated with complex instructions
US7917734B2 (en) * 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7707389B2 (en) * 2003-10-31 2010-04-27 Mips Technologies, Inc. Multi-ISA instruction fetch unit for a processor, and applications thereof
US7404178B2 (en) * 2004-02-18 2008-07-22 Hewlett-Packard Development Company, L.P. ROM-embedded debugging of computer
US7873815B2 (en) * 2004-03-04 2011-01-18 Qualcomm Incorporated Digital signal processors with configurable dual-MAC and dual-ALU
US20060101504A1 (en) * 2004-11-09 2006-05-11 Veveo.Tv, Inc. Method and system for performing searches for television content and channels using a non-intrusive television interface and with reduced text input
US20070266406A1 (en) * 2004-11-09 2007-11-15 Murali Aravamudan Method and system for performing actions using a non-intrusive television with reduced text input
US7895218B2 (en) * 2004-11-09 2011-02-22 Veveo, Inc. Method and system for performing searches for television content using reduced text input
US20060155961A1 (en) * 2005-01-06 2006-07-13 International Business Machines Corporation Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor
US7646886B2 (en) * 2005-05-11 2010-01-12 Lockheed Martin Corporation Closely-spaced multiple targets detection using a regional window as a discriminant function
US7543287B2 (en) * 2005-06-30 2009-06-02 Intel Corporation Using a block device interface to invoke device controller functionality
US7788266B2 (en) * 2005-08-26 2010-08-31 Veveo, Inc. Method and system for processing ambiguous, multi-term search queries
US7779011B2 (en) * 2005-08-26 2010-08-17 Veveo, Inc. Method and system for dynamically processing ambiguous, reduced text search queries and highlighting results thereof
US7454492B2 (en) * 2005-08-26 2008-11-18 International Business Machines Corporation Method and apparatus for configuring and modeling server information in an enterprise tooling environment
US20070074199A1 (en) * 2005-09-27 2007-03-29 Sebastian Schoenberg Method and apparatus for delivering microcode updates through virtual machine operations
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
US7644054B2 (en) * 2005-11-23 2010-01-05 Veveo, Inc. System and method for finding desired results by incremental search using an ambiguous keypad with the input containing orthographic and typographic errors
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US7792815B2 (en) 2006-03-06 2010-09-07 Veveo, Inc. Methods and systems for selecting and presenting content based on context sensitive user preferences
US8073860B2 (en) 2006-03-30 2011-12-06 Veveo, Inc. Method and system for incrementally selecting and providing relevant search engines in response to a user query
WO2007124436A2 (en) 2006-04-20 2007-11-01 Veveo, Inc. User interface methods and systems for selecting and presenting content based on relationships between the user and other members of an organization
EP2062171A4 (en) * 2006-09-14 2010-10-06 Veveo Inc METHOD AND SYSTEMS FOR THE DYNAMIC REORGANIZATION OF SEARCH RESULTS IN HIERARCHICALLY ORGANIZED CLAUSE CLUSTERS
US7925986B2 (en) 2006-10-06 2011-04-12 Veveo, Inc. Methods and systems for a linear character selection display interface for ambiguous text input
WO2008063987A2 (en) 2006-11-13 2008-05-29 Veveo, Inc. Method of and system for selecting and presenting content based on user identification
US9177111B1 (en) 2006-11-14 2015-11-03 Hitachi Global Storage Technologies Netherlands B.V. Systems and methods for protecting software
US8549424B2 (en) 2007-05-25 2013-10-01 Veveo, Inc. System and method for text disambiguation and context designation in incremental search
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US8028153B2 (en) * 2008-08-14 2011-09-27 International Business Machines Corporation Data dependent instruction decode
CN101853148B (zh) * 2009-05-19 2014-04-23 威盛电子股份有限公司 适用于微处理器的装置及方法
CN101819517B (zh) * 2009-05-19 2013-05-22 威盛电子股份有限公司 适用于微处理器的装置及方法
US9166714B2 (en) 2009-09-11 2015-10-20 Veveo, Inc. Method of and system for presenting enriched video viewing analytics
TWI424445B (zh) 2009-12-29 2014-01-21 Macronix Int Co Ltd 指令解碼電路及其方法
US20110191330A1 (en) 2010-02-04 2011-08-04 Veveo, Inc. Method of and System for Enhanced Content Discovery Based on Network and Device Access Behavior
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
EP2668565B1 (en) 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
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
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file 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
US8880857B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
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)
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load 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
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
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
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
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
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US8806112B2 (en) 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US8645618B2 (en) 2011-07-14 2014-02-04 Lsi Corporation Flexible flash commands
JP5932347B2 (ja) * 2012-01-18 2016-06-08 ピーエスフォー ルクスコ エスエイアールエルPS4 Luxco S.a.r.l. 半導体装置
CN103279325B (zh) * 2013-03-11 2015-12-09 浙江大学 加密文本数据时可提高SoC处理器指令运算效率的方法
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US20140281398A1 (en) * 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US10198269B2 (en) * 2013-08-28 2019-02-05 Via Technologies, Inc. Dynamic reconfiguration of multi-core processor
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator
FR3106422B1 (fr) 2020-01-20 2021-12-10 Continental Automotive Passerelle de communication de trames de données pour véhicule automobile

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2380854A2 (en) * 2004-04-22 2011-10-26 Siemens Industry, Inc. Filtration apparatus comprising a membrane bioreactor and a treatment vessel for digesting organic materials

Family Cites Families (113)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US510341A (en) * 1893-12-05 Composition and process of producing same for commutator-brushes
US3346851A (en) * 1964-07-08 1967-10-10 Control Data Corp Simultaneous multiprocessing computer system
US3789365A (en) * 1971-06-03 1974-01-29 Bunker Ramo Processor interrupt system
US3771138A (en) * 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
US3916388A (en) * 1974-05-30 1975-10-28 Ibm Shifting apparatus for automatic data alignment
US4084235A (en) * 1975-04-14 1978-04-11 Honeywell Information Systems Inc. Emulation apparatus
US4034349A (en) * 1976-01-29 1977-07-05 Sperry Rand Corporation Apparatus for processing interrupts in microprocessing systems
AU529675B2 (en) * 1977-12-07 1983-06-16 Honeywell Information Systems Incorp. Cache memory unit
US4315314A (en) * 1977-12-30 1982-02-09 Rca Corporation Priority vectored interrupt having means to supply branch address directly
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4189772A (en) * 1978-03-16 1980-02-19 International Business Machines Corporation Operand alignment controls for VFL instructions
US4189768A (en) * 1978-03-16 1980-02-19 International Business Machines Corporation Operand fetch control improvement
US4236206A (en) * 1978-10-25 1980-11-25 Digital Equipment Corporation Central processor unit for executing instructions of variable length
US4228495A (en) * 1978-12-19 1980-10-14 Allen-Bradley Company Multiprocessor numerical control system
JPS6041768B2 (ja) * 1979-01-19 1985-09-18 株式会社日立製作所 デ−タ処理装置
US4296470A (en) * 1979-06-21 1981-10-20 International Business Machines Corp. Link register storage and restore system for use in an instruction pre-fetch micro-processor interrupt system
JPS5616248A (en) * 1979-07-17 1981-02-17 Matsushita Electric Ind Co Ltd Processing system for interruption
CA1174370A (en) * 1980-05-19 1984-09-11 Hidekazu Matsumoto Data processing unit with pipelined operands
JPS5743239A (en) * 1980-08-27 1982-03-11 Hitachi Ltd Data processor
JPS6028015B2 (ja) * 1980-08-28 1985-07-02 日本電気株式会社 情報処理装置
US4434461A (en) * 1980-09-15 1984-02-28 Motorola, Inc. Microprocessor with duplicate registers for processing interrupts
JPS5757345A (en) * 1980-09-24 1982-04-06 Toshiba Corp Data controller
US4654781A (en) * 1981-10-02 1987-03-31 Raytheon Company Byte addressable memory for variable length instructions and data
JPS58151655A (ja) * 1982-03-03 1983-09-08 Fujitsu Ltd 情報処理装置
US4514803A (en) * 1982-04-26 1985-04-30 International Business Machines Corporation Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof
JPS5932045A (ja) 1982-08-16 1984-02-21 Hitachi Ltd 情報処理装置
EP0124517A1 (en) * 1982-10-22 1984-11-14 International Business Machines Corporation Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter
JPS59154546A (ja) * 1983-02-24 1984-09-03 Toshiba Corp 情報処理装置
US4569016A (en) * 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
US4800486A (en) * 1983-09-29 1989-01-24 Tandem Computers Incorporated Multiple data patch CPU architecture
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
GB8329509D0 (en) * 1983-11-04 1983-12-07 Inmos Ltd Computer
US4629989A (en) * 1983-11-10 1986-12-16 General Electric Company Patient alignment system for NMR studies
US4720779A (en) * 1984-06-28 1988-01-19 Burroughs Corporation Stored logic program scanner for a data processor having internal plural data and instruction streams
US4766564A (en) * 1984-08-13 1988-08-23 International Business Machines Corporation Dual putaway/bypass busses for multiple arithmetic units
NL193475C (nl) * 1984-12-27 1999-11-02 Sony Corp Microprocessorinrichting.
US4714994A (en) * 1985-04-30 1987-12-22 International Business Machines Corp. Instruction prefetch buffer control
JPH0762823B2 (ja) * 1985-05-22 1995-07-05 株式会社日立製作所 デ−タ処理装置
US4739471A (en) * 1985-06-28 1988-04-19 Hewlett-Packard Company Method and means for moving bytes in a reduced instruction set computer
US4722049A (en) * 1985-10-11 1988-01-26 Unisys Corporation Apparatus for out-of-order program execution
JPS62152043A (ja) * 1985-12-26 1987-07-07 Nec Corp 命令コ−ドアクセス制御方式
JPS62165242A (ja) * 1986-01-17 1987-07-21 Toshiba Corp プロセツサ
DE3751503T2 (de) * 1986-03-26 1996-05-09 Hitachi Ltd Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen.
US4903196A (en) * 1986-05-02 1990-02-20 International Business Machines Corporation Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor
JPS6324428A (ja) * 1986-07-17 1988-02-01 Mitsubishi Electric Corp キヤツシユメモリ
US4766566A (en) * 1986-08-18 1988-08-23 International Business Machines Corp. Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing
US4841476A (en) * 1986-10-06 1989-06-20 International Business Machines Corporation Extended floating point operations supporting emulation of source instruction execution
US5133072A (en) * 1986-11-13 1992-07-21 Hewlett-Packard Company Method for improved code generation in reduced instruction set computers
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
IL84821A (en) * 1986-12-15 1992-07-15 United Technologies Corp Reduced instruction set computing apparatus and methods
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
JPS63163930A (ja) * 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US5226170A (en) * 1987-02-24 1993-07-06 Digital Equipment Corporation Interface between processor and special instruction processor in digital data processing system
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US4926323A (en) * 1988-03-03 1990-05-15 Advanced Micro Devices, Inc. Streamlined instruction processor
US4992930A (en) * 1988-05-09 1991-02-12 Bull Hn Information Systems Inc. Synchronous cache memory system incorporating tie-breaker apparatus for maintaining cache coherency using a duplicate directory
US5003462A (en) * 1988-05-31 1991-03-26 International Business Machines Corporation Apparatus and method for implementing precise interrupts on a pipelined processor with multiple functional units with separate address translation interrupt means
US4897810A (en) * 1988-06-13 1990-01-30 Advanced Micro Devices, Inc. Asynchronous interrupt status bit circuit
JP3034257B2 (ja) * 1988-06-22 2000-04-17 大日本印刷株式会社 シャドウマスク製版用パターン及び製造方法
US5006980A (en) * 1988-07-20 1991-04-09 Digital Equipment Corporation Pipelined digital CPU with deadlock resolution
US5019967A (en) * 1988-07-20 1991-05-28 Digital Equipment Corporation Pipeline bubble compression in a computer system
JPH0673105B2 (ja) * 1988-08-11 1994-09-14 株式会社東芝 命令パイプライン方式のマイクロプロセッサ
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
JPH0638676B2 (ja) * 1988-09-19 1994-05-18 松下電工株式会社 ワイヤレス送信制御システム
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
GB8828817D0 (en) * 1988-12-09 1989-01-18 Int Computers Ltd Data processing apparatus
US5075840A (en) * 1989-01-13 1991-12-24 International Business Machines Corporation Tightly coupled multiprocessor instruction synchronization
US5127091A (en) * 1989-01-13 1992-06-30 International Business Machines Corporation System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor
EP0461257B1 (en) * 1989-01-17 1997-04-23 Fujitsu Limited Microprocessor sequencer for controlling the decoding of varable length instructions
US4985825A (en) * 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
US5148528A (en) * 1989-02-03 1992-09-15 Digital Equipment Corporation Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length
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
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5768575A (en) * 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
GB2230116B (en) * 1989-04-07 1993-02-17 Intel Corp An improvement for pipelined decoding of instructions in a pipelined processor
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
JPH0314025A (ja) * 1989-06-13 1991-01-22 Nec Corp 命令実行制御方式
DE69031257T2 (de) * 1989-09-21 1998-02-12 Texas Instruments Inc Integrierte Schaltung mit einem eingebetteten digitalen Signalprozessor
US5019937A (en) * 1989-10-30 1991-05-28 A. B. Chance Company Circuit improvement apparatus having combination current limiting fuse and resettable vacuum switch to prevent single-phasing of three-phase loads
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5193206A (en) * 1989-12-27 1993-03-09 Motorola, Inc. Reduce instruction set microprocessor
US5168571A (en) * 1990-01-24 1992-12-01 International Business Machines Corporation System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data
US5230068A (en) * 1990-02-26 1993-07-20 Nexgen Microsystems Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence
DE69130588T2 (de) * 1990-05-29 1999-05-27 Nat Semiconductor Corp Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
CA2038264C (en) 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5430862A (en) * 1990-06-29 1995-07-04 Bull Hn Information Systems Inc. Emulation of CISC instructions by RISC instructions using two pipelined stages for overlapped CISC decoding and RISC execution
US5778423A (en) * 1990-06-29 1998-07-07 Digital Equipment Corporation Prefetch instruction for improving performance in reduced instruction set processor
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
US5163139A (en) * 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions
EP0479390B1 (en) * 1990-10-05 1999-01-07 Koninklijke Philips Electronics N.V. Processing device including a memory circuit and a group of functional units
US5450575A (en) * 1991-03-07 1995-09-12 Digital Equipment Corporation Use of stack depth to identify machine code mistakes
US5307504A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5307492A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation Mapping assembly language argument list references in translating code for different machine architectures
DE69231762T2 (de) 1991-07-08 2001-07-26 Seiko Epson Corp Risc-prozessor mit dehnbarer architektur
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
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
US5335460A (en) * 1992-04-27 1994-08-09 Smith Jr Joseph H Tilt to clean gutter system
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US5819056A (en) * 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5778210A (en) * 1996-01-11 1998-07-07 Intel Corporation Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US6138271A (en) * 1996-06-26 2000-10-24 Rockwell Technologies, Llc Operating system for embedded computers
JP3274608B2 (ja) * 1996-07-12 2002-04-15 日本電気株式会社 携帯端末装置
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
US6442570B1 (en) * 1997-10-27 2002-08-27 Microsoft Corporation Object identification and data communication during an object synchronization process
EP1073957B1 (en) * 1998-03-23 2003-05-21 Microsoft Corporation Application program interfaces in an operating system
US6253309B1 (en) * 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6862617B1 (en) * 1998-10-12 2005-03-01 Microsoft Corp. System and method for synchronizing objects between two devices
US7032213B1 (en) * 1999-09-01 2006-04-18 Microsoft Corporation Fixing incompatible applications using a light debugger
US6959330B1 (en) * 2000-05-16 2005-10-25 Palmsource, Inc. Sync-time read only memory image binding for limited resource devices

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2380854A2 (en) * 2004-04-22 2011-10-26 Siemens Industry, Inc. Filtration apparatus comprising a membrane bioreactor and a treatment vessel for digesting organic materials

Also Published As

Publication number Publication date
EP1028370A2 (en) 2000-08-16
EP0636257B1 (en) 2000-11-08
KR950701100A (ko) 1995-02-20
JP2000215051A (ja) 2000-08-04
EP1028370A3 (en) 2002-02-20
JP2000215050A (ja) 2000-08-04
EP0636257A1 (en) 1995-02-01
US7664935B2 (en) 2010-02-16
US5438668A (en) 1995-08-01
WO1993020507A3 (en) 1994-01-06
US6263423B1 (en) 2001-07-17
US20050251653A1 (en) 2005-11-10
US5619666A (en) 1997-04-08
WO1993020507A2 (en) 1993-10-14
DE69333630T2 (de) 2005-09-22
DE69333630D1 (de) 2004-10-21
EP1028370B1 (en) 2004-09-15
US5983334A (en) 1999-11-09
DE69329644T2 (de) 2001-03-01
US6954847B2 (en) 2005-10-11
US5546552A (en) 1996-08-13
KR100371929B1 (ko) 2003-02-12
JPH07505968A (ja) 1995-06-29
DE69329644D1 (de) 2000-12-14
US20030084270A1 (en) 2003-05-01
US20080162880A1 (en) 2008-07-03
JP3547052B2 (ja) 2004-07-28
US7343473B2 (en) 2008-03-11

Similar Documents

Publication Publication Date Title
KR100343530B1 (ko) 씨아이에스씨-알아이에스씨명령어번역정렬및디코딩
US8200987B2 (en) Dynamic object-level code translation for improved performance of a computer processor
EP0859980B1 (en) Microcode patching apparatus and method
US5598546A (en) Dual-architecture super-scalar pipeline
US5568646A (en) Multiple instruction set mapping
US5537629A (en) Decoder for single cycle decoding of single prefixes in variable length instructions
US20010010072A1 (en) Instruction translator translating non-native instructions for a processor into native instructions therefor, instruction memory with such translator, and data processing apparatus using them
EP1023660A1 (en) Processor utilizing template field instruction encoding
KR19990064091A (ko) Risc형 명령 세트 및 슈퍼스칼라 마이크로프로세서
JP3544335B2 (ja) 複合命令ストリームのアライメントシステム
JPH11510288A (ja) 間接指定子を用いるエミュレーションを含む命令デコーダ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
N231 Notification of change of applicant
GRNT Written decision to grant
G170 Re-publication after modification of scope of protection [patent]
FPAY Annual fee payment

Payment date: 20120530

Year of fee payment: 11

EXPY Expiration of term