首页> 中国专利> 从十进制浮点转换到比例二进制编码十进制的系统和方法

从十进制浮点转换到比例二进制编码十进制的系统和方法

摘要

一种从十进制浮点(DFP)到比例二进制编码十进制(SBCD)的转换系统和方法。所述系统包括接收DFP数的机构。所述系统还包括对DFP数执行系数展开,从而产生SBCD数的二进制编码十进制(BCD)系数部分的机构,和对DFP数执行指数抽取,从而产生SBCD数的指数部分的机构中的至少一个。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-06-27

    授权

    授权

  • 2007-06-06

    实质审查的生效

    实质审查的生效

  • 2007-04-11

    公开

    公开

说明书

技术领域

本发明涉及十进制浮点(decimal floating point:DFP)数,更具体地说涉及从DFP数转换到比例二进制编码十进制(scaled binary codeddecimal:SBCD)浮点数。

背景技术

DFP已在计算器中使用许多年,但是首次正在成为IEEE标准的一部分(754R浮点标准)。由IEEE 754R标准定义的DFP格式包括:32位(bit)单精度格式,64位双精度格式,和128位扩展精度格式。这种新标准向计算机设计人员提供开发相对于该新标准优化的特定运算的手段。在运算数的标准化之前,不可能开发加速这些类型的计算的特定运算。对于一些商业工作量来说,软件中的DFP运算的模拟能够支配处理计时。

随着新标准的出现和把十进制算术运算用于金融计算的增多,最好是高性能地实现这些运算。

发明内容

本发明的例证实施例包括一种用于从十进制浮点(DFP)转换到比例二进制编码十进制(SBCD)的系统。所述系统包括接收DFP数的机构。所述系统还包括至少下列之一:对DFP数进行系数展开从而产生SBCD数的二进制编码十进制(BCD)系数部分的机构,和对DFP数执行指数抽取从而产生SBCD数的指数部分的机构。

另外的例证实施例包括从DFP转换到SBCD的方法。所述方法包括接收DFP数。所述方法还包括至少下列之一:执行对DFP数的系数展开从而产生SBCD数的系数部分,和执行对DFP数的指数抽取从而产生SBCD数的指数部分。

其它的例证实施例包括从DFP转换到SBCD的系统。所述系统包括接收DFP数的机构。所述系统还包括执行系数展开的机构或执行指数抽取的机构。执行系数展开的机构从DFP数产生SBCD数的BCD系数部分。执行指数抽取的机构从DFP数产生SBCD数的指数部分。执行系数展开的机构由双精度硬件实现。DFP数是单精度、双精度或扩展精度。执行系数展开包括确定DFP数是否是特殊数,如果DFP数是特殊数,那么设置条件码。执行指数抽取包括确定DFP数是否是特殊数,并设置SBCD的指数部分,以指示SBCD数是特殊数。

通过本发明的技术实现另外的特征和优点。这里详细说明了本发明的其它实施例和方面,所述其它实施例和方面被视为要求保护的发明的一部分。参考下面的说明和附图,可更好地理解本发明的优点和特征。

附图说明

当说明书完结时,在权利要求中特别指出并且明确要求保护被视为本发明的主题。结合附图,根据下面的详细说明,本发明的上述和其它目的、特征和优点是明显的,其中:

图1是根据本发明的例证实施例,实现系数从BCD到DPD的压缩的例证硬件图;

图2是根据本发明的例证实施例的把34BCD数位系数转换成四倍精度DFP运算数的处理的方框图;

图3是根据本发明的例证实施例的把SBCD数的指数部分转换成DFP数的例证硬件图;

图4是根据本发明的例证实施例的实现从DPD到BCD的系数的展开的例证硬件图;

图5是根据本发明的例证实施例的把四倍精度DFP运算数转换成34BCD数位系数的方框图;

图6是根据本发明的例证实施例的实现从DFP数到SBCD数的转换的抽取指数部分的例证硬件图。

下面的详细说明参考附图举例说明本发明的例证实施例,以及优点和特征。

具体实施方式

