KR100563220B1 - Recycle register file - Google Patents

Recycle register file Download PDF

Info

Publication number
KR100563220B1
KR100563220B1 KR1020007013163A KR20007013163A KR100563220B1 KR 100563220 B1 KR100563220 B1 KR 100563220B1 KR 1020007013163 A KR1020007013163 A KR 1020007013163A KR 20007013163 A KR20007013163 A KR 20007013163A KR 100563220 B1 KR100563220 B1 KR 100563220B1
Authority
KR
South Korea
Prior art keywords
register
registers
data
instruction
vector
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Lifetime
Application number
KR1020007013163A
Other languages
Korean (ko)
Other versions
KR20010043773A (en
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 KR20010043773A publication Critical patent/KR20010043773A/en
Application granted granted Critical
Publication of KR100563220B1 publication Critical patent/KR100563220B1/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

복수의 레지스터를 포함한 레지스터 뱅크를 갖는 부동 소수점부는, 다른 레지스터로부터 일련의 데이터 값에 따라 복수회 지정된 연산을 실행하는 벡터 연산을 지원한다. 이때의 레지스터 뱅크는, 부분 집합으로 분할되고, 부분 집합내에 랩핑하는 벡터 연산 랩핑에서 사용된 일련의 레지스터를 갖는다. 이 부분 집합은, 연속적인 레지스터의 범위를 해체한다. 그 범위내의 랩핑은, 콤팩트 코드를 허용하여, FIR 필터링 및 매트릭스 변형과 같은 DSP 연산을 수행하는데 효율적이다.The floating point unit having a register bank including a plurality of registers supports a vector operation for executing a specified operation multiple times in accordance with a series of data values from another register. The register bank at this time is divided into subsets and has a series of registers used in vector operation wrapping that wraps in the subset. This subset breaks the range of consecutive registers. Wrapping within that range allows for compact code, which is efficient for performing DSP operations such as FIR filtering and matrix transformation.

데이터 처리장치, 부동 소수점부, 벡터 레지스터, 스칼라 레지스터, 명령 디코더Data Processing Unit, Floating Point Unit, Vector Register, Scalar Register, Instruction Decoder

Description

재순환 레지스터 파일{RECIRCULATING REGISTER FILE} Recycle register file {RECIRCULATING REGISTER FILE}             

본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 레지스터 뱅크를 갖고, 벡터 연산을 지원하는 데이터 처리 시스템에 관한 것이다.The present invention relates to the field of data processing. In particular, the present invention relates to a data processing system having a register bank and supporting vector operations.

레지스터 뱅크를 갖고 벡터 연산을 지원하는 데이터 처리 시스템을 제공하는 것이 알려져 있다. 이러한 시스템의 예는, 크레이 1(Cray 1) 프로세서 및 디지털 이큅먼트사 멀티티탄 프로세서(Digital Equipment Corporation MultiTitan processor)가 있다.It is known to provide a data processing system having a register bank and supporting vector operations. Examples of such a system are a Cray 1 processor and a Digital Equipment Corporation MultiTitan processor.

크레이 1 프로세서는, 분리된 벡터와 스칼라 레지스터 뱅크를 가진다. 실행하려고 하는 명령어의 오페코드(opcode)가 벡터 연산을 나타내는 경우, 일련의(a sequence of) 데이터 값이 길이 레지스터에 저장된 길이 값과 마스크 레지스터에 저장된 마스크에 따라 그 벡터 레지스터 뱅크로부터 귀환된다. 그 길이는, 데이터 값이 그 시퀀스에 얼마나 있는지를 지정하고, 마스크는 어떤 데이터 값이 그 명령어에 나타낸 벡터 레지스터와 관련된 복수의 데이터 값들로부터 귀환된 것인지를 지정한다.The Cray 1 processor has separate vector and scalar register banks. If the opcode of the instruction to be executed represents a vector operation, a sequence of data values are returned from the vector register bank according to the length value stored in the length register and the mask stored in the mask register. The length specifies how long the data value is in the sequence, and the mask specifies which data value is returned from the plurality of data values associated with the vector register indicated in the instruction.

멀티티탄 프로세서는, 스칼라 또는 벡터로서 동작할 수 있는 레지스터 중 단일 레지스터 뱅크이다. 이 명령어 자체는, 지정된 레지스터가 스칼라 또는 벡터인지를 나타내는 플래그와, 벡터 레지스터가 사용될 때 시퀀스내의 많은 데이터 값을 나타내는 길이 필드를 포함한다.A multititanium processor is a single register bank of registers that can operate as scalars or vectors. The instruction itself includes a flag indicating whether the specified register is a scalar or a vector, and a length field indicating the number of data values in the sequence when the vector register is used.

벡터 명령어 그들 자체는, 단일 명령어가 복수의 데이터 처리 연산을 지정할 수 있기 때문에 그 벡터 명령어들이 코드 밀도를 증가시키는 것과 같이 바람직하다. 오디오와 같은 디지털 신호 처리 또는 그래픽 처리는, 일련의 관련된 데이터 값에 관한 동일한 연산, 예를 들면, 일련의 신호 값과 디지털 필터의 탭 계수를 곱하여서 필터 연산을 수행하기 위한 요구 조건이 종종 있기 때문에 벡터 연산을 활용하는데 특히 아주 적합하다.The vector instructions themselves are desirable as such vector instructions increase code density because a single instruction can specify multiple data processing operations. Digital signal processing or graphics processing, such as audio, often requires the same operation on a series of related data values, for example, a requirement to perform a filter operation by multiplying the series of signal values by the tap coefficients of the digital filter. It is particularly well suited for utilizing vector operations.

또한, 가능한 빠르고 효과적으로 데이터 처리 연산을 수행하는 것이 바람직하다. 속도와 효율성을 증가시키는데 도움이 되는 하나의 방법은, 이미 레지스터 뱅크내에 저장된 데이터 값을 재로드 또는 재위치시키는 것을 피하는데 있다. 이를 해결할 때의 문제점은, 데이터 값을 재사용할 수 있는 명령어 코드가 더 길어지고 더욱 복잡해진다는 것이다. 많은 명령어가 요구된 연산을 지정하는데 필요한 경우, 이는 처리를 천천히하고, 그 레지스터 뱅크내의 데이터 값을 재사용하기 위해 탐색할 목적을 무효로 한다.It is also desirable to perform data processing operations as quickly and effectively as possible. One way to help increase speed and efficiency is to avoid reloading or repositioning data values already stored in register banks. The problem with solving this is that the instruction code, which can reuse data values, becomes longer and more complex. If many instructions are required to specify the required operation, this slows down the process and defeats the purpose of searching to reuse the data values in that register bank.

크레이 1과 멀티티탄 프로세서와 같은 범용 프로세서의 사용의 대안으로서, 특수 목적 디지털 신호 처리 회로는 종종 작은 수의 디지털 신호 처리 연산을 지원하는 특정 역할을 갖는 구성으로 되어 있다. 이들 특수 목적 디지털 신호 처리 회로내에, 일반 기술은, 큰 메모리내에 요구된 데이터 값을 저장하여서 필요에 따른 각각의 조작에 대해 요구된 데이터 값을 페치(fetch)하고 있다. 이 데이터 값은, 그 사용의 순차 및 순서가 큰 메모리를 액세스하는데 사용된 어드레스의 조작에 의해 제어되기 때문에 큰 메모리내의 재로드 또는 재위치시킬 필요가 없다. 이 방법이 갖는 문제점은, 그 회로가 수행될 연산과 일치하게 특별히 설계되어야 하고, 다른 기능과 통합의 유연성 및 용이함이 부족하여서 더욱 전형적인 범용 프로세서의 사용에 의해 제공된다는 것이다.As an alternative to the use of general purpose processors such as Cray 1 and multititanium processors, special purpose digital signal processing circuits are often configured with specific roles to support a small number of digital signal processing operations. In these special purpose digital signal processing circuits, the general technique stores the required data values in a large memory to fetch the required data values for each operation as needed. This data value does not need to be reloaded or relocated in the large memory because it is controlled by the operation of the address used to access the memory with the sequential order of its use. The problem with this method is that the circuit must be specially designed to match the operation to be performed and is provided by the use of more typical general purpose processors due to the lack of flexibility and ease of integration with other functions.

본 발명의 목적은, 레지스터 뱅크와 벡터 연산을 지원하는 명령 디코더를 사용하여 범용 프로세서의 유연성을 유지하면서 효율적이고 빠른 데이터 처리를 제공하는데 있다.It is an object of the present invention to provide efficient and fast data processing while maintaining the flexibility of a general purpose processor using an instruction decoder that supports register banks and vector operations.

본 발명의 일면에 따른 데이터 처리장치는,Data processing apparatus according to an aspect of the present invention,

복수의 어드레스 가능한 레지스터를 가진 레지스터 뱅크와,A register bank having a plurality of addressable registers,

상기 데이터 처리 명령어에 지정된 초기 레지스터에서 시작하는 상기 레지스터 뱅크내의 일련의 레지스터로부터의 데이터 값을 사용하여 복수회 데이터 처리 연산을 실행하는 벡터 연산을 지정하는 적어도 하나의 데이터 처리 명령어에 응답하는 명령 디코더를 포함하고,An instruction decoder responsive to at least one data processing instruction specifying a vector operation that executes a data processing operation multiple times using data values from a series of registers in the register bank starting at an initial register specified in the data processing instruction; Including,

상기 레지스터 뱅크는 레지스터의 적어도 하나의 부분 집합으로 구성되되, 상기 일련의 레지스터는 상기 부분 집합내에 있고,The register bank consists of at least one subset of registers, the series of registers being in the subset,

상기 명령 디코더는 상기 일련의 레지스터를 제어하여 상기 레지스터의 부분 집합 내에 랩(wrap)하는 장치를 제공한다.The command decoder provides an apparatus for controlling the series of registers to wrap within a subset of the registers.

레지스터 뱅크의 레지스터의 부분 집합(즉, 전체 미만)내의 레지스터 랩핑을제공하는 것은, 데이터 값의 재로드 또는 이동을 필요로 하지 않고서 레지스터 뱅크내의 데이터 값을 재사용하는 콤팩트 코드가 기록되게 한다. 각각의 사용에 대한 명령어 코드는, 부분 집합내의 다른 지점에서 시작할 수 있고, 벡터 시퀀스를 분할 하기 위한 여분의 명령어를 제공하지 않고서 필요한 랩핑에 대비하는 하드웨어와 다른 순차에서의 데이터 값을 따를 수 있다. 더욱이, 그들 자신에 관해 랩하는 레지스터로 구성된 부분 집합의 벡터 연산을 수행하는 것은, 부분 집합내에 없는 레지스터 내의 데이터 값의 데이터 전송을 동시에 수행할 가능성을 고려한다. 또한, 레지스터 랩핑은, 예를 들면, 데이터가, 서로 빙글빙글 돌아서 버퍼를 추적하는 지점에 있는 버퍼에 로드(load)되고 버퍼에서 곱해진 링(원) 버퍼형 구성을 위한 하드웨어 지원을 제공하기 때문에 고려될 수 있다.Providing register wrapping within a subset (ie less than all) of registers in a register bank allows a compact code to be written that reuses data values in the register bank without requiring reloading or moving of the data values. The instruction code for each use can start at different points in the subset and follow the data values in hardware and other sequences in preparation for the required wrapping without providing extra instructions to split the vector sequence. Moreover, performing a vector operation on a subset of registers that wraps around themselves considers the possibility of performing data transfers of data values in registers that are not in the subset simultaneously. In addition, register wrapping provides hardware support for a ring (round) buffered configuration, for example, where data is loaded into a buffer at a point where each other turns around and tracks the buffer. Can be considered.

레지스터를 랩핑하는 단일의 부분 집합만 가질 수 있지만, 상기 벡터 연산은, 대응하는 복수의 시퀀스의 레지스터로부터 복수의 각각의 데이터 값을 사용하여 상기 데이터 처리 연산을 실행하고,Although it may only have a single subset of wrapping registers, the vector operation executes the data processing operation using a plurality of respective data values from the registers of the corresponding plurality of sequences,

상기 레지스터 뱅크는 레지스터로 구성된 복수의 부분 집합을 포함하고, 상기 복수의 시퀀스의 레지스터는, 각각의 부분 집합내에 있고,The register bank comprises a plurality of subsets of registers, the registers of the plurality of sequences being in each subset,

상기 명령 디코더는 상기 복수의 시퀀스의 레지스터를 제어하여 레지스터의 각각의 부분 집합내에 랩하는 시스템을 제공하는 장점이 있다.The command decoder has the advantage of providing a system for controlling the registers of the plurality of sequences to wrap within each subset of registers.

디지털 신호 처리 연산내에, 그것은 2개의 시퀀스(에를 들면, 다른 오프셋 또는 매트릭스 연산에서 탭 및 신호 값이 곱해져 누적되는 FIR 연산)로부터 데이터 값을 재사용하는데 종종 필요하여서, 레지스터를 랩핑하는 다수의 부분 집합이 바람직하다.Within a digital signal processing operation, it is often necessary to reuse data values from two sequences (e.g., an FIR operation where the tap and signal values are multiplied and accumulated at different offset or matrix operations), thus enlarging a large subset of the registers This is preferred.

부분 집합을 오버랩할 가능성이 있지만, 실제로 이러한 상황에서 재사용을 필요로 하는 데이터 값은, 보통 꽤 분리되어 있어서 그 부분 집합은 해체될 수도 있다. 이것은 하드웨어 구현을 덜 복잡하게 하는 장점이 된다.Although there is a possibility of overlapping subsets, the data values that actually require reuse in this situation are usually quite separate and the subset may be broken up. This is an advantage that makes the hardware implementation less complex.

부분 집합은, 부분 집합내에 없는 레지스터와 혼합된 위치로부터의 레지스터로 구성된다는 것을 알 것이다. 그러나, 부분 집합은 연속적으로 번호가 매겨진 레지스터의 범위에 있을 때, 프로그래밍 및 구현을 쉽게 한다.It will be appreciated that a subset consists of registers from locations mixed with registers that are not in the subset. However, subsets facilitate programming and implementation when in the range of consecutively numbered registers.

이때의 범위는, 레지스터 뱅크내에 이격될 수 있지만, 바람직한 실시예에서, 그 범위는, 이것이 레지스터 사용가능한 공간을 더 효율적으로 사용하도록 하기 때문에 연속적(contiguous)이다.The range at this time may be spaced within the register bank, but in a preferred embodiment the range is contiguous because it allows for more efficient use of register available space.

벡터 연산을 더 효과적으로 사용하기 위한 본 발명의 능력은, 바람직한 실시예에서, 메모리와, 상기 메모리와 상기 레지스터 뱅크내의 레지스터 사이의 데이터 값의 전송을 제어하기 위한 전송 제어기를 더 포함하되, 상기 전송 제어기는 상기 메모리와 상기 레지스터 뱅크내의 일련의 레지스터 사이의 일련의 데이터 값을 전송하기 위한 다중 전송 명령어에 응답한다.The ability of the present invention to more effectively use vector operations further comprises, in a preferred embodiment, a transfer controller for controlling the transfer of data values between the memory and a register in the memory and the register bank, wherein the transfer controller Responsive to multiple transfer instructions for transferring a series of data values between the memory and a series of registers in the register bank.

레지스터 뱅크내의 레지스터를 갖는 블록에/블록으로부터 데이터 값을 전송할 능력은, 그것이 레지스터를 갖는 블록이 수회 재사용하게 되어서 단일 명령어와 교환되기 때문에, 효율적으로 벡터 연산을 사용하기 위한 본 발명의 능력과 잘 일치한다.The ability to transfer data values to / from a block with a register in a register bank is in good agreement with the ability of the present invention to efficiently use vector operations because it is exchanged for a single instruction because the block with the register will be reused several times. do.

벡터 연산에서 일련의 레지스터의 사용과 레지스터 뱅크를 레지스터를 갖는 소정의 부분 집합으로의 분할은, 그 범위의 끝점 사이에 랩하는 증분기를 통하여 각 범위가 어드레싱되는 바람직한 실시예에서 효율적으로 구현될 수 있다.The use of a series of registers and the division of a register bank into a predetermined subset having registers in vector operations can be efficiently implemented in the preferred embodiment where each range is addressed through an incrementer that wraps between the end points of the range. .

벡터 연산에 사용된 일련의 레지스터는, 많은 형태, 예를 들면 부분 집합내 에 모든 대체 레지스터를 취할 수 있지만, 아주 일반적인 유용한 상황은, 그 시퀀스가 일련의 연속적인 레지스터의 하나이다.A series of registers used in vector operations can take all of the alternate registers in many forms, for example a subset, but a very common useful situation is that the sequence is one of a series of consecutive registers.

상기 기술은, 레지스터 뱅크를 갖고 벡터 연산을 지원하는 임의의 프로세서에서 사용될 수 있다. 그러나, 콤팩트 코드를 허용하고 레지스터내의 데이터 값을 재사용할 능력은, 특별히 유용하고, 레지스터 뱅크와 명령 디코더가 부동 소수점부내에 있는 실시예에서 다른 이유로 간섭하지 못한다는 것을 알 수 있다.The technique can be used in any processor that has a register bank and supports vector operations. However, the ability to allow compact code and reuse data values in registers is particularly useful, and it can be seen that register banks and instruction decoders do not interfere for other reasons in embodiments where they are in the floating point portion.

본 발명의 다른 면에 따른 데이터 처리 방법은,Data processing method according to another aspect of the present invention,

레지스터 뱅크의 복수의 어드레스 가능한 레지스터내에 데이터 값을 저장하는 단계와,Storing data values in a plurality of addressable registers in a register bank;

적어도 하나의 데이터 처리 명령어에 따라 벡터 연산을 지정하고, 상기 데이터 처리 명령어에 지정된 초기 레지스터에서 시작하여 상기 레지스터 뱅크내의 일련의 레지스터로부터의 데이터 값을 사용하여 복수회 데이터 처리 연산을 실행하는 단계를 포함하되,Specifying a vector operation in accordance with at least one data processing instruction and executing the data processing operation multiple times using data values from a series of registers in the register bank starting at the initial register specified in the data processing instruction. But

상기 레지스터 뱅크는 레지스터의 적어도 하나의 부분 집합으로 구성되되, 상기 일련의 레지스터는 상기 부분 집합내에 있고,The register bank consists of at least one subset of registers, the series of registers being in the subset,

상기 실행을 하는 동안, 상기 일련의 레지스터는, 레지스터의 상기 부분 집합내에 랩하는 방법을 제공한다.During the execution, the series of registers provides a way to wrap within the subset of registers.

이 기술은, 탭 계수 값과 신호 값이 각 벡터 연산으로 변하는 사이에 상대적인 오프셋으로 수회 재사용되는 FIR 필터 연산을 효과적으로 제공할 때 특히 유용하다.
This technique is particularly useful when effectively providing a FIR filter operation that is reused several times at a relative offset between the tap coefficient value and the signal value changing with each vector operation.

본 발명의 실시예들을 첨부 도면들을 참조하여 설명하겠다. Embodiments of the present invention will be described with reference to the accompanying drawings.             

도 1은 데이터 처리 시스템의 개략도이고,1 is a schematic diagram of a data processing system,

도 2는 스칼라 및 벡터 레지스터를 지원하는 부동 소수점부(FPU; Floating Point Unit)를 나타내고,2 illustrates a floating point unit (FPU) supporting scalar and vector registers,

도 3은 단일 정밀도 연산의 경우에, 주어진 레지스터가 벡터 또는 스칼라 레지스터인지를 판단하는 방법을 나타낸 흐름도이고,3 is a flowchart illustrating a method of determining whether a given register is a vector or a scalar register in the case of a single precision operation;

도 4는 배정밀도 연산의 경우에, 주어진 레지스터가 벡터 또는 스칼라인지를 판단하는 방법을 나타낸 흐름도이고,4 is a flowchart illustrating a method of determining whether a given register is a vector or a scalar in case of double precision operation,

도 5는 단일 정밀도 연산 동안에 각 부분 집합(subset)내의 랩핑(wrapping)으로 그 레지스터 뱅크를 부분 집합으로 나눈 것을 나타내고,5 shows the register bank divided into subsets by wrapping within each subset during a single precision operation,

도 6은 배정밀도 연산 동안에 각 부분 집합내의 랩핑으로 그 레지스터 뱅크를 부분 집합으로 나눈 것을 나타내고,6 shows that register bank is divided into subsets by wrapping within each subset during double precision operations,

도 7A 내지 도 7C는 코프로세서 명령어의 메인 프로세서 도면, 코프로세서 명령어의 단일 및 배정밀도 코프로세서 도면, 코프로세서 명령어의 단일 정밀도 코프로세서 도면을 각각 나타내고,7A-7C illustrate a main processor diagram of coprocessor instructions, a single and double precision coprocessor diagram of coprocessor instructions, and a single precision coprocessor diagram of coprocessor instructions, respectively;

도 8은 단일 및 배정밀도 코프로세서를 제어하는 메인 프로세서를 나타내고,8 shows a main processor controlling single and double precision coprocessors,

도 9는 단일 정밀도 코프로세서를 제어하는 메인 프로세서를 나타내고,9 shows a main processor controlling a single precision coprocessor,

도 10은 수신(accept) 신호가 수신된 코프로세서 명령에 대해 메인 프로세서로 복귀시켜야 하는지를 판단하는 단일 및 배정밀도 코프로세서내의 회로도,10 is a circuit diagram within a single and double precision coprocessor that determines whether an accept signal should return to the main processor for a received coprocessor instruction;

도 11은 수신 신호가 수신된 코프로세서 명령에 대해 메인 프로세서로 복귀시켜야 하는지를 판단하는 단일 정밀도 코프로세서내의 회로도, 11 is a circuit diagram within a single precision coprocessor for determining whether a received signal should return to the main processor for a received coprocessor instruction;             

도 12는 메인 프로세서내의 핸들링 외의 정의되지 않은 명령어를 나타내고,12 illustrates undefined instructions other than handling within the main processor,

도 13은 본 발명의 바람직한 실시예에 따른 코프로세서의 소자를 나타낸 블록도이고,13 is a block diagram illustrating a device of a coprocessor according to a preferred embodiment of the present invention.

도 14는 본 발명의 바람직한 실시예에 따른 레지스터 제어의 동작과 명령어 발생 로직(logic)을 나타낸 흐름도이고,14 is a flowchart illustrating the operation of register control and instruction generation logic in accordance with a preferred embodiment of the present invention;

도 15는 본 발명의 바람직한 실시예에 따른 부동 소수점 레지스터 내용의 예를 나타내고,15 shows an example of the contents of a floating point register according to a preferred embodiment of the present invention,

도 16은 크레이 1 프로세서내의 레지스터 뱅크를 나타내고,16 shows a register bank in a Cray 1 processor,

도 17은 멀티티탄 프로세서내의 레지스터 뱅크를 나타낸다.
17 shows a register bank in a multititanium processor.

도 1은 메인 프로세서(24), 부동 소수점부 코프로세서(26), 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)을 구비한 데이터 처리 시스템(22)을 나타낸다. 여기서, 메인 프로세서(24), 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)은 메인 버스(34)를 통해 연결되어 있다. 코프로세서 버스(36)는 메인 프로세서(24)를 부동 소수점부 코프로세서(26)에 연결한다.1 shows a data processing system 22 having a main processor 24, a floating point coprocessor 26, a cache memory 28, a main memory 30, and an input / output system 32. Here, the main processor 24, the cache memory 28, the main memory 30, and the input / output system 32 are connected through the main bus 34. Coprocessor bus 36 connects main processor 24 to floating-point coprocessor 26.

연산에 있어서, 메인 프로세서(24)(또한, ARM 코어로서 언급함)는, 캐시 메모리(28), 메인 메모리(30) 및 입출력 시스템(32)과 상호작용을 포함하는 일반적인 형태의 데이터 처리 연산을 제어하도록 데이터 처리 명령어의 스트림을 실행한다. 이때의 데이터 처리 명령어의 스트림 내에 코프로세서 명령어가 삽입된다. 메인 프로세서(24)는, 이들 코프로세서 명령어를 부가 코프로세서에 의해 실행되는 형태로 서 인지한다. 따라서, 이 메인 프로세서(24)는, 임의의 부가 코프로세서가 코프로세서 명령어를 수신한 곳으로부터 코프로세서 버스(36)에 관한 이들 코프로세서 명령어를 발생(issue)한다. 이 경우에, 부동 소수점부 코프로세서(26)는, 검출하려고 할 임의의 수신된 코프로세서 명령어를 수신하여 실행할 것이다. 이 검출은 코프로세서 명령어내의 코프로세서 번호 필드를 통하여 한다.In operation, the main processor 24 (also referred to as ARM core) performs a general form of data processing operation, including interaction with the cache memory 28, the main memory 30, and the input / output system 32. Run a stream of data processing instructions to control. The coprocessor instruction is inserted into the stream of the data processing instruction at this time. The main processor 24 recognizes these coprocessor instructions as being executed by the additional coprocessor. Thus, this main processor 24 issues these coprocessor instructions on the coprocessor bus 36 from where any additional coprocessor received the coprocessor instructions. In this case, floating point coprocessor 26 will receive and execute any received coprocessor instructions to be detected. This detection is made through the coprocessor number field in the coprocessor instruction.

도 2는 그 부동 소수점부 코프로세서(26)를 더욱 상세하게 개략적으로 나타낸 것이다. 이 부동 소수점부 코프로세서(26)는, 32개의 32비트 레지스터(도 2에 적게 도시함)로 구성된 레지스터 뱅크(38)를 포함한다. 이들 레지스터는, 32 비트 데이터 값을 각각 저장하는 단일 정밀도 레지스터로서 개별적으로 또는 64비트 데이터 값을 함께 저장한 쌍으로서 연산할 수 있다. 부동 소수점부 코프로세서(26)내에 파이프라인식 곱셈 누적부(40)와 로드 저장 제어부(42)로 구성되어 있다. 적합한 상황에서, 그 곱셈 누적부(40)와 로드 저장 제어부(42)는, 로드 저장 제어부(42)가 그 곱셈 누적부(40)에 의해 사용되지 않은 데이터 값들을 메인 프로세서(24)를 통해 부동 소수점부 코프로세서(26)에게/로부터 전송하는 동안, 레지스터 뱅크(38)내의 데이터 값들을 산술 연산(곱셈 누적 연산 뿐만 아니라 다른 연산들도 포함)을 수행하는 곱셈 누적부(40)와 동시에 연산할 수 있다.2 schematically shows the floating point coprocessor 26 in more detail. This floating point coprocessor 26 includes a register bank 38 composed of 32 32-bit registers (less shown in FIG. 2). These registers can be computed individually as single precision registers storing 32-bit data values, or as pairs of 64-bit data values stored together. The floating point coprocessor 26 includes a pipelined multiplication accumulator 40 and a load storage controller 42. In a suitable situation, the multiplication accumulator 40 and the load storage control section 42 may cause the load storage control section 42 to float data values not used by the multiplication accumulator 40 through the main processor 24. During transfer to / from the decimal point coprocessor 26, the data values in register bank 38 can be operated concurrently with the multiplication accumulator 40 performing arithmetic operations (including multiplication operations as well as other operations). Can be.

