KR100563219B1 - 혼합 벡터/스칼라 레지스터 파일 - Google Patents

혼합 벡터/스칼라 레지스터 파일 Download PDF

Info

Publication number
KR100563219B1
KR100563219B1 KR1020007013162A KR20007013162A KR100563219B1 KR 100563219 B1 KR100563219 B1 KR 100563219B1 KR 1020007013162 A KR1020007013162 A KR 1020007013162A KR 20007013162 A KR20007013162 A KR 20007013162A KR 100563219 B1 KR100563219 B1 KR 100563219B1
Authority
KR
South Korea
Prior art keywords
register
vector
instruction
registers
scalar
Prior art date
Application number
KR1020007013162A
Other languages
English (en)
Other versions
KR20010043772A (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 KR20010043772A publication Critical patent/KR20010043772A/ko
Application granted granted Critical
Publication of KR100563219B1 publication Critical patent/KR100563219B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49957Implementation of IEEE-754 Standard

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

부동 소수점부는, 벡터 레지스터 또는 스칼라 레지스터로서 사용할 수도 있는 32개의 레지스터를 포함한 레지스터 뱅크로 구성되어 있다. 데이터 처리 명령어는, 그 연산시에 사용될 데이터 값을 포함한 레지스터를 가리키는 적어도 하나의 레지스터 지정 필드를 포함한다. 더욱 많은 오페코드를 인코딩하거나 더욱 많은 레지스터를 허용하는데 이용 가능한 명령어 비트 공간의 증가는, 레지스터가 그 레지스터 필드 자체 내에 벡터 또는 스칼라로서 취급되고 있는지를 인코딩함으로써 제공된다. 또한, 그 명령어의 하나의 레지스터용 레지스터 필드는, 다른 레지스터가 벡터 또는 스칼라인지를 인코딩할 수도 있다. 이 레지스터를, 보다 쉬운 디코드를 허용하는 오페코드와는 무관하게 그 명령어의 레지스터 필드내의 값들을 사용하여 초기에 액세스할 수 있다.
데이터 처리장치, 부동 소수점부, 벡터 레지스터, 스칼라 레지스터, 명령 디코더

Description

혼합 벡터/스칼라 레지스터 파일{MIXED VECTOR/SCALAR REGISTER FILE}
본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 벡터(vector) 및 스칼라(scalar) 데이터 처리 레지스터를 갖는 데이터 처리 시스템에 관한 것이다.
전형적으로, 데이터 처리 명령어는, 그것 내에 오페코드(opcode)부와 하나 이상의 레지스터 지정 필드들을 포함한다. 어떤 시스템에서는 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 취급할 수도 있다. 벡터 레지스터는, 그 데이터 처리 명령어가 그 시퀀스내에 있는 각 데이터 값에 관한 연산을 반복하는 대로 따로따로 연산하는 자신의 데이터 값을 각각 저장하는 레지스터들로 이루어진 시퀀스를 지정한다. 반대로, 스칼라 레지스터는 다른 레지스터와 무관하게 연산하는 단일 값을 저장한 단일 레지스터이다.
벡터 레지스터들을 사용하는 데이터 처리 명령어는, 전적으로 스칼라 연산에 관하여 많은 장점들을 갖는다. 단일 데이터 처리 명령어만이, 수행(보통 FIR 필터와 같은 DSP 기능)될 복수의 유사 데이터 처리 연산을 지정하는데 필요하므로, 필요한 명령 밴드폭을 감소할 수 있다. 단순성 때문에 바람직한 단일 발생 기계(single-issue machine)의 경우(즉, 사이클마다 하나의 명령어를 페치(fetch) 및 디코딩한다), 다른 벡터 명령어에 관해 병렬로 실행하는 다기능부로 고성능을 달성할 수 있다.
첨부 도면들 중의 도 16 및 도 17은, 크레이 1(Cray 1) 프로세서 레지스터 뱅크 및 디지털 이큅먼트 사(DEC; Digital Equipment Corporation) 멀티티탄(MultiTitan) 프로세서 레지스터를 각각 나타낸 것이다. 이러한 종래의 양 프로세서는, 벡터 및 스칼라 레지스터를 제공한다. 이 DEC 멀티티탄 프로세서는, Jouppi 등등에, "A United Vector/Scalar Floating Point Architecture" Computer Architecture News, Vol. 17, No. 2, 1/4/89에 설명되어 있다.
크레이 1의 경우에, 별도의 벡터 및 스칼라 레지스터 뱅크(10, 12)를 제공한다. 16비트 명령어는, 벡터 또는 스칼라로서 취급되는 명령어에 지정된 레지스터들의 다른 조합에 대응한 개별 오페코드를 제공한다. 이는, 이들의 다양한 조합을 나타내는데 필요한 오페코드의 수가 증가된다는 단점이 된다. 더욱이, 스칼라 및 벡터 레지스터가 별도의 레지스터 뱅크(10, 12) 내에 제공되기 때문에, 그 레지스터 뱅크(10, 12)중의 어느 것이 지정된 특별 레지스터에 사용되는지를 판단하기 위해 적어도 부분적으로 디코딩될 필요가 있다. 이 추가적인 디코드 필요 조건은, 가능하면 초기에 레지스터에 저장된 데이터 값들을 판독하는데 있어서 어려움이 부여된다.
크레이 1 프로세서는, 8개의 스칼라 레지스터와 8개의 벡터 레지스터를 어드레싱되게 하는 3비트 레지스터 지정 필드 R1, R2, R3를 사용한다. 실제, 각 벡터 레지스터는, 다른 데이터 값을 각각 저장할 수 있고, 길이 레지스터(16)내에 저장된 벡터 길이 값과 마스크 레지스터(18)내에 저장된 마스크 비트들에 따라 순차로 액세스될 수 있는 레지스터의 스택(stack)들을 포함한다. 그러나, 3비트 레지스터 필드에 의해 허용되는 8개의 스칼라 레지스터로만 제한하는 것은, 보다 많은 수의 레지스터를 목표로 할 수 있으면 보다 빠른 코드를 산출할 수 있는 현대의 컴파일러의 중요한 단점이 된다.
또한, 멀티티탄 프로세서는, 각 레지스터가 스칼라로서 또는 벡터 레지스터의 일부로서 연산할 수도 있는 단일 레지스터 뱅크(20)를 제공한다. 멀티티탄 프로세서는 32 비트 명령어를 사용하여 그 데이터 처리 연산을 지정한다. 이 대량의 명령어 비트 공간으로, 그 명령어들 자체가, 레지스터들이 벡터인지 또는 스칼라인지를 지정하는 필드 VS2, VS3을 포함하고, 벡터 길이(Len)를 포함한다. 이러한 접근법은 매우 큰 유연성을 허용하지만, 충분한 명령어 비트 공간은, 여러 상황에서 충분한 명령어 세트의 공급을 허용하는데 이용할 수 있는 오페코드 공간을 제한하지 않고 벡터/스칼라 필드들이 그 명령어내에 포함될 수 있게 하는데 이용할 수 없다는 단점이 된다. 더욱이, 그 명령어 자체내에 벡터 길이의 공급은, 자체 수정 코드에 의지하지 않고 벡터 길이에 대해 전체적으로 변화시키는 것이 어렵다. 또한, 이 멀티티탄 기술은, 실제로 사용될 가망성이 매우 없는(예를 들면, V=S op S ; 벡터 레지스터들로 이루어진 시퀀스는 2개의 스칼라 레지스터에 관해 수행된 연산 결과로 채워진다) 벡터 및 스칼라 레지스터의 조합에 동일한 명령어 비트 공간 자원을 희생하기 때문에 그 명령어 비트 공간을 다소 비효율적으로 사용한다.
또 다른 정보 처리장치가 US-A-5,437,043에 개시되어 있다. 이 장치는, 스칼라 레지스터로서 보류된 레지스터 R0-R7과, 스칼라 레지스터의 크기의 4배이고 일반적으로 벡터 레지스터로서 사용된 레지스터 R8-R31을 갖는 레지스터 뱅크를 포함한다.
본 발명의 목적은, 적어도 상술한 시스템의 한계의 일부에 역점을 두어 다루는데 있다.
본 발명의 일면에 따른 데이터 처리 장치는,
각각이 벡터 또는 스칼라 레지스터로서 사용되어 동작할 수 있는 복수의 레지스터를 갖는 레지스터 뱅크와,
적어도 실행을 위해 연산을 지정하는 연산 지정 코드와 상기 레지스터 뱅크내의 제 1 레지스터를 지정하는 제 1 레지스터 지정 필드를 갖는 상기 데이터 처리 명령어 중의 적어도 하나를 디코딩하는 명령 디코더를 포함하고,
상기 명령 디코더는 주어진 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 연산(operation)을 실행하도록 동작할 수 있되, 상기 주어진 레지스터가, 상기 주어진 레지스터에 오퍼랜드(operand)가 한번 저장된 상기 연산을 실행하는 것을 포함하는 스칼라 레지스터가 되면서 실행하고, 상기 주어진 레지스터가, 상기 주어진 레지스터용 레지스터 지정 필드에 따라 선택된 상기 레지스터 뱅크의 소정 시퀀스의 레지스터이내에 오퍼랜드가 복수회 저장된 상기 연산을 실행하는 것을 포함하는 벡터 레지스터가 되면서 실행하고,
상기 명령 디코더는, 상기 제 1 레지스터 지정 필드에 응답하고, 상기 제 1 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행하는지를 판단하기 위한 상기 연산 지정 코드와 무관하다.
본 발명은, 그 레지스터를 벡터 또는 스칼라로서 취급하는지를 그 레지스터 필드 자체가 표시할 수 있게 한 것이다. 따라서, 레지스터 필드만을 근거로 하여 레지스터가 초기에 액세스하게 하는 오페코드를 디코딩할 필요가 없고, 그 스칼라 및 벡터 레지스터가 단일 레지스터 뱅크내에 함께 제공됨에 따라, 그들의 사용으로 보다 큰 유연성을 허락한다. 게다가, 그 레지스터가 스칼라 또는 벡터인지를 인코딩하기 위해 레지스터 지정 필드를 사용하므로, 다른 용도용 명령어 비트 공간이 없다. 실제로, 본 발명의 기술은, 순차로 명령어 비트 공간을 이용할 수 있게 하여 보다 큰 레지스터 뱅크를 어드레싱 가능하게 하는 유효한 명령어 인코딩을 이롭게 제공한다.
본 발명의 바람직한 실시예에서, 상기 데이터 처리 명령어 중의 상기 적어도 하나는, 제 2 레지스터를 지정하는 제 2 레지스터 지정 필드를 갖고,
상기 명령 디코더는, 상기 제 2 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 상기 연산을 실행하고,
상기 명령 디코더는, 상기 제 2 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행할지를 판단하기 위해 상기 제 1 레지스터 지정 필드에 응답한다.
이와 같은 바람직한 실시예들은, 제 1 레지스터가 벡터 또는 스칼라인지 그리고 제 2 레지스터가 벡터 또는 스칼라인지의 상관 관계를 설정하여 활용한다. 실제로, 일부 조합이 종종 사용되고, 일부는 종종 사용되지 않는다는 것을 알 수 있다. 이는, 그 종종 사용된 조합을 지원하고 그들을 제 1 레지스터 필드 값으로 인코딩하여서, 제 2 레지스터의 성질을 별도로 인코딩해야 하는 것을 피하고서 활용할 수도 있다.
보기 드문 조합을 실제로 요구할 경우, 추가 명령어를 사용하여 이를 조정할 수 있다. 가망성이 없는 조합은 매우 드물어서, 명령어마다의 제 2 레지스터의 성질을 인코딩하지 않을 때의 이득이, 원하는 드문 조작을 지정하는 여분의 명령어들을 제공하기 위한 예비 요구보다 더 중요하다.
일부 실시예에서는 상관 관계가, 제 1 레지스터가 스칼라이고 제 2 레지스터가 벡터일 경우도 있을 수 있지만, 제 1 레지스터 및 제 2 레지스터가 둘다 벡터 또는 둘다 스칼라와 상관 관계에 있는 것이 바람직하다는 것을 알 수 있다.
본 발명의 원리는, 상기 데이터 처리 명령어들 중의 상기 적어도 하나가 제 3 레지스터를 지정하는 제 3 레지스터 지정 필드를 갖는 바람직한 실시예에서 더욱 유리하게 사용될 수도 있고,
상기 명령 디코더는, 상기 제 3 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 상기 연산을 실행하고,
상기 명령 디코더는, 상기 제 3 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행할지를 판단하기 위한 상기 제 2 레지스터 지정 필드에 응답한다.
이 바람직한 특징은, 제 2 레지스터 지정 필드를 사용하여 명령어 비트 공간을 더 절감하는 제 3 레지스터의 벡터 또는 스칼라 성질을 인코딩하는 것이다.
그 벡터들의 벡터 또는 스칼라 성질을 인코딩하기 위해 레지스터 지정 필드들을 사용하므로, 모든 스칼라 및 벡터 레지스터들의 조합이 용이하게 인코딩되지 않는다. 특별한 문제는, VopS 또는 SopV의 순서가 차이가 있고 이들의 두가지 가능성에 대한 그 레지스터 필드내의 별도의 인코딩이 아직 제공되지 않은 비교환적인 연산의 경우에 발생한다. 이 문제는, 상기 연산 지정 코드가 비교환적인 연산들에 대응한 비교환적인 코드 값을 가질 경우, 상기 비교환적인 코드 값들 중 적어도 일부가 같은 연산에 대응한 쌍으로 구성되지만 반대의 오퍼랜드 순서로도 구성된다.
벡터 길이 및 벡터 스트라이드(stride)(시퀀스 내의 레지스터 수들간의 갭(gap))는 그 명령어 오페코드내에 지정될 수 있다. 그렇지만, 벡터 길이 및 벡터 스트라이드는, 벡터 제어 레지스터내에 저장된 값들에 의해 바람직하게 제어된다. 이들 길이 및 스트라이드 값은, 모든 벡터 레지스터를 사용하는데 전체적으로 적용한다. 이로 인해 불리한 불가변성이 유도된다고 생각될지도 모르지만, 실제로 길이와 스트라이드 값들을 혼합하기 위한 요구는 드물고, 이 방법에 의해 주어진 능력보다 그 이상 중요하므로, 자체 수정 코드 필요없이 벡터 길이 및 스트라이드를 전체적으로 변경한다.
추가로, 그 벡터 제어 레지스터내에 저장된 길이 값은, 스칼라에 대응한 길이 값을 검출하여서 데이터 처리 명령어용 모든 레지스터들이 스칼라인지를 빠르게 표시하는데 사용할 수도 있고, 이 경우에서처럼 임의의 벡터 레지스터가 실제 스칼로서 연산될 것이다. 이와 같은 모든 스칼라 연산의 초기 표시는, 타이밍 한계를 극복할 명령어 디코드에 유용하다.
레지스터 지정 필드 값들을, 레지스터가 벡터 또는 스칼라인지를 표시하기 위해 상이한 방법으로 나눌 수 있다. 하지만, 그 레지스터 지정 필드 값들을 각각 다른 의미로 인코딩하는 범위로 나누기 위해 빠른 명령어 디코드를 제공할 수 있는데 유리하다.
실제로, 스칼라 레지스터가 종종 반복적으로 사용된 값들을 저장하는 동안, 많은 수의 다른 값을 저장하려는 그들의 성질에 의해 스칼라 레지스터들보다 더 많은 벡터 레지스터를 벡터 레지스터로서 제공하는데 바람직하다는 것을 알 수 있다. 특히, 인코딩된 것내의 벡터 레지스터와 스칼라 레지스터 사이에 3 대 1 비의 비율 은, 양호한 밸런스(balance)라는 것을 알 수 있다.
컴파일러용 목표를 형성할 수 있도록 규정된 레지스터들의 수와, 모든 레지스터들을 사용하는데 충분할 만큼 긴 레지스터 필드들을 고려하는데 필요한 요구된 명령어 비트 공간과의 사이에 밸런스가 깨진다는 것을 알 수 있을 것이다. 이는 32 레지스터를 제공하는데 좋은 절충안이 된다는 것을 알 수 있다.
본 발명의 바람직한 실시예는, 메모리와, 상기 레지스터 뱅크내의 레지스터들 사이의 데이터 값의 전송을 제어하기 위한 전송 제어기를 포함하되, 상기 전송 제어기는 상기 메모리와 상기 레지스터 뱅크내의 일련의 레지스터와의 사이에 일련의 데이터 값을 전송하기 위한 다중 전송 명령어에 응답한다.
다중 전송 명령어(즉, 하나의 명령어로 전송된 많은 워드들)를 지원하는 전송 제어기의 공급으로, 로딩되거나 로딩되지 않은 레지스터들이 벡터 레지스터인지에 상관없이 새로운 값으로 그 레지스터 뱅크가 효과적으로 리프레시 되게 한다.
본 발명은 여러 가지 서로 다른 형태의 데이터 처리장치에 사용되면서, 부동 소수점부내에 특히 유용하다는 것을 알 수 있다. 부동 소수점 코프로세서 형태와 같은 메인 스트림 데이터 처리 시스템에 추가로 구성된 그 부동 소수점부는, 종종 그들에 이용할 수 있는 명령어 비트 공간에서의 제약에 직면함과 동시에, 벡터 및 스칼라 레지스터가 지원되는 큰 레지스터 뱅크가 사용되어야 한다. 이러한 상황을 볼 때, 본 발명은 특히 유용하다.
일반적으로 요구된 주어진 오페코드용 벡터 및 스칼라 레지스터의 조합은, 예측 가능하다는 것을 알 수 있어 곱셈-누적 연산의 경우 본 발명에 매우 적합하 다.
일반적으로 필요한 벡터와 스칼라의 다른 조합과 본 발명의 벡터/스칼라 레지스터 인코딩 기술간의 일치는, 제 1 레지스터는 목적지(destination) 레지스터, 제 2 레지스터는 제 1 소오스(source) 레지스터 및 제 3 레지스터는 제 2 소오스 레지스터인 곳이 좋다는 것을 확인하였다.
단일 정밀도 값을 개별로 나타내거나 배정밀도 값을 쌍으로 나타내도록 데이터 슬롯들을 배치함으로써, 그 레지스터 자원들의 유연성을 더욱 향상시킬 수 있다.
디코드 속도는, 벡터 또는 스칼라용으로 사용되는 제 1 레지스터인 바로 그 지점에 그 주어진 레지스터내의 값을 사용하여서 향상시킬 수도 있으므로, 데이터 처리 명령어내에 규정된 값에 관한 임의의 조작을 수행하지 않고서 이 레지스터에 대한 액세스를 시작하게 한다.
본 발명의 다른 국면에 따른 데이터 처리 방법은,
각각이 벡터 또는 스칼라 레지스터로서 사용되도록 동작할 수 있는 복수의 레지스터를 갖는 레지스터 뱅크에 데이터 값들을 저장하는 단계와,
적어도 상기 실행을 위한 연산을 지정하는 연산 지정 코드와 상기 레지스터 뱅크내의 제 1 레지스터를 지정하는 제 1 레지스터 지정 필드를 갖는 데이터 처리 명령어 중 적어도 하나를 명령 디코더로 디코딩하는 단계를 포함하고,
상기 명령 디코더는 주어진 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 연산을 실행하되, 상기 주어진 레지스터가, 상기 주어진 레지스터에 오퍼랜드가 한번 저장된 상기 연산을 실행하는 것을 포함하는 스칼라 레지스터가 되면서 실행하고, 상기 주어진 레지스터가, 상기 주어진 레지스터용 레지스터 지정 필드에 따라 선택된 상기 레지스터 뱅크의 소정 시퀀스의 레지스터내에 오퍼랜드가 복수회 저장된 상기 연산을 실행하는 것을 포함하는 벡터 레지스터가 되면서 실행하고,
상기 명령 디코더는, 상기 제 1 레지스터 지정 필드에 응답하고, 상기 제 1 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행하는지를 판단하기 위한 상기 연산 지정 코드와 무관하다.
본 발명의 실시예들을 첨부 도면들을 참조하여 설명하겠다.
도 1은 데이터 처리 시스템의 개략도이고,
도 2는 스칼라 및 벡터 레지스터를 지원하는 부동 소수점부(FPU; Floating Point Unit)를 나타내고,
도 3은 단일 정밀도 연산의 경우에, 주어진 레지스터가 벡터 또는 스칼라 레지스터인지를 판단하는 방법을 나타낸 흐름도이고,
도 4는 배정밀도 연산의 경우에, 주어진 레지스터가 벡터 또는 스칼라인지를 판단하는 방법을 나타낸 흐름도이고,
도 5는 단일 정밀도 연산 동안에 각 부분 집합(subset)내의 랩핑(wrapping)으로 그 레지스터 뱅크를 부분 집합으로 나눈 것을 나타내고,
도 6은 배정밀도 연산 동안에 각 부분 집합내의 랩핑으로 그 레지스터 뱅크를 부분 집합으로 나눈 것을 나타내고,
도 7A 내지 도 7C는 코프로세서 명령어의 메인 프로세서 도면, 코프로세서 명령어의 단일 및 배정밀도 코프로세서 도면, 코프로세서 명령어의 단일 정밀도 코프로세서 도면을 각각 나타내고,
도 8은 단일 및 배정밀도 코프로세서를 제어하는 메인 프로세서를 나타내고,
도 9는 단일 정밀도 코프로세서를 제어하는 메인 프로세서를 나타내고,
도 10은 수신(accept) 신호가 수신된 코프로세서 명령에 대해 메인 프로세서로 복귀시켜야 하는지를 판단하는 단일 및 배정밀도 코프로세서내의 회로도,
도 11은 수신 신호가 수신된 코프로세서 명령에 대해 메인 프로세서로 복귀시켜야 하는지를 판단하는 단일 정밀도 코프로세서내의 회로도,
도 12는 메인 프로세서내의 핸들링 외의 정의되지 않은 명령어를 나타내고,
도 13은 본 발명의 바람직한 실시예에 따른 코프로세서의 소자를 나타낸 블럭도이고,
도 14는 본 발명의 바람직한 실시예에 따른 레지스터 제어의 동작과 명령어 발생 로직(logic)을 나타낸 흐름도이고,
도 15는 본 발명의 바람직한 실시예에 따른 부동 소수점 레지스터 내용의 예를 나타내고,
도 16은 크레이 1 프로세서내의 레지스터 뱅크를 나타내고,
도 17은 멀티티탄 프로세서내의 레지스터 뱅크를 나타낸다.
도 1은 메인 프로세서(24), 부동 소수점부 코프로세서(26), 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)을 구비한 데이터 처리 시스템(22)을 나타낸다. 여기서, 메인 프로세서(24), 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)은 메인 버스(34)를 통해 연결되어 있다. 코프로세서 버스(36)는 메인 프로세서(24)를 부동 소수점부 코프로세서(26)에 연결한다.
연산에 있어서, 메인 프로세서(24)(또한, ARM 코어로서 언급함)는, 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)과 상호작용을 포함하는 일반적인 형태의 데이터 처리 연산을 제어하도록 데이터 처리 명령어의 스트림을 실행한다. 이때의 데이터 처리 명령어의 스트림 내에 코프로세서 명령어가 삽입된다. 메인 프로세서(24)는, 이들 코프로세서 명령어를 부가 코프로세서에 의해 실행되는 형태로서 인지한다. 따라서, 이 메인 프로세서(24)는, 임의의 부가 코프로세서가 코프로세서 명령어를 수신한 곳으로부터 코프로세서 버스(36)에 관한 이들 코프로세서 명령어를 발생(issue)한다. 이 경우에, 부동 소수점부 코프로세서(26)는, 검출하려고 할 임의의 수신된 코프로세서 명령어를 수신하여 실행할 것이다. 이 검출은 코프로세서 명령어내의 코프로세서 번호 필드를 통하여 한다.
도 2는 그 부동 소수점부 코프로세서(26)를 더욱 상세하게 개략적으로 나타낸 것이다. 이 부동 소수점부 코프로세서(26)는, 32개의 32비트 레지스터(도 2에 적게 도시함)로 구성된 레지스터 뱅크(38)를 포함한다. 이들 레지스터는, 32 비트 데이터 값을 각각 저장하는 단일 정밀도 레지스터로서 개별적으로 또는 64비트 데이터 값을 함께 저장한 쌍으로서 연산할 수 있다. 부동 소수점부 코프로세서(26)내에 파이프라인식 곱셈 누적부(40)와 로드 저장 제어부(42)로 구성되어 있다. 적합 한 상황에서, 그 곱셈 누적부(40)와 로드 저장 제어부(42)는, 로드 저장 제어부(42)가 그 곱셈 누적부(40)에 의해 사용되지 않은 데이터 값들을 메인 프로세서(24)를 통해 부동 소수점부 코프로세서(26)에게/로부터 전송하는 동안, 레지스터 뱅크(38)내의 데이터 값들을 산술 연산(곱셈 누적 연산 뿐만 아니라 다른 연산들도 포함)을 수행하는 곱셈 누적부(40)와 동시에 연산할 수 있다.
수신된 코프로세서 명령어는, 부동 소수점부 코프로세서(26)내의 명령어 레지스터(44)내에 래치된다. 이렇게 단순한 면에서 코프로세서 명령어는, 3개의 레지스터 지정 필드 R1, R2 및 R3(사실, 이들 필드는, 쪼갤 수도 있고 전체 명령어 내에 다르게 흩어질 수도 있다)에 뒤따르는 오페코드부로 구성된 것이라고 생각할 수 있다. 이들 레지스터 지정 필드 R1, R2 및 R3은, 수행되는 데이터 처리 연산을 위한 목적지, 제 1 소오스 및 제 2 소오스의 역할을 하는 레지스터 뱅크(38)내의 레지스터들에 대응한다. 벡터 제어 레지스터(46)(추가 기능을 포함하는 보다 큰 레지스터의 일부일 수도 있음)는, 부동 소수점부 코프로세서(26)에 의해 수행될 수도 있는 벡터 연산용 길이 값과 스트라이드 값을 저장한다. 또한, 이 벡터 제어 레지스터(46)를 초기화하고 벡터 제어 레지스터 로드 명령어에 따라 길이 및 스트라이드 값으로 갱신할 수도 있다. 이 벡터 길이 및 스트라이드 값을 부동 소수점부 코프로세서(26)내에 전체적으로 적용함에 따라 이 값들이 자체 수정 코드에 의존하지 않고서 전체를 기반으로 동적으로 변경되게 한다.
레지스터 제어 및 명령어 발생부(48), 로드 저장 제어부(42) 및 벡터 제어부(50)를 함께 고려하여 명령 디코더 역할의 주요 부분을 수행할 수 있다. 이 레지스터 제어 및 명령어 발생부(48)는, 오페코드와 3개의 레지스터 지정 필드 R1, R2 및 R3에 응답하고, 그 오페코드에 관한 임의의 디코드를 수행하지 않거나 그 벡터 제어부(50)를 사용하지 않고서 먼저 초기 레지스터 액세스(어드레스) 신호들을 레지스터 뱅크(38)에 출력한다. 이러한 방법으로 초기 레지스터 값들에 직접 액세스하므로 보다 빠른 실행을 달성하는데 도움이 된다. 벡터 레지스터가 지정될 경우, 벡터 제어부(50)는 3비트 증분기(가산기)(52)를 사용하여 필요한 레지스터 액세스 신호의 시퀀스를 발생한다. 이 벡터 제어부(50)는, 레지스터 뱅크(38)의 어드레싱을 수행할 때에 그 벡터 제어 레지스터(46)내에 저장된 길이 값과 스트라이드 값에 응답한다. 레지스터 스코어 보드(54)는, 그 파이프라인식 곱셈 누적부(40)와 동시에 동작하는 로드 저장 제어부(42)가 어떤 데이터 일관성 문제도 발생하지 않도록 레지스터 록킹을 수행하도록 구성되어 있다(이 레지스터 스코어 보드(54)를 레지스터 제어 및 명령어 발생부(48)의 일부로 바꾸어 생각할 수도 있다).
명령어 레지스터(44)내의 오페코드는, 수행하려는 데이터 처리연산의 성질(예를 들면, 명령어가 가산, 감산, 곱셈, 나눗셈, 로드, 저장...등인지를)을 지정한다. 이는 지정되는 레지스터의 벡터 또는 스칼라 성질과 무관하다. 또한, 이는 곱셈 누적부(40)의 명령어 디코딩 및 셋업(set-up)을 단순화시킨다. 제 1 레지스터 지정 값 R1과 제 2 레지스터 지정 값 R2는, 오페코드에 의해 지정된 연산의 벡터/스칼라 성질을 함께 인코딩한다. 일반적으로, 그 인코딩에 의해 지원된 3가지 경우는, S=S*S(예를 들면, C 코드 블럭으로부터 C 컴파일러에 의해 발생된 것과 같은 기본적인 임의 수학적 계산), V= V op S(예를 들면, 벡터 성분의 크기) 및 V= V op V(예를 들면, FIR 필터와 그래픽 변형과 같은 매트릭스 연산)가 있다(이러한 경우에, "op"는 일반적인 연산을 나타내고, 구문법(syntax)은 목적지=제 2 오퍼랜드 op 제 1 오퍼랜드의 형태가 된다). 또한, 일부 명령어(예를 들면, 비교, 제로 또는 절대값과 비교)는 목적지 레지스터(예를 들면, 출력이 조건 플래그임)가 없을 수도 있거나 보다 소수의 입력 오퍼랜드(제로와의 비교는 하나의 입력 오퍼랜드만 가짐)를 가질 수도 있다. 이러한 경우에, 벡터/스칼라 성질과 같은 옵션을 지정하는데 이용할 수 있는 더 많은 오페코드 비트 공간이 있어서, 레지스터의 전 범위를 각 오퍼랜드(예를 들면, 비교는, 항상 레지스터가 무엇이든지 완전히 스칼라일 수도 있음)에 이용할 수 있다.
명령 디코더의 주요 부분의 역할을 함께 수행하는 레지스터 제어 및 명령어 발생부(48) 및 벡터 제어부(50)는, 지정된 데이터 처리 연산의 벡터/스칼라 성질을 판단하여 제어하기 위한 제 1 레지스터 지정 필드 R1 및 제 2 레지스터 지정 필드 R2에 응답한다. 벡터 제어 레지스터(46)내에 저장된 길이 값이 1의 길이(제로의 저장 값에 해당함)를 나타내는 경우, 이는 스칼라 연산만의 초기 표시로서 사용할 수 있다는 것을 주목해야 할 것이다.
도 3은 단일 정밀도 모드에서 레지스터 지정 값으로부터 벡터/스칼라 성질을 디코딩하는데 사용된 처리 로직을 나타낸 흐름도이다. 단계 56에서는, 벡터 길이가 전체적으로 1(길이 값 제로와 같음)로 세트되었는지에 관하여 검사한다. 그 벡터 길이가 1일 경우, 모든 레지스터를 단계 58에서는 스칼라로서 취급한다. 단계 60에서는, 목적지 레지스터 R1이 SO 내지 S7의 범위 내에 있는지에 관하여 검사한다. 이것이 그 범위 내에 있을 경우, 그 연산은, 단계 62에서 나타낸 것처럼, 모두 스칼라이고 S= S op S의 형태이다. 단계 60에서 그 범위 내에 있지 않을 경우, 목적지를 단계 64에 나타낸 것처럼 벡터로 판단한다. 이 목적지가 벡터일 경우, 그 인코딩은 제 2 오퍼랜드를 역시 벡터로서 취급한다. 따라서, 이 단계에서 존재하는 2가지 가능성은 V= V op S와 V= V op V가 있다. 제 1 오퍼랜드가 S0 내지 S7 중 하나인지를 판단하는 단계 66의 검사에 의해 옵션을 판단한다. 제 1 오퍼랜드가 SO 내지 S7중 하나일 경우, 연산은 V= V op S이고, 그렇지 않을 경우 연산은 V= V op V이다. 이 상태를 단계 68 및 70에서 각각 인식한다.
벡터 길이가 1로 세트되었을 경우, 레지스터 뱅크(38)의 모든 32개의 레지스터는, 연산의 스칼라 성질이 목적지용으로 사용될 수도 있는 레지스터의 범위를 제한하는 단계 60의 검사에 의존하지 않고 단계 58에서 인지될 것이기 때문에 스칼라로서 사용하는데 유용하다는 것을 주목해야 한다. 단계 60의 검사는, 혼합된 벡터 및 스칼라 명령어가 사용되고 있을 경우 모든 스칼라 연산을 인식하는데 유용하다. 또한, 혼합된 벡터 및 스칼라 모드에서 연산할 때, 만약 제 1 오퍼랜드가 스칼라일 경우, 그것은 SO 내지 S7중 임의의 것일 수도 있는 반면에, 제 1 오퍼랜드가 벡터일 경우, 그것은 S8 내지 S31 중 임의의 것일 수도 있다. 그 제 1 오퍼랜드가 벡터일 경우 레지스터 뱅크 내에 이용 가능한 레지스터의 수가 3배라면, 벡터 연산을 사용할 때 데이터 값의 시퀀스를 가지는데 필요한, 일반적으로 보다 큰 레지스터 수를 채택한다.
수행하기를 바라는 공통연산은 그래픽 변형이라는 것을 알 수 있을 것이다. 일반적인 경우에, 수행될 변형은 4*4 매트릭스로 나타낼 수도 있다. 이 오퍼랜드는, 이러한 계산수단에 재사용하여 벡터로서 조작될 수 있는 레지스터에 매트릭스 값이 저장되도록 하는 것이 바람직하다. 이와 같은 방법으로, 입력 픽셀(pixel) 값은, 재사용하는데 도움이 되는 벡터로서 조작될 수 있도록 4개의 레지스터에 보통 저장된다. 매트릭스 연산의 출력은, 보통은 4개의 레지스터에 저장된 스칼라(별도의 벡터 행 곱을 누적함)이다. 입출력 값을 이중으로 출력하기를 바라는 경우, 24개(16+4+4)의 벡터 레지스터와 8개(4+4)의 스칼라 레지스터에 대한 필요 조건에 만족할 것이다.
도 4는 도 3에 대응한 흐름도이지만, 이 경우에서는 배정밀도 모드를 나타낸 것이다. 상술한 것처럼, 배정밀도 모드에서, 레지스터 뱅크(38)내의 레지스터 슬롯은 논리 레지스터 D0 내지 D15에 있는 16개의 64-비트 데이터 값을 저장하기 위해 쌍으로 동작한다. 이와 같은 경우에, 레지스터의 벡터/스칼라 성질의 인코딩은, 단계 60과 66의 검사가 각각 단계 72와 74에서의 "목적지가 D0 내지 D3 중의 하나인가?"와 "제 1 오퍼랜드가 D0 내지 D3중의 하나인가?"가 된다는 점에서 도 3의 것을 변경한 것이다.
상술한 것처럼, 레지스터 지정 필드 내에 레지스터의 벡터/스칼라 성질을 인코딩하는 것은, 명령어 비트 공간의 상당한 감소를 제공하지만, 뺄셈 및 나눗셈과 같은 비교환적인 연산에 대해 약간의 어려움이 따른다. 레지스터 구성이 V= V op S 인 경우, 비교환적인 연산을 위한 제 1 및 제 2 오퍼랜드 사이의 대칭성의 결여는, 비교환적인 연산용 2개의 다른 오퍼랜드 옵션을 나타내는 SUB, RSUB 및 DIV, RDIV 와 같은 오페코드의 쌍을 포함하도록 명령어 세트를 연장함으로써, 레지스터 값들을 스와핑(swapping)하는 추가 명령어 없이 해결할 수 있다.
도 5는 레지스터 뱅크(38)의 부분 집합내의 벡터 랩핑을 나타낸 것이다. 특히, 단일 정밀도 모드에서는, 레지스터 뱅크를, 어드레스 SO 내지 S7, S8 내지 S15, S16 내지 S23 및 S24 내지 S31인 4개의 레지스터 범위로 쪼갠다. 이 범위는, 토막 토막으로 만들어져서 인접한다. 도 2를 참조하여, 8개의 레지스터를 포함하는 이들 부분 집합에 대한 랩핑 기능은, 벡터 제어부(50)내의 3비트 증분기(가산기)(52)를 이용하여서 제공될 수도 있다. 이러한 방법에서, 부분 집합 경계가 교차할 경우, 그 증분기는 다시 랩(wrap)할 것이다. 이 간단한 구현은 레지스터 어드레스 공간내의 8개의 워드 경계에 관한 부분 집합의 정렬에 의해 용이하게 된다.
도 5를 참조하여, 레지스터의 랩핑을 이해하는데 도움이 되는 많은 벡터 연산을 설명한다. 제 1 벡터 연산은, 시작 레지스터(Start Register) S2, 벡터 길이 4(벡터 제어 레지스터(46)내의 길이 값을 3으로 나타냄) 및 스트라이드 1(벡터 제어 레지스터(46)내의 스트라이드 값을 0으로 나타냄)을 지정한다. 따라서, 명령어가, 이들 전체 벡터 제어 파라메터 세트를 가진 벡터로서 레지스터 S2를 참조하여 디코딩되기 위해 실행될 경우, 그 명령어는 레지스터 S2, S3, S4 및 S5내의 데이터 값을 사용하여 각각 4번 실행될 것이다. 이러한 벡터가 부분 집합 경계와 교차하지 않으므로, 벡터 랩핑은 없다.
두 번째 예에서, 시작 레지스터는 S14, 길이는 6 및 스트라이드는 1이다. 이 에 따라, 그 명령어를 레지스터 S14부터 시작하여 6번 실행하게 될 것이다. 다음 레지스터는 S15를 사용한다. 이 레지스터는 다시 스트라이드만큼 증가하여, 그 레지스터 대신에 S16을 사용할 경우, 그 레지스터는 레지스터 S8이 되게 랩핑할 것이다. 그래서 이 명령어는, 3번 더 실행되어 전체 시퀀스 S14, S15, S8, S9, S10 및 S11을 완료한다.
도 5의 마지막 예는, 시작 레지스터 S25, 길이 8 및 스트라이드 2를 나타낸다. 이때의 첫 번째 레지스터는 S25를 사용하고, 이것은 스트라이드 값 2에 따라서 S27, S29 및 S31을 수반한다. 그 레지스터 S31의 사용에 따라, 다음 레지스터 값은 그 부분 집합의 시작으로 되돌아가서 랩핑하고, 스트라이드 2를 고려하여 레지스터 S24로 넘어가서, 레지스터 S25를 사용하여 연산을 실행한다. 증분기(52)는, 벡터 레지스터간에 이동할 때의 현재 값에 스트라이드를 가산하는 3비트 가산기의 형태일 수 있다. 따라서, 그 스트라이드는, 다른 스트라이드 값을 그 가산기에 공급함으로써 조정될 수 있다.
도 6은 배정밀도 모드내의 레지스터 뱅크(38)의 랩핑을 나타낸 것이다. 이 모드에서, 레지스터의 부분 집합은, D0 내지 D3, D4 내지 D7, D8 내지 D11 및 D12 내지 D15를 포함한다. 배정밀도 모드에서 증분기의 역할을 하는 가산기로 입력된 최소값은, 배정밀도 스트라이드 1에 해당하는 2이다. 배정밀도 스트라이드 2는, 그 가산기에 4의 입력을 필요로 한다. 도 6에 나타낸 첫 번째 예는, 시작 레지스터 D0, 길이 4 및 스트라이드 1이다. 이에 따라 벡터 레지스터 시퀀스는 DO, D1, D2 및 D3이 된다. 부분 집합 경계들이 교차되지 않으므로, 이 예에서 랩핑은 없다. 두 번째 예에서는, 시작 레지스터가 D15, 길이가 2 및 스트라이드가 2이다. 이에 따라 벡터 레지스터 시퀀스는 D15와 D13이 된다.
도 2를 참조하여, 상기 로드 저장 제어부(42)는 출력에 5-비트 증분기를 구비하고, 로드/저장 다중 연산은 벡터 연산에 인가된 레지스터 랩핑에 영향을 받지 않는다는 것을 알아야 할 것이다. 이는 단일 로드/저장 다중 명령어가 필요로 하는 것과 같은 수의 연속적인 레지스터를 액세스(access) 가능하게 한다.
이 랩핑 구성을 잘 이용한 연산의 예는, 4개의 신호값 및 4개의 탭 단위로 분할된 FIR 필터가 있다. 구문법 R8-R11 op R16-R19가 벡터 연산 R8 op R16, R9 op R17, R10 op R18 및 R11 op R19를 나타내는 경우, FIR 필터 연산은 다음과 같이 수행한다.
8개의 탭을 R8-R15에 그리고 8개의 신호 값을 R16-R23에 로드
R8-R11 op R16-R19 하고 그 결과를 R24-R27에 넣음
R9-R12 op R16-R19 하고 그 결과를 R24-R27에 누적
R10-R13 op R16-R19 하고 그 결과를 R24-R27에 누적
R11-R14 op R16-R19 하고 그 결과를 R24-R27에 누적
R8-R11에 새로운 탭을 재로드
R12-R15 op R16-R19 하고 그 결과를 R24-R27에 누적
R13-R8 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)
R14-R9 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)
R15-R10 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)
R12 내지 R15에 새로운 탭을 재로드
탭이 없을 경우, R16-R19에 새로운 데이터를 재로드
R12-R15 op R20-R23 하고 결과를 R28-R31에 넣음
R13-R8 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)
R14-R9 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)
R14-R10 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)
나머지는 상기와 같음.
상기 내용으로부터 로드는, 다중 누적과는 다른 레지스터가 되어, 병렬로 발생할 수 있다(즉, 이중 버퍼링을 달성함)는 것을 주목해야 한다.
도 7a는 메인 프로세서(24)가 코프로세서 명령어를 도시하는 방법을 개략적으로 나타낸 것이다. 이 메인 프로세서는, 그 명령어 내에 (분할될 수 있는) 필드(76)의 비트 조합을 사용하여 그 명령어를 코프로세서 명령어로서 식별한다. 표준 ARM 프로세서 명령어 세트내의 코프로세서 명령어는, 그 메인 프로세서에 첨가된 코프로세서(들)가 특정 코프로세서 명령어를 목표로 하고 있는지를 식별하는데 사용하도록 코프로세서 번호 필드(78)를 포함한다. DSP 코프로세서(예를 들면, ARM에 의해 제조된 Piccolo 코프로세서) 또는 부동 소수점부 코프로세서와 같은 다른 형태의 코프로세서는, 다른 코프로세서 번호들을 할당하여서, 동일한 코프로세서 버스(36)를 사용하여 단일 시스템 내에 별도로 어드레싱을 할 수 있다. 또한, 코프로세서 명령어는, 코프로세서에 의해 사용된 오페코드와, 코프로세서 레지스터에서의 목적지, 제 1 오퍼랜드 및 제 2 오퍼랜드를 각각 지정하는 3개의 5-비트 필 드를 포함한다. 코프로세서 로드 또는 저장과 같은 일부 명령어에서, 메인 프로세서는 코프로세서 명령어를 적어도 부분적으로 디코딩하여서, 그 코프로세서와 메인 프로세서가 바라는 데이터 처리 연산을 동시에 완료할 수 있다. 또한, 이 메인 프로세서는, 이러한 상황에서 수행하는 명령어 디코드의 부분으로서 코프로세서 번호 내의 인코딩된 데이터 형태에 응답할 수 있다.
도 7b는 배수 및 단일 정밀도 연산을 지원하는 코프로세서가 수신한 코프로세서 명령어를 해석하는 방법을 나타낸 것이다. 이러한 코프로세서는, 2개의 인접한 코프로세서 번호가 할당되고, 코프로세서 번호의 최상위 3비트를 사용하여 그것이 타겟 코프로세서인지를 식별한다. 이러한 방법으로, 코프로세서 번호의 최하위 비트는, 타겟 코프로세서를 식별하기 위한 여분이고, 대신 코프로세서 명령어를 실행할 때 사용된 데이터 형태를 지정하는데 사용될 수 있다. 이러한 예에서, 데이터 형태는, 단일 또는 배정밀도가 되는 데이터 크기에 대응한다.
배정밀도 모드에서 레지스터 수는, 32에서 16으로 효과적으로 감소된다는 것을 알 수 있다. 따라서, 레지스터 필드 크기를 감소시키는 것이 가능하지만, 이러한 경우에 사용할 레지스터의 디코드는, 코프로세서 명령어내의 알려진 위치에 있는 자체 포함된 필드로부터 직접 이용할 수 없고, 코프로세서 명령어의 다른 부분의 디코딩에 의존한다. 이는 복잡하여 나쁘고 코프로세서 연산을 늦게 할 수 있다. 데이터 형태를 인코딩하기 위해 코프로세서 번호의 최하위 비트를 사용한다는 것은, 오페코드가 그 디코드를 단순화시키고 급속하게 진행하는 데이터 형태와 완전히 무관하다는 것을 의미한다.
도 7c는 도 7b의 코프로세서에 의해 지원되는 데이터 형태의 부분 집합인 단일 데이터 형태만을 지원하는 코프로세서가 그 코프로세서 명령어를 해석하는 방법을 나타낸 것이다. 이 경우에, 전체 코프로세서 번호는, 그 명령어를 수신하는지 않하는지를 판단하는데 사용한다. 이러한 방법에서, 코프로세서 명령어가 지원되지 않는 데이터 형태인 경우, 그것은 다른 코프로세서 번호에 대응하고 수신되지 않을 것이다. 그래서, 메인 프로세서(24)는, 지원되지 않는 데이터 형태의 연산을 핸들링(handling)하여 에뮬레이트 하는 미정의된 명령어 예외에 의지할 수 있다.
도 8은 메인 프로세서 역할을 하고 코프로세서 버스(82)를 통해 단일 및 배정밀도 데이터 형태를 지원하는 코프로세서(84)와 통신하는 ARM 코어(80)를 포함한 데이터 처리 시스템을 나타낸다. 코프로세서 번호를 포함하는 코프로세서 명령어는, 명령어 스트림의 범위내에서 충돌될 경우 코프로세서 버스(82)상의 ARM 코어(80)로부터 발생된다. 그래서, 코프로세서(84)는, 그 자신의 코프로세서 번호와 비교하여, 일치가 일어나면 ARM 코어(80)로 되돌아온 수신(accept) 신호를 발생한다. 그 수신 신호를 수신하지 않은 경우, 그 ARM 코어는 미정의된 명령어 예외(Undefined Instruction Exception)를 인지하여, 그 메모리 시스템(86)에 저장된 예외 핸들링 코드(exception handling code)를 참조한다.
도 9는 코프로세서(84)를, 단일 정밀도 연산만을 지원하는 코프로세서(88)로 바꾸어서 수정된 도 8의 시스템을 나타낸다. 이 경우에, 코프로세서(88)는 단일 코프로세서 번호만을 인지한다. 따라서, 도 8의 코프로세서(84)에 의해 실행되는 원시 명령어 스트림내의 배정밀도 코프로세서 명령어는 단일 정밀도 코프로세서(88) 에 의해 수신되지 않는다. 따라서, 동일한 코드를 실행하기를 원하는 경우, 메모리 시스템(86)내의 미정의된 예외 핸들링 코드는 배정밀도 에뮬레이션 루틴을 포함할 수 있다.
배정밀도 명령어를 에뮬레이트하기 위한 요구는 이들 명령어를 천천히 실행하게 하지만, 단일 정밀도 코프로세서(88)는, 그 배정밀도 코프로세서(84)보다 더 작고 더 값쌀 수 있고, 이중 위치 명령어가 매우 드물 경우에 얻은 전송 이득(net benefit)일 수 있다는 것을 알아야 할 것이다.
도 10은 단일 및 배정밀도 명령어를 지원하고, 2개의 인접한 코프로세서 번호를 갖는 코프로세서(84)내의 명령어 래치 회로를 나타낸다. 이러한 경우에, 코프로세서 명령어내의 코프로세서 번호의 최상위 3비트 CP#[3:1]은, 그 코프로세서(84)에 할당된 것들과 비교된다. 이 예에서, 코프로세서(84)가 코프로세서 번호 10과 11을 가진 경우, 2진수 101에 대한 코프로세서 번호 CP#[3:1]의 최상위 비트를 일치시킴으로써 비교를 할 수 있다. 일치할 경우, 수신 신호는 ARM 코어(80)로 되돌아가고, 코프로세서 명령어는 실행을 위해 래치된다.
도 11은 도 9의 단일 정밀도 코프로세서(88)내의 등가 회로를 나타낸다. 이러한 경우에, 단일 코프로세서 번호만이 인지되어 디폴트(Default)에 의해 사용된 단일 정밀도 연산을 한다. 코프로세서 명령어를 수신하여 래치하는지를 판단하는 비교는, 코프로세서 번호의 전체 4비트 CP#[3:0]와 단일 임베디드(embedded) 코프로세서 번호인 2진수 1010 사이에서 수행한다.
도 12는 도 9의 실시예의 미정의된 예외 핸들링 루틴이 배정밀도 에뮬레이션 코드를 수행하기 위해 트리거(trigger) 되는 방법을 나타낸 흐름도이다. 미정의된 명령어 예외를 발생했던 명령어가 코프로세서 번호인 2진수 1011을 갖는 코프로세서 명령어인지를 검사한다(단계 90). 이 검사 결과, 예(Y)일 경우, 이는 배정밀도(Double precision) 명령어이어서 메인 프로그램 플로우로 복귀하기 전에 단계 92에서 에뮬레이트 할 수 있다. 다른 예외 형태는, 단계 90의 검사에 의해 예가 아닐 경우 그 이상의 단계들에 의해 검사되어 핸들링될 수도 있다.
도 13은 32비트 레지스터마다 저장된 데이터 형태를 식별하는 정보를 저장하기 위한 포맷 레지스터 FPREG(200), 또는 레지스터 뱅크(220)의 데이터 슬롯의 사용을 나타낸다. 상술한 것처럼, 각각의 데이터 슬롯은 32-비트 데이터 값(데이터 워드)을 저장하기 위한 단일 정밀도 레지스터로서 개별적으로 동작할 수 있거나, 64-비트 데이터 값(2개의 데이터 워드)을 저장하기 위한 배정밀도 레지스터로 제공하는 또 다른 데이터 슬롯과 쌍으로 될 수 있다. 본 발명의 바람직한 실시예에 따라, FPREG 레지스터(200)는, 임의의 특정 데이터 슬롯이 이에 저장된 단일 정밀도 또는 배정밀도 데이터를 가지고 있는지를 식별하도록 구성되어 있다.
도 13에 나타낸 것처럼, 레지스터 뱅크(220)에 있는 32개의 데이터 슬롯이 16쌍의 데이터 슬롯을 제공하도록 구성된다. 제 1 데이터 슬롯이 이에 저장된 단일 정밀도 데이터 값을 가질 경우, 바람직한 실시예에서 그 쌍에 있는 다른 데이터 슬롯은, 단일 정밀도 데이터 값만을 저장하는 구성으로 되고, 배정밀도 데이터 값을 저장하기 위해서 임의의 다른 데이터 슬롯과 연결(link)되지 않을 것이다. 이는, 데이터 슬롯의 임의의 특정 쌍이 2개의 단일 정밀도 데이터 값, 또는 1개의 배정밀 도 데이터 값을 저장하도록 구성된 것이 확실하다. 이 정보는, 레지스터 뱅크(220)의 데이터 슬롯들로 구성된 각각의 쌍과 관련된 단일 비트의 정보에 의해서 식별될 수 있음에 따라, 바람직한 실시예에서 그 FPREG 레지스터(200)는 레지스터 뱅크(220)의 데이터 슬롯들로 구성된 각각의 쌍에 저장된 데이터 형태를 식별하기 위한 16비트 정보를 저장하도록 구성된다. 이에 따라, FPREG 레지스터(200)는, FPU 코프로세서(26)내의 다른 레지스터와의 일관성을 위해 16-비트 레지스터로서 예를 들거나, 16개의 여유 비트 정보를 갖는 32-비트 레지스터로서 예를 들 수 있다.
도 15는 레지스터 뱅크(220)내에 있는 6개의 데이터 슬롯 쌍을 나타내고, 이는 바람직한 실시예에 따라 6개의 배정밀도 데이터 값 또는 12개의 단일 정밀도 데이터 값을 저장하는데 사용할 수 있다. 이들 데이터 슬롯내에 저장될 수 있는 데이터의 예를, 배정밀도 데이터 값의 32개의 최상위 비트를 나타낸 DH, 배정밀도 데이터 값의 32개의 최하위 비트를 나타낸 DL 및 단일 정밀도 데이터 값을 나타낸 S로 도 15에 도시하였다.
또한, 본 발명의 바람직한 실시예에 따른 FPREG 레지스터(200)내의 대응 엔트리(Entry)를 도 15에 도시하였다. 이 바람직한 실시예에 따라, "1"값은, 그 데이터 슬롯의 관련 쌍들이 배정밀도 데이터 값을 포함하는 것을 나타내기 위해 FPREG 레지스터(200)에 저장되고, "0"값은, 대응 데이터 슬롯 쌍 중의 적어도 하나가 단일 정밀도 데이터 값을 포함한 것 또는 양 데이터 슬롯들이 초기화되지 않은 것을 나타내는데 사용한다. 이에 따라, 양 데이터 슬롯들이 초기화되지 않을 경우, 그 데이터 슬롯중의 하나가 초기화되지 않고 그 쌍에 있는 다른 데이터 슬롯이 단일 정밀도 데이터 값을 포함할 경우, 또는 그 쌍에 있는 양 데이터 슬롯들이 단일 정밀도 데이터 값을 포함할 경우, 논리적인 "0" 값이 그 FPREG 레지스터(200)의 대응 비트에 저장된다.
상술한 것처럼, 바람직한 실시예인 FPU 코프로세서(26)는 단일 정밀도 또는 배정밀도 데이터 값을 처리하는데 사용할 수도 있고, 메인 프로세서(24)에 의해 발생된 코프로세서 명령어는 임의의 특정 명령어가 단일 정밀도 또는 배정밀도 명령어인지를 식별한다(도 7b 및 관련 설명 참조). 하나의 명령어가 코프로세서에 의해 수신되는 경우, 디코딩 및 실행을 위해 레지스터 제어 및 명령어 발생부(48)로 전달된다. 이 명령어가 로드 명령어일 경우, 레지스터 제어 및 명령어 발생 로직(48)은, 로드 저장 제어부(42)에 명령하여 메모리로부터 그 식별 데이터를 검색하고, 그 데이터를 레지스터 뱅크(220)의 지정된 데이터 슬롯에 저장한다. 이 때에, 코프로세서는 단일 정밀도 또는 배정밀도 데이터 값이 검색되고 있는지를 알고 있고, 그에 따라서 로드 저장 제어부(42)는 동작한다. 따라서, 로드 저장 제어 로직(42)은, 32-비트 단일 정밀도 데이터 값 또는 64-비트 배정밀도 데이터 값을 경로(225)를 통해 레지스터 뱅크(220)내에 저장하기 위한 레지스터 뱅크 입력 로직(230)에 전달한다.
로드 저장 제어부(42)에 의해서 레지스터 뱅크(220)로 로딩되는 데이터에 추가하여, 데이터는, 데이터를 수신하는 데이터 슬롯 쌍마다 단일 정밀도 또는 배정밀도 데이터를 저장하고 있는지를 식별하기 위해 필요한 비트들의 정보가 추가 가능하도록 포맷 레지스터 FPREG(200)에 제공된다. 바람직한 실시예에서는, 이 데이 터를 그 포맷 레지스터 FPREG(200)에 저장한 후, 레지스터 뱅크로 데이터를 로딩하여서, 이 정보를 레지스터 뱅크 입력 로직(230)에 이용가능하다.
바람직한 실시예에서, 레지스터 뱅크(220)에 있는 데이터의 내부 포맷은 외부 포맷과 동일함에 따라, 단일 정밀도 데이터 값은 32-비트 데이터 값으로서 저장되고, 배정밀도 데이터 값은 레지스터 뱅크(220)내의 64-비트 데이터 값으로서 저장된다. 레지스터 뱅크 입력 로직(230)은 FPREG 포맷 레지스터(200)에 액세스하므로, 수신되고 있는 데이터가 단일 또는 배정밀도인지를 알고서, 이러한 실시예에서, 레지스터 뱅크 입력 로직(230)은, 경로(225)상으로 수신된 데이터를 레지스터 뱅크(220)의 적합한 데이터 슬롯(들)에 저장하는 구성으로만 되어 있다. 그러나, 다른 실시예에서, 레지스터 뱅크내의 내부 표현 방식이 외부 포맷과 다른 경우, 레지스터 뱅크 입력 로직(230)은 필요한 변환을 수행하도록 구성된다. 예를 들면, 번호는, 전형적으로 지수 제곱된 기본 값에 곱해진 1.abc...로서 나타내고 있다. 효율을 위해, 전형적인 단일 및 배정밀도 표현 방식은, 10진 소수점의 왼쪽에 1을 나타내기 위한 데이터 비트를 사용하지 않고, 오히려 1의 뜻을 함축한 것으로서 취급한다. 1에 필요한 레지스터 뱅크(220)내의 사용된 내부 표현방식을 명백하게 나타낼 경우, 레지스터 뱅크 입력 로직(230)은 필요한 데이터 변환을 수행한다. 이러한 실시예에서, 데이터 슬롯은 전형적으로 레지스터 뱅크 입력 로직(230)에 의해서 발생된 추가 데이터를 수용하기 위해서 32-비트보다 약간 다소 크다.
추가로, 데이터 값을 레지스터 뱅크(220)에 로딩하여, 로드 저장 제어부(42)는, 데이터를 코프로세서(26)의 하나 이상의 시스템 레지스터, 예를 들면 사용자 상태 및 제어 레지스터 FPSCR(210)에 로딩할 수 있다. 바람직한 실시예에서, 이 FPSCR 레지스터(210)는, 사용자 액세스 가능 구성 비트와 예외 상태 비트를 포함하고, 그 바람직한 실시예 설명의 끝부분에 제공된 부동 소수점부의 구조 설명에서 더욱 상세히 설명된다.
레지스터 제어 및 명령어 발생부(48)가 메모리에 저장된 내용들을 갖는 레지스터 뱅크(220)에 있는 특정 데이터 슬롯들을 식별하는 저장 명령어를 수신하는 경우, 그에 따라 로드 저장 제어부(42)는 명령을 받고, 그 필요한 데이터 워드들은 레지스터 뱅크 출력 로직(240)을 통해 레지스터 뱅크(220)에서 로드 저장 제어부(42)로 판독된다. 레지스터 뱅크 출력 로직(240)은, 판독되는 데이터가 단일 또는 배정밀도 데이터인지를 판단하기 위해서 FPREG 레지스터(200) 내용에 액세스한다. 그래서, 적합한 데이터 변환을 적용하여 레지스터 뱅크 입력 로직(230)에 의해서 적용된 임의의 데이터 변환으로 전환하고, 그 데이터를 경로(235)를 거쳐 로드 저장 제어 로직(42)에 제공한다.
본 발명의 바림직한 실시예에 따라, 이 저장 명령어가 배정밀도 명령어일 경우, 코프로세서(26)는 명령어가 배정밀도 데이터 값에 적용된 연산의 두 번째 모드에서 연산되는 것으로 생각할 수 있다. 배정밀도 데이터 값은 짝수 데이터 워드를 포함하므로, 연산의 두 번째 모드에서 발생된 임의의 저장 명령어는 전형적으로 메모리에 저장된 내용을 갖는 짝수의 데이터 슬롯을 식별한다. 그렇지만, 본 발명의 바람직한 실시예에 따라, 홀수 데이터 슬롯이 지정된 경우, 로드 저장 제어부(42)는 FPREG 레지스터(200)의 내용을 읽어서 레지스터 뱅크(220)로부터 그 식별된 짝 수 데이터 슬롯을 저장하기에 앞서 그 내용들을 먼저 메모리에 저장하도록 구성된다. 일반적으로, 전송된 데이터 슬롯은, 저장되어야 할 그 식별된 데이터 슬롯으로부터 카운팅한 데이터 슬롯 수(즉, 데이터 워드의 수)를 나타내는 수를 수반한, 레지스터 뱅크에 있는 특정 데이터 슬롯을 식별하는 기본 어드레스에 의해 식별된다.
이에 따라, 예로서, 그 저장 명령어가 레지스터 뱅크(220)에 있는 첫 번째 데이터 슬롯을 기본 어드레스로서 주고 33개의 데이터 슬롯을 지정할 경우, 이는 모든 32개의 데이터 슬롯의 내용을 메모리에 저장하게 하지만, 그 지정된 데이터 슬롯의 수는 홀수이므로, FPREG 레지스터(200)의 내용을 메모리에 저장시킨다.
이러한 방법에 의해, 단일 명령어를 사용하여 메모리에 있는 레지스터 뱅크의 내용과 레지스터 뱅크(220)의 여러 가지 데이터 슬롯 내에 저장된 데이터 형태를 식별하는 FPREG 레지스터(200)의 내용을 저장할 수 있다. 이는 그 FPREG 레지스터(200)의 내용을 확실히 저장하기 위해 별도의 명령어가 발생되는 것을 피하게 하고, 그에 따라 메모리로의 저장 또는 메모리 처리로부터 로드 동안의 처리 속도에 악영향을 미치지 않게 한다.
본 발명의 다른 실시예에서, 이 기술은, 필요하다면 단일 명령어를 사용하여, FPSCR 레지스터(210)와 같은 추가 시스템 레지스터가 메모리에 저장 가능하게 하는 한 단계 이상일 수 있다. 따라서, 상술한 것처럼, 32개의 데이터 슬롯을 가진 레지스터 뱅크(220)의 예를 고려하여, 33개의 데이터 슬롯이 저장 명령어에서 식별될 경우, FPREG 레지스터(200)는, 레지스터 뱅크(220)에 있는 32개의 데이터 슬롯의 내용에 추가하여 메모리에 저장될 것이다. 그러나, 레지스터 뱅크에 있는 데이 터 슬롯의 수를 초과한 상이한 홀수가, 예를 들면 35로 식별될 경우, 이는, FPREG 레지스터(200)의 내용과 레지스터 뱅크(220)의 데이터 슬롯에 추가하여 메모리에 FPSCR 레지스터(210)의 내용을 저장하는데 필요한 사항으로서 그 로드 저장 제어부(42)에 의해 해석될 수 있다. 또한, 코프로세서는, 그 이상의 시스템 레지스터, 예를 들면 코프로세서에 의해 명령어들을 처리하는 동안에 일어난 예외를 식별하는 예외 레지스터를 포함할 수도 있다. 상이한 홀수가 저장 명령어, 예를 들면 37로 식별될 경우, 이는 FPSCR 레지스터(210), FPFEG 레지스터(200) 및 레지스터 뱅크(200)의 내용에 추가하여 하나 이상의 예외 레지스터의 내용을 추가로 저장하는데 필요한 사항으로서 로드 저장 제어부(42)에 의해 해석될 수 있다.
이 기술은, 저장 또는 로드 명령어를 초기화하는 코드가 레지스터 뱅크 내용인지를 모르는 경우 특히 유용하고, 이때의 레지스터 뱅크 내용은 레지스터 뱅크로의 다음의 검색을 위한 메모리에 임시로만 저장된다. 그 코드가 레지스터 뱅크 내용인지를 아는 경우, FPREG 레지스터(200)의 내용을 메모리에 저장하는데는 역시 불필요하다. 레지스터 뱅크 내용인지를 모르는 코드의 일반적인 예는, 문맥 전환 코드 및 프로시저(procedure) 호출 엔트리 및 출구(exit) 루틴이 있다.
이와 같은 경우에, FPREG 레지스터(200)의 내용은, 레지스터 뱅크의 내용에 추가하여 메모리에 효과적으로 저장될 수 있고, 실제 상술한 것처럼, 특정한 다른 시스템 레지스터가 요구하는 대로 저장될 수 있다.
연속적인 로드 명령어의 수신에 관하여 유사한 처리를 이용한다. 이에 따라, 홀수 데이터 슬롯을 지정하는 배정밀도 로드 명령어를 수신하자마자 로드 저장 제 어부(42)는, FPREG 레지스터(200)의 내용이 FPREG 레지스터(200)에 로딩되게 하고, 이어서 임의의 시스템 레지스터의 내용이 로드 명령어내의 식별된 슬롯 수를 나타내고, 이어서 짝수 데이터 워드가 레지스터 뱅크(220)의 지정 데이터 슬롯에 저장되는 구성으로 되어 있다. 따라서, 상술한 실시예를 고려하여, 로드 명령어에 지정된 데이터 슬롯의 수가 33일 경우, FPREG 레지스터 내용은 32개의 데이터 슬롯의 내용을 수반한 FPREG 레지스터(200)에 로딩된다. 이와 유사하게, 로드 명령어에 지정된 데이터 슬롯의 수가 35일 경우, FPSCR 레지스터(210)의 내용은 역시 상술한 내용들에 추가하여 FPSCR 레지스터에 로딩된다. 끝으로, 지정된 데이터 슬롯의 수가 37일 경우, 임의의 예외 레지스터 내용도 상술한 내용에 추가하여 예외 레지스터에 로딩된다. 특정 홀수와 연관된 특정 동작은 전체적으로 임의대로이고, 원하는 대로 변경될 수 있다는 것은 당업자에게는 명백하다는 것을 알 수 있을 것이다.
도 14는 본 발명의 바람직한 실시예에 따라 저장 및 로드 명령어를 실행할 경우에 레지스터 제어 및 명령어 발생 로직(48)의 동작을 나타낸 흐름도이다. 먼저, 단계 300에서는, 데이터 워드 수(바람직한 실시예에서는 데이터 슬롯 수와 동일한 것)가, 명령어에 있는 식별된 첫 번째 레지스터 수, 즉 기본 레지스터(base register)와 함께 그 명령어로부터 판독된다. 그래서, 단계 310에서는, 명령어가 배정밀도 또는 단일 정밀도 명령어인지를 식별하기 때문에 이 단계에서 코프로세서에 이용 가능한 정보를 상술한 것처럼, 그 명령어가 배정밀도 명령어인지를 판단한다.
그 명령어가 배정밀도 명령어일 경우, 그 처리는, 단계 320으로 진행하여, 명령어에 지정된 워드 수가 홀수인지를 판단한다. 이 실시예를 위해, FPREG 레지스터(200)에 추가하여 여러 가지 시스템 레지스터를 선택적으로 전송하는데 사용하지 않는다고 가정하면, 워드 수가 홀수일 경우, 이는 FPREG 레지스터(200) 내용이 전송된다는 것을 나타내고, 그에 따라서, 단계 325에서는, FPREG 레지스터의 내용이 로드 저장 제어부(42)에 의해 전송된다. 그래서, 단계 327에서는 워드 수가 1씩 감소되고, 그 처리는 단계 330으로 진행한다. 단계 320에서 워드 수가 짝수로 판단되었을 경우, 그 처리는 단계 330으로 직접 진행한다.
단계 330에서는, 워드 수가 0(zero)보다 큰지를 판단한다. 만약 크지 않을 경우, 명령어가 완료되었다고 간주하고, 그 처리는 단계 340에서 빠져나간다(EXIT). 그러나, 워드 수가 0 보다 클 경우, 그 처리는 단계 332로 진행하여, 배정밀도 데이터 값(즉, 2개의 데이터 슬롯의 내용)은 첫 번째 지정된 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그 후, 단계 334에서는, 워드 수가 2씩 감소되고, 단계 336에서는 레지스터 수가 1씩 증가된다. 상술한 것처럼, 실제로, 레지스터는, 실제로 배정밀도 명령어의 경우 2개의 데이터 슬롯으로 구성되어서, 레지스터 카운트가 1씩 증가하는 것은 데이터 슬롯 수가 2씩 증가하는 것과 같다.
그래서, 그 프로시저는 단계 330으로 복귀하여, 워드 수가 0보다 큰지를 계속하여 판단하고, 이러한 처리를 반복한다. 워드 수가 0에 도달할 경우, 그 처리는 단계 340에서 빠져나간다.
단계 310에서 그 명령어가 배정밀도 명령어가 아니라고 판단되었을 경우, 그 처리는 단계 350으로 진행하여, 다시 워드 수가 0 보다 큰지를 판단한다. 그래서, 그 처리가 단계 352로 진행한 경우, 단일 정밀도 데이터 값이, 그 명령어에 있는 식별된 첫 번째 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그후, 단계 354에서는, 워드 수가 1 씩 감소되고, 단계 356에서는 레지스터 수 카운트가 다음 데이터 슬롯을 지정하도록 1씩 증가된다. 그 후, 처리는 단계 350으로 복귀하여, 워드 수가 0보다 큰지를 계속하여 판단한다. 그래서, 이 처리를, 워드 수가 0인 시간까지 반복하여, 단계 360에서 그 처리 시간이 될 경우 빠져나간다.
이상과 같은 방법은, 레지스터 뱅크 내용, 예를 들면 문맥 전환 코드 또는 프로시저 호출 엔트리 및 출구 시퀀스를 모르고 있는 코드를 실행할 경우 매우 큰 유연성을 제공한다. 이와 같은 경우, 그 동작 시스템은, 레지스터의 내용을 모르고 있고, 그 내용에 의존하는 레지스터를 다르게 취급하지 않는 것이 바람직하다. 상기한 방법은, 데이터 워드의 홀수를 지정하는 단일 저장 또는 로드 명령어로 이들 코드 루틴이 기록되게 한다. 코프로세서가 레지스터 내용 정보의 사용을 필요로 하는 경우, 그 명령어에 있는 데이터 워드의 홀수를 필요 사항으로서 해석하여, 레지스터 뱅크에 있는 데이터의 내용을 지정하는데 필요한 포맷 정보를 메모리에 저장하거나 메모리로부터 로드한다. 이 유연성으로 유일한 동작 시스템 소프트웨어가 레지스터 내용 정보를 필요로 하는 코프로세서를 지원하기 위한 요구를 제거한다.
또한, 이러한 기술로 코드내의 분리 동작에서 레지스터 내용 정보를 로드하여 저장할 필요성을 제거한다. 레지스터 내용 정보를 로드하여 저장하기 위한 옵션이 명령어 내에 포함되어 있으므로, 추가적인 메모리 액세스가 불필요하다. 이는 코드 길이를 감소하고 잠재적으로 시간을 절약한다.
상기 설명된 기술을 포함하는 부동 소수점부의 구조적인 설명을 아래에 설명한다.
1. 도입
VFPv1은, ARM 프로세서 모듈로 사용하기 위한 코프로세서로서 구현되도록 설계된 부동 소수점 방식(FPS; floating point system) 구조(architecture)이다. 이 구조의 구현은, 하드웨어 또는 소프트웨어의 특징을 통합할 수 있거나, 그 구현은 소프트웨어를 사용하여 기능성을 보충하거나 IEEE 754 호환성을 제공할 수 있다. 이 명세는 하드웨어 및 소프트웨어 지원의 조합을 이용하여 완전 IEEE 754 호환성을 달성하고자 한다.
2개의 코프로세서 번호가 VFPv1에 의해 사용되는데, 여기서 10은 단일 정밀도 오퍼랜드로 연산하는데 사용되고, 또한 11은 배정밀도 오퍼랜드로 연산하는데 사용된다. 단일 및 배정밀도 데이터 사이에 변환을, 소오스 오퍼랜드 코프로세서 공간에서 연산하는 2변환 명령어로 수행한다.
VFPv1 구조는 다음의 특징들을 포함한다:
· 지원 코드로 하드웨어에 있어서의 IEEE 754와 완전 호환성.
· 소오스 오퍼랜드로서 각각 어드레스 가능한 32개의 단일 정밀도 레지스터 또는 목적지 레지스터.
· 소오스 오퍼랜드로서 각각 어드레스 가능한 16개의 배정밀도 레지스터 또 는 목적지 레지스터.(배정밀도 레지스터들은 물리적인 단일 정밀도 레지스터들과 오버랩)
· 벡터 모드는 부동 소수점 코드 밀도의 상당한 증가와 로드 및 저장 연산의 동시성을 제공한다.
· DSP 및 그래픽 동작을 향상시키기 위해 8개의 순환 단일 정밀도 레지스터를 갖는 4개의 뱅크 또는 4개의 순환 배정밀도 레지스터를 갖는 4개의 뱅크.
· 비정상 핸들링 옵션은 IEEE 754 호환성(부동 소수점 에뮬레이션 패키지로부터 지원됨)간에 선택하거나 또는 고속 플러시 투 제로(Flush-to-zero) 능력을 선택한다.
· IEEE 754 호환 결과와 완전 파이프라인식으로 연결된 곱-누적의 구현 예정.
· C, C++ 및 Java를 위해 FFTOSIZ 명령어로 정수 변환하기 위한 고속 부동 소수점.
구현기를 선택하여 하드웨어에서 VFPv1을 완전히 구현하거나 하드웨어 및 지원 코드의 조합을 활용할 수 있다. 이때의 VFPv1은 소프트웨어로 완전히 구현할 수 있다.
2. 용어
이 명세는 다음의 용어를 사용한다.
자동 예외(Automatic exception) - 각각의 예외 인에이블 비트의 값에 상 관없이 지원 코드를 항상 바운스(bounce)하는 예외 조건. 만약 예외가 자동이라면 구현 옵션중의 선택. 섹션 0, 6 의 예외 처리(Exception Processing) 참조.
바운스 - 사용자 트랩(trap) 제어기를 호출하거나 또는 그밖의 사용자 코드의 정상적인 흐름을 인터럽트하지 않고서 전체적으로 지원 코드에 의해 제어되는 동작 시스템에 보고된 예외.
CDP - FPS용 '코프로세서 데이터 처리(Coprocessor Data Processing)', CDP 연산은, 로드 또는 저장 연산이라기 보다는 오히려 산술연산이다.
ConvertToUnsignedInteger(Fm) - Fm의 내용을 부호 없는 32-비트 정수 값으로 변환. 이 결과는, 32-비트 부호 없는 정수의 범위 밖의 부동 소수점 값의 최종 라운딩(rounding) 및 핸들링을 위한 라운딩 모드에 의존한다. 무효(INVALID) 예외는, 부동 소수점 입력 값이 음의 값이거나 32-비트 부호 없는 정수 보다 너무 클 경우 가능하다.
ConvertToSignedInteger(Fm) - Fm의 내용을 부호 있는 32-비트 정수 값으로 변환. 이 결과는, 32-비트 부호 있는 정수의 범위 밖의 부동 소수점 값의 최종 라운딩 및 핸들링을 위한 라운딩 모드에 의존한다. 무효 예외는, 부동 소수점 입력 값이 32-비트 부호 있는 정수 보다 너무 클 경우 가능하다.
ConvertUnsignedIntToSingle/Double(Rd) - 32-비트 부호 없는 정수로서 해석된 ARM 레지스터(Rd)의 내용을 단일 또는 배정밀도 부동 소수점 값으로 변환. 목적지 정밀도가 단일이면, 변환 연산에 있어서 부정확한(INEXACT) 예외가 가능하다.
ConvertSignedIntToSingle/Double(Rd) - 32-비트 부호 있는 정수로서 해석된 ARM 레지스터(Rd)의 내용을 단일 또는 배정밀도 부동 소수점 값으로 변환. 목적지 정밀도가 단일이면, 변환 연산에 있어서 부정확한 예외가 가능하다.
비정상화된 값(Denormalized value) - (-2Emin < x < 2Emin) 범위에 있는 값을 나타냄. 단일 및 배정밀도 오퍼랜드 또는 비정상에 대한 IEEE 754 포맷에서, 비정상화된 값은 제로 지수를 가지고, 선행 자리 비트는 1이라기 보다는 오히려 0이다. 이 IEEE 754-1985 명세는, 비정상화된 오퍼랜드의 발생 및 조작이 정상적인 오퍼랜드와 같은 정밀도로 수행되는 것을 요구한다.
디스에이블된 예외(Disabled exception) - 0으로 세트된 FPSCR에 있는 관련 예외 인에이블 비트를 가진 예외를 '디스에이블된'으로서 언급한다. 이들 예외에 대한 IEEE 754 명세는 정확한 결과를 되돌리는 것으로 정의한다. 예외 조건을 발생하는 연산은, IEEE 754의 정의된 결과를 산출하기 위한 지원 코드로 바운스 할 수 있다. 또, 이 예외는 사용자 예외 핸들러에 보고되지 않을 것이다.
인에이블된 예외(Enabled exception) - 1로 세트된 각각의 예외 인에이블 비트를 가진 예외. 본 예가 발생하는 경우에 사용자 핸들러는 트랩(trap)할 것이다. 예외 조건을 발생하는 연산은 IEEE 754의 정의된 결과를 산출하기 위한 지원 코드로 바운스 할 수 있다. 그래서, 이 예외는 사용자 예외 핸들러에게 보고될 것이다.
지수(Exponent) - 제시된 수의 값을 판단할 때에 2 제곱된 정수를 보통 나타내는 부동 소수점 수의 성분. 이 지수는 종종 부호 있는 또는 비편향(unbiased) 지수라 부른다.
소수(Fraction) - 함축된 2진 소수점의 오른쪽에 놓인 자리(significand)의 필드.
플러시 투 제로 모드(Flush-To-Zero Mode) - 이 모드에서, 라운딩이 비정상화된 값으로 변환되기 보다는 오히려 제로로서 처리된 후 (-2Emin < x < 2Emin) 범위에 있는 모든 값.
하이(High)(Fn/Fm) - 메모리에 나타낸 것처럼 배정밀도 값의 상위 32 비트[63:32].
IEEE 754-1985 - "2진 부동 소수점 연산의 IEEE 표준", ANSI/IEEE Std 754-1985, 미국 전기 전자 학회(IEEE), Inc. New York, New York, 10017. 이 표준은, 종종 IEEE 754 표준으로서 언급되었고, 데이터 형태, 정확한 연산, 예외 형태 및 핸들링, 부동 소수점 방식용 오류 경계를 정의한다. 대부분의 프로세서는 하드웨어 또는 하드웨어 및 소프트웨어의 조합의 표준에 따라 설계되어 있다.
무한대(Infinity) - ∞를 나타내는데 사용된 IEEE 754의 특수 포맷. 이 지수는 정밀도에 대해 최대이고, 그 자리는 모두 제로이다.
입력 예외(Input exception) - 주어진 연산에 대한 하나 이상의 오퍼랜드가 하드웨어에 의해 지원되지 않는 예외 조건. 이때의 연산은 연산 완료를 위해 지원 코드를 바운스 한다.
중간 결과(Intermediate result) - 라운딩 전의 계산 결과를 저장하는데 사용되는 내부 포맷. 이 포맷은, 목적지 포맷보다 큰 지수 필드 및 자리 필드를 가 진다.
로우(Low)(Fn/Fm) - 메모리에 나타낸 것처럼 배정밀도 값의 하위 32 비트[31:0].
MCR - "ARM 레지스터로부터 코프로세서로 이동(Move)". FPS의 경우, 이는 ARM 레지스터와 FPS 레지스터 사이에서 데이터를 전송 또는 레지스터를 제어하는 명령어를 포함한다. 32 비트의 정보만이 단일 MCR 클래스 명령어를 이용하여 전송된다.
MRC - "코프로세서로부터 ARM 레지스터로 이동(Move)". FPS의 경우, 이는 FPS와 ARM 레지스터 사이에서 데이터를 전송 또는 레지스터를 제어하는 명령어를 포함한다. 32 비트의 정보만이 단일 MRC 클래스 명령어를 이용하여 전송된다.
NaN - 번호 없음, 부동 소수점 포맷에 인코딩된 기호 엔티티(Symbolic entity). 시그널링 및 비 시그널링 또는 정지(quiet)의 2가지 형태의 NaN이 있다. 시그널링 NaN은, 오퍼랜드로서 사용된다면 무효 오퍼랜드 예외를 발생한다. 정지 NaN은 시그널링 예외 없이 거의 모든 산술 연산을 통해 전달한다. NaN의 포맷은, 비 제로 자리를 갖는 모두 1인 지수 필드를 갖는다. 시그널링 NaN을 나타내기 위해 소수(fraction)의 최상위 비트는 O인 반면에, 정지 NaN은 그 비트가 1로 세트된다.
보류(Reserved) - 제어 레지스터 또는 명령어 포맷에 있는 필드는 그 필드가 구현에 의해 정의되는 경우 '보류'이거나, 그 필드의 내용이 0이 아닌 경우 예측 불가능한(UNPREDICTABLE) 결과를 산출한다. 이들 필드는, 향후 구조의 확장용도로 보류되거나 특수한 구현이다. 그 구현에 의해 사용되지 않는 모든 보류 비트들 은, 0으로 기록되어야 하고 0으로서 판독될 것이다.
라운딩 모드(Rounding Mode) - IEEE 754 명세가 요구하는 것은, 모든 계산을 마치 무한 정밀도, 즉, 2개의 단일 정밀도 값의 곱이 그 자리의 2배 비트 수에 대한 자리를 정확히 계산해야 하는 것처럼 수행하는 것이다. 그 자리의 목적 정밀도 라운딩에 있는 값을 나타내는 것이 종종 필요하다. IEEE 754 표준은, 4개의 라운딩 모드, 즉 가장 근접하게 라운드(RN; Round to Nearest), 제로 또는 절단(Chop)으로 라운드(RZ; Round to Zero), 플러스 무한대로 라운드(RP; Round to Plus infinity) 및 마이너스 무한대로 라운드(RM; Round to Minus infinity)가 있다. 상기 첫 번째 모드는, '짝수'를 만드는 자리의 최하위 비트가 0이면, 같은 경우 자리 올림(tie case rounding up)으로 중간점에서 라운딩함으로써 이룰 수 있다. 상기 두 번째 모드는, 임의의 비트를 그 자리의 오른쪽으로 효과적으로 절단하는, 항상 잘라버림(rounding down)을 수행하고, C, C++ 및 Java 언어에 의해 정수 변환에 사용된다. 그 나머지 두개의 모드는, 구간 연산(interval arithmetic)에 사용된다.
자리(Significand) - 함축된 2진 소수점의 왼쪽에 명시 또는 암시 선행 비트와, 오른쪽에 있는 소수 필드로 구성된 2진 부동 소수점 수의 구성요소.
지원 코드(Support Code) - IEEE 754 표준과의 호환성을 제공하기 위한 하드웨어를 보상하는데 사용되는 소프트웨어. 이 지원 코드는, 초월수 계산과 같은 하드웨어의 범위를 넘은 연산을 수행하는 루틴으로 구성된 라이브러리뿐만 아니라, 지원되지 않는 입력 또는 예외를 발생할 수 있는 입력으로 분할되는 것과 같은 지 원 함수(supported functions)와, IEEE 754 컴플라이언스를 제공하기 위해서 예외 조건을 처리하는 예외 핸들러로 구성된 세트의 2가지 구성요소를 갖도록 구성되어 있다. 이때, 지원 코드는, 임의의 지원되지 않는 데이터 형태 또는 데이터 표시(예를 들면, 비정상 값 또는 십진 데이터 형태)의 적절한 핸들링을 예뮬레이트 하기 위해서 구현 함수(implemented functions)를 수행하는데 요구된다. 상기 루틴이 기록되어 그 루틴의 출구에서 사용자의 상태를 조심해서 복원하는 경우 FPS를 그 중간 계산에 이용할 수도 있다.
트랩(Trap) - 각각의 예외 인에이블 비트가 FPSCR에 세트된 예외 조건. 사용자의 트랩 핸들러가 실행될 것이다.
미정의(UNDEFINED) - 미정의된 명령어 트랩을 발생하는 명령어를 나타냄. ARM 예외에 관한 많은 정보에 대한 ARM 구조 참조 메뉴얼을 참조한다.
예측불가능(UNPREDICTABLE) - 신뢰할 수 없는 명령어 또는 제어 레지스터 필드 값의 결과. 이 예측불가능 명령어 또는 결과는, 보안 홀을 나타내지 않거나, 프로세서 또는 그 시스템의 임의의 부분을 홀트(halt) 또는 행(hang)하지 않아야 한다.
지원되지 않는 데이터(Unsupported Data) - 하드웨어에 의해 처리되지 않고 종료를 위한 지원 코드로 바운스되는 특정 데이터 값. 이들 데이터는, 무한대, NaN, 비정상 값 및 제로를 포함한다. 구현은, 이들 값중에서 완전히 또는 부분적으로 하드웨어에서 지원되는 것 또는 연산을 종료하기 위해 지원 코드로부터 도움을 필요로 하는 것을 자유롭게 선택한다. 지원되지 않는 데이터 처리로서 생기는 임의 의 예외는, 그 예외에 대한 대응하는 예외 인에이블 비트가 세트된 경우 사용자 코드에 트랩핑될 것이다.
3. 레지스터 파일(Register File)
3.1 머리말
이 구조는, 소오스 또는 목적지 오퍼랜드로서 완전히 정의된 5-비트 레지스터 인덱스내에 모두 개별적으로 어드레스 가능한 32개의 단일 정밀도 및 16개의 배정밀도 레지스터를 제공한다.
32개의 단일 정밀도 레지스터는, 16개의 배정밀도 레지스터와 중복되는, 즉, D5으로의 배정밀도 데이터 기록은 S10 및 S11의 내용을 중복기재(overwrite)한 것이다. 컴파일러 또는 어셈블리어 프로그래머가, 중복된 구현에서 단일 정밀도 데이터 기억장치로서 레지스터의 사용과 배정밀도 데이터 기억장치의 반으로서 레지스터의 사용간에 레지스터 사용상의 충돌을 알도록 하는 일이다. 하나의 정밀도로 제한되는 레지스터 사용을 보증하도록 구성된 하드웨어가 없어서, 이것을 위반할 경우 그 결과는 예측 불가능하다.
VFPv1은, 스칼라 모드에서 이들 레지스터에 액세스를 제공하고, 한개, 두 개, 또는 세 개의 오퍼랜드 레지스터는 목적지 레지스터에 기록된 결과를 산출하는데 사용되고, 또는 벡터 모드에서 지정된 오퍼랜드는 레지스터 그룹을 참조한다. VFPv1은, 단일 정밀도 오퍼랜드에 대해서 단일 명령어에 있는 8개의 구성 요소까지 및 배정밀도 오퍼랜드에 대해서 4개의 구성 요소까지에 대한 벡터 연산을 제공한 다.
[표 1]. LEN 비트 인코딩
LEN 벡터 길이 인코딩
000 스칼라
001 벡터 길이 2
010 벡터 길이 3
011 벡터 길이 4
100 벡터 길이 5
101 벡터 길이 6
110 벡터 길이 7
111 벡터 길이 8
벡터 모드는, 비-제로 값을 LEN 필드에 기록함으로써 가능해진다. 이때, LEN 필드가 0을 포함하는 경우, FPS는 스칼라 모드에서 연산하고, 그 레지스터 필드는 플랫(flat) 레지스터 모델에서 32개의 개별적인 단일 정밀도 레지스터 또는 16개의 배정밀도 레지스터를 어드레싱함으로서 해석된다. LEN 필드가 비-제로일 경우, FPS는 벡터 모드에서 연산하고, 그 레지스터 필드는 레지스터의 벡터를 어드레싱함으로써 해석된다. LEN 필드의 인코딩을 위해 표 1을 참조한다.
LEN 필드를 변경하지 않고 스칼라 및 벡터 연산을 혼합하는 수단은, 목적지 레지스터의 명세를 통해서 가능하다. 스칼라 연산은, 목적지 레지스터가 레지스터들(S0-S7 또는 D0-D3)의 첫 번째 뱅크에 있을 경우 벡터 모드에 있는 동안 지정될 수 있다. 더 많은 정보에 대해서는 섹션 0을 참조한다.
3.2 단일 정밀도 레지스터 사용법
FPSCR에서 LEN 필드가 0일 경우, 32개의 단일 정밀도 레지스터는 번호 S0 내지 S31이 이용 가능하다. 임의의 레지스터가 소오스 또는 목적지 레지스터로서 사용될 수도 있다.

