KR100563220B1 - Recycle register file - Google Patents
Recycle register file Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent 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
본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 레지스터 뱅크를 갖고, 벡터 연산을 지원하는 데이터 처리 시스템에 관한 것이다.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
크레이 1 프로세서는, 분리된 벡터와 스칼라 레지스터 뱅크를 가진다. 실행하려고 하는 명령어의 오페코드(opcode)가 벡터 연산을 나타내는 경우, 일련의(a sequence of) 데이터 값이 길이 레지스터에 저장된 길이 값과 마스크 레지스터에 저장된 마스크에 따라 그 벡터 레지스터 뱅크로부터 귀환된다. 그 길이는, 데이터 값이 그 시퀀스에 얼마나 있는지를 지정하고, 마스크는 어떤 데이터 값이 그 명령어에 나타낸 벡터 레지스터와 관련된 복수의 데이터 값들로부터 귀환된 것인지를 지정한다.The
멀티티탄 프로세서는, 스칼라 또는 벡터로서 동작할 수 있는 레지스터 중 단일 레지스터 뱅크이다. 이 명령어 자체는, 지정된 레지스터가 스칼라 또는 벡터인지를 나타내는 플래그와, 벡터 레지스터가 사용될 때 시퀀스내의 많은 데이터 값을 나타내는 길이 필드를 포함한다.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
본 발명의 목적은, 레지스터 뱅크와 벡터 연산을 지원하는 명령 디코더를 사용하여 범용 프로세서의 유연성을 유지하면서 효율적이고 빠른 데이터 처리를 제공하는데 있다.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
도 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
연산에 있어서, 메인 프로세서(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
도 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
수신된 코프로세서 명령어는, 부동 소수점부 코프로세서(26)내의 명령어 레지스터(44)내에 래치된다. 이렇게 단순한 면에서 코프로세서 명령어는, 3개의 레지스터 지정 필드 R1, R2 및 R3(사실, 이들 필드는, 쪼갤 수도 있고 전체 명령어 내에 다르게 흩어질 수도 있다)에 뒤따르는 오페코드부로 구성된 것이라고 생각할 수 있다. 이들 레지스터 지정 필드 R1, R2 및 R3은, 수행되는 데이터 처리 연산을 위한 목적지, 제 1 소오스 및 제 2 소오스의 역할을 하는 레지스터 뱅크(38)내의 레지스터들에 대응한다. 벡터 제어 레지스터(46)(추가 기능을 포함하는 보다 큰 레지스터의 일부일 수도 있음)는, 부동 소수점부 코프로세서(26)에 의해 수행될 수도 있는 벡터 연산용 길이 값과 스트라이드 값을 저장한다. 또한, 이 벡터 제어 레지스터(46)를 초기화하고 벡터 제어 레지스터 로드 명령어에 따라 길이 및 스트라이드 값으로 갱신할 수도 있다. 이 벡터 길이 및 스트라이드 값을 부동 소수점부 코프로세서(26)내에 전체적으로 적용함에 따라 이 값들이 자체 수정 코드에 의존하지 않고서 전체를 기반으로 동적으로 변경되게 한다.The received coprocessor instructions are latched in
레지스터 제어 및 명령어 발생부(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
명령어 레지스터(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
명령 디코더의 주요 부분의 역할을 함께 수행하는 레지스터 제어 및 명령어 발생부(48) 및 벡터 제어부(50)는, 지정된 데이터 처리 연산의 벡터/스칼라 성질을 판단하여 제어하기 위한 제 1 레지스터 지정 필드 R1 및 제 2 레지스터 지정 필드 R2에 응답한다. 벡터 제어 레지스터(46)내에 저장된 길이 값이 1의 길이(제로의 저장 값에 해당함)를 나타내는 경우, 이는 스칼라 연산만의 초기 표시로서 사용할 수 있다는 것을 주목해야 할 것이다.The register control and
도 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
벡터 길이가 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
수행하기를 바라는 공통연산은 그래픽 변형이라는 것을 알 수 있을 것이다. 일반적인 경우에, 수행될 변형은 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
상술한 것처럼, 레지스터 지정 필드 내에 레지스터의 벡터/스칼라 성질을 인코딩하는 것은, 명령어 비트 공간의 상당한 감소를 제공하지만, 뺄셈 및 나눗셈과 같은 비교환적인 연산에 대해 약간의 어려움이 따른다. 레지스터 구성이 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
도 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
도 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
도 2를 참조하여, 상기 로드 저장 제어부(42)는 출력에 5-비트 증분기를 구비하고, 로드/저장 다중 연산은 벡터 연산에 인가된 레지스터 랩핑에 영향을 받지 않는다는 것을 알아야 할 것이다. 이는 단일 로드/저장 다중 명령어가 필요로 하는 것과 같은 수의 연속적인 레지스터를 액세스(access) 가능하게 한다.Referring to FIG. 2, it will be appreciated that the load
이 랩핑 구성을 잘 이용한 연산의 예는, 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
도 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,
도 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
도 9는 코프로세서(84)를, 단일 정밀도 연산만을 지원하는 코프로세서(88)로 바꾸어서 수정된 도 8의 시스템을 나타낸다. 이 경우에, 코프로세서(88)는 단일 코프로세서 번호만을 인지한다. 따라서, 도 8의 코프로세서(84)에 의해 실행되는 원시 명령어 스트림내의 배정밀도 코프로세서 명령어는 단일 정밀도 코프로세서(88)에 의해 수신되지 않는다. 따라서, 동일한 코드를 실행하기를 원하는 경우, 메모리 시스템(86)내의 미정의된 예외 핸들링 코드는 배정밀도 에뮬레이션 루틴을 포함할 수 있다.9 illustrates the system of FIG. 8 modified by replacing
배정밀도 명령어를 에뮬레이트하기 위한 요구는 이들 명령어를 천천히 실행하게 하지만, 단일 정밀도 코프로세서(88)는, 그 배정밀도 코프로세서(84)보다 더 작고 더 값쌀 수 있고, 이중 위치 명령어가 매우 드물 경우에 얻은 전송 이득(net benefit)일 수 있다는 것을 알아야 할 것이다.The need to emulate double-precision instructions makes these instructions run slowly, but single-
도 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
도 11은 도 9의 단일 정밀도 코프로세서(88)내의 등가 회로를 나타낸다. 이러한 경우에, 단일 코프로세서 번호만이 인지되어 디폴트(Default)에 의해 사용된 단일 정밀도 연산을 한다. 코프로세서 명령어를 수신하여 래치하는지를 판단하는 비교는, 코프로세서 번호의 전체 4비트 CP#[3:0]와 단일 임베디드(embedded) 코프로세서 번호인 2진수 1010 사이에서 수행한다.FIG. 11 shows an equivalent circuit in the
도 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
도 13은 32비트 레지스터마다 저장된 데이터 형태를 식별하는 정보를 저장하기 위한 포맷 레지스터 FPREG(200), 또는 레지스터 뱅크(220)의 데이터 슬롯의 사용을 나타낸다. 상술한 것처럼, 각각의 데이터 슬롯은 32-비트 데이터 값(데이터 워드)을 저장하기 위한 단일 정밀도 레지스터로서 개별적으로 동작할 수 있거나, 64-비트 데이터 값(2개의 데이터 워드)을 저장하기 위한 배정밀도 레지스터로 제공하는 또 다른 데이터 슬롯과 쌍으로 될 수 있다. 본 발명의 바람직한 실시예에 따라, FPREG 레지스터(200)는, 임의의 특정 데이터 슬롯이 이에 저장된 단일 정밀도 또는 배정밀도 데이터를 가지고 있는지를 식별하도록 구성되어 있다.13 illustrates the use of a
도 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
도 15는 레지스터 뱅크(220)내에 있는 6개의 데이터 슬롯 쌍을 나타내고, 이는 바람직한 실시예에 따라 6개의 배정밀도 데이터 값 또는 12개의 단일 정밀도 데 이터 값을 저장하는데 사용할 수 있다. 이들 데이터 슬롯내에 저장될 수 있는 데이터의 예를, 배정밀도 데이터 값의 32개의 최상위 비트를 나타낸 DH, 배정밀도 데이터 값의 32개의 최하위 비트를 나타낸 DL 및 단일 정밀도 데이터 값을 나타낸 S로 도 15에 도시하였다.15 shows six pairs of data slots in
또한, 본 발명의 바람직한 실시예에 따른 FPREG 레지스터(200)내의 대응 엔트리(Entry)를 도 15에 도시하였다. 이 바람직한 실시예에 따라, "1"값은, 그 데이터 슬롯의 관련 쌍들이 배정밀도 데이터 값을 포함하는 것을 나타내기 위해 FPREG 레지스터(200)에 저장되고, "0"값은, 대응 데이터 슬롯 쌍 중의 적어도 하나가 단일 정밀도 데이터 값을 포함한 것 또는 양 데이터 슬롯들이 초기화되지 않은 것을 나타내는데 사용한다. 이에 따라, 양 데이터 슬롯들이 초기화되지 않을 경우, 그 데이터 슬롯중의 하나가 초기화되지 않고 그 쌍에 있는 다른 데이터 슬롯이 단일 정밀도 데이터 값을 포함할 경우, 또는 그 쌍에 있는 양 데이터 슬롯들이 단일 정밀도 데이터 값을 포함할 경우, 논리적인 "0" 값이 그 FPREG 레지스터(200)의 대응 비트에 저장된다.Also shown in FIG. 15 is a corresponding entry in the
상술한 것처럼, 바람직한 실시예인 FPU 코프로세서(26)는 단일 정밀도 또는 배정밀도 데이터 값을 처리하는데 사용할 수도 있고, 메인 프로세서(24)에 의해 발생된 코프로세서 명령어는 임의의 특정 명령어가 단일 정밀도 또는 배정밀도 명령어인지를 식별한다(도 7b 및 관련 설명 참조). 하나의 명령어가 코프로세서에 의해 수신되는 경우, 디코딩 및 실행을 위해 레지스터 제어 및 명령어 발생부(48)로 전달된다. 이 명령어가 로드 명령어일 경우, 레지스터 제어 및 명령어 발생 로직(48) 은, 로드 저장 제어부(42)에 명령하여 메모리로부터 그 식별 데이터를 검색하고, 그 데이터를 레지스터 뱅크(220)의 지정된 데이터 슬롯에 저장한다. 이 때에, 코프로세서는 단일 정밀도 또는 배정밀도 데이터 값이 검색되고 있는지를 알고 있고, 그에 따라서 로드 저장 제어부(42)는 동작한다. 따라서, 로드 저장 제어 로직(42)은, 32-비트 단일 정밀도 데이터 값 또는 64-비트 배정밀도 데이터 값을 경로(225)를 통해 레지스터 뱅크(220)내에 저장하기 위한 레지스터 뱅크 입력 로직(230)에 전달한다.As noted above, the preferred
로드 저장 제어부(42)에 의해서 레지스터 뱅크(220)로 로딩되는 데이터에 추가하여, 데이터는, 데이터를 수신하는 데이터 슬롯 쌍마다 단일 정밀도 또는 배정밀도 데이터를 저장하고 있는지를 식별하기 위해 필요한 비트들의 정보가 추가 가능하도록 포맷 레지스터 FPREG(200)에 제공된다. 바람직한 실시예에서는, 이 데이터를 그 포맷 레지스터 FPREG(200)에 저장한 후, 레지스터 뱅크로 데이터를 로딩하여서, 이 정보를 레지스터 뱅크 입력 로직(230)에 이용가능하다.In addition to the data loaded into the
바람직한 실시예에서, 레지스터 뱅크(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
추가로, 데이터 값을 레지스터 뱅크(220)에 로딩하여, 로드 저장 제어부(42)는, 데이터를 코프로세서(26)의 하나 이상의 시스템 레지스터, 예를 들면 사용자 상태 및 제어 레지스터 FPSCR(210)에 로딩할 수 있다. 바람직한 실시예에서, 이 FPSCR 레지스터(210)는, 사용자 액세스 가능 구성 비트와 예외 상태 비트를 포함하고, 그 바람직한 실시예 설명의 끝부분에 제공된 부동 소수점부의 구조 설명에서 더욱 상세히 설명된다.In addition, by loading the data value into
레지스터 제어 및 명령어 발생부(48)가 메모리에 저장된 내용들을 갖는 레지스터 뱅크(220)에 있는 특정 데이터 슬롯들을 식별하는 저장 명령어를 수신하는 경우, 그에 따라 로드 저장 제어부(42)는 명령을 받고, 그 필요한 데이터 워드들은 레지스터 뱅크 출력 로직(240)을 통해 레지스터 뱅크(220)에서 로드 저장 제어부(42)로 판독된다. 레지스터 뱅크 출력 로직(240)은, 판독되는 데이터가 단일 또는 배정밀도 데이터인지를 판단하기 위해서 FPREG 레지스터(200) 내용에 액세스한다. 그래서, 적합한 데이터 변환을 적용하여 레지스터 뱅크 입력 로직(230)에 의해서 적용된 임의의 데이터 변환으로 전환하고, 그 데이터를 경로(235)를 거쳐 로드 저장 제어 로직(42)에 제공한다.When register control and
본 발명의 바림직한 실시예에 따라, 이 저장 명령어가 배정밀도 명령어일 경우, 코프로세서(26)는 명령어가 배정밀도 데이터 값에 적용된 연산의 두 번째 모드에서 연산되는 것으로 생각할 수 있다. 배정밀도 데이터 값은 짝수 데이터 워드를 포함하므로, 연산의 두 번째 모드에서 발생된 임의의 저장 명령어는 전형적으로 메모리에 저장된 내용을 갖는 짝수의 데이터 슬롯을 식별한다. 그렇지만, 본 발명의 바람직한 실시예에 따라, 홀수 데이터 슬롯이 지정된 경우, 로드 저장 제어부(42)는 FPREG 레지스터(200)의 내용을 읽어서 레지스터 뱅크(220)로부터 그 식별된 짝수 데이터 슬롯을 저장하기에 앞서 그 내용들을 먼저 메모리에 저장하도록 구성된다. 일반적으로, 전송된 데이터 슬롯은, 저장되어야 할 그 식별된 데이터 슬롯으로부터 카운팅한 데이터 슬롯 수(즉, 데이터 워드의 수)를 나타내는 수를 수반한, 레지스터 뱅크에 있는 특정 데이터 슬롯을 식별하는 기본 어드레스에 의해 식별된다.According to a preferred embodiment of the present invention, when this stored instruction is a double precision instruction, the
이에 따라, 예로서, 그 저장 명령어가 레지스터 뱅크(220)에 있는 첫 번째 데이터 슬롯을 기본 어드레스로서 주고 33개의 데이터 슬롯을 지정할 경우, 이는 모든 32개의 데이터 슬롯의 내용을 메모리에 저장하게 하지만, 그 지정된 데이터 슬롯의 수는 홀수이므로, FPREG 레지스터(200)의 내용을 메모리에 저장시킨다.Thus, for example, if the store instruction gives the first data slot in
이러한 방법에 의해, 단일 명령어를 사용하여 메모리에 있는 레지스터 뱅크 의 내용과 레지스터 뱅크(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
본 발명의 다른 실시예에서, 이 기술은, 필요하다면 단일 명령어를 사용하여, 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
이 기술은, 저장 또는 로드 명령어를 초기화하는 코드가 레지스터 뱅크 내용인지를 모르는 경우 특히 유용하고, 이때의 레지스터 뱅크 내용은 레지스터 뱅크로의 다음의 검색을 위한 메모리에 임시로만 저장된다. 그 코드가 레지스터 뱅크 내용인지를 아는 경우, 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 레지스터(200)의 내용은, 레지스터 뱅크의 내용에 추가하여 메모리에 효과적으로 저장될 수 있고, 실제 상술한 것처럼, 특정한 다른 시스템 레지스터가 요구하는 대로 저장될 수 있다.In such a case, the contents of the
연속적인 로드 명령어의 수신에 관하여 유사한 처리를 이용한다. 이에 따라, 홀수 데이터 슬롯을 지정하는 배정밀도 로드 명령어를 수신하자마자 로드 저장 제어부(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
도 14는 본 발명의 바람직한 실시예에 따라 저장 및 로드 명령어를 실행할 경우에 레지스터 제어 및 명령어 발생 로직(48)의 동작을 나타낸 흐름도이다. 먼저, 단계 300에서는, 데이터 워드 수(바람직한 실시예에서는 데이터 슬롯 수와 동일한 것)가, 명령어에 있는 식별된 첫 번째 레지스터 수, 즉 기본 레지스터(base register)와 함께 그 명령어로부터 판독된다. 그래서, 단계 310에서는, 명령어가 배정밀도 또는 단일 정밀도 명령어인지를 식별하기 때문에 이 단계에서 코프로세서에 이용 가능한 정보를 상술한 것처럼, 그 명령어가 배정밀도 명령어인지를 판단한다.14 is a flowchart illustrating the operation of register control and
그 명령어가 배정밀도 명령어일 경우, 그 처리는, 단계 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
단계 330에서는, 워드 수가 0(zero)보다 큰지를 판단한다. 만약 크지 않을 경우, 명령어가 완료되었다고 간주하고, 그 처리는 단계 340에서 빠져나간다(EXIT). 그러나, 워드 수가 0 보다 클 경우, 그 처리는 단계 332로 진행하여, 배정밀도 데이터 값(즉, 2개의 데이터 슬롯의 내용)은 첫 번째 지정된 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그 후, 단계 334에서는, 워드 수가 2씩 감소되고, 단계 336에서는 레지스터 수가 1씩 증가된다. 상술한 것처럼, 실제로, 레지스터는, 실제로 배정밀도 명령어의 경우 2개의 데이터 슬롯으로 구성되어서, 레지스터 카운트가 1씩 증가하는 것은 데이터 슬롯 수가 2씩 증가하는 것과 같다.In
그래서, 그 프로시저는 단계 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
단계 310에서 그 명령어가 배정밀도 명령어가 아니라고 판단되었을 경우, 그 처리는 단계 350으로 진행하여, 다시 워드 수가 0 보다 큰지를 판단한다. 그래서, 그 처리가 단계 352로 진행한 경우, 단일 정밀도 데이터 값이, 그 명령어에 있는 식별된 첫 번째 레지스터 수에 전송되거나 이 레지스터 수로부터 전송된다. 그후, 단계 354에서는, 워드 수가 1 씩 감소되고, 단계 356에서는 레지스터 수 카운트가 다음 데이터 슬롯을 지정하도록 1씩 증가된다. 그 후, 처리는 단계 350으로 복귀하여, 워드 수가 0보다 큰지를 계속하여 판단한다. 그래서, 이 처리를, 워드 수가 0인 시간까지 반복하여, 단계 360에서 그 처리 시간이 될 경우 빠져나간다.If it is determined in
이상과 같은 방법은, 레지스터 뱅크 내용, 예를 들면 문맥 전환 코드 또는 프로시저 호출 엔트리 및 출구 시퀀스를 모르고 있는 코드를 실행할 경우 매우 큰 유연성을 제공한다. 이와 같은 경우, 그 동작 시스템은, 레지스터의 내용을 모르고 있고, 그 내용에 의존하는 레지스터를 다르게 취급하지 않는 것이 바람직하다. 상기한 방법은, 데이터 워드의 홀수를 지정하는 단일 저장 또는 로드 명령어로 이들 코드 루틴이 기록되게 한다. 코프로세서가 레지스터 내용 정보의 사용을 필요로 하는 경우, 그 명령어에 있는 데이터 워드의 홀수를 필요 사항으로서 해석하여, 레지스터 뱅크에 있는 데이터의 내용을 지정하는데 필요한 포맷 정보를 메모리에 저장하거나 메모리로부터 로드한다. 이 유연성으로 유일한 동작 시스템 소프트웨어가 레지스터 내용 정보를 필요로 하는 코프로세서를 지원하기 위한 요구를 제거한다.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
바운스 - 사용자 트랩(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)-
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
벡터 모드는, 비-제로 값을 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
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.
실례 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
실례 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.
실례 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
실례 4. 순환 배정밀도 레지스터 Example 4. Cyclic Double-Precision Register
섹션 0에서 단일 정밀도 실시예이므로, 배정밀도 레지스터는 4개의 뱅크 내에서 순환하고 있다.Because of the single precision embodiment in
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
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
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
주목할 것은, 연산의 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
[표 3]. 단일 정밀도 2개의 오퍼랜드 레지스터 사용법TABLE 3 Single precision two operand register usage
[표 4]. 배정밀도 3개의 오퍼랜드 레지스터 사용법TABLE 4 Usage of double-precision three operand registers
[표 5]. 배정밀도 2개의 오퍼랜드 레지스터 사용법TABLE 5 Usage of double-precision two operand registers
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.
실례 5. MCR 명령어 포맷Example 5. MCR Command Format
[표 6]. MCR 비트 필드 정의TABLE 6 MCR Bit Field Definition
[표 7]. MCR 오페코드 필드 정의TABLE 7 MCR Opcode Field Definition
주석 : 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.
실례 6. MRC 명령어 포맷Example 6. MRC Instruction Format
[표 8]. MRC 비트 필드 정의TABLE 8 MRC bit field definitions
* 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
주석 : 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.
실례 7. LDC/STC 명령어 포맷Example 7. LDC / STC Instruction Format
[표 10]. LDC/STC 비트 필드 정의TABLE 10. LDC / STC Bit Field Definition
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
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.
실례 8. CDP 명령어 포맷Example 8. CDP Command Format
[표 13]. CDP 비트 필드 정의TABLE 13 CDP Bit Field Definition
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
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
* 비벡터화 가능한 연산. 이 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.
실례 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.
실례 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.
실례 11. FPSCR 비교 상태 및 처리 제어 바이트Example 11. FPSCR Comparison Status and Processing Control Byte
[표 16]. FPSCR 비교 상태 및 처리 제어 바이트 필드 정의TABLE 16. FPSCR comparison status and processing control byte field definitions
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.
실례 12. FPSCR 시스템 제어 바이트Example 12. FPSCR System Control Byte
[표 17]. FPSCR 시스템 제어 바이트 필드 정의TABLE 17. FPSCR system control byte field definitions
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.
실례 13. FPSCR 예외 인에이블Example 13. Enable FPSCR Exception
[표 18]. FPSCR 예외 인에이블 바이트 필드TABLE 18. FPSCR Exception Enable Bytes field
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.
실례 14. FPSCR 예외 상태 바이트Example 14. FPSCR Exception Status Byte
[표 19]. FPSCR 예외 상태 바이트 필드 정의TABLE 19. FPSCR exception status byte field definition
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.
실례 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
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)
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)
| 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)
| 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)
| 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 |
-
1998
- 1998-05-27 US US09/085,752 patent/US6189094B1/en not_active Expired - Lifetime
- 1998-09-18 TW TW087115621A patent/TW495679B/en not_active IP Right Cessation
-
1999
- 1999-03-09 CN CNB998066702A patent/CN1154947C/en not_active Expired - Lifetime
- 1999-03-09 RU RU2000132723/09A patent/RU2225995C2/en not_active IP Right Cessation
- 1999-03-09 KR KR1020007013163A patent/KR100563220B1/en not_active Expired - Lifetime
- 1999-03-25 MY MYPI99001140A patent/MY115481A/en unknown
Patent Citations (1)
| 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 |