CN103870249A - 指令地址获取方法和即时编译器 - Google Patents
指令地址获取方法和即时编译器 Download PDFInfo
- Publication number
- CN103870249A CN103870249A CN201410128997.9A CN201410128997A CN103870249A CN 103870249 A CN103870249 A CN 103870249A CN 201410128997 A CN201410128997 A CN 201410128997A CN 103870249 A CN103870249 A CN 103870249A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- target
- default
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例提供一种指令地址获取方法和即时编译器,其中,该方法包括:确定目标指令;在所述目标指令前插入加载预设地址至预设寄存器的指令;将所述预设地址更新为所述目标指令的地址。当程序运行到目标指令时,目标指令的地址已经存储在预设寄存器中,因此后续代码可以直接访问使用存储在预设寄存器中的目标指令的地址。由于通过加载预设地址常量到预设寄存器的指令来实现存储目标指令的地址到预设寄存器的目的,不会打断代码执行的流水线,因此提高了代码执行效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种指令地址获取方法和即时编译器。
背景技术
在即时编译器中,经常需要获取目标指令地址,以便在编译过程中做出指令顺序的调整或者将指令地址保存以供后续代码使用。
现有技术中,无内部互锁流水线的微处理器(Microprocessor withoutinterlocked piped stages,简称:MIPS)架构下,获取目标指令地址的过程为:首先确定目标指令,在目标指令前插入一条跳转空函数指令和延迟槽,在执行跳转空函数指令时,硬件会将目标指令的地址放于31号寄存器中,从而在运行至目标指令时,目标指令的地址已经位于31号寄存器,后续代码可以直接访问31号寄存器,获取目标指令的地址。
然而,跳转指令会打断代码流水线,造成代码执行效率低下。
发明内容
本发明实施例提供一种指令地址获取方法和即时编译器,用于解决现有技术的问题,提高代码执行效率。
第一方面,本发明实施例提供一种指令地址获取方法,包括:
确定目标指令;
在所述目标指令前插入加载预设地址至预设寄存器的指令;
将所述预设地址更新为所述目标指令的地址。
第二方面,本发明实施例提供一种即时编译器,包括:
确定单元,用于确定目标指令;
插入单元,用于在所述目标指令前插入加载预设地址至预设寄存器的指令;
更新单元,用于将所述预设地址更新为所述目标指令的地址。
本发明实施例提供的指令地址获取方法和即时编译器,通过确定目标指令;在所述目标指令前插入加载预设地址至预设寄存器的指令;将所述预设地址更新为所述目标指令的地址,当程序运行到目标指令时,目标指令的地址已经存储在预设寄存器中,因此后续代码可以直接访问使用存储在预设寄存器中的目标指令的地址。由于通过加载预设地址常量到预设寄存器的指令来实现存储目标指令的地址到预设寄存器的目的,不会打断代码执行的流水线,因此提高了代码执行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明指令地址获取方法实施例一的流程图;
图2为本发明指令地址获取方法实施例二的流程图;
图3为本发明即时编译器实施例一的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明指令地址获取方法实施例一的流程图,如图1所示,本实施例的执行主体为即时编译器,本实施例的方法可以包括:
S101、确定目标指令。
S102、在所述目标指令前插入加载预设地址至预设寄存器的指令。
S103、将所述预设地址更新为所述目标指令的地址。
本实施例中,即时编译器在已经完成源码的编译但还没有完成链接(也就是指令还没有实际地址时)时可以确定出目标指令,确定出的目标指令可以为至少一条,以其中的一条目标指令为例,假设该目标指令为addu t0,t0,t1。然后在该确定的目标指令前插入加载预设地址至预设寄存器的指令,预设地址可以为地址常量,例如:预设地址为0地址;预设寄存器为存储常数的寄存器,例如可以为1号寄存器(at寄存器),或者其它处于空闲状态的寄存器。若即时编译器运行在32位系统下,指令的地址大小为32位,在MIPS架构下需要两条指令:lui和ori来加载一个32位的地址常量。具体代码可以为:
lui at,0x0
ori at,0x0
addu t0,t0,t1
addu t0,t0,t1为目标指令,在目标指令:addu t0,t0,t1前插入lui at,0x0和ori at,0x0两个指令,lui at,0x0表示将0地址的高16位(即0x0)加载至at寄存器高16中,ori at,0x0表示将0地址的低16位(即0x0)加载至at寄存器低16中。
在确定目标指令的地址后,将预设地址更新为目标指令地址,即更新加载指令,更新加载指令的源操作数(预设地址)为目标指令地址,从而可以将预设地址更新为目标指令的地址。假设目标指令的地址为0x2a006900,即更新lui指令的操作数0x0为目标指令的地址的高16位和ori指令的操作数0x0为目标指令的地址的低16位。具体代码为:
lui at,0x2a00
ori at,0x6900
addu t0,t0,t1
addu t0,t0,t1为目标指令,将目标指令:addu t0,t0,t1前的lui at,0x0指令中的操作数0x0更新为0x2a006900的高16位(即0x2a00),更新后的指令为lui at,0x2a00,从而可以将目标指令的地址的高16位存储在at寄存器的高16位。将目标指令:addu t0,t0,t1前的ori at,0x0指令中的操作数0x0更新为0x2a006900的低16位(即0x6900),从而可以将目标指令的地址的低16位存储在at寄存器的低16位。从而可以将目标指令的地址存储在加载有预设地址的预设寄存器中,因此当程序运行到目标指令时,目标指令的地址已经存储在预设寄存器中,因此后续代码可以直接访问预设寄存器,使用存储在预设寄存器中的目标指令的地址。
需要说明的是,本实施例是以一条目标指令进行举例说明,若确定了多条目标指令时,每条目标指令可以参见上述目标指令的处理过程,即在每条指令前插入加载预设地址至预设寄存器的指令,然后将所述预设地址更新为该目标指令的地址。
本发明实施例提供的指令地址获取方法,通过确定目标指令;在所述目标指令前插入加载预设地址至预设寄存器的指令;将所述预设地址更新为所述目标指令的地址,当程序运行到目标指令时,目标指令的地址已经存储在预设寄存器中,因此后续代码可以直接访问预设寄存器,使用存储在预设寄存器中的目标指令的地址。由于通过加载预设地址常量到预设寄存器的指令来实现存储目标指令的地址到预设寄存器的目的,不会打断代码执行的流水线,因此提高了指令执行效率。
图2为本发明指令地址获取方法实施例二的流程图,如图2所示,本实施例的执行主体为即时编译器,本实施例的方法可以包括:
S201、确定目标指令。
S202、在所述目标指令前插入加载预设地址至预设寄存器的指令。
S203、在所述加载指令后插入压栈保存所述预设寄存器的指令。
S204、确定所述目标指令的地址。
S205、将所述预设地址更新为所述目标指令的地址。
本实施例中,即时编译器在已经完成源码的编译但还没有完成链接(也就是指令还没有实际地址时)时可以确定出目标指令,此时目标指令的地址还不确定,需要使用一个临时缓存区将编译后的目标指令进行缓存,当缓冲区空间不足时还可以重新申请缓冲区并复制原缓冲区的目标指令到新缓冲区。上述确定出的目标指令可以为至少一条,以其中的一条目标指令为例,假设该目标指令为addu t0,t0,t1。然后在该确定的目标指令前插入加载预设地址至预设寄存器的指令,预设地址可以为地址常量,例如:预设地址为0地址;预设寄存器为存储常数的寄存器,例如可以为1号寄存器(at寄存器),或者其它处于空闲状态的寄存器。若即时编译器运行在32位系统下,指令的地址大小为32位,在MIPS架构下需要两条指令:lui和ori来加载一个32位的地址常量。进一步地,本实施例中如果后续目标指令需要使用预设寄存器,如在后续目标指令前也插入将预设地址加载至同一预设寄存器中的指令或者其它指令需要用到预设寄存器时,那么需要将预设寄存器进行压栈保存,也就是在所述加载指令后插入压栈保存所述预设寄存器的指令,在32位MIPS架构下需要两条指令:addiu和sw来压栈保存预设寄存器。具体代码可以为:
lui at,0x0
ori at,0x0
addiu sp,sp,-4
sw at,(0)sp
addu t0,t0,t1
addu t0,t0,t1为目标指令,在目标指令:addu t0,t0,t1前插入lui at,0x0和ori at,0x0两个指令,lui at,0x0表示将0地址的高16位(即0x0)加载至at号寄存器高16中,ori at,0x0表示将0地址的低16位(即0x0)加载至at号寄存器低16中,addiu sp,sp,-4表示申请4个字节的栈空间,在32位系统下申请的栈空间为4个字节。sw at,(0)sp表示将预设寄存器进行压栈保存。
当即时编译器链接完成后,可以确定目标指令在内存中的位置,即可以确定目标指令的地址。需要说明的是,本实施例中,如何确定目标指令在内存中的位置与现有技术类似,此处不再赘述。
在确定目标指令的地址后,更新加载指令的操作数,从而可以更新预设地址为目标指令的地址。假设目标指令的地址为0x2a006900,即更新lui指令的操作数0x0为目标指令的地址的高16位和ori指令的操作数0x0为目标指令的地址的低16位。具体代码为:
lui at,0x2a00
ori at,0x6900
addiu sp,sp,-4
sw at,(0)sp
addu t0,t0,t1
addu t0,t0,t1为目标指令,将目标指令:addu t0,t0,t1前的lui at,0x0指令中的操作数0x0更新为0x2a006900的高16位(即0x2a00),更新后的指令为lui at,0x2a00,从而可以将目标指令的地址的高16位存储在at寄存器的高16位。将目标指令:addu t0,t0,t1前的ori at,0x0指令中的操作数0x0更新为0x2a006900的低16位(即0x6900),从而可以将目标指令的地址的低16位存储在at寄存器的低16位。addiu sp,sp,-4表示申请4个字节的栈空间,在32位系统下申请的栈空间为4个字节。sw at,(0)sp表示将预设寄存器进行压栈保存,即将预设寄存器中的目标指令地址压栈保存。从而可以将目标指令的地址存储在加载有预设地址的预设寄存器中,并进行压栈保存,因此当程序运行到目标指令时,目标指令的地址已经存储在栈中,因此后续代码可以直接访问使用存储在栈中的目标指令的地址。
需要说明的是,本实施例是以一条目标指令进行举例说明,若确定了多条目标指令时,每条目标指令可以参见上述目标指令的处理过程,即在每条指令前插入加载预设地址至预设寄存器的指令,和压栈保存预设寄存器的指令,然后将所述预设地址更新为该目标指令的地址。
本发明实施例提供的指令地址获取方法,通过确定目标指令,在所述目标指令前插入加载预设地址至预设寄存器的指令,在所述加载指令后插入压栈保存所述预设寄存器的指令,将所述预设地址更新为所述目标指令的地址;当程序运行到目标指令时,目标指令的地址已经存储在栈中,因此后续代码可以直接访问使用存储在栈中的目标指令的地址。
图3为本发明即时编译器实施例一的结构示意图,如图3所示,本实施例的即时编译器可以包括:确定单元11、插入单元12和更新单元13,其中,确定单元11用于确定目标指令;插入单元12用于在所述目标指令前插入加载预设地址至预设寄存器的指令;更新单元13用于将所述预设地址更新为所述目标指令的地址。
本实施例的即时编译器,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
本发明实施例提供的即时编译器,通过确定目标指令;在所述目标指令前插入加载预设地址至预设寄存器的指令;将所述预设地址更新为所述目标指令的地址,当程序运行到目标指令时,目标指令的地址已经存储在预设寄存器中,因此后续代码可以直接访问使用存储在预设寄存器中的目标指令的地址。由于通过加载预设地址常量到预设寄存器的指令来实现存储目标指令的地址到预设寄存器的目的,不会打断代码执行的流水线,因此提高了指令执行效率。
在本发明即时编译器实施例二中,本实施例的即时编译器在图3所示结构的基础上,进一步地,确定单元11还用于在插入单元12在所述目标指令前插入加载预设地址至预设寄存器的指令之后,确定所述目标指令的地址。
更进一步地,插入单元12还用于在所述目标指令前插入加载预设地址至预设寄存器的指令之后,在所述目标指令前插入压栈保存所述预设寄存器的指令。
可选地,所述预设地址为地址常量。
可选地,所述预设寄存器为存储常数的寄存器或者处于空闲状态的寄存器。
本实施例的即时编译器,可以用于执行图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
本发明实施例提供的即时编译器,通过确定目标指令,在所述目标指令前插入加载预设地址至预设寄存器的指令,在所述加载指令后插入压栈保存所述预设寄存器的指令,将所述预设地址更新为所述目标指令的地址;当程序运行到目标指令时,目标指令的地址已经存储在栈中,因此后续代码可以直接访问使用存储在栈中的目标指令的地址。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种指令地址获取方法,其特征在于,包括:
确定目标指令;
在所述目标指令前插入加载预设地址至预设寄存器的指令;
将所述预设地址更新为所述目标指令的地址。
2.根据权利要求1所述的方法,其特征在于,所述在所述目标指令前插入加载预设地址至预设寄存器的指令之后,还包括:
确定所述目标指令的地址。
3.根据权利要求1所述的方法,其特征在于,所述在所述目标指令前插入加载预设地址至预设寄存器的指令之后,还包括:
在所述目标指令前插入压栈保存所述预设寄存器的指令。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述预设地址为地址常量。
5.根据权利要求1-3任意一项所述的方法,其特征在于,所述预设寄存器为存储常数的寄存器或者是处于空闲状态的寄存器。
6.一种即时编译器,其特征在于,包括:
确定单元,用于确定目标指令;
插入单元,用于在所述目标指令前插入加载预设地址至预设寄存器的指令;
更新单元,用于将所述预设地址更新为所述目标指令的地址。
7.根据权利要求6所述的即时编译器,其特征在于,所述确定单元还用于在所述插入单元在所述目标指令前插入加载预设地址至预设寄存器的指令之后,确定所述目标指令的地址。
8.根据权利要求6所述的即时编译器,其特征在于,所述插入单元还用于在所述目标指令前插入加载预设地址至预设寄存器的指令之后,在所述目标指令前插入压栈保存所述预设寄存器的指令。
9.根据权利要求6-8任意一项所述的即时编译器,其特征在于,所述预设地址为地址常量。
10.根据权利要求6-8任意一项所述的即时编译器,其特征在于,所述预设寄存器为存储常数的寄存器或者是处于空闲状态的寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410128997.9A CN103870249B (zh) | 2014-04-01 | 2014-04-01 | 指令地址获取方法和即时编译器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410128997.9A CN103870249B (zh) | 2014-04-01 | 2014-04-01 | 指令地址获取方法和即时编译器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103870249A true CN103870249A (zh) | 2014-06-18 |
CN103870249B CN103870249B (zh) | 2017-08-25 |
Family
ID=50908823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410128997.9A Active CN103870249B (zh) | 2014-04-01 | 2014-04-01 | 指令地址获取方法和即时编译器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103870249B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022199064A1 (en) * | 2021-03-23 | 2022-09-29 | Zhejiang Dahua Technology Co., Ltd. | Systems and methods for code optimization |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
CN1397876A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存中置换目标地址的装置及方法 |
US20040044874A1 (en) * | 1990-09-28 | 2004-03-04 | Leach Jerald G. | Processing devices with improved addressing capabilties systems and methods |
CN1542625A (zh) * | 2003-01-14 | 2004-11-03 | 智权第一公司 | 有效更新分支目标地址快取的装置与方法 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN102566974A (zh) * | 2012-01-14 | 2012-07-11 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
CN103513957A (zh) * | 2012-06-27 | 2014-01-15 | 上海芯豪微电子有限公司 | 高性能缓存系统和方法 |
-
2014
- 2014-04-01 CN CN201410128997.9A patent/CN103870249B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044874A1 (en) * | 1990-09-28 | 2004-03-04 | Leach Jerald G. | Processing devices with improved addressing capabilties systems and methods |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
CN1397876A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存中置换目标地址的装置及方法 |
CN1542625A (zh) * | 2003-01-14 | 2004-11-03 | 智权第一公司 | 有效更新分支目标地址快取的装置与方法 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN102566974A (zh) * | 2012-01-14 | 2012-07-11 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
CN103513957A (zh) * | 2012-06-27 | 2014-01-15 | 上海芯豪微电子有限公司 | 高性能缓存系统和方法 |
Non-Patent Citations (3)
Title |
---|
廖银等: "一种动态二进制翻译中间接分支目标地址查找算法", 《小型微型计算机系统》 * |
张锐: "嵌入式JavaScript引擎即时编译器的研究与设计", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊 )》 * |
龚帅帅: "嵌入式处理器指令预取关键技术设计研究", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊 )》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022199064A1 (en) * | 2021-03-23 | 2022-09-29 | Zhejiang Dahua Technology Co., Ltd. | Systems and methods for code optimization |
US11914978B2 (en) | 2021-03-23 | 2024-02-27 | Zhejiang Dahua Technology Co., Ltd. | Systems and methods for code optimization |
Also Published As
Publication number | Publication date |
---|---|
CN103870249B (zh) | 2017-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9021511B1 (en) | Runtime management of TOC pointer save and restore commands | |
CN106796522B (zh) | 用于更新源代码文件的系统和方法 | |
US9329875B2 (en) | Global entry point and local entry point for callee function | |
US9218168B1 (en) | Suppression of table of contents save actions | |
US9250875B1 (en) | Table of contents pointer value save and restore placeholder positioning | |
US9110675B1 (en) | Usage of TOC register as application register | |
US8381203B1 (en) | Insertion of multithreaded execution synchronization points in a software program | |
US8584110B2 (en) | Execution trace truncation | |
JP6506412B2 (ja) | アプリケーションロード方法及び装置 | |
KR20110136749A (ko) | 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
CN105630491A (zh) | 程序的功能变更方法及装置 | |
US10747514B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
US8006238B2 (en) | Workload partitioning in a parallel system with hetergeneous alignment constraints | |
CN103645888A (zh) | 一种自动构建操作系统的系统及方法 | |
CN104063329A (zh) | 64位立即数处理方法及装置 | |
US10353591B2 (en) | Fused shader programs | |
CN103870249A (zh) | 指令地址获取方法和即时编译器 | |
CN111796867B (zh) | 着色器的转换方法、装置及电子设备 | |
US8732437B2 (en) | Low-overhead misalignment and reformatting support for SIMD | |
CN103970507A (zh) | 64位虚拟机处理访存指令的方法及装置 | |
US7278014B2 (en) | System and method for simulating hardware interrupts | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
US9395962B2 (en) | Apparatus and method for executing external operations in prologue or epilogue of a software-pipelined loop | |
CN112882753A (zh) | 程序运行方法及装置 | |
JP6295914B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |