一种支持用规则记录变量访问专用寄存器组的处理方法技术

技术编号:2844840 阅读:252 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种支持用规则记录变量访问专用寄存器组的处理方法。该方法包括:1)设计新的类型属性,以标识需要放入专用寄存器组的规则记录变量类型;2)设计规则记录变量的语法树结构,用递归算法实现计算规则记录变量各成员相对位置;3)设计规则记录变量的中间表示;4)生成利用规则记录变量访问专用寄存器组的代码。本发明专利技术的优点:1)保留高级语言开发的优点,又克服了高级语言难以对特殊硬件进行直接控制的缺点,提高编程效率,缩短开发周期;2)向程序员屏蔽了底层硬件的细节,能灵活的处理各种专用寄存器组的使用规范;3)向编译器暴露更多的优化机会,提高系统性能。

【技术实现步骤摘要】

本专利技术涉及对于处理器中具有专用寄存器组的嵌入式软件开发,特别涉及。
技术介绍
高级语言的设计目的是让程序按照人类的思维和语言习惯书写,它是面向程序员的。在嵌入式领域被广泛使用的高级语言是C语言。计算机能够直接识别和执行的不是高级语言,而是用二进制代码表示的机器指令的集合,即机器语言。汇编语言用助记符代替了二进制机器指令,但是仍然是硬件操作的控制信息,所以它和机器语言一样都是面向机器的低级语言。高级语言书写的源程序需要变换成机器语言目标代码才能在计算机上运行,这个变换通常包含两个阶段前一个阶段是将源程序变换成汇编语言的表示,后一个阶段则是将汇编表示变换成机器语言目标代码。后一个阶段是由汇编器、链接器来完成的,与本专利技术无关。前一个阶段是由编译器来完成的,本专利技术的工作也都集中在这个阶段。后文中的编译,如果没有特别指明,表示的就是从高级语言的源程序变换到汇编语言表示的过程。编译器的工作可以分为若干阶段,通常划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成阶段,参见文献1《编译原理和技术(第二版)》,陈意云,1997年。编译器的这些阶段常常又被分为前端和后端。前端只依赖于源语言,通常包括前三个阶段,即词法分析、语法分析和语义分析。前端对源程序进行不同的分析,以解释源程序的结构和基本数据,决定它们的含义。其中,语义分析阶段检查程序的语义正确性,并为以后的代码生成阶段收集类型信息,它使用语法分析阶段确定的语法树来表示表达式和语句的算符和运算对象。编译器在中间代码生成阶段会产生源程序的中间表示。中间表示是一种抽象机的程序,易于产生,而且易于翻译成目标程序。编译器的后端是指编译器中依赖于目标机的部分,一般独立于源语言,而与中间语言相关,包括代码优化、代码生成等。代码优化阶段试图改进代码,产生执行较快的目标代码。代码生成阶段则将中间代码翻译成等价的机器指令序列。随着嵌入式处理器的大量应用,嵌入式软件的开发越来越来越重要。对于一款嵌入式处理器,能够有大量的应用程序支持是将之推向市场的前提。因此,缩短软件开发周期,提高软件开发质量,在整个开发过程中占有至关重要的作用。有些嵌入式处理器对性能有很高的要求,例如骨干网的路由器要求能够支持上G的分组转发速率。这一类嵌入式处理器中使用了特殊的技术来提高处理速度,其中的一种重要机制就是专用寄存器组。这些专用寄存器组用来存放关键数据,以克服访存瓶颈,加快数据存取,不能用于编译器的寄存器分配。在嵌入式软件中如何充分利用这些专用寄存器组是提高性能的关键之一。在目前的嵌入式软件开发中,访问专用寄存器组主要有两种方式汇编语言编程和使用高级语言与汇编语言的混合编程。汇编语言编程的优点是运行效率高,可灵活的对专用寄存器组进行控制,但是缺点是要求程序员直接操作硬件,编程效率不高,难于调试,难于移植。混合编程是一种不得已的选择。高级语言克服了汇编语言的缺点,但是由于高级语言语法的局限,难以直接使用高级语言对嵌入式处理器提供的专用寄存器组进行操作,只能借助于内嵌到高级语言源程序中的汇编语句来操作硬件。如下面的C语言源程序片段所示int a asm(%r18”);//将全局变量a指定放入寄存器%r18中void function(){int b asm(“%r22”);//局部变量b指定放入寄存器%r22中…}混合编程的一个缺点是同样难于移植,如果把某个专有寄存器的编号从%r18修改为%r17,就需要把源程序中所有出现的%r18修改一遍。另一个缺点是功能有限1)是嵌入式汇编只能使用标量来访问专有寄存器,而不能使用结构、数组等规则记录变量,因此能够访问的寄存器个数受标量的最大宽度制约,通常不超过64位(即2个32位的专用寄存器);2)是标量只能作为一个整体来进行使用,当程序员需要对专用寄存器的一位或者某几位进行位域操作时,需要自己处理细节,增大了出错机会,降低了编程效率。因此,人们希望支持高级语言中用规则记录变量访问专用寄存器组的处理方法。
技术实现思路
本专利技术的目的是克服现有技术中的不足,提供一种支持在高级语言中用规则记录变量访问专用寄存器组的处理方法,能够在嵌入式软件开发中直接使用规则记录变量如结构、联合等访问处理器的专用寄存器组。为了达到上述目的,本专利技术采取的技术方案如下支持用规则记录变量访问专用寄存器组的处理方法,通过扩展编译器的功能,对于嵌入式处理器中普遍存在的专用寄存器组,可以在高级语言源程序中将专用寄存器组定义为具有一定属性的规则记录变量来进行访问,具体内容包括如下四点1)设计新的类型属性,以标识需要放入专用寄存器组的规则记录变量类型。2)设计规则记录变量的语法树结构,用递归算法实现计算规则记录变量各成员相对位置;其中变量的名称、类型、成员域、大小和一般的变量语法树结构类似,增加表示步骤1)所述类型属性的特征比特位,并忽视规则记录变量以及其成员域的对齐要求信息;这是因为常规的处理方法要求按照变量类型计算对齐以便编译器为变量分配存储位置,而本方法的规则记录变量会存储到专用寄存器组中,因此不需要计算对齐;规则记录变量的成员域在语法树结构中是用链表表示的,成员是除了联合变量之外的一般变量的语法树结构;所述递归算法在编译器分析到类型属性信息后遍历规则记录变量语法结构中的成员链,不考虑成员的类型和对齐要求计算成员在规则记录变量中的偏移,重置编译器在建立成员语法树结构时计算的位置信息。3)设计规则记录变量的中间表示;该结构包括规则记录变量和它每个成员域对应的专用寄存器编号、大小、起始比特和结束比特;生成规则记录变量的中间表示的算法包括遍历规则记录变量语法树结构的成员链,根据成员的相对位置和大小计算所占用的专用寄存器编号、起始比特和结束比特,同时指示编译器专用寄存器不参与寄存器分配。4)生成利用规则记录变量访问专用寄存器组的代码;所用算法分两模块从专用寄存器组提取规则记录变量成员数据的数据提取模块和将规则记录变量成员数据存储到专用寄存器组的数据存储模块;其中,数据提取模块分3个过程数据对齐、数据无关位屏蔽和专用寄存器读写;数据存储模块的过程为上述3个过程的逆过程;每个过程根据数据大小和位置选择合适的处理器指令或指令组合生成代码;一般的数据对齐通常选择移位指令,数据无关位屏蔽选择按位与或指令,而专用寄存器读写选择数据移动指令;对于单个成员数据占用多个专用寄存器的情况,算法根据寄存器边界将该数据分割多个部分,每个部分位于单个专用寄存器,经过提取或存储代码生成,最后再生成将各部分数据合并的代码。与现有技术相比,本专利技术提出的处理方法具有如下的优点1)保留了高级语言开发的优点,又克服了高级语言难以对特殊硬件进行直接控制的缺点,程序员像使用普通规则记录变量一样使用处理器提供的专用寄存器组,而不需要借助于汇编语句,既可以把专用寄存器组作为一个整体来存取,也可以单独存取单个寄存器的一位、几位或者跨寄存器边界存取,提高了编程效率,缩短了开发周期;2)向程序员屏蔽了底层硬件的细节,能灵活的处理各种专用寄存器组的使用规范,当专用寄存器组使用规范变更的时候,只需要修改编译器中生成中间代码的映射过程,不需要对源程序程序作任何修改;3)向编译器暴露了更多的优化机会,提高了系统性能。具体实施例方式下面结合本文档来自技高网
...

