针对DSP指令生成与二进制翻译的汇编器实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中图分类号:TP314文献标识码:A文章编号:1009-2552(2011)03-0047-04
针对DSP指令生成与二进制翻译的汇编器实现
肖贺,刘佩林
(上海交通大学电子信息与电气工程学院,上海200240)
摘要:DSP指令生成与优化和二进制翻译是现代编译工具值得关注的热点问题。针对DSP指令的特点提出一种通用的DSP指令生成(支持VLIW指令)与二进制翻译技术,并应用于GNU 汇编器(GAS)。包含该技术的汇编器PCA(Post Compilation Assembler)先将输入的汇编指令转化成类似LISP的中间语言。PCA通过对此中间语言分析以及窥孔优化,最终生成高质量的目标平台DSP代码。
关键词:DSP指令生成;VLIW指令;二进制翻译;编译后优化;窥孔优化
Implementation of assembler for DSP code generation
and binary translation
XIAO He,LIU Pei-lin
(School of Electronic Information and Electrical Engineering,Shanghai Jiaotong University,Shanghai200240,China) Abstract:DSP code generation and optimization,along with binary translation,has become a well-concerning focus of the modern tool chain.This paper,on account of the specialties of DSP instruction,proposed a general method of DSP code generating(include VLIW)and binary translation,which applied in GNU assembler(GAS).GAS with this technology(called PCA)first translates source assembly instructions into LISP-like intermediate representation(IR);by analyzing the behaviors of the IR statements and employing post-compilation techniques such as peephole optimization,PCA will produce DSP codes of high quality suitable for the target platform.
Key words:DSP code generation;VLIW;binary translation;post-compilation optimization;peephole optimization
0引言
在现代编译工具的研究中,为了尽可能地让编译器编译出适应于特定DSP架构的代码,设计者提出一种编译后优化的方法来控制编译器进行机器相关的优化。编译后优化的方法有很多,窥孔优化便是其中很重要的一种[1]。窥孔优化的基本思想是考察窥孔窗中的一组指令(一般是3 5个),对这组指令进行局部优化,然后滑动窗的位置,对下一组指令执行优化操作直到所有指令扫描结束。目前成熟的DSP编译器通常会采用窥孔优化技术来生成与机器架构相关的特殊指令和优化代码[2-3]。
此外,现代工具链有一个很有前景的应用称之为二进制翻译,也就是说,某一架构的汇编二进制程序通过特定的工具能够被翻译为能在另一种架构上执行的可执行代码,同时保证二进制程序不会有太明显的性能降低。据研究[4-5]表明,窥孔优化十分适用于二进制翻译。
为了满足上述两方面的要求,提出一种采用编译后优化技术生成特定DSP指令和完成二进制翻译的汇编器PCA,它将窥孔优化技术从编译阶段推迟到汇编链接阶段。这样的编译结构有三方面的好处:首先,该汇编器结构为二进制翻译创造了可
收稿日期:2010-10-27
作者简介:肖贺(1986-),男,硕士研究生,主要研究方向为DSP 处理器体系架构及其编译器汇编器实现。
—
74
—
能。其次,该结构提出优化技术可以用于不同高级编程语言下的程序优化,也能适用于高级语言与汇编语言混合编程的情况。最后,在编译阶段得不到的许多程序相关信息例如符号信息,变量存储形式(内存或是寄存器)可以在汇编阶段获得,能够更加有效地进行优化。
1整体设计
提出的汇编器PCA首先将汇编代码(编译器生成或者手写汇编代码)翻译转化成一种通用的中间语言。PCA接着采用基于窥孔优化的指令翻译生成算法对中间语言进行分析与优化,最终生成所需要的目标代码。从流程框架和中间语言匹配两方面对PCA展开具体讨论。
1.1PCA流程框架
PCA是基于GNU汇编器GAS而开发的,而GAS是以行为单位进行扫描并生成最终二进制代码。这种传统的汇编器结构不适合进行二进制翻译和构造DSP指令,PCA对此结构进行了相应的调整。PCA的工作原理如图1所示
。
图1PCA工作流程图
源汇编代码首先通过PCA的解析单元转换成中间语言IR(Intermediate Representation),同时重建程序控制流信息,并生成符号表。被转换过的中间语言通过窥孔优化算法与预先定义的DSP架构指令库中的模式进行匹配与选择变换,同时更新优化后IR序列的符号表。最后,PCA将最终的中间语言序列和符号表生成可执行文件。
1.2中间语言IR描述与匹配
PCA采用类似于GCC中RTL语言[6]的IR结构作为其中间语言,如图2所示。可以看出,IR结构包含两个部分,操作部分opcode和操作数部分operands
。
图2IR结构图
其中,opcode中的CODE域指定当前中间语言语句完成的行为,PCA定义了一组标准名来指定一些通用的操作,例如PLUS表示加法,MINUS表示减法,SHIFT表示移位操作等等。CODE集合亦可以根据特定的DSP指令架构而进行扩展。IR_TYPE 域标识指令模板的分类,该分类使用于VLIW模板中。operands部分指定特定操作下操作数的特征,其中第一个操作数为目标操作数,其他为源操作数。它包含TYPE,operandx和WIDTH三个域。TYPE 域指定操作数的类型,例如REG表示普通寄存器,SPR表示特殊寄存器,MEM内存,以及IMM表示立即数。operandx域标识操作数的名称,例如REG:r7表示某条语句的一个操作数是寄存器型,名称是r7。不同的IR语句中相同的操作数名称表明了他们对同一个操作数进行了操作。WIDTH域指定了操作数的位宽。
2具体实现
给出了PCA的工作流程以及介绍了中间语言。结合DSP指令特点来详细说明PCA生成DSP指令代码的过程。
2.1控制流重建
重建输入程序的控制流对于汇编器来说是一个比较大的挑战。为了有效地优化和解析源汇编代码的功能,PCA首先需要将直接转换过来的IR语句分割成不同的基本块。具体做法是PCA找出跳转语句,将它们作为基本块最后一条语句,并将它们的跳转目标作为基本块的第一条语句,以此来分割IR 程序。接着通过分析基本块中各语句的OPERAND 域标识得它们的依赖关系后,PCA以这些被分割的基本块为基本单元解析并生成DSP指令。
2.2指令翻译生成算法
指令翻译生成算法的基本原理是IR中间语句匹配,所谓的中间语句匹配,是指当汇编指令经过解释器转换成中间语句后,该语句的OPCODE域,TYPE域和WIDTH域和某个预先定义的IR模板相一致。IR支持嵌套结构以进行复杂的窥孔优化,即一个IR语句的操作数可以是一条IR语句结构。由于IR语句的作用是改变目标操作数的值,那么IR 语句本身可以等价于一个与目标操作数相同的一个操作数。
一般来说,DSP指令可以大致分为两类,一类称为增强指令,能够完成很强大的运算操作,另一类是VLIW指令,包含多个发射槽。PCA预先定义复杂的IR模板,通过IR语句合并算法可以实现第一类
—
84
—