CN1497437A - 以提高的效率使用堆栈存储器的信息处理装置、信息处理方法和程序转换装置 - Google Patents

以提高的效率使用堆栈存储器的信息处理装置、信息处理方法和程序转换装置 Download PDF

Info

Publication number
CN1497437A
CN1497437A CNA031649556A CN03164955A CN1497437A CN 1497437 A CN1497437 A CN 1497437A CN A031649556 A CNA031649556 A CN A031649556A CN 03164955 A CN03164955 A CN 03164955A CN 1497437 A CN1497437 A CN 1497437A
Authority
CN
China
Prior art keywords
data
register
function
stacked memory
unit
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
CNA031649556A
Other languages
English (en)
Other versions
CN1260648C (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.)
Socionext Inc
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 CN1497437A publication Critical patent/CN1497437A/zh
Application granted granted Critical
Publication of CN1260648C publication Critical patent/CN1260648C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related 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/30181Instruction operation extension or modification
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)

Abstract

该信息处理装置200包括:处理单元220,其具有一个或多个保存用来计算的数据的寄存器;压缩单元240,其对在寄存器中的内容进行压缩并且保存到堆栈存储器231;和解压缩单元240,其对保存在堆栈存储器231中的数据进行解压缩并且恢复到相应寄存器。如果包含于处理单元220中的第一解码单元解码了一个被分配有一个压缩控制位的调用指令,则在执行调用指令中,压缩单元240就在将寄存器的内容保存到堆栈存储器231之前执行压缩。如果包含于处理单元220中的第二解码单元解码了一个被分配有一个解压缩控制位的返回指令,则在执行返回指令中,解压缩单元240就在将保存在堆栈存储器231中的内容恢复到寄存器之前执行解压缩。

Description