本发明的例证实施例包括把DFP数的系数转换成SBCD和从SBCD转换到DFP数的系数的运算。实施例支持三种不同的DFP格式(单精度-32位,双精度-64位,和扩展精度128位)。另外,例证实施例设置允许处理器快速检测何时源运算数包含无效的数据或者特殊数(例如:无穷大,静态非数字(qNaN)和信令非数字(sNaN))的条件码。本发明的例证实施例还描述了抽取和设置三种不同DFP格式的DFP数字的指数字段的运算。这些运算利用在插入指令和抽取指令之间兼容的数字格式处理特殊的数字。设定条件码,以便处理器快速检测特殊数何时已被处理。

例证实施例包括从SBCD数(包括BCD系数和二进制指数)到DFP数的转换,和从DFP数到SBCD数的转换。从SBCD数到DFP数的转换包括BCD系数的压缩和把SBCD指数插入到DFP数中。从DFP数到SBCD数的转换包括把DFP系数展开成BCD系数,和把DFP指数抽取成SBCD二进制指数。

下面在表1中表示了SBCD数的三种不同格式。这里使用的术语SBCD数指的是包括用BCD表示的系数和用二进制表示的指数,以及可选的一位符号字段的数字。

表1 SBCD数格式

格式        每个字段中的位数

            符号     指数        系数

单精度      1        8           28(7数位)

双精度      1        10          64(16数位)

扩展精度    1        14          136(34数位)

下面在表2中表示了DFP数的三种不同格式。符号字段(在表2中标记为“S”)指示运算数的符号,组合字段(在表2中标记为“C”)包含编码成五位编码格式的系数的高位最高有效数位(MSD)(upper mostsignificant digit)和两个最高指数位,偏移指数延续字段(表2中标记为“BEC”)包含指数的除两个最高有效位之外的所有位,系数延续字段(表2中标记为“CC”)以密集压缩十进制(densely packed decimai:DPD)格式包含系数的除MSD之外的所有数位(digit)。

表2 DFP数格式

格式        每个字段中的位数

            S        C        BEC        CC

单精度      1        5        6          20

双精度      1        5        8          50

扩展精度    1        5        12         110

如前所述,组合字段包含按照五位编码格式编码的系数的高位MSD和两个最高有效指数位。下面,表3表示如在IEEE 754R标准中描述的这种5位编码,其中d0,d1,d2,d3来自系数的MSD的BCD编码,b0,b1是指数的两个最高有效位。

表3 组合字段的编码

条件            组合字段编码

MSD=0-7        b0,b1,d1,d2,d3

MSD=8或9       1,1,b0,b1,d3

无穷大          1,1,1,1,0

NaN             1,1,1,1,1

组合字段被例证实施例用于快速识别特殊的数字,例如(但不限于):qNaN,sNaN和无穷大值。通过检查组合字段中的数位,能够检测特殊数。

系数的压缩(BCD到DFP)

压缩运算主要处理包含系数数据的最高有效数位(以及指数数据的两个最高有效位)的组合字段,和包含取决于目标DFP格式,压缩成20、50或110 DPD位的系数的剩余7、15或33个BCD数位的系数延续字段。压缩运算获得BCD系数,并为DFP数的存储创建DPD系数,从基于系数的最高有效BCD数位的值产生5位组合字段。这里,这也被称为来自BCD的压缩(compress from BCD:CBCDR)

CBCDR运算可被实现成一条计算机指令,所述计算机指令从源运算数获得16个BCD系数数位,把最右侧的15数位压缩成DPD位,并把它们写入目标寄存器的最右侧50位。最高数位被编码到组合字段中(假定指数值为0),并被写入目标寄存器中。符号字段和目标寄存器的6-13位(双精度运算数的BEC)分别为正和零。如果源寄存器包含无效的BCD数字码,那么设置条件码1,否则设置条件码0。基于有效的十进制数据设置条件码避免了对专用于核实源数据的额外指令的需要,并且节省了典型处理器的大量循环和指令。

