一种risc处理器装置及其模拟浮点栈操作的方法

文档序号:6615771阅读:216来源:国知局
专利名称:一种risc处理器装置及其模拟浮点栈操作的方法
技术领域
本发明涉及微处理器技术领域,特别是涉及一种精简指令集计算机 (RISC)处理器装置及其模拟浮点栈操作,进行浮点数据的压栈和退栈等栈 操作的方法。
背景技术
中央处理器(CPU)简称微处理器,是计算机的核心单元。微处理器采用的指令集、设计规范(体系结构)是计算机的首要特征,它决定了计算机需要 采用的外围设备和应用软件的类型。当今世界比较流行的两大处理器体系结构分别为以MIPS公司的MIPS32/64指令集为代表的精简指令集计算机(Reduced Instruction Set Computing, RISC)处理器体系结构和以Intel公司的X86为代表的复杂指令 集计算机(Complex Instruction Set Computing, CISC)处理器体系结构。CISC 处理器指令数量繁多, 一些指令可执行相当复杂的功能, 一般需要许多时钟周 期来执行;RISC处理器使用较少数量的可用指令,以更高的速率执行一组更 简单的功能。而采用不同的体系结构的处理器上运行的程序软件需要针对处理 器的体系结构专门编写,X86上的应用软件通常不能在MIPS指令集的RSIC 处理器的计算机上运行,即常说的不兼容。然而计算机制造商希望通过在自己制造的一种体系结构的微处理器上运 行更多的现有软件来节省软件开发的开销,同时达到市场占有率最大化的目 的。为了解决这一问题,虚拟机应运而生。 一般地,将具有一种类型体系结构 的处理器(CPU)计算机称为主机;同时将需要主机仿真的,不相关体系结构 类型的处理器(CPU)环境称为目标机,需要一种应用程序,这种程序能够促 使主机执行一个或多个主机指令,响应于给定的目标机指令,运行为目标机编 写的软件,这种程序就叫虚拟机。目前现有的虚拟机有SimOS, QEMU, Transmeta等,但是现有的虚拟 机由于各种体系结构的巨大差异造成虚拟机运行开销过大,执行效率过低,很 难应用到实际工作中。由于X86处理器体系结构是目前个人计算机(PC)上较流行的一类结构, 所以多数虚拟机都以X86处理器体系结构为目标机,都需要解决向X86处理 器兼容的问题,而众所周知的棘手问题是对X86处理器所具有的独特的浮点 栈机制的模拟。 一般地,CISC类处理器,如X86,中都设置一个浮点寄存器 栈,大部分浮点运算都是在寄存器栈参与下进行的。而除了 X86处理器外, 其他处理器,特别是MIPS指令集的RISC处理器没有类似的结构,由此带来 的如何在虚拟机上进行浮点翻译是众多虚拟机研发部门迫切需要解决的热点 问题。X86处理器的浮点运算提供了压栈(浮点装入指令)、退栈(浮点保存指 令)、浮点运算指令和一些其他的辅助指令,程序可以通过浮点装入指令将内 存中的浮点数据压入浮点寄存器栈中,通过浮点运算指令对浮点数据进行运 算,通过浮点保存指令进行退栈,并将栈顶寄存器的内容保存到内存单元中。这种浮点运算方式是CISC处理器,如X86处理器所独有的,其他类型的 处理器,如MIPS指令集的RISC处理器基本上都没有类似的运算方式。一般而言,在非CISC处理器,如使用MIPS指令集的RISC处理器内部, 设置若干个通用的浮点寄存器,这些浮点寄存器统一编号,指令通过这些编号 来直接访问一个固定的浮点寄存器,而X86处理器中,指令所操作的寄存器 随着栈顶指针的变化而变化。 一般地,为了解决二进制数据翻译问题,非CISC 处理器,如RISC处理器需要在内存中开辟一块空间,维护一个仿真的X86浮 点寄存器栈。申请号为200410074532.6的中国申请,公开了一种二进制翻译中对X86 中浮点运算的处理方法,包括以下步骤在运行时环境中设置一个浮点栈,用 于仿真X86中的物理浮点栈;通过浮点寄存器映射的处理和归一方法依次对 源二进制程序中的每个基本块进行处理。其通过用目标机器的寄存器来映射 X86的源寄存器,保证了 X86处理器的浮点运算在目标机器上也是由寄存器 来实现,确保运算的效率;采用归一的方法,确保每个基本块的入口满足每次 top的值相同的假设。但是,这些现有技术虽然能够准确仿真各种X86浮点操作,但是效率非 常低下,无法在性能上实现飞跃。发明内容本发明所要解决的问题是提供一种RISC处理器装置及其模拟浮点栈操作 的方法,其在RISC处理器上能够支持浮点栈操作,从而方便不同架构的虚拟 机进行二进制翻译工作,提高虚拟机效率,增强处理器兼容性。为实现本发明而提供的一种RISC处理器装置,包括浮点寄存器堆,译码 部件和浮点运算部件,还包括控制寄存器,用于控制利用所述浮点寄存器堆模 拟浮点寄存器栈操作;所述译码部件,包括一指针寄存器,用于维护一栈操作指针,存储栈操作 指针的值;所述浮点运算部件,包括一指针操作模块,用于对所述指针寄存器进行操 作,在模拟所述浮点寄存器栈操作时,模拟所述指针寄存器的栈操作指针的栈 操作,修改并监控栈操作指针的状态。所述控制模拟浮点寄存器栈,是指所述控制寄存器维护一个栈使能位,当 使能位置1时,表示处理器将模拟浮点寄存器栈操作;当使能位置O时,表示 处理器将不模拟浮点寄存器栈操作。所述模拟浮点寄存器栈,是利用RISC处理器中编号为0 31的32个浮点 寄存器,模拟得到的。所述栈操作指针为被读、写、增l、减l操作的栈操作指针。所述利用32个浮点寄存器,模拟得到浮点寄存器栈,是指所述控制寄存 器中的栈使能位被置1时,选择32个浮点寄存器中的8个寄存器,模拟X86 处理器的序号为0~7浮点寄存器栈的栈寄存器。为实现本发明目的还提供一种RISC处理器模拟浮点栈操作的方法,包括 下列步骤步骤A,根据栈使能位,决定是否选定浮点寄存器用于模拟浮点寄存器栈 操作,并设置指针寄存器;步骤B,在模拟浮点寄存器栈操作时,对指针寄存器进行操作,模拟栈操 作指针的栈操作,修改并监控栈操作指针的状态。所述步骤A包括下列步骤步骤A1,在控制寄存器中选择一位为浮点栈使能位;当使能位置l时, 表示模拟X86的浮点寄存器栈,进行浮点寄存器栈操作;当使能位置0时,表示不模拟X86的浮点寄存器栈,不进行浮点寄存器栈操作,处理器按照正 常的过程工作;步骤A2,设置一个至少3位的指针寄存器,存放栈操作指针的值。所述步骤B包括下列步骤设置栈操作模式,浮点栈使能位置1,允许用户模拟浮点寄存器栈栈操作; 清除栈操作模式,浮点栈使能位置0,不允许用户模拟浮点寄存器栈进行 浮点栈操作;栈操作指针值增1; 栈操作指针值减l; 读栈操作指针值; 写栈操作指针值。本发明的有益效果是本发明的RISC处理器装置及其模拟浮点栈操作的 方法,提供了很强的仿真支持,可以省去对浮点栈的模拟维护,大大减少在读 取内存上的时间和空间损失,提高工作效率。并縮小了不同处理器体系结构间 的差异,为协同设计虚拟机以及RISC和CISC处理器之间的兼容做出开拓性 的贡献。


