KR100230643B1 - 고성능 프로세서의 브랜치 예상 동작 방법 및 장치 - Google Patents

고성능 프로세서의 브랜치 예상 동작 방법 및 장치 Download PDF

Info

Publication number
KR100230643B1
KR100230643B1 KR1019910010876A KR910010876A KR100230643B1 KR 100230643 B1 KR100230643 B1 KR 100230643B1 KR 1019910010876 A KR1019910010876 A KR 1019910010876A KR 910010876 A KR910010876 A KR 910010876A KR 100230643 B1 KR100230643 B1 KR 100230643B1
Authority
KR
South Korea
Prior art keywords
instruction
register
address
instructions
byte
Prior art date
Application number
KR1019910010876A
Other languages
English (en)
Other versions
KR920001332A (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 KR920001332A publication Critical patent/KR920001332A/ko
Application granted granted Critical
Publication of KR100230643B1 publication Critical patent/KR100230643B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

RISC형(감소된 명령 세트)의 고성능 CPU는 표준화된 일정 명령 크기를 사용하며, 단순화된 메모리 액세스 데이타 폭 및 어드레스 지정 모드만을 제공한다. 이 명령 세트는 레지스터 대 레지스터 동작 및 레지스터의 로드 및 스토어 동작 방식으로 제한된다.
종래에 설정된 데이타 구조의 사용을 가능하게 하는 바이트 조정 명령은 비정렬된 로드 및 스토어 동작과 함께, 내부 레지스터에서의 바이트 추출, 삽입 및 마스킹을 행할 수 있는 유용성을 포함한다. 로드/로크 및 스토어/조건부 명령의 제공은 아토믹 바이트의 기입을 가능케 한다. 조건부 이동 명령을 제공함으로써, 많은 짧은 브랜치가 함께 제거될 수 있다. 조건부 이동 명령은 레지스터를 테스트하여 조건이 일치할때 제3레지스터로 제2레지스터를 이동시키는 데, 이러한 기능은 짧은 브랜치를 위해 대응될 수 있으므로 명령 스트림의 순차성을 유지할 수 있다. 브랜치의 타켓을 예상하고 이러한 예상에 따라 새로운 명령을 선추출함으로 인해 수행 능력을 가속화할 수 있다. 브랜치 예상 규칙은 모든 순방향 브랜치를 받아들이지 않고 모든 역방향 브랜치(통상, 루프)를 받아들이므로써 수행된다. 또 다른 수행 능력에 대한 개선점은 점프 및 서브 루틴 명령으로 점프등을 위해 예상된 타켓 어드레스의 힌트를 제공하도록 표준 크기의 명령으로된 미사용 비트를 이용할 수 있다는 점이다. 이와같이 타켓은 실제 어드레스가 계산되어 레지스터에 배치되기 전에 선추출될 수 있다. 아울러, 점프 명령의 미사용 변위 부분이 점프, 즉 점프, 서브 루틴으로 점프 및 서브 루틴으로 부터 복귀등에 대한 실제 형태를 정희하는 필드를 포함할 수 있으므로 명령이 실행되기 전에 선추출을 할 수 있도록 스택에 예상된 타켓 어드레스를 배치할 수 있다. 프로세서는 가변 메모리 페이지 크기를 사용할 수 있기때문에 가상 어드레스 지정을 수행하기 위한 번역 버퍼에서의 엔트리들이 최적으로 사용될 수 있다. 그래뉼어리티 힌트는 이 엔트리에 대한 페이지 크기를 한정하도록 페이지 엔트리에 대한 페이지 크기를 한정하도록 페이지 테이블 엔트리에 가산된다. 또 다른 특징은 선추출 명령을 추가할 수 있다는 점인데, 이 명령은 데이타 블록이 사용되기전에 메모리 계층에 있는 고속 액세스 캐쉬로 데이타 블록을 이동시키는 역할을 한다.

Description

고성능 프로세서의 브랜치 예상 동작 방법 및 장치
제1도는 본 발명의 특징을 사용할 수 있는 CPU를 채용한 컴퓨터 시스템의 전기 블록도.
제2도는 제1도의 프로세서에 사용되는 데이타 형식의 도면.
제3도는 제1도의 CPU의 명령 유닛(instruction unit), 즉 I-박스에 대한 전기 블록도.
제4도는 제1도의 CPU의 정수 실행 유닛(integer execution unit), 즉 E-박스에 대한 전기 블록도.
제5도는 제1도의 CPU의 어드레스 지정 유닛(addressing unit), 즉 A-박스에 대한 전기 블록도.
제6도는 제1도의 CPU의 부동 소수점 실행 유닛(floating point execution unit), 즉 F-박스에 대한 전기 블록도.
제7도는 제1도 내지 제6도의 CPU에 있어서의 파이프라이닝에 대한 타이밍도.
제8도는 제1도 내지 제6도의 CPU의 명령 세트에 사용되는 명령 포맷을 나타내는 도면.
제9도는 제1도 내지 제6도의 CPU에 사용되는 가상 어드레스의 포맷을 나타내는 도면.
제10도는 제1도 내지 제6도의 CPU에 사용되는 페이지 테이블 엔트리의 포맷을 나타내는 도면.
제11도는 제1도 내지 제6도의 CPU에 사용되는 주소 번역 메카니즘의 도면.
* 도면의 주요부분에 대한 부호의 설명
10 : CPU 11 : 시스템 버스
12 : 메인 메모리 20 : 캐쉬
21 : I-캐쉬 30 : 브랜치 예상 회로
31 : 서브 루틴 복귀 스택 32 : 어드레스 발생 회로
40 : 산술/논리 유닛 42 : 정수 승산기
49 : 로드 사일로(load silo) 50 : 기록 버퍼
52 : 외부 인터페이스 57 : 헤드 포인터
58 : 테일 포인터(tail pointer) 61 : 부동 소수점 레지스터 파일
본 발명은 디지탈 컴퓨터에 관한 것으로서, 보다 구체적으로는 감소된 명령세트(reduced instruction set)를 실행하는 고성능 프로세서에 관한 것이다.
복잡한 명령 세트, 즉 CISC 프로세서는 종종 복잡한 메모리 접근 모드를 가진 메모리 대 메모리 명령(memory-to-memory instruction)을 포함하여, 그 명령 세트에 다수의 명령을 갖는 것을 특징으로 한다. 일반적으로 명령은 가변 길이로 되어 있는데, 예컨대 간단한 명령은 1 바이트의 길이만을 갖지만, 수십 바이트에 달하는 길이를 갖는 명령도 있다. VAXTM명령 세트는 CISC의 주요한 예이며, 1 내지 2 바이트의 OP 코드와 0 내지 6개의 오퍼랜드 특정자(operand specifier)를 가진 명령을 사용하는데, 각각의 오퍼랜드 특정자는 길이가 1 바이트 내지 다수의 바이트로 되어 있다. 오퍼랜드 특정자의 크기는 주소 지정 모드, 변위 크기(바이트, 워드 또는 롱워드) 등에 따른다. 오퍼랜드 특정자의 제1 바이트는 그 오퍼랜드의 주소 지정 모드를 나타내며, OP 코드는 오퍼랜드의 수, 즉 1, 2 또는 3을 정의한다. OP 코드 자체가 디코드되어도 오퍼랜드 특정자가 아직 디코드되지 않았기 때문에, 프로세서는 명령의 전체 길이를 알지 못한다. VAX형 프로세서의 또 다른 특징은 콰드워드(quadword) 또는 롱워드 참조 외에 바이트 또는 바이트 스트링 메모리 참조를 사용한다는 것인데, 즉 메모리 참조는 비정렬된 바이트 참조를 포함해서, 1바이트로부터 다수 개의 워드의 가변 길이로 될 수 있다.
감소된 명령 세트, 즉 RISC 프로세서는 디코드가 간단한 적은 수의 명령 및 모든 산술/논리 연산이 레지스터 대 레지스터 방식으로 수행되는 것을 특징으로 한다. 또 다른 특징은 복잡한 메모리 엑세스를 허용하지 않고 모든 메모리 액세스는 레지스터 로드/스토어 동작 및 비교적 간단한 소수의 어드레싱 모드, 즉 오퍼랜드 주소를 특정하는 단지 몇 가지의 방법만이 있다는 것이다. 명령은 단 하나의 길이로만 이루어지며, 메모리 액세스는 통상 정렬된 표준 데이타 폭으로 이루어진다. 명령실행은 마이크로 코딩과는 구별되는 직접 고정 배선형(direct hardwired type)으로 이루어진다. 명령 사이클 시간은 고정형 명령 사이클 시간이고, 명령은 하나의 짧은 사이클[평균값임, 그 이유는 파이프라이닝이 여러 개의 사이클에 걸쳐서 실제적으로 실행되기 때문임] 내에서 실행되도록 비교적 간단하게 정의된다.
CISC 프로세서의 하나의 장점은 소스 코드를 기록하는 데 있다. 여러 종류의 강력한 명령, 메모리 액세싱 모드 및 데이타 형태는 코드의 각 라인에 대해 보다 많은 작업을 수행할 수 있게 하지만(실제로, 컴파일러는 이 장점을 최대로 이용하는 코드를 발생시키지 못함), 소스 코드를 간단히 함으로써 얻는 이득은 실행 시간의 희생을 초래한다. 특히, 현재 시스템에서 요구되는 성능 수준을 달성하기 위하여 파이프라인식의 명령 실행이 필요함에 따라서, 잇따른 명령의 데이타 또는 상태 의존성 및 메모리 액세스 시간 대 머신 사이클 시간 간의 큰 차이는 과도한 스톨(stall) 및 예외를 발생시켜 실행을 느리게 한다. RISC 프로세서의 장점은 코드 실행 속도에 있지만, 그 단점은 코드의 각 라인에 의해 더 적은 수의 실행이 수행되며 소정의 작업(task)을 수행하기 위한 코드의 길이가 훨씬 더 길어진다는 것이다. VAX 코드의 하나의 라인은 RISC 코드의 다수의 라인과 동일한 작업을 수행할 수 있다.
CPU가 메모리보다 훨씬 빠른 경우, 단위 명령당 보다 많은 작업을 하는 것이 유리한데, 왜냐하면 그렇지 않은 경우에는 CPU는 항상 메모리로부터 명령이 전달되기를 기다려야 하기 때문이다. 이러한 이유 때문에, 그렇지 않은 경우에는 서브루틴으로 구현되어야 하는 더 복잡한 명령을 사용하게 된다. CPU 및 메모리 속도가 보다 균형을 이루는 경우, RISC 개념과 같은 간단한 방법이 보다 적당한데, 이때에는 메모리 시스템이 각 사이클 마다 하나의 명령 및 몇몇 데이타를 전달할 수 있는 것으로 가정한다. 고속 액세스 사이클 뿐만 아니라 계층 메모리 기술은 더 빠른 메모리 속도를 제공한다. CISC 대 RISC 선택에 영향을 주는 또 다른 요인은 CPU를 VLSI 구조로 구성함으로써 생기는 오프칩 대 온칩의 상호 접속의 상대 비용의 변화이다. 보드 대신에 칩 상에 구성하는 것이 경제성을 변화시키는데, 첫째로 하나의 칩 상에 놓이도록 아키텍쳐를 충분히 간단히 구성함으로써, 오프칩으로부터의 메모리 참조를 회피하기 위해 다수의 온칩 메모리를 구성할 수 있게 한다. 비교시의 또 다른 요인은 CISC 방식에서와 같이 더 복잡한 명령 및 주소 지정 모드를 추가하는 것인데, 이는 명령 실행 처리의 단계를 복잡하게 하여 속도를 저하시킨다. 복잡한 기능은 등가의 연속된 간단한 명령보다 고속으로 기능 실행을 할 수 있지만, 명령 사이클 시간이 길어져 모든 명령 실행을 느리게 할 수 있으므로, 추가된 기능은 명령 실행 속도의 감소를 보상할 수 있을 정도로 충분한 전반적인 성능을 향상시켜야 한다.
여러 가지 요인을 고려해 볼 때, RISC 프로세서의 장점은 단점을 능가하는 것으로 생각되며, 기존의 소프트웨어 기반이 아닌 경우에는 대부분의 새로운 프로세서는 RISC 특성을 사용하여 설계된 것으로 본다. 문제는 기업이 과거 10년 내지 15년 동안 가장 널리 사용되어온 CISC형 프로세서를 사용하는 응용 프로그램 및 데이타 구조에 운용자의 교육 훈련 뿐만 아니라 그 자체의 코드 비용을 포함하여 수 년간의 운용 경험을 투자했다는 사실이다. 궁극적으로 달성되리라고 기대되는 성능 장점이 실질적인 면이 있다 하더라도, 새로운 프로세서의 아키텍쳐에 맞게 모든 코드 및 데이타 구조를 재작성하는 작업 비용 및 혼란은 정당화되지 않을 수 있다.
따라서, 본 발명의 목적은 RISC형 프로세서 아키텍쳐의 모든 성능 장점을 달성할 수 있으면서도, 기존의 CISC형 프로세서를 위해 작성된 데이타 구조 및 코드가 고성능 프로세서에서 사용되도록 번역될 수 있도록 하는 것이다.
본 발명의 일실시예에 따르면, 표준화된 고정형 명령 크기를 사용하고 간단한 주소 지정 모드를 사용하는 간단한 메모리 액세스 데이타 폭만을 허용하는 RISC형의 고성능 프로세서가 제공된다. 명령 세트는 (ALU 등을 사용하는 산술 및 논리형 연산에 대해서는) 레지스터 대 레지스터 동작 및 메모리가 참조되는 레지스터 로드/스토어 동작으로 제한되는데, 즉 메모리 대 메모리 동작이 없으며 ALU 또는 기타 논리 기능이 실행되는 경우에는 레지스터 대 메모리 동작도 없다. 명령에 의해 수행되는 기능은 비마이크로 코드형(non-microcoded) 구현을 허용하고 짧은 사이클 내에서 디코드되고 실행되도록 간단한 것으로 제한된다. 온칩 부동소수점 처리가 제공되며, 온-칩 명령 및 데이타 캐쉬가 실시예에 채용된다.
이미 구축된 데이터 구조를 사용하도록 하기 위하여 바이트 조작 명령이 포함된다. 이러한 명령은 실제의 메모리 동작이 본질적으로 콰드워드로 정렬되어 있다고 하더라도 바이트 주소가 사용될 수 있도록 하기 위하여, 비정렬된 로드 및 스토어 동작과 함께 레지스터 내의 바이트 추출, 삽입 및 마스킹 기능을 포함한다.
로드/로크 및 스토어/조건부 명령은 원자(atomic) 바이트 기록을 허용한다. 다중 바이트(예컨대, 콰드워드)로 정렬된 메모리 내의 바이트 주소에 기록하기 위해서, CPU는 콰드워드(또는 롱워드)를 로드하고 이 주소를 로크하여 레지스터 내의 바이트 주소에 기록하는 한편 콰드워드의 나머지 부분은 그대로 둔 후, 로드/로크 동작 이후에 다른 프로세서에 의해 콰드워드가 기록되었는지의 여부에 따라 조건부로 상기 갱신된 콰드워드를 메모리에 기록한다.
본 발명의 하나의 특징에 따른, 또 다른 바이트 조작 명령은 바이트 비교 명령이다. 레지스터 내의 콰드워드의 모든 바이트는 또 다른 레지스터 내의 대응 바이트와 비교된다. 그 결과는 제3 레지스터 내에 단일의 바이트(비교된 각 바이트에 대해 하나의 비트)로 남게 된다. 이러한 동작은 (특정한 하드웨어 위치에 대해서가 아니라) 범용 레지스터에 대해서 행하여지기 때문에, 여러 개의 바이트의 비교가 연속적으로 행하여 질 수 있으며, 인터럽트 등을 위한 어떤 추가의 상태가 고려되어서는 안된다. 이러한 바이트 비교는 콰드워드의 선택된 바이트가 0이 되고 레지스터의 하위 바이트 내의 비트 단위로 선택되는 바이트를 0으로 채우는 명령과 함께 유리하게 사용될 수 있다. 즉, 바이트 비교의 결과는 다른 레지스터의 바이트를 0으로 하는 데 사용될 수 있다.
실행 속도는 명령 스트림의 순차성에 크게 의존하는데, 브랜치는 시퀀스를 중단시켜 미리 인출된 명령 스트림이 플러쉬(flush)되고 새로운 시퀀스가 시작되는 동안 스톨(stall)을 발생시킨다. 조건부 이동 명령(move instruction)을 제공함으로써 많은 짧은 브랜치가 함께 제거될 수 있다. 조건부 이동 명령은 레지스터를 테스트하여 조건이 일치하는 경우 제2 레지스터를 제3 레지스터로 이동시키는데, 이 기능은 짧은 브랜치를 대체하여 명령 스트림의 순차성을 유지되도록 할 수 있다.
브랜치를 회피할 수 없는 경우, 브랜치의 타켓(target)을 예상하여 이 예상에 기초하여 새로운 명령을 미리 인출함으로써 실행 속도를 높일 수 있다. 본 발명의 일실시예의 특징에 따르면, 브랜치 예상 규칙은 예상된 모든 순방향 브랜치는 취하지 않고, 예상된 모든 역방향 브랜치[루프(loop)에서 흔히 있음]는 취하도록 함으로써 수행된다. 컴파일(compile)시에 가장 가능성이 있는 경로가 순방향이 아닌 역방향이 되도록 코드가 재배치되기 때문에, 대개 예상된 경로가 취해져 적당한 명령이 미리 인출된다.
또 다른 성능 개선점은 표준 크기의 명령 내의 사용되지 않은 비트를 사용하여 예상된 타켓 어드레스의 힌트(hint)를 서브 루틴으로의 점프 명령(jump to subroutine instructions) 등에 제공하는 것이다. 따라서, 타켓은 실제 어드레스가 계산되기 전에 미리 인출되어 레지스터에 놓일 수 있다. 명령이 실행될 때, 힌트의 타켓 어드레스가 계산된 어드레스와 일치하면, 미리 인출된 어드레스가 이미 파이프라인에 있게 되어 더 빠른 실행이 가능하다. 힌트는 컴파일러에 의해 점프 명령에 추가된다.
또한, 점프 명령의 사용되지 않는 변위부는 점프의 실제 형태(즉, 점프, 서브 루틴으로의 점프 및 서브 루틴으로부터의 복귀)를 정의하는 필드를 포함할 수 있기 때문에, 명령이 실행되기 전에 선인출을 허용하도록 예상된 타켓 어드레스를 스택에 집어 넣거나 또는 힌트에 의해 정의된 동작에 대해 다른 적절한 동작을 취할 수 있다. 힌트는 하드웨어에 의해 무시될 수 있으며, 만약 그런 경우 코드는 여전히 적절히, 즉 다소 느리게 실행된다.
본 발명의 일실시예의 하나의 특징에 따르면, 프로세서는 가변 메모리 페이지 크기를 사용하기 때문에, 가상 주소 지정 방식을 구현하기 위한 번역 버퍼내의 엔트리가 최적으로 사용될 수 있다. 세분성 힌트(granularity hint)는이 엔트리에 대한 페이지 크기를 정의하기 위하여 페이지 테이블 엔트리에 추가된다. 다수의 순차적인 페이지가 동일한 보호 및 액세스 권한을 공유하는 경우, 이 모든 페이지는 동일한 페이지 테이블 엔트리를 사용하여 참조될 수 있으므로, 번역 버퍼를 보다 효율적으로 사용할 수 있다. 번역 버퍼 내의 적중(hit) 가능성이 증가하는 경우, 페이지 테이블 액세스 폴트(fault)의 수가 최소화된다.
본 발명의 추가적인 특징은 데이타 블록이 사용되기 전에 (데이타 블록을) 메모리 계층 내의 고속 액세스 캐쉬로 이동시키는 기능을 하는 선인출 명령을 추가하는 데 있다. 이 선인출 명령은 백터 프로세서의 기능과 유사한 기능을 수행하기 위하여 컴파일러에 의해 삽입될 수 있지만, 벡터 하드웨어를 필요로 하지 않는다. 선인출 명령은 메모리 예외 또는 보호 위반 또는 액세스 위반을 발생하지 않기 때문에, 선인출이 실패한 경우에도 실행을 느리게 하지는 않는다. 환언하면, 명령이 선택적이고 프로세서가 그 명령을 실행하지 못하는 경우, 정상적인 코드가 아무런 문제 없이 실행된다.
본 발명의 신규한 특징들은 첨부한 특허 청구 범위에 기재되어 있다. 본 발명의 기타 특징 및 장점은 첨부한 도면과 관련한 이하의 특정 실시예를 통해 보다 잘 이해할 수 있을 것이다.
제1도를 참조하면, 본 발명의 특징을 이용할 수 있는 제1 실시예에 따른 컴퓨터 시스템은, 시스템 버스(11)를 통해 액세스되는 I/O 유닛(13)과 함께 시스템 버스(11)에 의해 메인 메모리(12)에 접속되는 CPU(10)를 포함한다. 이 시스템은 독립형 워크스테이션(stand-alone workstation)으로부터 중간 범위(mid-range)의 다중 프로세서에 이르기까지 여러 가지의 수준으로 이루어질 수 있는데, 어느 경우에 있어서나 CPU(15)와 같은 기타 CPU들도 역시 시스템 버스(11)를 통해 메인 메모리(12)를 액세스한다.
CPU(10)는 본 발명의 특징이 다중 칩 형태로 구성된 프로세서에 사용될 수 있다 하더라도 단일 칩의 회로 장치인 것이 좋다. 단일 칩 내에서 정수 실행 유닛(16, E-박스라 함)과 함께 부동 소수점 실행 유닛(17, F-박스라 함)이 포함된다. 명령 인출 및 디코딩은 명령 유닛(18), 즉 I-박스에서 수행되고, 어드레스 유닛, 즉 A-박스(19)는 어드레스 생성, 메모리 관리, 기록 버퍼링 및 버스 인터페이스의 기능을 수행한다. 메모리는 실시예에서 명령 유닛(18) 및 어드레스 유닛(19)에 포함되는 온칩 명령 및 데이타 캐쉬를 가지며, 어드레스 유닛(19)내의 캐쉬 제어기에 의해 제어되는 더 큰 제2 레벨의 캐쉬(20)가 오프칩에 제공되는 계층 구조로 되어 있다.
CPU(10)는 모든 명령이 고정된 크기로 되어 있는, 즉 32 비트(하나의 롱워드)로 되어 있는 이하 설명되는 명령 세트를 사용한다. 사용되는 명령 및 데이타 형식은 제2도에 도시한 바와 같이 바이트, 워드, 롱워드 및 콰드워드이다. 본 명세서에서, 바이트는 8비트로 되어 있고, 워드는 16 비트, 즉 2 바이트이며, 롱워드는 32 비트, 즉 4 바이트이며, 콰드워드는 64 비트, 즉 8 바이트이다. CPU(10)내의 데이타 경로 및 레지스터는 일반적으로 64 비트, 즉 콰드워드 크기이며, 메모리(12) 및 캐쉬는 기본 전송 단위로써 콰드워드를 사용한다. 성능은 콰드워드 또는 롱워드의 로드 및 스토어만을 허용함으로써 향상되는데, 종래 소프트웨어 개발에서 사용된 데이타 형식과 호환성이 있도록 특정 고유의 명령에 의해 바이트 조작이 허용되기는 하지만 콰드워드 또는 롱워드의 로드 및 스토어만을 허용하는 특징을 여전히 유지하고 있다.
제3도를 참조하면, 명령 유닛(18), 즉 I-박스가 상세히 도시되어 있다. 명령 유닛(18)의 주요한 기능은 E-박스(16), A-박스(19) 및 F-박스(17)로 명령을 발생하는 것이다. 명령 유닛(18)은 대개 8K 바이트의 명령 스트림 데이타를 저장하는 명령 캐쉬(21)를 포함하며, 이 명령 스트림 데이타의 콰드워드(2개의 명령)는 파이프라인이 진행하는 각 사이클에서 명령 레지스터(22)에 로드된다. 바람직한 실시예에서, 명령 유닛(18)은 디코더(23, 24)에서 병렬로 두 개의 명령을 디코드한다음, 두 개의 명령에 대한 요구된 자원(resource)이 검사 회로(25)에 의해 검사된다. 자원이 이용 가능하고 이중 발행(dual issue)이 가능하면, 두 개의 명령은 버스(26, 27)상에 레지스터 어드레스를 인가하고 제어 비트를 마이크로 제어 버스(28, 29)에 인가하여 CPU(10)내의 적당한 소자에 인가함으로써 발행된다. 자원이 단지 제1 명령에 대해서만 이용 가능하거나 또는 명령이 이중으로 발행될 수 없는 경우에는, 명령 유닛(18)은 디코더(23)로부터 단지 제1 명령만을 발행한다. 명령 유닛(18)은 [디코더(24)로부터의] 제2 명령에 대해서 자원이 이용 가능하고 제1 명령에 대해서는 이용 가능하지 않는 경우에는 명령을 순서에 무관하게(out of order) 발행하지는 않는다. 명령 유닛(18)은 제1 명령에 대한 자원이 이용 가능하게 될 때까지는 명령을 발행하지 않는다. [디코더(23)로부터의] 한 쌍의 명령 중 제1 명령만이 발행되는 경우, 명령 유닛(18)은 다시 이중 명령 발행을 시도하기 위하여 또 다른 명령을 명령 레지스터(22)로 집어 넣지 않는다. 이중 명령 발행은 메모리[또는 명령 캐쉬(21)]로부터 인출되는 정렬된 콰드워드 쌍으로만 시도되며, 정렬된 콰드워드로서 명령 레지스터(22)에 로드된다.
명령 유닛(18)은 레지스터(22) 내로 로드되는 명령 스트림 내의 명령에 응답하는 브랜치 예상 회로(30)를 포함한다. 서브 루틴 복귀 스택(31)과 함께 상기 예상 회로(30)는 브랜치 어드레스를 예상하여 어드레스 생성 회로(32)로 하여금 필요한 시점 이전에 명령 스트림을 선인출하도록 하는 데 사용된다. 서브 루틴 복귀 스택(31, 예컨대 4개의 엔트리를 가짐)은 후술하는 바와 같이 점프, 서브 루틴으로의 점프 및 복귀 명령내의 힌트 비트에 의해 제어된다. 가상 PC(프로그램 카운터, 33)는 선택된 순서로 명령 스트림 데이타에 대한 어드레스를 생성하도록 어드레스 생성 회로(32)내에 포함된다.
하나의 브랜치 예상 방법은 조건부 브랜치를 예상하기 위하여 브랜치 변위의 부호 비트 값을 사용하는 것인데, 이렇게 함으로써 회로(30)는 입력(35)에 나타나는 브랜치 명령 내의 부호 비트에 응답하게 된다. 상기 부호 비트가 음(negative)인 경우, 브랜치가 일어나는 것으로 예상하여 어드레싱 회로(32)는 인출될 새로운 어드레스 시퀀스의 제1 어드레스를 생성하기 위하여 레지스터 Ra에 변위를 가산한다. 부호가 양(positive)인 경우에는, 브랜치가 일어나지 않은 것으로 예상하여 현재의 명령 스트림이 순차적으로 계속된다.
명령 유닛(18)은 최근에 사용된 명령 스트림 어드레스 번역 및 보호 정보를 8K 바이트 페이지에 캐쉬하기 위하여 8개 엔트리의 완전 연관 번역 버퍼(TB, 36)를 포함한다. 64 비트 어드레스가 명목상으로 가능하지만, 실제적으로는 43 비트 어드레스이면 족하다. 매 사이클마다, 43 비트의 가상 프로그램 카운터(33)가 명령 스트림(번역 버퍼, 36)에 제공된다. 가상 PC와 관련된 페이지 테이블 엔트리(page table entry: PTE)가 TB(36)에 캐쉬되면, 가상 PC를 포함하는 페이지에 대한 보호 비트 및 페이지 프레임 번호(page frame number: PFN)가 명령 유닛(18)에 의해 사용되어 어드레스 번역 및 액세스 검사를 완료한다. 따라서, 물리적 어드레스가 명령 캐쉬(21)의 어드레스 입력(37)에 인가되고, 또는 캐쉬 미스(cache miss)가 있으면, 명령 스트림의 물리적 어드레스는 어드레스 유닛(19)을 통해 버스(38)에 의해 캐쉬(20) 또는 메모리(12)에 인가된다. 바람직한 실시예에 있어서, 명령 스트림 번역 버퍼(36)는 번역 버퍼(36)내의 적중(hit)율이 증가하도록 이하에서 정의된 임의의 4개의 세분성 힌트(granularity hint) 블록 크기를 지원한다.
제4도에는 실행 유닛, 즉 E-박스(16)가 상세히 도시되어 있다. 실행 유닛(16)은 산술/논리 유닛(ALU, 40), 배럴 쉬프터(41) 및 정수 승산기(42)를 포함하는 64 비트의 정수 실행 데이타 경로를 포함한다. 또한, 실행 유닛(16)은 레지스터 R0 내지 R31로 표시된 32개의 레지스터로 구성된 64 비트폭의 레지스터 파일(43)을 포함하는데, 여기서 R31은 모두 0으로써 배선 결합(hardwired)되어 있다. 레지스터 파일(43)은 4개의 판독 포트와 2개의 기록 포트를 가지고 있는데, 이들은 정수 실행 데이타 경로 및 어드레스 유닛(19)에 대해 오퍼랜드(결과값)의 소싱(싱킹[sourcing(sinking)]을 제공하도록 한다.
버스 구조(44)는 명령 유닛(18)으로부터 버스(28, 29) 상의 디코드된 명령의 제어 비트에 의해 특정된 바에 따라서, ALU(40), 쉬프터(41) 또는 승산기(42)의 선택된 입력단에 레지스터 파일(43)의 2개의 판독 포트를 접속하고, 해당 기능부의 출력을 기록 포트 중 하나에 접속하여 그 결과를 저장한다. 즉, 명령으로부터의 어드레스 필드는 명령을 실행하는 데 사용되는 레지스터를 선택하도록 버스(26, 27)에 의해 인가되며, 제어 비트(28, 29)는 ALU 등에서의 연산을 정의하며 버스 구조(44) 중 어느 내부 버스가 사용될지 등을 정의한다.
제5도에는 A-박스, 즉 어드레스 유닛(19)이 상세히 도시되어 있다. A-박스(19)는 5개의 기능부를 가지는데, 즉 번역 버퍼(48)를 사용하는 어드레스 번역부, 입력 데이타(incoming data)용 로드 사일로(load silo)(49), 출력(outgoing) 기록 데이타용 기록 버퍼(50), 데이타 캐쉬에 대한 인터페이스(51) 및 버스(11)에 대한 외부 인터페이스(52)이다. 어드레스 번역 데이타 경로는[기록 및 판독 포트의 제2 세트를 통한 레지스터 파일(43) 및 PC를 액세스함으로써] 유효 어드레스를 생성하는 변위 가산기(53), 어드레스 버스(54) 상에 물리적인 어드레스를 생성하는 데이타 TB(48) 및 파이프라이닝에 필요한 다중화기(MUX) 및 바이패서를 갖는다.
32개의 완전 연관 데이타 번역 버퍼(48)는 최근에 사용되는 데이타 스트림 페이지 테이블 엔트리를 8K 바이트 페이지에 대해 캐쉬한다. 각 엔트리는 임의의 4개의 세분성 힌트 블록 크기를 지원하며, 검출기(55)는 후술하는 바와 같이 세분성 힌트에 응답하여, 가상 어드레스 버스(56)로부터 물리적인 어드레스 버스(54)로 통과하는 가상 어드레스의 하위 비트수를 변화시킨다.
로드 및 스토어 명령에 대해, 유효 43 비트의 가상 어드레스가 버스(56)를 통해 TB(48)에 제공된다. 제공된 가상 어드레스의 PTE가 TB(48)내에 캐쉬되는 경우, 어드레스를 포함하는 페이지에 대한 PFN 및 보호 비트가 어드레스 유닛(19)에 의해 어드레스 번역 및 액세스 검사를 완료한다.
기록 버퍼(50)는 2가지 목적으로 사용되는데, 그 하나의 목적은 스토어 데이타를 수신하기 위해 고대역폭 (그러나, 한정적인)의 자원을 제공함으로써 CPU스톨 사이클 수를 최소화하는 것이다. 이것은 외부 캐쉬(20)가 데이타를 받아들일 수 있는 속도보다 더 큰 속도로 CPU(10)가 매 CPU 사이클마다 하나의 콰드워드의 최대 속도로 스토어 데이타를 생성할 수 있기 때문에 요구된다. 두 번째의 목적은 CPU(10)로부터 외부 캐쉬(20)내로 데이타가 기록될 수 있는 속도를 최대화할 목적으로 스토어 데이타를 정렬된 32 바이트의 캐쉬 블록으로 통합하기 위한 것이다. 기록 버퍼(50)는 8개의 엔트리를 갖는다. 기록 버퍼 엔트리는 기록될 데이타를 포함하지 않는 경우에는 유효하지 않고(invalid), 기록될 데이타를 포함하고 있는 경우에는 유효(valid)하다. 기록 버퍼(50)는 헤드 포인터(57) 및 테일 포인터(58)를 포함한다. 상기 헤드 포인터(57)는 가장 오랜 시간 동안 유효한 유효 기록 버퍼 엔트리를 가리키고(point), 상기 테일 포인터(58)는 다음으로 유효하게 될 유효 버퍼 엔트리 슬롯을 가리킨다. 기록 버퍼(50)가 완전히 채워지거나 완전히 빈 경우, 헤드 및 테일 포인터는 동일한 유효 엔트리 또는 무효 엔트리를 가리킨다. 기록 버퍼(50)에 새로운 스토어 명령이 제공될 때마다, 명령에 의해 생성되는 물리적 어드레스는 각 유효 기록 버퍼 엔트리 내의 어드레스와 비교된다. 어드레스가 유효 기록 버퍼 엔트리 내의 어드레스와 동일한 정렬된 32 비트의 블록에 있으면, 스토어 데이타는 그 엔트리 내에 통합(merge)되고 엔트리의 롱워드 마스크 비트는 갱신된다. 기록 버퍼 내에서 일치된 어드레스(matching address)가 발견되지 않으면, 테일 포인터(58)가 가리키는 엔트리 내에 스토어 데이타가 기록되며, 엔트리는 유효하게 되고 테일 포인터(58)는 다음 엔트리로 증가된다.
어드레스 유닛(19)은 데이타 캐쉬(59, D 캐쉬)의 채움(fill)이 요구될 때까지 매 사이클 마다 새로운 로드 또는 스토어 명령을 받아들일 수 있는 완전 폴드형(fully folded) 메모리 참조 파이프라인을 포함한다. 데이타 캐쉬(59)의 라인들은 로드 미스시에만 할당되기 때문에, 어드레스 유닛(19)은 로드 미스가 발생할 때까지 매 사이클마다 새로운 명령을 받아들일 수 있다. 로드 미스가 발생하는 경우, 명령 유닛(18)은 레지스터 파일(43)의 로드 포트를 사용하는 모든 명령, 즉 로드, 스토어, 점프 서브 루틴 등의 명령의 발행을 중지한다.
각각의 데이타 캐쉬(59) 룩업의 결과가 파이프라인의 끝부분에서 알려지고(후술되는 단계 S7) 명령이 파이프 단계 S3에서 발행되기 때문에, 데이타 캐쉬(59)를 미스한 로드 명령 이후 어드레스 유닛(19)의 파이프라인 내에 2개의 명령이 존재할 수 있다. 이들 2개의 명령은 다음과 같이 취급된다. 먼저, 데이타 캐쉬(59)를 적중(hit)한 로드를 완료하고, 둘째는 사일로(49)에 로드 미스를 집어 넣고 제1 로드 미스가 완료된 후에 순서에 따라 재생한다. 셋째로 파이프라인에 대하여 정상 시간에서 데이타 캐쉬(59)에 스토어 명령을 제공한다. 이들은 사일로(silo)되고 로드 미스에 관한 순서대로 기록 버퍼(50)에 제공된다.
제6도에 상세히 도시되어 있는 온칩 파이프라인형 부동 소수점 유닛(17), 즉 F-박스는 후술되는 명령 세트에 따라서 DEC 및 IEEE 부동 소수점 명령 둘 모두를 실행할 수 있다. 부동 소수점 유닛(17)은 64 비트의 32개의 엔트리의 부동 소수점 레지스터 파일(61) 및 부동 소수점 산술 및 논리 유닛(62)을 포함한다. 제산 및 승산은 승산/제산 회로(63)에서 수행된다. 버스 구조(64)는 명령 유닛(18)으로부터의 버스(28, 29)상의 디코드된 명령의 제어 비트에 의해 지시된 바에 따라 레지스터 파일(61)의 2개의 판독 포트를 적절한 기능 회로에 상호 접속한다. 연산을 위해 선택된 레지스터는 명령 디코드로부터의 출력 버스(26, 27)에 의해 정의된다. 부동 소수점 유닛(17)은 매 사이클마다 명령을 받아들일 수 있으며 (단지 매 여러 개의 사이클 마다 받아들여질 수 있는) 부동 소수점 제산 명령 예외가 있을 수 있다. 모든 부동 소수점 명령에 대해 1 사이클 이상의 지연(latency)이 나타난다.
실시예에 있어서, CPU(10)는 8K 바이트의 데이타 캐쉬(59)와 8K 바이트의 명령 캐쉬(21)를 가지는데, 여기서 캐쉬 크기는 이용 가능한 칩 영역에 따른다. 온칩 데이타 캐쉬(59)는 라이트 쓰루 직접 매핑형(write-through, direct mapped) 판독 할당식 물리적 캐쉬이며, 32 바이트(1-헥사워드) 블록을 갖는다. 시스템은 무효 버스(도시하지 않음)를 사용하여 메모리(12)와 데이타 캐쉬(59)의 일관성(coherent)을 유지할 수 있다. 데이타 캐쉬(59)는 데이타 어레이(66)내에 롱워드 패리티(longword parity)를 가지며, 태그 스토어(67)내의 각 태그 엔트리에 대한 패리티 비트가 있다.
명령 캐쉬(21)는 8K 바이트 또는 16K 바이트일 수 있으며, 예컨대 다이 영역(die area)에 따라 더 크거나 더 작을 수 있다. TB(36)를 가진 물리적인 어드레싱을 사용하여 전술하였지만, 가상 캐쉬일 수도 있으며, 어느 경우에나 메모리(12)와의 일관성을 유지할 대책을 포함하지 않는다. 캐쉬(21)가 물리적으로 어드레스되는 캐쉬인 경우, 칩은 메모리와의 일관성을 유지하기 위한 회로를 포함한다. 즉, (1) 기록 버퍼(50) 엔트리가 버퍼 인터페이스(52)로 전송될 때, 어드레스는 이중(duplicate) 명령 캐쉬(21) 태그와 비교되고, 명령 캐쉬(21)의 대응 블록이 조건부로 무효화되며, (2) 무효 버스는 명령 캐쉬(21)에 접속되게 된다.
CPU(10) 내의 주데이타 경로 및 레지스터는 모두 64 비트의 폭으로 되어 있다. 즉, 각 정수 레지스터(43) 및 각 부동 소수점 레지스터(61)는 64 비트의 레지스터이며, ALU(40)는 2개의 64 비트 입력(40a, 40b)과 하나의 64 비트 출력(40c)을 갖는다. 실제로 하나 이상의 버스로 구성되는, 실행 유닛(16) 내의 버스구조(44)는 정수 레지스터(43)와 ALU(40)의 입·출력 간에 오퍼랜드를 전송하기 위한 64 비트 폭의 데이타 경로를 갖는다. 명령 디코더(23, 24)는 ALU(41, 62)에 대한 입력으로서 어떤 레지스터의 오퍼랜드가 사용될지를 선택하고 레지스터(43, 61) 중 어느 것이 ALU(또는 기타 기능 유닛) 출력에 대한 목적지(destination) 인지를 선택하기 위하여, 정수 레지스터(43) 및/또는 부동 소수점 레지스터(61)의 어드레싱 회로에 인가되는 레지스터 어드레스 출력(26, 27)을 생성한다.
하나의 사이클에서 제1 칼럼으로부터의 하나의 명령과 제2 칼럼으로부터의 하나의 명령이 발행될 수 있는 이중 발행 결정은 이하의 요구 조건에 따라 회로(25)에 의해 결정된다.
칼럼 A 칼럼 B
정수 연산 부동 소수점 연산
부동 소수점 로드/스토어 정수 로드/스토어
부동 소수점 브랜치 정수 브랜치
JSR
즉, CPU(10)는 정수 연산 명령과 정수 로드 또는 스토어 명령을 이중 발행할 수는 있지만, 정수 로드 또는 스토어 명령과 정수 브랜치 명령을 이중으로 발행할 수는 없다. 물론, 회로(25)는 동일 사이클에서 2개의 명령 발행을 허용하기 전에 자원이 이용 가능한지를 검사한다.
중요한 특징은 제1도 내지 제6도의 CPU(10)의 RISC 특성이다. CPU(10)에 의해 실행되는 명령은 항상 동일 크기이며, 이 경우에 있어서는 가변 길이의 명령 대신 32 비트의 크기이다. 명령은 대개 가변 사이클수가 아닌 평균적으로 1 기계 사이클 내에서 실행된다(후술하는 바와 같이 파이프라인 식으로 수행되며, 스톨리 없는 것으로 가정함). 명령 세트는 레지스터 대 레지스터 산술/논리 형식의 연산 또는 레지스터 대 메모리(또는, 메모리 대 레지스터) 로드/스토어 형식의 연산만을 포함하며, 간접 주소 지정 방식 등과 같은 복잡한 메모리 주소 지정 모드는 없다. ALU(40)에서 연산을 수행하는 명령은 항상 레지스터 파일(43)로부터(또는, 자신의 명령 필드로부터) 오퍼랜드를 취하며 레지스터 파일(43)에 그 결과를 기록한다. 즉, 이들 오퍼랜드는 결코 메모리로부터 취해지는 일은 없으며 그 결과를 결코 메모리에 기록되지 않는다. 메모리로부터의 로드는 항상 레지스터 파일(43, 61)내의 레지스터에 이루어지고, 메모리로의 스토어는 항상 레지스터 파일 내의 레지스터로 부터 이루어진다.
제7도를 참조하면, CPU(10)는 정수 연산 및 메모리 참조 명령에 대해 7단계의 파이프라인을 갖는다. 명령 유닛(18)은 명령 캐쉬(21)의 히트/미스를 결정하기 위하여 7단계의 파이프라인을 갖는다. 제7도는 실행 유닛(16), 명령 유닛(18) 및 어드레스 유닛(19)의 파이프라인에 대한 파이프라인 다이어그램이다. 부동소수점 유닛(17)은 실행 유닛(16)의 파이프라인과 병렬인 파이프라인을 정의하고 있지만 실행을 위해 대개 더 많은 수의 단계를 사용한다. 7개의 단계는 S0 내지 S6로 표시되는데, 여기서 각 단계는 하나의 기계 사이클(클록 사이클) 동안 실행되게 된다. 처음 4개의 단계 S0, S1, S2 및 S3는 명령 유닛(18)에서 실행되며, 마지막 3개의 단계 S4, S5 및 S6은 명령이 연산인지 로드/스토어인지에 따라서 하나 또는 다른 하나의 실행 유닛(16) 또는 어드레스 유닛(19)에서 실행된다.
모든 박스내에는 다음 명령의 오퍼랜드로서 사용되는 명령의 결과가 레지스터 파일(43, 61)에 기록됨이 없이 사용되도록 하는 바이패서(bypasser)가 있다.
파이프라인의 제1 단계(S0)는 명령 인출, 즉 IF 단계인데, 그 단계 동안에 명령 유닛(18)은 베이스로서 PC(33) 어드레스를 사용하여 명령 캐쉬(21)로부터 2개의 새로운 명령을 인출한다. 제2 단계(S1)는 스왑 단계(swap stage)인데, 그 단계 동안에 상기 인출된 2개의 명령은 그 명령들이 동시에 발행될 수 있는지를 알기 위하여 회로(25)에 의해 평가된다. 제3 단계(S2)는 디코드 단계인데, 그 단계 동안에 상기 2개의 명령이 디코더(23 및 24)에서 디코드되어 제어 신호(28 및 29)와 레지스터 주소(26 및 27)를 생성한다. 제4 단계(S3)은 연산 명령에 대한 레지스터 파일(43) 액세스 단계이며, 또한 모든 명령에 대한 발행 검사 결정점이고 명령 발행 단계이다. 제5 단계(S4)는 명령이 연산 명령인 경우, [예컨대, ALU(40)에서의] 첫 번째 계산(computation) 사이클이며, 또한 명령 유닛(18)은 어드레스 발생기(32)에서 새로운 PC(33)를 계산하고, 그것이 메모리 참조 명령인 경우 어드레스 유닛(19)은 가산기(53)를 사용하여 유효 데이타 스트림 어드레스를 계산한다. 제6 단계(S5)는 명령이 연산 명령인 경우, [예컨대, ALU(40)에서] 두 번째 계산 사이클이며, 또한 메모리 참조에 대한 데이타 TB(48) 룩업 단계이다. 최종 단계(S6)는 레지스터 기록을 가진 연산 명령에 대한 기록 단계인데, 그 단계 동안, 예컨대 ALU(40)의 출력(40C)은 기록 포트를 통해 레지스터 파일(43)에 기록되며, 명령 스트림 또는 데이타 스트림 참조에 대한 데이터 캐쉬(59) 또는 명령 캐쉬(21) 히트/미스 결정점이다.
CPU(10) 파이프라인은 명령 처리의 이들 7개의 단계(S0∼S6)를 4개의 정적 실행 단계 및 3개의 동적 실행 단계로 분할한다. 첫 번째 4개의 단계(S0 내지 S3)는 전술한 바와 같이 명령 인출, 스왑, 디코드 및 발행 로직으로 구성된다. 이들 단계 S0 내지 S3는 자원을 기다리거나 또는 다른 이유 때문에 스톨하고 있는 중에도 다수의 사이클 동안 동일한 파이프라인 단계에 유효하게 존재할 수 있다는 점에서 정적이다. 이들 스톨은 파이프라인 동결(freeze)이라고도 부른다. 파이프라인 동결은 제로(Zero) 명령이 발행될 때나, 한 쌍 중 제1 명령이 발행되고 제2 명령은 발행 단계에 유지될 때 발생될 수 있다.
파이프라인 동결은 유효 명령 또는 명령들이 발행되도록 제공되지만 진행할 수 없음을 의미한다.
모든 발행 조건이 만족될 때, 명령은 파이프라인을 계속 통과하여 완료하게 된다. 명령이 S3에서 발행된 후, 그 명령은 소정의 파이프 단계(S4∼S6)내에 유지되어서는 안된다. 명령이 계속되기 전에 모든 자원 충돌이 해소되도록 하는 것은 발행 단계(S3, 회로 25)까지이다. 발행 단계(S3) 후, 명령을 중단시키는 유일한 수단은 중지 조건(abort condition)이다.
중지는 다수의 원인으로부터 발생될 수 있다. 대개, 이들은 2개의 그룹으로 나눌 수 있다. (인터럽트를 포함하는) 예외와 비예외(non-exception)라고 하는 이들 2개의 그룹간의 기본적인 차이점은 예외는 파이프라인이 이중 발행된 명령을 포함하여 중지 조건이 원인이 된 명령 이후에 인출된 모든 명령을 플러쉬할 것을 요구하고, 재지시된(redirected) 주소에서 명령 인출을 재개한다는 점이다. 비예외중지 조건에 대한 예는 브랜치 예상 미스, 서브 루핀 호출, 복귀 예상 미스 및 명령 캐쉬(21) 미스이다. 데이타 캐쉬(59) 미스는 중지 조건을 발생시키지는 않지만, 파이프라인 동결의 원인이 된다.
예외가 발생하면, CPU(10)는 먼저 예외 명령 후에 발행된 모든 명령을 중지시킨다. 일부 에러 조건의 특성으로 인해, 이것은 기록 사이클만큼 늦게 발생될 수 있다. 그 다음으로, 예외 명령의 어드레스는 내부 프로세서 레지스터 내에 래치(latch)된다. 파이프라인이 완전히 드레인(drain)되면, 프로세서는 PAL 코드 디스패치(PAL code dispatch)에 의해 주어진 어드레스에서 명령 실행을 개시한다. 파이프라인은 정수 및 부동 소수점 레지스터 파일(43, 61) 양자에 대한 모든 미해결의 기록이 완료되고, 모든 명령이 기계 검사(machine check)의 부재시 예외 없이 완료되는 것을 보장하도록 모든 미해결의 명령이 파이프라인 내의 지점을 통과할 때 드레인된다.
제8도를 참조하면, 제1도 내지 제7도의 CPU(10)에 의해 실행되는 명령 세트의 여러 가지 형식의 명령 포맷이 도시되어 있다. 하나의 형식은 메모리 명령(70)인데, 이 명령은 <31:26> 비트에서의 6 비트의 OP 코드, 비트 <25:21> 및 <20:16>에서의 2개의 5 비트 레지스터 어드레스 필드 Ra 및 Rb 및 비트 <15:0>에서의 16 비트의 부호형 변위를 포함한다. 이 명령은 레지스터(43)와 메모리[메모리(12) 또는 캐쉬(59, 20)] 간에 데이타를 전송하고, 유효 어드레스를 레지스터 파일의 레지스터에 로드하며, 서브 루틴 점프를 위해 사용된다. 변위 필드 <15:0>는 바이프 오프셋이며, 부호 확장형(sign-extended)이고, 가상 어드레스를 형성하기 위하여 레지스터 Rb의 내용 값에 가산된다. 가상 어드레스는 구체적인 명령에 따라서 메모리 로드/스토어 어드레스 또는 결과값으로서 사용된다.
제8도에는 브랜치 명령 포맷(71)도 역시 도시되어 있는데, 이는 비트<31:26>에서의 6 비트의 OP 코드, 비트 <25:21>에서의 5 비트의 어드레스 필드 및 비트<20:0>에서의 21 비트의 부호형 브랜치 변위를 포함한다. 이 변위는 롱워드 오프셋으로서 취급되는데, (롱워드 경제를 어드레싱하기 위하여) 좌측으로 2 비트 쉬프트되어 있고, 64 비트까지 부호 연장형이고 타겟(target) 가상 어드레스(오버플로우는 무시됨)를 형성하기 위하여 PC(33)의 갱신된 내용값에 가산된다.
연산 명령(72, 73)은 제8도에 예시한 포맷으로 되어 있는데, 3개의 레지스터 오퍼랜드를 위한 하나의 포맷(72)과 2개의 레지스터 오퍼랜드 및 하나의 리터럴(literal)을 위한 하나의 포맷(73)으로 되어 있다. 연산 포맷은 정수 레지스터 연산을 수행하고, 레지스터 파일(43) 내에 2개의 소스 오퍼랜드와 하나의 목적지 오퍼랜드를 허용하는 명령에 사용된다. 소스 오퍼랜드 중의 하나는 리터럴 상수일 수 있다. 비트 12는 연산 명령이 2개의 소스 레지스터 연산인지 하나의 소스 레지스터 및 리터럴에 대한 것인지를 정의한다. 비트 <31:26>에서의 6 비트 OP 코드에 추가하여, 연산 포맷은 산술 및 논리 연산에 대해 광범위의 선택을 할 수 있도록 비트 <11:5>의 7 비트 기능 필드를 갖는다. 어느 경우에 있어서나, 소스 레지스터 Ra는 비트 <25:21>에 특정되어 있으며, 목적지 레지스터 Rc는 비트 <4:0>에 특정 되어 있다. 비트 12가 제로(0)인 경우는 소스 레지스터 Rb는 비트 <20:16>에 정해되며, 비트 12가 1이면 8 비트의 제로 확장형 리터럴 상수(Zero-extended literal constant)는 명령의 비트 <20:13>에 의해 형성된다. 이 리터럴은 범위 0내지 255의 양의 정수로서 해석되고 64 비트까지의 제로 확장형이다.
제8도에는 부동·소수점 레지스터(61) 연산에 대해 부동 소수점 레지스터(61)를 수행하는 명령에 사용되는 부동 소수점 연산 명령 포맷(74)도 역시 도시하고 있다. 부동 소수점 연산 명령은 비트 <15:5>에서의 11 비트 기능 필드와 함께 전술한 명령 포맷과 같이 비트 <31:26>에서 6 비트의 OP 코드를 포함한다. 3개의 오퍼랜드 필드(Fa, Fb 및 Fc)가 있는데, 이 각 필드는 명령에 의해 정의되는 정수 또는 부동 소수점 오퍼랜드를 특정하며, 레지스터(13)만이 Fa, Fb 및 Fc에 의해서 특정되지만 이들 레지스터는 정수 또는 부동 소수점 값을 포함할 수 있다. 리터럴은 지원되지 않는다. 부동 소수점 변환은 제8도의 부동 소수점 연산 포맷(74)의 서브 세트를 사용하며, 레지스터 대 레지스터 변환 연산을 수행하고, Fb 오프랜드는 소스를 특정하고, Fa 오퍼랜드는 레지스터-31(모두 제로)이어야 한다.
제8도의 또 다른 명령 포맷(75)은 확장된 프로세서 기능을 특정하는데 사용되는 특권형 아키텍쳐 라이브러리(PAL 또는 PAL코드) 명령을 위한 것이다. 이들 명령에는 6 비트의 OP 코드는 전술한 명령 포맷에서와 같이 비트 <31:26>에 제공되고, 26 비트의 PAL 코드 기능 필드 <25:0>는 동작을 특정한다. PAL 코드 명령에 대한 소스 및 목적지 오퍼랜드는 개별 명령 정의 내에 특정되는 고정형 레지스터로 제공된다.
제8도의 명령 포맷에서 6비트의 OP 코드 필드 <31:26>는 26개, 즉 64 개의 상이한 명령이 코딩되도록 한다. 따라서, 명령 세트는 64개로 제한된다. 그러나, 명령 포맷(72, 73 및 74)내의 "기능"필드는 비트 <31:26>에 동일한 OP 코드를 가진 여러 가지 명령을 제공한다. 또한, 점프명령내의 "힌트" 비트는 후술하는 바와 같이 JSR, RET와 같은 변화를 허용한다.
제9도를 참조하면, 내부 어드레스버스(56)상에서 지원되는 가상 어드레스의 포맷(76)이 도시되어 있다. 이 어드레스는 명목상으로는 64 비트의 폭으로 되어 있지만, 실제 구현은 수년내에 아주 작은 어드레스를 사용하게 될 것이다. 예컨대, 43 비트의 어드레스는 8 테라 바이트의 어드레스 지정 범위를 제공한다. 이 포맷은, 예컨대 사용되는 페이지의 크기에 따라 13 비트 내지 16 비트 크기의 바이트 오프셋(77)을 포함한다. 페이지가 8K 바이트이면, 페이지 필드(77)내의 바이트는 13 비트이고, 16K 바이트 페이지에 대해서는 필드(77)는 14 비트이며, 32K 바이트 페이지에 대해서는 15 비트이고, 64K 바이트 페이지에 대해서는 16 비트이다. 도시한 포맷(76)은 구현에 따라 크기가 변할 수 있는 Seg1, Seg2 및 Seg3의 3개의 세그먼트 필드(78, 79, 80)를 포함한다. 세그먼트 Seg1, Seg2 및 Seg3는, 예컨대 10 내지 13비트일 수 있다. 각 세그먼트의 크기가 10 비트이면, Seg3에 의해 정의된 세그먼트는 1K 페이지이고, Seg2에 대한 세그먼트는 1M 페이지이며 Seg1에 대한 세그먼트는 1G 페이지이다. 세그먼트 번호 필드 Seg1, Seg2 및 Seg3는 소정의 구현에 대해서 동일 크기로 되어 있다. 세그먼트 번호 필드는 페이지 크기의 함수이고, 소정 레벨에서의 모든 페이지 테이블 엔트리는 1 페이지를 초과하지 않기 때문에 페이지테이블을 액세스하기 위한 페이지 스왑이 최소화된다. PTE 내의 페이지 프레임 번호(PFN) 필드는 항상 32 비트폭이기 때문에, 페이지 크기가 증가하면 가상 및 물리적 어드레스 크기도 증가하게 된다.
물리적 어드레스는 최대 48 비트이지만, 프로세서는 상위비트의 일부 수를 구현하지 않음으로써 보다 작은 물리적 어드레스 공간을 구현할 수 있다. 2개의 최상위 구현 물리적 어드레스 비트는 캐싱 정책(caching policy) 또는 어드레스 공간의 구현 의존 형식을 선택한다. 상이한 구현은 시스템에 적절하게 이들 비트에 대해서 상이한 용도와 제약을 가한다. 예컨대, 물리적 어드레스 공간이 30 비트 <29:0>인 워크스테이션에서 비트 <29>는 메모리와 I/O사이에서 선택될 수 있으며, 비트 <28>는 I/O 공간내에서의 캐싱을 인에이블 또는 디스에이블 할 수 있으며 메모리 공간내에서는 0이 되어야 한다.
통상적으로, 다중 프로그래밍 시스템에서 여러 개의 프로세스가 물리적 메모리(12) 또는 캐쉬내에 동시에 상주할 수 있기 때문에, 하나의 프로세스가 다른 프로세스 또는 운용 시스템을 방해하지 않도록 하기 위하여 CPU(10)에 의해 메모리 보호 및 다중 어드레스 공간이 사용된다. 소프트웨어의 신뢰성을 보다 개선하기 위하여 4개의 계층 액세스 모드가 메모리 액세스 제어를 제공한다. 이들은 커넬(kernel), 실행(executive), 슈퍼바이저(supervisor) 및 사용자(user) 모드인데, 커넬 모드가 가장 큰 특권을 가지고 그 다음으로, 실행, 슈퍼바이저, 사용자 순이다. 보호는 개개의 페이지 레벨에서 특정되는데, 여기서 페이지는 각 4개의 액세스 모드에 대해 엑세스 불가, 판독 전용 또는 판독/기록일 수 있다. 액세스 가능한 페이지는 단지 데이타 또는 명령 액세스를 갖도록 제한될 수 있다. 제10도에는, 운용 시스템에 의해 메모리(12)내의 페이지 테이블 셋업 또는 번역 버퍼(36 또는 48)내에 저장되는 페이지 테이블 엔트리, 즉 PTE(81)가 도시되어 있다. PTE(81)는 콰드워드 폭으로 되어 있으며, 비트 <63:32>에서 32 비트 페이지 프레임 번호, 즉 PFN(82)을 포함하고 보호 특징 등과 같은 것을 구현하기 위하여, 테이블 A에 도시한 바와 같이 비트 <15:0>의 필드(83)에 특정 소프트웨어 및 하드웨어 제어 정보를 포함한다.
특유한 특징은 2 비트 <6:5>에서의 세분성 힌트(84)이다. 소프트웨어는 페이지 블록이 더 큰 단일의 페이지로써 취급되도록 번역 버퍼(36 또는 48)에 힌트를 제공하기 위하여 이들 비트를 0이 아닌 값으로 세트할 수 있다. 블록은 8N페이지로 정렬된 그룹인데, 여기서 N은 PTE <6:5>의 값, 즉 하위값이 0인 가상어드레스(페이지 크기 + 3N)에서 시작하는 1, 8, 64 또는 512 페이지로 된 그룹이다. 상기 블록은 가상 및 물리적으로 정렬되는 물리적으로 연속적인 페이지 그룹인데, 블록내에서 PFN의 하위 3N 비트는 동일성 매핑(identity mapping)(즉, 페이지 필드 내의 바이트에 부가함으로써 물리적 어드레스의 일부분으로 사용됨)을 나타내고 있으며, 상위 (32-3N) PFN 비트는 모두 동일하다. 블록내에서, 모든 PTE는 비트<15:0>에 대해 동일한 값을 갖는데, 즉 동일한 보호, 폴트, 세분성 테이블 A의 유효 비트를 갖는다. 하드 웨어는 8, 64 또는 512개의 개별 TB 엔트리 대신에 단일의 TB 엔트리를 가진 전체 블록을 매핑하기 위하여 이 힌트를 사용할 수 있다.
세분성 힌트는 동일한 보호, 폴트 및 유효 비트를 가진 연속적인 가상 페이지 내로 실제로 매핑되는 프레임 버퍼 또는 페이지되지 않는 풀과 같은 큰 메모리 구조에 적당할 수 있음을 유의하여야 한다. 세분성 힌트의 사용에는 디스플레이 용의 비디오 프레임의 기억부인데, 여기서 하나의 프레임을 정의하는 데이타 블록은 고해상도의 칼라 디스플레이용의 64개의 8KB 페이지를 점유할 수 있으며, 이 프레임에 대한 물리적 어드레스를 매핑하기 위하여 64개의 페이지 테이블 엔트리 사용을 방지하도록 하나가 대신 사용될 수 있다. 이것은, 예컨대 스크린상에 수직 라인을 표현하기 위하여 프레임 버퍼를 참조하는 경우, 물리적 메모리(12)로부터 TB(48)로의 과도한 PTE의 스왑핑(swapping)을 방지한다.
제11도를 참조하면, 버스(56) 상의 가상 어드레스는 TB(48)내의 PTE를 탐색하는데 사용되며, 발견하지 못한 경우에는 Seg1 필드(78)가 내부 레지스터(86)에 기억된 베이스 어드레스에서 발견된 제1 페이지 테이블(85)내로 인덱스하도록 사용된다. 테이블(85)내의 Seg1 인덱스에서 발견된 엔트리(87)는 제2 페이지 테이블(88)에 대한 베이스 어드레스이며, 이를 위해 Seg2 필드(79)가 엔트리(89)에 인덱스하는데 사용된다. 엔트리(89)는 제3 페이지 테이블(90)의 베이스를 가리키며 Seg3 필드(80)는 PTE(91)에 인덱스하는데 사용되는데, 이는 버스(54) 상에 물리적 어드레스를 발생하기 위하여 가산기(92)내에서 가상 어드레스로부터의 바이트 오프셋(77)과 결합된 물리적 페이지의 프레임 수이다.
전술한 바와 같이, 바이트 오프셋(77)의 크기는 세분성 힌트(84)에 따라 변할 수 있다.
제8도의 명령 포맷을 사용하여, 제1도의 CPU는 9가지 형식의 명령을 포함하는 명령 세트를 실행한다. 이들은, (1) 정수로드 및 스토어명령, (2) 정수 제어 명령, (3) 정수 산술, (4) 논리 및 쉬프트 명령, (5) 바이트 조작, (6) 부동 소수점 로드 및 스토어, (7) 부동 소수점 제어, (8) 부동 소수점 산술 및 (9) 기타의 것을 포함한다.
정수로드 및 스토어 명령은 제8도의 메모리 포맷(70)을 사용하며 다음과 같은 것을 포함한다.
LDA - 어드레스 로드(Load Address)
LDAH - 하이 어드레스 로드(쉬프트 하이)(Load Address high)(Shift high)
LDL - 부호 확장형 롱워드 로드(Load Sign Extended Longword)
LDQ - 콰드 워드 로드(Load Quadword)
LDL_L - 로크된 부호 확장형 롱워드 로드(Load Sign Extended Longword Locked)
LDQ_L - 로크된 콰드워드 로드(Load Quadword Locked)
LDQ_U - 정렬되지 않은 콰드 워드 로드(Load Quadword Unaligned)
STL - 롱워드 스토어(Store Londword)
STQ - 콰드 워드 스토어(Store Quadword)
STL_C - 조건부 롱워드 스토어(Store Longword Conditional)
STQ_C - 조건부 콰드 워드 스토어(Store Quadword Conditiond)
STQ_ - 정렬되지 않은 콰드 워드 스토어(Store Quadword Unaligned)
이들 각각에 대하여 가상 어드레스는 레지스터 Rb를 부호 확장형 16 비트 변위에 가산함으로써 계산된다(또는, LDAH 용으로 부호 확장형 변위에 65,536을 곱함).
로드 명령 LDL 및 LDQ에 대해서, 소스 오퍼랜드는 계산된 어드레스 롱워드이면 부호 확장형에서의 메모리로부터 인출되어 레지스터 Ra에 기록된다. 데이타가 원래 정렬되어 있지 않으면, 정렬 예외가 발생된다. 스토어 명령 STL 및 STQ에 대해서는 계산된 가상 어드레스에서의 메모리에 기록된다. 로드 어드레스 명령 LDA 및 LDAH는 로드 명령 LDL 및 LDQ와 유사하지만, 어드레스가 계산된 후에 연산이 중지되고 64 비트의 계산된 가상 어드레스가 레지스터 Ra에 기록된다.
상기 로크된 로드 및 조건부 스토어 명령(LDL_L, LDQ_L, STL_L 및 STQ_L)은 이하에서 기술되는 아키텍쳐의 중요한 특징을 제공한다. 특히, 명령 조합은 공유 메모리 위치의 원자적인 갱신(atomic update)을 제공함으로써 다중 프로세서 또는 파이프 라인식 프로세서에서의 데이타의 무결성을 보장하는 역할을 한다. 이 형식의 기타 명령에서와 같이, 가상 어드레스는 그 명령에 주어진 부호 확장형 16비트 변위에 그 명령내에 특정된 레지스터 Rb의 내용을 가산함으로써 계산된다. LDL_L 또는 LDQ_L 명령이 폴드 없이 실행되는 경우, CPU(10)는 버스(54)로부터의 물리적인 목적지 어드레스를 제5도의 로크된 물리적 어드레스 레지스터(95)에 기록하며 로크 플래그(96)를 세트한다. 로크 플래그(96)는 조건부 스토어 명령이 실행될 때에도 세트되는 경우, 스토어가 발생되어, 즉 오퍼랜드는 물리적 어드레스에서의 메모리에 기록되고, 로크 플래그(96)의 값(1)은 Ra에 복귀되고 로크 플래그는 0으로 세트되지만, 로크 플래그가 0인 경우 메모리에로의 스토어는 발생하지 않고 Ra에 복귀되는 값은 0이 된다.
CPU(10)에 대한 로크 플래그가 세트되고, 또 다른 CPU(15)가 메모리(12)내의 물리적 어드레스의 로크된 범위내에서 스토어하는 경우, CPU(10)내의 로크 플래그(96)는 클리어(clear)된다. 이를 위해서, CPU(10)는 메모리(12)에로의 모든 기록을 모니터하며, 레지스터(95)내의 어드레스가 일치되는 경우 플래그(96)를 클리어한다. 로크된 범위는 레지스터(95)내의 로크된 물리적 어드레스를 포함하는 2N바이트의 정렬된 블록인데, 이 값 2N은 CPU의 구성에 따라 변하게 되며 최소한 8 바이트이며(최소 로크 범위는 정렬된 콰드워드임), 이 값은 이 CPU에 대한 최대 페이지 크기이다(최대 로크 범위는 하나의 물리적 페이지임). CPU(10)의 로크 플래그(96)는 CPU가 어떤 예외, 인터럽트 또는 호출 PAL 코드 명령(call PAL code instruction)을 만날 때 역시 클리어 된다.
브랜치가 일어나지 않은 경우, CPU(10)상에서 실행되는 명령 순서
LDQ_L,
갱신(modify),
STQ_L,
BEQ
는 공유 메모리(12)내의 데이터를 원자적으로 판독, 수정, 기록하고, 브랜치가일어나면 스토어는 메모리(12)내의 위치를 갱신하지 않기 때문에 명령 순서가 완결 때까지 반복되게 된다. 즉, 레지스터 Ra가 0이면 브랜치가 일어나는데, 이것은 조건부 스토어 명령에 의해 Ra로 복귀되는 로크 플래그의 값이 0임을 의미한다.(스토어가 완결되지 않는다). 이 명령 순서는 부록 A에 상세히 예시되어 있다.
2개의 로크된 로드 명령이 조건부 스토어의 방해를 받지 않고 실행되는 경우, 두 번째의 명령이 로크 플래그(96) 및 레지스터(95)내의 첫 번째 명령의 상태를 겹쳐쓴다(overwrite). 2개의 조건부 스토어 명령이 로크된 로드 명령의 방해를 받지 않고 실행되는 경우, 첫 번째 명령이 로크 플래그(96)를 클리어하기 때문에 두 번째 스토어 명령은 항상 실패하게 된다.
정렬되지 않은 로드 명령 LDQ_U 및 LDL_U는 로드 LDQ 또는 LDL과 동일하지만 가상 어드레스의 하위 3 비트가 클리어되기 때문에(정렬되지 않은 로드 명령은 바이트 어드레스에 대해 사용됨), 정렬된 콰드워드 또는 롱워드가 인출된다. 또한, 바이트 어드레스(정렬되지 않은 어드레스)가 나타나면 단순한 LDQ 또는 LDL 명령에서와 마찬가지로 정렬 폴트(alignment fault) 신호는 발생하지 않는다. 정렬되지 않은 로드 명령은 후술하는 바와 같이 바이트 조작을 위해 사용된다. 정렬되지 않은 스토어 명령 STQ_U는 STQ 명령과 유사하지만, 이 명령은 가상 어드레스의 하위 3개의 비트를 제거하며, 정렬되지 않은 어드레스로 인한 폴트 신호는 발생하지 않는다.
명령의 제어 형식은 8개의 조건부 브랜치 명령, 비조건부 브랜치, 서브 루틴으로의 브랜치, 서브루틴으로의 점프 명령을 포함하는데, 이들 모든 명령은 제8도의 브랜치 명령 포맷(71) 또는 메모리 명령 포맷(70)을 사용한다. 이들 제어 명령은 다음과 같다.
브랜치 명령 포맷 :
BEQ -레지스터가 0일 경우 브랜치
BNE - 레지스터가 0이 아닐 경우 브랜치
BLT - 레지스터가 0 미만일 경우 브랜치
BLE - 레지스터가 0 이하일 경우 브랜치
BGT - 레지스터가 0보다 클 경우 브랜치
BGE - 레지스터가 0 이상일 경우 브랜치
BLBC - 레지스터의 하위 비트가 클리어되어 있을 경우 브랜치
BLBS - 레지스터가 하위 비트가 세트되어 있을 경우 브랜치
BR - 무조건 브랜치
BSR - 서브루틴으로의 브랜치
메모리 명령 포맷 :
JMP - 점프
JSR - 서브루틴으로의 점프
RET - 서브루틴으로부터의 복귀
JSR_CONROUTINE - 서브루틴 복귀로의 점프
조건부 브랜치 명령에 대해서는, 레지스터 Ra가 테스트되고, 조건으로서 지정된 관계가 참(true)인 경우, PC에 목적지 가상 어드레스가 로드되지만, 그렇지 않을 경우는 다음의 순차적인 명령을 계속 실행한다. 조건부 또는 무조건 브랜치에 대한 변위는 부호형 롱워드 오프셋으로서 취급되는데, 좌측으로 2 비트 쉬프트되어(롱워드 경계를 어드레스하도록) 64 비트로 부호 확장된 다음, 목적지 가상 어드레스를 형성하기 위하여 갱신된 PC에 가산된다. 조건부 또는 무조건 브랜치 명령은 PC 상대적(PC-relative)인데, 즉 21 비트의 부호형 변위는 ±1M 롱워드의 순방향/역방향 브랜치 거리를 제공한다. 무조건 브랜치 명령 BR 또는 BSR에 대해서는, BR 또는 JMP 다음의 명령 어드레스(즉, 갱신된 PC)가 레지스터 Ra에 기록되고 그 다음으로 목적지 가상 어드레스를 PC에 로딩한다. BR 및 BSR은 동일한 동작을 하며, 단지 브랜치 예상 로직에 대한 힌트가 상이할 뿐인데, BSR은 서브루틴 호출[브랜치 예상 스택 상에 복귀 어드레스를 푸시(push)함]로서 예상되며, BR은 브랜치로 예상된다(푸시 없음).
점프 및 복귀 명령에 대해서는, 이 명령 다음의 명령 어드레스(갱신된 PC)가 레지스터 Ra에 기록되며, 그 다음으로 목적지 가상 어드레스를 PC에 로드한다. 새로운 PC는 레지스터 Rb로부터 제공되는데, Rb의 하위 비트 2개는 무시된다. Ra 및 Rb는 동일한 레지스터를 특정할 수 있는데, 새로운 값을 할당하기 전에 종전 값을 사용하여 목적지 계산이 이루어진다.
JMP, JSR, RET 및 JSR_COROUTINE 4개의 명령은 모두 동일한 동작을 하는데, 이들은 단지 브랜치 예상 로직에 대한 힌트가 상이할 따름이다. 명령의 변위 필드(변위용으로 사용되지 않음)는 이 정보를 전달하는 데 사용된다. 4개의 상이한 "OP 코드"는 변위 <15:14>에 상위한 비트 패턴을 세트하며, 힌트 오퍼랜드는 변위 <13:0>를 세트한다. 이들 비트는 다음과 같이 사용하기 위한 것이다.
변위 <15:14> 의미 예상된 목적지 <15 : 0> 예상 스택 동작
00 JMP PC +(4*변위 <13 : 0>) --
01 JSR PC +(4*변위 <13 : 0>) 푸시(push) PC
10 RET 예상 스택 팝(POP)
11 JSR_CO 예상 스택 팝, 푸시 PC
이 구성은 가능한 롱워드 목적지 어드레스의 하위 16 비트 지정(specification)을 가능케 하며[초기에 유용한 명령 캐쉬(21)에 대한 엑세스를 개시하는데 충분한 비트]. 또한 복귀와 호출을 구분할 수 있게 한다(또한, 기타의 빈도수가 낮은 동작과 호출을 구분할 수 있게 함). 상기 표에 따른 정보는 단지 힌트로써 사용될 수 있으며, 이들 비트의 정확한 설정은 성능을 개선하기 위한 것이지 정확한 동작을 위해 필요한 것이 아니다는 것을 유의하여야 한다.
따라서, CPU로 하여금 고성능을 달성하게 하기 위해서는, 브랜치 예상 모델에 기초한 명시적인 힌트가 다음과 같이 제공되어야 한다.
(1) 계산된 브랜치(JSR, RET, JMP)의 여러 구현에 있어서, 레지스터 Rb가 액세스 되기 전에 기대되는 목적지 명령 캐쉬(21) 어드레스를 양호하게 추측하는 데에 실질적인 성능 이득이 있게 된다.
(2) CPU에는 제1 (또는 단 하나의) 명령 캐시(21)가 1 페이지(8∼64KB)보다 작게 구성될 수 있다.
(3) 서브루틴 복귀를 정확히 예측하는 일은 양호한 성능을 위해 중요하므로, 선택적으로 CPU는 작은 어드레스 스택의 예상되는 서브루틴 복귀 명령 캐시(21) 어드레스를 포함할 수 있다.
이러한 목적을 위하여, CPU(10)는 3 종류의 브랜치 예상 힌트, 즉 가능성 있는 목적지 어드레스, 복귀 어드레스 스택 동작 및 취해지는 조건부 브랜치를 제공한다.
계산된 브랜치(JSR/RET/JMP)에 대해서는, 가장 가능성 있는 목적지 어드레스의 하위 16 비트를 특정하는 데에 기타의 사용되지 않은 변위 비트가 사용된다. 이들 비트를 사용한 PC 상대(PC-relative) 계산은 조건부 브랜치에서 사용된 PC상대 계산과 같을 수 있다. 하위 16 비트는 가장 큰 가능한 페이지 내에서 명령 캐시(21) 블록을 특정하는 데 충분하기 때문에, 브랜치 예상 로직이 가장 가능성 있는 목적지에 대해 초기 명령 캐시(21)의 액세스를 개시하는 데 충분한 것으로 기대된다.
모든 브랜치에 대해서, 간단한 브렌치, 서브 루틴 호출, 서브루틴 복귀 및 상호 루틴 링트(coroutine links)를 구별하는 데 힌트 또는 OP 코드 비트가 사용된다. 이러한 구별로 인해 브랜치 예상 로직이 예상된 복귀 어드레스의 정확한 스택을 유지할 수 있다.
조건부 브랜치에 대해서, 목적지 변위의 부호는 브랜치 예상 로직에 의해 발생/실패 힌트로써 사용된다. 순방향 조건부 브랜치[양(positive)의 변위]는 실패로 예상되며, 역방향 조건부 브랜치(음의 변위)는 발생된 것으로 예상된다. 조건부 브랜치는 예상된 복귀 어드레스 스택에 영향을 끼치지 않는다.
정수 산술 명령은 레지스터(43)의 정수에 대한 가산, 감산, 승산 및 부호형 및 무부호형 비교 연산을 수행하여 그 결과를 정수 레지스터(43)에 복귀시킨다. 이들 명령은 제8도의 정수 연산 포맷[3개의 레지스터, 2개의 레지스터 및 리터럴(literal)]중 어느 하나를 사용하는데, 다음과 같은 것을 포함한다.
ADDL - 롱워드 가산
ADDQ - 콰드워드 가산
CMPEQ - 부호형 콰드워드가 동일한지를 비교
CMPLT - 부호형 콰드워드가 보다 작은지를 비교
CMPLE - 부호형 콰드워드가 동일하거나 작은지를 비교
CMPULT - 무부호형 콰드워드가 작은지를 비교
CMPULE - 무부호형 콰드워드가 동일하거나 작은지를 비교
MULL - 롱워드 승산
MULQ - 콰드워드 승산
UMULH - 비부호형 상위 콰드워드 승산(Unsigned Quadword Multiply High)
SUBL - 롱워드 감산
SUBL - 콰드워드 감산
ADDL 명령에 대해서, 레지스터 Ra는 레지스터 Rb 또는 리터럴에 가산되고, 부호 확장형 32 비트의 합이 레지스터 Rc에 기록되며 Ra 및 Rb의 상위 32 비트가 무시된다. ADDQ 명령에 대해서, 레지스터 Ra는 레지스터 Rb 또는 리터럴에 가산되고 16 비트 합이 Rc에 기록된다. 무부호형 비교 명령은 캐리(carry)를 테스트하는 데 사용될 수 있으며, ADD를 사용하여 2개의 값을 가산한 후, 무부호형합이 어느 하나의 입력보다 작은 경우 최상위 비트로부터 캐리가 발생한 것이다.
비교 명령에 있어서, 레지스터 Ra는 레지스터 Rb 또는 리터럴과 비교되며, 특정 관계가 참(true)일 경우는 값 1이 레지스터 Rc에 기록되며, 그렇지 않을 경우에는 0이 레지스터 Rc에 기록된다.
승산 명령은 레지스터 Rb의 내용 또는 리터럴에 레지스터 Ra를 곱하여 레지스터 Rc에 기록한다. MULL에서는, 그 곱셈값은 32 비트의 부호 확장형 값이며, MULQ의 결과는 64 비트의 곱셈값이 된다. 무부호형 콰드워드 승산 하이 명령(unsigned quadword multiply high instruction)에서는, 레지스터 Ra 및 Rb 또는 리터럴은 무부호형 수로써 곱하여져 128 비트의 결과를 생성하는데, 그 상위 64 비트는 레지스터 RC에 기록된다.
감산 명령에서는, 레지스터 Rb 또는 리터럴은 레지스터 Ra로부터 감산되며 그 차이는 목적지 레지스터 Rc에 기록된다. 그 차이는 SUBL에 대해서는 부호 확장형 32 비트값이거나, SUBQ에 대해서는 64 비트 값이다. 무보호형 비교 명령은 빌림수(borrow)를 테스트하는 데 사용될 수 있는데, 무부호형 피감수(Ra)가 무보호형 감수(Rb)보다 작은 경우에는 빌림수(borrow)가 있게 된다.
논리 명령은 연산 포맷으로 되어 있으며, 콰드워드 부울 대수 연산을 수행한다. 이들 명령은 다음과 같다:
AND - 논리곱
BIS - 논리합
XOR - 논리 차이
BIC - 보수 논리곱(Logical Product with Complement)
ORNOT - 보수 논립합(Logical Sum with Complement)
EQV - 논리 등가
이들 명령은 레지스터 Ra와 레지스터 Rb 또는 리터럴간에 지정된 부울 대수 기능을 수행하며, 그 결과를 목적지 레지스터 Rc에 기록한다.
"NOT" 기능은 0(Ra=R31)으로 ORNOT을 행하므로써 수행될 수 있다.
쉬프트 명령은 연산 포맷으로 되어 있으며, 다음과 같이 시프터(shifter)에서 좌우 논리 쉬프트 및 오른쪽 산술 쉬프트를 수행한다.
SLL - 좌논리 쉬프트(Shift Left Logical)
SRL - 우논리 쉬프트(Shift Right Logical)
SRA - 우산술 쉬프트(Shift Right Arithmetic)
일반적으로, 좌산술 쉬프트가 사용되는 경우에는 논리 쉬프트가 행하여지기 때문에, 좌산술 쉬프트 명령은 없다. 어드레스 계산에 있어서, 작은 2진 멱수(small power of two)를 곱하기 위해 좌논리 쉬프트가 이용된다. 좌산술 쉬프트는 오버플로우 검출을 하여야 하기 때문에, 더욱 복잡하게 된다. 정수곱은 오버플로우 검사를 하면서 좌산술 쉬프트를 수행하도록 사용되어야 한다. 비트 필드 추출은 2개의 논리 쉬프트로 수행될 수 있으며, 부호 확장은 좌논리 쉬프트 및 우논리쉬프트로 행해질 수 있다. 논리 쉬프트에서는, 레지스터 Ra는 레지스터 Rb 또는 리터럴의 계수(count)에 의해 0내지 63 비트만큼 논리적으로 좌측 또는 우측 쉬프트되어, 그 결과는 비어 있는 비트 위치에는 0 값이 채워진 레지스터 Rc에 기록된다. 마찬가지로, 우산술 쉬프트 명령에서는, 레지스터 Rb는 레지스터 Ra 또는 리터럴의 계수(count)에 의해 0내지 63 비트 만큼 산술적으로 우측으로 쉬프트되어, 그 결과는 비어 있는 비트 위치에 부호값(Rbv<63>)이 채워진 레지스터 Rc에 기록된다.
처리 능력을 개선하도록 하는 중요한 특징은 조건부 이동 정수 CMOV 명령이다. 이들 명령은 브랜치 없이 조건을 수행하고, 따라서 명령 스트림의 순차성을 유지한다. 이들 명령은 연산 포맷으로 구성되어 있으며, 다음과 같은 것을 포함한다.
CMOVEQ - 레지스터가 0일 경우 조건부 이동
CMOVNE - 레지스터가 0이 아닐 경우 조건부 이동
CMOVLT - 레지스터가 0미만일 경우 조건부 이동
CMOVLE - 레지스터가 0이하일 경우 조건부 이동
CMOVGT - 레지스터가 0초과일 경우 조건부 이동
CMOVGE - 레지스터가 0이상일 경우 조건부 이동
CMOVLBC - 레지스터의 하위 비트가 클리어되어 있을 경우 조건부 이동
CMOVLBS - 레지스터의 하위 비트가 세트되어 있을 경우 조건부 이동
이들 조건부 이동 명령을 실행하는 데 있어서, 레지스터 Ra가 테스트되어, 특정 관계가 참이면 레지스터 Rb의 값이 레지스터 Rc에 기록된다. 이렇게 함으로서 실행 속도가 개선된다.
예컨대, 명령 CMOVEQ, Ra, Rb, Rc는
와 정확히 동일한데, CMOV 방식이 여러 구현에 있어서 실질적으로 더 빠르다. 2개의 레지스터의 내용 중 보다 큰 값을 찾아내기 위한 무브랜치 순서(branchless sequene), 즉
R1= MAX(R1, R2)는
CMPLT R1, R2, R3; R1<R2인 경우 R3=1
CMOVEN R3, R2, R1; NOT(R1<R2)이면 아무 동작도 하지
; 않고, R2<R2이면 R2를 R1으로 이동
; (move).
물론, 브랜치를 사용하지 않음으로써 얻는 장점은 명령 스트립이 순서적으로 인출된다는 점이며, 명령 캐쉬 또는 선 인출큐(prefetch queue)를 플러시할 필요가 없다는 점이다. 조건부 이동은 브랜치가 정확히 예상된다 하더라도 브랜치보다 빠르다. 브랜치가 정확히 예상되지 않으면, 조건부 이동이 훨씬 빠르게 되는데, 왜냐하면 조건부 이동은 브랜치 동작을 제거하기 때문이다.
또 다른 중요한 특징은 레지스터 내의 바이트 오퍼랜드에 대한 연산을 위한 명령을 제공한다는 것이다. 이것들은 로드/스토어 명령에 있어서의 64 비트 전체 길이의 메모리 액세스를 제공하며, 다양한 종류의 바이트 연산과 다양한 레지스터 내부(in-register) 바이트 조작 명령과도 결합되는 것이 가능하다. 이에 따른 장점은, 메모리의 바이트 연산이 허용된 아키텍쳐용으로 작성된 코드를 사용할 수 있다는 것이지만, 여전히 메모리 액세스를 완전 콰드워드로 정렬된 경계에 제한한다. 바이트 조작 명령은 제8도의 연산 포맷(72 또는 73)으로 되어 있으며, 다음과 같은 바이트 비교, 바이트 추출, 바이트 마스크 및 바이트 제로 명령을 포함한다.
CMPBGE - 바이트 비교(Compare byte)
EXTBL - 하위 바이트 추출(Extract by low)
EXTWL - 하위 워드 추출
EXTLL - 하위 롱워드 추출
EXTQL - 하위 콰드워드 추출
EXTWH - 상위 워드 추출
EXTLH - 상위 롱워드 추출
EXTQH - 상위 콰드워드 추출
INSBL - 하위 바이트 삽입
INSWL - 하위 워드 삽입
INSLL - 하위 롱워드 삽입
INSQL - 하위 콰드워드 삽입
INSWH - 상위 워드 삽입
INSLH - 상위 롱워드 삽입
INSQH - 상위 콰드워드 삽입
MSKBL - 하위 바이트 마스크
MSKWL - 하위 워드 마스크
MSKLL - 하위 롱워드 마스크
MSKQL - 하위 콰드워드 마스크
MSKWH - 상위 워드 마스크
MSKLH - 상위 롱워드 마스크
MSKQH - 상위 콰드워드 마스크
ZAP -바이트 제로(Zero bytes)
ZAPNOT - 바이트 비 제로(Zero bytes not)
바이트 비교 명령은 레지스터 Ra와 Rb(또는 Ra와 리터럴)의 대응 바이트간에 8개의 병렬 무부호형 바이트 비교를 행하여, 8개의 결과값을 레지스터 Rc의 하위 8개 비트에 스토어하고, 레지스터 Rc의 상위 56 비트는 0으로 세트한다. Rc의 비트 0은 바이트 0에 대응하고, Rc의 비트 1은 바이트 1에 대응하며, 나머지 비트와 바이트의 대응 관계도 마찬가지다. Ra의 대응 바이트가 Rb(무부호형)이상인 경우, 결과 비트가 Rc에 세트된다.
바이트 추출 명령은 레지스터 Ra를 0내지 7 바이트 쉬프트시켜(하위 추출 명령에서는 오른쪽으로 쉬프트시키고, 상위 추출 명령에서는 왼쪽으로 쉬프트시킴), 레지스터 Rc내로 1, 2, 4 또는 8 바이트를 추출하고 [쉬프트되는 바이트의 수는 레지스터 Rb의 비트<2:0>에 특정되고, 추출되는 바이트의 수는 기능 코드에 특정되어 있음]. 나머지 바이트는 0으로 채운다. 상위 바이트 추출 명령은 8에서 레지스터 Rb의 비트 <2:0>에 특정된 양만큼을 뺀 바이트 수만큼 좌측으로 쉬프트된다. 이들 바이트 추출 명령은 바이트 조작에 특히 유용한데, 여기서 메모리 내의 비정렬 된 다수 바이트의 데이타는 부록의 바이트 추출 예제에 나타난 바에 따라 동작하게 된다.
바이트 삽입 명령은 레지스터 Ra로부터 바이트를 쉬프트하여 그 바이트를 0 필드내에 삽입하고, 그 결과를 레지스터 Rc에 스토어하는데, 레지스터 Rb의 비트<2:0>는 0내지 7 바이트의 쉬프트량을 선택하며 기능 코드는 1, 2, 4 또는 8 바이트의 필드 폭을 선택한다. 이들 바이트 삽입 명령은 임의의 바이트 정렬로 레지스터에 위치되는 바이트, 워드, 롱워드 또는 콰드워드 데이타를 발생할 수 있다.
바이트 마스크 명령 MSKxL 및 MSKxH는 레지스터 Ra의 선택된 바이트를 0으로 세트하여 그 결과를 레지스터 Rc에 스토어하는데, 레지스터 Rb<2:0>는 0 바이트 필드의 시작 위치를 선택하며, 기능 코드는 1, 2, 4 또는 8 바이트의 최대 길이를 선택한다. 마스크 명령은 임의의 바이트 정렬로 레지스터를 지나 확산될 수 있는 바이트, 워드, 롱워드 또는 콰드워드 필드의 0을 발생시킨다.
바이트 제로 명령 ZAP 및 ZAPNOT은 레지스터 Ra의 선택된 바이트를 0으로 세트하여 그 결과를 레지스터 Rc에 스토어하고, 레지스터 Rb<7:0>는 0으로 될 바이트를 선택하는데, 여기서 Rb의 비트 0은 바이트 0에 대응하고 Rb의 비트 1은 바이트 1에 대응하며, 나머지도 마찬가지이다. 결과 바이트는 Rb의 대응 비트가 ZAP에 대해서는 1이고 ZAPNOT에 대해서는 0인 경우 0으로 세트된다.
부록 A에는, 전술한 바이트 명령을 사용하여 바이트 연산이 달성되는 방법을 예시하기 위한 명령 순서를 나타내었다.
부동 소수점 명령은 이하의 5개 데이타 포맷의 부동 소수점 오퍼랜드에 따라 동작한다: (1) VAX 단일 정밀도(single precision)인 F_플로팅 (2) 8 비트 지수를 가진 VAX 배정도인 D_플로팅 (3) 11 비트 지수를 가진 VAX 배정도인 G_플로팅 (4) IEEE 단정도인 S_플로팅 (5) 11 비트 지수를 가진 IEEE배 정도인 T_플로팅 이다. 단정도 값은 64 비트 레지스터(61)의 상위 32 비트에 로드되며, 하위 32 비트는 0이 된다. 또한, 부동 소수점과 콰드워드 정수 포맷간, 단정도와 배정도간 및 콰드워드와 롱워드 정수간의 오퍼랜드를 변화하기 위하여 데이타 변환 명령도 제공된다. CPU(10)에 대해서 전역 플로팅 포인트 프로세서 상태(global floating point processor state)는 없다. 즉, 기계 상태는 데이타 포맷간에 스위치되지 않고, 그 대신 데이타 포맷의 선택은 각 명령내에 인코드된다.
부동 소수점 수(floating point number)는 3개의 필드로 표시되는데, 즉 부호(Sign), 지수(exponent) 및 소수부이다. 부호 필드는 1 비트이고, 지수 필드는 8 또는 11 비트이며 소수 필드는 23, 52 또는 55 비트이다. 여러 개의 상이한 라운딩 모드(rounding mode)가 제공되는데, VAX포맷에서의 라운딩은 노말(바이어스)[normal(biased)] 또는 버림(chopped)이고, IEEE 포맷에서의 라운딩은 노말(가장 가까운 쪽으로의 바이어스되지 않은 라운드), 양의 무한대로의 라운딩, 음의 무한대로의 라운딩 및 0으로의 라운딩의 네 가지이다. 부동 소수점 명령에 의해 발생될 수 있는 예외가 6가지 있는데, 이들 모든 예외는 산술 예외 트랩(trap)에 의해 신호되며, 이들 예외는 무효 동작, 0으로 나누기, 오버플로우, 언더플로우, 정확하지 못한 결과 및 정수 오버플로우이다.
메모리 포맷의 부동 소수점 명령은 다음과 같은 것을 포함한다.
LDF - F_플로팅 로드
LDD - D_플로팅 로드(G_플로팅 로드)
LDS - S_플로팅 로드(롱워드 정수 로드)
LDT - T_플로팅 로드(콰드워드 정수 로드)
STF - F_플로팅 스토어
STD - D_플로팅 스토어(G_플로팅 스토어)
STS - S_플로팅 스토어(롱워드 정수 스토어)
STT - T_플로팅 스토어(콰드워드 정수 스토어)
각 로드 명령은 메모리부터 특정 형식의 부동 소수점 데이타를 인출하고, 이 형식의 부동 소수점 레지스터 포맷에 맞도록 그 바이트를 재배열한 다음, 레지스터 세트(61)내의 레지스터 Fa에 기록하는데, 여기서 가상 어드레스는 레지스터 Fb를 부호 확장형 16 비트 변위에 가산함으로써 계산된다. 스토어 명령은 레지스터 Rb를 부호 확장형 16 비트 변위에 가산함으로서 계산된 가상 어드레스의 메모리 위치에 레지스터 Fa의 내용이 스토어되도록 하는데, 바이트는 상기 부동 소수점 데이타 형식에 대한 메모리 포맷에 일치하지 않는 방식으로 재배열된다.
부동 소수점 브랜치 명령은 전술한 정수 브랜치 명령과 동일한 방식으로 동작하는데, 즉 부동 소수점 레지스터 Fa의 값이 테스트되어 PC가 조건부로 변하게 된다. 이들 부동 소수점 브랜치 명령은 다음과 같은 것을 포함한다.
FBEQ - 값이 동일할 때 플로팅 브랜치
FBNE - 값이 동일하지 않을 때 플로팅 브랜치
FBLT - 작을 때 플로팅 브랜치
FBLE - 그 이하일 때 플로팅 브랜치
FBGT - 초과일 때 플로팅 브랜치
FBGE - 그 이상일 때 플로팅 브랜치
레지스터 Fa가 테스트되어, 특정 관계가 참인 경우 타겟 가상 어드레스가 PC에 로드되며, 그렇지 아닌 경우에는 다음 순서 명령을 계속 실행한다. 변위는 부호형 롱워드 오프셋으로서 취급되는데, 이는 변위가 64 비트로의 부호 확장된 롱워드 경계를 어드레스하도록 좌측으로 2 비트 쉬프트되어, 타겟 가상 어드레스를 형성하기 위하여 갱신된 PC에 가산된다.
부동 소수점 산술에 대한 연산 포맷 명령은 레지스터(61)내의 64 비트 레지스터 값에 대한 가산, 감산, 승산, 제산, 비교, 절대값, 복사 및 변환 동작을 포함한다. 각 명령은 값의 소스 및 목적지 포맷을 특정할 뿐만 아니라 사용되는 라운딩 모드(rounding mode) 및 트랩핑 모드(trapping mode)를 특징한다. 이들 부동 소수점 연산 명령은 테이블 B에 열거되어 있다.
부동 소수점 조건부 이동 명령은 정수 레지스터(43) 대신 부동 소수점 레지스터(61)가 사용된다는 점을 제외하고는, 정수 조건부 이동 명령에 대응한다. 정수 조건부 이동 명령에서와 마찬가지로, 이들 명령들은 브랜치 명령을 제거하는 데 사용될 수 있다.
CPU(10)는 그 명령 세트내에 여러 가지의 기타 명령을 갖고 있는데, 그 모두는 전술한 명령 포맷을 사용하지만, 이제까지 설명한 카테고리에는 맞지 않는다.
다음은 기타 명령들이다:
CALL_PAL - 특권 아키텍쳐 라이브러리 루틴을 호출
FETCH - 데이타 블록 선인출
FETCH_M - 수정할 의도로 선추출(Prefetch, Modify Intent)
DRAINT - 명령 파이프라인 드레인(drain)
MB - 메모리 장벽(Memory Barrier)
RCC - 판독 사이클 카운터
제8도의 포맷(75)을 사용하는 상기 CALL_PAL 명령은 PAL 코드(명령의 <25:0>비트)에 대해 트랩(trap)을 발생시킨다. 이 명령은 모든 이전의 명령이 예외(exception)없이 완료됨이 보장될 때까지 발행되지 않는다. 예외가 이들 이전의 명령중 하나에 대하여 발생되는 경우, 예외 스택 프레임에 있는 재개 PC는 CALL_PAL 명령을 가리킨다.
상기 FETCH 명령은 Rb의 내용으로 주어진 가상 어드레스를 포함하는 정렬된 512 바이트 블록을 선인출한다. Rb에 있는 이 어드레스는 정렬된 512 바이트의 블록 데이타를 지정하는 데 사용된다. 이 동작은 이 데이터를 액세스하는 그 후의 로드(Load) 또는 스토어(Store) 명령을 예상하여 512 바이트 블록 데이터(또는, 더 큰 블록)의 전부 또는 일부분을 메모리 계층의 더 빠른 액세스부로 이동시키려는 것이다. 따라서, FETCH 명령은 더 빠른 실행을 제공할 수 있는, CPU(10)에 대한 힌트이다. 특정 CPU의 구성이 이 기법을 채택하지 않을 경우, 이 힌트는 무시된다. 상기 FETCH_M 명령은 데이타의 일부 또는 전부에 대해 갱신(스토어)이 예상되는 경우 추가적인 힌트를 제공하는데, 이것은 일부 라이트백 캐쉬(writeback cache) 설계에 더 빠른 동작을 제공한다. 그 이유는 데이타 블록이 "소유된(owned)"것으로서 캐시내로 판독되어, 기록이 캐시에 있는 블록 데이타에 대해 실행될 때 소유(ownership)를 포기하거나 요구하기 위한 폴트(fault)를 발생시키지 않기 때문이다. FETCH에 의해서는 예외가 발생되지 않는데, 동일한 어드레스를 사용하는 로드(FETCH_M 경우는 스토어)가 폴트되는 경우, 선인출 요구는 무시된다. 상기 FETCH 명령은 100 사이클 정도의 메모리 대기 시간(latency)을 소프트웨어가 없애는데 도움을 주기 위한 것으로서, 10 사이클 정도의 메모리 대기 시간에 대해서는 그다지 중요하지 않는데(또는, 구현될 수 있음), 그 이유는 이러한 짧은 대기 시간을 없애기 위해 코드 스케률링이 사용되기 때문이다.
상기 DRAINT 명령은 산술 트랩(arithmetic traps)을 발생시킴이 없이, 모든 선행 명령이 완료되는 것이 보장될 때까지 명령 발행을 스톨(stall)한다. 이것은 파이프라인식 구성에 있어서, DRAINT 이후의 임의의 명령 전에 어떠한 산술트랩도 발행됨이 없이, 모든 이전의 산술 명령이 완료 되는 것을 소프트웨어가 보장하도록 한다. 예컨대, 이 명령은 이전 명령에 대한 모든 예외가 현재의 예외 처리 조건에서 확실히 처리되도록 예외 핸들러(exception handler)를 변경시키기 전에 사용될 수 있다.
상기 메모리 장벽 명령 MB는 모든 이전의 로드 및 스토어가 완료될 때까지 모든 미래의 로드 또는 스토어가 완료되지 않도록 하는 것을 보장한다. MB 명령이 없을 때는, 다른 물리적 위치에 대한 로드 및 스토어는 순서와 무관하게 완료되도록 허용된다. MB 명령은 메모리의 액세스가 순서적으로 되게 한다.
상기 판독 사이클 카운터 명령 RCC는 레지스터 Ra가 CPU 사이클 카운터의 내용으로 기록되도록 한다. 사이클 카운터의 하위 32 비트는 N개의 CPU 사이클당 하나씩 증가되는 무부호형 정수인데, 여기서 N은 1 내지 16의 구현에 종속하는 정수이다. 카운터는 구현에 종속하는 값에서 0으로 순환한다.
특정 실시예를 참조하여 본 발명을 설명하였지만, 이상의 설명은 본 발명을 한정하는 것으로 해석되어서는 아니된다. 당업자는 본 설명을 참조하여 본 발명의 기타 실시예뿐만 아니라, 개시된 실시예의 다양한 변경을 할 수 있음은 물론이다. 따라서 첨부된 특허 청구 범위는 임의의 변경 또는 본 발명의 범위내에 포함되는 실시예를 포함한다.
테이블 A : 페이지 테이블 엔트리(Page Table Entry)
페이지 테이블 엔트리의 필드는 다음과 같다:
비트 설명
<0> 유효(V) - PFN 필드의 유효성을 나타낸다.
<1> 판독시의 폴트(Fault on Read: FOR) -세트시 판독시의 폴트 예외
가 페이지내의 임의의 위치에서 판독하려는 시도시에 발생한다.
<2> 기록시의 폴트(Fault on Write: FOW) -세트시, 기록시의 폴트 예
외가 페이지내의 임의의 위치에 기록하려는 시도시에 발생한다.
<3> 실행시의 폴트(Fault on Execute: FOE) -세트시, 실행시의 폴트
예외가 페이지내의 명령을 실행하려는 시도시에 발생한다.
<4> 어드레스 공간 매치(Address Space Match: ASM) -세트시, 이
PTE는 모든 어드레스 공간 번호와 매치한다. 주어진 VA에 대하여,
ASM은 모든 처리에서 일관되게 세트되어야 한다.
<6:5> 세분성 힌트(Granularity hint: GH)
<7> 장래 사용을 위한 예비
<8> 커널 판독 인에이블(Kernel Read Enable: KRE) -이 비트는 커널
모드로부터의 판독을 인에이블한다. 이 비트가 0이고 커널 모드에서
LOAD 또는 명령 인출이 시도되면, 액세스 위반(Access Violation)
이 발생한다. 이 비트는 V=0 일 때도 유효하다.
<9> 실행 판독 인에이블(Executive Read Enable: ERE) -이 비트는 실
행 모드로부터의 판독을 인에이블한다. 이 비트가 0이고 실행모드에
서 LOAD 또는 명령 인출이 시도되면 액세스 위반이 발생한다. 이 비
트는 V=0 일 때도 유효하다.
<10> 슈퍼바이져 판독 인에이블(Supervisor Read Enable: SRE) -이
비트는 슈퍼바이져 모드로부터의 판독을 인에이블한다. 이 비트가 0
이고 슈퍼바이져 모드에서 LOAD 또는 명령 인출이 시도되면 액세서
위반이 발생한다. 이 비트는 V=0 일 때도 유효하다.
<11> 유저 판독 인에이블(User Read Enable: VRE) -이 비트는 유저 모
드로부터의 판독을 인에이블한다. 이 비트가 0이고 유저모드에서
LOAD 또는 명령 인출이 시도되면 액세스 위반이 발생한다. 이 비트
는 V=0 일 때도 유효하다.
<12> 커널 기록 인에이블(Kernel Write Enable: KWE) -이 비트는 커
널 모드로부터의 기록을 인에이블한다. 이 비트가 0이고 커널 모드
에서 STORE가 시도되면 액세스 위반이 발생한다. 이 비트는 V=0
일 때도 유효하다.
<13> 실행 기록 인에이블(Executive Write Enable: KWE) -이 비트는
실행 모드로부터의 기록을 인에이블한다. 이 비트가 0이고 실행 모
드에서 STORE가 시도되면 액세스 위반이 발생한다.
<14> 슈퍼바이져 기록 인에이블(Supervisor Write Enable: SWE) -이
비트는 슈퍼바이져 모드로부터의 기록을 인에이블한다. 이 비트가
0이고 슈퍼바이져 모드에서 STORE가 시도되면 액세스 위반이 발
생한다.
<15> 유저 기록 인에이블(User Write Enable: UWE) -이 비트는 유저
모드로 부터의 기록을 인에이블한다. 이 비트가 0이고 유저모드에
서 STORE가 시도되면 액세스 위반이 발생한다.
<31:16> 소프트웨어용으로 에비
<63:32> 페이지 프레임 번호(Page Frame Number: PFN) -PFN 필드는
항상 페이지 경계를 가리킨다. V가 세트되면, 물리적 어드레스를
얻기 위하여 PFN은 가상 어드레스의 페이지 내의 바이트(Byte
Within Page) 비트와 연결된다. V가 클리어(clear)되면 이 필드는
소프트웨어에 의해 사용될 수 있다.
테이블 B-부동 소숫점 산술 연산(Floating Point Arithmetic Operations)
의사 기호 비트 연산
(Mnemonic)
CPYS 부호 복사(Copy Sign)
CPYSN 반대 부호 복사(Copy Sign Negate)
CPYSE 부호 및 지수 복사(Copy Sign and Exponent)
CPYSEE 부호 및 확장된 지수 복사(Copy Sign and Extended Exponent)
CVTQL 콰드워드를 롱워드로 변환
CVTLQ 롱워드를 콰드워드로 변환
FCMOV 플로팅 조건부 이동(Floating Conditional Move)
의사 기호 산술 연산
(Mnemonic)
ADDF F_플로팅 가산(Add F_floating)
ADDD D_플로팅 가산
ADDG G_플로팅 가산
ADDS S_플로팅 가산
ADDT T_플로팅 가산
CMPD D_플로팅 비교(Compare D_floating)
CMPG G_플로팅 비교
CMPS S_플로팅 비교
CMPT T_플로팅 비교
CVTDQ D_플로팅을 콰드워드로 변환(Convert D_floating to Quadword)
CVTGQ G_플로팅을 콰드워드로 변환
CVTSQ S_플로팅을 콰드워드로 변환
CVTTQ T_플로팅을 콰드워드로 변환
CVTQD 콰드워드를 D_플로팅으로 변환(Convert Quadword to D_floating)
CVTQF 콰드워드를 F_플로팅으로 변환
CVTQG 콰드워드를 G_플로팅으로 변환
CVTQS 콰드워드를 S_플로팅으로 변환
CVTQT 콰드워드를 T_플로팅으로 변환
CVTFG F_플로팅을 G_플로팅으로 변환(Convert F_floating to G_floating)
CVTDF D_플로팅을 F_플로팅으로 변환
CVTGF G_플로팅을 F_플로팅으로 변환
CVTST S_플로팅을 T_플로팅으로 변환
CVTTS T_플로팅을 S_플로팅으로 변환
의사 기호 비트 연산
(Mnemonic)
DIVF F_플로팅 제산(Divide F_floating)
DIVD D_플로팅 제산
DIVG G_플로팅 제산
DIVS S_플로팅 제산
DIVT T_플로팅 제산
MULF F_플로팅 승산(Multiply F_floating)
MULD D_플로팅 승산
MULG G_플로팅 승산
MULS S_플로팅 승산
MULT T_플로팅 승산
SUBF F_플로팅 감산(Subtract F_floating)
SUBD D_플로팅 감산
SUBG G_플로팅 감산
SUBS S_플로팅 감산
SUBT T_플로팅 감산
부록 4
바이트 조작(Byte Manipulation)
A1. 비교 바이트 CMPBGE 명령에 대한 소프트웨어 노트
CMPBGE의 결과는 ZAP 및 ZAPNOT에 대한 입력으로서 사용될 수 있다.
문자 스트링(character string)에서 제로(0) 바이트를 스캐닝(scaning)하기 위한 코드는 다음과 같다.
<R1을 스트링의 정렬된 QW 어드레스로 초기화>
LOOP :
LDQ R2,0(R1) ; 8 바이트 픽업
LDA R1,8(R1) ; 스트링 포인터 증가
CMPBGE R21, R2, R3 ; 제로인 바이트가 없으면, R3<7:0>=0
BEQ R3, LOOP ; 종료바이트가 발견되지 않은 경우 LOOP
… ; 여기서, R3는 어떤 바이트가 종료될 것인
; 지를 결정하는 데 사용될 수 있다.
크거나 작은 2개의 문자 스트링을 비교하기 위한 코드는 다음과 같다.
< R1을 스트링1의 정렬된 QW 어드레스로 초기화 >
< R2를 스트링2의 정렬된 QW 어드레스로 초기화 >
LOOP:
LDQ R3,0(R1) ; 스트링1의 8 바이트를 픽업
LDA R1,8(R1) ; 스트링1 포인터 증가
LDQ R4,0(R2) ; 스트링2의 8 바이트를 픽업
LDA R2,8(R2) ; 스트링2 포인터 증가
XOR R3,R4,R5 ; 모든 동일 바이트 테스트
BEQ R3,LOOP ; 모두가 동일한 경우 LOOP
CMPBGE R31,R5,R5 ; 여기서 R5는 동일하지 않는 제1 바이트 위
… ; 치의 데이블 룩업(table lookup)을 인덱스
; 하는 데 사용될 수 있다.
R1의 문자 스트링 중 '0'∼'9' 범위에 해당되는 것을 검사하기 위한 코드는 다음과 같다.
LDQ R2,lit0s ; 0 이하의 8 바이트 문자 픽업
LDQ R3,lit9s ; 9 이상의 8 바이트 문자 픽업
CMPBGE R2,R1,R4 ; 문자가 0보다 작은 경우, 일부 R4 <i>=1
CMPBGE R1,R3,R5 ; 문자가 9보다 큰 경우, 일부 R5 <i>=1
BNE R4, ERROR ; 일부 문자가 너무 작으면 분기
BNE R5, ERROR ; 일부 문자가 너무 크면 분기
A2. 바이트 추출 명령에 대한 소프트웨어 노트
아래에 주어진 예의 코멘트는, X를 포함하는 정렬된 콰드워드의 값(X mod 8)=5는 CBAxxxxx 이고, X+7을 포함하는 정렬된 콰드워드의 값은 yyyHGFED인 것으로 가정한다. 아래에 주어진 예는 가장 일반적인 경우로서, X 값 또는 X의 의도된 정렬에 관한 보다 많은 정보를 알고 있으면 더 짧은 시퀀스가 사용될 수 있다. 정렬되지 않은 어드레스 X로부터 콰드워드를 로딩하기 위한 시퀀스 :
LDQ_U R1,X ; 무시 <2:0>, R1=CBAxxxxx
LDQ_U R2,X+3 ; 무시 <2:0>, R2=yyyHGFED
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTQL R1,R3,R1 ; R1=00000CBA
EXTQH R2,R3,R2 ; R2=HGFED000
OR R2,R1,R1 ; R1=HGFEDCVBA
정렬되지 않은 어드레스 X로부터 롱워드를 로딩하고 제로 확장(Zero-extending)하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=CBAxxxxx
LDQ_U R2,X+3 ; 무시 <2:0>, R2=yyyyyyyD
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTQL R1,R3,R1 ; R1=00000CBA
EXTQH R2,R3,R2 ; R2=00000D000
OR R2,R1,R1 ; R1=0000DCBA
정렬되지 않은 어드레스 X로부터 롱워드를 로딩하고 부호 확장하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=CBAxxxxx
LDQ_U R2,X+7 ; 무시 <2:0>, R2=yyyyyyyD
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTLL R1,R3,R1 ; R1=00000CBA
EXTLH R2,R3,R2 ; R2=0000D000
OR R2,R1,R1 ; R1=0000DCBA
SLL R1,#32,R1 ; R1=DCBA0000
SRA R1,#32,R1 ; R1=ssssDCBA
정렬되지 않은 어드레스 X로부터 워드를 로딩하고 제로 확장하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=yBAxxxxx
LDQ_U R2,X+1 ; 무시 <2:0>, R2=yBAxxxxx
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTWL R1,R3,R1 ; R1=000000BA
EXTWH R2,R3,R2 ; R2=00000000
OR R2,R1,R1 ; R1=000000BA
정렬되지 않은 어드레스 X로부터 워드를 로딩하고 부호 확장하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=yBAxxxxx
LDQ_U R2,X+1 ; 무시 <2:0>, R2=yBAxxxxx
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTWL R1,R3,R1 ; R1=000000BA
EXTWH R2,R3,R2 ; R2=00000000
OR R2,R1,R1 ; R1=000000BA
SLL R1,#48,R1 ; R1=BA000000
SRA R1,#48,R1 ; R1=ssssssBA
어드레스 X로부터 바이트를 로딩하고 제로 확장하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=yyAxxxxx
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTQL R1,R3,R1 ; R1=0000000A
어드레스 X로부터 바이트를 로딩하고 부호 확장하기 위한 시퀀스:
LDQ_U R1,X ; 무시 <2:0>, R1=yyAxxxxx
LDA R3,X ; R3<2:0>=(X mod 8)=5
EXTBL R1,R3,R1 ; R1=0000000A
SLL R1,#56,R1 ; R1=A0000000
SRA R1,#568,R1 ; R1=sssssssA
최적의 예:
워드 인출은 10(R3)로부터 필요한 것으로 가정하는데, 여기서 R3는 롱워드로 정렬된 어드레스를 포함하는 것으로 가정한다. 이하에 제시된 최적의 시퀀스는 알고 있는 상수 오프셋 및 롱워드 정렬에 유리하다(단일의 정렬된 롱워드가 전체 롱워드를 포함하기 때문이다). 이 시퀀스는 R3가 롱워드로 정렬된 어드레스를 포함하지 않는 경우, 데이타 정렬 폴트(Data Alignment Fault)를 발생한다.
10(R3)로부터 정렬된 워드를 로딩하고 제로 확장하기 위한 시퀀스:
LDL R1,8(R3) ; R1=ssssBAxx
; R3가 롱워드로 정렬되지 않는 경우 폴트
EXTWL R1,#2,R1 ; R1=000000BA
10(R3)로부터 정렬된 워드를 로딩하고 부호 확장하기 위한 시퀀스:
LDL R1,8(R3) ; R1=ssssBAxx
; R3가 롱워드로 정렬되지 않는 경우 폴트
SRA R1,#16,R1 ; R1=ssssssBA
A3. 바이트 마스크(byte mask) 명령에 대한 소프트웨어 노트
아래에 주어진 예의 명령은 X를 포함하는 정렬된 콰드워드의 값(X mod 8)=5가 CBAxxxxx이고, X+7를 포함하는 정렬된 콰드워드의 값은 yyyHGFED이며, R5로부터 스토어되는 값은 hgfedcba인 것으로 가정한다. 아래에 주어진 예는 가장 일반적인 경우로서, X의 값 또는 X의 의도된 정렬에 관한 보다 많은 정보를 알고 있는 경우 보다 짧은 시퀀스가 사용될 수 있다.
정렬되지 않은 콰드워드 R5를 어드레스 X에 스토어하기 위한 시퀀스:
LDA R6, X ; R6<2:0>=(X mod 8)=5
LDQ_U R2,X+7 ; 무시 <2:0>, R2=yyyHGFED
LDQ_U R1,X ; 무시 <2:0>, R1=CBAxxxxx
INSQH R5,R6,R4 ; R4=000hgfed
INSQL R5,R6,R3 ; R3=cba00000
MSKQH R2,R6,R2 ; R2=yyy00000
MSKQL R1,R6,R1 ; R1=000xxxxx
OR R2,R4,R2 ; R2=yyyhgfed
OR R1,R3,R1 ; R1=cbaxxxxx
; 정렬된 콰드워드의 바뀐 경우를 위해 상위
STQ_U R2,X+7 ; 비트를 스토어한 후 하위 비트를 스토어 하
; 여야 한다.
STQ_U R1,X ;
정렬되지 않은 롱워드 R5를 어드레스 X에 스토어하기 위한 시퀀스:
LDA R6, X ; R6<2:0>=(X mod 8)=5
LDQ_U R2,X+3 ; 무시 <2:0>, R2=yyyyyyyD
LDQ_U R1,X ; 무시 <2:0>, R1=CBAxxxxx
INSLH R5,R6,R4 ; R4=0000000d
INSLL R5,R6,R3 ; R3=cba00000
MSKLH R2,R6,R2 ; R2=yyyyyyy0
MSKLL R1,R6,R1 ; R1=cbaxxxxx
OR R2,R4,R2 ; R2=yyyyyyyd
OR R1,R3,R1 ; R1=cbaxxxxx
STQ_U R2,X+3 ; 정렬된 콰드워드의 바뀐 경우를 위해 상위
; 비트를 스토어한 후 하위 비트를 스토어 하
; 여야 한다.
STQ_U R1,X ;
X에 정렬되지 않은 워드를 스토어하기 위한 시퀀스:
LDA R6, X ; R6<2:0>=(X mod 8)=5
LDQ_U R2,X+1 ; 무시 <2:0>, R2=yBAxxxxx
LDQ_U R1,X ; 무시 <2:0>, R1=yBAxxxxx
INSWH R5,R6,R4 ; R4=00000000
INSWL R5,R6,R2 ; R3=0ba00000
MSKWH R2,R6,R2 ; R2=yBAxxxxx
MSKWL R1,R6,R1 ; R1=y00xxxxx
OR R2,R4,R2 ; R2=yBAxxxxx
OR R1,R3,R1 ; R1=ybaxxxxx
STQ_U R2,X+1 ; 정렬된 콰드워드의 바뀐 경우를 위해 상위
; 비트를 스토어한 후 하위 비트를 스토어 하
; 여야 한다.
STQ_U R1,X
X에 바이트 R5를 스토어하기 위한 시퀀스:
LDA R6, X ; R6<2:0>=(X mod 8)=5
LDQ_U R1, X ; 무시 <2:0>, R1=yyAxxxxx
INSBH R5,R6,R3 ; R4=00a00000
MSKBL R1,R6,R1 ; R1=yy0xxxxx
OR R1,R3,R1 ; R2=yyaxxxxx
STQ_U R1,X
A4. 바이트 삽입 명령의 추가적인 상세 설명
바이트 삽입 명령은 다음 동작을 수행한다:
CASE opcode BEGIN
INSBL: byte_mask <- 00000001 (bin)
INSWx: byte_mask <- 00000011 (bin)
INSLx: byte_mask <- 00001111 (bin)
INSQx: byte_mask <- 11111111 (bin)
ENDCASE
byte_mask <- LEFT_SHIFT(byte_mask, rbv<2:0>)
CASE opcode BEGIN
INSxL:
byte_loc <- Rbv<2:0>*8
temp <- LEFT_SHIFT(Rav, byte_loc<5:0>)
Rc <- BYTE_ZAP(temp, NOT(byte_mask<7:0>))
INSxH:
byte_loc <- 64-Rbv<2:0>*8
temp <- RIGHT_SHIFT(Rav, byte_loc<5:0>)
Rc <- BYTE_ZAP(temp, NOT(byte_mask<15:8>))
ENDCASE
A5. 바이트 추출 명령의 추가적인 상세 설명
바이트 추출 명령은 다음 동작을 수행한다:
CASE opcode BEGIN
EXTBL: byte_mask <- 00000001 (bin)
EXTWx: byte_mask <- 00000011 (bin)
EXTLx: byte_mask <- 00001111 (bin)
EXTQx: byte_mask <- 11111111 (bin)
ENDCASE
CASE opcode BEGIN
EXTxL:
byte_loc <- Rbv<2:0>*8
temp <- LEFT_SHIFT(Rav, byte_loc<5:0>)
Rc <- BYTE_ZAP(temp, NOT(byte_mask))
EXTxH:
byte_loc <- 64-Rbv<2:0>*8
temp <- RIGHT_SHIFT(Rav, byte_loc<5:0>)
Rc <- BYTE_ZAP(temp, NOT(byte_mask))
ENDCASE
A6. 원자 바이트 기록(Atomic Byte Write)
원자 바이트 기록 동작은 이하의 명령 시퀀스에 따라 실행된다:
LDA R6, X ; 메모리 위치 X로부터의 어드레스를 R6에 로드
BIC R6,#7,R7 ; 리터럴 #7를 사용하여 R6 BIC 실행하여, 그 결
과치를 R7에 R7 어드레스로부터 로드로크
retry: LDQ_L R1,0(R7) ; R7어드레스로부터 로드 로크
INSBLR5,R6,R3 ; 바이트 삽입
MSKBL R1,R6,R1 ; 바이트 마스크
OR R1,R3,R1 ;
STQ_C R1,0(R7) ; 동일 위치로 조건부 스토어
BNE R1, retry

Claims (7)

  1. (2회 정정) 고정된 길이의 명령 시퀀스를 실행하는 단계와, 상기 명령 시퀀스 내에 있고, 명령 어드레스 시퀀스 내의 어드레스를 가지며, OP 코드 및 부호형 변위(signed displacement)를 가지는 조건부 브랜치 명령을 검출하는 단계와, 상기 조건부 브랜치 명령 내의 상기 변위의 부호를 검출하는 단계와, 상기 변위가 양수(positive)이면, 상기 조건부 브랜치 명령을 가진 시퀀스 내의 어드레스를 가지는 명령 시퀀스의 다음 명령을 인출하고, 상기 변위가 음수(negative)이면, 상기 명령 어드레스 시퀀스 내에 있지 않고 상기 변위에 의해 결정된 어드레스를 가지는 브랜치 타겟 명령을 인출하는 단계와, i) 롱워드 경계를 어드레싱하도록 변위를 쉬프트하는 단계와, ii) 상기 조건부 브랜치 명령 뒤의 다음 명령을 어드레스하도록 갱신된 PC(프로그램 카운터)의 내용에 상기 쉬프트된 변위를 더하는 단계, iii) 다음 명령을 인출하는 상기 단계 또는 브랜치 타겟 명령을 인출하는 상기 단계가 개시된 후, 상기 조건부 브랜치 명령의 상기 OP 코드에 의해 특정된 조건을 판정하기 위하여 상기 조건부 브랜치 명령 내에 정의된 레지스터를 검사하는 단계에 의해 상기 타겟 브랜치 어드레스를 결정하는 단계를 포함하는 것을 특징으로 하는 프로세서 동작 방법.
  2. (2회 정정) 제1항에 있어서, 상기 브랜치 명령 내에 정의된 레지스터를 검사하는 단계를 상기 레지스터가 상기 OP 코드에 의해 특정된 바와 같은 0에 대한 사전 결정된 관계를 가지는 지의 여부를 판정하는 것인 프로세서 동작 방법.
  3. (2회 정정) 제2항에 있어서, 상기 조건은 상기 레지스터의 하위 차수의 비트가 0인지의 여부인 것인 프로세서 동작 방법.
  4. (2회 정정) 순차적인 어드레스(sequential address)를 가진 고정된 길이의 명령 시퀀스를 실행하고, OP 코드 및 부호형 변위를 가지는 상기 시퀀스 내의 조건부 브랜치 명령을 검출하는 수단과, 상기 조건부 브랜치 명령 내의 상기 변위의 부호를 검출하는 수단과, 상기 변위의 상기 검출된 부호가 양(positive)이면, 상기 조건부 브랜치 명령을 가진 시퀀스 내의 어드레스를 가지는 명령 시퀀스의 다음 명령을 인출하고, 상기 변위의 상기 검출된 부호가 음(negative)이면, 상기 명령 어드레스 시퀀스 내에 있지 않고 상기 변위에 의해 결정된 어드레스를 가지는 브랜치 타겟 명령을 인출하는 수단과, 상기 다음 명령 또는 상기 브랜치 타겟 명령을 인출하는 상기 인출 수단이 개시된 후, 상기 OP 코드에 의해 특정된 조건을 판정하기 위하여 상기 조건부 브랜치 명령 내에 정의된 레지스터를 검사하는 수단을 포함하는 것을 특징으로 하는 프로세서.
  5. (2회 정정) 제11항에 있어서, 롱워드 경계를 어드레싱하도록 변위를 쉬프트함으로써 상기 타겟 어드레스를 결정하고, 상기 조건부 브랜치 명령 뒤의 다음 명령을 어드레스하도록 갱신된 PC(프로그램 카운터)의 내용에 상기 쉬프트된 변위를 더하는 수단을 포함하는 것인 프로세서.
  6. (2회 정정) 제11항에 있어서, 상기 조건은 상기 레지스터의 하위 차수 비트가 1로 세트되어 있는지의 여부인 것인 프로세서.
  7. (2회 정정) 제11항에 있어서, 상기 조건은 상기 레지스터의 하위 차수의 비트가 0인지의 여부인 것인 프로세서.