【技术保护点】
一种支持用规则记录变量访问专用寄存器组的处理方法,通过扩展编译器的功能,对于嵌入式处理器中普遍存在的专用寄存器组,在高级语言源程序中将专用寄存器组定义为具有一定属性的规则记录变量来进行访问,具体包括如下四点:1)定义一种类型属性,以 标识需要放入专用寄存器组的规则记录变量类型;2)设计规则记录变量的语法树结构,用递归算法实现计算规则记录变量各成员相对位置;其中变量的名称、类型、成员域、大小和一般的变量语法树结构相同,增加表示步骤1)所述类型属性的特征比特位,并忽 视规则记录变量以及其成员域的对齐要求信息;规则记录变量的成员域在语法树结构中用链表表示,成员是一般变量的语法树结构;3)设计规则记录变量的中间表示;该结构包括规则记录变量和它每个成员域对应的专用寄存器编号、大小、起始比特和结束比特; 生成规则记录变量的中间表示的算法包括:遍历规则记录变量语法树结构的成员链,根据成员的相对位置和大小计算所占用的专用寄存器编号、起始比特和结束比特,同时指示编译器专用寄存器不参与寄存器分配;4)生成利用规则记录变量访问专用寄存器组的代 码;所用算法分两模块;从专用寄存器组提取规则记录变量成员数据的数据提取模块和将规则记录变量成员数据存储到专用寄存器组的数据存储模块;其中,所述数据提取模块分三个过程:数据对齐、数据无关位屏蔽和专用寄存器读写;所述数据存储模块的过程为上述三个过程的逆过程;每个过程根据数据大小和位置选择合适的处理器指令或指令组合生成代码。...

