用于将浮点值四舍五入为整数浮点值的装置和方法

文档序号:6497582阅读:209来源:国知局
用于将浮点值四舍五入为整数浮点值的装置和方法
【专利摘要】处理电路被提供来执行用于将浮点值四舍五入为整数浮点值的操作FRINT。控制电路控制该处理电路来执行FRINT操作,以响应FRINT指令。该处理电路包括:移位电路,用于通过对基值移位来生成四舍五入值;加和电路,用于将该四舍五入值加至该浮点值的有效位数来生成和值;掩码生成电路,用于生成用来清除该和值的小数值位的掩码;以及掩蔽电路,用于将该掩码应用于该和值来生成整数浮点值。
【专利说明】用于将浮点值四舍五入为整数浮点值的装置和方法
【技术领域】
[0001]本发明涉及数据处理领域。更具体地,本发明涉及用于将浮点值四舍五入为整数浮点值的装置和方法。
[0002]现有技术说明
[0003]用于对浮点数执行算术操作的处理器已为人所知。在浮点表示法中,通过使用有效位数1.F、指数E和符号位S来表示数。符号位S表示该浮点数是正数或负数,有效位数
1.F表示该浮点数的有效数字,并且,指数E表示与该有效位数相关的小数点(也称为二进制小数点)的位置。通过改变指数值,小数点可以在有效位数内向左边和右边“浮动”。这就是说对于预确定数目的位,浮点表示法可以比定点表示法(在该方法中,小数点在有效位数内具有固定位置)表示更宽范围的数。然而,额外的范围是以减少的精度为代价获得的,因为一些位用来存储指数。有时,浮点算术操作生成比用于有效位数的位的数目具有更多有效位的结果。如果发生这种情况,那么该结果被四舍五入为可以使用可用数目的有效位来表不的值。
[0004]附图的图1显示了浮点数如何被储存在寄存器或存储器内。在单精度表示法中,使用32位来存储浮点数。I位用作符号位S,8位用来存储指数E,并且,23位用来存储有效位数1.F的小数部分F。小数部分的23位随同具有值I的隐含位一起组成24位有效位数1.F。首先假设小数点被放置于该有效位数的隐含位和23位存储的位之间。所存储的指数E通过固定值127进行偏移,使得在所表示的浮点数中,如果E-127是负数,那么小数点被从其初始位置向左移位E-127位(例如,如果E-127 = -2,那么1.01的有效位数表示
0.0101),或者,如果E-127是正数,那么小数点被从其初始位置向右移位E-127位(例如,如果E-127 = 2,那么1.01的有效位数表示101)。该偏移用来使得对两个浮点值的指数的比较更简单,因为小数点的正移位和负移位均可以由所存储的指数E的正值来表示。如图1 所示,所存储的表达式 S[31],E[30:23],F[22:0]表示具有值(_1)S*1.F[22:0]*2(E_127)的数。这种形式的单精度浮点数被认为是“标准的”。如果计算的浮点值不是标准的(例如,该值已通过将小数点置于不是该有效位数的最左边两位之间的位置来生成),那么通过将有效位数向左或向右移位并相应地调整指数直到该数为(_l)s*l.F[22:0]*2(e_127)的形式来将其标准化。
[0005]还提供了双精度格式,在该格式中,采用64位存储位来表示有效位数和指数。这64位存储位包括I位符号位、11位指数以及53位有效位数1.F的52位小数部分F。在双精度格式中,指数通过值1023进行偏移。因此,在双精度格式中,所存储的表达式S [63],E[62:52],F[51:0]表示浮点值(_1)S*1.F[51:0]*2(?)。
[0006]在本申请中,一些示例将参照单精度浮点格式进行解释。然而,应当认识到,本发明还可以被应用到双精度格式(或任意其他浮点格式)中,并且,在后续的图中显示的位值可以由适合于正被使用的浮点格式的值进行替换。
[0007]—种浮点操作为四舍五入为整数浮点操作(FRINT),这种操作将浮点值四舍五入为整数浮点值。例如,浮点值6.75可以被四舍五入为相邻整数值6.0或7.0中的一个。本技术旨在减少与执行FRINT操作相关联的时延。

【发明内容】

