[发明专利]一种生成快速出栈的汇编代码的编译方法及编译器有效
| 申请号: | 201410490577.5 | 申请日: | 2014-09-23 |
| 公开(公告)号: | CN104216754B | 公开(公告)日: | 2017-05-17 |
| 发明(设计)人: | 兰光洋;王忠海;肖佐楠;郑茳 | 申请(专利权)人: | 天津国芯科技有限公司 |
| 主分类号: | G06F9/45 | 分类号: | G06F9/45 |
| 代理公司: | 天津滨海科纬知识产权代理有限公司12211 | 代理人: | 杨慧玲 |
| 地址: | 300457 天津市滨海新区开发*** | 国省代码: | 天津;12 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 生成 快速 汇编 代码 编译 方法 编译器 | ||
技术领域
本发明涉及处理器体系结构和编译器开发技术领域,尤其是涉及一种生成快速出栈的汇编代码的编译方法及编译器。
背景技术
随着处理器技术和现代工艺的进步,处理器的运算速度越来越快,性能越来越强,同时人们对处理器的要求也越来越高。但仅仅依靠工艺的发展来满足人们日益增长对处理器性能的要求是远远不够的。因此,提高软件编写效率并最终减少有效代码长度变得越来越重要。
在软件应用中,对堆栈的使用是很频繁的,比如函数中的参数值的保存,局部变量的保存等。现有技术中堆栈的出栈效率不高,极大的影响到了处理器的性能。
例如,在含有堆栈指针的情况下,编译器针对C*core架构编译出的出栈指令如下:
从上述C*core出栈操作的编译过程中的虚线框中内容可以看出,编译器在取出r4的堆栈指针后(r6中的值),根据C*core对堆栈指针的要求, 将r6的最低3位置成0(若低3位有值则此地址增加1),这样的话就增加了出栈时所需要的指令条数,降低了出栈速度。
发明内容
本发明要解决的问题是提供一种生成快速出栈的汇编代码的编译方法及编译器,尤其适用于32位嵌入式CPU--C*core的处理器架构及其指令集。
为解决上述技术问题,本发明采用的技术方案是:
一种生成快速出栈的汇编代码的编译方法,包含:
在对源程序进行预处理生成中间代码后,针对中间代码的堆栈操作,判断当前程序是否有出栈操作,并进行分类标记,同时提取出栈地址并进行保存;
若无出栈操作,输出汇编指令;
若有出栈操作,根据标记对其出栈地址进行分析,判断当前出栈地址是否符合C*core所规定的堆栈地址要求;
若符合,则以此出栈地址作为最终的出栈地址,输出汇编指令;
否则将出栈地址改写成为符合C*core对堆栈地址要求的出栈地址,输出汇编指令。
进一步的,将出栈地址改写成为符合C*core对堆栈地址要求的出栈地址的方法是针对出栈地址的属性:字、半字或者字节来计算出其真正所需要的堆栈地址的基地址,并将其值赋给原来的地址寄存器。
一种生成快速出栈的汇编代码的编译器,包括用于对源程序进行预处理并生成中间代码的前端处理模块和最终生成汇编代码的后端处理模块;所述后端处理模块增加:
出栈检测模块,用来在前端处理模块生成中间代码后,判断当前程序是否有出栈操作;
出栈地址处理单元,用来判断当前出栈地址是否符合C*core所规定的 出栈地址要求;若符合,则以此地址作为最终的出栈地址直接输出,否则将堆栈地址通过地址计算单元改写成为符合C*core对堆栈地址要求的堆栈地址。
本发明具有的优点和积极效果是:
经过本发明编译方法和编译器编译出来的出栈指令均要比以前编译器编译出来的汇编指令中出栈指令要少,而在程序的运行过程中,压栈出栈是经常使用的指令;因此,处理器所要执行的有效指令的条数要比以前少很多,从而提高了处理器的处理速度和性能。
附图说明
图1是本发明的编译方法的流程示意图;
图2是本发明的编译器的出栈检测模块的处理流程图;
图3是本发明的编译器的出栈地址处理单元的处理流程图。
具体实施方式
本发明的实施例是针对32位嵌入式CPU--C*core的处理器架构及其指令集的特点提出的一种生成快速出栈的汇编代码的编译方法和编译器,主要是针对简单的压栈出栈操作,不涉及到复杂的堆栈指针操作。下面结合附图对本发明的具体实施做详细说明。
本发明一种生成快速出栈的汇编代码的编译方法,如图1所示包含:
在对源程序进行预处理生成中间代码后,针对中间代码的堆栈操作,判断当前程序是否有出栈操作,并进行分类标记,同时提取出栈地址并进行保存;
本发明对上述步骤的一具体实施过程为,根据C*core处理器对其堆栈的要求和其指令集特点对中间代码中的堆栈操作进行属性标记处理。例如某个函数中没有压栈出栈操作,则将这段代码标记为NULL属性;如果该函数中只有简单的压栈出栈操作(没有堆栈指针),那么将其标记为PP_Simple 属性;再如果,该函数拥有堆栈指针的利用则将其标记为PP_Pointer属性等;提取其堆栈地址信息并依照一定的算法将堆栈出栈地址保存下来。
若无出栈操作,输出汇编指令;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津国芯科技有限公司,未经天津国芯科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410490577.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种防磨牙套组件
- 下一篇:一种半主动悬架ECU控制器软件在线升级系统与方法