【技术特征摘要】
1.一种支持用规则记录变量访问专用寄存器组的处理方法,通过扩展编译器的功能,对于嵌入式处理器中普遍存在的专用寄存器组,在高级语言源程序中将专用寄存器组定义为具有一定属性的规则记录变量来进行访问,具体包括如下四点1)定义一种类型属性,以标识需要放入专用寄存器组的规则记录变量类型;2)设计规则记录变量的语法树结构,用递归算法实现计算规则记录变量各成员相对位置;其中变量的名称、类型、成员域、大小和一般的变量语法树结构相同,增加表示步骤1)所述类型属性的特征比特位,并忽视规则记录变量以及其成员域的对齐要求信息;规则记录变量的成员域在语法树结构中用链表表示,成员是一般变量的语法树结构;3)设计规则记录变量的中间表示;该结构包括规则记录变量和它每个成员域对应的专用寄存器编号、大小、起始比特和结束比特;生成规则记录变量的中间表示的算法包括遍历规则记录变量语法树结构的成员链,根据成员的相对位置和大小计算所占用的专用寄存器编号、起始比特和结束比特,同时指示编译器专用寄存器不参与寄存器分配;4)生成利用规则记录变量访问专用寄存器组的代码;所用算法分两模块从专用寄存器组提取规则记录变量成员数据的数据提取模块和将规则记录变量成员数据存储到专用寄存器组的数据存储模块;其中,所述数据提取模块分三个过程数据对齐、数据无关位屏蔽和专用寄存器读写;所述数据存储模块的过程为上述三个过程的逆过程;每个过程根据数据大小和位置选择合适的处理器指令或指令组合生成代码。2.根据权利要求1所述的支持用规则记录变量访问专用寄存器组的处理方法,其特征在于,步骤2)中的所述递归算法在编译器分析到类型属性信息后遍历规则记录变量语法结构中的成员链,不考虑成员的类型和对齐要求计算成员在规则记录变量中的偏移,重置编译器在建立成员语法树结构时计算的位置信息。3.一种支持用规则记录变量访问专用寄存器组的处理方法,处理流程如下1)在编译器中增加对一种高级语言的类型属性的支持,对源程序中的规则记录变量进行检验,如果具有该类型属性,则编译器将其识别为需要放到专用寄存器组中;如果没有该类型属性,则编译器按照已知的方法进行处理;2)编译器前端根据类型属性识别出需要放入专用寄存器组的规则记录变量,将为其建立语法树的结构,将语法树结构中对应与该属性的特征比特置1,并且根据变量信息设置语法树结构的对应域;3)编译器的中间代码生成阶段对于特征比特为0的语法树结构,按照普通变量进行处理,而对于步骤2)中生成的语法树结构,将为变量和它每个子域建立对应的中间表示,包括其对应的专用寄存器编号、大小、起始比特和结束比特;4)编译器的后端利用步骤3)中生成的中间表示进行代码生成。4.根据权利要求3所述的支持用规则记录变量访问专用寄存器组的处理方法,其特征在于,所述步骤1)包括如下子步骤步骤1.1增加编译器内部的属性数组的长度,使其能够容纳新添的这种属性;步骤1.2修改属性数组的初始化函数,使得新添的这种属性参数能够被正确初始化,同时编译器在进行词法分析和语法分析时能够识别这种属性。5.根据权利要求3所述的支持用规则记录变量访问专用寄存器组的处理方法,其特征在于,所述步骤2)包括如下子步骤步骤2.1修改编译器内部对语法树结构的定义,增加和该属性对应的特征比特;步骤2.2编译器在进行语法分析时,对于变量定义将建立对应的语法树结构,并且将对应这种属性的标志比特置1;步骤2.3编译器对变量类型进行分析,根据变量的名称、类型、域,填充语法树结构,根据专用寄存器组使用规范递归计算规则记录变量各...

【专利技术属性】
技术研发人员:贾耀仓桂剑霍玮谷晓铭张兆庆冯晓兵
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1