二进制转译堆栈操作加速处理方法及其处理器的制造方法

文档序号:6631822阅读:278来源:国知局
二进制转译堆栈操作加速处理方法及其处理器的制造方法
【专利摘要】一种二进制转译堆栈操作加速处理方法,包括一条堆栈数据加载指令和一条堆栈数据存储指令,这两条指令基于堆栈边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器、源通用寄存器集合和目标通用寄存器集合完成对二进制转译堆栈数据的读写、堆栈指针的改写、堆栈越界的检查和堆栈越界的处理,并根据堆栈访问是否越界完成对处理器状态的更新。以及提供一种二进制转译堆栈操作加速处理器。本发明在保证处理器硬件资源不变的情况下,有力提升二进制转译系统性能和代码密度。
【专利说明】二进制转译堆栈操作加速处理方法及其处理器

【技术领域】
[0001]本发明涉及Java虚拟机领域,尤其是一种二进制转译堆栈操作加速处理方法及其处理器。

【背景技术】
[0002]二进制转译系统(如Java虚拟机)一般通过堆栈传递程序变量,每次变量传递包括写堆栈和读堆栈两个过程,写堆栈用于将需要传递的变量数据存入堆栈指针指向的堆栈地址处并调整堆栈指针,读堆栈用于从堆栈中获取所需数据并调整堆栈指针。基于系统的安全性考虑,每次写堆栈和读堆栈之前,都需根据传递的数据量和当前堆栈指针对堆栈越界行为进行检测和处理。这些堆栈操作往往需要多条处理器指令才能完成,频繁的变量传递带来的大量堆栈操作是二进制转译技术的性能瓶颈之一。
[0003]如何加速二进制转译堆栈操作以快速进行变量传递是二进制转译系统设计人员必须面对的问题。针对堆栈数据读写以及堆栈指针调整,很多动态转译系统通过引入把连续内存区域数据加载到多个通用寄存器指令和把多个通用寄存器数据存储到连续内存区域的指令以加速对二进制转译堆栈数据的读写操作,还有一些动态转译系统向以上所述两条指令加入堆栈指针调整功能以进一步加速对二进制转译堆栈的操作;针对堆栈边界检查,大多数二进制转译系统通过使用比较并跳转指令完成该检查操作,也有部分二进制转译系统通过弓I入专有硬件模块完成该检查操作。这些方法由于通过软件串行的处理堆栈操作,因此获得的加速效果有限。虽然采用专有的硬件越界检测模块可以获得较好的二进制转译系统性能,但是该方法需要增加一定的处理器硬件资源,成本较高。


【发明内容】

