CN101452395A - 函数调用和返回的处理方法、二进制翻译方法和系统 - Google Patents
函数调用和返回的处理方法、二进制翻译方法和系统 Download PDFInfo
- Publication number
- CN101452395A CN101452395A CN 200710094328 CN200710094328A CN101452395A CN 101452395 A CN101452395 A CN 101452395A CN 200710094328 CN200710094328 CN 200710094328 CN 200710094328 A CN200710094328 A CN 200710094328A CN 101452395 A CN101452395 A CN 101452395A
- Authority
- CN
- China
- Prior art keywords
- instruction
- function call
- address
- order
- jump
- 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
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种函数调用和返回的处理方法、二进制翻译方法和系统,所述函数调用和返回的处理方法包括:将源程序的函数调用的返回地址作为假指令保存在目标程序的函数调用指令之后;在目标程序的函数调用开始,将所述假指令的地址保存到栈中;在目标程序的函数调用结束,将栈顶保存的地址取出,在所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址时,跳转到所述假指令后。本发明可以在函数调用后快速返回,并且可以避免因哈希冲突造成效率低的问题,因此能够减少返回型间接分支的开销,提高二进制翻译的性能。
Description
技术领域
本发明涉及二进制翻译,特别是涉及函数调用和返回的处理方法、二进制翻译方法和系统。
背景技术
二进制翻译是将一种(源)机器上的可执行程序翻译成另一种(目标)机器上的可执行程序的过程,二进制翻译系统使得已有的大量应用程序可以直接为新的平台所利用。如图1所示,源机器11的可执行程序111(以下简称为源程序)通过目标机器12上的二进制翻译系统121,被转换成目标机器的可执行程序122(以下简称为目标程序)。
函数调用和返回在程序中十分多见,虽然不同的高级语言调用函数的形式不同,但本质是类似的,都遵循后进先出(LIFO)的原则,即最后被调用的函数最先返回。因此可以使用栈来实现,例如,
函数调用的一般形式为:
call P ;调用以P为起始地址的子函数
R:....... ;call后面的指令是从地址R开始的
二进制翻译系统将函数调用翻译为:
push R ;将返回地址R保存(push)到栈中
jmp P’ ;通过二进制翻译后,子函数的起始地址为P’函数返回的一般形式为:
ret
二进制翻译系统将函数返回翻译为:
save scratch registers%eax,%ebx,%flags;保存以下程序用到的寄存器值
pop%eax ;从栈中弹出(pop)一个元素,即源程序的返回地址R
%eax:=ILtoOLAddress(%eax);将源程序的返回地址R映射到目标程
;序的返回地址R’
store(Return Target),%eax;保存目标程序的返回地址R’
restore scratch registers%eax,%ebx,%flags;恢复已保存的寄存器值
jmp(Return_Target) ;跳到目标程序的返回地址R’去执行
上述二进制翻译系统在翻译返回指令时比较慢,因为不仅要将一条返回指令翻译成几条目标指令,而且还要完成一些将源程序的地址映射到目标程序的地址的工作。这样,源程序返回只需要一个时钟周期,而目标程序返回则需要很多时钟周期。子函数调用和返回在程序中十分多见,因此通过二进制翻译之后目标程序会明显变慢。
专利号为US6711672的美国专利公开了一种二进制翻译系统的函数调用和返回的处理方法,在该专利中,源程序的指令称为输入语言(IL)指令,目标程序的指令称为输出语言(OL)指令,对于每个IL子函数调用,正确的IL返回地址R被存放到栈中,相应的OL返回地址R’存放到返回目标缓存(RTC,return target cache)中,根据R来计算RTC的索引;执行到OL函数返回时,从栈顶弹出一个值,根据这个值来计算索引,根据这个索引从RTC中获得一个目标地址,如果目标地址正确,则从该地址开始执行,否则转到备份返回地址恢复模块来重新构建OL返回地址。RTC其实就是一个哈希表,根据R来计算RTC的索引就是一个哈希函数,能够将IL返回地址映射到RTC中。
因此,函数调用:
call P ;调用以P为起始地址的子函数
R:....... ;call后面的指令是从地址R开始的
被二进制翻译系统翻译为:
push R ;将IL返回地址R保存到栈中
store(RTC),R’ ;将OL返回地址R’保存到RTC中
jmp P’ ;跳到子函数的起始地址P’去执行R’:cmp%eax,R ;判断是否返回到正确的地址(命中)
jne Miss/Failure;如果不是正确的地址,则跳到备份返回地址恢复模块
restore scatch registers%eax,%ebx,%flags
......
函数返回ret被二进制翻译系统翻译为:
save scratch register%eax,%ebx,%flags
pop%eax ;从栈中弹出一个元素,即源程序的返回地址R
mov%ebx,%eax ;将返回地址R复制到%ebx
and%ebx,63 ;根据R计算RTC的索引,%ebx=R&63(哈希函数)
jmp(RTC_Base+%ebx);根据索引从RTC中获得目标程序的返回地
;址,跳到该地址去执行
在上述程序中使用“逻辑与”作为哈希函数,当从栈中弹出的值等于正确的IL返回地址时称为命中,不相等则称为不命中。哈希表是一种高效快速的数据结构,上述方法虽然改善了传统映射方法慢的问题,但是,使用哈希表不可避免地会存在哈希冲突的麻烦,在这种情况下只能跳到备份返回地址恢复模块去处理,如果哈希冲突多的话,命中率降低,二进制翻译的性能降低,程序的运行效率也就随之降低。
发明内容
本发明解决的问题是,提供一种函数调用和返回的处理方法、二进制翻译方法和系统,以消除因哈希冲突造成的性能损失,进而提高程序的运行效率。
为解决上述问题,本发明提供一种函数调用和返回的处理方法,包括:
将源程序的函数调用的返回地址作为假指令保存在目标程序的函数调用指令之后;
在目标程序的函数调用开始,将所述假指令的地址保存到栈中;
在目标程序的函数调用结束,将栈顶保存的地址取出,在所述从栈顶取出的地址的值等于所述源程序的函数调用的返回地址时,跳转到所述假指令后。
为解决上述问题,本发明还提供一种二进制翻译方法,包括:
将源程序的函数调用指令翻译成对应的目标程序的函数调用指令;
将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,并在所述假指令后,插入跳转到直接跳转指令控制中心的指令;
在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令;
在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
为解决上述问题,本发明还提供一种二进制翻译系统,包括:
函数调用指令翻译模块,用于将源程序的函数调用指令翻译成对应的目标程序的函数调用指令;
函数调用指令插入模块,用于将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,在所述假指令后插入跳转到直接跳转指令控制中心的指令;
函数调用开始翻译模块,用于在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令;
函数调用结束翻译模块,用于在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
与现有技术相比,上述技术方案不需要将源程序的返回地址映射到目标程序的返回地址、或者使用哈希表保存目标程序的返回地址;而是在函数调用指令后插入假指令以保存返回地址,在函数调用开始是将假指令的地址保存到栈中,在函数返回时通过从栈顶取出的地址得到返回地址。因此,上述技术方案避免使用返回目标缓存或栈的方式保存返回地址,也就是说,不需要引入新的数据结构来保存返回地址,其算法更为简单,因而更容易实施,并且解决了现有技术中因哈希冲突造成命中率低的问题,进而提高程序的运行效率。
另外,上述技术方案在函数调用的正确返回时不需要作上下文切换(即间接跳转指令控制中心与目标程序的切换),函数调用完成后,可以快速返回,因此也节省了返回型间接分支的开销(处理时间),提高了二进制翻译效率。
附图说明
图1是包括二进制翻译系统的目标机器与源机器的连接示意图;
图2是本发明实施例的函数调用和返回的二进制翻译和执行流程图。
具体实施方式
本发明实施例是在函数调用开始将假指令的地址保存到栈中,在函数返回时通过从栈顶取出的地址得到返回地址(即假指令的地址的值)。下面即结合附图和实施例对本发明的具体实施方式做详细的说明。
本发明实施例的二进制翻译方法,用于将源程序的函数调用和返回程序翻译成目标程序的函数调用和返回程序,所述二进制翻译方法包括:
将源程序的函数调用指令翻译成对应的目标程序的函数调用指令;
将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,并在所述假指令后,插入跳转到直接跳转指令控制中心(Direct_dipatcher)的指令;
在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令;
在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
所述插入判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令包括:插入将所述从栈顶取出的地址的值载入的指令,插入将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较的指令,和插入若所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址不相等时跳转到间接跳转指令控制中心(Indirect_dispatcher)的指令。
下面结合图2具体说明所述二进制翻译方法。
将源程序的函数调用指令call P翻译成对应的目标程序的函数调用指令jmp P’,其中,P为源程序中被调用的子函数的起始地址,P’为目标程序中被调用的子函数的起始地址,源程序中call后面的指令C是从地址R开始的。
在上述目标程序的函数调用指令jmp P’后,插入假指令R和跳转到直接跳转指令控制中心的指令:
ra:R ;ra是假指令R的地址
ra+4:jmp Direct_dipatcher ;跳转到直接跳转指令控制中心
假指令R实际上是不执行的指令,其只是将源程序的函数调用的返回地址R作为指令代码保存在地址为ra的内存中,也可以说,地址ra的值为R。上述假指令R和跳转到直接跳转指令控制中心的指令是插在指令C’前,源程序中的指令C被翻译成目标程序的指令C’,R’是指令C’的地址,即目标程序的函数调用的返回地址。第一次执行到jmp Direct_dipatcher指令时指令C还没有被翻译成指令C’,因此会跳到直接跳转指令控制中心,在指令C被翻译成指令C’后,就获得了对应于地址R(源程序的函数调用的返回地址)的地址R’(目标程序的函数调用的返回地址),直接跳转指令控制中心根据翻译后的地址R’,将跳转到直接跳转指令控制中心的指令jmp Direct_dipatcher修改为跳转到目标程序的函数调用的返回地址的指令jmp R’,这样在以后执行到地址为(ra+4)的指令时就能直接跳到地址R’,不需要在跳到直接跳转指令控制中心了。
在目标程序的函数调用开始(地址为P’),插入将所述假指令的地址保存到栈中的指令push ra。
在目标程序的函数调用结束(地址为B’),插入将栈顶保存的地址取出的指令,判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令,和跳转到所述假指令后的指令:
B’:pop Y ;取出栈顶保存的地址
load X,0(Y) ;载入从栈顶取出的地址的值
cmp X,R ;比较从栈顶取出的地址的值与源程序的函数调
;用的返回地址
beq Indirect_dispatcher ;若不相等,跳转到间接跳转指令控制中心
jmp(ra+4) ;若相等,正确返回
对于正确返回的情况,Y即为假指令R的地址ra。
对应于上述二进制翻译方法,本发明还提供一种二进制翻译系统,如图2所示,一般来说,二进制翻译系统2包括:直接跳转指令控制中心21和间接跳转指令控制中心22。本发明的二进制翻译系统2还包括:函数调用指令翻译模块23、函数调用指令插入模块24、函数调用开始翻译模块25、函数调用结束翻译模块26。
直接跳转指令控制中心21、间接跳转指令控制中心22,进行二进制翻译系统和目标程序的指令执行现场之间的切换、切换前后的保留恢复工作。具体来说,源程序的指令通常是以基本块为单位翻译为目标程序的指令,然后执行该基本块的目标程序的指令,基本块遇到跳转指令结束,因此一个基本块的目标程序的指令执行完毕后,控制权必须重新交给二进制翻译系统以搜寻并翻译下一个源程序的基本块:如果基本块结尾是直接跳转指令则通过直接跳转指令控制中心21返回到二进制翻译系统,如果基本块结尾是间接跳转指令则通过间接跳转指令控制中心22返回到二进制翻译系统。直接跳转指令是指未执行就可以确定其跳转目标的指令,间接跳转指令是指只有执行到该指令时才能确定其跳转目标的指令。
函数调用指令翻译模块23,用于将源程序的函数调用指令翻译成对应的目标程序的函数调用指令。
函数调用指令插入模块24,用于将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,在所述假指令后插入跳转到直接跳转指令控制中心21的指令jmp Direct_dipatcher。这里,直接跳转指令控制中心21是在源程序的直接跳转目标(源程序的函数调用的返回地址)R已经翻译为目标程序的直接跳转目标(目标程序的函数调用的返回地址)R’后,将跳转到直接跳转指令控制中心23的指令(jmp Direct_dipatcher)修改为跳转到目标程序的函数调用的返回地址的指令(jmp R’),这样可以消除以后执行到这里时反复切换执行现场的开销(处理时间)。
函数调用开始翻译模块25,用于在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令。
函数调用结束翻译模块26,用于在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
上述函数调用结束翻译模块26包括:取出地址指令插入模块、载入地址值指令插入模块、比较指令插入模块、间接跳转指令插入模块和直接跳转指令插入模块(未在图中显示)。
取出地址指令插入模块,用于插入将栈顶保存的地址取出的指令。
载入地址值指令插入模块,用于插入将所述从栈顶取出的地址的值载入的指令。
比较指令插入模块,用于插入将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较的指令。
间接跳转指令插入模块,用于插入比较结果为不相等时跳转到间接跳转指令控制中心的指令。
直接跳转指令插入模块,用于插入跳转到所述假指令后的指令。
对应上述的二进制翻译方法和系统,本发明还提供一种函数调用和返回的处理方法,所述函数调用和返回的处理方法是二进制翻译中的函数调用和返回的处理方法,所述方法包括:
将源程序的函数调用的返回地址作为假指令保存在目标程序的函数调用指令之后;
在目标程序的函数调用开始,将所述假指令的地址保存到栈中;
在目标程序的函数调用结束,将栈顶保存的地址取出,在所述从栈顶取出的地址的值等于所述源程序的函数调用的返回地址时,跳转到所述假指令后。
上述方法还包括在第一次跳转到所述假指令后,跳转到直接跳转指令控制中心,在以后各次跳转到所述假指令后,跳转到目标程序的函数调用的返回地址。
上述从栈顶取出的地址的值等于所述源程序的函数调用的返回地址时,跳转到所述假指令后包括:将所述从栈顶取出的地址的值载入,将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较,若比较结果为不相等则跳转到间接跳转指令控制中心;若比较结果为相等则跳转到所述假指令后。
下面再结合图2说明函数调用和返回的执行流程。
由于二进制翻译系统将函数调用的返回地址R作为假指令保存在函数调用指令之后,因此在地址为ra的内存中保存的是源程序的函数调用的返回地址R,即地址ra的值为R。
函数调用开始,先跳到被调用的函数的起始地址P’,将地址ra保存(push)到栈中,然后执行被调用的函数的指令A’及其后面的指令。
在执行完被调用的函数后,先将栈顶保存的地址取出,将从栈顶取出的地址的值与源程序的函数调用的返回地址R进行比较,即判断是否得到正确的源程序的函数调用的返回地址R:
在程序正常执行的情况下,从栈顶取出的地址实际上就是ra,地址ra的值就是源程序的函数调用的返回地址R,因此,跳转到地址(ra+4)。因为二进制翻译是以基本块(以跳转指令结束)为单位将源程序的指令翻译为目标程序的指令的,然后执行该基本块的目标程序的指令,在第一次执行地址(ra+4)的指令时,源程序的函数调用的返回地址R的指令C还没有被翻译成目标程序的指令C’,这样指令C’的地址是未知的,因此,在第一次跳到(ra+4)后执行的是指令jmp Direct_dipatcher,跳转到直接跳转指令控制中心;此时二进制翻译系统搜寻并翻译下一个源程序的基本块,在这里就是指令C所在的基本块,在二进制翻译系统将指令C翻译成目标程序的指令C’后,就可以得到指令C’的地址(即目标程序的函数调用的返回地址)R’;然后直接跳转指令控制中心23就将地址(ra+4)的指令修改为指令jmp R’,因此,在以后跳到(ra+4)后执行的是指令jmp R’,就不需要再通过直接跳转指令控制中心23,可以直接跳转到正确的目标程序的函数调用的返回地址R’,继续执行后面的指令。
在程序错误执行的情况下,从栈顶取出的地址的值不是源程序的函数调用的返回地址R,因此,跳转到间接跳转指令控制中心24,由间接跳转指令控制中心24帮助跳转到正确的目标程序的函数调用的返回地址。
综上所述,上述技术方案在函数调用指令后插入假指令以保存返回地址;在函数调用开始是将假指令的地址保存到栈中,而不是将返回地址保存到栈中;在函数返回时通过从栈顶取出的地址得到返回地址(即假指令的地址的值)。相比现有技术将源程序的返回地址映射到目标程序的返回地址、或者使用哈希表保存目标程序的返回地址来说,上述技术方案避免使用返回目标缓存或栈的方式保存返回地址,也就是说,不需要引入新的数据结构来保存返回地址,其算法更为简单,因此更容易实施,并且也解决了现有技术中因哈希冲突造成命中率低的问题,进而提高程序的运行效率。
另外,上述技术方案在函数调用的正确返回时不需要作上下文切换(即间接跳转指令控制中心与目标程序的切换),函数调用完成后,可以快速返回,因此也节省了返回型间接分支的开销(处理时间),提高了二进制翻译效率。
上述技术方案可以应用于各种二进制翻译系统中,包括跨平台的二进制翻译系统或者不跨平台的二进制翻译系统,以及非限制性的二进制翻译系统。
本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
Claims (9)
1.一种函数调用和返回的处理方法,其特征在于,包括:
将源程序的函数调用的返回地址作为假指令保存在目标程序的函数调用指令之后;
在目标程序的函数调用开始,将所述假指令的地址保存到栈中;
在目标程序的函数调用结束,将栈顶保存的地址取出,在所述从栈顶取出的地址的值等于所述源程序的函数调用的返回地址时,跳转到所述假指令后。
2.根据权利要求1所述的函数调用和返回的处理方法,其特征在于,还包括在第一次跳转到所述假指令后,跳转到直接跳转指令控制中心,在以后各次跳转到所述假指令后,跳转到目标程序的函数调用的返回地址。
3.根据权利要求1所述的函数调用和返回的处理方法,其特征在于,在所述从栈顶取出的地址的值等于所述源程序的函数调用的返回地址时,跳转到所述假指令后包括:
将所述从栈顶取出的地址的值载入;
将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较;
若比较结果为不相等则跳转到间接跳转指令控制中心;
若比较结果为相等则跳转到所述假指令后。
4.一种二进制翻译方法,其特征在于,包括:
将源程序的函数调用指令翻译成对应的目标程序的函数调用指令;
将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,并在所述假指令后,插入跳转到直接跳转指令控制中心的指令;
在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令;
在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
5.根据权利要求4所述的二进制翻译方法,其特征在于,还包括:将所述跳转到直接跳转指令控制中心的指令修改为跳转到目标程序的函数调用的返回地址的指令。
6.根据权利要求4所述的二进制翻译方法,其特征在于,所述插入判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令包括:
插入将所述从栈顶取出的地址的值载入的指令;
插入将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较的指令;
插入在所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址不相等时跳转到间接跳转指令控制中心的指令。
7.一种二进制翻译系统,其特征在于,还包括:
函数调用指令翻译模块,用于将源程序的函数调用指令翻译成对应的目标程序的函数调用指令;
函数调用指令插入模块,用于将源程序的函数调用的返回地址作为假指令插入在所述目标程序的函数调用指令之后,在所述假指令后插入跳转到直接跳转指令控制中心的指令;
函数调用开始翻译模块,用于在目标程序的函数调用开始,插入将所述假指令的地址保存到栈中的指令;
函数调用结束翻译模块,用于在目标程序的函数调用结束,插入将栈顶保存的地址取出的指令、判断所述从栈顶取出的地址的值是否等于所述源程序的函数调用的返回地址的指令、和跳转到所述假指令后的指令。
8.根据权利要求7所述的二进制翻译系统,其特征在于,所述直接跳转指令控制中心将跳转到直接跳转指令控制中心的指令修改为跳转到目标程序的函数调用的返回地址的指令。
9.根据权利要求7所述的二进制翻译系统,其特征在于,所述函数调用结束翻译模块包括:
取出地址指令插入模块,用于插入将栈顶保存的地址取出的指令;
载入地址值指令插入模块,用于插入将所述从栈顶取出的地址的值载入的指令;
比较指令插入模块,用于插入将所述从栈顶取出的地址的值与所述源程序的函数调用的返回地址进行比较的指令;
间接跳转指令插入模块,用于插入比较结果为不相等时跳转到间接跳转指令控制中心的指令;
直接跳转指令插入模块,用于插入跳转到所述假指令后的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710094328 CN101452395B (zh) | 2007-11-28 | 2007-11-28 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710094328 CN101452395B (zh) | 2007-11-28 | 2007-11-28 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101452395A true CN101452395A (zh) | 2009-06-10 |
CN101452395B CN101452395B (zh) | 2013-04-24 |
Family
ID=40734643
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710094328 Expired - Fee Related CN101452395B (zh) | 2007-11-28 | 2007-11-28 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101452395B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807145A (zh) * | 2010-04-16 | 2010-08-18 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
CN102662631A (zh) * | 2012-03-15 | 2012-09-12 | 龙芯中科技术有限公司 | 间接分支指令处理方法和装置 |
US8893100B2 (en) | 2011-07-20 | 2014-11-18 | International Business Machines Corporation | Return address optimisation for a dynamic code translator |
WO2016000550A1 (zh) * | 2014-06-30 | 2016-01-07 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN116501387A (zh) * | 2023-06-16 | 2023-07-28 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2857600B2 (ja) * | 1995-05-11 | 1999-02-17 | 松下電器産業株式会社 | プロセッサ及びプログラム翻訳装置 |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
US7290253B1 (en) * | 2003-09-30 | 2007-10-30 | Vmware, Inc. | Prediction mechanism for subroutine returns in binary translation sub-systems of computers |
-
2007
- 2007-11-28 CN CN 200710094328 patent/CN101452395B/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807145A (zh) * | 2010-04-16 | 2010-08-18 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
CN101807145B (zh) * | 2010-04-16 | 2012-12-26 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
US8893100B2 (en) | 2011-07-20 | 2014-11-18 | International Business Machines Corporation | Return address optimisation for a dynamic code translator |
CN102662631A (zh) * | 2012-03-15 | 2012-09-12 | 龙芯中科技术有限公司 | 间接分支指令处理方法和装置 |
CN102662631B (zh) * | 2012-03-15 | 2014-09-10 | 龙芯中科技术有限公司 | 间接分支指令处理方法和装置 |
WO2016000550A1 (zh) * | 2014-06-30 | 2016-01-07 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN105335203A (zh) * | 2014-06-30 | 2016-02-17 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN105335203B (zh) * | 2014-06-30 | 2018-10-19 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN116501387A (zh) * | 2023-06-16 | 2023-07-28 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
CN116501387B (zh) * | 2023-06-16 | 2023-09-12 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101452395B (zh) | 2013-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102460377B (zh) | 数据处理设备及方法 | |
CN101452395B (zh) | 函数调用和返回的处理方法、二进制翻译方法和系统 | |
CN100392586C (zh) | 用于跟踪完成表中更大量未完成指令的方法和处理器 | |
US6157999A (en) | Data processing system having a synchronizing link stack and method thereof | |
CN102184127B (zh) | 一种实现处理器预执行的方法及相应的装置 | |
CN101299192B (zh) | 一种非对齐访存的处理方法 | |
US6105124A (en) | Method and apparatus for merging binary translated basic blocks of instructions | |
CN101884025B (zh) | 用于使过程返回序列加速的方法和系统 | |
US20210247980A1 (en) | Mechanism for interrupting and resuming execution on an unprotected pipeline processor | |
CN101847096A (zh) | 包含栈变量函数的优化方法 | |
US7124287B2 (en) | Dynamically adaptive associativity of a branch target buffer (BTB) | |
US20070180218A1 (en) | Collapsible front-end translation for instruction fetch | |
US7426631B2 (en) | Methods and systems for storing branch information in an address table of a processor | |
CN101236489B (zh) | 虚拟硬件系统及其指令执行方法、以及虚拟机 | |
US10241768B2 (en) | Controlling execution of binary code | |
CN102203737B (zh) | 多线程访问多副本的方法和装置 | |
CN116501387B (zh) | 一种指令跳转方法、装置、电子设备及可读存储介质 | |
CN102662631B (zh) | 间接分支指令处理方法和装置 | |
CN110515659B (zh) | 一种原子指令的执行方法和装置 | |
EP1622034B1 (en) | Apparatus and method for controlling address conversion buffer | |
US20080229054A1 (en) | Method for performing jump and translation state change at the same time | |
CN103246496A (zh) | 非阻塞协处理器接口方法和系统 | |
US20080077777A1 (en) | Register renaming for instructions having unresolved condition codes | |
CN1678999A (zh) | 用于处理嵌套中断的方法和设备 | |
US8655638B2 (en) | Methods for converting instructions with base register-relative addressing in an emulation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130424 Termination date: 20131128 |