CN103870249B - 指令地址获取方法和即时编译器 - Google Patents
指令地址获取方法和即时编译器 Download PDFInfo
- Publication number
- CN103870249B CN103870249B CN201410128997.9A CN201410128997A CN103870249B CN 103870249 B CN103870249 B CN 103870249B CN 201410128997 A CN201410128997 A CN 201410128997A CN 103870249 B CN103870249 B CN 103870249B
- Authority
- CN
- China
- Prior art keywords
- target
- instruction
- address
- target word
- 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.)
- Active
Links
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和oriat,0x0两个指令,lui at,0x0表示将0地址的高16位(即0x0)加载至at寄存器高16中,oriat,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和oriat,0x0两个指令,lui at,0x0表示将0地址的高16位(即0x0)加载至at号寄存器高16中,oriat,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 CN103870249A (zh) | 2014-06-18 |
CN103870249B true 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) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905242B (zh) | 2021-03-23 | 2022-12-06 | 浙江大华技术股份有限公司 | 分支路径跳转方法、装置、存储介质及电子装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397876A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存中置换目标地址的装置及方法 |
CN1542625A (zh) * | 2003-01-14 | 2004-11-03 | 智权第一公司 | 有效更新分支目标地址快取的装置与方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5305446A (en) * | 1990-09-28 | 1994-04-19 | Texas Instruments Incorporated | Processing devices with improved addressing capabilities, systems and methods |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
US8527707B2 (en) * | 2009-12-25 | 2013-09-03 | Shanghai Xin Hao Micro Electronics Co. Ltd. | High-performance cache system and method |
CN102566974B (zh) * | 2012-01-14 | 2014-03-26 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
CN103513957B (zh) * | 2012-06-27 | 2017-07-11 | 上海芯豪微电子有限公司 | 高性能缓存方法 |
-
2014
- 2014-04-01 CN CN201410128997.9A patent/CN103870249B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397876A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存中置换目标地址的装置及方法 |
CN1542625A (zh) * | 2003-01-14 | 2004-11-03 | 智权第一公司 | 有效更新分支目标地址快取的装置与方法 |
Non-Patent Citations (3)
Title |
---|
一种动态二进制翻译中间接分支目标地址查找算法;廖银等;《小型微型计算机系统》;20140315;第35卷(第3期);正文第520-525页 * |
嵌入式JavaScript引擎即时编译器的研究与设计;张锐;《中国优秀硕士学位论文全文数据库 信息科技辑(月刊 )》;20111215(第12期);正文第23-24页第3.3节即时编译器的优势 * |
嵌入式处理器指令预取关键技术设计研究;龚帅帅;《中国优秀硕士学位论文全文数据库 信息科技辑(月刊 )》;20100815(第8期);正文第15页最后一段-第16页最后一 * |
Also Published As
Publication number | Publication date |
---|---|
CN103870249A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9021511B1 (en) | Runtime management of TOC pointer save and restore commands | |
US7568189B2 (en) | Code translation and pipeline optimization | |
US8381203B1 (en) | Insertion of multithreaded execution synchronization points in a software program | |
US9329875B2 (en) | Global entry point and local entry point for callee function | |
CN107450888A (zh) | 嵌入式数字信号处理器中的零开销循环 | |
US20090204794A1 (en) | Methods computer program products and systems for unifying program event recording for branches and stores in the same dataflow | |
US8448157B2 (en) | Eliminating redundant operations for common properties using shared real registers | |
US7269828B2 (en) | Method for safely instrumenting large binary code | |
CN108052643A (zh) | 基于LSM Tree结构的数据存储方法、装置及存储引擎 | |
CN105389134B (zh) | 一种闪存接口控制方法及装置 | |
CN109101276A (zh) | 在cpu中执行指令的方法 | |
US8972701B2 (en) | Setting zero bits in architectural register for storing destination operand of smaller size based on corresponding zero flag attached to renamed physical register | |
US10795606B2 (en) | Buffer-based update of state data | |
US9977675B2 (en) | Next-instruction-type-field | |
CN103955354B (zh) | 重定位方法和装置 | |
CN103870249B (zh) | 指令地址获取方法和即时编译器 | |
US9158545B2 (en) | Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler | |
US9411590B2 (en) | Method to improve speed of executing return branch instructions in a processor | |
US20120089813A1 (en) | Computing apparatus based on reconfigurable architecture and memory dependence correction method thereof | |
CN104866285B (zh) | 可编程序控制器 | |
US7058938B2 (en) | Method and system for scheduling software pipelined loops | |
CN109240702A (zh) | 一种多线程模式下的快速段式编址配置和访问方法 | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
US20120089823A1 (en) | Processing apparatus, compiling apparatus, and dynamic conditional branch processing method | |
KR102471553B1 (ko) | 컴퓨팅 기기에 의해 수행되는 방법, 장치, 기기 및 컴퓨터 판독가능 저장 매체 |
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. |