수신된 코프로세서 명령어는, 부동 소수점부 코프로세서(26)내의 명령어 레지스터(44)내에 래치된다. 이렇게 단순한 면에서 코프로세서 명령어는, 3개의 레지스터 지정 필드 R1, R2 및 R3(사실, 이들 필드는, 쪼갤 수도 있고 전체 명령어 내에 다르게 흩어질 수도 있다)에 뒤따르는 오페코드부로 구성된 것이라고 생각할 수 있다. 이들 레지스터 지정 필드 R1, R2 및 R3은, 수행되는 데이터 처리 연산을 위한 목적지, 제 1 소오스 및 제 2 소오스의 역할을 하는 레지스터 뱅크(38)내의 레지스터들에 대응한다. 벡터 제어 레지스터(46)(추가 기능을 포함하는 보다 큰 레지스터의 일부일 수도 있음)는, 부동 소수점부 코프로세서(26)에 의해 수행될 수도 있는 벡터 연산용 길이 값과 스트라이드 값을 저장한다. 또한, 이 벡터 제어 레지스터(46)를 초기화하고 벡터 제어 레지스터 로드 명령어에 따라 길이 및 스트라이드 값으로 갱신할 수도 있다. 이 벡터 길이 및 스트라이드 값을 부동 소수점부 코프로세서(26)내에 전체적으로 적용함에 따라 이 값들이 자체 수정 코드에 의존하지 않고서 전체를 기반으로 동적으로 변경되게 한다.The received coprocessor instructions are latched in instruction register 44 in floating point coprocessor 26. In this simple way, a coprocessor instruction can be thought of as being composed of an opcode section following three register designation fields R1, R2, and R3 (in fact, these fields may be split or otherwise scattered within the entire instruction). These register designation fields R1, R2, and R3 correspond to registers in register bank 38 that serve as destinations, first and second sources for the data processing operations to be performed. The vector control register 46 (which may be part of a larger register that includes additional functionality) stores the length and stride values for vector operations that may be performed by the floating point coprocessor 26. It is also possible to initialize this vector control register 46 and update it with the length and stride values according to the vector control register load instruction. Applying this vector length and stride values globally in the floating point coprocessor 26 causes these values to change dynamically based on the whole without relying on self modifying code.

레지스터 제어 및 명령어 발생부(48), 로드 저장 제어부(42) 및 벡터 제어부(50)를 함께 고려하여 명령 디코더 역할의 주요 부분을 수행할 수 있다. 이 레지스터 제어 및 명령어 발생부(48)는, 오페코드와 3개의 레지스터 지정 필드 R1, R2 및 R3에 응답하고, 그 오페코드에 관한 임의의 디코드를 수행하지 않거나 그 벡터 제어부(50)를 사용하지 않고서 먼저 초기 레지스터 액세스(어드레스) 신호들을 레지스터 뱅크(38)에 출력한다. 이러한 방법으로 초기 레지스터 값들에 직접 액세스하므로 보다 빠른 실행을 달성하는데 도움이 된다. 벡터 레지스터가 지정될 경우, 벡터 제어부(50)는 3비트 증분기(가산기)(52)를 사용하여 필요한 레지스터 액세스 신호의 시퀀스를 발생한다. 이 벡터 제어부(50)는, 레지스터 뱅크(38)의 어드레싱을 수행할 때에 그 벡터 제어 레지스터(46)내에 저장된 길이 값과 스트라이드 값에 응답한다. 레지스터 스코어 보드(54)는, 그 파이프라인식 곱셈 누적부(40)와 동시에 동작하는 로드 저장 제어부(42)가 어떤 데이터 일관성 문제도 발생하지 않도록 레지스터 록킹을 수행하도록 구성되어 있다(이 레지스터 스코어 보드(54)를 레지스터 제어 및 명령어 발생부(48)의 일부로 바꾸어 생각할 수도 있다).In consideration of the register control and the instruction generator 48, the load storage controller 42, and the vector controller 50, the main part of the instruction decoder may be performed. This register control and instruction generation unit 48 responds to the opcode and three register designation fields R1, R2, and R3, and does not perform any decoding on the opcode or use the vector control unit 50. First outputs the initial register access (address) signals to register bank 38. In this way, direct access to initial register values helps to achieve faster execution. If a vector register is specified, the vector control section 50 generates a sequence of necessary register access signals using a 3-bit incrementer (adder) 52. The vector control section 50 responds to the length value and the stride value stored in the vector control register 46 when addressing the register bank 38. The register score board 54 is configured to perform register locking so that the load storage control section 42 operating simultaneously with the pipelined multiplication accumulator 40 does not cause any data consistency problems (this register score board). (54) may be considered as part of the register control and instruction generation unit 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 오퍼랜드의 형태가 된다). 또한, 일부 명령어(예를 들면, 비교, 제로 또는 절대값과 비교)는 목적지 레지스터(예를 들면, 출력이 조건 플래그임)가 없을 수도 있거나 보다 소수의 입력 오퍼랜드(제로와의 비교는 하나의 입력 오퍼랜드만 가짐)를 가질 수도 있다. 이러한 경우에, 벡터/스칼라 성질과 같은 옵션을 지정하는데 이용할 수 있는 더 많은 오페코드 비트 공간이 있어서, 레지스터의 전 범위를 각 오퍼랜드(예를 들면, 비교는, 항상 레지스터가 무엇이든지 완전히 스칼라일 수도 있음)에 이용할 수 있다. The opcodes in the instruction register 44 specify the nature of the data processing operation to be performed (e.g., whether the instruction is add, subtract, multiply, divide, load, store ...). This is independent of the vector or scalar nature of the register being specified. This also simplifies instruction decoding and set-up of the multiply accumulator 40. The first register designation value R1 and the second register designation value R2 together encode the vector / scalar nature of the operation specified by the opcode. In general, the three cases supported by the encoding are S = S * S (e.g., basic arbitrary mathematical calculations as generated by the C compiler from a C code block), V = V op S (e.g. For example, the magnitude of the vector component) and V = V op V (e.g., matrix operations such as FIR filters and graphical transformations) (in this case, "op" denotes a general operation and syntax is the destination). = Second operand op 1 form of operand). Also, some instructions (eg, compare, zero, or compare with absolute values) may be missing a destination register (eg, the output is a condition flag) or fewer input operands (comparison with zero is one input). Only operands). In this case, there is more opcode bit space available to specify options such as the vector / scalar property, so that the entire range of registers can be fully scalar for each operand (e.g., always a register of whatever register). Available).             

명령 디코더의 주요 부분의 역할을 함께 수행하는 레지스터 제어 및 명령어 발생부(48) 및 벡터 제어부(50)는, 지정된 데이터 처리 연산의 벡터/스칼라 성질을 판단하여 제어하기 위한 제 1 레지스터 지정 필드 R1 및 제 2 레지스터 지정 필드 R2에 응답한다. 벡터 제어 레지스터(46)내에 저장된 길이 값이 1의 길이(제로의 저장 값에 해당함)를 나타내는 경우, 이는 스칼라 연산만의 초기 표시로서 사용할 수 있다는 것을 주목해야 할 것이다.The register control and instruction generation unit 48 and the vector control unit 50, which together perform the role of the main part of the instruction decoder, may include the first register designation field R1 and Respond to the second register designation field R2. It should be noted that if the length value stored in vector control register 46 represents a length of 1 (corresponding to a stored value of zero), it can be used as an initial indication of scalar operations only.

도 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에서 각각 인식한다.3 is a flow diagram illustrating the processing logic used to decode the vector / scalar property from the register designation value in single precision mode. In step 56, a check is made as to whether the vector length is set to 1 (which equals the length value zero) as a whole. If the vector length is 1, all registers are treated as scalars in step 58. In step 60, a check is made as to whether the destination register R1 is in the range of SO to S7. If it is within that range, the operation is all scalar and in the form S = S op S, as shown in step 62. If it is not within the range in step 60, the destination is determined as a vector as shown in step 64. If this destination is a vector, the encoding also treats the second operand as a vector. Thus, there are two possibilities that exist at this stage: V = V op S and V = V op V. The option is determined by inspection of step 66, which determines whether the first operand is one of S0 to S7. If the first operand is one of SO to S7, the operation is V = V op S, otherwise the operation is V = V op V. This state is recognized in steps 68 and 70, respectively.

벡터 길이가 1로 세트되었을 경우, 레지스터 뱅크(38)의 모든 32개의 레지스 터는, 연산의 스칼라 성질이 목적지용으로 사용될 수도 있는 레지스터의 범위를 제한하는 단계 60의 검사에 의존하지 않고 단계 58에서 인지될 것이기 때문에 스칼라로서 사용하는데 유용하다는 것을 주목해야 한다. 단계 60의 검사는, 혼합된 벡터 및 스칼라 명령어가 사용되고 있을 경우 모든 스칼라 연산을 인식하는데 유용하다. 또한, 혼합된 벡터 및 스칼라 모드에서 연산할 때, 만약 제 1 오퍼랜드가 스칼라일 경우, 그것은 SO 내지 S7중 임의의 것일 수도 있는 반면에, 제 1 오퍼랜드가 벡터일 경우, 그것은 S8 내지 S31 중 임의의 것일 수도 있다. 그 제 1 오퍼랜드가 벡터일 경우 레지스터 뱅크 내에 이용 가능한 레지스터의 수가 3배라면, 벡터 연산을 사용할 때 데이터 값의 시퀀스를 가지는데 필요한, 일반적으로 보다 큰 레지스터 수를 채택한다.When the vector length is set to 1, all 32 registers in the register bank 38 are recognized in step 58 without relying on the check in step 60 which limits the range of registers whose scalar nature of the operation may be used for the destination. It should be noted that it is useful to use as a scalar because it will be. The check in step 60 is useful for recognizing all scalar operations when mixed vector and scalar instructions are being used. Also, when operating in mixed vector and scalar modes, if the first operand is a scalar, it may be any of SO to S7, while if the first operand is a vector, it is any of S8 to S31. It may be. If the number of registers available in the register bank is three times when the first operand is a vector, then a larger register number is generally employed, which is necessary to have a sequence of data values when using vector operations.

수행하기를 바라는 공통연산은 그래픽 변형이라는 것을 알 수 있을 것이다. 일반적인 경우에, 수행될 변형은 4*4 매트릭스로 나타낼 수도 있다. 이 오퍼랜드는, 이러한 계산수단에 재사용하여 벡터로서 조작될 수 있는 레지스터에 매트릭스 값이 저장되도록 하는 것이 바람직하다. 이와 같은 방법으로, 입력 픽셀(pixel) 값은, 재사용하는데 도움이 되는 벡터로서 조작될 수 있도록 4개의 레지스터에 보통 저장된다. 매트릭스 연산의 출력은, 보통은 4개의 레지스터에 저장된 스칼라(별도의 벡터 행 곱을 누적함)이다. 입출력 값을 이중으로 출력하기를 바라는 경우, 24개(16+4+4)의 벡터 레지스터와 8개(4+4)의 스칼라 레지스터에 대한 필요 조건에 만족할 것이다.It will be appreciated that the common operation you want to perform is a graphic transformation. In the general case, the transformation to be performed may be represented by a 4 * 4 matrix. This operand is preferably such that the matrix value is stored in a register that can be reused in such calculation means and manipulated as a vector. In this way, input pixel values are usually stored in four registers so that they can be manipulated as vectors to help reuse. The output of the matrix operation is usually a scalar (accumulating separate vector row products) stored in four registers. If you want to output double input and output values, you will meet the requirements for 24 (16 + 4 + 4) vector registers and 8 (4 + 4) scalar registers.

도 4는 도 3에 대응한 흐름도이지만, 이 경우에서는 배정밀도 모드를 나타낸 것이다. 상술한 것처럼, 배정밀도 모드에서, 레지스터 뱅크(38)내의 레지스터 슬롯은 논리 레지스터 D0 내지 D15에 있는 16개의 64-비트 데이터 값을 저장하기 위해 쌍으로 동작한다. 이와 같은 경우에, 레지스터의 벡터/스칼라 성질의 인코딩은, 단계 60과 66의 검사가 각각 단계 72와 74에서의 "목적지가 D0 내지 D3 중의 하나인가?"와 "제 1 오퍼랜드가 D0 내지 D3중의 하나인가?"가 된다는 점에서 도 3의 것을 변경한 것이다.FIG. 4 is a flowchart corresponding to FIG. 3, but in this case, the double precision mode is shown. As mentioned above, in double precision mode, register slots in register bank 38 operate in pairs to store the sixteen 64-bit data values in logical registers D0 through D15. In such a case, the encoding of the vector / scalar nature of the registers is determined by the checks in steps 60 and 66, where the destinations are ones of D0 to D3 and the first operand in D0 to D3, respectively. Is one? "

상술한 것처럼, 레지스터 지정 필드 내에 레지스터의 벡터/스칼라 성질을 인코딩하는 것은, 명령어 비트 공간의 상당한 감소를 제공하지만, 뺄셈 및 나눗셈과 같은 비교환적인 연산에 대해 약간의 어려움이 따른다. 레지스터 구성이 V= V op S 인 경우, 비교환적인 연산을 위한 제 1 및 제 2 오퍼랜드 사이의 대칭성의 결여는, 비교환적인 연산용 2개의 다른 오퍼랜드 옵션을 나타내는 SUB, RSUB 및 DIV, RDIV 와 같은 오페코드의 쌍을 포함하도록 명령어 세트를 연장함으로써, 레지스터 값들을 스와핑(swapping)하는 추가 명령어 없이 해결할 수 있다.As mentioned above, encoding the vector / scalar nature of a register in a register designation field provides a significant reduction in instruction bit space, but with some difficulties for non-commutative operations such as subtraction and division. When the register configuration is V = V op S, the lack of symmetry between the first and second operands for non-commutative operations is determined by the SUB, RSUB and DIV, RDIV, which represent two different operand options for non-commutative operations. By extending the instruction set to include the same pair of opcodes, we can solve it without the need for additional instructions to swap register values.

도 5는 레지스터 뱅크(38)의 부분 집합내의 벡터 랩핑을 나타낸 것이다. 특히, 단일 정밀도 모드에서는, 레지스터 뱅크를, 어드레스 SO 내지 S7, S8 내지 S15, S16 내지 S23 및 S24 내지 S31인 4개의 레지스터 범위로 쪼갠다. 이 범위는, 토막 토막으로 만들어져서 인접한다. 도 2를 참조하여, 8개의 레지스터를 포함하는 이들 부분 집합에 대한 랩핑 기능은, 벡터 제어부(50)내의 3비트 증분기(가산기)(52)를 이용하여서 제공될 수도 있다. 이러한 방법에서, 부분 집합 경계가 교차할 경우, 그 증분기는 다시 랩(wrap)할 것이다. 이 간단한 구현은 레지 스터 어드레스 공간내의 8개의 워드 경계에 관한 부분 집합의 정렬에 의해 용이하게 된다.5 illustrates vector wrapping in a subset of register banks 38. In particular, in the single precision mode, the register bank is broken into four register ranges, which are addresses SO to S7, S8 to S15, S16 to S23, and S24 to S31. This range is made of chips and is adjacent. Referring to FIG. 2, the wrapping function for these subsets, including eight registers, may be provided using a 3-bit incrementer (adder) 52 in the vector control unit 50. In this way, if the subset boundaries intersect, the incrementer will wrap again. This simple implementation is facilitated by the sorting of a subset of the eight word boundaries in the register address space.

도 5를 참조하여, 레지스터의 랩핑을 이해하는데 도움이 되는 많은 벡터 연산을 설명한다. 제 1 벡터 연산은, 시작 레지스터(Start Register) S2, 벡터 길이 4(벡터 제어 레지스터(46)내의 길이 값을 3으로 나타냄) 및 스트라이드 1(벡터 제어 레지스터(46)내의 스트라이드 값을 0으로 나타냄)을 지정한다. 따라서, 명령어가, 이들 전체 벡터 제어 파라메터 세트를 가진 벡터로서 레지스터 S2를 참조하여 디코딩되기 위해 실행될 경우, 그 명령어는 레지스터 S2, S3, S4 및 S5내의 데이터 값을 사용하여 각각 4번 실행될 것이다. 이러한 벡터가 부분 집합 경계와 교차하지 않으므로, 벡터 랩핑은 없다.With reference to FIG. 5, many vector operations are described that help to understand the wrapping of registers. The first vector operation is a start register S2, a vector length 4 (representing the length value in the vector control register 46 as 3) and stride 1 (representing the stride value in the vector control register 46 as 0). Specify. Thus, if an instruction is executed to be decoded with reference to register S2 as a vector with these full vector control parameter sets, the instruction will be executed four times each using data values in registers S2, S3, S4 and S5. Since this vector does not intersect the subset boundary, there is no vector wrapping.

두 번째 예에서, 시작 레지스터는 S14, 길이는 6 및 스트라이드는 1이다. 이에 따라, 그 명령어를 레지스터 S14부터 시작하여 6번 실행하게 될 것이다. 다음 레지스터는 S15를 사용한다. 이 레지스터는 다시 스트라이드만큼 증가하여, 그 레지스터 대신에 S16을 사용할 경우, 그 레지스터는 레지스터 S8이 되게 랩핑할 것이다. 그래서 이 명령어는, 3번 더 실행되어 전체 시퀀스 S14, S15, S8, S9, S10 및 S11을 완료한다.In the second example, the start register is S14, the length is 6 and the stride is 1. Thus, the instruction will be executed six times, starting with register S14. The next register uses S15. This register is again incremented by stride, so if you use S16 instead of that register, it will wrap to register S8. So this instruction is executed three more times to complete the entire sequence S14, S15, S8, S9, S10 and S11.

도 5의 마지막 예는, 시작 레지스터 S25, 길이 8 및 스트라이드 2를 나타낸다. 이때의 첫 번째 레지스터는 S25를 사용하고, 이것은 스트라이드 값 2에 따라서 S27, S29 및 S31을 수반한다. 그 레지스터 S31의 사용에 따라, 다음 레지스터 값은 그 부분 집합의 시작으로 되돌아가서 랩핑하고, 스트라이드 2를 고려하여 레지스터 S24로 넘어가서, 레지스터 S25를 사용하여 연산을 실행한다. 증분기(52)는, 벡터 레지스터간에 이동할 때의 현재 값에 스트라이드를 가산하는 3비트 가산기의 형태일 수 있다. 따라서, 그 스트라이드는, 다른 스트라이드 값을 그 가산기에 공급함으로써 조정될 수 있다.The last example of FIG. 5 shows start register S25, length 8 and stride 2. The first register at this time uses S25, which is accompanied by S27, S29 and S31 according to stride value 2. In accordance with the use of the register S31, the next register value wraps back to the beginning of the subset, goes to register S24 in consideration of stride 2, and performs the operation using the register S25. The incrementer 52 may be in the form of a 3-bit adder that adds a stride to the current value when moving between vector registers. Thus, the stride can be adjusted by feeding other stride values to the adder.

도 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이 된다.6 illustrates the wrapping of register bank 38 in double precision mode. In this mode, the subset of registers includes D0 through D3, D4 through D7, D8 through D11, and D12 through D15. In the double-precision mode, the minimum value input to the adder that serves as an incrementer is 2, which corresponds to double-precision stride 1. Double-precision stride 2 requires an input of 4 to the adder. The first example shown in FIG. 6 is start register D0, length 4 and stride 1. The vector register sequence thus becomes DO, D1, D2 and D3. Since the subset boundaries do not intersect, there is no wrapping in this example. In the second example, the start register is D15, the length is 2, and the stride is 2. Accordingly, the vector register sequence is D15 and D13.

도 2를 참조하여, 상기 로드 저장 제어부(42)는 출력에 5-비트 증분기를 구비하고, 로드/저장 다중 연산은 벡터 연산에 인가된 레지스터 랩핑에 영향을 받지 않는다는 것을 알아야 할 것이다. 이는 단일 로드/저장 다중 명령어가 필요로 하는 것과 같은 수의 연속적인 레지스터를 액세스(access) 가능하게 한다.Referring to FIG. 2, it will be appreciated that the load storage control section 42 has a 5-bit incrementer at its output, and that load / store multiple operations are not affected by register wrapping applied to vector operations. This allows access to the same number of consecutive registers as required by a single load / store multiple instruction.

이 랩핑 구성을 잘 이용한 연산의 예는, 4개의 신호값 및 4개의 탭 단위로 분할된 FIR 필터가 있다. 구문법 R8-R11 op R16-R19가 벡터 연산 R8 op R16, R9 op R17, R10 op R18 및 R11 op R19를 나타내는 경우, FIR 필터 연산은 다음과 같이 수 행한다.An example of an operation that makes good use of this wrapping configuration is an FIR filter divided into four signal values and four tap units. If the syntax R8-R11 op R16-R19 represents a vector operation R8 op R16, R9 op R17, R10 op R18 and R11 op R19, the FIR filter operation is performed as follows.

8개의 탭을 R8-R15에 그리고 8개의 신호 값을 R16-R23에 로드Load 8 taps into R8-R15 and 8 signal values into R16-R23

R8-R11 op R16-R19 하고 그 결과를 R24-R27에 넣음R8-R11 op R16-R19 and put the result in R24-R27

R9-R12 op R16-R19 하고 그 결과를 R24-R27에 누적R9-R12 op R16-R19 and accumulate results in R24-R27

R10-R13 op R16-R19 하고 그 결과를 R24-R27에 누적R10-R13 op R16-R19 and accumulate results in R24-R27

R11-R14 op R16-R19 하고 그 결과를 R24-R27에 누적R11-R14 op R16-R19 and accumulate results in R24-R27

R8-R11에 새로운 탭을 재로드Reload new tab on R8-R11

R12-R15 op R16-R19 하고 그 결과를 R24-R27에 누적R12-R15 op R16-R19 and accumulate the results in R24-R27

R13-R8 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)R13-R8 op R16-R19 and the result is accumulated in R24-R27 (from R15 to R8)

R14-R9 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)R14-R9 op R16-R19 and the result is accumulated in R24-R27 (from R15 to R8)

R15-R10 op R16-R19 하고 그 결과를 R24-R27에 누적(R15→R8 랩)R15-R10 op R16-R19 and the result is accumulated in R24-R27 (from R15 to R8)

R12 내지 R15에 새로운 탭을 재로드Reload new tab on R12 to R15

탭이 없을 경우, R16-R19에 새로운 데이터를 재로드If there is no tap, reload new data into the R16-R19

R12-R15 op R20-R23 하고 결과를 R28-R31에 넣음R12-R15 op R20-R23 and put the result in R28-R31

R13-R8 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)R13-R8 op R20-R23 and accumulate results in R28-R31 (from R15 to R8)

R14-R9 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)R14-R9 op R20-R23 and accumulate results in R28-R31 (from R15 to R8)

R14-R10 op R20-R23 하고 결과를 R28-R31에 누적(R15→R8 랩)R14-R10 op R20-R23 and accumulate results in R28-R31 (from R15 to R8)

나머지는 상기와 같음.The rest is the same as above.

상기 내용으로부터 로드는, 다중 누적과는 다른 레지스터가 되어, 병렬로 발생할 수 있다(즉, 이중 버퍼링을 달성함)는 것을 주목해야 한다. It should be noted from the above that the load is a register different from multiple accumulation and can occur in parallel (i.e. achieve double buffering).             

도 7a는 메인 프로세서(24)가 코프로세서 명령어를 도시하는 방법을 개략적으로 나타낸 것이다. 이 메인 프로세서는, 그 명령어 내에 (분할될 수 있는) 필드(76)의 비트 조합을 사용하여 그 명령어를 코프로세서 명령어로서 식별한다. 표준 ARM 프로세서 명령어 세트내의 코프로세서 명령어는, 그 메인 프로세서에 첨가된 코프로세서(들)가 특정 코프로세서 명령어를 목표로 하고 있는지를 식별하는데 사용하도록 코프로세서 번호 필드(78)를 포함한다. DSP 코프로세서(예를 들면, ARM에 의해 제조된 Piccolo 코프로세서) 또는 부동 소수점부 코프로세서와 같은 다른 형태의 코프로세서는, 다른 코프로세서 번호들을 할당하여서, 동일한 코프로세서 버스(36)를 사용하여 단일 시스템 내에 별도로 어드레싱을 할 수 있다. 또한, 코프로세서 명령어는, 코프로세서에 의해 사용된 오페코드와, 코프로세서 레지스터에서의 목적지, 제 1 오퍼랜드 및 제 2 오퍼랜드를 각각 지정하는 3개의 5-비트 필드를 포함한다. 코프로세서 로드 또는 저장과 같은 일부 명령어에서, 메인 프로세서는 코프로세서 명령어를 적어도 부분적으로 디코딩하여서, 그 코프로세서와 메인 프로세서가 바라는 데이터 처리 연산을 동시에 완료할 수 있다. 또한, 이 메인 프로세서는, 이러한 상황에서 수행하는 명령어 디코드의 부분으로서 코프로세서 번호 내의 인코딩된 데이터 형태에 응답할 수 있다.7A schematically illustrates how the main processor 24 illustrates coprocessor instructions. This main processor uses the bit combination of field 76 (which may be divided) within the instruction to identify the instruction as a coprocessor instruction. Coprocessor instructions within the standard ARM processor instruction set include a coprocessor number field 78 for use in identifying whether the coprocessor (s) added to the main processor are targeting a particular coprocessor instruction. Other types of coprocessors, such as DSP coprocessors (eg, the Piccolo coprocessor manufactured by ARM) or floating point coprocessors, may use different coprocessor numbers to assign the same coprocessor bus 36. It can be addressed separately in a single system. The coprocessor instruction also includes an opcode used by the coprocessor and three 5-bit fields that respectively specify a destination in the coprocessor register, a first operand and a second operand. In some instructions, such as loading or storing a coprocessor, the main processor may at least partially decode the coprocessor instructions to simultaneously complete the data processing operations desired by the coprocessor and the main processor. The main processor may also respond to the encoded data type in the coprocessor number as part of the instruction decode to perform in this situation.

