基于向量中断的编译器的优化方法技术

技术编号:12428705 阅读:51 留言:0更新日期:2015-12-03 13:19
本发明专利技术提供了基于向量中断的编译器的优化方法,包括如下步骤:通过预处理指令完成对向量中断函数的定义;编译器在预编译阶段识别向量中断函数,分析中断函数内通用寄存器的使用情况;确定需要保存的通用寄存器,及通用寄存器保存的顺序;确定需要保存的中断现场,特别是特殊寄存器;根据保存寄存器的顺序还原寄存器,还原中断现场;中断服务函数返回。本发明专利技术将中断现场保存在中断服务函数内进行,考虑到中断服务函数使用的通用寄存器的状况,减少了load/store操作,简化了流程,减少了跳转到中断服务函数和从中断服务函数返回涉及到两次跳转操作,从而加快中断函数执行效率,提高处理器中断响应的速度。

【技术实现步骤摘要】

本专利技术创造属于编译器优化领域,尤其是涉及一种。
技术介绍
编译器,是一种电脑程式,它将用某种高级编程语言写成的源代码(源语言),转换成另一种编程语言(目标语言)。编译器从结构体上分为前段、中端和后端,前端主要是词法分析、语法分析阶段,前端生成的赋值树作为输入,提供给中端作为输入,中端包括中间代码生成和优化中间代码,中端生成的中间代码作为输出,提供给后端作为输入,后端将中间代码编译成汇编代码。中断是处理器响应外设请求的最常用的方式。处理器响应中断,本质上是执行中断服务函数,由于处理器响应中断后需要继续进行发生中断时执行的程序,就好像中断没有发生过一样,所以处理器在执行中断服务函数之前需要保存中断现场,在执行中断服务函数之后还原中断现场。向量中断,外部中断控制器通过单独一条连接到处理器的数据总线,在进行中断请求的同时告知处理器中断服务函数的地址。中断响应的一般流程为:(I)进入中断(2)保存中断现场(3)跳转到中断服务函数(4)执行中断服务函数(5)从中断服务函数返回(6)还原中断现场(7)返回中断现场这里“保存中断现场”,保存所有软件可访问的寄存器,涉及大量store操作,“还原中断现场”,还原所有软件可访问的寄存器,涉及大量load操作,这里并没有考虑到中断服务函数中是否用到;“跳转到中断服务函数”和“从中断服务函数返回”涉及两次跳转操作。更关键的是执行中断服务函数时,作为函数,编译器会将其使用的需要保存的寄存器进行保存,这点与“保存中断现场”是重复保存操作,中断响应的一般流程无法充分体现向量中断的优势。
技术实现思路
有鉴于此,本专利技术创造旨在提出一种,以实现精简保存中断现场、还原中断现场过程中涉及的load、store次数同时中断流程上的简化也减少了跳转的次数,从而提高处理器中断响应的速度。为达到上述目的,本专利技术创造的技术方案是这样实现的:,包括如下步骤:(I)通过预处理指令完成对向量中断函数的定义;(2)编译器在预编译阶段识别向量中断函数,分析中断函数内通用寄存器的使用情况;(3)根据处理器种类和编程模型确定需要保存的通用寄存器,及通用寄存器保存的顺序;(4)根据处理器种类、编程模型和中断服务函数的内容确定需要保存的中断现场,特别是特殊寄存器;(5)根据保存寄存器的顺序还原寄存器,还原中断现场;(6)中断服务函数返回,同时也是中断现场返回。进一步的,所述步骤(I)中采用关键字定义向量中断函数,便于编译器前端解析,所述关键字包括#pragma、—attribute—。进一步的,所述步骤(2)中,编译器前端在预编译阶段通过词法分析、句法分析识别向量中断函数,通过预编译得到的信息指导后续的寄存器分配过程;如果中断服务函数使用这些寄存器,在中断现场保存时进行保存,否则不必保存。进一步的,所述步骤(3)中,保存通用寄存器遵循以下原则:(al)参数寄存器,用于函数调用时传递参数使用,根据编译器分析结果确定寄存器是否保存,寄存器保存无顺序要求,寄存器保存和还原顺序对应;(a2)固定寄存器,根据编译器分析结果确定寄存器是否保存,寄存器保存无顺序要求,寄存器保存和还原顺序对应;(a3)可跨越函数的寄存器,根据函数繁杂度和编程模型里面规定的寄存器调用的顺序,编译器选择需要保存和还原的寄存器,寄存器保存和还原的顺序对应。进一步的,所述步骤¢)中编译器将中断服务函数结尾的指令编译为中断返回指令。进一步的,所述的步骤(3)、步骤(4)分析中断服务函数中,对其子函数进行分析,分析的原则如下:(bl)编译器需要分析中断服务函数及其子函数中寄存器使用情况,直到分析的函数不再有子函数为止;(b2)对于中断服务函数及其子函数,均分析参数通用寄存器、固定通用寄存器以及高级语言会影响的特殊寄存器;(b3)只分析中断服务函数中可跨越函数的寄存器的使用情况,中断服务函数的子函数中不用分析可跨越函数的寄存器的使用情况;(b4)在中断函数定义时指定的特殊寄存器需要保存相对于现有技术,本专利技术创造所述的具有以下优势:本专利技术将中断现场保存在中断服务函数内进行,考虑到中断服务函数使用的通用寄存器的状况,减少了 load/store操作,简化了流程,减少了跳转到中断服务函数和从中断服务函数返回涉及到两次跳转操作,从而加快中断函数执行效率,提高处理器中断响应的速度。【附图说明】构成本专利技术创造的一部分的附图用来提供对本专利技术创造的进一步理解,本专利技术创造的示意性实施例及其说明用于解释本专利技术创造,并不构成对本专利技术创造的不当限定。在附图中:图1为示例处理器编程模型寄存器示例;图2为编译器对中断服务函数寄存器分析流程图;图3为分析寄存器使用情况时寄存器初始状态表;图4为分析寄存器使用情况时用到的寄存器状态表;图5为对于示例1,使用传统编译器中断服务程序编译出来的汇编程序示意图;图6为对于示例1,使用优化的编译器中断服务程序编译出来的汇编程序示意图;图7为对于示例2,使用传统编译器中断服务程序编译出来的汇编程序示意图;图8为对于示例2,使用优化的编译器中断服务程序编译出来的汇编程序示意图。【具体实施方式】需要说明的是,在不冲突的情况下,本专利技术创造中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本专利技术创造。如图1所述的处理器编程模型寄存器,设处理器没有硬件保存中断现场的机制,基于中断的编译器优化方法【具体实施方式】如下所示:在执行中断服务函数时,根据编译器对寄存器是否保存的问题,可将寄存器分为三类:(I)所有通用寄存器,编译器根据分析中断服务函数内寄存器分配,可知中断服务函数中使用的通用寄存器以及需要保存的通用寄存器。(2)高级语言会影响的特殊寄存器,编译器根据分析中断服务函数内的指令,可知中断服务函数会影响哪些特殊寄存器,例如条件寄存器(cr),如果存在条件指令,则会影响条件寄存器的值。(3)只有汇编语言操作的特殊寄存器,也就是程序员在中断服务函数中会对这些特殊寄存器通过汇编形式操作。这样,编译器不知道中断服务函数是否会影响这些寄存器,而程序员应该知道中断服务函数是否会影响哪些特殊寄存器,因此,通过预处理指令定义中断服务函数时,应该为此类寄存器提供控制接口,这样寄存器例如状态寄存器(msr),处理器控制寄存器(ccr)。步骤(I):需要通过预处理指令完成对向量中断函数的定义,可以采用如下形式定义向量中断函数:—attribute—((interrupt ( “msr”)))void I SR (void);ISR为向量中断服务函数,并且在中断服务函数中会使用状态寄存器(msr)。步骤(2):编译器在预编译阶段识别向量中断函数,分析中断函数内通用寄存器的使用情况。步骤(3):编译器根据处理器种类和编程模型确定需要当前第1页1 2 本文档来自技高网...

【技术保护点】
基于向量中断的编译器的优化方法,其特征在于:包括如下步骤:(1)通过预处理指令完成对向量中断函数的定义;(2)编译器在预编译阶段识别向量中断函数,分析中断函数内通用寄存器的使用情况;(3)根据处理器种类和编程模型确定需要保存的通用寄存器,及通用寄存器保存的顺序;(4)根据处理器种类、编程模型和中断服务函数的内容确定需要保存的中断现场,特别是特殊寄存器;(5)根据保存寄存器的顺序还原寄存器,还原中断现场;(6)中断服务函数返回,同时也是中断现场返回。

【技术特征摘要】

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

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

1