[0008]从一个方面看,本发明提供了一种数据处理装置,包括:
[0009]处理电路,被配置来执行用于将浮点值四舍五入为整数浮点值的四舍五入为整数浮点操作,所述浮点值具有有效位数和指数;以及
[0010]控制电路,被配置来控制所述处理电路,以执行所述四舍五入为整数浮点操作来响应对浮点四舍五入为整数浮点指令的执行;
[0011]所述处理电路包括:
[0012]移位电路,被配置来通过将基值移位移位量来生成四舍五入值,其中所述移位量依赖于所述浮点值的所述指数;
[0013]加和电路,被配置来将所述四舍五入值加至所述浮点值的所述有效位数以生成和值;
[0014]掩码生成电路,被配置来生成用于清除所述和值的具有与所述有效位数的小数值位位置相对应的位位置的位的掩码;以及
[0015]掩蔽电路,被配置来将所述掩码应用于所述和值来生成所述整数浮点值。
[0016]通常在软件中已实现了四舍五入为整数浮点操作(FRINT)。然而,本技术认识到,由于每条指令需要被分开获取、解码并运行,因此这种方法较慢。
[0017]通过提供用于在硬件中执行FRINT操作的处理电路和用于控制该处理电路来执行FRINT操作以响应对单浮点四舍五入为整数浮点指令(FRINT指令)的执行的控制电路,FRINT操作可以比以前的软件实现更快地被执行。
[0018]本技术还认识到,在典型的浮点硬件电路中,四舍五入被限制于发生在有效位数内的预确定的固定位置处,通常是该有效位数的最低有效位。然而,如果四舍五入只能发生在该有效位数的最低有效位,那么在经移位的值的最低有效位上执行四舍五入之前,将需要将该有效位数向右移位来将该浮点值转换为整数浮点值。然后,将需要通过将该四舍五入的值向左移位以将该值转换回标准浮点格式来对该四舍五入的值进行标准化。这样的向左移位通常对于其他浮点操作来说不是必需的,因此,将用于执行这样向左移位的硬件增加至处理电路将给处理电路增加处理周期,使得该电路复杂并且减慢了大多数其他浮点操作的处理。
[0019]为了避免该问题,本技术提供了移位电路和加和电路,其中,移位电路通过将基值移位移位量来生成四舍五入值,其中,所述移位量依赖于所述将要被四舍五入的浮点值的指数,所述加和电路用于将所生成的四舍五入值加至该浮点值的有效位数。在和值中余留的任意小数值位值可以通过将掩码应用到该和值来清除。由于所述移位被应用来生成四舍五入值,因此,不需要对有效位数进行移位,所以,由有效位数和经移位的四舍五入值相加得到的和值是标准化的浮点值。不需要执行后续的向左移位,因此,可以实现用于执行该四舍五入为整数浮点操作的有效硬件机制。
[0020]应当认识到,没有必要对FRINT指令的所有运行实例使用移位电路、加和电路、掩码生成电路以及掩蔽电路。可以有这样的情形,即浮点值被四舍五入后的值使得四舍五入的结果可以不需要实际执行移位、加和以及掩蔽就能容易地被确定。例如,如果将要被四舍五入的浮点值已经是一个整数,那么四舍五入将不影响其值,所以,输入值可以直接被写进输出寄存器。另外,如果该浮点值的量值小于1,那么,四舍五入的结果将是O或1,并且,这不需要对该四舍五入为整数浮点操作的完全执行便可被确定。因此,控制电路可以逐条指令地确定是否有必要使用处理电路的完整四舍五入功能。
[0021]尽管通过使用等效的向左移位来构建四舍五入值是可能的,但是对于移位电路来说,将基值向右移位来生成四舍五入值最为方便。
[0022]有效位数的位的数值是指数的功能。通常,这些位中的一些表示大于或等于1.0的值(整数值位),并且这些位中的一些表示小于1.0的值(小数值位)。
[0023]所述四舍五入值可以在与该浮点值的有效位数的最高有效小数值位的位位置相对应的位位置处具有首非零位。所述有效位数的最高有效小数值位是表示值二分之一的位。将二分之一加至有效位数并清除和值中的任意小数值位是将浮点值四舍五入为最接近的整数的技术。其他四舍五入技术可以通过加上大于二分之一但是小于一的值来实现。在这两个情形中,四舍五入值的首非零位处于最高有效小数值位位置。
[0024]基值可以具有这样的最闻有效位,该最闻有效位具有非零值。移位电路可以被配置来将基值向右移位(E-BIAS+1)位位置的移位量,其中,E表示该浮点值的指数,并且,BIAS表示该浮点值的指数偏移。该移位使得首非零位被移位至与值二分之一相对应的最高有效小数值位位置。
[0025]掩蔽电路可以包括AND门,该AND门被配置来对和值和掩码应用按位AND操作。掩码在与该有效位数的小数值位位置相对应的位位置处的位可以具有位值0,而掩码在与该有效位数的整数值位位置相对应的位位置处的位可以具有位值I。通过这种方式,掩码可以用来清除和值的小数值位,以生成整数浮点值。
[0026]尽管可以以多种方式生成掩码(例如,通过移位掩码基值),但是,基于四舍五入值来生成掩码是很方便的。这可以避免执行进一步移位的需要。如上述讨论,该四舍五入值的首非零位位于最高有效小数值位位置,并且,该位与掩码中的首零位相对应。因此,该四舍五入值可以被容易地转换为掩码。例如,该掩码可以通过在比该四舍五入值的首非零位更有效的位位置处采用非零位值和在该掩码剩余位位置处采用零位值来生成。
[0027]处理电路能够实施其他浮点操作以及FRINT操作。在一个示例中,控制电路可以控制该处理电路来执行浮点加和操作来响应对浮点加和指令的执行。移位电路和加和电路可以用于加和操作和FRINT操作二者。通过对执行FRINT操作和加和操作共享电路,可以减少电路面积。
[0028]浮点值位于两个相邻的整数值之间。可以实施不同的规则来确定这两个整数值中的哪一个应该为四舍五入结果。因此,可在至少一种四舍五入模式中提供该处理电路,用于在FRINT操作期间选择将该浮点值四舍五入为哪个整数。如果该处理电路具有多种四舍五入模式,那么FRINT指令可以指定哪种四舍五入模式应该用于该FRINT操作。例如,不同指令操作码可以用于控制每个不同FRINT操作,或者,具有单个操作码的指令可以具有指定如下字段的四舍五入模式,该字段指定将使用哪种四舍五入模式。
[0029]例如,该处理电路可以具有远离零四舍五入(RU)四舍五入模式,用于将浮点值四舍五入为两个相邻整数中具有最大绝对量值的一个。例如,在RU四舍五入模式中,值2.25将被四舍五入为整数3.0,而值-2.25将被四舍五入为整数-3.0。[0030]在RU四舍五入模式中,基值的所有位可以具有非零位值(基值Oblllllll...或一的二进制字符串)。当该基值被移位来生成四舍五入值时,对应于使用十进制算术时的十进制值0.999...,该四舍五入值将在每个小数值位位置处具有非零位值。这意味着将该四舍五入值加至有效位数并使用掩码清除和的小数值位将得到比该浮点值大的相邻整数。例如,将0.999…加至值2.2上得到和3.1999…,并且清除小数值位得到经准确四舍五入的整数浮点值3.0。如果对已经是整数的值执行四舍五入为整数浮点操作,那么加0.999…不改变该浮点值的整数值位,因此,掩蔽该和的小数值位得到原始整数浮点值。
[0031]另一种四舍五入模式可以是四舍五入为最接近、靠近偶数(RNE)四舍五入模式,用于将浮点值四舍五入为两个相邻的整数浮点值中最接近的,同时将位于两个整数浮点值正中间的浮 点值四舍五入为这两个整数浮点值中的偶数值。例如,值2.9将被四舍五入为最接近的整数浮点值3.0,而值3.5和4.5都将被四舍五入为最接近的偶数整数浮点值
4.0。这种模式可以用来防止趋向更高整数的四舍五入偏差,如果位于两个整数正中间的值总被向上四舍五入,那么上述情况可能会发生。
[0032]在本技术中可以通过提供基值来实现RNE四舍五入模式,其中,所述基值具有为非零位值的最高有效位和为零位值的剩余位(即,基值OblOOO…)。因此,当该基值被移位来生成四舍五入值时,该基值具有值二分之一。通过将二分之一加至有效位数并清除任何小数值位,该有效位数被四舍五入为最接近的整数浮点值。例如,将二分之一加至值2.3则产生和2.8,并且清除小数值位得到四舍五入的值2.0。另一方面,将二分之一加至值2.9得到和3.4,并且然后清除小数值位给出四舍五入的整数浮点值3.0,这是离2.9最近的整数。
[0033]在RNE四舍五入模式中,如果增加二分之一将导致奇数值(如果浮点值位于两个整数值的正中间,并且其有效位数的最低有效整数值位有零位值,那么这种情况将会发生),那么结果值被修正来产生偶数值。本技术通过修正掩码以使得将该掩码应用到有效位数和四舍五入值的和将清除和值的具有与该有效位数的最低有效整数值位相对应的位位置的位,提供了保证偶数结果的方便的方法。例如,可以将掩码向左移位一个位位置,以便现在有与最低有效整数值位位置相对应的非零位值。这保证了当掩码被应用于和值时,最低有效位将被清除来生成偶数值。
[0034]另一种四舍五入模式可以是四舍五入至零(RZ)四舍五入模式,用于将浮点值四舍五入为两个相邻整数浮点值中具有最小绝对量值的一个。该四舍五入模式等同于对该浮点值的截断,以便在保留现有整数值位的同时丢弃任何小数值位。
[0035]由于在使用RZ四舍五入模式进行四舍五入时浮点值的整数部分保持不变,因此,不需要将四舍五入常量加至该有效位数的整数值部分。然而,本技术认识到,与其他四舍五入模式相比,如果相同的电路用来执行RZ四舍五入模式,那么可以更有效地实现FRINT操作。因此,对于RZ四舍五入模式,四舍五入值仍可以被计算,并且,在生成该四舍五入值之后,在将置零的四舍五入值加至有效位数上来生成和值之前,该四舍五入值的所有位可以被置为零。未置零的四舍五入值对于RZ四舍五入模式中的加和来说虽然不是必需的,但是对计算四舍五入值以允许生成掩码来说仍是有用的。
[0036]从另一个方面看,本发明提供了非暂时计算机可读存储介质,该非暂时计算机可读存储介质存储用于控制计算机以提供与上述描述的数据处理装置相对应的虚拟机运行环境的计算机程序。因此,该计算机实际上不需要具备上述描述的处理电路,但可以运行用于提供运行环境的虚拟机程序,所述运行环境用于运行程序指令使得这些指令如同正在实际电路上被运行。
[0037]从另一个方面看,本发明可以提供一种数据处理装置,包括:
[0038]处理装置,用于执行四舍五入为整数浮点操作,所述操作用于将浮点值四舍五入为整数浮点值,所述浮点值具有有效位数和指数;以及
[0039]控制装置,用于控制所述处理装置以执行所述四舍五入为整数浮点操作来响应对浮点四舍五入为整数浮点指令的执行;
[0040]所述处理装置包括:
[0041]移位装置,用于通过对基值移位移位量来生成四舍五入值,所述移位量依赖于所述浮点值的所述指数;
[0042]加和装置,用于将所述四舍五入值加至所述浮点值的所述有效位数来生成和值;
[0043]掩码生成装置,用于生成掩码,所述掩码用于清除具有与所述有效位数的小数值位位置相对应的位位置的所述和值的位;以及
[0044]掩蔽装置,用于将所述掩码应用到所述和值以生成所述整数浮点值。
[0045]从又一方面来看,本发明可以提供一种执行四舍五入为整数浮点操作的方法,所述操作用于将浮点值四舍五入为整数浮点值,所述浮点值包括有效位数和指数,所述方法包括以下步骤:
[0046]通过将基值移位移位量来生成四舍五入值,所述移位量依赖于所述浮点值的所述指数;
[0047]将所述四舍五入值加至所述浮点值的所述有效位数以生成和值;
[0048]生成用于清除所述和值的具有与所述有效位数的小数值位位置相对应的位位置的位的掩码;并且
[0049]将所述掩码应用到所述和值以生成所述整数浮点值;
[0050]其中,所述方法由处理电路执行,以响应对浮点四舍五入为整数浮点指令的执行。
[0051]本发明更具体的和优选的方面在附随的独立权利要求和从属权利要求中陈述。这些从属权利要求的特征可以在适当时结合这些独立权利要求的特征,并且是以结合的方式,而不是在权利要求中直接陈述的。
[0052]以上描述,以及本发明的其他目的、特征和优点将从对下述示例性实施例的详细说明中变得显而易见,结合附图来阅读这些实施例。
【专利附图】