KR1019910010876A 1990-06-29 1991-06-28 고성능 프로세서의 브랜치 예상 동작 방법 및 장치 KR100230643B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US54758990A 1990-06-29 1990-06-29
US547,589 1995-10-24

Publications (2)

Publication Number Publication Date
KR920001332A KR920001332A (ko) 1992-01-30
KR100230643B1 true KR100230643B1 (ko) 1999-11-15

Family

ID=24185264

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019910010876A KR100230643B1 (ko) 1990-06-29 1991-06-28 고성능 프로세서의 브랜치 예상 동작 방법 및 장치

Country Status (6)

Country Link
US (1) US6076158A (ko)
EP (1) EP0463973A3 (ko)
JP (1) JPH06110685A (ko)
KR (1) KR100230643B1 (ko)
CA (1) CA2045790A1 (ko)
TW (1) TW222027B (ko)

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU3250393A (en) 1991-12-17 1993-07-19 Compaq Computer Corporation Apparatus for reducing computer system power consumption
US6865684B2 (en) * 1993-12-13 2005-03-08 Hewlett-Packard Development Company, L.P. Utilization-based power management of a clocked device
US6356918B1 (en) 1995-07-26 2002-03-12 International Business Machines Corporation Method and system for managing registers in a data processing system supports out-of-order and speculative instruction execution
US6182201B1 (en) * 1997-04-14 2001-01-30 International Business Machines Corporation Demand-based issuance of cache operations to a system bus
JP3604548B2 (ja) * 1997-11-28 2004-12-22 株式会社ルネサステクノロジ アドレス一致検出装置、通信制御システム及びアドレス一致検出方法
US6453389B1 (en) * 1999-06-25 2002-09-17 Hewlett-Packard Company Optimizing computer performance by using data compression principles to minimize a loss function
BR9902725A (pt) * 1999-07-13 2001-03-06 Coppe Ufrj Processo de formação, memorização e reuso, em tempo de execução, de sequências de instruções dinâmicas em computadores
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US7421572B1 (en) * 1999-09-01 2008-09-02 Intel Corporation Branch instruction for processor with branching dependent on a specified bit in a register
JP2001273137A (ja) * 2000-03-28 2001-10-05 Toshiba Corp マイクロプロセッサ
US6643769B1 (en) * 2000-08-23 2003-11-04 Hewlett-Packard Development Company, L.P. System and method for enabling selective execution of computer code
US6654877B1 (en) 2000-08-23 2003-11-25 Hewlett-Packard Development Company, L.P. System and method for selectively executing computer code
US7681018B2 (en) 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US6662294B1 (en) * 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
AU2002227451A1 (en) * 2000-11-10 2002-05-21 Chipwrights Design, Inc. Method and apparatus for reducing branch latency
US6732253B1 (en) * 2000-11-13 2004-05-04 Chipwrights Design, Inc. Loop handling for single instruction multiple datapath processor architectures
US6931518B1 (en) 2000-11-28 2005-08-16 Chipwrights Design, Inc. Branching around conditional processing if states of all single instruction multiple datapaths are disabled and the computer program is non-deterministic
US6948160B2 (en) * 2001-05-31 2005-09-20 Sun Microsystems, Inc. System and method for loop unrolling in a dynamic compiler
US7222337B2 (en) * 2001-05-31 2007-05-22 Sun Microsystems, Inc. System and method for range check elimination via iteration splitting in a dynamic compiler
US20040172524A1 (en) * 2001-06-29 2004-09-02 Jan Hoogerbrugge Method, apparatus and compiler for predicting indirect branch target addresses
US7225281B2 (en) * 2001-08-27 2007-05-29 Intel Corporation Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms
US7610451B2 (en) * 2002-01-25 2009-10-27 Intel Corporation Data transfer mechanism using unidirectional pull bus and push bus
US7493607B2 (en) 2002-07-09 2009-02-17 Bluerisc Inc. Statically speculative compilation and execution
US7337275B2 (en) * 2002-08-13 2008-02-26 Intel Corporation Free list and ring data structure management
US7203811B2 (en) * 2003-07-31 2007-04-10 International Business Machines Corporation Non-fenced list DMA command mechanism
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US7437536B2 (en) 2004-05-03 2008-10-14 Sony Computer Entertainment Inc. Systems and methods for task migration
US20050273559A1 (en) 2004-05-19 2005-12-08 Aris Aristodemou Microprocessor architecture including unified cache debug unit
US7224595B2 (en) 2004-07-30 2007-05-29 International Business Machines Corporation 276-Pin buffered memory module with enhanced fault tolerance
US20060036826A1 (en) * 2004-07-30 2006-02-16 International Business Machines Corporation System, method and storage medium for providing a bus speed multiplier
US7539800B2 (en) * 2004-07-30 2009-05-26 International Business Machines Corporation System, method and storage medium for providing segment level sparing
US7296129B2 (en) * 2004-07-30 2007-11-13 International Business Machines Corporation System, method and storage medium for providing a serialized memory interface with a bus repeater
US7389375B2 (en) * 2004-07-30 2008-06-17 International Business Machines Corporation System, method and storage medium for a multi-mode memory buffer device
US7331010B2 (en) 2004-10-29 2008-02-12 International Business Machines Corporation System, method and storage medium for providing fault detection and correction in a memory subsystem
US7356737B2 (en) * 2004-10-29 2008-04-08 International Business Machines Corporation System, method and storage medium for testing a memory module
US7512762B2 (en) * 2004-10-29 2009-03-31 International Business Machines Corporation System, method and storage medium for a memory subsystem with positional read data latency
US7395476B2 (en) 2004-10-29 2008-07-01 International Business Machines Corporation System, method and storage medium for providing a high speed test interface to a memory subsystem
US7299313B2 (en) * 2004-10-29 2007-11-20 International Business Machines Corporation System, method and storage medium for a memory subsystem command interface
US7305574B2 (en) * 2004-10-29 2007-12-04 International Business Machines Corporation System, method and storage medium for bus calibration in a memory subsystem
US7441060B2 (en) * 2004-10-29 2008-10-21 International Business Machines Corporation System, method and storage medium for providing a service interface to a memory system
US7277988B2 (en) 2004-10-29 2007-10-02 International Business Machines Corporation System, method and storage medium for providing data caching and data compression in a memory subsystem
US7243210B2 (en) * 2005-05-31 2007-07-10 Atmel Corporation Extracted-index addressing of byte-addressable memories
WO2007049150A2 (en) * 2005-09-28 2007-05-03 Arc International (Uk) Limited Architecture for microprocessor-based systems including simd processing unit and associated systems and methods
US7478259B2 (en) 2005-10-31 2009-01-13 International Business Machines Corporation System, method and storage medium for deriving clocks in a memory system
US7685392B2 (en) 2005-11-28 2010-03-23 International Business Machines Corporation Providing indeterminate read data latency in a memory system
US7636813B2 (en) 2006-05-22 2009-12-22 International Business Machines Corporation Systems and methods for providing remote pre-fetch buffers
US7640386B2 (en) * 2006-05-24 2009-12-29 International Business Machines Corporation Systems and methods for providing memory modules with multiple hub devices
US7594055B2 (en) * 2006-05-24 2009-09-22 International Business Machines Corporation Systems and methods for providing distributed technology independent memory controllers
US7584336B2 (en) 2006-06-08 2009-09-01 International Business Machines Corporation Systems and methods for providing data modification operations in memory subsystems
US7493439B2 (en) * 2006-08-01 2009-02-17 International Business Machines Corporation Systems and methods for providing performance monitoring in a memory system
US7669086B2 (en) * 2006-08-02 2010-02-23 International Business Machines Corporation Systems and methods for providing collision detection in a memory system
US7581073B2 (en) 2006-08-09 2009-08-25 International Business Machines Corporation Systems and methods for providing distributed autonomous power management in a memory system
US7587559B2 (en) * 2006-08-10 2009-09-08 International Business Machines Corporation Systems and methods for memory module power management
US7490217B2 (en) 2006-08-15 2009-02-10 International Business Machines Corporation Design structure for selecting memory busses according to physical memory organization information stored in virtual address translation tables
US7539842B2 (en) 2006-08-15 2009-05-26 International Business Machines Corporation Computer memory system for selecting memory buses according to physical memory organization information stored in virtual address translation tables
US7870459B2 (en) 2006-10-23 2011-01-11 International Business Machines Corporation High density high reliability memory module with power gating and a fault tolerant address and command bus
US7477522B2 (en) * 2006-10-23 2009-01-13 International Business Machines Corporation High density high reliability memory module with a fault tolerant address and command bus
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
US20080154379A1 (en) * 2006-12-22 2008-06-26 Musculoskeletal Transplant Foundation Interbody fusion hybrid graft
US7721140B2 (en) 2007-01-02 2010-05-18 International Business Machines Corporation Systems and methods for improving serviceability of a memory system
US7606988B2 (en) 2007-01-29 2009-10-20 International Business Machines Corporation Systems and methods for providing a dynamic memory bank page policy
US7603526B2 (en) * 2007-01-29 2009-10-13 International Business Machines Corporation Systems and methods for providing dynamic memory pre-fetch
US20090119114A1 (en) * 2007-11-02 2009-05-07 David Alaniz Systems and Methods for Enabling Customer Service
CN102077195A (zh) * 2008-05-08 2011-05-25 Mips技术公司 具有紧凑指令集架构的微处理器
US20100312991A1 (en) * 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20130166882A1 (en) * 2011-12-22 2013-06-27 Jack Hilaire Choquette Methods and apparatus for scheduling instructions without instruction decode
US9110657B2 (en) 2013-01-21 2015-08-18 Tom Yap Flowchart compiler for a compound complex instruction set computer (CCISC) processor architecture
US9405534B2 (en) 2013-01-21 2016-08-02 Tom Yap Compound complex instruction set computer (CCISC) processor architecture
US9679342B2 (en) * 2013-07-12 2017-06-13 Arm Limited Result data stream coding for repeating workloads
US11030105B2 (en) * 2014-07-14 2021-06-08 Oracle International Corporation Variable handles
US9934041B2 (en) 2015-07-01 2018-04-03 International Business Machines Corporation Pattern based branch prediction
CN112269596B (zh) * 2020-10-19 2023-11-28 童先娥 一种指令处理方法及处理器

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4402042A (en) * 1980-11-24 1983-08-30 Texas Instruments Incorporated Microprocessor system with instruction pre-fetch
WO1985000453A1 (en) * 1983-07-11 1985-01-31 Prime Computer, Inc. Data processing system
JPS61208129A (ja) * 1985-03-12 1986-09-16 Nec Corp 命令先読制御方式
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
JPS6381533A (ja) * 1986-09-26 1988-04-12 Toshiba Corp プログラム実行順序制御命令の構成装置
GB8728493D0 (en) * 1987-12-05 1988-01-13 Int Computers Ltd Jump prediction
US4876642A (en) * 1988-01-19 1989-10-24 Gibson Glenn A Rules and apparatus for a loop capturing code buffer that prefetches instructions
JPH081602B2 (ja) * 1988-02-23 1996-01-10 三菱電機株式会社 データ処理装置
JPH0766324B2 (ja) * 1988-03-18 1995-07-19 三菱電機株式会社 データ処理装置
JPH07120278B2 (ja) * 1988-07-04 1995-12-20 三菱電機株式会社 データ処理装置
JPH0256636A (ja) * 1988-08-23 1990-02-26 Toshiba Corp 分岐制御装置
US5142634A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5155820A (en) * 1989-02-21 1992-10-13 Gibson Glenn A Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits

