CN101957772B - 一种具有轻量级比较指令生成的编译方法 - Google Patents

一种具有轻量级比较指令生成的编译方法 Download PDF

Info

Publication number
CN101957772B
CN101957772B CN 200910088801 CN200910088801A CN101957772B CN 101957772 B CN101957772 B CN 101957772B CN 200910088801 CN200910088801 CN 200910088801 CN 200910088801 A CN200910088801 A CN 200910088801A CN 101957772 B CN101957772 B CN 101957772B
Authority
CN
China
Prior art keywords
state
intermediate code
generating
tree
comparison order
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 200910088801
Other languages
English (en)
Other versions
CN101957772A (zh
Inventor
周谦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing CEC Huada Electronic Design Co Ltd
Original Assignee
Beijing CEC Huada Electronic Design Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing CEC Huada Electronic Design Co Ltd filed Critical Beijing CEC Huada Electronic Design Co Ltd
Priority to CN 200910088801 priority Critical patent/CN101957772B/zh
Publication of CN101957772A publication Critical patent/CN101957772A/zh
Application granted granted Critical
Publication of CN101957772B publication Critical patent/CN101957772B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明是一种具有轻量级比较指令生成的编译方法。本编译方法的比较指令生成部分包括以下步骤:在生成语法树阶段赋值操作时,如果右边为常数,则判断高位是否为1,并在生成语法树和生成中间代码阶段将此状态进行传播,在生成汇编码阶段生成比较语句时,如果能够判断高位为1,则生成优化的比较指令,如果不能判定高位是否为1,则按照一般的原则去生成比较指令。该方法能够使编译器对比较指令生成正确,生成的代码量也较小。

Description

一种具有轻量级比较指令生成的编译方法
技术领域
本发明涉及编译器领域一种比较指令生成方法,涉及到编译器的前端语法树的生成,中端语法树到中间代码的翻译,和后端的代码生成部分,即涉及到生成语法树阶段,生成中间代码阶段和生成汇编码阶段。 
背景技术
编译器是开发人员编写程序的工具,它将开发人员编写的高级语言程序转换成低级的汇编语言。在转换过程中,一个重要的组成部分就是对比较指令的生成。 
在用户程序中,比如用C语言编写的程序,经常会使用if-then-else或者a>b?a:b等语句,这些就是比较指令。在编译器中,将比较指令转换为比较指令的判断语句,后面跟着比较判断指令的true分支语句和false分支语句,然后翻译成对应的汇编语句。生成汇编指令之后,判断语句在芯片上执行时,由硬件判断比较结果,并根据结果确定程序执行true分支语句还是false分支语句。 
编译器从结构上分为前端、中端和后端,阶段划分构成如图1。前端主要是命令行参数处理阶段,词法分析阶段和语法分析阶段,前端生成语法树作为输出,提供给中端作为输入。中端包括生成中间代码阶段和对中间代码进行优化阶段,中端生成优化的中间代码作为输出,提供给后端作为输入。后端包括,生成汇编码阶段,它将中间代码翻译成汇编指令。这样编译器就完成了将程序员写的高级语言转换为汇编语言的功能。 
本专利主要在编译器的前端、中端和后端针对比较指令的生成方法作优化。在编译器中比较指令分为大于、小于、大于等于、小于等于、等于和不等于这六大类。 
在目标机的汇编语言中,比较指令对应的汇编指令只能进行两边都是有符号或者都是无符号的比较。但是在程序员写的高级语言程序中,不只都是有符号数与有符号数比较,或者无符号数与无符号数比较,还有可能有符号数与无符号数比较。这样当高级语言程序中,有符号数与无符号数比较时,在他们的高位为1时,无论是翻译成无符号比较汇编指令,还是翻译成有符号比较汇编指令都有可能出错。例如,有符号的0x82与无符号的0x80相比,应该左边有符号的0x82小于右边无符号的0x80,无论翻译成有符号的比较指令,还是翻译成无符号的比较指令,都出错。这样就需要判断比较指令的两边变量或者常量的高位是否为1.,记录这些信息,在比较时依据这些信息和符号信息来判断比较指令的结果。 
有些编译器中,会将变量或者常量进行隐式转换,作扩展,比如8位的扩展成16位来比较,这样就不存在上面的问题了,但这样会增加一些隐式转换的指令。 
如果用指令来显式的判断变量或者常量高位是否为1,比如增加指令cmp.w R0,#0来判断高位是否为1,这样能保证比较指令的正确性,但会大大的增加指令的条数,因为每次比较都要进行这样的判断。 
发明内容
本发明目的在于在编译器中既保证比较指令生成的正确性,又使生成的汇编代码条数尽可能的少。本发明的目的通过以下步骤实现:将程序命令行参数进行处理;将进行命令行参数处理后的程序进行语言预处理;将进行语言预处理后的程序进行词法分析;将进行词法分析后的程序进行语法分析;将进行语法分析后的程序生成语法树;生成中间代码步骤;将中间代码进行优化并生成汇编码。其中在生成语法树步骤赋值语句中记录变量高位是否为1的状态,并在生成语法树和生成中间代码步骤中通过数据流进行传播,在生成汇编码步骤生成比较指令时,判断变量的高位是否为1,并据此进行优化的比较指令生成。在生成语法树阶段在赋值语句中记录高位是否为1,步骤如下: 
(1)如果赋值语句中右边是常数,则根据左边的变量类型,判断右边常数的高位是否为1,分别记录这两种状态。如果左边的变量为char型,且不是指针,则右边的常数与0×80相或之后不为0,则高位是1,并记录状态,否则高位不是1,也记录此时的状态。如果左边的变量为int型或者short型,且不是指针,则右边的常数与0×8000相或之后不为0,则高位是1,并记录状态,否则高位不是1,也记录此时的状态。如果左边的变量为long型或者指针类型,则右边的常数与0×80000000相或之后不为0,则高位是1,并记录状态,否则高位不是1,也记录此时的状态。左边的变量不为标量时,比如数组或者结构型变量,通过遍历语法树,获取此变量的最外围的变量,a.asub.b[4]的最外围变量为a 
(2)(2)如果赋值语句右边不是常数,赋值语句左边的状态等于赋值语句右边的高位的状态。在生成语法树和生成中间代码阶段通过数据流进行传播,步骤如下 
(1)在生成语法树阶段,除了赋值操作,设置其他操作的返回值的类型的高位的状态。比如加法操作,结果值的高位状态不确定是否为1,则记录此时状态为不确定。如果是逻辑非操作,结果值为char型,高位确定不为1,并记录此时的状态。 
(2)在生成中间代码阶段,在语法树翻译到中间代码的过程中,对于结构体操作或者数 组操作的翻译时,传播高位的状态。这是因为标量的高位状态通过该标量对应的符号和语法树来传播,非标量的结构体或者数组就需要在转换时,将高位的状态传播给非标量的最外围的变量。 
(3)进行传播的原因是步骤1只是记录了赋值语句中左边变量的高位的状态,其他语句中引用此变量时,就需要此变量的状态记录并加以传播,才能识别变量的高位的状态。 
在生成汇编码阶段,生成比较指令的流程如图3。 
如果当前中间代码的左树或者右树高位为1时,通过后向的数据流分析,确定其高位是否为1。因为本方法中记录的高位状态是离当前比较指令最近的变量的状态,比如a与3比较大小,a的状态是离当前比较指令最近的对a的赋值的状态,但是这条赋值语句,不一定一定走到,所以需要通过后向的数据流判断来确定其高位是否是1。如果高位确定为1,则生成优化的比较指令,因为高位为1,很多情况下可以直接判定比较指令的结果,比如有符号类型的a高位为1,与一个无符号数比较时,一定是小于。又比如无符号类型的a高位是1,与一个有符号数比较时,一定是大于。如果高位不确定是1,则按照常规的比较指令规则,生成比较指令。 
附图说明
图1编译器阶段划分构成图 
图2比较指令生成流程图 
图3生成汇编码阶段比较指令生成流程图 
具体实施方式
实现本发明需要先建立数据结构,表示变量高位是否为1的状态,该状态值为1时,表示高位确定为1,状态值为2时,表示高位确定不为1,状态值为0时,表示高位不确定是否为1。 
实现本发明,还需要建立变量与icode(本编译器中的中间代码的数据结构)的映射关系,原来一个变量在程序中的所有出现都对应于一个icode,要改为变量的每次出现对应一个新的icode,即多对一,变为一对一。 
建立了适当的数据结构之后,就可以参照本发明附图中的流程,在编译器中实现轻量级的比较指令生成方法。包括以下步骤: 
将程序命令行参数进行处理步;将进行命令行参数处理后的程序进行预处理;将进行语言预处理后的程序进行词法分析、语法分析;将进行词法分析、语法分析后的程序生成语法树;生成中间代码步骤;将中间代码进行优化并生成汇编码;其中在生成语法树步骤赋值语句中记录变量高位是否为1的状态,包括以下步骤: 
(1)如果赋值语句中右边是常数,则根据左边的变量类型,判断右边常数的高位是否为1,分别记录这两种状态。 
(2)如果赋值语句右边不是常数,赋值语句左边的状态等于赋值语句右边的高位的状态。在生成语法树和生成中间代码步骤中通过数据流进行传播,包括以下步骤: 
(1)在生成语法树步骤中,除了赋值操作,设置其他操作的返回值的类型的高位的状态。 
(2)在生成中间代码步骤中,语法树翻译到中间代码的过程中,传播高位的状态。在生成比较指令时,判断变量的高位是否为1,并据此进行优化的比较指令生成。如果当前中间代码的左树或者右树高位为1,通过后向的数据流分析,确定其高位是否为1,如果高位为1,则生成优化的比较指令;否则,按照常规的比较指令规则,生成比较指令。 
本发明适用于嵌入式处理器上的编译器,简单高效,易于实现。一般的编译器中比较指令生成方法中或者采用显式插入比较汇编指令,或者对变量进行扩展的方式实现,这两种方法的缺点是生成的汇编代码的条数较多。由于本编译器面向嵌入式处理器,cos(智能卡操作系统)程序比较指令比较多,对代码条数要求较高,因此本发明具有简单高效的特点。 

Claims (1)

1.一种具有轻量级比较指令生成的编译方法,其特征在于,包括:
将程序命令行参数进行处理步骤;
将进行命令行参数处理后的程序进行预处理的语言预处理步骤;
将进行语言预处理后的程序进行词法分析步骤;
将进行词法分析后的程序进行语法分析步骤;
将进行语法分析后的程序生成语法树步骤;
生成中间代码步骤;
将中间代码进行优化并生成汇编码的步骤;
其中在生成语法树步骤赋值语句中记录变量高位的状态是否为1,并在生成语法树和生成中间代码步骤之间通过数据流传播所述的变量高位状态,在生成汇编码步骤生成比较指令时,判断变量的高位状态是否为1,并据此进行优化的比较指令生成;
所述在生成语法树步骤赋值语句中记录变量高位的状态是否为1,包括以下步骤:
(1)如果赋值语句中右边是常数,则根据左边的变量类型,判断右边常数的高位状态是否为1,分别记录高位状态为1或高位状态不为1的状态;
(2)如果赋值语句右边不是常数,赋值语句左边的高位的状态等于赋值语句右边的高位的状态;
在生成语法树和生成中间代码步骤之间通过数据流传播所述的变量高位状态,包括以下步骤:
(1)在生成语法树步骤中,除了赋值操作,设置其他操作的返回值的类型的高位的状态;
(2)在生成中间代码步骤中,语法树翻译到中间代码的过程中,传播高位的状态;
生成汇编码步骤中,如果当前中间代码的左树或者右树高位为1,通过后向的数据流分析,确定其高位状态是否为1,如果高位状态为1,则生成优化的比较指令;否则,按照常规的比较指令规则,生成比较指令。
CN 200910088801 2009-07-16 2009-07-16 一种具有轻量级比较指令生成的编译方法 Expired - Fee Related CN101957772B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910088801 CN101957772B (zh) 2009-07-16 2009-07-16 一种具有轻量级比较指令生成的编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910088801 CN101957772B (zh) 2009-07-16 2009-07-16 一种具有轻量级比较指令生成的编译方法

Publications (2)

Publication Number Publication Date
CN101957772A CN101957772A (zh) 2011-01-26
CN101957772B true CN101957772B (zh) 2013-01-02

Family

ID=43485114

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910088801 Expired - Fee Related CN101957772B (zh) 2009-07-16 2009-07-16 一种具有轻量级比较指令生成的编译方法

Country Status (1)

Country Link
CN (1) CN101957772B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017107154A1 (zh) * 2015-12-24 2017-06-29 华为技术有限公司 一种矩阵运算的源到源转换方法及源到源编译器
CN111176785B (zh) * 2019-12-02 2023-08-29 东巽科技(北京)有限公司 一种基于操作链接的机器指令码取词方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1920771A (zh) * 2005-08-23 2007-02-28 中国科学院计算技术研究所 一种支持用规则记录变量访问专用寄存器组的处理方法
CN101034361A (zh) * 2007-01-18 2007-09-12 浙江大学 一种基于指令代价的编译器优化代码生成方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8037466B2 (en) * 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1920771A (zh) * 2005-08-23 2007-02-28 中国科学院计算技术研究所 一种支持用规则记录变量访问专用寄存器组的处理方法
CN101034361A (zh) * 2007-01-18 2007-09-12 浙江大学 一种基于指令代价的编译器优化代码生成方法

Also Published As

Publication number Publication date
CN101957772A (zh) 2011-01-26

Similar Documents

Publication Publication Date Title
Ye et al. Scalehls: A new scalable high-level synthesis framework on multi-level intermediate representation
US7882462B2 (en) Hardware definition language generation for frame-based processing
Behrmann et al. Uppaal-present and future
US8918769B2 (en) Application of optimization techniques to intermediate representations for code generation
US6021266A (en) Method of designing an integrated circuit using scheduling and allocation with parallelism and handshaking communication, and an integrated circuit designed by such method
Seawright et al. Clairvoyant: A synthesis system for production-based specification
US20130283250A1 (en) Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces
US20120117535A1 (en) System and method for computational unification of heterogeneous implicit and explicit processing elements
WO2023193547A1 (zh) 用于生成和存储电路仿真过程中的波形数据的方法、电子设备和存储介质
US7478376B2 (en) Computer program code size partitioning method for multiple memory multi-processing systems
KR101275727B1 (ko) 스테이트먼트를 재구성하는 방법 및 그 기능을 구비한컴퓨터 시스템
CN113553057B (zh) 一种针对不同架构的gpu进行并行计算的优化系统
CN101957772B (zh) 一种具有轻量级比较指令生成的编译方法
CN105302551B (zh) 一种大数据处理系统的正交分解构造与优化的方法及系统
CN116225452A (zh) 一种基于多层级中介码的图神经网络编译优化方法
CN113721899B (zh) 面向gpdsp的轻量级高效汇编代码编程方法及系统
CN103440155B (zh) 一种数字信号处理器的编译器
US20150277868A1 (en) Declared variable ordering and optimizing compiler
US7694285B2 (en) Relaxed and extended delegates
Myers et al. Technology mapping of timed circuits
Kovačević et al. A solution for automatic parallelization of sequential assembly code
CN116560667B (zh) 一种基于预编译延迟执行的拆分调度系统及方法
Brandt et al. From Synchronous Guarded Actions to SystemC.
JP4949789B2 (ja) コンパイルプログラム、コンパイル装置、及びコンパイル方法
CN112579088A (zh) 面向异构混合编程的一站式程序编译方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP02 Change in the address of a patent holder

Address after: 102209 Beijing, Beiqijia, the future of science and technology in the south area of China electronic network security and information technology industry base C building,

Patentee after: Beijing CEC Huada Electronic Design Co., Ltd.

Address before: 100102 Beijing City, Chaoyang District Lize two Road No. 2, Wangjing science and Technology Park A block five layer

Patentee before: Beijing CEC Huada Electronic Design Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130102

Termination date: 20200716

CF01 Termination of patent right due to non-payment of annual fee