专利名称:一种浮点数据转换装置和方法
技术领域:
本发明涉及微处理器技术领域,特别是涉及一种微处理器中浮点数据转换 装置和方法。
背景技术:
中央处理器(CPU)简称微处理器,是计算机的核心单元。微处理器采用的指令集、设计规范(体系结构)是计算机的首要特征,它决定了计算机需要 采用的外围设备和应用软件的类型。当今世界比较流行的两大体系结构分别为以MIPS公司的MIPS32/64为 代表的精简指令集计算机(Reduced Instruction Set Computing, RISC)体系结 构和以Intel公司的X86为代表的复杂指令集计算机(Complex Instruction Set Computing, CISC)体系结构。CISC处理器指令数量繁多, 一些指令可执行 相当复杂的功能, 一般需要许多时钟周期来执行;RISC处理器使用较少数量 的可用指令,以更高的速率执行一组更简单的功能。而采用不同的体系结构的 处理器上运行的程序软件需要针对处理器的体系结构专门编写,X86上的应用 软件通常不能在MIPS (MIPS公司按照他们制定的体系结构设计生产的计算 机通称为MIPS体系结构计算机)体系结构的计算机上运行,即常说的不兼容。然而计算机制造商希望通过在自己制造的一种体系结构的微处理器上运 行更多的现有软件来节省软件开发的开销,同时达到市场占有率最大化的目 的。为了解决这一问题,虚拟机应运而生。 一般地,将具有一种类型体系结构 的CPU的计算机称为主机;同时将需要主机仿真的,不相关体系结构类型的 CPU环境称为目标机,需要一种应用程序,这种程序能够促使主机执行一个 或多个主机指令,响应于给定的目标机指令,运行为目标机编写的软件,这种 程序就叫虚拟机。目前现有的虚拟机有SimOS, QEMU, Transmeta等,但是现有的虚拟
机由于各种体系结构的巨大差异造成虚拟机运行开销过大,执行效率过低,很 难广泛应用到实际工作中。由于X86体系结构是目前个人计算机(PC)上较流行的一类结构,所以多数虚拟机都以X86体系结构为目标机,都需要解决向X86兼容的问题,而 众所周知的棘手问题是对X86所具有的独特浮点数据格式的支持。该类处理 器支持一种独有的浮点数据存储格式80位浮点数据,由十六位的段选择符 (也就是阶)和64位的偏移(也就是尾数)构成。除了X86外,几乎没有处 理器再采用类似的数据格式,由此带来的浮点翻译问题是值得虚拟机研究人员 研究关注的。发明内容本发明所要解决的问题是提供一种浮点数据转换装置和方法,其方便虚拟 机进行二进制翻译工作,提高虚拟机效率,增强处理器兼容性。为实现本发明而提供的一种浮点数据转换装置,包括相互连接的物理寄存 器堆和浮点运算部件;所述物理寄存器堆包括第一浮点寄存器,第二浮点寄存器,第三浮点寄存 器,其中所述第一浮点寄存器,用于存储扩展双精度浮点数据的符号位和阶; 所述第二浮点寄存器,用于存储扩展双精度浮点数据的尾数部分; 所述第三浮点寄存器,用于存储双精度浮点数据;所述浮点运算部件,包括转换模块,用于进行扩展双精度浮点数据和双精 度浮点数据之间的相互转换。所述扩展双精度浮点数据为80位浮点数据;所述双精度浮点数据为64 位浮点数据;所述扩展双精度浮点数据的符号位和阶,占用所述第一浮点寄存器的低 16位;所述扩展双精度浮点数据的尾数部分,占用所述所二浮点寄存器的64位。 所述装置为 一精简指令集计算机处理器;所述扩展双精度浮点数据为复杂指令集计算机处理器的80位扩展双精度 浮点数据。
所述第一浮点寄存器,第二浮点寄存器,第三浮点寄存器为MIPS指令集 的精简指令集计算机处理器32个通用浮点寄存器中动态选用的任意三个通用 寄存器。为实现本发明还提供一种浮点数据转换方法,包括下列步骤步骤A,把内存中的扩展双精度浮点数据划分为符号位和阶,以及尾数部分,分别存储到不同的第一浮点寄存器和第二浮点寄存器中,通过浮点运算部件转换为双精度浮点数据,并存储到第三浮点寄存器中;步骤B,把浮点寄存器中的双精度浮点数据提取符号位与阶,以及尾数部分,通过浮点运算部件转换成扩展双精度浮点数据的符号位与阶,以及扩展双 精度浮点数据的尾数部分,并分别存储在第一浮点寄存器和第二浮点寄存器 中,得到扩展双精度浮点数据。所述步骤A包括下列步骤步骤A1,将内存中的80位扩展双精度浮点数据,分为符号位和阶,以及 尾数部分;步骤A2,第一浮点寄存器中存放80位扩展双精度浮点数据的符号位和阶, 占用此寄存器的低16位;步骤A3,第二浮点寄存器中存放80位扩展双精度浮点数据的尾数部分,共64位;步骤A4,将第一浮点寄存器和第二浮点寄存器作为源寄存器,将第三浮 点寄存器作为目标寄存器,把分别存放在第一浮点寄存器和第二浮点寄存器中 的所述80位扩展双精度浮点数据转换为64位双精度浮点数据。所述80位扩展双精度浮点数据转换为64位双精度浮点数据,是通过下述 精简指令集计算机处理器指令完成的CVT.D丄D $f(t), $f(i), $f(j)。所述步骤B包括下列步骤步骤Bl,将一 64位双精度浮点数据存入第三浮点寄存器中;步骤B2,提取第三浮点寄存器中双精度浮点数据的符号位和阶共11位,转换为80位扩展双精度浮点数据的符号位和阶共16位,存储到第一浮点寄存器中;
步骤B3,提取第三浮点寄存器的尾数部分53位,转换为80位扩展双精 度浮点数据的尾数部分64位,存储到第二浮点寄存器中;步骤B4,将第一浮点寄存器的值作为符号位和阶,第二浮点寄存器的值 作为尾数,得到80位的扩展双精度浮点数据。所述步骤B2中,所述转换为80位扩展双精度浮点数据的符号位和阶, 是通过下述指令完成的CVT.UD.D $f(i), $f(t)。所述B3中,所述转换为80位扩展双精度浮点数据的尾数部分,是通过 下述指令完成的CVT丄D.D $f(j), $f(t)。所述双精度浮点数据为精简指令集计算机处理器的64位双精度浮点数据;所述扩展双精度浮点数据为复杂指令集计算机处理器的80位扩展双精度 浮点数据。本发明的有益效果是本发明的浮点数据转换装置和方法,在不改变主机 体系结构特征、不增加过多硬件设计复杂度、不降低主机自身效率并且不增加 太多功耗的前提下,在处理器设计时縮小主机与目标机体系结构上的差异,在 硬件上为虚拟机的开发和应用提供所需要的支持,使得虚拟机的运行速度大大 提高,可用性大大增强。
图1为本发明浮点数据转换装置结构示意图;图2为本发明利用MIPS指令集的RISC处理器的通用寄存器动态实现第一、二、三浮点寄存器示意图;图3为本发明实施例扩展双精度转换为双精度指令编码格式示意图;图4为本发明实施例双精度数转换为扩展双精度数的高16位指令编码格式示意图;图5为本发明实施例双精度数转换为扩展双精度数的低64位指令编码格 式示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明的一种浮点数据转换装置和方法进行进一步详细说明。应当理 解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明提供一种浮点数据转换装置和方法,其应用在协同设计虚拟机中,在不增加原体系结构数据格式基础上,在RISC处理器上支持X86 (CISC)体 系结构中特殊的浮点数据格式。为了更深入理解本发明,本发明实施例先说明X86的浮点数据格式和以 MIPS64为例的RISC浮点数据格式。X86和MIPS64的浮点格式的定义都是基于IEEE754 (计算机浮点计算标 准)的,所以在浮点数据格式上是一致的。在X86体系下,浮点数据类型有3 种单精度(32位),双精度(64位),扩展双精度(80位),且系统默认 的是扩展双精度。在MIPS64体系下,浮点支持单精度(32位)和双精度(64位),不支 持扩展双精度。这样,在两者之间就存在着语义差距,在翻译X86的80位浮点指令的时 候需要将其转换为64位MIPS可以支持的格式。本发明实施例中,如图l所示,所述浮点数据转换装置,是一精简指令集 计算机(RISC)处理器10,包括物理寄存器堆11,所述物理寄存器堆11包 括第一浮点寄存器lll,第二浮点寄存器112,第三浮点寄存器113。作为一种可实施方式,以包含MIPS指令集的RISC物理寄存器堆11的 32个通用浮点寄存器,动态选用任意三个通用寄存器,作为第一浮点寄存器 111,第二浮点寄存器112和第三浮点寄存器113,担任转换工作。在转换工 作结束后,这三个通用寄存器又可以与其它通用寄存器没有分别地被使用,如 图2所示。其中所述第一浮点寄存器111,用于存储扩展双精度浮点数据的符号位和阶, 占用此寄存器的低16位;所述第二浮点寄存器112,用于存储扩展双精度浮点数据的尾数部分,共64位;所述第三浮点寄存器113,用于存储双精度浮点数据。所述作为浮点数据转换装置的RISC处理器10,还包括浮点运算部件12,与物理寄存器堆11直接相连,所述浮点运算部件12包括转换模块121,用于进行扩展双精度浮点数据和双精度浮点数据之间的相互转换。本发明的一种浮点数据转换方法,包括以下步骤步骤S100,把内存中的80位扩展双精度浮点数据划分为符号位和阶部分, 以及尾数部分,分别存储到不同的第一浮点寄存器111和第二浮点寄存器112 中,通过浮点运算部件转换为64位双精度浮点数据,并存储到第三浮点寄存 器113中。步骤S100具体包括下列步骤步骤SllO,将内存中的80位扩展双精度浮点数据,分为符号位和阶部分, 以及尾数部分。在一个80位浮点数据的第64位处划分,第80位到第64位为第一部分, 共16位,第63位到第0位为第二部分,共64位。划分好后,由用户选择一 种现有的读入方式(MIPS提供了有多种读入方式),分别将两部分读入两个 浮点寄存器Sf (i) , $f (j);步骤S120,浮点寄存器Sf (i)中存放80位扩展双精度浮点数据的符号位 和阶,占用此寄存器的低16位;步骤S130,浮点寄存器Sf (j)中存放80位扩展双精度浮点数据的尾数部 分,共64位;步骤S140,将浮点寄存器Sf (i)和浮点寄存器Sf (j)作为源寄存器,将 浮点寄存器Sf (t)作为目标寄存器,把浮点寄存器Sf (i)和浮点寄存器Sf (j) 中存放的80位扩展双精度浮点数据转换为64位双精度浮点数据。 作为一种可实施方式,所述转换可以通过指令(1)而执行。 CVT.D丄D $f(t), $f(i), $f(j) 〃*扩展双精度转换为双精度 (1)本发明提供的扩展指令式(1)的编码格式如图3所示。 MIPS64指令集的32位指令码的高6位(31bit: 26bit)为opcode域。其 中SPECIAL2 (opcode为011100)指令槽按MIPS的规定是可以由用户自主定 义的。本发明实施例利用现有MIPS64指令集中保留的SPECIAL2空槽的值来 定义。式(l)表示把Sf(i), Sf(j)两个栈寄存器表示的扩展双精度数据转换为双精度 数,存入到栈寄存器$形)中。将输出的64位数据存入浮点寄存器Sf (t)中,得到64位双精度浮点数据。 步骤S200,把第三浮点寄存器113中的64位双精度浮点数据提取符号位 与阶部分,以及尾数部分,通过浮点运算部件转换成80位浮点数据的符号位 与阶部分,以及80位浮点数据的尾数部分,并分别存储在第一浮点寄存器111 和第二浮点寄存器112中,用2个寄存器一起表示80位的扩展双精度浮点数 据,得到80位浮点数据。步骤S200具体包括如下步骤步骤S210,将一64位双精度浮点数据存入浮点寄存器Sf (t)中;步骤S220,提取浮点寄存器Sf (t)中双精度浮点数据的符号位和阶部分共11位,转换为80位扩展双精度浮点数据的符号位和阶部分共16位,存储到浮点寄存器Sf(i)中。作为一种可实施方式,所述转换可以通过指令(2)而执行。 CVT,UD,D $f(i), $f(t)//*双精度转换为扩展双精度的高位 (2) 把浮点寄存器Sf(t)表示的双精度数转换为扩展双精度数的高16位存入$f(i)。本发明提供的扩展指令式(2)的编码格式如图4所示。 将转换后的阶进行0扩展后得到64位浮点数据。因为目标寄存器是64 位的,这里其实只需要16位数据就够了,但是为了存入到一个64位的目标寄 存器Sf (i)中,所以必须对16位以上的48位进行0扩展,存入浮点寄存器Sf (0中;步骤S230,提取浮点寄存器Sf (t)的尾数部分53位,转换为80位浮点数据的尾数部分64位,,存储到浮点寄存器Sf(j)中。提取工作在浮点运算部件中完成,将提取出来的53位数据,转换为80位浮点数据的尾数部分64位。作为一种可实施方式,所述转换可以通过指令(3)而执行。 CVT丄D.D $f(j), $f(t)//*双精度转换为扩展双精度低位 (3)把浮点寄存器Sf(t)表示的双精度数转换为扩展双精度数的低64位存入浮点寄存器SfG)中。
本发明提供的扩展指令式(3)的编码格式如图5所示。所述提取、转换可以按照IEEE754标准的相关规定进行,本领域技术人 员可以根据指令(2)而实现本发明的转换,因此,在本发明中不再一一详细 描述。将转换后的尾数存入浮点寄存器Sf (j)中;步骤S240,将浮点寄存器Sf (i)的值作为符号位和阶,浮点寄存器Sf (P的值作为尾数,得到80位的扩展双精度浮点数据。本发明的浮点数据转换装置和方法,使得非X86体系结构的处理器能够 支持X86中的特殊80位浮点数据类型,从而方便虚拟机进行二进制翻译工作, 提高虚拟机效率,增强处理器兼容性。其1) 本发明装置设计精巧,硬件开销很小;2) 本发明为软件提供很强的仿真支持,可以省去软件对80位浮点数据的 转换,大大减少了软件操作的步骤,提高了工作效率;3) 本发明縮小了不同体系结构间的差异,为协同设计虚拟机以及RISC 和X86之间的兼容做出了开拓性贡献。通过以上结合附图对本发明具体实施例的描述,本发明的其它方面及特征 对本领域的技术人员而言是显而易见的。以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
1、一种浮点数据转换装置,包括相互连接的物理寄存器堆和浮点运算部件,其特征在于所述物理寄存器堆包括第一浮点寄存器,第二浮点寄存器,第三浮点寄存器,其中所述第一浮点寄存器,用于存储扩展双精度浮点数据的符号位和阶;所述第二浮点寄存器,用于存储扩展双精度浮点数据的尾数部分;所述第三浮点寄存器,用于存储双精度浮点数据;所述浮点运算部件,包括转换模块,用于进行扩展双精度浮点数据和双精度浮点数据之间的相互转换。
2、 根据权利要求1所述的浮点数据转换装置,其特征在于,所述扩展双 精度浮点数据为80位浮点数据;所述双精度浮点数据为64位浮点数据;所述扩展双精度浮点数据的符号位和阶,占用所述第一浮点寄存器的低 16位;所述扩展双精度浮点数据的尾数部分,占用所述所二浮点寄存器的64位。
3、 根据权利要求1或2所述的浮点数据转换装置,其特征在于,所述装 置为一精简指令集计算机处理器;所述扩展双精度浮点数据为复杂指令集计算机处理器的80位扩展双精度 浮点数据。
4、 根据权利要求3所述的浮点数据转换装置,其特征在于,所述第一浮 点寄存器,第二浮点寄存器,第三浮点寄存器为MIPS指令集的精简指令集计 算机处理器32个通用浮点寄存器中动态选用的任意三个通用寄存器。
5、 一种浮点数据转换方法,其特征在于,包括下列步骤步骤A,把内存中的扩展双精度浮点数据划分为符号位和阶,以及尾数部 分,分别存储到不同的第一浮点寄存器和第二浮点寄存器中,通过浮点运算部 件转换为双精度浮点数据,并存储到第三浮点寄存器中;步骤B,把浮点寄存器中的双精度浮点数据提取符号位与阶,以及尾数部 分,通过浮点运算部件转换成扩展双精度浮点数据的符号位与阶,以及扩展双 精度浮点数据的尾数部分,并分别存储在第一浮点寄存器和第二浮点寄存器 中,得到扩展双精度浮点数据。
6、 根据权利要求5所述的浮点数据转换方法,其特征在于,所述步骤A 包括下列步骤步骤A1,将内存中的80位扩展双精度浮点数据,分为符号位和阶,以及尾数部分;步骤A2,第一浮点寄存器中存放80位扩展双精度浮点数据的符号位和阶, 占用此寄存器的低16位;步骤A3,第二浮点寄存器中存放80位扩展双精度浮点数据的尾数部分,共64位;步骤A4,将第一浮点寄存器和第二浮点寄存器作为源寄存器,将第三浮 点寄存器作为目标寄存器,把分别存放在第一浮点寄存器和第二浮点寄存器中 的所述80位扩展双精度浮点数据转换为64位双精度浮点数据。
7、 根据权利要求6所述的浮点数据转换方法,其特征在于,所述80位扩 展双精度浮点数据转换为64位双精度浮点数据,是通过下述精简指令集计算 机处理器指令完成的CVT.D丄D $f(t), $f(i), $f(j)。
8、 根据权利要求5至7任一项所述的浮点数据转换方法,其特征在于, 所述步骤B包括下列步骤步骤Bl ,将一 64位双精度浮点数据存入第三浮点寄存器中;步骤B2,提取第三浮点寄存器中双精度浮点数据的符号位和阶共11位,转换为80位扩展双精度浮点数据的符号位和阶共16位,存储到第一浮点寄存器中;步骤B3,提取第三浮点寄存器的尾数部分53位,转换为80位扩展双精 度浮点数据的尾数部分64位,存储到第二浮点寄存器中;步骤B4,将第一浮点寄存器的值作为符号位和阶,第二浮点寄存器的值 作为尾数,得到80位的扩展双精度浮点数据。
9、 根据权利要求8所述的浮点数据转换方法,其特征在于,所述步骤B2 中,所述转换为80位扩展双精度浮点数据的符号位和阶部分,是通过下述指 令完成的CVT.UD.D $f(i), $f(t)。
10、 根据权利要求8所述的浮点数据转换方法,其特征在于,所述B3中, 所述转换为80位扩展双精度浮点数据的尾数部分,是通过下述指令完成的<formula>formula see original document page 4</formula>
11、 根据权利要求8所述的浮点数据转换方法,其特征在于,所述双精度 浮点数据为精简指令集计算机处理器的64位双精度浮点数据;所述扩展双精度浮点数据为复杂指令集计算机处理器的80位扩展双精度 浮点数据。
全文摘要
本发明公开了一种浮点数据转换装置和方法。其装置包括相互连接的物理寄存器堆和浮点运算部件;物理寄存器堆包括第一浮点寄存器,用于存储扩展双精度浮点数据的符号位和阶;第二浮点寄存器,用于存储扩展双精度浮点数据的尾数部分;第三浮点寄存器,用于存储双精度浮点数据;浮点运算部件,包括转换模块,用于进行扩展双精度浮点数据和双精度浮点数据之间的相互转换。其方便虚拟机进行二进制翻译工作,提高虚拟机效率,增强处理器兼容性。
文档编号G06F9/302GK101158892SQ20071017754
公开日2008年4月9日 申请日期2007年11月16日 优先权日2007年11月16日
发明者刘哲源, 玮 段 申请人:中国科学院计算技术研究所