[0004]为了克服现有的二进制转译系统在处理堆栈操作时需要多条处理器指令影响二进制转译系统性能和代码密度这一问题,本发明提供一种二进制转译堆栈操作加速处理方法及其处理器,提出了一种二进制转译堆栈操作加速指令对,只需一条指令即可完成对二进制转译堆栈数据的读或写、堆栈指针的调整以及堆栈边界的检查和越界处理,在保证处理器硬件资源不变的情况下,有力提升二进制转译系统性能和代码密度。
[0005]本发明解决其技术问题所采用的技术方案是:
[0006]一种二进制转译堆栈操作加速处理方法,该加速处理方法包括一条堆栈数据加载指令和一条堆栈数据存储指令;
[0007]该堆栈数据加载指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将该地址指向堆栈处的数据按序加载到目标通用寄存器集合,并根据加载的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行;
[0008]该堆栈数据存储指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将源通用寄存器集合的数据按序存储到该地址指向堆栈处,并根据存储的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0009]进一步,所述堆栈边界通用寄存器包括堆栈上边界通用寄存器和堆栈下边界通用寄存器,该堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器以及堆栈越界转移地址通用寄存器对应的寄存器号或者在指令编码中指定,或者隐式地固定为特定值。
[0010]再进一步,所述二进制转译堆栈操作包括堆栈读操作、堆栈写操作、堆栈指针调整操作、堆栈越界检测操作和堆栈越界处理操作;
[0011]该堆栈读操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将从该堆栈访问地址处获得的堆栈数据按序存储到目标通用寄存器集合中;
[0012]该堆栈写操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将源通用寄存器集合中的数据按序存储到该堆栈访问地址指向的堆栈中;
[0013]该堆栈指针调整操作指:当检测到堆栈访问未越界时,给堆栈指针通用寄存器加上或者减去从堆栈加载或者向堆栈存储的总数据宽度,可采用两种不同的堆栈指针调整策略:
[0014]堆栈指针调整策略一:堆栈数据存储指令用堆栈指针通用寄存器加上向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器减去从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器;
[0015]堆栈指针调整策略二:堆栈数据存储指令用堆栈指针通用寄存器减去向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器加上从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器;
[0016]该堆栈越界检测操作指:判断堆栈访问地址是否处在堆栈上边界通用寄存器和堆栈下边界通用寄存器所指定的地址范围内,当采用上述堆栈指针调整策略一时,堆栈数据存储指令可仅对堆栈上边界越界行为进行检查,堆栈数据加载指令可仅对堆栈下边界越界行为进行检查;当采用上述堆栈指针调整策略二时,堆栈数据存储指令可仅对堆栈下边界越界行为进行检查,堆栈数据加载指令可仅对堆栈上边界越界行为进行检查;
[0017]该堆栈越界处理操作指:将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0018]更进一步,所述数据宽度指从堆栈中加载或者向堆栈存入数据的总字节数,由堆栈数据加载指令指定的目标通用寄存器集合中通用寄存器数目或者堆栈数据存储指令指定的源通用寄存器集合中通用寄存器数目乘以每个通用寄存器从堆栈加载或者向堆栈存储的元数据宽度获得,该元数据宽度由指令编码中的特定位指定。
[0019]所述指令宽度指堆栈数据加载指令或堆栈数据存储指令对应指令码的字节数。
[0020]一种二进制转译堆栈操作加速处理器,所述处理器包括:
[0021]二进制转译堆栈操作加速指令对译码单元,根据指令码获知当前处理的指令是否为堆栈数据加载指令或者堆栈数据存储指令,并获得元数据宽度以及堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器、目标通用寄存器集合和源通用寄存器集合对应寄存器号;
[0022]二进制转译堆栈操作控制单元,连接于二进制转译堆栈操作加速指令对译码单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用以接收来自该二进制转译堆栈操作加速指令对译码单元的译码信息和来自该二进制转译堆栈操作数据处理单元的堆栈越界检查信息,根据堆栈数据加载指令和堆栈数据存储指令,以及判断堆栈检查是否越界后,进行加载、存储和越界控制;
[0023]二进制转译堆栈操作数据处理单元,连接于通用寄存器堆的输出端和二进制转译堆栈操作控制单元的输出端,根据堆栈指针通用寄存器和堆栈边界通用寄存器完成二进制转译堆栈访问是否越界的检测,同时接收来自该二进制转译堆栈操作控制单元的控制信息,利用这些控制信息:根据堆栈指针通用寄存器和已访问的堆栈数据宽度完成二进制转译堆栈访问地址的计算,根据堆栈指针通用寄存器和总访问的堆栈数据宽度完成堆栈指针通用寄存器更新值的计算,根据链接寄存器和指令宽度完成链接寄存器更新值的计算,根据堆栈越界转移地址通用寄存器完成堆栈越界转移地址的计算,并准备向堆栈存储的数据或者接收从堆栈加载的数据以完成堆栈的读写;
[0024]通用寄存器堆,连接于二进制转译堆栈操作控制单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用于提供二进制转译堆栈操作所需数据,并根据二进制转译堆栈操作控制单元提供的通用寄存器号和二进制转译堆栈操作数据处理单元提供的数据完成二进制转译堆栈操作相关寄存器的回写操作。
[0025]进一步,所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为堆栈数据加载指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器、目标通用寄存器集合的回写控制信息,并指示二进制转译堆栈操作数据处理单元计算堆栈访问地址以访问堆栈获得目标通用寄存器集合回写数据并完成堆栈指针通用寄存器回写值的计算。
[0026]所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为堆栈数据存储指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器和堆栈的回写控制信息,并指示二进制转译堆栈操作数据处理单元准备堆栈回写数据和回写地址以回写堆栈并完成堆栈指针通用寄存器回写值的计算。
[0027]所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为二进制转译堆栈操作加速指令对中指令且堆栈检查越界时,该二进制转译堆栈操作控制单元生成链接寄存器的回写控制信息以及堆栈越界转移控制信息,并指示二进制转译堆栈操作数据处理单元完成链接寄存器回写值的计算和堆栈越界转移地址的计算。
[0028]本装置的技术构思为:二进制转译系统堆栈操作包括堆栈数据读写、堆栈指针调整、堆栈边界检查和堆栈越界处理等,目前大多数二进制转译系统广泛使用连续内存区域数据加载和存储指令对以加速堆栈数据读写和堆栈指针调整操作,使用比较并跳转指令或者专有的硬件模块加速堆栈边界检查和处理操作。这些方法或者未充分发掘堆栈操作的并行性,或者为处理器增加了较多的额外硬件资源和成本。本发明为微处理器引入一种二进制转译堆栈操作加速指令对,只需一条指令即可并行的完成堆栈数据读或写、堆栈指针维护、堆栈越界检查和越界处理等二进制转译堆栈操作,可在不影响处理器硬件成本的前提下有效提高二进制转译系统性能。该指令对包括堆栈数据加载指令和堆栈数据存储指令,其中堆栈数据加载指令在完成读堆栈的同时隐式地进行堆栈越界检查和处理,堆栈数据存储指令在完成写堆栈的同时隐式地进行堆栈越界检查和处理。本发明完成堆栈越界检查和处理时,将堆栈上边界寄存器、堆栈下边界寄存器以及堆栈越界转移地址寄存器等固定为处理器通用寄存器,无需为处理器增加额外的寄存器资源,同时还增强了本方法的灵活性和使用范围。
[0029]本发明的有益效果主要表现在:只需一条微处理器指令即可完成二进制转译堆栈相关的操作,有力提高了二进制转译系统的性能;同时将堆栈边界检查和越界处理所需信息存储在通用寄存器中,增强了本方法的灵活性和使用范围。

