掌桥专利:专业的专利平台
掌桥专利
首页

一种优化软件机器码空间的编译器

文献发布时间:2023-06-19 11:29:13


一种优化软件机器码空间的编译器

技术领域

本发明属于计算机领域、编译器设计、处理器设计领域,具体涉及一种优化软件机器码空间的编译器。

背景技术

多条件分支语句在C语言中就是SWITCH/CASE语句,目前C编译器处理C语言SWITCH/CASE语句时通常使用两种方法,它们是:列表驱动法和逐项查找法。列表驱动法是在程序存贮器中建立常数数组,该数组是所有CASE常数项所对应的跳转矢量的集合,所以该数组被称为CASE跳转矢量表, 某个CASE常数项对应的跳转矢量在该表格的位置等于该CASE常数项与最小CASE常数项的差值,然后使用SWITCH的表达式的值减去最小CASE常数项的差值去索引所述的CASE跳转矢量表,从而得到跳转的目标,这种方法处理速度很快,也是C编译器优先使用的方法;逐项查找法是使用SWITCH的表达式的值和CASE常数项逐个比较,如果有相等,则跳转到该CASE 常数项所对应的地址,也就是说C编译器使用if/else的方法从上往下逐个比较,从而找到跳转的目标,这就造成了越靠后的case项查找的时间就越长,所以这种方法处理速度慢。

列表驱动法的缺点在于 CASE跳转矢量表的规模。等于CASE常数项的最大值与最小值的差值+1。当遇到CASE常数项较为离散时,会造成矢量表空间浪费。

发明内容

本发明提供一种优化软件机器码空间的编译器,能够编译产生简洁高效的机器码。包括:

一个代码提取器,根据语法模式对用户代码提取、扫描,将客户代码转换为中间表达形式;

一个语法解析器,将所述转化而来的中间表达形式的代码块进行解释,对其中的形式进行分析,得出其适用的编译策略和优化的选择作为备选;

一个代码集成器和封装器,将优化后的中间表达形式的代码进行封装编译,成为处理器硬件可以执行的机器码。

由所述语法解析器分析源代码的条件数目和跳转后执行程序条数,由所述代码集成器将所有条件和跳转地址汇集为一张查找表,查找表本身的数值代表偏移地址,记载了跳转地址与程序指针地址之间的偏移信息;所述集成和封装器,其特征在于,集成器将条件和跳转地址汇集为查找表的同时,优化改写了索引查找的源信息;而封装器根据所做的优化改写,在全局编译代码中进行数值替换或功能嵌入;所述的功能嵌入,其特征在于,根据优化改写的形式,生成新的功能函数,嵌入到代码当中,将源索引信息转换为优化后的索引信息。

附图说明

图1为本发明一种优化软件机器码空间的编译器的工作流程图;

附图标记说明

IR 编译器内部的中间表达形式,不同于输入的高级语言指令,也不同于输出的机器码,是专门为处理编译信息而做的再表达代码,包括指令标识和各种编译过程中的信息

G 每个IR中所提取的编译信息

G’ 采用了编译优化策略后,原编译信息发生改变,产生的新编译结果信息

Gi 集成后的全局编译信息。

具体实施方式

多条件分支语句在C语言中就是SWITCH/CASE语句,由语法头、输入条件变量、条件执行语句、语法尾构成。

图1为本发明一种优化软件机器码空间的编译器的工作流程图。首先,代码提取器,根据语法模式对用户代码提取、扫描,将客户代码转换为中间表达形式IR。当代码提取器遇到SWITCH的语法后,则将编程所列条件和条件后的执行语句转化为一个内部语法块IR_f(x),该语法块带有输入条件变量、上述源编程信息,还有本语法块的粗略分析,如粗略的预估占用指令空间信息。每一个条件分支形成一个中间表达后的内部语法块。

接着,解析器将所述转化而来的中间表达形式的代码块进行解释,对其中的形式进行分析,得出其适用的编译策略和优化的选择作为备选。解析器统计出条件分支有关的所有内部语法块数目。解析器分析所有内部语法块的占用指令空间分布的情况。上述粗略分析构成本次编译信息G。根据所有相关的内部语法块数目,可以选择对输入条件变量的优化编码策略,比如4、8、16位的编码位宽。根据所有相关的内部语法块占用指令空间分布的情况,可以选择对跳转指令和方式的优化编译策略,比如指针跳转、立即数或寄存器跳转、内存跳转等等。

解析器从可选的编译策略中应用了优化策略后,每个内部语法块IR_f(x)的编译信息G被更新改写为G’,然后被输入给代码集成器。集成器根据改写后的编译信息G’生成查找表和查找模式。例如,在一个实施例中,解析器发现条件变量的编码可以被优化为2个较为集中的索引集合A和B,将原先的条件索引经过优化编码后,新的索引更为集中的布置在这两个集合中;于是集成器对两个集合各自生成一套查找表,并生成几句简单的转换指令和跳转指令,构成一个源用户代码不具有的功能函数,完成对新条件输入变量范围的判断,提取或跳转不同集合的查找表,从而获得真正的条件分支执行代码或入口地址。

在一个实施例中,在一个索引集合中集中分布了若干条件,集成器基于列表驱动法和所述新的索引编码生成查找表数据。在一个实施例中,编译后的指令为,首先根据输入条件变量得到偏移地址,偏移地址和当前的程序指针相加得到新的地址,该新地址指向查找表中输入条件变量值所对应的查找数据的位置,程序以该新地址读取的数据寄存在处理器本地一般寄存器中,然后再对该数据与程序指针或其他特殊寄存器的值进行简单换算,得到对应输入条件的执行代码地址。

集成器生成了查找表后,再全局扫描所生成的代码,根据G’中的记录,找到所有相关输入条件变量和查找表的汇编信息,并决定所采取的优化改写方式。在一个实施例中,对条件的编码很简单,可以原封不动,或直接全局替换为新的编码;在另一个实施例中,稍微复杂的编码可以获得更小的总体编码空间占用,那么就将该编码功能函数嵌入在编码结果中。

然后集成器将这个处理后的中间编码结果交给代码提取器进行代码设计规则检查。如果G’中带有需要继续循环优化的指示信息,或者优化策略结果不满足优化约束,或者产生了不可收敛的编译错误,则由提取器和解析器重新进行,直到达到所有规则都同时满足的结果。

最后封装器将全局编译信息Gi,集成查找表和IR_f的集成结果,进行转化编译,根据所对应的硬件系统信息,封装成为处理器可以直接执行的机器码。

相关技术
  • 一种优化软件机器码空间的编译器
  • 一种基于等离子体超材料的多功能空间波束编译器
技术分类

06120112942415