程序变换装置由翻译部103和连接部108构成,翻译部103包含有一个提取部105,在将源程序翻译为机器语言指令序列时,提取部105对源程序中的子程序,一一检出这些子程序所必需的堆栈长度以及各子程序在运行过程中应保存的寄存器名,并且将它们与机器语言指令序列一同保存到文件中,连接部108由转移指令检测部109,文件检索部110和获得部111以及子程序调用指令生成部112所组成。(*该技术在2016年保护过期,可自由使用*)
【技术实现步骤摘要】
本专利技术是一种关于将源程序翻译为机器语言指令序列并进行连接的程序变换装置,并且也与执行上述程序变换装置所产生的机器语言指令序列的处理器有关,特别是与一种能避免在执行转向子程序的控制转移指令时所发生的流水线停顿的程序变换装置和处理器有关。使CPU(以下简称“处理器”)处理高速化的基本技术之一便是流水线处理。流水线处理是将一条指令的处理划分为多个较小的处理单位(流水线阶段),利用各阶段同时进行处理,从而提高处理速度的技术。但是,在执行转移指令时,便会产生流水线停顿(混乱),使流水线处理的性能低于理想性能。这一现象,称为转移冒险(branch hazard)。附图说明图1表示包括转移冒险的指令序列的状况。图2是执行图1的指令序列时将流水线用时钟周期来表示的示意图。流水线由三个阶段组成(IF取指令阶段,DEC指令译码阶段,EX指令执行及有效地址生成阶段)。现在假定指令1是一条转移到首地址为A的子程序的转移指令。在第一个时钟周期时在IF阶段所取得的指令1,要在第三个时钟周期的EX阶段才被执行,而在第四个时钟周期,地址为A的指令A才在IF阶段被取出,要执行这条指令,是在第六个时钟周期。也就是说,从这个例子中,已经由流水线取入的指令2、3必须放弃,从指令1开始执行到指令A执行为止,需要三个时钟周期。图2中,用灰色来表示流水线停顿。为避免这样的转移风险,作为先有技术,有称为延迟转移的方法(例如,David A.Patterson和John L.Hennesy的ComputerArchitectureA Quantitative Approach”,Morgan KaufmannPublishers,1990)。按此延迟转移方法,编译程序在编译时,对指令进行调整,例如,采用了这样的方法,即将转移目标指令预先移动到相当于转移指令的后继指令的位置(转移延迟槽)。图3是转移目标指令放到了转移延迟槽时的指令序列的示意图。作为转移目标指令的指令A、B,作为转移指令1的后续指令,被移动到地址2、3。图4是图3中所示的指令序列被执行时的流水线。从该图可知,利用延迟转移方法,不会取出无效的指令,不会产生图2所示的流水线停顿,因而利用图3的延迟转移的调整方法,可以解决转移冒险问题。但是,利用延迟转移方法,并不一定能将转移目标指令移动到转移延迟槽中,并不总能消除转移冒险这一问题。具体来说,在图1所示的例中,有时编译程序并不能识别出以地址A为首址的子程序。通常,编译程序逐个对包含程序的文件进行翻译,有时包含指令1的程序和包含指令A、B的子程序是处于不同的文件中。因此,当只给定包含有指令1的程序所在的文件时,编译程序就不能将转移目标指令A、B移动到转移延迟槽中,因而不能进行调整。因此,当要转移到处于其它文件中的指令时,仍旧会产生转移冒险的问题。为了避免上述问题,考虑过多种方法,例如在编辑程序时,尽量不要转移到处于其它文件中的子程序,或者是预先对程序中发生转移的位置进行调查,将有关的子程序都收集到同一个文件之中,在进行上述处理之后,再进行编译。但是,这样的方法,在设计程序时必须时常考虑到转移目标处的指令配置,导致了程序的设计或开发的作业效率下降。进而,作为编译单位的文件长度增大,使编译的时间过长。本专利技术的目的,就是要提供一种变换装置,对子程序调用指令和被调用的子程序来说,即使它们存储在不同的文件中,也不会产生流水线停顿,该程序变换装置就是要生成这样的能够调用子程序的可执行程序,本专利技术的另一个目的,是提供能够执行前述可执行程序的处理器。为了达到上述目的,下述的程序变换装置以及执行它的可执行程序的处理器便可达到这一目的。首先,在将程序翻译为机器语言指令序列时,对程序中的各子程序,逐个地检测出它们所需堆栈的长度,与机器语言指令序列同时保存到文件中。其次,在连接分散在多个文件中的机器语言指令序列时,从机器语言程序中检测出转移到子程序的转移指令,从包含有该转移目标子程序的前述文件中,读出该子程序所需的堆栈的长度,并将该转移指令转换为既包括转移到转移目标,又包括分配所需堆栈长度的堆栈空间而执行的一系列操作为内容的指令序列。执行这样的可执行目标程序的处理器,并不象通常的那样在子程序的转移指令执行之后,再取出分配堆栈的指令,而是连续取出子程序转移指令和分配堆栈的指令。此外,利用下述的程序变换装置和执行其可执行目标程序的处理器,便可达到上述目的。也就是说,首先,在将程序翻译为机器语言指令序列时,对程序中的各子程序,检测出各子程序运行中所要保存的寄存器名,将它们与机器语言指令序列同时保存到文件中。其次,在连接包含在多个文件之中的机器语言指令序列时,从机器语言指令序列中检测出转移到子程序的转移指令,从包含有该转移目标子程序的前述文件中,读出在该子程序的运行中所要保存的所有寄存器名,并将该转移指令置换为执行下述一系列操作为内容的指令,这些处理就是转移到目标子程序的转移操作,以及保存这些寄存器内容的一系列操作。执行这样的可执行目标程序的处理器,并不是象传统的那样在完成了向子程序的转移之后,才去取出保存寄存器内容的指令,而是完成一个相当于连续取出子程序转移指令和保存寄存器内容指令的动作。进而,为了达到上述目的,也可利用下述的程序转换装置和执行该装置的可执行目标程序的处理器来达到。也就是说,首先,在将源程序翻译为机器语言程序时,对程序中的子程序,逐个检测出它们所需要的堆栈长度和子程序运行中应该保存的寄存器名,将它们与机器语言指令序列一同保存到文件中。此后,在连接分散在多个文件中的机器语言指令序列的时候,从机器语言指令序列中,检测出转移到子程序的控制转移指令,从包含有该转移目标子程序的前述文件中,读出该子程序所需的堆栈长度以及该子程序的运行中应保存的寄存器名,并将该控制转移指令置换为执行一系列操作为内容的指令,这些操作包括使控制转移到转移目标子程序,分配所需长度堆栈,以及保存寄存器内容的操作。执行这样的可执行目标程序的处理器,并不象传统的那样等到控制转移到子程序之后,才去取出分配堆栈的指令和保存寄存器内容的指令,而是执行一系列动作,这些动作相当于连续地取出使控制转移到子程序的指令、分配堆栈的指令以及保存寄存器内容的指令。这样一来,利用这样的程序变换装置和处理器,即便是对那些将子程序调用指令和被调用的子程序放到不同的文件中的源程序来说,都可以避免因执行控制转移指令或取出转移目标指令时所导致的冒险等而引起的流水线停顿的发生,达到高速进行控制转移的效果。图1是传统的处理器在执行时,产生转移冒险的指令序列示意图。图2是图1中的指令序列在传统的处理器上执行时的流水线示意图。图3是图1中所示的指令序列中,将控制转移目标指令,挪到了转移延迟槽时的指令序列示意图。图4是图3所示的指令序列,在传统的处理器上执行时的流水线示意图。图5是与本专利技术的第1实施例有关的程序变换装置的结构示意框图。图6是该实施例中的包含在输入文件A 101中的主程序f( )的源程序清单。图7是该实施例中的包含在输入文件B 102中的子程序g( )的源程序清单。图8是该实施例中的包含在文件A 106中的主程序f( )的机器语言指令的清单。图9是该实施例中的包含在文件B 107中的子程序g( )的机器语本文档来自技高网...
【技术保护点】
一种由将源程序翻译为机器语言指令序列并以文件形式进行输出的翻译装置以及连接包含在多个前述文件中的机器语言指令序列的连接装置所构成的程序变换装置,其特征在于,前述翻译装置包括:.堆栈大小提取装置,它对源程序中所包含的各子程序,提取出它们所 必需的堆栈长度,并与子程序的机器语言指令序列一起保存到前述文件之中;前述连接装置包括:.控制转移指令检测装置,它从前述机器语言指令序列中检测出转移到子程序的控制转移指令;.文件检索装置,它确定出包含有作为控制转移目标的子程序的文 件,该子程序则由所检测出的转移指令所指定;.堆栈长度获得装置,它从前述文件检索装置所确定出的文件中读出前述转移目标子程序运行所需的堆栈长度;.第一置换装置,它将前述的控制转移指令置换为一个以上的指令,而这些指令的内容包括将控制转移到 前述转移目标子程序,以及分配由前述堆栈长度获得装置所读出的堆栈长度那样大小的堆栈等一系列操作。
【技术特征摘要】
...
【专利技术属性】
技术研发人员:高山秀一,桧垣信生,富永宣辉,宫地信哉,漆原诚一,
申请(专利权)人:松下电器产业株式会社,
类型:发明
国别省市:JP[日本]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。