【专利附图】

【附图说明】
[0030]图1为堆栈数据加载指令流程图。
[0031]图2为堆栈数据存储指令流程图。
[0032]图3为二进制转译堆栈操作堆栈上边界通用寄存器、堆栈下边界通用寄存器以及堆栈越界转移地址通用寄存器指定方案的示意图,其中(a)为隐式制定所有堆栈相关寄存器,(b)为显式指定堆栈指针通用寄存器,(C)为显式指定堆栈指针通用寄存器和堆栈边界通用寄存器,(d)为显式指定堆栈指针通用寄存器和堆栈越界转移地址通用寄存器,(e)为显式堆栈越界转移地址通用寄存器和堆栈边界通用寄存器,(f)为显式指定所有堆栈相关寄存器。
[0033]图4为引入二进制转译堆栈操作加速指令对的微处理器结构图。
[0034]图5为引入二进制转译堆栈操作加速指令对的微处理器中每个单元结构图,其中,(a)为通用寄存器堆,(b)为堆栈数据加载和存储指令译码单元,(C)为数据处理单元堆栈访问地址产生模块,(d)为数据处理单元堆栈读写模块,(e)为数据处理单元堆栈越界检查模块,(f)为数据处理单元堆栈越界转移目标地址计算模块,(g)为二进制转译堆栈操作控制单元。

