CN1191535C - 处理数据的装置和方法 - Google Patents

处理数据的装置和方法 Download PDF

Info

Publication number
CN1191535C
CN1191535C CNB998066591A CN99806659A CN1191535C CN 1191535 C CN1191535 C CN 1191535C CN B998066591 A CNB998066591 A CN B998066591A CN 99806659 A CN99806659 A CN 99806659A CN 1191535 C CN1191535 C CN 1191535C
Authority
CN
China
Prior art keywords
register
instruction
vector
scalar
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CNB998066591A
Other languages
English (en)
Other versions
CN1303501A (zh
Inventor
C·N·欣德斯
D·V·雅加
D·T·马特尼
D·J·西尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN1303501A publication Critical patent/CN1303501A/zh
Application granted granted Critical
Publication of CN1191535C publication Critical patent/CN1191535C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

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

Abstract

浮点单元配备一个包含32个既可用作向量寄存器又可用作标量寄存器的寄存器的寄存器组。数据处理指令包括至少一个指向含有要在该操作中使用的数据值的寄存器的寄存器指定字段。通过在寄存器字段本身内对某寄存器要按向量寄存器还是按标量寄存器对待进行编码,能增加可用来编码更多操作码或容纳更多寄存器的指令位空间。此外,指令的一个寄存器的寄存器字段可以编码另一个寄存器是向量寄存器还是标量寄存器。一开始可以不管操作码如何,而用指令的寄存器字段内的值来访问寄存器,这更加易于译码。

Description

处理数据的装置和方法
本发明涉及数据处理领域。更具体来说,本发明涉及带向量和标量数据处理寄存器的数据处理系统。
数据处理指令一般包含一个操作码部分和一个或多个寄存器指定字段。在有些系统中,可以将寄存器按向量寄存器或标量寄存器对待。一个向量寄存器指定一序列的寄存器,每个存储其自己的数据值,这些数据值在数据处理指令重复其对该序列中的每个数据值操作时,被单独地操作。相反,一个标量寄存器则是存储着单一值的、独立于其它寄存器而操作的单一的寄存器。
使用向量寄存器的数据处理指令比纯粹标量的操作有许多优点。所需要的指令带宽可以缩减,因为只要一条数据处理指令就能指定多个要执行的类似数据处理操作(这在诸如FIR滤波器的DSP功能中是普遍的)。就因其简单可取的单发布机(即每个周期提取并解码一条指令)而言,用多个并行地执行不同的向量指令的功能单元,能取得更高的性能。
附图中的图16和17分别表示一个克雷(Cray)1处理器寄存器组和一个数字设备公司(Digital Equipment Corporation)的MultiTitan处理器寄存器组。这两个现有技术的处理器都提供向量和标量寄存器。Jouppi等人在“A United Vector/Scalar FloatingArchitecture”(联合向量/标量浮点体系结构)(ComputerArchitecture News(计算机体系结构新闻),卷17,第2期,1989年4月1日)中描述了这种DEC MultiTitan处理器。
就克雷1来说,提供单独的向量和标量寄存器组10、12。16位指令提供的各个操作码,对应于在按向量或标量处理的指令中指定的寄存器的不同组合。这样的缺点是,需要提供更多的操作码来代表这些不同的组合。此外,由于向量和标量寄存器是在独立的寄存器组10、12中提供的,要确定将哪个寄存器组10、12用于指定的特定寄存器,至少需要将操作码部分地解码。这额外的解码要求对能够尽早读取寄存器中存储的数据值增加了困难。
克雷1处理器用3位的寄存器指定字段R1、R2、R3,使得能寻址到8个标量寄存器和8个向量寄存器。实际上,每个向量寄存器包含一组寄存器,它们每个能存储不同的数据值,每个都能被依次访问,而取决于长度寄存器16内存储的向量长度值和屏蔽寄存器18内存储的屏蔽位。然而,3位寄存器字段所允许的仅8个标量寄存器的限制,对于现代编译程序来说是个重大的缺陷。如果能有更多的寄存器为目标,这些编译程序就能生成更快的程序码。
MultiTitan处理器一个寄存器组20,其中的每个寄存器都可以按一个标量寄存器或一部分向量寄存器那样操作。MultiTitan处理器用一个32位指令来指定其数据处理操作。这么大的指令位空间允许指令本身包含字段VS2、VS3确定寄存器是向量还是标量的,包含向量的长度(Len)。尽管这个方法具有很大的灵活性,却有这样的缺点,即在许多情况下,如果不限制可用来提供一个丰富指令集的操作码空间,就没有足够的指令位空间可用来使向量/标量字段能被包含在指令内。此外,在指令本身内提供向量长度,使得如果不借助自修改代码,就难以对向量长度作全局改变。MultiTitan技术也相当不充分地利用其指令位空间,因为该技术将相等的指令位空间资源分配给实际上极不可能被使用的向量和标量寄存器的组合(例如V=SopS,一序列的向量寄存器被填充以对两个标量寄存器的操作的结果)。
US-A-5,437,043中公开了另外一种信息处理装置。该装置包含保留作标量寄存器的寄存器R0-R7和大小是标量寄存器的4倍、一般用作向量寄存器的寄存器R8-R31。
本发明的一个目的是解决上述各系统的至少一些缺陷。
从一方面来说,本发明提供一种用于数据处理的装置,该装置包含:
一个有多个寄存器的寄存器组,其中每个寄存器可进行操作用作向量或标量寄存器;以及
一个用于译码数据处理指令的指令译码器,至少一条所述数据处理指令有至少一个指定要执行的操作的操作指定码和一个指定所述寄存器组内的一个第一寄存器的寄存器指定字段;其中
所述指令译码器用一个给定的寄存器作为标量寄存器或向量寄存器来执行操作,以所述给定寄存器作为标量寄存器的执行,包含对存储在所述给定寄存器的一个操作数执行一次所述操作,以所述给定寄存器作为向量寄存器的执行,包含对存储在依赖所述给定寄存器的一个寄存器指定字段而选择的所述寄存器组的一个预定序列的寄存器中的操作数执行多次所述操作;和
所述指令译码器响应所述第一寄存器指定字段并独立于所述操作指定码,确定要将所述第一寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
本发明认识到可以用寄存器字段本身来指出要将该寄存器作为向量寄存器还是标量寄存器对待。这样就不需要对操作码进行译码,使得仅根据寄存器字段就较早地对寄存器进行存取,并且由于标量和向量寄存器二者都一起在一个寄存器组内提供,这样就使得它们的使用具有更大的灵活性。此外,用寄存器指定字段来编码寄存器是标量寄存器还是向量寄存器,为其它用途释放了指令位空间。实际上本发明的技术提供一种高效的指令编码方法,该编码方法又使指令位空间可用来使更大的寄存器组能被寻址。
在本发明的较佳实施例中,所述的至少一个所述数据处理指令有一个指定一个第二寄存器的第二寄存器指定字段;
所述指令译码器用所述第二寄存器作为标量寄存器或向量寄存器来执行所述操作;和
所述指令译码器响应所述第一寄存器指定字段,确定要将所述第二寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
这种较佳实施例建立并利用一个相关关系-即第一寄存器是向量寄存器还是标量寄存器以及第二寄存器是向量寄存器还是标量寄存器。实际上已经发现有些组合是常用的,有些是不常用的。这一点是可以利用的,方法是支持常用的组合并用第一寄存器字段值编码它们,由此避免不得不单独地编码第二寄存器的性质(nature)。当实际上需要不常用的组合时,可以用额外的指令来满足。不可能的组合非常少见,不必为每条指令编码第二寄存器的性质的好处,远超过偶尔的对为规定想要的不常用操作而提供额外指令的需要。
尽管可能在有些实施例中,该相关关系是当第一寄存器是标量寄存器时,第二寄存器是向量寄存器,已经发现,第一寄存器和第二寄存器有益的相关关系应当是,或者二者同为向量寄存器,或者二者同为标量寄存器。
本发明的原理可以有益地进一步用于较佳实施例,其中,所述至少一个数据处理指令有一个指定一个第三寄存器的第三寄存器指定字段;
所述指令译码器用所述第三寄存器作为标量寄存器或向量寄存器来执行所述操作;和
所述指令译码器响应所述第二寄存器指定字段,确定要将所述第三寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
这个理想的特征用第二寄存器指定字段来编码第三寄存器的向量或标量性质,由此节省更多的指令位空间。
用寄存器指定字段来编码寄存器的向量或标量性质,并非是使标量和向量寄存器的所有组合都能容易地被编码。对于非交换性(non-commutative)运算来说有一个特别的问题,非交换性操作中,VopS或Sopv的次序是有差别的,而在寄存器字段内却没有为这两种可能提供单独的编码。这个问题可以在较佳实施例中解决,在较佳实施例中,当所述操作指定码没有对应于非交换性运算的非交换性码值时,至少成对地提供一些对应于相同的操作但具有相反的操作数顺序的所述非交换性码值。
向量长度和向量跨距(序列中寄存器号之间的间隔)可以在指令操作码内规定。然而,最好由存储在一个向量控制寄存器中的值来控制向量长度和向量跨距。这些长度和跨距对所使用的所有向量寄存器都普遍地适用。尽管这可能会被认为引入了不利的不灵活性,实际上,对混合长度和跨距值的需求是不常见的,本方法具有的无需自修改代码就能全局地改变向量长度和跨距的能力,远远抵销了这种缺点。
此外,向量控制寄存器中存储的长度值,可用来获得对是否某数据处理指令的所有寄存器都是标量寄存器的快速指示,方法是检测一个对应于一的长度值,因为在这种情况下,任何向量寄存器实际上将像标量寄存器一样操作。这种对全标量操作的早期指示,在解决时序限制的指令译码中是有用的。
可以以不同方式划分寄存器指定字段值,以指示寄存器是向量寄存器还是标量寄存器。然而,能够提供把寄存器指定字段值划分成分别编码不同含义的范围的快速指令译码是有益的。
实际上已经发现,提供多于标量寄存器的向量寄存器是有益的,因为向量寄存器因其性质而往往存储大量不同的值,而标量寄存器则常常存储被重复使用的值。特别地,发现该编码方法中向量寄存器与标量寄存器的比为3比1是一个合适的平衡。
应该明白,在所提供的能构成编译程序的目标寄存器的寄存器的数量与让寄存器字段的长度足以使用所有寄存器而需要的指令位空间之间,要达到一种平衡。已经找到的一种平衡是提供32个寄存器。
本发明的较佳实施例包含一个存储器和一个用于控制所述存储器与所述寄存器组内寄存器之间数据值的传送的传送控制器,所述传送控制器响应多个传送指令,在所述存储器与所述寄存器组内的一系列寄存器之间传送一系列数据值。
提供支持多个传送指令(即由一条指令传送许多字)的传送控制器,使得能用新数据高效地刷新寄存器组,不管正被加载或卸载的寄存器是不是向量寄存器。
尽管本发明能被用于许多不同类型的数据处理装置,已经发现它在浮点单元内特别有用。除主流数据处理系统外而额外提供的、诸如以浮点协处理器为形式的浮点单元,经常在想要使用一个支持向量和标量两种寄存器的大寄存器组时,面临着它们可用的指令位空间的限制。在这种情况下,本发明特别有用。
已经发现,经常需要的给定操作码的向量和标量寄存器的组合是可预测的,所以就乘法-累加运算而言,很适合本发明。
已经发现,经常需要的向量和标量的不同组合与本发明的向量/标量寄存器编码技术之间,有着较好的匹配,其中,第一寄存器是目的地寄存器,第二寄存器是第一源寄存器,第三寄存器是第二源寄存器。
寄存器资源的灵活性可以进一步提高,方法是安排数据槽(dataslots)单个地代表单精度值或成对地代表双精度值。
译码的速度可以提高,方法是用给定寄存器内的值,直接指向要被用于向量寄存器或标量寄存器的第一寄存器,使得不必对数据处理指令内提供的值进行任何操作就能开始对这个寄存器的存取。
从另一方面来说,本发明提供一种数据处理的方法,该方法包含的步骤是:
在一个有多个寄存器的寄存器组中存储数据值;其中每个寄存器可进行操作用作向量或标量寄存器;以及
用一个指令译码器译码数据处理指令,至少一条所述数据处理指令有至少一个指定要执行的操作的操作指定码和一个指定所述寄存器组内的一个第一寄存器的第一寄存器指定字段;其中
所述指令译码器用一个给定的寄存器作为标量寄存器或向量寄存器来执行操作,以所述给定寄存器作为标量寄存器的执行,包含对存储在所述给定寄存器的一个操作数执行一次所述操作,以所述给定寄存器作为向量寄存器的执行,包含对存储在依赖所述给定寄存器的一个寄存器指定字段而选择的所述寄存器组的一个预定的寄存器序列中的操作数执行多次所述操作;和
所述指令译码器响应所述第一寄存器指定字段并独立于所述操作指定码,确定要将所述第一寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
现在将结合各附图,仅通过举例来说明本发明的实施例,附图中
图1示意性地表示一个数据处理系统;
图2表示一个支持标量和向量两种寄存器的浮点单元;
图3的流程图表示,对于单精度操作来说,如何确定给定寄存器是向量寄存器还是标量寄存器;
图4的流程图表示,对于双精度操作来说,如何确定给定寄存器是向量寄存器还是标量寄存器;
图5表示在单精度操作期间将寄存器组划分成子集,每个子集内是环绕的;
图6表示在双精度操作期间将寄存器组划分成子集,每个子集内是环绕的;
图7A至7C分别表示从主处理器角度看的一条协处理器指令、从单和双精度协处理器角度看的该协处理器指令以及从单精度协处理器角度看的该协处理器指令;
图8表示控制一个单和双精度协处理器的主处理器;
图9表示控制一个单精度协处理器的主处理器;
图10表示单和双精度协处理器内的、确定是否应当就所接收协处理器指令向主处理器返回一个接收信号的电路;
图11表示单精度协处理器内的、确定是否应当就所接收协处理器指令向主处理器返回一个接收信号的电路;
图12表示主处理器内的未定义指令异常处理;
图13的框图表示按照本发明较佳实施例的一个协处理器的部件;
图14的流程图表示按照本发明较佳实施例的寄存器控制和指令发布逻辑的操作;
图15提供一例按照本发明较佳实施例的浮点寄存器的内容的实例;
图16表示克雷1处理器内的寄存器组;和
图17表示MultiTitan处理器内的寄存器组。
图1表示的数据处理系统22包含主处理器24、浮点单元协处理器26、高速缓冲存储器28、主存储器30和输入/输出系统32。主处理器24、高速缓冲存储器28、主存储器30和输入/输出系统32通过主总线34连接。协处理器总线36连接主处理器24与浮点单元协处理器26。
操作中,主处理器24(也称ARM核心)执行一个数据处理指令流,它们控制一般类型的数据处理操作,包括与高速缓冲存储器28、主存储器30和输入/输出系统32的交互作用。嵌入该数据处理指令流内的有协处理器指令。主处理器24识别这些协处理器指令为应当由附属的协处理器执行的类型。相应地,主处理器24将这些协处理器指令在协处理器总线36上发出,由任何附属协处理器从总线接收它们。在这种情况下,浮点单元协处理器26将接受并执行它检测到的为它发出的任何接收的协处理器指令。这个检测是通过协处理器指令内的协处理器号字段进行的。
图2更详细地表示浮点单元协处理器26。浮点单元协处理器26包括一个由32个32位寄存器构成的寄存器组38(图2中显示的较少)。这些寄存器能单个地作为每个存储一个32位数据值的单精度寄存器操作,或者作为共同存储一个64位数据值的寄存器对操作。在浮点单元协处理器26内,提供一个流水线式的乘法累加单元40和一个加载存储控制单元42。在适当的情况下,乘法累加单元40和加载存储控制单元42能并发地操作,乘法累加单元40对寄存器组38内的数据值执行算术运算(包括乘法累加运算以及其它运算),而加载存储控制单元42则将乘法累加单元40不在使用的数据值经主处理器24发送到或发送出浮点单元协处理器26。
在浮点单元协处理器26内,被接收的协处理器指令被锁存在指令寄存器44内。在这个简略视图中,协处理器指令可视为是由操作码部分及随后的三个寄存器指定字段R1、R2和R3构成的(实际上在完整的指令中这些字段可以是以不同的方式分散分布的)。这些寄存器指定字段R1、R2和R3分别相当于寄存器组38内充当正在进行的数据处理操作的目的地、第一源和第二源的寄存器。向量控制寄存器46(它可以是具有额外功能的更大的寄存器的一部分)为可能由浮点单元协处理器26执行的向量操作存储一个长度值和一个跨距值。向量控制寄存器46可以根据向量控制寄存器加载指令用长度值和跨距值初始化和更新。向量长度值和跨距值在浮点单元协处理器46内全局适用,由此,不必借助自修改代码就能全局地对这些值进行动态改变。
寄存器控制与指令发布单元48、加载存储控制单元42和向量控制单元50可以共同认为是执行指令译码器功能的主要部分。寄存器控制与指令发布单元48响应操作码和三个寄存器指定字段R1、R2和R3,首先将初始寄存器存取(寻址)信号输出到寄存器组38,而不对操作码进行任何译码,也不需使用向量控制单元50。以这一方式直接利用初始的寄存器值,有助于获得更快的实现。如果指定了向量寄存器,向量控制单元50的作用是用3位的增量器(加法器)52来生成必要的寄存器存取信号序列。向量控制单元50根据向量控制寄存器46内存储的长度值和跨距值执行其对寄存器组38的寻址。提供一个寄存器记录板(scoreboard),用来进行寄存器锁定,使得流水线式乘法累加单元40和并发操作的加载存储控制单元42不会产生任何数据一致性问题(可以选择将寄存器记录板54视为寄存器控制与指令发布单元48的一部分)。
指令寄存器44内的操作码规定要执行的数据处理操作的性质(例如指令是否是加、减、乘、除、加载、存储…等等)。这与所指定的寄存器的向量或标量性质是无关的。这进一步简化了指令译码和乘法累加单元40的设置。第一寄存器指定值R1和第二寄存器指定值R2一起对操作码所确定的操作的向量/标量性质编码。该编码方法所支持的三个常见的情况是,S=S*S(例如:由C编译程序从一个C代码程序块生成的基本随机数学)、V=VopS(例如:为了缩放一个向量的元素)和V=VopV(例如:诸如FIR滤波器和图形变换的矩阵操作)(注意这里的“op”指示一个通用操作,语法的形式为:目的地=第二操作数op第一操作数)。也应当明白,有些指令(例如:比较、与零或绝对值的比较)可以没有目的地寄存器(例如:输出是条件标志),或者输入操作数较少(例如:与零的比较只有一个输入操作数)。在这些情况下,有更多的操作码位空间可用来规定诸如向量/标量性质的选择,并且可以让每个操作数可使用全部范围的寄存器(例如,比较指令可以总是全标量的,不管是什么寄存器)。
共同执行指令译码器的功能的主要部分的寄存器控制与指令发布单元48和向量控制单元50,根据第一寄存器指定字段R1和第二寄存器指定字段R2,确定并控制所规定的数据处理操作的向量/标量性质。注意到如果向量控制寄存器46内存储的长度值指示的长度为1(相当于存储值零),则这可被用作纯标量操作的早期指示。
图3的流程图表示在单精度方式中用来根据寄存器指定值译码向量/标量性质的处理逻辑。在步骤56,检测向量长度是否被全程地设置为1(长度值等于零)。如果向量长度是1,则在步骤58中把所有寄存器视作标量寄存器。在步骤60,检测目的地寄存器R1是否在范围S0至S7内。如果是这样,则操作是全标量的,形式为S=SopS,正如步骤62中所示。如果步骤60返回“否”,则确定目的地是个向量寄存器,正如步骤64中所示。如果目的地是向量寄存器,则编码方法把第二操作数也作为一个向量寄存器。于是在这个阶段剩下的两种可能是V=VopS和V=VopV。这两个可能选择在步骤66进行区分,该步骤确定第一操作数是否S0至S7的其中之一。如果是这样,则操作是V=VopS;否则,操作就是V=VopV。这些状态分别在步骤68和70中确认。
应当注意,当向量长度被设置为1时,寄存器组的32个寄存器全部都可用来作为标量寄存器,因为操作的标量性质将在步骤58确认,而不依赖于步骤60的检测-后者限制可被用作目的地的寄存器的范围。在使用混合的向量和标量指令时,步骤60的检测对于识别全标量操作是有用的。也要注意,在混合的向量和标量方式下操作时,如果第一操作数是个标量,则它可能是S0至S7的任何一个;而如果第一操作数是个向量,则它可能是S8至S31的任何一个。在寄存器组内为是向量的第一操作数提供三倍数量的寄存器,是对在使用向量操作时保存数据值的序列所需的通常更多数量的寄存器的一种适应。
应当知道,人们希望进行的一种常用操作是图形变换。在一般的情况中,要进行的变换可以用一个4*4矩阵表示。在这种计算中对操作数的重复使用,意味着希望将矩阵值存储在可以按向量操作的寄存器中。同样,通常把一个输入像素值存储在4个寄存器中,这些寄存器还是应当能按向量操作,以利重复使用。矩阵运算的输出一般是存储在4个寄存器中的标量(累加各个向量行乘积)。如果希望加倍输送(double pump)输入和输出值,就要满足有24个(16+4+4)个向量寄存器和8个(4+4)标量寄存器的要求。
图4是一个与图3的流程图相对应的流程图,但这里表示的是双精度方式。如上所述,在双精度方式中,寄存器组38内的寄存器槽(slots)成对地工作,在逻辑寄存器D0至D15中存储16个64位数据值。在这种情况下,对寄存器的向量/标量性质的编码方法作了不同于图3中的编码方法的修改,步骤60和66的检测现在分别变成步骤72和74中的“目的地是D0至D3其中之一吗?”和“第一操作数是D0至D3其中之一吗?”
尽管上述的对寄存器指定字段内寄存器的向量/标量性质的编码能显著节省指令位空间,它却对诸如减法和除法的非交换性运算产生一些困难。假定寄存器配置是V=VopS,非交换性运算的第一与第二操作数之间缺乏对称性的问题,无需额外的交换寄存器值的指令就能克服,方法是将指令集扩展得包含诸如SUB、RSUB和DIV、RDIV的操作码对,它们代表非交换性运算的两种不同的操作数的可能选择。
图5表示寄存器组38的子集内的向量的环绕。特别地,在单精度方式中,将寄存器组划分成地址为S0至S7、S8至S15、S16至S23和S24至S31的4个寄存器范围。这些范围相邻但不相交。参看图2,可以通过在向量控制单元50内采用一个3位增量器(加法器)52,来为这些含有8个寄存器的子集提供环绕功能。这样,当跨越子集界线时,增量器将绕回。通过在寄存器地址空间内将各子集在8个字边界上对齐,方便了这个简单的实现。
返回到图5,为了帮助理解寄存器的环绕,图中表示了一些向量运算。第一个向量运算指定起始寄存器S2、向量长度4(由向量控制寄存器46内的长度值3指示)和跨距1(由向量控制寄存器46内的跨距值0指示)。相应地,有了这些设置好的全程向量控制参数,当一条指令被执行时,指令被译码为将寄存器S2当作向量,然后分别用寄存器S2、S3、S4和S5内的数据值四次执行该指令。因为这个向量不跨越子集边界,所以没有向量回绕。
在第二个例子中,起始寄存器是S14,长度是6,跨距是1。这将导致指令从寄存器S14开始被执行6次。下一个使用的寄存器是S15。当寄存器再次按跨距递增时,这时被使用的寄存器不是S16,它将回绕到寄存器S8。指令然后进一步被执行3次,完成整个的S14、S15、S8、S9、S10和S11的序列。
图5的最后的例子显示起始寄存器为S25,长度为8,跨距为2。第一个被使用的寄存器是S25,紧接着是按跨距值2决定的S27、S29和S31。使用寄存器S31之后,下一个寄存器值将回绕到该子集的开始,由于跨距是2,所以越过寄存器24,而用寄存器S25执行运算。增量器52可采用3位加法器的形式,当在向量寄存器之间移动时,它将跨距加到当前值上。相应地,通过向加法器提供不同的跨距值,能调整跨距。
图6表示在双精度方式中寄存器组38的回绕。在这一方式中,寄存器子集包含D0至D3、D4至D7、D8至D11和D12至D15。在双精度方式中对起增量器52的作用的加法器的最小值输入是2-对应于双精度跨距1。双精度跨距为2时将要求向加法器输入4。图6中表示的第一个例子中,起始寄存器为D0,长度为4,跨距为1。这将得出一个向量寄存器序列D0、D1、D2和D3。本例中没有子集边界被跨越,所以没有回绕。在第二个例子中,起始寄存器为D15,长度为2,跨距为2。这将导致一个向量寄存器序列D15和D13。
参看图2,注意加载存储控制单元42在输出端有一个5位增量器,加载/存储多重操作不受限于对向量运用应用的寄存器回绕。这使单一的加载/存储多指令能按其需要访问许多连续的寄存器。
一个充分利用这个回绕方案的操作的例子是一个拆分成4个信号值和4个taps(分接头)的单元的FIR滤波器。如果语法R8-R11opR16-R19代表R8opR16、R9opR17、R10opR18和R11opR19,则FIR滤波器操作可以以如下方式进行:
将8个taps装入R8-R15并将8个信号值装入R16-R23
R8-R11opR16-R19并将结果放入R24-R27
R9-R12opR16-R19并将结果累加到R24-R27
R10-R13opR16-R19并将结果累加到R24-R27
R11-R14opR16-R19并将结果累加到R24-R27
用新的taps再加载R8-R11
R12-R15opR16-R19并将结果累加到R24-R27
R13-R8opR16-R19并将结果累加到R24-R27(R15->R8回绕)
R14-R9opR16-R19并将结果累加到R24-R27(R15->R8回绕)
R15-R10opR16-R19并将结果累加到R24-R27(R15->R8回绕)
用新的taps再加载R12至R15
当taps用尽时,用新的数据再加载R16-R19
R12-R15opR20-R23并将结果放入R28-R31
R13-R8opR20-R23并将结果累加到R28-R31(R15->R8回绕)
R14-R9opR20-R23并将结果累加到R28-R31(R15->R8回绕)
R15-R10opR20-R23并将结果累加到R28-R31(R15->R8回绕)
其余如上。
由以上所述应当注意到,加载是从多个累加(accumulates)到不同的寄存器,因此能并行地进行(即达到双缓冲)。
图7A示意性地表示主处理器24是如何看待一条协处理器指令的。主处理器用指令内字段76(它可能是拆分的)的一个位组合来将指令识别为协处理器指令。在标准ARM处理器指令集内,一条协处理器指令包括协处理器号字段78,主处理器附属的(各)协处理器用它来标识是否有特定的协处理器指令以它们为目标。不同类型的协处理器一诸如DSP协处理器(例如由ARM生产的Piccolo协处理器)或者浮点单元协处理器,可以分配不同的协处理器号,这样就能在一个系统中用同一协处理器总线36单独地寻址。协处理器指令也包括一个由协处理器使用的操作码和分别从协处理器寄存器中指定目的地、第一操作数和第二操作数的三个5位字段。在有些指令,诸如协处理器加载或存储指令中,主处理器至少部分地译码协处理器指令,以便协处理器与主处理器能共同完成所希望的数据处理操作。主处理器也可以响应在协处理器号内编码的数据类型,作为它在这种情况中进行的指令译码的一部分。
图7B表示支持双精度和单精度两种操作的协处理器是如何解释其接收的协处理器指令的。这种协处理器被分派以两个相邻的协处理器号,用协处理器号的3个最高有效位来标识它是不是目标协处理器。这样,协处理器的最低有效位对标识目标协处理器的目的来说是多余的,可用来规定要在执行该协处理器指令时使用的数据类型。在本例中,数据类型相当于是单精度还是双精度的数据大小。
可以注意到,在双精度方式中,有效地将寄存器的数目从32个缩减到16个。于是,就有可能减低寄存器字段的大小,但是那样的话,关于要使用哪个寄存器的解码,就不能直接从协处理器指令内已知位置中的自含字段(self-contained fields)得到,而要根据对协处理器指令的其它部分的解码而获得。这是不利的,会使协处理器的操作复杂化,可能降低协处理器的操作的速度。用协处理器号的最低有效位来编码数据类型,意味着操作码可以完全独立于数据类型,这也简化并加快了操作码的译码。
图7C表示只支持是图7B协处理器支持的数据类型的子集的单一数据类型的协处理器是如何解释协处理器指令的。在这种情况中,将整个协处理器号用来确定是否接受指令。这样,如果协处理器指令具有不受支持的数据类型,则它就对应于一个不同的协处理器号,将不被接受。主处理器24然后就能开始进行未定义指令的异常处理,仿真对不受支持的数据类型的处理。
图8表示的数据处理系统,包含起主处理器作用并通过协处理器总线82与支持单和双精度两种数据类型的协处理器84通信的ARM核心80。包含协处理器号在内的协处理器指令,当在指令流内被遇到时,被从ARM核心80在协处理器总线82上发出。协处理器84然后将该协处理器号与其自己的号作比较,如果匹配,就向ARM核心80发回一个接受信号。如果收不到接受信号,ARM核心80就识别出一个未定义的指令异常,然后求助在存储系统86中存储的异常处理程序码。
图9表示的是用仅支持单精度运算的协处理器88代替协处理器84而改变的图8的系统。在这种情况下,协处理器88仅识别一个协处理器号。于是,原始指令流内应当由图8的协处理器84执行的双精度指令,不被该单精度协处理器88接受。所以,如果希望执行相同的程序码,那么,存储系统86内的未定义异常处理程序码可包含一个双精度仿真例程。
应当注意到,尽管因需要仿真双精度指令而将减慢这些指令的执行速度,单精度协处理器88的可以比双精度协处理器84更小更便宜,如果双精度指令足够少的话,能获得纯粹的收益。
图10表示支持单和双精度并有两个相邻协处理器号的协处理器84内的指令锁存电路。在这种情况下,要将协处理器指令内协处理器号的3个最高有效位CP#[3:1]与分配给该协处理器84的协处理器号作比较。本例中,如果协处理器号是10和11,则可以通过将协处理器号的最高有效位CP#[3:1]对照二进制数101而进行这种比较。如果匹配,就向ARM内核80返回一个接受信号,然后将协处理器指令锁存起来供执行。
图11表示图9的单精度协处理器88内的等效电路。这种情况下,仅能识别一个协处理器号,缺省地采用单精度运算。为确定是否接受并锁存协处理器指令而作的比较,在整个4位协处理器号CP#[3:0]与二进制1010这个唯一内置的协处理器号之间进行。
图12的流程图表示如何能触发图9实施例的未定义异常处理例程来运行双精度仿真程序码。这要通过检测(步骤90)导致未定义指令异常的指令是否是一个有二进制1011的协处理器号的协处理器指令来达到。如果是,则其打算作为一个双精度指令,所以可在步骤92被仿真,然后返回到主程序流。其它异常类型如果没有被步骤90捕获,可以由另外的步骤检测并处理。
图13表示用格式寄存器FPREG 200来标识存储在寄存器组220的每个32位寄存器或数据存储槽中存储的数据的类型的信息。如上所述,每个数据存储槽可单个地作为用于存储一个32位数据值(1个数据字)的单精度寄存器,或者可以与另一个数据存储片配对,作为用于存储一个64位数据值(2个数据字)的双精度寄存器操作。按照本发明的较佳实施例,FPREG寄存器200被安排得能标识任何特定数据存储槽中存储的是单精度还是双精度数据。
如图13中所示,寄存器组220中的32个数据存储槽被安排得提供16对数据存储槽。在较佳实施例中,如果某第一数据存储槽中存储一个单精度数据值,则该对中的另一个数据存储槽将被安排得只存储一个单精度数据值,并且不与任何其它数据存储槽链接起来用于存储双精度数据值。这保证了任何一对特定数据存储槽都被安排得或者存储两个单精度数据值或者存储一个双精度数据值。该信息可以由与寄存器组220中的每对数据存储槽相关联的一个信息位来标识,因此在较佳实施例中,FPREG寄存器200被安排得存储16个用于标识在寄存器组220的每对数据存储槽中存储的数据的类型的信息位。应当知道,寄存器FPREG 200因此可以以16位寄存器的形式实现,或者,为了与FPU协处理器26内其它寄存器的一致,可以体现为一个有16个备用信息位的32位寄存器。
图15表示寄存器组220内的6对数据存储槽,按照较佳实施例,它们可被用来存储6个双精度数据值或12个单精度数据值。图15中显示了一例可以在这些数据存储槽中存储的数据,DH代表双精度数据值的32个最高有效位,DL表示双精度数据值的32个最低有效位,S代表一个单精度数据值。
图15中也表示了按照本发明较佳实施例的FPREG寄存器200内的相应条目,FPREG寄存器200中存储的值“1”,指示所关联的一对数据存储槽中含有一个双精度数据值,而值“0”则用来指示相应的一对数据存储槽中至少有一个含有一个单精度数据值,或者两个数据存储槽都是未初始化的。因此,如果两个数据存储槽都是未初始化的,如果数据存储槽对中其中一个数据存储槽是未初始化的,另一个含有一个单精度数据值,或者如果数据存储槽对中两个都含有一个单精度数据值,则在FPREG寄存器200的相应位中将存储逻辑“0”值。
如上所述,较佳实施例的FPU协处理器2 6可以被用来处理单精度或双精度数据值,主处理器24发出的协处理器指令将标识任何特定指令是单精度指令还是双精度指令(见图7B和相关的说明)。如果某指令被协处理器接受,它将被传送到寄存器控制与指令发布单元48,供译码和执行。如果该指令是加载指令,寄存器控制与指令发布逻辑48将指令加载存储控制单元42从存储器检索所标识的数据并将该数据存储在寄存器组220的指定数据存储槽中。在这个阶段,协处理器将知道被检索的是单精度还是双精度数据值,加载存储控制单元42将相应地进行操作。所以,加载存储控制逻辑42将在路径225上把32位单精度数据值或64位双精度数据值传送到寄存器组输入逻辑230,供在寄存器组220中存储。
除了数据被加载存储控制单元42加载到寄存器组220外,数据也被提供到格式寄存器FPREG 200,以便能添加必要的信息位,以标识接收数据的每对数据存储槽存储的是单精度还是双精度数据值。在较佳实施例中,该数据是在数据被加载到寄存器组中之前被存储在格式寄存器FPREG 200中的,以便寄存器组输入逻辑230能用到该信息。
在较佳实施例中,寄存器组220中数据的内部格式是与外部格式相同的,因此在寄存器组220中,单精度数据值是按32位数据值存储的,双精度数据值是按64位数据值存储的。因为寄存器组输入逻辑230能访问FPREG格式寄存器200,所以它知道它接收的数据是单精度的还是双精度的,因此在这种实施例中,寄存器组输入逻辑230只是安排将在路径225上接收的数据存储在寄存器组220的适当的数据存储槽中。然而,如果在其它形式的实施例中,寄存器组内的内部表示不同于外部格式,则要将寄存器组输入逻辑230安排得能执行必要的转换。例如,数字一般被表示为1.abc…乘以某基数值的某次幂。由于效率的缘故,一般的单精度和双精度表示法不用一个数据位来代表小数点左边的1,该1被视为是隐含的。假设出于某个理由,寄存器组220内使用的内部表示要求要显式地表示出该1,则寄存器组输入逻辑230就要进行对数据的必要转换。在这种实施例中,数据存储槽一般要大于32位,以便能容纳由寄存器组输入逻辑230生成的额外数据。
除了将数据值加载到寄存器组220中,加载存储控制单元42也可以把数据加载到协处理器26的一个或多个系统寄存器中,例如用户状态与控制寄存器FPSCR 210中。在较佳实施例中,FPSCR寄存器210含有用户可访问的配置位和异常状态位,在较佳实施例说明的最后提供的对浮点单元的结构说明中,将作更加详细的讨论。
如果寄存器控制与指令发布单元48接收到一个标识寄存器组220的特定数据存储槽中的内容要被存储到存储器的存储指令,则寄存器控制与指令发布逻辑48将受到相应的指令,必要的数据字被从寄存器组220读出,经寄存器组输出逻辑240到加载存储控制单元42。寄存器组输出逻辑240访问FPREG寄存器200的内容来确定所读出的数据是单精度还是双精度数据。它然后应用适当的数据转换,以逆转由寄存器组输入逻辑施加的任何数据转换,然后在路径235上把数据供给加载存储控制逻辑42。
按照本发明的较佳实施例,如果该存储指令是个双精度指令,则可以将协处理器26视为是在将指令施加到双精度数据值的第二操作方式下操作的。因为双精度数据值含有偶数个数据字,所以在第二操作方式下发出的任何存储指令一般要标识偶数个其内容要被存储到存储器的数据存储槽。然而,按照本发明的较佳实施例,如果指定了奇数个数据存储槽,则安排加载存储控制单元42读取FPREG寄存器200的内容,并首先将这些内容存储到存储器,再存储所标识的偶数个来自寄存器组220的数据存储槽。一般来说,要被传送的数据存储槽是用一个基址后随一个数目标识的,该基址标识寄存器组中某个数据存储槽,该数目指示从所标识的数据存储槽算起的要存储的数据存储槽的数量(即数据字的数量)。
所以,例如如果存储指令给出的基址是寄存器组220中的第一个数据存储槽,并规定33个数据存储槽,这将导致全部32个数据存储槽的内容被存储到存储器,但是由于所规定的数据存储槽的数目是奇数的,所以也将导致FPREG寄存器200的内容被存储到存储器。
通过这个方法,用一条指令就能把寄存器组的内容和标识在寄存器组220的各种数据存储槽中存储的数据类型的FPREG寄存器200的内容这两种内容存储到存储器。这就免得必须发布另外的指令来显式地存储FPREG寄存器200的内容,因此在向存储器存储或从存储器加载的过程中不会不利地影响处理速度。
在本发明另外的实施例中,可以将这个技术更进一步,以便如果需要的话,也能用单一指令使另外的系统寄存器,诸如FPSCR寄存器210,被存储到存储器。因此,考察有32个数据存储片的寄存器组220的例子,那么如上所述,如果在存储指令中标识了33个数据存储槽,则除了寄存器组220中的32个数据存储槽的内容外,FPREG寄存器200也将被存储到存储器。然而,如果标识了一个超过寄存器组中数据存储槽数的不同的奇数,例如35,则这可被加载存储控制单元42解释为,要求除了FPREG寄存器200和寄存器组220中的数据存储槽的内容外,也要把FPSCR寄存器210的内容存储到存储器。协处理器也可以包含其它的系统寄存器,例如标识已经在协处理器处理指令期间发生的异常的异常寄存器。如果在存储指令中标识了一个不同的奇数,例如37,则这可被加载存储控制单元42解释为,要求除了FPSCR寄存器210、FPREG寄存器200和寄存器组220的内容外,还要存储一个或多个异常寄存器的内容。
当启动存储或加载指令的程序码不知道寄存器组内容时,以及寄存器组内容只是临时被存储到存储器,供随后向寄存器组中检索时,这个技术特别有用。假设程序码知道寄存器组内容,则FPREG寄存器200的内容并非也需要存储到存储器。可能不知道寄存器组内容的程序码的典型例子是上下文切换代码(context switch code)和过程调用入口和出口例程。
在这种情况下,除了寄存器组的内容外,还可以把FPREG寄存器200的内容高效地存储到存储器中,如上所述,实际上,需要时也可以存储某些其它的系统寄存器。
当接收到随后的加载指令时,采用类似的过程。因此,加载存储控制单元42在接收到指定奇数个数据存储槽的双精度加载指令时,将会使FPREG寄存器200的内容被加载到FPREG寄存器200中,接着是由在该加载指令中标识的存储槽的数量所指出的任何系统寄存器的内容,接着使偶数个数据字被存储到寄存器组220的指定数据存储槽中。因此,考察前面讨论的例子,如果在加载指令中指定的数据存储槽的数目是33,则FPREG寄存器200的内容将被加载到FPREG寄存器200中,接着是32个数据存储槽的内容。类似地,如果指定的数据存储槽的数目是37,则除了上述内容外,任何异常寄存器的内容也将被加载到这些异常寄存器中。本领域的熟练人员显然明白,与特定的奇数相关联的特定操作完全是任意的,是可以随意改变的。
图14表示的是按照本发明较佳实施例的寄存器控制与指令发布单元48在执行存储和加载指令时的操作的流程图。首先,在步骤300,从指令读取数据字的数目(在较佳实施例中它等于数据存储槽的数目),以及在该指令中标识的第一寄存器号,即基址寄存器。然后在步骤310,确定该指令是不是双精度指令,如上所述,在这个阶段协处理器是能得到这个信息的,因为该指令标识它是双精度还是单精度指令。
如果该指令是双精度指令,则进程前进到步骤320,在这里确定指令中指定的字数是不是奇数。假设因本实施例的缘故,不采用除FPREG寄存器200外还选择性地传送各种系统寄存器的技术,那么,如果字数是奇数,这将表明FPREG寄存器200的内容应当被传送,于是在步骤325,FPREG寄存器200的内容被加载存储控制单元42传送。然后在步骤327将字数递减1,进程前进到步骤330。如果在步骤320确定字数是偶数,则进程直接前进到步骤330。
在步骤330,确定字数是否大于零。如果不是,该指令被视为完成,进程在步骤360退出。然而,如果字数大于零,则进程前进到步骤332,在此将一个双精度数据值(即两个数据存储槽的内容)传送到或传送出所指定的第一寄存器号。然后在步骤334,将字数递减2,在步骤336,将寄存器号递增1。如上所述,对于双精度指令来说,一个寄存器实际上由两个数据存储槽组成,因此将寄存器计数值递增1相当于将数据存储槽号递增2。
过程然后返回到步骤330,在此确定字数是否仍然大于零;如果是,则重复该进程。当字数达到零时,进程在步骤340退出。
如果在步骤310确定该指令不是双精度指令,则进程前进到步骤350,在此再次确定字数是否大于零。如果是,则进程前进到步骤352,在此将一个单精度数据值传送到或传送出在该指令中标识的第一寄存器号。然后在步骤354,将字数递减1,在步骤356,将寄存器号递增1,指向下一个数据存储槽。进程然后返回到步骤350,在此确定字数是否仍然大于零;如果是,则该进程一直重复,直到字数等于零的时候,此时,进程在步骤360退出。
以上方法在执行不知道寄存器组内容的程序码一例如上下文切换代码或过程调用和退出例程时,具有很大的灵活性。在这些情形中,操作系统是不知道寄存器的内容,同时希望不要必须根据寄存器的内容来区别对待寄存器。上述方法允许在编写这些程序码例程时用一条存储或加载指令指定奇数个数据字。如果协处理器要求使用寄存器内容信息,它将把指令中的奇数个数据字,解释为也要求向存储器存储或从存储器加载为标识寄存器组中数据的内容而需要的格式信息。这种灵活性避免了需要用特殊的操作系统软件才能支持要求寄存器内容信息的协处理器。
这个技术也避免了需要在程序码内的独立操作中加载和存储寄存器内容信息。因为在指令中包含了对加载和存储寄存器内容信息的选择,所以不需要另外访问存储器。这就缩短了程序码的长度并有可能节省时间。
下面给出一个综合了上述技术的浮点单元的结构说明。
1.介绍
VFPv1是一个为实现作为用于ARM处理器模块的协处理器而设计的浮点系统(FPS)结构。这个结构的实现可以包含硬件或软件中的特征,某个实现也可以用软件来补充功能或提供IEEE 754兼容性。本规范旨在用硬件和软件支持的组合来获得全部的IEEE 754兼容性。
VFPv1使用两个协处理器号:10被用于带单精度操作数的操作,而11则被用于带双精度操作数的操作。单精度与双精度数据之间的转换是用2条在源操作数协处理器空间中操作的转换指令完成的。
VFPv1结构的特点包括:
·在带支持代码的硬件上与IEEE 754完全兼容
·32个单精度寄存器,每个都是作为源操作数或目的地寄存器可寻址的。
·16个双精度寄存器,每个都是作为源操作数或目的地寄存器可寻址的。(双精度寄存器与物理的单精度寄存器重叠)
·向量方式能显著增加浮点代码密度和与加载和存储操作的并发性。
·4组的8个循环单精度寄存器或4组的4个循环双精度寄存器可增强dsp和图形操作。
·非正规处理选项选择IEEE 754兼容性(有来自浮点仿真程序包的预定支持)或快速清零功能。
·旨在实现用于具有IEEE 754可兼容的结果的完全流水线链接的乘法累加。
·具有FFTOSIZ指令的C、C++和Java的快速浮点向整数转换。
实现者可以选择完全用硬件来实现VFPv1或者使用硬件和支持程序码的组合。VFPv1可以完全以软件实现。
2.术语
本规范使用下列术语:
自动异常-一种异常条件,它总是弹回到支持程序码,不管各异常启动位的值是什么。对哪些异常(如果有的话)是自动的的选择,是一种实现上的选择。参看节0,
6.异常处理
弹回-一个被报告给操作系统的异常,它将完全由支持程序码处理,而不调用用户陷阱处理程序或者中断正常的用户程序码流。
CDP-“协处理器数据处理”,对于FPS来说,CDP运算是算术运算而不是加载或存储操作。
ConvertToUnsignedInteger(Fm)(转换到无符号整数)-Fm中的内容向32位无符号整数值的转换。结果取决于最终舍入的舍入方式和对超出32位无符号整数的范围的浮点值的处理。如果浮点输入值是负的或者对32位无符号整数来说太大,则可能发生INVALID异常。
ConvertToSignedInteger(Fm)(转换到有符号整数)-Fm中的内容向32位有符号整数值的转换。结果取决于最终舍入的舍入方式和对超出32位无符号整数的范围的浮点值的处理。如果浮点输入值对32位有符号整数来说太大,则可能发生INVALID异常。
ConvertUnsignedIntToSingle/Double(Rd)(转换无符号整数到单/双精度)-将被解释为是个32位无符号整数的ARM寄存器(Rd)的内容向单或双精度浮点值的转换。如果目的地精度是单一的,则在转换操作中可能发生INEXACT异常。
ConvertSignedIntToSingle/Double(Rd)(转换有符号整数到单/双精度)-将被解释为是个32位有符号整数的ARM寄存器(Rd)的内容向单或双精度浮点值的转换。如果目的地精度是单一的,则在转换操作中可能发生INEXACT异常。
非正规化值-范围(-2Emin<x<2Emin)中的值的表示。在IEEE 754的单和双精度操作数的格式中,非正规化值或曰非正规值有一个零指数,并且前导的有效位是而不是1。IEEE 754-1985规范要求用与标准操作数相同的精度来生成和操作非正规化操作数。
禁止的异常-在FPCSR中的相关异常允许(Exception Enable)位被设置为0的异常,称为是“禁止的”。IEEE 754规范为这些异常定义了要被返回的正确结果。生成一个异常条件的操作可以弹回到支持程序码去生成IEEE 754定义的结果。该例外将不被报告给用户异常处理程序。
允许的例外-相应的例外允许位被设置为1的例外。如果发生这个例外,就将进行到用户处理程序的陷阱。生成一个例外条件的操作可以弹回到支持程序码去生成IEEE 754定义的结果。该例外然后将被报告给用户例外处理程序。
指数-浮点数的一个成分,一般在确定所代表的数的值时指示2的整数幂。指数有时称为带符号或无偏指数。
尾数-位于其隐含的二进制小数点右边的有效数位(significand)字段。
清零方式-在这个方式下,舍入后在范围(-2Emin<x<2Emin)内的所有值都按零处理,而不是转换成非正规化值。
高(Fn/Fm)-按存储器中表示的双精度值的高32位[63:32]。
IEEE 754-1985-“IEEE二进制浮点算术标准”(ANSI/IEEE标准754-1985,电力电子工程师协会,美国纽约州纽约市,邮政编码10017)。该标准经常被称为IEEE 754标准,它为浮点系统定义数据类型、正确运算、例外类型与处理、以及错误界限。多数处理器在硬件上或者在硬件与软件的组合上依照该标准制造。
无穷大-一个用来代表∞的IEEE 754特殊格式。指数将是该精度的最大值,有效数位将全部为零。
输入例外-给定操作的一个或多个操作数不受硬件支持的例外条件。该操作将弹回到支持程序码,以完成该操作。
中间结果-用来在舍入之前存储计算的结果的内部格式。这个格式可以有比目的地格式更大的指数字段和有效数位字段。
低(Fn/Fm)-按存储器中表示的双精度值的低32位[31:0]。
MCR-“从ARM寄存器移到协处理器”,对于FPS来说,这包括在ARM寄存器与FPS寄存器之间传送数据或控制寄存器的指令。用一条MCR类的指令只能传送32个信息位。
MRC-“从协处理器移到ARM寄存器”,对于FPS来说,这包括在FPS寄存器与ARM寄存器之间传送数据或控制寄存器的指令。用一条MRC类的指令只能传送32个信息位。
NaN-“不是数字”,这是一个以浮点格式编码的符号实体。有两种NaN,一种是发信号的,一种是不发信号的,或曰安静的。发信号的NaN如果被用作操作数,将导致一个无效操作数(Invalid Operand)异常。安静的NaN散布在几乎每个算术运算中而不发异常信号。NaN的格式有一个全部为1的指数字段,有效数位非零。要表示一个发信号的NaN,尾数的最高有效位为零;而安静的NaN将把该位设置为1。
保留的-控制寄存器或指令格式中的一个字段是“保留的”,如果该字段要由具体实现来定义,或者如果该字段的内容为非零时会产生不可预测的结果。这些字段被保留用于将来对结构的扩展或者是特定于具体实现的。具体实现不使用的所有保留的位,都必须被写成零并读成零。
舍入方式-IEEE 754规范要求所有计算都要像是对无限精度那样进行,就是说,两个单精度值的积必须精确地计算到两倍于有效数位的位数的有效数位。要在目的地中表示这个值,经常要求对有效数位进行精度舍入。IEEE 547标准规定四种舍入方式-舍入到最近的(RN)、舍入到零或曰斩断(RZ)、舍入到正无穷大(RP)和舍入到负无穷大(RM)。第一种方式的完成方法是,在中间点进行舍入,相持情况向上舍入,如果它使有效数位的最低位为零,则使之成为“偶的”。第二种方法有效地去除有效数位右边的任何位,总是舍去,由C、C++和Java语言在整数转换中使用。后两种方式用于区间运算。
有效数位(Significand)-二进制浮点数的分量,由隐含的二进制小数点左边的显式或隐式前导位和右边的尾数字段组成。
支持程序码(Support Code)-为提供与IEEE 754标准的兼容而补充硬件所必须使用的软件。支持程序码设计有两个组件:一个例程库,它执行超出硬件的范围的操作—诸如超越计算,以及被支持的功能—诸如用不受支持的输入或可能产生异常的输入进行除法;一个异常处理程序的集合,它为符合IEEE 754而处理异常条件。要求支持程序码执行补充的功能,以便仿真对不受支持的数据类型或数据表示(例如非正规值或十进制数据类型)的适当处理。可以编写例程来利用中间计算中的FPS一如果注意在例程的出口恢复用户的状态。
陷阱(Trap)-一个在FPSCR中设置了相应的异常允许位的例外条件。用户的陷阱处理程序将被执行。
未定义的-指出一条生成未定义的指令陷阱的指令。关于ARM异常的更详细信息,可参看ARM结构参考手册(ARM ArchitecturalReference Manual)。
不可预测的-不可靠的指令或控制寄存器字段值的结果。不可预测的指令或结果不得表示安全漏洞,或者停止或暂停处理器或系统的任何部分。
不受支持的数据-不被硬件处理、但弹回到支持程序码去完成的特定数据值。这些数据可包括无穷大、NaN、非正规值和零。具体实现可自由地选择这些值中的哪些将全部或部分地得到硬件上的支持,或者将要求支持程序码的辅助才能完成该操作。因处理不受支持的数据而产生的任何异常,都将被俘获到用户程序码—如果该异常的相应的异常允许位是置位的。
3.寄存器文件
3.1导言
该体系结构提供32个单精度和16个双精度寄存器,它们都是作为源或目的地操作数在整个定义的5位寄存器变址范围内可单个寻址的。
这32个单精度寄存器与这16个双精度寄存器是重叠的,就是说,向D5写入的一个双精度数据,将覆盖S10和S11的内容。编译程序或汇编语言程序员的工作就是要知道在重叠的实现中,寄存器使用在用寄存器来存储一个单精度数据与存储半个双精度数据之间的冲突。不提供硬件来保证寄存器的使用限于一种精度,如果违反了这一点,则结果就是不可预测的。
VFPv1提供在标量方式下或向量方式下对这些寄存器的访问。在标量方式下,用1个、2个或3个操作数寄存器来生成一个被写入目的地寄存器的结果;在向量方式下,所指定的操作数指的是一组寄存器。VFPv1支持在一条单精度操作数的指令中有多达8个元素的向量操作和一条双精度操作数的指令中有多达4个元素的向量操作。
表1 LEN(长度)位编码
    LEN     向量长度编码
    000     标量
    001     向量长度2
    010     向量长度3
    011     向量长度4
    100     向量长度5
    101     向量长度6
    110     向量长度7
    111     向量长度8
向量方式是通过向LEN字段写入非零值而被启动的。如果LEN字段含有0,FPS在标量方式下操作,寄存器字段被解释为对普通寄存器模型中的32个独立单精度寄存器或16个双精度寄存器寻址。如果LEN字段是非零的,FPS在向量方式下操作,寄存器字段被解释为对寄存器的向量寻址。参看表1中LEN字段的编码。
通过对目的地寄存器的说明,能得到一种不改变LEN字段而混合标量和向量操作的方法。在向量方式下如果目的地寄存器是在第一寄存器组(S0-S7或D0-D3)中,可以指定标量操作。更多的信息见节0。
3.2单精度寄存器的用法
如果FPSCR中的LEN字段是0,就有编号为S0至S31的32个单精度寄存器可用。任何一个寄存器都可以被用作源或目的地寄存器。
31             31                 31              31         0
  S0   S8   S16   S24
  S1   S9   S17   S25
  S2   S10   S18   S26
  S3   S11   S19   S27
  S4   S12   S20   S28
  S5   S13   S21   S29
  S6   S14   S22   S30
  S7   S15   S23   S31
图表1.单精度寄存器图
可以按图表1中所示的那样画出单精度(协处理器10)的寄存器图。
如果FPSCR中的LEN字段大于0,则该寄存器文件可以作为4个寄存器组,每组有8个循环寄存器,如图表2所示。第一组向量寄存器V0至V7与标量寄存器S0至S7重叠,根据为每个操作数选择的寄存器,按标量或向量来寻址。详情可参看节0,3.4寄存器的用法。
图表2.循环单精度寄存器
例如,如果FPSCR中的LEN字段被设置为3,引用向量V10将导致在向量操作中包含S10、S11、S12和S13。类似地,V22会在操作中涉及S22、S23、S16和S17。当在向量方式下访问寄存器文件时按顺序排在V7之后的是V0;类似地,V8在V15之后,V16在V23之后,V24在V31之后。
3.3双精度寄存器的用法
如果FPSCR中的LEN字段是0,则有16个双精度寄存器可用。63             0       63             0
 D0  D8
 D1  D9
 D2  D10
 D3  D11
 D4  D12
 D5  D13
 D6  D14
 D7  D15
图表3.双精度寄存器图
任何一个寄存器都可被用作源或目的地寄存器。可以按图表3中所示的那样画出寄存器图。
如果FPSCR中的LEN字段大于0,则有每组4个循环寄存器的4组中的4个标量寄存器和16个向量寄存器可用,如图表4所示。第一组向量寄存器V0至V3与标量寄存器S0至S3重叠。各寄存器是根据为每个操作数选择的寄存器,按标量或向量来寻址的。详情可参看节0,3.4寄存器的用法。
Figure C9980665900331
图表4.循环双精度寄存器
如节0中单精度例子中的一样,该4组内的双精度寄存器是循环的。
3.4寄存器的用法
支持标量和向量之间的3种操作:(OP2可以是浮点协处理器所支持的任何二操作数操作;OP3可以是任何三操作数操作。)
在以下说明中,将寄存器文件的“第一组”定义为单精度操作的寄存器S0-S7和双精度操作的D0-D3。
·标量D=OP2标量A或标量D=标量A OP3标量B或标量D=标量A*标量B+标量D
·向量D=OP2标量A或向量D=标量A OP3向量B或向量D=标量A*向量B+向量D
·向量D=OP2向量A或向量D=向量A OP3向量B或向量D=向量A*向量B+向量D
3.4.1标量操作
两种条件将导致FPS在标量方式下操作。
1?FPSCR中的LEN字段是0。目的地和源寄存器,对于单精度操作来说可以是标量寄存器0至31中的任何一个,对于双精度操作来说可以是寄存器0至15中的任何一个。仅对在指令中明确指定的寄存器进行操作。
目的地寄存器在寄存器文件的第一组中。源标量可以是任何其它寄存器。这个方式允许混合标量和向量操作而不必改变FPSCR中的LEN字段。
3.4.2涉及标量和向量源并以向量为目的地的操作
要在这个方式下操作,FPSCR中的LEN字段要大于零,并且目的地寄存器不在寄存器文件的第一组中。标量源寄存器可以是寄存器文件的第一组中的任何寄存器,其余的任何寄存器可用作向量B。注意,如果源向量寄存器是向量B的成员,或者向量D与向量B重叠的元素数小于LEN,则操作结果是不可预测的;就是说,向量D和向量B必须或者是相同的向量或者所有的成员都完全不同。参看节0中的总结表。
3.4.3仅涉及向量数据的操作
要在这个方式下操作,FPSCR中的LEN字段要大于零,并且目的地向量寄存器不在寄存器文件的第一组中。向量A向量的各个元素与向量B中的相应元素组合后被写入向量D。寄存器文件的第一组以外的寄存器都可用于向量A,而所有向量都可用于向量B。如第二种情形中一样,如果源向量与目的地向量重叠的元素数小于LEN,则操作结果是不可预测的。它们必须或者是相同的或者所有的成员都完全不同。参看节0中的总结表。
注意,对于FMAC系列的操作来说,目的地寄存器或向量总是累加寄存器或向量。
3.4.4.操作总结表
以下各表表示单和双精度2个和3个操作数指令的寄存器使用选择。“任何”指的是对指定的操作数来说可使用该精度的所有寄存器。
                 表2.单精度3操作数寄存器的用法
LEN字段 目的地寄存器 第一源寄存器 第二源寄存器 运算类型
0 任何 任何 任何 S=SopS或S=S*S+S
非-0 0-7 任何 任何 S=SopS或S=S*S+S
非-0 8-31 0-7 任何 V=SopV或V=S*V+V
非-0 8-31 8-31 任何 V=VopV或V=V*V+V
        表3.单精度2操作数寄存器的用法。
LEN字段 目的地寄存器 源寄存器     运算类型
0 任何 任何     S=opS
非-0 0-7 任何     S=opS
非-0 8-31 0-7     V=opS
非-0 8-31 8-31     V=opV
               表4.双精度3操作数寄存器的用法
LEN字段 目的地寄存器 第一源寄存器 第二源寄存器 运算类型
0 任何 任何 任何 S=SopS或S=S*S+S
非-0 0-3 任何 任何 S=SopS或S=S*S+S
非-0 4-15 0-3 任何 V=SopV或V=S*V+V
非-0 4-15 4-15 任何 V=VopV或V=V*V+V
         表5.双精度2操作数寄存器的用法。
LEN字段 目的地寄存器 源寄存器 运算类型
0 任何 任何 S=opS
非-0 0-3 任何 S=opS
非-0 4-15 0-3 V=opS
非-0 4-15 4-15 V=opV
4.指令集
FPS指令可划分成三个类别:
·MCR和MRC-ARM与FPS之间的传送操作
·LDC和STC-FPS与存储器之间的加载和存储操作
·CDP-数据处理操作
4.1指令并发性
FPS结构规范的目的是在两个层次上的并发性:流水线式功能单元和与CDP功能并行的加载/存储操作。通过支持与当前处理操作没有寄存器相关关系的加载和存储操作与这些操作并行执行,能获得显著的性能增益。
4.2指令串行化
FPS指定一条指令使FPS忙-等待ARM,一直到所有当前执行的指令都完成并且每个的异常状态都已知。如果有异常等待处理,在ARM中,串行化指令将被中止,异常处理将开始。FPS中的串行化指令是:
·FMOVX-读或写一个浮点系统寄存器
对浮点系统寄存器的任何读或写将被停止,直到当前指令完成。对系统ID寄存器(FPSID)的FMOCX将触发一个由在先的浮点指令引起的异常。(用FMOVX)对用户状态与控制寄存器(FPSCR)进行读/修改/写,可用来清除异常状态位(FPSCR[4:0])。
4.3涉及整数数据的转换
在FPS中,浮点与整数数据之间的转换是一个两个步骤的过程,由一条涉及整数数据的数据传送指令和一条进行转换的CDP指令组成。如果试图对FPS寄存器中整数格式的整数数据进行算术运算,结果将是不可预测的,应当避免任何这种操作。
4.3.1FPS寄存器中整数数据向浮点数据的转换
整数数据可以用MCR FMOVS指令从任何ARM寄存器加载到浮点单精度寄存器中。然后可以用整-到-浮系列的运算将FPS寄存器中的整数数据转换成一个单精度或双精度数据值,并写入一个目的地FPS寄存器。如果不再需要该整数值,则目的地寄存器可以就是源寄存器。该整数可以是一个带符合的或无符合的32位量。
4.3.2FPS寄存器中的浮点数据向整数数据的转换
FPS单精度或双精度寄存器中的值,可以用浮-到-整系列的指令转换成带符合的或无符合的32位整数格式。生成的整数被放置在目的地单精度寄存器中。可以用MRC FMOVS指令将整数数据存储到ARM寄存器。
4.4寄存器文件寻址
在单精度空间(S=0)中操作的指令将指令字段中可用的5位来存取操作数。高4位包含在标记为Fn、Fm或Fd的操作数字段中;地址的最低有效位分别在N、M或D中。
在双精度空间(S=1)中操作的指令将只使用操作数地址的高4位。这4位包含在Fn、Fm和Fd字段中。N、M和D位在对应操作数字段含有操作数地址时必定含有0。
4.5MCR(从ARM寄存器转移到协处理器)
MCR操作涉及FPS对ARM寄存器中的数据的传送或使用。这包括将单精度格式的数据从一个ARM寄存器或将双精度格式的数据从一对ARM寄存器转移到一个FPS寄存器,将一个带符号或无符号整数值从ARM寄存器加载到单精度FPS寄存器,用ARM寄存器的内容加载一个控制寄存器。
MCR指令的格式在图表5中给出。
31  28    27    24     23       21     20      19   16     15   12     11    8     7      6    5      4   3    0
 COND 1110 操作码 0  Fn  Rd  101S  N  R  R  1 保留
                          图表5    MCR指令格式
                          表6.MCR位字段定义
位字段      定义
操作码 3位操作码(见表7)
Rd ARM源寄存器编码
S 操作操作数大小。0-单精度操作数1-双精度操作数
N 单精度操作:目的地寄存器最低位双精度操作:必须设置成0,不然该操作就是未定义的系统寄存器转移保留
Fn 单精度操作:目的地寄存器地址高4位双精度操作:目的地寄存器地址系统寄存器转移:0000-FPID(协处理器ID号)0001-FPSCR(用户状态与控制寄存器)
0100·FPREG(寄存器文件内容寄存器)其它寄存器编码是保留的,可以因各种实现而不同
R 保留位
                  表7 MCR操作码字段定义
操作码字段  名称 操作
000  FMOVS Fn=Rd(32位,协处理器10)
000  FMOVLD 低(Fn)=双精度低32位,协处理器11)
001  FMOVHD 低(Fn)=双精度高32位,协处理器11)
010-110  保留
111  FMOVX 系统寄存器=Rd(协处理器10空间)
注解:FMOV[S,HD,LD]指令只支持32位数据操作。FMOVS操作只移动ARM寄存器或单精度寄存器中的数据。为了从2个ARM寄存器传送一个双精度操作数,FMOVLD和FMOVHD将分别转移低半部分和高半部分。
4.6MRC(从协处理器/比较浮点寄存器转移到ARM寄存器)
MRC操作涉及将FPS寄存器中的数据传送到ARM寄存器。这包括将一个单精度值或将浮点值向整数转换的结果转移到一个ARM寄存器或者从一个双精度FPS寄存器转移到两个ARM寄存器,然后用前一次浮点比较操作的结果修改CPSR的状态位。
MRC指令的格式在图表6中给出。
31    28     27     24     23      21    20      19   16     15     12     11   8     7    6      5     4   3    0
 COND  1110 操作码 1  Fn  Rd  101S  N  R  M  1 保留
      图表6  MRC指令格式
       表8.MRC位字段定义
     位字段 定义
    操作码 3位FPS操作码(见表9)
    Rd ARM目的地·寄存器编码
    S 操作操作数大小。0-单精度操作数1-双精度操作数
    N 单精度操作:目的地寄存器最低位双精度操作:必须设置成0,不然该操作就是未定义的系统寄存器转移保留
    M 保留
    Fn 单精度操作:目的地寄存器地址高4位双精度操作:目的地寄存器地址系统寄存器转移:0000-FPID(协处理器ID号)0001-FPSCR(用户状态与控制寄存器)0100-FPSCR(寄存器文件内容寄存器)其它寄存器编码是保留的,可以因各种实现而不同
    Fm 保留
    R 保留
