支持大整数数据类型和运算符的编译方法技术

技术编号:27465312 阅读:13 留言:0更新日期:2021-03-02 17:27
本发明专利技术公开了一种支持大整数数据类型和运算符的编译方法,基于GCC编译器,包括以下步骤:对GCC编译器做如下配置:扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏;扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析。本发明专利技术既大大提高了运算的进度,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能。改善了计算机运行的性能。改善了计算机运行的性能。

【技术实现步骤摘要】
支持大整数数据类型和运算符的编译方法


[0001]本专利技术属于高性能计算编译
,尤其涉及一种支持大整数数据类型和运算符的编译方法。

技术介绍

[0002]随着计算机信息安全要求的不断提高,密码学被大量应用到生活中,RSA、ECC等公钥密码算法和数字签名算法都建立在大整数的运算的基础上。大整数还广泛应用于科学计算中,比如计算更精确的π的值,构建高精度的浮点数据类型。IEEE 754标准浮点类型在逻辑上是由整数型的尾数、指数和符号位组成,尾数的精度决定了浮点数的精度,用大整数表示浮点数的尾数则可以实现更高精度的浮点数。
[0003]大整数的运算速度对这些算法的高效实现起着重要作用,而计算机的字长限制对信息安全中大整数的操作,带来了巨大困难。
[0004]当前的主流编译器,如Intel的商用icc编译器以及开源的gcc编译器,所能编译处理的基础数据类型的最大宽度为机器所能支持的字长。此处基础数据类型是指char、int、long等类型关键字所能表示的数据类型,基础数据类型变量在编译器上只需要用一条指令就能完成存储访问或者运算操作。
[0005]目前,针对长度超过机器字长的大整数,一般的编程实现方式是在程序中对大整数先分割(如以32bit或64bit为单位)后再保存到数组或者结构体中,或者直接调用GMP库等大整数库的初始化函数来为大整数申请存储空间,相关大整数运算都是通过GMP库等大整数运算函数调用的形式完成的,程序员需要实现理解这些接口函数具体功能才能完成大整数的编程,而不能使用统一的算术运算和逻辑运算符(如+、-、>、<<、|等),而且在GMP库函数的执行过程中需要动态申请和释放空间,影响程序的运行时性能。因此,已有的大整数处理方式存在变量声明和运算不够直观,程序执行性能受限等问题。

技术实现思路

[0006]本专利技术目的在于提供一种支持大整数数据类型和运算符高效编译方法,该高效编译方法既大大提高了运算的进度,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能。
[0007]为达到上述目的,本专利技术采用的技术方案是:一种支持大整数数据类型和运算符的编译方法,其特征在于:基于GCC编译器,包括以下步骤:对GCC编译器做如下配置:扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏,新增编译器内部头文件完成大整数类型的声明,以及在大整数声明语句中使用关键字__attribute__为大整数类型新增了ccc_bint类型的属性,该ccc_bint类型属于大整数数据类型特有的标志,在后续编译器分析过程中,将通过识别该属性进行相应的语法分析与语义转换;增加大整数输出语句的转换功能:通过逐一分析语句中要打印的变量是否为大整数数
据类型,如果是,则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;建立大整数数据类型预定义宏描述规则;扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析,此语法分析操作进一步包括以下步骤:S1、根据是否存在大整数数据类型关键字ccc_bint声明,判断是否为大整数变量的初始化语句,如果是,采用编译器原有的数组初始化方法编译处理大整数初始化语句,否则,执行下一步;S2、根据赋值语句中左值、是否为大整数数据类型中左值的数据类型是否包括具有ccc_bit属性,判断是否包含大整数类赋值表达式,如果是,则编译生成大整数赋值处理库函数调用语句,否则,执行下一步;S3、根据运算表达式的运算符左右两个操作数的数据类型,判断是否为大整数类运算表达式,如果是,编译生成大整数运算的库函数调用语句,否则,执行下一步;S4、通过逐一分析语句中要打印的变量,判断是否为大整数数据类S4、通过逐一分析语句中要打印的变量,判断是否为大整数数据类型,如果是则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;GCC编译器对源程序预处理阶段:处理扩展的编译器内部头文件,生成大整数相关的类型定义;GCC编译器识别大整数数据类型关键字ccc_bint,并作为大整数数据类型属性通过词法分析;GCC编译器根据所述语法分析操作对遇到的赋值语句、类型转换语句、运算语句,打印语句进行语法规则判断;中间代码生成,增加对大整数运算的优化编译处理;目标代码生成;可执行代码。
[0008]上述技术方案中进一步改进的技术方案如下:上述方案中,所述大整数数据类型为1024bit、2048bit、或者4096bit宽度的大整数。
[0009]由于上述技术方案的运用,本专利技术与现有技术相比具有下列优点:本专利技术支持大整数数据类型和运算符的编译方法,其既大大提高了运算的,又提高了对计算机系统资源利用的效率,改善了计算机运行的性能;实现了大整数运算接口,这些接口在程序编译过程中被调用,以替换大整数的初始化和运算等操作。而且,本方法中,大整
数类型数据的存储空间都是在编译过程中静态分配的,与大整数相关的操作在执行时无需额外申请或释放内存空间,因此相比当前GMP库函数需要在函数实现中动态申请和释放空间的做法,更为高效,本专利技术还支持使用算术运算符和逻辑运算符而非复杂函数调用完成大整数运。
附图说明
[0010]附图1为本专利技术编译方法的流程图;附图2为本专利技术编译器在进行编译处理时遇到的大整数相关的操作时的处理方法。
具体实施方式
[0011]在本专利的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本专利技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本专利技术的限制;术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性;此外,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利的具体含义。
[0012]下面结合实施例对本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种支持大整数数据类型和运算符的编译方法,其特征在于:基于GCC编译器,包括以下步骤:对GCC编译器做如下配置:扩展GCC编译器内部预定义宏,增加大整数数据类型的预定义宏,新增编译器内部头文件完成大整数类型的声明,以及在大整数声明语句中使用关键字__attribute__为大整数类型新增了ccc_bint类型的属性,该ccc_bint类型属于大整数数据类型特有的标志,在后续编译器分析过程中,将通过识别该属性进行相应的语法分析与语义转换;增加大整数输出语句的转换功能:通过逐一分析语句中要打印的变量是否为大整数数据类型,如果是,则将该变量修改为该变量的地址,并在其后追加大整数长度作为打印参数,并在分析结束后将普通打印函数调用替换为大整数打印函数函数;如果所有要打印的变量均不为大整数类型,则编译器使用常规编译方法编译处理其他非大整数相关的代码;建立大整数数据类型预定义宏描述规则;扩展GCC编译器的关键字,增加大整数数据类型关键字ccc_bint,并利用编译器的attribute机制来设置大整数类型属性;扩展GCC编译器前端,增加对大整数数据类型关键字ccc_bint的识别,使得编译器在词法分析阶段可以通过大整数数据类型相关程序的词法分析;扩展GCC编译器前端,增加对大整数数据类型关键字表达式的语法分析操作,使得编译器为大整数数据类型关键字相关的赋值表达式、运算表达式、初始化表达式等进行正确的语法分析,此语法分析操作进一步包括以下步骤:S1、根据是否存在大整数数据类型关键字ccc_bint声明,判断是否为大整...

【专利技术属性】
技术研发人员:方燕飞杨小川文延华董恩铭李雁冰何王全
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:

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

1