CN1140870C - 处理器及程序翻译装置 - Google Patents

处理器及程序翻译装置 Download PDF

Info

Publication number
CN1140870C
CN1140870C CNB961037164A CN96103716A CN1140870C CN 1140870 C CN1140870 C CN 1140870C CN B961037164 A CNB961037164 A CN B961037164A CN 96103716 A CN96103716 A CN 96103716A CN 1140870 C CN1140870 C CN 1140870C
Authority
CN
China
Prior art keywords
instruction
subroutine
address
return
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.)
Expired - Lifetime
Application number
CNB961037164A
Other languages
English (en)
Other versions
CN1138172A (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
松下电器产业株式会社
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 松下电器产业株式会社 filed Critical 松下电器产业株式会社
Publication of CN1138172A publication Critical patent/CN1138172A/zh
Application granted granted Critical
Publication of CN1140870C publication Critical patent/CN1140870C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

从程序翻译装置生成的汇编程序中,检测其函数体内无其它函数调用指令以及在函数体内返址运算兼用寄存器56的值也未发生改变。检测出后,在该函数的结束处输出一个特殊返回指令。当处理器执行到一条函数调用指令时,就将函数的返回地址同时保存于堆栈及返址/运算兼用寄存器中。从而当取出一条特殊返回指令时,不是去存取堆栈,而是从返址/运算兼用寄存器中取得返回地址来完成状态返回。

Description

处理器及程序翻译装置
技术领域
本发明是一种有关于程序处理器以及将用程序设计语言所写的源程序编为适宜于在该处理器上执行的机器语言程序的翻译装置。
背景技术
近年来,利用内置微处理器,蓬勃地开发出了适应于多种需求的信息处机器。在这样的信息装置的开发过程中,追求着从硬件到软件两方面的处高速化或成本的尽可能的降低。
上述的软件,很早以来就是力求使处理子程序化。这样子程序化了的软,成为了嵌套型的控制结构。所谓嵌套型控制结构,是指主程序中调用了程序1,进而在子程序1中又调用了子程序2,这样地子程序的调用呈现出多重控制结构。
这样的控制结构中,在堆栈中保存有子程序被调用时调用程序的返回地。并且在从子程序返回时,从堆栈中取出所保存的返回地址并送入程序计器内。此处为了从堆栈中取出所保存的返回地址,就必须对堆栈进行存取。在控制结构比较简单,如前面所述的子程序调用只有两、三处时,这个存堆栈所需时间可以忽略不计,但若控制构造很复杂,在前述构造中若子程的调用达到10处、20处等多处的情形,因这些存取而导致的延迟则相当显著。
为了解决这样的对堆栈的存取而产生的延迟,已有技术是设置存储返回址的专用寄存器,这样的处理器已经存在(保存返回地址的专用寄存器被为返回地址专用寄存器。)下面参照插图,对设有返回地址专用寄存器的理器进行说明,此外,因为在该处理器中设置了返回地址专用寄存器(以用返址专用寄存器表示之),图中对所示的指令进行解释和执行。
图1是先有技术的处理器的指令型式的一例的示意图。此外,本图中将理器的堆栈指针略记为SP。对堆栈的引用略记为@SP。此处将返址专寄存器略记为FR。在以下的说明中,若不特别指明,这些记号的意义是上述。
jsr _f:
指令“jsr _f”是执行子程序调用的命令,它与一般的子程序调用命令同之处在于,当此处进行调用时,在把调用程序的返回地址添加到堆栈中同时,该返回地址也被保存到返址专用寄存器中。也就是说,当取出子程调用指令时,处理器将堆栈指针的值减2,将子程序调用指令的下一条指的地址保存到由堆栈指针所指示的堆栈中,并将子程序调用指令的下一条令的地址保存到返址专用寄存器中。
rts:
指令“rts”是返回指令。该返回指令,与一般的处理器所具有的返回令相同,将堆栈中所存放的返回地址送到程序计数器中,将堆栈指针加2,从子程序返回。
rtsfr:
rtsfr指令也是与rts指令相同的返回指令,但对应于rts指令从堆栈中到返回地址,rtsfr指令的不同之处在于从返址专用寄存器获得返回地址并将它送入程序计数器中。此处,把这种从寄存器中得到返回地址的返回令rtsfr指令,叫作特殊返回指令。
此外,除上述指令之外,图1中还记载有add指令、mul指令等,对这些令,因与本发明申请的主旨无关,此处省略对它们的说明。
对如上所述的具有返回地址专用寄存器的处理器,参照图2和图3,对们怎样进行向子程序转移,以及怎样从子程序状态返回的情形进行具体说明。
图2是现有的处理器进行子程序调用的情形以及从子程序作状态返回的形加以表示的流程图。图3是汇编程序的输出代码的示意图。图中的_main、_f1,_f2等带有下划线“_”的标号,是函数的入口标号(且,在C语言等程序设计语言中是把子程序称作函数,受此概念的影响,后也将子程序称作函数)。此外,这些函数中的所有处理,也根据上述指加以表述。在本程序中,特殊返回指令,只存在于其内部不再进行函数调的函数的末尾。换言之,只存在于嵌套结构的最内层的函数中,这是因为应于堆栈按先进后出的顺序来存放返回地址,而返址专用寄存器只保存一返回地址之故。
现在,假定处理器中的程序处于图3的状态。本图中,左侧的数值“100”“0101”...等,表示了程序中的各指令的相对地址。此外,右侧的ex1)、(ex2)、(ex3)...等数值,是表示各指令中按顺序所作的编号。
此外,假定处理器中所具有的程序计数器被设定为(ex1)指令所在的相地址0100。处理器取出序号为(ex1)的指令(步骤u2),并且执行之(步u3~u5)。执行之后,判断是否还存在下次应取出的指令(步骤u1),若存,就取出其序号为(ex2)的指令(步u2),判定该指令是否为函数调用指(步u3)。因为(ex2)的指令“jsr _f1”是函数调用指令,因此该(ex2的下一指令地址0102作为返回地址,被添加到堆栈中(步u6)。与此同时返回地址0102被保存到返址专用寄存器中,并调用函数f1(步u7)。调用后,处理器取出函数f1内的(ex6)(ex7)的指令并予执行(步u1~u5)。图3中这些指令之后,后续有(ex8)的指令“jsr _f2”。
在执行了(ex7)的指令后,处理器判断是否还存在取出的指令(步u1),存在,就取出(ex7)的后继指令(ex8)(步u2),并判断它是否为函数调指令(步u3)。由于(ex8)的指令是“jsr _f2”,它是一条函数调用指令因此将该(ex8)的下一指令的地址0108作为返回地址,压入堆栈中(步u6)。与此同时,将返回地址0108保存到返址专用寄存器中,当准备好了从函f2到函数f1的返回状态之后,调用函数f2(步u7)。
处理器在保存了返回地址0108之后,控制转到函数f2,取出函数f2中的指令序列(ex10)~(ex12),并予执行(步u1~步u5)。图3中,在这些令之后,排列有特殊返回指令rtsfr。在执行了(ex12)的指令后(步u5)判定是否还存在后续指令(步u1),并取出(ex13)的指令(步u2)。随对其是否为函数调用指令进行判定(步u3),因它不是函数调用指令,而定它是否为特殊返回指令rtsfr(步u4)。因为该指令(ex13)为特殊回指令,处理器从返址专用寄存器取出返回地址0108,并传送给程序计数。因而不必经由堆栈的存取,完成了向函数f1的状态返回(步u8)。
在实行这样的状态返回时,处理器取出处于返回地址的相对地址0108中返回指令rts。返回指令rts因为是通过存取堆栈来实行状态返回的指令,理器访问堆栈,从中弹出返回地址0102,实行状态返回(步u5)。状态返回后从堆栈中取得相对地址0102的返回地址,执行(ex3)的指令,然后执行其续指令(ex4)(步u1~u5)。由于后续(ex3)的(ex4)的指令是函数调指令“jsr _f3”,与“jsr _f2”的情形相同,将返回地址0104压入堆栈中(步u6),进而,将其保存到返址专用寄存器中,然后调用函数f3(步7)。处理器取出函数f3中的(ex14)、(ex15)的指令并予执行(步u1~u5,然后取出后续的(ex16)的特殊返回指令rtsfr,从返址专用寄存器中取返回地址0104,并传送给程序计数器,实行状态返回(步u8)。
上述这样的设有返址专用寄存器的处理器,因为不通过堆栈,而用返址用寄存器来实现状态返回,因此调用子程序的主例程可以高速地进行子程处理的继续。
但是,根据上述先有技术,为了实现从子程序的高速状态返回,在处理内部必须实现返址专用寄存器,因而存在电路的规模增大这一问题。
发明内容
本发明的第1目的,就是要提供一种处理器,它在不使电路规模增大的提下,能高速地实现从子程序的状态返回。
本发明的第2个目的,是要提供一种程序翻译装置,它把用程序设计语言所编写的程序翻译为以上述处理器为对象的机器语言程序。
本发明的第一目的,可利用下述的结构来达到。这种处理器的结构,是具有取指装置、译码装置、特定指令运算器、专用寄存器的处理器的基础上,再增设第一、第二、第三等三个判断部和两个返回部来构成。取指装顺次从内存中取出指令,译码装置对取出的指令进行译码、特定指令运器在接收到译码结果是一特定运算指令时,对该特定运算指令进行运算,用寄存器用于保存由运算器算出的特定运算指令的计算结果。在此基础上第一判断部对前述取指装置所取出的指令加以判断,判断是否是子程序调指令;第二判断部对由取指装置所取出的指令加以判断,看其是否是含有堆栈中取出返回地址进行返回的第1子程序返回指令;第三判断部对由取装置取出的指令加以判断,看其是否含有从专用寄存器中取出返回地址进返回的第2子程序返回指令;子程序调用装置在前述的第一判断器判断一令为子程序调用指令时,就将该指令的下一条指令的地址作为返回地址保到堆栈及专用寄存器中;第1返回装置在判定一指令为第1子程序返回指令,将返回地址从堆栈中取出并恢复到程序计数器中;第2返回装置在判断指令为第2子程序返回指令时,就从专用寄存器中取出返回地址并恢复到序计数器中。
如上所述,根据本发明的第1方面的处理器,当在所取指令为子程序调指令时,根据子程序调用装置,把下一指令的地址作为返回地址,保存到栈中和保存到用于存放特定运算的运算结果的专用寄存器中;而在取出了2子程序返回指令时,利用第2返回装置,从用于保存特定运算的运算结的专用寄存器中取出返回地址并恢复到程序计数器中,因此,就不必再设保存返回地址的专用寄存器,也可以减少为了恢复状态而对堆栈的存取次数。因此就可以用较低成本制造出能高速从子程序返回的处理器。
此外,可以认为“前述专用寄存器,就是设置来保存运算器的乘法、除法、求余运算中的某一运算结果的寄存器”。
此外,根据本发明的第2方面的处理器,由于专用寄存器用于保存乘、除法、求余运算的运算结果,但这些运算在转移目标子程序中的使频度很低,因此对不包含上述运算的子程序,就可以利用这一专用寄存器完成状态恢复。因而,利用专用寄存器来进行返回地址的暂存是很适宜的。
此处,可以认为“前述专用寄存器系指为了保存超过运算器长度的那部分运算结果而设置的寄存器”。
此外,根据本发明的第3方面的处理器,因为专用寄存器是为了保存超了运算器长度的运算结果而设置的寄存器,而这些运算在作为转移目标程序中,其使用频度很低,因此在不包含这些运算的子程序中,就可以利这专用寄存器完成状态恢复。因此,利用专用寄存器来进行返回地址的暂是非常适宜的。
此处,可以认为,“前述专用寄存器是指为了保存运算器的运算结果的高位数据或低位数据之中的某一方而设置的寄存器”。
此外,根据本发明的第4方面的处理器,由于其专用寄存器是为了保存算结果的高位数据或低位数据而设置的寄存器,在处理器以程序设计语言的经翻译得到的机器语言程序作为对象时,作为转移目标子程序中这的寄存器使用频度非常之低,因此,大量的子程序可以使用专用寄存器进状态恢复,因而,对堆栈的存取次数确实可以大大减少。
本发明的第二个目的,可以根据下述结构来实现。即,提供一生成由多子程序构成的机器语言程序、并将所生成的机器语言程序加以改写的程序译装置上(各子程序包含有从堆栈中取得返回地址进行返回的第1子程序回指令,在子程序中的另一部分指令中,则包含有子程序调用指令、或包有用专用寄存器来保存运算结果的特定运算指令),在该装置上设置有子序取指机构、判定机构、检测机构以及返回指令改写机构。取指机构用于所生成的机器语言程序中逐一取出所含有的全部子程序;对由取指机构所出的子程序内的所有指令,则由判定机构判定这些指令中是否含有子程序用指令或者是否含有将运算结果保存到专用寄存器中的特定运算指令;检测机构用于从不包含上述指令的子程序中检出第1子程序返回指令;而返回令改写机构则将由检测机构检出的第1子程序返回指令,改写为从专用寄器中取得返回地址的第2子程序返回指令。
此外,根据本发明的第5方面的程序翻译装置中,对于某些子程序,如它们不包含子程序调用指令,但包含有不将特定运算结果保存到专用寄存中的指令,因为将其中的第1类子程序返回指令改写为第2类子程序返回令,因而可以生成只从专用寄存器中来取得返回地址的机器语言程序。因之,可以在处理器用来保存运算结果的专用寄存器中保存返回地址。从而,根据翻译装置所产生的机器语言程序,可以使返回地址的保存和运算结果的保存使用同一个寄存器。不必再专门为保存返回地址而设置一个返回地址专用存器,也可实现从子程序的高速返回。
此处,可以认为“前述的特定运算指令,是指乘法、除法或求余指令中某些指令”。
此外,根据本发明的第6方面的程序翻译装置,由于考虑到乘法、除法求余运算在转移目标的子程序中使用频度较低,在这类使用频度很低的子序内,将其第1类子程序调用指令置换为第2类子程序调用指令,在被置换了的机器语言程序中,处理器内对不含这些运算的子程序可以利用其用寄存器来完成状态恢复。因此,使用处理器中的专用寄存器来暂存返回地址是适宜的。
此处,可以认为“前述特定运算指令,就是指超过运算器长度的运算指令”。
此外,根据本发明的第7方面的程序翻译装置,由于超过运算器长度的算在转移目标的子程序中的使用频度很低,因为在这样的使用频度很低的程序内的第1类子程序调用指令置换为第2类子程序调用指令,因此被置换后的机器语言程序中,对不含这些运算的子程序,可以用处理器中的专用存器来实现状态返回。因之,利用处理器的专用寄存器来暂存返回地址是很合适的。
附图说明
图1是先有的处理器指令格式的一个例子的示意图。
图2是先有的处理器进行子程序调用以及从子程序完成状态返回的流程示图。
图3是汇编语言程序的输出代码的示意图。
图4示出本实施例中的编译程序的结构。
图5是源程序与根据源程序所生成的汇编程序的对照图。
图6示出本实施例中的处理器指令的格式。
图7是生成代码改写装置的结构示意图。
图8是经编译后作为输出代码的汇编程序示意图。
图9是包含有特殊返回指令的机器语言程序执行情况示意图。
图10是程序翻译处理过程的流程示意图。
图11是处理器结构示意图。
图12是处理器执行子程序调用以及从子程序的状态返回的示意流程图。
具体实施方式
图4是编译程序的构成图。如图4所示,编译程序由句法分析装置11,化装置12,资源分配装置13和代码生成装置14所构成。
句法分析装置11对存储器(未示出)中作为文件存储的源程序,进行词汇分析、语法分析和语意分析,并将源程序变换为中间目标程序。
优化装置12为了减少最终生成的汇编程序的程序长度、以及为了加快处速度,对中间目标程序进行优化,在该优化过程中,包括着基本分块操作控制流分析、数据流分析等作业。此处的基本分块操作,就是将作为处理对的中间目标程序分解为若干基本块。
现在对该分块处理作一简单说明。首先,优化装置12检测中间目标程序最初的中间指令、无条件或条件转移目标的中间指令、以及紧接着无条件条件转移目标的中间指令,并把这些检测出的中间指令看作前导。而,优化装置12,从前导开始,直到碰到下一个前导之前,或者是直到程序的最后,把一系列的中间指令抽出。由这一处理过程所得到的指令序列,称作基本块,作为下一步处理的单位。
所谓控制流分析,就是对各基本块间的控制流进行分析。
所谓数据流分析,就是对各基本块中的每一变量,分析它在何处定义,何处被引用。通过参照这些分析结果,就可以得到变量的生存期间的信息。
资源分配装置13,为了使得适应目标机器的处理器指令集,将中间程序的变量分配到目标机器的处理器中所拥有的寄存器或者存储器。在进行这资源分配时,对各变量的生存期间怎样进行重迭进行调整,对于这些重迭变量,给它们分配不同的寄存器。此外,资源分配装置13,对各变量的嵌层数到底有多少层,或者各变量的使用频度到底有多大等进行调查,根据调查结果,给各变量分配优先级。并且按优先级的顺序来分配寄存器。最后对没有分配到寄存器的变量,将它们分配到内存中。
代码生成装置14,包括有生成代码改写装置,把中间目标程序内的各中指令转换为机器指令,从而将中间目标程序变换为目标机器可执行的汇编序。此处所指源程序和汇编程序,参照图5加以说明。图5是源程序和根源程序而产生的汇编程序的对应关系示意图。在图5(a)中,main(),f1(),f2(),f3()分别表示函数。此外,本图中“main(){}”中的“f1(1);”表示以参数1来调用函数的指令。另外,在“main(){}”中的“f3(2);”表示以参数2来调用函数的指令。
关于源程序和汇编程序的对应关系,参照图5(b)来加以说明。本图中从mov #1,D0”“jsr _f1”“moV #2,D0”起,直到“rst”的指令为止之的指令,本图中以符号“}”来与main函数对应。此处的main函数,本图由“mov #1,D0”-“rst”之间的指令构成。
此外,从指令“mov #1,D1”“add1,D0”起到“rts”之间的指令,本图中以符号“}”来与函数f1相对应。图中表示了函数f1是由“mov #1,D1”-“rts”之间的指令构成。
进而,本图中从“mov #3,D1”“mul0,D1”起至“rts”止的指令,以符号“}”与函数f2相对应。本图中表出函数f2由“mov #3,D1”-“rts”之间的指令构成。
此外,本图中的源代码与汇编程序码之间相互对应的部分,在它们之间“{”标记之。也就是说,对图中的函数调用指令“f(1);”,用符号“”来与“mov #1,D0”“jsr _f1”相对应。这样一来,从源程序中的数调用指令“f(1)”的代码,生成了“mov #1,D0”也就是将立即值1送入存器D0的指令以及“jsr _f1”亦即函数调用指令。
此外,图中的函数调用指令“f3(2)”,用“{”来表示它与“mov#2D0”“jsr _f3”的对应关系。这也就是说,从源程序中的函数调用指令f3(2);”生成了“mov #2,D0”也就是将立即数传送给寄存器D0的传送指以及“jsr _f3”亦即函数调用指令。
进而,图中的乘法指令“b=a*3”,用“{”来与“mov #3,D1”“mul0,D1”相对应。这意味着从源程序中的乘法命令“b=a*3”,生成了“mov #3,D1”也就是将立即数3送入寄存器D1的指令以及“mul D0,D1”亦即法指令。
此外,本图中,寄存器D0、D1全都是16位长的寄存器。进而,也指明了图中的指令“add D1,D0”“mul D1,D0”“nul D0,D1”“add D0,D1”这的指令,都是将16位长的运算结果存入16位长的寄存器中。这是因为本编程序以字长16位的处理器为对象,此外,上述规格基本上是根据运算结果运算内容是以同一长度进行处理的这一语法规定来执行的。
其次,用图6来说明本实施例的信息处理装置的指令的一部分格式。图就是表示本实施例中的作为对象的字长16位的处理器的命令格式的示例。参照本图,对上述处理器的指令格式加以说明。本图中Dn、Dm表示通用计用寄存器。此外,用MR来表示既用于保存乘、除法运算的高位数据、又来保存函数调用时的返回地址的返址/运算兼用寄存器。PC表示程序计器的值。label(label可为任意名字)是标号名,#imm表示立即数。
Jsr _f1:
这是函数调用指令。当取出了函数调用指令时,处理器的动作与现存技所说明的基本上是一样的,但不同的是将函数调用指令的下一条指令的地,保存到返址/运算兼用寄存器MR中。
tsf:特殊返回指令
该指令就是实施例中的特殊返回指令。当取出特殊返回指令时处理器的作与先有技术所说明的动作大体相同,所不同的是将返址/运算兼用寄器MR中所保存的返回地址,送入程序计数器中。
add Dn,Dm:
该指令是加法指令,当取出此指令时,处理器将Dn和Dm之值相加,并将和存入寄存器Dm中。
mov Dn,Dm:
这是传送指令,当取出本指令时,处理器将寄存器Dn中的数据传送到寄存Dm中。
mov #imm,Dm:
本指令是把立即数作为操作数的传送指令,当取出本指令时,处理器将即数(#imm)送入寄存器Dm中。
Mul Dn,Dm:
这是一条乘法指令,当取出此指令时,寄存器Dn和寄存器D m相乘,积的高位数据存放到返址/运算兼用寄存器MR中,低位数据存放到寄存器Dm中。
图7是生成代码改写装置的示意图。
生成代码改写装置由控制部101、函数检测部102、返址/运算兼用保持态检测部103和特殊返回指令输出部104组成。
控制部101对函数检出部102,返址/运算兼用保持状态检测部103、特殊回指令输出部104加以控制,使它们按顺序起动。
函数检测部102检出程序中设有函数调用指令的函数。
返址/运算兼用保持状态检测部103,检测下述指令,包括往运算用寄存MR存放高位结果数据的乘法指令、除法指令、求余指令或往运算用寄存器R中传送的传送指令,并对前述函数检测部102所检测出的函数中是否改过返址/运算兼用寄存器的值加以确认。此外,返址/运算兼用保持状态检部103之所以能够进行这样的确认,是因为对上述的返址/运算兼用寄存器状态进行判断,看是否可能将它作为返回地址的保存区。
特殊返回指令输出部104把前述函数检测部102检出的函数末尾的返回指令写为特殊返回指令。
如上那样构成的生成代码改写装置,将代码生成装置14生成的汇编语言序进行改写的情形,以图8和图9的程序为例,参照图10的流程图进行说明。
图8表示图5(b)中的汇编语言程序的各指令被存储到相应的存储器上存储地址的状态。
按图8的状态,函数检测部102首先检测出了表示函数main的起始位置的_main标号(步51)。检出后,顺序检索汇编程序标号_main以后所排列的令,亦即函数#_main中的指令,以判定函数main内部是否存在函数调用令。由于函数main中存在有函数调用指令“jsr _f1”、“jsr _f3”(步),因此,检出这些函数调用指令,检索到此处暂停,继之,对函数f1的部进行检索(步S1,S2)。函数检测部102检索函数f1所在的相对地址0105~0108中的各指令,进一步判定函数f1中是否存在函数调用指令(步S)。因为在函数f1中存在有对函数f2的函数调用指令“jsr _f2”,因此检索到此暂停,转去检索下一函数f2(步S1)。函数检测部102,继续检函数f2内部的相对地址0109~010c内的各指令,以判断是否存在函数调用令(步S2)。在这情形,因为函数f2中已没有函数调用指令,因此起动址/运算兼用保持状态检测部103。
返址/运算兼用保持状态检测部103对函数f2内的相对地址0109~010c中指令进行检索,判断在函数f2内部,返址/运算兼用寄存器的值是否已被变(步3),也就是判定“mul Dn,Dm”等将返址/运算兼用寄存器用来存运算结果的这类运算是否存在于函数f2中。由于函数f2中,存在有“mul D0,D1”这样的把运算结果保存到返址/运算兼用寄存器的指令,检索到此暂停,转去检索下一函数f3(步S1)。
函数检测部102顺序检索函数f3内相对地址010d~010f之间的指令,判断函数f3内是否存在函数调用指令。
在函数f3中,并未发现“jsr”这样的操作码,因为没有函数调用(步2),就起动返址/运算兼用保持状态检测部103,对函数f3内的指令,相对地址为010d~010f之间的指令进行检索,确认了在函数f3内并不存在把返址/运算兼用寄存器用来保存运算结果的指令。因为函数f3中没有这的指令存在,返址/运算兼用保持状态检测部103便起动特殊返回指令输出104(步S4),被起动的特殊返回指令输出部104便把函数f3末尾部分的令(ex16)改写为特殊返回指令rtsf(ex16′)。上述一系列处理的结果,图中的汇编程序,就变成了图9左半部的状态。
下面利用图示,就本发明的一个实施例中的处理器的内部结构加以说明。
图11是本实施例中的处理器的结构图。如本图所示,处理器由下述部分成,它们包括指令缓冲器(图中略记为IB)32,选择器34,指令寄器(图中略记为IR)35,数据寄存器组41,地址寄存器组42,选择43,堆栈指针44,ALU 51,选择器54和55,返址/运算兼用寄器(MR)56,移位寄存器(图中略记为SFT)57,选择器58,位寄存器(图中略记为SFTMD)59,程序计数器61,指令地址缓冲(图中略记为IAB)66,选择器67,指令缓冲器(图中略记为IFB)73,操作码地址缓冲器(图中略记为OAB)74,存储缓冲器(图略记为STB)75,加载缓冲器(图中略记为LDB)76等所构成,们之间通过总线(图中略记为ABUS)、第1数据总线(图中略记为1BUS),第2数据总线(图中略记为B2BUS),LDBUS,指令总线(图略记为IBUS)等相互连接,如图中所示。
指令缓冲器(以后略记为IB)32,长度为8位,是一个三段缓冲器在指令被执行之前,预先从内存中取出,并储存到该指令缓冲器中。例如该IB 32中,如前所述的“jsr _f1”等函数调用指令、“mul D0,D1”乘法指令,或多或少地以机器语言的状态存储到该缓冲器中。
选择器34,选择从IB 32输入的指令或从IBUS上输入的指令中某一个。
指令寄存器(以下略记为IR)35,保存从选择器34中所输出的指。
数据寄存器组41,主要用来保存数据,它的长度为16位,共4个寄存器。
地址寄存器组42,主要用来保存地址,它的长度为16位,共4个寄存。
选择器43,从ABUS和LDB 76之间,选择性地向数据寄存器组1、地址寄存器组42以及堆栈指针44输出。
栈指针44,保持有内存RAM 78中作为堆栈用的区域的首地址。
ALU 51进行16位长的数据的运算和地址运算。
选择器54、55选择应当输入到ALU中的操作数。
返址/运算兼用寄存器MR 56,是保持乘除运算结果或除法运算结果高位字节、保存求余运算结果的余数的16位长的寄存器。此外,它也用来存函数的返回地址。
此外,如果本发明的处理器对C语言编译器编译得到的机器语言程序进操作,该返址/运算兼用寄存器56的使用频度很低。为什么呢?因为按语言的一般规定,原则上“16位长的运算结果是16位长,32位长的运算果是32位长”,运算对象和运算结果按语法规定应有相同的长度,此外因为上述数据寄存器、地址寄存器、数据总线、地址总线均为16位长,编程序将乘法的运算结果化为16位,从而生成机器语言程序。又,在本实施例,以16位长为前提加以说明,当然对其它的长度也是适用的。
移位寄存器(以下略记为SFT)57在接受了ALU 51的输出时,行移位操作。当移位结束后,SFT 57保存运算结果的高位字节。另外ALU 51进行除法运算时,SFT 57保存计算结果的商。
选择器58,用来选择ABUS上的数据或者SFTMD 59上的数据。
移位寄存器(从下略记为SFTMD)59,在接受了选择器58的输时,与ALU 51一起进行移位操作,当移位结束后,SFTMD 59保存算结果低位数据。此外,ALU 51在进行除法运算时,SFT 57保其计算结果。
程序计数器61,由预取计数缓冲器(图中略记为PFCB,以后,用此称)62,选择器63,程序计数缓冲器(图中略记为PCB,以后用此称)64,选择器67构成。
PFC 62是一个16位长的寄存器,它保存有预取指令的地址。
程序计数缓冲器PCB 64,是一个16位长的寄存器,经常保持PFCB 62的一个时钟周期之后的值。
选择器63,用来在PCB 64和PFCB 62之间进行选择数据,并之输出到ABUS或B1BUS上。
指令地址缓冲器(图中略记为IAB,以后使用这一略称)66,将当取出的指令的地址发送到地址总线。
指令缓冲器(图中,略记为IFB,令后使用这一略称)73,操作地址缓冲器(图中记为OAB,以后用此略称)74,存储缓冲器(图中记为SB,以后用此略称)75,装入缓冲器(图中略记为LB,以后用略称)76分别是为保存指令、保存操作数地址、保存存储数据或保存装数据的缓冲器。
RAM 78及ROM 79分别用来保存数据和指令。
ABUS与堆栈指针44,数据寄存器组41、地址寄存器组42、FTMD 59、选择器63、返址/运算兼用寄存器56、LDB 76、ALU1以及SFT 57的输出端相连接,根据这样的选择关系,可以知道堆栈指44、数据寄存器组41、地址寄存器组42的值,是通过ABUS而发送ALU 51的。此外,也可知道返址/运算兼用寄存器56的值,亦即状态回时的返回地址,也是通过ABUS而传送给ALU 51的。更进一步还可明白,SFT 57和SFTMD 59中所保存的乘积,也是通过这个ABUS选择器43,而传送给返址/运算兼用寄存器56及数据寄存器组42的。
B1BUS与选择器63、堆栈指针44、地址寄存器组42的输出端连接,与选择器54的输入端相连接。根据这样的连接关系可知,选择器3对PFCB 62或PCB 64进行选择,并将被选择的值通过B1BUS送给ALU 51。
B2BUS与IB 32,返址/运算兼用寄存器56,数据寄存器组41 LDB 76的输出端相连接,也与选择器54,选择器55以及LDB 76输入端相连接。根据这样的连接关系可知,IB 32中保存的指令的一分,例如jsr@(disp,pc)的disp等,经由这个B2BUS,传送给ALU 51。
参照对上述方式构成的处理器,说明在图6中所示的各指令的执行情况。
首先说明函数调用指令(jsr)执行时的动作。
在图6所示的jsr指令的(1)的动作如下,通过将堆栈指针44的值,传到ALU 51中,计算SP-2之值并送入SP,从ALU 51下方的黑点111,右边的黑点112起,经由指向ABUS的总线,从ABUS起经由选择器3,传送计算结果到堆栈指针44。
图6中jsr指令的(2)所示的动作如下:
通过OAB 74,将堆栈指针44的值传送到地址总线,根据选择器63 PCB 64进行选择和输出,将PCB 64的值(根据INC 65递增之的下一指令的地址),经由STB 75,保存到存储器78中的由堆栈指44所指示的位置。换言之,将返回地址压入堆栈。
图6中jsr指令(3)所示动作如下:
选择器63选择PCB_64的值,而PCB的值(下一指令的地址)经其上的黑点114起,到其右边的黑点115,再经过选择器63,ABUS后,传送到返址/运算兼用寄存器56中。
图6中jsr指令(4)所示的动作如下:
选择器63选择PFCB 62,PFCB 62(PC)的值,通过选择63,从B1BUS送入ALU 51中。IB 32中所存储着的程序计数器C的相对地址(disp)通过B2BUS送入ALU 51中。ALU 51计算出的跳转目地址(PC+disp)从ALU 51设置到IAB 66和PCB 64中。设定之后,IB 32中的指令全被清除。
图6中rts指令(1)所示的执行动作如下:
DEC 80对返回指令译码之后,将堆栈指针44的值SP经由ALU 51及通过ALU 51下方的黑色圆点111,以及其右的黑圆点112,从OAB 74,入地址总线。从而,在RAM 78中的堆栈内所保存的返回地址,经过AM 78一例的数据总线、LDB 76,从ABUS起,经由ALU 51,选择67,被传送到PCB_64中。此外,还同时将返回地址传送给IAB 6,并随即将IB 32中的指令全部清除。
图6所示的rts指令(2)中的动作如下:当图6(1)的动作完成之后,着根据堆栈指针44将其值SP,经由ABUS,传送到ALU 51中,并算SP+2。计算结果经过ALU_51下方的黑色圆点111、它的右边的黑圆点112,并通过从该处指向ABUS的总线,经过ABUS转向右方,再通过上方的选择器43,被传送到栈指针44中。
图6中的特殊返回指令rtsf的(1)的动作如下:当DEC 80对返回指(rtsf指令)译码之后,在返址/运算兼用寄存器56中所保存的返回地,被送到ABUS上,从ABUS起,经选择器67,送入PCB 64的时,返回地址也被传送到IAB 66中,处理控制转移到返回地址。与此时,IB 32中的所有指令均被清除。
图6中的rtsf指令(2)的动作如下:在完成了上述(1)的动作之后栈指针44的值经由ABUS被送到ALU 51中,在ALU 51中计算P+2,计算的结果经ALU 51下方的黑圆点111,其右边的黑圆点112通过从该处指向ABUS的总线,经由ABUS向右,再通过其上方的选器43,传送到栈指针44中。
乘法指令执行时的动作如下:当DEC 80对乘法指令mul译码之后,存器Dn(乘数)的值被送到B2BUS上,并到达ALU 51中,此外,寄存器m(被乘数)的值被送到B1BUS上,然后进入ALU 51中。ALU 51将乘数被乘数相乘,其积的低位字节经过SFTMD 59移位,而高位字节被保存到SFT 57中。在SFT 57中所保存的乘积的高位字节,经过ALU 51的下方的黑圆点111,其右边的黑圆点112,被送到ABUS上,从而传送给返址运算兼用寄存器56。而SFT 57中所保存的乘积低位字节,从SFTMD 9经过ABUS,再经过上方的选择器43,被送入寄存器DR之中。
其次,再对函数调用以及从被调用函数的状态返回的过程加以说明。图12中将处理器的处理过程用流程图来表示。图9中表示出了由生成代码改写置改写之后的程序。本图中左侧的箭头表示了本程序中的执行顺序是怎样变的。此外,右侧的标有stage1,stage2,stage3等字串的矩形,模拟为堆及返址/运算兼用寄存器56,其内的数值“0102”、“0104”,表示执函数调用时在其内所保存的返回地址。下面,参照这些图,对前述结构的理器进行函数调用和状态返回时的过程加以说明。
先对程序计数器的设定和指令的取出加以说明。当处理器起动之后,程首址被置入PCB 64中,同时也设定到IAB 66中。在IAB 66中设定的程序首地址被送到地址总线上。
程序计数器61内的程序计数器缓冲器PCB 64的值,通过INC 65将地址每两个字节或者一个字节进行递增。将递增的结果重新去设定CB 64,同时,设定到IAB 66中。与此同时,将递增之前PCB 64之值传送到PFCB 62中,这样一来,程序计数器缓冲器PCB 64的值便过INC 55,就使程序计数器的值不断更新,因而不断读入ROM 79的机器语言程序。
当程序未开始执行或者在执行函数调用的分枝指令而IB 32为空时指令的第一个字节从IBUS直接保存到IR 35中。因为地址总线、据总线都是16位,而IB_32的宽是8位,每当程序计数器PC的值PCB递增1,则一个字节长的指令便被保存到IB 32中。此外,每当程序数器PC的值PCB被递增2时,2个字节长的指令便被保存到IB 32(步t2)。IB 32内所保存的指令之中,其开始的部分被传送到IR 35中在IR 35中所设置上的指令,进而被传送到DEC 80中,根据这样的送,在DEC 8O中对该指令进行译码。另一方面,在IB 32中保存的令,以先进先出(FIFO)方式,顺次传送到IR 35之中。
此处,当设有指令的地址被送到地址总线上时,也就是没有指令存在的址被设定到PCB 64或IAB 66时,或者是读入了表示程序结束的指时,就认为是程序的结束,从而终止处理(步t1)。
指令“mov #1,D1”的执行过程如下:当程序开始执行后,程序的首地0100被设定到了PCB 64和IAB 66中。被设定的IAB 66的值100被送到地址总线上,从而取得了相对地址0100的指令“mov #1,D1”。并且,判断所取出的指令是否是函数调用指令(步t3)。因为相对地址0100的指令“mov #1,D0”是将立即数#1传送到寄存器D0的传送指令而是函数调用指令,所以,要判断指令“mov #1,D0”是否为特殊返回指令(步t4)。由于“mov #1,D0”不是特殊返回指令,因此执行该指令(步t5)。执行后PCB 64的值增加到0101,将下一条指令,即相对地址0101函数调用指令“jsr _f1”取出(步t2)。
相对地址0101的函数调用指令的执行过程如下:当取出了“jsr_f1”后,IB 32中填入“jsr _f1”的3字节长的机器语言代码。这时IB 32的内容为:第一字节存放jsr指令(1字节长)的操作码,第二字节存放转目标地址(或者PCB 64中的相对地址disp(位移))的低位字节,第字节存放转移目标地址(或PCB 64中的相对地址(disp:即位移))高位字节。这样一来,对DEC 80而言,jsr指令的操作码被传送到了EC 80中。传送后,DEC 80要判断从IB 32传送过来的指令是否函数调用指令(步t3)。由于相对地址0101的指令“jsr _f1”是一函数用指令,因而将栈指针44的值传送到ALU 51中,在ALU 51中,根据指针44的SP,计算SP-2,其结果再送回栈指针44中。
继而,将栈指针44的值SP,送到地址总线上,使之指向存储器78的区域。在该指示的区域内把PCB_64中的下一条指令的地址保存起来因此,返回地址便被压入堆栈(步t6)。
接着,将PCB 64的值(下一条指令的地址)向返址/运算兼用寄存56传送,保存到返址/运算兼用寄存器56中。作为其结果,堆栈和返/运算兼用寄存器56中的存储状态如图9的stage1所示。
当DEC 80对IR 35中的1字节长的jsr指令进行译码时,IB 32保存着jsr指令的2个字节的跳转地址。接着使用保存在此IB 32中的与指令计数器PC的值来计算跳转地址,并将该地址设定到PCB 64和AB 66中。这样一来,由于设定了跳转地址,因而便进行了函数调用。定之后,由于IB 32中函数调用指令之后所列的指令已不起作用,因此它们清除掉(步t7)。
函数f1及f2内的处理过程如下:当控制转移到函数f1之后,将函数f1中对地址0105的指令“mov #1,D1”和相对地址0106的“add D0,D1”顺次出和执行(步t1~t5)。跟随这些指令之后的相对地址0107的指令“sr _f2”也被取出(步t2),并判断其是否函数调用指令(步t3)。因为指令为函数调用指令,因而将其指令之后的下一指令的地址,即相对地址0108(PC+1=0107+1=0108)作为返回地址压入堆栈中(步t6),更进一步将返回地址0108存放到返址/运算兼用寄存器56中。其结果,堆栈及返/运算兼用寄存器56的存储状态如图9的Stage3所示,也就是说,返回址被压入堆栈中,而返址/运算兼用寄存器56中保存的值,是用返回地0108来更新过的值。当保存了返回地址0108之后,计算跳转地址(PC+isp(位移=0002))之值,并将计算结果传送到程序计数器61中(步t7)。
由于这样地将跳转地址(函数f2的首地址0109)传送到PC中,因此控转移到函数f2。控制转移后,顺次取出相对地址0109,相对地址010a,00b,010c...的指令并予执行(步t1~t5)。取出相对地址0109的指令“mov #3,D1”并执行之后,又取出相对地址010a的指令“mul D0,D1”,将其给DEC 80。DEC 80将其译码为一乘法指令(mul指令),就将寄器Dn(乘数之值送到B2BUS之上,进入ALU 51中。此外,寄存器m(被乘数)之值被送到B1BUS上,进入ALU 51中,ALU 51将乘数和乘数相乘,将乘积的低位字节在SFTMD 59中移位,高位字节被存储到SFT 57。保存在SFT 57中的乘积的高位字节,经由ALU 51下面的黑圆点111,右边的黑圆点112,送到ABUS上,传送到返址/运算兼用寄存器56。保存在SFT 57中的乘积的低位字节则从SFTMD 59,经由BUS,并通过上方的选择器43,传送到寄存器DR之中。这样一来,执行了乘法指令之后,返址/运算兼用寄存器56变为保存乘积的高位字的状态。其结果,堆栈及返址/运算兼用寄存器56的存储状态变为如图的Stage 5所示的状态。也就是说,返回地址0108被保存在堆栈中,而返/运算兼用寄存器56中所保存的值,被乘积结果所改写。
继而取出相对地址010b中的指令“add D0,D1”,执行该指令后,取出对地址010c的指令(步t1,t2)。
相对地址010c中的rts指令的执行过程如下:这时,堆栈变为stage6的态,因为取出的相对地址010c中的指令为返回指令“rts”,因而堆栈指44的值SP经由ALU 51,再经过ALU 51下面的黑圆点111,以及其右的黑圆点112,从OAB 74送到地址总线上。据此,在RAM 78中的堆中所保存的返回地址0108,经由RAM 78一侧的数据总线、LDB 76、从BUS起,经过ALU 51,选择器67,传送并保存到PCB 64中。与此同,返回地址0108被传送到IAB 66中。在这样的传送之后,因为在IB 32的rts指令之后所列的一连串指令已无作用,因而将它们清除。并且,这的传送过程,在图9中的stage6中,以箭头←加以表示。
清除完成后,堆栈指针44的值SP,经由ABUS,被传送到ALU 1中,并计算SP+2。计算的结果经过ALU 51下方的黑圆点111,其右边的圆点112,通过从该处指向ABUS的总线,经由ABUS,转向右方,再过其上的选择器43,传送到栈指针44中。这样一来,从函数f2的处理回,在下一步中,读出相对地址0108中的指令。
从相对地址0108的返回指令“rts”起,到相对地址010e的指令“dd D0,D1”上的动作过程如下:因为相对地址0108的指令是返回指令“rts,因而再次存取堆栈,从堆栈中取出返回地址0102,被取出的返回地址102被传送到程序计数器61中(步t3,t4,t5)(图9的stage4)。
传送后,取出相对地址0102中的指令并予执行(步t1~t5)。对地址0102的指令被执行后,取出相对地址0103的指令。因为相对地0103的指令是函数调用指令“jsr _f3”,因而下一条指令的地址,也就相对地址0104被作为返回地址存放到堆栈和返址/运算兼用寄存器56中stage2),计算转移目标地址(PC+disp),控制向函数f3转移(步t6、t7)。由于控制的转移,取出相对地址010d的指令“mov #1,D1”,相对地010e的指令“add D0,D1”,顺次执行之(步t1~t5)。接着取出相对地址10f的指令。
特殊返回指令(rtsf指令)的执行过程如下:DEC 80对相对地址10f的rtsf指令进行译码,返址/运算兼用寄存器56中所保存的返回地址104被送到ABUS上,从ABUS经由ALU 51,选择器67传送到PCB4中。与此同时,返回地址0104被传送到IAB66中。这时的返址/运算兼用存器56的状况如图9的stage7所示。也就是说,返址/运算兼用寄存器6中保存的值被改写为0104。由于这样的传送,完成了从子程序到函数ain的状态返回。在这样的处理之后,IB 32中的rtsf指令之后所列的一串指令已没有作用,将它们予以清除。
此后,栈指针44的值SP经由ABUS,传送到ALU 51,由ALU 51算SP+2之值,计算结果经由ALU 51之下的黑圆点111,右方的黑圆点112,并通过从该处指向ABUS的总线,再经由ABUS转向右方,通过上的选择器43,传送到栈指针44中。这一状态在图9的Stage7,由箭头进行表示。也就是利用从返址/运算兼用寄存器56向程序计数器PC传返回地址,便可知道已完成了状态恢复。
如上所述,按本实施例,即使不设置保存返回地址的专用寄存器,也可减少为进行状态恢复而对堆栈的存取次数。
此外,在不脱离本实施例的主旨的范围内,也可以变更实施。
本实施例中,运算结果的保存、返回地址的保存均由保存乘法、除法、余运算结果高位数据的寄存器(返址/运算兼用寄存器)来担当,当然也以用其它的寄存器来担当。
例如,可由为保存加法、减法、移位运算运算结果高位数据而设的寄存来担当。
此外,即使没有返址/运算兼用寄存器,也可以用其它使用频度比较低寄存器。也就是说,也可以用处理器中为保存超过运算器长度的运算的运结果而设置的寄存器。例如,本实施例中,ALU 51的运算长度为16位,处理器中超过这一长度的运算,也就是说,在运算长度为16位的ALU中如果设置有为保存32位长、64位长运算的运算结果的寄存器时,大体说,这样的寄存器的使用频度较低,因而也可使用。
更进一步,不一定非用保存运算结果高位数据的寄存器,也可以使用保运算结果的低位数据而设置的寄存器来保存返回地址。
此外,本实施例中,返址/运算兼用寄存器只有一段,把它设置为3段、段,使其能保存3、4个以上的返回地址也可以。这时,若返址/运算兼用存器若为3段,便可保存3个返回地址,如果返址/运算兼用寄存器设为段,则可保存4个返回地址。为此,生成代码改写装置,可检测出嵌套层小于返址/运算兼用寄存器的段数的所有函数,并将被测检出的函数中的回指令改写为特殊返回指令。
这样一来,由于生成代码改写装置进行改写,就可以将多个返回地址保到返址/运算兼用寄存器中。
更进一步,在本实施例中,由代码生成装置生成汇编程序之后,返回指被改写为特殊返回指令,例如,可以如以下(a)、(b)所示那样进行变更实施。
a)最优化装置可利用一个标志,当该标志为ON时,表示可以输出,为OFF时,表示不能输出,将这样的标志对应于中间目标语言状态的各函数进行记忆。然后,从中间语言程序状态的程序中,检测出可以输出殊返回指令的所有函数,对于这些被检出的函数,将表示可以输出特殊返指令的标志置为ON,而对未检出的函数,该标志位置为OFF。
包括有上述处理的最优化装置的处理结束后,代码生成装置参照这些标,对于标志为ON的函数,生成一个末尾为一条rtsf指令的子程序,对于志为OFF的函数,生成末尾为一条rts的指令。
b)在中间语言状态中,最优化装置检测出中间语言状态的函数中可以出特殊返回指令的函数,在被检测出的函数末尾可以写入一条表示可以输特殊返回指令的中间语言指令。
从而,代码生成装置对末尾存在有表示可以输出特殊返回指令的中间语指令的那些函数,生成一个末尾为rtsf指令的子程序。
对那些末尾不存在用来表示可以输出特殊返回指令的中间语言指令的那函数,生成一个末尾为rts指令的子程序。

Claims (8)

1.一种执行调用不包含子程序调用指令的子程序,和从子程序状态返回的处理器,其特征在于,具有:
特殊寄存器,在执行规定的运算指令时,保存应当被算出的运算结果;
地址保存部,保存程序的取出地址;
调用装置,在调用子程序时,将根据调用子程序指令所指示的调用地址,保存在地址保存部中;
返回地址存储装置,将调用装置存储调用地址的上述子程序调用指令的下一地址,作为返回地址,存储在堆栈区域内,并且也将该下一地址,存储在上述特殊寄存器中;
返回装置,在从包含规定运算指令的子程序返回时,根据包含在该子程序中的第一类子程序返回指令,通过返回地址存储装置,将在堆线区域内存储的返回地址保存在地址保存部;
在从不包含规定运算指令的子程序返回时,根据包含在该子程序中的第二类子程序返回指令,通过返回地址存储装置,将在特殊寄存器存储的返回地址保存在地址保存部。
2.根据权利要求1的处理器,其特征在于,上述特殊寄存器是为保存乘法、除法、求余运算之中的任一运算的运算结果而设置的寄存器。
3.根据权利要求1的处理器,其特征在于,上述特殊寄存器是为保存超过运算器的运算长度的运算结果而设置的寄存器。
4.根据权利要求1的处理器,其特征在于,上述特殊寄存器是为保存运算器的运算结果中的高位或低位数据二者中的一个而设置的寄存器。
5.一种将用程序设计语言所编写的多个子程序构成的第1程序,翻译为规定的处理器可以执行的机器语言程序的程序翻译装置,其中上述规定的处理器包括有:
特殊寄存器,当指令是规定的运算指令时,保存上述规定运算指令的运算结果;
地址保存部,保存程序的取出地址;
调用装置,当指令是子程序调用指令时,将根据子程序调用指令所指示的调用地址,保存在地址保存部中;
返回地址存储装置,通过将由上述调用装置存储调用地址的子程序调用指令的下一地址,作为返回地址写入存储器,把该返回地址存储在堆栈区域内,并且也将该下一地址存储在上述特殊寄存器中;
返回装置,在指令是第一类子程序返回指令时,通过执行存储器读出,将返回地址存储装置存储在堆栈区域内的返回地址,保存在地址保存部;在指令是第二类子程序返回指令时,将返回地址存储装置存储在特殊寄存器的返回地址,保存在地址保存部;
程序翻译装置的特征在于,包括有:
检测装置,从第1程序中,检测出不包括有调出其他子程序的子程序调出指令、和将运算结果存储在特殊寄存器的规定的运算指令的子程序;
翻译装置,将由检测装置检测出的子程序,翻译成包含有第2类子程序返回指令的机械语言子程序,并将包含有子程序调出指令和规定的运算命令中的至少一种的子程序,翻译成包含有第1类子程序返回指令的机械语言子程序。
6.根据权利要求5的程序翻译装置,其特征在于,上述程序翻译装置具有给予装置,将特殊信息给予由检测装置所检出的子程序;
上述翻译装置,将给予了特殊信息的子程序翻译为包含有第2类子程序返回指令的机械语言的子程序,并将除此之外的子程序翻译为包含有第1类子程序返回指令的机械语言的子程序。
7.根据权利要求5的程序翻译装置,其特征在于,上述特定运算指令是乘法、除法、求余法算指令中的任何一个指令。
8.根据权利要求5的程序翻译装置,其特征在于,上述特定运算指令是超过运算器的运算长度的运算指令。
CNB961037164A 1995-05-11 1996-03-22 处理器及程序翻译装置 Expired - Lifetime CN1140870C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP113455/95 1995-05-11
JP7113455A JP2857600B2 (ja) 1995-05-11 1995-05-11 プロセッサ及びプログラム翻訳装置
JP113455/1995 1995-05-11

Publications (2)

Publication Number Publication Date
CN1138172A CN1138172A (zh) 1996-12-18
CN1140870C true CN1140870C (zh) 2004-03-03

Family

ID=14612679

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB961037164A Expired - Lifetime CN1140870C (zh) 1995-05-11 1996-03-22 处理器及程序翻译装置

Country Status (7)

Country Link
US (1) US6170998B1 (zh)
EP (1) EP0742513B1 (zh)
JP (1) JP2857600B2 (zh)
KR (1) KR100247899B1 (zh)
CN (1) CN1140870C (zh)
DE (1) DE69616867T2 (zh)
TW (1) TW405095B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102364432A (zh) * 2011-10-25 2012-02-29 中国科学院苏州纳米技术与纳米仿生研究所 使用双程序计数器计算待处理指令地址的系统

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US6317796B1 (en) 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
FR2779842B1 (fr) * 1998-06-15 2001-07-13 Schlumberger Ind Sa Procede de gestion de l'execution d'un programme dans un dispositif a circuit integre
US6757892B1 (en) * 1999-06-24 2004-06-29 Sarnoff Corporation Method for determining an optimal partitioning of data among several memories
US6567975B1 (en) * 1999-11-08 2003-05-20 Sun Microsystems, Inc. Method and apparatus for inserting data prefetch operations using data flow analysis
US6820193B1 (en) * 1999-12-17 2004-11-16 Koninklijke Philips Electronics N.V. Branch instructions with decoupled condition and address
US6910119B1 (en) * 2000-06-21 2005-06-21 Intel Corporation Instruction pipe and stall therefor to accommodate shared access to return stack buffer
US6857063B2 (en) * 2001-02-09 2005-02-15 Freescale Semiconductor, Inc. Data processor and method of operation
US7546451B1 (en) 2002-06-19 2009-06-09 Finisar Corporation Continuously providing instructions to a programmable device
GB2400198B (en) * 2003-04-04 2006-04-05 Advanced Risc Mach Ltd Controlling execution of a block of program instructions within a computer processing system
KR100658918B1 (ko) * 2004-03-29 2006-12-15 주식회사 팬택앤큐리텔 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
US7401210B2 (en) * 2005-03-30 2008-07-15 Arm Limited Selecting subroutine return mechanisms
CN100559344C (zh) * 2005-08-23 2009-11-11 中国科学院计算技术研究所 一种支持用规则记录变量访问专用寄存器组的处理方法
JP5165969B2 (ja) * 2007-08-29 2013-03-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのコンパイルのために変数にレジスタを割り付ける技術
CN101452395B (zh) * 2007-11-28 2013-04-24 无锡江南计算技术研究所 函数调用和返回的处理方法、二进制翻译方法和系统
US9696975B2 (en) * 2010-09-03 2017-07-04 International Business Machines Corporation Allocating register halves independently
CN107870780B (zh) * 2016-09-28 2020-04-28 华为技术有限公司 数据处理装置和方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4399507A (en) * 1981-06-30 1983-08-16 Ibm Corporation Instruction address stack in the data memory of an instruction-pipelined processor
JPH0752390B2 (ja) * 1985-05-07 1995-06-05 株式会社日立製作所 命令処理装置
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US5117498A (en) * 1988-08-19 1992-05-26 Motorola, Inc. Processer with flexible return from subroutine
JPH0769816B2 (ja) * 1988-12-07 1995-07-31 松下電器産業株式会社 データ処理装置
US5222220A (en) * 1989-11-16 1993-06-22 Mehta Hemang S Microprocessor stack built-in guards
US5106467A (en) * 1990-10-05 1992-04-21 Armco Steel Company, L.P. Alkaline leaching of galvanized steel scrap
US5598560A (en) * 1991-03-07 1997-01-28 Digital Equipment Corporation Tracking condition codes in translation code for different machine architectures
DE4211966A1 (de) * 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
US5579520A (en) * 1994-05-13 1996-11-26 Borland International, Inc. System and methods for optimizing compiled code according to code object participation in program activities
JPH08212075A (ja) * 1995-01-31 1996-08-20 Nec Corp 情報処理装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102364432A (zh) * 2011-10-25 2012-02-29 中国科学院苏州纳米技术与纳米仿生研究所 使用双程序计数器计算待处理指令地址的系统
CN102364432B (zh) * 2011-10-25 2013-12-18 中国科学院苏州纳米技术与纳米仿生研究所 使用双程序计数器计算待处理指令地址的系统

Also Published As

Publication number Publication date
DE69616867T2 (de) 2002-04-11
KR960042424A (ko) 1996-12-21
TW405095B (en) 2000-09-11
CN1138172A (zh) 1996-12-18
US6170998B1 (en) 2001-01-09
EP0742513B1 (en) 2001-11-14
KR100247899B1 (ko) 2000-03-15
EP0742513A2 (en) 1996-11-13
EP0742513A3 (en) 1997-03-19
JP2857600B2 (ja) 1999-02-17
JPH08305569A (ja) 1996-11-22
DE69616867D1 (de) 2001-12-20

Similar Documents

Publication Publication Date Title
CN1140870C (zh) 处理器及程序翻译装置
CN1152287C (zh) 二进制程序转换设备和转换方法
CN100351810C (zh) 对特定指令类型的指令执行和数据访问计数的方法和系统
CN1613058A (zh) 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备
CN1302385C (zh) 编译装置
CN1095116C (zh) 执行两种指令长度代码的处理机及其指令码输入装置
KR100498482B1 (ko) 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
CN1842767A (zh) 用于多个异常处理模型的中间表示
US8839210B2 (en) Program performance analysis apparatus
US8250557B2 (en) Configuring a dependency graph for dynamic by-pass instruction scheduling
CN1627270A (zh) 用于对指令执行和数据访问进行计数的方法和设备
EP1280056A1 (en) Generation of debugging information
CN1513137A (zh) 使用多重指令集的数据处理
CN1752934A (zh) 编译器、编译方法以及编译程序
JP2011138219A (ja) 並列プログラム解析結果表示装置および並列プログラム解析結果表示方法
JP5301554B2 (ja) プロシージャリターンシーケンスを加速するための方法およびシステム
CN1506809A (zh) 模拟装置、模拟方法及程序
CN1604049A (zh) 用于自主剖析应用程序的方法和设备
CN1734415A (zh) 分枝预测装置及分枝预测方法
CN1068445C (zh) 指令调度方法和寄存器竞争检查方法
CN1522404A (zh) 在多指令集系统中对未处理操作的处理
CN1604044A (zh) 用于指令和数据访问的选择性计数的方法和装置
JP2007018254A (ja) 言語処理装置
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP2008102831A (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: 20150420

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

Effective date of registration: 20150420

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: 20040303

EXPY Termination of patent right or utility model