CN1154947C - 处理数据的方法和装置 - Google Patents
处理数据的方法和装置 Download PDFInfo
- Publication number
- CN1154947C CN1154947C CNB998066702A CN99806670A CN1154947C CN 1154947 C CN1154947 C CN 1154947C CN B998066702 A CNB998066702 A CN B998066702A CN 99806670 A CN99806670 A CN 99806670A CN 1154947 C CN1154947 C CN 1154947C
- Authority
- CN
- China
- Prior art keywords
- register
- data
- registers
- 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
- 230000003134 recirculating effect Effects 0.000 title 1
- 238000007667 floating Methods 0.000 claims abstract description 39
- 238000001914 filtration Methods 0.000 claims abstract description 3
- 238000000034 method Methods 0.000 claims description 59
- 238000012545 processing Methods 0.000 claims description 54
- 230000005540 biological transmission Effects 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 9
- 239000011159 matrix material Substances 0.000 abstract description 7
- 230000009466 transformation Effects 0.000 abstract description 6
- 238000000844 transformation Methods 0.000 abstract 1
- 238000003860 storage Methods 0.000 description 47
- 238000006243 chemical reaction Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 23
- 230000006870 function Effects 0.000 description 22
- 230000002159 abnormal effect Effects 0.000 description 18
- 230000014759 maintenance of location Effects 0.000 description 13
- 238000012546 transfer Methods 0.000 description 9
- 230000005856 abnormality Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 238000001514 detection method Methods 0.000 description 4
- 239000003550 marker Substances 0.000 description 4
- 238000004886 process control Methods 0.000 description 4
- 239000013256 coordination polymer Substances 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000001186 cumulative effect Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 102100026693 FAS-associated death domain protein Human genes 0.000 description 1
- 101000911074 Homo sapiens FAS-associated death domain protein Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000005669 field effect Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 150000003839 salts Chemical class 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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, 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; CALCULATING OR 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, look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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, 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; CALCULATING OR 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, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
Abstract
一个具有一个寄存器组的浮点单元支持向量运算,该寄存器组包含多个寄存器,所述向量运算对来自不同寄存器的一个数据值序列多次执行一个指定的操作。该寄存器组被分成多个子集,并且用于一个向量运算中的寄存器序列在一个子集内回绕。所述子集包括不相交的、连续编号的寄存器范围。在这些范围中的回绕允许紧凑的编码,以及有效地执行DSP操作,诸如FIR滤波器和矩阵变换。
Description
本发明涉及数据处理领域,更具体来说,本发明涉及具有一个寄存器组和支持向量运算的数据处理系统。
提供具有一个寄存器组和支持向量运算的数据处理系统是众所周知的。这种系统的例子是克雷1(Cray 1)和数字设备公司的MultiTitan处理器。
克雷1(Cray 1)处理器具有分开的向量和标量寄存器组。如果正在执行的指令的操作码指示一个向量操作,则根据存储在一个长度寄存器中的一个长度值和存储在一个屏蔽寄存器中的一个屏蔽从该向量寄存器组中返回一个数据值序列。该长度指出在该序列中有多少数据值,该屏蔽指出哪些数据值从该指令中所指示的与该向量寄存器有关的多个数据值中返回。
MultiTitan处理器具有一个唯一的寄存器组,其中的寄存器可以作为标量或者向量工作。有待执行的指令包括指示一个指定的寄存器是一个向量或者标量寄存器的标志,以及在使用一个向量寄存器时指示在该序列中数据值的数量的一个长度字段。
向量指令本身是比较理想的,因为一个单一的指令可以指定多个数据处理操作,所以它们允许提高代码密度。数字信号处理,诸如音频或者图象处理,特别适合于利用向量操作,因为它们经常需要对一个相关的数据值序列执行同样的操作,诸如通过将一个信号值序列乘以一个数字滤波器的抽头(tap)系数执行一个滤波操作。
能够尽可能地快和有效地执行数据处理操作也是人们所希望的。有助于提高速度和效率的一个途径是避免将已经存储在该寄存器组中的数据值重新加载或者重新定位。实现这一要求的一个问题是能够直接重用数据值的指令代码趋向于更长和更复杂。如果需要更多的指令以指定所需要的操作,则将导致降低处理速度,对实现该寄存器组的数据值重用的目的有不利的影响。
作为对使用诸如Cray 1和MultiTitan处理器的通用处理器的一种替代,人们经常使用特殊目的的数据信号处理电路,该电路具有支持数量较少的数字信号处理操作的特殊作用。在这些特殊目的数字信号处理电路中,一个通常的技术是将所需要的数据值存储在一个大的存储器中,然后在需要时对于每一个操作取出所需要的数据值。该数据值在该大的存储器中不必重新加载或者重新定位,因为它们使用的顺序和序列是通过操作用于存取该大的存储器的地址来控制的。这一方法具有的问题是该电路必须具体设计,以匹配要执行的操作,因此缺少灵活性,并使与通过使用一个更加典型的通用处理器所提供的其他功能的集成不太容易。
本发明的一个目的是提供有效的和快速的数据处理,同时保持使用寄存器组和支持向量操作的指令译码器的通用处理器的灵活性。
从本发明的一个方面来看,本发明提供了处理数据的一个装置,所述装置包括:
具有多个可寻址寄存器的一个寄存器组;和
一个指令译码器,该指令译码器响应至少一个数据处理指令,该指令指定使用所述寄存器组中以在所述数据处理指令中指定的一个初始寄存器开始的一个寄存器序列中的数据值多次执行一个数据处理操作的一个向量运算,其中:
所述寄存器组包括至少一个寄存器子集,所述寄存器序列在所述子集内,并且
所述指令译码器控制所述寄存器序列以在所述寄存器子集内回绕。
在该寄存器组的寄存器子集内(即少于全部的寄存器)提供寄存器回绕允许编写紧凑的代码,以重用该寄存器组中的数据值而不需要重新加载或者移动该数据值。对于每次使用,该指令代码可以在该子集内的不同点开始,并且从而以不同的顺序作用于该数据值,以硬件处理所需要的回绕而不需要提供额外的指令来分解该向量序列。更进一步,在一个寄存器子集(该子集在其自身上回绕)上执行一个向量运算,允许并行地对多个寄存器中的数据值而不是该子集中的寄存器中的数据值执行数据传输的可能。该寄存器回绕也可视作提供了用于环形(循环)缓冲器类型的装置的硬件支持,例如围绕该缓冲器一个接着一个将数据加载进该装置以及从该缓冲器中读出数据。
尽管有可能只有一个单一回绕寄存器子集,其优点是提供了这样的系统,在该系统中,所述向量运算使用来自相应的多个寄存器序列的多个对应的数据值执行所述数据处理操作;
所述寄存器组包含多个寄存器子集,所述多个寄存器序列在相应的子集内;以及
所述指令译码器控制所述多个寄存器序列在相应的寄存器子集内回绕。
在数字信号处理操作中,经常要求重用来自两个序列(比如一个具有抽头(tap)和信号值的有限脉冲响应(FIR)运算要在不同的偏移上相乘和累计,或者一个矩阵运算)的数据值,因此最好有多个回绕寄存器子集。
尽管有可能这些子集有交叉,在实际上,在这种情况下要求重用的数据值通常是相当分离的,从而这些子集可以不相交。这使得其硬件实现可以减少复杂性。
可以理解的是,这些子集可以由该子集之外的寄存器相混合而成。然而,在这些子集是由连续编号的寄存器组成时,编程和实现将更容易了。
这些范围在该寄存器组内可以是间隔的,但是,在较佳实施例中这些范围是连续的,因为这可以有效地使用可用的寄存器空间。
在较佳实施例中,补充了本发明的更加有效地利用向量运算的能力,在该较佳实施例中,进一步包括一个存储器和一个用于控制在所述存储器和在所述寄存器组中的寄存器之间的数据值的传输的传输控制器,所述传输控制器响应多个传输指令,在所述存储器和在所述寄存器组内的一个寄存器序列之间传输一个数据值的序列。
能够传输数据值以及形成该寄存器组中的寄存器块的能力与本发明的有效地利用向量运算的能力很好地相匹配,因为它允许一个寄存器块重用数次,然后以一个单一指令交换出。
在向量运算中使用一个寄存器序列以及将该寄存器组分成寄存器的预定子集可以在较佳实施例中有效地实现,在该实施例中,每个范围通过一个递增器寻址,该递增器在该范围的两个端点之间回绕。
在该向量运算中使用的寄存器序列可以采用许多形式,例如在该子集中每隔一个寄存器,然而通常最有用的情形是该序列是一个连续的寄存器序列。
上述技术可以用在具有一个寄存器组和支持向量运算的任一存储器中。然而,允许紧凑编码和重用该寄存器中的数据值的能力已发现特别有用,并且不干扰有关实施例中的其他考虑,其中在该实施例中,该寄存器组和指令译码器在一个浮点单元中。
从本发明的另一方面来看,本发明提供了一种处理数据的方法,所述方法包括下列步骤:
在一个寄存器组的多个可寻址寄存器中存储多个数据值,以及
响应指定一个向量运算的至少一个数据处理指令,使用来自所述寄存器组中以在所述数据处理指令中指定的一个初始寄存器开始的一个寄存器序列的数据值多次执行一个数据处理操作;其中:
所述寄存器组包括至少寄存器的一个子集,所述寄存器序列在所述子集中,以及
在所述执行过程中,所述寄存器序列在所述寄存器子集内回绕。
该技术在提供FIR滤波器运算方面尤其有用,其中对于每个向量运算,利用它们之间改变的相对偏移,将该抽头(tap)系数值和信号值重用多次。
现在将结合各附图,仅通过举例来说明本发明的实施例,附图中
图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可以根据向量控制寄存器加载指令用长度值和跨距值初始化和更新。向量长度值和跨距值在浮点单元协处理器26内全局适用,由此,不必借助自修改代码就能全局地对这些值进行动态改变。
寄存器控制与指令发布单元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个数据字)的双精度寄存器操作。按照本发明的较佳实施例,FPRE6寄存器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协处理器26可以被用来处理单精度或双精度数据值,主处理器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,在这里确定指令中指定的字数是不是奇数。假设因本实施例的缘故,不采用除FPRE6寄存器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寄存器的用法。
图表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中的任何一个。仅对在指令中明确指定的寄存器进行操作。
2?目的地寄存器在寄存器文件的第一组中。源标量可以是任何其它寄存器。这个方式允许混合标量和向量操作而不必改变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.1 FPS寄存器中整数数据向浮点数据的转换
整数数据可以用MCR FMOVS指令从任何ARM寄存器加载到浮点单精度寄存器中。然后可以用整-到-浮系列的运算将FPS寄存器中的整数数据转换成一个单精度或双精度数据值,并写入一个目的地FPS寄存器。如果不再需要该整数值,则目的地寄存器可以就是源寄存器。该整数可以是一个带符合的或无符合的32位量。
4.3.2 FPS寄存器中的浮点数据向整数数据的转换
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.5 MCR(从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.6 MRC(从协处理器/比较浮点寄存器转移到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!,<寄存器列表
>
4.7.2 LDC/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和FCMPO将不发出INVALID信号,而FCMPE和FCMEO则要发出异常信号。FCMPO和FCMPEO将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寄存器最低位双精度操作:必须设置成0 |
Fm | 单精度操作:源B寄存器高4位双精度操作:源B寄存器地址 |
4.8.1操作码
表14列举了CDP指令的主要操作码。所有助记符的格式均为[OPERATION][COND][S/D]
表14.CDP操作码说明
操作码字段 | 操作名称 | 操作 |
0000 | FMAC | Fd=Fn*Fm+Fd |
0001 | FNMAC | Fd=-(Fn*Fm+Fd) |
0010 | FMSC | Fd=Fn*Fm-Fd |
0011 | FNMSC | Fd=-(Fn*Fm-Fd) |
0100 | FMUL | Fd=Fn*Fm |
0101 | FNMUL | Fd=-(Fn*Fm) |
0110 | FSUB | Fd=Fn-Fm |
0111 | FNSUB | Fd=-(Fn-Fm) |
1000 | FADD | Fd=Fn+Fm |
1001-1011 | 保留 | |
1100 | FDIV | Fd=Fn/Fm |
1101 | FRDIV | Fd=Fm/Fn |
1110 | FRMD | Fd=Fn%Fm(Fd=Fn/Fm后留下的小数 |
1111 | 扩展 | 用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 | FCMPO* | 标志:=Fd<=>0 |
01011 | FCMPEO* | 标志:=Fd<=>0,带异常报告 |
01100-01110 | 保留 | |
01111 | FCVTD<cond>S* | Fd(双精度寄存器编码)=单精度向双精度转换的Fm(单精度寄存器编码)。(协处理器10) |
01111 | FCVTS<cond>D* | Fd(单精度寄存器编码)=双精度向单精度转换的Fm(双精度寄存器编码)。(协处理器11) |
10000 | FUITO* | Fd=ConvertUnsignedIntToSingle/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和查询已完成操作的状态。它必须在上下文切换期间保存和恢复。位3 1至28含有最近一条比较指令产生的标志值,可以通过读FPSCR来访问。图表10中展示了FPSCR。31 30 29 28 27 26 25 24 23 22 21 20 19 18 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
N | Z | C | V | R | R | R | FZ | 取整方式 | 跨距 | R | 长度 |
保留 | 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有效或未初始化 |
C1 | D1有效 | S3和S2有效或未初始化 |
C2 | D2有效 | S5和S4有效或未初始化 |
C3 | D3有效 | S7和S6有效或未初始化 |
C4 | D4有效 | S9和S8有效或未初始化 |
C5 | D5有效 | S11和S10有效或未初始化 |
C6 | D6有效 | S13和S12有效或未初始化 |
C7 | D7有效 | S15和S14有效或未初始化 |
C8 | D8有效 | S17和S16有效或未初始化 |
C9 | D9有效 | S19和S18有效或未初始化 |
C10 | D10有效 | S21和S20有效或未初始化 |
C11 | D11有效 | S23和S22有效或未初始化 |
C12 | D12有效 | S25和S24有效或未初始化 |
C13 | D13有效 | S27和S26有效或未初始化 |
C14 | D14有效 | S29和S28有效或未初始化 |
C15 | D15有效 | S31和S30有效或未初始化 |
6.异常处理
FPS在调试方式和正常方式这两种方式之一下操作。如果在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.1 FPS被禁止或异常时FMOVX的使用
在SUPERVISOR(管理器)或UNDEFINED(未定义)方式下执行的FMOVX指令,可以在FPS处于异常状态或被禁止(如果该实现支持禁止选择的话)时,读和写FPSCR或者读FPSID或FPREG,而不会引起向ARM发出异常信号。
尽管讨论了本发明的一些特定的实施例,显然本发明并不局限于此,在本发明的范围内可以进行许多修改和增补。例如,可以将后文的从属权利要求的特征与独立权利要求的特征作出各种组合,而不偏离本发明的范围。
Claims (15)
1、一个用于处理数据的装置,所述装置包括:
具有多个可寻址寄存器的一个寄存器组;和
一个指令译码器,该指令译码器响应至少一个数据处理指令,该指令指定使用所述寄存器组中以在所述数据处理指令中指定的一个初始寄存器开始的一个寄存器序列中的多个数据值多次执行一个数据处理操作的一个向量运算;其中:
所述寄存器组包括至少一个寄存器子集,所述寄存器序列在所述子集内,并且
所述指令译码器控制所述寄存器序列以在所述寄存器子集内回绕。
2、根据权利要求1的装置,其特征在于:
所述向量运算使用来自相应的多个寄存器序列的多个对应的数据值执行所述数据处理操作;
所述寄存器组包含多个寄存器子集,所述多个寄存器序列在相应的子集内;以及
所述指令译码器控制所述多个寄存器序列在相应的寄存器子集内回绕;
3、根据权利要求2的装置,其特征在于所述多个子集是不相交的。
4、根据权利要求1的装置,其特征在于所述子集包括一个连续编号的寄存器的范围。
5、根据权利要求2的装置,其特征在于所述多个子集的每个子集包括一个连续编号的寄存器的范围。
6、根据权利要求5的装置,其特征在于所述多个子集包括相应的连续编号的寄存器的连续范围。
7、根据权利要求6的装置,其特征在于包括四个连续的范围。
8、根据前述任一权利要求的装置,其特征在于进一步包括一个存储器和一个用于控制在所述存储器和在所述寄存器组内的寄存器之间的数据值传输的传输控制器,所述传输控制器响应多个传输指令,在所述存储器和在所述寄存器组内的一个寄存器序列之间传输一个数据值序列。
9、根据权利要求6的装置,其特征在于每个范围通过一个递增器寻址,该递增器在该范围的两个端点之间回绕。
10、根据权利要求1的装置,其特征在于: 该序列是一个连续的寄存器序列。
11、根据权利要求1的装置,其特征在于:该寄存器组和指令译码器是一个浮点单元的部件。
12、一种处理数据的方法,所述方法包括步骤:
在一个寄存器组的多个可寻址寄存器中存储多个数据值,以及
响应指定一个向量运算的至少一个数据处理指令,使用来自所述寄存器组中以在所述数据处理指令中指定的一个初始寄存器开始的一个寄存器序列的多个数据值多次执行一个数据处理操作,其中:
所述寄存器组包括至少一个寄存器子集,所述寄存器序列在所述子集中,以及
在所述执行过程中,所述寄存器序列在所述寄存器子集内回绕。
13、根据权利要求12的方法,其特征在于
所述向量运算使用来自相应的多个寄存器序列的多个对应的数据值执行所述数据处理操作;
所述寄存器组包含多个寄存器子集,所述多个寄存器序列在相应的子集内;以及
在所述执行中,所述多个寄存器序列在相应的寄存器子集内回绕。
14、根据权利要求13的方法,其特征在于在一个序列中的数据值是一个滤波器的抽头系数,在另一序列中的数据值是由所述滤波器进行滤波的信号值。
15、根据权利要求12的方法,其特征在于多个向量运算是在以随着每个向量运算而改变的至少一个序列的一个起始点在所述多个序列中的数据值上执行的。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/085,752 | 1998-05-27 | ||
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 |
---|---|
CN1303502A CN1303502A (zh) | 2001-07-11 |
CN1154947C true CN1154947C (zh) | 2004-06-23 |
Family
ID=22193713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB998066702A Expired - Lifetime CN1154947C (zh) | 1998-05-27 | 1999-03-09 | 处理数据的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6189094B1 (zh) |
KR (1) | KR100563220B1 (zh) |
CN (1) | CN1154947C (zh) |
MY (1) | MY115481A (zh) |
RU (1) | RU2225995C2 (zh) |
TW (1) | TW495679B (zh) |
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 |
US7069288B2 (en) * | 2001-05-25 | 2006-06-27 | Sun Microsystems, Inc. | Floating point system with improved support of interval arithmetic |
US7613762B2 (en) * | 2001-05-25 | 2009-11-03 | Sun Microsystems, Inc. | Floating point remainder 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 |
US7366749B2 (en) * | 2001-05-25 | 2008-04-29 | Sun Microsystems, Inc. | Floating point adder with embedded status information |
US6993549B2 (en) * | 2001-05-25 | 2006-01-31 | Sun Microsystems, Inc. | System and method for performing gloating point operations involving extended exponents |
US6970898B2 (en) * | 2001-05-25 | 2005-11-29 | Sun Microsystems, Inc. | System and method for forcing floating point status information to selected values |
US7191202B2 (en) | 2001-05-25 | 2007-03-13 | Sun Microsystems, Inc. | Comparator unit for comparing values of floating point operands |
US7363337B2 (en) * | 2001-05-25 | 2008-04-22 | Sun Microsystems, Inc. | Floating point divider with embedded status information |
US7003540B2 (en) * | 2001-05-25 | 2006-02-21 | Sun Microsystems, Inc. | Floating point multiplier for delimited operands |
US6961744B2 (en) * | 2001-05-25 | 2005-11-01 | Sun Microsystems, Inc. | System and method for generating an integer part of a logarithm of a floating point operand |
US7016928B2 (en) * | 2001-05-25 | 2006-03-21 | Sun Microsystems, Inc. | Floating point status information testing circuit |
US7133890B2 (en) * | 2001-05-25 | 2006-11-07 | Sun Microsystems, Inc. | Total order comparator unit for comparing values of two floating point operands |
US7444367B2 (en) * | 2001-05-25 | 2008-10-28 | Sun Microsystems, Inc. | Floating point status information accumulation circuit |
US7430576B2 (en) * | 2001-05-25 | 2008-09-30 | Sun Microsystems, Inc. | Floating point square root provider 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 |
US6976050B2 (en) * | 2001-05-25 | 2005-12-13 | Sun Microsystems, Inc. | System and method for extracting the high part of a floating point operand |
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 |
US7831652B2 (en) * | 2001-05-25 | 2010-11-09 | Oracle America, Inc. | Floating point multiplier with embedded status information |
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 |
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 |
JP2004302647A (ja) * | 2003-03-28 | 2004-10-28 | Seiko Epson Corp | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
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 |
ES2943248T3 (es) | 2011-04-01 | 2023-06-12 | Intel Corp | Formato de instrucción compatible con vectores y ejecución del mismo |
CN104011670B (zh) | 2011-12-22 | 2016-12-28 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
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 |
US9898398B2 (en) | 2013-12-30 | 2018-02-20 | Microsoft Technology Licensing, Llc | Re-use of invalidated data in buffers |
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 |
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 (fr) * | 2018-06-29 | 2021-01-01 | Vsora | Acces memoire de processeurs |
GB2576572B (en) * | 2018-08-24 | 2020-12-30 | Advanced Risc Mach Ltd | Processing of temporary-register-using instruction |
CN110750304B (zh) * | 2019-09-30 | 2022-04-12 | 百富计算机技术(深圳)有限公司 | 提升任务切换效率的方法及终端设备 |
CN114298293A (zh) * | 2021-12-29 | 2022-04-08 | 杭州万高科技股份有限公司 | 基于Cortex-M处理器的循环神经网络加速方法、系统和介质 |
Family Cites Families (18)
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 |
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 |
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 |
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/zh not_active IP Right Cessation
-
1999
- 1999-03-09 RU RU2000132723/09A patent/RU2225995C2/ru not_active IP Right Cessation
- 1999-03-09 CN CNB998066702A patent/CN1154947C/zh not_active Expired - Lifetime
- 1999-03-09 KR KR1020007013163A patent/KR100563220B1/ko not_active IP Right Cessation
- 1999-03-25 MY MYPI99001140A patent/MY115481A/en unknown
Also Published As
Publication number | Publication date |
---|---|
US6189094B1 (en) | 2001-02-13 |
KR20010043773A (ko) | 2001-05-25 |
KR100563220B1 (ko) | 2006-03-22 |
RU2225995C2 (ru) | 2004-03-20 |
MY115481A (en) | 2003-06-30 |
CN1303502A (zh) | 2001-07-11 |
TW495679B (en) | 2002-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1154947C (zh) | 处理数据的方法和装置 | |
CN1191535C (zh) | 处理数据的装置和方法 | |
CN1656495A (zh) | 标量/矢量处理器 | |
CN1112635C (zh) | 多媒体信号处理器中的单指令多数据处理方法及其装置 | |
CN1153129C (zh) | 用于处理器定制操作的设备 | |
CN1103961C (zh) | 协处理器的数据访问控制装置和方法 | |
CN1117316C (zh) | 采用多个向量寄存器组的单指令多数据处理方法及其装置 | |
CN1280714C (zh) | 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器 | |
CN1886744A (zh) | 在可扩展的处理器架构中增加高级指令所用的方法和装置 | |
CN1306406C (zh) | 在多个输入/输出子系统映像上共享通信适配器的方法和系统 | |
CN1264089C (zh) | 编译设备和编译方法 | |
CN1497435A (zh) | 处理器 | |
CN1153155C (zh) | 装有高效利用主处理器中的寄存器数据的协处理器的信息处理装置 | |
CN1302380C (zh) | 处理器和编译器 | |
CN1688966A (zh) | 包括对准或者广播指令的多媒体协处理器控制机制 | |
CN1684058A (zh) | 处理器 | |
CN1319210A (zh) | 可配置的硬件块的配置方法 | |
CN1472646A (zh) | 适应性强具备最佳化功能的编译装置 | |
CN1568458A (zh) | 无需修改现有代码即可增加新软件特征的方法 | |
CN1103959C (zh) | 数据处理装置和操作数据处理装置的方法 | |
CN1279435C (zh) | 数字信号处理器 | |
CN1862486A (zh) | 数字信号处理器 | |
CN1254740C (zh) | 使用协处理器的数据处理 | |
CN1104679C (zh) | 数据处理装置和数据处理方法 | |
CN1152300C (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: 20040623 |
|
CX01 | Expiry of patent term |