图1是根据本发明的例证实施例,实现系数从BCD到DPD的压缩(即,CBCDR指令)的例证硬件图。图1包括作为给有效数位检测块110,BCD-组合字段编码器108和多个BCD-DPD编码器106的输入的一个16数位BCD系数102。这里,所述多个BCD-DPD编码器也被称为一个DPD-BCD编码器库。响应确定BCD系数运算数102是否是有效BCD数字,设置条件码112。在例证实施例中,如果SBCD系数102是有效的BCD数,那么条件码被设为0,如果BCD系数102包含无效的BCD数,那么条件码被设为1。

BCD-DPD编码器106均把三个BCD数位(12位)的BCD系数120压缩成10位的DPD。对SBCD系数102的除了MSD外的所有数位应用压缩。对于双精度数字,压缩后的系数被保存在DFP数字104a的50个最低有效位中。BCD-组合字段编码器108根据SBCD数字的系数的MSD创建前面说明的5数位组合字段。组合字段被保存在DFP数字104a的第2-第6位中。

对于双精度格式化运算数,从图1中描述的处理输出的64位DFP数字包括64位,包括最高有效位(位0)中的符号位,接下来的5个最高有效位(位1-5)中的组合字段,偏移指数延续字段(位6-13)中的0,和系数延续字段(位14-63)中的压缩系数。

如上所述,为预期是工作量中使用的最常见运算数的双精度DFP运算数而设计CBCDR运算。但是,这些指令也可被用于处理扩展精度运算数。在图2中描述了把34数位的BCD系数压缩成扩展格式DFP数字的处理。

把34数位的BCD系数转换成四倍精度DFP运算数的处理包括一系列的移位、合并和CBCDR运算。左侧的第一个源寄存器202(34数位BCD系数的低阶位)被压缩成DPD格式的50位,并被写入右侧的第一个中间寄存器208中。第二个源寄存器204(34数位BCD系数的2-18数位)被向左移动一个数位,并且来自第一个源寄存器202的MSD被合并到空出的最右侧的数位中。该数据随后被压缩成50位的DPD数据,并被写入第二个中间寄存器210中。

随后,第三个源寄存器206被移位,直到它被左对齐,并且在第二个源寄存器204中未被处理的两个数位(数位0-1)被合并到移位后的第三个源运算数数据的右侧为止。如同关于CBCDR指令所述那样进行最终的压缩,以致MSD被处理,从而它与目标寄存器的组合字段对齐。结果被写入第三个中间寄存器212中。最后的步骤是对齐中间寄存器208、210和212中的数据,并将其合并成目标寄存器对214,同时符号位和偏移指数延续字段分别被设成正和0。

由箭头216描述的处理是前面关于图1说明的CBCDR运算。该处理可由顺序执行的相同硬件/软件指令,和/或通过使三组相同的硬件/软件指令并行执行,从而产生第一个中间寄存器208,第二个中间寄存器210和第三个中间寄存器212中的结果来实现。另外,相同的CBCDR运算可被用于压缩单精度格式化数字。相同的硬件(例如64位硬件)和/或软件(例如毫码(millicode))可被用于对由关于十进制浮点数字的IEEE 754R标准规定的三种精度中的任意一种执行压缩。

指数的插入(BCD数字到DFP)

把出自SBCD数的二进制指数插入DFP数的指令主要处理组合字段和偏移指数延续字段,所述偏移指数延续字段包含指数数据的剩余6、8或12位,取决于格式。三种插入指数指令包括插入指数单精度,插入指数双精度,和插入指数扩展精度。这些指令中的每个指令从其值是将被插入目标寄存器中的DFP数中的偏移指数的源寄存器读取二进制整数。在目标寄存器中编码的系数的MSD被读取,以确定组合字段应被如何编码。组合字段和指数延续字段随后被更新。所述更新把目标寄存器中的目标DFP数的指数值设成包含在源寄存器中的值。

如果源寄存器为负(位0=1),那么目标寄存器将用特殊数更新。在例证实施例中,两个最低有效位被用于确定是否用代表无穷大(位62:63=11′b),qNaN(位62:63=10′b)或sNaN(位62=0′b)的值更新目标寄存器。