以提高的效率使用堆栈存储器的信息处理装置、信息处理方法和 程序转换装置
技术领域
本发明涉及一种用于响应于函数的调用以将数据从一个寄存器保存到堆栈存储器的技术。
背景技术
在函数执行期间调用另一个函数时,计算机将诸如当前执行的函数的地址存储到其堆栈存储器中,并将数据保存在其寄存器中。当所调用的函数执行结束时,计算机将保存的数据从堆栈存储器中恢复到寄存器,并将处理返回到从堆栈存储器恢复的地址。
然而,如果所有的寄存器都要被保存,将增加循环次数以及保存它们需要占用的堆栈存储器容量。这将导致系统性能降低。
鉴于减少调用函数所需的循环次数,日本公开专利申请H08-305581披露了一个程序转换装置和一个处理器,通过它们来从调用程序调用那些设置于不同文件中的子程序,不会导致管道的异常。
鉴于减少用于保存所需的堆栈存储器容量,这里已经提供了这样一个技术,它通过仅仅把一个在调用另一函数前后能够保证其数值的保证寄存器作为目标,来降低寄存器保存次数。其中一个例子就是美国专利US5241679,其公开了一种技术,该技术用于有选择地将要保存的寄存器指定到堆栈存储器。
目前,由于程序越来越大,同比例的处理器拥有的寄存器数目也有增加的趋势。因此,甚至是对于仅将保证寄存器保存到堆栈存储器,数据的存储量也会非常之大。考虑到这些,为处理器设置大容量堆栈存储器从而避免堆栈存储器溢出就是一个问题。
发明内容
本发明的目的是提供一种信息处理装置,一种信息处理方法,和一种程序转换装置,使用户可以使用堆栈存储器来提高效率从而抑制堆栈存储器溢出的可能性,从而实现存储器-保存。
为了完成上述目的,本发明提供一种信息处理装置,包括具有至少一个寄存器并且根据机器语言程序执行处理的处理器,该寄存器保存用于计算的数据,该信息处理装置具有:压缩判断单元,响应于预定函数的调用,来判断机器语言程序是否具有表示保存在寄存器中的数据将被压缩然后将其保存到堆栈存储器的信息;和保存单元,当通过压缩判断单元判断为肯定的时候,响应于预定函数的调用,对保存在寄存器中的数据进行压缩然后保存到堆栈存储器。
使用上述结构,对压缩数据而言,响应于预定函数的调用,对要被保存到堆栈存储器的数据进行压缩成为可能,由此减少了要被保存在堆栈存储器中数据的数量。
因此,该结构可以使用户利用堆栈存储器来提高效率,从而阻止堆栈存储器溢出的可能性,以实现存储器-保存。
在此,上述信息处理装置可以进一步具有解压缩判断单元,用于响应于预定函数调用的终止,来判断是否存在表示保存在堆栈存储器中的数据将被解压缩然后恢复到寄存器的解压缩信息;和恢复单元,当解压缩判断单元判断为肯定时,响应于预定函数调用的终止,对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
使用上述结构,压缩在预定函数调用终止时将被恢复到寄存器的存储在堆栈存储器中压缩数据是可能的。所以,即使被存储在堆栈存储器中的数据在数量上有所减少,寄存器的值在调用预定函数前后也可以得到保证。
此外,该保存单元可以具有:数据转换子单元,用于根据一个预定算法将保存在寄存器中的第一数据转换成为第二数据;比较子单元,用于将一个表示压缩效率的阈值和第二数据的数据大小相比较;和选择性的保存子单元,当第二数据大小小于该阈值的时候,用于将第二数据保存到堆栈存储器,并且当第二数据的量大于该阈值的时候,将第一数据保存到堆栈存储器。
使用上述结构,可以对保存在保证寄存器中的数据进行压缩,并且当具有压缩效果的时候,可以将该压缩数据保存到堆栈存储器。反之,如果没有压缩效果,它可以将该数据保存在保证寄存器中,就好像它被保存到堆栈存储器中一样。
所以,甚至,在保证寄存器中,比特数据之间也只有很少相关且因此压缩效率很差的情况下,堆栈存储器也是以增高的效率被使用的,而且并不受由诸如霍夫曼编码等数据变换引起的数据大小增加的影响。
此外,当经过压缩判断单元判断的结果为肯定的时候,当用于调用预定函数的一个调用指令执行时,保存单元可以对保存在寄存器中的数据进行压缩然后保存到堆栈存储器,并且当经过解压缩判断单元判断的结果是肯定的,当预定函数调用的执行返回结束的指令时候,恢复单元可以对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器中。
使用上述结构,在执行一个调用预定函数的调用指令时将数据压缩保存到堆栈存储器中是可能的,并且当执行一个用于结束预定函数的调用的返回指令时,保存在堆栈存储器中的那些将被恢复到保证寄存器中的数据进行解压缩。
因此,在信息处理装置中,其中需要该信息处理装置在从一函数到另一函数的分支操作中保存一个保证寄存器,即使该寄存器的值在预定函数操作前后得以保证,将被保存在堆栈存储器中的数据量也能减少,且因而堆栈存储器以增高的效率被使用。
此外,如果经过压缩判断单元判断的结果为肯定的时候,当预定函数的过程开始时,保存单元可以对保存在寄存器中的数据进行压缩然后保存到堆栈存储器,并且如果经过解压缩判断单元判断的结果为肯定的时候,当预定函数的过程结束时,恢复单元可以对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
使用上述结构,使得当根据存储指令保存该保证寄存器时,对保证寄存器中保存的数据进行压缩是可能的,并且当根据一条加载指令恢复保证寄存器时,可以对保存在堆栈存储器中的数据进行解压缩。
所以,在信息处理装置中,其中该信息处理装置不需要在从一个函数到另一个函数的分支操作中保存一个保证寄存器,即使寄存器的值在预定函数操作前后得以保证,保存在堆栈存储器中的数据量也能减少,且因而堆栈存储器以增高的效率被使用。
此外,为了完成上述目的,本发明提供一个信息处理装置所使用的信息处理方法,该信息处理装置包括具有至少一个寄存器并且根据一个机器语言程序执行处理的处理器,该寄存器保存用于计算的数据,该信息处理方法具有:压缩判断步骤,响应于一个预定函数的调用,来判断机器语言程序是否具有指示保存在寄存器中的数据应该被压缩然后将其保存到一个堆栈存储器的信息;和保存步骤,当该压缩判断步骤判断的结果为肯定的时候,响应于预定函数的调用,对保存在寄存器中的数据进行压缩然后保存到堆栈存储器。
使用上述结构,使得响应函数调用对保存在寄存器中的那些要被保存到堆栈存储器中的数据进行压缩,从而减少储存在堆栈存储器中的数据量。
因此,该结构可以使用户利用堆栈存储器来提高效率从而阻止堆栈存储器溢出的可能性,以实现存储器-保存。
此外,为了完成上述目的,本发明提供一种程序转换装置,包括:获取单元,用于获取包括一个或多个函数的输入程序;判断单元,用于响应于预定函数调用从而由输入程序判断保存在处理器的至少一个寄存器中的数据是应该被压缩然后被保存到堆栈存储器,还是应该不被压缩就保存到堆栈存储器;和转换单元,用于当判断单元断定数据应该被压缩然后保存时,将输入程序转换成包括指示信息的输出程序,该指示信息向处理器指明保存在寄存器中的数据应该被压缩然后保存到堆栈存储器。
使用上述结构,可以不用将全部函数设置成一个其保证寄存器将被压缩的压缩-目标函数;并且可以有选择地确定压缩-目标函数。
所以,上述结构可以防止循环次数的大量增加,这是在每个函数上都对保证寄存器进行压缩的结果,因而提高了堆栈存储器的使用效率。
这里,判断单元可以包括:检测子单元,用于在输入程序中检测堆栈访问函数,堆栈访问函数与该寄存器数据已保存其中的堆栈存储器有关,和判断单元,可以响应于堆栈访问函数和包含于输入程序的函数分级结构中的位于比该堆栈访问函数更高位的函数中任何一个的调用,来断定保存在寄存器中的数据应该不被压缩地保存到堆栈存储器。
使用上述结构,可以从一个其保证寄存器将被压缩的目标函数中排除掉需要其分级结构中的任何一个更低位函数访问堆栈存储器的每一个函数。
因此,在任何一个更低位函数不得不涉及保存在堆栈存储器中的数据的时候,不会发生所涉及数据已被压缩的情况。
这里,判断单元可以包括:预指定检测子单元,用于在输入程序中检测一个预指定函数,该预指定函数是一个其上已预先添加了表示保存在寄存器中的数据应被压缩然后保存到堆栈存储器的信息的函数,并且判断单元响应于预指定函数的调用,来断定保存在寄存器的数据应该被压缩然后保存到堆栈存储器。
使用上述结构,预先在预先变换程序中指定了的函数可以被转化成后-变换程序中的压缩-目标函数。
因此,将实现对将被压缩的寄存器的静态测定,其中用户在编程或编译之前指定一个压缩-目标函数。
这里,判断单元可以包括:嵌套信息产生子单元,用于产生显示包含于输入程序的函数分级结构的嵌套信息,并且当预定函数在其中包括子程序时,该判断单元根据嵌套信息,响应于该预定函数的调用,判断保存在寄存器的数据是应该被压缩然后保存到堆栈存储器,还是应该不被压缩地保存到堆栈存储器。
使用上述结构,可以在编译时动态地、在具有一个分级结构的函数组之内确定任意函数。
因此,一旦将数据保存到堆栈存储器,就可以将分级结构中的更高位(order)函数设置为压缩-目标函数,这些函数将在堆栈存储器内保存很长一段时间,并且不将分级结构中的更低函数设置为压缩-目标函数。使用此方案,没有大量增加保存保证寄存器所需要的循环次数,因此堆栈存储器可以增高的效率被使用。
这里,转换单元可以包括:压缩信息附加子单元,用于将信息附加到用于调用预定函数的调用指令中,当该预定函数被调用时,该信息指示处理器,保存于寄存器中的数据应该被压缩然后保存到堆栈存储器;和解压缩信息附加子单元,用于将信息附加到用于结束预定函数的调用的返回指令中,当预定函数的调用终止时,该信息指示处理器,保存于堆栈存储器中的数据应该被解压缩然后恢复到寄存器。
使用上述结构,可以给输出程序添加信息,该信息表示在执行一条调用指令过程中,对保存在保证寄存器中的那些将被保存到堆栈存储器的数据进行压缩,并且在执行一条返回指令过程中,对保存在堆栈存储器中的那些将被恢复到保证寄存器的数据进行解压缩。
因此,可以产生一个程序,通过这个程序在从一函数到另一函数的分支操作时需要保存一个保证寄存器到一个堆栈存储器的信息处理装置中,即使寄存器的值在预定函数的操作前后可以得到保证,保存在堆栈存储器中的数据量也可减少,且因而堆栈存储器可以增高的效率使用。
这里,转换单元可以包括:压缩信息附加子单元,用于将信息附加到该预定函数中,当该预定函数的处理开始时,该信息指示处理器,保存于寄存器中的数据应该被压缩然后保存到堆栈存储器;和解压缩信息附加子单元,用于将信息附加到该预定函数中,当该预定函数的处理结束时,该信息指示处理器,保存于堆栈存储器中的数据应该被解压缩然后恢复到寄存器。
使用上述结构,可以给输出程序添加信息,当根据存储指令保存保证寄存器时,该信息表示对保存在保证寄存器中的数据进行压缩,并且当根据加载指令恢复保证寄存器时,则对保存在堆栈存储器中的数据进行解压缩。
因此,可以产生一个程序,通过这个程序在从一个函数到另一个函数的分支操作时不需要保存保证寄存器到堆栈存储器的信息处理装置中,即使寄存器的值在预定函数的操作前后可以得到保证,存储在堆栈存储器中的数据量也可减少,且因而堆栈存储器可以增高的效率被使用。
附图简要说明
本发明的这些及其他目的、优点和特征将通过下列说明并结合举例说明本发明具体实施例的附图,而变得更加明显。在附图当中:
图1是表示装备有一个程序转换装置和一个本发明实施例涉及的信息处理装置的信息处理系统的结构图;
图2是表示一个源文件11的例子的示意图;
图3是表示一个源文件12的例子的示意图;
图4表示一个与本发明实施例有关的程序转换装置的结构;
图5是保存在一个选择替换信息保存单元123中的一个选择替换表123a的数据结构图;
图6是一个具有相互调用关系的函数的树状结构图;
图7是表示一个保存在函数树信息保存单元125中的函数树信息表125a的数据结构图;
图8是表示一个执行文件20的内容的示意图;
图9表示当被调用方在分支执行后,执行寄存器保存/恢复时,执行文件的内容示意图;
图10是表示一个本发明实施例涉及的信息处理装置的结构图;
图11表一个处理单元220的内部结构;
图12表示DEC222的内部结构,其被构造以对分别分配压缩解压缩控制位的存储指令和加载指令进行解码;
图13表示一个堆栈存储器231的示意图;
图14是一个堆栈存储器231的示意图,来自于保证寄存器225a的数据就保存在其中;
图15表示压缩单元240的内部结构;
图16是一个用在霍夫曼编码方法中的表;
图17是一个堆栈存储器231的示意图,在其中将与保存到图14的堆栈存储器231中的相同数据,在根据图16的霍夫曼编码表被压缩之后就被保存在其中;
图18是用于CSR250的位分配图;
图19表示解压缩单元260的内部结构;
图20是在保证寄存器225a和堆栈存储器231之间执行保存/恢复数据过程中显示数据流的流程图;
图21是表示程序转换装置100的操作的流程图;
图22是表示如何产生一个选择替换表123a的流程图;
图23是表示如何选择压缩-目标函数的流程图;
图24是表示通过信息处理装置200执行操作的流程图;
图25是表示调用函数的操作和保存随后的保证寄存器225a的流程图;
图26是表示结束函数的操作及其后保证寄存器225a的恢复的流程图。
具体实施方式
<概述>
本发明通过对保存在保证寄存器中的数据进行压缩,实现了当调用一个函数且需要保存保证寄存器的时候,对堆栈存储器的有效使用。
该说明从用于产生执行文件20的程序转换装置100和相关文件开始。此执行文件20具有表示应对保存在保证寄存器中的数据响应于函数调用以进行压缩的信息。接下来,将对执行该执行文件20的一个信息处理装置200进行描述。
<结构>
图1是表示包括有一个程序转换装置和一个本发明实施例涉及的信息处理装置的信息处理系统的结构图。
在该图中所示的信息处理系统由一个程序转换装置100和一个信息处理装置200组成。程序转换装置100对一个源文件组10进行转换以便生成一个执行文件20,并且信息处理装置200执行所生成的执行文件20。
(源文件)
在此实施例中,源文件组10由两个文件组成:源文件11和源文件12。
图2和图3是示意图,分别表示源文件11和源文件12的一个例子。
源文件11和12都是由高级程序设计语言程序编写的程序文件。该源文件11包括以下区域:一个说明区域11a,该区域涉及一个函数“main”,一个说明区域11b,该区域涉及一个函数″func_a″,一个说明区域11c,该区域涉及一个函数″func_b″,一个说明区域11d,该区域涉及一个函数″func_d″,一个说明区域11e,该区域涉及一个函数″func_e″,和一个说明区域11g,该区域涉及一个函数″func_f″。源文件12包括一个说明区域12a,该区域涉及一个函数″func_c″。这里描述的函数组具有一个树状结构,其中处理可以通过调用/返回来分支。
在涉及函数“main”的说明区域中11a中,分别描述了调用″func_a″,″func_b″,和″func_e″的指令。在涉及″func_a″的说明区域11b中,描述了一条调用″func_c″的指令。在涉及″func_c″的说明区域12a中,描述了一条调用″func_f″的指令。在涉及″func_b″的说明区域11c中,描述了两条分别调用″func_c″和″func_d″的指令,以及按一预定条件X进行的判断,该判断用来对这两个指令的其中一个进行分支。在涉及″func_d″的说明区域11d中,以下三个指令称之为内联汇编指令:一条加载指令,用于将比由堆栈指针表示的地址阶数高四字节的地址的存储器内容传输到寄存器r0;与操作指令,用于将保存在寄存器r0和″0xf0″中的数据逻辑积,存储到寄存器r0;和存储指令,用于将保存在寄存器r0中的数据传输到比由堆栈指针表示的高四字节的地址。涉及″func_e″的说明区域11e,它包括一个用于编译指示#STACK_COMPRESS的说明区域11f。在本实施例中,对程序转换装置100来说,编译指示#STACK_COMPRESS是一类表示响应于函数调用将要从保证寄存器被保存到栈存储器的数据应被压缩的编译指示。
(程序转换装置)
图4表示一个与本发明的实施例有关的程序转换装置的功能和结构。
程序转换装置100实际上是由处理器、RAM、和写入程序的ROM等组成的计算机系统。它的功能可以通过处理器执行一个写在ROM中的程序来实现,或程序转换装置100也可以是一个布线逻辑或一个ASIC。该程序转换装置100包括:源文件获取单元110,判断单元120,一个转换单元130,和存储单元140,它们每一个都是一个功能块。
源文件获取单元110获得一个保存在存储单元140中的源文件11和源文件12,并且将获得的源文件11和12传送到判断单元120和转换单元130。
判断单元120包括:堆栈访问检测单元121,用户-指定函数抽取单元122,选择替换信息保存单元123,函数树信息生成装置124,函数树信息保存单元125和函数选择单元126。该判断单元120用于响应于函数调用,来判断是否对保存在寄存器中的那些将被保存到栈存储器中的数据进行压缩,以及确定此种函数(后面称之为“压缩-目标函数”)。
堆栈访问检测单元121检查在每一个源文件11和12中描述的每个函数的处理,用于检测函数,这些函数包括一个用于参考地址高于在函数处理起始时的堆栈指针值的处理。在一个保存在选择替换信息保存单元123的选择替换表123a当中,堆栈访问检测单元121写入一个被检测函数的名字和函数估算值。这里,被检测函数的函数估算值是作为″0″写入的。
在源文件11和12所描述的且未写入选择替换表123a中的函数内,用户-指定函数抽取单元122查找编译指示#STACK_COMPRESS的说明。若函数检测到编译指示#STACK_COMPRESS,用户-指定函数抽取单元122将它的函数估算值设置为″2″,并且将上述的函数的名字和函数估算值写入选择替换表123a。若函数检测不到编译指示#STACK_COMPRESS,用户-指定函数抽取单元122则将它的函数估算值设置为″1″,并且将上述函数的名字和函数估算值写入选择替换表123a中。
选择替换信息保存单元123是RAM存储区的一个具体部分,并且保存有选择替换表123a。
图5表示保存在选择替换信息保存单元123中的选择替换表123a的数据结构。
选择替换表123a包括一些与包含在源文件组10中的函数相同编号的选择替换信息。每一条选择替换信息都按照一对一的关系与函数相关联,并且由函数名123b和函数估算值123c组成。函数估算值123c是值:0、1、2中的一个。对于具有一个在函数开始时访问地址高于由堆栈指针所指示地址的堆栈存储器的处理的函数来说,该函数估算值123c是0。需要上述函数涉及一个堆栈存储器,在上述堆栈存储器中已经由于函数调用而存储有一个保证寄存器的值。一个在用户-指定抽取单元122上检测到具有编译指示#STACK_COMPRESS的说明的函数,具有2这一函数估算值123c,而不同于上述两类的,则具有1这一函数估算值123c。
首先,函数树信息生成单元124对函数进行检测,该函数具有在中间代码保存单元132中保存的中间代码组内的最低位函数。接下来,函数树信息生成单元124抽取一个在函数“main”中等于最高位函数的调用关系,将其作为树状结构的分支,其中“main”为主程序。然后,函数树信息生成单元124将一个树数字添加到每个抽取分支,并将树数字和树估算值写入保存在函数信息保存单元125中的函数树信息表125a。这个树估算值是构成分支的全部函数的函数估算值123c的和值。
图6表示具有相互调用关系的函数的树状结构。相对于一个特定函数,一个调用该特定函数的且位于图表水平轴左侧位置的函数,被看作是该树状结构中的更高位函数。同样,由特定函数调用的且位于水平轴右侧位置的函数,被看作是该树状结构中的更低位函数。注意,由作为主程序的主函数调用的每一个子程序的顶部函数,被称作树状结构分支中的最高位函数。
在此实施例中,如图6所示,三个函数″func_a″,″func_b″,和″func_c″被称作每个分支的最高位函数。正如你所看到的那样,这些函数已分别由作为主程序的主函数来调用。函数树信息生成单元124从本实施例的中间代码组中进行抽取,分支1包括″func_a″、″func_c″、和″func_f″,分支2包括″func_b″,″func_c″和″func_f″,分支3包括″func_b″和″func_d″,分支4仅包括″func_e″。
函数树信息保存单元125实际上是RAM存储区的一部分,并且保存有函数树信息表125a。
图7表示保存在函数树信息保存单元125中的函数树信息表125a的数据结构。
函数树信息表125a包括一些与树状结构分支相同编号的分支信息块,函数树信息生成单元124从中间代码组中抽取。每一块分支信息都按照一对一的关系与该树状结构中的一个分支相关联,并且都由树数字125b和树估算值125c组成。通过将构成特定分支的全部函数的函数估算值123c相乘,来获得树估算值125c。
在本实施例中,如图7所示,包含于函数树信息表125a当中的四块分支信息,分别具有1、2、3和4的树数字125b。
函数选择单元126从以下函数中选择出某些作为压缩-指标函数:与分支信息有关的树估算值125c不为0的每个分支的最高位函数;在选择替换表123a中函数估算值123c为2的全部函数。然后,函数选择单元126将所选择的压缩-目标函数通知给压缩/解压缩位附加单元134。注意,树估算值不为0的分支是不包括任何下述函数的分支,该函数需要涉及一个堆栈存储器,在该堆栈存储器中已经由于函数调用而存储有一个保证寄存器的值,并且还应注意函数估算值123c为2的函数是已经接收了用户规定的函数。
转换单元130在其中包括有译码单元(translation unit)131、中间代码保存单元132、链接单元133和压缩/解压缩位附加单元134,并且该转换单元是用于将源文件11和12转换成为一个执行文件20。
译码单元131使用在源文件11和12中描述的每个函数,从而以机器语言来产生指令。以机器语言产生的指令包括,诸如在函数内执行过程的指令、来自于调用函数用来对过程进行分支的调用指令、和将过程返回到调用函数的返回指令。按上述方式,源文件11和12被转换成为机器语言形式的中间代码组。译码单元131将中间代码组输出到中间代码保存单元132。
中间代码保存单元132是RAM存储区的具体一部分,保存从译码单元131输出的以机器语言形式存在的中间代码组。
链接单元133是一个链接器,它将重定位信息等等添加到中间代码保存单元132保存的中间代码组中,并且将通过链接中间代码组产生的并可执行的机器语言代码,输出到压缩/解压缩位附加单元134。
压缩/解压缩位附加单元134包括压缩位附加单元135和解压缩位附加单元136,并且通过为从链接单元133输出的计算机语言代码添加一个压缩控制位和一个解压缩控制位,来产生一个执行文件20。然后,压缩/解压缩位附加单元134将产生的执行文件20发送到存储单元140。
压缩位附加单元135将一个1位的压缩控制位添加到一个用来调用函数的调用指令中,给函数选择单元126就它在机器语言代码当中将作为一个压缩-目标函数通知该调用函数。该1位的压缩控制位表明该保证寄存器中的内容将要被压缩。
解压缩位附加单元136将一个1位的解压缩控制位添加到一个用于终止函数的返回指令,给函数选择单元126就它在机器语言代码当中将成为一个压缩-目标函数通知该调用函数。该1位的解压缩控制位表明堆栈存储器的内容将要被解压缩。
存储单元140是一个诸如用HDD的记录媒体,那样用户就可以自由地操作它的文件,将由压缩/解压缩位附加单元134输出的源文件组10和执行文件20就记录在它上面。
图8是表示一个执行文件20的内容的示意图;
在执行文件20中,分别给用于分支到func_a的调用指令301和用于分支到func_e的调用指令302分配一个压缩控制位,并且分别给用于从func_a返回的返回指令303和一用于从func_e返回的返回指令304分配一个解压缩控制位。
这里,调用指令是以诸如″CALL label,Regs″等助记符写入的,表示保存在保证寄存器″Regs″中的数据将被保存到堆栈存储器中,并且表示该处理将被分支到″label″。分配有一位压缩控制位的″CALL label,Regs,stack_compress″,表示保存在保证寄存器″Regs″中的数据将被压缩并且保存到堆栈存储器,并且表示该处理将被分支到″label″。
一条返回指令是以诸如″RET Regs″等助记符写入的,表示已保存在堆栈存储器中的数据应被恢复到保证寄存器″Regs″,并且表示该处理应被分支到保存在堆栈存储器中的地址处。″RET Regs,stack_compress″是一条返回指令,它被分配有1位解压缩控制位,表示保存在堆栈存储器中的数据将被解压缩并且被恢复到保证寄存器″Regs″,并且进一步表示该处理将被分支到保存在堆栈存储器中的地址处。
注意,本实施例具有这样一种结构,该结构表示在执行调用指令和返回指令时保证寄存器将被保存并且被恢复。然而,也可以是另一种结构,在执行分支之前和执行存储指令和加载指令时表示保证寄存器将被保存并且被恢复。此外,在分支之后还可以在调用方保存/恢复一个保证寄存器。在这些情况下,一位信息″stack_compress″被添加到一个存储指令中和一个加载指令中,该″stack_compress″表示是否分别响应于调用和调用结束的函数对保证寄存器的内容进行压缩或解压缩。
图9表示在执行分支之后,当调用方执行保证寄存器的保存/恢复寄存器时,执行文件的内容示意图。
在图9中,当func_a的处理开始时,将一个压缩控制位添加到存储指令305中,以便将保存在保证寄存器r0-r7中保存的数据传输到堆栈指针所表示的地址上。反之,当func_a的处理结束时,将一个解压缩控制位添加到加载指令306中,以便将堆栈指针所表示的存储器内容传输到保证寄存器r0-r7中。
这里应当指出,在本实施例中,将被保存的保证寄存器是八个寄存器r0-r7。然而,保证寄存器应不仅限于这种八个寄存器,其他数目的寄存器也可以作为保证寄存器。
另外,在本实施例的程序转换装置100中,保存在已被译码单元131转换的机器语言中的中间代码组的地方,就是中间代码保存单元132。然而,这种中间代码组也可以作为中间文件被保存在存储单元140,或者也可以输出到一个外部记录媒体。
另外,在本实施例的程序转换装置100中,源文件组10被保存在存储单元140中。然而,源文件组10可以从一个外部记录媒体获取。
另外,在本实施例中,程序转换装置100将执行文件20输出到存储单元140。然而,也可以是将执行文件20输出到一个外部记录媒体的另一个结构。
(信息处理装置)
图10是一个表示本发明实施例涉及的信息处理装置的结构图;该信息处理装置200由指令存储器210、处理单元220、数据存储器230、压缩单元240、CSR250和解压缩单元260组成。
指令存储器210实际上是RAM存储区的一部分,存储在其中的执行文件20包括有由程序转换装置100产生的压缩/解压缩位。
处理单元220是一个处理器,该处理器解码并执行包括在执行文件20中的指令。
图11表示处理单元220的内部结构。
处理单元220由IF221、DEC2221、控制单元223、执行单元224、寄存器225、PC226和SP227组成。
IF221是一个指令提取单元,从保存在指令存储器210中的执行文件20提取出机器语言指令,并将该机器语言指令传送到DEC222。
DEC222是一个指令解码器,且分析机器语言指令。DEC222其中包括一个第一解码单元222a和一个第二解码单元222b。第一解码单元222a对一个分配有压缩控制位的调用指令进行解码,并且命令控制单元223控制保存在寄存器225中的数据压缩。第二解码单元222b对一个分配有解压缩控制位的返回指令机进行解码,并且命令控制单元223来对保存在堆栈存储器231中的数据解压缩进行控制。
应当指出,在这个实施例中,压缩/解压缩位分别被添加到调用指令和返回指令。然而,也可以添加压缩/解压缩位到存储指令和加载指令。在这种情况下,DEC222将具有不同于第一和第二解码单元的解码单元(即:第三和第四解码单元)。第三解码单元对被分配有一压缩控制位的存储指令进行解码,并且第四解码单元对被分配有一解压缩控制位加载指令进行解码。
图12表示DEC222的内部结构,它被构造来对分别分配了压缩/解压缩控制位的存储指令和加载指令进行解码。
如图11所示的控制单元223根据已经在DEC222分析过的机器语言指令控制执行单元224、压缩单元240和解压缩单元260。
如果,在执行一个调用指令时,在将数据保存到堆栈存储器231之前应对保证寄存器225a中数据进行压缩,则首先将保存在PC226中的数据存储到堆栈存储器231中,然后在由压缩单元240进行压缩之后存储保证寄存器225a的数据,最后存储保存在CSR250中的数据。然后,控制该处理以便分支到所调用的函数。
如果在执行一个返回指令时,在被恢复到保证寄存器225a之前,堆栈存储器231中的数据应被解压缩,则在CSR250中的数据被首先从堆栈存储器231中恢复,然后将由CSR250来表示其大小的保证寄存器225a中的数据,进入到解压缩单元260中,最后该数据被存储在PC226中。然后,控制该处理以便分支到调用函数。
执行单元224是一个计算单元,用于在控制单元223的控制之下执行机器语言指令。
寄存器225有32个记录装置(r0-r31),每个具有32位。该寄存器225存储执行单元224用于计算的数据。寄存器225的一部分是一个具有8个寄存器r0-r7的保证寄存器225a,总共有256位。在执行调用指令时,数据被保存到堆栈存储器231,并且当执行返回指令时被从堆栈存储器中恢复。按照这种方式,就如同函数被调用之前那样,该数值将得到保证。
PC226是一个程序计数器,并且保存指令存储器210的地址,该指令寄存器保存了当前执行的机器语言指令。
SP227是一个堆栈指针,保存了堆栈存储器231的空闲区的顶端地址。
如图10所示的数据存储器实际是RAM存储区的一部分,并且是一个用于保存与执行文档20的处理有关的数据的工作存储器。
堆栈存储器231是数据存储器230的一个区域,并且被用来存储下述数据:例如一个函数的返回地址、一个中断之后的返回地址、保证寄存器225a的值。
图13是一个表示堆栈存储器231的示意图。
注意,在此说明书中,“0x??”表示值“??”是十六进制数系统;“0b??”表示值“??”是二进制数系统。
纵轴上的“0xffff-0x0000”表示堆栈存储器231的地址。当数据被写入堆栈存储器231时,将被使用的第一地址为“0xffff”,它是堆栈存储器231的最高位地址,然后顺序移动到较低位的地址。当从堆栈存储器231检索数据时,将从堆栈存储器231空闲区的顶端地址之前的地址检索该数据,并顺序移动到较高位的地址。另外,当将数据存储到堆栈存储器231时,SP227将其保存值减少被存储数据的数据大小,并且当从堆栈存储器231中检索该数据时,SP227将其保存值增加所检索数据的数据大小。按照这种方式,SP227总是表明堆栈存储器231空闲区的顶端地址。
在本实施例中,堆栈存储器231在其中存储了函数自变量,以及存储了类似于PC226、保证寄存器225a和CSR250等当中的数据,并且需要响应于函数调用和返回,通过执行FILO(先进后出)操作来实现对过程进行分支。
图14是堆栈存储器231的示意图,在其中数据从保证寄存器225a而被保存;
压缩单元240通过被控制单元223的控制,可操作用于压缩保存在保证寄存器225a的数据,并且保存该数据到堆栈存储器231。
图15表示压缩单元240的内部结构;
压缩单元240其中包括数据压缩单元241和压缩控制单元242。
数据压缩单元241是可操作的用以从保证寄存器225a获取数据,并且使用霍夫曼编码对数据进行编码。
图16是一个用于霍夫曼编码方法的对应表。霍夫曼编码方法是一种数据压缩方法,在其中,在压缩数据时,经常出现的值被分配一个具有较短位长度的编码,而很少出现的值被分配一个具有较长位长度的编码。
图17是表示一个堆栈存储器231的示意图,其中与保存到图14所示堆栈存储器231中的数据相同的数据,在根据图16所示的霍夫曼编码表被压缩之后被保存。
如图15中所示的压缩控制单元242包括一个压缩比较单元243和一个阈值保存单元244。压缩比较单元243用阈值保存单元244中保存的阈值与使用霍夫曼编码所编码的数据压缩单元241中数据的数据大小进行比较。在比较之后,如果上述编码数据的数据大小小于阈值,则作为保存数据在堆栈存储器231中存储编码数据,并且将CSR250的位设置为1,所保存数据的数据大小被保存在CSR中。在比较之后,如果编码数据的数据大小不小于阈值,将保证寄存器225a的数据作为保存数据存储到堆栈存储器231中,并且将CSR250位设置为0。在保存数据被保存在堆栈存储器231中之后,压缩控制单元242将保存在CSR250中的数据存储到堆栈存储器231。
注意,保存阈值保存单元244中的阈值,要么是一个编码之前的数据的数据大小预定的一部分,要么是一个通过从编码之前的数据的数据大小减去一个预定值所获得的值。该阈值用来判断霍夫曼编码方法的压缩效率。在本实施例中,该阈值是同一值256,与保证寄存器225a的数据大小一致。
如图10中所示的CSR250是一个具有32位的状态寄存器,由一个1位的使能位和一个31位的数据区组成。
图18是表示CSR250的位分配图。
水平轴上的值表示CSR上位的位置。位[0]是一个使能位,它表示将被保存在堆栈存储器231中的数据是否被压缩。对于压缩数据,它为“1”,而对于非压缩数据,它为“0”。位[1]-[31]是用来在其中存储压缩数据的数据大小的数据区。如果该使能位为1,位[1]-[31]将存储压缩数据的数据大小,如果该使能位为0,位[1]-[31]将存储一个未定义值。
解压缩单元260用于通过由控制单元223控制来对保存在堆栈存储器231中的数据进行解压缩,并且将解压缩数据恢复到保证寄存器225a。
图19表示解压缩单元260的内部结构。
解压缩单元260包括解压缩控制单元261和数据解压缩单元262。
解压缩控制单元261从堆栈存储器231中读取32位的数据,输出到CSR250。如果数据的使能位为1,保存在堆栈存储器231中的保存数据在解压缩单元262被解压缩且然后保存在保证寄存器225a中。如果数据的使能位为0,保存在堆栈存储器231中的数据就被存储到保证寄存器225a中。
数据解压缩单元262对使用霍夫曼编码进行编码的保存在堆栈存储器231中的数据执行一个相反的霍夫曼编码转换。
图20是一个数据流程图,在保证寄存器225a和堆栈存储器231之间执行对数据的保存/恢复。
当执行一个正常调用指令时,保证寄存器225a的数据被保存到堆栈存储器231(数据流D101),而当执行一个返回指令时,数据将从堆栈存储器231恢复到保证寄存器225a(数据流D102)。
当执行一个分配有一压缩控制位的调用指令时,在压缩单元240获得保证寄存器225a的数据,然后进行压缩(数据流D103)。如果压缩数据的数据大小大于保存在阈值保存单元244中保存的阈值,则从保证寄存器225a中获得的数据作为存储数据被保存在堆栈存储器231中。如果其数据大小小于阈值,则压缩数据就将作为保存数据而保存在堆栈存储器231中(数据流D104)。在这个操作期间,关于是否执行压缩和有关压缩数据的数据大小的信息,在CSR250中被设置(数据流D105),然后,将保存在CSR250中的数据保存在堆栈存储器231中(数据流D106)。
当一个分配了解压缩控制位的返回指令完成时,数据从堆栈存储器231恢复到CSR250(数据流D106),有关存储在堆栈存储器中的数据是否被压缩的消息,以及保存数据的数据大小从恢复到CSR250的数据获得,再进入到解压缩单元260(数据流D107)。具有由CSR250的数据表示数据大小的保存数据,在解压缩单元260中从堆栈存储器231获得(数据流D108)。这里,如果保存数据是压缩数据,则其数据大小是保存在CSR250的数据区中的,如果它没有被压缩,则数据大小为256位。如果保存数据是压缩数据,则它将在由解压缩单元260解压缩为256位之后被恢复到保证寄存器225a;而如果它不是压缩数据,则具有256位数据大小的所保存数据将像现在这样被恢复到保证寄存器225a(数据流D109)。
注意,在这个实施例中,霍夫曼编码方法被用作转换保存数据的算法。然而,其它压缩算法,比如扫描宽度方法也可以用于转换保存数据,只要该方法是可逆编码方法。
<操作>
(程序转换装置)
在下文中,将对由程序转换装置100执行的具有上述结构的操作进行详述。
图21表示程序转换装置100的操作流程图。
首先,源文件获取单元110获得源文件组10,并且译码单元131将源文件组10转换成为一个机器语言形式的中间代码组(S1001)。判断单元120从上述源文件组10创建一个选择替换表123a(S1002)。
接下来,链接单元133通过链接中间代码组中的中间代码,来产生可执行机器语言代码,并且判断单元120从中间代码组中选择一个压缩-目标函数(S1004)。最后,压缩/解压缩位附加单元134将一个压缩控制位添加到每个压缩-目标函数的调用指令中,它包括在上述机器语言代码中,并且将一个解压缩控制位添加到每个压缩-目标函数的返回指令,并且将它们输出到存储单元140(S1005)。
执行文件20通过上述的操作产生。
然后,将参考相应附图详述操作(S1002)。这个操作由程序转换装置100来执行,并且用于创建一个选择替换表。
图22是表示如何创建一个选择替换表123a的流程图。
首先,堆栈访问检测单元113,将源文件组10中描述的函数内的未搜索的任何函数设置成为要查找的目标函数,并开始进行查找(S1101)。堆栈访问检测单元113,判断在将要搜索的函数中,是否存在对地址高位于目标函数过程开始的堆栈指针表示的地址的堆栈存储器的访问(S1102)。当判断在目标函数内有访问(S1102:是),堆栈访问检测单元113就将目标函数的函数估算值设置为0,并且将目标函数的函数名123b和函数估算值123c写入选择替换表123a(S1103)。
另一方面,当堆栈访问检测单元113判断在将被查找的目标函数内没有访问(S1102:否),用户指定-函数抽取单元122就判断编译指示#STACK_COMPRESS是否被描述在目标-函数内(S1104)。如果编译指示#STACK_COMPRESS是描述在目标函数内(S1104:是),则用户-指定函数抽取单元122就将目标函数的函数估算值设置为2,并且在选择替换表123a中写入目标函数的函数名123b和函数估算值123c(S1105)。如果编译指示#STACK_COMPRESS没有描述在目标函数内(S1104:否),则用户-指定函数抽取单元122就将目标函数的函数估算值设置为1,并且在选择替换表123a中写入目标函数的函数名123b和函数估算值123c(S1106)。
在完成上述操作、并且目标函数结果已经写入选择替换表123a中后,如果还有其它未搜索函数(S1107:是),则堆栈访问检测单元113就会重复上述用于未搜索函数的操作,就像新目标函数一样。如果没有其它未搜索函数(S1107:否),则选择替换表的生成就到此结束。
然后,将参考相应附图详述操作(S1104)。这个操作通过装置100执行,并且用于选择一个压缩-目标函数。
图23是表示如何选择一个压缩-目标函数的流程图。
首先,函数树信息生成单元124利用保存在中间代码保存单元132中的中间代码组,创建一个函数树信息表125a(S1201)。
接着,函数选择单元126将选择替换表123a中的函数寄存器内的未搜索的任意函数设置成为要查找的目标函数,并开始进行查找(S1202)。函数选择单元126判断目标函数的函数估算值123c是否被设置为2(S1203)。如果目标函数的函数估算值123c被设置为2(S1203:是),则函数选择单元126就将被压缩-目标函数选择作为目标函数(S1208)。反之,如果目标函数的函数估算值123c没有被设置为2(S1203:否),则函数选择126判断在函数树信息表125a内是否有与目标函数在其中是最高位函数的分支有关的信息(S1204)。
如果没有与一个目标函数在其中是最高位函数的分支有关的信息(S1204:否),则函数选择单元126就确定不将目标函数选择作为压缩-目标函数。
如果有与一个目标函数在其中是最高位函数的分支有关的信息(S1204:是),则函数选择单元126就将分支信息设置为将被查找的目标分支信息(S1205),并且判断目标分支信息的树估算值125c是否设置为0(S1206)。
如果目标分支信息的树估算值125c设置为0(S1206:是),则函数选择单元126就确定不将目标函数选择作为压缩-目标函数。
如果目标分支信息的树估算值125c不是0(S1206:否),则函数选择单元126判断在函数树信息表125a内是否有与目标函数在其中是最高位函数的分支有关的任何未搜索信息(S1207)。如果有任何其它未搜索分支信息(S1207:是),则操作就从S1205开始执行,用于未搜索分支信息。如果没有与目标函数在其中是最高位函数的分支有关的未搜索分支信息(S1207:否),则函数选择单元126就将目标函数选择作为压缩-目标函数,并且将该函数通知给压缩/解压缩位附加单元134(S1208)。
通过上述的操作,完成了关于该目标函数是否应该被选择作为一个压缩-目标函数的确定。然后,如果选择替换表123a具有其他未搜索的函数(S1209:是),则函数选择单元126就会重复对未搜索的函数进行搜索。如果没有任何未搜索的函数(S1209:否),则选择压缩-目标函数的操作结束。
通过上述的操作,程序转换装置100能选择树状结构分支上的最高位函数作为压缩-目标函数,它们不包括任何要求涉及堆栈存储器的使用区域的函数和由用户指定的函数。程序转换装置100进一步能产生一个执行文件20,其中一个压缩控制位被添加到每个用于调用如上面已确定的压缩-目标函数的调用指令上,并且其中一个解压缩控制位被添加到每个用于结束如上面已确定的压缩-目标函数的返回指令上。
(信息处理装置)
在下文中,描述了具有上述结构的信息处理装置200的操作。
信息处理装置200通过采用流水线处理来完成多个机器语言指令的并行执行,通过该流水线处理,一个机器语言指令被分成多个段。然而,本说明使用一个例子,其中一个机器语言指令相应于一个段,以便于理解本发明。
图24是表示通过信息处理装置200执行操作的流程图;
首先,IF221从由PC226表示的指令存储器210上的地址中,获取一条机器语言指令(S2001)。接着,DEC222确定该机器语言指令的类别(S2002)。
如果DEC222确定该机器语言指令是一条调用指令(S2002:调用),则调用一个函数并且一个保证寄存器225a因此而被保存(S2003)。
如果DEC222确定该机器语言指令是一条返回指令(S2002:RET),则结束该函数并且该保证寄存器225因此而被恢复(S2004)。
如果DEC222确定该机器语言指令是除调用指令和返回指令之外的其他类别(S2002:ELSE),那么该执行单元224执行该机器语言指令(S2005)。
通过上述的操作,对一条机器语言指令的处理被完成。
其次,参考相应的附图详述操作S2003,在该操作中信息处理装置200调用一个函数,并且因此保存一个保证寄存器225a。
图25表示的是调用函数及其后保存该保证寄存器225a的操作流程图。
首先,DEC222判断是否一个压缩控制位被添加到一个调用指令上(S2101)。如果DEC222判定没有压缩控制位被添加到该调用指令(S2101:否),那么控制单元223就将PC226的数据存储到堆栈存储器231(S2102)。然后,控制单元223将保证寄存器之中具有256位的数据存储到该堆栈存储器231(S2103)。
另一方面,如果DEC222断定一个压缩控制位被添加到该调用指令(S2101:是),那么控制单元223就将PC226的数据存储到堆栈存储器231(S2104)。然后,压缩控制单元242获取保存在保证寄存器225a中的数据。数据压缩单元241利用霍夫曼编码对所获取的数据进行编码(S2105),并且压缩比较单元243判断霍夫曼编码的数据的数据大小是否小于阈值(S2106)。如果压缩比较单元243判定该霍夫曼编码的数据的数据大小小于该阈值(S2106:是),那么压缩控制单元242就将该霍夫曼编码的数据存储到该堆栈存储器231(S2107)。然后,该压缩控制单元242就将CSR250的使能位置为1,并且在数据字段设置为霍夫曼编码的数据的数据大小(S2108)。
当压缩比较单元243断定该霍夫曼编码的数据大小于阈值时(S2106:否),压缩控制单元242就按原样将从保证寄存器225a获取的具有256位的数据存储到堆栈存储器231(S2109)。压缩控制单元242然后将CSR250的使能位置为0(S2110)。
在设置CSR250后,压缩控制单元242将保存在CSR250中的数据存储到堆栈存储器231(S2111)。
最后,控制单元223将该处理分支到调用函数(S2112)。
其次,参考相应的附图详述操作S2004,其中信息处理装置200结束一个函数,并且从而恢复保证寄存器225a。
图26是表示结束函数及其后保证寄存器225a的恢复的操作流程图。
首先,DEC222判断是否一个解压缩控制位被添加到一个返回指令上(S2201)。如果DEC222断定返回指令没有被分配一个解压缩控制位(S2201:否),那么控制单元223就将保存的具有256位的数据读出到保证寄存器225a(S2202)。
另一方面,如果DEC222判定返回指令被分配了一个解压缩位(S2201:是),那么解压缩控制单元223就将堆栈存储器231的数据读出到CSR250(S2203)。然后,解压缩控制单元261判断读取的CSR250的使能位是否为1(S2204)。如果解压缩控制单元261判定读取的CSR250的使能位不为1(S2204:否),那么解压缩控制单元261就按原样从堆栈存储器231将保存的具有256位的数据读出到保证寄存器225a(S2202)。
如果解压缩控制单元261断定读取的CSR250的使能位为1(S2204:是),那么解压缩控制单元261就从堆栈存储器231读取数据,该数据具有由CSR250的数据字段表示的数据大小(S2205)。然后,数据解压缩单元262在所读取数据上执行霍夫曼编码的反向转换,以便对数据(S2206)进行解压缩,且解压缩控制单元261将解压缩数据恢复为256位(S2207)。
通过该上述的操作,该数据被恢复到该保证寄存器225a中。然后,控制单元223从该堆栈存储器231中将数据读出到PC226(S2208),最后将该处理分支到由PC226表示的调用函数(S2209)。
根据上述的操作,当函数被调用时,该信息处理装置200能够对那些被要求从保证寄存器保存的数据进行压缩,并因此减少保存在堆栈存储器231的数据的数量。此外,当函数被结束时,该信息处理装置200能够对那些被要求从堆栈存储器231恢复的数据进行解压缩,并由此在函数调用前后确保保存在保证寄存器225a中的数据。
<总结>
当函数被调用时,本发明能够对那些被要求保存到堆栈存储器的数据进行压缩,因此提高堆栈存储器的使用效率。因此,堆栈存储器溢出的可能性将更小,从而实现存储器-保存。
此外,根据本发明的实施例,实现了选择性的数据压缩,因此,当函数被调用时,所选取的函数相关数据被要求在保存到堆栈存储器之前进行压缩。该上述所选取的函数要么是那些保存在堆栈存储器很长时间的函数,例如具有在树状结构中每一个分支的最高位函数,要么是由用户明确指定的函数。据此,抑制了由压缩操作所引起的循环次数增加,因而堆栈存储器的使用率将被提高。
在此应注意,在本实施例中,那些具有在树状结构中每一个分支的最高位函数被选择作为压缩-目标函数。然而,这仅是根据函数的分级结构将被保存在堆栈存储器很长时间的函数选择作为压缩-目标函数的一个例子,当然,本发明并不局限于这个实施例。
例如,它也可能安排用来将树状结构中每一个分支的函数最前面的M个函数选择作为压缩-目标函数(M是一个自然数)。作为选择,所有高于第N个的最低位函数的函数可能被选择作为压缩-目标函数(N是一个自然数)。或者,那些被包括在具有预定编号的分支中的函数可以被选择。
另外,根据本发明的实施例,如果在涉及树状结构中的任一分支中存在有涉及堆栈存储器的一个堆栈访问函数,则具体的分支中包括的函数不会被选为压缩-目标函数。据此,当这种堆栈访问函数涉及该堆栈存储器时,它将不会发生要被涉及的数据已被压缩或者涉及的地址并不是想要的地址。
<其他修改实例>
到目前为止,已经根据上述实施例对本发明作了描述。然而,当然本发明并不局限于上述的实施例,并且包括下列例子,例如:
(1)本发明可以是如上所示的方法。另外,该方法可以是一个由计算机执行的计算机程序,或者可以是由计算机程序组成的数字信号。
此外,本发明可以是一个计算机可读的记录媒体,其上记录有上述计算机程序或者数字信号,例如软盘、硬盘、CD-ROM、磁光盘、DVD、DVD-ROM、DVD-RAM,BD(基本链路单元射线磁盘)及半导体存储器。此外本发明可以是记录在这些记录媒体任何一种上面的计算机程序或者该数字信号。
此外,本发明可以是这样构成的,以便上述计算机程序或者该数字信号通过一个网络传输,该网络可由电信线路、无线/有线通信线路以及国际互联网络等所代表。
此外,本发明可以是包括微处理器以及存储器在内的一个计算机系统、其中存储器上记录上述的计算机程序,而微处理器按照计算机程序运作。
更进一步来讲,上述的程序或者数字信号可以通过任何所述记录媒体或上述网络等等传递,由另一个独立的计算机系统执行。
(2)描述的实施例装有专用硬件的结构,以便利用霍夫曼编码对数据进行编码的。然而,本发明也可能构造为处理器利用霍夫曼编码对保存在寄存器中的数据进行编码。
(3)也可能为实施例和修改例子的任一的组合。
虽然已经参考附图通过举例对本发明充分进行了描述,但是应当注意各种改变和修改对本领域的普通技术人员来说将是显而易见。因此,除非另外的这种改变和修改脱离了本发明的范围,否则它们应该被理解为是包括在其中的。