Figure 112000024742609-pct00001
실례 1. 단일 정밀도 레지스터 맵
이 단일 정밀도(코프로세서 10) 레지스터 맵은, 실례 1에 도시된 것처럼 나타낼 수 있다.
FPSCR에 있는 LEN 필드가 0보다 클 경우, 그 레지스터 파일은 실례 2에 도시된 것처럼, 8개의 순환 레지스터로 구성된 4개의 뱅크로서 동작한다. 벡터 레지스터 V0 내지 V7의 첫 번째 뱅크는, 스칼라 레지스터 S0 내지 S7과 중복(overlap)되고, 각 오퍼랜드에 대해 선택된 레지스터에 따라 스칼라 또는 벡터로서 어드레싱된다. 더 많은 정보를 위한 레지스터 사용법은 섹션 0, 3.4를 참조한다.
Figure 112000024742609-pct00002
실례 2. 순환 단일 정밀도 레지스터
예를 들어, FPSCR에서 LEN이 3으로 세트되는 경우, 참조 벡터 V10은 레지스터 S10, S11, S12 및 S13이 벡터 연산에 포함되게 한다. 이와 유사하게, V22는 S22, S23, S16 및 S17이 연산에 포함되게 한다. 벡터 모드에서 레지스터 파일을 액세스할 때, 순서에 있어서 V7 다음의 레지스터는 V0이고, 이와 유사하게, V8은 V15 다음이고, V16은 V23 다음이며, V24는 V31 다음이다.
3.3 배정밀도 레지스터 파일
FPSCR에서 LEN 필드가 0일 경우, 16개의 배정밀도 스칼라 레지스터는 이용 가능하다.
Figure 112000024742609-pct00003
실례 3. 배정밀도 레지스터 맵
임의의 레지스터는, 소오스 또는 목적지 레지스터로서 사용할 수 있다. 이 레지스터 맵은 실례 3에 도시된 것처럼 나타낼 수 있다.
FPSCR에서 LEN 필드가 0보다 클 경우, 4개의 순환 레지스터로 구성된 4개의 뱅크에 있는 4개의 스칼라 레지스터와 16개의 벡터 레지스터는, 실례 4에 도시된 것처럼 이용 가능하다. 벡터 레지스터 V0 내지 V3의 첫 번째 뱅크는, 스칼라 레지스터 D0 내지 D3과 중복된다. 이 레지스터는, 스칼라로서 또는 각 오퍼랜드에 대해 선택된 레지스터에 따라 어드레싱된다. 더 많은 정보를 위한 레지스터 사용법은 섹션 0, 3.4를 참조한다.
Figure 112000024742609-pct00004
실례 4. 순환 배정밀도 레지스터
섹션 0에서 단일 정밀도 실시예이므로, 배정밀도 레지스터는 4개의 뱅크 내에서 순환하고 있다.
3.4 레지스터 사용법
스칼라와 벡터간에 3개의 연산을 지원한다(OP2는 부동 소수점 코프로세서에 의해 지원된 임의의 2개의 오퍼랜드 연산일 수 있고, OP3은 임의의 3개의 오퍼랜드 연산일 수 있다).
다음 설명의 경우, 레지스터 파일의 '첫 번째 뱅크'는, 단일 정밀도 연산용 레지스터 S0-S7으로서 그리고 배정밀도 연산용 레지스터 D0-D3으로서 정의된다.
· 스칼라D = OP2 스칼라A 또는 스칼라D = 스칼라A OP3 스칼라B 또는 스칼라D = 스칼라A * 스칼라B + 스칼라D
· 벡터D = OP2 스칼라A 또는 벡터D = 스칼라A OP3 벡터B 또는 벡터D = 스칼라A * 벡터B + 벡터D
· 벡터D = OP2 벡터A 또는 벡터D = 벡터A OP3 벡터B 또는 벡터D = 벡터A*벡터B + 벡터D
3.4.1 스칼라 연산
2개의 조건은 스칼라 모드에서 FPS가 연산하게 한다.
1? FPSCR에서 LEN 필드는 0이다. 목적지 및 소오스 레지스터는, 단일 정밀도 연산용 스칼라 레지스터 0 내지 31과 배정밀도 연산용 스칼라 레지스터 0 내지 15중의 임의의 것일 수 있다. 이때의 연산은 명령어에 명백하게 지정된 레지스터에 관해서만 수행한다.
2? 목적지 레지스터는 레지스터 파일의 첫 번째 뱅크에 있다. 소오스 스칼라는 임의의 다른 레지스터일 수 있다. 이 모드는, FPSCR에서 LEN 필드를 변경할 필요 없이 스칼라 및 벡터 연산의 중간 혼합을 허용한다.
3.4.2 스칼라 및 벡터 소오스와 벡터 목적지를 포함하는 연산
이 모드에서 연산하기 위해서는, FPSCR의 LEN 필드가 0보다 크고, 그 목적지 레지스터가 레지스터 파일의 첫 번째 뱅크에 없다. 스칼라 소오스 레지스터는, 레지스터 파일의 첫 번째 뱅크에 있는 임의의 레지스터일 수 있고 나머지 임의의 레지스터가 벡터B용으로 사용될 수 있다. 주목할 것은, 그 동작이, 소오스 스칼라 레지스터가 멤버(member)일 경우 또는 벡터D가 LEN 구성요소 미만의 벡터B와 중복하는 경우, 즉 벡터D와 벡터B가 동일 벡터이어야 하거나 모든 멤버에서 완전히 별개인 경우 예측 불가능하다는 것이다. 섹션 0에 있는 요약 표를 참조한다.
3.4.3 벡터 데이터만을 포함하는 연산
이 모드에서 연산하기 위해서는, FPSCR의 LEN 필드가 0보다 크고, 목적지 벡터 레지스터가 레지스터 파일의 첫 번째 뱅크에 없다. 벡터A 벡터의 개개의 구성요소는, 벡터B에 있는 대응한 구성요소와 조합되어 벡터D에 기록된다. 그 레지스터 파일의 첫 번째 뱅크에 없는 임의의 레지스터는 벡터A에 대해 이용 가능하고, 모든 벡터는 벡터B에 대해 이용 가능하다. 다음의 경우에서와 같이, 그 동작이, 소오스 및 목적지의 양 벡터가 LEN 구성요소 미만으로 중복될 경우 예측 불가능하다. 그들은 동일하거나 모든 멤버에서 완전히 별개이다. 섹션 0의 요약 표를 참조한다.
주목할 것은, 연산의 FMAC 패밀리에 대해, 목적지 레지스터 또는 벡터는 항상 누적(Accumulate) 레지스터 또는 벡터라는 것이다.
3.4.4 연산 요약 표
다음의 표는, 단일 및 배정밀도 2 및 3 개의 오퍼랜드 명령어에 대한 레지스터 사용법 옵션을 제시한다. '임의의(Any)'는 지정된 오퍼랜드에 대한 정밀도에서 모든 레지스터의 이용가능성을 나타낸다.
[표 2]. 단일 정밀도 3개의 오퍼랜드 레지스터 사용법
LEN 필드 목적지 레지스터 제1 소오스 레지스터 제2 소오스 레지스터 연산 형태
0 Any Any Any S=SopS 또는 S=S*S+S
non-0 0 - 7 Any Any S=SopS 또는 S=S*S+S

