CN1138174A - 高速执行子程序转移指令的程序变换装置和处理器 - Google Patents

高速执行子程序转移指令的程序变换装置和处理器 Download PDF

Info

Publication number
CN1138174A
CN1138174A CN96103712A CN96103712A CN1138174A CN 1138174 A CN1138174 A CN 1138174A CN 96103712 A CN96103712 A CN 96103712A CN 96103712 A CN96103712 A CN 96103712A CN 1138174 A CN1138174 A CN 1138174A
Authority
CN
China
Prior art keywords
instruction
subroutine
aforementioned
sequence
machine language
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
Application number
CN96103712A
Other languages
English (en)
Other versions
CN1099074C (zh
Inventor
高山秀一
桧垣信生
富永宣辉
宫地信哉
漆原诚一
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Godo Kaisha IP Bridge 1
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN1138174A publication Critical patent/CN1138174A/zh
Application granted granted Critical
Publication of CN1099074C publication Critical patent/CN1099074C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

程序变换装置由翻译部103和连接部108构成,翻译部103包含有一个提取部105,在将源程序翻译为机器语言指令序列时,提取部105对源程序中的子程序,一一检出这些子程序所必需的堆栈长度以及各子程序在运行过程中应保存的寄存器名,并且将它们与机器语言指令序列一同保存到文件中,连接部108由转移指令检测部109,文件检索部110和获得部111以及子程序调用指令生成部112所组成。

Description

高速执行子程序转移指令的 程序变换装置和处理器
本发明是一种关于将源程序翻译为机器语言指令序列并进行连接的程序变换装置,并且也与执行上述程序变换装置所产生的机器语言指令序列的处理器有关,特别是与一种能避免在执行转向子程序的控制转移指令时所发生的流水线停顿的程序变换装置和处理器有关。
使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的ComputerArchitecture:A 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( )的机器语言指令的清单。
图10是该实施例中的包含在可执行文件113中的目标程序清单。
图11是与本发明的第2实施例有关的处理器的结构方块示意图。
图12是与第2实施例有关的处理器在执行通常的转移指令jsr时的动作说明图。
图13是与该实施例有关的处理器执行子程序调用指令call时的动作说明图。
以下,就本发明的实施例,结合图示进行详细说明。
图5是有关本发明的第1实施例的程序变换装置的结构示意方框图。并且,图5中同时地表示出了作为本装置的处理对象的输入文件101,102,输出文件106,107,以及由处理结果生成的可执行文件113。
本装置的结构大体上可分为翻译部103和连接部108。
翻译部103主要是将由高级语言所写的源程序翻译为机器语言指令序列。把包含有源程序的输入文件101,102输入给翻译部103,当结束处理后,翻译部103把106,107作为输出文件进行输出。此处所谓文件,是指作为翻译部103的输入输出单位的程序和机器语言指令序列的集合。翻译部103以文件为单位进行翻译。例如,当只给定一个输入文件A 101时,翻译部103自动地决定出对应于输入文件A 101的名字,并输出结果文件A 106。而翻译部103,则进一步由机器指令生成部104和提取部105组成。
机器指令生成部104,将所供给的源程序进行语法分析等之后,变换为机器语言指令序列。
提取部105,进而由堆栈长度提取部105a和保存寄存器提取部105b组成。堆栈长度提取部105a对存在于源程序中的子程序,计算出为各子程序的运行所必要的堆栈长度,并生成用来定义所算出的堆栈长度的伪指令,放置于该子程序的机器语言指令序列的开始位置。此处,所谓堆栈长度是指子程序在运行中所使用的局部工作区域的大小。所谓伪指令是指为了将此处算出的堆栈大小的信息传递给后述的连接部108的指令,它被连接部所使用。
保存寄存器提取部105b对存在于源程序中的子程序,检出在各子程序运行之前应该保存的寄存器,生成说明所检测出的寄存器的伪指令,放置于该子程序的机器语言指令序列的开头部分。应当保存的寄存器,就是由于子程序运行而将被破坏其值的那些寄存器。所谓伪指令,与堆栈长度提取部105a所生成的伪指令是同一类型的东西,它们是为了将应予保存的寄存器的有关信息传递给连接部而被使用。
连接部108的主要任务是连接机器语言程序指令序列,并生成可在处理器上执行的可执行目标程序。此时,它也对翻译部103所生成的伪指令进行处理。此外,上述的连接作业,由于与通常的LINKER(连接程序)等所进行的处理没有什么不同,因而对进行该处理的构成部分未进行图示。包含着机器语言指令序列的多个文件106、107被送给连接部108,在处理结束之后,连接部108输出可执行文件113。
连接部108进而由转移指令检测部109,文件检索部110,获得部111以及子程序调用指令生成部112构成。
转移指令检测部109从给定的所有输出文件中,检测出控制转移指令,并将被发现的控制转移指令通知文件检索部110。此外,这里所谓控制转移指令,是指转移到子程序的控制转移指令。
文件检索部110对接到通知的控制转移指令,确定出该转移指令所指定的转移目标子程序所属的文件名。并将该文件名和转移目标子程序名一起同时通知获得部111的堆栈大小获得部111a和保存寄存器获得部111b。
堆栈大小获得部111a对放置于转移目标子程序(该子程序所存放的文件由文件检索部110告知)的开始处所放置的伪指令进行解释之后,将该子程序在运行中所必要的堆栈大小通知给子程序调用指令生成部112。
同样地,保存寄存器获得部111b,对转移目标子程序(该子程序所存放的文件由文件检索部110告知)的开始处所放置的伪指令进行解释之后,将该子程序运行过程中所应保存的寄存器的种类通知子程序调用指令生成部112。
子程序调用指令生成部112根据获得部111所通知的堆栈大小和寄存器的种类,生成调用子程序的专用子程序调用指令。这里所谓的专用子程序调用指令,是指处理器对控制转移处理、堆栈的分配以及寄存器的保存这样的三个处理的情况下顺序执行的机器语言指令,而不发生流水线停顿。
最后,连接部108,将转移到子程序的子程序调用指令置换为由子程序调用指令生成部112所生成的该子程序的专用子程序调用指令,同时,将该子程序中所配置的分配堆栈的机器语言指令或保存寄存器的机器语言指令进行删除,生成一个可执行的目标程序,作为可执行文件113,予以输出。
上述连接部108的处理,对由控制转移指令检测部119所检测出的所有控制转移指令循环进行处理。
对于上述结构的装置的操作,用具体程序来加以说明。输入文件A 101中,包含有图6所示的主程序f( )。主程序f( )用两个参数调用子程序g( )。
另一方面,输入文件B 102中,包含有图7所示的子程序g( )。子程序g( )计算出所给的二个参数的和与差。
当将图6中所示的输入文件A 101供给翻译部103后,主程序f( )被翻译为机器语言指令,同时,在该主程序f( )所需要的堆栈大小或应保存的寄存器信息被提取之后,生成图8中所示的输出文件A 106,并予输出。同样地,当图7所示的输入文件B102供给翻译部103后,子程序g( )被翻译为机器语言指令,同时,该子程序g( )所需的堆栈大小或应保存的寄存器的信息被提取之后,生成图9所示的输出文件并被输出。此外,这里所谓的机器语言指令的意义如下所述。
f:表示该函数的标号。
·STACKSIZE S:表示该函数运行过程中所需的堆栈大小为S字节。
·REGLIST r1,r2:表示该函数运行之前应予保存的寄存器是r1和r2。
SP:堆栈指针
#××××:表示立即数××××。
(SP+××××):表示内存中地址为SP+××××的数据。
add src,dst:将dst+src之值传送给dst。
sub src,dst:将dst-src之值传送给dst。
mov src,dst:将src传送给dst。
jsr label:将SP减4,将下一指令的地址(返回地址)传送到(SP)中,控制转移到标号label。
rts:控制转移到(SP)所指的指令,SP的值递增4。
此处,图8所示的输出文件A 106的清单中下半部的42是由机器语言指令生成部104生成的指令,而上半部41是由提取部105生成的伪指令。栈长度提取部105a判断该主程序f( )所需的堆栈大小为8字节,从而生成伪指令·STACKSIZE。这是因为主程序f( )在将2个参数1、2保存到堆栈之中之后才调用子程序g( ),为保存一个参数需要4个字节的缘故。
此外,保存寄存器提取部105b生成的伪指令只有·REGLIST,这是因为进入这个主程序f( )运行之前没有需要保存的寄存器。
同样地,图9所示的输出文件B 107的清单下部的52是由机器语言指令生成部104生成的指令,而清单的上部51是由提取部105所生成的伪指令。堆栈长度提取部105a判断出这一子程序g( )所必要的堆栈大小为16字节,因而生成了伪指令·STACKSIZE 16。这是在子程序g( )的运行过程中,保存两个寄存器的值的区域和存储2个运算结果a、b的区域所需的总长度,共计16个字节之故。
此外,保存寄存器提取部判断进入该子程序g( )的运行之前应予保存的寄存器是r1和r2,因而生成了伪指令·REGLISTr1,r2。
继而,由翻译部103生成的输出文件A 106和输出文件B107被送到连接部108之后,控制转移指令检测部109检出这些文件中所存在的控制转移指令。因为图8中所示的输出文件A106中,使用了转移指令jsr _g,因此该转移指令被转移指令检测部所检出,通知给文件检索部110。文件检索部110根据对所给的文件106、107的检索,从输出文件B 107中得知转移目标的子程序_g已被定义,将其状况通知给堆栈大小获得部111a和保存寄存器获得部111b。
堆栈大小获得部111a和保存寄存器获得部111b从被通知的输出文件B 107的子程序_g的头部的51处所放置的伪指令得知了必要的堆栈大小(16)和应当保存的寄存器(r1,r2),并将该信息通知子程序调用指令生成部112。
子程序调用指令生成部112根据所通知的信息,生成子程序调用指令Call _g,#16,r1,r2。此处,指令Call label,lsz,rn,rm,是将SP减4后,将下一条指令的地址(返回地址)传送到(SP)中,并让控制转移到_label后,在转移冒险的时钟周期分别将寄存器rn,rm保留到(SP-4)、(SP-8)的地址中,并使SP减少lsz,上述一系列的处理是由单一的一条机器指令来完成。也就是说,子程序调用指令Call _g,#16,r1,r2相当于在不会发生转移冒险的情况下执行了下列一系列指令。
jsr _g
mov r1,(SP-4)
mov r2,(SP-8)
add #-16,SP
最后,连接部108用生成的子程序调用指令Call _g,#16,r1,r2置换以子程序_g为转移目标的图8中所示的输出文件的转移指令jsr _g,同时,删除在子程序_g中所配置的保存寄存器的机器语言指令mov r1,(SP-4)和mov r2,(SP-8)和分配堆栈的机器语言指令add #-16,SP之后,生成可执行目标程序,将图10中所示的可执行文件113输出。
从图10中所列的可执行文件113的清单可知,为了从主程序_f调用子程序_g,利用了子程序调用指令Call _g,#16,r1,r2,另一方面,在子程序_g的头部,已删除了保存寄存器的指令和分配堆栈区域的指令。
从上述说明可知,根据本装置,将源程序翻译为机器语言程序时,由翻译部103在各子程序的机器语言指令序列的头部附加上用来表示每一子程序所必需的堆栈长度或有关保存寄存器的信息的伪指令。继而,连接部108在连接各机器语言指令时,即使是存在向其它文件中的子程序转移的转移指令,通过参照各子程序头部所设置的伪指令,就可以在不产生转移冒险的情况下,将向子程序的转移、寄存器的保存以及堆栈的分配等一系列的动作,用一条单一的子程序调用指令来完成。因此,执行上述连接部108所生成的程序的处理器,即使控制转移到由其它文件所定义的子程序中去,也可以不产生转移冒险,能够高速地进行控制转移处理。
其次,对高速进行控制转移处理的第2实施例有关的处理器加以说明。
图11是与本发明的第2实施例有关的处理器的结构示意图。本处理器由下列部分所构成:指令缓冲器701,指令译码器702,执行部件703,寄存器704,栈指针705,程序计数器706,运算电路707,数据缓冲器708,地址缓冲器709和内部总线710等所组成。
数据缓冲器708和地址缓冲器709,分别在外部数据总线711、外部地址总线712和内部总线710之间进行数据的传送。寄存器704用来临时保存进行运算的数据或图中未示出的主存储器的地址。堆栈指针705用来保存指示主存储器中所设定的堆栈区域的地址。程序计数器706用来保存下次应取出的指令在主存储器中的地址。运算电路707是对输入的两个数据逻辑运算的电路。
指令缓冲器701是用来保存所取出指令的先入先出方式(FIFO)的指令缓冲器。指令缓冲器中所放入的指令,顺次被推出缓冲区,通常,将最先进入的指令送到指令译码器702中。
指令译码器702对从指令缓冲器701传送过来的指令逐一进行译码,并将结果通知执行部件703。此外,指令译码器702,具有对所预定的全部指令进行译码的功能,并将各指令所固有的信息传送到执行部件703,特别地,图11中还示出了具有对子程序调用指令进行译码部分,把它作为子程序调用指令译码器702a加以表示。
执行部件703响应从指令译码器702发来的信息,通过利用未示出的内部控制信号,对各构成部701~709进行控制,以及输入和输出外部控制信号(未示出)。此外,执行部件703还具有对指定的所有的指令进行相应控制的功能,特别把执行子程序调用指令的部分作为子程序调用执行部件703a表示在图11中。
指令缓冲器701,指令译码器702以及执行部件703构成了流水线,分别起到流水线的IF阶段、DEC阶段及EX阶段的功能。
下面就按上述方式构成的本处理器的动作进行说明。
首先对本处理器执行通常的控制转移指令jsr时的动作进行说明。图12中表示出了执行包含通常的转移指令jsr的指令序列,以及执行这些指令序列时的流水线流程示意图。
在第1个时钟周期时从指令缓冲区701所取入的控制转移指令jsr_g,在第2个时钟周期时由指令译码器702进行译码,在第3个时钟周期,由执行部件703进行执行。
在第3个时钟周期,执行部件703将程序计数器706更新为转移目标的地址_g。因此,在第4个时钟周期,在地址_g中所放置的指令即mov r1,(SP-4)被取入指令缓冲器701。
执行部件703为了执行指令jsr _g的下一条指令movr1,(SP-4),忽略了这些指令之间的,亦即存在转移冒险的指令(图12中以灰色表示的部分)的执行。因此,执行部件703在执行了指令jsr _g后,在2个时钟周期之后,执行后随的指令movr1,(SP-4)。
上述的动作与传统的处理器执行上述的同样的控制转移指令时的动作没有什么区别。
其次,对本处理器在执行子程序调用指令Call时的动作加以说明。图13中表示出了包含有子程序调用指令Call的指令序列,以及执行这些指令序列时等价的流水线的动作。
子程序调用指令Call _g,#16,r1,r2是一条单一指令,该指令被子程序调用指令译码器702a译码,由子程序调用执行部件703a所执行,这时,本处理器实际上等价于一连串地执行下述四条指令的动作。
也就是首先执行
jsr _g接着在转移冒险的时钟周期,执行
mov r1,(SP-4)
mov r2,(SP-8)
add #-16,SP
从而,图13的流水线的流程图中画出了执行部件703执行子程序调用指令Call _g,#16,r1,r2时的等价流水线流程图。在时钟周期1指令缓冲器701中取入的转移指令jsr _g,在第2个时钟周期由指令译码器702进行译码,在第3个时钟周期由执行部件703执行。
在第3个时钟周期执行了jsr _g的执行部件703,在下一个时钟周期4执行指令mov r1,(SP-4)。
与图12中所示的流水线的流程相比较后便可明白,尽管是进行了完全相同的处理,图13中的流水线的流程不会产生转移冒险。也就是说,在本处理器执行Call _g,#16,r1,r2时,转移冒险被消除,比执行图12中所示的指令序列执行时间可缩短2个时钟周期。
以上,对与本发明有关的程序变换装置和处理器,利用实施例进行了说明,本发明当然绝不只限于这些实施例,也就是说,
(1)在第1实施例中,子程序调用指令生成部112生成了单一的机器语言指令Call _g,#16,r1,r2,但生成的机器语言指令绝不只限于单一的指令,例如,也可以生成
Call _g
mov r1,(SP-4)
mov r2,(SP-8)
add #-16,SP四条机器指令。也就是说,指令Call _g使控制转移到_g的同时,在不发生转移冒险的条件下,后继的3条指令被连续执行,而不发生转移冒险塞。
(2)第一实施例中生成的子程序调用指令,是一条把分配堆栈和保存寄存器的两个操作伴随进行的指令,但绝不只限于这两个处理必须伴随进行的指令。例如,在转移到不必保留寄存器的子程序时,如同Call _g,#16那样,也可以生成只对堆栈进行分配的控制转移指令。
(3)第1实施例中的机器语言指令生成部104也可置换为将程序变换为可重定位的目标程序的通常的编译装置,此外连接部具有的链接功能,也可置换为连接可重定位的目标程序、并作成可执行目标程序的一般性的连接装置。这样一来,对应于第1实施例的程序变换装置,可以实现C语言的编译程序。
(4)在第1实施例中,只由连接部108生成子程序调用指令,但并不限于这样的构成。例如翻译部103进而可配备连接部108所具有的构成部109~112。这样一来,如果是同一文件中的子程序调用指令,就可以由翻译部103来生成子程序调用指令。
(5)在第2实施例中,子程序调用执行部件703a,将单一的子程序调用指令Call _g,#16,r1,r2,分解为一连串的4个指令来执行,毫无疑问,这是由处理器内部所具有但未予图示出来的微程序及布线逻辑等来实现的。
(6)在第2实施例中,避免了控制转移指令jsr所引起的2个时钟周期的流水线停顿,但绝不仅限于这样的流水线停顿。例如,由于存储有子程序_g的ROM的存取时间很长,在图12的流水线流程中产生了3个时钟周期的流水线停顿,按照本实施例可知,与图13中所示的流水线流程相同的结果可被得到。这时,比执行图12中所示的指令序列可以减少3个时钟周期的执行时间。也就是说,按照本实施例,不仅可以避免与执行控制转移指令时伴随产生的流水线停顿,而且也可避免在取出控制转移指令时的冒险而伴随发生的流水线停顿。

Claims (9)

1.一种由将源程序翻译为机器语言指令序列并以文件形式进行输出的翻译装置以及连接包含在多个前述文件中的机器语言指令序列的连接装置所构成的程序变换装置,其特征在于,前述翻译装置包括:
·堆栈大小提取装置,它对源程序中所包含的各子程序,提取出它们所必需的堆栈长度,并与子程序的机器语言指令序列一起保存到前述文件之中;
前述连接装置包括:
·控制转移指令检测装置,它从前述机器语言指令序列中检测出转移到子程序的控制转移指令;
·文件检索装置,它确定出包含有作为控制转移目标的子程序的文件,该子程序则由所检测出的转移指令所指定;
·堆栈长度获得装置,它从前述文件检索装置所确定出的文件中读出前述转移目标子程序运行所需的堆栈长度;
·第一置换装置,它将前述的控制转移指令置换为一个以上的指令,而这些指令的内容包括将控制转移到前述转移目标子程序,以及分配由前述堆栈长度获得装置所读出的堆栈长度那样大小的堆栈等一系列操作。
2.根据权利要求1所述的程序变换装置,前述第1置换装置将前述的控制转移指令用单一的第1专用指令来置换。
3.一种对含有指定的第1专用指令(它由权利要求2的程序变换装置得到)的机器语言指令序列逐一进行解释和执行的处理器,其特征在于具有以下构件:
·第1指令译码装置,它判断所给定的机器语言指令是否为第1专用指令;
·第1执行装置,当前述第1指令译码装置判断出一给定机器指令是第1专用指令时,它执行一系列操作,这些操作包括将控制转移到第1专用指令中所指定的转移目标地址,以及分配由第1专用指令中所指出的堆栈长度的堆栈等操作。
4.一种程序变换装置,它由下述装置构成将源程序翻译为机器语言指令序列并以文件形式输出的翻译装置,以及将包含于多个前述文件中的机器语言指令序列连接起来的连接装置,该变换装置的特征在于,前述的翻译装置,具有以下部分:
·保存寄存器提取装置,它对包含于前述源程序中的子程序,提取出各子程序执行过程中应予保存的寄存器名,并与子程序的机器语言指令序列一起,保存到前述文件中;前述的连接装置具有下述构件:
·控制转移指令检测装置,它从前述的机器语言指令序列中,检出转移到子程序的控制转移指令;
·文件检索装置,它确定出存储为转移目标子程序的那个文件,该转移目标子程序是由转移指令所转移至的子程序;
·保存寄存器获得装置,它从前述文件检索装置所检索出的文件中,读出在前述转移目标子程序的运行过程中所应保存的寄存器名;
·第2置换装置,它将前述控制转移指令置换为一个以上的指令,这些指令的内容包括将控制转移到前述转移目标的子程序以及保存由前述保存寄存器获得装置所读出的寄存器的内容等一系列操作。
5.根据权利要求4的程序变换装置,前述第2置换装置将前述控制转移指令置换为一条单一的第2专用指令。
6.一种对含有指定的第2专用指令的机器语言指令序列逐一进行解释执行的处理器,具有下述构件:
·第2指令译码装置,它判断给定的机器语言指令是否为第2专用指令;
·第2执行装置,在前述第2专用指令译码装置判断一机器指令为第2专用指令时,就执行一系列操作,这些操作包括使控制转移到由该第2专用指令中所指出的转移目标地址,以及保存由第2专用指令所指定的寄存器的内容等操作。
7.一种程序变换装置,它由将源程序翻译为机器语言指令序列并以文件形式输出的翻译装置,以及把包含于多个上述文件中的机器语言序列连接起来的连接装置所构成,该变换装置的特征在于,前述翻译装置,具有下列构件:
·堆栈长度提取装置,它从由前述文件检索装置所确定出的文件中,读出前述转移目标子程序所需要的堆栈长度;
·保存寄存器提取装置,它对前述源程序中所包含的子程序、提取出各子程序在运行中应保存的寄存器名,并与子程序的机器语言指令序列一起保存到前述的文件中;前述连接装置,具有下列构件:
·控制转移指令检测装置,它从前述的机器语言指令序列中检出转移到子程序的控制转移指令;
·文件检索装置,它确定由检测出的转移指令所指向的转移目标子程序所属的文件;
·堆栈大小获得装置,从前述文件检索装置所确定出的文件中读出前述转移目标子程序运行时所需要的堆栈长度;
·保存寄存器获得装置,它从前述文件检索装置确定出的文件中,读出前述转移目标子程序在运行过程中应当保存的寄存器名;
·第3置换装置,它将前述的控制转移指令,置换为1个以上的指令,这些指令的内容相当于进行了下述一系列的操作,包括按前述控制转移指令转移到前述转移目标的子程序去,根据前述堆栈长度获得装置所读出的堆栈长度分配堆栈,以及保存由前述保存寄存器获得装置所指示的寄存器的内容等一系列操作。
8.按照权利要求7所述的程序变换装置,前述第3置换装置将前述的控制转移指令置换为单一的第3专用指令。
9.一种对含有指定的第3专用指令的机器语言指令序列,逐一解释执行的处理器,其特征在于具有下述装置:
·第3指令译码装置,它判断给定的机器语言指令是否为第3专用指令;
·第3执行装置,当由前述第3指令译码器判断为第3专用指令时,它就执行一系列的操作,这些操作包括使控制转移到由第3专用指令中所指出的转移目标的地址,以及分配包含在第3专用指令中的堆栈长度相同的堆栈,以及保存第3专用指令所指定的寄存器的内容等一系列操作。
CN96103712A 1995-05-10 1996-03-22 高速执行子程序转移指令的程序变换装置和处理器 Expired - Lifetime CN1099074C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP07111701A JP3130446B2 (ja) 1995-05-10 1995-05-10 プログラム変換装置及びプロセッサ
JP111701/95 1995-05-10
JP111701/1995 1995-05-10

Publications (2)

Publication Number Publication Date
CN1138174A true CN1138174A (zh) 1996-12-18
CN1099074C CN1099074C (zh) 2003-01-15

Family

ID=14567971

Family Applications (1)

Application Number Title Priority Date Filing Date
CN96103712A Expired - Lifetime CN1099074C (zh) 1995-05-10 1996-03-22 高速执行子程序转移指令的程序变换装置和处理器

Country Status (7)

Country Link
US (2) US5758162A (zh)
EP (1) EP0742517B1 (zh)
JP (1) JP3130446B2 (zh)
KR (1) KR100247900B1 (zh)
CN (1) CN1099074C (zh)
DE (1) DE69614183T2 (zh)
TW (1) TW289812B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1297889C (zh) * 2003-06-03 2007-01-31 松下电器产业株式会社 信息处理装置以及机器语言程序变换装置
CN100342326C (zh) * 1999-09-01 2007-10-10 英特尔公司 多线程处理器和操作处理器的方法
CN100347668C (zh) * 1997-08-29 2007-11-07 松下电器产业株式会社 指令变换装置

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5790845A (en) * 1995-02-24 1998-08-04 Hitachi, Ltd. System with reservation instruction execution to store branch target address for use upon reaching the branch point
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6021273A (en) 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6016556A (en) * 1997-07-17 2000-01-18 Tektronix, Inc. System for identifying an acquisition sample corresponding to a source code statement
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6212630B1 (en) 1997-12-10 2001-04-03 Matsushita Electric Industrial Co., Ltd. Microprocessor for overlapping stack frame allocation with saving of subroutine data into stack area
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP3664473B2 (ja) * 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7788638B2 (en) * 2003-11-21 2010-08-31 Citigroup Global Markets Inc. Method and system for data file processing
EP2106584A1 (en) * 2006-12-11 2009-10-07 Nxp B.V. Pipelined processor and compiler/scheduler for variable number branch delay slots
US8813057B2 (en) * 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
US5222220A (en) * 1989-11-16 1993-06-22 Mehta Hemang S Microprocessor stack built-in guards
EP0463965B1 (en) * 1990-06-29 1998-09-09 Digital Equipment Corporation Branch prediction unit for high-performance processor
JPH0619721A (ja) * 1991-02-21 1994-01-28 Oki Electric Ind Co Ltd 機械語翻訳最適化方式
US5450585A (en) * 1991-05-15 1995-09-12 International Business Machines Corporation Compiler with delayed conditional branching
JPH0744419A (ja) * 1993-08-03 1995-02-14 Nec Ic Microcomput Syst Ltd マイコン開発支援装置
US5375242A (en) 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100347668C (zh) * 1997-08-29 2007-11-07 松下电器产业株式会社 指令变换装置
CN100342326C (zh) * 1999-09-01 2007-10-10 英特尔公司 多线程处理器和操作处理器的方法
CN1297889C (zh) * 2003-06-03 2007-01-31 松下电器产业株式会社 信息处理装置以及机器语言程序变换装置

Also Published As

Publication number Publication date
DE69614183T2 (de) 2001-11-29
JPH08305581A (ja) 1996-11-22
KR960042340A (ko) 1996-12-21
EP0742517A3 (en) 1997-05-28
EP0742517B1 (en) 2001-08-01
US5978905A (en) 1999-11-02
DE69614183D1 (de) 2001-09-06
CN1099074C (zh) 2003-01-15
JP3130446B2 (ja) 2001-01-31
KR100247900B1 (ko) 2000-03-15
TW289812B (zh) 1996-11-01
US5758162A (en) 1998-05-26
EP0742517A2 (en) 1996-11-13

Similar Documents

Publication Publication Date Title
CN1099074C (zh) 高速执行子程序转移指令的程序变换装置和处理器
CN1279442C (zh) 选择性存取不同指令缓冲阶层的装置及方法
CN1299218C (zh) 执行指令的方法
KR101603751B1 (ko) 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
CN1088214C (zh) 用多指令集处理数据的器件和方法
CN1174313C (zh) 多指令集的数据处理
CN1222868C (zh) 多线程流水线指令解码器的方法和设备
CN1147794C (zh) 具有静态转移预测支持的去耦取指令-执行引擎
CN1218243C (zh) 延伸微处理器数据模式的装置及方法
CN101034470A (zh) 指令解析器以及图形处理单元及其方法
CN1752934A (zh) 编译器、编译方法以及编译程序
US20030093771A1 (en) Debugging aid device, a compiling device, a debugging aid program, a compiling program, and a computer readable record medium therefor
JP2000132403A (ja) プログラム変換装置
US20030177288A1 (en) Multiprocessor system
CN1513137A (zh) 使用多重指令集的数据处理
CN1716189A (zh) 设计用户可定制的处理器的方法以及装置
JP2007058731A (ja) プロセッサ、及び並列命令実行対応デバッグ装置
CN1310116C (zh) 具有功率控制功能的微处理器以及指令转换装置
CN1143213C (zh) 高速处理循环的编译器和处理器
JP2006301989A (ja) 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム
CN1355900A (zh) 用于处理器流水线分段法及再装配的方法以及装置
JPH03126133A (ja) コンパイラ処理方法
EP0113460A2 (en) Symbolic language data processing system
JP2004287844A (ja) コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法
JP2004234634A (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
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: INTELLECTUAL PROPERTY BRIDGE NO. 1 CO., LTD.

Free format text: FORMER OWNER: MATSUSHITA ELECTRIC INDUSTRIAL CO, LTD.

Effective date: 20150407

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150407

Address after: Tokyo, Japan

Patentee after: GODO KAISHA IP BRIDGE 1

Address before: Osaka Japan

Patentee before: Matsushita Electric Industrial Co., Ltd.

CX01 Expiry of patent term

Granted publication date: 20030115

EXPY Termination of patent right or utility model