Claims (16)

1.一种信息处理装置,包括一个具有至少一个寄存器并且根据一个机器语言程序执行处理的处理器,该寄存器保存用于计算的数据,该信息处理装置包括:
压缩判断单元,用于响应于预定函数的调用,来判断该机器语言程序是否具有指示保存在寄存器中的数据应该被压缩然后保存到堆栈存储器的信息;和
保存单元,用于当压缩判断单元的判断为肯定时,响应于预定函数的调用,对保存在寄存器中的数据进行压缩然后保存到堆栈存储器。
2.如权利要求1所述的信息处理装置,进一步包括:
解压缩判断单元,用于响应于预定函数调用的终止,来判断是否存在表示保存在堆栈存储器中的数据应该被解压缩然后恢复到寄存器的解压缩信息;和
恢复单元,用于当解压缩判断单元的判断为肯定时,响应于预定函数调用的终止,对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
3.如权利要求2所述的信息处理装置,
其中解压缩判断单元判断该机器语言程序是否具有解压缩信息。
4.如权利要求3所述的信息处理装置,
其中当压缩判断单元的判断为肯定时,在调用预定函数的调用指令执行的时候,保存单元对保存在寄存器的数据进行压缩然后保存到堆栈存储器,
并且当解压缩判断单元的判断为肯定时,在终止预定函数调用的返回指令执行的时候,恢复单元对保存在堆栈存储器的数据进行解压缩然后恢复到寄存器。
5.如权利要求3所述的信息处理装置,
其中当压缩判断单元的判断为肯定时,在预定函数的处理开始的时候,保存单元对保存在寄存器中的数据进行压缩然后保存到堆栈存储器,
并且当解压缩判断单元的判断为肯定时,在用于预定函数的过程结束的时候,恢复单元对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
6.如权利要求2所述的信息处理装置,
其中保存单元,在对保存在寄存器中的数据进行压缩并且保存到堆栈存储器的时候,将解压缩信息与由压缩保存于寄存器中的数据产生的压缩数据相关联,并且将解压缩信息和压缩数据关联地保存到堆栈存储器,
该解压缩判断单元判断堆栈存储器是否具有与保存在堆栈存储器的数据相关的解压缩信息,并且
该恢复单元,当解压缩判断单元的判断为肯定时,响应于预定函数调用的终止,对与解压缩信息相关的数据进行解压缩然后恢复到寄存器。
7.如权利要求6所述的信息处理装置,其中保存单元包括:
数据转换子单元,用于根据一个预定算法将保存在寄存器的第一数据转换成为第二数据;
比较子单元,用于将第二数据的数据大小和一个表示压缩效率的阈值相比较;和
选择性的保存子单元,用于当第二数据的数据大小小于该阈值时将第二数据保存到堆栈存储器,并且当第二数据的数据大小大于该阈值时,将第一数据保存到堆栈存储器。
8.如权利要求6所述的信息处理装置,
其中当压缩判断单元的判断为肯定时,在用于调用预定函数的调用指令执行的时候,保存单元对保存在寄存器中的数据进行压缩然后保存到堆栈存储器,
并且当解压缩判断单元的判断为肯定时,在终止预定函数调用的返回指令执行的时候,恢复单元对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
9.如权利要求6所述的信息处理装置,
其中当压缩判断单元的判断为肯定时,在预定函数的过程开始的时候,保存单元对保存在寄存器中的数据进行压缩然后保存到堆栈存储器,
并且当解压缩判断单元的判断为肯定时,在预定函数的过程结束的时候,恢复单元对保存在堆栈存储器中的数据进行解压缩然后恢复到寄存器。
10.一种信息处理装置所使用的信息处理方法,其中该信息处理装置包括一个具有至少一个寄存器并且根据机器语言程序执行处理的处理器,该寄存器保存用于计算的数据,该信息处理方法包括:
压缩判断步骤,响应于一个预定函数的调用,来判断该机器语言程序是否具有指示保存在寄存器中的数据应该被压缩然后保存到堆栈存储器的信息;和
保存步骤,当在压缩判断步骤的判断为肯定时,响应于预定函数的调用,对保存在寄存器中的数据进行压缩然后保存到堆栈存储器。
11.一种程序转换装置包括:
获取单元,用于获取包括一个或多个函数的输入程序;
判断单元,根据输入程序判断,响应于预定函数调用,保存在处理器的至少一个寄存器中的数据是应该被压缩然后被保存到堆栈存储器,还是应该不被压缩就保存到堆栈存储器;和
转换单元,用于当判断单元已断定数据应该被压缩然后保存时,将输入程序转换成包括指示信息的输出程序,该指示信息指示处理器:保存在寄存器中的数据应该被压缩然后保存到堆栈存储器。
12.如权利要求11所述的程序转换装置,其中判断单元包括:
检测子单元,用于检测输入程序中的堆栈访问函数,该堆栈访问函数涉及已保存有寄存器中数据的堆栈存储器,
并且判断单元响应于堆栈访问函数和包含于输入程序的函数分级结构中的比该堆栈访问函数位于更高位的函数中任何一个的调用,来断定保存在寄存器中的数据应该不被压缩地保存到堆栈存储器。
13.如权利要求11所述的程序转换装置,其中判断单元包括:
预指定检测子单元,用于检测输入程序中的预指定函数,预指定函数是预先已加入了指示保存在寄存器的数据应该被压缩然后保存到堆栈存储器的信息的函数,
并且判断单元,响应于预指定函数的调用,来断定保存在寄存器的数据应该被压缩然后保存到堆栈存储器。
14.如权利要求11所述的程序转换装置,其中判断单元包括:
嵌套信息产生子单元,用于产生显示包含于输入程序的函数分级结构的嵌套信息,
并且当预定函数其中包括子程序时,根据嵌套信息,该判断单元响应于该预指定函数的调用,判断保存在寄存器的数据是应该被压缩然后保存到堆栈存储器,还是应该不被压缩地保存到堆栈存储器。
15.如权利要求11所述的程序转换装置,其中转换单元包括:
压缩信息附加子单元,用于当该预定函数被调用时将信息附加到用于调用预定函数的调用指令中,该信息指示处理器:保存于寄存器中的数据应该被压缩然后保存到堆栈存储器;和
解压缩信息附加子单元,用于当预定函数的调用终止时将信息附加到用于结束预定函数的调用的返回指令中,该信息指示处理器:保存于堆栈存储器中的数据应该被解压缩然后恢复到寄存器。
16.如权利要求11所述的程序转换装置,其中转换单元包括:
压缩信息附加子单元,用于当该预定函数的过程开始时将信息附加到该预定函数中,该信息指示处理器:保存于寄存器中的数据应该被压缩然后保存到堆栈存储器;和
解压缩信息附加子单元,用于当该预定函数的过程结束时将信息附加到该预定函数中,该信息指示处理器:保存于堆栈存储器中的数据应该被解压缩然后恢复到寄存器。
CNB031649556A 2002-07-24 2003-07-24 一种信息处理装置所使用的信息处理方法和程序转换装置 Expired - Fee Related CN1260648C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP215394/02 2002-07-24
JP215394/2002 2002-07-24
JP2002215394A JP2004062220A (ja) 2002-07-24 2002-07-24 情報処理装置、情報処理方法、およびプログラム変換装置