图3根据本发明的例证实施例,描述用于实现从SBCD数的二进制指数部分到DFP数的指数部分的转换的指数插入的例证硬件图。图3描述了一个64位的二进制指数302,和从参考图1说明的处理输出的64位DFP数104a。图3中描述的处理的输出是一个更新的64位DFP数104b,它包括对组合字段和偏移指数延续字段的更新。如果二进制指数为负(位0的值为‘1’),那么64位二进制指数302的运算数位0、62和63被输入特殊数发生器306,从而如前所述那样产生特殊值无穷大、qNaN和sNaN。组合字段发生器308接收二进制指数302的6位(位50-51和54-57),来自特殊数发生器306的结果,运算数大小304,和DFP数104a。组合字段发生器308产生结果的1-5位(组合字段)和指数延续字段的第一位,并把结果写入64位DFP数104b中。图3中的处理还包括更新DFP数104b的偏移指数延续字段的指数延续字段发生器310。在一个例证的实施例中,特殊数发生器306的输出被输入指数延续字段发生器310中。如果特殊数发生器306指示DFP数是qNaN,那么指数延续字段发生器310用“0”重写指数字段的最高有效位(位6)。如果特殊数发生器306指示DFP数是sNaN,那么指数延续字段发生器310用“1”重写指数字段的最高有效位(位6)。

系数的扩展(DFP到BCD)

到BCD的展开运算获得源寄存器中的双精度DFP数,并把保存为DPD和组合字段的DFP数的系数数位转换成被写入目标寄存器中的BCD系数。如果源运算数是诸如无穷大、qNaN或sNaN之类的特殊数,那么目标寄存器的MSD被写为0,并且可据此设置条件码(无穷大=1,qNaN=2,sNaN=3)。这里,该运算也被称为抽取成BCD运算(extract to BCD operation:EBCDR)。

图4根据本发明的例证实施例描述用于EBCDR处理的例证硬件图。图4包括作为给可选的特殊数检测器406,组合字段-BCD解码器404和多个DPD-BCD解码器402的输入的64位DFP数104b。响应确定DFP数104b的系数部分是否是特殊数,设置条件码112。在例证实施例中,如果系数是普通数,那么条件码被设为0,如果系数是无穷大,那么条件码被设为1,如果系数是qNaN,那么条件码被设为2,如果系数是sNaN,那么条件码被设为3。

DPD-BCD解码器402均把10位的DPD扩展成三个BCD数位(12位)。对DFP数字104b中的系数延续字段中的所有位应用解码。对于双精度数字来说,展开的SBCD系数延续字段被保存为16数位BCD系数102的15个最低有效数位。组合字段-BCD解码器404接收DFP数字104b的5数位组合字段108,并产生BCD系数的MSD。

如前所述,为预期是工作量中使用的最常见运算数的双精度DFP运算数而设计EBCDR运算。但是,如图5中所示,这些指令也可被用于处理扩展精度运算数。图5中描述的用于把四倍(quad)精度DFP数转换成34数位BCD系数的处理由一系列的移位、合并和EBCDR展开步骤组成。

图5中描述的处理始于把第一个源寄存器502的低阶50位(DFP扩展精度运算数的低阶50位)转换(例如,利用图4中描述的EBCDR处理)成第一个中间寄存器508中的15数位的BCD数据。第二个源寄存器504的系数延续字段(DFP扩展精度运算数的高阶64位)被左移14位,第一个源寄存器502中的未处理位被合并到它们的右侧。第二个扩展指令(例如,EBCDR)向第二个中间寄存器510中写入另外的15个BCD数位。系数延续字段随后被右移10位,并被保存在第三个源寄存器506中。最终的扩展指令(例如,EBCDR)把剩余的4个BCD数位写入第三个中间寄存器512中。最后,这三个中间寄存器508、510和512中的34 BCD数位的数据被对齐,并被合并到为该运算分配的三个目的地寄存器514中。