도 7b는 배수 및 단일 정밀도 연산을 지원하는 코프로세서가 수신한 코프로세서 명령어를 해석하는 방법을 나타낸 것이다. 이러한 코프로세서는, 2개의 인접한 코프로세서 번호가 할당되고, 코프로세서 번호의 최상위 3비트를 사용하여 그것이 타겟 코프로세서인지를 식별한다. 이러한 방법으로, 코프로세서 번호의 최하위 비트는, 타겟 코프로세서를 식별하기 위한 여분이고, 대신 코프로세서 명령어를 실행할 때 사용된 데이터 형태를 지정하는데 사용될 수 있다. 이러한 예에서, 데이터 형태는, 단일 또는 배정밀도가 되는 데이터 크기에 대응한다.7B illustrates a method of interpreting coprocessor instructions received by a coprocessor that supports multiple and single precision operations. This coprocessor is assigned two adjacent coprocessor numbers and uses the most significant 3 bits of the coprocessor number to identify whether it is a target coprocessor. In this way, the least significant bit of the coprocessor number is redundant to identify the target coprocessor and may instead be used to specify the data type used when executing the coprocessor instruction. In this example, the data type corresponds to a data size that is single or double precision.

배정밀도 모드에서 레지스터 수는, 32에서 16으로 효과적으로 감소된다는 것을 알 수 있다. 따라서, 레지스터 필드 크기를 감소시키는 것이 가능하지만, 이러한 경우에 사용할 레지스터의 디코드는, 코프로세서 명령어내의 알려진 위치에 있는 자체 포함된 필드로부터 직접 이용할 수 없고, 코프로세서 명령어의 다른 부분의 디코딩에 의존한다. 이는 복잡하여 나쁘고 코프로세서 연산을 늦게 할 수 있다. 데이터 형태를 인코딩하기 위해 코프로세서 번호의 최하위 비트를 사용한다는 것은, 오페코드가 그 디코드를 단순화시키고 급속하게 진행하는 데이터 형태와 완전히 무관하다는 것을 의미한다.It can be seen that in double-precision mode, the number of registers is effectively reduced from 32 to 16. Thus, although it is possible to reduce the register field size, the decoding of the register to be used in this case is not directly available from a self-contained field at a known location in the coprocessor instruction, but depends on the decoding of other parts of the coprocessor instruction. . This is complicated and bad and can slow coprocessor operations. Using the least significant bit of the coprocessor number to encode the data type means that the opcode simplifies its decoding and is completely independent of the rapidly moving data type.

도 7c는 도 7b의 코프로세서에 의해 지원되는 데이터 형태의 부분 집합인 단일 데이터 형태만을 지원하는 코프로세서가 그 코프로세서 명령어를 해석하는 방법을 나타낸 것이다. 이 경우에, 전체 코프로세서 번호는, 그 명령어를 수신하는지 않하는지를 판단하는데 사용한다. 이러한 방법에서, 코프로세서 명령어가 지원되지 않는 데이터 형태인 경우, 그것은 다른 코프로세서 번호에 대응하고 수신되지 않을 것이다. 그래서, 메인 프로세서(24)는, 지원되지 않는 데이터 형태의 연산을 핸들링(handling)하여 에뮬레이트 하는 미정의된 명령어 예외에 의지할 수 있다.FIG. 7C illustrates how a coprocessor that supports only a single data type, which is a subset of the data types supported by the coprocessor of FIG. 7B, interprets the coprocessor instructions. In this case, the entire coprocessor number is used to determine whether to receive the instruction. In this way, if a coprocessor instruction is of an unsupported data type, it corresponds to a different coprocessor number and will not be received. Thus, main processor 24 may rely on undefined instruction exceptions that handle and emulate operations of unsupported data types.

도 8은 메인 프로세서 역할을 하고 코프로세서 버스(82)를 통해 단일 및 배정밀도 데이터 형태를 지원하는 코프로세서(84)와 통신하는 ARM 코어(80)를 포함한 데이터 처리 시스템을 나타낸다. 코프로세서 번호를 포함하는 코프로세서 명령어는, 명령어 스트림의 범위내에서 충돌될 경우 코프로세서 버스(82)상의 ARM 코어(80)로부터 발생된다. 그래서, 코프로세서(84)는, 그 자신의 코프로세서 번호와 비교하여, 일치가 일어나면 ARM 코어(80)로 되돌아온 수신(accept) 신호를 발생한다. 그 수신 신호를 수신하지 않은 경우, 그 ARM 코어는 미정의된 명령어 예외(Undefined Instruction Exception)를 인지하여, 그 메모리 시스템(86)에 저장된 예외 핸들링 코드(exception handling code)를 참조한다.8 shows a data processing system including an ARM core 80 that acts as the main processor and communicates with the coprocessor 84 supporting coherent and single-precision data types over the coprocessor bus 82. Coprocessor instructions, including the coprocessor number, originate from the ARM core 80 on the coprocessor bus 82 if they collide within the scope of the instruction stream. Thus, the coprocessor 84 generates an accept signal back to the ARM core 80 when a match occurs, compared to its own coprocessor number. If it does not receive the received signal, the ARM core recognizes an Undefined Instruction Exception and consults an exception handling code stored in its memory system 86.

도 9는 코프로세서(84)를, 단일 정밀도 연산만을 지원하는 코프로세서(88)로 바꾸어서 수정된 도 8의 시스템을 나타낸다. 이 경우에, 코프로세서(88)는 단일 코프로세서 번호만을 인지한다. 따라서, 도 8의 코프로세서(84)에 의해 실행되는 원시 명령어 스트림내의 배정밀도 코프로세서 명령어는 단일 정밀도 코프로세서(88)에 의해 수신되지 않는다. 따라서, 동일한 코드를 실행하기를 원하는 경우, 메모리 시스템(86)내의 미정의된 예외 핸들링 코드는 배정밀도 에뮬레이션 루틴을 포함할 수 있다.9 illustrates the system of FIG. 8 modified by replacing coprocessor 84 with coprocessor 88 that supports only single precision operations. In this case, coprocessor 88 knows only a single coprocessor number. Thus, double-precision coprocessor instructions in the raw instruction stream executed by coprocessor 84 of FIG. 8 are not received by single precision coprocessor 88. Thus, if it is desired to execute the same code, the undefined exception handling code in memory system 86 may include a double precision emulation routine.

배정밀도 명령어를 에뮬레이트하기 위한 요구는 이들 명령어를 천천히 실행하게 하지만, 단일 정밀도 코프로세서(88)는, 그 배정밀도 코프로세서(84)보다 더 작고 더 값쌀 수 있고, 이중 위치 명령어가 매우 드물 경우에 얻은 전송 이득(net benefit)일 수 있다는 것을 알아야 할 것이다.The need to emulate double-precision instructions makes these instructions run slowly, but single-precision coprocessor 88 can be smaller and cheaper than its double-precision coprocessor 84, and in rare cases where double-position instructions are very rare. It will be appreciated that there may be a net benefit obtained.

도 10은 단일 및 배정밀도 명령어를 지원하고, 2개의 인접한 코프로세서 번호를 갖는 코프로세서(84)내의 명령어 래치 회로를 나타낸다. 이러한 경우에, 코프 로세서 명령어내의 코프로세서 번호의 최상위 3비트 CP#[3:1]은, 그 코프로세서(84)에 할당된 것들과 비교된다. 이 예에서, 코프로세서(84)가 코프로세서 번호 10과 11을 가진 경우, 2진수 101에 대한 코프로세서 번호 CP#[3:1]의 최상위 비트를 일치시킴으로써 비교를 할 수 있다. 일치할 경우, 수신 신호는 ARM 코어(80)로 되돌아가고, 코프로세서 명령어는 실행을 위해 래치된다.10 shows an instruction latch circuit in coprocessor 84 that supports single and double precision instructions and has two adjacent coprocessor numbers. In this case, the most significant three bits CP # [3: 1] of the coprocessor number in the coprocessor instruction are compared with those assigned to that coprocessor 84. In this example, if coprocessor 84 has coprocessor numbers 10 and 11, a comparison can be made by matching the most significant bit of coprocessor number CP # [3: 1] for binary 101. If there is a match, the received signal is returned to the ARM core 80 and the coprocessor instruction is latched for execution.

도 11은 도 9의 단일 정밀도 코프로세서(88)내의 등가 회로를 나타낸다. 이러한 경우에, 단일 코프로세서 번호만이 인지되어 디폴트(Default)에 의해 사용된 단일 정밀도 연산을 한다. 코프로세서 명령어를 수신하여 래치하는지를 판단하는 비교는, 코프로세서 번호의 전체 4비트 CP#[3:0]와 단일 임베디드(embedded) 코프로세서 번호인 2진수 1010 사이에서 수행한다.FIG. 11 shows an equivalent circuit in the single precision coprocessor 88 of FIG. 9. In this case, only a single coprocessor number is known to make a single precision operation used by Default. The comparison of determining whether to receive and latch a coprocessor instruction is performed between the full 4-bit CP # [3: 0] of the coprocessor number and the binary 1010, which is a single embedded coprocessor number.

도 12는 도 9의 실시예의 미정의된 예외 핸들링 루틴이 배정밀도 에뮬레이션 코드를 수행하기 위해 트리거(trigger) 되는 방법을 나타낸 흐름도이다. 미정의된 명령어 예외를 발생했던 명령어가 코프로세서 번호인 2진수 1011을 갖는 코프로세서 명령어인지를 검사한다(단계 90). 이 검사 결과, 예(Y)일 경우, 이는 배정밀도(Double precision) 명령어이어서 메인 프로그램 플로우로 복귀하기 전에 단계 92에서 에뮬레이트 할 수 있다. 다른 예외 형태는, 단계 90의 검사에 의해 예가 아닐 경우 그 이상의 단계들에 의해 검사되어 핸들링될 수도 있다.12 is a flow diagram illustrating how an undefined exception handling routine of the embodiment of FIG. 9 is triggered to perform double precision emulation code. Check whether the instruction that caused the undefined instruction exception is a coprocessor instruction with binary 1011, the coprocessor number (step 90). As a result of this check, if Y (Y), this is a double precision instruction and can be emulated in step 92 before returning to the main program flow. Other exception forms may be checked and handled by further steps, if not yes by step 90.

도 13은 32비트 레지스터마다 저장된 데이터 형태를 식별하는 정보를 저장하기 위한 포맷 레지스터 FPREG(200), 또는 레지스터 뱅크(220)의 데이터 슬롯의 사용을 나타낸다. 상술한 것처럼, 각각의 데이터 슬롯은 32-비트 데이터 값(데이터 워드)을 저장하기 위한 단일 정밀도 레지스터로서 개별적으로 동작할 수 있거나, 64-비트 데이터 값(2개의 데이터 워드)을 저장하기 위한 배정밀도 레지스터로 제공하는 또 다른 데이터 슬롯과 쌍으로 될 수 있다. 본 발명의 바람직한 실시예에 따라, FPREG 레지스터(200)는, 임의의 특정 데이터 슬롯이 이에 저장된 단일 정밀도 또는 배정밀도 데이터를 가지고 있는지를 식별하도록 구성되어 있다.13 illustrates the use of a format register FPREG 200, or a data slot of register bank 220, to store information identifying the type of data stored for each 32-bit register. As mentioned above, each data slot can operate individually as a single precision register for storing 32-bit data values (data words), or double precision for storing 64-bit data values (two data words). It can be paired with another data slot provided in a register. In accordance with a preferred embodiment of the present invention, the FPREG register 200 is configured to identify whether any particular data slot has a single precision or double precision data stored therein.

도 13에 나타낸 것처럼, 레지스터 뱅크(220)에 있는 32개의 데이터 슬롯이 16쌍의 데이터 슬롯을 제공하도록 구성된다. 제 1 데이터 슬롯이 이에 저장된 단일 정밀도 데이터 값을 가질 경우, 바람직한 실시예에서 그 쌍에 있는 다른 데이터 슬롯은, 단일 정밀도 데이터 값만을 저장하는 구성으로 되고, 배정밀도 데이터 값을 저장하기 위해서 임의의 다른 데이터 슬롯과 연결(link)되지 않을 것이다. 이는, 데이터 슬롯의 임의의 특정 쌍이 2개의 단일 정밀도 데이터 값, 또는 1개의 배정밀도 데이터 값을 저장하도록 구성된 것이 확실하다. 이 정보는, 레지스터 뱅크(220)의 데이터 슬롯들로 구성된 각각의 쌍과 관련된 단일 비트의 정보에 의해서 식별될 수 있음에 따라, 바람직한 실시예에서 그 FPREG 레지스터(200)는 레지스터 뱅크(220)의 데이터 슬롯들로 구성된 각각의 쌍에 저장된 데이터 형태를 식별하기 위한 16비트 정보를 저장하도록 구성된다. 이에 따라, FPREG 레지스터(200)는, FPU 코프로세서(26)내의 다른 레지스터와의 일관성을 위해 16-비트 레지스터로서 예를 들거나, 16개의 여유 비트 정보를 갖는 32-비트 레지스터로서 예를 들 수 있다.As shown in FIG. 13, 32 data slots in the register bank 220 are configured to provide 16 pairs of data slots. If the first data slot has a single precision data value stored therein, in the preferred embodiment the other data slots in the pair are configured to store only a single precision data value, and any other to store the double precision data value. It will not link with the data slot. It is certain that any particular pair of data slots is configured to store two single precision data values, or one double precision data value. This information can be identified by a single bit of information associated with each pair of data slots in register bank 220, so that in a preferred embodiment the FPREG register 200 is configured to be in register bank 220. And stores 16-bit information for identifying the type of data stored in each pair of data slots. Accordingly, the FPREG register 200 may, for example, be a 16-bit register for consistency with other registers in the FPU coprocessor 26 or as a 32-bit register with 16 free bit information. .

도 15는 레지스터 뱅크(220)내에 있는 6개의 데이터 슬롯 쌍을 나타내고, 이는 바람직한 실시예에 따라 6개의 배정밀도 데이터 값 또는 12개의 단일 정밀도 데 이터 값을 저장하는데 사용할 수 있다. 이들 데이터 슬롯내에 저장될 수 있는 데이터의 예를, 배정밀도 데이터 값의 32개의 최상위 비트를 나타낸 DH, 배정밀도 데이터 값의 32개의 최하위 비트를 나타낸 DL 및 단일 정밀도 데이터 값을 나타낸 S로 도 15에 도시하였다.15 shows six pairs of data slots in register bank 220, which may be used to store six double precision data values or twelve single precision data values, according to a preferred embodiment. Examples of data that can be stored in these data slots include DH representing the 32 most significant bits of the double precision data value, DL representing the 32 least significant bits of the double precision data value, and S representing the single precision data value. Shown.

또한, 본 발명의 바람직한 실시예에 따른 FPREG 레지스터(200)내의 대응 엔트리(Entry)를 도 15에 도시하였다. 이 바람직한 실시예에 따라, "1"값은, 그 데이터 슬롯의 관련 쌍들이 배정밀도 데이터 값을 포함하는 것을 나타내기 위해 FPREG 레지스터(200)에 저장되고, "0"값은, 대응 데이터 슬롯 쌍 중의 적어도 하나가 단일 정밀도 데이터 값을 포함한 것 또는 양 데이터 슬롯들이 초기화되지 않은 것을 나타내는데 사용한다. 이에 따라, 양 데이터 슬롯들이 초기화되지 않을 경우, 그 데이터 슬롯중의 하나가 초기화되지 않고 그 쌍에 있는 다른 데이터 슬롯이 단일 정밀도 데이터 값을 포함할 경우, 또는 그 쌍에 있는 양 데이터 슬롯들이 단일 정밀도 데이터 값을 포함할 경우, 논리적인 "0" 값이 그 FPREG 레지스터(200)의 대응 비트에 저장된다.Also shown in FIG. 15 is a corresponding entry in the FPREG register 200 in accordance with a preferred embodiment of the present invention. According to this preferred embodiment, a value of "1" is stored in the FPREG register 200 to indicate that associated pairs of that data slot contain double precision data values, and a value of "0" is a corresponding data slot pair. At least one of which contains a single precision data value or that both data slots are not initialized. Thus, if both data slots are not initialized, one of the data slots is not initialized and another data slot in the pair contains a single precision data value, or both data slots in the pair are single precision If it contains a data value, a logical "0" value is stored in the corresponding bit of its FPREG register 200.

상술한 것처럼, 바람직한 실시예인 FPU 코프로세서(26)는 단일 정밀도 또는 배정밀도 데이터 값을 처리하는데 사용할 수도 있고, 메인 프로세서(24)에 의해 발생된 코프로세서 명령어는 임의의 특정 명령어가 단일 정밀도 또는 배정밀도 명령어인지를 식별한다(도 7b 및 관련 설명 참조). 하나의 명령어가 코프로세서에 의해 수신되는 경우, 디코딩 및 실행을 위해 레지스터 제어 및 명령어 발생부(48)로 전달된다. 이 명령어가 로드 명령어일 경우, 레지스터 제어 및 명령어 발생 로직(48) 은, 로드 저장 제어부(42)에 명령하여 메모리로부터 그 식별 데이터를 검색하고, 그 데이터를 레지스터 뱅크(220)의 지정된 데이터 슬롯에 저장한다. 이 때에, 코프로세서는 단일 정밀도 또는 배정밀도 데이터 값이 검색되고 있는지를 알고 있고, 그에 따라서 로드 저장 제어부(42)는 동작한다. 따라서, 로드 저장 제어 로직(42)은, 32-비트 단일 정밀도 데이터 값 또는 64-비트 배정밀도 데이터 값을 경로(225)를 통해 레지스터 뱅크(220)내에 저장하기 위한 레지스터 뱅크 입력 로직(230)에 전달한다.As noted above, the preferred embodiment FPU coprocessor 26 may be used to process single precision or double precision data values, and coprocessor instructions generated by the main processor 24 may be used to ensure that any particular instruction is a single precision or assignment. Identify if it is a density instruction (see FIG. 7B and related description). When one instruction is received by the coprocessor, it is passed to the register control and instruction generator 48 for decoding and execution. If this instruction is a load instruction, the register control and instruction generation logic 48 instructs the load storage control section 42 to retrieve its identification data from the memory and transfer the data to the designated data slot of the register bank 220. Save it. At this time, the coprocessor knows whether a single precision or double precision data value is being retrieved, and the load storage control section 42 operates accordingly. Thus, the load store control logic 42 sends the register bank input logic 230 for storing the 32-bit single precision data value or the 64-bit double precision data value via the path 225 into the register bank 220. To pass.

로드 저장 제어부(42)에 의해서 레지스터 뱅크(220)로 로딩되는 데이터에 추가하여, 데이터는, 데이터를 수신하는 데이터 슬롯 쌍마다 단일 정밀도 또는 배정밀도 데이터를 저장하고 있는지를 식별하기 위해 필요한 비트들의 정보가 추가 가능하도록 포맷 레지스터 FPREG(200)에 제공된다. 바람직한 실시예에서는, 이 데이터를 그 포맷 레지스터 FPREG(200)에 저장한 후, 레지스터 뱅크로 데이터를 로딩하여서, 이 정보를 레지스터 뱅크 입력 로직(230)에 이용가능하다.In addition to the data loaded into the register bank 220 by the load storage control section 42, the data contains information of bits needed to identify whether single-precision or double-precision data is stored for each pair of data slots receiving the data. Is provided to the format register FPREG 200 so that it can be added. In a preferred embodiment, this data is stored in its format register FPREG 200 and then loaded into the register bank so that this information is available to register bank input logic 230.

바람직한 실시예에서, 레지스터 뱅크(220)에 있는 데이터의 내부 포맷은 외부 포맷과 동일함에 따라, 단일 정밀도 데이터 값은 32-비트 데이터 값으로서 저장되고, 배정밀도 데이터 값은 레지스터 뱅크(220)내의 64-비트 데이터 값으로서 저장된다. 레지스터 뱅크 입력 로직(230)은 FPREG 포맷 레지스터(200)에 액세스하므로, 수신되고 있는 데이터가 단일 또는 배정밀도인지를 알고서, 이러한 실시예에서, 레지스터 뱅크 입력 로직(230)은, 경로(225)상으로 수신된 데이터를 레지스터 뱅크(220)의 적합한 데이터 슬롯(들)에 저장하는 구성으로만 되어 있다. 그러나, 다른 실시예에서, 레지스터 뱅크내의 내부 표현 방식이 외부 포맷과 다른 경우, 레지스터 뱅크 입력 로직(230)은 필요한 변환을 수행하도록 구성된다. 예를 들면, 번호는, 전형적으로 지수 제곱된 기본 값에 곱해진 1.abc...로서 나타내고 있다. 효율을 위해, 전형적인 단일 및 배정밀도 표현 방식은, 10진 소수점의 왼쪽에 1을 나타내기 위한 데이터 비트를 사용하지 않고, 오히려 1의 뜻을 함축한 것으로서 취급한다. 1에 필요한 레지스터 뱅크(220)내의 사용된 내부 표현방식을 명백하게 나타낼 경우, 레지스터 뱅크 입력 로직(230)은 필요한 데이터 변환을 수행한다. 이러한 실시예에서, 데이터 슬롯은 전형적으로 레지스터 뱅크 입력 로직(230)에 의해서 발생된 추가 데이터를 수용하기 위해서 32-비트보다 약간 다소 크다.In a preferred embodiment, as the internal format of the data in register bank 220 is the same as the external format, the single precision data value is stored as a 32-bit data value, and the double precision data value is 64 in register bank 220. It is stored as a bit data value. Since register bank input logic 230 accesses FPREG format register 200, knowing whether the data being received is single or double precision, and in this embodiment, register bank input logic 230 is on path 225. Is only configured to store the data received in the appropriate data slot (s) of the register bank 220. However, in other embodiments, register bank input logic 230 is configured to perform the necessary conversion if the internal representation in the register bank is different from the external format. For example, numbers are typically represented as 1.abc ... multiplied by an exponentially squared base value. For efficiency, typical single and double precision representations do not use data bits to represent 1 to the left of the decimal point, but rather treat the meaning of 1 as implied. If the internal representation used in register bank 220 required by 1 is clearly indicated, register bank input logic 230 performs the necessary data conversion. In this embodiment, the data slot is typically slightly larger than 32-bit to accommodate the additional data generated by the register bank input logic 230.

추가로, 데이터 값을 레지스터 뱅크(220)에 로딩하여, 로드 저장 제어부(42)는, 데이터를 코프로세서(26)의 하나 이상의 시스템 레지스터, 예를 들면 사용자 상태 및 제어 레지스터 FPSCR(210)에 로딩할 수 있다. 바람직한 실시예에서, 이 FPSCR 레지스터(210)는, 사용자 액세스 가능 구성 비트와 예외 상태 비트를 포함하고, 그 바람직한 실시예 설명의 끝부분에 제공된 부동 소수점부의 구조 설명에서 더욱 상세히 설명된다.In addition, by loading the data value into register bank 220, load storage control 42 loads data into one or more system registers of coprocessor 26, such as the user status and control register FPSCR 210. can do. In a preferred embodiment, this FPSCR register 210 includes user accessible configuration bits and exception status bits and is described in more detail in the structure description of the floating point portion provided at the end of the description of the preferred embodiment.

레지스터 제어 및 명령어 발생부(48)가 메모리에 저장된 내용들을 갖는 레지스터 뱅크(220)에 있는 특정 데이터 슬롯들을 식별하는 저장 명령어를 수신하는 경우, 그에 따라 로드 저장 제어부(42)는 명령을 받고, 그 필요한 데이터 워드들은 레지스터 뱅크 출력 로직(240)을 통해 레지스터 뱅크(220)에서 로드 저장 제어부(42)로 판독된다. 레지스터 뱅크 출력 로직(240)은, 판독되는 데이터가 단일 또는 배정밀도 데이터인지를 판단하기 위해서 FPREG 레지스터(200) 내용에 액세스한다. 그래서, 적합한 데이터 변환을 적용하여 레지스터 뱅크 입력 로직(230)에 의해서 적용된 임의의 데이터 변환으로 전환하고, 그 데이터를 경로(235)를 거쳐 로드 저장 제어 로직(42)에 제공한다.When register control and instruction generator 48 receives a store instruction that identifies particular data slots in register bank 220 having contents stored in memory, load storage controller 42 receives the command and The necessary data words are read from the register bank 220 to the load storage control section 42 via the register bank output logic 240. The register bank output logic 240 accesses the contents of the FPREG register 200 to determine whether the data being read is single or double precision data. Thus, a suitable data conversion is applied to convert to any data conversion applied by the register bank input logic 230 and the data is provided to the load storage control logic 42 via the path 235.

본 발명의 바림직한 실시예에 따라, 이 저장 명령어가 배정밀도 명령어일 경우, 코프로세서(26)는 명령어가 배정밀도 데이터 값에 적용된 연산의 두 번째 모드에서 연산되는 것으로 생각할 수 있다. 배정밀도 데이터 값은 짝수 데이터 워드를 포함하므로, 연산의 두 번째 모드에서 발생된 임의의 저장 명령어는 전형적으로 메모리에 저장된 내용을 갖는 짝수의 데이터 슬롯을 식별한다. 그렇지만, 본 발명의 바람직한 실시예에 따라, 홀수 데이터 슬롯이 지정된 경우, 로드 저장 제어부(42)는 FPREG 레지스터(200)의 내용을 읽어서 레지스터 뱅크(220)로부터 그 식별된 짝수 데이터 슬롯을 저장하기에 앞서 그 내용들을 먼저 메모리에 저장하도록 구성된다. 일반적으로, 전송된 데이터 슬롯은, 저장되어야 할 그 식별된 데이터 슬롯으로부터 카운팅한 데이터 슬롯 수(즉, 데이터 워드의 수)를 나타내는 수를 수반한, 레지스터 뱅크에 있는 특정 데이터 슬롯을 식별하는 기본 어드레스에 의해 식별된다.According to a preferred embodiment of the present invention, when this stored instruction is a double precision instruction, the coprocessor 26 may assume that the instruction operates in a second mode of operation applied to the double precision data value. Since double-precision data values contain even data words, any storage instruction issued in the second mode of operation typically identifies an even number of data slots having content stored in memory. However, in accordance with a preferred embodiment of the present invention, if an odd data slot is specified, the load storage control section 42 reads the contents of the FPREG register 200 to store the identified even data slots from the register bank 220. It is configured to store the contents first in memory. In general, a transmitted data slot is a base address that identifies a particular data slot in a register bank, accompanied by a number that represents the number of data slots counted from that identified data slot to be stored (ie, the number of data words). Is identified by.

