KR100284788B1 - 데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템 - Google Patents

데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템 Download PDF

Info

Publication number
KR100284788B1
KR100284788B1 KR1019980032563A KR19980032563A KR100284788B1 KR 100284788 B1 KR100284788 B1 KR 100284788B1 KR 1019980032563 A KR1019980032563 A KR 1019980032563A KR 19980032563 A KR19980032563 A KR 19980032563A KR 100284788 B1 KR100284788 B1 KR 100284788B1
Authority
KR
South Korea
Prior art keywords
customer
instruction
instructions
entry
condition
Prior art date
Application number
KR1019980032563A
Other languages
English (en)
Other versions
KR19990029288A (ko
Inventor
제임스 에이. 칼
소움미야 맬릭
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Publication of KR19990029288A publication Critical patent/KR19990029288A/ko
Application granted granted Critical
Publication of KR100284788B1 publication Critical patent/KR100284788B1/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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

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)

Abstract

원시 명령 세트를 가지며 고객 명령 세트내의 고객 명령들을 에뮬레이트하는 프로세서와 이 프로세서의 동작 방법이 개시된다. 본 발명의 방법에 따르면, 적어도 하나의 고객 브랜치 명령과 기타 다른 명령을 포함하는 일련의 고객 명령이 메모리 내에 저장된다. 게다가, 원시 명령들로 구성되어 있으며 일련의 고객 명령을 에뮬레이트하는데 이용될 수 있는 하나 또는 그 이상의 의미 루틴이 메모리내에 저장된다. 일련의 고객 명령 내의 기타 다른 고객 명령 각각에 대해서는 엔트리가 상기 기타 다른 고객 명령의 수신 순서에 따라서 다중-엔트리 큐 내에 저장된다. 엔트리 각각은 적어도 하나의 의미 루틴의 메모리 내의 로케이션의 표시와 관련 고객 명령에 의해 세트 또는 리세트될 수 있는 조건을 나타내는 조건 필드를 포함한다. 다중-엔트리 큐내의 엔트리들에 응답하여, 이 엔트리들을 이용하여 프로세서에서 일련의 고객 명령이 에뮬레이트되어서 하나 또는 그 이상의 의미 루틴 중 선택된 루틴을 액세스하여 실행시킨다. 일련의 고객 명령 내의 조건 고객 브랜치 명령의 검출에 응답하여, 일련의 고객 명령 내의 조건 고객 브랜치 명령에 선행하는 명령에 관련된 다중-엔트리 큐 내의 엔트리가 조건 브랜치 명령이 의존하는 조건의 표시를 포함하는 조건 필드를 갖고 있는지 여부를 판단한다. 판단 결과가 긍정이면, 그 표시는 조건 고객 브랜치 명령을 분석하는데 이용된다.

Description