Publications (2)

Publication Number Publication Date
CN1497437A true CN1497437A (zh) 2004-05-19
CN1260648C CN1260648C (zh) 2006-06-21

Family

ID=31937437

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB031649556A Expired - Fee Related CN1260648C (zh) 2002-07-24 2003-07-24 一种信息处理装置所使用的信息处理方法和程序转换装置

Country Status (3)

Country Link
US (1) US7424600B2 (zh)
JP (1) JP2004062220A (zh)
CN (1) CN1260648C (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763244A (zh) * 2010-01-21 2010-06-30 北京龙芯中科技术服务中心有限公司 存储器与寄存器之间的数据传输装置和方法
CN109196488A (zh) * 2016-06-24 2019-01-11 高通股份有限公司 用于基于处理器的系统中的压缩存储器行的预提取机制
CN109284132A (zh) * 2014-01-31 2019-01-29 美普思技术有限责任公司 改进的返回堆栈缓存
CN109871341A (zh) * 2014-01-17 2019-06-11 美普思技术有限责任公司 用于堆栈指针值预测的方法和装置
CN118034705A (zh) * 2024-03-19 2024-05-14 北京壁仞科技开发有限公司 编译方法、编译系统、电子设备、介质、程序产品

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4578119B2 (ja) * 2004-02-23 2010-11-10 大日本印刷株式会社 情報処理装置および情報処理装置におけるセキュリティ確保方法
KR101352512B1 (ko) 2007-01-15 2014-01-17 삼성전자주식회사 효율적인 메모리 사용을 위한 스택 관리 장치 및 방법
JP5673172B2 (ja) * 2011-02-09 2015-02-18 ソニー株式会社 電子機器、電子機器における立体画像情報送信方法、および電子機器における立体画像情報受信方法
US8612402B1 (en) * 2012-10-26 2013-12-17 Stec, Inc. Systems and methods for managing key-value stores
KR101552490B1 (ko) * 2014-06-09 2015-09-21 (주)유비쿼스 예비 포트에서 예비 간선 라인의 수신 광 감도 측정 가능한 포트 이중화 광 회선 종단장치(olt), 수동형 광 네트워크(pon) 시스템, 및 이를 이용한 예비 간선 라인의 안정성 판단 방법
US10191682B2 (en) * 2016-09-08 2019-01-29 Qualcomm Incorporated Providing efficient lossless compression for small data blocks in processor-based systems

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3987412A (en) * 1975-01-27 1976-10-19 International Business Machines Corporation Method and apparatus for image data compression utilizing boundary following of the exterior and interior borders of objects
JPH0337723A (ja) * 1989-07-05 1991-02-19 Hitachi Ltd 情報処理装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763244A (zh) * 2010-01-21 2010-06-30 北京龙芯中科技术服务中心有限公司 存储器与寄存器之间的数据传输装置和方法
CN109871341A (zh) * 2014-01-17 2019-06-11 美普思技术有限责任公司 用于堆栈指针值预测的方法和装置
CN109871341B (zh) * 2014-01-17 2023-10-27 美普思技术有限责任公司 用于堆栈指针值预测的方法和装置
CN109284132A (zh) * 2014-01-31 2019-01-29 美普思技术有限责任公司 改进的返回堆栈缓存
CN109284132B (zh) * 2014-01-31 2023-06-02 美普思技术有限责任公司 改进的返回堆栈缓存
CN109196488A (zh) * 2016-06-24 2019-01-11 高通股份有限公司 用于基于处理器的系统中的压缩存储器行的预提取机制
CN118034705A (zh) * 2024-03-19 2024-05-14 北京壁仞科技开发有限公司 编译方法、编译系统、电子设备、介质、程序产品

Also Published As

Publication number Publication date
CN1260648C (zh) 2006-06-21
JP2004062220A (ja) 2004-02-26
US20050102491A1 (en) 2005-05-12
US7424600B2 (en) 2008-09-09

Similar Documents

Publication Publication Date Title
CN1287257C (zh) 用于算术表达式优化的方法和装置
CN1153129C (zh) 用于处理器定制操作的设备
CN1173580C (zh) 图象解码方法
CN1101019C (zh) 数据序列产生方法及设备、转换方法及计算机
CN1175579C (zh) 编码器
CN1168216C (zh) 文档管理设备,数据压缩方法和数据解压缩方法
CN1260648C (zh) 一种信息处理装置所使用的信息处理方法和程序转换装置
CN1162788C (zh) 可换存储媒体和控制方法及计算机系统
CN1517869A (zh) 处理器、运算处理方法和优先度决定方法
CN1612614A (zh) 帧内预测编码方法
CN1802632A (zh) 用于在程序代码转换期间执行解释器优化的方法和装置
CN1672133A (zh) 优化的代码生成
CN1276359C (zh) 用于检查和操作数据的存储器引擎
CN1685369A (zh) 视频编码的低复杂性和统一标准的变换
CN101069181A (zh) 存储设备和记录介质
CN1900959A (zh) 设计制造的支援装置、支援程序和支援方法
CN1848097A (zh) 存储器地址生成装置以及具有它的处理器、存储器地址生成方法
CN101065725A (zh) 命令供给装置
CN1021004C (zh) 在剩余数系统中用于编码和译码数据的方法和装置
CN1649274A (zh) 可变长度解码装置和可变长度解码方法以及再现系统
CN1240225C (zh) 图像编码装置以及图像编码方法
CN1279435C (zh) 数字信号处理器
CN1862485A (zh) 数字信号处理器
CN101031884A (zh) 处理器
CN1734415A (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
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20151118

Address after: Kanagawa

Patentee after: Co., Ltd. Suo Si future

Address before: Japan Osaka kamato City

Patentee before: Matsushita Electric Industrial Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060621

Termination date: 20160724