이에 따라, 예로서, 그 저장 명령어가 레지스터 뱅크(220)에 있는 첫 번째 데이터 슬롯을 기본 어드레스로서 주고 33개의 데이터 슬롯을 지정할 경우, 이는 모든 32개의 데이터 슬롯의 내용을 메모리에 저장하게 하지만, 그 지정된 데이터 슬롯의 수는 홀수이므로, FPREG 레지스터(200)의 내용을 메모리에 저장시킨다.Thus, for example, if the store instruction gives the first data slot in register bank 220 as a base address and specifies 33 data slots, this causes the contents of all 32 data slots to be stored in memory, but Since the specified number of data slots is an odd number, the contents of the FPREG register 200 are stored in the memory.

이러한 방법에 의해, 단일 명령어를 사용하여 메모리에 있는 레지스터 뱅크 의 내용과 레지스터 뱅크(220)의 여러 가지 데이터 슬롯 내에 저장된 데이터 형태를 식별하는 FPREG 레지스터(200)의 내용을 저장할 수 있다. 이는 그 FPREG 레지스터(200)의 내용을 확실히 저장하기 위해 별도의 명령어가 발생되는 것을 피하게 하고, 그에 따라 메모리로의 저장 또는 메모리 처리로부터 로드 동안의 처리 속도에 악영향을 미치지 않게 한다.In this way, a single instruction can be used to store the contents of the register bank in memory and the contents of the FPREG register 200 which identifies the type of data stored in the various data slots of the register bank 220. This avoids the need for a separate instruction to be issued to ensure the contents of the FPREG register 200, and thus does not adversely affect the processing speed during loading from storage to or from memory processing.

본 발명의 다른 실시예에서, 이 기술은, 필요하다면 단일 명령어를 사용하여, FPSCR 레지스터(210)와 같은 추가 시스템 레지스터가 메모리에 저장 가능하게 하는 한 단계 이상일 수 있다. 따라서, 상술한 것처럼, 32개의 데이터 슬롯을 가진 레지스터 뱅크(220)의 예를 고려하여, 33개의 데이터 슬롯이 저장 명령어에서 식별될 경우, FPREG 레지스터(200)는, 레지스터 뱅크(220)에 있는 32개의 데이터 슬롯의 내용에 추가하여 메모리에 저장될 것이다. 그러나, 레지스터 뱅크에 있는 데이터 슬롯의 수를 초과한 상이한 홀수가, 예를 들면 35로 식별될 경우, 이는, FPREG 레지스터(200)의 내용과 레지스터 뱅크(220)의 데이터 슬롯에 추가하여 메모리에 FPSCR 레지스터(210)의 내용을 저장하는데 필요한 사항으로서 그 로드 저장 제어부(42)에 의해 해석될 수 있다. 또한, 코프로세서는, 그 이상의 시스템 레지스터, 예를 들면 코프로세서에 의해 명령어들을 처리하는 동안에 일어난 예외를 식별하는 예외 레지스터를 포함할 수도 있다. 상이한 홀수가 저장 명령어, 예를 들면 37로 식별될 경우, 이는 FPSCR 레지스터(210), FPFEG 레지스터(200) 및 레지스터 뱅크(200)의 내용에 추가하여 하나 이상의 예외 레지스터의 내용을 추가로 저장하는데 필요한 사항으로서 로드 저장 제어부(42)에 의해 해석될 수 있다. In another embodiment of the present invention, the technique may be one or more steps to enable additional system registers, such as the FPSCR register 210, to be stored in memory, using a single instruction if necessary. Thus, as discussed above, taking into account the example of a register bank 220 with 32 data slots, if 33 data slots are identified in a storage instruction, the FPREG register 200 may be divided into 32 in the register bank 220. In addition to the contents of the two data slots will be stored in the memory. However, if a different odd number exceeding the number of data slots in the register bank is identified as, for example, 35, this is in addition to the contents of the FPREG register 200 and the data slots in the register bank 220 to the FPSCR in memory. The matter necessary to store the contents of the register 210 can be interpreted by the load storage control section 42. The coprocessor may also include more system registers, such as an exception register that identifies an exception that occurred while processing instructions by the coprocessor. If a different odd number is identified as a storage instruction, for example 37, this is necessary to further store the contents of one or more exception registers in addition to the contents of the FPSCR register 210, FPFEG register 200 and register bank 200. It can be interpreted by the load storage control unit 42 as a matter.             

이 기술은, 저장 또는 로드 명령어를 초기화하는 코드가 레지스터 뱅크 내용인지를 모르는 경우 특히 유용하고, 이때의 레지스터 뱅크 내용은 레지스터 뱅크로의 다음의 검색을 위한 메모리에 임시로만 저장된다. 그 코드가 레지스터 뱅크 내용인지를 아는 경우, FPREG 레지스터(200)의 내용을 메모리에 저장하는데는 역시 불필요하다. 레지스터 뱅크 내용인지를 모르는 코드의 일반적인 예는, 문맥 전환 코드 및 프로시저(procedure) 호출 엔트리 및 출구(exit) 루틴이 있다.This technique is particularly useful when the code for initializing a store or load instruction is not known whether the register bank contents are present, where the register bank contents are only temporarily stored in memory for the next search into the register bank. If it is known whether the code is the contents of a register bank, it is also unnecessary to store the contents of the FPREG register 200 in memory. Common examples of code that do not know if they are the contents of a register bank are context switch code and procedure call entries and exit routines.

이와 같은 경우에, FPREG 레지스터(200)의 내용은, 레지스터 뱅크의 내용에 추가하여 메모리에 효과적으로 저장될 수 있고, 실제 상술한 것처럼, 특정한 다른 시스템 레지스터가 요구하는 대로 저장될 수 있다.In such a case, the contents of the FPREG register 200 may be effectively stored in memory in addition to the contents of the register bank, and may be stored as required by certain other system registers, as actually described above.

연속적인 로드 명령어의 수신에 관하여 유사한 처리를 이용한다. 이에 따라, 홀수 데이터 슬롯을 지정하는 배정밀도 로드 명령어를 수신하자마자 로드 저장 제어부(42)는, FPREG 레지스터(200)의 내용이 FPREG 레지스터(200)에 로딩되게 하고, 이어서 임의의 시스템 레지스터의 내용이 로드 명령어내의 식별된 슬롯 수를 나타내고, 이어서 짝수 데이터 워드가 레지스터 뱅크(220)의 지정 데이터 슬롯에 저장되는 구성으로 되어 있다. 따라서, 상술한 실시예를 고려하여, 로드 명령어에 지정된 데이터 슬롯의 수가 33일 경우, FPREG 레지스터 내용은 32개의 데이터 슬롯의 내용을 수반한 FPREG 레지스터(200)에 로딩된다. 이와 유사하게, 로드 명령어에 지정된 데이터 슬롯의 수가 35일 경우, FPSCR 레지스터(210)의 내용은 역시 상술한 내용들에 추가하여 FPSCR 레지스터에 로딩된다. 끝으로, 지정된 데이터 슬롯의 수가 37일 경우, 임의의 예외 레지스터 내용도 상술한 내용에 추가하여 예외 레지스 터에 로딩된다. 특정 홀수와 연관된 특정 동작은 전체적으로 임의대로이고, 원하는 대로 변경될 수 있다는 것은 당업자에게는 명백하다는 것을 알 수 있을 것이다.Similar processing is used for the reception of consecutive load instructions. Accordingly, upon receiving a double precision load instruction specifying an odd data slot, the load storage control section 42 causes the contents of the FPREG register 200 to be loaded into the FPREG register 200, and then the contents of any system register are loaded. The number of slots identified in the load instruction is then shown, and the even data words are then stored in the designated data slots of the register bank 220. Thus, in view of the embodiment described above, when the number of data slots specified in the load instruction is 33, the FPREG register contents are loaded into the FPREG register 200 with the contents of 32 data slots. Similarly, when the number of data slots specified in the load instruction is 35, the contents of the FPSCR register 210 are also loaded into the FPSCR register in addition to those described above. Finally, if the specified number of data slots is 37, any exception register contents are also loaded into the exception register in addition to the above. It will be apparent to those skilled in the art that the specific operation associated with a particular odd number is entirely arbitrary and can be changed as desired.

도 14는 본 발명의 바람직한 실시예에 따라 저장 및 로드 명령어를 실행할 경우에 레지스터 제어 및 명령어 발생 로직(48)의 동작을 나타낸 흐름도이다. 먼저, 단계 300에서는, 데이터 워드 수(바람직한 실시예에서는 데이터 슬롯 수와 동일한 것)가, 명령어에 있는 식별된 첫 번째 레지스터 수, 즉 기본 레지스터(base register)와 함께 그 명령어로부터 판독된다. 그래서, 단계 310에서는, 명령어가 배정밀도 또는 단일 정밀도 명령어인지를 식별하기 때문에 이 단계에서 코프로세서에 이용 가능한 정보를 상술한 것처럼, 그 명령어가 배정밀도 명령어인지를 판단한다.14 is a flowchart illustrating the operation of register control and instruction generation logic 48 when executing store and load instructions in accordance with a preferred embodiment of the present invention. First, in step 300, the number of data words (which is the same as the number of data slots in the preferred embodiment) is read from the instruction together with the identified first register number in the instruction, namely the base register. Thus, in step 310, since it identifies whether the instruction is a double or single precision instruction, it is determined whether the instruction is a double precision instruction, as described above with the information available to the coprocessor.

그 명령어가 배정밀도 명령어일 경우, 그 처리는, 단계 320으로 진행하여, 명령어에 지정된 워드 수가 홀수인지를 판단한다. 이 실시예를 위해, FPREG 레지스터(200)에 추가하여 여러 가지 시스템 레지스터를 선택적으로 전송하는데 사용하지 않는다고 가정하면, 워드 수가 홀수일 경우, 이는 FPREG 레지스터(200) 내용이 전송된다는 것을 나타내고, 그에 따라서, 단계 325에서는, FPREG 레지스터의 내용이 로드 저장 제어부(42)에 의해 전송된다. 그래서, 단계 327에서는 워드 수가 1씩 감소되고, 그 처리는 단계 330으로 진행한다. 단계 320에서 워드 수가 짝수로 판단되었을 경우, 그 처리는 단계 330으로 직접 진행한다.If the instruction is a double precision instruction, the process proceeds to step 320 to determine whether the number of words specified in the instruction is odd. For this embodiment, assuming that no additional number of system registers are used to selectively transfer in addition to the FPREG register 200, if the number of words is odd, this indicates that the contents of the FPREG register 200 are to be transferred accordingly. In step 325, the contents of the FPREG register are transmitted by the load storage control section 42. Thus, in step 327, the word count is reduced by one, and the process proceeds to step 330. If it is determined in step 320 that the number of words is even, the process proceeds directly to step 330.

단계 330에서는, 워드 수가 0(zero)보다 큰지를 판단한다. 만약 크지 않을 경우, 명령어가 완료되었다고 간주하고, 그 처리는 단계 340에서 빠져나간다(EXIT). 그러나, 워드 수가 0 보다 클 경우, 그 처리는 단계 332로 진행하여, 배정밀도 데이터 값(즉, 2개의 데이터 슬롯의 내용)은 첫 번째 지정된 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그 후, 단계 334에서는, 워드 수가 2씩 감소되고, 단계 336에서는 레지스터 수가 1씩 증가된다. 상술한 것처럼, 실제로, 레지스터는, 실제로 배정밀도 명령어의 경우 2개의 데이터 슬롯으로 구성되어서, 레지스터 카운트가 1씩 증가하는 것은 데이터 슬롯 수가 2씩 증가하는 것과 같다.In step 330, it is determined whether the number of words is greater than zero. If it is not large, the instruction is considered complete and the process exits at step 340 (EXIT). However, if the word number is greater than zero, the process proceeds to step 332, where the double-precision data value (i.e., the contents of the two data slots) is transferred to or from this first specified register number. Thereafter, in step 334, the number of words is reduced by two, and in step 336, the number of registers is increased by one. As mentioned above, in practice, a register is actually made up of two data slots for a double precision instruction, so that increasing the register count by one is equivalent to increasing the number of data slots by two.

그래서, 그 프로시저는 단계 330으로 복귀하여, 워드 수가 0보다 큰지를 계속하여 판단하고, 이러한 처리를 반복한다. 워드 수가 0에 도달할 경우, 그 처리는 단계 340에서 빠져나간다.Thus, the procedure returns to step 330 to continue determining whether the number of words is greater than zero and repeat this process. If the word count reaches zero, the process exits at step 340.

단계 310에서 그 명령어가 배정밀도 명령어가 아니라고 판단되었을 경우, 그 처리는 단계 350으로 진행하여, 다시 워드 수가 0 보다 큰지를 판단한다. 그래서, 그 처리가 단계 352로 진행한 경우, 단일 정밀도 데이터 값이, 그 명령어에 있는 식별된 첫 번째 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그후, 단계 354에서는, 워드 수가 1 씩 감소되고, 단계 356에서는 레지스터 수 카운트가 다음 데이터 슬롯을 지정하도록 1씩 증가된다. 그 후, 처리는 단계 350으로 복귀하여, 워드 수가 0보다 큰지를 계속하여 판단한다. 그래서, 이 처리를, 워드 수가 0인 시간까지 반복하여, 단계 360에서 그 처리 시간이 될 경우 빠져나간다.If it is determined in step 310 that the instruction is not a double precision instruction, the process proceeds to step 350 to determine whether the word count is greater than zero again. Thus, if the processing proceeds to step 352, a single precision data value is sent to or from the identified first register number in the instruction. Then, in step 354, the word count is reduced by one, and in step 356, the register number count is incremented by one to designate the next data slot. The process then returns to step 350 to continue determining if the number of words is greater than zero. Thus, this process is repeated until the time of the word count is zero, and the process exits when the processing time is reached in step 360.

이상과 같은 방법은, 레지스터 뱅크 내용, 예를 들면 문맥 전환 코드 또는 프로시저 호출 엔트리 및 출구 시퀀스를 모르고 있는 코드를 실행할 경우 매우 큰 유연성을 제공한다. 이와 같은 경우, 그 동작 시스템은, 레지스터의 내용을 모르고 있고, 그 내용에 의존하는 레지스터를 다르게 취급하지 않는 것이 바람직하다. 상기한 방법은, 데이터 워드의 홀수를 지정하는 단일 저장 또는 로드 명령어로 이들 코드 루틴이 기록되게 한다. 코프로세서가 레지스터 내용 정보의 사용을 필요로 하는 경우, 그 명령어에 있는 데이터 워드의 홀수를 필요 사항으로서 해석하여, 레지스터 뱅크에 있는 데이터의 내용을 지정하는데 필요한 포맷 정보를 메모리에 저장하거나 메모리로부터 로드한다. 이 유연성으로 유일한 동작 시스템 소프트웨어가 레지스터 내용 정보를 필요로 하는 코프로세서를 지원하기 위한 요구를 제거한다.This approach provides a great deal of flexibility when executing code that does not know the register bank contents, eg, context switch code or procedure call entry and exit sequences. In such a case, it is preferable that the operating system does not know the contents of the register and treats the registers depending on the contents differently. The above method causes these code routines to be written into a single store or load instruction that specifies an odd number of data words. If the coprocessor requires the use of register content information, the odd number of data words in the instruction are interpreted as necessary, storing or loading the format information necessary to specify the content of the data in the register bank into or out of memory. do. This flexibility eliminates the need for unique operating system software to support coprocessors that require register content information.

또한, 이러한 기술로 코드내의 분리 동작에서 레지스터 내용 정보를 로드하여 저장할 필요성을 제거한다. 레지스터 내용 정보를 로드하여 저장하기 위한 옵션이 명령어 내에 포함되어 있으므로, 추가적인 메모리 액세스가 불필요하다. 이는 코드 길이를 감소하고 잠재적으로 시간을 절약한다.This technique also eliminates the need to load and store register content information in separate operations in code. There is an option in the instruction to load and store register contents information, so no additional memory access is required. This reduces the code length and potentially saves time.

상기 설명된 기술을 포함하는 부동 소수점부의 구조적인 설명을 아래에 설명한다.
The structural description of the floating point portion including the above described technique is described below.

1.One. 도입Introduction

VFPv1은, ARM 프로세서 모듈로 사용하기 위한 코프로세서로서 구현되도록 설계된 부동 소수점 방식(FPS; floating point system) 구조(architecture)이다. 이 구조의 구현은, 하드웨어 또는 소프트웨어의 특징을 통합할 수 있거나, 그 구현은 소프트웨어를 사용하여 기능성을 보충하거나 IEEE 754 호환성을 제공할 수 있다. 이 명세는 하드웨어 및 소프트웨어 지원의 조합을 이용하여 완전 IEEE 754 호환성을 달성하고자 한다.VFPv1 is a floating point system (FPS) architecture designed to be implemented as a coprocessor for use as an ARM processor module. Implementations of this structure may incorporate hardware or software features, or the implementation may use software to supplement functionality or provide IEEE 754 compatibility. This specification seeks to achieve full IEEE 754 compatibility using a combination of hardware and software support.

2개의 코프로세서 번호가 VFPv1에 의해 사용되는데, 여기서 10은 단일 정밀도 오퍼랜드로 연산하는데 사용되고, 또한 11은 배정밀도 오퍼랜드로 연산하는데 사용된다. 단일 및 배정밀도 데이터 사이에 변환을, 소오스 오퍼랜드 코프로세서 공간에서 연산하는 2변환 명령어로 수행한다.Two coprocessor numbers are used by VFPv1, where 10 is used to operate on a single precision operand and 11 is used to operate on a double precision operand. The conversion between single and double-precision data is performed with two-transform instructions that operate in source operand coprocessor space.

VFPv1 구조는 다음의 특징들을 포함한다:The VFPv1 structure includes the following features:

· 지원 코드로 하드웨어에 있어서의 IEEE 754와 완전 호환성.· Support code fully compatible with IEEE 754 in hardware.

· 소오스 오퍼랜드로서 각각 어드레스 가능한 32개의 단일 정밀도 레지스터 또는 목적지 레지스터.32 single precision registers or destination registers, each addressable as a source operand.

· 소오스 오퍼랜드로서 각각 어드레스 가능한 16개의 배정밀도 레지스터 또는 목적지 레지스터.(배정밀도 레지스터들은 물리적인 단일 정밀도 레지스터들과 오버랩)16 double-precision or destination registers, each addressable as a source operand (double-precision registers overlap with physical single-precision registers).

· 벡터 모드는 부동 소수점 코드 밀도의 상당한 증가와 로드 및 저장 연산의 동시성을 제공한다.Vector mode provides a significant increase in floating-point code density and concurrency of load and store operations.

· DSP 및 그래픽 동작을 향상시키기 위해 8개의 순환 단일 정밀도 레지스터를 갖는 4개의 뱅크 또는 4개의 순환 배정밀도 레지스터를 갖는 4개의 뱅크.Four banks with eight circular single precision registers or four banks with four circular double precision registers to improve DSP and graphics operation.

· 비정상 핸들링 옵션은 IEEE 754 호환성(부동 소수점 에뮬레이션 패키지로부터 지원됨)간에 선택하거나 또는 고속 플러시 투 제로(Flush-to-zero) 능력을 선택한다. Anomalous handling options select between IEEE 754 compatibility (supported from the floating point emulation package) or select fast flush-to-zero capability.             

· IEEE 754 호환 결과와 완전 파이프라인식으로 연결된 곱-누적의 구현 예정.Full-pipelined product-cumulative implementation with IEEE 754 compliant results.

· C, C++ 및 Java를 위해 FFTOSIZ 명령어로 정수 변환하기 위한 고속 부동 소수점.Fast floating-point for converting integers to FFTOSIZ instructions for C, C ++, and Java.

구현기를 선택하여 하드웨어에서 VFPv1을 완전히 구현하거나 하드웨어 및 지원 코드의 조합을 활용할 수 있다. 이때의 VFPv1은 소프트웨어로 완전히 구현할 수 있다.
The implementation can be chosen to fully implement VFPv1 in hardware or to utilize a combination of hardware and supporting code. At this time, VFPv1 can be completely implemented in software.

2.2. 용어Terms

이 명세는 다음의 용어를 사용한다.This specification uses the following terms:

자동 예외(Automatic exception) - 각각의 예외 인에이블 비트의 값에 상관없이 지원 코드를 항상 바운스(bounce)하는 예외 조건. 만약 예외가 자동이라면 구현 옵션중의 선택. 섹션 0, 6 의 예외 처리(Exception Processing) 참조. Automatic exception -An exception condition that always bounces the support code regardless of the value of each exception enable bit. If the exception is automatic, choose one of the implementation options. See exception processing in sections 0 and 6.

바운스 - 사용자 트랩(trap) 제어기를 호출하거나 또는 그밖의 사용자 코드의 정상적인 흐름을 인터럽트하지 않고서 전체적으로 지원 코드에 의해 제어되는 동작 시스템에 보고된 예외. Bounce -An exception reported to an operating system that is entirely controlled by support code without invoking a user trap controller or interrupting other flows of user code.

CDP - FPS용 '코프로세서 데이터 처리(Coprocessor Data Processing)', CDP 연산은, 로드 또는 저장 연산이라기 보다는 오히려 산술연산이다. CDP -'Coprocessor Data Processing' for FPS, CDP operations are arithmetic rather than load or store operations.

ConvertToUnsignedInteger(Fm) - Fm의 내용을 부호 없는 32-비트 정수 값으로 변환. 이 결과는, 32-비트 부호 없는 정수의 범위 밖의 부동 소수점 값의 최 종 라운딩(rounding) 및 핸들링을 위한 라운딩 모드에 의존한다. 무효(INVALID) 예외는, 부동 소수점 입력 값이 음의 값이거나 32-비트 부호 없는 정수 보다 너무 클 경우 가능하다. ConvertToUnsignedInteger (Fm) -converts the contents of Fm to an unsigned 32-bit integer value. This result depends on the rounding mode for final rounding and handling of floating point values outside the range of 32-bit unsigned integers. An INVALID exception is possible if the floating point input value is negative or too large than a 32-bit unsigned integer.

ConvertToSignedInteger(Fm) - Fm의 내용을 부호 있는 32-비트 정수 값으로 변환. 이 결과는, 32-비트 부호 있는 정수의 범위 밖의 부동 소수점 값의 최종 라운딩 및 핸들링을 위한 라운딩 모드에 의존한다. 무효 예외는, 부동 소수점 입력 값이 32-비트 부호 있는 정수 보다 너무 클 경우 가능하다. ConvertToSignedInteger (Fm) -converts the contents of Fm to a signed 32-bit integer value. This result depends on the rounding mode for the final rounding and handling of floating point values outside the range of 32-bit signed integers. Invalid exceptions are possible if the floating point input value is greater than the 32-bit signed integer.

ConvertUnsignedIntToSingle/Double(Rd) - 32-비트 부호 없는 정수로서 해석된 ARM 레지스터(Rd)의 내용을 단일 또는 배정밀도 부동 소수점 값으로 변환. 목적지 정밀도가 단일이면, 변환 연산에 있어서 부정확한(INEXACT) 예외가 가능하다. ConvertUnsignedIntToSingle / Double (Rd)-Converts the contents of an ARM register (Rd) interpreted as a 32-bit unsigned integer into a single or double precision floating point value. If the destination precision is single, inexact (INEXACT) exceptions to the conversion operation are possible.

ConvertSignedIntToSingle/Double(Rd) - 32-비트 부호 있는 정수로서 해석된 ARM 레지스터(Rd)의 내용을 단일 또는 배정밀도 부동 소수점 값으로 변환. 목적지 정밀도가 단일이면, 변환 연산에 있어서 부정확한 예외가 가능하다. ConvertSignedIntToSingle / Double (Rd)-Converts the contents of an ARM register (Rd) interpreted as a 32-bit signed integer into a single or double-precision floating point value. If the destination precision is single, inaccurate exceptions to the conversion operation are possible.

비정상화된 값(Denormalized value) - (-2Emin < x < 2Emin) 범위에 있는 값을 나타냄. 단일 및 배정밀도 오퍼랜드 또는 비정상에 대한 IEEE 754 포맷에서, 비정상화된 값은 제로 지수를 가지고, 선행 자리 비트는 1이라기 보다는 오히려 0이다. 이 IEEE 754-1985 명세는, 비정상화된 오퍼랜드의 발생 및 조작이 정상적인 오퍼랜드와 같은 정밀도로 수행되는 것을 요구한다. Denormalized value - Represents a value in the range (-2 Emin <x <2 Emin ). In the IEEE 754 format for single and double precision operands or anomalies, the unnormalized value has a zero exponent and the leading digit bit is zero rather than one. This IEEE 754-1985 specification requires that the generation and manipulation of aborted operands be performed with the same precision as normal operands.

디스에이블된 예외(Disabled exception) - 0으로 세트된 FPSCR에 있는 관 련 예외 인에이블 비트를 가진 예외를 '디스에이블된'으로서 언급한다. 이들 예외에 대한 IEEE 754 명세는 정확한 결과를 되돌리는 것으로 정의한다. 예외 조건을 발생하는 연산은, IEEE 754의 정의된 결과를 산출하기 위한 지원 코드로 바운스 할 수 있다. 또, 이 예외는 사용자 예외 핸들러에 보고되지 않을 것이다. Disabled exception-An exception with the associated exception enable bit in the FPSCR set to 0 is referred to as 'disabled'. The IEEE 754 specification for these exceptions defines the return of correct results. An operation that generates an exception condition may bounce with support code to yield a defined result of IEEE 754. Also, this exception will not be reported to the user exception handler.