【具体实施方式】
[0035]下面结合附图对本发明作进一步描述。
[0036]实施例1
[0037]参照图1?图5,一种二进制转译堆栈操作加速处理方法,该加速处理方法包括一条堆栈数据加载指令和一条堆栈数据存储指令;
[0038]该堆栈数据加载指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将该地址指向堆栈处的数据按序加载到目标通用寄存器集合,并根据加载的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行;
[0039]该堆栈数据存储指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将源通用寄存器集合的数据按序存储到该地址指向堆栈处,并根据存储的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0040]本实施例中,堆栈数据加载指令,基于堆栈边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器和目标通用寄存器集合完成对二进制转译堆栈的堆栈读操作、堆栈指针调整操作、堆栈越界检测操作和堆栈越界处理操作:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时将堆栈指针通用寄存器指向堆栈处的数据加载到目标通用寄存器集合,并根据加载的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0041 ] 堆栈数据存储指令,基于堆栈边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器和源通用寄存器集合完成对二进制转译堆栈的堆栈写操作、堆栈指针调整操作、堆栈越界检测操作和堆栈越界处理操作:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时将源通用寄存器集合的数据存储到堆栈指针通用寄存器指向堆栈处,并根据存储的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0042]进一步,所述堆栈边界通用寄存器包括堆栈上边界通用寄存器和堆栈下边界通用寄存器,该堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器以及堆栈越界转移地址通用寄存器对应的寄存器号或者在指令编码中指定,或者隐式地固定为特定值。
[0043]再进一步,所述二进制转译堆栈操作包括堆栈读操作、堆栈写操作、堆栈指针调整操作、堆栈越界检测操作和堆栈越界处理操作;
[0044]该堆栈读操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将从该堆栈访问地址处获得的堆栈数据按序存储到目标通用寄存器集合中;
[0045]该堆栈写操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将源通用寄存器集合中的数据按序存储到该堆栈访问地址指向的堆栈中;
[0046]该堆栈指针调整操作指:当检测到堆栈访问未越界时,给堆栈指针通用寄存器加上或者减去从堆栈加载或者向堆栈存储的总数据宽度,可采用两种不同的堆栈指针调整策略:
[0047]堆栈指针调整策略一:堆栈数据存储指令用堆栈指针通用寄存器加上向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器减去从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器;
[0048]堆栈指针调整策略二:堆栈数据存储指令用堆栈指针通用寄存器减去向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器加上从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器;
[0049]该堆栈越界检测操作指:判断堆栈访问地址是否处在堆栈上边界通用寄存器和堆栈下边界通用寄存器所指定的地址范围内,当采用上述堆栈指针调整策略一时,堆栈数据存储指令可仅对堆栈上边界越界行为进行检查,堆栈数据加载指令可仅对堆栈下边界越界行为进行检查;当采用上述堆栈指针调整策略二时,堆栈数据存储指令可仅对堆栈下边界越界行为进行检查,堆栈数据加载指令可仅对堆栈上边界越界行为进行检查;
[0050]该堆栈越界处理操作指:将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
[0051]更进一步,所述数据宽度指从堆栈中加载或者向堆栈存入数据的总字节数,由堆栈数据加载指令指定的目标通用寄存器集合中通用寄存器数目或者堆栈数据存储指令指定的源通用寄存器集合中通用寄存器数目乘以每个通用寄存器从堆栈加载或者向堆栈存储的元数据宽度获得,该元数据宽度由指令编码中的特定位指定。
[0052]所述指令宽度指堆栈数据加载指令或堆栈数据存储指令对应指令码的字节数。
[0053]参照图3所示,堆栈上边界通用寄存器、堆栈下边界通用寄存器以及堆栈越界转移地址通用寄存器的设定有多种方案,处理器设计人员在处理器中具体实现该二进制转译堆栈操作加速指令对时,即可以在指令编码中显式的指定这些寄存器,也可以隐式地将特定的通用寄存器指定为这些寄存器。
[0054]实施例2
[0055]参照图4和图5,一种二进制转译堆栈操作加速处理器,包括二进制转译堆栈操作加速指令对译码单元、二进制转译堆栈操作控制单元、二进制转译堆栈操作数据处理单元和通用寄存器堆:
[0056]二进制转译堆栈操作加速指令对译码单元,根据指令码获知当前处理的指令是否为堆栈数据加载指令或者堆栈数据存储指令,并获得元数据宽度以及堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器、目标通用寄存器集合和源通用寄存器集合对应寄存器号;
[0057]二进制转译堆栈操作控制单元,连接于二进制转译堆栈操作加速指令对译码单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用以接收来自该二进制转译堆栈操作加速指令对译码单元的译码信息和来自该二进制转译堆栈操作数据处理单元的堆栈越界检查信息,根据这些信息分别进行如下处理:
[0058](I)当译码信息指示当前指令为堆栈数据加载指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器、目标通用寄存器集合的回写控制信息,并指示二进制转译堆栈操作数据处理单元计算堆栈访问地址以访问堆栈获得目标通用寄存器集合回写数据并完成堆栈指针通用寄存器回写值的计算;
[0059](2)当译码信息指示当前指令为堆栈数据存储指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器和堆栈的回写控制信息,并指示二进制转译堆栈操作数据处理单元准备堆栈回写数据和回写地址以回写堆栈并完成堆栈指针通用寄存器回写值的计算;
[0060](3)当译码信息指示当前指令为二进制转译堆栈操作加速指令对且堆栈检查越界时,该二进制转译堆栈操作控制单元生成链接寄存器的回写控制信息以及堆栈越界转移控制信息,并指示二进制转译堆栈操作数据处理单元完成链接寄存器回写值的计算和堆栈越界转移地址的计算;
[0061]二进制转译堆栈操作数据处理单元,连接于通用寄存器堆的输出端和二进制转译堆栈操作控制单元的输出端,根据堆栈指针通用寄存器和堆栈边界通用寄存器完成二进制转译堆栈访问是否越界的检测,同时接收来自该二进制转译堆栈操作控制单元的控制信息,利用这些控制信息:根据堆栈指针通用寄存器和已访问的堆栈数据宽度完成二进制转译堆栈访问地址的计算,根据堆栈指针通用寄存器和总访问的堆栈数据宽度完成堆栈指针通用寄存器更新值的计算,根据链接寄存器和指令宽度完成链接寄存器更新值的计算,根据堆栈越界转移地址通用寄存器完成堆栈越界转移地址的计算,并准备向堆栈存储的数据或者接收从堆栈加载的数据以完成堆栈的读写;
[0062]通用寄存器堆,连接于二进制转译堆栈操作控制单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用于提供二进制转译堆栈操作所需数据,并根据二进制转译堆栈操作控制单元提供的通用寄存器号和二进制转译堆栈操作数据处理单元提供的数据完成二进制转译堆栈操作相关寄存器的回写操作。
【权利要求】
1.一种二进制转译堆栈操作加速处理方法,其特征在于:该加速处理方法包括一条堆栈数据加载指令和一条堆栈数据存储指令; 该堆栈数据加载指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将该地址指向堆栈处的数据按序加载到目标通用寄存器集合,并根据加载的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行; 该堆栈数据存储指令的处理过程为:根据堆栈边界通用寄存器和堆栈指针通用寄存器完成对二进制转译堆栈边界的检测,当检测到堆栈访问未越界时根据堆栈指针通用寄存器计算获得堆栈访问地址,然后将源通用寄存器集合的数据按序存储到该地址指向堆栈处,并根据存储的数据宽度调整堆栈指针通用寄存器;当检测到堆栈访问越界时,将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
2.如权利要求1所述的一种二进制转译堆栈操作加速处理方法,其特征在于:所述堆栈边界通用寄存器包括堆栈上边界通用寄存器和堆栈下边界通用寄存器,该堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器以及堆栈越界转移地址通用寄存器对应的寄存器号或者在指令编码中指定,或者隐式地固定为特定值。
3.如权利要求1或2所述的一种二进制转译堆栈操作加速处理方法,其特征在于:所述二进制转译堆栈操作包括堆栈读操作、堆栈写操作、堆栈指针调整操作、堆栈越界检测操作和堆栈越界处理操作; 该堆栈读操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将从该堆栈访问地址处获得的堆栈数据按序存储到目标通用寄存器集合中;该堆栈写操作指:根据堆栈指针通用寄存器计算获得堆栈访问地址,当检测到堆栈访问未越界时,将源通用寄存器集合中的数据按序存储到该堆栈访问地址指向的堆栈中;该堆栈指针调整操作指:当检测到堆栈访问未越界时,给堆栈指针通用寄存器加上或者减去从堆栈加载或者向堆栈存储的总数据宽度,可采用两种不同的堆栈指针调整策略:堆栈指针调整策略一:堆栈数据存储指令用堆栈指针通用寄存器加上向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器减去从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器; 堆栈指针调整策略二:堆栈数据存储指令用堆栈指针通用寄存器减去向堆栈存储的总数据宽度的结果来更新堆栈指针通用寄存器,堆栈数据加载指令用堆栈指针通用寄存器加上从堆栈加载的总数据宽度的结果来更新堆栈指针通用寄存器; 该堆栈越界检测操作指:判断堆栈访问地址是否处在堆栈上边界通用寄存器和堆栈下边界通用寄存器所指定的地址范围内,当采用上述堆栈指针调整策略一时,堆栈数据存储指令可仅对堆栈上边界越界行为进行检查,堆栈数据加载指令可仅对堆栈下边界越界行为进行检查;当采用上述堆栈指针调整策略二时,堆栈数据存储指令可仅对堆栈下边界越界行为进行检查,堆栈数据加载指令可仅对堆栈上边界越界行为进行检查; 该堆栈越界处理操作指:将堆栈数据加载指令的程序计数器加上该指令宽度的结果存储到链接寄存器,然后跳转到通过堆栈越界转移地址通用寄存器运算获得的地址处执行。
4.如权利要求1或2所述的一种二进制转译堆栈操作加速处理方法,其特征在于:所述数据宽度指从堆栈中加载或者向堆栈存入数据的总字节数,由堆栈数据加载指令指定的目标通用寄存器集合中通用寄存器数目或者堆栈数据存储指令指定的源通用寄存器集合中通用寄存器数目乘以每个通用寄存器从堆栈加载或者向堆栈存储的元数据宽度获得,该元数据宽度由指令编码中的特定位指定。
5.如权利要求1或2所述的一种二进制转译堆栈操作加速处理方法,其特征在于:所述指令宽度指堆栈数据加载指令或堆栈数据存储指令对应指令码的字节数。
6.一种二进制转译堆栈操作加速处理器,其特征在于:所述处理器包括: 二进制转译堆栈操作加速指令对译码单元,根据指令码获知当前处理的指令是否为堆栈数据加载指令或者堆栈数据存储指令,并获得元数据宽度以及堆栈上边界通用寄存器、堆栈下边界通用寄存器、堆栈指针通用寄存器、堆栈越界转移地址通用寄存器、目标通用寄存器集合和源通用寄存器集合对应寄存器号; 二进制转译堆栈操作控制单元,连接于二进制转译堆栈操作加速指令对译码单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用以接收来自该二进制转译堆栈操作加速指令对译码单元的译码信息和来自该二进制转译堆栈操作数据处理单元的堆栈越界检查信息,根据堆栈数据加载指令和堆栈数据存储指令,以及判断堆栈检查是否越界后,进7TT加载、存储和越界控制; 二进制转译堆栈操作数据处理单元,连接于通用寄存器堆的输出端和二进制转译堆栈操作控制单元的输出端,根据堆栈指针通用寄存器和堆栈边界通用寄存器完成二进制转译堆栈访问是否越界的检测,同时接收来自该二进制转译堆栈操作控制单元的控制信息,利用这些控制信息:根据堆栈指针通用寄存器和已访问的堆栈数据宽度完成二进制转译堆栈访问地址的计算,根据堆栈指针通用寄存器和总访问的堆栈数据宽度完成堆栈指针通用寄存器更新值的计算,根据链接寄存器和指令宽度完成链接寄存器更新值的计算,根据堆栈越界转移地址通用寄存器完成堆栈越界转移地址的计算,并准备向堆栈存储的数据或者接收从堆栈加载的数据以完成堆栈的读写; 通用寄存器堆,连接于二进制转译堆栈操作控制单元的输出端和二进制转译堆栈操作数据处理单元的输出端,用于提供二进制转译堆栈操作所需数据,并根据二进制转译堆栈操作控制单元提供的通用寄存器号和二进制转译堆栈操作数据处理单元提供的数据完成二进制转译堆栈操作相关寄存器的回写操作。
7.如权利要求6所述的二进制转译堆栈操作加速处理器,其特征在于:所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为堆栈数据加载指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器、目标通用寄存器集合的回写控制信息,并指示二进制转译堆栈操作数据处理单元计算堆栈访问地址以访问堆栈获得目标通用寄存器集合回写数据并完成堆栈指针通用寄存器回写值的计算。
8.如权利要求6所述的二进制转译堆栈操作加速处理器,其特征在于:所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为堆栈数据存储指令且堆栈检查未越界时,该二进制转译堆栈操作控制单元生成堆栈指针通用寄存器和堆栈的回写控制信息,并指示二进制转译堆栈操作数据处理单元准备堆栈回写数据和回写地址以回写堆栈并完成堆栈指针通用寄存器回写值的计算。
9.如权利要求6所述的二进制转译堆栈操作加速处理器,其特征在于:所述二进制转译堆栈操作控制单元中,当译码信息指示当前指令为二进制转译堆栈操作加速指令对中指令且堆栈检查越界时,该二进制转译堆栈操作控制单元生成链接寄存器的回写控制信息以及堆栈越界转移控制信息,并指示二进制转译堆栈操作数据处理单元完成链接寄存器回写值的计算和堆栈越界转移地址的计算。
【文档编号】G06F9/455GK104461676SQ201410583847
【公开日】2015年3月25日 申请日期:2014年10月27日 优先权日:2014年10月27日
【发明者】刘智力, 卢星星, 张文蒙 申请人:杭州中天微系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1