【附图说明】
[0053]图1示出了浮点数表示法;
[0054]图2示出了用于执行FRINT操作的处理电路;
[0055]图3示出了执行FRINT指令的方法;
[0056]图4示出了当对浮点值进行移位时计算状态标志的示例;
[0057]图5示出了用于执行浮点操作的处理管线的一部分;
[0058]图6示出了使用本技术的RU四舍五入的示例;
[0059]图7示出了 RNE四舍五入的示例;[0060]图8示出了 RZ四舍五入的示例;以及
[0061]图9示出了虚拟机实现的示例。
【具体实施方式】
[0062]图2示意性地示出了具有用于执行FRINT操作的处理电路2的处理装置的一部分,所述FRINT操作用于将具有有效位数1.F和指数E的浮点值四舍五入为整数浮点值。控制电路4被提供来控制该处理电路以执行FRINT操作。控制电路4响应于对FRINT指令的执行来生成用于控制处理电路2的各种元素来执行FRINT操作的控制信号。应该认识到,处理电路2可以包括其他元素,而不是这些示出的,并且示出的用于执行FRINT操作的元素是示意性的,以便可以使用其他硬件来完成同样的操作。
[0063]处理电路2包括:寄存器8,用于存储要被四舍五入的浮点值的有效位数1.F ;以及寄存器10,用于存储用来构建四舍五入常量的基值。处理电路2还包括:右移位器12,用于将基值B向右移位;以及右移位器14,用于将有效位数1.F向右移位来生成状态标志L、G、S。复用器16被安排来选择由右移位器12生成的四舍五入值或零值,并且加和器18被提供来将复用器16的输出加至未移位的有效位数1.F来生成和值。
[0064]掩码生成电路20也被提供来基于由右移位器12生成的四舍五入值来生成掩码,并且,掩码修正电路22被提供来修正该掩码以生成修正的掩码(掩码’)。另外的复用器24选择由掩码生成电路20生成的掩码,或选择由掩码修正电路22生成的修正的掩码。包括AND门26的掩蔽电路被提供来将所选的掩码应用到由加和器18生成的和值。AND门26的输出是整数浮点值,该整数浮点值被置于输出寄存器30中。
[0065]图3示出了使用图2中所示的处理电路2执行FRINT指令的方法。在步骤50处,控制电路4确定当前所执行的指令是否为FRINT指令。如果是,那么在步骤52处,控制电路4确定(E-BIAS+1)的值,其中,E是正被四舍五入的浮点值的指数,并且,BIAS是指数偏移(例如,127用于单精度浮点值)。
[0066]如果(E-BIAS+1)的值大于N,其中,N是非隐含的有效位数位F的数目(也就是说,不包括有效位数1.F的隐含位I),那么要被四舍五入的值已经是整数。在这种情形中,在步骤54处,控制电路4控制处理电路2来输出未改变的浮点值的有效位数。
[0067]替换地,如果在步骤52处(E-BIAS+1)的值小于或等于零,那么要被四舍五入的值的量值位于O和I之间,因此,四舍五入的结果将为O或I。在这种情形中,在步骤56处,控制电路4可以控制处理电路2来生成四舍五入的结果。在这种情况中,该四舍五入的结果可以基于该有效位数和当前四舍五入模式来直接计算,不需要激活处理电路2完整的加和及掩蔽功能。
[0068]在另一方面,如果(E-BIAS+1)的值大于零且小于或等于N,那么在步骤60处,右移位器14将有效位数1.F(包括隐含位I)向右移位(N-(E-BIAS))位位置。这将该有效位数转换成整数值,以允许在步骤62处对状态标志L、G、S进行计算。状态标志L、G、S提供关于该浮点值是偶数还是奇数、以及该浮点值是否位于两个整数值正中间的信息。举例来说,这对于在RNE四舍五入模式中确定值是应该向上还是向下四舍五入很有用。
[0069]图4示出了可以在步骤60和62处生成状态标志的方式的示例。当该浮点值的有效位数被转换成整数(在图4的示例中,通过向右移位8位位置),“最低”状态标志L采用经移位的值的最低有效位的值,这与原始有效位数中的最低有效整数值位相对应。L标志指示该浮点值是偶数(如果L = O)还是奇数(如果L = I)。
[0070]“保卫”标志G采用从经移位的结果移位出I位位置的位的值,这与原始有效位数的最高有效小数值位相对应。也就是说,如果该有效位数将要被转换为整数,那么该位将由于向右移位而丢失,但是保卫标志G保留了该位的值来指示原始有效位数的小数值部分是位于O和0.4999…之间(如果G = O)还是位于0.5和0.9999…之间(如果G = I)。
[0071]如果除了该有效位数的最高有效小数值位的任意小数值位具有值1,那么“粘性”标志S采用值I。因此,粘性标志S等同于非最高有效小数值位的小数值位的OR组合。实际上,S标志可以通过如下方式来计算:如果在对该有效位数向右移位时,在移位结果中移经S标志位置的任意位具有值1,那么将该标志设为1,并且之后不管任何进一步移位出的位的值如何都保持值I。S标志指示该浮点值是否正好位于整数值或半整数值(如果S =O),或者该浮点值是否位于该整数和半整数值之间(如果S = I)。
[0072]应该认 识到,为了计算L、G、S标志,该有效位数在步骤60处被向右移位。该向右移位的有效位数不用于剩余的FRINT操作。
[0073]同时在步骤64处,控制电路4确定哪种四舍五入模式将用于该四舍五入为整数浮点操作。每种四舍五入模式可以提供用于为位于两个相邻的整数浮点值之间的浮点值确定该浮点值要被四舍五入为哪个整数浮点值的不同规则。例如,处理电路2可以提供以下四舍五入模式中的任意一种或多种;
[0074]?远离零四舍五入(RU)四舍五入模式。在RU四舍五入模式中,位于两个整数浮点值之间的浮点值被四舍五入为这两个整数浮点值中具有最大绝对量值的一个。例如,在RU四舍五入模式中,值2.9将被四舍五入为整数3.0,并且,值-3.2将被四舍五入为值-4.0。
[0075].四舍五入为最接近、靠近偶数(RNE)四舍五入模式,该模式用于将浮点值四舍五入为两个相邻的整数浮点值中最接近的,同时,位于两个整数浮点值正中间的浮点值被四舍五入为这些整数浮点值中为偶数值的那个。例如,值2.9将被四舍五入为整数3.0,而值
2.5将被四舍五入为最接近的偶数整数值2.0。
[0076].四舍五入至零(RZ)四舍五入模式,用于将浮点值四舍五入为两个整数浮点值中具有最小绝对量值的一个。例如,值2.3和值-2.8将分别被四舍五入为整数值2.0和-2.0。
[0077].四舍五入为正无穷大(RP)四舍五入模式,用于将浮点值四舍五入为两个整数浮点值中最靠近正无穷大的一个。例如,值2.2将被四舍五入为整数值3.0,并且,值-2.4将被四舍五入为整数值-2.0。
[0078].四舍五入为负无穷大(RM)四舍五入模式,用于将浮点值四舍五入为两个相邻整数浮点值中最靠近负无穷大的一个。例如,值3.2将被四舍五入为整数值3.0,并且,值-6.9将被四舍五入为整数值-7.0。
[0079]本说明书的剩余部分将只对RU、RZ和RNE四舍五入模式进行描述。这是因为RP和RM四舍五入模式可以通过采用针对其他四舍五入模式的处理来实现。RP四舍五入模式可以通过使用RU四舍五入模式(如果要被四舍五入的浮点值是正数)和RZ四舍五入模式(如果要被四舍五入的浮点值是负数)来实现。相反地,RM四舍五入模式可以通过执行RZ四舍五入模式(如果要被四舍五入的浮点值是正数)和RU四舍五入模式(如果要被四舍五入的浮点值是负数)来实现。该浮点值的符号位可以用来针对RP和RM的情形选择使用RU还是RZ四舍五入。因此,对RU和RZ四舍五入的稍后参照还隐含地描述了 RP和RM四舍五入的特征。
[0080]因此,在步骤64处确定四舍五入模式。例如,控制电路4可以基于FRINT指令的操作码或基于在指定哪种四舍五入模式应被使用的指令内的字段来做这件事。替换地,如果处理电路仅支持一种四舍五入模式,那么使用该种四舍五入模式。RP或RM四舍五入模式可以通过基于要被四舍五入的值的符号位选择RU和RZ四舍五入模式中合适的一种而被使用。如果要使用的四舍五入模式是RU,那么在步骤66处,控制电路4控制处理电路2将基值Obllllllll…存储在基值寄存器10中。另一方面,如果四舍五入模式是RZ或RNE四舍五入模式,那么在步骤68处,控制电路4控制处理电路2来将基值OblOOOOOOO…载入基值寄存器10中。
[0081]在步骤70处,右移位器12将存储于基值寄存器10中的基值向右移位(E-BIAS+1)位位置的移位量,以生成四舍五入值R。在步骤72处,控制电路4确定正在使用哪种四舍五入模式。如果四舍五入模式是RP或RNE,那么在步骤74处,控制电路4控制复用器16来将由右移位器12生成的四舍五入值R提供给加和电路18,加和电路18将该四舍五入值R加至有效位数1F。另一方面,如果四舍五入模式是RZ四舍五入模式,那么在步骤76处,控制电路4控制复用器16通过将零值提供给加和器18来将该四舍五入值置零,其中,加和器18将零值加至有效位数1F。由加和电路18执行的加和的结果作为和值来输出。 [0082]同时,在步骤80处,控制电路4控制掩码生成电路20通过使用在步骤70处由右移位器12生成的四舍五入值R来生成掩码。即使在RZ四舍五入模式的情形中,掩码生成器20仍使用未置零状态的四舍五入值R。掩码生成器20生成在比该四舍五入值R的首非零位的位置更有效的任意位位置采用位值I以及在任意剩余位位置采用位值O的掩码。由于该四舍五入值R的首非零位在与该有效位数1.F的最高有效小数值位相对应的位位置,因此,该掩码将在与该有效位数1.F的整数值位位置相对应处具有位值I,并且,在与该有效位数1.F的小数值位位置相对应处具有位值O。
[0083]在步骤82处,控制电路4检查该四舍五入模式是否是RNE四舍五入模式,并且检查在步骤62处由右移位器14生成的状态标志L、G、S的值。如果该四舍五入模式不是RNE四舍五入模式,L标志不等于0,G标志不等于I,或S标志不等于0,那么不需要修正该掩码,因此,在步骤84处,控制电路4控制复用器24来将该未修正的掩码传递给AND门26。AND门26将该掩码应用到由加和电路18产生的和。这清除了和的小数值位,以便生成整数有效位数。该整数有效位数被置于输出寄存器30中,在该寄存器中该整数有效位数可以在执行其他浮点操作时被处理电路2访问。
[0084]另一方面,如果在步骤82处,确定RNE四舍五入模式正被使用,那么该掩码需要被修正来保证在浮点值位于两个整数正中间的情形中时该值被四舍五入为偶数值。如果状态标志具有值L = O, G= I, S = 0,那么,原始浮点值正好位于两个整数中间,并且向上四舍五入该值将得到奇数值。因此,在这种情形中,该掩码在步骤86处被掩码修正电路22通过将由掩码生成器20生成的掩码向左移位I位位置进行修正。这生成了这样的掩码,即在该掩码中,除了小数值位位置,该有效位数的最低有效整数值位位置也与具有值O的掩码位相对应。复用器24将修正的掩码提供给AND门26,AND门26将修正的掩码应用到由加和电路18产生的和。这清除了和值的所有小数值位,并且还清除了最低有效整数值位来保证按照RNE四舍五入模式的要求,四舍五入的整数浮点值是偶数值。该结果然后被置于输出寄存器30中。
[0085]因此,如图2和图3所示,该四舍五入为整数浮点操作的不同四舍五入模式可以在硬件中实现,并且从而可以比软件实现更快地执行,其中,软件实现使用多条指令来执行操作的不同阶段。而且,由于该四舍五入为整数浮点操作的加和和掩蔽部分在原始的有效位数而不是在经位移的有效位数上执行,因此,由AND门26产生的结果已经是标准化的,所以不需要执行进一步向左位移来将该浮点值标准化。因此,不需要将左移位器增加至处理管线的末端,从而允许使用处理电路2对浮点操作进行更快速处理。
[0086]用于执行FRINT操作的电路可以至少部分地与用于执行其他浮点操作的电路共享。图5示出了用于执行浮点加和操作的处理电路的示例。当执行加和操作时,两个要被相加的浮点值被置于处理电路2的阶段El中的寄存器opa和opb中。在阶段E3处,这两个操作数中的一个可以被移位依赖于这两个值的指数间的区别的移位量,以将每个操作数中具有同样有效性的位值对齐。在步骤E4处,经对齐的值然后被相加以生成和值。
[0087]图5中显示的处理电路2中的一些可以再用于执行FRINT操作。可以将要被四舍五入的有效位数置于与图2的寄存器8相对应的寄存器opa中,并且可以将基值B置于与图2的寄存器10相对应的寄存器opb中。图2中显示的右移位器12可以然后通过使用图5处理电路2的阶段E3中的右移位器来实现。此外,图2的加和器18可以通过使用图5的阶段E4显示的加和器来实现。在该示例中,图2的掩码生成和修正电路20、22,AND门26,以及右移位器14不与该加和电路共享,因此,除了图5中显示的加和电路外,这些也将被提供。通过在可能时 对不同处理操作共享电路,可以减少能耗和电路面积。
[0088]因此,当执行FRINT操作时,该有效位数和基值可以在阶段El和E2被输入到电路。在阶段E3处,四舍五入值可以使用右移位器12从该基值进行构建。在阶段E4处,可以将该有效位数和四舍五入值相加来生成和值。如图2中所示,将通过电路20、22、24、26生成掩码并将其应用到和值。
[0089]从图5中将看到,处理电路的阶段E4实际上产生该有效位数和该四舍五入值的两个和值。这可能是针对浮点加和操作和FRINT操作二者的情形。两个和值在四舍五入在和值被标准化时导致指数增加的情形中被计算。通过对指数的两个可能的结果计算两个和值,并且然后选出是正确结果的那个和值,不需要在阶段E4之后对该结果值进行标准化,因此,可以减少执行该操作所需的处理周期数。
[0090]图6显示了使用本技术执行RU四舍五入的示例。例如,四舍五入为整数浮点(FRINT)指令被执行来对浮点值2.25执行RU四舍五入,以给出整数浮点结果3.0。等于
2.25的该浮点值的存储格式如图6中所示。包括隐含位,该有效位数1.F为OblOOlOOOO…。由于RU四舍五入模式正被使用,因此,基值B被设置为OblllllllL...。由于L、G和S标志与RU四舍五入模式不相关,因此,对这些标志的计算没有在图6中示出,尽管应当认识到:即使实际上对于该四舍五入为整数浮点操作来说不需要这些标志,但是仍可以计算这些标
O
[0091]指数E是128,指数偏移是127,因此E-BIAS+1 = 2。因此,基值B被向右移位了 2位位置,以生成四舍五入值RObOOllllll...,如图6中所示。该四舍五入值然后通过掩码生成电路20被转换为掩码以得到掩码Obl 1000000...,即该四舍五入值R中的首非零位左边的位值具有值I并且其他位具有值O。加和电路18然后将有效位数1.F加至四舍五入值R来生成和值Obl 1001111…。然后将该掩码应用到该和值来清除所有小数值位,得到结果ObllOOOOOO…。然后在四舍五入的有效位数中隐含的I被删除,并且,该有效位数的剩余部分(OblOOOO…)被存储在输出寄存器30中。如图6的底部所示,该值与整数浮点值3.0相对应,该整数浮点值是RU四舍五入的正确四舍五入结果。
[0092]图7显示了使用本技术执行RNE FRINT的示例。在该示例中,FRINT被应用到值6.5。由于RNE四舍五入正被使用,并且该值介于两个整数正中间,因此,该值被四舍五入为最接近的偶数值(整数值6.0)。所存储的浮点值6.5的表达式在图7的顶部示出。将该隐含的I位与所存储的有效位数相结合来生成图7中所示的有效位数1.F0bll010000-o指数E是129,指数偏移BIAS是127,并且该有效位数明确指示的位(不包括隐含的I位)的数目 N 是 23。因此,E-BIAS+1 = 3,并且,N-(E-BIAS) =21。
[0093]在RNE四舍五入中,需要状态标志L、G、S来确定该掩码是否需要被修正来得到偶数值。因此,对L、G和S标志的计算在图7中示出。由于N-(E-BIAS) = 21,因此右移位器14将有效位数1.F向右移位21位位置来将该有效位数转换为整数值。然后如图4中所示的计算L、G、S标志以得到L = O, G = I, S = O,如图7所示。这表明原始有效位数的整数值位具有偶数值,并且小数值位具有刚好二分之一的值。
[0094]由于正在执行RNE四舍五入,因此,基值B为OblOOOOOOO…。由于E-BIAS+1 = 3,因此,右移位器12将基值B向右移位3位位置来得到四舍五入值RObOOOlOOO0...。掩码生成器20将该四舍五入值R转换为掩码OblllOOOOO0...。由于正在使用RNE四舍五入,并且L = O,G =1,S = 0,因此,需要修正掩码来保证偶数四舍五入结果。掩码修正电路22因而将该掩码向左移位I位位置来得到修正的掩码Obl 1000000…。
[0095]同时,加和电路18将未位移的有效位数1.F加至四舍五入值R来生成和Obl 1100000…。然后将该修正的掩码应用到该和来生成四舍五入的有效位数ObllOOOOO0...,在该有效位数中,小数值位和最低有效整数值位均已被清除。首I然后被删除,并且剩余位被作为F存储在输出寄存器30中。如图7底部所示,所存储的四舍五入的值与正确的四舍五入的值6.0相对应。
[0096]图8显示了使用RZ四舍五入来将值6.75四舍五入为整数值6.0的示例,其中,整数值6.0是离零最近的相邻整数。使用图8顶部所示的编码来将值6.75表示为浮点的形式。包括隐含的首I位,有效位1.F为ObllOllOOO…。指数E = 129,指数偏移BIAS =127,因此,E-BIAS+1 = 3。再一次没有示出对L、G和S标志的计算,因为这对于RZ四舍五入来说不需要,但是应当认识到,处理电路2仍可以计算这些标志。
[0097] 由于使用RZ四舍五入,基值BOblOOOOOO0...被载入基值寄存器10中。应当认识到,如要需要,任何其他具有首非零位的基值(例如,Obllllllll…或OblOlOlOlO…)也可以用于RZ四舍五入,这是因为对于RZ四舍五入,四舍五入值在将其加至有效位数之前将被置零,因此,为了生成正确的掩码,重要的是该基值的首位具有值I。基值B被向右移位3位位置来生成四舍五入值0b00010000…。掩码生成电路20使用四舍五入值R来生成用于清除和值小数值位的掩码Obl1100000…。
[0098]由于正在使用RZ四舍五入,在将置零的四舍五入值加至有效位数1.F之前,四舍五入值R通过复用器16来置零。因此,有效位数1.F在和值中保持不变。然后由掩码生成器20生成的掩码被应用到和值来生成四舍五入的整数浮点值。该有效位数的首位被删除,并且,该有效位数的剩余部分被存储于寄存器30中。如图8的底部所示,该四舍五入的值的表达式与正确的整数值6.0相对应。
[0099]图9示出了可以用在一些实施例中的虚拟机实现。虽然在较早描述的实施例在用于操作支持有关技术的具体处理硬件的装置和方法方面实现了本技术,但是还可能提供所谓的硬件设备的虚拟机实现。这些虚拟机实现在主处理器106上运行,该主机处理器通常运行支持虚拟机程序102的主操作系统104。通常,需要大功率处理器来提供以合理速度执行的虚拟机实现,但是这样的方法在某些环境中是合理的,例如,当由于兼容性或再利用的原因,有运行对于另一个处理器来说是本地的代码的需要时。虚拟机程序102能够运行应用程序(或操作系统)100来给出与通过真实的硬件设备对程序的运行将给出的结果相同的结果。因此,可以使用虚拟机程序102从应用程序100内运行程序指令。
[0100]尽管本文参照附图详细描述了本发明的说明性的实施例,但是应当明白,本发明不限制于这些精确的实施例,并且本领域的技术人员可以在不背离由所附权利要求书所定义的本发明的范围和精神的情况下对其实施各种变化和修改。
【权利要求】
1. 一种数据处理装置,包括: 处理电路,被配置来执行用于将浮点值四舍五入为整数浮点值的四舍五入为整数浮点操作,所述浮点值具有有效位数和指数;以及 控制电路,被配置来控制所述处理电路,以执行所述四舍五入为整数浮点操作来响应对浮点四舍五入为整数浮点指令的执行; 所述处理电路包括: 移位电路,被配置来通过将基值移位移位量来生成四舍五入值,其中所述移位量依赖于所述浮点值的所述指数; 加和电路,被配置来将所述四舍五入值加至所述浮点值的所述有效位数以生成和值; 掩码生成电路,被配置来生成用于清除所述和值的具有与所述有效位数的小数值位位置相对应的位位置的位的掩码;以及 掩蔽电路,被配置来将所述掩码应用于所述和值来生成所述整数浮点值。
2.如权利要求1所述的数据处理装置,其中,所述移位电路被配置来将所述基值向右移位来生成所述四舍五入值。
3.如权利要求1和2中任意一项所述的数据处理装置,其中,所述四舍五入值在与所述浮点值的所述有效位数的最高有效小数值位的位位置相对应的位位置处具有首非零位。
4.如权利要求1-3中任意一项所述的数据处理装置,其中: 所述基值具有非零值的最高有效位;并且 所述移位电路被配置来将所述基值向右移位(E-BIAS+1)位位置的移位量,其中,E是所述浮点值的所述指数,并且,BIAS是所述浮点值的指数偏移。
5.如权利要求1-4中任意一项所述的数据处理装置,其中,所述掩蔽电路包括AND门,该AND门被配置来将按位AND操作应用到所述和值和所述掩码。
6.如权利要求5所述的数据处理装置,其中,所述掩码的位在与所述有效位数的小数值位位置相对应的位位置处具有位值O。
7.如权利要求6所述的数据处理装置,其中,所述掩码的位在与所述有效位数的整数值位位置相对应的位位置处具有位值I。
8.如权利要求1-7中任意一项所述的数据处理装置,其中,所述掩码生成电路被配置来基于所述四舍五入值生成所述掩码。
9.如权利要求1-8中任意一项所述的数据处理装置,其中,响应于对浮点加和指令的执行,所述控制电路被配置来控制所述处理电路,以使用所述移位电路和所述加和电路来执行加和操作。
10.如权利要求1-9中任意一项所述的数据处理装置,其中,所述处理电路具有至少一种四舍五入模式,该模式用于在所述四舍五入为整数浮点操作期间,当所述浮点值是介于两个整数浮点值之间的值时,选择将所述浮点值四舍五入为所述两个整数浮点值中的哪一个。
11.如权利要求10所述的数据处理装置,其中,所述处理电路具有多种四舍五入模式,所述浮点四舍五入为整数浮点指令指定所述多种四舍五入模式中的哪种应该被用于所述四舍五入为整数浮点操作。
12.如权利要求10和11中任意一项所述的数据处理装置,其中,所述处理电路具有远离零四舍五入(RU)四舍五入模式,该模式用于将所述浮点值四舍五入为所述两个整数浮点值中具有最大绝对量值的那一个。
13.如权利要求12所述的数据处理装置,其中,在所述RU四舍五入模式中,所述基值的所有位具有非零位值。
14.如权利要求10-13中任意一项所述的数据处理装置,其中,所示处理电路具有四舍五入为最接近、靠近偶数(RNE)四舍五入模式,该模式用于将所述浮点值四舍五入为所述两个整数浮点值中最接近的,同时将位于所述两个整数浮点值正中间的浮点值四舍五入为所述两个整数浮点值中是偶数值的那个。
15.如权利要求14所述的数据处理装置,其中,在所述RNE四舍五入模式中,所述基值的最高有效位具有非零位值,并且,所述基值的剩余位具有零位值。
16.如权利要求14和15中任意一项所述的数据处理装置,其中,在所述RNE四舍五入模式中,如果所述浮点值位于所述两个整数浮点值正中间,并且所述有效位数的最低有效整数值位具有O位值,那么,所述掩码生成电路被配置来修正所述掩码,并且所述掩蔽电路被配置来将所述修正的掩码应用到所述和值来清除所述和值的具有与所述有效位数的所述最低有效整数值位相对应的位位置的那一位。
17.如权利要求16所述的数据处理装置,其中,所述掩码生成电路被配置来通过将所述掩码向左移位一位位置来修正所述掩码。
18.如权利要求10-17中任意一项所述的数据处理装置,其中,所述处理电路具有四舍五入至零(RZ)四舍五入模式,该模式用于将所述浮点值四舍五入为所述两个整数浮点值中具有最小绝对量值的那个。
19.如权利要求18所述的数据处理装置,其中,在所述RZ四舍五入模式中,在将置零的四舍五入值加至所述有效位数来生成所述和值之前,所述四舍五入值的所有位都被置零,并且所述掩码通过使用未置零的四舍五入值来生成。
20.一种存储计算机程序的计算机可读存储介质,所述计算机程序用于控制计算机来提供与权利要求1-19任意一项中所述的数据处理装置相对应的虚拟机运行环境。
21.一种数据处理装置,包括: 处理装置,用于执行四舍五入为整数浮点操作,所述操作用于将浮点值四舍五入为整数浮点值,所述浮点值具有有效位数和指数;以及 控制装置,用于控制所述处理装置以执行所述四舍五入为整数浮点操作来响应对浮点四舍五入为整数浮点指令的执行; 所述处理装置包括: 移位装置,用于通过对基值移位移位量来生成四舍五入值,所述移位量依赖于所述浮点值的所述指数; 加和装置,用于将所述四舍五入值加至所述浮点值的所述有效位数来生成和值; 掩码生成装置,用于生成掩码,所述掩码用于清除具有与所述有效位数的小数值位位置相对应的位位置的所述和值的位;以及 掩蔽装置,用于将所述掩码应用到所述和值以生成所述整数浮点值。
22.—种执行四舍五入为整数浮点操作的方法,所述操作用于将浮点值四舍五入为整数浮点值,所述浮点值包括有效位数和指数,所述方法包括步骤:通过将基值移位移位量来生成四舍五入值,所述移位量依赖于所述浮点值的所述指数; 将所述四舍五入值加至所述浮点值的所述有效位数以生成和值; 生成用于清除所述和值的具有与所述有效位数的小数值位位置相对应的位位置的位的掩码;并且 将所述掩码应用到所述和值以生成所述整数浮点值; 其中,所述方法由处理电 路执行,以响应对浮点四舍五入为整数浮点指令的执行。
【文档编号】G06F7/499GK103988170SQ201280060336
【公开日】2014年8月13日 申请日期:2012年11月29日 优先权日:2011年12月7日
【发明者】大卫·雷蒙德·鲁茨, 内尔·伯吉斯, 萨布琳娜·玛丽·罗梅洛 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1