一种寄存器处理方法、装置、电子设备及存储介质制造方法及图纸

技术编号:27562263 阅读:23 留言:0更新日期:2021-03-09 22:04
本发明专利技术实施例提供了一种寄存器处理方法和装置,所述方法包括:获取需即时编译的父程序调用的已静态编译的子程序,检测所述子程序中使用目标寄存器的使用信息,根据所述使用信息,对所述目标寄存器进行保存或恢复,使得在即时编译的父程序调用静态编译的子程序的前后有针对性的保存或恢复寄存器,达到减少保存或恢复目标寄存器时的指令数量的效果,从而提高执行性能。高执行性能。高执行性能。

【技术实现步骤摘要】
一种寄存器处理方法、装置、电子设备及存储介质


[0001]本专利技术涉及计算机
,特别是涉及一种寄存器处理方法、一种寄存器处理装置、一种电子设备以及一种可读存储介质。

技术介绍

[0002]动态编译是某些程式语言在执行时用来增进效能的方法,一般指的是程序在运行时进行编译。与之相对的是事前编译,也叫静态编译。静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应静态库(例如,拓展名为.a或.lib的库)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。静态编译典型的例子是gcc(GNU Compiler Collection,GNU编译器套件)的编译方式。gcc会先将源程序编译成可执行的机器码,在部署或分发程序时,直接部署编译后的机器码即可,在程序执行时不再需要编译过程。
[0003]动态编译的典型例子是Java(一种计算机编程语言)虚拟机中的即时编译(Just-in-time compilation,简称JIT)方式。Java程序是一种字节码程序,并不能在实际的物理机上直接执行,在执行Java程序时一般先进行解释执行,其执行速度肯定比可执行的二进制机器码程序慢。为了提高执行速度,引入了JIT。在运行时,当识别到热点方法或循环时,JIT会对热点方法进行动态编译,将字节码编译成本地可执行的机器码,,然后直接运行编译后的机器码,并把翻译过来的机器码保存起来,以备下次使用。
[0004]编译的程序中会存在调用者和被调用者。在进行子程序调用时,由调用者(caller)负责保存的寄存器称为caller-saved(调用者保存)寄存器。在进行子程序调用时,由被调用者(callee)负责保存的寄存器称为callee-saved(被调用者保存)寄存器。
[0005]在编译一个程序中的调用者和被调用者时,若调用者和被调用者在同一编译器和同一时刻进行编译,在编译时编译器知道被调用子程序的信息,因此可以在编译时确定子程序所需的寄存器,在调用处只保存子程序中使用了的caller-saved寄存器即可,从而避免保存和恢复不必要的caller-saved寄存器,生成最优的代码。
[0006]但是显然这种方式无法适用于即时编译和静态编译混用的情况。在即时编译时,被调用子程序已经由其他静态编译器编译成机器码,无法进行相关的寄存器保存和恢复的优化。
[0007]现有技术中,在即时编译程序调用静态编译程序的前后,不得不对所有的caller-saved寄存器进行保存和恢复操作,有可能会产生一些不必要的保存和恢复,在caller-saved寄存器较多的体系结构中,有可能会产生较大的性能开销。

技术实现思路

