一种基于C*core处理器的优化编译方法及编译器技术

技术编号:8105595 阅读:200 留言:0更新日期:2012-12-21 04:11
本发明专利技术提供一种基于C*core处理器的优化编译方法及与其相匹配的编译器,包括对源程序代码进行预处理,并对与处理后的源程序代码进行词法和语法的分析,按照预先确定的规则确定对前端传递过来的立即数采取怎样的处理方法。并根据这种方法尽量的产生和存储器操作不相关的汇编指令。由于采用上述技术方案,优化的编译器编译出来的汇编指令要比以前编译器编译出来的汇编指令中含有地址存储的指令的条数少很多,虽然指令条数要比原来多一些,但是这些指令都是单周期指令,并且不需要访问内存,所以这样的执行效率要比以前高很多。

【技术实现步骤摘要】

本专利技术属于计算机
,尤其是ー种涉及基于c*core处理器的一种编译方法和编译器。
技术介绍
编译器是现代计算机系统的重要组成部分之一。简单来讲,一个编译器就是ー个语言翻译程序,它将高级语言编写的源程序等价的翻译成目标机可以识别的低级语言(汇编语言或机器语言)。这是ー个复杂的过程,可以大致把它分成五个阶段词法分析、语法分析、语义检查及中间代码生成、代码优化和目标代码生成。通常把词法分析、语法分析和语义检查及中间代码生成统称为前端,前端主要用 来读入源程序,生成分析树,这ー阶段针对源程序进行工作,与目标机无关;而一旦树生成,编译器后端就可以从其中读出信息,进而转换成目标平台所能识别的汇编程序。从上述编译过程的实现中可以发现,编译器的前端主要对源程序进行处理,跟目标机无关,这使得前端无法进行和处理器相关的代码优化,从而对目标代码的优化工作主要在后端进行。优化应该针对那些最常被执行的代码段,以及那些最常被书写的代码段来进行。优化的目的是为了既要图缩短代码执行的时间,又企图减少生成的代码量,通常是在两者之间折衷。而现在许多编译器在后端的优化中,对ー些地址立即数的处理方式是将其存放到存储器中,在使用的时候再将其取出来。这使得处理器频繁的访问存储器,大大的降低了处理器的性能。C*core处理器是专为高性能和功耗敏感的嵌入式控制应用而设计的,强调降低系统的功耗。改为处理器具有32位的load/store精简指令集(RISC)架构;固定16位指定长度;16个32位通用寄存器文件;存取指令可包括4位偏移量;高效的4级执行流水线;多数指令单周期执行,分支指令访问仅需2个周期;支持字节,半字和字三种类型的存储器访问;支持向量和自动向量的中断;硬件证书乘法器阵列等结构特点。
技术实现思路
本专利技术提供ー种提供一种基于Ocore处理器的优化编译方法及编译器,使得编译后的目标程序能够尽可能的避免访问存储器,充分发挥处理器的性能。为达到上述效果,本专利技术采用的技术方案是一种基于Ocore处理器的优化编译方法,包括对源程序代码进行预处理,并对处理后的源程序代码进行词法和语法的分析,该方法还包括第一步骤判断源程序是否有立即数寻址操作;第二步骤如果有立即数寻址操作,则对地址进行分析,将传递下来的地址进行分类,同时标记对地址进行分类时对地址进行的操作。如果没有立即数寻址操作,则直接生成最終代码;第三步骤将第二步骤所记录的各类地址进行检測,并判断其是否可以表示成非存/取的指令格式;第四步骤对第三步骤中的可以用非存/取的指令格式表示的地址或立即数进行处理,确定其表示方式;第五步骤将第四步骤中的地址或地址立即数利用事先定义好的方式用非存/取的指令格式表示出来;第六步骤利用上述过程中所产生的新的指令格式来产生最終的汇编代码。进ー步的,所述的第二步骤中对地址进行分析和标记是指对地址立即数的操作属性、操作数类型、地址、数据进行分析和标记。进ー步的,所述的判断其是否可以表示成中非存/取的指令格式是指其是否可以用不多于3条指令表示成的地址立即数。进ー步的,一种根据上述编译方法的编译器,包括前端,所述的所述的编译器还包括地址检测単元和地址立即数处理单元,立即数检测单元用于判断地址和特殊的立即数地 址,地址立即数处理单元对地址或特殊立即数进行处理,确定其表示方式。由于采用上述技术方案,优化的编译器编译出来的汇编指令要比以前编译器编译出来的汇编指令中含有地址存储的指令的条数少很多,虽然指令条数要比原来多ー些,但是这些指令都是单周期指令,并且不需要访问内存,所以这样的执行效率要比以前高很多。附图说明图I是现有编译器前端处理流程2是本专利技术编译方法流程3是用原来的编译器和改进的编译器编译后的结果示意4是判断其是否可以表示成中非存/取的指令格式的流程5是对地址立即数进行各种属性的分析和标记的流程图。具体实施例方式如图I所示,现有的编译方法主要对源程序进行处理,读入源程序,生成分析树,进而转换成目标平台所能识别的汇编程序。优化应该针对那些最常被执行的代码段,以及那些最常被书写的代码段来进行。优化的目的是为了既要图缩短代码执行的时间,又企图減少生成的代码量,通常是在两者之间折衷。而现在许多编译器在后端的优化中,对ー些地址立即数的处理方式是将其存放到存储器中,在使用的时候再将其取出来。图2为本专利技术编译方法流程图,由图2可以看出,该编译方法对前端生成的中间代码进行了进ー步处理,按照预先确定的规则确定对前端传递过来的立即数采取怎样的处理方法。首先将对前端处理过的信息进行检测,判断其中是否有寻址操作,同时,还检测ー些特殊的立即数。然后根据尽可能減少存取动作的原则对当前传递过来的信息中含有寻址操作的立即数进行处理,决定该地址立即数的实现方式。最終生成和存储器操作无关的指令。本专利技术是根据32位嵌入式CPU--OCore的处理器架构机器指令特点而生成的一套优化寻址的方法,下面来举例进一歩解释本专利技术其具体的实施方案具体步骤如下I.在通过编译器前端的分析和处理之后,将生成的中间代码通过地址立即数检测单元进行分析。在地址检测单元中本专利技术主要应用函数C*core_addressing_judge (enumMDL—code code, enum machine—modemode,struct MDL insn,HOST—WIDE_INT val,structMDL target, struct MDL source,int subtargets);来进行寻址操作的判断。在此函数中enum MDL_code code是ー个枚举型的变量,它用来传递编译器前端处理过后形成的中间代码的类型,比如SET、AND、XOR等等;enum machine_mode mode 是目标机器处理的数据类型比如 SI (Single Integer),HI (Half Integer)等等;struct MDL insn是ー个由中间变量组成的结构体,它代表形成的中间语言中类似指令的一种结构;WIDE_INT val是ー个整型变量,用来传递中间语言中生成的整型数据(包括地址、数据等); struct MDL target和struct MDL source都是有中间变量组成的结构体,它们分别表示在中间语言中带有数据转移的目的和源头;int subtargets是ー个整形变量,如果它为真的话表示为当前处理信息分配寄存器是安全的。图5为该步骤的流程图,由此图可以看出,在此步中实质上根据Ocore处理器的架构和指令集特点对中间代码中的地址立即数进行各种属性的分析和标记。比如某个地址立即数用来给某个寄存器进行直接的赋值,那么,则将它的操作属性标记为SET ;如果该地址立即数要与其它的地址立即数进行加法操作,则应该将它标记为PLUS的操作属性,再如果,该地址立即数所要寻址的操作数为整型数据,则将它的寻址属性标记为SI (SingleInteger)型。本单元对以上所描述的中间代码种类、目标机器处理数据类型、类指令、地址、数据分类整理记录,并将此步骤的记录结果用于后边的操作输入,判断当前处理是否含有寻址操作,并依据其结果决定继续执行下ー步骤,还是跳转到步骤5 ;2.此步骤的主要工作是将上一歩骤传递下来的地址立即数进行粗本文档来自技高网
...

