CN104035825B - 跳转源列表处理方法、装置及编译器 - Google Patents
跳转源列表处理方法、装置及编译器 Download PDFInfo
- Publication number
- CN104035825B CN104035825B CN201410270641.9A CN201410270641A CN104035825B CN 104035825 B CN104035825 B CN 104035825B CN 201410270641 A CN201410270641 A CN 201410270641A CN 104035825 B CN104035825 B CN 104035825B
- Authority
- CN
- China
- Prior art keywords
- jump instruction
- jump
- address
- instruction
- pointer
- 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
- Executing Machine-Instructions (AREA)
Abstract
本发明提供一种跳转源列表处理方法、装置及编译器,该方法包括:获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数;以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。本发明通过延迟槽存储跳转源列表中的跳转指令地址信息,避免在内存上设置专用空间以链表结构方式用来存储跳转源列表中的跳转指令地址信息所造成的内存开销,在跳转目标的地址确定后,通过对代码缓冲区的一次遍历即可完成对n条跳转指令的目标地址的修改,相对于现有技术可以减少根据跳转目标的地址修改n条跳转指令的遍历次数,提高对n条指令进行修改的执行效率。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种跳转源列表处理方法、装置及编译器。
背景技术
在编译器的实现过程中,需向指令缓存(buffer)序列中发射跳转指令编码,由于当前无法获得跳转目标地址,从而无法确定确切的跳转指令编码。因此,只有当编译过程结束,并且所有指令位置都确定后,才能确定跳转目标地址,而对于例如分支跳转、绝对跳转、寄存器跳转等跳转目标一致的跳转指令,需要根据该些跳转指令的地址生成跳转源列表,以实现跳转目标地址确定后,根据跳转源列表对这些指令进行统一修改。
现有技术通过在内存设置专用链表空间存储跳转目标一致的跳转指令的地址以生成跳转源列表。
然而,现有技术存在内存开销较大,对指令进行统一修改的执行效率低的问题。
发明内容
本发明提供一种跳转源列表的处理方法、装置及编译器,可以实现通过延迟槽存储跳转源列表信息,避免在内存上设置专用空间以链表结构方式用来存储跳转源列表信息所造成的内存开销,在跳转目标的地址确定后,通过对代码缓冲区的一次遍历即可完成对n条跳转指令的目标地址的修改,相对于现有技术可以减少根据跳转目标的地址修改n条跳转指令的遍历次数,提高对n条指令进行修改的执行效率。
本发明第一方面,提供一种跳转源列表的处理方法,包括:
获取跳转目标的标识,所述跳转目标对应n条跳转指令,所述n为大于等于2的正整数;
以所述标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向所述延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。
本发明第二方面,提供一种跳转源列表处理装置,包括:
获取模块,用于获取跳转目标的标识,所述跳转目标对应n条跳转指令,所述n为大于等于2的正整数;
生成模块,用于以所述获取模块获取的标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向所述延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。
本发明第三方面,提供一种编译器,包括:如上所述的任意一种跳转源列表处理装置。
本发明提供的跳转源列表处理方法、装置及编译器,通过首先获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数,再以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息,实现通过延迟槽存储跳转源列表中跳转指令地址信息,可以避免在内存上设置专用空间以链表结构方式用来存储跳转源列表中跳转指令地址信息所造成的内存开销,在跳转目标的地址确定后,通过对代码缓冲区的一次遍历即可完成对n条跳转指令的目标地址的修改,相对于现有技术可以减少根据跳转目标的地址修改n条跳转指令的遍历次数,提高对n条指令进行修改的执行效率。
附图说明
图1为本发明提供的跳转源列表处理方法实施例一的流程图;
图2为现有技术的跳转源列表的生成示意图;
图3为MIPS中延迟槽的原理示意图;
图4为本发明提供的跳转源列表处理方法实施例二的流程图;
图5A-图5C为本发明的跳转源列表的生成示意图;
图6为本发明提供的跳转源列表处理装置实施例一的结构示意图;
图7为本发明提供的跳转源列表处理装置实施例二的结构示意图;
图8为本发明提供的跳转源列表处理装置实施例三的结构示意图;
图9为本发明提供的跳转源列表处理装置实施例四的结构示意图。
图10为本发明提供的编译器的结构示意图。
具体实施方式
图1为本发明提供的跳转源列表处理方法实施例一的流程图,如图1所示,本实施例的跳转源列表处理方法包括:
S101、获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数。
举例来说,跳转目标对应分支跳转指令、短跳转指令和长跳转指令等三条指令,则先获取该跳转目标的标识,其中,该跳转目标的标识用作指针,通过给标识赋值使标识指向n条跳转指令中每条跳转指令后的延迟槽。
S102、以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。
具体来说,本实施例的适用场景可以为无内部互锁流水级的微处理器(Microprocessor without Interlocked piped stages architecture,简称MIPS)中编译器的实现过程。
对于跳转目标一致的跳转指令,需要根据该些跳转指令的地址生成跳转源列表,以实现跳转目标地址确定后,对这些跳转指令进行统一修改,跳转源列表中可以包括跳转目标的标识以及各跳转指令的地址信息等。
可以理解的是,本实施例将跳转指令在代码缓冲区中的地址信息存储至跳转指令后的延迟槽时,可以按照一定的顺序顺次将n条跳转指令的地址信息存储至对应的延迟槽,也可以不按照顺序,将n条跳转指令的地址信息乱序存储至延迟槽中。
图2为现有技术的跳转源列表的生成示意图,如图2所示,现有技术以链表结构的方式存储跳转源列表;假设分支跳转指令、短跳转指令和长跳转指令都跳转至共同的跳转目标,在内存上设置专用空间以链表结构方式用来存储跳转源列表的信息,首先以共同的跳转目标的标识作为链表头,按照链表指针的指示依次将分支跳转指令、短跳转指令和长跳转指令的指令地址插入到链表中,生成跳转源列表,然后,一旦确定共同的跳转目标的地址,首先从链表头开始遍历链表找到待修改的跳转指令的地址,再根据查找到的待修改的跳转指令的地址遍历代码缓冲区以查找到待修改的跳转指令,再根据共同的跳转目标的地址,对待修改的跳转指令进行修改,其余跳转指令同样通过上述过程进行查找修改。
图3为MIPS中延迟槽的原理示意图,如图3所示,MIPS流水线分五级:取指、读取寄存器、算术或者逻辑操作、读写数据高速缓存中的内存变量、写回寄存器。由于MIPS分支指令下一条指令的目标地址确定前,流水线的取指级是不能工作的。为了利用这个时间片,在MIPS体系结构的层面上规定跳转指令后面的一个时间片为分支延迟槽,位于分支延迟槽中的指令总是被执行,与分支发生与否没有关系,且其先于分支指令提交。
本实施例提供的跳转源列表处理方法,通过首先获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数,再以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息,实现通过延迟槽存储跳转源列表中的跳转指令地址信息,可以避免在内存上设置专用空间以链表结构方式用来存储跳转源列表中的跳转指令地址信息所造成的内存开销,在跳转目标的地址确定后,通过对代码缓冲区的一次遍历即可完成对n条跳转指令的目标地址的修改,相对于现有技术可以减少根据跳转目标的地址修改n条跳转指令的遍历次数,提高对n条指令进行修改的执行效率。
图4为本发明提供的跳转源列表处理方法实施例二的流程图,如图4所示,本实施例的跳转源列表处理方法,在图1所示实施例的基础上,包括:
S201、获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数。
S202、以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。
S203、若确定出跳转目标的地址,则根据标识确定n条跳转指令的存储地址,根据跳转目标的地址修改n条跳转指令的目标地址。
在一个实施例中,S202可以包括:
以标识为指针按顺序指向n条跳转指令中第k条跳转指令后的延迟槽,以使延时槽存储第k-1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第0条跳转指令在代码缓冲区中的地址信息为空值。
图5A-图5C为本发明的跳转源列表的生成示意图,如图5A-图5C所示,假设跳转目标对应分支跳转指令、短跳转指令和长跳转指令等三条跳转指令,分支跳转指令、短跳转指令和长跳转指令在代码缓冲区中自上而下依次为第1条、第2条和第3条跳转指令,首先如图5A所示,当分支跳转指令生成时,以跳转目标的标识为指针指向分支跳转指令后的延迟槽的地址,以使分支跳转指令后的延迟槽存储第0条跳转指令的地址信息,即为空值;如图5B所示,当短跳转指令生成时,以跳转目标的标识为指针指向短跳转指令后的延迟槽的地址,以使短跳转指令后的延迟槽存储第1条跳转指令,即分支跳转指令的地址信息;最后,如图5C所示,假设长跳转指令生成时,以跳转目标的标识为指针指向长跳转指令后的延迟槽的地址,以使长跳转指令后的延迟槽存储第2条跳转指令,即短跳转指令的地址信息。藉此就利用延迟槽存储了跳转到同一跳转目标的跳转指令的跳转源列表。
相应地,S203可以包括:
根据标识确定第n条跳转指令的存储地址,根据跳转目标的地址修改第n条跳转指令的目标地址;
根据标识按顺序指向的n条跳转指令中第p条跳转指令后的延迟槽中存储的地址信息,确定第p-1条跳转指令的存储地址,根据跳转目标的地址修改第p-1条跳转指令的目标地址,其中,1<p≤n;
当标识指向的内容为空值时,完成修改。
进一步地,在当标识指向的内容为空值时,完成修改之前,还可以包括:
将第p条跳转指令后的延迟槽中存储的地址信息恢复为原值。
具体来说,在当标识指向的内容为空值时,完成修改之前,在获取到第p条跳转指令后的延迟槽中存储的地址信息之后,将第p条跳转指令后的延迟槽中存储的地址信息恢复为原值,以实现延迟槽的可重复使用。
举例来说,继续参见图5C,自下而上首先根据标识确定第3条跳转指令,即长跳转指令的存储地址,因为每条跳转指令后都会携带有对应的延迟槽,每对跳转指令-延迟槽之间的存储地址差值为固定差值,当标识指向延迟槽时,可以使用该标识减去固定差值,以确定该延迟槽对应的跳转指令,即长跳转指令,的存储地址,再根据确定的跳转目标的地址修改长跳转指令的目标地址,接着根据标识按照自下而上的顺序指向第3条跳转指令,即长跳转指令后的延迟槽中存储的地址信息,以确定第2条跳转指令,即短跳转指令的存储地址,将长跳转指令后的延迟槽中存储的地址信息恢复为原值,再根据跳转目标的地址修改第2条跳转指令,即短跳转指令的目标地址,接着根据标识按照自下而上的顺序指向第2条跳转指令,即短跳转指令后的延迟槽中存储的地址信息,以确定第1条跳转指令,即分支跳转指令的存储地址,将短跳转指令后的延迟槽中存储的地址信息恢复为原值,再根据跳转目标的地址修改第1条跳转指令,即分支跳转指令的目标地址,当标识指向的内容为空值,即分支跳转指令后的延迟槽中存储的地址信息为空值,确定修改完成。
本实施例的代码片段可以如下:
1.形成跳转源列表,
1)取得前一个跳转到跳转目标的指令地址
JmpSrc prev=JmpSrc(label->use(j.offset()));
2)将延迟槽里的值赋值为前一个跳转到此跳转目标的指令地址
setInt32(j-4,prev)
2.处理跳转源列表:
在另一个实施例中,S202可以包括:
以标识为指针按顺序指向n条跳转指令中第k条跳转指令后的延迟槽,以使延时槽存储第k+1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第n+1条跳转指令在代码缓冲区中的地址信息为空值。
相应地,S203可以包括:
以标识为指针指向第1条跳转指令后的延迟槽;
根据标识确定第1条跳转指令的存储地址,根据跳转目标的地址修改第1条跳转指令的目标地址;
根据标识按顺序指向的n条跳转指令中第q条跳转指令后的延迟槽中存储的地址信息,确定第q+1条跳转指令的存储地址,根据跳转目标的地址修改第q+1条跳转指令的目标地址,其中,1≤q<n;
当标识指向的内容为空值时,完成修改。
进一步地,在当标识指向的内容为空值时,完成修改之前,还可以包括:
将第q条跳转指令后的延迟槽中存储的地址信息恢复为原值。
具体来说,该实现方式与上一实现方式的不同之处在于:上一实现方式中的延迟槽存储的是上一跳转指令的地址信息,该实现方式中的延迟槽存储的是下一跳转指令的地址信息,并且以标识为指针指向第1条跳转指令后的延迟槽,确定第1条跳转指令的存储地址,其余实现过程类似,此处不再赘述。
本实施例提供的跳转源列表处理方法,通过首先获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数,再以标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息,若确定出跳转目标的地址,则根据标识确定n条跳转指令的存储地址,根据跳转目标的地址修改n条跳转指令的目标地址,实现通过延迟槽存储跳转源列表中的跳转指令地址信息,可以避免在内存上设置专用空间以链表结构方式用来存储跳转源列表中的跳转指令地址信息所造成的内存开销,在跳转目标的地址确定后,通过对代码缓冲区的一次遍历即可完成对n条跳转指令的目标地址的修改,相对于现有技术可以减少根据跳转目标的地址修改n条跳转指令的遍历次数,提高对n条指令进行修改的执行效率。
图6为本发明提供的跳转源列表处理装置实施例一的结构示意图,如图6所示,本实施例的跳转源列表处理装置包括:获取模块61和生成模块62,其中,获取模块61用于获取跳转目标的标识,跳转目标对应n条跳转指令,n为大于等于2的正整数;生成模块62用于以获取模块61获取的标识为指针指向n条跳转指令中每条跳转指令后的延迟槽,并在指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本发明提供的跳转源列表处理装置实施例二的结构示意图,如图7所示,本实施例的跳转源列表处理装置,在图6所示实施例的基础上,还包括:修改模块63,修改模块63,用于若确定出跳转目标的地址,则根据生成模块62中作为指针的标识确定n条跳转指令的存储地址,根据跳转目标的地址修改n条跳转指令的目标地址。
图8为本发明提供的跳转源列表处理装置实施例三的结构示意图,如图8所示,本实施例的跳转源列表处理装置,在图7所示实施例的基础上,生成模块62,具体用于:
以获取模块61获取的标识为指针按顺序指向n条跳转指令中第k条跳转指令后的延迟槽,以使延时槽存储第k-1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第0条跳转指令在代码缓冲区中的地址信息为空值。
相应地,修改模块63包括:第一修改单元631、第二修改单元632、第一确定单元633,其中,第一修改单元631用于根据生成模块62中作为指针的标识确定第n条跳转指令的存储地址,根据跳转目标的地址修改第n条跳转指令的目标地址;第二修改单元632用于根据生成模块62中作为指针的标识按顺序指向的n条跳转指令中第p条跳转指令后的延迟槽中存储的地址信息,确定第p-1条跳转指令的存储地址,根据跳转目标的地址修改第p-1条跳转指令的目标地址,其中,1<p≤n;第一确定单元633用于当生成模块62中作为指针的标识指向的内容为空值时,确定完成修改。
进一步地,修改模块63,还包括:第一恢复单元634,第一恢复单元634用于将第二修改单元632执行的所述第p条跳转指令后的延迟槽中存储的地址信息恢复为原值。
图9为本发明提供的跳转源列表处理装置实施例四的结构示意图,如图9所示,本实施例的跳转源列表处理装置,在图7所示实施例的基础上,生成模块62,具体用于:
以获取模块61获取的标识为指针按顺序指向n条跳转指令中第k条跳转指令后的延迟槽,以使延时槽存储第k+1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第n+1条跳转指令在代码缓冲区中的地址信息为空值。
相应地,修改模块63包括:指向单元635、第三修改单元636、第四修改单元637、第二确定单元638,其中,指向单元635用于以生成模块62中作为指针的标识为指针指向第1条跳转指令后的延迟槽;第三修改单元636用于根据生成模块62中作为指针的标识确定第1条跳转指令的存储地址,根据跳转目标的地址修改第1条跳转指令的目标地址;第四修改单元637用于根据生成模块62中作为指针的标识按顺序指向的n条跳转指令中第q条跳转指令后的延迟槽中存储的地址信息,确定第q+1条跳转指令的存储地址,根据跳转目标的地址修改第q+1条跳转指令的目标地址,其中,1≤q<n;第二确定单元638用于当生成模块62中作为指针的标识指向的内容为空值时,确定完成修改。
进一步地,修改模块63还包括:第二恢复单元639,第二恢复单元639用于将第四修改单元637执行的所述第q条跳转指令后的延迟槽中存储的地址信息恢复为原值。
图7-图9所示的装置,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图10为本发明提供的编译器的结构示意图,如图10所示,本实施例的编译器100,可以包括:如图6-图9所示跳转源列表处理装置实施例中的任意一种跳转源列表处理装置110。
需要说明的是,上述各实施例对应的结构示意图仅为一种示意,各部分或模块的连接关系不限于图中示出的形式,可以以实际应用中的情况为准。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (17)
1.一种跳转源列表处理方法,其特征在于,包括:
获取跳转目标的标识,所述跳转目标对应n条跳转指令,所述n为大于等于2的正整数;
以所述标识为指针依次指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向所述延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息至所述延迟槽中。
2.根据权利要求1所述的方法,其特征在于,所述以所述标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息之后,还包括:
若确定出所述跳转目标的地址,则根据所述标识确定所述n条跳转指令的存储地址,根据所述跳转目标的地址修改所述n条跳转指令的目标地址。
3.根据权利要求2所述的方法,其特征在于,所述以所述标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息,包括:
以所述标识为指针按顺序指向所述n条跳转指令中第k条跳转指令后的延迟槽,以使所述延迟槽存储所述第k-1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第0条跳转指令在代码缓冲区中的地址信息为空值。
4.根据权利要求2所述的方法,其特征在于,所述以所述标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向延迟槽时存储对应的跳转指令在代码缓冲区中的地址信息,包括:
以所述标识为指针按顺序指向所述n条跳转指令中第k条跳转指令后的延迟槽,以使所述延迟槽存储所述第k+1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第n+1条跳转指令在代码缓冲区中的地址信息为空值。
5.根据权利要求3所述的方法,其特征在于,所述根据所述标识确定所述n条跳转指令的存储地址,根据所述跳转目标的地址修改所述n条跳转指令的目标地址,包括:
根据所述标识确定第n条跳转指令的存储地址,根据所述跳转目标的地址修改所述第n条跳转指令的目标地址;
根据所述标识按顺序指向的所述n条跳转指令中第p条跳转指令后的延迟槽中存储的地址信息,确定第p-1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第p-1条跳转指令的目标地址,其中,1<p≤n;
当标识指向的内容为空值时,完成修改。
6.根据权利要求5所述的方法,其特征在于,在所述当标识指向的内容为空值时,完成修改之前,还包括:
将所述第p条跳转指令后的延迟槽中存储的地址信息恢复为原值。
7.根据权利要求4所述的方法,其特征在于,所述根据所述标识确定所述n条跳转指令的存储地址,根据所述跳转目标的地址修改所述n条跳转指令的目标地址,包括:
以所述标识为指针指向第1条跳转指令后的延迟槽;
根据所述标识确定所述第1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第1条跳转指令的目标地址;
根据所述标识按顺序指向的所述n条跳转指令中第q条跳转指令后的延迟槽中存储的地址信息,确定第q+1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第q+1条跳转指令的目标地址,其中,1≤q<n;
当标识指向的内容为空值时,完成修改。
8.根据权利要求7所述的方法,其特征在于,在所述当标识指向的内容为空值时,完成修改之前,还包括:
将所述第q条跳转指令后的延迟槽中存储的地址信息恢复为原值。
9.一种跳转源列表处理装置,其特征在于,包括:
获取模块,用于获取跳转目标的标识,所述跳转目标对应n条跳转指令,所述n为大于等于2的正整数;
生成模块,用于以所述获取模块依次获取的标识为指针指向所述n条跳转指令中每条跳转指令后的延迟槽,并在所述指针指向所述延迟槽时存对应的跳转指令在代码缓冲区中的地址信息至所述延迟槽中。
10.根据权利要求9所述的装置,其特征在于,还包括:
修改模块,用于若确定出所述跳转目标的地址,则根据所述生成模块中作为指针的标识确定所述n条跳转指令的存储地址,根据所述跳转目标的地址修改所述n条跳转指令的目标地址。
11.根据权利要求10所述的装置,其特征在于,所述生成模块,具体用于:
以所述获取模块获取的标识为指针按顺序指向所述n条跳转指令中第k条跳转指令后的延迟槽,以使所述延迟槽存储所述第k-1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第0条跳转指令在代码缓冲区中的地址信息为空值。
12.根据权利要求10所述的装置,其特征在于,所述生成模块,具体用于:
以所述获取模块获取的标识为指针按顺序指向所述n条跳转指令中第k条跳转指令后的延迟槽,以使所述延迟槽存储所述第k+1条跳转指令在代码缓冲区中的地址信息,其中,1≤k≤n,且第n+1条跳转指令在代码缓冲区中的地址信息为空值。
13.根据权利要求11所述的装置,其特征在于,所述修改模块,包括:
第一修改单元,用于根据所述生成模块中作为指针的标识确定第n条跳转指令的存储地址,根据所述跳转目标的地址修改所述第n条跳转指令的目标地址;
第二修改单元,用于根据所述生成模块中作为指针的标识按顺序指向的所述n条跳转指令中第p条跳转指令后的延迟槽中存储的地址信息,确定第p-1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第p-1条跳转指令的目标地址,其中,1<p≤n;
第一确定单元,用于当所述生成模块中作为指针的标识指向的内容为空值时,确定完成修改。
14.根据权利要求13所述的装置,其特征在于,所述修改模块,还包括:
第一恢复单元,用于将所述第二修改单元执行的所述第p条跳转指令后的延迟槽中存储的地址信息恢复为原值。
15.根据权利要求12所述的装置,其特征在于,所述修改模块,包括:
指向单元,用于以所述生成模块中作为指针的标识为指针指向第1条跳转指令后的延迟槽;
第三修改单元,用于根据所述生成模块中作为指针的标识确定所述第1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第1条跳转指令的目标地址;
第四修改单元,用于根据所述生成模块中作为指针的标识按顺序指向的所述n条跳转指令中第q条跳转指令后的延迟槽中存储的地址信息,确定第q+1条跳转指令的存储地址,根据所述跳转目标的地址修改所述第q+1条跳转指令的目标地址,其中,1≤q<n;
第二确定单元,用于当生成模块中作为指针的标识指向的内容为空值时,确定完成修改。
16.根据权利要求15所述的装置,其特征在于,所述修改模块,还包括:
第二恢复单元,用于将所述第四修改单元执行的所述第q条跳转指令后的延迟槽中存储的地址信息恢复为原值。
17.一种编译器,其特征在于,包括:如权利要求9-16中任一项所述的跳转源列表处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410270641.9A CN104035825B (zh) | 2014-06-17 | 2014-06-17 | 跳转源列表处理方法、装置及编译器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410270641.9A CN104035825B (zh) | 2014-06-17 | 2014-06-17 | 跳转源列表处理方法、装置及编译器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104035825A CN104035825A (zh) | 2014-09-10 |
CN104035825B true CN104035825B (zh) | 2018-01-02 |
Family
ID=51466599
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410270641.9A Active CN104035825B (zh) | 2014-06-17 | 2014-06-17 | 跳转源列表处理方法、装置及编译器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104035825B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106155660B (zh) * | 2015-04-14 | 2019-06-25 | 龙芯中科技术有限公司 | 随机测试程序生成方法及装置 |
CN113138798A (zh) * | 2020-01-18 | 2021-07-20 | 佛山市云米电器科技有限公司 | 多场景下的指令执行方法、装置、设备及存储介质 |
CN112905242B (zh) | 2021-03-23 | 2022-12-06 | 浙江大华技术股份有限公司 | 分支路径跳转方法、装置、存储介质及电子装置 |
CN113110879B (zh) * | 2021-03-31 | 2023-05-30 | 北京中科晶上科技股份有限公司 | 指令处理方法及装置 |
Citations (4)
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 |
CN101604255A (zh) * | 2009-07-23 | 2009-12-16 | 上海交通大学 | 中间语言的延迟跳转指令二进制翻译实现的方法 |
CN103577242A (zh) * | 2013-11-14 | 2014-02-12 | 中国科学院声学研究所 | 针对已调度汇编代码的控制流图重构方法 |
CN103955354A (zh) * | 2014-05-09 | 2014-07-30 | 龙芯中科技术有限公司 | 重定位方法和装置 |
-
2014
- 2014-06-17 CN CN201410270641.9A patent/CN104035825B/zh active Active
Patent Citations (4)
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 |
CN101604255A (zh) * | 2009-07-23 | 2009-12-16 | 上海交通大学 | 中间语言的延迟跳转指令二进制翻译实现的方法 |
CN103577242A (zh) * | 2013-11-14 | 2014-02-12 | 中国科学院声学研究所 | 针对已调度汇编代码的控制流图重构方法 |
CN103955354A (zh) * | 2014-05-09 | 2014-07-30 | 龙芯中科技术有限公司 | 重定位方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104035825A (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104035825B (zh) | 跳转源列表处理方法、装置及编译器 | |
CN106875013B (zh) | 用于多核优化循环神经网络的系统和方法 | |
CN105579967B (zh) | Gpu发散栅栏 | |
US9684494B2 (en) | Efficient parallel computation of dependency problems | |
CN103250131B (zh) | 包括用于早期远分支预测的影子缓存的单周期多分支预测 | |
CN109919311A (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
CN105453031B (zh) | 用于优化指令的方法和系统 | |
US9292291B2 (en) | Instruction merging optimization | |
CN109144568A (zh) | 将有效位通道作为矢量断言暴露于cpu | |
CN102855121B (zh) | 分支处理方法与系统 | |
CN106843810A (zh) | 跟踪指令的控制流程 | |
CN1809810A (zh) | 指令控制数据处理设备 | |
IL261429A (en) | Complex multiplication instruction | |
CN106406820A (zh) | 一种网络处理器微引擎的多发射指令并行处理方法及装置 | |
US11705207B2 (en) | Processor in non-volatile storage memory | |
CN103955354B (zh) | 重定位方法和装置 | |
CN103729142B (zh) | 内存数据的推送方法及装置 | |
CN107589957A (zh) | 具有双矢量和成双的单矢量操作模式的流参考寄存器 | |
CN105359142B (zh) | 哈希连接方法和装置 | |
CN103366013B (zh) | 一种数据处理的方法及服务器 | |
US12086706B2 (en) | Processing sequential inputs using neural network accelerators | |
CN103970512B (zh) | 多核处理器及其并行重放方法 | |
CN104899159A (zh) | 高速缓冲存储器Cache地址的映射处理方法和装置 | |
US20130055186A1 (en) | System and method for clock network meta-synthesis | |
CN103268223B (zh) | 在编译过程中改善乘加类指令执行性能的方法 |
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. |