LEN 필드 목적지 레지스터 제1 소오스 레지스터 제2 소오스 레지스터 연산 형태
non-0 8 - 31 0 - 7 Any V=SopV 또는 V=S*V+V
non-0 8 - 31 8 - 31 Any V=VopV 또는 V=V*V+V
[표 3]. 단일 정밀도 2개의 오퍼랜드 레지스터 사용법
LEN 필드 목적지 레지스터 소오스 레지스터 연산 형태
0 Any Any S= op S
non-0 0 - 7 Any S= op S
non-0 8 - 31 0 - 7 V= op S
non-0 8 - 31 8 - 31 V= op V
[표 4]. 배정밀도 3개의 오퍼랜드 레지스터 사용법
LEN 필드 목적지 레지스터 제1 소오스 레지스터 제2 소오스 레지스터 연산 형태
0 Any Any Any S=SopS 또는 S=S*S+S
non-0 0 - 3 Any Any S=SopS 또는 S=S*S+S
non-0 4 - 15 0 - 3 Any V=SopV 또는 V=S*V+V
non-0 4 - 15 4 - 15 Any V=VopV 또는 V=V*V+V
[표 5]. 배정밀도 2개의 오퍼랜드 레지스터 사용법
LEN 필드 목적지 레지스터 소오스 레지스터 연산 형태
0 Any Any S= op S
non-0 0 - 3 Any S= op S
non-0 4 - 15 0 - 7 V= op S
non-0 4 - 15 8 - 31 V= op V
4. 명령어 세트
FPS 명령어 3개의 카테고리로 나눌 수 있다.
·MCR 및 MRC - ARM과 FPS 사이의 연산을 전송
·LDC 및 STC - FPS와 메모리 사이의 연산을 로드 및 저장
·CDP - 데이터 처리 연산
4.1 명령어 동시성
FPS 구조 명세의 취지는, 2단계의 동시성이다.
파이프라인식 기능부와 CDP 기능을 갖는 병렬 로드/저장 연산. 중요한 성능 이득은, 이들 연산과 병렬로 실행하기 위해 일반적으로 연산을 처리하면서 레지스터 의존성이 없는 로드 및 저장 연산을 지원함으로써 이용할 수 있다.
4.2 명령어 직렬화
FPS는, 현재 실행하는 모든 명령어가 완료되고 각각의 예외 상태가 알려질 때까지 그 FPS가 ARM을 사용-대기(Busy-Wait)하게 하는 단일 명령어를 지정한다. 예외가 진행중인 경우, 그 직렬화 명령어는 취소되고 그 ARM에서 예외 처리를 시작한다. FPS에서 그 직렬화 명령어는,
·FMOVX - 부동 소수점 방식 레지스터에 대한 판독 또는 기록
이 있다.
부동 소수점 방식 레지스터에 대한 임의의 판독 또는 기록을 현재 명령어가 완료할 때까지 멈추게 한다. 시스템 ID레지스터에 대한 FMOVX(FPSID; FMOVX to the System ID Register)는, 선행하는 부동 소수점 명령어로 일어난 예외를 일으킨다. 사용자 상태(User Status)와 제어 레지스터(Control Register)의 판독/변경/기록(FPSCR)(FMOVX를 사용하여)을 수행하는 것은, 예외 상태 비트(FPSCR[4:0])를 클리어시키는데 사용될 수 있다.
4.3 정수 데이터를 포함하는 변환
부동 소수점과 정수 데이터사이의 변환은, 정수 데이터를 포함하는 데이터 전송 명령어와 그 변환을 수행하는 CDP 명령어로 구성된 FPS에서 2단계 처리이다. 임의의 산술 연산을 FPS 레지스터에 있는 정수 데이터에 관해 시도하는 경우, 그 결과는 정수 포맷에서 예측 불가능하여서 이러한 임의의 연산은 피해야 한다.
4.3.1 FPS 레지스터에서 정수 데이터를 부동 소수점 데이터로 변환
정수 데이터는, MCR FMOVS 명령어를 사용하여 어느 ARM 레지스터로부터든 부동 소수점 단일 정밀도 레지스터에 로딩될 수도 있다. FPS 레지스터의 정수 데이터를, 정수 투 플로우트(integer-to-float) 패밀리 연산으로 단일 또는 배정밀도 부동 소수점 값으로 변환하여 목적지 FPS 레지스터에 기록한다. 이 목적지 레지스터는, 그 정수 값이 더 이상 필요 없을 경우 소오스 레지스터가 된다. 이때의 정수는, 부호 있는 또는 부호 없는 32-비트량이다.
4.3.2 FPS 레지스터에 있는 부동 소수점 데이터를 정수 데이터로 변환
FPS 단일 또는 배정밀도 레지스터의 값을, 플로우트 투 정수(float-to-integer) 패밀리 명령어를 가진 부호 있는 또는 부호 없는 32-비트 정수 포맷으로 변환한다. 그 결과, 정수는 목적지 단일 정밀도 레지스터에 위치한다. 이때의 정수 데이터를 MRC FMOVS 명령어를 사용하여 ARM 레지스터에 저장한다.
4.4 레지스터 파일 어드레싱
단일 정밀도 공간(S=0)에서 연산하는 명령어는, 그 명령어 필드에 이용 가능한 5비트를 오퍼랜드 액세스를 위해 사용한다. 이때, 상위 4비트는 Fn, Fm 또는 Fd로 레이블된(labeled) 오퍼랜드 필드에 포함되고, 그 어드레스의 최하위 비트는 각각 N, M, 또는 D에 있다.
배정밀도 공간(S=1)에서 연산하는 명령어는, 그 오퍼랜드 어드레스의 상위 4비트만을 사용한다. 이들 4비트는, Fn, Fm 및 Fd 필드에 포함된다. N, M 및 D 비트는, 대응하는 오퍼랜드 필드가 오퍼랜드 어드레스를 포함할 경우 0을 포함해야 한 다.
4.5 MCR(ARM 레지스터에서 코프로세서로 이동; Move to Coprocessor from ARM 레지스터)
이 MCR 연산은, FPS에 의해 ARM 레지스터에 있는 데이터의 전송 또는 사용을 포함한다. 이는, ARM 레지스터로부터 단일 정밀도 포맷 또는 한 쌍의 ARM 레지스터에서 FPS 레지스터까지의 배정밀도 포맷에 있는 데이터를 이동하고, ARM 레지스터에서 단일 정밀도 FPS 레지스터까지의 부호 있는 또는 부호 없는 정수 값을 로딩하고, 제어 레지스터에 ARM 레지스터의 내용을 로딩하는 것을 포함한다.
MCR 명령어에 대한 포맷은 실례 5에 나타내었다.
Figure 112000024742609-pct00005
실례 5. MCR 명령어 포맷
[표 6]. MCR 비트 필드 정의
비트 필드 정의
Opcode 3-비트 연산 코드(표 7 참조)
Rd ARM 소오스 레지스터 인코딩
S 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드
N 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 하거나 그 연산이 미정의됨 시스템 레지스터 이동 보류