인에이블된 예외(Enabled exception) - 1로 세트된 각각의 예외 인에이블 비트를 가진 예외. 본 예가 발생하는 경우에 사용자 핸들러는 트랩(trap)할 것이다. 예외 조건을 발생하는 연산은 IEEE 754의 정의된 결과를 산출하기 위한 지원 코드로 바운스 할 수 있다. 그래서, 이 예외는 사용자 예외 핸들러에게 보고될 것이다. Enabled exception -An exception with each exception enable bit set to 1. If this example occurs, the user handler will trap. An operation that generates an exception condition may bounce with support code to yield a defined result of IEEE 754. So this exception will be reported to the user exception handler.

지수(Exponent) - 제시된 수의 값을 판단할 때에 2 제곱된 정수를 보통 나타내는 부동 소수점 수의 성분. 이 지수는 종종 부호 있는 또는 비편향(unbiased) 지수라 부른다. Exponent -A component of a floating point number that normally represents a two-squared integer when determining the value of a given number. This index is often called a signed or unbiased index.

소수(Fraction) - 함축된 2진 소수점의 오른쪽에 놓인 자리(significand)의 필드. Fraction -A field of digits placed to the right of the implied binary decimal point.

플러시 투 제로 모드(Flush-To-Zero Mode) - 이 모드에서, 라운딩이 비정상화된 값으로 변환되기 보다는 오히려 제로로서 처리된 후 (-2Emin < x < 2Emin) 범위에 있는 모든 값. Flush-To-Zero Mode -In this mode, all values in the range (-2 Emin <x <2 Emin ) after rounding are treated as zero rather than being converted to unnormalized values.

하이(High)(Fn/Fm) - 메모리에 나타낸 것처럼 배정밀도 값의 상위 32 비트[63:32]. High (Fn / Fm) -The upper 32 bits of the double-precision value [63:32] as shown in memory.

IEEE 754-1985 - "2진 부동 소수점 연산의 IEEE 표준", ANSI/IEEE Std 754- 1985, 미국 전기 전자 학회(IEEE), Inc. New York, New York, 10017. 이 표준은, 종종 IEEE 754 표준으로서 언급되었고, 데이터 형태, 정확한 연산, 예외 형태 및 핸들링, 부동 소수점 방식용 오류 경계를 정의한다. 대부분의 프로세서는 하드웨어 또는 하드웨어 및 소프트웨어의 조합의 표준에 따라 설계되어 있다. IEEE 754-1985- "The IEEE Standard for Binary Floating Point Operations", ANSI / IEEE Std 754- 1985, The Institute of Electrical and Electronics Engineers (IEEE), Inc. New York, New York, 10017. This standard, often referred to as the IEEE 754 standard, defines data types, correct operations, exception types and handling, and error boundaries for floating point methods. Most processors are designed according to a standard of hardware or a combination of hardware and software.

무한대(Infinity) - ∞를 나타내는데 사용된 IEEE 754의 특수 포맷. 이 지수는 정밀도에 대해 최대이고, 그 자리는 모두 제로이다. Infinity- A special format of IEEE 754 used to represent ∞. This index is the maximum for precision, and all zeros are in place.

입력 예외(Input exception) - 주어진 연산에 대한 하나 이상의 오퍼랜드가 하드웨어에 의해 지원되지 않는 예외 조건. 이때의 연산은 연산 완료를 위해 지원 코드를 바운스 한다. Input exception -An exception condition where one or more operands for a given operation are not supported by the hardware. The operation at this time bounces the supporting code to complete the operation.

중간 결과(Intermediate result) - 라운딩 전의 계산 결과를 저장하는데 사용되는 내부 포맷. 이 포맷은, 목적지 포맷보다 큰 지수 필드 및 자리 필드를 가진다. Intermediate result -The internal format used to store the result of the calculation before rounding. This format has an exponent field and a digit field larger than the destination format.

로우(Low)(Fn/Fm) - 메모리에 나타낸 것처럼 배정밀도 값의 하위 32 비트[31:0]. Low (Fn / Fm)-Lower 32 bits [31: 0] of double-precision value as shown in memory.

MCR - "ARM 레지스터로부터 코프로세서로 이동(Move)". FPS의 경우, 이는 ARM 레지스터와 FPS 레지스터 사이에서 데이터를 전송 또는 레지스터를 제어하는 명령어를 포함한다. 32 비트의 정보만이 단일 MCR 클래스 명령어를 이용하여 전송된다. MCR- "Move from ARM register to coprocessor". In the case of FPS, this includes instructions to transfer data or control registers between the ARM and FPS registers. Only 32 bits of information are transmitted using a single MCR class command.

MRC - "코프로세서로부터 ARM 레지스터로 이동(Move)". FPS의 경우, 이는 FPS와 ARM 레지스터 사이에서 데이터를 전송 또는 레지스터를 제어하는 명령어를 포함한다. 32 비트의 정보만이 단일 MRC 클래스 명령어를 이용하여 전송된다. MRC- "Move from Coprocessor to ARM Register". In the case of FPS, this includes instructions to transfer data or control registers between the FPS and ARM registers. Only 32 bits of information are transmitted using a single MRC class command.

NaN - 번호 없음, 부동 소수점 포맷에 인코딩된 기호 엔티티(Symbolic entity). 시그널링 및 비 시그널링 또는 정지(quiet)의 2가지 형태의 NaN이 있다. 시그널링 NaN은, 오퍼랜드로서 사용된다면 무효 오퍼랜드 예외를 발생한다. 정지 NaN은 시그널링 예외 없이 거의 모든 산술 연산을 통해 전달한다. NaN의 포맷은, 비 제로 자리를 갖는 모두 1인 지수 필드를 갖는다. 시그널링 NaN을 나타내기 위해 소수(fraction)의 최상위 비트는 O인 반면에, 정지 NaN은 그 비트가 1로 세트된다. NaN -No number, symbolic entity encoded in floating point format. There are two types of NaNs, signaling and non-signaling or quiet. Signaling NaN, if used as an operand, throws an invalid operand exception. Stop NaNs are passed through almost all arithmetic operations without signaling exceptions. The format of NaN has an exponent field of all 1s with non-zero digits. The fractional most significant bit is O to indicate signaling NaN, while the stationary NaN has its bit set to one.

보류(Reserved) - 제어 레지스터 또는 명령어 포맷에 있는 필드는 그 필드가 구현에 의해 정의되는 경우 '보류'이거나, 그 필드의 내용이 0이 아닌 경우 예측 불가능한(UNPREDICTABLE) 결과를 산출한다. 이들 필드는, 향후 구조의 확장용도로 보류되거나 특수한 구현이다. 그 구현에 의해 사용되지 않는 모든 보류 비트들은, 0으로 기록되어야 하고 0으로서 판독될 것이다. Reserved -A field in a control register or instruction format is 'reserved' if the field is defined by the implementation or yields an UNPREDICTABLE result if the content of the field is nonzero. These fields are reserved or special implementations for future expansion of the structure. All pending bits not used by the implementation must be written to zero and will be read as zero.

라운딩 모드(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)에 사용된다. Rounding Mode -The IEEE 754 specification requires that all calculations be performed as if infinite precision, that is, the product of two single-precision values, must correctly calculate a place for a double-digit number of places. . It is often necessary to indicate a value in the object precision rounding in place. The IEEE 754 standard provides four rounding modes: Round to Nearest (RZ), Round to Zero (RZ), Round to Plus infinity (RP) ) And round to minus infinity (RM). The first mode can be achieved by rounding at the midpoint with tie case rounding up if the least significant bit of the place making 'even' is zero. This second mode always performs rounding down, effectively truncating any bit to the right of its place, and is used for integer conversion by the C, C ++ and Java languages. The other two modes are used for interval arithmetic.

자리(Significand) - 함축된 2진 소수점의 왼쪽에 명시 또는 암시 선행 비트와, 오른쪽에 있는 소수 필드로 구성된 2진 부동 소수점 수의 구성요소. Significand -A component of a binary floating-point number consisting of an explicit or implied leading bit to the left of an implied binary point and a decimal field to the right.

지원 코드(Support Code) - IEEE 754 표준과의 호환성을 제공하기 위한 하드웨어를 보상하는데 사용되는 소프트웨어. 이 지원 코드는, 초월수 계산과 같은 하드웨어의 범위를 넘은 연산을 수행하는 루틴으로 구성된 라이브러리뿐만 아니라, 지원되지 않는 입력 또는 예외를 발생할 수 있는 입력으로 분할되는 것과 같은 지원 함수(supported functions)와, IEEE 754 컴플라이언스를 제공하기 위해서 예외 조건을 처리하는 예외 핸들러로 구성된 세트의 2가지 구성요소를 갖도록 구성되어 있다. 이때, 지원 코드는, 임의의 지원되지 않는 데이터 형태 또는 데이터 표시(예를 들면, 비정상 값 또는 십진 데이터 형태)의 적절한 핸들링을 예뮬레이트 하기 위해서 구현 함수(implemented functions)를 수행하는데 요구된다. 상기 루틴이 기록되어 그 루틴의 출구에서 사용자의 상태를 조심해서 복원하는 경우 FPS를 그 중간 계산에 이용할 수도 있다. Support Code -Software used to compensate for hardware to provide compatibility with the IEEE 754 standard. This support code is not only a library of routines that perform operations beyond hardware, such as transcendental calculations, but also supported functions such as splitting into unsupported inputs or inputs that can cause exceptions, and IEEE 754 is configured to have two components, a set of exception handlers that handle exception conditions to provide compliance. The support code is then required to perform the implemented functions to emulate the proper handling of any unsupported data type or data representation (e.g., an abnormal value or decimal data type). The FPS may be used for its interim calculations when the routine is recorded to carefully restore the user's state at the exit of the routine.

트랩(Trap) - 각각의 예외 인에이블 비트가 FPSCR에 세트된 예외 조건. 사용자의 트랩 핸들러가 실행될 것이다. Trap- An exception condition with each exception enable bit set in the FPSCR. Your trap handler will run.

미정의(UNDEFINED) - 미정의된 명령어 트랩을 발생하는 명령어를 나타냄. ARM 예외에 관한 많은 정보에 대한 ARM 구조 참조 메뉴얼을 참조한다. UNDEFINED -Indicates an instruction that generates an undefined instruction trap. See the ARM Architecture Reference Manual for more information on ARM exceptions.

예측불가능(UNPREDICTABLE) - 신뢰할 수 없는 명령어 또는 제어 레지스터 필드 값의 결과. 이 예측불가능 명령어 또는 결과는, 보안 홀을 나타내지 않거나, 프로세서 또는 그 시스템의 임의의 부분을 홀트(halt) 또는 행(hang)하지 않아야 한다. UNPREDICTABLE -The result of an unreliable instruction or control register field value. This unpredictable instruction or result should not represent a security hole or should halt or hang any part of the processor or its system.

지원되지 않는 데이터(Unsupported Data) - 하드웨어에 의해 처리되지 않고 종료를 위한 지원 코드로 바운스되는 특정 데이터 값. 이들 데이터는, 무한대, NaN, 비정상 값 및 제로를 포함한다. 구현은, 이들 값중에서 완전히 또는 부분적으로 하드웨어에서 지원되는 것 또는 연산을 종료하기 위해 지원 코드로부터 도움을 필요로 하는 것을 자유롭게 선택한다. 지원되지 않는 데이터 처리로서 생기는 임의의 예외는, 그 예외에 대한 대응하는 예외 인에이블 비트가 세트된 경우 사용자 코드에 트랩핑될 것이다.
Unsupported Data -A specific data value that is not processed by the hardware and bounced into the support code for termination. These data include infinity, NaN, abnormal values, and zero. The implementation is free to choose among these values the ones that are fully or partially supported by the hardware or need assistance from the supporting code to terminate the operation. Any exception resulting from unsupported data processing will be trapped in the user code if the corresponding exception enable bit for that exception is set.

3.3. 레지스터 파일(Register File)Register file

3.13.1 머리말preface

이 구조는, 소오스 또는 목적지 오퍼랜드로서 완전히 정의된 5-비트 레지스터 인덱스내에 모두 개별적으로 어드레스 가능한 32개의 단일 정밀도 및 16개의 배정밀도 레지스터를 제공한다.This structure provides 32 single precision and 16 double precision registers that are all individually addressable within a fully defined 5-bit register index as a source or destination operand.

32개의 단일 정밀도 레지스터는, 16개의 배정밀도 레지스터와 중복되는, 즉, D5으로의 배정밀도 데이터 기록은 S10 및 S11의 내용을 중복기재(overwrite)한 것이다. 컴파일러 또는 어셈블리어 프로그래머가, 중복된 구현에서 단일 정밀도 데이터 기억장치로서 레지스터의 사용과 배정밀도 데이터 기억장치의 반으로서 레지스터의 사용간에 레지스터 사용상의 충돌을 알도록 하는 일이다. 하나의 정밀도로 제한되는 레지스터 사용을 보증하도록 구성된 하드웨어가 없어서, 이것을 위반할 경우 그 결과는 예측 불가능하다.32 single-precision registers overlap with 16 double-precision registers, that is, the double-precision data recording to D5 overwrites the contents of S10 and S11. It is to ensure that a compiler or assembly language programmer knows of a conflict in register usage between the use of a register as a single precision data store in a redundant implementation and the use of a register as half of a double precision data store. Since there is no hardware configured to guarantee the use of registers limited to one precision, violations of this result are unpredictable.

VFPv1은, 스칼라 모드에서 이들 레지스터에 액세스를 제공하고, 한개, 두 개, 또는 세 개의 오퍼랜드 레지스터는 목적지 레지스터에 기록된 결과를 산출하는데 사용되고, 또는 벡터 모드에서 지정된 오퍼랜드는 레지스터 그룹을 참조한다. VFPv1은, 단일 정밀도 오퍼랜드에 대해서 단일 명령어에 있는 8개의 구성 요소까지 및 배정밀도 오퍼랜드에 대해서 4개의 구성 요소까지에 대한 벡터 연산을 제공한다.VFPv1 provides access to these registers in scalar mode, and one, two, or three operand registers are used to yield the result written to the destination register, or the operand specified in vector mode refers to a register group. VFPv1 provides vector operations for up to eight components in a single instruction for a single precision operand and up to four components for a double precision operand.

[표 1]. LEN 비트 인코딩TABLE 1 LEN bit encoding

LENLEN 벡터 길이 인코딩Vector length encoding 000000 스칼라scalar 001001 벡터 길이 2Vector length 2 010010 벡터 길이 3Vector length 3 011011 벡터 길이 4Vector length 4 100100 벡터 길이 5Vector length 5 101101 벡터 길이 6Vector length 6 110110 벡터 길이 7Vector length 7 111111 벡터 길이 8Vector length 8

벡터 모드는, 비-제로 값을 LEN 필드에 기록함으로써 가능해진다. 이때, LEN 필드가 0을 포함하는 경우, FPS는 스칼라 모드에서 연산하고, 그 레지스터 필드는 플랫(flat) 레지스터 모델에서 32개의 개별적인 단일 정밀도 레지스터 또는 16개의 배정밀도 레지스터를 어드레싱함으로서 해석된다. LEN 필드가 비-제로일 경우, FPS는 벡터 모드에서 연산하고, 그 레지스터 필드는 레지스터의 벡터를 어드레싱함으로써 해석된다. LEN 필드의 인코딩을 위해 표 1을 참조한다.Vector mode is made possible by writing a non-zero value in the LEN field. In this case, if the LEN field contains 0, the FPS operates in scalar mode, and the register field is interpreted by addressing 32 individual single precision registers or 16 double precision registers in the flat register model. If the LEN field is non-zero, the FPS operates in vector mode and the register field is interpreted by addressing a vector of registers. See Table 1 for the encoding of the LEN field.

LEN 필드를 변경하지 않고 스칼라 및 벡터 연산을 혼합하는 수단은, 목적지 레지스터의 명세를 통해서 가능하다. 스칼라 연산은, 목적지 레지스터가 레지스터들(S0-S7 또는 D0-D3)의 첫 번째 뱅크에 있을 경우 벡터 모드에 있는 동안 지정될 수 있다. 더 많은 정보에 대해서는 섹션 0을 참조한다.Means of mixing scalar and vector operations without changing the LEN field are possible through specification of the destination register. Scalar operations may be specified while in vector mode if the destination register is in the first bank of registers S0-S7 or D0-D3. See section 0 for more information.

3.23.2 단일 정밀도 레지스터 사용법Single precision register usage

FPSCR에서 LEN 필드가 0일 경우, 32개의 단일 정밀도 레지스터는 번호 S0 내지 S31이 이용 가능하다. 임의의 레지스터가 소오스 또는 목적지 레지스터로서 사용될 수도 있다.
If the LEN field is 0 in the FPSCR, 32 single precision registers are available with numbers S0 through S31. Any register may be used as the source or destination register.

Figure 112000024742744-pct00001
Figure 112000024742744-pct00001

실례 1. 단일 정밀도 레지스터 맵Example 1. Single precision register map

이 단일 정밀도(코프로세서 10) 레지스터 맵은, 실례 1에 도시된 것처럼 나타낼 수 있다. This single precision (coprocessor 10) register map may be represented as shown in Example 1. FIG.             

FPSCR에 있는 LEN 필드가 0보다 클 경우, 그 레지스터 파일은 실례 2에 도시된 것처럼, 8개의 순환 레지스터로 구성된 4개의 뱅크로서 동작한다. 벡터 레지스터 V0 내지 V7의 첫 번째 뱅크는, 스칼라 레지스터 S0 내지 S7과 중복(overlap)되고, 각 오퍼랜드에 대해 선택된 레지스터에 따라 스칼라 또는 벡터로서 어드레싱된다. 더 많은 정보를 위한 레지스터 사용법은 섹션 0, 3.4를 참조한다.If the LEN field in the FPSCR is greater than zero, the register file operates as four banks of eight circular registers, as shown in Example 2. The first bank of vector registers V0 through V7 overlaps with the scalar registers S0 through S7 and is addressed as a scalar or vector depending on the register selected for each operand. See Sections 0 and 3.4 for register usage for more information.

Figure 112000024742744-pct00002
Figure 112000024742744-pct00002

실례 2. 순환 단일 정밀도 레지스터Example 2. Circular Single Precision Register

예를 들어, FPSCR에서 LEN이 3으로 세트되는 경우, 참조 벡터 V10은 레지스터 S10, S11, S12 및 S13이 벡터 연산에 포함되게 한다. 이와 유사하게, V22는 S22, S23, S16 및 S17이 연산에 포함되게 한다. 벡터 모드에서 레지스터 파일을 액세스할 때, 순서에 있어서 V7 다음의 레지스터는 V0이고, 이와 유사하게, V8은 V15 다음이고, V16은 V23 다음이며, V24는 V31 다음이다.For example, when LEN is set to 3 in the FPSCR, the reference vector V10 causes the registers S10, S11, S12 and S13 to be included in the vector operation. Similarly, V22 causes S22, S23, S16 and S17 to be included in the calculation. When accessing the register file in vector mode, the register after V7 in the order is V0, and similarly, V8 is after V15, V16 is after V23, and V24 is after V31.

3.33.3 배정밀도 레지스터 파일Double-precision register file

FPSCR에서 LEN 필드가 0일 경우, 16개의 배정밀도 스칼라 레지스터는 이용 가능하다.If the LEN field is 0 in the FPSCR, 16 double-precision scalar registers are available.

Figure 112000024742744-pct00003
Figure 112000024742744-pct00003

실례 3. 배정밀도 레지스터 맵Example 3. Double-Precision Register Map

임의의 레지스터는, 소오스 또는 목적지 레지스터로서 사용할 수 있다. 이 레지스터 맵은 실례 3에 도시된 것처럼 나타낼 수 있다.Any register can be used as the source or destination register. This register map may be represented as shown in Example 3.

FPSCR에서 LEN 필드가 0보다 클 경우, 4개의 순환 레지스터로 구성된 4개의 뱅크에 있는 4개의 스칼라 레지스터와 16개의 벡터 레지스터는, 실례 4에 도시된 것처럼 이용 가능하다. 벡터 레지스터 V0 내지 V3의 첫 번째 뱅크는, 스칼라 레지스터 D0 내지 D3과 중복된다. 이 레지스터는, 스칼라로서 또는 각 오퍼랜드에 대해 선택된 레지스터에 따라 어드레싱된다. 더 많은 정보를 위한 레지스터 사용법은 섹션 0, 3.4를 참조한다.If the LEN field in the FPSCR is greater than zero, four scalar registers and sixteen vector registers in four banks of four circular registers are available, as shown in Example 4. The first bank of the vector registers V0 through V3 overlaps with the scalar registers D0 through D3. This register is addressed either as a scalar or according to the register selected for each operand. See Sections 0 and 3.4 for register usage for more information.

Figure 112000024742744-pct00004
Figure 112000024742744-pct00004

실례 4. 순환 배정밀도 레지스터 Example 4. Cyclic Double-Precision Register             

섹션 0에서 단일 정밀도 실시예이므로, 배정밀도 레지스터는 4개의 뱅크 내에서 순환하고 있다.Because of the single precision embodiment in section 0, the double precision registers are circulating in four banks.

3.43.4 레지스터 사용법Register usage

스칼라와 벡터간에 3개의 연산을 지원한다(OP2는 부동 소수점 코프로세서에 의해 지원된 임의의 2개의 오퍼랜드 연산일 수 있고, OP3은 임의의 3개의 오퍼랜드 연산일 수 있다).Three operations are supported between scalar and vector (OP 2 can be any two operand operations supported by a floating point coprocessor and OP 3 can be any three operand operations).

다음 설명의 경우, 레지스터 파일의 '첫 번째 뱅크'는, 단일 정밀도 연산용 레지스터 S0-S7으로서 그리고 배정밀도 연산용 레지스터 D0-D3으로서 정의된다.In the following description, the 'first bank' of the register file is defined as registers S0-S7 for single precision operation and registers D0-D3 for double precision calculation.

· 스칼라D = OP2 스칼라A 또는 스칼라D = 스칼라A OP3 스칼라B 또는 스칼라D = 스칼라A * 스칼라B + 스칼라DScalar D = OP 2 scalar A or scalar D = scalar A OP 3 scalar B or scalar D = scalar A * scalar B + scalar D

· 벡터D = OP2 스칼라A 또는 벡터D = 스칼라A OP3 벡터B 또는 벡터D = 스칼라A * 벡터B + 벡터DVector D = OP 2 scalar A or vector D = scalar A OP 3 vector B or vector D = scalar A * vector B + vector D

· 벡터D = OP2 벡터A 또는 벡터D = 벡터A OP3 벡터B 또는 벡터D = 벡터A*벡터B + 벡터DVector D = OP 2 Vector A or Vector D = Vector A OP 3 Vector B or Vector D = Vector A * Vector B + Vector D

3.4.13.4.1 스칼라 연산Scalar operation

2개의 조건은 스칼라 모드에서 FPS가 연산하게 한다.Two conditions cause the FPS to operate in scalar mode.

1? FPSCR에서 LEN 필드는 0이다. 목적지 및 소오스 레지스터는, 단일 정밀도 연산용 스칼라 레지스터 0 내지 31과 배정밀도 연산용 스칼라 레지스터 0 내지 15중의 임의의 것일 수 있다. 이때의 연산은 명령어에 명백하게 지정된 레지스 터에 관해서만 수행한다.One? The LEN field is 0 in FPSCR. The destination and source registers may be any of the scalar registers 0 to 31 for single precision operation and the scalar registers 0 to 15 for double precision calculation. This operation is performed only for the register explicitly specified in the instruction.

2? 목적지 레지스터는 레지스터 파일의 첫 번째 뱅크에 있다. 소오스 스칼라는 임의의 다른 레지스터일 수 있다. 이 모드는, FPSCR에서 LEN 필드를 변경할 필요 없이 스칼라 및 벡터 연산의 중간 혼합을 허용한다.2? The destination register is in the first bank of the register file. The source scalar may be any other register. This mode allows intermediate mixing of scalar and vector operations without having to change the LEN field in the FPSCR.

3.4.23.4.2 스칼라 및 벡터 소오스와 벡터 목적지를 포함하는 연산Operations involving scalar and vector sources and vector destinations

이 모드에서 연산하기 위해서는, FPSCR의 LEN 필드가 0보다 크고, 그 목적지 레지스터가 레지스터 파일의 첫 번째 뱅크에 없다. 스칼라 소오스 레지스터는, 레지스터 파일의 첫 번째 뱅크에 있는 임의의 레지스터일 수 있고 나머지 임의의 레지스터가 벡터B용으로 사용될 수 있다. 주목할 것은, 그 동작이, 소오스 스칼라 레지스터가 멤버(member)일 경우 또는 벡터D가 LEN 구성요소 미만의 벡터B와 중복하는 경우, 즉 벡터D와 벡터B가 동일 벡터이어야 하거나 모든 멤버에서 완전히 별개인 경우 예측 불가능하다는 것이다. 섹션 0에 있는 요약 표를 참조한다.To operate in this mode, the LEN field of the FPSCR is greater than zero and its destination register is not in the first bank of the register file. The scalar source register can be any register in the first bank of the register file and the remaining any register can be used for VectorB. Note that the behavior is that if the source scalar register is a member, or if the vector D overlaps with a vector B less than the LEN component, that is, the vector D and the vector B must be the same vector or are completely separate on all members. The case is unpredictable. See the summary table in section 0.

3.4.33.4.3 벡터 데이터만을 포함하는 연산Operations involving only vector data