图1为本发明RISC处理器装置结构示意图;图2为本发明RISC处理器模拟浮点栈操作流程图;图3为本发明实施例利用MIPS指令集实现设置栈操作模式使能位置1指 令编码示意图;图4为本发明实施例利用MIPS指令集实现清除栈操作模块使能位置0指 令编码示意图;图5为本发明实施例利用MIPS指令集实现栈指针值增1指令编码示意图; 图6为本发明实施例利用MIPS指令集实现栈指针值减1指令编码示意图; 图7为本发明实施例利用MIPS指令集实现读栈指针值指令编码示意图;图8为本发明实施例利用MIPS指令集实现写栈指针值指令编码示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种RISC处理器及其模拟浮点栈操作的方法进行进一步详 细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于 限定本发明。本发明实施例以MIPS64指令集的RISC处理器装置为例,而对本发明的 RISC处理器装置及其模拟浮点栈操作的方法而进行说明,但是,应当指明的 是,其不是对本发明权利要求的限定。本发明实施例中,以提供一种RISC处理器及其模拟浮点栈操作的方法, 其应用在协同设计虚拟机中,在RISC处理器上支持CISC处理器架构浮点栈 操作,如X86处理器中的浮点栈操作。为了更深入理解本发明,本发明实施例先说明CISC处理器体系结构,如 X86处理器的浮点栈操作方法。X86处理器的浮点部件中包括一个浮点寄存器栈,该栈由8个可直接进行 浮点运算的栈寄存器组成,按照顺序进行编号,分别是0 7。之所以称该寄存 器是浮点寄存器栈,其原因在于X86处理器将它们作为一个堆栈进行使用。 浮点寄存器栈是一个向下扩展的循环栈,处理器利用另外一个寄存器中的3 位来标记栈顶所在的位置,这3位被称为TOP指针。当需要向栈寄存器中装入数据,即压栈的时候,TOP指针的值减l,然后 将数据存储到由TOP指针所指示的浮点寄存器中,当TOP指针值为0时,下 一次压栈则将数据压入7号栈寄存器中,TOP指针的值则被设置成7。当需要将堆栈中的数据保存到内存中,即弹出退栈的时候,则进行退栈操 作,退栈操作与压栈操作类似,TOP指针通过增l进行,如果此时TOP指针 值是7,则退栈后的TOP指针值设置位0。在X86处理器中,所述压栈和弹栈操作由硬件自动实现,对用户而言是 透明的。通过指令对浮点数据进行操作时,所见到的浮点寄存器是ST (0) 、 S (1)、……、ST (7)。其中,ST (i)是指距离栈顶第i个单元的寄存器,如果T0P指针值是2,则ST (0)为第2号寄存器,ST (1)为第3号寄存器, 依此类推。下面详细描述本发明的RISC处理器装置。本发明的RISC处理器,包括现有的浮点寄存器堆4,译码部件2,浮点 运算部件3。所述的RISC处理器,还包括控制寄存器l,用于控制利用浮点寄存器堆 4使能或禁止模拟浮点寄存器桟。其维护一个栈使能位,当使能位置1时,表示处理器将模拟X86处理器 的浮点寄存器栈操作;当使能位置0时,表示处理器将不模拟X86处理器的 浮点寄存器栈操作,处理器按照正常的过程进行操作处理。本发明实施例中,利用RISC处理器中编号为0 31的32个现有的浮点寄 存器,模拟X86处理器的浮点寄存器栈操作。所述译码部件2包括一个指针寄存器21,用于维护一个TOP指针,也就 是栈操作指针,存储TOP指针的值,这个TOP指针可以被读、写、增l、减所述浮点运算部件3,包括一指针操作模块31,用于对指针寄存器21进 行操作,在模拟浮点寄存器栈操作时,模拟指针寄存器21的栈操作指针的栈 操作,修改并监控桟操作指针的状态。作为一种可实施方式,如果控制寄存器l中的栈使能位被置位l,则选择 32个浮点寄存器中的8个寄存器,用于模拟X86处理器的浮点寄存器栈的栈 寄存器,序号为0 7。如果控制寄存器l中的栈使能位被置位l,则在运算中被使用,表示寄存 器模拟的浮点寄存器栈存在,那么凡是浮点运算指令中用到的编号小于8的寄 存器,都被当作浮点寄存器栈的栈寄存器使用,从而模拟X86处理器的浮点 寄存器栈。其后指针操作模块31使用TOP指针进行栈寄存器号进行转换,即用户所 见的浮点寄存器号跟程序使用的浮点寄存器号转换,例如,寄存器号是指距离 栈顶第i个单元的寄存器ST (i)加上TOP指针值。如果TOP指针值是2,则 ST (0)为第2号寄存器,ST (1)为第3号寄存器。如果溢出也有相应处理,使得这组寄存器形成了一个循环栈,完成了本发明要实现的模拟X86中浮点寄 存器栈的功能。然后进行后续工作,后续工作与没有置位栈使能相同;如果控制寄存器1中的栈使能位被置位O,即被清零,则在运算屮,认为 寄存器模拟栈不存在,按照现有的工作步骤正常工作。下面进一步详细说明本发明RISC处理器模拟浮点栈操作的方法,其以RISC处理器的8个浮点寄存器组成浮点寄存器栈,通过控制寄存器1,并模 拟X86的TOP指针功能,即栈指针操作功能,完成模拟浮点寄存器的栈操作。 本发明的RISC处理器模拟浮点栈操作的方法,包括如下步骤 步骤SIOO,根据栈使能位,决定是否选定8个浮点寄存器用于模拟浮点 寄存器栈中8个栈寄存器,模拟浮点寄存器栈操作,并设置指针寄存器; 所述步骤S100包括下列步骤步骤SllO,在控制寄存器1中选择一位为浮点栈使能位;当使能位置1 时,表示将模拟X86处理器的浮点栈,进行浮点栈操作;当使能位置0时, 表示不模拟X86处理器的浮点栈,不能进行浮点栈操作,处理器按照正常的 过程工作;步骤S120,设置一个至少3位的指针寄存器21,存放TOP指针的值。 该TOP指针的值可以被读、写、增l、减l, TOP指针的范围是0 7。 TOP指针在压栈时压入7号寄存器,TOP指针的值被设置成6;在弹栈时 如果TOP指针值为7,则弹栈后TOP指针值设置位0。因为TOP指针永远指向栈顶寄存器,本栈为自顶向下生长,即压栈时TOP 指针值减一,弹出时TOP指针值增一,所以向7号寄存器存入数据时(也就 是向7号寄存器压栈),TOP指针值应该减一变为6。当从7号寄存器中弹出 数据时,TOP指针值应该加1变为8,但是由于只有0 7号共8个寄存器, 所以TOP指针值最大为7,当加一时,TOP指针应该指向下一个寄存器,也 就是循环栈中的0号寄存器,此时TOP指针值应该变为0。例如,如果TOP指针的值为3,当使能位为1时,如果参与运算的浮点 寄存器为Sf(i): i<=7,则用浮点寄存器Sf(j)替换浮点寄存器Sf(i)进行运算,其 中j二(i+3)mod8 ;如果寄存器Sf(i): i>7,则无需改变,直接使用浮点寄存器Sf(i)。步骤S200,在模拟浮点寄存器栈操作时,对指针寄存器21进行操作,模 拟栈操作指针的栈操作,修改并监控栈操作指针的状态。 所述步骤S200包括下列步骤步骤S210,设置栈操作模式,浮点栈使能位置l,允许用户模拟浮点寄存 器栈进行浮点栈操作;作为一种可实施方式,设置模拟浮点栈模式,为X86浮点栈模式置位1 可以通过下式指令而执行。其指令格式为SETTM本发明提供的扩展指令的指令编码如图3所示。其利用MIPS指令集中的 SPECIAL2的空的保留值来定义扩展指令。通过指令完成使能位置1操作,为X86浮点栈模式置位,允许用户使用 x86浮点栈进行浮点操作。步骤S220,清除栈操作模式,浮点栈使能位置O,不允许用户模拟浮点寄 存器栈进行浮点栈操作;作为一种可实施方式,本发明实施例清模拟浮点栈模式,X86浮点栈模式 置位O的指令格式为CLRTM本发明提供的扩展指令的指令编码如图4所示。其为X86浮点栈模式清位,不允许用户使用x86浮点栈,而只能使用MIPS 处理器的浮点寄存器进行浮点操作。该置位、清零的栈指针操作指令可以分别完成浮点寄存器栈的激活、禁用 工作。步骤S230,栈操作指针值增l,即TOP指针的值增l; 作为一种可实施方式,本发明实施例栈指针值增1,即TOP指针的值增1的指令格式为INCTOP本发明提供的扩展指令的指令编码如图5所示。 步骤S240,栈操作指针值减l,即TOP指针的值减h 作为一种可实施方式,本发明实施例栈指针值减l,即TOP指针的值减l的指令格式为DECTOP本发明提供的扩展指令的指令编码如图6所示。该TOP指针的值增1、减1指令可以分别模拟X86处理器浮点栈中的入 栈、出栈工作;步骤250,读栈操作指针值,即读出TOP指针的值;作为一种可实施方式,本发明实施例读出TOP指针值操作的指令格式为MFTOP rd其指令功能为将X86浮点栈顶指针的值读入寄存器GPR[rd]。 本发明提供的扩展指令的指令编码如图7所示。步骤S260,写栈操作指针值,即在指针寄存器21中写入当前TOP指针 的值。作为一种可实施方式,本发明实施例完成写TOP指针值操作的指令格式 为MTTOP imm其指令功能为将三位的立即数imm写入x86浮点栈顶指针。本发明提供的扩展指令的指令编码如图8所示。该读、写TOP指针指令可以方便的控制操作浮点栈。为了能更好地理解本发明的RISC处理器模拟浮点栈操作的方法,下面以 加法运算中栈指针操作为例进行说明。在使能位是1, TOP指针值为2时,运算add.s $f(6), $f(l), Sf(9)在RISC 处理器内部进行如下转换模拟X86浮点栈操作被激活,即使能位置1;用Sf(0)替换Sf(6);〃 6+2 mod 8 =0用Sf(3)替换Sf(l);〃 1+2 mod 8 =3Sf(9)无需转换; //9>7所以无需变换,直接使用寄存器Sf(9)最终实际进行运算的表达式为add.s $f(0), $f(3), $f(9) 而此时没有入栈和出栈操作,所以TOP值不会发生变化。 该详细过程如步骤S100中所描述。其模拟了 x86中的循环栈结构,增加了处理器间的兼容性,为虚拟机和编译器中的二进制翻译提供了方便,提高了程序运行的效率。通过以上结合附图对本发明具体实施例的描述,本发明的其它方面及特征 对本领域的技术人员而言是显而易见的。以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
1、一种RISC处理器装置,包括浮点寄存器堆,译码部件和浮点运算部件,其特征在于,还包括控制寄存器,用于控制利用所述浮点寄存器堆模拟浮点寄存器栈操作;所述译码部件,包括一指针寄存器,用于维护一栈操作指针,存储栈操作指针的值;所述浮点运算部件,包括一指针操作模块,用于对所述指针寄存器进行操作,在模拟所述浮点寄存器栈操作时,模拟所述指针寄存器的栈操作指针的栈操作,修改并监控栈操作指针的状态。
2、 根据权利要求1所述的RISC处理器装置,其特征在于,所述控制模 拟浮点寄存器栈,是指所述控制寄存器维护一个栈使能位,当使能位置l时, 表示处理器将模拟浮点寄存器栈操作;当使能位置0时,表示处理器将不模拟 浮点寄存器栈操作。
3、 根据权利要求1所述的RISC处理器装置,其特征在于,所述模拟浮 点寄存器栈,是利用RISC处理器中编号为0~31的32个浮点寄存器,模拟得 到的。
4、 根据权利要求1所述的RISC处理器装置,其特征在于,所述栈操作 指针为被读、写、增l、减l操作的栈操作指针。
5、 根据权利要求3所述的RISC处理器装置,其特征在于,所述利用32 个浮点寄存器,模拟得到浮点寄存器栈,是指所述控制寄存器中的栈使能位被 置l时,选择32个浮点寄存器中的8个寄存器,模拟X86处理器的浮点寄存 器栈的序号为0~7的栈寄存器。
6、 一种RISC处理器模拟浮点栈操作的方法,其特征在于,包括下列步骤步骤A,根据栈使能位,决定是否选定浮点寄存器用于模拟浮点寄存器栈 操作,并设置指针寄存器;步骤B,在模拟浮点寄存器栈操作时,对指针寄存器进行操作,模拟栈操 作指针的栈操作,修改并监控栈操作指针的状态。
7、 根据权利要求6所述的模拟浮点栈操作的方法,其特征在于,所述步骤A包括下列步骤步骤A1,在控制寄存器中选择一位为浮点栈使能位;当使能位置l时, 表示模拟X86的浮点寄存器栈,进行浮点寄存器栈操作;当使能位置0时,表示不模拟X86的浮点寄存器栈,不进行浮点寄存器栈操作,处理器按照正 常的过程工作;步骤A2,设置一个至少3位的指针寄存器,存放栈操作指针的值。
8、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所 述步骤B包括下列步骤设置栈操作模式,浮点栈使能位置l,允许用户模拟浮点寄存器栈操作。
9、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所 述步骤B包括下列步骤清除栈操作模式,浮点栈使能位置0,不允许用户模拟浮点寄存器栈操作。
10、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所 述步骤B包括下列步骤栈操作指针值增1。
11、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所述步骤B包括下列步骤栈操作指针值减l。
12、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所述步骤B包括下列步骤读栈操作指针值。
13、 根据权利要求6或7所述的模拟浮点栈操作的方法,其特征在于,所述步骤B包括下列步骤写栈操作指针值。
全文摘要
本发明公开了一种RISC处理器装置及其模拟浮点栈操作的方法。该处理器装置包括浮点寄存器堆,译码部件和浮点运算部件,还包括控制寄存器,用于控制利用所述浮点寄存器堆模拟浮点寄存器栈;所述译码部件,包括一指针寄存器,用于维护一栈操作指针,存储栈操作指针的值;所述浮点运算部件,包括一指针操作模块,用于对所述指针寄存器进行操作,在对模拟浮点寄存器栈进行操作时,模拟指针寄存器的栈指针的栈操作,修改并监控栈指针的状态。其提高虚拟机效率,增强处理器兼容性。
文档编号G06F9/38GK101216756SQ20071030465
公开日2008年7月9日 申请日期2007年12月28日 优先权日2007年12月28日
发明者李晓钰, 玮 段 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1