【技术保护点】
一种基于C*core处理器的优化编译方法,包括对源程序代码进行预处理,并对处理后的源程序代码进行词法和语法的分析,其特征在于:该方法还包括:第一步骤:判断源程序是否有立即数寻址操作;第二步骤:如果有立即数寻址操作,则对地址进行分析,将传递下来的地址进行分类,同时标记对地址进行分类时对地址进行的操作。如果没有立即数寻址操作,则直接生成最终代码;第三步骤:将第二步骤所记录的各类地址进行检测,并判断其是否可以表示成非存/取的指令格式;第四步骤:对第三步骤中的可以用非存/取的指令格式表示的地址或立即数进行处理,确定其表示方式;第五步骤:将第四步骤中的地址或地址立即数利用事先定义好的方式用非存/取的指令格式表示出来;第六步骤:利用上述过程中所产生的新的指令格式来产生最终的汇编代码。

【技术特征摘要】
1.一种基于c*core处理器的优化编译方法,包括对源程序代码进行预处理,并对处理后的源程序代码进行词法和语法的分析,其特征在于该方法还包括 第一步骤判断源程序是否有立即数寻址操作; 第二步骤如果有立即数寻址操作,则对地址进行分析,将传递下来的地址进行分类,同时标记对地址进行分类时对地址进行的操作。如果没有立即数寻址操作,则直接生成最终代码; 第三步骤将第二步骤所记录的各类地址进行检测,并判断其是否可以表示成非存/取的指令格式; 第四步骤对第三步骤中的可以用非存/取的指令格式表示的地址或立即数进行处理,确定其表示方式; 第五步骤将第四步骤中的地址或地址立即数利用事先定义好的方式用非存...

【专利技术属性】
技术研发人员:兰光洋王忠海肖佐楠郑茳
申请(专利权)人:天津国芯科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1