*对于FMOVX FPSCR指令,如果Rd字段含有R15(1111),则CPSR的高4位将被用生成的条件码更新。
              表9.MRC操作码字段定义
操作码字段 名称 操作
000 FMOVS Rd=Fn(32位,协处理器10)
000 FMOVLD Rd=低(Fn)Dn的低32位被传送。(双精度低32位,协处理器11)
001 FMOVHD Rd=高(Fn)Dn的高32位被传送。(双精度高32位,协处理器11)
010-110 保留
111 FMOVX Rd=系统寄存器
注解:参看对MCR FMOV指令的注解。
4.7 LDC/STC(加载/存储FPS寄存器)
LDC和STC操作在FPS与存储器之间传送数据。浮点数据可以以任一种精度在一次数据传送中或在多次数据传送中传送,ARM地址寄存器同时被更新或保持不变。支持满的下降堆栈和空的上升堆栈两种结构,以及在转移多操作中对数据结构的多操作数存取。参看表11对LDC和STC的各种选择的说明。
LDC和STC指令的格式在图表7中给出。
31  28      27    25       24      23      22      21      20      19    16     15    12     11  8         7       0
 COND     110     P     U     D     W     L     Rn     Fd   101S   偏移量/传送数
                        图表7 LDC/STC指令格式
                        表10.LDC/STC位字段定义
    位字段 定义
   P 前/后变址(0=后,1=前)
   U 上/下(0=下,1=上)
   D 单精度操作:源/目的地寄存器最低位双精度操作:必须设置成0
   W 写回位(0=不写回,1=写回)
   L 方向位(0=存储,1=加载)
   Rn  ARM基址寄存器编码
   Fd 单精度操作:源/目的地寄存器地址高4位双精度操作:源/目的地寄存器地址
   S 操作操作数大小。0-单精度操作数1-双精度操作数
   偏移量/传送数 无符号的8位偏移量或者FLDM(IA/DB)和FSTM(IA/DB)要传送的单精度寄存器的数目(双
倍于双精度寄存器的数目)。一次传送的最多字数是16,允许16个单精度值或8个双精度值。
4.7.1对加载和存储操作的通用注解
加载和存储多个寄存器将通过寄存器文件而线性地进行,而无需像向量操作所使用的那样跨4个或8个边界回绕。对超过寄存器文件的结尾的加载的试图是不可预测的。
如果某双加载或存储多个(store multiple)的偏移量含有奇数的寄存器数17或更少,具体实现可以写另一个32位数据项或者读另一个32位数据项,但不要求这样做。这额外的数据项可被用来在寄存器被加载或存储时标识寄存器的内容。这在其中对该精度来说寄存器文件格式不同于IEEE 754格式并且每个寄存器有要求在存储器中标识其的类型信息的实现中是有用的。如果偏移量是奇数的并且数目大于单精度寄存器的数目,这可被用来启动这些寄存器和所有系统寄存器的上下文切换。
                  表11.加载和存储寻址方式选择