Also Published As

Publication number Publication date
KR920001332A (ko) 1992-01-30
CA2045790A1 (en) 1991-12-30
TW222027B (ko) 1994-04-01
EP0463973A2 (en) 1992-01-02
JPH06110685A (ja) 1994-04-22
US6076158A (en) 2000-06-13
EP0463973A3 (en) 1993-12-01

Similar Documents

Publication Publication Date Title
KR100230643B1 (ko) 고성능 프로세서의 브랜치 예상 동작 방법 및 장치
KR100218572B1 (ko) 고성능 프로세서의 번역버퍼에 대해 세분성 힌트를 이용하는 프로세서 동작 방법 및 장치
KR100230105B1 (ko) 간략화된 명령 세트 프로세서의 성능 개선 방법 및 그 프로세서 시스템
KR100231380B1 (ko) 감소된 명령 세트 프로세서 내부 레지스터의 데이타를 조작하는 방법 및 장치
KR0185988B1 (ko) 멀티프로세서 또는 파이프 라인식 프로세서 시스템에서 데이타의 보존을 확실히 하는 방법
US5995746A (en) Byte-compare operation for high-performance processor
EP0463977B1 (en) Branching in a pipelined processor
US5469551A (en) Method and apparatus for eliminating branches using conditional move instructions

Legal Events

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

Payment date: 20100810

Year of fee payment: 12

EXPY Expiration of term