System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及一种申威架构基于重定位的快速寻址方法、装置及介质,属于编译器优化。
技术介绍
1、编译器是将高级编程语言转换成机器代码的工具,转换过程通常分为4个阶段:预处理、编译、汇编、链接。现有的编译优化方法对这4个阶段进行优化以提高程序性能,其中,链接阶段的优化十分重要。
2、传统的链接优化方法注重正确性,鲁棒性和向后兼容性,导致在性能上会有一定的损失。现在链接时间和程序性能是程序开发、调试的主导因素,现有的大部分链接优化方法通过利用并行数据结构或对链接器采用优化算法来实现链接速度和性能的提升。
3、在计算机系统中,当程序中一个模块引用一个外部定义的变量或函数时,汇编器对引用的外部变量或函数的位置是未知的,需要重定位表来引导链接器修正目标文件中的地址引用。申威处理器平台在处理访问全局变量或者全局函数的程序时,采用的是基于全局偏移表的间接寻址,在寻址范围较小时可能会存在冗余指令,从而增加了程序的开销。
技术实现思路
1、本专利技术的目的在于克服现有技术中的不足,提供一种申威架构基于重定位的快速寻址方法、装置及介质,能够在链接阶段对链接器进行优化,将所有文件链接到可执行文件中并进行全局性能分析,实现跨文件的全局性优化。
2、为达到上述目的,本专利技术是采用下述技术方案实现的:
3、第一方面,本专利技术提供了一种基于重定位的快速寻址方法,包括以下步骤:
4、获取汇编文件;
5、提取所述汇编文件中的所有重定位指令;
6、获取所有重定位指令的类型;
7、根据所述所有重定位指令的类型对重定位指令进行优化,得到优化后的重定位指令。
8、进一步的,根据所述所有重定位指令的类型对重定位指令进行优化,包括:
9、进行模块外的全局变量优化,将ldl访存指令优化为ldi运算指令;
10、和/或,进行函数跳转优化,将间接跳转优化为直接跳转;
11、和/或,进行动态模式转静态模式优化,将动态线程本地存储优化为静态线程本地存储模式。
12、进一步的,进行模块外的全局变量优化,将ldl访存指令优化为ldi运算指令,包括:
13、步骤a1.判断当前重定位指令的类型是否为literal,若是,执行步骤a2,若不是,执行步骤a5。
14、步骤a2.判断下一条重定位指令的类型是否为lituse,若是,执行步骤a3,若不是,执行步骤a5。
15、步骤a3.判断当前重定位指令的符号距离全局指针的偏移是否在16位有符号表示范围内,若是,执行步骤a4,若不在16位有符号表示范围内,执行步骤a5。
16、步骤a4.将当前重定位指令的使用literal的类型的ldl指令优化为使用gprel16的类型的ldi指令,之后执行步骤a5。
17、步骤a5.判断是否遍历完所有的重定位指令的类型,若没有遍历完,跳转到下一条重定位指令,执行步骤a1,若遍历完,结束流程。
18、进一步的,进行函数跳转优化,将间接跳转优化为直接跳转,包括:
19、步骤b1.判断当前重定位指令的类型是否为literal,若是,执行步骤b2,若不是,执行步骤b6。
20、步骤b2.判断下一条重定位指令的类型是否为lituse,若是,执行步骤b3,若不是,执行步骤b6。
21、步骤b3.判断当前重定位指令的类型是否用于函数调用,若是,执行步骤b4,若不是,执行步骤b6。
22、步骤b4.判断当前重定位指令的跳转距离是否在(-4mb,4mb)范围内,若是,执行步骤b5,若不是,执行步骤b6。
23、步骤b5.将当前重定位指令的类型优化为braddr的类型,并且将call指令转化为bsr或者br指令,之后后执行步骤b6。
24、步骤b6.是否遍历完所有的重定位指令,若没有遍历完,跳转到下一条重定位指令,执行步骤b1,若遍历完,结束流程。
25、进一步的,将call指令转化为bsr或者br指令,包括:
26、若要将下一条指令地址压入转移预测栈中,则将call指令转换为bsr,否则将call指令转换为br。
27、进一步的,进行动态模式转静态模式优化,将动态线程本地存储优化为静态线程本地存储模式,包括:
28、步骤c1.判断当前重定位指令的类型是否为tlsgd或tlsldm,若是,执行步骤c2,若不是,执行步骤c9。
29、步骤c2.判断当前重定位指令之后的第二条重定位指令的类型是否为literal,若是,执行步骤c3,若不是,执行步骤c9。
30、步骤c3.判断当前重定位指令之后的第三条重定位指令的类型是否与当前的重定位指令的类型相同,若是,执行步骤c4,若不是,执行步骤c9。
31、步骤c4.判断当前重定位指令之后的第四条重定位指令的类型是否为gpdisp,若是,执行步骤c5,若不是,执行步骤c9。
32、步骤c5.判断当前重定位指令的线程本地存储符号是否是全局动态符号,若是,执行步骤c6,若不是,执行步骤c7。
33、步骤c6.判断当前重定位指令的线程本地存储符号距离线程指针基址的偏移是否在16位有符号表示范围之内,若是,执行步骤c7,若不是,执行步骤c8。
34、步骤c7.将当前重定位指令的类型优化为gottprel的类型,之后执行步骤c9。
35、步骤c8.将当前重定位指令的类型优化为tprelhi+tprello的类型,之后执行步骤c9。
36、步骤c9.是否遍历完所有的重定位指令的类型,若没有遍历完,跳转到下一条重定位指令,执行步骤c1,若遍历完,结束流程。
37、进一步的,所述基于重定位的快速寻址方法基于申威处理器,所述申威处理器的重定位类型的功能描述如下表1所示:
38、表1申威处理器重定位类型功能描述
39、 重定位类型 描述 gpdisp 从当前位置加载gp的值 gprel16 相对gp16位偏移 literal got条目相对gp的16位偏移 lituse 与literal带序号的重定位配对使用,用于链接器根据最终的符号地址做优化 本文档来自技高网...
【技术保护点】
1.一种基于重定位的快速寻址方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于重定位的快速寻址方法,其特征在于,根据所述所有重定位指令的类型对重定位指令进行优化,包括:
3.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,进行模块外的全局变量优化,将ldl访存指令优化为ldi运算指令,包括:
4.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,进行函数跳转优化,将间接跳转优化为直接跳转,包括:
5.根据权利要求4所述的基于重定位的快速寻址方法,其特征在于,将call指令转化为bsr或者br指令,包括:
6.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,进行动态模式转静态模式优化,将动态线程本地存储优化为静态线程本地存储模式,包括:
7.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,所述基于重定位的快速寻址方法基于申威处理器,所述申威处理器的重定位类型的功能描述如下表1所示:
8.一种基于重定位的快速寻址装置,其特征在于,包括:
9
10.一种计算机可读存储介质,其上存储有计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时,实现权利要求1-7任一项所述的基于重定位的快速寻址方法的步骤。
...【技术特征摘要】
1.一种基于重定位的快速寻址方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于重定位的快速寻址方法,其特征在于,根据所述所有重定位指令的类型对重定位指令进行优化,包括:
3.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,进行模块外的全局变量优化,将ldl访存指令优化为ldi运算指令,包括:
4.根据权利要求2所述的基于重定位的快速寻址方法,其特征在于,进行函数跳转优化,将间接跳转优化为直接跳转,包括:
5.根据权利要求4所述的基于重定位的快速寻址方法,其特征在于,将call指令转化为bsr或者br指令,包括:
6.根据权利要求2所述的基于重定位的快速寻址方法,其...
【专利技术属性】
技术研发人员:羊瑞,朱肖炜,姜军,李贺龙,顾晓阳,付叶蔷,吕勇帅,
申请(专利权)人:无锡先进技术研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。