P  W 偏移量/传送数 寻址方式 名称
类型0传送:加载/存储多个,无写回
0  0 要传送的寄存器的数目 FLDM<条件><S/D>Rn.<寄存器列表>FSTM<条件><S/D>Rn.<寄存器列表> 加载/存储多个
加载/存储多个寄存器从Rn中的起始地址开始,Rn无改变。对单精度来说,寄存器数可以是1至16;对双精度来说,寄存器数可以是1至8.偏移量字段含有32位传送的数目。这个方式可被用来加载图形操作的一个变换矩阵和该变换的一个点。
例子:FLDMEQSr12.{f8-f11};加载从r12中的地址的4个单精度值到4个fp寄存器S8、S9、S10和S11,r12不变FSTMEQDr4.{f0};从d0存储一个双精度值到r4中的地址,r4不变
类型1传送:加载/存储多个,带Rn的后变址和写回
0  1 要传送的寄存器的数目 FLDM<条件>IA<S/D>Rn!,<寄存器列表>FSTM<条件>IA<S/D>Rn!,<寄存器列表> 加载/存储多个
加载/存储多个寄存器从Rn中的起始地址开始,在最后一次传送后将下一个地址写回到Rn。偏移量字段是32位传送的数目。写回到Rn是偏移量*4。在一个加载多个中传输的最多字数是16。U位必须设置成1。这被用于存入一个空的上升堆栈或从一个满的下降堆栈加载,或存储一个变换点并将指针递增到下一个点;并且用于在滤波器操作中加载和存储多个数据。
例子:FLDMEQIASr13!{f12-f15};加载从r13中的地址的4个单精度值到4个fp寄存器S12、S13、S14和S15,用指向系列中的下一个数据的地址更新r13.
类型2传送:加载/存储一个寄存器,有前变址或Rn和写回
1  0 偏移量 FLD<条件><S/D>[Rn.#+/-偏移量],FdFST<条件><S/D>[Rn.#+/-偏移量],Fd 具有偏移量的加载/存储
加载/存储单一寄存器,Rn中的地址提前递增,无写回。偏移量值是偏移量*4,Rn加上(U=1)或减去(U=0)偏移量后生成地址。这对于某结构中的操作数存取是有用的,对浮点数据来说是用来访问存储器的典型方法。
例子:FSTEQDf4.[r8.#+8}f12-f15];从r8加32(8*4)个字节偏移量的地址存储一个双精度值到d4,r8不变。
类型3传送:加载/存储多个寄存器,有前变址和写回
1  1 要传送的寄存器的数目 FLDM<条件>DB<S/D>Rn!,<寄存器列表>FSTM<条件>DB<S/D>Rn!,<寄存器列表> 先递减的加载/存储多个
加载/存储多个寄存器,Rn中的地址先递减,新的目标地址写回到Rn。偏移量字段含有32位传送的数目。写回值是Rn减去(U=0)偏移量*4。这个方式被用于向一个满下降堆栈存储或者从一个空上升堆栈加载。
例子:FSTMEQDBSr9!{f27-f29};存储来自S27、S28和S29的3个单精度值到一个满下降堆栈,最后一项的地址包含在r9中。r9被更新,指向新的最后一项。
4.7.2LDC/STC操作总结
表12列举了LDC/STC操作码中P、W和U位的允许组合和每个有效操作的偏移量字段的功能。
                      表12 LDC/STC操作总结
    P     W     U     偏移量字段     操作
    0     0     0     未定义的
    0     0     1     寄存器计数     FLDM/FSTM
    0     1     0     未定义的
    0     1     1     寄存器计数     FLDMIA/FSTMIA
    1     0     0     偏移量     FLD/FST
    1     0     1     偏移量     FLD/FST
    1     1     0   寄存器计数     FLDMDB/FSTMDB
    1     1     1     未定义的
4.8 CDP(协处理器数据处理)
CDP指令包括涉及来自浮点寄存器文件的操作数,并生成将要写回到该寄存器文件的结果的所有数据处理操作。特别值得注意的是FMAC(链接的乘法-累加)操作,该操作将两个操作数相乘后加上第3个操作数。该操作与合并的乘法-累加操作的不同在于,在加上第3操作数之前,要对积进行IEEE舍入操作。这使得Java程序码能使用FMAC操作,与分别先乘后加的操作相比,提高乘法-累加操作的速度。
CDP组中有两条指令在将FPS寄存器中的浮点值向其整数值转换是是有用的。FFTOUI[S/D]用FPSCR中当前的舍入方式将单精度或双精度的内容转换成FPS寄存器中的无符号整数。FFTOSI[S/D]进行向带符号整数的转换。FFTOUIZ[S/D]和FFTOSIZ[S/D]执行相同的功能,但不考虑转换的FPSCR舍入方式,而是截去任何小数位。C、C++和Java要用FFTOSIZ[S/D]的功能来进行浮点到整数的转换。FFTOSIZ[S/D]指令提供这个功能,而不要求为转换而将FPSCR中的舍入方式位调整为RZ,这就将转换所需的周期数减到仅是FFTOSIZ[S/D]操作的周期数,节省了4至6个周期。
比较操作的执行,要使用CDP CMP指令,其后是MRC FMOVX FPSCR指令,它用生成的FPS标志位(FPSCR[31:28])加载ARM CPSR标志位。如果比较操作数之一是NaN,也提供比较操作,而可有可无无效(INVALID)异常。如果比较操作数之一是NaN,FCMP和FCMP0将不发出INVALID信号,而FCMPE和FCME0则要发出异常信号。FCMP0和FCMPE0将Fm字段中的操作数与0比较,相应地设置FPS标志。ARM标志N、Z、C和V在FMOVX FPSCR之后的含义有如下定义:
N    小于
Z    等于
C    大于或等于或无序
V    无序
CDP指令的格式在图表8中给出。
31   28   27              24    23    22    21    20    19   16     15   12  11            8  7   6      5  4  3.0
 COND  1  1  1  D  Op  D  Op  Op  Fn  Fd  1  0  1  S N Op  M  O  Fm
       图表8  CDP指令格式
       表13.CDP位字段定义
位字段 定义
操作码 4位FPS操作码(见表14)
D 单精度操作:源/目的地寄存器最低位双精度操作:必须设置成0
Fn 单精度操作:源A寄存器高4位或者扩展操作码最高有效4位双精度操作:源A寄存器地址高4位或者扩展操作码最高有效4位
Fd 单精度操作:目的地寄存器高4位双精度操作:目的地寄存器地址
S 操作操作数大小。0-单精度操作数1-双精度操作数
N 单精度操作:
源A寄存器最低位扩展操作码最低位双精度操作:必须设置成0扩展操作码最低位
M 单精度操作:源B寄存器最低位双精度操作:必须设置成O
Fm 单精度操作:源B寄存器高4位双精度操作:源B寄存器地址
4.8.1操作码
表14列举了CDP指令的主要操作码。所有助记符的格式均为[0PERATION][COND][S/D]
                        表14.CDP操作码说明
  操作码字段   操作名称   操作
  0000   FMAC   Fd=Fn*Fm+Fd
  0001   FNMAC   Fd=-(Fn*Fm+Fd)
  0010   FMSC   Fd=Fn*Fm-Fd
  0011   FNMSC   Fd=-(Fn*Fm-Fd)
  0100   FMUL   Fd=Fn*Fm
  0101   FNMUL   Fd=-(Fn*Fm)
  0110   FSUB   Fd=Fn-Fm
  0111   FNSUB   Fd=-(Fn-Fm)
  1000   FADD   Fd=Fn+Fm
  1001-1011   保留
  1100   FDIV   Fd=Fn/Fm
  1101   FRDIV   Fd=Fm/Fn
  1110   FRMD   Fd=Fn%Fm(Fd=Fn/Fm后留下的小数
    1111   扩展   用Fn寄存器文件指定2个操作数的操作(见表15)
4.8.2扩展的操作
表15列举了可以用操作码字段中的扩展值使用的扩展操作。除串行化和FLSCB指令外,所有助记符的格式均为[OPERATION][COND][S/D]。扩展操作的指令编码的方法,与Fn操作数的寄存器文件内变址的方法相同,即{Fn[3:0],N}。
                      表15.CDP扩展操作
     Fn|N      名称   操作
    00000     FCPY  Fd=Fm
    00001     FABS  Fd=abs(Fm)
    00010     FNEG  Fd=Fm
    00011     FSQRT  Fd=sqrt(Fm)
    00100-000111     保留
    01000     FCMP* 标志:=Fd<=>Fm
    01001     FCMPE* 标志:=Fd<=>Fm,带异常报告
    01010     FCMP0* 标志:=Fd<=>0
    01011     FCMPE0* 标志:=Fd<=>0,带异常报告
    01100-01110     保留
    01111  FCVTD<cond>S* Fd(双精度寄存器编码)=单精度向双精度转换的Fm(单精度寄存器编码)。(协处理器10)
    01111  FCVTS<cond>D* Fd(单精度寄存器编码)=双精度向单精度转换的Fm(双精度寄存器编码)。(协处理器11)
    10000     FUITO* Fd=ConvertUnsignedIntToSing1e/Double(Fm)(Fd=转换无符号整数至单/双(Fm))
    10001     FSITO* Fd=ConvertSignedIntToSingle/Double(Fm)
(Fd=转换带符号整数至单/双(Fm))
    10010-10111     保留
    11000     FFTOUI* Fd=ConvertToUnsignedInteger(Fm){current RMODE}(Fd=转换至无符号整数(Fm){当前舍入方式})
    11001     FFTOUIZ* Fd=ConvertToUnsignedInteger(Fm){RZ mode}(Fd=转换至无符号整数(Fm){RZ方式})
    11010     FFTOSI* Fd=ConvertToSignedInteger(Fm){current RMODE}(Fd=转换至带符号整数(Fm){当前舍入方式})
    11011     FFTOSIZ* Fd=ConvertToSignedInteger(Fm){RZ mode}(Fd=转换至带符号整数(Fm)(RZ方式)
    11100-11111     保留
*非可向量化的操作。忽略LEN字段,对指定寄存器进行标量操作。
5.系统寄存器
FPSID含有FPS结构和实现定义的标识值。该字可被用来确定FPS的型号特征集和修订以及屏蔽集号。FPSID是只读的,对FPSID写数据是无效的。参看图表9中FPSID寄存器的布局。
31              24           23                  16      15                                4    3         0
实现者 结构版本 零件号 修订
            图表9.  FPSID寄存器编码
5.2 用户状态与控制寄存器(FPSCR)
FPSCR寄存器含有用户可访问的配置位和异常状态位。配置选择包括异常允许位、舍入控制、向量跨距和长度、非正规操作数和结果的处理、调试方式的使用。该寄存器供用户和操作系统代码配置FPS和查询已完成操作的状态。它必须在上下文切换期间保存和恢复。位31至28含有最近一条比较指令产生的标志值,可以通过读FPSCR来访问。图表10中展示了FPSCR。
31    30     29     28      27      26     25     24     23            22      21          20       19     18  16
 N  Z  C  V  R  R  R  FZ 取整方式 跨距 R 长度
15     14     13   12      11     10      9       8        7     6     5         4        3       2       1       0
保留 IXE  UFE  OFE  DZE  IOE 保留 IXC  UFC  OFC  DZC  IOC
图表10.用户状态与控制寄存器(FPSCR)
5.2.1比较状态和处理控制字节
位31至28含有最近一次比较操作的结果,一些控制位用于规定特殊情况中FPS的算术响应。图表11给出了比较状态和处理控制字节的格式。
31    30        29       28       27        26        25        24
 N  Z  C  V  R  R  R  FZ
图表11.FPSCR比较状态和处理控制字节的格式
表16.FPSCR比较状态和处理控制字节的字段定义
寄存器位   名称 功能
31  N 比较结果小于
30  Z 比较结果等于
29  C 比较结果大于或等于或无序
28  V 比较结果无序
27:25  保留
24  FZ 清零0:IEEE 754下溢处理(缺省的)1:将微小结果清零如果结果小于目的地精度决定的正常范围,将向目的地写入一个零。不采取下溢异常陷阱。
5.2.2系统控制字节
系统控制字节控制舍入方式、向量跨距和向量长度字段。对各位的规定如图表12中所示。
VFPv1结构中包括一种寄存器文件跨距机制用于向量操作。如果跨距(STRIDE)位被设置为00,则向量操作中选择的下一个寄存器将是寄存器文件中紧接前一个寄存器之后的寄存器。正常的寄存器文件回绕机制不受跨距值的影响。跨距值11将使所有输入寄存器和输出寄存器递增2。例如,
FMULEQS F8,F16,F24
将执行下列非向量操作:
FMULEQS F8,F16,F24
FMULEQS F10,F18,F26
FMULEQS F12,F20,F28
FMULEQS F14,F22,F30
有效地使寄存器文件中表示乘数的操作数的寄存器跨越2个而不是1个寄存器。
23                       22     21         20     19              18         16
舍入方式 跨距 R 长度
                  图表12.FPSCR系统控制字节
                  表17.FPSCR系统控制字节的字段定义
     寄存器位 名称 功能
    23:22 舍入方式 设置舍入方式00:RN(舍入至最接近的;缺省设置)01:RP(舍入趋正无穷大)10:RP(舍入趋负无穷大)11:RZ(舍入至零)
    21:20 跨距 设置向量寄存器存取至:00:1(缺省设置)01:保留10:保留11:2
    19 保留(R)
  18:16   长度 向量长度,规定向量操作的长度。(并非在每个实现中都能使用所有编码。)000:1(缺省值)001:2010:3011:4100:5101:6110:7111:8
5.2.3异常允许字节
异常允许字节占据位15:8,含有对异常陷阱的允许。对这些位的规定如图表13中所示。这些异常允许位符合IEEE 754规范对处理浮点异常条件的要求。如果该位被置位,则该异常是允许的,如果当前指令上发生异常条件,FPS将向操作系统发出一个用户可见的陷阱信号。如果该位被清零,则该异常是不允许的,如果发生异常条件,FPS将不向操作系统发出用户可见的陷阱信号,但是将生成一个数学上合理的结果。异常允许位的缺省状态是不允许的。关于异常处理的详细内容请参看IEEE 754标准。
有些实现将生成一个向支持程序码的弹回,以便处理超出硬件能力的异常条件,即使异常不被允许时也是如此。这一般将是用户程序码不可见的。
15          14           13        12        11        10        9        8
保留 IXE  UFE  OFE  DZE  IOE
                     图表13.FPSCR异常允许字节
                     表18FPSCR异常允许字节字段
寄存器位 名称 功能
15:13 保留
12 IXE 不精确允许位0:禁止(缺省)1:允许
  11   UFE   下溢允许位0:禁止(缺省)1:允许
  10   OFE   上溢允许位0:禁止(缺省)1:允许
  9   DZE   除以零允许位0:禁止(缺省)1:允许
  8   IOE   无效操作数允许位0:禁止(缺省)1:允许
5.2.4异常状态字节
异常状态字节占据FPSCR的位7:0,含有异常状态标志位。有5个异常状态标志位,每个对应一种浮点异常。这些位是“粘性的”,它们一旦被检测到的异常设置后,必须通过FMOVX向FPSCR的写或者FSERIALCL指令才能清除。对这些位的规定如图表14中所示。如果发生一个允许的异常,对应的异常状态位将不是自动设置的。按需要设置适当的异常状态位,是支持程序码的任务。有些异常可能是自动的,即,如果检测到异常条件,FPS将在后继浮点指令上弹回,而不管异常允许位是如何设置的。这就允许将IEEE 754标准所要求的一些更复杂的异常处理以软件而不是硬件来执行。一个例子是FZ位被设置为0时发生下溢条件。在这种情况下,正确的结果可能是一个取决于该结果的指数和舍入方式的非正规化数。FPS允许实现者选择响应,包括选择弹回并用支持程序码来生成正确的结果和将该值写到目的地寄存器。如果下溢异常允许位是置位的,用户的陷阱处理程序将在支持程序码完成操作后被调用。这个程序码可以改变FPS的状态并返回或停止该进程。
   FPREG位   位设置     位清除
   C0   D0有效     S1和S0有效或未初始化
   Cl   D1有效     S3和S2有效或未初始化
   C2   D2有效     S5和S4有效或未初始化
   C3   D3有效     S7和S6有效或未初始化
   C4   D4有效     S9和S8有效或未初始化
   C5   D5有效     S11和S10有效或未初始化
   C6   D6有效     S13和S12有效或未初始化
   C7   D7有效     S15和S14有效或未初始化
   C8   D8有效     S17和S16有效或未初始化
   C9   D9有效     S19和S18有效或未初始化
   C10   D10有效     S21和S20有效或未初始化
   C11   D11有效     S23和S22有效或未初始化
   C12   D12有效     S25和S24有效或未初始化
   C13   D13有效     S27和S26有效或未初始化
   C14   D14有效     S29和S28有效或未初始化
   C15   D15有效     S31和S30有效或未初始化
6.异常处理
FPS在调试方式和正常方式这两种方式之一下操作。如果在FPSCR中DM位被置位,FPS在调试方式下操作。在这个方式中,FPS一次执行一条指令,与此同时,让ARM一直等待到知道该指令的异常状态。这将保障寄存器文件和存储器针对指令流保持准确,但要以大量增加执行时间为代价。FPS将在资源情况允许时从ARM接受新指令,当检测到异常条件时发出异常信号。对ARM的异常报告将总是针对浮点指令流保持准确,除非是跟在向量操作之后的与向量操作并行执行的加载或存储操作。在这种情况下,加载操作的寄存器文件的内容或者存储操作的存储器可以是不准确的。
6.1支持程序码
FPS的实现可以选择符合IEEE 754的硬件与软件支持的组合。对于不受支持的数据类型和自动异常,支持程序码将执行一致性硬件的功能,适当时将结果返回到目的地寄存器并在不调用用户的陷阱处理程序或者修改用户程序码的流的情况下返回给用户的程序码。在用户看来,只有硬件在负责浮点程序码的处理。弹回到支持程序码去处理这些特征功能,显著增加执行或处理该特征功能的时间,但这些情形在用户程序码、内置应用程序或编写良好的数字应用程序中一般极少发生。
支持程序码设计有两个组件:一个例程库,它执行超出硬件的范围的操作—诸如超越计算,以及被支持的功能—诸如用不受支持的输入或可能产生异常的输入进行除法;一个异常处理程序的集合,它为符合IEEE 754而处理异常陷阱。要求支持程序码执行补充的功能,以便仿真对不受支持的数据类型或数据表示(例如非正规值)的适当处理。可以编写例程来利用中间计算中的FPS—如果注意在例程的出口恢复用户的状态。
6.2异常报告和处理
在标准方式中,异常将在异常条件被检测到后下一个浮点指令被发出时被报告给ARM。ARM处理器的状态、FPS寄存器文件和存储器在异常被捕获时,相对于引起异常的指令来说可能并不准确。支持程序码有足够的信息可用来正确地仿真该指令并处理该指令产生的任何异常。
在有些实现中,支持程序码可被用来处理一些或所有带包括无穷大、NaN、非正规数据和零的特殊IEEE 754数据的操作。这样做的实现,将按不受支持的数据来引用这些数据,并以一般为用户程序码不可见的方式弹回到支持程序码,并以在目的地寄存器中的IEEE 754规定的结果返回。从操作得出的任何异常都遵守IEEE 754异常规则。这可包括如果相应的异常允许位置位时陷入到用户程序码。
IEEE 754标准针对FPSCR中异常允许和禁止两种情况定义对异常条件的响应。VFPv1结构不规定为适当地符合IEEE 754规范而使用的硬件与软件之间的界线。
6.2.1不受支持的操作和格式
FPS不支持任何带十进制数据或者向十进制数据转换或从十进制数据转换的操作。这些操作是IEEE 754标准所要求的,必须由支持程序码提供。如果要使用十进制数据,就要要求库例程来完成所需的功能。FPS没有十进制数据类型,不能被用来捕获使用十进制数据的指令。
6.2.1FPS被禁止或异常时FMOVX的使用
在SUPERVISOR(管理器)或UNDEFINED(未定义)方式下执行的FMOVX指令,可以在FPS处于异常状态或被禁止(如果该实现支持禁止选择的话)时,读和写FPSCR或者读FPSID或FPREG,而不会引起向ARM发出异常信号。
尽管讨论了本发明的一些特定的实施例,显然本发明并不局限于此,在本发明的范围内可以进行许多修改和增补。例如,可以将后文的从属权利要求的特征与独立权利要求的特征作出各种组合,而不偏离本发明的范围。

Claims (25)

1.一种用于处理数据的装置,该装置包含:
一个有多个寄存器的寄存器组(38),其中每个寄存器可进行操作用作向量或标量寄存器;和
一个用于译码数据处理指令的指令解码器(42、48、50),至少一条所述数据处理指令有至少一个定义要执行的操作的操作指定码(OP)和一个指定所述寄存器组内的一个第一寄存器的第一寄存器指定字段(R1);其中
所述指令解码器可进行操作用一个给定的寄存器(S0-S31,D01-D15)作为标量寄存器或向量寄存器来执行操作,以所述给定寄存器作为标量寄存器的执行,包含对存储在所述给定寄存器的一个操作数执行一次所述操作,以所述给定寄存器作为向量寄存器的执行,包含对存储在依赖所述给定寄存器的一个寄存器指定字段而选择的所述寄存器组的寄存器的一个预定序列中的操作数执行多次所述操作;和
所述指令解码器响应所述第一寄存器指定字段(R1)并独立于所述操作指定码,确定要将所述第一寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
2.如权利要求1中所要求的装置,其中
所述的至少一个所述数据处理指令有一个指定一个第二寄存器的第二寄存器指定字段(R2);
所述指令解码器用所述第二寄存器作为标量寄存器或向量寄存器来执行所述操作;和
所述指令解码器响应所述第一寄存器指定字段(R1),确定要将所述第二寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
3.如权利要求2中所要求的装置,其中,当所述第一寄存器是标量寄存器时,所述第二寄存器是标量寄存器,并且当所述第一寄存器是向量寄存器时,所述第二寄存器是向量寄存器。
4.如权利要求2或3的任意一项中所要求的装置,其中
所述至少一个数据处理指令有一个指定一个第三寄存器的第三寄存器指定字段(R3);
所述指令解码器用所述第三寄存器作为标量寄存器或向量寄存器来执行所述操作;和
所述指令解码器响应所述第二寄存器指定字段,确定要将所述第三寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
5.如权利要求1中所要求的装置,其中,所述的操作指定码有对应于非交换性运算的非交换性码值,至少成对地提供一些对应于相同的运算但具有相反的操作数顺序的所述非交换性码值。
6.如权利要求1中所要求的装置,包含一个向量控制寄存器(46),它存储着一个规定在所述给定寄存器是个向量寄存器时在要重复所述操作的所述预定寄存器序列中的寄存器的数目的长度值,所述长度值适用于所述数据处理指令中使用的所有向量寄存器。
7.如权利要求6中要求的装置,其中,所述指令解码器检测所述规定所述预定序列中的所述寄存器数目的长度值是否是用来提供在所述数据处理指令中使用的所有寄存器都是标量寄存器的指示。
8.如权利要求6和7的任意一项中所要求的装置,其中,所述向量控制寄存器(46)存储一个规定在所述预定寄存器序列的所述寄存器之间的寄存器号的增量的跨距值,所述跨距值适用于所述数据处理指令中使用的所有向量寄存器。
9.如权利要求6和7的任意一项中所要求的装置,其中,当所述第一寄存器指定字段在一个第一N个值的范围内时,所述第一寄存器是个向量寄存器;当所述第一寄存器值在一个与所述第一N个值的范围不同的第二M个值范围内时,所述第一寄存器是个向量寄存器。
10.如权利要求9中所要求的装置,其中,M>N。
11.如权利要求10中所要求的装置,其中,M=3*N。
12.如权利要求4中所要求的装置,其中,当所述第二寄存器指定字段在一个第一P个值的范围内时,所述第三寄存器是个向量寄存器;当所述第二寄存器值在一个与所述第一P个值的范围不同的第二Q个值范围内时,所述第三寄存器是个向量寄存器。
13.如权利要求12中所要求的装置,其中,P>Q。
14.如权利要求13中所要求的装置,其中,P=3*Q。
15.如权利要求1中所要求的装置,包含一个存储器和一个用于控制所述存储器与所述寄存器组内寄存器之间数据值的传送的加载存储控制单元,所述加载存储控制单元响应多个传送指令,在所述存储器与所述寄存器组内的一系列寄存器之间传送一系列数据值。
16.如权利要求1中所要求的装置,其中,所述寄存器组和所述指令解码器是一个浮点单元的一部分。
17.如权利要求16中所要求的装置,其中所述浮点单元包含一个用于执行乘法-累加运算的乘法-累加单元。
18.如权利要求1中所要求的装置,其中,将所述操作的结果写到起目的地寄存器作用的所述第一寄存器。
19.如权利要求2中所要求的装置,其中,所述第二寄存器作为存储所述操作的一个第一输入操作数的第一操作数寄存器。
20.如权利要求4中所要求的装置,其中,所述第三寄存器作为存储所述操作的一个第二输入操作数的第二操作数寄存器。
21.如权利要求1中所要求的装置,其中,所述寄存器组包含32个寄存器。
22.如权利要求1中所要求的装置,其中,所述寄存器可以个别地操作和被控制,以存储一个单精度值,或者成对地操作和被控制,以存储一个双精度值。
23.如权利要求1中所要求的装置,其中,所述给定寄存器指定字段在要用所述给定寄存器作为向量寄存器来执行所述操作时规定所述预定寄存器序列内的一个起始寄存器。
24.如权利要求1中所要求的装置,其中,所述指令解码器响应至少一个另外的数据处理指令,该指令中的一个操作指定码定义所述指令中指定的所述给定寄存器是一个向量寄存器还是一个标量寄存器,而与任何寄存器指定字段无关。
25.一种处理数据的方法,该方法包含的步骤是:
在一个有多个寄存器的寄存器组中存储数据值,其中每个寄存器可进行操作用作向量或标量寄存器;
用一个指令解码器译码数据处理指令,至少一条所述数据处理指令有至少一个指定要执行的操作的操作指定码和一个指定所述寄存器组内的一个第一寄存器的第一寄存器指定字段;其中
所述指令解码器用一个给定的寄存器作为标量寄存器或向量寄存器来执行操作,以所述给定寄存器作为标量寄存器的执行,包含对存储在所述给定寄存器的一个操作数执行一次所述操作,以所述给定寄存器作为向量寄存器的执行,包含对存储在依赖所述给定寄存器的一个寄存器指定字段而选择的所述寄存器组的一个预定的寄存器序列中的操作数执行多次所述操作;和
所述指令解码器响应所述第一寄存器指定字段并独立于所述操作指定码,确定要将所述第一寄存器作为向量寄存器还是标量寄存器用来执行所述操作。
CNB998066591A 1998-05-27 1999-03-09 处理数据的装置和方法 Expired - Lifetime CN1191535C (zh)

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
CN1303501A CN1303501A (zh) 2001-07-11
CN1191535C true CN1191535C (zh) 2005-03-02

Family

ID=22184104

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB998066591A Expired - Lifetime CN1191535C (zh) 1998-05-27 1999-03-09 处理数据的装置和方法

Country Status (11)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216756B (zh) * 2007-12-28 2011-03-23 中国科学院计算技术研究所 一种risc处理器装置及其模拟浮点栈操作的方法

Families Citing this family (143)

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

Family Cites Families (32)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216756B (zh) * 2007-12-28 2011-03-23 中国科学院计算技术研究所 一种risc处理器装置及其模拟浮点栈操作的方法

Also Published As

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

Similar Documents

Publication Publication Date Title
CN1191535C (zh) 处理数据的装置和方法
CN1154947C (zh) 处理数据的方法和装置
CN1103961C (zh) 协处理器的数据访问控制装置和方法
CN1112635C (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1194292C (zh) 具有改良的指令集体系结构的微处理器
CN1117316C (zh) 采用多个向量寄存器组的单指令多数据处理方法及其装置
CN1264089C (zh) 编译设备和编译方法
CN1153129C (zh) 用于处理器定制操作的设备
CN1656495A (zh) 标量/矢量处理器
CN1135468C (zh) 对存储设备中信号数据字执行数字信号处理的方法和装置
CN1260646C (zh) 附有第二预测装置的假想分支目标地址高速缓存
CN1284095C (zh) 多处理器系统中的任务分配方法和多处理器系统
CN1225688C (zh) 在分组数据上操作的指令集
CN1217262C (zh) 假想分支目标地址高速缓存中置换目标地址的装置及方法
CN1472646A (zh) 适应性强具备最佳化功能的编译装置
CN1886744A (zh) 在可扩展的处理器架构中增加高级指令所用的方法和装置
CN1497435A (zh) 处理器
CN1523495A (zh) 高效执行特长指令字的处理器
CN1688966A (zh) 包括对准或者广播指令的多媒体协处理器控制机制
CN1684058A (zh) 处理器
CN1795434A (zh) 程序执行控制设备,程序执行控制方法,控制程序和记录介质
CN1103959C (zh) 数据处理装置和操作数据处理装置的方法
CN1269052C (zh) 支持缩小代码长度的常量还原型处理器
CN1279435C (zh) 数字信号处理器
CN1254740C (zh) 使用协处理器的数据处理

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20050302

CX01 Expiry of patent term