이 모드에서 연산하기 위해서는, FPSCR의 LEN 필드가 0보다 크고, 목적지 벡터 레지스터가 레지스터 파일의 첫 번째 뱅크에 없다. 벡터A 벡터의 개개의 구성요소는, 벡터B에 있는 대응한 구성요소와 조합되어 벡터D에 기록된다. 그 레지스터 파일의 첫 번째 뱅크에 없는 임의의 레지스터는 벡터A에 대해 이용 가능하고, 모든 벡터는 벡터B에 대해 이용 가능하다. 다음의 경우에서와 같이, 그 동작이, 소오스 및 목적지의 양 벡터가 LEN 구성요소 미만으로 중복될 경우 예측 불가능하다. 그들은 동일하거나 모든 멤버에서 완전히 별개이다. 섹션 0의 요약 표를 참조한다. To operate in this mode, the LEN field of the FPSCR is greater than zero and the destination vector register is not in the first bank of the register file. The individual components of the vector A vector are recorded in the vector D in combination with the corresponding components in the vector B. Any register not in the first bank of that register file is available for vector A, and all vectors are available for vector B. As in the following case, the operation is unpredictable if both vectors of the source and destination overlap below the LEN component. They are the same or completely separate from all members. See the summary table in section 0.             

주목할 것은, 연산의 FMAC 패밀리에 대해, 목적지 레지스터 또는 벡터는 항상 누적(Accumulate) 레지스터 또는 벡터라는 것이다.Note that for the FMAC family of operations, the destination register or vector is always an accumulate register or vector.

3.4.43.4.4 연산 요약 표Operation summary table

다음의 표는, 단일 및 배정밀도 2 및 3 개의 오퍼랜드 명령어에 대한 레지스터 사용법 옵션을 제시한다. '임의의(Any)'는 지정된 오퍼랜드에 대한 정밀도에서 모든 레지스터의 이용가능성을 나타낸다.The following table presents the register usage options for single and double precision two and three operand instructions. 'Any' indicates the availability of all registers in precision for the specified operand.

[표 2]. 단일 정밀도 3개의 오퍼랜드 레지스터 사용법TABLE 2 Single precision three operand register usage

LEN 필드LEN field 목적지 레지스터Destination register 제1 소오스 레지스터First source register 제2 소오스 레지스터Second source register 연산 형태Calculation form 00 AnyAny AnyAny AnyAny S=SopS 또는 S=S*S+SS = SopS or S = S * S + S non-0non-0 0 - 70-7 AnyAny AnyAny S=SopS 또는 S=S*S+SS = SopS or S = S * S + S LEN 필드LEN field 목적지 레지스터Destination register 제1 소오스 레지스터First source register 제2 소오스 레지스터Second source register 연산 형태Calculation form non-0non-0 8 - 318-31 0 - 70-7 AnyAny V=SopV 또는 V=S*V+VV = SopV or V = S * V + V non-0non-0 8 - 318-31 8 - 318-31 AnyAny V=VopV 또는 V=V*V+VV = VopV or V = V * V + V

[표 3]. 단일 정밀도 2개의 오퍼랜드 레지스터 사용법TABLE 3 Single precision two operand register usage

LEN 필드LEN field 목적지 레지스터Destination register 소오스 레지스터Source register 연산 형태Calculation form 00 AnyAny AnyAny S= op SS = op S non-0non-0 0 - 70-7 AnyAny S= op SS = op S non-0non-0 8 - 318-31 0 - 70-7 V= op SV = op S non-0non-0 8 - 318-31 8 - 318-31 V= op VV = op V

[표 4]. 배정밀도 3개의 오퍼랜드 레지스터 사용법TABLE 4 Usage of double-precision three operand registers

LEN 필드LEN field 목적지 레지스터Destination register 제1 소오스 레지스터First source register 제2 소오스 레지스터Second source register 연산 형태Calculation form 00 AnyAny AnyAny AnyAny S=SopS 또는 S=S*S+SS = SopS or S = S * S + S non-0non-0 0 - 30-3 AnyAny AnyAny S=SopS 또는 S=S*S+SS = SopS or S = S * S + S non-0non-0 4 - 154-15 0 - 30-3 AnyAny V=SopV 또는 V=S*V+VV = SopV or V = S * V + V non-0non-0 4 - 154-15 4 - 154-15 AnyAny V=VopV 또는 V=V*V+VV = VopV or V = V * V + V

[표 5]. 배정밀도 2개의 오퍼랜드 레지스터 사용법TABLE 5 Usage of double-precision two operand registers

LEN 필드LEN field 목적지 레지스터Destination register 소오스 레지스터Source register 연산 형태Calculation form 00 AnyAny AnyAny S= op SS = op S non-0non-0 0 - 30-3 AnyAny S= op SS = op S non-0non-0 4 - 154-15 0 - 70-7 V= op SV = op S non-0non-0 4 - 154-15 8 - 318-31 V= op VV = op V

4.4. 명령어 세트Instruction set

FPS 명령어 3개의 카테고리로 나눌 수 있다.FPS instructions can be divided into three categories.

·MCR 및 MRC - ARM과 FPS 사이의 연산을 전송MCR and MRC-transfer operations between ARM and FPS

·LDC 및 STC - FPS와 메모리 사이의 연산을 로드 및 저장LDC and STC-load and store operations between FPS and memory

·CDP - 데이터 처리 연산CDP-data processing operation

4.14.1 명령어 동시성Instruction concurrency

FPS 구조 명세의 취지는, 2단계의 동시성이다.The intent of the FPS architecture specification is two levels of concurrency.

파이프라인식 기능부와 CDP 기능을 갖는 병렬 로드/저장 연산. 중요한 성능 이득은, 이들 연산과 병렬로 실행하기 위해 일반적으로 연산을 처리하면서 레지스터 의존성이 없는 로드 및 저장 연산을 지원함으로써 이용할 수 있다.Parallel load / store operations with pipelined features and CDP capabilities. Significant performance gains are available by supporting load and store operations that do not have register dependencies while processing the operations to execute in parallel with these operations.

4.24.2 명령어 직렬화Instruction serialization

FPS는, 현재 실행하는 모든 명령어가 완료되고 각각의 예외 상태가 알려질 때까지 그 FPS가 ARM을 사용-대기(Busy-Wait)하게 하는 단일 명령어를 지정한다. 예외가 진행중인 경우, 그 직렬화 명령어는 취소되고 그 ARM에서 예외 처리를 시작한다. FPS에서 그 직렬화 명령어는,The FPS specifies a single instruction that causes the FPS to Busy-Wait until all currently executing instructions complete and each exception status is known. If an exception is in progress, the serialization instruction is canceled and the ARM begins to handle the exception. In FPS, the serialization instruction is

·FMOVX - 부동 소수점 방식 레지스터에 대한 판독 또는 기록FMOVX-reads or writes to floating point registers

이 있다. There is this.             

부동 소수점 방식 레지스터에 대한 임의의 판독 또는 기록을 현재 명령어가 완료할 때까지 멈추게 한다. 시스템 ID레지스터에 대한 FMOVX(FPSID; FMOVX to the System ID Register)는, 선행하는 부동 소수점 명령어로 일어난 예외를 일으킨다. 사용자 상태(User Status)와 제어 레지스터(Control Register)의 판독/변경/기록(FPSCR)(FMOVX를 사용하여)을 수행하는 것은, 예외 상태 비트(FPSCR[4:0])를 클리어시키는데 사용될 수 있다.Stops any read or write to the floating point register until the current instruction completes. FMOVX (FMOVX to the System ID Register) for the System ID Register raises an exception raised by the preceding floating point instruction. Performing User Status and Control Register Read / Change / Write (using FMOVX) can be used to clear the exception status bits FPSCR [4: 0]. .

4.34.3 정수 데이터를 포함하는 변환Transforms that contain integer data

부동 소수점과 정수 데이터사이의 변환은, 정수 데이터를 포함하는 데이터 전송 명령어와 그 변환을 수행하는 CDP 명령어로 구성된 FPS에서 2단계 처리이다. 임의의 산술 연산을 FPS 레지스터에 있는 정수 데이터에 관해 시도하는 경우, 그 결과는 정수 포맷에서 예측 불가능하여서 이러한 임의의 연산은 피해야 한다.Conversion between floating point and integer data is a two-step process in the FPS consisting of a data transfer instruction containing integer data and a CDP instruction that performs the conversion. If any arithmetic operation is attempted on integer data in the FPS register, the result is unpredictable in integer format and this random operation should be avoided.

4.3.14.3.1 FPS 레지스터에서 정수 데이터를 부동 소수점 데이터로 변환Convert integer data to floating point data in FPS register

정수 데이터는, MCR FMOVS 명령어를 사용하여 어느 ARM 레지스터로부터든 부동 소수점 단일 정밀도 레지스터에 로딩될 수도 있다. FPS 레지스터의 정수 데이터를, 정수 투 플로우트(integer-to-float) 패밀리 연산으로 단일 또는 배정밀도 부동 소수점 값으로 변환하여 목적지 FPS 레지스터에 기록한다. 이 목적지 레지스터는, 그 정수 값이 더 이상 필요 없을 경우 소오스 레지스터가 된다. 이때의 정수는, 부호 있는 또는 부호 없는 32-비트량이다.Integer data may be loaded into a floating point single precision register from any ARM register using the MCR FMOVS instruction. Integer data from the FPS register is converted to a single or double-precision floating point value using integer-to-float family operations and written to the destination FPS register. This destination register becomes a source register when its integer value is no longer needed. The integer at this time is a signed or unsigned 32-bit amount.

4.3.24.3.2 FPS 레지스터에 있는 부동 소수점 데이터를 정수 데이터로 변환Convert floating point data in FPS register to integer data

FPS 단일 또는 배정밀도 레지스터의 값을, 플로우트 투 정수(float-to-integer) 패밀리 명령어를 가진 부호 있는 또는 부호 없는 32-비트 정수 포맷으로 변환한다. 그 결과, 정수는 목적지 단일 정밀도 레지스터에 위치한다. 이때의 정수 데이터를 MRC FMOVS 명령어를 사용하여 ARM 레지스터에 저장한다.Converts the value of an FPS single or double-precision register into a signed or unsigned 32-bit integer format with float-to-integer family instructions. As a result, the integer is placed in the destination single precision register. At this time, the integer data is stored in ARM register by using MRC FMOVS instruction.

4.44.4 레지스터 파일 어드레싱Register file addressing

단일 정밀도 공간(S=0)에서 연산하는 명령어는, 그 명령어 필드에 이용 가능한 5비트를 오퍼랜드 액세스를 위해 사용한다. 이때, 상위 4비트는 Fn, Fm 또는 Fd로 레이블된(labeled) 오퍼랜드 필드에 포함되고, 그 어드레스의 최하위 비트는 각각 N, M, 또는 D에 있다.An instruction operating in a single precision space (S = 0) uses the 5 bits available for that instruction field for operand access. At this time, the upper 4 bits are included in the operand field labeled Fn, Fm, or Fd, and the least significant bit of the address is in N, M, or D, respectively.

배정밀도 공간(S=1)에서 연산하는 명령어는, 그 오퍼랜드 어드레스의 상위 4비트만을 사용한다. 이들 4비트는, Fn, Fm 및 Fd 필드에 포함된다. N, M 및 D 비트는, 대응하는 오퍼랜드 필드가 오퍼랜드 어드레스를 포함할 경우 0을 포함해야 한다.The instruction to operate in the double precision space (S = 1) uses only the upper 4 bits of the operand address. These four bits are included in the Fn, Fm, and Fd fields. The N, M, and D bits must contain zero if the corresponding operand field contains an operand address.

4.54.5 MCR(ARM 레지스터에서 코프로세서로 이동; Move to Coprocessor from ARM 레지스터)MCR (Move to Coprocessor from ARM register)

이 MCR 연산은, FPS에 의해 ARM 레지스터에 있는 데이터의 전송 또는 사용을 포함한다. 이는, ARM 레지스터로부터 단일 정밀도 포맷 또는 한 쌍의 ARM 레지스터에서 FPS 레지스터까지의 배정밀도 포맷에 있는 데이터를 이동하고, ARM 레지스터에서 단일 정밀도 FPS 레지스터까지의 부호 있는 또는 부호 없는 정수 값을 로딩하 고, 제어 레지스터에 ARM 레지스터의 내용을 로딩하는 것을 포함한다.This MCR operation involves the transfer or use of data in ARM registers by the FPS. This moves data in a single-precision format from an ARM register or a double-precision format from a pair of ARM registers to an FPS register, loads a signed or unsigned integer value from an ARM register to a single-precision FPS register, This involves loading the contents of the ARM register into the control register.

MCR 명령어에 대한 포맷은 실례 5에 나타내었다.The format for the MCR instruction is shown in Example 5.

Figure 112000024742744-pct00005
Figure 112000024742744-pct00005

실례 5. MCR 명령어 포맷Example 5. MCR Command Format

[표 6]. MCR 비트 필드 정의TABLE 6 MCR Bit Field Definition

비트 필드Bit field 정의Justice OpcodeOpcode 3-비트 연산 코드(표 7 참조)3-bit opcode (see Table 7) RdRd ARM 소오스 레지스터 인코딩ARM source register encoding SS 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드Arithmetic operand size. 0-single precision operand 1-double precision operand NN 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 하거나 그 연산이 미정의됨 시스템 레지스터 이동 보류Single precision operation: destination register least significant bit double precision operation: Must be set to 0 or operation is undefined System register move pending FnFn 단일 정밀도 연산: 목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스 시스템 레지스터 이동: 0000 - FPID (코프로세서 ID 번호) 0001 - FPSCR(사용자 상태 및 제어 레지스터) 0100 -FPREG(레지스터 파일 내용 레지스터) 기타 레지스터 인코딩은 보류이고 여러 가지 구현에 있어서 다를 수 있다.Single precision operation: Destination register address Higher four bits Double precision operation: Destination register address System register shift: 0000-FPID (coprocessor ID number) 0001-User Status and Control Register (FPSCR) 0100 -FPREG (register file contents register) Register encoding is pending and may vary in various implementations. RR 보류 비트들Pending bits

[표 7]. MCR 오페코드 필드 정의TABLE 7 MCR Opcode Field Definition

Opcode 필드 Opcode field 이름name 연산calculate 000000 FMOVSFMOVS Fn=Rd(32비트, 코프로세서 10)Fn = Rd (32-bit, coprocessor 10) 000000 FMOVLDFMOVLD 로우(Fn)=Rd(배정밀도 로우 32비트, 코프로세서 11)Low (Fn) = Rd (32-bit double precision, coprocessor 11) 001001 FMOVHDFMOVHD 하이(Fn)=Rd(배정밀도 하이 32비트, 코프로세서 11)High (Fn) = Rd (double precision high 32-bit, coprocessor 11) 010-110010-110 보류Hold 111111 FMOVXFMOVX 시스템 레지스터=Rd(코프로세서 10 공간)System Register = Rd (Coprocessor 10 Space)

주석 : 32-비트 데이터 연산만이 FMOV[S, HD, LD] 명령어에 의해 지원된다. ARM 레지스터 또는 단일 정밀도 레지스터에 있는 데이터만이 FMOVS 연산에 의해 이동된다. 2개의 ARM 레지스터 FMOVLD 및 FMOVHD 명령어로부터 배정밀도 오퍼랜드를 전송하기 위해서, 하위 반과 상위 반을 각각 이동한다.Note: Only 32-bit data operations are supported by the FMOV [S, HD, LD] instruction. Only data in the ARM register or single precision register is moved by the FMOVS operation. To transfer double-precision operands from two ARM registers, FMOVLD and FMOVHD instructions, move the lower half and upper half, respectively.

4.64.6 MRC(코프로세서로부터 ARM 레지스터로 이동/ 부동 레지스터 비교; Move to ARM Register from Coprocessor/Compare Floating Registers)MRC (Move to ARM Register from Coprocessor / Compare Floating Registers)

이 MRC 연산은, FPS 레지스터에 있는 데이터의 ARM 레지스터로의 전송을 포함한다. 이는, 단일 정밀도 값 또는 부동 소수점 값을 정수로 변환한 결과를 ARM 레지스터로 이동하거나 배정밀도 FPS 레지스터를 2개의 ARM 레지스터로 이동하고, CPSR의 상태 비트를 이전 부동 소수점 비교 연산의 결과로 변경하는 것을 포함한다.This MRC operation involves the transfer of data from the FPS register to the ARM register. This means moving the result of converting a single precision value or floating point value to an integer into an ARM register, or moving a double-precision FPS register into two ARM registers, and changing the status bits of the CPSR to the result of the previous floating point comparison operation. Include.

MRC 명령어의 포맷은 실례 6에 도시되어 있다.The format of the MRC instruction is shown in Example 6.

Figure 112000024742744-pct00006
Figure 112000024742744-pct00006

실례 6. MRC 명령어 포맷Example 6. MRC Instruction Format

[표 8]. MRC 비트 필드 정의TABLE 8 MRC bit field definitions

비트필드Bitfield 정의Justice OpcodeOpcode 3비트 FPS 연산 코드(표 9 참조)3-bit FPS opcode (see Table 9) RdRd ARM 목적지* 레지스터 인코딩ARM destination * register encoding SS 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드Arithmetic operand size. 0-single precision operand 1-double precision operand

비트필드Bitfield 정의Justice NN 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: O으로 세트되어야 하거나 연산이 미정의됨 시스템 레지스터 이동 보류Single precision operation: destination register least significant bit double precision operation: Must be set to O or operation is undefined System register move pending M M 보류Hold FnFn 단일 정밀도 연산: 목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스 시스템 레지스터 이동: 0000 - FPID(코프로세서 ID 번호) 0001 - FPSCR(사용자 상태 및 제어 레지스터) 0100 - FPREG(레지스터 파일 내용 레지스터) 기타 레지스터 인코딩은 보류하고 여러 가지 구현은 다를 수 있음. Single precision operation: Destination register address Higher four bits Double precision operation: Destination register address System register shift: 0000-Coprocessor ID number (FPID) 0001-User Status and Control Register (FPSCR) 0100-Register File Content Register (FPREG) Register encodings are reserved and various implementations may vary. FmFm 보류 Hold RR 보류 Hold

* FMOVX FPSCR 명령어에 대해서, 상기 Rd 필드가 R15(1111)를 포함할 경우, CPSR의 상위 4비트는 결과적인 조건 코드로 갱신될 것이다.For the FMOVX FPSCR instruction, if the Rd field contains R15 1111, the upper 4 bits of the CPSR will be updated with the resulting condition code.

[표 9]. MRC 오페코드 필드 정의TABLE 9 MRC Opcode Field Definition

Opcode필드 Opcode field 이름name 연산calculate 000000 FMOVSFMOVS Rd=Fn(32비트, 코프로세서 10)Rd = Fn (32-bit, coprocessor 10) 000000 FMOVLDFMOVLD Rd=Low(Fn)Dn의 하위 32비트가 전송됨.(배정밀도 로우 32비트, 코프로세서 11)Lower 32 bits of Rd = Low (Fn) Dn are transmitted (double precision low 32 bits, coprocessor 11) 001001 FMOVHDFMOVHD Rd=High(Fn) Dn의 상위 32비트가 전송됨.(배정밀도 하이 32비트, 코프로세서 11)Rd = High (Fn) The upper 32 bits of Dn are transmitted (double precision high 32 bits, coprocessor 11). 010 - 110010-110 보류Hold 111111 FMOVXFMOVX Rd=시스템 레지스터Rd = System Register

주석 : MCR FMOV 명령어 주석 참조.Comment: See MCR FMOV command comment.

4.74.7 LDC/STC(로드/저장 FPS 레지스터)LDC / STC (load / store FPS register)

LDC 및 STC 연산은 FPS와 메모리 사이의 데이터를 전송한다. 부동 소수점 데이터는, 그 ARM 어드레스 레지스터가 갱신되었거나 영향을 받지 않고 남어서 단일 데이터 전송 또는 다중 데이터 전송의 정밀도에서 전송될 수 있다. 이동 다중 연산 에서 데이터 구조에 대한 다중 오퍼랜드 액세스는 물론, 꽉찬 내림차순 스택과 빈 오름차순 스택 구조를 지원한다. LDC 및 STC에 대한 다양한 옵션의 설명을 위한 표 11을 참조한다.LDC and STC operations transfer data between the FPS and memory. Floating-point data can be transmitted at the precision of a single data transfer or multiple data transfers, leaving its ARM address registers updated or left unaffected. Support for full operand stacks and empty ascending stack structures, as well as multiple operand accesses to data structures in move multiple operations. See Table 11 for a description of the various options for LDC and STC.

실례 7에 LDC 및 STC 명령어의 포맷이 도시되어 있다.Example 7 shows the format of the LDC and STC instructions.

Figure 112000024742744-pct00007
Figure 112000024742744-pct00007

실례 7. LDC/STC 명령어 포맷Example 7. LDC / STC Instruction Format

[표 10]. LDC/STC 비트 필드 정의TABLE 10. LDC / STC Bit Field Definition