비트 필드 정의
Fn 단일 정밀도 연산: 목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스 시스템 레지스터 이동: 0000 - FPID (코프로세서 ID 번호) 0001 - FPSCR(사용자 상태 및 제어 레지스터) 0100 -FPREG(레지스터 파일 내용 레지스터) 기타 레지스터 인코딩은 보류이고 여러 가지 구현에 있어서 다를 수 있다.
R 보류 비트들
[표 7]. MCR 오페코드 필드 정의
Opcode 필드 이름 연산
000 FMOVS Fn=Rd(32비트, 코프로세서 10)
000 FMOVLD 로우(Fn)=Rd(배정밀도 로우 32비트, 코프로세서 11)
001 FMOVHD 하이(Fn)=Rd(배정밀도 하이 32비트, 코프로세서 11)
010-110 보류
111 FMOVX 시스템 레지스터=Rd(코프로세서 10 공간)
주석 : 32-비트 데이터 연산만이 FMOV[S, HD, LD] 명령어에 의해 지원된다. ARM 레지스터 또는 단일 정밀도 레지스터에 있는 데이터만이 FMOVS 연산에 의해 이동된다. 2개의 ARM 레지스터 FMOVLD 및 FMOVHD 명령어로부터 배정밀도 오퍼랜드를 전송하기 위해서, 하위 반과 상위 반을 각각 이동한다.
4.6 MRC(코프로세서로부터 ARM 레지스터로 이동/ 부동 레지스터 비교; Move to ARM Register from Coprocessor/Compare Floating Registers)
이 MRC 연산은, FPS 레지스터에 있는 데이터의 ARM 레지스터로의 전송을 포함한다. 이는, 단일 정밀도 값 또는 부동 소수점 값을 정수로 변환한 결과를 ARM 레지스터로 이동하거나 배정밀도 FPS 레지스터를 2개의 ARM 레지스터로 이동하고, CPSR의 상태 비트를 이전 부동 소수점 비교 연산의 결과로 변경하는 것을 포함한 다.
MRC 명령어의 포맷은 실례 6에 도시되어 있다.
Figure 112000024742609-pct00006
실례 6. MRC 명령어 포맷
[표 8]. MRC 비트 필드 정의
비트필드 정의
Opcode 3비트 FPS 연산 코드(표 9 참조)
Rd ARM 목적지* 레지스터 인코딩
S 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드
비트필드 정의
N 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: O으로 세트되어야 하거나 연산이 미정의됨 시스템 레지스터 이동 보류
M 보류
Fn 단일 정밀도 연산: 목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스 시스템 레지스터 이동: 0000 - FPID(코프로세서 ID 번호) 0001 - FPSCR(사용자 상태 및 제어 레지스터) 0100 - FPREG(레지스터 파일 내용 레지스터) 기타 레지스터 인코딩은 보류하고 여러 가지 구현은 다를 수 있음.
Fm 보류
R 보류
* FMOVX FPSCR 명령어에 대해서, 상기 Rd 필드가 R15(1111)를 포함할 경우, CPSR의 상위 4비트는 결과적인 조건 코드로 갱신될 것이다.
[표 9]. MRC 오페코드 필드 정의
Opcode필드 이름 연산
000 FMOVS Rd=Fn(32비트, 코프로세서 10)
000 FMOVLD Rd=Low(Fn)Dn의 하위 32비트가 전송됨.(배정밀도 로우 32비트, 코프로세서 11)
001 FMOVHD Rd=High(Fn) Dn의 상위 32비트가 전송됨.(배정밀도 하이 32비트, 코프로세서 11)
010 - 110 보류
111 FMOVX Rd=시스템 레지스터
주석 : MCR FMOV 명령어 주석 참조.
4.7 LDC/STC(로드/저장 FPS 레지스터)
LDC 및 STC 연산은 FPS와 메모리 사이의 데이터를 전송한다. 부동 소수점 데이터는, 그 ARM 어드레스 레지스터가 갱신되었거나 영향을 받지 않고 남어서 단일 데이터 전송 또는 다중 데이터 전송의 정밀도에서 전송될 수 있다. 이동 다중 연산에서 데이터 구조에 대한 다중 오퍼랜드 액세스는 물론, 꽉찬 내림차순 스택과 빈 오름차순 스택 구조를 지원한다. LDC 및 STC에 대한 다양한 옵션의 설명을 위한 표 11을 참조한다.
실례 7에 LDC 및 STC 명령어의 포맷이 도시되어 있다.
Figure 112000024742609-pct00007
실례 7. LDC/STC 명령어 포맷
[표 10]. LDC/STC 비트 필드 정의
비트 필드 정의
P 프리/포스트 인덱싱(0=포스트(post), 1=프리(pre)
U 업/다운 비트(0=다운, 1=업)

비트 필드 정의
D 단일 정밀도 연산: 소오스/목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함
W 재기록 비트(0=재기록 하지 않음, 1=재기록)
L 방향 비트(0=저장, 1=로드)
Rn ARM 기본 레지스터 인코딩
Fd 단일 정밀도 연산: 소오스/목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 소오스/목적지 레지스터 어드레스
S 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드
오프셋/전송 수 부호 없는 8-비트 오프셋 또는 FLDM(IA/DB) 및 FSTM(IA/DB)를 위해 전송하기 위한 단일 정밀도 (배정밀도 레지스터 카운트의 2배)레지스터의 수. 전송에 있어서 최대 워드 수는, 16개의 단일 정밀도 값 또는 8개의 배정밀도 값을 허용하는 16이다.
4.7.1 로드 및 저장 연산을 위한 일반적인 특징
다중 레지스터는, 벡터 연산에 의해 사용된 4개 또는 8개의 레지스터 경계를 가로질러 랩핑하지 않고 레지스터 파일을 통해 선형적으로 로딩 및 저장한다. 과거의 레지스터 파일 끝을 로드하려는 것은 예측 불가능하다.
이중 로드 또는 저장 배수(multiple)에 대한 오프셋이 홀수 레지스터 카운트 17이하를 포함할 경우, 그 구현은 또 다른 32-비트 데이터 항목을 기록하거나 또 다른 32-비트 데이터 항목을 판독할 수도 있지만, 그렇게 꼭 필요한 것은 아니다. 이 추가 데이터 항목은, 그것들이 로드 또는 저장되기 때문에 레지스터의 내용을 식별하는데 사용할 수 있다. 이는, 레지스터 파일 포맷이 정밀도용 IEEE 754 포맷과는 다르고 각 레지스터는 메모리에 있는 그것을 식별하는데 요구되는 타입 정보를 갖는 구현에 유용하다. 오프셋이 홀수이고 그 수가 단일 정밀도 레지스터의 수 보다 클 경우, 이는 그 레지스터의 문맥 전환과 모든 시스템 레지스터를 초기화하는데 사용할 수 있다.
[표 11]. 로드 및 저장 어드레싱 모드 옵션
Figure 112000024742609-pct00008
Figure 112000024742609-pct00009
Figure 112000024742609-pct00010
Figure 112000024742609-pct00011

4.7.2 LDC/STC 연산 요약
표 12는, LDC/STC에 있는 P, W 및 U 비트에 대한 허용 가능한 조합과, 각 유효 연산에 대한 오프셋 필드의 기능을 나타낸다.
[표 12]. LDC/STC 연산 요약
P W U 오프셋 필드 연산
0 0 0 미정의
0 0 1 Reg count FLDM/FSTM
0 1 0 미정의
0 1 1 Reg count FLDMIA/FSTMIA
1 0 0 오프셋 FLD/FST
1 0 1 오프셋 FLD/FST
1 1 0 Reg Count FLDMDB/FSTMDB
1 1 1 미정의
4.8 CDP(코프로세서 데이터 처리; Coprocessor Data Processing)
CDP 명령어는, 부동 소수점 레지스터 파일로부터의 오퍼랜드를 포함하고, 그 레지스터 파일에 재기록될 결과를 산출하는 모든 데이터 처리 연산을 포함한다. 특 정 관심사중에 FMAC(연쇄된 곱셈-누적) 연산과, 2개의 오퍼랜드에 관한 곱셈을 수행하고 제 3 오퍼랜드를 가산하는 연산이 있다. 이 연산은, IEEE 라운딩 연산을 제 3 오퍼랜드의 가산전에 곱에 관해 수행한다는 점에서 통합(fused) 곱셈-누적 연산과는 다르다. 이는 자바(Java) 코드가 FMAC 연산을 유용하게 하여 별도의 곱셈 및 가산 연산이 되면서 곱셈-누적 연산의 속도를 향상시킨다.
CDP 그룹에 있는 2개의 명령어는, FPS 레지스터의 부동 소수점 값을 정수 값으로 변환하는데 유용하다. FFTOUI[S/D]는, FPSCR에 있는 현재 라운딩 모드를 사용하여, 단일 또는 배정밀도의 내용을 FPS 레지스터에 있는 부호 없는 정수로 변환한다. FFTOSI[S/D]는, 부호 있는 정수로 변환한다. FFTOUIZ[S/D] 및 FFTOSIZ[S/D]는 동일한 기능을 수행하지만 그 변환을 위해 FPSCR 라운딩 모드를 무효로 하고, 임의의 소수 비트를 절단한다(truncate). FFTOSIZ[S/D]의 기능은, 부동 수를 정수로 변환하는데 C, C++ 및 자바가 필요하다. 이때 FFTOSIZ[S/D] 명령어는, 변환을 위해 FPSCR로부터 RZ까지에 있는 그 라운딩 모드 비트의 조정을 요구하지 않고서 그 능력을 제공하여서, FFTOSIZ[S/D] 연산으로의 변환을 위한 사이클 카운트를 감소시키는데, 이는 4 내지 6 사이클을 절감한다.
그 CDP CMP 명령어를 사용하여 비교 연산을 수행하고나서, ARM CPSR 플래그 비트에 그 결과의 FPS 플래그 비트(FPSCR[31:28])를 로드하기 위한 MRC FMOVX FPSCR 명령어가 뒤따른다. 이때의 비교 연산은, 비교 오퍼랜드중 하나가 NaN일 경우 무효 예외의 가능성이 제공되고 또 가능성 없이 제공된다. FCMP 및 FCMP0은, 비교 오퍼랜드중 하나가 NaN일 경우 무효를 신호로 알리지 않고, 또한 FCMPE 및 FCMPE0는 예외를 신호로 알린다. 상기 FCMP0 및 FCMPE0는, Fm 필드에 있는 오퍼랜드와 0을 비교하고 그에 따라서 FPS 플래그를 세트한다. FMOVX FPSCR 연산 후, 다음과 같이 ARM 플래그 N, Z, C 및 V를 정의한다.
N 미만
Z 같음
C 크거나 같음 또는 명령을 받지 않음
V 명령을 받지 않음
CDP 명령의 포맷은 아래 실례 8에 나타내었다.
Figure 112000024742609-pct00012
실례 8. CDP 명령어 포맷
[표 13]. CDP 비트 필드 정의
비트 필드 정의
오페코드 4-비트 FPS 연산코드(표 14 참조)
D 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함
비트 필드 정의
Fn 단일 정밀도 연산: 소스 A레지스터 상위 4비트 OR 확장 오페코드 최상위 4비트 배정밀도 연산: 소스 A 레지스터 어드레스 OR 확장 오페코드 최상위 4비트
Fd 단일 정밀도 연산: 목적지 레지스터 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스
S 연산 오퍼랜드 크기: 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드
N 단일 정밀도 연산: 소스 A 레지스터 최하위 비트 확장 오페코드 최하위 비트 배정밀도 연산: 0으로 세트되어야 함 확장 오페코드 최하위 비트
M 단일 정밀도 연산: 소스 B 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함
Fm 단일 정밀도 연산: 소스 B 레지스터 어드레스 상위 4비트 배정밀도 연산: 소스 B 레지스터 어드레스
4.8.1 오페코드
표 14는, CDP 명령어의 중요한 오페코드를 나타낸다. 모든 니모닉(mnemonics)은, [OPERATION][COND][S/D] 형태이다.
[표 14]. CDP 오페코드 명세
오페코드 필드 연산 이름 연산
0000 FMAC Fd=Fn*Fm+Fd
0001 FNMAC Fd=-(Fn*Fm+Fd)
0010 FMSC Fd=Fn*Fm-Fd
0011 FNMSC Fd=-(Fn*Fm-Fd)
0100 FMUL Fd=Fn*Fm
0101 FNMUL Fd=-(Fn*Fm)
0110 FSUB Fd=Fn-Fm
0111 FNSUB Fd=-(Fn-Fm)
1000 FADD Fd=Fn+Fm
1001- 1011 보류
1100 FDIV Fd=Fn/Fm
1101 FRDIV Fd=Fm/Fn
1110 FRMD Fd=Fn%Fm(Fd=Fn/Fm후 소수 좌측)
1111 확장 2개의 오퍼랜드 연산을 위한 연산을 지정하기 위해 Fn 레지스터 필드 사용(표 15 참조)
4.8.2 확장된 연산
표 15는 오페코드 필드에 있는 확장 값을 사용하여 이용가능한 확장 연산을 나타낸다. 모든 명령어는 직렬화 및 FLSCB 명령어의 제외를 가진 [OPERATION][COND][S/D] 형태이다. 그 확장 연산용 명령어 인코딩은, Fn 오퍼랜드, 즉, {Fn[3:0], N}용 레지스터 파일 내에 인덱스와 같은 방법으로 형성된다.
[표 15]. CDP 확장 연산
Figure 112000024742609-pct00013
Figure 112000024742609-pct00014
Figure 112000024742609-pct00015
* 비벡터화 가능한 연산. 이 LEN 필드를 무시하고, 특정 레지스터에 관한 스칼라 연산을 수행한다.
5. 시스템 레지스터
5.1 시스템 ID 레지스터(FPSID)
이 FPSID는, FPS 구조와 정의된 구현 ID 값을 포함한다.
Figure 112000024742609-pct00016
실례 9. FPSID 레지스터 인코딩
이 워드는, 모델, FPS의 특징 세트 및 수정 및 마스크 세트 번호를 결정하는데 사용할 수도 있다. 이 FPSID는 읽기 전용이고, 그 FPSID에 쓰기는 무시된다. FPSID 레지스터 레이아웃에 대한 실례 9를 참조한다.
5.2 사용자 상태 및 제어 레지스터(FPSCR)
FPSCR 레지스터는, 사용자 액세스 가능 구성 비트와 예외 상태 비트를 포함한다. 구성 옵션은, 예외 인에이블 비트, 라운딩 제어, 벡터 스트라이드 및 길이, 비정상적인 오퍼랜드 및 결과의 핸들링, 및 디버그(debug) 모드의 사용을 포함한다. 이 레지스터는, FPS를 구성하고 종료된 연산의 상태를 문의하기 위해 사용자 및 오퍼레이팅 시스템 코드용이다.
Figure 112000024742609-pct00017
실례 10. 사용자 상태 및 제어 레지스터(FPSCR)
그것은 문맥 전환 동안에 저장 및 복원되어야 한다. 31 내지 28 비트는, 가장 최근의 비교 명령어로부터의 플래그 값을 포함하고, FPSCR의 읽기를 사용하여 액세스될 수 있다. 이러한 FPSCR은 위의 실례 10에 도시되어 있다.
5.2.1 비교 상태 및 처리 제어 바이트
31 내지 28비트는, 가장 최근의 비교 연산 결과와 특정 상황에서 상기 FPS의 산술 응답을 지정하는데 유용한 몇몇의 제어 비트를 포함한다. 비교 상태 및 처리 제어 바이트의 포맷은, 실례 11에 나타내었다.
Figure 112000024742609-pct00018
실례 11. FPSCR 비교 상태 및 처리 제어 바이트
[표 16]. FPSCR 비교 상태 및 처리 제어 바이트 필드 정의
레지스터 비트 이름 기능
31 N 비교결과는 미만이었음
30 Z 비교결과는 같았음
29 C 비교결과는 크거나 같음 또는 명령을 받지 않았음
28 V 비교결과는 명령을 받지 않았음
27 : 25 보류
24 FZ 플러시 투 제로 0: IEEE 754 언더플로우 핸들링(디폴트) 1: 플러시 타이니(Tiny) 제로가 됨 목적지 정밀도용 정상 범위보다 작은 임의의 결과는 목적지에 기록된 제로가 된다. 이 언더플로우 예외 트랩을 얻지 못함.
5.2.2 시스템 제어 바이트
이 시스템 제어 바이트는, 라운딩 모드, 벡터 스트라이드 및 벡터 길이 필드를 제어한다. 이 비트는 실례 12에 나타낸 것과 같이 지정되어 있다. VFPv1 구조는, 사용을 위한 레지스터 파일 스트라이딩(striding) 메카니즘과 벡터 연산을 통합시킨 것이다. 스트라이드 비트를 00으로 세트할 경우, 벡터 연산에 선택된 다음 레지스터는 그 레지스터 파일에 있는 이전 레지스터 바로 뒤의 레지스터가 된다. 정상 레지스터 파일 랩핑 메카니즘은 스트라이드 값에 영향을 받지 않는다. 11의 스트라이드는, 모든 입력 레지스터 및 출력 레지스터를 2씩 증가시킨다.
예를 들면,
FMULEQS F8, F16, F24
은, 다음의 비벡터 연산:
FMULEQS F8, F16, F24
FMULEQS F10, F18, F26
FMULEQS F12, F20, F28
FMULEQS F14, F22, F30
1 레지스터라기 보다는 오히려 2 레지스터만큼 레지스터 파일에 곱셈을 하기 위한 오퍼랜드를 효과적으로 '스트라이딩'을 수행한다.
Figure 112000024742609-pct00019
실례 12. FPSCR 시스템 제어 바이트
[표 17]. FPSCR 시스템 제어 바이트 필드 정의
레지스터 비트 이름 기능
23 : 22 RMODE 라운딩 모드 세트 00 : RN(Round to Nearest; Default) 01 : RP(Round towards Plus Infinity) 10 : RM(Round towards Minus Infinity) 11 : RZ(Round towards Zero)
21 : 20 STRIDE 벡터 레지스터 액세스를 세트: 00 : 1(Default) 01 : 보류 10 : 보류 11 : 2
19 보류(R)
18 : 16 LEN 벡터 길이. 벡터연산용 길이 지정.(모든 인코딩이 실행마다 이용가능한 것이 아니다) 000 : 1(Default) 001 : 2 010 : 3 011 : 4 100 : 5 101 : 6
레지스터 비트 이름 기능
18:16 LEN 110 : 7 111 : 8
5.2.3 예외 인에이블 바이트
예외 인에이블 바이트는, 15 : 8 비트를 점유하고, 예외 트랩 인에이블을 포함한다. 이 비트는 실례 13에 도시된 것처럼 지정되어 있다. 이 예외 인에이블 비트는 부동 소수점 예외 조건을 조정하기 위한 IEEE 754 명세의 요구사항을 따른다. 이러한 비트가 세트된 경우, 그 예외는 인에이블되고, FPS는 현재 명령어에 관한 예외 조건이 발생한 경우에 사용자 가시 트랩을 오퍼레이팅 시스템에 신호로 보낸다. 그 비트가 클리어된 경우, 그 예외는 인에이블되지 않고, FPS는 그 예외 조건의 경우에 사용자 가시 트랩을 오퍼레이팅 시스템에 신호를 보내지 않고, 수학적으로 합리적인 결과를 발생한다. 예외 인에이블 비트에 대한 디폴트는 디스에이블된다. 예외 핸들링에 관한 더욱 많은 정보에 대해서는 IEEE 754 표준을 참조한다.
일부 구현은, 예외가 디스에이블된 경우에도 하드웨어 능력 이외의 예외 조건을 조정하기 위해 지원코드에 대한 바운스를 발생한다. 이는 일반적으로 사용자 코드를 볼 수 없는 것이다.
Figure 112000024742609-pct00020
실례 13. FPSCR 예외 인에이블
[표 18]. FPSCR 예외 인에이블 바이트 필드
레지스터 비트 이름 기능
15 : 13 보류
12 IXE 부정확한 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블
11 UFE 언더플로우 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블
10 OFE 오버플로우 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블
9 DZE 0으로 나눈 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블
8 IOE 무효 오퍼랜드 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블
5.2.4 예외 상태 바이트
예외 상태 바이트는, FPSCR의 7:0 비트를 점유하고 예외 상태 플래그 비트를 포함한다. 각 부동 소수점 예외를 위한 하나인, 5개의 예외 상태 플래그 비트가 있다. 이들 비트는 '곤란(sticky)'한 것으로서, 즉 검출된 예외로 세트된 경우, 그들은 FPSCR로의 FMOVX 기록 또는 FSERIALCL 명령어에 의해 클리어되어야 한다. 이러한 비트는 실례 14에 도시된 것처럼 지정되어 있다. 인에이블된 예외의 경우, 대응 하는 예외 상태 비트를, 자동으로 세트하지 않는다. 지원 코드의 태스크는, 적합한 예외 상태 비트를 필요할 때마다 세트하는 것이다. 일부 예외는, 자동적인, 즉, 그 예외 조건이 검출될 경우, FPS가 예외 인에이블 비트의 세트 방법에 상관없이 연속적인 부동 소수점 명령어에 관해 바운스할 것이다. 이는, IEEE 754 표준에 의해 요구된 많은 관련 예외 처리중의 일부가 하드웨어에서라기 보다는 오히려 소프트웨어에서 수행되게 한다. 예에서는, FZ 비트가 0으로 세트된 언더플로우 조건을 든다. 이 경우에, 정확한 결과는, 그 결과의 지수와 라운딩 모드에 따라 비정상화된 수이다. FPS는, 구현자(implementer)로 하여금 바운스할 옵션을 포함한 응답을 선택하게 하고, 정확한 값을 산출하여 이 값을 목적지 레지스터에 기록하기 위한 지원 코드를 사용하게 한다. 언더플로우 예외 인에이블 비트가 세트된 경우, 사용자의 트랩 핸들러를 그 지원코드가 연산을 완료한 후 호출한다. 이 코드는, FPS의 상태를 바꾸고 되돌아가거나, 그 처리를 종료시킨다.
Figure 112000024742609-pct00021
실례 14. FPSCR 예외 상태 바이트
[표 19]. FPSCR 예외 상태 바이트 필드 정의
레지스터 비트 이름 기능
7 : 5 보류
4 IXC 부정확한 예외 검출
3 UFC 언더플로우 예외 검출
2 OFC 오버플로우 예외 검출
1 DZC 0으로 나눈 예외 검출
0 IOC 무효 연산 예외 검출
5.3 레지스터 파일 콘텐트 레지스터(Register File Content Register; FPREG)
이 레지스터 파일 콘텐트 레지스터는, 현재 동작중인 프로그램에 의해 해석되어질 때 그 레지스터의 콘텐트를 적절하게 나타내주기 위해 디버거(debugger)에 의해 사용될 수 있는 정보를 포함하는 특권 레지스터(privileged register)이다. 이 FPREG는, 레지스터 파일에 있는 각 배정밀도 레지스터에 대해 1비트인 16비트를 포함한다.
Figure 112000024742609-pct00022
실례 15. FPREG 레지스터 인코딩
그 비트를 세트한 경우, 그 비트에 의해 나타낸 물리적 레지스터 쌍을 배정밀도 레지스터로서 표시하는데 있다. 이 비트를 클리어한 경우, 그 물리적 레지스터는 한개 또는 2개의 단일 정밀도 데이터 값을 초기화하지 않거나 포함한다.
[표 20]. FPREG 비트 필드 정의
FPREG 비트 비트 세트 비트 클리어
C0 D0 유효 S1 및 S0 유효 또는 비초기화
C1 D1 유효 S3 및 S2 유효 또는 비초기화
C2 D2 유효 S5 및 S4 유효 또는 비초기화
C3 D3 유효 S7 및 S6 유효 또는 비초기화
C4 D4 유효 S9 및 S8 유효 또는 비초기화
C5 D5 유효 S11 및 S10 유효 또는 비초기화
C6 D6 유효 S13 및 S12 유효 또는 비초기화
C7 D7 유효 S15 및 S14 유효 또는 비초기화
C8 D8 유효 S17 및 S16 유효 또는 비초기화
C9 D9 유효 S19 및 S18 유효 또는 비초기화
C10 D10 유효 S21 및 S20 유효 또는 비초기화
C11 D11 유효 S23 및 S22 유효 또는 비초기화
C12 D12 유효 S25 및 S24 유효 또는 비초기화
C13 D13 유효 S27 및 S26 유효 또는 비초기화
C14 D14 유효 S29 및 S28 유효 또는 비초기화
C15 D15 유효 S31 및 S30 유효 또는 비초기화
6. 예외 처리
FPS는, 2개의 모드, 즉 디버그 모드 및 정상 모드중의 하나에서 동작한다. FPSCR에 DM 비트가 세트된 경우, FPS는 디버그 모드에서 동작한다. 이 모드에서, FPS는, ARM이 그 명령어의 예외 상태가 알려지기 까지 대기하다가 동시에 하나의 명령어를 실행한다. 이는 레지스터 파일과 메모리가 명령어 흐름에 대해 정밀하다는 것을 확인시키지만, 많은 실행시간을 희생시킨다. 이 FPS는, 자원(resource)을 허용할 경우 ARM으로부터 새로운 명령어와, 예외 조건의 검출에 관한 신호 예외를 수신한다. ARM으로의 예외 보고는, 벡터 연산이 뒤따르고 그 벡터 연산과 병렬로 실행하는 로드 또는 저장 연산의 경우에 부동 소수점 명령어 스트림 예외에 대하여 항상 정밀하다. 이러한 경우, 로드 연산을 위한 레지스터 파일 또는 저장 연산을 위한 메모리의 콘텐트는 정밀하지 않다.
6.1 지원 코드
FPS의 구현은, 하드웨어 및 소프트웨어 지원의 조합에 따른 IEEE 754를 선택 할 수 있다. 지원되지 않는 데이터 타입과 자동 예외에 대해, 지원 코드는 하드웨어에 따른 기능을 수행하고 적합한 결과를 목적지 레지스터에 되돌리고, 사용자의 트랩 핸들러를 호출하지 않거나 그렇지 않은 경우 사용자 코드의 흐름을 수정하지 않고서 사용자 코드로 되돌아간다. 하드웨어만이 부동 소수점 코드의 처리를 책임질 수 있다는 것을 사용자에게 보인다. 이 특징들을 제어하기 위해 지원코드에 대한 바운싱은, 그 특징을 수행하거나 처리할 시간을 크게 증가시키지만, 이 상황들의 발생은 사용자 코드, 임베디드 응용, 잘 기록된 수치 응용에 일반적으로 극소하다.
이 지원코드는 2가지 구성요소, 즉, 초월 계산과 같은 하드웨어의 범위 이상의 연산뿐만 아니라, 지원되지 않는 입력 또는 예외를 발생하는 입력으로 나누어지는 것과 같은 지원 함수를 수행하는 루틴으로 구성된 라이브러리와, IEEE 754 컴플라이언스를 제공하기 위해서 예외 트랩을 처리하는 예외 핸들러로 구성된 세트를 가진다. 이 지원코드는, 임의의 지원되지 않는 데이터 타입 또는 데이터 표시(예; 비정상 값)의 적절한 핸들링을 에뮬레이트하기 위한 구현 함수를 수행하는데 필요하다. 이 루틴은, 루틴의 출구(Exit)에서 사용자의 상태를 조심스럽게 복원할 경우 그들의 중간 계산에서의 FPS를 이용하는데 기록될 수도 있다.
6.2 예외 보고 및 처리
정상 모드에서의 예외를, 예외 조건이 검출된 후에 발생된(issued) 다음 부동 소수점 명령어의 ARM에 보고한다. ARM 프로세서, FPS 레지스터 파일 및 메모리의 상태는, 예외가 일어날 때 위반 명령어에 대해서 정밀하지 못하다. 충분한 정보 를 그 지원 코드에 이용 가능하여서, 정확하게 그 명령어를 에뮬레이트하고 그 명령어로부터 생기는 임의의 예외를 처리한다.
일부 구현에 있어서, 지원 코드는, 무한대, NaN, 비정상 데이터 및 제로를 포함한 특정 IEEE 754 데이터로 일부 또는 모든 연산을 처리하는데 사용될 수 있다. 이러한 구현은, 지원되지 않는 것으로서 이들 데이터를 언급하고, 사용자 코드에 대해 일반적으로 볼 수 없는 방법으로 지원 코드에 대해 바운스하며, 목적지 레지스터로 끝난 지정된 IEEE 754로 보답한다. 그 연산으로 인한 임의의 예외는, 예외용 IEEE 754 규칙을 지킨다. 이는, 대응한 예외 인에이블 비트가 세트된 경우 사용자 코드로의 트랩핑을 포함한다.
IEEE 754 표준은, FPSCR에서 인에이블된 예외의 경우와 디스에이블된 예외의 경우 예외 조건에 대한 응답을 정의한다. VFPv1 구조는, IEEE 754 명세에 따라 적합하게 사용된 하드웨어와 소프트웨어간의 경계를 지정하지 않는다.
6.2.1 지원되지 않는 연산 및 포맷
FPS는, 십진 데이터 또는 십진 데이터로 또는 십진 데이터로부터의 변환을 갖는 어떠한 연산도 지원하지 않는다. 이들 연산은, IEEE 754 표준을 필요로 하고, 그 지원 코드에 의해 제공되어야 한다. 십진 데이터를 활용하기 위한 시도는, 바라는 함수를 위한 라이브러리 루틴을 필요로 한다. 이 FPS는, 십진 데이터 타입이 아니라, 십진 데이터를 사용하는 명령어를 트랩하는데 사용할 수 없다.
6.2.2 FPS가 디스에이블 또는 예외일 경우 FMOVX의 사용
감시(SUPERVISOR) 또는 미정의(UNDEFINED) 모드에서 실행된 FMOVX 명령어는, 그 FPS가 ARM으로 예외 신호를 보내지 않고서 예외 상태에 있거나 디스에이블 되어 있는 경우(그 구현이 디스에이블 옵션을 지원하는 경우) FPSCR을 판독 및 기록하거나 FPSID 또는 FPREG를 판독한다.
이와 같이 본 발명의 특별한 실시예를 설명하였지만, 본 발명은 이에 한정되는 것이 아니고, 많은 변형 및 추가를 본 발명의 범위 내에서 할 수 있다는 것이 명백하다. 예를 들면, 다음의 종속항 특징의 다양한 조합은, 본 발명의 범위로부터 벗어나지 않고서 독립항의 특징을 작성할 수 있다.

Claims (25)

  1. 각각이 벡터 또는 스칼라 레지스터로서 사용되어 동작할 수 있는 복수의 레지스터를 갖는 레지스터 뱅크(38)와,
    적어도 실행을 위해 연산을 지정하는 연산 지정 코드(OP)와 상기 레지스터 뱅크내의 제 1 레지스터를 지정하는 제 1 레지스터 지정 필드(R1)를 갖는 상기 데이터 처리 명령어 중의 적어도 하나를 디코딩 하는 명령 디코더(42, 48, 50)를 포함하고,
    상기 명령 디코더는 주어진 레지스터(R1, R2, R3)를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 연산을 실행하도록 동작할 수 있되, 상기 주어진 레지스터가, 상기 주어진 레지스터에 저장된 오퍼랜드에 관해 상기 연산을 한번 실행하는 것을 포함하는 스칼라 레지스터가 되면서 실행하고, 상기 주어진 레지스터가, 상기 주어진 레지스터용 레지스터 지정 필드에 따라 선택된 상기 레지스터 뱅크의 소정 시퀀스의 레지스터 내에 저장된 오퍼랜드에 관해 상기 연산을 복수회 실행하는 것을 포함하는 벡터 레지스터가 되면서 실행하고,
    상기 명령 디코더는, 상기 제 1 레지스터 지정 필드(R1)에 응답하고, 상기 제 1 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행하는지를 판단하기 위한 상기 연산 지정 코드와 무관한 것을 특징으로 하는 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 데이터 처리 명령어 중의 상기 적어도 하나는, 제 2 레지스터를 지정하는 제 2 레지스터 지정 필드(R2)를 갖고,
    상기 명령 디코더는, 상기 제 2 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 상기 연산을 실행하고,
    상기 명령 디코더는, 상기 제 2 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행할지를 판단하기 위해 상기 제 1 레지스터 지정 필드(R1)에 응답하는 것을 특징으로 하는 데이터 처리장치.
  3. 제 2 항에 있어서,
    상기 제 1 레지스터가 스칼라 레지스터일 경우 상기 제 2 레지스터는 스칼라 레지스터이고, 상기 제 1 레지스터가 벡터 레지스터일 경우 상기 제 2 레지스터는 벡터 레지스터인 것을 특징으로 하는 데이터 처리장치.
  4. 제 2 항 또는 제 3 항에 있어서,
    상기 데이터 처리 명령어 중의 상기 적어도 하나는, 제 3 레지스터를 지정하는 제 3 레지스터 지정 필드(R3)를 갖고,
    상기 명령 디코더는, 상기 제 3 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 상기 연산을 실행하고,
    상기 명령 디코더는, 상기 제 3 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행할지를 판단하기 위해 상기 제 2 레지스터 지정 필드에 응답하는 것을 특징으로 하는 데이터 처리장치.
  5. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 연산 지정 코드는, 비교환적인 연산에 대응한 비교환적인 코드 값을 가지고, 상기 비교환적인 코드 값 중 적어도 일부가 같은 연산에 대응한 쌍으로 구성되지만 반대의 오퍼랜드 순서로 구성되는 것을 특징으로 하는 데이터 처리장치.
  6. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 주어진 레지스터가 벡터 레지스터일 경우, 상기 연산을 반복하는 동안 상기 소정 시퀀스의 레지스터에 있는 레지스터의 수를 지정하는 길이 값을 저장하고, 상기 길이 값을 상기 데이터 처리 명령어가 사용된 모든 벡터 레지스터에 적용하는 벡터 제어 레지스터(46)를 포함한 것을 특징으로 하는 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 명령 디코더는, 상기 길이 값이, 상기 소정 시퀀스에 있는 상기 레지스터의 수가, 상기 데이터 처리 명령어에 사용된 모든 레지스터가 스칼라 레지스터를 표시하기 위한 하나인 것을 지정하는지를 검출하는 것을 특징으로 하는 데이터 처리장치.
  8. 제 6 항에 있어서,
    상기 벡터 제어 레지스터(46)는, 상기 소정 시퀀스 레지스터의 상기 레지스터 사이에 레지스터 수의 증가를 지정하는 스트라이드 값을 저장하고, 상기 스트라이드 값을 상기 데이터 처리 명령어가 사용된 모든 벡터 레지스터에 적용하는 것을 특징으로 하는 데이터 처리장치.
  9. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 제 1 레지스터 지정 필드가 제 1 N값의 범위 내에 있을 경우 상기 제 1 레지스터는 벡터 레지스터이고, 상기 제 1 레지스터 값이 상기 제 1 N값의 범위와 다른 제 2 M값의 범위를 가질 경우 상기 제 1 레지스터는 벡터 레지스터인 것을 특징으로 하는 데이터 처리장치.
  10. 제 9 항에 있어서,
    M > N 인 것을 특징으로 하는 데이터 처리장치.
  11. 제 10 항에 있어서,
    M=3*N 인 것을 특징으로 하는 데이터 처리장치.
  12. 제 4 항에 있어서,
    상기 제 2 레지스터 지정 필드가 제 1 P값의 범위 내에 있을 경우 상기 제 3 레지스터는 벡터 레지스터이고, 상기 제 2 레지스터 값이 상기 제 1 P값의 범위와 다른 제 2 Q값의 범위를 가질 경우 상기 제 3 레지스터는 벡터 레지스터인 것을 특징으로 하는 데이터 처리장치.
  13. 제 12 항에 있어서,
    P > Q인 것을 특징으로 하는 데이터 처리장치.
  14. 제 13 항에 있어서,
    P=3*Q 인 것을 특징으로 하는 데이터 처리장치.
  15. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    메모리와, 상기 메모리와 상기 레지스터 뱅크내의 레지스터 사이의 데이터 값의 전송을 제어하기 위한 전송 제어기를 포함하되, 상기 전송 제어기가 상기 메모리와 상기 레지스터 뱅크내의 일련의 레지스터 사이의 일련의 데이터 값을 전송하기 위해 다중 전송 명령어에 응답하는 것을 특징으로 하는 데이터 처리장치.
  16. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 레지스터 뱅크와 상기 명령 디코더는 부동 소수점부의 일부인 것을 특징으로 하는 데이터 처리장치.
  17. 제 16 항에 있어서,
    상기 부동 소수점부는, 곱셈 누적 연산을 실행하기 위한 곱셈 누적부를 포함한 것을 특징으로 하는 데이터 처리장치.
  18. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 연산의 결과를, 목적지 레지스터로서 동작하는 상기 제 1 레지스터에 기록하는 것을 특징으로 하는 데이터 처리장치.
  19. 제 2 항에 있어서,
    상기 제 2 레지스터는, 상기 연산을 위한 제 1 입력 오퍼랜드를 저장하는 제 1 오퍼랜드 레지스터로서 동작하는 것을 특징으로 하는 데이터 처리장치.
  20. 제 4 항에 있어서,
    상기 제 3 레지스터는, 상기 연산을 위한 제 2 입력 오퍼랜드를 저장하는 제 2 오퍼랜드 레지스터로서 동작하는 것을 특징으로 하는 데이터 처리장치.
  21. 제 1 항, 제 2 항, 제 3 항 및 제 19 항 중 어느 한 항에 있어서,
    상기 레지스터 뱅크는 32개의 레지스터를 포함한 것을 특징으로 하는 데이터 처리장치.
  22. 제 1 항, 제 2 항, 제 3 항 및 제 19 항 중 어느 한 항에 있어서,
    상기 레지스터는, 연산하여 단일 정밀도 값을 저장하기 위해 개별적으로 조정되거나 또는 연산하여 배정밀도 값을 저장하기 위해 쌍으로 조정되는 것을 특징으로 하는 데이터 처리장치.
  23. 제 1 항, 제 2 항, 제 3 항 및 제 19 항 중 어느 한 항에 있어서,
    상기 주어진 레지스터 지정 필드는, 상기 주어진 레지스터를 벡터 레지스터로서 사용하여 상기 연산을 실행할 경우 상기 소정 시퀀스의 레지스터내의 시작 레지스터를 지정하는 것을 특징으로 하는 데이터 처리장치.
  24. 제 1 항, 제 2 항, 제 3 항 및 제 19 항 중 어느 한 항에 있어서,
    상기 명령 디코더는, 상기 명령어 내에 지정된 상기 주어진 레지스터가 임의의 레지스터 지정 필드와는 무관하게 벡터 레지스터 또는 스칼라 레지스터인지를 정의하는 오페코드에 있는 적어도 하나 그 이상의 데이터 처리 명령어에 응답하는 것을 특징으로 하는 데이터 처리장치.
  25. 각각이 벡터 또는 스칼라 레지스터로 사용되어 동작할 수 있는 복수의 레지스터를 갖는 레지스터 뱅크에 데이터 값들을 저장하는 단계와,
    적어도 상기 실행을 위한 연산을 지정하는 연산 지정 코드와 상기 레지스터 뱅크내의 제 1 레지스터를 지정하는 제 1 레지스터 지정 필드를 갖는 상기 데이터 처리 명령어 중 적어도 하나를 명령 디코더로 디코딩 하는 단계를 포함하고,
    상기 명령 디코더는 주어진 레지스터를 스칼라 레지스터 또는 벡터 레지스터로서 사용하여 연산을 실행하되, 상기 주어진 레지스터가, 상기 주어진 레지스터에 저장된 오퍼랜드에 관해 상기 연산을 한번 실행하는 것을 포함하는 스칼라 레지스터가 되면서 실행하고, 상기 주어진 레지스터가, 상기 주어진 레지스터용 레지스터 지정 필드에 따라 선택된 상기 레지스터 뱅크의 소정 시퀀스의 레지스터 내에 저장된 오퍼랜드에 관해 상기 연산을 복수회 실행하는 것을 포함하는 벡터 레지스터가 되면서 실행하고,
    상기 명령 디코더는, 상기 제 1 레지스터 지정 필드에 응답하고, 상기 제 1 레지스터를 벡터 레지스터 또는 스칼라 레지스터로서 사용하여 상기 연산을 실행하는지를 판단하기 위한 상기 연산 지정 코드와 무관한 것을 특징으로 하는 데이터 처리방법.
KR1020007013162A 1998-05-27 1999-03-09 혼합 벡터/스칼라 레지스터 파일 KR100563219B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/084304 1998-05-27
US09/084,304 US6282634B1 (en) 1998-05-27 1998-05-27 Apparatus and method for processing data having a mixed vector/scalar register file

Publications (2)

Publication Number Publication Date
KR20010043772A KR20010043772A (ko) 2001-05-25
KR100563219B1 true KR100563219B1 (ko) 2006-03-22

Family

ID=22184104

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007013162A KR100563219B1 (ko) 1998-05-27 1999-03-09 혼합 벡터/스칼라 레지스터 파일

Country Status (11)

Country Link
US (3) US6282634B1 (ko)
EP (1) EP1080420B1 (ko)
JP (1) JP2002517037A (ko)
KR (1) KR100563219B1 (ko)
CN (1) CN1191535C (ko)
DE (1) DE69901708T2 (ko)
IL (1) IL139250A0 (ko)
MY (1) MY125652A (ko)
RU (1) RU2212049C2 (ko)
TW (1) TW413766B (ko)
WO (1) WO1999061996A1 (ko)

Families Citing this family (147)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6687722B1 (en) * 2000-03-16 2004-02-03 Agere Systems, Inc. High-speed/low power finite impulse response filter
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
WO2002084451A2 (en) * 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
US6842849B2 (en) * 2001-05-21 2005-01-11 Arm Limited Locking source registers in a data processing apparatus
US7363337B2 (en) * 2001-05-25 2008-04-22 Sun Microsystems, Inc. Floating point divider with embedded status information
US7831652B2 (en) * 2001-05-25 2010-11-09 Oracle America, Inc. Floating point multiplier with embedded status information
US7228324B2 (en) * 2001-05-25 2007-06-05 Sun Microsystems, Inc. Circuit for selectively providing maximum or minimum of a pair of floating point operands
US6976050B2 (en) * 2001-05-25 2005-12-13 Sun Microsystems, Inc. System and method for extracting the high part of a floating point operand
US7069289B2 (en) * 2001-05-25 2006-06-27 Sun Microsystems, Inc. Floating point unit for detecting and representing inexact computations without flags or traps
US7191202B2 (en) 2001-05-25 2007-03-13 Sun Microsystems, Inc. Comparator unit for comparing values of floating point operands
US7003540B2 (en) * 2001-05-25 2006-02-21 Sun Microsystems, Inc. Floating point multiplier for delimited operands
US6961744B2 (en) * 2001-05-25 2005-11-01 Sun Microsystems, Inc. System and method for generating an integer part of a logarithm of a floating point operand
US6993549B2 (en) * 2001-05-25 2006-01-31 Sun Microsystems, Inc. System and method for performing gloating point operations involving extended exponents
US7069288B2 (en) * 2001-05-25 2006-06-27 Sun Microsystems, Inc. Floating point system with improved support of interval arithmetic
US7430576B2 (en) * 2001-05-25 2008-09-30 Sun Microsystems, Inc. Floating point square root provider with embedded status information
US7016928B2 (en) * 2001-05-25 2006-03-21 Sun Microsystems, Inc. Floating point status information testing circuit
US7444367B2 (en) * 2001-05-25 2008-10-28 Sun Microsystems, Inc. Floating point status information accumulation circuit
US7613762B2 (en) * 2001-05-25 2009-11-03 Sun Microsystems, Inc. Floating point remainder with embedded status information
US7395297B2 (en) 2001-05-25 2008-07-01 Sun Microsystems, Inc. Floating point system that represents status flag information within a floating point operand
US6970898B2 (en) * 2001-05-25 2005-11-29 Sun Microsystems, Inc. System and method for forcing floating point status information to selected values
US7366749B2 (en) * 2001-05-25 2008-04-29 Sun Microsystems, Inc. Floating point adder with embedded status information
US7133890B2 (en) * 2001-05-25 2006-11-07 Sun Microsystems, Inc. Total order comparator unit for comparing values of two floating point operands
US6779013B2 (en) * 2001-06-04 2004-08-17 Intel Corporation Floating point overflow and sign detection
US7080111B2 (en) * 2001-06-04 2006-07-18 Intel Corporation Floating point multiply accumulator
GB2382674B (en) 2001-10-31 2005-11-16 Alphamosaic Ltd Data access in a processor
US7376812B1 (en) * 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7937559B1 (en) 2002-05-13 2011-05-03 Tensilica, Inc. System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
WO2004015563A1 (en) * 2002-08-09 2004-02-19 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
GB2424503B (en) * 2002-09-17 2007-06-20 Micron Technology Inc An active memory device
CN100581063C (zh) * 2002-09-27 2010-01-13 艾比奎蒂数字公司 数字音频广播系统中用于交织信号比特的方法和设备
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7219117B2 (en) * 2002-12-17 2007-05-15 Sun Microsystems, Inc. Methods and systems for computing floating-point intervals
US7236999B2 (en) * 2002-12-17 2007-06-26 Sun Microsystems, Inc. Methods and systems for computing the quotient of floating-point intervals
US20040193838A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Vector instructions composed from scalar instructions
US7024544B2 (en) * 2003-06-24 2006-04-04 Via-Cyrix, Inc. Apparatus and method for accessing registers in a processor
US7299170B2 (en) * 2003-06-28 2007-11-20 Transitive Limited Method and apparatus for the emulation of high precision floating point instructions
GB2409060B (en) * 2003-12-09 2006-08-09 Advanced Risc Mach Ltd Moving data between registers of different register data stores
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
CN1306395C (zh) * 2004-02-13 2007-03-21 中国科学院计算技术研究所 Mips指令集的处理器扩展指令及其编码方法和部件
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US7395410B2 (en) * 2004-07-06 2008-07-01 Matsushita Electric Industrial Co., Ltd. Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor
US8624906B2 (en) 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US8698817B2 (en) 2004-11-15 2014-04-15 Nvidia Corporation Video processor having scalar and vector components
US20060179096A1 (en) * 2005-02-10 2006-08-10 International Business Machines Corporation System and method for a fused multiply-add dataflow with early feedback prior to rounding
US8250348B2 (en) * 2005-05-19 2012-08-21 International Business Machines Corporation Methods and apparatus for dynamically switching processor mode
US20060265555A1 (en) * 2005-05-19 2006-11-23 International Business Machines Corporation Methods and apparatus for sharing processor resources
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
JP5096923B2 (ja) * 2005-11-25 2012-12-12 パナソニック株式会社 動的再構成論理回路を有するマルチスレッドプロセッサ
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
JP4934356B2 (ja) * 2006-06-20 2012-05-16 株式会社日立製作所 映像処理エンジンおよびそれを含む映像処理システム
US7865882B2 (en) * 2006-08-18 2011-01-04 International Business Machines Corporation Fast correctly rounding floating point conversion and identifying exceptional conversion
US9223751B2 (en) * 2006-09-22 2015-12-29 Intel Corporation Performing rounding operations responsive to an instruction
US20080079713A1 (en) * 2006-09-28 2008-04-03 Eric Oliver Mejdrich Area Optimized Full Vector Width Vector Cross Product
US20080079712A1 (en) * 2006-09-28 2008-04-03 Eric Oliver Mejdrich Dual Independent and Shared Resource Vector Execution Units With Shared Register File
US7694193B2 (en) * 2007-03-13 2010-04-06 Hewlett-Packard Development Company, L.P. Systems and methods for implementing a stride value for accessing memory
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
CN101216756B (zh) * 2007-12-28 2011-03-23 中国科学院计算技术研究所 一种risc处理器装置及其模拟浮点栈操作的方法
US8681861B2 (en) 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US9690591B2 (en) 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
CN101819518B (zh) * 2009-02-26 2013-09-11 国际商业机器公司 在事务内存中快速保存上下文的方法和装置
US8341119B1 (en) * 2009-09-14 2012-12-25 Netapp, Inc. Flexible copies having different sub-types
CN101819516B (zh) * 2010-01-22 2014-04-16 龙芯中科技术有限公司 能够复用浮点操作用构件和向量操作用构件的处理器
US8606840B2 (en) * 2010-03-17 2013-12-10 Oracle International Corporation Apparatus and method for floating-point fused multiply add
US8495124B2 (en) * 2010-06-23 2013-07-23 International Business Machines Corporation Decimal floating point mechanism and process of multiplication without resultant leading zero detection
US8914430B2 (en) * 2010-09-24 2014-12-16 Intel Corporation Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions
US20120185670A1 (en) * 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
US20120216015A1 (en) * 2011-02-22 2012-08-23 Mitra Sumanranjan S System and method to concurrently execute a plurality of object oriented platform independent programs by utilizing memory accessible by both a processor and a co-processor
CN102200964B (zh) * 2011-06-17 2013-05-15 孙瑞琛 基于并行处理的fft装置及其方法
US9727336B2 (en) 2011-09-16 2017-08-08 International Business Machines Corporation Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers
US9411585B2 (en) * 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN107391086B (zh) * 2011-12-23 2020-12-08 英特尔公司 改进置换指令的装置和方法
CN111831335A (zh) * 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
CN104126171B (zh) 2011-12-27 2018-08-07 英特尔公司 用于基于两个源写掩码寄存器生成依赖向量的系统、装置和方法
US9569211B2 (en) 2012-08-03 2017-02-14 International Business Machines Corporation Predication in a vector processor
US9575755B2 (en) 2012-08-03 2017-02-21 International Business Machines Corporation Vector processing in an active memory device
US9632777B2 (en) 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9594724B2 (en) * 2012-08-09 2017-03-14 International Business Machines Corporation Vector register file
CN103281365B (zh) * 2013-05-20 2016-12-28 深圳市京华科讯科技有限公司 分布式虚拟化架构
US8626813B1 (en) * 2013-08-12 2014-01-07 Board Of Regents, The University Of Texas System Dual-path fused floating-point two-term dot product unit
US20150293767A1 (en) * 2014-04-11 2015-10-15 Fujitsu Limited Rotating register file with bit expansion support
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
US10762164B2 (en) 2016-01-20 2020-09-01 Cambricon Technologies Corporation Limited Vector and matrix computing device
CN106991077A (zh) * 2016-01-20 2017-07-28 南京艾溪信息科技有限公司 一种矩阵计算装置
US10331449B2 (en) * 2016-01-22 2019-06-25 Arm Limited Encoding instructions identifying first and second architectural register numbers
CN111651203B (zh) 2016-04-26 2024-05-07 中科寒武纪科技股份有限公司 一种用于执行向量四则运算的装置和方法
CN111651201B (zh) * 2016-04-26 2023-06-13 中科寒武纪科技股份有限公司 一种用于执行向量合并运算的装置和方法
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
WO2018174930A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10175912B1 (en) * 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit
US10474464B2 (en) * 2017-07-05 2019-11-12 Deep Vision, Inc. Deep vision processor
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
WO2020067908A1 (en) * 2018-09-27 2020-04-02 Intel Corporation Apparatuses and methods to accelerate matrix multiplication
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
CN110928577B (zh) * 2019-11-14 2021-11-05 中国人民解放军国防科技大学 一种带异常返回的向量存储指令的执行方法
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US20200218508A1 (en) * 2020-03-13 2020-07-09 Intel Corporation Floating-point decomposition circuitry with dynamic precision
US11513847B2 (en) 2020-03-24 2022-11-29 Deep Vision Inc. System and method for queuing commands in a deep learning processor
CN111459546B (zh) * 2020-03-30 2023-04-18 芯来智融半导体科技(上海)有限公司 一种实现操作数位宽可变的装置及方法
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US12001385B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
CN112988236B (zh) * 2021-04-20 2023-04-14 浙江华忆芯科技有限公司 数据存储方法及装置、存储介质、电子装置
GB202112803D0 (en) 2021-09-08 2021-10-20 Graphcore Ltd Processing device using variable stride pattern
US11900116B1 (en) 2021-09-29 2024-02-13 International Business Machines Corporation Loosely-coupled slice target file data
US12001848B2 (en) * 2022-01-30 2024-06-04 Simplex Micro, Inc. Microprocessor with time counter for statically dispatching instructions with phantom registers
US11954491B2 (en) 2022-01-30 2024-04-09 Simplex Micro, Inc. Multi-threading microprocessor with a time counter for statically dispatching instructions
CN114816532B (zh) * 2022-04-20 2023-04-04 湖南卡姆派乐信息科技有限公司 一种提高risc-v二进制代码密度的寄存器分配方法
CN115951936B (zh) * 2023-01-17 2023-05-26 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437043A (en) * 1991-11-20 1995-07-25 Hitachi, Ltd. Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3535694A (en) 1968-01-15 1970-10-20 Ibm Information transposing system
JPS5725069A (en) 1980-07-21 1982-02-09 Hitachi Ltd Vector data processing equipment
JPS61173345A (ja) 1985-01-29 1986-08-05 Hitachi Ltd 計算機システム
US4888679A (en) * 1988-01-11 1989-12-19 Digital Equipment Corporation Method and apparatus using a cache and main memory for both vector processing and scalar processing by prefetching cache blocks including vector data elements
US5261113A (en) * 1988-01-25 1993-11-09 Digital Equipment Corporation Apparatus and method for single operand register array for vector and scalar data processing operations
US5187796A (en) * 1988-03-29 1993-02-16 Computer Motion, Inc. Three-dimensional vector co-processor having I, J, and K register files and I, J, and K execution units
US5043886A (en) * 1988-09-16 1991-08-27 Digital Equipment Corporation Load/store with write-intent for write-back caches
US4969118A (en) * 1989-01-13 1990-11-06 International Business Machines Corporation Floating point unit for calculating A=XY+Z having simultaneous multiply and add
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US5544337A (en) * 1989-12-29 1996-08-06 Cray Research, Inc. Vector processor having registers for control by vector resisters
EP0820005B1 (en) * 1990-08-24 2001-11-07 Matsushita Electric Industrial Co., Ltd. Method and apparatus for computing floating point data
JP2718254B2 (ja) * 1990-10-02 1998-02-25 日本電気株式会社 ベクトル処理装置
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
US5669013A (en) * 1993-10-05 1997-09-16 Fujitsu Limited System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
GB2291515B (en) 1994-07-14 1998-11-18 Advanced Risc Mach Ltd Data processing using multiply-accumulate instructions
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
US5548544A (en) * 1994-10-14 1996-08-20 Ibm Corporation Method and apparatus for rounding the result of an arithmetic operation
US5550767A (en) * 1994-10-14 1996-08-27 Ibm Corporation Method and apparatus for detecting underflow and overflow
US5537606A (en) 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US5867413A (en) * 1995-10-17 1999-02-02 Hitachi Micro Systems, Inc. Fast method of floating-point multiplication and accumulation
US5822606A (en) * 1996-01-11 1998-10-13 Morton; Steven G. DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5892698A (en) * 1996-04-04 1999-04-06 Hewlett-Packard Company 2's complement floating-point multiply accumulate unit
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US5917741A (en) * 1996-08-29 1999-06-29 Intel Corporation Method and apparatus for performing floating-point rounding operations for multiple precisions using incrementers
US5805875A (en) * 1996-09-13 1998-09-08 International Computer Science Institute Vector processing system with multi-operation, run-time configurable pipelines
US6006315A (en) * 1996-10-18 1999-12-21 Samsung Electronics Co., Ltd. Computer methods for writing a scalar value to a vector
US5991531A (en) * 1997-02-24 1999-11-23 Samsung Electronics Co., Ltd. Scalable width vector processor architecture for efficient emulation
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6115729A (en) * 1998-08-20 2000-09-05 Arm Limited Floating point multiply-accumulate unit
US6148314A (en) * 1998-08-28 2000-11-14 Arm Limited Round increment in an adder circuit

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437043A (en) * 1991-11-20 1995-07-25 Hitachi, Ltd. Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers

Also Published As

Publication number Publication date
EP1080420B1 (en) 2002-06-05
DE69901708T2 (de) 2002-12-05
JP2002517037A (ja) 2002-06-11
WO1999061996A1 (en) 1999-12-02
DE69901708D1 (de) 2002-07-11
US6332186B1 (en) 2001-12-18
KR20010043772A (ko) 2001-05-25
IL139250A0 (en) 2001-11-25
CN1303501A (zh) 2001-07-11
MY125652A (en) 2006-08-30
CN1191535C (zh) 2005-03-02
EP1080420A1 (en) 2001-03-07
US6360189B1 (en) 2002-03-19
RU2212049C2 (ru) 2003-09-10
US6282634B1 (en) 2001-08-28
TW413766B (en) 2000-12-01

Similar Documents

Publication Publication Date Title
KR100563219B1 (ko) 혼합 벡터/스칼라 레지스터 파일
KR100563220B1 (ko) 재순환 레지스터 파일
JP3969895B2 (ja) データ型によるコプロセッサの操作コードの分割
JP3828677B2 (ja) レジスタとメモリとの間のデータ転送
US7287152B2 (en) Conditional execution per lane
US7127593B2 (en) Conditional execution with multiple destination stores
US6304963B1 (en) Handling exceptions occuring during processing of vector instructions
US6334176B1 (en) Method and apparatus for generating an alignment control vector
EP0427245B1 (en) Data processor capable of simultaneously executing two instructions
US7017032B2 (en) Setting execution conditions
JP2834292B2 (ja) データ・プロセッサ
KR20040101215A (ko) 길이가 다른 명령어집합 구조를 갖는 설정가능형데이터프로세서
US7861071B2 (en) Conditional branch instruction capable of testing a plurality of indicators in a predicate register
JP2001034471A (ja) Vliw方式プロセッサ
JPH11353305A (ja) ベクトルレジスタのアドレス指定
EP1080421B1 (en) Recirculating register file
WO1999061997A1 (en) Recirculating register file
KR101056553B1 (ko) 마이크로프로세서 내에서 시프팅 및 라운딩 연산들을 수행하기 위한 방법 및 시스템

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: 20130221

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140220

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150226

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160218

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170220

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20180219

Year of fee payment: 13

EXPY Expiration of term