데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법 및 시스템
본 발명은 일반적으로 데이터 처리를 위한 방법 및 시스템에 관한 것으로서, 특히 데이터 처리 시스템에서 여러 다른 구조를 에뮬레이트하기 위한(for emulating differing architectures) 방법 및 시스템에 관한 것이다. 더욱 상세하게는, 본 발명은 데이터 처리 시스템에서 고객 브랜치 명령(guest branch instructions)을 에뮬레이트하기 위한 방법 및 시스템에 관한 것이다.
PowerPCTM구조는 컴퓨터 시스템 패밀리(a family of computer systems)에 대한 명령 세트, 레지스터, 어드레싱 모드 등의 정의(a definition of the instruction set, registers, addressing modes, and the like)를 제공하는 고성능 축소 명령형 컴퓨터(high-performance reduced instruction set (RISC)) 프로세서 구조이다. PowerPCTM구조는 특정 구성의 마이크로프로세서 칩 또는 그 구조의 사례(an instance of the architecture)를 구현하는데 이용되는 칩과는 어느 정도 무관하기 때문에, PowerPC 601TM, 602TM, 603TM및 604TM을 비롯하여 다양한 구현 형태로 구성되어 왔다. 이들 프로세서의 구성 및 동작은 PowerPC 604TMRISC Microprocessor User's Manual 와 같은 공개 매뉴얼에서 설명되고 있는데, 이 매뉴얼은 IBM Microelectronics로부터 Order No. MPR604UMU-01으로서 구입가능한 것으로서 본 출원 명세서에 참고로 인용된다.
현시대의 많은 프로세서에 있어서 사실이듯이, RISC 구조는 CISC (복합 명령형 컴퓨터(complex instruction set computer)) 구조와 비교해 볼 때 그의 고유한 고성능 잠재성 덕분에 PowerPCTM용으로서 선택되고 있다. RISC 프로세서의 구성을 최적화시켜 원시(native) RISC 명령의 실행시에 프로세서의 성능을 극대화하는 것이 바람직한데, CISC 프로세서 예로서 Intel x86 및 Motorola 68K용으로 작성된 상용 소프트웨어를 수용할 수 있게 하는 것에 의해 호환성을 증진시키는 것도 바람직하다.
따라서, 에뮬레이터 메카니즘(emulator mechanism)을 미국 특허 출원 제 08/591,291 호 및 제 08/581,793 호에 개시된 바와 같이 PowerPCTM프로세서 내에 도입할 수 있다. 이 개시된 에뮬레이터 메카니즘은 고객 명령(예로서, 가변길이(variable-length) CISC 명령)이 에뮬레이트될 수 있게 하는데, 이는 원시 RISC 명령으로부터 형성된 대응하는 의미 루틴(corresponding semantic routines)을 실행함으로써 이루어진다. 따라서, 프로세서는 두개의 명령 스트림, 즉, 에뮬레이트될 명령을 포함하는 고객 명령 스트림과 고객 명령의 에뮬레이트를 위해 이용되는 의미 루틴 내의 원시 명령을 포함하는 원시 명령 스트림을 관리해야만 한다. 고객 명령의 에뮬레이션 시에 고성능을 유지하기 위해서는, 그들 고객 및 원시 명령 스트림을 관리하는 프로세서 내에, 브랜칭 및 예외 처리(branching and exception handling) 기능을 갖춘 효과적인 메카니즘이 필요하다.
따라서, 본 발명의 목적은 데이터 처리를 위한 개선된 방법 및 시스템을 제공하는 데에 있다.
본 발명의 다른 목적은 데이터 처리 시스템에서 서로 다른 구조를 에뮬레이트하기 위한(for emulating differing architectures) 방법 및 시스템을 제공하는 데에 있다.
본 발명의 또 다른 목적은 데이터 처리 시스템에서 고객 브랜치 명령을 에뮬레이트하기 위한 방법 및 시스템을 제공하는 데에 있다.
상기한 목적들은 후술하는 바와 같이 달성된다. 본 발명의 일 실시예에 따르면, 호스트 컴퓨터 시스템에 대한 에뮬레이션 메카니즘(an emulation mechanism for a host computer system)은 고객 명령(guest instructions)이 원시 명령(native instructions)으로 이루어진 의미 루틴(semantic routines)에 의해서 실행될 수 있게 한다. 호스트 프로세서에 대한 원시 명령(native instructions)은 특정 포맷 예로서 RISC 구조에 의해 특정되는 포맷을 갖는 반면에, 고객 명령은 다른 컴퓨터 구조에 대한 포맷 예로서 가변길이 CISC 명령 포맷을 갖는다. 프로세서는 수신 순서로 현재 인출되는 고객 명령을 저장하기 위해 다중-엔트리 포인터 큐(multiple-entry pointer queue)를 이용하는 고객 명령 인출 및 처리를 위한 에뮬레이터 유니트(emulator unit)를 포함한다. 포인터 큐 내의 각 엔트리는 관련 고객 명령에 대한 의미 루틴의 메모리 내의 위치를 나타내는 오프셋(offset), (만일 있다면) 고객 명령에 대한 직접 데이터(immediate data), 대응 의미 루틴(corresponding semantic routine)의 길이, 고객 명령에 의한 산술/논리 연산의 결과를 나타내는 조건 필드(condition field), 유효 비트(valid bits) 및 다른 적절한 데이터를 포함한다. 프로세서는 포인터 큐 내의 엔트리의 내용을 사용해서 루틴을 인출하는 식으로 큐 내의 엔트리에 응답하여 의미 루틴을 실행한다. 제1 유형의 무조건 간접 고객 브랜치 명령(CALL과 같은 것)을 에뮬레이트하는데 이용된 의미 루틴은 추론적 복귀 어드레스(speculative return address)를 연산하고, 이것을 메모리에 임시로 저장하고, 타겟 (target) 어드레스에서 인출 동작을 개시한다. 제2 유형의 무조건 간접 고객 브랜치 명령(RETURN과 같은 것)을 에뮬레이트하는데 이용된 의미 루틴은 메모리로부터 추론적 복귀 어드레스를 검색하고, 이 추론적 복귀 어드레스에서의 고객 명령의 인출 동작을 개시한 다음에, 정확한 복귀 어드레스를 연산한다. 프로세서가 고객 명령에 대한 의미 루틴의 실행을 완료한 후에는 포인터 큐로부터 관련 엔트리가 제거된다.
본 발명의 상기 및 다른 목적, 특징 및 장점은 다음의 상세 설명으로부터 명백해 질 것이다.
본 발명의 신규한 특징은 특허청구범위에 기재한다. 그러나, 본 발명 자체, 양호한 사용 모드, 또 다른 목적 및 장점은 도면을 참조한 예시적 실시예에 대한 다음의 상세 설명으로부터 가장 잘 이해될 것이다.
도 1은 본 발명의 방법 및 시스템이 유리하게 이용될 수 있는 데이터 처리 시스템의 실시예를 도시한 도면.
도 2는 도 1에 도시한 프로세서의 상세 블록도.
도 3은 도 2에 도시한 프로세서 내의 에뮬레이션 지원 유니트(EAU)의 상세 블록도.
도 4는 도 3에 도시한 EAU내의 고객 명령 큐의 상세 블록도.
도 5는 본 발명에 따른 고객 브랜치 명령 처리 방법을 나타낸 논리적 플로우챠트.
<도면의 주요부분에 대한 부호의 설명>
4 : CPU
5 : 메모리 제어기
11 : PCI 호스트 브리지
12 : PCI 버스
18 : 운영 체제
19 : 의미 루틴
20 : 고객 명령
32 : 명령 캐시
34 : 데이터 캐시
36 : 순차 인출기
38 : 브랜치 처리 유니트
40 : 명령 큐
42 : 디스패치 유니트
44 : 완료 유니트
56, 58 : 명령 관리 유니트(IMMU)
62 : GPR 명칭변경 버퍼
66 : FPR 명칭변경 버퍼
70 : 에뮬레이션 지원 유니트(EAU)
72 : 명령 버퍼
74 : 명령 사전 인출 유니트
76 : 세그먼트 전용 레지스터(SPR)
78 : 명령 디코더
80 : 고객 브랜치 유니트
82 : 브랜치 히스토리 테이블(BHT)
83 : 고객 플래그
90 : 태그 발생 유니트
92 : 고객 캐시
94 : 고객 디스패치 유니트
100 : 고객 명령 큐
이제 도면 특히 도 1을 참조하면, 본 발명에 따른 데이터 처리 시스템(2)의 상위 레벨 블록도를 볼 수 있다. 도시한 바와 같이, 데이터 컴퓨터 시스템을 구성하는 데이터 처리 시스템(2)은 하나 이상의 CPU(4)을 포함하는데, 이 CPU(4)는 표준 하드웨어 구성을 가진 데이터 처리 시스템(2)의 다른 구성요소에 연결된다. 예를 들어, 메모리 제어기(5) 및 시스템 버스(7)를 통해 메인 메모리(6)와 상호접속된다. 시스템 버스(7)는 또한 PCI(Peripheral Component Interconnect) 호스트 브리지(host bridge)(11)에 의해서 PCI 버스에 연결됨으로써, 시스템 버스(7)에 연결된 디바이스들과 주변 구성요소(10) 및 I/O 구성요소(8) 간의 통신이 가능하게 된다. 설명 목적 상, CPU(4)를 IBM 사가 제조한 PowerPCTM급 프로세서 중의 하나에 의해 구현한 예시적인 실시예를 참조해서 본 발명을 후술할 것이나, 다양한 다른 프로세서를 이용할 수도 있음을 알 수 있을 것이다.
PowerPCTM프로세서로서 구현하는 경우에는, 각각의 CPU(4)가 각종 레지스터, 버퍼, 실행 유니트 및 축소 명령형 컴퓨팅(reduced instruction set computing(RISC)) 기법에 따라 동작하는 기능 유니트를 포함하는 단일 집적 회로 슈퍼스칼라 마이크로프로세서(single integrated circuit superscalar microprocessor)를 구비하는 것이 바람직하다. 각각의 CPU(4)는 메모리 맵(memory map)(14)으로부터 제공되는 (예를 들어, 응용 프로그램(16) 및 운영 체제/커널(operating system/kernel)(18)을 형성하는 명령과 같은) PowerPCTM명령 세트 구조의 RISC 명령을 실행한다. CPU(4)에 대해 원시적인 PowerPCTM명령 세트 구조는 다수의 공개 문헌 예를 들어 PowerPCTMInstruction Set Architecture 및 PowerPCTM603 RISC Microprocessor User's Manual (Order No. MPR603UMCI-01)에서 정의되어 있으며, 이들 문헌은 IBM Microelectronics으로부터 구입할 수 있다. RISC 명령 예를 들어 PowerPCTM명령 세트 구조에 의해서 정의되는 명령은 레지스터-레지스터 및 레지스터-메모리 동작만을 포함하고 메모리-메모리 동작은 포함하지 않으며 종종 한개의 기계 사이클(one machine cycle)에서 마이크로코딩없이(without microcoding) 실행되는 고정된 명령 길이(fixed instruction length)(예를 들어 32-비트)를 갖는 것으로서 특징화할 수 있다. 각각의 CPU(4)는 또한 본 발명에 따라 적용되어 에뮬레이션에 의해 고객 명령(예를 들어, CPU(4)에 대해 원시적이지 않은 CISC 명령 또는 어떤 다른 명령 세트)을 실행한다. 후술하는 바와 같이, 고객 명령(20)은 제각기 둘 이상의 원시 명령을 포함하는 하나 이상의 의미 루틴(19)을 인출해서 실행하는 것에 의해 제각기 에뮬레이트된다. 예를 들어, 고객 명령(20)은 메모리-메모리 CISC 명령, 예를 들어,
ADD MEM1, MEM2, MEM3
일 수도 있는데, 이것은 "메모리 위치 #1의 내용을 메모리 위치 #2의 내용에 가산하고 그 결과를 메모리 위치 #3에 저장하는 것"을 의미한다. 고객 CISC 명령을 모방하기 위한 의미 루틴(19)은 다음의 원시 RISC 명령,
LOAD REG1, MEM1
LOAD REG2, MEM2
ADD REG3, REG2, REG1
STORE REG3, MEM3
를 포함할 수도 있다. 이 대표적인 의미 루틴(19)은 메모리 위치 #1 및 #2의 각각의 내용을 레지스터 #1 and #2에 제각기 로딩하고, 레지스터 #1 및 #2의 내용을 가산하고, 그 가산 결과를 레지스터 #3에 저장하며, 레지스터 #3의 내용을 메모리 위치 #3에 저장한다. 또한, 도1에 도시한 바와 같이, 메모리 맵(14)은 양호하게는 의미 루틴 합성 코드(semantic routine synthesis code)(22)도 포함하는데, 이 코드는 고객 명령에 대응하는 의미 루틴이 영역(19) 내에 있는 의미 루틴 중의 하나가 아닌 경우에 그 의미 루틴을 합성하는데 사용될 수 있는 사용자-레벨 코드(user-level code)를 포함한다.
도 2를 참조하면, CPU(4)의 보다 상세한 블록도를 볼 수 있다. 도시한 바와 같이, CPU(4)는 버스 인터페이스 유니트(bus interface unit : BIU)(30)를 통해서 시스템 버스(12)에 연결된다. BIU(30)는 시스템 버스(12)에 연결된 디바이스와 CPU(4)간의 정보 전달을 제어한다. BIU(30)는 또한 명령 캐시(cache)(32)와 데이터 캐시(34)에도 연결된다. 명령 캐시(32)와 데이터 캐시(34)는 고속 캐시로서, CPU(4)가 메인 메모리(6)로부터 이전에 전달된 명령 및 데이터에 비교적 신속하게 액세스할 수 있게 함으로써 데이터 처리 시스템(2)의 동작 속도를 향상시킨다. 명령 캐시(32)는 또한 순차 인출기(sequential fetcher)(36)에 연결되는데, 이 순차 인출기는 각각의 실행 사이클 동안 명령 캐시(32)로부터 원시 명령을 인출한다. 순차 인출기(32)는 명령 캐시(32)로부터 인출된 브랜치 명령(branch instructions)을 실행을 위해 브랜치 처리 유니트(branch processing unit : BPU)(38)로 전송하나, 명령 큐(40) 내에 임시적으로 순차 명령을 버퍼링(임시 저장)한다. 명령 큐(40) 내에 저장된 순차 명령은 디스패치 유니트(dispatch unit)(42)에 의해서 CPU(4)의 순차 실행 회로에 순차적으로 디스패칭된다.
도시한 예시적인 실시예에서, CPU(4)의 순차 실행 회로는 3개의(또는 4개 이상의) 실행 유니트 즉 고정-소수점 유니트(fixed-point unit : FXU)(50), 로드/저장 유니트(load/store unit : LSU)(52) 및 부동-소수점 유니트(floating-point unit : FPU)(54)를 포함한다. 이들 3개 실행 유니트의 각각은 1개 이상 클래스의 원시 명령을 실행할 수 있으며, 이들 모든 실행 유니트는 각각의 프로세서 사이클 동안 동시적으로 동작할 수 있다. 예를 들어, FXU(50)는 고정-소수점 수학 연산, 예컨대 가산, 감산, AND, OR 및 XOR를 특정화된 범용 레지스터(specified general purpose registers : GPR)(60) 또는 GPR 명칭변경 버퍼(rename buffers)(62)로부터 수신된 소스 피연산자(source operands)를 이용하여 수행한다. 고정-소수점 명령의 실행 후, FXU(50)는 그 명령의 데이터 결과를 GPR 명칭변경 버퍼(62)에 출력하고, 이 버퍼는 명령 처리의 되기록 단계(writeback stage) 동안 데이터 결과가 GPR(60)의 적어도 하나에 기록될 때까지 그 데이터 결과를 임시 저장한다. 이와 유사하게, FPU(54)는 부동-소수점 연산 예로서 부동-소수점 승산, 제산을 부동-소수점 레지스터(floating-point registers : FPR)(64) 또는 FPR 명칭변경 버퍼(66)로부터 수신된 소스 피연산자를 이용하여 수행한다. FPU(54)는 부동-소수점 명령의 실행 결과에 따른 데이터를 선택된 FPR 명칭변경 버퍼(66)에 출력하고, 이 버퍼는 명령 처리의 되기록 단계 동안 데이터 결과가 선택된 FPR(64)에 기록될 때까지 그 데이터 결과를 임시 저장한다. 그의 명칭이 의미하는 바와 같이, LSU(52)는 부동-소수점 및 고정-소수점 명령을 실행하는데, 이들 명령은 메모리(즉, 데이터 캐시(34) 또는 메인 메모리(6))로부터의 데이터를 선택된 GPR(60) 또는 FPR(64)에 로딩하거나 GPR(60), GPR 명칭변경 버퍼(62), FPR(64) 및 FPR 명칭변경 버퍼(66) 중의 선택된 하나를 데이터 캐시(34) 또는 메인 메모리(6)에 저장한다.
CPU(4)는 명령의 파이프라이닝 및 무순서 실행(pipelining and out-of-order execution of instructions)을 이용하여 그의 슈퍼스칼라 구조 성능을 더욱 향상시킨다. 따라서, 순차 명령들간에서 데이터 종속성 및 반종속성(data dependencies and antidependencies)이 관찰되는 한 다수의 명령이 BPU(38), FXU(50), LSU(52) 및 FPU(54)에 의해서 어떤 순서로 동시에 실행된다. 또한, 명령은 인출, 디코드/디스패치, 실행, 최종처리 및 완료/되기록(fetch, decode/dispatch, execute, finish and completion/writeback)을 비롯한 일련의 파이프라인 단계에서 각각의 FXU(50), LSU(52) 및 FPU(54)에 의해서 처리된다. 그러나, 당업자라면 인지할 수 있듯이, 어떤 구성을 구현하는데 있어서는 몇몇 파이프라인 단계들을 감소시키거나 조합할 수 있다.
인출 단계 동안, 순차 인출기(36)는 명령 캐시(32)로부터 하나 이상의 메모리 어드레스와 관련된 하나 이상의 원시 명령을 검색한다. 상술한 바와 같이, 명령 캐시(32)로부터 인출된 순차 명령은 명령 큐(40) 내에 순차 인출기(36)에 의해서 저장된다. 이와는 달리, 순차 인출기(36)는 브랜치 명령을 명령 스트림으로부터 이동시켜(폴드 아웃하여(folds out)) 실행을 위해서 BPU(38)에 보낸다. BPU(38)는 양호하게는 브랜치 예측 메카니즘(branch prediction mechanism)을 포함하는데, 이 메카니즘은 도시한 실시예에서 BPU(38)가 브랜치를 취할 것인지 아닌 지의 여부를 예측하는 것에 의해 분석되지 않은 조건 브랜치 명령(unresolved conditional branch instructions)을 추론적으로 실행할 수 있게 하는 브랜치 히스토리 테이블(branch history table)과 같은 동적 예측 메카니즘을 포함한다.
디코드/디스패치 단계 동안, 디스패치-종속 실행 자원(dispatch- dependent execution resources)이 이용가능하게 되는 때에 디스패치 유니트(42)는 명령 큐(40)로부터의 하나 이상의 원시 명령을 디코딩하여 순차 실행 유니트(50, 52 및 54) 중의 적당한 것에 디스패칭한다. 이들 실행 자원은 디스패치 유니트(42)에 의해서 할당되는 것으로서, 그들 자원으로서는 완료 유니트(44)의 완료 버퍼 내에 있는 엔트리 및 각 디스패치된 명령의 데이터 결과에 대한 GPR 명칭변경 버퍼(60) 또는 FPR 명칭변경 버퍼(66) 내의 명칭변경 버퍼가 있다.
실행 단계 동안, 지시된 연산에 대한 피연산자 및 실행 자원이 이용가능하게 되는 때에 실행 유니트(50, 52 및 54)는 임기웅변적으로 디스패치 유니트(42)로부터 수신된 원시 명령을 실행한다. 디스패치 스톨(dispatch stalls)을 최소화하기 위해, 실행 유니트(50, 52 및 54)의 각각은 양호하게는 피연산자 또는 실행 자원을 이용할 수 없게 되는 디스패치된 명령을 저장하는 예약 테이블(reservation table)을 갖추고 있다.
원시 명령이 지시하는 연산을 수행한 후, 그 연산의 데이터 결과는 실행 유니트(50, 52 및 54)에 의해서 명령 유형에 따라 GPR 명칭변경 버퍼(62) 또는 FPR 명칭변경 버퍼(66) 내에 저장된다. 그다음, 실행 유니트(50, 52 및 54)는 그가 명령을 최종처리했음을 완료 유니트(44)에 신호한다. 최종처리 신호의 수신에 응답하여, 완료 유니트(44)는 최종처리 신호에 의해 특정된 명령의 완료 버퍼 엔트리를 완료로서 표시한다. 그런 후, 완료로서 표시된 명령은 되기록 단계로 진입하고, 이 단계에서 GPR 명령변경 버퍼(62)로부터 GPR(60)로 또는 FPR 명칭변경 버퍼(66)로부터 FPR(64)로 제각기 데이터를 전달하는 것에 의해 명령 결과는 구조화된 상태(architected state)로 기록된다. 정확한 예외 처리(precise exception handling)를 지원하기 위해, 원시 명령은 프로그램 순서로 되기록된다.
도 2에 도시한 바와 같이, 고객 명령의 에뮬레이션을 용이하게 하기 위해, CPU(4)는 에뮬레이션 지원 유니트(emulation assist unit : EAU)(70)를 포함하는데, 이 유니트는 도 3에 더욱 상세히 도시된다. 도 3에 도시한 바와 같이, EAU(70)는 특히 고객 명령을 포함하는 고객 어드레스 공간 세그먼트에 대한 논리적 베이스 어드레스(logical base address)를 저장하기 위한 다수의 전용 레지스터(a number of special purpose registers : SPR)(76)를 구비한다. SPR(76)은 현재 세그먼트의 베이스 어드레스 및 현재 고객 명령에 대한 오프셋을 저장하는 코드 세그먼트 베이스 레지스터(code segment base register : CSBR)(75)를 포함한다. EAU(70)는 또한 데이터 캐시(34)로부터 고객 명령을 인출하기 위한 명령 사전인출 유니트(instruction prefetch unit)(74) 및 데이터 캐시(34)로부터 검색된 고객 명령을 임시적으로 저장하기 위한 명령 버퍼(72)를 포함한다. 또한, EAU(70)는 고객 명령을 디코딩하기 위한 명령 디코더(78), 고객 브랜치 명령을 실행하기 위한 고객 브랜치 유니트(80), 각각의 순차 고객 명령에 대한 연산 코드 태그(opcode tags)를 생성하기 위한 태그 생성 유니트(tag generation unit)(90), 다수의 연산 코드의 각각과 연관하여 의미 루틴(SR)을 저장하기 위한 고객 캐시(92), 고객 명령과 연관된 정보를 저장하기 위한 고객 명령 큐(100) 및 순차 인출기(36)에 SR 어드레스를 제공하기 위한 고객 디스패치 유니트(94)를 포함한다.
도 4에는 고객 명령 큐(100)가 더욱 상세히 도시되는데, 이 고객 명령 큐(100)는 고객 명령 스트림과 원시 명령 스트림간의 동기점(synchronization point)을 제공한다. 다음의 설명으로부터 명백하듯이, 고객 명령 큐(100)는 CPU(100)가 에뮬레이트한 고객 명령이 사전처리되어 각종 에뮬레이션 파이프라인 단계와 관련된 대기시간(latency)이 겹쳐질 수 있게 한다.
도시한 실시예에서, 고객 명령 큐(100)는 5개의 엔트리를 포함하는데, 이들 엔트리의 각각은 다음의 필드(112-134)를 포함한다.
VI: 이것은 직접 필드(116)의 내용(content of immediate field)이 유효한 지의 여부를 나타낸다.
VO: 이것은 SR 오프셋 필드(118)의 내용(content of SR offset field)이 유 효한지의 여부를 나타낸다.
직접(Immediate) : 이것은 고객 명령에 의해 특정되어 파라미터로서 대응하 는 의미 루틴으로 통과되는 직접 데이터를 저장한다.
SR 오프셋 : 이것은 (CSBR(75) 내에 유지되는) 고객 명령의 베이스 어드레스 와 대응하는 의미 루틴간의 오프셋이다.
L : 이것은 원시 명령 내의 의미 루틴 길이이다.
GIP : 이것은 고객 어드레스 공간에서 CSBR(75)로부터 고객 명령까지의 오프 셋 포인터(offset pointer)이다.
DE : 이것은 2개의 고객 명령 큐 엔트리(및 2개의 의미 루틴)가 단일 고객 명령의 에뮬레이션에서 이용되는 지의 여부를 나타낸다.
S : 이것은 고객 명령이 고객 명령 스트림의 추론적인(즉, 예측된) 실행 경 로 내에 있는 지의 여부를 나타낸다.
BBID : 이것은 BBID의 풀(pool)로부터 각각의 의미 루틴에 순차적으로 할당 된 독특한 기본적인 블록 ID 번호(unique basic block ID number)이다.
GCR: 이것은 이후의 고객 브랜치 명령을 예측하는데 이용될 수도 있는 조건 (예로서, 동일함/동일하지 않음)을 나타내는 고객 조건 레지스터이다.
CRM: 이것은 GCR 필드 내의 어떤 비트들이 고객 명령에 의해 변경될 것인가 를 나타내는 고객 조건 레지스터 마스크(guest condition register mask)이 다.
VB: 이것은 GCR 필드(130)의 값을 세팅할 의미 루틴 원시 명령이 실행되었 는 지의 여부를 나타낸다.
도 4에 도시한 바와 같이, 고객 명령 큐(100)는 관련된 에뮬레이션 명령 포인터 레지스터(an associated emulation instruction pointer register : EIPR)(140)를 갖는데, 이 레지스터는 양호하게는 소프트웨어-액세스가능 전용 레지스터(software-accessible special purpose register : SPR)로서 구현되는 것으로서, 이 레지스터는 CSBR(75)에 의해 특정된 베이스 어드레스로부터 해석 중인 현재 고객 명령까지의 오프셋을 포함한다. EAU(70)는 원시 명령 세트 내의 새롭게 정의된 "고객 디스패치 완료(guest dispatch completion"(gdispc) 명령의 실행에 응답하여 또한 고객 브랜치 유니트(80)에 의한 고객 브랜치 명령의 실행에 응답하여 의미 루틴의 호출없이 EIPR(140)의 내용을 갱신한다. 또 다른 전용 레지스터인 에뮬레이션 명령 포인터 다음(emulation instruction pointer next : EIP_NEXT) 레지스터(142)는 CSBR(75)에 의해 특정된 베이스 어드레스로부터 해석할 다음 고객 명령까지의 오프셋을 포함한다. EAU(70)는 gdispc 명령이 실행되는 때, SPR 명령에 대한 특정 이동(즉, mtspr[EIP NEXT])이 EIP_NEXT 레지스터(142)를 타겟으로서 실행되는 때 그리고 의미 루틴의 호출없이 고객 브랜치 또는 고객 NOOP 명령이 에뮬레이트되는 때 EIP_NEXT 레지스터(142)의 내용을 갱신한다. 이들 2개의 오프셋 포인터는 고객 명령 스트림의 상태가 예를 들어 예외로부터의 복귀한 때 문맥 전환(context switch) 다음에 용이하게 복원될 수 있게 한다. 즉, 현재 EIP 및 다음 EIP을 저장함으로써, 현재 EIP가 가리키는 인터럽트 시에 에뮬레이션 중에 있는 고객 명령은 현재 EIP 및 다음 EIP 모두를 저장하는 경우 다음 EIP의 계산을 위해 재실행할 필요가 없다.
고객 명령 큐(100)는 또한 그와 관련하는 예측 채택 플래그(predicted taken flag : PTF)(144)를 갖는데, 이 플래그는 분석되지 않은 고객 브랜치 명령이 취해질 것으로서 예측되는 지의 여부 따라서 추론적인 것으로서 표시한 순차 고객 명령(즉, S 필드가 세팅됨)이 타겟 또는 순차 실행 경로 내에 있는지의 여부를 나타낸다.
X플래그(Xflags)(150)는 구조화된 조건 레지스터로서, 이 레지스터에 대해 각 엔트리(110)내의 GCR(130)은 "명칭변경된" 버젼("renamed" version)이다. 엔트리(110)가 고객 명령 큐(100)의 최하부로부터 제거되는 때, 엔트리(110)내의 CRM(132)에 의해서 특정된 X플래그(150)내의 비트들은 GCR(130)내의 대응하는 비트 값들에 의해서 갱신된다. X플래그(150), GCR 필드(130), CRM 필드(132) 및 VB필드(134)(그리고, 관련 액세스 회로)는 도 3에서 간단히 고객 플래그(83)로서 식별되는 것으로서, 이들은 후술하는 바와 같이 고객 브랜치 명령의 분석을 위해 고객 브랜치 유니트(80)에 의해서 참조될 수 있다.
각 고객 명령을 단일 의미 루틴을 실행하는 것에 의해 모방하는 경우, 각 고객 명령에는 고객 명령 큐(100) 내의 단일 엔트리(110) 만이 할당된다. 그러나, 어떤 경우에는, 둘 이상의 엔트리(110)를 단일 순차 고객 명령에 할당할 수도 있다. 예를 들어, 고객 명령이 x86 명령인 실시예의 경우에는, 대다수의 순차 고객 명령이 두개의 독특한 부분 즉 소스(들)의 어드레스 및 데이터의 수신지(the addresses of the source(s) and destination of the data)를 결정하는 방법을 특정하는 제1 부분과 데이터에 대해 행할 동작을 특정하는 제2 부분을 포함한다. 이러한 경우에는, 제1 의미 루틴을 이용하여 데이터 소스 및 수신지 어드레스의 결정에 관련된 명령 실행 부분을 에뮬에이트하고, 제 2 의미 루틴을 이용하여 데이터에 대한 동작을 수행하는데 관련된 명령 실행 부분을 에뮬레이트한다. 따라서, 고객 명령에는 고객 명령 큐(100)내의 두개의 엔트리(110)가 할당된다. 이들 두 엔트리 중의 하나는 제 1 의미 루틴에 관련된 정보를 포함하고, 다른 하나는 제 2 의미 루틴에 관련된 정보를 포함한다. 이러한 이중 엔트리 고객 명령은 두 엔트리(110)의 구(제 1) 엔트리 내에 있는 DE(이중 엔트리) 필드(124)를 세팅함으로써 고객 명령 큐(100)내에 표시된다. DE 필드를 세팅함으로써, 두 엔트리(110)는 두 의미 루틴이 (제 2 의미 루틴을 종료시키는 gdispc 명령에 응답하여) 완료되는 때 고객 명령 큐(100)로부터 철수될 것이다. 두 의미 루틴을 양호하게 이용하여 고객 명령을 에뮬레이트함으로써, 어떤 루틴들은 다수의 고객 명령에 의해서 공유될 수 있게 되어, 의미 루틴(19)의 전체적인 메모리 점유면적이 감소될 수 있다.
고객 명령 큐(100)내의 엔트리 순서화는 고객 명령 큐(100)내의 가장 오래된 엔트리(oldest entry)를 가리키는 현재 엔트리 포인터(95) 및 다음의 가장 오래된 엔트리(next oldest entry)를 가리키는 다음 엔트리 포인터(97)에 의해서 유지된다. gdispc 명령의 인출 및 완료에 응답하여, 현재 엔트리 포인터(95)에 표시되는 고객 명령 큐 엔트리가 철수되며, 현재 엔트리 포인터(95) 및 다음 엔트리 포인터(97)가 갱신된다. 따라서, 엔트리들이 고객 명령 큐(100)의 "최하부(bottom)"로부터 소멸되며 "최상부(top)"에 삽입된다.
이제 도 2 내지 4를 참조하여 EAU(70)의 동작을 설명한다.
EAU 초기화
에뮬레이션을 위해 EAU(70)를 초기화하기 위해서, EIP_NEXT 레지스터(142)를 타겟으로 하는 원시적인 SPR로의 이동(mtspr) 명령(즉, PowerPCTM명령 세트에서 mtspr[EIP_NEXT])을 실행함으로써 EIP_NEXT 레지스터(142)내로 에뮬레이트할 제 1 고객 명령에 대한 어드레스 오프셋을 로딩한다. 양호한 실시예에서, 이 원시 명령은 고객 브랜치 명령과 같은데, 이는 그러한 고객 브랜치 명령의 기능이 EIP_NEXT 레지스터(142)에 (CSBR(75))내의 오프셋 값인) 실행될 다음 고객 명령에 대한 포인터를 로딩하고자 하는 것이기 때문일 것이다. 고객 명령 큐(100)내에 있는 가장 오래된 엔트리(110)의 VI필드(112) 및 VO필드(114)는 모두 mtspr[EIP_NEXT] 명령에 응답하여 클리어된다. 그 후, 데이터 캐시(34)로부터의 고객 명령의 사전인출은 gdispc 명령에 의해 트리거될 수 있다.
고객 명령 큐(100)내에 있는 가장 오래된 엔트리(110)의 VI필드(112) 및 VO필드(114)는 또한 mtspr[EIP] 및 mtspr[CSBR] 명령에 응답하여 그리고 고객 브랜치 명령이 예측 오류인 것으로서 분석되는 경우에 클리어된다.
고객 명령 사전 인출
상술한 바와 같이, 데이터 캐시(34)로부터의 고객 명령 사전인출은 고객 명령을 원시 명령 스트림 내에 배치함으로서 트리거된다. 순차 인출기(36)에 의해 인출되는 경우, gdispc 명령은 고객 명령 큐(100)내의 가장 오래된 엔트리(110)의 VO필드(114)가 세트될 때까지 순차 인출기(36)에 의한 인출을 연기시키는 인터록(interlock)으로서 작용한다. 순차 인출기(36)의 연기에 응답하여, EAU(70)내의 명령 사전 인출 유니트(74)는 CSBR(75)내에 포함된 베이스 어드레스 및 오프셋에 의해 특정되는 어드레스의 고객 명령에 대한 인출 요구를 데이터 캐시(34)에 대해 만든다.
고객 명령 디코딩
명령 사전 인출 유니트(74)로부터의 인출 요구에 응답하여 데이터 캐시(34)가 공급하는 고객 명령은 명령 버퍼(72)내에 임시 저장되며, 그 다음 명령 디코더(78)내로 한번에 하나씩 로딩된다. 이 디코더는 적어도 부분적으로 각 고객 명령을 디코딩하여, 명령의 길이와, 고객 명령이 브랜치 명령인지의 여부와, 고객 명령의 직접 데이터(있는 경우)를 결정한다.
순차 고객 명령 처리
명령 디코더(78)에 의해 디코딩된 고객 명령이 순차 명령인 경우, 고객 명령 큐(100)의 적어도 가장 오래된 미사용 엔트리(110)가 고객 명령에 할당된다. 도 3에 도시한 바와 같이, 명령 디코더(78)는 그 다음 직접 데이터(있을 경우)및 고객 명령에 대한 오프셋 포인터를 할당된 엔트리(110)의 직접 필드(116) 및 IP 필드(122)내에 제각기 저장한다. 명령 디코더(78)가 직접 데이터를 직접 필드(116)내로 로딩하는 것에 응답하여, VI필드(112)가 세팅된다.
순차 고객 명령은 그 다음 명령 디코더(78)로부터 태그 발생 유니트(90)로 보내지며, 이 태그 발생 유니트는 고객 명령을 독특한 연산 태그로 변환한다. 본 발명의 양호한 실시예에 따르면, 여러 다른 연산 태그가 여러 다른 고객 명령들간의 구별을 위해서 뿐만 아니라 여러 다른 레지스터들을 액세스하는 동일한 고객 명령들간의 구별을 위해서도 이용된다. 따라서, 여러 다른 연산 태그는 고객 제산 및 고객 승산 명령(guest divide (gdiv) and guest multiply (gmult) instructions)에 대해서 또한 여러 다른 레지스터를 타겟으로 하는 gmult R3, R2, R1 및 gmult R4, R2, R1 명령에 대해서도 이용된다. 태그 발생 유니트(90)가 발생하는 독특한 연산 태그는 고객 캐시(92)내에 인덱스를 형성하는데, 이것은 고객 명령에 대응하는 의미 루틴의 유효 어드레스를 결정하기 위해서 이용되는 오프셋을 포함하는 특정 캐시 엔트리를 선택한다.
도시한 바와 같이, 예시적인 실시예에서, 고객 캐시(92)는 4 K바이트 엔트리를 제각기 포함하는 256 라인을 가진 4-웨이 세트 결합 캐시(four-way set associative cache)를 포함한다. 고객 캐시(92)에서의 오류(miss)는 사용자-레벨 인터럽트를 발생하는데, 이 인터럽트는 의미 루틴 합성 코드(semantic routine synthesis code)(22)의 실행에 의해서 서비스된다. 전술한 바와 같이, 의미 루틴 합성 코드(22)는 원시 명령으로부터의 고객 명령에 대응하는 의미 루틴을 합성하여 그 루틴을 메모리 맵(14)의 영역(19)내에 저장한다. 고객 명령의 베이스 어드레스로부터 새롭게 합성된 의미 루틴의 위치까지의 오프셋은 그 다음 후속 철회(subsequent recall)를 위해 고객 캐시(92)내에 저장된다. 고객 명령 세트들은 통상적으로 잘 안정될 수 있기 때문에, 고객 캐시(92)가 99% 이상의 적중률(hit rates)을 달성하는 것이 통상적이다.
의미 루틴((SR) 오프셋이 고객 캐시(92)내에 위치(또는 저장)되는 것에 응답하여, SR 오프셋은 할당된 엔트리(110)의 SR 오프셋 필드(118)내에 저장됨으로써, VO필드(114)는 유효한 것으로서 표시된다. 이때까지, VO는 세팅되어 SR 오프셋 필드(118)의 내용이 유효하고, L 필드(120), DE 필드(124), S 필드(126), BBID 필드(128) 및 CRM 필드(132)가 또한 할당된 엔트리(110)내에서 유효함을 나타낸다. 상술한 바와 같이, GCR 필드(130)는 VB필드(134)에 의해서 개별적으로 유효한 것으로서 표시된다.
고객 명령 큐(100)내의 가장 오래된 엔트리(110)의 VO필드(114)가 에뮬레이션 개시 시에 EAU(70)내의 제 1 고객 명령의 처리에 의해서 세팅되면, EIP_NEXT 레지스터(142)내의 값은 EIPR(140)로 전달되는데, 이는 고객 명령 큐(100)내의 가장 오래된(즉, 제 1) 명령이 현재 처리되고 있는 고객 명령임을 나타낸다. 이같은 이벤트에 응답하여, 고객 디스패치 유니트(94)는 SR 오프셋 필드(118)내의 SR 오프셋을 순차 인출기(36)로 전달하며, 이 인출기는 제 1 고객 명령에 대응하는 의미 루틴내의 원시 명령을 인출하기 시작한다. 도 4에 도시한 바와 같이, EAU(70)는 고객 디스패치 유니트(94)내의 인출 PTR(152)에 의해 의미 루틴이 인출되고 있는 고객 명령을 추적한다.
고객 브랜치 명령 처리
명령 디코더(78)가 고객 명령이 브랜치 명령이라고 결정하면, 고객 브랜치 명령은 고객 큐(100)의 가장 오래된 미사용 엔트리(110)를 고객 브랜치 명령의 할당 후에 처리하기 위해서 고객 브랜치 유니트(80)에 보내진다. (다른 실시예에서, 고객 명령 순서화는 고객 명령 큐 엔트리를 고객 브랜치 명령에 할당하지 않고서도 유지될 수 있다). 고객 브랜치 유니트(80)는 도 5의 논리적 플로우챠트에 나타난 방법에 따라서 고객 브랜치 명령을 처리한다.
이제 도 5를 참조로 설명하면, 고객 브랜치 유니트(80)에 의한 고객 브랜치 명령의 수신에 응답하여 블록 200에서 처리가 시작된다. 처리는 블록 200에서 블록 210으로 진행하고, 여기서는 고객 브랜치 명령이 x86 JUMP 명령과 같은 무조건 절대 또는 상대 브랜치 명령인지 여부를 판단하게 된다. 판단 결과가 긍정이라면, 처리는 블록 212로 진행하고, 여기서는 고객 브랜치 유니트(80)가 내부 하드웨어 가산기를 이용하여 타겟(target) 어드레스를 연산한다. 타겟 어드레스는 명령 사전 인출 유니트(74)로 보내지며, 이 유니트는, 블록 214에 나타난 바와 같이, 타겟 어드레스를 데이터 캐시(34)로 전송하여 타겟 어드레스에서의 고객 명령의 인출 동작을 개시한다. 그 다음, 처리는 블록 260으로 가서 종료된다.
다시, 블록 210을 참조로 설명하면, 고객 브랜치 명령이 무조건 절대 또는 상대 브랜치가 아니라는 판단에 응답하여, 처리는 블록 220으로 가고, 여기서는 고객 브랜치 명령이 적어도 하나의 조건 레지스터 비트의 상태에 따라 달라지는 조건 브랜치인지 여부를 판단한다. 판단 결과가 긍정이라면, 처리는 블록 222로 가고, 여기서는 고객 브랜치 명령이 프로그램 순서상 고객 브랜치 명령 바로 앞에 있는 엔트리(110)를 조사한다. 특히, 블록 224에 나타난 바와 같이, 고객 브랜치 유니트(80)는 브랜치가 의존하는 비트(들)에 대응하는 CRM 필드(132) 내의 비트 또는 비트들이 세트되어 있는지 여부를 판단한다. 만일 세트되어 있지 않다면, 처리는 블록 232로 가고, 여기서는 고객 명령 큐(100)가 조사되고 있는 엔트리에 선행하는 추가 엔트리(110)를 내포하고 있는지 여부를 판단한다. 판단 결과가 긍정이면, 처리는 이미 설명된 블록 222로 간다. 그러나, 고객 명령 큐(100) 내에 추가 선행 엔트리(110)가 존재하지 않는다면, 처리는 블록 232로부터 블록 234로 진행하고, 여기서는 고객 브랜치 유니트(80)가 X플래그(150)를 참조하여 브랜치를 분석한다. 그 후, 고객 브랜치 유니트(80)는 인출 어드레스를 연산하고, 이것을 명령 사전 인출 유니트(74)를 통해 데이터 캐시(34)로 전송한다. 그 다음, 처리는 블록 280에 나타난 바와 같이 종료된다.
블록 224로 되돌아가서 설명하면, CRM 필드(132)의 전용 비트들이 조사되고 있는 엔트리(110) 내에 세트되어 있다는 판단에 응답하여, 블록 226에서, 그 엔트리(110)의 VB필드(134)가 유효로 표시되어 있는지 여부(즉, GCR 필드(130) 내의 비트들이 의미 루틴에 의해 세트되었는지 여부)를 판단한다. VB필드(134)가 유효로 표시되어 있다면, 처리는 블록 228로 진행하고, 여기서는 고객 브랜치 유니트가 GCR 필드(130)를 참조하여 고객 브랜치 명령을 분석한다. 그 다음, 처리는 블록 229로 진행하고, 여기서는 고객 브랜치 유니트(80)가 (브랜치가 취해진 것인지 아니면 취해지지 않은 것인지 여부에 따른) 순차 또는 타겟 어드레스를 연산하고, 이 어드레스를 명령 사전 인출 유니트(74)를 통해 데이터 캐시(34)로 보낸다. 그 후, 처리는 블록 216에 나타난 바와 같이 종료된다.
블록 226으로 되돌아가서 설명하면, VB필드(134)가 조사되고 있는 엔트리(110) 내에서 유효로 표시되어 있지 않다는 판단에 응답하여, 처리는 블록 230으로 진행한다. 블록 230에서는 고객 브랜치 유니트(80)가 종래의 브랜치 히스토리 테이블( branch history table; BHT)(82)을 참조로 브랜치를 예측한다. PTF(144)는 브랜치가 취해진 것으로 예측되었음을 표시하기 위해서는 1로 세트되고, 브랜치가 취해지지 않은 것으로 예측되었음을 표시하기 위해서는 클리어(0으로 세트)된다. 그 다음, 처리는 블록 230으로부터 블록 260으로 진행하고, 여기서는 고객 유니트 브랜치(80)가 예측된 경로의 어드레스를 연산하고, 이 어드레스를 명령 사전 인출 유니트(74)를 통해 데이터 캐시(34)로 전송한다. 예측 오류로부터의 회복이 가능하도록 하기 위해서 비예측(non-predicted) 경로의 어드레스가 블록 262에 나타난 바와 같이 다른 경로 레지스터(81)에 저장된다. 블록 264에 나타난 바와 같이, 고객 명령 큐(100)의 전용 엔트리(110) 내에 S 필드(126)를 세트함으로써 고객 브랜치 명령이 분석되지 않은 채로 남아 있는 동안에 후속되는 모든 고객 명령은 추론적인 것으로 표시된다. 그 후, 처리는 블록 280에서 종료된다.
최종 비추론(non-speculative) 의미 루틴(50)을 종료시키는 gdispc 명령은 그 오프셋이 지정하는 의미 루틴이 고객 명령 큐(100)에서 추론적인 것으로 표시되기 때문에 (추론적으로) 완료될 수 없다. 조건 브랜치가 의존하는 GCR 필드(130)가 유효로 되는 경우에는, 브랜치가 채택되었어야 했는지 여부를 표시하는 브랜치 채택 플래그(branch taken flag; BTF)가 발생된다. BTF가 PTF(144)와 동일한 값을 갖고 있다면, 브랜치는 정확하게 예측된 것이다. 이 경우, 추론적 필드(126)는 클리어되고, EAU(70)의 동작은 정상적으로 진행된다.
그러나, BTF가 PTF(144)와 동일한 값을 갖고 있지 않다면, 브랜치는 잘못 예측된 것이며, EAU(70)는 올바른 에뮬레이션 경로로 복귀해야 한다. 따라서, 브랜치가 의존하는 GCR 필드(130)를 세트하는 원시 명령의 완료 시에, EIP_NEXT 레지스터(142)는 (블록 262에서 다른 경로 레지스터(81)에 저장되었던) 정확한 어드레스로 갱신된다. 게다가, 추론적인 것으로 표시된 모든 엔트리(110)는 고객 명령 큐(100)로부터 플러시되고(flushed), 대응하는 의미 루틴 원시 명령은 BBID에 의해 식별되고 CPU(4)로부터 플러시된다. 원시 명령 스트림으로부터 플러시된 추론적 명령은 gdispc 명령이 여전히 추론적인 것으로 표시되어 있기 때문에 최종 의미 루틴에 대한 gdispc 명령을 포함한다. 물론, CPU(4)는 모든 비추론 원시 명령들이 완료되게 할 수 있다. 그 후, CPU(4)는 최종 비추론 명령 어드레스(예컨대, PowerPCTM명령 어드레스 레지스터(IAR)에서 규정된 것)와 원시 명령의 길이(플러시된 gdispc 명령의 어드레스)를 더한 것과 같은 어드레스로부터 순차적으로 인출함으로써 재시작된다. 이 gdispc 명령에 의해서 EAU(70)는 EIP_NEXT 레지스터(144)에서 규정된 정확한 어드레스로부터 고객 명령을 인출할 것이다. 이와 같은 방식으로, EAU(70)와 CPU(4)는 고객 브랜치 명령의 예측 오류에 이어서 복구된다.
다시, 블록 블록 220을 참조로 설명하면, 고객 브랜치 명령이 조건 레지스터 비트의 상태에 의존하는 조건 브랜치 명령이 아니라는 판단에 응답하여 처리는 블록 240으로 진행한다. 블록 240에서는 고객 브랜치 명령이 무조건 레지스터 간접 브랜치(예컨대, CALL 또는 RETURN) 명령인지 여부를 판단한다. 판단 결과가 부정이라면, 처리는 블록 270으로 진행하고, 여기서는 고객 브랜치 유니트(80)가 고객 브랜치 명령의 유형에 맞는 다른 고객 브랜치 명령을 취급한다. 그러나, 블록 240에서 고객 브랜치 명령이 무조건 레지스터 간접 브랜치라고 판단하는 경우에는 처리는 블록 242로 진행한다. 블록 242에서는 무조건 레지스터 간접 브랜치가 CALL 명령인지 여부를 판단한다. 판단 결과가 긍정이라면, 처리는 블록 244로 진행하고, 여기서는 EAU(70)가 고객 명령 큐(100) 내의 CALL 명령에 대한 엔트리(110)를 생성한다. 할당된 엔트리(110)의 직접 필드(immediate field)(116)에는 CALL 명령의 직접 데이터가 저장된다. 그 후, CALL 명령에 대응하는 의미 루틴이 CPU(4)에 의해 실행된다. CALL 명령에 대응하는 의미 루틴은 다음 번의 추론적 고객 명령의 어드레스를 연산하고, 이 어드레스를 메모리 내의 다중-엔트리 푸시/팝(push/pop) 스택에 푸시하고, 직접 필드(116) 내에 규정된 고객 명령 어드레스로 브랜치한다. 그 다음, 처리는 CALL 의미 루틴의 완료에 따라 블록 280에서 종료한다. 따라서, CALL 명령에 대한 예시적인 의미 루틴은 다음과 같다.
CALL:
(1) 다음 번의 추론적인 고객 명령의 어드레스를 연산하는 코드
(2) 다음 번의 추론적인 고객 명령의 어드레스를 푸시/팝 스택상에 푸시하는 코드
(3) CALL의 직접 필드에 규정된 고객 명령 어드레스로의 고객 브랜치
블록 242로 되돌아가서 설명하면, 무조건 레지스터 간접 브랜치 명령이 CALL 명령이 아니라는 판단에 응답하여, 브랜치 명령이 RETURN 명령이라고 판단한다. 그 다음, 처리는 블록 250으로 진행하고, 여기서는 EAU(70)가 RETURN 명령에 대한 고객 명령 큐(100)에서 엔트리(110)를 생성한다. 그 다음, 블록 252에 나타난 바와 같이, RETURN 명령에 대응하는 의미 루틴이 실행된다. 의미 루틴은 최상단 엔트리를 스택 밖으로 팝(pop)하여 가장 최근의 CALL에 의해 스택 상에 푸시된 다음 번의 추론적 명령 어드레스를 얻고, 이 어드레스를 RETURN 명령의 엔트리의 직접 필드(116)에 일시 저장시킨다. 이 어드레스는 명령 사전 인츨 유니트(74)를 통해 데이터 캐시(34)로 전송되어 고객 명령의 추론적 인출 동작을 개시한다. 물론, 추론적으로 인출된 명령에 대응하는 엔트리(110)는 S 필드(126)를 세트함으로써 추론적인 것으로 표시된다. RETURN 의미 루틴은 또한 실제 에뮬레이션 경로의 어드레스를 연산하고 고객 브랜치 명령을 실행하여 정확한 인출 어드레스를 EIPR_NEXT 레지스터(142) 내에 위치시킨다. 따라서, RETURN 명령에 대한 예시적인 의미 루틴은 다음과 같다.
RETURN:
(1) 다음 번의 추론적 명령 어드레스를 스택 밖으로 팝하는 코드
(2) 정확한 에뮬레이션 경로의 어드레스를 연산하는 코드
(3) 정확한 에뮬레이션 경로의 어드레스를 EIPR_NEXT 레지스터(142) 내로 로드시키는 고객 브랜치
블록 254에 나타난 바와 같이, 정확한 에뮬레이션 경로의 어드레스를 EIPR_NEXT 레지스터(142) 내로 로드시키는 고객 브랜치 명령의 완료 후에, EAU(70)는 EIPR_NEXT 레지스터(142) 내의 어드레스를 직접 필드(116) 내의 다음 번의 추론적 명령 어드레스와 비교한다. 어드레스들이 일치하면, 고객 브랜치는 정확히 예측된 것이고, RETURN 명령에 후속하는 각 엔트리(110)에 대한 추론적 필드(126)는 리세트된다. 어드레스들이 일치하지 않으면, 추론적 명령은 고객 명령 큐(100)와 CPU(4)의 원시 명령 파이프라인 모두로부터 플러시된다. 원시 명령 파이프라인으로부터 플러시된 추론적 명령은 RETURN 의미 루틴을 종결시키는 gdispc 명령을 포함하는데, 그 이유는 이 명령이 추론적 원시 명령의 실행을 개시하기 때문이다. 게다가, 스택은 공(empty)으로 리세트된다.
상술한 바와 같이, CPU(4)는 최종 비추론 명령 어드레스(예컨대, PowerPCTM명령 어드레스 레지스터(IAR)에서 규정된 것)와 원시 명령의 길이(플러시된 gdispc 명령의 어드레스)를 더한 것과 같은 어드레스로부터 순차적으로 인출함으로써 원시 명령 스트림을 재시작시킨다. 이 gdispc 명령의 비추론적 실행에 의해서 EAU(70)는 EIP_NEXT 레지스터(142)에 지정된 정확한 어드레스로부터 고객 명령을 인출하고 CALL 및 RETURN 명령에 대응하는 엔트리(110)를 고객 명령 큐(100)로부터 삭제시킬 수가 있을 것이다. 이와 같은 방식으로 EAU(70)와 CPU(4)는 예측 오류에 이어서 복구된다.
의미 루틴 처리
CPU(4)의 표준 명령 세트 내에 있는 의미 루틴(즉, 원시) 명령은 도 2를 참조하여 상술한 바와 같이 CPU(4)에 의해서 처리된다. 고객 명령 에뮬레이션을 지원하도록 세팅된 원시 명령 내로 삽입된 특정 명령은 후술하는 바와 같이 처리된다.
고객 명령을 연속적인 고객 명령 스트림내로 연결하기 위해서는, 고객 명령들이 제각기 단일의 의미 루틴에 의해서 표현되는 경우에는 gdispc 명령을 각 의미 루틴의 끝에 삽입하고 또는 고객 명령이 다수의 의미 루틴에 의해서 에뮬레이트되는 경우에는 그 명령을 고객 명령에 대응하는 최종 의미 루틴의 끝에 삽입하는 것이 바람직하다. gdispc 명령은 특정 형태의 원시 브랜치 명령으로서 정의하여 순차 인출기(36)에 의해 명령 캐시(32)로부터 인출되는 때 gdispc 명령이 원시명령 스트림으로부터 폴드 아웃되어 BPU(38)으로 보내지게 하는 것이 바람직하다. gdispc 명령의 검출에 응답하여, BPU(38)는 신호 라인(96)을 가정한다(assert). 고객 디스패치 유니트(94)는 현재 고객 명령에 대응하는 모든 엔트리(110)를 고객 명령 큐(100)로부터 제거하여 다음 엔트리 내에 저장된 의미 루틴 오프셋을 신호 라인(98)을 통해 순차 인출기(36)에 보내는 것에 의해서 신호 라인(96)의 가정에 응답한다. 상술한 바와 같이, 순차 인출기(36)는 그 다음 고객 명령의 베이스 어드레스에 의미 루틴 오프셋을 가산하는 것에 의해 다음 고객 명령에 대응하는 의미 루틴의 유효 어드레스(EA)를 계산하고 CPU(4)에 의한 실행을 위해 그 의미 루틴을 메모리로부터 인출한다.
다수의 의미 루틴을 이용하여 단일 고객 명령을 에뮬레이트하는 경우, 최종 의미 루틴이 아닌 의미 루틴은 gdispc 명령의 변종인 "고객 디스패치 프롤로그 완료(guest dispatch prolog completion)" (gdispp) 명령에 의해서 종료된다. 일반적으로, gdispp 명령은 gdispc 명령과 같이 처리된다. 예를 들어, gdispc 명령과 같이, gdispp 명령은 다음 의미 루틴의 인출을 트리거한다. 또한, gdispp 명령을 포함하는 의미 루틴에 대응하는 고객 명령 큐 엔트리(110)내의 VO필드(114)는 gdispp 명령이 실행되도록 세팅되어야만 한다. 그러나, gdispc 명령의 처리와는 대조적으로, gdispp 명령의 완료는 고객 명령 큐(100)로부터 엔트리(110)의 제거 또는 EIPR(140) 및 EIP_NEXT 레지스터(142)의 갱신을 트리거하지 않는다.
가산 명령의 형태로서 세팅된 원시 명령 내로 삽입된 다른 특정 명령은 고객 가산 직접 프롤로그[워드 또는 반워드(word or half word)] (gaddpi [w, h] 명령이다. gaddpi[w, h] 명령의 기능은 고객 명령에 할당된 두 고객 명령 큐 엔트리 중의 제 1 엔트리 내에 특정된 직접 데이터를 특정된 GPR(60)내의 값과 가산하여 그 합을 다른 GPR(60)내에 저장하는 것이다. 제 1 엔트리(110)에 대한 VI필드(112)는 대응하는 의미 루틴이 실행될 수 있게 세팅되어야만 한다.
상기한 것과 유사한 고객 가산 직접 완료[워드 또는 반워드] (gaddci [w, h] 명령은 고객 명령에 할당된 두 고객 명령 큐 엔트리 중의 제 2 엔트리 내에 저장된 직접 데이터를 특정된 GPR(60)의 값과 가산하여 그 합을 다른 GPR(60)내에 저장하는데 이용된다. 제 2 엔트리(110)에 대한 VI필드(112)는 대응하는 의미 루틴이 실행되도록 세팅되어야만 한다.
인터럽트 및 예외 처리
고객 명령 또는 원시 명령 예외에 응답하여, 명령 사전 인출 유니트(74)에 의한 고객 명령 인출을 디스에이블링하는 비-구조화된 예외 플래그가 세팅된다. 최소한, 고객 명령 스트림의 문맥(context)은 인터럽트/예외 처리 동안 저장되고 인터럽트/예외로부터의 복귀 시에 EIPR(140) 및 EIP_NEXT 레지스터(142)의 내용을 SPR(76)내에 저장하는 것에 의해 복원된다. 실제 문제로서, 고객 명령 큐(100)의 전체 최하부 엔트리(110)를 SPR(76)내에 저장하여 인터럽트/예외에 후속하는 모방의 재개시를 촉진하는 것이 바람직하다.
인터럽트로부터의 복귀에 후속하는 데이터 캐시(34)로부터의 고객 명령 사전 인출은 고객 명령 큐(100)내에 있는 적당한 엔트리(110)의 VI필드(112)가 세팅될 때가지 순차 인출기(36)를 인터록킹하여 연기시키는 gaddpi[w, h] 명령 또는 gaddci[w, h] 명령의 실행에 의해서 트리거될 수 있다. gdisp[p, c] 또는 gadd[p, c]i[w, h] 명령의 실행은 예외 플래그를 클리어한다.
본 발명의 예시적 실시예를 도시하고 설명하였으나, 당업자라면, 본 발명의 사상 및 범주를 벗어나지 않고서도 형태 및 세부적 사항이 다양하게 변경될 수도 있음을 이해할 수 있을 것이다. 예를 들어, CPU(4)내에서 에뮬레이트된 고객 명령이 x86인 실시예를 참조하여 본 발명을 설명하였지만, 다른 고객 명령들을 다른 식으로 활용할 수도 있음을 이해할 수 있을 것이다.
본 발명에 따르면, 호스트 컴퓨터 시스템에 대한 에뮬레이션 메카니즘은 고객 명령이 원시 명령으로 이루어진 의미 루틴에 의해서 실행될 수 있게 함으로써, 데이터 처리 시스템에서 서로 다른 구조와 고객 브랜치 명령을 용이하게 에뮬레이트할 수가 있다.

Claims (6)

  1. 원시 명령 세트(native instruction set)를 가지며 고객 명령 세트(guest instruction set) 내의 고객 명령들을 에뮬레이트하는(emulate) 프로세서의 동작 방법에 있어서,
    ① 적어도 하나의 고객 브랜치 명령(guest branch instruction)과 기타 다른 고객 명령을 포함하는 일련의 고객 명령을 메모리 내에 저장하는 단계,
    ② 상기 일련의 고객 명령을 에뮬레이트하는데 이용될 수 있는, 상기 원시 명령 세트 내의 원시 명령들의 하나 또는 그 이상의 의미 루틴(semantic routines)을 메모리 내에 저장하는 단계,
    ③ 상기 일련의 고객 명령 내의 상기 기타 다른 고객 명령 각각에 대해서, 상기 하나 또는 그 이상의 의미 루틴 중 적어도 어느 한 루틴의 메모리 내의 로케이션(location)의 표시와 관련 고객 명령에 의해 세트 또는 리세트될 수 있는 조건을 표시하는 조건 필드를 포함하는 엔트리를 상기 기타 다른 고객 명령들의 수신 순서에 따라서 다중-엔트리 큐(multiple-entry queue) 내에 저장하는 단계,
    ④ 상기 다중-엔트리 큐 내의 엔트리들에 응답하여, 상기 엔트리들을 이용하여 상기 프로세서에서 상기 일련의 고객 명령을 에뮬레이트하여 상기 하나 또는 그 이상의 의미 루틴 중 선택된 루틴들을 액세스하여 실행시키는 단계, 및
    ⑤ 상기 일련의 고객 명령 내의 조건 고객 브랜치 명령의 검출에 응답하여, 상기 일련의 고객 명령 내의 상기 조건 고객 브랜치 명령에 선행하는 고객 명령에 관련된 상기 다중-엔트리 큐 내의 엔트리가 상기 조건 브랜치 명령이 의존하는 조건의 표시를 포함하는 조건 필드를 갖고 있는지 여부를 판단하고, 판단 결과가 긍정이면, 상기 표시를 이용하여 상기 조건 고객 브랜치 명령을 분석하는(resolve) 단계
    를 포함하는 프로세서 동작 방법.
  2. 원시 명령 세트를 가지며, 고객 명령 세트 내의 고객 명령들을 에뮬레이트하는 프로세서에 있어서,
    ① 상기 고객 명령 세트 내의 일련의 고객 명령과 다수의 의미 루틴 ― 상기 의미 루틴 각각은 고객 명령을 에뮬레이트하는데 이용될 수 있는 상기 원시 명령 세트 내의 일련의 원시 명령이고, 상기 일련의 고객 명령은 조건 고객 브랜치 명령과 기타의 다른 고객 명령을 포함함 ―을 저장하기 위한 메모리,
    ② 상기 일련의 고객 명령 내의 상기 기타의 다른 고객 명령에 대해서, 상기 다수의 의미 루틴 중 적어도 어느 한 루틴의 메모리 내의 로케이션의 표시와 관련 고객 명령에 의해 세트 또는 리세트될 수 있는 조건을 표시하는 조건 필드를 포함하는 엔트리를 상기 기타 다른 고객 명령들의 수신 순서에 따라서 저장하기 위한 다중-엔트리 큐, 및
    ③ 상기 다중-엔트리 큐 내의 상기 엔트리들로 표시된 의미 루틴들에서 원시 명령들을 실행하여 상기 일련의 고객 명령이 에뮬레이트되게 하기 위한 실행 유니트,
    ④ 상기 일련의 고객 명령 내의 조건 고객 브랜치 명령을 검출하는 고객 명령 디코더, 및
    ⑤ 고객 브랜치 유니트
    를 포함하며,
    조건 고객 브랜치 명령의 검출에 응답하여, 상기 고객 브랜치 유니트가 상기 일련의 고객 명령 내의 상기 조건 고객 브랜치 명령에 선행하는 명령에 관련된 상기 다중-엔트리 큐 내의 엔트리가 상기 조건 브랜치 명령이 의존하는 조건의 표시를 포함하는 조건 필드를 갖고 있는지 여부를 판단하고, 판단 결과가 긍정이면, 상기 표시를 이용하여 상기 조건 고객 브랜치 명령을 분석하는
    프로세서.
  3. 제2항에 있어서,
    상기 조건 필드는 다수의 조건을 표시하고,
    상기 다중-엔트리 큐 내의 엔트리 각각은 상기 조건 필드 내의 상기 다수의 조건 중에서 어느 조건이 상기 엔트리에 관련된 고객 명령에 의해 세트된 것인지를 나타내는 마스크(mask)를 더 포함하는
    프로세서.
  4. 제3항에 있어서, 상기 다중-엔트리 큐의 엔트리 각각은 상기 엔트리에 관련된 고객 명령을 에뮬레이트하는데 이용된 의미 루틴이 상기 엔트리의 상기 마스크로 표시된 모든 조건이 상기 엔트리의 상기 조건 필드 내에 세트되는 시점까지 실행을 완료하였음을 표시하도록 세트된 조건 필드 유효(valid) 비트를 포함하는 프로세서.
  5. 제4항에 있어서, 상기 다중-엔트리 큐의 각각의 엔트리는 조건 필드 유효 비트를 더 포함하고, 상기 고객 브랜치 유니트는 상기 일련의 고객 명령 내의 상기 조건 고객 브랜치 명령에 선행하는 고객 명령에 관련된 상기 다중-엔트리 큐 내의 엔트리가 상기 고객 명령은 상기 조건 고객 브랜치 명령이 의존하는 조건을 세트할 것이고 상기 엔트리의 상기 조건 필드 유효 비트는 세트되지 않음을 표시하는 마스크를 갖고 있는 동안에 상기 조건 고객 브랜치 명령의 처리에 응답하여 상기 조건 고객 브랜치 명령의 분석을 예측하기 위한 수단을 더 포함하는 프로세서.
  6. 제2항에 있어서,
    상기 다중-엔트리 큐 내의 엔트리의 조건 필드 내의 조건을 세트하는 고객 명령 각각의 에뮬레이션 완료에 응답하여 갱신되는 에뮬레이션 조건 레지스터를 더 포함하고,
    상기 고객 브랜치 유니트는 상기 조건 고객 브랜치 명령이 상기 다중-엔트리 큐 내의 상기 엔트리들 중 임의의 엔트리를 참조로 분석될 수 없다는 판단에 응답하여 상기 에뮬레이션 조건 레지스터를 참조로 상기 조건 고객 브랜치 명령을 분석하기 위한 수단을 포함하는
    프로세서.
KR1019980032563A 1997-09-22 1998-08-11 데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템 KR100284788B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US8/934,857 1997-09-22
US08/934,857 US5956495A (en) 1997-09-22 1997-09-22 Method and system for processing branch instructions during emulation in a data processing system

Publications (2)

Publication Number Publication Date
KR19990029288A KR19990029288A (ko) 1999-04-26
KR100284788B1 true KR100284788B1 (ko) 2001-03-15

Family

ID=25466189

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980032563A KR100284788B1 (ko) 1997-09-22 1998-08-11 데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템

Country Status (2)

Country Link
US (1) US5956495A (ko)
KR (1) KR100284788B1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6033814A (en) * 1998-02-26 2000-03-07 Micron Technology, Inc. Method for multiple process parameter matching
US6243107B1 (en) * 1998-08-10 2001-06-05 3D Labs Inc., Ltd. Optimization of a graphics processor system when rendering images
US6256784B1 (en) * 1998-08-14 2001-07-03 Ati International Srl Interpreter with reduced memory access and improved jump-through-register handling
US6446034B1 (en) * 1998-12-16 2002-09-03 Bull Hn Information Systems Inc. Processor emulation virtual memory address translation
US6567883B1 (en) * 1999-08-27 2003-05-20 Intel Corporation Method and apparatus for command translation and enforcement of ordering of commands
US6990658B1 (en) * 1999-10-13 2006-01-24 Transmeta Corporation Method for translating instructions in a speculative microprocessor featuring committing state
US6591378B1 (en) * 2000-02-22 2003-07-08 Motorola, Inc. Debug controller in a data processor and method therefor
US7334115B1 (en) * 2000-06-30 2008-02-19 Intel Corporation Detection, recovery and prevention of bogus branches
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
KR100959133B1 (ko) * 2003-07-01 2010-05-26 삼성전자주식회사 핫 루틴 메모리를 갖는 마이크로프로세서 시스템 및구현방법
US7809547B2 (en) * 2005-12-29 2010-10-05 Guenthner Russell W Host computer system emulating target system legacy software and providing for incorporating more powerful application program elements into the flow of the legacy software
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US8617049B2 (en) * 2009-09-18 2013-12-31 Ethicon Endo-Surgery, Inc. Symmetrical drive system for an implantable restriction device
US8447583B2 (en) * 2009-09-18 2013-05-21 International Business Machines Corporation Self initialized host cell spatially aware emulation of a computer instruction set
US8428930B2 (en) * 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
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
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US9063760B2 (en) * 2011-10-13 2015-06-23 International Business Machines Corporation Employing native routines instead of emulated routines in an application being emulated
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
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
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
US11231931B1 (en) * 2018-12-20 2022-01-25 Advanced Micro Devices, Inc. Mechanism for mitigating information leak via cache side channels during speculative execution

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4679141A (en) * 1985-04-29 1987-07-07 International Business Machines Corporation Pageable branch history table
US4901233A (en) * 1987-07-20 1990-02-13 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
US5226164A (en) * 1991-04-24 1993-07-06 International Business Machines Corporation Millicode register management and pipeline reset
EP0619898A4 (en) * 1992-01-02 1995-05-03 Amdahl Corp COMPUTER SYSTEM WITH TWO GAS SHIFTS.
AU6629894A (en) * 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5634119A (en) * 1995-01-06 1997-05-27 International Business Machines Corporation Computer processing unit employing a separate millicode branch history table
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
US5742802A (en) * 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit

Also Published As

Publication number Publication date
US5956495A (en) 1999-09-21
KR19990029288A (ko) 1999-04-26

Similar Documents

Publication Publication Date Title
KR100284788B1 (ko) 데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템
US5870575A (en) Indirect unconditional branches in data processing system emulation mode
KR100317770B1 (ko) 데이터처리시스템의에뮬레이션모드를위한어드레스변환버퍼
KR100341533B1 (ko) 데이타처리시스템의에뮬레이션동안의인터럽트처리방법및시스템
US5752014A (en) Automatic selection of branch prediction methodology for subsequent branch instruction based on outcome of previous branch prediction
US6122638A (en) Object-oriented processor and method for caching intermediate data in an object-oriented processor
JP3628379B2 (ja) 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置
US5838988A (en) Computer product for precise architectural update in an out-of-order processor
US5136696A (en) High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
US5764938A (en) Resynchronization of a superscalar processor
US6009512A (en) Mechanism for forwarding operands based on predicated instructions
US5958047A (en) Method for precise architectural update in an out-of-order processor
US5987600A (en) Exception handling in a processor that performs speculative out-of-order instruction execution
US5812823A (en) Method and system for performing an emulation context save and restore that is transparent to the operating system
KR980010787A (ko) 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법
IE940337A1 (en) Processor ordering consistency for a processor performing¹out-of-order instruction execution
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
JPH09185506A (ja) プロセッサ内で命令を実行する方法およびシステム
US5898864A (en) Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors
US6085305A (en) Apparatus for precise architectural update in an out-of-order processor
Christie Developing the AMD-K5 architecture
US5764970A (en) Method and apparatus for supporting speculative branch and link/branch on count instructions
US5768553A (en) Microprocessor using an instruction field to define DSP instructions
US5841999A (en) Information handling system having a register remap structure using a content addressable table
US5737562A (en) CPU pipeline having queuing stage to facilitate branch instructions

Legal Events

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

Payment date: 20121127

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20131128

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20141128

Year of fee payment: 15

FPAY Annual fee payment

Payment date: 20151127

Year of fee payment: 16

FPAY Annual fee payment

Payment date: 20161128

Year of fee payment: 17

FPAY Annual fee payment

Payment date: 20171128

Year of fee payment: 18

EXPY Expiration of term