비트 필드Bit field 정의Justice PP 프리/포스트 인덱싱(0=포스트(post), 1=프리(pre)Pre / post indexing (0 = post, 1 = pre) UU 업/다운 비트(0=다운, 1=업)Up / Down Bits (0 = down, 1 = up)

비트 필드Bit field 정의Justice DD 단일 정밀도 연산: 소오스/목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함Single precision operation: source / destination register least significant bit double precision operation: must be set to 0 WW 재기록 비트(0=재기록 하지 않음, 1=재기록)Rewrite bit (0 = do not rewrite, 1 = rewrite) LL 방향 비트(0=저장, 1=로드)Direction bit (0 = save, 1 = load) RnRn ARM 기본 레지스터 인코딩ARM base register encoding FdFd 단일 정밀도 연산: 소오스/목적지 레지스터 어드레스 상위 4비트 배정밀도 연산: 소오스/목적지 레지스터 어드레스Single precision operation: source / destination register address High 4 bit double precision operation: source / destination register address SS 연산 오퍼랜드 크기. 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드Arithmetic operand size. 0-single precision operand 1-double precision operand 오프셋/전송 수Offset / transmits 부호 없는 8-비트 오프셋 또는 FLDM(IA/DB) 및 FSTM(IA/DB)를 위해 전송하기 위한 단일 정밀도 (배정밀도 레지스터 카운트의 2배)레지스터의 수. 전송에 있어서 최대 워드 수는, 16개의 단일 정밀도 값 또는 8개의 배정밀도 값을 허용하는 16이다.Unsigned 8-bit offset or number of single-precision (double the double-precision register count) registers for transfer for FLDM (IA / DB) and FSTM (IA / DB). The maximum number of words in a transmission is 16 which allows for 16 single precision values or 8 double precision values.

4.7.14.7.1 로드 및 저장 연산을 위한 일반적인 특징General Features for Load and Store Operations

다중 레지스터는, 벡터 연산에 의해 사용된 4개 또는 8개의 레지스터 경계를 가로질러 랩핑하지 않고 레지스터 파일을 통해 선형적으로 로딩 및 저장한다. 과거의 레지스터 파일 끝을 로드하려는 것은 예측 불가능하다.Multiple registers load and store linearly through a register file without wrapping across the four or eight register boundaries used by vector operations. Trying to load past register file ends is unpredictable.

이중 로드 또는 저장 배수(multiple)에 대한 오프셋이 홀수 레지스터 카운트 17이하를 포함할 경우, 그 구현은 또 다른 32-비트 데이터 항목을 기록하거나 또 다른 32-비트 데이터 항목을 판독할 수도 있지만, 그렇게 꼭 필요한 것은 아니다. 이 추가 데이터 항목은, 그것들이 로드 또는 저장되기 때문에 레지스터의 내용을 식별하는데 사용할 수 있다. 이는, 레지스터 파일 포맷이 정밀도용 IEEE 754 포맷과는 다르고 각 레지스터는 메모리에 있는 그것을 식별하는데 요구되는 타입 정보를 갖는 구현에 유용하다. 오프셋이 홀수이고 그 수가 단일 정밀도 레지스터의 수보다 클 경우, 이는 그 레지스터의 문맥 전환과 모든 시스템 레지스터를 초기화하는데 사용할 수 있다.If the offset for a double load or storage multiple includes an odd register count of 17 or less, the implementation may write another 32-bit data item or read another 32-bit data item, but not necessarily so. It is not necessary. These additional data items can be used to identify the contents of registers as they are loaded or stored. This is useful for implementations where the register file format differs from the IEEE 754 format for precision and each register has the type information required to identify it in memory. If the offset is odd and the number is greater than the number of single precision registers, it can be used to context switch that register and initialize all system registers.

[표 11]. 로드 및 저장 어드레싱 모드 옵션TABLE 11 Load and Save Addressing Mode Options

Figure 112000024742744-pct00008
Figure 112000024742744-pct00008

Figure 112000024742744-pct00009
Figure 112000024742744-pct00009

Figure 112000024742744-pct00010
Figure 112000024742744-pct00010

Figure 112000024742744-pct00011
Figure 112000024742744-pct00011

4.84.8 CDP(코프로세서 데이터 처리; Coprocessor Data Processing)CDP (Coprocessor Data Processing)

CDP 명령어는, 부동 소수점 레지스터 파일로부터의 오퍼랜드를 포함하고, 그 레지스터 파일에 재기록될 결과를 산출하는 모든 데이터 처리 연산을 포함한다. 특정 관심사중에 FMAC(연쇄된 곱셈-누적) 연산과, 2개의 오퍼랜드에 관한 곱셈을 수행하고 제 3 오퍼랜드를 가산하는 연산이 있다. 이 연산은, IEEE 라운딩 연산을 제 3 오퍼랜드의 가산전에 곱에 관해 수행한다는 점에서 통합(fused) 곱셈-누적 연산과는 다르다. 이는 자바(Java) 코드가 FMAC 연산을 유용하게 하여 별도의 곱셈 및 가산 연산이 되면서 곱셈-누적 연산의 속도를 향상시킨다.The CDP instruction includes an operand from a floating point register file and includes all data processing operations that yield a result to be rewritten to that register file. Of particular interest are FMAC (chained multiplication-cumulative) operations, and operations that perform multiplication on two operands and add third operands. This operation differs from a fused multiply-cumulative operation in that the IEEE rounding operation is performed on the product before addition of the third operand. This speeds up the multiply-cumulative operations by making the Java code useful for FMAC operations, resulting in separate multiplication and addition operations.

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 사이클을 절감한다.Two instructions in the CDP group are useful for converting floating point values in the FPS register to integer values. FFTOUI [S / D] uses the current rounding mode in the FPSCR to convert single or double precision contents into unsigned integers in the FPS register. FFTOSI [S / D] converts to a signed integer. FFTOUIZ [S / D] and FFTOSIZ [S / D] perform the same function but invalidate the FPSCR rounding mode for that conversion and truncate any fractional bits. The function of FFTOSIZ [S / D] requires C, C ++, and Java to convert floating numbers to integers. The FFTOSIZ [S / D] instruction provides the capability without requiring adjustment of the rounding mode bits from FPSCR to RZ for conversion, thereby yielding a cycle count for conversion to FFTOSIZ [S / D] operations. Which saves 4 to 6 cycles.

그 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를 정의한다.The comparison operation is performed using the CDP CMP instruction, followed by the MRC FMOVX FPSCR instruction to load the resulting FPS flag bits (FPSCR [31:28]) into the ARM CPSR flag bits. The comparison operation at this time is provided with the possibility of invalid exception and without the possibility if one of the comparison operands is NaN. FCMP and FCMP0 do not signal invalid when one of the comparison operands is NaN, and FCMPE and FCMPE0 also signal an exception. The FCMP0 and FCMPE0 compare 0 with the operand in the Fm field and set the FPS flag accordingly. After the FMOVX FPSCR operation, define the ARM flags N, Z, C and V as follows.

N 미만Less than N

Z 같음Z equals

C 크거나 같음 또는 명령을 받지 않음C is greater than or equal to or not commanded

V 명령을 받지 않음 Do not receive V command             

CDP 명령의 포맷은 아래 실례 8에 나타내었다.The format of the CDP instruction is shown in Example 8 below.

Figure 112000024742744-pct00012
Figure 112000024742744-pct00012

실례 8. CDP 명령어 포맷Example 8. CDP Command Format

[표 13]. CDP 비트 필드 정의TABLE 13 CDP Bit Field Definition

비트 필드Bit field 정의Justice 오페코드Oppe Code 4-비트 FPS 연산코드(표 14 참조)4-bit FPS opcode (see Table 14) DD 단일 정밀도 연산: 목적지 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함Single precision operation: destination register least significant bit double precision operation: must be set to 0

비트 필드Bit field 정의Justice FnFn 단일 정밀도 연산: 소스 A레지스터 상위 4비트 OR 확장 오페코드 최상위 4비트 배정밀도 연산: 소스 A 레지스터 어드레스 OR 확장 오페코드 최상위 4비트Single precision operation: Source A register high 4 bits OR extended opcode most significant 4 bits Double precision operation: source A register address OR extended opcode most significant 4 bits FdFd 단일 정밀도 연산: 목적지 레지스터 상위 4비트 배정밀도 연산: 목적지 레지스터 어드레스Single precision operation: destination register high 4 bits double precision operation: destination register address SS 연산 오퍼랜드 크기: 0 - 단일 정밀도 오퍼랜드 1 - 배정밀도 오퍼랜드Arithmetic operand size: 0-single precision operand 1-double precision operand NN 단일 정밀도 연산: 소스 A 레지스터 최하위 비트 확장 오페코드 최하위 비트 배정밀도 연산: 0으로 세트되어야 함 확장 오페코드 최하위 비트Single precision operation: source A register least significant bit extended opcode least significant bit double precision operation: must be set to 0 extended opcode least significant bit MM 단일 정밀도 연산: 소스 B 레지스터 최하위 비트 배정밀도 연산: 0으로 세트되어야 함Single precision operation: source B register least significant bit double precision operation: must be set to 0 FmFm 단일 정밀도 연산: 소스 B 레지스터 어드레스 상위 4비트 배정밀도 연산: 소스 B 레지스터 어드레스Single-Precision Operation: Source B Register Address High 4-bit double precision operation: Source B Register Address

4.8.14.8.1 오페코드Oppe Code

표 14는, CDP 명령어의 중요한 오페코드를 나타낸다. 모든 니모닉(mnemonics)은, [OPERATION][COND][S/D] 형태이다.
Table 14 shows the major opcodes of CDP instructions. All mnemonics are of the form [OPERATION] [COND] [S / D].

[표 14]. CDP 오페코드 명세TABLE 14 CDP Oppe Code Specification

오페코드 필드 Opcode Field 연산 이름Operation name 연산calculate 00000000 FMACFMAC Fd=Fn*Fm+FdFd = Fn * Fm + Fd 00010001 FNMACFNMAC Fd=-(Fn*Fm+Fd)Fd =-(Fn * Fm + Fd) 00100010 FMSCFMSC Fd=Fn*Fm-FdFd = Fn * Fm-Fd 00110011 FNMSCFNMSC Fd=-(Fn*Fm-Fd)Fd =-(Fn * Fm-Fd) 01000100 FMULFMUL Fd=Fn*FmFd = Fn * Fm 01010101 FNMULFNMUL Fd=-(Fn*Fm)Fd =-(Fn * Fm) 01100110 FSUBFSUB Fd=Fn-FmFd = Fn-Fm 01110111 FNSUBFNSUB Fd=-(Fn-Fm)Fd =-(Fn-Fm) 10001000 FADDFADD Fd=Fn+FmFd = Fn + Fm 1001- 10111001- 1011 보류Hold 11001100 FDIVFDIV Fd=Fn/FmFd = Fn / Fm 11011101 FRDIVFRDIV Fd=Fm/FnFd = Fm / Fn 11101110 FRMDFRMD Fd=Fn%Fm(Fd=Fn/Fm후 소수 좌측)Fd = Fn% Fm (left after the Fd = Fn / Fm decimal) 11111111 확장expansion 2개의 오퍼랜드 연산을 위한 연산을 지정하기 위해 Fn 레지스터 필드 사용(표 15 참조)Use the Fn register field to specify an operation for two operand operations (see Table 15)

4.8.24.8.2 확장된 연산Extended operations

표 15는 오페코드 필드에 있는 확장 값을 사용하여 이용가능한 확장 연산을 나타낸다. 모든 명령어는 직렬화 및 FLSCB 명령어의 제외를 가진 [OPERATION][COND][S/D] 형태이다. 그 확장 연산용 명령어 인코딩은, Fn 오퍼랜드, 즉, {Fn[3:0], N}용 레지스터 파일 내에 인덱스와 같은 방법으로 형성된다. Table 15 shows the extension operations available using the extension values in the Opcode field. All instructions are of the form [OPERATION] [COND] [S / D] with serialization and the exclusion of FLSCB instructions. The instruction encoding for the extended operation is formed in the same manner as the index in the register file for the Fn operand, i.e., {Fn [3: 0], N}.             

[표 15]. CDP 확장 연산TABLE 15. CDP Extended Operation

Figure 112000024742744-pct00013
Figure 112000024742744-pct00013

Figure 112000024742744-pct00014
Figure 112000024742744-pct00014

Figure 112000024742744-pct00015
Figure 112000024742744-pct00015

* 비벡터화 가능한 연산. 이 LEN 필드를 무시하고, 특정 레지스터에 관한 스칼라 연산을 수행한다.* Non vectorizable operations. Ignore this LEN field and perform a scalar operation on a specific register.

5.5. 시스템 레지스터System register

5.15.1 시스템 ID 레지스터(FPSID)System ID Register (FPSID)

이 FPSID는, FPS 구조와 정의된 구현 ID 값을 포함한다.
This FPSID contains the FPS structure and the implementation ID value defined.

Figure 112000024742744-pct00016
Figure 112000024742744-pct00016

실례 9. FPSID 레지스터 인코딩Example 9. FPSID Register Encoding

이 워드는, 모델, FPS의 특징 세트 및 수정 및 마스크 세트 번호를 결정하는데 사용할 수도 있다. 이 FPSID는 읽기 전용이고, 그 FPSID에 쓰기는 무시된다. FPSID 레지스터 레이아웃에 대한 실례 9를 참조한다.This word may be used to determine the model, feature set and modification of the FPS, and mask set number. This FPSID is read-only and writing to that FPSID is ignored. See Example 9 for the FPSID register layout.

5.25.2 사용자 상태 및 제어 레지스터(FPSCR)User Status and Control Register (FPSCR)

FPSCR 레지스터는, 사용자 액세스 가능 구성 비트와 예외 상태 비트를 포함한다. 구성 옵션은, 예외 인에이블 비트, 라운딩 제어, 벡터 스트라이드 및 길이, 비정상적인 오퍼랜드 및 결과의 핸들링, 및 디버그(debug) 모드의 사용을 포함한다. 이 레지스터는, FPS를 구성하고 종료된 연산의 상태를 문의하기 위해 사용자 및 오퍼레이팅 시스템 코드용이다.The FPSCR register contains user accessible configuration bits and exception status bits. Configuration options include exception enable bit, rounding control, vector stride and length, handling of abnormal operands and results, and the use of debug mode. This register is for user and operating system code to configure the FPS and query the status of completed operations.

Figure 112000024742744-pct00017
Figure 112000024742744-pct00017

실례 10. 사용자 상태 및 제어 레지스터(FPSCR)Example 10. User Status and Control Register (FPSCR)

그것은 문맥 전환 동안에 저장 및 복원되어야 한다. 31 내지 28 비트는, 가장 최근의 비교 명령어로부터의 플래그 값을 포함하고, FPSCR의 읽기를 사용하여 액세스될 수 있다. 이러한 FPSCR은 위의 실례 10에 도시되어 있다. It must be saved and restored during the context switch. Bits 31 through 28 contain the flag value from the most recent comparison instruction and can be accessed using the read of the FPSCR. This FPSCR is shown in Example 10 above.             

5.2.15.2.1 비교 상태 및 처리 제어 바이트Comparison Status and Processing Control Bytes

31 내지 28비트는, 가장 최근의 비교 연산 결과와 특정 상황에서 상기 FPS의 산술 응답을 지정하는데 유용한 몇몇의 제어 비트를 포함한다. 비교 상태 및 처리 제어 바이트의 포맷은, 실례 11에 나타내었다.Bits 31 to 28 contain the most recent comparison operation result and some control bits that are useful for specifying the arithmetic response of the FPS in a particular situation. The comparison status and the format of the process control byte are shown in Example 11.

Figure 112000024742744-pct00018
Figure 112000024742744-pct00018

실례 11. FPSCR 비교 상태 및 처리 제어 바이트Example 11. FPSCR Comparison Status and Processing Control Byte

[표 16]. FPSCR 비교 상태 및 처리 제어 바이트 필드 정의TABLE 16. FPSCR comparison status and processing control byte field definitions

레지스터 비트Register bits 이름name 기능function 3131 NN 비교결과는 미만이었음Comparison was less than 3030 ZZ 비교결과는 같았음The comparison was the same 2929 CC 비교결과는 크거나 같음 또는 명령을 받지 않았음Comparison results are greater than or equal to or not ordered 2828 VV 비교결과는 명령을 받지 않았음The comparison did not receive an order 27 : 2527: 25 보류Hold 2424 FZFZ 플러시 투 제로 0: IEEE 754 언더플로우 핸들링(디폴트) 1: 플러시 타이니(Tiny) 제로가 됨 목적지 정밀도용 정상 범위보다 작은 임의의 결과는 목적지에 기록된 제로가 된다. 이 언더플로우 예외 트랩을 얻지 못함.Flush to zero 0: IEEE 754 underflow handling (default) 1: Flush Tiny becomes zero Any result less than the normal range for the destination precision will be zero written to the destination. You do not get this underflow exception trap.

5.2.25.2.2 시스템 제어 바이트System control bytes

이 시스템 제어 바이트는, 라운딩 모드, 벡터 스트라이드 및 벡터 길이 필드를 제어한다. 이 비트는 실례 12에 나타낸 것과 같이 지정되어 있다. VFPv1 구조는, 사용을 위한 레지스터 파일 스트라이딩(striding) 메카니즘과 벡터 연산을 통합시킨 것이다. 스트라이드 비트를 00으로 세트할 경우, 벡터 연산에 선택된 다음 레지스터는 그 레지스터 파일에 있는 이전 레지스터 바로 뒤의 레지스터가 된다. 정상 레지스터 파일 랩핑 메카니즘은 스트라이드 값에 영향을 받지 않는다. 11의 스트라이드는, 모든 입력 레지스터 및 출력 레지스터를 2씩 증가시킨다.This system control byte controls the rounding mode, vector stride and vector length fields. This bit is specified as shown in Example 12. The VFPv1 architecture incorporates register file striding mechanisms and vector operations for use. If you set the stride bit to 00, the next register selected for the vector operation becomes the register immediately after the previous register in that register file. The normal register file wrapping mechanism is not affected by the stride value. A stride of 11 increments all input registers and output registers by two.

예를 들면,For example,

FMULEQS F8, F16, F24FMULEQS F8, F16, F24

은, 다음의 비벡터 연산:Is the following nonvector operation:

FMULEQS F8, F16, F24FMULEQS F8, F16, F24

FMULEQS F10, F18, F26FMULEQS F10, F18, F26

FMULEQS F12, F20, F28FMULEQS F12, F20, F28

FMULEQS F14, F22, F30FMULEQS F14, F22, F30

1 레지스터라기 보다는 오히려 2 레지스터만큼 레지스터 파일에 곱셈을 하기 위한 오퍼랜드를 효과적으로 '스트라이딩'을 수행한다.Rather than 'single register', it effectively 'straws' the operands to multiply the register file by 2 registers.

Figure 112000024742744-pct00019
Figure 112000024742744-pct00019

실례 12. FPSCR 시스템 제어 바이트Example 12. FPSCR System Control Byte

[표 17]. FPSCR 시스템 제어 바이트 필드 정의TABLE 17. FPSCR system control byte field definitions

레지스터 비트Register bits 이름name 기능function 23 : 2223: 22 RMODERMODE 라운딩 모드 세트 00 : RN(Round to Nearest; Default) 01 : RP(Round towards Plus Infinity) 10 : RM(Round towards Minus Infinity) 11 : RZ(Round towards Zero)Rounding Mode Set 00: RN (Round to Nearest; Default) 01: RP (Round towards Plus Infinity) 10: RM (Round towards Minus Infinity) 11: RZ (Round towards Zero) 21 : 2021: 20 STRIDESTRIDE 벡터 레지스터 액세스를 세트: 00 : 1(Default) 01 : 보류 10 : 보류 11 : 2Vector register access set: 00: 1 (Default) 01: Hold 10: Hold 11: 2 1919 보류(R)Hold (R) 18 : 1618: 16 LENLEN 벡터 길이. 벡터연산용 길이 지정.(모든 인코딩이 실행마다 이용가능한 것이 아니다) 000 : 1(Default) 001 : 2 010 : 3 011 : 4 100 : 5 101 : 6Vector length. Specify length for vector operations (not all encodings are available per run) 000: 1 (Default) 001: 2 010: 3 011: 4 100: 5 101: 6

레지스터 비트Register bits 이름name 기능function 18:1618:16 LENLEN 110 : 7 111 : 8   110: 7 111: 8

5.2.35.2.3 예외 인에이블 바이트Exception enable byte

예외 인에이블 바이트는, 15 : 8 비트를 점유하고, 예외 트랩 인에이블을 포함한다. 이 비트는 실례 13에 도시된 것처럼 지정되어 있다. 이 예외 인에이블 비트는 부동 소수점 예외 조건을 조정하기 위한 IEEE 754 명세의 요구사항을 따른다. 이러한 비트가 세트된 경우, 그 예외는 인에이블되고, FPS는 현재 명령어에 관한 예외 조건이 발생한 경우에 사용자 가시 트랩을 오퍼레이팅 시스템에 신호로 보낸다. 그 비트가 클리어된 경우, 그 예외는 인에이블되지 않고, FPS는 그 예외 조건의 경우에 사용자 가시 트랩을 오퍼레이팅 시스템에 신호를 보내지 않고, 수학적으로 합리적인 결과를 발생한다. 예외 인에이블 비트에 대한 디폴트는 디스에이블된다. 예외 핸들링에 관한 더욱 많은 정보에 대해서는 IEEE 754 표준을 참조한다. The exception enable byte occupies 15: 8 bits and includes an exception trap enable. This bit is specified as shown in Example 13. This exception enable bit follows the requirements of the IEEE 754 specification for handling floating point exception conditions. If this bit is set, the exception is enabled and the FPS signals a user visible trap to the operating system when an exception condition occurs for the current instruction. If the bit is cleared, the exception is not enabled and the FPS does not signal a user visible trap to the operating system in the event of that exception condition, producing a mathematically reasonable result. The default for the exception enable bit is disabled. See the IEEE 754 standard for more information about exception handling.             

일부 구현은, 예외가 디스에이블된 경우에도 하드웨어 능력 이외의 예외 조건을 조정하기 위해 지원코드에 대한 바운스를 발생한다. 이는 일반적으로 사용자 코드를 볼 수 없는 것이다.Some implementations generate a bounce on support code to adjust for exception conditions other than hardware capabilities even when the exception is disabled. This is generally not what the user code can see.

Figure 112000024742744-pct00020
Figure 112000024742744-pct00020

실례 13. FPSCR 예외 인에이블Example 13. Enable FPSCR Exception

[표 18]. FPSCR 예외 인에이블 바이트 필드TABLE 18. FPSCR Exception Enable Bytes field

레지스터 비트Register bits 이름name 기능function 15 : 1315: 13 보류Hold 1212 IXEIXE 부정확한 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블Incorrect Enable Bit 0: Disable (default) 1: Enable 1111 UFEUFE 언더플로우 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블Underflow enable bit 0: Disable (default) 1: Enable 1010 OFEOFE 오버플로우 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블Overflow Enable Bit 0: Disable (default) 1: Enable 99 DZEDZE 0으로 나눈 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블Enable bit divided by 0 0: Disable (default) 1: Enable 88 IOEIOE 무효 오퍼랜드 인에이블 비트 0 : 디스에이블(디폴트) 1 : 인에이블Invalid operand enable bit 0: disable (default) 1: enable

5.2.45.2.4 예외 상태 바이트Exception status byte

예외 상태 바이트는, FPSCR의 7:0 비트를 점유하고 예외 상태 플래그 비트를 포함한다. 각 부동 소수점 예외를 위한 하나인, 5개의 예외 상태 플래그 비트가 있다. 이들 비트는 '곤란(sticky)'한 것으로서, 즉 검출된 예외로 세트된 경우, 그들은 FPSCR로의 FMOVX 기록 또는 FSERIALCL 명령어에 의해 클리어되어야 한다. 이러한 비트는 실례 14에 도시된 것처럼 지정되어 있다. 인에이블된 예외의 경우, 대응 하는 예외 상태 비트를, 자동으로 세트하지 않는다. 지원 코드의 태스크는, 적합한 예외 상태 비트를 필요할 때마다 세트하는 것이다. 일부 예외는, 자동적인, 즉, 그 예외 조건이 검출될 경우, FPS가 예외 인에이블 비트의 세트 방법에 상관없이 연속적인 부동 소수점 명령어에 관해 바운스할 것이다. 이는, IEEE 754 표준에 의해 요구된 많은 관련 예외 처리중의 일부가 하드웨어에서라기 보다는 오히려 소프트웨어에서 수행되게 한다. 예에서는, FZ 비트가 0으로 세트된 언더플로우 조건을 든다. 이 경우에, 정확한 결과는, 그 결과의 지수와 라운딩 모드에 따라 비정상화된 수이다. FPS는, 구현자(implementer)로 하여금 바운스할 옵션을 포함한 응답을 선택하게 하고, 정확한 값을 산출하여 이 값을 목적지 레지스터에 기록하기 위한 지원 코드를 사용하게 한다. 언더플로우 예외 인에이블 비트가 세트된 경우, 사용자의 트랩 핸들러를 그 지원코드가 연산을 완료한 후 호출한다. 이 코드는, FPS의 상태를 바꾸고 되돌아가거나, 그 처리를 종료시킨다.The exception status byte occupies 7: 0 bits of the FPSCR and contains the exception status flag bits. There are five exception status flag bits, one for each floating point exception. These bits are 'sticky', that is, if set with a detected exception, they must be cleared by an FMOVX write to the FPSCR or an FSERIALCL instruction. These bits are designated as shown in Example 14. For enabled exceptions, the corresponding exception status bit is not set automatically. The task of supporting code is to set the appropriate exception status bits whenever necessary. Some exceptions will be automatic, ie, when the exception condition is detected, the FPS will bounce on consecutive floating point instructions regardless of how the exception enable bit is set. This allows some of the many relevant exception handling required by the IEEE 754 standard to be performed in software rather than in hardware. In our example, we have an underflow condition with the FZ bit set to zero. In this case, the correct result is a number that is aberrant according to the exponent and rounding mode of the result. The FPS allows the implementer to select a response containing the option to bounce and to use the support code to calculate the correct value and write this value to the destination register. If the underflow exception enable bit is set, the user's trap handler is called after the support code completes the operation. This code changes the state of the FPS and returns, or terminates the processing.

Figure 112000024742744-pct00021
Figure 112000024742744-pct00021

실례 14. FPSCR 예외 상태 바이트Example 14. FPSCR Exception Status Byte

[표 19]. FPSCR 예외 상태 바이트 필드 정의TABLE 19. FPSCR exception status byte field definition

레지스터 비트Register bits 이름name 기능function 7 : 57: 5 보류 Hold 44 IXCIXC 부정확한 예외 검출Incorrect exception detection 33 UFCUFC 언더플로우 예외 검출Underflow exception detected 22 OFCOFC 오버플로우 예외 검출Overflow exception detected 1One DZCDZC 0으로 나눈 예외 검출Exception detection divided by zero 00 IOCIOC 무효 연산 예외 검출Invalid operation exception detected

5.35.3 레지스터 파일 콘텐트 레지스터(Register File Content Register; FPREG)Register File Content Register (FPREG)

이 레지스터 파일 콘텐트 레지스터는, 현재 동작중인 프로그램에 의해 해석되어질 때 그 레지스터의 콘텐트를 적절하게 나타내주기 위해 디버거(debugger)에 의해 사용될 수 있는 정보를 포함하는 특권 레지스터(privileged register)이다. 이 FPREG는, 레지스터 파일에 있는 각 배정밀도 레지스터에 대해 1비트인 16비트를 포함한다.This register file content register is a privileged register that contains information that can be used by a debugger to properly represent the contents of the register when interpreted by the currently running program. This FPREG contains 16 bits, which is 1 bit for each double precision register in the register file.

Figure 112000024742744-pct00022
Figure 112000024742744-pct00022

실례 15. FPREG 레지스터 인코딩Example 15. Encoding the FPREG Register

그 비트를 세트한 경우, 그 비트에 의해 나타낸 물리적 레지스터 쌍을 배정밀도 레지스터로서 표시하는데 있다. 이 비트를 클리어한 경우, 그 물리적 레지스터는 한개 또는 2개의 단일 정밀도 데이터 값을 초기화하지 않거나 포함한다.When the bit is set, the physical register pair represented by the bit is represented as a double precision register. If this bit is cleared, the physical register does not initialize or contain one or two single precision data values.

[표 20]. FPREG 비트 필드 정의TABLE 20. FPREG bit field definition

FPREG 비트FPREG bit 비트 세트Bit set 비트 클리어Bit clear C0C0 D0 유효D0 valid S1 및 S0 유효 또는 비초기화S1 and S0 valid or deinitialized C1C1 D1 유효D1 valid S3 및 S2 유효 또는 비초기화S3 and S2 valid or deinitialized C2C2 D2 유효D2 valid S5 및 S4 유효 또는 비초기화S5 and S4 valid or deinitialized C3C3 D3 유효D3 valid S7 및 S6 유효 또는 비초기화S7 and S6 valid or deinitialized C4C4 D4 유효D4 valid S9 및 S8 유효 또는 비초기화Valid or deinitialized S9 and S8 C5C5 D5 유효D5 valid S11 및 S10 유효 또는 비초기화Valid or deinitialized S11 and S10 C6C6 D6 유효D6 valid S13 및 S12 유효 또는 비초기화Valid or deinitialized S13 and S12 C7C7 D7 유효D7 valid S15 및 S14 유효 또는 비초기화Valid or deinitialized S15 and S14 C8C8 D8 유효D8 valid S17 및 S16 유효 또는 비초기화Valid or deinitialized S17 and S16 C9C9 D9 유효D9 valid S19 및 S18 유효 또는 비초기화Valid or deinitialized S19 and S18 C10C10 D10 유효D10 valid S21 및 S20 유효 또는 비초기화Valid or uninitialized S21 and S20 C11C11 D11 유효D11 valid S23 및 S22 유효 또는 비초기화Valid or deinitialized S23 and S22 C12C12 D12 유효D12 valid S25 및 S24 유효 또는 비초기화Valid or deinitialized S25 and S24 C13C13 D13 유효D13 valid S27 및 S26 유효 또는 비초기화Valid or uninitialized S27 and S26 C14C14 D14 유효D14 valid S29 및 S28 유효 또는 비초기화Valid or deinitialized S29 and S28 C15C15 D15 유효D15 valid S31 및 S30 유효 또는 비초기화Valid or uninitialized S31 and S30

6.6. 예외 처리exception handling

FPS는, 2개의 모드, 즉 디버그 모드 및 정상 모드중의 하나에서 동작한다. FPSCR에 DM 비트가 세트된 경우, FPS는 디버그 모드에서 동작한다. 이 모드에서, FPS는, ARM이 그 명령어의 예외 상태가 알려지기 까지 대기하다가 동시에 하나의 명령어를 실행한다. 이는 레지스터 파일과 메모리가 명령어 흐름에 대해 정밀하다는 것을 확인시키지만, 많은 실행시간을 희생시킨다. 이 FPS는, 자원(resource)을 허용할 경우 ARM으로부터 새로운 명령어와, 예외 조건의 검출에 관한 신호 예외를 수신한다. ARM으로의 예외 보고는, 벡터 연산이 뒤따르고 그 벡터 연산과 병렬로 실행하는 로드 또는 저장 연산의 경우에 부동 소수점 명령어 스트림 예외에 대하여 항상 정밀하다. 이러한 경우, 로드 연산을 위한 레지스터 파일 또는 저장 연산을 위한 메모리의 콘텐트는 정밀하지 않다.FPS operates in one of two modes: debug mode and normal mode. If the DM bit is set in the FPSCR, the FPS operates in debug mode. In this mode, the FPS waits for the ARM to be informed of the exception status and then executes one instruction at the same time. This ensures that register files and memory are accurate for the instruction flow, but at the cost of much execution time. This FPS receives new instructions from the ARM and signal exceptions regarding the detection of the exception condition when allowing resources. Exception reporting to ARM is always precise for floating point instruction stream exceptions in the case of load or store operations that follow a vector operation and execute in parallel with that vector operation. In this case, the contents of the register file for the load operation or the memory for the store operation are not precise.

6.16.1 지원 코드Support code

FPS의 구현은, 하드웨어 및 소프트웨어 지원의 조합에 따른 IEEE 754를 선택 할 수 있다. 지원되지 않는 데이터 타입과 자동 예외에 대해, 지원 코드는 하드웨어에 따른 기능을 수행하고 적합한 결과를 목적지 레지스터에 되돌리고, 사용자의 트랩 핸들러를 호출하지 않거나 그렇지 않은 경우 사용자 코드의 흐름을 수정하지 않고서 사용자 코드로 되돌아간다. 하드웨어만이 부동 소수점 코드의 처리를 책임질 수 있다는 것을 사용자에게 보인다. 이 특징들을 제어하기 위해 지원코드에 대한 바운싱은, 그 특징을 수행하거나 처리할 시간을 크게 증가시키지만, 이 상황들의 발생은 사용자 코드, 임베디드 응용, 잘 기록된 수치 응용에 일반적으로 극소하다.The implementation of the FPS may select IEEE 754 according to a combination of hardware and software support. For unsupported data types and automatic exceptions, the supporting code performs hardware-specific functions and returns the appropriate results to the destination register, without calling the user's trap handler or otherwise modifying the user's code flow. Return to It is shown to the user that only hardware can be responsible for handling floating point code. Bouncing support code to control these features greatly increases the time to perform or process the feature, but the occurrence of these situations is generally minimal for user code, embedded applications, and well-written numerical applications.

이 지원코드는 2가지 구성요소, 즉, 초월 계산과 같은 하드웨어의 범위 이상의 연산뿐만 아니라, 지원되지 않는 입력 또는 예외를 발생하는 입력으로 나누어지는 것과 같은 지원 함수를 수행하는 루틴으로 구성된 라이브러리와, IEEE 754 컴플라이언스를 제공하기 위해서 예외 트랩을 처리하는 예외 핸들러로 구성된 세트를 가진다. 이 지원코드는, 임의의 지원되지 않는 데이터 타입 또는 데이터 표시(예; 비정상 값)의 적절한 핸들링을 에뮬레이트하기 위한 구현 함수를 수행하는데 필요하다. 이 루틴은, 루틴의 출구(Exit)에서 사용자의 상태를 조심스럽게 복원할 경우 그들의 중간 계산에서의 FPS를 이용하는데 기록될 수도 있다.This support code consists of a library consisting of two components: routines that perform support functions such as operations beyond the hardware's range, such as transcendental calculations, as well as input functions that generate unsupported inputs or exceptions that generate exceptions, and IEEE 754 has a set of exception handlers that handle exception traps to provide compliance. This support code is needed to perform implementation functions to emulate proper handling of any unsupported data type or data representation (eg, an abnormal value). This routine may be written to use the FPS in their intermediate calculations when carefully restoring the user's state at the exit of the routine.

6.26.2 예외 보고 및 처리Exception reporting and handling

정상 모드에서의 예외를, 예외 조건이 검출된 후에 발생된(issued) 다음 부동 소수점 명령어의 ARM에 보고한다. ARM 프로세서, FPS 레지스터 파일 및 메모리의 상태는, 예외가 일어날 때 위반 명령어에 대해서 정밀하지 못하다. 충분한 정보 를 그 지원 코드에 이용 가능하여서, 정확하게 그 명령어를 에뮬레이트하고 그 명령어로부터 생기는 임의의 예외를 처리한다.Report the exception in normal mode to the ARM of the next floating-point instruction that was issued after the exception condition was detected. The state of the ARM processor, FPS register file, and memory is not precise for the violation instruction when an exception occurs. Sufficient information is available to the supporting code so that it accurately emulates the instruction and handles any exceptions arising from the instruction.

일부 구현에 있어서, 지원 코드는, 무한대, NaN, 비정상 데이터 및 제로를 포함한 특정 IEEE 754 데이터로 일부 또는 모든 연산을 처리하는데 사용될 수 있다. 이러한 구현은, 지원되지 않는 것으로서 이들 데이터를 언급하고, 사용자 코드에 대해 일반적으로 볼 수 없는 방법으로 지원 코드에 대해 바운스하며, 목적지 레지스터로 끝난 지정된 IEEE 754로 보답한다. 그 연산으로 인한 임의의 예외는, 예외용 IEEE 754 규칙을 지킨다. 이는, 대응한 예외 인에이블 비트가 세트된 경우 사용자 코드로의 트랩핑을 포함한다.In some implementations, the support code can be used to process some or all of the operations with specific IEEE 754 data, including infinity, NaN, abnormal data, and zero. This implementation refers to these data as unsupported, bounces against the support code in a way that is not generally visible to the user code, and returns to the designated IEEE 754 ending with the destination register. Any exception resulting from that operation obeys the IEEE 754 rule for exceptions. This includes trapping into user code when the corresponding exception enable bit is set.

IEEE 754 표준은, FPSCR에서 인에이블된 예외의 경우와 디스에이블된 예외의 경우 예외 조건에 대한 응답을 정의한다. VFPv1 구조는, IEEE 754 명세에 따라 적합하게 사용된 하드웨어와 소프트웨어간의 경계를 지정하지 않는다.The IEEE 754 standard defines the response to exception conditions for enabled exceptions and for disabled exceptions in the FPSCR. The VFPv1 structure does not specify a boundary between hardware and software suitably used in accordance with the IEEE 754 specification.

6.2.16.2.1 지원되지 않는 연산 및 포맷Unsupported Operations and Formats

FPS는, 십진 데이터 또는 십진 데이터로 또는 십진 데이터로부터의 변환을 갖는 어떠한 연산도 지원하지 않는다. 이들 연산은, IEEE 754 표준을 필요로 하고, 그 지원 코드에 의해 제공되어야 한다. 십진 데이터를 활용하기 위한 시도는, 바라는 함수를 위한 라이브러리 루틴을 필요로 한다. 이 FPS는, 십진 데이터 타입이 아니라, 십진 데이터를 사용하는 명령어를 트랩하는데 사용할 수 없다.FPS does not support any operation with conversion to or from decimal data or decimal data. These operations require the IEEE 754 standard and must be provided by the support code. Attempts to utilize decimal data require a library routine for the desired function. This FPS cannot be used to trap instructions that use decimal data rather than decimal data types.

6.2.26.2.2 FPS가 디스에이블 또는 예외일 경우 FMOVX의 사용Use of FMOVX when FPS is disabled or exception

감시(SUPERVISOR) 또는 미정의(UNDEFINED) 모드에서 실행된 FMOVX 명령어는, 그 FPS가 ARM으로 예외 신호를 보내지 않고서 예외 상태에 있거나 디스에이블 되어 있는 경우(그 구현이 디스에이블 옵션을 지원하는 경우) FPSCR을 판독 및 기록하거나 FPSID 또는 FPREG를 판독한다.An FMOVX instruction executed in SUPERVISOR or UNDEFINED mode is used if the FPS is in an exception state or disabled (if its implementation supports the disable option) without sending an exception signal to ARM. Read and write or read FPSID or FPREG.

이와 같이 본 발명의 특별한 실시예를 설명하였지만, 본 발명은 이에 한정되는 것이 아니고, 많은 변형 및 추가를 본 발명의 범위 내에서 할 수 있다는 것이 명백하다. 예를 들면, 다음의 종속항 특징의 다양한 조합은, 본 발명의 범위로부터 벗어나지 않고서 독립항의 특징을 작성할 수 있다.Although specific embodiments of the present invention have been described as described above, it is clear that the present invention is not limited thereto and many modifications and additions can be made within the scope of the present invention. For example, various combinations of the following dependent claim features can be made to the features of the independent claims without departing from the scope of the invention.

Claims (15)

복수의 어드레스 가능한 레지스터를 갖는 레지스터 뱅크와,A register bank having a plurality of addressable registers, 상기 데이터 처리 명령어에 지정된 초기 레지스터에서 시작하여 상기 레지스터 뱅크내의 일련의 레지스터로부터의 데이터 값을 사용하여 복수회 데이터 처리 연산을 실행하는 벡터 연산을 지정하는 적어도 하나의 데이터 처리 명령어에 응답하는 명령 디코더를 포함하고,An instruction decoder responsive to at least one data processing instruction specifying a vector operation starting at an initial register specified in said data processing instruction and performing a data processing operation multiple times using data values from a series of registers in said register bank; Including, 상기 레지스터 뱅크는 레지스터의 적어도 하나의 부분 집합으로 구성되되, 상기 일련의 레지스터는 상기 부분 집합내에 있고,The register bank consists of at least one subset of registers, the series of registers being in the subset, 상기 명령 디코더는 상기 일련의 레지스터를 제어하여 상기 레지스터의 부분 집합 내에 랩하는 것을 특징으로 하는 데이터 처리 장치.And the command decoder controls the series of registers to wrap within the subset of registers. 제 1 항에 있어서,The method of claim 1, 상기 벡터 연산은 대응하는 복수의 시퀀스의 레지스터로부터 복수의 각각의 데이터 값을 사용하여 상기 데이터 처리 연산을 실행하고,The vector operation executes the data processing operation using a plurality of respective data values from a corresponding plurality of sequences of registers, 상기 레지스터 뱅크는 레지스터로 구성된 복수의 부분 집합을 포함하고, 상기 복수의 시퀀스의 레지스터는, 각각의 부분 집합내에 있고,The register bank comprises a plurality of subsets of registers, the registers of the plurality of sequences being in each subset, 상기 명령 디코더는 상기 복수의 시퀀스의 레지스터를 제어하여 레지스터의 각각의 부분 집합내에 랩하는 것을 특징으로 하는 데이터 처리 장치.And the command decoder controls the registers of the plurality of sequences to wrap within each subset of registers. 제 2 항에 있어서,The method of claim 2, 상기 복수의 부분 집합은 해체되는 것을 특징으로 하는 데이터 처리장치.And said plurality of subsets are deconstructed. 제 1, 제 2 및 제 3 항 중 어느 한 항에 있어서,The method according to any one of claims 1, 2 and 3, 상기 부분 집합은, 연속적으로 번호 레지스터의 범위를 포함하는 것을 특징으로 하는 데이터 처리장치.And said subset comprises a range of number registers consecutively. 제 2 항에 있어서,The method of claim 2, 상기 복수의 부분 집합 각각은, 연속적으로 번호가 매겨진 레지스터의 범위를 포함하는 것을 특징으로 하는 데이터 처리장치.Each of the plurality of subsets comprises a range of consecutively numbered registers. 제 5 항에 있어서,The method of claim 5, 상기 복수의 부분 집합은, 연속적으로 번호가 매겨진 레지스터의 각각의 연속적인 범위를 포함하는 것을 특징으로 하는 데이터 처리장치.And said plurality of subsets comprises each contiguous range of consecutively numbered registers. 제 6 항에 있어서,The method of claim 6, 4개의 연속적인 범위를 포함하는 것을 특징으로 하는 데이터 처리장치.A data processing device comprising four consecutive ranges. 제 1, 2, 3, 5, 6 및 7 항 중 어느 한 항에 있어서,The method according to any one of claims 1, 2, 3, 5, 6, and 7, 메모리와, 상기 메모리와 상기 레지스터 뱅크내의 레지스터 사이의 데이터 값의 전송을 제어하기 위한 전송 제어기를 더 포함하되, 상기 전송 제어기는 상기 메모리와 상기 레지스터 뱅크내의 일련의 레지스터 사이의 일련의 데이터 값을 전송하기 위한 다중 전송 명령어에 응답하는 것을 특징으로 하는 데이터 처리장치.And a transfer controller for controlling transfer of data values between the memory and registers in the register bank, the transfer controller transferring a series of data values between the memory and a series of registers in the register bank. And a data transfer device responsive to a multiple transfer command. 제 6 항에 있어서,The method of claim 6, 각 범위는 그 범위의 끝점 사이에 랩하는 증분기를 통하여 어드레싱되는 것을 특징으로 하는 데이터 처리장치.Wherein each range is addressed through an incrementer that wraps between the endpoints of the range. 제 1, 2, 3, 5, 6, 7 및 9 항 중 어느 한 항에 있어서,The method according to any one of claims 1, 2, 3, 5, 6, 7, and 9, 상기 시퀀스는, 연속적인 레지스터로 이루어진 시퀀스인 것을 특징으로 하는 데이터 처리장치.And said sequence is a sequence consisting of consecutive registers. 제 1, 2, 3, 5, 6, 7 및 9 항 중 어느 한 항에 있어서,The method according to any one of claims 1, 2, 3, 5, 6, 7, and 9, 상기 레지스터 뱅크와 상기 명령 디코더는 부동 소수점부의 일부인 것을 특징으로 하는 데이터 처리장치.And the register bank and the command decoder are part of a floating point unit. 레지스터 뱅크의 복수의 어드레스 가능한 레지스터내에 데이터 값을 저장하는 단계와,Storing data values in a plurality of addressable registers in a register bank; 적어도 하나의 데이터 처리 명령어에 따라 벡터 연산을 지정하고, 상기 데이터 처리 명령어에 지정된 초기 레지스터에서 시작하여 상기 레지스터 뱅크내의 일련의 레지스터로부터의 데이터 값을 사용하여 복수회 데이터 처리 연산을 실행하는 단계를 포함하고,Specifying a vector operation in accordance with at least one data processing instruction and executing the data processing operation multiple times using data values from a series of registers in the register bank starting at the initial register specified in the data processing instruction. and, 상기 레지스터 뱅크는 레지스터의 적어도 하나의 부분 집합으로 구성되되, 상기 일련의 레지스터는 상기 부분 집합내에 있고,The register bank consists of at least one subset of registers, the series of registers being in the subset, 상기 실행을 하는 동안, 상기 일련의 레지스터는, 레지스터의 상기 부분 집합내에 랩하는 것을 특징으로 하는 데이터 처리방법.During said execution, said series of registers wraps within said subset of registers. 제 12 항에 있어서,The method of claim 12, 상기 벡터 연산은 대응하는 복수의 시퀀스의 레지스터로부터 복수의 각각의 데이터 값을 사용하여 상기 데이터 처리 연산을 실행하고,The vector operation executes the data processing operation using a plurality of respective data values from a corresponding plurality of sequences of registers, 상기 레지스터 뱅크는 레지스터로 구성된 복수의 부분 집합을 포함하고, 상기 복수의 시퀀스의 레지스터는, 각각의 부분 집합내에 있고,The register bank comprises a plurality of subsets of registers, the registers of the plurality of sequences being in each subset, 상기 명령 디코더는 상기 복수의 시퀀스의 레지스터를 제어하여 레지스터의 각각의 부분 집합내에 랩하는 것을 특징으로 하는 데이터 처리방법.And the instruction decoder controls the registers of the plurality of sequences to wrap within each subset of registers. 제 13 항에 있어서,The method of claim 13, 하나의 시퀀스내의 데이터 값은 필터의 탭 계수이고, 다른 시퀀스에 있는 데이터 값은 상기 필터에 의해 필터링하기 위한 신호 값인 것을 특징으로 하는 데이터 처리방법.The data value in one sequence is the tap coefficient of the filter, and the data value in the other sequence is the signal value for filtering by the filter. 제 12 항에 있어서,The method of claim 12, 복수의 벡터 연산은, 각 벡터 연산으로 변하는 적어도 하나의 시퀀스의 시작점을 갖는 상기 복수의 시퀀스내의 데이터 값에 따라 실행되는 것을 특징으로 하는 데이터 처리방법.And a plurality of vector operations are executed according to data values in the plurality of sequences having the starting point of at least one sequence that changes with each vector operation.
KR1020007013163A 1998-05-27 1999-03-09 Recycle register file Expired - Lifetime KR100563220B1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/085752 1998-05-27
US09/085,752 US6189094B1 (en) 1998-05-27 1998-05-27 Recirculating register file

Publications (2)

Publication Number Publication Date
KR20010043773A KR20010043773A (en) 2001-05-25
KR100563220B1 true KR100563220B1 (en) 2006-03-22

Family

ID=22193713

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007013163A Expired - Lifetime KR100563220B1 (en) 1998-05-27 1999-03-09 Recycle register file

Country Status (6)

Country Link
US (1) US6189094B1 (en)
KR (1) KR100563220B1 (en)
CN (1) CN1154947C (en)
MY (1) MY115481A (en)
RU (1) RU2225995C2 (en)
TW (1) TW495679B (en)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6519694B2 (en) * 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US7080183B1 (en) * 2000-08-16 2006-07-18 Koninklijke Philips Electronics N.V. Reprogrammable apparatus supporting the processing of a digital signal stream and method
US7191202B2 (en) 2001-05-25 2007-03-13 Sun Microsystems, Inc. Comparator unit for comparing values of floating point operands
US7069289B2 (en) * 2001-05-25 2006-06-27 Sun Microsystems, Inc. Floating point unit for detecting and representing inexact computations without flags or traps
US6970898B2 (en) * 2001-05-25 2005-11-29 Sun Microsystems, Inc. System and method for forcing floating point status information to selected values
US7016928B2 (en) * 2001-05-25 2006-03-21 Sun Microsystems, Inc. Floating point status information testing circuit
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
US6976050B2 (en) * 2001-05-25 2005-12-13 Sun Microsystems, Inc. System and method for extracting the high part of a floating point operand
US7069288B2 (en) * 2001-05-25 2006-06-27 Sun Microsystems, Inc. Floating point system with improved support of interval arithmetic
US7831652B2 (en) * 2001-05-25 2010-11-09 Oracle America, Inc. Floating point multiplier with embedded status information
US7444367B2 (en) * 2001-05-25 2008-10-28 Sun Microsystems, Inc. Floating point status information accumulation circuit
US6993549B2 (en) * 2001-05-25 2006-01-31 Sun Microsystems, Inc. System and method for performing gloating point operations involving extended exponents
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
US7366749B2 (en) * 2001-05-25 2008-04-29 Sun Microsystems, Inc. Floating point adder with embedded status information
US7363337B2 (en) * 2001-05-25 2008-04-22 Sun Microsystems, Inc. Floating point divider 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
US7613762B2 (en) * 2001-05-25 2009-11-03 Sun Microsystems, Inc. Floating point remainder with embedded status information
US7003540B2 (en) * 2001-05-25 2006-02-21 Sun Microsystems, Inc. Floating point multiplier for delimited operands
US7430576B2 (en) * 2001-05-25 2008-09-30 Sun Microsystems, Inc. Floating point square root provider 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
US7085940B2 (en) * 2002-05-09 2006-08-01 International Business Machines Corporation Floating point unit power reduction via inhibiting register file write during tight loop execution
US7236999B2 (en) * 2002-12-17 2007-06-26 Sun Microsystems, Inc. Methods and systems for computing the quotient of floating-point intervals
US7219117B2 (en) * 2002-12-17 2007-05-15 Sun Microsystems, Inc. Methods and systems for computing floating-point intervals
JP2004302647A (en) * 2003-03-28 2004-10-28 Seiko Epson Corp Vector processor and register addressing method
US20060179273A1 (en) * 2005-02-09 2006-08-10 Advanced Micro Devices, Inc. Data processor adapted for efficient digital signal processing and method therefor
US8352241B2 (en) * 2009-02-26 2013-01-08 Microsoft Corporation Emulating legacy hardware using IEEE 754 compliant hardware
EP2695054B1 (en) 2011-04-01 2018-08-15 Intel Corporation Vector friendly instruction format and execution thereof
CN104011670B (en) 2011-12-22 2016-12-28 英特尔公司 The instruction of one of two scalar constants is stored for writing the content of mask based on vector in general register
US9037835B1 (en) * 2013-10-24 2015-05-19 Arm Limited Data processing method and apparatus for prefetching
US9792118B2 (en) 2013-11-15 2017-10-17 Qualcomm Incorporated Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
US9430508B2 (en) 2013-12-30 2016-08-30 Microsoft Technology Licensing, Llc Disk optimized paging for column oriented databases
US9723054B2 (en) 2013-12-30 2017-08-01 Microsoft Technology Licensing, Llc Hierarchical organization for scale-out cluster
US9898398B2 (en) 2013-12-30 2018-02-20 Microsoft Technology Licensing, Llc Re-use of invalidated data in buffers
US9557995B2 (en) * 2014-02-07 2017-01-31 Arm Limited Data processing apparatus and method for performing segmented operations
US10255072B2 (en) 2016-07-01 2019-04-09 Intel Corporation Architectural register replacement for instructions that use multiple architectural registers
FR3083350B1 (en) * 2018-06-29 2021-01-01 Vsora PROCESSOR MEMORY ACCESS
GB2576572B (en) * 2018-08-24 2020-12-30 Advanced Risc Mach Ltd Processing of temporary-register-using instruction
CN110750304B (en) * 2019-09-30 2022-04-12 百富计算机技术(深圳)有限公司 Method for improving task switching efficiency and terminal equipment
CN114298293B (en) * 2021-12-29 2024-11-29 杭州万高科技股份有限公司 Circulating neural network acceleration method, system and medium based on Cortex-M processor

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0646877A2 (en) * 1993-10-05 1995-04-05 Fujitsu Limited Computer system and method for processing vector data

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4926317A (en) * 1987-07-24 1990-05-15 Convex Computer Corporation Hierarchical memory system with logical cache, physical cache, and address translation unit for generating a sequence of physical addresses
GB2216307B (en) 1988-03-01 1992-08-26 Ardent Computer Corp Vector register file
US5179674A (en) * 1988-07-25 1993-01-12 Digital Equipment Corporation Method and apparatus for predicting valid performance of virtual-address to physical-address translations
US5617575A (en) * 1991-03-19 1997-04-01 Hitachi, Ltd. Interprocessor priority control system for multivector processor
US5357618A (en) * 1991-04-15 1994-10-18 International Business Machines Corporation Cache prefetch and bypass using stride registers
US5341485A (en) * 1991-05-07 1994-08-23 International Business Machines Corporation Multiple virtual address translation per computer cycle
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
US5426754A (en) * 1992-05-26 1995-06-20 International Business Machines Corporation Cross-interrogate method and means for combined scaler and vector processing system
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
CA2146472C (en) * 1994-04-22 2007-10-09 Kevin Elliott Bridgewater Packet video signal inverse transport processor with memory address circuitry
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
US5649144A (en) * 1994-06-13 1997-07-15 Hewlett-Packard Co. Apparatus, systems and methods for improving data cache hit rates
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
CA2156889C (en) * 1994-09-30 1999-11-02 Edward L. Schwartz Method and apparatus for encoding and decoding data
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US6081880A (en) * 1995-03-09 2000-06-27 Lsi Logic Corporation Processor having a scalable, uni/multi-dimensional, and virtually/physically addressed operand register file
US5701493A (en) * 1995-08-03 1997-12-23 Advanced Risc Machines Limited Exception handling method and apparatus in data processing systems
GB2317465B (en) * 1996-09-23 2000-11-15 Advanced Risc Mach Ltd Data processing apparatus registers.
US6052766A (en) * 1998-07-07 2000-04-18 Lucent Technologies Inc. Pointer register indirectly addressing a second register in the processor core of a digital processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0646877A2 (en) * 1993-10-05 1995-04-05 Fujitsu Limited Computer system and method for processing vector data

Also Published As

Publication number Publication date
US6189094B1 (en) 2001-02-13
CN1303502A (en) 2001-07-11
KR20010043773A (en) 2001-05-25
MY115481A (en) 2003-06-30
RU2225995C2 (en) 2004-03-20
TW495679B (en) 2002-07-21
CN1154947C (en) 2004-06-23

Similar Documents

Publication Publication Date Title
KR100563220B1 (en) Recycle register file
KR100563219B1 (en) Mixed vector/scalar register file
JP3969895B2 (en) Dividing coprocessor operation code by data type
JP3828677B2 (en) Data transfer between registers and memory
US6304963B1 (en) Handling exceptions occuring during processing of vector instructions
US7127593B2 (en) Conditional execution with multiple destination stores
US6986025B2 (en) Conditional execution per lane
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US5996057A (en) Data processing system and method of permutation with replication within a vector register file
US6029240A (en) Method for processing instructions for parallel execution including storing instruction sequences along with compounding information in cache
KR100227276B1 (en) Method and processor using single cycle micro instruction
US7017032B2 (en) Setting execution conditions
US7861071B2 (en) Conditional branch instruction capable of testing a plurality of indicators in a predicate register
JPH11353305A (en) Address specification for vector register
EP1080421B1 (en) Recirculating register file
WO1999061997A1 (en) Recirculating register file
JPH0778737B2 (en) Complex preprocessor method for cache

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20001123

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20040225

Comment text: Request for Examination of Application

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20051230

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20060315

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20060316

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
PR1001 Payment of annual fee

Payment date: 20090213

Start annual number: 4

End annual number: 4

PR1001 Payment of annual fee

Payment date: 20100224

Start annual number: 5

End annual number: 5

PR1001 Payment of annual fee

Payment date: 20110303

Start annual number: 6

End annual number: 6

PR1001 Payment of annual fee

Payment date: 20120222

Start annual number: 7

End annual number: 7

FPAY Annual fee payment

Payment date: 20130221

Year of fee payment: 8

PR1001 Payment of annual fee

Payment date: 20130221

Start annual number: 8

End annual number: 8

FPAY Annual fee payment

Payment date: 20140220

Year of fee payment: 9

PR1001 Payment of annual fee

Payment date: 20140220

Start annual number: 9

End annual number: 9

FPAY Annual fee payment

Payment date: 20150226

Year of fee payment: 10

PR1001 Payment of annual fee

Payment date: 20150226

Start annual number: 10

End annual number: 10

FPAY Annual fee payment

Payment date: 20160218

Year of fee payment: 11

PR1001 Payment of annual fee

Payment date: 20160218

Start annual number: 11

End annual number: 11

FPAY Annual fee payment

Payment date: 20170220

Year of fee payment: 12

PR1001 Payment of annual fee

Payment date: 20170220

Start annual number: 12

End annual number: 12

FPAY Annual fee payment

Payment date: 20180219

Year of fee payment: 13

PR1001 Payment of annual fee

Payment date: 20180219

Start annual number: 13

End annual number: 13

EXPY Expiration of term
PC1801 Expiration of term

Termination date: 20190909

Termination category: Expiration of duration