由箭头516描述的处理是前面关于图4说明的EBCDR运算。该处理可由顺序执行的相同硬件/软件指令,和/或通过使三组相同的硬件/软件指令并行执行从而产生第一个中间寄存器508,第二个中间寄存器510和第三个中间寄存器512中的结果来实现。另外,相同的EBCDR运算可被用于压缩单精度格式化数字。相同的硬件(例如64位硬件)和/或软件(例如毫码)可被用于对由关于十进制浮点数字的IEEE 754R标准规定的三种精度中的任意一种执行压缩。

指数的抽取(DFP到SBCD)

指数抽取指令(每种格式一个指数抽取指令)从源寄存器读取DFP数的高位双字。对于单精度和双精度,这包含整个DFP数。对于普通数字,该运算从编码的组合字段和偏移指数延续字段抽取偏移指数,并把条件码设为0。如果源DFP数为无穷大,那么SBCD指数被设为-1,并且条件码被设为1。如果源DFP数为qNaN,那么SBCD指数被设为-2,并且条件码被设为2。如果源DFP数为sNaN,那么SBCD指数被设为-3,并且条件码被设为3。按照这种方式使用条件码使处理器能够快速检测何时特殊数被处理,并且不需要检测这些特殊情况的特殊指令。

图6描述用于实现从DFP数104b到二进制指数302的转换的指数抽取的例证硬件图。图6描述作为输入的一个64位DFP数(或者对于扩展精度来说,DFP数的前半部分)104b和运算数大小304。特殊数检测器406根据组合字段和偏移指数延续字段的第一位的值,如上所述寻找特殊数。特殊数检测器406设置条件码112,并把状态输出给指数抽取器602。指数抽取器602根据组合字段和偏移指数延续字段,运算数大小304和来自特殊数检测器406的输出,确定二进制指数302。

本发明的例证实施例允许单独地执行这里描述的处理(系数压缩、系数展开、指数插入和指数抽取)。例如,如果已知数据集包含相同的指数值(即,用于在已知用便士表示的集合中增加数据值),那么不需要抽取指数所需的额外处理和寄存器使用。另一例子可以是用于把数据库从SBCD转换到DFP的例程,不需要把DFP转换回SBCD的任何转换处理。另一例子是检查特殊值,只需要抽取指数处理即可获得必需的条件码。顺次执行每个转换操作的选择也便于减少系统所需的硬件,因为所有运算可以使用相同的中间寄存器。对于可供所需硬件使用的面积或功率有限的硬件实现来说,这种性能与复杂性的折衷是重要的。

本发明的例证实施例提供支持三种IEEE 754R标准DFP格式的四种转换运算。所述运算包括系数压缩、压缩展开、指数插入和指数抽取。这里描述的例证实施例可用在使用最少的额外数据流硬件的标准超标量微处理器中。另外,通过结果值和/或条件码在一般情况下检测和报告特殊数。另外,通过条件码报告无效的十进制数据。

本发明的能力可用软件、固件、硬件或者它们的组合来实现。

作为一个例子,本发明的一个或多个方面可被包括在一个制造产品(例如一个或多个计算机程序产品)中,所述制造产品具有例如计算机可用介质。所述介质其中包含用于提供和促进本发明的能力的计算机可读程序代码装置。所述制造产品可被包括为计算机系统的一部分或者单独销售。

另外,能够提供至少一种可由机器读取的程序存储装置,所述程序存储装置确实包含可由机器执行,从而实现本发明的能力的指令的至少一个程序。

这里描述的附图只是一些例子。在不脱离本发明的精神的情况下,存在这里描述的这些附图或步骤(或运算)的许多变化。例如,步骤可按照不同的顺序执行,或者可以增加、删除或修改步骤。所有这些变化都被视为要求保护的发明的一部分。

虽然说明了本发明的优选实施例,不过显然在现在和在未来,本领域的技术人员能够做出落入下面的权利要求的范围内的各种改进和提高。这些权利要求应被解释成主张对首次描述的发明的恰当保护。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号