[0008]本专利技术实施例所要解决的技术问题是提供一种寄存器处理方法、装置、电子设备及可读存储介质,以便解决即时编译和静态编译混用时无法对寄存器的保存与恢复进行优化的问题。
[0009]为了解决上述问题,本专利技术提供了一种寄存器处理方法,包括:
[0010]获取需即时编译的父程序调用的已静态编译的子程序;
[0011]检测所述子程序中使用目标寄存器的使用信息;
[0012]根据所述使用信息,对所述目标寄存器进行保存或恢复。
[0013]可选地,所述检测所述子程序中使用目标寄存器的使用信息包括:
[0014]检测在所述子程序中所有被更改的寄存器;
[0015]确定所述寄存器中需由所述父程序保存的目标寄存器,得到所述使用信息。
[0016]可选地,所述根据所述使用信息,对所述目标寄存器进行保存或恢复包括:
[0017]根据所述使用信息,生成所述目标寄存器的保存指令或恢复指令;
[0018]执行所述保存指令或恢复指令。
[0019]可选地,在所述检测所述子程序中使用目标寄存器的使用信息之前,所述方法还包括:
[0020]检测到所述子程序为首次运行。
[0021]可选地,所述方法还包括:
[0022]若所述子程序非首次运行,则读取首次运行时保存在内存中的目标寄存器的使用信息。
[0023]相应的,本专利技术还提供了一种寄存器处理装置,包括:
[0024]子程序获取模块,用于获取需即时编译的父程序调用的已静态编译的子程序;
[0025]信息检测模块,用于检测所述子程序中使用目标寄存器的使用信息;
[0026]保存恢复模块,用于根据所述使用信息,对所述目标寄存器进行保存或恢复。
[0027]可选地,所述信息检测模块包括:
[0028]检测子模块,用于检测在所述子程序中所有被更改的寄存器;
[0029]信息确定子模块,用于确定所述寄存器中需由所述父程序保存的目标寄存器,得到所述使用信息。
[0030]可选地,所述保存恢复模块包括:
[0031]指令生成子模块,用于根据所述使用信息,生成所述目标寄存器的保存指令或恢复指令;
[0032]指令执行子模块,用于执行所述保存指令或恢复指令。
[0033]可选地,所述装置还包括:
[0034]首次检测模块,用于在所述检测所述子程序中使用目标寄存器的使用信息之前,检测到所述子程序为首次运行。
[0035]可选地,所述装置还包括:
[0036]读取模块,用于若所述子程序非首次运行,则读取首次运行时保存在内存中的目标寄存器的使用信息。
[0037]相应的,本专利技术还提供了一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
[0038]获取需即时编译的父程序调用的已静态编译的子程序;
[0039]检测所述子程序中使用目标寄存器的使用信息;
[0040]根据所述使用信息,对所述目标寄存器进行保存或恢复。
[0041]可选地,所述检测所述子程序中使用目标寄存器的使用信息包括:
[0042]检测在所述子程序中所有被更改的寄存器;
[0043]确定所述寄存器中需由所述父程序保存的目标寄存器,得到所述使用信息。
[0044]可选地,所述根据所述使用信息,对所述目标寄存器进行保存或恢复包括:
[0045]根据所述使用信息,生成所述目标寄存器的保存指令或恢复指令;
[0046]执行所述保存指令或恢复指令。
[0047]可选地,在所述检测所述子程序中使用目标寄存器的使用信息之前,所述方法还包括:
[0048]检测到所述子程序为首次运行。
[0049]可选地,所述方法还包括:
[0050]若所述子程序非首次运行,则读取首次运行时保存在内存中的目标寄存器的使用信息。
[0051]相应的,本专利技术还提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述寄存器处理方法。
[0052本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种寄存器处理方法,其特征在于,包括:获取需即时编译的父程序调用的已静态编译的子程序;检测所述子程序中使用目标寄存器的使用信息;根据所述使用信息,对所述目标寄存器进行保存或恢复。2.根据权利要求1所述的方法,其特征在于,所述检测所述子程序中使用目标寄存器的使用信息包括:检测在所述子程序中所有被更改的寄存器;确定所述寄存器中需由所述父程序保存的目标寄存器,得到所述使用信息。3.根据权利要求1所述的方法,其特征在于,所述根据所述使用信息,对所述目标寄存器进行保存或恢复包括:根据所述使用信息,生成所述目标寄存器的保存指令或恢复指令;执行所述保存指令或恢复指令。4.根据权利要求1所述的方法,其特征在于,在所述检测所述子程序中使用目标寄存器的使用信息之前,所述方法还包括:检测到所述子程序为首次运行。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:若所述子程序非首次运行,则读取首次运行时保存在内存中的目标寄存器的使用信息。6.一种寄存器处理装置,其特征在于,包括:子程序获取模块,用于获取需即时编译的父程序调用的已静态编译的子程序;信息检测模块,用于检测所述子程序中使用目标寄存器的使用信息;保存恢复模块,用于根据所述使用信息,对所述目标寄存器进行保存或恢复。7.根据权利要求6所述的装置,其特征在于,所述信息检测模块包括:检测子模块,用...

【专利技术属性】
技术研发人员:敖琪王雪井田高翔
申请(专利权)人:龙芯中科技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1